基于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. CentOS 6.4 linux下编译安装 LNMP环境

    1.nginx编译安装 2.PHP编译安装 3.mysql编译安装 4.NGINX配置模板 5.CentOS 6.4 php-fpm 添加service 添加平滑启动/重启

  2. 洛谷 P1339 [USACO09OCT]热浪Heat Wave (堆优化dijkstra)

    题目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for g ...

  3. ALTER DOMAIN - 改变一个域的定义

    SYNOPSIS ALTER DOMAIN name { SET DEFAULT expression | DROP DEFAULT } ALTER DOMAIN name { SET | DROP ...

  4. 打印出A到Z的所有字符,使用char和int转换

    public class Demo14{ //A到Z的所有字符,使用char和int转换 public static void main(String[] args) { for(int i = 65 ...

  5. 一篇文章告你python能做什么,该不该学?好不好学?适不适合学?

    一.python好学吗?简单吗?容易学吗?没有编程的领取能学吗? 最近有很多小伙伴都在问我这些问题.在这里,我想说,python非常简单易学. 1,简单, Python 非常易于读写,开发者可以把更多 ...

  6. popToViewController

    看到群里有人问popToViewController的用法 就写了下了 希望能帮到有需要的人 [self.navigationController popToViewController:[self. ...

  7. 在Linux中CSV转换成XLSX

    在linux中,把csv文件转换成excel表格(xlsx或者xls) $ echo -e 'surname,name,age\nCarlo,Smith,23\nJohn,Doe,46\nJane,D ...

  8. 关于Python构建微服务的思考(一)

    一:什么是微服务? 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成. 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的. 每个微服务仅关注于完成一件任务并很好地完成该任务. ...

  9. pip各种

    pip: 一个现代的,通用的 Python 包管理工具.提供了对Python 包的查找.下载.安装.卸载的功能. windows:自带pip,直接使用. Linux:执行下面命令即可完成安装. # w ...

  10. mybatis返回map类型数据空值字段不显示(三种解决方法)

    转http://blog.csdn.net/lulidaitian/article/details/70941769 一.查询sql添加每个字段的判断空 IFNULL(rate,'') as rate ...