The HyperNews Linux KHG Discussion Pages

Annotated Bibliography

This annotated bibliography covers books on operating system theory as well as different kinds of programming in a Unix environment. The price marked may or may not be an exact price, but should be close enough for government work. If you have a book that you think should go in the bibliography, please write a short review of it and send all the necessary information (title, author, publisher, ISBN, and approximate price) and the review to

The Design of the UNIX Operating System

Author:Maurice J. Bach
Publisher:Prentice Hall, 1986

This is one of the books that Linus used to design Linux. It is a description of the data structures used in the System V kernel. Many of the names of the important functions in the Linux source come from this book, and are named after the algorithms presented here. For instance, if you can't quite figure out what exactly getblk(), brelse(), bread(), breada(), and bwrite() are, chapter 3 explains very well.

While most of the algorithms are similar or the same, a few differences are worth noting:

There are other small differences as well, but a good understanding of this text will help you understand the Linux source.

Advanced Programming in the UNIX Environment

Author:W. Richard Stevens
Publisher:Addison Wesley, 1992

This excellent tome covers the stuff you really have to know to write real Unix programs. It includes a discussion of the various standards for Unix implementations, including POSIX, X/Open XPG3, and FIPS, and concentrates on two implementations, SVR4 and pre-release 4.4 BSD, which it refers to as 4.3+BSD. The book concentrates heavily on application and fairly complete specification, and notes which features relate to which standards and releases.

The chapters include: Unix Standardization and Implementations, File I/O, Files and Directories, Standard I/O Library, System Data Files and Information, The Environment of a Unix Process, Process Control, Process Relationships, Signals, Terminal I/O, Advanced I/O (non-blocking, streams, async, memory-mapped, etc.), Daemon Processes, Interprocess Communication, Advanced Interprocess Communication, and some example applications, including chapters on A Database Library, Commmunicating with a PostScript Printer, A Modem Dialer, and then a seemingly misplaced final chapter on Pseudo Terminals.

I have found that this book makes it possible for me to write useable programs for Unix. It will help you achieve POSIX compliance in ways that won't break SVR4 or BSD, as a general rule. This book will save you ten times its cost in frustration.

Advanced 80386 Programming Techniques

Author:James L. Turley
Publisher:Osborne McGraw-Hill, 1988

This book covers the 80386 quite well, without touching on any other hardware. Some code samples are included. All major features are covered, as are many of the concepts needed. The chapters of this book are: Basics, Memory Segmentation, Privilege Levels, Paging, Multitasking, Communicating Among Tasks, Handling Faults and Interrupts, 80286 Emulation, 8086 Emulation, Debugging, The 80387 Numeric Processor Extension, Programming for Performance, Reset and Real Mode, Hardware, and a few appendices, including tables of the memory management structures as a handy reference.

The author has a good writing style: If you are technically minded, you will find yourself caught up just reading this book. One strong feature of this book for Linux is that the author is very careful not to explain how to do things under DOS, nor how to deal with particular hardware. In fact, the only times he mentions DOS and PC-compatible hardware are in the introduction, where he promises never to mention them again.

The C Programming Language, second edition

Author:Brian W. Kernighan and Dennis M. Ritchie
Publisher:Prentice Hall, 1988
ISBN:0-13-110362-8 (paper) 0-13-110370-9 (hard)

The C programming bible. Includes a C tutorial, Unix interface reference, C reference, and standard library reference.

You program in C, you buy this book. It's that simple.

Operating Systems: Design and Implementation

Author:Andrew S. Tanenbaum
Publisher:Prentice Hall, 1987

This book, while a little simplistic in spots, and missing some important ideas, is a fairly clear exposition of what it takes to write an operating system. Half the book is taken up with the source code to a Unix clone called Minix, which is based on a microkernel, unlike Linux, which sports a monolithic design. It has been said that Minix shows that it is possible to to write a microkernel-based Unix, but does not adequately explain why one would do so.

Linux was originally intended to be a free Minix replacement (Linus' Minix, Linus tells us). In fact, it was originally to be binary-compatible with Minix-386. Minix-386 was the development environment under which Linux was bootstrapped. No Minix code is in Linux, but vesitiges of this heritage live on in such things as the minix filesystem in Linux.

However, this book might still prove worthwhile for those who want a basic explanation of OS concepts, as Tanenbaum's explanations of the basic concepts remain some of the clearer (and more entertaining, if you like to be entertained) available. Unfortunately, basic is the key work here, as many things such as virtual memory are not covered at all.

Modern Operating Systems

Author:Andrew S. Tanenbaum
Publisher:Prentice Hall, 1992

The first half of this book is a rewrite of Tanenbaum's earlier Operating Systems, but this book covers several things that the earlier book missed, including such things as virtual memory. Minix is not included, but overviews of MS-DOS and several distributed systems are. This book is probably more useful to someone who wants to do something with his or her knowlege than Tanenbaum's earlier Operating Systems: Design and Implementation. Some clue as to the reason may be found in the title... However, what DOS is doing in a book on modern operating systems, many have failed to discover.

Operating Systems

Author:William Stallings
Publisher:Macmillan, 1992 (800-548-9939)
Price:No one at Macmillan could find one...

A very thorough text on operating systems, this book gives more in-depth coverage of the topics covered in Tannebaum's books, and covers more topics, in a much brisker style. This book covers all the major topics that you would need to know to build an operating system, and does so in a clear way. The author uses examples from three major systems, comparing and contrasting them: Unix, OS/2, and MVS. With each topic covered, these example systems are used to clarify the points and provide an example of an implementation.

Topics covered in Operating Systems include threads, real-time systems, multiprocessor scheduling, distributed systems, process migration, and security, as well as the standard topics like memory management and scheduling. The section on distributed processing appears to be up-to-date, and I found it very helpful.

UNIX Network Programming

Author:W. Richard Stevens
Publisher:Prentice Hall, 1990

This book covers several kinds of networking under Unix, and provides very thorough references to the forms of networking that it does not cover directly. It covers TCP/IP and XNS most heavily, and fairly exhaustively describes how all the calls work. It also has a description and sample code using System V's TLI, and pretty complete coverage of System V IPC. This book contains a lot of source code examples to get you started, and many useful proceedures. One example is code to provide useable semaphores, based on the partially broken implementation that System V provides.

Programming in the UNIX environment

Author:Brian W. Kernighan and Robert Pike
Publisher:Prentice Hall, 1984
ISBN:0-13-937699 (hardcover) 0-13-937681-X (paperback)

Writing UNIX Device Drivers

Author:George Pajari
Publisher:Addison Wesley, 1992

This book is written by the President and founder of Driver Design Labs, a company which specializes in the development of Unix device drivers. This book is an excellent introduction to the sometimes wacky world of device driver design. The four basic types of drivers (character, block, tty, STREAMS) are first discussed briefly. Many full examples of device drivers of all types are given, starting with the simplest and progressing in complexity. All examples are of drivers which deal with Unix on PC-compatible hardware.

Chapters include: Character Drivers I: A Test Data Generator Character Drivers II: An A/D Converter Character Drivers III: A Line Printer Block Drivers I: A Test Data Generator Block Drivers II: A RAM Disk Driver Block Drivers III: A SCSI Disk Driver Character Drivers IV: The Raw Disk Driver Terminal Drivers I: The COM1 Port Character Drivers V: A Tape Drive STREAMS Drivers I: A Loop-Back Driver STREAMS Drivers II: The COM1 Port (Revisited) Driver Installation Zen and the Art of Device Driver Writing

Although many of the calls used in the book are not Linux-compatible, the general idea is there, and many of the ideas map directly into Linux.

Copyright (C) 1992, 1993, 1996 Michael K. Johnson,


1. Note: Please replace K&R reference by Harbison/Steele by Markus Kuhn
1. Feedback: Replace, no; supplement, yes by Michael K. Johnson
-> Feedback: Right you are Mike! by rohit patil
2. Warning: 80386 book is apparently out of print now by Austin Donnelly
1. Sad: Very unfortunate by Michael K. Johnson
3. Note: Linux Kernel Internals-> Kernel MM IPC fs drivers net modules by Alex Stewart