Intel8086处理器使用NASM汇编语言实现操作系统18-保护模式与特权级概述

本文主要是介绍Intel8086处理器使用NASM汇编语言实现操作系统18-保护模式与特权级概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实模式下,任意程序,可以操作任意内存位置,为了避免这种情况的发生,所以有了保护模式,保护的就是用户程序之间的相互隔离(当然了,外挂之类的那都是后文要说的了,暂不考虑)

80386及它以后的处理器,都支持三种模式
1.实模式

x86是32位的cpu,所以无法运行早期8086那种16位汇编程序的时候,为了能运行16位程序,这种方式就叫做实模式,计算机启动的时候,是从实模式开始启动的,包括我们如今的电脑

2.保护模式

支持多个任务,每个任务都有自己的内存,且互相不干扰,可以理解成多进程

3.虚拟86模式

实模式有个缺点,就是它是单进程的,因为8086就这样,为了支持多进程,其实就是为了支持32位程序和16位程序能一起运行,这就出现了虚拟86模式,该模式是保护模式的一个子模式,因为这是建立在保护模式基础上的

特权级

CPU采用下面的方式进行优化
1.乱序执行
2.指令流水行(微指令,深度)->分支预测
3.寄存器重命名->隐退
4.地址回绕(第21根地址线,进入保护模式很麻烦)

特权级
特权级分为0-3,0特权级最高,3最低
0:操作系统的权限是0特权级,用来处理任意端口数据,任意设置CPU运行模式和状态,处理任意一段内存
1和2:驱动和一些服务的特权级是1或者2
3:最后用户程序的特权级是3

lgdt,lldt,ltr等等等等很多指令只能有特权为0的指令才能执行,实模式的代码是特权级=0,即使进入保护模式,也是特权级=0,in,out指令也有特权级

注意:特权级不是作用于程序上的概念,而是具体到某个段上的,一个程序所有代码段都具有相同的特权级,如果一个程序的特权级3,那么就意味着该程序所有代码段的特权级都是3,反过来也一样

当前特权级:CPL,当前执行的代码段的特权级,在段描述符高速缓存器中
,在段寄存器最低2位(保护模式中)

描述符特权级:DPL

代码段:不允许高特权级的段转移到低特权级的段(低访问高)
数据段:代码段A如果访问某个数据段B,A的CPL必须大于B的DPL(高访问低)

原则上低特权级的代码段不能跳转到高特权级的代码段,但是如果将高特权代码段设置成依从的代码段,那么就可以,如果不使用依从的代码段,还有方法二,通过调用门

特权级和表格检查,包括栈切换,都浪费时间。所以说用户态切换到内核态很费时间

这篇关于Intel8086处理器使用NASM汇编语言实现操作系统18-保护模式与特权级概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057326

相关文章

Qt实现对Word网页的读取功能

《Qt实现对Word网页的读取功能》文章介绍了几种在Qt中实现Word文档(.docx/.doc)读写功能的方法,包括基于QAxObject的COM接口调用、DOCX模板替换及跨平台解决方案,重点讨论... 目录1. 核心实现方式2. 基于QAxObject的COM接口调用(Windows专用)2.1 环境

MySQL查看表的历史SQL的几种实现方法

《MySQL查看表的历史SQL的几种实现方法》:本文主要介绍多种查看MySQL表历史SQL的方法,包括通用查询日志、慢查询日志、performance_schema、binlog、第三方工具等,并... 目录mysql 查看某张表的历史SQL1.查看MySQL通用查询日志(需提前开启)2.查看慢查询日志3.

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

使用Python实现局域网远程监控电脑屏幕的方法

《使用Python实现局域网远程监控电脑屏幕的方法》文章介绍了两种使用Python在局域网内实现远程监控电脑屏幕的方法,方法一使用mss和socket,方法二使用PyAutoGUI和Flask,每种方... 目录方法一:使用mss和socket实现屏幕共享服务端(被监控端)客户端(监控端)方法二:使用PyA

Python使用Matplotlib和Seaborn绘制常用图表的技巧

《Python使用Matplotlib和Seaborn绘制常用图表的技巧》Python作为数据科学领域的明星语言,拥有强大且丰富的可视化库,其中最著名的莫过于Matplotlib和Seaborn,本篇... 目录1. 引言:数据可视化的力量2. 前置知识与环境准备2.1. 必备知识2.2. 安装所需库2.3

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp