1.Unix爲了節省PCB所佔主存,PCB分爲2部分:數組
a.常駐內存部分:Proc結構。包含進程調度所必需的信息;session
proc結構包含了如下主要幾方面的內容:數據結構
標識(identification):每一個進程有一個惟一的進程ID(PID),屬於特定的某進程組。ide
較新版本的UNIX還會給每一個進程分配一個會話ID(session ID)。性能
與該進程u區映射的內核地址映射表(kernel address map)的位置。spa
當前進程狀態。操作系統
前向指針和後向指針,將進程連接到調度隊列,或將阻塞的進程連接到睡眠隊列。指針
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.根據被選中進程的信息來恢復處理器現場。