首页 Linux内存中Swap和Buffer

Linux内存中Swap和Buffer

举报
开通vip

Linux内存中Swap和Buffer Linux 内存中 Swap和 Buffer Cache机制    Linux 的产生与发展,更多的应用与服务器,那么对于 Linux 的各个管理机制要 非常清楚,一个完整的 Linux 系统主要有存储管理,内存管理,文件系统和进程 管理等几方面组成,贴出一些以前学习过的一个很好的文章。与大家共享!以下 主要说明 Swap 和 Buffer Cache 机制 Linux 支持虚拟内存(virtual memory),虚拟内存是指使用磁盘当作 RAM 的扩展,这样可用的内存的大小就相应地增大了。内核会将暂...

Linux内存中Swap和Buffer
Linux 内存中 Swap和 Buffer Cache机制    Linux 的产生与发展,更多的应用与服务器,那么对于 Linux 的各个管理机制要 非常清楚,一个完整的 Linux 系统主要有存储管理,内存管理,文件系统和进程 管理等几方面组成,贴出一些以前学习过的一个很好的文章。与大家共享!以下 主要说明 Swap 和 Buffer Cache 机制 Linux 支持虚拟内存(virtual memory),虚拟内存是指使用磁盘当作 RAM 的扩展,这样可用的内存的大小就相应地增大了。内核会将暂时不用的内存块的 内容写到硬盘上,这样一来,这块内存就可用于其它目的。当需要用到原始的内 容时,它们被重新读入内存。这些操作对用户来说是完全透明的;Linux 下运行 的程序只是看到有大量的内存可供使用而并没有注意到时不时它们的一部分是 驻留在硬盘上的。当然,读写硬盘要比直接使用真实内存慢得多(要慢数千倍), 所以程序就不会象一直在内存中运行的那样快。用作虚拟内存的硬盘部分被称为 交换空间(Swap Space)。 一般,在交换空间中的页面首先被换入内存;如果此时没有足够的物理内存 来容纳它们又将被交换出来(到其他的交换空间中)。如果没有足够的虚拟内存 来容纳所有这些页面,Linux 就会波动而不正常;但经过一段较长的时间 Linux 会恢复,但此时系统已不可用了。 有时,尽管有许多的空闲内存,仍然会有许多的交换空间正被使用。这种情 况是有可能发生的,例如如果在某一时刻有进行交换的必要,但后来一个占用很 多物理内存的大进程结束并释放内存时。被交换出的数据并不会自动地交换进内 存,除非有这个需要时。此时物理内存会在一段时间内保持空闲状态。对此并没 有什么可担心的,但是知道了是怎么一回事,也就无所谓了。 许多操作系统使用了虚拟内存的方法。因为它们仅在运行时才需要交换空 间,以解决不会在同一时间使用交换空间,因此,除了当前正在运行的操作系统 的交换空间,其它的就是一种浪费。所以让它们共享一个交换空间将会更有效率。 注意,如果会有几个人同时使用这个系统,他们都将消耗内存。然而,如果 两个人同时运行一个程序,内存消耗的总量并不是翻倍,因为代码页以及共享的 库只存在一份。 Linux 系统常常动不动就使用交换空间,以保持尽可能多的空闲物理内存。 即使并没有什么事情需要内存,Linux 也会交换出暂时不用的内存页面。这可以 避免等待交换所需的时间:当磁盘闲着,就可以提前做好交换。 可以将交换空间分散在几个硬盘之上。针对相关磁盘的速度以及对磁盘的访 问模式,这样做可以提高性能。 yangkehai 高亮 与访问(真正的)的内存相比,磁盘的读写是很慢的。另外,在相应较短的 时间内多次读磁盘同样的部分也是常有的事。例如,某人也许首先阅读了一段 e-mail 消息,然后为了答复又将这段消息读入编辑器中,然后又在将这个消息 拷贝到文件夹中时,使得邮件程序又一次读入它。或者考虑一下在一个有着许多 用户的系统中 ls 命令会被使用多少次。通过将信息从磁盘上仅读入一次并将其 存于内存中,除了第一次读以外,可以加快所有其它读的速度。这叫作磁盘缓冲 (disk buffering),被用作此目的的内存称为高速缓冲(Buffer Cache)。 但是,由于内存是一种有限而又不充足的资源,高速缓冲不可能做的很大(它 不可能包容要用到的所有数据)。当缓冲充满了数据时,其中最长时间不用的数 据将被舍弃以腾出内存空间用于新的数据。 对写磁盘操作来说磁盘缓冲技术同样有效。一方面,被写入磁盘的数据常常 会很快地又被读出(例如,原代码文件被保存到一个文件中,又被编译器读入), 所以将要被写的数据放入缓冲中是个好主意。另一方面,通过将数据放入缓冲中, 而不是将其立刻写入磁盘,程序可以加快运行的速度。以后,写的操作可以在后 台完成,而不会拖延程序的执行。 大多数操作系统都有高速缓冲(尽管可能称呼不同),但是并不是都遵守上 面的原理。有些是直接写(write-through):数据将被立刻写入磁盘(当然, 数据也被放入缓存中)。如果写操作是在以后做的,那么该缓存被称为后台写 (write-back)。后台写比直接写更有效,但也容易出错:如果机器崩溃,或者 突然掉电,缓冲中改变过的数据就被丢失了。如果仍未被写入的数据含有重要的 薄记信息,这甚至可能意味着文件系统(如果有的话)已不完整。 针对以上的原因,出现了很多的日志文件系统,数据在缓冲区修改后,同时 会被文件系统记录修改信息,这样即使此时系统掉电,系统重启后会首先从日志 记录中恢复数据,保证数据不丢失。当然这些问题不再本文的叙述范围。 由于上述原因,在使用适当的关闭过程之前,绝对不要关掉电源,sync 命 令倾空(flushes)缓冲,也即,强迫所有未被写的数据写入磁盘,可用以确定 所有的写操作都已完成。在传统的 UNIX 系统中,有一个叫做 update 的程序运行 于后台,每隔 30 秒做一次 sync 操作,因此通常无需手工使用 sync 命令了。Linux 另外有一个后台程序,bdflush,这个程序执行更频繁的但不是全面的同步操作, 以避免有时 sync 的大量磁盘 I/O 操作所带来的磁盘的突然冻结。 在 Linux 中,bdflush 是由 update 启动的。通常没有理由来担心此事,但 如果由于某些原因 bdflush 进程死掉了,内核会对此作出警告,此时你就要手工 地启动它了(/sbin/update)。 缓存(cache)实际并不是缓冲文件的,而是缓冲块的,块是磁盘 I/O 操作 的最小单元(在 Linux 中,它们通常是 1KB)。这样,目录、超级块、其它文件 系统的薄记数据以及非文件系统的磁盘数据都可以被缓冲了。 缓冲的效力主要是由它的大小决定的。缓冲太小的话等于没用: yangkehai 高亮 yangkehai 高亮 yangkehai 高亮 yangkehai 高亮 yangkehai 高亮 yangkehai 高亮 yangkehai 高亮 yangkehai 高亮 yangkehai 高亮 yangkehai 高亮 yangkehai 高亮 它只能容纳一点数据,因此在被重用时,所有缓冲的数据都将被倾空。实际 的大小依赖于数据读写的频次、相同数据被访问的频率。只有用实验的方法才能 知道。 如果缓存有固定的大小,那么缓存太大了也不好,因为这会使得空闲的内存 太小而导致进行交换操作(这同样是慢的)。为了最有效地使用实际内存,Linux 自动地使用所有空闲的内存作为高速缓冲,当程序需要更多的内存时,它也会自 动地减小缓冲的大小。 这就是一般情况下 Linux 内存的一般机制,当然 Linux 内存的运行机制远远 比这个复杂,但是只有了解了这个机制,我们管理服务器才能得心应手!  
本文档为【Linux内存中Swap和Buffer】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_617163
暂无简介~
格式:pdf
大小:163KB
软件:PDF阅读器
页数:3
分类:互联网
上传时间:2011-10-14
浏览量:31