x86CPU 实模式 保护模式 傻傻分不清楚? 基于Xv6-OS 分析CR0 寄存器

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

时间: 2024-08-08 22:08:35

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

CPU 实模式 保护模式 和虚拟8086模式

从80386开始,CPU有三种工作方式:实模式,保护模式和虚拟8086模式.只有在刚刚启动的时候是real-mode,等到操作系统运行起来以后就切换到protected-mode.实模式只能访问地址在1M以下的内存称为常规内存,我们把地址在1M 以上的内存称为扩展内存.在保护模式下,全部32条地址线有效,可寻址高达4G字节的物理地址空间; 扩充的存储器分段管理机制和可选的存储器分页管理机制,不仅为存储器共享和保护提供了硬件支持,而且为实现虚拟存储器提供了硬件支持; 支持多任务,能够快速地进行任务

FreeDOS 实模式 保护模式

FreeDOS可以运行在实模式或保护模式下,在启动FreeDOS时有4种运行模式选择: 前两种运行在保护模式下, 后两种运行在实模式下. 根据How to tell whether your CPU is running in real mode or protected mode,可以通过如下方式判断当前DOS运行的是实模式还是保护模式: AX最低位是0,故截图中的DOS运行在实模式.

实模式/保护模式

## 实模式和保护模式 ### 实模式 时间短,一般无法感知 CPU复位(reset)或加电(power on)的时候就是实模式启动,这个时候处理器是以实模式工作,不能实现权限分级,也不能访问20位以上的地址线,也就是只能访问1M内存(2^18bits, 18位地址线) 之后一般就是加载OS模块,进入保护模式 8086地址线是20位,寄存器是16位,采用:物理地址= 段地址<<4 + 偏移 从8086发展来的32位处理器地址线扩展到32位,有4GB寻址空间 在保护模式下,系统计算地址的时候是按

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

[-1]写在前面: 以下部分内容总结于 http://blog.csdn.net/ruyanhai/article/details/7181842 complementary: 兼容性是指运行在前期CPU,如8086/8088上的的程序,也可以运行在其以后的处理器,如80286上: [0]看看intel处理器的发展历程 [1]8086/8088的寻址和问题 1.1)寻址:在8086/8088中,只有20根地址总线,所以可以访问的地址是2^20=1M,但由于8086/8088是16位地址模式,能够

实模式与保护模式下的分段分页机制

1. 实模式 在实模式下,CPU不会为任务提供任务的保护机制,代码任意运行.8086处理器是学习实模式的常用例子.它内部大致有以下寄存器: 8个16位的通用寄存器: AX (可以拆分成两个AH/AL的8位寄存器) BX (BH,BL) CX (CH,CL) DX (DH,DL) SI (source index, 源索引寄存器) DI (destination index, 目的索引寄存器) BP (base pointer, 基数指针寄存器) SP (stack pointer, 堆栈指针寄存

保护模式

保护模式 保护模式 保护模式下的段 段选择器 保护模式下,段寄存器CS,DS,ES,,FS,GS,SS,称之为段选择器. 段选择器中的数据称为段选择子 段选择子 : 描述符索引(13位) | TI | RPL 其中 描述符索引:GDT描述符表中的描述符的索引号(从0开始:0,1,2,3...) TI: TI = 0 表示GDT描述符, TI =1 表示LDT描述符 RPL: 请求权特级: 段选择子如图 当我们跳转到段的时侯,实际上是段选择器赋值为以上格式的值即可. ** 保护模式寻址方式** 实

【OS】实模式和保护模式区别及寻址方式

实模式和保护模式区别及寻址方式 转载请注明出处:http://blog.csdn.NET/rosetta 64KB-4GB-64TB? 我记得大学的汇编课程.组成原理课里老师讲过实模式和保护模式的区别,在很多书本上也有谈及,无奈本人理解和感悟能力实在太差,在很长一段时间里都没真正的明白它们的内含,更别说为什么实模式下最大寻址空间为1MB?段的最大长度不超过64KB?而保护模式下为啥最大寻址能力就变成了64TB?每个段最大也达4GB? 更甚者分段和分页这两个高深的概念像我这种菜鸟怎么也理解不了啊!

壹玖免费模式车队组织中心,壹玖傻傻联盟

傻傻联盟成立于2018年11月,是由一班具有共同价值观及事业基础的壹玖学员搭建的全国互动交流平台,平台里有各地区学员的落地案例分享,爱心车队组织活动,壹玖傻傻联盟学员资源对接活动.会员帮扶团及全国义工团.旨在为壹玖实业创始人袁国顺创立的壹玖平台学员提供服务,其课程分五大方块,如下为:免费策略,免费模式,免费系统,运营原理,讲师培训体系. 为了让平台学员与学员,学员与讲师更紧密互动,帮扶组织更密切,故成立此组织.学员强.则国强是傻傻联盟的经营理念,破尘出新,以免费崭新的思维嵌入企业发展,共建傻傻联

0.11之路(四):从实模式到保护模式

(一)关中断并将system移动到内存地址起始位置 0x00000 将CPU的标志寄存器(EFLAGS)中的中断允许标志(IF)置0.这样系统不会再响应中断,直到main函数中能够适应保护模式的中断服务体系重建完毕才会打开,那时候响应中断的服务程序将不再是BIOS提供的中断服务程序,而是系统自身提供的. 就是要完成实模式下的中断向量表和保护模式下的中断描述符表(IDT)的交接工作.借助关中断(cli)和开中断(sti)完成这个过程的创建,即在创建过程中不能去响应中断,否则没有对应的中断程序,系统