虚拟内存采用的是分页技术,也就是将地址空间划分成固定大小的页,每一页再与内存进行映射。

下图为一个编译器在编译过程中建立的多个表,有 4 个表是动态增长的,如果使用分页系统的一维地址空间,动态增长的特点会导致覆盖问题的出现。

分段的做法是把每个表分成段,一个段构成一个独立的地址空间。每个段的长度可以不同,并且可以动态增长。


分页和分段的主要区别

a)、页是信息的物理单位

分页是为实现离散分配方式,以消减内存的碎片,提高内存的利用率;

段则是信息的逻辑单位,它含有一组其意义相对完整的信息,分段的目的是为了能更好地满足用户的需要。

b)、页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分(偏移量),是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。

c)、分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;

分段的作业地址空间则是二维的,程序员在标识一个地址是,即需给出段名,又需给出段内地址。


引入分段存储管理方式的目的:满足程序员在编程和使用上多方面的要求。这种存储管理方式已经成为当今所有存储管理方式的基础。

1、分段存储管理方式的引入

主要满足用户和程序员以下需求:

1)、方便编程

用户把自己的作业按照逻辑管理划分为若干段,每个段都是从0开始编址,并有自己的名字和长度。因此,希望要访问的逻辑地址是由段名(段号)和段内偏移量(段内地址)决定的。

LOAD1,[A] | <D>;//将分段A中D单元内的值读入寄存器1

STORE1,[B] | <C>;//将寄存器1的内容存入B分段的C单元中

2)、信息共享

在实现对程序和数据的共享时,是以信息的逻辑单位为基础的。。比如共享某个例程和函数。分页系统中的页只是存放信息的物理单位(块),并无完整的意义,不便于实现共享;然而段却是信息的逻辑单位。由此可知,为了实现段的共享,希望存储管理能与用户程序分段的组织方式相适应。

3)、信息保护

一般来说一个段中不会既包含一个过程又包含一个堆栈,而是只会包含其中一个。正是因为每个段一种数据类型的对象,所以这个段就可以针对当前的数据类型进行特定的合适的保护。

4)、动态增长

有些段,会随着程序的使用不断增长。而事先又无法确切地知道数据段会增长到多大。

5)、动态链接

动态链接是指在作业运行前,并不把几个目标程序段链接起来。要运行时,先将主程序所对应的目标程序装入内存并启动运行,当运行过程中有需要调用某段时,才将该段调入内存并进行链接。可见动态链接也要求以段作为管理的单位

2、分段系统的基本原理

2.1、分段

在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。例如,有主程序段MAIN、子程序段X、数据段D及栈段S等。


在该地址结构中,允许一个作业最长有64K个段,每个段的最大长度为64KB。

分段方式已得到许多编译程序的支持,编译程序能自动地根据源程序的情况而产生若各个段。

2.1、段表

在动态分配方式中,系统为整个进程分配一个连续的内存空间。而在分段式存储管理系统中,则是为每个分段分配一个连续的分区,而进程中的各个段可以离散地移入内存不同的分区中。为了使程序能正常运行,也能从物理内存中找出每个逻辑段所对应的位置,应像分页那样,在系统中为每个进程建立一段映射表,简称“段表”。每个段在表中占有一个表项。其中记录了该段在内存中的起始地址(基址)和段的长度。段表可以存放在一组寄存器中,以提高访问速度,但更常见的是将段表放在内存中。

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


2.3、地址变换机构

为了实现进程逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表起始地址和段表长度TL。在进行地址变换时,系统将逻辑地址中的段号S与段表长度TL进行比较。若S>TL,表示段号太大。访问越界,于是产生越界中断信号;若未越界,则根据段表的起始地址和该段的段号+段内地址从而到的要访问的内存物理地址。


与分页系统类似,当段表存放在内存中,每要访问一个数据,都需要访问两次内存,类似的,再增设一个联想寄存器,用于保存最近常用的段表项。

3、信息共享

在分段系统的允许若干个进程共享一个或多个分段,容易实现对段的保存和共享。

可重入代码又称为“纯代码”是一种允许多个进程同时访问的代码。为使各个进程所执行的代码完全相同,绝对不允许可重入代码在执行中有任何的改变。在每个进程中,都必须配以局部数据区,把在执行中可能改变的部分拷贝到该数据区,这样程序在执行时,只需对数据区中的内容进行修改,并不去改变共享的代码,这时的可共享代码级成为可重入码。

4、段页式存储管理方式

结合分页和分段的优点,分页系统很好解决内存的外碎片问题,分段系统有便于实现、分段可共享、易于保护、可动态链接等优点。结合这两种方式形成新系统称为“段页式系统”。

4.1、基本原理

先分段,在段内进行分页,为每一个段赋予一个段名。以下展示出了一个作业地址空间的结构。该作业有三个段,页面大小4KB。在段页式系统中,其地址结构由段号、段内页号及页内地址三部分所组成。

4.2、地址变换过程

为了方便段页式系统中地址变换的实现,需配置一个段表寄存器,其中存放段表起始地址和段表长TL。比较段号与TL是否越界,从段表寄存器中获取段表始址找到段表,根据段表内的页表始址找到对应的页表,在根据页表的存储块找到内存中的物理块,从而获取物理地址。


段页式系统中,为了获得一条指令或数据,须三次访问内存:

段表--->页表--->物理内存

① 访问内存中的段表,从中取得页表始址

② 访问内存中的页表,从中取出该页所在的物理块号,并与页内地址形成物理地址

③ 访问真正从第二次访问所得的地址中,取出指令或者数据

多次访问内存,执行速度降低,因此在地址变换机构中增设一个高速缓冲寄存器。每次访问它时,都须同时利用段号和页号去检索高速缓存,若找到匹配的表项,便可以从中得到相应页的物理块号,用来与页内地址一起形成物理地址;若未找到匹配表项,则仍需要再三次访问内存(和页面管理的TLB的本质是一样的,在分页式页面管理方式中,需要进行两次内存访问。如果TLB则只需一次)

操作系统:基本分段存储管理方式相关推荐

  1. 操作系统基本分段存储管理方式

    1.分段存储管理方式的引入 ---- 引入分段存储管理方式,主要是为了满足用户和程序员的下述一系列需要: 1)方便编程 通常,用户把自己的作业按照逻辑关系划分为若干个段,每个段都是从0开始编址,并有自 ...

  2. 【操作系统】分段存储管理方式

    分段存储管理方式的引入 分段存储管理方式的引入是为了满足用户的要求. 方便编程:通常一个作业是由多个程序段和数据段组成的,一般情况下,用户希望按逻辑关系对作业分段,并能根据名字来访问程序段和数据段. ...

  3. 操作系统基本分页存储管理方式

    操作系统基本分页存储管理方式 连续分配内存方式会形成许多"碎片",通过紧凑的方式将碎片拼接成一块大的空间,但是拼接过程系统开销太大.如果允许将一个进程直接分散地装入到许多不相邻的分 ...

  4. 基本分段存储管理方式详解

    4.4 基本分段存储管理方式 一.分段存储管理方式的引入 二.分段系统的基本原理 三.信息共享 四.段页式存储管理方式 一.分段存储管理方式的引入 分页存储管理方式存在的问题: 段间离散,段内连续! ...

  5. 《操作系统》——分页存储管理方式逻辑地址到物理地址的转换

    一.连续分配方式缺点 连续分配方式的主要缺点是会形成许多碎片,尽管我们可以通过紧凑的方法将碎片拼接成可用的大块空间,但这样须付出很大的代价. 二.离散分配方式 离散分配方式思想:将进程直接分散地装入到 ...

  6. 分页和分段存储管理方式例题

    分页存储管理 1. 有一系统采用页式存储管理,有一作业大小是8KB,页大小为2KB,依次装入内存的第7.9.A.5块,试将虚地址0AFEH转换成内存地址.如果虚地址为3412D呢? (1)虚地址为0A ...

  7. 操作系统连续分配存储管理方式

    连续分配方式,是指为一个用户程序分配一个连续的内存空间. 连续分配方式的分类: l单一连续分配 l固定分区分配 l动态分区分配 l动态重定位分区分配 下面来看这几种分配方式 单一连续分配 最简单的一种 ...

  8. 操作系统------虚拟存储器 请求分页存储管理方式

    请求分页系统是建立在基本分页的基础上的,为了能支持虚拟存储器功能而增加了请求调页功能和页面置换功能. 相应地,每次调入和换出的基本单位都是长度固定的页面,这使得请求分页系统在实现上要比请求分段系统简单 ...

  9. 三十三、基本分段存储管理方式

    一.知识总览 二.分段 三.地址变换 四.分段.分页管理的对比 分段比分页更容易实现信息的共享和保护 不能被修改的代码成为纯代码或可重入代码(不属于临界资源),这样的代码是可以共享的.可修改的代码是不 ...

最新文章

  1. asp.net 的性能计数器
  2. 《OpenCV 4开发详解》图像的读取与显示
  3. SPI、UART、I2C三种串行总线简介
  4. 从已有安装包(vendor)恢复 composer.json
  5. p话少说,放码过来?
  6. java显示长度和第一个字符_从Java字符串中以长度1的字符串返回的第一个字母的最佳方法是什么?...
  7. javaweb 导出文件名乱码的问题解决方案
  8. TCP/ITX协议面试总结
  9. 学习C/C++:伴随我成长的编程书!
  10. python点击网页按钮 没有id_button没有id,没有onclick事件。点击却有提交的功能,如何实现的?...
  11. 四.开发记录之ubuntu系统安装ROS和开发环境
  12. c# 用正则表达式获取开始和结束字符串中间的值
  13. Host localhost is not allowed to connect to mysql server解决方法
  14. 用VScode写html文件以及调用浏览器运行
  15. ppt背景图片php,求ppt背景,ppt背景图片,漂亮一些的。
  16. QQ网页微信二维码登陆原理分析
  17. 相差天数时分秒_PHP 小方法之 计算两个时间戳之间相差的日时分秒
  18. 基于matlab的手写体数字识别系统,基于matlab的手写体数字识别系统研究
  19. #AR游戏--音之国度#初次简单的测试
  20. 【问链财经-区块链基础知识系列】 第四十五课 一文读懂保理业务的操作流程

热门文章

  1. TabStrip within ASP.NET 2.0 in C# with Design Time Support
  2. 路由器OSPF协议配置命令一
  3. 在Asp.net页面中实现数据饼图
  4. Intel GPU及NVIDIA GPU对视频编解码支持情况
  5. 三维重建学习(2):相机标定基础
  6. linux卸载数据库后还在吗,oracle停止数据库后linux完全卸载oracle的详细步骤
  7. pythonunicode转为字符串_python中将 \\uxxxx转换为 Unicode字符串
  8. linux 关闭密码复杂化,Linux系统设置复杂密码策略方法
  9. java linux so
  10. 模式识别机器学习术语