没有合适的资源?快使用搜索试试~ 我知道了~
第十八章-分页_介绍.md1 / 12第十八章-分页_介绍预备知识在本作业中,您将使用一个简单的程序(paging-linear-translate.py)来检
资源推荐
资源详情
资源评论
第十八章-分页_介绍.md
2021/10/27
1 / 12
第十八章-分页_介绍
预备知识
在本作业中,您将使用一个简单的程序(paging-linear-translate.py)来检查你是否了解简单的虚拟到物理地址
转换如何与线性页表一起使用。 要运行该程序,请输入python pages-linear-translate.py。
当使用-h(帮助)标志运行它时,您将看到:
Usage: paging-linear-translate.py [options]
Options:
-h, --help 显示帮助信息
-s SEED, --seed=SEED 随机种子
-a ASIZE, --asize=ASIZE
地址空间大小(e.g., 16, 64k, ...)
-p PSIZE, --physmem=PSIZE
物理空间大小 (e.g., 16, 64k, ...)
-P PAGESIZE, --pagesize=PAGESIZE
页的大小(e.g., 4k, 8k, ...)
-n NUM, --addresses=NUM 生成的虚拟地址数量
-u USED, --used=USED 映射的有效百分比
-v 详细模式
-c 计算答案
首先不使用任何参数运行:
>python paging-linear-translate.py
ARG seed 0
ARG address space size 16k
ARG phys mem size 64k
ARG page size 4k
ARG verbose False
ARG addresses -1
The format of the page table is simple:
The high-order (left-most) bit is the VALID bit.
If the bit is 1, the rest of the entry is the PFN.
If the bit is 0, the page is not valid.
Use verbose mode (-v) if you want to print the VPN # by
each entry of the page table.
Page Table (from entry 0 down to the max size)
0x8000000c
0x00000000
0x00000000
0x80000006
第十八章-分页_介绍.md
2021/10/27
2 / 12
Virtual Address Trace
VA 0x00003229 (decimal: 12841) --> PA or invalid address?
VA 0x00001369 (decimal: 4969) --> PA or invalid address?
VA 0x00001e80 (decimal: 7808) --> PA or invalid address?
VA 0x00002556 (decimal: 9558) --> PA or invalid address?
VA 0x00003a1e (decimal: 14878) --> PA or invalid address?
For each virtual address, write down the physical address it translates to
OR write down that it is an out-of-bounds address (e.g., segfault).
如您所见,该程序为您提供的是特定进程的页表(请记住,在具有线性页表的真实系统中,每个进程有一个页
表;这里我们仅关注一个进程,其地址空间 ,因此是一个单页表)。
页表告诉你地址空间的虚拟页号(VPN),虚拟页已映射到的特定的物理帧号(PFN),页号有效或无效。
页表项的格式很简单:最左边的(高阶)位是有效位;其余位(如果有效位为 1)为 PFN。
在上面的示例中,页表将 VPN 0 映射到 PFN 0xc(十进制 12),将 VPN 3 映射到 PFN 0x6(十进制 6),虚拟
页 1 和 2 无效(高位为 0)。
如果使用详细标志(-v)运行,会将 VPN(索引)打印到页表中。 在上面的示例中,使用-v 标志运行:
Page Table (from entry 0 down to the max size)
[ 0] 0x8000000c
[ 1] 0x00000000
[ 2] 0x00000000
[ 3] 0x80000006
然后,你需要做的是使用此页表将打印结果中提供给您的虚拟地址转换为物理地址。让我们看第一个:VA
0x3229。 要将这个虚拟地址转换为物理地址,我们首先必须将其分解为虚拟页号和偏移量。我们通过观察地址
空间和页面的大小来做到这一点。在此示例中,地址空间设置为 16KB(非常小的地址空间),页面大小为
4KB。因此,我们知道虚拟地址中有 14 位,偏移量为 12 位,为 VPN 留了 2 位。因此,使用我们的地址
0x3229(二进制 11 0010 0010 1001),我们知道前两位指定了 VPN。因此,0x3229 位于虚拟页面 3 上,偏移
量为 0x229。
接下来,我们在页表中查看 VPN 3 是否有效, 并映射到某个物理帧,我们可以看到它是有效的(高位为 1)并
映射到物理页 6。因此,我们可以通过物理页 6 并将其加上偏移量来获得最终的物理地址,如下所示:
0x6000(物理页,转义到适当的位置)或 0x0229(偏移量),得出最终物理地址:0x6229。因此,在此示例
中,我们可以看到虚拟地址 0x3229 转换为物理地址 0x6229。
要查看其余的解决方案,只需使用-c 标志(一如既往)即可:
VA 0: 00003229 (decimal: 12841) --> 00006229 (25129) [VPN 3]
VA 1: 00001369 (decimal: 4969) --> Invalid (VPN 1 not valid)
VA 2: 00001e80 (decimal: 7808) --> Invalid (VPN 1 not valid)
VA 3: 00002556 (decimal: 9558) --> Invalid (VPN 2 not valid)
VA 4: 00003a1e (decimal: 14878) --> 00006a1e (27166) [VPN 3]
第十八章-分页_介绍.md
2021/10/27
3 / 12
Problem1
问题描述
在做地址转换之前,让我们用模拟器来研究线性页表在给定不同参数的情况下如何改变大小。在不同参数变化
时,计算线性页表的大小。一些建议输入如下,通过使用 -v 标志,你可以看到填充了多少个页表项。
首先,要理解线性页表大小如何随着地址空间的增长而变化:
paging-linear-translate.py -P 1k -a 1m -p 512m -v -n 0
paging-linear-translate.py -P 1k -a 2m -p 512m -v -n 0
paging-linear-translate.py -P 1k -a 4m -p 512m -v -n 0
然后,理解线性页面大小如何随页大小的增长而变化:
paging-linear-translate.py -P 1k -a 1m -p 512m -v -n 0
paging-linear-translate.py -P 2k -a 1m -p 512m -v -n 0
paging-linear-translate.py -P 4k -a 1m -p 512m -v -n 0
在运行这些命令之前,请试着想想预期的趋势。页表大小如何随地址空间的增长而改变?随着页大小的增长
呢?为什么一般来说,我们不应该使用很大的页呢?
问题分析
页表大小 = 地址空间大小/页面大小*sizeof(PET)
问题解答
1. 页大小为 1k,地址空间大小为 1m
所以页数为 1m/1k = 1024
2. 页大小为 1k,地址空间大小为 2m
所以页数为 2m/1k = 2048
3. 页大小为 1k,地址空间大小为 4m
所以页数为 4m/1k = 4096
4. 页大小为 1k,地址空间大小为 1m
所以页数为 1m/1k = 1024
5. 页大小为 2k,地址空间大小为 1m
所以页数为 1m/2k = 512
6. 页大小为 4k,地址空间大小为 1m
所以页数为 1m/4k = 256
当使用很大的页时会造成大量空间被浪费(页的空间没有被使用完也不能再分割)。
剩余11页未读,继续阅读
资源评论
glowlaw
- 粉丝: 22
- 资源: 275
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功