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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

發(fā)布時間:2025/3/21 windows 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统课设--系统调用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

山東大學(xué)操作系統(tǒng)課設(shè)lab6

  • 實驗六 系統(tǒng)調(diào)用(lab6)
    • 實驗?zāi)康?/li>
    • 實驗環(huán)境
    • 實驗思路
    • 調(diào)試記錄

實驗六 系統(tǒng)調(diào)用(lab6)

實驗?zāi)康?/h2>

擴展現(xiàn)有的class AddrSpace的實現(xiàn),使得Nachos可以實現(xiàn)多用戶程序。
按照實驗指導(dǎo)書中的方法,完成class AddrSpace中的print函數(shù)。
實現(xiàn)Nachos 系統(tǒng)調(diào)用:Exec()。

實驗環(huán)境

虛擬機下Ubuntu Linux 16.04 LTS系統(tǒng),nachos-3.4內(nèi)核管理模塊和MIPS CPU軟件模擬模塊,代碼在lab6文件夾下面實現(xiàn)。

實驗思路

有參考這個網(wǎng)頁:https://blog.csdn.net/mottled233/article/details/78633571
先看machine文件夾,里面有一個mipssim.cc,mipssim是模擬器的意思,可以模擬一個完整系統(tǒng)的窗口:代碼窗口、寄存器窗口、流水線窗口、時鐘周期圖窗口、內(nèi)存窗口、統(tǒng)計窗口和斷點窗口,我認(rèn)為是模擬用戶程序的完整過程。有一個Run()方法,應(yīng)該是在運行整個系統(tǒng),for循環(huán)里每條指令都作為參數(shù)依次傳入OneInstruction()中。

然后看看OneInstruction(),感覺主體是一堆的case。當(dāng)執(zhí)行不同的指令時,寄存器的數(shù)組里存放不同的數(shù)。


case的這些語句中,有一個對本實驗很重要的語句,即系統(tǒng)調(diào)用的情況。

可以看出,它是拋出了一個系統(tǒng)調(diào)用的異常。這里直接return了,而沒有break,會導(dǎo)致無限循環(huán),而不是直接跳出可以進行下一步。這個SyscallException可以在userprog的exception.cc中找到。

現(xiàn)在已有的程序只對halt這一種情況的系統(tǒng)調(diào)用進行了處理,之后要補充。

然后可以看到實驗要求說要實現(xiàn)系統(tǒng)調(diào)用:Exec()。Exec()是指在一個進程中啟動另一個進程執(zhí)行的方法。而exit()是用來使進程中止的。

Exec()系統(tǒng)調(diào)用可以在userprog的syscall.h中找到。可以從方法中看出,根據(jù)name啟動了另一個進程的執(zhí)行,并行執(zhí)行,并返回新的程序的內(nèi)存空間標(biāo)識符給SpaceId。
通過exception.cc可以看出,系統(tǒng)調(diào)用的參數(shù)傳遞與一般函數(shù)的參數(shù)傳遞不同,它的傳遞參數(shù)和返回值都要用寄存器保存。其中,傳遞參數(shù)保存在r4-r7,返回值保存在r2。

關(guān)鍵源代碼注釋以及程序說明:
只用把userprog放進lab6里就好,其他要改的直接在當(dāng)前文件夾中修改。

需要修改…/bin/arch/unknown-i386-linux/bin/coff2noff的權(quán)限,使其可執(zhí)行。
sudo chmod -R 777 某一目錄可以解決
其中
-R 是指級聯(lián)應(yīng)用到目錄里的所有子目錄和文件
777 是所有用戶都擁有最高權(quán)限

然后是exception.cc,我認(rèn)為這是最重要的一個文件。原來它只是提供了一種情況的異常處理方法,本題中要求的exec和exit都沒有提供,所以要自己寫,補充上這兩條的case就好。看的網(wǎng)上說,為了讓格式好看一些把原本就有的Halt也寫到case里,格式統(tǒng)一一些。

然后加上exec()和exit()


其中AdvancePC()、StartProcess()也寫在exception.cc,不過在各種case的處理前。



為了設(shè)置全局唯一標(biāo)識,需要一個屬性記錄這個標(biāo)識,并給其賦初始值。
在system.h和system.cc里設(shè)置一個數(shù)組ThreadMap去標(biāo)識它,system.cc里既要賦初值,也要記得刪掉的。賦初值可以用bzero(),也可以直接for循環(huán)。




最后在test文件夾里添加exe.c和修改halt.c,調(diào)用exec()和exit()。如下:

調(diào)試記錄

./nachos -x …/test/halt.noff
如果想要打印,就./nachos -d m -x …/test/halt.noff
得到了一堆bug。說我重復(fù)定義,error太多了,但是最后一行只說error 1,所以大概是一種錯誤。我本來以為導(dǎo)入時要把.h和.cc都include的,因為.h只是定義嘛,.cc才是真正實現(xiàn),但是原來只要include.h就好了,因為.cc都已經(jīng)被.h include過了,所以就如果兩次include,會有重復(fù)定義,我把所有include的.cc都刪了就好了。
得到:


然后我發(fā)現(xiàn)我和正確答案好像不大一樣,加了print()

現(xiàn)在的輸出:

輸出顯示一直都使的是同樣的物理頁,沒增加,是有問題的。本來物理頁是等于i,調(diào)整成去扇區(qū)里尋找就好了。


其實這個實驗還是沒有搞懂原理。

總結(jié)

以上是生活随笔為你收集整理的操作系统课设--系统调用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。