操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第1頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第2頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第3頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第4頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩65頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

淮陰工學(xué)院實(shí)驗(yàn)報(bào)告___-____年第__1__學(xué)期學(xué)院___計(jì)算機(jī)工程學(xué)院__課程名稱_____操作系統(tǒng)__班級(jí)_____軟件1101_____學(xué)號(hào)_________姓名_______王祥______指導(dǎo)教師_______嚴(yán)云洋______試驗(yàn)一:進(jìn)程調(diào)度1.試驗(yàn)?zāi)康模和ㄟ^(guò)這次試驗(yàn),加深對(duì)進(jìn)程概念的理解,深入掌握進(jìn)程狀態(tài)的轉(zhuǎn)變、進(jìn)程調(diào)度的方略及對(duì)系統(tǒng)性能的評(píng)價(jià)措施。2.試驗(yàn)內(nèi)容:設(shè)計(jì)程序模擬進(jìn)程的輪轉(zhuǎn)法調(diào)度過(guò)程。假設(shè)初始狀態(tài)為:有n個(gè)進(jìn)程處在就緒狀態(tài),有m個(gè)進(jìn)程處在阻塞狀態(tài)。采用輪轉(zhuǎn)法進(jìn)程調(diào)度算法進(jìn)行調(diào)度(調(diào)度過(guò)程中,假設(shè)處在執(zhí)行狀態(tài)的進(jìn)程不會(huì)阻塞),且每過(guò)t個(gè)時(shí)間片系統(tǒng)釋放資源,喚醒處在阻塞隊(duì)列隊(duì)首的進(jìn)程。程序規(guī)定如下:1).輸出系統(tǒng)中進(jìn)程的調(diào)度次序;2).計(jì)算CPU運(yùn)用率。3.試驗(yàn)環(huán)境:硬件環(huán)境:GhostXPSP3純凈版Y6.0Pentium(R)Dual-CoreCPUE6700@3.20GHz3.19GHz,1.96GB的內(nèi)存物理地址擴(kuò)展軟件環(huán)境:MicrosoftWindowsXP,VisualStudio4.源代碼:#include<iostream>#include<algorithm>#include<queue>usingnamespacestd;onstintMaxNum=100;structNode{intindex;intarriveTime;intrest;};boolNodeCmp(constNode&a,constNode&b){returna.arriveTime<b.arriveTime;}intn;//進(jìn)程數(shù)intArrivalTime[MaxNum];intServiceTime[MaxNum];intPServiceTime[MaxNum];intFinishTime[MaxNum];intWholeTime[MaxNum];doubleWeightWholeTime[MaxNum];boolFinished[MaxNum];doubleAverageWT,AverageWWT;boolisEnterQue[MaxNum];intcntTimes[MaxNum];voidinit(){memset(PServiceTime,0,sizeof(PServiceTime));memset(Finished,0,sizeof(Finished));memset(FinishTime,0,sizeof(FinishTime));memset(WholeTime,0,sizeof(WholeTime));memset(WeightWholeTime,0,sizeof(WeightWholeTime));}intsum(intarray[],intn){intsum=0;inti;for(i=0;i<n;i++){sum+=array[i];}returnsum;}doublesum(doublearray[],intn){doublesum=0;inti;for(i=0;i<n;i++){sum+=array[i];}returnsum;}voidprint(){inti=0;cout<<"進(jìn)程完畢時(shí)間:";for(i=0;i<n;i++){cout<<FinishTime[i]<<'';}cout<<endl;cout<<"周轉(zhuǎn)時(shí)間:";for(i=0;i<n;i++){cout<<WholeTime[i]<<'';}cout<<endl;cout<<"帶權(quán)周轉(zhuǎn)時(shí)間:";for(i=0;i<n;i++){printf("%.2f",WeightWholeTime[i]);}cout<<endl;}voidSearchToEnterQue(queue<Node>&que,Node*pArr,intmaxArrivalTime){inti;for(i=0;i<n;i++){if(pArr[i].arriveTime>maxArrivalTime)break;if(isEnterQue[pArr[i].index]==false){que.push(pArr[i]);isEnterQue[pArr[i].index]=true;}}}voidWork(intq){init();memset(isEnterQue,0,sizeof(isEnterQue));memset(cntTimes,0,sizeof(cntTimes));Node*pNodeArr=newNode[n];inti;for(i=0;i<n;i++){pNodeArr[i].index=i;pNodeArr[i].arriveTime=ArrivalTime[i];pNodeArr[i].rest=ServiceTime[i];}sort(pNodeArr,pNodeArr+n,NodeCmp);inttotalTime=sum(ServiceTime,n);inttime=pNodeArr[0].arriveTime;queue<Node>que;que.push(pNodeArr[0]);isEnterQue[pNodeArr[0].index]=true;Nodecur;cout<<"================================================="<<endl;while(!que.empty()) {cur=que.front();que.pop();cntTimes[cur.index]++;if(cntTimes[cur.index]==1)printf("在%d時(shí)刻,進(jìn)程%d開始執(zhí)行。。。\n",time,cur.index);if(cur.rest>q){time+=q;cur.rest-=q;}else{time+=cur.rest;Finished[cur.index]=true;FinishTime[cur.index]=time;cur.rest=0;printf("在%d時(shí)刻,進(jìn)程%d執(zhí)行結(jié)束。\n",time,cur.index);}SearchToEnterQue(que,pNodeArr,time);if(cur.rest!=0)que.push(cur);if(que.empty())//若隊(duì)列為空,則在time之后才到達(dá)的進(jìn)程找最早抵達(dá)的進(jìn)程入隊(duì)列{for(i=0;i<n;i++){if(isEnterQue[i]==false)//找到了{(lán)que.push(pNodeArr[i]);//入隊(duì)列time=pNodeArr[i].arriveTime; break;}}}}for(i=0;i<n;i++){WholeTime[i]=FinishTime[i]-ArrivalTime[i];WeightWholeTime[i]=(double)WholeTime[i]/(double)ServiceTime[i];}AverageWT=(double)sum(WholeTime,n)/(double)n;AverageWWT=(double)sum(WeightWholeTime,n)/(double)n; cout<<"================================================="<<endl;print();cout<<endl<<endl; cout<<"================================================="<<endl;printf("平均周轉(zhuǎn)時(shí)間:%.2f,平均帶權(quán)周轉(zhuǎn)時(shí)間:%.2f\n",AverageWT,AverageWWT);delete[]pNodeArr;}intmain(){// freopen("test.txt","rw",stdin);intq;//時(shí)間片大小inti;cout<<"輸入進(jìn)程數(shù):";cin>>n;;cout<<"輸入每個(gè)進(jìn)程的抵達(dá)時(shí)間:"<<endl;for(i=0;i<n;i++)cin>>ArrivalTime[i];cout<<"輸入每個(gè)進(jìn)程的服務(wù)時(shí)間:"<<endl;for(i=0;i<n;i++)cin>>ServiceTime[i];cout<<"輸入時(shí)間片大小"<<endl;cin>>q;Work(q);return0;}5.試驗(yàn)成果: 6.試驗(yàn)分析和體會(huì):試驗(yàn)二分區(qū)式存儲(chǔ)管理1.試驗(yàn)?zāi)康模和ㄟ^(guò)這次試驗(yàn),加深對(duì)內(nèi)存管理的認(rèn)識(shí),深入掌握內(nèi)存的分派、回收算法的思想。2.試驗(yàn)內(nèi)容:設(shè)計(jì)程序模擬內(nèi)存的動(dòng)態(tài)分區(qū)法存儲(chǔ)管理。內(nèi)存空閑區(qū)使用自由鏈管理,采用最壞適應(yīng)算法從自由鏈中尋找空閑區(qū)進(jìn)行分派,內(nèi)存回收時(shí)假定不做與相鄰空閑區(qū)的合并。假定系統(tǒng)的內(nèi)存共640K,初始狀態(tài)為操作系統(tǒng)自身占用64K。在t1時(shí)間之后,有作業(yè)A、B、C、D分別祈求8K、16K、64K、124K的內(nèi)存空間;在t2時(shí)間之后,作業(yè)C完畢;在t3時(shí)間之后,作業(yè)E祈求50K的內(nèi)存空間;在t4時(shí)間之后,作業(yè)D完畢。規(guī)定編程序分別輸出t1、t2、t3、t4時(shí)刻內(nèi)存的空閑區(qū)的狀態(tài)。3.試驗(yàn)環(huán)境:硬件環(huán)境:GhostXPSP3純凈版Y6.0Pentium(R)Dual-CoreCPUE6700@3.20GHz3.19GHz,1.96GB的內(nèi)存物理地址擴(kuò)展軟件環(huán)境:MicrosoftWindowsXP,VisualStudio4.源代碼:#include"stdafx.h"#include<stdio.h>#include<stdlib.h>structfreelink{intlen,address;//len為分區(qū)長(zhǎng)度;address為分區(qū)起始地址structfreelink*next;};//內(nèi)存占用區(qū)用鏈表描述,其結(jié)點(diǎn)類型描述如下:structbusylink{charname;//作業(yè)或進(jìn)程名name='S'表達(dá)OS占用intlen,address;structbusylink*next;};//并設(shè)全程量:structfreelink*free_head=NULL;//自由鏈隊(duì)列帶頭結(jié)點(diǎn))隊(duì)首指針?structbusylink*busy_head=NULL,*busy_tail=NULL;//占用區(qū)隊(duì)列隊(duì)(帶頭結(jié)點(diǎn))首指針//占用區(qū)隊(duì)列隊(duì)尾指針//設(shè)計(jì)子函數(shù):voidstart(void)/*設(shè)置系統(tǒng)初始狀態(tài)*/{structfreelink*p;structbusylink*q;free_head=(structfreelink*)malloc(sizeof(structfreelink));free_head->next=NULL;//創(chuàng)立自由鏈頭結(jié)點(diǎn)busy_head=busy_tail=(structbusylink*)malloc(sizeof(structbusylink));busy_head->next=NULL;//創(chuàng)立占用鏈頭結(jié)點(diǎn)p=(structfreelink*)malloc(sizeof(structfreelink));p->address=64;p->len=640-64;//(OS占用了K)p->next=NULL;free_head->next=p;q=(structbusylink*)malloc(sizeof(structbusylink));q->name='S';/*S表達(dá)操作系統(tǒng)占用*/q->len=64;q->address=0;q->next=NULL;busy_head->next=q;busy_tail=q;}voidrequireMemo(charname,intrequire)/*模擬內(nèi)存分派*/{structfreelink*w,*u,*v,*x,*y;structbusylink*p;x=free_head;y=free_head->next;while((y!=NULL)&&(y->len<require))//找到第一種滿足條件的空閑區(qū){x=y;y=y->next;}if(y!=NULL){p=(structbusylink*)malloc(sizeof(busylink));p->name=name;p->address=y->address;p->len=require;p->next=NULL;busy_tail->next=p;//把p插入到busy_head的尾部busy_tail=p;w=x->next;x->next=w->next;if(w->len==require){free(w);}else{w->address=w->address+require;w->len=w->len-require;u=free_head;v=free_head->next;while((v!=NULL)&&(v->len<w->len))//假如此結(jié)點(diǎn)尚有多出,就此又重新插入到空閑區(qū)域鏈中(按照長(zhǎng)度由小到大的次序排列){u=v;v=v->next;}u->next=w;w->next=v;}}elseprintf("can'tallocate!\n");}voidfreeMemo(charname)/*模擬內(nèi)存回收*/{structbusylink*p,*q;structfreelink*w,*u,*v,*s1=NULL,*s2=NULL;intlen,address;intflag1=1,flag2=1;p=busy_head->next;while((p!=NULL)&&(p->name!=name))//找到要回收的結(jié)點(diǎn){q=p;p=p->next;}if(p==NULL){printf("%cisnotexist\n",name);}else{if(p==busy_tail)busy_tail=q;q->next=p->next;len=p->len;address=p->address;free(p);w=(structfreelink*)malloc(sizeof(freelink));w->len=len;w->address=address;u=free_head;v=free_head->next;while((v!=NULL)&&(flag1==1||flag2==1))//歸并算法{if((w->address==(v->address+v->len))&&flag1){s1=v;u->next=s1->next;w->address=v->address;w->len+=v->len;v=v->next;flag1=0;}elseif(((w->address+w->len)==v->address)&&flag2){s2=v;u->next=s2->next;w->len+=v->len;v=v->next;flag2=0;}else{u=v;v=v->next;} }if(s1!=NULL)free(s1);if(s2!=NULL)free(s2);u=free_head;v=free_head->next;if(v!=NULL){while((v!=NULL)&&(v->len<w->len)){u=v;v=v->next;}}u->next=w;w->next=v;}}voidpast(inttime)/*模擬系統(tǒng)過(guò)了時(shí)間time,用sleep(),或者用個(gè)空循環(huán)*/{printf("時(shí)間%d后:\n",time);}voidprintlink()/*輸出內(nèi)存空閑狀況(自由鏈的結(jié)點(diǎn))*/{structfreelink*p;p=free_head->next;if(p==NULL)printf("無(wú)空閑區(qū)!\n");else{while(p!=NULL){printf("首地址:%d\t長(zhǎng)度:%d\n",p->address,p->len);p=p->next;}}printf("\n");}voidprintlink1()/*輸出內(nèi)存占用的狀況*/{structbusylink*p;p=busy_head->next;if(p==NULL)printf("無(wú)內(nèi)存占有區(qū)!\n");else{while(p!=NULL){printf("名字:%c\t首地址:%d\t長(zhǎng)度:%d\n",p->name,p->address,p->len);p=p->next;}}}// 設(shè)計(jì)主函數(shù):intmain(){start();past(1);requireMemo('A',8);requireMemo('B',16);requireMemo('C',64);requireMemo('D',124);printf("內(nèi)存占用區(qū)為:\n");printlink1();printf("內(nèi)存空閑區(qū)為:\n");printlink();past(2);freeMemo('C');printf("內(nèi)存占用區(qū)為:\n");printlink1();printf("內(nèi)存空閑區(qū)為:\n");printlink();past(3);requireMemo('E',50);printf("內(nèi)存占用區(qū)為:\n");printlink1();printf("內(nèi)存空閑區(qū)為:\n");printlink();return0;}5.試驗(yàn)成果:6.試驗(yàn)分析和體會(huì):首先,對(duì)鏈表又有深入的理解,尚有就是加深理解內(nèi)存的分派與回收,分派與回收的方略,并掌握動(dòng)態(tài)分區(qū)這種內(nèi)存管理的詳細(xì)實(shí)行措施。再者,就是在編程中碰到的困難,在編寫歸并程序首先是自己考慮問(wèn)題不全面,寫的程序就只顧及到一種結(jié)點(diǎn),而沒(méi)有實(shí)既有兩個(gè)結(jié)點(diǎn)的狀況,于是后來(lái)再加了一條else語(yǔ)句,就沒(méi)有出現(xiàn)問(wèn)題。尚有一種問(wèn)題就是將多出的結(jié)點(diǎn)free時(shí)也出現(xiàn)問(wèn)題,加了一條if(s==NULL),成立就釋放掉。一開始把free語(yǔ)句寫在while循環(huán)內(nèi),一旦把找到的結(jié)點(diǎn)釋放掉,則找不到下一種結(jié)點(diǎn),也會(huì)出錯(cuò),因此應(yīng)當(dāng)把free放到while循環(huán)外。試驗(yàn)三虛擬存儲(chǔ)管理1.試驗(yàn)?zāi)康模捍鎯?chǔ)管理的重要功能之一是合理的分派空間。祈求頁(yè)式管理是一種常用的虛擬存儲(chǔ)管理技術(shù)。本試驗(yàn)的目的是祈求頁(yè)式存儲(chǔ)管理中頁(yè)面置換算法模擬設(shè)計(jì),理解虛擬存儲(chǔ)技術(shù)的特點(diǎn),掌握祈求頁(yè)式存儲(chǔ)管理的頁(yè)面置換措施。2.試驗(yàn)內(nèi)容:(1)通過(guò)隨機(jī)數(shù)產(chǎn)生一種指令序列,共320條指令。指令的地址按下述原則生成:50%的指令是次序執(zhí)行的;25%的指令是均勻分布在前地址部分;25%的指令是均勻分布在后地址部分。詳細(xì)的實(shí)行措施是:在[0,319]的指令地址之間隨機(jī)選用一起點(diǎn)m;次序執(zhí)行一條指令,即執(zhí)行地址為m+1的指令;在前地址[0,m+1]中隨機(jī)選用一條指令并執(zhí)行,該指令的地址為m’;次序執(zhí)行一條指令,其地址為m’+1;在后地址[m’+2,319]中隨機(jī)選用一條指令并執(zhí)行;反復(fù)上述環(huán)節(jié),直至執(zhí)行320次指令。將指令序列變換成頁(yè)地址流設(shè):①頁(yè)面大小為1K;②顧客內(nèi)存容量為4頁(yè)到32頁(yè);③顧客虛存容量為32K;在顧客虛存中,按每K寄存10條指令排列虛存地址,即320條指令在虛存中的寄存方式為:第0條~第9條指令為第0頁(yè)(對(duì)應(yīng)的虛存地址為[0,9]);第10條~第19條指令為第1頁(yè)(對(duì)應(yīng)的虛存地址為[10,19]);.第310條~第319條指令為第31頁(yè)(對(duì)應(yīng)的虛存地址為[310,319]);按以上方式,顧客指令可構(gòu)成32頁(yè)。計(jì)算并輸出下述多種算法在不一樣的內(nèi)存容量下的命中率。先進(jìn)先出的算法(FIFO);近來(lái)至少使用算法(LRR);最佳淘汰法(OPT):先淘汰最不常用的頁(yè)地址;至少訪問(wèn)頁(yè)面算法(LFR);近來(lái)不常常使用算法(NUR)。其中③和④為選擇內(nèi)容。命中率=1-(頁(yè)面失效次數(shù))/(頁(yè)地址流長(zhǎng)度)在本試驗(yàn)中,頁(yè)地址流的長(zhǎng)度為320,頁(yè)面失效次數(shù)為每次訪問(wèn)對(duì)應(yīng)指令時(shí),該指令所對(duì)應(yīng)的頁(yè)不在內(nèi)存的次數(shù)。隨機(jī)數(shù)產(chǎn)生措施有關(guān)隨機(jī)書產(chǎn)生措施,可以使用系統(tǒng)提供函數(shù)rand(),分別進(jìn)行初始化和產(chǎn)生隨機(jī)數(shù)。例如:srand();語(yǔ)句可初始化的一種隨機(jī)數(shù);a[0]=10*rand()/32767*319+1;a[1]=10*rand()/32767*a[0];語(yǔ)句可用來(lái)產(chǎn)生a[0]與a[1]中的隨機(jī)數(shù)。3.試驗(yàn)環(huán)境:硬件環(huán)境:GhostXPSP3純凈版Y6.0Pentium(R)Dual-CoreCPUE6700@3.20GHz3.19GHz,1.96GB的內(nèi)存物理地址擴(kuò)展軟件環(huán)境:MicrosoftWindowsXP,VisualStudio4.源代碼:#defineTRUE1#defineFALSE0#defineINVALID-1#defineNULL0#definetotal_instruction320/*指令流長(zhǎng)*/#definetotal_vp32/*虛頁(yè)長(zhǎng)*/#defineclear_period50/*清周期*/typedefstruct/*頁(yè)面構(gòu)造*/{intpn,pfn,counter,time;}pl_type;pl_typepl[total_vp];/*頁(yè)面構(gòu)造數(shù)組*/structpfc_struct{/*頁(yè)面控制構(gòu)造*/intpn,pfn;structpfc_struct*next;};typedefstructpfc_structpfc_type;pfc_typepfc[total_vp],*freepf_head,*busypf_head,*busypf_tail;intdiseffect,a[total_instruction];intpage[total_instruction],offset[total_instruction];intinitialize(int);intFIFO(int);/*先進(jìn)先出法(FisrtInFirstOut)*/intLRU(int);/*近來(lái)最久未使用(LeastRecentlyUsed)*/intLFU(int);/*最不常常使使用方法(LeastFrequentlyUsed)*/intNUR(int);/*近來(lái)未使使用方法(NoUsedRecently)*/intOPT(int);/*最佳置換算法(Optimal)*//*主函數(shù)*/intmain(){ints,i,j;srand(10*getpid());/*由于每次運(yùn)行時(shí)進(jìn)程號(hào)不一樣,故可用來(lái)作為初始化隨機(jī)數(shù)隊(duì)列的“種子”*/s=(float)319*rand()/32767/32767/2+1;//for(i=0;i<total_instruction;i+=4)/*產(chǎn)生指令隊(duì)列*/{if(s<0||s>319){printf("Wheni==%d,Error,s==%d\n",i,s);exit(0);}a[i]=s;/*任選一指令訪問(wèn)點(diǎn)m*/a[i+1]=a[i]+1;/*次序執(zhí)行一條指令*/a[i+2]=(float)a[i]*rand()/32767/32767/2;/*執(zhí)行前地址指令m'*/a[i+3]=a[i+2]+1;/*次序執(zhí)行一條指令*/s=(float)(318-a[i+2])*rand()/32767/32767/2+a[i+2]+2;if((a[i+2]>318)||(s>319))printf("a[%d+2],anumberwhichis:%dands==%d\n",i,a[i+2],s);}for(i=0;i<total_instruction;i++)/*將指令序列變換成頁(yè)地址流*/{page[i]=a[i]/10;offset[i]=a[i]%10;}for(i=4;i<=32;i++)/*顧客內(nèi)存工作區(qū)從個(gè)頁(yè)面到個(gè)頁(yè)面*/{printf("%2dpageframes\n",i);FIFO(i);LRU(i);LFU(i);NUR(i);OPT(i);}return0;}intinitialize(total_pf)/*初始化有關(guān)數(shù)據(jù)構(gòu)造*/inttotal_pf;/*顧客進(jìn)程的內(nèi)存頁(yè)面數(shù)*/{inti;diseffect=0;for(i=0;i<total_vp;i++){pl[i].pn=i;pl[i].pfn=INVALID;/*置頁(yè)面控制構(gòu)造中的頁(yè)號(hào),

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論