Memory Management
向slab要記憶體,slab跟body system要
用page為單位配置記憶體可以避免不同process互相讀取記憶體
libC的配置演算法可以多看看。
因為microC是及時OS,所以可以做出假設:
free除了要給指標外,還要知道要歸還給哪個partition,因為切的大小不一樣。
這邊要加後半部分的判斷據說很簡單。
partition彼此之間無法轉換空間,slab可以把partition中沒有在用的部分還給body system。
2009-05-20
2009-05-18
5/18 OS上課筆記
雖然把for loop攤開來寫這個區段的執行速度會變快。
但是...
├好的compiler會自動攤開手動容易出握不容易抓bug
├雖然這段速度變快但是整體程式效率不一定會提升
└程式效率下降
┌→從ready queue搬到waiting queue或其他的搬運
程式在搬運時,是參照task的priority般的。
OS_EventTO()
─TimeOut
如果等太久,那就把他kill掉。ex:因為網路線掉了封包沒等到
在程式裡加上timeout,基本上可以避免Deadlock。
被叫醒的task要看是誰叫醒的(檢查flag),像白馬王子叫醒的話要微笑史瑞克的話要尖叫。
pend可以這樣用
xxx_pend() 集合後
xxx_post()一起執行
Semaphore
但是...
├好的compiler會自動攤開手動容易出握不容易抓bug
├雖然這段速度變快但是整體程式效率不一定會提升
└程式效率下降
┌→從ready queue搬到waiting queue或其他的搬運
程式在搬運時,是參照task的priority般的。
OS_EventTO()
─TimeOut
如果等太久,那就把他kill掉。ex:因為網路線掉了封包沒等到
在程式裡加上timeout,基本上可以避免Deadlock。
被叫醒的task要看是誰叫醒的(檢查flag),像白馬王子叫醒的話要微笑史瑞克的話要尖叫。
pend可以這樣用
xxx_pend() 集合後
xxx_post()一起執行
Semaphore
2009-05-13
5/13 OS上課筆記-2
while loop外無保護
跳出ctrial section時,有可能會把while loop所在的task拆掉,那要再回去while loop就會爛掉...
剩下的時間在看網概...
跳出ctrial section時,有可能會把while loop所在的task拆掉,那要再回去while loop就會爛掉...
剩下的時間在看網概...
5/13 OS上課筆記
如果算tic的部分priority太低,會出現時間半卡住狀態。
idle task是ready queue中最後一個,也是系統開起來的第一個task。
休息狀態(waiting queue)的task要
1)在等的資源可以被使用
2)休息時間到了
3)其他task用resume呼叫
4)輪到了
idle task是ready queue中最後一個,也是系統開起來的第一個task。
休息狀態(waiting queue)的task要
1)在等的資源可以被使用
2)休息時間到了
3)其他task用resume呼叫
4)輪到了
2009-05-11
5/11 OS上課筆記-2
ossched要call時,要看是在啥狀態下calldelete。
OSTimeDelay
1)task從ready queue移除
2)OsTCBDelay 這個task想要睡多久
OSTimeTick()
├完全使用c語言
└重要的是他的演算法
cpu最後會呼叫中斷向量
OSTCBList()
語無倫次我腦袋有洞漏掉了...
OSTimeDelay
1)task從ready queue移除
2)OsTCBDelay 這個task想要睡多久
OSTimeTick()
├完全使用c語言
└重要的是他的演算法
cpu最後會呼叫中斷向量
OSTCBList()
語無倫次我腦袋有洞漏掉了...
5/11 OS上課筆記
如果有一段critical section的程式碼太長,會有task被暫停過長、IO效率低落等後果。
DI
preemption point : INT/HPT(hight priority task)
EI
TaskDelete
1) 為了刪掉task 把狀態設為ready 這樣就不會被rusume叫起來繼續執行
(髒寫法:和原來意思南轅北轍)
2)
os ctrtical section太常對系統效能不好
至於kernel tast允不允許nesting interrupt巢狀中斷,要看對kernel的設計。
當A把B殺掉後不需要重新排程,A不等於B。
因為A還在執行,最高先權還是他,所以不用排。
換言之,只有自殺才需要重新排成,因為現在執行的位置空出來了。
但是自殺也有好處,因為如果是threed自殺,會順便free掉占用的resource。
另外直接讓A砍掉B也會有問題,因為那些佔用的資源還沒有終止。
while loop內要寫一個OsTimeDelay,不然大者恆大!!
五哥曰:要理解一下喔
OS:i well try to...
傳參數進去判斷是誰要他掛:自己、TaskMenerger、HighPriorityTask
刪完之後要記得跑os_tcb,把waiting/reacy queue還有其他東西都重新整理。
將複雜運算提到criticl section外,縮短長度。
必須等到所有的事件都發生了才可以執行。
DI
preemption point : INT/HPT(hight priority task)
EI
TaskDelete
1) 為了刪掉task 把狀態設為ready 這樣就不會被rusume叫起來繼續執行
(髒寫法:和原來意思南轅北轍)
2)
os ctrtical section太常對系統效能不好
至於kernel tast允不允許nesting interrupt巢狀中斷,要看對kernel的設計。
當A把B殺掉後不需要重新排程,A不等於B。
因為A還在執行,最高先權還是他,所以不用排。
換言之,只有自殺才需要重新排成,因為現在執行的位置空出來了。
但是自殺也有好處,因為如果是threed自殺,會順便free掉占用的resource。
另外直接讓A砍掉B也會有問題,因為那些佔用的資源還沒有終止。
while loop內要寫一個OsTimeDelay,不然大者恆大!!
五哥曰:要理解一下喔
OS:i well try to...
傳參數進去判斷是誰要他掛:自己、TaskMenerger、HighPriorityTask
刪完之後要記得跑os_tcb,把waiting/reacy queue還有其他東西都重新整理。
將複雜運算提到criticl section外,縮短長度。
必須等到所有的事件都發生了才可以執行。
2009-05-06
5/6 OS上課筆記
XXXXX用來看堆疊使用率。
mem由下往上填0。
因為都填0會造成誤判,所以microC就填怪值。
kernel內的大array要記得malloc,不可直接用。
不能用StackPointer(SP值)來算堆疊使用率,因為SP值是目前使用率,不是最高使用率。
所以要數0!!
一般來說stack不需要初始化,除非在debug。
Deletimg a Task
─判斷在ready/waiting queue,並從中移走。
刪除task,之前跟系統要的resource都要free掉。
─要的記憶體、open的file、開的socket
microC/OSII中沒有辦法直接free,只會刪除。(????)
1)錯誤檢查:存在與否
2)從queue中移走
3)插入一個preemption point
─和卡位很像,打開中斷向量(interrupt)。
4)
5)從priority table中移走
6)叫OSSched()
─自殺才需要→最高優先權者才有辦法自殺→因為最高優權者不見了所以ready queue需要改
mem由下往上填0。
因為都填0會造成誤判,所以microC就填怪值。
kernel內的大array要記得malloc,不可直接用。
不能用StackPointer(SP值)來算堆疊使用率,因為SP值是目前使用率,不是最高使用率。
所以要數0!!
一般來說stack不需要初始化,除非在debug。
Deletimg a Task
─判斷在ready/waiting queue,並從中移走。
刪除task,之前跟系統要的resource都要free掉。
─要的記憶體、open的file、開的socket
microC/OSII中沒有辦法直接free,只會刪除。(????)
1)錯誤檢查:存在與否
2)從queue中移走
3)插入一個preemption point
─和卡位很像,打開中斷向量(interrupt)。
4)
5)從priority table中移走
6)叫OSSched()
─自殺才需要→最高優先權者才有辦法自殺→因為最高優權者不見了所以ready queue需要改
2009-04-29
4/29 OS上課筆記
interrupt under uC/OSII
p.62
這個地方用驅動程式底層當例子。
基本上很難看出有interrupt過,除非詳細看過時間。
使中斷enable的code出現在程式開始沒多少。
水藍色:
橘紅色:
(2)的OSInNesting是因為中斷可巢狀,但在OSInNesting==1才需要寫irt。
排程器如果發現目前task和要切過去的task相同,則直接return,不動作。跳(8)
(5)中斷
(6)沒有這行就不能巢狀中斷
同一類的中斷不要用nesting發生第二次,會rest condition。因為重要性一樣,就FIFO就好了。
巢狀是為了在優先權低的中斷發生時,讓高權重的中斷可以搶先。
通常低優先權的中斷不能在高優先權中段時搶先,不論軟硬體皆然。不過也只是"通常"。
例外:Timer沒那麼重要,但是對系統架構很重要,所以可搶先。
窩窩窩喔喔 ch3結束
ch4開始
規定"ISR內不可以create task"
OSTCBInit()用來填參數,沒有就塞0。
OSTaskCreatHook() 方便大家使用的plug-in,本身就是空的大括號。
p.62
這個地方用驅動程式底層當例子。
基本上很難看出有interrupt過,除非詳細看過時間。
使中斷enable的code出現在程式開始沒多少。
水藍色:
橘紅色:
(2)的OSInNesting是因為中斷可巢狀,但在OSInNesting==1才需要寫irt。
排程器如果發現目前task和要切過去的task相同,則直接return,不動作。跳(8)
(5)中斷
(6)沒有這行就不能巢狀中斷
同一類的中斷不要用nesting發生第二次,會rest condition。因為重要性一樣,就FIFO就好了。
巢狀是為了在優先權低的中斷發生時,讓高權重的中斷可以搶先。
通常低優先權的中斷不能在高優先權中段時搶先,不論軟硬體皆然。不過也只是"通常"。
例外:Timer沒那麼重要,但是對系統架構很重要,所以可搶先。
窩窩窩喔喔 ch3結束
ch4開始
規定"ISR內不可以create task"
OSTCBInit()用來填參數,沒有就塞0。
OSTaskCreatHook() 方便大家使用的plug-in,本身就是空的大括號。
2009-04-13
2009-04-08
4/08 OS上課筆記
p.34~35
全部都放在critical section內一定不會出錯(沒保護到),但是在多序執行時速度會變慢,網路傳輸狀況就是封包會掉。
這邊的保護可否用semephor來取代?
DI semlock EI semunlock
台灣的劉小姐:最好不要,因為.....
重點:要保護的東西在哪?有誰會讀取?
這邊的物件在ready queue內,只有ap本身可以存取。
後面這邊(p.35)
老師認為不可以
ISR結束後會去抓,.....
Linux:比較短的寫在前面,比較長的寫後面。方便閱讀。
p.36
Ready Queue
p.37
電腦如何知道在表中找到ready(1)者?
1)for loop
p.40 41
會考算法,必考。
全部都放在critical section內一定不會出錯(沒保護到),但是在多序執行時速度會變慢,網路傳輸狀況就是封包會掉。
這邊的保護可否用semephor來取代?
DI semlock EI semunlock
台灣的劉小姐:最好不要,因為.....
重點:要保護的東西在哪?有誰會讀取?
這邊的物件在ready queue內,只有ap本身可以存取。
後面這邊(p.35)
老師認為不可以
ISR結束後會去抓,.....
Linux:比較短的寫在前面,比較長的寫後面。方便閱讀。
p.36
Ready Queue
p.37
電腦如何知道在表中找到ready(1)者?
1)for loop
p.40 41
會考算法,必考。
2009-03-25
3/25 OS上課筆記
3/23老師放假
TCB 第一個欄位擺的是sp(stack pointer),指向目前task堆疊用到的位置。
之後上到組語部分,就會進行更進一步的介紹。
要用syscall->contask switch,不要直接修改。
1個contask最多等一個時間中斷。
prio算出值很無聊,改變頻率也不高,所以就先算好。
以上就是恐龍本中的tcb。
暫存器why only one??
sp Regs PC psw
有出現 這些都在stack中
從TCB中把p30那四行拿掉,在每次的scadal都抓一次就好。
Q: 只能在critical section中,表示有改變外面的全域變數。可不可以用secmafer取代??
TCB 第一個欄位擺的是sp(stack pointer),指向目前task堆疊用到的位置。
之後上到組語部分,就會進行更進一步的介紹。
要用syscall->contask switch,不要直接修改。
1個contask最多等一個時間中斷。
prio算出值很無聊,改變頻率也不高,所以就先算好。
以上就是恐龍本中的tcb。
暫存器why only one??
sp Regs PC psw
有出現 這些都在stack中
從TCB中把p30那四行拿掉,在每次的scadal都抓一次就好。
Q: 只能在critical section中,表示有改變外面的全域變數。可不可以用secmafer取代??
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中,是不是都一樣?恐龍本中的少了哪些?
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中,是不是都一樣?恐龍本中的少了哪些?
2009-03-16
3/16 OS上課筆記
今天的小考題目:semaphore oprtation 和 dis/enable interrupt 兩者都是衛了保護資料的程式。那投影片37頁的程式可不可以帶換成後者?
在xx狀況之下,zz會掉封包。
在xx狀況下,任何interrupt都進不去,所以I/O會有問題。
五哥:今天題目出的不錯,不過有點難,啊,不過分數也不要緊。
critical section藉由鎖定程式,來保護資料。
五哥:早知道就上個禮拜六(白色情人節)來補課。
生:why??
五哥:因為我見不得人好!!!!(崩潰~~ 強烈的去死光芒啊~~)
TASK1:這兩個fun只能在PC平台上使用。
p52: task5回'嗯',task4聽到後就繼續講。
p.55
Linux2.6中幾個行程就會出現幾個堆疊,都是全4k或全8k。
Linux2.4堆疊和2.6剎不多,就少了xx的stack。堆疊量的配置一定是8k,因為要預留4k給isr使用。所以比較浪費空間。
xxxxxxxxxx
μC/OSII最快,因為它最浪費記憶體。
在xx狀況之下,zz會掉封包。
在xx狀況下,任何interrupt都進不去,所以I/O會有問題。
五哥:今天題目出的不錯,不過有點難,啊,不過分數也不要緊。
critical section藉由鎖定程式,來保護資料。
五哥:早知道就上個禮拜六(白色情人節)來補課。
生:why??
五哥:因為我見不得人好!!!!(崩潰~~ 強烈的去死光芒啊~~)
TASK1:這兩個fun只能在PC平台上使用。
p52: task5回'嗯',task4聽到後就繼續講。
p.55
Linux2.6中幾個行程就會出現幾個堆疊,都是全4k或全8k。
Linux2.4堆疊和2.6剎不多,就少了xx的stack。堆疊量的配置一定是8k,因為要預留4k給isr使用。所以比較浪費空間。
xxxxxxxxxx
μC/OSII最快,因為它最浪費記憶體。
訂閱:
文章 (Atom)