ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

操作系统大作业-二级页表

2022-02-03 13:59:11  阅读:168  来源: 互联网

标签:10 12 22 .. 32 作业 页表 操作系统


1.作业内容

假设某系统的进程虚拟地址为32位,使用12位=4KB长度的页面,页表也是分页存储管理,每个页表表目占4 Bytes。请你:
1)设计一个页表管理的数据结构;
2) 根据用户进程要访问的虚拟空间地址 x x x,同时假设要访问的页面已在内存,设计一个查找该虚拟地址对应的内存物理页框号 b b b和物理地址 y y y的算法,并试分析算法的复杂度。要求页表结构尽量简洁,查找算法开销小。

2.解答

1)设计一个页表管理的数据结构

页号物理块号状态位P访问字段A修改位M外存地址

状态位P:指示该页是否已经调入内存。
访问字段A:记录本页在一段时间内的访问次数,供置换算法换出页面时参考。
修改位M:标识该页在调入内存后是否被修改过。如果应淘汰的页在执行中没有被修改过,不必调出,直接装入一个新页覆盖。若修改过,则需要调出到外存。
外存地址:指出该页在外存上的地址,通常是物理块号。
按字节编址,使用32位虚拟地址。每个进程有的 2 32 B = 4 G B 2^{32}B=4GB 232B=4GB虚拟地址空间,使用 2 12 B = 4 K B 2^{12}B=4KB 212B=4KB的页面, 2 32 / 2 12 = 2 20 2^{32}/2^{12}=2^{20} 232/212=220,即一个进程可以用 2 20 2^{20} 220个页面,需要 ≥ 20 / 8 = 3 B \ge 20/8=3B ≥20/8=3B的表目,题目中取页表表目 4 B 4B 4B。则每个进程页表空间 2 22 B = 4 M B 2^{22}B=4MB 222B=4MB。 22 + 12 > 32 22+12>32 22+12>32,所以页表不能全装在主存,需要用到二级页表。
低12位为页内偏移量,高20位采用二级页表。每个小页表可以放 2 10 = 1 K 2^{10}=1K 210=1K个页表表目,共 2 10 = 1 K 2^{10}=1K 210=1K个小页表。 2 10 ∗ 2 10 ∗ 2 12 = 2 32 2^{10}*2^{10}*2^{12}=2^{32} 210∗210∗212=232,正好填满 32 32 32位地址。为了对 1 K 1K 1K个小页表进行查找,需要一个页表表目,页表表目有 1 K 1K 1K个,共 10 10 10位,为 31 31 31~ 22 22 22位。小页表占 10 10 10位,为二级页号,为 21 21 21~ 12 12 12位。页面内的偏移量为 12 12 12位,对应 4 K B 4KB 4KB的页面,为 11 11 11~ 0 0 0位。

一级页号二级页号页内偏移量
31 31 31~ 22 22 22位 21 21 21~ 12 12 12位 11 11 11~ 0 0 0位

2)算法

先取地址的高 10 10 10位( 31 31 31~ 22 22 22位),在一级页表中查找而应页框号所在位置页表 x 31..22 x_{31..22} x31..22​。即 x 31..22 = x / 2 22 x_{31..22}=x/2^{22} x31..22​=x/222。访问 x 31..22 x_{31..22} x31..22​,得到虚拟页号的物理页表起始地址 b 1 b_1 b1​。再取 x x x的 21 21 21~ 12 12 12位,得到二级页号 x 21..12 = ( x m o d    2 22 ) / 2 12 x_{21..12}=(x \mod 2^{22})/2^{12} x21..12​=(xmod222)/212。将 b 1 b_1 b1​与 x 21..12 x_{21..12} x21..12​相加得到新地址,访问该地址,得到物理页框号 b b b。取 x x x的低12位页内偏移量 x 11..0 x_{11..0} x11..0​,将物理页框号 b b b与页内偏移量 x 11..0 x_{11..0} x11..0​拼接,得到物理地址 y = b ∗ 2 12 + x 11..0 y=b*2^{12}+x_{11..0} y=b∗212+x11..0​。
算法的流程图如下:
在这里插入图片描述
算法时间复杂度分析:需要访问三次主存,一次访问页目录,一次访问页表,最后访问数据所在的物理地址,时间复杂度为 O ( 1 ) O(1) O(1)。
算法空间复杂度分析:以空间换时间。虚拟地址本身为32位,为4GB。根据一级页号查找页框号,这个页框号为20位,为1MB。
算法正确性、有效性分析:算法会检测越界中断与缺页中断,在没有越界和缺页的错误时能正常运行。

伪代码

int x31_22=x>>22;//位运算,右移22位
if (flag[x31_22]==1){//要访问的页是否在主存
	b1←x31_22地址内容;
	x21_12=(x>>12)/(1<<22);//位运算,取x的21~12位
	addr=x21_12+b1;
	if (addr<(1<<20)-1);{//判断是否越界
		b←addr地址内容;
		y=(b<<12)+x%(1<<12);//拼接b与x的低12位
	}
	else 越界中断
}
else 缺页中断

标签:10,12,22,..,32,作业,页表,操作系统
来源: https://blog.csdn.net/qq_46640863/article/details/122775541

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有