Paging-linear-translate.py
来源:互联网 发布:攻击根域名服务器 编辑:程序博客网 时间:2024/06/05 02:31
1 作业要求
通过运行 paging-linear-translate.py 这个程序,来理解进程虚拟地址到物理地址的转换,通过不同的参数来对进程地址空间,页表进行修改。
2 具体操作
2.1 参数说明
Options:-h, --help 帮助信息-s SEED, --seed=SEED 改变seed的值-a ASIZE, --asize=ASIZE 改变虚拟地址大小-p PSIZE, --physmem=PSIZE 改变物理地址大小-P PAGESIZE, --pagesize=PAGESIZE 改变页大小-n NUM, --addresses=NUM 测试的虚拟地址个数-u USED, --used=USED Page Table中有效页的个数-v 详细模式-c 计算结果
2.2 具体测试
2.2.1 使用默认地址大小
虚拟地址的大小为16k (14 bit)。page大小为4k(12bit)。因此还剩下2bit用作Page Table的索引。因此Page Table的大小应该为4。
物理地址的大小为64k(16bit)。因为page的大小为4k(12bit),因此还剩下4bit。我们可以选择最左边的那个bit用作标志位,该标志位用来判断当前的物理页是否有效。
我们来计算第一个Virtual Address:0x00003229
将地址拆分:11 0x229
最左边的2个bit为11,因此对应于第四个Page。查看最左边一位:1 。因此该物理页有效。选择其中最右边的4bit:0x6(0110),因此最后的物理地址为:0x6229。
计算第二个Virtual Address:0x00001369
将地址拆分:01 0x369
最左边的2个bit为01,因此对应于第二个Page。查看最左边一位:0 。因此该物理页无效。输出Invalid。
其它二个Virtual Address的结果分析类似。
因此最后结果为:
验证结果:
2.2.2 修改物理地址空间为32k,虚拟地址空间为64k,计算结果。
我们发现,程序运行报错。
查看程序的限制:
if psize <= 1: print 'Error: must specify a non-zero physical memory size.' exit(1)if asize < 1: print 'Error: must specify a non-zero address-space size.' exit(1)if psize <= asize: print 'Error: physical memory size must be GREATER than address space size (for this simulation)' exit(1)if psize >= convert('1g') or asize >= convert('1g'): print 'Error: must use smaller sizes (less than 1 GB) for this simulation.' exit(1)vabits = int(math.log(float(asize))/math.log(2.0))mustbepowerof2(vabits, asize, 'address space must be a power of 2')pagebits = int(math.log(float(pagesize))/math.log(2.0))mustbepowerof2(pagebits, pagesize, 'page size must be a power of 2')
我们发现它的限制为:物理地址和虚拟地址的大小必须大于1,小于1G,并且为2的k次方。并且物理地址的大小必须大于虚拟地址。
2.2.3 使用其它参数
-s 1 -a 64k -p 32k -P 8k -n 5
修改 虚拟地址大小为32k(15bit),物理地址大小为64k(16bit),Page大小为8k(13bit)。测试的虚拟地址数量为5。
计算结果:(过程省略,与上面的计算过程相同)
验证:(-v是详细模式)
2.2.4 使用-u参数
-u参数可以改变Page Table中有效的物理页个数。默认的是50%。修改为100%
我们发现Page Table中所有的Page 都是有效的。这样最后所有的虚拟地址都能转换为物理地址。
- Paging-linear-translate.py
- Paging-multilevel-translate
- paging
- paging
- translate
- translate
- translate
- translate
- translate
- translate
- translate
- translate
- translate
- TRANSLATE
- translate
- translate
- translate
- Translate
- C++11之继承构造函数
- C# 网络爬虫——分析目标网站
- Java的几个基本类型之间的相互转换
- 小程序系列——进
- 中断及中断处理过程
- Paging-linear-translate.py
- vc6.0 提取*.lst文件,中函数地址,数据地址,应用实例 红色部分显示
- 【python】【穆晨】【171208】连续第五十九天总结
- PELCO协议
- 关于JS闭包的理解
- 网站安装ssl证书(http转https)
- 如何才能有仪式感的去提高和学习技术?
- 基于c++11的100行实现简单线程池
- VisualGDB安装使用