




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上中南大学实验名称:处理机调度课程名称:计算机操作系统学生姓名 盛 希 玲 学 号 学 院 信息科学与工程学院 专业班级 电子信息工程0602 完成时间 2008年10月12日 目 录一 实验内容选择一个调度算法,实现处理机调度。二 实验目的多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。本实验模拟实现处理机调度,以加深了解处理机调度的工作。三 实验题目设计一个按优先权调度和时间片轮转算法实现处理机调度的程序。四 基本思想 先选择时间片的个数和每个时间片需要的时间,正在运行的进程每运行一秒其优先权数目加一,即其优先权减小。每个时间片运行
2、结束后,选择进入时间片进程优先权数目最小的进程,开始下一个时间片的运行。如果有进程运行结束,则离开,再在就绪队列中选择优先权数目最小的进程进入。在运行期间,如果有新的进程来到,按优先权大小放入就绪队列中。五 算法分析 定义一个结构体,此包含了PCB的信息: struct PCB char PID5; /*进程名*/ int needtime; /*要求运行的时间*/ int cputime; /*已运行时间*/ int priority; /*优先权(越小越高)*/ int starttime; /*进入就绪队列的时间*/ int overtime; /*运行完成的时间*/ int state
3、; /*状态:1就绪2运行3完成*/ struct PCB *next;子函数struct PCB *create(int num,int n)用来建立一个按优先级大小排列的就绪进程链表和一个按时间先后循序排列的将进入就绪进程的链表。main()函数中用一while循环输出进入时间片的进程状态。六 流程图开始调用creat()函数,初始化进程PCB,各进程按优先级排序按优先级选择绪队列中进程放入时间片运转是否开始运行运行,每运行一秒优先权和已运行时间加一时间片结束,是否就绪进程队列不为零将进入就绪队列的进程就绪队列是否有新进程进入是否所有进程运行结束结束七 算法描述#define NULL 0
4、#define LEN sizeof(struct PCB)#include"stdio.h"#include"stdlib.h"struct PCB char PID5; /*进程名*/ int needtime; /*要求运行的时间*/ int cputime; /*已运行时间*/ int priority; /*优先权(越小越高)*/ int starttime; /*进入就绪队列的时间*/ int overtime; /*运行完成的时间*/ int state; /*状态:1就绪2运行3完成*/ struct PCB *next;struct P
5、CB *create(int num,int n) /*创建进程,并将进程按优先级顺序插入队列中*/ struct PCB *head,*p,*p1,*p2; int i; head=NULL; /*头指针指零*/ for(i=1;i<=num;i+) /*循环建立所有进程*/ printf("请输入第%d个进程的信息n",i); p=(struct PCB *)malloc(LEN); /*开辟一个空间*/ printf("进程名:"); /*输入进程名*/ scanf("%s",p->PID); printf(&quo
6、t;要求运行的时间:"); /*输入要运行的时间*/ scanf("%d",&p->needtime); p->cputime=0; /*占用处理机的时间赋为零*/ printf("优先权:"); /*输入优先权*/ scanf("%d",&p->priority); if(n=1) p->starttime=0; /*进入就绪队列的时间赋为零*/ else printf("进入就绪队列时间:"); /*输入进入就绪队列的时间*/ scanf("%d&qu
7、ot;,&p->starttime); p->overtime=-1; /*运行没有结束所以运行完成的时间赋为-1*/ p->state=1; /*状态赋为就绪状态*/ p1=head; /*p1指针指向头指针*/ if(head=NULL) /*如果头指针为零将头指针指向新建立的进程*/ head=p;head->next=NULL; else /*头指针不为零的情况*/ if(n=1) while(p1!=NULL&&p->priority>p1->priority) /*查找插入点*/ p2=p1; p1=p1->n
8、ext; else while(p1!=NULL&&p->starttime>p1->starttime) /*查找插入点*/ p2=p1; p1=p1->next; if(head=p1) /*优先权的值最小作为表头*/ p->next=head;p2=head=p; else /*否则的话插入*/ p2->next=p;p->next=p1; return(head);void main() char now5; int cho,num,num1,timepiece,time,i,j,k,flag,choo,clock=0; str
9、uct PCB *head,*head1,*over,*later,*l,*l1,*l2,*p,*p0,*p1,*p2,*q,*q1,*q2,*q3; over=NULL; printf("初始化进程.n"); printf("输入总的就绪进程数:"); scanf("%d",&num); head=create(num,1); /*建立就绪进程的链表*/ printf("输入将会就绪的进程数:"); scanf("%d",&num1); /*建立将会进入就绪进程的链表*/ la
10、ter=create(num1,2); printf("cpu是否开始运行:1是 2不是-"); scanf("%d",&cho); if(cho=1) /*处理机开始进行调度*/ printf("现在的时间是:"); scanf("%s",now); printf("显示所有就绪的进程:n"); p2=head; printf("进程名t要求运行时间t已运行时间t优先权t状态(1就绪2运行3结束)n"); while(p2!=NULL) printf("%
11、st%dtt%dtt%dt%dn",p2->PID,p2->needtime,p2->cputime,p2->priority,p2->state);p2=p2->next; printf("请输入时间片总数:"); scanf("%d",&timepiece); printf("请输入时间片的时间:"); scanf("%d",&time); printf("运行正式开始!n"); head1=head; printf("
12、tt进程名t要求运行时间t已运行时间t优先权t状态n"); for(i=1;i<=timepiece;i+) /*将进入时间片运行的进程用头指针head1指示,并改变就绪进程头指针head的指向*/ if(head!=NULL) p=head;head=head->next; else break; p->next=NULL; while(head1!=NULL) /*就绪进程头指针不为零就循环*/ head1->state=2; /*状态:1就绪2运行3完成*/ for(j=1;j<=time;j+) /*每个时间片所需时间的循环*/ clock+;
13、/*定时器每秒加1*/ if(later!=NULL&&clock=later->starttime) /*如果将进入就绪队列的进程时间到达加入就绪队列*/ l=later; l1=head; later=later->next; if(head=NULL)head=l;head->next=NULL;else while(l1!=NULL&&l1->priority<=l->priority) l2=l1;l1=l1->next; if(l1=head) l->next=head; head=l; else l2
14、->next=l; l->next=l1; flag=0; printf("n%3d秒 时间片第%d秒 ",clock,j); q=head1; if(head1->needtime>head1->cputime) /*以运行时间和优先权都加1*/ head1->cputime+; head1->priority+; while(q) /*运行队列不为零输出其信息*/if(q=head1) printf("%st%dtt%dtt%dt%dn",q->PID,q->needtime,q->cput
15、ime,q->priority,q->state); else printf("tt %st%dtt%dtt%dt%dn",q->PID,q->needtime,q->cputime,q->priority,q->state); q=q->next; if(head1->needtime=head1->cputime) /*运行完成将其放入over为头指针的链表中*/ head1->state=3;head1->overtime=clock;if(over=NULL) over=head1;head1=
16、head1->next;over->next=NULL; else if(over!=NULL&&head1!=NULL) p1=head1->next; p0=over; over=head1; over->next=p0; head1=p1; flag=1; if(flag=1) break; if(flag=1) /*有进程结束的情况*/ if(head!=NULL) /*就绪队列不为零将优先权最高的放入运行链表中*/ q1=head; head=head->next;q2=head1; while(q2!=NULL&&q2-
17、>priority<=q1->priority)q3=q2;q2=q2->next; if(q2=head1) q1->next=head1; head1=q1; else q3->next=q1; q1->next=q2; else /*无进程结束的情况,寻找优先权最高的运行*/ head1->state=1; q1=head1; head1=head1->next; q2=head1; while(q2!=NULL&&q2->priority<=q1->priority) q3=q2;q2=q2->next; if(q2=head1) q1->next=head1;head1=q1; else q3->next=q1;q1->next=q2; printf("cpu结束运行!n"); printf("是否输出所有结束的进程:1是2不是-");scanf("%d",&choo);if(choo=1) /*输出所有完成运行的进程*/ printf("
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025出租专业租赁公司脚手架租赁合同
- 2025厂房及场地租赁合同范本涵盖场地使用与维护责任
- 2025版租赁住宅与室内空气质量检测合同
- 2025版外墙保温保温材料研发与推广应用合同
- 2025版能源企业员工劳动合同及节能减排承诺书
- 2025年度事业单位与劳动者双方聘用合同及劳动合同
- 2025版青少年素质教育培训合作合同
- 2025年度环保餐具采购与销售合作协议
- 2025年度银行存款质押贷款业务合同模板
- 2025版现代农业用地及开发权转让协议
- 深圳某电厂锅炉维修改造施工组织设计-new(常用版)
- GB/T 4950-2021锌合金牺牲阳极
- 中药调剂技术-课件
- 证券从业考试基础模拟卷二(题目+解析)
- 水轮发电机讲义课件
- 信息系统运维服务方案
- 化工试生产总结报告
- 导数与原函数的对称性 微专题课件-2023届高三数学一轮复习
- 安全教育:不私自离开幼儿园
- 刑法各论(第四版全书电子教案完整版ppt整套教学课件最全教学教程)
- 健康教育学【完整版】
评论
0/150
提交评论