Linux C lock pages
虚拟内存按页划分,我们可以明确告诉系统:某一个虚拟内存页需要和实际内存帧相关联。这样一来,该内存页就被换进来了,而且不会被系统换出去。这一行为叫做锁页(locking a page)。
一般来讲页的换进换出是透明的,一般程序接触不到这一层。但是呢,锁页可以为我们带来如下好处:
1、速度:如果你的程序对速度有严格的要求,页错误导致页的换进换出会浪费掉一定的事件。当然为了提高程序速度,你可能还需要提高程序的优先级。
2、隐私安全:没错锁页可以让你的程序更加安全。如果你的密码恰好存放在某一页上,而这一页恰好被换出到硬盘的交换区,别人就有更多的机会获取你的密码了。
然而你不能锁太多的页(这样就抢了别的程序的资源)
具体细节:
内存锁只面向虚拟页,实际内存我们不关心。一个实际内存页可以对应多个虚拟内存页,只要有一个虚拟内存页是锁着的,实际物理内存页就不会被换出。
你不可以给一个虚拟内存页叠加锁,最多只能有一把锁。
内存锁在两种情况下会被解开:1、进程自行解锁,2、进程退出,一个进程对应一个虚拟内存,这时候其对应的虚拟内存无效,可以理解虚拟内存页解锁了(门都没了还要锁干嘛?)。
内存锁无法被子进程继承,(注意:现在的UNIX系统中,一旦进行fork操作产生子进程后,子进程和父进程的虚拟内存对应这相同的实际内存帧页。虽然没有继承锁,但实际享受到了所带来的好处)
由于会对其他进程带来影响,所以只有超级用户才可以锁页。但任何进程都可以解锁页。
系统会对一个进程可以锁多少内存加以限制。
即便两个虚拟内存页没有共享内存,但内核仍可能会把两个虚拟内存页关联到同一个内存帧。(事关效率,两个虚拟内存页具有完全相同的数据,为何要用两个不同的内存帧与之对应)如果有一个虚拟内存页发生数据修改,内核会进行写时复制(copy-on-write)。
相关函数:
mlock:
int mlock (const void *addr, size_t len)
//以addr为起始地址,len为长度的内存块所在页锁起来。(如果页本来被唤出了,这时候页会被调入,然后锁起来)
//返回值详见man手册
munlock:
int munlock (const void *addr, size_t len)
//执行与mlock相反的操作,解锁
还有其他的一些函数: mlockall和unmallocall。不多介绍了。
Linux C lock pages的更多相关文章
- Linux传统Huge Pages与Transparent Huge Pages再次学习总结
Linux下的大页分为两种类型:标准大页(Huge Pages)和透明大页(Transparent Huge Pages).Huge Pages有时候也翻译成大页/标准大页/传统大页,它们都是Hu ...
- Linux Kernel Synchronization && Mutual Exclusion、Linux Kernel Lock Mechanism Summarize
目录 . 内核锁机制 . 同步与互斥 . 锁定内存总线原子操作 . 信号量 . 自旋锁 . RCU机制 . PERCPU变量 . 内存和优化屏障 . 读者/写者锁 . 大内核锁 . 互斥量 1. 内核 ...
- Linux Transparent Huge Pages 对 Oracle 的影响
1 Transparent Huge Pages 说明 官网上有2篇文章对THP 做了说明: https://access.redhat.com/solutions/46111 https://acc ...
- SQL Server 2017 on Linux
此文转载,原文地址:https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-whats-new CTP 2.0 The CTP 2.0 ...
- [Linux] Linux下谁在消耗我们的cache
一.缘由: 曾经看到MySQL服务器上Cache占用特别大,其实大家都知道这是合理的,这些都是可用内存: 那么问题来了,是谁在占用这些Cache呢?如果去掉不合理的Cache占用,系统内存会更充分的得 ...
- Linux 驱动开发
linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...
- mutex,thread(c++11 windows linux三种方式)
一 c++11 windows linux三种方式 //#include <stdio.h> //#include <stdlib.h> //#include <uni ...
- 转:如何在32位程序中突破地址空间4G的限制
//如何在32位程序中突破地址空间4G的限制 //首先要获得内存中锁定页的权限 #define _WIN32_WINNT 0x0501 //xp系统 #include <windows.h> ...
- 配置SQL Server去使用 Windows的 Large-Page/Huge-Page allocations
配置SQL Server去使用 Windows的 Large-Page/Huge-Page allocations 目录表->页表->物理内存页 看这篇文章之前可以先看一下下面这篇文章 ...
随机推荐
- 苹果浏览器Safari对html标签submit按钮的默认渲染
-webkit-appearance: none; 上面的设置就告诉Safari不要使用默认渲染,使用我们写好的 有这么一个webkit的私有属性: -webkit-appearance:none; ...
- winscp ppk无需密码登录(失败)
http://blog.csdn.net/catoop/article/details/8284803 按上文将Linux下生成的密钥文件id_rsa通过puttygen生成对应的.ppk文件,用wi ...
- 使用搜狐Sendcloud的Webapi发送邮件:Jodd和Apache Httpclient
最近,在使用搜狐Sendcloud发邮件. Sendcloud提供http格式的webapi,方便地发送邮件,当然是要付费的. 很早之前,http工具一直用Httpclient,后来觉得jodd ...
- 【codeforces 758A】Holiday Of Equality
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- [React Router v4] Style a Link that is Active with NavLink
We often need to be able to apply style to navigation links based on the current route. In React Rou ...
- php实现 明明的随机数
php实现 明明的随机数 一.总结 一句话总结: 1.asort是干嘛的? asort — 对数组进行排序并保持索引关系 2.从控制台取数据怎么取? trim(fgets(STDIN)) 3.多组测试 ...
- Thrift写RPC接口
Thrift总结(二)创建RPC服务 前面介绍了thrift 基础的东西,怎么写thrift 语法规范编写脚本,如何生成相关的语言的接口.不清楚的可以看这个<Thrift总结(一)介绍>. ...
- Jquery前端分页插件pagination同步加载和异步加载
上一篇文章介绍了Jquery前端分页插件pagination的基本使用方法和使用案例,大致原理就是一次性加载所有的数据再分页.https://www.jianshu.com/p/a1b8b1db025 ...
- 关于使用Timer定时监测网络是否ping通
项目需要连接某台具体服务端,如果连不上则实时提示,开始使用Timer实时检测 void timer_Tick(object sender, EventArgs e) { Ping pingSender ...
- LUOGU 1137 - 拓扑排序
传送门 题目分析 拓扑排序:将图从度为0的点不断的剥掉外层的点,即可得到拓扑序,再按照拓扑序进行一遍简单的dp. code #include<bits/stdc++.h> using na ...