Preface xxxi mands.This is the student's first introduction to concurrency,and it gives them a clear idea of Unix process control,signals,and signal handling. Malloc Lab.Students implement their own versions'of malloc,free,and (op- tionally)realloc.This lab gives students a clear understanding of data layout and organization,and requires them to evaluate different trade-offs between space and time,efficiency. Proxy LabStudents implement a concurrent:Web proxy that sits between their browsers and the rest of the World Wide Web.This lab exposes the students to such topics as Web clients and servers,and ties together many of the con- cepts from the course,such as byte ordering,file I/O,process control,signals, signal handling,memory mapping,sockets,and concurrency.Students like being able to see their programs in action with real Web browsers and Web servers. The CS:APP instructor's manual has a detailed discussion of the labs,as well as directions for downloading the support software. Acknowledgments for the Third Edition It is a pleasure to acknowledge and thank those who have helped us produce this third edition of,the CS:APP text. We would like to thank our Carnegie Mellon colleagues who have taught the ICS course over the years and who have provided so much in'sightful feedback and encouragement:Guy Blelloch,Roger Dannenberg,David Eckhardt,Franz Franchetti,Greg Ganger,Seth Goldstein,Khaled Harras,Greg Kesden,Bruce Maggs,Todd Mowry,Andreas Nowatzyk,Frank Pfenning,Markus Pueschel,and Anthony Rowe.David Winters was very helpful in installing and configuring the reference Linux box. Jason Fritts (St.Louis University)and Cindy:Norris (Appalachian State) provided us with detailed and thoughtful reviews of the second edition.Yili Gong (Wuhan University)wrote the Chinese'translation,maintained the errata page for the Chinese.version,and contributed many bug reports.Godmar Back (Virginia Tech)helped us improve the text significantly by introducing us to the.notions of async-signal safety and protocol-independent network programming. Many.thanks to our eagle-eyed readers who reported bugs in the second edi- tion:Rami Ammari,Paul Anagnostopoulos,Lucas Barenfanger,Godmar Back, Ji Bin,Sharbel Bousemaan,Richard Callahan,Seth Chaiken,Cheng Chen,Libo Chen;Tao Du,Pascal Garcia,Yili,Gong,Ronald Greenberg,Dorukhan Guloz, Dong Han,Dominik Helm,Ronald Jones,Mustafa Kazdagli,Gordon Kindlmann, Sankar Krishnan,Kanak Kshetri,Junlin Lu,Qiangqiang Luo,Sebastian Luy, Lei Ma,Ashwin Nanjappa,Gregoire Paradis,Jonas Pfenninger,Karl Pichotta, David Ramsey,Kaustabh Roy,David Selvaraj,Sankar Shanmugam,Dominique Smulkowska,Dag Sorbo,Michael Spear,Yu Tanaka,Steven Tricanowicz,Scott Wright,Waiki Wright,Han Xu,Zhengshan Yan,Firo Yang,Shuang Yang,John Ye,Taketo Yoshida,Yan Zhu,and Michael Zink
mands. This is the student'sdirst introduction to concurrency, and it gives them a clear idea of Unix process control, signals, and signal ·handling. Ma/Joe Lab. Students implement their myn versions• of ~ailoc, free, and'( optionally) realfoc. This lab gives students a clear understanding of data layout anCI organization, and requires them to evaluate different trade-offs between space anCI time 1 efficiency. Proxy Lab. •Students implement a concl\rr.ent1 Web ,proxy tha~ sits between their , , browsers and the rest of the World Wide Web. '!his lab exposes the students to such topics as Web clients and servers, and ties together many of the concepts from the course, such as byte ordering, file 1/0, process control, signals, signal handling, memory mapping, sockets, and concurrency. Students like being able to see their programs in action with real Web browsers and Web servers. , t. ·, The CS:APP instructor's manual has a detailed discussion of the labs, as well as directions for downloading the support software . • Acknowledgments for the Third Edition It is a pleasure to acknowledge and thank those who have helped us produce this third edition of.the CS:APP text. We would like to thank our Carnegie Mellon colleagues who have taught the JCS course over the years and wlio have provided so much in'sightful feedback and encouragement: Guy Blelloch, Roger Dannenberg, David Eckhardt, Franz Franchetti, Greg Ganger, Seth Goldsteirt, Khale!f Harras,,Greg Kesden, Bruce Maggs, Todd Mowry, Andreas Nowatzyk, Frank Pfenning, Markus Pueschel, and Anthony Rowe. David Wirtters was very helpful in installing and configuring the reference Linux box. ., Jason Fritts (St. Louis University) and• i=;indyi Norris (Appalachian State) provided us with detailed and thoughtful reviews of the second edition. Yili Gong (Wuhan University) wrote the Chinese'translation, maintained the errata page for the Chinese.version, and contributed many bug reports. Godmar Back (Virginia Tech) helped us improve the text significantly by introducing us to the.notions of async-signal safety and protocoi'independeb.M1etwork programming. Many. thanks to our eagle-eyed readers who reported bugs in the second edition: Rami Ammari, Paul Anagn6stopoulos, Lucas Biirenfiinger, Gotlmar Back, Ji Bin, Sharbel Bousemaan, Ric'hard..callahan, Seth Chaiken, Cheng Chen, Libo Chen; Tao Du, Pase~! Garcia, Yili .Gong, Ronald Greenberg, Dorukhan Gill6z, Dong Han,· Dominik Helm, Ronald Jones, Mustafa Kazdag!i, Gordon Kindlmann, Sankar Krishnan, Kianak Kshetri, Jun!in Lu, Qiangqiang Luo, Sebastian Luy, Lei Ma, Ashwin Nanjappa, Gr~goir~ Paradis, Jonas Pfenninger, Karl Pichotta, David Ramsey, Kaustabh Roy, David.Selvaraj, Sankar Shanmugam, Dbminique Smulkowska, Dag S111rb111, Michael Spear, Yu Tanaka, Steven Tricanowicz, Scott Wright, Waiki Wright, Han Xu, Zhengshan Yan, Firo Yang, Shuang·Yang, John Ye, Taketa Yoshida, Yan Zhu, and Michael Zink. Preface xxxi
xxxii Preface Thanks also to our readers who have contributed to the labs,including God- mar Back(Virginia Tech),Taymon Beal (Worcester Polytechnic Institute),Aran Clauson(Western Washington University),Cary Gray (Wheaton College),Paul Haiduk(West Texas A&M University),Len Hamey(Macquarie University),Ed- die Kohler (Harvard),Hugh Lauer (Worcester Polytechnic Institute),Robert Marmorstein(Longwood University),and James Riely(DePaul University). Once again,Paul Anagnostopoulos of Windfall Software did a masterful job of typesetting the book and leading the production process.Many thanks to Paul and his stellar team:Richard Camp(copyediting),Jennifer McClain (proofread- ing),Laurel Muller (art production),and Ted Laux(indexing).Paul even spotted a bug in our description of the origins of the acronym BSS that had persisted undetected since the first edition! Finally,we would like to thank our friends at Prentice Hall.Marcia Horton and our editor,Matt Goldstein,have been unflagging in their support and encour- agement,and we are deeply grateful to them. Acknowledgments from the Second Edition We are deeply grateful to the many people who have helped us produce this second edition of the CS:APP text. First and foremost,we would like to recognize our colleagues who have taught the ICS course at Carnegie Mellon for their insightful feedback and encourage- ment:Guy Blelloch,Roger Dannenberg,David Eckhardt,Greg Ganger,Seth Goldstein,Greg Kesden,Bruce Maggs,Todd Mowry,Andreas Nowatzyk,Frank Pfenning,and Markus Pueschel. Thanks also to our sharp-eyed readers who contributed reports to the errata page for the first edition:Daniel Amelang,Rui Baptista,Quarup Barreirinhas, Michael Bombyk,Jorg Brauer,Jordan Brough,Yixin Cao,James Caroll,Rui Car- valho,Hyoung-Kee Choi,Al Davis,Grant Davis,Christian Dufour,Mao Fan, Tim Freeman,Inge Frick,Max Gebhardt,Jeff Goldblat,Thomas Gross,Anita Gupta,John Hampton,Hiep Hong,Greg Israelsen,Ronald Jones,Haudy Kazemi, Brian Kell,Constantine Kousoulis,Sacha Krakowiak,Arun Krishnaswamy,Mar- tin Kulas,Michael Li,Zeyang Li,Ricky Liu,Mario Lo Conte,Dirk Maas,Devon Macey,Carl Marcinik,Will Marrero,Simone Martins,Tao Men,Mark Morris- sey,Venkata Naidu,Bhas Nalabothula,Thomias Niemann,Eric Peskin,David Po, Anne Rogers,John Ross,Michael Scott,Seiki,Ray Shih,Darren Shultz,Erik Silkensen,Suryanto,Emil Tarazi,Nawanan Theera-Ampornpunt,Joe Trdinich, Michael Trigoboff,James Troup,Martin Vopatek,Alan West,Betsy Wolff,Tim Wong,James Woodruff,Scott Wright,Jackie Xiao,Guanpeng Xu,Qing Xu,Caren Yang,Yin Yongsheng,Wang Yuanxuan,Steven Zhang,and Day Zhong.Special thanks to Inge Frick,who identified a subtle deep copy bug in our lock-and-copy example,and to Ricky Liu for his amazing proofreading skills. Our Intel Labs colleagues Andrew Chien and Limor Fix were exceptionally supportive throughout the writing of the text.Steve Schlosser graciously provided some disk drive characterizations.Casey Helfrich and Michael Ryan installed
xxxii Preface Thanks also to our readers who have contributed to the labs, including Godmar Back (VJrginia Tech), Taymo'n Beal (Worcester Polytechnic Institute), Aran Clauson (Western Washington University), Cary Gray (Wheaton College), Paul Haiduk ' (West Texas A&M University), Len Hamey (Macquarie University), Eddie Kohler (Harvard), Hugh Lauer (Worcester Polytechnic Institute), Robert Marmorstein (Longwood University), and James Riely (DePaul University). Once again, Paul Anagnostopoulos of Windfall Software did a masterful job of typesetting the book and leading the production process. Many thanks to Paul and his stellar team: Richard Camp (copy editing), Jennifer McClain (proofreading), Laurel Muller (art production), and Ted Laux (indexing). Paul even spotted a bug in our description of the origins of the acronym BSS that had persisted undetected since the first edition! Finally, we would like to thank our friends at Prentice Hall. Marcia Horton and our editor, Matt Goldstein, have been unflagging in their support and encouragement, and we are deeply grateful to them. Acknowledgments from the Second Edition We are deeply grateful to the many people who have helped us produce this second edition of the CS:APP text. First and foremost, we would like to recognize our colleagues who have taught the ICS course at Carnegie Mellon for their insightful feedback and encouragement: Guy Blelloch, Roger Dannenberg, David Eckhardt, Greg Ganger, Seth Goldstein, Greg Kesden, Bruce Maggs, Todd Mowry, Andreas Nowatzyk, Frank Pfenning, and Markus Pueschel. Thanks also to our sharp-eyed readers who contributed reports to the errata page for the first edition: Daniel Amelang, Rui Baptista, Quarup Barreirinhas, Michael Bombyk, forg Brauer, Jordan Brough, Yixin Cao, James Caroll, Rui Carvalho, Hyoung-Kee Choi, Al Davis, Grant Davis, Christian Dufour, Mao Fan, Tim Freeman, Inge Frick, Max Gebhardt, Jeff Goldblat, Thomas Gross, Anita Gupta, John Hampton, Hiep Hong, Greg Israelsen, Ronald Jones, Haudy Kazemi, Brian Kell, Constantine Kousoulis, Sacha Krakowiak, Arun Krishnaswamy, Martin Kulas, Michael Li, Zeyang Li, Ricky Liu, Mario Lo Conte, Dirk Maas, Devon Macey, Carl Marcinik, Will Marrero, Simone Martins, Tao Men, Mark Morrissey, Venkata Naidu, Bhas Nalabothula, Thonias Niemann, Eric Peskin, David Po, Anne Rogers, John Ross, Michael Scott, Seiki, Ray Shih, Darren Shultz, Erik Silkensen, Suryanto, Emil Tarazi, Nawanan Theera-Ampornpunt, Joe Trdinich, Michael Trigoboff, James Troup, Martin Vopatek, Alan West, Betsy Wolff, Tim Wong, James Woodruff, Scott Wright, Jackie Xiao, Guanpeng Xu, Qing Xu, Caren Yang, Yin Yongsheng, Wang Yuanxuan, Steven Zhang, and D~y Zhong. Special thanks to Inge Frick, who identified a subtle deep copy bug in our lock-and-copy example, and to Ricky Liu for his amazing proofreading skills. Our Intel Labs colleagues Andrew Chien and Limor Fix were exceptionally supportive throughout the writing of the text. Steve Schlosser graciously provided some disk dri~e characterizations. Casey Helfrich and Michael Ryan installed g
Preface xxxiii and maintained our new Core i7 box.Michael Kozuch,Babu Pillai,and Jason Campbell provided valuable insight on memory system performance,multi-core systems,and the power wall.Phil Gibbons and Shimin Chen shared their consid. erable expertise on solid state disk,designs. We have been able to call on the talents'of many,including Wen-Mei Hwu; Markus Pueschel,and Jiri Simisa,to provide both detailed comments and high- level advice.James Hoe helped us create a Verilog version of the Y86 processor and did all of the'work needed to synthesize working hardware. Many thanks to our colleagues wha provided reviews,of the draft manu- script:James Archibald(Brigham Young University),Richard Carver(George Mason University),Mirela Damian (Villanova University),Peter Dinda (North- western University),John Fiore(Temple University),Jason Fritts(St:Louis Uni- versity),John Greiner(Rice University),Brian Harvey(University of California, Berkeley),Don Heller(Penn State University),Wei.Chung Hsu(University of Minnesota),Michelle Hugue (University of Maryland),Jeremy Johnson (Drexel University),Geoff Kuenning (Harvey Mudd College),Ricky Liu,Sam.Mad- den (MIT),Fred Martin (University of Massachusetts,Lowell),Abraham Matta (Boston University),Markus Pueschel (Carnegie Mellon University),Norman Ramsey(Tufts University),Glenn Reinmann(UCLA);Michela Taufer(Univer- sity of Delaware),and Craig Zilles(UIUC). Paul Anagnostopoulos of Windfall Software did an outstanding job of type- setting the book and leading the production team..Many thanks to Paul and his superb team:Rick Camp(copyeditor),Joe Snowden(compositor),MaryEllen N. Oliver(proofreader),Laurel Muller(artist),and Ted Laux (indexer). Finally,we would like to thank our friends at Prentice Hall:Marcia Horton has always been there for us.Our editor,Matt Goldstein,provided stellar leadership frombeginning to end.We are profoundly grateful for their help,encouragement, and insights. Acknowledgments from the First Edition We are deeply indebted to many friends and colleagues for their thoughtful crit- icisms and encouragement.A special thanks to our 15-213 students,whose infec- tious energy and enthusiasm spurred us on.Nick Carter and Vinny Furia gener- ously provided their malloc package. Guy Blelloch,Greg Kesden,Bruce Maggs,and Todd Mowry taught the course over multiple semesters,gave us encouragement,and helped improve the course material.Herb Derby provided early spiritual guidance and encouragement.Al- lan Fisher,Garth Gibson,Thomas Gross,Satya,Peter Steenkiste,and Hui Zhang encouraged us to develop the course from the start.A suggestion from Garth early on got the whole ball rolling,and this was picked up and refined with the help of a group led by Allan Fisher.Mark Stehlik and Peter Lee have been very supportive about building this material into the undergraduate curriculum.Greg Kesden provided helpful feedback on the impact of ICS on.the OS course.Greg Ganger and Jiri Schindler graciously provided some disk drive characterizations
and maintained our· new Core i7 box .. Michael Kozuch, Babu Pillai, and Jason Campbell provided valuable insight !On memory system performance, multi-core systems, and the power wall. Phil Gibbons and Shimin Chen shared their consid; erable expertise on solid state disk. designs. We have·been able to call on.the talents' of many, including Wen-Mei Hwu; Markus Pueschel, and Jiri Sinisa, to provide both detailed comments and highlevel advice. James Hoe helped us create a Verilog version of the Y86 processor and did all of the'work needed to sy~thesize working hardware. Many thanks to our colleagues who..provided reviews,0£ the draft manuscript: James Archibald (Brigham Yonng University), Richard Carver (George Mason University), Mirela Damian (Villanova University), Peter Dinda (Northwestern University), John Fiore (Temple University), Jason Fritts (St: Louis University), John Greiner (Rice University), Brian Harvey (University of California, Berkeley), Don Heller (Penn State Unive~sity), Wei.Chung Hsu (University of Minnesota), Michelle Hugue (University of Maryland),.Jeremy Johnson (Drexel University), Geoff Kuenning (Harvey Mudd College), Ricky Liu, Sam.Madd.en (MIT), Fred Martin (University otMassachusetts, Lowell), Abraham Matta (Boston University), Mqrkus Pueschel (Carnegie Mellon University), Norman Ramsey (Tufts University), Glenn Reinmann (UCLA): Michela Taufer (University of Delaware), and Craig Zilles (UIUC). Paul Anagnostopoulos of Windfall Software did an outstanding job of typesetting the book and leading the production team. Many thanks to Paul and his superb team: Rick Camp ( copyeditor), Joe Snowden (compositor), Mary Ellen N. Oliver (proofreader); Laurel Muller (artist), andTed Laux (indexer). Finally, we would like to thank our friends at Prentice Hall: Marcia Horton has always been there for us. Our editor, Matt Goldstein, provided stellar leadership from·beginning to end. We are profoundly grateful for their help, encouragement, and insights. Acknowledgments from the First Edition We are deeply indebted to many friends and colleagues for their thoughtful criticisms and encouragement. A special thanks to our 15-213 students, whose infectious energy and enthusiasm spurred us on. Nick Carter and Vinny Furia generously provided their malloc package. Guy Blelloch, Greg Kesden, Bruce Maggs, and Todd Mowry taught the course over multiple semesters, gave us encouragement, and helped improve the course material. Herb Derby provided early spiritual guidance and encouragement. Allan Fisher, Garth Gibson, Thomas Gross, Satya, Peter Steenkiste, and Hui Zhang encouraged us to develop the course from the start. A suggestion from Garth early on got the whole ball rolling, and this was picked up and refined with the help of a group led by Allan Fisher. Mark Stehlik and Peter Lee have been very supportive about building this material into the undergraduate curriculum. Greg Kesden provided helpful feedback on the impact of ICS on.the OS course. Greg Ganger and Jiri Schindler. graciously provided some disk drive characterizations Preface xxxiii
xxxiv Preface and answered our questions on modern disks.Tom Stricker showed us the mem- ory mountain.James Hoe provided useful ideas and feedback on how to present processor architecture. A special group of students-Khalil Amiri,Angela Demke Brown,Chris Colohan,Jason Crawford,Peter Dinda,Julio Lopez,Bruce Lowekamp,Jeff Pierce,Sanjay Rao,Balaji Sarpeshkar,Blake Scholl,Sanjit Seshia,Greg Stef- fan,Tiankai Tu,Kip Walker,and Yinglian Xie-were instrumental in helping us develop the content of the course.In particular,Chris Colohan established a fun(and funny)tone that persists to this day,and invented the legendary "binary bomb"that has proven to be a great tool for teaching machine code and debugging concepts. Chris Bauer,Alan Cox,Peter Dinda,Sandhya Dwarkadas,John Greiner, Don Heller,Bruce Jacob,Barry Johnson,Bruce Lowekamp,Greg Morrisett, Brian Noble,Bobbie Othmer,Bill Pugh,Michael Scott,Mark Smotherman,Greg Steffan,and Bob Wier took time that they did not have to read,and advise us on early drafts of the book.A very special thanks to Al Davis(University of Utah),Peter Dinda(Northwestern University),John Greiner(Rice University), Wei Hsu(University of Minnesota),Bruce Lowekamp'(College of William Mary),Bobbie Othmer(University of Minnesota),Michael Scott(University of Rochester),and Bob Wier(Rocky Mountain College)for class testing the beta version.A special thanks to their students as well! We would also like to thank our colleagues at Prentice Hall.Marcia Horton, Eric Frank,and Harold Stone have been unflagging in their support and vision. Harold also helped us present an accurate historical perspective on RISC and CISC processor architectures.Jerry Ralya provided sharp insights and taught us a lot about good writing. Finally,we would like to acknowledge the great technical writers Brian Kernighan and the late W.Richard Stevens,for showing us that technical books can be beautiful. Thank you all. Randy Bryant Dave O'Hallaron Pittsburgh,Pennsylvania
~' - ~ - - -- - I ,, !I~ xx xiv Preface and answered our questions on modern disks. Tom Stricker showed us the memory mountain. James Hoe provided useful ideas and feedback on how to present processor architecture. A special group of students-Khalil Amiri, Angela Demke Brown, Chris Calahan, Jason Crawford, Peter Dinda, Julio Lopez, Bruce Lowekamp, Jeff Pierce, Sanjay Rao, Balaji Sarpeshkar, Blake Scholl, Sanjit Seshia, Greg Steffan, Tiankai Tu, Kip Walker, and Yinglian Xie-were instrumental in helping us develop the content of the course. In particular, Chris Calahan established a fun (and funny) tone that persists to this day, and invented the legendary "binary bomb" that has proven to be a great tool for teaching machine code and debugging concepts. Chris Bauer, Alan Cox, Peter Dinda, Sandhya Dwarkadas, John Greiner, Don Heller, Bruce Jacob, Barry Johnson, Bruce Lowekamp, Greg Morrisett, Brian Noble, Bobbie Othmer, Bill Pugh, Michael Scott, Mark Smotherman, Greg Steffan, and Bob Wier took time that they did not•have to read· and advise us on early drafts of the book. A very special thanks to Al Davis (University of Utah), Peter Dinda \Northwestern University), John Greiner (Rice University), Wei Hsu (University of Minnesota), Bruce Lowekamp'(College of William & Mary), Bobbie Othmer (University of Minnesota), Michael Scott (University of Rochester), and Bob Wier (Rocky Mountain College) for class testing the beta version. A special thanks to their students as well! We would also like to thank our colleagues at Prentice Hall. Marcia Horton, Eric Frank, and Harold Stone have been unflagging in their support and vision. Harold also helped us present an accurate historical perspective on RISC and CISC processor architectures. Jerry Ralya provided sharp insights and taught us a lot about good writing. Finally, we would like to acknowledge the great technical writers Brian Kernighan and the late W. Richard Stevens, for showing us that technical books can be beautiful. Thank you all. Randy Bryant Dave O'Hallaron Pittsburgh, Pennsylvania
About the Authors Randal E.Bryant received his bachelor's degree from the University of Michigan in 1973 and then attended graduate school at the Massachusetts Institute of Technology,receiving his PhD degree in computer science in 1981.He spent three years as an assistant professor at the California Institute of Technology, and'has been on the faculty at Carnegie Mellon since 1984.For five of those years he served as head of the Computer Science Department,and for ten of them he served as Dean of the School of Computer Science. He is currently a university professor of computer sci- ence.He also holds a courtesy appointment with the Department of Electrical and Computer Engineering. Professor Bryant has taught courses in computer systems at both the under- graduate and graduate level for around 40 years.Over many years of teaching computer architecture courses,he began shifting the focus from how computers are designed to how programmers can write more efficient and reliable programs if they understand the system better.Together with Professor O'Hallaron,he de- veloped the course 15-213,Introduction to Computer Systems,at Carnegie Mellon that is the basis for this book.He has also taught courses in algorithms,program- ming,computer networking,distributed systems,and VLSI design. Most of Professor Bryant's research concerns the design of software tools to help software and hardware designers verify the correctness of their systems. These include several types of simulators,as well as formal verification tools that prove the correctness of a design using mathematical methods.He has published over 150 technical papers.His research results are used by major computer manu- facturers,including Intel,IBM,Fujitsu,and Microsoft.He has won several major awards for his research.These include two inventor recognition awards and a technical achievement award from the Semiconductor Research Corporation,the Kanellakis Theory and Practice Award from the Association for Computer Ma- chinery (ACM),and the W.R.G.Baker Award,the Emmanuel Piore Award,the Phil Kaufman Award,and the A.Richard Newton Award from the Institute of Electrical and Electronics Engineers(IEEE).He is a fellow of both the ACM and the IEEE and a member of both the US National Academy of Engineering and the American Academy of Arts and Sciences. XXXV
About the Auth.ors .r Randal E. Bryartt received his bachelor's degree from the University of Michigan in 1973 and then attended graduate school at the Massachusetts Institute of Technology, receiving his PhD degree in computer science in 1981. He spent three years as an assistant ' professor at the California Institute of Technology, -dnd'has been on the faculty at Carnegie Mellon since 1984. For five of those years he served as head of the Computer Science Department, and for ten of them he served as Dean of the Schoolbf Computer Science. He is currently a university professor of computer science. He also holds a courtesy appointment with the Department of Electrical and Computer Engineering. Professor Bryant has taught courses in computer systems at both the undergraduate and graduate level for around 40 years. Over many years of teaching computer architecture courses, he began shifting the focus from how computers are designed to how programmers can write more efficient and reliable programs if they understand the system better. Together with Professor O'Hallaron, he developed the course 15-213, Introduction to Computer Systems, at Carnegie Mellon that is the basis for this book. He has also taught courses in algorithms, programming, computer networking, distributed systems, and VLSI design. Most of Professor Bryant's research concerns the design of software tools to help software and hardware designers verify the correctness of their systems. These include several types of simulators, as well as formal verification tools that prove the correctness of a design using mathematical methods. He has published over 150 technical papers. His research results are used by major computer manufacturers, including Intel, IBM, Fujitsu, and Microsoft. He has won several major awards for his research. These include two inventor recognition awards and a technical achievement award from the Semiconductor Research Corporation, the Kanellakis Theory and Practice Award from the Association for Computer Machinery (ACM), and the W.R. G. Baker Award, the Emmanuel Piore Award, the Phil Kaufman Award, and the A. Richard Newton Award from the Institute of Electrical and Electronics Engineers (IEEE). He is a fellow of both the ACM and the IEEE and a member of both the US National Academy of Engineering and the American Academy of Arts and Sciences. xxxv