(PCB)进程控制块
2019獨角獸企業重金招聘Python工程師標準>>>
1.Unix為了節省PCB所占主存,PCB分為2部分:
a.常駐內存部分:Proc結構。包含進程調度所必需的信息;
proc結構包含了以下主要幾方面的內容:
標識(identification):每個進程有一個唯一的進程ID(PID),屬于特定的某進程組。
較新版本的UNIX還會給每個進程分配一個會話ID(session ID)。
與該進程u區映射的內核地址映射表(kernel address map)的位置。
當前進程狀態。
前向指針和后向指針,將進程鏈接到調度隊列,或將阻塞的進程鏈接到睡眠隊列。
b.非常駐內存部分:User結構。包含進程運行時才要用到的更多其他信息,它隨著用戶程序和數據部分換進/換出主存;
c.User區的字段只能由正在運行的進程cun去。即只有占用CPU的進程才能訪問屬于當前進程的私有User區。
2.整個系統能夠有一個進程表,稱為Proc數組。Unix系統最多有50個進程;
3.每一個進程有專用的User區,但是核心根據進程頁表,通過地址映射機構,可以訪問當前進程的User區(好像系統中僅有一個User區)
進程執行過程》
執行一個PE文件,操作系統會為它創建一個4G(32位)大小的虛擬存儲空間,然后填寫PCB進程控制塊有關該進程的信息,而在進程控制塊中,有一部分(proc)會常駐在內存中,其余保存在磁盤中,等到需要使用時,通過內存映射表,把磁盤上的內容拷貝到主存中。當進程處于休眠狀態,被cpu調起時,cpu通過讀取常駐內存的proc結構內的內容,獲取該進程的上下文,上次運行的狀態 關鍵字 : MMU ,PE,PCB,PROC
進程控制塊包含三類信息 1.標識信息。用于唯一地標識一個進程,常常分由用戶使用的外部標識符和被系統使用的內部標識號。幾乎所有操作系統中進程都被賦予一個唯一的、內部使用的數值型的進程號,操作系統的其他控制表可以通過進程號來交叉引用進程控制表。常用的標識信息包括進程標識符、父進程的標識符、用戶進程名、用戶組名等。 2.現場信息。用于保留一個進程在運行時存放在處理器現場中的各種信息,任何一個進程在讓出處理器時必須把此時的處理器現場信息保存到進程控制塊中,而當該進程重新恢復運行時也應恢復處理器現場。常用的現場信息包括通用寄存器的內容、控制寄存器(如PSW寄存器)的內容、用戶堆戰指針、系統堆餃指針等。 3.控制信息。用于管理和調度一個進程。常用的控制信息包括:l)進程的調度相關信息,如進程狀態、等待事件和等待原因、進程優先級、隊列指引元等2)進程組成信息,如正文段指針、數據段指針:引進程間通信相關信息,如消息隊列指針、信號量等互斥和同步機制4)進程在輔存儲器內的地址5)CPU資源的占用和使用信息,如時間片余量、進程己占用CPU的時間、進程己執行的時間總和,記賬信息6)進程特權信息,如在內存訪問和處理器狀態方面的特權7)資源清單,包括進程所需全部資源、已經分得的資源,如主存資源、I/0設備、打開文件表等。 ●隊列:把處于同一狀態(例如就緒態)的所有進程控制塊鏈接在一起,這樣的數據結構稱為進程隊列(Process Queues)。 ●進程的創建來源于以下四個事件: 1.提交一個批處理作業。 2.在終端上交互式的登錄。 3.操作系統創建一個服務進程。 4.存在的進程孵化(spawn)新的進程。 ●進程的創建過程如下描述: 1.在主進程表中增加一項,并從PCB池中取一個空白PCB。 2.為新進程的進程映像中的所有成分分配地址空間。對于進程孵化操作還需要傳遞環境變量,構造共享地址空間。 3.為新進程分配資源,除內存空間外,還有其它各種資源。 4.查找輔助存儲器,找到進程正文段并裝入到正文區。 5.初始化進程控制塊,為新進程分配一個唯一的進程標識符,初始化PSW。 6.把進程加入某一就緒進程隊列,或直接將進程投入運行。 7.通知操作系統的某些模塊,如記賬程序、性能監控程序。 ●進程切換的步驟 1.保存被中斷進程的處理器現場信息。 2.修改被中斷進程的進程控制塊的有關信息,如進程狀態等。 3.把被中斷進程的進程控制塊加入有關隊列。 4.選擇下一個占有處理器運行的進程。 5.修改被選中進程的進程控制塊的有關信息。 6.根據被選中進程設置操作系統用到的地址轉換和存儲保護信息。 7.根據被選中進程的信息來恢復處理器現場。
轉載于:https://my.oschina.net/u/2002769/blog/1595531
總結
以上是生活随笔為你收集整理的(PCB)进程控制块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP - windows下编译PHP
- 下一篇: java实现int类型数组元素拷贝