【操作系统】分页存储管理

三种分配存储管理方式

  • 分页式存储管理:离散分配的基本单位是页
  • 分段式存储管理:离散分配的基本单位是段
  • 段页式存储管理:离散分配的基本单位是段、页

空间划分

1)对于进程:将一个用户进程的地址空间(逻辑空间)划分成若干个大小相等的区域,称为页或页面。

2)对于内存:内存空间也分成与页大小相等的区域,称为块(物理块),同样是从0开始编号。

地址结构

逻辑地址:

逻辑地址长度为32位,其中页内位移占0~11,即每页的大小2^{12} = 4KB;页号占12~31,地址空间最多允许有2^{20} = 1M页。

物理地址:

物理地址长度为22位,其中块内位移占0~11,即每块的大小2^{12} = 4KB;块号占12~21,地址空间最多允许有2^{10} = 1K块。

已知逻辑地址求页号和页内地址

给定一个逻辑地址空间中的地址为A,页面的大小,则页号P = A/L,页内地址d = A mod L;

例如:系统的页面大小为1KB,设A = 2170B,则由上式可以求得p = 2,d = 122.

页表

为了便于在内存找到进程的每一页表所对应的块,分页系统中的每一个进程配置一个页表,进程逻辑地址空间中的每一页,在页表中都对应一个页表项。

页表存放在内存中,访问一个数据需访问内存两次(页表一次,读取数据一次);页表的基址及长度由页表寄存器给出。

基本的地址变换机构

页表的功能可以由一组专门的寄存器来实现,页表中的每一项使用一个寄存器。但是由于寄存器的成本高,页表又可能很大,所以页表大多驻存在内存中。

在一个系统中只设置一个页表寄存器PTR,存放页表始址和页表长度。进程未执行时,页表始址和页表长度存放在PCB中,到系统调度某进程时,才将这两者放入寄存器中。

步骤:

  • 当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址分为页号页内地址两部分
  • 在执行检索之前,先将页号与页表长度进行比较,如果页号大于或等于页表长度,产生地址越界中断。
  • 若未出现越界错误,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。
  • 再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。这样便完成了从逻辑地址到物理地址的变换。

具有快表的地址变换结构 

由于页表是存放在内存中的,这使CPU在每存取一个数据时,都要两次访问内存。第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,以形成物理地址。第二次访问内存时,才是从第一次所得地址中获得所需数据(或向此地址中写入数据)。因此,采用这种方式将使计算机的处理速度降低近1/2。可见,以此高昂代价来换取存储器空间利用率的提高,是得不偿失的。

为了提高地址变换速度,可在地址变换机构中增设一个具有并行查寻能力的特殊高速缓冲寄存器,称为快表,用以存放当前访问的那些页表项。

步骤:

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

猜你喜欢

转载自blog.csdn.net/QX_a11/article/details/89338810