/images/avatar.png

OS ABI 了解

簡介

常常說 ABI 是已經編譯好的程式和 OS 之間的介面規範,他規定的是 Binary 層級怎麼互動的。

根據 System V ABI,像是:

  • Calling Convention
    • 函式參數放在 stack/register
    • Return value 放哪裡
    • Stack frame layout
    • CPU 執行函式只是跳到某個函式第一個 instruction,編譯器產生的機器碼負責把第一個參數放在 stack/register
  • System Call Interface
  • 直接定義 Bianry Format,System V ABI 使用 ELF
  • Dynamic Linking 的規則
  • 資料類型的大小

最常見的就是以 C 的 ABI,C++ ABI 則複雜一點。

2025 交大 OSC 紀錄

Lab0

因為是跨平台開發 ARM 機器,所以要用到 Cross compiler 開發,並且使用自己的 Linker 把寫的程式弄到特定記憶體位置。

中間有 Assembler,裡面會有 .data, .text 等,寫組合語言時,檔案裡會有兩種東西:

FreeBSD Interupt 介紹

基礎分類

  • Hardware interrupt: 非同步的產生,像是硬體鍵盤,收到封包等
  • Hardware trap/Exception: 由 CPU 指令產生的事件,像是 Page Fault/除與 0/無效指令,同步的事件
  • Software trap: 軟體故意觸發的 Exception

上半部下半部

  1. Top half(硬中斷 context)
    1. ISR(interrupt service routine)
    2. 很短
    3. 不能 sleep
    4. 會關閉中斷
  2. 下半部,可以把 interrupt handler 轉成 kernel thread 來跑
    1. ithread = interrupt handling thread

所以 FreeBSD 會用一個 kernel thread 放入 task queue 來作下半部的事情,有點類似 Linux workqueue。

硬體韌體相關協議了解

PCIe

以前有北橋負責讓 CPU -> RAM/GPU,南橋負責到 USB/SATA/PCI/Audio 等,現在南北橋晶片直接融合到 CPU 裡面,並且透過 PCIe 連接,像是:

  • CPU -> GPU
  • CPU -> SSD
  • CPU -> 網卡
  • CPU -> USB Controller

以 CPU -> GPU,常常會用 MMIO,MMIO 就是使用 PCIe 實作,並且還會有 DMA。