实验一进程调度算法模拟_第1页
实验一进程调度算法模拟_第2页
实验一进程调度算法模拟_第3页
实验一进程调度算法模拟_第4页
实验一进程调度算法模拟_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、操作系统实验报告(一)班级:计1001 姓名:车琛 学号:201007010113 实验一 进程调度算法模拟1内容:设计一个简单的进程调度算法,模拟os中的进程调度过程;2要求: 进程数不少于5个; 进程调度算法任选; 可以用动态优先数加时间片轮转法实现进程调度,每运行一个时间片优先数减3; 用c语言编程; 程序运行时显示进程调度过程。3步骤: 设计pcb及其数据结构: 进程标识数:id 进程优先数:priority(优先数越大,优先级越高) 进程已占用时间片:cputime,每得到一次调度,值加1; 进程还需占用时间片:alltime,每得到一次调度,该值减1,一旦运行完毕,alltime为

2、0) 进程队列指针:next,用来将pcb排成队列 进程状态:state(一般为就绪,可以不用) 设计进程就绪队列及数据结构; 设计进程调度算法,并画出程序流程图; 设计输入数据和输出格式; 结构格式:当前正运行的进程:0 当前就绪队列:2,1,3,4 编程上机,验证结果。4提示:假设调度前,系统中有5个进程,其初始状态如下:id01234priority93830290可否考虑用数组或链表去实现cputime00000alltime32634statereadyreadyreadyreadyready 以时间片为单位调度运行; 每次调度alltime不为0,且priority最大的进程运行一

3、个时间片; 上述进程运行后其优先数减3,再修改其cputime和alltime,重复, 直到所有进程的alltime均变为0。5书写实验报告 实验题目; 程序中所用数据结构及说明; 清单程序及描述; 执行结果。代码清单#include<iostream.h>#include<stdlib.h>#include<malloc.h>#include<windows.h>#include<stdio.h>#define minsize 5typedef enum stateready,running,stop,state;typedef s

4、truct pcbint pid;int priority;/ 进程优先级int cputime;int alltime;state state; struct pcb *prev;struct pcb *next;pcb;typedef pcb node;void init_process(node *&head) head= (pcb *)malloc(sizeof(pcb);head->next = head;head->prev = head;void push(node *head,node *pnode)if(head = null|pnode = null)r

5、eturn;node * p = head->next;while(p!=head && pnode->priority < p->priority) p= p->next;pnode->next=p->prev->next; pnode->prev=p->prev;p->prev->next=pnode;p->prev = pnode;void show_process(node *head)if(head=null)return;node *p = head->next;cout<&l

6、t;"当前的就绪队列有:"<<endl;cout<<"*进程调度表*"<<endl;while(p != head)cout<<endl;cout<<"进程号为 "<<p->pid<<" "cout<<"优先级为 "<<p->priority<<" "cout<<"剩余alltime为 "<<p->

7、;alltime<<" "cout<<"运行时间cputime为 "<<p->cputime<<" "cout<<endl;cout<<endl;p = p->next;cout<<"*"<<endl;node * pop_front(node *head)if(head=null|head->next = head)return null;node * p = head->next;p->

8、prev->next = p->next;p->next->prev = p->prev;return p;pcb * create_process(int id,int priority,int cputime,int alltime,state state) pcb *p = (pcb *)malloc(sizeof(pcb);p->pid = id;p->cputime = cputime;p->alltime = alltime;p->priority = priority;p->state = state;p->nex

9、t = null;p->prev = null;return p;void destroy_head(node *head)if(head=null)return;free(head);void destroy(node *pnode)if(pnode = null)return; node *p = pnode;p->prev->next=p->next;p->next->prev=p->prev;cout<<"进程"<<p->pid<<"已经销毁!"<<e

10、ndl;free(p);void process_running(node *head)if(head = null|head->next = head)return;node *p = null;while(head->next!=head)p = head->next;p = pop_front(head);p->cputime += 1;p->alltime -= 1;p->priority -= 3;p->state = running;cout<<endl;cout<<"当前正在执行的进程为:"&l

11、t;<p->pid<<endl;if(p->priority<=0)p->priority =0;cout<<endl; cout<<"进程号为 "<<p->pid<<" "cout<<"优先级为 "<<p->priority<<" "cout<<"剩余alltime为 "<<p->alltime<<" &q

12、uot;cout<<"运行时间cputime为 "<<p->cputime<<" "cout<<endl;cout<<endl;cout<<endl;cout<<endl;if(p->alltime<=0)p->state = stop;destroy(p);p = null;if(p!=null)p->state = ready;push(head,p);show_process(head);char c = getchar();destr

13、oy_head(head);int main()pcb * head=null; init_process(head);pcb *p =null; int priority = 1;int cputime = 0;int alltime = 0;state state = ready;int count = 0; int num = 0;cout<<"请输入当前运行的进程数,至少5个"<<endl;cin>>num;for(int i = 0;i<num;+i)count+=1;cout<<"请输入第 "<<count<<"个进程的优先级和总运行时间alltime"<<endl;cin>>priority>>alltime;p=create_process(count,priority,cputime,alltime,state);push(head,p);show_process(head);process_running(hea

温馨提示

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

评论

0/150

提交评论