提出四个问题及解答:
1)若进程在运行过程中,物理内存不足会发生什么?
2)为何进程在占用物理内存不变的情况下,系统的物理内存会增加?
3)为何程序的大小大于实际占用的物理内存?(假如程序30M,却只有20M物理内存)

4)malloc分配的内存,未体现在物理内存上?(分配了10M,物理内存可能还不足10M)

问题一:
与第一个问题相关的是一个swap的概念,简单来说就是将根据某一算法将部分物理内存页交换到硬盘或者其他存储设备,空出的内存页就可以为进程使用。
1)内存页在此可分为两种不同属性,一种为不可写的内存页(cache、程序的text段,共享库的内存映像以及只读数据文件等),一种为可写的内存页(进程数据、栈)等。
2)对不可写的内存页,可以简单的丢弃,因为内存页中的数据在需要的时候可以重新读入;对可写的内存页,在swap时,必须将它存储在swap file中,后续在使用的时候可以重新读回。

3)对于如何选择内存页进行swap,linux采用的算法是:每个内存页都有一个年龄,访问一次更新它的年龄属性,在swap时选择年老的内存页进行

问题二:
与第二个问题相关的是cache的概念,一般的平台都会有硬件cache,这是弥合cpu速率和内存读取速率的利器,有了它程序才能执行的够快。与此问题相关的cache则是一个cache buffer的概念。
1)buffer cache主要是为块设备驱动使用

2)块设备数据的读取效率较低,在读取是采用预读部分数据存放在cache中,就可以减少读取的次数,提高效率。

问题三:
与第三个问题相关的是虚拟存储的概念,进程在32位linux系统中内存地址空间大小为4G,物理内存可以远小于4G(如512M),实现虚拟存储主要是由linux的内存管理完成的(如线性地址到物理地址的映射等)。
1)要解释问题三,除了虚拟存储的概念外还需要两种技术,demand paging技术 和 问题1中的提到的swap
2)程序在开始执行时,开始只分配地址空间,并没有实际的物理内存分配,在需要用到时才分配内存页(demand paging技术),所以不执行的程序部分不会被导入内存。

3)若内存不足时会进行swap操作。

问题四:
与第四个问题相关的是延迟分配技术,linux总是认为用户需要的进程内存不是紧要的,在不对此内存进行操作的时候,并没有实际的物理内存分配给它。单纯的malloc接口只是进程地址空间的一个说明。

引文:

http://www.linuxjournal.com/article/10678
http://www.thegeekstuff.com/2012/02/linux-memory-swap-cache-shared-vm/

linux cache swap 以及 虚拟内存等的更多相关文章

  1. Linux中buffer/cache,swap,虚拟内存和page ++

    1.Buffer 和 cache Free 命令相对于top 提供了更简洁的查看系统内存使用情况: [apptest@vs022 ~]$ free -m               ——以MB为单位  ...

  2. Linux记录-Linux Swap分区虚拟内存相关解决方案

    Swap用途:Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区.当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临 ...

  3. [转]Linux 分区 swap

    如何合理设置Linux的swap分区 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://commandos.blog.51cto.c ...

  4. 揭开Linux操作系统的Swap交换区之谜

    揭开Linux操作系统的Swap交换区之谜 Swap,即交换区,除了安装Linux的时候,有多少人关心过它呢?其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要.通过调整Swap ...

  5. 【Linux】Swap与Memory

    背景介绍 Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级.所以,程序和数据如果在内存的话,会有非常快的读写速度.但是,内存的造价是要高于磁盘的,且内存的断电丢失数据也 ...

  6. 【Linux】Linux中Swap与Memory内存简单介绍

    背景介绍 对于Linux来说,其在服务器市场的使用已经占据了绝对的霸主地位,不可动摇.Linux的各种设计思想和使用也被传承(当然不乏各种黑Linux,而且黑的漂亮).Linux的很多独特的设计,对性 ...

  7. [svc]Linux中Swap与Memory内存简单介绍

    swap区域是干嘛的 cpu 内存(不常用到的进程swap区) 磁盘 当内存没有可用的,就必须要把内存中不经常运行的程序给踢出去.但是踢到哪里去,这时候swap就出现了. 背景介绍 对于Linux来说 ...

  8. linux初学者-swap分区篇

    linux初学者-swap分区篇 swap是虚拟内存,是在硬盘中分区一块区域,当内存占满但是又急迫需要时临时当作内存使用,使用效率低于内存.本文将对linux系统中swap分区的建立做一个简要介绍. ...

  9. linux 的swap、swappiness及kswapd原理【转】

    本文讨论的 swap基于Linux4.4内核代码 .Linux内存管理是一套非常复杂的系统,而swap只是其中一个很小的处理逻辑. 希望本文能让读者了解Linux对swap的使用大概是什么样子.阅读完 ...

随机推荐

  1. Composer 基本指令操作使用

    Composer 基本指令操作使用 註: 若 composer.phar 改名為 composer, 請自行將 "php composer.phar" 替換成 "comp ...

  2. 数学之路(3)-机器学习(3)-机器学习算法-PCA

    PCA 主成分分析(Principal components analysis,PCA),维基百科给出一个较容易理解的定义:“PCA是一个正交化线性变换,把数据变换到一个新的坐标系统中,使得这一数据的 ...

  3. <微信应用开发系列>定时刷新AccessToken

    微信内嵌H5站一直很火,很多公司也想借助微信的用户群和社交群来做点事情,所以对于各位代码君来说也算是一个研究方向吧. access_token是公众号的全局唯一票据,公众号调用各接口时都需使用acce ...

  4. js Date扩展Format()函数

    Date.prototype.Format = function (formatStr) { var str = formatStr; var Week = ['日', '一', '二', '三', ...

  5. K3整理

    当金蝶提示“该模块使用已超过正式版许可最大数!”,需要解决的办法是: 打开K3的“帐套管理”系统,“系统(S)”菜单-“系统使用状况(D)”-系统使用状态窗口,然后点击橡皮擦 删除即可了.

  6. C#中的表达式树的浅解

    表达式树可以说是Linq的核心之一,为什么是Linq的核心之一呢?因为表达式树使得c#不再是仅仅能编译成IL,我们可以通过c#生成一个表达式树,将结果作为一个中间格式,在将其转换成目标平台上的本机语言 ...

  7. 在java中生成二维码,并直接输出到jsp页面

    在java中生成的二维码不存到磁盘里要直接输出到页面上,这就需要把生成的二维码直接以流的形式输出到页面上,我用的是myeclipse 和 tomcat 它的原理是:在加载页面时,根据img的src(c ...

  8. Android应用中MVP最佳实践

    转自:http://www.jianshu.com/p/ed2aa9546c2c 文/Jude95(简书作者)原文链接:http://www.jianshu.com/p/ed2aa9546c2c著作权 ...

  9. symfony2 登录验证(转自http://www.newlifeclan.com/symfony/archives/300)

    注意:如果你需要为存储在某种数据库中的用户做一个登录表单,那么你应该考虑使用FOSUserBundle,这有助于你建立你的User对象,还为您提供了常见的登录.注册.忘记密码的路由和控制器. 在此文章 ...

  10. Jasper_chart_create a new stacked chart

    How to make a stacked chart 1, prepare data Source here we will create a csv file. 2, import/configu ...