Linux在X86上采用最低限度的分段机制,其目的是为了避开复杂的分段机制,提高Linux在其他不支持分段机制的硬件平台的可移植性,同时又充分利用X86的分段机制来隔离用户代码和内核代码。因此,在Linux上,逻辑地址和线性地址具有相同的值。
由于X86的GDT最大表长为64KB,每个段描述符为8B,所以GDT最多能够容纳8192个段描述符。每产生一个进程,Linux为该进程在GDT中创建两个描述符:LDT段描述符和TSS描述符,除去Linux在GDT中保留的前12项,GDT实际最多能容纳4090个进程。Linux的内核自身有独立的代码段和数据段,其对应的段描述符分别存储在GDT中的第2项和第3项。每个进程也有独立的代码段和数据段,对应的段描述符存储在它自己的LDT中。
在Linux中,每个用户进程都可以访问4GB的线性地址空间。其中0x0~0xBFFFFFFF的3GB空间为用户态空间,用户态进程可以直接访问。从0xC0000000~0x3FFFFFFF的1GB空间为内核态空间,存放内核访问的代码和数据,用户态进程不能直接访问。当用户进程通过中断或系统调用访问内核态空间时,会触发X86的特权级转换(从特权级3切换到特权级0),即从用户态切换到内核态。