版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、肇庆学院计算机科学与软件学院操作系统课程设计报告设计题目:采用优先数算法模拟进程调度程序完成日期:2008年6月3日设计题目采用优先数调度算法的模拟进程调度程序设计形式小组合作设计目的加深对进程概念及进程管理各部分内容的理解设计预备知识 (1)进程管理。(2)优先数调度算法。设计内容采用动态优先数的方法,编写一进程调度程序模拟程序。模拟程序只进行相应的调度模拟操作。小组成员分工采用优先数算法模拟进程调度程序分析、设计与实现一、设计理论描述进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。另有一种定义方法是“程序在处理器上的执行”。为了模拟的方便,本设计采用这种定义。简单地说,进
2、程包括三种状态:运行状态、就绪状态、完成状态。通常操作系统用一个称为进程控制块(PCB)的数据结构来记录进程的属性信息。PCB一般应包含以下信息:进程标识信息(本进程的标志ID、父进程的标志ID、用户标识);处理机状态信息(用户使用的寄存器、控制和状态寄存器、堆栈指针);进程调度和控制信息(进程的状态、进程的调度优先级、程序和数据的地址、进程同步和通信机制、进程已等待时间、已使用的处理器时间、进程在有关队列中的链接指针、分给进程的主存大小和位置、进程使用的其他资源信息、进程得到有关服务的优先级、进程调度所需的其他信息)。优先级调度算法:按照进程的优先级大小来调度,是高优先级进程得到优先的处理的
3、调度策略,可使用非抢占或可抢占两种策略。二、设计思想、设计分析及数据结构模型这个设计需要考虑两个问题:如何组织进程、如何实现进程模拟调度。考虑如何组织进程,首先就要设置进程控制块的内容。进程控制块PCB记录各个进程执行时的情况。不同的操作系统,进程控制块记录的信息内容不一样。操作系统功能越强,软件也越庞大,进程控制块记录的内容也就越多。这里的设计只使用了必不可少的信息。一般操作系统中,无论进程控制块中信息量多少,信息都可以大致分为以下四类:(1)标识信息每个进程都要有一个唯一的标识符,用来标识进程的存在和区别于其他进程。这个标识符是必不可少的,可以用符号或编号实现,它必须是操作系统分配的。在后
4、面给出的参考程序中,采用符号方式,也就是为每个进程依次分配一个不相同符号。(2)说明信息用于记录进程的基本情况,例如,进程的状态、等待原因、进程程序存放位置、进程数据存放位置等。设计中,因为进程没有数据和程序,仅使用进程控制块模拟进程,所以这部分内容仅包括进程状态。(4)管理信息管理信息记录进程管理和调度的信息。例如进程优先数和进程队列指针等。设计中,包括队列指针、进程优先数、已运行时间、还需运行时间。因此可将进程控制块结构定义如下:Class PCBString proname; /进程标识符String state; /进程状态Int pri; /进程优先数Int runtime; /进程
5、已运行时间Int needtime; /还需要运行时间PCB *next; /下一个进程控制块的指针确定进程控制块内容后,要考虑的就是如何将进程控制块组织在一起。多道程序设计系统,往往同时创建多个进程。在单处理机的情况下,每次只能有一个进程处于运行态,其他的进程处于就绪状态或等待状态。为了便于管理,通常把处于相同状态的进程的进程控制块链接在一起。单处理机系统中,正在运行的进程只有一个,因此,单处理机系统中进程控制块分成一个正在运行进程的进程控制块、就绪进程的进程控制块组织成的就绪队列和等待进程的进程控制块组成的等待队列。由于设计模拟的是进程调度,没有对等待队列的操作,所以设计中只有一个指向正在
6、运行进程的进程控制块指针和一个就绪进程的进程控制块队列指针和一个指向已完成进程的进程控制块队列指针。这样,进程控制块的链表实际上是数据结构中使用的静态链表。进程控制块的链接方式可以采用单向和双向链表,设计中,进程控制块队列采用单向不循环静态链表。在各队列中,各进程按照进程的优先数进行排列,队首指向的是优先数最高的进程,每次向各队列中插入一个进程时都会先按照插入排序法按优先数从高到低把进程插入到队列的相应位置。以上是如何组织进程,下面考虑如何调度进程,一开始,调度程序将就绪队列的队首进程加入到运行队列,运行一周期后用当前正在运行的进程的优先数与就绪队列队首进程的优先数对比,如果当前运行的进程的优
7、先数小于就绪队列队首的进程,则把当前运行的进程按照按优先数的顺序插入到就绪队列的相应位置,把就绪队列队首的进程加入到运行队列中。三、程序流程图开 始就绪队列队首进程加入运行队列运行队列是否为空?结束是否延时1秒:当前运行进程优先数减1当前运行进程运行时间加1当前运行进程还需时间减1所需时间是否为0?否是设进程状态为完成,将该进程加入完成队列,将运行队列设为空.就绪队列是否为空?否是就绪队列是否为空?是否就绪队列队首进程加入到运行队列中.就绪队列队首进程的优先数是否大于当前运行进程的优先数?否是当前运行的进程状态设为就绪.将当前运行的进程插入就绪队列.将就绪队列的队首进程插入到运行队列.四、源代
8、码#include "stdafx.h"#include <iostream>#include <time.h>#include <string>using namespace std;int n;class PCBpublic:string procname;/进程名int pri;/进程优先数string state;/进程状态int runtime;/进程已运行CPU时间int needOftime;/还需要时间PCB *next;/指针;PCB *run = NULL; /运行队列头指针PCB *ready = NULL;/就绪队
9、列头指针PCB *finish = NULL;/完成队列头指针void Dtime(int t)time_t current_time;time_t start_time;time(&start_time);dotime(& current_time);while(current_time-start_time)<t);void Prinft()PCB *p;system("cls");/清屏p=run;if(p!=NULL)p->next=NULL;cout<<"当前正在运行的进程:"<<endl;c
10、out<<"进程名称"<<"t"<<"优先数"<<"t"<<"还需要时间"<<"t"<<"已运行时间"<<"t"<<"状态:"<<endl;while(p!=NULL)cout<<p->procname<<"tt"<<p->pri&
11、lt;<"t"<<p->needOftime<<"tt"<<p->runtime<<"tt"<<p->state<<endl;p=p->next;cout<<endl<<endl;cout<<"当前的就绪队列:"<<endl;cout<<"进程名称"<<"t"<<"优先数"
12、<<"t"<<"还需要时间"<<"t"<<"已运行时间"<<"t"<<"状态:"<<endl;p=ready;while(p!=NULL)cout<<p->procname<<"tt"<<p->pri<<"t"<<p->needOftime<<"tt&qu
13、ot;<<p->runtime<<"tt"<<p->state<<endl;p=p->next;cout<<endl<<endl;cout<<"当前已经完成的进程:"<<endl;cout<<"进程名称"<<"t"<<"优先数"<<"t"<<"还需要时间"<<"t
14、"<<"已运行时间"<<"t"<<"状态:"<<endl;p=finish;while(p!=NULL)cout<<p->procname<<"tt"<<p->pri<<"t"<<p->needOftime<<"tt"<<p->runtime<<"tt"<<p->
15、state<<endl;p=p->next;void insert(PCB *p)/按Pri大小插入就绪队列 PCB *S1,*S2; if(ready=NULL) p->next = NULL; ready = p; else S1 = ready; S2 = S1; while(S1!=NULL) if(S1->pri >= p->pri) S2 = S1; S1 = S1->next; else break; if(S2->pri >= p->pri) S2->next = p; p->next = S1; e
16、lse p->next = ready; ready = p; void priority()run = ready;ready = ready->next;run->state = "运行"while(run!=NULL) /*当运行队列不空时,有进程正在运行*/Dtime(1);/延时1秒run->runtime=run->runtime+1;run->needOftime=run->needOftime-1;run->pri=run->pri-1; /*每运行一次优先数降低1个单位*/if(run->need
17、Oftime=0) /*如所需时间为0将其插入完成队列*/run->state = "完成"run->next = finish;finish = run;run=NULL; /*运行队列头指针为空*/if(ready!=NULL) /*如就绪队列不空*/run = ready;run->state = "运行"ready = ready->next;else if(ready!=NULL)&&(run->pri<ready->pri)run->state="就绪"ins
18、ert(run);run = ready;run->state = "运行"ready = ready->next;Prinft(); /*输出进程PCB信息*/void CTProcessOfPri()/创建进程PCB * Node;string c5="P1","P2","P3","P4","P5"srand(int)time(0);for(int j = 0;j < 5; j+) Node = new PCB; if(Node=NULL) return; else Node->procname=cj;Node->n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋震烈补偿协议书
- 房租抵押写合同范本
- 房租转让分期协议书
- 房门清拆协议书范本
- 手术知情协议书模板
- 手机店招聘合同范本
- 打印社常用合同范本
- 打掉胎儿赔偿协议书
- 打火机定制合同范本
- 托管中心劳务协议书
- 2025云南泰佳鑫投资有限公司、嵩明县高新产业投资管理有限责任公司招聘9人考试笔试参考题库附答案解析
- 2025年新修订版《森林草原防灭火条例》全文+修订宣贯解读课件(原创)
- 人教版四年级道德与法治下册期末考试卷(含答案)
- 2025年法宣在线考试题附答案
- 出租车全国题库题库(500道)
- 中小企业存货管理存在的问题及对策毕业论文管理资料
- 国企办公室笔试考试题库及答案
- 2025年农业智能化智能灌溉系统数字化建设方案
- 新人娱乐主播培训课件
- 2025年老人三力测试题库及答案
- 电梯安全使用及维保操作手册
评论
0/150
提交评论