Linux---淺談進程PCB

在說PCB是什麼之前,我們先了解一下進程到底是什麼。它和程序又有什麼區別?

程序:二進制可執行文件,是一個機器代碼指令和數據的集合,存儲在硬盤裏,是一個靜態的實體。 //指令+數據
進程:是操作系統對一個正在運行的程序的一種抽象,將二進制可執行文件加載到內存裏。 //指令+數據+PCB

那麼PCB到底是什麼呢?

對於多道程序系統來說,其內存中可能存在着多個進程,爲了方便管理這些進程,操作系統內核爲每個進程都建立了一個結構體來保存與其相關的信息。這個結構體就是PCB,也就是進程控制塊,它是進程實體的一部分,存在於進程的高1G空間。
Linux系統是採用鏈式方式來組織PCB的,對於不同的狀態建立起一個進程隊列。在Linux內核中,使用一個名爲task_struct的結構體來描述PCB.
task_struct結構體包含了以下內容:
這裏寫圖片描述
1.進程標識符
每個進程都有進程標識符、用戶標識符、組標識符,那怎樣才能識別不同的進程呢?其實,每個進程都有一個唯一標識自己的Id,即PID。它相當於人的身份證號一樣,通過身份證號可以唯一的確定一個人,同樣的,根據PID可以唯一標識一個進程。PID是內核提供給用戶程序的接口,用戶通過PID對進程發號施令。PID是32位無符號整數,它被順序編號。新創建的進程PID通常是前一個進程的PID加1.然而,爲了與16位硬件平臺的Linux系統保持兼容,在LInux允許最大PID爲32767,當內核在系統上創建第32768個進程時,就必須重新使用已閒置的PID。
2.進程狀態
指明瞭當前進程的狀態,作爲進程調度和對換時時的依據。
kernel源代碼裏定義了進程的如下狀態:
· R 運行狀態(running):表明進程要麼是在運行中要麼是在運行隊列裏。
· S 睡眠狀態(sleeping):意味着進程在等待事件完成,有時叫做可中斷睡眠。
· D磁盤休眠狀態(Disk sleep):不可中斷睡眠狀態,在這個狀態進程通常會等待I/O的結束。
· T 停止狀態(stopped):可以通過發送SIGSTOP信號給進程來停止進程。這個暫停的進程可以通過發送SIGCONT信號讓進程繼續運行。
· X 死亡狀態(dead):只是一個返回狀態,不會在任務列表裏看到。
· Z 殭屍狀態(zombie):當進程退出並且父進程沒有讀取到子進程退出的返回代碼時就會產生殭屍狀態。殭屍進城會以終止狀態保持在進程表中,會一直等待父進程讀取退出狀態信息。
3.進程優先級
用於描述進程使用處理機優先級別的一個整數,優先級高的進程先獲得處理機資源。
4.程序計數器
用於保存程序中即將被執行的下一條指令的地址。
5.內存指針
包括程序代碼和進程相關數據的指針,還有和其他進程共享內存塊的指針。
6.上下文數據
進程執行時處理器的寄存器中的數據。當進程暫停時,處理機狀態必須保存到task_struct結構體中,當該進程被重新調度再次運行時再從中恢復上次運行時的環境,即恢復寄存器和堆棧的值。
7.I/O狀態信息
包括顯式的I/O請求、分配給進程的I/O設備(例如:磁帶驅動器)和被進程使用的文件列表等。
8.審計信息
可以包括處理器時間總和、使用的時鐘數總和、時間限制、審計號等。

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