操作系统进程调度课程设计报告书(共18页).doc
精选优质文档-倾情为你奉上枣 庄 学 院信息科学与工程学院课程设计任务书 题目: 在Linux下的模拟调度算法 学 号: 9 姓 名: 冯文雯 专 业: 网络工程 课 程: 操作系统 指导教师: 燕孝飞 职称: 完成时间: 2012年 5 月-2012 年 6 月枣庄学院信息科学与工程学院制2012年06 月20日课程设计任务书及成绩评定课程设计的任务和具体要求观察、体会操作系统的进程调度方法,并通过一个简单的进程调度模拟程序的实现,加深对进程调度算法,进程切换的理解。 采用动态优先数的方法,编写一进程调度程序模拟程序。模拟程序只进行相应的调度模拟操作指导教师签字: 日期: 指导教师评语成绩: 指导教师签字: 日期: 课程设计所需软件、硬件等系统:Windows 2000上的虚拟机上运行的Red Hat Linux语言:C/C+开发工具:GCC 课程设计进度计划起至日期工作内容备注6月14日-收集资料程序设计撰写论文参考文献、资料索引序号文献、资料名称编著者出版单位LINUX权威指南(第3版)-中国电力出版社Linux编程技术详解-人民邮电出版社Linux程序设计(第3版) -人民邮电出版社计算机网络操作系统-专心-专注-专业目 录摘要.。31引言1 常用基本命令的介绍1.1 关于linux的目录命令 31.2 关于linux的文件命令32 进程调度程序的设计2.1进程调度52.2介绍一下优先权调度 52.3程序的设计思路 42.4程序代码 72.5程序运行情况103实验总结11摘要在计算机网络高速发展的今天,计算机技术不断地更新与完善,无论是硬件还是软件的变更都会在计算机操作系统的设计技术与使用风格上得到体现。操作系统是计算机系统配置的所有软件中使用最广泛的基础软件,它在整个计算机系统软件中处于中心地位,也是计算机专业课教学中做重要的环节之一。从操作系统自身角度讲,它不仅很好地体现了计算机日益发展中的软件研究成果,而且也较好地体现了计算机的硬件技术发展及计算机系统结构的用户界面环境。本实验主要根据是按动态优先数设计五个进程的调度算法。即在它们调度的过程中,其优先数是不断变化的。2 常用基本命的基本介绍:2.1 Linux目录命令1.pwd -显示当前工作目录的绝对路径格式: pwd 2. cd -改变当前工作目录命令格式:cd 目录名 3Ls- 列出文件目录的信息命令格式:ls 可选项 子目录名 文件名4mkdir - 建立目录命令格式:mkdir 可选项 目录名 5rmdir -删除目录本命令用于删除指定的一个或多个目录,必须保证要删除的目录中没有任何文件。命令格式:rmdir 可选项 目录名 2.2 linux 文件命令1. ls l 文件名2. chmod -改变文件或目录的访问权限 命令格式:chmod 可选项 权限 目录或文件名 3chgrp命令 -改变文件或目录所属的组。 命令格式:chgrp 选项 group filename选项: -R:递归式地改变指定目录及其下的所 有子目录和文件的属组 4. chown -更改某个文件或目录的属主和属组 命令格式:chown 选项 文件或目录的新属主.文件或目录所在的新组 文件名|目录 5. cat -显示,新建,连接文件6. cp -功能:文件或目录的拷贝 ,如同dos的copy 命令格式: cp 选项 源文件或目录 目标文件或目录 7. mv -功能:为文件或目录改名或将文件由一个目录移入另一 个目录中 命令格式: mv 选项 源文件或目录 目标文件或目录 8. rm -功能:删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除 命令格式: rm 选项 文件 2 进程调度程序的设计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> #include <conio.h> #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0 struct pcb char name10; char state;int super; int ntime; int rtime; struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; sort() /* 建立对进程进行优先级排列函数*/ PCB *first, *second; int insert=0; if(ready=NULL)|(p->super)>(ready->super) /*优先级最大者,插入队首*/ p->link=ready; ready=p; else /* 进程比较优先级,插入适当的位置中*/ first=ready; second=first->link; while(second!=NULL) if(p->super)>(second->super) /*若插入进程比当前进程优先数大,*/ /*插入到当前进程前面*/ p->link=second; first->link=p; second=NULL; insert=1; else /* 插入进程优先数最低,则插入到队尾*/ first=first->link; second=second->link; if(insert=0) first->link=p; input() /* 建立进程控制块函数*/ int i,num; clrscr(); /*清屏*/ printf("n please enter the number of process");scanf("%d",&num); for(i=0;i<num;i+) printf("n the number of process No.%d:n",i);p=getpch(PCB); printf("n enter the name of process:");scanf("%s",p->name); printf("n enter the prior number of process:");scanf("%d",&p->super); printf("n the time of process:");scanf("%d",&p->ntime); printf("n"); p->rtime=0;p->state='w' p->link=NULL; sort(); int space() int l=0; PCB* pr=ready; while(pr!=NULL) l+; pr=pr->link; return(l); disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ printf("n qname t state t super t ndtime t runtime n"); printf("|%st",pr->name); printf("|%ct",pr->state); printf("|%dt",pr->super); printf("|%dt",pr->ntime); printf("|%dt",pr->rtime); printf("n"); check() /* 建立进程查看函数 */ PCB* pr; printf("n * the running process is:%s",p->name); /*显示当前运行进程*/disp(p); pr=ready; printf("n *the ready queue is:n"); /*显示就绪队列状态*/while(pr!=NULL) disp(pr); pr=pr->link; destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ printf("n process %s finished.n",p->name);free(p); running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ (p->rtime)+; if(p->rtime=p->ntime) destroy(); /* 调用destroy函数*/ else (p->super)-; p->state='w' sort(); /*调用sort函数*/ main() /*主函数*/ int len,h=0; char ch; input(); len=space(); while(len!=0)&&(ready!=NULL) ch=getchar(); h+; printf("n The execute number:%d n",h); p=ready; ready=p->link; p->link=NULL; p->state='R' check(); running(); printf("n enter any key go on.");ch=getchar(); printf("nn process have finished.n");ch=getchar(); 输入进程的各项指标运行程序实验总结 在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。进程的优先级用于表示进程的重要性以及运行的优先性,一般用优先数来衡量优先级,有的系统优先数越高优先级越高,也有的系统优先数越高优先级越低。通过本实验,使我们对进程调度的算法、数据结构及其实现程序(C语言)有一个较为深入具体的了解。