華為一道機試題 作業系統任務排程問題

2021-05-28 05:47:13 字數 1409 閱讀 1916

作業系統任務排程問題。作業系統任務分為系統任務和使用者任務兩種。其中,系統任務的優先順序 < 50,使用者任務的優先順序 >= 50且 <= 255。優先順序大於255的為非法任務,應予以剔除。現有一任務佇列task,長度為n,task中的元素值表示任務的優先順序,數值越小,優先順序越高。函式scheduler實現如下功能,將task 中的任務按照系統任務、使用者任務依次存放到 system_task 陣列和 user_task 陣列中(陣列中元素的值是任務在task 陣列中的下標),並且優先順序高的任務排在前面,優先順序相同的任務按照入隊順序排列(即先入隊的任務排在前面),陣列元素為-1表示結束。

例如:task =     system_task =     user_task =

函式介面    void scheduler(int task, int n, int system_task, int user_task)

此題有多種解法,一種是是在task陣列中查詢最小、次最小直到最小的數的下標,一次放入system_task和user_task陣列。但此中解法控制點稍微多了些,一不小心,就在某個邏輯處出錯。還有一種解法是依次從task陣列中取數,按照插入排序的方法插入到system_task和user_task陣列,此解法非常明了,而且相當邏輯上也相當容易控制。最後一種解法就是把task陣列的數放入拷貝到乙個結構體陣列裡,對這個結構體陣列進行排序,然後從排好的結構體陣列中依次取最小數的下標放入對應的system_task和user_task陣列中。

下面是插入法的**:

void main()

; int n = sizeof(task)/sizeof(int);

int *system_task = new int [n + 1];

int *user_task = new int [n + 1];

scheduler(task, n, system_task, user_task);

taskprint( system_task, user_task, n + 1);

}void scheduler(int task, int n, int system_task, int user_task)

else

break;

}system_task[j+1] = i;

} else if(current >= 50 && current <= 255)

else

break;

}user_task[j + 1] = i;

} }system_task[syscount] = -1;

user_task[usercount] = -1;

}void taskprint(int system_task, int user_task, int n)

for(i = 0 ; i < n; i++)

}

華為機試題 作業系統任務排程問題

作業系統任務排程問題。作業系統任務分為系統任務和使用者任務兩種。其中,系統任務的優先順序 50,使用者任務的優先順序 50且 255。優先順序大於255的為非法任務,應予以剔除。現有一任務佇列task,長度為n,task中的元素值表示任務的優先順序,數值越小,優先順序越高。函式scheduler實現...

華為應聘機試題 「作業系統排程」

作業系統任務排程問題。作業系統任務分為系統任務和使用者任務兩種。其中,系統任務的優先順序 50,使用者任務的優先順序 50且 255。優先順序大於255的為非法任務,應予以剔除。現有一任務佇列task,長度為n,task中的元素值表示任務的優先順序,數值越小,優先順序越高。函式scheduler實現...

華為機試題 任務排程問題

作業系統任務排程問題。作業系統任務分為系統任務和使用者任務兩種。其中,系統任務的優先順序 50,使用者任務的優先順序 50且 255。優先順序大於255的為非法任務,應予以剔除。現有一任務佇列task,長度為n,task中的元素值表示任務的優先順序,數值越小,優先順序越 高。函式scheduler實...