Linux的产生与发展,更多的应用与服务器,那么对于Linux的各个管理机制要很是清楚,一个完整的Linux系统主要有存储管理,内存管理,文件系统和进程管理等几方面组成,贴出一些之前学习过的一个很好的文章。与你们共享!如下主要说明Swap和Buffer Cache机制缓存
Linux支持虚拟内存(virtual memory),虚拟内存是指使用磁盘看成RAM的扩展,这样可用的内存的大小就相应地增大了。内核会将暂时不用的内存块的内容写到硬盘上,这样一来,这块内存就可用于其它目的。当须要用到原始的内容时,它们被从新读入内存。这些操做对用户来讲是彻底透明的;Linux下运行的程序只是看到有大量的内存可供使用而并无注意到时不时它们的一部分是驻留在硬盘上的。固然,读写硬盘要比直接使用真实内存慢得多(要慢数千倍),因此程序就不会象一直在内存中运行的那样快。用做虚拟内存的硬盘部分被称为交换空间(Swap Space)。服务器
通常,在交换空间中的页面首先被换入内存;若是此时没有足够的物理内存来容纳它们又将被交换出来(到其余的交换空间中)。若是没有足够的虚拟内存来容纳全部这些页面,Linux就会波动而不正常;但通过一段较长的时间Linux会恢复,但此时系统已不可用了。编辑器
有时,尽管有许多的空闲内存,仍然会有许多的交换空间正被使用。这种状况是有可能发生的,例如若是在某一时刻有进行交换的必要,但后来一个占用不少物理内存的大进程结束并释放内存时。被交换出的数据并不会自动地交换进内存,除非有这个须要时。此时物理内存会在一段时间内保持空闲状态。对此并无什么可担忧的,可是知道了是怎么一回事,也就无所谓了。ide
许多操做系统使用了虚拟内存的方法。由于它们仅在运行时才须要交换空间,以解决不会在同一时间使用交换空间,所以,除了当前正在运行的操做系统的交换空间,其它的就是一种浪费。因此让它们共享一个交换空间将会更有效率。性能
注意,若是会有几我的同时使用这个系统,他们都将消耗内存。然而,若是两我的同时运行一个程序,内存消耗的总量并非翻倍,由于代码页以及共享的库只存在一份。学习
Linux系统经常动不动就使用交换空间,以保持尽量多的空闲物理内存。即便并无什么事情须要内存,Linux也会交换出暂时不用的内存页面。这能够避免等待交换所需的时间:当磁盘闲着,就能够提早作好交换。操作系统
编辑推荐:合理配置SAMBA 让Unix与Windows轻松共享日志
能够将交换空间分散在几个硬盘之上。针对相关磁盘的速度以及对磁盘的访问模式,这样作能够提升性能。进程
与访问(真正的)的内存相比,磁盘的读写是很慢的。另外,在相应较短的时间内屡次读磁盘一样的部分也是常有的事。例如,某人也许首先阅读了一段 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)。这样,目录、超级块、其它文件系统的薄记数据以及非文件系统的磁盘数据均可以被缓冲了。
缓冲的效力主要是由它的大小决定的。缓冲过小的话等于没用:
它只能容纳一点数据,所以在被重用时,全部缓冲的数据都将被倾空。实际的大小依赖于数据读写的频次、相同数据被访问的频率。只有用实验的方法才能知道。
若是缓存有固定的大小,那么缓存太大了也很差,由于这会使得空闲的内存过小而致使进行交换操做(这一样是慢的)。为了最有效地使用实际内存,Linux自动地使用全部空闲的内存做为高速缓冲,当程序须要更多的内存时,它也会自动地减少缓冲的大小。
这就是通常状况下Linux内存的通常机制,固然Linux内存的运行机制远远比这个复杂,可是只有了解了这个机制,咱们管理服务器才能驾轻就熟!