Use your Raspberry Pi to get smart about computing fundamentals
In the 1980s, the tech revolution was kickstarted by a flood of relatively inexpensive, highly programmable computers like the Commodore. Now, a second revolution in computing is beginning with the Raspberry Pi. Learning Computer Architecture with the Raspberry Pi is the premier guide to understanding the components of the most exciting tech product available. Thanks to this book, every Raspberry Pi owner can understand how the computer works and how to access all of its hardware and software capabilities.
Now, students, hackers, and casual users alike can discover how computers work with Learning Computer Architecture with the Raspberry Pi. This book explains what each and every hardware component does, how they relate to one another, and how they correspond to the components of other computing systems. You’ll also learn how programming works and how the operating system relates to the Raspberry Pi’s physical components.
- Co-authored by Eben Upton, one of the creators of the Raspberry Pi, this is a companion volume to the Raspberry Pi User Guide
- An affordable solution for learning about computer system design considerations and experimenting with low-level programming
- Understandable descriptions of the functions of memory storage, Ethernet, cameras, processors, and more
- Gain knowledge of computer design and operation in general by exploring the basic structure of the Raspberry Pi
The Raspberry Pi was created to bring forth a new generation of computer scientists, developers, and architects who understand the inner workings of the computers that have become essential to our daily lives. Learning Computer Architecture with the Raspberry Pi is your gateway to the world of computer system design.
Spis treści
Introduction 1
Cambridge 1
Cut to the Chase 3
The Knee in the Curve 4
Forward the Foundation 5
Chapter 1 The Shape of a Computer Phenomenon 7
Growing Delicious, Juicy Raspberries 7
System-on-a-Chip 10
An Exciting Credit Card-Sized Computer 12
What Does the Raspberry Pi Do? 14
Meeting and Greeting the Raspberry Pi Board 14
GPIO Pins 15
Status LEDs 16
USB Receptacles 18
Ethernet Connection 18
Audio Out 19
Composite Video 21
CSI Camera Module Connector 21
HDMI 22
Micro USB Power 22
Storage Card 23
DSI Display Connection 24
Mounting Holes 25
The Chips 25
The Future 25
Chapter 2 Recapping Computing 27
The Cook as Computer 28
Ingredients as Data 28
Basic Actions 30
The Box That Follows a Plan 31
Doing and Knowing 31
Programs are Data 32
Memory 33
Registers 34
The System Bus 36
Instruction Sets 36
Voltages, Numbers and Meaning 37
Binary: Counting in 1s and 0s 37
The Digit Shortage 40
Counting and Numbering and 0 40
Hexadecimal as a Shorthand for Binary 41
Doing Binary and Hexadecimal Arithmetic 43
Operating Systems: The Boss of the Box 44
What an Operating System Does 44
Saluting the Kernel 46
Multiple Cores 46
Chapter 3 Electronic Memory 47
There Was Memory Before There Were Computers 47
Rotating Magnetic Memory 48
Magnetic Core Memory 50
How Core Memory Works 50
Memory Access Time 52
Static Random Access Memory (SRAM) 53
Address Lines and Data Lines 54
Combining Memory Chips into Memory Systems 56
Dynamic Random Access Memory (DRAM) 59
How DRAM Works 60
Synchronous vs. Asynchronous DRAM 62
SDRAM Columns, Rows, Banks, Ranks and DIMMs 64
DDR, DDR2 DDR3 and DDR4 SDRAM 66
Error-Correcting Code (ECC) Memory 69
The Raspberry Pi Memory System 70
Power Reduction Features 70
Ball-Grid Array Packaging 71
Cache 72
Locality of Reference 72
Cache Hierarchy 72
Cache Lines and Cache Mapping 74
Direct Mapping 76
Associative Mapping 78
Set-Associative Cache 79
Writing Cache Back to Memory 81
Virtual Memory 81
The Virtual Memory Big Picture 82
Mapping Virtual to Physical 83
Memory Management Units: Going Deeper 84
Multi-Level Page Tables and the TLB 88
The Raspberry Pi Swap Problem 88
Watching Raspberry Pi Virtual Memory 90
Chapter 4 ARM Processors and Systems-on-a-Chip 93
The Incredible Shrinking CPU 93
Microprocessors 94
Transistor Budgets 95
Digital Logic Primer 95
Logic Gates 96
Flip-Flops and Sequential Logic 97
Inside the CPU 99
Branching and Flags 101
The System Stack 102
System Clocks and Execution Time 105
Pipelining 106
Pipelining in Detail 108
Deeper Pipelines and Pipeline Hazards 109
The ARM11 Pipeline 112
Superscalar Execution 113
More Parallelism with SIMD 115
Endianness 118
Rethinking the CPU: CISC vs. RISC 119
RISC’s Legacy 121
Expanded Register Files 122
Load/Store Architecture 122
Orthogonal Machine Instructions 123
Separate Caches for Instructions and Data 123
ARMs from Little Acorns Grow 124
Microarchitectures, Cores and Families 125
Selling Licenses Rather Than Chips 125
ARM11 126
The ARM Instruction Set 126
Processor Modes 129
Modes and Registers 131
Fast Interrupts 137
Software Interrupts 137
Interrupt Priority 138
Conditional Instruction Execution 139
Coprocessors 142
The ARM Coprocessor Interface 143
The System Control Coprocessor 143
The Vector Floating Point (VFP) Coprocessor 144
Emulating Coprocessors 145
ARM Cortex 145
Multiple-Issue and Out-Of-Order Execution 146
Thumb 2 147
Thumb EE 147
big.LITTLE 147
The NEON Coprocessor for SIMD 148
ARMv8 and 64-Bit Computing 148
Systems on a Single Chip 150
The Broadcom BCM2835 So C 150
Broadcom’s Second- and Third-Generation So C Devices 151
How VLSI Chips Happen 151
Processes, Geometries and Masks 152
IP: Cells, Macrocells and Cores 153
Hard and Soft IP 154
Floorplanning, Layout and Routing 154
Standards for On-Chip Communication: AMBA 155
Chapter 5 Programming 159
Programming from a Height 159
The Software Development Process 160
Waterfall vs. Spiral vs. Agile 162
Programming in Binary 165
Assembly Language and Mnemonics 166
High-Level Languages 167
Après BASIC, Le Deluge 170
Programming Terminology 171
How Native-Code Compilers Work 173
Preprocessing 174
Lexical Analysis 175
Semantic Analysis 175
Intermediate Code Generation 176
Optimisation 176
Target Code Generation 176
Compiling C: A Concrete Example 177
Linking Object Code Files to Executable Files 183
Pure Text Interpreters 184
Bytecode Interpreted Languages 186
P-Code 186
Java 187
Just-In-Time (JIT) Compilation 189
Bytecode and JIT Compilation Beyond Java 191
Android, Java and Dalvik 191
Data Building Blocks 192
Identifiers, Reserved Words, Symbols and Operators 192
Values, Literals and Named Constants 193
Variables, Expressions and Assignment 193
Types and Type Definitions 194
Static and Dynamic Typing 196
Two’s Complement and IEEE 754 198
Code Building Blocks 200
Control Statements and Compound Statements 200
If/Then/Else 200
Switch and Case 202
Repeat Loops 205
While Loops 205
For Loops 207
The Break and Continue Statements 208
Functions 210
Locality and Scope 211
Object-Oriented Programming 214
Encapsulation 217
Inheritance 219
Polymorphism 221
OOP Wrapup 224
A Tour of the GNU Compiler Collection Toolset 224
gcc as Both Compiler and Builder 225
Using Linux Make 228
Chapter 6 Non-Volatile Storage 231
Punched Cards and Tape 232
Punched Cards 232
Tape Data Storage 232
The Dawn of Magnetic Storage 235
Magnetic Recording and Encoding Schemes 236
Flux Transitions 237
Perpendicular Recording 238
Magnetic Disk Storage 240
Cylinders, Tracks and Sectors 240
Low-Level Formatting 242
Interfaces and Controllers 244
Floppy Disk Drives 246
Partitions and File Systems 247
Primary Partitions and Extended Partitions 247
File Systems and High-Level Formatting 249
The Future: GUID Partition Tables (GPTs) 249
Partitions on the Raspberry Pi SD Card 250
Optical Discs 252
CD-Derived Formats 254
DVD-Derived Formats 254
Ramdisks 255
Flash Storage 257
ROMs, PROMs and EPROMs 257
Flash as EEPROM 258
Single-Level vs. Multi-Level Storage 260
NOR vs. NAND Flash 261
Wear Levelling and the Flash Translation Layer 265
Garbage Collection and TRIM 267
SD Cards 268
e MMC 270
The Future of Non-Volatile Storage 271
Chapter 7 Wired and Wireless Ethernet 273
The OSI Reference Model for Networking 274
The Application Layer 276
The Presentation Layer 276
The Session Layer 278
The Transport Layer 278
The Network Layer 279
The Data Link Layer 281
The Physical Layer 282
Ethernet 282
Thicknet and Thinnet 283
The Basic Ethernet Idea 283
Collision Detection and Avoidance 285
Ethernet Encoding Systems 286
PAM-5 Encoding 290
10BASE-T and Twisted-Pair Cabling 291
From Bus Topology to Star Topology 292
Switched Ethernet 293
Routers and the Internet 296
Names vs. Addresses 296
IP Addresses and TCP Ports 297
Local IP Addresses and DHCP 300
Network Address Translation 302
Wi-Fi 304
Standards within Standards 305
Facing the Real World 305
Wi-Fi Equipment in Use 309
Infrastructure Networks vs. Ad Hoc Networks 311
Wi-Fi Distributed Media Access 312
Carrier Sense and the Hidden Node Problem 314
Fragmentation 315
Amplitude Modulation, Phase Modulation and QAM 316
Spread-Spectrum Techniques 319
Wi-Fi Modulation and Coding in Detail 320
How Wi-Fi Connections Happen 323
Wi-Fi Security 325
Wi-Fi on the Raspberry Pi 326
Even More Networking 329
Chapter 8 Operating Systems 331
Introduction to Operating Systems 333
History of Operating Systems 333
The Basics of Operating Systems 336
The Kernel: The Basic Facilitator of Operating Systems 343
Operating System Control 344
Modes 345
Memory Management 346
Virtual Memory 347
Multitasking 347
Disk Access and File Systems 348
Device Drivers 349
Enablers and Assistants to the Operating System 349
Waking Up the OS 349
Firmware 353
Operating Systems for Raspberry Pi 354
NOOBS 354
Third-Party Operating Systems 356
Other Available Operating Systems 356
Chapter 9 Video Codecs and Video Compression 359
The First Video Codecs 360
Exploiting the Eye 361
Exploiting the Data 363
Understanding Frequency Transform 367
Using Lossless Encoding Techniques 371
Changing with the Times 373
The Latest Standards from MPEG 374
H.265 378
Motion Search 378
Video Quality 381
Processing Power 382
Chapter 10 3D Graphics 383
A Brief History of 3D Graphics 383
The Graphical User Interface (GUI) 384
3D Graphics in Video Games 386
Personal Computing and the Graphics Card 387
Two Competing Standards 390
The Open GL Graphics Pipeline 391
Geometry Specification and Attributes 393
Geometry Transformation 396
Lighting and Materials 400
Primitive Assembly and Rasterisation 403
Pixel Processing (Fragment Shading) 405
Texturing 407
Modern Graphics Hardware 411
Tiled Rendering 411
Geometry Rejection 413
Shading 415
Caching 416
Raspberry Pi GPU 417
Open VG 421
General Purpose GPUs 423
Heterogeneous Architectures 423
Open CL 425
Chapter 11 Audio 427
Can You Hear Me Now? 427
MIDI 428
Sound Cards 428
Analog vs. Digital 429
Sound and Signal Processing 430
Editing 431
Compression 431
Recording with Effects 432
Encoding and Decoding Information for Communication 433
1-Bit DAC 434
I2S 436
Raspberry Pi Sound Input/Output 437
Audio Output Jack 437
HDMI 438
Sound on the Raspberry Pi 438
Raspberry Pi Sound on Board 439
Manipulating Sound on the Raspberry Pi 439
Chapter 12 Input/Output 447
Introducing Input/Output 448
I/O Enablers 451
Universal Serial Bus 452
USB Powered Hubs 455
Ethernet 457
Universal Asynchronous Receiver/Transmitters 458
Small Computer Systems Interface 459
Parallel ATA 459
Serial Advanced Technology Attachment 460
RS-232 Serial 460
High Definition Media Interface 461
I2S 462
I2C 463
Raspberry Pi Display, Camera Interface and JTAG 464
Raspberry Pi GPIO 464
GPIO Overview and the Broadcom So C 465
Meeting the GPIO 466
Programming GPIO 473
Alternative Modes 479
GPIO Experimentation the Easy Way 480
Index 481
O autorze
Eben Upton is one of the co-creators of the Raspberry Pi, driven by the desire to create a new generation of developers capable of making an effective contribution to the field. Eben is also a co-author of the Raspberry Pi User Guide.
Jeff Dunteman is a veteran tech author and a co-founder of Coriolis Press. His previous publications include Assembly Language Step By Step and Jeff Dunteman’s Wi-Fi Guide.