進程/線程要點

進程與PCB

    進程:進程是程序的一次執行過程,是系統進行資源分配和調度的一個獨立單位。

    進程實體(進程映像):由程序段、相關數據段和PCB三部分構成。進程是動態的,進程實體是靜態的。

    PCB(進程控制塊):系統利用PCB來描述進程的基本情況和運行狀態,進而控制和管理進程;所謂創建進程,實際上是創建進程映像中的PCB;PCB是進程存在的唯一標誌。

  • 進程的狀態

    進程有5種狀態,其中前3種是基本狀態。

    (1)運行態:進程正在處理機上運行。在單處理機的情況下,任一時刻最多隻有一個進程處理運行態。

    (2)就緒態:進程已經獲得除處理機之外的一切所需資源,一旦得到處理機就可以進入運行態。

    (3)阻塞態(等待態):進程正在等待某一事件/某一資源而暫停運行。這時候,即使處理機空閒,該進程也不能進入運行態。

  • 進程的創建過程

    (1)分配ID與PCB:爲新進程分配一個唯一的進程標識號,並申請一個空白的PCB(PCB是有限的)。若PCB申請失敗則創建失敗。

    (2)分配資源:爲新進程的程序和數據、以及用戶棧分配必要的內存空間(在PCB 中體現)。注意:這裏如果資源不足(比如內存空間),並不是創建失敗,而是處於阻塞態。

    (3)初始化PCB:主要初始化(1)標誌信息(2)處理機狀態信息(3)處理機控制信息,以及(4)設置進程的優先級等。

    (4)調度:如果進程就緒隊列能夠接納新進程,就將新進程插入到就緒隊列,等待被調度運行。

    注意,進程的創建是一個原子操作,執行期間不允許中斷,它是一個不可分割的基本單位。

  • 進程的終止

    引起進程終止的事件主要有:

    (1)正常結束

    (2)異常結束:如存儲區越界、非法指令、I/O故障等

    (3)外界干預:如操作員或操作系統干預、父進程請求、父進程終止。

    操作系統終止進程的過程如下:

    (1)根據被終止進程的ID,檢索PCB,從中讀出該進程的狀態

    (2)若被終止進程處於執行狀態,立即終止該進程的執行,將處理機資源分配給其他進程

    (3)若該進程還有子進程,則應將其所有的子進程終止

    (4)將該進程所擁有的資源,或歸還給其父進程或歸還給操作系統

    (5)將該PCB從所在隊列(鏈表)中刪除。

  • 進程之間的切換

    (1)保存處理機上下文,包括程序計數器和其他寄存器。

    (2)更新PCB信息。

    (3)把進程的PCB移入相應的隊列,如就緒、在某事件阻塞等隊列。

    (4)選擇另一個進程執行,並更新其PCB。

    (5)更新內存管理的數據結構。

    (6)恢復處理機上下文。

    注意:“調度”和“切換”的區別:調度是指決定資源分配給哪個進程的行爲,是一種決策行爲;切換是指實際分配的行爲,是執行行爲。一般來說,等有資源的調度,再有進程的切換。

 

  • 線程

    線程是輕量化的進程,是程序執行流的最小單位;由線程ID、程序計數器、寄存器集合和堆棧組成;線程自己不擁有系統資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其他線程共享進程所擁有的全部資源。

  • 進程與線程區別

    (1)一個程序至少有一個進程,一個進程至少有一個線程。線程(Thread)是進程的一個實體,是CPU調度和分派的基本單位。

    (2)進程擁有獨立的內存單元,而多個線程共享內存。從而線程效率更高

    (3)進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程序要比多線程的程序健壯。

    (4)進程切換時,耗費資源較大,效率要差一些。

  • 相比進程,線程有什麼好處

    (1)易於調度。

    (2)提高併發性。通過線程可方便有效地實現併發性。進程可創建多個線程來執行同一程序的不同部分。

    (3)開銷少。創建線程比創建進程要快,所需開銷很少。。

    (4)利於充分發揮多處理器的功能。

 

  • 相比進程,線程有什麼缺點

    (1)線程之間的同步和加鎖控制比較麻煩

    (2)一個線程的崩潰影響到整個程序的穩定性

    (3)線程多了之後,線程本身的調度也是一個麻煩事兒,需要消耗較多的CPU 

 

  •  IPC方式

    (1)管道:半雙工;用於父子、兄弟之間。

    (2)命名管道(FIFO)

    (2)消息隊列:消息鏈表存於內核,每個消息隊列由消息隊列標識符標識;於管道不同的是,消息隊列存放在內核中,只有在內核重啓時才能刪除一個消息隊列;消息隊列的大小受限制。

    (3)信號量(semophore):常用來處理臨界資源的訪問同步問題。臨界資源:爲某一時刻只能由一個進程或線程操作的資源。

    (4)共享內存:可以說是最有用的進程間通信方式,也是最快的IPC形式。

    (5)套接字:可用於不同機器之間。

    (6)信號(Signal)

  • 線程同步方式

    (1)臨界區:當多個線程訪問一個獨佔性共享資源時,可以使用臨界區對象。擁有臨界區的線程可以訪問被保護起來的資源或代碼段,其他線程若想訪問,則被掛起,直到擁有臨界區的線程放棄臨界區爲止。

    (2)互斥量:互斥對象和臨界區對象非常相似,只是其允許在進程間使用,而臨界區只限制與同一進程的各個線程之間使用。

    (3)條件變量:一個線程被掛起,直到某件事件發生。

    (4)信號量:當需要一個計數器來限制可以使用某共享資源的線程數目時,可以使用“信號量”對象。CSemaphore類對象保存了對當前訪問某一個指定資源的線程的計數值,該計數值是當前還可以使用該資源的線程數目。如果這個計數達到了零,則所有對這個CSemaphore類對象所控制的資源的訪問嘗試都被放入到一個隊列中等待,直到超時或計數值不爲零爲止。

    (5)事件:允許一個線程在處理完一個任務後,主動喚醒另外一個線程執行任務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章