下载此文档

2025年作业进程调度算法设计与实现操作系统实验报告.pdf


文档分类:IT计算机 | 页数:约9页 举报非法文档有奖
1/9
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/9 下载此文档
文档列表 文档介绍
该【2025年作业进程调度算法设计与实现操作系统实验报告 】是由【小屁孩】上传分享,文档一共【9】页,该文档可以免费在线阅读,需要了解更多关于【2025年作业进程调度算法设计与实现操作系统实验报告 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。 : .
海纳百川,有容乃大;壁立千仞,无欲则刚。——林则徐
仅供个人参考

实 验 报 告






计算机操作系统
课程名称
实验项目 作业 / 进程调度算法设计与实现
实验仪器





院 系 计算机学院
专 业 计算机科学与技术
班级/学号 计 0503 / 29
学生姓名 杨天心
实验日期 2007-11
成 绩
指导老师
不得用于商业用途 : .
以铜为镜,可以正衣冠;以古为镜,可以知兴替;以人为镜,可以明得失。——《旧唐书·魏征列传》
仅供个人参考
实验二 作业/进程调度算法设计与实现
一.实验目的
调度是操作系统的主要功能, 本实验通过自行设计实现的调度程序, 使同学们加深
对作业 /进程调度功能的理解,从而掌握操作系统的基本原理。同时还可以提高同学们
的编程能力。

二.实验要求
用 C 语言编制按优先级调度三个进程的调度程序,其中要求进程的优先级随着运
行时间的延长而降低,但却随着等待时间的延长而升高。

三.实验方法内容
(一)算法设计的思路

1、 设计进程控制块为以下结构:
struct PRO

char id; /*进程的 id 号,可以表示为 a, b, c */
int pri; /*进程的初始优先级 */
int p; /*等待进程可以动态增加的优先级量 */
int s; /*运行进程应该动态减少的优先级量 */
int status; /* 表示进程的状态, 0 为等待, 1 为运行 */
﹜A={‘a’,2,1,1,0} ,B={‘b’,1,1,1,0}, C={‘c’,0,1,1,0};


2、 要求接管时钟中断:INT 1Ch
使用到的 C 语言函数为:
getvect(intno) /*获得 intno 的中断向量*/(要求保存在一个全局变量中)
setvect(intno,time) /*设置 intno 的中断向量为函数 time 的入口地址 */

3、 在自己编制的新的时钟中断处理程序中,完成进程优先级的修改;并记录被中断的
次数。
Void interrupt time( )
{
if(==1) =-;
else =+;
……..
…….
xx++;
}

不得用于商业用途 : .
天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为。——《孟子》
仅供个人参考
4、 编制函数 select( ),其功能是从三个进程中选择优先级最高的进程,并将其状态设
置为运行,其余设置为等待。并返回运行进程的序号供主程序选择运行。
5、 编制函数 int prime (int n),功能是判断 n 是否为素数,如果是素数,返回 n;否则
返回 0。该函数是三个进程的执行过程。
6、 主程序框架如下:
main ( )
{ int a[3]={100,100,100};
int I, j, k, u, v, w=0, x=0, y=0;
char c;
/*获得时钟中断向量 */
/*设置新的中断向量 */
………..
while(xx<300) /*xx 是全局变量,用于记录时钟中断的次数;用循环来模拟三个
进程的运行过程 */
{u=select ( ); /*调度一次 */
switch (u)
{case0: a[0]++; if(a[0]>10000) a[0]=100; v=prime(a[0]);
if(v) {gotoxy(2,4); printf(“a %6d %6d”, v, w++);} br eak;
case1:…………………..
case2:…………………..
}
}
/*恢复时钟中断 */
}

(二)题目理解说明:
从实验的题目可以看出本次实验的内容是在已经给定的结构上对程序进行补充完善。
通过对已给程序的分析, 只需要完成时钟中断处理函数 time() ,进程选择程序 select() ,求素
数函数 prime() 以及主函数中 switch 语句部分的程序编制即可。

(三)算法的功能框架流程图

Main()

Time () Select() Prim()
A
B
C
中断到达 选择进程


不得用于商业用途 : .
为天地立心,为生民立命,为往圣继绝学,为万世开太平。——张载
仅供个人参考
(四)此算法中用到的数据结构:
进程实体结构,模拟 PCB:
struct PRO
{
char id; /*进程 id 号 */
int pri; //进程优先级
int p; /*优先级递增量 */
int s; /*优先级递减量 */
int status; // 进程状态
}
(五)主要常量变量:
INTR :存放中断号 1ch 的常量
Xx:存放中断次数的全局变量
Oldhandler :指向原中断处理程序的向量
a[3]:对素数进行操作的数组空间

(六)主要模块:


void interrupt time(...)
接管时钟中断,当中断到达时,对 A,B,C 三个进程数据结构中优先级 pri 进行修改。
对正在运行的程序,优先级减去一个递减量 s,对于未运行的程序,优先级增加一个的增量
p。处理完成后,中断次数 xx 加 1。


char select()
根据进程的优先级进行选择。选出优先级最高的进程,将其状态 status 设置为 1,即为
该进程分配处理机,投入运行,返回该进程的进程号 id。将其他进程状态 status 设置为 0,
即剥夺处理机或不为其分配处理机。此函数模拟对 PCB 的操作。

3 求素数函数
int prime (int n)
用于判断 n 是否为素数。通过循环依次用从 2 到 n 的平方根对 n 取模。如果能被除尽,
余数为零。跳出循环,返回 0。如果始终没被除尽,表明 n 为素数,返回 n。


void main ( )
首先定义 所需要的变量,数组。获取中断,并将中断处理程序设置到time ()函数上。
输出提示信息后。便开始模拟进程调度过程。
通过 select() 函数取得优先级最高的进程号。通过 switch 语句判别进程号,选中三个模
拟的循环求素数进程的程序体中的一个,执行其中的内容,输出信息。
如果中断次数 xx 小于 300 次,则继续调用 select() 函数选出进程并执行,直至满足这个
条件。
最后恢复系统原有的中断处理程序。
不得用于商业用途 : .
臣心一片磁针石,不指南方不肯休。——文天祥
仅供个人参考
四.实验代码:

//====================================================================

2025年作业进程调度算法设计与实现操作系统实验报告 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数9
  • 收藏数0 收藏
  • 顶次数0
  • 上传人小屁孩
  • 文件大小498 KB
  • 时间2025-02-12