操作系统原理实验——进程调度实验报告
1目的与要求:
1)本实验目的是通过对进程调度算法的实现和实验模拟,加深对操作系统进程调度操作功能和进程调度算法的完整理解,培养和提高学生对操作系统开发的兴趣,以及进程调度程序的开发与应用能力;
2)理论上必须深刻理解优先权调度算法和时间片轮转调度算法的基本思想和原理;
3)独立使用C或VC++编程语言编写优先权调度或时间片轮转算算法调度模拟程序;
4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果)
5)于20xx年10月15日以前提交本次实验报告(含电子和纸质报告,由学习委员以班为单位统一打包提交)。
2 实验内容或题目
1)设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。
2)模拟调度程序可任选两种调度算法之一实现(有能力的同学可同时实现两个调度算法)。
3)程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。
4)本次实验内容(项目)的详细说明以及要求请参见实验指导书。
3 实验步骤与源程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Check();
typedef struct node
{
char name[10];
int span;//轮转时间
int take;//占用时间
int used;//已用的时间
int need;//还需要的时间
char status;//状态
struct node *next;
}PCB;
PCB *ready,*finish,*tail,*rear;
void Print(PCB *p)
{
while(p!=NULL)
{
printf("%3s%5d%5d%5d%5d%5c\n",p->name,p->used,p->need,p->take,p->span,p->status); p=p->next;
}
}
void Creat(int N)
{
PCB *p;
int time;
char na[10];
ready=NULL; /*就绪队列头指针*/
finish=NULL; /*完成队列头指针*/
tail=NULL;
rear=NULL;
printf("Enter name and time of round process \n");
for(int i=1;i<=N;i++)//创建就绪队列
{
p=(PCB *)malloc(sizeof(PCB));
scanf("%s",na); scanf("%d",&time); strcpy(p->name,na); p->span=2; p->take=0; p->used=0; p->need=time; p->status='J'; p->next=NULL;
if(ready==NULL){ready=p;tail=p;} else{tail->next=p;tail=p;}
}
printf("……………………运行结果……………………\n");
}
void Print1()
{//输出ready与finish队列
PCB *p;
p=ready;
printf("name,used,need,take,span,state\n");
Print(p);
p=finish;
Print(p);
}
void Run()
{
Print1();
ready->used+=1;
ready->need-=1;
ready->take+=1;
ready->status='R';
if(ready->need!=0)//进程时间need片是否为0
{
if(ready->take<ready->span)
/*占用时间是否到轮转时间,没到就继续,到了就排到就绪队列尾*/
{Run();}
else
{
tail->next=ready;ready=ready->next;tail=tail->next;
tail->status='J';tail->take=0;tail->next=NULL;
Check();
}
}
else//进程撤销,放入撤销队列
{
}
//Check();由于上多次文调用Run本身递归,此句也会被多调用,产生在结束时的冗余结果; }
if(finish==NULL) {finish=ready;rear=finish;} else {rear->next=ready;rear=rear->next;} ready=ready->next;rear->next=NULL;rear->status='F';rear->take=0; Check();
void Check()
{
if(ready!=NULL) {Run();}
else Print1();
}
main()
{
int N=0;
printf("输入进程数目:");
scanf("%d",&N);
Creat(N);
Check();
}
4 测试数据与实验结果(可以抓图粘贴)
q
操作系统原理实验——进程调度实验报告 w
1目的与要求:
1)本实验目的是通过对进程调度算法的实现和实验模拟,加深对操作系统进程调度操作功能和进程调度算法的完整理解,培养和提高学生对操作系统开发的兴趣,以及进程调度程序的开发与应用能力;
2)理论上必须深刻理解优先权调度算法和时间片轮转调度算法的基本思想和原理;
3)独立使用C或VC++编程语言编写优先权调度或时间片轮转算算法调度模拟程序;
4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果)
5)于20##年10月15日以前提交本次实验报告(含电子和纸质报告,由学习委员以班为单位统一打包提交)。
2 实验内容或题目
1)设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。
2)模拟调度程序可任选两种调度算法之一实现(有能力的同学可同时实现两个调度算法)。
3)程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。
4)本次实验内容(项目)的详细说明以及要求请参见实验指导书。
3 实验步骤与源程序 e
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Check();
typedef struct node
{
char name[10];
int span;//轮转时间
int take;//占用时间
int used;//已用的时间
int need;//还需要的时间
char status;//状态
struct node *next;
}PCB;
PCB *ready,*finish,*tail,*rear;
void Print(PCB *p)
{
while(p!=NULL)
{
printf("%3s%5d%5d%5d%5d%5c\n",p->name,p->used,p->need,p->take,p->span,p->status);
p=p->next;
}
}
void Creat(int N)
{
PCB *p;
int time;
char na[10];
ready=NULL; /*就绪队列头指针*/
finish=NULL; /*完成队列头指针*/
tail=NULL;
rear=NULL;
printf("Enter name and time of round process \n");
for(int i=1;i<=N;i++)//创建就绪队列
{
p=(PCB *)malloc(sizeof(PCB));
scanf("%s",na);
scanf("%d",&time);
strcpy(p->name,na);
p->span=2;
p->take=0;
p->used=0;
p->need=time;
p->status='J';
p->next=NULL;
if(ready==NULL){ready=p;tail=p;}
else{tail->next=p;tail=p;}
}
printf("……………………运行结果……………………\n");
}
void Print1()
{//输出ready与finish队列
PCB *p;
p=ready;
printf("name,used,need,take,span,state\n");
Print(p);
p=finish;
Print(p);
}
void Run()
{
Print1();
ready->used+=1;
ready->need-=1;
ready->take+=1;
ready->status='R';
if(ready->need!=0)//进程时间need片是否为0
{
if(ready->take<ready->span)
/*占用时间是否到轮转时间,没到就继续,到了就排到就绪队列尾*/
{Run();}
else
{
tail->next=ready;ready=ready->next;tail=tail->next;
tail->status='J';tail->take=0;tail->next=NULL;
Check();
}
}
else//进程撤销,放入撤销队列
{
if(finish==NULL)
{finish=ready;rear=finish;}
else
{rear->next=ready;rear=rear->next;}
ready=ready->next;rear->next=NULL;rear->status='F';rear->take=0;
Check();
}
//Check();由于上多次文调用Run本身递归,此句也会被多调用,产生在结束时的冗余结果;
}
void Check()
{
if(ready!=NULL) {Run();}
else Print1();
}
main()
{
int N=0;
printf("输入进程数目:");
scanf("%d",&N);
Creat(N);
Check();
}
4 测试数据与实验结果(可以抓图粘贴)e
ew
wewe
操作系统进程调度实验报告一实验目的用高级语言编写和调试一个进程调度程序以加深对进程的概念及进程调度算法的解进程调度时进程管理的主要…
操作系统实验题设计一若干并发进程的进程调度程序一实验目的无论是批处理系统分时系统还是实时系统用户进程数一般都大于处理机数这将导致用…
实验一进程调度实验专业XXXXX学号XXXXX姓名XXX实验日期20XX年XX月XX日一实验目的通过对进程调度算法的模拟加深对进程…
实验二进程调度实验内容进程调度模拟实验实验目的通过模拟进程调度算法了解进程调度的过程并比较不同的调度算法的区别实验题目设计一段程序…
目录1课程设计目的32课程设计要求33相关知识34需求分析45概要设计56详细设计67测试修改及运行结果138参考文献159结束语…
操作系统实验题设计一若干并发进程的进程调度程序一实验目的无论是批处理系统分时系统还是实时系统用户进程数一般都大于处理机数这将导致用…
1实验目的通过优先权法和轮转算法的模拟加深对进程概念和进程调度过程的理解掌握进程状态之间的切换同时掌握进程调度算法的实现方法和技巧…
1实验目的通过优先权法和轮转算法的模拟加深对进程概念和进程调度过程的理解掌握进程状态之间的切换同时掌握进程调度算法的实现方法和技巧…
操作系统进程调度实验报告一实验目的用高级语言编写和调试一个进程调度程序以加深对进程的概念及进程调度算法的解进程调度时进程管理的主要…
实验一进程调度实验专业XXXXX学号XXXXX姓名XXX实验日期20XX年XX月XX日一实验目的通过对进程调度算法的模拟加深对进程…
实验一进程调度一实验题目1编写并调试一个模拟的进程调度程序采用最高优先数优先调度算法对五个进程进行调度2编写并调试一个模拟的进程调…