段描述符
在操作系统中,分段是一种内存管理技术,其中内存被分成可以分配给进程的段。这些段的长度可能不是固定的,并且不以连续的方式存储。这种方法是在分页过程之后开发的,分页过程需要多个页面才能将进程加载到主内存中,而分段则将代码分成段,其相关的代码可以合并形成一个块。
段表保存与段和进程相关的所有详细信息。生成逻辑地址,CPU 通过参考段表将其转换为物理地址。该表包含关于段的两个字段,它们是基地址和限制。基地址或段基地址表示段的基地址,其中包含段的初始物理地址,限制表示段的长度。根据进程如何划分成段以及它们在内存区域中的位置,分段可以分为虚拟分段和简单分段。
段描述符
段描述符用于分段过程中将逻辑地址转换为线性地址。被划分的内存段具有特权、初始地址或基地址、段限制和使用情况等属性。所有这些信息都存储在段描述符中。它们包含全局和局部描述符表,这些表使用段选择器进行标识。
在 80286 架构及更高版本中,段描述符具有 8 字节长的结构,具有 32 位基地址、20 位限制和访问权限,系统描述符的以下字段列在下面:
段的基地址。
段限制表示段的大小
访问权限字节,表示用于访问信息的用户的保护机制。
段的控制位
段描述符的结构
上图表示段描述符格式的结构,下面列出了其中存在的字段或组件。
段基地址 - 这由线性地址空间中段的 32 位基地址组成。它位于下部,范围从 16 到 31,上部从 0 到 7,然后是位 24 到 31。
段限制 - 它定义了 20 位字段,它是最大的偏移量,可以根据粒度位 G=0 或 1 进行解释。
粒度 - 这表示如果 G=0,则限制是字节;如果 G=1,则限制是页面(4 千字节)。限制支持高达 220 字节,对于页面,它是 4096 字节,最大为 232 字节。
默认值 - 此字段表示操作数的默认大小。它将段描述为 32 位或 64 位,其值为 D=0 和 D=1。
大(Big) - 它用于数据段,当位设置为 1 时,最大偏移量为 32 位 0xffffffff,对于 16 位为 0x0000ffff。
长(Long) - 它用于具有指令编码的 64 位段,当 L 设置为 1 时,D 字段应为 0。
可用/用户位 - 它可供用户使用,x86 忽略它,它旨在用于软件,并且未由硬件定义。
存在位 - 当它设置为 1 时,进程的当前段被加载到内存中,当字段为 0 时,访问它将导致找不到异常。
描述符级别特权 - 它表示段的特权级别,用数字 0、1、2 和 3 表示,其中级别 0(数据字段为 00)是内核部分中最特权的级别,管理员可以访问它,级别 1(01)、级别 2(10)和级别 3(11)赋予用户最低的特权。
系统位 - 当 S 为 1 时,它表示代码段或数据段;如果 S 为 0,则表示段或门描述符。
类型 - 它具有几种类型的访问权限,例如:可读,R=1 或 R=0,指示段是否处于可读模式。
可写,W=1 或 W=0,指示段是否处于可写模式或仅用于读取。
一致性,C=1 或 C=0,从较低的特权级别调用代码段。
已访问位,A=0 或 A=1,指示段未被访问或已加载到寄存器中。
结论
分段技术用于将进程划分为称为段的较小模块,并将相关数据组合起来形成单个段以加载到内存中。划分模块的大小取决于输入进程的长度和类型。维护段表以存储有关段及其任务的信息。CPU 使用段描述符和全局描述符表来检索有关段类型及其内存的信息。此过程可最大限度地利用 CPU,因为段的类似数据可以同时作为一个段加载。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP