资源简介
内容描述:
(1)设计进程控制块PCB表结构,分别适用于优先权调度算法和时间片轮转调度算法。
PCB结构中一般包括以下信息:进程名、进程优先数(或轮转时间片),进程所占用的CPU时间,进程的状态,当前队列指针等。可以根据调度算法的不同,对PCB结构作适当的增删。
(2)建立进程就绪队列。对两种不同算法编制入链子程序。
(3)编制两种进程调度算法:允许用户在程序运行时选择使用某一种调度算法。
a)抢占式动态优先权调度算法;
b)时间片轮转调度算法。
通过VC++6.0实现!
代码片段和文件信息
#include
#include
#include
#include
#include
#include //控制字符长度头文件
using namespace std;
#define TXIANGYING 5 //响应时间为5s
#define minprio 20 //优先权高低控制标准
#define ADDPRIO 1 //定义优先权增加幅度
#define UPDATETIME 2 //定义优先权增加间隔
typedef struct node
{
char name[20]; //进程名字
int prio; //进程的优先级
int round; //分配CPU的时间片
int needtime; //进程执行所需要的时间
char state[8]; //进程的状态,Wait——就绪态,Run——执行态,Finish——完成态
int count; //记录执行的次数
int arrive; //到达时间
int zhouzhuan ; //周转时间
double ave_daiquan ; //带权周转时间
int fuwu_time; //服务时间
struct node *next; //链表指针
}PCB;
int GetFirst(int sumtime); //从就绪队列取得第一个节点
void Output1(); //输出时间片轮转队列信息
void Output2(int sumtime); //输出优先权调度队列信息
void InsertPrio(PCB *in); //创建优先级队列,规定优先数越小,优先级越高
void InsertRound(PCB *in); //创建时间片就绪队列
void InsertFinish(PCB *in); //创建完成队列
void PrioCreate(); //优先级输入函数
void TimeCreate(); //时间片轮转调度算法——输入函数
void Priority(); //按照优先级调度
void RoundRun(); //时间片轮转调度
void update_priority(int &add_priority); //等待队列的优先权更新
PCB *ready=NULL*run=NULL*finish=NULL;//定义3个队列,就绪队列,执行队列和完成队列
int main()
{
char choose;
FILE *fp;
cout<<“*****************欢迎进入进程管理和调度的算法模拟*****************\n“< cout<<“*****************************主菜单*****************************“< cout<<“输入进程的调度方法(请输入对应数字):“< cout<<“1.抢占式动态优先权调度(手工输入)“< cout<<“2.时间片轮转调度(手工输入)“< cout<<“3.抢占式动态优先权调度(从文件读入已设定的的数据)“< cout<<“4.时间片轮转调度(从文件读入已设定的的数据)“< cout<<“5.退出程序“< cin>>choose;
switch(choose)
{
case ‘1‘:
PrioCreate();
Priority();
Output1();
break;
case ‘2‘:
TimeCreate();
RoundRun();
Output1();
break;
case ‘3‘:
fp=freopen(“yxj.txt““r“stdin);//优先级输入文件
PrioCreate();
Priority();
Output1();
fclose(fp);
break;
case ‘4‘:
fp=freopen(“sjp.txt““r“stdin);//时间片输入文件
TimeCreate();
RoundRun();
Output1();
fclose(fp);
break;
case ‘5‘:exit(1);
default:break;
}
return 0;
}
/*
void GetFirst() //取得就绪队列第一个节点
{
run = ready;
if(ready!=NULL)
{
strcpy(run ->state“Run“);
ready = ready ->next;
run ->next = NULL;
}
}
*/
int GetFirst(int sumtime) //取得就绪队列第一个节点
{
PCB *fst*temp1*temp2*temp3;
if(ready!=NULL && sumtimearrive)//ready队列改变
{
fst=ready;
while(sumtimearrive)//寻找到达时间最小的
{
temp1=fst;//记录符合条件的前面一个值
fst=fst->next;
if(fst==NULL)
{
sumtime++;
Output2(sumtime);
fst=ready;
if (sumtime>=fst->arrive)//搜索一轮之后,设置CPU时间+1,即全部进程都等待
{
run=ready;
if(ready!=NULL)
{
strcpy(run ->stat
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3401 2010-04-18 00:44 diaodu.dsp
文件 537 2010-04-18 00:44 diaodu.dsw
文件 41984 2010-04-25 00:36 diaodu.ncb
文件 53760 2010-04-25 00:36 diaodu.opt
文件 1162 2010-04-18 00:44 diaodu.plg
文件 40 2010-04-18 00:44 sjp.txt
文件 39 2010-04-18 00:44 sjp1.txt
文件 52 2010-04-18 00:44 yxj.txt
文件 53 2010-04-18 00:44 yxj1.txt
文件 55 2010-04-18 00:44 yxj2.txt
文件 548962 2010-04-18 00:44 Debug\diaodu.exe
文件 285808 2010-04-18 00:44 Debug\diaodu.obj
文件 1123328 2010-04-18 00:44 Debug\diaodu.pdb
文件 126976 2010-04-18 00:44 Debug\vc60.pdb
文件 11485 2010-04-18 00:44 diaodu.cpp
目录 0 2010-04-18 00:44 Debug
----------- --------- ---------- ----- ----
2197642 16
- 上一篇:类似QQ截图的MFC截图软件C++源码
- 下一篇:DES密码算法 S盒P盒
相关资源
- 用C#和C++实现的进程调度算法程序操作
- 操作系统实验--电梯调度 VC++实现
- 基于C++的ATM机操作系统设计
- 操作系统课程设计银行家算法C语言
- 操作系统3种页面置换算法 C++实现
- 操作系统中的文件管理模拟
- 操作系统CPU调度算法之最短剩余时间
- 操作系统设备管理模拟 银行家算法
- c++操作系统进程管理模拟
- 操作系统进程调度算法——短作业优
- 多级反馈队列调度算法C语言源代码
- 操作系统课程设计报告模拟文件系统
- 操作系统仿真之内存替换算法
- 非抢占式短作业优先进程调度C语言
- C++制作加密解密系统
- 操作系统多级反馈队列模拟程序
- Linux操作系统C语言编程入门pd
- 设计一个有 N个进程调度程序设计
- 操作系统 虚拟存储器地址转换
- 操作系统的模拟实现 C++编写
- 操作系统课程设计(最佳适应算法的
- MFC实现的操作系统页面置换FIFO、LRU、
- 进程调度的设计与实现图形界面实现
- myshell:操作系统编程-自己用C语言写
- 操作系统 内存分配与回收 C语言模拟
- 操作系统实验——spooling技术
- 操作系统使用C语言链表实现进程管理
- 哲学家进餐实验报告
- 《基于Linux的设备分配及磁盘调度》
- 操作系统生产者与消费者综合性实验
评论
共有 条评论