現代作業系統-原理與實現【讀書筆記】

一隻愛做筆記的碼農發表於2020-11-22

看看多久才會讀完---買於20年雙十一

目錄

第1章-作業系統概述

第2章-硬體結構

第3章-作業系統結構

第4章-記憶體管理


第1章-作業系統概述

從硬體角度

對硬體進行管理,處理各種錯誤

對硬體進行抽象,形成不依賴硬體的資源

從應用角度

提供不同的介面,滿足不同型別的訪問控制,應用間互動等服務

進行資源分配與管理

 

作業系統提供不同層次的介面

  1. 系統呼叫介面,例如printf【printf 從應用程式-》libc-》下陷處理-》系統呼叫處理】[從應用程式-》libc-》是在使用者態] [從下陷處理-》系統呼叫處理 是在核心態]
  2. POSIX介面【可移植作業系統介面】,例如glibc
  3. 領域應用介面,例如AUTOSAR,這種算框架了

第2章-硬體結構

馮諾依曼-機,包含

  1. 中央處理器
  2. 儲存器
  3. 輸入輸出

指令集是ISA【指令集架構】的重要組成部分,AArch64屬於RISC【精簡指令集計算機】

特權級在AArch64中叫做異常級別,包括

  1. EL0   應用層跑在這【使用者態】
  2. EL1   作業系統跑在這【核心態】
  3. EL2   虛擬化在這裡【虛擬機器場景用】
  4. EL3   TrustZone相關【負責切換安全世界和普通世界】

 

何時從EL0切換到EL1

  1. 應用層程式用系統呼叫
  2. CPU收到中斷
  3. 應用層觸發了異常

其中1和2為同步的CPU特權級切換

3為非同步的CPU特權級切換

 

從EL0切換到EL1

  1. 觸發異常的指令地址【PC】儲存到ELR_EL1
  2. 異常原因儲存到ESR_EL1
  3. CPU將棧指標從SP_EL0切換到SP_EL1,在異常向量表中選擇對應的異常處理函式
  4. CPU還要儲存一些狀態

 

暫存器是ISA的重要組成,包括

  1. 通用暫存器
  2. 棧指標暫存器
  3. 連結指標

EL1下有兩個頁表基地址暫存器,這個和虛擬記憶體有關係

 

Cache

這個是為了加快CPU訪問資料的速度,包括:

若干個緩衝行,每一個行包括

一個有效位

一個標記地址

 

為了通過實體地址找到對應的快取,實體地址在邏輯上分為Tag,Set以及Offset三段

實體地址中Set段能夠表示的最大數目叫做

支援的最大Tag數叫做

快取結構和快取定址的圖請看書

 

第3章-作業系統結構

設計作業系統的原則【機制與策略分離】

策略:做什麼【輸入處理,啟動載入....】

機制:如何做【排程方法...】

管理複雜系統的方法

  1. 模組化
  2. 抽象
  3. 分層
  4. 層級

模組化:分而治之,將複雜系統分解成一系列的模組,保證模組之間的界限,高耦合低內聚,使之有獨立性

抽象:介面與實現分離,無需關心各個模組之間的內部實現

分層:將模組按一定的層次劃分,約束內部模組之間的互動方式

層級:將功能相近的模組劃分在一個子系統

作業系統的核心架構

  1. 簡要結構
  2. 單核心
  3. 微核心
  4. 外核
  5. 多核心

簡要結構:應用程式和作業系統在同一個地址空間,沒有虛擬記憶體管理,特權級隔離等功能,任何一個模組出問題,系統就崩潰了

單核心:所有的作業系統模組執行在核心態

微核心:將單個的核心功能拆分,作為服務部署在使用者態,僅有很小部分的核心執行在核心態,服務提供程式間通訊的功能使之互相協作

外核:作業系統與應用程式掛鉤,應用程式要啥就裝對應的功能,核心只負責對作業系統在多個作業系統之間的多路複用

多核心:通過多核心管理異構多核裝置

第4章-記憶體管理

應用程式是面向虛擬記憶體編寫的,CPU會翻譯地址到實體地址,作業系統來管理虛擬地址和實體地址的對映

設計時的三個目標

  1. 高效性【不應占用過多的實體記憶體資源】
  2. 安全性【使不同應用程式互相隔離】
  3. 透明性【應用層程式設計時感覺不到記憶體的抽象】

CPU通過MMU進行地址翻譯,為了加速翻譯,現代CPU都有TLB【轉址旁路快取】

有兩種機制

  1. 分段機制
  2. 分頁機制

分段機制不多寫了,目前用的多的是分頁機制的

 

 

 

 

 

 

相關文章