操作系統(tǒng)課程設(shè)計報告_第1頁
操作系統(tǒng)課程設(shè)計報告_第2頁
操作系統(tǒng)課程設(shè)計報告_第3頁
操作系統(tǒng)課程設(shè)計報告_第4頁
操作系統(tǒng)課程設(shè)計報告_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上操作系統(tǒng)課程設(shè)計實驗一 進程管理一、實驗目的1開發(fā)一個函數(shù),建立進程控制塊和資源控制塊結(jié)構(gòu),并實現(xiàn)相關(guān)數(shù)據(jù)結(jié)構(gòu)的初始化。2開發(fā)一系列操作,由進程調(diào)用這些操作,達到控制進程申請或釋放各種資源的目的。通過實驗理解進程的概念,進程的組成(PCB結(jié)構(gòu)),進程的并發(fā)執(zhí)行和操作系統(tǒng)進行進程管理的相關(guān)原語(主要是進程的創(chuàng)建、執(zhí)行、撤消)。二、需求分析用C語言編程模擬進程管理,至少要有:創(chuàng)建新的進程;查看運行進程;換出某個進程;殺死運行進程以及進程之間通信等功能。三、實驗環(huán)境Windows操作系統(tǒng)、VC+6.0C語言(C-free5.0)4、 詳細設(shè)計程序流程圖數(shù)據(jù)結(jié)構(gòu):算法設(shè)計:s

2、tate=0 殺死state=1 就緒state=2 等待state=3 運行(1)進程控制塊信息struct jincheng_type int pid; int youxian; int daxiao; int state; int message; ;(2)進程信息初始化struct jincheng_type neicun20;int shumu=0,pid_l;int max=0;int number=0; (3)創(chuàng)建進程的算法void create( ) /* 創(chuàng)建一個進程的示例*/ if(shumu=20) printf(n內(nèi)存已滿,請先結(jié)束或換出進程n); else print

3、f(n請輸入新進程的pidn); scanf(%d,&neicunshumu.pid); printf(n請輸入新進程的優(yōu)先級n); scanf(%d,&neicunshumu.youxian); printf(n請輸入新進程的大小n); scanf(%d,&neicunshumu.daxiao); printf(n創(chuàng)建進程時令其狀態(tài)為就緒n); scanf(%d,&neicunshumu+1.daxiao); printf(n創(chuàng)建進程信息n); scanf(%d,&neicunshumu+1.message); neicunshumu.state=1;shumu+; (4)查看運行進程算法v

4、oid run()int max=0;int vpid;for(int i=0;ishumu;i+)if(neicuni.flag=1)&(neicuni.youxian=neicunmax.youxian)max=i;neicunmax.flag=3;printf(n當前運行進程程序名:n%d,neicunmax.pid);printf(n該進程的優(yōu)先級:n%d,neicunmax.youxian);printf(n該進程的運行時間:n%d,neicunmax.daxiao);printf(n該進程的狀態(tài):n%d,neicunmax.flag);printf(n該進程的信息是:n%d,nei

5、cunmax.message);vpid=getch();(5)換出進程算法void huanchu()int i,k,d;for(int i=0;ishumu;i+)if(neicuni.flag=1)&(neicuni.youxian=neicunmax.youxian)max=i;neicunmax.flag=3;if(max=shumu-1)printf(沒有處于等待序列的進程);elsefor (k=max+1; kshumu; k+)neicunk.flag=2;printf(n處于等待序列的進程有:);for (k=max+1; kshumu; k+)printf(n%d,nei

6、cunk.pid); printf(n請選擇要喚醒的進程:);scanf(%d,&k);i=max;while(neicuni.pid!=k)i+;neicuni.flag=1; printf(n%d進程已被喚醒,k);d=getche(); (6)殺死進程算法void kill()/* 殺死某個進程*/int i=0,k,b;printf(n請輸入要殺死的進程:);scanf(%d,&k);while(neicuni.pid!=k)i+;neicuni.daxiao=0;neicuni.pid=0;neicuni.youxian=0;neicuni.flag=0; if(i=(shumu-1

7、) shumu-;elsefor(int j=i+1;j0&tpid1super)(ready-super) /*優(yōu)先級最大者,插入隊首*/ p-link=ready; ready=p; else /* 進程比較優(yōu)先級,插入適當?shù)奈恢弥?/ first=ready; second=first-link; while(second!=NULL) if(p-super)(second-super) /*若插入進程比當前進程優(yōu)先數(shù)大,*/ /*插入到當前進程前面*/ p-link=second; first-link=p; second=NULL; insert=1; else /* 插入進程優(yōu)先數(shù)

8、最低,則插入到隊尾*/ first=first-link; second=second-link; if(insert=0) first-link=p; 4建立進程控制塊,進程撤銷函數(shù),進程就緒函數(shù)disp(PCB * pr) /*建立進程顯示函數(shù),用于顯示當前進程*/ check() /* 建立進程查看函數(shù) */destroy() /*建立進程撤消函數(shù)(進程運行結(jié)束,撤消進程)*/running() /* 建立進程就緒函數(shù)(進程運行時間到,置就緒狀態(tài)*/5、 程序測試過程(截圖)輸入總共要輸入的進程數(shù):輸入進程1的信息:輸入進程2的信息第一個時間片:將優(yōu)先級最高的3投入運行,其他處于等待狀態(tài)

9、:第二個時間片:將3的優(yōu)先級減一,將優(yōu)先級第二的2進程投入運行其他處于等待狀態(tài):第三個時間片:將進程2的優(yōu)先級減一,將優(yōu)先級第一的進程3投入運行,其他處于等待狀態(tài):第四個時間片:將進程3的優(yōu)先級減一,將隊列首元進程1投入運行,其他處于等待狀態(tài):第五個時間片:將隊列首元進程2投入運行,進程3處于等待狀態(tài):第六個時間片:將進程3投入運行,此時無等待進程:完成,安任意鍵退出:實驗三 存儲管理1、 實驗目的:設(shè)計一個虛擬存儲區(qū)和內(nèi)存工作區(qū) , 并使用下述算法計算訪問命中率。(1) 先進先出的算法 (FIFO)(2 )最近最少使用算法 (LRU)(3) 最佳淘汰算法 (OPT)(4) 最少訪問頁面算法

10、(LFU)(5 )最近最不經(jīng)常使用算法 (NUR) (6)時鐘算法(CLOCK)命中率 =(1 一頁面失效次數(shù) )/ 頁地址流長度二、需求分析 程序設(shè)計本實驗的程序設(shè)計基本上按照實驗內(nèi)容進行。即首先用Srand()和rand()函數(shù)定義和產(chǎn)生指令序列,然后將指令序列變換成相應(yīng)的頁地址流,并針對不同的算法計算出相應(yīng)的命中率。相關(guān)定義如下:1. 數(shù)據(jù)結(jié)構(gòu)(1) 頁面類型typedef struct int pn,pfn,counter,time;pl_type;其中 pn 為頁號 ,pfn 為面號 ,counter 為一個周期內(nèi)訪問該頁面次數(shù) ,time 為訪問時間。(2) 頁面控制結(jié)構(gòu)struc

11、t pfc_struct int pn,pfn; struct pfc_struct *next;typedef struct pfc_struct pfc_type; pfc_type pfctotal_vp,*freepf_head,*busypf_head,*busypf_tail; 其中 pfctotal_vp 定義用戶進程虛頁控制結(jié)構(gòu) ,*freepf_head 為空頁面頭的指針 ,*busypf_head 為忙頁面頭的指針 ,*busypf_tail 為忙頁面尾的指針。2. 函數(shù)定義(1) void initializd(): 初始化函數(shù) , 給每個相關(guān)的頁面賦值。 (2) voi

12、d FIFO(): 計算使用 FIFO 算法時的命中率。(3) void LRU(): 計算使用 LRU 算法時的命中率。 (4) void OPT(): 計算使用 OPT 算法時的命中率。 (5) void LFU(): 計算使用 LFU 算法時的命中率。 (6) void NUR(): 計算使用 NUR 算法時的命中率。3. 變量定義(1) int atatal_instruction: 指令流數(shù)據(jù)組。(2) int pagetotal_instruction: 每條指令所屬頁號。(3) int offsettotal_instruction: 每頁裝入 10 條指令后取模運算頁號偏移值。 (4) int total_pf : 用戶進程的內(nèi)存頁面數(shù)。(5) int diseffect : 頁面失效次數(shù)。三、實驗環(huán)境Windows操作系統(tǒng)、VC+6.0C語言(C-free5.0)4、 詳細設(shè)計程序流程圖:模塊劃分:int initialize(int); int FIFO(int);int LRU(int); int LFU(int);int N

溫馨提示

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

評論

0/150

提交評論