前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3.1.4.2 基本分段存储方式

3.1.4.2 基本分段存储方式

作者头像
week
发布2018-08-27 10:16:03
6590
发布2018-08-27 10:16:03
举报
文章被收录于专栏:用户画像用户画像

分页管理方式是从计算机的角度考虑设计的,以提高内存的利用率,提高计算机的性能,提升计算机的性能,且分页通过硬件机制实现 ,对用户完全透明;

而分段管理方式的提出则是考虑用户和程序员,以满足方便编程、信息保护和共享、动态增长及动态链接等多方面的需要。

1)分段。段式管理方式是按照用户进程中的自然段划分逻辑空间。例如,用户进程由主程序、两个子程序、栈和一段数据组成,于是可以把这个用户进程划分为5个段,每段从0开始编址,并分配一段连续的地址空间(段内要求连续,段间不要求连续,因此整个作业的地址空间是二维的)。其逻辑地址由段号S与段内偏移量W两部分组成。

如下图,段号为16位,段内偏移量为16位,则一个作业最多可有2^16个段,最大段长为64KB。

31……16

15……0

段号S

段内偏移量W

在页式系统中,逻辑地址的页号和偏移量对用户是透明的,但在段式系统中,段号和段内偏移量必须由用户显示提供,在高级程序设计语言中,这个工作由编译程序完成。

2)段表。每个进程都有一张逻辑空间与内存空间映射的段表,其中每一个段标项对应进程的一个段,段表项记录该段在内存中的起始地址和段的长度。段表的内容如图所示。

段号

段长

本段在内存的起始地址

  在配置了段表后,执行中的进程可通过查找段表,找到每个段所对应的内存区。可见,段表用于实现从逻辑段到物理内存区的映射。

3)地址变换机构。分段系统的变换过程如图所示。

为了实现进程从逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放了段表寄存器,用于存放段表始址F和段表长度M,其从逻辑地址A到物理地址E之间的地址变换过程如下: ①从逻辑地址A中取出前几位为段号S,后几位为段内偏移量W。

②比较段号S和段表长度M,若S>=M,则产生越界中断,否则继续执行。

③段表中断号S对应的段表项地址=段表起始地址F+段号S* 段表项长度,取出该段表项的前几位得到段长C。若段内偏移量>=C,则产生越界中断,否则继续执行。

④取出段表项中该段的起始地址b,计算E=b+w,用得到的物理地址E去访问内存。

4)段的共享与保护

在分段系统中,段的共享是通过两个作业的段表中相应表项指向被共享的段的同一物理副本来实现的。当一个作业正从共享段中读取数据时,必须防止另一个作业修改此共享段中的数据。不能修改的代码称为纯代码或可重入代码(它不属于临界资源,如JAR包),这样的代码和不能修改的数据是可以共享的,而可修改的代码和数据则不能共享。

与分页管理类似,分段管理的保护方法主要有两种:一种是存取控制保护,另一种是地址越界保存。地址越界保护是利用段表寄存器中的段表长度与逻辑地址中的段号比较,若段号大于段表长度则产生越界中断; 再利用段表项中的段长和逻辑地址中的段内位移进行比较,若段内位移大于段长,也会产生越界中断。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年12月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档