版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1操作系統(tǒng)
虛存&UnixI/O
5次課2ASystemUsingPhysicalAddressingUsedin“simple”systemslikeembeddedmicrocontrollersindeviceslikecars,elevators,anddigitalpictureframes0:1:M-1:MainmemoryCPU2:3:4:5:6:7:Physicaladdress(PA)Dataword8:...43ASystemUsingVirtualAddressingUsedinallmodernservers,desktops,andlaptopsOneofthegreatideasincomputerscience0:1:M-1:MainmemoryMMU2:3:4:5:6:7:Physicaladdress(PA)Dataword8:...CPUVirtualaddress(VA)CPUChip441004VirtualAddressingAddresstranslationConvertingavirtualaddresstoaphysicaladdressRequiresclosecooperationbetweentheCPUhardwareandtheoperatingsystemHW:thememorymanagementunit(MMU)DedicatedhardwareontheCPUchiptotranslatevirtualaddressesontheflySW:Alook-uptableStoredinmainmemoryContentsaremanagedbytheoperatingsystem5UsingMainMemoryasaCacheDRAMSRAMDisk6DesignConsiderationsLinesize?Large,sincediskbetterattransferringlargeblocksAssociativity?Full,tominimizemissrateWritethroughorwriteback?Writeback,sincecan’taffordtoperformsmallwritestodisk7PageThedataondiskispartitionedintopagesServeasthetransferunitsbetweenthediskandthemainmemoryvirtualpages(VPs)physicalpages(PPs)orpageframesPP2m-p-1PhysicalmemoryEmptyEmptyUncachedVP0VP1VP2n-p-1VirtualmemoryUnallocatedCachedUncachedUnallocatedCachedUncachedPP0PP1EmptyCached0N-1M-10Virtualpages(VPs)storedondiskPhysicalpages(PPs)cachedinDRAM8PageAttributesunallocatedallocatedcacheduncached9PageTableOsmaintainsapagetableforeachallocatedpageofvirtualmemoryAPageTableEntry(PTE)MappingfromavirtualpagetoitscorrespondingphysicalpageifthevirtualpageiscachedSpecifiesthediskaddresstostorethevirtualpagewhichisuncachedOScanuseittoretrieveinformation10PageTableNULLMemoryresidentpagetable(physicalpageordiskaddress)PhysicalMemoryDiskStorage(swapfileorregularfilesystemfile)Valid1101111000VirtualPageNumberPTE0PTE9PP0PP5VP4VP1VP211PageHitsMemoryAddressTranslation:HardwareconvertsvirtualaddressestophysicaladdressesviaanOS-managedlookuptable(pagetable)CPU0:1:N-1:0:1:P-1:PageTableDiskVirtualAddressesPhysicalAddresses12PageFaultsPagetableentryindicatesvirtualaddressnotinmemoryOSexceptionhandlerinvokedtomovedatafromdiskintomemorycurrentprocesssuspends,otherscanresumeOShasfullcontroloverplacement,etc.13PageFaultsDemandpagingCPUMemoryPageTableDiskVirtualAddressesPhysicalAddressesCPUMemoryPageTableDiskVirtualAddressesPhysicalAddressesBeforefaultAfterfault14ServicingaPageFaultProcessorSignalsControllerReadblockoflengthPstartingatdiskaddressXandstorestartingatmemoryaddressYdiskDiskdiskDiskMemory-I/ObusProcessorCacheMemoryI/OcontrollerReg(1)InitiateBlockRead15ServicingaPageFaultReadOccursDirectMemoryAccess(DMA)UndercontrolofI/OcontrollerdiskDiskdiskDiskMemory-I/ObusProcessorCacheMemoryI/OcontrollerReg(2)DMATransfer16ServicingaPageFaultI/OControllerSignalsCompletionInterruptprocessorOSresumessuspendedprocessdiskDiskdiskDiskMemory-I/ObusProcessorCacheMemoryI/OcontrollerReg(3)ReadDoneSimplifyMemoryManagementKeyidea:eachprocesshasitsownvirtualaddressspaceItcanviewmemoryasasimplelineararrayVirtualAddressSpaceforProcess1:PhysicalAddressSpace(DRAM)0N-1(e.g.,read-onlylibrarycode)VirtualAddressSpaceforProcess2:VP1VP2...0N-1VP1VP2...PP2PP6PP8...0M-1AddresstranslationSimplifyingLinkingLinkingEachprogramhassimilarvirtualaddressspaceCode,stack,andsharedlibrariesalwaysstartatthesameaddressKernelvirtualmemoryMemory-mappedregionforsharedlibrariesRun-timeheap(createdbymalloc)Userstack(createdatruntime)Unused0%esp
(stackpointer)Memoryinvisibletousercodebrk0xc00000000x080480000x40000000Read/writesegment(.data,.bss)Read-onlysegment(.init,.text,.rodata)LoadedfromtheexecutablefileSimplifyingLoadingLoadingexecve()allocatesvirtualpagesfor.textand.datasections
(createsPTEsmarkedasinvalid(uncached))The.textand.datasectionsarecopied,pagebypage,ondemandbythevirtualmemorysystemKernelvirtualmemoryRun-timeheap(createdbymalloc)Userstack(createdatruntime)Unused0%esp
(stackpointer)Memoryinvisibletousercode0xc00000000x080480000x40000000Read/writesegment(.data,.bss)Read-onlysegment(.init,.text,.rodata)LoadedfromtheexecutablefileSimplifyMemoryallocationMemoryallocationEachvirtualpagecanbemappedtoanyphysicalpageAvirtualpagecanbestoredindifferentphysicalpagesatdifferenttimesVirtualAddressSpaceforProcess1:PhysicalAddressSpace(DRAM)0N-1(e.g.,read-onlylibrarycode)VirtualAddressSpaceforProcess2:VP1VP2...0N-1VP1VP2...PP2PP6PP8...0M-1AddresstranslationSimplifyMemorySharingSharingcodeanddataamongprocessesMapvirtualpagestothesamephysicalpage
(e.g.PP6)VirtualAddressSpaceforProcess1:PhysicalAddressSpace(DRAM)0N-1(e.g.,read-onlylibrarycode)VirtualAddressSpaceforProcess2:VP1VP2...0N-1VP1VP2...PP2PP6PP8...0M-1AddresstranslationIsolateAddressSpaceExtendPTEswithpermissionbitsThesamephysicalpagehasdifferentpermissionfordifferentprocessProcessi:AddressREADWRITEPP6YesNoPP4YesYesPP2YesVP0:VP1:VP2:???Processj:YesSUPNoNoYesAddressREADWRITEPP9YesNoPP6YesYesPP11YesYesSUPNoYesNoVP0:VP1:VP2:PhysicalAddressSpacePP2PP4PP6PP8PP9PP11IsolateAddressSpaceEverytranslationwillchecktheseifviolated,sendprocessSIGSEGV(segmentationfault)Processi:AddressREADWRITEPP6YesNoPP4YesYesPP2YesVP0:VP1:VP2:???Processj:YesSUPNoNoYesAddressREADWRITEPP9YesNoPP6YesYesPP11YesYesSUPNoYesNoVP0:VP1:VP2:PhysicalAddressSpacePP2PP4PP6PP8PP9PP1124AddressTranslationProcessorHardwareAddrTransMechanismfaulthandlerMainMemorySecondarymemoryaa'
pagefaultphysicaladdressOSperformsthistransfer(onlyifmiss)virtualaddresspartoftheon-chipmemorymgmtunit(MMU)25AddressTranslationvirtualpagenumberpageoffsetvirtualaddressphysicalpagenumberpageoffsetphysicaladdress0p–1addresstranslationpm–1n–10p–1pNoticethatthepageoffsetbitsdon'tchangeasaresultoftranslation26AddressTranslationviaPageTablevirtualpagenumber(VPN)pageoffsetvirtualaddressphysicalpagenumber(PPN)pageoffsetphysicaladdress0p–1pm–1n–10p–1ppagetablebaseregister(PTBR)ifvalid=0thenpagenotinmemoryvalidphysicalpagenumber(PPN)accessVPNactsastableindex27PageHitVA:virtualaddressPTEA:pagetableentryaddressPTE:pagetableentryPA:physicaladdressMMUCache/MemoryPADataCPUVACPUChipPTEAPTE123451)ProcessorsendsvirtualaddresstoMMU2-3)MMUfetchesPTEfrompagetableinmemory4)MMUsendsphysicaladdresstocache/memory5)Cache/memorysendsdatawordtoprocessor28PageFaultsMMUCache/MemoryCPUVACPUChipPTEAPTE12345DiskPagefaulthandlerVictimpageNewpageException671)ProcessorsendsvirtualaddresstoMMU2-3)MMUfetchesPTEfrompagetableinmemory4)Validbitiszero,soMMUtriggerspagefaultexception5)Handleridentifiesvictim(and,ifdirty,pagesitouttodisk)6)HandlerpagesinnewpageandupdatesPTEinmemory7)Handlerreturnstooriginalprocess,restartingfaultinginstruction29IntegratingCachesandVMCPUTrans-lationCacheMainMemoryVAPAmisshitdata30IntegratingCachesandVMMostCaches“PhysicallyAddressed”AccessedbyphysicaladdressesAllowsmultipleprocessestohaveblocksincacheatsametimeAllowsmultipleprocessestosharepagesCachedoesn’tneedtobeconcernedwithprotectionissuesAccessrightscheckedaspartofaddresstranslation31VACPUMMUPTEAPTEPADataMemoryPAPAmissPTEAPTEAmissPTEAhitPAhitDataPTEL1cacheCPUChipIntegratingCachesandVM32SpeedingupTranslationwithaTLB“TranslationLookasideBuffer”(TLB)SmallhardwarecacheinMMUMapsvirtualpagenumberstophysicalpagenumbers33MMUCache/MemoryPADataCPUVACPUChipPTE1245TLBVPN3TLBHitATLBhiteliminatesamemoryaccess34TLBMissMMUCache/MemoryPADataCPUVACPUChipPTE1256TLBVPN4PTEA3ATLBmissincursanadditionalmemoryaccess(PTE)
Fortunately,TLBmissesarerare.Why?35SpeedingupTranslationwithaTLB36AddressTranslationvirtualpagenumberpageoffsetvirtualaddressphysicalpagenumberpageoffsetphysicaladdress0p–1addresstranslationpm–1n–10p–1pTLBtagTLBindexCachetagCacheindexCacheoffset37SpeedingupTranslationwithaTLBvirtualaddressvirtualpagenumberpageoffsetn–10p–1pvalidphysicalpagenumbertagvalidtagdatadata=cachehittagindex=TLBhitTLBCache...physicaladdressphysicalpagenumberpageoffset38Multi-LevelPageTablesGiven:X86:32-bitaddressspace
4KB(212)pagesize,4-bytePTEX86-64:48-bitaddressspace
4KB(212)pagesize,8-bytePTEProblem:X86:Wouldneeda4MBpagetable!220*4bytes(20bit=32bit–12bit)X86-64:Wouldneeda512GBpagetable!236*8bytes(36bit=48bit–12bit)39Multi-LevelPageTablesCommonsolutionmulti-levelpagetablese.g.,2-levelpagetableLevel1table:1024entries,eachofwhichpointstoaLevel2pagetable.Level2table:1024entries,eachofwhichpointstoapageLevel1Table...Level2Tables40Multi-LevelPageTablesLevel1pagetable...Level2pagetablesVP0...VP1023VP1024...VP2047Gap0PTE0...PTE1023PTE0...PTE10231023nullPTEsPTE10231023unallocatedpagesVP9215Virtualmemory(9-1K)nullPTEsPTE0PTE1PTE2(null)PTE3(null)PTE4(null)PTE5(null)PTE6(null)PTE7(null)PTE82KallocatedVMpagesforcodeanddata6KunallocatedVMpages1023unallocatedpages1allocatedVMpageforthestack32bitaddresses,4KBpages,4-bytePTEs41Multi-LevelPageTables42PDEPDBRphysicaladdressofpagetablebase(ifP=1)physicaladdressofpagebase(ifP=1)physicaladdressofpagedirectorywordoffsetintopagedirectorywordoffsetintopagetablepagedirectorypagetableVPN110VPO1012VPN2VirtualaddressPTEPPNPPO2012PhysicaladdresswordoffsetintophysicalandvirtualpagePagetablesTranslation43Case1/1:pagetableandpagepresent.MMUAction:MMUbuildphysicaladdressandfetchdataword.OSactionnoneVPNVPN1VPN2PDEPDBRPPNPPO201220VPO12p=1PTEp=1DatapagedataPagedirectoryPagetableMemDiskTranslatingwiththeP6pagetables(case1/1)44Case1/0:pagetablepresentbutpagemissing.MMUAction:pagefaultexceptionhandlerreceivesthefollowingargs:VAthatcausedfaultfaultcausedbynon-presentpageorlevelprotectionviolationread/writeuser/supervisorVPNVPN1VPN2PDEPDBR20VPO12p=1PTEPagedirectoryPagetableMemDiskDatapagedatap=0TranslatingwiththeP6pagetables(case1/0)45OSAction:Checkforalegalvirtualaddress.ReadPTEthroughPDE.Findfreephysicalpage(swappingoutcurrentpageifnecessary)ReadvirtualpagefromdiskandcopytovirtualpageRestartfaultinginstructionbyreturningfromexceptionhandler.VPNVPN1VPN2PDEPDBR20VPO12p=1PTEp=1PagedirectoryPagetableDatapagedataPPNPPO2012MemDiskTranslatingwiththeP6pagetables(case1/0,cont)46Case0/1:pagetablemissingbutpagepresent.Introducesconsistencyissue.potentiallyeverypageoutrequiresupdateofdiskpagetable.Linuxdisallowsthisifapagetableisswappedout,thenswapoutitsdatapagestoo.VPNVPN1VPN2PDEPDBR20VPO12p=0PTEp=1PagedirectoryPagetableMemDiskDatapagedataTranslatingwiththeP6pagetables(case0/1)47Case0/0:pagetableandpagemissing.MMUAction:pagefaultexceptionVPNVPN1VPN2PDEPDBR20VPO12p=0PTEPagedirectoryPagetableMemDiskDatapagedatap=0TranslatingwiththeP6pagetables(case0/0)48OSaction:swapinpagetable.restartfaultinginstructionbyreturningfromhandler.Likecase0/1fromhereon.VPNVPN1VPN2PDEPDBR20VPO12p=1PTEPagedirectoryPagetableMemDiskDatapagedatap=0TranslatingwiththeP6pagetables(case0/0,cont)49Corei7The64-bitNehalemmicroarchitectureCurrentsupport48-bit(256TB)virtualaddressspaceand52-bit(4PB)physicaladdressspaceCompatibilitymodesupport32-bit(4GB)virtualandphysicaladdressspacesCorei7Summery...50...CPUVPNVPO3612432Virtualaddress(VA)L1TLB(16sets,4entries/set)PPNPPO4012TLBmissTLB
hitphysicaladdress
(PA)result32/64CT4066L2,L3,and
mainmemoryL1d-cache
(64sets,8lines/set)L1hitL1missTLBTTLBICorei7AddressTranslationCICOVPN1VPN2VPN3VPN4PTEPTEPTEPTECR3PageTables999951PagetablephysicalbaseaddrUnusedGPSACDWTU/SR/WP=1XDDisableorenableinstructionfetchesBaseaddr
40mostsignificantbitsofbaseaddressofchildpage
table(forcespagetablestobe4KBaligned)Gglobalpage(don’tevictfromTLBontaskswitch)PSPagesizeeither4K(0)or4M(1)(definedforLevel1
PTEsonly)AReferencebit(setbyMMUonreadsandwrites,cleared
bysoftware)CDCachedisabled(1)orenabled(0)forchildpagetableWTWrite-throughorwrite-backcachepolicyU/SUserorsupervisor(kernel)modeaccesspermissionR/WRead-onlyorread-writeaccesspermissiomPChildpagetablepresentinmemory(1)ornot(0)5112119876543210AvailableforOS(pagetablelocationinsecondarystorage)P=0Level1,Level2andLevel3PageTableEntryUnused52XD626352PagetablephysicalbaseaddrUnusedGDACDWTU/SR/WP=1XDDisableorenableinstructionfetchesBaseaddr
40mostsignificantbitsofbaseaddressofchildpage
table(forcespagetablestobe4KBaligned)Gglobalpage(don’tevictfromTLBontaskswitch)DDirtybit(SetbyMMUonwrites,clearedbysoftware)AReferencebit(setbyMMUonreadsandwrites,cleared
bysoftware)CDCachedisabled(1)orenabled(0)forchildpagetableWTWrite-throughorwrite-backcachepolicyU/SUserorsupervisor(kernel)modeaccesspermissionR/WRead-onlyorread-writeaccesspermissiomPChildpagetablepresentinmemory(1)ornot(0)5112119876543210AvailableforOS(pagetablelocationinsecondarystorage)P=0Level4PageTableEntryUnused52XD626353Physical
address
ofL1PTphysicaladdressofpage512GB
region
perentryL1PT
Pageglobal
directory12Virtualaddress4012PhysicaladdressOffsetintophysicalandvirtualpagePagetablesTranslationVPN1VPN2VPN3VPN4VPO9999PPOL1PTECR31GB
region
perentryL2PT
Pageupper
directoryL1PTE2MB
region
perentryL3PT
Pagemiddle
directoryL1PTE4KB
region
perentryL4PT
Page
directoryL1PTEPPO1240999940404040CuteTrickforSpeedingUpL1AccessObservationBitsthatdetermineCIidenticalinvirtualandphysicaladdressCanindexintocachewhileaddresstranslationtakingplaceGenerallywehitinTLB,soPPNbits(CTbits)availablenext“Virtuallyindexed,physicallytagged”CachecarefullysizedtomakethispossiblePhysicaladdress(PA)CTCO366CI6Virtualaddress(VA)VPNVPO3612PPOPPNAddressTranslationNoChangeCIL1CacheCTTagCheck55ProcessorpackageCorei7MemorySystemCorex4RegistersInstructionfetchL1d-cache32KB,8-wayL1i-cache
32KB,8-wayL2unifiedcache
256KB,8-wayL3unifiedcache
8MB,16-way
(sharedbyallcores)MMU
(addrtranslation)L1d-TLB
64entries,4-wayL1i-TLB
64entries,4-wayL2unifiedTLB
512entries,4-wayQuickPathinterconnect
4links@25.6GB/s
102.4GB/stotalDDR3memorycontroller
3x64bit@10.66GB/s
32GB/stotal(sharedbyallcores)MainmemoryToother
coresToI/O
bridge56ExampleIna32-bitmachinewesubdividethevirtualaddressinto4piecesasfollows:Weusea3-levelpagetable,suchthatthefirst8bitsareforthefirstlevelandsoon.Physicaladdressesare44bitsandthereare4protectionbitsperpage8bit8bit4bit12bit57ExamplePleasegivethepagetableforaprocessthathasacodesegmentof48Kstartingataddress0x1000000,adatasegmentof600Kstartingataddress0x80000000andastacksegmentof64Kstartingataddress0xf0000000andgrowingupward(towardshigheraddresses)?58Example48Kstartingataddress0x1000000address:10,00,0,000to10,00,b,fff48K:12pages600Kstartingataddress0x80000000address:80,00,0,000to80,09,5,fff600K:150pages64Kstartingataddress0xf0000000address:f0,00,0,000tof0,00,f,fff64K:16pages59Example…f0…80…10………00…09…00……00…b…0ff…0ff…0F…b…060Process-specificdatastructures
(e.g.taskandmmstructs,pagetables,kernelstack)PhysicalmemoryKernelcodeanddataUserstackMemorymappedregion
forsharedlibrariesRun-timeheap(viamalloc)Uninitializeddata(.bss)Initializeddata(.data)Programtext(.text)Kernel
virtual
memoryProcess
virtual
memoryDifferentfor
eachprocessIdenticalfor
eachprocess%espbrkx08048000(32)
x40000000(64)LinuxVirtualMemorySystem61pgd:pagedirectoryaddressvm_prot:read/writepermissionsforthisareavm_nextvm_nexttask_structmm_structpgdmmmmapvm_area_structvm_endvm_protvm_startvm_endvm_protvm_startvm_endvm_protvm_nextvm_startprocessvirtualmemorytextdatasharedlibraries00x080480000x0804a0200x40000000vm_flagsvm_flagsvm_flagsLinuxorganizesVMasacollectionof“areas”62vm_flagssharedwithotherprocessesorprivatetothisprocessLinuxorganizesVMasacollectionof“areas”vm_nextvm_nexttask_structmm_structpgdmmmmapvm_area_structvm_endvm_protvm_startvm_endvm_protvm_startvm_endvm_protvm_nextvm_startprocessvirtualmemorytextdatasharedlibraries00x080480000x0804a0200x40000000vm_flagsvm_flagsvm_flags63IstheVAlegal?i.e.isitinanareadefinedbyavm_area_struct?ifnotthensignalsegmentationviolation(e.g.(1))vm_area_structvm_endr/ovm_nextvm_startvm_endr/wvm_nextvm_startvm_endr/ovm_nextvm_startprocessvirtualmemorytextdatasharedlibraries0writereadread123Linuxpagefaulthandling64Istheoperationlegal?i.e.,cantheprocessread/writethisarea?ifnotthensignalprotectionviolation(e.g.,(2))IfOK,handlefaulte.g.,(3)Linuxpagefaulthandlingvm_area_structvm_endr/ovm_nextvm_startvm_endr/wvm_nextvm_startvm_endr/ovm_nextvm_startprocessvirtualmemorytextdatasharedlibraries0writereadread12365CreationofnewVMareadonevia“memorymapping”createnewvm_area_structandpagetablesforareaMemorymapping66Areacanbebackedby(i.e.,getitsinitialvaluesfrom)regularfileondisk(e.g.,anexecutableobjectfile)initialpagebytescomefromasectionofafileanonymousfile(e.g.nothing)Firstfaultwillallocateaphysicalpagefullof0’s(demand-zeropage)Oncethepageiswrittento(dirtied),itislikeanyotherpageMemorymapping67Dirtypagesarecopiedbackandforthbetweenmemoryandaspecialswapfile.Memorymapping68Keypoint:novirtualpagesarecopiedintophysicalmemoryuntiltheyarereferenced!knownas“demandpaging”crucialfortimeandspaceefficiencyDemandPaging69Torunanewprogrampinthecurrentprocessusingexec():Freeallvm_area_structsandpagetablesforoldareas.kernelcode/dataMemorymappedregionforsharedlibrariesruntimeheap(viamalloc)programtext(.text)initializeddata(.data)uninitializeddata(.bss)stackforbidden0%espprocessVMbrk0xc0000000physicalmemorysameforeachprocessprocess-specificdatastructures(pagetables,taskandmmstructsKernalstack)kernelVM.data.textpdemand-zerodemand-zerolibc.so.data.textExec()revisited70Torunanewprogrampinthecurrentprocessusingexec():createnewvm_area_structsandpagetablesfornewareas.stack,bss,data,text,sharedlibs.Exec()revisitedkernelcode/dataMemorymappedregionforsharedlibrariesruntimeheap(viamalloc)programtext(.text)initializeddata(.data)uninitializeddata(.bss)stackforbidden0%espprocessVMbrk0xc0000000physicalmemorysameforeachprocessprocess-specificdatastructures(pagetables,taskandmmstructsKernalstack)kernelVM.data.textpdemand-zerodemand-zerolibc.so.data.text71Torunanewprogramp
inthecurrentprocessusingexec():createnewvm_area_structs
andpagetablesfor
newareas.textanddatabackedbyELFexecutableobjectfile.bssandstackinitializedtozero.Exec()revisitedkernelcode/dataMemorymappedregionforsharedlibrariesruntimeheap(viamalloc)programtext(.text)initializeddata(.data)uninitializeddata(.bss)stackforbidden0%espprocessVMbrk0xc0000000physicalmemorysameforeachprocessprocess-specificdatastructures(pagetables,taskandmmstructsKernalstack)kernelVM.data.textpdemand-zerodemand-zerolibc.so.data.text72Torunanewprogrampinthecurrentprocessusingexec():setPCtoentrypointin.textLinuxwillswapincodeanddatapagesasneeded.Exec()revisitedkernelcode/dataMemorymappedregionforsharedlibrariesruntimeheap(viamalloc)programtext(.text)initializeddata(.data)uninitializeddata(.bss)stackforbidden0%espprocessVMbrk0xc0000000physicalmemorysameforeachprocessprocess-specificdatastructures(pagetables,taskandmmstructsKernalstack)kernelVM.data.textpdemand-zerodemand-zerolibc.so.data.text73void*mmap(void*start,int
len,int
prot,
intflags,int
fd,intoffset)Maplenbytesstartingatoffsetoffset
ofthe
filespecifiedbyfiledescriptionfd,preferablyataddressstart(usually0fordon’tcare).prot:MAP_READ,MAP_WRITEflags:MAP_PRIVATE,MAP_SHAREDReturnapointertothemappedareaUser-levelmemorymappingvoid*mmap(void*start,int
len,
int
prot,int
flags,int
fd,int
offset)len
bytesstart(oraddresschosenbykernel)ProcessvirtualmemoryDiskfilespecifiedbyfiledescriptorfdlen
bytesoffset(bytes)00User-levelmemorymapping75Example:fastfilecopyUsefulforapplicationslikeWebserversthatneedtoquicklycopyfiles.mmapallowsfiletransferswithoutcopyingintouserspace.
User-levelmemorymapping76/**mmapcopy-usesmmaptocopyfilefdtostdout*/voidmmapcopy(intfd,intsize){char*bufp;
/*mapthefiletoanewVMarea*/bufp=mmap(0,size,PROT_READ,
MAP_PRIVATE,fd,0);
/*writetheVMareatostdout*/write(1,bufp,size);return;}mmap()example:fastfilecopy77intmain(intargc,char**argv){structstatstat;
/*checkforrequiredcommandlineargument*/if(argc!=2){printf(“usage:%s<filename>\n”,argv[0]);exit(0);}
/*openthefileandgetitssize*/fd=open(argv[1],O_RDONLY,0);fstat(fd,&stat);
mmapcopy(fd,stat.st_size);}mmap()example:fastfilecopy78Tocreateanewprocessusingfork:makecopiesoftheoldprocess’smm_struct,vm_area_struct,andpagetablesTwoprocessesaresharingalloftheirpages
(Atthispoint)Howtogetseparatespaceswithoutcopyingallthevirtualpagesfromonespacetoanother?“CopyOnWrite”(COW)technique.Fork()revisted79SharedObjectAnobjectwhichismappedintoanareaofvirtualmemoryofaprocessAnywritesthattheprocessmakestothatareaarevisibletoanyotherprocessesthathavealsomappedthesharedobjectintotheirvirtualmemoryThechangesarealsoreflectedintheoriginalobjectondiskSharedAreaAvirtualmemoryareathatasharedobjectismappedSharedObjectSharingRevisited:SharedObjectsProcess1mapsthesharedobjectSharedobjectPhysicalmemoryProcess1virtualmemoryProcess2virtualmemorySharingRevisited:SharedObjectsSharedobjectPhysicalmemoryProcess1virtualmemoryProcess2virtualmemoryProcess2mapsthesharedobjectNoticehowthevirtualaddressescanbedifferent82PrivateObjectAsopposetosharedobjectChangesmadetoanareamappedtoaprivateobjectarenotvisibletootherprocessesAnywritesthattheprocessmakestotheareaarenot
reflectedbacktotheobjectondisk.PrivateAreaSimilartosharedareaPrivateobject83Aprivateobjectbeginslifeinexactlythesamewayasasharedobject,withonlyonecopyoftheprivateobjectstoredinphysicalmemory.Copy-on-Write84TocreateanewprocessusingforkCopy-On-Writemakepagesofwriteableareasread-onlyflagvm_area_structfortheseareasasprivate“copy-on-write”.writesbyeitherprocesstothesepageswillcausepagefaultsfaulthandlerrecognizescopy-on-write,makesacopyofthepage,andrestoreswritepermissions.Fork()revistedPrivatecopy-on-writeobjectPhysicalmemoryProcess1virtualmemoryProcess2virtualmemoryPrivatecopy-on-writeareaSharingRevisited:PrivateCOWObjects86ForeachprocessthatmapstheprivateobjectThepagetableentriesforthecorrespondingprivateareaareflaggedasread-onlyTheareastructisflaggedasprivatecopy-on-writeSolongasneitherprocessattemptstowritetoitsrespectiveprivatearea,theycontinuetoshareasinglecopyoftheobjectinphysicalmemory.Copy-on-Write87ForeachprocessthatmapstheprivateobjectAssoonasaprocessattemptstowritetosomepageintheprivatearea,thewritetriggersaprotectionfaultThefaulthandlernoticesthattheprotectionexceptionwascausedbytheprocesstryingtowritetoapageinaprivatecopy-on-writeareaCopy-on-Write88ForeachprocessthatmapstheprivateobjectThefaulthandler
CreatesanewcopyofthepageinphysicalmemoryUpdatesthepagetableentrytopointtothenewcopyRestoreswritep
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 紙娃娃課件教學(xué)課件
- 2024年古建筑亮化保護(hù)工程協(xié)議
- 2024年地?cái)偨?jīng)濟(jì)創(chuàng)業(yè)項(xiàng)目經(jīng)營(yíng)權(quán)轉(zhuǎn)讓協(xié)議
- 2024個(gè)人助學(xué)貸款合作合同
- 2024年度4S店汽車銷售與金融投資合同
- 2024丙公司與丁公司就煤炭廢料處理服務(wù)的合同
- 2024年度膩?zhàn)赢a(chǎn)品生產(chǎn)線改造合同
- 2024年己方區(qū)塊鏈技術(shù)研究與應(yīng)用合作協(xié)議
- 2024年度建筑工程安全防護(hù)合同
- 2024年度新能源汽車推廣銷售合同
- 中藥材技術(shù)創(chuàng)新中心的可行性研究報(bào)告
- 有機(jī)合成化學(xué)(山東聯(lián)盟)知到章節(jié)答案智慧樹2023年青島科技大學(xué)
- 商標(biāo)法題庫(kù)1(答案)
- TMF自智網(wǎng)絡(luò)白皮書4.0
- 電視劇《國(guó)家孩子》觀影分享會(huì)PPT三千孤兒入內(nèi)蒙一段流淌著民族大愛(ài)的共和國(guó)往事PPT課件(帶內(nèi)容)
- 所水力除焦設(shè)備介紹
- 改革開放英語(yǔ)介紹-課件
- pet考試歷屆真題和答案
- 《企業(yè)員工薪酬激勵(lì)問(wèn)題研究10000字(論文)》
- 大學(xué)英語(yǔ)三級(jí)B真題2023年06月
- GB/T 7909-2017造紙木片
評(píng)論
0/150
提交評(píng)論