山东大学操作系统课设lab6

  • 实验六 系统调用(lab6)
    • 实验目的
    • 实验环境
    • 实验思路
    • 调试记录

实验六 系统调用(lab6)

实验目的

扩展现有的class AddrSpace的实现,使得Nachos可以实现多用户程序。
按照实验指导书中的方法,完成class AddrSpace中的print函数。
实现Nachos 系统调用:Exec()。

实验环境

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

实验思路

有参考这个网页:https://blog.csdn.net/mottled233/article/details/78633571
先看machine文件夹,里面有一个mipssim.cc,mipssim是模拟器的意思,可以模拟一个完整系统的窗口:代码窗口、寄存器窗口、流水线窗口、时钟周期图窗口、内存窗口、统计窗口和断点窗口,我认为是模拟用户程序的完整过程。有一个Run()方法,应该是在运行整个系统,for循环里每条指令都作为参数依次传入OneInstruction()中。

然后看看OneInstruction(),感觉主体是一堆的case。当执行不同的指令时,寄存器的数组里存放不同的数。


case的这些语句中,有一个对本实验很重要的语句,即系统调用的情况。

可以看出,它是抛出了一个系统调用的异常。这里直接return了,而没有break,会导致无限循环,而不是直接跳出可以进行下一步。这个SyscallException可以在userprog的exception.cc中找到。

现在已有的程序只对halt这一种情况的系统调用进行了处理,之后要补充。

然后可以看到实验要求说要实现系统调用:Exec()。Exec()是指在一个进程中启动另一个进程执行的方法。而exit()是用来使进程中止的。

Exec()系统调用可以在userprog的syscall.h中找到。可以从方法中看出,根据name启动了另一个进程的执行,并行执行,并返回新的程序的内存空间标识符给SpaceId。
通过exception.cc可以看出,系统调用的参数传递与一般函数的参数传递不同,它的传递参数和返回值都要用寄存器保存。其中,传递参数保存在r4-r7,返回值保存在r2。

关键源代码注释以及程序说明:
只用把userprog放进lab6里就好,其他要改的直接在当前文件夹中修改。

需要修改…/bin/arch/unknown-i386-linux/bin/coff2noff的权限,使其可执行。
sudo chmod -R 777 某一目录可以解决
其中
-R 是指级联应用到目录里的所有子目录和文件
777 是所有用户都拥有最高权限

然后是exception.cc,我认为这是最重要的一个文件。原来它只是提供了一种情况的异常处理方法,本题中要求的exec和exit都没有提供,所以要自己写,补充上这两条的case就好。看的网上说,为了让格式好看一些把原本就有的Halt也写到case里,格式统一一些。

然后加上exec()和exit()


其中AdvancePC()、StartProcess()也写在exception.cc,不过在各种case的处理前。



为了设置全局唯一标识,需要一个属性记录这个标识,并给其赋初始值。
在system.h和system.cc里设置一个数组ThreadMap去标识它,system.cc里既要赋初值,也要记得删掉的。赋初值可以用bzero(),也可以直接for循环。




最后在test文件夹里添加exe.c和修改halt.c,调用exec()和exit()。如下:

调试记录

./nachos -x …/test/halt.noff
如果想要打印,就./nachos -d m -x …/test/halt.noff
得到了一堆bug。说我重复定义,error太多了,但是最后一行只说error 1,所以大概是一种错误。我本来以为导入时要把.h和.cc都include的,因为.h只是定义嘛,.cc才是真正实现,但是原来只要include.h就好了,因为.cc都已经被.h include过了,所以就如果两次include,会有重复定义,我把所有include的.cc都删了就好了。
得到:


然后我发现我和正确答案好像不大一样,加了print()

现在的输出:

输出显示一直都使的是同样的物理页,没增加,是有问题的。本来物理页是等于i,调整成去扇区里寻找就好了。


其实这个实验还是没有搞懂原理。

操作系统课设--系统调用相关推荐

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

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

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

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

  3. 操作系统课设详细解答

    操作系统课设详细解答 一.题目一 实验一 Windows 进程管理 二.实验目的 (1)学会使用 VC 编写基本的 Win32 Consol Application(控制台应用程序). (2)通过创建 ...

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

    山东大学操作系统课设lab7 实验七 虚拟内存(lab7) 实验目的 实验环境 实验思路 关键源代码注释以及程序说明 调试记录 实验七 虚拟内存(lab7) 实验目的 在未实现虚拟内存管理之前,Nac ...

  5. 操作系统课设--具有二级索引的文件系统

    山东大学操作系统课设lab5 实验五 具有二级索引的文件系统(lab5) 实验目的 实验环境 实验思路 调试记录 实验五 具有二级索引的文件系统(lab5) 实验目的 Nachos系统原有的文件系统只 ...

  6. 操作系统课设--扩展文件系统

    山东大学操作系统课设lab4 实验四 扩展文件系统(lab4) 概念欠缺 实验目的 实验环境: 实验思路: 关键源代码注释以及程序说明: 调试记录: 实验四 扩展文件系统(lab4) 概念欠缺 ifd ...

  7. 操作系统课设--使用信号量解决生产者/消费者同步问题

    山东大学操作系统课设lab3 实验三 使用信号量解决生产者/消费者同步问题(lab3) 实验目的 理解Nachos的信号量是如何实现的 生产者/消费者问题是如何用信号量实现的 在Nachos中是如何创 ...

  8. 操作系统课设--具有优先级的线程调度

    山东大学操作系统课设lab2 实验二 具有优先级的线程调度(lab2) 概念欠缺 实验环境 实验目的 1. 熟悉Nachos原有的线程调度策略 2. 设计并实现具有优先级的线程调度策略 实验二 具有优 ...

  9. 操作系统课设--NACHOS试验环境准备、安装与MAKEFILE分析

    山东大学操作系统课设lab1 实验一 NACHOS试验环境准备.安装与MAKEFILE分析(lab1) 实验环境: 分析记录: 1. 准备虚拟机下LINUX宿主操作系统环境 2. NACHOS实验代码 ...

最新文章

  1. 超简单的react和typescript和引入scss项目搭建流程
  2. linux下编译php扩展
  3. 【好程序员笔记分享】——下拉刷新和上拉加载更多
  4. javacript 裁切图片
  5. proc编译手册_Expect 手册 中文版
  6. 人工智能 21 个子领域高被引学者Top 3
  7. 《Java多线程编程核心技术》读后感(十四)
  8. sota和fota区别_汽车fota是什么意思
  9. UDP报文观测以及DNS的工作原理
  10. SQL数据库置疑数据怎么恢复
  11. 延迟队列DelayQueue研究
  12. (一)SLAM拓扑地图(地图的生成和显示)
  13. wps底板颜色怎么去掉_怎么去除WPS表格的背景颜色
  14. 老王的JAVA基础课:序言
  15. Adaptive AUTOSAR和Classic AUTOSAR
  16. 1-丁基-3-甲基咪唑醋酸盐[Bmim][Ac]|离子液体1,1,3,3,-四甲基胍乳酸盐TMGL
  17. 图片img标签设置默认图片
  18. 手持gps坐标设置_学术 | 许其凤院士:GPS移动定位与移动网络定位精度的分析
  19. python外星人入侵飞船上下移动_Python实现《外星人入侵》之移动外星人
  20. 罗永浩:重新定义“微信”,子弹短信爬到AppStore第1?

热门文章

  1. php5(isapi).mysql5.zendforiis.rar_WIN2003系统IIS下PHP5+MySQL5+ZendOptimizer配置图解教程第1/3页...
  2. java数组删除数据_Java 数组 之 一维数组 删除 元素
  3. 初中计算机基础知识说课稿,计算机基础知识说课稿
  4. 配件都包括什么_婚礼婚庆服务都包括什么
  5. 德州寒流对IDC带来极大影响
  6. 100路监控摄像头需要使用核心交换机吗?
  7. 数据中心机房供电需求有哪些?存在哪些电能质量问题?
  8. 30KVA UPS电源安装电线的配置
  9. c# npoi 2.5版本设置字体加粗_巨巨巨巨推荐:SCI翻译神器,大版本更新来了
  10. 成功解决Future Warning: The sklearn.neighbors.dist_metrics module is deprecated in version 0.22 and wil