進程:多任務系統的產物


很久很久以前,是沒有進程這個東西的。那時候的操作系統只能把要做的工作排好隊,做完這件再做下一件,最多也就加個優先級,哪個關係好就先做哪一個。於是那些想一邊聽歌一邊寫程序的程序員們便不幹了,開始修理那個操作系統,使之能同時運行多個程序。於是進程就出現了:它就是一個程序在數據集合上的一次執行。
因爲突然變得僧多粥少了,所以每個進程只好做一些額外的事情:在別人使用之前把自己的東西收拾好,下次輪到自己時再擺出來。爲了保存這些額外的東西,進程的結構也發生了相應的變化。一個進程被分成三大部分:代碼段、數據段和PCB(進程控制塊)。
我們保存瞭如下信息:

l   進程標識符(操作系統用於識別進程的唯一標識)
l   處理機狀態(主要是通用寄存器,指令寄存器,PSW和用戶棧指針)
l   進程調度信息(狀態、優先級,被阻塞原因和其他一些亂七八糟的東西)
l   進程控制信息(同步信息、代碼段和數據段的信息、資源清單和指向下一個PCB的指針)
操作系統正是通過PCB來管理這多個進程。在這樣的系統裏,進程既是操作系統獨立調度和分派的基本單位,又是一個可擁有資源的獨立單位。

線程:進程的再分身

好了,現在程序員可以一般聽歌一邊寫程序了。可是不幸的或者說是幸運的,新的問題出現了。如果多個進程間使用很多相同數據的話,實在是太浪費了。我們當然不能允許這樣的事情持續下去,所以線程出現了。同一個進程下可以擁有多個線程,它們共享這個進程的資源,它們之間的切換也不再需要PCB,而只需要極少一點資源就可以了。在這樣的操作系統裏,線程變成了系統調度和分派的基本單位。

簡單的說進程和線程有如下不同:

l         進程可以擁有資源,線程共享進程擁有的資源
l         進程間的切換必須保存PCB,同個進程的多個線程間的切換不用那麼麻煩

最後我們以一個實例來作爲本文的結束:

當你在一臺PC上打開兩個QQ時,每一個QQ是一個進程;而當你在一個QQ上和多人聊天時,每一個聊天窗口就是一個線程。

發佈了18 篇原創文章 · 獲贊 12 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章