山東大學(xué)大二下學(xué)期操作系統(tǒng)實驗報告_第1頁
山東大學(xué)大二下學(xué)期操作系統(tǒng)實驗報告_第2頁
山東大學(xué)大二下學(xué)期操作系統(tǒng)實驗報告_第3頁
山東大學(xué)大二下學(xué)期操作系統(tǒng)實驗報告_第4頁
山東大學(xué)大二下學(xué)期操作系統(tǒng)實驗報告_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

山東大學(xué)大二下學(xué)期操作系統(tǒng)實驗報告操作系統(tǒng)實驗報告計算機科學(xué)與技術(shù)學(xué)院計算機科學(xué)與技術(shù)專業(yè)2021級X班目錄一、進程控制實驗31.1實驗?zāi)康?1.2示例實驗31.2.1實驗內(nèi)容31.3獨立實驗41.3.1實驗內(nèi)容41.3.2實驗步驟41.3.3實驗演示結(jié)果71.3.4實驗代碼7二、進程調(diào)度算法實驗92.1實驗?zāi)康?2.2示例實驗102.2.1實驗內(nèi)容102.2.2實驗演示結(jié)果102.3獨立實驗112.3.1實驗內(nèi)容112.3.2實驗步驟122.3.3實驗演示結(jié)果142.3.4實驗代碼14二、進程同步實驗163.1實驗?zāi)康?63.2示例實驗163.2.1實驗內(nèi)容163.2.2實驗演示結(jié)果173.3獨立實驗173.3.1實驗內(nèi)容173.3.2實驗步驟183.3.3實驗演示結(jié)果213.3.4實驗代碼21三、內(nèi)存頁面置換算法實驗314.1實驗?zāi)康?14.2示例實驗314.2.1實驗內(nèi)容314.2.2實驗演示結(jié)果324.3獨立實驗324.3.1實驗內(nèi)容324.3.2實驗步驟334.3.3實驗演示結(jié)果354.3.4實驗代碼37四、磁盤移臂調(diào)度算法實驗485.1實驗?zāi)康?85.2示例實驗495.2.1實驗內(nèi)容495.2.2實驗演示結(jié)果505.3獨立實驗505.3.1實驗內(nèi)容505.3.2實驗步驟515.3.3實驗演示結(jié)果545.3.4實驗代碼54一、進程控制實驗1.1實驗?zāi)康募由顚τ谶M程并發(fā)執(zhí)行概念的理解。實踐并發(fā)進程的創(chuàng)建和控制方法。觀察和體驗進程的動態(tài)特性。進一步理解進程生命期期間創(chuàng)建、變換、撤銷狀態(tài)變換的過程。掌握進程控制的方法,了解父子進程間的控制和協(xié)作關(guān)系。練習(xí)Linux系統(tǒng)中進程創(chuàng)建與控制有關(guān)的系統(tǒng)調(diào)用的編程和調(diào)試技術(shù)。

1.2示例實驗1.2.1實驗內(nèi)容以下實驗示例程序應(yīng)實現(xiàn)一個類似shell子命令的功能,它可以從執(zhí)行程序中啟動另一個新的子進程并執(zhí)行一個新的命令和其并發(fā)執(zhí)行。1.2.2實驗演示結(jié)果1.3獨立實驗1.3.1實驗內(nèi)容參考以上示例程序中建立并發(fā)進程的方法,編寫一個父子協(xié)作進程,父進程創(chuàng)建一個子進程并控制它每隔3秒顯示一次當(dāng)前目錄中的文件名列表。

1.3.2實驗步驟

1.3.2.1算法設(shè)計通過進程間的通訊,先創(chuàng)建一個父進程一個子進程,父進程沉睡3秒,子進程作為當(dāng)前父進程再次創(chuàng)建一個他的子進程,當(dāng)前子進程執(zhí)行顯示當(dāng)前目錄文件列表功能,執(zhí)行execve方法后死亡。While

在死循環(huán)里無限進行當(dāng)前操作。即達到父進程創(chuàng)建一個子進程并控制它每隔3秒顯示一次當(dāng)前目錄中的文件名列表的要求。

1.3.2.2開發(fā)調(diào)試過程打開一終端命令行窗體,新建一個文件夾,在該文件夾中建立名為pctrl.c的C語言程序;

再建立以下名為pctrl.h的C語言頭文件;

建立項目管理文件Makefile;

輸入make命令編譯連接生成可執(zhí)行的pctl程序;

執(zhí)行pctl程序;

再次執(zhí)行帶有子進程指定執(zhí)行命令的pctl程序。

1.3.2.3思考與分析1.反映的進程的特征和功能,在真實的操作系統(tǒng)中是怎樣實現(xiàn)和反映出教材中講解的進程的生命期、進程的實體和進程狀態(tài)控制的。對于進程概念和并發(fā)概念有哪些新的理解和認識?子進程是如何創(chuàng)建和執(zhí)行新程序的?答:進程是一個可并發(fā)執(zhí)行的程序在某數(shù)據(jù)集上的一次運行,是程序的一次運行過程。而程序只是進程的一個組成部分,進程是程序的執(zhí)行過程。程序是靜態(tài)的指令集合,而進程是動態(tài)的過程實體,是動態(tài)的產(chǎn)生、發(fā)展和消失。

此外所謂的進程并發(fā)執(zhí)行是在宏觀上并發(fā),而在微觀上交替執(zhí)行。每個進程都用一個唯一的整數(shù)形式的進程標(biāo)識符來標(biāo)識,通過fork系統(tǒng)調(diào)用,可創(chuàng)建新進程。新進程通過復(fù)制原來進程的地址空間而成。這種機制允許父子進程方便的進行通信。

系統(tǒng)調(diào)用fork,得到的子進程實際上是父進程的克隆體,要執(zhí)行不同的新程序要使用系統(tǒng)調(diào)用exec,以用新程序來取代進程的內(nèi)存空間。其功能是根據(jù)參數(shù)指定的文件名找到程序文件,把它裝入內(nèi)存,覆蓋原來進程的映像,形成一個不同于父進程的子進程。除了進程映像被更換之外,新進程的PID及其他PCB屬性均保持不變,實際上是一個新進程“借殼”原來子進程開始運行。父進程可通過系統(tǒng)調(diào)用waitpid來把自己移出就緒隊列來等待子進程的終止。

2.信號的機理是什么?怎樣利用信號實現(xiàn)進程控制?每個信號對應(yīng)一個正整數(shù)常量,代表同一用戶的諸進程之間傳送事先約定的信息的類型,用于通知某進程發(fā)生了某異常事件。每個進程運行時,要通過信號機制來檢查是否有信號到達。若有,中斷正在執(zhí)行的程序,轉(zhuǎn)向該信號相對應(yīng)的處理程序,已完成對事件的處理;

處理結(jié)束后再返回到原來的斷點繼續(xù)執(zhí)行。

1.3.3實驗演示結(jié)果1.3.4實驗代碼pctl.c文件:

includesys/types.hincludeunistd.hincludestdio.hincludestdio.hincludesignal.hdefineSIGINT2includestdio.hincludesys/types.hincludesys/shm.hincludesys/msg.hinclude“ipc.h“intget_ipc_id{FILE*pf;inti,j;charline,colum;if)==NULL){perror;exit;}fgets;while){i=j=0;fgets;whilei++;whilecolum=line;colum='\0';if。=key)continue;j=0;whilei++;whilecolum=line;colum='\0';i=atoi;fclose;returni;}fclose;return-1;}intdown{structsembufbuf;buf.sem_op=-1;buf.sem_num=0;buf.sem_flg=SEM_UNDO;if)0){perror;exit;}returnEXIT_SUCCESS;}intup{structsembufbuf;buf.sem_op=1;buf.sem_num=0;buf.sem_flg=SEM_UNDO;if)0){perror;exit;}returnEXIT_SUCCESS;}intset_sem{intsem_id;Sem_unssem_arg;//測試由sem_key標(biāo)識的信號燈數(shù)組是否已經(jīng)建立if)0){//semget新建一個信號燈,其標(biāo)號返回到sem_idif)0){perror;exit;}//設(shè)置信號燈的初值sem_arg.val=sem_val;if0){perror;exit;}}returnsem_id;}char*set_shm{inti,shm_id;char*shm_buf;//測試由shm_key標(biāo)識的共享內(nèi)存區(qū)是否已經(jīng)建立if)0){//shmget新建一個長度為shm_num字節(jié)的共享內(nèi)存,其標(biāo)號返回到shm_idif)0){perror;exit;}//shmat將由shm_id標(biāo)識的共享內(nèi)存附加給指針shm_bufifshmat)0){perror;exit;}forshm_buf=0;//初始為0}//shm_key標(biāo)識的共享內(nèi)存區(qū)已經(jīng)建立,將由shm_id標(biāo)識的共享內(nèi)存附加給指針shm_bufifshmat)0){perror;exit;}returnshm_buf;}intset_msq{intmsq_id;//測試由msq_key標(biāo)識的消息隊列是否已經(jīng)建立if)0){//msgget新建一個消息隊列,其標(biāo)號返回到msq_idif)0){perror;exit;}}returnmsq_id;}producer.c文件:

include“ipc.h“intmain{intrate;//可在在命令行第一參數(shù)指定一個進程睡眠秒數(shù),以調(diào)解進程執(zhí)行速度ifrate=atoi;elserate=3;//不指定為3秒//共享內(nèi)存使用的變量buff_key=101;//緩沖區(qū)任給的鍵值buff_num=3;//緩沖區(qū)任給的長度cget_key=103;//消費者取產(chǎn)品指針的鍵值cget_num=1;//指針數(shù)shm_flg=IPC_CREAT

0644;//共享內(nèi)存讀寫權(quán)限//獲取緩沖區(qū)使用的共享內(nèi)存,buff_ptr指向緩沖區(qū)首地址buff_ptr=set_shm;//獲取消費者取產(chǎn)品指針,cget_ptr指向索引地址cget_ptr=set_shm;//信號量使用的變量prod_key=201;//生產(chǎn)者同步信號燈鍵值cmtx_key=203;//生產(chǎn)者互斥信號燈鍵值c_PG_key=301;//消費者同步信號燈鍵值c_TP_key=302;//消費者互斥信號燈鍵值c_TG_key=303;//消費者互斥信號燈鍵值sem_flg=IPC_CREAT

0644;//信號燈操作權(quán)限//生產(chǎn)者同步信號燈初值設(shè)為緩沖區(qū)最大可用量sem_val=1;//獲取生產(chǎn)者同步信號燈,引用標(biāo)識存prod_semprod_sem=set_sem;//消費者初始無產(chǎn)品可取,同步信號燈初值設(shè)為0sem_val=0;//獲取消費者同步信號燈,引用標(biāo)識存cons_semc_PG_sem=set_sem;c_TP_sem=set_sem;c_TG_sem=set_sem;//消費者互斥信號燈初值為1sem_val=1;//獲取消費者互斥信號燈,引用標(biāo)識存pmtx_semcmtx_sem=set_sem;intpid1,pid2;pid1=fork;if{//循環(huán)執(zhí)行模擬消費者不斷取產(chǎn)品while{//如果無產(chǎn)品消費者阻塞down;//如果另一消費者正在取產(chǎn)品,本消費者阻塞down;//用讀一字符的形式模擬消費者取產(chǎn)品,報告本進程號和獲取的字符及讀取的位置sleep;printf,buff_ptr,buff_ptr);//喚醒阻塞的消費者up;//喚醒阻塞的生產(chǎn)者up;}}else{pid2=fork;if{//循環(huán)執(zhí)行模擬消費者不斷取產(chǎn)品while{//如果無產(chǎn)品消費者阻塞down;//如果另一消費者正在取產(chǎn)品,本消費者阻塞down;//用讀一字符的形式模擬消費者取產(chǎn)品,報告本進程號和獲取的字符及讀取的位置sleep;printf,buff_ptr,buff_ptr);//喚醒阻塞的消費者up;//喚醒阻塞的生產(chǎn)者up;}}else{//循環(huán)執(zhí)行模擬消費者不斷取產(chǎn)品while{//如果無產(chǎn)品消費者阻塞down;//如果另一消費者正在取產(chǎn)品,本消費者阻塞down;//用讀一字符的形式模擬消費者取產(chǎn)品,報告本進程號和獲取的字符及讀取的位置sleep;printf,buff_ptr,buff_ptr);//喚醒阻塞的消費者up;//喚醒阻塞的生產(chǎn)者up;}}}returnEXIT_SUCCESS;}三、內(nèi)存頁面置換算法實驗4.1實驗?zāi)康募由顚τ诖鎯芾淼牧私?,掌握虛擬存儲器的實現(xiàn)原理;

觀察和了解重要的頁面置換算法和置換過程。練習(xí)模擬算法的編程技巧,鍛煉分析試驗數(shù)據(jù)的能力。

4.2示例實驗4.2.1實驗內(nèi)容1.示例實驗程序中模擬兩種置換算法:LRU算法和FIFO算法2.能對兩種算法給定任意序列不同的頁面引用串和任意幀實內(nèi)存塊數(shù)的組合測試,顯示頁置換的過程。

3.能統(tǒng)計和報告不同置換算法情況下依次淘汰的頁號、缺頁次數(shù)和缺頁率。比較兩種置換算法在給定條件下的優(yōu)劣。

4.為了能方便的擴充頁面置換算法,更好的描述置換過程,示例實驗程采用了C++語言用Replace類描述了置換算法及其屬性。

4.2.2實驗演示結(jié)果4.3獨立實驗4.3.1實驗內(nèi)容請在以上示例實驗程序中補充“增強二次機會”等置換算法的模擬程序。輸入不同的內(nèi)存頁面引用串和實存幀數(shù),觀察并分析其頁面置換效果和性能,并將其與LRU和FIFO算法進行比較。改進以上示例實驗程序,使之能夠隨機的產(chǎn)生內(nèi)存頁面引用串,以便能動態(tài)的觀測各種置換算法的性能。

4.3.2實驗步驟4.3.2.1算法設(shè)計Clock算法:

FIFO算法可能會把經(jīng)常使用的頁面置換出去,為了避免這一問題,對該算法做一個簡單的修改:檢查最老頁面的R位,如果R位為0,那么這個頁面既老又沒有被使用過,可以立刻被置換掉,如果R位為1,就將R位清0,并將這個頁面重新插入鏈表尾端,然后繼續(xù)搜索。第二次機會算法是尋找一個最近時間間隔內(nèi)未被訪問過的頁面,如果所有的頁面都被訪問過了,這個算法就是純粹的FIFO算法。

EClock算法:

需將內(nèi)存中的頁面按訪問位A和修改位M分為4類:第一類未被訪問,又未被修改,是最佳替換頁第二類未被訪問,但被修改過,次佳替換頁第三類被訪問過,但未被修改,可能再被訪問第四類以訪問且被修改,可能再被訪問程序首先查找第一類頁面,如果有則替換,如果沒有則查找第二類頁面;

置頁面的訪問位為0,如果有則替換,如果沒有則返回重新查找第一類頁面;

如果有則替換,如果沒有則查找第二類頁面,則一定存在。該算法適用于某些頁面經(jīng)常被修改的場合。

LFU算法:

即最不經(jīng)常使用頁置換算法,要求在頁置換時置換引用計數(shù)最小的頁,因為經(jīng)常使用的頁應(yīng)該有一個較大的引用次數(shù)。但是有些頁在開始時使用次數(shù)很多,但以后就不再使用,這類頁將會長時間留在內(nèi)存中,因此可以將引用計數(shù)寄存器定時右移一位,形成指數(shù)衰減的平均使用次數(shù)。

MFU算法:

與LFU算法相反,為最經(jīng)常使用頁置換算法。認為引用次數(shù)最小的頁以后可能會經(jīng)常使用。

4.3.2.2開發(fā)調(diào)試過程建立vmrp.cc程序,將代碼寫到程序中;

再建立名為vmrp.h的C語言頭文件;

建立以下項目管理文件Makefile;

輸入make命令編譯連接生成可執(zhí)行的vmrp程序;

執(zhí)行程序。

4.3.2.3思考與分析4.3.3實驗演示結(jié)果4.3.4實驗代碼vmrp.cc文件:

includeiostreamincludeiostreamincludemalloc.hclassReplace{public:Replace;~Replace;voidInitSpace;//初始化頁號記錄voidReport;//報告算法執(zhí)行情況voidFifo;//先進先出算法voidLru;//最近最舊未用算法voidClock;//時鐘置換算法voidEclock;//增強二次機會置換算法voidLfu;//最不經(jīng)常使用置換算法voidMfu;//最經(jīng)常使用置換算法private:int*ReferencePage;//存放要訪問到的頁號int*EliminatePage;//存放淘汰頁號int*PageFrames;//存放當(dāng)前正在實存中的頁號intPageNumber;//訪問頁數(shù)intFrameNumber;//實存幀數(shù)intFaultNumber;//失敗頁數(shù)};四、磁盤移臂調(diào)度算法實驗5.1實驗?zāi)康募由顚τ诓僮飨到y(tǒng)設(shè)備管理技術(shù)的了解,體驗磁盤移臂調(diào)度算法的重要性;

掌握幾種重要的磁盤移臂調(diào)度算法,練習(xí)模擬算法的編程技巧,鍛煉研究分析試驗數(shù)據(jù)的能力。

5.2示例實驗5.2.1實驗內(nèi)容1.示例實驗程序中模擬兩種磁盤移臂調(diào)度算法:SSTF算法和SCAN算法。

2.能對兩種算法給定任意序列不同的磁盤請求序列,顯示響應(yīng)磁盤請求的過程。

3.能統(tǒng)計和報告不同算法情況下響應(yīng)請求的順序、移臂的總量。比較兩種算法在給定條件下的優(yōu)劣。

4.為了能方便的擴充磁盤移臂調(diào)度算法,更好的描述磁盤移臂調(diào)度過程,示例實驗程序采用了C++語言用DiskArm類描述了磁盤移臂調(diào)度算法及其屬性。

5.2.2實驗演示結(jié)果5.3獨立實驗5.3.1實驗內(nèi)容請在以上示例實驗程序中補充SCAN,C-SCAN,LOOK磁盤移臂調(diào)度算法的模擬程序。輸入不同的磁盤柱面請求序列,觀察和分析其調(diào)度效果和性能,并將其與FCFS和SSTF算法進行比較。改進以上示例實驗程序,使之能夠隨機的產(chǎn)生磁盤柱面請求序列,以便能動態(tài)的觀測各種調(diào)度算法的性能。

5.3.2實驗步驟5.3.2.1算法設(shè)計掃描算法:

磁臂從磁盤的一端向另一端移動,同時當(dāng)磁頭移過每個柱面時,處理位于該柱面上的服務(wù)請求。當(dāng)?shù)竭_另一端時,磁頭改變方向,處理繼續(xù)。磁頭在磁盤上來回掃描。有時被稱為電梯算法。此算法基本上克服了最短尋道時間優(yōu)先算法的服務(wù)集中于中間磁道和響應(yīng)時間變化比較大的缺點,而具有最短尋道時間優(yōu)先算法的優(yōu)點即吞吐量較大,平均響應(yīng)時間較小,但由于是擺動式的掃描方法,兩側(cè)磁道被訪問的頻率仍低于中間磁道。

如在本例中,開始時,在53號柱面執(zhí)行操作的讀寫磁頭的移動臂方向是由里向外,趨向37號柱面的位置,因此,當(dāng)訪問53號柱面的操作結(jié)束后,沿臂移動方向最近的柱面是37號柱面。所以應(yīng)先為37號柱面的訪問者服務(wù),然后是為14號柱面訪問者服務(wù)。在柱面0時,磁頭會調(diào)轉(zhuǎn)方向,朝磁盤的另一端移動,并處理柱面65、67、98、122、124、183.循環(huán)掃描算法:

循環(huán)掃描算法是對掃描算法的改進。如果對磁道的訪問請求是均勻分布的,當(dāng)磁頭到達磁盤的一端,并反向運動時落在磁頭之后的訪問請求相對較少。這是由于這些磁道剛被處理,而磁盤另一端的請求密度相當(dāng)高,且這些訪問請求等待的時間較長,為了解決這種情況,循環(huán)掃描算法規(guī)定磁頭單向移動。例如,只自里向外移動,當(dāng)磁頭移到最外的被訪問磁道時,磁頭立即返回到最里的欲訪磁道,即將最小磁道號緊接著最大磁道號構(gòu)成循環(huán),進行掃描。

由于本例中已假定讀寫的當(dāng)前位置在53號柱面,從53號柱面繼續(xù)向外掃描,依次為37、14、0各柱面的訪問者服務(wù),此時移動臂已經(jīng)是最外的柱面,于是立即返回到199號柱面,重新掃描,依次為183、124、122、98、67、65號柱面的訪問者服務(wù)。

LOOK算法:

LOOK算法是SCAN算法的一種改進。對LOOK算法而言磁頭同樣在最內(nèi)圈和最外圈磁道之間往返移動。但LOOK算法發(fā)現(xiàn)所移動的方向不再有請求時立即改變移動方向而SCAN算法則需移動到最外圈或最內(nèi)圈時才改變移

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論