新改操作系統實驗報告_第1頁
新改操作系統實驗報告_第2頁
新改操作系統實驗報告_第3頁
新改操作系統實驗報告_第4頁
新改操作系統實驗報告_第5頁
已閱讀5頁,還剩19頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、課程設計(綜合實驗)報告( 2015 - 2016 年度第 1 學期)名 稱: 操作系統綜合實驗 題 目: os lab綜合實驗 院 系: 計算機系 班 級: 學 號: 學生姓名: 指導教師: 設計周數: 分散進行 成 績: 日期:實驗一、實驗環境的使用一、實驗目的和要求 1、 實驗名稱:實驗環境的使用。 2、 實驗目的:(1)熟悉操作系統集成實驗環境OS Lab的基本使用方法。(2)練習編譯、調試EOS操作系統內核以及EOS應用程序。3、 實驗類型:驗證性實驗。4、 實驗內容:啟動OS Lab。學習OS Lab基本使用方法。EOS內核項目的生成和調試。EOS應用程序項目的

2、生成和調試。退出OS Lab。保存EOS內核項目。二、實驗環境 使用WINDOWS操作系統和OS Lab集成實驗環境,涉及C語言等編程語言。三、實驗過程 1、設計思路和流程圖 (一)對于WINDOWS控制臺應用程序: (二)對于EOS內核項目: (三)對于EOS應用程序項目:2、算法實現驗證性實驗,無需算法。3、截圖 四、思考與練習1、練習使用單步調試功能(逐過程、逐語句),體會在哪些情況下應該使用“逐過程”調試,在哪些情況下應該使用“逐語句”調試。練習使用各種調試工具(包括“監視”窗口、“調用堆棧”窗口等)。答:逐語句,就是每次執行一行語句,如果碰到函數調用,它

3、就會進入到函數里面。 而逐過程,碰到函數時,不進入函數,把函數調用當成一條語句執行。 因此,在需要進入函數體時用逐語句調試,而不需要進入函數體時用逐過程調試。2、思考生成 EOS SDK 文件夾的目的和作用。查看 EOS SDK 文件夾中的內容,明白文件夾的組織結構和各個文件的來源和作用。查看 EOS 應用程序包含了 SDK 文件夾中的哪些頭文件,是如何包含的?答:EOS SDK是為應用程序調用系統API提供服務,可作為用戶編程中可使用的工具包集合。 EO

4、S SDK文件夾主要包括INC頭文件、LIB文件夾 導入庫文件和BIN文件夾 動態鏈接庫,可執行程序,二進制文件。 EOS SDK包含的頭文件有:eos.h負責導出API函數聲明;eosdef.h負責導出函數類型的定義;error.h 負責導出錯誤碼。五、實驗總結 熟悉了OS Lab實驗環境,學會了EOS操作系統內核和EOS應用程序的基本調試方法,對EOS相關項目的編程方法增加了了解。通過這次實驗,我鍛煉了動手實踐的能力,提升了對于操作系統相關知識的興趣,加深對操作系統理論知識的理解,并能將其應用到實際操作當中。實驗二、操作

5、系統的啟動一、實驗目的與要求 1、 實驗名稱:操作系統的啟動 2、 實驗目的 (1)跟蹤調試EOS在PC機上從加電復位到成功啟動的全過程,了解操作系統的啟動過程。 (2)查看EOS啟動后的狀態和行為,理解操作系統啟動后的工作方式。 3、實驗類型:驗證性實驗 4、實驗內容  調試EOS操作系統的啟動過程包括:使用Bochs做為遠程目標機;調試BIOS程序;調試軟盤引導扇區程序;調試加載程序;調試內核;查看EOS啟動后的狀態和行為二、實驗環境 使用WINDOWS操作系統和OS Lab集成實

6、驗環境,涉及C語言等編程語言。三、實驗過程1、設計思路和流程圖:2、算法實現: 驗證性試驗,無算法。3、截圖四、思考與練習為什么EOS操作系統從軟盤啟動時要使用boot.bin和loader.bin兩個程序?使用一個可以嗎?它們各自的主要功能是什么?如果將loader.bin的功能移動到boot.bin文件中,則boot.bin文件的大小是否仍然能保持小于512字節? 答:boot文件夾包含了兩個匯編文件boot.asm和loader.asm。這兩個文件生成的二進制文件boot.bin和loader.bin會被寫入軟盤鏡像文件。操作系統啟動時boot.bin和loader.bin引導

7、軟盤加載程序,二者缺一不可。使用Boot.bin的主要功能是引導軟盤;loader.bin的主要功能是加載程序。如果把loader.bin功能移動到boot.bin程序中,必然導致程序規模擴大,可能使其大于512字節。 五、實驗總結完成了調試Eos在PC機上從加復電位到成功啟動的全過程,了解了操作系統的啟動過程,對EOS啟動后的狀態和行為有了深入的了解,理解了操作系統啟動后的工作方式。不過對操作系統還存在著很多的問題,對操作系統的了解還不是很深刻,所以實驗后要深入的了解。實驗三、進程的創建一、實驗目的與要求 1、 實驗名稱:進程的創建 2、 實

8、驗目的 (1)練習使用EOS API函數CreateProcess創建一個進程,掌握創建進程的方法,理解進程和程序的區別。 (2)調試跟蹤CreateProcess函數的執行過程,了解進程的創建過程,理解進程是資源分配的單位。3、實驗類型:驗證性實驗 4、實驗內容 (1)準備實驗(2)練習使用控制臺命令創建EOS應用程序的進程(3)練習通過編程的方式讓應用程序創建另一個應用程序的進程(4)調試CreateProcess函數(5)調試PsCreateProcess函數(6)練習通過編程的方式創建應用程序的多個進程二、實驗環境 使用WINDOWS操

9、作系統和OS Lab集成實驗環境,涉及C語言等編程語言。三、實驗過程1、算法 算法:驗證性實驗,不需算法。 2、截圖四、思考與練習在源代碼文件NewTwoProc.c提供的源代碼基礎上進行修改,要求使用hello.exe同時創建10個進程。提示:可以使用 PROCESS_INFORMATION 類型定義一個有 10 個元素的數組,每一個元素對應一個進程。使用一個循環創建 10 個子進程,然后再使用一個循環等待 10 個子進程結束,得到退出碼后關閉句柄。答:使用PROCESS_INFORMATION類型定義一個有10 個元素的數組,每一個元素對應一個進程。五、實驗總結本次實驗是驗證性實

10、驗,通過實驗練習創建一個進程,掌握創建進程的方法,對進程和程序的區別有了更深的理解。調試跟蹤 CreateProcess 函數的執行過程,了解到了進程的創建過程。同時,本次實驗,讓我對進程的創建有更深的理解,是我真真切切的理解到進程和程序的本質區別。學會了如何使用基本命令進行調試和運行程序。總之這讓我受益非淺。實驗四、線程的狀態與轉換一、實驗目的與要求 1、 實驗名稱:線程的狀態與轉換 2、 實驗目的 (1)調試線程在各種狀態間的轉換過程,熟悉線程的狀態和轉換。 (2)通過為線程增加掛起狀態,加深對線程狀態的理解。3、實驗類型:驗證性

11、實驗 4、實驗內容 (1)準備實驗(2)調試線程狀態的轉換過程。2.1 線程由主色狀態進入就緒狀態。2.2 線程由運行狀態進入就緒狀態。2.3 線程由就緒狀態進入運行狀態。2.4 線程由運行狀態進入阻塞狀態。(3)為線程增加掛起狀態二、實驗環境 使用WINDOWS操作系統和OS Lab集成實驗環境,涉及C語言等編程語言。三、實驗過程1、算法 算法:驗證性實驗,不需算法。2、截圖四、思考與練習1、思考一下,在本實驗中,當 loop 線程處于運行狀態時,EOS 中還有哪些線程,它們分別處于什么狀態。可以使用控制臺命令 pt 查看線程的狀態。2、當 loop

12、線程在控制臺 1 中執行,并且在控制臺 2 中執行 suspend 命令時,為什么控制臺 1 中的 loop線程處于就緒狀態而不是運行狀態?答:打開控制臺2時,loop線程處于活動就緒狀態,此時在控制臺2中使用掛起原語Suspend可以將該線程掛起,該線程便會轉入靜止就緒狀態。處于靜止就緒狀態的線程,不會再被調度執行,直到使用原語Resume將該線程恢復為活動就緒狀態。五、實驗總結在本次實驗過程中我了解到了各個狀態之間的轉換過程,對狀態之間的轉換有了更加深入的了解。了解到進程在就緒、阻塞、運行等狀態之間的轉換的實際運行,同時線程加入了增加了掛起狀態,從而加深了對狀態轉換的理解,對課堂上的知識有

13、了更加深入的了解。實驗五、進程的同步一、實驗目的與要求 1、 實驗名稱:進程的同步2、 實驗目的 (1)使用 EOS 的信號量,編程解決生產者消費者問題,理解進程同步的意義。(2)調試跟蹤 EOS 信號量的工作過程,理解進程同步的原理。(3)修改 EOS 的信號量算法,使之支持等待超時喚醒功能(有限等待),加深理解進程。3、實驗類型:設計并驗證性實驗 4、實驗內容 (1)準備實驗(2)使用EOS的信號量解決生產者消費者問題。(3)調試EOS信號量的工作過程。3.1創建信號量3.2等待、釋放信號量3.2.1 等待信號量(不阻塞)3.2.

14、2 釋放信號量(不喚醒)3.2.3 等待信號量(阻塞)3.2.4 釋放信號量(喚醒)(4)修改EOS的信號量算法。二、實驗環境 使用WINDOWS操作系統和OS Lab集成實驗環境,涉及C語言等編程語言。三、實驗過程1、算法 算法:設計并驗證性實驗,需算法。 為EOS添加時間片輪轉調度 Satus=flag; I f(Semaphore->Count>0)     Semaphore->Count-;      flag=STATUS_SUCCES

15、S;   else if(Semaphore->Count=0)  flag=PspWait(&Semaphore->WaitListHead,Milliseconds);  if(ReleaseCount>0)  Semaphore->Count+; While(!ListIsEmpty(&Semaphore->WaitListHead)&&(ReleaseCount)        

16、;PspWakeThread(&Semaphore->WaitListHead,STATUS_SUCCESS);        PspThreadSchedule();        ReleaseCount-;    Semaphore->Count=Semaphore->Count+ReleaseCount; flag=STATUS_SUCCESS;   e

17、lse printf(“Error ReleaseCount is negative!”);2、截圖四、思考與練習1、思考在 ps/semaphore.c 文件內的 PsWaitForSemaphore 和 PsReleaseSemaphore 函數中,為什么要使用原子操作?可以參考本書第 2 章中的第 2.6 節。答:在執行等待信號量和釋放信號量的時候,是不允許cpu響應外部中斷的,如果此時cpu響應了外部中斷,會產生不可預料的結果,無法正常完成原子操作。2、繪制 ps/semaphore.c 文件內 PsWaitForSemaphore 和 PsRe

18、leaseSemaphore 函數的流程圖。 五、實驗總結本次實驗是驗證類和設計類實驗,使用EOS信號量編程解決了生產者消費者問題,對進程的同步有了更深入的了解。我使用Java代碼嘗試寫了線程的同步,和進程的同步有著很大的相同。同時對進程同步的原理也有了很深的了解。后面采用修改EOS的信號量算法,來支持超時喚醒功能。實驗六、時間片輪轉調度一、實驗目的與要求 1、 實驗名稱:時間片輪轉調度2、 實驗目的 (1)調試EOS的線程調度程序,熟悉基于優先級的搶先式調度。(2)為EOS添加時間片輪轉調度,了解其它常用的調度算法。3、實驗類型:設計并驗證性實驗

19、60;4、實驗內容  (1)準備實驗 (2)閱讀控制臺命令“rr”相關的源代碼 (3)調試線程調度程序 (4)調試當前線程不被搶先的情況 (5)調試當前線程被搶先的情況 (6)為EOS添加時間片輪轉調度 (7)修改線程時間片的大小二、實驗環境 使用WINDOWS操作系統和OS Lab集成實驗環境,涉及C語言等編程語言。三、實驗過程1、算法以及實現代碼: 算法:存在設計步驟,需算法。 修改ps/sched.c文件中的PspRoundRobin函數(第337行),在其中實現時間片輪轉調度算法。 實現代碼: VOID PspRoundRobin( VOID ) if(N

20、ULL!=PspCurrentThread&&Running=PspCurrentThread->State) PspCurrentThread->RemainderTicks-; if (0 = PspCurrentThread->RemainderTicks) PspCurrentThread->RemainderTicks = TICKS_OF_TIME_SLICE; if(BIT_TEST(PspReadyBitmap, PspCurrentThread->Priority) PspReadyThread(PspCurrentThread)

21、; 2、截圖四、思考與練習結合線程調度執行的時機,說明在ThreadFunction函數中,為什么可以使用“關中斷”和“開中斷”的方法來保護控制臺這種臨界資源。一般情況下,應該使用互斥信號(MUTEX)來保護臨界資源,但是在ThreadFunction函數中卻不能使用互斥信號量,而只能使用“關中斷”和“開中斷”的方法,結合線程調度的對象說明這樣做的原因。答:關中斷后CPU就不會響應任何由外部設備發出的硬中斷了,也就不會發生線程調度了,從而保證各個線程可以互斥的訪問控制臺。這里不能使用互斥信號量保護臨界資源的原因:如果使用互斥信號量,則那些由于訪問臨界區而被阻塞的線程,就會被放入互斥信號量的等待

22、隊列,就不會在相應優先級的就緒列中了,而時間輪轉調度算法是對就緒隊列的線程進行輪轉調度,而不是對這些被阻塞的線程進行調度,也就無法進行實驗了。使用“關中斷”和“開中斷”進行同步就不會改變線程的狀態,可以保證那些沒有獲得處理器的線程都在處于就緒隊列中。五、實驗總結本次實驗調試EOS的線程調度程序,熟悉了基于優先級的搶先式調度,并為EOS添加了時間片輪轉調度,了解了其他常用的調度算法。通過這次實驗,我鍛煉了動手實踐的能力,拓展了知識面,更深度的了解了時間片輪轉調度的原理以及實現機制,并能將其應用到實際操作當中。實驗八、分頁存儲器管理一、實驗目的與要求 1. 實驗名稱:分頁存儲器

23、管理2. 實驗目的 (1)學習i386處理器的二級頁表硬件機制,理解分頁存儲器管理原理。(2)查看EOS應用程序進程和系統進程的二級頁表映射信息,理解頁目錄和頁表的管理方式。(3)編程修改頁目錄和頁表的映射關系,理解分頁地址變換原理。3.實驗類型:驗證性實驗 4.實驗內容  (1)準備實驗 (2)查看EOS應用程序進程的頁目錄和頁表 (3)查看應用程序進程和系統進程并發時的頁目錄和頁表 (4)查看應用程序進程并發時的頁目錄和頁表 (5)在二級頁表中映射新申請的物理頁二、實驗環境 使用WINDOWS操作系統和OS Lab集成實驗環境,涉

24、及C語言等編程語言。三、實驗過程1、算法 算法:驗證性實驗,不需算法。 2、截圖四、思考與練習思考頁式存儲管理機制的優缺點。優點:虛存量大,適合多道程序運行,用戶不必擔心內存不夠的調度操作,動態頁式管理提供反了內存與外存圖圖統一管理的虛存實現方式。內存利用率高,不常用的頁面盡量不留在內存。不要求作業連續存放,有效的解決了內存碎片問題。缺點:要進行頁面中斷,缺頁中斷等處理,系統開銷較大;有可能產生“抖動”現象;址變換機構復雜,一般采用硬件實現,增加了機器成本。五、實驗總結通過操作系統試驗,了解了操作系統的啟動過程 ,運行方式,加深了對計算機操作系統的理解。更深入的了解了處理器的二級頁表硬件機制,

25、理解了分頁存儲器管理原理。通過查看進程中的二級頁表映射信息,理解頁目錄和頁表的管理方式。擴展了自己的理論知識更增強了自己的動手能力。實驗十、磁盤調度算法一、實驗目的與要求 1. 實驗名稱:磁盤調度算法2. 實驗目的 (1)通過學習EOS實現磁盤調度算法的機制,掌握磁盤調度算法執行的條件和時機。(2)觀察EOS實現的FCFS、SSTF和SCAN磁盤調度算法,了解常用的磁盤調度算法。(3)編寫CSCAN和N-Step-SCAN磁盤調度算法,加深對各種掃描算法的理解。3.實驗類型:設計并驗證性實驗 4.實驗內容  (1)準備實驗 (2)驗證

26、先來先服務(FCFS)磁盤調度算法 (3)驗證最短尋道時間優先(SSTF)磁盤調度算法 (4)驗證SSTF算法造成的線程“饑餓”現象 (5)驗證掃描(SCAN)磁盤調度算法 (6)改寫SCAN算法 (7)編寫循環掃描(CSCAN)磁盤調度算法 (8)驗證SSTF、SCAN及CSAN算法中的“磁臂粘著”現象 (9)編寫N-Step-SCAN磁盤調度算法二、實驗環境 使用WINDOWS操作系統和OS Lab集成實驗環境,涉及C語言等編程語言。三、實驗過程1、算法 算法:設計并驗證性實驗,需算法。 (1)改寫SCAN算法BOOL ScanInside = TRUE; PREQUE

27、ST IopDiskSchedule( VOID ) PLIST_ENTRY pListEntry; PREQUEST pRequest; PREQUEST INpNextRequest = NULL; PREQUEST OUTpNextRequest = NULL; LONG Offset; ULONG InsideShortestDistance = 0xFFFFFFFF; ULONG OutsideShortestDistance = 0xFFFFFFFF; PREQUEST pNextRequest = NULL; for (pListEntry = RequestListHead.N

28、ext; pListEntry != &RequestListHead; pListEntry = pListEntry->Next) pRequest = CONTAINING_RECORD(pListEntry, REQUEST, ListEntry); Offset = pRequest->Cylinder - CurrentCylinder; if (0 = Offset) pNextRequest = pRequest; goto RETURN; else if ( Offset > 0 && Offset < InsideShorte

29、stDistance ) InsideShortestDistance = Offset; INpNextRequest = pRequest; elseif ( Offset < 0 && -Offset < OutsideShortestDistance ) OutsideShortestDistance = -Offset; OUTpNextRequest = pRequest; if( ScanInside) if(INpNextRequest) return INpNextRequest; else ScanInside = !ScanInside; re

30、turn OUTpNextRequest; else if(OUTpNextRequest) return OUTpNextRequest; else ScanInside = !ScanInside; return INpNextRequest; RETURN: return pNextRequest; 編寫循環掃描(CSCAN)磁盤調度算法PREQUEST IopDiskSchedule( VOID ) PLIST_ENTRY pListEntry; PREQUEST pRequest; PREQUEST INpNextRequest = NULL; PREQUEST OUTpNextRe

31、quest = NULL; LONG Offset; ULONG InsideShortestDistance = 0xFFFFFFFF; ULONG OutsideShortestDistance = 0x00000000; PREQUEST pNextRequest = NULL; for (pListEntry = RequestListHead.Next; pListEntry != &RequestListHead; pListEntry = pListEntry->Next) pRequest = CONTAINING_RECORD(pListEntry, REQUE

32、ST, ListEntry); Offset = pRequest->Cylinder - CurrentCylinder; if(0 = Offset) pNextRequest = pRequest; goto RETURN; else if( Offset > 0 && Offset < InsideShortestDistance ) InsideShortestDistance = Offset; INpNextRequest = pRequest; elseif( Offset < 0 && -Offset > Outs

33、ideShortestDistance ) OutsideShortestDistance = -Offset; OUTpNextRequest = pRequest; if( INpNextRequest ) return INpNextRequest; else return OUTpNextRequest; RETURN: return pNextRequest; 編寫N-Step-SCAN磁盤調度算法PREQUEST IopDiskSchedule( VOID ) PLIST_ENTRY pListEntry; PREQUEST pRequest; PREQUEST INpNextRe

34、quest = NULL; PREQUEST OUTpNextRequest = NULL; LONG Offset; ULONG InsideShortestDistance = 0xFFFFFFFF; ULONG OutsideShortestDistance = 0xFFFFFFFF; PREQUEST pNextRequest = NULL; ULONG counter; counter = SubQueueRemainLength; SubQueueRemainLength-; if(SubQueueRemainLength = 0) SubQueueRemainLength = S

35、UB_QUEUE_LENGTH; for (pListEntry = RequestListHead.Next; pListEntry != &RequestListHead && counter>0; pListEntry = pListEntry->Next) pRequest = CONTAINING_RECORD(pListEntry, REQUEST, ListEntry); Offset = pRequest->Cylinder - CurrentCylinder; if (0 = Offset) pNextRequest = pRequest; return pNe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論