【操做系統】總結

基礎知識

操做系統

操做系統(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表示經過(pass)的意思,V表示釋放(荷蘭語v開頭)的意思。

在操做系統中,信號量S是一整數。
S大於或等於零,表明可供併發進程使用的資源實體數
在S小於零時,S表示正在等待使用資源實體的進程數
創建一個信號量必須說明此信號量所表明的意義而且賦初值。
除賦初值外,信號量僅能經過PV操做來訪問。

  • 信號量S(semaphore)表明「資源數」
  • P操做的主要動做是:經過(pass)(即 使用資源
    • S減1;

      類比:「佔用了一個資源」

    • 若S減1後仍大於或等於0,則進程繼續執行;

      類比:「若佔用一個資源後,還有多餘的資源或者恰好用完資源,那麼就表明該進程有資源能夠利用,進程也就能夠繼續執行」

    • 若S減1後小於0,則該進程被阻塞後放入等待該信號量的等待隊列中,而後轉進程調度。

      類比:「若佔用一個資源後,還欠別人資源,那麼就表明該進程根本就沒有資源能夠用了,若是再用就要欠債了,因此等待」

  • V操做的主要動做是:釋放(荷蘭語v開頭)(即 釋放資源
    • S加1;

      類比:「資源佔用完了,物歸原主,釋放資源」

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

      類比:「若釋放資源後,資源數大於0,就表明庫存裏還有資源能夠給你利用,那就繼續執行」

    • 若相加後結果小於或等於0,則從該信號的等待隊列中釋放一個等待進程,而後再返回原進程繼續執行或轉進程調度。

      類比:「若釋放資源後,資源數仍是欠別人的或者爲0,就表明庫存裏沒有資源能夠利用了,因此等待」

注意: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個時間片。
    1. 時刻0 J1到達。因而進入到隊列1 , 運行1個時間片 , 時間片還未到,此時J2到達。
    2. 時刻1 J2到達。 因爲同一隊列採用先來先服務,因而J2等待。 J1在運行了1個時間片後,已經完成了在Q1中的2個時間片的限制,因而J1置於Q2等待被調度。當前處理機分配給J2。
    3. 時刻2 J1進入Q2等待調度,J2得到CPU開始運行。
    4. 時刻3 J3到達,因爲同一隊列採用先來先服務,故J3在Q1等待調度,J1也在Q2等待調度。
    5. 時刻4 J2處理完成,因爲J3,J1都在等待調度,可是J3所在的隊列比J1所在的隊列的優先級要高,因而J3被調度,J1繼續在Q2等待。
    6. 時刻5 J3通過1個時間片,完成。
    7. 時刻6 因爲Q1已經空閒,因而開始調度Q2中的做業,則J1獲得處理器開始運行。J1再通過一個時間片,完成了任務。因而整個調度過程結束。

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

死鎖

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

  • 產生死鎖的根本緣由是系統可以提供的資源個數比要求該資源的進程數要少。
  • 產生死鎖的基本緣由
    • 資源競爭

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

    • 進程推動順序非法

      例子:
      A要前進2步,到桌子前,再後退2步,結果順序非法:
      A前後退,就永遠到不了桌子前,觸發不了,死鎖

  • 產生是死鎖的必要條件
    • 互斥條件:涉及的資源是非共享的,即 一次只有一個進程使用。若是有另外一個進程申請該資源,那麼申請進程必須等待,直到該資源被釋放。
    • 不剝奪條件(非搶佔):進程所得到的資源在未使用完畢以前,不能被其餘進程強行奪走,即 只能由得到該資源的進程本身來釋放。
    • 佔有並等待(部分分配):進程每次申請它所須要的一部分資源。在等待一新資源的同時,進程繼續佔用已分配到的資源。
    • 環路條件(循環等待):存在一種進程循環鏈,鏈中每個進程已得到的資源同時被鏈中下一個資源所請求。

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

處理策略

預防死鎖

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

避免死鎖

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

銀行家算法

Dijkstra E W於1968年提出銀行家算法。之因此稱爲銀行家算法,是由於該算法可用於銀行系統。

新進程進入系統時,它必須說明各種資源類型的實例的最大需求量,這一數量不能超過系統各種資源的總數。
當進程申請一組資源時,該算法須要檢查申請者懟各種資源的最大需求量,若是系統現存的各種資源的數量能夠知足當前它懟各種資源的最大需求量時,就知足當前的申請;不然,進程必須等待,直到其餘進程釋放足夠的資源爲止。
換言之,僅當申請者能夠在必定時間內無條件地歸還它所申請的所有資源時,才能把資源分配給它。

死鎖的檢測及解除

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

主存管理

分區存儲管理

分區存儲管理中,程序的地址空間是一維線性的,由於指令或操做數地址只要給出一個信息量便可決定。

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

首次適應算法

首次適應算法:地址從小到大排序,分配第一個符合條件的分區。

  • 優勢:
    • 保留高地址部分的大空閒區,有利於後來的大型做業分配。
  • 缺點:
    • 低地址部分被不斷劃分,留下許多難以利用的小空閒區;
    • 每次分配時都要從低地址部分開始查找,增長查找時的系統開銷。

循環首次適應算法

循環首次適應算法:在首次適應算法的基礎上,從上次查找結束的位置開始查找,分配第一個符合的分區。

  • 優勢:
    • 使內存中的空閒分區分佈更均勻,減小了查找時的系統開銷。
  • 缺點:
    • 缺少大的空閒區,可能致使不能裝入大型做業。

最佳適應算法

最佳適應算法:按空間從小到大排序,分配第一個符合條件的分區。

  • 優勢:
    • 每次分配的空閒區都是最合適的
  • 缺點:
    • 在內存中留下許多難以利用的小空閒區

最壞適應算法

最壞適應算法:是按地址從大到小排序,分配第一個符合條件的分區。

  • 優勢:
    • 產生碎片的概率最小,對中小型做業有利。
  • 缺點:
    • 缺少大的空閒區,對大型做業不利。

頁式存儲管理

頁式存儲管理中,程序的地址空間是一維線性的,由於指令或操做數地址只要給出一個信息量便可決定。

理解:頁式存儲管理只用給出一個邏輯地址就行,由於頁的大小是固定的,邏輯地址÷頁的大小=頁號...餘 偏移量,因此是地址空間一維的,只用一個邏輯地址。

頁面置換算法

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

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

  • 缺頁中斷率=成功訪問次數/總訪問次數
  • 最佳置換算法(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)。
  • 索引分配:把每一個文件的全部盤塊號集中在一塊兒構成索引塊(表)。

磁盤調度算法

  • 先來先服務算法(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控制方式:在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設備之間的並行性。
相關文章
相關標籤/搜索