我想定製用於實現FCFS算法的minix文件/usr/src/kernel/proc.c
的代碼,但我沒有得到任何想法或線索。我已經說過,目前的算法在一些優先級上工作,所有進程首先進入單個隊列,然後使用某種算法,然後爲進程分配一些優先級。但是如果我需要實現FCFS,那麼我應該只使用一個隊列。如何在minix中定製proc.c來實現FCFS算法?
但是如何把這些東西聯繫起來呢?
我想定製用於實現FCFS算法的minix文件/usr/src/kernel/proc.c
的代碼,但我沒有得到任何想法或線索。我已經說過,目前的算法在一些優先級上工作,所有進程首先進入單個隊列,然後使用某種算法,然後爲進程分配一些優先級。但是如果我需要實現FCFS,那麼我應該只使用一個隊列。如何在minix中定製proc.c來實現FCFS算法?
但是如何把這些東西聯繫起來呢?
一種可能性–可能不是一個好一個–是修改enqueue()
功能:
PUBLIC void enqueue(register struct proc *rp)
{
/* Add 'rp' to one of the queues of runnable processes. This function is
* responsible for inserting a process into one of the scheduling queues.
* The mechanism is implemented here. The actual scheduling policy is
* defined in sched() and pick_proc().
*/
int q = rp->p_priority; /* scheduling queue to use */
不是指定rp->p_priority
的,只要將0:
int q = 0;
所有過程都因此排隊上AA單個優先級隊列(隊列號0),並且您擁有一個FCFS系統。當然,假定enqueue()
是將進程添加到隊列的唯一函數。這是唯一的機會,但你需要知道大部分Minix內核。
通過適當的修改,您可以調查是否有太多浪費空間支持多個隊列。如果有,您可以適當調整隊列聲明。隊列結構可能只是一個指針數組;因此節省的空間並不大。
但是請注意,您可能不希望僅使用FCFS;優先隊列在那裏有很好的理由。例如,你的中斷處理程序應該比SETI工作的數字運算怪獸更快速地服務。這意味着需要確定一些優先級。
謝謝Jonathan Leffler。我很感謝你,因爲你的指令幫助我成功修改了minix內核(我想現在到了)。但是,你會介意告訴我,是否有任何流程或函數可以檢查我的FCFS是否正在運行,或者它是否存在邏輯錯誤(我確信沒有編譯錯誤)?我會很感激你.. – 2012-04-03 06:16:17
簡潔,我不知道。但是由於代碼正在運行,並且只有一個隊列,所以很難看出它如何以FCFS以外的任何方式運行。也許你可以運行一打計算密集型進程(不進行系統調用,因此;反轉一些100x100矩陣或某些東西),並顯示交互式終端進程等待計算密集型進程完成他們的時間片。當計算機以25 MHz運行時,看到的情況要比現在看到它們以2.5 GHz運行更容易。 – 2012-04-03 07:01:25
謝謝你.....最好的問候 – 2012-04-07 08:33:43
如果您提供了一個鏈接(URL),以便人們可以查看來源,您可能會得到更好的回覆。一種可能性是考慮優先考慮:將所有內容設置爲優先級1(或任何其他合適的值)。它可能會然後工作FCFS。如果你想解開事情,所以你只有一個(未優先化的)列表,你必須瞭解代碼模式,知道優先級列表的創建位置(然後只創建一個),甚至可以從接口。然而,這是更廣泛的代碼手術,可能不只是該文件。 – 2012-03-24 20:04:36
感謝您的幫助。你提到我應該將優先級設置爲1或任何其他合適的值,在這種情況下,每個隊列具有相同的優先級......但我發現,在minix中實際上有16個隊列處理不同的優先級......但在FCFS我只需要使用一個隊列來管理所有的進程,鏈接是http://eng.upm.edu.my/~kmbs/teaching/OS/html/proc_8c.html,這裏是入隊函數所有的進程都被放在MIN_USER_Q中,這是我需要處理的隊列。但是我需要進一步的優先級幫助,你能幫助嗎? – 2012-03-25 11:48:27