这个系列文章主要目的是为了记录我个人学习保护模式后的总结与一点点的思考。我也是一个学习者,其中由错误在所难免,若各位朋友指出将不胜感激。

1. Intel CPU的运行模式概述

这里我将粗略介绍Intel IA-32 CPU和其64扩展所提供的运行模式,及各运行模式的特点。

Intel IA-32架构一共提供了四种运行模式、分别是保护模式(protected mode)实地址模式(实模式,Real-address mode)系统管理模式(SMM)虚拟8086模式(Virtual-8086 mode)

其中保护模式是几乎所有运行在现代x86 CPU上操作系统使用的模式,具备x86 CPU所有的架构特性、最佳的性能、所有的指令支持、最佳的向后兼容性,也是现代x86 CPU的原生运行模式。x86 CPU通常对所有操作系统都推荐使用该模式。

实地址模式在现代计算机中的职责通常是负责计算机开启启动时计算机操作系统运行环境的准备。开机启动时CPU 首先进入实模式 读取BIOS进行基本的硬件自检查、硬盘扇区引导、操作系统选择和加载等等,待操作系统加载至内存接管CPU等硬件资源时,CPU将根据操作系统期望的运行模式进行切换,通常会切换至保护模式。

虚拟8086模式是一种开启保护模式后,为向后兼容8086程序所提供的一种准模式。注意虚拟8086模式与保护模式的关系是寄生关系,只有开启保护模式才能在保护模式中运行虚拟8086模式,虚拟8086模式是不可单独运行的。

当操作系统运行时,CPU接受操作系统的调度,但若这个过程中CPU自身出现缺陷和不可修复的错误怎么办?X86 CPU提供了一种最高权限模式,系统管理模式。当CPU接收到SMM中断时,将会切换至SMM,并且在BOIS中寻找可能修正CPU错误的方法。

以上是X86 IA-32架构阐述,但现代CPU和操心系统基本都运行在64位环境下,6并且4位已经成为主流,因此下面将介绍一个X86为应对64位机时代对64位做的拓展所新增的一个运行模式,IA-32e Mode(IA-32 extra mode),现代64位操作系统基本运行在该模式。该模式提供了2种子模式,兼容模式和64位模式。兼容模式提供对保护模式几乎所有特性的接纳,而64位模式则将保护模式的线性地址扩展至64位,提供了超过64GB的内存寻址空间,由此可见IA-32e模式基本可以看作是对保护模式的扩展(这也是IA-32e这种e的含义,extra),但也兼容了32位程序的运行环境。

通过上述,无论是IA-32还是其64位扩展,基本都是围绕保护模式所展开的,而现代操作系统也可以简单说基本都是运行在保护模式下(IA-32e模式本质上是对32位保护模式的扩展)。因此想要理解现代操作系统,保护模式必然是一道绕不过的坎。

2.保护模式概述

保护模式的重要性于Intel 白皮书中所占的篇幅即可窥探一二。这个小节将介绍在X86架构中举足轻重的存在,力图理清保护模式的特性。

在保护模式为出来之前,也即16位机时代,基本所有的CPU都是运行在实地址模式下。实地址模式中线性地址即可等同于物理地址,对线性地址内存的修改则直接等同与对物理地址的修改,这个所谓的实地址指的就是这个特点,线性地址等效于物理地址。这种模式有没有问题?当然有,而且问题很大,否则为什么要有保护模式呢?实模式的主要问题其实就是出在实地址这三个字上,一切的问题都是由实地址所带来的。

首当其冲的问题,实地址模式直面物理内存,导致CPU对所有内存一视同仁,这种做带来的后果是CPU无法区分代码和数据,那么代码所在内存和数据所在内存的特点都一样,因此所有的内存都是可读可写可执行的,这个问题对于系统稳定的影响和系统的危险性不言而喻,其后一切的问题基本都因此所带来的。而后面诞生的所谓保护模式,保护的是什么?保护就是物理内存,因此保护模式最为重要的两个特性就是段的机制和页的机制,它们的主要目的都是为了更加安全和高效的使用物理内存,那么保护模式后面的虚拟内存、分页映射和权限检查等重要特性的目的将不难理解。

因此后续的文章将围绕保护模式段和页的机制作为主线展开,将保护模式琐碎的细节串联起来。

【理解OS】1.保护模式概述的更多相关文章

  1. Oracle Dataguard三种保护模式概述(转)

    Oracle的DataGuard技术有三种实现模式,分别是max performance.max availability.max protection这三种模式. 以下是来自Oracle文档的摘要信 ...

  2. DataGuard的三种保护模式

    (一)三种保护模式介绍1.最大性能模式这种模式保证数据库主库性能最大化,主备库之间数据是异步传输的.即,主备日志归档以后才会传输到备库,在备库上使用归档日志文件做恢复操作.这种模式提供在不影响prim ...

  3. OSLab:开启保护模式

    日期:2019/5/22 关键词:操作系统:OS:保护模式:A20地址线激活:分页开启:二级页表的设置 PS:OSLAB实验课的整理. 本文主要内容是分析操作系统中一个简易的MBR. 建议先阅读:ht ...

  4. 自制操作系统Antz(5)——深入理解保护模式与进入方法

    Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...

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

    实模式和保护模式区别及寻址方式 转载请注明出处:http://blog.csdn.NET/rosetta 64KB-4GB-64TB? 我记得大学的汇编课程.组成原理课里老师讲过实模式和保护模式的区别 ...

  6. ASM:《X86汇编语言-从实模式到保护模式》第14章:保护模式下的特权保护和任务概述

    ★PART1:32位保护模式下任务的隔离和特权级保护  这一章是全书的重点之一,这一张必须要理解特权级(包括CPL,RPL和DPL的含义)是什么,调用门的使用,还有LDT和TSS的工作原理(15章着重 ...

  7. 保护模式下pmtest1.asm的理解

    整个代码对应内存线性地址分为四段,[gdt] [code32] [video32] [code16] 代码先在实模式[code16]下运行,code16中的cs就是系统分配的该程序物理地址的基址. 编 ...

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

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

  9. ASM:《X86汇编语言-从实模式到保护模式》第17章:保护模式下中断和异常的处理与抢占式多任务

    ★PART1:中断和异常概述 1. 中断(Interrupt) 中断包括硬件中断和软中断.硬件中断是由外围设备发出的中断信号引发的,以请求处理器提供服务.当I/O接口发出中断请求的时候,会被像8259 ...

随机推荐

  1. Java编码的问题

    <转> 由于JDK是国际版的,在编译的时候,如果我们没有用-encoding参数指定我们的Java源程序的编码格式,则javac.exe首先获得我们操作系统默认采用的编码格式,也即在编译j ...

  2. 使用Hugo和GitHub搭建博客

    折腾了几天博客的框架终于搭建起来了.研究了一番之后,最终还是选择使用Hugo和GitHub来搭建博客.本文介绍了如何使用Hugo来搭建静态博客网站,并将其部署在GitHub上.使用https://&l ...

  3. reids rdb与aof

    rdb:时合高并发场景,容易备份恢复,会丢失部分数据 1.默认开启的方式,可以进过压缩,可以根据时间点生成快照 2.数据量大的情况下恢复快 3.bgsave一边开启fork保存文件,一边继续响应客户端 ...

  4. redis 《scan命令》

    此命令十分奇特建议参考文档:http://redisdoc.com/database/scan.html#scan     222222222222222并非每次迭代都要使用相同的 COUNT 值. ...

  5. easycode一键生成

  6. Dubbo | Dubbo快速上手笔记 - 环境与配置

    目录 前言 1. Dubbo相关概念 1.1 自动服务发现工作原理 2. 启动文件 2.1 zookeeper-3.4.11\bin\zkServer.cmd 2.2 zookeeper-3.4.11 ...

  7. 源码解析.Net中Middleware的实现

    前言 本篇继续之前的思路,不注重用法,如果还不知道有哪些用法的小伙伴,可以点击这里,微软文档说的很详细,在阅读本篇文章前,还是希望你对中间件有大致的了解,这样你读起来可能更加能够意会到意思.废话不多说 ...

  8. 简单C++线程池

    简单C++线程池 Java 中有一个很方便的 ThreadPoolExecutor,可以用做线程池.想找一下 C++ 的类似设施,尤其是能方便理解底层原理可上手的.网上找到的 demo,基本都是介绍的 ...

  9. 字符串截取子串(Java substring , indexOf)

    前言 因为之前java课设做的是股票分析系统,我找的接口返回的是一个.csv文件,因为这种文件里面的数据是以逗号分隔的,所以要对数据进行分析的时候需要截取子串,并且以逗号作为截取的标志.所以接下来就说 ...

  10. 剑指 Offer 31. 栈的压入、弹出序列

    剑指 Offer 31. 栈的压入.弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某 ...