操作系统进程调度实验

上传人:第*** 文档编号:38827716 上传时间:2018-05-08 格式:DOC 页数:10 大小:186.50KB
返回 下载 相关 举报
操作系统进程调度实验_第1页
第1页 / 共10页
操作系统进程调度实验_第2页
第2页 / 共10页
操作系统进程调度实验_第3页
第3页 / 共10页
操作系统进程调度实验_第4页
第4页 / 共10页
操作系统进程调度实验_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《操作系统进程调度实验》由会员分享,可在线阅读,更多相关《操作系统进程调度实验(10页珍藏版)》请在金锄头文库上搜索。

1、实验一实验一 进程调度进程调度一、一、实验题目:实验题目:轮转调度算法模拟程序设计二、二、实验目的:实验目的:通过对轮转调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。三、三、实验设备及环境:实验设备及环境:1. 硬件设备:PC 机一台2. 软件环境:安装 Windows 操作系统或者 Linux 操作系统,并安装相关的程序开发环境,如 C C+Java 等编程语言环境。四、四、实验内容及要求:实验内容及要求:(1)用 C 语言编程实现对 N 个进程采用先来先服务算法调度执行的模拟。(2)每个用来标识进程的进程控制块 PCB 可用结构来描述,包括以下

2、字段:进程标识数 name。进程优先数 super,并规定优先数越大的进程,其优先权越高。进程已占用 CPU 时间 rtime。进程未运行时 rtime 为 0进程需占用的 CPU 时间 ntime。进程状态 state。队列指针 link,用来将 PCB 排成队列。(3)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。(4)分析程序运行的结果,谈一下自己的认识。五、实验方法内容五、实验方法内容1. 算法流程图算法流程图2. 主要的常量变量主要的常量变量 struct pcb / 定义进程控制块 PCB

3、 char name10; /进程名 char state; /进程状态 int super; /进程优先级 int ntime; /进程需要运行时间 int rtime; /进程已经运行的时间 struct pcb *link; /定义了一个指向 pcb 结构类型的指针 link 作 为自己的成员函数 *ready=NULL,*p; /定义了两个指向 pcb 结构类型的指针 ready 和 p ,ready 的初值为空 3.3. 主要模块主要模块 void input(flag) void sort1() int space() void disp1(PCB * pr) void check

4、(flag) void destroy()NYNY把运行的进程插入到队尾时间片到, 进行进程已占用 CPU 时间+1运行进程已占用 CPU 时间以达到所需的运 行时间?进程完成 撤销该进程开始就绪队列首进程投入运行各进程按输入顺序插入到队列初始化 PCB,输入进程信 息就绪队列空?结束void running1() void RoundRobin() 4 4代码代码 #include #include #include #define getpch(type) (type*)malloc(sizeof(type) /用 getpcb(type) 给 type 类型的变量申请一个空间 struc

5、t pcb / 定义进程控制块 PCB char name10; /进程名 char state; /进程状态 int super; /进程优先级 int ntime; /进程需要运行时间 int rtime; /进程已经运行的时间 struct pcb *link; /定义了一个指向 pcb 结构类型的指针 link 作为自 己的成员函数 *ready=NULL,*p; /定义了两个指向 pcb 结构类型的指针 ready 和 p ,ready 的初值为空typedef struct pcb PCB; / 定义 PCB 为 struct pcb 的别名 /- - void inunizati

6、on() /初始化界面函数 printf(“nntt*ttn“);printf(“tttt 实验一 进程调度n“);printf(“tt*ttn“);printf(“nnnttt 计算机系 802 班n“);printf(“ttt 姓名:李雪娇n“);printf(“ttt 学号:08030043n“);printf(“ttt 完成时间:2010 年 12 月 08 日nnnn“);printf(“tttt 请输入任意键进入演示过程n“);getch(); /- - void sort() /对进程进行优先级排列函数 PCB *first, *second; int insert=0; / 判

7、断是否将新建进程插入在队列中,如果是则置 1 if(ready=NULL) | (p-super) (ready-super) / 优先级最大 者,插入队首 p-link=ready; / 将新建的进程块指向队首进程,他自己成为队首 ready=p; / 将 ready 指向队首进程 else / 进程比较优先级,插入适当的位置中 first=ready; / first 指针指向队首进程 second=first-link; / second 指针指向第二个进程 while(second!=NULL) / 判断是否已到队尾 if(p-super)(second-super) / 若插入进程比

8、当前进程优 先数大, / 插入到当前进程前面 p-link=second;/ 将新建进程的 link 指针指向他的下一个进程 first-link=p; /将新建进程在队列中的前一个进程指向这个 新建进程 second=NULL; / second 不指向任何进程 insert=1; / 将 insert 标准置为 1 else / 插入进程优先数最低,则插入到队尾 first=first-link; / 新建进程的优先级小于 second 指向 进程的优先 /级,将 first,second 下移一个进程 second=second-link; if(insert=0) first-link

9、=p;/ p 指向进程的优先级最小,将 p 指向 的进程插入队尾 /- - void sort1() /对进程进行轮转调度排列函数 PCB *first; if(ready=NULL) /如果就绪队列为空 ready=p; / 将新建进程放入就绪队列中,将 ready 指向队首进 程 else / 就绪队列中有进程在等待,将新建进程插入到队尾 first=ready; / first 指针指向队首进程 while(first-link!=NULL) first=first-link; /当 first 指针没有 指向队尾时,指针后移 first-link=p;/将 P 指向的进程插入队尾 /-

10、 - void input(flag) /建立进程控制块函数 int i; system(“cls“); /清屏 printf(“n 请输入六个进程信息:n“);for(i=0;iname); / 输入进程的名字 if(flag=1)/如果标志变量 flag 等于 1,则属于最先优先数优先 算法的进程输入/flag 不等于 1 就不输入进程优先数 printf(“n 输入进程优先数:“); scanf(“%d“, / 输入进程的优先数 printf(“n 输入进程运行时间:“);scanf(“%d“, / 输入进程的运行时间 printf(“n“); p-rtime=0; / 进程已运行的时间

11、的初值为 0 p-state=w; / 将新建的进程的状态置为“等待 “ p-link=NULL; / 新建进程的指针域为空 if(flag=1)/如果标志变量 flag 等于 1,则属于最先优先数优先算法 sort();/ 调用 sort 函数 else sort1();/调用 sort1 函数 /- - int space() /计算进程控制块个数的函数 int l=0; PCB* pr=ready; / pr 指向队首进程 while(pr!=NULL) / pr 为空,则说明计数完成 l+; pr=pr-link; / pr 向下以一个进程 return(l); /- - void disp(PCB * pr) /建立进程显示函数,用于显示使用最先优先数优先算 法的当前进程 printf(“n qname t state t super t ndtime runtime n“); printf(“ |%st“,pr-name); / 显示当前进程的进程名 printf(“ |%ct“,pr-state); / 显示当前进程的状态 printf(“ |

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号