操作系统课设--NACHOS试验环境准备、安装与MAKEFILE分析
山東大學(xué)操作系統(tǒng)課設(shè)lab1
- 實(shí)驗(yàn)一 NACHOS試驗(yàn)環(huán)境準(zhǔn)備、安裝與MAKEFILE分析(lab1)
- 實(shí)驗(yàn)環(huán)境:
- 分析記錄:
- 1. 準(zhǔn)備虛擬機(jī)下LINUX宿主操作系統(tǒng)環(huán)境
- 2. NACHOS實(shí)驗(yàn)代碼框架(源碼目錄)的基本分析
- 3. MAKEFILE的基本分析
- 4. 硬件機(jī)制模擬部分的實(shí)現(xiàn)原理分析,包括中斷、時鐘、CPU指令執(zhí)行
實(shí)驗(yàn)一 NACHOS試驗(yàn)環(huán)境準(zhǔn)備、安裝與MAKEFILE分析(lab1)
實(shí)驗(yàn)環(huán)境:
虛擬機(jī)下Ubuntu Linux 16.04 LTS系統(tǒng),nachos-3.4內(nèi)核管理模塊和MIPS CPU軟件模擬模塊,實(shí)驗(yàn)報告放在根目錄下面。
分析記錄:
1. 準(zhǔn)備虛擬機(jī)下LINUX宿主操作系統(tǒng)環(huán)境
下載安裝VMware、Ubuntu12.04
把gcc-2.8.1-mips.tar.gz、nachos-3.4-UALR051.zip拖進(jìn)VMware Desktop
解壓nachos-3.4-UALR051.zip,放在Desktop即可
在nachos-3.4-UALR051.zip/nachos-3.4/code/threads/ 的目錄下,sudo apt-get install g++,直接make
此步是檢驗(yàn)文件有無問題,上圖所示g++ is already表示make通過,Linux宿主操作環(huán)境基本完成。
設(shè)置聯(lián)網(wǎng),下載vs code,用于編寫代碼
聯(lián)網(wǎng):https://blog.csdn.net/wuhuimin521/article/details/80992530
輸入ipconfig/all
調(diào)試好網(wǎng)絡(luò)之后,下載vs code,code_1.40.2-1574694120_amd64.deb
安裝教程如下:
https://www.cnblogs.com/wanglijun/p/10988223.html
雖然我已經(jīng)安裝了依賴,還是報錯
package architecture (amd64) does not match system (i386)
我查了資料發(fā)現(xiàn)https://blog.csdn.net/qiuchangyong/article/details/97505379
dpkg -i是安裝軟件包的意思,而我所報的錯意思是在i386機(jī)器上安裝amd64類型的包,則有不匹配錯誤。
我加上了:sudo dpkg --add-architecture amd64
又報了一個錯
應(yīng)該是我的info包里有問題,需要進(jìn)行更新https://segmentfault.com/q/1010000000117928
再次sudo dpkg -I code_1.40.2-1574694120_amd64.deb,很長一段,看起來沒有報錯,不過我還是進(jìn)行了驗(yàn)證。
還是不行,原來是我下成64位的了
看了這個:https://blog.csdn.net/bitwoods/article/details/48299135
這期間還是有一些問題的,我尋求了學(xué)長的幫助。不過大致過程如上。下載成功,安裝成功,設(shè)置快捷鍵放在桌面。
這樣用起來比較方便。
2. NACHOS實(shí)驗(yàn)代碼框架(源碼目錄)的基本分析
主要分析threads文件夾內(nèi)的thread.cc&thread.h。thread.h是thread.cc的頭文件,對應(yīng)分析。
thread.h&thread.cc
2.1 include
#include “copyright.h”
#include “utility.h”
是c++實(shí)用軟件程序包
#include “machine.h”
在machine文件夾內(nèi)
#include “addrspace.h”
在userprog文件夾內(nèi)
2.2 define
MachineStateSize 18
StackSize (sizeof(_int) * 1024)
2.3 常量
enum ThreadStatus { JUST_CREATED, RUNNING, READY, BLOCKED }
2.4 extern
引用外部變量或函數(shù)
extern void ThreadPrint(_int arg)
在這里, ThreadPrint(_int arg)
在thread.cc里有這么一條語句,說明調(diào)用的是Thread類的Print函數(shù),個人認(rèn)為此處調(diào)用外部函數(shù)無意義。
2.5 private
int* stackTop;
棧頂
_int machineState[MachineStateSize];
除棧頂之外存放其他數(shù)據(jù)的寄存器,在棧分配StackAllocate中會用到
int* stack;
棧底
ThreadStatus status;
線程狀態(tài) ready/running/blocked
char* name;
線程名稱
void StackAllocate(VoidFunctionPtr func, _int arg);
為棧分配內(nèi)存
Ifdef我認(rèn)為是規(guī)定不同端口情況下如何分配棧內(nèi)存
為寄存器初始化賦值,賦給的值是在switch.h里已經(jīng)定義好的
2.6 public
Thread(char* debugName);
初始化一個線程,定義線程名字、為棧分配空間、設(shè)置線程狀態(tài)
~Thread();
釋放一個線程
void Fork(VoidFunctionPtr func, _int arg);
調(diào)用StackAloocate()為棧分配內(nèi)存;
設(shè)置不可中斷,IntOff;scheduler設(shè)置線程狀態(tài)為ReadyToRun;
設(shè)置可中斷;
void Yield();
放棄當(dāng)前線程,運(yùn)行下一個線程;
void Sleep();
設(shè)置status為blocked;
找到下一個可運(yùn)行的線程并運(yùn)行;
void Finish();
關(guān)中斷;
摧毀線程;
睡眠;
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. 硬件機(jī)制模擬部分的實(shí)現(xiàn)原理分析,包括中斷、時鐘、CPU指令執(zhí)行
我的
總結(jié)
以上是生活随笔為你收集整理的操作系统课设--NACHOS试验环境准备、安装与MAKEFILE分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SVM数学过程
- 下一篇: 操作系统课设--具有优先级的线程调度