慢慢欣赏linux之段式管理,以及DPL RPL和CPL

本文深入探讨了x86架构下Linux操作系统中保护模式的实现机制,详细介绍了全局描述符表(GDT)、中断描述符表(IDT)及任务状态段(TSS)的配置与使用,并解析了特权级(CPL、RPL、DPL)的概念及其相互作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户态代码段段选择子排行14。 148+3==0x73
用户态数据段段选择子排行15。 15
8+30x7B
内核态代码段段选择子排行12。 12*8
0x60
内核态数据段段选择子排行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.youkuaiyun.com/longintchar/article/details/51379555

RPL保存在选择子里,那么CPL是保存在哪里的
https://blog.youkuaiyun.com/linuxheik/article/details/7542320

DPL,RPL,CPL 之间的联系和区别
https://blog.youkuaiyun.com/better0332/article/details/3416749

【x86 & x64 沉思录】
http://bbs.chinaunix.net/thread-2010713-1-1.html

Linux保护模式之-CPL、RPL、DPL
https://blog.youkuaiyun.com/hzrandd/article/details/51002903

DPL RPL CPL区别与联系
https://blog.youkuaiyun.com/ithzhang/article/details/8579433

总结一下linux中的分段机制
https://www.cnblogs.com/tolimit/p/4775945.html

Linux 从虚拟地址到物理地址
http://blog.chinaunix.net/uid-24774106-id-3427836.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值