作業系統任務排程問題。作業系統任務分為系統任務和使用者任務兩種。其中,系統任務的優先順序 < 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實...