歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux選擇下一個進程

Linux選擇下一個進程

日期:2017/2/28 16:17:24   编辑:Linux教程

在Linux的schedule中, 首先調用sched_find_first_bit(array->bitmap)發現優先級queue, 通常運行隊列array->bitmap的相應位在enqueue_task時被設置, 在dequeue_task時被清除,然後選擇該運行隊列的優先級queue的next(即該queue的第一個)。當next被選擇以後, 除非是FIFO類型的實時進程, 否則該next都會被重新放到運行隊列的隊尾。

對於同一優先級實時進程和普通進程, 在同一個運行隊列中(同一個cpu中), 先創建的進程先運行。 如果不在同一個cpu中(運行隊列中), 不能保證先創建的進程先運行。

在同一運行隊列中的優先級高的進程先運行, 但不同cpu上的兩個進程,不論優先級如何, 誰先執行是不能保證的。也就是說:如果進程創建多個即使是FIFO屬性的子進程或者線程, 但不能保證他們在同一個運行隊列上, 則不能保證先創建的子進程或者線程先運行。

注意對於線程, call pthread_cancel(), 則只有當線程已經運行了, 才能被cancel。

至於新創建的進程插在運行隊列的什麼位置, 看Linux kernel 的page122.

Copyright © Linux教程網 All Rights Reserved