首页 > 系统相关 >内存管理

内存管理

时间:2024-02-29 13:58:06浏览次数:29  
标签:管理 置换 内存 访问 算法 页表 页面

内存管理

使用物理内存,不安全。

交换:

运行时把进程载入内存,不运行时放回磁盘。利用基址寄存器和界限寄存器计算动态地址。没法动态分配堆内存。

覆盖:

把程序分为很多段,先装入段0,运行完段0再装入段1,有空间就放在段0上边,否则就覆盖段0。

虚拟内存:让程序只有一部分被调入内存的情况下运行。

动态分区分配算法

使用物理内存,程序载入找内存中连续的内存。

  • 首次适应算法:从低向高找。
  • 最佳适应算法:优先找空间最小的连续内存。
  • 最坏:优先找空间最大的连续内存。
  • 临近适应算法:从上次分配的内存地址开始往后找。

虚拟内存(分页技术)

将程序的地址空间分割成很多页,每一页的连续地址空间由操作系统映射到物理地址,这样进程中的所有地址可以写成:页号+页内偏移。进程不需要把所有页装入内存,只需维护一个页表(每个进程),如果该页号可以在页表查询到,将其映射到物理页号,物理页号+页内偏移就是物理地址。否则发生缺页中断,使用页面置换算法从页表中删除一页(如果该页修改位为1,则要将其写入硬盘再删除),然后将缺失的页从硬盘装入内存后再查询页表。

快表 TLB

提出快表是由于一个现象:大多数的程序会频繁访问其中少量页面。所以将这些少量页面制作一个快表加速虚拟地址转换。

与页表对应的是MMU中的快表,访问快表(寄存器)要比访问页表(内存)快得多,由于快表中虚拟页号不是连续的,没法使用索引的方法访问,但MMU内部会并行检查所有快表项。

页面置换算法

发生缺页中断时需要从内存中选择一个页面置换出去。

最优页面置换算法

前提知道页面访问序列,然后淘汰未来最远会访问到的页面。

NRU最近未使用(时钟置换算法)

将一个页面用读写(R,M)位标记,分为4类页面:

  1. 没访问,没修改(0,0)
  2. 没访问,修改过(0,1)
  3. 访问过,没修改(1,0)
  4. 访问过,修改过(1,1)

将所有页面组成一个循环队列,最多扫描4轮。

  • 第一轮:遇到R=0 and M=0时置换。(0,0)
  • 第二轮:遇到R=0 and M=1时置换,同时将扫过的节点R置为0。(0,1)
  • 第三轮:遇到R=0 and M=0时置换。(1,0)
  • 第三轮:遇到R=0 and M=1时置换。(1,1)

LRU 最近最久未使用

访问过的页面放在队首,队尾页面淘汰。具体实现:用哈希表映射到双向链表节点,同时维护队首和队尾节点,这样get和put操作可以达到O(1)。

工作集页面置换

一个进程过去k秒使用的页面集合被称为它的工作集。如果内存无法容下整个工作集,那运行过程会产生很多缺页中断,称为颠簸。淘汰没有在工作集中的页面。

分段

使得代码和数据在逻辑上被分开,段是一个逻辑实体。

标签:管理,置换,内存,访问,算法,页表,页面
From: https://www.cnblogs.com/hellozhangjz/p/18043529

相关文章

  • 内存淘汰策略
    1、不进行数据淘汰的策略noeviction(Redis3.0之后,默认的内存淘汰策略):它表示当运行内存超过最大设置内存时,不淘汰任何数据,这时如果有新的数据写入,则会触发OOM,但如果没有数据写入的话,只是单纯的查询或者删除操作的话,还是可以正常工作。2、进行数据淘汰的策略针对「进行数据淘汰......
  • logger & journalctl,LINUX日志管理
    简介:有时候写一些linux系统脚本,外加定时任务,总是希望能看到日志,所以就有了各种骚操作。一:自己写自己写入指定日志,并进行容量管理。#日志文件LOG_FILE=./log/log-$(date'+%Y-%m-%d').txtpath=./logcheck_logs(){if[!-d$path];thenmkdir$pathfi......
  • JAVA虚拟机系列: (一) . JDK1.6/ 1.7/ 1.8运行时内存分配简要图解
     注意:  1.本文讨论均为JDK官方版本,默认采用的HotSpot虚拟机;  2.图片为本人绘制,转载请标明出处;  3.本博均为个人理解,如有分歧,欢迎指正和讨论 从JDK1.6到1.8,运行时内存分配简图分别如下:  在JDK1.7中的HotSpot中,已经把原本放在方法区的字......
  • 数据过期删除策略与内存淘汰策略
    Redis中提供了三种过期删除的策略1)惰性删除惰性删除,当一个键值对过期的时候,只有再次用到这个键值对的时候才去检查删除这个键值对,也就是如果用不着,这个键值对就会一直存在。优点:对CPU是友好的,只有在取出键值对的时候才会进行过期检查,这样就不会把CPU资源花费在其他无关紧要......
  • 一位有着近 10 年 iOS 开发经验的全职爸爸如何高效管理时间?
    名字:Mindr开发者/团队:FlorianVates平台:iOS,iPadOS,Android正在开发中请简要介绍下这款产品有没有发现自己总是不断推迟待办事项的通知?Mindr以一种全新的方法来解决这个问题,它直观的界面设计将待办事项的进度直接显示在桌面上,就像查看Apple的电池小组件一样,......
  • IT发布管理,轻松部署软件
    我们带来了一项令人振奋的好消息,可有效缓解构建的质量相对劣质和发布的速度相对缓慢。ManageEngine卓豪推出了ServiceDeskPlusMSP中的IT发布管理,配备了可视化的工作流程,这是PSA-ITSM解决方案的一部分。有了这个新功能,您可以告别混乱,迎接精简和标准化的发布管理流程。 IT发......
  • PG用户权限管理
    参考文章1.https://www.cnblogs.com/zhoujinyi/p/10939715.html2.https://www.cnblogs.com/lijiaman/p/16558877.html具体实操创建一个可以登录的用户jack,且登陆密码是jack@123CREATEUSERjackLOGINwithPASSWORD'jack@123'授予jack连接数据库test_db的权限grantco......
  • L-BFGS-B(Limited-memory Broyden–Fletcher–Goldfarb–Shanno )算法理解 —— 内存
    本文主要讲下个人对数值优化算法中几种常见算法的理解。什么是优化算法?给出函数f(X),现在要求minf(X)时的X值,这就是最优化问题。1.共轭梯度法方程:A*x=b,A矩阵为对称正定矩阵,b为向量,目标为求解出向量x。个人认为共轭梯度法并不能被当做是一个真正的优化算法,因为共轭梯度......
  • 7-3. 场景管理和切换
    使用Addressable如下图所示安装Addressables打开Addressables创建AddressablesSettings创建完毕之后,就能在Assets目录下找到配置好的文件我们把默认的GroupName改成Scenes然后选择场景,勾选Addressable把场景变成Addressable之后,在BuildSettings里面......
  • Redis内存被占满的解决办法
    1、增加内存。不推荐,因为即使加大内存,以后还是会有内存被占满的可能,不能根本解决问题。2、使用RedisCluster3、使用内存淘汰策略redis2.6+版本,redis.conf中的默认的策略是noeviction,一共有八种:  其中,LRU是LeastRecentlyUsed的缩写,即最近最少使用;LFU是LeastFrequent......