第三章 内存管理
程序重定位
在编译形成可执行程序时,用到的地址都是从0开始的相对地址,也被称为逻辑地址。但被加载到内存后可能使用任意一块空闲地址,所以需要将逻辑地址转化成内存中实际的物理地址,即重定位。
有以下几种解决方法:
编译时重定位:需要在编译时确定哪块内存空间空闲,且在装入前不允许使用(用于执行固定任务的计算机系统,如嵌入式系统)
载入时重定位:在程序载入时,根据初始内存地址修改程序里的逻辑地址,但如果进程阻塞换出内存后换入时的地址不一定是之前的地址,造成错误
运行时重定位(PC机使用):在指令执行时才将逻辑地址转化为物理地址,取出指令—修改地址(存储管理部件MMU计算)—执行指令
基地址存在PCB中,在内存基地址修改时更新,在执行时加载到寄存器中使MMU修改地址
分段
程序由若干段组成,每段都有各自的用途
- 代码段:程序指令形成的段,只读
- 数据段:存放程序使用的数据,可读可写
- 栈:实现函数调用,通常只能向下(低地址)增长
- 函数库:include的函数库,可有可无

由于各个段有不同的语义及限制操作,所以需要进行区分。