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


一、操作系統概述

1. 計算機軟硬件系統

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

2. 計算機操作系統的發展

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

3. 不同視角下的操作系統

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

二、處理器管理

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. 處理器調度

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

三、存儲管理

1. 存儲管理的基本概念

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

2. 單連續分區存儲管理

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

3. 頁式存儲管理 **

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

4. 其他

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

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

四、設備管理

1. IO的控制方式

2. IO的實現

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

3. 磁盤

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

五、文件系統

1. 文件系統

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

2. 文件

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

六、並發程序設計

1. 並發程序的基本概念

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

2. 並發程序控制和問題

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM