初学者该如何熟悉Linux内存管理
目的.当原来的内容又要使用时,再读回内存.运行于Linux的程序只看到大量的可用内存,而不关心哪部分在磁盘上.当然,读写硬盘比真的内存慢(大约慢千倍),程序运行较慢.用做虚拟内存的这部分硬盘叫对换空间.
虚拟内存技术不仅仅让我们可以使用更多的内存,它还提供了下面这些功能: 1.巨大的寻址空间 操作系统让系统看上去有比实际内存大得多的内存空间.虚拟内存可以是系统中实际物理空间的许多倍.每个进程运行在其独立的虚拟地址空间中,这些虚拟空间相互之间都完全隔离开来,进程间不会互相影响.同时,硬件虚拟内存机构可以将内存的某些区域设置成不可写,这样可以保护代码与数据不会受恶意程序的干扰.
2.公平的物理内存分配 内存管理子系统允许系统中每个运行的进程公平地共享系统中的物理内存. 3.共享虚拟内存 尽管虚拟内存允许进程有其独立的虚拟地址空间,但有时也需要在进程之间共享内存.例如,有可能系统中有几个进程同时运行BASH命令外壳程序.为了避免在每个进程的虚拟内存空间内都存在BASH程序的拷贝,较好的解决办法是系统物理内存中只存在一份BASH的拷贝,并在多个进程间共享.动态库则是另外一种进程间共享执行代码的方式.共享内存可用来作为进程间通信(IPC)的手段,多个进程通过共享内存来交换信息.Linux支持SYSTEM V的共享内存IPC机制.
4.进程的保护 系统中的每一个进程都有自己的虚拟地址空间.这些虚拟地址空间是完全分开的,这样一个进程的运行不会影响其它进程,并且硬件上的虚拟内存机制是被保护的,内存不能被写入.这样可以防止迷失的应用程序覆盖代码的数据. 5.Linux虚拟内存实现机制 Linux虚拟内存的实现需要6种机制的支持:地址映射机制、内存分配回收机制、缓存和刷新机制、请求页机制、交换机制和内存共享机制. 内存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址.当用户程序运行时,如果发现程序中要用的虚地址没有对应的物理内存,就发出了请求页要求.如果有空闲的内存可供分配,就请求分配内存(于是用到了内存的分配和回收),并把正在使用的物理页记录在缓存中(使用了缓存机制).如果没有足够的内存可供分配,那么就调用交换机制;腾出一部分内存.另外,在地址映射中要通过TLB(翻译后援存储器)来寻找物理页;交换机制中也要用到交换缓存,并且把物理页内容交换到交换文件中,也要修改页表来映射文件地址.Linux虚拟内存实现原理见图1.
图1 Linux虚拟内存实现原理 6.虚拟内存容量设定 也许有人说,虚拟内存容量的设定应该分配2倍于物理内存,但这只是个规律.如果物理内存比较小,可以这样设定.如果有256MB物理内存或更多的话,就可以缩小虚拟内存.Linux会把大量的内存用做Cache,但在资源紧张时会收回.只要看到swap为0,或者该数很小就可以放心了,内存放着不用才是最大的浪费. 内存泄露和回收内存的方法 1.内存泄漏的定义 一般常说的内存泄漏是指堆内存的泄漏.堆内存是指程序从堆 |
||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |