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)兩種方式,破除以上四種其中一種即可。
=> 恐龍本第七章
- 12月 04 週六 201023:40
Program / Process / Thread 的差別
文章標籤
全站熱搜

解釋的很棒! 感謝
寫得真好,一看就懂 謝謝了
解釋的很清楚, 謝謝你^^ 此外, 想請問若以java中概念來看, 是否可將program視為class, process視為object而thread視為class中的function呢?
不過我的經驗也把class當作thread來寫耶... JAVA process的運作方式,我在學的時候比較沒有探討到,可能還要再研究..
感謝作者的心得分享,謝謝。
寫的精簡扼要, 感覺一次走完恐龍本全部摘要, 謝謝您的整理分享!!
回應#3大大(雖然是一年前@@) 雖然沒學過java不過很顯然class object是物件導向的表達方式 他與process存在方式不能畫上等號... 作者寫的是program execute時的狀況 program > ram > process > thread 如果沒使用multi-thread 在執行function時依然是sigle thread 也就是在執行function時沒法做其他事 如果有錯煩請指正@@
其實喔,class和process,thread,program是兩碼子事,一個是物件導向程式設計,一個是作業系統,兩個完全無關,當初我其實可以不用探討太深....
講的很棒~根本是在已故式方式敘述XD
講得很棒 觀念超清晰 謝謝
想請問~~什麼是恐龍本啊?!?!?!
回樓上 我沒看過,但猜是這一本 http://codex.cs.yale.edu/avi/os-book/OS10/index.html