日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

發布時間:2025/3/21 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统课设--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分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。