基于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 都浮点数处理有关系

x86CPU 实模式 保护模式 傻傻分不清楚? 基于Xv6-OS 分析CR0 寄存器的更多相关文章

  1. “段寄存器”的故事[转](彻底搞清内存段/elf段/实模式保护模式以及段寄存器)

    http://blog.csdn.net/michael2012zhao/article/details/5554023 一. 段寄存器的产生 段寄存器的产生源于Intel 8086 CPU体系结构中 ...

  2. FreeDOS 实模式 保护模式

    FreeDOS可以运行在实模式或保护模式下,在启动FreeDOS时有4种运行模式选择: 前两种运行在保护模式下, 后两种运行在实模式下. 根据How to tell whether your CPU ...

  3. ASM:《X86汇编语言-从实模式到保护模式》第11章:进入保护模式

    ★PART1:进入保护模式 1. 全局描述符表(Global Descriptor Table,GDT)        32位保护模式下,如果要使用一个段,必须先登记,登记的信息包括段的起始地址,段的 ...

  4. 实模式切换到保护模式,为什么要开启A20地址线(系统升级产生的兼容性问题)

    [-1]写在前面: 以下部分内容总结于 http://blog.csdn.net/ruyanhai/article/details/7181842 complementary: 兼容性是指运行在前期C ...

  5. x86架构:从实模式进入保护模式

    详细的过程说明参考:(1)  https://www.cnblogs.com/Philip-Tell-Truth/p/5211248.html    (2)x86汇编:从实模式到保护模式 这里简化一下 ...

  6. 基础篇-Windows保护模式

    1 一般来说,80x86(80386及其以后的各代CPU)可以在三种模式下运转:实模式,保护模式,V86模式.实模式就是古老的MS-DOS的运行环境.Win95只利用了两种模式:保护模式和V86模式. ...

  7. CPU保护模式DPL、CPL简易理解

    现代INTEL CPU都有保护模式,实模式这两种CPU运行模式.当CPU加电,CPU初始化时就运行在是模式下,然后现代操作系统会从实模式跳转到保护模式! 为什么需要保护模式? 在最开始编程的汇编时代, ...

  8. (5)打造简单OS-进入保护模式

    1.简介: 8086实模式 80286才出现保护模式,保护模式下的段寄存器存储的是段选择子,不在是8086实模式的段基址了! [扩展知识]:可以看了后面知识在回头看一下这段. [8086各个段寄存器和 ...

  9. ASM:《X86汇编语言-从实模式到保护模式》第9章:实模式下中断机制和实时时钟

    中断是处理器一个非常重要的工作机制.第9章是讲中断在实模式下如何工作,第17章是讲中断在保护模式下如何工作. ★PART1:外部硬件中断 外部硬件中断是通过两个信号线引入处理器内部的,这两条线分别叫N ...

随机推荐

  1. WebAPI中Area的使用

    很简单,创建area后,添加一下代码到AreaRegistration中即可 context.Routes.MapHttpRoute( name: "api_default", r ...

  2. scrapy 请求传参

    class MovieSpider(scrapy.Spider): name = 'movie' allowed_domains = ['www.id97.com'] start_urls = ['h ...

  3. Goldengate完成Mysql到Mysql的数据同步

    文档参考地址:http://blog.csdn.net/u010587433/article/details/49305019 需求: 使用Goldengate完成Mysql到Mysql的数据同步,源 ...

  4. ubuntu 安装virt-manager

    sudo apt-get install qemu-kvm libvirt-bin virt-manager bridge-utils

  5. 第4节 hive调优:1、2、fetch抓取和表的优化

    hive的调优:第一个调优:fetch抓取,能够避免使用mr的,就尽量不要用mr,因为mr太慢了 set hive.fetch.task.conversion=more 表示我们的全局查找,字段查找, ...

  6. tinyxml

    在TinyXML中,根据XML的各种元素来定义了一些类:        TiXmlBase:整个TinyXML模型的基类.        TiXmlAttribute:对应于XML中的元素的属性.   ...

  7. 如何HTML标签和JS中设置CSS3 var变量

    一.HTML标签中设置CSS变量 如下: <div style="--color: #cd0000;"> <img src="mm.jpg" ...

  8. 安装Vmware Tools出现错误

    安装Vmware Tools出现: Before you can compile modules, you need to have the following installed... makegc ...

  9. codeforces 407 div1 A题(Functions again)

    codeforces 407 div1 A题(Functions again) Something happened in Uzhlyandia again... There are riots on ...

  10. BNUOJ 26223 CosmoCraft

    CosmoCraft Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: ...