操作系统实验报告_第1页
操作系统实验报告_第2页
操作系统实验报告_第3页
操作系统实验报告_第4页
操作系统实验报告_第5页
全文预览已结束

下载本文档

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

文档简介

实验二单处理机系统的进程调度实验目的加深对进程概念的理解,明确进程与程序的区别。深入了解系统如何组织进程、创建进程。进一步认识如何实现处理机调度。实验内容编写程序完成单处理机系统中的进程调度,要求采用时间片轮转调度算法。实验原理在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则,排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片.时间片的大小从几ms到几百ms.当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片.这样就可以保证就绪队列中的所有进程,在一给定的时间内,均能获得一时间片的处理机执行时间.实验部分源程序#include<stdio.h>#include<time.h>#include<stdlib.h>/*********************以下是全局数据结构和变量***********************//*PCB结构*/structPCB(intpname;intpri;intruntime;intwaittime;structPCB*next;}pcb[7];structPCB*running;/*运行指针*/structPCB*Hready;/*高优先级就绪队列头指针*/structPCB*Lready;/*低优先级队列头指针*/structPCB*wait;/*等待队列头指针*/intA=0;/**************************以下是函数说明****************************/voiddelay();/*利用循环实现延迟*/voidproc(structPCB*running);/*模拟进程3—9*/voidInsertIntoQueueTail(structPCB**head,structPCB*node);/*将node插入到head所指示的队列的尾部*/intproc_switch();/*进程调度函数*/voidproc_wait();/*进程等待函数*/intproc_wakeup();/*进程唤醒函数*//************************以下是函数定义及注释************************/main()/*主函数*/(inti;/*初始化,创建进程3—9,置低优先级,等待时间为0,依次插入低优先级队列*/for(i=0;i<3;i++){pcb[i].pname=i+3;pcb[i].pri=0;pcb[i].waittime=0;InsertIntoQueueTail(&Lready,&pcb[i]);}wait=NULL;Hready=NULL;/*等待队列和高优先级队列为空*/printf("\n模拟进程调度开始:\n");/*模拟进程调度开始*/for(;;){switch(A){case0:/*无进程等待调度,打印信息并返回*/if(!proc_switch()){printf("/n没有进程在运行返回:\n");getchar();}break;case1:proc_wait();break;case3:case4:case5:case6:proc(running);break;default:printf("\nerror!");exit(-1);}}}/*功能:延迟一个时间片*//*入口参数:无*//*出口参数:无*/voiddelay(){inti,j;for(i=0;i<20000;i++)for(j=0;j<10000;j++){}}/*功能:进程3—9*//*入口参数:运行指针*//*出口参数:无*/voidproc(structPCB*running)(inti;srand((unsigned)time(NULL));/*显示当前运行的进程的id*/printf("\n现在进程%d正在运彳亍\n”,running->pname);/*当前进程执行running->runtime个时间片*/for(i=running->runtime;i>0;i--){/*显示剩余的时间片*/printf("剩余的时间片为%d\n",i);/*延迟*/delay();proc_wakeup();/*产生一个1到1000的随机数,若该随机数小余300,当前进程等待,*/if((rand()%1000+1)<300){printf("进程%d开始等待.\n”,running->pname);A=1;return;}}/*显示时间片耗尽,进程转为低优先级就绪状态*/printf("进程%d时间片耗尽\n",running->pname);InsertIntoQueueTail(&Lready,running);A=0;return;}/*功能:将一个节点插入队列尾部*//*入口参数:队列头指针地址head,待插入结点node*//*出口参数:无*/voidInsertIntoQueueTail(structPCB**head,structPCB*node){structPCB*p;node->next=NULL;/*被插入队列为空*/if(*head==NULL){*head=node;return;}/*被插入队列不为空*/else{p=*head;/*找到队列的最后一个结点*/while(p->next!=NULL)p=p->next;p->next=node;}}/*功能:进程调度*//*入口参数:无*//*出口参数:若调度成功,返回1,否则返回0*/intproc_switch(){/*若高优先级就绪队列和低优先级就绪队列均为空,则循环执行进程唤醒*/while(Hready==NULL&&Lready==NULL)if(!proc_wakeup())return0;/*若高优先级就绪队列非空,则执行其第一个进程,分配2个时间片*/if(Hready!=NULL){running=Hready;Hready=Hready->next;running->runtime=2;}/*若高优先级就绪队列为空,则执行低优先级就绪队列的第一个进程,分配5个时间片*/else{running=Lready;Lready=Lready->next;running->runtime=5;}/*把调度进程的id赋给A*/A=running->pname;return1;}/*功能:进程等待。将当前运行进程置高优先级,等待时间为20,插入等待队列尾部*//*入口参数:无*//*出口参数:无*/voidproc_wait(){structPCB*p;running->pri=1;running->waittime=10;InsertIntoQueueTail(&wait,running);A=0;return;}/*功能:进程唤醒*//*入口参数:无*//*出口参数:若等待队列为空,则返回0,否则返回1*/intproc_wakeup(){structPCB*p,*last,*MoveToReady;p=wait;/*等待队列为空,返回0*/if(p==NULL)return0;/*延迟*/delay();/*等待队列中每个进程的等待时间减1*/while(p!=NULL){p->waittime-=1;p=p->next;}p=wait;/*从等待队列中摘除等待时间为0的进程,插入到高优先级就绪队列的尾部*/

while(p!=NULL){if(p->waittime==0){MoveToReady=p;if(p==wait)wait=p->next;elselast->next=p->next;p=p->next;InsertIntoQueueTail(&Hready,MoveToReady);}else{p=p->next;}}A=0;return1;}五.实验结果与体会■,百百三-三.j<^ir-ir-.Lr-F.F-4H-沱沱也"在迸程4正&耳七行该一£■4'斐1■,百百三-三.j<^ir-ir-.Lr-F.F-4H-沱沱也"在迸程4正&耳七行该一£■4'斐1a斑为为为为屈E司司司司司程、昌昌晶-4花能曲折而让W•土'可iLd•.十□!«正二京:和尊”'煎*口M进窸3开:正二京:和§进程5正在运行舛史日Ll『J.亍如进荏4开摇尊样.«进在3开:现主岂住“正.七运行Hite2邢谊卜亍利瓦为?击婵4习嵌寺%.在运行结果中,按进程插入就绪队列的先后顺序

温馨提示

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

评论

0/150

提交评论