计算机操作系统之存储器管理 (2)

页面太小,可以减小页内碎片,提高利用率。但是这样会使得页表过长。如果页面过大,虽然页面可以变得很短,但是页内碎片太大。所以一般选择大小适中,且页面大小就是2的幂,通常是512B-8KB

地址结构

分页地址中的地址如下:

一共32位,0-11位是位移量(页内地址,所以一页为4KB), 12-31是页号,所以最多可以有1M页。

地址变换机构---页表

为了能将用户地址空间中逻辑地址,变换为内存空间中的物理地址,在系统中必须设置地址变换机构。该机构的基本任务是实现从逻辑地址到物理地址的转换。由于页面内的地址与物理块内的地址是一一对应的。所以只要把逻辑地址的页号转换为内存中的物理块号就可以了。

而页面映射表(页表)就是用于实现从页号到物理块号的变换。因此,地址变换的任务是借助于页表来完成的。

clip_image001

基本的地址变换机构

页表的功能可以借助一组专门的寄存器来实现。一个页表项用一个寄存器来实现,但是由于页表太长,寄存器比较小,而且贵。所以一般把页表放在内存上。在系统中只设置一个页表寄存器PTR,在其中存入页表在内存中的始址和大小。当程序未执行时,这两个值是放在PCB中的。当调度程序调度到某个进程时,才将这两个数据装入页表寄存器中。因此在单处理机环境下,虽然系统中可以运行多个进程,但只要一个PTR就可以。

当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址分为页号和页内地址两部分。再以页号为索引去检索页表。查找操作由硬件来执行,提高效率。首先判断是不是越界,如果不越界,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。这样便完成了从逻辑地址到物理地址的变换。

clip_image002

具有快表的地址变换机构

由于页表是放在内存中的,这使得CPU在每存取一个数据时,要访问内存两次。

第一次,是找到指定页面的物理块号,再将物理块号和页内地址相加,得到物理地址。

第二次,从第一次得到的地址中,把对应的数据找到。

那现在有没有改进的方案呢。是不是可以不用第一次访存呢?如果不需要的话,那应该有一个地方存储这个页表,或页表的一部分。

为了提高地址变换速度,可在地址变换机构中,增设一个具有并行查寻能力的特殊高速缓冲寄存器,又称为“联想寄存器”或快表。

此时的地址变换过程是这样子的:

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

由于成本的考虑,快表不可能做的太大,一般只存16-512个页表项。

clip_image004

现在的计算机还可以有两级和多级页表

基本的分段存储管理方式

如果说推动存储管理方式从固定分区到动态分区分配,进而又发展到分页存储管理方式的主要动力,是提高内存利用率,那么引入分段存储管理方式的目的,则主要是为了满足用户(程序员)在编程和使用上多方面的要求。

1) 方便编程

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zggjyf.html