SYS.BASE-操做系統筆記(理論篇)

操做系統:嚮應用程序提供資源集的基本抽象,在相互競爭的程序之間有序地控制對處理器、存儲器以及其餘I/O接口設備的分配(資源管理:時間複用、空間複用)。算法

計算機硬件:

CPU:

  • 每一個CPU基本週期中,從內存取指令-解碼(以肯定其類型和操做)-執行,如此反覆。
  • 由於訪問內存慢,CPU內設有寄存器:編程

    • 通用寄存器:用來保存關鍵變量和臨時數據
    • 專用寄存器:數組

      • 程序計數器:下個指令的內存地址
      • 堆棧指針:當前棧頂端
      • 程序狀態字(PSW):條件碼位(由比較指令設置)、 CPU優先級 、 模式(用戶態或內核態)等控制位
  • 現代CP設計:緩存

    • 流水線:有單獨的取指單元 、解碼單元和執行單元,能同時取出多條指令。
    • 超標量:更先進,有多個執行單元(只要有一個執行單元空閒, 就檢查緩衝區中是否還有可處理的指令, 若是有, 就把指令從緩衝區中移出並執行之。)
  • 模式:安全

    • 用戶態:用戶程序編碼可以解決的
    • 內核態:沒法編碼表示的,用戶程序必須使用系統調用(內中斷)陷入內核並調用操做系統。服務器

      • 內中斷(異常)網絡

        • 出錯(fault):保存指向觸發異常的那條指令 (例:缺頁異常)
        • 陷入(trap):保存指向觸發異常的那條指令的下一條指令(例:調試)
      • 外中斷

存儲器

  • CPU寄存器 1ns <1k:32位CPU是32\32 64位CPU是64\64
  • 高速緩存 2ns 4M
  • 主存 10ns 1-8G RAM ROM Flash CMOS
  • 磁盤 10ms 1-4T 低端硬盤速率50MB/s, 高速硬盤160 MB/s

I/0設備

  • I/0設備=設備控制器+設備自己
  • 設備控制器數據結構

    • 爲操做系統提供一個簡單的接口。在控制器中常常安裝一個小的嵌入式計算機,運行爲執行這些工做而專門編好的程序。
    • 大多數設備驅動程序(專門與控制器對話,發出命令並接收響應的軟件)須要在內核態運行
  • 設備自己:設備自己有個相對簡單的接口, 這是由於接口既不能作不少工做,又已經被標準化了。
  • 實現IO的方式:忙等待、中斷、直接存儲器訪問

總線

  • 最主要的PCIe總線架構

    • 簡介:10+Gb/s是串行總線架構,取代傳統PCI的並行總線架構,經過一條被稱爲數據通路的鏈路傳遞集合了全部位的一條消息,這很是像網絡包。PCIe 2.0規格的16個數據通路提供64Gb/s的速度,升級到PCIe 3.0後會提速2倍,而PCIe 4.0會再提速2倍。
    • CPU併發

      • 經過DDR3總線與內存對話
      • 經過PCie總線與外圍圖形設備對話
      • 經過DMI總線經集成中心與全部其餘設備對話
    • 集成中心

      • 經過通用串行總線與USB設備對話
      • 經過SATA總線與硬盤和DVD驅動器對話
      • 經過PCle傳輸以太網絡幀
  • USB用來將全部慢速I/0設備(如鍵盤和鼠標)與計算機鏈接的

    • USB 1.0 12Mb/s
    • USB 2.0 480Mb/s
    • USB 3.0 5Gb/s
  • SCSI

    • 一種高速總線用在 高速硬盤、 掃描儀、服務器和工做站 640MB/s
  • 即插即用:系統自動地收集有關1/0設備的信息,集中賦予中斷級別和I/0地址,而後通知每塊卡所使用的數值。

啓動計算機

  • BIOS 檢查所安裝的RAM數量,鍵盤和其餘基本設備

    • 掃描PCie和PCI總線並找出連在上面的全部設備
    • 嘗試存儲在CMOS存儲器中的設備清單決定啓動設備
  • 操做系統詢問BIOS, 以得到配置信息
  • 檢查就緒設備驅動程序, 操做系統將它們調入內核
  • 建立須要的任何背景進程,啓動登陸程序或GUI

操做系統基本特徵

  • 併發:同一時間段內發生

    • 並行:同一時刻發生(多道程序處理宏觀上併發,微觀上交替執行)
  • 共享

    • 互斥共享(如音頻設備 打印機)
    • 同時訪問(磁盤文件)
  • 虛擬

    • cpu:每一個用戶(進程)的「虛處理機」
    • 存儲器:每一個進程都佔有的地址空間(指令+數據+堆棧)
    • 顯示設備:多窗口或虛擬終端
    • 打印設備:將臨界資源變爲同時訪問資源
  • 異步性

    - 判據:不管快慢,結果相同

進程線程

進程

  • 模型

    • 一個進程就是一個正在執行程序的實例, 包括程序計數器 、寄存器和變量的當前值。
多道程序設計:(僞)並行狀況下運行的進程集
```
    CPU 利用率= 1-p^n 
            一 個進程等待I/0操做的時間與其停留在內存中時間的比爲p
            n稱爲多道程序設計的道數
```
  • 建立

    • 1)系統初始化.
    • 2)正在運行的程序執行了建立進程的系統調用。
    • 3)用戶請求建立一個新進程。
    • 4)一個批處理做業的初始化。
  • 終止

    • 1)正常退出(自願的)。
    • 2)出錯退出(自願的)。
    • 3)嚴重錯誤(非自願)。
    • 4)被其餘進程殺死(非自願)。
  • 阻塞 block
  • 喚醒wakeup
  • 掛起suspend
  • 層次結構

    • UNIX 進程和它的全部子進程以及後裔共同組成一個進程組。用戶發信號後每一個進程能夠分別捕獲該信號 、 忽略該信號或採起默認的動做, 即被該信號殺死。在整個系統中, 全部的進程都屬千以 init爲根的一棵樹
    • Windows 全部的進程都是地位相同的
  • 進程的狀態與轉換

    • 狀態:就緒(ready) 執行(running) 阻塞(blocked)
    • 具備掛起的狀態:執行,活動就緒,活動阻塞,靜止就緒,靜止阻塞
  • 進程控制塊

    • 進程控制塊中的信息

      • 處理機狀態

        • 通用寄存器
        • 指令計數器
        • psw
      • 調度信息

        • 進程狀態
        • 優先級
        • 調度所需信息(進程已等待CPU時間,進程已執行的時間總和)
      • 控制信息

        • 程序、數據地址
        • 同步和通訊(消息隊列指針 信號量)
        • 佔用資源清單
        • 連接指針(本進程PCB所在隊列的下一個進程PCB的首地址)
        • 家族關係 子進程父進程標示

線程

  • 概念

    • 輕型實體:只擁有必不可少的資源,如:線程狀態、寄存器上下文和棧

      • 獨立調度和分派的基本單位
      • 就緒阻塞執行3種基本狀態
      • 建立、終止時間比進程短
      • 同進程內線程切換時間比進程短,系統開銷小
    • 可併發執行
    • 共享進程資源(如內存 文件)
  • 模型

    • TCB
  • POSIX線程(IEEE 1003.lc 線程標準)

    • 線程包pthread
    • pthread_create 建立一個新線程
    • pthread_exit 結束調用的線程
    • pthread_join 等待一個特定的線程退出
    • pthread_yield 釋放CPU來運行另一個線程
    • pthread_attr_init 建立並初始化一個線程的屬性結構
    • pthread_attr_destroy 刪除一個線程的屬性結構
  • 實現

    • 在用戶態實現

      • 優勢

        • 快捷(不須要陷入內核,上下文切換,刷新內存高 速緩存)
        • 它容許每一個進程有本身定製的調度算法
      • 缺點:

        • 若核心阻塞進程,則進程中全部線程將被阻塞
        • 同一進程中的2個線程不能同時運行於2個處理器上
    • 在內核態實現
    • 混合實現

      • 使用內核級線程,而後將用戶級線程與某些或者所有內核線程多路複用起來
  • 調度程序激活機制

    • 目標:模擬內核線程的功能,爲線程包提供一般在用戶空間中才能實現的更好的性能和更大的靈活性。
  • 彈出式線程

    • 概念:一個消息的到達致使系統建立一個處理該消息的線程
    • 優勢: 快速建立。沒有必須存儲的寄存器 、 堆棧

進程間通訊

  • 臨界區:對共享內存進行訪問的程序片斷。

    • 互斥:阻止多個進程同時讀寫共享的數據
  • 一個好的併發方案需知足:

    • 1)任何兩個進程不能同時處千其臨界區。
    • 2)不該對 CPU 的速度和數址作任何假設。
    • 3)臨界區外運行的進程不得阻塞其餘進程。
    • 4)不得使進程無限期等待進入臨界區。
  • 忙等待的互斥方案

    • 屏蔽中斷:每一個進程在剛剛進入臨界區後當即屏蔽全部中斷,在離開以前再打開中斷,避免不了競爭
    • 鎖變量:避免不了競爭
    • 嚴格輪換法:自旋鎖(spin lock ) 違反了3)
    • Peterson解法:個不須要嚴格輪換的軟件互斥算法。
    • TSL指令:須要硬件支持(test and set lock 測試井加鎖 )
    • XCHG:原子性地交換了兩個位置的內容
    • 缺點:優先級反轉問題
  • 睡眠(sleep)與喚醒(wakeup)進程間通訊原語使得在沒法進入臨界區時將阻塞

    • 生產者-消費者(producer-consumer)問題(有界緩衝區)
  • 信號量

    • 實現互斥或同步。

      • down(P)和up(V) (分別爲通常化後的sleep和wakeup) 對一倌號縣執行down操做, 則是檢查其值是否大千0。若該值大千0, 則將其值減1 (即用掉一個保存的喚醒信號) 並繼續;若該值爲0, 則進程將睡眠, 並且此時down操做並未結束。檢查數值、 修改變批值以及可能發生的睡眠操做均做爲一個單一的、 不可分割的原子操做完成。
  • 互斥量

    • 信號量的簡化版
  • 管程

    • 一種高級同步原語,任什麼時候刻管程中只有一個活躍進程,進入管程的互斥有編譯器負責,一般是一個互斥量或信號量。
    • 引入條件變量和2個操做(wait signal)來保證進程在沒法運行時被阻塞。
    • 限制:過低級,在少數編程語言以外沒法使用。(分佈式系統多個CPU各有私有內存,這些原語則失效)
  • 消息傳遞

    • 2條原語。send:調用向一個給定的目標發送一條消息,receive:調用從一個給定的源(或者是任意源, 若是接收者不介意的話)接收一條消息。若是沒有消息可用,則接收者可能被阻塞,直到一條消息到達,或者帶着一個錯誤碼當即返回。
  • 屏障

    • (barrier)用於進程組, 除非全部的進程都就緒準備着手下 一 個階段, 不然任何進程都不能進入下一個階段。
  • 避免鎖

    • 讀-複製-更新(Read-Copy-Update, RCU),增刪引用節點而不用鎖。

調度

  • 調度時機:

    • 1.在建立一個新進程以後, 須要決定是運行父進程仍是運行子進程。
    • 2.在一個進程退出時。
    • 3.當一個進程阻塞在1/0和信號量上或由千其餘緣由阻塞時, 必須選擇另外一個進程運行。
    • 4.在一個I/O中斷髮生時
  • 調度算法分類和目標

    • 全部系統

      • 公平--給每一個進程公平的CPU份額
      • 策略強制執行--保證規定的策略被執行
      • 平衡--保持系統的全部部分都忙碌
    • 批處理系統

      • 吞吐扯--每小時最大做業數
      • 週轉時間--從提交到終止間的最小時間
      • CPU利用率--保持CPU始終忙碌
    • 交互式系統

      • 響應時間--快速響應請求
      • 均衡性--知足用戶的指望
    • 實時系統

      • 知足截止時間--免丟失數據
      • 可預測性--在多媒體系統中避免品質下降
  • 典型調度算法

    • 批處理系統

      • 先來先服務
      • 最短做業(進程、線程)優先
      • 最短剩餘時間優先
    • 交互式系統

      • 時間片輪轉調度算法
      • 優先級調度算法
      • 多級反饋隊列調度算法
      • 最短進程優先
      • 保證調度
      • 彩票調度
      • 公平分享調度
    • 實時系統
    • 高響應比優先調度算法
  • 策略和機制

    • 調度機制和調度策略分離,是的調度算法參數化,可由用戶設置改變。
  • IPC問題
  • 哲學家就餐問題
  • 讀者寫者問題

內存管理

  • 地址空間

    • 地址空間:存儲器抽象,用於內存尋址的一個進程
    • 基址寄存器:程序起始物理地址
    • 界限寄存器:程序的長度
    • 交換技術:把一個進程完整調入內存, 使該進程運行一段時間, 而後把它存回磁盤。
    • 空閒內存管理:動態分配內存時通常用位圖和空閒區鏈表管理
  • 頁表

    • 虛擬地址=虛擬頁號(高位)+ 偏移量(地位部分)
    • 加速分頁過程

      • 要考慮兩個主要問題:

        • 1)虛擬地址到物理地址的映射必須很是快。
        • 2)若是虛擬地址空間很大, 頁表也會很大
      • 方案:

        • 1)轉換檢測緩衝區(相聯存儲器/快表):爲計算機設置一個小型的硬件設備, 將虛擬地址直接映射到物理地址,而沒必要再訪問頁表。
        • 2)軟件TLB管理: TLB 大到(如 64 個表項)能夠減小失效率
    • 針對大內存的頁表

      • 多級頁表
      • 倒排頁表:實際內存中的每一個頁框對應一個表項,而不是每一個虛擬頁面對應一個表項。
  • 頁面置換算法

    • 最優
    • 最近未使用
    • 先進先出
    • 第二次機會
    • 時鐘
    • 最近最少使用
    • 工做集模型:

      • 概念:分頁系統都會設法跟蹤進程的工做集,以確保在讓進程運行之前,它的工做集就已在內存中。
      • 算法:當發生缺頁中斷時,淘汰一個不在工做集中的頁面。
    • 工做集時鐘

      • 沒必要掃描整個頁表才能肯定被淘汰的頁面
      • 所需的數據結構是一個以頁框爲元素的循環表

文件

  • 文件

    • 命名
    • 結構

      • 字節序列;記錄序列;樹
  • 目錄

    • 層次目錄系統
  • 文件系統實現

    • 連續分配
    • 鏈表分配
    • 採用內存中的表進行鏈表分配
  • 管理和優化

    • 磁盤空間管理

      • 塊大小

        • 從歷史觀點上來講,文件系統將大小設在1~4KB之間, 但如今隨着磁盤超過了1TB, 仍是將塊的大小提高到64KB而且接受浪費的磁盤空間更好
      • 記錄空閒塊

        • 磁盤塊鏈表 每一塊要用到 32 位
        • 位圖 每塊只用一個二進制位標識 1TB 磁盤 須要大約 130 000 個 1KB
      • 磁盤配額

        • 系統管理員分給每一個用戶擁有文件和塊的最大數量, 操做系統確保每一個用戶不超過度給他們的配額。
    • 備份

      • 1)從意外的災難中恢復。
      • 2)從錯誤的操做中恢復。
    • 一致性

      • 塊的一致性檢查和文件的一致性檢查
    • 性能

      • 高速緩存
      • 塊提早讀
      • 減小磁盤臂運動
    • 碎片整理

輸入輸出

IO硬件原理

  • IO設備

    • 分類:

      • 塊設備:把信息存儲在固定大小的塊中,每一個塊有本身的地址(磁盤)
      • 字符設備:以字符爲單位發送或接收一個字符流。(打印機 網絡接口 鼠標)
    • 組成:

      • 機械部件(設備自己)
      • 電子部件(設備控制器/適配器)

        • 任務:把串行的位流轉換爲字節塊, 並進行必要的錯誤校訂工做
        • 組成:

          • 有幾個寄存器用來與CPU進行通訊,操做系統寫入它從而發送|接收|開啓|關閉

            • 方式:

              • 內存映射I/O
              • 直接存儲器存取(DMA)
          • 能夠讀寫的數據緩衝區

IO軟件原理

  • 目標

    • 設備獨立性:能夠訪問任意I/0設備而無需事先指定設備
    • 統一命名:一個文件或一個設備的名字應該是個簡單的字符串或整數,不依賴於設備
    • 錯誤處理:儘量地在接近硬件層面獲得處理
  • 實現

    • 程序控制I/O:

      • 打印例子:

        • 1.軟件首先要在用戶空間的一個緩衝區中組裝字符串
        • 2.用戶進程經過發出打開打印機一類的系統調用來得到打印機以便進行寫操做
        • 3.操做系統(一般) 將字符串緩衝區複製到內核空間中的一個數組(如p) 中
        • 4.操做系統查看打印機當前是否可用(輪詢、忙等待)
        • 5.一旦打印機可用,操做系統就複製第一個字符到打印機的數據寄存器中(內存映射1/0),激活打印機
        • 6.打印機的第二個寄存器代表其狀態

          • 當字符寫到數據寄存器的操做將致使狀態變爲非就緒
          • 處理完當前字符時設置某一位或者將某個值放到狀態寄存器代表已就緒
        • 7.重複5直到打印完,回到用戶進程
      • 缺點:忙等待將是低效的
    • 中斷驅動I/O

      • 打印例子:

        • 當打印機將字符打印完而且準備好接收下一個字符時,它將產生一箇中斷。這一中斷將中止當前進程而且保存其狀態。
      • 缺點:中斷髮生在每一個字符上
    • DMA的I/O

      • 打印例子:

        • 讓DMA控制器一次給打印機提供一個字符,而沒必要打擾CPU。
        • DMA控制器是程序控制I/O,由DMA而不是CPU作所有工做
        • 將中斷的次數從打印每一個字符一次減小到打印每一個緩衝區一次

IO軟件層次

  • 自頂向下4層:

    • 1.用戶級IO軟件
    • 2.與設備無關的操做系統軟件
    • 3.設備驅動程序
    • 4.中斷處理程序

磁盤

  • 磁盤臂調度算法

    • 1.先來先服務
    • 2.電梯算法
  • 錯誤處理

    • 控制器中處理:對千每個壞扇區, 用一個備用扇區替換它
    • 驅動程序中處理:發出一個recalibrate (從新校準)命令,讓磁盤臂儘量地向最外面移動,並將控制器內部的當前柱面重置爲0
  • 高級磁盤控制器

    • 至關強大的多核ARM處理器,有足夠的資源能夠輕易地運行Linux
  • 穩定存儲器

    • 穩定寫
    • 穩定讀
    • 崩潰恢復

時鐘

  • 時鐘硬件

    • 2種類型:

      • 簡單時鐘:每一個電壓週期產生一箇中斷, 頻率是50Hz或60Hz
      • 3部件構成:晶體振盪器 、 計數器和存儲寄存器,1000MHz甚至更高的頻率
    • 可編程時鐘操做模式:

      • 完成模式:one-shot mode
      • 方波模式:square-wave mode
  • 時鐘軟件(時鐘驅動程序)

    • 1)維護日時間。
    • 2) 防止進程超時運行。
    • 3)對 CPU的使用狀況記帳。
    • 4)處理用戶進程提出的alarm系統調用。
    • 5)爲系統自己的各個部分提供監視定時器。
    • 6) 完成概要剖析 、 監視和統計信息收集。

死鎖

  • 資源

    • 可搶佔資源: 能夠從擁有它的進程中搶佔而不會產生任何反作用(如 存儲器 )
    • 不可搶佔資源:在不引發相關的計算失敗的狀況下,沒法把它從佔有它的進程處搶佔過來(如 藍光光盤刻錄機)死鎖與不可搶佔資源有關
  • 定義:一個進程集合中的每一個進程都在等持只能由該進程集合中的其餘進程才能引起的事件
  • 發生(資源)死鎖的四個必要條件:

    • 1.互斥條件
    • 2.佔有和等待條件
    • 3.不可搶佔條件
    • 4.環路等待條件
  • 死鎖檢測

    • 每種類型一個資源的死鎖檢測:檢測有向圖是否有環路、
    • 每種類型多個資源的死鎖檢測:基千向最的比較(每一個進程起初都是沒有標記過的。算法開始會對進程作標記,進程被標記後就代表它們可以被執行,不會進入死鎖。 當算法結束時,任何沒有標記的進程都是死鎖進程。)
  • 死鎖恢復

    • 利用搶佔恢復
    • 利用回滾恢復
    • 經過殺死進程恢復
  • 死鎖避免

    • 資源軌跡圖
    • 安全狀態和不安全狀態
    • 單個資源的銀行家算法
    • 多個資源的銀行家算法
  • 死鎖預防

    • 破壞四個必要條件之一
  • 其餘問題

    • 兩階段加鎖
    • 通訊死鎖
    • 活鎖
    • 飢餓

參考資料

相關文章
相關標籤/搜索