顯示具有 ucos2 標籤的文章。 顯示所有文章
顯示具有 ucos2 標籤的文章。 顯示所有文章

2009-05-20

5/20 OS上課筆記

Memory Management

向slab要記憶體,slab跟body system要


用page為單位配置記憶體可以避免不同process互相讀取記憶體


libC的配置演算法可以多看看。


因為microC是及時OS,所以可以做出假設:


free除了要給指標外,還要知道要歸還給哪個partition,因為切的大小不一樣。
這邊要加後半部分的判斷據說很簡單。


partition彼此之間無法轉換空間,slab可以把partition中沒有在用的部分還給body system。

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

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需要改

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,本身就是空的大括號。

2009-04-13

4/13 OS上課筆記

heap uc/osII
ins O(logN) O(1)
del O(logN) O(1)
min O(logN) O(1)

why 查表? 因為用雙for loop時間複雜度會變高。

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
會考算法,必考。

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取代??

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最快,因為它最浪費記憶體。