The storage of a file on disk differs from the view the
programmer has of the file in two ways: blocks can be scattered around
the disk (although the filesystem tries hard to keep blocks sequential
to improve access time), and files may appear to a programmer to be
bigger than they really are because a program can introduce holes into
them (through the
lseek( ) system
In this section, we explain how the Ext2 filesystem manages the disk space — how it allocates and deallocates inodes and data blocks. Two main problems must be addressed:
Space management must make every effort to avoid file fragmentation — the physical storage of a file in several, small pieces located in non-adjacent disk blocks. File fragmentation increases the average time of sequential read operations on the files, because the disk heads must be frequently repositioned during the read operation.[*] This problem is similar to the external fragmentation of RAM discussed in the section "The Buddy System Algorithm" in Chapter 8.
Space management must be time-efficient; that is, the kernel should be able to quickly derive from a file offset the corresponding logical block number in the Ext2 partition. In doing so, the kernel should limit as much as possible the number of accesses to addressing tables stored on disk, because each such intermediate access considerably increases the average file access time.
ext2_new_inode( ) function creates an Ext2 disk inode, ...