王道计算机考研 操作系统学习笔记 + 完整思维导图篇章三: 内存管理

目录

内存管理概念

内存的基础知识

什么是内存?有何作用?

补充知识:几个常用的数量单位

指令的工作原理 

三种装入方式

绝对装入 

可重定位装入 

动态重定位 

从写程序到程序运行 

链接的三种方式 

总结

内存管理的概念

内存保护 

内存空间的扩充 

覆盖技术

交换技术

内存空间的分配与回收 

连续分配管理方式

 单一连续分配

固定分区分配 

动态分区分配

总结

动态分区分配算法

首次适应算法 

最佳适应算法 

最坏适应算法

邻近适应算法 

总结 

非连续分配管理方式

基本分页存储管理的基本概念 

基本地址变换机构 

具有快表的地址变换机构

两级页表 

基本分段存储管理

分段、分页管理的对比

段页式管理方式 

虚拟内存管理

传统存储管理方式的特征、缺点

虚拟内存的定义和特征 

如何实现虚拟内存技术

请求分页管理方式 

请求页表 

缺页中断

地址转换流程 

页面置换算法

最佳置换算法 (OPT)

先进先出置换算法 (FIFO) 

最近最久未使用置换算法(LRU)

时钟置换算法 (CLOCK)

改进型CLOCK算法 

页面分配策略

驻留集

页面分配、置换策略 

页面调动时机策略

页面调动位置策略 

抖动(颠簸)现象 

内存映射文件 

传统文件访问方式


内存管理概念

内存的基础知识

什么是内存?有何作用?

程序执行前需要先放到内存中才能被CPU处理——缓和CPU与硬盘之间的速度矛盾

补充知识:几个常用的数量单位

指令的工作原理 

三种装入方式

绝对装入 

可重定位装入 
动态重定位 

从写程序到程序运行 

链接的三种方式 

  • 静态链接:程序运行之前,将库函数连接成一个完整的可执行程序
  • 装入时动态链接:将用户源程序编译后得到目标模块,装入内存时,采用边装入边链接的方式
  • 运行时动态链接:对于某些目标模块的链接,程序需要时才会对其链接 ,便于修改和更新,便于实现对目标模块的共享

总结 


内存管理的概念

内存保护 


内存空间的扩充 

覆盖技术


交换技术

注意: PCB 会常驻内存,不会被换出外存 

  • 应该在外存(磁盘)的什么位置保存被换出的进程?
    • 具有对换功能的操作系统中,通常把磁盘空间分为文件区对换区两部分。文件区主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式: 对换区空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响到系统的整体速度,因此对换区空间的管理主要追求换入换出速度,因此通常对换区采用连续分配方式(学过文件管理章节后即可理解)。总之,对换区的I/O速度比文件区的更快。
  • 什么时候应该交换?
    • 交换通常在许多进程运行且内存吃紧时进行,而系统负荷降低就暂停。例如:在发现许多进程运行时经常发生缺页,就说明内存紧张,此时可以换出一些进程;如果缺页率明显下降,就可以暂停换出。
  • 应该换出哪些进程?
    • 可优先换出阻塞进程;可换出优先级低的进程;为了防止优先级低的进程在被调入内存后很快又被换出,有的系统还会考虑进程在内存的驻留时间


内存空间的分配与回收 

连续分配管理方式

        连续分配:指为用户进程分配的必须是一个连续的内存空间

 单一连续分配

固定分区分配 

动态分区分配

动态分区分配没有内部碎片,但是有外部碎片。

  • 内部碎片,分配给某进程的内存区域中,如果有些部分没有用上。
  • 外部碎片,是指内存中的某些空闲分区由于太小而难以利用。

如果内存中空闲空间的总和本来可以满足某进程的要求但由于进程需要的是一整块连续的内存空间,因此这些“碎片”不能满足进程的需求可以通过紧凑(拼凑,Compaction) 技术来解决外部碎片。 


总结


动态分区分配算法

在动态分区分配方式中,当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?

首次适应算法 

算法思想:  每次都从低地址开始查找,找到第一个能满足大小的空闲分区。

如何实现:  空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

最佳适应算法 

算法思想:  由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区即,优先使用更小的空闲区。
如何实现:  空闲分区按容量递增次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

最坏适应算法

又称 最大适应算法 (Largest Fit)

算法思想:  为了解决最佳适应算法的问题-一即留下太多难以利用的小碎片,可以在每次分配时优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用。

如何实现: 空闲分区按容量递减次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

邻近适应算法 

算法思想:  首次适应算法每次都从链头开始查找的。这可能会导致低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次都从上次查找结束的位置开始检索,就能解决上述问题。

如何实现:  空闲分区以地址递增的顺序排列 (可排成一个循环链表)。每次分配内存时从上次查找结束的位置开始查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

总结 


非连续分配管理方式

为用户进程分配的可以是一些分散的内存空间

基本分页存储管理的基本概念 

页表

        记录了页面实际存放的内存块之间的映射关系

        为了便于在内存中找到进程的每个页面对应的物理块,系统为每个进程建立一张页表,记录页面在内存中对应的物理块号,页表一般放在内存中

页表项:

        页号+物理内存中的块号(不要与地址结构搞混)页表项的物理内存块号+地址结构中的页内偏移=物理地址

总结


基本地址变换机构 

用于实现逻辑地址到物理地址转换的一组硬件机构

总结


具有快表的地址变换机构

局部性原理

TLB和普通Cache 的区别--TLB 中只有表项的副本,而普通Cache 中可能会有其他各种数据的副本 


两级页表 
  • 根据页号查询页表的方法: K 号页对应的页表项存放位置 = 页表始址 + K*4要在所有的页表项都连续存放的基础上才能用这种方法找到页表项
  • 根据局部性原理可知,很多时候,进程在一段时间内只需要访问某几个页面就可以正常运行了。因此没有必要让整个页表都常驻内存。

由上述分析可得到单级页表的问题如下: 

  • 页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框.
  • 没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。


基本分段存储管理

与“分页”最大的区别就是--离散分配时所分配地址空间的基本单位不同


分段、分页管理的对比

分段比分页更容易实现信息的共享和保护 

不能被修改的代码称为纯代码或可重入代码 (不属于临界资源),这样的代码是可以共享的。可修改的代码是不能共享的(比如,有一个代码段中有很多变量,各进程并发地同时访问可能造成数据不一致)


段页式管理方式 


虚拟内存管理

传统存储管理方式的特征、缺点

虚拟内存的定义和特征 

  • 多次性:作业在运行时,分多次调入内存运行
  • 对换性:作业不必一直驻留内存,允许作业在运行过程中进行换进换出
  • 虚拟性:从逻辑上扩充内存容量,使用户看到的内存容量远大于实际的内存容量

如何实现虚拟内存技术

        虚拟内存技术,允许一个作业分多次调入内存。如果采用连续分配方式,会不方便实现。因此,虚拟内存的实现需要建立在离散分配的内存管理方式基础上。

主要思想:在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存

  • 操作系统要提供请求调页 (或请求调段) 功能
  • 操作系统要提供页面置换 或段置换) 的功能


请求分页管理方式 

请求页表 

缺页中断

地址转换流程 


页面置换算法

最佳置换算法 (OPT)

        最佳置换算法 (OPT,Optimal):  每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。

最佳置换算法可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面访问序列。因此,最佳置换算法是无法实现的。 


先进先出置换算法 (FIFO) 

        先进先出置换算法(FIFO): 每次选择淘汰的页面是最早进入内存的页面

        实现方法:把调入内存的页面根据调入的先后顺序排成一个队列,需要换出页面时选择队头页面即可

        队列的最大长度取决于系统为进程分配了多少个内存块。


最近最久未使用置换算法(LRU)

最近最久未使用置换算法 (LRU,least recently used): 每次淘汰的页面是最近最久未使用的页面

实现方法: 赋予每个页面对应的页表项中,用访问字段记录该页面自上次被访问以来所经历的时间t.当需要淘汰一个页面时,选择现有页面中t值最大的,即最近最久未使用的页面。


时钟置换算法 (CLOCK)


改进型CLOCK算法 


页面分配策略

驻留集

        驻留集:  指请求分页存储管理中给进程分配的物理块的集合。
在采用了虚拟存储技术的系统中,驻留集大小一般小于进程的总大小。

考虑一个极端情况,若某进程共有100个页面,则该进程的驻留大小为100时进程可以全部放入内存,运行期间不可能再发生决页。若驻留集大小为1,则进程运行期间必定会极频繁地缺页


页面分配、置换策略 
  • 固定分配:操作系统为每个进程分配一组固定数目的物理块,在进程运行期间不再改变。即,驻留集大小不变
  • 可变分配:先为每个进程分配一定数目的物理块,在进程运行期间,可根据情况做适当的增加或减少。即,驻留集大小可变 
  • 局部置换:发生缺页时只能选进程自己的物理块进行置换。
  • 全局置换:可以将操作系统保留的空闲物理块分配给缺页进程,也可以将别的进程持有的物理块置换到外存,再分配给缺页进程。


页面调动时机策略
  • 预调页策略:根据局部性原理,一次调入若工个相邻的页面可能比一次调入一个页面更高效。但如果提前调入的页面中大多数都没被访问过,则又是低效的。因此可以预测不久之后可能访问到的页面,将它们预先调入内存,但目前预测成功率只有50%左右。故这种策略主要用于进程的首次调入由程序员指出应该先调入哪些部分。(运行前调入)
  • 请求调页策略:进程在运行期间发现缺页时才将所缺页面调入内存。由这种策略调入的页面一定会被访问到,但由于每次只能调入一页,而每次调页都要磁盘I/0操作,因此I/0开销较大。(运行时调入)

页面调动位置策略 


抖动(颠簸)现象 


内存映射文件 

内存映射文件一一操作系统向上层程序员提供的功能(系统调用)

  • 方便程序员访问文件数据
  • 方便多个进程共享同一个文件
传统文件访问方式

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的教务管理系统运行教程

文章目录 1、前期必备1.1、所需软件版本说明1.2、下载源码1.3、下载开发工具1.4、下载JDK并配置环境变量1.5、安装数据库和数据库管理工具1.6、安装配置Maven 2、将SQL文件导入到数据库2.1、新建MySQL连接2.2、新建数据库并导入SQL 3、用Eclipse运行程序3.1、导入educationalMa…

极值点偏移2

已知 f ( x ) ln ⁡ x x f\left(x\right) \frac{\ln x}{x} f(x)xlnx​&#xff0c;若 f ( x ) a f\left(x\right) a f(x)a有两个不用的零点 x 1 , x 2 x_1, x_2 x1​,x2​&#xff0c;且 x 1 < x 2 x_1<x_2 x1​<x2​&#xff0c;求证&#xff1a; &#xff08;1…

uniapp无感刷新token实现过程

路漫漫其修远兮&#xff0c;前端道路逐渐迷茫&#xff0c;时隔好久好久终于想起了我还有一个小博客&#xff0c;最近在一直在弄uniapp&#xff0c;属实有被恶心到&#xff0c;但也至少会用了&#xff0c;最近实现了一个比较通用的功能&#xff0c;就是无感刷新token&#xff0c…

解决XXLJOB重复执行问题--Redis加锁+注解+AOP

基于Redis加锁注解AOP解决JOB重复执行问题 现象解决方案自定义注解定义AOP策略redis 加锁实践 现象 线上xxljob有时候会遇到同一个任务在调度的时候重复执行&#xff0c;如下图&#xff1a; 线上JOB服务运行了2个实例&#xff0c;有时候会重复调度到同一个实例&#xff0c;有…

Android推送问题排查

针对MobPush智能推送服务在使用过程中可能出现的问题&#xff0c;本文为各位开发者们带来了针对MobPush安卓端推送问题的解决办法。 TCP在线推送排查 排查TCP在线收不到推送时&#xff0c;我们先通过客户端的RegistrationId接口获取设备的唯一标识 示例&#xff1a; MobPush…

C#通过Entity Framework实体对数据表增删改查

目录 一、创建实体数据模型 1.建立数据库连接 2.建立EF实体模型 二.设计窗体和EF应用 1.窗体设计 2.应用程序设计 3.源码 4.生成效果 &#xff08;1&#xff09;查询 &#xff08;2&#xff09;修改 &#xff08;3&#xff09;删除 &#xff08;4&#xff09;增加 …

Ubuntu桌面环境的切换方法

你在找它吗&#xff1f; 国内麒麟、深度等系统虽然界面更炫&#xff0c;但——软件仓库与Ubuntu官方已不兼容。国内系统遇到稳定性问题&#xff0c;还是得拿Ubuntu做参照。今天本来介绍下这款Linux桌面。 为什么在 Ubuntu 上考虑 LXQt&#xff1f; 性能&#xff1a;LXQt设计为…

Uniapp软件库源码 全新带勋章功能(包含前后端源码)

Uniapp软件库全新带勋章功能&#xff0c;搭建好后台 在前端找到 util 这个文件 把两个js文件上面的填上自己的域名&#xff0c; 电脑需要下载&#xff1a;HBuilderX 登录账号 没有账号就注册账号&#xff0c;然后上传文件&#xff0c;打包选择 “发行” 可以打包app h5等等。…

【TES600】青翼科技基于XC7K325T与TMS320C6678的通用信号处理平台

板卡概述 TES600是一款基于FPGA&#xff0b;DSP协同处理架构的通用高性能实时信号处理平台&#xff0c;该平台采用1片TI的KeyStone系列多核浮点/定点DSP TMS320C6678作为主处理单元&#xff0c;采用1片Xilinx的Kintex-7系列FPGA XC7K325T作为协处理单元&#xff0c;具有1个FMC…

Youtrack Linux 安装

我们考虑最后应该使用的是 ZIP 方式的安装。 按照官方的说法如何设置运行 YouTrack 应该是非常简单的。 准备环境 根据官方的说法&#xff0c;我们需要做的就是下载 Zip 包&#xff0c;然后把 Zip 包解压到指定的目录中就可以了。 下载 当前官方的下载地址为&#xff1a;Ge…

Docker(五)、容器间数据共享~volume

容器间数据共享&#xff5e;volume 一、简单了解二、有两种通过命令设置数据卷的方法一&#xff09;、方式1. 通过 -v 挂载宿主机目录1、格式2、浅实践下 二&#xff09;、方式2.实现形式&#xff1a;通过共享容器内挂载点--volumes-from&#xff0c;其他容器指定此挂载点1、格…

【计算机毕设选题推荐】口腔助手小程序SpringBoot+Vue+小程序

前言&#xff1a;我是IT源码社&#xff0c;从事计算机开发行业数年&#xff0c;专注Java领域&#xff0c;专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 项目名 基于SpringBoot的口腔助手小程序 技术栈 SpringBootVue小程序MySQLMaven 文章目录 一、口腔…

java-各种成员变量初始化过程-待完善

前置条件 一、本文章讨论的成员变量 public static final String aa "aa";public static final Integer bb 1;public static final Students cc new Students();public static String aa1 "aa";public static Integer bb1 1;public static String bb2…

MySQL基本操作之修改表结构

1、末尾增加字段 在表结构末尾增加一个名为 beizhu 的字段,类型为 varchar(250),并添加注释 trie: ALTER TABLE student ADD beizhu VARCHAR(250) COMMENT trie; 2、在表结构开头增加一个名为 xxx 的字段,类型为 varchar(20): ALTER TABLE student ADD xxx VARCHAR(20)…

Redis在分布式场景下的应用

分布式缓存 缓存的基本作用是在高并发场景下对应服务的保护缓冲 – 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题&#xff1a; redis由于高强度性能采用内存 但是意味着丢失的风险单结点redis并发能力有限分布式服务中数据过多 依赖内存的redis 明显单机不…

深度学习技巧应用29-软件设计模式与神经网络巧妙结合,如何快速记忆软件设计模式

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下软件设计模式与神经网络巧妙结合&#xff0c;如何快速记忆软件设计模式。我们知道软件设计模式有23种&#xff0c;考试的时候经常会考到&#xff0c;但是这么种里面我们如何取判断它呢&#xff0c;如何去记忆它呢&a…

Day5力扣打卡

打卡记录 对角线上不同值的数量差&#xff08;矩阵对角线遍历 前缀和&#xff09; 链接 思路&#xff1a;由于任意行 i 与 列 j&#xff0c;满足对角线上 i j t 的关系&#xff0c;t 的范围为 [1 - n, m - 1]&#xff0c;设 s t n&#xff0c;可以得到 s的范围为 [1, n …

uniapp接入萤石微信小程序插件

萤石官方提供了一些适用于uniapp / 小程序的方案 如 小程序半屏 hls rtmp 等 都TM有坑 文档写的依托答辩 本文参考了uniapp小程序插件 以及 萤石微信小程序插件接入文档 效果如下 1. 插件申请 登录您的小程序微信公众平台&#xff0c;点击左侧菜单栏&#xff0c;进入设置页…

盒式交换机堆叠配置

目录 1.配置环形拓扑堆叠 2.设备组建堆叠 3.设备组件堆叠 堆叠 istack&#xff0c;是指将多台支持堆叠特性的交换机设备组合在一起&#xff0c;从逻辑上组合成一台交换设备。如图所示&#xff0c;SwitchA与 SwitchB 通过堆叠线缆连接后组成堆叠 istack&#xff0c;对于上游和…

电流监测芯片SGM8199A2应用电路设计

SGM8199是一系列具有电压输出功能的双向电流监测芯片&#xff0c;用于监测共模电压范围内分流电阻上的压降&#xff0c;而不受电源电压的影响。该器件具有-0.1V至26V的宽共模电压范围输入。低偏移使得在监测电流时允许分流器上的满量程最大压降为10mV。SGM8199系列提供三种固定…