2009-03-18

3/18 OS上課筆記

了解這個章節恨重要

ready queue CPU使用率


當被兩個行程(process)鎖定時,XX要xxxxx。

最主要還是要看規格對reader和writer的解讀。

criitical section 用enable / disable interrupt 來保護。

在xxxx,全部執行在kernel mode。


AP1(void* pdata){
semlock();
counter ++;
semunlock();
}

AP2(){
sem
print(counter);
sem
}

關於sem的程式大概2.30行,用這些去保護一行有點浪費.....


在嵌入式當中
AP1(){
PI();
print(counter);
EI();
}

AP2(){
DI;
print(counter);
EI;
}
這兩三個cycle就做完了,用兩行保護一行比較划算。


因為這樣(disable interrupt),所以小型嵌入式系統長期下timer會少算,一段時間後就需要調校。


有一種不可以用!!!!!不然系統會一睡不醒!!!!

****有包含timer的東西不可以包在disinterrupt內,因為不知道時間過了沒.....
-> 晚上嫌鬧鐘滴答聲吵拆電池,結果早上就起不了床....


在x86中,剛好可以執行。
生:剛好???
五哥:剛剛好會講到XDDD

因為在86的idel task中,有一行程式碼會把中斷打開。



fu1(){
PI();
fn2();
EI();  這邊之後的保護被fu2打開了!!!!
}

fu2(){
DI;
print();
EI;
}


有兩種可以把interrupt的狀態存起來

第一種:stack
第二種:任何都可以

第三種:在這種情況下和第二種一樣 p12



因為xxx,有的時候會因為指定task id所以無法運作,這是ucosII中的小瑕疵。

Idel task會織毛線(counter+1)


TCB (Task Control Blocks)
只要TCB存在,就會出現在link-list中。

double link-list就是刪除很方便XDDD


p22
Cur / Rdy
這兩個變數重複了,因為普通狀況下都一樣,只有在發生contask switch的時候會不一樣。

A換到B時,Cur指A,Rdy指B。

第五個變數表示陣列,之前講過。
裡面都存指標,用來指到TCB。


contask switch時,就是在算新task的優先權。

查表 -> 比較優先權 -> 抓task -> 完成cntask switch


查TCB在上學期恐龍本中,要存什麼東西?
那些東西在p23中,是不是都一樣?恐龍本中的少了哪些?

沒有留言:

張貼留言

Check for typo before sending