首页 > 常见问题 > 基本分页存储管理方式是什么

基本分页存储管理方式是什么

angryTom
发布: 2019-07-26 15:44:41
原创
8418 人浏览过

基本分页存储管理方式是什么

推荐教程:常见问题

简介

在存储器管理中,连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。

  如果允许将一个进程直接分散地装入到许多不相邻的分区中,则无须再进行“紧凑”。基于这一思想而产生了离散分配方式。如果离散分配的基本单位是页,则称为分页存储管理方式。在分页存储管理方式中,如果不具备页面对换功能,则称为基本分页存储管理方式,或称为纯分页存储管理方式,它不具有支持实现虚拟存储器的功能,它要求把每个作业全部装入内存后方能运行。

为什么要分页存储

  在内存的分配过程中,连续分配方式容易产生大量的碎片,虽然可以通过“紧凑”对其进行整理,但是这样需要大量的开销。 

  因此,如果能够在进程的内存分配的时候,将连续的逻辑内存打散分配在多个可以不相连的物理内存上,那么将会利用到原来被浪费的大块碎片,降低不可利用碎片的最大大小(降至页面的大小,因为如果碎片的大小超过页面的大小,那么将可以被利用),提升内存利用率。根据这种思想,产生了离散分配方式,如果离散分配的基本单位是页,则称之为分页存储管理方式;如果不具备页面对换功能,那么就是基本分页存储管理方式。

基本概念

页面 

  分页存储管理方式将进程的连续的逻辑地址空间分割为若干个大小相等 的地址片,称之为页或者页面。并将其进行编号,如第0页、第1页。在逻辑上,这些页中的各个地址拼接起来是连续的,但是他们对应的物理块地址是可以不连续的。对应的物理块也相应的被命名为第0块、第1块等。在进程分配内存时,进程的若干个页分别被装入对应的物理块,由于最后一页经常装不满,所以形成了无法被利用的页内碎片

  采用分页存储管理方式的目的就是更多的利用内存碎片,因此,页面的大小相对来说是小于正常进程所需的地址空间大小。那么页面多大是比较合适的呢?页面如果过于小,虽然可以使得内存中不可利用碎片的最大大小降低,提升内存空间的利用率,但是也会导致进程占用过多的页面,使得页表过长,降低页面的换进换出的效率。同样,如果页面过大,虽然提升了页面换进换出的效率,但是也会使得内存碎片增大。所以,根据经验,页面的大小最好选择512B~8KB左右。

页表 

  页表就是进程中维护的一段地址空间,其中存储了页面和物理块的映射关系,在讨论页表之前,先理清分页中的地址结构。 

  对于物理地址空间,总的内存地址空间是固定的。而对于一个进程,分配的逻辑内存空间也是固定且连续的,该逻辑地址空间从0开始,假设某个进程中的一个字节的逻辑地址为 1088B, 而页面大小为512B。在介绍页面 时说过,逻辑地址空间虽然分给为若干个页,但是这些页的逻辑地址仍然是连续的。那么我们可以知道该字节所属的页号 P = 2 (从0开始),页内地址 d = (1088 - 512 * 2) = 64。

  也就是说在页面长度已知的情况下,根据逻辑地址可以简单的知道该地址空间所属的页面号和在该页面中的相对地址。根据这两个参数和页表,就能够知道该地址对应的物理地址了。

  页表是用来映射页面和物理块的一张表,如下图: 

 

pc11.jpg

  通过页表和页号,我们知道了物理块号,也就知道了对应物理块空间的起始地址。再加上页内地址,就知道了对应的物理地址。通过这种方式,我们能够实现从逻辑地址到物理地址的转换。

地址转换

  上面的基础概念介绍简单介绍了一下地址转换的原理,下面详细看看具体流程。

  上面说到通过查找页表找到页号到物理块号的映射,那么页表存放在哪里,如何找到页表呢?? 

  页表可以通过一组寄存器来实现,一个寄存器存储一条页表项,因为寄存器的存取速度快,可以提高页表地址转换的速度。然而,寄存器成本较高,页表中的页表项可能会非常大,达到数百上千项。因此页表通常也存储在内存中,在系统中,只设置一个页表寄存器PTR,用来存储页表在内存中的起始地址和长度。平时,进程未执行时,页表的始址和页表长度存放在本进程的PCB中。当调度程序调度到某进程时,才将这两个数据装入页表寄存器中。因此,在单处理机环境下,虽然系统中可以运行多个进程,但只需一个页表寄存器(也就是说,多进程同时运行的情况下,需要分别存储多个进程内的页表数据)。

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

pc22.jpg

快表

  由于页表是存放在内存而非寄存器中,所以每次读取一个地址的时候需要访问两次内存,第一次访问页表找到物理块号,第二次才是访问真正的物理地址获取数据。因此,采用这种方式将使计算机的处理速度降低近1/2。 

  为了提升地址变换效率,在地址变换机构中加入了一组具有并行查寻能力的特殊高速缓冲寄存器,又称为“联想寄存器”(Associative Memory),或称为“快表”,用来存储当前访问的页表项数据(类似于缓存,存储之前查找过的页表项,提升页号到物理块号的转换效率)。通过这种方式,地址转换过程变成了如下图: 

 pc33.jpg

  在CPU获取到逻辑地址后,地址转换机构将页号交给快表查询对应的物理块号,如果查到,则直接根据页内地址找到物理地址访问数据,如果没有则按正常的方式查找物理块号,并同时将其保存在快表中。如果快表已满,则系统会自动在其中去掉一个页表项替换出来。 

  简而言之,快表就相当于页表项缓存。

以上是基本分页存储管理方式是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板