操作系统对系统任务和用户任务调度问题
2014-04-11 12:56
351 查看
操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task[] 中的任务按照系统任务用户任务依次存放到 system_task[]数组和 user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,优先级相同的任务按照入//队顺序排列(即先入队的任务排在前面),数组元素为-1表示结束。例如:
task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99} system_task[] = {0, 3, 1, 7, -1} user_task[] = {4, 8, 2, 6, -1}
函数接口 void scheduler(int task[], int n, int system_task[], int user_task[])
task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99} system_task[] = {0, 3, 1, 7, -1} user_task[] = {4, 8, 2, 6, -1}
函数接口 void scheduler(int task[], int n, int system_task[], int user_task[])
#include <stdio.h> #include <stdlib.h> void printfdata(int data[], int n){ int i; printf("\n"); for(i = 0; i < n; i++){ printf("%d\t", data[i]); } printf("\n"); } /** 对数组排序,然后将在原来task中对应的下标(即index数组中的内容)存入input数组中。 首先按input数组中的内容做排序,排序时改变对应的index数组中的值,保证input[i]中的值在原来task中的下标对应于index[i] 用bubble排序好后(注意index也对应排序) 将index数组中的内容对应存储到input中。 注意:n为数组的大小,即数组中元素的个数 */ void bubblesort(int input[],int n, int index[]){ //将input数组按从小到大排列,index存储在原来数组中对应的下标 int i, j; int temp; for(i = 0; i < n; i++){ for(j = i+1; j < n; j++){ if(input[i] > input[j]){ //交换input中的元素 temp = input[i]; input[i] = input[j]; input[j] = temp; //交换数组下标 temp = index[i]; index[i] = index[j]; index[j] = temp; } } } //将input数组存储换成元素的下标,其原来的数据仅作为排序使用,排序过后,应该将对应的下标存入,即对应的index数组中的值 for(i = 0; i < n; i++){ input[i] = index[i]; } } void scheduler(int task[], int n, int system_task[], int user_task[]){ int i; int sys_i = 0, user_i = 0; int *sys_index = (int *)malloc((n + 1) * (sizeof(int))); int *user_index = (int *)malloc((n + 1) * (sizeof(int))); while((task == NULL) || (system_task == NULL) || (user_task == NULL)){ return ;//不符合要求返回 } for(i = 0; i < n; i++){ if((task[i] >= 0) && (task[i] <= 255)){ if(task[i] < 50){ //系统任务 system_task[sys_i] = task[i]; sys_index[sys_i] = i;//记住在task数组中的下标 sys_i++; }else{ //用户任务 user_task[user_i] = task[i]; user_index[user_i] = i;//记住在task数组中的下标 user_i++; } } } /** 输出用于过程检验 */ printf("输出中间结果,用于检验:\n"); printfdata(system_task, sys_i); printfdata(user_task, user_i ); printfdata(sys_index, sys_i); printfdata(user_index, user_i); //排序 bubblesort(system_task, sys_i , sys_index);//sys_i对应数组元素的个数 bubblesort(user_task, user_i , user_index); system_task[sys_i] = -1; user_task[user_i] = -1; } void main(){ int task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99}; int sys_task[9]; int user_task[9]; int i = 0; scheduler(task, 9, sys_task, user_task); printf("输出原来的task数组:\n"); printfdata(task, 9); printf("输出结果:\n"); printf("sys_task数组:\n"); while(sys_task[i] != -1){ printf("%d\t", sys_task[i]); i++; } printf("%d\t", sys_task[i]); printf("\n"); printf("user_task数组:\n"); i = 0; while(user_task[i] != -1){ printf("%d\t", user_task[i]); i++; } printf("%d\t", user_task[i]); printf("\n"); getchar(); }
相关文章推荐
- 面试题:操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。
- 操作系统任务调度问题
- 【数据结构练习】系统任务调度问题
- 华为2014校园招聘软件编程题:操作系统任务调度问题
- [华为机试真题]72.操作系统任务调度问题
- linux系统用户下的crontab任务不执行问题处理
- 【华为机试题】操作系统任务调度问题
- 华为机试——操作系统任务调度问题
- 华为一道机试题-操作系统任务调度问题
- 华为机试——操作系统任务调度问题
- 操作系统任务调度问题
- QNX操作系统优先级以及调度策略-qnx系统调度策略-任务切换方法
- 算法-操作系统任务调度问题
- 华为技术——操作系统任务调度问题
- 华为机试——03操作系统任务调度问题
- linux系统用户下的crontab任务不执行问题处理
- 华为招聘机试整理8:操作系统任务调度问题
- 华为机试——03操作系统任务调度问题
- 操作系统任务调度问题
- linux系统用户下的crontab任务不执行问题处理