山东大学操作系统课设lab7

  • 实验七 虚拟内存(lab7)
    • 实验目的
    • 实验环境
    • 实验思路
    • 关键源代码注释以及程序说明
    • 调试记录

实验七 虚拟内存(lab7)

实验目的

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

实验环境

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

实验思路

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

关键源代码注释以及程序说明

本实验思路来自如下网页:
https://wenku.baidu.com/view/9383d57a5acfa1c7aa00ccd6.html
主要是看machine文件夹里的translate.h和translate.cc吧,这应该就是如何去物理内存里找页的方法。有虚拟内存、物理内存这样的属性。
初始如下:

需进行修改:
添加一种类型PageType,包括该页中代码、初始化数据、未初始化数据、用户栈。
新定义了两个属性,一个是该页在文件中块偏移量inFileAddr,一个是当前页存储的数据类型type。

在lab6里有在progtest.cc声明过一个BitMap类,用来记录内存中物理页的分配情况。之前是为了多用户并行,才需要设置全局变量来控制程序。这里的交换页同样是全局问题,故也需要在progtest.cc里声明一个全局变量BitMap。以下是lab6的变量设置:

将userprog文件夹里的文件拷贝到lab7中,添加新变量,SwapBitMap和SwapFile。

在AddrSpace里添加4个私有属性,
保存指向用户文件的指针OpenFile;
当下正在执行的用户文件的NoffHeader;
页置换用FIFO算法,添加virtualMem数组和p_vm指针,virtualMem存储的是按进入内存的先后顺序排列的当前占用内存空间的虚页,p_vm指针指向数组中当前将要被换出的那个位置。

在addrspace.h和addrspace.cc中添加方法

调试记录


可以看出,我的96行是空行,怎么会报错呢?
忘记make了。
报错,是中间有一个void和方法名没有空格。语法错误。
修改sort.c里的数组长度,避免打印过多,初始值是1024。

重新对test进行编译
再对lab7-8编译
结果正确。


操作系统课设--虚拟内存相关推荐

  1. 操作系统课设之虚拟内存页面置换算法的模拟与实现

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  2. 操作系统课设之简单 shell 命令行解释器的设计与实现

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  3. 操作系统课设之基于信号量机制的并发程序设计

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  4. 操作系统课设之内存管理

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  5. 操作系统课设之Windows 的互斥与同步

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  6. 操作系统课设之Linux 进程间通信

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  7. 操作系统课设之Linux 进程管理

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  8. 操作系统课设之Windows 进程管理

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  9. 操作系统课设--系统调用

    山东大学操作系统课设lab6 实验六 系统调用(lab6) 实验目的 实验环境 实验思路 调试记录 实验六 系统调用(lab6) 实验目的 扩展现有的class AddrSpace的实现,使得Nach ...

最新文章

  1. php读取文件和读取redis,本地测试读取redis和普通文件缓存的速度,redis慢一倍?...
  2. Source Insight常用的快捷键
  3. 网络中的计算机如果加入家庭组,win10系统加入其他计算机家庭组的操作方法
  4. 全网首秀,我用动画展现Pycharm十大实用技巧
  5. (转)编码剖析Spring管理Bean的原理
  6. 正则表达式和Java编程语言1zz
  7. Javascript特效:一个不停的表盘
  8. 【心电信号】基于matlab心电信号PTT+HRV+PRV【含Matlab源码 158期】
  9. synchronized工作原理剖析(一)
  10. JS学习之Object
  11. linux非root用户添加rzsz,linux RZSZ RZSZ 安装
  12. 九歌计算机在线作诗硬件原理,清华大学矣晓沅:「九歌」——基于深度学习的中国古典诗歌自动生成系统...
  13. gitlab 503 错误的解决方案
  14. Binarized Neural Network : BNN二值神经网络代码实例
  15. 无人驾驶感知篇之传感器标定(二)
  16. Java中利用freemarker导出word表格并合并单元格
  17. Python实验报告
  18. poj求排列的逆序数
  19. java集合(附源码分析)
  20. 用Python写了一个植物大战僵尸小游戏

热门文章

  1. Linux什么是文件IO,linux中文件IO
  2. html中如何把两行合并单元格,怎么把Excel单元格中多行文字合并为一行(2)
  3. 数据中心存储解决方案市场将迎来快速增长
  4. 数据中心“泡澡”散热,阿里云启用全球最大液冷数据中心支撑双11
  5. 浅谈电量传感器在数据中心不间断电源中的应用
  6. 空调水系统的节能方式与水泵调节
  7. AI:Algorithmia《2020 state of enterprise machine learning—2020年企业机器学习状况》翻译与解读
  8. Autolisp:利用AuoCAD之Lisp编程案例之自动智能获取所选对象的面积并标注在指定位置
  9. Hadoop中任务提交运行流程
  10. 【转载】IIS网站配置不带www域名直接跳转带www的域名