日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

【操作系统】常用总结

發布時間:2023/12/29 综合教程 49 生活家
生活随笔 收集整理的這篇文章主要介紹了 【操作系统】常用总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基礎知識

操作系統

操作系統(Operation System, OS)是管理和控制計算機硬件與軟件資源的計算機程序,是直接運行在“裸機”上的最基本的系統軟件,任何其他軟件都必須在操作系統的支持下才能運行。

操作系統是計算機系統資源的管理者,分為:

處理機管理
存儲器管理
設備管理
文件管理

操作系統是用戶計算機硬件系統之間的接口,同時也是計算機硬件其他軟件的接口,分為:

命令接口
程序接口

功能:

管理計算機系統的硬件、軟件及數據資源;
控制程序運行;
改善人機界面;
為其他應用軟件提供支持,讓計算機系統所有資源最大限度地發揮作用;
提供各種形式的用戶界面,使用戶有一個好的工作環境;
為其他軟件的開發提供必要的服務和相應的接口等。

特征:

并發:兩個或者多個事件在同一時間間隔內發生;
共享:系統中的資源可供內存中多個并發執行的進程共同使用;
虛擬:把一個物理上的實體變為若干個邏輯上的對應物;
異步:在多道程序環境下,允許多個程序并發執行,但因資源有限,進程的執行不是一貫到底,而是走走停停,以不可預知的速度向前推送,這就是進程的異步性。

基本概念

互斥:進程之間訪問臨界資源時相互排斥的現象;

臨界資源:一次僅允許一個進程使用的資源,如 打印機。
臨界區:每個進程中訪問臨界資源的那段代碼。

并發:同一時間段有幾個程序都處于已經啟動到運行完畢之間,并且這幾個程序都在同一個處理機上運行,但任一個時刻點上只有一個程序在處理機上運行。并發的兩種關系是同步和互斥;
并行:單處理器中進程被交替執行,表現出一種并發的外部特征;在多處理器中,進程可以交替執行,還能重疊執行,實現并行處理,并行就是同時發生的多個并發事件,具有并發的含義,但并發不一定是并行,也就是說事件之間不一定要同一時刻發生;
同步:進程之間存在依賴關系,一個進程結束的輸出作為另一個進程的輸入。具有同步關系的一組并發進程之間發送的信息稱為消息或者事件;

異步:和同步相對,同步是順序執行,而異步是彼此獨立,在等待某個事件的過程中繼續做自己的事,不要等待這一事件完成后再工作

線程是實現異步的一個方式,異步是讓調用方法的主線程不需要同步等待另一個線程的完成,從而讓主線程干其他事情。

多線程:多線程是進程中并發運行的一段代碼,能夠實現線程之間的切換執行;

異步和多線程:不是同等關系,異步是目的,多線程只是實現異步的一個手段,實現異步可以采用多線程技術或者交給其他進程來處理。

發展歷程

手工階段
單道批處理系統
多道批處理系統
分時操作系統
實時操作系統

網絡操作系統和分布式操作系統

網絡操作系統和分布式操作系統的不同之處在于:
在分布式操作系統中,若干臺計算機相互協同完成同一任務;
而在網絡操作系統中,每臺計算機都是相互獨立的,它們并不能相互協同完成同一任務。

CPU的工作狀態

大多數計算機系統將CPU執行狀態分為目態管態
管態就是 supervisor(管理者) mode 翻譯來的。
那么目態呢,其實是 object(目標) mode 翻譯來的。

管態:supervisor(管理者) mode 又叫特權態、系統態或者核心態。CPU在管態下可以執行指令系統的全集。

如果程序處于管態,則該程序就可以訪問計算機的任何資源,即 它的資源訪問權限不受限制。

通常,操作系統在管態下運行。

目態:object(目標) mode又叫常態或用戶態。機器處于目態時,程序只能執行非特權指令,不能直接使用系統資源,也不能改變CPU的工作狀態,并且只能訪問這個用戶程序自己的存儲空間。

科普:為什么叫 object mode 呢?
通常CPU執行兩種不同性質的程序:一種是操作系統內核程序;另一種是用戶自編程序或系統外層的應用程序
對操作系統而言,這兩種程序的作用不同,前者是后者的管理者,因此“管理程序”要執行一些特權指令,而“被管理程序”出于安全考慮不能執行這些指令。
因為管理者需要管理它,它就是管理者的管理目標。所以就叫 object mode

目態(用戶態)→管態(核心態)

系統調用:這是用戶態進程主動要求切換到核心態的一種方式,用戶態進程通過系統調用申請使用操作系統提供的服務程序完成工作。
系統調用機制的核心是使用了操作系統為用戶開放的一個中斷來實現。
異常:當 CPU 在執行用戶態程序時,發生了某些事先不可知的異常,這時會觸發由當前運行進程切換到處理此異常的內核相關程序中,也就轉到了核心態,如 缺頁異常。

I/O設備的中斷:當 I/O 設備完成用戶請求操作后,會向CPU發出相應的中斷信號,這時CPU會暫停執行下一條即將要執行的指令,轉而去執行與中斷信號對應的處理程序,如果先前執行的指令是用戶態下的程序,那么這個轉換的過程自然也就發生了由用戶態到核心態的切換。

例如,硬盤讀寫操作完成,系統會切換到硬盤讀寫的中斷處理程序中,執行后續的操作。

其中,系統調用可以認為是用戶進程主動發起的,異常外部設備中斷則是被動的。

管理功能

處理機管理:

進程控制:在傳統多道程序環境中,要是作業運行,必須先為它創建一個或多個進程,并為之分配必要的資源。當進程運行結束后,立即撤銷該進程,以便能及時回收該進程所占用的各類資源。
進程同步:為多個進程(含線程)的運行進行協調。

進程互斥方式:進程(線程)在對臨界資源進行訪問時,應采用互斥方式。
進程同步方式:在相互合作去完成共同任務的諸進程(線程)間,由同步機構對它們的執行次序加以協調。

進程通信:在多道程序環境下,為了加速應用進程的運行,應在系統中建立多個進程,并且再為一個進程建立若干個線程,由這些進程(線程)相互合作去完成一個共同的任務,而在這些進程(線程)之間又往往需要交換信息。
調度:在后備隊列上等待的每個作業或者進程,通常都需要調度才能執行,調度的任務,即 將處理機分配給它。

存儲器管理:

內存分配:采用靜態和動態兩種方式實現內存分配數據結構,以記錄內存使用情況,按照一定算法分配,對不再需要的內存進行回收。
內存保護:確保每道用戶程序都只在自己的內存空間運行,彼此互不干擾。

地址映射:編譯后的程序的地址分為邏輯地址和物理地址,多道程序環境中,每道程序不可能都從 “0” 地址開始,要保證程序運行,則須將邏輯地址轉換成內存空間中的物理地址。

動態重定位:在程序執行過程中,每當訪問指令或數據時,將要訪問的程序或數據的邏輯地址轉換成物理地址

實現方法:在系統中增加一個重定位寄存器,用來裝入程序在內存中的起始地址,程序執行時,真正訪問的內存地址是相對地址與重定向寄存器中的地址相加之和,從而實現動態重定位。

內存擴充:從邏輯上去擴充內存容量,使用戶所感受到的內存容量比實際容量大得多,或者讓更多的程序能并發執行。

設備管理:

緩沖管理:緩沖區機制能夠有效緩解 CPU 運行的高速性和 I/O 低速性的矛盾。
設備分配:設置設備控制表、控制器控制表等數據結構,能夠了解指定設備當前是否可用,是否忙碌,以及該設備被分配出去,系統是否還安全。
設備處理程序:實現 CPU 和設備管理器之間的通信,由 CPU 向設備控制器發出 I/O 命令,要求它完成指定的 I/O 操作,反之由 CPU 接收從控制器發來的中斷請求,并給予迅速的響應和相應的處理。

文件管理:

文件存儲空間的管理:由文件系統對諸多文件及文件的存儲空間實施統一的管理,對每個文件分配必要的外存空間,提高外存的利用率和文件系統的執行速度。
目錄管理:相當于文件的索引,建立目錄項(文件名、文件屬性、文件在磁盤中的物理位置等),方便用戶查詢檢索。
文件的讀/寫管理和保護:防止未經批準的用戶存取文件、防止冒名頂替存取文件、防止以不正確的方式使用文件。

進程與線程

對于操作系統來說,一個任務就是一個進程(Process),比如打開一個瀏覽器就是啟動一個瀏覽器進程,打開一個記事本就啟動了一個記事本進程,打開兩個記事本就啟動了兩個記事本進程,打開一個 Word 就啟動了一個 Word 進程。
有些進程還不止同時干一件事,比如Word,它可以同時進行打字、拼寫檢查、打印等事情。在一個進程內部,要同時干多件事,就需要同時運行多個“子任務”,我們把進程內的這些“子任務”稱為線程(Thread)

類比:
進程 = 工廠
線程 = 工廠里各個流水線

進程

進程可以認為是程序執行時的一個實例。進程是系統進行資源分配的獨立實體,且每個進程擁有獨立的地址空間。(即 資源的分配和調度的一個獨立單元
進程控制塊(Process Control Block, PCB):保存運行期間進程的數據,PCB進程存在的唯一標志

進程 = 程序 + 數據 + PCB
一個進程無法直接訪問另一個進程的變量和數據結構,如果希望讓一個進程訪問另一個進程的資源,需要使用進程間通信,比如:管道、文件、套接字等。


進程的五種基本狀態及其轉換:

創建狀態:進程正在被創建,尚未轉到就緒狀態,創建進程需要申請一個空白的 PCB,并向 PCB 寫一些控制和管理進程的信息,然后由系統分配資源,將進程轉入就緒狀態。
就緒狀態:進程已處于準備執行的狀態,獲得了除處理機以外的一切所需資源。
執行狀態:進程在處理機上運行。在單處理機環境下,每一時刻最多只有一個進程運行。
阻塞狀態:進程正在等待某一事件(服務請求)而暫停運行,如 等待某資源變為可用(不包括處理機)或等待輸入輸出 I/O 完成,即使處理機空閑,該進程也不能運行。
結束狀態:進程正從系統中消失,這可能是進程正常結束或其他原因中斷退出運行,當進程需要結束運行時,系統首先必須置該進程為結束狀態,然后再進一步處理資源釋放和回收。

注意:后備隊列外存中,而就緒隊列內存中。

進程同步與互斥

PV 操作是一種實現進程互斥與同步的有效方法。PV操作與信號量的處理相關,P 表示通過(荷蘭語 passeren)的意思,V 表示釋放(荷蘭語 vrijgeven)的意思。

具體來源可以查看PV操作的來源

互斥與同步:

互斥:是指某一資源同時只允許一個訪問者對其進行訪問,具有唯一性排它性。但互斥無法限制訪問者對資源的訪問順序,即 訪問是無序的
同步:是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源。


在操作系統中,信號量S是一整數。
S≥0 時,S 表示可供并發進程使用的資源實體數
S<0 時,S 表示正在等待使用資源實體的進程數
建立一個信號量必須說明此信號量所代表的意義并且賦初值。
除賦初值外,信號量僅能通過PV操作來訪問。

信號量 S(semaphore) 代表“資源數”
P 操作的主要動作是:通過(荷蘭語 passeren)(即 讓進程使用資源

S 減 1;

類比:“占用了一個資源”

若相減結果仍大于或等于 0,則進程繼續執行;

類比:“若占用一個資源后,還有多余的資源或者剛好用完資源,那么就代表該進程有資源可以利用,進程也就可以繼續執行

若相減結果小于 0,則該進程被阻塞(掛起),之后放入等待該信號量的等待隊列中,然后轉入進程調度。

類比:“若占用一個資源后,還欠別人資源,那么就代表該進程根本就沒有資源可以用了,所以先欠著,掛個號,等待

V 操作的主要動作是:釋放(荷蘭語 vrijgeven)(即 讓進程釋放資源

S 加 1;

類比:“資源占用完了,物歸原主,釋放資源”

若相加結果大于 0,則進程繼續執行;

類比:“若釋放資源后,資源數大于 0,就代表庫存里的資源充裕,奉還資源后,還有資源可以給你利用,那就繼續占用資源,繼續執行

若相加結果小于或等于 0,則從該信號的等待隊列中釋放一個等待進程(喚醒等待→就緒),然后再返回原進程繼續執行 或轉入進程調度。

類比:“若一個進程結束,釋放資源后,資源數還是欠別人的或者為 0,就代表庫存里的資源很緊張資源剛一釋放就被其他進程一搶而空,所以自己就不能用了,得先來后到把資源給下一個進程用,讓下一個進程就緒
如果執行不需要此資源,那么等自己執行完后(有的執行并不一定需要此資源)把處理機讓給下一個進程用;
如果執行需要此資源,那么轉入進程調度,重新排隊,等等再執行,把處理機讓給下一個進程用,讓下一個進程執行。”

注意:PV 操作對于每一個進程來說,都只能進行一次,而且必須成對使用

代碼化如下:
P 操作:

P(S) {
    S--;
    if(S < 0) {
        保留調用進程CPU現場;
        將該進程的PCB插入S的等待隊列;
        置該進程為“等待”狀態;
        轉入進程調度;
    }
}

V 操作:

V(S) {
    S++;
    if(S <= 0) {
        移出S等待隊列首元素;
        將該進程的PCB插入就緒隊列;
        置該進程為“就緒”狀態;
    }
}

進程通信

根據交換信息量的多少和效率的高低,進程通信分為如下低級通信和高級通信。

低級通信:只能傳遞狀態和整數值(控制信息)。(如 同步互斥工具:PV 操作)

由于進程的互斥和同步,需要在進程間交換一定的信息,故不少學者將它們也歸為進程通信。

特點:傳送信息量小,效率低,每次通信傳遞的信息量固定,若傳遞較多信息則需要進行多次通信。
編程復雜:用戶直接實現通信的細節,容易出錯。

高級通信:提高信號通信的效率,傳遞大量數據,減輕程序編制的復雜度。
提供三種方式:

共享內存模式
消息傳遞模式
共享文件模式

共享內存模式

在通信進程之間存在一塊可直接訪問的共享空間,通過對這片共享空間進行寫/讀操作,實現進程之間的信息交換。

在對共享空間進行寫/讀操作時,需要同步互斥工具(如 P操作、V操作),對共享空間的寫/讀進行控制。

類比:
進程 = 物品
共享空間 = 錢
用錢進行交換,而不用物物交換

消息傳遞模式

在消息傳遞模式中,進程間的數據交換是以格式化的消息(Message)為單位的。
進程通過系統提供的發送消息接收消息兩個原語進行數據交換。

若通信進程之間不存在可直接訪問的共享空間,則必須利用操作系統提供的信息傳遞方法實現進程通信。

可分為直接和間接兩種通信方式:

直接:將消息發送給接收進程,并將它掛在接收進程的信息緩沖隊列中,接收進程從消息緩沖隊列中取得消息。

間接:將消息發送給某個中間實體(信箱),接受進程從中間實體中取得消息,又稱為信箱通信方式。

類比:
甲給乙寫信
直接:甲直接把信交給乙
間接:甲通過郵差把信交給乙

共享文件模式

共享文件:用于連接一個發送進程和一個接收進程,以實現它們之間通信的文件,就是共享文件,又名 pipe(管道)文件
向管道提供輸入的發送進程,以字節流形式將大量的數據送入管道;
而接收管道輸出的接收進程,則從管道中接收數據。

為了協調雙方的通信,管道機制必須提供互斥、同步和確定對方存在三方面的協調能力。

線程

對線程最基本的理解就是“輕量級進程”,它是一個基本的 CPU 執行單元,也是程序執行流的最小單元,由線程 ID、程序計數器、寄存器集合和堆棧組成。(即 CPU 調度的基本單元
線程控制塊(Thread Control Block, TCB):保存運行期間線程的數據,TCB線程存在的唯一標志

線程屬于進程,是進程的一個實體,是被系統獨立和分配的基本單位。
線程自己不擁有系統資源,只擁有一點在運行中必不可少的資源,但它可以與同屬一個進程的其他線程共享進程所擁有的全部資源。
一個進程可以創建和撤銷另一個線程,同一個進程中的多個線程之間可以并發執行。

區別

進程是資源分配和調度的一個獨立單元;
線程是 CPU 調度的基本單元。
同一個進程中可以包括多個線程,并且線程共享整個進程的資源(寄存器、堆棧、上下文),一個進程至少包括一個線程。
進程的創建調用 fork 或者 vfork,而線程的創建調用 pthread_create;
進程結束后它擁有的所有線程都將銷毀,而線程的結束不會影響同個進程中的其他線程的結束。
線程是輕量級的進程,它的創建和銷毀所需要的時間比進程小很多,所有操作系統中的執行功能都是創建線程去完成的。
線程中執行時一半都要進行同步和互斥,因為它們共享同一進程的所有資源。
線程有自己的私有屬性 TCB、線程 id、寄存器、硬件上下文;
進程也有自己的私有屬性進程控制塊 PCB,
這些私有屬性是不被共享的,用來表示一個進程或一個線程的標志。

處理機調度

高級調度:(作業調度外存 → 內存)根據某種算法,把外存上處于后備隊列中那些作業調入內存
中級調度:(內存調度內存 → 外存)將那些暫時不能運行的進程調至外存等待,把進程狀態改為就緒駐外存狀態掛機狀態
低級調度:(進程調度就緒 → 執行)按照某種算法從就緒隊列(內存)中選取一個進程,將處理機分配給它。

調度算法

調度算法是根據系統的資源分配策略所規定的資源分配算法。
有的調度算法適用于作業調度,有的適用于進程調度,有的兩種都適用。

周轉時間=等待時間+執行時間

先來先服務調度(FCFS)

先來先服務調度(First Come First Service, FCFS):按照作業/進程進入系統的先后次序進行調度,先進入系統者先調度,即 啟動等待時間最長的作業/進程。

適用性:作業調度、進程調度。
優點:

算法簡單
作業/進程有利(短的要等好久)

有利于CPU繁忙型作業/進程

科普:CPU 繁忙意味著是長作業,不需要頻繁的輸入輸出

缺點:

效率低

對短作業/進程不利

因為短作業執行時間很短,若令它等待較長時間,則帶權周轉時間會很高。

不利于 I/O 繁忙型作業進程

I/O 繁忙意味著不停地中斷完成,是短作業

短作業優先調度(SJF)

短作業優先調度(Shortest Job First, SJF):該算法每次從后備隊列/就緒隊列中選擇一個估計時間最短的作業/進程,將資源分配給它。

適用性:作業調度、進程調度。
優點:

平均等待時間和平均周轉時間最少

缺點:

對長作業/進程不利(可能導致長作業/進程長期不被調度,發生“饑餓”現象)
不能保證緊迫性作業/進程會被及時處理
由于作業/進程的長短只是根據客戶說提供的估計執行時間而定的,而用戶有可能會有意或無意地縮短氣作業的估計運行時間,致使該算法不一定能真正做到短作業優先調度。

優先級調度

優先級調度:該算法每次從后備隊列/就緒隊列中選擇優先級最高的一個作業/進程,將資源分配給它。

適用性:作業調度、進程調度。

根據新的更高優先級進程能否搶占正在執行的進程,可將該調度分為:

非搶占式優先級調度算法:
當有進程正在處理機上運行時,即使有更高優先級的進程進入就緒隊列,也需等待當前進程運行完成,等待主動讓出處理機后,才把處理機分配給高優先級的進程。
搶占式優先權調度算法:
當有進程正在處理機上運行時,只要又出現了另一個其優先權更高的進程,進程調度程序就立即停止當前進程(原優先權最高的進程)的執行,重新將處理機分配給新到的優先權最高的進程。

高響應比優先調度(HRRN)

高響應比優先調度(Highest Response Ratio Next, HRRN):該算法是對 FCFS 調度算法和 SJF 調度算法的一種綜合平衡,同時考慮每個作業的等待時間和估計的運行時間。

在每次進行作業調度時,先計算后備作業隊列中每個作業的響應比,從中選出響應比最高的作業投入運行。

響應比=作業周轉時間/作業執行時間=(等待時間+要求服務時間)/要求服務時間

適用性:主要用于作業調度
優點:

等待時間相同的作業,要求服務的時間越短,其優先權越高,此時對短作業有利
等待時間相同的作業,等待時間越長,其優先權越高,此時等同于先來先服務調度算法;
對于長作業,優先權隨等待時間的增加而提高,其等待時間足夠長時,其優先權便可提升到很高,從而也可獲得處理機,此時對長作業有利,克服了饑餓狀態。

缺點:

要進行響應比計算,增加了系統開銷。

時間片輪轉調度

該算法將所有就緒進程按到達的先后次序排成一個隊列,每次調度時,把處理機分配給隊首進程,并令其執行一個時間片
當執行的時間片用完時,由一個計時器發出時鐘中斷請求,調度程序便停止該進程的執行,并將其放到就緒隊列尾;
然后,再把處理機分配給就緒隊列中新的隊首。

適用性:主要用于分時系統中進程調度

多級反饋隊列調度

該算法是時間片輪轉調度算法優先級調度算法的綜合和發展,通過動態調整進程優先級和時間片大小,可以兼顧多方面的系統目標。

設置多個就緒隊列,并賦予不同優先級,優先級越高,時間片越小,進程在進入待調度的隊列等待時,首先進入優先級最高的 Q1 等待,一個時間片結束后,若進程沒有運行完,則轉入低一級的就緒隊列隊尾,僅當高優先級隊列中無就緒進程才開始調度低一級的就緒隊列中的進程(若此刻有進程進入了高優先級隊列中,那么要先轉去調用高優先級隊列)。

例子:
假設系統中有 3 個反饋隊列 Q1,Q2,Q3,時間片分別為 2,4,8。
設有3個作業J1,J2,J3分別在時間 0,1,3 時刻到達。而它們所需要的 CPU 時間分別是 3,2,1 個時間片。

時刻 0:J1 到達。于是進入到隊列 1,運行 1 個時間片,時間片還未到,此時 J2 到達。
時刻 1:J2 到達。由于同一隊列采用先來先服務,于是 J2 等待。J1 在又運行了 1 個時間片后,已經完成了在 Q1 中的 2 個時間片的限制,于是 J1 置于 Q2 等待被調度。當前處理機分配給 J2。
時刻 2:J1 進入 Q2 等待調度,J2 獲得 CPU 開始運行。
時刻 3:J3 到達,由于同一隊列采用先來先服務,故 J3 在 Q1 等待調度,J1 也在 Q2 等待調度。
時刻 4:J2 處理完成,由于 J3,J1 都在等待調度,但是 J3 所在的隊列比 J1 所在的隊列的優先級要高,于是 J3 被調度,J1 繼續在 Q2 等待。
時刻 5:J3 經過 1 個時間片,完成。

時刻 6:由于 Q1 已經空閑,于是開始調度 Q2 中的作業,則 J1 得到處理器開始運行。J1 再經過一個時間片,完成了任務。于是整個調度過程結束。

從上面的例子看,在多級反饋隊列中,后進的作業不一定慢完成。

死鎖

死鎖是指多個進程因競爭臨界資源而造成的一種僵局(互相等待),若無外力作用,這些進程都無法向前推進。

產生死鎖的根本原因:系統能夠提供的資源個數比要求該資源的進程數要少。
產生死鎖的基本原因

資源競爭

例子:
A 有紙,B 有筆
A:你不給我筆,我就不給你紙,我就寫不了作業
B:你不給我紙,我就不給你筆,我就寫不了作業
彼此僵持不下。。

進程推進順序非法

例子:
A 要前進 2 步,到桌子前拿東西,再后退 2 步;
結果順序非法:
A 先后退,就永遠到不了桌子前,觸發不了,死鎖。

產生死鎖的必要條件:(互斥、不剝奪、占有、環路)

互斥條件:涉及的資源是非共享的,即 一次只有一個進程使用。如果有另一個進程申請該資源,那么申請進程必須等待,直到該資源被釋放。

互斥:有你沒我,有我沒你

不剝奪條件(非搶占):進程所獲得的資源在未使用完畢之前,不能被其他進程強行奪走,即 只能由獲得該資源的進程自己來釋放。

不剝奪:你不能強行搶我的

占有并等待(部分分配):進程每次申請它所需要的一部分資源。在等待一新資源的同時,進程繼續占用已分配到的資源。

占有:這個資源我馬上要用的,拿著等一會

環路條件(循環等待):存在一種進程循環鏈,鏈中每一個進程已獲得的資源同時被鏈中下一個資源所請求。

環路:你不給我,我不給你

注意:這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立;
反之,只要上述條件之一不滿足,就不會發生死鎖。

處理策略

預防死鎖

預防死鎖:通過設置一些限制條件,破壞死鎖的一些必要條件,讓死鎖無法發生。

避免死鎖

避免死鎖:在動態分配資源的過程中,用一些算法(如 銀行家算法)防止系統進入不安全狀態,避免死鎖的發生。

銀行家算法

Dijkstra E W 于 1968 年提出銀行家算法。之所以稱為銀行家算法,是因為該算法可用于銀行系統。

新進程進入系統時,它必須說明各類資源類型的實例的最大需求量,這一數量不能超過系統各類資源的總數。
當進程申請一組資源時,該算法需要檢查申請者對各類資源的最大需求量:

如果系統現存的各類資源的數量可以滿足當前它對各類資源的最大需求量時,就滿足當前的申請;
否則,進程必須等待,直到其他進程釋放足夠的資源為止。

換言之,僅當申請者可以在一定時間內無條件地歸還它所申請的全部資源時,才能把資源分配給它。

死鎖的檢測及解除

死鎖的檢測及解除:在死鎖發生前不做任何操作,只是檢測當前是否發生死鎖,若發生死鎖,則采取一些措施(如 資源剝奪法、撤銷進程法、進程回退法)來解除死鎖。

主存管理

實存管理:

分區式管理:最簡單直觀的方式,在內存中連續分配一個區,將整個進程放入這個區。

缺點是會產生外碎片,即 時間長了會在分區之間產生難以被利用的小空間。

固定分區:把主存中可分配的用戶區域預先劃分成若干個連續的分區,每個連續區的大小可以相同,也可以不同。但是,一旦劃分好分區之后,主存中分區的個數就固定了,且每個分區的大小也固定不變。這是一種靜態分區法。
在固定分區方式管理下,每個分區用來裝入一個作業。由于主存中有多個分區,就可同時在每個分區中裝入一個作業。所以,這種存儲管理方式適用于多道程序系統。

可變分區:內存管理的可變分區模式,又稱變長分區模式、動態分區分配模式。
這種分配方式不會預先劃分內存分區,而是在進程裝入內存時,根據進程的大小動態地建立分區,并使分區的大小正好適合進程的需要。因此系統分區的大小和數目是可變的。

與固定分區的區別就是:動態的劃分分區。克服固定分區管理的“內碎片”問題。

分頁式管理:將內存分成固定大小的頁,離散分配若干頁將整個進程載入。

頁面可以不連續是其重要優點,不會產生外碎片,更有效地利用了內存,不過會產生一些內碎片,即 分配給進程的最后一個頁往往不能正好用完,不過在頁面大小不是很大的時候可以接受。

分段式管理:將程序分為若干個段,如數據段和代碼段,加以不同的保護。

施加保護是分段式的優點,但其仍是像分區式管理一樣的連續分配

段頁式管理:同樣將程序分段,加以不同的保護,但是各段不再連續分配,而采用分頁式離散分配

注意:以上四種全是實存管理,即 進程要么全部載入內存中,要么就不能載入。

虛存管理:

請求式分頁:將進程放入虛擬內存中,由于一個進程的頁面不會同時全部被用到,只將需要用到的頁面調入物理內存。即進程并沒有整個在物理內存中。
幾個請求式分頁的概念:

固定分配:物理內存中分配給進程的內存塊數一定。
可變分配:物理內存先分配給進程一些內存塊,如不夠,可適當增加。
局部置換:發生在分配的內存塊已用完,又發生了缺頁時,只能置換本來就是自己的內存塊。

全局置換:發生在分配的內存塊已用完,又發生了缺頁時,可以置換到操作系統保留的空閑頁。這其實相當于增加了進程占有的內存塊數。

三種分配方式:固定分配局部置換、可變分配全局置換、可變分配局部置換。固定分配、全局置換不能組合。

內存碎片

內存碎片分為:內部碎片和外部碎片

內部碎片:已經被分配出去(能明確指出屬于哪個進程)卻不能被利用的內存空間;

內部碎片是處于(操作系統分配的用于裝載某一進程的內存)區域內部或頁面內部的存儲塊。
占有這些區域或頁面的進程并不使用這個存儲塊
而在進程占有這塊存儲塊時,系統無法利用它
直到進程釋放它,或進程結束時,系統才有可能利用這個存儲塊。

外部碎片:還沒有被分配出去(不屬于任何進程),但由于太小了無法分配給申請內存空間的新進程的內存空閑區域。

外部碎片是處于任何兩個已分配區域或頁面之間的空閑存儲塊。
這些存儲塊的總和可以滿足當前申請的長度要求,但是由于它們的地址不連續或其他原因,使得系統無法滿足當前申請。

分區存儲管理

分區存儲管理中,程序的地址空間是一維線性的,因為是連續分配的,指令或操作數地址只要給出一個信息量即可決定。(連續分配

分區式管理:最簡單直觀的方式,在內存中連續分配一個區,將整個進程放入這個區。

缺點是會產生外碎片,即 時間長了會在分區之間產生難以被利用的小空間。

固定分區:把主存中可分配的用戶區域預先劃分成若干個連續的分區,每個連續區的大小可以相同,也可以不同。但是,一旦劃分好分區之后,主存中分區的個數就固定了,且每個分區的大小也固定不變。這是一種靜態分區法。
在固定分區方式管理下,每個分區用來裝入一個作業。由于主存中有多個分區,就可同時在每個分區中裝入一個作業。所以,這種存儲管理方式適用于多道程序系統。

可變分區:內存管理的可變分區模式,又稱變長分區模式、動態分區分配模式。
這種分配方式不會預先劃分內存分區,而是在進程裝入內存時,根據進程的大小動態地建立分區,并使分區的大小正好適合進程的需要。因此系統分區的大小和數目是可變的。

與固定分區的區別就是:動態的劃分分區。克服固定分區管理的“內碎片”問題。

分區存儲管理中常用的分配策略有:首次適應算法循環首次適應算法最佳適應算法最壞適應算法

首次適應算法

首次適應算法:地址從小到大排序,分配第一個符合條件的分區,即 第一個足夠裝入它的可利用的空閑區。

優點:

保留高地址部分的大空閑區,有利于后來的大型作業分配。

缺點:

低地址部分被不斷劃分,留下許多難以利用的小空閑區;
每次分配時都要從低地址部分開始查找,增加查找時的系統開銷。

循環首次適應算法

循環首次適應算法:在首次適應算法的基礎上,從上次查找結束的位置開始查找,分配第一個足夠裝入它的可利用的空閑區。

優點:

使內存中的空閑分區分布更均勻,減少了查找時的系統開銷。

缺點:

缺乏大的空閑區,可能導致不能裝入大型作業。

最佳適應算法

最佳適應算法:按空間從小到大排序,分配第一個符合條件的分區,即 與它所需大小最接近的空閑區。

優點:

每次分配的空閑區都是最合適的

缺點:

在內存中留下許多難以利用的小空閑區

最壞適應算法

最壞適應算法:是按空間從大到小排序,分配第一個符合條件的分區,即 最不適合它的空閑區,即 最大的空閑區

優點:

產生碎片的幾率最小,對中小型作業有利。

缺點:

缺乏大的空閑區,對大型作業不利。

頁式存儲管理

頁式存儲管理中,程序的地址空間是一維線性的,因為指令或操作數地址只要給出一個信息量即可決定。(離散分配

理解:頁式存儲管理只用給出一個邏輯地址就行,因為頁的大小是固定的,不需要刻意劃分,當然不是邏輯地址÷頁的大小=頁號...余 偏移量,因為頁式存儲是離散分配的。
根據下文的地址變換過程可知,我們只需要提供邏輯地址這一個地址,就可以找到這個頁式存儲物理地址,所以是地址空間一維的,只用一個邏輯地址。

不存在外碎片,存在內碎片

頁之間一頁緊跟著一頁,沒有外碎片;但是頁內有可能分配不滿,有內碎片。

分頁式管理:將內存分成固定大小的頁,離散分配若干頁將整個進程載入。于是一個連續的程序空間在主存中可能是不連續的。為了保證程序能正確地執行,必須在執行每條指令時將程序中的邏輯地址變換為實際的物理地址,即 進行動態重定位。
在頁式系統中,實現這種地址變換的機構稱為頁面映射表,簡稱頁表

頁面可以不連續是其重要優點,不會產生外碎片,更有效地利用了內存,不過會產生一些內碎片,即 分配給進程的最后一個頁往往不能正好用完,不過在頁面大小不是很大的時候可以接受。

其實如何利用頁表來進行地址變換,這與計算機所采用的地址結構有關,而地址結構又與選擇的頁面尺寸有關。

虛地址結構:(因為是邏輯上的虛擬地址,所以由人為規定結構,比較隨意)

頁號 頁內位移
P W

就如上表所示,虛地址是由頁號頁內位移組合而成。

地址變換過程:(邏輯地址→物理地址
在收到邏輯地址(Logic Address, LA)后,進行處理,得到物理地址(Physical Address, PA):

邏輯地址 LA 劃分為頁號 P頁內位移 W
根據頁號 P 查頁表,得到塊號 B
物理地址 PA = 塊號 B * 頁的大小 + 頁內位移 W

頁面置換算法

在地址映射過程中,若在頁面中發現所要訪問的頁面不在內存中,則產生缺頁中斷
當發生缺頁中斷時,如果操作系統內存中沒有空閑頁面,則操作系統必須在內存選擇一個頁面將其移出內存,以便為即將調入的頁面讓出空間。而用來選擇淘汰哪一頁的規則叫做頁面置換算法

抖動(顛簸):是指在頁面置換過程中,剛剛調出的頁面馬上又要調入內存,剛剛調入的頁面馬上又要調出,發生頻繁的頁面調度行為。

缺頁中斷率=成功訪問次數/總訪問次數
最佳置換算法(OPTimal replacement, OPT):將以后永不使用的或者在最長時間內不會被訪問的頁面調出,但由于人們無法預知進程在內存下的若干頁面中哪個是未來最長時間內不再被訪問的,因而該算法無法實現。

先進先出置換算法(First In First Out, FIFO):將最早進入內存的頁面調出。

該算法會產生Belady異常,即 發生缺頁時,如果對一個進程未分配它所要求的全部頁面,有時分配頁數↑,缺頁率反而↑的異常現象。(先進先出,結果進來了一個需要的頁,也出去了一個需要的頁)

最近最久未使用置換算法(Least Recently Used, LRU):是將最近最長時間未訪問的頁面調出。該算法為每個頁面設置一個訪問字段,記錄頁面上次被訪問以來所經歷的時間,調出頁面時選擇時間最長的頁面。
最不經常使用置換算法(Least Frequently Used ,LFU):將最近應用次數最少的頁淘汰。

時鐘置換算法(CLOCK):也稱為最近未用算法(NRU),該算法是為每個頁面設置一個使用位,需要替換頁面時,循環檢查各個頁面,將使用位為 1 的頁面重置為 0(使用時再置為1),直到遇到第一個使用位為 0 的頁面,將其調出。
如果在每個頁面再增加一個修改位,則得到改進型的 CLOCK 置換算法,類似的,需要替換頁面時,將使用位和修改位都為 0 的頁面調出。

段式存儲管理

段式存儲管理的用戶地址是二維的、按段劃分的。(離散分配

理解:段式存儲管理必須給出(段號,偏移量),因為段的大小不固定,必須給出這個地址結構(邏輯地址),由此找到段表中程序員設置基址,由地址結構(邏輯地址)和基址這兩個地址我們可以得到段式存儲物理地址,所以是二維的,需要用到兩個地址。

存在外碎片,不存在內碎片

段內緊密連接為一個整體,沒有內碎片;段之間不一定緊密連接,存在外碎片。

分段式管理:將程序分為若干個段,如數據段和代碼段,加以不同的保護。

施加保護是分段式的優點,雖然不同段可以離散分配,但其段內仍是連續分配。

在這樣的系統中作業的地址空間由若干邏輯分段組成,每個分段有自己的名字,對于一個分段而言,它是一個連續的地址區。

由于標識某一程序地址時,要同時給出段名和段內地址,因此地址空間是二維的(實際上,為了實現方便,在第一次訪問某段時,操作系統就用唯一的段號來代替該段的段名)。

程序地址的一般形式由(s,w)組成,這里 s 是段號,w 是段內位移

段號 段內位移
s w

注意:這里雖然和分頁一樣,但是進入段表后,要找到段表中程序員設置的基址,所以是二維的地址結構。

分頁和分段的異同

相同點:

分頁和分段都采用離散分配(也就是不連續的分配地址,類似于鏈表)的方式
都要通過地址映射機構來實現地址變換

不同點:

從功能上看:
是信息的物理單位,分頁是為實現離散分配方式,以消除內存的外零頭,提高內存利用率,是為了滿足系統管理的需要;
是信息的邏輯單位,它含有一組意義相對完整的信息,是為了滿足用戶的需要。
的大小是由系統確定且固定不變的;
長度不固定,取決于用戶編寫的程序。

分頁的作業地址空間是一維的;
分段的作業地址空間是二維的。

理解:
分頁存儲管理里面的地址結構是:頁號+位移量,這個地址結構就是一個地址;
根據頁號在頁表項中找到對應頁項,這個頁項代表了一個塊號,但是這個塊號并不是一個地址,因為所有塊是事先已經劃分好且長度相等的,這些塊是操作系統自己知道的,所以操作系統就可以僅根據地址結構直接訪問,即分頁存儲管理的地址空間是一維的。
分段存儲管理里面的地址結構是:段號+段內地址(位移量),這個地址結構就是一個地址;
根據段號在段表項中找到對應段項,這個段項和頁項的組成成分不一樣,其中還包含了一個基址,就是段在內存中的起始地址,這個地址不是操作系統劃分,而是程序員事先設置的,操作系統并不知道,所以操作系統要訪問內存就必須要結合地址結構段表中的基址,所以分段的地址空間是二維的。

總結:
分頁地址結構+塊號,地址結構是地址,塊號只是一個數字而已,所以是一維;(因為長度固定,所以只需要塊號數字就行)
分段地址結構+基址,兩者都是地址,所以是二維的。(因為長度不固定,所以需要基址才能找到)

段頁式存儲管理

段頁式存儲管理的用戶地址也是二維的、按段劃分的。只是在段中再劃分成若干大小相等的頁

理解:段頁式存儲管理也必須給出(段號,偏移量),雖然段的大小不固定,但是段內頁號和頁內偏移可以根據偏移量算出來,所以還是二維的。

段頁式管理:同樣將程序分段,加以不同的保護,但是各段不再連續分配,而采用分頁式離散分配

地址結構就由段號、段內頁號、頁內位移三部分組成。

注意:不要看三部分就是三維的了,其實用戶使用的部分也是二維的。

段號 段內頁號 頁內位移

用戶使用的仍是段號和段內相對地址
由地址變換機構自動將段內相對地址的高幾位解釋為段內頁號,將剩余的低位解釋為頁內位移

用戶地址空間的最小單位不是段而是,而主存按頁的大小劃分,按頁裝入。

這樣,一個段可以裝入到若干個不連續的主存塊內,段的大小不再受主存可用區的限制了。

虛擬存儲器

虛擬存儲器:是指具有請求調入功能和置換功能,并能從邏輯上對內存容量加以擴充的一種存儲器系統。
它使得應用程序認為它擁有連續的可用的內存(一個連續完整的地址空間),而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。

局部性原理:是指CPU訪問存儲器時,無論是存取指令還是存取數據,所訪問的存儲單元都趨于聚集在一個較小的連續區域中。

時間局部性(Temporal Locality):如果一個信息項正在被訪問,那么在近期它很可能還會被再次訪問。

程序循環、堆棧等是產生時間局部性的原因。

空間局部性(Spatial Locality):在最近的將來將用到的信息很可能與正在使用的信息在空間地址上是臨近的。

順序局部性(Order Locality):在典型程序中,除轉移類指令外,大部分指令是順序進行的。順序執行和非順序執行的比例大致是 5:1。此外,對大型數組訪問也是順序的。

指令的順序執行、數組的連續存放等是產生順序局部性的原因。

虛擬存儲器基于局部性原理,在程序裝入時,可以只將程序的一部分裝入內存,就可以啟動程序執行。
在執行過程中,當所訪問的信息不在內存中時,由操作系統將所需內容調入內存,使程序繼續執行;

解釋:因為局部性原理,所以下一步需要訪問的信息很有可能就在附近。

同時,操作系統將內存中暫時不用的內容調出到外存。

這樣,系統就好像為用戶提供了一個比實際內存大得多的存儲器,稱為虛擬存儲器

特征:

離散性:是指內存分配時采用離散分配的方式。若采用連續分配方式,需要將作業裝入到連續的內存區域,這樣需要連續地一次性申請一部分內存空間,無法實現虛擬存儲功能,只有采用離散分配方式,才能為它申請內存空間,以避免浪費內存空間。
多次性:作業無需在運行時一次性全部裝入內存,而是可以分成多次調入內存。
對換性:作業運行時無需常駐內存,可以進行調入調出。
虛擬性:從邏輯上擴充了內存的容量,使用戶所感覺到的內存容量遠大于實際容量。

文件系統

文件分配

文件分配對應于文件的物理結構,是指如何為文件分配磁盤塊(外存)。

常用的磁盤空間分配方法有三種:

連續分配:要求每個文件在磁盤上占有一組連續的塊。

鏈接分配:采取離散分配的方式,分為隱式鏈接分配和顯式鏈接分配。

類比:鏈表那樣一個一個地順序查找

隱式鏈接分配:每個文件對應一個磁盤塊的鏈表,磁盤塊任意分布,除最后一個盤塊外,每一個盤塊都有指向下一個盤塊的指針(類似于數據結構中的鏈表)。

顯式鏈接分配:把用于鏈接文件各物理塊的指針提取出來,顯式地存放在內存里的一張鏈接表中,該表整個磁盤僅設置一張,由于分配給文件的所有盤塊號都放在該表中,故稱該表為文件分配表(FAT)。

這本質上仍然是鏈接分配,即 進程給出文件物理塊起始地址等信息,然后根據內存FAT中地址的鏈接情況進行查找,得到所需物理塊。在查找過程中仍然是一個一個地順序查找

索引分配:把每個文件的所有盤塊號集中在一起構成索引塊(表)。

索引分配與顯式鏈接分配不同,索引分配是隨機查找,不需要借助前一個物理塊來找到后一個,直接就可以查找到,直達

磁盤調度算法

調度算法 算法思想 優點 缺點
先來先服務算法(FCFS) 按照進程請求訪問磁盤的先后順序進行調度。 簡單,公平。 未對尋道進行優化,平均尋道時間較長,僅適用于磁盤請求較少的場合。
最短尋道時間優先算法(SSTF) 選擇與當前磁頭所在磁道距離最近的請求作為下一次服務的對象。 較 FCFS 有較好的尋道性能以及較少的尋道時間。 會導致饑餓現象
掃描(電梯調度)算法(SCAN) 在磁頭當前移動方向上選擇與當前磁頭所在磁道距離最近的請求最為下一次服務的對象。 具有較好的尋道性能,而且防止了饑餓現象。 存在一個請求剛好被錯過而需要等待很久的情形。
循環掃描算法(CSCAN) 規定磁頭單向移動,如自里向外移動,當磁頭移動到最外的磁道時立即返回到最里磁道,如此循環進行掃描。 兼顧較好的尋道性能,防止饑餓現象,同時解決了一個請求等待時間過長的問題。 可能出現磁臂長時間停留在某處不懂的情況(磁臂黏著)。
N-Step-SCAN 算法
(對 SCAN算法的優化)
將磁盤請求隊列分成若干個長度為 N 的子隊列,磁盤調度將按照 FCFS 依次處理這些子隊列,而每處理一個隊列時又是按照 SCAN 算法,對一個隊列處理后再處理其他隊列,將新請求隊列放入新隊列。 無磁臂黏著。
FSCAN 算法
(對 SCAN 算法的優化)
將請求隊列分成兩個子隊列,將新出現請求磁盤 IO 的進程放入另一個子隊列。 無磁臂黏著。

先來先服務算法(First Come First Service, FCFS):根據進程請求訪問磁盤的先后順序進行調度。

最短尋找時間優先算法(Shortest Seek Time First, SSTF):選擇處理的磁道是與當前磁頭所在磁道距離最近的磁道,使每次的尋找時間最短。

該算法會產生“饑餓”現象。

掃描算法(SCAN):也叫電梯算法,在磁頭當前移動方向上選擇與當前磁頭所在距離最近的請求作為下一次服務的對象。

實際上是在 SSTF 算法的基礎上規定了磁頭運動的方向。

循環掃描算法(Cyclic SCAN, C-SCAN):在SCAN算法的基礎上規定磁頭單向移動來提供服務,到達磁盤端點返回時,直接快速返回起始端。

若磁頭移動到最遠端的請求后,即刻返回,而不是到達端點再返回,則將改進后的SCAN算法和C-SCAN算法稱為LOOK算法和C-LOOK算法。

I/O 管理

I/O 控制方式

程序 I/O 方式:計算機從外部設備讀取數據到存儲器,每次讀取一個字的數據。對讀入的每個字,CPU 需要對外設狀態進行循環檢查,直到確定該字已經在 I/O 控制器的數據寄存器中。

該方式適用于早期的無中斷計算機系統中。
CPU 和 I/O 設備只能串行工作,導致CPU的利用率相當低。

中斷驅動 I/O 控制方式:允許 I/O 設備主動打斷 CPU 的運行并請求服務,從而使 CPU 在對 I/O 控制器發送命令后可以做其他工作。

該方法普遍用于現代的計算機系統中。
由于數據中每個字在存儲器與 I/O 控制器之間的傳輸都必須經過 CPU,仍然會消耗 CPU 較多的時間。

DMA I/O 控制方式:(CPU 與 I/O 并行)
I/O 設備和內存之間開辟直接的數據交換通路,數據的基本單位是數據塊,所傳送的數據是從設備直接送入內存;
或者相反,僅在傳送數據塊的開始和結束時需要 CPU 干預,數據傳送是在 DMA 控制器的控制下完成的

該方法適用于 I/O 設備為塊設備時和主機進行數據交換。

塊設備是 I/O 設備中的一類,是將信息存儲在固定大小的塊中,每個塊都有自己的地址,還可以在設備的任意位置讀取一定長度的數據,如 硬盤、U 盤、SD 卡等。

直接內存存取(Direct Memory Access, DMA)是所有現代電腦的重要特色,它允許不同速度的硬件裝置來溝通,而不需要依賴于 CPU 的大量中斷負載。
否則,CPU 需要從來源把每一片段的資料復制到暫存器,然后把它們再次寫回到新的地方。在這個時間中,CPU 對于其他的工作來說就無法使用。

I/O 通道控制方式:是 DMA 方式的發展,只在一組數據的傳輸開始和結束時需要 CPU 干預,可以實現 CPU、通道和 I/O 設備三者的并行操作。

該方式適用于設備與主機進行數據交換是一組數據塊的情況,使用該方法要求系統必須配置相應的通道及通道控制器。

緩沖區

引入緩沖區的目的是什么?

緩和 CPU 與 I/O 設備間速度不匹配的矛盾;
減少對 CPU 的中斷頻率,放寬對 CPU 中斷響應時間的限制;
解決基本數據單元大小(即 數據粒度)不匹配的問題;
提高 CPU 和 I/O 設備之間的并行性。

總結

以上是生活随笔為你收集整理的【操作系统】常用总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。