用时间片轮转法调度虚拟进程精编版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用时间片轮转法调度虚
拟进程
文件编码(008-TTIG-UTITD-GKBTT-PUUTI-WYTUI-8256)
《操作系统课程设计》报告学号:
姓名:
班级:
指导教师:
报告日期:
一、课设目的
通过对操作系统课程的学习,熟悉进程的概念、进程的管理与存储、进程的调度,通过实践深入理解进程的调度算法。
二、课设任务
要求编写一个程序,可以创建若干个虚拟进程,并对若干个虚拟进程进行调度,调度策略为时间片轮转法,主要任务包括:
进程的个数,进程的内容(即进程的功能序列)来源于一个进程序列描述文件,另外调度运行结果输出到一个运行日志文件;
设计PCB适用于时间片轮转法;
建立进程队列;
实现时间片轮转调度算法,尽量可视化的展示调度的动态过程。
○5总结程序设计的开发过程:需求分析、系统设计、系统实现及文档的收集和整理。
三、实验方法与设计分析
每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为输入进程的时间。
进程的运行时间以时间片为单位进行计算。
每个进程的状态可以是就绪 W (Wait )、运行R (Run )、或完成F (Finish )三种状态之一。
就绪进程获得 CPU 后都只能运行一个时间片。用已占用CPU 时间加1
来表示。
如果运行一个时间片后,进程的已占用 CPU 时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU 时间还未
达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU
。
每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的
PCB ,以便进行检查。
重复以上过程,直到所要进程都完成为止
四、程序流程图
是
五、程序源代码
#include ""
#include<>
#include<>
#include<>
#include<>
#include
#include
using namespace std;
ofstream myfile("",ios::app||ios::trunc);
typedef struct node
{
char name[10];/*进程名*/
int round; /*进程分配的时间片*/
int cputime; /*进程消耗的CUP时间*/
int needtime; /*进程需要的CUP时间*/
int count; /*进程运行时间*/
char state; /*进程的状态:'R':运行,'W':等待,'F':结束*/ struct node *next;/*指向下一个进程的指针*/
}PCB;
PCB *finish,*ready,*tail,*run;/*指向三个队列的队首的指针,tail 为就绪队列的队尾指针*/
int N;/*定义进程的数目*/
void firstin(void)
{
if(ready!=NULL)
{
run=ready;
ready=ready->next;
run->state='R';
run->next=NULL;
}
else
{
run=NULL;
}
}
void prt1(char a)
{
cout<<"name" <<" cputime" <<" needtime"<<" count "<<" round"<<" state"< myfile<<"name" ;myfile<<" cputime";myfile <<" needtime"; myfile<<" count ";myfile<<" round";myfile<<" state"< } void prt2(char a,PCB *p) { cout< >needtime<<" "< myfile< myfile< myfile< } void prt(char algo) { PCB *p; prt1(algo); if(run!=NULL) { prt2(algo,run); } p=ready; while(p!=NULL) { prt2(algo,p); p=p->next; } p=finish; while(p!=NULL) { prt2(algo,p); p=p->next; } getchar(); } void insert(PCB *q) { tail->next=q; tail=q; q->next=NULL; } void rcreate_task(char algo) { PCB *p; int n,time; char na[10];