在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → Operating Systems Three Easy Pieces v1_0

Operating Systems Three Easy Pieces v1_0

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:4.49M
  • 下载次数:7
  • 浏览次数:119
  • 发布时间:2019-07-28
  • 实例类别:一般编程问题
  • 发 布 人:739970807
  • 文件格式:.pdf
  • 所需积分:2
 相关标签: system three

实例介绍

【实例简介】从官网下载并制作

【实例截图】

from clipboard


from clipboard


from clipboard


from clipboard


from clipboard


from clipboard


from clipboard


from clipboard


from clipboard


from clipboard


from clipboard


from clipboard


from clipboard

【核心代码】

Contents
To Everyone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii
To Educators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
To Students . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . vii
Final Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
1 A Dialogue on the Book 1
2 Introduction to Operating Systems 3
2.1 Virtualizing The CPU . . . . . . . . . . . . . . . . . . . . . 5
2.2 Virtualizing Memory . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Concurrency . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Persistence . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5 Design Goals . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.6 Some History . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Homework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
I Virtualization 21
3 A Dialogue on Virtualization 23
4 The Abstraction: The Process 25
4.1 The Abstraction: A Process . . . . . . . . . . . . . . . . . . 26
4.2 Process API . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3 Process Creation: A Little More Detail . . . . . . . . . . . . 28
4.4 Process States . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.5 Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
xiii
xiv CONTENTS
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 35
5 Interlude: Process API 37
5.1 The fork() System Call . . . . . . . . . . . . . . . . . . . 37
5.2 The wait() System Call . . . . . . . . . . . . . . . . . . . 39
5.3 Finally, The exec() System Call . . . . . . . . . . . . . . . 40
5.4 Why? Motivating The API . . . . . . . . . . . . . . . . . . . 41
5.5 Process Control And Users . . . . . . . . . . . . . . . . . . 44
5.6 Useful Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Homework (Code) . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6 Mechanism: Limited Direct Execution 49
6.1 Basic Technique: Limited Direct Execution . . . . . . . . . 49
6.2 Problem #1: Restricted Operations . . . . . . . . . . . . . . 50
6.3 Problem #2: Switching Between Processes . . . . . . . . . . 55
6.4 Worried About Concurrency? . . . . . . . . . . . . . . . . . 59
6.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Homework (Measurement) . . . . . . . . . . . . . . . . . . . . . . 63
7 Scheduling: Introduction 65
7.1 Workload Assumptions . . . . . . . . . . . . . . . . . . . . 65
7.2 Scheduling Metrics . . . . . . . . . . . . . . . . . . . . . . . 66
7.3 First In, First Out (FIFO) . . . . . . . . . . . . . . . . . . . . 66
7.4 Shortest Job First (SJF) . . . . . . . . . . . . . . . . . . . . . 68
7.5 Shortest Time-to-Completion First (STCF) . . . . . . . . . . 69
7.6 A New Metric: Response Time . . . . . . . . . . . . . . . . 70
7.7 Round Robin . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7.8 Incorporating I/O . . . . . . . . . . . . . . . . . . . . . . . 73
7.9 No More Oracle . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 76
8 Scheduling:
The Multi-Level Feedback Queue 77
8.1 MLFQ: Basic Rules . . . . . . . . . . . . . . . . . . . . . . . 78
8.2 Attempt #1: How To Change Priority . . . . . . . . . . . . 79
8.3 Attempt #2: The Priority Boost . . . . . . . . . . . . . . . . 83
8.4 Attempt #3: Better Accounting . . . . . . . . . . . . . . . . 84
8.5 Tuning MLFQ And Other Issues . . . . . . . . . . . . . . . 84
8.6 MLFQ: Summary . . . . . . . . . . . . . . . . . . . . . . . . 86
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 88
OPERATING
SYSTEMS
[VERSION 1.00] WWW.OSTEP.ORG
CONTENTS xv
9 Scheduling: Proportional Share 89
9.1 Basic Concept: Tickets Represent Your Share . . . . . . . . 89
9.2 Ticket Mechanisms . . . . . . . . . . . . . . . . . . . . . . . 91
9.3 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . 92
9.4 An Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
9.5 How To Assign Tickets? . . . . . . . . . . . . . . . . . . . . 94
9.6 Why Not Deterministic? . . . . . . . . . . . . . . . . . . . . 94
9.7 The Linux Completely Fair Scheduler (CFS) . . . . . . . . . 95
9.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 102
10 Multiprocessor Scheduling (Advanced) 103
10.1 Background: Multiprocessor Architecture . . . . . . . . . . 104
10.2 Don’t Forget Synchronization . . . . . . . . . . . . . . . . . 106
10.3 One Final Issue: Cache Affinity . . . . . . . . . . . . . . . . 107
10.4 Single-Queue Scheduling . . . . . . . . . . . . . . . . . . . 107
10.5 Multi-Queue Scheduling . . . . . . . . . . . . . . . . . . . . 109
10.6 Linux Multiprocessor Schedulers . . . . . . . . . . . . . . . 112
10.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 114
11 Summary Dialogue on CPU Virtualization 117
12 A Dialogue on Memory Virtualization 119
13 The Abstraction: Address Spaces 121
13.1 Early Systems . . . . . . . . . . . . . . . . . . . . . . . . . . 121
13.2 Multiprogramming and Time Sharing . . . . . . . . . . . . 122
13.3 The Address Space . . . . . . . . . . . . . . . . . . . . . . . 123
13.4 Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
13.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Homework (Code) . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
14 Interlude: Memory API 131
14.1 Types of Memory . . . . . . . . . . . . . . . . . . . . . . . . 131
14.2 The malloc() Call . . . . . . . . . . . . . . . . . . . . . . 132
14.3 The free() Call . . . . . . . . . . . . . . . . . . . . . . . . 134
14.4 Common Errors . . . . . . . . . . . . . . . . . . . . . . . . 134
14.5 Underlying OS Support . . . . . . . . . . . . . . . . . . . . 137
14.6 Other Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
14.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Homework (Code) . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
⃝c 2008–18, ARPACI-DUSSEAU
THREE
EASY
PIECES
xvi CONTENTS
15 Mechanism: Address Translation 141
15.1 Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . . 142
15.2 An Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
15.3 Dynamic (Hardware-based) Relocation . . . . . . . . . . . 145
15.4 Hardware Support: A Summary . . . . . . . . . . . . . . . 148
15.5 Operating System Issues . . . . . . . . . . . . . . . . . . . . 149
15.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 154
16 Segmentation 155
16.1 Segmentation: Generalized Base/Bounds . . . . . . . . . . 155
16.2 Which Segment Are We Referring To? . . . . . . . . . . . . 158
16.3 What About The Stack? . . . . . . . . . . . . . . . . . . . . 159
16.4 Support for Sharing . . . . . . . . . . . . . . . . . . . . . . 160
16.5 Fine-grained vs. Coarse-grained Segmentation . . . . . . . 161
16.6 OS Support . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
16.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 165
17 Free-Space Management 167
17.1 Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . . 168
17.2 Low-level Mechanisms . . . . . . . . . . . . . . . . . . . . 169
17.3 Basic Strategies . . . . . . . . . . . . . . . . . . . . . . . . . 177
17.4 Other Approaches . . . . . . . . . . . . . . . . . . . . . . . 179
17.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 183
18 Paging: Introduction 185
18.1 A Simple Example And Overview . . . . . . . . . . . . . . 185
18.2 Where Are Page Tables Stored? . . . . . . . . . . . . . . . . 189
18.3 What’s Actually In The Page Table? . . . . . . . . . . . . . 190
18.4 Paging: Also Too Slow . . . . . . . . . . . . . . . . . . . . . 191
18.5 A Memory Trace . . . . . . . . . . . . . . . . . . . . . . . . 192
18.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 197
19 Paging: Faster Translations (TLBs) 199
19.1 TLB Basic Algorithm . . . . . . . . . . . . . . . . . . . . . . 199
19.2 Example: Accessing An Array . . . . . . . . . . . . . . . . 201
19.3 Who Handles The TLB Miss? . . . . . . . . . . . . . . . . . 203
19.4 TLB Contents: What’s In There? . . . . . . . . . . . . . . . 205
19.5 TLB Issue: Context Switches . . . . . . . . . . . . . . . . . 206
19.6 Issue: Replacement Policy . . . . . . . . . . . . . . . . . . . 208
OPERATING
SYSTEMS
[VERSION 1.00] WWW.OSTEP.ORG
CONTENTS xvii
19.7 A Real TLB Entry . . . . . . . . . . . . . . . . . . . . . . . . 209
19.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Homework (Measurement) . . . . . . . . . . . . . . . . . . . . . . 212
20 Paging: Smaller Tables 215
20.1 Simple Solution: Bigger Pages . . . . . . . . . . . . . . . . 215
20.2 Hybrid Approach: Paging and Segments . . . . . . . . . . 216
20.3 Multi-level Page Tables . . . . . . . . . . . . . . . . . . . . 219
20.4 Inverted Page Tables . . . . . . . . . . . . . . . . . . . . . . 226
20.5 Swapping the Page Tables to Disk . . . . . . . . . . . . . . 227
20.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 229
21 Beyond Physical Memory: Mechanisms 231
21.1 Swap Space . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
21.2 The Present Bit . . . . . . . . . . . . . . . . . . . . . . . . . 233
21.3 The Page Fault . . . . . . . . . . . . . . . . . . . . . . . . . 234
21.4 What If Memory Is Full? . . . . . . . . . . . . . . . . . . . . 235
21.5 Page Fault Control Flow . . . . . . . . . . . . . . . . . . . . 236
21.6 When Replacements Really Occur . . . . . . . . . . . . . . 237
21.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Homework (Measurement) . . . . . . . . . . . . . . . . . . . . . . 240
22 Beyond Physical Memory: Policies 243
22.1 Cache Management . . . . . . . . . . . . . . . . . . . . . . 243
22.2 The Optimal Replacement Policy . . . . . . . . . . . . . . . 244
22.3 A Simple Policy: FIFO . . . . . . . . . . . . . . . . . . . . . 246
22.4 Another Simple Policy: Random . . . . . . . . . . . . . . . 248
22.5 Using History: LRU . . . . . . . . . . . . . . . . . . . . . . 249
22.6 Workload Examples . . . . . . . . . . . . . . . . . . . . . . 250
22.7 Implementing Historical Algorithms . . . . . . . . . . . . . 253
22.8 Approximating LRU . . . . . . . . . . . . . . . . . . . . . . 254
22.9 Considering Dirty Pages . . . . . . . . . . . . . . . . . . . . 255
22.10 Other VM Policies . . . . . . . . . . . . . . . . . . . . . . . 256
22.11 Thrashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
22.12 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 259
23 Complete Virtual Memory Systems 261
23.1 VAX/VMS Virtual Memory . . . . . . . . . . . . . . . . . . 262
23.2 The Linux Virtual Memory System . . . . . . . . . . . . . . 268
23.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
⃝c 2008–18, ARPACI-DUSSEAU
THREE
EASY
PIECES
xviii CONTENTS
24 Summary Dialogue on Memory Virtualization 279
II Concurrency 283
25 A Dialogue on Concurrency 285
26 Concurrency: An Introduction 287
26.1 Why Use Threads? . . . . . . . . . . . . . . . . . . . . . . . 288
26.2 An Example: Thread Creation . . . . . . . . . . . . . . . . 289
26.3 Why It Gets Worse: Shared Data . . . . . . . . . . . . . . . 292
26.4 The Heart Of The Problem: Uncontrolled Scheduling . . . 294
26.5 The Wish For Atomicity . . . . . . . . . . . . . . . . . . . . 296
26.6 One More Problem: Waiting For Another . . . . . . . . . . 298
26.7 Summary: Why in OS Class? . . . . . . . . . . . . . . . . . 298
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 301
27 Interlude: Thread API 303
27.1 Thread Creation . . . . . . . . . . . . . . . . . . . . . . . . 303
27.2 Thread Completion . . . . . . . . . . . . . . . . . . . . . . . 304
27.3 Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
27.4 Condition Variables . . . . . . . . . . . . . . . . . . . . . . 309
27.5 Compiling and Running . . . . . . . . . . . . . . . . . . . . 311
27.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Homework (Code) . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
28 Locks 315
28.1 Locks: The Basic Idea . . . . . . . . . . . . . . . . . . . . . 315
28.2 Pthread Locks . . . . . . . . . . . . . . . . . . . . . . . . . . 316
28.3 Building A Lock . . . . . . . . . . . . . . . . . . . . . . . . 317
28.4 Evaluating Locks . . . . . . . . . . . . . . . . . . . . . . . . 317
28.5 Controlling Interrupts . . . . . . . . . . . . . . . . . . . . . 318
28.6 A Failed Attempt: Just Using Loads/Stores . . . . . . . . . 319
28.7 Building Working Spin Locks with Test-And-Set . . . . . . 320
28.8 Evaluating Spin Locks . . . . . . . . . . . . . . . . . . . . . 322
28.9 Compare-And-Swap . . . . . . . . . . . . . . . . . . . . . . 323
28.10 Load-Linked and Store-Conditional . . . . . . . . . . . . . 324
28.11 Fetch-And-Add . . . . . . . . . . . . . . . . . . . . . . . . . 326
28.12 Too Much Spinning: What Now? . . . . . . . . . . . . . . . 327
28.13 A Simple Approach: Just Yield, Baby . . . . . . . . . . . . . 328
28.14 Using Queues: Sleeping Instead Of Spinning . . . . . . . . 329
28.15 Different OS, Different Support . . . . . . . . . . . . . . . . 332
28.16 Two-Phase Locks . . . . . . . . . . . . . . . . . . . . . . . . 332
28.17 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
OPERATING
SYSTEMS
[VERSION 1.00] WWW.OSTEP.ORG
CONTENTS xix
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 336
29 Lock-based Concurrent Data Structures 337
29.1 Concurrent Counters . . . . . . . . . . . . . . . . . . . . . . 337
29.2 Concurrent Linked Lists . . . . . . . . . . . . . . . . . . . . 342
29.3 Concurrent Queues . . . . . . . . . . . . . . . . . . . . . . . 345
29.4 Concurrent Hash Table . . . . . . . . . . . . . . . . . . . . 346
29.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Homework (Code) . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
30 Condition Variables 351
30.1 Definition and Routines . . . . . . . . . . . . . . . . . . . . 352
30.2 The Producer/Consumer (Bounded Buffer) Problem . . . . 355
30.3 Covering Conditions . . . . . . . . . . . . . . . . . . . . . . 363
30.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Homework (Code) . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
31 Semaphores 367
31.1 Semaphores: A Definition . . . . . . . . . . . . . . . . . . . 367
31.2 Binary Semaphores (Locks) . . . . . . . . . . . . . . . . . . 369
31.3 Semaphores For Ordering . . . . . . . . . . . . . . . . . . . 370
31.4 The Producer/Consumer (Bounded Buffer) Problem . . . . 372
31.5 Reader-Writer Locks . . . . . . . . . . . . . . . . . . . . . . 376
31.6 The Dining Philosophers . . . . . . . . . . . . . . . . . . . 378
31.7 How To Implement Semaphores . . . . . . . . . . . . . . . 381
31.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Homework (Code) . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
32 Common Concurrency Problems 385
32.1 What Types Of Bugs Exist? . . . . . . . . . . . . . . . . . . 385
32.2 Non-Deadlock Bugs . . . . . . . . . . . . . . . . . . . . . . 386
32.3 Deadlock Bugs . . . . . . . . . . . . . . . . . . . . . . . . . 389
32.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Homework (Code) . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
33 Event-based Concurrency (Advanced) 401
33.1 The Basic Idea: An Event Loop . . . . . . . . . . . . . . . . 401
33.2 An Important API: select() (or poll()) . . . . . . . . . 402
33.3 Using select() . . . . . . . . . . . . . . . . . . . . . . . . 403
33.4 Why Simpler? No Locks Needed . . . . . . . . . . . . . . . 404
33.5 A Problem: Blocking System Calls . . . . . . . . . . . . . . 405
33.6 A Solution: Asynchronous I/O . . . . . . . . . . . . . . . . 405
33.7 Another Problem: State Management . . . . . . . . . . . . 408
⃝c 2008–18, ARPACI-DUSSEAU
THREE
EASY
PIECES
xx CONTENTS
33.8 What Is Still Difficult With Events . . . . . . . . . . . . . . 409
33.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
Homework (Code) . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
34 Summary Dialogue on Concurrency 413
III Persistence 415
35 A Dialogue on Persistence 417
36 I/O Devices 419
36.1 System Architecture . . . . . . . . . . . . . . . . . . . . . . 419
36.2 A Canonical Device . . . . . . . . . . . . . . . . . . . . . . 421
36.3 The Canonical Protocol . . . . . . . . . . . . . . . . . . . . 422
36.4 Lowering CPU Overhead With Interrupts . . . . . . . . . . 423
36.5 More Efficient Data Movement With DMA . . . . . . . . . 424
36.6 Methods Of Device Interaction . . . . . . . . . . . . . . . . 425
36.7 Fitting Into The OS: The Device Driver . . . . . . . . . . . . 426
36.8 Case Study: A Simple IDE Disk Driver . . . . . . . . . . . . 427
36.9 Historical Notes . . . . . . . . . . . . . . . . . . . . . . . . 430
36.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
37 Hard Disk Drives 433
37.1 The Interface . . . . . . . . . . . . . . . . . . . . . . . . . . 433
37.2 Basic Geometry . . . . . . . . . . . . . . . . . . . . . . . . . 434
37.3 A Simple Disk Drive . . . . . . . . . . . . . . . . . . . . . . 435
37.4 I/O Time: Doing The Math . . . . . . . . . . . . . . . . . . 438
37.5 Disk Scheduling . . . . . . . . . . . . . . . . . . . . . . . . 442
37.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 448
38 Redundant Arrays of Inexpensive Disks (RAIDs) 449
38.1 Interface And RAID Internals . . . . . . . . . . . . . . . . . 450
38.2 Fault Model . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
38.3 How To Evaluate A RAID . . . . . . . . . . . . . . . . . . . 451
38.4 RAID Level 0: Striping . . . . . . . . . . . . . . . . . . . . . 452
38.5 RAID Level 1: Mirroring . . . . . . . . . . . . . . . . . . . . 455
38.6 RAID Level 4: Saving Space With Parity . . . . . . . . . . . 458
38.7 RAID Level 5: Rotating Parity . . . . . . . . . . . . . . . . 462
38.8 RAID Comparison: A Summary . . . . . . . . . . . . . . . 463
38.9 Other Interesting RAID Issues . . . . . . . . . . . . . . . . 464
38.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
OPERATING
SYSTEMS
[VERSION 1.00] WWW.OSTEP.ORG
CONTENTS xxi
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 466
39 Interlude: Files and Directories 467
39.1 Files And Directories . . . . . . . . . . . . . . . . . . . . . . 467
39.2 The File System Interface . . . . . . . . . . . . . . . . . . . 469
39.3 Creating Files . . . . . . . . . . . . . . . . . . . . . . . . . . 469
39.4 Reading And Writing Files . . . . . . . . . . . . . . . . . . 470
39.5 Reading And Writing, But Not Sequentially . . . . . . . . . 472
39.6 Shared File Table Entries: fork() And dup() . . . . . . . 475
39.7 Writing Immediately With fsync() . . . . . . . . . . . . . 477
39.8 Renaming Files . . . . . . . . . . . . . . . . . . . . . . . . . 478
39.9 Getting Information About Files . . . . . . . . . . . . . . . 479
39.10 Removing Files . . . . . . . . . . . . . . . . . . . . . . . . . 480
39.11 Making Directories . . . . . . . . . . . . . . . . . . . . . . . 480
39.12 Reading Directories . . . . . . . . . . . . . . . . . . . . . . 481
39.13 Deleting Directories . . . . . . . . . . . . . . . . . . . . . . 482
39.14 Hard Links . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
39.15 Symbolic Links . . . . . . . . . . . . . . . . . . . . . . . . . 484
39.16 Permission Bits And Access Control Lists . . . . . . . . . . 485
39.17 Making And Mounting A File System . . . . . . . . . . . . 488
39.18 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
Homework (Code) . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
40 File System Implementation 493
40.1 The Way To Think . . . . . . . . . . . . . . . . . . . . . . . 493
40.2 Overall Organization . . . . . . . . . . . . . . . . . . . . . . 494
40.3 File Organization: The Inode . . . . . . . . . . . . . . . . . 496
40.4 Directory Organization . . . . . . . . . . . . . . . . . . . . 501
40.5 Free Space Management . . . . . . . . . . . . . . . . . . . . 501
40.6 Access Paths: Reading and Writing . . . . . . . . . . . . . . 502
40.7 Caching and Buffering . . . . . . . . . . . . . . . . . . . . . 506
40.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 510
41 Locality and The Fast File System 511
41.1 The Problem: Poor Performance . . . . . . . . . . . . . . . 511
41.2 FFS: Disk Awareness Is The Solution . . . . . . . . . . . . . 513
41.3 Organizing Structure: The Cylinder Group . . . . . . . . . 513
41.4 Policies: How To Allocate Files and Directories . . . . . . . 515
41.5 Measuring File Locality . . . . . . . . . . . . . . . . . . . . 517
41.6 The Large-File Exception . . . . . . . . . . . . . . . . . . . 518
41.7 A Few Other Things About FFS . . . . . . . . . . . . . . . . 520
41.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 524
⃝c 2008–18, ARPACI-DUSSEAU
THREE
EASY
PIECES
xxii CONTENTS
42 Crash Consistency: FSCK and Journaling 525
42.1 A Detailed Example . . . . . . . . . . . . . . . . . . . . . . 526
42.2 Solution #1: The File System Checker . . . . . . . . . . . . 529
42.3 Solution #2: Journaling (or Write-Ahead Logging) . . . . . 531
42.4 Solution #3: Other Approaches . . . . . . . . . . . . . . . . 541
42.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 545
43 Log-structured File Systems 547
43.1 Writing To Disk Sequentially . . . . . . . . . . . . . . . . . 548
43.2 Writing Sequentially And Effectively . . . . . . . . . . . . . 549
43.3 How Much To Buffer? . . . . . . . . . . . . . . . . . . . . . 550
43.4 Problem: Finding Inodes . . . . . . . . . . . . . . . . . . . 551
43.5 Solution Through Indirection: The Inode Map . . . . . . . 551
43.6 Completing The Solution: The Checkpoint Region . . . . . 553
43.7 Reading A File From Disk: A Recap . . . . . . . . . . . . . 553
43.8 What About Directories? . . . . . . . . . . . . . . . . . . . 554
43.9 A New Problem: Garbage Collection . . . . . . . . . . . . . 555
43.10 Determining Block Liveness . . . . . . . . . . . . . . . . . . 556
43.11 A Policy Question: Which Blocks To Clean, And When? . . 557
43.12 Crash Recovery And The Log . . . . . . . . . . . . . . . . . 558
43.13 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 561
44 Flash-based SSDs 563
44.1 Storing a Single Bit . . . . . . . . . . . . . . . . . . . . . . . 563
44.2 From Bits to Banks/Planes . . . . . . . . . . . . . . . . . . 564
44.3 Basic Flash Operations . . . . . . . . . . . . . . . . . . . . . 565
44.4 Flash Performance And Reliability . . . . . . . . . . . . . . 567
44.5 From Raw Flash to Flash-Based SSDs . . . . . . . . . . . . 568
44.6 FTL Organization: A Bad Approach . . . . . . . . . . . . . 569
44.7 A Log-Structured FTL . . . . . . . . . . . . . . . . . . . . . 570
44.8 Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . 572
44.9 Mapping Table Size . . . . . . . . . . . . . . . . . . . . . . 574
44.10 Wear Leveling . . . . . . . . . . . . . . . . . . . . . . . . . 579
44.11 SSD Performance And Cost . . . . . . . . . . . . . . . . . . 579
44.12 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 585
45 Data Integrity and Protection 587
45.1 Disk Failure Modes . . . . . . . . . . . . . . . . . . . . . . . 587
45.2 Handling Latent Sector Errors . . . . . . . . . . . . . . . . 589
45.3 Detecting Corruption: The Checksum . . . . . . . . . . . . 590
45.4 Using Checksums . . . . . . . . . . . . . . . . . . . . . . . 593
OPERATING
SYSTEMS
[VERSION 1.00] WWW.OSTEP.ORG
CONTENTS xxiii
45.5 A New Problem: Misdirected Writes . . . . . . . . . . . . . 594
45.6 One Last Problem: Lost Writes . . . . . . . . . . . . . . . . 595
45.7 Scrubbing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
45.8 Overheads Of Checksumming . . . . . . . . . . . . . . . . 596
45.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 598
Homework (Code) . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
46 Summary Dialogue on Persistence 601
47 A Dialogue on Distribution 603
48 Distributed Systems 605
48.1 Communication Basics . . . . . . . . . . . . . . . . . . . . . 606
48.2 Unreliable Communication Layers . . . . . . . . . . . . . . 607
48.3 Reliable Communication Layers . . . . . . . . . . . . . . . 609
48.4 Communication Abstractions . . . . . . . . . . . . . . . . . 611
48.5 Remote Procedure Call (RPC) . . . . . . . . . . . . . . . . . 613
48.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Homework (Code) . . . . . . . . . . . . . . . . . . . . . . . . . . . 620
49 Sun’s Network File System (NFS) 621
49.1 A Basic Distributed File System . . . . . . . . . . . . . . . . 622
49.2 On To NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
49.3 Focus: Simple And Fast Server Crash Recovery . . . . . . . 623
49.4 Key To Fast Crash Recovery: Statelessness . . . . . . . . . 624
49.5 The NFSv2 Protocol . . . . . . . . . . . . . . . . . . . . . . 625
49.6 From Protocol To Distributed File System . . . . . . . . . . 627
49.7 Handling Server Failure With Idempotent Operations . . . 629
49.8 Improving Performance: Client-side Caching . . . . . . . . 631
49.9 The Cache Consistency Problem . . . . . . . . . . . . . . . 631
49.10 Assessing NFS Cache Consistency . . . . . . . . . . . . . . 633
49.11 Implications On Server-Side Write Buffering . . . . . . . . 633
49.12 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
Homework (Measurement) . . . . . . . . . . . . . . . . . . . . . . 638
50 The Andrew File System (AFS) 639
50.1 AFS Version 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 639
50.2 Problems with Version 1 . . . . . . . . . . . . . . . . . . . . 641
50.3 Improving the Protocol . . . . . . . . . . . . . . . . . . . . 642
50.4 AFS Version 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 642
50.5 Cache Consistency . . . . . . . . . . . . . . . . . . . . . . . 644
50.6 Crash Recovery . . . . . . . . . . . . . . . . . . . . . . . . . 646
50.7 Scale And Performance Of AFSv2 . . . . . . . . . . . . . . 646
⃝c 2008–18, ARPACI-DUSSEAU
THREE
EASY
PIECES
xxiv CONTENTS
50.8 AFS: Other Improvements . . . . . . . . . . . . . . . . . . . 649
50.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
Homework (Simulation) . . . . . . . . . . . . . . . . . . . . . . . 652
51 Summary Dialogue on Distribution 653
General Index 655
Asides 667
Tips 671
Cruces 675

标签: system three

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警