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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

10、l(const char *path,const char *arg,);執(zhí)行先前編譯完成的可執(zhí)行文件。2. 由父進(jìn)程創(chuàng)建一個(gè)管道,然后再創(chuàng)建2個(gè)子進(jìn)程,并由這兩個(gè)兄弟進(jìn)程利用管道進(jìn)行進(jìn)程通信:子進(jìn)程1使用管道的寫端,子進(jìn)程2使用管道的讀端。通信的具體內(nèi)容可根據(jù)自己的需要隨意設(shè)計(jì),要求能試驗(yàn)阻塞型讀寫過程中的各種情況。運(yùn)行程序,觀察各種情況下,進(jìn)程實(shí)際讀寫的字節(jié)數(shù)以及進(jìn)程阻塞喚醒的情況。3 編寫程序創(chuàng)建兩個(gè)線程:sender線程和receive線程,其中sender線程運(yùn)行函數(shù)sender(),它創(chuàng)建一個(gè)消息隊(duì)列,然后,循環(huán)等待用戶通過終端輸入一串字符,將這串字符通過消息隊(duì)列發(fā)送給receiv

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

12、等待receiver的應(yīng)答,等到應(yīng)答消息后,將接收到的應(yīng)答信息顯示在終端屏幕上,刪除共享內(nèi)存,結(jié)束程序的運(yùn)行。編寫receiver程序,它通過共享內(nèi)存接收來自sender的消息,將消息顯示在終端屏幕上,然后再通過該共享內(nèi)存向sender發(fā)送一個(gè)應(yīng)答消息“over”,結(jié)束程序的運(yùn)行。使用無名信號(hào)量或System V信號(hào)量實(shí)現(xiàn)兩個(gè)進(jìn)程對(duì)共享內(nèi)存的互斥使用。三、程序流程圖shell無名管道通信發(fā)送者進(jìn)程(消息隊(duì)列通信)接收者進(jìn)程(消息隊(duì)列)主程序(消息隊(duì)列通信)共享內(nèi)存思路四、實(shí)驗(yàn)結(jié)果(程序截圖)消息隊(duì)列Shell命令五、思考與探索當(dāng)時(shí)卡殼的地方(1)我們?cè)谠O(shè)計(jì)程序時(shí),最卡殼的地方在共享內(nèi)存來實(shí)現(xiàn)通

13、信時(shí),能不能用無名信號(hào)量,最后向老師求助才知道,用有名信號(hào)量。相對(duì)于無名信號(hào)量來說,有名信號(hào)量通過IPC名字進(jìn)行進(jìn)程間的同步,其特點(diǎn)是把信號(hào)量保存在文件中,這決定了其用途非常廣泛:既可用于線程,也可用于相關(guān)進(jìn)程和不相關(guān)進(jìn)程。(2)在父子進(jìn)程的通信里面,無名管道自帶阻塞功能,但他的互斥與同步需要我們自己去實(shí)現(xiàn),經(jīng)過多次查閱資料和測(cè)試,我們最后艱難地選擇了System V信號(hào)量,并自己寫函數(shù)來實(shí)現(xiàn)PV操作(3)在通過消息隊(duì)列來實(shí)現(xiàn)通信的程序中,我們遇到的問題是,程序莫明其妙的阻塞,但是加入print來測(cè)試則又可以正常運(yùn)行,后來才意識(shí)到,這就是進(jìn)程的異步性的體現(xiàn)哇。最后我們找到死鎖原因,并使用一個(gè)資

14、源信號(hào)量來解決sender 發(fā)送的over 信息被自己給接收的問題。(一開始我們還把這個(gè)資源信號(hào)量當(dāng)作了互斥信號(hào)量,在程序驗(yàn)收時(shí)老師告訴我們,只能有一個(gè)互斥信號(hào)量)實(shí)驗(yàn)序號(hào)3實(shí)驗(yàn)名稱文件系統(tǒng)實(shí)驗(yàn)時(shí)間16年1月實(shí)驗(yàn)地點(diǎn)1教南1樓一、題目說明通過具體的文件存儲(chǔ)空間的管理、文件的物理結(jié)構(gòu)、目錄結(jié)構(gòu)和文件操作的實(shí)現(xiàn),加深對(duì)文件系統(tǒng)內(nèi)部數(shù)據(jù)結(jié)構(gòu)、功能以及實(shí)現(xiàn)過程的理解。二、設(shè)計(jì)方案(系統(tǒng)框架)(1)在內(nèi)存中開辟一個(gè)虛擬磁盤空間作為文件存儲(chǔ)分區(qū),在其上實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于多級(jí)目錄的單用戶單任務(wù)系統(tǒng)中的文件系統(tǒng)。在退出該文件系統(tǒng)的使用時(shí),應(yīng)將該虛擬文件系統(tǒng)以一個(gè)Windows 文件的方式保存到磁盤上,以便下次

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論