内核头部
地址
- CR3,页表中存放的是物理地址
- GDT,LDT,IDT中存放的基地址是线性地址
- 程序变量的地址是逻辑地址(段+偏移,段默认DS),Flat模式(DS指向0-4G)下也是线性地址
- 如果不是Flat模式(比如Linux0.11),虽然同一程序的不同进程打印的变量地址是相同的,但线性地址不同(因为段基地址不同)
- 线性地址未分页时,成为虚拟地址
- 个人理解:Linux0.11之所以让程序面对不同的64M线性地址空间,是由于切换进程时不想改变CR3,只能通过线性地址前缀不同来区分页目录表项了
- Linux0.11也可以理解为,每个程序都面对0-4G的线性地址空间,但不同进程只使用线性地址空间中的一小部分。也就是说,程序面对线性地址空间这个假设没有打破



打印变量地址
- 可以看出打印变量地址,实际上打印的时偏移地址
