(一)课设板块
模块划分:
 (1)、进程管理模块
 (2)、内存管理模块
 (3)、文件管理模块
 (4)、设备管理模块
 (5)、界面管理模块
1. 进程管理: 考虑进程的创建、状态转换(就绪、执行、阻塞)、调度、撤销等,设计PCB结构,设计进程调度算法。
选做:使用信号量机制模拟多任务系统中的进程同步。
2. 内存管理 :考虑内存的动态分配与回收,采取何种数据结构,采用何内存分配算法等。
选做:内存的离散分配(分页式、分段式或段页式管理),以及基于此种机制下的虚拟内存管理,页面置换算法。
3. 文件管理: 考虑文件及文件目录的创建、查询、删除等操作的实现,考虑磁盘空间分配采用的数据结构及算法(连续分配、显式链接、索引分配),考虑磁盘空闲区管理采用的数据结构及算法(空闲盘块表、空闲盘块链、位示图、成组链接法)和算法。
选做:磁盘调度算法。
4. 设备管理:考虑设备的分配和回收,采取何种数据结构,采用何种分配算法,使用银行家算法避免死锁。
(二)项目文件
主窗口
mainwindow.h
mainwindow.cpp
mainwindow.ui
OS.pro 项目配置文件
pics文件夹 存放图标
- 进程管理
- process文件夹
- 内存管理
- memory文件夹
- 文件管理
- file文件夹
- 设备管理
- equipment文件夹
- 磁盘管理
- disk文件夹
(三)模块间数据共享
关于数据共享
不同的类之间共享数据,通常可以考虑;
-  某变量设置为全局变量,然后extern声明 如下,通过全局变量w, 共享readyQueue队列 
//根据优先级排序,放入就绪队列
extern MainWindow *w;
    w->processTab->readyQueue.push_back(process);
    sort(w->processTab->readyQueue.begin(),w->processTab->readyQueue.end(), ProcessTab::compare);
-  包含某个类的文件,然后使用其函数 
-  利用信号与槽 如下,在对话框更改了另一个process的界面 //更新表格 connect(this,SIGNAL(sendToShowProcess()),w->processTab,SLOT(showProcess())); emit this->sendToShowProcess();
(四)流程图
 进程管理
 内存管理

 文件管理

 设备管理

(五)UML
 进程管理



 内存管理

文件管理

 设备管理

(六)效果展示
1.进程模块
创建进程时,所有进程就绪

开始调度,由下图可见,进程“获取键值”在“键盘输入”未运行完,只执行了一部分时调入运行队列后阻塞。同时“键盘输入”在运行自己的第三个时间片(一个时间片2s,图上显示第6秒)时,请求调入第19号页面。 且运行完的进程所占用的内存块释放。

磁盘调度时显示磁盘调度信息
访问磁道号2,磁盘模块第三行正在被访问,变为红色


2.内存模块
内存初始化状态

虚拟内存初始化状态:

运行时:


3.文件模块
文件初始创建时


扩展各个文件后

操作删除文件

操作后

4. 设备管理模块
4.1 进程队列的生成
点击生成按钮,产生一个进程个数为24的进程队列。

点击每个进程可以查看该进程详情

4.2 进程资源矩阵展示
点击开始,展示资源的分配以及进程请求的详细情况

4.3 发送请求
点击发送请求按钮,开始发出请求。

若请求资源大于need向量,则拒绝请求。


请求合理则执行安全性算法检测

4.4 安全性算法
执行安全性算法,

4.5 资源分配
通过则分配资源,进程的need减少,allocati增加,available减少。
例如:

请求后(request = (1,1,1,1))
 )
)

4.资源回收
资源占有时间到后,则回收,该进程allocation和need置零,available=available+allocationi





















