| Foreword |
|
vi | (7) |
|
|
|
|
|
| Worked Examples |
|
xiii | (3) |
| Computer Organization and Design Online |
|
xvi | (3) |
| Preface |
|
xix | |
|
1 Computer Abstractions and Technology |
|
|
2 | (50) |
|
|
|
3 | (2) |
|
|
|
5 | (5) |
|
|
|
10 | (11) |
|
1.4 Integrated Circuits: Fueling Innovation |
|
|
21 | (3) |
|
1.5 Real Stuff: Manufacturing Pentium Chips |
|
|
24 | (5) |
|
1.6 Fallacies and Pitfalls |
|
|
29 | (1) |
|
|
|
30 | (2) |
|
1.8 Historical Perspective and Further Reading |
|
|
32 | (12) |
|
|
|
44 | (1) |
|
|
|
45 | (7) |
|
2 The Role of Performance |
|
|
52 | (52) |
|
|
|
54 | (4) |
|
2.2 Measuring Performance |
|
|
58 | (2) |
|
|
|
60 | (6) |
|
2.4 Choosing Programs to Evaluate Performance |
|
|
66 | (3) |
|
2.5 Comparing and Summarizing Performance |
|
|
69 | (2) |
|
2.6 Real Stuff: The SPEC95 Benchmarks and Performance of Recent Processors |
|
|
71 | (4) |
|
2.7 Fallacies and Pitfalls |
|
|
75 | (7) |
|
|
|
82 | (1) |
|
2.9 Historical Perspective and Further Reading |
|
|
83 | (6) |
|
|
|
89 | (1) |
|
|
|
90 | (14) |
|
3 Instructions: Language of the Machine |
|
|
104 | (104) |
|
|
|
106 | (1) |
|
3.2 Operations of the Computer Hardware |
|
|
107 | (2) |
|
3.3 Operands of the Computer Hardware |
|
|
109 | (7) |
|
3.4 Representing Instructions in the Computer |
|
|
116 | (6) |
|
3.5 Instructions for Making Decisions |
|
|
122 | (10) |
|
3.6 Supporting Procedures in Computer Hardware |
|
|
132 | (10) |
|
|
|
142 | (3) |
|
3.8 Other Styles of MIPS Addressing |
|
|
145 | (11) |
|
|
|
156 | (7) |
|
3.10 An Example to Put It All Together |
|
|
163 | (8) |
|
3.11 Arrays versus Pointers |
|
|
171 | (4) |
|
3.12 Real Stuff: PowerPC and 80x86 Instructions |
|
|
175 | (10) |
|
3.13 Fallacies and Pitfalls |
|
|
185 | (2) |
|
|
|
187 | (2) |
|
3.15 Historical Perspective and Further Reading |
|
|
189 | (7) |
|
|
|
196 | (1) |
|
|
|
196 | (12) |
|
4 Arithmetic for Computers |
|
|
208 | (128) |
|
|
|
210 | (1) |
|
4.2 Signed and Unsigned Numbers |
|
|
210 | (10) |
|
4.3 Addition and Subtraction |
|
|
220 | (5) |
|
|
|
225 | (5) |
|
4.5 Constructing an Arithmetic Logic Unit |
|
|
230 | (20) |
|
|
|
250 | (15) |
|
|
|
265 | (10) |
|
|
|
275 | (26) |
|
4.9 Real Stuff: Floating Point in the PowerPC and 80x86 |
|
|
301 | (3) |
|
4.10 Fallacies and Pitfalls |
|
|
304 | (4) |
|
|
|
308 | (4) |
|
4.12 Historical Perspective and Further Reading |
|
|
312 | (10) |
|
|
|
322 | (1) |
|
|
|
322 | (14) |
|
5 The Processor: Datapath and Control |
|
|
336 | (98) |
|
|
|
338 | (5) |
|
|
|
343 | (8) |
|
5.3 A Simple Implementation Scheme |
|
|
351 | (26) |
|
5.4 A Multicycle Implementation |
|
|
377 | (22) |
|
5.5 Microprogramming: Simplifying Control Design |
|
|
399 | (11) |
|
|
|
410 | (6) |
|
5.7 Real Stuff: The Pentium Pro Implementation |
|
|
416 | (3) |
|
5.8 Fallacies and Pitfalls |
|
|
419 | (2) |
|
|
|
421 | (2) |
|
5.10 Historical Perspective and Further Reading |
|
|
423 | (3) |
|
|
|
426 | (1) |
|
|
|
427 | (7) |
|
6 Enhancing Performance with Pipelining |
|
|
434 | (104) |
|
6.1 An Overview of Pipelining |
|
|
436 | (13) |
|
|
|
449 | (17) |
|
|
|
466 | (10) |
|
6.4 Data Hazards and Forwarding |
|
|
476 | (13) |
|
6.5 Data Hazards and Stalls |
|
|
489 | (7) |
|
|
|
496 | (9) |
|
|
|
505 | (5) |
|
6.8 Superscalar and Dynamic Pipelining |
|
|
510 | (7) |
|
6.9 Real Stuff: PowerPC 604 and Pentium Pro Pipelines |
|
|
517 | (3) |
|
6.10 Fallacies and Pitfalls |
|
|
520 | (1) |
|
|
|
521 | (4) |
|
6.12 Historical Perspective and Further Reading |
|
|
525 | (4) |
|
|
|
529 | (1) |
|
|
|
529 | (9) |
|
7 Large and Fast: Exploiting Memory Hierarchy |
|
|
538 | (98) |
|
|
|
540 | (5) |
|
|
|
545 | (19) |
|
7.3 Measuring and Improving Cache Performance |
|
|
564 | (15) |
|
|
|
579 | (24) |
|
7.5 A Common Framework for Memory Hierarchies |
|
|
603 | (8) |
|
7.6 Real Stuff: The Pentium Pro and PowerPC 604 Memory Hierarchies |
|
|
611 | (4) |
|
7.7 Fallacies and Pitfalls |
|
|
615 | (3) |
|
|
|
618 | (3) |
|
7.9 Historical Perspective and Further Reading |
|
|
621 | (6) |
|
|
|
627 | (1) |
|
|
|
628 | (8) |
|
8 Interfacing Processors and Peripherals |
|
|
636 | (74) |
|
|
|
638 | (3) |
|
8.2 I/O Performance Measures: Some Examples from Disk and File Systems |
|
|
641 | (3) |
|
8.3 Types and Characteristics of I/O Devices |
|
|
644 | (11) |
|
8.4 Buses: Connecting I/O Devices to Processor and Memory |
|
|
655 | (18) |
|
8.5 Interfacing I/O Devices to the Memory, Processor, and Operating System |
|
|
673 | (11) |
|
8.6 Designing an I/O System |
|
|
684 | (3) |
|
8.7 Real Stuff: A Typical Desktop I/O System |
|
|
687 | (1) |
|
8.8 Fallacies and Pitfalls |
|
|
688 | (2) |
|
|
|
690 | (4) |
|
8.10 Historical Perspective and Further Reading |
|
|
694 | (6) |
|
|
|
700 | (1) |
|
|
|
700 | (10) |
|
|
|
710 | |
|
|
|
712 | (2) |
|
9.2 Programming Multiprocessors |
|
|
714 | (3) |
|
9.3 Multiprocessors Connected by a Single Bus |
|
|
717 | (10) |
|
9.4 Multiprocessors Connected by a Network |
|
|
727 | (7) |
|
|
|
734 | (2) |
|
|
|
736 | (4) |
|
9.7 Real Stuff: Future Directions for Multiprocessors |
|
|
740 | (3) |
|
9.8 Fallacies and Pitfalls |
|
|
743 | (3) |
|
9.9 Concluding Remarks--Evolution versus Revolution in Computer Architecture |
|
|
746 | (2) |
|
9.10 Historical Perspective and Further Reading |
|
|
748 | (8) |
|
|
|
756 | (1) |
|
|
|
756 | |
| APPENDICES |
|
| A Assemblers, Linkers, and the SPIM Simulator |
|
A-2 | |
|
James R. Larus, University of Wisconsin |
|
|
|
|
| A.1 Introduction |
|
A-3 | |
| A.2 Assemblers |
|
A-10 | |
| A.3 Linkers |
|
A-17 | |
| A.4 Loading |
|
A-19 | |
| A.5 Memory Usage |
|
A-20 | |
| A.6 Procedure Call Convention |
|
A-22 | |
| A.7 Exceptions and Interrupts |
|
A-32 | |
| A.8 Input and Output |
|
A-36 | |
| A.9 SPIM |
|
A-38 | |
| A.10 MIPS R2000 Assembly Language |
|
A-49 | |
| A.11 Concluding Remarks |
|
A-75 | |
| A.12 Key Terms |
|
A-76 | |
| A.13 Exercises |
|
A-76 | |
| B The Basics of Logic Design |
|
B-2 | |
| B.1 Introduction |
|
B-3 | |
| B.2 Gates, Truth Tables, and Logic Equations |
|
B-4 | |
| B.3 Combinational Logic |
|
B-8 | |
| B.4 Clocks |
|
B-18 | |
| B.5 Memory Elements |
|
B-21 | |
| B.6 Finite State Machines |
|
B-35 | |
| B.7 Timing Methodologies |
|
B-39 | |
| B.8 Concluding Remarks |
|
B-44 | |
| B.9 Key Terms |
|
B-45 | |
| B.10 Exercises |
|
B-45 | |
| C Mapping Control to Hardware |
|
C-2 | |
| C.1 Introduction |
|
C-3 | |
| C.2 Implementing Combinational Control Units |
|
C-4 | |
| C.3 Implementing Finite State Machine Control |
|
C-8 | |
| C.4 Implementing the Next-State Function with a Sequencer |
|
C-21 | |
| C.5 Translating a Microprogram to Hardware |
|
C-28 | |
| C.6 Concluding Remarks |
|
C-31 | |
| C.7 Key Terms |
|
C-32 | |
| C.8 Exercises |
|
C-32 | |
| Glossary |
|
G-1 | |
| Index |
|
I-1 | |