目录
1.4.2程序结构 3
1.4.2数据结构 3
2.4.1程序结构 8
2.4.2数据结构 8
4.2数据结构 13
一、进程调度
1. 短作业优先调度算法
1.1题目内容
设计程序模拟单处理机系统中的进程调度算法,在短作业优先调度算法、 时间片轮转调度、最高优先级优先算法三种算法中选择两种实现。
1.2题目要求
每个进程由一个进程控制块(PCB)表示。进程控制块可以包含如下信息: 进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等。进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数 产 生)。进程的到达时间为进程输入的时间。
进程的运行时间以时间片为单位进行计算。
每个进程的状态可以是就绪W(Wait)、运行R(Run)或完成F(Finish)3 中状态之一。
1.3设计思想
该算法先比较作业运行时间长短,运行时间短的作业先执行,如果运行 时间相同,则按照到到达时间执行,到达时间早的先执行。
1.4算法分析
1.4.1程序结构
①输入部分:
void input(PCB *p,int N)
{
int i;
printf("请输入进程的名称、到达时间和运行时间:\nfor example:a 0 100\n");
for(i=0;i<=N-1;i++)
{
printf("请输入第%d个进程的信息:\n",i+1); scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].runtime);
}
}
②输出部分:
oid output(PCB *p,int N)
{
int k;
printf("优先运行顺序:");
printf("%s",p[0].name); for(k=1;k<N;k++)
{
printf("-->%s",p[k].name); }
printf("\n各个进程的信息:\n");
printf("\n名称\t到达\t运行\t开始\t完成\t周转\t带权周转 \n");
for(k=0;k<N;k++)
{
printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n",p[k]. name,p[k].arrivetime,p[k].runtime,p[k].starttime,p[k].finishtim e,p[k].zztime,p[k].dqzztime);
}
}
③排序部分:用冒泡排序法将到达时间降序排序
void sort(PCB *p,int N)
{
for(int i=0;i<N;i++)
for(int j=0;j<i;j++)
if(p[i].arrivetime<p[j].arrivetime) {
PCB t;
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
④计算部分:为了得到每个进程的结束时间
void deal(PCB *p,int N)/{
int k;
for(k=0;k<N;k++)
{
if(k==0) {
p[k].starttime=p[k].arri