PCB與程序分配資源

2021-09-16 12:49:21 字數 1273 閱讀 1322

pcb(progress control block),程序控制塊。這裡先不討論pcb是什麼,其實程序這個概念本身就是乙個很難理解的概念,當乙個可執行程式被系統執行了以後,就變成了乙個程序。那麼這個程序中到底有什麼東西呢,系統究竟給這個程序分配了哪些資源?另外,程序在記憶體中的儲存是怎麼樣的?

對於乙個程序,它在被執行前其實是乙個可執行程式。這個程式是被放在磁碟上的,當它要被執行的時候,它先被載入到記憶體當中,然後再放入到暫存器中,最後再讓cpu執行該程式,這個時候乙個靜態的程式就變成了程序。

那麼作業系統是怎麼來管理這些程序的呢?作業系統通過乙個雙向鍊錶把程序連起來。但是,對於程序其實它是乙個抽象的概念,系統肯定要通過乙個東西來描述程序,然後才能管理程序。於是pcb就出來了,作業系統通過pcb來描述程序,於是這個雙向鍊錶連線的其實是pcb,這個pcb是個什麼玩意?它就是乙個結構體,用來描述程序,在linux下,就是task_struct結構體。

每個程序執行的時候,都會拿到4g的虛擬記憶體,在32位linux下,其中3g是交給使用者的,1g是交給核心的,而task_struct就是儲存在這1g的核心系統空間中。

另外,我們常說的虛擬位址空間, 其實就是使用者空間。

於是,通過上圖我們可以發現,每個程序的pcb都是存在所有程序共享的核心空間的中,這也就很好理解,我們之前說作業系統管理程序,也就是在核心空間中管理的,在核心空間中通過鍊錶管理所有程序的pcb,如果有乙個程序要被建立,實際上多分配了這麼乙個4g的虛擬記憶體,並在共享的核心空間中的雙向鍊錶中加入了自己的pcb。

我們拿task_strcut結構體來說話,下面這段原始碼注釋,是我從乙個大神那裡copy來的,只是為了方便自己理解

struct task_struct ;
我們可以挑幾個重點的記一下

標識相關:pid,ppid等等

檔案相關:程序需要記錄開啟的檔案資訊,於是需要檔案描述符表

優先順序相關:程序相對於其他程序的排程優先順序

上下文資訊相關:cpu的所有暫存器中的值、程序的狀態以及堆疊上的內容,當核心需要切換到另乙個程序時,需要儲存當前程序的所有狀態,即儲存當前程序的程序上下文,以便再次執行該程序時,能夠恢復切換時的狀態,繼續執行。

狀態相關:程序當前的狀態,說明該程序處於什麼狀態

訊號相關:程序的訊號處理函式,以及記錄當前程序是否還有待處理的訊號

i/o相關:記錄程序與各種i/o裝置之間的互動

程序與執行緒 1 程序狀態 PCB

參考哈工大李治軍老師公開課。程序 就是正在被計算機執行的程式,比如word,ppt等,都是乙個程序。計算機系統在某乙個時刻,當只有乙個cpu工作時,它只執行乙個程序,但是使用者在使用計算機時回開啟多個進行,這樣就涉及到了程序的不同狀態。程序可以被分為5個狀態,分別是 新建態 就緒態 執行態 終止態 ...

pcb結構鍊錶 程序1 0 程序的概念與PCB

程序就是執行中的程式,但這個概念是抽象的,我們應該更深入 更具體的學習程序 在學習程序之前,我們首先應該對作業系統有乙個初步的了解 任何計算機系統都包含乙個基本的程式集合,稱為作業系統 operator system 作業系統的乙個主要功能就是管理所有的軟硬體資源,我們可以通過乙個例子來理解 管理 ...

程序與PCB的關係如何看???

為什麼說,系統通過pcb來感知和管理程序?對於下面一句話的理解 1.當排程程式排程到某程式執行時,只能根據該程序pcb中記錄的程式和資料在記憶體或外村中的始位址指標,找到相應的程式和資料,在程序執行過程中,當需要訪問檔案系統中的檔案或i 0裝置時,也都需要借助於pcb中的資訊,另外,還可根據pcb中...