1. 程式人生 > >模擬作業系統實現-使用Java 實現。ooad

模擬作業系統實現-使用Java 實現。ooad

一、需求分析 

通過模擬作業系統的實現,加深對作業系統工作原理理解,進一步瞭解作業系統的實現方法,並可練習合作完成系統的團隊精神和提高程式設計能力。

該作業系統是模擬一個採用多道程式設計方法的單使用者作業系統,該作業系統包括程序管理、儲存管理、檔案管理和使用者介面四部分。

本實驗所使用的程式語言是JAVA,開發工具是Eclipse,執行的作業系統是Windows7.

二、概要設計

說明本程式中用到的所有抽象資料型別的定義、主程式的流程以及各程式模組之間的層次(呼叫)關係。

2.1 各功能函式概覽:

2.1.1 使用者區管理

insertPage(int index,string page[]) 往頁面插入資料

clearPage(int index) 將指定頁面資料清除

getvalue(int black) 獲取某單元的值

setvalue(int block,int offset) 設計某單元的值

find best() 找到合適的記憶體塊地址

count() 計算記憶體中空閒的塊數目

2.1.2 記憶體分配表

addNew(int jobsize) 新建一個頁表

setNull(int index)搜尋引頁設為空值

clearall() 清楚所有記憶體

getvalue() 獲得記憶體中的值

2.1.3 裝置管理

isFree() 是否被佔有

setPossess() 設定佔有

setFree() 釋放裝置

getPossessP() 獲取佔有裝置名稱

2.1.4 模擬CPU

ALU.java

CPU.java

Register.java

2.2 主程式的內部資料流圖

2.3 系統各模組的設計

2.3.1虛擬CPU

1.虛擬資料暫存器:AX,

2.虛擬算術邏輯單元(ALU):通過接收指令對四個資料暫存器進行算術處理。

3.虛擬程式計數器(PC):存放下一條指令的地址。CPU執行一個週期PC自動加一。

4.地址暫存器(AR):存放當前執行指令的地址。

5.緩衝暫存器(DR):存放當前從記憶體取出來的資料或指令。

6.指令暫存器(IR):存放當前執行的指令。

7.中斷處理器:通過接收系統發來的自定義中斷資訊而對執行中的作業做出相應的呼應。

2.3.2指令集

描述:主要以彙編指令作參考的一套自定義指令集。

1.加法指令:X++(add)  

功能描述:AX+1

2.減法指令:X--(sub) 

  功能描述:AX-1

3.結束指令:end

   功能描述:結束指令

2.3.3虛擬記憶體

1. 主要功能

用於存放虛擬硬碟中的作業的部分或全部的指令,以供虛擬CPU呼叫執行。

2. 資料結構

用一個String型的二維陣列來作為虛擬記憶體,其中第一維的下標作為該虛擬記憶體的頁地址,第二維的下標為頁內偏移地址。如memory[add1][add2]表示add1頁內第add2個單元的內容。

2.3.4.虛擬頁表

1. 主要功能

用於記錄執行中的作業的某條指令存放在虛擬記憶體中的地址,也即做了一個虛擬硬碟到虛擬記憶體的對映表。虛擬CPU定址時使用。

2. 主要記錄資訊

a、 頁數

b、 硬碟中的首地址

c、 是否空(0為空)

d、 最近使用次數

e、 記憶體中的頁地址

2.3.5. 虛擬硬碟

1. 主要功能

把系統硬盤裡的作業讀進來,以自定義的格式編碼存放,在要執行作業是再從虛擬硬碟把指令調入虛擬記憶體。

2. 資料結構

用一個連結串列組來作為系統用的虛擬硬碟,每個連結串列可以存放一個作業,比如,list = new mylist[10];那list就可以存放10個作業,作業的大小可任意大。連結串列的每個結點存放作業的一條指令。

2.3.6. 系統硬碟/虛擬硬碟對映表

1. 主要功能

為每個作業做一個從系統硬碟到虛擬硬碟的對映表。

2. 主要記錄資訊

作業ID:為標識虛擬硬碟中的作業,為每個作業自動生成一個不重複的ID

起始地址:作業在虛擬硬碟中的起始位置,也就是連結串列的序號。

大小:作業的大小,以指令的條數作為單位。

名字:作業在系統硬碟中對應的名字。

2.3.7. 作業PCB

1. 主要記錄資訊

a、 作業ID

b、 作業狀態(0:就緒.1:執行)

c、 優先順序(0――5)數值越大,優先順序越高。

d、 當前pc(用作保留現場)

e、 當前AX(用作保留現場)

f、 當前BX(用作保留現場)//暫無

g、 當前CX(用作保留現場)//暫無

h、 當前DX(用作保留現場)//暫無

i、 當前的邏輯地址(用作保留現場)

2.3.8. 就緒佇列

1. 主要功能

用於存放處於就緒狀態的作業的PCB的一個佇列。

2.3.9. 掛起佇列

1. 主要功能

用於存放處於掛起狀態的作業的PCB的一個佇列。

2.3.10. 等待佇列

1.主要功能

用於存放處於等待狀態的作業的PCB的一個佇列。

三、詳細設計

實現概要設計中定義的所有資料型別,對每個操作只需要寫出偽碼演算法;對主程式和其他模組也都需要寫出偽碼演算法(偽碼演算法達到的詳細程度應能夠按照偽碼演算法在計算機鍵盤上直接輸入高階程式設計語言程式);畫出函式的呼叫關係圖。

本模擬作業系統分為儲存管理、裝置管理、程序管理、檔案管理和使用者介面四部分:

3.1主程式總體設計圖

3.2各個模組的虛擬碼及實現思想

3.2.1 儲存管理模組(記憶體)

1.實現功能

記憶體儲器的管理,主要由記憶體管理模組來完成。記憶體管理模組對記憶體的管理分三步。首先為各個使用者作業分配記憶體空間;其次是保護已佔記憶體空間的作業不被破壞;最後,是結合硬體實現資訊的實體地址至邏輯地址的變換。使使用者在操作中不必擔心資訊究竟在四個具體空間――即實際實體地址,就可以操作,這樣就方便了使用者對計算機的使用和操作。記憶體管理模組對記憶體的管理是使用一種優化演算法對記憶體管理進行優化處理,以提高記憶體的利用率。這就是作業系統的記憶體管理功能。

2.主存 

(1)系統區:程序控制塊和記憶體分配表

(2)使用者區:512位元組,動態分割槽儲存管理方式

3.螢幕顯示(顏色顯示)

4.頁式儲存管理

1)頁表結構【頁數】【硬碟首地址】【是否為空】【記憶體中頁的地址】

2)作用:實現程序在記憶體中的有效離散存放,提高記憶體的利用率。

5.建立頁表“模組內部資料流圖:

6.虛擬碼

/***************************************************

*功能描述:對一個作業新建一個頁表

*引數說明:id:作業ID

****************************************************/

public void newTable(int id)

/********************************************

*功能描述:找一個空的頁表

*返回值:頁表序號-1:找不到空頁表

*********************************************/

private int find()

/**************************************************

*功能描述:通過硬碟地址得出記憶體中的地址

*引數說明:id:作業IDHDAdd:硬碟中的地址

*返回值:記憶體中的地址

**************************************************/

 public int insertPage(int id,int HDAdd)

/**************************************************

*功能描述:通過硬碟地址得出記憶體中的地址

*引數說明:id:作業IDHDAdd:硬碟中的地址

*返回值:記憶體中的地址

**************************************************/

public int getMemAddress(int id,int HDAdd)

3.2.2 裝置管理模組

1.實現功能

由於計算機的不斷髮展,其應用領域越來越廣泛,應用技術越來越提高,應用方法越來越簡便,與使用者的介面越來越友好,隨之外部裝置的種類也日益增多,功能不斷提高,檔次日漸升級,因此,作業系統的裝置管理模組的功能也必須跟上外部裝置的發展而不斷髮展、不斷升級以適應外部裝置的日益發展的需要。裝置管理模組的任務是當用戶要求某種裝置時,應馬上分配給使用者所要求的裝置,並技使用者要求驅動外部裝置以供使用者應用。並且對外部裝置的中斷請求,裝置管理模組要給以響應並處理。控制裝置和CPU之間進行I/O操作,這就是作業系統的外部裝置管理功能。

2.方法

(1)是否被佔有:isFree();

(2)設定佔有:setPossess();

(3)釋放裝置:setFree();

(4)獲取佔有裝置名稱:getPossessP();

3.2.3 程序管理模組(模擬CPU

1.實現功能

程序管理也稱作業管理,使用者交給計算機處理的工作稱為作業。作業管理是由程序管理模組來控制的,程序管理模組對作業執行的全過程進行管理和控制。

2.CPU模擬

(1)用函式進行CPU模擬操作

(2)時鐘模擬

A.絕對時鐘:系統執行時間;

B.相對時鐘:程序可執行時間片。

3.程序控制塊(PCB):程序識別符號、暫存器組、程序狀態、阻塞狀態

4.程序排程

1)時間片輪轉;

2)正在執行--PCB,就緒--》呼叫,恢復現場;

3)就緒--》記憶體清零。

5.程序控制(PCB

A.create()  

         1).申請空白程序控制塊;

         2.申請主空間記憶體;

         3.初始化程序控制塊;

         4.螢幕顯示

B.destory() 

         1).回收程序所佔資源;

         2)回收程序控制塊;

         3)顯示結果

C.block()

         1)儲存CPU現場;

         2)修改程序狀態;

         3)將程序鏈入對應阻塞佇列

D.awake() 

         阻塞--》就緒

6.擬作業系統內部資料流圖

7.虛擬碼

/***************************************************

*功能描述:指令分析

*引數說明:instruction:輸入的指令

***************************************************/

private void Analysis(String instruction)

/*************************************************

*功能描述:把檔案讀入虛擬硬碟

*引數說明:filename:檔名及其路徑

*丟擲異常:IOException:找不到指定檔案出錯  myException:虛擬硬碟沒有足夠空間

 * @throws IOException 

**************************************************/

public void GetFile(String filename) throws IOException

/****************************************************

*功能描述:生成一個作業ID

*返回值:生成的作業ID

****************************************************/

private int createID()

/****************************************************

*功能描述:從虛擬硬碟中移除一個作業並把該作業在作業表中的值高為初始值

*引數描述:id:作業ID

*丟擲異常:當在作業表中找不到對應的ID時丟擲異常

****************************************************/

public void RemoveFile(int id)

3.2.4 檔案管理和使用者介面模組

1.實現功能

作業系統對檔案的管理主要是通過檔案管理模組來實現的。檔案管理模組管理的範圍包括檔案目錄、檔案組織、檔案操作和檔案保護。

2.檔案結構

1)域:基本資料單元。

2)記錄:一組相關的域的集合。

3)檔案:一組相似記錄的集合。

4)資料庫:一組相關的資料的集合

3.檔案組織和訪問

1)檔案組織指檔案記錄中的邏輯結構,由使用者訪問檔案的方式確定。

2)檔案在輔存中的物理組織取決於分塊策略和檔案分配策略。

3)基本檔案組織方式:

a.

b.順序檔案

c.索引順序檔案

d.索引檔案

f.直接或雜湊檔案

4.檔案的分配方法

(1)連續分配

(2)連結分配

(3)索引分配

5.使用者介面

使用者介面是為方便使用者使用計算機資源所建立的使用者和計算機之間的聯絡。通常指軟體介面,即在人機聯絡的硬體裝置介面基礎上開發的軟體。如建立和清除連線、傳送和接收資料、傳送中斷資訊、控制出錯、生成狀態報告表等。通常可分為3部分

(1)命令介面:為了便於使用者直接或間接控制自己的作業,作業系統向用戶提供了命令介面。命令介面是使用者利用作業系統命令組織和控制作業的執行或管理計算機系統。命令是在命令輸入介面上輸入,由系統在後臺執行,並將結果反映到前臺介面或者特定的檔案內。命令介面可以進一步分為聯機使用者介面和離線使用者介面。

(2)程式介面:程式介面由一組系統呼叫命令組成,這是作業系統提供給程式設計人員的介面。使用者通過在程式中使用系統呼叫命令來請求作業系統提供服務。每一個系統呼叫都是一個能完成特定功能的子程式。如早期的UNIX系統版本和MS-DOS版本。

(3)圖形介面:圖形使用者介面採用了圖形化的操作介面,用非常容易識別的各種圖示來將系統各項功能、各種應用程式和檔案,直觀、逼真地表示出來。使用者可通過滑鼠、選單和對話方塊來完成對應程式和檔案的操作。圖形使用者介面元素包括視窗、圖示、選單和對話方塊,圖形使用者介面元素的基本操作包括選單操作、視窗操作和對話方塊操作等。

相關推薦

Redis快取Mysql模擬使用者登入Java實現例項

一、首先建立兩個類,一個類連線Mysql,一個類連線Redis,並複寫相關方法: public class Mysql {          public Connection conn;          {                  try {                          

用兩個棧模擬佇列(java實現

要用兩個棧實現佇列,首先要明確棧和佇列的定義: 棧:只能在表尾進行插入刪除的線性表 佇列:只能在一端進行刪除,另一端進行插入的線性表 在明確棧和佇列的定義後,我們現在來討論它的具體實現過程: 對於棧而言,其遵循後進先出的原則(LIFO),後進的元素反而會最先彈出;而佇

[LeetCode][13]Roman to Integer解析 羅馬字元轉int型別關於棧的常數實現-Java實現

Q: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range fr

[LeetCode][7]Reverse Integer解析與位運算實現 -Java實現

Q: Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 A: 以下解法和程式碼沒有借閱以往任何資料,如果有更好的解法請在評論區留言 這

華為OJ-數字顛倒-C語言實現/Java實現

數字顛倒 題目描述 描述: 輸入一個整數,將這個整數以字串的形式逆序輸出 程式不考慮負數的情況,若數字含有0,則逆序形式也含有0,如輸入為100,則輸出為001 輸入描述: 輸入

模擬作業系統實現-使用Java 實現ooad

一、需求分析  通過模擬作業系統的實現,加深對作業系統工作原理理解,進一步瞭解作業系統的實現方法,並可練習合作完成系統的團隊精神和提高程式設計能力。 該作業系統是模擬一個採用多道程式設計方法的單使用者作業系統,該作業系統包括程序管理、儲存管理、檔案管理和使用者介面四部分。

作業系統- 實驗四 模擬FIFO頁面置換演算法(Java實現

                                          &

JAVA實現 簡單搶紅包演算法,模擬真實搶紅包

import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; p

作業系統- 實驗一 模擬處理機排程的時間片輪轉法(Java實現

                                          &

作業系統- 實驗二 模擬處理機排程的SJF排程演算法(Java實現

                                          &

作業系統-實驗三 模擬處理機HRRN排程演算法(Java實現

                                          &

作業系統課程設計 —— 模擬磁碟檔案系統實現Java

這是我前段時間做了一個作業系統課程設計作業,使用java實現了命令列輸入對虛擬檔案進行管理。 下面是課程設計要求: 題目五  模擬磁碟檔案系統實現  一、課程設計目的  瞭解磁碟檔案系統的結構、功能和實現。並可練習合作完成系統的團隊精神和提高 程式設計能力。  二、小組人

Java實現系統目錄實時監聽更新

warning xtend absolute ava single sdn data- sdk spl SDK1.7新增的nio WatchService能完美解決這個問題。美中不足是如果部署在window系統下會出現莫名其妙的文件夾占用異常導致子目錄監聽失效

java實現鏈表模擬LinkedList類

trac () object new mov this index als size LinkedList類底層數據結構 模擬: 1 package Collection; 2 3 public class MyLinkedList { 4 No

數據結構(三) 用java實現七種排序算法

得到 最簡 上傳 根節點 位置 中間 log 說明 堆排序       很多時候,聽別人在討論快速排序,選擇排序,冒泡排序等,都覺得很牛逼,心想,臥槽,排序也分那麽多種,就覺得別人很牛逼呀,其實不然,當我們自己去了解學習後發現,並沒有想象中那麽難,今天就一起總結一下各種排序

websocket通信 實現java模擬一個client與webclient通信

split 指定 erro nec pan substr use serve star 環境: tomcat 7 maven項目 IDE是IDEA2017 項目功能描述: 啟動項目,會啟動一個web端的websocket-client和一個java模擬的webso

java算法面試題:排序都有哪幾種方法?請列舉JAVA實現一個快速排序選擇冒泡快速集合至少4種方法排序

算法 err div println rda print 算法面試 ++ 快速排序 package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util

java實現連線vsftpd伺服器,上傳,下載,刪除

核心程式碼如下: package com.bh.service; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOExcep

java實現七種排序演算法

 很多時候,聽別人在討論快速排序,選擇排序,氣泡排序等,都覺得很牛逼,心想,臥槽,排序也分那麼多種,就覺得別人很牛逼呀,其實不然,當我們自己去了解學習後發現,並沒有想象中那麼難,今天就一起總結一下各種排序的實現原理並加以實現。                         -WH 一、文章

java實現快速排序一種常規的,一種是左程雲的方式

java實現快速排序: 一:先來一個常規快排: 這個方式就是我們的基準值一直在兩個邊界徘徊,要麼在less的較大邊界,要麼是在more的小邊界,其實就是在居中位置徘徊。 package chapter1; //來一個快排,常規快排 public class QuickSort {