13.1 Suggestions for Further Reading

In this section, we give some suggestions for further reading. Unlike the papers cited in the sections entitled ‘‘RESEARCH ON ...’’ in the text, which are about current research, these references are mostly introductory or tutorial in nature. They can, however, serve to present material in this book from a different perspective or with a different emphasis.

13.1.1 Introduction

Silberschatz et al., Operating System Concepts, 10th ed.

A general textbook on operating systems. It covers processes, memory management, storage management, protection and security, distributed systems, and some special-purpose systems. Two case studies are given: Linux and Windows. The cover is full of dinosaurs. These are legacy animals, to emphasize that operating systems also carry a lot of legacy.

Stallings, Operating Systems, 9th ed.

Still another textbook on operating systems. It covers all the traditional topics, and also includes a small amount of material on distributed systems.

Stevens and Rago, Advanced Programming in the UNIX Environment

This book tells how to write C programs that use the UNIX system call interface and the standard C library. Examples are based on the System V Release 4 and the 4.4BSD versions of UNIX. The relationship of these implementations to POSIX is described in detail.

Tanenbaum and Woodhull, Operating System Design and Implementation

A hands-on way to learn about operating systems. This book discusses the usual principles, but in addition discusses an actual operating system, MINIX 3, in great detail, and contains a listing of that system as an appendix.

13.1.2 Processes and Threads

Arpaci-Dusseau and Arpaci-Dusseau, Operating Systems: Three Easy Pieces

The entire first part of this book is dedicated to virtualization of the CPU to share it with multiple processes. What is nice about this book (besides the fact that there is a free online version) is that it introduces not only the concepts of processing and scheduling techniques, but also the APIs and systems calls like fork and exec in some detail.

Andrews and Schneider, ‘‘Concepts and Notations for Concurrent Programming’’

A tutorial and survey of processes and interprocess communication, including busy waiting, semaphores, monitors, message passing, and other techniques. The article also shows how these concepts are embedded in various programming languages. The article is old, but it has stood the test of time very well.

Ben-Ari, Principles of Concurrent Programming

This little book is entirely devoted to the problems of interprocess communication. There are chapters on mutual exclusion, semaphores, monitors, and the dining philosophers problem, among others. It, too, has stood up very well over the years. Zhuravlev et al., ‘‘Survey of Scheduling Techniques for Addressing Shared Resources in Multicore Processors’’

Multicore systems have started to dominate the field of general-purpose computing world. One of the most important challenges is shared resource contention. In this survey, the authors present different scheduling techniques for handling such contention.

Silberschatz et al., Operating System Concepts, 10th ed.

Chapters 3 through 8 cover processes and interprocess communication, including scheduling, critical sections, semaphores, monitors, and classical interprocess communication problems.

Stratton et al., ‘‘Algorithm and Data Optimization Techniques for Scaling to Massively Threaded Systems’’

Programming a system with half a dozen threads is hard enough. But what happens when you have thousands of them? To say it gets tricky is to put it mildly. This article talks about approaches that are being taken.

Reghenzani, ‘‘The Real-Time Linux Kernel: A Survey on PREEMPT RT’’

A summary of work on providing real time functionality in the Linux operating system.

Schwarzkopf and Bailis, ‘‘Research for Practice: Cluster Scheduling for Datacenters’’

Scheduling on a single core is hard enough already. Now imagine you have to this for distributed clusters of computers. In the authors’ own words: ‘‘Interested in the foundations behind these systems, and how to achieve fast, flexible, and fair scheduling? Malte’s got you covered!’’

13.1.3 Memory Management

Denning, ‘‘Virtual Memory’’

A classic paper on many aspects of virtual memory. Peter Denning was one of the pioneers in this field, and was the inventor of the working-set concept.

Denning, ‘‘Working Sets Past and Present’’

Another classic and a good overview of numerous memory management and paging algorithms. A comprehensive bibliography is included. Although many of the papers are old, the principles really have not changed at all.

Knuth, The Art of Computer Programming, Vol. 1

First fit, best fit, and other memory management algorithms are discussed and compared in this book.

Arpaci-Dusseau and Arpaci-Dusseau, ‘‘Operating Systems: Three Easy Pieces’’

This book has a rich section on virtual memory in Chapters 12–23 and includes a nice overview of page replacement policies.

13.1.4 File Systems

McKusick et al., ‘‘A Fast File System for UNIX’’

The UNIX file system was completely redone for 4.2 BSD. This paper describes the design of the new file system, with emphasis on its performance.

Silberschatz et al., Operating System Concepts, 10th ed.

Chapters 1012 are about storage hardware and file systems. They cover file operations, interfaces, access methods, directories, and implementation, among other topics.

Stallings, Operating Systems, 9th ed.

Chapter 12 contains a fair amount of material about file systems and little bit about their security.

Cornwell, ‘‘Anatomy of a Solid-state Drive’’

If you are interested in solid state drives, Michael Cornwell’s introduction is a good starting point. In particular, the author succinctly describes the way in way traditional hard drives and SSDs differ.

Timmer, ‘‘Inching Closer to a DNA-Based File System’’

We explained how disks are in the process of being replaced by SSD in many areas of computing, but flash memory is not the end of history either. Researchers are looking at storage in other media, such as glass, or even DNA!

Waddington and Harris, ‘‘Software Challenges for the Changing Storage Landscape’’

Operating systems are struggling to keep up with new developments in storage. In this article, Waddington and Harris talk us through some of the software challenges for monolithic operating systems.

13.1.5 Input/Output

Geist and Daniel, ‘‘A Continuum of Disk Scheduling Algorithms’’

A generalized disk-arm scheduling algorithm is presented. Extensive simulation and experimental results are given.

Scheible, ‘‘A Survey of Storage Options’’

There are many ways to store bits these days: DRAM, SRAM, SDRAM, flash memory, hard disk, tape, and, as we saw earlier, even DNA. In this article, the various technologies are surveyed and their strengths and weaknesses highlighted.

Greengard, ‘‘The Future of Data Storage’’

There may be many fancy new materials for storing bytes, but in practice good old magnetic tape will be with us for a long while yet, explains this article. Tape is inexpensive and the data on it remain accessible longer than on many other media. It is also easy to use and manage.

Stan and Skadron, ‘‘Power-Aware Computing’’

Until someone manages to get Moore’s Law to apply to batteries, energy usage is going to continue to be a major issue in mobile devices. Power and heat are so critical these days that operating systems are aware of the CPU temperature and adapt their behavior to it. This article surveys some of the issues and serves as an introduction to five other articles in this special issue of Computer on power-aware computing.

Swanson and Caulfield, ‘‘Refactor, Reduce, Recycle: Restructuring the I/O Stack for the Future of Storage’’

Disks exist for two reasons: when power is turned off, RAM loses its contents. Also, disks are very big. But suppose RAM did not lose its contents when powered off? How would that change the I/O stack? Nonvolatile memory is here and this article looks at how it changes systems.

Ion, ‘‘From Touch Displays to the Surface: A Brief History of Touchscreen Tech.,’’

Touch screens have become ubiquitous in a short time span. This article traces the history of the touch screen through history with easy-to-understand explanations and nice vintage pictures and videos. Fascinating stuff!

Walker and Cragon, ‘‘Interrupt Processing in Concurrent Processors’’

Implementing precise interrupts on superscalar computers is a challenging activity. The trick is to serialize the state and do it quickly. A number of the design issues and trade-offs are discussed here.

13.1.6 Deadlocks

Coffman et al., ‘‘System Deadlocks’’

A short introduction to deadlocks, what causes them, and how they can be prevented or detected.

Holt, ‘‘Some Deadlock Properties of Computer Systems’’

A discussion of deadlocks. Holt introduces a directed graph model that can be used to analyze some deadlock situations.

Isloor and Marsland, ‘‘The Deadlock Problem: An Overview’’

A tutorial on deadlocks, with special emphasis on database systems. A variety of models and algorithms are covered.

Levine, ‘‘Defining Deadlock’’

In Chap. 6 of this book, we focused on resource deadlocks and barely touched on other kinds. This short paper points out that in the literature, various definitions have been used, differing in subtle ways. The author then looks at communication, scheduling, and interleaved deadlocks and comes up with a new model that tries to cover all of them.

Shub, ‘‘A Unified Treatment of Deadlock’’

This short tutorial summarizes the causes and solutions to deadlocks and suggests what to emphasize when teaching it to students.

13.1.7 Virtualization and the Cloud

Portnoy, ‘‘Virtualization Essentials’’

A gentle introduction to virtualization. It covers the context (including the relation between virtualization and the cloud), and covers a variety of solutions (with a bit more emphasis on VMware).

Randal, ‘‘The Ideal Versus the Real: Revisiting the History of Virtual Machines and Containers’’

Often virtual machines are portrayed as offering better security. This survey paper catalogues key developments in the evolution of virtual machines and containers from the 1950s to today and corrects various common misperceptions about them with historical details.

Erl et al., ‘‘Cloud Computing: Concepts, Technology & Architecture’’

A book devoted to cloud computing in a broad sense. The authors explain in detail what is hidden behind acronyms like IAAS, PAAS, SAAS, and similar ‘‘X’’ As A Service family members.

Rosenblum and Garfinkel, ‘‘Virtual Machine Monitors: Current Technology and Future Trends’’

Starting with a history of virtual machine monitors, this article then goes on to discuss the current state of CPU, memory, and I/O virtualization. It covers problem areas relating to all three and how future hardware may alleviate the problems.

Whitaker et al., ‘‘Rethinking the Design of Virtual Machine Monitors’’

Most computers have some bizarre and difficult to virtualize aspects. In this paper, the authors of the Denali system argue for paravirtualization, that is, changing the guest operating systems to avoid using the bizarre features so that they need not be emulated.

13.1.8 Multiple Processor Systems

Singh et al., ‘‘Jupiter Rising: A Decade of Clos Topologies and Centralized Control in Google’s Datacenter Network’’

Scaling computing and communication to the scale of large datacenters and beyond is very challenging. How to do it, you can hear (or rather: read) from the horse’s mouth in this article by Google’s engineers, where they describe their Jupiter datacenter fabric.

Dreslinski et al., ‘‘Centip3De: A Many-Core Prototype Exploring 3D Integration and Near-Threshold Computing’’

On a single CPU, things are also moving fast. In this dazzling story, the authors explain how we can expand many cores by going beyond two dimensions.

Dubois et al., ‘‘Synchronization, Coherence, and Event Ordering in Multiprocessors’’

A tutorial on synchronization in shared-memory multiprocessor systems. However, some of the ideas are equally applicable to single-processor and distributed memory systems as well.

Nowatzki et al., ‘‘Heterogeneous Von Neumann/Dataflow Microprocessors’’

Where many multicore chips used for desktop computers were symmetric (all the cores are identical), several modern architectures aim for heterogeneity: different cores packed on the same chip. In this article, the authors explain that it may be beneficial to pack cores of a completely different nature on the same die.

Beaumont et al., ‘‘Scheduling on Two Types of Resources: A Survey’’

Of course, having different types of resources creates additional problems for schedulers also. This survey presents different scheduling techniques for handling such heterogeneous architectures.

13.1.9 Security

Anderson, Security Engineering, 3rd Ed

A wonderful book that explains very clearly how to build dependable and secure systems by one of the best-known researchers in the field. Not only is this a fascinating look at many aspects of security (including techniques, applications, and organizational issues), it is also freely available online. No excuse for not reading it.

Burow et al., ‘‘Control-Flow Integrity: Precision, Security, and Performance,’’

Since the introduction as a research result in 2005, CFI has gradually gained ground and most modern compiler frameworks now support in one way or another. This immediately points out an issue: there are many different forms of CFI. This paper surveys the different approaches.

Jover, ‘‘Security Analysis of SMS as a Second Factor of Authentication’’

We explained how multiple factors can be used to provide authentication. Often service providers opt for using SMS text messages as the second factor. This article shows that doing so often has many security problems.

Bratus et al., ‘‘From Buffer Overflows to Weird Machines and Theory of Comput.’’

Connecting the humble buffer overflow to Alan Turing. The authors show that hackers program vulnerable programs like weird machines with strange-looking instruction sets. In doing so, they come full circle to Turing’s seminal research on ‘‘What is computable?’’

Greenberg, Sandworm

A fascinating account of a devastating cyberattack on NATO, American utility companies, and electric grids in Europe, where the attack seemed to originate in Russia. The story has the feel of a spy movie from the cold war era.

Hafner and Markoff, Cyberpunk

Three compelling tales of young hackers breaking into computers around the world are told here by the New York Times computer reporter who broke the Internet worm story (Markoff).

Sasse, ‘‘Red-Eye Blink, Bendy Shuffle, and the Yuck Factor: A User Experience of Biometric Airport Systems’’

The author discusses his experiences with the iris recognition system used at a number of large airports. Not all of them are positive.

Xiong and Szefer, ‘‘Survey of Transient Execution Attacks and Their Mitigations’’

The new vulnerabilities in hardware as exemplified by Spectre and Meltdown cause major grief for operating systems and users alike. In this survey, the authors provide an overview of the different attacks and mitigations related to this fascinating (and still new) class of vulnerabilities.

13.1.10 Case Study 1: UNIX, Linux, and Android

Bovet and Cesati, Understanding the Linux Kernel

The Linux community is very encouraging to newcomers who want to get their hands dirty in the bowels of the kernel and there tutorials and helpful blogs everywhere. Unfortunately, the books that explain the code in detail are fairly scarce and many of them are a bit old and pertain to previous versions of the kernel. Even so, this particular book is chock-full of information that is as relevant today as it was when it was written and is still probably the best overall discussion of the Linux kernel. It covers processes, memory management, file systems, signals, and much more.

Billimoria, Linux Kernel Programming—A comprehensive guide to kernel internals, writing kernel modules, and kernel synchronization

If you are looking for a more up-to-date book to learn programming in the 5.x kernels, this could be useful purchase. You will learn about Linux kernel modules, memory management, the scheduler and synchronization.

ISO/IEC, Information Technology—Portable Operating System Interface (POSIX), Part 1: System Application Program Interface (API) [C Language]

This is the standard. Some parts are actually quite readable, especially Annex B, ‘‘Rationale and Notes,’’ which often sheds light on why things are done as they are. One advantage of referring to the standards document is that, by definition, there are no errors. If a typographical error in a macro name makes it through the editing process, it is no longer an error, it is official.

Fusco, The Linux Programmer’s Toolbox

This book describes how to use Linux for the intermediate user, one who knows the basics and wants to start exploring how the many Linux programs work. It is intended for C programmers.

Maxwell, Linux Core Kernel Commentary

The first 400 pages of this book contain a subset of the Linux kernel code. The last 150 pages consist of comments on the code, very much in the style of John Lions’ classic book. If you want to understand the Linux kernel in all its gory detail, this is the place to begin, but be warned: reading 40,000 lines of C is not for everyone.

13.1.11 Case Study 2: Windows

Rector and Newcomer, Win32 Programming

If you are looking for one of those 1500-page books giving a summary of how to write Windows programs, this is not a bad start. It covers windows, devices, graphical output, keyboard and mouse input, printing, memory management, libraries, and synchronization, among many other topics. It requires knowledge of C or C++.

Russinovich and Solomon, Windows Internals, Part 1

If you want to learn how to use Windows, there are hundreds of books out there. If you want to know how Windows works inside, this is your best bet. It covers numerous internal algorithms and data structures, and in considerable technical detail. No other book comes close.

13.1.12 Operating System Design

Saltzer and Kaashoek, Principles of Computer System Design: An Introduction

This books looks at computer systems in general, rather than operating systems per se, but the principles they identify apply very much to operating systems also. What is interesting about this work is that it carefully identifies ‘‘the ideas that worked,’’ such as names, file systems, read-write coherence, authenticated and confidential messages, etc. Principles that, in our opinion, all computer scientists in the world should recite every day, before going to work.

Brooks, The Mythical Man Month: Essays on Software Engineering

Fred Brooks was one of the designers of IBM’s OS/360. He learned the hard way what works and what does not work. The advice given in this witty, amusing, and informative book is as valid now as it was a quarter of a century ago when he first wrote it down.

Cooke et al., ‘‘UNIX and Beyond: An Interview with Ken Thompson’’

Designing an operating system is much more of an art than a science. Consequently, listening to experts in the field is a good way to learn about the subject. They do not come much more expert than Ken Thompson, co-designer of UNIX, Inferno, and Plan 9. In this wide-ranging interview, Thompson gives his thoughts on where we came from and where we are going in the field.

Corbato´, ‘‘On Building Systems That Will Fail’’

In his Turing Award lecture, the father of timesharing addresses many of the same concerns that Brooks does in The Mythical Man-Month. His conclusion is that all complex systems will ultimately fail, and that to have any chance for success at all, it is absolutely essential to avoid complexity and strive for simplicity and elegance in design.

Lampson, ‘‘Hints for Computer System Design’’

Butler Lampson, one of the world’s leading designers of innovative operating systems, has collected many hints, suggestions, and guidelines from his years of experience and put them together in this entertaining and informative article. Like Brooks’ book, this is required reading for every aspiring operating system designer.

Wirth, ‘‘A Plea for Lean Software’’

Another classic. Niklaus Wirth, a famous and experienced system designer, makes the case here for lean and mean software based on a few simple concepts, instead of the bloated mess that much commercial software is. He makes his point by discussing his Oberon system, a network-oriented, GUI-based operating system that fits in 200 KB, including the Oberon compiler and text editor.