X86架构基础

news2024/11/17 21:53:07

X86目前的架构有32位和64位两种,不同的架构支持的运行模式也是不一样的,64位的基本能兼容32位。64位是X86架构的主流,本文内容默认以64位位基础。X86平台目前的支持的运行模式有以下几种:

1、实模式:这是最早的X86运行模式,用于早期的8086、8088和8080处理器;实模式使用16位地址线,支持最大640KB的内存空间;实模式不支持内存保护、分页和多任务处理等现代操作系统特性。

2、保护模式:X86架构的一个重要特性。从80286处理器开始引入;它使用32位地址线,理论上可以支持最大4GB的内存空间;保护模式引入了内存保护、分页和多任务处理等现代操作系统特性。大多数现代操作系统都是在保护模式下运行的。

3、系统管理模式:从Pentium处理器开始引入的。SMM模式可以与保护模式并行运行,SMM模式的代码可以不影响保护模式操作的情况下执行;SMM模式提供了硬件级别的保护,操作系统无法访问SMM代码和数据。

4、IA-32e模式:也称为长模式,是从Pentium4处理器开始引入的;IA-32e模式支持64位地址线,理论上可以支持无限大的内存空间;包含两种子模式:IA-32e兼容模式,处理器可以同时执行32位和16位代码,IA-32e64位模式,也称为纯64位模式,处理器在此模式下只能执行64位代码。

IA-32架构(从处理器Intel386处理器系列开始)为操作系统提供了广泛的支持。这些支持是IA-32系统架构的一部分,包括下面几个部分:

内存管理

软件模块保护

多任务

异常和中断处理

多处理器技术

高速缓存管理

硬件资源和电源管理

调试和性能检测

一、系统级架构概况

 IA-32系统架构是由寄存器、数据结构和指令组成。下图给出了一个系统寄存器和数据结构的概况:

1.1全局和局部描述符表

 在保护模式下操作时,所有的内存访问,要么通过全局描述符表GDT,要么通过局部描述符表LDT。这些描述符表里是段描述符,段描述符里包含了段的基址、访问特权、类型和用法信息。段

每个段描述符都有一个与之相关的段选择符,段选择符里包含以下信息:

        GDT或LDT(与它相关的段描述符)里的一个索引

        一个全局/局部标志

        访问权限等信息

程序员编写的程序通过编译器生成目标代码,该代码包含了各种变量和指令,目标代码被连接器链接成可执行文件,该文件包含了程序的指令和数据。可执行文件加载到内存中运行的时候,操作系统会为该程序分配一段连续的虚拟内存空间。CPU执行程序时,会使用逻辑地址来引用内存中的数据。逻辑地址由两部分组成:段选择符和偏移量。偏移量通常是指令的一部分,CPU会加载指令中的偏移量,这就是段内的具体位置。

段选择符位于CPU寄存器中,包含段描述符表的索引,GDTR或LDTR保存的段描述符表地址,通过这个索引和段描述附表的地址就可以加载段描述符,段描述符中保存着段的基址。基址和偏移量组合就可以得到线性地址。

将线性地址经过页面映射后,得到物理地址。

1.2 系统段、段描述符和门

除了代码、数据和堆栈段外,系统架构还定义了两个系统段:任务状态段(TSS)和LDT。这些段都有一个专门为它们定义的描述符。

系统架构也定义了一套称为门的描述符(调用门、中断门、陷阱门和任务门),这些门提供了一种访问运行在不同于应用程序特权级的系统过程和处理程序的方法。

1.3任务状态段和任务门

任务状态段(TSS):定义了任务执行环境的状态。这些状态包括通用寄存器、段寄存器、EFLAGS寄存器、EIP寄存器和段选择符以及三个堆栈段(特权0、1、2各一个堆栈)的指针的状态。它也包括了于任务相应的LDT的选择符和页表的基地址。当CPU从一个任务切换到另外一个任务时,它会使用TSS描述符来保存当前任务的上下文信息,并加载新任务的TSS描述符来恢复新任务的上下文信息。

任务门:是一个特殊的门描述符,它用于允许CPU从一个任务切换到另一个任务。任务门描述符存储在全局描述符表(GDT)中。当CPU执行任务门描述符时,它会加载和任务门相关的TSS描述符,并跳转到该TSS描述符中通的EIP寄存器的值。

所有运行在保护模式下的程序,都是一个称作当前任务的上下文中进行的。当前任务的TSS的段选择符保存在任务寄存器中。切换到一个任务最简单的方法是进行CALL或JMP到那个任务中。新任务的TSS的段选择符是通过CALL和JMP指令给出。在进行任务切换时,处理器按照下面的次序进行:

1.保存当前TSS中当前任务的状态

2.装载新任务段选择符的任务寄存器

3.通过GDT中的段选择符访问新的TSS

4.将新TSS段中新任务的状态装载到通用寄存器、段寄存器、LDTR、控制寄存器CR3、EFLAGS寄存器和EIP寄存器

5.开始执行新任务

1.4 中断和异常处理

外部中断、软件中断和异常时通过中断描述符表(IDT)处理的。如上图所示,IDT包含了访问中断和异常处理程序的门描述表的集合。IDT不是一个段,IDT的线性基地址包含在IDT寄存器中(IRTR),IDT中的门描述符有中断、陷阱、或任务门类型。

陷阱:计算机有两种运行模式:用户态和内核态。其中操作系统运行在内核态。在内核态中,计算机可以运行任何指令;相反用户程序运行在用户态,软件只能使用少数的指令,并不具备直接俄访问硬件的权限。当软件需要访问硬件或者调用内核中的函数的时候,就会用到陷阱,陷阱指令可以使执行流程从用户态陷入内核,并把控制权转移给操作系统,使得用户可以调用内核函数和使用硬件从而获得操作系统所提供的服务,比如用视频播放器播放电影的时候,视频软件就发出陷阱使用显示器和声卡。陷阱发生的时间是固定的。

中断:中断是由外部事件导致并且它发生的时间是不可预测的,这一点和陷阱不同。外部中断主要是指时钟中断、硬件中断等。如果一个程序运行了足够长用完了分配给它的时间片,CPU决定切换到另一个进程运行,就会产生一个时钟中断,切换到下一个进程。硬件中断就是由硬件引起的。中断的发生是随机的且主要作用是完成进程间的切换,从而支持CPU和设备间的并行。

 中断和陷阱的另一个重要差别是,CPU处理中断的完成中会屏蔽中断,不接受新的中断直到此次中断处理完成,而陷阱的发生不屏蔽中断,可以接受新的中断。

【注】中断是异步发生的,而陷阱是同步发生的,中断是为了处理外部事件或更高级别的任务,陷阱用于处理程序中的异常情况或请求操作系统服务。中断涉及到上下文切换,陷阱是程序的一部分,程序在陷阱处理完后会继续执行,不涉及上下文切换。

异常:程序执行过程中的异常行为。比如除零异常,缓冲区溢出等,异常是指CPU执行指令时本身出现的问题。

在运行中断或异常处理程序时,处理器会获得一个中断向量(中断数字),里面保存了IDT门描述符的索引。如果选中的门描述符是一个中断门或陷阱门,相应的处理程序类似于调用门调用过程。如果门描述符是一个任务门,就通过任务切换进行的。

1.5 内存管理

 X86架构支持直接物理地址内存或者虚拟内存(通过分页)。当直接用物理地址时,线性地址就是物理地址,当使用分页时,所有代码、堆栈、系统段、GDT、IDT都可以将最近访问过页驻留在内存中而进行分页。

1.6 系统寄存器

为例有助于初始化处理器及其控制系统的运行,架构在EFLAGES寄存器中系统标志和几个系统寄存器:

EFLAGES寄存器的系统标志和IOPL域

控制寄存器

测试寄存器

GDTR、LDTR、IDTR

任务寄存器

模式相关的寄存器

1.7 其它系统资源

操作系统指令

性能监测计数器

内部高速缓存和缓冲区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2066360.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ue5远程渲染和本地渲染的区别,及云渲染的联系

UE5这款引擎以其令人惊叹的渲染能力,为游戏开发者们打开了一扇通往视觉盛宴的大门。但是在UE5的世界里,渲染技术其实还有着本地渲染和远程渲染之分,而且它们与时下大热的云渲染技术也有着千丝万缕的联系。本文主要说明UE5中的远程渲染和本地渲…

鲜为人知的 9 种人工智能工具

这套 AI 工具确实与众不同。您可能在其他地方读到过,图像生成需要大量工作。使用 AI 工具制作网站也需要大量工作。此列表涵盖了我在过去几个月发现的一些前沿项目,它们在很多方面都很有用。 如果您没有时间阅读最新的营销书籍,SoBrief 是个不…

Semantic Kernel进阶:多模型的支持

大家可能已经知道,Semantic Kernel默认主要支持两款模型:OpenAI和AzureOpenAI。对于开发者来说,这显然是不够的,尤其是当我们希望对接国内的一些强大模型,比如百度的文心一言、阿里的通义千问、搜狗的百川、智谱ChatGL…

kickstart自动安装脚本制作详解

一、kickstart自动安装脚本制作 此实验中,使用Rhel7.9,并开启图形化系统 1.设置实验环境 1.使用Rhel7.9 2.需要打开图形化系统 [rootpxe ~]# hostnamectl # 查看当前系统是否为图形化Static hostname: pxeIcon name: com…

数字赋能下的艺术蝶变:沃可趣如何重塑乐园演艺人才培训?

全球知名主题乐园在2023年共接待游客超过1300万人次。 这意味着,在童话世界里创造快乐的演职人员们,平均每天要与三、四万人见面,以精湛的演技服务好每一个人,其工作难度和强度不言而喻。 减轻员工负担,帮助员工成长…

江协科技STM32学习- P4 新建工程

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

大语言模型超参数调整指南:入门调参的实用手册

在人工智能的广阔天地中,大语言模型(LLM)正以其强大的能力,不断刷新我们对机器理解语言的认知。然而,要使这些模型在特定应用场景下发挥最大效能,关键在于如何巧妙地调整其超参数。本文将带你深入探索 LLM …

4. 数组与集合

数据结构是管理和组织数据的基础,它直接影响到程序的性能和效率。在本章中,我们将深入探讨与数组和集合相关的知识。这些数据结构在Java编程中至关重要,无论是处理简单的线性数据还是复杂的多维数据,合理使用这些结构都能大大提高…

100个智能体实战技巧 | 如何让工作流也能处理图片

相信不少朋友都遇到过想要在工作流中处理图片但是却无从下手的情况 举个例子,扣子中有个插件叫OCR,是可以用来识别图中的文字的 然而作为一个插件,它只能在工作流中被调用,如下图 工作流 vs. 图像流 这就意味着,要使用…

Modal中的跳转用<Link>组件会报错?

在做链接跳转时,一般是用a标签或者link标签。但是当团队规范使用标签时,在modal(antd的版本4)中使用可能就有问题了。 报错内容是,发现link在使用时找不到路由上下文。因此报错。 原因:Link 组件在 return …

Vue3-响应式原理解析

vue3 与 vue2 主要差异之一无疑是响应式实现上的改变。本文主要阐述响应式原理的实现方式解析以及核心源码阅读的注释理解。 本文主要对响应式实现原理进行逻辑梳理,舍弃枯燥无味的代码,只用图解/文字进行功能描述,具体实现请自行阅读。保重!!! 如果问题,虚心求教,还请…

xxl_job任务调度简单使用

一、概念 任务调度是为了自动完成特定任务,在约定的特定时刻去执行任务的过程 如以下应用场景: 某电商平台需要每天上午10点,下午3点,晚上8点发放一批优惠券 某银行系统需要在信用卡到期还款日的前三天进行短信提醒 某财务系统…

UEditor百度富文本后端上传文件接口

UEditor百度富文本后端上传文件接口 直接上代码 接口: RequestMapping("/UEditorConfig")public String list(HttpServletRequest request, HttpServletResponse response) throws IOException {String config environment.getProperty("ueditor.c…

60%公司推行精益管理失败都源于同一原因,这个原因是...

精益管理在许多公司中已经成为提高运营效率、减少浪费、和提升客户满意度的重要方法。或者你觉得惊讶,根据我们的经验,超过60%的公司在实施精益管理失败,我们发现他们都有一个共同的原因,这个原因就是公司没有跟踪正确的指标&…

【图文并茂】ant design pro 如何优雅奇妙地把 crud 的 api 单独抽出来共用

我们写后台项目,经常要写增删改查的接口。 比如 角色 权限 我们不可能都写一个 api 比如 getRoles, getPermissions 这些请求列表的,都是一样的,只是路径不同 那么我们应该抽出来,放到一起,直接去调,只…

双向电表是什么电表?为什么光伏发电储能要求安装双向电能表!

双向电表是什么电表? 双向电表就在用电的时候假如是正转,那么向外送电的时候就是反转,也就是读数越来越小。反总是指反向总有功,反无是指反向总无功。 双向电表,也称为双向计量电能表,是一种能够计量用电和发电的电…

第三节:Nodify 添加连接关系

引言 Nodify有三层结构,编辑器Editor,节点Node和连接组件Connection,上节介绍了节点和编辑器,本节介绍连接组件。连接组件用于保存节点中连接端子的连接关系,并随节点的拖动改变。 1、连接组件 连接组件存储一个连接关…

海外媒体软文发稿【越南通讯社vnanet】官方媒体发布新闻稿

海外媒体软文发稿【越南通讯社vnanet】官方媒体发布新闻稿 越南通讯社(越南语:Thng tấn x Việt Nam;英语:Vietnam News Agency,简称VNA),简称“越通社”是越南国家通讯社,始建于1945年9月2日。越通社是越…

JVM的内存模型和垃圾回收

JVM内存区域 内存模型图: 堆 线程共享。所有的对象实例以及数组都要在堆上分配。回收器主要管理的对象。 它的目的是存放对象实例。同时它也是GC所管理的主要区域,因此常被称为GC堆,又由于现在收集器常使用分代算法,Java堆中还…

纷享销客AI能力在线索精细化管理中的应用与实践

1、智能评分提高线索转换效率 企业可以经过后台模型配置,和对近1-2年内线索的相关属性进行整理分析,纷享销客AI可以总结出历史相似线索的转换概率,使销售人员可以集中精力在更容易转换的线索上,提高转化效率。 纷享销客AI的智能…