【重學計算機】計算機操做系統

1、操做系統概述

1. 計算機軟硬件系統html

  • 馮諾伊曼結構
    • 以運算單元爲核心,控制流由指令流產生
    • 程序和數據存儲在主存中
    • 主存是按地址訪問,線性編址
    • 指令由操做碼和地址碼組成
    • 數據以二進制編碼
  • 其餘:參考《重學計算機-計算機組成原理》

2. 計算機操做系統的發展程序員

  • 概述:任何一臺機器都有其操做平臺和操做系統
    • 洗衣機:開關表示、按鈕控制、亮燈顯示
  • 演進過程
    • 手工操做:手動調動地址和數據按鈕錄入內存,而後點運行
    • 引進裝入程序:用卡片和紙帶,經過ROM上的裝入程序載入內存
      • 彙編語言:對指令提供了助記符號
      • 高級語言:面向問題
    • 簡單批處理系統:編寫做業控制程序,縮短手工操做的時間
    • 多道批處理系統:排隊執行做業,不能同時,也不能和計算機交互
    • 分時系統、實時系統:進程間切換,引入中斷機制
    • 通用操做系統:同時具有以上功能

3. 不一樣視角下的操做系統算法

    • 資源管理的角度
      • 資源:硬件資源(處理器、內存、外設),軟件資源(數據、程序)
      • 例子:驅動程序
      • 共享:資源獨佔、併發共享
      • 分配:靜態、動態、搶佔
    • 程序控制的角度:進程
    • 操做方式的角度:脫機、聯機
    • 人機交互的角度:行命令、全屏幕控制、窗口界面、虛擬現實
    • 程序接口的角度:系統調用(陷入機制)
    • 系統結構的角度
      • OS構件:內核、進程、線程、管程
      • 設計概念:模塊化、層次化、虛擬化

2、處理器管理

1. 指令與處理器模式數組

  • 指令執行週期:取指、譯碼、執行
  • 指令分類(根據權限)
    • 特權指令:只能被操做系統內核使用(啓動IO,置PC值)
    • 非特權指令:全部程序都能使用
  • 處理器模式
    • 共有四種:0內核模式,1系統調用,2共享庫程序,3用戶模式
    • 通常來講:只有0內核模式(能執行所有指令)和3用戶模式(只能執行非特權指令)
    • 模式切換
      • 用戶模式 --> 內核模式(系統調用、異常、響應中斷)
      • 內核模式 --> 用戶模式(中斷返回指令)

2. 中斷緩存

  • 概念:
    • 操做系統是中斷驅動的。即中斷是激活操做系統的惟一方式
    • 廣義中斷:中止CPU正在執行的進程,轉而執行中斷處理程序,處理完後返回原進程或調度新進程
    • 狹義中斷:源於處理器以外的中斷事件,IO中斷、時鐘中斷、外部信號中斷
  • 中斷源:
    • 處理器硬件故障中斷事件:內存故障
    • 程序性中斷事件:除0異常、缺頁異常
    • 自願性中斷事件:系統調用
    • IO中斷事件:IO完成
    • 外部中斷事件:鼠標點擊
  • 中斷系統:
    • 實現:硬件完成中斷響應,軟件完成中斷處理
    • 中斷裝置
      • 處理器外中斷:由中斷控制器實現
      • 處理器內中斷(陷阱):由指令控制邏輯實現
      • 系統調用(系統陷阱):執行陷入指令時直接觸發,即系統陷阱
    • 中斷處理流程
    • 多中斷處理:中斷屏蔽、中斷優先級、中斷嵌套

3. 進程數據結構

  • 進程:操做系統進行資源分配和調度的獨立單位
  • 進程解剖:OS管理進程的數據結構P + 內存代碼 + 內存數據 + 通用寄存器R + PSW
  • 進程狀態
  • 進程數據
    • 進程控制塊PCB:是OS用於記錄進程狀態和環境信息的數據結構
      • 標識信息:進程標識(進程標識號、進程組標識號)
      • 現場信息:用戶可見寄存器內容、控制/狀態寄存器內容、棧指針內容
      • 控制信息:進程調度信息、進程組成信息、隊列指引元、通訊相關、進程特權信息、處理器使用信息、資源清單信息
    • 進程映像:某一時刻進程的內容及執行狀態集合
      • 進程控制塊、進程程序塊、進程數據塊、核心棧
    • 進程上下文:進程執行的環境支持(CPU現場、Cache中的執行信息)
      • 用戶級、寄存器級、系統級
  • 進程的管理
    • 進程實現的隊列模型
    • 進程控制流程
      • 進程建立:進程表增長一項,申請PCB並初始化,生成標識,創建映像,分配資源,移入就緒隊列
      • 進程撤銷:從隊列中移除,歸還響應資源。。。
      • 進程阻塞:保存現場,修改PCB,移入等待隊列
      • 進程喚醒:從等待隊列移出,修改PCB,進入就緒隊列
      • 進程掛起:修改進程狀態並出入相關隊列,收回內存等資源送至對換區
      • 進程激活:分配內存,修改狀態並出入相關隊列
    • 原語
      • 概念:由若干指令構成的完成某種特定功能,有原子性
      • 應用:修改OS核心數據結構(進程表、PCB池)
  • 進程切換與模式切換
    • 流程: 倆進程上下文切換(保存被中斷的上下文、進程調度、恢復待運行的上下文)
    • 模式切換:用戶態到內核態這種。進程切換必須在內核態完成,因此必須經理模式切換

4. 線程多線程

  • 多線程技術:一個進程內有多個線程
  • 思路:將進程的兩個功能「獨立分配資源」和「調度執行」功能分開
  •    
  • 分類:
    • KLT:內核級多線程
    • ULT:用戶級別多線程
  • 多線程實現的混合策略
    • 一個ULT綁定多個KLT

5. 處理器調度閉包

    • 處理器調度的層次:高級、中級、低級
    • 處理器調度算法
      • 原則:資源利用率、響應時間、週轉時間(進入系統到出系統時間)、吞吐量(單位時間處理進程數)、公平性
      • 算法:優先數算法、時間片輪轉、分級調度算法、彩票算法

3、存儲管理

1. 存儲管理的基本概念併發

  • 邏輯地址:用戶地址,從零開始編號
    • 一維邏輯地址:(地址)
    • 二維邏輯地址:(段號: 段內地址)
  • 主存儲器的複用方式
    • 按分區:主存劃分爲多個固定/可變分區,一個程序佔一個分區
    • 按頁架:主存劃分爲多個固定頁架,一個程序佔多個頁架
  • 存儲管理的模式
    • 單連續:一維邏輯地址程序,佔一個固定/可變分區
    • 段   式:二維邏輯地址程序,佔多個可變分區
    • 頁   式:一維邏輯地址程序,佔多個頁架
    • 段頁式:二維邏輯地址程序,佔多個頁架
  • 地址轉換:邏輯地址 --> 物理地址
    • 靜態重定位:程序裝入內存時轉換(早期OS)
    • 動態重定位:CPU執行時轉換,效率考慮須要硬件幫助
  • 虛擬存儲器
    • 因爲程序的局部性順序性等,能夠考慮只將部分程序調入主存,其餘的隨用隨調
    • 達到了面對程序員主存擴容的目的

2. 單連續分區存儲管理模塊化

  • 單用戶連續分區管理:主存區劃分爲系統區和用戶區,採用靜態重定位進行地址轉換,通常適用於單用戶單任務操做系統(DOS)
  • 固定分區管理:一個程序佔一個分區,有主存分配表,容易產生內零頭
  • 可變分區管理:按進程內存需求動態分配內存空間,容易產生外零頭

3. 頁式存儲管理 **

  • 概念:
    • 主存分頁架,程序分
    • 不一樣程序頁可放在不一樣主存頁架中,不須要連續
    • 頁和頁架關係由頁表維護
    • 位示圖表示主存分配與去配,用進程頁表維護進程邏輯完整性
  • 地址:
    • 邏輯地址:頁號 + 單元號
    • 物理地址:頁架號 + 單元號
  • 快表
  • 頁式虛擬存儲
    • 頁表:標識位 + 主存塊號 + 輔存地址
    • 實現
      • 查頁表,若頁在內存,則生成絕對地址
      • 若不在內存,發起缺頁中斷
      • OS響應缺頁中斷,若內存有空閒頁架,則從輔存中調入頁。更新頁錶快表
      • 若無空閒頁架,先淘汰頁,再調入
  • 頁面調度算法

4. 其餘

  • 段式存儲管理:基本不用,略
  • 段頁式存儲管理:基本不用,略
  • 內存管理單元MMU:
    • 做用:管理虛擬存儲器的硬件控制線路,把虛擬地址映射爲物理地址,並提供內存保護,必要時淘汰頁面
    • 實現:用一種數據結構 反置頁表IPT

PS:許多年之前,當人們還在使用DOS或是更古老的操做系統的時候,計算機的內存還很是小,通常都是以K爲單位進行計算,相應的,當時的程序規模也不大,因此內存容量雖然小,但仍是能夠容納當時的程序。但隨着圖形界面的興起還有用戶需求的不斷增大,應用程序的規模也隨之膨脹起來,終於一個難題在程序員的面前,那就是應用程序太大以致於內存容納不下該程序,一般解決的辦法是把程序分割成許多稱爲覆蓋塊(overlay)的片斷。覆蓋塊0首先運行,結束時他將調用另外一個覆蓋塊。雖然覆蓋塊的交換是由OS完成的,可是必須先由程序員把程序先進行分割,這是一個費時費力的工做,並且至關枯燥。人們必須找到更好的辦法從根本上解決這個問題。不久人們找到了一個辦法,這就是虛擬存儲器(virtual memory).虛擬存儲器的基本思想是程序,數據,堆棧的總的大小能夠超過物理存儲器的大小,操做系統把當前使用的部分保留在內存中,而把其餘未被使用的部分保存在磁盤上。好比對一個16MB的程序和一個內存只有4MB的機器,操做系統經過選擇,能夠決定各個時刻將哪4M的內容保留在內存中,並在須要時在內存和磁盤間交換程序片斷,這樣就能夠把這個16M的程序運行在一個只具備4M內存機器上了。而這個16M的程序在運行前沒必要由程序員進行分割。

4、設備管理

1. IO的控制方式

2. IO的實現

  • 軟件實現層次:硬件 --> 中斷處理程序 --> 設備驅動程序 --> 獨立於設備的IO軟件 --> 用戶空間的IO軟件
  • IO緩衝:
    • 解決問題:
      • 設備與CPU速度不匹配
      • 邏輯記錄大小和物理記錄大小不一致
      • 減小IO操做對CPU的中斷次數
    • 實現:緩衝區
      • 內存中開闢一個專門臨時存放IO數據的區域
    • 分類:單緩衝、雙緩衝、多緩衝

3. 磁盤

  • 調度策略
    • 移臂調度:以雙向調度中的電梯調度算法爲經典
    • 旋轉調度:寫數據時採用交叉因子寫入方式,能夠提升旋轉讀數據的命中率

5、文件系統

1. 文件系統

  • 文件系統概述
    • 文件的組織:
      • 邏輯結構:流式、記錄式
      • 物理結構:順序、鏈接、直接、索引
    • 文件的存取:順序、直接、索引
    • 文件的控制:邏輯控制、物理控制
    • 文件的使用:打開、關閉、讀、寫、控制
  • 文件的存儲
    • :存儲介質上連續存儲的區域,是主存與輔存信息交換的單位
    • 順序存取設備:光盤、磁帶
    • 直接存取設備:磁盤

2. 文件

  • 文件的邏輯結構
    • 流式文件:只是由一段字節序列構成的
    • 記錄式文件:有含義有結構的信息,好比員工工資記錄
  • 文件的物理機構
    • 順序文件:塊塊之間相連,批處理文件和系統文件通常都這麼存。---> 數組
    • 鏈接文件:有鏈接字指向下一個塊地址。---> 鏈表
    • 直接文件:又叫散列文件。對內容進行散列存儲到相應物理位置。 ---> 散列表
    • 索引文件:爲文件創建一個索引表,可多級。 ---> 增長了散列表的鏈表
  • 文件的目錄
    • 概念:實現文件按名存取的關鍵數據結構
    • 分類:一級目錄、二級目錄、樹型目錄

6、併發程序設計

1. 併發程序的基本概念

  • 程序順序性
    • 內部順序性:CPU嚴格按照順序執行指令
    • 外部順序性:程序員設計程序時每每用順序設計的思想
  • 順序程序特性
    • 程序執行的順序性
    • 計算環境的封閉性: 程序執行時猶如獨佔資源
    • 計算結果的肯定性
    • 計算過程的可再現性
  • 併發進程
    • 無關的併發進程:一組併發進程,在不一樣變量集上運行
    • 交往的併發進程:一組併發進程,共享某些變量,相互影響
  • 併發進程制約關係
    • 進程互斥:爭奪某一個資源
    • 進程同步:共同完成某一個任務,協調前後順序
    • 發生問題:
      • 與時間有關的錯誤:結果錯誤、永遠等待
  • 臨界區:
    • 臨界資源:一次只能被一個進程使用的資源(互斥共享變量)
    • 臨界區:是個程序段,是併發進程中與互斥共享變量相關的程序段
    • 相關的臨界區:兩個進程的臨界區有相同的臨界資源(必須互斥進入)
    • 問題
      • 多個併發進程訪問臨界資源存在制約關係
      • 若是兩個進程同時處在相關的臨界區,會發生與時間有關的錯誤
    • 臨界區管理的要求
      • 一次至多容許一個進程停留在相關臨界區
      • 一個進程不能無限制停留在臨界區內
      • 一個進程不能無限制等待進入臨界區內
    • 臨界區嵌套使用
    •  

2. 併發程序控制和問題

  • 臨界區管理實現:
    • 思路判斷鎖獲取鎖要做爲原子操做,否則會死鎖或時間錯誤
    • 實現
      • 原子指令:測試並創建鎖指令、對換指令(忙式等待,效率不高)
      • 中斷控制:進出臨界區時開關中斷,這樣臨界區執行時就不會被中斷,天然實現了原子性
        • 這個時操做系統的原語,是操做系統解決這個問題的辦法
        • 不建議用戶程序使用,由於沒法保證程序員設計出短小精悍的原語
      • PV操做:用信號量,「申請-等待隊列-中斷恢復」
    • 生產者消費者問題
  • 進程間通訊
    • 信號量:低級通訊方式
    • 信件:進程通訊機制(直接通訊、間接通訊)
    • 基於流:多個進程共同使用一個緩衝區
    • RPC:遠程過程調用
  • 死鎖
    • 概念:兩個進程分別等待對方佔有的資源
    • 死鎖的產生
      • 互斥:進程互斥地使用資源
      • 佔有和等待:一個進程得不到資源,就等待且不釋放已有資源
      • 不剝奪:進程不能從另外一個進程搶走資源
      • 循環等待:每一個進程都等待它前一個進程所持有的資源
    • 死鎖的防止
      • 破壞上述四個條件之一便可
      • eg. 層次分配:資源分紅多個層次,一個進程得到某個資源後只能得到比他層次更高的資源  
    • 死鎖的避免:銀行家算法
    • 死鎖的檢測
      • 算法:warshall閉包

相關文章
相關標籤/搜索