实验七 虚拟内存(lab7)

实验目的

在未实现虚拟内存管理之前,Nachos在运行一个用户进程的时候,需要将程序运行所需所有内存空间一次性分配。虚拟内存实现将突破物理内存限制。本实验核心任务为根据理论学习中涉及的兑换技术,设计并实现用户空间的虚拟内存管理。

实验环境

虚拟机下Ubuntu Linux 16.04 LTS系统,nachos-3.4内核管理模块和MIPS CPU软件模拟模块,代码在lab6文件夹下面实现。

实验思路

我已经完全忘记了大二下学期学的虚拟内存是什么了,连概念都不记得,去查了一下才记起来和虚拟内存相对应的是物理内存。看了这个网页,添加链接描述
大概知道物理内存是平时我们理解的内存,就是一般都会从硬盘里把数据拿进来用,因为内存速度比硬盘快很多。但是有时候内存不够用,就要用上硬盘,所以虚拟内存其实是占用硬盘中的空间,不过是和真正内存对应起来的,有建立索引,每次不够用了,就可以把现有的这些换出去放到硬盘里先存着,把想要的page换进来。这样换来换去,反反复复,就很少的内存空间可以对应很多的硬盘空间,相当于有很多虚拟内存可以使。我差不多是这样理解。
有一个很重要的步骤是交换。在发生缺页错误时,才需要交换。真正的内存不够用的时候,需要把物理内存通过虚拟地址当成内存换进来。就其实内存能容纳的地方并没有变多,也没有变少,只是因为可以交换,所以可以把旧的换出去,新的换进来,就可以认为我们多了很多虚拟内存。

关键源代码注释以及程序说明:
主要是看machine文件夹里的translate.h和translate.cc吧,这应该就是如何去物理内存里找页的方法。有虚拟内存、物理内存这样的属性。
操作系统课设--虚拟内存
涉及到较底层的问题,在machine类进行修改。添加一个新的映射方式bitmap,并且添加一个类来实现虚拟内存的管理virtualmem。在machine.h和machine.cc里添加。
操作系统课设--虚拟内存

操作系统课设--虚拟内存
操作系统课设--虚拟内存

对于替换算法的实现,在TranslationEntry增加两个属性,记录引入内存的时间和被引入的次数。在每次选择page时,首先选择counter最小的块,在最小的块里再选择time_stamp里最小的块,也就是引入时间最远的块。在每一个块被换入时,设置这个被换入的块
操作系统课设--虚拟内存
还没有写完。

调试记录

相关文章:

  • 2021-11-11
  • 2021-06-12
  • 2021-10-19
  • 2021-08-16
  • 2022-01-22
  • 2021-07-30
  • 2021-10-05
  • 2021-12-11
猜你喜欢
  • 2021-09-05
  • 2021-10-28
  • 2021-07-20
  • 2021-11-03
  • 2021-10-12
  • 2021-05-03
  • 2021-12-22
相关资源
相似解决方案