操作系统实验三实验报告

  • 格式:doc
  • 大小:660.50 KB
  • 文档页数:9

1
高级操作系统
实 验 报 告

实验名称: 进程地址空间分析
学 员: 学 号:
培养类型: 专硕 年 级:
专 业: 软件工程 所属学院: 计算机学院
指导教员: 文艳军 职 称: 副教授
实 验 室: (无) 实验日期: 20190301

国防科学技术大学训练部制
2

一、实验目的和内容
实验目的:掌握Linux进程地址空间的组织⽅方式,掌握⽅页帧的
反向映射机制,掌握⽅文件的缓冲机制,提⽅高内核调试技术。
实验内容:附件中的程序abc在运行时会创建3个进程,请分析这
3个进程的数据段所在的页帧位置,并用图示的方式画出这些页帧的反向
映射状态及其变化过程,分析可能映射该页帧的所有线性区。
要求至少分析以下控制点:
•do_execve(“abc”)刚执行完时,此时该程序还没运行。
•abc的main函数刚开始运行时,此时该程序还没创建子进程。
•abc创建子进程之后(两次)。
•在这3个进程的数据段里发生的页故障刚处理理完时。
2.上述程序abc正常运行时会输出如下字符串串:
this is not a test
you are modified
请在gdb调试过程中手动修改页表项,使程序abc运行行结束后再
次运行时输出如下:
you are modified
you are modified。
二、操作方法与实验步骤
(1) 在UBUNTU中编译abc程序,由于虚拟机是64位的,而用于调
试的内核是32位的,所以编译指令为

(2) 将生成的可执行文件abc放入实验用的qemu虚拟机,先将现有
的文件系统解压,将abc程序放入/bin目录下后,重新打包,启动虚拟
机后,在/bin下运行abc程序。测试能否正确输出。

(3) 作系统内核,绘制进程运行的时序图,首先设置断点,如下图:
3

(4)启动abc程序,当程序运行到断点main()处时,我们可以观察到程序
的载入情况,

定义一个proc函数,该函数通过传递页目录pgd和数据段加载的虚
拟地址为参数,输出页帧,展示mem_map内容,输出mapping的16进制
和2进制结果和页在文件中的页偏移量。接下来分析页帧的反向映射情况,
用页帧号查mem_map数组,判断页帧的类型。如果对应数组元素的 mapping
字段的最低位为1,则说明是一个匿名页,该mapping指向的是一个
anon_vma对象;否则此页帧为一个文件页,该mapping字段指向的是一个
address_space对象。
4

通过proc函数查看进程的页表信息
最后一位为1,说明是匿名项,通过定义的an函数,输出页表信息
则将mapping的值带入到an函数中,
5

最后一位为0,说明已经分配物理页表,通过定义的as函数,输出
页表信息

则将mapping的值带入到as函数中,可以输出分配的物理页信息,
通过输出的信息画出页表的关系图
6
7
8

程序运行时的页表状态图如上所示。
现在修改页表项,实现程序的输出状态改变,根据程序运行时映射的
物理页表项地址,查找到对应的虚拟地址为0xc626f000,对应的页内偏移
为0xeb

按照对应的地址查看物理地址
查看物理地址处的内容

可以看到这里存储的语句就是我们需要改变的,修改其属性,使其可
写,即将物理地址的末尾置1
9

然后逐字节修改物理块的内容,达到改变输出的目的,这里要注意写
物理地址时地址端高位在前,所以我们要四字节倒置来写

修改完成后,重新启动abc程序运行,可以看到输出改变了
三、实验结果与分析
通过对abc程序进程地址空间动态追踪分析,较好的掌握了虚拟地址与物理地
址的对应关系,物理地址的对应字节含义等内容,也锻炼了gdb调试能力。
四、问题与建议(可选)