ebook img

Memory Management: Algorithms and Implementations in C/C++ PDF

392 Pages·2002·6.09 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Memory Management: Algorithms and Implementations in C/C++

Memory Management Algorithms and Implementation in C/C++ by Bill Blunden Wordware Publishing, Inc. LibraryofCongressCataloging-in-PublicationData Blunden,Bill,1969- Memorymanagement:algorithmsandimplementationinC/C++/by BillBlunden. p. cm. Includesbibliographicalreferencesandindex. ISBN 1-55622-347-1 1. Memorymanagement(Computerscience) 2. Computeralgorithms. 3. C(Computerprogramlanguage) 4. C++(Computerprogram language) I. Title. QA76.9.M45.B5582002 005.4'35--dc21 2002012447 CIP ©2003,WordwarePublishing,Inc. AllRightsReserved 2320LosRiosBoulevard Plano,Texas75074 Nopartofthisbookmaybereproducedinanyformorby anymeanswithoutpermissioninwritingfrom WordwarePublishing,Inc. PrintedintheUnitedStatesofAmerica ISBN1-55622-347-1 10 9 8 7 6 5 4 3 2 1 0208 Productnamesmentionedareusedforidentificationpurposesonlyandmaybetrademarksof theirrespectivecompanies. All inquiries for volume purchases of this book should be addressed to Wordware Publishing,Inc.,attheaboveaddress.Telephoneinquiriesmaybemadebycalling: (972)423-0090 ThisbookisdedicatedtoRob,Julie,andTheo. AndalsotoDavidM.Lee “Icametolearnphysics,andIgotJimmyStewart” iii Table of Contents Acknowledgments . . . . . . . . . . . . . . . . . . . . . . xi Introduction. . . . . . . . . . . . . . . . . . . . . . . . . xiii Chapter 1 Memory Management Mechanisms. . . . . . . . . 1 MechanismVersusPolicy . . . . . . . . . . . . . . . . . . 1 MemoryHierarchy . . . . . . . . . . . . . . . . . . . . . . 3 AddressLinesandBuses. . . . . . . . . . . . . . . . . . . 9 IntelPentiumArchitecture . . . . . . . . . . . . . . . . . 11 RealModeOperation. . . . . . . . . . . . . . . . . . . 14 ProtectedModeOperation. . . . . . . . . . . . . . . . 18 ProtectedModeSegmentation . . . . . . . . . . . . 19 ProtectedModePaging . . . . . . . . . . . . . . . . 26 PagingasProtection. . . . . . . . . . . . . . . . . . 31 Addresses:Logical,Linear,andPhysical. . . . . . . 33 PageFramesandPages . . . . . . . . . . . . . . . . 34 CaseStudy:SwitchingtoProtectedMode . . . . . . . 35 ClosingThoughts . . . . . . . . . . . . . . . . . . . . . . 42 References. . . . . . . . . . . . . . . . . . . . . . . . . . 43 Chapter 2 Memory Management Policies. . . . . . . . . . . 45 CaseStudy:MS-DOS . . . . . . . . . . . . . . . . . . . . 46 DOSSegmentationandPaging . . . . . . . . . . . . . 46 DOSMemoryMap . . . . . . . . . . . . . . . . . . . . 47 MemoryUsage . . . . . . . . . . . . . . . . . . . . . . 49 Example:ASimpleVideoDriver . . . . . . . . . . . . 50 Example:UsurpingDOS. . . . . . . . . . . . . . . . . 52 Jumpingthe640KBHurdle . . . . . . . . . . . . . . . 56 CaseStudy:MMURTL . . . . . . . . . . . . . . . . . . . 59 BackgroundandDesignGoals. . . . . . . . . . . . . . 60 MMURTLandSegmentation . . . . . . . . . . . . . . 61 PagingVariations . . . . . . . . . . . . . . . . . . . . . 63 MMURTLandPaging . . . . . . . . . . . . . . . . . . 64 v Table of Contents MemoryAllocation. . . . . . . . . . . . . . . . . . . . 66 CaseStudy:Linux. . . . . . . . . . . . . . . . . . . . . . 67 HistoryandMINIX. . . . . . . . . . . . . . . . . . . . 67 DesignGoalsandFeatures. . . . . . . . . . . . . . . . 68 LinuxandSegmentation . . . . . . . . . . . . . . . . . 69 LinuxandPaging . . . . . . . . . . . . . . . . . . . . . 72 Three-LevelPaging . . . . . . . . . . . . . . . . . . 72 PageFaultHandling . . . . . . . . . . . . . . . . . . 76 MemoryAllocation. . . . . . . . . . . . . . . . . . . . 76 MemoryUsage . . . . . . . . . . . . . . . . . . . . . . 81 Example:SiegeWarfare . . . . . . . . . . . . . . . . . 82 Example:SiegeWarfare,MoreTreachery . . . . . . . 87 CaseStudy:Windows . . . . . . . . . . . . . . . . . . . . 92 HistoricalForces . . . . . . . . . . . . . . . . . . . . . 92 MemoryMapOverview . . . . . . . . . . . . . . . . . 96 WindowsandSegmentation . . . . . . . . . . . . . . . 99 SpecialWeaponsandTactics . . . . . . . . . . . . . 99 CrashingWindowswithaKeystroke . . . . . . . . 102 ReverseEngineeringtheGDT . . . . . . . . . . . 102 WindowsandPaging . . . . . . . . . . . . . . . . . . 105 LinearAddressSpaceTaxonomy . . . . . . . . . . 105 MusicalChairsforPages. . . . . . . . . . . . . . . 106 MemoryProtection . . . . . . . . . . . . . . . . . 108 DemandPaging. . . . . . . . . . . . . . . . . . . . 109 MemoryAllocation . . . . . . . . . . . . . . . . . . . 110 MemoryUsage . . . . . . . . . . . . . . . . . . . . . 114 TurningOffPaging . . . . . . . . . . . . . . . . . . . 117 Example:ThingsThatGoThunkintheNight . . . . 118 ClosingThoughts . . . . . . . . . . . . . . . . . . . . . 122 References . . . . . . . . . . . . . . . . . . . . . . . . . 123 BooksandArticles . . . . . . . . . . . . . . . . . . . 123 WebSites . . . . . . . . . . . . . . . . . . . . . . . . 125 Chapter 3 High-Level Services. . . . . . . . . . . . . . . . 127 Viewfrom10,000Feet. . . . . . . . . . . . . . . . . . . 127 Compiler-BasedAllocation . . . . . . . . . . . . . . . . 129 DataSection. . . . . . . . . . . . . . . . . . . . . . . 132 CodeSection . . . . . . . . . . . . . . . . . . . . . . 134 Stack. . . . . . . . . . . . . . . . . . . . . . . . . . . 136 ActivationRecords . . . . . . . . . . . . . . . . . . 138 Scope . . . . . . . . . . . . . . . . . . . . . . . . . 144 vi Table of Contents StaticorDynamic? . . . . . . . . . . . . . . . . . . 150 HeapAllocation . . . . . . . . . . . . . . . . . . . . . . 151 SystemCallInterface. . . . . . . . . . . . . . . . . . 151 TheHeap . . . . . . . . . . . . . . . . . . . . . . . . 156 ManualMemoryManagement. . . . . . . . . . . . 157 Example:CStandardLibraryCalls . . . . . . . . . 158 AutomaticMemoryManagement . . . . . . . . . . 160 Example:TheBDWConservativeGarbageCollector . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 ManualVersusAutomatic?. . . . . . . . . . . . . . 164 TheEvolutionofLanguages. . . . . . . . . . . . . . . . 168 CaseStudy:COBOL . . . . . . . . . . . . . . . . . . 171 CaseStudy:FORTRAN. . . . . . . . . . . . . . . . . 177 CaseStudy:Pascal . . . . . . . . . . . . . . . . . . . 181 CaseStudy:C . . . . . . . . . . . . . . . . . . . . . . 184 CaseStudy:Java. . . . . . . . . . . . . . . . . . . . . 192 LanguageFeatures. . . . . . . . . . . . . . . . . . 192 VirtualMachineArchitecture . . . . . . . . . . . . 194 JavaMemoryManagement . . . . . . . . . . . . . 196 MemoryManagement:TheThree-layerCake. . . . . . 202 References . . . . . . . . . . . . . . . . . . . . . . . . . 204 Chapter 4 Manual Memory Management. . . . . . . . . . 207 Replacementsformalloc()andfree() . . . . . . . 207 SystemCallInterfaceandPortingIssues . . . . . . . . 208 KeepItSimple...Stupid! . . . . . . . . . . . . . . . . . 211 MeasuringPerformance. . . . . . . . . . . . . . . . . . 212 TheUltimateMeasure:Time . . . . . . . . . . . . . 212 ANSIandNativeTimeRoutines . . . . . . . . . . 213 TheDataDistribution:CreatingRandomVariates. 215 TestingMethodology . . . . . . . . . . . . . . . . . . 219 Indexing:TheGeneralApproach . . . . . . . . . . . . . 224 malloc()Version1:BitmappedAllocation. . . . . . . 224 Theory. . . . . . . . . . . . . . . . . . . . . . . . . . 224 Implementation . . . . . . . . . . . . . . . . . . . . . 226 tree.cpp . . . . . . . . . . . . . . . . . . . . . . . . 227 bitmap.cpp . . . . . . . . . . . . . . . . . . . . . . 232 memmgr.cpp . . . . . . . . . . . . . . . . . . . . . 236 mallocV1.cpp . . . . . . . . . . . . . . . . . . . . . 239 perform.cpp. . . . . . . . . . . . . . . . . . . . . . 241 driver.cpp . . . . . . . . . . . . . . . . . . . . . . . 241 vii Table of Contents Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Trade-Offs . . . . . . . . . . . . . . . . . . . . . . . . 247 malloc()Version2:SequentialFit. . . . . . . . . . . 248 Theory. . . . . . . . . . . . . . . . . . . . . . . . . . 249 Implementation . . . . . . . . . . . . . . . . . . . . . 251 memmgr.cpp . . . . . . . . . . . . . . . . . . . . . 251 mallocV2.cpp . . . . . . . . . . . . . . . . . . . . . 260 driver.cpp . . . . . . . . . . . . . . . . . . . . . . . 261 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Trade-Offs . . . . . . . . . . . . . . . . . . . . . . . . 264 malloc()Version3:SegregatedLists . . . . . . . . . 265 Theory. . . . . . . . . . . . . . . . . . . . . . . . . . 265 Implementation . . . . . . . . . . . . . . . . . . . . . 266 memmgr.cpp . . . . . . . . . . . . . . . . . . . . . 267 mallocV3.cpp . . . . . . . . . . . . . . . . . . . . . 274 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 Trade-Offs . . . . . . . . . . . . . . . . . . . . . . . . 279 PerformanceComparison . . . . . . . . . . . . . . . . . 279 Chapter 5 Automatic Memory Management . . . . . . . . 281 GarbageCollectionTaxonomy . . . . . . . . . . . . . . 281 malloc()Version4:ReferenceCounting . . . . . . . 283 Theory. . . . . . . . . . . . . . . . . . . . . . . . . . 283 Implementation . . . . . . . . . . . . . . . . . . . . . 284 driver.cpp . . . . . . . . . . . . . . . . . . . . . . . 285 mallocV4.cpp . . . . . . . . . . . . . . . . . . . . . 287 perform.cpp. . . . . . . . . . . . . . . . . . . . . . 288 memmgr.cpp . . . . . . . . . . . . . . . . . . . . . 289 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 Trade-Offs . . . . . . . . . . . . . . . . . . . . . . . . 302 malloc()Version5:Mark-Sweep . . . . . . . . . . . 304 Theory. . . . . . . . . . . . . . . . . . . . . . . . . . 304 Implementation . . . . . . . . . . . . . . . . . . . . . 307 driver.cpp . . . . . . . . . . . . . . . . . . . . . . . 307 mallocV5.cpp . . . . . . . . . . . . . . . . . . . . . 309 perform.cpp. . . . . . . . . . . . . . . . . . . . . . 311 memmgr.cpp . . . . . . . . . . . . . . . . . . . . . 312 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 Trade-Offs . . . . . . . . . . . . . . . . . . . . . . . . 330 PerformanceComparison . . . . . . . . . . . . . . . . . 332 PotentialAdditions. . . . . . . . . . . . . . . . . . . . . 332 viii Table of Contents ObjectFormatAssumptions . . . . . . . . . . . . . . 333 VariableHeapSize . . . . . . . . . . . . . . . . . . . 335 IndirectAddressing. . . . . . . . . . . . . . . . . . . 335 Real-TimeBehavior. . . . . . . . . . . . . . . . . . . 337 LifeSpanCharacteristics. . . . . . . . . . . . . . . . 338 MultithreadedSupport . . . . . . . . . . . . . . . . . 339 Chapter 6 Miscellaneous Topics . . . . . . . . . . . . . . . 343 Suballocators . . . . . . . . . . . . . . . . . . . . . . . . 343 MonolithicVersusMicrokernelArchitectures. . . . . . 348 ClosingThoughts . . . . . . . . . . . . . . . . . . . . . 351 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 ix

Description:
Memory allocation is a fascinating area, ripe in trade-offs and cutting-edge research. In this book, Bill Blunden manages to provide a pretty-good overview of the topic. It begins with an introduction of the lowest levels - the hardware, namely the CPU memory management unit. Then it goes on to expl
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.