山东大学操作系统课设lab1

  • 实验一 NACHOS试验环境准备、安装与MAKEFILE分析(lab1)
      • 实验环境:
      • 分析记录:
    • 1. 准备虚拟机下LINUX宿主操作系统环境
    • 2. NACHOS实验代码框架(源码目录)的基本分析
    • 3. MAKEFILE的基本分析
    • 4. 硬件机制模拟部分的实现原理分析,包括中断、时钟、CPU指令执行

实验一 NACHOS试验环境准备、安装与MAKEFILE分析(lab1)

实验环境:

虚拟机下Ubuntu Linux 16.04 LTS系统,nachos-3.4内核管理模块和MIPS CPU软件模拟模块,实验报告放在根目录下面。

分析记录:

1. 准备虚拟机下LINUX宿主操作系统环境

下载安装VMware、Ubuntu12.04
把gcc-2.8.1-mips.tar.gz、nachos-3.4-UALR051.zip拖进VMware Desktop
解压nachos-3.4-UALR051.zip,放在Desktop即可
在nachos-3.4-UALR051.zip/nachos-3.4/code/threads/ 的目录下,sudo apt-get install g++,直接make

此步是检验文件有无问题,上图所示g++ is already表示make通过,Linux宿主操作环境基本完成。
设置联网,下载vs code,用于编写代码
联网:https://blog.csdn.net/wuhuimin521/article/details/80992530



输入ipconfig/all





调试好网络之后,下载vs code,code_1.40.2-1574694120_amd64.deb
安装教程如下:
https://www.cnblogs.com/wanglijun/p/10988223.html
虽然我已经安装了依赖,还是报错
package architecture (amd64) does not match system (i386)
我查了资料发现https://blog.csdn.net/qiuchangyong/article/details/97505379
dpkg -i是安装软件包的意思,而我所报的错意思是在i386机器上安装amd64类型的包,则有不匹配错误。
我加上了:sudo dpkg --add-architecture amd64
又报了一个错

应该是我的info包里有问题,需要进行更新https://segmentfault.com/q/1010000000117928

再次sudo dpkg -I code_1.40.2-1574694120_amd64.deb,很长一段,看起来没有报错,不过我还是进行了验证。


还是不行,原来是我下成64位的了
看了这个:https://blog.csdn.net/bitwoods/article/details/48299135
这期间还是有一些问题的,我寻求了学长的帮助。不过大致过程如上。下载成功,安装成功,设置快捷键放在桌面。


这样用起来比较方便。

2. NACHOS实验代码框架(源码目录)的基本分析

主要分析threads文件夹内的thread.cc&thread.h。thread.h是thread.cc的头文件,对应分析。
thread.h&thread.cc
2.1 include
#include “copyright.h”
#include “utility.h”
是c++实用软件程序包
#include “machine.h”
在machine文件夹内
#include “addrspace.h”
在userprog文件夹内
2.2 define
MachineStateSize 18
StackSize (sizeof(_int) * 1024)
2.3 常量
enum ThreadStatus { JUST_CREATED, RUNNING, READY, BLOCKED }
2.4 extern
引用外部变量或函数
extern void ThreadPrint(_int arg)
在这里, ThreadPrint(_int arg)

在thread.cc里有这么一条语句,说明调用的是Thread类的Print函数,个人认为此处调用外部函数无意义。
2.5 private
int* stackTop;
栈顶
_int machineState[MachineStateSize];
除栈顶之外存放其他数据的寄存器,在栈分配StackAllocate中会用到
int* stack;
栈底
ThreadStatus status;
线程状态 ready/running/blocked
char* name;
线程名称
void StackAllocate(VoidFunctionPtr func, _int arg);
为栈分配内存

Ifdef我认为是规定不同端口情况下如何分配栈内存

为寄存器初始化赋值,赋给的值是在switch.h里已经定义好的

2.6 public
Thread(char* debugName);

初始化一个线程,定义线程名字、为栈分配空间、设置线程状态
~Thread();
释放一个线程
void Fork(VoidFunctionPtr func, _int arg);

调用StackAloocate()为栈分配内存;
设置不可中断,IntOff;scheduler设置线程状态为ReadyToRun;
设置可中断;
void Yield();

放弃当前线程,运行下一个线程;
void Sleep();

设置status为blocked;
找到下一个可运行的线程并运行;
void Finish();
关中断;
摧毁线程;
睡眠;
void CheckOverflow(); // Check if thread has
// overflowed its stack
void setStatus(ThreadStatus st) { status = st; }
char* getName() { return (name); }
void Print() { printf("%s, ", name);

3. MAKEFILE的基本分析

从threads文件夹入手

4. 硬件机制模拟部分的实现原理分析,包括中断、时钟、CPU指令执行

我的

操作系统课设--NACHOS试验环境准备、安装与MAKEFILE分析相关推荐

  1. 西电 操作系统课设 在Ubuntu18.04安装pintos

    西电 操作系统课设 在Ubuntu18.04安装pintos 前言 1. 主要步骤 2. VMware的安装 3. Ubuntu18.04的安装和配置 4. Bochs的安装 4. Pintos安装 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. numpy中amin()方法中维度axis=0 1 2 的理解
  2. 基于ONOS的T-SDN Super控制器
  3. BERT模型从训练到部署全流程
  4. 启动ipython出错_python-在异常情况下启动IPython shell
  5. GBDT(MART) 迭代决策树入门教程 | 简介 .
  6. C51端口结构和工作原理(转)
  7. why there is always a HTTP 302 redirect when clicking workcenter
  8. 尝试:Script Lab,快速 O365 开发工具//SL01)
  9. Redis模式对比:主从模式 VS 哨兵sentinel模式 VS Redis cluster模式
  10. No converter found capable of converting from type
  11. matlab 平滑曲线连接_从零开始的matlab学习笔记——(16)函数绘图
  12. 计算机课件制作技能,PPT技能制作大比拼
  13. 脑子里想的是A,嘴巴上说的是B,实际上做的是C,幻想前景远大的是D,可真正赚钱的恰恰却是E...
  14. Lorenzo Von Matterhorn
  15. 2021-01-21:脉冲神经网络学习日志
  16. 郭德纲家训--话糙理不糙
  17. 《麦肯锡工作法》读书分享
  18. 王道程序员求职宝典 pdf
  19. Windows未能启动,状态:0xc000014c的解决方法
  20. 鸣人来教你安装配置JDK

热门文章

  1. H5-代码的执行顺序影响着系统的性能:(position)
  2. webbrowser 百度列表点击_前嗅ForeSpider采集教程:关键词的「检索列表」采集「检索结果」...
  3. shell 创建文件_如何在shell脚本中创建与shell脚本同目录或者同相对路径的文件夹或者文件?...
  4. 成功解决ModuleNotFoundError: No module named ‘sklearn.grid_search‘
  5. AI:基于计算机视觉和语音识别案例项目打包过程记录20181226-19
  6. Keras之DNN:利用DNN算法【Input(8)→12+8(relu)→O(sigmoid)】利用糖尿病数据集训练、评估模型(利用糖尿病数据集中的八个参数特征预测一个0或1结果)
  7. IDE之Visual Studio Code:Visual Studio Code的简介、安装、使用方法之详细攻略
  8. Keras之ML~P:基于Keras中建立的回归预测的神经网络模型(根据200个数据样本预测新的5+1个样本)——回归预测
  9. 解决OpenCV问题:OpenCV Error: Assertion failed (!empty()) in cv::CascadeClassifier::detectMultiScale,
  10. php 数组元素快速去重