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

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. WPF原理剖析——路由事件

    一.路由事件与传统事件传统事件的触发者和处理者是紧密相连的,而路由事件则不是,路由事件允许一个元素的事件有另外的元素触发.也即就是说路由事件的拥有者和响应者之间没有显示的订阅关系.事件的拥有者只负责激 ...

  2. CentOS8安装Mysql5.7

    检查是否安装mysql [root@iZ2ze8crquorxf6c7l0eluZ ~]# rpm -qa |grep mysql [root@iZ2ze8crquorxf6c7l0eluZ ~]# ...

  3. freecodecamp挑战

    freecodecamp挑战 2020年3月21初次挑战 完成45关挑战 2020年3月22日 完成至101关 2020年3月23日 完成至144关 2020年3月24日 完成至187关 css结束 ...

  4. 有关Java动态数组的一个小问题

    前言 问题描述 今天遇到一个关于集合的问题,觉得比较有趣,记录一下,这个问题是:定义一个用户类,至少包含姓名,年龄,生日,qq邮箱,初始化10个用户,利用String操作,提取qq到List集合中,姓 ...

  5. Ansible部署及配置介绍

    原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 Ansible的安装部署 1.1 PIP方式 1.2 YUM方式 二 Ansi ...

  6. 16 bit 的灰度图如何显示

    16 bit 的灰度图如何在QT中显示 用Mat构造的 16 bit 灰度图 无法直接显示,需要转换成 8 bit 的灰度图在QT中显示, 使用OpenCV自带的最大最小值归一法, cv::norma ...

  7. 一、Rabbitmq的简单介绍

    以下只是本人从零学习过程的整理 部分内容参考地址:https://www.cnblogs.com/ysocean/p/9240877.html 1.RabbitMQ的概念 RabbitMQ是实现了高级 ...

  8. kubernetes 安装 ingress controller

    文章链接 ingress-nginx ingress 官方网站 ingress 仓库地址 ingress-nginx v1.0 最新版本 v1.0 适用于 Kubernetes 版本 v1.19+ ( ...

  9. 连接Redis服务

    1.命令 redis-cli -h host -p port -a password 2.参数 host:远程redis服务器host port:远程redis服务端口 password:远程redi ...

  10. openswan中DH算法说明

    Author       : Email         : vip_13031075266@163.com Date          : 2021.01.11 Copyright : 未经同意不得 ...