# Simulation-Of-Multi-Process-Concurrent-environment-simulation-And-Low-Level-Scheduling-Algorithm
操作系统必修实验:多进程并发环境模拟以及低级调度算法的仿真实现
The principle, process and implementation steps of the concurrent environment, process PCB and control operation primitives, process switching and process scheduling algorithms are mastered through program simulation.
# 一、实验目的
通过程序仿真掌握并发环境、进程PCB与控制操作原语、进程切换以及进程调度算法的原理、过程与实现步骤。
# 二、设计思路与实现内容
## (一)设计思路
根据设计要求,提出了以下的设计工作流程以及代码编写时间安排。
1. 研究实验要求,理解每一个要求需要实现的内容及呈现效果。
2. 根据实验要求阅读书籍,了解相关知识。
3. 设计程序框架,理清各个程序模块本身的属性及所提供的功能,和模块之间的相互调用关系。
4. 为每一个模块编写代码,实现各个模块的独立的功能,并完成测试。
5. 设计控制模块,依照原先设计的程序结构,将各个模块连接,并实现CPU模式切换、文件读取、进程调度调度等功能。
6. 程序调制及bug修复,设计各种不同的情形进行进程调度的测试,与实际计算的值进行比较。
7. 进一步优化程序结构,力求在实现同样功能的前提下减少程序的多线程功能对计算机CPU资源及内存资源的占用。
8. 撰写设计报告,提交整套材料,等待答辩。
## (二)设计概要
根据设计要求及实际的CPU模型,程序设计并实现了以下模块。通过控制模块对这些模块的操作及调用,可以很好地模拟出CPU的进程调度情况,并实时地显示出各个进程的执行情况。
这里只对这些模块进行简单的介绍,具体的介绍将会在后面的“四、程序结构及核心模块的实现”小节中做具体的介绍。
### 1. 时钟中断产生模块
该模块在代码中体现为一个class类,名称为“TimeClock”,主要负责时钟中断的产生与中断检测的反馈。该模块利用了多线程的设计思想,将10ms的计时与主程序分离开来,能够准确的为主程序提供10ms的计时。
### 2. 文件操作模块
该模块在代码中体现为一个class类,名称为“FileOperation”,主要负责对文件(pcb-inputs.txt文件与Results.txt文件)进行读写操作。为了规避存在多个文件指针导致的文件写入错乱、文件拒绝访问等问题,故程序全局只有一个该模块的实例,要读写的文件的文件指针只存在有一个,以保证文件读取与写入的顺序。
### 3. 任务请求模块
该模块在代码中体现为一个class类,名称为“TaskRequest”,主要负责监测作业的请求及作业的调入操作。模块对需要调入的作业的调入时间进行实时监控,每当时间符合时,即开始调入,为其分配PCB,进入就绪态运行。
### 4. PCB结构模块
该模块在代码中体现为一个class类,名称为“PCB”,主要负责仿真实现一个PCB数据结构中所拥有的全部属性,以及为了访问、修改这些属性所需要的方法。
### 5. 进程调度模块
该模块在代码中体现为一个class类,名称为“ProcessSchedule”,主要负责各个进程的状态检测与进程调度功能。该模块中存在有三个队列,运行队列、就绪队列、等待队列,分别存放三种不同状态的PCB,根据调度算法等待被调用。
### 6. 全局常量数据模块
该模块在代码中不再写为class类的形式,而是大部分以constexpr数据类型的形式给出,这些数据数值规定了一些程序运行所需要用到的常量。为了方便日后程序结构的重新设计与修改,故不将这些数值直接内嵌到代码中,而是独立的在该模块中给出,也可方便开发人员的二次设计。
### 7. CPU模块
该模块在代码中体现为一个class类,名称为“CPU”,主要负责模拟仿真CPU,其中含有各个cpu运行所需要的属性及访问、修改这些属性所需要的方法。CPU模块的存在也是为了能够模拟仿真进程的恢复现场与保护现场的操作。
### 8. 控制模块
该模块在代码中体现为一个class类,名称为“Control”,主要负责各个模块之间的协调工作。为了保证程序功能的正常以及读写文件的顺序,故以上所述的所有模块在控制模块中都有唯一的一个实例,控制模块的各个方法只能够操作这些已经声明的实例而不能再另外声明,所有的传递及返回值都以引用的方式给出。
控制模块对其他模块的声明及调度关系如图Control类包含调度所给出。
## (三)功能设计
为了实现设计要求的各种需求,则需要将以上所给出的模块进行详细的规划设计,在各个模块中尽可能多的提供操作该模块的方法。各个模块设计的越详细具体,最后系统所能够实现的功能也就越多。
此处将给出各个模块中的一些属性与方法的介绍,但只给出属性的定义及方法函数的形式,有些函数的实现过于简单,不做更详细的叙述。有些函数涉及到程序的核心功能,该部分请读者跳转至“四、程序结构及核心模块的实现”阅读。
因为模块的功能设计极大部分都体现在类的设计上面,所以此处直接给出该程序中各个类的设计,读者可以根据相对应的注释理解每个属性及方法的功能。
## (四)实现内容
### 1. CPU的抽象设计
为了仿真真实的进程调度操作,则首先需要仿真一个可用的CPU。
根据上文的介绍,本程序在设计时,将CPU单独抽象成为一个CPU模块,在该模块中,定义有CPU的不同属性与方法,这些方法为CPU的现场保护、现场恢复、中断执行等功能提供了支持。
### 2. 时钟中断设计
为了模拟仿真10ms间隔的时钟中断,故设计时钟中断模块,在该模块中,有一个专门的函数,被设计为多线程的一部分,专用来发生10ms的中断。
同时,该模块还提供中断信号的监测函数。即每当发生10ms一次的中断时,发生函数将模块中的if_break变量设置为true,监测函数响应外部的请求,返回if_break的值,当返回后,再将if_break变量初始化,这样的功能分离的设计,可保证10ms间隔的准确。
### 3. PCB模块设计
PCB模块的数据结构已经在上文的“功能设计”中详细给出,即class PCB中的内容。因为考虑到需要保证PCB的稳定性,使得外部操作不能够轻易的改变PCB的内容,故放弃结构体的设计,转而采用class类的设计。
PCB中基本的数据如下:
进程编号(ProID)、进程优先数(Priority)、进程创建时间(InTimes)、进程状态(ProState)、进程运行时间(RunTimes)、进程包含的指令数目( InstrucNum)、编号指令( Instruc_ID )、每条指令的状态标志(Instruc_State,0表示核心态、1表示用户态、2表示PV操作)、单指令运行时间(Instruc_Times)、进程当前状态(PSW)等信息。
请求运行的并发进程个数随机产生5-10以内随机整数,即说明在该程序中,总共最少执行5个进程,最多执行10个进程,这些进程之间一定是并发执行的。
进程创建时间(InTimes):程序运行从0开始计时,生成进程的时间间隔控制在1 分钟以内,需要保证出现进程并发情景。
进程运行时间(RunTime):统计记录进程当前已运行了多少时间,此字段开始时为空,进程运行过程中不断保存和记录。
进程包含的指令数目(InstrucNum):用5-20以内的随机整数产生;
编号指令(Instruc_ID):进程所执行指令序号,根据
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 操作系统必修实验-多进程并发环境模拟以及低级调度算法的仿真实现(源码+项目说明+程序).zip
资源推荐
资源详情
资源评论
收起资源包目录
操作系统必修实验-多进程并发环境模拟以及低级调度算法的仿真实现(源码+项目说明+程序).zip (33个子文件)
code_20105
实验要求
必修实验一-多进程并发环境及低级调度算法的仿真设计-2018.pdf 185KB
计算机操作系统-课外必修实验报告-模板(2018).docx 64KB
Ch2-3-进程调度算法-2018(N4).pdf 7.09MB
19316117_RunResults.txt 80KB
doc
附件7:混合指令输出结果.txt 95KB
附件6:全0型指令与1型指令输出结果.txt 86KB
课外实验报告_申请优秀A+.docx 1.47MB
附件5:全1型指令输出结果.txt 86KB
19316117-pcbs-input.txt 3KB
实验报告.pdf 1.62MB
实验报告.docx 1.47MB
可执行程序.exe 566KB
README.md 12KB
code
操作系统实验 进程调度
TimeClock.h 421B
CPU.cpp 4KB
ProcessSchedule.h 2KB
TaskRequest.cpp 3KB
main.cpp 99B
TimeClock.cpp 469B
CPU.h 2KB
OverallData.h 2KB
Control.cpp 20KB
操作系统实验 进程调度.vcxproj.user 162B
Control.h 2KB
PCB.h 3KB
操作系统实验 进程调度.vcxproj 7KB
TaskRequest.h 1KB
操作系统实验 进程调度.vcxproj.filters 2KB
FileOperation.h 2KB
ProcessSchedule.cpp 5KB
FileOperation.cpp 6KB
PCB.cpp 3KB
操作系统实验 进程调度.sln 1KB
共 33 条
- 1
资源评论
土豆片片
- 粉丝: 1540
- 资源: 5641
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Picasso_v3.1 2.ipa
- chromedriver-mac-arm64.zip
- 蓝zapro.apk
- chromedriver-linux64.zip
- UCAS研一深度学习实验-MNIST手写数字识别python源码+详细注释(高分项目)
- 基于Python和PyTorch框架完成的一个手写数字识别实验源码(带MINIST手写数字数据集)+详细注释(高分项目)
- 基于Matlab在MNIST数据集上利用CNN完成手写体数字识别任务,并实现单层CNN反向传播算法+源代码+文档说明(高分项目)
- NVIDIA驱动、CUDA和Pytorch及其依赖
- 基于SVM多特征融合的微表情识别python源码+项目说明+详细注释(高分课程设计)
- html动态爱心代码一(附源码)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功