操作系统存储管理之页式存储管理深入浅出

来源:互联网 发布:软件架构设计的软件 编辑:程序博客网 时间:2024/05/18 03:55

用分区方式管理的存储器,每道程序总是要求占用主存的一个或几个连续存储区域,作业或进程的大小仍受到分区大小或内存可用空间的限制,因此,有时为了接纳一个新的作业而往往要移动已在主存的信息。这不仅不方便,而且开销不小。采用分页存储器既可免去移动信息的工作,又可尽量减少主存的碎片。

分页式存储管理的基本原理如下:
1. 页框:物理地址分成大小相等的许多区,每个区称为一块(又称页框 page frame);
2. 页面:逻辑地址分成大小相等的区, 区的大小与块的大小相等,每个区称一个页面(page)。
3. 逻辑地址形式:与此对应,分页存储器的逻辑地址由两部分组成:页号和单元号。
用户进程在内存空间中的每个页框内的地址是连续的,但页框和页框之间的地址可以不连续
4. 页表和地址转换:在进行存储分配时,总是以块(页框)为单位进行分配,一个作业的信息有多少页,那么在把它装入主存时就给它分配多少块。但是,分配给作业的主存块是可以不连续的,即作业的信息可按页分散存放在主存的空闲块中,这就避免了为得到连续存储空间而进行的移动。

动态重定位技术

为了确保页式虚拟地址能正确地变换成页框物理地址,我们使用动态重定位技术。
程序的指令执行时作地址变换,由于程序段以页为单位,所以,我们给每个页设立一个重定位寄存器,这些重定位寄存器的集合便称页表(page table)

页表

  • 页表中的每一栏指明了程序中的一个页面和分得的页框(块)的对应关系,每当选中作业运行时,应进行存储分配,为进入主存的每个用户作业建立一张页表,指出逻辑地址中页号与主存中块号的对应关系,页表的长度随作业的大小而定,具体如下图所示:
    这里写图片描述
    假设逻辑地址为A,页面大小为L,则页号和页内地址为:
    页号=A/L
    页内地址=A%L
    下面展示了用户程序所占有的特定页,然后根据页号通过页表找到块号,再索引到实际物理内存位置的简略过程图:
    这里写图片描述
    在这个过程里,我们省略了从页表到具体物理内存的索引原理,下面我们对此进行解析。

作业表

  • 通常为了减少开销,不是用硬件,而是在主存中开辟存储区存放页表,系统中另设一个页表主存起址和长度控制寄存器(page table control register),存放当前运行作业的页表起址和页表长,以加快地址转换速度。
  • 在建立页表同时,页式存储管理系统还建立一张作业表,将这些作业的页表进行登记,每个作业在作业 表中有一个登记项,它的结构如下所示:
    这里写图片描述

重定位具体实现

借助于硬件的地址转换机构,在作业执行过程中按页动态定位。调度程序在选择作业后,从作业表的登记项中得到被选中作业的页表始址和长度,将其送入硬件设置的页表控制寄存器。地址转换时,只要从页表控制寄存器就可以找到相应的页表,再按照逻辑地址中的页号作索引查页表,得到对应的块号,根据关系式:
绝对地址 = 块号×块长 + 单元号
计算出欲访问的主存单元的地址。因此,虽然作业存放在若干个不连续的块中,但在作业
执行中总是能按正确的地址进行存取。

总结过程,特定作业开始执行->从作业表登记项找到作业的页表始址和长度->通过页表寄存器找到对应页表->按逻辑地址页号作索引表,得到对应块号(实际物理地址)
下图给出了页式存储管理的地址转换和存储保护:
这里写图片描述

根据地址转换公式:块号×块长+单元号,在实际进行地址转换时,只要把逻辑地址中的单元号作为绝对地址中的低地址部分,而根据页号从表中查得的块号作为绝对地址中的高地址部分,就组成了访问主存储器的绝对地址。
具体而言,即是将指令中的逻辑地址(p,d)取来从中得到逻辑页号(p),硬件机构按此页号查页表,得到内存的块号B’,便形成绝对地址(B’,d),处理器即按此地址访问主存。

下面我们可以通过下面的题目进一步理解页式存储:

  1. 分页系统的页长为1KB,虚拟地址0x3C8F对应的页号为_,页内地址为_

    答:1KB = 8000b,转换为16进制,为0x400,则:
    页号=3C8F / 400 = 15,
    页内地址=3C8F % 400 = 8F

  2. 在一个分页存储管理的系统中,页长为4KB,某一作业的页表如下所示,虚拟地址3000对应物理地址_,12000对应_

    页号 页帧号 0 3 1 4 2 6

    3000对应的页号=3000/4096=0,页帧号为3(查表),
    页内地址=3000 % 4096=3000,对应的物理地址为3 * 4096 + 3000 = 15288
    12000对应的页号=12000 / 4096 = 2,页帧号为6(查表),
    页内地址=12000 % 4096 = 3808,对应的物理地址为6 * 4096 + 3808 = 28384

  3. 某页式存储管理系统,页内地址为11位,逻辑地址总长度为16位,物理地址长度为32位.假设某作业的大小为5000字节,依次分配的页面为3,7,9.请画出页表,并简单叙述逻辑地址4500的地址转换过程

    答,页表如下:

    页号 页帧号 0 3 1 7 2 9

    页内地址为11位【块内地址(也叫块内位移)长度与页内地址相等 也是11位】 则每页大小为2^11=2KB 逻辑地址长16位 所以页号有16-11=5位 那么最多有2^5=32页。
    对于逻辑地址4500转换,0d4500 = 0b1000110010100 (13位)
    后面11位是页内地址那么页号就是前面的两位了 是0b10,也就是二进制的0d2,根据页表,对应的块号是9 转换成二进制即1001 即块号是1001,取逻辑地址后11位,与块号组合,得到物理地址:0b100100110010100=0d18836

1 0
原创粉丝点击