操作系统实验八

发布时间 : 星期六 文章操作系统实验八更新完毕开始阅读

实验八 分页存储器管理

一、 实验目的

·学习 i386 处理器的二级页表硬件机制,理解分页存储器管理原理。 ·查看 EOS 应用程序进程和系统进程的二级页表映射信息,理解页目录和页表的管理方式。

·编程修改页目录和页表的映射关系,理解分页地址变换原理。 二、 实验内容

1、 执行了实验指导书3.2的步骤,观察到了EOS 应用程序进程的页目录和页表, 说明了页目录所在的物理页框号是从 CR3 寄存器中取得的,并且在页目录中显示了所有有效的 PDE 的下标和 PDE 的值。在各个页表中也同样显示了所有有效的PTE 的下标和值。在下标为 0x200 的 PDE 对应的页表中,所有的 1024 个 PTE都映射了物理页,且这 1024 个物理页的物理页框号是连续的。页目录和物理页中都标记了它们所在的逻辑地址,也就是说通过访问这些逻辑地址,就可以访问这些物理页中的数据。但是,在页表中却标记了每个页表所能够映射的 4MB 逻辑地址空间的基址,这样可以方便用户从页表信息中迅速掌握进程在 4GB 逻辑地址空间中的布局。当EOS操作系统启动i386处理器的分页机制后,就只能使用逻辑地址(虚拟地址)来访问物理内存,所以只有知道了页目录和页表的虚拟地址,才能够访问它们。

2、 针对实验指导书3.2中提出的问题,进行以下尝试和回答:

应用程序进程的页目录和页表一共占用了几个物理页?页框号分别是多少?

答:页目录占用一个物理页,页框号是0x409;页表占用5个物理页,页框号分别是是0x41D、0x401、0x403、0x404、0x402。

映射用户地址空间(低 2G)的页表的物理页框号是多少?该页表有几个有效的 PTE,或者说有几个物理页用来装载应用程序的代码和数据?物理页框号分别是多少?

答:映射用户地址空间的页表的页框号是0x41D;该页表有11个有效的PTE;物理页框号分别是0x41E、0x41F、0x420、0x421、0x422、0x423、0x424、0x425、0x426、0x427、0x428。

3、 执行了实验指导书3.3的步骤,观察到了应用程序进程和系统进程并发时系统进程的页目录和页表。学到了页目录在虚拟地址空间中的基址的获得方式:页目录的第0x300个PDE映射的页表就是页目录本身,这样页表(页目录)的第0x300个PTE又映射到页目录,所以用PDE标号(0x300)做32位线性地址的高10位,用PTE标号(0x300)做12-22位,就得到了地址0xC0300000。同理,页表在虚拟地址空间中基址的获得方式:页目录的第0x300个PDE映射的页表是页目录本身,而且页目录的第0x0个PDE映射了第0x0个页表,所以页表(页目录)的第0x0个PTE就映射到第0x0个页表。用PDE标号(0x300)做32位线性地址的高10位,用PTE标号(0x0)做12-22位,就得到了地址0xC0000000。 4、 针对实验指导书3.3中提出的问题,进行以下尝试和回答:

EOS 启动后系统进程是一直运行的,所以当创建应用程序进程后,系统中就同时存在了两个进程,这两个进程是否有各自的页目录?在页目录映射的页表中,哪些是应用程序进程和系统进程共享的,哪些是独占的?分析其中的原因。

答:系统进程和应用程序进程一定有各自的页目录;映射了用户地址空间的页表被应用程序进程独占,页框号是0x41D,映射了内核地址空间的页表都是共享的。

统计当应用程序进程和系统进程并发时,总共有多少物理页被占用? 答:系统进程占用的物理页只有页目录与其不同,所以应用程序进程占用的1066物理页,系统进程页目录占用的1物理页,总共1067物理页被占用。

思考为什么系统进程(即内核地址空间)占用的物理页会减少?

答:应用程序结束后,EOS内核会删除应用程序进程在内核地址空间中占用的内存,例如删除PCB对象等。这些内存必须要回收,否则如果一个应用程序反复运行多次,内核空间就有可能被耗尽,操作系统就失去了可靠性。

5、 执行了实验指导书3.4的步骤,观察到了同一个应用程序的可执行文件创建的两个应用程序进程在并发时各自的页目录和页表,学习到了多个应用程序进程是如何共享内核空间的,以及同一个应用程序的不同进程是如何拥有各自独立的用户空间,从而完成隔离的。

同一个应用程序创建的两个并发的进程,它们的用户虚拟地址空间完全相同,而映射的物理页完全不同,从而保证相同的行为(执行过程)可以在独立的空 间内完成。

6、 针对实验指导书3.4中提出的问题,进行以下尝试和回答:

假设进程一使用的 0x416 和 0x417 物理页保存了应用程序的可执行代码,

由于可执行代码通常是不变的、只读的,现在假设优化过的 EOS 允许同一个应用程序创建的多个进程可以共享那些保存了可执行代码的物理页,尝试结合图 16-3 写出共享可执行代码的物理页后进程二用户地址空间的映射信息。并说明共享可执行代码的物理页能带来哪些好处。

答:共享可执行代码的物理页可以提高运行效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。

前面的问题只是解决了共享可执行代码物理页的问题,其实就算是易变的数据所占用的物理页也是可以共享的。例如在创建进程二时,可以使之共享进程一中那些还没有发生过写操作的数据页,然后当进程一或进程二对共享的数据页进行写操作时,必须先复制一个新的数据页映射到自己的进程空间中,然后再完成写操作,这就是“写时复制”(Copy on write)技术。请读者进一步说明使用“写时复制”技术能带来哪些好处。感兴趣的读者也可以尝试在 EOS 操作系统中实现“写时复制”技术。

答:写时复制是一种计算机程序设计领域的优化策略。其核心思想是,如果有多个调用者同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本给该调用者,而其他调用者所见到的最初的资源仍然保持不变。这过程对其他的调用者都是透明的。写时复制的优点是如果调用者没有修改该资源,就不会有副本被建立,因此多个调用者只是读取操作时可以共享同一份资源。

统计当两个应用程序进程并发时,总共有多少物理页被占用?有更多的进程同时运行呢?根据之前的操作方式,尝试在更多的控制台中启动应用程序来验证自己的想法。如果进程的数量足够多,物理内存是否会用尽,如何解决该问题? 答:以进程1占用的物理页为基准,进程2共有14个物理页与其不同,1069+14=1083,即总共有1083物理页被占用。如果有更多的进程同时运行,就会有更多的物理页被占用,由于物理页的数量是有限的,物理内存会被用尽。可以使用虚拟内存技术解决该问题。

7、 执行了实验指导书3.5的步骤,学会了在系统进程的二级页表中映射新申请的物理页。说明了虽然进程可以访问 4G 虚拟地址空间,但是只有当一个虚拟

地址通过二级页表映射关系能够映射到实际的物理地址时,该虚拟地址才能够被访问,否则会触发缺页异常;所有未用的物理页都是由 EOS 操作系统内核统一管理的,使用时必须向内核申请;为虚拟地址映射物理页时,必须首先为页目录安装页表,然后再为页表安装物理页,并且只有在刷新快表后,对页目录和页表的更改才能生效;不同的虚拟地址可以映射相同的物理页,从而实现共享。

验证以上第一个结论时,通过调试EOS会出现蓝屏,并显示错误原因是由于 14 号异常(缺页异常)引起的。原因就是由于从MapNewPage.c 文件复制的第二行代码所访问的虚拟地址没有映射物理内存,所以对该虚拟地址的访问会触发缺页异常,而此时 EOS 还没有为缺页异常安装中断服务程序,所以就调用 KeBugCheck 函数显示蓝屏错误了。调试结果如图所示:

注释掉会触发异常的那行代码,EOS恢复正常,调试结果如图所示:

联系合同范文客服:xxxxx#qq.com(#替换为@)