Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 0.11 核心啟動流程深度解析:從 BIOS 到保護模式

編輯:Linux 系統常見問題解答

概述

Linux 0.11 是 Linus Torvalds 早期核心版本,其啟動流程清晰展現了 x86 架構從實模式進入保護模式的關鍵步驟。本文依據原始碼路徑(boot/bootsect.s、boot/setup.s、boot/head.s)詳細解析各階段動作。

階段一:BIOS POST 與 MBR 載入 (實模式)

  1. CPU 上電進入實模式(16 位段式尋址,最大 1MB 空間)
  2. 從 0xFFFF0 (BIOS ROM) 開始執行,執行 POST、初始化中斷向量表 (IVT, 物理位址 0x0000)
  3. BIOS 將啟動裝置第一扇區 (MBR, 512 bytes) 讀入記憶體 0x7C00 (31KB)
  4. 跳轉至 0x7C00 執行 boot/bootsect.s

階段二:bootsect.s - 自我遷移與載入 setup

  • 將自身移動至 0x90000 (576KB)
  • 讀取啟動裝置後續 2KB (boot/setup.s) 至 0x90200
  • 讀取核心主體 (system 模組) 至 0x10000 (64KB)
  • 跳轉至 setup.s 繼續執行

階段三:setup.s - 硬體偵測與進入保護模式

  1. 將 system 模組移動至物理記憶體起始位置 (0x00000)
  2. 從 BIOS 取得系統資料(記憶體大小、磁碟參數、顯示模式等)存入指定記憶體位置 (如 0x90000 附近)
  3. 載入 GDTR (全域描述符表暫存器) 與 IDTR (中斷描述符表暫存器)
  4. 開啟 A20 位址線(突破 1MB 限制)
  5. 重新初始化 8259A PIC(將硬體中斷向量重映射至 0x20~0x2F,避免與 CPU 例外向量衝突)
  6. 設定 CR0 暫存器 PE 位 (Protection Enable),正式進入 32 位保護模式
  7. 遠跳轉至 head.s (位於 system 模組最前端)

階段四:head.s - 分頁機制與核心資料結構初始化

  • 建立頁目錄表與頁表,啟用分頁機制 (CR0 PG 位)
  • 重新設定核心使用的 IDT (中斷描述符表) 與 GDT (全域描述符表)
  • 為軟碟驅動程式保留 1KB 緩衝區
  • 跳轉至 main.c (C 語言核心主入口),啟動程序管理、記憶體管理、檔案系統等子系統

關鍵記憶體佈局圖 (啟動完成後)

0x000000 - 0x0FFFFF : 實模式區 / IVT / BIOS Data Area
0x100000 - ...       : 核心映像
     head.s          : 0x100000 (核心進入點)
     kernel code/data
     page tables
     task[0] (init_task)

歷史意義

Linux 0.11 的啟動流程雖簡單,但完整展示了 x86 架構核心啟動的核心邏輯:BIOS → MBR → Bootloader → 硬體初始化 → 保護模式 → 分頁 → C 核心。現代核心 (GRUB2 + initramfs + systemd) 雖複雜許多,但骨架仍沿襲此架構。

Copyright © Windows教程網 All Rights Reserved