资源简介
操作系统课设时做的,设计一个允许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文件编辑器(地球人都知道
相关资源
- STC15W-408AS_EEPROM与串口通信
- 操作系统 课程设计 页面置换算法FI
- 西门子S7-200 PLC从入门到实践
- Cadence allegro 封装库生成器footprint ma
- 载噪比宽窄带计算方法
- 用fullcalendar做的日程管理
- RoseCommon破解文件
- cudart64_90和cudart64_80.dll.zip
- 创自CRT_310读卡器测试Demo源码
- CRC32-8Verilog完成
- Dr.COM宽带上网客户端 for Mac
- PT1000的C程序
- STC12C2052AD的参考例程
- Linux Wi-Fi open source drivers-mac80211 ath9k
- Linux Device Driver 中文版第三版
-
STli
nk原理图与PCB文件 - 24位AD转换器CS5532应用规则
- Autodesk 2014所有产品注册机Products XFo
- IBM DATA SERVER DRIVER FRO ODBC CLI/DB2 Driver使
- ustc组合数学试题
- Windows Installer Clean UP40653
- NCURSES中文教程PDF
- wince 6.0 GPS 导航软件
- RS422串口C驱动源代码
- Excel表自动生成时间轴大事记图.zip
- 常用的零件封装 和pcb相关
- 地理空间数据云TIF格式DEM如何转换成
- atsha204 认证程序基于I2C通信
- 多级反馈进程调度算法 实验报告 及程
- 自动增益控制电路——理论和设计
评论
共有 条评论