| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 768 人关注过本帖
标题:求助:关于操作系统进程调度的课设
只看楼主 加入收藏
yayaqian
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-11-12
收藏
 问题点数:0 回复次数:3 
求助:关于操作系统进程调度的课设
设计要求:编写一个进程调度程序,允许多个进程共行的进程调度程序。  
  进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。
  每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。
  进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为输入进程的时间。
  进程的运行时间以时间片为单位进行计算。
  每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。
  就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。
  如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
  每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。   
重复以上过程,直到所要进程都完成为止


那位 大虾如果会的, 请联系下吧,我们的 课程设计作业,要得比较急
我的邮箱是qianer1984@
搜索更多相关主题的帖子: 操作系统 进程 
2008-11-12 13:04
小于儿意
Rank: 1
等 级:新手上路
帖 子:9
专家分:5
注 册:2011-11-12
收藏
得分:0 
#include<stdio.h>
#include<string.h>
#include<iostream.h>
const int block_time=10; //定义时间片的长度为10秒
const int MAXPCB=100; //定义最大进程数
//定义进程结构体
typedef struct node{
    char name[20];
    int status;
    int time;
    int privilege;
    int finished;
    int wait_time;
}pcb;
pcb pcbs[MAXPCB];
int quantity;
//初始化函数
void initial(){
    int i;
    for(i=0;i<MAXPCB;i++){
        strcpy(pcbs[i].name,"");
        pcbs[i].status=0;
        pcbs[i].time=0;
        pcbs[i].privilege=0;
        pcbs[i].finished=0;
        pcbs[i].wait_time=0;
    }
    quantity=0;
}
//读数据函数
int readData(){
    FILE *fp;
    char fname[20];
    int i;
    cout<<"请输入进程流文件名:";
    cin>>fname;
    if((fp=fopen(fname,"r"))==NULL){
        cout<<"错误,文件打不开,请检查文件名"<<endl;
    }
    else{
        while(!feof(fp)){ fscanf(fp,"%s%d%d%d",pcbs[quantity].name,&pcbs[quantity].status,&pcbs[quantity].time,&pcbs[quantity].privilege);
            quantity++;
        }
        //输出所读入的数据
    cout<<"输出所读入的数据"<<endl;
    cout<<"进程名 进程状态  所需时间  优先数"<<endl;
    for(i=0;i<quantity;i++){
        cout<<" "<<pcbs[i].name<<" "<<pcbs[i].status<<" "<<pcbs[i].time<<"        "<<pcbs[i].privilege<<endl;
    }
    return(1);
    }
    return(0);
}
//重置数据,以供另一个算法使用
void init()
{
    int i;
    for(i=0;i<MAXPCB;i++){
        pcbs[i].finished=0;
        pcbs[i].wait_time=0;
    }
}
//先进先出算法
void FIFO()
{
    int i,j;
    int total;//输出FIFO算法执行流
    cout<<endl<<"-------------------------------------------------------------"<<endl;
    cout<<"FIFO算法执行流:"<<endl;
    cout<<"进程名    等待时间"<<endl;
    for(i=0;i<quantity;i++){
        cout<<"  "<<pcbs[i].name<<"         "<<pcbs[i].wait_time<<endl;
        for(j=i+1;j<quantity;j++){
            pcbs[j].wait_time+=pcbs[i].time;
        }
    }
    total=0;
    for(i=0;i<quantity;i++){
        total+=pcbs[i].wait_time;
    }
    cout<<"总等待时间:"<<total<<"  平均等待时间:"<<total/quantity<<endl;
}
//优先数调度算法
void privilege()
{
    int i,j,p;
    int passed_time=0;
    int total;
    int queue[MAXPCB];
    int current_privilege=1000;
    for(i=0;i<quantity;i++){
        current_privilege=1000;
        for(j=0;j<quantity;j++){
            if((pcbs[j].finished==0)&&(pcbs[j].privilege<current_privilege)){
                p=j;
                current_privilege=pcbs[j].privilege;
            }
        }
        queue[i]=p;
        pcbs[p].finished=1;
        pcbs[p].wait_time+=passed_time;
        passed_time+=pcbs[p].time;
    }
    //输出优先数调度执行流
    cout<<endl<<"---------------------------------------------------------------"<<endl;
    cout<<"优先数调度执行流:"<<endl;
    cout<<"进程名    等待时间"<<endl;
    for(i=0;i<quantity;i++){
        cout<<"  "<<pcbs[queue[i]].name<<"        "<<pcbs[queue[i]].wait_time<<endl;
    }
    total=0;
    for(i=0;i<quantity;i++){
        total+=pcbs[i].wait_time;
    }
    cout<<"总等待时间:"<<total<<"  平均等待时间:"<<total/quantity<<endl;
}

//显示版权信息函数
void version()
{
    cout<<endl<<endl;
    cout<<" ┏━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
    cout<<" ┃       进程调度模拟系统         ┃"<<endl;
    cout<<" ┠───────────────────────┨"<<endl;
    cout<<" ┃     (c)All Right Reserved  Neo          ┃"<<endl;
    cout<<" ┃      sony006@          ┃"<<endl;
    cout<<" ┃     version 2004  build 1122         ┃"<<endl;
    cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;
    cout<<endl<<endl;
}
//主函数
void main()
{
    int flag;
    version();
    initial();
    flag=readData();
    if(flag==1){
        FIFO();
        init();
        privilege();
        init();
        timer();
    }
}
拿去看看吧
2011-11-13 14:09
快乐出发0220
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:45
专家分:130
注 册:2012-4-13
收藏
得分:0 
运行不了。。。
2012-06-01 20:12
yang19931206
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-3-2
收藏
得分:0 
如果存在若干个定时任务怎么改?
2016-03-02 14:32
快速回复:求助:关于操作系统进程调度的课设
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017367 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved