106 OS homework 2-2 成果報告書

組長:A10615003、張家成、github帳號:GoSomewhereNice
組員:A10615002、張海鯤、github帳號:haikun233
組員:A10615001、趙梓丞、github帳號:zhaozichengkv
github: https://github.com/GoSomewhereNice/xv6-syscall


🙂 使用情境說明(包含流程圖)

當很多進程(process)同時需要運行,cpu會面臨誰先執行誰後執行的選擇,此刻需要為每個進程(process)設定其權限(priority),或修改其權限來讓cpu選擇最高權限的進程(先執行),其餘進程(process)ready。


😇 成功畫面


🏃 實作過程(修改哪些檔案[含圖片])

修改的檔案:
1."Makefile"增加代碼

分別為將如下指令添加至系統
ps指令:
列出現有進程pid status priority
(將計畫書中listpriority()結合至此)

setpr指令:
全稱:setpriority
對指定pid的process設置其priority

getpr指令:
全稱:getpriority
查詢指定pid的process所擁有的priority

prt指令:
全稱:prioritytest
無限循環的消耗cpu的測試程序

2.“defs.h” 增加代碼

分別為
cps:
使cps方法可以被調用的代碼

chpr:
使chpr方法可以被調用的代碼

getpr:
使getpr方法可以被調用的代碼

3.“proc.c” 增加代碼



分別為
p->priority = 10;
定義表示權限的變量 priority

cps:
實現ps指令的代碼

chpr:
實現setpr指令的代碼

getpr
實現getpr指令的代碼

4.proc.h

定義priority的類型為int,並且範圍為0~20,數值越小權限越大。

5."ps.c"新建文件

調用cps方法實現ps指令。

6.“syscall.c”、“syscall.h”、"usys.S"增加代碼


將cps、chpr、getpr方法添加至系統中。

7."sysproc.c"增加代碼

調用cps、chpr、getpr方法時得到的返回值。

8."user.h"增加代碼

cps、chpr、getpr的所需參數。

9."prt.c"新建文件

測試程序源碼。


😎 結論

通過此次system call的作業,我們鑽研並實現了作業系統對於進程的權限管理。我們發現實現的方式並不是唯一的,可以有很多種演算法來判斷進程執行的先後順序,可以根據不同的作業系統來實現不同的權限排程方式。除此之外,在編譯不斷報錯中,我們對於xv6中的文件和其對應的功能和作用有了一定的了解。相信對以後相關領域學習會有很大幫助。


📅 組員分工

組員 分工
張家成 1.setpr指令實現 2.scheduler()方法修改 3.prt.c測試程序初版 4.測試 5.成果報告書
張海鯤 1."ps"指令實現 2.將"ps"結合了"listpriority()"指令 3.getpr指令實現 4.測試
趙梓丞 1.prt.c測試程式最終改進版 2.getpr指令實現 3.將nice指令精簡優化至setpr指令和getpr指令中 4.測試