代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C
】
进程调度模拟系统
作者:
郭剑锋
/ 发布于
2013/6/20
/
613
进程调度模拟系统(FIFO,优先数调度算法,时间片轮转调度算法)
#include<stdio.h> #include<string.h> #include<iostream.h> const int block_time=10; //定义时间片的长度为10秒 const int MAXPCB=100; //定义最大进程数 //定义进程结构体 typedef struct node { char name[20]; int status; int time; int privilege; int finished; int wait_time; } pcb; pcb pcbs[MAXPCB]; int quantity; //初始化函数 void initial() { int i; for ( i=0; i<MAXPCB; i++ ) { strcpy ( pcbs[i].name,"" ); pcbs[i].status=0; pcbs[i].time=0; pcbs[i].privilege=0; pcbs[i].finished=0; pcbs[i].wait_time=0; } quantity=0; } //读数据函数 int readData() { FILE *fp; char fname[20]; int i; cout<<"请输入进程流文件名:"; cin>>fname; if ( ( fp=fopen ( fname,"r" ) ) ==NULL ) { cout<<"错误,文件打不开,请检查文件名"<<endl; } else { while ( !feof ( fp ) ) { fscanf ( fp,"%s %d %d %d",pcbs[quantity].name,&pcbs[quantity].status,&pcbs[quantity].time,&pcbs[quantity ].privilege ); quantity++; } //输出所读入的数据 cout<<"输出所读入的数据"<<endl; cout<<"进程名 进程状态 所需时间 优先数"<<endl; for ( i=0; i<quantity; i++ ) { cout<<" "<<pcbs[i].name<<" "<<pcbs[i].status<<" "<<pcbs[i].time<<" "<<pcbs[i].privilege<<endl; } return ( 1 ); } return ( 0 ); } //重置数据,以供另一个算法使用 void init() { int i; for ( i=0; i<MAXPCB; i++ ) { pcbs[i].finished=0; pcbs[i].wait_time=0; } } //先进先出算法 void FIFO() { int i,j; int total; //输出FIFO算法执行流 cout<<endl<<"---------------------------------------------------------------"<<endl; cout<<"FIFO算法执行流:"<<endl; cout<<"进程名 等待时间"<<endl; for ( i=0; i<quantity; i++ ) { cout<<" "<<pcbs[i].name<<" "<<pcbs[i].wait_time<<endl; for ( j=i+1; j<quantity; j++ ) { pcbs[j].wait_time+=pcbs[i].time; } } total=0; for ( i=0; i<quantity; i++ ) { total+=pcbs[i].wait_time; } cout<<"总等待时间:"<<total<<" 平均等待时间:"<<total/quantity<<endl; } //优先数调度算法 void privilege() { int i,j,p; int passed_time=0; int total; int queue[MAXPCB]; int current_privilege=1000; for ( i=0; i<quantity; i++ ) { current_privilege=1000; for ( j=0; j<quantity; j++ ) { if ( ( pcbs[j].finished==0 ) && ( pcbs[j].privilege<current_privilege ) ) { p=j; current_privilege=pcbs[j].privilege; } } queue[i]=p; pcbs[p].finished=1; pcbs[p].wait_time+=passed_time; passed_time+=pcbs[p].time; } //输出优先数调度执行流 cout<<endl<<"---------------------------------------------------------------"<<endl; cout<<"优先数调度执行流:"<<endl; cout<<"进程名 等待时间"<<endl; for ( i=0; i<quantity; i++ ) { cout<<" "<<pcbs[queue[i]].name<<" "<<pcbs[queue[i]].wait_time<<endl; } total=0; for ( i=0; i<quantity; i++ ) { total+=pcbs[i].wait_time; } cout<<"总等待时间:"<<total<<" 平均等待时间:"<<total/quantity<<endl; } //时间片轮转调度算法 void timer() { int i,j,number,flag=1; int passed_time=0; int max_time=0; int round=0; int queue[1000]; int total=0; while ( flag==1 ) { flag=0; number=0; for ( i=0; i<quantity; i++ ) { if ( pcbs[i].finished==0 ) { number++; j=i; } } if ( number==1 ) { queue[total]=j; total++; pcbs[j].finished=1; } if ( number>1 ) { for ( i=0; i<quantity; i++ ) { if ( pcbs[i].finished==0 ) { flag=1; queue[total]=i; total++; if ( pcbs[i].time<=block_time* ( round+1 ) ) { pcbs[i].finished=1; } } } } round++; } if ( queue[total-1]==queue[total-2] ) { total--; } cout<<endl<<"---------------------------------------------------------------"<<endl; cout<<"时间片轮转调度执行流:"; for ( i=0; i<total; i++ ) { cout<<pcbs[queue[i]].name<<" "; } } //显示版权信息函数 void version() { cout<<endl<<endl; cout<<" ┏━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl; cout<<" ┃ 进程调度模拟系统 ┃"<<endl; cout<<" ┠───────────────────────┨"<<endl; cout<<" ┃ (c)All Right Reserved Neo ┃"<<endl; cout<<" ┃ sony006@163.com ┃"<<endl; cout<<" ┃ version 2004 build 1122 ┃"<<endl; cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl; cout<<endl<<endl; } //主函数 void main() { int flag; version(); initial(); flag=readData(); if ( flag==1 ) { FIFO(); init(); privilege(); init(); timer(); } }
试试其它关键字
进程调度
同语言下
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
郭剑锋
贡献的其它代码
(
14
)
.
stash的struct类型相关代码
.
对一个类指针成员应有四大函数
.
用正则表达式匹配列出所有文件
.
c++生产者消费者
.
生成指定范围随机数
.
Qt实现透明按钮
.
控制台中输出彩色文字
.
播放flash
.
调用存储过程
.
数据库 事务处理
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3