Computer Systems: A Programmer's Perspective
Editorial Reviews
Book Description
This book, Computer Systems: A Programmer's Perspective (CS:APP), is for programmers who want to improve their skills by learning what is going on "under the hood" of a computer system. Our aim is to explain the enduring concepts underlying all computer systems, and to show you the concrete ways that these ideas affect the correctness, performance, and utility of your application programs. Unlike other systems books, which are written primarily for system builders, this book is written for programmers, from a programmer's perspective. If you study and learn the concepts in this book, you will be on your way to becoming the rare "power programmer" who knows how things work and how to fix them when they break. You will also be prepared to study specific systems topics such as compilers, computer architecture, operating systems, embedded systems, and networking. Assumptions About the Reader's Background The examples in the book are based on Intel-compatible processors (called "IA32" by Intel and "x86" colloquially) running C programs on Unix or Unix-like (such as Linux) operating systems. (To simplify our presentation, we will use the term "Unix" as an umbrella term for systems like Solaris and Linux.) The text contains numerous programming examples that have been compiled and run on Linux systems. We assume that you have access to such a machine, and are able to log in and do simple things such as changing directories. If your computer runs Microsoft Windows, you have two choices. First, you can get a copy of Linux (see www.linux.org or www.redhat.com ) and install it as a "dual boot" option, so that your machine can run either operating system. Alternatively, by installing a copy of the Cygwin tools ( www.cygwin.com ), you can have up a Unix-like shell under Windows and have an environment very close to that provided by Linux. Not all features of Linux are available under Cygwin, however. We also assume that you have some familiarity with C or C++. If your only prior experience is with Java, the transition will require more effort on your part, but we will help you. Java and C share similar syntax and control statements. However, there are aspects of C, particularly pointers, explicit dynamic memory allocation, and formatted I/O, that do not exist in Java. Fortunately, C is a small language, and it is clearly and beautifully described in the classic "K processes, I/O multiplexing, and threads and show how to use them to build concurrent Internet servers. We cover basic principles of synchronization using P and V semaphore operations, thread safety and reentrancy, race conditions, and deadlocks.
From the Back Cover
A PROGRAMMER'S PERSPECTIVE
This book is for programmers who want to write faster and more reliable programs. By learning how programs are mapped onto the system and executed, readers will better understand why programs behave the way they do and how inefficiencies arise. Computer systems are viewed broadly, comprising processor and memory hardware, compiler, operating system, and networking environment. With its programmer's perspective, readers can clearly see how learning about the inner workings of computer systems will help their further development as computer scientists and engineers. It also helps prepare them for further study in computer architecture, operating systems, compilers, and networking.
Topics include: data representations, machine-level representations of C programs, processor architecture, program optimization, memory hierarchy, linking, exceptional control flow, virtual memory and memory management, system-level 1/O, network programming, and concurrent programming. The coverage focuses on how these areas affect application and system programmers. For example, when covering data representations, it considers how the finite representations used to represent numbers can approximate integer and real numbers, but with limitations that must be understood by programmers. When covering caching, it discusses how the ordering of loop indices in matrix code can affect program performance. When covering networking, it describes how a concurrent server can efficiently handle requests from multiple clients.
The book is based on Intel-compatible (IA32) machines executing C programs on Unix or related operating systems such as Linux. Some familiarity with C or C++ is assumed, although hints are included to help readers making the transition from Java to C.
A complete set of resources, including labs and assignments, lecture notes, and code examples are available via the book's Web site at csapp.cs.cmu.edu.
Computer Systems: A Programmer's Perspective
Computer Systems: A Programmer's Perspective,Randal E. Bryant,David R. O'Hallaron,Prentice Hall,013034074X,Computer Engineering,Computer Programming,Computer Science,Computer Systems,Computers,Engineering - Electrical & Electronic,Management Information Systems,Programming - General,Science/Mathematics,Technology & Industrial Arts,Telecommunication,User interfaces (Computer syst,User interfaces (Computer systems),Computers / Computer Engineering
Hot Books:
Recommended Books