Timer會定期發出中斷給CPU,CPU過後會去呼叫OSTickISR(),然後在ISR裡面呼叫OSTimeTick()。在此,會對每個task做檢查,如果OSTCBDly大於0,就要將Task的Delay Time減1,表示已經過了一個tick的時間。如果有其中一個task的Delay Time等於1,減了之後變成0,代表著等的時間已經到了,這個task就要變成ready。執行完OSTimeTick(),就會回到OSTickISR(),繼續執行接下來的程式碼,最後結束此中斷。此種方法會使OSTimeTick()的執行時間可能會很長,中斷會被disable太久的時間,就會造成整個的I/O效率不好,所以就有了以下的第二種方法。
中斷發生時呼叫OSTickISR(),在ISR裡執行OSMBoxPost()來籍由mailbox傳送一個message給OSTickTask()後就結束。這個動作只是把某個flag設定為1。這個OSTickTask()是在其中一個task,也等於是ISR把要做的事交給task做。在OSTickTask()裡,呼叫OSTimeTick,對每個task的Delay Time做減1的動作。在第一種方法,ISR結束後會去呼叫OSIntExit()函數,而這函數會去呼叫OS_Sched()。在第二種方法,因為TickTask()的程式碼是自己寫的,所以在執行完OSTimeTick後,要再執行OS_Sched()。
2009年5月30日 星期六
2009年5月29日 星期五
Task Management: OSTaskSuspend(), OSTaskResume()
OSTaskSuspend()
首先檢查task的優先權,一開始先檢查要暫停的task是否合理,優先權必須大於0,接下來再檢查要暫停的是否為idle task,如果是就不合理,因為idle task永遠在ready的狀態,暫停了就會違返其特性。過後再檢查要暫停的task優先權數是否正確,必須介於0和idle task之間。接下來判斷是要暫停自己或是其他的task。暫停自己的task有兩種方法,一個是透過OS_PRIO_SELF,另一個是指定優先權,如果不是這兩種方法,就可以肯定要暫停的是其他的task。task將會被暫停,所以就要把task從ready queue移走,然後在task的TCB裡面設定stat為suspend的形式。最後,如果是task要將自己停掉,就呼叫OS_Sched()。
OSTaskResume()
首先檢查task的優先權的值,必須小於OS_LOWEST_PRIO。過後檢查要resume之task的狀態是否為suspend,因為resume就只能用來喚醒被suspend的task。要resume的task,狀態有可能是OS_STAT_SUSPEND,OS_STAT_SEM,OS_STAT_FLAG,代表著task存在於一個waiting queue裡面。與OS_STAT_SUSPEND做運算之後,如果等於OS_STAT_RDY,就可以繼續執行,要使task處於ready的狀態,OSTCBDly必須為0,表示task沒有在等待延遲的期滿。當以上兩個條件都滿足後,task才會處於ready的狀態。resume的task有可能是最高優先權的task,所以要執行OS_Sched()。
首先檢查task的優先權,一開始先檢查要暫停的task是否合理,優先權必須大於0,接下來再檢查要暫停的是否為idle task,如果是就不合理,因為idle task永遠在ready的狀態,暫停了就會違返其特性。過後再檢查要暫停的task優先權數是否正確,必須介於0和idle task之間。接下來判斷是要暫停自己或是其他的task。暫停自己的task有兩種方法,一個是透過OS_PRIO_SELF,另一個是指定優先權,如果不是這兩種方法,就可以肯定要暫停的是其他的task。task將會被暫停,所以就要把task從ready queue移走,然後在task的TCB裡面設定stat為suspend的形式。最後,如果是task要將自己停掉,就呼叫OS_Sched()。
OSTaskResume()
首先檢查task的優先權的值,必須小於OS_LOWEST_PRIO。過後檢查要resume之task的狀態是否為suspend,因為resume就只能用來喚醒被suspend的task。要resume的task,狀態有可能是OS_STAT_SUSPEND,OS_STAT_SEM,OS_STAT_FLAG,代表著task存在於一個waiting queue裡面。與OS_STAT_SUSPEND做運算之後,如果等於OS_STAT_RDY,就可以繼續執行,要使task處於ready的狀態,OSTCBDly必須為0,表示task沒有在等待延遲的期滿。當以上兩個條件都滿足後,task才會處於ready的狀態。resume的task有可能是最高優先權的task,所以要執行OS_Sched()。
2009年5月18日 星期一
OS期中考
OS期中考後,我心裡充滿著失望的感覺,花了許多的時間整重點,去了解OS的原理,卻在期中考,面對著不了解的考古題題目,卻絲毫沒有辦法做答,其他的題目,也只能跟據了解勉強作答,因為不相信考古題,讓我付出了代價。雖然考古題一開始就有了,有時間可以讓我們去了解題目並找出答案,但以一些難以了解的考古題目來說,它第一次出現在考試的時候,對那時考試的同學來說,他們跟本沒有機會和時間先去了解問題,找出答案,這是我從沒想過要去花時間找出考古題解答的原因。
雖然我知道,讀書的目的不應該只是為了應付考試,但是期中考的題目,又是否能真正的反映同學的實力?對於老師來說,出考試題目真的有那麼花時間嗎?我可以了解,老師想讓更多的同學拿到不錯的分數,但這只能讓同學下一次會更依賴考古題,而忽略了其他應該學習的部分,這不是學習應該有的態度。如果老師能不出考古題,花心思出些新的題目,我相信這才能真正的反映同學努力的成果,不會只是依靠考古題所能得到的。
我不得不承認,經過這次的期中考後,我的讀書心態已經有所改變,在資工系,很現實的有些科目還是要依賴考古題,不然會讀得很辛苦,只能說要認清什麼科目對自己才是有用的,把它學好,即使考試考不好,也沒什麼關係了。
雖然我知道,讀書的目的不應該只是為了應付考試,但是期中考的題目,又是否能真正的反映同學的實力?對於老師來說,出考試題目真的有那麼花時間嗎?我可以了解,老師想讓更多的同學拿到不錯的分數,但這只能讓同學下一次會更依賴考古題,而忽略了其他應該學習的部分,這不是學習應該有的態度。如果老師能不出考古題,花心思出些新的題目,我相信這才能真正的反映同學努力的成果,不會只是依靠考古題所能得到的。
我不得不承認,經過這次的期中考後,我的讀書心態已經有所改變,在資工系,很現實的有些科目還是要依賴考古題,不然會讀得很辛苦,只能說要認清什麼科目對自己才是有用的,把它學好,即使考試考不好,也沒什麼關係了。
2009年5月9日 星期六
安裝Fedora
第一次接觸Fedora,要從上學期開始說起,第一個作業,要求安裝Fedora,我就去上網找到了Fedora的BT,就去下載,因擔心超流,下了一半就先暫停了,隔天再去下載,下了一半,我馬上去停了下來,發現到這Fedora的下載並沒有續傳,而是從頭開始,覺得情況不對,就去看流量表,很不幸的,我已超流了,我只能乖乖的等著斷線的到來。復線之後,借著朋友提供的大學載點,終於把Fedora完整的下載到我的電腦了。過後利用Vmware來安裝Fedora,在分割硬碟的那一部分,沒有出現可安裝的磁碟機代號,也就無法執行下一步驟,搞了好幾天,都不知道問題出現在哪裡,就只好放棄了。
到了下學期,第二個OS作業需要用到Fedora,我就有點煩惱了,過後也只有接受事實,再度嘗試安裝Fedora,果然還是卡在同一個步驟,我上網查了很多資料,嘗試了許多方法都沒有用。直到有一天,我想到了其中一個步驟,就是初使化磁碟的那個訊息,跟據上網找到的資料,有部分說是可以始化,因為不會影響到電腦的資料。我就在這裡選擇了"是",到了分割硬碟的那一部分,終於有出現磁碟機代號,我就按照上網找到的教學,一步步做下去,一個多小時候,終於安裝完成了。之後我自己想了一想,有時做事情還真的要果斷,才不會一直卡在一個地方,而無法完成事情。
到了下學期,第二個OS作業需要用到Fedora,我就有點煩惱了,過後也只有接受事實,再度嘗試安裝Fedora,果然還是卡在同一個步驟,我上網查了很多資料,嘗試了許多方法都沒有用。直到有一天,我想到了其中一個步驟,就是初使化磁碟的那個訊息,跟據上網找到的資料,有部分說是可以始化,因為不會影響到電腦的資料。我就在這裡選擇了"是",到了分割硬碟的那一部分,終於有出現磁碟機代號,我就按照上網找到的教學,一步步做下去,一個多小時候,終於安裝完成了。之後我自己想了一想,有時做事情還真的要果斷,才不會一直卡在一個地方,而無法完成事情。
2009年5月3日 星期日
放棄Windows Vista的理由
寒假期間,抱著好奇的心態,去安裝了Windows Vista,一個星期後,我就放棄了,裝回Windows XP,以下是我放棄Vista的理由:
1. 一開始看到了Vista介面特效,過後才知道是叫Aero,啟用了這功能,在看視訊檔的時候,就會出現訊息,並跳回原本沒有特效的介面,弄了好久,都沒有辦法解問題。
2. 開機後進入Vista,記憶體就吃了600多MB,我才1G的記憶體,再開幾個軟體,速就會變慢了。
3. 一般的資料夾介面,檔案樹狀目錄變成了在左邊顯示,一整個不習慣,要從樹狀目錄找一個資料夾變得有點困難。
4. 以前的主機版驅動程式,到了Vista竟然不支援,我只好上網,花了一段時間才找到我要的驅動程式,連一些之前用過的軟體,到了Vista也不能用了。
5. Vista內的其中一個功能—UAC使用者存取控制功能,在我每次安裝軟體的時候,一定會出現,被這訊息煩了一陣子後,我上網去搜尋,才知道如何把這功能關掉,真想不通為何Vista一開始就預設開啟這功能,我相信很多人對這功能感到厭煩。
1. 一開始看到了Vista介面特效,過後才知道是叫Aero,啟用了這功能,在看視訊檔的時候,就會出現訊息,並跳回原本沒有特效的介面,弄了好久,都沒有辦法解問題。
2. 開機後進入Vista,記憶體就吃了600多MB,我才1G的記憶體,再開幾個軟體,速就會變慢了。
3. 一般的資料夾介面,檔案樹狀目錄變成了在左邊顯示,一整個不習慣,要從樹狀目錄找一個資料夾變得有點困難。
4. 以前的主機版驅動程式,到了Vista竟然不支援,我只好上網,花了一段時間才找到我要的驅動程式,連一些之前用過的軟體,到了Vista也不能用了。
5. Vista內的其中一個功能—UAC使用者存取控制功能,在我每次安裝軟體的時候,一定會出現,被這訊息煩了一陣子後,我上網去搜尋,才知道如何把這功能關掉,真想不通為何Vista一開始就預設開啟這功能,我相信很多人對這功能感到厭煩。
訂閱:
文章 (Atom)
