《操作系统原理》
    目:进程控制模块的设计与实现
    业:      网络工程       
    号:      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 运行结果分析    11
总结    15
       
                                                                                                                                  1 课题描述
1.1设计要求
1. 叙述要详细。
2. 要有条理。
3. 各个功能分开阐述。
4. 自己可以增加题目要求的功能模块。
5. 可以增加自己对题目的理解。
1.2设计理论依据
根据作业控制块中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。  短作业优先调度算法,从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
2 设计简介和内容
2.1设计简介
  在多道程序环境下,将系统中的作业组织起来,为每个进入系统的作业建立档案以记录和作业相关的信息,按要求输入作业名、到达时间和服务时间,并为其建立作业控制块(JCB)挂入后备队列。进行作业调度时,在其后计算出各个作业的开始执行时间、完成时间、周转时间和平均周转时间,利用短作业优先算法进行作业调度,并按照由小到大的顺序显示出来。
2.2 设计内容
  1)编写程序完成批处理系统中的作业调度,要求采用短作业优先的作业调度算 法。实验
具体包括:首先确定作业控制块的内容,作业控制块的组成方式;然后完成作业调度;最后编写主函数对所作工作进程测试。
    2)创建作业控制块JCB,定义为结构体,为进入系统的作业建立档案,其中定 义了作业名,作业到达时间,作业服务时间,作业开始执行时间,作业完成时间,作业周转时间,作业平均周转时间。
    3)首先按各个作业完成时间由小到大排序。再用输入的到达时间与服务时间按一定算法算出各个作业的开始执行时间、完成时间、周转时间和作业平均周转时间。
                   
3 详细设计
c++课程设计报告3.1 设计流程图
                               
                             
             
3.2主要代码
// 789.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<stdio.h>
#include<conio.h>
#include<windows.h> 
#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<N;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].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].avezztime);   

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。