资源简介
内容描述:
(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语言模拟文件管理系统844
- 操作系统课设 读写者问题 c语言实现
- 最新的魔兽世界机器人脚本NpcBot.pat
- ROS操作系统入门讲义
- stm32f103c8t6开发板原理图+pcb
- STM32 PCB封装库 全系列 全网不好找
- Linux操作系统下C语言编程从零开始
- 操作系统存储管理实验报告c/c++
- 操作系统课程设计(银行家算法)附
- 现代操作系统第三版高清
- C++操作系统课设-进程管理
- 哲学家进餐问题的c++模拟实现
- 操作系统课程设计(生产者-消费者存
- 操作系统——5个实验.zip
- 操作系统进程管理实验
- 操作系统—页面置换算法C++实现
- VC6.0进程调度算法实现,作业调度 有
- 进程调度设计与实现
- 操作系统 内存管理 模拟 图形界面
- 银行家算法 mfc 含源代码 界面 操作系
- 操作系统生产者消费者问题MFC动态实
- 操作系统课程设计:Windows 命令接口之
- 操作系统课程大作业-文件管理系统
- C语言实现最低松弛度优先算法源代码
- 操作系统信号量PV经典问题:沉睡的理
- 基于C++的银行家算法模拟实现
- 生产者消费者问题源码-MFC实现-进程模
- 操作系统实验 进程调度 高响应比优先
- 操作系统文件管理C++代码实现
- 嗜睡的理发师进程同步与实现c++
评论
共有 条评论