保护模式初步理解

转载 2016年08月31日 12:03:56
保护模式初步理解
与实模式一样,保护模式中内存也被逻辑上分成了一个个具有相应功能的段,比如代码段,数据段,栈段等。 但是保护模式中,每个段的“个性“更鲜明。

我们知道,在实模式中,所有内存都是可读、可写、可访问的,你哪天看哪块内存不爽了, 轻轻松松就可以把他里面的东西搞乱,非常的不安全。 但在保护模式中,每个段在定义的时候就被赋予了段基址、段长度、段类别(代码段/数据段/...)、特权级等属性(这些属性被放在8个字节中,我们称之为描述符)。任何程序想访问其他段、以何种方式访问(读/写/执行),都需要校验通过才被允许。比如,我是一个可执行的代码段, 如果其他程序想修改它里面的内容,那是不被允许的。 这样,cpu通过一些类似的限制,最大限度的保护了程序的安全。

保护模式中比较重要的一个保护方式就是特权级。 所有段被划分为4个特权级(0~3),其中0最高,3最低。 较为核心的数据和代码,被放在高特权级层次中,其他的被放在低特权级中。通过这种层次的划分,可以有效的避免低优先级任务在不被允许的情况下访问高优先级段。 

所有段通常只在自己相同的特权级中运行, 但也难免有不同特权级之间的跳转,所以cpu提供了一套比较严密的特权级跳转机制。在正式介绍跳转规则之前,我想先讲一下cpu是如何检查一个跳转是否合法。 我们知道,无论是在实模式还是在保护模式中,CS,EIP都是用来保存下一条指令的地址的,不同的是在保护模式中,CS中既存放了当前代码段基址索引(3~15位存放的是当前代码段描述符在GDT中的索引),又存放了当前程序的优先级(CPL)。在试图跳转时,cpu将CPL与目标段DPL及RPL进行对比校验,如果校验成功, 就将目标段选择子加载到CS中, 并以一定规则修改CPL, 随后进入目标段运行。

对了,还要介绍一个东西:代码段类型。 代码段被分为一致代码段和非一致代码段。可以这样理解它们:
1.内核中的绝大多数代码对上层都是透明且不可访问的, 这些代码可以理解为非一致代码段, 是被严格保护起来的, 只能被相同特权级的其他段访问。
2.同时,内核也需要与上层进行交互, 所以提供了有限的代码允许符合条件的上层进行访问,这些代码就可以理解为一致代码段。

其实特权级转换规则并不复杂,大致可以归纳为以下几条:
1. 低优先级代码段通过调用门可以跳转至高优先级的一致代码段(非一致不被允许),且CPL不被改变。
2. 相同特权级代码段之间可以直接跳转。
3. 高特权级跳转至低特权级时,需要借助一条指令:retf,且CPL被更改为dest_descriptor.DPL和dest_selector.RPL中更大的值,即特权级被降低。
4. 不同特权级的代码段需要不同的栈,所以在特权级跳转时,同时也要切换栈段,具体参考TSS。

总的来说,特权级跳转是比较麻烦的, 牵扯的概念比较多。把这个弄明白了,基本上就入门了。

相关文章推荐

《Orange's 一个操作系统的实现》学习笔记--保护模式理论初步(一)

一、保护机制 为了支持多任务,对个任务实施保护是必须的,从80286开始处理器就具备了保护机制。保护机制能有效地实现不同任务之间的保护和同一任务内的保护。 1.不同任务之间的保护 通过把每个任务放在不...

再次理解保护模式特权级——CPL、DPL、RPL、数据段、堆栈段、一致代码段、非一致代码段

80386搞的这个保护模式,最大的特点就是加入了安全检查,不再像实模式下那样,程序代码可以随意jmp,随意call了,受到了特权级的约束,关于特权级的概念我看无数的资料,各种大牛的解释,反复理解了好多...
  • t9010
  • t9010
  • 2011年08月05日 19:41
  • 503

对Linux内存地址转换、保护模式的理解

相关概念:实模式、保护模式、GDT、LDT、物理地址、逻辑地址、线性地址(虚拟地址) 实模式 Intel 80286时代使用的模式。访问內存是通过segment:offset找...

实地址模式和保护模式的理解

在微处理器的历史上,第一款微处理器芯片4004是由Intel推出的,那是一个4位的微处理器。在4004之后,intel推出了一款8位处理器8080,它有1个主累加器(寄存器A)和6个次累加器(寄存器B...

深入理解计算机系统-之-内存寻址(二)--存储保护机制(CPU实模式与保护模式)

CPU实模式和保护模式 cpu的保护模式由来 分段机制 8086的诞生,标志着Intel 正式进入了x86时代,这是个多么具有纪念意义的日子:1978-6-8。同时,8086的诞...
  • gatieme
  • gatieme
  • 2016年02月09日 16:12
  • 3145

80x86保护模式系列教程 EPUB格式

  • 2017年04月18日 19:55
  • 241KB
  • 下载

80x86保护模式教程

  • 2012年01月07日 12:11
  • 211KB
  • 下载

JOS Lab2 保护模式下的内存映射机制:段机制 页机制

在Lab2中 我们将要建立基本的保护模式下的内存管理机制,我们有必要先弄清楚保护模式下是如何管理内存的。...

保护模式介绍

  • 2015年10月09日 19:42
  • 391KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:保护模式初步理解
举报原因:
原因补充:

(最多只允许输入30个字)