作業系統

作業系統

簡介

行程管理

記憶體管理

輸出入管理

檔案管理

使用者介面

嵌入式系統

RTOS

中斷處理

案例研究

EOS0

CurtOS

F9

UNIXv6

NachOS

uCOSII

L4

RtThread

Haiku

MINIX

Linux

Windows

mykernel

訊息

相關網站

參考文獻

最新修改

簡體版

English

現今的作業系統,通常透過『行程管理』、『記憶體管理』、『輸出入系統』、『檔案系統』、『使用者介面』等五大功能模組,打造出方便的程式與使用環境。

對於系統程式設計師而言,要深入理解作業系統,最好能透過程式實作的方式。在本文中,我們將透過 uCOSII, Linux 等作業系統的研究,探討其核心的設計原理 ,以便以實務的方式理解作業統。

uCOSII 作業系統

uCOSII 是一個相當簡單的嵌入式作業系統,整個系統只注重行程管理,其於模組幾乎都不具備。

uCOSII 共有五種行程狀態,Dormant, Ready, Running, ISR 與 Waiting. 其意義如下:

  1. Dormant 睡眠
  2. Ready 備妥
  3. Running 執行中
  4. ISR 中斷
  5. Waiting 等待

當程式進行輸出入或被強制中斷時,行程的狀態會改變,遭到中斷的行程會進入等待狀態,另一個行程會被換入而開始執行。圖 1 顯示了各個系統呼叫所造成的行程狀態轉移情況,

uCOSIIstate.jpg

圖 1. uCOSII 的狀態轉移圖。

事件 說明
OSTaskCreate() 建立任務
OSTaskCreateExt() 另一種建立任務的函數
OSTaskDel() 結束任務
OSStart() 啟動uCOSII系統,此時系統會由備妥佇列中取出任務執行,此函數永遠不會結束
OSIntExit() 系統已經離開中斷狀態,此時會從備妥的佇列中取出任務來執行。
OS_TASK_SW() 系統執行任務切換,此時會從備妥的佇列中取出任務來執行。
Preempted 目前任務被更高優先權的任無所佔,因而被切換到備妥佇列。
Interrput 中斷發生了,系統進入中斷服務程式。
OSMBoxPend() 任務等待訊息郵件盒,因而進入等待狀態。
OSQPend() 任務等待佇列。
OSSemPend() 任務等待號誌 (Semaphore),拿到號誌才能取得對周邊的控制權。
OSTaskSuspend() 任務自行暫時擱置。
OSTaskResume() 任務重新開始。
OSTimeDly() 任務延遲一段時間,以 Time Click (時間節拍) 為單位。
OSTimeDlyHMSM() 任務延遲一段時間,以時、分、秒為單位。
OSMBoxPost() 任務收到所等待的訊息佇列盒。
OSQPost() 任務收到佇列。
OSSemPost() 任務交出號誌 Semaphore。
OSTaskDlyResume() 任務延遲取消

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License