Monday, April 11, 2011

NacoOS期末作業

[本來想要把另一個已經廢棄已久的 Blog 關掉,發現有兩篇文章被大量閱讀。看起來應該是對某些人還是有些幫助,我決定將他們轉錄到這邊來。感謝讀者的支持。]

期末專題(NachOS)有兩個作業-
  1. Implement system call "Sleep"
  2. Implement SJF scheduling
紀錄一些過程,免得做報告時忘記了...
  1. Implement system call "Sleep"
    Implement Alarm.waitUtil(...) by InterruptHandler, getTime(). Then implement syscall sleep(...).
    Sleep(...)一定會不準,因為waitUtil(...)是以Real-Time為準,可是卻是以InterruptHandler實做(InterruptHandler天生就不準)。
  2. Implement SJF scheduling
    只 要動到nachos.threads這個package中的class就可以。以proj1的ThreadKernel為主,要產生Thread就去 KThread.selfTest()中修改。然後在nachos.threads底下增加一個SJFScheduler,模仿RoundRobin,只 需要修改RR中的FifoQueue.waitForAccess(...)。因為SJF需要Thread的單一執行時間,所以可以學習PingTest 用Loop模擬。最好是新增一個類似PingTest的類別,然後在裡面加入worktime之類的項目。
根據Berkeley的作業說明,只需要動到nachos.threads和nachos.userprog就可以,其他的package就假設都是正確的就好了。

No comments: