采用静态优先权优先算法的进程调度程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

采用静态优先权优先算法的进程调度程序

学号:

姓名:

专业:

指导教师:

日期:

目录

第1部分课设简介 (3)

1.1 课程设计题目 (3)

1.2 课程设计目的 (3)

1.3 课程设计内容 (3)

1.4 时间安排 (3)

第2部分实验原理分析 (3)

2.1问题描述 (3)

2.2解决方法 (4)

第3部分主要的功能模块 (5)

3.1主要的函数 (5)

3.2 测试用例及运行结果 (7)

第4部分源代码 (9)

第5部分总结及参考文献 (16)

5.1 总结 (16)

5.2 参考文献 (17)

第1部分课设简介

1.1 课程设计题目

采用静态优先权优先算法的进程调度程序

1.2 课程设计目的

操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。

1)进一步巩固和复习操作系统的基础知识。

2)培养学生结构化程序、模块化程序设计的方法和能力。

3)提高学生调试程序的技巧和软件设计的能力。

4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。

1.3 课程设计内容

设计并实现一个采用静态优先权算法的进程调度演示程序

1.4 时间安排

1)分析设计贮备阶段(1 天)

2)编程调试阶段(7 天)

3)写课程设计报告、考核(2 天)

第2部分实验原理分析

2.1问题描述

(1)每一个进程有一个PCB,其内容可以根据具体情况设定。

(2)进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定

(3)可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、作业大小、进程优先级的初始化

(4)可以在运行中显示各进程的状态:就绪、执行(由于不要求设置互斥资源与进程间的同步关系,故只有两种状态)

(5)采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列

(6)有性能比较功能,可比较同一组数据在不同调度算法下的平均周转时间(7)具有一定的数据容错性

2.2程序设计流程图

2.3解决方法

通过数组容纳所有数据,根据冒泡排序把数据按从小到大顺序排列,在分析a[0]和其他数据的大小,如果a[0]的完成时间大于其他数据就按照冒泡的排列顺序,如果小,就比较其他数据的优先级,按优先级大小排序。

第3部分主要的功能模块3.1主要的函数

void fcfs()

{

int i,j,n,min,px;

float sum1,sum2;

printf("\t请输入有n个进程(0

scanf("%d",&n);

while(n>50||n<=0)

{

printf("n\t请重新输入:");

scanf("%d",&n);

}

printf("\n\n");

struct Gzuo{

int id; //进程名字

int dt; //到达时刻

int st; //服务时间

int wct; //完成时刻

float zt; //周转时间

float dczt; //带权周转时间

};

Gzuo a[N];

for(i=0;i

{

a[i].id=i+1;

printf("\t到达时间:");

scanf("%d",&a[i].dt);

printf("\t服务时间:");

scanf("%d",&a[i].st);

printf("\n");

}

for(j=n-1;j>=0;j--)

{

for(i=0;i

{

if(a[i].dt>a[i+1].dt)

{

min=a[i].dt;

a[i].dt=a[i+1].dt;

a[i+1].dt=min;

min=a[i].st;

a[i].st=a[i+1].st;

a[i+1].st=min;

min=a[i].id;

a[i].id=a[i+1].id;

a[i+1].id=min;

}

}

}

a[0].wct=a[0].st+a[0].dt;

a[0].zt=(float)a[0].st;

a[0].dczt=a[0].zt/a[0].st;

for(i=1;i

{

if(a[i].dt>a[i-1].wct)

{

a[i].wct=a[i].dt+a[i].st;

a[i].zt=(float)a[i].st;

a[i].dczt=a[i].zt/a[i].st;

}

else

{

a[i].wct=a[i-1].wct+a[i].st;

a[i].zt=(float)(a[i].wct-a[i].dt);

a[i].dczt=a[i].zt/a[i].st;

}

}

3.2 测试用例及运行结果

相关文档
最新文档