




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上精選優質文檔-傾情為你奉上專心-專注-專業專心-專注-專業精選優質文檔-傾情為你奉上專心-專注-專業單處理器任務調度1 需求說明1.1 基本需求目標:本次實驗的目標是在Linux環境下實現任務調度仿真,利用多線程實現任務池中的多個任務,支持先來先服務、輪轉和反饋三種調度策略,提高對Linux環境下多進程、多線程和單處理器調度等知識的理解。問題描述:設有任務A、B、C、D、E,分別具有不同的優先級和處理時間,通過一個調度線程對這5個任務進行調度。功能需求:正確輸出三種調度算法下,任務的執行順序、每個任務占用CPU的時間以及優先級隊列(反饋調度)通過一個調度進程實現任務調
2、度有輸出界面,在每個時間點輸出任務狀態、每個任務已經占用CPU時間(TIMECOUNTER)和還需CPU時間,已經執行的任務順序(order2)和時間(time)。非功能需求:程序應有較好的容錯性(即能對用戶輸入的命令進行判斷,并對錯誤的命令進行錯誤處理)過程需求:使用vi進行代碼的編寫使用make工具建立工程將實現不同類別功能的函數寫到不同的.c文件中,并使用makefile鏈接編譯。#include#include#includetypedef struct quenchar pname8;int time1;int time2;char state;struct quen *next;
3、QUEN;float t,d;structint id; float ArriveTime;/到達時間 float ServiceTime;/該進程需要的服務時間float StartTime;/進程真正開始運行時間float EndTime;/進程真正結束時間 float RunTime;/運行的時間float DQRunTime;/相對執行時間實際運行/請求的服務時間int status;/進程狀態,是否被運行過arrayTask4;void GetTask(); int fcfs(); int sjf(); void new_n(int s); void Printresult(int
4、j); void cl();void GetTask() int i; float a; for(i = 0; i = 4; i+) arrayTaski.id = i + 1; printf(input the number); printf(input the ArriveTime of arrayTask%d:,i); scanf(%f,&a); arrayTaski.ArriveTime = a; printf(input the RequestTime of arrayTask%d:,i); scanf(%f, &a); arrayTaski.RequestTime = a; arr
5、ayTaski.StartTime = 0; arrayTaski.EndTime = 0; arrayTaski.RunTime = 0; arrayTaski.status = 0; int fcfs() int i,j,w; for(i = 0; i = 4; i+) if(arrayTaski.status = 0) t = arrayTaski.ArriveTime; w = 1; if(w = 1) break; for(i = 0; i = 4; i+) if(arrayTaski.ArriveTime t & arrayTaski.status = 0) t = arrayTa
6、ski.ArriveTime; for(i = 0; i = 4; i+) if(arrayTaski.ArriveTime = t) return i; /選擇排序,先找到第一個沒有執行的任務,然后再對所有任務遍歷,找到到達時間最小的任務,返回該任務,執行之 /函數目的:用先來先服務策略,找到當前需要執行的任務int sjf() int i,x=0,a=0,b=0; float g; for(i=0;i=4;i+) if(arrayTaski.status = 1) g = arrayTaski.EndTime; x = 1; if (x=0) t = arrayTask0.ArriveTi
7、me; for(i=0;i=4;i+) if(arrayTaski.ArriveTime t) t=arrayTaski.ArriveTime; a=i; return a; else for(i = 0; i g) g = arrayTaski.EndTime; for(i = 0; i = 4; i+) if(arrayTaski.status = 0 & arrayTaski.ArriveTime = g) t = arrayTaski.RequestTime; a = i; b = 1; if(b != 0) for(i = 0; i = 4; i+) if(arrayTaski.st
8、atus = 0 & arrayTaski.ArriveTime = g & arrayTaski.RequestTime t) t = arrayTaski.RequestTime; a = i; return a; else for(i = 0; i = 4; i+) if(arrayTaski.status = 0) t = arrayTaski.ArriveTime; for(i = 0; i = 4; i+) if(arrayTaski.status = 0 & arrayTaski.ArriveTime t) t = arrayTaski.ArriveTime; a = i; re
9、turn a; void new_n(int s) int i, g = 0; for(i = 0; i = 4; i+) /查找是否有進程未執行,如果沒有,令g=0,如果有,令g=1;if(arrayTaski.status=0) continue; else g=1; break; if(g=0) /當前進程為最后一個進程 arrayTasks.StartTime=arrayTasks.ArriveTime; arrayTasks.EndTime=arrayTasks.RequestTime+arrayTasks.ArriveTime; arrayTasks.RunTime=arrayTa
10、sks.RequestTime; arrayTasks.status=1; g=2; if(g=1) arrayTasks.status=1; /將該進程執行 for(i=0;i=4;i+) if(arrayTaski.status=1) d=arrayTaski.EndTime;/找到一個進程的結束時間 for(i=0;id&arrayTaski.status=1) d=arrayTaski.EndTime; /找到這幾個進程的最晚結束時間 if(arrayTasks.ArriveTime0) printf(enter the pname:); scanf(%s,str); printf(e
11、nter the need time:); scanf(%d,&t); head=p=(QUEN*)malloc(sizeof(QUEN); strcpy(p-pname,str); p-time1=t; p-time2=0; p-state=R; p-next=NULL; head=p; getchar(); -d; /建立頭結點,并初始化while(d0) printf(enter the pname:); scanf(%s,str); printf(enter need time:); scanf(%d,&t); q=(QUEN *)malloc(sizeof(QUEN); strcpy
12、(q-pname,str); q-time1=t; q-time2=0; q-state=R; q-next=NULL; p-next=q; p=q; -d; p-next=head; q=head; /頭插法建立鏈表printf(process name need time runned staticn); do printf( %s%d %d %cn,q-pname,q-time1,q-time2,q-state); q=q-next; while(q!=head); printf(n); do if(head-time2time1) head-time2+; /基于時間片,一次+操作,就
13、是一次的時間片 if(head-time2=head-time1) head-state=END; q=head; printf(The running process is %sn,q-pname); printf(process name left time runned staticn); doprintf( %s %d %d %cn,q-pname,q-time1,q-time2,q-state); q=q-next; while(q!=head); printf(n);head=head-next; q=head; p-next=head; else printf(The runni
14、ng process is %sn,q-pname); printf(process name left time runned staticn); do printf(%s%d%d%cn,q-pname,q-time1,q-time2,q-state); q=q-next;while(q!=head); printf(n); head=head-next; q=head; p=p-next; printf(Is it needing new process?(y or n)n); getchar(); scanf(%c,&f); if(f=Y|f=y) getchar(); printf(E
15、nter the new pname:); scanf(%s,str); printf(Enter the new neededtime:); scanf(%d,&t); m=(QUEN *)malloc(sizeof(QUEN); strcpy(m-pname,str); m-time1=t; m-time2=0; m-state=R; m-next=NULL; if(q-next-state=E) p=m; head=m;p-next=head; q=head; else p-next=m; m-next=head; p=m; while(q-next-state!=E); printf(
16、The processes are finishedn);int main(void) int i,b,k,c = 0; char a; int d4;/clrscr(); /cls(); printf(t 1. FCFS n); printf(t 2. SFJ n); printf(t 3. EXIT n); printf(t 4. cl n); for(i = 0; ; i+) if(c)break; printf(please input the number a:n); scanf(%d, &a); switch(a) case 3:c = 1;break; case 1:printf
17、(please input the different-Arrive Time of arrayTasksn);GetTask(); printf(*the result of fcfsn); printf(NumbertArrivetServertStarttFinishtTurnovetTake power turnover timen); for(b = 0; b = 4; b+) k = fcfs(); db = k; new_n(k); for(b = 0; b = 4; b+) Printresult(db); continue; case 2:printf(please input the different-RequestTime of arrayTasksn); GetTask(); printf(*th
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB31/T 478.19-2014主要工業產品用水定額及其計算方法第19部分:塑料制品(塑料粒子、塑料制品)
- DB31/T 329.24-2019重點單位重要部位安全技術防范系統要求第24部分:高校
- 2025新租賃合同范本模板
- 職場技能更新迭代研究考核試卷
- 教育學心理學試題及答案
- 副校長兼高二年級組長講話學生高考決戰在高三決勝在高二抓住了高二就抓住了高考
- 攀枝花仁和區2025年八年級《語文》上學期期末試題與參考答案
- 智能制造共享技術與產業升級補充協議
- 童趣表情包IP授權與動畫制作合同
- 藥品進口代理與供應鏈管理服務合同
- 數字修約考試題及答案
- 山東大學《軍事理論》考試試卷及答案解析
- 面向非結構化文本的事件關系抽取關鍵技術剖析與實踐
- 《國別和區域研究專題》教學大綱
- 2025年日歷表含農歷(2025年12個月日歷-每月一張A4可打印)
- 《ESC血壓升高和高血壓管理2024指南》解讀
- 學科競賽在提升學生團隊協作能力中的作用
- 《公共管理學基礎》題庫及答案
- 基本藥物工作計劃
- 2025年行政執法人員執法資格考試必考題庫及答案(共232題)
- 2025手術室年度工作計劃
評論
0/150
提交評論