操作系统课设--NACHOS试验环境准备、安装与MAKEFILE分析
山東大學操作系統課設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分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SVM数学过程
- 下一篇: 操作系统课设--具有优先级的线程调度