一、本課程的教學目的及基本要求
1、教學目的
作業系統課程設計是作業系統課程的重要實踐環節,是作業系統課程內實驗的有益補充,它旨在培養學生的實踐能力,促進理論與實踐的結合。要求學生通過上機程式設計,了解如何模擬作業系統原理的實現,從而加深對作業系統原理的領會,加深對作業系統實現方法的理解,與此同時使學生在程式設計方面也能夠得到很大程度的提高。作業系統雖然是理論性很強的課程,但是僅僅是課堂講授是絕對不夠的,作業系統課程設計即是課堂教學基礎上的實踐環節,其重要程度決不亞於課堂的知識傳授。
本課程設計的目的和任務是在課堂教學的基礎上,使學生對作業系統執行機制有乙個全面的認識和理解,鍛鍊學生的抽象思維、邏輯思維和實際動手能力,培養作業系統等大型系統程式的使用者、管理者、分析員和設計人才。促進理論與實踐的結合,使學生在系統程式設計方面能夠得到很大程度的提高。
先修課程:資料結構,作業系統。
2、教學基本要求
要求學生通過上機程式設計,使學生對作業系統執行機制有乙個全面的認識和理解,通過模擬檔案系統及記憶體管理系統,鍛鍊學生的邏輯思維和實際動手能力,培養作業系統等大型系統程式的使用者、管理者、分析員和設計人才。促進理論與實踐的結合,使學生在系統程式設計方面能夠得到很大程度的提高。
課程設計基本要求:
1) 掌握課堂教學內容,主要包括:
(1) 掌握作業系統四大資源管理的理論知識;
(2) 熟悉linux或unix檔案系統的結構;
(3) 使用程式語言實現課程設計題目要求的功能。
2) 根據課程設計題目,按以下步驟進行:
(1) 問題分析,理解問題,明確設計要求;
(2) 根據要求進行概要設計和詳細設計;
(3) 編碼實現、上機除錯,資料測試;
(4) 完成課程設計實習報告。
二、作業系統課程設計題目
1、實現乙個程序管理子系統
【問題描述】
在linux/unix/windows下編制乙個程式,模擬實現乙個簡單的程序管理子系統,它由程序建立模組、程序撤消模組、程序控制表組成,(此外還可能包括選作的程序切換和排程模組)。
【設計要求】
該子系統接收新程序建立請求的方式是迴圈顯示「請輸入新命令列」,然後根據使用者鍵入內容啟動相應程序,其後不等待子程序結束,馬上顯示下乙個「請輸入新命令列」如此迴圈往復。
當建立程序時,相應讀寫程序控制表,然後借助底層環境os中象fork和exec這樣的函式將新程序投入執行(這與底層環境的實際os不同,實際os將新程序投入執行時要布置現場,最後時程式技術器暫存器)。程序撤消時,利用底層os的wait( )從子程序回到本子系統,相應修改pcb。
比較該子系統與實際系統中的相應功能的異同與差距,尤其在現場儲存與恢復方面的比較。
2、實現乙個程序管理子系統(實現程序切換)
【問題描述】
在linux/unix/windows下編制乙個程式,模擬實現乙個簡單的程序管理子系統,它由程序建立模組、程序撤消模組、程序控制表組成,(此外還可能包括選作的程序切換和排程模組)。
【設計要求】
在1題的基礎上,進一步可選做模擬實現程序切換。希望能實現時間片滿或接到sleep呼叫(或訊號時)進行程序切換(選擇其一即可)。
若要實現時間片,假設時間片為1秒鐘,設定底層環境os每個1秒向該系統發乙個訊號,本子系統將本子系統的程序切換和排程模組設定為該訊號的處理程式。或者每當接到子程序發出的的sleep呼叫(或訊號)時進行程序切換,這裡子程序發出的sleep呼叫(或訊號)代表實際系統中可能發生的sleep( )呼叫、等待某一時間發生等情況,程序排程採用簡單的fifo演算法。
(本題作為一道思考選作實驗題:由於是在實際os中模擬實現,故子系統無法完全控制其建立的所有子程序的程序狀態變化,象當前程序這樣的概念都不太好模擬,需要設法解決或假設。)
3、程序排程演算法模組
【問題描述】
編制乙個程序排程演算法模組。程序排程是處理機管理的核心內容。本設計要求用c語言編寫和除錯乙個簡單的程序排程程式。
通過設計本可以加深理解有關程序控制塊、程序佇列的概念,並體會和了解最高優先數優先的排程演算法(即把處理機分配給優先數最高的程序)和先來先服務演算法的具體實施辦法。
【設計要求】
(1) 程序排程演算法:採用最高優先數優先的排程演算法(即把處理機分配給優先數最高的程序)和先來先服務演算法。
(2) 每個程序有乙個程序控制塊(pcb)表示。程序控制塊可以包含如下資訊:程序名、優先數、到達時間、需要執行時間、已用cpu時間、程序狀態等等。
(3) 程序的優先數及需要的執行時間可以事先人為地指定(也可以由隨機數產生)。程序的到達時間為程序輸入的時間。程序的執行時間以時間片為單位進行計算。
(4) 每個程序的狀態可以是就緒w(wait)、執行r(run)、或完成f(finish)三種狀態之一。
(5) 就緒程序獲得cpu後都只能執行乙個時間片。用已占用cpu時間加1來表示。如果執行乙個時間片後,程序的已占用cpu時間已達到所需要的執行時間,則撤消該程序,如果執行乙個時間片後程序的已占用cpu時間還未達所需要的執行時間,也就是程序還需要繼續執行,此時應將程序的優先數減1(即降低一級),然後把它插入就緒佇列等待cpu。
(6) 每進行一次排程程式都列印一次執行程序、就緒佇列、以及各個程序的pcb,以便進行檢查。
(7) 重複以上過程,直到所要程序都完成為止。
4、生產者—消費者問題實現
【問題描述】
有一群生產者程序生產產品供給消費者程序消費,為使兩者併發執行,在兩者之間設定具有n個緩衝區的緩衝池,生產者程序所生產的產品放入乙個緩衝區中,消費者程序可從乙個緩衝區中取走產品去消費。要求掌握訊號的使用方法和pv操作的定義,掌握使用pv操作實現程序之間同步與互斥的方法,加深對程序同步互斥概念的理解。
【設計要求】
設計一程式,由乙個程序建立三個子程序,三個子程序乙個是生產者程序,兩個是消費者程序,父子程序都使用父程序建立的共享儲存區進行通訊,由生產者程序將乙個陣列中的十個數值傳送到由5個緩衝區組成的共享記憶體中,兩個消費者程序輪流接收並輸出這十個數值,同時將兩個消費者程序讀出的數值進行累加求各和。
5、蘋果問題
【問題描述】
桌子上有乙隻盤子,最多可容納兩個水果,每次只能放入或取出乙個水果。爸爸專向盤子放蘋果(apple),媽媽專向盤子中放桔子(orange);兩個兒子專等吃盤子中的桔子,兩個女兒專等吃盤子中的蘋果。請用p、v操作來實現爸爸、媽媽、兒子、女兒之間的同步與互斥關係。
【設計要求】
了解訊號量機制,了解並掌握程序同步和互斥機制,熟悉訊號量的操作函式,利用訊號量實現對共享資源的控制。程式設計模擬實現這一問題的程式控制,分析處理過程。
6、模擬請求頁式儲存管理演算法
【問題描述】
儲存管理的主要功能之一是合理地分配空間。請求頁式管理是一種常用的虛擬儲存管理技術。本次設計的目的是通過請求頁式儲存管理中頁面置換演算法模擬設計,了解虛擬儲存技術的特點,掌握請求頁式管理的頁面置換演算法。
【設計要求】
設計乙個請求頁式儲存管理方案。並編寫模擬程式實現之。要求包含:
(1) 過隨機數產生乙個指令序列,共320條指令。其位址按下述原則生成:
① 50%的指令是順序執行的;
② 25%的指令是均勻分布在前位址部分;
③ 25%的指令是均勻分布在後位址部分。
#具體的實施方法是:
① 在[0, 319]的指令位址之間隨機選區一起點m;
② 順序執行一條指令,即執行位址為m+1的指令;
③ 在前位址[0, m+1]中隨機選取一條指令並執行,該指令的位址為m';
④ 順序執行一條指令,其位址為m'+1;
⑤ 在後位址[m'+2, 319]中隨機選取一條指令並執行;
⑥ 重複① ~ ⑤,直到執行320次指令。
(2) 指令序列變換成頁位址流。
設:① 頁面大小為1k;
② 使用者記憶體容量為4頁到32頁;
③ 使用者虛存容量為32k。
在使用者虛存中,按每k存放10條指令排列虛存位址,即320條指令在虛存中的存放方式為:
第0條 ~ 第9條指令為第0頁(對應虛存位址為[0, 9]);
第10條 ~ 第19條指令為第1頁(對應虛存位址為[10, 19]);
……第310條 ~ 第319條指令為第31頁(對應虛存位址為[310, 319]);
按以上方式,使用者指令可組成32頁。
(3) 計算並輸出下述各種演算法在不同記憶體容量下的命中率。
① 最佳置換頁面置換演算法(opt)
② 最近最久未使用頁面置換演算法(lru)
③ 最少使用頁面置換演算法(lfu)
④ clock演算法
要求設計乙個虛擬儲存區和記憶體工作區,程式設計序演示以上四種演算法的具體實現過程,並計算訪問命中率。演示頁面置換的四種演算法。
7、記憶體的申請與釋放
【問題描述】
模擬實現作業系統記憶體分配的演算法。
【設計要求】
(1) 定義乙個自由儲存塊鍊錶,按塊位址排序,表中記錄塊的大小。當請求分配記憶體時,掃瞄自由儲存塊鍊錶,址到找到乙個足夠大的可供分配的記憶體塊,若找到的塊大小正好等於所請求的大小時,就把這一塊從自由鍊錶中取下來,返回給申請者。若找到的塊太大,即對其分割,並從該塊的高位址部分往低位址部分分割,取出大小合適的塊返回給申請者,餘下的低位址部分留在鍊錶中。
若找不到足夠大的塊,就從作業系統中請求另外一塊足夠大的記憶體區域,並把它鏈結到自由塊鍊錶中,然後再繼續搜尋。
釋放儲存塊也要搜尋自由鍊錶,目的是找到適當的位置將要釋放的塊插進去,如果被釋放的塊的任何一邊與鍊錶中的某一塊臨接,即對其進行合併操作,直到沒有合併的臨接塊為止,這樣可以防止儲存空間變得過於零碎。
(2) 空閒區採用分割槽說明表的方法實現(1)中的功能。要求同上。
8、固定式分割槽分配及可變式分割槽分配的儲存管理方案設計與實現
【問題描述1】
設計乙個固定式分割槽分配的儲存管理方案,並模擬實現分割槽的分配和**過程。
【設計要求1】
可以假定每個作業都是批處理作業,並且不允許動態申請記憶體。為實現分割槽的分配和**,可以設定乙個分割槽說明表,按照表中的有關資訊進行分配,並根據分割槽的分配和**情況修改該錶。
【問題描述2】
設計乙個可變式分割槽分配的儲存管理方案,並模擬實現分割槽的分配和**過程。
《作業系統課程設計》指導書
李曉東編 電子與資訊工程學院計算機系 2012 2 一 課程設計的目的和意義 本課程設計是學生在學完了 作業系統 課程後,培養學生程式設計能力的乙個重要教學環節。課程設計為學生提供了乙個動手 動腦並獨立實踐的機會,有助於學生將教材的理論知識和實踐相結合,從而鍛鍊學生分析問題 解決問題的能力,提高學生...
linux作業系統課程設計指導2019
4.編譯核心與增加系統呼叫 新增乙個系統呼叫並編譯核心,然後在自己寫的程式中呼叫該系統呼叫。分析理解使用者利用系統呼叫與核心通訊的原理。注意根據實驗環境選擇核心版本,也可用虛擬機器多嘗試選擇乙個合適的版本 5.核心原始碼分析類 對linux核心原始碼實現選擇乙個感興趣的方面進行原理及 分析,如 系統...
作業系統課程設計報告
上海電力學院 計算機作業系統原理 課程設計報告 題目名稱 編寫程式模擬虛擬儲存器管理 姓名 杜志豪 學號 20121798 班級 2012053班 同組姓名 孫嘉軼 課程設計時間 2014.6.30 2014.7.4 評語成績 一 設計內容及要求4 1.1 設計題目4 1 2 使用演算法分析4 1 ...