The fs Directory
This directory is, in my opinion, the most interesting in the whole
source tree. File handling is a basic activity of any Unix system, and
all file-related operations are implemented in this directory. I won’t
describe the fs subdirectories here, as each filesystem type
merely maps the VFS layer to a particular information layout. It’s
important nonetheless to describe the role of most of the files in the
fs directory because they carry a lot of information.
Exec and Binary Formats
The most important system call in Unix is exec. User programs can call one of six different incantations of exec, but only one is implemented in the kernel--the rest are library functions that map to the full-featured implementation, execve.
The exec function uses a table of registered binary formats, to
look for the correct loader in order to load and execute a disk file. The
first part of the source defines the register_binfmt interface. It’s
interesting to note that the #! magic key for script files
is handled like a binary format, such as ELF and other formats (although
it was a special case of exec.c in version 1.2).
kerneld freaks will
also learn how a new binary format is loaded on demand from reading the
source.
Each binary format is described by a data structure that defines three
operations: loading a binary file, loading a library, and dumping core.
The structure is defined in <linux/binfmts.h>. Most of the available formats only support the first operation (loading a ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access