107 OS homework System Call === --- # 功能說明 scheduling system call APS() All Process Status: 可以用來查看每個process所對應到的pid還有他們的 "state"跟"priority" CPP(int pid, int priority) Change Process Priority: 可以用pid來指定要改變哪個process的priority SPS(int pid) Show Process State:利用pid當參數來獲得目前process的state --- # 實作過程 ### 在syscall.h裡 ![](https://i.imgur.com/ndgCXvt.png) ### 在syscall.c裡 ![](https://i.imgur.com/43XV4kH.png) ![](https://i.imgur.com/JenDEOQ.png) #### 在usys.S裡 ![](https://i.imgur.com/W4a4Vl9.png) ### 在user.h裡 ![](https://i.imgur.com/GSmBnUk.png) ### 在proc.c裡加入APS(), CPP(), SPS() ![](https://i.imgur.com/Q2vWKAW.png) ![](https://i.imgur.com/o8fTBDb.png) ![](https://i.imgur.com/4qMpYEy.png) ### 在sysproc.c裡加入sys_APS(), sys_CPP(), sys_SPS() ![](https://i.imgur.com/lEtxTDT.png) ![](https://i.imgur.com/5XodXHm.png) ### 在proc.c裡的scheduler()裡面加上priority scheduling的程式碼 ![](https://i.imgur.com/PorVOXF.png) --- # Demo畫面 ### Demo的部份我寫了一些簡單的user program來測試那3個system call ### ps.c: process state ![](https://i.imgur.com/z3npbxn.png) ### gp.c: generate process ![](https://i.imgur.com/Dh93GmZ.png) ### setp.c: set priority ![](https://i.imgur.com/XRdfi4h.png) ### sps.c: show process state ![](https://i.imgur.com/W0VjHiD.png) ### 首先,執行gp.c產生一個process並把他的priority設為12 ![](https://i.imgur.com/XHjLj5U.png) ### 再產生一個新的process,因為新的process priority比較高,所以新的process會是RUNNING,舊的process就會從RUNNING變成RUNNABLE ### 如果再把新的process的priority改成13,新的process會變成RUNNABLE,舊的process會變成RUNNING ![](https://i.imgur.com/WblM1i1.png) --- # 預期成效、情境說明 透過呼叫APS(),我們可以觀察到目前所有process的state跟priority,如果我們想要改變process執行的順序,我們就可以呼叫CPP(),來改變process的priority,讓我們想先執行的process可以先被執行。 呼叫SPS()可以得知指定process的state --- ---