第3章 内存管理(1)

3.1 内存管理概念

程序放入内存才能执行【缓解CPU与硬盘速度差异大的矛盾】

3.1.1 内存管理的基本原理和要求

  • 内存管理的主要功能:
    • 1.内存分配与回收
    • 2.地址转换:逻辑地址转换成物理地址
    • 3.内存空间的扩充
    • 4.内存共享
    • 5.存储保护
      • ①设置上下限寄存器
      • ②采用重定位寄存器(基地址寄存器)界地址寄存器(限长寄存器)进行越界检查,出现问题就抛出异常

程序的链接与装入

  • 编译:源代码编译成多个目标模块。

  • 链接:将多个模块链接成一个完整模块。【形成完整逻辑地址】

    • (1) 静态链接:程序运行前就把所有模块和所需库函数链接到一起。
      • ①修改相对地址
      • ②变换外部调用符号
    • (2)装入时动态链接:装入内存时链接。
    • (3)运行时动态链接:在运行时仅当需要模块时才加载进来。【可以加快装入过程,节省内存空间】
      在这里插入图片描述
  • 装入:将程序加载进内存。
    将【逻辑地址】(相对地址)映射到【绝对地址】(物理地址)

    • (1) 绝对装入
      解释:知道程序放在哪个位置,在编译时将地址修改成物理地址
      适用于:无操作系统时期的弹道程序环境,灵活性低。

    • (2)可重定向装入 【静态重定位】
      解释:在程序装入内存时才逻辑地址改为物理地址
      适用于:早期多道批处理操作系统。
      缺点:装入内存时必须分配全部空间。

    • (3)动态运行时装入 【动态重定位】
      解释:装入内存时保持使用逻辑地址。使用重定位寄存器保存模块起始位置。在CPU执行时才将逻辑地址重定位地址相加获取实际地址
      适用于:现代计算机系统
      优点:不需要分配连续内存,可以仅仅装入部分代码运行,动态申请分配内存。便于程序段的共享。
      在这里插入图片描述


3.1.2 覆盖于交换[新大纲已删除]


3.1.3连续分配管理方式

连续分配方式是指的为一个用户程序分配一个连续的内存空间

  • (1)单一连续分配:
    解释:内存划分成系统区【操作系统使用】和用户区【用户进行独占使用】。一次性只能加载运行一个进程。
    优点:简单无外部碎片。无需内存保护。
    缺点:只适用于单用户单任务系统,存在内部碎片,利用率低。
    在这里插入图片描述

  • (2)固定分区分配:
    解释:内存划分成若干固定大小的区域,一个分区只能装入一个作业仅当有空闲分区时才从后备作业队列选择合适大小的作业装入。
    优点:简单无外部碎片。
    缺点:存在内部碎片,利用率低。
    存在问题:程序过大,放不经分区。固定分区过小,也占用完整分区,浪费空间。

    • 分区大小相同:分区过大容易导致浪费,分区过小程序无法装入
    • 分区大小不同:划分多个小分区,适量中等分区,少量大分区。
      在这里插入图片描述
  • (3)动态分区分配:
    解释:不会预先分配内存空间,转入时根据进程大小动态建立分区。
    优点:无内部碎片
    缺点:有外部碎片
    紧凑技术:通过将进程移动到相邻空间,从而让出更大连续空间。可以解决外部碎片
    在这里插入图片描述

内存分区的分配与回收:

  • 分配
    • 空闲区大于所需空间修改空闲分区表的起始位置大小
    • 空闲区等于所需空间删除对应的分区表元素。
  • 回收
    • 回收空间有一边相邻空闲空间 :将回收的空间与相邻空闲空间合并。修改空闲分区表的值。
    • 回收空间两边都有相邻空闲空间:合并三个分区,修改其中一个空闲分区表的元素并删除另一个元素
    • 前后都无相邻空闲空间:新添空闲分区表元素。根据具体算法排列。

动态分区的分配策略:

  • 首次适应算法
    解释:空闲分区以地址递增的次序链接。从链首顺序查找第一个合适的空闲分区。
    评价:综合性能最好,很小概率导致后面的大分区被小进程划分变很小,能装下较大进程。不需要重新排列分区表。碎片容易聚集在低地址。
  • 邻近适用
    解释:首次适应算法的基础上,从上一次查找的位置往后查找。
    评价:由于不是从第一个开始查找,很大概率将后面的大分区划分得非常小,导致不能装入大进程【最坏适应算法的缺点】。不需要重新排列分区表。
  • 最佳适应
    解释:将空闲区按照容量从小到大排序,然后从链头向后查找。找到第一个满足要求的最小空间
    评价:容易产生很多外部碎片
  • 最坏适应
    解释:将空闲空间安州容量从大到小排序,每次适用链头的哪个空间。
    评价:不断地使用最大连续空间,大进程可能无法装入。

3.1.4 基本分页存储管理

进程的块称为或者页面。【逻辑划分】
内存的块称为页框或者页帧。【物理划分】
页(页面)的大小和页框(页帧)的大小相等。
每个进程的页表都是私有,不可共享。

页的逻辑结构:页号+页内偏移量
页表项的结构:页号【不需要保存】+块号
页表寄存器结构:页表起始地址+页表长度

页表会在内存中长期驻留,无论当前是否在运行中。
在进行进程调度时,会将新进程的PCB中的页表起始地址页表长度写入页表寄存器
页表访存需要经过2次访存:访问页表,访问数据。

  • 页表的访问流程:

    • 1.根据逻辑地址中的页号页表寄存器 中的页表长度对比。如果页号大于等于页表长度,产生越界中断
    • 2.根据页号页表起始地址获取页表项从而获知数据的物理块号。
    • 3.根据物理块号地址页内偏移量获取实际物理地址。
  • 页式管理是一维地址,只需要一个信息就能获取实际物理位置。
    在这里插入图片描述

  • 使用快表加速地址变换:

    • 块表: 是一种高速缓冲存储器 全相联存储器【根据内容访问数据】。
    • 访问流程:
      • 1.使用逻辑地址中的页号 查找块表中的数据。如果没有找到,接下来流程和无块表的流程一样。
      • 2.找到块表内容,将块表中对应表项的块号和页内偏移量转换成物理地址
        在这里插入图片描述
  • 多级页表:

    • 使用目的: 页式存储是一种非连续的存储方式。如果页表项过多,会导致需要大量连续空间存储页表,与目的相违背。还有局部性原理,程序运行不必加载完全部内容才开始运行。
    • 使用多级页表基地址寄存器存放的是顶级页表的地址。

虚拟存储应用:页表项添加一个标志位,判断是否在页面中,不在发生缺页中断


3.1.5 基本分段存储管理

根据逻辑和和功能划分。
分段管理满足方便编程,信息保护,动态增长,动态链接的需求。
编译程序时各段转化成段号

段的逻辑结构:段号+页内偏移量
段表项的结构:段号【不需要保存】+段长+段的起始物理地址
段表寄存器结构:段表起始地址+段表长度

在进行进程调度时,会将新进程的PCB中的段表起始地址段表长度写入段表寄存器

  • 页表的访问流程:

    • 1.根据逻辑地址中的段号段表寄存器 中的页表长度对比。如果段号大于等于段表长度,产生越界中断
    • 2.根据段号段表起始地址获取段表项从而获知数据的物理块号。
    • 3.根据物理块号地址页内偏移量获取实际物理地址。
  • 段的共享与保护:

    • 共享: 让需进程的段表指向相同地址。
    • 保护: 只需标记是否允许访问。
  • 段式管理是二维地址,只需要一个段号和段内偏移量。

在这里插入图片描述


3.1.6 段页式管理

段和页的对比

大小是否固定
是否有外部碎片
是否有内部碎片
内存利用率低,段过长,分配连续空间不便
管理操作系统管理,对用户透明用户和操作系统共同管理
维度一维二维

一个进程只有一个段表,一个段有一个页表。因此段表只能有一个,页表可以有多个。

段页的逻辑结构:段号+页号+页内偏移量
段表项的结构:段号【不需要保存】+页表长+页表起始地址
页表项结构:页号【不需要保存】+块号
段表寄存器结构:段表起始地址+段表长度

  • 段页表的访问流程:
    • 1.根据逻辑地址获得段号页号,页内偏移量
    • 2.根据段号 找到段表项【页表长,页变块号】
    • 3.检查页号合法性
    • 4.根据页表找到页表项
      在这里插入图片描述

补充:

  • 重定位寄存器:保存物理地址的起始位置
  • 界地址寄存器:保存逻辑的最大值(上界地址寄存器)和最小值(下界地址寄存器)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

有条件的打破IBGP水平分割----反射规则和联邦+实验举例

背景:在一个AS中的设备运行了BGP协议,那么正常应该都连接了其他的AS,存在EBGP邻居关系;又由于IBGP的水平分割规则,导致从外部学习到的路由传递给本地AS时,需要和本地AS中运行BGP协议都要建立IBGP邻居关系&a…

C++ 一些编程问题解决 (C++ some programming error solutions)

电脑配置:window10, 64位操作系统,基于x64的处理器,Microsoft Visual Studio Community 2019 Version 16.4.5 问题1:Unhandled exception at 0x00007FFDB39AA839 in TesseractLACadd1.exe: Microsoft C exception: boost::filesy…

移动端双验证码登录实现

说明:本文介绍如何用图形验证码短信验证码实现移动端登录思路; 分析 通过手机号图形验证码手机验证码实现登录的时序图如下: 说明: (1)用户进入登录界面,出现图形验证码,可点击图形…

外贸人寻找客户的6大锦囊 | 进出口的贸易数据服务 | 箱讯科技

一信息特征法---培养一双善于甄别的眼 1、客户的询盘,每个客户在写询盘时用的语言是不一样的,这就构成了客户语言的特征。有的朋友可能发现有的客户英语差的太狠,写出来的询盘很简单很搞笑。如果你一笑而过,那么就太可惜了。这个…

活动的生命周期

返回栈 Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈(Back Stack )。系统总是会显示处于栈顶的活动给用户 活动状态 运行状态当一个活动位于返回栈的栈顶时,这时活动就处于运行状态…

音乐小程序|基于微信开发音乐小程序的系统设计与实现(源码+数据库+文档)

音乐小程序目录 基于微信开发音乐小程序的系统 一、前言 二、系统设计 三、系统功能设计 小程序端: 后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师…

广西建筑模板批发供应,工厂直销

随着广西地区基础设施建设的不断加速,建筑模板作为工程施工的重要辅材,其需求也在持续攀升。在众多建筑模板生产企业中,贵港市能强优品木业有限公司以其25年的丰富生产经验和卓越的产品品质,脱颖而出,成为了广西知名的建筑模板供应商。 能强优品木业公司专注于建筑模板的生产与…

mac IDEA激活 亲测有效

1、官网下载mac版本IDEA并安装 2、打开激活页面 3、下载脚本文件 链接: https://pan.baidu.com/s/1I2BqdfxSJv1A96422rflnA?pwdm494 提取码: m494 4、命令行到该界面,执行 sudo bash idea.sh 可能出现的问题: 查看sh文件,targetFilePath…

西瓜书学习——第一、二章笔记

[] 什么是机器学习? 研究关于“学习算法”(一类能从数据中学习出其背后潜在规律的算法)的一门学科。 PS:深度学习指的是神经网络那一类学习算法,因此是机器学习的子集。 假设空间和版本空间 举个栗子:假设现已收集到某地区近几年的房价和学校数量数据&#xf…

[Java EE] 多线程(二): 线程的创建与常用方法(下)

2.3 启动一个线程–>start() 之前我们已经看到了如何通过重写run()方法来创建一个线程对象,但是线程对象被创建出来并不意味着线程就开始运行了. 覆写run方法是给线程提供了所要做的事情的指令清单创建线程对象就是把干活的人叫了过来.而调用start方法,就是喊一声"行…

国产主流数据库存储类型简析

国产数据库在技术架构上主要分为集中式、基于中间件分布式和原生分布式架构,衍生出集中式架构和分布式架构。那么在这些部署架构中,从数据分布的视角来看,在数据库中数据分布的形态是怎样的。本文将简要分析OceanBase、PolarDB、OpenGauss、G…

【Spring】-编程式事务和声明式事务

spring中控制事务的方式有两种:编程式事务和声明式事务,今天我以两种事务出发,对spring中实现事务的EnableTransactionManagement和Transaction两个注解的底层原理进行讨论。 一、编程式事务 什么是编程式事务? 硬编码的方式实现…

牛客NC197 跳跃游戏(一)【中等 动态规划 Java、Go、PHP】

题目 题目链接: https://www.nowcoder.com/practice/23407eccb76447038d7c0f568370c1bd 思路 答案说的merge区间就是每个A[i]的地方能跳到的最远坐标是A[i] [i], 有一个maxReach,遍历一遍A[i], 不断刷新MaxReach, 如果某个i 位置比maxReac…

MT3023 歌词中找单词

1.暴力 10/12 #include <bits/stdc.h> using namespace std; int n; string a[10005]; int main() {cin >> n;for (int i 0; i < n; i)cin >> a[i];string ll;cin >> ll;for (int i 0; i < n; i){string u a[i];int num 0;int j 0;for (in…

ssm056基于Java语言校园快递代取系统的设计与实现+jsp

校园快递代取系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本校园快递代取系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短…

【在线OJ】雪花算法代码实现

雪花算法 用一个64比特位的long类型来作为生成id的类型&#xff0c;首先我们要了解哪些位置对应的意义&#xff0c;其中在本项目中10位的工作机器id被细分位5bit的机房id与5bit的机器id。雪花算法支持每毫秒生成2的12次方-1个id。 用一个64比特位的long类型来作为生成id的类型…

unity制作拼接地图

前段时间有个朋友问我想要制作一款地图编辑器&#xff0c;最开始我还想着在一个平面用节点切割制作地图编辑器这倒是也行&#xff0c;但不太好控制每一个点&#xff0c;如果未来项目大了&#xff0c;更加不好维护。 偶然间翻到一篇文章&#xff1a;unity地图边缘检测 或许我们…

upload-labs第七八关

第七关 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml"…

SaaS智慧工地云平台源码 支持二次开发、支持源码交付

目录 智慧工地云平台功能模块 一、劳务管理系统 二、视频监控系统 三、危大工程管理 四、环境监测系统 五、材料管理系统 六、进度管理系统 通过人员管理、车辆管理、视频监控、施工质量、设备管理、环境监测、能耗监测七大维度提供面向工程管理人员的现场综合指挥管理平…

51单片机工程模板的建立(基于STC15系列库)

一、开启前准备 1.STC15官方库文件 1.1 stc15-software-lib-v1.0.rar&#xff1b;下载地址&#xff1a;STC15系列库&#xff08;带使用手册&#xff09;资源-CSDN文库 2.Keil4_C51软件&#xff0c;或其它版本&#xff1b; 二、创建工程模板 1.建立文件分类 listing&#xf…