OS——内存扩充技术
需求
为什么需要内存扩充技术?我们知道当并发运动的多个进程长度之和大于内存可用空间时,多道程序设计就会出现很多困难。内存扩充技术就是借助大容量的辅存,在逻辑上实现内存的扩充。常见的内存扩充技术有覆盖技术、交换技术以及虚拟内存。本节主要探讨前两种,即虚拟内存出现前的内存扩充技术。
覆盖技术
覆盖技术就是将不会同时执行的程序段组成一个覆盖小组,既然它们不会同时运行,所以在装入时可以放在同一块内存区域,这个区域被称为覆盖区。
在覆盖技术中,内存被分为固定区与覆盖区,其中固定区是常驻内存放入的区域,调入后就不再调出,直到运行结束。
下面来举一个例子看懂覆盖技术:
给出如图所示的程序调用结构,可以算出,如果将整个程序放入内存中,需要占用160KB的空间,但不难发现,模块A和模块B不会同时被Main函数调用,同样,模块CDE也不会被同时调用,所以我们就可以采用覆盖技术来实现逻辑上的内存扩充。
覆盖 | 空间分配 |
---|---|
Main | 10KB |
A和B | 30KB |
C、D、E | 40KB |
可以发现:每一个覆盖段小组的内存必须为该小组内占用内存最大的程序段。
交换技术
交换技术就是将内存中暂时不能运行的进程或暂时不用的代码和数据调到外存上,以此腾出空间给已经具备运行条件的进程或进程所需要的程序和数据从外存调入内存。
这里第一个注意点:只是将进程或代码和数据调入外存,PCB依旧在内存中,因为要保留这些进程的信息。
第二个注意点:交换进程主要在程序或进程之间进行,而覆盖技术主要发生在同一个程序或进程内部,所以说覆盖技术一般用于早期的单用户系统。
第三个注意点:我们说交换技术是将暂时不用的进程或代码和数据调入外存,实际上这就是中级调度干的事,就进程从内存调入外存。
交换技术的类型
按照在内存与外存间切换的单位,可以分为整体交换与部分交换
- 整体交换:以整个进程为单位在内存和外存之间交换,目的是减轻内存负荷,多用于多道程序系统,处理机中级调度的核心就是交换技术。
- 部分交换:以进程的一部分为单位,如一页或一段。
交换空间的管理
在交换技术中,系统将外存分为文件区和对换区
- 文件区:存放文件,为了追求空间利用率,采用离散存储。
- 对换区:存放从内存中换出的进程,采用连续分配。
这样设置分区是为了提高进程换入和换出的速度,采用的是连续分配的方式。对换区的IO速度快于文件区的。