操作系统-实验三、虚拟内存管理

虚拟内存管理

  • 实验目的

(1)理解操作系统中缺页中断的工作原理。

(2)学会通过修改内核实现统计系统缺页次数的方法

  • 实验内容

通过修改 Linux内核中的相关代码,统计系统缺页次数。

  • 实验步骤

(1)在内核源代码中找到include/linux/mmh文件,声明变量pfcount用于统计缺页次

数,如图9.1所示。

同样,在/arch/x86/mm/fault.c文件中定义变量 pfcount,如图 9.2 所示,并在

o_page_fault0函数中找到并修改 good area,以使变量 pfcount 递增 1,如图9.3 所示。

(3)修改 kermel/kallsymsc 文件,即在这个文件的最后插人“EXPORT_SYMBOL

(pfcount);”该步的作用是使得在EXPORT_SYMBOL标签内定义的函数或变量对全部内

核代码公开。既可以使用文本编辑器修改这个文件,如图9.4 所示,也可以使用命令 echo

EXPORTSYMBOL(pfcount);'>>kernel/kallsyms.c来完成修改。

(4)重新编译内核

(5)编写测试程序readpfcount.c。测试程序的功能是以内核模块的形式读取pfcount的

值并输出。参考代码如下:

编写相应的Makefile文件,参考代码如下:

(6)编译并加载内核。

  • 实验结果

内核加载成功后,输入如下命令,测试实验结果,如图所示。

五、实验总结

1.说明本实验中统计缺页次数的原理,并阐述其合理性

(1)缺页中断的原理

在操作系统中,虚拟内存是一种抽象概念,它允许程序使用比物理内存更大的地址空间。当程序访问虚拟内存中的某个页面时,如果该页面当前未加载到物理内存中,就会发生缺页中断。

缺页中断是一种由处理器触发的异常,它指示操作系统需要将所需页面从磁盘加载到物理内存中。缺页中断的工作原理如下:

当程序访问某个虚拟地址时,处理器会检查该地址对应的页面是否已加载到物理内存中。

如果页面已在物理内存中,则处理器正常执行读取或写入操作。

如果页面未加载到物理内存中,则处理器触发缺页中断,并将控制权交给操作系统内核。

操作系统内核根据缺页中断的信息,确定需要加载哪个页面。

内核查找页面所在的磁盘位置,并将页面读取到物理内存中的空闲页面中。

内核更新页面表和相关数据结构,以反映页面已经加载到物理内存中。

处理器恢复执行被中断的指令,重新访问虚拟内存中的页面。

(2)统计系统缺页次数的方法

要统计系统的缺页次数,可以通过修改 Linux 内核的相关代码来实现。具体方法如下:

在内核中找到处理缺页中断的代码段。

在缺页中断处理代码中增加一个计数器,用于记录缺页次数。

在每次发生缺页中断时,将计数器递增。

可以将缺页次数记录在内核的数据结构中,或者通过特定的系统调用将缺页次数返回给用户空间。

(3)统计缺页次数的原理及其合理性

统计缺页次数的原理是在缺页中断处理代码中添加计数器,并在每次缺页中断发生时进行递增。这样做的合理性在于:

缺页次数是评估系统内存管理性能的重要指标。通过统计缺页次数,我们可以了解系统中缺页的频率,进而评估内存分配策略和调度算法的效果。

缺页次数可以用于诊断系统性能问题。如果系统的缺页次数过高,可能表示内存不足或者页面置换算法不合理,从而影响系统的性能和响应时间。

统计缺页次数可以帮助系统管理员或开发人员确定系统的瓶颈所在,进而优化系统的内存管理策略,提高系统的性能和可靠性。

2.实验过程中出现的问题及对应的解决方法

问题1:makefile文件编写错误导致无法编译成功

解决方法:查看报错信息,根据错误提示进行修正。

问题2:fault.c文件编写错误导致无法编译成功

解决方法:查看报错信息,根据错误提示进行修正,发现是把()错误的写成了大括号,再返回fault.c文件修改,重新编译。

问题3:最后一步的make以及insmod readpfcout.ko运行报错

解决方法:检查发现 make指令以及insmod readpfcout.ko指令应该在makefile 、readpfcount.c文件所在的目录下运行,并且是特权模式下才可以正常运行。

3.总结体会

本次实验围绕Linux的虚拟内存展开,虚拟内存为每个进程提供了一个一致的、私有的地址空间,它让每个进程产生了一种自己在独享主存的错觉。

虚拟内存主要有如下三个功能:

①把主存看作为一个存储在硬盘上的虚拟地址空间的高速缓存,并且只在主存中缓存活动区域(按需缓存)。

②为每个进程提供了一个一致的地址空间,从而降低了程序员对内存管理的复杂性。

③还保护了每个进程的地址空间不会被其他进程破坏。

CPU中含有一个被称为内存管理单元(Memory Management Unit, MMU)的硬件,它的功能是将虚拟地址转换为物理地址。MMU需要借助存放在内存中的页表来动态翻译虚拟地址,该页表由操作系统管理。

当CPU遇见缺页时会触发一个缺页异常,缺页异常将控制权转向操作系统内核,然后调用内核中的缺页异常处理程序,该程序会选择一个牺牲页,如果牺牲页已被修改过,内核会先将它复制回硬盘(采用写回机制而不是直写也是为了尽量减少对硬盘的访问次数),然后再把该虚拟页覆盖到牺牲页的位置。

当缺页异常处理程序返回时,它会重新启动导致缺页的指令,该指令会把导致缺页的虚拟地址重新发送给MMU。由于现在已经成功处理了缺页异常,所以最终结果是页命中,并得到物理地址。

这种在硬盘和内存之间传送页的行为称为页面调度:页从硬盘换入内存和从内存换出到硬盘。当缺页异常发生时,才将页面换入到内存的策略称为按需页面调度,所有现代操作系统基本都使用的是按需页面调度的策略。

通过本次实验,我不仅加深了对操作系统内存管理的理解,还提升了对内核代码修改和编译的能力。还让我体验到了操作系统内存管理的实际操作和应用,并对评估和优化系统性能有了更深入的认识。我对Linux的虚拟内存有了进一步掌握,熟悉了其工作原理。对缺页异常的产生有了一定了解,掌握了统计缺页异常的方法。

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 操作系统课设实验七是关于nachos内存地址扩展的实验。在操作系统中,内存地址扩展是为了解决内存空间不足的问题,能够扩大可用的内存地址范围。 在这个实验中,我们需要实现内存地址扩展的功能。首先,我们需要修改内核代码,以支持更大的内存空间。这包括对页表、内存管理和地址映射等方面的修改。 接下来,我们需要修改操作系统的编译选项,以允许nachos使用扩展后的内存地址。这可能涉及到修改编译器、链接器和加载器等工具链的配置。 然后,我们需要运行一系列的测试用例来验证内存地址扩展的功能。这些测试用例涵盖了不同的场景,包括进程的创建与销毁、内存的分配与释放、页表的更新等。通过这些测试用例的运行,我们可以验证内存地址扩展是否成功地被实现。 最后,我们还需要撰写一份实验报告,详细描述我们在实验中遇到的问题、解决的方法以及实验结果。这份报告应包括实验设计、实验步骤、结果分析和总结等内容。 总的来说,实验七的目标是通过对nachos内核代码的修改和配置,实现内存地址的扩展功能,并验证其正确性和可行性。通过这个实验,我们可以更深入地理解操作系统内存管理机制,并且加深对nachos操作系统的理解和熟悉程度。 ### 回答2: 在操作系统课设实验七中,我们将学习如何扩展Nachos操作系统中的内存地址空间。 内存地址扩展是指增加系统能够使用的内存地址范围。在Nachos操作系统中,默认的内存地址范围是32位,即可以寻址的内存大小为2^32个字节。然而,随着计算机系统的发展和应用的需求增加,这样的内存地址范围已经不足以满足现代计算机系统的要求。 在扩展内存地址空间之前,首先需要了解操作系统是如何管理内存的。在Nachos中,操作系统使用页表来实现虚拟内存的管理。每个进程都有自己的页表,其中记录了虚拟页面和物理页面之间的映射关系。操作系统通过访问页表来确定虚拟地址对应的物理地址。 实现内存地址扩展需要进行以下几个步骤: 1. 修改页表的结构:为了支持更大的内存地址范围,我们需要修改页表的数据结构。可以考虑使用更长的物理地址字段或者增加页表的层次结构来扩展内存地址范围。 2. 修改地址翻译机制:修改地址翻译机制,使其支持新的页表结构。这涉及到对地址翻译机制的修改和扩展,确保能够正确地将虚拟地址转换为物理地址。 3. 修改内存管理:修改内存管理模块,以支持更大的内存地址范围。这可能涉及到对缺页异常处理、页面替换算法和内存分配算法等方面的修改。 4. 修改其他相关模块:可能还需要修改其他相关模块,以适应新的内存地址扩展。 通过以上步骤的修改,我们可以成功地扩展Nachos操作系统的内存地址空间。这样做可以提高系统的性能和资源管理能力,更好地满足现代计算机系统的需求。 ### 回答3: 操作系统课设实验七是关于Nachos内存地址扩展的。在实验中,我们需要扩展Nachos操作系统的内存地址空间。 首先,为了理解内存地址扩展的必要性,我们需要了解Nachos操作系统的内存地址限制。在默认情况下,Nachos操作系统的内存地址空间是有限的,这意味着我们只能使用有限的内存来运行程序。然而,在实际应用中,我们经常需要处理更大规模的问题,这就需要更大的内存空间来存储和运行程序。 为了扩展内存地址,我们可以采用虚拟内存的方法。虚拟内存是一种计算机系统的内存管理技术,它可以将物理内存和逻辑内存分开,从而使得程序可以使用比物理内存更大的地址空间。在Nachos中,我们可以使用页面替换算法来实现虚拟内存。 页面替换算法是一种将内存中的页面与硬盘中的页面进行交换的技术。当内存空间不足时,在Nachos中,我们可以选择将一部分不常用的页面从内存中换出到硬盘中,从而腾出内存空间来加载更多的页面。当需要访问被换出的页面时,我们可以将其从硬盘中换入到内存中,这样就可以实现对更大内存地址的访问。 在实验中,我们可以使用Nachos操作系统提供的一些接口来实现内存地址扩展。例如,我们可以使用Nachos的PageTable来管理页面的映射关系,使用TranslationEntry来表示页面的状态。我们还可以使用SwapSpace来管理页面的换入和换出。 总之,操作系统课设实验七主要涉及了Nachos内存地址扩展的实现。通过虚拟内存和页面替换算法,我们可以扩展Nachos操作系统的内存地址空间,以满足处理更大规模问题的需求。实验中,我们可以使用Nachos提供的接口来管理页面的映射、状态和换入换出操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值