Inter-OfficeMemorandumToMBrown,TaftDateOctober8,1982FromKollingLocationPARC/CSLSubjectInternalFunctioningofAlpine'sFilePageMgrFileDoc>FilePageMgrInternals.tiogaXEROXOverviewThismemodescribestheinternalfunctioningofFilePageMgrandsupersedesallpreviousmemosonthissubject.Itisbasedonmemosbymyself,MarkBrown,andEdTaft.FilePageMgrisasimplefilesystemthatisacomponentofAlpine.ItprovidesfilesatroughlythesamelevelofabstractionasPilotdoes(noaccesscontrol,notransactions,etc).ItsitsjustabovePilot,inordertoisolatetherestofAlpinefromPilot.FilePageMgrisimplementedusingmainlythePilotSpaceandFileinterfaces;sinceSpaceandFilearegoingtochangedrasticallyinthemoderatelynearfuture,FilePageMgr'simplementationnowisquickanddirty.FilePageMgrdependsmainlyonthePilotswapperfordatatransfers,whileretainingtheabilitytoforcewrites,startwritebehinds,andrequestreadaheads.DataaccessthroughFilePageMgrisinthemappedstyleofVMDefs:FilePageMgrisresponsiblefortheassignmentofvirtualmemorytoportionsoffiles(unlikePilotwhichmakestheclientresponsibleforthis).ThemajordeparturefromVMDefsisthatFilePageMgrdealswitharunofpagescalledaVMPageSet;therearerestrictionsonthemaximumsizeofaVMPageSet;asaresult,itwillbeinconvenientforclientsofFilePageMgrtomanipulatedatastructuresthatoverlappageboundaries.GeneralCommentsFilePageMgrisrobust.Itexpectstoseeanddealcouthlywithsuchthingsasmultipleclientstryingtoaccessthesamepageandpagerequestspastthecurrenteof.Other"interesting"concurrentoperationswillhappenwithoutthingsbreaking,althoughitisexpectedthattheupperlevelsofAlpinemaynotactuallyberequestingthosetypesofconcurrency.Forexample,concurrentSetSizesforagivenfilewillresultinbothbeingdone,buttheorderisundetermined.Similarlyapagerequestforapageaftertheoldeofwhenafileisbeingconcurrentlylengthenedwilleithergetthepageorwillgetapasteoferror,dependingonwhichrequestgetstothefilefirst.WehaveattemptedtooptimizeFilePageMgr'simplementationfortheclientusagethatweexpect.Aclientdoing"strangethings",suchasmultipleprocessestouchingafileindifferentmodes,willlikelyexperienceperformancedegradation,butdatawillnotbelost.1paC  q ]ar]aq+]ar6]a;R<q Y~rY~q+Y~s6Y~r:Y~;Y~q UrU) !#) q QrQ&t{Ju @)s ; #PX %r'J;(1; s/k;0;2 8:@FDF :VqT5;#'p,8.1" 7 wY"#%,:-3=4:5=>CF 5Y % a 0$1)/+( 26b7:<@D9E 3 QD" +, 48='?BF 2  w?$"*$(*/Y 6 7:t AE 0c   ${'+ 38g<>AD+ .  W $&|).=1A4:-<AD +f c $ "q$*Q-/m68 >@ GR ) d ^U!&(h+n0837< >B] ( Ethz!Z'(+ 37g:;>@kDRHe &p p #%,|/r1u2 ;-=&>CDG $ OL "{$) +Q.V 47fBC E 5   #/&4(+T-Ev)TVm$qThebasicunitofvmwithwhichFilePageMgrdealsisaChunk,anumberofcontiguouspagesofvm.(TheFilePageMgrclientdealswithaVMPageSet,whichcorrespondstoaChunkorportionofaChunk,butwhichdoesnotgivetheclientaccesstoFilePageMgrimplementationdetails.)TherearethreemaintypesofChunks:normal(forfiledatapages),log(forAlpine'slogfiledatapages),andleader(forfileleaderpages).EachofthesetypesofChunkshasanassociatedlrulistwhichismanagedbyFilePageMgr.IfFilePageMgrneedstoreclaimvm,ittakesthelruChunkoftheappropriatetype.ThesizeofeachtypeofChunkisfixedforagivenFilePageMgrinstance.AnAlpinefilehasaleaderpage,whichispage0;wedon'teverexpecttheleaderpagetotakeupmorethanonediskpagebecauseadditionalfilepropertiesbelongnotintheleaderpage(s)butratherinadistributeddatabasesomewhere.FilePageMgr'sclientsaccesstheleaderpageinoperationsseparatefromoperationsonthedatapagesofthefile;thisisthereasonforkeepingtheChunksforleaderpagesseparatefromtheChunksfornon-leaderpages,sothatwecanavoidunnecessaryIO.Thereisanpossibleintegrityproblemconcerningtheuseofmulti-pageChunks.Whenanypageofaspaceisdirtied,thesubsequentPilotwritewritesouttheentirespace.Thiswouldleadtoaproblemshouldacrashoccurduringthewriteofapagewhichhasnotbeendirtied.BecausePilot'suniformswapunitscurrentlyhaveperformanceandimplementationproblems,wehaveavoidedsolvingthisproblembytheuseofonepagelonguniformswapunitsunderlyingtheChunks.Instead,eachnormalChunkiscurrentlyaleafspaceanditsintegrityispreservedbythebackupsystem.EachlogChunkhasregularonepageswapunitsunderlyingit.EachleaderChunkisonepagelong.ThereiscurrentlynowaytogetPilottoswapoutamulti-pagespacewhileguaranteeingthatthewritesoccurinascendinglogicalpageorder.ThelogChunksweresetupwiththeirregularunderlyingonepageswapunitssothatMark'sdesignofthelogimplementationcanhandlelogwritesinsuchawayastoavoidthisconsistencyproblem.FilePageMgr'sreleaseroutinesarecalledwithparametersthattellFilePageMgrwhetherornottheclientisdoingsequentialorrandomIO,andiftheChunkhasbeendirtied.FilePageMgrusesthisinformationtodecidewheretoputtheChunksonitslrulists,andtohandlewritebehindforsequentialIO.Religiousstatement:iftheclientsofFilePageMgrrespectthepageCountsinthereturnedVMPageSet,theywillnevergetanaddressfault.OnestickypointintheimplementationistheresultofPilot'srestrictionsonchangingthelengthofamappedfile.Thisleadstothefollowingrestriction:SetSizereturnsanErrorifthereisaChunkwithusecount<>0whichextendsbeyondeitherthenewortheoldeof.DataStructuresandMonitorsAChunkhasassociatedwithitatleastthisinformation:fileHandle:neededwhentakingChunksoffthelrulist.useCount:incrementedby1foreachcurrentuser.startingPageNumberinfile.prev,nextlinksforlrulistofChunks.infofortheredblackChunktreeofthefiletowhichthisChunkiscurrentlymapped.defWritePending:ifthisisset,thentheChunkneedstobegiventoaprocessfordeferredwriting.AnyChunk,mappedorunmapped,inanlrulistornot,regardlessofitsuseCountmaybeinthehandsofoneormoreprocessesfordeferredwriting.(Theunmappedstateisduetothechunkbeing"remapped"andcausesnoharm.)InadditiontothetypesofChunksmentionedpreviously,Chunksofthefollowingtypesexist:2s a N=l &*o+-23F8}:B A>EF _ 1 T z (s,u 4 56;O=ACD ^= fnF#$ , 6ADF^ W B  (U.158;:< @FCH# U E~j#&(+-147:=C TQ {Sd &$),1 314 <B R 4=!$& -O26 <>ADG Q L!RP#&A+-2R6P;?vBGR O[ 9! ) L oj;! (+F-/ 6z<@CPFHe J[ 7 !#$(+W-169=ABD  HtNR!#%(a,/15:?D7 G  <S #& 069<BF Eepk?!&[)-5 4%6 U04 !@"&]() 048A @dC0E = U"d%N',0@2p47;? F ;o /(!t#*%' 14:8;? @CE G 9 Z . 6o e"% ,/1 :?[AC{E 4 I BT!b"%)+/:4i <?rB 3! =!#%(+-F15J9<0 B / Hc!$ )Z. 0q 79<A .! r * r "$[&*,~0 79?BHFHe )!B>\#v */46:;;?5@AFt 'y a8R_`!J%6'*,G.1u ! ^  s kw yk vkskkn L" $  p9!&2(e*, 9 !'$X)! i +;9 5-L!#Y%(")-056}<ABE` x QB!H 5<V7#u*x 2G79g;B)Ev) TVm$WtreeHeader(forredblackChunktreesoffiles),lruHeader,andostGeneral(forusebytheredblacktreepackageforitsownpurposes).ThisishowChunksareallocatedanddeallocated:ostGeneral:duringinitialization,twoChunksoftypeostGeneralarepermanentlyallocatedforusebytheredblacktreepackage.lruHeader:duringinitialization,threeChunksoftypelruHeaderarepermanentlyallocatedforusebythelrulistsmanager.normal,log,leader:duringinitialization,afixednumberofChunksofthesetypesarepermanentlyallocatedtoFilePageMgr'svmpool.treeHeader:theseChunksareallocatedanddeallocatedasthesystemruns.Furtherdetailsbelow.AFPMFileObjecthasassociatedwithitatleastthisinformation:fileHandle:immutableonceaFPMFileObjecthasbeencreated.chunkTable:redblacktreeofalltheChunkscurrentlymappedtothisfile.nMappedChunks.fileDataSize:sizeonthedisk,notcountingtheleaderpage.exists:whetherornotthisfileexistsonthedisk.nDefWriteChunks:numberofChunkswaitingfordeferredwrite.nLruListChunks:usedtoprotectagainstaclientfloodingcache.AFPMFileObjectisallocatedwhenafileisfirsttouchedbyFilePageMgr(i.e.FilePageMgrispassedaFileMap.HandlesuchthatGetFilePageMgrHandle=NIL).ItisdeallocatedbythegarbagecollectorafterFilePageMgrcallsFileMap.UnregistertounregisterthehandlewhentherearenolongeranyChunksmappedtothatfile.WhentheFPMFileObjectisallocated,theChunkoftypetreeHeaderforitschunkTableisalsoallocated;thetreeHeaderChunkisdeallocatedbythegarbagecollectorwhentheFPMFileObjectgoesaway.LRUlistsThelrulistsofChunksaremaintainedbytheFilePageMgrLruImplmodule.Anlrulistisadoubly-linkedcircularlist.AlistcontainsthepermanentlyallocatedlruHeaderChunkandzeroormoreotherChunks,thelatterallofthesametype:normal,leader,orlog.Thereisonesuchlistforeachtype,makingthreelistsinall.Allthreelistsareprotectedbythesinglemodulemonitor,FilePageMgrLruImpl,whichisdiscussedinmoredetailbelow.WhennoprocessisinsideofanyFilePageMgrmonitor,itistruethataChunkisonanlrulistiffithasuseCount=0.TheChunksonanlrulistmaybemappedorunmapped;exceptduringstatetransitions,allunmappedChunksareonanlrulist.ChunktablesThereisoneChunktableperFPMFileObject.AChunktableconsistsofatreeHeaderChunkandared-blacktreeofChunksattachedtoit.EveryChunkmappedtoafile,regardlessoftheChunk'suseCount,isinthefile'schunkTable.ManipulationofChunktablesisperformedthroughtheRedBlackTreepackage'sOrderedSymbolTableinterfaceandprotectedbyitsmodulemonitor,RedBlackTreeImpl,whichisdiscussedinmoredetailbelow.MonitorsTheFilePageMgrdatastructurescontainasingletypeofmonitor,theFPMFileObjectobjectmonitor.OneFPMFileObjectobjectmonitorisbuiltintoeachFPMFileObject.Inaddition,theFilePageMgrimplementationcontainsthemodulemonitorFilePageMgrLruImpl.Monitorscanonlybenested3s b! ny!$=%) 0}3+ :<?3A$CzE `yp ]'38N!h$ Y !M#) *- 47 ?DG X, ~( V 7 $g)|+3.B47! ?DG T ; S2_q& '/*/1{68;;?JA Qt# . O E7$' .027r;h@~D Kw yK UK s KK !"r$ '0) I: pV ),/k G 7V!$ )7/4a68 E D> W h"#'*4.W B`r#%(  @"O %),.1 ?B4!&('Q+0 ;# 2"#%'8)/$1 9 ; CE) :H -0468< ?ADn 8i +!f-/ 658=sATE G 6"%),\ 637 =@+DF 5R  ) #> ),- 3:79 @6B Dn 3=Q "$%>w / us -9:4 &(+`8?6AD<FHe +\ {%!d&)) 1#6={BDG )Ihm!f#(%)-52S68;?AcDGQ ( ) "%m'+V.0y68:>C &fRs&'+v/T4c8:?A E"F $ g"#(j)+-/23597=?ADy #@!(-!14 ;=Dy !p*w Gms O( )+\/3Q8O:;- BHF ! CP"$h&*u.4C57 9 @AD! zak % .n0W596:AG/   *N0Y3u9C +N$W&)-dw s e sX y%7&@* ,.4 6K ?C  bj"#'+)- 79\?A` 5 !#) 7T=_@C5E?v) DTVm$% CTVm$-inthisorder:FPMFileObjectmonitorRedBlackTreepackage'sRedBlackTreeImplFilePageMgrLruImplmonitorFileMap'sFileObjectmonitorNoprocesseverholdsmorethanoneFPMFileObjectmonitoratatime.Aprocessinamonitorinthislistdoesnotnecessarilyholdallofthe"ancestor"monitorsinthelist.ThevariousmonitorscontrolreadandwriteaccesstothefieldsofFPMFileObjectsandChunksasfollows:FPMFileObject:(FPMFileObject)fileHandle.(FPMFileObjectandRedBlackTreeImpl)chunkTable.(FPMFileObject)nMappedChunks.(FPMFileObject)fileDataSize.(FPMFileObject)exists.(FPMFileObject)nDefWriteChunks.(FPMFileObjectandFilePageMgrLruImpl)nLruListChunks.MappedChunk:(FPMFileObject*)fileHandle.(FPMFileObject*)useCount.(FPMFileObject*)startPageNumber(FPMFileObjectandFilePageMgrLruImpl,exceptjustFilePageMgrLruImplforneighborrelinking)prev,next.(FPMFileObjectandRedBlackTreeImpl)rbLLink,rbRLink.(FPMFileObjectandRedBlackTreeImpl)rbColor.(FPMFileObject)defWritePending.UnMappedChunk:BelongstoFilePageMgrLruImpl.*chunk.fileHandle=nullHandletellsusthataChunkisunmapped.AprocesswillonlywriteChunk.fileHandle,Chunk.startPageNumber,andChunk.useCountwhenaChunkisnotlinkedonthelrulist(itcantellthisbecauseonlyChunkswithuseCountsof0areonthelrulist);ThisisbecauseaprocessintheFilePageMgrLruImplmonitortryingtogeta"strange"ChunkwantstoknowiftheChunkismappedtoafile;ifitisnot,theprocesscansnarfitupimmediately;ifitis,itwantstopassbackacopyofthefileHandleandstartPageNumberasahinttothecaller,whomustthengettheappropriateFPMFileObjectmonitorbeforeitcantrytofreeuptheChunk.TheFileMap'sFileObjectmonitorisusednearthebeginningofmanyFilePageMgroperationstoprotectthecheckingforand,ifnecessary,generationoftheFilePageMgrHandlefieldoftheFileObject.Algorithms4s b)\ ^  ])  [~ Y$  V} !0# -24o59; ?ABG TO2  !<#,$'E . 35}7 QR!$(#,3-0E35 @BG O L I.s G % Es D.s Bs @s ?- 'd ;' 8$ 6$ 5,$ 3 'C+.5;n= 1 u 0, %+ . % ,s ) &+ "LY !$&)*/1H9N;?BF !.G'* 5r9>:?)@C8G  e5["%*.467:LADH# <2)/A3d5478?*CG 8uFU!b"& 'u(*H-/4b6:p;= FH9 t`\ %!$C + -8:W;>i@B{F < C ).X2368:_=+?>A ! "L#'*F,3658 A G `r i" ( /24AE!G/ E u n v)TVm$^:W;>i@B{F < C ).X2368:_=+?>A ! "L#'*F,3658 A G `r iThedescriptionsofalgorithmsbelowaregenerallywrittenintermsofnormalChunks;variousportionsofthealgorithmswillbeunnecessaryforChunksofothertypes.ThealgorithmsarealsodescribedintermsofeachChunk;inactualfact,weoptimizevariousoperationsoverChunks.WhenwerefertomappingaChunk,itshouldbeunderstoodthatthatprocessincludesenteringtheChunkinthefile'sredblacktreeandsoforth,withtheobviouscorrespondingoperationsforunmapping.Uninterestingdetailsofthealgorithmsandmosterrorhandlingareomitted.MostoftheproceduresinitiallycallGetFilePageMgrHandleAndRegister;thisistheroutinethatchecksfortheexistenceofand,ifnecessary,createstheFilePageMgrHandleundertheprotectionofFileMap'sFileObjectmonitor,andthenregistersitselfasauseroftheFileMap.Handle.ThecorrespondingunregisteringisdoneattheendoftheFilePageMgrprocedure.ReleaseVMPageSetOuralgorithmsassumethatChunksfromfilesdeclaredrandomaccessshouldpersistforawhileinthecache(thelrulist),whilecleanChunksfromfilesdeclaredsequentialaccessaremuchmoreexpendable.Wewishtopreventclientfilesthataredeclaredrandomaccessbutarereallyaccessedsequentiallyfromfloodingthecache.Therefore,ifduringreleaseofnormalChunksfromafiledeclaredrandomaccess,anabnormalnumberofpagesfromthefileareinthelrulistrelativetothetotalnumberofpagesinthelrulist,wetreatsuchChunksassequential.However,becausesomerandomlyaccessedfilesmaytemporarilybelegitimatelyaccessedinasequentialmanner(forexample,whenenumerationistakingplace),themeasureswetaketohandlecachefloodingaretransitory.ForceOuttheChunkifthishasbeenrequested.EnterFPMFileObjectmonitor.Ifthisfileisnormal,findoutifitisfloodingthecacheand,ifso,changetheChunk'sparameterstosequential.DecrementtheuseCount.IftheuseCounthasgoneto0:PuttheChunkonthelrulist,asmruifdirtyormrurequested,elselru.Ifthisisadirtysequentialchunkanditisn'talreadywaitingfordeferredwrite,markitaswaiting,incrementthecountofdeferredwritewaitersforthisfile,andifthatisatitslimit,startaprocess(es)todosomedeferredwrites.(TheChunksfortheseprocessestohandlearefoundbysearchingthefile'sredblacktreefirstbackwardsandthenforwardsfromthecurrentChunkposition,untilwefindasmanyChunksmarkedfordeferredwriteasourcountofwaiterssaysweshould.ThedefWritePendingbitisclearedforeachChunkfound.)ExitFPMFileObjectmonitor.DemonProcess(handlesdeferredwrites)ForceOuttheChunkswewerestartedwith.NotethatwhentheseChunkswereputonthelrulistbyReleaseVMPageSet,theywereputonasmru,toreducethepossibilitythatsomeonelookingforaChunktoremapwouldgetoneofthemandthereforehavetowaitfortheirwrite.IfthecallerofReleaseVMPageSetactuallywantedtheseChunkstobelru,wedothatnow;itisdoneinsidetheFPMFileObjectmonitor,andonlyforChunksthatarestillinthesamestate(samemapping,onlrulist,andNOTdefWritePending)aswhenthisprocessstarted.ReadPages,ReadLogPages,ReadLeaderPagesBasically,thisprocedurewantstogetaChunkthatisalreadymappedtothedesiredstate;ifnosuchChunkexists,theproceduremustfindanotherChunkandmapit;ofcourse,thelattermay5s b) L  # (-/<249f?kD, `  | !"#d(*<-25 <>AG ^ =P!d#)P.( 48>!BHDG ]3j %L(1+/5y:=gBCFI [ w8!B&y / 6K8 @ Y;T +"(Y* V q&  799;>=B^E) T *g 0 %'4n8q: A_C S@ <"&(x)-%/$1={@ Q 2y! * w Mks J e6 #+&)/4G8]<A9C~G IB1 s~#5(o+/ 4 ;Y?BE G O{%!!$'*,2_7{;>@OD E b$ +-:16o8F="BWEG% DLI$C)+U/725*7:;>N@BG B)jl6!#&(,@/46 >Dm @G" )q+i 28Y:;> AF ?V  =$)+14 7(8=AG; = :XB5 K# 8x Ko7Y!"\#$*@,023%4i6i:=7B o5[ o3o2 Q{L 10e "F$&)*.6/2 9xA9BD#E1+oCp c!$*:/2r79=WCWE1)|t "&(,".18]; >)CG/1(! !^$&)+/49<AECG1&y>.  &"(J+Y658:,?!AD1$ #+ ow s {BX$M .Zz"%a'r),.a0g<?CEEG ) J A"',/%0Z46:?8ADBF `D0$]"&(n*.y0-1).GetSizeEnterFPMFileObjectmonitor.GetthesizefromtheFPMFileObject.ExitFPMFileObjectmonitor.6s b) k!&[* /]2g69<?*BG/ ` =j (. 5b8R9>@<CG} ^m 4!_"%T&(,R270:O=BRDGg ]3`  9&h .h1469=> @DF^ [9B<%)*--3?9> X h Vf Rx KoQ@ EoO!-"(1M  #'): 23 1LJZ \ ;#& -/24H68(;* CE1JoH_ 5$&4,. GT o C;n U n%)+.-14A7R9=/?B$EGF AZ K"!S$ = <4x o:}?iU"'`(, .b035 77<?mEo8R4 7.5 5w2g93 "&; 05U8:8;@AD 3k< 2 0a ,w ' xs %!< |"$`)v+/-/2469>@5AG/w #z  s*#z+j#z16<A2Gw !s!R!"-%( /1436;=@BNDF> +;w + + &ps1 +2 +3 688>y@/BG \w 2c s w $8s./l36\7:=B]D }BC#/(*x/ 0v48p9?A0w s x Ko K1<  ov)TVm$ 8>y@/BG k\w /c s w $8s./l36\7:=B]D }BC#/(*x/ 0v48p9?A0w s 5x Kv)NTVm$HSetSizeSetSizemustbewareofChunksmappedfromareasofthefilethatwillcausePilotdistress.Forlengthen,itconcernsitselfwiththeoldeofbeing"inconvenientlymapped."Fortruncate,itconcernsitselfwiththeneweofbeing"inconvenientlymapped,"andanyChunkspasttheneweofbeingmapped."Inconvenientlymapped"meansthepageisinthemiddleofaChunk;beingthelastpageinaChunkisnot"inconvenient."IftheseproblemChunkshaveuseCounts#0,SetSizewillreturntotheclientwithanerror;otherwise,SetSizewillwriteoutthe"inconvenientlymapped"ChunksandKilltheotherChunks,andthenunmapthemandputthemonthelrulist.ThenitrequestsPilottomakethefilesizechangeandupdatesthesizefieldintheFPMFileObject.NaturallythisisalldoneundertheprotectionoftheFPMFileObjectmonitor.DeleteThisisusesthesameroutinesasSetSize;itusesFile.DeleteinsteadofFile.SetSize.CreateWithIDCreatesthe(permanent)filebystraightforwardcallsonPilot.InitializestheFPMFileObject.GenerateFileIDGetsanunuseduniqueidfromPilot,sothecallercanlatersupplyittoCreateWithID.ShareVMPageSetEnterFPMFileObjectmonitor.IncrementstheuseCountoftheChunkunderlyingtheVMPageSet.ExitFPMFileObjectmonitor.ForceOutVMPageSetDoesaForceOutontheChunkunderlyingtheVMPageSet.Doesn'tneedtheprotectionoftheFPMFileObjectmonitor,sinceForceOutonunmappedChunksisano-op.ForceOutFileEntertheFPMFileObjectmonitor.BuildalistofChunksmappedtothisfilebycallinganenumerationroutineintheredblacktreepackage.Thelistisconstrainedinsizetoavoidthisclienthoggingthesystem.ExittheFPMFileObjectmonitor.ForceouttheseChunks.Repeat,startingtheenumerationfromwhereweleftoffeachtime,untilnomoreChunks.ForceOutEverythingUsestheFileMapenumerationroutineGetNext(fileHandle)andcallsForceOutFileforeachfileHandle.GetAttributesEnterFPMFileObjectmonitor.GettheattributesbycallingPilot.ExitFPMFileObjectmonitor.7w b4s _ &L)-a/214,79=AF ^[!$'&i*3:=BC \]+ft`)j/25{:=@6CEE Z'#<'* -k.03)79:@DG Y; %[&*U/48>@B#F Wg).3" )c.A1479C U#&%)(-14I6:x<?AIDH9 T .m!A%(`-W/2!5168 Cl RqO  # $'& 0w N<s K3- W!&("+ 2+68 w G~ s D 8 4),.2 91; w @ s >9V l$ %(.+.m167Zw9>9:>9 sA>9w : s 7{x Ko5  #.' .1 4& ow /s -iV!L (\* 3w8<)> EVG/ + %'.35%6Ow ' s %x o#V<r"$'i)+0Y2V :g?<@CcEo!1O'e &%'*~,-/26N;=   Z  !$n(*-"/U269J;P>w vs T  !R&p,o 4|7: CF^ G w  s x Ko 1 ! 5 ov)TVm$RestoreCacheToCleanStateThisisaroutinefordebugging.ItusestheFileMapenumerationroutineGetNext(fileHandle)andtriestounmapalltheChunksforallthesefiles.ThenitcallsaFilePageMgrLruImplroutinethatchecksthateachlrulistcontainsalltheChunksoftheappropriatetypeandthatallthoseChunksareunmapped.Clearly,ifthesystemisnotquiescenteithervariouserrorswillbereturnedorthecachemaynotactuallybecleanwhentheprocedurefinishes.8w `s ^B8& " $'M, 49?, F \s%!#'z+W.0_3x4AF Z,h!#%z*,Z. 6*9B<>@Dy YL _$I%(8.U2I7;=?EdG/ Wy}  $B&-%v)TVm$ _$I%(8.U2I7;=?EdG/ Qy}  $B&-%v)TVm$ TIMESROMAN HELVETICA TIMESROMANLOGO TIMESROMANLAUREL TIMESROMAN TIMESROMANY  X$ /6=~?j/B @6FilePageMgrInternals.tioga 8-Oct-82 18:40:20