处理器调度之动态优先数调度算法_第1页
处理器调度之动态优先数调度算法_第2页
处理器调度之动态优先数调度算法_第3页
处理器调度之动态优先数调度算法_第4页
处理器调度之动态优先数调度算法_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上1 处理机调度1.1 实验内容及要求实验内容:按优先数调度算法实现处理器调度。实验要求:能接受键盘输入的进程数、进程标识、进程优先数及要求运行时间,能显示每次进程调度的情况:运行进程、就绪进程和就绪进程的排列情况。1.2 实验目的 本实验模拟在单处理器环境下的处理器调度,加深了解处理器调度工作。1.3 实验环境本实验的设计基于Windows7操作系统DevC+5.11环境,用C语言实现编程。1.4 实验思路(1) 每个进程用一个PCB来代表。PCB的结构为:进程名作为进程标识。优先数赋予进程的优先数,调度时总是选取优先数大的进程先执行。要求运行时间假设进程需要运行的单

2、位时间数。状态假设两种状态:就绪和结束,用R表示就绪,用E表示结束。初始状态都为就绪状态。指针按优先数的大小把5个进程连成队列,用指针指出下一个进程PCB的首地址。(2) 开始运行之前,为每个进程确定它的“优先数”和“要求运行时间”。通过键盘输入这些参数。(3) 处理器总是选择队首进程运行。采用动态改变优先数的办法,进程每运行1次,优先数减1,要求运行时间减1。(4) 进程运行一次后,若要求运行时间不等于0,则将它加入就绪队列,否则,将状态改为“结束”,退出就绪队列。(5) 若就绪队列为空,结束,否则转到(3)重复。1.5 数据结构与全局变量typedef struct pcbint pnam

3、e;/进程名int priority;/优先级int runTime;/所需时间int state;/状态struct pcb* next;/下一个进程控制块PCB; /进程控制块int num;/存储进程数PCB readyHead;/头结点,不存储进程PCB *readyEnd;/指向尾结点的指针1.6 函数说明(1)主函数main() 输入进程数并调createProcess()初始化进程;若有进程,则依次调用sortProcess()、runProcess()、printProcessLink()和printProcessInfo()。(2) 进程创建函数createProcess()

4、 输入进程标识、优先级和运行时间进行初始化。(3)进程排序函数sortProcess() 用冒泡排序算法根据进程的优先级进行降序排序,每次排序之后优先级最高的进程放在就绪队列首。(4)进程运行函数runProcess() 将数组首的进程优先级和所需时间减1; 若剩余所需时间为0,则PCB状态标记为E(结束)。(5)输出函数printProcessLink()和printProcessInfo() printProcessLink()输出进程链,printProcessInfo()输出进程控制块详细信息。1.7 运行结果表1.1进程数5序号优先级运行时间134252341415523对表1.1数

5、据的运行结果:1.8 实验心得指针操作是真的烦。1.9 实验代码#include <stdlib.h>#include <string.h>#include <stdio.h>#include <conio.h>#define N 32void createProcess();void sortProcess();void printProcessLink();void printProcessInfo();void runProcess();typedef struct pcbchar pnameN;/进程名 int priority;/进程优

6、先级 int runTime;/进程还需运行的时间片 char state;/R代表ready,E代表endstruct pcb* next;PCB;int num; /进程数 PCB readyHead;/头结点,不存储进程 PCB *readyEnd; /尾结点指针 int main()printf("*n");printf("*实习1-1 按优先级调度算法实现处理器调度*n");printf("*n");createProcess(); if(num=1)printProcessInfo();printf("%s st

7、artsn", readyHead.next->pname);printf("%s is running.n", readyHead.next->pname);printf("%s ends after %d slice(s).", readyHead.next->pname, readyHead.next->runTime);else while(readyHead.next!=NULL) sortProcess();printProcessInfo();printProcessLink();runProcess();

8、return 0; void createProcess()PCB *p, *prior;printf("How many process do you want to run:");scanf("%d", &num);while(num<=0)printf("Number is invalid. Input again:n");scanf("%d", &num);p = (PCB*)malloc(sizeof(PCB);prior = &readyHead;prior->nex

9、t=p;for (int i = 0; i < num; i+)printf("Input NO.%2d process name:", i+1);scanf("%s", p->pname);printf(" priority:");scanf("%d", &(p->priority);printf(" runTime:");scanf("%d", &(p->runTime);p->state = 'R'p->

10、;next = (PCB*)malloc(sizeof(PCB);prior=p;p=p->next;free(p);p = NULL;prior->next=NULL;readyEnd=prior; printf("n");void sortProcess()char nameN;int i,j, priorityNum, timeNum;PCB *p, *rear; for(p=readyHead.next; p!=NULL; p=p->next) for(rear=p->next; rear!=NULL; rear=rear->next)

11、 if(p->priority<rear->priority) strcpy(name, p->pname); priorityNum=p->priority; timeNum=p->runTime; strcpy(p->pname, rear->pname); p->priority=rear->priority;p->runTime=rear->runTime;strcpy(rear->pname, name);rear->priority=priorityNum;rear->runTime=time

12、Num; void printProcessLink()PCB *p=readyHead.next;printf("process link: n");while(p!=NULL)printf("%s",p->pname);p=p->next;if(p!=NULL) printf("->");printf("n");void printProcessInfo()PCB *p=readyHead.next;printf("process information before running

13、:n");printf("=n"); printf("NAME PRIORITY RUNTIME STATUS NEXTn"); printf("=n"); while(p!=NULL)printf("%-16s %-8d %-8d %-8s %sn",p->pname, p->priority, p->runTime, (p->state='R')?"ready":"end", p->next->pname);p=p->next;void runProcess()PCB *p=readyHead.next; printf("process run:n"); printf("%sn",p->pname);p->priority-;p->runTi

温馨提示

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

评论

0/150

提交评论