一、概述
1.内存:
存放数据,为了缓和CPU与硬盘之间的速度差异,程序执行前会先放入内存中再让CPU处理。
由存储单元(存放数据的最小单元,每个单元都会对应一个地址)构成
2.常用数量单位:
1K(千)=2的10次方 1M(兆)=2的20次方
1G(千兆)=2的30次方
二、进程运行的基本原理
1.高级语言(.c) ——>二进制代码指令(.obj操作码和地址码):
会告诉CPU去内存的哪个地址读写数据,并对数据做什么操作
此时的地址默认从#0开始连续存放所形成的地址。
2.编译、链接——>可执行文件/装入模块(.exe):
指令此时的地址是逻辑地址(相对地址),即相对于进程的起始地址而言的地址
3.需要进行地址转换(相对地址——>物理地址)才能装入内存中
有三种装入方式:绝对装入、可重定位装入、动态运行时装入
三、装入内存方式
1.绝对装入
在编译时将逻辑地址——>绝对地址(物理地址)
特点:
首先要知道装入模块在内存中开始存放的位置,且只适用于单道程序环境。
2.可重定位装入(静态重定位)
地址变换是在装入时一次完成的
特点:
要求分配的地址空间连续,分配其要求的全部内存空间,一次全部装入内存;
程序运行期间不能再移动,也不能申请内存空间
3.动态运行时装入
程序真正执行时才装入内存,增加一个重定位寄存器(存放装入模块的起始位置),通过重定位寄存器实现地址转换。
可访问地址=逻辑地址+寄存器中的地址
特点:
允许程序在内存中发生移动,可将程序分配到不连续的存储区中,根据动态需要分配内存。
四、链接方式
1.静态链接:
在程序运行之前将各目标模块及其所需库函数连接成一个完整的可执行文件(装入模块)
2.装入时动态链接:
将各目标模块装入内存时,边装入边链接
3.运行时动态链接:
程序执行需要时才进行链接
五、整个过程