【OSTEP】分段(Segmentation) | 地址分段 | 带分段的地址转换

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 【OSTEP】分段(Segmentation) | 地址分段 | 带分段的地址转换


💭 写在前面

本系列博客为复习操作系统导论的笔记,内容主要参考自:

  • Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau, Operating Systems: Three Easy PiecesA. Silberschatz, P. Galvin, and G. Gagne,
  • Operating System Concepts, 9th Edition, John Wiley & Sons, Inc., 2014, ISBN 978-1-118-09375-7.Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .
  • DISCOS

0x00 什么是分段(What is Segmentation)

"分段 —— 泛化的基址 / 界限"

  • 分段并不是一个新的概念,它甚至可以追溯到 20 世纪 60 年代初期。
  • 该想法很简单,在 MMU 中引入不止一个基址和界限寄存器对。
  • A process can have logically-different segments: Code (Data), Stack and Heap., which is just a contiguous portion of the address space.  一个段只是地址空间里的一个连续定长的区域,在典型的地址里有3个逻辑不通的段:代码、栈和堆。

每个分段可以:

  • be placed separately in physical memory.   被单独放置在物理内存中。
  • grow and shrink (i.e., each segment has variable size). 柔性(即每个段的大小是可变的)。
  • be independently protected (separate read/write/execute protection bits).    被独立保护(独立的读/写/执行保护位)。

Segmentation allows the OS to place each one of those segments(Code, Stack, and Heap) in different parts of physical memory, and thus avoid filling physical memory with unused virtual address space   分段允许操作系统将每一个段(代码、栈和堆)放在物理内存的不同部分,从而避免用未使用的虚拟地址空间填满物理内存。

分段的机制使得操作系统能将不同的段放到不同的物理内存区域,从而避免了虚地址空间中的未使用部分占用内存。

0x01 地址分段(Segmented Addressing)

现在的逻辑地址由段 # 和段内偏移量组成,进程是如何指定一个特定的段的?

  • 逻辑地址的高位用于选择段(segment #)。
  • 逻辑地址的低位用于选择段内的偏移。

MMU contains Segment Table (per process)

  • Each segment has own BASE and BOUNDS, and protection bits. 每个段有自己的BASE和BOUNDS,以及保护位。
  • Example: 14 bit logical address, 4 segments; how many bits are needed for segment and offset? How big is the segment?   例如:14位逻辑地址,4个段;段和偏移需要多少位?该段有多大?

0x02 带分段的地址转换(Address Translations with Segmentation)

// get top 2 bits of 14-bit VA
Segment = (VirtualAddress & SEG_MASK) >> SEG_SHIFT
// now get offset
Offset = VirtualAddress & OFFSET_MASK
if (Offset >= Bounds[Segment])
  RaiseException(PROTECTION_FAULT)
else
  PhysAddr = Base[Segment] + Offset
  Register = AccessMemory(PhysAddr)

SEG_MASK = 0x3000(11000000000000)

SEG_SHIFT = 12

OFFSET_MASK = 0xFFF (00111111111111)

优点:

  • Enables sparse allocation of address space.  启用地址空间的稀疏分配。
  • Stack and heap can grow independently.   栈和堆可以独立增长。 
  • Different protection for different segments.   对不同的段有不同的保护。  
  • Read-only status for code   代码的只读状态
  • Enables sharing of selected segments.    启用选定段的共享  
  • Supports dynamic relocation of each segment.   支持每个段的动态重定位

缺点:

Each segment must be allocated contiguously.   每个段必须是连续分配的。

May not have sufficient physical memory for large segments, resulting in external fragmentation.   可能没有足够的物理内存用于大的段,导致外部碎片化。

补充:段错误

段错误指的是在支持分段的机器上发生了非法的内存访问。有趣的是,即使在不支持分段的机器上这个术语依然保留。但如果你弄不清楚为什么代码老是出错,就没那么有趣了。

📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2022.
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau, Operating Systems: Three Easy Pieces

A. Silberschatz, P. Galvin, and G. Gagne,

Operating System Concepts, 9th Edition, John Wiley & Sons, Inc., 2014, ISBN 978-1-118-09375-7.

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
6月前
|
网络协议
地址重叠时,用户如何通过NAT访问对端IP网络?
地址重叠时,用户如何通过NAT访问对端IP网络?
|
存储 缓存 算法
【OSTEP】分页: 快速地址转换(TLB) | TLB命中处理 | ASID 与页共享 | TLB替换策略: LRU策略与随机策略 | Culler定律
【OSTEP】分页: 快速地址转换(TLB) | TLB命中处理 | ASID 与页共享 | TLB替换策略: LRU策略与随机策略 | Culler定律
244 0
|
6月前
|
运维 监控 网络协议
IPv6地址之间的转换技术:NAT66
【4月更文挑战第25天】
845 0
IPv6地址之间的转换技术:NAT66
|
6月前
|
运维 安全 网络架构
【专栏】NAT技术是连接私有网络与互联网的关键,缓解IPv4地址短缺,增强安全性和管理性
【4月更文挑战第28天】NAT技术是连接私有网络与互联网的关键,缓解IPv4地址短缺,增强安全性和管理性。本文阐述了五大NAT类型:全锥形NAT(安全低,利于P2P)、限制锥形NAT(增加安全性)、端口限制锥形NAT(更安全,可能影响协议)、对称NAT(高安全,可能导致兼容性问题)和动态NAT(公网IP有限时适用)。选择NAT类型需考虑安全性、通信模式、IP地址数量和设备兼容性,以确保网络高效、安全运行。
566 1
|
存储
逻辑地址和物理地址转换
逻辑地址和物理地址转换
|
Linux 定位技术 虚拟化
【OSTEP】多道程序和时分共享 | 虚拟地址空间 | 用户栈vs内核栈 | 进程结构: struct thread | 虚拟vs物理地址空间 | 地址转换方案
【OSTEP】多道程序和时分共享 | 虚拟地址空间 | 用户栈vs内核栈 | 进程结构: struct thread | 虚拟vs物理地址空间 | 地址转换方案
45 0
|
网络协议 网络安全 开发工具
VMware 虚拟机 - NAT模式下设置静态 IP 地址
VMware 虚拟机 - NAT模式下设置静态 IP 地址
1127 0
VMware 虚拟机 - NAT模式下设置静态 IP 地址
|
数据库 数据安全/隐私保护 索引
【操作系统】第四章:非连续内存分配(Part1:基于分页-分段的物理/逻辑地址转换)
【操作系统】第四章:非连续内存分配(Part1:基于分页-分段的物理/逻辑地址转换)
172 0
|
网络架构
三十、IPv4地址和网络地址转换NAT
三十、IPv4地址和网络地址转换NAT
三十、IPv4地址和网络地址转换NAT
|
Linux
linux中 设置网络模式NAT 设置固定静态ip地址
linux中 设置网络模式NAT 设置固定静态ip地址
252 0
linux中 设置网络模式NAT 设置固定静态ip地址