2014级本科《操作系统》实验6报告-1143730212+郭阳.doc

2014级本科《操作系统》实验6报告-1143730212+郭阳.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2014级本科《操作系统》实验6报告-1143730212郭阳

2014级本科《操作系统》实验报告(实验6) 学生姓名 郭阳 学号 1143730212 院系 软件学院 任课教师 范国祥 实验TA 冯诚 实验地点 软件学院三楼实验室 实验时间 2016年06月17日 星期五 实验题目 内存管理 实验学时 3学时 实验目的: 深入理解操作系统的段、页式内存管理,深入理解段表、页表、逻辑地址、线性地址、物理地址等概念; 深入理解操作系统的内存管理。 地址跟踪部分: 在调试工具下运行Linux0.11,在0.11中运行./test后暂停,看到此时指令为cmp、、、、、 可知,i的地址为ds:0x3004.故接下来需要知道对应的线性地址是啥 查看段寄存器的值,得知ldtr的值为0x0068,gdtr的值为0x00005cb8。可以看到ldtr的值是0x0068=0000000001101000(二进制),表示LDT表存放在GDT表的1101(二进制)=13(十进制)号位置。而GDT的位置已经由gdtr明确给出,在物理地址的0x00005c8。 用“xp /32w 0x00005c8”查看从该地址开始,32个字的内容,即GDT表的前16项 查到第13项的值为0xc2d00068 0x000082f9,得到ldt表的物理地址,0x00f9c2d0, “xp /8w 0x00f9c2d0”得到ldt表的前四项内容。 再看ds的段描述符。ds的值为0x0017,化为二进制为0000000000010111,所以prl=11,可见是最低特权级(因为在应用程序中执行),ti=1,表示查找ldt表,索引值为10(二进制)=2(十进制),即查找第三个段描述符的内容(从0开始编号)。为0x00003fff,0x10c0f300。得到ds在线性地址空间里的基地址为0又i的偏移量为0x3004,故得i的线性地址为0 (6)从线性地址计算物理地址。得页目录号为64,页号为3,页内偏移为4.查看cr3的内容,得到页目录表的基址为0。 (7)通过页目录表的第65项得到页目录号为64的物理页框的页面信息。 (8)0: 0x00faa027,其中027是属性。故页目录号64的物理基地址为0x00faa000,从该位置查找3号页表项。xp /w 0x00faa000+3*4,得到 (9)页号为3的物理基址为0x00fa7000,加上页内偏移得到i的物理地址为0x00fa7004。通过物理地址修改实际i的值为0. setpmem 0x00fa7004 4 0 可以看见程序退出了,说明我们的地址跟踪结果是正确的。 生产者消费者部分: 修改pc.c,把文件缓冲区修改为共享内存。 int *ShareAddress;//定义共享内存指针 shmid = shmget( 555204, BUFFERSIZE*sizeof(int), IPC_CREAT|0666);//创建共享内存,返回一个与key相关的共享内存标识符,这里key为555204(第一个参数key不要用IPC_PRIVATE,否则无法共享。用什么数字可视心情而定), ShareAddress = (int*)shmat(shmid, NULL, 0);// 用来启动对该共享内存的访问,并把共享内存连接到当前进程的地址空间。然后就可以在程序中对共享内存进行访问了。 在生产者中使用如下: 在消费者的使用与上述基本无差别,两次创建共享内存的参数须一致。 在Ubuntu下运行两个程序,结果如下: 可以看见与上次使用文件作为共享缓冲区基本无差别。 问题回答: () (1)先得到i的逻辑地址ds:0x3004,通过各种段表解析得到其线性地址为0(2)通过线性地址分析为页目录号为64,页号为3,页内偏移为4,查表得到物理地址为0x00fa7004 (3)根据物理地址修改i的内容,继续执行程序,发现程序退出了。 (2)test.c退出后,如果马上再运行一次,并再进行地址跟踪,你发现有哪些异同?为什么? ds:0x3004不会变,因为这个是逻辑地址。线性地址也不会变,但是物理地址会发生改变,因为物理地址是操作系统动态分配的,可能上一次的物理地址被占用了,故会发生改变。如图所示,在test.c结束后再次运行./test,并通过设置上次得到的i的物理地址得内容为0,程序却并没有退出,说明i的物理地址发生了改变。

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档