《操作系统》之内存篇(二)-分段-分页

分段 基本概念在编写代码的时候,程序员认为它是由主程序加上一组方法,过程或者函数的集合。他还包括这种数据结构:对象,数组,堆栈,变量。每个模块或者数据元素通过名字来引用。而不关心具体的内存位置。分段就是支持这种用户视图的内存管理方法。逻辑地址空间是由一组段构成。每个段都有名称和长度,比如,代码段,数据段,堆栈,堆等等。地址指定了段名称和段内偏移。所以段一般是由两个量来进行表示:<段号, 偏移>通常,在编译用户程序的时候,编译器会自动生成:代码全局变量堆栈程序库分段的硬
摘要由CSDN通过智能技术生成

分段 基本概念

段图
在编写代码的时候,程序员认为它是由主程序加上一组方法,过程或者函数的集合。他还包括这种数据结构:对象,数组,堆栈,变量。每个模块或者数据元素通过名字来引用。而不关心具体的内存位置。
分段就是支持这种用户视图的内存管理方法。逻辑地址空间是由一组段构成。每个段都有名称和长度,比如,代码段,数据段,堆栈,堆等等。
地址指定了段名称和段内偏移。所以段一般是由两个量来进行表示:
<段号, 偏移>

通常,在编译用户程序的时候,编译器会自动生成:

  • 代码
  • 全局变量
  • 程序库

分段的硬件实现

虽然用户可以实现通过二维地址来引用程序内的对象,但是实际物理内存还是一维的字节数组。因此需要我们需要定义一个映射方法,把二维地址转换为一维地址。

这个地址是通过段表来实现的。段表的每个条目都有一个段基地址和段界限。段基地址包含该段在内存中的开始物理地址,而界限地址指定该段的长度。
段表
从图中,我们可以看到段表和每个段的分布情况。

再看看分段的硬件实现,每个逻辑地址都有两个部分来实现,段号s和偏移d。 当我们从CPU的指令中得到一个地址时,它有段号和偏移d,段号首先去段表中进行索引,获取到段基(base)地址,然后加上偏

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值