我必須用內核級線程編寫CPU調度模擬。我必須能夠使用先來先服務(FCFS)或循環(RR)算法。進程及其線程的數據以文本文件的形式給出。目前我的程序將文本文件數據讀入鏈表中。我真的不知道如何開始模擬(我以前從未編程模擬過)。理解CPU調度概念時遇到的問題
這是我如何在FCFS的情況下繼續?當我到達第一個進程的第一個線程時,我將cpu時間添加到時鐘時間。那麼我是否只需在CPU閒置時將io時間添加到時鐘?或者我應該把它放回等待隊列並允許下一個線程開始在cpu中運行?如果是這樣,我如何跟蹤每個線程已經被執行了多少?
這裏有一個例子測試文件:
2 4 6 // number_of_processes thread_switch process_switch
1 5 // process_number(1) number_of_threads(1)
1 0 4 // thread_number(1) arrival_time(1) number_of_CPU(1)
1 15 100 // 1 cpu_time io_time
2 18 120 // 2 cpu_time io_time
3 12 100 // 3 cpu_time io_time
4 16 // 4 cpu_time
2 4 4 // thread_number(2) arrival_time(2) number_of_CPU(2)
1 18 110
2 15 80
3 20 75
4 15
3 6 5 //thread(3)
1 40 100
2 20 70
3 15 80
4 18 90
5 50
4 8 4 //thread(4)
1 25 60
2 15 50
3 20 80
4 18
5 18 4 //thread(5)
1 8 60
2 15 120
3 12 80
4 10
謝謝!我應該指定number_of_CPU是該線程的CPU突發數。假設我應該交換等待I/O的線程(而不是忽略io時間),那麼這將如何改變您發佈的輸出? –
很難說,但如果I/O時間是前置加載的,比線程1會在時間= 0時立即阻塞/等待100個時間單元。線程2會在時間= 4時做類似的事情,等等。所以在那種情況下,第一個線程實際開始執行將是線程4(因爲它具有最少的I/O),在時間= 68。然後在時間= 93時,線程5將會去,因爲它的I/O也應該在那時完成。假設I/O請求可以並行/並行執行。否則,誰知道? – aroth