linux内存

1、段选择符为空的逻辑地址被认为是无效的,所以段0弃用,GDT(global descriptor table)第一项总是0
2、16位段选择符,其中1位标志指段描述符存放在GDT(标志位0)或LDT(local descriptor table)(标志位1),2位描述cs寄存器中cpu当前特权等级(0级内核态、3级用户态),13位为索引(总共8191个段描述符)
3、由段选择符的T1域决定GDT或者LDT,通过从gdtr/ldtr寄存器的线性基地址与段选择符的索引域结合计算段描述符的的基地址
4、段描述符的基地址与逻辑地址偏移量相加获得线性地址
5、linux没有通过段给每个进程分配不同的线性地址空间,而是通过32为偏移量给每个进程分配不同的线性地址空间
6、linux用到6个段,分别是:内核代码段、内核数据段、用户代码段、用户数据段、任务状态段(TSS)、LDT段,每个进程GDT包含两个段描述符,一个用户TSS段,一个用于LDT段。当进程从用户态切换到内核态时,需要更新寄存器指向的段;内核态切换到用户态同理
7、内核数据段包含每个进程的进程描述符,每个进程描述符包含该进程的TSS段和指向该进程的LDT段

1、32位linux,对于物理内存,内核在设计时,实际可以直接访问的物理内存就最大只有1GB(原因:内核固定页表数限制)

浙公网安备 33010602011771号