- 博客(12)
- 资源 (1)
- 收藏
- 关注
原创 linux内核文件一致性之被动一致性
前言 前一篇博客中我们仔细描述了Linux文件系统的主动一致性,即文件系统对外提供的用于实现文件一致性的接口,应用程序可以调用这些接口同步文件/系统的脏数据和元数据。但诚如前一篇博客中所说,一个成熟的系统不仅应该只有这些由用户控制的同步方式,系统需要提供一些方式来保证文件数据/元数据的一致性。本篇博客我们就详细描述Linux内核中这种被动一致性的实现框架以及部分细节。思考
2013-08-12 07:03:36 1862
原创 ext4的延迟分配
Ext4文件系统在应用程序调用write的时候并不为缓存页面分配对应的物理磁盘块,当文件的缓存页面真正要被刷新至磁盘中时,ext4会为所有未分配物理磁盘块的页面缓存分配尽量连续的磁盘块。 Linux文件系统Vfs层总是将应用程序的写入请求分割成页面(默认大小4KB)为单位,对于每个页面,VFS会检查其是否已经为其创建了buffer_head结构,如果没有创建,则为其创建buffe
2013-08-12 06:38:04 4594 2
原创 ext4文件系统综述
从本篇博客起,我们开始研究现代文件系统ext4,说其现代是因为其相比传统文件系统,有着更现代化的设计。这些先进的特性体现在本文所要叙述的以下方面。 Ext4是Linux文件系统的一次革命。在很多方面,Ext4相对于Ext3的进步要远超过Ext3相对于Ext2的进步。Ext3相对于 Ext2的改进主要在于日志方面,但是Ext4相对于Ext3的的改进是更深层次的,是文件系统数据结
2013-08-12 06:26:19 3445
原创 Linux内核 文件一致性之主动一致性
众所周知,Linux内核采用了page cache来缓存文件数据以及元数据。既然采用缓存,就有可能会产生缓存数据与磁盘中的数据不一致的问题,本系列博客中我们重点关注Linux内核如何解决这种不一致。 一般来说,一个成熟的系统需要提供多种机制来保证数据一致性,其一是用户可控的,即用户能通过特定的接口去控制文件数据的一致性,这是对于文件数据一致性要求比较高的应用需要的语义。另一方面
2013-08-11 22:17:31 2714 2
原创 ext2_try_to_allocate_with_rsv解析
之前分析的ext2_new_blocks()看似复杂,但其基本思想却比较简单,而且,它把最复杂的功能留给了本博客中需要讨论的ext2_try_to_allocate_with_rsv()函数中完成了。看函数的名字便知道,如果上层调用者决定使用预留窗口机制,则该函数优先从文件的预留窗口中分配磁盘块,并且根据需要可能分配一个全新的预留窗口,或者有必要将原来的预留窗口进行扩充。废话不多说,让我们
2013-08-06 07:01:26 1019
原创 ext2_alloc_blocks解析
在之前我们分析的ext2_allocate_branch()函数中,我们说到其第一步可能也是最重要的一步就是分配磁盘块,这个磁盘块包括间接块和直接数据块,没有物理磁盘块,一切都只是空谈,而分配物理磁盘块调用的是函数ext2_alloc_blocks,这里我们就来重点分析下分配物理磁盘块的过程。 在分析这个函数之前,我们必须明白一点的是:这里所分配的磁盘块既包含间接索引块也包含直接
2013-08-04 16:18:59 1158
原创 ext2_get_branch解析
ext2文件系统采用了直接和间接映射的方式来保存逻辑块至物理块的映射关系。因此,在每次读或者写某个逻辑块之前,需要查找这种映射关系,将逻辑块号转化为物理块号。这就是ext2_get_block的主要作用,而这里还有这种可能就是当前访问的逻辑块尚未分配物理块,一般出现在写情况中。 关于ext2文件系统如何通过直接块和间接块来建立逻辑块至物理块之间的映射可参考之前的博客,今天我们所要
2013-08-04 12:21:02 1774
原创 ext2_allocate_branch()解析
在之前的多篇博客中我们都比较详细地阐述了ext2_get_block()路径中各个函数的实现原理,今天我们来关注下ext2_allocate_branch()的实现细节,这个函数是非常重要的,而且理解起来也没那么简单,虽然说函数的功能一句话就可能说完:为数据块建立映射路径。 要理解这个函数,我们首先得理解ext2文件系统的逻辑块至物理块的映射方法(这个在之前已经作了比较仔细的描述
2013-08-03 08:07:38 1066
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人