操作系统实习报告

处理器调度算法的实现

1先来先服务调度算法
1.1题目内容
设计程序模拟单处理机系统中的进程调度算法,在先来先服务算法,时间片轮转调度算法和优先数调度算法三种算法中选择一种。
1.2题目要求
(1)每个进程由一个进程控制快(PCB)表示。进程控制块可以包含如下信息:进程名,优先数,到达时间,需要运行时间,已用CPU时间,进程状态等。
(2)进程的优先数及需要运行时间可以事先人为指定(也可由随机数产生)。进程的到达时间为进程的输入时间。
(3)进程的运行时间以时间片为单位进行计算。
(4)每个进程的状态可以是就绪W(Wait),运行R(Run)或者完成F(Finish)3个状态之一。
(5)按照作业/进程进入队列的先后顺序进行挑选,先进入的将先进性后续步骤处理。
1.3设计思想
该算法按照进程到达时间先后顺序执行,先到达的先执行。
1.4算法分析
(1)定义PCB结构体;
(2)P_input()输入函数;
(3)P_output()输出函数;
(4)sort()函数排序;
(5)main()主函数。
1.5核心代码
#include
#include<stdio.h>
using namespace std;
/结构体/
struct PCB
{
char name[10]; //进程号
int arrivalTime; //到达时间
int serviceTime; //服务时间
int startTime; //开始时间
int finishTime; //完成时间
int zzTime; //周转时间
double dqzzTime; //带权周转时间
};
/输入函数/
void P_input(int n,struct PCB pr[])
{ //输入进程号,到达时间及服务时间
printf(“请依次输入进程号、到达时间、服务时间:\nFor example:a 1 5\n”);
for (int i=0 ; i<n ; i++)
scanf("%s %d %d",&pr[i].name, &pr[i].arrivalTime,&pr[i].serviceTime);
}
/输出函数/
void P_output(int n,struct PCB pro[])
{ //输出进程号,到达时间,服务时间,开始时间,完成时间,周转时间,带权周转时间
printf(“进程号 到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间\n”);
printf("------------------------------------------------------------------------\n");
for (int i=0 ; i<n ; i++)
printf("%s%8d%10d%10d%10d%10d%13.2f\n",
pro[i].name, pro[i].arrivalTime,pro[i].serviceTime,pro[i].startTime,
pro[i].finishTime,pro[i].zzTime,pro[i].dqzzTime);
printf("------------------------------------------------------------------------\n");
}

/排序,将个进程到达时间进行升序排序/
void sort(int n,struct PCB pro[])
{
/初始化/
pro[0].startTime=0;
pro[0].finishTime=0;
pro[0].zzTime=0;
pro[0].dqzzTime=0;
//对所有进程的到达时间进行排序
struct PCB t;
for (int i=0 ; i<n ; i++)
for (int j=0 ; j<i ; j++) //因为i=n-1,j<i,所以j=n-2
if (pro[i].arrivalTime < pro[j].arrivalTime)
{ //此进程到达时间小于下一进程到达时间
t = pro[i];
pro[i] = pro[j];
pro[j] = t;
}
for(int k=0 ; k<n ; k++)
{ //当前时刻判断下一个进程是否到达
if(k==0)
{ //未到达
pro[k].startTime=pro[k].arrivalTime; //把下一进程的到达时间赋给开始时间
pro[k].finishTime=pro[k].startTime+pro[k].serviceTime; //计

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值