第四章存储器管理

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

页表
在分页系统中,允许将进程的各个页离散地存储在内 存不同的物理块中,但系统应能保证进程的正确运行, 即能在内存中找到每个页面所对应的物理块。
为此,系统又为每个进程建立了一张页面映像表, 简称页表。在进程地址空间内的所有页(0~n),依次在 页表中有一页表项,其中记录了相应页在内存中对应的 物理块号,见图4-12的中间部分。在配置了页表后,进 程执行时,通过查找该表,即可找到每页在内存中的物 理块号。可见,页表的作用是实现从页号到物理块号的 地址映射。
页表寄存器 页表始址 页表长度
+ 页号
块号
b
页表
> 越界中断
逻辑地址L 页号 页内 地 址
页号 块号


b



快表
bd 物理地址
图4-14 具有快表的地址变换机构
两级和多级页表
现代的大多数计算机系统,都支持非常大的逻辑地址 空间(232~264)。在这样的环境下,页表就变得非常大, 要占用相当大的内存空间。显然这是不现实的,我们可 以采用下述两个方法来解决这一问题:
外层页号
外层页内地址
页内地址
P1
P2
d
31
22 21
12 11
0
0 1011 1 1078 2
n 1742 外部页表
第0页页表
0பைடு நூலகம்
1
1
4
2
6


1023
第1页页表 0 114 1 115

1023
第n页页表 0 1468 1 2

0 1 2 3 4 5 6 7
114 115
1468


1023
内存空间
的外层页表来映射它们之间的关系。
对于某特定机器,其地址结构是一定的。若给定一个 逻辑地址空间中的地址为A,页面的大小为L,则页号P和 页内地址d可按下式求得:
P

INT
A L

d [A]MODL
其中,INT是整除函数,MOD是取余函数。例如,其 系统的页面大小为1 KB,设A = 2170 B,则由上式可以 求得P = 2,d = 122。
逻辑地址
外部页号 外部页内地址 页内地址
P1
P2
d
外部页表寄存器


… …
外部页表
页表
b
d
物理地址
图4-16 具有两级页表的地址变换机构
多级页表
对于32位的机器,采用两级页表结构是合适的;但对 于64位的机器,采用两级页表是不能令人接受的,因此 必须采用多级页表,将外层页表再进行分页,也就是将 各分页离散地装入到不相邻接的物理块中,再利用第2级
图4-15 两级页表结构
为了地址变换实现上的方便起见,在地址变换机构 中同样需要增设一个外层页表寄存器,用于存放外层页 表的始址,并利用逻辑地址中的外层页号,作为外层页 表的索引,从中找到指定页表分页的始址,再利用P2作 为指定页表分页的索引,找到指定的页表项,其中即含 有该页在内存的物理块号,用该块号和页内地址d即可构 成访问的内存物理地址。
在为进程分配内存时,以块为单位将进程中的若干 个页分别装入到多个可以不相邻接的物理块中。由于进 程的最后一页经常装不满一块而形成了不可利用的碎片, 称之为“页内碎片”。
2)页面大小
页面的大小应选择适中,且页面大小应是2的幂,通 常为512 B~8 KB。
地址结构 分页地址中的地址结构如下:
它含有两部分:前一部分为页号P,后一部分为位移 量W(或称为页内地址)。图中的地址长度为32位,其中 0~11位为页内地址,即每页的大小为4 KB;12~31位为 页号,地址空间最多允许有1 M页。
基本的地址变换机构
页表大多驻留在内存中。在系统中只设置一个页表寄 存器PTR(Page-Table Register),在其中存放页表在内 存的始址和页表的长度。平时,进程未执行时,页表的 始址和页表长度存放在本进程的PCB中。当调度程序调度 到某进程时,才将这两个数据装入页表寄存器中。因此, 在单处理机环境下,虽然系统中可以运行多个进程,但
第四章 存储器管理
4.4 基本分页存储管理方 式
连续分配方式会形成许多“碎片”,虽然可通过 “紧凑”方法将许多碎片拼接成可用的大块空间,但须 为之付出很大开销。如果允许将一个进程直接分散地装 入到许多不相领接的分区中,则无须再进行“紧凑”。 基于这一思想而产生了离散分配方式。如果离散分配的 基本单位是页,则称为分页存储管理方式;如果离散分 配的基本单位是段,则称为分段存储管理方式。
在分页存储管理方式中,如果不具备页面对换功能, 则称为基本的页面存储管理方式,或称为纯分页存储管 理方式,它不具有支持实现虚拟存储器的功能,它要求 把每个作业全部装入内存后方能运行。
页面与页表
页面 1)页面和物理块 分页存储管理是将一个进程的逻辑地址空间分成若干
个大小相等的片,称为页面或页,并为各页加以编号, 从0开始,如第0页、第1页等。相应地,也把内存空间分 成与页面相同大小的若干个存储块,称为(物理)块或页 框,也同样为它们加以编号,如0#块、1#块等等。
页表寄存器 页表始址 页表长度

页号
0
1
2
3
越界中断 >
逻辑地址L 页号(3) 页内 地 址
块号 1
b 页表
物理地址
图4-13 分页系统的地址变换机构
具有快表的地址变换机构
由于页表是存放在内存中的,这使CPU在每存取一个 数据时,都要两次访问内存。第一次是访问内存中的页 表,从中找到指定页的物理块号,再将块号与页内偏移 量W拼接,以形成物理地址。第二次访问内存时,才是从 第一次所得地址中获得所需数据(或向此地址中写入数 据)。因此,采用这种方式将使计算机的处理速度降低近 1/2。可见,以此高昂代价来换取存储器空间利用率的提 高,是得不偿失的。
为了提高地址变换速度,可在地址变换机构中增设 一个具有并行查寻能力的特殊高速缓冲寄存器,又称为 “联想寄存器” ,或称为“快表”,在IBM系统中又取 名为TLB,用以存放当前访问的那些页表项。
此时的地址变换过程是:在CPU给出有效地址后,由 地址变换机构自动地将页号P送入高速缓冲寄存器,并将 此页号与高速缓存中的所有页号进行比较,若其中有与 此相匹配的页号,便表示所要访问的页表项在快表中。 于是,可直接从快表中读出该页所对应的物理块号,并 送到物理地址寄存器中。如在块表中未找到对应的页表 项,则还须再访问内存中的页表,找到后,把从页表项 中读出的物理块号送地址寄存器;同时,再将此页表项 存入快表的一个寄存器单元中,亦即,重新修改快表。 但如果联想寄存器已满,则OS必须找到一个老的且已被 认为不再需要的页表项,将它换出。
… …

用户程序 0页 1页 2页 3页 4页 5页
n页
页表 页号 块号
02 13 26 38 49 5
内存
0 1 2 3 4 5 6 7 8 9 10
图4-12 页表的作用
地址变换机构
为了能够将用户地址空间中的逻辑地址变换为内存 空间中的物理地址,在系统中必须设置地址变换机构。 该机构的基本任务是实现从逻辑地址到物理地址的转换。 由于页内地址和物理地址是一一对应的。因此,地址变 换机构的任务实际上只是将逻辑地址中的页号,转换为 内存中的物理块号。又因为页面映射表的作用就是用于 实现从页号到物理块号的变换,因此,地址变换任务是 借助于页表来完成的。
(1)采用离散分配方式来解决难以找到一块连续的大 内存空间的问题;
(2)只将当前需要的部分页表项调入内存,其余的页 表项仍驻留在磁盘上,需要时再调入。
两级页表(Two-Level Page Table)
对于要求连续的内存空间来存放页表的问题,可利用 将页表进行分页,并离散地将各个页面分别存放在不同 的物理块中的办法来加以解决,同样也要为离散分配的 页表再建立一张页表,称为外层页表,在每个页表项中 记录了页表页面的物理块号。下面我们仍以前面的32位 逻辑地址空间为例来说明。当页面大小为 4 KB时(12位), 若采用一级页表结构,应具有20位的页号,即页表项应 有1兆个;在采用两级页表结构时,再对页表进行分页, 使每页中包含210 (即1024)个页表项,最多允许有210个 页表分页;或者说,外层页表中的外层页内地址P2为10 位,外层页号P1也为10位。此时的逻辑地址结构可描述 如下:
只需一个页表寄存器。
当进程要访问某个逻辑地址中的数据时,分页地址 变换机构会自动地将有效地址(相对地址)分为页号和页 内地址两部分,再以页号为索引去检索页表。查找操作 由硬件执行。在执行检索之前,先将页号与页表长度进 行比较,如果页号大于或等于页表长度,则表示本次所 访问的地址已超越进程的地址空间。于是,这一错误将 被系统发现并产生一地址越界中断。若未出现越界错误, 则将页表始址与页号和页表项长度的乘积相加,便得到 该表项在页表中的位置,于是可从中得到该页的物理块 号,将之装入物理地址寄存器中。与此同时,再将有效 地址寄存器中的页内地址送入物理地址寄存器的块内地 址字段中。这样便完成了从逻辑地址到物理地址的变换。
相关文档
最新文档