分段存储

简介: 分段存储

分段存储(Segmentation)是另一种内存管理技术,它将进程的逻辑地址空间划分为若干个具有逻辑意义的段(Segment)。每个段代表程序中的一个相对独立的部分,如代码段、数据段、堆段、栈段等。与分页存储相比,分段存储更侧重于根据程序的逻辑结构来组织内存,而不是基于固定的页面大小。以下是分段存储的主要特点、工作原理及其优缺点:

主要特点:

  1. 逻辑地址结构
  • 分段存储的逻辑地址由段号(Segment Number, SN)和段内偏移(Offset)组成。段号标识进程逻辑空间中的某个段,段内偏移则指明在该段内的具体位置。
  1. 段表
  • 系统为每个进程维护一个段表(Segment Table),其中每个条目(Segment Table Entry, STE)记录了一个段的相关信息,如基址(Base Address)、界限(Limit)、权限位等。基址指示该段在物理内存中的起始地址,界限定义了段的最大长度。
  1. 硬件支持
  • 类似于分页存储,硬件(MMU)负责逻辑地址到物理地址的转换。当CPU发出一个逻辑地址访问请求时,MMU首先提取出段号和段内偏移,然后查找段表获取对应STE。如果访问在段的合法范围内(即段内偏移小于界限),则将基址与段内偏移拼接成物理地址;否则触发段错误(Segmentation Fault),由操作系统处理。
  1. 段的动态性与可变长度
  • 分段存储允许段的长度根据程序的实际需求动态变化,不同的段可以有不同的长度。这与分页存储中固定大小的页面形成对比。
  1. 内存保护与共享
  • 通过段表中的权限位可以实现对每个段的访问权限控制。此外,多个进程可以共享同一段的物理内存,只需在各自的段表中指向相同的物理地址范围。

工作原理:

  • 进程创建与加载
  • 操作系统在创建或加载一个进程时,根据其程序结构生成段表,为每个段分配合适的内存,并填写相应的STE。某些段(如只读代码段)可能已存在于共享内存区域。
  • 地址转换
  • 进程执行过程中,CPU生成逻辑地址。MMU截获访问请求,通过查段表将逻辑地址转换为物理地址。若访问在段的有效范围内,则直接访问;否则触发段错误。
  • 段错误处理
  • 若发生段错误,操作系统检查是否因访问越界、权限错误或段不存在导致。对于合法访问请求,调整段表或重新分配内存;对于非法访问,则终止相应进程。
  • 内存分配与回收
  • 分段存储允许动态分配和回收内存。当程序动态申请或释放内存(如堆操作)时,操作系统相应地调整相关段的大小和基址,并更新段表。
  • 段共享
  • 多个进程可以通过在各自的段表中映射到相同的物理内存区域来实现段共享。操作系统负责管理共享段的访问权限和同步问题。

优缺点对比:

优点:

  • 符合程序逻辑:分段存储与程序的逻辑结构紧密关联,有利于模块化编程和数据保护。
  • 动态内存分配:段的长度可以根据需要动态改变,适应程序运行时内存需求的变化。
  • 便于内存共享:由于段具有明确的逻辑意义,多个进程可以方便地共享特定的段(如共享库)。
  • 内存保护:通过对每个段设置不同的访问权限,可以更好地实现内存保护和数据隔离。

缺点:

  • 外部碎片:由于段的长度可变,可能导致内存中出现无法利用的小块空闲空间(外部碎片)。
  • 段表管理复杂:与页表相比,段表可能需要更复杂的管理机制,特别是在处理动态增长或收缩的段时。
  • 段间转移开销:跨段的指令或数据访问可能需要多次段表查找,增加了地址转换的开销。现代系统通过使用多级段表、段表缓存(如段表寄存器)等方式来缓解这一问题。
  • 段边界对齐:由于段的长度不固定,可能需要进行复杂的边界对齐处理以确保段的有效使用。

总结来说,分段存储是一种根据程序逻辑结构划分内存的内存管理技术,它强调段的逻辑意义、动态性以及对程序模块化的支持。虽然在内存碎片、段表管理等方面存在挑战,但通过合理的系统设计和优化,分段存储能够提供良好的程序结构适应性、动态内存管理和内存保护功能。在某些系统中,分段存储可能与分页存储结合使用,形成段页式存储管理方式,兼顾两者的优点。

相关文章
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
431 1
|
前端开发 容器
彻底理解粘性定位 - position: sticky
彻底理解粘性定位 - position: sticky
|
7月前
|
数据可视化 JavaScript Java
2K star!三分钟搭建企业级后台系统,这款开源Java框架绝了!
"LikeAdmin Java是基于Spring Boot + Mybatis Plus + Vue 3的快速开发平台,内置RBAC权限管理、工作流引擎、数据可视化、三方登录等核心模块,助力开发者快速构建企业级中后台管理系统"
599 19
|
机器学习/深度学习 运维 监控
有人想让我讲讲应用性能管理(APM)工具
有人想让我讲讲应用性能管理(APM)工具
811 2
|
存储
软件设计师软考题目解析17 --每日五题
这篇文章提供了软件设计师软考的每日五题解析,包括页面变换、段页式存储管理、可变式分区分配、虚拟页式存储管理和I/O接口编址等计算机系统相关题目。
360 0
|
消息中间件 资源调度 安全
操作系统----临界区,临界资源,互斥量,互斥对象
操作系统----临界区,临界资源,互斥量,互斥对象
510 2
|
数据采集 开发工具 Android开发
Android平台如何实现屏幕数据采集并推送至RTMP服务器
随着无纸化、智慧教室等场景的普及,好多企业或者开发者开始寻求更高效稳定低延迟的RTMP同屏方案,本文以大牛直播SDK(Github)的同屏demo(对应工程:SmartServicePublisherV2)为例,介绍下如何采集编码推送RTMP数据到流媒体服务器。
281 0
|
存储 算法 Linux
Gzip的压缩级别
【4月更文挑战第29天】压缩级别
1063 1
|
消息中间件 Linux 安全