• 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

    void Schedule(vector &A, SqQueue &system_task, SqQueue &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 

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. using namespace std;
    9. void Schedule(vector<int>task, int system_task[],int user_task[])
    10. {
    11. int m1 = 0, m2 = 0, temp;
    12. for (int i = 0; isize(); i++)
    13. {
    14. if (task[i] >= 0 && task[i]<50)
    15. system_task[m1++] = i;
    16. else if (task[i] >= 50 && task[i] <= 255)
    17. user_task[m2++] = i;
    18. }
    19. system_task[m1] = -1;
    20. user_task[m2] = -1;
    21. for (int i = 0; i1; i++)
    22. for (int j = i + 1; j
    23. {
    24. if (task[system_task[i]]>task[system_task[j]])
    25. {
    26. temp = system_task[i];
    27. system_task[i] = system_task[j];
    28. system_task[j] = temp;
    29. }
    30. }
    31. for (int i = 0; i1; i++)
    32. for (int j = i + 1; j
    33. {
    34. if (task[user_task[i]]>task[user_task[j]])
    35. {
    36. temp = user_task[i];
    37. user_task[i] = user_task[j];
    38. user_task[j] = temp;
    39. }
    40. }
    41. for(int i=0; i-1; i++)
    42. {
    43. if (task[user_task[i]]==task[user_task[i+1]]&&user_task[i+1]
    44. {
    45. temp = user_task[i];
    46. user_task[i] = user_task[i+1];
    47. user_task[i+1] = temp;
    48. }
    49. }
    50. for(int i=0; i-1; i++)
    51. {
    52. if (task[system_task[i]]==task[system_task[i+1]]&&system_task[i+1]
    53. {
    54. temp = system_task[i];
    55. system_task[i] = system_task[i+1];
    56. system_task[i+1] = temp;
    57. }
    58. }
    59. if(system_task[0]==-1)
    60. cout<<"none";
    61. else
    62. {
    63. for (int i = 0; system_task[i] != -1; i++)
    64. cout << system_task[i] << " ";
    65. }
    66. cout<
    67. if(user_task[0]==-1)
    68. cout<<"none";
    69. else
    70. {
    71. for (int i = 0; user_task[i] != -1; i++)
    72. cout << user_task[i] << " ";
    73. }
    74. }
    75. int main()
    76. {
    77. vector<int>A;
    78. int a[256],b[256];
    79. int num,len=0;
    80. string temp;
    81. getline(cin,temp);
    82. stringstream input(temp);
    83. while(input>>num)
    84. {
    85. A.push_back(num);
    86. len++;
    87. }
    88. for(int i=0; isize(); i++)
    89. {
    90. cout<<'('<','<')';
    91. if(isize()-1)
    92. cout<<',';
    93. }
    94. cout<
    95. Schedule(A,a,b);
    96. }

  • 相关阅读:
    数据结构模拟题[二]
    接口测试常问面试题
    模板匹配与像素统计
    吴恩达深度学习笔记——序列模型与循环神经网络(Sequence Models)
    rust学习——方法 Method
    redis中常见的问题(缓存穿透,缓存雪崩,缓存击穿,redis淘汰策略)
    初学UI会用到哪些软件?
    弘辽科技:淘宝14天降权会恢复吗?多久能恢复正常?
    ES6的异步,promise,async和await了解
    4.5每日一题(多元函数比较大小通过偏积分)
  • 原文地址:https://blog.csdn.net/Ultravioletrays/article/details/126799679