基于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. 按键精灵txt判断

      句子 = "度阿斯达娘阿婶是大的百度知道" 词 = "百度知道" MyPos = Instr(句子, 词) If MyPos > 0 Then Tra ...

  2. E. String Multiplication

    E. String Multiplication time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  3. ansible基础配置

    1.基础配置 1.1.环境 主机配置 ansible版本:2.7.4 控制端:centos7.4,IP:192.168.1.213,主机名:operation 被控制端: centos6.5,IP:1 ...

  4. mvc core 中使用 redis

    redis 下载安装路径: https://github.com/MicrosoftArchive/redis/releases 右键打开cmd命令行,运行命令:   .\redis-server.e ...

  5. js 技巧 (十)广告JS代码效果大全 【3】

    3.[允许关闭]     与前面两个代码不同的是,广告图下方增加了一个图片按纽,允许访客点击关闭广告图片,下面文本框中就是实现效果所需代码: var delta=0.015;     var coll ...

  6. SAX解析XML-例子

    1.要解析的xml <?xml version="1.0" encoding="UTF-8"?> <employees> <emp ...

  7. mysql查询排名

    student_work表 student_info表 sql语句:按grade从高到低排名 结果:

  8. Python之FTP实现

    Python之FTP实现 上传下载: import socket import struct import json import subprocess import os class MYTCPSe ...

  9. 听dalao讲课 7.27

    1.高斯消元&线性基 也就是打大暴力啊 所谓的高斯消元也就是加减消元嘛,我的意识流高斯消元是可以的,没听到HY神犇讲,LZHdalao讲得很好,其实就是\(O(n^3)\)的暴力,别的地方一直 ...

  10. 【intellij】intellij idea 建立与src级别的目录

    在使用三大框架时,通常会把配置文件放在自己新建的config文件夹里,以便编程.在 myeclipse里新建的config文件夹是Source Folder属性的 这样他的级别适合src一个级别,但是 ...