Accessing a file is a complex activity that involves the VFS abstraction (Chapter 12), handling block devices (Chapter 13), and the use of disk caches (Chapter 14). This chapter shows how the kernel builds on all those facilities to carry out file reads and writes. The topics covered in this chapter apply both to regular files stored in disk-based filesystems and to block device files; these two kinds of files will be referred to simply as “files.”
The stage we are working at in this chapter starts after the proper read or write method of a particular file has been called (as described in Chapter 12). We show here how each read ends with the desired data delivered to a User Mode process and how each write ends with data marked ready for transfer to disk. The rest of the transfer is handled by the facilities described in Chapter 13 and Chapter 14.
In particular, in Section 15.1, we describe how files are
accessed by means of the
read( ) and
write( ) system calls. When a
process reads from a file, data is first
moved from the disk itself to a set of buffers in the
kernel’s address space. This set of buffers is
included in a set of pages in the page cache (see Section 22.214.171.124). Next, the pages are copied into the
process’s user address space. A write is basically
the opposite, although some stages are different from reads in
In Chapter 15, we discuss how the kernel allows a process to directly map a regular file into its address space, ...