# 计算机操作系统课程设计:进程管理系统的模拟实现
# 一、设计内容
一个允许n个进程并发运行的进程管理模拟系统设计。该系统功能包括进程创建、撤销、阻塞、唤醒、查看和进程的同步控制。
## 1.1进程的创建
①手动创建:可以设置进程的运行时间与优先级,以及资源A,B,C的需求量;
②自动创建:进程的优先级、运行时间、资源需求量等属性,可以由系统产生随机数自动生成。当资源需求满足时,进程会加入就绪队列,等待占用处理机。进程的pid由创建顺序自动给出。
## 1.2进程的撤销
在输入进程的pid之后可以对进程进行撤销操作。
## 1.3进程的阻塞
在输入进程的pid之后可以对进程进行阻塞操作,如果当前进程正在运行,则其状态将会由运行态变为阻塞态。
## 1.4进程的唤醒
在输入进程的pid之后可以对进程进行唤醒操作,可以将设置为阻塞态的进程转为就绪态。
## 1.5进程的查看
在输入进程的pid之后可以查看进程的优先级、运行时间和资源占有量。
## 1.6进程的同步控制
进程在运行时,会根据其算法分析其优先级,运行时间等特性,产生进程执行的先后顺序,分别占用处理机,并发的执行。
## 1.7进程的调度算法
系统设置了先来先服务算法、高优先级算法、时间片轮转算法和短作业优先算法4种算法。
## 1.8界面显示
进程在执行时,每过1秒,都会在显示区打印输出当前正在执行的进程,及其所需执行时间,以方便观察进程的执行过程。
# 二、设计思想和实现方法
## 2.1进程控制块(PCB)
系统使用PCB来表示和管理每个进程的信息,每个进程都会有一个PCB。PCB中包含了进程的各种属性,如进程ID、运行时间、优先级、资源需求等。通过PCB,系统可以对进程进行调度和管理。
## 2.2资源管理
系统维护了几个资源(A、B、C),并使用计数器(A、B、C)来记录每个资源的可用数量。每个进程通过P(申请资源)和V(释放资源)操作来管理资源的占用和释放。P操作判断进程的资源需求是否满足,如果满足则分配资源并更新计数器,否则进程被阻塞。V操作释放进程占用的资源,并更新计数器。
## 2.3调度算法
系统实现了几种常见的进程调度算法,包括先来先服务(FIFO)、高优先级优先(HPF)、时间片轮转(RR)和短作业优先(SF)。通过调用不同的调度算法函数,可以选择不同的调度策略对进程进行调度。其中时间片轮转算法会设置两个标志位(分别表示当前进程正在执行与正在调用时间片轮转算法)与一个计数常量,当计数常量的值等于运行时间时,修改标志位,表示进程运行完成。
## 2.4定时器
系统使用定时器来触发进程调度。定时器每隔一定时间触发一次,调度器根据调度算法选择一个进程进行运行,并更新进程的状态。定时器的触发频率可以根据实际需求进行调整。
## 2.5队列管理
系统使用队列来管理就绪队列、阻塞队列和进程队列。就绪队列存储可以立即运行的进程,阻塞队列存储因资源不足而被阻塞的进程,进程队列存储所有的进程。系统根据需要将进程从一个队列移动到另一个队列,并根据队列中的进程状态进行相应的操作。
## 2.6用户界面
系统使用了一个名为my_list的对象来管理和显示进程的状态和操作结果。my_list对象提供了add_and_show函数,用于将信息添加到列表中并显示出来。用户可以通过查看列表中的信息来了解进程的状态和操作结果。
综上所述,该进程管理系统的设计思想是通过维护进程控制块(PCB)来管理和调度进程,使用资源管理和调度常见的算法来分配和调度进程的资源,通过定时器和队列管理来触发和管理进程调度,通过用户界面来展示和记录进程的状态和操作结果。
# 四、运行结果
## 4.1初始界面
![image](https://github.com/yanyanlai/process-management-system/assets/110188868/a182dfc9-fa37-4fdb-bf07-7663b725591f)
## 4.2手动创建进程
![image](https://github.com/yanyanlai/process-management-system/assets/110188868/9ade374f-2e9d-4193-a663-cfdeb48ff984)
## 4.3自动创建进程并执行
![image](https://github.com/yanyanlai/process-management-system/assets/110188868/3de50d5a-f829-4cea-b4e8-dd21c8d5480d)
## 4.4时间片轮转效果演示
![image](https://github.com/yanyanlai/process-management-system/assets/110188868/09e5b547-4064-4ca7-bb91-d5d4ac27c542)
# 四、总结分析
## 4.1个人总结
### 4.1.1问题及解决方法
(1)多线程同步问题: 由于涉及到多个线程对共享资源的访问,我面临了同步问题,可能导致数据不一致性。
解决方法:使用互斥锁 (std::mutex) 保护共享资源的访问,确保每次只有一个线程能够修改资源。
(2)动态添加控件及样式设计:动态添加控件时,需要考虑样式表的应用,以及如何更灵活地管理界面元素。
解决方法:使用 Qt 的信号与槽机制,动态调整样式表,同时考虑使用 QML 或其他技术进行更灵活的界面设计。
### 4.1.2软件设计及功能改进
用户交互体验: 界面设计上可以进一步优化,考虑添加更多用户交互元素,如图形化的进程状态展示、更友好的提示信息等。
错误处理:目前对于一些异常情况的处理较为简单,可以增加更完善的错误处理机制,提高程序的稳定性。
### 4.1.3个人收获与感想
多线程编程:通过解决同步问题,我更深入地理解了多线程编程的挑战和解决方案,对于资源共享和互斥访问有了更清晰的认识。
Qt 框架应用:学会了使用 Qt 框架进行界面设计和事件处理,这为我今后开发 GUI 应用提供了更多的经验和技能。
在以后的学习中,我会进一步完善程序的功能,提高代码的健壮性,同时学习和应用更多先进的软件设计和开发技术。这个课设为我提供了一个很好的实践平台,让我更加自信地面对复杂的软件设计和开发任务。
小英子架构
- 粉丝: 1028
- 资源: 4157
最新资源
- HTTP超文本传输协议-HTTP1-本站首页PDF
- MATLAB 实现基于Bagging进行时间序列预测模型的项目详细实例(含完整的程序,GUI设计和代码详解)
- MATLAB 实现基于Gradient Boosting Machines(GBM)进行时间序列预测模型的项目详细实例(含完整的程序,GUI设计和代码详解)
- MATLAB 实现基于AdaBoost(Adaptive Boosting)进行时间序列预测模型的项目详细实例(含完整的程序,GUI设计和代码详解)
- MATLAB 实现基于序列生成对抗网络(SeqGAN)进行时间序列预测模型的项目详细实例(含完整的程序,GUI设计和代码详解)
- MATLAB 实现基于自注意力机制(Self-Attention)进行时间序列预测模型的项目详细实例(含完整的程序,GUI设计和代码详解)
- 机械手机器人含设计文档机械手控制装置论文和说明书
- MATLAB 实现基于Transformer模型进行时间序列预测模型的项目详细实例(含完整的程序,GUI设计和代码详解)
- MATLAB 实现基于时间卷积神经网络(TCN)进行时间序列预测模型的项目详细实例(含完整的程序,GUI设计和代码详解)
- postgis-3.0.11.tar.gz
- 机械手机器人含设计文档机械手-两足行走机器人-臂部结构部分设计
- MATLAB 实现基于卷积神经网络(CNN)进行时间序列预测模型的项目详细实例(含完整的程序,GUI设计和代码详解)
- postgis-3.1.12.tar.gz
- MATLAB 实现基于循环神经网络(RNN)进行时间序列预测模型的项目详细实例(含完整的程序,GUI设计和代码详解)
- 机械手机器人含设计文档机械手-两足行走机器人-头部,臂部控制部分设计
- MATLAB 实现基于门控循环单元(GRU)进行时间序列预测模型的项目详细实例(含完整的程序,GUI设计和代码详解)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈