I’d like a new kernel please

I recently read Linux Kernel Development by Robert Love

Loved the book. I’d read The Design of the Unix Operating System by M.J.Bach when I was a student many years ago, but I’d recently come along some tutorial articles describing how you’d go about building your own operating system and wanted to see how these ideas were used to write Linux. You can easily get the Unix sources out of git, but it is useful to have some idea of the kernel’s design before you start exploring.

This books serves the purpose really well. It doesn’t go into detail about the actual kernel boot process, but does cover how to get the Linux sources from git. It then covers the various parts of the kernel architecture, starting with processes and the scheduler, the process for making system calls, the various important kernel data structures and their implementation. It moves on to interrupt handling, discussing top and bottom halves, the former being the code that runs in a fairly uninterruptible state in order to service the device, often by recording information that is later processed by a lower priority bottom half.

Kernel synchronisation and time management are covered in detail followed by information on devices and their interface, followed by a discussion of memory management and the process address space.

The book is really well written, and gives the reader a really good idea of the implementation of Linux. There are a few questions that weren’t covered: how are signals delivered to a process (and how does the process handle them), and how is paging implemented, but this book is well worth reading if you want to start experimenting with the Linux kernel. I went out and grabbed Ubuntu and installed it on a virtual machine, and have been trying a copy of the kernel from a git checkout, which isn’t a pain free process which I will cover in another blog post.

This entry was posted in Books. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s