概述
作業系統的共性
- 從硬體的角度來看:
- 管理硬體
将硬體資源納入統一的管理
- 對硬體提供抽象
将有限的、離散的資源抽象成無限的、連續的資源
- 管理硬體
- 從應用的角度來看:
- 服務于應用
提供了不同層次的接口(系統調用)以滿足應用的需求
- 管理應用
對應用的生命周期進行管理(加載、啟動、切換、排程、銷毀)
- 服務于應用
作業系統接口
- 系統調用接口
- 應用程式通過系統調用向作業系統核心申請服務
- POSIX接口
- Portable Operating System Interface for uniX (可移植作業系統接口)
ChCore:一個簡單的實驗作業系統
- ChCore包括兩個部分:
- 運作在核心态的ChCore為核心
- 運作在使用者态的各種作業系統服務
ARM硬體結構
AArch64中特權級
AArch64的特權級别分類
- AArch64中的特權級别被稱為異常級别,共四種:
- EL0:
- 使用者态
- EL1
- 核心态
- EL2
- 虛拟機監控器(VMM,也稱為Hypervisor)
- EL3
- 和TrustZone相關,負責普通世界(normal world)和安全世界(secure world)之間的切換
從EL0到EL1的場景
- 系統調用
- 指令觸發異常(exception)
- CPU收到中斷(interrupt)
前兩種屬于同步的CPU特權級切換,是由CPU中正在執行的指令導緻的
第3種稱為異步的CPU特權級切換
儲存現場的狀态
- 在發生特權級切換時,CPU負責儲存目前執行狀态,以便作業系統核心在處理異常時使用,并在處理之後恢複應用程式的執行。
- 要儲存的内容包括:
- 觸發異常的PC, 儲存在ELR_EL1(異常連結寄存器)
- 異常原因, 儲存在ESR_EL1(異常症狀寄存器)
- 棧指針從SP_EL0切換到SP_EL1
- 其他狀态:CPU的相關狀态儲存在SPSR_EL1(已儲存的程式狀态寄存器),引發缺頁異常的位址儲存在FAR_EL1(錯誤位址寄存器)
異常向量表
- 異常向量表中為不同的異常類型配置相應的異常處理函數
- 發生特權級切換時,CPU讀取VBAR_EL1(向量基位址寄存器)來獲的異常向量表的基位址,根據異常原因(ESR_EL1中儲存的内容)調用相應的異常處理函數。
AArch64寄存器
-
31個64位通用寄存器: X0 ~ X30
其中:
- X29:棧指針寄存器(FP)
- 儲存函數調用過程中棧頂的位址
- X30:連結位址寄存器(LP)
- CPU在執行函數調用指令bl時,會把傳回位址儲存在其中
- X29:棧指針寄存器(FP)
-
EL1特權級下有兩個頁表基址寄存器(TTBR)
負責翻譯虛拟位址空間中不同的位址段。
- TTBR0_EL1
- TTBR1_EL1
實體緩存
相聯度
- 組相聯 = 組内全相聯,組間直接映射
= 路内直接映射, 路間全相聯
緩存結構
- CPU緩存是由若幹個==緩存行(cache line)==組成的(常見64B)
- 實體位址包括分為三個部分:
tag index offset 路(way) 組(set) 緩存行内偏移量
AArch64緩存尋址
- 實體位址長度44位(2^44)
- 緩存大小為32KB(2^15)
- 緩存行大小為64B(2^6)
- 緩存内有2^9=512個緩存行
- 2路組相聯
- 分成256個組(組間直接映射)
- 每個組2個緩存行(組内全相聯)
- 尋址過程:
- 先定位組(對比index部分)
- 找到組後,在組内找塊(對比tag部分)
裝置與中斷
記憶體映射輸入輸出(MMIO Memory-Mapped I/O)
把輸入輸出裝置和實體記憶體放到同一個位址空間,為裝置内部的記憶體和寄存器也配置設定相應的位址。