其实这是很久之前写的一个程序,现在已经面试笔试完了,发现还有一个没发的,发过来
-
/********************************************************
-
3.操作系统任务调度问题。
-
操作系统任务分为系统任务和用户任务两种。
-
其中,系统任务的优先级 < 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[])
-
************************************************************/
-
-
/*
-
void scheduler(int task[], int n, int system_task[], int user_task[])
-
*/
-
-
#include<stdio.h>
-
/*************************************************
-
编程思路:
-
一.将task数组内容复制过来(一般都这么用),对数组B进行排序,并将下标储存在相同数组大小的一个数组tmp中
-
二.按找优先级的顺序进行归类,并通过相同下标在数组tmp中找到原先的task的下标值
-
具体的方法是用数组B和原先的数组task比较,有元素相同,那么下标放在数组tmp中
-
三.赋值,并长度自加
-
四.最后一位赋予-1
-
**************************************************/
-
void scheduler(int task[], int n, int system_task[], int user_task[]);
-
void swap(int *, int *);
-
-
-
void swap(int *p1, int *p2)
-
{
-
int tmp;
-
tmp = *p1;
-
*p1 = *p2;
-
*p2 = tmp;
-
}
-
-
void scheduler(int task[], int n, int system_task[], int user_task[])
-
{
-
int task_len, system_len, user_len, i, j, min;
-
-
-
int *task_b = (int *)malloc(sizeof(int) * n);
-
int *tmp = (int *)malloc(sizeof(int) * n);
-
-
-
memcpy(task_b, task, sizeof(int)*n);
-
-
system_len = user_len = 0;
-
-
-
for(i = 0; i < n - 1; i++)
-
{
-
min = i;
-
-
for(j = i + 1; j < n; j++)
-
if(task_b[j] < task_b[min])
-
min = j;
-
if(min != i)
-
swap(&task_b[i], &task_b[min]);
-
}
-
-
for(i = 0; i < n; i++)
-
{
-
for(j = 0; j < n; j++)
-
if(task_b[i] == task[j])
-
{
-
tmp[i] = j;
-
continue;
-
}
-
}
-
-
for(i = 0; i < n; i++)
-
{
-
if(task_b[i] < 55)
-
{
-
system_task[system_len] = tmp[i];
-
system_len++;
-
}
-
if(task_b[i] >= 55 && task_b[i] <=255)
-
{
-
user_task[user_len] = tmp[i];
-
user_len++;
-
}
-
}
-
-
system_task[system_len] = -1;
-
user_task[user_len] = -1;
-
-
free(task_b);
-
free(tmp);
-
}
-
-
int main(int argc, char **argv)
-
{
-
int i;
-
int system_task[10] = {0};
-
int user_task[10] = {0};
-
-
int task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99};
-
-
scheduler(task, 9, system_task, user_task);
-
-
for(i = 0; i < 10; i++)
-
{
-
printf("system_task[%d] = %d\n", i,system_task[i]);
-
}
-
-
for(i = 0; i < 10; i++)
-
{
-
printf("user_task[%d] = %d\n", i, user_task[i]);
-
}
-
-
while(1);
-
}
阅读(1347) | 评论(0) | 转发(0) |