资源简介
多进程cpu调度仿真作业可以设置进程数和阻塞状态概况,从而计算出进程队列中的进程和每个进程所占有的时间片,可供操作系统课程学习使用
![](http://www.nz998.com/pic/42205.jpg)
代码片段和文件信息
/*
开发环境: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字库
- 下一篇:地图最短路径算法
相关资源
- 升腾Win终端系统升级方法新版.doc
- Uninstall_Cortana_WINCLIENT.CN.rar
- STM32基于rt_thread操作系统的SDHC卡文件
- 操作系统 LRU算法 实验报告 及 程序代
- [免费]车载CE6.0操作系统
- 分页系统模拟实验 操作系统 课程设
- 模拟段页式虚拟存储管理中地址转换
- 操作系统实验——虚存管理实验
- 广工操作系统实验
- 广东工业大学操作系统实验四文件系
- Bochs入门教程[操作系统第一步]
- 操作系统课程设计完整版
- 磁盘调度算法的模拟实现及对比
- 模拟一个文件管理系统
- 二级文件系统(操作系统)
- uCOS编译环境建立 BC45 TASM
- Linux 操作系统实验(全)
- 操作系统实验综合设计【附代码】
- 操作系统共享内存实验
- 操作系统循环首次适应算法
- 操作系统课程设计实现可变分区存储
- 基于GTK的Linux环境下的简易任务管理器
- 操作系统课程设计 二级文件管理系统
- 加快Windows XP操作系统开机速度
- 操作系统教程课后答案华中科技大学
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 嵌入式实时操作系统ucos-II 第二版 源
- 计算机操作系统课后_汤小丹_第四版
- 计算机操作系统(第四版)汤小丹课
评论
共有 条评论