基本分段存储管理方式

基本分段存储管理方式

如果说推动存储管理方式从固定分区到动态分区分配,进而又发展到分页存储管理方式的主要动力,是提高内存利用率,那么,引入分段存储管理方式的目的,则主要是为了满足用户( 程序员)在 编程和使用上多方面的要求,其中有些要求是其它几种存储管理方式所难以满足的。因此,这种存储管理方式已成为当今所有存储管理方式的基础。

编辑本段一、分段存储管理方式的引入

引入分段存储管理方式,主要是为了满足用户和程序员的下述一系列需要:
1) 方便编程
通常,用户把自己的作业按照逻辑关系划分为若干个段,每个段都是从0开始 编址,并有自己的名字和长度。因此,希望要访问的 逻辑地址是由段名(段号)和段内 偏移量(段内地址)决定的。例如,下述的两条指令便是使用段名和段内地址:
LOAD 1,[A] |〈D〉;
STORE 1,[B] |〈C〉;
其中,前一条指令的含义是将分段A中D单元内的值读入 寄存器1;后一条指令的含义是将寄存器1的内容存入B分段的C单元中。
2) 信息共享
在实现对程序和数据的共享时,是以信息的逻辑单位为基础的。比如,共享某个例程和函数。分页系统中的“页”只是存放信息的物理单位(块),并无完整的意义,不便于实现共享;然而段却是信息的逻辑单位。由此可知,为了实现段的共享,希望存储管理能与 用户程序分段的组织方式相适应。
3) 信息保护
信息保护同样是对信息的逻辑单位进行保护,因此,分段管理方式能更有效和方便地实现信息保护功能。
4) 动态增长
在实际应用中,往往有些段,特别是 数据段,在使用过程中会不断地增长,而事先又无法确切地知道数据段会增长到多大。前述的其它几种存储管理方式,都难以应付这种动态增长的情况,而分段存储管理方式却能较好地解决这一问题。
动态链接是指在作业运行之前,并不把几个 目标程序段链接起来。要运行时,先将主程序所对应的 目标程序装入内存并启动运行,当运行过程中又需要调用某段时,才将该段(目标程序)调入内存并进行链接。可见, 动态链接也要求以段作为管理的单位。

编辑本段二、分段系统的基本原理

1. 分段

在分段存储管理方式中,作业的 地址空间被划分为若干个段,每个段定义了一组逻辑信息。例如,有主程序段MAIN、 子程序段X、 数据段D及栈段S等,如图4-17所示。每个段都有自己的名字。为了实现简单起见,通常可用一个段号来代替段名,每个段都从0开始 编址,并采用一段连续的 地址空间。段的长度由相应的逻辑信息组的长度决定,因而各段长度不等。整个作业的 地址空间由于是分成多个段,因而是二维的,亦即,其 逻辑地址由段号(段名)和段内地址所组成。
分段地址中的地址具有如下结构:
在该地址结构中,允许一个作业最长有 64 K个段,每个段的最大长度为64 KB。 分段方式已得到许多 编译程序的支持, 编译程序能自动地根据 源程序的情况而产生若干个段。例如,Pascal编译程序可以为 全局变量、用于存储相应参数及返回地址的过程调用栈、每个过程或函数的代码部分、每个过程或函数的 局部变量等等,分别建立各自的段。类似地,Fortran 编译程序可以为公共块(Common block)建立单独的段,也可以为数组分配一个单独的段。装入程序将装入所有这些段,并为每个段赋予一个段号。

2.段表

在前面所介绍的动态分区分配方式中,系统为整个进程分配一个连续的内存空间。而在分段式存储管理系统中,则是为每个分段分配一个连续的分区,而进程中的各个段可以离散地移入内存中不同的分区中。为
利用段表实现地址映射

  利用段表实现地址映射

使程序能正常运行,亦即,能从 物理内存中找出每个逻辑段所对应的位置,应像 分页系统那样,在系统中为每个进程建立一张段映射表,简称“段表”。每个段在表中占有一个表项,其中记录了该段在内存中的起始地址(又称为“ 基址”)和段的长度,如右图所示。段表可以存放在一组 寄存器中,这样有利于提高 地址转换速度,但更常见的是将段表放在内存中。

3.地址变换机构

为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址和段表长度TL。在进行地址变换时,系统将逻辑地址中的段号与段表长度TL进行比较。若S>TL,表示段号太大,是访问越界,于是产生越界中断信号;若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存的起始地址,然后,再检查段内地址d是否超过该段的段长SL。若超过,即d>SL,同样发出越界中断信号;若未越界,则将该段的 基址d与段内地址相加,即可得到要访问的内存物理地址。
下图示出了分段系统的地址变换过程。 分页系统一样,当段表放在内存中时,每要访问一个数据,都须访问两次内存,从而极大地降低了计算机的速率。解决的方法也和 分页系统类似,再增设一个 联想存储器,用于保存最近常用的段表项。由于一般情况是段比页大,因而段表项的数目比 页表项的数目少,其所需的 联想存储器也相对较小,便可以显著地减少存取数据的时间,比起没有地址变换的常规存储器的存取速度来仅慢约10%~15%。

编辑本段三、信息共享

分段系统的一个突出优点,是易于实现段的共享,即允许若干个进程共享一个或多个分段,且对段的保护也十分简单易行。在 分页系统中,虽然也能实现程序和数据的共享,但远不如分段系统来得方便。我们通过一个例子来说明这个问题。例如,有一个 多用户系统,可同时接纳40个用户,他们都执行一个文本编辑程序(Text Editor)。如果文本编辑程序有160 KB的代码和另外40 KB的数据区,则总共需有 8 MB的内存空间来支持40个用户。如果160 KB的代码是可重入的(Reentrant),则无论是在 分页系统还是在分段系统中,该代码都能被共享,在内存中只需保留一份文本编辑程序的副本,此时所需的内存空间仅为1760 KB(40×40+160),而不是8000 KB。
假定每个页面的大小为4 KB,那么,160 KB的代码将占用40个页面,数据区占10个页面。为实现代码的共享,应在每个进程的 页表中都建立40个页表项,它们的物理块号都是21#~60#。在每个进程的 页表中,还须为自己的数据区建立页表项,它们的物理块号分别是61#~70#、71#~80#、81#~90#,…,等等。右图是 分页系统中共享editor的示意。
在分段系统中,实现共享则容易得多,只需在每个进程的段表中为文本编辑程序设置一个段表项。下图是分段系统中共享editor的示意图。
可重入代码(Reentrant Code)又称为“ 纯代码”(Pure Code),是一种允许多个进程同时访问的代码。为使各个进程所执行的代码完全相同,绝对不允许 可重入代码在执行中有任何改变。因此, 可重入代码是一种不允许任何进程对它进行修改的代码。但事实上,大多数代码在执行时都可能有些改变,例如,用于控制程序执行次数的 变量以及 指针信号量数组等。为此,在每个进程中,都必须配以局部数据区,把在执行中可能改变的部分拷贝到该数据区,这样,程序在执行时,只需对该数据区(属于该进程私有)中的内容进行修改,并不去改变共享的代码,这时的可共享代码即成为可重入码。

编辑本段四、分页和分段的主要区别

分页和分段系统有许多相似之处。比如,两者都采用离散分配方式,且都要通过 地址映射机构来实现地址变换。但在概念上两者完全不同,主要表现在下述三个方面。
(1) 页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要而不是用户的需要。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。
(2) 页的大小固定且由系统决定,由系统把 逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定,决定于用户所编写的程序,通常由 编译程序在对 源程序进行编译时,根据信息的性质来划分。
(3) 分页的作业 地址空间是一维的,即单一的 线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《操作系统原理》课程设计任务书 学院名称: 计算机学院 专业: 计科、软件工程 年级: 2006 一、设计题目 模拟请求段式存储管理 --FIFO 二、主要内容 本课程设计要求 用高级语言编写和调试模拟请求段式存储管理程序, 掌握请 求段式存储管理以及其缺段处理方法 。 三、 具体要求 1、编程组织对内存管理 a) 段大小为最大长度 64K ; b) 每个进程最多调入内存容量为 4 段 c) 内存总容量 128K d) 地址码长度 24 位 e) 内存管理采用全局分配策略 2 、 根据用户输入进程信息(进程名、段数,段名,段长),自动模拟调入程序到内 存,可同时调入多个进程; 3 、 显示当前各进程内存状态 4 、 物理内存管理:建议采用空闲块表方案 5 、 根据用户输入进程信息(进程名、长度),自动模拟调入程序到内存,可同时调 入多个进程; 6 、 显示当前各进程内存状态 7 、 选定进程后,根据用户输入的指令(如“ 1|500 : MOV AX , 2|1234 ”),自动进 行虚拟地址到物理地址的转换(如该指令中地址不在内存自动调入,如内存不足 则自动进行切换),并显示虚拟地址以及转换后的物理地址(如:“ 1|500—1579 , 2|1234--5679 ”) 8 、 调入采用请求调段方式,置换策略采用先进先出( FIFO )置换算法。 四、主要技术路线提示 (1)要求利用结构化或面向对象的方法完成系统的设计; (2)要求在设计的过程中,建立清晰的层次关系; (3)在系统的设计中,尽量采用面向对象的机制。 ========================================第2页======================================== 课 程 设 计 (4)开发环境:Windows XP 或Windows 2000 (5)编程语言建议采用C++,也可以采用其他语言。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值