2010-05-30

跨瀏覽器真是件不容易的事情

今天又收到一個不可思議的廣告信,不可思議的不是內容,而是他圖片切割的方法。


仔細看的話你就會發現,這張圖切的非常細,而且更亮然感到驚奇的是,chrome到底是跟IE(還是fx?)有多大差別讓這張圖可以抽成這樣wwwwww

原始碼什麼就沒有了,因為這些問題不可能是第一次出現,而且大家都知道,其實你用一整張圖就可以解決這種現象了。

不過是廣告信,size不會大到哪裡去啊

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-13

5/13 OS上課筆記-2

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)輪到了

2009-05-11

5/11 OS上課筆記-2

ossched要call時,要看是在啥狀態下calldelete。



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外,縮短長度。


必須等到所有的事件都發生了才可以執行。