华为软件编程题:操作系统任务调度问题

1 /* scheduler.cpp 2 * 操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。 3 * 其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。 4 * 优先级大于255的为非法任务,应予以剔除。现有一任务队列task[], 5 * 长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。 6 * 函数scheduler实现如下功能,,将task[] 中的任务按照系统任务、用户任务 7 * 依次存放到 system_task[] 数组和 user_task[] 数组中 8 * (数组中元素的值是任务在task[] 数组中的下标), 9 * 并且优先级高的任务排在前面,数组元素为-1表示结束。#include <stdio.h> 13 #include <stdlib.h> 14 #include <string.h>N 100scheduler(int task[], int n, int system_task[], int user_task[]) 19 { 20if (task == NULL || n < 0 || system_task == NULL || user_task == NULL) 21 {); 23return; 24 } 25int i = 0, j = 0, k = 0; 26int temp = 0; (i = 0; i < n; i++) 29 { 30system_task[i] = i; 31 } 32memset(user_task, 0xff, n * sizeof(int)); Use bubble sort to order task[] from small to large(i = 0; i < n – 1; i++) 37 { 38for (j = 0; j < n – 1 – i; j++) 39 { 40if (task[j] > task[j + 1]) 41 { 42temp = task[j + 1]; 43task[j + 1] = task[j]; 44task[j] = temp; 45 46temp = system_task[j + 1]; 47system_task[j + 1] = system_task[j]; 48system_task[j] = temp; 49 } 50 } 51 }(i = 0, j = 0, k = 0; i < n; i++) 55 { 56if (task[i] >= 0 && task[i] < 50) 57 { 58system_task[j] = system_task[i]; 59if (i > j) 60 { 61system_task[i] = -1; 62 } 63j++; 64 }(task[i] >= 50 && task[i] <= 255) 66 { 67user_task[k] = system_task[i]; 68system_task[i] = -1; 69k++; 70 }{, task[i]); 74system_task[i] = -1; 75 } 76 } 77 } main() 80 { 81int n = 0; 82int i = 0; , N); , &n); 85if (n > N || n < 0) 86 {); ; 89 }*task = (int *)malloc(n * sizeof(int)); 92int *system_task = (int *)malloc(n * sizeof(int)); 93int *user_task = (int *)malloc(n * sizeof(int)); ); 96for (i = 0; i < n; i++) 97 {, &task[i]); 99 }100 101 scheduler(task, n, system_task, user_task); ); 104for (i = 0; i < n; i++)105 {106if (system_task[i] == -1)107 {108break; 109 }{, system_task[i]); 113 }114 }); ); 118for (i = 0; i < n; i++)119 {120if (user_task[i] == -1)121 {122break; 123 }{, user_task[i]); 127 }128 }); 130 131 delete []task, system_task, user_task; ; 133 }#include <stdio.h>136 //#include <string.h>137 //#include <malloc.h>138 //#include <iostream>void scheduler(int task[], int n, int system_task[], int user_task[])141 //{142 // int i; 143 // int j = 0; 144 // int *p, *pp, *p_user, *pp_user; 145 // int index = 0; 146 // int count, count2; 147 // int min = 0; 148 // int k = 0; 149 // p = (int *)malloc(sizeof(int) * n); 150 // for (i = 0; i < n; i++)151 // {152 //p[i] = 0; 153 // }154 // pp = (int *)malloc(sizeof(int) * n); 155 // for (i = 0; i < 0; i++)156 // {157 //pp[i] = 0; 158 // }159 // p_user = (int *)malloc(sizeof(int) * n); 160 // for (i = 0; i < n; i++)161 // {162 //p_user[i] = 0; 163 // }164 // pp_user = (int *)malloc(sizeof(int) * n); 165 // for (i = 0; i < n; i++)166 // {167 //pp_user[i] = 0; 168 // } for (i = 0; i < n; i++)171 // {172 //if (task[i] < 50)173 //{174 //system_task[j] = task[i]; 175 //pp[j] = i; 176 //j++; 177 //count = j; 178 //}179 //else if (task[i] <= 255)180 //{181 //user_task[k] = task[i]; 182 //pp_user[k] = i; 183 //k++; 184 //count2 = k; 185 //}186 //else 187 //{Is this line necessary?189 //task[i] = task[i]; 190 //}191 // } for (i = 0; i < count; i++)194 // {“%3d” and “%d “(with a blank behind %d), which is better?196 //printf(“%3d”, system_task[i]); 197 // }198 // printf(“\n”); for (i = 0; i < count; i++)201 // {202 //min = system_task[0]; 203 //for (j = 1; j < count; j++)204 //{205 //if (system_task[j] < min)206 //{207 //min = system_task[j]; 208 //p[i] = j; 209 //}210 //}211 //system_task[p[i]] = 51; 212 // } pp[count] = -1; 215 // for (i = 0; i < count; i++)216 // {217 //printf(“%3d”, pp[p[i]]); 218 // }219 // printf(“%3d\n”, pp[count]); then deal with user_task222 // for (i = 0; i < count2; i++)223 // {224 //printf(“%4d”, user_task[i]); 225 // }226 // printf(“\n”); for (i = 0; i < count2; i++)229 // {230 //min = user_task[0]; 231 //for (j = 1; j < count2; j++)232 //{233 //if (user_task[j] < min)234 //{235 //min = user_task[j]; 236 //p_user[i] = j; 237 //}238 //}239 //user_task[p_user[i]] = 256; 240 // } pp_user[count2] = -1; 243 // for (i = 0; i < count2; i++)244 // {245 //printf(“%4d”, pp_user[p_user[i]]); 246 // }247 // printf(“%3d\n”, pp_user[count2]); 248 //}int main()251 //{252 // int task[9] = {0, 30, 155, 1, 80, 300, 170, 40, 99}; 253 // int system_task[9] = {0}; 254 // int user_task[9] = {0}; 255 // scheduler(task, 9, system_task, user_task); 256 // return 0; 当你能飞的时候就不要放弃飞

华为软件编程题:操作系统任务调度问题

相关文章:

你感兴趣的文章:

标签云: