计算机操作系统进操作系统程调度模拟实验

计算机操作系统实验

报告

院系:公共管理学院

班级:信息管理与信息系统一班

姓名:周晨妍

学号:

指导老师:匡林爱

日期:2015年11月19日

一、课程设计目的

进行操作系统课程设计主要是在学习操作系统课程的基础上,在完成操作系统各部分实验的基础上,对操作系统的整体进行一个模拟,通过实践加深对各个部分的管理功能的认识,还能进一步分析各个部分之间的联系,最后达到对完整系统的理解。同时,可以提高运用操作系统知识解决实际问题的能力;锻炼实际的编程能力、开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。

二、先来先服务调度算法

1、算法原理

设计程序模拟进程的先来先服务FCFS过程。假设有n个进程分别在T1, „ ,Tn

时刻到达系统,它们需要的服务时间分别为S1, „ ,Sn。分别采用先来先服务FCFS调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。

程序要求如下:

1)进程个数n;每个进程的到达时间T1, „ ,Tn和服务时间S1, „ ,Sn。 2)要求采用先来先服务FCFS调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间; 3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程B开始运行”等等;

4)输出:要求输出计算出来的每个进程的周转时间,带权周转时间,所有进程的平均周转时间,带权平均周转时间。

2、实验提示

用C语言实现提示:

1)程序中进程调度时间变量描述如下: static int MaxNum=100; int ArrivalTime[MaxNum]; int ServiceTime[MaxNum]; int FinishTime[MaxNum]; int WholeTime[MaxNum];

double WeightWholeTime[MaxNum]; double AverageWT_FCFS; double AverageWWT_FCFS;

2)进程调度的实现过程如下:  变量初始化;

 接收用户输入n,T1, „ ,Tn,S1, „ ,Sn;

 按照选择算法进行进程调度,计算进程的完成时间、周转时间和带权周

转时间;

 计算所有进程的平均周转时间和平均带权周转时间; 按格式输出调度结果。

3、程序流程图

4、作业时间表

平均带权周转时间 W=(1+2.23+26+1.08)/4ms=7.5775ms

5、程序源代码

#include

typedef struct PCB //定义进程控制块 { char name[10]; //进程名 char state; //运行状态

int ArriveTime; //到达时间 int StartTime; //进程开始时间 int FinishTime; //进程结束时间 int ServiceTime; //服务时间 float WholeTime;//周转时间

float WeightWholeTime;//带权周转时间 struct PCB *next; //指向下个进程 }pcb;

double x=0,y=0; int i;

int time; //计时器 int n; //进程个数

pcb *head=NULL,*p,*q; //进程链表指针 void run_FCFS(pcb *p1) //运行未完成的进程 {

time = p1->ArriveTime > time? p1->ArriveTime:time; p1->StartTime=time;

printf(

p1->FinishTime=time;

p1->WholeTime=p1->FinishTime-p1->ArriveTime;

p1->WeightWholeTime=p1->WholeTime/p1->ServiceTime; x+=p1->WholeTime; y+=p1->WeightWholeTime;

printf(

printf(

p1->ServiceTime,p1->FinishTime,p1->WholeTime,p1->WeightWholeTime);

}

void FCFS() //找到当前未完成的进程 {

int i; p=head;

for(i=0;i

if(p->state=='F') {

q=p; //标记当前未完成的进程 run_FCFS(q); }

p=p->next; } }

void getInfo() //获得进程信息并创建进程 {

int num;

printf(

for(num=0;num

p->next=NULL; p->state='F'; q=p; } }

void main()

{ printf(

6、运行结果

三、短作业优先调度算法

1、实验提示

用C语言实现提示:

程序中进程调度时间变量描述如下: char name[10]; //进程名 float arrivetime; //到达时间 float servicetime; //服务时间 float starttime; //开始时间 float finishtime; //完成时间 float zztime; //周转时间

float dqzztime; //带权周转时间

2、程序流程图

总体流程图

详细流程图

3、作业时间表

平均带权周转时间 W=(1+13+2.31+1.08)/4ms=4.3475ms

4、程序源代码

#include

struct sjf //定义进程的结构体 {

char name[10]; //进程名 float arrivetime; //到达时间 float servicetime; //服务时间 float starttime; //开始时间 float finishtime; //完成时间 float zztime; //周转时间

float dqzztime; //带权周转时间 };

sjf b[100]; //定义短作业优先算法进程的最大数量

void Sinput(sjf *p,int N) //输入函数 {

int i;

printf(

void SPrint(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) //输出函数 {

int k;

printf(

printf(

printf(

void Ssort(sjf *p,int N) //按短作业优先算法排序 {

for(int i=1;i

void Sdeal(sjf *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N) //运行结果 {

int k;

for(k=0;k

个进程的完成时间+现在进程的服务时间 } }

for(k=0;k

void SJF(sjf *p,int N) {

float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; Ssort(p,N);

Sdeal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);

SPrint(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); }

void main() //主函数 {

int M;

printf(

5、运行结果

三、优先级调度算法

1、实验提示

进程控制块结构

char name[20]; //进程名称

int priority; //优先级数 int gettime; //到达时间 float dotime; //服务时间 int starttime; //开始时间 int finishtime; //完成时间 float turntime; //周转时间 float ptime; //带权周转时间

2、作业时间表

3、程序源代码

#include

#include

struct process //进程结构体 {

char name[20]; //进程名称 int priority; //优先级数 int gettime; //到达时间 float dotime; //服务时间 int starttime; //开始时间 int finishtime; //完成时间 float turntime; //周转时间 float ptime; //带权周转时间 };

int n; //进程的个数

float averageturntime,averageptime; //平均周转时间和平均加权周转时间

void GetInProcess(process *pp) //对进程数组进行初始化 {

cout

cout

cin>>pp[i].name; cin>>pp[i].priority; cin>>pp[i].gettime; cin>>pp[i].dotime; }

cout

cout

cout

cout

cout

void ProcessPriority(process *pp) //对此进程数组按优先级从小到大排序,级数越小优先级越高。 {

for(int i=0;i

int k=i;

for(int j=k+1;j

if(pp[i].priority>pp[j].priority) k=j; process t; t=pp[k]; pp[k]=pp[i]; pp[i]=t; } }

void PrintProcess(process *pp) //输出排序后的诸进程

{ float s1,s2,sum1=0,sum2=0; //sum1表示所有进程周转时间之和,sum2表示所有进程加权周转时间之和。

cout

cout

pp[0].starttime=pp[0].gettime;

pp[0].finishtime=pp[0].starttime+pp[0].dotime; pp[0].turntime=pp[0].finishtime-pp[0].gettime; pp[0].ptime=pp[0].turntime/pp[0].dotime; for(int i=1;i

pp[i].starttime=pp[i-1].finishtime;

pp[i].finishtime=pp[i].starttime+pp[i].dotime; pp[i].turntime=pp[i].finishtime-pp[i].gettime; pp[i].ptime=pp[i].turntime/pp[i].dotime; }

for(i=0;i

sum1=sum1+pp[i].turntime; sum2=sum2+pp[i].ptime; }

s1=sum1/n; s2=sum2/n; for(i=0;i

cout

cout

cout

cout

cout

int main() {

cout

cin>>n;

process a[100]; GetInProcess(a); ProcessPriority(a); PrintProcess(a); return 0; }

3、运行结果

计算机操作系统实验

报告

院系:公共管理学院

班级:信息管理与信息系统一班

姓名:周晨妍

学号:

指导老师:匡林爱

日期:2015年11月19日

一、课程设计目的

进行操作系统课程设计主要是在学习操作系统课程的基础上,在完成操作系统各部分实验的基础上,对操作系统的整体进行一个模拟,通过实践加深对各个部分的管理功能的认识,还能进一步分析各个部分之间的联系,最后达到对完整系统的理解。同时,可以提高运用操作系统知识解决实际问题的能力;锻炼实际的编程能力、开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。

二、先来先服务调度算法

1、算法原理

设计程序模拟进程的先来先服务FCFS过程。假设有n个进程分别在T1, „ ,Tn

时刻到达系统,它们需要的服务时间分别为S1, „ ,Sn。分别采用先来先服务FCFS调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。

程序要求如下:

1)进程个数n;每个进程的到达时间T1, „ ,Tn和服务时间S1, „ ,Sn。 2)要求采用先来先服务FCFS调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间; 3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程B开始运行”等等;

4)输出:要求输出计算出来的每个进程的周转时间,带权周转时间,所有进程的平均周转时间,带权平均周转时间。

2、实验提示

用C语言实现提示:

1)程序中进程调度时间变量描述如下: static int MaxNum=100; int ArrivalTime[MaxNum]; int ServiceTime[MaxNum]; int FinishTime[MaxNum]; int WholeTime[MaxNum];

double WeightWholeTime[MaxNum]; double AverageWT_FCFS; double AverageWWT_FCFS;

2)进程调度的实现过程如下:  变量初始化;

 接收用户输入n,T1, „ ,Tn,S1, „ ,Sn;

 按照选择算法进行进程调度,计算进程的完成时间、周转时间和带权周

转时间;

 计算所有进程的平均周转时间和平均带权周转时间; 按格式输出调度结果。

3、程序流程图

4、作业时间表

平均带权周转时间 W=(1+2.23+26+1.08)/4ms=7.5775ms

5、程序源代码

#include

typedef struct PCB //定义进程控制块 { char name[10]; //进程名 char state; //运行状态

int ArriveTime; //到达时间 int StartTime; //进程开始时间 int FinishTime; //进程结束时间 int ServiceTime; //服务时间 float WholeTime;//周转时间

float WeightWholeTime;//带权周转时间 struct PCB *next; //指向下个进程 }pcb;

double x=0,y=0; int i;

int time; //计时器 int n; //进程个数

pcb *head=NULL,*p,*q; //进程链表指针 void run_FCFS(pcb *p1) //运行未完成的进程 {

time = p1->ArriveTime > time? p1->ArriveTime:time; p1->StartTime=time;

printf(

p1->FinishTime=time;

p1->WholeTime=p1->FinishTime-p1->ArriveTime;

p1->WeightWholeTime=p1->WholeTime/p1->ServiceTime; x+=p1->WholeTime; y+=p1->WeightWholeTime;

printf(

printf(

p1->ServiceTime,p1->FinishTime,p1->WholeTime,p1->WeightWholeTime);

}

void FCFS() //找到当前未完成的进程 {

int i; p=head;

for(i=0;i

if(p->state=='F') {

q=p; //标记当前未完成的进程 run_FCFS(q); }

p=p->next; } }

void getInfo() //获得进程信息并创建进程 {

int num;

printf(

for(num=0;num

p->next=NULL; p->state='F'; q=p; } }

void main()

{ printf(

6、运行结果

三、短作业优先调度算法

1、实验提示

用C语言实现提示:

程序中进程调度时间变量描述如下: char name[10]; //进程名 float arrivetime; //到达时间 float servicetime; //服务时间 float starttime; //开始时间 float finishtime; //完成时间 float zztime; //周转时间

float dqzztime; //带权周转时间

2、程序流程图

总体流程图

详细流程图

3、作业时间表

平均带权周转时间 W=(1+13+2.31+1.08)/4ms=4.3475ms

4、程序源代码

#include

struct sjf //定义进程的结构体 {

char name[10]; //进程名 float arrivetime; //到达时间 float servicetime; //服务时间 float starttime; //开始时间 float finishtime; //完成时间 float zztime; //周转时间

float dqzztime; //带权周转时间 };

sjf b[100]; //定义短作业优先算法进程的最大数量

void Sinput(sjf *p,int N) //输入函数 {

int i;

printf(

void SPrint(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) //输出函数 {

int k;

printf(

printf(

printf(

void Ssort(sjf *p,int N) //按短作业优先算法排序 {

for(int i=1;i

void Sdeal(sjf *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N) //运行结果 {

int k;

for(k=0;k

个进程的完成时间+现在进程的服务时间 } }

for(k=0;k

void SJF(sjf *p,int N) {

float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; Ssort(p,N);

Sdeal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);

SPrint(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); }

void main() //主函数 {

int M;

printf(

5、运行结果

三、优先级调度算法

1、实验提示

进程控制块结构

char name[20]; //进程名称

int priority; //优先级数 int gettime; //到达时间 float dotime; //服务时间 int starttime; //开始时间 int finishtime; //完成时间 float turntime; //周转时间 float ptime; //带权周转时间

2、作业时间表

3、程序源代码

#include

#include

struct process //进程结构体 {

char name[20]; //进程名称 int priority; //优先级数 int gettime; //到达时间 float dotime; //服务时间 int starttime; //开始时间 int finishtime; //完成时间 float turntime; //周转时间 float ptime; //带权周转时间 };

int n; //进程的个数

float averageturntime,averageptime; //平均周转时间和平均加权周转时间

void GetInProcess(process *pp) //对进程数组进行初始化 {

cout

cout

cin>>pp[i].name; cin>>pp[i].priority; cin>>pp[i].gettime; cin>>pp[i].dotime; }

cout

cout

cout

cout

cout

void ProcessPriority(process *pp) //对此进程数组按优先级从小到大排序,级数越小优先级越高。 {

for(int i=0;i

int k=i;

for(int j=k+1;j

if(pp[i].priority>pp[j].priority) k=j; process t; t=pp[k]; pp[k]=pp[i]; pp[i]=t; } }

void PrintProcess(process *pp) //输出排序后的诸进程

{ float s1,s2,sum1=0,sum2=0; //sum1表示所有进程周转时间之和,sum2表示所有进程加权周转时间之和。

cout

cout

pp[0].starttime=pp[0].gettime;

pp[0].finishtime=pp[0].starttime+pp[0].dotime; pp[0].turntime=pp[0].finishtime-pp[0].gettime; pp[0].ptime=pp[0].turntime/pp[0].dotime; for(int i=1;i

pp[i].starttime=pp[i-1].finishtime;

pp[i].finishtime=pp[i].starttime+pp[i].dotime; pp[i].turntime=pp[i].finishtime-pp[i].gettime; pp[i].ptime=pp[i].turntime/pp[i].dotime; }

for(i=0;i

sum1=sum1+pp[i].turntime; sum2=sum2+pp[i].ptime; }

s1=sum1/n; s2=sum2/n; for(i=0;i

cout

cout

cout

cout

cout

int main() {

cout

cin>>n;

process a[100]; GetInProcess(a); ProcessPriority(a); PrintProcess(a); return 0; }

3、运行结果


相关文章

  • 进程调度的设计与实现
  • 院 系:计 算 机 学 院 实验课程:计算机操作系统实验 实验名称:进程调度的设计与实现 指导老师:陈红英 开课时间:2011 - 2012年度第 2学期 专 业:网络工程 班 级:10 级5班 学 生:袁沛权 学 号:[1******** ...查看


  • 课程设计进程实验报告
  • 学年论文(课程设计) 操作系统课程设计 学 院 数学与计算机学院 学科门类 工 学 专 业 网络工程 学 号 姓 名 指导教师 年 月 日 题目: 河北大学2010届本科生毕业论文(设计) 河北大学学年论文(课程设计)任务书 (指导教师用表 ...查看


  • 操作系统 磁盘管理 实验报告
  • 实 验 报 告 课程名称:院 系:专业班级:姓 名:指导老师: 操作系统 信息与控制工程学院 计算机0801 2010年 12月 31日 目录 一.实验目的 ......................................... ...查看


  • 进程调度模拟设计--先来先服务.最高响应比优先调度算法
  • 课 程 设 计 题 目 学 院 专 业 班 级 姓 名 指导教师 进程调度模拟设计-先来先服务.最高响应比优先调度算法 计算机科学与技术学院 计算机科学与技术专业 计算机科学与技术0902班 庞竞强 郭羽成 2011 年 01 月 12 日 ...查看


  • 实验二___虚拟存储器
  • 实验二 虚拟存储器 一.实验内容 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺 页中断. 二.实验目的 在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的 扩充,使多道运行的作业的全 ...查看


  • 处理器调度时间片轮转法实验报告(C和C含源代码)
  • 实验2处理器调度学院:计算机与软件专业:软件工程日期:2014年5月18日姓名:学号:指导老师: 一.实验题目 按时间片轮转法实现处理器调度的模拟设计与实现 二.实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态.当就绪 ...查看


  • 处理器调度实验报告
  • 操作系统实验报告 选题名称 所在院系 专业名称 处理器调度 计算机科学与技术学院 计算机科学与技术学院(日语双学位) 龚德兴.徐莉莉.张文卿. 王俏.何慧楠.刘艳茹.朱静君 姓 名 班 级 指导老师 完成时间 1202班 付老师 2014- ...查看


  • 太原理工大学毕业设计题目及任务书
  • 毕业设计(论文)任务书-1 设计(论文)题目:温度调节仪表设计(液晶显示) 题目性质:一般设计 指导教师:牛昱光 毕业设计(论文)要求及原始数据(资料): 本题目属单片机应用开发类型.选题学生需自行购置一款带有液晶显示模块的单片机开发板和测 ...查看


  • 混合智能算法及其在供水水库群优化调度中的应用
  • 水 2007年12月利SHUILI学XUEBAO报第38卷第12期文章编号:0559.9350(2007)12-1437一07 混合智能算法及其在供水水库群优化调度中的应用 刘卫林1'2,董增川1,王德智3 (1.河海大学水文水资源与水利工 ...查看


热门内容