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

下載本文檔

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

文檔簡(jiǎn)介

課程名稱:操作系統(tǒng)B實(shí)驗(yàn)工程:操作系統(tǒng)實(shí)驗(yàn)實(shí)驗(yàn)地點(diǎn):逸夫樓402、逸夫樓502教室專業(yè)班級(jí):軟件1415班學(xué)生姓名:朱偉學(xué)號(hào):2023005960指導(dǎo)教師:張俊花2023年11月28日實(shí)驗(yàn)一幾種操作系統(tǒng)的界面一、目的和要求目的本實(shí)驗(yàn)的目的是使學(xué)生熟悉1—2種操作系統(tǒng)的界面,在熟練使用機(jī)器的根底上,能了解各種操作命令和系統(tǒng)調(diào)用在系統(tǒng)中的大致工作過程。也就是通過操作系統(tǒng)的外部特征,逐步深入到操作系統(tǒng)的內(nèi)部實(shí)質(zhì)內(nèi)容中去。要求能熟練的在1—2種操作系統(tǒng)的環(huán)境下工作,學(xué)會(huì)使用各種命令,熟悉系統(tǒng)提供的各種功能,主動(dòng)而有效地使用計(jì)算機(jī)。熟悉系統(tǒng)實(shí)用程序的調(diào)用方法和各種系統(tǒng)調(diào)用模塊的功能和作用二、實(shí)驗(yàn)內(nèi)容在某種操作系統(tǒng)的環(huán)境下建立、修改、運(yùn)行、打印源程序和結(jié)果,最后撤消一個(gè)完整的程序。提示:可按下述步驟進(jìn)行編寫一個(gè)完整的源程序,通過編輯命令送入機(jī)器,建立源程序文件;編譯該源文件,建立相應(yīng)的目標(biāo)文件;編譯有錯(cuò)時(shí),再用編輯命令修改源文件,消除全部詞法和語法錯(cuò)誤;連接目標(biāo)文件,形成可執(zhí)行文件;執(zhí)行該文件,得到結(jié)果;打印輸出源程序和運(yùn)行結(jié)果;撤消本次實(shí)驗(yàn)中形成的所有文件。實(shí)驗(yàn)步驟及程序流程圖按住Windows鍵+R輸入notepad回車調(diào)出記事本。編輯一個(gè)java程序選擇另存為F:。3、按住Windows鍵+R輸入cmd回車。4、進(jìn)入Dos界面輸入F:。5、輸入dir查看java文件,使用javac命令進(jìn)行編輯四、程序清單classdemo{publicstaticvoidmain(String[]args){System.out.print("軟件1415班朱偉2023005960"); }}五、實(shí)驗(yàn)心得這次實(shí)驗(yàn)是在win7操作系統(tǒng)下進(jìn)行的,通過編譯連接一個(gè)java小程序熟悉DOS命令的使用。實(shí)驗(yàn)中用到的DOS工具:dir:列出當(dāng)前控制臺(tái)所在的路徑下的所有文件以及文件夾。javac:編譯。這次實(shí)驗(yàn),通過查找一些常用的DOS命令,進(jìn)一步熟悉了DOS命令的使用,了解了局部操作命令和系統(tǒng)調(diào)用在系統(tǒng)中的工作過程。實(shí)驗(yàn)二進(jìn)程調(diào)度程序設(shè)計(jì)一、目的和要求目的進(jìn)程是操作系統(tǒng)最重要的概念之一,進(jìn)程調(diào)度是操作系統(tǒng)的主要內(nèi)容,本實(shí)驗(yàn)要求學(xué)生獨(dú)立地用高級(jí)語言編寫一個(gè)進(jìn)程調(diào)度程序,調(diào)度算法可任意選擇或自行設(shè)計(jì),本實(shí)驗(yàn)可使學(xué)生加深對(duì)進(jìn)程調(diào)度和各種調(diào)度算法的理解。要求設(shè)計(jì)一個(gè)有幾個(gè)進(jìn)程并發(fā)執(zhí)行的進(jìn)程調(diào)度程序,每個(gè)進(jìn)程由一個(gè)進(jìn)程控制塊(PCB)表示,進(jìn)程控制塊通常應(yīng)包括下述信息:進(jìn)程名,進(jìn)程優(yōu)先數(shù),進(jìn)程需要運(yùn)行的時(shí)間,占用CPU的時(shí)間以及進(jìn)程的狀態(tài)等,且可按照調(diào)度算法的不同而增刪。調(diào)度程序應(yīng)包含2—3種不同的調(diào)度算法,運(yùn)行時(shí)可以任選一種,以利于各種方法的分析和比較。系統(tǒng)應(yīng)能顯示或打印各進(jìn)程狀態(tài)和參數(shù)的變化情況,便于觀察。二、例如題目本程序可選用優(yōu)先數(shù)法或簡(jiǎn)單輪轉(zhuǎn)法對(duì)五個(gè)進(jìn)程進(jìn)行調(diào)度。每個(gè)進(jìn)程處于運(yùn)行R(run)、就緒W(wait)和完成F(finish)三種狀態(tài)之一,并假定起始狀態(tài)都是就緒狀態(tài)W。為了便于處理,程序中進(jìn)程的運(yùn)行時(shí)間以時(shí)間片為單位計(jì)算。各進(jìn)程的優(yōu)先數(shù)或輪轉(zhuǎn)時(shí)間片數(shù)、以及進(jìn)程需要運(yùn)行的時(shí)間片數(shù),均由偽隨機(jī)數(shù)發(fā)生器產(chǎn)生。進(jìn)程控制塊結(jié)構(gòu)如表2-1所示:表2-1PCB進(jìn)程標(biāo)識(shí)符鏈指針優(yōu)先數(shù)/輪轉(zhuǎn)時(shí)間片數(shù)占用CPU時(shí)間片數(shù)進(jìn)程所需時(shí)間片數(shù)進(jìn)程狀態(tài)進(jìn)程控制塊鏈結(jié)構(gòu)如圖2-1所示:RUNHEADTAIL1┇1┇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í)間片數(shù)為0?從鏈?zhǔn)兹∫粋€(gè)進(jìn)程投入運(yùn)行生成并按進(jìn)入次序排列進(jìn)程控制塊鏈鏈?zhǔn)走M(jìn)程投入運(yùn)行時(shí)間片到,進(jìn)程時(shí)間片數(shù)減1,優(yōu)先數(shù)減3運(yùn)行進(jìn)程退出,排到進(jìn)程鏈尾部撤消該進(jìn)程鏈?zhǔn)走M(jìn)程投入運(yùn)行時(shí)間片到,進(jìn)程時(shí)間片數(shù)減1,占用CPU時(shí)間加1優(yōu)先數(shù)大于鏈?zhǔn)走M(jìn)程?進(jìn)程時(shí)間片數(shù)為0?撤消該進(jìn)程運(yùn)行進(jìn)程退出,按優(yōu)先數(shù)插入進(jìn)程鏈從鏈?zhǔn)兹∫粋€(gè)進(jìn)程投入運(yùn)行結(jié)束結(jié)束進(jìn)程隊(duì)列空?進(jìn)程隊(duì)列空?是是是否否否否否是roundrobin占用處理機(jī)時(shí)間片到?否是圖2-2進(jìn)程調(diào)度框圖(1)優(yōu)先數(shù)法。進(jìn)程就緒鏈按優(yōu)先數(shù)大小從大到小排列,鏈?zhǔn)走M(jìn)程首先投入運(yùn)行。每過一個(gè)時(shí)間片,運(yùn)行進(jìn)程所需運(yùn)行的時(shí)間片數(shù)減1,說明它已運(yùn)行了一個(gè)時(shí)間片,優(yōu)先數(shù)也減3。理由是該進(jìn)程如果在一個(gè)時(shí)間片中完成不了,優(yōu)先級(jí)應(yīng)降低一級(jí)。接著比較現(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ù)大小插入就緒鏈,且改變它們對(duì)應(yīng)的進(jìn)程狀態(tài),直至所有進(jìn)程都運(yùn)行完各自的時(shí)間片數(shù)。(2)簡(jiǎn)單輪轉(zhuǎn)法。進(jìn)程就緒鏈按各進(jìn)程進(jìn)入的先后次序排列,鏈?zhǔn)走M(jìn)程首先投入運(yùn)行。進(jìn)程每次占用處理機(jī)的輪轉(zhuǎn)時(shí)間按其重要程度登入進(jìn)程控制塊中的輪轉(zhuǎn)時(shí)間片數(shù)記錄項(xiàng)〔相應(yīng)于優(yōu)先數(shù)法的優(yōu)先數(shù)記錄項(xiàng)位置〕。每過一個(gè)時(shí)間片,運(yùn)行進(jìn)程占用處理機(jī)的時(shí)間片數(shù)加1,然后比較占用處理機(jī)的時(shí)間片數(shù)是否與該進(jìn)程的輪轉(zhuǎn)時(shí)間片數(shù)相等,假設(shè)相等說明已到達(dá)輪轉(zhuǎn)時(shí)間,應(yīng)將現(xiàn)運(yùn)行進(jìn)程排到就緒鏈末尾,調(diào)度鏈?zhǔn)走M(jìn)程占用處理機(jī),且改變它們的進(jìn)程狀態(tài),直至所有進(jìn)程完成各自的時(shí)間片。三、實(shí)驗(yàn)代碼:#include<stdio.h>#include<stdlib.h>#definefurthest5structprocess/*PCBSTRUCTURE*/{intid;intpriority;intcputime;intalltime;charstate;intnext;}prochain[furthest-1];intprocnum;intrand();intalgo;intrun,head,tail,j;voidprint();voidinsert(intq);voidinsert2();voidtimesch();voidinit();voidprisch();intmain()/*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"); getchar();}voidprint()/*PRINTTHERUNNINGPROCESS,WAITING QUEUEANDPCBSEQUENCELIST*/{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");}voidinsert(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;}voidinsert2()/*PUTAPROCESSONTOTHETAILOFTHEQUEUE*/{ prochain[tail].next=run; tail=run; prochain[run].next=0;}voidinit()/*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();}voidprisch()/*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(); }}voidtimesch()/*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();四、實(shí)驗(yàn)結(jié)果:〔1〕〔2〕實(shí)驗(yàn)心得:通過本次實(shí)驗(yàn),加深了對(duì)進(jìn)程調(diào)度和調(diào)度算法的理解。對(duì)于簡(jiǎn)單輪轉(zhuǎn)法,既將全部的進(jìn)程按照進(jìn)入的先后順序排成一個(gè)就緒隊(duì)列,設(shè)置每隔一段時(shí)間后將CPU分配給隊(duì)列中新的隊(duì)首進(jìn)程,這樣就可以保證就緒隊(duì)列中的所有進(jìn)程在確定的時(shí)間段內(nèi)都能獲得一個(gè)時(shí)間片的處理機(jī)時(shí)間。而對(duì)于優(yōu)先數(shù)法,本次試驗(yàn)中使用了動(dòng)態(tài)優(yōu)先數(shù)對(duì)進(jìn)程進(jìn)行排序,即就緒隊(duì)列按優(yōu)先數(shù)從大到小進(jìn)行排列,而各進(jìn)程的優(yōu)先數(shù)隨著進(jìn)程的推進(jìn)而改變,以到達(dá)獲取更好的調(diào)度性能的目的。簡(jiǎn)單輪轉(zhuǎn)法有效的保證了隊(duì)列中的所有進(jìn)程都能分配到處理機(jī),而優(yōu)先數(shù)法那么可防止一個(gè)長(zhǎng)作業(yè)長(zhǎng)期的壟斷處理機(jī)。實(shí)驗(yàn)三存儲(chǔ)治理程序設(shè)計(jì)一、目的和要求目的存儲(chǔ)治理的主要功能之一是合理地分配主存空間。請(qǐng)求頁(yè)式治理是一種常用的虛擬存儲(chǔ)治理技術(shù)。本實(shí)驗(yàn)的目的是通過請(qǐng)求頁(yè)式存儲(chǔ)治理中頁(yè)面置換算法的模擬設(shè)計(jì),來了解虛擬存儲(chǔ)技術(shù)的特點(diǎn),掌握請(qǐng)求頁(yè)式存儲(chǔ)治理的頁(yè)面置換算法。要求模擬頁(yè)式虛擬存儲(chǔ)治理中硬件的地址轉(zhuǎn)換和缺頁(yè)中斷的處理過程,并用先進(jìn)先出調(diào)度算法〔FIFO〕處理缺頁(yè)中斷。二、提示為了裝入一個(gè)頁(yè)面而必須調(diào)出一頁(yè)時(shí),如果被選中調(diào)出的頁(yè)面在執(zhí)行中沒有修改正,那么不必把該頁(yè)重新寫到磁盤上〔因磁盤上已有副本〕。因此,在頁(yè)表中可以增加是否修改正的標(biāo)志,當(dāng)執(zhí)行“存〞指令、“寫〞指令時(shí)把對(duì)應(yīng)頁(yè)的修改標(biāo)志置成“1〞,表示該頁(yè)修改正,否那么為“0〞,表示該頁(yè)未修改正。頁(yè)表格式如表3-1所示。表3-1頁(yè)表格式頁(yè)號(hào)標(biāo)志主存塊號(hào)修改標(biāo)志磁盤上的位置設(shè)計(jì)一個(gè)地址轉(zhuǎn)換程序來模擬硬件的地址轉(zhuǎn)換和缺頁(yè)中斷處理過程。當(dāng)訪問的頁(yè)在主存時(shí)那么形成絕對(duì)地址,但不去模擬指令的執(zhí)行,可用輸出轉(zhuǎn)換后的絕對(duì)地址來表示一條指令已完成。當(dāng)訪問的頁(yè)不在主存時(shí)那么輸出“*該頁(yè)頁(yè)號(hào)〞來表示硬件產(chǎn)生了一次缺頁(yè)中斷。模擬地址轉(zhuǎn)換的程序流程如圖3-1所示。編制一個(gè)FIFO頁(yè)面調(diào)度程序。FIFO頁(yè)面調(diào)度算法總是先調(diào)出作業(yè)中最先進(jìn)入主存的那一頁(yè),因此,可以用一個(gè)數(shù)組來構(gòu)成頁(yè)號(hào)隊(duì)列。數(shù)組中每個(gè)元素是該作業(yè)已在主存的頁(yè)面號(hào),假定分配給作業(yè)的主存塊數(shù)為m,且該作業(yè)開始的m頁(yè)已裝入主存,那么數(shù)組可由m個(gè)元素組成:P[0],P[1],…,P[m-1]它們的初值為P[0]∶=0,P[1]∶=1,…,P[m-1]∶=m-1用一指針k指示當(dāng)要裝入新頁(yè)時(shí)應(yīng)調(diào)出的頁(yè)在數(shù)組的位置,k的初值為“0〞。三、實(shí)驗(yàn)報(bào)告內(nèi)容要求編程實(shí)現(xiàn)前述功能。jj∶=P[k]j頁(yè)的修改標(biāo)志=1?輸出“OUTj〞P[k]∶=Lk∶=(k+1)modm修改頁(yè)表輸出“INL〞取一條指令開始頁(yè)標(biāo)志=1?輸出絕對(duì)地址取一條指令輸出“﹡頁(yè)號(hào)〞取指令中訪問的頁(yè)號(hào)=>L查頁(yè)表形成絕對(duì)地址置L頁(yè)修改標(biāo)志〞1〞結(jié)束是〞存〞指令?有后繼指令?否(產(chǎn)生缺頁(yè)中斷)是否否否是是模擬硬件地址轉(zhuǎn)換模擬FIFO頁(yè)面調(diào)度是圖3-1地址轉(zhuǎn)換和FIFO頁(yè)面調(diào)度流程當(dāng)產(chǎn)生缺頁(yè)中斷后,操作系統(tǒng)總是選擇P[k]所指出的頁(yè)面調(diào)出,然后執(zhí)行P[k]∶=要裝入的新頁(yè)頁(yè)號(hào)k∶=〔k+1〕modm在實(shí)驗(yàn)中不必實(shí)際地啟動(dòng)磁盤執(zhí)行調(diào)出一頁(yè)和裝入一頁(yè)的工作,而用輸出“OUT調(diào)出的頁(yè)號(hào)〞和“IN要裝入的新頁(yè)頁(yè)號(hào)〞來模擬一次調(diào)出和裝入的過程。模擬程序的流程見圖3-1。假定主存的每塊長(zhǎng)度為1024個(gè)字節(jié),現(xiàn)有一個(gè)共7頁(yè)的作業(yè),其副本已在磁盤上。系統(tǒng)為該作業(yè)分配了4塊主存塊,且該作業(yè)的第0頁(yè)至第3頁(yè)已經(jīng)裝入主存,其余3頁(yè)尚未裝入主存,該作業(yè)的頁(yè)表見表3-2所示。表3-2作業(yè)的頁(yè)表頁(yè)號(hào)標(biāo)志主存塊號(hào)修改標(biāo)志在磁盤上的位置0150011118001221900133110021400022500023600121如果該作業(yè)依次執(zhí)行的指令序列如表3-3所示。表3-3作業(yè)依次執(zhí)行的指令序列操作頁(yè)號(hào)頁(yè)內(nèi)地址操作頁(yè)號(hào)頁(yè)內(nèi)地址+0070移位4053+1050+5023×2015存1037存3021取2078取0056+4001-6040存6084依次執(zhí)行上述的指令序列來調(diào)試你所設(shè)計(jì)的程序〔僅模擬指令的執(zhí)行,不必考慮指令序列中具體操作的執(zhí)行〕為了檢查程序的正確性,可自行確定假設(shè)干組指令序列,運(yùn)行設(shè)計(jì)的程序,核對(duì)執(zhí)行結(jié)果。四、代碼:#include<iostream>#include<stdlib.h>#include<time.h>usingnamespacestd;structpageTable//定義頁(yè)表{intaddress;//地址intpage;//頁(yè)號(hào)intblock;//塊號(hào)structpageTable*next;};typedefstructpageTablePAGETABLE;PAGETABLE*pt;constintfirst_memory=1000;//內(nèi)存首地址intwork[320];//作業(yè)intindex,offset;//index是作業(yè)的頁(yè)號(hào),offset為頁(yè)內(nèi)偏移地址PAGETABLE*oldPtr;//minPtr指向駐留時(shí)間最久的頁(yè)intcount1;//記數(shù)器,用于記錄發(fā)生的缺頁(yè)數(shù)boolis_LRU=false;//是否是LRU算法voidinit();voidinsertPage();voidpushback_Page(PAGETABLE*,PAGETABLE*);voidprint(PAGETABLE*);voidrun(int);voidfind_FIFO();voidfind_LRU();voidmain(void){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)造頁(yè)表和內(nèi)存 }elseif(i==2) { cout<<"\nThisisaexampleforLRU:"<<endl; is_LRU=true; init();//構(gòu)造頁(yè)表和內(nèi)存 }elseif(i==0) { exit(1); } }}voidinit(){doublerate;intcount=0;//記數(shù)器初值為0 srand(time(NULL)); pt=newPAGETABLE; pt->next=NULL;for(inti=0;i<4;i++) { insertPage(); } oldPtr=pt->next;//初始化最久的頁(yè)面 cout<<"頁(yè)表初始狀態(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;else m1=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缺頁(yè)率為:"<<rate<<"%"<<endl;}/*構(gòu)建頁(yè)表*/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); }else cout<<"沒有內(nèi)存足夠的空間為頁(yè)表分配!"<<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<<"頁(yè)號(hào)"<<"塊號(hào)"<<endl;while(temp!=NULL) { cout<<""<<temp->page<<""<<temp->block<<endl; temp=temp->next; }}voidrun(intnum){intuniversal; PAGETABLE*previous,*current; index=work[num]/10;//程序所在的頁(yè)號(hào) offset=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論