首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

内存覆盖与交换

内存空间的扩充:覆盖技术,交换技术,虚拟存储技术 覆盖技术-解决程序大小超过物理内存总和问题(现在基本不用了),增加了编程负担 思想: 1)将程序分为多个段,常用的段常驻内存,不常用的段需要时调入内存...2)内存分为一个"固定区",若干个"覆盖区" 3)需要常驻的放在"固定区",调入后不在调出(除非运行结束) 4)不常用的段放在"覆盖区" 交换技术-将内存某些进程暂时换出外存,把外存某些具备运行条件的进程换入内存...(进程在内存与磁盘间动态调整),中级调度内存调度中的进程挂起 1)磁盘分为文件区和交换区,交换区使用连续分配方式,交换区的i/o速度比文件区更快 2)如果进程经常出现缺页,说明内存紧张,可以换出一些进程

92110

零拷贝内存 or 锁定内存

这是一个小实验,在于验证GPU上使用零拷贝内存锁定内存的性能差别。使用的是点积计算,数据量在100M左右。...实验步骤很简单,分别在主机上开辟普通内存锁定内存以及进行零拷贝内存的操作,看三者哪个完成的时间比较快,具体的代码在最后,这里是实验结果: ?...但是,锁定内存相比于零拷贝内存到底慢在哪里呢,当然是慢在从主机内存拷贝到显存的时间了,注释掉锁定的拷贝语句之后,可以得到以下结果: ?...ps:但是,奇怪的是,如果只将a,b内存拷贝的语句注释掉,锁定内存仍旧可以得到正确的结果,暂时想不明白是为什么 这时就要问了,看起来零拷贝比锁定要快啊,那还要这个锁定干嘛呢,当然是有用的,因为...,零拷贝的内容不能缓存在显存里,如果内容要被反复使用,零拷贝就要不停地从内存里取值,增加总线压力,这样相比锁定也就处于劣势。

1.9K50
您找到你想要的搜索结果了吗?
是的
没有找到

内存与IO的交换

swap分区可以将不活跃的交换到硬盘中,缓解内存紧张。swap分区可以当做针对匿名伪造的文件背景。...内核中有一个水位控制的机制,在系统内存不够用的时候,会触发页面回收。 对于没有文件背景的页面即匿名,比如堆、栈、数据段,如果没有swap分区,不能与磁盘交换,就要常驻内存了。...但是常驻内存的话,就会吃内存,可以通过给硬盘搞一个swap分区或硬盘中创建一个swap文件让匿名也能交换到磁盘上。可认为是为匿名伪造的文件背景。...zRAM机制 不用swap分区,也可以用zRAM机制来缓解内存紧张: 从内存里拿出一段内存空间(compressed block),作为交换空间模拟硬盘的交换分区,用来交换匿名,并且让kernel看到的物理内存大小不包括这段内存...而这段交换空间自带透明压缩功能,即交换到这块zRAM分区时,Linux会自动将这块匿名压缩存放。

2.5K31

Linux内存分配策略

但有时候内核需要分配一些物理内存地址也连续的内存, 所以Linux使用了 伙伴系统分配算法 来管理系统中的物理内存....在Linux内核中, 把两个物理地址相邻的内存当作成伙伴, 因为Linux是以页面号来管理内存的, 所以就是说两个相邻页面号的页面是伙伴关系....那么给定一个 i 号内存, 怎么找到他的伙伴内存呢? 通过观察我们可以发现, 如果页面号是复数的, 那么他的伙伴内存要加1, 如果页面号是单数的, 那么他的伙伴内存要减1....那么知道一个内存的伙伴页面有什么用呢?...答案是为了合并为更大的内存, 例如把两个单位为1的伙伴内存合并成为一个单位为2的内存(这时应该称为内存块), 把两个单位为2的伙伴内存块合并为单位为4的内存块, 以此类推.

3.2K10

MySQL 内存淘汰策略

MySQL客户端接收的慢,就会导致MySQL服务器由于结果发不出去,从而使该事务的执行时间变长。...如果某个Session的状态一直处于Sending to client状态,表示服务器端的网络栈写满了。...全表扫描对InnoDB的影响 当我们在查询数据的时候,会从磁盘上读取数据内存中,如果内存中的数据是最新的,可以直接读取内存也返回,不需要从磁盘上再次读取。...由于现在磁盘和内存的数据量完全是一个量级,因此很容易出现淘汰的现象。...如果按照普通的LRU算法,假设我们一个很大的查询需要淘汰掉绝大多数的内存,这将会导致Buffer Pool的内存命中率急速下降,磁盘压力增加,SQL语句会响应变慢。

1.4K10

LyScript 内存交换与差异对比

LyScript 针对内存读写函数的封装功能并不多,只提供了内存读取和内存写入函数的封装,本篇文章将继续对API进行封装,实现一些在软件逆向分析中非常实用的功能,例如内存交换内存区域对比,磁盘与内存镜像比较...插件地址:https://github.com/lyshark/LyScript内存区域交换: 实现被加载程序内特定一块内存区域的交换,该方法实现原理就是两个变量之间的交换,只是在交换时需要逐个字节进行...from LyScript32 import MyDebug# 交换两个内存区域def memory_xchage(dbg,memory_ptr_x,memory_ptr_y,bytes): ref...flag = memory_xchage(dbg, 6815744,6815776,4) print("内存交换状态: {}".format(flag)) dbg.close()PE...文件头节点交换后如下:图片内存区域对比: 可用于对比该进程内存中的特定一块区域的差异,返回是列表中的字典形式,分别传入对比内存x,y以及需要对比的内存长度,此处建议不要超过1024字节。

48520

内存与IO的交换【转】

swap分区可以将不活跃的交换到硬盘中,缓解内存紧张。swap分区可以当做针对匿名伪造的文件背景。...内核中有一个水位控制的机制,在系统内存不够用的时候,会触发页面回收。 对于没有文件背景的页面即匿名,比如堆、栈、数据段,如果没有swap分区,不能与磁盘交换,就要常驻内存了。...但是常驻内存的话,就会吃内存,可以通过给硬盘搞一个swap分区或硬盘中创建一个swap文件让匿名也能交换到磁盘上。可认为是为匿名伪造的文件背景。...zRAM机制 不用swap分区,也可以用zRAM机制来缓解内存紧张: 从内存里拿出一段内存空间(compressed block),作为交换空间模拟硬盘的交换分区,用来交换匿名,并且让kernel看到的物理内存大小不包括这段内存...而这段交换空间自带透明压缩功能,即交换到这块zRAM分区时,Linux会自动将这块匿名压缩存放。

65320

LyScript 内存交换与差异对比

LyScript 针对内存读写函数的封装功能并不多,只提供了内存读取和内存写入函数的封装,本篇文章将继续对API进行封装,实现一些在软件逆向分析中非常实用的功能,例如内存交换内存区域对比,磁盘与内存镜像比较...插件地址:https://github.com/lyshark/LyScript 内存区域交换: 实现被加载程序内特定一块内存区域的交换,该方法实现原理就是两个变量之间的交换,只是在交换时需要逐个字节进行...from LyScript32 import MyDebug # 交换两个内存区域 def memory_xchage(dbg,memory_ptr_x,memory_ptr_y,bytes):...(memory_ptr_x + index) read_byte_y = dbg.read_memory_byte(memory_ptr_y + index) # 交换内存...) PE文件头节点交换后如下: 内存区域对比: 可用于对比该进程内存中的特定一块区域的差异,返回是列表中的字典形式,分别传入对比内存x,y以及需要对比的内存长度,此处建议不要超过1024字节。

51420

Linux的内存回收和交换

如果回收内存可以有两种途径(匿名交换和file缓存清空),那么我应该考虑在本次回收的时候,什么情况下多进行file写回,什么情况下应该多进行swap交换。...如果符合交换条件的内存较长,是不是可以不用全部交换出去?比如可以交换内存有100M,但是目前只需要50M内存,实际只要交换50M就可以了,不用把能交换的都交换出去。...这在很多应用场景下可以提高效率,比如文件服务器,或者依赖内存中cache比较多的应用场景。...这时候我们就希望不要swap,即使出现oom-killer也造成不了太大影响,但是不能允许服务器因为IO卡死像多米诺骨牌一样全部死机,而且无法登陆。...就是说,如果目前需求100M内存,那么较大机率会从cache中清除50M内存,再将匿名换出50M,把回收到的内存给应用程序使用。但是这还要看cache中是否能有空间,以及swap是否可以交换50m。

4.6K52

Linux申请大内存(mmap)

---- 1.为什么要使用大内存   了解操作系统内存管理的人一般都知道操作系统对内存采用多级表和分页进行管理,操作系统每个默认大小为4KB。...如果进程使用的内存过大,比如1GB,这样会在表中占用 1GB / 4KB = 262144个表项,而系统TLB可以容纳的表项远小于这个数量。...操作系统默认支持的大是2MB,当使用1GB内存时,在表中将占用 1GB / 2MB = 512个表项,可以大大提升TLB命中率,进而提升应用性能。...---- 2.怎样使用大内存 2.1 先预留一定量的大内存 #先查看系统有多少已经预留的大内存 # cat /proc/meminfo |grep -i huge #预留192个大 # sysctl...\n"); getchar(); munmap(m, s); return 0; } ---- 3.最后的话 大内存的好处不仅是减少TLB未命中次数,而且大内存分配的是物理内存,不会被操作系统的内存管理换出到磁盘上

11.3K110

【Linux 内核 内存管理】物理内存组织结构 ⑥ ( 物理 page 简介 | 物理 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理 page 联系 )

文章目录 一、物理 page 简介 1、物理 page 引入 2、物理 page 与 MMU 内存管理单元 3、物理 page 结构体 4、Linux 内核源码中的 page 结构体 二、内存节点...pglist_data 与 物理 page 联系 内存管理系统 3 级结构 : ① 内存节点 Node , ② 内存区域 Zone , ③ 物理 Page , Linux 内核中 , 使用 上述...3 级结构 描述 和 管理 " 物理内存 " ; 一、物理 page 简介 ---- 1、物理 page 引入 " 内存节点 " node 是内存管理的 最顶层结构 , " 内存节点 " 再向下划分..., 就是 " 内存区域 " zone , " 内存区域 " 再向下划分 , 就是 " 物理 " page ; 2、物理 page 与 MMU 内存管理单元 在 Linux 内核中 , MMU 内存管理单元...#40 位置 ; 二、内存节点 pglist_data 与 物理 page 联系 ---- " 内存节点 " pglist_data 结构体 与 " 物理 " page 结构体 的联系 : 在 "

6.7K10

【Linux 内核 内存管理】内存映射原理 ② ( 内存映射概念 | 文件映射 | 匿名映射 | 内存映射原理 | 分配虚拟内存 | 产生缺页异常 | 分配物理内存 | 共享内存 | 进程内存 )

文章目录 一、内存映射概念 二、内存映射原理 1、分配虚拟内存 2、产生缺页异常 3、分配物理内存 三、共享内存 四、进程内存段的内存映射类型 一、内存映射概念 ---- 内存映射 概念 : "..." 物理内存空间 “ 映射到 ” 虚拟内存空间 " , 其中的数据是随机值 ; 二、内存映射原理 ---- 1、分配虚拟内存 分配 虚拟内存 : 在 Linux 系统中 创建 " 内存映射 “ 时..., 不会立即分配 物理内存 , 而是产生一个 ” 缺页异常 " ; 3、分配物理内存 分配 物理内存 : 缺页异常后的 2 种处理策略 ; 文件映射 : 对于 " 文件映射 " , 遇到 "...缺页异常 " 后 , 会 分配 " 物理内存 “ , 并且将 要映射的文件 的 部分数据 读取到 该 ” 物理内存 " 中 ; 匿名映射 : 对于 " 匿名映射 " , 直接分配 " 物理内存 “..., 并且在 " 表 “ 中 , 将 ” 虚拟内存 " 映射到 ” 物理内存 " ; 三、共享内存 ---- 内存映射 与 共享内存 关系 : 文件映射 : 在进程间的 " 共享内存 " 就是使用

8.2K20

操作系统:内存的替换

问题:虚拟被分配使用之后,在表中一定有到相应的物理的映射吗?答案是否定的。 举个例子:电脑只有4g内存,但是要同时打开一个占用3g内存和一个2g内存的游戏,怎么办呢?...预测还有哪些将要被访问,也将它们一并换入物理内存,减少发生缺页异常的次数。 按需分配 当应用程序申请分配内存时,操作系统可选择将新分配的虚拟标记为已分配但未映射至物理内存的状态。...替换策略 当需要分配物理时,若空闲的内存已经用完或者小于某个阈值,就需要通过替换策略将某些物理换出,以腾出物理内存的空间。...工作集是“一个程序在时间t的工作集W为它在时间区间[t-x,t]使用的内存集合,也被视为它在未来(下一段x时间内)会访问的内存集合”。...该追踪函数为每个内存维护两个状态:上次使用时间和访问位,均被初始化为0.每次调用,该函数都会检查每个内存的状态。

1K10

Linux swappiness参数设置与内存交换

简介 swappiness,Linux内核参数,控制换出运行时内存的相对权重。swappiness参数值可设置范围在0到100之间。...低参数值会让内核尽量少用交换,更高参数值会使内核更多的去使用交换空间。默认值为60(参考网络资料:当剩余物理内存低于40%(40=100-60)时,开始使用交换空间)。...swappiness参数值说明 vm.swappiness = 0 仅在内存不足的情况下--当剩余空闲内存低于vm.min_free_kbytes limit时,使用交换空间。...vm.swappiness = 1 内核版本3.5及以上、Red Hat内核版本2.6.32-303及以上,进行最少量的交换,而不禁用交换。...vm.swappiness = 10 当系统存在足够内存时,推荐设置为该值以提高性能。

10K20

【Linux 内核 内存管理】内存管理架构 ③ ( Linux 内核中的内存管理模块 | 分配器 | 不连续分配器 | 内存控制组 | 硬件设备内存管理 | MMU | 表缓存 | 高速缓存 )

文章目录 一、Linux 内核中的内存管理模块 二、硬件设备内存管理 一、Linux 内核中的内存管理模块 ---- Linux 内核还需要处理如下内容 : ① 错误异常处理 ② 表管理 ③ 引导内存分配器...: 分配器 , 块分配器 , 不连续分配器 , 连续内存分配器 , 每处理器内存分配器 ; " 分配器 " 负责分配 内存物理 , 使用的是 " 伙伴分配器 " ; " 不连续分配器 " 提供了...vmalloc 函数 用于分配内存 , vfree 函数 用于 释放内存 ; 申请的 " 不连续物理 “ 可以 映射到 ” 连续的虚拟 " ; ④ 内存碎片整理 ⑤ 内存耗尽处理 ⑥ 内存控制组...: 控制管理 被 进程 占用的 内存 ; 碎片整理 : 如果 " 内存碎片化 " 严重 , 没有连续物理 , 需要通过 整理内存碎片 并迁移数据 得到 连续的 物理 ; 内存回收 : 内存不足时 ,...回收内存 ; ⑦ 回收处理 二、硬件设备内存管理 ---- 硬件设备内存管理 : ① CPU 处理器 中的 " 内存管理单元 " ( MMU ) 和 高速缓存 ; ② 物理内存 在 " 内存管理单元

1.4K40
领券