中南大學(xué)操作系統(tǒng)試驗_第1頁
中南大學(xué)操作系統(tǒng)試驗_第2頁
中南大學(xué)操作系統(tǒng)試驗_第3頁
中南大學(xué)操作系統(tǒng)試驗_第4頁
中南大學(xué)操作系統(tǒng)試驗_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機(jī)操作系統(tǒng)實驗設(shè)計設(shè)計目的1、增強(qiáng)學(xué)生對計算機(jī)操作系統(tǒng)基本原理、基本理論、基本算法的理解2、提高和培養(yǎng)學(xué)生的動手能力設(shè)計要求1、每人至少選作 1 題,多做不限。2、每人單獨完成,可以討論,但每人的設(shè)計內(nèi)容不得完全相同,抄襲或有2 人/多人設(shè)計完全一樣者,不能通過。3、設(shè)計完成后, 應(yīng)上交課程設(shè)計文檔, 文檔格式應(yīng)是學(xué)校課程設(shè)計的標(biāo)準(zhǔn)格式, 所有學(xué)生的封面大小、格式也必須一樣4、同時上交設(shè)計的軟盤 (或以班刻錄光盤 )設(shè)計題目設(shè)計類在 i386 下寫一個程序, 從實地址模式進(jìn)入保護(hù)虛地址模式, 進(jìn)而啟動分頁機(jī) 制平臺:語言:匯編、 CDOS 下中斷程序設(shè)計設(shè)計熱鍵、中斷接管程序等平臺: DO

2、S語言:ASM、Turbo C、Pascal等DOS 下的菜單、圖形界面程序設(shè)計同1DOS、下的I/O設(shè)備處理程序,如打印機(jī)驅(qū)動程序、字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備、 USB 設(shè)備驅(qū)動程序平臺: DOS語言: ASM TC多進(jìn)程處理程序 ,進(jìn)程創(chuàng)建、通信 (管道、信號量、共享內(nèi)存、消息隊列等、 mmap)、互斥平臺: Windows、Linux語言:同上多線程程序 線程創(chuàng)建、同步、互斥平臺: Windows、Linux語言: VC LINUX-GCC JAVAUSB 設(shè)備)USB 設(shè)備)Windows 下設(shè)備驅(qū)動程序設(shè)計(塊設(shè)備、字符設(shè)備、網(wǎng)絡(luò)設(shè)備、Linux 下設(shè)備驅(qū)動程序設(shè)計(塊設(shè)備、字符設(shè)備

3、、網(wǎng)絡(luò)設(shè)備、 Linux 調(diào)度實驗與參數(shù)調(diào)整 如改變時間片、優(yōu)先級等Linux 操作系統(tǒng)內(nèi)存管理機(jī)制實驗Linux 文件管理實驗,并增加一個系統(tǒng)調(diào)用Linux 系統(tǒng)調(diào)用過程實驗,并增加一個系統(tǒng)調(diào)用 如跟綜一個系統(tǒng)調(diào)用算法模擬類調(diào)度算法的模擬 模擬各種調(diào)度算法,并進(jìn)行調(diào)度性能分析 銀行家算法模擬內(nèi)存管理算法模擬頁面置換算法模擬 模擬分段、分頁情況下的地址變換 邏輯地址 -線性地址 -物理地址進(jìn)程調(diào)度程序把處 理機(jī)分配給進(jìn)程運行進(jìn)程因某事件(如等待(3)完成)變成阻塞狀態(tài)I/O(1)(2)時間片已用完就緒(4)阻塞實驗一、進(jìn)程調(diào)度試驗?zāi)康囊笥酶呒壵Z言編寫和調(diào)試一個進(jìn)程調(diào)度程序,以加深對進(jìn)程的概念

4、及進(jìn)程調(diào)度算法的 理解.準(zhǔn)備知識一、基本概念1、進(jìn)程的概念;2、進(jìn)程的狀態(tài)和進(jìn)程控制塊;3、進(jìn)程調(diào)度算法;二、進(jìn)程調(diào)度1、進(jìn)程的狀態(tài)因此,系統(tǒng)可以通過進(jìn)程的 PCB(即把處理機(jī)分配給優(yōu)先數(shù)最高的進(jìn)PCB)表示。進(jìn)程控制塊可以包CPU時間、進(jìn)程狀態(tài)等某事件被解除(I/O完成)2、進(jìn)程的結(jié)構(gòu) PCB進(jìn)程都是由一系列操作(動作)所組成,通過這些操作來完成其任務(wù)。因此,不同的進(jìn) 程,其內(nèi)部操作也不相同。在操作系統(tǒng)中,描述一個進(jìn)程除了需要程序和私有數(shù)據(jù)之外, 最主要的是需要一個與動態(tài)過程相聯(lián)系的數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)用來描述進(jìn)程的外部特性(名字、狀態(tài)等)以及與其它進(jìn)程的聯(lián)系(通信關(guān)系)等信息,該數(shù)據(jù)結(jié)構(gòu)稱

5、為進(jìn)程控制塊 (PCB,Process Control Block)。進(jìn)程控制塊PCB與進(jìn)程一一對應(yīng),PCB中記錄了系統(tǒng)所需的全部信息、用于描述進(jìn) 程情況所需的全部信息和控制進(jìn)程運行所需的全部信息。 來對進(jìn)程進(jìn)行管理。試驗內(nèi)容設(shè)計一個有N個進(jìn)程共行的進(jìn)程調(diào)度程序。進(jìn)程調(diào)度算法:采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法 程)和先來先服務(wù)算法。每個進(jìn)程有一個進(jìn)程控制塊(含如下信息:進(jìn)程名、優(yōu)先數(shù)、至U達(dá)時間、需要運行時間、已用等。進(jìn)程的優(yōu)先數(shù)及需要的運行時間可以事先人為地指定(也可以由隨機(jī)數(shù)產(chǎn)生)。進(jìn)程的到達(dá)時間為進(jìn)程輸入的時間。進(jìn)程的運行時間以時間片為單位進(jìn)行計算。每個進(jìn)程的狀態(tài)可以是就緒 W (Wait

6、)、運行R ( Run )、或完成F ( Finish)三種狀態(tài)之一。就緒進(jìn)程 獲得CPU后都只能運行一個時間片。用已占用CPU時間加1來表示。如果運行一個時間片后,進(jìn)程的已占用CPU時間已達(dá)到所需要的運行時間,則撤消該進(jìn)程,如果運行個時間片后進(jìn)程的已占用 CPU時間還未達(dá)所需要的運行時間,也就是進(jìn)程還需要繼續(xù)運 行,此時應(yīng)將進(jìn)程的優(yōu)先數(shù)減1 (即降低一級),然后把它插入就緒隊列等待 CPU。每進(jìn)以及各個進(jìn)程的 PCB,以便進(jìn)行檢查。行一次調(diào)度程序都打印一次運行進(jìn)程、就緒隊列、 重復(fù)以上過程,直到所要進(jìn)程都完成為止。調(diào)度算法的流程圖如下:進(jìn)程調(diào)度源程序如下:jin gche ndiaodu.c

7、pp#i nclude "stdio.h"#in elude <stdlib.h>#in clude <coni o.h>#defi ne getpch(type) (type*)malloc(sizeof(type)#defi ne NULL 0struct pcb /* 定義進(jìn)程控制塊PCB */char n ame10;char state;int super;int n time;int rtime;struct pcb* link;*ready=NULL,*p; typedef struct pcb PCB;sort() /* 建立對進(jìn)程進(jìn)

8、行優(yōu)先級排列函數(shù) */PCB *first, *second;int insert=0;,插入隊首 */,*/if(ready=NULL)|(p->super)>(ready->super) /* 優(yōu)先級最大者 p->link=ready;ready=p;else /* 進(jìn)程比較優(yōu)先級 ,插入適當(dāng)?shù)奈恢弥?*/first=ready;second=first->link; while(second!=NULL)if(p->super)>(second->super) /* 若插入進(jìn)程比當(dāng)前進(jìn)程優(yōu)先數(shù)大 /* 插入到當(dāng)前進(jìn)程前面 */ p->

9、link=second;first->link=p;second=NULL;insert=1;else /* 插入進(jìn)程優(yōu)先數(shù)最低 ,則插入到隊尾 */first=first->link;second=second->link;if(insert=0) first->link=p;input() /* 建立進(jìn)程控制塊函數(shù) */ int i,num;clrscr(); /* 清屏 */printf("n 請輸入進(jìn)程號 ?"); scanf("%d",&num);for(i=0;i<num;i+)printf("

10、n 進(jìn)程號 No.%d:n",i); p=getpch(PCB);printf("n 輸入進(jìn)程名 :"); scanf("%s",p->name);printf("n 輸入進(jìn)程優(yōu)先數(shù) :"); scanf("%d",&p->super);printf("n 輸入進(jìn)程運行時間 :"); scanf("%d",&p->ntime);printf("n"); p->rtime=0;p->state='

11、;w'p->link=NULL;sort(); /* 調(diào)用 sort 函數(shù) */ int space()int l=0; PCB* pr=ready; while(pr!=NULL)l+; pr=pr->link;return(l);disp(PCB * pr) /* 建立進(jìn)程顯示函數(shù) ,用于顯示當(dāng)前進(jìn)程 */printf("n qname t state t super t ndtime t runtime n"); printf("|%st",pr->name);printf("|%ct",pr->

12、state); printf("|%dt",pr->super); printf("|%dt",pr->ntime);printf("|%dt",pr->rtime);printf("n");check() /* 建立進(jìn)程查看函數(shù) */PCB* pr;printf("n * 當(dāng)前正在運行的進(jìn)程是 :%s",p->name); /* 顯示當(dāng)前運行進(jìn)程 */ disp(p);pr=ready;printf("n * 當(dāng)前就緒隊列狀態(tài)為 :n"); /* 顯

13、示就緒隊列狀態(tài) */ while(pr!=NULL)disp(pr); pr=pr->link;destroy() /* 建立進(jìn)程撤消函數(shù) (進(jìn)程運行結(jié)束 ,撤消進(jìn)程 )*/printf("n 進(jìn)程 %s 已完成 .n",p->name); free(p);running() /* 建立進(jìn)程就緒函數(shù) (進(jìn)程運行時間到 ,置就緒狀態(tài) */ (p->rtime)+;if(p->rtime=p->ntime) destroy(); /* 調(diào)用 destroy 函數(shù) */ else(p->super)-; p->state='w&#

14、39; sort(); /* 調(diào)用 sort 函數(shù) */ main() /* 主函數(shù) */int len,h=0;char ch;input(); len=space();while(len!=0)&&(ready!=NULL)ch=getchar();h+;printf("n The execute number:%d n",h); p=ready;ready=p->link; p->link=NULL;p->state='R' check(); running();printf("n 按任一鍵繼續(xù) "

15、);ch=getchar();printf("nn 進(jìn)程已經(jīng)完成 .n"); ch=getchar(); 實驗二、銀行家算法(一)目的和要求銀行家算法是由 Dijkstra 設(shè)計的最具有代表性的避免死鎖的算法。本實驗要求用高級語言編寫一 個銀行家的模擬算法。通過本實驗可以對預(yù)防死鎖和銀行家算法有更深刻的認(rèn)識。(二)實驗內(nèi)容1、 設(shè)置數(shù)據(jù)結(jié)構(gòu)包括可利用資源向量(Available ),最大需求矩陣(Max),分配矩陣(Allocation ),需求矩陣(Need) 2、 設(shè)計安全性算法設(shè)置工作向量 Work 表示系統(tǒng)可提供進(jìn)程繼續(xù)運行可利用資源數(shù)目, Finish 表示系統(tǒng)是

16、否有足 夠的資源分配給進(jìn)程(三)實驗環(huán)境1、pc2、vc+(四)、程序源代碼:/* 子函數(shù)聲明 */#include<iostream>#include<string>#include<stdio.h>#define False 0#define True 1int Max100100=0;/ 各進(jìn)程所需各類資源的最大需求int Avaliable100=0;/ 系統(tǒng)可用資源char name100=0;/ 資源的名稱int Allocation100100=0;/ 系統(tǒng)已分配資源int Need100100=0;/ 還需要資源int Request100=

17、0;/ 請求資源向量int temp100=0;/ 存放安全序列int Work100=0;/ 存放系統(tǒng)可提供資源int M=100;/ 作業(yè)的最大數(shù)為 100int N=100;/ 資源的最大數(shù)為 100void showdata()/ 顯示資源矩陣int i,j;cout<<" 系統(tǒng)目前可用的資源 Avaliable:"<<endl; for(i=0;i<N;i+) cout<<namei<<" "cout<<endl;for (j=0;j<N;j+)cout<<Av

18、aliablej<<" "/ 輸出分配資源cout<<endl; cout<<" Max Allocation Need"<<endl;cout<<" 進(jìn)程名 " for(j=0;j<3;j+) for(i=0;i<N;i+) cout<<namei<<" " cout<<" " cout<<endl; for(i=0;i<M;i+) cout<<"

19、 "<<i<<" " for(j=0;j<N;j+) cout<<Maxij<<" " cout<<" "for(j=0;j<N;j+) cout<<Allocationij<<" "cout<<" " for(j=0;j<N;j+) cout<<Needij<<" " cout<<endl;int changdata

20、(int i)/ 進(jìn)行資源分配 int j;for (j=0;j<M;j+) Avaliablej=Avaliablej-Requestj; Allocationij=Allocationij+Requestj; Needij=Needij-Requestj; return 1;int safe()安全性算法int i,k=0,m,apply,Finish100=0;int j;int flag=0;Work0=Avaliable0; Work1=Avaliable1; Work2=Avaliable2;for(i=0;i<M;i+) apply=0;for(j=0;j<N;

21、j+)if (Finishi=False&&Needij<=Workj) apply+;if(apply=N) for(m=0;m<N;m+) Workm=Workm+Allocationim;/ 變分配數(shù) Finishi=True;tempk=i;i=-1;k+;flag+; for(i=0;i<M;i+) if(Finishi=False) cout<<" 系統(tǒng)不安全 "<<endl;/ 不成功系統(tǒng)不安全 return -1;cout<<"系統(tǒng)是安全的!"<<endl;

22、如果安全,輸出成功 cout<<" 分配的序列 :"for(i=0;i<M;i+)/ 輸出運行進(jìn)程數(shù)組 cout<<tempi;if(i<M-1) cout<<"->"cout<<endl;return 0;void share()利用銀行家算法對申請資源對進(jìn)行判定char ch;int i=0,j=0;ch='y'cout<<" 請輸入要求分配的資源進(jìn)程號 (0-"<<M-1<<"):"cin&g

23、t;>i;輸入須申請的資源號cout<<" 請輸入進(jìn)程 "<<i<<" 申請的資源 :"<<endl; for(j=0;j<N;j+)cout<<namej<<":"cin>>Requestj;/ 輸入需要申請的資源for (j=0;j<N;j+)if(Requestj>Needij)/ 判斷申請是否大于需求,若大于則出錯 cout<<"進(jìn)程"<<i<<"申請的資

24、源大于它需要的資源"cout<<" 分配不合理,不予分配! "<<endl;ch='n'break;else if(Requestj>Avaliablej)/ 判斷申請是否大于當(dāng)前資源,若大于則 / 出錯cout<<"進(jìn)程"<<i<<"申請的資源大于系統(tǒng)現(xiàn)在可利用的資源”;cout<<" 分配出錯,不予分配 !"<<endl;ch='n'break;if(ch='y') chan

25、gdata(i);/ 根據(jù)進(jìn)程需求量變換資源showdata();根據(jù)進(jìn)程需求量顯示變換后的資源safe();根據(jù)進(jìn)程需求量進(jìn)行銀行家算法判斷void addresources()/ 添加資源int n,flag;cout<<" 請輸入需要添加資源種類的數(shù)量 :"cin>>n;flag=N;N=N+n;for(int i=0;i<n;i+) cout<<" 名稱 :"cin>>nameflag;cout<<" 數(shù)量 :"cin>>Avaliableflag+

26、;showdata();safe();void delresources()/ 刪除資源char ming;int i,flag=1;cout<<" 請輸入需要刪除的資源名稱: "docin>>ming;for(i=0;i<N;i+)if(ming=namei)flag=0;break;if(i=N)cout<<" 該資源名稱不存在,請重新輸入: "while(flag);for(int j=i;j<N-1;j+)namej=namej+1;Avaliablej=Avaliablej+1;N=N-1;sho

27、wdata();safe();void changeresources()/ 修改資源函數(shù)cout<<" 系統(tǒng)目前可用的資源 Avaliable:"<<endl;for(int i=0;i<N;i+) cout<<namei<<":"<<Avaliablei<<endl;cout<<" 輸入系統(tǒng)可用資源 Avaliable:"<<endl; cin>>Avaliable0>>Avaliable1>>

28、Avaliable2; cout<<" 經(jīng)修改后的系統(tǒng)可用資源為 "<<endl;for (int k=0;k<N;k+) cout<<namek<<":"<<Avaliablek<<endl; showdata();safe();void addprocess()/ 添加作業(yè)int flag=M;M=M+1;cout<<" 請輸入該作業(yè)的最打需求量 Max"<<endl; for(int i=0;i<N;i+)cout<

29、<namei<<":"cin>>Maxflagi;Needflagi=Maxflagi-Allocationflagi;showdata();safe();int main()/ 主函數(shù)int i,j,number,choice,m,n,flag;char ming;*"<<endl;cout<<"* 資源管理系統(tǒng)的設(shè)計與實現(xiàn) cout<<" 請首先輸入系統(tǒng)可供資源種類的數(shù)量 :"cin>>n;N=n;for(i=0;i<n;i+)cout<&l

30、t;" 資源 "<<i+1<<" 的名稱 :" cin>>ming;namei=ming;cout<<" 資源的數(shù)量 :" cin>>number; Avaliablei=number;cout<<endl;cout<<" 請輸入作業(yè)的數(shù)量 :"cin>>m;M=m;cout<<" 請輸入各進(jìn)程的最大需求量 ("<<m<<"*"<<n

31、<<" 矩陣 )Max:"<<endl; for(i=0;i<m;i+)for(j=0;j<n;j+) cin>>Maxij;doflag=0;cout<<" 請輸入各進(jìn)程已經(jīng)申請的資源量 ("<<m<<"*"<<n<<" 矩陣 )Allocation:"<<endl; for(i=0;i<m;i+)for(j=0;j<n;j+)cin>>Allocationij; if(

32、Allocationij>Maxij)flag=1;Needij=Maxij-Allocationij;if(flag)cout<<" 申請的資源大于最大需求量,請重新輸入 !n"while(flag);showdata();/ 顯示各種資源safe();用銀行家算法判定系統(tǒng)是否安全while(choice)cout<<"*cout<<" 1: 增加資源銀行家算法演示 *"<<endl;"<<endl;cout<<" 2: 刪除資源 "&

33、lt;<endl;cout<<" 3: 修改資源 "<<endl; cout<<" 4: 分配資源 "<<endl; cout<<" 5: 增加作業(yè) "<<endl;cout<<" 0: 離開 "<<endl;cout<<"*"<<endl;cout<<" 請選擇功能號:cin>>choice;switch(choice)case 1:

34、addresources();break;case 2: delresources();break;case 3: changeresources();break;case 4: share();break;case 5: addprocess();break;case 0: choice=0;break;default: cout<<" 請正確選擇功能號 (0-5)!"<<endl;break; return 1;實驗三、頁式地址重定位模擬一、實驗?zāi)康模?、用高級語言編寫和調(diào)試模擬實現(xiàn)頁式地址重定位。2、加深理解頁式地址重定位技術(shù)在多道程序設(shè)計中的

35、作用和意義。二、實驗原理:當(dāng)進(jìn)程在 CPU 上運行時,如指令中涉及邏輯地址時,操作系統(tǒng)自動根據(jù)頁長得到頁號 和頁內(nèi)偏移,把頁內(nèi)偏移拷貝到物理地址寄存器, 再根據(jù)頁號,查頁表,得到該頁在內(nèi) 存中的塊號,把塊號左移頁長的位數(shù),寫到物理地址寄存器。三、實驗內(nèi)容:1、 設(shè)計頁表結(jié)構(gòu)2、 設(shè)計地址重定位算法3、有良好的人機(jī)對話界面四、程序源代碼:#define pagesize 1024#define pagetablelength 64/* 系統(tǒng)頁表 */const int pagetablepagetablelength=0,42,29,15,45,31,44,43,41,28,1,30,12,24

36、,6,32,14,27,13,46,7,33,10,22,40,2,51,11,39,23,49,50,26,16,25,4,47,17,3,48, 52,36,58,35,57,34,21,63, 5,37,18,8,62,56,20,54, 60,19,38,9,61,55,59,53;#include<iostream.h>#include<iomanip.h>void main()int logicaladdress=0;int pagenum=0;int w=0;cout<<" 系統(tǒng)頁號對應(yīng)塊號情況(頁號 >塊號): n"

37、for(int i=0;i<64;i+) cout<<setw(2)<<i<<"->"<<setw(2)<<pagetablei<<""if(i%8=7) cout<<endl; cout<<endl<<" 請輸入邏輯地址(十進(jìn)制) : n" cin>>logicaladdress;/求頁號/求頁內(nèi)偏移地址 /判斷是否躍界pagenum=logicaladdress/pagesize;w=logicala

38、ddress%pagesize; if(pagenum>pagetablelength)cout<<" 本次訪問的地址已超出進(jìn)程的地址空間,系統(tǒng)將產(chǎn)生越界中斷! n" return;cout<<" 對應(yīng)的物理地址為(十進(jìn)制) : n"<<pagetablepagenum*pagesize+w<<endl; 二、程序調(diào)試:調(diào)試數(shù)據(jù)一:系統(tǒng)頁號對應(yīng)塊號情況(頁號>塊號):0-> 01->422->293->154->455->316->447->438

39、->419->2810-> 111->3012->1213->2414-> 615->3216->1417->2718->1319->4620-> 721->3322->1023->2224->4025-> 226->5127->1128->3929->2330->4931->5032->2633->1634->2535-> 436->4737->1738-> 339->4840->5241->

40、;3642->5843->3544->5745->3446->2147->6348-> 549->3750->1851-> 852->6253->5654->2055->5456->6057->1958->3859-> 960->6161->5562->5963->53請輸入邏輯地址(十進(jìn)制)2500 對應(yīng)的物理地址為(十進(jìn)制) 30148Press any key to continue調(diào)試數(shù)據(jù)二:系統(tǒng)頁號對應(yīng)塊號情況(頁號>塊號):0-> 01-&

41、gt;422->293->154->455->316->447->438->419->2810-> 111->3012->1213->2414-> 615->3216->1417->2718->1319->4620-> 721->3322->1023->2224->4025-> 226->5127->1128->3929->2330->4931->5032->2633->1634->2535->

42、; 436->4737->1738-> 339->4840->5241->3642->5843->3544->5745->3446->2147->6348-> 549->3750->1851-> 852->6253->5654->2055->5463->5356->60 57->19 58->38 59-> 9 60->61 61->55 62->59請輸入邏輯地址(十進(jìn)制) :765497 本次訪問的地址已超出進(jìn)程的地址空間,

43、系統(tǒng)將產(chǎn)生越界中斷!Press any key to continue/用于輸入作業(yè)號/輸入的作業(yè)個數(shù)/系統(tǒng)分配的存儲區(qū)塊數(shù)/缺頁中斷次數(shù)/棧, LRU 算法的主要數(shù)據(jù)結(jié)構(gòu)/記錄作業(yè)走向0 結(jié)束): n"實驗四、 LRU 算法模擬一、實驗?zāi)康暮鸵?用高級語言模擬頁面置換算法 LRU ,加深對 LRU 算法的認(rèn)識。二、實驗原理其基本原理為: 如果某一個頁面被訪問了,它很可能還要被訪問; 相反,如果它長時間 不被訪問,再最近未來是不大可能被訪問的。三、實驗環(huán)境1、 pc2、 vc+四、程序源代碼: #define MAXSIZE 20 #include <iostream.h&g

44、t; void main()int input=0;int worknum=0;int storesize=0;int interrupt=0;int stackMAXSIZE;int workstepMAXSIZE;/* 初始化 */for(int i=0;i<MAXSIZE;i+)stacki=0;workstepi=0;cout<<" 請輸入存儲區(qū)塊數(shù): "cin>>storesize;cout<<" 請輸入作業(yè)的頁面走向(輸入for(int j=0;j<MAXSIZE;j+)cout<<"

45、; 頁面號 "<<j+1; cin>>input; workstepj=input;if(input=0)cout<<" 輸入結(jié)束! n" break; worknum+; if(workstep0=0)cout<<" 未輸入任何作業(yè),系統(tǒng)將退出! n" return;cout<<" 置換情況如下: n"for(int k=0;k<worknum;k+)/* 在棧中找相等的頁號或空位置 */for(int l=0;l<storesize;l+)/* 是否

46、有相等的頁號 */ if(stackl=workstepk)cout<<" 內(nèi)存中有 "<<workstepk<<" 號頁面,無須中斷! n" goto step1;/* 找棧中是否有空位置 */ if(stackl=0) stackl=workstepk; cout<<" 發(fā)生中斷,但內(nèi)存中有空閑區(qū), "<<workstepk<<" 號頁面直接調(diào) 入! n"interrupt+;goto step1;/* 上述情況都不成立則調(diào)出棧頂,將調(diào)入頁

47、面插入棧頂*/cout<<" 發(fā)生中斷,將 "<<stack0<<" 號頁面調(diào)出, "<<workstepk<<" 號裝入! n" interrupt+;/* 新掉入的頁面放棧頂 */step1: for(int m=0;m<storesize;m+) stackm=stackm+1; stackstoresize-1=workstepk;cout<<" 作 業(yè) "<<worknum<<" 個 , &qu

48、ot;<<" 中 斷 "<<interrupt<<" 次 , "<<" 缺 頁 率 : "<<float(interrupt)/float(worknum)*100<<"%n"、程序調(diào)試: 調(diào)試一: 請輸入存儲區(qū)塊數(shù): 3 請輸入作業(yè)走向(輸入 0 結(jié)束): 頁面號 1:4 頁面號 2:3 頁面號 3:2 頁面號 4:1 頁面號 5:4 頁面號 6:3 頁面號 7:5 頁面號 8: 4 頁面號 9:3 頁面號 10: 2 頁面號 11: 1 頁

49、面號 12: 5 頁面號 13: 0輸入結(jié)束! 置換情況如下:4 號頁面直接調(diào)入!3 號頁面直接調(diào)入!2 號頁面直接調(diào)入!1 號裝入!4 號裝入!3 號裝入!5 號裝入!發(fā)生中斷,但內(nèi)存中有空閑區(qū), 發(fā)生中斷,但內(nèi)存中有空閑區(qū), 發(fā)生中斷,但內(nèi)存中有空閑區(qū),發(fā)生中斷,將 發(fā)生中斷,將 發(fā)生中斷,將 發(fā)生中斷,將4 號頁面調(diào)出,3 號頁面調(diào)出,2 號頁面調(diào)出,1 號頁面調(diào)出, 內(nèi)存中有 4 號頁面,無須中斷! 內(nèi)存中有 3 號頁面,無須中斷! 發(fā)生中斷,將 5 號頁面調(diào)出, 2 號裝入! 發(fā)生中斷,將 4 號頁面調(diào)出, 1 號裝入! 發(fā)生中斷,將 3 號頁面調(diào)出, 5 號裝入! 作業(yè) 12 個,

50、中斷 10 次,缺頁率: 83.3333%Press any key to continue調(diào)試二:請輸入存儲區(qū)塊數(shù): 4 請輸入作業(yè)走向(輸入 0 結(jié)束): 頁面號 1:4頁面號 2:3頁面號 3:2頁面號 4:1 頁面號 5:4 頁面號 6:3 頁面號 7:5 頁面號 8: 4 頁面號 9:3 頁面號 10: 2 頁面號 11: 1 頁面號 12: 5 頁面號 13: 0 輸入結(jié)束! 置換情況如下:4 號頁面直接調(diào)入!3 號頁面直接調(diào)入!2 號頁面直接調(diào)入!1 號頁面直接調(diào)入!發(fā)生中斷,但內(nèi)存中有空閑區(qū), 發(fā)生中斷,但內(nèi)存中有空閑區(qū), 發(fā)生中斷,但內(nèi)存中有空閑區(qū), 發(fā)生中斷,但內(nèi)存中有空閑

51、區(qū), 內(nèi)存中有 4 號頁面,無須中斷! 內(nèi)存中有 3 號頁面,無須中斷! 發(fā)生中斷,將 2 號頁面調(diào)出, 5 號裝入! 內(nèi)存中有 4 號頁面,無須中斷! 內(nèi)存中有 3 號頁面,無須中斷! 發(fā)生中斷,將 3 號頁面調(diào)出, 2 號裝入! 發(fā)生中斷,將 5 號頁面調(diào)出, 1 號裝入! 發(fā)生中斷,將 4 號頁面調(diào)出, 5 號裝入! 作業(yè) 12 個,中斷 8 次,缺頁率: 66.6667%Press any key to continue實驗五、 FIFO 算法模擬一、實驗?zāi)康?一個作業(yè)有多少個進(jìn)程, 處理機(jī)只分配固定的主存頁面供該作業(yè)執(zhí)行。 往往頁面數(shù)小于 進(jìn)程數(shù), 當(dāng)請求調(diào)頁程序調(diào)進(jìn)一個頁面時, 可

52、能碰到主存中并沒有空閑塊的情況, 此時 就產(chǎn)生了在主存中淘汰哪個頁面的情況。本實驗要求模擬 FIFO 算法 /二、實驗原理 此算法的實質(zhì)是, 總是選擇在主存中居留最長時間的頁面淘汰。 理由是: 最早調(diào)入 主存的頁,其不再被訪問的可能性最大。三、實驗環(huán)境1、 pc2、 vc+四、程序源代碼:#define MAXSIZE 20#include <iostream.h>void main()int label=0;int input=0;int worknum=0;int storesize=0;int interrupt=0;int quenceMAXSIZE;int workste

53、pMAXSIZE;/* 初始化 */for(int i=0;i<MAXSIZE;i+)quencei=0; workstepi=0;cout<<" 請輸入存儲區(qū)塊數(shù): cin>>storesize;cout<<" 請輸入作業(yè)走向(輸入 for(int j=0;j<MAXSIZE;j+) cout<<" 頁面號: "<<j+1; cin>>input; workstepj=input;/標(biāo)記此頁是否已經(jīng)裝入內(nèi)存/用于輸入作業(yè)號/記錄作業(yè)個數(shù)/系統(tǒng)分配的存儲塊數(shù)/中斷次數(shù)/隊列, FIFO 算法的主要數(shù)據(jù)結(jié)構(gòu)/用于記錄作業(yè)走向0 結(jié)束): n"if(input=0)cout<<" 輸入結(jié)束! n" break;worknum+;if(workstep0=0)cout<<" 未輸入任何作業(yè),系統(tǒng)將退出! n"return;cout<<" 置換情況如下: n"for(int k=0;k<worknum

溫馨提示

  • 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

提交評論