Linux操作系统内存管理
北京工业大学 操作系统软件课设 分析linux内存管理机制

任务2分析Linux内核—内存管理学号____________姓名____________指导教师____________2019年12月一、摘要本次系统软件课程设计,我们小组选择的题目是分析Linux内核-内存管理。
阅读该部分的代码、了解其运行机制,深入理解Linux内存管理的相关具体实现过程。
Linux中,内存管理主要由段页式来进行管理的,涉及虚拟内存技术。
这其中涉及到三个关键内容:①每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址。
②虚拟地址可通过每个进程上的页表与物理地址进行映射,获得真正的物理地址。
③如果虚拟地址对应的物理地址不在物理内存中,则产生缺页中断,真正分配物理地址,同时更新进程的页表;如果此时物理内存已经耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。
与虚拟内存相关的主要有:与进程相关的结构体、映射的形成等等。
与物理页面相关的主要有:内存的分配、页面的换入换出等等。
本文将尽可能通过对Linux内存管理的主要的代码函数、相关功能实现及结构区阐释Linux系统内存管理的实现方式。
二、关键词虚拟地址空间、用户空间、内核空间、物理内存、虚拟内存、内存分配、页分配与释放、页的换入和换出、内存块的分配与释放、栈的静态分配、缺页异常。
三、引言计算机中的存储器分为主存储器和辅助存储器。
因为实际主存储器的容量比较小而不能满足多道程序的要求,所以作为一种解决策略,采用将程序一部分装入主存,把当前不被执行的部分暂时存放在辅助存储器中,用到时再立即调入主存中。
Linux内存管理就使用了这种解决策略,也就是所谓的虚拟内存技术。
基于此,我们将在这里阐述Linux内存管理技术,包括它的内存管理策略、内存分配策略、内存映射技术、内存交换、页面失效处理等等。
我们小组一共两位成员:郑鑫(17071101)、侯宇(17071125)。
考虑到每个文件以及函数功能以及相关内容,所做详细分工如下:由小组成员郑鑫负责vmalloc.c文件、page_io.c文件、page_alloc.c文件和mmap.c文件的阅读和分析。
linux 系统内存相关指令

在Linux系统中,有一些常用的命令可以用来查看和管理内存。
以下是一些常见的Linux内存相关指令:
1. free:显示系统内存使用情况和交换空间使用情况。
示例:`free -h`
2. top:实时显示系统进程和内存使用情况。
示例:`top`
3. vmstat:显示系统虚拟内存统计信息,包括内存使用情况、I/O等。
示例:`vmstat`
4. ps:显示系统进程状态,包括进程的内存使用情况。
示例:`ps aux`
5. pmap:显示进程的内存映射情况。
示例:`pmap <pid>`
6. smem:综合显示系统内存使用情况,包括物理内存、共享内存、缓存等。
示例:`smem -r`
7. sar:系统活动报告,包括CPU、内存、磁盘等性能信息。
示例:`sar -r`
8. top命令中按下"Shift+m":按内存使用量排序显示进程列表。
示例:启动top命令后,按下Shift键再按m键。
这些命令可以帮助您了解系统当前的内存使用情况和进程的内存占用情况。
请注意,具体命令的参数和输出可能会因不同的Linux发行版和版本而有所不同。
您可以通过查阅相关文档或使用命令的帮助选项来获取更多详细信息。
占用linux内存的命令

占用linux内存的命令占用Linux内存的命令在Linux系统中,我们经常需要了解和监控系统的内存使用情况。
掌握一些占用Linux内存的命令,可以帮助我们更好地管理和优化系统资源。
本文将介绍几个常用的命令,用于查看和分析Linux系统中占用内存的进程和资源。
1. free命令free命令用于查看系统的内存使用情况。
它可以显示系统总内存、已使用内存、空闲内存和缓冲区/缓存的内存。
使用命令free -h可以以更友好的方式显示内存信息,以G和M为单位。
2. top命令top命令是一个实时的进程监视器,可以显示系统中占用内存和CPU最多的进程。
在top命令的输出中,可以通过按下shift+m 键来按内存使用排序,以便查看最占用内存的进程。
3. ps命令ps命令用于查看系统中的进程信息。
使用命令ps aux可以显示所有进程的详细信息,包括进程的PID、占用CPU和内存的百分比等。
通过按照内存使用的百分比进行排序,可以找出占用内存较多的进程。
4. pmap命令pmap命令用于显示进程的内存映射。
使用命令pmap <PID>可以查看指定进程的内存映射情况,包括内存地址范围、权限、映射文件等信息。
通过分析pmap的输出,可以了解进程占用内存的细节。
5. smem命令smem命令可以以更友好的方式显示系统的内存使用情况。
它可以按进程或用户进行分组,并显示每个进程或用户占用的内存量。
使用命令smem -r可以按照内存使用排序,以便查看最占用内存的进程或用户。
6. top命令中的e命令在top命令的交互模式下,按下e键可以切换到按内存使用排序的模式。
此时,top命令将显示占用内存较多的进程,并按照内存使用的百分比进行排序。
7. slabtop命令slabtop命令用于查看内核中的slab分配器的统计信息。
slab分配器是Linux内核中用于分配和管理内存的机制之一。
使用命令slabtop可以显示各个slab分配器的内存使用情况,包括已分配的内存、缓存的对象数量等。
Linux内存管理分析与研究

Linux内存管理分析与研究随着计算机技术的不断发展,操作系统在计算机系统中扮演着越来越重要的角色。
作为开源操作系统领域的佼佼者,Linux被广泛用于各种应用场景,包括服务器、桌面、嵌入式系统等。
内存管理是操作系统核心功能之一,对于系统性能和稳定性具有重要影响。
本文将对Linux内存管理进行深入分析,并探讨其存在的问题与解决方案。
Linux内存管理采用分页和分段技术,将物理内存划分为大小不同的页框或段框,以便更有效地利用和管理内存资源。
Linux通过将内存分为内核空间和用户空间,实现了内存的隔离和保护,同时允许用户进程使用不同的内存空间。
Linux内存管理存在的一个主要问题是内存分配不均。
由于内存分配是基于页框或段框的,当某些进程需要更多内存时,操作系统会从空闲的内存页框中分配内存。
然而,在实际情况中,由于页框大小固定,当需要分配大量内存时,可能会造成内存分配不均的情况。
另一个问题是浪费空间。
Linux为了提高内存利用率,采用了一种称为内存分页的技术。
然而,在某些情况下,当进程不再需要使用内存时,操作系统并不会立即将内存页框回收,而是保留在内存中以备将来使用,这可能会导致内存空间的浪费。
针对内存分配不均的问题,可以采取交换技术。
交换技术是一种将进程使用的内存部分移至磁盘上,以腾出更多内存供其他进程使用的方法。
在Linux中,可以使用瑞士文件系统(Swiss File System,SFS)作为交换设备,将不常用的内存页框交换到磁盘上,以便在需要时重新加载。
为了解决内存浪费问题,可以优化内存分配算法。
Linux中使用的内存分配算法是基于伙伴系统的,该算法会跟踪每个内存块的空闲状态。
当需要分配内存时,伙伴系统会选择一个适当大小的空闲块,并将其划分为所需的内存大小。
为了避免内存浪费,可以采取以下措施:增加空闲内存块的大小,以便更好地适应大内存需求;引入动态内存分配机制,使操作系统能够在需要时分配和回收内存;定期清理不再使用的内存块,以便及时回收内存空间。
linux中内存优化的方法

linux中内存优化的方法如何在Linux系统中进行内存优化引言:在Linux系统中,内存管理是非常重要的一项任务,它直接影响着系统的性能和稳定性。
一个高效的内存管理策略可以提高系统的吞吐量,减少延迟,提高响应速度。
本文将介绍一些常用的方法和策略,帮助用户进行Linux系统的内存优化。
一、了解Linux内存管理机制在开始优化内存之前,我们需要了解Linux的内存管理机制。
Linux内核使用页面机制来管理内存,将物理内存划分为一个个大小相等的页面。
Linux使用页表来记录页面的使用情况,并采用虚拟内存管理技术将其与物理内存映射起来。
内核根据页面的使用情况来管理内存,包括页面分配、页面回收和页面交换等。
二、观察和分析内存使用情况在进行内存优化之前,我们需要了解当前系统的内存使用情况。
可以通过工具如top、free等来观察系统的内存占用情况。
在观察内存占用时,需要注意以下几个指标:总内存使用量、空闲内存量、缓存和缓冲区使用量、交换内存使用量等。
这些指标可以帮助我们判断系统是否存在内存不足或内存泄漏等问题。
三、优化内存分配策略Linux内存管理机制中的一项重要任务是内存分配。
优化内存分配策略可以使系统更加高效地利用内存资源。
以下是一些常用的内存分配优化策略:1. 预分配内存池:对于需要频繁分配和释放内存的应用程序,可以使用内存池技术进行优化。
通过预先分配一块连续的内存空间,应用程序可以直接从内存池中获取内存,而不需要频繁的内存分配和释放操作,从而提高效率。
2. 使用伙伴系统算法:Linux内存管理中使用伙伴系统算法来分配大块的内存页。
这个算法将可用内存分成不同的块,每个块的大小都是2的幂次方。
应用程序可以使用kmalloc函数来分配和释放这样的内存块,而不需要频繁地进行页表的更新操作。
3. 避免过度分页:在Linux中,过度分页会导致额外的开销,降低系统的性能。
可以通过合理设置分页大小来避免过度分页。
同时,可以使用Transparent Huge Pages(THP)来减少页表的数量,提高内存的访问效率。
实验8Linux的内存管理

内存管理的概念
内存管理的定义
内存管理是指操作系统对计算机内存 资源的分配、回收、保护和扩充等一 系列操作,以确保系统高效、稳定地 运行。
内存管理的目标
提高内存利用率,减少内存碎片,实 现多任务环境下的内存共享和保护, 以及提供虚拟内存等。
Linux内存管理的特点
分段和分页机制
Linux采用分段和分页机制来管理内存,将物理内 存划分为大小相等的页框,同时将进程地址空间 划分为多个段,每个段对应一个页表项,实现地 址空间的隔离和权限控制。
。
03 通过实验操作和观察,加深对Linux内存管理的 理解和认识。
实验环境
操作系统
Linux(建议使用Ubuntu或CentOS等常见发行版 )
开发工具
GCC编译器、GDB调试器、Valgrind内存检测工 具等。
实验材料
一台配置有Linux操作系统的计算机,具备基本的 编程和调试能力。
02
Linux内存管理概述
VS
共享内存的实现方式
在Linux中,共享内存可以通过shmget() 、shmat()和shmdt()等系统调用来实现 。首先,使用shmget()函数创建一个共 享内存段;然后,使用shmat()函数将共 享内存段连接到当前进程的地址空间;最 后,使用shmdt()函数将共享内存段从当 前进程的地址空间中分离。
06
内存优化与性能提升
内存泄漏问题及其解决方案
内存泄漏定义
内存泄漏是指程序在申请内存后,未能正确释放,导致系统内存逐 渐耗尽的现象。
检测工具
使用Valgrind等内存检测工具,可以检测程序中的内存泄漏问题。
解决方案
及时释放不再使用的内存,避免不必要的内存申请,采用智能指针等 RAII技术来管理内存。
Linux操作系统中的内存管理和优化技术

Linux操作系统中的内存管理和优化技术在Linux操作系统中,内存管理是一项非常重要的任务。
因为在计算机系统中,内存是最主要的资源之一,也是最容易被浪费或滥用的资源之一。
因此,在Linux系统中要做好内存管理,就必须要清楚该系统如何使用内存、怎样管理内存,以及如何优化内存使用。
一、Linux内存的分类在Linux系统中,我们一般将内存分为两种类型:物理内存和虚拟内存。
物理内存是指计算机实际存在的内存,而虚拟内存是指计算机中的硬盘空间,它在计算机中被用作为一种虚拟化内存的技术。
这种技术使得计算机可以虚拟出额外的内存空间,从而提高系统的内存使用效率。
二、Linux内存的使用在Linux系统中,内存不是一次性分配给所有程序使用的,而是按需分配的。
当系统需要更多内存时,它会从空闲的内存中分配出一部分,然后再使用这些内存来支持系统进程和应用程序。
此外,Linux系统中还有一个内存缓存,它可以帮助系统将经常被访问的数据存储在内存中,以便快速响应用户请求。
三、Linux内存管理在Linux系统中,内存管理模块负责管理系统的内存使用。
这个模块会跟踪系统内存使用情况,并将一部分内存分配给正在运行的进程和应用程序。
此外,如果系统内存使用过量,内存管理模块还能回收不必要的内存,并将其分配给更需要的进程或应用程序。
四、Linux内存优化技术1. 内存调整在Linux系统中,我们可以使用内存调整技术来优化内存使用。
这种技术可以通过修改内核参数来增加系统的内存使用效率。
我们可以使用sysctl命令来修改内核参数。
2. 内存抖动在Linux系统中,如果内存使用过量,就会出现内存抖动的情况。
内存抖动是指系统频繁地将一页内存从内存中换出,然后再将其换入内存。
这种过程会导致系统速度变慢,因此我们需要采取一些措施来优化内存使用。
我们可以在系统中使用Swap分区和Swap文件来降低内存抖动的风险。
3. 内存清理在Linux系统中,我们可以使用内存清理技术来优化内存使用。
linux 大内存操作命令

linux 大内存操作命令
在Linux系统中,针对大内存操作,有一些常用的命令和操作方法可以帮助管理和监控内存。
以下是一些常见的命令和操作:
1. free命令,用于查看系统内存的使用情况,包括总内存、已用内存、空闲内存以及缓冲区和缓存内存的使用情况。
可以使用“free -h”来以人类可读的方式显示内存使用情况。
2. top命令,用于实时监控系统的运行情况,包括内存占用情况。
在top命令的输出中,可以看到内存的总量、已用量、空闲量以及缓存和缓冲区的使用情况,还可以看到哪些进程占用了内存。
3. vmstat命令,用于显示系统的虚拟内存统计信息,包括内存的使用情况、交换分区的使用情况等。
可以使用“vmstat -s”来显示摘要信息,以及“vmstat -m”来显示内存的详细信息。
4. sysctl命令,用于在运行时动态地修改内核参数,可以用来调整内存管理相关的参数,比如调整内存的分配策略、调整内存的回收策略等。
5. swapon和swapoff命令,用于启用和禁用交换分区,可以通过增加交换分区来扩展系统的虚拟内存空间,从而应对大内存操作的需求。
除了以上列举的命令之外,还可以通过修改/proc文件系统中的一些文件来查看和调整系统内存的一些参数,比如/proc/meminfo 文件可以查看内存的详细信息,/proc/sys/vm目录下的一些文件可以用来调整内存管理相关的参数。
总的来说,在Linux系统中,通过这些命令和操作方法,可以比较全面地了解和管理系统的内存使用情况,从而更好地应对大内存操作的需求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux操作系统内存管理摘要:Linux支持虚拟内存, 就是使用磁盘作为RAM的扩展,使可用内存相应地有效扩大。
核心把当前不用的内存块存到硬盘,腾出内存给其他目的。
当原来的内容又要使用时,再读回内存。
这对用户全透明:运行于Linux的程序只看到大量的可用内存而不甘心哪部分在磁盘上。
当然,读写硬盘比真的内存慢(慢千倍),所以程序运行较慢。
用做虚拟内存的这部分硬盘叫对换空间。
Linux可以使用文件系统中的普通文件或单独的分区作为对换空间。
对换分区更快,但对换文件更易于改变大小(无须对硬盘重分区)。
如果知道要多少对换空间,应该用对换分区;如果不能确认,可以先用对换文件,用一段时间后再根据所需空间建立对换分区。
Linux允许同时使用多个对换分区和/或对换文件。
即如果偶尔需要更多的对换空间,可以随时建立一个额外的对换文件。
Linux是一个遵循POSIX(Portable Operating System Interface)标准的操作系统,它继承了UNIX系统优秀的设计思想,拥有简练、容错强、高效而且稳定的内核。
此外Linux还具备其他操作系统所不能比拟的优点。
①:完全免费;②:内核源代码完全公开。
Linux内核拥有一个功能完备的内存管理子系统,它增加了对NUMA(非均匀存储结构)体系结构的支持并且使用了基于区(ZONE)的物理内存管理方法,从而保持了物理上连续分布、而逻辑上统一的内存模式和传统的共享内存编程模型,使得系统的性能得以极大的扩展。
这样Linux不仅能够满足传统的桌面应用,而且还能满足高端服务器市场的需要。
目前,Linux不仅在Internet服务器上表现出色,而且还可以胜任大型数据库系统的服务器。
关键字:虚拟内存,物理内存管理,虚拟内存管理一、Linux存储管理的基本框架Linux内核采用虚拟页式存储管理,采用三次映射机制实现从线性地址到物理地址的映射。
其中PGD为页面目录,PMD为中间目录,PT为页面表。
具体的映射过程为:⑴从CR3寄存器中找到PGD基地址;⑵以线性地址的最高位段为下标,在PGD中找到指向PMD的指针;⑶以线性地址的次位段为下标,在PMD中找到指向PT的指针;⑷同理,在PT中找到指向页面的指针;⑸线性地址的最后位段,为在此页中的偏移量,这样就完成了从线性地址到物理地址的映射过程。
32位的微机平台如Intel的X86采用段页式的两层映射机制,而64位的微处理器采用三级分页。
对于传统的32位平台,Linux采用让PMD(中间目录)全0来消除中间目录域,这样就把Linux逻辑上的三层映射模型落实到X86结构物理上的二层映射,从而保证了Linux对多种硬件平台的支持。
二、Linux对虚拟内存的管理虚拟内存不仅可以解决内存容量的问题,还可以提供以下附加的功能:大地址空间;进程保护;内存映射;灵活的物理内存分配;共享虚拟内存。
Linux对虚拟内存的管理以进程为基础。
32位的线性地址映射的4G的虚拟空间中,从0XC0000000到0XFFFFFFFF的1G空间为所用进程所共享的内核空间,每个进程都有自己的3G用户空间。
Linux的虚拟内存管理需要各种机制的支持,首先内存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址,在用户程序运行时时如果发现程序中要用的虚拟地址没有对应的物理地址,就发出请页要求①:如果有空闲的内存可供分配,就请求分配内存②,并把正在使用的物理页记录在页缓存中③,如果没有足够的内存分配,就调用交换机制,腾出一部分内存④⑤。
另外在地址映射中要通过TLB(翻译后援存储器)来寻找物理页⑧,交换机制中要用到交换缓存⑥,并且把物理页内容交换到交换文件中也要修改页表来映射文件地址⑦。
一个进程的虚拟地址映射靠三个数据结构来描述:mm_struct、vm_area_struct、page。
其中mm_struct结构用来描述一个进程的虚拟内存;vm_area_struct描述一个进程的虚拟地址区域,在这个区域中的所有页面具有相同的访问权限和一些属性;page描述一个具体的物理页面。
当进程通过系统调用动态分配内存时,Linux首先分配一个vm_area_struct 结构,并链接到进程的虚拟内存链表,当后续指令访问这一内存区域时,产生缺页异常。
系统处理时,通过分析缺页原因、操作权限之后,如果页面在交换文件中,则进入do_page_fault()中恢复映射的代码,重新建立映射关系。
如果因为页面不再内存中,则Linux会分配新的物理页,并建立映射关系。
当物理内存出现不足时,就需要换出一些页面。
Linux采用LRU(Least Recently Used最近最少使用)页面置换算法选择需要从系统中换出的页面。
系统中每个页面都有一个“age”属性,这个属性会在页面被访问的时候改变。
Linux 根据这个属性选择要回收的页面,同时为了避免页面“抖动”(即刚释放的页面又被访问),将页面的换出和内存页面的释放分两步来做,而在真正释放的时候仅仅只写回“脏”页面。
这一任务由交换守护进程kswapd完成。
free_pages_high,free_pages_low是衡量系统中现有空闲页的标准,当系统中空闲页的数量少于free_pages_high,甚至少于free_pages_low时,kswapd进程会采用三种方法来减少系统正在使用的物理页的数量。
①调用shrink_mmap()减少buffer cache 和page cache的大小;②调用shm_swap()将system V共享内存页交换到物理内存;③调用swap_out()交换或丢弃页。
三、Linux对物理内存的管理Linux2.4内核加入了对NUMA的支持,如果系统是NUMA结构的处理机系统,则物理内存被划分为三个层次来管理:存储节点(Node),管理区(Zone),页面(Page)。
处理器的本地内存组成的区域叫做一个节点(Node),它通过pglist_data数据结构来描述。
各个节点的物理内存根据不同的作用又分为ZONE_DMA、ZONE_NORMAL、ZONE_HIGH,ZONE_DMA面积小,且专供DMA使用,ZONE_NORMAL则供大多数的程序使用,对于ZONE_HIGH仅仅只有页面缓存以及用户进程能够使用该区域的空间。
每个管理区对应一个free_area数组来组织空闲页面队列,该数组的每一项描述某一种页块的信息,第一个元素描述大小为1页的内存块的信息,第二个元素描述大小为2 页的内存块的信息,依此类推,所描述的页块大小以 2 的倍数增加。
free_area 数组的定义如下:Typedef struct free_area_struct{Struct list_head free_list;Unsigned int *map;}free_area_t;list_head是一个双向指针结构,在这里用于将物理页块结构mem_map_t 连结成一个双向链表,而map则是记录这种页块组分配情况的位图,例如,位图的第N位为1,表明第N个页块是空闲的。
页分配代码使用向量表free_area来分配和回收物理页。
系统初始化时,free_area数组也被赋了初值。
也就是说,系统中所有可用的空闲物理页块都已经被加到了free_area数组中。
Linux使用Buddy最先匹配算法来进行页面的分配和回收,并且必须按2的幂次方进行分配。
比如要分配大小为2k的空闲块,如果系统中有足够的空闲块,页面分配代码首先在free_area中查找相应大小的空闲块,如果找到则分配。
如果没有则查找下一尺寸(2倍于请求大小)的页面块,继续这一过程直到找到可以分配的页面,按要求分配之后,将剩余的空闲块仍然按照2的幂次方划分后链入适当的空闲块中。
与分配算法相反,页面回收时总是试图将相邻的空闲页面组合成更大尺寸的空闲块。
这里先给出“伙伴”要满足的三个条件:①两个块大小相同;②两个块物理地址连续;③两个块从同一大块中分离出来。
在用户释放内存时,判断“伙伴”是否是空闲块。
若否,则只要将释放的空闲块简单的插入相应的free_area中。
若是,则需要在free_area中删除其伙伴关系,然后再判断合并后的空闲块的伙伴关系,依次重复,直到归并后的空闲块没有伙伴关系或合并到最大块时将其插入到free_area中。
四、缓存和刷新机制与存取(真正的)内存相比,从磁盘读是很慢的另外,在相对短的一端时间里,多次读硬盘相同的部分是很常见的。
例如,你可能先读了一封电子邮件,然后回复时又将它读入编辑器,然后复制它到一个文件夹时又用邮件程序读它。
或者,考虑命令ls 可能被系统上的很多用户多么频繁地使用。
只从磁盘读一次信息,并保持在硬盘中,知道不再需要,除了第一次读,其他都会较快。
这就叫磁盘缓存disk buffering,用于此目的的内存叫buffer cache。
不幸的是,由于内存是有限且缺乏的资源,buffer cache一般不会足够大(大到能够装下所有人可能用到的数据)。
当cache满时,最长时间不用的数据将被丢弃,内存释放给最新的数据。
磁盘缓冲也用于写操作。
要写的数据经常马上又被读(例如一个源代码文件保存到文件中后又被编译器读出),所以将要写的数据放在缓冲里是个好主意。
另外,只将数据放如cache而不马上写到磁盘,写操作的程序执行速度更快。
写操作然后可以在后台完成,而不降低其他程序的速度。
许多操作系统有buffer caches (即使名称不同),但并非都根据上述原理。
有些是透写write-through: 数据马上写到磁盘(当然也同时写到cache) 不马上写的cache叫回写write-back。
回写比透写更有效,但也更容易出错:如果系统崩溃,或电源突然掉电,或软盘在cache回写前被取出,那么cache中改变的数据将丢失。
这可能意味着文件系统is not in full working order, 可能由于未写数据包含了系统记录信息的重要的变化。
因此,千万不要不经过正常的关闭过程直接关闭电源, 或没有unmount就取出软盘(如果是mount的),或什么程序还在用着软盘,或软盘灯还在闪。
sync 命令刷新缓冲,即强制将所有未写数据写回磁盘,如果要确保所有数据安全回写,可以用它。
传统的UNIX系统中,有个update 程序在后台运行,它每30秒运行一次 sync ,所以通常无须使用sync 。
Linux有一个另外的守侯程序bdflush ,它克服了sync 有时因磁盘I/O负荷太重(因为频繁的操作)而导致有时系统突然呆住的问题。
Linux下,bdflush 由update 启动。
一般无须考虑它,但如果bdflush 偶尔因为什么原因死了,核心会给出警告,此时应该手工启动它(/sbin/update )。