欢迎关注微信公众号:chave-cn

最短进程优先调度算法SPF(Shortest Process First)

一、实验目的 
在批处理系统、分时系统和实时系统中,进程数目一般都大于处理机的个数,导致各个进程互相争夺处理机。这就需要进程调度程序按照相应的调度方式和调度算法,从处于就绪状态的诸多进程中选择一个进程将处理机分配给它,使之执行。 
本实验利用高级语言编写和调试进程调度程序,模拟进程调度的过程,从而加深对进程概念和进程调度算法的理解,帮助学生加深了解处理器调度的工作。

二、实验内容 
1. 设计有五个进程并发执行的模拟调度程序,每个程序由一个PCB表示。 
2. 模拟调度程序可任选两种调度算法实现。 
3. 程序执行中应能在屏幕上显示出各种进程的状态变化。 
4. 实验过后书写实验报告。

三、实验方法 
1. 算法设计思路 
最短进程优先调度算法每次从就绪队列中选出下一个“CPU执行期最短”的进程,为之分配处理机。我这里就是每次在决定调度进程前,比较就绪的所有作业,选择运行时间最短的作业运行

2.程序中主要的数据结构和函数说明 
程序主要使用了c++标准模板库中的sort排序函数,其中自定义了compare比较函数,并以每个作业的到达时间为关键字从小到大排序,做这一步的目的是为找出第一个运行的作业

3.主要模块 
本实验包含四个模块,数据的输入模块,初始时对一个进程的选择模块,对数据的处理计算模块,数据的输出模块,其中最重要的是对数据的处理这一模块,其不单单实现了对数据的计算功能,还实现了在已经就绪的进程中选择运行时间最短的作业运行

四、源程序代码

#include"iostream"
#include"algorithm"
using namespace std;

struct node{
    string name;
    double arr;   //到达时间
    double ing;   //运行时间
}ai[100];

bool compare(node a,node b)
{
    if(a.arr==b.arr)
        return a.ing<b.ing;
    return a.arr<b.arr;
}

int main()
{
    int n;
    cout<<"请输入进程个数:";
    cin>>n;
    cout<<"请输入"<<n<<"个进程的名字、到达时间、运行时间"<<endl;
    for(int i=0;i<n;i++)
    {
        cin>>ai[i].name>>ai[i].arr>>ai[i].ing;
    }
    sort(ai,ai+n,compare);
    cout<<"进程名 \t到达时间\t运行时间\t开始时间\t结束时间\t周转时间\t带权周转时间"<<endl;
    double sta=ai[0].arr;
    for(int i=0;i<n;i++)
    {
        double jiesu=sta+ai[i].ing;
        double zhouz=jiesu-ai[i].arr;
        double Dzhouz=zhouz/ai[i].ing;
        cout<<endl;
        cout<<ai[i].name<<"\t";
        cout<<ai[i].arr<<"\t\t";
        cout<<ai[i].ing<<"\t\t";
        cout<<sta<<"\t\t";
        cout<<jiesu<<"\t\t";
        cout<<zhouz<<"\t\t";
        cout<<Dzhouz<<endl;

        if(i<n-2)
        {
            int mmax=i+1;
            for(int j=mmax+1;ai[j].arr<=jiesu&&j<n;j++)
            {
                if(ai[j].ing<ai[mmax].ing)
                {
                mmax=j;
                }
            }
        //cout<<mmax<<endl;
            node temp=ai[mmax];
            ai[mmax]=ai[i+1];
            ai[i+1]=temp;
        }

        sta=jiesu>ai[i+1].arr?jiesu:ai[i+1].arr;
    }
}

五、程序运行结果及分析 

1. 运行结果 

最短进程优先调度算法SPF(Shortest Process First)

2.结果分析

与预期的结果一致,初步认定算法实现

微信号
微信公众号

tao-s.com