gitee完整代碼下載
github完整代碼下載
一、 需求分析
模擬一個采用多道程序設計方法的單用戶操作系統,該操作系統包括進程管理、存儲管理、設備管理、文件管理和用戶接口四部分。預計程序所能達到的功能:
進程管理模擬:實現操作系統進程管理功能,如實現進程的控制(進程調度,進程創建與撤銷,狀態轉換,進程喚醒),進程并發執行。
存儲管理模擬:實現內存空間的分配和回收、存儲保護。
設備管理模擬:主要包括設備的分配和回收。
文件管理和用戶接口:主要是單用戶的磁盤文件管理部分,包括文件的邏輯結構、物理結構、目錄、磁盤分配回收、文件的保護和用戶接口的實現。
二、 概要設計
- 通過程序來模擬計算機的硬件系統,在此基礎上實現操作系統的模擬實現。
- 本次實驗由5個模塊構成
(1) 文件管理模塊
(2) 進程控制及內存管理模塊
(3) 硬件實現及管理模塊
(4) 用戶界面交互模塊
(5) 系統內核軟件模塊 - 主程序的流程圖
三、詳細設計
(1) 文件管理模塊
文件管理模塊由以下3個類組成
1.MyFile類
該類是操作系統的基本文件單位,這個類包含了文件的數據內容,名字,屬性以及磁盤的起始扇區和長度等,構成一個基本的文件。利用輸入的屬性和數據來初始化文件,同時提供了getter和setter方法可以對文件的屬性進行訪問和修改。
- FileSamplesGenerator類
該類通過預設的二進制代碼生成可執行的文件。這個類中保存了10個可執行的程序的代碼,通過調用文件系統中創建文件的方法,將這些代碼轉換成操作系統內部的文件,同時將文件名和路徑記錄在這個類中。
- FileSystem類
該類用于管理整個文件系統。通過讀取磁盤文件,利用FileSamplesGenerator類生成可執行文件和利用DirTreeParser類生成目錄樹進行初始化,包含了查找磁盤空閑扇區和分配空閑扇區的功能接口,以實現將FAT中的數據直接寫入磁盤或直接對磁盤盤塊進行寫入操作,以及可以對操作系統內的文件直接進行查找和訪問。對外提供了創建、打開、讀取、寫入、關閉、刪除文件的功能方法,并且可以獲取路徑下的子目錄,并且修改文件的屬性。
(2)進程控制及內存管理模塊
進程控制及內存管理模塊由以下4個類組成
1.ExcuteTask類
該類是操作系統的進程調度的類,這個類包含了進程創建、進程銷毀、進程阻塞、進程喚醒等功能,模擬一個進程的生命周期及維護相應的就緒和阻塞隊列,并且調用其他類來模擬申請內存與釋放內存、查看當前內存詳情和獲取正在執行的指令等
2.MenoryBlock類
該類是內存塊類,獲取具體被分配的線程id的屬性和大小,提供了getter和setter方法可以對內存塊的屬性進行訪問和修改。
3.MemoryController類
該類是內存空間的管理類,用于維護一個內存塊隊列,比如添加一個新內存塊、刪除一個內存卡、獲取當前內存塊隊列,提供了getter和setter方法可以對內存的屬性進行訪問和修改。
4.SimulationThread類
該類是進程的一個模擬類,通過進程的id或者對應的可執行文件來啟動或者新建一個進程、包括獲取進程id和獲取進程阻塞原因,同時提供了getter和setter方法可以對進程的屬性進行訪問和修改。
(3)硬件實現及管理模塊
硬件實現及管理模塊由以下8個類組成:
-
HardDevice類
該類為抽象類,默認無任何模仿功能,類中封裝了硬件設備的狀態,ID和名字等成員變量,同時提供getStatus、getID和getName方法對硬件設備的三個成員進行訪問,該類需要被所有除CPU以外的硬件類繼承。 -
Peripheral類
該類繼承了HardDevice類,定義了interval用以表示外圍設備被占用倒計時的計時器;同時提供了方法allocate用以申請占用外圍設備time個計時周期;refresh方法用以更新設備狀態,并在每個CPU周期開始時執行,設備之前若處于中斷狀態,則取消中斷,若已被占用,則扣除clock個計時周期;reset方法用于重置設備的計時器和狀態。 -
Memory類
該類繼承了HardDevice類,定義了私有變量storage用數組模擬內存,用maxCapacity表示內存的最大容量。同時,類中包含了方法read用以從address地址的內存中讀取一字節的數據;方法write用以向address地址的內存中寫入一字節的數據;方法getMaxCapacity用以訪問內存的最大容量。 -
Disk類
該類繼承了HardDevice類,類中包含了storage表示內存,filename表示磁盤數據存儲的文件名,即虛擬磁盤,maxCapacity表示磁盤的最大存儲量,sectorSize表示磁盤中塊的容量,sectorCount表示硬盤中塊的數量。同時提供了方法read從磁盤中讀取第address塊的64字節數據;方法write將64字節的數據寫入磁盤的第address塊中;方法load從實際硬盤中試圖加載制定名字的虛擬磁盤,并讀取其中的數據,該方法用在Disk類的構造方法中;方法initialize在未找到虛擬磁盤文件時,則建立指定名字的文件,該方法用在Disk類的構造方法中;方法store用以將暫存于內存中的數據存入虛擬磁盤實際的數據文件中;以及方法getMaxCapacity,getSectorSize,getSectorCount分別對磁盤的最大容量,最大塊長度和塊的數量進行訪問。 -
CPU類
該類為中央處理器,控制一切硬件的行為,對接模擬系統。該類包含了內存、磁盤、外圍設備、硬件、寄存器AX和計時器。同時類中還提供了方法readMemory用以從內存中的address地址中讀取一字節數據;方法writeMemory用以向address地址的內存中寫入一字節的數據;方法readDisk用以從磁盤中的address地址中讀取一塊64字節的數據;方法writeDisk用以向address地址的磁盤中寫入一塊64字節的數據;方法initializePeripheral用以在實例化CPU時,初始化所需要的所有外設;方法getX用以獲取寄存器AX的值;方法getStatus用以獲取指定名稱的硬件的狀態;方法getPeripheralStatus用以獲取指定名稱的外設的狀態;方法getMemoryCapacity用以獲取內存的最大容量;方法getDiskCapacity用以獲取硬盤的最大容量;方法allocatePeripheral用以申請占用外設time個計時周期,由execute方法定期調用;方法refreshPeripheral用以更新設備狀態;方法resetPeripheral用以重置外設狀態。總的來說,該類主要執行的是檢查各硬件的狀態,在各時鐘周期內不斷地完成讀寫等操作,完成存儲管理和設備管理的任務。在該類的函數中,每次執行指令前,均檢查設備的狀態,判斷是否有中斷,如有中斷先進行取消,再執行其他的操作。
(4)用戶界面交互模塊
用戶界面交互模塊主要由以下個14個類組成
1.Controller類
該類是整個面板的控制類,在里面設置了所有欄的參數和所有窗口的設置。進行了圖標的讀取與設置,已經各個app名稱的設置,還有建造窗口時基本的設置。
2.Apppane類
底部次級欄設置,設置了10張照片分別對應底部10個應用程序的圖標。
3.ControllerSetter類
整個界面的設置,獲取整個屏幕的大小,整個主頁面都是一個controller類,可以設置背景圖片。
4.CPUWin類
CPU窗口的創建,設置了4個文本框來寫出目前狀態。
5.DeviceWin類
設備狀態的顯示窗口。設置了眾多文本來表示目前各設備的狀態。
6.DictionaryWin類
磁盤目錄的顯示窗口,調用了磁盤目錄類的使用方法。使用簡單第歸遍歷數據, 重新建立目錄結構。
7.DickWin類
磁盤狀態的顯示窗口,未占用的內存鴿子就是綠色,占用了就是紅色。
8.FileWin類
次級欄中的模擬程序的窗口,打開了就顯示當前程序正在運行,并且調用了StringBuilder類的方法。
9.HelpWin類
頂部狀態欄中的幫助窗口的建立。
10.MainMemoryWin類
內存狀態的顯示窗口,同時調用了SystemCore類的方法,方便進行內存狀態的更新。
11.SuperWin類
Win的子類,在Win類的基礎上,增加了快捷鍵的動態效果,把鼠標移上去時會出現動態效果放大縮小。
12.TerminalWin類
終端的窗口設置,調用了終端的設置類。
13.UpdateCenter類
Controller類的更新設置,time設置了更新的周期。
14.Win類
最基本的窗口類,進行窗口參數設置,里面也有其他窗口的基本設置。在這里設置了窗口的名字,大小,還有是否更新窗口的update設置。
(5)系統內核軟件模塊
1.Compiler類
Compiler類用于創建編譯器對象,主要實現對創建的“可執行文件”進行匯編/編譯的功能,其中“可執行文件”中所能編譯通過執行的指令只有5中,包括:
ASSIGNMENT:x=?,對x進行賦值,其中x為兩位數。
ADD:x++ x加1(x小于等于255,大于等于1)
DEL:x- - x減一
USEHARD:I/O指令
FINISH:終止運算,表示可執行文件結束
- Shell類
Shell提供用戶命令接口,通過終端窗口接受用戶從鍵盤鍵入的命令,并對用戶輸入的命令進行處理并返回處理結果。
實現的命令如下:
- create : create /usr/tes.e [創建一個帶空字符的普通文件]
- delete : delete /usr/tes.e [刪除文件]
- cat : cat /usr/tes.e [查看文件的內容]
- copy : copy /usr/tes.e/drv/tes.e [復制文件到其他的目錄]
- mv : mv /usr/tes.e /drv/tes.e [移動文件到其他的目錄]
- echo : echo “ABC” > /usr/tes.e [重定向輸入文本到文件中,雙引號包含輸入內容
- mkdir : mkdir /usr/bin [創建一個目錄]
- rmdir : rmdir /usr/bin [刪除一個目錄]
- exe : exe /usr/000/e [執行一個可執行的文件]
- time : time [查看當前系統的時間片]
- clear : clear [清屏]
- poweroff : poweroff [關機]
- system : system [系統開發者]
- compile : compile /usr/abc.s [在當前目錄下生成編譯文件,編譯前必須刪除以前的編譯文件]
- close : close /usr/005.e [手動關閉文件]
3.DirTreeParser類
DirTreeParser類實現生成JSON格式的系統目錄,供文件系統FileSystem通過生成對象調用getJsonTree生成系統文件目錄,目錄結構采用樹型目錄結構,目錄名或文件名:3個字節,拓展名:1個字節。根目錄位置固定為OS。
五、用戶使用說明
程序開始時會創立一個主界面,包含了系統所有功能的入口,通過對界面組件事件的監聽,可以響應用戶的請求,顯示用戶需要的窗口,或者可以通過終端窗口,用戶可以根據終端指南窗口的提示,對文件進行操作,用戶可以通過磁盤,文件目錄界面對操作系統內的文件情況進行觀察,同時可以通過對cpu,內存,設備狀態界面來觀察可執行文件運行時,操作系統的內在狀況。也可以通過更換夜間模式,更換壁紙和分辨率選擇用戶界面的樣式。
六、功能
- 進入頁面
- 主界面
- 窗口設置
- 1280*720
- 1024*768
- 交換壁紙
- 打開次級欄后的頁面
- 運行程序
- 未運行程序時的CPU狀態
- 運行程序時CPU狀態
- 未運行程序時內存的狀態
- 運行程序時內存的狀態
- 磁盤狀態
- 磁盤目錄
- 未運行程序時的設備狀態
- 運行程序時的設備狀態
- 終端處理:
- 創建文件
- 刪除文件
- 查看文件
- 清屏
- 移動文件
- 復制文件
- 重定向文本到文件中
- 新建目錄
- 刪除目錄
- 運行程序
- 顯示當前運行了的時間片
- 顯示系統開發者
- 生成編譯文件
- 頂部菜單欄中點擊文件可以出現磁盤目錄
- 頂部菜單欄中點擊前往中的CPU狀態可以顯示CPU狀態
- 頂部菜單欄中點擊前往中的磁盤狀態可以顯示磁盤狀態
- 頂部菜單欄中點擊前往中的內存狀態可以顯示內存狀態
- 頂部菜單欄中點擊前往中的設備可以顯示設備狀態
- 頂部菜單欄幫助中的終端指令指南
- 幫助中的快捷鍵指南
- 幫助中的課設成員名單
- 夜間模式