操作系统进程调度课程设计范文Word文件下载.docx
《操作系统进程调度课程设计范文Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统进程调度课程设计范文Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
成绩:
指导教师签字:
课程设计所需软件、硬件等
系统:
Windows上的虚拟机上运行的RedHatLinux
语言:
C/C++
开发工具:
GCC
课程设计进度计划
起至日期
工作内容
备注
6月14日-
收集资料
程序设计
撰写论文
参考文献、资料索引
序号
文献、资料名称
编著者
出版单位
《LINUX权威指南(第3版)》--------中国电力出版社
《Linux编程技术详解》--------人民邮电出版社
《Linux程序设计(第3版)》-------人民邮电出版社
《计算机网络操作系统》--------
摘要………..。
。
3
1引言
1常见基本命令的介绍
1.1关于linux的目录命令…………………………………………………………………3
1.2关于linux的文件命令……………………………………………………………………3
2进程调度程序的设计
2.1进程调度……………………………………………………………………………………………5
2.2介绍一下优先权调度………………………………………………………………………5
2.3程序的设计思路………………………………………………………………………………4
2.4程序代码…………………………………………………………………………………………7
2.5程序运行情况……………………………………………………………………………………10
3.实验总结………………………………………………………………………11
摘要
在计算机网络高速发展的今天,计算机技术不断地更新与完善,无论是硬件还是软件的变更都会在计算机操作系统的设计技术与使用风格上得到体现。
操作系统是计算机系统配置的所有软件中使用最广泛的基础软件,它在整个计算机系统软件中处于中心地位,也是计算机专业课教学中做重要的环节之一。
从操作系统自身角度讲,它不但很好地体现了计算机日益发展中的软件研究成果,而且也较好地体现了计算机的硬件技术发展及计算机系统结构的用户界面环境。
本实验主要根据是按动态优先数设计五个进程的调度算法。
即在它们调度的过程中,其优先数是不断变化的。
2常见基本命的基本介绍:
2.1Linux目录命令
1.pwd---显示当前工作目录的绝对路径
格式:
pwd
2.cd---改变当前工作目录
命令格式:
cd[目录名]
3.Ls---列出文件目录的信息
ls[可选项][子目录名][文件名]
4.mkdir---建立目录
mkdir[可选项][目录名]
5.rmdir---删除目录
本命令用于删除指定的一个或多个目录,必须保证要删除的目录中没有任何文件。
rmdir[可选项][目录名]
2.2linux文件命令
1.ls–l文件名
2.chmod---改变文件或目录的访问权限
chmod[可选项][权限][目录或文件名]
3.chgrp命令----改变文件或目录所属的组。
chgrp[选项]groupfilename
选项:
-R:
递归式地改变指定目录及其下的所有子目录和文件的属组
4.chown----更改某个文件或目录的属主和属组
chown[选项]文件或目录的新属主[.文件或目录所在的新组][文件名|目录]
5.cat----显示,新建,连接文件
6.cp---功能:
文件或目录的拷贝,如同dos的copy
命令格式:
cp[选项]源文件或目录目标文件或目录
7.mv---功能:
为文件或目录改名或将文件由一个目录移入另一个目录中
mv[选项]源文件或目录目标文件或目录
8.rm---功能:
删除一个目录中的一个或多个文件或目录,它也能够将某个目录及其下的所有文件及子目录均删除
rm[选项]文件……
2.1进程调度
无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。
另外,系统进程也同样需要使用处理机。
这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。
2.2介绍一下优先权调度算法
优先数法的基本思想是:
对就绪队列中的每个进程,首先安某种原则定义一个优先数来表示它,处理机调度时,每次选择就绪队列中优先数最大者(也可规定优先数愈小,其优先权愈高),让它占用处理机运行。
确定优先数一般能够又一下集中考虑:
(1)频繁使用外部舒服输出设备的进程优先数大。
这样有利于提高CPU使用效率。
(2)重要程序的进程优先数大,怎样有利于用户灵活操作。
(3)进入计算机系统时间长的进程优先数大,这样有利于缩短作业的完成时间。
(4)交互式用户作业进程优先数大,这样有利于提高中断相应时间。
优先数的设置能够采用静态和动态两种方式。
静态设置方式就是指系统在建立一个进程时,就按照某种原则为进程制定一个优先数,这个优先数在进程存在期间一直保持不便。
而动态设置方式是指系统在进程存在期间经常改变进程的优先数,如何动态的改变进程的优先数,依赖于具体操作系统的设计目标
2.3程序的设计思路
(1)假定系统有五个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为:
进程名指针要求运行时间优先数状态
其中,进程名——作为进程的标识,假设五个进程的进程名分别为P1,P2,P3,P4,P5。
指针——按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。
要求运行时间——假设进程需要运行的单位时间数。
优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。
状态——可假设有两种状态,“就绪”状态和“结束”状态。
五个进程的初始状态都为“就绪”,用“R”表示,当一个进程运行结束后,它的状态为“结束”,用“E”表示。
(2)在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行时间”。
(3)为了调度方便,把五个进程按给定的优先数从大到小连成队列。
用一单元指出队首进程,用指针指出队列的连接情况。
(4)处理器调度总是选队首进程运行。
采用动态改变优先数的办法,进程每运行一次优先数就减“1”。
由于本实习是模拟处理器调度,因此,对被选中的进程并不实际的启动运行,而是执行:
优先数-1要求运行时间-1来模拟进程的一次运行。
提醒注意的是:
在实际的系统中,当一个进程被选中运行时,必须恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行结束。
在这里省去了这些工作。
(5)进程运行一次后,若要求运行时间〉0,则再将它加入队列(按优先数大小插入,且置队首标志);
若要求运行时间=0,则把它的状态修改成“结束”(E),且退出队列。
(6)若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结束”状态。
(7)在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化。
(8)为五个进程任意确定一组“优先数”和“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。
2.4程序代码
#include"
stdio.h"
#include<
stdlib.h>
conio.h>
#definegetpch(type)(type*)malloc(sizeof(type))
#defineNULL0
structpcb{charname[10];
charstate;
intsuper;
intntime;
intrtime;
structpcb*link;
}*ready=NULL,*p;
typedefstructpcbPCB;
sort()/*建立对进程进行优先级排列函数*/
{PCB*first,*second;
intinsert=0;
if((ready==NULL)||((p->
super)>
(ready->
super)))/*优先级最大者,插入队首*/
{p->
link=ready;
ready=p;
}
else/*进程比较优先级,插入适当的位置中*/
{first=ready;
second=first->
link;
while(second!
=NULL)
{if((p->
(second->
super))/*若插入进程比当前进程优先数大,*/
{/*插入到当前进程前面*/p->
link=second;
first->
link=p;
second=NULL;
insert=1;
else/*插入进程优先数最低,则插入到队尾*/
{first=first->
second=second->
}}
if(insert==0)first->
input()/*建立进程控制块函数*/
{inti,num;
clrscr();
/*清屏*/
printf("
\npleaseenterthenumberofprocess"
);
scanf("
%d"
&
num);
for(i=0;
i<
num;
i++)
{printf("
\nthenumberofprocessNo.%d:
\n"
i);
p=getpch(PCB);
\nenterthenameofprocess:
"
%s"
p->
name);
\nenterthepriornumberofprocess:
p->
super);
\nthetimeofprocess:
ntime);
printf("
rtime=0;
state='
w'
;
p->
link=NULL;
sort();
intspace()
{intl=0;
PCB*pr=ready;
while(pr!
{l++;
pr=pr->
}return(l);
disp(PCB*pr)/*建立进程显示函数,用于显示当前进程*/
{printf("
\nqname\tstate\tsuper\tndtime\truntime\n"
|%s\t"
pr->
|%c\t"
state);
|%d\t"
rtime);
}
check()/*建立进程查看函数*/
{PCB*pr;
\n****therunningprocessis:
/*显示当前运行进程*/
disp(p);
pr=ready;
\n****thereadyqueueis:
/*显示就绪队列状态*/
{disp(pr);
destroy()/*建立进程撤消函数(进程运行结束,撤消进程)*/
\nprocess[%s]finished.\n"
free(p);
running()/*建立进程就绪函数(进程运行时间到,置就绪状态*/
{(p->
rtime)++;
if(p->
rtime==p->
ntime)
destroy();
/*调用destroy函数*/
else
super)--;
sort();
/*调用sort函数*/}}
main()/*主函数*/
{intlen,h=0;
charch;
input();
len=space();
while((len!
=0)&
&
(ready!
=NULL))
{ch=getchar();
h++;
\nTheexecutenumber:
%d\n"
h);
p=ready;
ready=p->
R'
check();
running();
\nenteranykeygoon......"
ch=getchar();
\n\nprocesshavefinished.\n"
输入进程的各项指标
运行程序
实验总结
在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。
进程的优先级用于表示进程的重要性以及运行的优先性,一般用优先数来衡量优先级,有的系统优先数越高优先级越高,也有的系统优先数越高优先级越低。
经过本实验,使我们对进程调度的算法、数据结构及其实现程序(C语言)有一个较为深入具体的了解。