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

news/2024/11/24 16:35:20/

目录

  • 前言
  • 1. 基本知识
  • 2. 地址转换
    • 2.1 概念
    • 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的段表如下所示:

段号基地址段长
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. 如果小于段长,则物理地址 = 基地址 + 段内地址

http://www.ppmy.cn/news/1155436.html

相关文章

10.本项目的简单介绍及所用工具

本项目的简单介绍及所用工具 本项目的层次架构适合初学者或者有一些基础的同学,项目整体简单明了,有着非常严谨的逻辑思维,并且在前面文章中也讲了一些项目中所需要的软件安装配置以及一些前置的在本项目中所需要的java基础知识。 项目名称 …

【力扣1876】长度为三且各字符不同的子字符串

👑专栏内容:力扣刷题⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、题目描述二、题目分析 一、题目描述 题目链接:长度为三且各字符不同的子字符串 如果一个字符串不含有任何…

我测试用的mark down教程

Markdown 教程 欢迎使用 Markdown 你好,Markdown是一种类似 Word 的排版工具,你需要仔细阅读这篇文章,了解一下 Markdown 基础知识。 Markdown 功能和列表演示 Markdown 有以下功能,帮助你用它写博客: 数学公式代码高亮导航功能等等Markdown 的优点: 间接高效大厂支持…

spring Cloud笔记--服务治理Eureka

服务治理:Eureka 服务治理 主要用来实现各个微服务实例的自动化注册与发现 服务注册: 服务治理框架中,通常会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号,版本号&#x…

CSS3 新增属性-边框圆角-文字阴影-盒子阴影

边框圆角 CSS 边框圆角可以通过 border-radius 属性来实现。该属性用于设置元素的圆角大小,支持四个值分别表示上左、上右、下右和下左四个角的圆角半径大小,也可以使用两个值分别表示上下和左右两个方向的圆角大小,甚至可以只使用一个值来…

spring cloud笔记--微服务基础

微服务基础 单体系统初期可以非常方便的开发和使用,但随着系统的发展,维护成本会变得越来越大,且难以控制。 微服务主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通…

Ubuntu下怎么配置vsftpd

2023年10月12日,周四中午 目录 首先要添加一个系统用户然后设置这个系统用户的密码给新创建的系统用户创建主目录启动vsftpd服务查看vsftpd服务的状态打开外界访问vsftpd服务所需的端口获取服务器的IP地址大功告成 首先要添加一个系统用户 useradd 用户名然后设置…

一些常见的必须会的谭浩强基本代码大全也是常考的应试是没问题的

//1. 1£¡+2£¡+3£¡+...20! /* #include <stdio.h> int main() {int i;long sum=0,k=1;for(i=1;i<=20;i++){k*=i;sum+=k;}printf("%d",sum); } *///方法2 /* #include <stdio.h> int main() {int i,j;long sum=0,k;for(i…