操作系统任务调度问题
操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级<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}
几组测试用例如下:
操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级<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[])
C代码如下:
#include<stdio.h>
#include<stdlib.h>
void scheduler(int task[], int n, int system_task[], int user_task[]);
void display(int array[], int n);
int main()
{
int task[] = {0,30,155,1,80,300,170,40,99};
int n = sizeof(task)/sizeof(task[0]);
int* system_task = (int*)malloc(n*sizeof(int));
int* user_task = (int*)malloc(n*sizeof(int));
printf("the original tasks:\n");
display(task,n);
scheduler(task,n,system_task,user_task);
return 0;
}
void scheduler(int task[], int n, int system_task[], int user_task[])
{
int* sort_task = (int*)malloc(n*sizeof(int));
int* flag = (int*)malloc(n*sizeof(int));
int i,j,temp;
int system_index = 0;
int user_index = 0;
for(i=0; i<n; i++)
sort_task[i] = task[i];
for(i=0; i<n; i++)
for(j=0; j<n-1-i; j++)
if(sort_task[j] > sort_task[j+1])
{
temp = sort_task[j];
sort_task[j] = sort_task[j+1];
sort_task[j+1] = temp;
}
printf("after sort:\n");
display(sort_task,n);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(sort_task[i] == task[j])
{
flag[i] = j;
break;
}
}
}
for(i=0; i<n; i++)
{
if(sort_task[i] < 55)
system_task[system_index++] = flag[i];
if(sort_task[i] >= 55 && sort_task[i] <= 255)
user_task[user_index++] = flag[i];
}
system_task[system_index++] = -1;
user_task[user_index++] = -1;
printf("after scheduling:\n");
printf("system tasks: ");
display(system_task,system_index);
printf("user tasks: ");
display(user_task,user_index);
}
void display(int array[], int n)
{
int i;
for(i=0; i<n; i++)
printf("%d ",array[i]);
printf("\n");
}
几组测试用例如下: