用户态代码段段选择子排行14。 148+3==0x73
用户态数据段段选择子排行15。 158+30x7B
内核态代码段段选择子排行12。 12*80x60
内核态数据段段选择子排行13。 13*8==0x68
#define GDT_ENTRY_DEFAULT_USER_CS 14
#define __USER_CS (GDT_ENTRY_DEFAULT_USER_CS * 8 + 3)
#define GDT_ENTRY_DEFAULT_USER_DS 15
#define __USER_DS (GDT_ENTRY_DEFAULT_USER_DS * 8 + 3)
#define GDT_ENTRY_KERNEL_BASE 12
#define GDT_ENTRY_KERNEL_CS (GDT_ENTRY_KERNEL_BASE + 0)
#define __KERNEL_CS (GDT_ENTRY_KERNEL_CS * 8)
#define GDT_ENTRY_KERNEL_DS (GDT_ENTRY_KERNEL_BASE + 1)
#define __KERNEL_DS (GDT_ENTRY_KERNEL_DS * 8)
这样跟深入理解linux内核描述的一致
gdt每个CPU一个
static inline struct desc_struct *get_cpu_gdt_table(unsigned int cpu)
{
return per_cpu(gdt_page, cpu).gdt;
}
gdt的描述符定义了256个
idt_descr:
.word IDT_ENTRIES*8-1 # idt contains 256 entries
.long idt_table
TSS段每个CPU一个
init_TSS
CS.RPL Register PrivilegeLevel
Selector.RPL Request Privilege Level
段选择子的RPL永远也不会加载到CS的RPL上。
段选择子的RPL类似于函数的参数。例如设备间的权限为一般,DPL为1,对于物业(RPL 0)和员工(RPL 1 )来说,可以访问;但是对于访客(RPL为3)则限制不能访问。
RPL的故事 ——《x86汇编语言:从实模式到保护模式》读书笔记31
https://blog.csdn.net/longintchar/article/details/51379555
RPL保存在选择子里,那么CPL是保存在哪里的
https://blog.csdn.net/linuxheik/article/details/7542320
DPL,RPL,CPL 之间的联系和区别
https://blog.csdn.net/better0332/article/details/3416749
【x86 & x64 沉思录】
http://bbs.chinaunix.net/thread-2010713-1-1.html
Linux保护模式之-CPL、RPL、DPL
https://blog.csdn.net/hzrandd/article/details/51002903
DPL RPL CPL区别与联系
https://blog.csdn.net/ithzhang/article/details/8579433
总结一下linux中的分段机制
https://www.cnblogs.com/tolimit/p/4775945.html
Linux 从虚拟地址到物理地址
http://blog.chinaunix.net/uid-24774106-id-3427836.html