操作系统 读书笔记1


tags:

  • 操作系统
    categories:
  • 操作系统
    link: https://www.notion.so/018-1f01519872f04a2f8aa6e084c88c62a2
    notionID: 1f015198-72f0-4a2f-8aa6-e084c88c62a2
    title: OS-018-李煦-Part 1

[[…/…/操作系统课程总括|操作系统课程总括]]
[[CourseNotes/操作系统/OS-X86系统架构概览]]

image.png

1.1 系统级体系架构概览

Global and Local Descriptor Tables

#GDT #LDT #CPL

image.png

在保护模式下,所有的内存访问都通过全局描述符表(GDT)或者可选的局部描述符表(LDT)进行。这些表包括了被称作段描述符的条目。段描述符提供了段的基地址以及访问权限、类型和使用信息。每个段描述符都有一个相关联的段选择子段选择子为使用它的软件提供了一个索引,指向GDT或者LDT(关联段描述符的偏移),还有访问权限的信息。要访问一个段中的字节,必须提供一个段选择子和一个偏移量

段选择子提供了访问该段的段描述符(在GDT或者LDT中)。处理器通过段描述符获取线性地址空间中段的基地址。而偏移量提供了相对于基地址的字节位置。只要该段在当前特权级(CPL)下可访问,该机制可以用来访问任何有效的代码、数据或者堆栈段CPL被定义为当前执行代码段的保护级别

IA32子模式中的情况

GDTRLDTR寄存器在IA-32e子模式(64位模式和兼容模式)中扩展为64位宽。全局和本地描述符表在64位模式下扩展以支持64位的基地址(16字节的LDT描述符包含64位的基地址和各种属性)。在兼容模式中,描述符不会被扩展。

System Segments, Segment Descriptors, and Gates

image.png
程序或过程的执行环境代码数据堆栈段组成。除此之外,体系结构还定义了任务状态段TSS)和LDT两个系统段。Gate(调用门、中断门、陷阱门和任务门)是一组特殊的描述符,为系统过程处理程序提供了受保护的通道,可以在不同的特权级别上操作

image.png
调用门可以提供访问特权级别较低的代码段中的过程的途径。调用过程需要提供调用门的选择子,并进行访问权限检查。如果允许访问目标代码段,则处理器获取目标代码段的段选择子和偏移量,并可能切换到不同特权级别的堆栈。门还可进行16位和32位代码段之间的转换。

Task-State Segments and Task Gates

TSS(任务状态段)定义了任务的执行环境状态

它包括通用寄存器段寄存器EFLAGS寄存器EIP寄存器等的状态,以及与任务关联的LDT的段选择器分页结构的基地址

在切换任务时,处理器会执行一系列操作,包括保存当前任务的状态加载新任务的段选择器到任务寄存器使用GDT中的段描述符访问新的TSS将新任务的状态加载到相应的寄存器中并开始执行新任务。此外,任务也可以通过任务门进行访问,任务门类似于调用门,提供对TSS的访问。

保存当前任务的状态
加载新任务的段选择器到任务寄存器
使用GDT中的段描述符访问新的TSS
将新任务的状态加载到相应的寄存器中
开始执行新任务
任务门访问TSS

Interrupt and Exception Handling

中断描述符表IDT)用于处理外部中断软件中断异常

IDT存储了一组门描述符,这些描述符提供对中断和异常处理程序的访问与GDT类似,IDT不是一个段。IDT的基地址线性地址包含在IDT寄存器(IDTR) 中。IDT中的门描述符可以是中断门陷阱门任务门描述符。

要访问中断或异常处理程序,处理器首先从内部硬件、外部中断控制器或软件通过INT、INTO、INT 3或BOUND指令接收中断向量(中断号)。中断向量提供了对IDT的索引。如果选定的门描述符是中断门或陷阱门,则通过类似于调用通过调用门的过程的方式访问关联的处理程序。如果描述符是任务门,则通过任务切换访问处理程序

根据描述器表,处理器访问中断和异常处理程序的流程图如下所示:

任务门
中断门或陷阱门
接收中断向量
从IDT中获取门描述符
判断门类型
门类型
中断/异常处理程序
通过类似于调用门的方式访问处理程序
通过任务切换访问处理程序

Memory Management

系统架构可以支持物理寻址虚拟内存寻址。当使用物理寻址时,线性地址被视为物理地址。 当使用分页时,代码数据堆栈系统段都可以进行分页,只有最近访问的页面保存在物理内存中。

页面的位置存储在分页结构中,而分页结构本身存储在物理内存中分页结构基本物理地址存储在控制寄存器CR3中。分页结构中的条目确定页面框的物理地址访问权限内存管理信息

为了使用分页机制,线性地址被分为几个部分,这些部分提供对分页结构和页面框的独立偏移量。系统可以有一个或多个分页结构层次,例如,每个任务可以有自己的分页结构层次。

System Registers

在文中得到系统寄存器模块提到了系统架构中用于初始化处理器控制系统操作的一些系统标志位寄存器。其中,EFLAGS寄存器中的系统标志位IOPL字段用于控制任务和模式切换中断处理指令跟踪访问权限

控制寄存器CR0CR2CR3CR4)包含了各种用于控制系统级操作的标志位和数据字段。调试寄存器允许设置断点,用于调试程序和系统软件。GDTR、LDTR和IDTR寄存器包含了它们各自表的线性地址和大小。任务寄存器包含当前任务的TSS的线性地址和大小。

还提到了特定型号寄存器(MSRs),这是一组供操作系统或执行体过程使用的寄存器,控制调试扩展、性能监视计数器、机器检查架构和内存类型范围等项目。大多数系统限制应用程序对系统寄存器的访问,但在特权级0上运行的程序可以修改系统寄存器。

1.2 实模式和保护模式的转换

设置CR0的第0位为1,进入保护模式
设置CR0的第0位为0(复位),进入实模式
实模式
保护模式
  • 保护模式 — 这是处理器的本机操作模式。它提供了丰富的架构功能、灵活性、高性能和向后兼容性,适用于现有软件基础。

  • 实地址模式 — 这种操作模式提供了Intel 8086处理器的编程环境,添加了一些扩展功能(如切换到保护模式或系统管理模式的能力)。

其他的操作模式类型:
  • 系统控制模式 —(System Management Mode,SMM)是所有IA-32处理器的标准架构特性,从Intel386 SL处理器开始引入。该模式为操作系统或执行体提供了一种透明的机制,用于实现电源管理和OEM差异化功能。SMM通过激活外部系统中断引脚(SMI#)进入,从而生成系统管理中断(SMI)。在SMM中,处理器切换到单独的地址空间,并保存当前运行的程序或任务的上下文。然后,可以透明地执行特定于SMM的代码。从SMM返回后,处理器会恢复到SMI之前的状态。

  • 虚拟-8086模式—是一种在保护模式下的特殊模式,允许处理器执行8086软件。这允许在多任务环境中运行使用旧的8086指令集编写的软件。

  • IA-32模式 — 在IA-32模式当中,处理器支持两种子模式:性能模式和 64位模式。64-位模式提供了64位的线性地址并支持物理地址的空间大于 64GB。性能模式允许最多的遗留的保护模式的应用正常的运行。

image.png

1.3. 80x86系统指令寄存器

EFLAGS

EFLAGS里面存放的是虚拟机的标志,决定了处理器是否在保护模式还是在虚拟8086模式下运行。从保护模式到虚拟模式下的传话常常是由任务的切换或者中断和异常来引起的。(前文提及)

EFLAGS寄存器是x86架构中的一个32位寄存器,用于存储各种处理器状态和控制标志位。

TF - Trap Flag (位8): 设置为1的时候开启单步调试。

IF - Interrupt Enable Flag (位9): IF标志控制处理器对可屏蔽硬件中断请求的响应。当IF被设置为1时,处理器响应可屏蔽硬件中断;当IF被清除为0时,可屏蔽硬件中断被禁用。

IOPL - I/O Privilege Level (位12和位13): IOPL字段表示当前运行的程序或任务的I/O特权级别。只有当当前特权级别(CPL)为0时,POPF和IRET指令才能够修改IOPL字段。IOPL控制了对I/O地址空间的访问权限。

NT- Nested Task (位14): NT标志用于控制中断和任务的链接。处理器在调用任务(通过CALL指令、中断或异常)时设置此标志。它在由IRET指令启动的任务返回时检查和修改。NT标志可以通过POPF/POPFD指令显式设置或清除,但更改这个标志的状态可能会导致意外的异常。

RF - Resume Flag (位16): RF标志控制处理器对指令断点条件的响应。当RF被设置为1时,暂时禁用了由指令断点引起的调试异常(#DB)。清除RF时,指令断点会再次生成调试异常。RF标志的主要作用是允许在指令断点引发的调试异常之后重新启动指令。

VM - Virtual 8086 Mode (位17): VM标志用于控制处理器是否处于虚拟8086模式。当VM被设置为1时,处理器进入虚拟8086模式;清除VM时,处理器返回到保护模式。

AC - Alignment Check (位18): AC标志与AM标志一起,用于启用内存引用的对齐检查。当引用未对齐的操作数时,会触发对齐检查异常。对齐检查异常仅在用户模式下(特权级别3)生成。

VIF - Virtual Interrupt Flag (位19): VIF标志包含了IF标志的虚拟映像。处理器只有在控制寄存器CR4中的VME标志或PVI标志被设置,且IOPL小于3时才能识别VIF标志。VME标志启用虚拟8086模式扩展,PVI标志启用保护模式虚拟中断。

内存管理寄存器

该处理器提供四个内存管理寄存器GDTRLDTRIDTRTR),用于指定控制分段内存管理的数据结构的位置。
image.png

内存管理寄存器

GDTR 寄存器保存基址 和 GDT 的 16 位表限制基址指定GDT的字节0的线性地址表限制指定表中的字节数LGDTSGDT 指令分别加载存储 GDTR 寄存器。作为保护模式操作的处理器初始化过程的一部分,必须将新的基址加载到 GDTR 中。

LDTR寄存器保存16位段选择器,基址,LDT的段限制和描述符属性基址指定LDT段第0字节的线性地址段限制指定了段中的字节数LLDTSLDT指令分别加载和存储LDTR寄存器的段选择器部分。包含LDT的段必须在GDT中有一个段描述符。当LLDT指令在LDTR中加载段选择器时,LDT描述符中的基址、限制和描述符属性会自动加载到LDTR中。当任务切换发生时,LDTR将自动加载用于新任务的LDT的段选择器和描述符。在将新的LDT信息写入寄存器之前,LDTR的内容不会自动保存。

IDTR寄存器在保护模式下保存基址、64和16位的IDT表限制基址指定IDT第0字节的线性地址;表限制指定表中的字节数LIDTSIDT指令分别加载和存储IDTR寄存器。然后,作为处理器初始化过程的一部分,可以改变寄存器中的基址和限制

TR寄存器保存16位段选择器,基址,当前任务的TSS的段限制和描述符属性。选择器引用GDT中的TSS描述符。基址指定TSS的第0字节的线性地址;段限制指定TSS的字节数。LTRSTR指令分别加载和存储任务寄存器的段选择器部分。当LTR指令在任务寄存器中加载段选择器时,来自TSS描述符的基址、限制和描述符属性会自动加载到任务寄存器中。当任务切换发生时,任务寄存器将自动加载新任务的TSS的段选择器和描述符。

控制寄存器

CR0 包含控制操作模式和处理器状态的系统控制标志。

CR1 预留。

CR2 包含页面故障线性地址(导致页面故障的线性地址)。

CR3 包含分页结构层次结构的基础物理地址和两个标志(PCD和PWT)。只指定基址的最高有效位(低于低12位);地址的后12位假定为0。当使用物理地址扩展时,CR3寄存器包含页目录指针表的基址。

其他的控制寄存器

image.png

1.4. 系统指令

LGDT 作用是将GDT基址和限制从内存加载到GDTR寄存器中。

SGDT 作用是将GDT基址和限制从GDTR寄存器存储到内存中。

LIDT 作用是将IDT基址和限制从内存加载到IDTR寄存器

SIDT 作用是将IDT基址和限制从IDTR寄存器存储到内存中。

LLDT 作用是写入LDT寄存器

SLDT 作用是从LDTR寄存器里面向内存或者全局寄存器保存LDT段选择器中的内容

LTR 作用是将TSS的段选择器和段描述符从内存加载到任务寄存器中。段选择操作数也可以位于通用寄存器中。

STR 作用是将当前任务TSS的段选择器从任务寄存器存储到内存或通用寄存器中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值