資源描述:
《時(shí)間片輪轉(zhuǎn)算法.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、NO.15課程設(shè)計(jì)說(shuō)明書時(shí)間片輪轉(zhuǎn)算法1.課程設(shè)計(jì)的目的通過(guò)操作系統(tǒng)課程設(shè)計(jì),通過(guò)對(duì)作業(yè)調(diào)度算法的設(shè)計(jì),深入理解作業(yè)調(diào)度的原理,從原理分析、物理設(shè)計(jì),到功能分析和應(yīng)用程序的最終實(shí)現(xiàn),讓我親自動(dòng)手參與一個(gè)操作系統(tǒng)的模擬設(shè)計(jì),真正理解和掌握操作系統(tǒng)的有關(guān)內(nèi)容,加深對(duì)操作系統(tǒng),軟件工程,程序設(shè)計(jì)語(yǔ)言的理論知識(shí)的理解和應(yīng)用水平;在理論和實(shí)驗(yàn)教學(xué)基礎(chǔ)上進(jìn)一步鞏固已學(xué)基本理論及應(yīng)用知識(shí)并加以綜合提高;學(xué)會(huì)將知識(shí)應(yīng)用于實(shí)際的方法,提高分析和解決問(wèn)題的能力,增強(qiáng)對(duì)手能力;并更好的理解和消化課本所學(xué)的知識(shí),為畢業(yè)設(shè)計(jì)和以后工作打下必要基礎(chǔ)。2.課程設(shè)計(jì)的開發(fā)語(yǔ)言在本次課程設(shè)計(jì)中,我們選擇了C++語(yǔ)
2、言作為我們所使用的開發(fā)語(yǔ)言,開發(fā)工具則選用了MicrosoftVisualC++6.0。MFC借助C++的優(yōu)勢(shì)為Windows開發(fā)開辟了一片新天地,同時(shí)也借助ApplicationWizzard使開發(fā)者擺脫離了那些每次都必寫基本代碼,借助ClassWizard和消息映射使開發(fā)者擺脫了定義消息處理時(shí)那種混亂和冗長(zhǎng)的代碼段。更重要的是利用C++的封裝功能使開發(fā)者擺脫Windows中各種句柄的困擾,只需要面對(duì)C++中的對(duì)象,這樣一來(lái)使開發(fā)更接近開發(fā)語(yǔ)言而遠(yuǎn)離系統(tǒng)。正因?yàn)镸FC是建立在C++的基礎(chǔ)上,所以我強(qiáng)調(diào)C/C++語(yǔ)言基礎(chǔ)對(duì)開發(fā)的重要性。利用C++的封裝性開發(fā)者可以更容易理解和操作
3、各種窗口對(duì)象;利用C++的派生性開發(fā)者可以減少開發(fā)自定義窗口的時(shí)間和創(chuàng)造出可重用的代碼;利用虛擬性可以在必要時(shí)更好的控制窗口的活動(dòng)。而且C++本身所具備的超越C語(yǔ)言的特性都可以使開發(fā)者編寫出更易用,更靈活的代碼。3.功能描述時(shí)間片輪轉(zhuǎn)的主要思想就是按順序?yàn)槊恳粋€(gè)進(jìn)程一次只分配一個(gè)時(shí)間片的時(shí)間。算法要完成的功能就是將各個(gè)進(jìn)程按照時(shí)間片輪轉(zhuǎn)運(yùn)行的動(dòng)態(tài)過(guò)程顯示出來(lái)。時(shí)間片輪轉(zhuǎn)算法的主要實(shí)現(xiàn)過(guò)程是首先為每一個(gè)進(jìn)程創(chuàng)建一個(gè)進(jìn)程控制塊,定義數(shù)據(jù)結(jié)構(gòu),說(shuō)明進(jìn)程控制塊所包含的內(nèi)容,有進(jìn)程名、進(jìn)程所需運(yùn)行時(shí)間、已運(yùn)行時(shí)間和進(jìn)程的狀態(tài)以及指針的信息。實(shí)現(xiàn)的過(guò)程即運(yùn)用指針指向某一個(gè)進(jìn)程,判斷當(dāng)前的進(jìn)程
4、是否是就緒狀態(tài)“r”沈陽(yáng)大學(xué)NO.15課程設(shè)計(jì)說(shuō)明書,如果是,則為該進(jìn)程分配一個(gè)時(shí)間片,同時(shí),已運(yùn)行時(shí)間加一且要求運(yùn)行的時(shí)間減一,如此循環(huán)執(zhí)行,當(dāng)某一個(gè)進(jìn)程的所需要運(yùn)行的時(shí)間減少至0時(shí),則將該進(jìn)程的狀態(tài)設(shè)置為“e”。然后,將指針指向下一個(gè)未運(yùn)行完成的進(jìn)程,重復(fù)判斷,直至所有的進(jìn)程都運(yùn)行結(jié)束。4.方案論證4.1概要設(shè)計(jì)4.1.1各模塊功能1)int?InitQueue(LinkQueue?&Q):輸入進(jìn)程時(shí),初始化輸入的鏈表。2)int?DestroyQueue(LinkQueue?&Q):運(yùn)行完后,銷毀鏈表。3)int?EnQueue(LinkQueue?&Q,QElemType
5、?e):將進(jìn)程插入循環(huán)隊(duì)列中。4)int?DeQueue(LinkQueue?&Q,QElemType?e):當(dāng)進(jìn)程完成后,輸出鏈表中元素。5)int?QueueEmpty(LinkQueue?&Q):判斷鏈表是否為空。6)void?chioce(struct?PCB?pcb[],int?n):對(duì)于輸入鏈表中數(shù)的按關(guān)鍵字—到達(dá)時(shí)間用選擇法從小到大進(jìn)行進(jìn)行排序。7)void?caidan():主菜單,包含:進(jìn)程的創(chuàng)建和結(jié)果和結(jié)束。8)void?create():進(jìn)程的創(chuàng)建。9)void?main():實(shí)現(xiàn)函數(shù)調(diào)用的總控制。4.1.2相關(guān)數(shù)據(jù)類型1)typedef?int?QElem
6、Type:自定義類型,定義QElemType為int型。2)typedef?struct?QNode{?QElemType?data;struct?QNode?*next;}QNode,*QueuePtr;采用結(jié)構(gòu)體變量,存隊(duì)列的相關(guān)信息:QElemType?data、struct?QNode?*next。同時(shí)定義結(jié)構(gòu)體指針*QueuePtr,便于之后書寫開辟空間級(jí)表示。系統(tǒng)調(diào)用時(shí),每次分配一個(gè)QNode那么大的空間進(jìn)行存儲(chǔ)。3)typedefstructPCB{charname[10];//進(jìn)程名structPCB*next;//循環(huán)鏈指針沈陽(yáng)大學(xué)NO.15課程設(shè)計(jì)說(shuō)明書int
7、need_time;//要求運(yùn)行時(shí)間intworked_time;//已運(yùn)行時(shí)間,初始為0charcondition;//進(jìn)程狀態(tài),只有“就緒”和“結(jié)束”兩種狀態(tài)intflag;//進(jìn)程結(jié)束標(biāo)志,用于輸出}PCB;PCB*front,*rear;//循環(huán)鏈隊(duì)列的頭指針和尾指針intN;//N為進(jìn)程數(shù)定義循環(huán)鏈表的頭指針和尾指針。QueuePtr?front,QueuePtr?rear。4)struct?PCB{?int?ArrivalTime;int?ServiceTime;ha