内存管理技术——离散分配方式

2023-11-08

      上一篇讲到,采用固定分区的方式,会产生页内碎片等缺点,因此引入了动态分区方式。但动态分区又产生了外部碎片,导致内存的利用率也不理想。为了进一步提高内存的利用率,所以就产生了离散的分配方式。(理论来源于实际问题,这很好的体现在计算机科学中)

      离散分配首先要解决的是分配的基本单位问题。通常,分配的基本单位是页与段。页:固定大小的片段。段:长度可变,它是用户可以自己定义的一段数据集合(即用户根据需要来划分程序:代码段,静态数据段,堆段,栈段)。

根据分配基本单位 的不同,离散分配管理 方式分为一下三种:

1、分页存储管理

分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把物理内存空间分成与页面相同大小的若干个存储块,称为(物理)页框(frame),也加以编号,如第0块,第1块等等。

用户空间(即进程的逻辑地址空间)的每个页面在需要载入系统时,都需要向操作系统请求一个空闲的页框(即在内存中找到空闲的区域),并将该页面与该页框之间联系起来。一个进程的两个连续页面也可以分配到不连续的两个页框中,这样就实现了离散分配

在分页系统中,允许将进程的各个页离散地存储在内存不同的物理块中,但系统应能保证进程的正确运行,即能在内存中找到每个页面所对应的物理块,为了描述进程的内存分布情况,引入一个单独的数据结构页表)。系统为每个进程都建立了一张页面映像表,简称页表。(页号到块号的地址映射)

在一个32位机中,当页面大小为4kB时,它的页内偏移量(也称为页内地址)所占的位数最大为2的12次方,即需要12位,所以0~11位是页内偏移量,其余的12~31位存放页号。如下图

看这里

 

地址转换是分页系统必须实现的功能。设置 一个寄存器来进行地址转换,即快表(也称为联想寄存器)。由于快表成本的原因,快表不能很大,通常在16~512个页表之间。快表中只存放当前使用频繁的页表

 

2、分段存储管理

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

为每个分段分配一个连续的分区,而进程中的各个段可以离散地装入内存中不同的分区中,因此也实现了离散分配
为使程序能正常运行,即能从物理内存中找出每个逻辑段所对应的位置,应像分页系统那样,在系统中为每个进程建立一张段映射表,简称“段表”
---- 每个段在表中占有一个表项,其中记录了该段在内存中的起始地址(“基址”)和段长(字节)。段表一般放在内存中。在配置了段表后,
执行中的进程可通过查找段表找到每个段所对应的内存区。可见,段表是用于实现从逻辑段到物理内存区的映射

 

3.   段页式存储管理

为了解决分段的外部碎片问题,再次将“页”引入,即把一个段划分为许多页,形成两者的集合体,称为段页式存储管理。这是现代操作系统采用的最多的方式,而单纯的分页存储,分段存储从来就没被采用过(哈哈)。同理,将页划分为段,就称为页段式存储。不过一般段比页要大得多,所以都用段页式。

 

现在逻辑地址就是如下状态:

现在逻辑地址

由于进程的段不多,所以段的位数比较少。32位机上通常是8位,即256个段。如果页面大小为4KB,那么页内地址12位,段地址8位,段内页号32-8-12=12位,即一个段有4K大小的页。

一个段内的每个页都可以装入内存的页框(块)中去。所以与分页系统一样,这里也有一个页表,来记录段的页的内存驻留情况。进程的段也需要一个段表来记录,以实现分段保护和共享等功能。

地址转换这里也是用快表,利用硬件也完成地址转换。这里复杂一些,需要分别获取段表,页表。所以产生了额外的内存开销

 

总结:

在页式、段式存储管理中,为获得一条指令或数据须两次访问内存(一次访问页表/段表,一次访问内存取真正的内存单元);

而段页式则须三次访问内存(第一次是由段表地址寄存器得段表始址后访问段表,由此取出对应段的页表在内存中的地址。  第二次则是访问页表得到所要访问的物理地址。  第三次才能访问真正需要访问的物理单元

参考:

https://blog.csdn.net/u014338577/article/details/82750771

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内存管理技术——离散分配方式 的相关文章

  • 计算机二级-C语言-计算机系统

    还未解决的题目 xff1a 5 3 xff1a 22 xff1b 5 4 xff1a 2 3 5 7 13 18 20 22 24 25 27 29概念模式 xff08 模式 xff09 xff1a 描述全局数据逻辑结构 xff1b 外模式
  • 多核编程与单核多线程编程

    并发 时间段内有很多的线程或进程在执行 但何时间点上都只有一个在执行 多个线程或进程争抢时间片轮流执行 并行 时间段和时间点上都有多个线程或进程在执行 单核cpu的话只能是并发 多核cpu才能做到并行执行 那有人可能有这样的疑问 那多进程的
  • 假如让你来设计SSL/TLS协议

    前言 说起网络通信协议 相信大家对 TCP 和 HTTP 都很熟悉 它们可以说是当今互联网通信的基石 但是 在网络安全方面 它们却是有着很大安全风险 窃听风险 第三方攻击者可以随意窃听通信内容 比如获取支付账号密码 冒充风险 第三方攻击者可
  • 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.3-2.4)

    GitHub计算机系统CSAPP课程资源 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 1 2 2 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 3 2 4 计算机系统课程 笔记总结 CSAPP第三章
  • 进程的互斥与同步

    一 进程 线程的背景 引入进程 为了描述和实现多个程序的并发执行 以改善资源利用率即提高系统的吞吐量 引入线程 减少程序并发执行时系统所付出的额外开销 使操作系统具有更好的并发性 二 进程的互斥与同步 注意 同步即协调 采用多道程序技术的操
  • HIT-ICS大作业

    计算机系统大作业 题目 程序人生 Hello s P2P 计算机科学与技术学院 摘 要 大作业题为程序人生 Hello s P2P 围绕一个较简单的hello c函数的整个生命周期展开 介绍了该示例程序从编写到执行到结束的全过程 详细地分析
  • I/O控制方式——通道控制方式

    一 定义 通道是一个独立于 CPU的专管输入 输出控制的处理机 它控制设备与内存直接进行数据交换 它有自己的通道指令 这些通道指令受CPU启动 并在操作结束时向CPU发中断信号 二 原理 2 1 通道控制方式的引入 通道控制方式与DMA控制
  • 文件的流

    一 文件名词解释 文件 是存贮在某种介质上的 如磁盘 磁带等 并具有文件名的一组有序信息的集合 流设备 大多数的字符设备 如键盘 打印机等 传输的信息均由 一组顺序出现的字符序列组成 文件系统 操作系统对系统的软件资源 不论是应用软件和系统
  • 计算机的内存

    物理内存 内存是电脑的一个硬件组成部分 从单片机的组成我们可以看到 CPU 内存和输入输出接口 就组成一个完整的电脑 其他统统属于外设 内存是可以被CPU通过总线进行操作的 也就是与CPU之间有总线相连接的 电脑所有的输入输出 都是要从内存
  • 计算机系统实验之datalab

    datalab实验是CSAPP中关于整数和浮点数的位运算的实验 对于我们理解位运算和整数 浮点数的位级表示有着很好的帮助 实验目的 修改bits c的C语言代码 使其通过所有在不违反任何编码准则的情况下 在btest中进行测试 进一步熟悉整
  • 整数乘法运算

    在高级语言中 两个n位整数相乘得到的结果通常也是一个n位整数 即结果只取2n位乘积中的低n位 这导致乘法运算得到结果必须在范围 2n 1 lt x y lt 2n 1才不会溢出 假设为4位 进行52 0101 0101 0101 0101
  • 内存管理技术——离散分配方式

    上一篇讲到 采用固定分区的方式 会产生页内碎片等缺点 因此引入了动态分区方式 但动态分区又产生了外部碎片 导致内存的利用率也不理想 为了进一步提高内存的利用率 所以就产生了离散的分配方式 理论来源于实际问题 这很好的体现在计算机科学中 离散
  • (四)现代计算机系统的层次结构

    程序执行结果 不仅取决于算法 程序的编写 而且取决于语言处理系统 操作系统 ISA 微体系结构 不同计算机课程处于不同层次 必须将各层析关联起来解决问题 功能转换 上层是下层的抽象 下层时上层的实现 地位为上层提供支撑环境 计算机系统的不同
  • L1,L2,L3 Cache缓存原理

    一 介绍 CPU缓存 Cache Memory 也被称为Cache 是存储器子系统的组成部分 存放着程序经常使用的指令和数据 从广义的角度上看 Cache是快设备为了缓解访问慢设备延时的预留的Buffer 从而可以在掩盖访问延时的同时 尽可
  • 内储管理技术——连续分配方式

    早期的操作系统 只支持单进程 为了实现简单 在执行程序之前 操作系统必须将待执行的程序全部装入内存 这就是简单存储管理技术 现代操作系统 支持多进程并发执行 允许进程装入部分程序即可以开始执行 其余部分保留在磁盘上 当执行所需的部分不在内存
  • 无符号数 有符号数 与 补码

    无符号数 有符号数 与 补码 本文是深入理解计算机系统这本书里面关于补码有符号数无符号数章节的一个摘要和读书报告 我个人认为这本书关于这一段的表述 要比绝大多数网上的博客甚至是国内教材要深入浅出的多 同时由于markdown的文档表示公式很
  • 深入理解计算机系统-笔记

    计算机系统漫游 程序 程序的生命周期从一个源程序 源文件 开始 即程序员利用编辑器创建并保存的文本文件 如文件名为hello c的c语言程序 源程序是由0和1组成的位序列 8个位被组织成一组 称为字节 每个字节表示程序中的某个文本字符 这种
  • 【科普】CRC校验(一)什么是CRC校验?

    目录 CRC 循环冗余校验 CRC 校验码的生成 CRC 的发送方与接收方 发送方 接收方 除法异或运算示意图 CRC 循环冗余校验 CRC Cyclic Redundancy Check 循环冗余检验 是一种用于检测数字数据错误的技术 作
  • HIT--ICS计算机系统大作业

    目录 摘要 第1章 概述 1 1 Hello简介 1 2 环境与工具 1 3 中间结果 1 4 本章小结 第2章 预处理 2 1 预处理的概念与作用 2 2在Ubuntu下预处理的命令 2 3 Hello的预处理结果解析 2 4 本章小结
  • 计算机系统课程 笔记总结 CSAPP第四章 处理器体系结构(4.1-4.3)

    GitHub计算机系统CSAPP课程资源 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 1 2 2 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 3 2 4 计算机系统课程 笔记总结 CSAPP第三章

随机推荐

  • 已知空间一点到另外两点直线的距离

    转自 http www cnblogs com clarkustb archive 2008 11 04 1326500 html 已知空间一点到另外两点直线的距离 设空间中的三点为M1 M2 M3 分别用矢量a b表示方向向量M1M2和M
  • 哈希(4) - 求两个链表的交集以及并集

    目录 1 简单方法 2 使用归并排序 3 使用哈希 给定两个链表 求它们的交集 intersection 以及并集 union 用于输出的list中的元素顺序可不予考虑 例子 输入下面两个链表 list1 10 gt 15 gt 4 gt
  • Java学到什么程度才能叫精通?

    Java学到什么程度才能叫精通 全文分为 基础知识和进阶知识 下文java必会知识附答案 并为大家整理了一个pdf 所有的知识点和答案都在pdf里面 必会知识点及其答案 Java基础知识 https blog csdn net qq 166
  • Python中Tkinter解决button的command无返回值问题

    Tkinter是什么 Tkinter是Python的标准GUI库 Python使用Tkinter可以快速地创建GUI应用程序 由于Tkinter属于Python标准库 就不需要使用pip安装 直接导入使用即可 基础操作 见这篇文章 写的挺好
  • 51单片机的PID水温控制器设计

    硬件方案 PID水温控制器主要以51单片机系统进行温度采集与控制 温度信号由数字温度传感器DS18B20采集 主控器主动获取传感器温度值 通过PID算法 与设置温度进行计算 输出继电器的控制状态 并在LCD显示屏进行显示 整体硬件主要有51
  • KEIL提示“No target connected”的解决方法

    KEIL提示 No target connected 的解决方法 原创 2012 08 06 11 05 05 分类 STM32F0 字号 订阅 在用STM32F051Disconvery学习时 配置GPIOA时 不小心将连接SWD总线上的
  • Python3学习(16)--匿名函数lambda

    我们前面讲高阶函数的时候 已经很多次的提到了lambda 它是一个表达式 也是Python中的匿名函数 我们知道 lambda可以当做函数来使用 返回值就是lambda表达式的结果 lambda也可以当做函数的返回值 比如我们讲到的素数求解
  • 为什么之前CSDN上免费用的chatgpt不见了

    chatgpt刚上线时候 管理风控上是比较松的 基本上通过一些简单的技术手段就能获取大量的账号 并能在限制地区稳定访问使用 甚至单号同时访问也是可以轻松应对 但后面 风控发生了本质上的改变 编辑切换为居中 添加图片注释 不超过 140 字
  • react事件类型

    一 剪贴板事件 Clipboard Events onCopy ClipboardEventHandler
  • 设计模式之——封装、继承、多态

    世界处处不设计 有物混成 先天地生 寂兮寥兮 独立而不改 周行而不殆 可以为天地母 吾不知其名 字之曰道 强为之名曰大 大曰逝 逝曰远 远曰反 道是什么 道可道 非常道 道不明 说不尽的才算是道 它是自然法则的终极抽象 但至少在某一方面 它
  • 同步异步实现代码小结

    客户端同步服务端异步 Future
  • Gitlab API调用生成个人访问令牌并操作API(Java实现)

    Gitlab API调用生成个人访问令牌并操作API Java实现 在使用Gitlab进行项目管理和版本控制时 我们经常需要使用到Gitlab API来实现一些自动化的操作 例如创建项目 添加成员 提交代码等 为了安全起见 Gitlab提供
  • 【从0到1完成一个项目(一)】用户中心(上)

    用户中心 上 写在前面 作为后端程序员 前端不用学很深 只要在前后端分离的项目中 了解前后端是如何进行数据交互的就行 Ajax发请求 后端request接收参数 使用框架接收参数会更简单 然后返回给前端JSON 之前在前后端不分离的项目中
  • cmake 区分微软和mingw编译器

    可以通过检查 CMAKE CXX COMPILER ID 变量的值来区分使用的编译器类型 if CMAKE CXX COMPILER ID STREQUAL MSVC 使用微软编译器 else 使用 Mingw 编译器 endif 具体来说
  • Java和Android笔试题

    3 笔试题之Java基础部分 基础部分的顺序 基本语法 类相关的语法 内部类的语法 继承相关的语法 异常的语法 线程的语法 集合的语法 io 的语法 虚拟机方面的语法 其他 有些题来自网上搜集整理 有些题来自传智播客学员面试后的反馈 说真的
  • gdb

    gdb可用以调试正在运行的进程 只需要知道进程的进程号 gdb调试进程流程 1 gdb p PID指定调试的进程ID号 或者先进入gdb再指定 gdb attach PID 2 bt查看当前进程执行的调用栈 3 info threads查看
  • 网页书签

    h1 Bookmarks h1 dl p p dt h3 h3 dt dl
  • 【数学建模笔记 29】数学建模的多元分析

    29 多元分析 定义 多元分析是多变量的统计分析方法 是数理统计中应用广泛的一个重要分支 判别分析 判别分析是一种分类方法 假定有 r r r 类判别对象 A 1
  • matlab里面sin函数是角度,matlab中的sin(函数)

    笔记 matlab中的sin 函数 sin Sine of an argument in radians Syntax Y sin X Description The sin function operates element wise o
  • 内存管理技术——离散分配方式

    上一篇讲到 采用固定分区的方式 会产生页内碎片等缺点 因此引入了动态分区方式 但动态分区又产生了外部碎片 导致内存的利用率也不理想 为了进一步提高内存的利用率 所以就产生了离散的分配方式 理论来源于实际问题 这很好的体现在计算机科学中 离散