2016-03-07 71 views
1

所以我要實現我的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??? 

感謝您的幫助!

回答

0

看看每個線程的到達時間,您可以排序,從而產生到達時間首次出現與後來的到達時間之前的線程隊列。運行隊列線程的前端(這是一個線程調度器)。當突發的CPU時間到時,一次運行線程突發,在當前時間的到達時間加上突發的IO時間(在到達時間再次對隊列進行排序)時在隊列後面輸入新事件。這樣,其他線程可以在線程執行io時執行。

(我的回答是假設你是在同一個班我。[CIS * 3110])

+0

我很高興有人理解吧:)我不知道什麼的線程「到達時間」可能是,或者什麼是'IO突發':( –

+0

IO突發如何進入這張圖片?所以你說的是如果p1的到達時間+ cpu_burst

+0

他們不是IO陣陣,這是一個CPU爆裂。每個CPU突發終止,無論是外出IO,或者由線程終止。在輸入文件中,有到達時間,這些是每個線程到達的時間,所以第一個CPU突發到達線程的到達時間,每個後續突發的到達時間是t他此線程的先前爆發結束,加上前一個爆發的IO時間。這個想法是,線程在CPU中執行一些東西,離開IO,然後一旦完成IO就返回。因此,安排線程,並在線程中斷時對隊列進行洗牌 – OxenMeat