JOS 学习笔记
八月 16, 2026 [Linux 与系统] #jos #OSJOS 学习笔记
IDT/GDT/LDT
- GDT(Global Descriptor Table):全局描述符表,系统级段描述符
- LDT(Local Descriptor Table):局部描述符表,每个任务可有一张
- IDT(Interrupt Descriptor Table):中断描述符表
动态链接:PLT 与 GOT
- GOT(Global Offset Table):存放外部函数地址的数据表
- PLT(Procedure Linkage Table):调用外部函数的额外代码段表
每个调用动态库函数的位置都需要这两项——PLT 负责跳转到 GOT 中记录的函数地址,首次调用时由动态链接器填充 GOT(延迟绑定)。
JOS 内核调试
make qemu-nox-gdb &
make gdb
# GDB 中加载引导程序和内核符号
gdb> symbol-file obj/boot/boot.out
gdb> b bootmain
gdb> add-symbol-file obj/kern/kernel
页表和 CR3
每个进程页目录中共享相同的内核页表项。进程切换时修改 CR3 切换地址空间,但内核部分的映射不变,内核临时映射只需修改共享的内核页表。
常用汇编器
| 汇编器 | 语法风格 |
|---|---|
| GAS (GNU Assembler) | AT&T |
| MASM (Microsoft) | Intel |
| NASM | Intel-like(更简洁) |
| FASM (Flat Assembler) | Intel |
AT&T 与 Intel 语法关键差异:
| 差异 | AT&T | Intel |
|---|---|---|
| 寄存器 | %eax | eax |
| 立即数 | $1 | 1 |
| 操作数顺序 | 源→目的 | 目的←源 |
| 内存寻址 | offset(%base, %index, scale) | [base + index*scale + offset] |