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

目录

  • 前言
  • [1. 基本知识](#1. 基本知识)
  • [2. 地址转换](#2. 地址转换)
    • [2.1 概念](#2.1 概念)
    • [2.2 例题](#2.2 例题)

前言

此题在考研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的段表如下所示:

段号 基地址 段长
0 1100 800
1 3310 50
2 5000 200
3 4100 580
4 2000 100

以下逻辑地址不能转换为物理地址的是:

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. 如果小于段长,则物理地址 = 基地址 + 段内地址
相关推荐
WZF-Sang13 小时前
Linux—进程学习-01
linux·服务器·数据库·学习·操作系统·vim·进程
Goboy1 天前
0帧起步:3分钟打造个人博客,让技术成长与职业发展齐头并进
程序员·开源·操作系统
结衣结衣.1 天前
【Linux】Linux管道揭秘:匿名管道如何连接进程世界
linux·运维·c语言·数据库·操作系统
OpenAnolis小助手2 天前
龙蜥副理事长张东:加速推进 AI+OS 深度融合,打造最 AI 的服务器操作系统
ai·开源·操作系统·龙蜥社区·服务器操作系统·anolis os
小蜗的房子3 天前
SQL Server 2022安装要求(硬件、软件、操作系统等)
运维·windows·sql·学习·microsoft·sqlserver·操作系统
邂逅岁月4 天前
【多线程奇妙屋】 Java 的 Thread类必会小技巧,教你如何用多种方式快速创建线程,学并发编程必备(实践篇)
java·开发语言·操作系统·线程·进程·并发编程·javaee
CXDNW5 天前
【系统面试篇】进程和线程类(1)(笔记)——区别、通讯方式、同步、互斥、死锁
笔记·操作系统·线程·进程·互斥·死锁
Anemone_6 天前
MIT 6.S081 Lab3
操作系统
掘了7 天前
持久化内存 | Persistent Memory
c++·架构·操作系统
结衣结衣.7 天前
【Linux】掌握库的艺术:我的动静态库封装之旅
linux·运维·服务器·c语言·操作系统·