As
a reviewer, I have to disagree with the advanced approach
in this book. Many readers of this book will be Linux coders.
Normal Linux users will not pick up a book called kernel
development, while coders will not be satisfied with chapters
in the form of overviews. Actual code analysis and digging
into the Linux source code are the only ways to make those
readers happy. This is particularly a problem in chapters
that discuss kernel implementations exposed to "user
space" programming. As the foreword of this book points
out, it's only a stepping stone for aspiring kernel developers.
It is important to get those developers' hands dirty.
Take
the scheduling chapter as an example. This is described
in chapter three and is available as a free download
from the book's web site. The whole chapter describes
the preemptive multitasking that we all have heard about.
Although the chapter provides some details about the
inner workings of this famous design, it doesn't discuss
some obvious questions. Exactly where is the code in
the Linux kernel that implements time-slicing? Is there
a processor dependency for multitasking design and how
about time-slicing in a multiprocessor machine? How is
the "nice" value on UNIX and Linux gets processed
in a multitasking environment? Is there any experience
in modifying codes for multitasking that can be shared
with the readers?
Similar
questions can be asked in the chapter on the file system.
It's nice to see several structures listed in the book,
but where is the code in the Linux kernel that employs
those structures? How does the file system handle non-Linux
file systems? Where in the Linux kernel is the code that
handles device mounting? How do some Linux vendors make
the mounting process more automatic?
The
topics of this book appears to be on the OS core, but
its examples are detailed as if from a device driver
developer standpoint. It's important for books like this
to provide guidelines to advise readers about what can
and what cannot be changed. An obvious chapter topic
for this book is the history of Linux development in
the form of code improvements over time. The author does
describe, at the end of the book, the process of submitting
patches. However, the book doesn't touch the various
debates about whether or not a company needs to give
out source code to everyone or only to buyers of the
binary products. I'd also like to see some coverage of
API development for Linux as well as coverage of the
interfaces to some of the famous user space applications.
This
book does have its merits. It's definitely an excellent
textbook for an advanced course on the Linux kernel and
constitutes a rich collection of topics on Linux kernel.
The writing style is easy to follow, but the approach
to the subject matter leaves much room for further research
and code searching.