Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2619296
  • 博文数量: 258
  • 博客积分: 9440
  • 博客等级: 少将
  • 技术积分: 6998
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-03 10:28
个人简介

-- linux爱好者,业余时间热衷于分析linux内核源码 -- 目前主要研究云计算和虚拟化相关的技术,主要包括libvirt/qemu,openstack,opennebula架构和源码分析。 -- 第五届云计算大会演讲嘉宾 微博:@Marshal-Liu

文章分类

全部博文(258)

文章存档

2016年(1)

2015年(4)

2014年(16)

2013年(22)

2012年(41)

2011年(59)

2010年(40)

2009年(75)

分类: LINUX

2010-08-03 19:46:42

在阅读linux内核的时候,在linux内核的权限保护机制部分,经常会讨论几个特权级别:CPL,RPL,DPL。下面简单讲一下我自己的理解。
背景知识:
1 x86体系结构的几个段寄存器:cs,ds,es,ss.fs.gs
它们无论在实模式下还是保护模式下,都是16位的寄存器,只是功能不而已。
实模式下: 用做段寄存器,用来将逻辑地址转换到线性地址
保护模式下:段选择子,用来作为索引在GDT表或LDT表等中选择段描述符。
主要内容:
1 段选择子基本结构:
   index    TI      RPL
   13bit    1bit    2bit
因此,段选择子中最低2bit叫做RPL.
作为段选择子的时候,cs和ss比较特殊,它们的RPL代表着当前进程的特权级,因此,二者的RPL又叫CPL。
DPL就不用多说了,段描述符表中的两位。
2 举个例子
mov $0, offset(%ds)
这条指令的地址cs:ip, 那么cs中的最低两位就是cpl,即执行这条指令的当前特权级。
现在要将0写入某个地址,那么就要去查看有没有权限写入,首先检查的就是%ds中的rpl,然后再去检查%ds索引的段描述符中的dpl。假设当前cpl=0, %ds中的rpl =1, 段选择子中的dpl=3,那么cpl的特权级高于dpl,rpl的特权级高于dpl,访问合法。可以这样理解,首先拿当前特权级cpl与段选择子中的rpl比较,得出能不能访问某个段描述符的结论, 然后拿rpl去与段描述符中的dpl比较,就是拿着rpl这个特权级能不能访问实际的段。

cpl先去拿一个特权级别rpl,然后利用取得的这个特权级rpl去访问某个特权级dpl的段。
阅读(2795) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2010-08-13 19:02:14

不错。简明扼要。比那些文档好多了。