24小时热门版块排行榜    

查看: 2030  |  回复: 29
【奖励】 本帖被评价25次,作者foxsuncool增加金币 19.4
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

foxsuncool

木虫 (小有名气)


[资源] 深入理解计算机系统

深入理解计算机系统附件1是Bryant和O'Hallaron所著的《Computer Systems A Programmer’s Perspective》的译本是扫描版,清晰度不够
附件2:深入理解计算机操作系统是英文的(非扫描版)Preface i
1 Introduction 1
1.1 Information isBits inContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Programs areTranslated byOtherPrograms intoDifferent Forms . . . . . . . . . . . . . . . 3
1.3 ItPays toUnderstandHowCompilation SystemsWork . . . . . . . . . . . . . . . . . . . . 4
1.4 Processors Read and Interpret Instructions Stored in Memory . . . . . . . . . . . . . . . . . 5
1.4.1 HardwareOrganization of aSystem . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.2 Running the helloProgram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5 CachesMatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 StorageDevicesFormaHierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.7 TheOperating SystemManages theHardware . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7.1 Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.7.2 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.7.3 Virtual Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.7.4 Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.8 SystemsCommunicateWithOtherSystemsUsingNetworks . . . . . . . . . . . . . . . . . 16
1.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
I Program Structure and Execution 19
2 Representing and Manipulating Information 21
2.1 Information Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.1.1 HexadecimalNotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.2 Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3
4 CONTENTS
2.1.3 DataSizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.1.4 Addressing and Byte Ordering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.1.5 Representing Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.1.6 Representing Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.1.7 BooleanAlgebras andRings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.1.8 Bit-Level Operations in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.1.9 LogicalOperations inC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.1.10 ShiftOperations inC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.2 Integer Representations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.2.1 IntegralDataTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.2.2 Unsigned andTwo’sComplementEncodings . . . . . . . . . . . . . . . . . . . . . 41
2.2.3 Conversions BetweenSigned andUnsigned . . . . . . . . . . . . . . . . . . . . . . 45
2.2.4 Signed vs.Unsigned inC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.2.5 Expanding the Bit Representation of a Number . . . . . . . . . . . . . . . . . . . . 49
2.2.6 TruncatingNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.2.7 Advice onSigned vs.Unsigned . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.3 Integer Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.3.1 Unsigned Addition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.3.2 Two’s Complement Addition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.3.3 Two’sComplementNegation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
2.3.4 Unsigned Multiplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.3.5 Two’s Complement Multiplication . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
2.3.6 Multiplying by Powers of Two . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.3.7 Dividing byPowersofTwo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.4 Floating Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.4.1 FractionalBinaryNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.4.2 IEEE Floating-Point Representation . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2.4.3 ExampleNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
2.4.4 Rounding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2.4.5 Floating-PointOperations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
2.4.6 Floating Point inC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
CONTENTS 5
3 Machine-Level Representation of C Programs 89
3.1 AHistorical Perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.2 ProgramEncodings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.2.1 Machine-LevelCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3.2.2 CodeExamples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
3.2.3 A Note on Formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
3.3 DataFormats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
3.4 Accessing Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
3.4.1 Operand Specifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
3.4.2 DataMovement Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.4.3 DataMovementExample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.5 Arithmetic and Logical Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
3.5.1 LoadEffectiveAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
3.5.2 Unary andBinaryOperations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
3.5.3 ShiftOperations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
3.5.4 Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
3.5.5 Special Arithmetic Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
3.6 Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
3.6.1 Condition Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
3.6.2 Accessing the Condition Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
3.6.3 Jump Instructions and theirEncodings . . . . . . . . . . . . . . . . . . . . . . . . . 114
3.6.4 TranslatingConditionalBranches . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
3.6.5 Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.6.6 SwitchStatements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
3.7 Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
3.7.1 StackFrameStructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
3.7.2 Transferring Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
3.7.3 RegisterUsageConventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
3.7.4 Procedure Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
3.7.5 Recursive Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
3.8 Array Allocation and Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
3.8.1 BasicPrinciples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
3.8.2 Pointer Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
6 CONTENTS
3.8.3 Arrays and Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
3.8.4 NestedArrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
3.8.5 FixedSizeArrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
3.8.6 DynamicallyAllocatedArrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
3.9 HeterogeneousDataStructures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
3.9.1 Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
3.9.2 Unions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
3.10 Alignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
3.11 Putting it Together: Understanding Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . 162
3.12 Life in the Real World: Using the GDB Debugger . . . . . . . . . . . . . . . . . . . . . . . 165
3.13 Out-of-Bounds Memory References and Buffer Overflow . . . . . . . . . . . . . . . . . . . 167
3.14 *Floating-Point Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
3.14.1 Floating-PointRegisters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
3.14.2 Extended-Precision Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
3.14.3 Stack Evaluation of Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
3.14.4 Floating-PointDataMovement andConversionOperations . . . . . . . . . . . . . . 179
3.14.5 Floating-Point Arithmetic Instructions . . . . . . . . . . . . . . . . . . . . . . . . . 181
3.14.6 UsingFloating Point inProcedures . . . . . . . . . . . . . . . . . . . . . . . . . . 183
3.14.7 Testing andComparing Floating-PointValues . . . . . . . . . . . . . . . . . . . . . 184
3.15 *Embedding Assembly Code in C Programs . . . . . . . . . . . . . . . . . . . . . . . . . . 186
3.15.1 Basic Inline Assembly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
3.15.2 Extended Form of asm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
3.16 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
4 Processor Architecture 201
5 Optimizing Program Performance 203
5.1 Capabilities and Limitations of Optimizing Compilers . . . . . . . . . . . . . . . . . . . . . 204
5.2 Expressing Program Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
5.3 ProgramExample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
5.4 Eliminating LoopInefficiencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
5.5 Reducing ProcedureCalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
5.6 EliminatingUnneededMemoryReferences . . . . . . . . . . . . . . . . . . . . . . . . . . 218
CONTENTS 7
5.7 Understanding Modern Processors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
5.7.1 OverallOperation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
5.7.2 FunctionalUnitPerformance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
5.7.3 A Closer Look at Processor Operation . . . . . . . . . . . . . . . . . . . . . . . . . 225
5.8 Reducing LoopOverhead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
5.9 Converting to Pointer Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
5.10 Enhancing Parallelism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
5.10.1 Loop Splitting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
5.10.2 Register Spilling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
5.10.3 Limits toParallelism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
5.11 Putting it Together: Summary of Results for Optimizing Combining Code . . . . . . . . . . 247
5.11.1 Floating-Point PerformanceAnomaly . . . . . . . . . . . . . . . . . . . . . . . . . 248
5.11.2 Changing Platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
5.12 Branch Prediction and Misprediction Penalties . . . . . . . . . . . . . . . . . . . . . . . . . 249
5.13 UnderstandingMemoryPerformance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
5.13.1 LoadLatency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
5.13.2 StoreLatency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
5.14 Life intheRealWorld: Performance ImprovementTechniques . . . . . . . . . . . . . . . . 260
5.15 Identifying and Eliminating Performance Bottlenecks . . . . . . . . . . . . . . . . . . . . . 261
5.15.1 ProgramProfiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
5.15.2 Using aProfiler toGuideOptimization . . . . . . . . . . . . . . . . . . . . . . . . 263
5.15.3 Amdahl’sLaw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
5.16 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
6 The Memory Hierarchy 275
6.1 Storage Technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
6.1.1 Random-Access Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
6.1.2 DiskStorage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
6.1.3 Storage Technology Trends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
6.2 Locality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
6.2.1 Locality of References to Program Data . . . . . . . . . . . . . . . . . . . . . . . . 295
6.2.2 Locality of Instruction Fetches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
6.2.3 Summary of Locality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
8 CONTENTS
6.3 TheMemoryHierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
6.3.1 Caching in theMemoryHierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
6.3.2 Summary ofMemoryHierarchyConcepts . . . . . . . . . . . . . . . . . . . . . . . 303
6.4 CacheMemories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
6.4.1 GenericCacheMemoryOrganization . . . . . . . . . . . . . . . . . . . . . . . . . 305
6.4.2 Direct-MappedCaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
6.4.3 SetAssociativeCaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
6.4.4 FullyAssociativeCaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
6.4.5 Issues with Writes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
6.4.6 Instruction Caches andUnifiedCaches . . . . . . . . . . . . . . . . . . . . . . . . 319
6.4.7 Performance Impact ofCacheParameters . . . . . . . . . . . . . . . . . . . . . . . 320
6.5 Writing Cache-friendly Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
6.6 Putting it Together: The Impact of Caches on Program Performance . . . . . . . . . . . . . 327
6.6.1 The Memory Mountain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
6.6.2 Rearranging Loops to Increase Spatial Locality . . . . . . . . . . . . . . . . . . . . 331
6.6.3 Using Blocking to Increase Temporal Locality . . . . . . . . . . . . . . . . . . . . 335
6.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
II Running Programs on a System 347
7 Linking 349
7.1 CompilerDrivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
7.2 StaticLinking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
7.3 Object Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
7.4 RelocatableObjectFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
7.5 Symbols andSymbolTables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
7.6 SymbolResolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
7.6.1 How Linkers Resolve Multiply-Defined Global Symbols . . . . . . . . . . . . . . . 358
7.6.2 LinkingwithStaticLibraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
7.6.3 HowLinkersUseStaticLibraries toResolveReferences . . . . . . . . . . . . . . . 364
7.7 Relocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
7.7.1 Relocation Entries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
7.7.2 Relocating SymbolReferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
CONTENTS 9
7.8 ExecutableObjectFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
7.9 LoadingExecutableObject Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
7.10 DynamicLinkingwithSharedLibraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
7.11 Loading andLinking SharedLibraries fromApplications . . . . . . . . . . . . . . . . . . . 376
7.12 *Position-Independent Code (PIC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
7.13 Tools forManipulatingObjectFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
7.14 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
8 Exceptional Control Flow 391
8.1 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
8.1.1 ExceptionHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
8.1.2 Classes of Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
8.1.3 Exceptions in Intel Processors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
8.2 Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
8.2.1 LogicalControlFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
8.2.2 PrivateAddress Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
8.2.3 User andKernelModes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
8.2.4 Context Switches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
8.3 SystemCalls andErrorHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
8.4 Process Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
8.4.1 Obtaining Process ID’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
8.4.2 Creating and Terminating Processes . . . . . . . . . . . . . . . . . . . . . . . . . . 404
8.4.3 Reaping Child Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
8.4.4 Putting Processes to Sleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
8.4.5 Loading and Running Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
8.4.6 Using fork and execve toRunPrograms . . . . . . . . . . . . . . . . . . . . . . 418
8.5 Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
8.5.1 SignalTerminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
8.5.2 Sending Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
8.5.3 Receiving Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
8.5.4 SignalHandling Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
8.5.5 Portable SignalHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
8.6 Nonlocal Jumps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
10 CONTENTS
8.7 Tools for Manipulating Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
8.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
9 Measuring Program Execution Time 449
9.1 TheFlowofTimeonaComputerSystem . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
9.1.1 Process Scheduling and Timer Interrupts . . . . . . . . . . . . . . . . . . . . . . . 451
9.1.2 Time fromanApplication Program’sPerspective . . . . . . . . . . . . . . . . . . . 452
9.2 Measuring Time by Interval Counting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
9.2.1 Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
9.2.2 Reading the Process Timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
9.2.3 Accuracy of Process Timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
9.3 Cycle Counters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
9.3.1 IA32 Cycle Counters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
9.4 Measuring Program Execution Time with Cycle Counters . . . . . . . . . . . . . . . . . . . 460
9.4.1 TheEffects ofContextSwitching . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
9.4.2 Caching andOtherEffects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
9.4.3 The K-Best Measurement Scheme . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
9.5 Time-of-Day Measurements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
9.6 Putting it Together: An Experimental Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 478
9.7 Looking into the Future . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
9.8 Life in the Real World: An Implementation of the K-Best Measurement Scheme . . . . . . 480
9.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
10 Virtual Memory 485
10.1 Physical and Virtual Addressing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
10.2 Address Spaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
10.3 VMas aTool forCaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
10.3.1 DRAM Cache Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
10.3.2 PageTables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
10.3.3 PageHits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
10.3.4 PageFaults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
10.3.5 Allocating Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
10.3.6 Locality to the Rescue Again . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
CONTENTS 11
10.4 VMas aTool forMemoryManagement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
10.4.1 Simplifying Linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
10.4.2 Simplifying Sharing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
10.4.3 Simplifying Memory Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
10.4.4 Simplifying Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
10.5 VMas aTool forMemoryProtection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
10.6 AddressTranslation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
10.6.1 Integrating Caches andVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
10.6.2 Speeding upAddressTranslationwith aTLB . . . . . . . . . . . . . . . . . . . . . 500
10.6.3 Multi-level Page Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
10.6.4 Putting it Together: End-to-end Address Translation . . . . . . . . . . . . . . . . . 504
10.7 Case Study: The Pentium/Linux Memory System . . . . . . . . . . . . . . . . . . . . . . . 508
10.7.1 PentiumAddressTranslation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
10.7.2 Linux Virtual Memory System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
10.8 MemoryMapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
10.8.1 SharedObjectsRevisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
10.8.2 The forkFunctionRevisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
10.8.3 The execveFunctionRevisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
10.8.4 User-level Memory Mapping with the mmapFunction . . . . . . . . . . . . . . . . 520
10.9 DynamicMemoryAllocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
10.9.1 The malloc and freeFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
10.9.2 WhyDynamicMemoryAllocation? . . . . . . . . . . . . . . . . . . . . . . . . . . 524
10.9.3 AllocatorRequirements andGoals . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
10.9.4 Fragmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
10.9.5 Implementation Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
10.9.6 Implicit FreeLists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
10.9.7 PlacingAllocatedBlocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
10.9.8 Splitting Free Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
10.9.9 Getting Additional Heap Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
10.9.10 Coalescing Free Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
10.9.11 Coalescing with Boundary Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
10.9.12 Putting it Together: Implementing a Simple Allocator . . . . . . . . . . . . . . . . . 535
10.9.13Explicit FreeLists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
12 CONTENTS
10.9.14Segregated FreeLists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
10.10GarbageCollection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
10.10.1GarbageCollectorBasics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
10.10.2Mark&SweepGarbageCollectors . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
10.10.3ConservativeMark&Sweep forCPrograms . . . . . . . . . . . . . . . . . . . . . . 550
10.11CommonMemory-relatedBugs inCPrograms . . . . . . . . . . . . . . . . . . . . . . . . 551
10.11.1Dereferencing BadPointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
10.11.2 Reading Uninitialized Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
10.11.3AllowingStackBufferOverflows . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
10.11.4Assuming thatPointers and theObjects theyPoint toAre theSameSize . . . . . . . 552
10.11.5MakingOff-by-oneErrors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
10.11.6Referencing aPointer Instead of theObject itPoints to . . . . . . . . . . . . . . . . 553
10.11.7Misunderstanding Pointer Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . 554
10.11.8ReferencingNon-existentVariables . . . . . . . . . . . . . . . . . . . . . . . . . . 554
10.11.9ReferencingData inFreeHeapBlocks . . . . . . . . . . . . . . . . . . . . . . . . . 555
10.11.10Introducing Memory Leaks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
10.12Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
III Interaction and Communication Between Programs 561
11 Concurrent Programming with Threads 563
11.1 BasicThreadConcepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
11.2 ThreadControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
11.2.1 CreatingThreads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
11.2.2 TerminatingThreads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
11.2.3 ReapingTerminatedThreads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
11.2.4 Detaching Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
11.3 SharedVariables inThreaded Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
11.3.1 ThreadsMemoryModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
11.3.2 MappingVariables toMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
11.3.3 SharedVariables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
11.4 Synchronizing Threads with Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
11.4.1 SequentialConsistency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
CONTENTS 13
11.4.2 ProgressGraphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
11.4.3 Protecting Shared Variables with Semaphores . . . . . . . . . . . . . . . . . . . . . 579
11.4.4 Posix Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
11.4.5 Signaling With Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
11.5 Synchronizing Threads with Mutex and Condition Variables . . . . . . . . . . . . . . . . . 583
11.5.1 MutexVariables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
11.5.2 Condition Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
11.5.3 Barrier Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
11.5.4 Timeout Waiting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
11.6 Thread-safe andReentrant Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
11.6.1 Reentrant Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
11.6.2 Thread-safe Library Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
11.7 OtherSynchronization Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
11.7.1 Races . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
11.7.2 Deadlocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
11.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
12 Network Programming 605
12.1 Client-Server ProgrammingModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
12.2 Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
12.3 TheGlobal IPInternet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611
12.3.1 IP Addresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
12.3.2 InternetDomainNames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
12.3.3 InternetConnections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
12.4 Unixfile I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
12.4.1 The read and writeFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . 620
12.4.2 Robust File I/O With the readn and writenFunctions. . . . . . . . . . . . . . . 621
12.4.3 Robust Input of Text Lines Using the readlineFunction . . . . . . . . . . . . . . 623
12.4.4 The statFunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
12.4.5 The dup2Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
12.4.6 The closeFunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
12.4.7 OtherUnix I/OFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
12.4.8 Unix I/Ovs. Standard I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
14 CONTENTS
12.5 TheSockets Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
12.5.1 SocketAddressStructures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
12.5.2 The socketFunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
12.5.3 The connectFunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
12.5.4 The bindFunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
12.5.5 The listenFunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
12.5.6 The acceptFunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
12.5.7 ExampleEchoClient andServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
12.6 Concurrent Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
12.6.1 Concurrent Servers Based on Processes . . . . . . . . . . . . . . . . . . . . . . . . 638
12.6.2 Concurrent Servers Based on Threads . . . . . . . . . . . . . . . . . . . . . . . . . 640
12.7 WebServers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
12.7.1 WebBasics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
12.7.2 WebContent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
12.7.3 HTTPTransactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
12.7.4 ServingDynamicContent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
12.8 Putting it Together: The TINYWebServer . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
12.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
A Error handling 665
A.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
A.2 Error handling inUnix systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666
A.3 Error-handlingwrappers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667
A.4 The csapp.h header file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
A.5 The csapp.c source file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
B Solutions to Practice Problems 691
B.1 Intro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
B.2 Representing and Manipulating Information . . . . . . . . . . . . . . . . . . . . . . . . . . 691
B.3 Machine Level Representation of C Programs . . . . . . . . . . . . . . . . . . . . . . . . . 700
B.4 Processor Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
B.5 Optimizing ProgramPerformance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
B.6 TheMemoryHierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
CONTENTS 15
B.7 Linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
B.8 ExceptionalControl Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
B.9 Measuring Program Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
B.10 Virtual Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
B.11 Concurrent ProgrammingwithThreads . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
B.12 NetworkProgramming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736

[ Last edited by foxsuncool on 2012-3-15 at 19:22 ]
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:libolin3@tal.com
  • 附件 1 : 深入理解计算机操作系统.pdf
  • 2012-03-15 01:02:19, 4.7 M
  • 附件 2 : 深入理解计算机操作系统.pdf
  • 2012-03-15 19:18:04, 4.7 M

» 收录本帖的淘贴专辑推荐

@其他书籍与资料 好的资源

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jorfun

新虫 (初入文坛)


★★★★★ 五星级,优秀推荐

英文版可以选中文字,注释很方便。
22楼2015-05-31 19:16:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 foxsuncool 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 高级回复(可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[公派出国] CSC博士联培对将来就业有用吗 +4 也就这样 2024-06-22 4/200 2024-06-26 10:46 by lxs7405
[有机交流] 做什么表征可以检测塑料中碳氢氧的含量 5+3 pzr的sci之路 2024-06-25 5/250 2024-06-26 10:13 by zqdsb
[基金申请] 青年基金E02口青基去年几个函评专家? +6 他山攻玉之石 2024-06-25 8/400 2024-06-26 10:00 by 降温器
[考博] 对象没有,还非常想读博,难以抉择 +25 pvrw0224 2024-06-23 47/2350 2024-06-26 09:32 by 我是小小小小鸟
[硕博家园] 【45岁以上博士】柔性人才引进项目,有补贴 +8 Dreamsummit 2024-06-24 17/850 2024-06-26 09:25 by 水水水中游
[考博] 申博好难 +6 自强不息a?a 2024-06-24 6/300 2024-06-25 23:02 by 考研吒儿
[考博] 没读上博,好焦虑! +6 wangzhe_bs 2024-06-24 8/400 2024-06-25 21:15 by wangzhe_bs
[考博] 一名额难求啊 +14 pinbo拼搏 2024-06-19 14/700 2024-06-25 16:55 by wjykycg
[硕博家园] 数据不好 +5 Hetai 2024-06-23 7/350 2024-06-25 12:37 by 1591099
[基金申请] 演员杨幂在核心期刊发表论文,中国广播电视学期刊 +9 babu2015 2024-06-22 12/600 2024-06-25 11:05 by 我是勇敢牛牛
[基金申请] 今年什么时候会评啊 +7 lancet0903 2024-06-24 7/350 2024-06-24 18:48 by Pickfoot
[基金申请] 自然基金变化?? +13 今晚推荐22 2024-06-21 23/1150 2024-06-24 17:20 by 舟言川
[教师之家] 复旦夏同学提出高校成年人学生退学不应该让家长审核,大家认同吗? +10 苏东坡二世 2024-06-22 17/850 2024-06-24 16:52 by wanghuawei
[金属] 寻找钛合金热压缩代做 +4 liuyang358 2024-06-23 4/200 2024-06-24 13:50 by 搬砖狗不放弃
[基金申请] 说博后基金7月出的真打电话了吗? +12 antonysole 2024-06-24 14/700 2024-06-24 13:39 by sizhouyi
[基金申请] 国自然资助比率是不是要下降了?? +8 今晚推荐22 2024-06-21 12/600 2024-06-24 11:15 by Pickfoot
[基金申请] b口yq上会情况 +5 XUAAAAA 2024-06-19 6/300 2024-06-24 01:13 by sunrise3148
[基金申请] 国产期刊影响因子大于12的有20多个个了 +17 babu2015 2024-06-20 22/1100 2024-06-23 13:12 by 德尚中行
[博后之家] 在国内某高校做全职博士后2年,现在找到新的单位,出站或退站对新工作有什么影响? +10 nxplfcc 2024-06-20 10/500 2024-06-22 07:52 by 徐长安
[论文投稿] 第一篇论文投稿进程记录 +4 慎独的小花卷 2024-06-20 9/450 2024-06-20 20:37 by 慎独的小花卷
信息提示
请填处理意见