天天看點

UC/0S2之基礎總結

  堆棧,就是在存儲器中按資料“後進先出(LIFO)【類比杯子】”的原則組織的連續存儲空間,為了滿足任務切換和響應中斷儲存CPU寄存器中的内容及存儲任務私有資料的需要,每個任務都應該配有自己的堆棧,

  注意點:堆棧的增長方向是随系統所使用的處理器不同而存在差異,有些處理器要求堆棧的增長方向是向上的,而有些則是要求堆棧的增長方向是向下的;

當cpu啟動運作一個任務時,cpu的各寄存器總是需要預置一些初始資料,例如指向任務的指針,程式狀态字PSW等;

  那麼,在系統啟動任務時,CPU從何處可以獲得這些資料呢?一個最友善的方法是讓cpu從這個任務的任務堆棧裡獲得這些資料/。為此,應用斥呢個需在建立一個新任務時,就必須把在系統啟動這個任務時CPU各寄存器所需要的初始資料(任務指針,任務堆棧指針,程式狀态字等)事先存放在任務的堆棧中,這樣,當任務獲得cpu使用權時,就能把堆棧中的初始資料複制到cpu的各寄存器裡,進而可使任務順利地啟動并運作;

  任務堆棧的初始化工作應該是由作業系統負責的,

uc/os2用來記錄任務的堆棧指針、任務的目前狀态、任務的優先級等一些與任務管理相關的屬性的表叫做任務控制塊;

  任務控制塊負責把任務代碼和任務堆棧進行關聯,進而使任務控制塊,任務代碼和任務堆棧稱為一個整體;并且系統要通過這個任務控制塊來感覺和管理一個任務,是以,任務控制塊就相當于一個任務的身份證,沒有任務控制塊的任務是不能被系統承認和管理的;

  為了管理系統中的多個任務,uc/os2把系統所有任務的控制塊連結成兩條連結清單,并通過這兩條連結清單管理各任務控制塊,進而通過任務控制塊對任務進行相應的操作;一條是空任務塊連結清單(其中所有任務控制塊還沒有配置設定給任務);另一條是任務控制塊連結清單(其中所有任務控制塊已經配置設定給任務);

  多任務os的核心工作就是任務排程。所謂排程,就是通過一個算法在多任務中确定哪個任務來運作,做這項工作的函數就叫做排程器;

UC/OS2進行任務排程的思想是,每時每刻總是讓優先級最高的就緒任務處于運作狀态,為了保證這一點,它在系統或使用者任務調用系統函數及執行中斷服務程式結束時,總是調用排程器來确定應該運作的任務并運作它;  

  多任務系統中,令cpu中止目前正在運作的任務轉而去運作另一個任務的工作叫做任務切換,而按某種規則進行任務切換的工作叫做任務的排程;

在UC/OS2中,任務排程是由任務排程器來完成的,任務排程器的主要工作有兩項:一、在任務就緒表中查找具有最高優先級的就緒任務;二、實作任務的切換;

  UC/OS2中有兩種排程器:一種是任務級的排程器,另一種是,中斷級的排程器;

下面介紹任務級的排程器:

  排程器把任務切換的工作分為兩個步驟:

     第一步是獲得待運作任務的TCB指針;Task control  block

     第二步是進行斷點資料的切換;

  

繼續閱讀