組長:B10415031、廖晨竹
組員:B10415038、謝明軒
組員:B10415046、林崇恩
github: https://github.com/CurtLiao/xv6-public
創建兩個結構為proc的variable,分別是p、p1接著進到無窮迴圈,在建立一個結構為proc的variable,並初始為NULL。之後用一個迴圈去跑整個ptable,搜尋process state為RUNNABLE的,找到後將它 assign 給highP,之後再用highP去跟每一個process比較優先度大小,如果有優先度高於highP的(priority值較小者),則把它assign給highP,找完後就把highP在assign回去給p,並開始執行swtch()。

作法同上,但是在執行完swtch()之後我們要在使用一次迴圈去跑所有process,找到state是RUNNABLE的就去判斷它的priority是否大於1(因為priority設的範圍是1~20),是的話就把它的priority-1,其他在別的狀態的process都去判斷是否小於20,是的話就把priorirty都+1。

創建一個結構為proc的variable : sP,再用迴圈去跑每個process的state,判斷是否是RUNNABLE,是RUNNABLE的話再去判斷sP是不是NULL,如果是NULL,就直接把p assign給它,如果不是的話就要再判斷它的ctime大小,如果p的ctime小於sP的ctime,表示它的時間比較早,所以就把p assin給它,跳出迴圈後,再用一個判斷式去判斷它是不是NULL,不是的話就把sP assign回p,然後開始執行swtch()。

一開始先使用foo 指令創造出數個名為foo的process。(黃線處)
執行之後可以看到,parent process 和創造出的 child process。

使用ps(黃線處)指令print出ptable,可以看到所有process的name、pid、state以及priority,包含前面創的foo process。
註:priority值較大者,優先度較小,反之priority值較小者,優先度較大。

在來使用nice指令去修改process的priority(黃線處)。
可以看到我pid 9的process的prioriry改掉,把它的priority變成8。
再次按下ps,print出目前每個process的狀態,可以看到pid 9的process的priority已經變成8,而且state也從RUNNABLE變成RUNNING。

可以看到這種方法,如果不手動去更改priority的值,低優先度的process就會永遠做不到,所以此種priority scheduling會有starvation的產生。
第二個是做的是改善過後的PRIORITY scheduling,一樣是用foo創造process,因為整個過程很大,所以只截取一部分。
可以看到pid 9的process的state是在RUNNABLE,priority是19,pid 5的process的及pid 7的process的state 都不是在RUNNABLE,且他們的priority較小,優先度較高,所以每過一次,在RUNNABLE的process的priority會減一,而不是在RUNNABLE的process的priority則會加一。

一樣是用foo指令創造process,也是因為過程瑣碎,所以只擷取片段。
從FCFS可以看到先進的process先做,做完之後才換下一個process。
例如一開始pid 8的process在run,而pid 9的process在RUNNABLE,直到process 8的狀態變成sleep之後,process 9就開始run了,可以看到process 9的狀態變成run,而process 10的狀態是RUNNABLE,所以當process 9 做完之後,就換process 10做了。

新增system call修改到的檔案包含 : syscall.h , syscall.c , sysproc.c , user.h , Usys.S
新增的檔案包含 : parent.c , nice.c , shutdown.c , foo.c , ps.c
寫排程改到的檔案包含 : proc.c , proc.h















1.寫PRIORITY、FCFS排程,改善PRIORITY原有的starvation。
2.新增system call : chpr , cps。
3.新增檔案 : nice.c , foo.c ,ps.c
4.Implement排程。
5.成果報告書製作、上台報告。
6.Debug、程式彙整。
1.新增檔案 : stddef.h(定義NULL為0)
2.修改listPid.c檔中的bug
3.新增system call : getAllPids , shutdown
1.新增system call : getprocs , getppid
2.Implement getprocs
3.校閱成果報告書