操作系統(tǒng)實驗報告_第1頁
操作系統(tǒng)實驗報告_第2頁
操作系統(tǒng)實驗報告_第3頁
操作系統(tǒng)實驗報告_第4頁
操作系統(tǒng)實驗報告_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2015年1月9日成績:姓名沈XX夏XX江XX學(xué)號130558051305580713055816班級13052314專業(yè)計算機科學(xué)與技術(shù)課程名稱操作系統(tǒng)課程設(shè)計任課老師趙偉華指導(dǎo)老師趙偉華實驗序號1實驗名稱進程調(diào)度管理實驗時間15年10月實驗地點1教南1樓一、題目說明(1)用C語言完成線程的創(chuàng)建和撤消,并按先來先服務(wù)方式對多個線程進行調(diào)度。(2)將線程調(diào)度算法修改為時間片輪轉(zhuǎn)算法,實現(xiàn)時間片輪轉(zhuǎn)調(diào)度。(也可以結(jié)合優(yōu)先權(quán),實現(xiàn)優(yōu)先權(quán)加時間片輪轉(zhuǎn)算法的線程調(diào)度。)(3)改變時間片的大小,觀察結(jié)果的變化。思考:為什么時間片不能太小或太大。(4)假設(shè)兩個線程共用同一軟件資源(如某一變量,或某一數(shù)據(jù)結(jié)

2、構(gòu)),請用記錄型信號量來實現(xiàn)對它的互斥訪問。(5)假設(shè)有兩個線程共享一個可存放個整數(shù)的緩沖,其中一個線程不停地計算至的平方,并將結(jié)果放入緩沖中,另一個線程不斷地從緩沖中取出結(jié)果,并將它們打印出來,請用記錄型信號量實現(xiàn)這一生產(chǎn)者和消費者的同步問題。(6)實現(xiàn)消息緩沖通信,并與4、5中的簡單通信進行比較。(7)思考:在線程間進行消息緩沖通信時,若對消息隊列的訪問沒有滿足互斥要求,情況將會怎樣?二、設(shè)計方案(系統(tǒng)框架)該程序主要是分5大塊內(nèi)容:(1)線程的創(chuàng)建和撤銷,(2)線程的調(diào)度,(3)線程的同步與互斥,(4)線程的阻塞與喚醒,(5)利用消息緩沖隊列的線程間的通信。由這五大塊功能來完成的基于DO

3、S的多任務(wù)系統(tǒng)的實現(xiàn)。在這個系統(tǒng)中,首先先由main函數(shù)進行一些初始化工作,然后直接創(chuàng)建0#線程對應(yīng)于main函數(shù),再由0#線程調(diào)用create創(chuàng)建1#,2#線程分別對應(yīng)與函數(shù)f1(),f2(),最后將系統(tǒng)的中斷服務(wù)程序設(shè)置為new_int8,并把控制交給1#線程,啟動多個線程的并發(fā)執(zhí)行。 0#線程是一個比較特殊的線程,它在創(chuàng)建的時候沒有使用create來創(chuàng)建,而是在系統(tǒng)初始化后直接創(chuàng)建的,因它對應(yīng)的程序段為main函數(shù)中的一段,所以也直接使用整個系統(tǒng)的堆棧,而不再創(chuàng)建時為私有堆棧分配額外的空間;同樣,撤銷的時也不需要釋放私有堆棧的空間,所以也沒有over()函數(shù)而是直接撤銷,從這方面來看,它

4、是一個系統(tǒng)線程。此外,在啟動多個線程并發(fā)執(zhí)行過程后,0#線程將系統(tǒng)控制權(quán)轉(zhuǎn)交出去,直至系統(tǒng)中其他進程都不具備執(zhí)行條件時,它才有可能重新得到CPU,從這方面看,0#線程相當(dāng)于是一個空轉(zhuǎn)線程,最后,0#線程還擔(dān)負著一個特別的使命:等待系統(tǒng)中所有其他的線程的完成,此時,它將直接撤銷自己并恢復(fù)原來的時鐘中斷服務(wù)程序,從此終止整個多任務(wù)系統(tǒng)。三、程序流程圖四、實驗結(jié)果(程序截圖)主界面先進先出效果實現(xiàn)線程的并發(fā)執(zhí)行,可設(shè)置時間片大小 實現(xiàn)線程對同一資源的互斥訪問實現(xiàn)生產(chǎn)者和消費者同步問題 實現(xiàn)消息緩沖通信 五、思考與探索(1) 為什么時間片不能太小或太大答:設(shè)置過長的時間片會導(dǎo)致結(jié)果和進程在一個時間片內(nèi)

5、完成任務(wù),從而先進先出算法的效果一樣,失去時間片的意,義。設(shè)置過短會導(dǎo)致進程切換頻繁,CPU的效率降低(2) 引起調(diào)度的原因有哪些?答:引起CPU調(diào)度的主要原因有:時間片到時、線程執(zhí)行完畢或正在執(zhí)行的線程因等待某事件發(fā)生而不能繼續(xù)執(zhí)行。(3) 處理中斷時控制轉(zhuǎn)移情況答:當(dāng)中斷發(fā)生時,系統(tǒng)首先將標(biāo)志寄存器Flags的值壓入堆棧,然后將裝有被中斷程序下一條指令地址的CS和IP寄存器的內(nèi)容也分別壓入堆棧,再從中斷向量中獲取中斷服務(wù)程序的入口地址并將它們裝入CS和IP寄存器,這樣,控制就從被中斷的程序轉(zhuǎn)向中斷服務(wù)程序。中斷返回時,系統(tǒng)自動從棧頂彈出返址1的偏移、返址1的段址和Flags并送到IP、CS

6、和Flags寄存器中,CPU就開始繼續(xù)從斷點處執(zhí)行被中斷程序。(4) 為什么創(chuàng)建的時候,線程的DS和ES都是一樣的答:因為線程共用進程的數(shù)據(jù)段。(5) 函數(shù)調(diào)度時控制轉(zhuǎn)移情況答:在執(zhí)行函數(shù)調(diào)用指令時,系統(tǒng)會自動地先將主調(diào)函數(shù)的下一條指令的地址(在CS:IP中)壓入堆棧,然后把被調(diào)函數(shù)的入口地址裝入CS和IP 寄存器(段內(nèi)函數(shù)調(diào)用只需壓入和裝配IP),控制就從主調(diào)函數(shù)轉(zhuǎn)向被調(diào)函數(shù);當(dāng)執(zhí)行函數(shù)返回指令時,系統(tǒng)將當(dāng)前堆棧的棧頂?shù)膬蓚€字(主調(diào)函數(shù)下一條指令的地址)彈出并送到IP和CS中(段內(nèi)函數(shù)返回只需彈出一個字送到IP中),控制就從被調(diào)函數(shù)返回到主調(diào)函數(shù)。(6) new_int8(void)函數(shù)的作

7、用,以及怎樣讓它自動地定期地運行答:該函數(shù)要完成的主要工作包括:首先執(zhí)行老的時鐘中斷處理程序的功能;然后判斷當(dāng)前線程的時間片是否到了,如果到了,且DOS不忙,則保存當(dāng)前線程的運行環(huán)境,重新選擇一個新的就緒線程,恢復(fù)其運行現(xiàn)場,使其在CPU上參加運行。由于該函數(shù)必須是自動地定期地運行,所以我們通過截取時鐘中斷(int 08)來完成。在PC機上,有一個定時器,每當(dāng)它發(fā)一個時鐘信號時(一般情況下,它每秒發(fā)出個信號,除非是對產(chǎn)生該中斷的定時器芯片重新編程),系統(tǒng)就進入時鐘中斷處理程序(INT 8)來完成系統(tǒng)計時、調(diào)用INT 1CH、關(guān)閉磁盤馬達等工作。實驗序號2實驗名稱linux進程管理實驗時間15年

8、12月實驗地點1教南1樓一、題目說明1.熟悉linux的命令接口。2.通過對linux進程控制的相關(guān)系統(tǒng)調(diào)用的編程應(yīng)用,進一步加深對進程概念的理解,明確進程和程序的聯(lián)系和區(qū)別,理解進程并發(fā)執(zhí)行的具體含義。3.通過Linux管道通信機制、消息隊列通信機制、共享內(nèi)存通信機制的使用,加深對不同類型的進程通信方式的理解。4.通過對linux的Posix 信號量的應(yīng)用,加深對信號量同步機制的理解。二、設(shè)計方案(系統(tǒng)框架)1. Shell部分要求:編寫三個不同的程序,每個程序輸出一句話,分別編譯成可執(zhí)行文件 cmd1, cmd2, cmd3。然后再編寫一個程序,模擬 shell 程序的功能,能根據(jù)用戶輸入

9、的字符串(表示相應(yīng)的命令名),去為相應(yīng)的命令創(chuàng)建子進程并讓它去執(zhí)行相應(yīng)的程序,而父進程則等待子進程結(jié)束,然后再等待接收下一條命令。如果接收到的命令為 exit,則父進程結(jié)束;如果接收到的命令是無效命令,則顯示“ Command not found”,繼續(xù)等待。新建三個不同的程序cmd1,cmd2,cmd3然后編譯成可執(zhí)行文件cmd1,cmd2,cmd3之后編寫程序my_shell.c 通過讀取shell命令調(diào)用在使用if else語句判斷識別并分別通過fork()創(chuàng)建子線程,子線程中采用execl(const char *path,const char *arg,);執(zhí)行先前編譯完成的可執(zhí)行文

10、件。2. 由父進程創(chuàng)建一個管道,然后再創(chuàng)建2個子進程,并由這兩個兄弟進程利用管道進行進程通信:子進程1使用管道的寫端,子進程2使用管道的讀端。通信的具體內(nèi)容可根據(jù)自己的需要隨意設(shè)計,要求能試驗阻塞型讀寫過程中的各種情況。運行程序,觀察各種情況下,進程實際讀寫的字節(jié)數(shù)以及進程阻塞喚醒的情況。3編寫程序創(chuàng)建兩個線程:sender線程和receive線程,其中sender線程運行函數(shù)sender(),它創(chuàng)建一個消息隊列,然后,循環(huán)等待用戶通過終端輸入一串字符,將這串字符通過消息隊列發(fā)送給receiver線程,直到用戶輸入“exit”為止;最后,它向receiver線程發(fā)送消息“end”,并且等待re

11、ceiver的應(yīng)答,等到應(yīng)答消息后,將接收到的應(yīng)答信息顯示在終端屏幕上,刪除相關(guān)消息隊列,結(jié)束程序的運行。Receiver線程運行receive(),它通過消息隊列接收來自sender的消息,將消息顯示在終端屏幕上,直至收到內(nèi)容為“end”的消息為止,此時,它向sender發(fā)送一個應(yīng)答消息“over”,結(jié)束程序的運行。使用無名信號量實現(xiàn)兩個線程之間的同步與互斥。4編寫程序sender,它創(chuàng)建一個共享內(nèi)存,然后等待用戶通過終端輸入一串字符,并將這串字符通過共享內(nèi)存發(fā)送給receiver;最后,它等待receiver的應(yīng)答,等到應(yīng)答消息后,將接收到的應(yīng)答信息顯示在終端屏幕上,刪除共享內(nèi)存,結(jié)束程序

12、的運行。編寫receiver程序,它通過共享內(nèi)存接收來自sender的消息,將消息顯示在終端屏幕上,然后再通過該共享內(nèi)存向sender發(fā)送一個應(yīng)答消息“over”,結(jié)束程序的運行。使用無名信號量或System V信號量實現(xiàn)兩個進程對共享內(nèi)存的互斥使用。三、程序流程圖shell無名管道通信發(fā)送者進程(消息隊列通信)接收者進程(消息隊列)主程序(消息隊列通信)共享內(nèi)存思路四、實驗結(jié)果(程序截圖)消息隊列Shell命令五、思考與探索當(dāng)時卡殼的地方(1)我們在設(shè)計程序時,最卡殼的地方在共享內(nèi)存來實現(xiàn)通信時,能不能用無名信號量,最后向老師求助才知道,用有名信號量。相對于無名信號量來說,有名信號量通過IP

13、C名字進行進程間的同步,其特點是把信號量保存在文件中,這決定了其用途非常廣泛:既可用于線程,也可用于相關(guān)進程和不相關(guān)進程。(2)在父子進程的通信里面,無名管道自帶阻塞功能,但他的互斥與同步需要我們自己去實現(xiàn),經(jīng)過多次查閱資料和測試,我們最后艱難地選擇了System V信號量,并自己寫函數(shù)來實現(xiàn)PV操作(3)在通過消息隊列來實現(xiàn)通信的程序中,我們遇到的問題是,程序莫明其妙的阻塞,但是加入print來測試則又可以正常運行,后來才意識到,這就是進程的異步性的體現(xiàn)哇。最后我們找到死鎖原因,并使用一個資源信號量來解決sender發(fā)送的over信息被自己給接收的問題。(一開始我們還把這個資源信號量當(dāng)作了互

14、斥信號量,在程序驗收時老師告訴我們,只能有一個互斥信號量)實驗序號3實驗名稱文件系統(tǒng)實驗時間16年1月實驗地點1教南1樓一、題目說明通過具體的文件存儲空間的管理、文件的物理結(jié)構(gòu)、目錄結(jié)構(gòu)和文件操作的實現(xiàn),加深對文件系統(tǒng)內(nèi)部數(shù)據(jù)結(jié)構(gòu)、功能以及實現(xiàn)過程的理解。二、設(shè)計方案(系統(tǒng)框架)(1)在內(nèi)存中開辟一個虛擬磁盤空間作為文件存儲分區(qū),在其上實現(xiàn)一個簡單的基于多級目錄的單用戶單任務(wù)系統(tǒng)中的文件系統(tǒng)。在退出該文件系統(tǒng)的使用時,應(yīng)將該虛擬文件系統(tǒng)以一個Windows 文件的方式保存到磁盤上,以便下次可以再將它恢復(fù)到內(nèi)存的虛擬磁盤空間中。(2)文件存儲空間的分配可采用顯式鏈接分配或其他的辦法。(3)空閑磁

15、盤空間的管理可選擇位示圖或其他的辦法。如果采用位示圖來管理文件存儲空間,并采用顯式鏈接分配方式,那么可以將位示圖合并到FAT中。(4)文件目錄結(jié)構(gòu)采用多級目錄結(jié)構(gòu)。為了簡單起見,可以不使用索引結(jié)點,其中的每個目錄項應(yīng)包含文件名、物理地址、長度等信息,還可以通過目錄項實現(xiàn)對文件的讀和寫的保護。(5)實現(xiàn)以下函數(shù):my_format:對文件存儲器進行格式化,即按照文件系統(tǒng)的結(jié)構(gòu)對虛擬磁盤空間進行布局,并在其上創(chuàng)建根目錄以及用于管理文件存儲空間等的數(shù)據(jù)結(jié)構(gòu)。my_mkdir:用于創(chuàng)建子目錄。my_rmdir:用于刪除子目錄。my_ls:用于顯示目錄中的內(nèi)容。my_cd:用于更改當(dāng)前目錄。my_cre

16、ate:用于創(chuàng)建文件。my_open:用于打開文件。my_close:用于關(guān)閉文件。my_write:用于寫文件。my_read:用于讀文件。my_rm:用于刪除文件。my_exitsys:用于退出文件系統(tǒng)。三、程序流程圖創(chuàng)建新目錄創(chuàng)建文件和目錄相似刪除目錄 讀文件初始化 主程序刪除文件打開文件四、實驗結(jié)果(程序截圖)界面五、思考與探索文件系統(tǒng)的難點:文件系統(tǒng)是我們經(jīng)歷的最難的一個實驗了。除了代碼量大,還有就是很難理解。下面是我們在和組員交流我們的代碼時,組員的問題和解答(可能有不準(zhǔn)確的地方)(1).和.兩個特殊的目錄項,他們的first(文件起始盤塊號)指向哪里?答:在根目錄中,它們兩個都指向同一個盤塊,就是他自己。但其他文件中,“.”指向他自己的起始盤塊號,而“.”指向他父親的起始盤塊號(2)為什么在my_format()函數(shù)中,fat1 = (fat *)(myvhard + BLOCKSIZE);fat2 = (fat *)(myvh

溫馨提示

  • 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論