《操作系统原理》课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《操作系统原理》
课程设计报告书
题目:进程控制模块的设计与实现专业:网络工程
学号:131007111
学生姓名:李亚豪
指导教师:刘双红
完成日期:2015-12-05
目录
第1章课题概述 (3)
1.1 设计要求 (3)
1.2 设计理论依据 (3)
第2章设计简介和内容 (6)
2.1 设计简介 (6)
2.2 设计内容 (6)
第3章详细设计
3.1 设计流程图 (7)
3.2 主要程序代码 (9)
第4章设计结果及分析 (10)
4.1 运行结果截图 (10)
4.2 运行结果分析............................................................... 错误!未定义书签。总结 (15)
第1章课题描述
1.1设计要求
1.叙述要详细。
2.要有条理。
3.各个功能分开阐述。
4.自己可以增加题目要求的功能模块。
5.可以增加自己对题目的理解。
1.2设计理论依据
根据作业控制块中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。短作业优先调度算法,从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
第2章设计简介和内容
2.1设计简介
在多道程序环境下,将系统中的作业组织起来,为每个进入系统的作业建立档案以记录和作业相关的信息,按要求输入作业名、到达时间和服务时间,并为其建立作业控制块(JCB)挂入后备队列。进行作业调度时,在其后计算出各个作业的开始执行时间、完成时间、周转时间和平均周转时间,利用短作业优先算法进行作业调度,并按照由小到大的顺序显示出来。
2.2 设计内容
1)编写程序完成批处理系统中的作业调度,要求采用短作业优先的作业调度算法。实验具体包括:首先确定作业控制块的内容,作业控制块的组成方式;然后完成作业调度;最后编写主函数对所作工作进程测试。
2)创建作业控制块JCB,定义为结构体,为进入系统的作业建立档案,其中定义了作业名,作业到达时间,作业服务时间,作业开始执行时间,作业完成时间,作业周转时间,作业平均周转时间。
3)首先按各个作业完成时间由小到大排序。再用输入的到达时间与服务时间按一定算法算出各个作业的开始执行时间、完成时间、周转时间和作业平均周转时间。
第3章详细设计3.1 设计流程图
3.2主要代码
// 789.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
#include
#include
#define MAX 100 //最多能管理的作业数目
struct jcb //作业控制块JCB,定义为结构体
{
char name[10]; //作业名
float arrivetime; //作业到达时间
float servicetime;//作业服务时间
float starttime; //作业开始执行时间
float finishtime; //作业完成时间
float zztime; //作业周转时间
float avezztime; //作业平均周转时间
};
jcb a[MAX];
void input(jcb *p,int N)
{
int i;
printf("请分别输入:\n\t作业名,到达时间,服务时间(如:JOB1 5 10)\n\n");
for(i=0;i<=N-1;i++)
{
printf("请输入第%d个作业信息:",i+1);
scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);
printf("\n");
}
}
void Print(jcb *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float avezztime,int N)
{
int k;
printf("调度顺序:");
printf("%s",p[0].name);
for(k=1;k { printf("-->%s",p[k].name); } printf("\n\n"); printf("\t\t\t作业信息:\n"); printf("\nname\tarrive\tservice\tstart\tfinish\tzz\tavezz\n"); for(k=0;k<=N-1;k++) { printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n",p[k].name,p[k].arrivetime,p[k].service time,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].avezztime); } } void sort(jcb *p,int N) { for(int i=0;i<=N-1;i++) for(int j=0;j<=i;j++) if(p[i].arrivetime { jcb temp; temp=p[i]; p[i]=p[j]; p[j]=temp; } } void deal(jcb *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &avezztime,int N) { int k; for(k=0;k<=N-1;k++) { if(k==0)