作業系統任務調度問題(華為一上機題,自己寫的答案)

來源:互聯網
上載者:User

#include<stdio.h>#include<malloc.h>#include<string.h>#define OVERFLOW                     -1#define OK                            1#define ERROR                         0#define FALSE                         0#define SYS_USR_TASK_THRESHOLD       50#define INVALID_TASK_THRESHOLD       255                     typedef int ElemType;typedef int Status;typedef struct LNode{ElemType task_prior;ElemType task_id;struct LNode *next;}LNode,*LinkList;Status InitList(LinkList &head){head = (LinkList)malloc(sizeof(LNode));if(!head) return OVERFLOW;head -> next = NULL;return OK;}int ListLength(LinkList head){int length = 0;LinkList p;p = head -> next;while(p){++length;p = p -> next;}return length;}LinkList GetElemP(LinkList head,int i){LinkList p;int j;p = head;for(j = 1; j <= i; ++j){p = p -> next;}return p;}Status ListInsert(LinkList &head, int i, ElemType task_prior, ElemType task_id){LinkList s, p;if(i < 0 || i > ListLength(head) + 1)return ERROR;s = (LinkList)malloc(sizeof(LNode));if(!s) return OVERFLOW;p = GetElemP(head, i - 1);s -> next = p -> next;p -> next = s;s -> task_prior = task_prior;s -> task_id    = task_id;return OK;}Status BubbleSort(LinkList &head){LinkList p, q, endpt, tmp;for(endpt = NULL; endpt != head; endpt = q){for(q = tmp = head; tmp -> next -> next != endpt ; tmp = tmp -> next){if(tmp -> next -> task_prior > tmp -> next -> next -> task_prior){p = tmp -> next -> next;tmp -> next -> next = p -> next;p -> next = tmp -> next;tmp -> next = p;q = tmp -> next -> next;}}}return OK;}void scheduler(int task[], int n, int system_task[], int user_task[]){int i, j;LinkList head, p;InitList(head);for (i = 1; i <= n; ++i){ListInsert(head, i, task[i-1], i-1);}BubbleSort(head);i = 0;j = 0;p = head -> next;while(p){if(p -> task_prior < SYS_USR_TASK_THRESHOLD && p -> task_prior >= 0){system_task[i++] = p -> task_id;}else if(p -> task_prior <= INVALID_TASK_THRESHOLD){user_task[j++] = p -> task_id;}else{printf("Invalid task is task%d\n",p -> task_id);}p = p -> next;}system_task[i] = -1;user_task[j] = -1;}void TraverseArray(int array[],void(* visit)(int)){int i;for(i = 0; array[i] != -1; ++i)visit(array[i]);printf("\n");}void print(int data){printf("%d ", data);}int main(){int task[] ={0, 30, 155, 1, 80, 300, 170, 40, 99};int system_task[9] = {-1};int user_task[9] = {-1};int n = 9;scheduler(task, n, system_task, user_task);printf("system_task is \n");TraverseArray(system_task, print);printf("user_task is \n");TraverseArray(user_task, print);return 0;}

作業系統任務調度問題。作業系統任務分為系統任務和使用者任務兩種。其中,系統任務的優先順序 < 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[])


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.