写在前面:
- 本系列笔记主要以《计算机操作系统(汤小丹…)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
- 视频链接:操作系统(汤小丹等第四版)_哔哩哔哩_bilibili
一、覆盖技术
早期的计算机系统中,主存容量很小,虽然主存中仅存放一道用户程序,但是存储空间放不下用户进程的现象也经常发生,这一矛盾可以用覆盖技术来解决。
覆盖的基本思想是:由于程序运行时并非任何时候都要访问程序及数据的各个部分(尤其是大程序),因此可以把用户空间分成一个固定区和若干个覆盖区。将经常活跃的部分放在固定区,固定区中的程序段在运行过程中不会调入调出;其余部分按调用关系分段,不可能同时被访问的程序段可共享一个覆盖区,覆盖区中的程序段在运行过程中会根据需要调入调出。将那些即将要访问的段放入覆盖区,其它段放在外存中,在需要调用前,系统再将其调入覆盖区,替换覆盖区中原有的段。
覆盖技术的特点是打破了必须将一个进程的全部信息装入主存后才能运行的限制,但当同时运行程序的代码量大于主存时仍不能运行,另外内存中能够更新的地方只有覆盖区的段,不在覆盖区中的段会常驻内存。
覆盖技术必须由程序员声明覆盖结构,操作系统完成自动覆盖,其缺点为对用户不透明,增加了用户编程负担。
二、多道程序环境下的对换技术
1、对换的引入
在多道程序环境下,一方面,在内存中的某些进程由于某事件尚未发生而被阻塞运行,但它却占用了大量的内存空间,甚至有时可能出现在内存中所有进程都被阻塞,而无可运行之进程迫使CPU停止下来等待的情况;另一方面,却又有着许多作业,因内存空间不足,一直驻留在外存上,而不能进入内存运行。显然这对系统资源是一种严重的浪费,且使系统吞吐量下降。
为了解决这一问题,在系统中又增设了对换(也称交换)设施。所谓“对换”,是指把内存中暂时不能运行的进程或者暂时不用的程序和数据换出到外存上以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据换入内存。对换是改善内存利用率的有效措施,它可以直接提高处理机的利用率和系统的吞吐量。
2、对换的类型
(1)整体对换。处理机中级调度实际上就是存储器的对换功能,由于在中级调度中对换是以整个进程为单位的,故称之为“进程对换”或“整体对换”,为了实现进程对换,系统必须能实现三方面的功能——对对换空间的管理、进程的换出和进程的换入。
(2)页面(分段)对换。如果对换是以进程的一个“页面”或“分段”为单位进行的,则分别称之为“页面对换”或“分段对换”,又统称为“部分对换”。
三、对换空间的管理
1、对换空间管理的主要目标
在具有对换功能的OS中,通常把磁盘空间分为文件区和对换区两部分。
①对文件区管理的主要目标:
文件区占用磁盘空间的大部分,用于存放各类文件。由于通常的文件都是较长时间地驻留在外存上,对它访问的频率是较低的,故对文件区管理的主要目标是提高文件存储空间的利用率,然后才是提高对文件的访问速度。因此,对文件区空间的管理采取离散分配方式。
②对对换空间管理的主要目标:
对换空间只占用磁盘空间的小部分,用于存放从内存换出的进程。由于这些进程在对换区中驻留的时间是短暂的,而对换操作的频率却较高,故对对换空间管理的主要目标,是提高进程换入和换出的速度,然后才是提高文件存储空间的利用率。为此,对对换区空间的管理采取连续分配方式,较少考虑外存中的碎片问题。
2、对换区空闲盘块管理中的数据结构
为了实现对对换区中的空闲盘块的管理,在系统中应配置相应的数据结构,用于记录外存对换区中的空闲盘块的使用情况。其数据结构的形式与内存在动态分区分配方式中用数据结构相似,即同样可以用空闲分区表或空闲分区链。在空闲分区表的每个表目中应包含两项——对换区的首址及其大小,分别用盘块号和盘块数表示。
3、对换空间的分配与回收
由于对换分区的分配采用的是连续分配方式,因而对换空间的分配与回收与动态分区方式时的内存分配与回收方法雷同。其分配算法可以是首次适应算法、循环首次适应算法或最佳适应算法等。
四、进程的换出与换入
1、进程的换出
对换进程在实现进程换出时,是把处于等待状态(或在CPU调度原则下被剥夺运行权利)的进程从内存调出至对换区,以便腾出内存空间。换出过程可分为以下两步:
①选择被换出的进程。对换进程在选择被换出的进程时,将检查所有驻留在内存中的进程,首先选择处于阻塞状态或睡眠状态的进程,当有多个这样的进程时,应当选择优先级最低的进程作为换出进程。在有的系统中,为了防止低优先级进程在被调入内存后很快又被换出,还需考虑进程在内存的驻留时间。如果系统中已无阻塞进程,而现在的内存空间仍不足以满足需要,便选择优先级最低的就绪进程换出。
②进程换出过程。在选择换出进程后,在对进程换出时,只能换出非共享的程序和数据段,而对于那些共享的程序和数据段,只要还有进程需要它,就不能被换出。在进行换出时,应先申请对换空间,若申请成功就启动磁盘,将该进程的程序和数据传送到磁盘的对换区上,若传送过程未出现错误,便可回收该进程所占用的内存空间,并对该进程的进程控制块和内存分配表等数据结构做相应的修改。若此时内存中还有可换出的进程,则继续执行换出过程,直到内存中再无阻塞进程为止。
2、进程的换入
把准备好竞争CPU运行的程序从辅存移到内存,这个过程就是换入。
对换进程将定时执行换入操作,它首先查看PCB集合中所有进程的状态,从中找出“就绪”状态但已换出的进程,当有许多这样的进程时,它将选择其中已换出到磁盘上时间最久(必须大于规定时间)的进程作为换入进程,为它申请内存。如果申请成功,可直接将进程从外存调入内存;如果失败,则需先将内存中的某些进程换出,腾出足够的内存空间后,再将进程调入。
在对换进程成功地换入一个进程后,若还有可换入的进程,则再继续执行换入换出过程,将其余处于“就绪且换出”状态的进程陆续换入,直到外存中再无“就绪且换出”状态的进程为止,或者已无足够的内存来换入进程,此时对换进程才停止换入。
3、有关交换需要注意以下几个问题
(1)交换需要备份存储,通常是快速磁盘,它必须足够大,并且提供对这些内存映像的直接访问。
(2)为了有效使用CPU,需要每个进程的执行时间比交换时间长,而影响交换时间的主要是转移时间,转移时间与所交换的内存空间成正比。
(3)如果换出进程,必须确保该进程是完全处于空闲状态。
(4)交换空间通常作为磁盘的一整块,且独立于文件系统,因此使用就可能很快。
(5)交换通常在有许多进程运行且内存空间吃紧时开始启动,而系统负荷降低就暂停。