使用mlock锁定地址空间zz

本文介绍了mlock和mlockall等函数如何将进程使用的部分或全部地址空间锁定在物理内存中,防止其被交换到swap空间。通过示例演示了不同情况下内存的使用情况,并讨论了锁定内存对系统资源的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过mlock可以将进程使用的部分或者全部的地址空间锁定在物理内存中,防止其被交换到swap空间。
对时间敏感的应用会希望全部使用物理内存,提高数据访问和操作的效率。
例如,memcached就提供锁定内存的选项,保证memcached使用内存全部在物理内存中。

内存是宝贵,也是有限的,将地址空间全部锁定在内存中是有危险的。
当锁定的地址空间比较大的时候,为了得到足够的物理内存,linux可能会干掉一些进程,回收内存。
所有mlock操作只能root用户进行。

  
NAME
       mlock, munlock, mlockall, munlockall – lock and unlock memory
SYNOPSIS
       #include <sys/mman.h>
       int mlock(const void *addr, size_t len);
       int munlock(const void *addr, size_t len);
       int mlockall(int flags);
       int munlockall(void);
mlock主要有上面四个函数,mlock和mlockall用来锁定地址空间,munlock和munlockall用来释放锁定。
  
#include <stdlib.h>
#include <stdio.h>
#include <sys/mman.h>
#include <string.h>
#include <errno.h>

int main(int argc, char *argv[]) {
    int mall_num = atoi(argv[1]);
    char *lock_mem = argv[2];
    char *t;

    if(strcmp(lock_mem,”true”) == 0) {
        int res = mlockall(MCL_CURRENT | MCL_FUTURE);
        if (res != 0) {
            printf(“warning: -k invalid, mlockall() failed: %s\n”,strerror(errno));
        }
    }

    t = (char *) calloc(mall_num,1048576);
    memset(t,0,sizeof(t));

    while(1)
    ;

    return 0;
}

用上面的代码来测试下mlock,两个参数,参数1是申请的内存大小,单位是M;参数2是地址锁定标志。
使用的是mlockall函数,后面的参数表示不仅锁定当前的地址空间,也要锁定将来申请的地址空间。

首先测试下不锁定地址空间的情况,查看内存占用通过top命令。
  
[hjl@sunwg test00]$ free
             total       used       free     shared    buffers     cached
Mem:        515340     109408     405932          0       4836      69248
-/+ buffers/cache:      35324     480016
Swap:      1048568      20812    1027756
  
当前系统的物理内存为512M,而交换空间为1G。

//测试1,申请内存100M,不锁定内存
=====================================================================
[hjl@sunwg test00]$ ./test.bin 100 false
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  536 hjl       25   0  101m 100m  260 R 50.0 19.9   0:12.12 test.bin   
 
内存使用101m,其中物理内存100m

//测试2,申请内存400M,不锁定内存   
=====================================================================
[hjl@sunwg test00]$ ./test.bin 400 false
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  539 hjl       25   0  401m 400m  260 R 49.9 79.5   0:08.53 test.bin   
 
内存使用401m,其中物理内存400m

//测试3,申请内存800M,不锁定内存
=====================================================================
[hjl@sunwg test00]$ ./test.bin 800 false
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  547 hjl       25   0  801m 467m   60 R 94.0 92.9   0:07.22 test.bin     
 
内存使用801m,其中物理内存467m,swap空间=801 – 467=334m
此时,物理内存不够用,会将一些内存交换到swap中

//测试4,申请内存100M,锁定内存
=====================================================================
[root@sunwg test00]# ./test.bin 100 true
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  582 root      25   0  101m 101m 1388 R 99.9 20.2   0:05.82 test.bin  
 
使用内存101m,均在物理内存中

//测试5,申请内存400M,锁定内存
=====================================================================
[root@sunwg test00]# ./test.bin 400 true
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
  585 root      25   0  401m 401m 1388 R 99.9 79.8   0:09.62 test.bin
 
使用内存401m,均在物理内存中 

//测试6,申请内存800M,锁定内存
=====================================================================
[root@sunwg test00]# ./test.bin 800 true

这时候没有申请成功,系统差点挂了,因为总的物理内存才512M。



内容概要:文章基于4A架构(业务架构、应用架构、数据架构、技术架构),对SAP的成本中心和利润中心进行了详细对比分析。业务架构上,成本中心是成本控制的责任单元,负责成本归集与控制,而利润中心是利润创造的独立实体,负责收入、成本和利润的核算。应用架构方面,两者都依托于SAP的CO模块,但功能有所区分,如成本中心侧重于成本要素归集和预算管理,利润中心则关注内部交易核算和获利能力分析。数据架构中,成本中心与利润中心存在多对一的关系,交易数据通过成本归集、分摊和利润计算流程联动。技术架构依赖SAP S/4HANA的内存计算和ABAP技术,支持实时核算与跨系统集成。总结来看,成本中心和利润中心在4A架构下相互关联,共同为企业提供精细化管理和决策支持。 适合人群:从事企业财务管理、成本控制或利润核算的专业人员,以及对SAP系统有一定了解的企业信息化管理人员。 使用场景及目标:①帮助企业理解成本中心和利润中心在4A架构下的运作机制;②指导企业在实施SAP系统时合理配置成本中心和利润中心,优化业务流程;③提升企业对成本和利润的精细化管理水平,支持业务决策。 其他说明:文章不仅阐述了理论概念,还提供了具体的应用场景和技术实现方式,有助于读者全面理解并应用于实际工作中。
内容概要:本文档详细介绍了基于霜冰优化算法(RIME)优化门控循环单元(GRU)融合注意力机制进行多变量时序预测的项目实例。项目旨在通过融合GRU和注意力机制,解决多变量时序数据的高维复杂性和非线性依赖问题,同时引入RIME优化算法实现全局智能参数优化,提高模型训练的稳定性和预测性能。项目涵盖了从数据预处理、模型构建、训练优化到部署应用的完整流程,并提供了详细的代码实现和GUI设计。此外,项目还讨论了多变量时序预测在智能制造、能源管理、智慧城市等多个领域的应用。 适合人群:具备一定编程基础,特别是对深度学习和优化算法有一定了解的研发人员和数据科学家。 使用场景及目标:①通过融合GRU和注意力机制,提升多变量时序数据的预测精度;②利用RIME优化算法解决模型训练中易陷入局部最优的问题,提高训练效率和模型泛化能力;③通过多样化的数据模拟技术增强模型泛化能力,适应复杂工业与城市时序数据的动态特征;④提供完整的开源实现和跨平台数据格式支持,促进学术界和工业界的共享与合作。 阅读建议:此资源不仅提供了代码编写和实现,更注重模型架构设计、优化算法原理及其在实际应用中的表现。因此,在学习过程中应结合理论知识和实践操作,理解模型的工作机制和优化策略,并通过调试代码加深对各个模块的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值