博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(一) 进程调度
阅读量:4582 次
发布时间:2019-06-09

本文共 4319 字,大约阅读时间需要 14 分钟。

 进程调度算法有FIFO,优先数调度算法,时间片轮转调度算法,分级调度算法,目前主要是考虑FIFO和优先数调度算法(静态优先级)。

 输入:

  进程流文件,其中存储的是一系列要执行的进程, 

  每个作业包括四个数据项:
 进程名  进程状态(1就绪 2等待 3运行)  所需时间  优先数(0级最高)
 输出:
 进程执行流 和等待时间 平均等待时间
 本程序包括: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();
}
}

 

转载于:https://www.cnblogs.com/FCWORLD/archive/2010/12/04/1896340.html

你可能感兴趣的文章
面向对象的特征有哪些方面?
查看>>
三月十一号
查看>>
内存泄漏以及常见的解决方法
查看>>
九度oj题目1002:Grading
查看>>
View 的measure 和onMeasure
查看>>
国外免费空间
查看>>
构建linux内核树
查看>>
Linux C 信号处理
查看>>
第三次作业
查看>>
tomcat
查看>>
MUI开发注意事项
查看>>
elasticsearch摸石头过河——常用数据类型(二)
查看>>
scrum立会报告+燃尽图(第三周第三次)
查看>>
[SQL] 获取 Microsoft SQL Server 2008 的数据表结构
查看>>
iOS进度指示器——NSProgress
查看>>
C语言strcat,ctrcpy函数原型和改进
查看>>
good bye 2015 B - New Year and Old Property
查看>>
(第4篇)hadoop之魂--mapreduce计算框架,让收集的数据产生价值
查看>>
万年历-农历-农历日期
查看>>
如何辞职
查看>>