操作系统 实验一 进程调度由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“操作系统进程调度实验”。
实验一
进程控制与处理机调度综合实验
一、实验目的通过模拟进程控制方法及单处理机系统的进程调度,了解进程的结构,进程的创建与撤消,进程的组织及进程的状态及其转换,掌握进程调度策略。
二、实验环境
开发工具使用windows平台下的vc++6.0。
三、实验内容
本实验为单机模拟进程调度算法,在程序设计时不需真正地建立线程或者进程。实验模拟创建若干进程(人为输入或随机数产生),选择一种或几种单处理机的进程调度算法,如FCFS(先来先服务),SPF(短进程优先),RR(时间片轮转法),优先级算法等,模拟进行进程调度。每进行一次调度,都打印一次运行进程、就绪队列、以及各个进程的PCB,并能在进程完成后及时撤消该进程。
四、完成情况
1、进程及进程的运行状态
进程是现代计算机中的基本要素,是系统分配资源和调度的基本单位。进程与程序不同,进程是系统中动态的实体,有它的创建、运行和撤销的过程。PCB块是系统感知进程存在的唯一实体。进程的创建必须首先创建进程的PCB块,而进程的运行也伴随着PCB块的变化,进城撤销也要同时撤销它的PCB块。所以本实验的任务就是通过模拟调度进程的PCB块来调度进程。进程的PCB块包含以下四方面的内容: a)进程标示符 b)处理及状态信息 c)进程调度信息 d)进程控制信息
进程在运行中存在三种基本状态,分别是运行状态、就绪状态和阻塞状态。
2、进程调度
一个运行进程的时间片用完或发生阻塞时,系统就会选择一个就绪进程调度执行。进程的调度算法有很多如FCFS、SPF、优先级调度和时间片轮转方法。进程调度算法模拟试验就是通过调度进程的PCB块来模拟调度进程。在系统中PCB块就表现为一个结构体,PCB块之间的连接方式存在两种,一种是连接方式,一种是索引方式。本试验中可选择任意一种连接方式。
3、例程
设计一个有 N个进程共行的进程调度程序。进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)。
每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。
调度算法的流程图如下:
开始初始化进程PCB,输入进程信息各进程按优先数从高到低排列y就绪队列空?结束就绪队列首进程投入运行时间片到CPU占用时间+1运行已占用CPU时间已达到所需CPU时间y进程完成撤销该进程是运行进程的优先数减1把运行进程插入就绪队列 图1-1 流程图
源代码:#include “stdio.h” #include #include #define getpch(type)(type*)malloc(sizeof(type))#define NULL 0 struct pcb { /* 定义进程控制块PCB */ char name[10];char state;int super;int ntime;int rtime;struct pcb* link;}*ready=NULL,*p;typedef struct pcb PCB;void sort()/* 建立对进程进行优先级排列函数*/ { PCB *first, *second;
int insert=0;if((ready==NULL)||((p->super)>(ready->super)))/*优先级最大者,插入队首 */ {
p->link=ready;ready=p;} else /* 进程比较优先级,插入适当的位置中*/ {
first=ready;second=first->link;
while(second!=NULL)
{
if((p->super)>(second->super))/*若插入进程比当前进程优先数
大,*/
{ /*插入到当前进程前面*/
p->link=second;
first->link=p;
second=NULL;
insert=1;}
else /* 插入进程优先数最低,则插入到队尾*/
{
first=first->link;second=second->link;
}
}
if(insert==0)
first->link=p;} } void input()/* 建立进程控制块函数*/ { int i,num;printf(“n请输入进程数量:”);scanf(“%d”,&num);for(i=0;i
printf(“n 进程号No.%d:n”,i);
p=getpch(PCB);
printf(“n 输入进程名:”);
scanf(“%s”,p->name);
printf(“n 输入进程优先数:”);
scanf(“%d”,&p->super);
printf(“n 输入进程运行时间:”);
scanf(“%d”,&p->ntime);
printf(“n”);
p->rtime=0;p->state='w';
p->link=NULL;
sort();/* 调用sort函数*/ } }
int space(){ int l=0;PCB* pr=ready;while(pr!=NULL){
l++;
pr=pr->link;} return(l);} void show(){ printf(“nqnametstatetsupertndtimetruntimen”);} void disp(PCB * pr)/*建立进程显示函数,用于显示当前进程*/ {
printf(“ %st”,pr->name);printf(“ %ct”,pr->state);printf(“ %dt”,pr->super);printf(“ %dt”,pr->ntime);printf(“ %dt”,pr->rtime);printf(“n”);} void check()/* 建立进程查看函数 */ { PCB* pr;printf(“n****当前正在运行的进程是:%s”,p->name);/*显示当前运行进程*/ show();disp(p);pr=ready;if(pr==NULL)
printf(“n****当前就绪队列为空!”);
else
{
printf(“n****当前就绪队列状态为:”);/*显示就绪队列状态*/
show();
while(pr!=NULL)
{
disp(pr);
pr=pr->link;
}
} } void destroy()/*建立进程撤消函数(进程运行结束,撤消进程)*/ { printf(“n 进程[%s]已完成.n”,p->name);free(p);} void running()/* 建立进程就绪函数(进程运行时间到,置就绪状态*/ {(p->rtime)++;if(p->rtime==p->ntime)destroy();/* 调用destroy函数*/ else {
(p->super)--;
p->state='w';
sort();/*调用sort函数*/ } } void main()/*主函数*/ { int len,h=0;char ch;input();len=space();while((len!=0)&&(ready!=NULL)){
ch=getchar();
h++;
printf(“n 当前运行次数为:%d n”,h);
p=ready;
ready=p->link;
p->link=NULL;
p->state='R';
check();
running();
printf(“n 按任一键继续......”);
ch=getchar();} printf(“nn 进程已经完成.n”);ch=getchar();}
输入数据后运行结果如下图所示:
五、问题及解决办法
问题:当插入的进程优先级大于当前进程优先级的时候,插入的进程应该放在什么
位置?
方法:通过指针的指向变换,把插入的进程放置在当前进程前面。
六、实验心得
通过本次实验,了解了进程的结构,进程的创建、撤销,掌握了进程调度策略处理机调度的理解,我更加深刻的认识到调度进程的pcb块来调度进程的过程,以及按照优先权进行排序的算法实现。对操作系统有了进一步的认识,后面会更加努力学习,掌握这门学科。
一.实验目的及实验环境 1.实验目的通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX 规范中fork和kill系统调用的功能和使用。 2.实......
一.实验目的用高级语言编写和调实一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 二.实验要求:设计一个有 N个进程并发执行的进程调度程序。 三.算法讲解进程调度算法......
进程调度算法模拟专业:XXXXX 学号:XXXXX 姓名:XXX 实验日期:20XX年XX月XX日一、实验目的通过对进程调度算法的模拟加深对进程概念和进程调度算法的理解。二、实验要求编写程序实......
一.实验内容描述1.目的(1)了解Windows内存管理器 (2)理解Windows的地址过程 2.内容任意给出一个虚拟地址,通过WinDbg观察相关数据并找到其物理地址二.理论分析Windows采用页式虚......
操作系统课程设计进 程 调 度 实 践 报 告姓名: 董宇超 班级:计算机一班 学号:0906010124目录: 实践内容 实践目的及意义 功能设计及数据结构 调试运行及测设分析 存在的问......