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

下載本文檔

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

文檔簡(jiǎn)介

1、課程名稱(chēng): 操作系統(tǒng)B 實(shí)驗(yàn)項(xiàng)目: 操作系統(tǒng)實(shí)驗(yàn) 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)樓209 專(zhuān)業(yè)班級(jí): 軟件 學(xué)生姓名: 學(xué)號(hào): 指導(dǎo)教師: 方昀 2015 年 11 月 30目 錄實(shí)驗(yàn)一 幾種操作系統(tǒng)的界面1一、目的和要求1二、內(nèi)容1實(shí)驗(yàn)二 進(jìn)程調(diào)度程序設(shè)計(jì)2一、目的和要求2二、示例2實(shí)驗(yàn)三 存儲(chǔ)管理程序設(shè)計(jì)9一、目的和要求9二、提示9實(shí)驗(yàn)一 幾種操作系統(tǒng)的界面一、目的和要求(一) 目的本實(shí)驗(yàn)的目的是使學(xué)生熟悉12種操作系統(tǒng)的界面,在熟練使用機(jī)器的基礎(chǔ)上,能了解各種操作命令和系統(tǒng)調(diào)用在系統(tǒng)中的大致工作過(guò)程。也就是通過(guò)操作系統(tǒng)的外部特征,逐步深入到操作系統(tǒng)的內(nèi)部實(shí)質(zhì)內(nèi)容中去。(二) 要求1. 能熟練的在12種

2、操作系統(tǒng)的環(huán)境下工作,學(xué)會(huì)使用各種命令,熟悉系統(tǒng)提供的各種功能,主動(dòng)而有效地使用計(jì)算機(jī)。2. 熟悉系統(tǒng)實(shí)用程序的調(diào)用方法和各種系統(tǒng)調(diào)用模塊的功能和作用二、內(nèi)容在某種操作系統(tǒng)的環(huán)境下建立、修改、運(yùn)行、打印源程序和結(jié)果,最后撤消一個(gè)完整的程序。提示:可按下述步驟進(jìn)行1 編寫(xiě)一個(gè)完整的源程序,通過(guò)編輯命令送入機(jī)器,建立源程序文件;2 編譯該源文件,建立相應(yīng)的目標(biāo)文件;3 編譯有錯(cuò)時(shí),再用編輯命令修改源文件,消除全部詞法和語(yǔ)法錯(cuò)誤;4 連接目標(biāo)文件,形成可執(zhí)行文件;5 執(zhí)行該文件,得到結(jié)果;6 打印輸出源程序和運(yùn)行結(jié)果;7 撤消本次實(shí)驗(yàn)中形成的所有文件。三、實(shí)驗(yàn)步驟及程序流程圖1)Dos命令行。1.

3、按住Windows鍵+R輸入notepad回車(chē)調(diào)出記事本。2. 編輯一個(gè)java程序選擇另存為d:。3. 按住Windows鍵+R輸入cmd回車(chē)。4. 進(jìn)入Dos界面鍵入d:。5. 輸入dir查看java文件,使用javac命令進(jìn)行編輯四、程序清單(據(jù)情況而定)class demo public static void main(String args) System.out.print("這是一個(gè)java例子"); 五、討論、心得本次實(shí)驗(yàn)是在Windows10系統(tǒng)下進(jìn)行的,通過(guò)對(duì)一個(gè)Java小程序的編譯連接熟悉對(duì)Win10的操作以及DOS命令的使用。試驗(yàn)中使用到的DOS工

4、具: 查看目錄:dir 編輯:javac 通過(guò)本次實(shí)驗(yàn),進(jìn)一步熟悉了對(duì)操作系統(tǒng)尤其是DOS 命令的使用,初步了解了部分操作命令和系統(tǒng)調(diào)用在系統(tǒng)中的大致工作過(guò)程,通過(guò)實(shí)踐也加深了對(duì)老師課堂一些所講知識(shí)的理解。實(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í)語(yǔ)言編寫(xiě)一個(gè)進(jìn)程調(diào)度程序,調(diào)度算法可任意選擇或自行設(shè)計(jì),本實(shí)驗(yàn)可使學(xué)生加深對(duì)進(jìn)程調(diào)度和各種調(diào)度算法的理解。(二) 要求1 設(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)

5、程需要運(yùn)行的時(shí)間,占用CPU的時(shí)間以及進(jìn)程的狀態(tài)等,且可按照調(diào)度算法的不同而增刪。2 調(diào)度程序應(yīng)包含23種不同的調(diào)度算法,運(yùn)行時(shí)可以任選一種,以利于各種方法的分析和比較。3 系統(tǒng)應(yīng)能顯示或打印各進(jìn)程狀態(tài)和參數(shù)的變化情況,便于觀察。二、示例1 題目 本程序可選用優(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-1 PCB

6、 進(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所示: RUN HEAD TAIL 圖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所示。圖2-2 進(jìn)程調(diào)度框圖 (1)優(yōu)先數(shù)法。 進(jìn)程就緒鏈按優(yōu)先數(shù)大小從大到小排列,鏈?zhǔn)走M(jìn)程首先投入運(yùn)行。每過(guò)一個(gè)時(shí)間片,運(yùn)行進(jìn)程所需運(yùn)行的時(shí)間片數(shù)減1,說(shuō)明它已運(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ù),如果仍

7、是現(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)位置)。每過(guò)一個(gè)時(shí)間片,運(yùn)行進(jìn)程占用處理機(jī)的時(shí)間片數(shù)加1,然后比較占用處理機(jī)的時(shí)間片數(shù)是否與該進(jìn)程的輪轉(zhuǎn)時(shí)間片數(shù)相等,若相等說(shuō)明已到達(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)程完成

8、各自的時(shí)間片。 三、代碼:#include <stdio.h> #include <stdlib.h> #define furthest 5 struct process /*PCB STRUCTURE*/int id;int priority;int cputime;int alltime;char state;int next;prochainfurthest - 1;int procnum;int rand();int algo;int run, head, tail, j;void print();void insert(int q);void insert2(

9、);void timesch();void init();void prisch(); int main() /*MAIN PROGRAM*/agan: printf("type the algorithm is (1:RR,2:PRIO):");scanf("%d", &algo);if (algo = 2)printf("output of priority.n");init();prisch();elseif (algo = 1)printf("output of round robin.n");in

10、it();timesch();elseprintf("try again,pleasen");goto agan;for (j = 1; j <= 40; j+)printf("=");printf("nn");for (j = 1; j <= 40; j+)printf("=");printf("nn");printf("system finishedn");getchar();void print() /*PRINT THE RUNNING PROCESS,W

11、AITING QUEUE AND PCB SEQUENCE LIST*/int k, p;for (k = 1; k <= 40; k+)printf("=");printf("nrunning proc. ");printf("waiting queue.");printf("n %d ", prochainrun.id);p = head;while (p != 0)printf("%5d", p);p = prochainp.next;printf("n");fo

12、r (k = 1; k <= 40; k+)printf("=");printf("n");printf(" id ");for (k = 1; k<furthest + 1; k+)printf("%5d", prochaink.id);printf("n");printf("priority ");for (k = 1; k<furthest + 1; k+)printf("%5d", prochaink.priority);prin

13、tf("n");printf("cputime ");for (k = 1; k<furthest + 1; k+)printf("%5d", prochaink.cputime);printf("n");printf("alltime ");for (k = 1; k<furthest + 1; k+)printf("%5d", prochaink.alltime);printf("n");printf("state ")

14、;for (k = 1; k<furthest + 1; k+)printf("%5c", prochaink.state);printf("n");printf("next ");for (k = 1; k<furthest + 1; k+)printf("%5d", prochaink.next);printf("n");void insert(int q) /*INSERT A PROCESS*/int p, s;p = head;s = prochainhead.next;w

15、hile (prochainq.priority<prochains.priority) && (s != 0)p = s;s = prochains.next;prochainp.next = q;prochainq.next = s;void insert2() /*PUT A PROCESS ONTO THE TAIL OF THE QUEUE*/prochaintail.next = run;tail = run;prochainrun.next = 0;void init() /*CREATE A WAITING QUEUE*/int i;head = 0;if

16、 (algo = 2)for (i = 1; i<furthest + 1; i+)prochaini.id = i;prochaini.priority = (rand() + 11) % 41;prochaini.cputime = 0;prochaini.alltime = (rand() + 1) % 7;prochaini.state = 'W'prochaini.next = 0;if (prochaini.priority<prochainhead.priority) && (head != 0)insert(prochaini.id)

17、;elseprochaini.next = head;head = prochaini.id;elsefor (i = 1; i<furthest + 1; i+)prochaini.id = i;prochaini.priority = (rand() + 1) % 3 + 1;prochaini.cputime = 0;prochaini.alltime = (rand() + 1) % 7;prochaini.state = 'W'prochaini.next = (i + 1) % (furthest + 1);head = 1;tail = furthest;p

18、rochainfurthest.next = 0;run = head;prochainrun.state = 'R'head = prochainhead.next;prochainrun.next = 0;print();void prisch() /*THE PROCESS WITH PRIO ALGORITHM*/while (run != 0)prochainrun.cputime += 1;prochainrun.priority -= 3;prochainrun.alltime -= 1;if (prochainrun.alltime = 0)prochainru

19、n.state = 'F'prochainrun.next = 0;if (head != 0)run = head;prochainrun.state = 'R'head = prochainhead.next;elseprochain0.id = prochainrun.id;run = 0;elseif (prochainrun.priority< prochainhead.priority) && (head != 0)prochainrun.state = 'W'insert(run);run = head;pro

20、chainrun.state = 'R'head = prochainhead.next;print();void timesch() /*THE PROCESS WITH RR ALRORITHM*/while (run != 0)prochainrun.alltime -= 1;prochainrun.cputime += 1;if (prochainrun.alltime = 0)prochainrun.state = 'F'prochainrun.next = 0;if (head != 0)run = head;prochainrun.state =

21、'R'head = prochainhead.next;elseprochain0.id = prochainrun.id;run = 0;elseif (prochainrun.cputime = prochainrun.priority) && (head != 0)prochainrun.state = 'W'prochainrun.cputime = 0;insert2();run = head;prochainrun.state = 'R'head = prochainhead.next;print();四、結(jié)果:五、感

22、想: 本次試驗(yàn)的目的在于加深對(duì)進(jìn)程調(diào)度和各種調(diào)度算法的理解,故通過(guò)對(duì)優(yōu)先數(shù)法和簡(jiǎn)單輪轉(zhuǎn)法編輯程序?qū)嶋H運(yùn)行來(lái)加深對(duì)這兩種方法的理解。 對(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ī)。

23、通過(guò)本次實(shí)驗(yàn)對(duì)試驗(yàn)中所涉及的兩種算法的理解進(jìn)一步加深,有效復(fù)習(xí)了課堂上所講到的相關(guān)知識(shí)。實(shí)驗(yàn)三 存儲(chǔ)管理程序設(shè)計(jì)一、目的和要求(一) 目的存儲(chǔ)管理的主要功能之一是合理地分配主存空間。請(qǐng)求頁(yè)式管理是一種常用的虛擬存儲(chǔ)管理技術(shù)。本實(shí)驗(yàn)的目的是通過(guò)請(qǐng)求頁(yè)式存儲(chǔ)管理中頁(yè)面置換算法的模擬設(shè)計(jì),來(lái)了解虛擬存儲(chǔ)技術(shù)的特點(diǎn),掌握請(qǐng)求頁(yè)式存儲(chǔ)管理的頁(yè)面置換算法。(二) 要求模擬頁(yè)式虛擬存儲(chǔ)管理中硬件的地址轉(zhuǎn)換和缺頁(yè)中斷的處理過(guò)程,并用先進(jìn)先出調(diào)度算法(FIFO)處理缺頁(yè)中斷。二、提示(1) 為了裝入一個(gè)頁(yè)面而必須調(diào)出一頁(yè)時(shí),如果被選中調(diào)出的頁(yè)面在執(zhí)行中沒(méi)有修改過(guò),則不必把該頁(yè)重新寫(xiě)到磁盤(pán)上(因磁盤(pán)上已有副本)。

24、因此,在頁(yè)表中可以增加是否修改過(guò)的標(biāo)志,當(dāng)執(zhí)行“存”指令、“寫(xiě)”指令時(shí)把對(duì)應(yīng)頁(yè)的修改標(biāo)志置成“1”,表示該頁(yè)修改過(guò),否則為“0”,表示該頁(yè)未修改過(guò)。頁(yè)表格式如表3-1所示。表3-1 頁(yè)表格式 頁(yè) 號(hào) 標(biāo) 志 主存塊號(hào) 修改標(biāo)志 磁盤(pán)上的位置(2) 設(shè)計(jì)一個(gè)地址轉(zhuǎn)換程序來(lái)模擬硬件的地址轉(zhuǎn)換和缺頁(yè)中斷處理過(guò)程。當(dāng)訪問(wèn)的頁(yè)在主存時(shí)則形成絕對(duì)地址,但不去模擬指令的執(zhí)行,可用輸出轉(zhuǎn)換后的絕對(duì)地址來(lái)表示一條指令已完成。當(dāng)訪問(wèn)的頁(yè)不在主存時(shí)則輸出“*該頁(yè)頁(yè)號(hào)”來(lái)表示硬件產(chǎn)生了一次缺頁(yè)中斷。模擬地址轉(zhuǎn)換的程序流程如圖3-1所示。(3) 編制一個(gè)FIFO頁(yè)面調(diào)度程序。FIFO頁(yè)面調(diào)度算法總是先調(diào)出作業(yè)中最先進(jìn)入

25、主存的那一頁(yè),因此,可以用一個(gè)數(shù)組來(lái)構(gòu)成頁(yè)號(hào)隊(duì)列。數(shù)組中每個(gè)元素是該作業(yè)已在主存的頁(yè)面號(hào),假定分配給作業(yè)的主存塊數(shù)為m,且該作業(yè)開(kāi)始的m頁(yè)已裝入主存,則數(shù)組可由m個(gè)元素組成:P0,P1,Pm-1它們的初值為P0=0,P1=1,Pm-1= m-1用一指針k指示當(dāng)要裝入新頁(yè)時(shí)應(yīng)調(diào)出的頁(yè)在數(shù)組的位置,k的初值為“0”。圖3-1 地址轉(zhuǎn)換和FIFO頁(yè)面調(diào)度流程當(dāng)產(chǎn)生缺頁(yè)中斷后,操作系統(tǒng)總是選擇Pk所指出的頁(yè)面調(diào)出,然后執(zhí)行Pk=要裝入的新頁(yè)頁(yè)號(hào)k=(k+1)mod m在實(shí)驗(yàn)中不必實(shí)際地啟動(dòng)磁盤(pán)執(zhí)行調(diào)出一頁(yè)和裝入一頁(yè)的工作,而用輸出“OUT調(diào)出的頁(yè)號(hào)”和“IN要裝入的新頁(yè)頁(yè)號(hào)”來(lái)模擬一次調(diào)出和裝入的過(guò)程

26、。模擬程序的流程見(jiàn)圖3-1。(1) 假定主存的每塊長(zhǎng)度為1024個(gè)字節(jié),現(xiàn)有一個(gè)共7頁(yè)的作業(yè),其副本已在磁盤(pán)上。系統(tǒng)為該作業(yè)分配了4塊主存塊,且該作業(yè)的第0頁(yè)至第3頁(yè)已經(jīng)裝入主存,其余3頁(yè)尚未裝入主存,該作業(yè)的頁(yè)表見(jiàn)表3-2所示。表3-2 作業(yè)的頁(yè)表 頁(yè)號(hào) 標(biāo)志 主存塊號(hào) 修改標(biāo)志 在磁盤(pán)上的位置 0 1 5 0 011 1 1 8 0 012 2 1 9 0 013 3 1 1 0 021 4 0 0 022 5 0 0 023 6 0 0 121如果該作業(yè)依次執(zhí)行的指令序列如表3-3所示。表3-3 作業(yè)依次執(zhí)行的指令序列 操作 頁(yè)號(hào) 頁(yè)內(nèi)地址 操作 頁(yè)號(hào) 頁(yè)內(nèi)地址 + 0 070 移位 4

27、 053 + 1 050 + 5 023 × 2 015 存 1 037 存 3 021 取 2 078 取 0 056 + 4 001 - 6 040 存 6 084依次執(zhí)行上述的指令序列來(lái)調(diào)試你所設(shè)計(jì)的程序(僅模擬指令的執(zhí)行,不必考慮指令序列中具體操作的執(zhí)行)(2) 為了檢查程序的正確性,可自行確定若干組指令序列,運(yùn)行設(shè)計(jì)的程序,核對(duì)執(zhí)行結(jié)果。三、代碼:#include <iostream>#include <stdlib.h>#include <time.h>using namespace std;struct pageTable/定義頁(yè)表i

28、nt address;/地址int page;/頁(yè)號(hào)int block;/塊號(hào)struct pageTable *next;typedef struct pageTable PAGETABLE;PAGETABLE *pt;const int first_memory = 1000;/內(nèi)存首地址int work320;/作業(yè)int index, offset;/index是作業(yè)的頁(yè)號(hào),offset為頁(yè)內(nèi)偏移地址PAGETABLE*oldPtr;/minPtr指向駐留時(shí)間最久的頁(yè)int count1;/記數(shù)器,用于記錄發(fā)生的缺頁(yè)數(shù)bool is_LRU = false;/是否是LRU算法void

29、init();void insertPage();void pushback_Page(PAGETABLE *, PAGETABLE *);void print(PAGETABLE *);void run(int);void find_FIFO();void find_LRU();void main(void)int i = 0;while (1)cout << "nPlease select a number(1,2,0)" << endl;cout << " 1-先進(jìn)先出算法(FIFO)" << end

30、l;cout << " 2-最久未使用算法(LRU)" << endl;cout << " 0-程序結(jié)束" << endl;cin >> i;if (i = 1)cout << "nThis is a example for FIFO:" << endl;is_LRU = false;init();/構(gòu)造頁(yè)表和內(nèi)存else if (i = 2)cout << "nThis is a example for LRU:" &

31、lt;< endl;is_LRU = true;init();/構(gòu)造頁(yè)表和內(nèi)存else if (i = 0)exit(1);void init()double rate; int count = 0;/記數(shù)器初值為0srand(time(NULL);pt = new PAGETABLE;pt->next = NULL;for (int i = 0; i<4; i+)insertPage();oldPtr = pt->next;/初始化最久的頁(yè)面cout << "頁(yè)表初始狀態(tài)為:" << endl;print(pt);for (

32、int k = 0; k<320; k+)/初始化作業(yè)workk = k;for (int f = 0; f<53; f+)/作業(yè)運(yùn)行int m, 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 =

33、 319)m2 = 318;run(m2);print(pt);run(m2 + 1);print(pt);rate = (double)count / 318 * 100;cout << "nn 缺頁(yè)率為:" << rate << "%" << endl;/* 構(gòu)建頁(yè)表*/void insertPage()PAGETABLE *newPage;static int id = 99;static int blockId = -1;id+;blockId+;if (blockId = 4)blockId =

34、0;newPage = (PAGETABLE *)malloc(sizeof(PAGETABLE);if (newPage != NULL)newPage->address = id;newPage->page = -1;newPage->block = blockId;newPage->next = NULL;pushback_Page(pt, newPage);elsecout << "沒(méi)有內(nèi)存足夠的空間為頁(yè)表分配!" << endl;void pushback_Page(PAGETABLE *queue, PAGETAB

35、LE *item)PAGETABLE *previous, *current;previous = queue;current = queue->next;while (current != NULL)previous = current;current = current->next;previous->next = item;void print(PAGETABLE *ptr)PAGETABLE *temp;temp = ptr->next;cout << " 頁(yè)號(hào) " << " 塊號(hào) " <&l

36、t; endl;while (temp != NULL)cout << " " << temp->page << " " << temp->block << endl;temp = temp->next;void run(int num)int universal;PAGETABLE *previous, *current;index = worknum / 10;/程序所在的頁(yè)號(hào)offset = worknum % 10;/頁(yè)內(nèi)的位移量previous = pt;curren

37、t = previous->next;while (current != NULL && current->page != index)previous = current;current = current->next;if (current = NULL)cout << "n作業(yè)" << num << "沒(méi)有在內(nèi)存,發(fā)生缺頁(yè)中斷" << endl;count1+;if (is_LRU = false)/FIFO算法find_FIFO();else/LRU算法find_L

38、RU();elseif (is_LRU = false)/FIFO算法universal = first_memory + (current->block) * 10 + offset;cout << "n作業(yè)" << num << "所在內(nèi)存的物理地址為 " << universal << endl;elseif (current->next = NULL)universal = first_memory + (current->block) * 10 + offset;co

39、ut << "n作業(yè)" << num << "所在內(nèi)存的物理地址為 " << universal << endl;elsePAGETABLE *temp, *ptr;temp = current;previous->next = current->next;ptr = pt->next;while (ptr->next != NULL)ptr = ptr->next;ptr->next = temp;temp->next = NULL;universal = first_memory + (temp->block) * 10 + offset;cout << "n作業(yè)" << num << "所在內(nèi)存的物理地址為 " << universal << endl;void find_FIFO()/先進(jìn)先出頁(yè)面置換算法PAGETABLE *pos;int universal;pos = pt->next;if (oldPtr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論