操作系统 读书笔记2

本文详细介绍了操作系统中的内存管理,包括逻辑地址、线性地址和物理地址的概念,以及分段和分页机制。讨论了不同内存模型如BasicFlatModel、ProtectedFlatModel和Multi-SegmentModel,以及逻辑地址如何通过段选择子和段描述符转换为线性地址的过程。还涵盖了描述符的分类,如数据段、代码段描述符等在内存管理中的作用。
摘要由CSDN通过智能技术生成

tags:

  • 操作系统
    categories:
  • 操作系统
    link: https://www.notion.so/OS-018-Part-2-8af86571cf0e49d1894d0a8a98beb036
    notionID: 8af86571-cf0e-49d1-894d-0a8a98beb036
    title: OS-018-李煦-Part 2

[[操作系统]]

2.1. 内存管理概览

逻辑地址、线性地址和物理地址

逻辑地址是由一个段选择子和一个段内偏移量组成的,用来定位一个特定的字节在一个段内的位置。

线性地址是将逻辑地址通过段描述符中的基地址进行偏移计算后得到的,表示在处理器的线性地址空间中的位置。

物理地址是将线性地址通过分页机制进行转换后得到的,表示在处理器的物理地址空间中的位置。

分段和分页

分段机制通过将处理器的地址空间分割成较小的保护地址空间(称为),分别用于存储代码、数据和堆栈等模块,或者用于存储系统数据结构。每个程序或任务可以被分配一个独立的段集合,处理器通过强制各个段之间的边界来确保程序之间不相互干扰。分段机制还可以对段进行类型限定,限制可以在特定类型的段上执行的操作。

分页机制通过将每个段划分为页面,将页面存储在物理内存或磁盘上,从而实现一个“虚拟内存”环境。处理器根据页表将线性地址转换为物理地址,并在访问内存时执行所需的操作。当访问的页面当前不在物理内存中时,处理器会发生页面故障异常,操作系统或执行体从磁盘中将页面读入物理内存,并继续执行程序。

分段分页的组合可以配置成支持简单的单程序或单任务系统、多任务系统,或者支持使用共享内存的多处理器系统。

下图是分段和分页的示意图

image.png

2.2. 分段机制

Basic Flat Model

Basic Flat Model 的特点是系统中的操作系统应用程序可以访问一个连续的、非分段的地址空间。为了实现Basic Flat内存模型,至少需要创建两个段描述符,一个用于引用代码段,一个用于引用数据段。这两个段都映射到整个线性地址空间,具有相同的基地址值和段限制。通过将段限制设置为4GB,可以防止分段机制产生超出限制的内存引用异常。在Basic Flat模型中,ROM通常位于物理地址空间的顶部,而RAM位于地址空间底部

Protected Flat Model

Protected Flat Model 与Basic Flat Model 相似,只是段限制设置为仅包括实际存在物理内存的地址范围。任何尝试访问不存在内存的操作将生成一般保护异常(#GP)。该模型提供了对某些程序错误的最低硬件保护级别。可以增加更多复杂性来提供更多保护。

Multi-Segment Model

多段模型(Multi-Sgment Model)是一种基于硬件的机制,它为代码、数据结构和程序/任务提供保护。在这个模型中,每个程序或任务被分配到它自己的段描述符和段表。这些段可以是分配给它们的程序私有的,也可以在多个程序之间共享。硬件控制对系统上运行的程序的所有段和执行环境的访问访问检查用于防止引用段限制之外的地址和在某些段中执行不允许的操作。

image.png

2.3. 逻辑地址和线性地址的转换

段选择子(Segment Selectors)是16位的值,用于标识存储在全局描述符表(GDT)或局部描述符表(LDT)中的段描述子。

段寄存器(Segment Registers)是CPU中的特殊寄存器,用于存储段选择子的值。

加载段选择子时,CPU会通过以下步骤将逻辑地址转换为线性地址

  1. 使用段选择子中的偏移量,在GDT或LDT中定位段描述子,并将其读入CPU。(仅当加载新的段选择子到段寄存器时才需要执行此步骤。)
  2. 检查段描述子以验证访问权限和段的范围,确保段可访问且偏移量在段的限制范围内。

段描述子(Segment Descriptors)是存储在**全局描述符表(GDT)**或局部描述符表(LDT)中的数据结构,用于描述一个段的属性和基地址。段描述子的结构如下:

  • 基地址(Base Address):表示段的起始地址。
  • 段限制(Limit):表示段的大小。
  • 访问权限(Access Rights):确定对段的访问权限和特权级别。
  • 其他标志(Other Flags):包括标志位和系统描述子类型。
    通过对段选择子和段描述子的认识和操作,CPU能够实现逻辑地址到线性地址的转换。

为了将逻辑地址转换为线性地址,处理器执行以下步骤:

  1. 使用段选择子中的偏移量,在GDT或LDT中定位段描述符,并将其读入处理器(只有在将新的段选择子加载到段寄存器时才需要此步骤)。
  2. 检查段描述符以检查段的访问权限和范围,以确保段可访问并且偏移量在段的限制范围内。
  3. 段描述符中的基地址与偏移量相加,形成线性地址。如果不使用分页,处理器直接将线性地址映射到物理地址(即,线性地址通过处理器的地址总线输出)。如果线性地址空间进行分页,将使用第二级地址转换将线性地址转换为物理地址
将逻辑地址转化为线性地址示意图如下:

image.png

2.4. 描述符的分类

描述符是一种数据结构,它在全局描述符表(GDT)或本地描述符表(LDT)中提供有关段的信息。它包括网段的大小、位置、访问控制和状态等详细信息。

  1. 数据段描述符(Data segment Descriptor):数据段描述符定义了数据段的属性和位置信息,用于访问和操作存储数据的内存区域。

  2. 代码段描述符(Code segment Descriptor):代码段描述符定义了代码段的属性和位置信息,用于访问和执行存储在内存中的指令。

  3. 局部描述符表描述符(Local descriptor-table (LDT) segment descriptor):局部描述符表描述符用于定义局部描述符表的属性和位置信息。局部描述符表是用于存储局部的段描述符的表格。

  4. 任务状态段描述符(Task-state segment (TSS) descriptor):任务状态段描述符定义了任务状态段(TSS)的属性和位置信息。任务状态段是一个数据结构,存储了任务的上下文信息,如寄存器值、堆栈指针等。

  5. 调用门描述符(Call-gate descriptor):调用门描述符定义了调用门的属性和位置信息。调用门是一种特殊的指令,用于在不同的特权级之间进行远程过程调用。

  6. 中断门描述符(Interrupt-gate descriptor):中断门描述符定义了中断门的属性和位置信息。中断门用于处理中断请求,并跳转到相应的中断处理程序。

  7. 陷阱门描述符(Trap-gate descriptor):陷阱门描述符定义了陷阱门的属性和位置信息。陷阱门用于捕捉和处理陷阱(如软中断)。

  8. 任务门描述符(Task-gate descriptor):任务门描述符定义了任务门的属性和位置信息。任务门用于在不同的任务之间进行切换,并保存当前任务的上下文。
    2.1. 内存管理概览

逻辑地址、线性地址和物理地址

逻辑地址是由一个段选择子和一个段内偏移量组成的,用来定位一个特定的字节在一个段内的位置。

线性地址是将逻辑地址通过段描述符中的基地址进行偏移计算后得到的,表示在处理器的线性地址空间中的位置。

物理地址是将线性地址通过分页机制进行转换后得到的,表示在处理器的物理地址空间中的位置。

分段和分页

分段机制通过将处理器的地址空间分割成较小的保护地址空间(称为),分别用于存储代码、数据和堆栈等模块,或者用于存储系统数据结构。每个程序或任务可以被分配一个独立的段集合,处理器通过强制各个段之间的边界来确保程序之间不相互干扰。分段机制还可以对段进行类型限定,限制可以在特定类型的段上执行的操作。

分页机制通过将每个段划分为页面,将页面存储在物理内存或磁盘上,从而实现一个“虚拟内存”环境。处理器根据页表将线性地址转换为物理地址,并在访问内存时执行所需的操作。当访问的页面当前不在物理内存中时,处理器会发生页面故障异常,操作系统或执行体从磁盘中将页面读入物理内存,并继续执行程序。

分段分页的组合可以配置成支持简单的单程序或单任务系统、多任务系统,或者支持使用共享内存的多处理器系统。

下图是分段和分页的示意图

image.png

2.2. 分段机制

Basic Flat Model

Basic Flat Model 的特点是系统中的操作系统应用程序可以访问一个连续的、非分段的地址空间。为了实现Basic Flat内存模型,至少需要创建两个段描述符,一个用于引用代码段,一个用于引用数据段。这两个段都映射到整个线性地址空间,具有相同的基地址值和段限制。通过将段限制设置为4GB,可以防止分段机制产生超出限制的内存引用异常。在Basic Flat模型中,ROM通常位于物理地址空间的顶部,而RAM位于地址空间底部

Protected Flat Model

Protected Flat Model 与Basic Flat Model 相似,只是段限制设置为仅包括实际存在物理内存的地址范围。任何尝试访问不存在内存的操作将生成一般保护异常(#GP)。该模型提供了对某些程序错误的最低硬件保护级别。可以增加更多复杂性来提供更多保护。

Multi-Segment Model

多段模型(Multi-Sgment Model)是一种基于硬件的机制,它为代码、数据结构和程序/任务提供保护。在这个模型中,每个程序或任务被分配到它自己的段描述符和段表。这些段可以是分配给它们的程序私有的,也可以在多个程序之间共享。硬件控制对系统上运行的程序的所有段和执行环境的访问访问检查用于防止引用段限制之外的地址和在某些段中执行不允许的操作。

image.png

2.3. 逻辑地址和线性地址的转换

段选择子(Segment Selectors)是16位的值,用于标识存储在全局描述符表(GDT)或局部描述符表(LDT)中的段描述子。

段寄存器(Segment Registers)是CPU中的特殊寄存器,用于存储段选择子的值。

加载段选择子时,CPU会通过以下步骤将逻辑地址转换为线性地址

  1. 使用段选择子中的偏移量,在GDT或LDT中定位段描述子,并将其读入CPU。(仅当加载新的段选择子到段寄存器时才需要执行此步骤。)
  2. 检查段描述子以验证访问权限和段的范围,确保段可访问且偏移量在段的限制范围内。

段描述子(Segment Descriptors)是存储在**全局描述符表(GDT)**或局部描述符表(LDT)中的数据结构,用于描述一个段的属性和基地址。段描述子的结构如下:

  • 基地址(Base Address):表示段的起始地址。
  • 段限制(Limit):表示段的大小。
  • 访问权限(Access Rights):确定对段的访问权限和特权级别。
  • 其他标志(Other Flags):包括标志位和系统描述子类型。
    通过对段选择子和段描述子的认识和操作,CPU能够实现逻辑地址到线性地址的转换。

为了将逻辑地址转换为线性地址,处理器执行以下步骤:

  1. 使用段选择子中的偏移量,在GDT或LDT中定位段描述符,并将其读入处理器(只有在将新的段选择子加载到段寄存器时才需要此步骤)。
  2. 检查段描述符以检查段的访问权限和范围,以确保段可访问并且偏移量在段的限制范围内。
  3. 段描述符中的基地址与偏移量相加,形成线性地址。如果不使用分页,处理器直接将线性地址映射到物理地址(即,线性地址通过处理器的地址总线输出)。如果线性地址空间进行分页,将使用第二级地址转换将线性地址转换为物理地址
将逻辑地址转化为线性地址示意图如下:

image.png

2.4. 描述符的分类

描述符是一种数据结构,它在全局描述符表(GDT)或本地描述符表(LDT)中提供有关段的信息。它包括网段的大小、位置、访问控制和状态等详细信息。

  1. 数据段描述符(Data segment Descriptor):数据段描述符定义了数据段的属性和位置信息,用于访问和操作存储数据的内存区域。

  2. 代码段描述符(Code segment Descriptor):代码段描述符定义了代码段的属性和位置信息,用于访问和执行存储在内存中的指令。

  3. 局部描述符表描述符(Local descriptor-table (LDT) segment descriptor):局部描述符表描述符用于定义局部描述符表的属性和位置信息。局部描述符表是用于存储局部的段描述符的表格。

  4. 任务状态段描述符(Task-state segment (TSS) descriptor):任务状态段描述符定义了任务状态段(TSS)的属性和位置信息。任务状态段是一个数据结构,存储了任务的上下文信息,如寄存器值、堆栈指针等。

  5. 调用门描述符(Call-gate descriptor):调用门描述符定义了调用门的属性和位置信息。调用门是一种特殊的指令,用于在不同的特权级之间进行远程过程调用。

  6. 中断门描述符(Interrupt-gate descriptor):中断门描述符定义了中断门的属性和位置信息。中断门用于处理中断请求,并跳转到相应的中断处理程序。

  7. 陷阱门描述符(Trap-gate descriptor):陷阱门描述符定义了陷阱门的属性和位置信息。陷阱门用于捕捉和处理陷阱(如软中断)。

  8. 任务门描述符(Task-gate descriptor):任务门描述符定义了任务门的属性和位置信息。任务门用于在不同的任务之间进行切换,并保存当前任务的上下文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值