欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      常用進(jìn)程調(diào)度算法的分析與評(píng)價(jià)

      時(shí)間:2019-05-15 13:19:11下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫寫幫文庫小編為你整理了多篇相關(guān)的《常用進(jìn)程調(diào)度算法的分析與評(píng)價(jià)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《常用進(jìn)程調(diào)度算法的分析與評(píng)價(jià)》。

      第一篇:常用進(jìn)程調(diào)度算法的分析與評(píng)價(jià)

      常用進(jìn)程調(diào)度算法的分析與評(píng)價(jià)

      (一)2009-10-31 22:48

      進(jìn)程調(diào)度是按照某種調(diào)度算法從就緒狀態(tài)的進(jìn)程中選擇一個(gè)進(jìn)程到處理機(jī)上運(yùn)行。進(jìn)程調(diào)度的兩種方式 :

      (1)非搶占調(diào)度方式

      在這種調(diào)度方式中,OS一旦把處理機(jī)分配給某個(gè)就緒狀態(tài)的進(jìn)程后,就讓該進(jìn)程一直執(zhí)行下去,直至該進(jìn)程完成或由于該進(jìn)程等待某事件發(fā)生而被阻塞時(shí),才把處理機(jī)分配給其他進(jìn)程。

      (2)搶占調(diào)度方式

      在這種調(diào)度方式中,進(jìn)程調(diào)度程序可根據(jù)某種原則停止正在執(zhí)行的進(jìn)程,將已分配給當(dāng)前進(jìn)程的處理機(jī)收回,重新分配給另一個(gè)處于就緒狀態(tài)的進(jìn)程。

      搶占進(jìn)程調(diào)度的原則:

      (1)時(shí)間片原則:各進(jìn)程按系統(tǒng)分配給的一個(gè)時(shí)間片運(yùn)行,當(dāng)該時(shí)間片用完或由于該進(jìn)程等待某事件發(fā)生而被阻塞時(shí),系統(tǒng)就停止該進(jìn)程的執(zhí)行而重新進(jìn)行調(diào)度。

      (2)優(yōu)先級(jí)原則:每個(gè)進(jìn)程均賦于一個(gè)調(diào)度優(yōu)先級(jí),通常一些重要和緊急的進(jìn)程賦于較高的優(yōu)先級(jí)。當(dāng)一個(gè)新的緊迫進(jìn)程到達(dá)時(shí),或者一個(gè)優(yōu)先級(jí)高的進(jìn)程從阻塞狀態(tài)變成就緒狀態(tài)的時(shí),如果該進(jìn)程的優(yōu)先級(jí)比當(dāng)前進(jìn)程的優(yōu)先級(jí)高,OS就停止當(dāng)前進(jìn)程的執(zhí)行,將處理機(jī)分配給該優(yōu)先級(jí)高的進(jìn)程,使之執(zhí)行。

      (3)短進(jìn)程優(yōu)先原則:當(dāng)新到達(dá)的作業(yè)對(duì)應(yīng)的進(jìn)程比正在執(zhí)行的作業(yè)對(duì)應(yīng)進(jìn)程的運(yùn)行時(shí)間明顯短時(shí),系統(tǒng)剝奪當(dāng)前進(jìn)程的執(zhí)行,而將處理機(jī)分配給新的短進(jìn)程,使之優(yōu)先執(zhí)行。進(jìn)程調(diào)度算法評(píng)價(jià)依據(jù)

      進(jìn)程調(diào)度性能的衡量方法可以分為定性和定量?jī)煞N,在定性衡量方面,首先是調(diào)度的安全性。比如,一次進(jìn)程調(diào)度是否可能引起數(shù)據(jù)結(jié)構(gòu)的破壞等。這要求對(duì)調(diào)度時(shí)機(jī)的選擇和保存CPU現(xiàn)場(chǎng)十分小心。另外,系統(tǒng)開銷也是衡量進(jìn)程調(diào)度的一個(gè)重要指標(biāo),由于調(diào)度程序的執(zhí)行涉及到多個(gè)進(jìn)程的上下文切換,如果調(diào)度策略過于繁瑣和復(fù)雜,將會(huì)耗去較大的系統(tǒng)開銷。這在用戶進(jìn)程調(diào)度系統(tǒng)調(diào)用較多的情況下,將會(huì)造成響應(yīng)時(shí)間大幅度增加。

      進(jìn)程調(diào)度的定量評(píng)價(jià)包括CPU的利用率評(píng)價(jià)、進(jìn)程在就緒隊(duì)列中的等待時(shí)間與執(zhí)行時(shí)間之比等。實(shí)際上,由于進(jìn)程進(jìn)入就緒隊(duì)列的隨機(jī)模型很難確定,而且進(jìn)程上下文切換等也將影響進(jìn)程的執(zhí)行效率,從而對(duì)進(jìn)程調(diào)度進(jìn)行解析是很困難的,一般情況下,大多利用模擬或測(cè)試系統(tǒng)響應(yīng)時(shí)間的方法來評(píng)價(jià)進(jìn)程調(diào)度的性能。

      常用進(jìn)程調(diào)度算法的分析與評(píng)價(jià)

      (二)2009-11-01 20:22

      四種常用進(jìn)程調(diào)度算法的分析與評(píng)價(jià)

      3.1 先來先服務(wù)算法

      3.1.1 算法思想

      該算法思想是按照進(jìn)入就緒隊(duì)列的先后次序來分配處理機(jī)。FCFS采用非剝奪調(diào)度方式,即

      一旦某個(gè)進(jìn)程占有處理機(jī),就一直運(yùn)行下去,直到該進(jìn)程完成其工作或因等待某一事件而不能繼續(xù)執(zhí)行時(shí)才釋放處理機(jī)。

      3.1.2 算法實(shí)現(xiàn)原理圖

      該算法實(shí)現(xiàn)原理圖如圖1所示。

      說明:Ready表示就緒隊(duì)列,Pi表示新進(jìn)入隊(duì)列的進(jìn)程,F(xiàn)inish表示進(jìn)程運(yùn)行完畢退出。

      3.1.3 算法分析與評(píng)價(jià)

      ① 該算法原理簡(jiǎn)單,易于實(shí)現(xiàn)。

      ② 各進(jìn)程平等競(jìng)爭(zhēng)。

      ③ 由于各進(jìn)程執(zhí)行的時(shí)間不一樣,從而導(dǎo)致相對(duì)不公平現(xiàn)象的產(chǎn)生。

      ④ 該算法有利于長(zhǎng)進(jìn)程,不利于短進(jìn)程。

      ⑤ 該算法很少用來作為主調(diào)度策略,常常用作輔助調(diào)度算法使用

      3.2最高優(yōu)先權(quán)優(yōu)先調(diào)度算法

      3.2.1 算法思想

      該算法的基本思想是進(jìn)程優(yōu)先權(quán)高者優(yōu)先調(diào)度,是一種最常用的進(jìn)程調(diào)度算法。該算法的關(guān)鍵是如何確定優(yōu)先數(shù)。通常確定優(yōu)先數(shù)的方法有兩種,即靜態(tài)法和動(dòng)態(tài)法。

      靜態(tài)優(yōu)先權(quán)是在創(chuàng)建進(jìn)程時(shí)確定的,其運(yùn)行特征是優(yōu)先數(shù)確定之后在整個(gè)進(jìn)行運(yùn)行期間不再改變。確定靜態(tài)優(yōu)先權(quán)的依據(jù)有進(jìn)程的類型、進(jìn)程所使用的資源、進(jìn)程的估計(jì)運(yùn)行時(shí)間等因素。進(jìn)程所申請(qǐng)的資源越多,估計(jì)的運(yùn)行時(shí)間越長(zhǎng),進(jìn)程的優(yōu)先權(quán)越低。進(jìn)程類型不同,優(yōu)先權(quán)也不同,如系統(tǒng)進(jìn)程的優(yōu)先權(quán)高于用戶進(jìn)程的優(yōu)先權(quán)。

      動(dòng)態(tài)優(yōu)先權(quán)是指在創(chuàng)建進(jìn)程時(shí),其運(yùn)行特征是根據(jù)系統(tǒng)資源的使用情況和進(jìn)程的當(dāng)前特點(diǎn)確定一個(gè)優(yōu)先權(quán),在進(jìn)程運(yùn)行過程中再根據(jù)情況的變化調(diào)整優(yōu)先權(quán)。動(dòng)態(tài)優(yōu)先權(quán)一般根據(jù)進(jìn)程占有CPU時(shí)間的長(zhǎng)短、進(jìn)程等待CPU時(shí)間的長(zhǎng)短等因素確定。占有處理機(jī)的時(shí)間越長(zhǎng),則優(yōu)先權(quán)越低;等待時(shí)間越長(zhǎng),則優(yōu)先權(quán)越高。

      3.3.2 算法分析與評(píng)價(jià)

      ① 靜態(tài)優(yōu)先級(jí)調(diào)度算法實(shí)現(xiàn)較為簡(jiǎn)單,但不能反映系統(tǒng)以及進(jìn)程在運(yùn)行過程中發(fā)生的各種變化。而動(dòng)態(tài)優(yōu)先級(jí)法可以滿足這個(gè)方面的需要。

      ② 動(dòng)態(tài)優(yōu)先級(jí)調(diào)度算法的性能一般介于時(shí)間片輪轉(zhuǎn)算法和先來先服務(wù)算法之間。

      常用進(jìn)程調(diào)度算法的分析與評(píng)價(jià)

      (三)2009-11-01 20:23

      3.3時(shí)間片輪轉(zhuǎn)調(diào)度算法

      3.3.1 算法思想

      該算法思想是使每個(gè)進(jìn)程在就緒隊(duì)列中的等待時(shí)間與享受服務(wù)的時(shí)間成比例。即將CPU的處理時(shí)間分成固定大小的時(shí)間片,如果在執(zhí)行的一個(gè)進(jìn)程把它分給它的時(shí)間片用完了,但任務(wù)還沒有完成,則它也只能停止下來,釋放它所占的CPU資源,然后排在相應(yīng)的就緒隊(duì)列的后面去。

      3.3.2 算法實(shí)現(xiàn)原理圖

      該算法實(shí)現(xiàn)原理圖如圖2所示

      說明:Ready表示就緒隊(duì)列,Pi表示新進(jìn)入隊(duì)列的進(jìn)程,F(xiàn)inish表示進(jìn)程運(yùn)行完畢退出。Not Finish表示分配給某進(jìn)程的時(shí)間片已用完但任務(wù)還沒有完成,從而插入到Ready隊(duì)列尾部。

      3.3.3 算法分析與評(píng)價(jià)

      ① 時(shí)間片的長(zhǎng)度選擇比較困難

      時(shí)間片的長(zhǎng)度選擇比較困難是因?yàn)闀r(shí)間片長(zhǎng)度的選擇直接關(guān)系到系統(tǒng)開銷和進(jìn)程的響應(yīng)時(shí)間。如果時(shí)間片長(zhǎng)度過短→導(dǎo)致調(diào)度程序剝奪處理器的次數(shù)增加→進(jìn)程的上下文切換的次數(shù)增加→系統(tǒng)的開銷也加重;如果時(shí)間片長(zhǎng)度過長(zhǎng),長(zhǎng)到能使就緒隊(duì)列中所需要執(zhí)行時(shí)間最長(zhǎng)的進(jìn)程執(zhí)行完

      畢→輪轉(zhuǎn)法就變成了FCFS算法→FCFS短處不足就顯示出來了。

      又因?yàn)镃PU的整個(gè)執(zhí)行時(shí)間=各進(jìn)程執(zhí)行時(shí)間之和+系統(tǒng)開銷(各進(jìn)程切換所花費(fèi)的CPU時(shí)間之和,假定存儲(chǔ)開銷忽略不計(jì))。即。因此,時(shí)間片的長(zhǎng)短通常需要由以下因素確定:↙系統(tǒng)的響應(yīng)時(shí)間。

      ↙就緒隊(duì)列中的進(jìn)程數(shù)。

      ↙進(jìn)程的切換時(shí)間。

      ↙ 計(jì)算機(jī)的處理能力,計(jì)算機(jī)的速度越高,時(shí)間片就可越短。

      ② 時(shí)間片長(zhǎng)度選擇的動(dòng)態(tài)性

      以上僅僅作了靜態(tài)分析,通常情況下,就緒隊(duì)列里地進(jìn)程個(gè)數(shù)是不斷變化的。因此,每一次的調(diào)度都需要計(jì)算新一輪的時(shí)間片長(zhǎng)度,不能用固定的時(shí)間片長(zhǎng)度來進(jìn)行所有進(jìn)程的輪轉(zhuǎn)執(zhí)行。③ 該算法的擴(kuò)充——多級(jí)反饋輪轉(zhuǎn)法

      在上面的算法中,未對(duì)就緒隊(duì)列中的進(jìn)程加以條件分析(即進(jìn)入就緒隊(duì)列的因素),由于進(jìn)入就緒隊(duì)列的原因不一樣,要求占用處理機(jī)的緊急程度也不一樣。主要因素有:↙分給該進(jìn)程的時(shí)間片用完,但進(jìn)程還未完成。

      ↙ 分給其時(shí)間片未用完,而發(fā)生了I/O等請(qǐng)求后由阻塞態(tài)轉(zhuǎn)變成就緒態(tài)。

      ↙新的進(jìn)程進(jìn)入。

      因此,根據(jù)緊急程度的不一樣,建立多個(gè)就緒隊(duì)列,同時(shí)賦予不同的的優(yōu)先級(jí),優(yōu)先權(quán)高的就緒隊(duì)列優(yōu)先執(zhí)行,同一就緒隊(duì)列中,優(yōu)先級(jí)相同,按照先來先服務(wù)進(jìn)行調(diào)度,運(yùn)行一個(gè)給定的時(shí)間片,如果沒有執(zhí)行完成則轉(zhuǎn)入到相應(yīng)的就緒隊(duì)列中去(運(yùn)行一次,優(yōu)先級(jí)降低一個(gè)等級(jí),等待一個(gè)時(shí)間片,則優(yōu)先級(jí)升高一個(gè)等級(jí))。其實(shí)現(xiàn)原理圖如圖3所示。

      3.4 短進(jìn)程優(yōu)先調(diào)度算法

      3.4.1 算法思想

      該算法的基本思想是從就緒隊(duì)列(內(nèi)存)中選擇一個(gè)估計(jì)運(yùn)行時(shí)間最短的進(jìn)程,將處理機(jī)分配給它。

      3.4.2 算法分析與評(píng)價(jià)

      ① 該算法能有效降低作業(yè)的平均等待時(shí)間,提高系統(tǒng)吞吐量。

      ② 對(duì)長(zhǎng)進(jìn)程不利,甚至導(dǎo)致長(zhǎng)期得不到處理。

      ③ 該算法完全未考慮進(jìn)程的緊迫程度。

      ④ 進(jìn)程的長(zhǎng)短通常由某種策略估計(jì)提供,不能做到真正的短進(jìn)程優(yōu)先。

      4結(jié)語

      綜述所述,本文從算法思想、算法的實(shí)現(xiàn)原理、算法的優(yōu)缺點(diǎn)等幾個(gè)方面對(duì)先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)算法、最高優(yōu)先權(quán)優(yōu)先調(diào)度算法、短進(jìn)程優(yōu)先調(diào)度算法等四種進(jìn)程調(diào)度算法進(jìn)行詳細(xì)地論述。(轉(zhuǎn)自《計(jì)算機(jī)與信息技術(shù)》)

      第二篇:操作系統(tǒng)進(jìn)程調(diào)度算法模擬實(shí)驗(yàn)報(bào)告

      進(jìn)程調(diào)度算法模擬

      專業(yè):XXXXX 學(xué)號(hào):XXXXX 姓名:XXX 實(shí)驗(yàn)日期:20XX年XX月XX日

      一、實(shí)驗(yàn)?zāi)康?/p>

      通過對(duì)進(jìn)程調(diào)度算法的模擬加深對(duì)進(jìn)程概念和進(jìn)程調(diào)度算法的理解。

      二、實(shí)驗(yàn)要求

      編寫程序?qū)崿F(xiàn)對(duì)5個(gè)進(jìn)程的調(diào)度模擬,要求至少采用兩種不同的調(diào)度算法分別進(jìn)行模擬調(diào)度。

      三、實(shí)驗(yàn)方法內(nèi)容

      1.算法設(shè)計(jì)思路

      將每個(gè)進(jìn)程抽象成一個(gè)控制塊PCB,PCB用一個(gè)結(jié)構(gòu)體描述。

      構(gòu)建一個(gè)進(jìn)程調(diào)度類。將進(jìn)程調(diào)度的各種算法分裝在一個(gè)類中。類中存在三個(gè)容器,一個(gè)保存正在或未進(jìn)入就緒隊(duì)列的進(jìn)程,一個(gè)保存就緒的進(jìn)程,另一個(gè)保存已完成的進(jìn)程。還有一個(gè)PCB實(shí)例。主要保存正在運(yùn)行的進(jìn)程。類中其他方法都是圍繞這三個(gè)容器可以這個(gè)運(yùn)行中的PCB展開。

      主要用到的技術(shù)是STL中的vector以維護(hù)和保存進(jìn)程容器、就緒容器、完成容器。

      當(dāng)程序啟動(dòng)時(shí),用戶可以選擇不同的調(diào)度算法。然后用戶從控制臺(tái)輸入各個(gè)進(jìn)程的信息,這些信息保存到進(jìn)程容器中。進(jìn)程信息輸入完畢后,就開始了進(jìn)程調(diào)度,每調(diào)度一次判斷就緒隊(duì)列是否為空,若為空則系統(tǒng)時(shí)間加一個(gè)時(shí)間片。判斷進(jìn)程容器中是否有新的進(jìn)程可以加入就緒隊(duì)列。2.算法流程圖 主程序的框架:

      開始void FCFS();//先來先服務(wù)void SJF();//最短進(jìn)程優(yōu)先調(diào)度void RR();//簡(jiǎn)單時(shí)間片輪轉(zhuǎn)void PD();//最高優(yōu)先數(shù)優(yōu)先void PCBInput();//輸入進(jìn)程信息選擇調(diào)度算法輸入進(jìn)程信息將輸入容器中以滿足進(jìn)入條件的進(jìn)程調(diào)入就緒隊(duì)列void ProcessQueueProcess();//查看當(dāng)前時(shí)間下,有無進(jìn)程加入。若有則把該進(jìn)程調(diào)入就緒隊(duì)列按照選擇的算法開始選擇就緒隊(duì)列的進(jìn)程開始執(zhí)行void ProcessSelect();//若當(dāng)前就緒隊(duì)列不為空則根據(jù)選擇的調(diào)度算法開始調(diào)度,否則,系統(tǒng)時(shí)間加一個(gè)時(shí)間片.以等待新的進(jìn)程到判斷就緒容器和輸入容器是否為空!processScheduler.m_WaitQueue.empty()||!processScheduler.m_ProcessQueue.empt()Y打印各進(jìn)程信息進(jìn)行統(tǒng)計(jì)計(jì)算周轉(zhuǎn)時(shí)間等結(jié)束void PCBDisplay();//打印當(dāng)前狀況下。就緒隊(duì)列、完成隊(duì)列、運(yùn)行中的進(jìn)程信息void SchedulerStatistics();//調(diào)度統(tǒng)計(jì),計(jì)算周轉(zhuǎn)時(shí)間等進(jìn)程調(diào)度過程:

      開始為空判斷就緒隊(duì)列是否為空if(m_WaitQueue.empty())非空讓系統(tǒng)等待一個(gè)時(shí)間片TimePast()根據(jù)設(shè)定的調(diào)度算法從就緒隊(duì)列中調(diào)入一個(gè)進(jìn)程并執(zhí)行(此時(shí)進(jìn)程從就緒隊(duì)列中刪除,賦值到表示運(yùn)行中的成員變量中)void FCFS();//先來先服務(wù)void SJF();//最短進(jìn)程優(yōu)先調(diào)度void RR();//簡(jiǎn)單時(shí)間片輪轉(zhuǎn)void PD();//最高優(yōu)先數(shù)優(yōu)先進(jìn)程運(yùn)行一個(gè)時(shí)間片N是否達(dá)到該進(jìn)程停止運(yùn)行的條件Y選入的進(jìn)程狀態(tài)是否為“完成”如進(jìn)程已完成,或者分得的時(shí)間片個(gè)數(shù)已到ProcessRun()Yvector

      m_WaitQueue;//進(jìn)程就緒隊(duì)列進(jìn)程未完成,將進(jìn)程優(yōu)先數(shù)減一,并放回到就緒隊(duì)列中設(shè)置進(jìn)程完成時(shí)間,將該進(jìn)程放入完成隊(duì)列vector

      m_FinishQueue;//完成隊(duì)列結(jié)束

      3.算法中用到的數(shù)據(jù)結(jié)構(gòu)

      struct fcfs{

      //先來先服務(wù)算法從這里開始

      char name[10];

      float arrivetime;

      float servicetime;

      float starttime;

      float finishtime;

      float zztime;

      float dqzztime;

      };

      //定義一個(gè)結(jié)構(gòu)體,里面包含的有一個(gè)進(jìn)程相關(guān)的信息

      4.主要的常量變量

      vector

      m_ProcessQueue;//進(jìn)程輸入隊(duì)列

      vector

      m_WaitQueue;//進(jìn)程就緒隊(duì)列 vector

      m_FinishQueue;//完成隊(duì)列 vector

      ::iterator m_iter;//迭代器 PCB m_runProcess;//運(yùn)行中的進(jìn)程

      int m_ProcessCount;//進(jìn)程數(shù) float m_RunTime;//運(yùn)行時(shí)間

      int m_tagIsRun;//是否在運(yùn)行標(biāo)志。表示正在運(yùn)行,表示沒有 float m_TimeSlice;//時(shí)間片大小

      int m_TimeSliceCount;//指時(shí)間片輪轉(zhuǎn)中一次分到的時(shí)間片個(gè)數(shù) char m_SchedulerAlgorithm;//調(diào)度算法

      5.主要模塊

      void PCBInput();//輸入進(jìn)程信息

      void PCBSort();//對(duì)進(jìn)程控制塊按照優(yōu)先級(jí)排序(采用冒泡排序)void ProcessSelect();//若當(dāng)前就緒隊(duì)列不為空則根據(jù)選擇的調(diào)度算法開始調(diào)度。否則,系統(tǒng)時(shí)間void PCBDisplay();//打印當(dāng)前狀況下。就緒隊(duì)列、完成隊(duì)列、運(yùn)行中的進(jìn)程信息

      void ProcessRun();//進(jìn)程運(yùn)行一次。運(yùn)行時(shí)間加個(gè)時(shí)間片。并判斷進(jìn)程是否達(dá)到完成條件。若是則void ProcessQueueProcess();//查看當(dāng)前時(shí)間下,有無進(jìn)程加入。若有則把該進(jìn)程調(diào)入就緒隊(duì)列 void ProcessDispatch();//進(jìn)程分派,進(jìn)程執(zhí)行完成后決定進(jìn)程該進(jìn)入哪個(gè)隊(duì)列(就緒、完成)void TimePast(){ m_RunTime +=m_TimeSlice;ProcessQueueProcess();}//當(dāng)前系統(tǒng)時(shí)間加個(gè)時(shí)間void SchedulerStatistics();//調(diào)度統(tǒng)計(jì),計(jì)算周轉(zhuǎn)時(shí)間等 void FCFS();//先來先服務(wù) void SJF();//最短進(jìn)程優(yōu)先調(diào)度 void RR();//簡(jiǎn)單時(shí)間片輪轉(zhuǎn) void PD();//最高優(yōu)先數(shù)優(yōu)先 加.以等待新的進(jìn)程到來

      ProcessStatus='f'.否則為'w';片,并檢查是否有新的進(jìn)程加入

      四、實(shí)驗(yàn)代碼

      #include #include #include

      using namespace std;

      struct fcfs{

      //先來先服務(wù)算法從這里開始

      char name[10];

      float arrivetime;

      float servicetime;

      float starttime;

      float finishtime;

      float zztime;

      float dqzztime;

      };

      //定義一個(gè)結(jié)構(gòu)體,里面包含的有一個(gè)進(jìn)程相關(guān)的信息

      fcfs a[100];

      void input(fcfs *p,int N)

      {

      int i;

      cout<

      printf(“

      請(qǐng)您輸入進(jìn)程的名字

      到達(dá)時(shí)間

      服務(wù)時(shí)間:(例如: a 0 100)nn”);

      for(i=0;i<=N-1;i++)

      {

      printf(“

      請(qǐng)您輸入進(jìn)程%d的信息:t”,i+1);

      scanf(“ttt%s%f%f”,&p[i].name,&p[i].arrivetime,&p[i].servicetime);

      }

      }

      void Print(fcfs *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N)

      { int k;

      printf(“nn調(diào)用先來先服務(wù)算法以后進(jìn)程運(yùn)行的順序是: ”);

      printf(“%s”,p[0].name);

      for(k=1;k

      {

      printf(“-->%s”,p[k].name);

      }

      cout<

      printf(“n

      具體進(jìn)程調(diào)度信息:n”);

      printf(“t進(jìn)程名

      到達(dá)時(shí)間

      服務(wù)時(shí)間

      開始時(shí)間

      結(jié)束時(shí)間

      周轉(zhuǎn)時(shí)間

      帶權(quán)周轉(zhuǎn)時(shí)間n”);

      for(k=0;k<=N-1;k++)

      {

      printf(“t%st%-.2ft %-.2ft

      %-.2ft

      %-.2ft %-.2ft %-.2fn”,p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime);

      }

      getchar();

      //此處必須要有這個(gè)函數(shù),否則就看不到顯示器上面的輸出,可以看到的結(jié)果只是一閃而過的一個(gè)框剪

      }

      void sort(fcfs *p,int N)//排序

      {

      for(int i=0;i<=N-1;i++)

      for(int j=0;j<=i;j++)

      if(p[i].arrivetime

      {

      fcfs temp;

      temp=p[i];

      p[i]=p[j];

      p[j]=temp;

      }

      }

      void deal(fcfs *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N)

      //運(yùn)行階段

      { int k;

      for(k=0;k<=N-1;k++)

      {

      if(k==0)

      {

      p[k].starttime=p[k].arrivetime;

      p[k].finishtime=p[k].arrivetime+p[k].servicetime;}

      else

      {

      p[k].starttime=p[k-1].finishtime;

      p[k].finishtime=p[k-1].finishtime+p[k].servicetime;}

      }

      for(k=0;k<=N-1;k++)

      {

      p[k].zztime=p[k].finishtime-p[k].arrivetime;

      p[k].dqzztime=p[k].zztime/p[k].servicetime;

      }

      }

      void FCFS(fcfs *p,int N)

      {

      float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;

      sort(p,N);

      deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);

      Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);

      getchar();

      } //先來先服務(wù)算法到此結(jié)束 struct sjf{//最短進(jìn)程優(yōu)先調(diào)度算法從這里開始

      char name[10];float arrivetime;//到達(dá)時(shí)間

      float servicetime;//運(yùn)行時(shí)間

      float starttime;

      //開始時(shí)間

      float finishtime;

      //完成時(shí)間

      };sjf a1[100];

      void input(sjf *p,int N1)//進(jìn)程信息輸入 {

      int i;cout<

      printf(“

      請(qǐng)您輸入進(jìn)程的名字

      到達(dá)時(shí)間

      服務(wù)時(shí)間:(例如: a 0 100)n”);

      for(i=0;i<=N1-1;i++){

      printf(“

      請(qǐng)您輸入進(jìn)程%d的信息:t”,i+1);

      scanf(“ttt%s%f%f”,&p[i].name,&p[i].arrivetime,&p[i].servicetime);} }

      void Print(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,int N1)//最終結(jié)果輸出

      {

      int k;

      printf(“nt調(diào)用最短進(jìn)程優(yōu)先調(diào)度算法以后進(jìn)程的調(diào)度順序?yàn)?”);

      printf(“%s”,p[0].name);

      for(k=1;k

      {printf(“-->%s”,p[k].name);}

      cout<

      printf(“n給個(gè)進(jìn)程具體調(diào)度信息如下:n”);

      printf(“nt進(jìn)程名t到達(dá)時(shí)間t運(yùn)行時(shí)間t開始時(shí)間t完成時(shí)間n”);

      for(k=0;k<=N1-1;k++)

      {

      printf(“ t%st %-.2ftt %-.2ftt %-.2ftt %-.2ftn”,p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime);

      }

      getchar();

      } void sort(sjf *p,int N1)//排序 {

      for(int i=0;i<=N1-1;i++)

      for(int j=0;j<=i;j++)

      if(p[i].arrivetime

      {

      sjf temp;

      temp=p[i];

      p[i]=p[j];

      p[j]=temp;

      } } void deal(sjf *p, float arrivetime,float servicetime,float starttime,float finishtime,int N1)//運(yùn)行階段

      { int k;

      for(k=0;k<=N1-1;k++)

      {

      if(k==0)

      {

      p[k].starttime=p[k].arrivetime;

      p[k].finishtime=p[k].arrivetime+float(p[k].servicetime)/60;}

      else

      {

      p[k].starttime=p[k-1].finishtime;

      p[k].finishtime=p[k-1].finishtime+float(p[k].servicetime)/60;}

      }

      }

      void sjff(sjf *p,int N1){

      float arrivetime=0,servicetime=0,starttime=0,finishtime=0;

      sort(p,N1);

      for(int m=0;m

      {if(m==0)

      p[m].finishtime=p[m].arrivetime+float(p[m].servicetime)/60;

      else

      p[m].finishtime=p[m-1].finishtime+float(p[m].servicetime)/60;

      int i=0;

      for(int n=m+1;n<=N1-1;n++)

      {

      if(p[n].arrivetime<=p[m].finishtime)

      i++;

      }

      float min=p[m+1].servicetime;

      int next=m+1;

      for(int k=m+1;k

      {

      if(p[k+1].servicetime

      {min=p[k+1].servicetime;

      next=k+1;}

      }

      sjf temp;

      temp=p[m+1];

      p[m+1]=p[next];

      p[next]=temp;

      }

      deal(p,arrivetime,servicetime,starttime,finishtime,N1);

      Print(p,arrivetime,servicetime,starttime,finishtime,N1);

      getchar();}//最短進(jìn)程優(yōu)先調(diào)度算法到這里結(jié)束

      char menu()//用來輸出相關(guān)信息的函數(shù)

      {

      char cse1;

      while(1)

      {

      system(“cls”);

      fflush(stdin);

      cout<

      cout<

      cout<<“t”<<“|| <<<<<<<<<<<<歡<<<<<<<<<<< >>>>>>>>>>>>迎>>>>>>>>>>> ||”<

      cout<<“t”<<“||

      ||”<

      cout<<“t”<<“||”<<“t 進(jìn)程調(diào)度算法模擬”<<“tt”<<“||”<

      cout<<“t”<<“||

      ||”<

      cout<<“t”<<“||”<<“tt 1.先來先服務(wù)調(diào)度算法 ”<<“tt”<<“||”<

      cout<<“t”<<“||

      ||”<

      cout<<“t”<<“||”<<“tt 2.最短進(jìn)程優(yōu)先調(diào)度算法”<<“tt”<<“||”<

      cout<<“t”<<“||

      ||”<

      cout<<“t”<<“|| <<<<<<<<<<<<<<<<<<<<<<<<<您>>>>>>>>>>>>>>>>>>>>>>>>> ||”<

      cout<

      cout<

      cout<<“tt

      請(qǐng)輸入您的選擇(1/2):”;

      cse1=getchar();

      if(cse1<'1'||cse1>'2')

      cout<<“你的輸入有錯(cuò)!”<

      else

      break;

      }

      return cse1;} int main(int argc, char *argv[]){

      while(1)

      {

      switch(menu())

      {

      case '1':

      int N;

      cout<

      cout<

      printf(“tt<<---!!@@@先來先服務(wù)調(diào)度算法@@@!!--->>n”);

      cout<

      printf(“輸入進(jìn)程數(shù)目:”);

      scanf(“%d”,&N);

      input(a,N);

      FCFS(a,N);

      case '2':

      int N1;

      cout<

      cout<

      printf(“tt<<---!!@@@最短進(jìn)程優(yōu)先調(diào)度算法@@@!!--->>n”);

      cout<

      printf(“輸入進(jìn)程數(shù)目: ”);

      scanf(“%d”,&N1);

      input(a1,N1);

      sjf *b=a1;

      sjf *c=a1;

      sjff(b,N1);

      getchar();

      }

      }

      system(“PAUSE”);

      return EXIT_SUCCESS;}

      五、實(shí)驗(yàn)結(jié)果

      1.執(zhí)行結(jié)果

      2.結(jié)果分析

      先來先服務(wù)調(diào)度算法就是根據(jù)進(jìn)程達(dá)到的時(shí)間為依據(jù),哪一個(gè)進(jìn)程先來那么該進(jìn)程就會(huì)先執(zhí)行;最短進(jìn)程優(yōu)先調(diào)度算法則是以每個(gè)進(jìn)程執(zhí)行所需時(shí)間長(zhǎng)短為依據(jù),某一個(gè)進(jìn)程執(zhí)行所需花的時(shí)間要短些那么該進(jìn)程就先執(zhí)行。以上就是本次進(jìn)程調(diào)度實(shí)驗(yàn)的依據(jù)。

      六、實(shí)驗(yàn)總結(jié)

      通過本次實(shí)驗(yàn)了解到算法很重要,又更加明白算法本身可以節(jié)約時(shí)間,而且不同的函數(shù)之間在調(diào)用的時(shí)候要注意很多的問題。

      第三篇:進(jìn)程調(diào)度

      操作系統(tǒng)課程設(shè)計(jì)

      進(jìn) 程 調(diào) 度 實(shí) 踐 報(bào) 告

      姓名: 董宇超 班級(jí):計(jì)算機(jī)一班 學(xué)號(hào):0906010124

      目錄:

      ? 實(shí)踐內(nèi)容 ? 實(shí)踐目的及意義 ? 功能設(shè)計(jì)及數(shù)據(jù)結(jié)構(gòu) ? 調(diào)試運(yùn)行及測(cè)設(shè)分析 ? 存在的問題及改進(jìn)設(shè)想 ? 實(shí)踐體會(huì) ? 總結(jié) ? 參考文獻(xiàn)

      正文:

      1.實(shí)踐內(nèi)容:

      2.3.在多道程序運(yùn)行環(huán)境下,進(jìn)程數(shù)目一般多于處理機(jī)數(shù)目,使得進(jìn)程要通過競(jìng)爭(zhēng)來使用處理機(jī)。這就要求系統(tǒng)能按某種算法,動(dòng)態(tài)地把處理機(jī)分配給就緒隊(duì)列中的一個(gè)進(jìn)程,使之運(yùn)行,分配處理機(jī)的任務(wù)是由進(jìn)程調(diào)度程序完成的。一個(gè)進(jìn)程被創(chuàng)建后,系統(tǒng)為了便于對(duì)進(jìn)程進(jìn)行管理,將系統(tǒng)中的所有進(jìn)程按其狀態(tài),將其組織成不同的進(jìn)程隊(duì)列。于是系統(tǒng)中有運(yùn)行進(jìn)程隊(duì)列、就緒隊(duì)列和各種事件的進(jìn)程等待隊(duì)列。進(jìn)程調(diào)度的功能就是從就緒隊(duì)列中挑選一個(gè) 進(jìn)程到處理機(jī)上運(yùn)行。進(jìn)程調(diào)度的算法有多種,常用的有先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)算法。

      采用先來先服務(wù)及時(shí)間片輪轉(zhuǎn)算法進(jìn)行進(jìn)程調(diào)度,編程模擬。實(shí)踐目的:

      ·要求設(shè)計(jì)并實(shí)現(xiàn)模擬進(jìn)程調(diào)度的算法:時(shí)間片輪轉(zhuǎn)及先來先服務(wù)?!だ斫膺M(jìn)程控制塊的結(jié)構(gòu)?!だ斫膺M(jìn)程運(yùn)行的并發(fā)性?!ふ莆者M(jìn)程調(diào)度算法。功能設(shè)計(jì):

      1)數(shù)據(jù)結(jié)構(gòu):

      class PCB {

      string ProcessName;// 進(jìn)程名字

      int Time;// 進(jìn)程需要時(shí)間

      int LeftTime;// 進(jìn)程運(yùn)行一段時(shí)間后還需要的時(shí)間

      } 2)功能函數(shù):

      void Copy(Process proc1, Process proc2);// 把proc2賦值給proc1 void sort(Process pr[], int size);// 此排序后按需要的cpu

      時(shí)間從小到大排列

      void Fcfs(Process pr[], int num);// 先來先服務(wù)算法

      void TimeTurn(Process process[], int num, int Timepice);// 時(shí)

      間片輪轉(zhuǎn)算法

      源代碼:

      #include #include using namespace std;class PCB { public:

      };

      void Copy(PCB proc1, PCB proc2);// 把proc2賦值給proc1 void sort(PCB pr[], int size);// 此排序后按需要的cpu時(shí)間從小到大排列 void Fcfs(PCB pr[], int num);// 先來先服務(wù)算法

      void TimeTurn(PCB process[], int num, int Timepice);// 時(shí)間片輪轉(zhuǎn)算法

      void main(){

      int a;cout<>a;const int Size =30;PCB

      process[Size];int num;int TimePice;

      cout<<“輸入進(jìn)程個(gè)數(shù):”<>num;if(a==2){

      } for(int i=0;i< num;i++)//輸入進(jìn)程信息 {

      } for(int k=0;k

      cout<>name;cin>> CpuTime;process[i].ProcessName =name;process[i].Time =CpuTime;cout<>TimePice;string ProcessName;// 進(jìn)程名字 int Time;// 進(jìn)程需要時(shí)間

      int LeftTime;// 進(jìn)程運(yùn)行一段時(shí)間后還需要的時(shí)間

      } {

      } else if(a==2)//時(shí)間片輪轉(zhuǎn)調(diào)度 {

      } cout<<“進(jìn)程名”<<“ 剩余時(shí)間”<<“

      狀態(tài)”<

      CPU時(shí)間 ”<<“

      狀態(tài)”<

      }

      void sort(PCB pr[], int size)// 以進(jìn)程時(shí)間從低到高排序 {// 直接插入排序

      } /* 先來先服務(wù)算法的實(shí)現(xiàn)*/ void Fcfs(PCB process[], int num){ // process[] 是輸入的進(jìn)程,num是進(jìn)程的數(shù)目

      while(true){

      if(num==0){

      } if(process[0].LeftTime==0)//由于第一個(gè)進(jìn)程總是在運(yùn)行,所以每次都只判斷process[0].LeftTime { cout<<“ 所有進(jìn)程都已經(jīng)執(zhí)行完畢!”<

      } PCB temp;temp = pr[i];int j=i;

      while(j>0 && temp.Time < pr[j-1].Time){

      } pr[j] = temp;pr[j] = pr[j-1];j--;proc1.ProcessName =proc2.ProcessName;proc1.Time =proc2.Time;

      }

      } cout<<“ 進(jìn)程”<

      } else if(process[0].LeftTime > 0){

      cout<“<

      運(yùn)行”;cout<

      for(int s=1;s

      } cout<<“ ”<

      “<

      等待”<} // while

      /* 時(shí)間片輪轉(zhuǎn)調(diào)度算法實(shí)現(xiàn)*/ void TimeTurn(PCB process[], int num, int Timepice){

      while(true){

      if(num==0){

      } if(process[0].LeftTime==0)//由于第一個(gè)進(jìn)程總是在運(yùn)行,所以每次都只判斷process[0].LeftTime {

      cout<<“ 進(jìn)程”<

      }

      } num--;if(process[num-1].LeftTime ==0){

      } else if(process[0].LeftTime > 0){

      cout<

      } PCB temp;//中間變量 temp = process[0];for(int j=0;j

      等待”<

      就緒”<

      process[0].LeftTime=process[0].LeftTime-Timepice;if(process[0].LeftTime<=0)//當(dāng)剩余時(shí)間小于零時(shí),做零處理 process[0].LeftTime=0;cout<<“ ”<

      “<

      運(yùn)行”<

      for(int s=1;s“<

      cout<<” 進(jìn)程“ << process[num-1].ProcessName <<” 已經(jīng)執(zhí)行完畢!"<

      } // while

      4.調(diào)試運(yùn)行:

      運(yùn)行開始后出現(xiàn)如下界面:

      按提示選擇1/2;

      ? 先選1,進(jìn)行FCFS調(diào)度:

      ? 若選2,進(jìn)行時(shí)間片輪轉(zhuǎn)調(diào)度:

      5.存在的問題:

      由于初次做操作系統(tǒng)模擬實(shí)驗(yàn),所以程序設(shè)計(jì)中存在很多問題,例如定義好PCB后,各種指針的使用,使得程序甚是復(fù)雜,再加上隊(duì)列指針,而且指針錯(cuò)誤在調(diào)試的時(shí)候不提示錯(cuò)誤,只是編好的程序看似沒有錯(cuò)誤,卻在執(zhí)行時(shí)出現(xiàn)異常而中斷,由于使用指針使得程序龐大檢查改正困難,無法發(fā)現(xiàn)隱藏的錯(cuò)誤,只是程序無法進(jìn)行下去。

      最終本程序選擇數(shù)組保存PCB信息,存儲(chǔ)和調(diào)用都簡(jiǎn)單化。

      改進(jìn)之處:學(xué)習(xí)指針,并且使用三個(gè)隊(duì)列,就緒隊(duì)列,運(yùn)行隊(duì)列,完成隊(duì)列,使得進(jìn)程調(diào)度模擬更加清晰。

      還有一些簡(jiǎn)單的以解決的問題,不一一列舉了。

      6.實(shí)踐心得體會(huì):

      通過這次實(shí)踐學(xué)會(huì)了不少內(nèi)容,更深的理解了進(jìn)程調(diào)度的幾種算法,而且學(xué) 會(huì)了系統(tǒng)的編寫程序,而不是只編寫幾個(gè)功能函數(shù)。在編程過程中,需要 查閱各種資料,并且學(xué)習(xí)前人的編寫方法,找出優(yōu)劣,然后形成自己的思想,最終完成程序的編寫。

      通過模擬進(jìn)程調(diào)度的兩種算法,懂得了各種算法在不同情況下的作用。選擇 一個(gè)好的調(diào)度算法可以是計(jì)算機(jī)在執(zhí)行龐大的作業(yè)時(shí)井井有條,并且使用時(shí) 間很短。

      在模擬過程中出現(xiàn)過好多問題,有的解決了,有的還未解決,不管如何都是 一種收獲,編寫功能函數(shù)時(shí)總會(huì)出現(xiàn)參數(shù)調(diào)用錯(cuò)誤的情況,通過分析解決了。在指針指向的問題上,覺得很復(fù)雜,最終沒有解決。

      7.總結(jié):

      為期一周的操作系統(tǒng)實(shí)踐課結(jié)束了,編寫了包含有兩種調(diào)度算法的進(jìn)程 調(diào)度模擬程序,兩種程序各有優(yōu)劣,F(xiàn)CFS調(diào)度算法是按照進(jìn)程進(jìn)入系統(tǒng)的時(shí) 間先后被CPU選擇創(chuàng)建的,這種算法易于實(shí)現(xiàn),但效率不高,只顧及到進(jìn)程 的等候時(shí)間,沒考慮要求服務(wù)的時(shí)間長(zhǎng)短,相比SJF算法不利于較短的作業(yè)。本程序的另一種調(diào)度算法是RR算法,它在調(diào)度是是為每個(gè)進(jìn)程分配時(shí)間片,當(dāng)時(shí)間片用完時(shí),進(jìn)程便排到隊(duì)尾以便下次分配,這種調(diào)度策略可以防止那 些很少使用設(shè)備的進(jìn)程長(zhǎng)時(shí)間占用處理器,導(dǎo)致要使用設(shè)備的那些進(jìn)程沒機(jī) 會(huì)啟動(dòng)設(shè)備。

      在編寫程序的同時(shí),還學(xué)習(xí)了進(jìn)程調(diào)度的其他算法,明白了它們各自的優(yōu)劣,懂得了計(jì)算機(jī)在調(diào)度進(jìn)程時(shí)的取舍。

      8.參考文獻(xiàn):

      1.操作系統(tǒng)教程(第4版)…………孫鐘秀 主編 高等教育出版社;

      2.算法與數(shù)據(jù)結(jié)構(gòu)-C語言描述(第2版)……張乃孝 主編 高等教育出版社; 3.網(wǎng)絡(luò)資源;

      第四篇:進(jìn)程調(diào)度實(shí)驗(yàn)報(bào)告

      天津大學(xué)仁愛學(xué)院

      實(shí)驗(yàn)類型:實(shí)驗(yàn)名稱:實(shí)驗(yàn)地點(diǎn):

      學(xué)生姓名:班 級(jí):

      操作系統(tǒng) 實(shí)驗(yàn)報(bào)告

      必 修 實(shí)驗(yàn)日期:2014年4月18日進(jìn)程調(diào)度 二實(shí)驗(yàn)樓504 李帥帥 指導(dǎo)教師:張 磊 計(jì)科一班 計(jì)算機(jī)科學(xué)與技術(shù)系

      天津大學(xué)仁愛學(xué)院——計(jì)算機(jī)科學(xué)與技術(shù)系——李帥帥

      實(shí)驗(yàn)報(bào)告內(nèi)容:

      1)實(shí)驗(yàn)?zāi)康?/p>

      用c語言編寫和調(diào)試一個(gè)進(jìn)程調(diào)度程序,以加深對(duì)進(jìn)程的概念及進(jìn)程調(diào)度算法的理解。

      2)實(shí)驗(yàn)器材和設(shè)備

      硬 件: 二實(shí)驗(yàn)樓504計(jì)算機(jī)

      開發(fā)工具: Microsoft Visual C++ 6.0

      3)實(shí)驗(yàn)任務(wù)

      本實(shí)驗(yàn)?zāi)M單處理器系統(tǒng)的進(jìn)程調(diào)度,加深對(duì)進(jìn)程的概念及進(jìn)程調(diào)度算法的理解。用c語言編寫和調(diào)試一個(gè)進(jìn)程調(diào)度的算法程序,有一些簡(jiǎn)單的界面,能夠運(yùn)行,仿真操作系統(tǒng)中進(jìn)程調(diào)度的原理和過程。通過對(duì)調(diào)度算法的模擬,進(jìn)一步理解進(jìn)程的基本概念,加深對(duì)進(jìn)程運(yùn)行狀態(tài)和進(jìn)程調(diào)度

      4)實(shí)驗(yàn)原理

      無論是在批處理系統(tǒng)還是分時(shí)系統(tǒng)中,用戶進(jìn)程數(shù)一般都多于處理機(jī)數(shù)、這將導(dǎo)致它們互相爭(zhēng)奪處理機(jī)。另外,系統(tǒng)進(jìn)程也同樣需要使用處理機(jī)。這就要求進(jìn)程調(diào)度程序按一定的策略,動(dòng)態(tài)地把處理機(jī)分配給處于就緒隊(duì)列中的某一個(gè)進(jìn)程,以使之執(zhí)行。

      基本狀態(tài):1.等待態(tài):等待某個(gè)事件的完成;

      2.就緒態(tài):等待系統(tǒng)分配處理器以便運(yùn)行; 3.運(yùn)行態(tài):占有處理器正在運(yùn)行。

      運(yùn)行態(tài)→等待態(tài) 往往是由于等待外設(shè),等待主存等資源分配或等待人工干預(yù)而引起的。

      等待態(tài)→就緒態(tài) 則是等待的條件已滿足,只需分配到處理器后就能運(yùn)行。運(yùn)行態(tài)→就緒態(tài) 不是由于自身原因,而是由外界原因使運(yùn)行狀態(tài)的進(jìn)程讓出處理器,這時(shí)候就變成就緒態(tài)。例如時(shí)間片用完,或有更高優(yōu)先級(jí)的進(jìn)程來搶占處理器等。

      就緒態(tài)→運(yùn)行態(tài) 系統(tǒng)按某種策略選中就緒隊(duì)列中的一個(gè)進(jìn)程占用處理器,此時(shí)就變成了運(yùn)行態(tài)

      5)實(shí)驗(yàn)過程描述

      a)打開Microsoft Visual C++ 6.0,創(chuàng)建工程。

      b)根據(jù)要求用 c語言代碼實(shí)現(xiàn)應(yīng)用程序,并調(diào)試完成。c)運(yùn)行程序,根據(jù)提示輸入相應(yīng)的字符。

      d)輸入實(shí)驗(yàn)測(cè)試內(nèi)容,并觀察執(zhí)行窗口顯示的過程。

      天津大學(xué)仁愛學(xué)院——計(jì)算機(jī)科學(xué)與技術(shù)系——李帥帥

      q=(struct pcb *)malloc(sizeof(pcb));

      cin>>q->name;

      cin>>q->needtime;

      q->cputime=0;

      q->priority=P_TIME-q->needtime;

      q->process=ready;

      q->next=NULL;

      if(i==0)

      {

      p=q;

      t->next=q;

      }

      else

      {

      q->next=t->next;

      t=q;

      q=p;

      }

      i++;} return p;}

      void display(pcb * p){ cout<<“name”<<“ ”<<“cputime”<<“needtime”<<“ ”<<“priority”<<“ ”

      <<“state”<

      cout<

      name;

      cout<<“ ”;

      cout<

      cputime;

      cout<<“ ”;

      cout<

      needtime;

      cout<<“ ”;

      cout<

      priority;

      cout<<“ ”;

      switch(p->process)

      {

      case ready:cout<<“ready”<

      case execute:cout<<“execute”<

      case block:cout<<“block”<

      case finish:cout<<“finish”<

      }

      天津大學(xué)仁愛學(xué)院——計(jì)算機(jī)科學(xué)與技術(shù)系——李帥帥

      void priority_cal(){ pcb * p;system(“cls”);p=get_process();int cpu=0;system(“cls”);while(!process_finish(p)){

      cpu++;

      cout<<“cuptime:”<

      cpuexe(p);

      display(p);

      Sleep(1000);} printf(“All processes have finished,press any key to exit”);getch();}

      void display_menu(){ cout<<“nCHOOSE THE ALGORITHM:”<

      pcb *get_process_round(){ pcb *q;pcb *t;pcb *p;int i=0;t=(struct pcb *)malloc(sizeof(pcb));p=(struct pcb *)malloc(sizeof(pcb));cout<<“input name and time”<q=(struct pcb *)malloc(sizeof(pcb));

      cin>>q->name;

      cin>>q->needtime;

      q->cputime=0;

      天津大學(xué)仁愛學(xué)院——計(jì)算機(jī)科學(xué)與技術(shù)系——李帥帥

      {

      } } return t;}

      void set_state(pcb *p){ while(p){

      if(p->needtime==0)

      {

      p->process=finish;//如果所需執(zhí)行時(shí)間為0,則設(shè)置運(yùn)行狀態(tài)為結(jié)束

      }

      if(p->process==execute)

      {

      p->process=ready;//如果未執(zhí)行狀態(tài)則設(shè)置為就緒

      }

      p->next;} }//設(shè)置隊(duì)列中進(jìn)程執(zhí)行狀態(tài) void display_round(pcb *p){ cout<<“NAME”<<“ ”<<“CPUTIME”<<“ ”<<“NEEDTIME”<<“ ”<<“COUNT”<<“ ”<<“ROUND”

      <<“ ”<<“STATE”<

      cout<

      name;

      cout<<“ ”;

      cout<

      cputime;

      cout<<“ ”;

      cout<

      needtime;

      cout<<“ ”;

      cout<

      count;

      cout<<“ ”;

      cout<

      round;

      cout<<“ ”;

      switch(p->process)

      {

      case ready:cout<<“ready”<

      case execute:cout<<“execute”<

      case finish:cout<<“finish”<

      天津大學(xué)仁愛學(xué)院——計(jì)算機(jī)科學(xué)與技術(shù)系——李帥帥

      7)實(shí)驗(yàn)結(jié)果截圖

      第五篇:電梯優(yōu)先調(diào)度算法

      電梯優(yōu)先調(diào)度算法

      電梯調(diào)度算法(ms InterView)

      移臂調(diào)度算法包括以下四種:

      1)先來先服務(wù)算法:根據(jù)訪問者提出訪問請(qǐng)求的先后次序來決定執(zhí)行次序。

      2)最短尋找時(shí)間優(yōu)先調(diào)度算法:從等待的訪問者中挑選尋找時(shí)間最短的那個(gè)請(qǐng)求執(zhí)行,而不管訪問者的先后次序。

      3)電梯調(diào)度掃描算法:從移動(dòng)臂當(dāng)前位置沿移動(dòng)方向選擇最近的那個(gè)柱面的訪問者來執(zhí)行,若該方向上無請(qǐng)求訪問時(shí),就改變移動(dòng)方向再選擇。

      4)單向掃描調(diào)度算法:從0柱面開始往里單向掃描,掃到哪個(gè)執(zhí)行哪個(gè)。

      */

      // t1.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。

      //

      #include “stdafx.h” #include“math.h” #include“stdlib.h” #include“string.h” struct Head {

      int nPosition;bool bVisited;};

      void Visit(struct Head *pHead){

      printf(“visite cy:%dn”,pHead->nPosition);pHead->bVisited=true;} int ReadInputKeyboard(struct Head *pHead,int *pCurrentPosition,int nMaxNumber){ int i;

      printf(“please input Current position:”);scanf(“%d”,pCurrentPosition);

      printf(“please input will visit position:”);for(i=0;i

      scanf(“%d”,&pHead[i].nPosition);pHead[i].bVisited=false;if(pHead[i].nPosition<0)break;} return i;} int ReadInputFile(struct

      Head

      *pHead,int

      *pCurrentPosition,int nMaxNumber){ int i;

      char szFileName[256],*q,*p,szTemp[20];printf(“please input filename:”);scanf(“%s”,szFileName);

      FILE *pFile=fopen(szFileName,“r”);if(pFile==NULL){

      printf(“open file %s error”,szFileName);return-1;}

      for(i=0;!feof(pFile)&&i

      p=szFileName;fgets(p,256,pFile);

      while(q=strchr(p,',')){

      memset(szTemp,0,sizeof(szTemp)*sizeof(char));strncpy(szTemp,p,q-p);p=q+1;if(i==0)

      *pCurrentPosition=atoi(szTemp);else { pHead[i-1].nPosition=atoi(szTemp);pHead[i-1].bVisited=false;} i++;}

      memset(szTemp,0,sizeof(szTemp)*sizeof(char));pHead[i-1].nPosition=atoi(p);pHead[i-1].bVisited=false;//i++;

      }

      fclose(pFile);return i;}

      int FifoVisit(int nCurrentPosition,struct Head *pHead,int nNumber){

      //先來先服務(wù)

      int nHaveVisited=0;int nMoveDistance=0;int i;while(nHaveVisited

      for(i=0;i

      if(pHead[i].bVisited)continue;

      Visit(&pHead[i]);nHaveVisited++;

      nMoveDistance+=abs(nCurrentPosition-pHead[i].nPosition);nCurrentPosition=pHead[i].nPosition;} }

      printf(“the sum of move distance:%dn”,nMoveDistance);return nMoveDistance;}

      int SsfoVisit(int nCurrentPosition,struct Head *pHead,int nNumber){ // 最短尋找時(shí)間優(yōu)先

      int nHaveVisited=0;int nMoveDistance=0;int nMinDistance=0;int nMinIndex=0;int i;

      while(nHaveVisited

      nMinDistance=0xffff;nMinIndex=0;//找最小值

      for(i=0;i

      if(pHead[i].bVisited)continue;

      if(nMinDistance>abs(pHead[i].nPosition-nCurrentPosition)){

      nMinDistance=abs(pHead[i].nPosition-nCurrentPosition);nMinIndex=i;} } //訪問

      Visit(&pHead[nMinIndex]);nHaveVisited++;

      nMoveDistance+=nMinDistance;

      nCurrentPosition=pHead[nMinIndex].nPosition;}

      printf(“the sum of move distance:%dn”,nMoveDistance);return nMoveDistance;}

      int DtVisit(int nCurrentPosition,bool bOut,struct Head *pHead,int nNumber){

      //電梯調(diào)度算法

      int nHaveVisited=0;int nMoveDistance=0;int nMinDistance=0;int nMinIndex=0;int i;

      while(nHaveVisited

      nMinDistance=0xffff;nMinIndex=0;//找最小值

      for(i=0;i

      if(pHead[i].bVisited)continue;

      if(bOut&&pHead[i].nPositionnCurrentPosition){

      if(nMinDistance>abs(pHead[i].nPosition-nCurrentPosition)){

      nMinDistance=abs(pHead[i].nPosition-nCurrentPosition);nMinIndex=i;} } }

      if(nMinDistance==0xffff){

      bOut=!bOut;continue;}

      //訪問

      Visit(&pHead[nMinIndex]);nHaveVisited++;

      nMoveDistance+=nMinDistance;

      nCurrentPosition=pHead[nMinIndex].nPosition;}

      printf(“the sum of move distance:%dn”,nMoveDistance);return nMoveDistance;}

      int DxVisit(int nCurrentPosition,struct Head *pHead,int nNumber){

      //單向調(diào)度算法

      int nHaveVisited=0;int nMoveDistance=0;int nMinDistance=0;int nMinIndex=0;int i;while(nHaveVisited

      nMinDistance=0xffff;nMinIndex=0;//找最小值

      for(i=0;i

      if(pHead[i].bVisited)continue;

      if(pHead[i].nPosition>nCurrentPosition){

      if(nMinDistance>abs(pHead[i].nPosition-nCurrentPosition)){

      nMinDistance=abs(pHead[i].nPosition-nCurrentPosition);nMinIndex=i;} } }

      if(nMinDistance==0xffff){

      nMoveDistance+=199-nCurrentPosition;nCurrentPosition=0;continue;}

      //訪問

      Visit(&pHead[nMinIndex]);nHaveVisited++;

      nMoveDistance+=nMinDistance;

      nCurrentPosition=pHead[nMinIndex].nPosition;}

      printf(“the sum of move distance:%dn”,nMoveDistance);return nMoveDistance;}

      int main(int argc, char* argv[]){ //p114 struct Head mylist[20];//={98,false,183,false,37,false,122,false,14,false,124,false,65,false,67,false};

      //int nCurrentPosition=53;

      //int nRealNumber=8;

      int nCurrentPosition=0;

      int nRealNumber=ReadInputFile(mylist,&nCurrentPosition,20);// FifoVisit(nCurrentPosition,mylist,nRealNumber);

      // SsfoVisit(nCurrentPosition,mylist,nRealNumber);

      //DtVisit(nCurrentPosition,false,mylist,nRealNumber);

      DxVisit(nCurrentPosition,mylist,nRealNumber);

      return 0;}

      下載常用進(jìn)程調(diào)度算法的分析與評(píng)價(jià)word格式文檔
      下載常用進(jìn)程調(diào)度算法的分析與評(píng)價(jià).doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        單核與多核的CPU調(diào)度算法

        1. 多核CPU調(diào)度算法 1.1全局隊(duì)列調(diào)度算法 操作系統(tǒng)維護(hù)一個(gè)全局的任務(wù)等待隊(duì)列,每個(gè)進(jìn)程在執(zhí)行階段可以使用全部的處理器資源。當(dāng)系統(tǒng)中有一個(gè)CPU核心空閑時(shí),操作系統(tǒng)就從全局......

        實(shí)驗(yàn)報(bào)告六 磁盤調(diào)度算法

        實(shí)驗(yàn)報(bào)告六磁盤調(diào)度算法 班級(jí):軟技2班學(xué)號(hào):201467003084 姓名:劉道林 一.實(shí)驗(yàn)內(nèi)容:熟悉磁盤的結(jié)構(gòu)以及磁盤的驅(qū)動(dòng)調(diào)度算法的模擬,編程實(shí)現(xiàn)簡(jiǎn)單常用的磁盤驅(qū)動(dòng)調(diào)度算法先來先服......

        短作業(yè)優(yōu)先調(diào)度算法

        《操作系統(tǒng)》課程實(shí)驗(yàn)報(bào)告 姓名:陳凱 學(xué)號(hào):541413430202 地點(diǎn):四教樓301 指導(dǎo)老師:張旭 專業(yè)班級(jí):嵌入式軟件14-02 實(shí)驗(yàn)名稱:短作業(yè)優(yōu)先調(diào)度算法 一、 實(shí)驗(yàn)?zāi)康模?測(cè)試數(shù)據(jù)可以隨......

        操作系統(tǒng)課程設(shè)計(jì)-磁盤調(diào)度算法

        1. 實(shí)驗(yàn)題目: 磁盤調(diào)度算法。 建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu); 在屏幕上顯示磁盤請(qǐng)求的服務(wù)狀況; 將一批磁盤請(qǐng)求的情況存磁盤文件,以后可以讀出并重放; 計(jì)算磁頭移動(dòng)的總距離及平均移動(dòng)距......

        多級(jí)反饋隊(duì)列調(diào)度算法

        多級(jí)反饋隊(duì)列調(diào)度算法 一實(shí)驗(yàn)內(nèi)容 以鏈?zhǔn)浇Y(jié)構(gòu)組成空閑PCB棧,以雙向鏈?zhǔn)浇Y(jié)構(gòu)組成進(jìn)程的就緒隊(duì)列和睡眠隊(duì)列,模擬UNIX的進(jìn)程管理程序,實(shí)現(xiàn)以下操作(可用鍵盤命令、命令文件或由產(chǎn)......

        算法設(shè)計(jì)與分析學(xué)習(xí)心得

        算法設(shè)計(jì)與分析學(xué)習(xí)心得 班級(jí):物聯(lián)網(wǎng)1201 姓名:劉瀟 學(xué)號(hào):1030612129 一、實(shí)驗(yàn)內(nèi)容: 這學(xué)期的算法與設(shè)計(jì)課,老師布置了這四個(gè)問題,分別是貨郎擔(dān)問題,動(dòng)態(tài)生成二維數(shù)組,對(duì)話框下拉列......

        數(shù)據(jù)結(jié)構(gòu)算法設(shè)計(jì)與分析

        數(shù)據(jù)結(jié)構(gòu)算法設(shè)計(jì)與分析、計(jì)算機(jī)網(wǎng)絡(luò)、計(jì)算機(jī)組成原理、操作系統(tǒng)原理、編譯原理、數(shù)據(jù)庫原理及應(yīng)用、軟件工程、軟件測(cè)試等計(jì)算機(jī)基礎(chǔ)理論課程; 網(wǎng)頁制作、程序設(shè)計(jì)Java、JSP......

        操作系統(tǒng)課程設(shè)計(jì),磁盤調(diào)度算法范文

        沈陽理工大學(xué)課程設(shè)計(jì)專用紙 Noi 目 錄 1 課程設(shè)計(jì)目的及要求……………………………………………………錯(cuò)誤!未定義書簽。 2 相關(guān)知識(shí)…………………………………......