操作系统学习笔记(8)——分页存储管理机制
1、逻辑页面与物理页框
- 页(页面):是作业逻辑地址空间(虚拟内存空间)的划分,是逻辑地址空间顺序等分而成的一段逻辑空间,并依次连续编号。页的大小一般为 512B~8kb
- 物理块则是相对于虚拟内存对物理内存按顺序等大小的划分。物理块的大小需要与页的大小一致
- 操作系统以物理块为单位为各个进程分配内存空间。进程的每个页面分别放入一个物理块中,即进程的页面和内存的物理块有一一对应的关系。
- 显然这种方式各个页面不必连续存放,也不必按先后顺序,可以放在不相邻的各个页框中,这样就实现了离散的存储模式
- 逻辑页面
- 进程的逻辑地址空间按固定大小分为若干页面
- 不足一页的补齐为一页,依序从0、1......编号
- 一般来说已知逻辑空间地址为2^m个字节(也就是说逻辑地址的长度是m位),已知页大小是2^n字节。那么页内地址就为n位;页号m-n位,意味着该进程一共可以有2^(m-n)个页面。
-
- 例子中是一个 32 位的逻辑地址,高 20 位则是页号,低 12 位则是页内地址。一般来说已知逻辑空间地址为2^m个字节(也就是说逻辑地址的长度是m位),已知页大小是2^n字节。那么页内地址就为n位;页号m-n位,意味着该进程一共可以有2^(m-n)个页面或者如果给的逻辑地址是十进制,逻辑地址为 A,页面大小为 L,则页号 P 和页内地址 d 计算公式如下:
-
- 也就是说如果逻辑地址给的是二进制可以通过页面大小或者页数来划分页号和页内位移。而如果给的逻辑地址是十进制就可以通过上面的公式计算分割出页号和页内地址
- 物理页框
- 内存空间划分成大小相等的若干存储区
- 每个存储区称为页框,从o开始连续编号
2、分页存储的管理表格
- 页表
-
- 页表是记录逻辑空间(虚拟内存)中每一页在内存中对应的物理块号。但并非每一页逻辑空间都会实际对应着一个物理块,只有实际驻留在物理内存空间中的页才会对应着物理块。
- 一个进程对应一张页表。
- 进程的每一页对应一个页表项。
- 每个页表项由页号和块号组成。
- 页表记录进程页面和实际存放的内存块之间的对应关系。
- 每个页表项的长度都是相同的,页号是隐含的
- 通常页表是需要一直驻留在物理内存中的(多级页表除外),进程在未执行时,页表的起址和页表长度放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把它们放在页表寄存器中。
- 请求表
- 管理每个进程的页表的起始地址和长度
- 请求表整个系统一张
- 存储页面表
- 整个系统一张,指出内存各页框是否已被分配出去,以及空闲页面的总数
- 存储页面表构成方法:位示图和空闲页面链表
- 位示图:在内存中划分一块固定存储区域,每个比特代表一个页框。如果已被分配,则对应比特位置1,否则置0。
3、分页存储的地址转换
-
- 进程访问某个逻辑地址时,分页地址机构自动将逻辑地址分为页号和页内地址。页号大于页表长度,越界错误;若不越界,则页表项的地址 p = 页表起始地址 F + 页号 P * 表项大小 S,从而找到页表项里页号对应的物理块号 B
- 页和物理块的大小是一致的,所以页内地址=块内地址
- 最后,如果是二进制,物理地址 = 物理块号B + 页内地址(+为组合的意思,不是做加法)。如果是十进制,物理地址 = 物理块号 B * 页大小 L + 页内地址(+为做加法)。
- 根据物理地址读取数据
-
- 例:某系统采用分页式存储管理,页大小为 2KB。已知进程 A 的逻辑地址空间为 4 个页,内存分配如下页表所示,求逻辑地址 4832 对应的物理地址。(所有数据都是十进制)
-
-
- 首先页面大小2KB=2048B,所以:页号 P=逻辑地址/页大小=4832/2048=2,页内地址 F=逻辑地址%页大小=4832%2048=736。根据页表查得 2 号页对应着 25 号物理块,
物理地址 A=物理块号*页大小 + 页内地址=25*2048+736=51936。
- 首先页面大小2KB=2048B,所以:页号 P=逻辑地址/页大小=4832/2048=2,页内地址 F=逻辑地址%页大小=4832%2048=736。根据页表查得 2 号页对应着 25 号物理块,
-
4、相联存储与块表技术
- 相联存储与块表
- 相联存储是在MMU中设置的专用的高速缓冲存储器
- 快表是相联存储器中存放的最近访问的部分页表
- 地址转换
- 地址变换机构自动将页号与快表中的页号比较
- 快表存在所要访问的页表项,直接读出对应的页框号
- 快表中未找到对应的页表项,则访问内存中的页表;同时将此页表项存入快表中,修改快表
- 若快表已满,则系统需换出某些页表项
5、物理页框的分配流程
- 计算所需要的页框数n
- 查位示图,是否有n个空闲页框
- 如果有足够的空闲页框,则页表长度设为n,填入PCB中
- 申请页表区,把页表始址填入请求表
- 分配n个空闲页框,将页框号和页号填入页表
- 修改位示图
6、例题
1、考虑一个由8个页面,每页有1024个字节组成的逻辑空间,把它装入到有32个物理块的存储器中,问:(1)逻辑地址需要多少二进制位表示?(2)物理地址需要多少二进制位表示?
因为页面数为8=2^3,故需要3位二进制数表示页号。每页有1024个字节,1024=2^10,于是页内地址需要10位二进制数表示页内地址;32个物理块,需要5位二进制数表示块号(32=2^5)。
(1)页的逻辑地址由页号和页内地址组成,所以需要3+10=13位二进制数表示。
(2)页的物理地址由块号和页内地址的拼接,所以需要5+10=15位二进制数表示。
2、若在一分页存储管理系统中,某作业的页表如下所示。已知页面大小为1024字节,试将逻辑地址1011,2148,4000,5012转化为相应的物理地址。
(1)对于逻辑地址1011,p=int(1011/1024)=0,d=1011 mod 1024=1011。查页表第0页在第2块,所以物理地址为1024′2+1011=3059。
(2)对于逻辑地址2148,p=int(2148/1024)=2,d=2148 mod 1024=100。查页表第2页在第1块,所以物理地址为1024+100=1124。
(3)对于逻辑地址4000,p=int(4000/1024)=3,d=4000 mod 1024=928。查页表第3页在第6块,所以物理地址为1024′6+928=7072。
(4)对于逻辑地址5012,p=int(5012/1024)=4,d=5012 mod 1024=916。因页号超过页表长度,该逻辑地址非法。
3、某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB。假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如下:
由已知条件“用户编程空间共32个页面”,可知页号部分占5位;由“每页为1KB”,1K=2^10,可知内页地址占10位。由“内存为16KB”,可知有16块,块号为4位。
逻辑地址0A5C(H)所对应的二进制表示形式是:000 1010 0101 1100,根据上面的分析,10位页内地址,则编码“000 10”为页号,表示该逻辑地址对应的页号为2。查页表,得到物理块号是4(十进制),即物理块地址为:01 00 ,拼接块内地址10 0101 1100,得01 0010 0101 1100,即125C(H)。
解逻辑地址0A5C(H)所对应的物理地址是125C(H)。