操作系统试验报告记录进程调度算法_第1页
操作系统试验报告记录进程调度算法_第2页
操作系统试验报告记录进程调度算法_第3页
操作系统试验报告记录进程调度算法_第4页
操作系统试验报告记录进程调度算法_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统实验报告记录 ( 进程调 度算法)作者: 日期:操作系统实验报告 实验 1 进程调度算法 报告日期: 2016-6-10姓 名: 学 号: 班 级: 任课教师:实验 1 进程调度算法一、实验内容按优先数调度算法实现处理器调度。二、实验目的在采用多道程序设计的系统中, 往往有若干个进程同时处于就绪状态。 当就绪进程个数 大于处理器数时, 就必须依照某种策略来决定哪些进程优先占用处理器。 本实验模拟在单处 理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。三、实验原理设计一个按优先数调度算法实现处理器调度的程序。(1) 假定系统有五个进程,每一个进程用一个进程控制块 PCB 来代表

2、,进程控制块的 格式为:进程名指针要求运行时间优先数状态 其中,进程名作为进程的标识,假设五个进程的进程名分别为P1,P2,P3,P4, P5。指针按优先数的大小把五个进程连成队列, 用指针指出下一个进程的进程控制块的 首地址,最后一个进程中的指针为“0”。要求运行时间假设进程需要运行的单位时间数。 优先数赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态可假设有两种状态, “就绪”状态和“结束”状态。五个进程的初始状态都为 “就绪”,用“ R”表示,当一个进程运行结束后,它的状态为“结束”,用“ E”表示。(2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先

3、数” 和“要求运行时间” 。(3) 为了调度方便,把五个进程按给定的优先数从大到小连成队列。用一单元指出队首 进程,用指针指出队列的连接情况。例:队首标志K2K1P1K2P2K3P3K4P4K5P50K4K5K3K12312415342RRRRRPCB1PCB2PCB3PCB4PCB5(4) 处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优 先数就减 “1”。由于本实验是模拟处理器调度, 所以,对被选中的进程并不实际的启动运行, 而是执行:优先数 -1要求运行时间 -1来模拟进程的一次运行。提醒注意的是:在实际的系统中, 当一个进程被选中运行时,必须恢复进程的现场, 让

4、 它占有处理器运行,直到出现等待事件或运行结束。在这里省去了这些工作。(5) 进程运行一次后,若要求运行时间0,则再将它加入队列(按优先数大小插入,且置队首标志) ;若要求运行时间 =0,则把它的状态修改成“结束” (E),且退出队列。(6) 若“就绪”状态的进程队列不为空,则重复上面(4)和( 5)的步骤,直到所有进程都成为“结束”状态。(7) 在所设计的程序中应有显示或打印语句, 能显示或打印每次被选中进程的进程名以 及运行一次后进程队列的变化。(8) 为五个进程任意确定一组“优先数”和“要求运行时间” ,启动所设计的处理器调 度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变

5、化过程。四、实验内容1. 画出算法流程图2. 程序中使用的数据结构及符号说明。1结构体typedef struct PCB / 封装进程结构体char name2;int time;int prior_num;char state;struct PCB *next; PCB,* pPCB; / 结构体名为 PCB, pPCB是指向结构体的指针2链表pPCB CreateLink( PCB * arr )int i = 0;int j = 0;int pos = 0;int pos1 = 0;pPCB head = NULL;for (i = 0; i N; i+)/ 先找出优先级最高的进程,赋

6、给头结点if ( arr i.prior_num = N)pos = i;break ;head = &arr pos;for (i = N - 1; i 0; i-)/ 按优先级大小依次找到其他进程,链起来for (j = 0; j N; j+)if ( arr j.prior_num = i)pos1 = j; break ;arr pos.next = & arr pos1;pos = pos1;return head; / 返回头结点73. 源程序#define _CRT_SECURE_NO_WARN 1I N GS #ifndef _SCHEDULING_H_#define _SCH

7、EDULIHG_H_ #define N 5#include #include #include #include typedef struct PCB / 封装进程结构体 char name2;int time;int prior_num;char state; struct PCB *next;PCB, * pPCB; / 结构体名为 PCB, pPCB是指向结构体的指针pPCB CreateLink( PCB *arr);/ 创建链表把 5个进程链起来void InitPCB( PCB *arr, int *a); / 初始化进程 pPCB runPCB( PCB *arr, pPCB

8、pcb); / 进程运行 void printPCB( PCB *arr);/ 输出进程的初始状态void random( int a, int n); / 将数组内容打乱顺序 void PrintRun( pPCB head);/ 输出运行后的进程#endif#include head.h void random( int a, int n)int index, tmp, i;srand( unsigned int )time( NULL); for (i = 0; i n; i+)index = rand() % ( n - i) + i;if (index != i)tmp = ai;

9、ai = aindex; aindex = tmp;pPCB CreateLink( PCB * arr )int i = 0;int j = 0;int pos = 0;int pos1 = 0;pPCB head = NULL;for (i = 0; i 0; i-)/ 按优先级大小依次找到其他进程,链起来for (j = 0; j N; j+)if ( arr j.prior_num = i)pos1 = j; break ;arr pos.next = & arr pos1;pos = pos1;return head; / 返回头结点void InitPCB( PCB * arr ,

10、 int * a)int i = 0;char *str = p1 , p2 , p3 , p4 , p5 ;for (i = 0; i N; i+) / 将5个进程初始化strcpy( arr , stri);arr i.prior_num = ai;arr i.state =R ;9int i = 0;for (i = 0; i time-;/ 先让进程的时间和优先级减一cur-prior_num-;if (cur-time = 0) / 判断所需运行时间是否为 0 if (cur = head) / 判断是否是头结点 cur-state = E ; head = head-n

11、ext;prev-next = cur-next; cur = cur-next;10else/ 若时间不为 0,指针向后移动prev = cur;cur = cur-next;return head;void PrintRun( pPCBhead)pPCB cur = head;printf( 进程运行: n );while (cur)printf( 进程名称: %sn, cur-name);printf( 进程优先级: %dn, cur-prior_num);printf( 所需运行时间: %dn, cur-time); printf( 当前状态: %cn, cur-state); pri

12、ntf( n );cur = cur-next;#include head.h int main()PCB pcb;pPCB head; int a = 1, 2, 3, 4, 5 ; random(a, N);PCB arr N;InitPCB(arr,a); printPCB(arr); head = CreateLink(arr); printf( 运行一次: n ); head = runPCB(head, &pcb); PrintRun(head); printf( 运行二次: n ); head = runPCB(head, &pcb); PrintRun(head); printf( 运行三次: n ); head = runPC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论