SylixOS 经得起检验的国产操作系统 (四)
內核服務
?????? SylixOS內核小巧,它提供的操作系統最基礎的服務,這些服務包括:
?????? 1.????????線程管理
?????? 2.????????協程管理
?????? 3.????????事件標志組管理
???????4.????????中斷管理
???????5.????????調度器
???????6.????????內存管理
???????7.????????消息隊列
???????8.????????計數、互斥、二值信號量
???????9.????????定時器管理
???????10.????資源回收器
???????這些最基礎的功能構成了SylixOS所有功能與服務的核心。SylixOS本身是一個實時操作系統,所以內核調度器(scheduler)使用基于優先級的搶占式調度算法,調度器調度的基本單元為線程。SylixOS永遠運行優先級最高的線程。
??????? SylixOS調度器支持緊耦合同構多處理(SMP)并且調度器調度時間復雜度為O(1),換句話說,調度器每次調度消耗的時間與需要調度的線程總數量沒有關系,即調度時間確定,這種系統適合于對時間有嚴格要求的工業與軍事系統。此調度器同樣支持同優先級線程,這些線程可按先進先出或者時間片輪轉調度算法。
??????? SylixOS線程(thread)有以下六種狀態:
??????? 1.????????初始化
??????? 2.????????就緒
??????? 3.????????運行
??????? 4.????????阻塞
??????? 5.????????僵死
??????? 6.????????停止
?????? 線程各狀態遷移順序由下圖所示:
????? 【初始化】狀態表示一個線程剛剛創建,操作系統為它分配了運行所必須的資源但是沒有將它送入調度器。此時用戶可以獲取線程句柄,選擇合適的時間啟動線程。很多操作系統的線程沒有這種狀態。SylixOS加入這種狀態主要是為了適應“靜態系統”的要求,所謂靜態系統就是運行線程確定,所需資源確定,行為確定的系統,例如汽車電子控制單元(ECU)系統。這類系統對響應和可靠性要求非常高,所以SylixOS可以提前分配好線程所有需要的資源,為它的運行做好一切準備,這樣就不會因為資源短缺造成嚴重后果。
????? 【就緒】狀態表示一個線程可以被執行,即線程得到了除CPU以外運行所需要的所有資源,例如線程等待的信號量已經有效,這時線程請求調度器調度,至于調度器合適將CPU資源提供個這個線程以使其運行,則依賴于上面所說的調度器算法。
????? 【運行】狀態表示一個線程正在執行,即就緒后,系統調度器為這個線程分配了CPU資源使其得以運行。
????? 【阻塞】狀態表示線程現在不能繼續執行,必須需要等待指定的事件發生,例如線程正在等待信號量有效,或者消息隊列中的信息,或者一個信號,一個同步I/O請求等等。這個狀態下線程得不到執行,除非等待的事件到達或者設置的超時時間到達,如果這兩種情況發生,則線程進入就緒隊列。等待調度器再次執行,同時將等待的結果告知用戶代碼。
????? 【僵死】線程結束時需要回收操作系統在創建它時分配的資源,有些資源是它自身運行時無法回收的,例如內核對象,堆棧等,這時線程通知操作系統相關的回收器,并把自己設置為僵死狀態等待回收器徹底銷毀自己。
????? 【停止】狀態表示線程被其他線程或者系統強行暫停執行,此狀態只有SMP系統會出現,當一個核正在運行的線程(或進程)向另一個核上的線程發送信號時,這時發送信號的目標線程正在另一個核上運行,則內核會自動將目標設置為停止狀態,然后等信號發送完畢后再將這個任務恢復執行。
?????? SylixOS系統上線程實體的狀態永遠是以上六種狀態之一。
?
??????協程(coroutine),又稱作協同程序是比線程還小的可執行代碼序,在windows操作系統上稱為纖程。一個線程內可以擁有多個協程,這些協程共享線程除了棧之外的所有資源,例如優先級,內核對象等等。由于線程內的所有協程共享線程本身的內核對象,所以調度器本身并不知道協程的存在,協程的運行是靠所屬線程被調度時被執行的。一個線程內的協程共享所屬線程的優先級,一個線程內部的協程不可被強占。只能輪轉運行。而且當前正在運行協程必須主動放棄CPU另同線程內的另一個協程才能得以運行,當線程被刪除時,線程內的所有協程也同時被全部刪除。
?????? SylixOS在內核中引入協程概念,而不是使用庫模擬出的協程,這樣SylixOS內部的協程管理更加便捷高效。
??????事件標志組(eventset)是SylixOS提供的一個線程同步通信機制。每一個事件標志組包含有32位事件標志,在應用中每一位可以代表一個事件,線程可以等待事件標志組中的一個事件或者同時等待多個事件。線程等待多個事件時既可以等待多個事件同時發生,也可以等待多個事件中任何一個事件的發生。指定的事件發生后,等待相應事件的線程將會從阻塞狀態被轉換成就緒狀態。這時只要調度器調度該線程,它就可以執行。
??????
?????? SylixOS中斷系統結構如下圖所示,它本身可以支持無限數量的中斷(interrupt)源,具體的中斷向量表(interrupt vector)大小由編譯時的配置決定。
?????? SylixOS和大多數操作系統一樣使用平板中斷向量表,如果系統硬件中存在有主從級聯中斷,則需要在板級支持包(BSP)中進行相關的抽象。當系統發生中斷時,BSP代碼按操作系統要求處理好相關中斷上下文(context)后,調用操作系統統一的中斷入口API。操作系統根據中斷向量號來決定運行哪些之前已經注冊的中斷服務。驅動程序不需要操作中斷的具體行為,只需要注冊相關的中斷向量即可。
?????? SylixOS同時支持單向量多中斷服務函數表,所以像PCI總線這樣的多級中斷系統,使用此類中斷向量管理,用戶驅動程序將變的非常簡單。
?
?????? SylixOS調度器只管理一種資源:CPU。調度器決定當前時刻將CPU分配給哪個線程,即運行哪個線程。每一個CPU核心只能同時運行一個線程,如果沒有任何就緒的用戶線程,則調度器讓CPU運行永遠就緒的空閑(idle)線程。
??????如上所述,對于單核CPU系統,一般的多任務操作系統在宏觀上是多任務并行處理,但在微觀上,同時只有一個線程運行。調度器根據調度算法和當前就緒線程的相關參數來判斷誰將運行。對于緊耦合多CPU系統(SMP,例如酷睿,龍芯多核),他們可以同時運行與內核數量相當的線程,例如雙核處理器可以同時運行兩個線程,如果這兩個線程沒有資源沖突,則理論運行速度將達到單核兩倍(真正的并行處理系統),但是沒有資源沖突的線程是理想狀態,所以真實運行的N核系統是不可能達到單核系統N倍的效率。對于多核系統,SylixOS調度器將決定這些核同時運行哪些線程。對于硬實時的SylixOS來說,調度器將CPU分配給就緒線程中優先級最高的幾個線程,這個調度算法時間復雜度也為O(1)。
??????? SylixOS提供三種形式的內存管理:堆內存管理(heap),定長分區內存管理(pool),虛擬內存管理(vmm)。這三種內存管理有著不同的用途。
?????? 堆內存管理類似于我們常用的malloc、free操作,操作系統有兩個非常關鍵的內存堆:“內核內存堆”和“系統內存堆”。內核堆負責系統內核對象的緩沖。系統堆負責內核基礎緩沖區,驅動程序緩沖區等。
?????? 虛擬內存管理只用于有硬件內存管理單元(MMU)的處理器。它管理了整個虛擬內存空間和物理頁面的分配,回收,映射,權限。是操作系統內存管理的核心。例如后面將要提到的進程,文件映射,缺頁中斷系統等等,都需要虛擬內存管理的支持。同時它也接管了所有內存的異常訪問處理(映射錯誤或者權限錯誤)。
??????? SylixOS物理內存采用頁式內存管理算法。物理頁面使用伙伴算法,虛擬空間采用哈希紅黑二叉樹保證分配與回收的速度。
?????? 消息隊列是SylixOS提供的多任務同步通信方式之一,它將一個消息從一個任務傳遞到另一個任務,這樣一個線程可以將產生的數據或者事件發送出去,由指定的任務繼續處理。這也是操作系統多任務最常用的同步通信方式。
?????? 信號量也是SylixOS提供的多任務同步通信方式之一,SylixOS的信號量分為三種:計數信號量、二值信號量、互斥信號量。信號量既可以用作任務間的通信,也可以用于中斷與任務的通信。SylixOS有關信號量對線程狀態的影響如下圖所示。
?????? 計數信號量內部是一個32/64位計數器,當計數值為0時等待的線程將被阻塞,如果不為0則計數器減一線程繼續運行。發送信號量時,如果此時有線程阻塞在對應的信號量上,則阻塞的任務將被激活,如果沒有則計數器加一。
?????? 二值信號量顧名思義,它只有兩種狀態:有效和無效。線程等待此信號量時如果信號量有效,則信號量立即變為無效狀態,同時當前線程不阻塞并繼續執行。如果信號量是無效狀態,則線程被阻塞。發送信號量時,如果此時有線程阻塞在對應的信號量上,則阻塞的線程將被激活,如果沒有等待此信號量的線程,則將信號量置為有效狀態。
???????互斥信號量(簡稱互斥量)是SylixOS為保護共享資源設計的一種鎖機制(大多數操作系統擁有此功能),互斥信號量的基本行為類似于二值信號量,但是功能更加強大。但它并不能取代二值信號量,因為釋放互斥信號量的線程必須是之前獲取該信號量的線程,所以互斥量不能被用作線程同步通信。SylixOS的互斥量提供兩種方法避免優先級倒置(又名優先級反轉),一種是優先級繼承算法,一種是優先級天花板算法,創建互斥量時通過選項來選擇需要使用的算法。同時互斥量支持資源死鎖檢測,死鎖可重入功能,同樣也是根據創建選項確定。
??????? SylixOS提供兩種類型的定時器:高速內核定時器,任務級定時器。高速內核定時器顧名思義,它的定時周期可以非常短,頻率可以高過操作系統的時鐘。但需要注意的是,高速定時器的用戶回調函數可能運行在中斷上下文中(由BSP代碼決定),所以只能進行簡單的操作,一般用于發送信號量激活等待線程,或者通知什么事情發生。
?????? 任務級定時器速度較慢,他提供普通精度的定時要求。定時器服務函數運行在操作系統t_timer內核線程中。
?????? 需要注意的是:SylixOS內核提供的定時器只用于內核模塊或者內核應用,進程需要使用與信號系統相關的posix定時器。
????????SylixOS的回收器主要是記錄一個進程的資源使用情況,在進程退出時將釋放進程的所有資源,它們包括內核對象,文件描述符,進程空間,依賴的動態鏈接庫等等。進程相關的內容將在下面進程一節詳細講解。
?
(本篇結束)
總結
以上是生活随笔為你收集整理的SylixOS 经得起检验的国产操作系统 (四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【前端开发基础】CSS基础知识以及CSS
- 下一篇: RCA清洗系统及清洗液自适应预测温度控制