操作系統(tǒng)課程設(shè)計(jì)說明書_第1頁
操作系統(tǒng)課程設(shè)計(jì)說明書_第2頁
操作系統(tǒng)課程設(shè)計(jì)說明書_第3頁
操作系統(tǒng)課程設(shè)計(jì)說明書_第4頁
操作系統(tǒng)課程設(shè)計(jì)說明書_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、評分標(biāo)準(zhǔn)優(yōu)秀:有完整的符合標(biāo)準(zhǔn)的文檔,文檔有條理、文筆通順,格式正確,程序完全實(shí)現(xiàn)設(shè)計(jì)要求,獨(dú)立完成;良好:有完整的符合標(biāo)準(zhǔn)的文檔,文檔有條理、文筆通順,格式正確;程序完全實(shí)現(xiàn)設(shè)計(jì)要求,獨(dú)立完成,但存在少量錯誤;中等:有完整的符合標(biāo)準(zhǔn)的文檔,有基本實(shí)現(xiàn)設(shè)計(jì)方案的軟件,設(shè)計(jì)方案正確;及格:有完整的符合標(biāo)準(zhǔn)的文檔,有基本實(shí)現(xiàn)設(shè)計(jì)方案的軟件,設(shè)計(jì)方案基本正確;不及格:沒有完整的符合標(biāo)準(zhǔn)的文檔,軟件沒有基本實(shí)現(xiàn)設(shè)計(jì)方案,設(shè)計(jì)方案不正確。沒有獨(dú)立完成,抄襲或雷同。成績評定為: 。 指導(dǎo)教師: 年 月 日目 錄課題一:進(jìn)程調(diào)度算法的模擬011.1 設(shè)計(jì)目的011.2 任務(wù)及要求011.3 算法及數(shù)據(jù)結(jié)構(gòu)0

2、21.3.1算法的總體思想021.3.2 頭文件、控制塊結(jié)構(gòu)、全局變量及函數(shù)申明部分021.3.3進(jìn)程創(chuàng)建算法函數(shù)031.3.4先來先服務(wù)調(diào)度算法函數(shù)051.3.5最短作業(yè)優(yōu)先調(diào)度算法函數(shù)061.3.6優(yōu)先級的分時調(diào)度算法函數(shù)071.3.7查找優(yōu)先級最大的進(jìn)程函數(shù)081.3.8輪轉(zhuǎn)調(diào)度算法函數(shù)091.3.9主函數(shù)101.3 實(shí)驗(yàn)結(jié)果及分析121.4.1 實(shí)驗(yàn)結(jié)果121.4.2 結(jié)果分析17課題二:系統(tǒng)動態(tài)分配資源的模擬182.1設(shè)計(jì)目的182.2任務(wù)及要求182.3算法及數(shù)據(jù)結(jié)構(gòu)182.3.1算法的總體思想182.3.2 頭文件、全局變量及函數(shù)申明部分202.3.3 資源分配的安全性算法212

3、.3.4 銀行家算法222.3.5 資源分配函數(shù)232.3.6 資源修改函數(shù)242.3.7 資源添加函數(shù)242.3.8 資源刪除函數(shù)252.3.9 作業(yè)添加函數(shù)262.3.10 打印函數(shù)272.3.11 主函數(shù)282.4實(shí)驗(yàn)結(jié)果及分析302.4.1實(shí)驗(yàn)結(jié)果302.4.2 結(jié)果分析34課題三:磁盤調(diào)度算法的模擬353.1設(shè)計(jì)目的353.2任務(wù)及要求353.3算法及數(shù)據(jù)結(jié)構(gòu)353.3.1算法的總體思想353.3.2頭文件、常量及函數(shù)申明部分363.3.3 調(diào)用庫函數(shù)的快速排序函數(shù)373.3.4 當(dāng)前磁道尋找函數(shù)373.3.5 磁盤磁道初始化模塊383.3.6 fcfs模塊403.3.7 sstf模

4、塊413.3.8 scan模塊433.3.9 c-scan模塊453.3.10 主函數(shù)483.4實(shí)驗(yàn)結(jié)果及分析493.4.1實(shí)驗(yàn)結(jié)果493.4.2結(jié)果分析52山東科技大學(xué)學(xué)生課程設(shè)計(jì)(操作系統(tǒng))課題一:進(jìn)程調(diào)度算法的模擬1.1設(shè)計(jì)目的在計(jì)算機(jī)操作系統(tǒng)中,進(jìn)程調(diào)度處理從隊(duì)列中選擇哪個進(jìn)程并為之分配cpu的問題。有幾種常見的進(jìn)程調(diào)度算法,如:先到先服務(wù)調(diào)度(fcfs),最短作業(yè)優(yōu)先調(diào)度(sjf),優(yōu)先權(quán)調(diào)度,輪轉(zhuǎn)法調(diào)度(rr)。為了加深對這些算法的認(rèn)識和掌握,以及進(jìn)而在計(jì)算機(jī)上實(shí)現(xiàn)算法的全過程模擬。故做此課題以實(shí)現(xiàn)之。1.2任務(wù)及要求編程序模擬進(jìn)程調(diào)度算法中的先到先服務(wù)調(diào)度(fcfs)、最短作業(yè)優(yōu)

5、先調(diào)度(sjf)、優(yōu)先權(quán)調(diào)度和輪轉(zhuǎn)法調(diào)度(rr),要求能體現(xiàn)算法的全過程。1用語言來實(shí)現(xiàn)對n個進(jìn)程采用不同調(diào)度算法的進(jìn)程調(diào)度。2每個用來標(biāo)識進(jìn)程的進(jìn)程控制塊pcb用結(jié)構(gòu)來描述,包括以下字段:(1)進(jìn)程優(yōu)先數(shù)id,其中0為閑逛進(jìn)程,用戶進(jìn)程的標(biāo)識數(shù)為1,2,3。(2)進(jìn)程優(yōu)先級priority,閑逛進(jìn)程(idle)的優(yōu)先級為0,用戶進(jìn)程的優(yōu)先級大于0,且隨機(jī)產(chǎn)生,優(yōu)先數(shù)越大,優(yōu)先級越高。(3)進(jìn)程占用的cpu時間cputime,進(jìn)程每運(yùn)行一次,累計(jì)值等于4。(4)進(jìn)程總共需要運(yùn)行時間alltime,利用隨機(jī)函數(shù)產(chǎn)生。(5)進(jìn)程狀態(tài),0:就緒態(tài);1:運(yùn)行態(tài);2:阻塞態(tài)。(6)隊(duì)列指針next,用來

6、將多個進(jìn)程控制塊pcb鏈接為隊(duì)列。3優(yōu)先數(shù)改變的原則(1)進(jìn)程在就緒隊(duì)列中每呆一個時間片,優(yōu)先數(shù)增加1。(2)進(jìn)程每運(yùn)行一個時間片,優(yōu)先數(shù)減3。4在調(diào)度前,系統(tǒng)中擁有的進(jìn)程數(shù)pcb_number由鍵盤輸入,經(jīng)初始化后,所有的進(jìn)程控制塊pcb鏈接成就緒隊(duì)列。1.3算法及數(shù)據(jù)結(jié)構(gòu)1.3.1算法的總體思想(流程)1. 先到先服務(wù)調(diào)度(fcfs)先到先服務(wù)調(diào)度算法(fcfs)是最簡單的調(diào)度算法。采用這種方案,先請求cpu的進(jìn)程被首先分配到cpu。2. 最短作業(yè)優(yōu)先調(diào)度(sjf)最短作業(yè)優(yōu)先調(diào)度(sjf)算法是將每個進(jìn)程與其下一個cpu區(qū)間段相關(guān)聯(lián)。當(dāng)cpu為可用時,它會賦給具有最短后續(xù)cpu區(qū)間的進(jìn)程

7、。如果兩個進(jìn)程具有相同長度的cpu區(qū)間,那么可以使用fcfs調(diào)度來處理。3. 優(yōu)先權(quán)調(diào)度在優(yōu)先權(quán)調(diào)度算法中,每個進(jìn)程都有一個優(yōu)先權(quán)與其關(guān)聯(lián),具有最高優(yōu)先權(quán)的進(jìn)程會被分配到cpu。具有相同優(yōu)先權(quán)的進(jìn)程按fcfs順序調(diào)度。4. 輪轉(zhuǎn)法調(diào)度(rr)輪轉(zhuǎn)法(rr)調(diào)度算法是專門為分時系統(tǒng)而設(shè)計(jì)的。它類似于fcfs調(diào)度,但增加了搶占以在進(jìn)程間切換。定義一個較小的時間單元,稱為時間量或時間片。就緒隊(duì)列作為循環(huán)隊(duì)列處理。cpu調(diào)度程序循環(huán)就緒隊(duì)列,為每個進(jìn)程分配不超過一個時間片間隔的cpu。1.3.2 頭文件、控制塊結(jié)構(gòu)、全局變量及函數(shù)申明部分/*-頭文件包含-*/#include#include#incl

8、ude#include#include/*-狀態(tài)碼定義-*/#define true 1#define false 0#define ok 1#define error 0#define infeasible -1#define overflow -2/*-進(jìn)程控制塊結(jié)構(gòu)定義-*/typedef struct pcb int id; /進(jìn)程號,用于標(biāo)示不同的進(jìn)程 int pri; /進(jìn)程優(yōu)先級 int cputime; /進(jìn)程占用的cpu時間cputime,進(jìn)程每運(yùn)行一次,累計(jì)值等于4 int alltime; /進(jìn)程運(yùn)行完成所需要的總時間int status; /用于表示進(jìn)程狀態(tài),0:就緒態(tài)

9、;1:運(yùn)行態(tài);2:阻塞態(tài)datatype;typedef struct nodedatatype data; /數(shù)據(jù)域struct node *next; /指針域slnode;/*-全局變量的定義-*/int progress_num; /用來存放進(jìn)程數(shù)slnode *head=(slnode *)malloc(sizeof(slnode); /開辟頭節(jié)點(diǎn)slnode *head1=(slnode *)malloc(sizeof(slnode); /開辟頭節(jié)點(diǎn)slnode *head2=(slnode *)malloc(sizeof(slnode); /開辟頭節(jié)點(diǎn)/*-功能函數(shù)聲明-*/vo

10、id create_process(int); /進(jìn)程創(chuàng)建算法函數(shù)void fcfs_scheduling(); /先來先服務(wù)算法函數(shù)void sjf_scheduling(); /最短作業(yè)優(yōu)先調(diào)度算法函數(shù)void action_scheduling(slnode); /優(yōu)先級的分時調(diào)度算法函數(shù)void search_max_pri(int); /查找優(yōu)先級最大的進(jìn)程算法函數(shù)void rr_scheduling(int); /輪轉(zhuǎn)調(diào)度算法函數(shù)1.3.3進(jìn)程創(chuàng)建算法函數(shù)1. 功能:根據(jù)用戶輸入的進(jìn)程數(shù)創(chuàng)建符合條件的進(jìn)程。2.數(shù)據(jù)結(jié)構(gòu):void create_process(int); 3.算法實(shí)

11、現(xiàn):/進(jìn)程創(chuàng)建算法函數(shù)void create_process(int n)int i=1;srand(int)time(0); head-next=null; slnode *q=head;printf(進(jìn)程分配情況如下:n);printf(*n);printf( 優(yōu)先數(shù) 優(yōu)先級 cputime alltime status n); while(idata.id=i;p-data.cputime=0;p-data.status=0;p-data.pri=rand()%20+1;p-data.alltime=rand()%12+1;printf(%8d%10d%10d%10d%10d%n,p-d

12、ata.id,p-data.pri, p-data.cputime,p-data.alltime,p-data.status);p-next=null;q-next=p;q=q-next;i+;slnode *p0=head1;head1-next=null;for(q=head-next;q!=null;q=q-next)slnode *r=(slnode *)malloc(sizeof(slnode);r-data.id=q-data.id;r-data.cputime=q-data.cputime;r-data.status=q-data.status;r-data.pri=q-data

13、.pri; r-data.alltime=q-data.alltime;p0-next=r;r-next=null;p0=p0-next;slnode *p1=head2;head2-next=null;for(q=head-next;q!=null;q=q-next)slnode *k=(slnode *)malloc(sizeof(slnode);k-data.id=q-data.id;k-data.cputime=q-data.cputime;k-data.status=q-data.status;k-data.pri=q-data.pri; k-data.alltime=q-data.

14、alltime;p1-next=k;k-next=null;p1=p1-next;/create_process1.3.4先來先服務(wù)調(diào)度算法函數(shù)1. 功能:用先來先服務(wù)調(diào)度(fcfs)算法對系統(tǒng)進(jìn)程進(jìn)行調(diào)度。2.數(shù)據(jù)結(jié)構(gòu):void fcfs_scheduling();3.算法實(shí)現(xiàn):/先來先服務(wù)算法函數(shù)void fcfs_scheduling()slnode *p=head-next;while(p!=null)printf(正在執(zhí)行 p%2d 進(jìn)程 ,p-data.id);for(int i=0;idata.alltime);printf(n進(jìn)程 p%2d 執(zhí)行完成!nn,p-data.id)

15、;p=p-next;printf(n);printf(所有進(jìn)程都執(zhí)行完成。nn);/fcfs_scheduling1.3.5最短作業(yè)優(yōu)先調(diào)度算法函數(shù)1. 功能:用最短作業(yè)優(yōu)先調(diào)度(sjf)算法對系統(tǒng)進(jìn)程進(jìn)行調(diào)度。2.數(shù)據(jù)結(jié)構(gòu):void sjf_scheduling();3.算法實(shí)現(xiàn):/最短作業(yè)優(yōu)先調(diào)度算法函數(shù)void sjf_scheduling()slnode *p;slnode *min_p;while(head2-next!=null)min_p=head2-next;for(p=head2-next;p!=null;p=p-next)if(min_p-data.alltimep-dat

16、a.alltime)min_p=p;printf(正在執(zhí)行區(qū)間長度最短的 %2d 進(jìn)程 ,min_p-data.id);for(int i=0;idata.alltime);printf(n進(jìn)程 p%2d 執(zhí)行完成!nn,min_p-data.id);for(p=head2;p!=null;p=p-next)if(p-next=min_p)p-next=p-next-next;free(min_p);printf(n);printf(所有進(jìn)程都執(zhí)行完成!nn);/sjf_scheduling1.3.6 優(yōu)先級的分時調(diào)度算法函數(shù)1. 功能:用優(yōu)先級的分時調(diào)度算法對系統(tǒng)進(jìn)程進(jìn)行調(diào)度。2.數(shù)據(jù)結(jié)構(gòu):

17、void action_scheduling(slnode);3.算法實(shí)現(xiàn):/優(yōu)先級的分時調(diào)度算法函數(shù)void action_scheduling(slnode *p)slnode *q=head-next;while(q!=null)printf(n正在執(zhí)行一個時間片的 p2%d 進(jìn)程 ,p-data.id);for(int i=0;idata.pri=q-data.pri+1;elseq-data.pri=q-data.pri-3;if(q-data.alltime4)q-data.alltime-=4;elseq-data.alltime=0;q-data.status=1;q=q-ne

18、xt;/action_scheduling1.3.7 查找優(yōu)先級最大的進(jìn)程函數(shù)1. 功能:用于查找優(yōu)先級最大的進(jìn)程的函數(shù)。2.數(shù)據(jù)結(jié)構(gòu):void search_max_pri(int m);3.算法實(shí)現(xiàn):/查找優(yōu)先級最大的進(jìn)程函數(shù)void search_max_pri(int)slnode *p=head-next;slnode *q=head-next;slnode *q0=head;while(q!=null)if(q-data.alltime=0)printf(n進(jìn)程 p2%d 已執(zhí)行完成!n,q-data.id);progress_num-; q0-next=q0-next-next;

19、 free(q); q=q0-next; else if(q-data.prip-data.pri) p=q;q0=q0-next; q=q-next;if(progress_num0)action_scheduling(p);/search_max_pri1.3.8 輪轉(zhuǎn)調(diào)度算法函數(shù)1. 功能:用輪轉(zhuǎn)法調(diào)度(rr)算法對系統(tǒng)進(jìn)程進(jìn)行調(diào)度。2.數(shù)據(jù)結(jié)構(gòu):void rr_scheduling(int);3.算法實(shí)現(xiàn):/輪轉(zhuǎn)調(diào)度算法void rr_scheduling(int m)slnode *p;while(head1-next!=null)p=head1-next;slnode *prep=

20、head1;slnode *q;while(p!=null)printf(n正在進(jìn)行一個時間片的 p%2d 進(jìn)程,p-data.id);for(int i=0;inext!=null;q=q-next)if(q-next=p)p-data.alltime-=4;p-data.cputime+=4;if(p-data.alltimedata.id);prep-next=prep-next-next;free(p);p=prep-next;elseprep=prep-next;p=p-next;printf(n進(jìn)入下一次輪轉(zhuǎn)!);printf(所有進(jìn)程都執(zhí)行完成!nn);/rr_schedulin

21、g1.3.9 主函數(shù)1. 功能:主函數(shù)。2.數(shù)據(jù)結(jié)構(gòu):int main();3.算法實(shí)現(xiàn):/*-主函數(shù)模塊-*/int main()printf(*-*n);printf(| *系統(tǒng)進(jìn)程調(diào)度算法的模擬* |n);printf(*-*n);printf(請輸入系統(tǒng)進(jìn)程數(shù):);scanf(%d,&progress_num);int choose=-1;if(progress_num=0) printf(此時沒有就緒進(jìn)程。n);elsecreate_process(progress_num);printf(n-*系統(tǒng)進(jìn)程初始化完畢,下面開始進(jìn)程調(diào)度算法模擬!*-nn);while(1)printf(

22、*-*n);printf(| *進(jìn)程調(diào)度算法模擬開始* |n);printf(| 1、先來先服務(wù)調(diào)度 2、最短作業(yè)優(yōu)先調(diào)度 |n);printf(| 3、優(yōu)先權(quán)分時調(diào)度 4、輪轉(zhuǎn)法調(diào)度 0、退出 |n);printf(*-*n);printf(n請輸入您想執(zhí)行的算法序號:);scanf( %d, &choose);switch (choose)case 0:return error;case 1:printf(n-*先來先服務(wù)調(diào)度算法模擬開始*-nn);fcfs_scheduling();break;case 2:printf(n-*最短作業(yè)優(yōu)先調(diào)度算法模擬開始*-nn);sjf_schedu

23、ling();break;case 3:printf(n-*優(yōu)先權(quán)的分時調(diào)度算法模擬開始*-nn);while(head-next!=null)search_max_pri(progress_num);printf(所有進(jìn)程都執(zhí)行完成!nn);break;case 4:printf(n-*輪轉(zhuǎn)法調(diào)度算法模擬開始*-nn);rr_scheduling(progress_num);break;default :printf(您輸入的選擇有誤!請重新輸入!n);break;return ok;/main1.4實(shí)驗(yàn)結(jié)果及分析1.4.1 實(shí)驗(yàn)結(jié)果系統(tǒng)進(jìn)程初始化:先來先服務(wù)調(diào)度模擬:最短作業(yè)優(yōu)先調(diào)度:優(yōu)先

24、權(quán)分時調(diào)度:輪轉(zhuǎn)法調(diào)度:程序結(jié)束:1.4.2 結(jié)果分析這個課題的主要算法是對cpu進(jìn)程調(diào)度的模擬。其主要調(diào)度方法有:先到先服務(wù)調(diào)度(fcfs),最短作業(yè)優(yōu)先調(diào)度(sjf),優(yōu)先權(quán)調(diào)度,輪轉(zhuǎn)法調(diào)度(rr)。實(shí)驗(yàn)過程中,開始由于直接模擬導(dǎo)致結(jié)果立刻出來,無法觀察到執(zhí)行的過程,隨后在程序中加入了sleep函數(shù)就能看到模擬的執(zhí)行過程。經(jīng)過多次的調(diào)試和改正,還是得到了和理論上一樣的實(shí)驗(yàn)結(jié)果(如2.4.1中所示)。課題二:系統(tǒng)動態(tài)分配資源的模擬2.1設(shè)計(jì)目的在計(jì)算機(jī)操作系統(tǒng)中,最有代表的避免死鎖的算法,是銀行家算法。這種算法如此命名是因?yàn)檫@一算發(fā)可用于銀行系統(tǒng),以確保銀行絕不會分配其現(xiàn)金以至使他不能滿足其

25、所有客戶的需求。此課題只目的就是為了加深對該算法的認(rèn)識和掌握,進(jìn)而在計(jì)算機(jī)上實(shí)現(xiàn)算法的全過程模擬。2.2任務(wù)及要求編程序模擬銀行家算法,要求能體現(xiàn)算法的全過程。2.3算法及數(shù)據(jù)結(jié)構(gòu)2.3.1算法的總體思想(流程)1. 銀行家算法中的數(shù)據(jù)結(jié)構(gòu)available:這是一個含有m個元素的數(shù)組,其中的每一個元素代表一類可利用的資源數(shù)目,其初始值是系統(tǒng)中所配置的該類全部可用資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動態(tài)地改變。max:這是的矩陣,它定義了系統(tǒng)中n個進(jìn)程中的每一個進(jìn)程對m類資源的最大需求。allocation:這也是一個的矩陣,它定義了系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)。need

26、:這也是一個的矩陣,用以表示每一個進(jìn)程尚需的各類資源數(shù)。上述三個矩陣間存在下述關(guān)系:。2. 安全性算法確定計(jì)算機(jī)系統(tǒng)是否處于安全狀態(tài)的算法分為以下幾步:1. 設(shè)和分別是長度為m和n的向量。按如下方式進(jìn)行初始化,且對于。2. 查找這樣的i使其滿足 如果沒有這樣的i存在,那么就轉(zhuǎn)到第4步。3. 返回到第2部。4. 如果對所有的i,finishi=ture,那么系統(tǒng)處于安全狀態(tài)。這個算法可能需要數(shù)量級的操作以確定狀態(tài)是否安全。3. 銀行家算法設(shè)requesti是進(jìn)程pi的請求向量,如果requestij=k,表示進(jìn)程pi需要k個pj類型的資源。當(dāng)pi發(fā)出資源請求后,系統(tǒng)按下述步驟進(jìn)行檢查:1. 如果

27、requestij=needi,j,便轉(zhuǎn)向步驟2;否則認(rèn)為出錯,因?yàn)樗枰馁Y源數(shù)已超出它所宣布的最大值。2. 如果requestij=availablei,j, 便轉(zhuǎn)向步驟3;否則,表示尚無足夠資源, pi須等待。3. 系統(tǒng)試探著把資源分配給進(jìn)程pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:availablej:= availablej- requestij;allocationi,j:= allocationi,j+ requestij;needi,j:=needi,j-requestij;系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進(jìn)程pi,以完成本次分

28、配;否則,將本次的試探分配作廢,恢復(fù)原來的資源分配狀態(tài)。2.3.2 頭文件、全局變量及函數(shù)申明部分/*-頭文件包含-*/#include /*-狀態(tài)碼定義-*/#define true 1#define false 0#define ok 1#define error 0#define infeasible -1#define overflow -2/*-全局變量的定義-*/int max_resource=0; /用來定義資源的最大數(shù)char name100=0; /用來存放資源的名稱int avaliable100=0; /用來存放系統(tǒng)的可用資源數(shù)int max_work=0; /用來定義

29、作業(yè)的最大數(shù)int max100100=0; /用來存放各進(jìn)程所需各類資源的最大需求int allocation100100=0; /用來存放各個進(jìn)程系統(tǒng)已分配資源int need100100=0; /用來存放各個進(jìn)程還需要資源int request100=0; /用來存放進(jìn)程的請求資源向量int work100=0; /用來存放系統(tǒng)可提供資源int temp100=0; /用來存放資源分配的安全序列/*-功能函數(shù)聲明-*/int safe_algorithm(); /資源分配的安全性算法int bank_algorithm(); /用銀行家算法對申請資源對進(jìn)行判定int resource_a

30、llocation(int); /用于對資源進(jìn)行分配的函數(shù)int modify_resources(); /用于修改資源的函數(shù)int add_resources(); /用于添加資源的函數(shù)int del_resources(); /用于刪除資源的函數(shù)int add_process(); /用于添加作業(yè)的函數(shù)int display_resources(); /用于在屏幕打印出資源矩陣2.3.3 資源分配的安全性算法1. 功能:資源分配的安全性算法。2.數(shù)據(jù)結(jié)構(gòu):int safe_algorithm();3.算法實(shí)現(xiàn):/資源分配的安全性算法int safe_algorithm()int i,j,k

31、=0,m,apply,temp=0,finish100=0;for(i=0;i3;+i)worki=avaliablei;for(i=0;imax_work;i+) apply=0;for(j=0;jmax_resource;j+)if (finishi=false&needij=workj) apply+;if(apply=max_resource)for(m=0;mmax_resource;m+)workm=workm+allocationim;finishi=true;tempk=i;i-; k+;temp+;for(i=0;imax_work;i+)if(finishi=false)p

32、rintf(系統(tǒng)不安全!n);return infeasible;printf(系統(tǒng)是安全的!n);printf(分配的序列:n);for(i=0;imax_work;i+)printf(%d, tempi);if(i);printf(n);return error;/safe_algorithm2.3.4 銀行家算法1. 功能:用銀行家算法對申請資源對進(jìn)行判定。2.數(shù)據(jù)結(jié)構(gòu):int bank_algorithm(); 3.算法實(shí)現(xiàn):/用銀行家算法對申請資源對進(jìn)行判定int bank_algorithm()char ch=y;int i=0,j=0;printf(請輸入要求分配的資源進(jìn)程號(0

33、-%d):, max_work-1);scanf( %d, &i);printf(請輸入進(jìn)程 %d 申請的資源:n);for(j=0;jmax_resource;j+)printf(%c:, namej);scanf( %d, &requestj);for (j=0;jneedij)printf(進(jìn)程 %d 申請的資源大于它需要的資源!分配不合理,不予分配!n, i);ch=n; break;else if(requestjavaliablej)printf(進(jìn)程 %d 申請的資源大于系統(tǒng)現(xiàn)在可利用的資源!分配錯誤,不予分配!n);ch=n; break; if(ch=y)resource_a

34、llocation(i);display_resources();safe_algorithm();return ok;/bank_algorithm2.3.5 資源分配函數(shù)1. 功能:用于對資源進(jìn)行分配。2.數(shù)據(jù)結(jié)構(gòu):int resource_allocation(int);3.算法實(shí)現(xiàn):/用于對資源進(jìn)行分配int resource_allocation(int i) int j;for (j=0;jmax_work;j+) avaliablej=avaliablej-requestj;allocationij=allocationij+requestj;needij=needij-requ

35、estj;return ok;/resource_allocation2.3.6 資源修改函數(shù)1. 功能:用于修改資源的函數(shù)。2.數(shù)據(jù)結(jié)構(gòu):iint modify_resources();3.算法實(shí)現(xiàn):/用于修改資源函數(shù)int modify_resources()printf(系統(tǒng)目前可用的資源avaliable:n); for(int i=0;imax_resource;i+)printf(%c:%dn, namei, avaliablei);printf(輸入系統(tǒng)可用資源avaliable:n);for(i=0;i3;+i)scanf( %d, &avaliablei);printf(經(jīng)修

36、改后的系統(tǒng)可用資源為:n);for (i=0;imax_resource;i+)printf(%c:%dn, namei, avaliablei);display_resources();safe_algorithm();return ok;/modify_resources2.3.7 資源添加函數(shù)1. 功能:用于添加資源的函數(shù)。2.數(shù)據(jù)結(jié)構(gòu):int add_resources();3.算法實(shí)現(xiàn):/用于添加資源int add_resources() int n,temp;printf(請輸入需要添加資源種類的數(shù)量:);scanf( %d, &n);temp=max_resource;max_r

37、esource=max_resource+n;for(int i=0;in;i+)printf(名稱:);scanf( %c, &nametemp);printf(數(shù)量:);scanf( %d, &avaliabletemp+);display_resources();safe_algorithm();return ok;/add_resources2.3.8 資源刪除函數(shù)1. 功能:用于對資源刪除的函數(shù)。2.數(shù)據(jù)結(jié)構(gòu):int del_resources() ;3.算法實(shí)現(xiàn):/用于刪除資源int del_resources()char del_name;int i,temp=1;printf(

38、請輸入需要刪除的資源名稱:);do scanf( %c, &del_name);for(i=0;imax_resource;i+)if(del_name=namei)temp=0;break;if(i=max_resource)printf(該資源名稱不存在,請重新輸入:); while(temp);for(int j=i;jmax_resource-1;j+)namej=namej+1;avaliablej=avaliablej+1; max_resource=max_resource-1;display_resources();safe_algorithm();return ok;/del

39、_resources2.3.9 作業(yè)添加函數(shù)1. 功能:用于對作業(yè)的添加函數(shù)。2.數(shù)據(jù)結(jié)構(gòu):int add_process();3.算法實(shí)現(xiàn):/用于添加作業(yè)int add_process() int temp=max_work;max_work=max_work+1;printf(請輸入該作業(yè)的最打需求量max:n);for(int i=0;imax_resource;i+)printf(%c:, namei);scanf( %d, &maxtempi);needtempi=maxtempi-allocationtempi;display_resources();safe_algorithm();return ok;/add_process2.3.10 打印函數(shù)1. 功能:用于在屏幕上打印資源矩陣。2.數(shù)據(jù)結(jié)構(gòu):int display_resources();3.算法實(shí)現(xiàn):/用于在屏幕上打印資源矩陣int display_resources()int i,j; printf(系統(tǒng)目前

溫馨提示

  • 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

提交評論