1、 课程设计报告课程设计报告 课程名称课程名称 操作系统课程设计操作系统课程设计 设计题目设计题目 网络教学系统网络教学系统 专业班级专业班级 姓姓 名名 学学 号号 指导教师指导教师 起止时间起止时间 2013 年年 1 月月 6 日日 成成 绩绩 评评 定定 考核 内容 设计 表现 设 计 报 告 答辩 综合 评定 成 绩 一、进程调度 1、设计目的: 进程管理是操作系统中的重要功能,用来创建进程、撤消进程、实现进程状态转 换,它提供了在可运行的进程之间复用CPU 的方法。在进程管理中,进程调度是核心, 因为在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态,当就绪进程 个数大于处
2、理器数目时,就必须依照某种策略决定哪些进程优先占用处理器。本实验模 拟在单处理器情况下的进程调度,目的是加深对进程调度工作的理解,掌握不同调度算 法的优缺点。 2、设计题目 设计一个按多级队列调度算法实现处理器调度的程序。 3、设计思想 设置多个就绪队列,分别赋予不同的优先级,如逐级降低,队列 1 的优先级最高。每 个队列执行时间片的长度也不同,规定优先级越低则时间片越长,如逐级加倍。 新进程进入内存后,先投入队列 1 的末尾,按 FCFS 算法调度;若按队列 1 一个时间片 未能执行完,则降低投入到队列 2 的末尾,同样按 FCFS 算法调度;如此下去,降低到最后 的队列,则按“时间片轮转”
3、算法调度直到完成。 仅当较高优先级的队列为空, 才调度较低优先级的队列中的进程执行。 如果进程执行时 有新进程进入较高优先级的队列, 则抢先执行新进程, 并把被抢先的进程投入原队列的末尾。 源代码 #include “stdio.h“ #include “conio.h“ #include “stdlib.h“ #include “malloc.h“ #include “time.h“ #include “windows.h“ #define null 0 #define N 4 int MN=18; struct cpu /就绪队列 int time; /时间片数量 struct pss *
4、head; struct pss *tail; ; struct pss /进程 char name5; int pro_time; /执行时间 int l_time; / 剩余时间 struct pss *next; ; void gotoxy(int x, int y) COORD c; c.X = x - 1; c.Y = y - 1; SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c); void initial(struct cpu cpu_quene) /初始化就绪队列,时间片分别为 2 4 8 16 int
5、i,t=2; for(i=0;iname); gotoxy(25,8); printf(“请输入处理进程需要的时间:“); scanf(“%d“, p-l_time=p-pro_time; /剩余时间初始化,初始值为需要时间的值 p-next=null; if(cpu_quene0.head=null) cpu_quene0.head=p; cpu_quene0.tail=p; else q=cpu_quene0.tail; cpu_quene0.tail=p; q-next=p; void osdelay(int n) int a,i,m; m=500*n; a=clock(); for(i
6、=0;i+) if(clock()-a=m) break; void print(struct cpu cpu_quene) struct pss *p; gotoxy(23,5); p=cpu_quene0.head; printf(“ “); gotoxy(23,5); while(p!=null) printf(“%s %d “,p-name,p-l_time); p=p-next; gotoxy(23,7); p=cpu_quene1.head; printf(“ “); gotoxy(23,7); while(p!=null) printf(“%s %d “,p-name,p-l_time); p=p-next;