模擬操作系統(Java)

在這里插入圖片描述
gitee完整代碼下載
github完整代碼下載

一、 需求分析

模擬一個采用多道程序設計方法的單用戶操作系統,該操作系統包括進程管理、存儲管理、設備管理、文件管理和用戶接口四部分。預計程序所能達到的功能:
進程管理模擬:實現操作系統進程管理功能,如實現進程的控制(進程調度,進程創建與撤銷,狀態轉換,進程喚醒),進程并發執行。
存儲管理模擬:實現內存空間的分配和回收、存儲保護。
設備管理模擬:主要包括設備的分配和回收。
文件管理和用戶接口:主要是單用戶的磁盤文件管理部分,包括文件的邏輯結構、物理結構、目錄、磁盤分配回收、文件的保護和用戶接口的實現。

二、 概要設計

  1. 通過程序來模擬計算機的硬件系統,在此基礎上實現操作系統的模擬實現。
  2. 本次實驗由5個模塊構成
    (1) 文件管理模塊
    (2) 進程控制及內存管理模塊
    (3) 硬件實現及管理模塊
    (4) 用戶界面交互模塊
    (5) 系統內核軟件模塊
  3. 主程序的流程圖

三、詳細設計

(1) 文件管理模塊

文件管理模塊由以下3個類組成

1.MyFile類

該類是操作系統的基本文件單位,這個類包含了文件的數據內容,名字,屬性以及磁盤的起始扇區和長度等,構成一個基本的文件。利用輸入的屬性和數據來初始化文件,同時提供了getter和setter方法可以對文件的屬性進行訪問和修改。

  1. FileSamplesGenerator類

該類通過預設的二進制代碼生成可執行的文件。這個類中保存了10個可執行的程序的代碼,通過調用文件系統中創建文件的方法,將這些代碼轉換成操作系統內部的文件,同時將文件名和路徑記錄在這個類中。

  1. 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個類組成:

  1. HardDevice類
    該類為抽象類,默認無任何模仿功能,類中封裝了硬件設備的狀態,ID和名字等成員變量,同時提供getStatus、getID和getName方法對硬件設備的三個成員進行訪問,該類需要被所有除CPU以外的硬件類繼承。

  2. Peripheral類
    該類繼承了HardDevice類,定義了interval用以表示外圍設備被占用倒計時的計時器;同時提供了方法allocate用以申請占用外圍設備time個計時周期;refresh方法用以更新設備狀態,并在每個CPU周期開始時執行,設備之前若處于中斷狀態,則取消中斷,若已被占用,則扣除clock個計時周期;reset方法用于重置設備的計時器和狀態。

  3. Memory類
    該類繼承了HardDevice類,定義了私有變量storage用數組模擬內存,用maxCapacity表示內存的最大容量。同時,類中包含了方法read用以從address地址的內存中讀取一字節的數據;方法write用以向address地址的內存中寫入一字節的數據;方法getMaxCapacity用以訪問內存的最大容量。

  4. Disk類
    該類繼承了HardDevice類,類中包含了storage表示內存,filename表示磁盤數據存儲的文件名,即虛擬磁盤,maxCapacity表示磁盤的最大存儲量,sectorSize表示磁盤中塊的容量,sectorCount表示硬盤中塊的數量。同時提供了方法read從磁盤中讀取第address塊的64字節數據;方法write將64字節的數據寫入磁盤的第address塊中;方法load從實際硬盤中試圖加載制定名字的虛擬磁盤,并讀取其中的數據,該方法用在Disk類的構造方法中;方法initialize在未找到虛擬磁盤文件時,則建立指定名字的文件,該方法用在Disk類的構造方法中;方法store用以將暫存于內存中的數據存入虛擬磁盤實際的數據文件中;以及方法getMaxCapacity,getSectorSize,getSectorCount分別對磁盤的最大容量,最大塊長度和塊的數量進行訪問。

  5. 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:終止運算,表示可執行文件結束

  1. Shell類

Shell提供用戶命令接口,通過終端窗口接受用戶從鍵盤鍵入的命令,并對用戶輸入的命令進行處理并返回處理結果。
實現的命令如下:

  1. create : create /usr/tes.e [創建一個帶空字符的普通文件]
  2. delete : delete /usr/tes.e [刪除文件]
  3. cat : cat /usr/tes.e [查看文件的內容]
  4. copy : copy /usr/tes.e/drv/tes.e [復制文件到其他的目錄]
  5. mv : mv /usr/tes.e /drv/tes.e [移動文件到其他的目錄]
  6. echo : echo “ABC” > /usr/tes.e [重定向輸入文本到文件中,雙引號包含輸入內容
  7. mkdir : mkdir /usr/bin [創建一個目錄]
  8. rmdir : rmdir /usr/bin [刪除一個目錄]
  9. exe : exe /usr/000/e [執行一個可執行的文件]
  10. time : time [查看當前系統的時間片]
  11. clear : clear [清屏]
  12. poweroff : poweroff [關機]
  13. system : system [系統開發者]
  14. compile : compile /usr/abc.s [在當前目錄下生成編譯文件,編譯前必須刪除以前的編譯文件]
  15. close : close /usr/005.e [手動關閉文件]

3.DirTreeParser類

DirTreeParser類實現生成JSON格式的系統目錄,供文件系統FileSystem通過生成對象調用getJsonTree生成系統文件目錄,目錄結構采用樹型目錄結構,目錄名或文件名:3個字節,拓展名:1個字節。根目錄位置固定為OS。

五、用戶使用說明

程序開始時會創立一個主界面,包含了系統所有功能的入口,通過對界面組件事件的監聽,可以響應用戶的請求,顯示用戶需要的窗口,或者可以通過終端窗口,用戶可以根據終端指南窗口的提示,對文件進行操作,用戶可以通過磁盤,文件目錄界面對操作系統內的文件情況進行觀察,同時可以通過對cpu,內存,設備狀態界面來觀察可執行文件運行時,操作系統的內在狀況。也可以通過更換夜間模式,更換壁紙和分辨率選擇用戶界面的樣式。

六、功能

  • 進入頁面
  • 主界面
  • 窗口設置
  • 1280*720
  • 1024*768
  • 交換壁紙
  • 打開次級欄后的頁面
  • 運行程序
  • 未運行程序時的CPU狀態
  • 運行程序時CPU狀態
  • 未運行程序時內存的狀態
  • 運行程序時內存的狀態
  • 磁盤狀態
  • 磁盤目錄
  • 未運行程序時的設備狀態
  • 運行程序時的設備狀態
  • 終端處理:
  • 創建文件
  • 刪除文件
  • 查看文件
  • 清屏
  • 移動文件
  • 復制文件
  • 重定向文本到文件中
  • 新建目錄
  • 刪除目錄
  • 運行程序
  • 顯示當前運行了的時間片
  • 顯示系統開發者
  • 生成編譯文件
  • 頂部菜單欄中點擊文件可以出現磁盤目錄
  • 頂部菜單欄中點擊前往中的CPU狀態可以顯示CPU狀態
  • 頂部菜單欄中點擊前往中的磁盤狀態可以顯示磁盤狀態
  • 頂部菜單欄中點擊前往中的內存狀態可以顯示內存狀態
  • 頂部菜單欄中點擊前往中的設備可以顯示設備狀態
  • 頂部菜單欄幫助中的終端指令指南
  • 幫助中的快捷鍵指南
  • 幫助中的課設成員名單
  • 夜間模式

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392210.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392210.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392210.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫面試復習_數據科學面試復習

數據庫面試復習大面試前先刷新 (REFRESH BEFORE THE BIG INTERVIEW) 介紹 (Introduction) I crafted this study guide from multiple sources to make it as comprehensive as possible. This guide helped me prepare for both the technical and behavioral aspects of the …

hibernate緩存

(轉自:http://www.cnblogs.com/java-class/p/6108175.html) 閱讀目錄 1. 為什么要用 Hibernate 緩存?2. 項目實戰3. Hibernate 緩存原理回到頂部1. 為什么要用 Hibernate 緩存? Hibernate是一個持久層框架,…

oracle 連接greenplum,Oracle通過DBLINK訪問GreenPlum

為多個數據庫之間的整合和遷移做POC,嘗試使用Oracle Gateway和Heterogeneous Service來中轉訪問,測試過好多次,最終發現只有在32位的Oracle當中才能成功配置。 配置環境如下: Windows 2003 32bit 或 Windows 2008 64bit Oracle10G…

如何使用React和Redux前端創建Rails項目

by Mark Hopson馬克霍普森(Mark Hopson) 如何使用React和Redux前端(加上Typescript!)創建Rails項目 (How to create a Rails project with a React and Redux front-end (plus Typescript!)) 在Rails項目中使用React和Redux設置單頁Javascript App的完整指南。 (A …

分布與并行計算—用任務管理器畫CPU正弦曲線(Java)

class drawSin implements Runnable{Overridepublic void run() {final double SPLIT 0.01;// 角度的分割final int COUNT (int) (2 / SPLIT);// 2PI分割的次數,也就是2/0.01個,正好是一周final double PI Math.PI;final int interval 100;// 時間間…

Rails文件上傳file_field報錯Encoding::UndefinedConversionError

服務器用的是ubuntu12 64bit,環境是ruby1.9.3rails3mysql,測試是在windows2003上。 上傳一個【.gitconfig】文件,沒有問題,上傳【新浪微博數據挖掘.pdf】報錯,上傳【back.jpg】報錯。 下面是兩段信息,是從【…

好久不來這里寫東西了.

我正準備離開學校去實現自己的目標,很清楚自己在學校的... ...做共享程序員,就不得不考慮些商業上的東西,自己要吃飯啊!我想我是該好好的處理一下這二者的關系. 轉載于:https://www.cnblogs.com/wangxiang/archive/2007/01/01/609714.html

Asp.net mvc中使用配置Unity

第一步:添加unity.mvc 第二步:在添加之后會在app_start中生成UnityConfig.cs,UnityMvcActivator.cs 第三步:使用 第四步:效果展示 轉載于:https://www.cnblogs.com/WJ--NET/p/7117839.html

頂級數據恢復_頂級R數據科學圖書館

頂級數據恢復Data science is the discipline of making data useful數據科學是使數據有用的學科 When we talk about the top programming language for Data Science, we often find Python to be the best fit for the topic. Sure, Python is undoubtedly an excellent cho…

xp系統oracle數據庫,Oracle10g 數據庫的安裝基于windowsXP

Oracle的安裝一、首先去官網下載自身系統相對應的數據庫軟件http://www.oracle.com/cn/index.htmlOracle軟件本身是免費的,個人用途完全沒關系,商業用途并被發現才會被Oracle所要求收費,收費買的不是軟件,而是授權。何謂授權&…

了解React Native中的不同JavaScript環境

by Khoa Pham通過Khoa Pham 了解React Native中的不同JavaScript環境 (Get to know different JavaScript environments in React Native) React Native can be very easy to get started with, and then at some point problems occur and we need to dive deep into it.Reac…

分布與并行計算—生命游戲(Java)

生命游戲其實是一個零玩家游戲,它包括一個二維矩形世界,這個世界中的每個方格居住著一個活著的或死了的細胞。一個細胞在下一個時刻生死取決于相鄰八個方格中活著的或死了的細胞的數量。如果相鄰方格活著的細胞數量過多,這個細胞會因為資源匱…

正確認識 Vista 激活期限

當我們在安裝 Vista 時,可以不輸入序列號進行安裝,這和以往的操作系統安裝有所不同,我們不必再為安裝系統時找不到我們的序列號標簽而發愁。如果不輸入序列號而繼續安裝系統,那么系統將提示我們有30天的激活期限!這里的…

Oracle使用hs odbc連接mssql2008

1.創建odbc 2.在 product\11.2.0\dbhome_1\hs\admin\ 下拷貝initdg4odbc,把名字改為initcrmsql(init所建odbc的名稱) HS_FDS_CONNECT_INFO crmsql #odbc名稱 HS_FDS_TRACE_LEVEL 0 HS_FDS_RECOVERY_ACCOUNTsa #要連接的數據庫名稱 HS_FDS_RECOVERY_PWD…

oracle修改物化視圖字段,獲取物化視圖字段的修改矢量(一)

當表建立了物化視圖日志之后,表的DML修改會被記錄到物化視圖日志中,而物化視圖日志則包含了一個修改矢量,來記錄哪個列被修改。在文章列的修改矢量可以通過2的N次方來獲得,也就是POWER(2, N)。而N的值,就是列的位置。但…

聚合 數據處理_R中聚合的簡介:強大的數據處理工具

聚合 數據處理by Satyam Singh Chauhan薩蒂揚辛格喬漢(Satyam Singh Chauhan) R中聚合的簡介:強大的數據處理工具 (An introduction to aggregates in R: a powerful tool for playing with data) Data Visualization is not just about colors and graphs. It’s …

大數據 notebook_Dockerless Notebook:數據科學期待已久的未來

大數據 notebookData science is hard. Data scientists spend hours figuring out how to install that Python package on their laptops. Data scientists read many pages of Google search results to connect to that database. Data scientists write a detailed docume…

【NGN學習筆記】6 代理(Proxy)和背靠背用戶代理(B2BUA)

1. 什么是Proxy模式? 按照RFC3261中的定義,Proxy服務器是一個中間的實體,它本身即作為客戶端也作為服務端,為其他客戶端提供請求的轉發服務。一個Proxy服務器首先提供的是路由服務,也就是說保證請求被發到更加”靠近”…

分布與并行計算—并行計算π(Java)

并行計算π public class pithread extends Thread {private static long mini1000000000;private long start,diff;double sum0;double cur1/(double)mini;public pithread(long start,long diff) {this.startstart;this.diffdiff;}Overridepublic void run() {long istart;f…

linux復制文件跳過相同,Linux cp指令,怎么跳過相同的文件

1、使用cp命令的-n參數即可跳過相同的文件 。2、cp命令使用詳解:1)、用法:cp [選項]... [-T] 源文件 目標文件或:cp [選項]... 源文件... 目錄或:cp [選項]... -t 目錄 源文件...將源文件復制至目標文件,或將多個源文件…