106 OS homework 2-2 成果報告書

組長:B10415055、黃永豪 untame017@gmail.com
組員:B10415036、周世賢
github: https://github.com/OahcYerfdog/oshw


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

當使用者開/用太多的進程時,用我的機制來把優先序(priority)最低的RUNNABLE或RUNNING的進程(process)ID找出來,並修改其狀態(proc->state)變成SLEEPING以讓出閒置CPU然後等待wakeup條件來喚醒process.

命令(COMMAND)
$ ps : 顯示所有Process的NAME,PID,STATE,PRIORITY顯示出來;
$ nice (pid) (prio) : 使用者能使用nice命令來改變指定pid process的priority;
$ foo 1 0.01&; : 程式指令產生一個子進程來為我們的機制進行觀察與測試;

流程圖:

註:count 狀態為RUNNABLE 和RUNNING 的process的數目,
為了方便測試我們用count大於3來進行假想測試.


😇 成功畫面

PS:

nice:

count>3:

我們實作了foo指令來產生一個隨機狀態的child process(priority default level five),然後一步一步地把process的列表用指令$ ps印出來方便追蹤;

當scheduler()發現有超過3支以上屬於RUNNABLE或RUNNING的狀態,便把優先序最低的進程狀態改成SLEEPING狀態;

當中我們想說如果user不想要讓某些特定的進程變睡眠的話,可以用指令nice來改變其優先序(priority)來使系統變得更人情化一下,有照顧到使用者的意願睡眠不急著要的進程而不是隨便任意對狀進行改變;

圖中我們用now count的 int variable 來進行測試追蹤它running和runnable 狀態大於3的時後便印出其值,再$ ps看其狀態列是否有改變,下面的實作過程裡有我們的範例圖為您呈現。


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

->新增所需的system call如 :
#新增了ps的syscall, nice的syscall, …
->修改proc.c的scheduler

建立:
ps.c

foo.c


**
nice.c

新增:
defs.h

syscall.h

syscall.c

sysproc.c

user.h

usys.S

proc.c

修改:
proc.c


😎 結論

在這次報告中參考了一存在的System call並添加到我們這裡,實際操作之後比以前理解其排程並且更加地熟悉與運用Scheduler的整個流程;

就如之前所說我們希望當使用者開/用太多的進程時用我們的機制(count)來把最低的進程狀態进入睡眠並讓出 CPU (我們之前理解錯誤,以為是在fork裡頭加fcount去追蹤每一個process與其對應的thread,可實際我們要做的是對其ptable裡頭所開啟的全部process);

與其讓這些等待中的進程消耗 CPU 資源,不如讓它們暫時放棄 CPU,進入睡眠狀態來等待其他進程發出事件來喚醒它們,讓讀取管道資料和等待其他進程向管道中寫入資料的動作可以更順暢。


📅 組員分工

主要負責:
黃永豪 :最後報告成果 研究程式
周世賢 :成果報告書製作 建立檔案
共同負責: DEBUG 實際操作 查詢網路參考資料 總檢查