天天看點

現代作業系統 原理與實作(銀杏書)—— 概述、arm硬體結構概述ARM硬體結構

概述

作業系統的共性

  • 從硬體的角度來看:
    • 管理硬體
      将硬體資源納入統一的管理
    • 對硬體提供抽象
      将有限的、離散的資源抽象成無限的、連續的資源
  • 從應用的角度來看:
    • 服務于應用
      提供了不同層次的接口(系統調用)以滿足應用的需求
    • 管理應用
      對應用的生命周期進行管理(加載、啟動、切換、排程、銷毀)

作業系統接口

  • 系統調用接口
    • 應用程式通過系統調用向作業系統核心申請服務
  • 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的場景

  1. 系統調用
  2. 指令觸發異常(exception)
  3. CPU收到中斷(interrupt)

前兩種屬于同步的CPU特權級切換,是由CPU中正在執行的指令導緻的

第3種稱為異步的CPU特權級切換

儲存現場的狀态

  • 在發生特權級切換時,CPU負責儲存目前執行狀态,以便作業系統核心在處理異常時使用,并在處理之後恢複應用程式的執行。
  • 要儲存的内容包括:
  1. 觸發異常的PC, 儲存在ELR_EL1(異常連結寄存器)
  2. 異常原因, 儲存在ESR_EL1(異常症狀寄存器)
  3. 棧指針從SP_EL0切換到SP_EL1
  4. 其他狀态:CPU的相關狀态儲存在SPSR_EL1(已儲存的程式狀态寄存器),引發缺頁異常的位址儲存在FAR_EL1(錯誤位址寄存器)

異常向量表

  • 異常向量表中為不同的異常類型配置相應的異常處理函數
  • 發生特權級切換時,CPU讀取VBAR_EL1(向量基位址寄存器)來獲的異常向量表的基位址,根據異常原因(ESR_EL1中儲存的内容)調用相應的異常處理函數。

AArch64寄存器

  • 31個64位通用寄存器: X0 ~ X30

    其中:

    • X29:棧指針寄存器(FP)
      • 儲存函數調用過程中棧頂的位址
    • X30:連結位址寄存器(LP)
      • CPU在執行函數調用指令bl時,會把傳回位址儲存在其中
  • 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個緩存行(組内全相聯)
  • 尋址過程:
    1. 先定位組(對比index部分)
    2. 找到組後,在組内找塊(對比tag部分)

裝置與中斷

記憶體映射輸入輸出(MMIO Memory-Mapped I/O)

把輸入輸出裝置和實體記憶體放到同一個位址空間,為裝置内部的記憶體和寄存器也配置設定相應的位址。

輪詢與中斷