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

一隻愛做筆記的碼農 發表於 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. 分頁機制

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