2009年6月18日 星期四

OSSemPend() OSSemPost() 程式碼













OSSemPend()-1
(點擊可放大看)















OSSemPend()-2
(點擊可放大看)















OSSemPost()
(點擊可放大看)


OS學期心得

這學期給我的第一印象是

放假也放太多了吧~~~

到學期末好幾星期連續補課

幾個禮拜下來有種快掛掉的感覺

------------------------------------

uCOSII 與 linux 學習成效比較:

uCOSII 感覺比較有重點, 容易吸收

到最後 linux 老師在教得時候

有點搞不太懂重點在哪裡 想讓我們了解什麼

或許是 linux 東西太多太雜了 不好教 也不好懂

或許是 時間太短了 教得比較急促

----------------------------------

最後想抱怨期末proj...

也許是我能力欠缺

花了還蠻多時間在研究

雖然最後有做出來

可是卻遲交了

這是我第一次遲交作業 還蠻難過的

-------------------------------------

整體來看 受益頗多的

至少讓我更了解OS做作些什麼

想當初大一時 連作業系統是什麼都不知道

以前剛接觸到fedora freeBSD時

用起來都會怕怕的

現在已經可以跟用windows XP 一樣運用自如

OSSemPend()

OSEventCnt=1

task到kernel中執行完此event再回到user mode下繼續執行


前提: task 2已經進入critical section, OSEventCnt=0,

因為OSEventCnt=0, 讓task 1進入waiting狀態 並觸發sched() 把控制權交給task 2

等待task 2執行完, 呼叫sched() 讓task 1繼續執行


前提: task 2已經進入critical section 且沒有動作, OSEventCnt=0,

因為OSEventCnt=0, 所以task 1進入waiting狀態,

又因為task 2一直沒有動作, 所以最後task 1被timer叫醒

回到user mode