版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)設(shè)計(jì)設(shè)計(jì)目的1、增強(qiáng)學(xué)生對(duì)計(jì)算機(jī)操作系統(tǒng)基本原理、基本理論、基本算法的理解2、提高和培養(yǎng)學(xué)生的動(dòng)手能力設(shè)計(jì)要求1、每人至少選作 1 題,多做不限。2、每人單獨(dú)完成,可以討論,但每人的設(shè)計(jì)內(nèi)容不得完全相同,抄襲或有2 人/多人設(shè)計(jì)完全一樣者,不能通過(guò)。3、設(shè)計(jì)完成后, 應(yīng)上交課程設(shè)計(jì)文檔, 文檔格式應(yīng)是學(xué)校課程設(shè)計(jì)的標(biāo)準(zhǔn)格式, 所有學(xué)生的封面大小、格式也必須一樣4、同時(shí)上交設(shè)計(jì)的軟盤(pán) (或以班刻錄光盤(pán) )設(shè)計(jì)題目設(shè)計(jì)類在 i386 下寫(xiě)一個(gè)程序, 從實(shí)地址模式進(jìn)入保護(hù)虛地址模式, 進(jìn)而啟動(dòng)分頁(yè)機(jī) 制平臺(tái):語(yǔ)言:匯編、 CDOS 下中斷程序設(shè)計(jì)設(shè)計(jì)熱鍵、中斷接管程序等平臺(tái): DO
2、S語(yǔ)言:ASM、Turbo C、Pascal等DOS 下的菜單、圖形界面程序設(shè)計(jì)同1DOS、下的I/O設(shè)備處理程序,如打印機(jī)驅(qū)動(dòng)程序、字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備、 USB 設(shè)備驅(qū)動(dòng)程序平臺(tái): DOS語(yǔ)言: ASM TC多進(jìn)程處理程序 ,進(jìn)程創(chuàng)建、通信 (管道、信號(hào)量、共享內(nèi)存、消息隊(duì)列等、 mmap)、互斥平臺(tái): Windows、Linux語(yǔ)言:同上多線程程序 線程創(chuàng)建、同步、互斥平臺(tái): Windows、Linux語(yǔ)言: VC LINUX-GCC JAVAUSB 設(shè)備)USB 設(shè)備)Windows 下設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)(塊設(shè)備、字符設(shè)備、網(wǎng)絡(luò)設(shè)備、Linux 下設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)(塊設(shè)備、字符設(shè)備
3、、網(wǎng)絡(luò)設(shè)備、 Linux 調(diào)度實(shí)驗(yàn)與參數(shù)調(diào)整 如改變時(shí)間片、優(yōu)先級(jí)等Linux 操作系統(tǒng)內(nèi)存管理機(jī)制實(shí)驗(yàn)Linux 文件管理實(shí)驗(yàn),并增加一個(gè)系統(tǒng)調(diào)用Linux 系統(tǒng)調(diào)用過(guò)程實(shí)驗(yàn),并增加一個(gè)系統(tǒng)調(diào)用 如跟綜一個(gè)系統(tǒng)調(diào)用算法模擬類調(diào)度算法的模擬 模擬各種調(diào)度算法,并進(jìn)行調(diào)度性能分析 銀行家算法模擬內(nèi)存管理算法模擬頁(yè)面置換算法模擬 模擬分段、分頁(yè)情況下的地址變換 邏輯地址 -線性地址 -物理地址進(jìn)程調(diào)度程序把處 理機(jī)分配給進(jìn)程運(yùn)行進(jìn)程因某事件(如等待(3)完成)變成阻塞狀態(tài)I/O(1)(2)時(shí)間片已用完就緒(4)阻塞實(shí)驗(yàn)一、進(jìn)程調(diào)度試驗(yàn)?zāi)康囊笥酶呒?jí)語(yǔ)言編寫(xiě)和調(diào)試一個(gè)進(jìn)程調(diào)度程序,以加深對(duì)進(jìn)程的概念
4、及進(jìn)程調(diào)度算法的 理解.準(zhǔn)備知識(shí)一、基本概念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)可以通過(guò)進(jìn)程的 PCB(即把處理機(jī)分配給優(yōu)先數(shù)最高的進(jìn)PCB)表示。進(jìn)程控制塊可以包CPU時(shí)間、進(jìn)程狀態(tài)等某事件被解除(I/O完成)2、進(jìn)程的結(jié)構(gòu) PCB進(jìn)程都是由一系列操作(動(dòng)作)所組成,通過(guò)這些操作來(lái)完成其任務(wù)。因此,不同的進(jìn) 程,其內(nèi)部操作也不相同。在操作系統(tǒng)中,描述一個(gè)進(jìn)程除了需要程序和私有數(shù)據(jù)之外, 最主要的是需要一個(gè)與動(dòng)態(tài)過(guò)程相聯(lián)系的數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)用來(lái)描述進(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)程一一對(duì)應(yīng),PCB中記錄了系統(tǒng)所需的全部信息、用于描述進(jìn) 程情況所需的全部信息和控制進(jìn)程運(yùn)行所需的全部信息。 來(lái)對(duì)進(jìn)程進(jìn)行管理。試驗(yàn)內(nèi)容設(shè)計(jì)一個(gè)有N個(gè)進(jìn)程共行的進(jìn)程調(diào)度程序。進(jìn)程調(diào)度算法:采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法 程)和先來(lái)先服務(wù)算法。每個(gè)進(jìn)程有一個(gè)進(jìn)程控制塊(含如下信息:進(jìn)程名、優(yōu)先數(shù)、至U達(dá)時(shí)間、需要運(yùn)行時(shí)間、已用等。進(jìn)程的優(yōu)先數(shù)及需要的運(yùn)行時(shí)間可以事先人為地指定(也可以由隨機(jī)數(shù)產(chǎn)生)。進(jìn)程的到達(dá)時(shí)間為進(jìn)程輸入的時(shí)間。進(jìn)程的運(yùn)行時(shí)間以時(shí)間片為單位進(jìn)行計(jì)算。每個(gè)進(jìn)程的狀態(tài)可以是就緒 W (Wait
6、)、運(yùn)行R ( Run )、或完成F ( Finish)三種狀態(tài)之一。就緒進(jìn)程 獲得CPU后都只能運(yùn)行一個(gè)時(shí)間片。用已占用CPU時(shí)間加1來(lái)表示。如果運(yùn)行一個(gè)時(shí)間片后,進(jìn)程的已占用CPU時(shí)間已達(dá)到所需要的運(yùn)行時(shí)間,則撤消該進(jìn)程,如果運(yùn)行個(gè)時(shí)間片后進(jìn)程的已占用 CPU時(shí)間還未達(dá)所需要的運(yùn)行時(shí)間,也就是進(jìn)程還需要繼續(xù)運(yùn) 行,此時(shí)應(yīng)將進(jìn)程的優(yōu)先數(shù)減1 (即降低一級(jí)),然后把它插入就緒隊(duì)列等待 CPU。每進(jìn)以及各個(gè)進(jìn)程的 PCB,以便進(jìn)行檢查。行一次調(diào)度程序都打印一次運(yùn)行進(jìn)程、就緒隊(duì)列、 重復(fù)以上過(guò)程,直到所要進(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() /* 建立對(duì)進(jìn)程進(jìn)
8、行優(yōu)先級(jí)排列函數(shù) */PCB *first, *second;int insert=0;,插入隊(duì)首 */,*/if(ready=NULL)|(p->super)>(ready->super) /* 優(yōu)先級(jí)最大者 p->link=ready;ready=p;else /* 進(jìn)程比較優(yōu)先級(jí) ,插入適當(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ù)最低 ,則插入到隊(duì)尾 */first=first->link;second=second->link;if(insert=0) first->link=p;input() /* 建立進(jìn)程控制塊函數(shù) */ int i,num;clrscr(); /* 清屏 */printf("n 請(qǐng)輸入進(jìn)程號(hào) ?"); scanf("%d",&num);for(i=0;i<num;i+)printf("
10、n 進(jìn)程號(hào) 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)程運(yùn)行時(shí)間 :"); 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)前正在運(yùn)行的進(jìn)程是 :%s",p->name); /* 顯示當(dāng)前運(yùn)行進(jìn)程 */ disp(p);pr=ready;printf("n * 當(dāng)前就緒隊(duì)列狀態(tài)為 :n"); /* 顯
13、示就緒隊(duì)列狀態(tài) */ while(pr!=NULL)disp(pr); pr=pr->link;destroy() /* 建立進(jìn)程撤消函數(shù) (進(jìn)程運(yùn)行結(jié)束 ,撤消進(jìn)程 )*/printf("n 進(jìn)程 %s 已完成 .n",p->name); free(p);running() /* 建立進(jìn)程就緒函數(shù) (進(jìn)程運(yùn)行時(shí)間到 ,置就緒狀態(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(); 實(shí)驗(yàn)二、銀行家算法(一)目的和要求銀行家算法是由 Dijkstra 設(shè)計(jì)的最具有代表性的避免死鎖的算法。本實(shí)驗(yàn)要求用高級(jí)語(yǔ)言編寫(xiě)一 個(gè)銀行家的模擬算法。通過(guò)本實(shí)驗(yàn)可以對(duì)預(yù)防死鎖和銀行家算法有更深刻的認(rèn)識(shí)。(二)實(shí)驗(yàn)內(nèi)容1、 設(shè)置數(shù)據(jù)結(jié)構(gòu)包括可利用資源向量(Available ),最大需求矩陣(Max),分配矩陣(Allocation ),需求矩陣(Need) 2、 設(shè)計(jì)安全性算法設(shè)置工作向量 Work 表示系統(tǒng)可提供進(jìn)程繼續(xù)運(yùn)行可利用資源數(shù)目, Finish 表示系統(tǒng)是
16、否有足 夠的資源分配給進(jìn)程(三)實(shí)驗(yà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;/ 請(qǐng)求資源向量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+)/ 輸出運(yùn)行進(jìn)程數(shù)組 cout<<tempi;if(i<M-1) cout<<"->"cout<<endl;return 0;void share()利用銀行家算法對(duì)申請(qǐng)資源對(duì)進(jìn)行判定char ch;int i=0,j=0;ch='y'cout<<" 請(qǐng)輸入要求分配的資源進(jìn)程號(hào) (0-"<<M-1<<"):"cin&g
23、t;>i;輸入須申請(qǐng)的資源號(hào)cout<<" 請(qǐng)輸入進(jìn)程 "<<i<<" 申請(qǐng)的資源 :"<<endl; for(j=0;j<N;j+)cout<<namej<<":"cin>>Requestj;/ 輸入需要申請(qǐng)的資源for (j=0;j<N;j+)if(Requestj>Needij)/ 判斷申請(qǐng)是否大于需求,若大于則出錯(cuò) cout<<"進(jìn)程"<<i<<"申請(qǐng)的資
24、源大于它需要的資源"cout<<" 分配不合理,不予分配! "<<endl;ch='n'break;else if(Requestj>Avaliablej)/ 判斷申請(qǐng)是否大于當(dāng)前資源,若大于則 / 出錯(cuò)cout<<"進(jìn)程"<<i<<"申請(qǐng)的資源大于系統(tǒng)現(xiàn)在可利用的資源”;cout<<" 分配出錯(cuò),不予分配 !"<<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<<" 請(qǐng)輸入需要添加資源種類的數(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<<" 請(qǐng)輸入需要?jiǎng)h除的資源名稱: "docin>>ming;for(i=0;i<N;i+)if(ming=namei)flag=0;break;if(i=N)cout<<" 該資源名稱不存在,請(qǐng)重新輸入: "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<<" 請(qǐng)輸入該作業(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è)計(jì)與實(shí)現(xiàn) cout<<" 請(qǐng)首先輸入系統(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<<" 請(qǐng)輸入作業(yè)的數(shù)量 :"cin>>m;M=m;cout<<" 請(qǐng)輸入各進(jìn)程的最大需求量 ("<<m<<"*"<<n
31、<<" 矩陣 )Max:"<<endl; for(i=0;i<m;i+)for(j=0;j<n;j+) cin>>Maxij;doflag=0;cout<<" 請(qǐng)輸入各進(jìn)程已經(jīng)申請(qǐ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<<" 申請(qǐng)的資源大于最大需求量,請(qǐng)重新輸入 !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: 離開(kāi) "<<endl;cout<<"*"<<endl;cout<<" 請(qǐng)選擇功能號(hào):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<<" 請(qǐng)正確選擇功能號(hào) (0-5)!"<<endl;break; return 1;實(shí)驗(yàn)三、頁(yè)式地址重定位模擬一、實(shí)驗(yàn)?zāi)康模?、用高級(jí)語(yǔ)言編寫(xiě)和調(diào)試模擬實(shí)現(xiàn)頁(yè)式地址重定位。2、加深理解頁(yè)式地址重定位技術(shù)在多道程序設(shè)計(jì)中的
35、作用和意義。二、實(shí)驗(yàn)原理:當(dāng)進(jìn)程在 CPU 上運(yùn)行時(shí),如指令中涉及邏輯地址時(shí),操作系統(tǒng)自動(dòng)根據(jù)頁(yè)長(zhǎng)得到頁(yè)號(hào) 和頁(yè)內(nèi)偏移,把頁(yè)內(nèi)偏移拷貝到物理地址寄存器, 再根據(jù)頁(yè)號(hào),查頁(yè)表,得到該頁(yè)在內(nèi) 存中的塊號(hào),把塊號(hào)左移頁(yè)長(zhǎng)的位數(shù),寫(xiě)到物理地址寄存器。三、實(shí)驗(yàn)內(nèi)容:1、 設(shè)計(jì)頁(yè)表結(jié)構(gòu)2、 設(shè)計(jì)地址重定位算法3、有良好的人機(jī)對(duì)話界面四、程序源代碼:#define pagesize 1024#define pagetablelength 64/* 系統(tǒng)頁(yè)表 */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è)號(hào)對(duì)應(yīng)塊號(hào)情況(頁(yè)號(hào) >塊號(hào)): n"
37、for(int i=0;i<64;i+) cout<<setw(2)<<i<<"->"<<setw(2)<<pagetablei<<""if(i%8=7) cout<<endl; cout<<endl<<" 請(qǐng)輸入邏輯地址(十進(jìn)制) : n" cin>>logicaladdress;/求頁(yè)號(hào)/求頁(yè)內(nèi)偏移地址 /判斷是否躍界pagenum=logicaladdress/pagesize;w=logicala
38、ddress%pagesize; if(pagenum>pagetablelength)cout<<" 本次訪問(wèn)的地址已超出進(jìn)程的地址空間,系統(tǒng)將產(chǎn)生越界中斷! n" return;cout<<" 對(duì)應(yīng)的物理地址為(十進(jìn)制) : n"<<pagetablepagenum*pagesize+w<<endl; 二、程序調(diào)試:調(diào)試數(shù)據(jù)一:系統(tǒng)頁(yè)號(hào)對(duì)應(yīng)塊號(hào)情況(頁(yè)號(hào)>塊號(hào)):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請(qǐng)輸入邏輯地址(十進(jìn)制)2500 對(duì)應(yīng)的物理地址為(十進(jìn)制) 30148Press any key to continue調(diào)試數(shù)據(jù)二:系統(tǒng)頁(yè)號(hào)對(duì)應(yīng)塊號(hào)情況(頁(yè)號(hào)>塊號(hào)):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請(qǐng)輸入邏輯地址(十進(jìn)制) :765497 本次訪問(wèn)的地址已超出進(jìn)程的地址空間,
43、系統(tǒng)將產(chǎn)生越界中斷!Press any key to continue/用于輸入作業(yè)號(hào)/輸入的作業(yè)個(gè)數(shù)/系統(tǒng)分配的存儲(chǔ)區(qū)塊數(shù)/缺頁(yè)中斷次數(shù)/棧, LRU 算法的主要數(shù)據(jù)結(jié)構(gòu)/記錄作業(yè)走向0 結(jié)束): n"實(shí)驗(yàn)四、 LRU 算法模擬一、實(shí)驗(yàn)?zāi)康暮鸵?用高級(jí)語(yǔ)言模擬頁(yè)面置換算法 LRU ,加深對(duì) LRU 算法的認(rèn)識(shí)。二、實(shí)驗(yàn)原理其基本原理為: 如果某一個(gè)頁(yè)面被訪問(wèn)了,它很可能還要被訪問(wèn); 相反,如果它長(zhǎng)時(shí)間 不被訪問(wèn),再最近未來(lái)是不大可能被訪問(wèn)的。三、實(shí)驗(yà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ǐng)輸入存儲(chǔ)區(qū)塊數(shù): "cin>>storesize;cout<<" 請(qǐng)輸入作業(yè)的頁(yè)面走向(輸入for(int j=0;j<MAXSIZE;j+)cout<<"
45、; 頁(yè)面號(hào) "<<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+)/* 在棧中找相等的頁(yè)號(hào)或空位置 */for(int l=0;l<storesize;l+)/* 是否
46、有相等的頁(yè)號(hào) */ if(stackl=workstepk)cout<<" 內(nèi)存中有 "<<workstepk<<" 號(hào)頁(yè)面,無(wú)須中斷! n" goto step1;/* 找棧中是否有空位置 */ if(stackl=0) stackl=workstepk; cout<<" 發(fā)生中斷,但內(nèi)存中有空閑區(qū), "<<workstepk<<" 號(hào)頁(yè)面直接調(diào) 入! n"interrupt+;goto step1;/* 上述情況都不成立則調(diào)出棧頂,將調(diào)入頁(yè)
47、面插入棧頂*/cout<<" 發(fā)生中斷,將 "<<stack0<<" 號(hào)頁(yè)面調(diào)出, "<<workstepk<<" 號(hào)裝入! n" interrupt+;/* 新掉入的頁(yè)面放棧頂 */step1: for(int m=0;m<storesize;m+) stackm=stackm+1; stackstoresize-1=workstepk;cout<<" 作 業(yè) "<<worknum<<" 個(gè) , &qu
48、ot;<<" 中 斷 "<<interrupt<<" 次 , "<<" 缺 頁(yè) 率 : "<<float(interrupt)/float(worknum)*100<<"%n"、程序調(diào)試: 調(diào)試一: 請(qǐng)輸入存儲(chǔ)區(qū)塊數(shù): 3 請(qǐng)輸入作業(yè)走向(輸入 0 結(jié)束): 頁(yè)面號(hào) 1:4 頁(yè)面號(hào) 2:3 頁(yè)面號(hào) 3:2 頁(yè)面號(hào) 4:1 頁(yè)面號(hào) 5:4 頁(yè)面號(hào) 6:3 頁(yè)面號(hào) 7:5 頁(yè)面號(hào) 8: 4 頁(yè)面號(hào) 9:3 頁(yè)面號(hào) 10: 2 頁(yè)面號(hào) 11: 1 頁(yè)
49、面號(hào) 12: 5 頁(yè)面號(hào) 13: 0輸入結(jié)束! 置換情況如下:4 號(hào)頁(yè)面直接調(diào)入!3 號(hào)頁(yè)面直接調(diào)入!2 號(hào)頁(yè)面直接調(diào)入!1 號(hào)裝入!4 號(hào)裝入!3 號(hào)裝入!5 號(hào)裝入!發(fā)生中斷,但內(nèi)存中有空閑區(qū), 發(fā)生中斷,但內(nèi)存中有空閑區(qū), 發(fā)生中斷,但內(nèi)存中有空閑區(qū),發(fā)生中斷,將 發(fā)生中斷,將 發(fā)生中斷,將 發(fā)生中斷,將4 號(hào)頁(yè)面調(diào)出,3 號(hào)頁(yè)面調(diào)出,2 號(hào)頁(yè)面調(diào)出,1 號(hào)頁(yè)面調(diào)出, 內(nèi)存中有 4 號(hào)頁(yè)面,無(wú)須中斷! 內(nèi)存中有 3 號(hào)頁(yè)面,無(wú)須中斷! 發(fā)生中斷,將 5 號(hào)頁(yè)面調(diào)出, 2 號(hào)裝入! 發(fā)生中斷,將 4 號(hào)頁(yè)面調(diào)出, 1 號(hào)裝入! 發(fā)生中斷,將 3 號(hào)頁(yè)面調(diào)出, 5 號(hào)裝入! 作業(yè) 12 個(gè),
50、中斷 10 次,缺頁(yè)率: 83.3333%Press any key to continue調(diào)試二:請(qǐng)輸入存儲(chǔ)區(qū)塊數(shù): 4 請(qǐng)輸入作業(yè)走向(輸入 0 結(jié)束): 頁(yè)面號(hào) 1:4頁(yè)面號(hào) 2:3頁(yè)面號(hào) 3:2頁(yè)面號(hào) 4:1 頁(yè)面號(hào) 5:4 頁(yè)面號(hào) 6:3 頁(yè)面號(hào) 7:5 頁(yè)面號(hào) 8: 4 頁(yè)面號(hào) 9:3 頁(yè)面號(hào) 10: 2 頁(yè)面號(hào) 11: 1 頁(yè)面號(hào) 12: 5 頁(yè)面號(hào) 13: 0 輸入結(jié)束! 置換情況如下:4 號(hào)頁(yè)面直接調(diào)入!3 號(hào)頁(yè)面直接調(diào)入!2 號(hào)頁(yè)面直接調(diào)入!1 號(hào)頁(yè)面直接調(diào)入!發(fā)生中斷,但內(nèi)存中有空閑區(qū), 發(fā)生中斷,但內(nèi)存中有空閑區(qū), 發(fā)生中斷,但內(nèi)存中有空閑區(qū), 發(fā)生中斷,但內(nèi)存中有空閑
51、區(qū), 內(nèi)存中有 4 號(hào)頁(yè)面,無(wú)須中斷! 內(nèi)存中有 3 號(hào)頁(yè)面,無(wú)須中斷! 發(fā)生中斷,將 2 號(hào)頁(yè)面調(diào)出, 5 號(hào)裝入! 內(nèi)存中有 4 號(hào)頁(yè)面,無(wú)須中斷! 內(nèi)存中有 3 號(hào)頁(yè)面,無(wú)須中斷! 發(fā)生中斷,將 3 號(hào)頁(yè)面調(diào)出, 2 號(hào)裝入! 發(fā)生中斷,將 5 號(hào)頁(yè)面調(diào)出, 1 號(hào)裝入! 發(fā)生中斷,將 4 號(hào)頁(yè)面調(diào)出, 5 號(hào)裝入! 作業(yè) 12 個(gè),中斷 8 次,缺頁(yè)率: 66.6667%Press any key to continue實(shí)驗(yàn)五、 FIFO 算法模擬一、實(shí)驗(yàn)?zāi)康?一個(gè)作業(yè)有多少個(gè)進(jìn)程, 處理機(jī)只分配固定的主存頁(yè)面供該作業(yè)執(zhí)行。 往往頁(yè)面數(shù)小于 進(jìn)程數(shù), 當(dāng)請(qǐng)求調(diào)頁(yè)程序調(diào)進(jìn)一個(gè)頁(yè)面時(shí), 可
52、能碰到主存中并沒(méi)有空閑塊的情況, 此時(shí) 就產(chǎn)生了在主存中淘汰哪個(gè)頁(yè)面的情況。本實(shí)驗(yàn)要求模擬 FIFO 算法 /二、實(shí)驗(yàn)原理 此算法的實(shí)質(zhì)是, 總是選擇在主存中居留最長(zhǎng)時(shí)間的頁(yè)面淘汰。 理由是: 最早調(diào)入 主存的頁(yè),其不再被訪問(wèn)的可能性最大。三、實(shí)驗(yàn)環(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ǐng)輸入存儲(chǔ)區(qū)塊數(shù): cin>>storesize;cout<<" 請(qǐng)輸入作業(yè)走向(輸入 for(int j=0;j<MAXSIZE;j+) cout<<" 頁(yè)面號(hào): "<<j+1; cin>>input; workstepj=input;/標(biāo)記此頁(yè)是否已經(jīng)裝入內(nèi)存/用于輸入作業(yè)號(hào)/記錄作業(yè)個(gè)數(shù)/系統(tǒng)分配的存儲(chǔ)塊數(shù)/中斷次數(shù)/隊(duì)列, 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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025石材長(zhǎng)期采購(gòu)合同
- 2025年度國(guó)防科技產(chǎn)業(yè)核心秘密保護(hù)合同3篇
- 2025年度遠(yuǎn)程教育兼職教師聘任合同3篇
- 2025年度農(nóng)村房屋買賣合同協(xié)議書(shū)(含農(nóng)村電商合作)2篇
- 2025年度公司公務(wù)車借用及維修保養(yǎng)協(xié)議范本3篇
- 二零二五年度企業(yè)核心高管聘用合同:企業(yè)戰(zhàn)略轉(zhuǎn)型升級(jí)合作協(xié)議3篇
- 2025農(nóng)村宅基地置換項(xiàng)目宅基地置換補(bǔ)償評(píng)估協(xié)議
- 2025年度婚姻財(cái)產(chǎn)保全與風(fēng)險(xiǎn)評(píng)估協(xié)議3篇
- 二零二五年度老舊小區(qū)電梯加裝工程合同3篇
- 二零二五年度特色農(nóng)業(yè)機(jī)械租賃合作框架協(xié)議2篇
- 紅色經(jīng)典影片與近現(xiàn)代中國(guó)發(fā)展學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 山東省東營(yíng)市(2024年-2025年小學(xué)四年級(jí)語(yǔ)文)統(tǒng)編版期末考試(上學(xué)期)試卷及答案
- 期末+(試題)+-2024-2025學(xué)年重大版英語(yǔ)五年級(jí)上冊(cè)
- DL∕ Z 860.2-2006 變電站通信網(wǎng)絡(luò)和系統(tǒng) 第2部分:術(shù)語(yǔ)
- 斷親協(xié)議書(shū)模板
- 技能成才強(qiáng)國(guó)有我課件模板
- “雙減”背景下小學(xué)數(shù)學(xué)“教、學(xué)、評(píng)”一體化的思考與實(shí)踐
- 中外美術(shù)評(píng)析與欣賞智慧樹(shù)知到期末考試答案章節(jié)答案2024年湖南大學(xué)
- 事業(yè)單位考試《綜合知識(shí)和能力測(cè)試》試卷
- 福利住房與購(gòu)房補(bǔ)貼制度
- 康師傅烏龍茗茶營(yíng)銷策劃書(shū)
評(píng)論
0/150
提交評(píng)論