操作系统-存储器管理
主存储器与寄存器
- 主存储器
简称内存或主存。
- 寄存器
寄存器具有与处理机相同的速度,完全能与CPU协调工作。
程序的装入和连接
用户程序要在系统中运行,必须先将它装入内存,然后再将其转变为一个可以执行的程序,通常要经过一以下几个步骤。
- 编译,由编译程序(Compiler)对用户源程序进行编译,形成若干个目标模块(Object Module)
- 链接,由链接程序(Linker)将编译后形成的一组目标模块以及它们所需要的库函数链接在一起,形成一个完整的装入模块(Load Module);
- 装入,由装入程序(Loader)将装入模块装入内存
对换Swapping
对换的类型
每次对换时,都是将一定数量的程序或数据换入或还出内存。根据每次对换时所对换的数量,可将对换分为如下两类:
- 整体对换。
- 页面(分段)对换。对换的是进程的一个“页面”或“分段”为单位进行的。
对换空间的管理
进程的换出与换入
- 进程的换出
- 选择被换出的进程。会检查所有驻留在内存中的进程,首先选择处于阻塞或随眠状态的进程,当有多个这样的进程时,应当选择优先级最低的进程作为换出进程。如果系统中已无阻塞进程,而现在的内存空间仍不足以需要,会选择将优先级最低的就绪进程换出。
- 进程换出过程。在对换换出时,只能换出非共享的程序和数据段,对于那些共享的程序和数据段,只要有进程需要它,就不能被换出。在进行换出时,应先对申请对换空间,若申请成功,就启动磁盘,将该进程的程序和数据传送到磁盘的对换区上。若传送过程未出现错误,便可回收该进程所占用的内存空间,并对该进程的进程控制块和内存分配表等数据结构做对应的修改。若此时内存中还有可换出的进程,则继续执行换出过程,知道内存中再无阻塞进程为止。
- 进程的换入
先检查PCB集合中所有进程的状态,从中找出“就绪”状态但已换出的进程。当有许多这样的进程时,它将选择其中已换出到磁盘上时间最久的进程作为换入进程,为它申请内存。如果申请成功则直接将进程从外存调入内存,如果失败,则需先将内存中的某些进程换出,腾出足够的内存空间,再将进程调入。
分页存储管理方式
根据在离散分配时所分配地址空间的基本单位不同,又可将离散分配分为以下三种:
- 分页存储管理方式。将用户程序地址空间分为若干个固定大小的区域,称为“页”或“页面”。
- 分段存储管理方式。将用户程序的地址空间分为若干个大小不同的段,每段可定义一组相对完整的信息。
- 段页式存储管理方式。将上述两种方式相结合,同时具有两者的优点。
地址变换机构
地址变换机构的任务实际上只是将逻辑地址中的页号转换为内存中的物理块号。
基本的地址变换机构
当进程要访问某个逻辑地址中的数据时,分为以下几个步骤
- 分页地址变换机构自动将有效地址(相对地址)分为页号和页内地址两部分
- 对页号与页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间
- 若为出现越界错误,将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置
- 然后得到该页的物理块号,将之装入物理地址寄存器的块内地址字段中
具有快表的地址变换机构
其实就是一个缓存而已。
高速的寄存器,称为“联想寄存器”或“快表”,这个寄存器具备并行查寻能力。
当cpu给出有效地址后,将该地址送入联想寄存器即快表,若能直接找到对应的物理地址,直接送入物理地址寄存器中,如果未找到,再到内存中查找,送入物理内存寄存器的同时再将此有效地址跟物理地址的映射存到快表中。如果此时快表已满,则OS必须找到一个老且认为已经不再需要的页表项,将它换出。
由于成本关系,快表不可能做的很大,通常只存放16-512个页表项。