GDT、LDT,TSS、段选择子、段描述符

2023-10-23 08:28
文章标签 选择 描述符 gdt ldt tss

本文主要是介绍GDT、LDT,TSS、段选择子、段描述符,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,我叫徐锦桐,个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家来访。

在32位操作系统保护模式下,所有的内存访问都要通过GDT(全局描述符表)或者LDT(局部描述符表),GDT和LDT就是存储各种段描述符的一个表,而从GDT或LDT中找到进程对应的段描述符就需要段选择子了。

段描述符

段描述符就是一段内存的地址位置、访问权限、当前段是代码段还是数据段等等表示该内存区域的属性。
段描述符的结构如下:
段描述符.webp
具体的每一个代表着什么就不过多介绍了。

TSS结构

TSS是x86系统上的一个结构,保存了当前任务的状态信息,比如运行到了哪,当前任务的寄存器,CPU用来进行任务调度。
当进行任务切换的时候,就把TSS取出来然后恢复要切换的任务的状态。
TSS过程.webp


下面是TSS的具体结构,具体的各个结构内容我们就不过多叙述了,如果真想要了解各个位所代表的是什么,大家可以看IA-32手册。
TSS结构.webp


注: TSS是x86系统的特性,在当前64位操作系统已经被抛弃。

段选择子

段选择子非常简单,就是表示一个索引,还有一个特权级位,最后还有一个位表示是在GDT中查找还是LDT中查找。
段选择子的结构如下:
段选择子.webp


可以看到TI位为0表示从GDT表中查,为1表示从LDT中查。RPL表示所需要的特权级。


计算机中有一个TR寄存器,存储着段选择子,通过段选择子找到对应的GDT或LDT表中的表项,然后通过GDT或LDT的表项找到对应任务的TSS结构。
TR寄存器.webp

GDT表

GDT就是全局描述符表,里面有各种的段描述符,比如说操作系统代码段描述符、bootloader代码段描述符。使用GDT为不同的内存段分配不同的权限。
简单来说,就是GDT中有用户的CS和DS段描述符还有内核的CS和DS段描述符等等。
当系统在保护模式下运行时,程序的所有内存访问操作都需要经过全局描述符表(GDT)和局部描述符表(LDT),其中LDT并不是必须的。
全局描述符表.webp
一个GDT表项的大小是8个字节。我们通过偏移量找到对应的表项,那这个偏移量存在哪里呢,就是在段选择子中。段选择子中包含了index(就是索引)、从哪个表查和所需特权级。


但是一个处理器只有一个GDT表,是内核权限访问的。在多个任务的系统中,所有任务的段描述符(一个任务的数据段描述符、代码段描述符、堆栈描述符等等)都放在GDT表中这对操作系统来说,是个负担。而且每次访问GDT表,还要陷入内核级才能访问,这比较费时间。这就有了LDT,操作系统在加载每一个任务的时候,都在给这个任务创建一个LDT表,存储着该任务的信息。


段描述符的结构如下图:
段描述符.webp
包含对应段的基地址、最大地址限制、权限等其他属性。GDT里面就是存的各个段(如:OS的代码和数据段,用户的代码和数据段)的段描述符。

LDT表

LDT用于实现保护模式,就是实现通过虚拟地址内存隔离,防止一个进程访问另一个进程的代码或数据段。
Linux中实际不适用LDT。 Linux2.4之前,使用TSS进程任务切换。但是TSS和LDT中的每一个条目都应该保存在GDT中,这限制了系统中的任务总数。


Linux2.4之后,所有任务共享一个LDT,这个共享LDT条目放在GDT中。
所有进程共享默认LDT段。默认情况下,其中会包含一个空的段描述符。这个默认LDT段描述符存储在GDT中。Linux所生成的LDT的大小是24个字节。默认有3个条目:LDT[0] = 空;LDT[1] = 用户代码段;LDT[2] = 用户数据/堆栈段描述符。

任何情况下,GDT中的条目数8180,因此:2 * NR_TASKS = 8180,NR_TASKS = 8180/2 = 4090。为什么使用2 * NR_TASKS?因为对于所创建的每个进程,都不仅要加载一个TSS描述符用来维护上下文切换的内容,另外还要加载一个LDT描述符。这种 x86架构中进程数量的限制Linux 2.2中的一个组件,但自2.4版的内核开始,这个问题已经不存在了,部分原因是使用了硬件上下文切换(这不可避免地要使用TSS),并将其替换为进程切换。

这篇关于GDT、LDT,TSS、段选择子、段描述符的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

如何选择SDR无线图传方案

在开源软件定义无线电(SDR)领域,有几个项目提供了无线图传的解决方案。以下是一些开源SDR无线图传方案: 1. **OpenHD**:这是一个远程高清数字图像传输的开源解决方案,它使用SDR技术来实现高清视频的无线传输。OpenHD项目提供了一个完整的工具链,包括发射器和接收器的硬件设计以及相应的软件。 2. **USRP(Universal Software Radio Periphera

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

为什么现在很多人愿意选择做债务重组?债重组真的就这么好吗?

债务重组,起初作为面向优质企业客户的定制化大额融资策略,以其高效周期著称,一个月便显成效。然而,随着时代的车轮滚滚向前,它已悄然转变为负债累累、深陷网贷泥潭者的救赎之道。在此路径下,个人可先借助专业机构暂代月供,经一段时间养护征信之后,转向银行获取低成本贷款,用以替换高昂网贷,实现利息减负与成本优化的双重目标。 尽管债务重组的代价不菲,远超传统贷款成本,但其吸引力依旧强劲,背后逻辑深刻。其一