搶佔式和非搶佔式核心
作為作業系統的基本構建塊,核心控制著涉及 CPU、記憶體和輸入/輸出裝置的操作。這些資源根據核心的排程機制分配給各種任務或程序。
核心是作業系統中最關鍵的元件,負責管理系統資源並向用戶程式提供服務。作業系統設計人員必須做出的重要選擇之一是使用搶佔式核心還是非搶佔式核心。
搶佔式核心是指可以在正在執行的程序中間切換到另一個程序,而無需正在執行的程序的同意。因此,核心能夠終止任何當前正在執行的程序,並將它的資源切換到正在等待執行的程序。搶佔式核心中的排程程式負責選擇哪個程序接下來獲取 CPU。即時作業系統通常使用搶佔式核心,在這些系統中,確保程序滿足其截止日期至關重要。
搶佔式和非搶佔式核心的比較
核心使用兩種不同的排程演算法:搶佔式和非搶佔式。在搶佔式核心中,作業系統可以暫停當前正在執行的程序,以便將 CPU 提供給優先順序更高的任務。這種方法可以實現更好的響應能力和資源管理,但它也可能導致更高的開銷,並可能導致系統整體效能下降。
相反,非搶佔式核心允許正在執行的作業保留 CPU,直到它主動釋放處理器。這種方法可以減少開銷並提高系統吞吐量,但它也可能導致響應速度緩慢,並可能導致低優先順序程序被餓死。
作業系統或核心的核心元件,控制系統資源並提供程式可以執行的平臺。排程程式是核心的一部分,負責將 CPU 時間分配給程序。
程序排程是搶佔式和非搶佔式核心之間的主要區別。
在搶佔式核心中,排程程式可以停止正在執行的程序,以便為另一個程序騰出空間。因此,如果排程程式決定另一個程序具有更高的優先順序,它可能會決定搶佔當前程序。這可能是由定時器中斷或更高優先順序任務就緒引起的。相反,非搶佔式核心不允許排程程式中斷正在執行的程序。相反,另一個程序必須主動放棄對 CPU 的控制才能執行。
搶佔式與非搶佔式排程演算法
搶佔式和非搶佔式核心都可以與各種排程演算法一起使用。要使用的排程演算法取決於系統的特定需求以及它預期處理的工作負載。下面列出了一些最常用的排程演算法的特性:
先到先服務 (FCFS)
FCFS 是一種非搶佔式排程機制,按照程序到達的順序將 CPU 時間分配給程序。這意味著第一個到達的程序將首先獲得 CPU 時間。FCFS 的主要優點是它簡單易於實現。但是,如果第一個程序需要很長時間才能完成,它可能會導致後續程序的等待時間過長。
最短作業優先 (SJF)
FCFS 是一種非搶佔式排程機制,按照程序到達的順序將 CPU 時間分配給程序。這意味著第一個到達的程序將首先獲得 CPU 時間。FCFS 的主要優點是它簡單易於實現。但是,如果第一個程序需要很長時間才能完成,它可能會導致後續程序的等待時間過長。
輪循 (RR)
RR 是一種搶佔式排程演算法,它以固定的時間片將 CPU 時間分配給程序。排程程式為每個程序提供一定量的時間來完成其工作,然後繼續執行佇列中的下一個程序。RR 的主要優點是它確保所有程序公平地分配 CPU 時間,並且可以減少低優先順序任務的等待時間。然而,頻繁的上下文切換也可能導致過高的開銷。
優先順序排程
優先順序排程是一種排程方法,根據程序的重要性或緊急程度為程序分配不同的優先順序。對於即時應用程式或關鍵任務系統,高優先順序程序在低優先順序程序之前獲得 CPU 時間。優先順序排程可以使用搶佔式或非搶佔式核心來實現。
優點和缺點
與非搶佔式核心相比,搶佔式排程演算法和核心具有一些優點。搶佔式排程的主要優點是它可以確保高優先順序程序在需要時獲得 CPU 時間。這對於即時系統至關重要,因為處理延遲可能產生負面影響。此外,搶佔式排程可以透過要求程序在預定的時間段後放棄對 CPU 的控制來幫助防止程序獨佔 CPU。這可以改善整體系統效能並減少由於資源耗盡導致崩潰的可能性。
但是,搶佔式排程也可能存在一些明顯的缺點。一個主要的缺點是它可能導致高開銷,因為頻繁的上下文切換。上下文切換是儲存一個正在執行的程序的狀態並在載入下一個程序的狀態時執行的時間和資源密集型操作。如果系統包含許多頻繁搶佔的程序,這可能成為一個問題。
非搶佔式核心和排程演算法也各有優缺點。由於排程程式不需要暫停正在執行的程序,因此非搶佔式排程可以減少上下文切換的開銷。非搶佔式排程也可能比搶佔式排程更簡單易於實現。
然而,非搶佔式排程也可能導致低優先順序程序的等待時間更長,這會對整個系統的效能產生負面影響。此外,它不能保證高優先順序程序在需要時獲得 CPU 時間。
現實世界中的例子
一些現實世界的作業系統根據其特定需求使用搶佔式和非搶佔式排程方法。例如,Windows 使用基於優先順序的排程演算法和搶佔式核心來根據程序的重要性對程序進行優先順序排序。此外,Linux 使用搶佔式核心和多種排程演算法,例如基於優先順序的排程程式和輪循排程程式。
相反,早期的 macOS 版本使用協作式多工處理和非搶佔式核心,需要程式自願放棄 CPU 控制。當前版本的 macOS 使用混合排程方法,結合了基於優先順序和時間片切分的排程,使用搶佔式核心。
結論
總之,是使用搶佔式核心和排程演算法還是非搶佔式核心和排程演算法取決於系統的特定需求以及它預期處理的工作負載。搶佔式排程可以確保高優先順序程序在需要時獲得 CPU 時間,但可能會導致頻繁的上下文切換導致高開銷。非搶佔式排程可以減少開銷,但也會導致低優先順序程序的等待時間更長。這兩種型別的排程演算法在現實世界的作業系統中都很常見,因此,在開發作業系統時,開發人員必須仔細權衡每種演算法的優缺點。