實時操作系統與分時操作系統(或稱非實時操作系統)的區別

2020-08-11 16:46:43

1. 什麼是實時操作系統?

      實時操作系統(RTOS)是指當外界事件或數據產生時,能夠接受並以足夠快的速度予以處理,其處理的結果又能在規定的時間之內來控制生產過程或對處理系統作出快速響應,並控制所有實時任務協調一致執行的操作系統。其特點是及時響應和高可靠性。實時系統又分爲硬實時系統和軟實時系統,硬實時系統要求在規定的時間內必須完成操作,這是在操作系統設計時保證的;軟實時則只要按照任務的優先順序,儘可能快地完成操作即可。

2. 什麼是分時操作系統?

使一臺計算機同時爲幾個、幾十個甚至幾百個使用者服務的一種操作系統。把計算機與許多終端使用者連線起來,分時操作系統將系統處理機時間與記憶體空間按一定的時間間隔,輪流地切換給各終端使用者的程式使用(時間片的概念)。由於時間間隔很短,每個使用者的感覺就像他獨佔計算機一樣。

3. 實時操作系統需要滿足哪些特徵?

多工:由於真實世界的事件的非同步性,能夠執行許多併發進程或任務是很重要的。多工提供了一個較好的對真實世界的匹配,因爲它允許對應於許多外部事件的多執行緒執行。系統內核分配CPU給這些任務來獲得併發性。
搶佔排程:真實世界的事件具有繼承的優先順序,在分配CPU的時候要注意到這些優先順序。基於優先順序的搶佔排程,任務都被指定了優先順序,在能夠執行的任務(沒有被掛起或正在等待資源)中,優先順序最高的任務被分配CPU資源。換句話說,當一個高優先順序的任務變爲可執行態,它會立即搶佔當前正在執行的較低優先順序的任務。
任務間的通訊與同步:在一個實時系統中,可能有許多工作爲一個應用的一部分執行。系統必須提供這些任務間的快速且功能強大的通訊機制 機製。內核也要提供爲了有效地共用不可搶佔的資源或臨界區所需的同步機制 機製。
任務與中斷之間的通訊:儘管真實世界的事件通常作爲中斷方式到來,但爲了提供有效的排隊、優先化和減少中斷延時,我們通常希望在任務級處理相應的工作。所以需要在任務級和中斷級之間存在通訊。

4. 分時操作系統需要滿足哪些特徵?

   互動性:使用者與系統進行人機對話。 
   多路性:多使用者同時在各自終端上使用同一CPU。 
   獨立性:使用者可彼此獨立操作,互不幹 不乾擾,互不混淆。 
   及時性:使用者在短時間內可得到系統的及時回答。 

5. 實時操作系統主要應用領域

主要應用於過程控制、數據採集、通訊、多媒體資訊處理等對時間敏感的場合。例如:機器人的運動控制、無人駕駛等。

6. 分時操作系統主要應用領域

現在流行的PC,伺服器都是採用這種執行模式,即把CPU的執行分成若幹時間片分別處理不同的運算請求。

在介紹這兩個概念之前要先介紹一下操作系統內核中的「執行緒排程器」

這裏就拿Linux內核來做舉列
在Linux內核中有一個scheduler執行緒排程器,有特殊的演算法來挑選執行緒,專門用來給執行在虛擬記憶體管理模式下的執行緒分配CPU控制權的
那麼先來介紹一下介紹一下scheduler是如何排程執行緒的
在目前的Linux內核(包括以往的歷史版本)中scheduler使用的是時間片輪轉的方法來排程執行緒的。
時間片輪轉:
假如我們記憶體中載入了三個進程且在單核CPU的情況下,分別是兩個進程,四個執行緒
在这里插入图片描述
當進程被載入到記憶體中時會有一個PCB控制塊裏面這個過程控制塊是一個結構體,存在與該進程空間下
過程控制塊裡有一個成員變數用來表示該進程的優先順序,scheduler會根據優先順序優先選擇優先順序較高的進程挑選進程下的執行緒獲得CPU控制權,0爲最高優先順序,Upper limit(該值可在Linux內核的宏定義中修改)爲最低,但是在時間片輪轉排程機制 機製下的Linux內核這個優先順序是無效的,因爲如果優先順序過高那些優先順序較低的程式永遠也別想被執行到,這就不符合多工的概唸了。
所以在基於時間片輪轉的排程機制 機製下的Linux內核在進程被載入時會給PCB控制塊的優先順序成員變數分配一個值0,這樣優先順序就都平等了,基於演算法根據進程執行狀態挑選出合適的進程在通過過程控制塊得到該進程下有多少個執行緒,並通過執行緒控制塊(TCB)得出每個執行緒的執行狀態,在通過特殊演算法爲執行緒分配時間,假如說進程A下的執行緒B獲取到了CPU的控制權,那麼scheduler會通過特殊演算法給它分配一定的時間一般爲10毫秒,這是linux爲了確保不會影響其它執行緒的執行而分配的最合理的時間。
在这里插入图片描述
當該執行緒在執行的同時scheduler也不會閒它會去計算下需要排程的執行緒,當執行緒A的時間到了的時候scheduler會強行將該執行緒的控制權奪回來,假如說scheduler計算的下一個需要排程的執行緒是進程B下的執行緒B那麼scheduler會把優先權給進程B下的執行緒B,以此回圈,scheduler不會直接中斷會記錄一個數據知道該執行緒執行到那一步了,當又輪到該執行緒執行時scheduler會讀取該執行緒上一次的執行狀態並調整CPU程式碼暫存器的指向!
在这里插入图片描述
不僅Linux是這樣包括Windows和Mac操作系統下的執行緒排程器均採用時間片輪轉的方法,由於Linux內核是公開的,可以被修改發行,新墨西哥礦業及科技學院的V. Yodaiken對Linux進行修改使它關閉了爲每個進程的優先順序都分配0的方法,並且關閉了排程演算法,直接根據優先順序來選擇CPU的控制權,這樣會大大提升電腦執行速度,提升操作系統內核執行速度,因爲執行緒排程需要大量的計算(如果很多個進程那麼會更加繁瑣)執行緒執行狀態儲存等等,會極其繁瑣,這種基於優先順序的叫做優先順序排程。優先順序排程沒有時間限制,假如說A進程下的A執行緒的優先順序高其它進程下的執行緒那麼除非這個執行緒執行完畢否則會一直佔用着CPU的控制權,等該執行緒結束之後在把CPU控制權分配給優先順序較高的執行緒!

這樣的操作系統內核一般只用在專用機上,曾經就有一個操作系統比較出名,VXWORKS該操作系統內核不大,幾十個檔案,實現了:
多工排程(採用基於優先順序搶佔方式,同時支援同優先順序任務間的分時間片排程)
任務間的同步
進程間通訊機制 機製
中斷處理
定時器和記憶體管理機制 機製
適合一開始研究操作系統內核人員研究,因爲這個檔案不大結構比較簡單,不像Linux內核動不動幾十萬個.h/.c檔案根本沒辦法梳理思路。
還有一種是先來先服務的排程方式,那個執行緒先被載入就先執行那個,以此執行。也屬於實時操作系統。
一般實時操作系統用於專業領域,醫療,軍事,研究等領域。

圖解實時操作系統和非實時操作系統的區別

對於實時操作系統(RTOS)和非實時操作系統,你能分別列舉出來多少?
實時操作系統:uCOS/VxWorks/RTLinux
非實時操作系統:Linux/Windows/OSX
我也只能列舉出來這麼多了。
重點不在這裏,重點在於他們之間的區別,詳見下圖:
在这里插入图片描述
在这里插入图片描述
在上面的圖中右邊的任務優先順序高於左邊的任務,先看實時操作系統的,當優先順序更高的任務2就緒的時候,即便任務1正在執行中,也必須立刻交出CPU的使用權,就跟中斷一樣,先執行任務2,等任務2執行完或者主動掛起(sleep)讓出CPU的時候,任務1才能 纔能接着執行。

uCOS就是這樣的實時操作系統,它是可搶佔性的內核。我曾跟很多同事爭辯過uCOS高優先順序任務就緒而低優先順序任務正在執行沒有sleep的時候,高優先順序任務能否打斷低優先順序任務而立即得到執行,遺憾的是很多人仍然堅持必須要sleep才能 纔能切換任務,每次我都只能無奈的用實驗來證明這個本來不應該爭辯的東西。

再看看我們的Linux/Windows/OSX這些基於時間片輪轉的操作系統遇到這種問題的時候會怎麼樣呢,毫無疑問它們都是非實時的操作系統,CPU是不可搶佔的,從上圖可以看到,即便高優先順序的任務就緒了,也不能馬上中斷低優先順序任務而得到執行,必須要等到低優先順序任務主動掛起(sleep)或者時間片結束才能 纔能得到執行。所以我們在使用PC的時候經常會遇到應用程式無響應的問題。即硬體資源被其他任務佔用,本任務得不到立即執行。

我們平常娛樂辦公用的都是非實時的操作系統,那麼什麼時候該使用實時操作系統呢?試想一下,一個射出的導彈如果要執行一個調整姿態的任務,這個時候剛好有其他無關緊要的任務在執行,如果是非實時操作系統,那麼可能會等一會兒然後彈個窗告訴你應用程式無響應(如果它有窗可彈的話),那完了等彈窗出來導彈都射到外太空去了!毫無疑問這種高優先順序任務片刻都不能等的裝置就必須上實時操作系統,如果你不想你的導彈射到外太空去的話。