所以我要實現我的OS類離散事件CPU調度程序,但我不太明白它是如何工作。我讀過的每一個解釋/教科書總是會讓我覺得這些東西對我來說有點過於抽象,無法確定它是如何實際工作的,它也不會用cpu連發和io連發(有些做但仍然沒有幫助足夠)。我沒有發佈任何我有的代碼(我寫了很多實際的內容,但是我想在我找出(用特朗普的話說)究竟是怎麼回事之後,我會重寫它)。相反,我只是想幫助找出一種我可以實現的僞代碼。 我們給出了到達時間(AT),總CPU(TC),CPU爆發(CB)和Io爆發(IO)的多個進程。假設我給出:p1(AT = 1,TC = 200,CB = 10,IO = 20)和p2(AT = 1000,TC = 200,CB = 20,IO = 10)。假設我正在實施先來先服務調度程序。進程調度
我也把問號(?),我不知道。
Put all processes into eventQ
initialize all processes.state = CREATED
While(eventQueue not empty) process = eventQueue.getFront()
if process.state==CREATED state, it can transition to ready
clock= process.AT
process.state = READY
then I add it back to the end (?) of the eventQueue.
if process.state==READY, it can transition to run
clock= process.AT + process.CPU_time_had + process.IO_time_had (?)
CPU_Burst = process.CB * Rand(b/w 0 and process.CB)
if (CB >= process.TC - process.CPU_time_had)
then it's done I don't add it back
process.finish_time = clock + CB
continue
else
process.CPU_time_had += CB
(?) Not sure if I put the process into BLOCK or READY here
Add it to the back of eventQueue (?)
if process.state==BLOCK
No idea what happens (?)
Or do things never get Blocked in FCFS (which would make sense)
Also how do IO bursts enter into this picture???
感謝您的幫助!
我很高興有人理解吧:)我不知道什麼的線程「到達時間」可能是,或者什麼是'IO突發':( –
IO突發如何進入這張圖片?所以你說的是如果p1的到達時間+ cpu_burst
他們不是IO陣陣,這是一個CPU爆裂。每個CPU突發終止,無論是外出IO,或者由線程終止。在輸入文件中,有到達時間,這些是每個線程到達的時間,所以第一個CPU突發到達線程的到達時間,每個後續突發的到達時間是t他此線程的先前爆發結束,加上前一個爆發的IO時間。這個想法是,線程在CPU中執行一些東西,離開IO,然後一旦完成IO就返回。因此,安排線程,並在線程中斷時對隊列進行洗牌 – OxenMeat