大学本科操作系统课程设计推荐.docVIP

  • 12
  • 0
  • 约1.41万字
  • 约 16页
  • 2018-04-28 发布于湖北
  • 举报
大学本科操作系统课程设计推荐

PAGE 操作系统课程设计实验一 进程调度一、实验目的通过一个简单的进程调度模拟程序的实现,加深对进程调度算法,进程切换的理解。二、需求分析采用动态优先数的方法,编写一进程调度程序模拟程序。模拟程序只进行相应的调度模拟操作,不需要实际程序。 (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) 为五个进程任意确定一组“优先数”和“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。三、概要设计1.程序概要设计图2.?程序源代码jingchendiaodu.cpp #include stdio.h #include stdlib.h #include conio.h #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0 struct pcb { /* 定义进程控制块PCB */ char name[10]; 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 请输入进程号?); scanf(%d,num); for(i=0;inum;i++) { printf(\n 进程号No.%d:\n,i); p=getpch(PCB); printf(\n 输入进程名:); scanf(%s,p-name); printf(\n 输入进程优先数:); scanf(%d,p-super); printf(\n 输入进程运行时间:); scanf(%d,p-ntime); pr

文档评论(0)

1亿VIP精品文档

相关文档