段页式存储管理方式详解

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

相关文章

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串