java课程设计进程管理_GitHub - Shadow-Java/OS: 操作系统课程设计,关键词:进程同步与互斥、进程死锁、LRU页面替换算法、时间片轮转算法、时钟等...
可視化仿真實現作業管理與虛頁內存管理
??設計要求
在多任務的作業并發環境下,仿真實現作業及進程并發環境、MMU 地址變換、進程原語、頁表生成與虛頁調度算法(至少實現LRU)、三級作業調度過程及算法(需作業調度到指令集,至少實現三態轉換)
、頁面分配與回收算法、進程同步互斥、進程死鎖檢測 與 撤銷算法,并將實現原理過程通過可視化方式呈現。
📱主界面
🏗?程序結構
Job類
作業類,一個作業分1-5個任務
Task類
任務類,每個任務含有一個進程
Process類
進程類,包含20-300條指令
Instruct類
指令類
🔨硬件設計
Job類
定義了一個作業類,開機時隨機生成一到五個作業,通過作業來生成多個任務。對應的關系為,作業包含多個任務,一個任務包含一個進程# OS
操作系統課程設計,關鍵詞:進程同步與互斥、進程死鎖、LRU頁面替換算法、時間片輪轉算法、時鐘等
Process類
定義了一個任務類,里面包含了進程所有的屬性,同步標志位、進程狀態等
Instruct類
定義的指令類,用于進程調度執行
界面組件設計
界面思路來源于任務管理器,管理進程的相關調度信息和CPU或內存物理塊占用信息
JFrame
圖形界面組件,用于構造整個面板容器。該課設將Os繼承于JFrame,可以減少文件數量,主要的界面函數寫在Os.java文件里
JPanel
界面面板,用于創建需要個圖形界面。該組件支持常見四種界面布局,對于該設計界面主要有邊框布局(BordLayout)、網格布局(GirdLayout)和流式布局(FlowLayout)
JTable
表格組件,用于設計表格實時更新進程相關信息情況。該組件使用setValue()函數可以實現實時更新數據
JScrollpan
用于創建滾動條,當使用的文本數據太長,可以加入滾動條進行查看寫入的信息
🖥?進程調度
進程原語
public void create(Task task)
函數輸入:一個Task對象
輸出變量:無
調用方法:每次創建進程時調用
功能:進程創建原語
public void destroy()
函數輸入:一個Process對象
輸出變量:無
調用方法:每次銷毀進程時調用
功能:進程銷毀原語
public void block()
函數輸入:一個Process對象
輸出變量:無
調用方法:每次阻塞進程時調用
功能:進程阻塞原語
public void wake(Process process )
函數輸入:一個Process對象
輸出變量:無
調用方法:每次喚醒進程時調用
功能:進程喚醒原語
public void run_ready()
函數輸入:無
輸出變量:無
調用方法:當處在運行態的進程運行完時間片轉為就緒隊列時調用
功能:將進程在運行態和就緒態之間轉換,如果執行完指令就撤銷進程
時間片輪轉算法
public void cpu_manage()
函數輸入:無
輸出變量:無
調用方法:在每次時鐘中斷時調用,即請求操作系統進行調度
功能:操作系統調度管理,cpu每次間隔十毫秒調度一次,根據指令的狀態執行不同的操作
進程同步與互斥
進程同步是把一對進程分別分別兩部分,當該進程需要同步時把需要同步的進程PID賦值給同步標志位,讓該進程執行一半后必須等待同步進程執行一半才能繼續執行。
進程互斥就是使用互斥信號量進行設計,如果信號量被占用則需要等待釋放才能執行
進程死鎖
進程死鎖我們加入五種資源,查看是否能夠分配資源,把所有不能夠分配的進程和需要分配資源的進程都加入等待分配資源隊列,然后使用銀行家算法的預分配的辦法進行檢測能夠分配則把從隊列中剔除,不能的則全部阻塞。
總界面設計
模式選擇界面
隨機生成模式
此模式里面的指令類型、指令數目、進程數目、pv信號量占用等都是通過隨機數生成
讀寫文件模式
此模式事通過讀入文件里面的進程和指令信息進行賦值,然后執行相應的操作
裸機部件數據顯示界面
CPU占用情況:
CPU情況會顯示占用的那個進程,指令條框顯示執行到那條指令并且當前的物理地址顯示
時鐘計時:
時鐘計時是以十的倍數進行則增加
資源、內存、磁盤:
資源顯示當前的資源數,如果占用了則會減少。內存前半部分表示已經占用的內存,后面為總內存大小。磁盤表示總的磁盤設計大小。該界面展示基本硬件在本課設的詳細設計情況和運行情況。
內存數據顯示界面
內存分為64個物理塊,每個物理塊為512B。每個物理塊的展示情況都在界面上進行展示。
缺頁中斷顯示界面
發生缺頁時用頁面替換算法進行替換,將過程輸出
進程調度過程顯示
進程調度過程是整個時間片輪轉的過程,記錄什么時刻有作業請求,什么時刻創建進程,那個進程進入了就緒隊列還是運行隊列。還有執行指令時記錄詳細的物理地址和邏輯地址。
四種調度過程分別顯示
通過創建兩個面板,一個面板里面填充標簽,另一個面板潛入四個面板,每個面板里面展示不同的界面,在不同的界面進行輸出展示
👩?💻測試更新
增加程序計數器的輸出
用于詳細的過程展示,將當前執行的指令進行輸出
增加缺頁中斷圖形界面的輸出
用于詳細界面輸出
📽?技術問題與解決方案
進程死鎖問題
死鎖是指在一組進程中各個進程均占有不會釋放的資源,但因互相申請被其他進程所占用不會釋放的資源而處于的一種永久等待的狀態。對于死鎖的檢測和資源分配情況,我們定義了五種資源,每個進程都會產生自己需要的資源,通過銀行家算法進行資源預分配,看是否能夠給與分配。如果能就把所有能分配資源的進程從等待資源隊列中移除,剩下的就是不能分配的進程了,即死鎖。
進程同步與互斥
開始設想的同步,不太確定怎么能隨機定義的十幾個進程中讓其同步。 既然是模擬同步,那就想到給進程一個同步標志位,標志位表示需要同步的進程,比如1號進程如果需要同步,則該同步標志位就是需要同步的進程PID;2號進程需要同步,則2號進程的同步標志位就是需要同步進程的PID。進程的互斥解決方案就是設置一個互斥信號量,看是否信號量被占用,如果被占用則進入阻塞隊列,需要等待信號量釋放。當另一個進程執行時釋放了信號量,同時會喚醒阻塞隊列的第一個進程。
界面設計
思路來源于任務管理器,任務管理器的界面分為許多的板塊,每個板塊都有自己的布局和樣式。但Java語言限制,只能用swing相關組件進行搭建。所以對于進程詳細信息使用JTabel比格式布局更好,通過對每個Jpanel的四種布局搭配可以更好的呈現出近似于任務管理器布局的樣式。
時間片輪狀算法
在第一次實驗中,我用的是多級反饋隊列算法,與此算法不同。在初次寫時間片算法時。對于多種情況的討論,起初沒有加入進程同步與互斥,討論了每種指令的類型,但是沒有對是否分配資源,是否需要同步等進行討論,在后期的整合中,我發現可以分開討論,嵌套;調試之后就可以運行正確。
💞參考文獻
[1]費翔林,駱斌.操作系統教程[M].5 版.北京:高等教育出版社,2014-2
[2]王道.2018操作系統考研復習指導[M].電子工業出版社
[5]操作系統之進程管理(2)--進程互斥與進程同步.https://www.cnblogs.com/exRunne
r/p/7576965.html
[6]Java圖形化界面設計--容器.[阿朗].[博客園].https://www.cnblogs.com/aipan/p/6
409486.html
總結
以上是生活随笔為你收集整理的java课程设计进程管理_GitHub - Shadow-Java/OS: 操作系统课程设计,关键词:进程同步与互斥、进程死锁、LRU页面替换算法、时间片轮转算法、时钟等...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java jar log4j_使用Log
- 下一篇: mysql中建立索引的原则_在SQL数据