模拟进程创建、终止、阻塞、唤醒原语_操作系统基础8-进程及进程控制
進程(Process) 的定義
從不同的角度,進程可以有不同的定義,傳統典型的定義:
- 進程是程序的一次執行過程。 或者:一個正在執行的程序的實例
- 進程是一個程序及其數據在處理機上順序執行所發生的活動
- 進程是具有獨立功能的程序在數據集合上運行的過程,它是系統進行資源分配和調度的一個獨立單位
通過htop命令顯示的進程列表
進程和程序的關系
- 進程是一個動態概念,程序是一個靜態概念。
- 進程具有并發特征,程序沒有(程序全部是順序的)。
- 進程是競爭資源的基本單位。
- 一個程序對應多個進程,一個進程為多個程序服務。
進程的狀態(State)
創建(New): 進程正在被建立的階段。
就緒(Ready ):當進程已分配到除CPU以外的所有必要資源后,只要再獲得CPU,便可立即執行,進程這時的狀態稱為就緒狀態。在一個系統中處于就緒狀態的進程可能有多個,通常將它們排成一個隊列,稱為就緒隊列
運行(Running ):進程占有CPU,并在CPU上運行指令。
等待/阻塞(Waiting /blocked):正在執行的進程由于發生某事件而暫時無法繼續執行時,便放棄處理機而處于暫停狀態,亦即進程的執行受到阻塞,把這種暫停狀態稱為阻塞狀態,也稱為等待狀態或封鎖狀態。致使進程阻塞的典型事件有:請求I/O,申請緩沖空間等。通常將這種處于阻塞狀態的進程也排成一個隊列。有的系統則根據阻塞原因的不同而把處于阻塞狀態的進程排成多個隊列。
終止(Terminated ):進程已經完成了執行。
進程的五種基本狀態及轉換
進程控制塊(PCB)
進程控制塊(Process Control Block PCB) 是操作系統核心中一種數據結構,用來表示進程狀態,記錄進程的外部特征,描述進程的運動變化過程。同時,操作系統可以利用PCB來控制和管理進程。
一般情況下,PCB中包含以下內容:
- 標識信息:
用于存放唯一標識該進程的信息。系統分配的標識號、系統分配的進程組標識號、用戶定義的進程名、用戶定義的進程組名。
- 現場信息:
用于存放該進程運行時的處理器現場信息。用戶可見寄存器內容:數據寄存器、地址寄存器、控制與狀態寄存器內容:PC(程序計數器)、IR(指令寄存器)、PSW(程序狀態字)。棧指針內容:核心棧與用戶棧指針
- 控制信息:
用于存放與管理、調度進程相關的信息。調度相關信息:狀態、等待事件/原因、優先級。進程組成信息:代碼/數據地址、外存映像地址。進程隊列指引元:進程隊列指針、父子兄弟進程指針。
進程通信相關信息:消息隊列、信號量、鎖。進程處理器使用信息:占用的處理器、時間片、處理器使用時間/已執行總時間、記賬信息。進程特權信息:如內存訪問權限、處理器特權。進程資源清單信息:如正占有的資源、已使用的資源。
進程控制塊PCB
PCB的作用
PCB 可以被操作系統中的多個模塊讀或修改,如被調度程序、資源分配程序、中斷處理程序以及監督和分析程序等讀或修改。 操作系統是根據 PCB來對并發執行的進程進行控制和管理的,它是操作系統中最重要的記錄型數據結構。
Linux 系統中PCB結構用 task_struct 數據結構, Windows系統的PCB:EPROCESS,
PCB使一個在多道程序環境下不能獨立運行的程序(含數據),成為一個能獨立運行的基本單位, 一個能與其它進程并發執行的進程。
進程的組成
PCB、程序段、數據段組成了進程實體,也叫進程映像。一般情況下,我們把進程實體就簡稱為進程,所謂創建進程,實質上創建進程實體中的PCB;而撤銷進程,實質上就是撤銷進程實體中的PCB。
進程上下文(context)
除了進程實體(進程映像),進程的執行還需要環境支持,包括CPU現場和Cache中的執行信息, 操作系統中的進程物理實體(代碼和數據等)和支持進程運行的環境合成進程上下文,用于刻畫進程的執行情況,進程在當前上下文中運行。
在前面的操作系統基礎4我們已經說過關于CPU的內核模式與用戶模式。在操心系統基礎6也已經說過關于中斷。 正是有了不同運行狀態的劃分,才有了上下文的概念。
用戶空間的應用程序,通過系統調用,進入內核空間。這個時候用戶空間的進程要傳遞很多變量、參數的值給內核,內核模式運行的時候也要保存用戶進程的一些寄存器值、變量等。所謂的“進程上下文”,可以看作是用戶進程傳遞給內核的這些參數以及內核要保存的那一整套的變量和寄存器值和當時的環境等。
硬件通過觸發信號,導致內核調用中斷處理程序,進入內核空間。這個過程中,硬件的一些變量和參數也要傳遞給內核,內核通過這些參數進行中斷處理。所謂的“中斷上下文”,其實也可以看作就是硬件傳遞過來的這些參數和內核需要保存的一些其他環境(主要是當前被打斷執行的進程環境)。
進程上下文可以劃分為:
(1)用戶級上下文:用戶程序塊/用戶數據區/用戶堆棧/用戶共享內存組成的用戶空間信息
(2)寄存器上下文:即進程的現場信息,包括PSW/棧指針/通用寄存器。
(3)系統級上下文:由進程控制塊(進程的狀態)、內存管理信息(進程頁表或段表)和系統核心棧(進程內核態運行時的工作區)等操作系統管理進程需要的信息。
用戶級上下文地址空間和系統級上下文地址空間一起構成了一個進程的整個存儲器映像。
進程的組織方式
把處于同一狀態的所有進程的PCB鏈接在一起的數據結構稱為進程隊列,有兩種常用的隊列組織方式:
(1)鏈接方式:即把具有相同狀態的進程的PCB分別通過鏈接指針連接成一個隊列,系統為每個隊列設置隊列標志以便標識和識別隊列。這樣,可以形成就緒隊列、若干個阻塞隊列和空白隊列等。對其中的就緒隊列常按進程優先級的高低排列,把優先級高的進程的 PCB 排在隊列前面。此外,也可根據阻塞原因的不同而把處于阻塞狀態的進程的 PCB 排成等待 I/O 操作完成的隊列和等待分配內存的隊列等。
(2)索引方式:系統根據所有進程的狀態建立幾張索引表。例如,就緒索引表、阻塞索引表等,并把各索引表在內存的首地址記錄在內存的一些專用單元中。在每個索引表的表目中,記錄具有相應狀態的某個 PCB 在 PCB 表中的地址。
進程控制
進程控制對應的進程隊列模型
進程控制的主要功能是對系統中的所有進程實施有效的管理,它具有創建新進程、撤銷已有進程、實現進程狀態轉換等功能。
簡化理解:進程控制就是要實現進程狀態的轉換。
- 進程創建:進程列表加一項,申請PCB并初始化,分配唯一進程標識符,建立映像,分配資源,移入就緒隊列
- 進程撤銷:從隊列中移除,歸還資源,撤銷標識符,回收PCB,移除進程表項(先要撤銷子進程)
- 進程阻塞:保存現場信息,修改PCB,移入等待隊列,轉向進程調度程序調度其它進程執行
- 進程喚醒:等待隊列中移出,修改PCB,移入就緒隊列(該進程優先級高于運行進程,則重新設置調度標志)
隊列管理模塊是操作系統實現進程控制管理的核心模塊。進程與資源調度圍繞進程隊列展開。
操作系統建立多個進程隊列,如只有一個進程的運行隊列、按照優先級或FCFS排列的就緒隊列、等待I/O操作完成的隊列、等待信號量的隊列等。按需組織為先進先出隊列與優先隊列
當發生某個事件使進程狀態發生轉換時,此進程退出所在隊列進入另一個隊列。
原語:用原語實現進程控制。原語的特點是執行期間不允許中斷,只能一氣呵成。這種不可中斷的操作即原子操作。原語采用“關中斷”指令和“開中斷指令”實現。關中斷指令執行后,外部中斷信號將被忽略,直到開中斷執行。
進程控制會導致進程狀態的轉換。原語要做的三類事情:
1. 更新PCB中的信息(如修改進程狀態標志、將運行環境保存到PCB、從PCB恢復運行環境)
a. 所有的進程原語一定都會修改進程狀態標志
b. 剝奪當前運行進程的CPU使用權必然需要保存其運行環境
c. 某進程開始運行前必然要恢復其運行環境。
2. 將PCB插入合適的隊列
3. 分配/回收資源
總結
以上是生活随笔為你收集整理的模拟进程创建、终止、阻塞、唤醒原语_操作系统基础8-进程及进程控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在安卓上使用PC软件手机如何使用电脑
- 下一篇: win7远程桌面连接_Windows10