Books
Algorithms
Emphasis is placed on understanding the crisp mathematical idea behind each algorithm, in a manner that is intuitive and rigorous without being unduly formal.
Features include:
- The use of boxes to strengthen the narrative: pieces that provide historical context, descriptions of how the algorithms are used in practice, and excursions for the mathematically sophisticated.
- Carefully chosen advanced topics which can be skipped in a standard one-semester course, but can be covered in an advanced algorithms course or in a more leisurely two-semester sequence.
- An accessible treatment of linear programming introduces students to one of the greatest achievements in algorithms. An optional chapter on the quantum algorithm for factoring provides an unique peephole into this exciting topic.
To me, the highest value of the book is not the particular methods explained, but the good style and the way of thinking about programs that the book teaches. There are very few books that can actually teach good style, and this is probably one of the best. This book is a must read for anyone wishing to become a great programmer, not merely an average one.
- Chapter 1: Fundamentals introduces a scientific and engineering basis for comparing algorithms and making predictions. It also includes our programming model.
- Chapter 2: Sorting considers several classic sorting algorithms, including insertion sort, mergesort, and quicksort. It also includes a binary heap implementation of a priority queue.
- Chapter 3: Searching describes several classic symbol table implementations, including binary search trees, red-black trees, and hash tables.
- Chapter 4: Graphs surveys the most important graph processing problems, including depth-first search, breadth-first search, minimum spanning trees, and shortest paths.
- Chapter 5: Strings investigates specialized algorithms for string processing, including radix sorting, substring search, tries, regular expressions, and data compression.
- Chapter 6: Context highlights connections to systems programming, scientific computing, commercial applications, operations research, and intractability.
Applications to science, engineering, and industry are a key feature of the text. We motivate each algorithm that we address by examining its impact on specific applications.
ISBN 0321751043.jpg
Buy_from_amazon.gif
ISBN 0201853922.jpg
Buy_from_amazon.gif
The first edition became a widely used text in universities worldwide as well as the standard reference for professionals. The second edition featured new chapters on the role of algorithms, probabilistic analysis and randomized algorithms, and linear programming. The third edition has been revised and updated throughout. It includes two completely new chapters, on van Emde Boas trees and multithreaded algorithms, and substantial additions to the chapter on recurrences (now called "Divide-and-Conquer"). It features improved treatment of dynamic programming and greedy algorithms and a new notion of edge-based flow in the material on flow networks. Many new exercises and problems have been added for this edition.
As of the third edition, this textbook is published exclusively by the MIT Press.
Compiler Theory
New chapters include:
Chapter 10 Instruction-Level Parallelism
Chapter 11 Optimizing for Parallelism and Locality
Chapter 12 Interprocedural Analysis
Features
- Includes a linker construction project written in Perl, with project files available for download.
- Covers dynamic linking in Windows, UNIX, Linux, BeOS, and other operating systems.
- Explains the Java linking model and how it figures in network applets and extensible Java code.
- Helps you write more elegant and effective code, and build applications that compile, load, and run more efficiently.
Computer Architecture
Theory
- Students should be introduced to computer systems from the perspective of a programmer, rather from the more traditional perspective of a system implementer. What does this mean?
- Students should get a view of the complete system, comprising the hardware, operating system, compiler, and network.
- Students learn best by developing and evaluating real programs that run on real machines.
We cover data representations, machine level representations of C programs, processor architecture, program optimizations, the memory hierarchy, linking, exceptional control flow (exceptions, interrupts, processes, and Unix signals), virtual memory and memory management, system-level I/O, basic network programming, and concurrent programming. These concepts are supported by series of fun and hands-on lab assignments. See the manuscript Preface for more details.
This book takes a modern structured, layered approach to understanding computer systems. It's highly accessible - and it's been thoroughly updated to reflect today's most critical new technologies and the latest developments in computer organization and architecture. Tanenbaum’s renowned writing style and painstaking research make this one of the most accessible and accurate books available, maintaining the author’s popular method of presenting a computer as a series of layers, each one built upon the ones below it, and understandable as a separate entity.
Implementations
PC
Key highlights:
- CPU's from the 8086/8088 to the Pentium III and Athlon
- Real, protected and virtual models
- Windows and plug&play devices
- CPU Clones from all major manufacturers
- Chipsets and support chips
- Timers, interrupts and DMA
- I/O programming and PCI bus programming
- AGP variants and graphic systems
- Universal serial bus
- Local storage from the diskette to DVD
- Memory systems, SDRAM, EDO, flas, RAM bus, and modules
- Extensive glossary which explains most of the terms and concepts related to personal computer hardware.
- Appendices brimming with practical advice, especially for programmers.
Human-Computer Interaction
Networking
Theory
Tanenbaum takes a structured approach to explaining how networks work from the inside out. He starts with an explanation of the physical layer of networking, computer hardware and transmission systems; then works his way up to network applications. Tanenbaum's in-depth application coverage includes email; the domain name system; the World Wide Web (both client- and server-side); and multimedia (including voice over IP, Internet radio video on demand, video conferencing, and streaming media. Each chapter follows a consistent approach: Tanenbaum presents key principles, then illustrates them utilizing real-world example networks that run through the entire book—the Internet, and wireless networks, including Wireless LANs, broadband wireless and Bluetooth. The Fifth Edition includes a chapter devoted exclusively to network security. The textbook is supplemented by a Solutions Manual, as well as a Website containing PowerPoint slides, art in various forms, and other tools for instruction, including a protocol simulator whereby students can develop and test their own network protocols.
This book has become the dominant book for this course because of the authors’ reputations, the precision of explanation, the quality of the art program, and the value of their own supplements.
Visit the authors’ blog for information and resources to discuss the newest edition, as well as valuable insights, teaching tips, and discussion about the field of Computer Networking http://kuroseross.com
Implementations
AppleTalk
OSI
Buy_from_amazon.gif The Little Black Book: Mail Bonding with OSI Directory Services
TCP/IP
ISBN 0321336313.jpg
Buy_from_amazon.gif
ISBN 020163354X.jpg
Buy_from_amazon.gif
ISBN 0201634953.jpg
Buy_from_amazon.gif
Peripherals
Implementations
USB
This book will show you how to find and initialize each of the four major USB Host Controllers, set up USB stacks, and communicate with attached devices. It has detailed information and examples of each step required to accomplish this. Detailed information for the UHCI, OHCI, EHCI, and the new Super Speed xHCI controller is easy to follow and understand.
Resources Included:
- Source code - Shows how to detect a controller and send/receive data to/from the attached device(s).
Operating Systems
Theory
The widely anticipated revision of this worldwide best-seller incorporates the latest developments in operating systems (OS)technologies. The Third Edition includes up-to-date materials on relevant OS such as Linux, Windows, and embedded real-time and multimedia systems. Tanenbaum also provides information on current research based on his experience as an operating systems researcher.
Student Resources Include:
- Online Exercises - Provide hands-on experience with building as well as analyzing the performance of OS. In particular, these exercises have been designed to provide experience with analyzing the resource consumptions in Windows and Linux.
- Simulation Exercises - Designed to provide experience with building some key components of an OS, including process scheduling, main memory allocation, paging algorithms and virtual memory, and file systems.
- Lab Experiments
- Please note, GOAL is no longer available with this book.
Password-Protected Instructor Resources (Select the Resources Tab to View Downloadable Files):
- Power Point Lecture Slides
- Figures in both .jpeg and .eps file format
- Solutions to Exercises
- Please note, GOAL is no longer available with this book.
Modern Operating Systems, 3e is the recipient of the Text and Authors Association (TAA) 2010 McGuffey Longevity Award. The McGuffey Longevity Award recognizes textbooks whose excellence has been demonstrated over time.
Implementations
This is literally a "how to book" on writing a computer operating system, and includes the assembler and C language code to build one. In fact, it contains the complete operating system source code, an assembler and C compiler, along with their source code, on the accompanying CD! This is the exact text of the original book except where the author has made very minor corrections where the original text was incorrect (editing mistakes, typos, etc.). You may view the first chapter which is an overview of the book, and the author's goals with the link in the table below.
The PDF ebook is approximately 2.7 Mb. Total size of all files to download is approximately 8.5 Mb. The printed version is approximately 604 pages, while the PDF version is 667 pages. The printed version also contains a complete index generated by the author.
Revised to address the latest version of MINIX (MINIX 3), this streamlined, simplified new edition remains the only operating systems text to first explain relevant principles, then demonstrate their applications using a Unix-like operating system as a detailed example. It has been especially designed for high reliability, for use in embedded systems, and for ease of teaching.
You do not have to be a kernel architect or file system engineer to use Practical File System Design. Neither do you have to be a BeOS developer or user. Only basic knowledge of C is required. If you have ever wondered about how file systems work, how to implement one, or want to learn more about the Be File System, this book is all you will need.
- Review of other file systems, including Linux ext2, BSD FFS, Macintosh HFS, NTFS and SGI's XFS.
- Allocation policies for placing data on disks and discussion of on-disk data structures used by BFS
- How to implement journaling
- How a disk cache works, including cache interactions with the file system journal
- File system performance tuning and benchmarks comparing BFS, NTFS, XFS, and ext2
- A file system construction kit that allows the user to experiment and create their own file systems
Buy_from_amazon.gif Project Oberon: The Design of an Operating System and Compiler
This is the first-hand account of the design, develoment and implementation of Oberon. It provides a facinating insight into the theory and practice of workstation development for all those eager to learn from the experience of two world class software engineers.
Project Oberon includes:
- The complete set of program listings for the Oberon system, together with detailed explanations of how the system was developed
- A demonstration of how economical software engineering can produce a powerful, efficient and flexible system requiring a fraction of the computer power and storage capacity of current commercial operating systems
- An in-depth account of the Oberon System as the basis for a multi-server workstation, including file distribution, printing and electronic mail facilities.
Buy_from_amazon.gif The Design and Implementation of the FreeBSD Operating System, 2nd ed.
Three long-time FreeBSD project leaders begin with a concise overview of the FreeBSD kernel's current design and implementation. Next, they cover the FreeBSD kernel from the system-call level down–from the interface to the kernel to the hardware. Explaining key design decisions, they detail the concepts, data structures, and algorithms used in implementing each significant system facility, including process management, security, virtual memory, the I/O system, filesystems, socket IPC, and networking.
ISBN 0735648735.jpg
Buy_from_amazon.gif
ISBN 0735665877.jpg
Buy_from_amazon.gif
- Understand how the core system and management mechanisms work—from the object manager to services to the registry
- Explore internal system data structures using tools like the kernel debugger
- Grasp the scheduler’s priority and CPU placement algorithms
- Go inside the Windows security model to see how it authorizes access to data
- Understand how Windows manages physical and virtual memory
- Tour the Windows networking stack from top to bottom—including APIs, protocol drivers, and network adapter drivers
- Troubleshoot file-system access problems and system boot problems
- Learn how to analyze crashes
- Sixth in the series, this edition was again written by Mark Russinovich, a Technical Fellow in Microsoft’s Azure Group, David Solomon, an operating systems expert and Windows internals teacher, and Alex Ionescu, Chief Architect at CrowdStrike and specializing in OS internals and security. Besides updates for changes in Windows, there are many new experiments and examples that highlight the use of both existing and new Sysinternals tools.
The sixth edition is being released in two parts: Part 1 is available now and Part 2 will be available in September. The reason for the split was to get the content into readers’ hands as soon as possible.
Programming Languages
Theory
Implementations
C
Describing the C language more clearly and in more detail than any other book, authors Samuel P. Harbison and Guy L. Steele Jr. provide in a single manual:
- Standard C (1999) - the new revison of the C Standard supports complex and Boolean types, variable length arrays, precise floating-point programming, and new libraries for portability and internationalization.
- Standard C (1989)- the version of C used by most of today's programmers.
- Traditional C-common practice before 1990, with millions of lines of code in use every day.
- C++ compatible C-code that can be used as C or C++.
- The complete C run-time libraries for all C versions.
- C: A Reference Manual is the only book that describes all the details of C-past and present. It is the single must-have reference for all C programmers and implementors.
Thoroughly revised and updated, the expanded Fifth Edition includes a complete description of the latest C Standard, ISO/IEC 9899:1999, with its powerful language extensions and new libraries.
New! Visit the Web site. www.CAReferenceManual.com contains source code for the longer examples in the book, expanded discussions on language issues, the latest ISO/IEC language corrigenda, and links to other C resources.
From the Preface:
We have tried to retain the brevity of the first edition. C is not a big language, and it is not well served by a big book. We have improved the exposition of critical features, such as pointers, that are central to C programming. We have refined the original examples, and have added new examples in several chapters. For instance, the treatment of complicated declarations is augmented by programs that convert declarations into words and vice versa. As before, all examples have been tested directly from the text, which is in machine-readable form.
As we said in the first preface to the first edition, C "wears well as one's experience with it grows." With a decade more experience, we still feel that way. We hope that this book will help you to learn C and use it well.
This book is an essential desktop reference documenting the first official release of The CERT® C Secure Coding Standard. The standard itemizes those coding errors that are the root causes of software vulnerabilities in C and prioritizes them by severity, likelihood of exploitation, and remediation costs. Each guideline provides examples of insecure code as well as secure, alternative implementations. If uniformly applied, these guidelines will eliminate the critical coding errors that lead to buffer overflows, format string vulnerabilities, integer overflow, and other common software vulnerabilities.
Security
Szor presents the state-of-the-art in both malware and protection, providing the full technical detail that professionals need to handle increasingly complex attacks. Along the way, he provides extensive information on code metamorphism and other emerging techniques, so you can anticipate and prepare for future threats.
Szor also offers the most thorough and practical primer on virus analysis ever published—addressing everything from creating your own personal laboratory to automating the analysis process. This book's coverage includes
- Discovering how malicious code attacks on a variety of platforms
- Classifying malware strategies for infection, in-memory operation, self-protection, payload delivery, exploitation, and more
- Identifying and responding to code obfuscation threats: encrypted, polymorphic, and metamorphic
- Mastering empirical methods for analyzing malicious code—and what to do with what you learn
- Reverse-engineering malicious code with disassemblers, debuggers, emulators, and virtual machines
- Implementing technical defenses: scanning, code emulation, disinfection, inoculation, integrity checking, sandboxing, honeypots, behavior blocking, and much more
- Using worm blocking, host-based intrusion prevention, and network-level defense strategies
applications of reverse engineering, this book provides readers with practical, in-depth techniques for software reverse engineering. The book is broken into two parts, the first deals with security-related reverse engineering and the second explores the more practical aspects of reverse engineering. In addition, the author explains how to reverse engineer a third-party software library to improve interfacing and how to reverse engineer a competitor's software to build a better product.
- The first popular book to show how software reverse engineering can help defend against security threats, speed up development, and unlock the secrets of competitive products
- Helps developers plug security holes by demonstrating how hackers exploit reverse engineering techniques to crack copy-protection schemes and identify software targets for viruses and other malware
- Offers a primer on advanced reverse-engineering, delving into "disassembly"-code-level reverse engineering-and explaining how to decipher assembly language
Cryptology
Cryptanalysis
Cryptography
What's New in the Second Edition?
The second edition of Applied Cryptography is a major rewrite of the first edition: 50% more words, 7 more chapters, and over 1600 new references. Not only did I make corrections to the first edition and add developments since it was published, but I also included topics left out of the first edition. The second edition has lots of new algorithms (including GOST, Blowfish, RC4, and A5), more information on the Clipper Chip and key escrow, dozens of new protocols, more information on how PGP works, detailed information on key management and modes of operation, and new source code.
Software Development
Theory
Buy_from_amazon.gif The Mythical Man-Month: Essays on Software Engineering, 20th Anniversary Edition
The added chapters contain (1) a crisp condensation of all the propositions asserted in the original book, including Brooks' central argument in The Mythical Man-Month: that large programming projects suffer management problems different from small ones due to the division of labor; that the conceptual integrity of the product is therefore critical; and that it is difficult but possible to achieve this unity; (2) Brooks' view of these propositions a generation later; (3) a reprint of his classic 1986 paper "No Silver Bullet"; and (4) today's thoughts on the 1986 assertion, "There will be no silver bullet within ten years."
Practice
Buy_from_amazon.gif Design Patterns: Elements of Reusable Object-Oriented Software
The authors begin by describing what patterns are and how they can help you design object-oriented software. They then go on to systematically name, explain, evaluate, and catalog recurring designs in object-oriented systems. With Design Patterns as your guide, you will learn how these important patterns fit into the software development process, and how you can leverage them to solve your own design problems most efficiently.
Each pattern describes the circumstances in which it is applicable, when it can be applied in view of other design constraints, and the consequences and trade-offs of using the pattern within a larger design. All patterns are compiled from real systems and are based on real-world examples. Each pattern also includes code that demonstrates how it may be implemented in object-oriented programming languages like C++ or Smalltalk.
As any good programmer knows, the first thing users of the Linux operating system come face to face with is the shell the UNIX term for a user interface to the system. In other words, it's what lets you communicate with the computer via the keyboard and display. Mastering the bash shell might sound fairly simple but it isn't. In truth, there are many complexities that need careful explanation, which is just what Learning the bash Shell provides.
If you are new to shell programming, the book provides an excellent introduction, covering everything from the most basic to the most advanced features. And if you've been writing shell scripts for years, it offers a great way to find out what the new shell offers. Learning the bash Shell is also full of practical examples of shell commands and programs that will make everyday use of Linux that much easier. With this book, programmers will learn:
- How to install bash as your login shell
- The basics of interactive shell use, including UNIX file and directory structures, standard I/O, and background jobs
- Command line editing, history substitution, and key bindings
- How to customize your shell environment without programming
- The nuts and bolts of basic shell programming, flow control structures, command-line options and typed variables
- Process handling, from job control to processes, coroutines and subshells
- Debugging techniques, such as trace and verbose modes
- Techniques for implementing system-wide shell customization and features related to system security
vi has been the standard editor for close to 30 years. Popular on Unix and Linux, it has a growing following on Windows systems, too. Most experienced system administrators cite vi as their tool of choice. And since 1986, this book has been the guide for vi.
However, Unix systems are not what they were 30 years ago, and neither is this book. While retaining all the valuable features of previous editions, the 7th edition of Learning the vi and vim Editors has been expanded to include detailed information on vim, the leading vi clone. vim is the default version of vi on most Linux systems and on Mac OS X, and is available for many other operating systems too.
With this guide, you learn text editing basics and advanced tools for both editors, such as multi-window editing, how to write both interactive macros and scripts to extend the editor, and power tools for programmers -- all in the easy-to-follow style that has made this book a classic.
Learning the vi and vim Editors includes:
A complete introduction to text editing with vi:
- How to move around vi in a hurry
- Beyond the basics, such as using buffers
- vi's global search and replacement
- Advanced editing, including customizing vi and executing Unix commands
How to make full use of vim:
- Extended text objects and more powerful regular expressions
- Multi-window editing and powerful vim scripts
- How to make full use of the GUI version of vim, called gvim
- vim's enhancements for programmers, such as syntax highlighting, folding and extended tags
Coverage of three other popular vi clones -- nvi, elvis, and vile -- is also included. You'll find several valuable appendixes, including an alphabetical quick reference to both vi and ex mode commands for regular vi and for vim, plus an updated appendix on vi and the Internet.
Learning either vi or vim is required knowledge if you use Linux or Unix, and in either case, reading this book is essential. After reading this book, the choice of editor will be obvious for you too.
The premise behind make is simple: after you change source files and want to rebuild your program or other output files, make checks timestamps to see what has changed and rebuilds just what you need, without wasting time rebuilding other files. But on top of this simple principle, make layers a rich collection of options that lets you manipulate multiple directories, build different versions of programs for different platforms, and customize your builds in other ways.
This edition focuses on the GNU version of make, which has deservedly become the industry standard. GNU make contains powerful extensions that are explored in this book. It is also popular because it is free software and provides a version for almost every platform, including a version for Microsoft Windows as part of the free Cygwin project. Managing Projects with GNU make, 3rd Edition provides guidelines on meeting the needs of large, modern projects. Also added are a number of interesting advanced topics such as portability, parallelism, and use with Java.
Robert Mecklenburg, author of the third edition, has used make for decades with a variety of platforms and languages. In this book he zealously lays forth how to get your builds to be as efficient as possible, reduce maintenance, avoid errors, and thoroughly understand what make is doing. Chapters on C++ and Java provide makefile entries optimized for projects in those languages. The author even includes a discussion of the makefile used to build the book.
Theory of Computation
ISBN 0716782669.jpg
Buy_from_amazon.gif
ISBN 071678291X.jpg
Buy_from_amazon.gif
Using an approach that has been successfully class tested at Stanford, Yale, and Johns Hopkins, Floyd and Beigel offer valuable innovations:
- Unified definitions that yield insight into the capabilities of a wide variety of machines
- The perfect combination of simplicity and rigor---their new approach makes formerly obscure results accessible.
- Ideas and examples from practical computer science bring theory to life
- A mechanism to combine programs, akin to pipes in UNIX(tm)
- The first formal definition of simulation that permits modularized proofs
- A general system of standardization of programs, which streamlines proofs
Floyd an Beigel's bold reformulation of computability and formal language theory provides a firm foundation on which students can build a rich and enduring body of knowledge.
UNIX
ISBN 0131411551.jpg
Buy_from_amazon.gif
ISBN 0130810819.jpg
Buy_from_amazon.gif
All the examples in this text are actual, runnable code tested on Unix systems. However, many non-Unix systems support the sockets API and the examples are largely operating system-independent, as are the general concepts we present. Virtually every operating system (OS) provides numerous network-aware applications such as Web browsers, email clients, and file-sharing servers. We discuss the usual partitioning of these applications into client and server and write our own small examples of these many times throughout the text.
Well-implemented interprocess communications (IPC) are key to the performance of virtually every non-trivial UNIX program. In UNIX Network Programming, Volume 2, Second Edition, legendary UNIX expert W. Richard Stevens presents a comprehensive guide to every form of IPC, including message passing, synchronization, shared memory, and Remote Procedure Calls (RPC).
Stevens begins with a basic introduction to IPC and the problems it is intended to solve. Step-by-step you'll learn how to maximize both System V IPC and the new Posix standards, which offer dramatic improvements in convenience and performance. You'll find extensive coverage of Pthreads, with many examples reflecting multiple threads instead of multiple processes. Along the way, you'll master every current IPC technique and technology, including:
- Pipes and FIFOs.
- Posix and System V Message Queues
- Mutexes and Condition Variables
- Read-Write Locks
- Record Locking
- Posix and System V Semaphores
- Posix and System V Shared Memory
- Solaris Doors and Sun RPC
- Performance Measurements of IPC Techniques
If you've read Stevens' best-selling first edition of UNIX Network Programming, this book expands its IPC coverage by a factor of five! You won't just learn about IPC "from the outside." You'll actually create implementations of Posix message queues, read-write locks, and semaphores, gaining an in-depth understanding of these capabilities you simply can't get anywhere else.
The book contains extensive new source code-all carefully optimized and available on the Web. You'll even find a complete guide to measuring IPC performance with message passing bandwidth and latency programs, and thread and process synchronization programs.
The better you understand IPC, the better your UNIX software will run. One book contains all you need to know: UNIX Network Programming, Volume 2, Second Edition.