段页式存储管理方式详解

2023-10-19 19:20

本文主要是介绍段页式存储管理方式详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

段页式存储管理方式详解

  • 分段存储方式
      • 引入目的:
      • 基本原理
        • 分段
        • 段表
        • 地址变换机构
      • 信息保护
      • 信息共享
      • 分页与分段的主要区别:
  • 段页式存储管理方式
      • 引入原因:
      • 基本原理
      • 段表与页表
      • 地址变换机构

分段存储方式

引入目的:

满足用户在编程和使用.上的习惯和需求

方便编程:为满足用户作业的逻辑关系,将数据和指令分段存储,其地址由段名和段内偏移量共同组成
信息共享
信息保护(以信息的逻辑单位为基础)
动态增长:保证使用过程中对内存的动态需求
动态链接:运行时动态加载需要的目标程序段

在这里插入图片描述

基本原理

分段

分段地址中的逻辑地址为:| 段号 | 段内地址 |
每个段都是从0开始编址,并采用一段连续的地址空间,段长由相应的逻辑信息组的长度决定(各段段长不同)。每个段即包含了一部分地址空间,又标识了段与段之间的逻辑关系。

段表

分段存储管理系统为每个段分配一个连续的分区,进程的各个段可离散地装入内存的不同位置,用一张段映射表(段表)记录每段在内存的起始地址(基址)和段的长度。在配置了段表后,执行中的进程可通过逻辑地址中的段号来查询段表,找到段的对应内存区。
段表表项的结构为:| 段长 | 基址 |

地址变换机构

段表寄存器:存放段表基址和段表长度TL
地址变换过程:

a、逻辑地址中的段号s与TL比较,若s>TL,越界
中断;反之,根据段表基址和段号所指示的段表
项找到所需段在内存中的基址b、逻辑地址中的段内偏移d和上一步找到的段长
SL相比较,若d>SL,越界中断;反之,将d与
段基址相加得到数据物理地址

在这里插入图片描述
例:eg:设某程序中有5个段,段号分别为0-4,段表如下,求:

界限基址
010001400
14006300
24004300
311003200
410004700

1)段2字节53的物理地址?
2)段3字节852的物理地址?
3)段0字节1222的物理地址?
answer:

  1. 4300+53=4353
  2. 3200+852=4052
  3. 1222>1000,越界中断!

信息保护

分段有助于实现将段与对其对应的保护机制相关联。
现代OS中,指令不可自我修改,故指令段只能定义为只读或只执行,内存映射硬件会检查段表项中的保护位,以防止对内存的非法访问(对只读
段的写将代码段视为数据等)。
数据则放在特定数组中,当需要访问数据时会对数组下标进行检测,超界时会产生越界中断。

信息共享

在每个进程的段表中对多进程共享的可重入代码设置一个段表项,当需要使用这部分代码时,应保证在执行时不会修改它,每个进程的私有数据和局部变量必须使用独立的段保存且不提供共享。
可重入代码(纯代码) :允许多个进程同时访问的代码,且为保证每个进程所执行的代码完全相同,决不允许执行过程中修改代码。
分页系统信息共享:使用可重入代码时,各进程的部分逻辑页面将被映射到可重入代码使用的各帧中,但其私有数据和局部变量所使用的帧则各不相同,且所有这些页面和帧的对照关系需要存入页表(长度可能会极大)。
分段系统信息共享:使用可重入代码时,只需在段表中为其设置一个段表项,并将执行时用到的部分数据copy到局部数据区,用来支持对执行时不可避免的代码修改的支持即可。
在这里插入图片描述

分页与分段的主要区别:

➢段是信息的逻辑单位,它是根据用户的需要划分的,因此段对用户是可见的;页是信息的物理单位,是为了管理主存的方便而划分的,对用户是透明的。
➢页的大小固定不变,由系统决定。段的大小是不固定的,它由其完成的功能决定。
➢段式向用户提供的是二维地址空间,页式向用户提供的是一~维地址空间,其页号和页内偏移是机器硬件的功能。
➢由于段是信息的逻辑单位,因此便于存贮保护和信息的共享,页的保护和共享受到限制。

段页式存储管理方式

引入原因:

分页和分段管理方式各有其优缺点,分页系统能有效提高内存的利
用率,而分段则能更好地满足用户的需要,因此可以将两者结合成一种新
的存储管理方式系统称为“段页式系统”。

基本原理

结合分段和分贝思想,先将用户程序分成若干段并分别赋予段名,再将这些段分为若干页
地址结构:由段号、段内页号和页内地址三项共同构成地址

段号(S)段内页号(P)页内地址(W)

段表与页表

系统需要配置段表和页表。
在这里插入图片描述

地址变换机构

本系统中使用段表寄存器存放段表基址和段表长度TL
在这里插入图片描述
CPU提供的逻辑地址中的段号S首先和段表长度TL比较,若未越界则根据S和段表基址找到相应段表项中纪录的该段所在页表基址,接着使用段内页号P获得对应页面的页表项位置,从中找到帧号b,最后拼接上页内地址W得到
数据的物理地址。
该过程需要三次访问内存,为提高执行速度,可以增加一个快表,访问数据时利用段号和页号检索它,若可以命中,直接取出物理帧号;否则,进行上述三次内存访问过程获得数据。
在这里插入图片描述
例:设有一页式存储管理系统向用户提供的逻辑地址空间最大为16页,每页2048字节,内存共有8个物理帧,试问逻辑地址至少应为多少位?内存空间
有多大?

答:每页的2048字节需要11位二进制位标识页内位移部分地址;
逻辑空间最大为16页,页号地址需要4个二进制位,
故逻辑地址至少需要15位由于内存共有8个物理帧,
而在页式管理系统中的页面大小与帧等大,因此内存空间为16K

例:在一个采用段页式存储管理的系统中,页的大小为1KB。某个正在执行的作业情况如下:
(1)请给出将逻辑地址(2,3500)转换成物理地址的过程;
(2)计算出上述逻辑地址对应的物理地址的值。
在这里插入图片描述
( 1 )①逻辑地址中的段号 2 跟段表控制寄存器中的段表长 3 进行比较,由于 2<3 ,故段号没有越界;②根据段表控制寄存器中的段表起始地址加上段号 2 ,找到段表中对应于第 2 段的段表项,从而得到第 2 段的页表长度和页表起始地址;③根据段内偏移 3500 得到段内页号为 3 ,页内偏移为 428 ;④把段内页号 3 和段表项中的页表长度 5 进行比较,得知页号没越界;⑤页表起始地址加上页号得到对应的页表项,从而得到第 2 段的第 3 页的物理块号 30 ;⑥物理块号 30 和块内偏移 428 拼接成物理地址 31148 。

( 2 )逻辑地址 (2,3500) 对应的物理地址为十进制数 31148 ,十六进制 79AC 。

这篇关于段页式存储管理方式详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/241851

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.