【理解OS】1.保护模式概述
这个系列文章主要目的是为了记录我个人学习保护模式后的总结与一点点的思考。我也是一个学习者,其中由错误在所难免,若各位朋友指出将不胜感激。
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.保护模式概述的更多相关文章
- Oracle Dataguard三种保护模式概述(转)
Oracle的DataGuard技术有三种实现模式,分别是max performance.max availability.max protection这三种模式. 以下是来自Oracle文档的摘要信 ...
- DataGuard的三种保护模式
(一)三种保护模式介绍1.最大性能模式这种模式保证数据库主库性能最大化,主备库之间数据是异步传输的.即,主备日志归档以后才会传输到备库,在备库上使用归档日志文件做恢复操作.这种模式提供在不影响prim ...
- OSLab:开启保护模式
日期:2019/5/22 关键词:操作系统:OS:保护模式:A20地址线激活:分页开启:二级页表的设置 PS:OSLAB实验课的整理. 本文主要内容是分析操作系统中一个简易的MBR. 建议先阅读:ht ...
- 自制操作系统Antz(5)——深入理解保护模式与进入方法
Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...
- 【OS】实模式和保护模式区别及寻址方式
实模式和保护模式区别及寻址方式 转载请注明出处:http://blog.csdn.NET/rosetta 64KB-4GB-64TB? 我记得大学的汇编课程.组成原理课里老师讲过实模式和保护模式的区别 ...
- ASM:《X86汇编语言-从实模式到保护模式》第14章:保护模式下的特权保护和任务概述
★PART1:32位保护模式下任务的隔离和特权级保护 这一章是全书的重点之一,这一张必须要理解特权级(包括CPL,RPL和DPL的含义)是什么,调用门的使用,还有LDT和TSS的工作原理(15章着重 ...
- 保护模式下pmtest1.asm的理解
整个代码对应内存线性地址分为四段,[gdt] [code32] [video32] [code16] 代码先在实模式[code16]下运行,code16中的cs就是系统分配的该程序物理地址的基址. 编 ...
- CPU保护模式DPL、CPL简易理解
现代INTEL CPU都有保护模式,实模式这两种CPU运行模式.当CPU加电,CPU初始化时就运行在是模式下,然后现代操作系统会从实模式跳转到保护模式! 为什么需要保护模式? 在最开始编程的汇编时代, ...
- ASM:《X86汇编语言-从实模式到保护模式》第17章:保护模式下中断和异常的处理与抢占式多任务
★PART1:中断和异常概述 1. 中断(Interrupt) 中断包括硬件中断和软中断.硬件中断是由外围设备发出的中断信号引发的,以请求处理器提供服务.当I/O接口发出中断请求的时候,会被像8259 ...
随机推荐
- 【权限管理】Spring Security 执行流程
转自:https://blog.csdn.net/weixin_37689658/article/details/92752890 1.基本配置使用 (1)创建配置类 创建一个配置类SecurityC ...
- 参数化SQL
原文:http://www.cnblogs.com/aito/archive/2010/08/25/1808569.html 避免SQL注入的方法有两种:一是所有的SQL语句都存放在存储过程中,这样不 ...
- mybaits源码分析(一)
一.源码下载 1.手动编译源码 为了方便在看源码的过程中能够方便的添加注释,可以从官网下载源码编译生成对应的Jar包,然后上传到本地maven仓库,再引用这个Jar. 首先需要编译打包parent项目 ...
- OVN架构
原文地址 OVN架构 1.简介 OVN,即Open Virtual Network,是一个支持虚拟网络抽象的系统. OVN补充了OVS的现有功能,增加了对虚拟网络抽象的原生(native)支持,比如虚 ...
- springboot @value无法赋值
1解决方式在类上在加@Compent @Component@EnableBinding(Sink.class)public class ReceiveMessageListenerController ...
- 源码解析.Net中Middleware的实现
前言 本篇继续之前的思路,不注重用法,如果还不知道有哪些用法的小伙伴,可以点击这里,微软文档说的很详细,在阅读本篇文章前,还是希望你对中间件有大致的了解,这样你读起来可能更加能够意会到意思.废话不多说 ...
- C#多线程开发-线程同步 02
上一篇文章主要带领大家认识了线程,也了解到了线程的基本用法和状态,接下来就让我们一起学习下什么是线程同步. 线程中异常的处理 在线程中始终使用try/catch代码块是非常重要的,因为不可能在线程代码 ...
- JSTL标签报错-http://java.sun.com/jsp/jstl/core
考虑为tomcat缺少相关的包 导入就好了 导入jstl-api-1.2.jar 以及standard-1.1.2.jar 然后重启服务 更多java学习,请进本人小博客-https://zhangj ...
- python decorator 修饰器
decorator 就是给函数加一层皮,好用! 1 from time import ctime 2 3 def deco(func): 4 def wrappedFunc(*args, **kwar ...
- Djangoform组件——ModelForm的基本使用
from django.contrib import admin from django.urls import path from app01 import views urlpatterns = ...