Program:放在二次儲存裝置中,尚沒有被Load到記憶體的一堆Code
         稱之為「程式」。  (也就是還是死的)


Process:已經被Load到記憶體中,任何一行Code隨時會被CPU執行,且其宣告的在記憶體
         的變數的值會隨著需求而不斷變動。
         稱之為「程序」。 (也就是活的Program) => 恐龍本第三章
         一個多工作業系統(Multitasking Operating System)可以同時運行多個Process
         然而一個CPU一次只能做一件事情,但CPU的數量永遠少於運行中的Process數,
         因此每個Process使用的時間需要被排程(Scheduling) => 恐龍本第五章
         又每個Process間在記憶體中,如果擺放的方式不當,就會在記憶體中產生很多
         沒辦法用到的碎片,因此MemoryManagement是一個問題 => 恐龍本第八章
         另外,每個Process所需要的記憶體總合,也可能大於實體記憶體,因此需要另
         外用二次儲存裝置充當虛擬記憶體(Virtual Memory),但是二次儲存裝置的速
         度肯定很慢,因此如何做到對虛擬記憶體最小的依賴,盡量避免Page Fault(電
         腦在主記憶體中找不到資料,而要去二次記憶體找,就稱為Page Fault)
         防止Thrashing的發生(因為Virtual Memory演算法不當,造成幾乎每次存取都要
         依賴二次記憶體,就是Thrashing),以達到效能最佳化,也是個學問 => 第九章




Thread :在同一個Process底下,有許多自己的分身,就是Thread,中文又翻成執行緒。
         以往一個Process一次只能做一件事情,因此要一面輸入文字,一面計算字數,
         這種事情是不可能的。但是有了Thread之後,可以在同一個Process底下,讓輸
         入文字是一個Thread,計算文字又是另外一個Thread,對CPU來說兩個都是類似
         一個Process,因此兩個可以同時做。
         又一個Process底下有數個Thread,而一個Process的Global Variable可以讓
         它的所有Thread共享,也就是所有Thread都可以存取同一個Process的Global
         Variable。而每個Thread自己也有自己的專屬Variable。 => 恐龍本第四章
         但是,如果有兩個Thread要存取同一個Global Variable,有可能發生問題,
         也就是說可能會存取到錯的值(例如兩個Thread同時要對一個Variable做加減,
         最後那個答案可能會是錯的),這就是Synchronization問題 =>恐龍本第六章
         又,每一個Thread之間可能會互搶資源,而造成死結(Deadlock),只要以下四
         個條件都滿足就有死結。(1)這個資源不能同時給兩個人用 (2)有一個人拿了一
         個資源,又想拿別人的資源 (3)如果一個人占了茅坑不拉屎,占用資源很久,仍
         不能趕他走 (4)A等B,B等C,C等D,D又等A 等成一圈。 要解決這種狀況有
         Avoid(預防) 或 避免(Prevent)兩種方式,破除以上四種其中一種即可。
         => 恐龍本第七章


創作者介紹

Frank's 資訊科技潮流站

finalfrank 發表在 痞客邦 PIXNET 留言(8) 人氣()


留言列表 (8)

發表留言
  • tpy
  • 解釋的很棒! 感謝
  • 寫得真好,一看就懂
  • 寫得真好,一看就懂
    謝謝了
  • teaparty
  • 解釋的很清楚, 謝謝你^^

    此外, 想請問若以java中概念來看, 是否可將program視為class, process視為object而thread視為class中的function呢?
  • 不過我的經驗也把class當作thread來寫耶...
    JAVA process的運作方式,我在學的時候比較沒有探討到,可能還要再研究..

    finalfrank 於 2011/09/12 13:22 回覆

  • 初學者
  • 感謝作者的心得分享,謝謝。
  • Eason
  • 寫的精簡扼要, 感覺一次走完恐龍本全部摘要, 謝謝您的整理分享!!
  • Viclin Vic
  • 回應#3大大(雖然是一年前@@)

    雖然沒學過java不過很顯然class object是物件導向的表達方式
    他與process存在方式不能畫上等號...
    作者寫的是program execute時的狀況
    program > ram > process > thread
    如果沒使用multi-thread 在執行function時依然是sigle thread
    也就是在執行function時沒法做其他事

    如果有錯煩請指正@@
  • 其實喔,class和process,thread,program是兩碼子事,一個是物件導向程式設計,一個是作業系統,兩個完全無關,當初我其實可以不用探討太深....

    finalfrank 於 2012/11/02 11:49 回覆

  • 訪客
  • 講的很棒~根本是在已故式方式敘述XD
  • 柏承
  • 講得很棒
    觀念超清晰
    謝謝
找更多相關文章與討論