基于C++实现时间片与高优先级抢占调度算法的进程与资源管理功能模拟操作系统OS【100010657】
MockProcessCmd
[Experiment]设计和实现基于时间片与高优先级抢占调度算法的进程与资源管理功能模拟 OS
Computer operating system experiment.
开发环境
- IDE:Visual Studio 2019
- Language:C++ STL
功能需求
设计和实现进程与资源管理,并完成 Test shell 的编写,以建立系统的进程管理、调度、资源管理和分配的知识体系。该管理器能够完成进程的控制,如进程创建与撤销、进程的状态转换;能够基于优先级调度算法完成进程的调度,模拟时钟中断,在同优先级进程中采用时间片轮转调度算法进行调度;能够完成资源的分配与释放,并完成进程之间的同步。该管理器同时也能完成从用户终端或者指定文件读取用户命令,通过 Test shell 模块完成对用户命令的解释,将用户命令转化为对进程与资源控制的具体操作,并将执行结果输出到终端或指定文件中。同时要求设计与实现驱动程序(test shell):驱动该管理器工作,即将命令语言(即用户要求)转换成对与内核函数(如 create, request 等)的调用。
细节设计:
创建新进程时,新进程的父进程为运行态进程,新进程作为运行态的子进程;
有高优先级进程就绪态后马上抢占;
撤销父进程时,需要循环 kill 光所有子进程;
释放资源后如有进程可得到资源马上转入就绪态;
系统功能总体设计
共设计 4 个大模块:
-
PCB 进程控制块
该模块包含进程 PCB 的数据结构以及操作 PCB 内部数据变化的接口;
-
RCB 资源控制块
该模块包含进程 PCB 的数据结构以及操作 PCB 内部数据变化的接口;
-
进程管理模块
该模块负责管理整个程序的进程池和资源池,对进程进行创建、撤销以及调度等管理任务,对资源进行分配和释放,维护着程序的就绪等待队列、阻塞等待队列,提供了对程序操作的命令接口,基于时间片与高优先抢占调度算法;
三个优先级就绪队列
System-2 User-1 Init-0
-
Cmd 命令行模块
该模块负责从用户终端 Cmd 中读取用户命令,完成对用户命令的解释,将用户命令转化为对进程与资源控制的具体操作,调用操作接口 API 并将执行结果输出到终端中。
void inputCmd(vector<string>& argvs); // 命令输入模块
void initCmd(); // Cmd初始化模块
void createProcessCmd(const vector<string>& argvs); // 进程创建模块
void destroyProcessCmd(const vector<string>& argvs); // 进程释放模块
void requestResourcesCmd(const vector<string>& argvs); // 资源申请模块
void releaseResoursesCmd(const vector<string>& argvs); // 资源释放模块
void showReadyListCmd(const vector<string>& argvs); // 显示就绪队列
void showResourcesListCmd(const vector<string>& argvs); // 显示资源情况
void timeOutCmd(const vector<string>& argvs); // 时间片切换(调度)
void quitCmd(const vector<string>& argvs); // 退出Cmd
void showHelpCmd(const vector<string>& argvs); // 显示帮助信息(自启)
void showProcessTable(const vector<string>& argvs); // 显示进程表
void showOneProcess(const vector<string>& argvs); // 显示某个进程情况
类设计图
小模块
- Cmd 命令处理模块
- init 进程自启动模块
- 创建新进程模块
- 释放进程模块
- 请求资源模块
- 释放资源模块
- 调度程序模块
- 测试验证输入模块
- 界面优化与测试
待处理注释 key:
- todo
- del
- test
后期改进:
- 把容器换成链式指针数据结构
- 把多级队列封装成类,可快速拓展
- 根据进程的 Type 进行优先级墙长调度,去除臃肿的升降级代码
- 优化 STL 容器的使用
- 增加 PPID 父进程 ID
已知 BUG 日志:
- 释放资源高优先级抢占升级
- 撤销进程循环 free resources 逻辑
- init 进程释放资源是出现 BUG
版本
- 可演示界面一般存在明显 BUG version=1
效果截图
♻️ 资源
大小: 688KB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87415924
相关文章
- Python中os模块、csv模块和xlrd模块的使用
- qt实现web服务器加载vue应用进行C++和html混合编程-连载【6】-企业级系统开发实战连载系列 -技术栈(vue、element-ui、qt、c++、sqlite)
- 托管C++线程锁实现 c++11线程池
- UCOSiii源码分析——os_time.c
- UCOSiii源码分析——os_task.c任务管理函数分析
- python之os模块
- 【Harmony OS】【ARK UI】ets使用startAbility或startAbilityForResult方式调起Ability
- OS | 【四 文件管理】强化阶段大题解构 —— FAT文件系统、UFS文件系统访问文件过程
- 【Harmony OS】【JAVA UI】AVMetadataHelper 基本使用
- 【历史上的今天】3 月 30 日:世界上最早的表情符号;IBM z/OS 问世;微软发布 HoloLens 开发版
- ESP8266 non_os串口打印重定向到uart1
- 恶意软件假冒Flash Player更新提供给Mac OS X
- HarmonyOS(鸿蒙OS)发布,聊聊操作系统的调度