1 操作系统任务调度问题----来源刘H同学

来源刘H同学

来源刘H同学

来源刘H同学

来源刘H同学

来源刘H同学

目的:设计并实现一个算法Schedule,完成简单的操作系统任务调度问题。

描述:操作系统任务分为系统

任务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务序列task(顺序存储),任务数为n。每个task的元素值表示任务的优先级,数值越小,优先级越高。算法scheduler实现如下功能,将task中的任务按照系统任务、用户任务依次存放到队列 system_task和 user_task中(队列中元素的值是任务在顺序表task中对应的下标),并且优先级高的任务排在前面。优先级相同的任务按照在task中的相对顺序入队排列(即task序列中在先的任务排在前面)。

要求:顺序表使用vector或数组,队列使用本学期设计好的顺序队列ADT

参考函数原形:

template<class ElemType>

void Schedule(vector<ElemType> &A, SqQueue<int> &system_task, SqQueue<int> &user_task);

输入说明 :

第一行:任务序列task中各个任务的优先级(任务优先级之间以空格分隔)

输出说明 :

第一行:任务序列task的遍历结果,以","分隔

             格式: (序号,优先级) ...

             空行

第二行:系统任务队列遍历结果,以空格分隔。如系统任务队列为空,输出 none

第三行:用户任务队列遍历结果,以空格分隔。如用户任务队列为空,输出 none

     

输入范例 :

0 30 155 1 80 300 155 170 40 30 99

输出范例 :

(0,0),(1,30),(2,155),(3,1),(4,80),(5,300),(6,155),(7,170),(8,40),(9,30),(10,99)

0 3 1 9 8 
4 10 2 6 7 

#include <iostream>
#include <sstream>
#include<algorithm>
#include <cstring>
#include <vector>
#include <stdio.h>
#include<queue>
using namespace std;
void Schedule(vector<int>task, int system_task[],int user_task[])
{
    int m1 = 0, m2 = 0, temp;
    for (int i = 0; i<task.size(); i++)
    {
        if (task[i] >= 0 && task[i]<50)
            system_task[m1++] = i;
        else if (task[i] >= 50 && task[i] <= 255)
            user_task[m2++] = i;
    }
    system_task[m1] = -1;
    user_task[m2] = -1;
    for (int i = 0; i<m1 - 1; i++)
        for (int j = i + 1; j<m1; j++)
        {
            if (task[system_task[i]]>task[system_task[j]])
            {
                temp = system_task[i];
                system_task[i] = system_task[j];
                system_task[j] = temp;
            }
        }
    for (int i = 0; i<m2 - 1; i++)
        for (int j = i + 1; j<m2; j++)
        {
            if (task[user_task[i]]>task[user_task[j]])
            {
                temp = user_task[i];
                user_task[i] = user_task[j];
                user_task[j] = temp;
            }
        }
    for(int i=0; i<m2-1; i++)
    {
        if (task[user_task[i]]==task[user_task[i+1]]&&user_task[i+1]<user_task[i])
        {
            temp = user_task[i];
            user_task[i] = user_task[i+1];
            user_task[i+1] = temp;
        }
    }
    for(int i=0; i<m1-1; i++)
    {
        if (task[system_task[i]]==task[system_task[i+1]]&&system_task[i+1]<system_task[i])
        {
            temp = system_task[i];
            system_task[i] = system_task[i+1];
            system_task[i+1] = temp;
        }
    }
    if(system_task[0]==-1)
        cout<<"none";
    else
    {
        for (int i = 0; system_task[i] != -1; i++)
            cout << system_task[i] << " ";
    }
    cout<<endl;
    if(user_task[0]==-1)
        cout<<"none";
    else
    {
        for (int i = 0; user_task[i] != -1; i++)
            cout << user_task[i] << " ";
    }
}
int main()
{
    vector<int>A;
    int a[256],b[256];
    int num,len=0;
    string temp;
    getline(cin,temp);
    stringstream input(temp);
    while(input>>num)
    {
        A.push_back(num);
        len++;
    }
    for(int i=0; i<A.size(); i++)
    {
        cout<<'('<<i<<','<<A[i]<<')';
        if(i<A.size()-1)
            cout<<',';
    }
    cout<<endl<<endl;
    Schedule(A,a,b);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨骅麟(Patrick Young)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值