> # ♻️ 资源
> **大小:** 12.3MB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010849**](https://www.yuque.com/sxbn/ks/100010849)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87453193**](https://download.csdn.net/download/s1t16/87453193)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 多进程并发环境模拟以及低级调度算法的仿真实现
# 一、实验目的
通过程序仿真掌握并发环境、进程 PCB 与控制操作原语、进程切换以及进程调度算法的原理、过程与实现步骤。
# 二、设计思路与实现内容
**设计思路**
根据设计要求,提出了以下的设计工作流程以及代码编写时间安排。
- 研究实验要求,理解每一个要求需要实现的内容及呈现效果。
- 根据实验要求阅读书籍,了解相关知识。
- 设计程序框架,理清各个程序模块本身的属性及所提供的功能,和模块之间的相互调用关系。
- 为每一个模块编写代码,实现各个模块的独立的功能,并完成测试。
- 设计控制模块,依照原先设计的程序结构,将各个模块连接,并实现 CPU 模式切换、文件读取、进程调度调度等功能。
- 程序调制及 bug 修复,设计各种不同的情形进行进程调度的测试,与实际计算的值进行比较。
- 进一步优化程序结构,力求在实现同样功能的前提下减少程序的多线程功能对计算机 CPU 资源及内存资源的占用。
- 撰写设计报告,提交整套材料,等待答辩。
**设计概要**
- 根据设计要求及实际的 CPU 模型,程序设计并实现了以下模块。通过控制模块对这些模块的操作及调用,可以很好地模拟出 CPU 的进程调度情况,并实时地显示出各个进程的执行情况。
- 这里只对这些模块进行简单的介绍,具体的介绍将会在后面的“四、程序结构及核心模块的实现”小节中做具体的介绍。
**时钟中断产生模块**
该模块在代码中体现为一个 class 类,名称为“TimeClock”,主要负责时钟中断的产生与中断检测的反馈。该模块利用了多线程的设计思想,将 10ms 的计时与主程序分离开来,能够准确的为主程序提供 10ms 的计时。
**文件操作模块**
该模块在代码中体现为一个 class 类,名称为“FileOperation”,主要负责对文件(pcb-inputs.txt 文件与 Results.txt 文件)进行读写操作。为了规避存在多个文件指针导致的文件写入错乱、文件拒绝访问等问题,故程序全局只有一个该模块的实例,要读写的文件的文件指针只存在有一个,以保证文件读取与写入的顺序。
**任务请求模块**
该模块在代码中体现为一个 class 类,名称为“TaskRequest”,主要负责监测作业的请求及作业的调入操作。模块对需要调入的作业的调入时间进行实时监控,每当时间符合时,即开始调入,为其分配 PCB,进入就绪态运行。
**PCB** 结构模块
- 该模块在代码中体现为一个 class 类,名称为“PCB”,主要负责仿真实现一个 PCB 数据结构中所拥有的全部属性,以及为了访问、修改这些属性所需要的方法。
**进程调度模块**
该模块在代码中体现为一个 class 类,名称为“ProcessSchedule”,主要负责各个进程的状态检测与进程调度功能。该模块中存在有三个队列,运行队列、就绪队列、等待队列,分别存放三种不同状态的 PCB,根据调度算法等待被调用。
**全局常量数据模块**
该模块在代码中不再写为 class 类的形式,而是大部分以 constexpr 数据类型的形式给出,这些数据数值规定了一些程序运行所需要用到的常量。为了方便日后程序结构的重新设计与修改,故不将这些数值直接内嵌到代码中,而是独立的在该模块中给出,也可方便开发人员的二次设计。
**CPU 模块**
该模块在代码中体现为一个 class 类,名称为“CPU”,主要负责模拟仿真 CPU,其中含有各个 CPU 运行所需要的属性及访问、修改这些属性所需要的方法。CPU 模块的存在也是为了能够模拟仿真进程的恢复现场与保护现场的操作。
**控制模块**
该模块在代码中体现为一个 class 类,名称为“Control”,主要负责各个模块之间的协调工作。为了保证程序功能的正常以及读写文件的顺序,故以上所述的所有模块在控制模块中都有唯一的一个实例,控制模块的各个方法只能够操作这些已经声明的实例而不能再另外声明,所有的传递及返回值都以引用的方式给出。
控制模块对其他模块的声明及调度关系如图 2-1 Control 类包含调度所给出。
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1716339335848-0b1a9eb5-1375-4da0-b5d9-a5494f79fe81.png#averageHue=%23fafafa&from=url&id=nBG6h&originHeight=626&originWidth=735&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
图 2-1 Control 类包含调度
**功能设计**
为了实现设计要求的各种需求,则需要将以上所给出的模块进行详细的规划设计,在各个模块中尽可能多的提供操作该模块的方法。各个模块设计的越详细具体,最后系统所能够实现的功能也就越多。
此处将给出各个模块中的一些属性与方法的介绍,但只给出属性的定义及方法函数的形式,有些函数的实现过于简单,不做更详细的叙述。有些函数涉及到程序的核心功能,该部分请读者跳转至“四、程序结构及核心模块的实现”阅读。
因为模块的功能设计极大部分都体现在类的设计上面,所以此处直接给出该程序中各个类的设计,读者可以根据相对应的注释理解每个属性及方法的功能。
详情见附件 1:程序类的设计
**实现内容**
**CPU 的抽象设计**
为了仿真真实的进程调度操作,则首先需要仿真一个可用的 CPU。
根据上文的介绍,本程序在设计时,将 CPU 单独抽象成为一个 CPU 模块,在该模块中,定义有 CPU 的不同属性与方法,这些方法为 CPU 的现场保护、现场恢复、中断执行等功能提供了支持。
**时钟中断设计**
为了模拟仿真 10ms 间隔的时钟中断,故设计时钟中断模块,在该模块中,有一个专门的函数,被设计为多线程的一部分,专用来发生 10ms 的中断。
同时,该模块还提供中断信号的监测函数。即每当发生 10ms 一次的中断时,发生函数将模块中的 if_break 变量设置为 true,监测函数响应外部的请求,返回 if_break 的值,当返回后,再将 if_break 变量初始化,这样的功能分离的设计,可保证 10ms 间隔的准确。
**PCB 模块设计**
PCB 模块的数据结构已经在上文的“功能设计”中详细给出,即 class PCB 中的内容。因为考虑到需要保证 PCB 的稳定性,使得外部操作不能够轻易的改变 PCB 的内容,故放弃结构体的设计,转而采用 class 类的设计。
PCB 中基本的数据如下:
进程编号(ProID)、进程优先数(Priority)、进程创建时间(InTimes)、进程状态(ProState)、进程运行时间(RunTimes)、进程包含的指令数目( InstrucNum)、编号指令( Instruc_ID )
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++多进程并发环境模拟以及低级调度算法的仿真实现【100010849】
共58个文件
png:23个
h:8个
cpp:8个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 62 浏览量
2023-02-15
17:23:27
上传
评论
收藏 12.31MB ZIP 举报
温馨提示
详情介绍:https://www.yuque.com/sxbn/ks/100010849 通过程序仿真掌握并发环境、进程 PCB 与控制操作原语、进程切换以及进程调度算法的原理、过程与实现步骤。 根据设计要求,提出了以下的设计工作流程以及代码编写时间安排。 研究实验要求,理解每一个要求需要实现的内容及呈现效果。 根据实验要求阅读书籍,了解相关知识。 设计程序框架,理清各个程序模块本身的属性及所提供的功能,和模块之间的相互调用关系。 为每一个模块编写代码,实现各个模块的独立的功能,并完成测试。 设计控制模块,依照原先设计的程序结构,将各个模块连接,并实现 CPU 模式切换、文件读取、进程调度调度等功能。 程序调制及 bug 修复,设计各种不同的情形进行进程调度的测试,与实际计算的值进行比较。 进一步优化程序结构,力求在实现同样功能的前提下减少程序的多线程功能对计算机 CPU 资源及内存资源的占用。 撰写设计报告,提交整套材料,等待答辩。
资源推荐
资源详情
资源评论
收起资源包目录
100010849-基于C++多进程并发环境模拟以及低级调度算法的仿真实现.zip (58个子文件)
mpcesimulation_llsalgorithm
实验要求
必修实验一-多进程并发环境及低级调度算法的仿真设计-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
LICENSE 34KB
摘要.md 12KB
实验报告.pdf 1.62MB
实验报告.docx 1.46MB
img.docx-md
17-af70af0459fadf355fa07f819ea07b18.png 26KB
23-cbd0615c6ba80144f40f1845861b907b.png 43KB
12-c8be80ab221fe985abda25bdeacda0f9.png 91KB
20-112fec2bb789662a7b9c8f871bdba794.png 153KB
9-7c71a88a21abc7125c2521e2186deee0.png 135KB
11-1acd0d323777ab810ba1272b9ea751c9.png 147KB
5-cf5a80301f4942f476b38a0cb8aa0979.png 19KB
1-ca54c8c5b463105b581da671bcb22106.png 18KB
7-22de4f23020c11c6d7ef478f107209d3.png 33KB
14-d2d246950955d2c3d42f151e6e5a1a29.png 33KB
19-8dcc33093e9b62b4d01e2af982f72fa7.png 69KB
6-3d923ebbd5e30a00cb5f8b6e6dfa2564.png 19KB
15-ce6088311f477e0a5fb950cfb6d093da.png 37KB
4-7a2a8cc880720a516c0121d34404bae6.png 25KB
13-a31bd3805abd8273d45fb11a86ded628.png 149KB
8-bc76b2ccb1ceab69d58e419ef0713930.png 103KB
10-8137fe4046647a671d29f2de1c4b0277.png 104KB
21-622a2196a7fc7938aec686d3289efc5c.png 8KB
2-d0c4a7295764e8ff19baa5da91254dac.png 29KB
16-38afa94a036600b73356effe56d03e8c.png 52KB
18-121346de0d9b4876ce9be25d9b578e27.png 30KB
3-0a5448ee8aa94470e96405a92cf88cea.png 5KB
22-a23678429e695ed1b1e05c93039b1f16.png 6KB
可执行程序.exe 566KB
README.md 104KB
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
共 58 条
- 1
资源评论
神仙别闹
- 粉丝: 3749
- 资源: 7464
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功