硬件基础知识

article/2025/8/26 8:46:50

实模式

实模式又称为实地址模式,实,即真实,这意味着程序运行的是真实的指令,对指令的动作不作区分,直接执行指令的真实功能,同时也说明发往内存的地址是真实的,对任何地址不加限制地发往内存。

x86  CPU 在实模式下的寄存器

实模式下内存访问

数据装载,获取指令,这些操作都需要访问内存才能实现,而访问内存靠的就是是地址值。地址计算方式如下:

代码段是由 CS 和 IP 确定的,而栈段是由 SS 和 SP 段确定的。

实模式中断

硬件中断:中断控制器给 CPU 发送了一个电子信号,CPU 会对这个信号作出应答。随后中断控制器会将中断号发送给 CPU。

软件中断: CPU 执行了 INT 指令,这个指令后面会跟随一个常数,这个常数即是软中断号。这种情况是软件中断。

保护模式

随着软件的规模不断增加,需要更高的计算量、更大的内存容量,内存变大,需要解决内存寻址问题,16位寄存器最多只能表示2^16大小地址,于是扩展成32位。同时在实模式下CPU 对任何指令不加区分地执行;CPU 对访问内存的地址不加限制,这些都会导致问题出现,需要实现保护模式。

保护模式寄存器

保护模式特权级

R0~R3,每个特权级执行指令的数量不同,R0 可以执行所有指令,R1、R2、R3 依次递减,它们只能执行上一级指令数量的子集。而内存的访问则是靠后面所说的段描述符和特权级相互配合去实现的

保护模式段描述符

多个段描述符在内存中形成全局段描述符表,该表的基地址和长度由 CPU 和 GDTR 寄存器指示。如下图所示

段寄存器中不再存放段基地址,而是具体段描述符的索引,访问一个内存地址时,段寄存器中的索引首先会结合 GDTR 寄存器找到内存中的段描述符,再根据其中的段信息判断能不能访问成功

保护模式段选择子

影子寄存器是靠硬件来操作的,对系统程序员不可见,是硬件为了减少性能损耗而设计的一个段描述符的高速缓存,如果每次内存访问都要去内存中查表,那性能损失非常巨大,影子寄存器正好是 64 位,里面存放了 8 字节段描述符数据。低三位之所以能放 TI 和 RPL,是因为段描述符 8 字节对齐,每个索引低 3 位都为 0,我们不用关注 LDT,只需要使用 GDT 全局描述符表,所以 TI 永远设为 0。

CPL是当前的权限,RPL是要请求的权限级别,一般是CPL=RPL,也可以CPL<RPL,但是如果 CPL > DPL,那么CPU就禁止你访问了,权限不够

保护模式平坦模型

CPU32 位的寄存器最多只能产生 4GB 大小的地址,而一个段长度也只能是 4GB,所以我们把所有段的基地址设为 0,段的长度设为 0xFFFFF,段长度的粒度设为 4KB,这样所有的段都指向同一个((段的长度 +1)* 粒度 - 1)字节大小的地址空间


GDT_START:
knull_dsc: dq 0
;第一个段描述符CPU硬件规定必须为0
kcode_dsc: dq 0x00cf9e000000ffff
;段基地址=0,段长度=0xfffff
;G=1,D/B=1,L=0,AVL=0 
;P=1,DPL=0,S=1
;T=1,C=1,R=1,A=0
kdata_dsc: dq 0x00cf92000000ffff
;段基地址=0,段长度=0xfffff
;G=1,D/B=1,L=0,AVL=0 
;P=1,DPL=0,S=1
;T=0,C=0,R=1,A=0
GDT_END:

GDT_PTR:
GDTLEN  dw GDT_END-GDT_START-1
GDTBASE  dd GDT_START

保护模式中断

实模式下 CPU 不需要做权限检查,可以直接通过中断向量表中的值装载 CS:IP 寄存器。而保护模式下的中断要权限检查,还有特权级的切换,所以就需要扩展中断向量表的信息,即每个中断用一个中断门描述符来表示,也可以简称为中断门,中断门描述符有自己的格式。

保护模式要实现中断,也必须在内存中有一个中断向量表,同样是由 IDTR 寄存器指向,只不过中断向量表中的条目变成了中断门描述符,如下图所示

产生中断后,CPU 首先会检查中断号是否大于最后一个中断门描述符,x86 CPU 最大支持 256 个中断源(即中断号:0~255),然后检查描述符类型(是否是中断门或者陷阱门)、是否为系统描述符,是不是存在于内存中。

接着,检查中断门描述符中的段选择子指向的段描述符。最后做权限检查,如果 CPL 小于等于中断门的 DPL,并且 CPL 大于等于中断门中的段选择子所指向的段描述符的 DPL,就指向段描述符的 DPL。

进一步的,CPL 等于中断门中的段选择子指向段描述符的 DPL,则为同级权限不进行栈切换,否则进行栈切换。如果进行栈切换,还需要从 TSS 中加载具体权限的 SS、ESP,当然也要对 SS 中段选择子指向的段描述符进行检查。

做完这一系列检查之后,CPU 才会加载中断门描述符中目标代码段选择子到 CS 寄存器中,把目标代码段偏移加载到 EIP 寄存器中。

切换到保护模式

x86 CPU 在第一次加电和每次 reset 后,都会自动进入实模式,要想进入保护模式,就需要程序员写代码实现从实模式切换到保护模式。切换到保护模式的步骤如下。

第一步,准备全局段描述符表,代码如下。


GDT_START:
knull_dsc: dq 0
kcode_dsc: dq 0x00cf9e000000ffff
kdata_dsc: dq 0x00cf92000000ffff
GDT_END:
GDT_PTR:
GDTLEN  dw GDT_END-GDT_START-1
GDTBASE  dd GDT_START

第二步,加载设置 GDTR 寄存器,使之指向全局段描述符表。
lgdt [GDT_PTR]

第三步,设置 CR0 寄存器,开启保护模式。
;开启 PE
mov eax, cr0
bts eax, 0                      ; CR0.PE =1
mov cr0, eax         

第四步,进行长跳转,加载 CS 段寄存器,即段选择子。
jmp dword 0x8 :_32bits_mode ;_32bits_mode为32位代码标号即段偏移

长模式

长模式又名 AMD64,因为这个标准是 AMD 公司最早定义的,它使 CPU 在现有的基础上有了 64 位的处理能力,既能完成 64 位的数据运算,也能寻址 64 位的地址空间。这在大型计算机上犹为重要,因为它们的物理内存通常有几百 GB

长模式寄存器

相比于保护模式,长模式增加了一些通用寄存器,并扩展了通用寄存器的位宽,所有的通用寄存器都是 64 位,还可以单独使用低 32 位。这个低 32 位可以拆分成一个低 16 位寄存器,低 16 位又可以拆分成两个 8 位寄存器。

长模式段描述符

当描述符中的 L=1,D/B=0 时,就是 64 位代码段,DPL 还是 0~3 的特权级。然后有多个段描述在内存中形成一个全局段描述符表,同样由 CPU 的 GDTR 寄存器指向。


ex64_GDT:
null_dsc:  dq 0
;第一个段描述符CPU硬件规定必须为0
c64_dsc:dq 0x0020980000000000  ;64位代码段
;无效位填0
;D/B=0,L=1,AVL=0 
;P=1,DPL=0,S=1
;T=1,C=0,R=0,A=0
d64_dsc:dq 0x0000920000000000  ;64位数据段
;无效位填0
;P=1,DPL=0,S=1
;T=0,C/E=0,R/W=1,A=0
eGdtLen   equ $ - null_dsc  ;GDT长度
eGdtPtr:dw eGdtLen - 1  ;GDT界限
 dq ex64_GDT

长模式中断

首先为了支持 64 位寻址中断门描述符在原有基础上增加 8 字节,用于存放目标段偏移的高 32 位值。其次,目标代码段选择子对应的代码段描述符必须是 64 位的代码段。最后其中的 IST 是 64 位 TSS 中的 IST 指针。

长模式也同样在内存中有一个中断门描述符表,只不过表中的条目(如上图所示)是 16 字节大小,最多支持 256 个中断源,对中断的响应和相关权限的检查和保护模式一样

切换长模式

第一步,准备长模式全局段描述符表
ex64_GDT:
null_dsc:  dq 0
;第一个段描述符CPU硬件规定必须为0
c64_dsc:dq 0x0020980000000000  ;64位代码段
d64_dsc:dq 0x0000920000000000  ;64位数据段
eGdtLen   equ $ - null_dsc  ;GDT长度
eGdtPtr:dw eGdtLen - 1  ;GDT界限
 dq ex64_GDT

第二步,准备长模式下的 MMU 页表,这个是为了开启分页模式,切换到长模式必须要开启分页,长模式下已经不对段基址和段长度进行检查了,那么内存地址空间就得不到保护了,必须通过分页机制对内存进行保护
mov eax, cr4
bts eax, 5   ;CR4.PAE = 1
mov cr4, eax ;开启 PAE
mov eax, PAGE_TLB_BADR ;页表物理地址
mov cr3, eax

第三步 加载 GDTR 寄存器,使之指向全局段描述表:
lgdt [eGdtPtr]

第四步 开启长模式,要同时开启保护模式和分页模式,在实现长模式时定义了 MSR 寄存器,需要用专用的指令 rdmsr、wrmsr 进行读写,IA32_EFER 寄存器的地址为 0xC0000080,它的第 8 位决定了是否开启长模式。


;开启 64位长模式
mov ecx, IA32_EFER
rdmsr
bts eax, 8  ;IA32_EFER.LME =1
wrmsr
;开启 保护模式和分页模式
mov eax, cr0
bts eax, 0    ;CR0.PE =1
bts eax, 31
mov cr0, eax 

第五步 进行跳转,加载 CS 段寄存器,刷新其影子寄存器。
jmp 08:entry64 ;entry64为程序标号即64位偏移地址


http://chatgpt.dhexx.cn/article/fALnm1Gu.shtml

相关文章

计算机核心硬件基础知识

文章目录 计算机核心基础前言1、计算机组成原理1.1 计算机五大组成部分1.1.1控制器1.1.2运算器1.1.3存储器1.1.4输入设备input1.1.5输出设备output 1.2 程序运行与三大核心硬件(CPU 内存 硬盘)的关系 2、操作系统2.1 操作系统的由来2.2 系统软件与应用软件2.3 计算机系统三层结…

电脑基础知识精选(硬件篇)

电脑基础知识精选&#xff08;硬件篇&#xff09; 电脑基础知识一、处理器 CPU二、内存 RAM三 、硬盘 Disk四、显卡 GPU五、主板 Motherboard六、电源和显示器七、选配电脑常见问答八、如何开始选配电脑&#xff1f;结尾 电脑基础知识 这是一篇关于 电脑配置的一篇科普性 的文…

计算机硬件基础知识(一)

一、 硬件是计算机系统快速、高效、可靠运行的基础。 构成&#xff1a;运算器、存储器&#xff08;取证的主要对象&#xff09;、控制器和I/O控制系统等部件组成。 二、 内存&#xff08;Memory&#xff09; 也称内存存储器&#xff0c;ROM\RAM。是cpu、显卡或者其他内存板卡…

1.1 计算机硬件基础知识

本节主要考点 1、计算机硬件系统的组成 2、CPU的组成 3、进制转换 4、存储器与总线 5、输入输出控制 计算机硬件系统的组成 CPU的组成 • 运算器&#xff1a; • 功能&#xff1a; &#xff08;1&#xff09;执行所有的算术运算。如加、减、乘、除等基本运算及附加运算。 &…

计算机基础知识(上)(硬件篇)

1.计算机发展 1.1 计算机简介 计算机&#xff08;Computer&#xff09;&#xff1a;俗称电脑&#xff0c;是一种能接收和存储信息&#xff0c;并按照存储在其内部的程序对海量数据进行自动、高速地处理&#xff0c;然后把处理结果输出的现代化智能电子设备。 计算机有很多形式…

计算机硬件——基础知识

计算机硬件——基础知识 1.编程语言的作用 语言是用来沟通的&#xff0c;如英语、法语、葡萄牙语等。程序员编程的本质就是让计算机去工作&#xff0c;而编程语言就是程序员与计算机沟通的介质。 2.操作系统和硬件的关系 操作系统负责管理计算机系统中各种独立的硬件&#xff0…

计算机硬件基础知识

计算机硬件系统 不管我们有没有发现&#xff0c;在生活中我们处处都在使用着计算机。 计算机给我们的生活带来了很多便利与效率&#xff0c;为了更好地使用计算机协助我们的工作学习我们需要对计算机有一个基础的了解。 计算机历史 定义&#xff1a;计算机&#xff08;comp…

元数据的构建

什么是元数据 orm 框架一般需要定义表的模型&#xff0c;然后模型与表生成映射关系&#xff0c;那么就一定少不了解析模型然后找到与之映射的数据库表&#xff0c;所以&#xff0c;元数据是解析模型获得的&#xff0c;这些元数据将被用于构建 SQL、执行校验&#xff0c;以及用…

元数据与元数据管理

元数据与元数据管理 元数据 业务元数据 技术元数据 操作元数据 元数据管理 数据安全管理(Ranger) Apache Ranger 是一个用在 Hadoop 平台上并提供操作、监控、管理综合数据安全的框架。Ranger 的愿景是在 Apache Hadoop 生态系统中提供全面的安全性。 目前&#xff0c;Apa…

什么是元数据

转自&#xff1a;https://baijiahao.baidu.com/s?id1643094202189404837&wfrspider&forpc 如果把数据比作人的话&#xff0c;元数据就像数据的“户口本”&#xff0c;表明数据的存储位置&#xff08;家庭住址&#xff09;、字段长度&#xff08;年龄&#xff09;、字…

元数据管理

元数据管理的核心功能如下&#xff1a; 元数据采集 在操作方式上分为自动采集和手动采集两种&#xff1a; 自动采集&#xff1a;定义自动的、定时的采集任务。采集任务为自动调度的工作单元&#xff0c;为元数据的采集提供自动化的、周期性的&#xff0c;或指定某个时间触发的…

什么是元数据?为何需要元数据?

转 https://www.zhihu.com/question/20679872 作者&#xff1a;贺易之 链接&#xff1a;https://www.zhihu.com/question/20679872/answer/65565699 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 要理解这个问题&…

元数据

一、简介 &#xff08;一&#xff09;概念 元数据是描述数据的数据&#xff0c;主要用于描述数据属性&#xff08;property&#xff09;的信息&#xff0c;包括数据存储位置、历史数据、资源查找、文件记录等功能。 &#xff08;二&#xff09;来源 随着信息技术发展&…

大数据之元数据

文章目录 一、元数据是什么&#xff1f;二、元数据是从哪里来&#xff1f;三、元数据分类四、元数据应用五、元数据管理六、元数据价值写在最后 一、元数据是什么&#xff1f; 歌曲《小芳》中有一段台词&#xff1a;“村里有个姑娘叫小芳&#xff0c;长得好看又善良”&#xff…

一文搞懂元数据

之前讲解数据相关的基本概念的文章&#xff0c;做数据产品&#xff0c;这五个概念一定要搞清楚提到了元数据。这篇文章将会展开细讲&#xff0c;主要分享我学习的过程&#xff0c;我的理解&#xff0c;以及对全过程的总结。 01 初识元数据&#xff0c;我被概念绕晕了 接触新概…

什么是元数据,如何管理和利用元数据?

随着企业信息化建设的不断深入&#xff0c;以及公司数字化型智能转型发展的需要&#xff0c;很多地方都需要做元数据建设与管理 。基于元数据可以开展各种各样的应用设计&#xff0c;比如企业级统一标准规范建设实施、统一的数据管理&#xff0c;统一的授权管理&#xff0c;统一…

数据元与元数据

元数据&#xff1a;描述其它数据的数据&#xff08;data about other data&#xff09; 元数据是关于数据的数据&#xff0c;在某些时候不特指某个单独的数据&#xff0c;可以理解为是一组用来描述数据的信息组/数据组&#xff0c;该信息组/数据组中的一切数据、信息&#xff…

什么是元数据(Metadata)

元数据&#xff08;Metadat)   元数据&#xff08;Metadata&#xff09;&#xff0c;可能又是一个困惑的中文译文。 【元】&#xff0c;会意字。从一,从兀。甲骨文字形。象人形。上面一横指明头的部位。 上一短横是后加上去的,依汉字造字规律,顶端是一横的,其上可加一短横。…

元数据是什么?如何管理元数据?

元数据是什么&#xff1f;如何管理元数据&#xff1f; 01 什么是元数据&#xff1f;02 元数据的类型1. 业务元数据2. 技术元数据3. 操作元数据 03 元数据管理的目标1. 建立指标解释体系2. 提高数据溯源能力3. 数据质量稽核体系 04 元数据管理的技术1. 元数据采集2. 元数据管理3…

加强防护,近期勒索病毒有点疯狂!

愈演愈烈的勒索病毒攻击 2021年5月7日&#xff0c;美国最大的成品油管道运营商在本月受到重大网络攻击。公司被迫一度关闭整个能源供应网络&#xff0c;极大影响美国东海岸燃油等能源供应。公司在当日缴纳了500万美元赎金。 紧接着&#xff0c;5月14日爱尔兰卫生服务执行局&am…