操作系統(tǒng) 時間片輪轉(zhuǎn)算法_第1頁
操作系統(tǒng) 時間片輪轉(zhuǎn)算法_第2頁
操作系統(tǒng) 時間片輪轉(zhuǎn)算法_第3頁
操作系統(tǒng) 時間片輪轉(zhuǎn)算法_第4頁
操作系統(tǒng) 時間片輪轉(zhuǎn)算法_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、進(jìn)程時間片輪轉(zhuǎn)調(diào)度算法一、 實驗題目:  進(jìn)程時間片輪轉(zhuǎn)調(diào)度算法 二、實驗原理:  在多道程序系統(tǒng)中,一個作業(yè)被提交后必須經(jīng)過處理機(jī)調(diào)度后,方能獲得處理機(jī)執(zhí)行。對調(diào)度的處理又都可采用不同的調(diào)度方式和調(diào)度算法。調(diào)度算法是指:根據(jù)系統(tǒng)的資源分配策略所規(guī)定的資源分配算法。 三、實驗?zāi)康模?#160; 1、加深對進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別。  2、深入系統(tǒng)如何組織進(jìn)程、創(chuàng)建進(jìn)程。  3、進(jìn)一步認(rèn)識如何實現(xiàn)處理器調(diào)度。  4、通過對進(jìn)程調(diào)度算法的設(shè)計,深入理解進(jìn)程調(diào)度的原理。  5、加深對時間片輪轉(zhuǎn)調(diào)度算

2、法的理解。 四、實驗要求: 用C語言編寫程序完成單處理機(jī)的進(jìn)程調(diào)度,要求采用時間片輪轉(zhuǎn)調(diào)度算法。實驗具體要求包括:首先確定作業(yè)控制塊的內(nèi)容和組成方式;然后完成作業(yè)調(diào)度;最后編寫主函數(shù),并對所做工作進(jìn)行測試。5、 運行結(jié)果時間片大小為1時(q=1):時間片大小為4時(q=4):6、 代碼#include "stdafx.h"#include <stdio.h>#include <stdlib.h> #include <string.h> #include <windows.h>#define OK 0#def

3、ine OVERFLOW 1char pro20 ; /進(jìn)程 int processNum; /進(jìn)程數(shù) int timeSlice = 0; /時間片 typedef char QlemTypeChar;typedef int QlemTypeInt;typedef int Status;typedef struct QNodeQlemTypeChar data;QlemTypeInt timeArrive = 0;QlemTypeInt timeService = 0;QlemTypeInt timeCount = 0;QlemTypeInt runCount = 0;QlemTypeInt

4、 timeFinal = 0; /完成時間QlemTypeInt timeRound = 0; /周轉(zhuǎn)時間float timeRightRound = 0; /帶權(quán)周轉(zhuǎn)時間QlemTypeChar proState = 'W' /進(jìn)程的狀態(tài),W就緒態(tài),R執(zhí)行態(tài),F(xiàn)完成態(tài) struct QNode *next; /鏈表指針 QNode, *QueuePtr;typedef structQueuePtr front; /隊頭指針QueuePtr rear; /隊尾指針LinkQueue;Status InitQueue(LinkQueue &Q)Q.front = Q.re

5、ar = (QueuePtr)malloc(sizeof(QNode);if(!Q.front) exit(OVERFLOW);Q.front->next = NULL;return OK;Status EnQueue(LinkQueue &Q, QlemTypeChar e)QueuePtr p;p = (QueuePtr)malloc(sizeof(QNode);if (!p) exit(OVERFLOW);p->data = e;p->next = NULL;Q.rear->next = p;Q.rear = p;return OK;Status DeQu

6、eue(LinkQueue &Q, QlemTypeChar &e)QueuePtr p;if (Q.front = Q.rear) return ERROR;p = Q.front->next;e = p->data;Q.front->next = p->next;if (Q.rear = p) Q.rear = Q.front;free(p);return OK;LinkQueue QPro;QNode qq10;void ProGetFirst() /取出就緒隊列隊首進(jìn)程InitQueue(QPro);printf("請輸入要創(chuàng)建的進(jìn)程名

7、稱:n");for (int i = 0; i < processNum-1; i+)fflush(stdin);scanf_s("%c", &proi);fflush(stdin);for (int i = 0; i<processNum-1; i+)qqi.data = proi;EnQueue(QPro, qqi.data);void scanfData()printf("請輸入要創(chuàng)建的進(jìn)程數(shù)目:");scanf_s("%d", &processNum);processNum+;fflush

8、(stdin); printf("n");ProGetFirst();printf("創(chuàng)建進(jìn)程到達(dá)時間:n");int time_Arr10;for (int i = 0; i < processNum-1; i+)scanf_s("%d", &time_Arri);for (int i =0; i<processNum-1; i+)qqi.timeArrive = time_Arri;EnQueue(QPro, qqi.timeArrive);printf("創(chuàng)建進(jìn)程服務(wù)時間:n");int

9、time_Ser10;for (int i = 0; i < processNum-1; i+)scanf_s("%d", &time_Seri);for (int i = 0; i<processNum-1; i+)qqi.timeService = time_Seri;EnQueue(QPro, qqi.timeService);printf("請輸入時間片大?。?");scanf_s("%d", &timeSlice);printf("n");void ProOutPut1() /

10、獲取進(jìn)程信息printf("進(jìn)程名t 到達(dá)時間t 服務(wù)時間t 進(jìn)程狀態(tài)t 執(zhí)行次數(shù)n");for (int i = 0; i < processNum - 1; i+)printf("%ctt%dtt%dtt%ctt%dn", qqi.data, qqi.timeArrive, qqi.timeService, State, qqi.runCount);void CalculatetimeFinal() /計算完成時間int timecou=0;int countTemp = 0;QlemTypeChar ee;for (int i

11、= 0; i < processNum - 1; i+)countTemp += qqi.timeService;while (timecou < countTemp)for (int i = 0; i < processNum - 1; i+)if (qqi.timeFinal = 0)if (qqi.timeService - qqi.timeCount >= timeSlice)timecou += timeSlice;else timecou += (qqi.timeService - qqi.timeCount);/DeQueue(QPro, ee);if (

12、timeSlice < qqi.timeService) /時間片大小< 服務(wù)時間int timetemp = timeSlice > qqi.timeService ? qqi.timeService : timeSlice;if (qqi.timeCount + timetemp) < qqi.timeService) if (qqi.timeService - qqi.timeCount >= timeSlice) qqi.timeCount += timeSlice;elseqqi.timeCount += (qqi.timeService - qqi.t

13、imeCount); elseif (qqi.timeFinal = 0) qqi.timeFinal = timecou;else /時間片大小>= 服務(wù)時間qqi.timeFinal = timecou; /該進(jìn)程的完成時間=countfor (int i = 0; i < processNum - 1; +i)qqi.timeRound = qqi.timeFinal - qqi.timeArrive;qqi.timeRightRound = (float)qqi.timeRound / qqi.timeService;void ProOutPut2() /獲取進(jìn)程處理后的信

14、息printf("進(jìn)程名t 到達(dá)時間 服務(wù)時間 完成時間 周轉(zhuǎn)時間 帶權(quán)周轉(zhuǎn)n");for (int i = 0; i < processNum - 1; i+)printf(" %ctt%dt %dt %dt %dt %.2fn", qqi.data, qqi.timeArrive, qqi.timeService, qqi.timeFinal, qqi.timeRound, qqi.timeRightRound);int _tmain(int argc, _TCHAR* argv)scanfData();ProOutPut1();CalculatetimeFinal();printf("n");printf("CPU處理中.n");printf("完成時間:");for (int i = 0; i < processNum - 1; i+)printf("%d,", qqi.timeFinal);printf("n");printf("周轉(zhuǎn)時間:");for (int i = 0; i < proce

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論