• 【操作系统】段式存储中 逻辑地址转物理地址详细分析


    前言

    此题在考研408或者软考中 都很常见

    1. 基本知识

    段式存储(Segmented Memory) 是一种计算机操作系统中的存储管理方式,它将物理内存划分为不同的段(segments),每个段具有不同的大小和属性。每个段可以用来存储不同类型的数据或程序,这种方式有助于提高内存的管理和保护。

    下面是段式存储的一些关键概念和特点:

    • 段(Segment):物理内存被划分为不同的段,每个段有唯一的标识符(段名或段号),并且可以具有不同的大小。每个段通常用于存储不同类型的数据或程序。

    • 段描述符(Segment Descriptor):每个段都有一个相应的段描述符,这个描述符包含了有关段的信息,如段的起始地址、长度、访问权限等。操作系统使用这些描述符来管理和控制段的访问。

    • 段选择子(Segment Selector):在实际的内存访问中,程序使用段选择子来标识要访问的段。段选择子包括段号和偏移量,用于计算访问物理内存中的具体位置。

    • 段保护(Segment Protection):每个段可以具有不同的访问权限,例如读取、写入、执行等。这有助于操作系统实施存储保护,以防止程序访问未授权的内存区域。

    概念优点缺点
    段式存储1.更灵活的内存管理:允许不同大小和类型的段,有助于更好地适应不同的应用程序需求。
    2.存储保护:可以实现不同级别的内存保护,以增加系统的稳定性和安全性。
    3.更容易的共享和分离:不同程序或模块可以拥有自己的段,从而更容易进行内存共享或分离。
    1.内存碎片:由于不同大小的段,可能会导致内存碎片化,降低内存利用率。
    2.复杂性:管理多个段和描述符增加了内核的复杂性。

    段式存储通常与其他内存管理技术,如分页式存储结合使用,以更好地满足不同应用的需求。这种混合内存管理方式被称为分段分页式内存管理,它克服了段式内存管理的一些限制,同时提供了更好的内存管理和保护。

    具体操作流程

    当程序需要访问内存中的数据时,它首先会提供一个段选择子,这个选择子用于标识要访问的段。然后,操作系统会使用这个段选择子来查找段表,找到对应的段描述符。从段描述符中可以获取以下信息:

    • 段的起始地址:这是段在物理内存中的起始位置。程序使用这个地址加上段内的偏移量来计算要访问的内存位置。

    • 段的长度:这指定了段的大小。程序必须确保它的内存访问不会超出这个长度范围。

    • 访问权限:段描述符包括了有关段的访问权限信息,如读取、写入、执行等。程序在访问内存时必须符合这些权限,否则访问将被拒绝。

    至于访问内存的次数,这取决于程序的具体操作。在段式存储中,程序需要执行以下操作:

    1. 通过段选择子查找段描述符,这通常需要一次内存访问。
    2. 从段描述符中获取段的起始地址,长度和访问权限,这也需要一次内存访问。
    3. 使用段起始地址和偏移量来计算要访问的内存位置。
    4. 执行实际的内存读取或写入操作,这可能需要额外的内存访问。

    所以,通常在段式存储中,访问内存需要至少两次内存访问(一次用于获取段描述符,一次用于实际的数据访问)。然而,这只是一个一般性的概念,实际情况可能因操作系统和硬件架构的细节而有所不同。

    2. 地址转换

    2.1 概念

    逻辑地址到物理地址的转换是操作系统内存管理的核心任务。在段式存储和分页式存储这两种不同的内存管理方案中,逻辑地址转换物理地址的基本流程和注意事项略有不同。

    一、分段式存储的逻辑地址转换:
    基本流程:

    • 程序中的指令和数据通常使用逻辑地址进行访问。逻辑地址由两个部分组成:段选择子和偏移量。
    • 首先,通过段选择子查找段表,找到相应的段描述符。
    • 从段描述符中获取段的起始地址和长度,以及访问权限。
    • 将逻辑地址的偏移量与段的起始地址相加,得到物理地址。

    注意事项:

    • 检查访问权限:在计算物理地址之前,操作系统需要验证访问权限,确保访问不会越界或违反权限。如果访问权限不满足要求,将引发异常。
    • 处理段不存在的情况:如果段不存在(即段选择子无效),则会引发段不存在的异常。
    • 处理页故障:在某些分段分页式内存管理系统中,物理地址可能需要进一步转换,以访问页表。如果访问的页不在内存中,会引发页故障,需要进行页面置换等操作。

    二、分页式存储的逻辑地址转换:
    基本流程:

    • 程序中的指令和数据使用逻辑地址进行访问,逻辑地址由两个部分组成:页号和页内偏移量。
    • 通过页号查找页表,获取对应页的物理页框号。
    • 将物理页框号与页内偏移量组合,得到物理地址。

    注意事项:

    • 页表管理:操作系统需要维护页表,以跟踪逻辑页号到物理页框号的映射关系。这涉及到页表的创建、维护、清除等操作。
    • 页故障:如果要访问的页不在内存中,将引发页故障,需要执行页面置换或从磁盘加载页面等操作。
    • 页大小问题:页的大小对内存管理和性能有重要影响。较小的页可以减少内部碎片,但可能导致更多的页表项;较大的页可能导致更多的外部碎片,但减少页表项。页大小的选择需要仔细权衡。

    不管是分段式存储还是分页式存储,逻辑地址到物理地址的转换是操作系统核心功能之一。这个过程需要确保内存访问的合法性、提供隔离性、确保数据完整性,同时也需要优化性能以减少地址转换的开销。

    2.2 例题

    假设系统采用段式存储管理方法,进程P的段表如下所示:

    段号基地址段长
    01100800
    1331050
    25000200
    34100580
    42000100

    以下逻辑地址不能转换为物理地址的是:
    A. (0,790)和(2,88)
    B.(1,30)和(3,290)
    C.(2,88)和(4,98)
    D. (0,810)和(4,120)


    解析:

    给定段地址(X,Y),X为段号,Y为段内地址

    根据X段号,查询段长,

    1. 如果大于段长,则越界;
    2. 如果小于段长,则物理地址 = 基地址 + 段内地址
  • 相关阅读:
    研发流程不只是一个流程
    动手学深度学习7.2 使用块的网络(VGG)-笔记&练习(PyTorch)
    ABC129F题解
    Postman 发包工具详解
    java计算机毕业设计网络精品课程网站(附源码、数据库)
    DL/ML/RL/TL/FL机器学习框架总结
    Redis持久化、主从与哨兵架构详解
    智能化嵌入式设备设计:人工智能与物联网的融合创新
    【Linux】编写COM口和USB口的规则文件(.rules)
    HTTPS双向认证和如何生成证书
  • 原文地址:https://blog.csdn.net/weixin_47872288/article/details/133846519