资源简介
多进程cpu调度仿真作业可以设置进程数和阻塞状态概况,从而计算出进程队列中的进程和每个进程所占有的时间片,可供操作系统课程学习使用
代码片段和文件信息
/*
开发环境:visual Studio 2015
其他开发环境未经测试
*/
using namespace std;
#include
#include
#include
//***进程结构定义***//
struct process
{
int num;
string ProcessStatus;
int TimeChip;
};
//***队列节点定义***//
typedef struct QNode
{
process data;
struct QNode *next;
}QNode *QueuePrt;
//***队列结构定义***//
typedef struct
{
QueuePrt front rear; // 队头队尾指针
}linkQueue;
//***队列初始化操作***//
void initQuene(linkQueue *q)
{ //初始化队列 为队列分配内存
q->front = q->rear = new QNode;
if (q->front == nullptr)
exit(0);
q->front->next = nullptr;
}
//***入队列操作***//
void enqueue(linkQueue *q process &e)
{//入队列操作
QueuePrt p;
p = new QNode;
if (q == nullptr)
exit(0);
p->data = e;
p->next = nullptr;
q->rear->next = p;
q->rear = p;
}
//***出队列操作***//
void dequeue(linkQueue *q process &e)
{
QueuePrt p;
if (q->front == q->rear)
{//如果队列为空
return;
}
p = q->front->next;
e = p->data;
q->front->next = p->next;
if (q->rear == p) //如果队列为空
q->rear = q->front;
delete p;
}
//***遍历队列中元素并打印***//
void traversalQueue(const linkQueue &q)
{
QueuePrt p;
p = q.front;
while (p != q.rear )
{
p = p->next;
process d = p->data;
cout << “[“< }
cout < }
//***************************************//
int main()
{
linkQueue readyQueue chokeQueue; /*建立就绪队列、阻塞队列*/
initQuene(&readyQueue); /*初始化就绪队列*/
initQuene(&chokeQueue); /*初始化阻塞队列*/
//输入模块*********************************************//
int n; /*表示进程数*/
float Zp; /*表示进入阻塞状态的几率*/
cout <<“请输入并发进程数(10-20):“ < cin >> n;
cout <<“请输入进入阻塞状态概率(0-1):“< cin >> Zp;
//***生成进程并放入就绪队列***//
for (int i = 0; i != n;++i)
{
/*创建进程并初始化进程*/
process p;
p.num = i;
p.ProcessStatus = “ 就绪 “;
cout << “请输入进程 “ << i << “ 的时间片长度(整数) : “;
int l; /*表示进程时间片长度*/
cin >> l;
p.TimeChip = l;
/*将进程加入就绪队列*/
enqueue(&readyQueue p);
}
/*按下 空格 并回车表示过了一个时间片*/
char c; /*表示控制循环的字符*/
process pro; /*表示运行中的程序*/
while (cin.get(c) && (c==‘ ‘||c==10))
{/*进入一次循环 表示时间片变化一次*/
if (pro.ProcessStatus == “ 运行 “)
{/*上一时间片的进程在运行状态时*/
//完成操作当前程序进入就绪队列*****************//
cout << “进程“ << pro.num << “运行结束“ << endl;
if (--pro.TimeChip > 0)
{//若时间片长度大于0,回到就绪队列
pro.ProcessStatus = “就绪“;
enqueue(&readyQueue pro);
cout << “进程“ << pro.num << “回到“ << pro.ProcessStatus << “队列“ << endl;
}
else
cout << “进程“ << pro.num << “时间片长度为0,销毁进程“ << endl;
}
/*取出就绪队列进程到运行状态*/
if (readyQueue.front == readyQueue.rear)
{
cout<<“就绪队列为空,程序结束“< break;
}
dequeue(&readyQueue pro);
pro.ProcessStatus = “ 运行 “;
cout << “时间片+1,进程 “ << pro.num << “ 进入“ << pro.ProcessStatus << “状态“< /*
根据概率进入不同状态
根据输入概率确定本次运行队列行为
*/
srand(time(0));
float b = (rand() % 100) / (float)99; /*产生0-1之间的随机数*/
if (b {/*依据所设置概率进入阻塞状态*/
if (--pro.TimeChip > 0)
{//若进程时间片长度不为0
pro.ProcessStatus = “
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1149 2018-03-25 17:12 ReadMe.txt
文件 58603 2018-03-25 17:15 测试截图.png
文件 402227 2018-05-01 12:00 要求.png
文件 4756 2018-03-25 16:59 进程.cpp
文件 7312 2018-03-25 10:39 进程.vcxproj
文件 1013 2018-03-25 10:39 进程.vcxproj.filters
- 上一篇:GBK字库+ASCII字库
- 下一篇:地图最短路径算法
相关资源
- 操作系统第五版费祥林
- 山东大学 软件学院 操作系统 实验九
- 进程调度模拟设计—时间片轮转、非
- 时间片轮转、最高响应比优先调度算
- 进程调度模拟设计——先来先服务、
- 操作系统——思维导图
- 操作系统简单二级文件系统
- 操作系统磁盘调度算法
- 进程管理模拟系统
- 操作系统 课程设计 页面置换算法FI
- 多级反馈进程调度算法 实验报告 及程
- 文件系统源码--操作系统课程设计
- 操作系统报告
- 操作系统银行家算法实验报告
- 操作系统——司机和售票员进程同步
- 操作系统实验报告 主存空间的分配与
- 操作系统设计与实现 课后习题答案
- 分布式操作系统陆丽娜版课后习题
- 操作系统-时钟中断-模拟时钟中断的产
- 用多线程同步方法解决哲学家就餐问
- 操作系统中模拟磁盘调度算法的源代
- 华南理工大学操作系统实验六:实现
- 先进先出FIFO页面置换算法
- 《操作系统概念》课后答案.pdf
- 计算机操作系统答案 方敏版
- 操作系统实验四主存空间的分配与回
- 哈工大 操作系统实验二 linux0.01添加系
- 操作系统汤子瀛版课后答案
- 华南理工大学操作系统课设
- 系分经典教材 计算机系统知识、软件
评论
共有 条评论