OS_内存管理@非连续方式@段式和段页式

news2024/11/25 20:20:25

文章目录

  • OS_内存管理@非连续方式@段式和段页式
    • 内存管理方式的发展
    • 基本分段存储
      • 逻辑结构图
      • 逻辑地址结构划分
      • 段表
      • 地址变换机构
      • 段表寄存器内容结构
      • 段和段表项的记号
      • 地址变换机构
      • 变换过程
      • 段的共享与保护
    • 段页式存储
      • 逻辑地址结构
      • 实现思路:段表和页表的变体🎈
        • 逻辑结构图
        • sp-段表
        • sp-页表
        • sp段表寄存器
      • 相关寄存器的作用🎈
      • 地址变换机构
      • 变换过程

OS_内存管理@非连续方式@段式和段页式

内存管理方式的发展

  • 当OS由单道向多道发展时,存储管理方式便由单一连续 分配发展为固定分区分配。
  • 为了能更好地适应不同大小的用户程序要求,存储管理方式又从固定分区分配,发展到动态分区分配。
  • 为了能更好地提高内存的利用率,进而又从连续分配方式发展到离散分配方式:分页存储管理方式
  • 管理分页管理方式是从计算机的角度考虑设计的,目的是提高内存的利用率

基本分段存储

  • Memory segmentation

    • it is an operating system memory management technique of division of a computer’s primary memory into segments or sections.
    • In a computer system using segmentation, a reference to a memory location includes a value that identifies a segment and an offset (memory location) within that segment.
    • Segments or sections are also used in object files of compiled programs when they are linked together into a program image and when the image is loaded into memory.
  • 引入分段存储管理方式的目的,则主要是为了满足用户(程序员)在编程和使用上多方面的要求,其中有些要求是其它几种存储管理方式所难以满足的。

  • 因此,这种存储管理方式已成为当今所有存储管理方式的基础,许多高级语言和C语言的编译程序也都支持分段存储管理方式

  • 分页通过硬件机制实现,对用户完全透明。

  • 分段管理方式的提出则考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长及动态链接等多方面的需要。

    • 分段段式管理方式按照用户进程中的自然段划分逻辑空间。
    • 例如
      • 某个用户进程由以下几个段组成
        • 主程序段、
        • 两个子程序段、
        • 栈段
        • 数据段
      • 每段从0开始编址,并分配一段连续的地址空间
      • 段内要求连续,段间不要求连续,因此整个作业的地址空间是二维

逻辑结构图

在这里插入图片描述

逻辑地址结构划分

  • 由段号S与段内偏移量W两部分组成

  • 段号S段内偏移量W
  • 两者都必须由用户显式提供,(或者编译器来完成)

段表

  • 记为ST:segment table🎈

  • 类似于页表的作用,记录了逻辑空间与内存地址的映射关系

    • 从逻辑段到物理内存区的映射
  • 每个段表项对应进程的一段

  • 段表项记录该段(段号S)在内存中的长度M始址b

    • 段长C本段在主存中的始址(基址)b
    • 记段表ST中,段号S对应的那一条段表项(记录)为 S T . S ST.S ST.S

      • ST,ST.S都视为可调用对象
      • S T . S . b ST.S.b ST.S.b则表示段S在主存中的物理地址

地址变换机构

  • 为了实现进程的逻辑地址到物理地址的变换功能,系统中设置了段表寄存器(Segment Register)
  • 在这里插入图片描述

段表寄存器内容结构

  • Segment Register

  • 段表始址F段表长度M
  • 段表始址F🎈

  • 段表长度M🎈

    • M=L(ST)
    • 即段表中包含的段表项数量

段和段表项的记号

  • 段表项长度: L ( I ) L(I) L(I)🎈
    • 表示每个段表项占用的内存空间
  • 段长C=L(S)🎈
    • 表示进程的某个段占用的内存空间

地址变换机构

变换过程

  • 从逻辑地址A中取出前s位为段号S,后w位为段内偏移量W
    • 两个字段分两次使用
    • 地 址 长 度 为 n , 则 s + w = n 地址长度为n,则s+w=n n,s+w=n
  • 检查段表寄存器SR,比较段号S和段表长度M
    • S ⩾ M S\geqslant M SM,则产生越界中断
    • S < M S<M S<M继续执行
  • 计检查段表ST,算段号S对应的段表项(地址): S T . S = F + S × L ( I ) ST.S=F+S×L(I) ST.S=F+S×L(I)
    • 取出该段表项的前c位得到段长C
    • W ⩾ C W\geqslant{C} WC,则产生越界中断
    • W < C W<C W<C,继续执行
  • 取出段表项中该段始址 b = S T . S . b b=ST.S.b b=ST.S.b,计算A对应的具体存储单元的物理地址 E = b + W E=b+W E=b+W
    • 用得到的物理地址E去访问内存(可以取得具体的内存单元(存储字)内容)。

段的共享与保护

  • 在分段系统中,段的共享是通过两个作业的段表中相应表项指向被共享的段的同一个物理副本来实现的。
  • 当一个作业正从共享段中读取数据时,必须防止另一个作业修改此共享段中的数据。
  • 不能修改的代码称为纯代码或可重入代码(它不属于临界资源),
    • 这样的代码和不能修改的数据可以共享
    • 可修改的代码和数据不能共享
  • 分段管理的保护方法主要有两种:
    • 一种是存取控制保护,另一种是地址越界保护
    • 地址越界保护将段表寄存器中的段表长度与逻辑地址中的段号比较,
      • 若段号大于段表长度,则产生越界中断:
        • 再将段表项中的段长C和逻辑地址中的段内偏移w进行比较,
        • 若段内偏移大于段长,也会产生越界中断。
  • 分页管理只需要判断页号是否越界,页内偏移是不可能越界的。
    • 与页式管理不同,段式管理不能通过给出一个整数便确定对应的物理地址,
    • 因为每段的长度是不固定的,无法通过整数除法得出段号,无法通过求余得出段内偏移,
    • 所以段号和段内偏移一定要显式给出(段号,段内偏移),因此分段管理的地址空间是二维的。

段页式存储

  • 分页存储管理能有效地提高内存利用率,而分段存储管理能反映程序的逻辑结构并有利于段的共享和保护。
    • 将这两种存储管理方法结合起来,便形成了段页式存储管理方式。
  • 在段页式系统中,
    • 作业的地址空间首先被分成若干逻辑段,每段都有自己的段号,
    • 然后将每段分成若干大小固定的页
      • 对内存空间的管理仍然和分页存储管理一样, 將其分成若干和页面大小相同的存储块,
      • 对内存的分配以存储块为单位

逻辑地址结构

  • 段号S
  • 页号P
  • 页内偏移W

实现思路:段表和页表的变体🎈

逻辑结构图

在这里插入图片描述

  • 为了实现地址变换,系统给每个进程建立

    • 一张段表,
      • 每个分段都有一张页表
  • 为了适应段页式方式,以sp前缀适应于段页式方式的段表和页表

sp-段表

  • 段表项中至少包括
    • 段号S
    • 页表长度L(PT)
    • 页表始地址PTA

sp-页表

  • 页表项至少包含:
    • 页号P
      • 可以理解为sp-段内的偏移,可以确定页表
      • 和单纯的段偏移(记为pure-段内偏移)有所不同(pure-段内偏移是为了确定具体的存储单元)
    • 块号b

sp段表寄存器

  • 系统中还包含的段表寄存器,指出
    • 段表始址F
    • 段表长度M=L(ST)

相关寄存器的作用🎈

  • 页表寄存器和段表寄存器的作用:
    • 寻址
      • 根据段号或者页号,计算出逻辑地址被映射到的段表或页表
        • 一个程序对应的段表只有一个
          • 一个段表可以记录多个(注意区分)
        • 但是可能对应多个页表
        • 如果没有越界,会返回一个有效的段表/页表起始地址值
        • 根据具体的段表/页表地址,可以计算出相应的表项(段表项/页表项)
        • 根据表项中指示的物理块地址,结合段/页内偏移,计算出具体内存单元的物理地址
    • 越界判断
      • 如果进程要映射的逻辑地址越界(非法/错误),会引发中断
  • 同一个逻辑地址,采用不同的内存管理方式(段式/页式/段页式/…),仅在划分字段的时候有所不同,
    • 因为,不同的内存管理方式的地址变换机构有所不同

地址变换机构

  • 在这里插入图片描述

变换过程

  • 先确定段,再确定页,最后确定字
  • 在进行地址变换时,首先通过段表查到页表始址,然后通过页表找到页帧号,最后形成物理地址
  • 进行一次访问实际需要三次访问主存
    • 这里同样可以使用快表来加快查找速度,
      • 关键字段号、页号组成,
      • 是对应的页帧号保护码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HLS + ffmpeg 实现动态码流视频服务

一、简介 如下图&#xff0c;包含三部分&#xff0c;右边一列为边缘节点&#xff1b;中间一列代表数据中心&#xff1b;左边一列是项目为客户提供的一系列web管理工具&#xff1a; 具体来说在我们项目中有一堆边缘节点&#xff0c;每个节点上部署一台强大的GPU服务器及N个网络…

猴子也能学会的jQuery第十二期——jQuery遍历(下)

&#x1f4da;系列文章—目录&#x1f525; 猴子也能学会的jQuery第一期——什么是jQuery 猴子也能学会的jQuery第二期——引用jQuery 猴子也能学会的jQuery第三期——使用jQuery 猴子也能学会的jQuery第四期——jQuery选择器大全 猴子也能学会的jQuery第五期——jQuery样式操作…

0201导数的概念-导数与微分-高等数学

文章目录1 导数的定义2 常见函数的导数(导函数)3 单侧导数4 导数的几何意义5 可导和连续的关系6 后记1 导数的定义 设函数yf(x)yf(x)yf(x)在点x0x_0x0​的某个邻域内有定义&#xff0c;当自变量x在x0取得增量△xx在x_0取得增量\triangle xx在x0​取得增量△x(点x△xx\triangle …

品优购项目案例制作需要注意的内容笔记

个人在做的时候遇到的&#xff0c;自己觉得需要注意的内容 模块化 1.有些样式和结构在很多页面会出现&#xff0c;比如页面的头部和底部&#xff0c;大部分页面都有。此时可以把这些结构和样式单独作为一个模块&#xff0c;然后重复使用 2.这里最典型的应用就是common.css公…

虚拟内存系统【多级页表】

多级页表&#x1f3dd;️1. 考虑使用更大的页&#x1f3d6;️2. 使用段页式管理&#x1f4d6;2.1 为什么采用段页式管理&#xff1f;&#x1f4d6;2.2 段页式管理的缺点&#x1f3de;️3. 多级页表&#x1f4d6;3.1 多级页表的优点&#x1f4d6;3.2 多级页表的缺点&#x1f4d6…

文本匹配实战:基于Glove+RNN实现文本匹配 详细教程

任务描述: 文本匹配是自然语言处理中一个非常核心的任务,主要目的是研究两段文本之间的关系。许多自然语言处理任务在很大程度上都可以抽象成文本匹配问题,比如信息检索可以归结为搜索词和文档资源的匹配,问答系统可以归结为问题和候选答案的匹配,复述问题可以归结为两个同…

数商云SRM系统招标流程分享,助力建筑材料企业降低采购成本,提高采购效率

近年来&#xff0c;随着主管部门对房地产市场的监管非常严格&#xff0c;房地产业的发展已进入瓶颈期&#xff0c;这对与房地产业密切相关的建材行业产生了很大的影响。同时&#xff0c;我国城市化进入成熟期&#xff0c;行业规模发展动力减弱&#xff0c;建材行业增长压力明显…

谷粒商城1.项目简介和项目环境预搭建(项目概述和环境搭建代码)

一.商城项目总体架构 从讲课篇看 从分块来看 项目知识概述 二.环境搭建代码 1.项目架构 建立父工程 pom文件 <description>聚合服务</description><packaging>pom</packaging><modules><module>gulimall-coupon</module><mo…

H2数据库端口占用

因为服务已经起来了&#xff0c;然后自己再想测试的时候&#xff0c;发现端口已经占用&#xff0c;找了好久在官网文档找到了对应的解决方案 意思是在服务端上&#xff08;就是我们的配置文件application.yml&#xff09;我们得加上tcp://localhost/也就是你的主机地址tcp://12…

Lambert (兰伯特)光照模型

漫反射的定义 漫反射是投射在粗糙表面上的光向各个方向反射的现象。当一束平行的入射光线射到粗糙的表面时&#xff0c;表面会把光线向着四面八方反射&#xff0c;所以入射线虽然互相平行&#xff0c;由于各点的法线方向不一致&#xff0c;造成反射光线向不同的方向无规则地反…

小程序赋能生鲜食品进销存,线上+物流系统两手抓

互联网、物联网和消费升级的多重影响下&#xff0c;生鲜食品市场的流通更加便捷。在国内外的生鲜产品的可用性不再受季节和地区的限制&#xff0c;需求也逐渐增加。 那么随着生鲜食品商城小程序和网上商城购物系统平台的数量逐渐增加&#xff0c;如何体现其价值在企业进销存系统…

基于EasyExcel锁定指定列导出数据到excel

基于EasyExcel锁定指定列导出数据到excel 大家好&#xff0c;我是llp。最近在做系统报表时中有一个需求时这样的&#xff0c;需要查询系统数据导出excel&#xff0c;并要求导出的excel列中有一些时锁定的有一些时不锁定的&#xff0c;即使实现动态列锁定的效果。看上去应该是一…

AWS 中文入门开发教学 39- AWS CLI - AWS认证 必须会的命令行工具

AWS CLI是什么 AWS Command Line Interface (AWS CLI) 是一种开源工具&#xff0c; 让您能够在命令行 Shell 中使用命令与 AWS 服务进行交互。 仅需最少的配置&#xff0c;即可使用 AWS CLI 开始运行命令&#xff0c;以便从终端 程序中的命令提示符实现与基于浏览器的 AWS 管理…

mysql基础知识篇(四)

1.MySQL 索引用的什么数据结构了解吗&#xff1f; MySQL 的默认存储引擎是 InnoDB&#xff0c;它采用的是 B树结构的索引。 B树&#xff1a;只有叶子节点才会存储数据&#xff0c;非叶子节点只存储键值。叶子节点之间使用双向指针连接&#xff0c;最底层的叶子节点形成了一个…

FTP服务配置和使用

FTP介绍 FTP&#xff08;文件传输协议20、21端口&#xff09;是典型的C/S架构的应用层协议&#xff0c;需要由服务端软件、客户端软件两个部分共同实现文件传输协议。FTP是客户端和服务器之间的连接是可靠的保证。 FTP是一种文件传输协议&#xff0c;它支持两种模式&#xff…

集合框架----源码解读LikedHashSet篇

1.官方介绍 Hash表和链表实现了Set接口&#xff0c;具有可预测的迭代顺序。该实现与HashSet的不同之处在于它维护了一个贯穿其所有条目的双向链表。该链表定义了迭代顺序&#xff0c;即元素插入集合的顺序(插入顺序)。注意&#xff0c;如果一个元素重新插入到集合中&#xff0c…

Git---idea中git的基本操作

idea中使用git仓库 idea中配置git仓库&#xff1a; 首先idea配置git仓库的位置 配置完成之后&#xff0c;有两种创建仓库的方式 从本地配置git仓库&#xff1a; idea本身设置好的&#xff0c;直接下一步就好 从远程克隆仓库&#xff1a; 如果远程仓库没有的话可以绑定完…

如何从 FastReport VCL 中将报表导出为PNG格式?

FastReport VCL是用于在软件中集成商务智能的现代解决方案。它提供了可视化模板设计器&#xff0c;可以访问最受欢迎的数据源&#xff0c;报告引擎&#xff0c;预览&#xff0c;将过滤器导出为30多种格式&#xff0c;并可以部署到云&#xff0c;Web&#xff0c;电子邮件和打印中…

openvswitch group hash实现代码分析

代码分析 ovs版本是2.11.0&#xff0c;linux版本是linux-3.10.0-693.21.1.el7。 只拿ovs实现的group hash和dp_hash举例分析代码&#xff0c;通过一个点一个功能切入代码&#xff0c;漫无目的看代码是很难看懂的&#xff0c;必须带着一个疑问看代码&#xff0c;点多了全面开花…

降低点云密度的几种方法(含python代码)

本文只是对学习过程中的点云密度降采样的几种方法做一个记录&#xff0c;原文参考知乎Python点云数据处理(四)点云下采样 - 知乎 (zhihu.com) 本文介绍python点云数据处理中的点云下采样算法和关键点算法以及在点云工具箱软件中的实现。由于点云的海量和无序性&#xff0c;直接…