基于Xv6-OS 分析CR0 寄存器

之前一直认为晕乎乎的...啥?什么时候切换real model,怎么切换,为什么要切换?

-------------------------------------------------------------------------------------------------------------------------------------------

以下这段代码来自Xv6的boot/boot.S

这就是CPU real model 和 protected model的“分水岭”

根源在于控制这两种执行模式的寄存器——CR0 发生的变化

在Xv6里面这样的CPU模式的切换发生的很早,在boot.s几条汇编指令执行之后立刻切换。切换之后,CPU便以protected model执行

以下是CR0的layout

再看这段代码(CR0_PE_ON在boot.S开头定义了。值为1)

意思就是把cr0寄存器的最低位置为1,So.... PE经历这段过程之后就进入到了protected model

PE: CR0的0位是启用保护位(protection enable)。

当设置该位的时候即开启了保护模式。系统上电复位的时候该位默觉得0,于是是实模式 real model. PE置1的保护,实质上是开启段级保护,就是仅仅进行了分段,没有开启分页机制。假设要开启分页机制须要同一时候置位PE和PG

事实上搞清楚以上的东东,就明确了。什么时候会开启保护模式,怎么开启的问题

接着继续看看CR0里面还有哪些“宝贝”

PG: 分页标志位。

当设置该位时开启分页机制。当复位的时候则禁止分页机制,此时全部的线性地址等于物理地址。

在开启这个标志位之前必须已经或者同一时候开启PE. 启用分页的条件就是PE PG同一时候为1

WP:(intel 80486以上的机器会有)该位是写保护位, write protection bit. 该位为1时,CPU会禁止用户特权级为0(超级用户)向read only page写入数据。可是复位的时候同意。这个标志位主要与 COW(copy on write)有关系.

NE:number error 协处理器错误,为1时。启用x87协处理器的内部报告机制,假设是0,就是用PC形式的x87协处理器的报告机制。(感觉眼下我不会接触这东东。。)

当改变PE PG时候,必须小心。

仅仅有当运行程序至少有部分代码和数据在线性地址空间和物理地址空间中具有同样地址时,我们才干改变PG位的设置。此时这部分具有同样地址的代码在分页和未分页的世界起着桥梁作用。不管是否开启分页机制。这部分代码都具有同样的地址。另外,开启分页PG=1之前。必须先刷新TLB。在改动了PG之后。必须使用一个长跳转语句,以刷新处理器运行管道中已经获取的不同模式下的不论什么命令。

ET: 系统中有80387协处理器,置为1,有一个80287或者没有,置为0

TS EM MP 都浮点数处理有关系

最新文章

  1. [C#] C# 知识回顾 - 序列化
  2. 【CentOS】学习Bash
  3. 原生js实现简单打字机效果
  4. Linux学习笔记(11)软件包管理
  5. (3)redis队列功能
  6. 磁盘测试工具fio
  7. MySQL · BUG分析 · Rename table 死锁分析
  8. 如何分析matlab程序的主要效率问题
  9. cocos2d-x lua脚本开发 1
  10. (三)Android中Intent概念及应用
  11. BZOJ 1708: [Usaco2007 Oct]Money奶牛的硬币
  12. HDU 3639 Hawk-and-Chicken(良好的沟通)
  13. JSON及与XML比较
  14. 2018-2019-2 20165221『网络对抗技术』Exp4:恶意代码分析
  15. snmp服务中snmpwalk命令常用方法总结
  16. sencha touch datepicker/datepickerfield(时间选择控件)扩展
  17. python 读写json数据
  18. Spring Security教程(五):自定义过滤器从数据库从获取资源信息
  19. C#实现局部峰值查找,功能对应Matlab中的findpeaks.m
  20. Js 中的 this

热门文章

  1. Friday Q&A 2015-11-20:协变与逆变
  2. Flask框架 之上下文、请求钩子与Flask_Script
  3. 06C#类
  4. Java核心技术卷1 第三章
  5. KBE_运作流程
  6. dubbo理解
  7. Linux 搭建 squid 代理服务器 三种模式
  8. 集训第五周动态规划 J题 括号匹配
  9. 用bootstrap_table实现html 表格翻页
  10. CodeForces 221D Little Elephant and Array