操作系统任务调度问题

操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 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[])

 

 1 #include<stdio.h>
 2 void scheduler(int task[], int n, int system_task[], int user_task[])
 3 {
 4     int *x = new int[n];
 5     int i,j,k;
 6     for (i=0; i < n; i++)
 7         x[i] = i;
 8     for (i=0; i < n-1; i++)
 9         for (j=1; j < n-i; j++)
10         if (task[j-1] > task[j])
11         {
12             int t = task[j-1];
13             task[j-1] = task[j];
14             task[j] = t;
15             t = x[j-1];
16             x[j-1] = x[j];
17             x[j] = t;
18         }
19     for (int i=0; i < n; i++)
20         printf("%d ",task[i]);
21     printf("\n");
22     j = 0;
23     k = 0;
24     for (i=0; i < n; i++)
25     {
26         if(task[i] < 50)
27             system_task[j++] = x[i];
28         else if (task[i] <= 255)
29             user_task[k++] = x[i];
30         else ;
31     }
32     system_task[j] = -1;
33     user_task[k] = -1;
34 }
35 int main()
36 {
37     int task[100],sys[100],user[100],n;
38     scanf("%d",&n);
39     for (int i=0; i < n; i++)
40         scanf("%d",&task[i]);
41     scheduler(task,n,sys,user);
42     for (int i=0; sys[i] != -1; i++)
43         printf("%d ",sys[i]);
44     printf("\n");
45     for (int i=0; user[i] != -1; i++)
46         printf("%d ",user[i]);
47     printf("\n");
48 
49 }

 

posted @ 2014-08-26 00:24  george_cw  阅读(267)  评论(0编辑  收藏  举报