让系统更安全之锁定内存
2012-07-25 21:54
253 查看
转载请注明出处:/article/1392269.html
Linux 实现了请求页面调度,页面调度是说页面从硬盘按需交换进来,当不再需要的时候交换出去。这样做允许系统中每个进程的虚拟地址空间和实际物理内存的总量再没有直接的联系,因为在硬盘上的交换空间能给进程一个物理内存几乎无限大的错觉。
交换对进程来说是透明的,应用程序一般都不需要关心(甚至不需要知道)内核页面调度的行为。然而,在下面两种情况下,应用程序可能像影响系统的页面调度:
确定性(Determinism)
时间约束严格的应用程序需要确定的行为。如果一些内存操作引起了页错误,导致昂贵的磁盘操作,应用程序的速度便不能达到要求,不能按时做计划中的操作。如果能确保需要的页面总在内存中且从不被交换进磁盘,应用程序就能保证内存操作不会导致页错误,提供一致的,可确定的程序行为,从而提供了效能。
安全性(Security)
如果内存中含有私人秘密,这秘密可能最终被页面调度以不加密的方式储存到硬盘上。
例如,如果一个用户的私人密钥正常情况下是以加密的方式保存在磁盘上的,一个在内存中为加密的密钥备份最后保存在了交换文件中。在一个高度注重安全的环境中,这样做可能是不能被接受的。这样的应用程序可以请求将密钥一直保留在物理内存上。当然,改变内核的行为会导致系统整体性能的负面影响。当页面被锁定在内存中,一个应用程序的安全性可能提高了,但这能使得另外一个应用程序的页面被交换出去。如果内核的设计是值得信任的,它总是最优地将页面交换出去(看上去将来最不会被使用的页面)。
如果用户不希望某块内存在暂时不用时置换到磁盘上,可以对该内存进行内存锁定。
相关函数如下:
函数:mlock锁定一片内存区域,addr为内存地址,length要锁定的长度。
munlock接触已锁定的内存
mlockall一次锁定多个内存页。flag取值有两个MCL_CURRENT锁定所用内存页,MCL_FUTURE锁定为进程分配的地址空间内存页。munlockall用于解除锁定的内存。
注:只有超级用户才能进行锁定和解除内存操作。
Linux 实现了请求页面调度,页面调度是说页面从硬盘按需交换进来,当不再需要的时候交换出去。这样做允许系统中每个进程的虚拟地址空间和实际物理内存的总量再没有直接的联系,因为在硬盘上的交换空间能给进程一个物理内存几乎无限大的错觉。
交换对进程来说是透明的,应用程序一般都不需要关心(甚至不需要知道)内核页面调度的行为。然而,在下面两种情况下,应用程序可能像影响系统的页面调度:
确定性(Determinism)
时间约束严格的应用程序需要确定的行为。如果一些内存操作引起了页错误,导致昂贵的磁盘操作,应用程序的速度便不能达到要求,不能按时做计划中的操作。如果能确保需要的页面总在内存中且从不被交换进磁盘,应用程序就能保证内存操作不会导致页错误,提供一致的,可确定的程序行为,从而提供了效能。
安全性(Security)
如果内存中含有私人秘密,这秘密可能最终被页面调度以不加密的方式储存到硬盘上。
例如,如果一个用户的私人密钥正常情况下是以加密的方式保存在磁盘上的,一个在内存中为加密的密钥备份最后保存在了交换文件中。在一个高度注重安全的环境中,这样做可能是不能被接受的。这样的应用程序可以请求将密钥一直保留在物理内存上。当然,改变内核的行为会导致系统整体性能的负面影响。当页面被锁定在内存中,一个应用程序的安全性可能提高了,但这能使得另外一个应用程序的页面被交换出去。如果内核的设计是值得信任的,它总是最优地将页面交换出去(看上去将来最不会被使用的页面)。
如果用户不希望某块内存在暂时不用时置换到磁盘上,可以对该内存进行内存锁定。
相关函数如下:
#include <sys/types.h> int mlock(const void *addr,size_t length) int munlock(void *addr,size_t length) int mlockall(int flag) int munlockall(void
函数:mlock锁定一片内存区域,addr为内存地址,length要锁定的长度。
munlock接触已锁定的内存
mlockall一次锁定多个内存页。flag取值有两个MCL_CURRENT锁定所用内存页,MCL_FUTURE锁定为进程分配的地址空间内存页。munlockall用于解除锁定的内存。
注:只有超级用户才能进行锁定和解除内存操作。
相关文章推荐
- 那年,一步一步学linux c ---让系统更安全之锁定内存~~~
- mongodb 对内存的占用监控 ——mongostat,linux系统可用的内存是free + buffers + cached
- 一次项目实战 mysql 1000万 数据优化、系统cpu 99% 内存 88%
- linux内核情景分析{中断 系统调用 内存}
- centos inux 系统的负载与CPU、内存、硬盘、用户数监控shell脚本
- C/C++获取Linux系统CPU和内存及硬盘使用情况
- 让系统更安全-网管必知十四大安全策略
- 破解32位NT6内核系统(vista/win7)的内存限制,完美支持4GB至128GB内存,全新教程!(转)
- 采用伙伴系统算法编写内存分配和回收模拟程序
- 系统共享内存的修改(ORA-27102: out of memory)
- windows7系统怎么自定义系统任务栏(未锁定状态)
- 使用python获取CPU和内存信息(linux系统)
- 20170805Windows12_4_获取系统内存大小及空间内存
- 使用WSH和WMI实现定时记录系统CPU和内存使用率
- Centos5 32bit系统显示4G内存的解决方法
- VMware Workstation虚拟机中的linux系统打不开,提示“锁定文件失败 打不开磁盘“错误的解决方法
- 系统调用、内存分配和持久连接
- 软件渲染器、内存文件系统
- 第五十五课 linux系统调优 之cpu、内存、网络、I/O
- LINUX下利用特殊文件系统shm 实现内存的共享