作業系統 進程執行緒模型 進程式控制制塊及進程式控制制

  • 2019 年 12 月 21 日
  • 筆記

友情提示:此篇文章大約需要閱讀 3分鐘25秒,不足之處請多指教,感謝你的閱讀。訂閱本站

進程式控制制塊PCB

在作業系統中,為進程定義了一個專門的數據結構,稱為進程式控制制塊PCB。

PCB內容

PCB內容可以分為調度資訊現場資訊兩大部分。

調度資訊供進程使用時使用,描述了進程當前所處的狀況,他包括進程名、存儲資訊、進程號、優先順序、當前狀態、資源清單、「家族」關係、消息隊列指針、進程隊列指針和當前打開的文件等。

現場資訊刻畫了進程的運行情況,由於每個進程都有自己專用的工作存儲區,其他進程運行時不會改變它的內容。

進程的組成

PCB組織

  1. 線性方式:將所有的PCB部分狀態組織在一個連續表(稱為PCB表)中。
    • 優點:簡單,且不需要額外的開銷,適用於進程數且不多的系統。
    • 缺點:需要掃描整個PCB表。
  2. 索引方式:對於具有相同狀態的進程,分別設置各自的PCB索引表,表目為PCB在PCB表(線性表)中的地址。就構成了就緒索引表和等待索引表。
  3. 鏈接方式:對於具有相同狀態的進程PCB,通過PCB中的鏈接字構成一個隊列。按「先進先出」的原則出對,若隊列指針為0,表示該隊列為空。

進程的隊列

  1. 就緒隊列:進程入隊和出隊的次序與處理機調度演算法有關。
  2. 等待隊列:每一個等待事件一個隊列。
  3. 運行隊列:在單CPU系統中整個系統有一個運行隊列。

進程式控制制

作用:就是對進程在這個生命周期中各種狀態之間的轉換進行有效的控制。

原語:通常由若干的指令組成,用來實現某個指定的操作。通過一段不可分割的或不可中斷的程式實現其功能。原語的執行過程必須是連續的,一旦開始執行就不能間斷,直到執行結束。原語是作業系統的可行,在管態下執行,並且常駐記憶體。

進程式控制制原語

用於進程式控制制的原語一般有:創建進程、撤銷進程、掛起進程、激活進程、阻塞進程、喚醒進程以及改變進程優先順序等。

  1.  創建原語:一個進程可以使用創建原語創建一個新的進程,前者稱為父進程,後者稱為子進程,子進程又可以創建新的子進程,構成新的子進程,構成新的父子關係。建立進程式控制制快PCB:先申請一個空閑的PCB區域,將有關資訊填入PCB,置該進程為就緒狀態,最後將它插入到就緒狀態隊列中去。
  2. 撤銷原語:找到要被撤銷的進程PCB,將它從所在隊列中消去。
  3. 阻塞原語:把進程運行狀態轉換為阻塞狀態。首先應中斷CPU執行,把CPU的當前狀態保存到PCB的現場資訊中,把它插入到該事件的等待隊列中去。
  4. 喚醒原語:京城因為等待時間的發生而處於等待狀態,當等待事件完成後,就用喚醒原語將其轉換為就緒狀態。具體操作過程:在等待隊列中找到該進程,置該進程的當前狀態為就緒狀態,然後將它從等待隊列中撤去並插入到就緒隊列中排隊,等待調度執行。

UNIX類作業系統的進程式控制制操作

父進程調用fork()函數。

  1. 為子進程分配一個空閑的proc結構(進程描述符)。
  2. 賦予子進程唯一標識pid。
  3. 以一次一頁的方式複製父進程用戶地址空間。
  4. 獲得子進程繼承的共享資源的指針。
  5. 子進程就緒,加入調度隊列。
  6. 對紫禁城返回標識符0;向父進程返回子進程的pid。

父進程和新建子進程的區別在於它們有著不同的pid。

fork()函數的執行的特點就像是只被調用一次,卻會返回兩次:一次是在調用進程(父進程)中,一次是在新創建的子進程中。