资源简介
操作系统课设时做的,设计一个允许n个进程并发运行的进程管理模拟系统。该系统包括有简单的进程控制、同步与通讯机构。每个进程用一个PCB表示,其内容根据具体情况设置。各进程之间有一定的同步关系(可选)。系统在运行过程中应能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及系统的管理过程。
代码片段和文件信息
#include
#include
#include “stdlib.h“
typedef struct PCB
{
int name;
int runtime;
int runedtime;
int state;
int killtime;
int waitpoint;
int waittime;
struct PCB *next;
}PCB;
PCB *runqueue=NULL; //运行队列
PCB *top=NULL*tail=NULL*temp*temp_pre; //就绪队列
PCB *top_wait=NULL*tail_wait=NULL; //阻塞队列
#define NUM 4 //创建的进程数
int timeslice=3; //时间片大小
void CreateProcess()
{
int i;
srand(10);
for(i=0;i {
temp=new PCB;
temp->name=i;
temp->runtime=rand()%10+9;
temp->runedtime=0;
temp->next=NULL;
temp->killtime=0;
temp->waitpoint=rand()%10;
temp->waittime=rand()%10;
if(i==0)
{
top=temp;
tail=temp;
}
else{
tail->next=temp;
tail=temp;
}
printf(“process name %d runtime=%d waitpoint=%d runedtime=%d killtime=%d\n“tail->nametail->runtimetail->waitpointtail->runedtimetail->killtime);
}
}
void ProcessSchedule()
{
int stime=0;
while(top!=NULL||top_wait!=NULL)
{
if(top) //进行调度操作
{
//从就绪队列选一个节点,插入运行队列
runqueue=top;
top=top->next;
runqueue->next=NULL;
runqueue->waitpoint=runqueue->waitpoint-timeslice;
if(runqueue->waitpoint>0) //不产生阻塞
{
runqueue->runtime=runqueue->runtime-timeslice;
if(runqueue->runtime<=0) //进程将运行结束
{
printf(“\n进程 %d 占用处理机后状态为:\n“runqueue->name);
runqueue->killtime=runqueue->runtime+timeslice; //该进程占用处理机的时间
runqueue->runedtime=runqueue->runedtime+runqueue->killtime; //该进程以总共使用处理机的时间
runqueue->runtime=0; //该进程还需要占用处理机的时间
if(top_wait!=NULL)
stime=stime+runqueue->killtime;
printf(“process name %d runtime=%d runedtime=%dkilltime=%d\n“
runqueue->namerunqueue->runtimerunqueue->runedtimerunqueue->killtime);
printf(“进程 %d 已完成,将销毁\n“runqueue->name); //结束该进程,释放该节点空间
}
else //进程未完成,从运行到就绪
{
printf(“\n进程%d 占用处理机后状态为\n“runqueue->name);
runqueue->killtime=timeslice;
runqueue->runedtime=runqueue->runedtime+runqueue->killtime;
if(top_wait!=NULL)
stime=stime+runqueue->killtime;
printf(“process name %d runtime=%d runedtime=%d killtime=%d\n“runqueue->namerunqueue->runtimerunqueue->runedtimerunqueue->killtime);
//将运行队列插入到就绪队列
tail->next=runqueue;
tail=tail->next;
if(top==NULL && tail!=NULL)
top=tail;
tail->next=NULL;
printf(“加入就绪队列队尾成功!\n“);
}
}
else //产生阻塞
{
printf(“\n进程%d 产生堵塞!将在%ds后唤醒!\n“runqueue->namerunqueue->waittime);
runqueue->killtime=runqueue->waitpoi
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-06-10 23:28 进程管理模拟系统\
目录 0 2016-06-10 23:27 进程管理模拟系统\Debug\
文件 82944 2016-06-10 23:27 进程管理模拟系统\Debug\vc60.idb
文件 102400 2016-06-10 23:27 进程管理模拟系统\Debug\vc60.pdb
文件 10622 2016-06-10 23:27 进程管理模拟系统\Debug\进程管理.obj
文件 176213 2016-06-10 23:27 进程管理模拟系统\Debug\进程管理演示.exe
文件 175532 2016-06-10 23:27 进程管理模拟系统\Debug\进程管理演示.ilk
文件 224044 2016-06-10 23:27 进程管理模拟系统\Debug\进程管理演示.pch
文件 566272 2016-06-10 23:27 进程管理模拟系统\Debug\进程管理演示.pdb
文件 5032 2016-01-07 09:31 进程管理模拟系统\进程管理.cpp
文件 4354 2016-01-06 10:10 进程管理模拟系统\进程管理演示.dsp
文件 549 2016-01-06 10:10 进程管理模拟系统\进程管理演示.dsw
文件 50176 2016-06-10 23:28 进程管理模拟系统\进程管理演示.ncb
文件 48640 2016-06-10 23:28 进程管理模拟系统\进程管理演示.opt
文件 921 2016-06-10 23:27 进程管理模拟系统\进程管理演示.plg
- 上一篇:属性价值逻辑推演
- 下一篇:BIN文件编辑器(地球人都知道
相关资源
- AutoCAD永久去教育版破解补丁
- 开源1A锂电池充电板TP4056原理图+PCB
- m1卡 ic卡可选择扇区初始化加密软件
- TSCC.exe
- 欧姆龙CP1系列单轴定位PLC程序.cxp
- 用Beckhoff(倍福)PLC读写巴鲁夫RFID
- CVSNT 完整覆盖版防TortoiseCVS中文乱码
- pfc 使用说明.doc
- Scratch 飞机大战.sb3
- STC8951系列单片机中方指南
- 《Visual Prolog 基础类》 中文参考.chm
- Omron ETN21模块进行modbustcp通讯
- 基于ACCESS的生产管理信息系统.mdb
- CANopen使用手册_埃斯顿
- Scratch 吃豆人追踪者.sb3
- Scratch 变脸(将人物图片变成各种各样
- oracle数据迁移项目实施方案
- CanuMobiSim
- 易语言:一键cf基址源码
- 恒压力供水(DBW-DQ-1.s7p)
- ACCESS财务报表(带数据).accdb
- The Secret Path 3D 3D魔方迷宫[源码][scra
- scratch垃圾分类源码(最终版本).sb
-
Actionsc
ript 1.0实现能跟随鼠标运动的 - 右键属性文件校验插件可同时生成十
- ccs官方软件及安装
-
st
yles 引文样式语言( CSL ) 引文样 - CCS中如何生成LIB文件-并在另外CCS项目
- concept2.6无需安装1
- CCS5.05.1可使用的license
评论
共有 条评论