操作系统考试复习——第四章 对换 分页存储管理方式

对换技术也成为交换技术,由于当时计算机的内存都非常小,为了使该系统能分时运行多个用户程序而引入了对换技术。

1.对换的引入:

所谓“对换”,是指把内存中暂时不能运行的进程或者暂时不用的程序和数据调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据调入内存

2.对换的类型:

1)整体对换

处理机中级调度实际上就是存储器的对换功能。其目的用于解决内存紧张问题。由于中级调度是以进程为单位的,故又称之为“进程对换”或“整体对换”。

2)页面对换

以进程的一个“页面”或“分段”为单位进行的,分别称为“页面对换”、“分段对换”,又统称为“部分对换”。

在对换技术当中我们只讨论进程对换,而分页或分段对换将放在虚拟存储器中介绍。

对换空间的管理

1.对换空间管理的主要目标:

在具有对换功能的 OS 中,通常把外存分为文件区对换区
1)对文件区管理的主要目标。
是提高文件存储空间的利用率,为此,对文件区采取离散分配方式。
2)对对换区管理的主要目标。
对换操作较频繁。故是提高进程换入和换出的速度。为此,采取的是连续分配方式,较少考虑外存中的碎片问题。

2.对换区空闲盘块管理中的数据结构

与动态分区分配方式中的数据结构相似,即空闲分区表或空闲分区链。在每个表目中包含两项:对换区的首址及其大小,分表用盘块号和盘块数表示。

3.对换空间党的分配和回收

与之前动态分区分配的内存分配和回收方式雷同,也是分为四种情况。回收区上面一个空闲分区,回收区下面一个空闲分区,空闲区上面和下面都有空闲分区,空闲区上面和下面都没有空闲分区。

进程的换入和换出进程的换出:

换出过程:
1)选择被换出的进程。首先选择处于阻塞或睡眠状态的进程,如果有多个,则选择优先级最低的进程。在有的系统除了考虑优先级,还需考虑进程在内存的驻留时间。如果系统中已无阻塞进程且内存仍不足时,则选择优先级最低的就绪进程换出。
2)进程换出过程。只能换出非共享的程序和数据段,对于共享的只要还有进程需要,就不能换出。在进行换出时,①需要申请对换空间。②若申请成功,就启动磁盘,将该进程的程序和数据传送到磁盘的对换区上。③若传送成功,便可回收该进程所占的内存空间,并对该进程的PCB和内存分配表等进行相应的修改,若还有可换出进程,则继续换出,直至内存中再无阻塞进程为止。

进程的换入。
定时执行换入操作。找出“就绪”状态但已换出的进程,将其中换出时间最久的进程作为换入进程,为它申请内存。若申请成功则调入,若失败则需先将内存中的某些进程换出,再将进程换入。直到外存中再无“就绪且换出”状态的进程为止,或者已无足够的内存来换入进程时,对换进程停止换入。

分页存储管理方式:

连续分配方式会形成许多"碎片",虽然可以用"紧凑"方式将许多碎片拼接成可用的大块空间,但须为之付出很大开销。如果允许将进程直接分散地装入许多不相邻的分区中,便可充分地利用内存空间,而无须再进行"紧凑"。

1)分页存储管理方式:将用户程序的地址空间分为若干个固定大小的区域,称为“页”或者“页面”。也将内存空间分为若干个物理块或页框,页和框的大小相同。
2)分段存储管理方式:把用户程序的地址空间分为若干个大小不同的段。分配以段为单位。
3)段页式存储管理方式:是分页和分段两种存储方式相结合的产物

分页存储管理的基本方法

1.页面和物理块

1)页面:将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号。相应地,也把内存的物理空间分成若干个块,并为各块加以编号。在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片”。
2)页面大小:页面的大小应选择适中,且页面大小应是 2 的幂,通常为 1 KB~8 KB。页面太小的话就会使进程的页面数太多,这样页表就会太长,占有大量内存,而且也会增加硬件地址转换的开销,降低页面换入/换成的效率。页面太大又会使得业内碎片增多,降低内存利用率。

2.地址结构

分页地址中的地址结构如下:

                      31                                       12  11                                                         0

页号P 位移量W

它包含两部分:前一部分是页号P,后一部分是位移量W,即页内地址。如图我们可以知道每个块大小是2^12也就是4KB。而31-12位是页号所以页号是2^20也就是1M页。

3.页表

为保证进程的正确运行,即能在内存中找到每个页面所对应的物理块。为此,系统又为每个进程建立了一张页面映像表,简称页表。在进程地址空间内的所有页,依次在页表中有一页表项,其中记录了相应页在内存中对应的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射。

地址变换机构:

设置地址变换机构的目的:将用户地址空间地逻辑地址转换为内存空间中的物理地址。

具有快表的地址变换机构:

由于页表是存放在内存中的,这使CPU在每存取一个数据时,都要两次访问内存。第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,以形成物理地址。第二次访问内存时,才是从第一次所得地址中获得所需数据。
为了提高地址变换速度,可在地址变换机构中增设一个具有并行查寻能力的特殊高速缓冲寄存器,又称为“联想寄存器”,或称为“快表”。

在 CPU 给出有效地址后,由地址变换机构自动地将页号 P 送入高速缓冲寄存器,并将此页号与高速缓存中的所有页号进行比较,若其中有与此相匹配的页号,便表示所要访问的页表项在快表中。于是,可直接从快表中读出该页所对应的物理块号,并送到物理地址寄存器中。如在块表中未找到对应的页表项,则还须再访问内存中的页表,找到后,把从页表项中读出的物理块号送地址寄存器;同时,再将此页表项存入快表的一个寄存器单元中,亦即,重新修改快表。但如果快表已满,则 OS 必须找到一个老的且已被认为不再需要的页表项,将它换出。

访问内存的有效时间:

在基本分页存储管理方式中,有效访问时间分为第一次访问内存时间(即查找页表对应的页表项所耗费的时间t)与第二次访问内存时间(即访问页表项中的物理块号与页内地址所拼接成的实际物理地址所耗费的时间t)之和: EAT = t + t = 2t;

在快表中查找到所需表项存在着命中率的问题。所谓命中率,是指使用快表并在其中成功查找到所需页面的表项的比率。
则:EAT = а×λ + (t+λ)(1-а) + t = 2t + λ - t×а;
上式中,λ表示查找快表所需要的时间,а表示命中率,t表示访问一次内存所需要的时间。

两级和多级页表

现代的大多数计算机系统,都支持非常大的逻辑地址空间,因此页表就变得非常大,要占用相当大的内存空间。因为每个页表项占用一个字节,故页表长度 * 1字节就是页表所占的内存空间大小。且页表内存空间还要求是连续的,显然这是不现实的。解决方法:
(1) 对于页表所需的内存空间,可采用离散分配方式来解决难以找到一块连续的大内存空间的问题;
(2) 只将当前需要的部分页表项调入内存,其余的页表项仍驻留在磁盘上,需要时再调入。

两级页表。
将页表进行分页,然后离散地将各个页面分别存放在不同的物理块中。也要为离散分配的页表再建立一张页表,称为外层页表,在每个页表项中记录了页表页面的物理块号。
以前面的 32 位逻辑地址空间为例来说明,当页面大小为 4 KB 时,采用两级页表结构时,再对页表进行分页,使每页中包含 2^10 (即 1024)个页表项,最多允许有 2^10个页表分页。此时的逻辑地址结构如下:

在页表的每个表项中存放的是进程的某页在内存中的物理块号,而在外层页表的每个页表项中,所存放的是某页表分页的在内存中的物理块号。可以利用外层页表和页表这两级页表,来实现从进程的逻辑地址到内存中物理地址间的变换。在地址变换机构中同样需要增设一个外层页表寄存器,用于存放外层页表的始址,并利用逻辑地址中的外层页号,找到指定页表分页的始址,再根据外层页内地址找到指定的页表项,再从该页表项中读出该页在内存中的物理块号。
虽然解决了对大页表无需大片连续存储空间的问题,但并未解决用较少的内存空间去存放大页表的问题。只用离散分配空间的办法并未减少页表所占用的内存空间。解决方法是把当前需要的一批页表项调入内存,以后再根据需要陆续调入。在采用两级页表结构的情况下,对于正在运行的进程,必须将其外层页表调入内存,而对页表则只需调入一页或几页。为了表征某页的页表是否已经调入内存,还应在外层页表项中增设一个状态位 S,其值若为 0,表示该页表分页尚未调入内存;否则,
说明其分页已在内存中。进程运行时,地址变换机构根据逻辑地址中的外层页号 P1,去查找外层页表;若所找到的页表项中的状态位为 0,则产生一中断信号,请求 OS 将该页表分页调入内存。关于请求调页的详细情况,这是下一章虚拟存储器中的知识。
多级页表。
对于 32 位的机器,采用两级页表结构是合适的;但对于 64 位的机器,必须采用多级页表,将外层页表再进行分页。

反置页表的引入
在现代计算机系统中,通常允许一个进程的逻辑地址空间非常大,因此就需要有许多的页表项,而因此也会占用大量的内存空间。 引入反置页表,一般页表的页表项是按页号进行排序的,页表项中的内容是物理块号。而反置页表则是为每一个物理块设置一个页表项,并按物理块的编号排序。其中的内容是页号和其所隶属进程的标识符。

地址变换
利用反置页表进行地址变换时,是根据进程标识符和页号,去检索反置页表。如果检索到与之匹配的页表项,则该页表项(中)的序号i便是该页所在的物理块号,可用该块号与页内地址一起构成物理地址送内存地址寄存器。
在反置页表可能只包含已经调入内存中的页面,并未包含尚未调入内存的页面。因此还必须为每个进程建立一个外部页表。当发现所需之页面不在内存时,因在外部页表中包含了各个页面在外存的物理地址,通过它可将所需之页面调入内存。
当内存容量很大时,也表项的数目还是会非常大的。要利用进程标识符和页号去检索这样大的一个线性表是相当费时的。可利用Hash算法来进行检索,可以很快找到在反置页表中相应页表项,不过可能会出现所谓的“地址冲突”。

猜你喜欢

转载自blog.csdn.net/m0_53345417/article/details/130542725
今日推荐