版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
《操作系統(tǒng)B》實驗報告學(xué)院:現(xiàn)代科技學(xué)院專業(yè):計算機(jī)科學(xué)與技術(shù)姓名:班級:計算機(jī)學(xué)號:指導(dǎo)教師:時間:年月太原理工大學(xué)學(xué)生實驗報告學(xué)院名稱現(xiàn)代科技學(xué)院專業(yè)班級實驗成績學(xué)生姓名學(xué)號實驗日期課程名稱操作系統(tǒng)B實驗題目幾種操作系統(tǒng)的界面一、目的和要求目的本實驗的目的是使學(xué)生熟悉1—2種操作系統(tǒng)的界面,在熟練使用機(jī)器的根底上,能了解各種操作命令和系統(tǒng)調(diào)用在系統(tǒng)中的大致工作過程。也就是通過操作系統(tǒng)的外部特征,逐步深入到操作系統(tǒng)的內(nèi)部實質(zhì)內(nèi)容中去。要求能熟練的在1—2種操作系統(tǒng)的環(huán)境下工作,學(xué)會使用各種命令,熟悉系統(tǒng)提供的各種功能,主動而有效地使用計算機(jī)。熟悉系統(tǒng)實用程序的調(diào)用方法和各種系統(tǒng)調(diào)用模塊的功能和作用二、內(nèi)容實驗步驟在某種操作系統(tǒng)的環(huán)境下建立、修改、運(yùn)行、打印源程序和結(jié)果,最后撤消一個完整的程序。提示:可按下述步驟進(jìn)行編寫一個完整的源程序,通過編輯命令送入機(jī)器,建立源程序文件;編譯該源文件,建立相應(yīng)的目標(biāo)文件;編譯有錯時,再用編輯命令修改源文件,消除全部詞法和語法錯誤;連接目標(biāo)文件,形成可執(zhí)行文件;執(zhí)行該文件,得到結(jié)果;打印輸出源程序和運(yùn)行結(jié)果;撤消本次實驗中形成的所有文件。實驗內(nèi)容利用DOS命令建立一個1.cpp文件,程序清單如下:/*>1.cpp*/#include<stdio.h>#include<conio.h>intmain(){ printf("操作系統(tǒng)實驗報告!\n"); return0;}/*>over*/DOS命令截圖:1.cpp文件截圖:由于MS-DOS中不能顯示中文,所以圖中顯示為亂碼,此處為:操作系統(tǒng)實驗報告!DEV-CPP編譯、連接并運(yùn)行程序。運(yùn)行截圖:用DOS命令刪除程序清單1.cpp與執(zhí)行文件1.exe文件。三、總結(jié)本次實驗在WINDOWSXP操作系統(tǒng)下完成,考察了對WINDOWSXP操作系統(tǒng)的根本操作和DOS命令的使用,通過編譯工具學(xué)會根本的編譯、連接操作。本次實驗中使用到的DOS命令與工具:操作系統(tǒng):WINDOWSXPC語言編譯工具:DEV-CPPDOS命令:查看目錄:dir編輯文本:edit刪除文件:del實驗室名稱指導(dǎo)教師簽名太原理工大學(xué)學(xué)生實驗報告學(xué)院名稱現(xiàn)代科技學(xué)院專業(yè)班級實驗成績學(xué)生姓名學(xué)號實驗日期課程名稱操作系統(tǒng)B實驗題目進(jìn)程調(diào)度程序設(shè)計一、目的和要求目的進(jìn)程是操作系統(tǒng)最重要的概念之一,進(jìn)程調(diào)度是操作系統(tǒng)的主要內(nèi)容,本實驗要求學(xué)生獨立地用高級語言編寫一個進(jìn)程調(diào)度程序,調(diào)度算法可任意選擇或自行設(shè)計,本實驗可使學(xué)生加深對進(jìn)程調(diào)度和各種調(diào)度算法的理解。要求設(shè)計一個有幾個進(jìn)程并發(fā)執(zhí)行的進(jìn)程調(diào)度程序,每個進(jìn)程由一個進(jìn)程控制塊(PCB)表示,進(jìn)程控制塊通常應(yīng)包括下述信息:進(jìn)程名,進(jìn)程優(yōu)先數(shù),進(jìn)程需要運(yùn)行的時間,占用CPU的時間以及進(jìn)程的狀態(tài)等,且可按照調(diào)度算法的不同而增刪。調(diào)度程序應(yīng)包含2—3種不同的調(diào)度算法,運(yùn)行時可以任選一種,以利于各種方法的分析和比擬。系統(tǒng)應(yīng)能顯示或打印各進(jìn)程狀態(tài)和參數(shù)的變化情況,便于觀察。二、實驗內(nèi)容實驗原理題目本程序可選用優(yōu)先數(shù)法或簡單輪轉(zhuǎn)法對五個進(jìn)程進(jìn)行調(diào)度。每個進(jìn)程處于運(yùn)行R(run)、就緒W(wait)和完成F(finish)三種狀態(tài)之一,并假定起始狀態(tài)都是就緒狀態(tài)W。為了便于處理,程序中進(jìn)程的運(yùn)行時間以時間片為單位計算。各進(jìn)程的優(yōu)先數(shù)或輪轉(zhuǎn)時間片數(shù)、以及進(jìn)程需要運(yùn)行的時間片數(shù),均由偽隨機(jī)數(shù)發(fā)生器產(chǎn)生。進(jìn)程控制塊結(jié)構(gòu)如表2-1所示:表2-1PCB進(jìn)程標(biāo)識符鏈指針優(yōu)先數(shù)/輪轉(zhuǎn)時間片數(shù)占用CPU時間片數(shù)進(jìn)程所需時間片數(shù)進(jìn)程狀態(tài)進(jìn)程控制塊鏈結(jié)構(gòu)如圖2-1所示:1┇R31┇R3┇W5┇WW0┇2圖2-1進(jìn)程控制塊鏈結(jié)構(gòu)其中:RUN—當(dāng)前運(yùn)行進(jìn)程指針;HEAD—進(jìn)程就緒鏈鏈?zhǔn)字羔?;TAIL—進(jìn)程就緒鏈鏈尾指針。2.算法與框圖程序框圖如圖2-2所示。prioritypriority是輸入調(diào)度算法alog開始alog=priority/roundrobin?生成并按優(yōu)先數(shù)大小排列進(jìn)程控制塊鏈進(jìn)程時間片數(shù)為0?從鏈?zhǔn)兹∫粋€進(jìn)程投入運(yùn)行生成并按進(jìn)入次序排列進(jìn)程控制塊鏈鏈?zhǔn)走M(jìn)程投入運(yùn)行時間片到,進(jìn)程時間片數(shù)減1,優(yōu)先數(shù)減3運(yùn)行進(jìn)程退出,排到進(jìn)程鏈尾部撤消該進(jìn)程鏈?zhǔn)走M(jìn)程投入運(yùn)行時間片到,進(jìn)程時間片數(shù)減1,占用CPU時間加1優(yōu)先數(shù)大于鏈?zhǔn)走M(jìn)程?進(jìn)程時間片數(shù)為0?撤消該進(jìn)程運(yùn)行進(jìn)程退出,按優(yōu)先數(shù)插入進(jìn)程鏈從鏈?zhǔn)兹∫粋€進(jìn)程投入運(yùn)行結(jié)束結(jié)束進(jìn)程隊列空?進(jìn)程隊列空?是是是否否否否否是roundrobin占用處理機(jī)時間片到?否是圖2-2進(jìn)程調(diào)度框圖(1)優(yōu)先數(shù)法。進(jìn)程就緒鏈按優(yōu)先數(shù)大小從大到小排列,鏈?zhǔn)走M(jìn)程首先投入運(yùn)行。每過一個時間片,運(yùn)行進(jìn)程所需運(yùn)行的時間片數(shù)減1,說明它已運(yùn)行了一個時間片,優(yōu)先數(shù)也減3。理由是該進(jìn)程如果在一個時間片中完成不了,優(yōu)先級應(yīng)降低一級。接著比擬現(xiàn)行進(jìn)程和就緒鏈鏈?zhǔn)走M(jìn)程的優(yōu)先數(shù),如果仍是現(xiàn)行進(jìn)程高或者相同,就讓現(xiàn)行進(jìn)程繼續(xù)運(yùn)行,否那么,調(diào)度就緒鏈鏈?zhǔn)走M(jìn)程投入運(yùn)行。原運(yùn)行進(jìn)程再按其優(yōu)先數(shù)大小插入就緒鏈,且改變它們對應(yīng)的進(jìn)程狀態(tài),直至所有進(jìn)程都運(yùn)行完各自的時間片數(shù)。(2)簡單輪轉(zhuǎn)法。進(jìn)程就緒鏈按各進(jìn)程進(jìn)入的先后次序排列,鏈?zhǔn)走M(jìn)程首先投入運(yùn)行。進(jìn)程每次占用處理機(jī)的輪轉(zhuǎn)時間按其重要程度登入進(jìn)程控制塊中的輪轉(zhuǎn)時間片數(shù)記錄項〔相應(yīng)于優(yōu)先數(shù)法的優(yōu)先數(shù)記錄項位置〕。每過一個時間片,運(yùn)行進(jìn)程占用處理機(jī)的時間片數(shù)加1,然后比擬占用處理機(jī)的時間片數(shù)是否與該進(jìn)程的輪轉(zhuǎn)時間片數(shù)相等,假設(shè)相等說明已到達(dá)輪轉(zhuǎn)時間,應(yīng)將現(xiàn)運(yùn)行進(jìn)程排到就緒鏈末尾,調(diào)度鏈?zhǔn)走M(jìn)程占用處理機(jī),且改變它們的進(jìn)程狀態(tài),直至所有進(jìn)程完成各自的時間片。實驗步驟根據(jù)實驗原理圖設(shè)計調(diào)度源碼,如下:#include<stdio.h>#include<stdlib.h>#definefurthest5structprocess/*PCBSTRUCTURE*/{intid;intpriority;intcputime;intalltime;charstate;intnext;}prochain[furthest-1];intprocnum;intrand();intalgo;intrun,head,tail,j;main()/*MAINPROGRAM*/{agan:printf("typethealgorithmis(1:RR,2:PRIO):");scanf("%d",&algo);if(algo==2){printf("outputofpriority.\n");init();prisch();}else{if(algo==1){printf("outputofroundrobin.\n");init();timesch();}else{printf("tryagain,please\n");gotoagan;}}for(j=1;j<=40;j++){printf("=");}printf("\n\n");for(j=1;j<=40;j++){printf("=");}printf("\n\n");printf("systemfinished\n");getch();}print()/*PRINTTHERUNNINGPROCESS,WAITINGQUEUEANDPCBSEQUENCELIST*/{intk,p;for(k=1;k<=40;k++)printf("=");printf("\nrunningproc.");printf("waitingqueue.");printf("\n%d",prochain[run].id);p=head;while(p!=0){printf("%5d",p);p=prochain[p].next;}printf("\n");for(k=1;k<=40;k++)printf("=");printf("\n");printf("id");for(k=1;k<furthest+1;k++)printf("%5d",prochain[k].id);printf("\n");printf("priority");for(k=1;k<furthest+1;k++)printf("%5d",prochain[k].priority);printf("\n");printf("cputime");for(k=1;k<furthest+1;k++)printf("%5d",prochain[k].cputime);printf("\n");printf("alltime");for(k=1;k<furthest+1;k++)printf("%5d",prochain[k].alltime);printf("\n");printf("state");for(k=1;k<furthest+1;k++)printf("%5c",prochain[k].state);printf("\n");printf("next");for(k=1;k<furthest+1;k++)printf("%5d",prochain[k].next);printf("\n");}insert(intq)/*INSERTAPROCESS*/{intp,s;p=head;s=prochain[head].next;while((prochain[q].priority<prochain[s].priority)&&(s!=0)){p=s;s=prochain[s].next;}prochain[p].next=q;prochain[q].next=s;}insert2()/*PUTAPROCESSONTOTHETAILOFTHEQUEUE*/{prochain[tail].next=run;tail=run;prochain[run].next=0;}init()/*CREATEAWAITINGQUEUE*/{inti;head=0;if(algo==2){for(i=1;i<furthest+1;i++){prochain[i].id=i;prochain[i].priority=(rand()+11)%41;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state='W';prochain[i].next=0;if((prochain[i].priority<prochain[head].priority)&&(head!=0))insert(prochain[i].id);else{prochain[i].next=head;head=prochain[i].id;}}}else{for(i=1;i<furthest+1;i++){prochain[i].id=i;prochain[i].priority=(rand()+1)%3+1;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state='W';prochain[i].next=(i+1)%(furthest+1);}head=1;tail=furthest;prochain[furthest].next=0;}run=head;prochain[run].state='R';head=prochain[head].next;prochain[run].next=0;print();}prisch()/*THEPROCESSWITHPRIOALGORITHM*/{while(run!=0){prochain[run].cputime+=1;prochain[run].priority-=3;prochain[run].alltime-=1;if(prochain[run].alltime==0){prochain[run].state='F';prochain[run].next=0;if(head!=0){run=head;prochain[run].state='R';head=prochain[head].next;}else{prochain[0].id=prochain[run].id;run=0;}}else{if((prochain[run].priority<prochain[head].priority)&&(head!=0)){prochain[run].state='W';insert(run);run=head;prochain[run].state='R';head=prochain[head].next;}}print();}}timesch()/*THEPROCESSWITHRRALRORITHM*/{while(run!=0){prochain[run].alltime-=1;prochain[run].cputime+=1;if(prochain[run].alltime==0){prochain[run].state='F';prochain[run].next=0;if(head!=0){run=head;prochain[run].state='R';head=prochain[head].next;}else{prochain[0].id=prochain[run].id;run=0;}}else{if((prochain[run].cputime==prochain[run].priority)&&(head!=0)){prochain[run].state='W';prochain[run].cputime=0;insert2();run=head;prochain[run].state='R';head=prochain[head].next;}}print();}}程序運(yùn)行截圖簡單輪轉(zhuǎn)法截圖:優(yōu)先數(shù)法結(jié)果截圖:〔省略…18時間單位長截圖〕〔省略…18時間單位長截圖〕三、總結(jié)本次實驗對進(jìn)程調(diào)度優(yōu)先數(shù)法和簡單輪轉(zhuǎn)法進(jìn)行了程序模擬實現(xiàn),程序所用語言為C語言代碼,運(yùn)行環(huán)境為windowsxp,編譯工具為Win-Tc,由于Win-Tc所用的DOS為MS-DOS無法實現(xiàn)DOS指令截留,所以在DOS窗口下只能看到最后兩行結(jié)果,為了得到全部運(yùn)行結(jié)果,實驗中采用了管道輸出重定向,將程序輸出指向為TXT,所以本實驗以上截圖為TXT輸出截圖。另外實驗中使用的調(diào)度程序有許多缺陷,程序里面C語言不符合最新群眾C99規(guī)定,并且隨機(jī)函數(shù)未配置隨機(jī)種子,說為隨機(jī)其實連續(xù)兩次運(yùn)行結(jié)果相同,經(jīng)過修改很多錯誤后才得以運(yùn)行,而且得到的結(jié)果也不能全部顯示,所以開始自己根據(jù)流程圖寫一個調(diào)度模擬程序,但遺憾的是時間不夠,只完成了大概三分之一局部,實驗后會對其完善的,這里就附上完成局部程序與界面截圖。附:/*>sc.cpp*/#include<stdio.h>#include<conio.h>#include<malloc.h>#include<string.h>#include<time.h>#include<stdlib.h>#defineN5structPCB //定義一個進(jìn)程結(jié)點數(shù)據(jù)域{ intid; //進(jìn)程id intall_time; //總運(yùn)行時間 intcpu_time; //現(xiàn)運(yùn)行時間 intpriority; //優(yōu)先數(shù) charstate; //運(yùn)行狀態(tài) structPCB*next; //指向下一個結(jié)點的指針};PCBPCBL[N+1];voidmenu();PCB*CreatePCBList();voidShowPCBList(PCB*p);intmain(void){ PCB*p; charkey; srand((int)time(0)); while(1) { system("cls"); printf("程序設(shè)計:操作系統(tǒng)進(jìn)程調(diào)度"); printf("\n\nWELCOME"); printf("\n"); menu(); printf("\n"); printf("請輸入操作(A.B.Q):"); key=getchar(); fflush(stdin); printf("\n"); switch(key) { case'a': case'A': { p=CreatePCBList(); ShowPCBList(p); }break; case'b': case'B': { }break; case'q': case'Q': { printf("\n\t\t\t\t謝謝使用,再見!\n\n"); system("pause"); exit(0); } default: { printf("輸入錯誤!\n"); }break; } system("pause"); } system("pause"); return0;}voidmenu(){ printf("\t\t┏━━━━━━━━━━━━━━━━━━━┓\n"); printf("\t\t┃\tA.優(yōu)先數(shù)法\t\t┃\n"); printf("\t\t┃\tB.簡單輪轉(zhuǎn)法\t\t┃\n"); printf("\t\t┃\tQ.退出程序\t\t┃\n"); printf("\t\t┗━━━━━━━━━━━━━━━━━━━┛\n");}PCB*CreatePCBList(){ inti=1; PCB*head,*tail,*temp,*previous; charPCB_name[5][3]={"P1","P2","P3","P4","P5"}; temp=(structPCB*)malloc(sizeof(structPCB)); temp->id=i; temp->cpu_time=0; temp->all_time=(rand()+1)%7; temp->priority=(rand()+11)%41; temp->state='R'; temp->next=NULL; head=tail=temp; //指向當(dāng)前第一個結(jié)點 while(i!=5) { i++; temp=(structPCB*)malloc(sizeof(structPCB)); temp->id=i; temp->cpu_time=0; temp->all_time=(rand()+1)%7; temp->priority=(rand()+11)%41; temp->state='R'; if(temp->priority>head->priority) //比擬當(dāng)前定義的結(jié)點的優(yōu)先數(shù)與head的優(yōu)先數(shù),同時head指向的結(jié)點的優(yōu)先數(shù)是最大的 { temp->next=head; //如果前定義的結(jié)點的優(yōu)先數(shù)與head的優(yōu)先數(shù)大,那么head指向當(dāng)前定義的結(jié)點 head=temp; } else { previous=head; while(previous->next!=NULL) //如果比優(yōu)先數(shù)最大的結(jié)點小,那么繼續(xù)與后面的節(jié)點進(jìn)行比擬,知道找到一個適宜的位置,即為比前面結(jié)點的優(yōu)先數(shù)大,比后面的小 { if((temp->priority<=previous->priority)&&(temp->priority>=(previous->next)->priority)) { temp->next=previous->next; //交換兩個結(jié)點的位置 previous->next=temp; break; } else { previous=previous->next; //實現(xiàn)往后移 } } if(previous->next==NULL) //如果沒有找到比當(dāng)前結(jié)點小的,那么將當(dāng)前結(jié)點放在最后面 { tail->next=temp; temp->next=NULL; tail=temp; } } } return(head); //返回一個鏈表的頭結(jié)點}voidShowPCBList(PCB*p){ intn=1; printf("timer:%d>PCBList:\n",n); printf("\tstata\tid\tpriority\tcpu_time\tall_time\tnext.id\n",n); printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"); while(p!=NULL) { printf("\t%c",p->state); printf("\t%d",p->id); printf("\t%d",p->priority); printf("\t\t%d",p->cpu_time); printf("\t\t%d",p->all_time); if(p->next==NULL) printf("\t\t%s\n","NULL"); else printf("\t\t%d\n",p->next->id); p=p->next; } printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");}太原理工大學(xué)學(xué)生實驗報告學(xué)院名稱現(xiàn)代科技學(xué)院專業(yè)班級實驗成績學(xué)生姓名學(xué)號實驗日期課程名稱操作系統(tǒng)B實驗題目存儲管理程序設(shè)計一、目的和要求目的存儲管理的主要功能之一是合理地分配主存空間。請求頁式管理是一種常用的虛擬存儲管理技術(shù)。本實驗的目的是通過請求頁式存儲管理中頁面置換算法的模擬設(shè)計,來了解虛擬存儲技術(shù)的特點,掌握請求頁式存儲管理的頁面置換算法。要求模擬頁式虛擬存儲管理中硬件的地址轉(zhuǎn)換和缺頁中斷的處理過程,并用先進(jìn)先出調(diào)度算法〔FIFO〕處理缺頁中斷。二、實驗內(nèi)容實驗原理設(shè)計一個地址轉(zhuǎn)換程序來模擬硬件的地址轉(zhuǎn)換和缺頁中斷處理過程。當(dāng)訪問的頁在主存時那么形成絕對地址,但不去模擬指令的執(zhí)行,可用輸出轉(zhuǎn)換后的絕對地址來表示一條指令已完成。當(dāng)訪問的頁不在主存時那么輸出“*該頁頁號〞來表示硬件產(chǎn)生了一次缺頁中斷。編制一個FIFO頁面調(diào)度程序。FIFO頁面調(diào)度算法總是先調(diào)出作業(yè)中最先進(jìn)入主存的那一頁,因此,可以用一個數(shù)組來構(gòu)成頁號隊列。數(shù)組中每個元素是該作業(yè)已在主存的頁面號,假定分配給作業(yè)的主存塊數(shù)為m,且該作業(yè)開始的m頁已裝入主存,那么數(shù)組可由m個元素組成:頁號標(biāo)志主存塊號修改標(biāo)志磁盤上的位置P[0],P[1],…,P[m-1]它們的初值為P[0]∶=0,P[1]∶=1,…,P[m-1]∶=m-1用一指針k指示當(dāng)要裝入新頁時應(yīng)調(diào)出的頁在數(shù)組的位置,k的初值為“0〞。實驗流程圖jj∶=P[k]j頁的修改標(biāo)志=1?輸出“OUTj〞P[k]∶=Lk∶=(k+1)modm修改頁表輸出“INL〞取一條指令開始頁標(biāo)志=1?輸出絕對地址取一條指令輸出“﹡頁號〞取指令中訪問的頁號=>L查頁表形成絕對地址置L頁修改標(biāo)志〞1結(jié)束是〞存〞指令?有后繼指令?否(產(chǎn)生缺頁中斷)是否否否是是模擬硬件地址轉(zhuǎn)換模擬FIFO頁面調(diào)度是實驗步驟根據(jù)實驗原理圖設(shè)計調(diào)度源碼,如下:#include<iostream>#include<stdlib.h>#include<time.h>usingnamespacestd;structpageTable//定義頁表{intaddress;//地址intpage;//頁號intblock;//塊號structpageTable*next;};typedefstructpageTablePAGETABLE;PAGETABLE*pt;constintfirst_memory=1000;//內(nèi)存首地址intwork[320];//作業(yè)intindex,offset;//index是作業(yè)的頁號,offset為頁內(nèi)偏移地址PAGETABLE*oldPtr;//minPtr指向駐留時間最久的頁intcount;//記數(shù)器,用于記錄發(fā)生的缺頁數(shù)boolis_LRU=false;//是否是LRU算法voidinit();voidinsertPage();voidpushback_Page(PAGETABLE*,PAGETABLE*);voidprint(PAGETABLE*);voidrun(int);voidfind_FIFO();voidfind_LRU();intmain(){inti=0;while(1){cout<<"\nPleaseselectanumber(1,2,0)"<<endl;cout<<"1--先進(jìn)先出算法〔FIFO〕"<<endl;cout<<"2--最久未使用算法〔LRU〕"<<endl;cout<<"0--程序結(jié)束"<<endl;cin>>i;if(i==1){cout<<"\nThisisaexampleforFIFO:"<<endl;is_LRU=false;init();//構(gòu)造頁表和內(nèi)存}elseif(i==2){cout<<"\nThisisaexampleforLRU:"<<endl;is_LRU=true;init();//構(gòu)造頁表和內(nèi)存}elseif(i==0){exit(1);}system("pause");return0;}}voidinit(){doublerate;intcount=0;//記數(shù)器初值為0srand(time(NULL));pt=newPAGETABLE;pt->next=NULL;for(inti=0;i<4;i++){insertPage();}oldPtr=pt->next;//初始化最久的頁面cout<<"頁表初始狀態(tài)為:"<<endl;print(pt);for(intk=0;k<320;k++)//初始化作業(yè){work[k]=k;}for(intf=0;f<53;f++)//作業(yè)運(yùn)行{intm,m1,m2;m=rand()%320;if(m==319)m=318;run(m);print(pt);run(m+1);print(pt);if(m==0)m1=0;elsem1=rand()%m;run(m1);print(pt);run(m1+1);print(pt);m2=rand()%(320-m)+m-1;if(m2<0)m2=318;if(m2==319)m2=318;run(m2);print(pt);run(m2+1);print(pt);}rate=(double)count/318*100;cout<<"\n\n缺頁率為:"<<rate<<"%"<<endl;}/*構(gòu)建頁表*/voidinsertPage(){PAGETABLE*newPage;staticintid=99;staticintblockId=-1;id++;blockId++;if(blockId==4)blockId=0;newPage=(PAGETABLE*)malloc(sizeof(PAGETABLE));if(newPage!=NULL){new>address=id;new>page=-1;new>block=blockId;new>next=NULL;pushback_Page(pt,newPage);}elsecout<<"沒有內(nèi)存足夠的空間為頁表分配!"<<endl;}voidpushback_Page(PAGETABLE*queue,PAGETABLE*item){PAGETABLE*previous,*current;previous=queue;current=queue->next;while(current!=NULL){previous=current;current=current->next;}previous->next=item;}voidprint(PAGETABLE*ptr){PAGETABLE*temp;temp=ptr->next;cout<<"頁號"<<"塊號"<<endl;while(temp!=NULL){cout<<""<<temp->page<<""<<temp->block<<endl;temp=temp->next;}}voidrun(intnum){intuniversal,count;PAGETABLE*previous,*current;index=work[num]/10;//程序所在的頁號offset=work[num]%10;//頁內(nèi)的位移量previous=pt;current=previous->next;while(current!=NULL&¤t->page!=index){previous=current;current=current->next;}if(current==NULL){cout<<"\n作業(yè)"<<num<<"沒有在內(nèi)存,發(fā)生缺頁中斷"<<endl;count++;if(is_LRU==false)//FIFO算法{find_FIFO();}else//LRU算法{find_LRU();}}else{if(is_LRU==false)//FIFO算法{universal=first_memory+(current->block)*10+offset;cout<<"\n作業(yè)"<<num<<"所在內(nèi)存的物理地址為"<<universal<<endl;}else{if(current->next==NULL){universal=first_memory+(current->block)*10+offset;cout<<"\n作業(yè)"<<num<<"所在內(nèi)存的物理地址為"<<universal<<endl;}else{
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冷凍海水產(chǎn)品購銷協(xié)議
- 測量不確定度
- 八年級英語上冊 Unit 9 Can you come to my party Section B(2a-2e)教案 (新版)人教新目標(biāo)版
- 安徽省長豐縣2024-2025學(xué)年高中政治 第四課 第二框 認(rèn)識運(yùn)動 把握規(guī)律教案 新人教版必修4
- 2024年春九年級化學(xué)下冊 9 溶液 課題2 溶解度教案 (新版)新人教版
- 2024-2025學(xué)年高中數(shù)學(xué)上學(xué)期第10周 3.1.1方程的根與函數(shù)的零點教學(xué)設(shè)計
- 2023七年級英語下冊 Unit 3 How do you get to school Section A 第1課時(1a-2e)教案 (新版)人教新目標(biāo)版
- 2024-2025年新教材高中生物 第6章 第3節(jié) 細(xì)胞的衰老和死亡教案 新人教版必修1
- 預(yù)制房屋采購合同范本(2篇)
- 美味冰淇淋課件
- 政協(xié)委員提案案例3篇
- 《傳播學(xué)概論》考試復(fù)習(xí)題庫大全(含答案)
- 關(guān)愛青少年心理健康 課件(共18張ppt) 心理健康
- 放射科技能考核評分表
- isae3402如何做--dmla訪問控制
- 部編版三年級語文(上冊)標(biāo)點符號專項訓(xùn)練題(含答案)
- 《勞動關(guān)系協(xié)調(diào)員》教學(xué)計劃及教學(xué)大綱
- 中國歷史文化名城-南京課件
- 城市橋梁安全性評估規(guī)程DB50-T 273-2021
- 《人物的千姿百態(tài)》初中美術(shù)教學(xué)課件
- 尾礦庫在線自動監(jiān)測系統(tǒng)解決預(yù)案
評論
0/150
提交評論