\BOOKMARK [0][-]{chapter.1}{Information Representation and Storage}{}% 1
\BOOKMARK [1][-]{section.1.1}{Introduction}{chapter.1}% 2
\BOOKMARK [1][-]{section.1.2}{Bits and Bytes}{chapter.1}% 3
\BOOKMARK [2][-]{subsection.1.2.1}{``Binary Digits''}{section.1.2}% 4
\BOOKMARK [2][-]{subsection.1.2.2}{Hex Notation}{section.1.2}% 5
\BOOKMARK [2][-]{subsection.1.2.3}{There Is No Such Thing As ``Hex'' Storage at the Machine Level!}{section.1.2}% 6
\BOOKMARK [1][-]{section.1.3}{Main Memory Organization}{chapter.1}% 7
\BOOKMARK [2][-]{subsection.1.3.1}{Bytes, Words and Addresses}{section.1.3}% 8
\BOOKMARK [3][-]{subsubsection.1.3.1.1}{The Basics}{subsection.1.3.1}% 9
\BOOKMARK [3][-]{subsubsection.1.3.1.2}{Most Examples Here Will Be for 32-bit Machines}{subsection.1.3.1}% 10
\BOOKMARK [3][-]{subsubsection.1.3.1.3}{Word Addresses}{subsection.1.3.1}% 11
\BOOKMARK [3][-]{subsubsection.1.3.1.4}{``Endian-ness''}{subsection.1.3.1}% 12
\BOOKMARK [3][-]{subsubsection.1.3.1.5}{Other Issues}{subsection.1.3.1}% 13
\BOOKMARK [1][-]{section.1.4}{Representing Information as Bit Strings}{chapter.1}% 14
\BOOKMARK [2][-]{subsection.1.4.1}{Representing Integer Data}{section.1.4}% 15
\BOOKMARK [2][-]{subsection.1.4.2}{Representing Real Number Data}{section.1.4}% 16
\BOOKMARK [3][-]{subsubsection.1.4.2.1}{``Toy'' Example}{subsection.1.4.2}% 17
\BOOKMARK [3][-]{subsubsection.1.4.2.2}{IEEE Standard}{subsection.1.4.2}% 18
\BOOKMARK [2][-]{subsection.1.4.3}{Representing Character Data}{section.1.4}% 19
\BOOKMARK [2][-]{subsection.1.4.4}{Representing Machine Instructions}{section.1.4}% 20
\BOOKMARK [2][-]{subsection.1.4.5}{What Type of Information is Stored Here?}{section.1.4}% 21
\BOOKMARK [1][-]{section.1.5}{Examples of the Theme, ``There Are No Types at the Hardware Level''}{chapter.1}% 22
\BOOKMARK [2][-]{subsection.1.5.1}{Example}{section.1.5}% 23
\BOOKMARK [2][-]{subsection.1.5.2}{Example}{section.1.5}% 24
\BOOKMARK [2][-]{subsection.1.5.3}{Example}{section.1.5}% 25
\BOOKMARK [2][-]{subsection.1.5.4}{Example}{section.1.5}% 26
\BOOKMARK [2][-]{subsection.1.5.5}{Example}{section.1.5}% 27
\BOOKMARK [2][-]{subsection.1.5.6}{Example}{section.1.5}% 28
\BOOKMARK [1][-]{section.1.6}{Visual Display}{chapter.1}% 29
\BOOKMARK [2][-]{subsection.1.6.1}{The Basics}{section.1.6}% 30
\BOOKMARK [2][-]{subsection.1.6.2}{Non-English Text}{section.1.6}% 31
\BOOKMARK [2][-]{subsection.1.6.3}{It's the Software, Not the Hardware}{section.1.6}% 32
\BOOKMARK [2][-]{subsection.1.6.4}{Text Cursor Movement}{section.1.6}% 33
\BOOKMARK [2][-]{subsection.1.6.5}{Mouse Actions}{section.1.6}% 34
\BOOKMARK [2][-]{subsection.1.6.6}{Display of Images}{section.1.6}% 35
\BOOKMARK [1][-]{section.1.7}{There's Really No Such Thing As ``Type'' for Disk Files Either}{chapter.1}% 36
\BOOKMARK [2][-]{subsection.1.7.1}{Disk Geometry}{section.1.7}% 37
\BOOKMARK [2][-]{subsection.1.7.2}{Definitions of ``Text File'' and ``Binary File''}{section.1.7}% 38
\BOOKMARK [2][-]{subsection.1.7.3}{Programs That Access of Text Files}{section.1.7}% 39
\BOOKMARK [2][-]{subsection.1.7.4}{Programs That Access ``Binary'' Files}{section.1.7}% 40
\BOOKMARK [1][-]{section.1.8}{Storage of Variables in HLL Programs}{chapter.1}% 41
\BOOKMARK [2][-]{subsection.1.8.1}{What Are HLL Variables, Anyway?}{section.1.8}% 42
\BOOKMARK [2][-]{subsection.1.8.2}{Order of Storage}{section.1.8}% 43
\BOOKMARK [3][-]{subsubsection.1.8.2.1}{Scalar Types}{subsection.1.8.2}% 44
\BOOKMARK [3][-]{subsubsection.1.8.2.2}{Arrays}{subsection.1.8.2}% 45
\BOOKMARK [3][-]{subsubsection.1.8.2.3}{Structs and C++ Class Objects}{subsection.1.8.2}% 46
\BOOKMARK [3][-]{subsubsection.1.8.2.4}{Pointer Variables}{subsection.1.8.2}% 47
\BOOKMARK [2][-]{subsection.1.8.3}{Local Variables}{section.1.8}% 48
\BOOKMARK [2][-]{subsection.1.8.4}{Variable Names and Types Are Imaginary}{section.1.8}% 49
\BOOKMARK [2][-]{subsection.1.8.5}{Segmentation Faults and Bus Errors}{section.1.8}% 50
\BOOKMARK [1][-]{section.1.9}{ASCII Table}{chapter.1}% 51
\BOOKMARK [1][-]{section.1.10}{An Example of How One Can Exploit Big-Endian Machines for Fast Character String Sorting}{chapter.1}% 52
\BOOKMARK [0][-]{chapter.2}{Major Components of Computer ``Engines''}{}% 53
\BOOKMARK [1][-]{section.2.1}{Introduction}{chapter.2}% 54
\BOOKMARK [1][-]{section.2.2}{Major Hardware Components of the Engine}{chapter.2}% 55
\BOOKMARK [2][-]{subsection.2.2.1}{System Components}{section.2.2}% 56
\BOOKMARK [2][-]{subsection.2.2.2}{CPU Components}{section.2.2}% 57
\BOOKMARK [3][-]{subsubsection.2.2.2.1}{Intel/Generic Components}{subsection.2.2.2}% 58
\BOOKMARK [3][-]{subsubsection.2.2.2.2}{History of Intel CPU Structure}{subsection.2.2.2}% 59
\BOOKMARK [2][-]{subsection.2.2.3}{The CPU Fetch/Execute Cycle}{section.2.2}% 60
\BOOKMARK [1][-]{section.2.3}{Software Components of the Computer ``Engine''}{chapter.2}% 61
\BOOKMARK [1][-]{section.2.4}{Speed of a Computer ``Engine''}{chapter.2}% 62
\BOOKMARK [2][-]{subsection.2.4.1}{CPU Architecture}{section.2.4}% 63
\BOOKMARK [2][-]{subsection.2.4.2}{Parallel Operations}{section.2.4}% 64
\BOOKMARK [2][-]{subsection.2.4.3}{Clock Rate}{section.2.4}% 65
\BOOKMARK [2][-]{subsection.2.4.4}{Memory Caches}{section.2.4}% 66
\BOOKMARK [3][-]{subsubsection.2.4.4.1}{Need for Caching}{subsection.2.4.4}% 67
\BOOKMARK [3][-]{subsubsection.2.4.4.2}{Basic Idea of a Cache}{subsection.2.4.4}% 68
\BOOKMARK [3][-]{subsubsection.2.4.4.3}{Blocks and Lines}{subsection.2.4.4}% 69
\BOOKMARK [3][-]{subsubsection.2.4.4.4}{Direct-Mapped Policy}{subsection.2.4.4}% 70
\BOOKMARK [3][-]{subsubsection.2.4.4.5}{What About Writes?}{subsection.2.4.4}% 71
\BOOKMARK [3][-]{subsubsection.2.4.4.6}{Programmability}{subsection.2.4.4}% 72
\BOOKMARK [3][-]{subsubsection.2.4.4.7}{Details on the Tag and Misc. Line Information}{subsection.2.4.4}% 73
\BOOKMARK [3][-]{subsubsection.2.4.4.8}{Why Caches Usually Work So Well}{subsection.2.4.4}% 74
\BOOKMARK [2][-]{subsection.2.4.5}{Disk Caches}{section.2.4}% 75
\BOOKMARK [2][-]{subsection.2.4.6}{Web Caches}{section.2.4}% 76
\BOOKMARK [0][-]{chapter.3}{Introduction to Linux Intel Assembly Language}{}% 77
\BOOKMARK [1][-]{section.3.1}{Overview of Intel CPUs}{chapter.3}% 78
\BOOKMARK [2][-]{subsection.3.1.1}{Computer Organization}{section.3.1}% 79
\BOOKMARK [2][-]{subsection.3.1.2}{CPU Architecture}{section.3.1}% 80
\BOOKMARK [2][-]{subsection.3.1.3}{The Intel Architecture}{section.3.1}% 81
\BOOKMARK [1][-]{section.3.2}{What Is Assembly Language?}{chapter.3}% 82
\BOOKMARK [1][-]{section.3.3}{Different Assemblers}{chapter.3}% 83
\BOOKMARK [1][-]{section.3.4}{Sample Program}{chapter.3}% 84
\BOOKMARK [2][-]{subsection.3.4.1}{Analysis}{section.3.4}% 85
\BOOKMARK [2][-]{subsection.3.4.2}{Source and Destination Operands}{section.3.4}% 86
\BOOKMARK [2][-]{subsection.3.4.3}{Remember: No Names, No Types at the Machine Level}{section.3.4}% 87
\BOOKMARK [2][-]{subsection.3.4.4}{Dynamic Memory Is Just an Illusion}{section.3.4}% 88
\BOOKMARK [1][-]{section.3.5}{Use of Registers Versus Memory}{chapter.3}% 89
\BOOKMARK [1][-]{section.3.6}{Another Example}{chapter.3}% 90
\BOOKMARK [1][-]{section.3.7}{Addressing Modes}{chapter.3}% 91
\BOOKMARK [1][-]{section.3.8}{Assembling and Linking into an Executable File}{chapter.3}% 92
\BOOKMARK [2][-]{subsection.3.8.1}{Assembler Command-Line Syntax}{section.3.8}% 93
\BOOKMARK [2][-]{subsection.3.8.2}{Linking}{section.3.8}% 94
\BOOKMARK [2][-]{subsection.3.8.3}{Makefiles}{section.3.8}% 95
\BOOKMARK [1][-]{section.3.9}{How to Execute Those Sample Programs}{chapter.3}% 96
\BOOKMARK [2][-]{subsection.3.9.1}{``Normal'' Execution Won't Work}{section.3.9}% 97
\BOOKMARK [2][-]{subsection.3.9.2}{Running Our Assembly Programs Using GDB/DDD}{section.3.9}% 98
\BOOKMARK [3][-]{subsubsection.3.9.2.1}{Using DDD for Executing Our Assembly Programs}{subsection.3.9.2}% 99
\BOOKMARK [3][-]{subsubsection.3.9.2.2}{Using GDB for Executing Our Assembly Programs}{subsection.3.9.2}% 100
\BOOKMARK [1][-]{section.3.10}{How to Debug Assembly Language Programs}{chapter.3}% 101
\BOOKMARK [2][-]{subsection.3.10.1}{Use a Debugging Tool for ALL of Your Programming, in EVERY Class}{section.3.10}% 102
\BOOKMARK [2][-]{subsection.3.10.2}{General Principles}{section.3.10}% 103
\BOOKMARK [3][-]{subsubsection.3.10.2.1}{The Principle of Confirmation}{subsection.3.10.2}% 104
\BOOKMARK [3][-]{subsubsection.3.10.2.2}{Don't Just Write Top-Down, But Debug That Way Too}{subsection.3.10.2}% 105
\BOOKMARK [2][-]{subsection.3.10.3}{Assembly Language-Specific Tips}{section.3.10}% 106
\BOOKMARK [3][-]{subsubsection.3.10.3.1}{Know Where Your Data Is}{subsection.3.10.3}% 107
\BOOKMARK [3][-]{subsubsection.3.10.3.2}{Seg Faults}{subsection.3.10.3}% 108
\BOOKMARK [2][-]{subsection.3.10.4}{Use of DDD for Debugging Assembly Programs}{section.3.10}% 109
\BOOKMARK [2][-]{subsection.3.10.5}{Use of GDB for Debugging Assembly Programs}{section.3.10}% 110
\BOOKMARK [3][-]{subsubsection.3.10.5.1}{Assembly-Language Commands}{subsection.3.10.5}% 111
\BOOKMARK [3][-]{subsubsection.3.10.5.2}{TUI Mode}{subsection.3.10.5}% 112
\BOOKMARK [3][-]{subsubsection.3.10.5.3}{CGDB}{subsection.3.10.5}% 113
\BOOKMARK [1][-]{section.3.11}{Some More Operand Sizes}{chapter.3}% 114
\BOOKMARK [1][-]{section.3.12}{Some More Addressing Modes}{chapter.3}% 115
\BOOKMARK [1][-]{section.3.13}{Inline Assembly Code for C++}{chapter.3}% 116
\BOOKMARK [1][-]{section.3.14}{Example: Counting Lower-Case letters}{chapter.3}% 117
\BOOKMARK [1][-]{section.3.15}{``Linux Intel Assembly Language'': Why ``Intel''? Why ``Linux''?}{chapter.3}% 118
\BOOKMARK [1][-]{section.3.16}{Viewing the Assembly Language Version of the Compiled Code}{chapter.3}% 119
\BOOKMARK [1][-]{section.3.17}{String Operations}{chapter.3}% 120
\BOOKMARK [1][-]{section.3.18}{Useful Web Links}{chapter.3}% 121
\BOOKMARK [1][-]{section.3.19}{Top-Down Programming}{chapter.3}% 122
\BOOKMARK [0][-]{chapter.4}{More on Intel Arithmetic and Logic Operations}{}% 123
\BOOKMARK [1][-]{section.4.1}{Instructions for Multiplication and Division}{chapter.4}% 124
\BOOKMARK [2][-]{subsection.4.1.1}{Multiplication}{section.4.1}% 125
\BOOKMARK [3][-]{subsubsection.4.1.1.1}{The IMUL Instruction}{subsection.4.1.1}% 126
\BOOKMARK [3][-]{subsubsection.4.1.1.2}{Issues of Sign}{subsection.4.1.1}% 127
\BOOKMARK [2][-]{subsection.4.1.2}{Division}{section.4.1}% 128
\BOOKMARK [3][-]{subsubsection.4.1.2.1}{The IDIV Instruction}{subsection.4.1.2}% 129
\BOOKMARK [3][-]{subsubsection.4.1.2.2}{Issues of Sign}{subsection.4.1.2}% 130
\BOOKMARK [2][-]{subsection.4.1.3}{Example}{section.4.1}% 131
\BOOKMARK [1][-]{section.4.2}{More on Carry and Overflow, and More Jump Instructions}{chapter.4}% 132
\BOOKMARK [1][-]{section.4.3}{Logical Instructions}{chapter.4}% 133
\BOOKMARK [1][-]{section.4.4}{Floating-Point}{chapter.4}% 134
\BOOKMARK [0][-]{chapter.5}{Introduction to Intel Machine Language}{}% 135
\BOOKMARK [1][-]{section.5.1}{Overview}{chapter.5}% 136
\BOOKMARK [1][-]{section.5.2}{Relation of Assembly Language to Machine Language}{chapter.5}% 137
\BOOKMARK [1][-]{section.5.3}{Example Program}{chapter.5}% 138
\BOOKMARK [2][-]{subsection.5.3.1}{The Code}{section.5.3}% 139
\BOOKMARK [2][-]{subsection.5.3.2}{Feedback from the Assembler}{section.5.3}% 140
\BOOKMARK [2][-]{subsection.5.3.3}{A Few Instruction Formats}{section.5.3}% 141
\BOOKMARK [2][-]{subsection.5.3.4}{Format and Operation of Jump Instructions}{section.5.3}% 142
\BOOKMARK [2][-]{subsection.5.3.5}{Other Issues}{section.5.3}% 143
\BOOKMARK [1][-]{section.5.4}{It Really Is Just a Mechanical Process}{chapter.5}% 144
\BOOKMARK [1][-]{section.5.5}{You Could Write an Assembler!}{chapter.5}% 145
\BOOKMARK [0][-]{chapter.6}{Compilation and Linking Process}{}% 146
\BOOKMARK [1][-]{section.6.1}{GCC Operations}{chapter.6}% 147
\BOOKMARK [2][-]{subsection.6.1.1}{The C Preprocessor}{section.6.1}% 148
\BOOKMARK [2][-]{subsection.6.1.2}{The Actual Compiler, CC1, and the Assembler, AS}{section.6.1}% 149
\BOOKMARK [1][-]{section.6.2}{The Linker: What Is Linked?}{chapter.6}% 150
\BOOKMARK [1][-]{section.6.3}{Headers in Executable Files}{chapter.6}% 151
\BOOKMARK [1][-]{section.6.4}{Libraries}{chapter.6}% 152
\BOOKMARK [1][-]{section.6.5}{A Look at the Final Product}{chapter.6}% 153
\BOOKMARK [0][-]{chapter.7}{Subroutines on Intel CPUs}{}% 154
\BOOKMARK [1][-]{section.7.1}{Overview}{chapter.7}% 155
\BOOKMARK [1][-]{section.7.2}{Stacks}{chapter.7}% 156
\BOOKMARK [1][-]{section.7.3}{CALL, RET Instructions}{chapter.7}% 157
\BOOKMARK [1][-]{section.7.4}{Arguments}{chapter.7}% 158
\BOOKMARK [1][-]{section.7.5}{Ensuring Correct Access to the Stack}{chapter.7}% 159
\BOOKMARK [1][-]{section.7.6}{Cleaning Up the Stack}{chapter.7}% 160
\BOOKMARK [1][-]{section.7.7}{Full Examples}{chapter.7}% 161
\BOOKMARK [2][-]{subsection.7.7.1}{First Example}{section.7.7}% 162
\BOOKMARK [2][-]{subsection.7.7.2}{If the PC Points to Garbage, the Machine Will Happily ``Execute'' the Garbage}{section.7.7}% 163
\BOOKMARK [2][-]{subsection.7.7.3}{Second Example}{section.7.7}% 164
\BOOKMARK [1][-]{section.7.8}{Interfacing C/C++ to Assembly Language}{chapter.7}% 165
\BOOKMARK [2][-]{subsection.7.8.1}{Example}{section.7.8}% 166
\BOOKMARK [2][-]{subsection.7.8.2}{Cleaning Up the Stack?}{section.7.8}% 167
\BOOKMARK [2][-]{subsection.7.8.3}{More Sections}{section.7.8}% 168
\BOOKMARK [2][-]{subsection.7.8.4}{Multiple Arguments}{section.7.8}% 169
\BOOKMARK [2][-]{subsection.7.8.5}{Nonvoid Return Values}{section.7.8}% 170
\BOOKMARK [2][-]{subsection.7.8.6}{Calling C and the C Library from Assembly Language}{section.7.8}% 171
\BOOKMARK [2][-]{subsection.7.8.7}{Local Variables}{section.7.8}% 172
\BOOKMARK [2][-]{subsection.7.8.8}{Use of EBP}{section.7.8}% 173
\BOOKMARK [3][-]{subsubsection.7.8.8.1}{GCC Calling Convention}{subsection.7.8.8}% 174
\BOOKMARK [3][-]{subsubsection.7.8.8.2}{The Stack Frame for a Given Call}{subsection.7.8.8}% 175
\BOOKMARK [3][-]{subsubsection.7.8.8.3}{How the Prologue Achieves All This}{subsection.7.8.8}% 176
\BOOKMARK [3][-]{subsubsection.7.8.8.4}{The Stack Frames Are Chained}{subsection.7.8.8}% 177
\BOOKMARK [3][-]{subsubsection.7.8.8.5}{ENTER and LEAVE Instructions}{subsection.7.8.8}% 178
\BOOKMARK [2][-]{subsection.7.8.9}{The LEA Instruction Family}{section.7.8}% 179
\BOOKMARK [2][-]{subsection.7.8.10}{The Function main\(\) IS a Function, So It Too Has a Stack Frame}{section.7.8}% 180
\BOOKMARK [2][-]{subsection.7.8.11}{Once Again, There Are No Types at the Hardware Level!}{section.7.8}% 181
\BOOKMARK [2][-]{subsection.7.8.12}{What About C++?}{section.7.8}% 182
\BOOKMARK [2][-]{subsection.7.8.13}{Putting It All Together}{section.7.8}% 183
\BOOKMARK [1][-]{section.7.9}{Subroutine Calls/Returns Are ``Expensive''}{chapter.7}% 184
\BOOKMARK [1][-]{section.7.10}{Debugging Assembly Language Subroutines}{chapter.7}% 185
\BOOKMARK [2][-]{subsection.7.10.1}{Focus on the Stack}{section.7.10}% 186
\BOOKMARK [2][-]{subsection.7.10.2}{A Special Consideration When Interfacing C/C++ with Assembly Language}{section.7.10}% 187
\BOOKMARK [1][-]{section.7.11}{Inline Assembly Code for C++}{chapter.7}% 188
\BOOKMARK [0][-]{chapter.8}{Overview of Input/Output Mechanisms}{}% 189
\BOOKMARK [1][-]{section.8.1}{Introduction}{chapter.8}% 190
\BOOKMARK [1][-]{section.8.2}{I/O Ports and Device Structure}{chapter.8}% 191
\BOOKMARK [1][-]{section.8.3}{Program Access to I/O Ports}{chapter.8}% 192
\BOOKMARK [2][-]{subsection.8.3.1}{I/O Address Space Approach}{section.8.3}% 193
\BOOKMARK [2][-]{subsection.8.3.2}{Memory-Mapped I/O Approach}{section.8.3}% 194
\BOOKMARK [1][-]{section.8.4}{Wait-Loop I/O}{chapter.8}% 195
\BOOKMARK [1][-]{section.8.5}{PC Keyboards}{chapter.8}% 196
\BOOKMARK [1][-]{section.8.6}{Interrupt-Driven I/O}{chapter.8}% 197
\BOOKMARK [2][-]{subsection.8.6.1}{Telephone Analogy}{section.8.6}% 198
\BOOKMARK [2][-]{subsection.8.6.2}{What Happens When an Interrupt Occurs?}{section.8.6}% 199
\BOOKMARK [2][-]{subsection.8.6.3}{Game Example}{section.8.6}% 200
\BOOKMARK [2][-]{subsection.8.6.4}{Alternative Designs}{section.8.6}% 201
\BOOKMARK [2][-]{subsection.8.6.5}{Glimpse of an ISR}{section.8.6}% 202
\BOOKMARK [2][-]{subsection.8.6.6}{I/O Protection}{section.8.6}% 203
\BOOKMARK [2][-]{subsection.8.6.7}{``Application'': Keystroke Logger}{section.8.6}% 204
\BOOKMARK [2][-]{subsection.8.6.8}{Distinguishing Among Devices}{section.8.6}% 205
\BOOKMARK [3][-]{subsubsection.8.6.8.1}{How Does the CPU Know Which I/O Device Requested the Interrupt?}{subsection.8.6.8}% 206
\BOOKMARK [3][-]{subsubsection.8.6.8.2}{How Does the CPU Know Where the ISR Is?}{subsection.8.6.8}% 207
\BOOKMARK [3][-]{subsubsection.8.6.8.3}{Revised Interrupt Sequence}{subsection.8.6.8}% 208
\BOOKMARK [2][-]{subsection.8.6.9}{How Do PCs Prioritize Interrupts from Different Devices?}{section.8.6}% 209
\BOOKMARK [1][-]{section.8.7}{Direct Memory Access \(DMA\)}{chapter.8}% 210
\BOOKMARK [1][-]{section.8.8}{Disk Structure}{chapter.8}% 211
\BOOKMARK [1][-]{section.8.9}{USB Devices}{chapter.8}% 212
\BOOKMARK [0][-]{chapter.9}{Overview of Functions of an Operating System: Processes}{}% 213
\BOOKMARK [1][-]{section.9.1}{Introduction}{chapter.9}% 214
\BOOKMARK [2][-]{subsection.9.1.1}{It's Just a Program!}{section.9.1}% 215
\BOOKMARK [2][-]{subsection.9.1.2}{What Is an OS for, Anyway?}{section.9.1}% 216
\BOOKMARK [1][-]{section.9.2}{Application Program Loading}{chapter.9}% 217
\BOOKMARK [2][-]{subsection.9.2.1}{Basic Operations}{section.9.2}% 218
\BOOKMARK [2][-]{subsection.9.2.2}{Chains of Programs Calling Programs}{section.9.2}% 219
\BOOKMARK [2][-]{subsection.9.2.3}{Static Versus Dynaming Linking}{section.9.2}% 220
\BOOKMARK [2][-]{subsection.9.2.4}{Making These Concepts Concrete: Commands You Can Try Yourself}{section.9.2}% 221
\BOOKMARK [3][-]{subsubsection.9.2.4.1}{Mini-Example}{subsection.9.2.4}% 222
\BOOKMARK [3][-]{subsubsection.9.2.4.2}{The strace Command}{subsection.9.2.4}% 223
\BOOKMARK [1][-]{section.9.3}{OS Bootup}{chapter.9}% 224
\BOOKMARK [1][-]{section.9.4}{Timesharing}{chapter.9}% 225
\BOOKMARK [2][-]{subsection.9.4.1}{Many Processes, Taking Turns}{section.9.4}% 226
\BOOKMARK [2][-]{subsection.9.4.2}{Example of OS Code: Linux for Intel CPUs}{section.9.4}% 227
\BOOKMARK [2][-]{subsection.9.4.3}{Process States}{section.9.4}% 228
\BOOKMARK [2][-]{subsection.9.4.4}{Roles of the Hardware and Software}{section.9.4}% 229
\BOOKMARK [2][-]{subsection.9.4.5}{What About Background Jobs?}{section.9.4}% 230
\BOOKMARK [2][-]{subsection.9.4.6}{Threads: ``Lightweight Processes''}{section.9.4}% 231
\BOOKMARK [3][-]{subsubsection.9.4.6.1}{The Mechanics}{subsection.9.4.6}% 232
\BOOKMARK [3][-]{subsubsection.9.4.6.2}{Threads Example}{subsection.9.4.6}% 233
\BOOKMARK [3][-]{subsubsection.9.4.6.3}{Debugging Threads Programs}{subsection.9.4.6}% 234
\BOOKMARK [2][-]{subsection.9.4.7}{Making These Concepts Concrete: Commands You Can Try Yourself}{section.9.4}% 235
\BOOKMARK [0][-]{chapter.10}{Multicore Systems}{}% 236
\BOOKMARK [1][-]{section.10.1}{Classic Multiprocessor Structure}{chapter.10}% 237
\BOOKMARK [1][-]{section.10.2}{GPUs}{chapter.10}% 238
\BOOKMARK [1][-]{section.10.3}{Message-Passing Systems}{chapter.10}% 239
\BOOKMARK [1][-]{section.10.4}{Threads}{chapter.10}% 240
\BOOKMARK [2][-]{subsection.10.4.1}{What Is Shared and What Is Not}{section.10.4}% 241
\BOOKMARK [2][-]{subsection.10.4.2}{Really? It's OK to Use Global Variables?}{section.10.4}% 242
\BOOKMARK [2][-]{subsection.10.4.3}{Sample Pthreads Program}{section.10.4}% 243
\BOOKMARK [2][-]{subsection.10.4.4}{Debugging Threaded Programs}{section.10.4}% 244
\BOOKMARK [2][-]{subsection.10.4.5}{Higher-Level Threads Programming}{section.10.4}% 245
\BOOKMARK [1][-]{section.10.5}{``Embarrassingly Parallel'' Applications}{chapter.10}% 246
\BOOKMARK [1][-]{section.10.6}{Hardware Support for Critical Section Access}{chapter.10}% 247
\BOOKMARK [2][-]{subsection.10.6.1}{Test-and-Set Instructions}{section.10.6}% 248
\BOOKMARK [3][-]{subsubsection.10.6.1.1}{LOCK Prefix on Intel Processors}{subsection.10.6.1}% 249
\BOOKMARK [3][-]{subsubsection.10.6.1.2}{Synchronization Operations on the GPU}{subsection.10.6.1}% 250
\BOOKMARK [1][-]{section.10.7}{Memory Issues}{chapter.10}% 251
\BOOKMARK [2][-]{subsection.10.7.1}{Overview of the Problems}{section.10.7}% 252
\BOOKMARK [2][-]{subsection.10.7.2}{Memory Interleaving}{section.10.7}% 253
\BOOKMARK [3][-]{subsubsection.10.7.2.1}{Implications for the Number of Threads to Run}{subsection.10.7.2}% 254
\BOOKMARK [1][-]{section.10.8}{To Learn More}{chapter.10}% 255
\BOOKMARK [0][-]{chapter.11}{Overview of Functions of an Operating System: Memory and I/O}{}% 256
\BOOKMARK [1][-]{section.11.1}{Virtual Memory}{chapter.11}% 257
\BOOKMARK [2][-]{subsection.11.1.1}{Make Sure You Understand the Goals}{section.11.1}% 258
\BOOKMARK [3][-]{subsubsection.11.1.1.1}{Overcome Limitations on Memory Size}{subsection.11.1.1}% 259
\BOOKMARK [3][-]{subsubsection.11.1.1.2}{Relieve the Compiler and Linker of Having to Deal with Real Addresses}{subsection.11.1.1}% 260
\BOOKMARK [3][-]{subsubsection.11.1.1.3}{Enable Security}{subsection.11.1.1}% 261
\BOOKMARK [2][-]{subsection.11.1.2}{The Virtual Nature of Addresses}{section.11.1}% 262
\BOOKMARK [2][-]{subsection.11.1.3}{Overview of How the Goals Are Achieved}{section.11.1}% 263
\BOOKMARK [3][-]{subsubsection.11.1.3.1}{Overcoming Limitations on Memory Size}{subsection.11.1.3}% 264
\BOOKMARK [3][-]{subsubsection.11.1.3.2}{Relieving the Compiler and Linker of Having to Deal with Real Addresses}{subsection.11.1.3}% 265
\BOOKMARK [3][-]{subsubsection.11.1.3.3}{Enabling Security}{subsection.11.1.3}% 266
\BOOKMARK [3][-]{subsubsection.11.1.3.4}{Is the Hardware Support Needed?}{subsection.11.1.3}% 267
\BOOKMARK [2][-]{subsection.11.1.4}{Who Does What When?}{section.11.1}% 268
\BOOKMARK [2][-]{subsection.11.1.5}{Details on Usage of the Page Table}{section.11.1}% 269
\BOOKMARK [3][-]{subsubsection.11.1.5.1}{Virtual-to-Physical Address Translation, Page Table Lookup}{subsection.11.1.5}% 270
\BOOKMARK [3][-]{subsubsection.11.1.5.2}{Layout of the Page Table}{subsection.11.1.5}% 271
\BOOKMARK [3][-]{subsubsection.11.1.5.3}{Page Faults}{subsection.11.1.5}% 272
\BOOKMARK [3][-]{subsubsection.11.1.5.4}{Access Violations}{subsection.11.1.5}% 273
\BOOKMARK [2][-]{subsection.11.1.6}{VM and Context Switches}{section.11.1}% 274
\BOOKMARK [2][-]{subsection.11.1.7}{Improving Performance\204TLBs}{section.11.1}% 275
\BOOKMARK [2][-]{subsection.11.1.8}{The Role of Caches in VM Systems}{section.11.1}% 276
\BOOKMARK [3][-]{subsubsection.11.1.8.1}{Addressing}{subsection.11.1.8}% 277
\BOOKMARK [3][-]{subsubsection.11.1.8.2}{Hardware Vs. Software}{subsection.11.1.8}% 278
\BOOKMARK [2][-]{subsection.11.1.9}{Making These Concepts Concrete: Commands You Can Try Yourself}{section.11.1}% 279
\BOOKMARK [1][-]{section.11.2}{A Bit More on System Calls}{chapter.11}% 280
\BOOKMARK [1][-]{section.11.3}{OS File Management}{chapter.11}% 281
\BOOKMARK [1][-]{section.11.4}{To Learn More}{chapter.11}% 282
\BOOKMARK [1][-]{section.11.5}{Intel Pentium Architecture}{chapter.11}% 283
