---
# System prepended metadata

title: 107 OS homework System Call

---

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

---



---