操作系統的五大基本功能
-
處理器管理:處理器的分配和運行都是以進程為基本單位
-
存儲器管理:對內存進行分配、保護和擴充
-
設備管理
-
文件管理
-
用戶接口:cmd
核心態和用戶態
為了避免操作系統以及其他的關鍵數據收到用戶程序
有意或無意的破壞,通常將 處理器的執行狀態
分為 用戶態
和 核心態
。
-
核心態: 操作系統管理程序執行時機器所處的狀態,它具有較高的特權,能執行包括
特權指令
的一切指令,能訪問寄存器和存儲器 -
用戶態: 用戶程序執行時機器說處於的狀態,只能執行規定的指令,只能訪問指定的存儲區和寄存器
特權指令,只能是操作系統內核調用的命令,不允許用戶直接使用,如 IO 指令,清除內存指令。
划分用戶態和和心態以后,兩類程序和各自的存儲空間被嚴格的划分了,用戶態程序不能調用核心態程序,而是通過訪問核心態的命令,引起中斷,由中斷系統轉入操作系統中的相應程序。
中斷機制負責保護和恢復中斷現場的信息,轉移控制權到相應的程序。
windows中每個運行的程序都是一個進程,每一個進程都會創建一個或多個線程,這些線程稱之為軟件線程。一個進程至少有一個線程,稱為主線程。
硬件線程,也稱之為邏輯內核或邏輯處理器,windows將每一個硬件線程識別為一個可調度的邏輯處理器,每一個邏輯處理器可以運行軟件線程的代碼,windows調度器可以決定將一個軟件線程賦給一個硬件線程,通過這種方式均衡每一個硬件線程的工作負載,以達到並行優化的作用。
打個比方,如果把硬件線程看作是泳道,那么軟件線程就是在泳道中游泳的人。
進程的概念
-
在計算機操作系統中,進程是資源分配的基本單位,也是獨立運行的基本單位。所以人們還可以使用進程的觀點來研究操作系統。
-
進程的概念:在多道程序環境下,程序的並發執行破壞了程序的封閉性和可再現性,因此程序活動不再是處於一個封閉的系統中,程序的運行出現了很多的新特征,在這種情況下,程序這種靜態的概念,已經不能如實反映程序活動的這些特征了。為此引入了一個新概念 --- 進程。
-
進程是一個程序在一個數據集合上的運行過程,是系統進行資源分配和調度的一個獨立單位。進程是一個動態的概念,程序是一個靜態的概念。進程包含了程序段和數據段以及進程控制塊(PCB),而程序是一個有序代碼的集合,無執行意義。
-
進程由
進程控制塊
,程序段
,數據段
三部分構成 -
進程是程序一次執行過程
系統吞吐量
系統的吞吐量是指的單位時間內 CPU
完成作業的數量。對於長作業來說,由於它占用較長的 CPU處理時間
,因此會導致系統的吞吐量下降,而對於短作業來說,則正好相反。
PCB (進程控制塊)
PCB是進程存在的唯一標識符,不同的操作系統,內部保存的東西是不同的,
- 進程當前的狀態
- 進程隊列指針,用於記錄PCB中下一個
PCB
的地址,還可以組成多個隊列,如就緒隊列,阻塞隊列等。 - 程序和數據地址
- 程序優先級
- CPU 現場保護:當進程某些原因被釋放掉了,
cpu現場信息
就會被保存在PCB
的該區域,以便進程獲得處理器能繼續執行。 - 通信信息:該進程在執行過程中,需要與別的進程發生的信息交換情況
- 家族l聯系:進程創建的子進程之間的關系,形成一個進程家族樹
PCB 是為了保證程序的並發進程,創建進程實際上就是創建了進程的 PCB,而撤銷進程實際上就是撤銷了進程的 PCB
一.並行和並發的區別
-
並行是指的兩個或多個事件在同一個時刻發生
-
並發是指的兩個或多個事件在同一時間間隔發生,並發是
宏觀上
在一段時間內,有兩個或多個時間同時發生。
二.進程的狀態有哪些
- 就緒狀態: 已經獲得了除處理器以外的所有資源,一旦獲得處理器,就可以立即執行
- 執行狀態: 指已經獲得了必要的資源,並且正在CPU上運行
- 阻塞狀態: 指正在執行的程序,因為某些事件而暫時無法執行(如等待IO),當進程為阻塞狀態的時候,即使把處理器分配給該線程他也無法運行
- 創建狀態: 進程正在被創建,但是尚未轉到就緒狀態,申請空白的
PCB
並向PCB
中填寫一些控制和管理進程的信息,創建完成以后轉為就緒狀態 - 結束狀態: 進程正在從系統中消失,可能是正常執行完畢,也有可能是其他原因退出運行
這些狀態轉換的原因
-
就緒---執行狀態:一個程序被進程調度程序選中
-
執行---阻塞狀態:請求並等待某個事件的發生
-
執行---就緒狀態:時間片用完,或者是搶占調度程序中,有更高優先級的進程轉變為就緒狀態。
-
阻塞---就緒狀態:進程因為等待的某個條件發生而被喚醒
並非所有的轉化都是可逆的,進程即不能從阻塞狀態變成執行狀態,也不能由就緒狀態轉成阻塞狀態
只有從執行狀態變成阻塞狀態是主動觸發的,其他的情況都是被動的。
三.進程之間的切換
進程之間的切換是指處理器從一個進程的運行轉到另一個進程的運行。
-
保存處理及上下文信息
-
更新
PCB
信息 -
把進程的
PCB
移入相應的隊列,如就緒、某事件的阻塞隊列等等 -
選擇另一個進程執行,更新其
PCB
-
更新內存管理的數據結構
-
恢復處理器的上下文信息
進程的切換, 一定會產生中斷,即從用戶狀態進入內核態,然后再從內核態回到用戶態。
進程的調度
進程調度的功能
-
記錄進程的狀態和相關情況: 為了實現進程的調度,進程管理模塊必須將系統中各個進程的執行情況和狀態記錄到各個進程的
PCB
中,同時要根據進程的狀態特征和資源需求等信息,將進程的PCB
組織成相應的隊列,並根據運行情況將進程的PCB
在不同的隊列之間轉換,進程調度模塊通過PCB
的變化來掌握系統中所有進程的執行情況和狀態。 -
選擇獲得處理器的進程: 根據一定策略,選擇一個處於就緒狀態的進程,使其獲得處理器執行。
-
處理器的分配: 當正在運行的進程由於某種原因要放棄處理器時,進程調度程序應該保護當前進程的cpu現場,將其運行狀態由運行變成就緒或者阻塞,並插入到相應的隊列中去;同時恢復程序還應根據一定的原則,從就緒隊列中選出一個進程,把該進程從就緒隊列中移除,回復其 cpu線程,並將其狀態改為運行。
四.進程線程的區別
- 進程是資源分配的基本單位,也是獨立運行的基本單位,這是進程與線程最主要的區別
線程的意義:
為了讓進程並發的執行,操作系統還必須進行一系列的操作,比如創建進程、撤銷進程、進程切換,執行這些操作的時候,操作系統還要為這些進程分配資源,回收資源,為運行進程保護現場信息等。這些都需要付出較多的時空開銷。
進程的兩個基本屬性
-
資源分配的基本單位
-
被處理器獨立調度和分配的單元
為了減少操作系統的開銷,不少操作系統的研究者就讓線程去完成第二個屬性,讓進程只完成第一個屬性
線程的定義
如果說操作系統中引入進程的目的是使多個程序並發執行,以改善資源利用率和提高系統的吞吐量,那么線程的引入就是為了減少程序並發時產生的時空開銷,使操作系統具有更好的並發性。
線程是進程內一個相對獨立,可調度的執行單元,他自己基本上不擁有資源,只擁有一點在運行時必不可少的資源(如程序計數器,一組寄存器和棧),但是他可以和同一個進程內的其他線程共享進程內的所有資源
-
線程是進程內的一個執行單元,比進程更小
-
線程是一個可調度實體
-
線程本身不能運行,只能包含在進程中
線程的實現
-
內核級線程: 由操作系統內核完成創建和撤銷工作的線程,在支持
內核級線程
的操作系統中,內核維護進程和線程的上下文信息,並完成線程的切換,一個內核級線程的IO
操作阻塞,並不會影響其他線程的操作,這個時候時間片分配的對象是線程,所以有多個線程的進程將會獲得更多的處理器時間。 -
用戶級線程: 用戶級線程指不依賴於操作系統核心,而是應用進程通過線程庫來控制和管理線程。用戶級線程在應用程序的內部進行,通常采用非搶占式和更簡單的規則,也無須用戶態和內存態的切換,因此特別快。但是當一個線程阻塞的時候,整個程序都必須等待。
進程和線程的比較
-
調度: 在傳統的系統中,擁有資源和獨立調度的基本單位都是進程,而在引入了線程的操作系統中,進程是用於資源的獨立單位,線程是獨立調度的基本單位。同一進程內線程的切換不會引起進程的切換。
-
擁有資源: 無論是傳統的操作系統還是支持線程的操作系統,資源分配的基本單位都是進程,線程不用於系統資源(也不是一點沒有),但是線程可以訪問所屬進程的系統資源。
-
系統開銷: 由於創建和撤銷進程的時候,都要為止分配資源和回收資源,比如內存和IO,所以操作系統所付出的開銷遠大於創建和撤銷線程的開銷,類似的進程切換的時候,涉及到當前CPU環境的保存和新調度到的CPU環境的設置。而線程的切換,只需要保存和設置少量的寄存器內容,因此開銷很小,而且同一個進程內的多線程共享進程的地址空間,因此多線程之間的通信非常的容易實現,甚至無需操作系統的干預。
五.為什么切換進程比切換線程代價大
六.進程之間的通信方式
進程通信是指進程之間的信息交流,進程的互斥和同步就是一種進程間的通信方式。由於進程互斥和同步交換的信息量較少且效率較低,因此這兩種通信方式稱為低級通信方式。
-
共享存儲器系統: 為了輸出大量的數據,在存儲器中划出一塊共享存儲區,多個進程可以對共享存儲區進行讀寫來實現通信。
-
消息通信系統: 在消息傳遞系統中,進程間以消息為單位交換數據,用戶直接通過系統提供的一組通信命令實現通信。
- 直接通信:發送進程直接把消息發送給接受進程,並將它掛在接收進程的消息緩沖隊列上,接收進程從消息緩沖隊列中取得消息
- 間接通信:發送進程將消息發送給某個中間實體中(通常稱為信箱),接收進程從中取得消息,這種方式又稱為信箱通信方式。
-
管道通信系統: 管道是用於連接讀進程和寫進程以實現他們之間通信的共享文件。向
管道
寫進程以字符流形式,將大量的數據送入管道,而接受管道輸出的進程 (即讀進程)可以從管道中接收數據。(管道是一個共享文件,不能單純的從字面上理解為一個傳輸通道) -
信號量: 信號量是一個二元組(s,q)其中
s
是一個具有非負初值的整型變量,q
是一個初試狀態為空的隊列。- s: 大於0 時,表示系統中可用資源的數目,當小於0時,其絕對值表示因請求該類資源而被阻塞的進程數目,除信號量的初始值以外,信號量的值僅能由
P操作
和V操作
改變,操作系統通過利用它的狀態對進程和資源進行管理。
- s: 大於0 時,表示系統中可用資源的數目,當小於0時,其絕對值表示因請求該類資源而被阻塞的進程數目,除信號量的初始值以外,信號量的值僅能由