段页式存储管理方式详解

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 Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要设置昵称 发送消息与消息展示 提示用户不能发送空消息 后端接口 发送消息 DB = []@ro

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

LabVIEW FIFO详解

在LabVIEW的FPGA开发中,FIFO(先入先出队列)是常用的数据传输机制。通过配置FIFO的属性,工程师可以在FPGA和主机之间,或不同FPGA VIs之间进行高效的数据传输。根据具体需求,FIFO有多种类型与实现方式,包括目标范围内FIFO(Target-Scoped)、DMA FIFO以及点对点流(Peer-to-Peer)。 FIFO类型 **目标范围FIFO(Target-Sc