实模式/保护模式

## 实模式和保护模式

### 实模式
时间短,一般无法感知

CPU复位(reset)或加电(power
on)的时候就是实模式启动,这个时候处理器是以实模式工作,不能实现权限分级,也不能访问20位以上的地址线,也就是只能访问1M内存(2^18bits, 18位地址线)

之后一般就是加载OS模块,进入保护模式

8086地址线是20位,寄存器是16位,采用:物理地址= 段地址<<4
+ 偏移

从8086发展来的32位处理器地址线扩展到32位,有4GB寻址空间

在保护模式下,系统计算地址的时候是按照对1MB求模进行——Wrap-Around技术

### 保护模式
#### 起源
最开始的程序寻址是:段+偏移,这样的好处是程序员指定的地址就是物理地址,物理地址对程序员可见

这样带来的问题是:

1. 无法支持多任务
2. 程序的安全性无法得到保证

在windows的旧版本中,电脑时不时死机/蓝屏,这其实就是因为内存被破坏导致的。

因为在实模式中,将物理内存看成分段的区域,程序代码和数据位于不区域,系统程序和用户程序区别对待,而指针是任意的,如果用户程序指针指向了系统程序或其他用户程序区域,并改变了区域的数据,就会造成破坏,导致程序/系统崩溃

在保护模式下,全部32条地址线有效,4G寻址空间,存储器分段管理机制和分页管理机制等,不仅为存储器共享和保护提供了硬件支持,而且为实现虚存提供硬件支持。支持多任务,能快速进行任务切换和保护任务环境。

保护模式出现的原因是:**保护进程地址空间**,这样产生了一个结果——两种模式下的程序寻址方式发生了变化

#### 保护模式下的寻址方式和工作原理
地址同样是+偏移,但是段的概念发生根本变化

段变成了一个索引,指向一个数据结构——全局描述符GDT(或是LDT),定义了段的起始地址,界限、属性等

GDT作用是提供段氏存储机制

在实模式中:段地址并非真正的物理地址,<<4+offset

在保护模式中,段地址是32位线性地址,如果未开启分页功能,该线性地址就是物理的地址

From PPT:

l  实模式就是用基地址+偏移量就可以直接拿到物理地址的模式

n  缺点:不安全

l  保护模式:不能直接拿到物理地址的模式

n  需要地址转换

n  从80386开始,是现代OS主要模式

原文地址:https://www.cnblogs.com/XT-xutao/p/11854453.html

时间: 2024-11-04 19:08:17

实模式/保护模式的相关文章

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运行在实模式.

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

基于Xv6-OS 分析CR0 寄存器 之前一直觉得晕乎乎的...啥?什么时候切换real model,怎么切换,为什么要切换? ------------------------------------------------------------------------------------------------------------------------------------------- 下面这段代码来自Xv6的boot/boot.S 这就是CPU real model 和 pr

实模式切换到保护模式,为什么要开启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: 请求权特级: 段选择子如图 当我们跳转到段的时侯,实际上是段选择器赋值为以上格式的值即可. ** 保护模式寻址方式** 实

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

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

程序的加载和执行(六)——《x86汇编语言:从实模式到保护模式》读书笔记26

程序的加载和执行(六)--<x86汇编语言:从实模式到保护模式>读书笔记26 通过本文能学到什么? NASM的条件汇编 用NASM编译的时候,通过命令行选项定义宏 Makefile的条件语句 在make命令行中覆盖Makefile中的变量值 第13章习题解答 复习如何构造栈段描述符 我们接着上篇博文说. 在我修改后的文件中,用到了条件汇编. 比如: %ifdef DEBUG put_core_salt: ;打印内核的符号 ... ... put_usr_salt: ;打印用户的符号 ... .

Linux进程5——实模式和保护模式

早期的Inter芯片只支持1MB内存,采用实模式,采用16bit地址.后来随着技术进步,出现可以访问更多内存的 保护模式芯片,采用32bit地址.为了保持对前面芯片的兼容,Inter支持这两种模式.当芯片启动时,默认处于实模式, 然后OS控制进入保护模式. 实模式和保护模式的最大区别: 实模式下,程序地址为真实的物理地址,可以访问任意地址空间,这样不同进程可能访问到其它进程程序,造成 严重错误. 保护模式下,程序地址为虚拟地址,然后由OS系统管理内存访问权限,这样每个进程只能访问分配给自己的物理