ebook img

Memory management: Algorithms and implementation in C/C++ PDF

391 Pages·2002·3.981 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 implementation 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

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.