TheAlpinefilesystemMarkR.Brown,KarenKolling,andEdwardA.TaftFebruary,1984Abstract:Alpineisafilesystemthatsupportsatomictransactionsandisdesignedtooperateasaserviceonacomputerinternet.Alpine'sprimarypurposeistostorefilesthatrepresentdatabases;animportantsecondarygoalistostoreordinaryfilesrepresentingdocuments,programmodules,andthelike.Unlikeotherfileserversdescribedintheliterature,Alpineusesalog-basedtechniquetoimplementatomicfileupdate.AnotherunusualaspectofAlpineisthatitperformsallcommunicationviaageneral-purposeremoteprocedurecallfacility.Bothofthesedecisionshaveworkedoutwell.ThispaperdescribesAlpine'sdesignandimplementation,andevaluatesthesysteminlightofourexperiencetodate.AlpineiswritteninCedar,astrongly-typedmodularprogramminglanguagethatincludesgarbage-collectedstorage.ThispaperreportsonusingtheCedarlanguageandprogrammingenvironmenttodevelopAlpine.XEROXXeroxCorporationPaloAltoResearchCenter3333CoyoteHillRoadPaloAlto,California94304pï^{î «îcî•îšqïXøî «îîcîoî§î$î'“î. î0BrïSuî «îùsïK½î «tïK½îìîfîÜîîaî!>î$î*&î.á î7/î:î;|îAÅîCrïI‰î «î ¥îïîî(îrîî$dî*î/]î5!î6­î8pî<.î?FîB=ïGTî « îKî•îdî#Âî'5î(ðî*áî.Íî4Ëî8 î@Ü ïE î «î�îòîßîiïADî «îeîzîîxî#…î%hî(' î.ýî3Ãî7uî8ôî@îGï?î «î%îKîî!Šî'‚î-oî2Šî4¢î9†î;gî>³î@QîFãï<Ûî « îîWî�î$ªî)¤î0Æî3ƒî9î<‹î>KîBHï:§î «îî,î�î?îVî!jî'ýî-~î2!î4êî?îBHï8rî «î6î)î×îîáî� î$+î%ïï4—î «îzîDî^îJîNîÖ î)¹î/¼ î9î?ÂîBøï2bî «î´î»î Ûî$øî)òî+þî/äî2Sî6›î<õî?È ï0.î « î'îëîyuï¦î «tï¿î*­î.ð ïŠî*­î. î1î7¸ï Vî*­î.Jî3Tî5Þï "î*­î. î1{ î8'¶TVm$TheAlpinefilesystem11.IntroductionThesystemwedescribehereisknownwithinXeroxas"ResearchAlpine"or"RAlpine".Toaidreadabilityweshallcallit"Alpine"inthispaper.Alpineisafilesystemthatsupportsatomictransactionsandisdesignedtooperateasaserviceonacomputerinternet.(Svobodova'ssurveyarticle[Svobodova,1984]describestheconceptofatomictransactionsandthenotionoffileserviceonacomputerinternet.)Alpine'sprimarypurposeistostorefilesthatrepresentdatabases;animportantsecondarygoalistostoreordinaryfilesrepresentingdocuments,programmodules,andthelike.Today(inFebruary,1984)anAlpineserverstoresthepersonalandshareddatabasesuseddailybyabout45peopleatXeroxPARC;ithasbeenavailableasaservicefor10months.Thesystemdoesnotyetmeetallofitsgoals,andisstillbeingdeveloped.Thispaperisorganizedasfollows.Section2describeswhywebuiltAlpine.Asonemightexpect,ourrationaleforbuildinganewfileserverhadalargeimpactonitsdesigngoals.Section3detailsAlpine'saspirationlevelalongmanydimensions:concurrency,reliability,availability,andsoforth.WetrytojustifythesegoalsintermsofthemotivationsfromSection2.Section4discussesthetwodesigndecisionsthathadthegreatestimpactontheAlpinesystem:theuseoflogsinsteadofshadowpagestoimplementatomicfileupdate,andtheuseofremoteprocedurecallsinsteadofstreamsormessagepassingforcommunication.Itmayseemunnaturaltodiscussanimplementationtechnique,likelogging,beforethedesignofAlpinehasbeendescribedinmoredetail.ButbothofthedecisionshighlightedinSection4weremadeveryearlyinthedesignofAlpine,andhavehadalargeimpactontherestofthedesign.InSection5wepresentthedesignindetail,explainingthebasicabstractionsthataprogrammerseeswhenusingAlpine.Section6discussesourimplementationoftheseabstractions.Section7evaluatesAlpine.WedescribetheexperiencegainedfromAlpineapplications,givethecurrentstatusandplansforthesystem,andpresenttheresultsofrunningsomesimplebenchmarks.AlpineiswrittenintheCedarlanguage[Lampson,1984],usingtheCedarprogrammingenvironment[Teitelman,1984].Section8ofthepaperreportsourexperiencesinusingCedartodevelopAlpine.Atthispointinthepaper,onlyafewfactsaboutCedararerelevant.TheCedarlanguageevolvedfromMesa[Mitchelletal,1979],aprogramminglanguagefeaturinginterfaceandimplementationmodules,strongtypechecking,andinexpensiveconcurrentprocesses.(AdaissimilartoMesainmanyrespects.)TheCedarlanguage'smostsignificantextensionsofMesaaregarbagecollectionandtheoptionofruntime,ratherthancompile-timeorbind-time,typediscriminationandchecking.TheCedarnucleusisabasicenvironmentforrunningCedarprograms.Itincludesapagedvirtualmemory,theruntimesupportforincrementalgarbagecollection,andasimplefilesystemwitharead-writeinterface.ThereisnoprotectionboundarybetweenotherCedarprogramsandtheCedarnucleus;theCedarlanguage'stypecheckingmakesitveryunlikelythatanon-maliciousprogramwillcorruptthenucleus.vïgî"Àî%™î*î,ˆtïgîG”wï^õî «î ˆ vï[©îmîUîàîî‹î µî"0î&Æî+î/Mî1 î7³î<ùî>Ì îF·ïYtî «î ÿ îÏîöî1î¼îî#ùî%§î(HïW?îmî÷îgî•îî‚îTî$èî)h î0ìî3¨î5î:×î<ŠîAxîC*îDXïU î «î áî:î”îñ î$‡î)î-d î5`î98î?PîAßîG%ïRÖî «î î”îBî˜î èî"˜î$øî)tî+qî,‘î2² î9î>oîCœïP¢î «î WîFîâîîî\ î&5î(eî/î5³î8ëî:—î<…î@"îEñïNnî « îƒ îÍî \î&8î(ïî+OïL9îmî­îÑî"îÞî Êî%Lî)Uî-2î/Žî5î7Áî<#îB?îEwïJî «î ³î î‘îî½îëî"Õî$7î&¸î* î/çî1¡î2Öî7hî9±î;¢îAîDcïGÐî «îÜîQîšîîñîªî…î Zî#î$}î'î*é ïE›îmî¥î¥î/î—îcî%7î*5î+ˆî1Žî4¥î6ëî:Pî?îîBîDçïCfî «îOîÔîî·î ,î!Qî$9î&žî*¥î-Xî.|î1Þî6`î8aî:7î>�îBÏîGªïA2î «îîj îÆîî"Øî&© î.Z î6{ î= îD]îGï>ýî «îúî…î¬î[î‰îî!�î#=î'î(Áî+! î2Šî5ñî:Ðï<ÈîmîMî‚îIî©îVî#¦î)‚î,Qî/ î1iî6uî:ýî=î?cîCêï:”î «î.îÆî¢îœîrîNî!fî%Tî'%î.-î2Ìî5Xî:fî=Aî?ÃîB[îD7ï8_î «î(î0îÝî�î }î";î'Œî,Yî.� î9î:‚î=î@öîG0ï6+î «î\î` îR î#î%Ôî+î/€î1óî6Uî8"î<»î?CîB´ï3öî «î FîÆîGîÕîþî¤îðî$º î+åî-€î2Lî3nî6¬î:Xî=Tî@¨îBCîD�ï1Âî «î Xî)îÔîî¹îÖî0î#«î%¤î'÷î*Œî,8î.‹î3�î5_î:2î;Zî=uîB<îD�ï/�î «î yî¼ î‰îî› î&;î))î*r î2tî5lî9@î= îBªîGªï-Yî «îrîý îÜî•î# ï+$îmîZî�î’î î"§î(î*† î1nî5ìî9aî=ô îEñï(ðî «î ßî}î)î´î'î9î mî%î'¡î,Iî.}î2¡î4.î9:î<¡î@Ú ï&ºîmîQîî,î8îõî#kî)�î0±î5î9î;Õî@L ï$†î « îÖ î/îìî$çî&8î( î*‰î.†î3Jî5ñ î=lî?6îBüîG0ï"Rî «î×ï îmî“î_î)îîŒîðî#4î$‰î'Tî*°î.¼î2ÿî5}î;ðxî>óï ï î?ðîCvïèî «î@î&îNxîªïèïèî Eî!¸vî"Ìïèïèî$'î(§î*P î3aî9§î@îF'ï´î « îqî5îJî"Aî(=î*Û î27 î9 î?¬îCîDYïî «î iî!îÞî· îWî >î$e î+î.‚ î5) î;Ûî=£îA[îC¾ïKî « î×î…îÚî+îÛî"aî&eî)� î1Éî3ƒ î:(î=/ îF'ïî «î�xîŠïïîˆî±vïî°î @î!�î%' î-[î/½î5î9Vî@�îB,îG´ïâî «îæîmî`îìî"Pî'‰î)ó î1 î6î î=¨î@ŒîAãîFuï­î «î&î@îi îõ î!uî%vî&áî(æ î/sî5¨î;î>´îBËïyî «î?îzînîÄîÿîó î&qî)]î.õî3 î4;î7&îøî?þ ï Dî «î:îåîÅî%ÿ ÓTVm$ƒ22.MotivationforbuildingAlpineAmongtheresearchtopicsbeinginvestigatedinXeroxPARC'sComputerScienceLaboratory(CSL)aredatabasemanagementsystemsandtheirapplicationtoinformationmanagement.Wefeelthatinthefuture,databaseswillsupplementorreplacehierarchicaldirectorysystemsastheprimarytoolfororganizingcomputerfilesandthatmoreandmoreinformationwillmigrateawayfromfileswithspecializedformatsintowell-integrateddatabases.Inourenvironment,allsharedfiles,includingfilesthatrepresentdatabases,arestoredonfileservers,soresearchinvolvingshareddatabasesrequiresanappropriatefileserver.Earlyin1981,whentheAlpineprojectbegan,wehadtwofileserversavailabletous,IFSandXDFS[Israeletal,1978,MitchellandDion,1981].IFS(InterimFileServer)storesnearlyallofourlaboratory'ssharedfiles.IFSwasdevelopedin1977andisdesignedfortransferringentirefilestoandfromapersonalworkstation'slocalfilesystem.Itdoesnotsupportrandomaccesstofiles;thismakesitinappropriateforstoringdatabases.IFSiswritteninBcplfortheAltoandwouldnotbeeasytomodify.XDFS(XeroxDistributedFileSystem,alsoknownasJuniper)isafileserverwithmoreambitiousgoals.XDFSsupportsrandomaccesstofilesandprovidesatomictransactions.Weconstructedasimpledatabasemanagementsystem[Brownetal,1981]andseveralapplicationsthatusedXDFStostoreshareddatabases.WefoundthatusingXDFScrippledsomeimportantapplications.Thebasicoperationsofcreatingatransaction,readingandwritingfilepages,andcommittingatransactionweredisappointinglyslow.Theservercrashedfrequently,andrecoveryfromanycrashtookoveranhour.Andtheserverallowedonlyasmallnumberofrandomlydistributedfilepagestobeupdatedinasingletransaction(althoughamuchlargernumberofsequentiallyclusteredpagescouldbeupdated).AtthattimetheCedarprogrammingenvironmentprojectwaswellunderwayandXDFS,writteninMesafortheAlto,wasanunattractivebasisforfurtherdevelopment.SinceneitherIFSnorXDFSmettheneed,wedecidedtobuildanewCedar-basedfileserver,Alpine,tosupportourdatabaseresearch.ThisserverwouldsubsumethefunctionsofXDFS,whichcouldbedecommissioned.Giventhatwewerebuildinganewfileserver,weconsideredmakingitgoodforstoringordinaryfilesaswellasdatabases.OnereasonforthisisthatCedarrunsonapersonalworkstationthatisseveraltimesfasterthantheAlto,andthetimespentwaitingforIFStodoitswork(orretryingwhentheserverwasrejectingconnections)wasincreasinglynoticeable.ACedar-basedAlpineservercouldusethesamehardwareasthefastestCedarworkstation.Also,Cedarplannedtoincludealocalfilesystemthatsupportedtransparentcachingofremotefiles.WeexpectedthatthemoreconvenientaccesstoremotefileswouldincreasetheloadonourIFSservers,makingtheperformancemismatchbetweenworkstationandserverevengreater.WealsoknewthatextensionstoIFSinsupportoftransparentfilecachingwouldbedesirable.Forallofthesereasons,wehopedthatAlpinecouldreplaceIFSaswellXDFS.Thiswasdefinitelyasecondarygoal,becausethedeficienciesofIFSwerenotasseriousasthoseofXDFS.tïg/î «wï^õî «î ˆ îî°îðvï[©îmîhîÙîOîYî#5 î*Óî,“î0Èî6î<ºîA ïYtî «îÆîî¤ îµî$­î'\î*š î1¤î3J î:Ë îC°îF3ïW@î «îsîîsîéîî§ î' î(Èî- î4ãî:®î?§îAOîC¨ïU î «îwî³ îjî“î €î#6î&î)•î,Kî/Ý î7fî:î?îB‹îEñïR×î «îª îtîWîî&R î-î.Èî17 î9‚î;Vî? îBÊïP£î «îxî%î îYî‹î#�î%rî'»î,ƒî.%î3hî9Nî=“îC‘ïNnî «î ² î(î§î¼î {î"@î%ôî)¿î,5î0Ñî5„î:î<>î? îAÎîDMïL:î «îfîî<îóî«îxî#(ïL:ïL:î#Ãî$·vî%ËïL:ïL:î&§î*Eî/¿î2vî6WïJîmî2î­î’îhî"Vî&’î(�î*Vî,î î4pî8ãî<Èî?�îBFïGÐî «î pîÍîœîîñîE î$Æî(Éî+Íî-“î0aî3ßî5 î:» îCîFuïEœî «îñî_î†îòîõî" î&î'·î+î-®î1Ýî3+ î;«î=ßîBg ïCgî «îbîÎî�î/î`î�îýî!î#Îî'üî*qî,bî/fî1ïA2îmîîø î�î"®î(î+%î/õî1îî7²î9hî:Üî=�îAæîEKï>þî «î;îî›î!eî&¿î+î,îî0î3î8Ïî=… îFTï<Éî « î î=î«îO î&rî*÷xî/Òï<Éï<Éî0mî1kvî2~ï<Éï<Éî3dî7î9×î>p îFï:•î «î8îäîãî‘îG î%äî(Àî-î0=î48î8äî>™îB}ï8aî « î�î‹î/ î"î#úî)cî*¾ î2Dî7jî:Sî?7îAÒîF'ï6,î « îîd îƒî÷î(Âî-î0î43î9V î@uîCOï3øî «îIî!îìîHî˜î¿î#[î&«î)Bî-…î2Ñî6"î7‚î;Wî@ºîBªï1Ãî « îÖîxî{îbî‹î#î%î&eî*‰ î1½î8+î9Žî=�îAÁîG%ï/�î « îLî*îÿî Öî"Ñî)–î+œî.uî1¥î4î82 î@Ð ï-Zî «î_î"î&î“îaî$+î(ôî*¹î.yî0Íî3Dî6Ìî9�î;– îC.îF¡ï+&î «îT ï(ñîmî%îÛî”î!î î#Dî%¦î)]î+‡î0¬î2]î5ÿî7,î: îBîDzï&¼î «î~î!î"î¢î2î%Zî(iî,kî0Žî63î8ˆî>{î@)îDÐï$ˆî «îwîhï"Sîmîƒî9îIî‚îäî õî#Ìî&î*jî,y î3Gî8î9Vî<±î>ÖîCOï î «î§îbî]î î/î@î#¨î%òî(¡î*î,öî1î4Dî6Wî7�î= îD—îGsïêî «îZî"îîDîÂî!Rî$'î&¥î)èî-±î2¢î4þî7Óî9Ÿî;Äî=¼îAWîC³ïµî «îPîžîšî5î¿ î%§î(B î/» î7î8 î@]îDÒï�î «î”î&î¢î<îbî -î"©î&õî+* î3©î7Mî;‚î@íîB¸îG´ïMî «îî«îOîFîæ î'Bî,jî.Lî3î75î9èî?ÍîBÃîEKïî « îŽîƒîî¦î{î#‘î(¹î+î-öî/äî2Uî4ôî9Äî>”î@Ú ïäî «îî˜ î%î"î&1î)œî/\î2 î4üî8Éî;¼ îB‚îDUîG0ï¯î «î·îp î¤î î! î%<î'- ïzîmîCî]î@îôîTî ¦î% î(î,³î0©î5‘î8sî:Kî=cîBîîF3ï Fî « îÛîî”îöî")î$š î, î-Ôî0œî3ÿî6…î8Eî<òî>±îBbîD, TVm$’TheAlpinefilesystem3Forinstance,bypartitioningourlaboratory'sfilesbetweentwoIFSserverswesignificantlyimprovedfileserverresponsetoCedarworkstations.WewouldnothaveconsideredbuildingAlpineonanAlto.IFSseemstorepresentthelimitofwhatwecanbuildonacomputerwith16-bitaddressingfordataandnohardwaresupportforvirtualmemory.ManyoftheproblemswithXDFScanbetracedbacktoAltolimitations.Cedar'slargevirtualandrealmemoryarewhatallowedAlpine'sgoalstobeamoreambitiousthanthoseofIFS.3.DesigngoalsWerequirethefollowingterminologyforthediscussionthatfollows,andintheremainderofthepaper.Auserisahumanbeingwhousesacomputerservice,saybymakingmouseclicksortypingcommandstoacommandinterpreter.Aclientisaprogramthatusesacomputerservice,saybymakinglocalorremoteprocedurecalls.ThepurposeofAlpinewastosupportotherCSLresearchprojects;Alpinewasnotanendinitself.Thishadsomenoticeableeffects.Itencouragedaconservativedesignwewishedtouseproventechniquesfromthepublishedliteraturewherepossible,andtouseexistingcodewherepossible.(IFS,ourmodelofasuccessfulfileserver,wasbuiltusingmanyexistingAltopackages.)Italsoencouragedadecompositionoftheprobleminawaythatallowsthesystemtobeginsupportingitsprimaryclients,databasesystems,withoutrequiringthattheentirefilesystembecomplete.Wehavealottolearnaboutsystemsupportfordatabases,andourclientshavealottolearnaboutusingshared,remotedatabases;thesoonerwecouldbegintoprovidedatabasestorageservice,thesoonerbothpartiescouldgetonwiththelearning.Atthesametime,Alpinewasitselfaresearchprojectthatpermittedustotryoutasetofideasonwhatfunctionsshouldbeincludedinafileserver,andhowthesefunctionsarebestimplemented.Anyprojecttobuildafileservermustarriveatdecisionsaboutawidevarietyofissues,includingconcurrency,reliability,availability,fileaccess,distributionoffunction,capacity,accesscontrol,andaccounting.WesetthefollowingdesigngoalsforAlpine:Concurrencyandreliability.WedecidedthatAlpineshouldimplementatomictransactionsonfiles.Alpine'saspirationlevelforconcurrencyshouldbetoallowconcurrentupdateofonefilebyseveraltransactions.Alpine'saspirationlevelforreliabilityshouldbetosupportconfigurationsthatsurviveanysinglefailureofthediskstoragemediumwithoutlossofcommittedinformation,butthisdegreeofredundancyshouldnotberequiredinallAlpineconfigurations.Providingatomictransactionsattheleveloffileactionslike"readapage"and"writeapage"isunusual.Atypicaldatabasesystemimplementsasetofaccessmethodsasalayerontopofaconventionalfilesystem.(Examplesofaccessmethodsincludedatabaserecordsaccesiblebysequentialorhashedsearching,B-Treeindicesonrecords,anddirectpointerchainslinkingrecords.)Mostdatabasesystemsimplementtransactionsattheaccessmethodlevel.Wecanidentifythreevïgî"Àî%™î*î,ˆtïgîG”vï_/î «îEîÙîà î&î  î'î)Þî/;î1Öî4{î8úî; îBªï\ûî «îî!îÆîuî� ïZÆîmîïîî€î¾ î!šî' î+ˆî-…î/mî3Pî5þî9÷î;œîA‘îCèîG%ïX‘î «îôîî~î îûîî 'î#.î' î-Àî/éî2Úî5}î7oî=cîB[îD„ïV]î «î î îÎî8î Kî#pî'Öî*kî,fî0•î3æî5Ÿî8Ä î@xîEwïT(î «îî½îtîáî5î ’î%§î+ î.†î05î2%î3Oî6âî=8î@^îCýîE¶wïLýî «î ˆîvïI±îmîîâîRîu î&1î(~î*ï î1‚î4aî9†î î@}îG%ïG|î «îîüxîšïG|ïG|îWvïG|î�îîIîî"Þî%ôî(ÿî*:î0vî5fî7Öî9ãî>ÝîCIîGïEHî «îçîÄîiî‹îã î'}xî)ïEHïEHî)œvïEHî,§î. î/+î4±î7wî:gî;ˆîAªîF€ïCî «î §î�îÖîšîAî"Äï@ßîmîTî¥îlîî»î!xî&’î*@î-~î2ðî8™î=.î?èîBkîDjîG0ï>ªî «îî+îñî” î 0î%zî' î.cî/œ î7wî;Öî=Êî@îD¬îFiïOîAø ï5Øî «î ‹îÇîhîî"eî'vî-yî0Lî2°î6¡î9î=�î?†îFTï3¤î «îî^î�î`îþîî �î%Êî(( î.Àî1™î4Eî8ªî<î=\î?�îA^îDüï1oî «îbî.îâ îˆî!õî&rî(¦î,î0Wî2î7+î<ÔîA“îFï/;î «î'îpîíîÅîî ,î#Tî%¿î, î.î0î4î7’î<$î>ÜîBEîC{ï-î «îfîQî»î¨îsî¸î"Kî#’î%Ìî'£î+>î-aî0Üî6÷î;‘î=ŸîCbîE.îFuï*Òî «îîÇîÌîUîSî!§î$Š ï(�îmîUî×îjîïîýîKî"=î%Šî)Zî*×î0˜î4_î5mî8¤î=î>¬îBÊï&iî « îÇ îI î!�î$î(n î/Ùî1“î7fî= îAîF'ï$4î « îxîî îî ’î$áî(^î*›xïÊîm îdî vîšïÊïÊî î"«î'Úî*µî/Hî3Ðî:Ãî?K îFØï–î «î�îê îFî’î Ö î(Ÿî-!î/î0Íî4| î;iî@îAÁîDsîFãïaî «î; î–î÷ î$Lî'‘î)Î î/öî4qî6aî8î= îFï-î «îYîêîÆîî»î î!éî&Œî+ëî0çî3ƒî5-î;ø îCËîF=ïøî «îîÕ îVîÑî Fî"7î'Çî)uî+eî/ëïÃîmîÀîE î Îî"pî$Øî('î)éî,\î1î3¶î7Šî8½î<½î?}îC´îDçï�î «î 2îrîî¦î\î#ó î+xî,½î.õî0Éî4òî:�îœîC:ï òî «îTîî/î!5 î(Õî*Žî- î1;î6gî:Éî=sî@îEU YTVm$_4potentialadvantagesforimplementingtransactionsatthefilelevel.First,solvingconcurrencycontrolandrecoveryproblemsinafilesystemsimplifiesanydatabasesystemthatusesit.Withoutfile-leveltransactions,eachaccessmethodmustimplementtransactionsbyexplicitlysettinglocks,writingrecoveryinformationonthedisk,andinterpretingthisinformationincaseofbothsoftandhardfailures.Thebasicatomicactionavailabletotheaccessmethodimplementoriswritingasinglepagetodisk.Simplifyingthedatabasesystemisespeciallyimportantifthedatabasesystemitselfisanobjectofresearch.Databasesystemsthatwereorignallydesignedforbusinessapplicationsarenowbeingtriedinnewdomainssuchasofficesystemsandcomputer-aideddesign.Thisexperiencehassuggestedwaystomakedatabasesystemsmoreusefulinthesenewdomains,butthecomplexityofrealdatabasesystemshashinderedexperimentationwiththem.Second,file-leveltransactionsprovidetheoptionofrunningthedatabasesystemonaseparatemachinefromthefilesystem.Thismovesprocessingloadawayfromthemachinethatissharedbyallusersofaparticulardatabase.Mostdatabasemanagementsystemsareprocessor-bound,soitisworthconsideringtheoptionofmovingsomeprocessingloadfromthefileservertotheworkstation,orfromthefileservertoaclosely-coupleddatabaseserver.Runningthedatabasesystemonaseparatemachinefromthefileservermayalsohavesomedrawbacks.Itdoesnotminimizecommunication,becauseittransmitsfilepagesratherthandatabaserecordsoruserkeystrokesanddisplayupdates.Thiswouldcertainlybeaproblemonalow-speedcommunicationsnetwork.Ifthedatabasesystemrunsintheworkstation,itisunlikelytobesecure,andhenceitcanonlyprovideironcladaccesscontrolattheleveloffiles,notdatabaserecordsetsorfields.InCSL,neitherofthesefactorsrulesoutlocatingthefilesystemanddatabasesystemondifferentmachines.Third,providingtransactionsatthefilelevelensuresthatanapplicationcanusethesametransactionabstractiontodealconsistentlywithalldatastoredinthefilesystem.Areasonableapplicationmaywellwishtomanipulatedatastoredbothinarawfileandinsomedatabaseusedtoindexthisfile,ortomanipulatedatastoredinseveralspecializeddatabasesystems.Itispossibletocreateseveraldatabasesystemsthatsharethesametransactionabstraction,butitseemsmorelikelytooccurifthetransactionimplementationisshared,asitcanbewithfile-leveltransactions.Accompanyingthethreepotentialadvantagesoffile-leveltransactionsisonepotentialdisadvantagealossofconcurrencyduetolockingofunitssuchasfilesorpagesthatareunrelatedtothesemanticsofthedatabase.Adatabasesystemthatperformsitsownconcurrencycontrolandrecoverycansetlocksonlogicalunits,andavoidsomeartificialconflictsthatarisefromfileorpagelocking.Ourintuitionisthatthelossofconcurrencywouldbeunacceptablein,say,anonlinebankingapplication,butwouldnotbenoticeableinmanyoftheapplicationsthatwefindmostinteresting,suchasofficesystems,programmingenvironments,andcomputer-aideddesign.Ifthisprovesfalse,thenwehavenochoicebuttomovetheresponsibilityforconcurrencycontrolintothedatabasesystem.Eveninthiscasenotmuchislostaslongasmostoftheimplementationoffile-leveltransactionscarriesovertothedatabasesystem.tïg/î «vï_/î «îg îcî  î#` î*àî,xî.Øî1Aï\úîmîüîŸ îSî"öî%žî+î1î2¶î3Ñî6+î:˜ î@±îCCïZÆî «î!îêîÞîîo î# î*áî. î2î7î:~îA^ ïX‘î «î ˜ îpîÇî�î 0î%° î-+î/"î1rî4©î7Q î>ÂîAT ïV]î «î šîÉîÃî@î-î%î¡î%î(1î+äî0¡î4úî:õî<äî?„îCÓïT(î « îÐî<îîîîî"Jî#øïQôîm îÕî2îÌî"Eî#¯ î)âî0Bî1¡î3ÿî9˜î>îAmîB×îDÅïO¿î «î jî´î­î²î!†î$Ýî*�î0^î2¡î8 î?±îB îEïM‹î «î:î0îeî1îªî î#½î)î, î6+î;åî?G îFiïKVî «îçîHîýî·î Xî%]î(öî-î.Èî2Wî5Kî;-î=´î@ îG%ïI"î «îbîýîýîrî!Dî+pî.ŠïFíîmî¢ îO î ×î%ëî(Rî,µî.wî3¶î6î;Áî@EîBTîC†ïD¹î «î+î�îçîKî˜î!­î%ì î,”î/žî3î6xî8Óî>RîAîB‚îFãïB„î «î ¢î&îæî îSî ×î$fî* î2(î7/î9‰îDKîFîGsï@Pî «î” îÙî*îvî î$î'Š î.)î1*î4‚î6Óî9.î=,î>ÌîA ï>î «î oîÖî6îŸî¬îZî„î&,î+Çï;æîmî?î´îfî ÷î#î$Sî)Âî/]î2Úî5Oî7Ïî;òî? îAîîEKï9²î « îî„î£îîü î)öî/î0Kî6!î8yî<2î@.îCCï7}î «î†îQîQ îîÄî#}î)~î,Ÿî0Õî6vî8nî9žî?)îA7îBgï5Iî « îÝîî‚îÜî%qî)çî,üî.¥î0ÿ î8»î: î;qî@¸îBaîDLï3î «îZîIî—îî*î,î#|î'�î,+î-»î0î3Oî4ÿî8<î:©î@;îD‚îGï0àî «îrî]îîÏî£î Gî$Óî(Kî*Üî0#î2žî5"î9¹î<‹îBBîFØï.¬î «îQï,wîmîáî\ î!î"êî%…î()î+ªî0Ïî3Øî6 î=Pî@îBÇîEaï*Bî « î× îîáî î&¤î)ïî,î/Cî3–î5tî8î:�î@SîB ï(î « îÍîàîÞîîÛ î%î('î,Zî/¦î1cî2�î5Xî7Ñî:˜îîAvîCÙîE˜ïjî «î»îÎî™î5î3î!Ãî$Ÿî&ˆ î.{î2Ùî4ú î=hî?žîB…îD¦ï6î «î" î¶îaî¹î"Wî$r î+)î-î0õî2×î5a î=!î@îBjîE‚ïî « îÌî îÈî­î! î)µ î2¯î5u î?dîD¬îF=ïÍî «î î�î²îÕîîî"Zî$×î&�î*<î,— î5î7> î>üîC«îFï ˜î «î{î:îöîÙî®î"Ñî%zî)…î+%î-ïî/Ñî3î5î8’î:î= îG%ï dî « îP îÐî*î Dî!òî$Rî)í ¼TVm$­TheAlpinefilesystem5Availability.Sincestoragemediumfailureisrare,wedecidedthatAlpineshouldbeallowedtorecoverfromitslowly(inafewhours);crashescausedbysoftwarebugsortransienthardwareproblemsmaybemorefrequent,andrecoveryshouldthereforebemuchfaster(5-10minutes).Itshouldbepossibletomoveadiskvolumefromonefilesystemtoanotherandtostoreavolumeoffline.Ourenvironmentdidnotdemandcontinuousavailabilityofafileserver;wecouldtoleratescheduleddowntimeduringoffhoursandsmallamountsofdowntimeduetocrashesduringworkinghours.Ifbetteravailabilityhadsignificantcost,wedidn'twantit.Fileaccess.Alpineshouldbeefficientatbothrandomandsequentialaccesstofiles.Accessatthegranularityofpages(fixed-lengthalignedbytesequences)seemedsufficientfordatabases;itisnogreatadvantagetoprovideaccesstoarbitrarybytesequences.Thegoalisgoodaverage-caseperformanceforfileaccess,nottheguaranteedreal-timeresponsethat,forinstance,avoicefileservermustprovide.Distributionoffunction.WedecidedthatmovinganAlpinevolumefromoneservertoanothershouldbetransparenttoclients,andthatasingletransactionshouldbeabletoincludefilesfromseveraldifferentAlpineservers.Avolume-locationserviceseemedeasytoimplementusingtheGrapevineregistrationdatabase,whereasafile-locationservicebasedonGrapevinewouldbetooslow.Multi-machinetransactionsarenowsupportedbyseveralcommercialdatabasesystems,andadequateimplementationtechniquesarewellunderstood.Capacity.WethoughtitwouldbeniceifoneAlpineservercouldmaintainhundredsofsimultaneousworkstationconnections;thecostofaninactiveconnectionshouldbelowattheserverend.Accesscontrol.WedecidedthatAlpineshouldimplementsimplecontrolsoveraccesstofiles.Ouraspirationsforaccesscontrolwerelowbecausewefeltthatdatabasesystemswillimplementtheirownaccesscontrolpolicies;inthissituation,itisthedatabasesystem,nottheuserofthedatabasesystem,thatrequiresauthenticatedaccesstofiles.Accounting.WedecidedthatAlpineshouldimplementsimplecontrolsovertheallocationofdiskspacetovarioususersandprojects.ThisiswhatIFSprovided,anditwasacceptable.Usingthefileservertostoredatabasesdoesnotcreatenewproblemsinthisarea.BecauseourCedarworkstationsarepowerfulpersonalcomputerswiththeirownrigiddisks,theissuearoseofwhetherAlpineshouldbeabletorunonaCedarpersonalworkstation.Thissupportsthestorageoflocaldatabases,andsmallsystemconfigurationsthatdonotcontainadedicatedfileserver.WedecidedthatthisisusefulandAlpineshouldallowit.Alpinewillnotserveastheonlyfilesystemontheworkstation;thestandardfilesystemisstillrequiredforperformingspecialfunctionssuchasstoringbootfiles.Asaresult,allowingthisconfigurationaddsalmostnothingtoAlpine'simplementation.Aworkstation-basedAlpinefilesystemmaybelimitedinsomewayswhencomparedwithaserver,forinstancebythelackofindependentdiskvolumestoimproveperformance,reliability,andavailability.WeexcludedseveralthingsfromAlpine,decidingthattheywerebestregardedasclientsofvïgî"Àî%™î*î,ˆtïgîG”xï_,îm vîï_,ï_,îuî&îÕî$?î(–î)þî-*î/Nî4lî77î;¹î@1îBîG0ï\øî «îÁî_îíî\î»îî ôî%ôî*éî/œî1Ïî7î:ýî<ùîBÕïZÃî «îÅîÚîÛîî xî#Aî(àî-mî3fî5gî9Oî= î@¹îGgïX�î «î>îDî�îaî7îvî!{î&zî)÷î,¹î/9î3Êî5�î:°î=~î?BîBµîCõïVZî «îîîÒ îáîWî Íî& î-$ î4î5Ùî7î9nî=õî@îCéïT&î «îî]îºîÙî"›î%>î(Éî.Dî/êî6Bî8æî:€î?*îC‡ïQñî «î]îßî× îÒîŠ î&"î)Hî+oî/rî2ÏxïO½îmî+vîµïO½ïO½î î�îî óî&Hî'Ýî+î02î2å î9dî=mî?îBÙîGFïMˆî «î î)îôîÑ î#î'íî+ î2î7 î=î?` îF îGsïKTî «î Øîqîîãîî#Hî%î*èî. î5´î8²î;Ñî=cî@ü ïIî « îßîKîäîyî î"¬ î)íî/îî5Âî9î;„îAYîB²îFuïFëî «î¸î xïD¶îm îêî…vîLïD¶ïD¶îšî î%5î'úî,åî.Ìî3Iî8)î;‡î>*îB.îCÓïB‚î «î>îE î�îTî î"Õî%ºî&úî*ü î2î6¡î8¨î;¸î=}îBsîEwï@Mî «îjî>îòî »î"uî,¹î1mî6…î9·î;“îB§îFï>î «î� îäîøî%[î&¦ î.]î3î7î9.î@îDcîFuï;äî «îÖ î; î Ðî#9î&Rî,àî.ðî3– î; î@ºîF'ï9°î «î‰ îh î"Dî$—î'… xï7{îmvî�ï7{ï7{îuîCî¨îAî#²î%æî)î*»î-©î2rî6Áî:Ðî@ÎîG%ï5Fî « îê îK î#=î%”î(Zî* î+óî1 î7õîQî@êîBzîDÒï3î «xï0ÝîmîÒvîäï0Ýï0ÝîXîìî î"ñî'€î,î2öî7eî<¥î?ÉîCáîE™ï.©î «î° î«î î8î! î$~î'?î,‚î.Êî1`î4Pî: î?-îAùï,tî «î îQî‹îkî!î"âî%± î+Ñî-Tî.íî1zî7BîåîArîD™îFï*@î «îGîîèî5 î&µî*Ãî,qxï( îm vîï( ï( î–î4îjî!Lî%åî*uî1nî5çî;1î>_î@Ò îG%ï%×î «î¦îgî"îöî€îDî%Yî(€î)øî-aî0$î6[î9î:�î=9 îDÝï#¢î «î îtî�î/îŒî«î"Ûî%Pî)Sî,Aî2Iî3÷î6™ï9îmî¤î$î1 î"î$\î*#î/›î6?î9Oî<‹î?„îB¿îFïî «îþî†î5îyîôî"fî$Lî';î(ßî+kî-gî.†î2”î8 î@>îCNïÐî «îîÝî¦îü î„î!Kî$úî)… î2Œî5jî7�î:î>õî@.îFuï›î «î�îî4îÿî�îî#î%Ïî*Rî.Êî2pî4œî9î;Æî>8îA½îChîEÄïgî «îWîî]îÿ î $î"Åî(£î+Nî0 î1ºî4�î:oî<ï îDcï2î «î±îéîžî6înî"Eî$]î%Žî)¸î/Bî1ê î:dî=§îBîG0ïþî «îúîŒîî(0î,¡î.÷î3^î6Mî8*î<Èî>bîAáîE)ïÉî «îéîßîåî&î?î!hî#@î%{î(:î)Ï î1›î4eî9®î;8î@‚ ï •î « î-îä ï `îmîîîÎî î#›î( î.Vî1Kî4�î7ùî;î@æîBºîG% TVm$‡6AlpineratherthanpartofAlpineitself:Adirectorysystem(mappingtextnamesforfilesintointernalfilesystemnames)isrequiredinordertomakeAlpineuseable,butadirectorysystemsupportingdatabasesneednotaspiretoreplaceIFS.Atsomefuturetime,wemaywishtobuildadistributeddirectorysystemtosupportlocation-independentfileaccessandperhapssomeformoffilereplication.SothereareadvantagesinavoidingastrongcouplingbetweenAlpineanditsdirectorysystem.APup-FTPserver[Boggsetal,1980]isaclientofthedirectorysystemandofAlpine.TheFTPserverisnotrequiredfordatabaseaccess,butisnecessarytoreplaceIFS.AsystemforarchivingfilesfromtheprimarydiskstorageofafileserverandforbringingbackarchivedfilesisaclientofthedirectorysystemandofAlpine.IFSdoesnothaveanarchivingsystem,either.4.Twomajordesigndecisions4.1ImplementatomicfileupdateusingalogThetwotechniquesmostoftendiscussedforimplementingatomicfileupdatearelogsandshadowpages.ApaperontheSystemRrecoverymanager[Grayetal,1981]arguesthatlargeshareddatabasesarebestupdatedusingthelogtechnique,andmanydatabasesystemsuseit.WechosethelogtechniquefortheAlpinefileserver.Butthepublishedliteratureshowsthatalltransaction-basedfileservershavechosentheshadow-pagetechnique[Svobodova,1984].Whatarethetradeoffsbetweenshadowpagesandlogs?Todescribetheshadowpagetechnique,wemustclarifysometerminologyconcerningfiles.Tous,afilepageissimplyafixed-lengthalignedbytesequenceinafile;ifthepagesizeis512bytes,thenbytes[0..511]areonepage,andbytes[512..1023]arethenext.Adisksectorisaregionofadiskthatiscapableofstoringapagevalue.Afilesystemimplementsfilesusingdisksectors.Theshadowpagetechniqueisbasedontheobservationthatthesectorsofadiskarealwaysreferencedthroughalevelofindirectioncontainedwithinthefilesystem.Toreadafilepage,theclientpresentsafileIDandpagenumber,andthefilesystemreadssomedisksectorandreturnsitscontents.Thefilesystemcontrolsthemappingfromthepair[fileID,pagenumber]todisksector;callthisthefilemap.Thefilemapmustberepresentedonthediskinsomerecoverableway,i.e.itmustsurvivefilesystemcrashes.Usingthisobservation,onetechniquethatthefilesystemmayusetoupdateapageistoallocateanewsector,writethenewpagevaluethere,andmodifythefilemapsothatreadsgotothenewsectorratherthantotheoriginal.Iftheclientcommitsthetransactioncontainingthepageupdate,thischangetothefilemapmustbemadepermanentonthedisk,andthesectorcontainingthepreviousvaluemustbefreed.Iftheclientabortsthetransaction,thennopermanentchangetothefilemapneedstobemade,andthenewsectormustbefreed.tïg/î «vï_/î «î1î?îeîIîî ‡ï\úîmîúîÌîGî |î#4î'xî)¶î,¤î/|î4’î6ûî;wî@4îA îG0ïZÆî «îPîïî”î î=î ®î!Èî'‹î+ö î2Íî8Ýî<*î>�îB�îD ïX‘î «îóîHî5î´îŒî! î$kî'öî)þî-øî/| î6Èî<ôîAÊîCÒïV]î «îÈî3îBî!ûî')î*¾î.'î/áî2L î9ûî<î?ŽîAã ïT)î «î YîóîîKîñî#_î'åî*œî,wî2IïQôîmîî,îSxîÝïQôïQôîxî ‡vïQôî"‘î&Uî'Ûî)î,úî.Îî1Hî74î;Êî>œî@oîFïO¿î «îÐîÝîHî½îMîŠî$%î(‹î+ î,xî2‹î4:î8øïM‹îmîóîgî�î”î{î"Ûî%4î*dî-Kî1öî3¨î4Ëî7.î;3î=äî@îE—ïKVî «îjînîÆî¶î�î,î%,î)Öî,¼î.¤î4cî7Iî:¨î=Lî@ÂîBáïI"î «îwïA÷î «î ˆîAîõîyïîB€îEwï4Äî «îîIî©î˜î þî$´î' î) î0;î2ÿî6Õî<}îAˆîD îFTï2�î «î´îRîãîxîóî ‘î%Tî'üî-`î0?î2Üî9q î?—îCâîFîï0[î «îƒîòîˆî Ôî%kî'Ð î0î6c î>5îBÅîF‹ï.'î «î îÆî5î*î!õî$¬ï+òîmî�îêîBî0î p î'î)9î,šî0Ìî4X î;ü îBüîF·ï)¾î «î Ùîxîwï)¾ï)¾î'vï)¾î­îî”îà î#uî(Nî+dî1Rî3î45î7î8ƒî:èî>5î@åîBWîDòï'‰î «îÖîoî îCî@î˜îHî ìî#¨î'@î*=î+uî/#î1{î3ßî7Óî9dxîî)Êî,3î0¯ î8î;î>°îAžï# îmîaîrîÕî Iî!Ñî%Îî'ñî*l î1çî4Ñî7Mî;åî=ºî?îB îDzï ìî « îyîºîíî<îþ î$øî+Lî/šî2î4uî9Þî<î?2î@dîB×îFï·î «îeî¶îÙî<î]î î Mî%Ëî({î*Ôî-7î1«î5Cî8Ïî;·î?§îBXîGïƒî «îøîÐî:î¶î îî#Nî) î,rî.Òî1«î4xî6ùî:@î?ÐîAîDnïOî «î2îÐxî,ïOïOîšî|vîóïOïOîKîî…î!›î%î&ì î.Sî0Uî2±î5›î7Eî:Ô îB$îEPîGˆïî «îîÑî:îµïæîmî\îê îŽî&î%kî(&î*sî,Éî11î4"î6„î8 î< î=·î@êîBCîCÞï±î «î ÞîÖî/îµîîî eî$î(î*Äî/Šî1óî4fî7Šî9Wî<.î?ÖîAÐîC‡îEðï}î «î§î¹îäî—îûî êî"pî$Ôî(™î."î0† î7† î>Dî@¨îCóïHî «îsîAîî›î*îkî ùî#î&öî.î0.î2³î6î8ýî;‚î?  îFï î «î:îâîJî9î§î (î"‡î&Fî*iî,È î4î7@î9Eî@*îDÑîFï ßî «îî/îî¿î¯îÇîî!Þî$Ìî(Äî,,î. ‰TVm$TheAlpinefilesystem7Therearemanyvariationsoftheshadowpageidea.Theylargelyconcernthemanagementoftwopermanentdatastructures:thefilemapandtheallocationmap,whichrepresentsthefreeoroccupiedstatusofeachdiskpage.Variousrepresentationsofthefileandallocationmapsarepossible,andforeachrepresentationtherearemanydifferentalgorithmsthatmaybeusedforupdatingthemapsinawaythatisconsistentwiththeoutcomeoftransactions.Thelogtechnique,ontheotherhand,representseachfileasafileinasimplefilesystemthatdoesnotsupporttransactions.Arequesttoupdateafilepageisrepresentedbyarecordinalog,generallycommontoallfilesinasinglefilesystem.Inonevariation,calledtheredolog,alogrecordcontainsthefileIDandpagenumberofthepagebeingupdated,plusthenewvalueofthepage.Thenewvalueofthepageisnotwrittentotheunderlyingfilebeforetransactioncommit;instead,avolatileversionofthefilemapisupdatedtosaythatthecurrentvalueofthepageresidesinaspecificlogrecord.Tocommitatransaction,writeacommitlogrecordforthetransaction,thenwaitinguntilalllogrecordsforthetransactionhavereachedthedisk.(Somethinganalogoustothiscommitrecordisalsorequiredintheshadowpagetechnique,butwedidnotpointthisoutabove.)Afteratransactioncommits,abackgroundprocesscopiesthenewpagevaluefromthelogtotheunderlyingfileanderasesthevolatilefilemapupdate.Arequesttoabortatransactionisimplementedbyerasingthevolatilefilemapupdate.Therearemanyvariationsofthelogideainadditiontotheredolog;Lampson'spaper[Lampson,1983]containsamoregeneralviewoflogsandtheiruses.Thelogitselfisrepresentedasafixed-lengthfile,andthisfileismanagedasaqueueofvariable-lengthrecords.Thestoragefortheoldestlogrecordmaybereusedwhenthereisnovolatilefilemapentrypointingtoit,thatis,whenitstransactioneitherhasabortedorhascommittedandwrittenthecontentsofthelogrecordtothefileupdatedbythetransaction.Toillustratethedifferencesbetweenthetwotechniques,weconsideraclientthatcreatesatransaction,writes10pagestoanexistingfileunderthistransaction,andfinallycommitsthetransaction.ComparetheI/Oactivityrequiredinashadowpageimplementationwiththatinalogimplementation:Beforecommit,theshadowpageimplementationallocates10disksectorsandwritesnewpagevaluestothem.Italsowritesenoughadditionalinformationtodisksothatthecorrectchangescanbemadeinthefileandallocationmapsregardlessofwhetherthetransactioncommitsoraborts.Afterthetransactioncommitsthenewsectorsareincorporatedintotheexistingnon-volatilefilemapandthe10existingsectorsarefreed.Beforecommit,thelogimplementationwrites10logrecords,eachslightlylargerthanafilepage,tothelog,andforcesthelogtodisk.Aftercommit,itreadsdatafromthelogandwritesittotheunderlyingfile.(Infactthefilewritesarebuffered,andareonlyforcedtodiskperiodically,unlikelogwritesthatareforcedforeachtransaction.)Whichtechniqueispreferable?TheshadowpageimplementationseemstorequirelessI/O,vïgî"Àî%™î*î,ˆtïgîG”vï_/îmîxîÔî¨ îðî ²î#î(î+hî/Oî2áî7dî<šî? îG%ï\ûî «îwî|î¡ î{î!ûî$„î'¾î*•xî-ï\ûï\ûî-Äî3lvî5ãï\ûï\ûî6ßî; îA¯îD.îGïZÆî «î»îÏîÅî3î^î"úî(Mî2î3ûî6˜î9>î<2 îB¯îF‹ïX’î «î€îqîéîT î#…î'Iî)×î-Ûî3» î:¹î=ÂîAîC+îF¡ïV]î «îsîÒîqîîIî!îïî![ î'±î*Ìî-+î2Æî4 ïT(îmîKî¤ îZîgîÌî"qî&N î,Öî0 î2}î41î5aî7Ðî9„î:´î?îA�îFïQôî «îçîhî îòî Šî%kî'$î+Ãî,øî/mî2¿î47 î;¬î=´î>éîCDîDþîF3ïOÀî «î´î†îVîhîxî Hî!”î%¡î(-î-Èî/¹î2‡ î8¼î<Õxî?WïOÀïOÀî?ÛîB}vîDAïOÀïOÀîE?îF‹ïM‹î «îîlîÓîDîrî1î"î'²î)rî+Ùî/&î2øî8±î;²î>îAîD¿îFïKWî «îûîêîïî¯îîõî!Rî"Õî%`î**î+ïî.e î5lî7íîî+�î-7î/Žî2Tî4¬î9nî=î>ÁîAîDXïFîî «î Jîeî@î„î�î¨î!™î"³ î)øî-fî.�î3qî5µî9õî<#î>s îE¸ïD¹î «î{î½î©îøîÈîî!\ î(Tî+–î0´î3î6Ñ î>+îD“îF=ïB…î «î¬îüîhî5îÅî sî"Óî'Éî+ î1Àî4Aî6iî8ßî;Tî>ôîA–îD ï@Pî «îaî¢ î¶î©îê î&�î+xî/¾î25î5:î8˜îî « îuî·îGî"î[î"î$Iî'=î,]î-Ãî2pî3øî7pî8s î?Hî@� ï;èî «î  îJî¢înîÏîâî$Bî(=î*‰î.L î4ƒî65î8�î:Øî=Êî?qîDØîFï9³î «îÜî¨î�înî#2î&Ûî,>î-hî0ûî5Îî9 î:Âî=™î@QîC—ï7~îmî‚îî¬îU î üî"çî$N î,8î/6î2+î5 î7°î9Yî?rîA]îBÄîG%ï5Jî «îùîzî;î!Öî#üî&Dî*/î,kî0¤î3�î5jî9¸î=Vî@ÈîBîD ï3î «î#îKîíîuî1îîî Êî"œî&_î(H î/Rî3Lî5Ïî:éî<»î?>îF'ï0áî «î^î¾î-îæîEî˜î"èî$–î&öî)_î.¹î0µî3 ï.¬îmîà î˜î& î Qî%îî(}î+X î2»î5î:¹î<î@îBÿîG´ï,xî « îMî�îÐîéîæî"$î'|î*4î.„î1t î9î<î@­îFï*Cî « î}îxîÕîžî#eî(òî*�î+Äî0¶î3ú î=Õî@íîC¹îEdîF‹ï(î «ï#¥îÎî+îpî½î  î#Ô î- î3î4äî7¿î<(î>ÍîB¼îE˜ï!qîÎîáîtî¤îî²î!™î&h î,Ä î43î5Çî8šî:Cî<öî?;îC²ï<îÎîUîAîüî¦îîfî! î'Tî*î î1Jî2ÿî8Hî:£ îA›îGïîÎîIî%î î"üî(¾î+\î.ˆî3Aî5Ó î> îA6îCÔïÓîÎ îcîÌîçîžî!ýî#âî(íî-hî/¼ïjîÎîJî¯îî{ î(gî,uî.gî0Çî6î9>î>îB îE>îFuï5îÎîˆîSîÎî–îiî!‡î$î&qî(<î,=î/øî5lî6Þî:˜î=¹îA<îC¸îF'ïîÎîãîLî î€ î ƒî#îî&Jî) î+|î-ùî2î4tî:{î=Eî?«îBØîG0ïÌîÎî¼ îˆîÁî!î%î'åî*8î.}î0ºî3ë ï cîî…îîîk î#.î&î+î.v î8fî9îCîEºÿ ÏTVm$×8becauseeachpageiswrittenjustonce,whereasthelogimplementationwritesdatafirsttothelog,thenlaterreadsdatafromthelogandwritestotheunderlyingfile.Itistruethattheshadowpageimplementationmustalsoupdatethenon-volatilefilemap,whichisnotnecessaryinthelogimplementation,butthisshouldrequirefewerthan10pagewritesbecausemanydatapagesarereferencedbyeachfilemappage.Nowconsiderthefollowingsixadvantagesofthelogimplementation.Theyconsistoffourreasonswhythelogimplementationmightperformbetter,oneaddedfunctionitprovides,andoneimplementationadvantage.Thefirstperformanceadvantageisthatitallowsanextent-basedfilestructure,thatis,afilestructurethatattemptstoallocatelogicallysequentialpagesinaphysicallysequentialmanneronthedisk.Anextent-basedfilestructurehasperformanceadvantagesforbothsequentialandrandomaccess.Theadvantageforsequentialaccessisobvious:theextent-basedfilestartscontiguousandstaysthatway,whiletheshadowpagefilelosesitscontiguitywhenitisupdated.Theadvantageforrandomaccessderivesfromthefactthatthefilemapissmallerinanextent-basedfilestructurethaninashadowpagefilestructure.Thefilemapissmallerbecauseitonlyneedstorepresentthelocationofafewlongrunsofpages,ratherthanrepresentingthelocationofeachpageindividually.Withasmallerfilemap,itislessoftenthecasethanafilereadcausesextraI/Ostoreadthefilemap.ThesecondperformanceadvantageisthatmanyoftheI/Osinthelogimplementationarecheap.Thelogisimplementedasasinglefileandlogwritesarestrictlysequential.Existingdatabasesystemsshowhowtooptimizelogwrites[PetersonandStrickland,1983].Manyclientswillcommitatransactionshortlyafterperformingallofthetransaction'swrites.Inthiscase,thelogrecordscontainingthenewvaluesoftheupdatedpageswillstillresideinthebufferpoolafterthetransactioncommits.Thismeansthatreadingtheselogrecords,whichisnecessaryinordertowritethedatatotheunderlyingfile,usesnoI/Os.Soundertheseassumptions,eachupdatedpageiswrittenoncetothelog(asequentialI/O)andoncetotheunderlyingfile(asequentialorrandomI/Odependingupontheclient'saccesspattern).Thethirdperformanceadvantageisthatthelogimplementationperformsfewerdiskallocations.Logrecordsareallocatedsequentiallyfromaboundedfile;thisinvolvesasimplepointerincrementandtest.Shadowpages,incontrast,areallocatedusingthegeneraldiskallocatorforfilepagesafterall,ashadowpagebecomespartofafilewhenthetransactioncommits.Sotheallocationofashadowpageismorecomplexandexpensivethantheallocationofalogrecord.Therequirementthatdiskstorageallocatedtoshadowpagesnotbelostinasystemcrashincreasesthecomplexityandexpense.Thefourthperformanceadvantageisthatthelogimplementation(atleasttheredologwehavedescribed)defersmoreworkuntilaftercommit.Thisimprovesaverageresponsetimeforupdatesifthesystemislightlyloaded,orheavilyloadedwithaburstypatternofupdaterequests.Iftheloadissteadyandheavy,thereisstillaperformanceadvantageifpartoftheupdateloadisconcentratedonasmallsetofpages.Withtheredologimplementation,aheavilyupdatedpageistïg/î «vï_/î «îÚîîlîäî¤î Sî#þî)Mî+ºî. î8î<î?&îB îCÆîF3ï\ûî «îÑî÷î•îšîî`î ³î#kî'lî)î+z î2jî5¯î7&î8’î;uî>Cî@£îE˜ïZÆî « îÚî‘î­î!�î$? î,#î.Üî2žî6üî8·î;|îAÞîCÜîF‹ïX’î «îî»îˆî 0î%%î)î,nî.î1ñî6î;mî?cîB”îF‹ïV]î « îpîlî�îî ïT(îmîôî•îî Uî"™ î)¼î+œî.#î0žî;§î?WîCúîEÚïQôî «îŽîŒîðîH î"+î&'î+ƒî/Øî2‰î6±î<0î=‹îCwîF3ïO¿î « îŠ ïM‹îmîgîa î‡î#î$­î'�î)î-dî/v î7’î: î@TîCDîE)îFuïKVî «î_î%î¬îRî Iî%­ î,'î/èî1Žî2® î9 î?€îD�îFïI"î «î·î+ îFîÑî"¯î%E î-j î4†î6äî:B î@åîC¾ïFíî «î¿î¬î9î‹ î##î'Eî(Æî.uî0ê î8ùî;xî?! îF'ïD¹î «îôî¹îßî‹îáîÍî# î%jî(±î*ƒ î0æî4’î5ßî7Aî=dî@3îF¡ïB„î «î¾î¾îbî¼î î!¬î$mî&¾î)î,&î-„î2>î3ßî5Á î=­î@ îE¸ï@Pî «î …îÚîûîmî î ñî#õî&Šî)Ðî+gî0[î5¨î7*î:oî>{î@UîFï>î «îÝî�îµîPîdîyî-î"Jî&Rî)s î1Eî3Ÿî8Ñî:„î=°î@ñ ï;çî «î9îsîJîÃîFî¬î'î Íî$pî&àî)Þî-î.Mî0Æî3ñî8:î;½î?î@ÛîDîFuï9³î «ï7~îmîtî4 îgî% î&§î)£î-œî/„î2î5‘î7nî9üî<~ îF‹ï5Iî «îKî îBî“ îËî ^î!nî%?î'Žî*+î,dî0Lî2…î6ç î>îCCï3î «îªî2î6îäî‰î Ûî$Ýî*Ùî-� î4vî8ùî<ïîA4îCÞï0áî «î ö îîÆî# î#vî%‡î'aî)â î1Ûî6ûî8ëî;®î?îA–îD ï.¬î « îNî–îmî…î'îoî$²î(fî*ûî-„î1oî3î5Oî9gîdîAÚîD2îG0ï*Cî «î îîðîúîî!aî#xî'Œî+& î3Rî6”î;ÿî?Wî@ÔîE˜ï(î «î Qî§îñî‹ îîAîðî#-î$Òî') î.î0pî2 î8„î:>î?VîBï%Úî «î@îŸî<îIï#¦îmî5î� î€î"çî$Bî'î)Oî+’ î5`î;+î>åîAà ï!qî «î€îPî¡îe î"øî&\î'‚î-Gî0&î2Åî8î9?î=¡îBgï=î «îmîéî+îYîî"¡î$ÿî*Ðî.„î0îî5Ëî8Äî>hî@°îC$îFùïî «îñîCîvîuîÆî jî#Wî%î&Nî(Áî,€î.é î5ïîsî@Ü îG%ïÔî «î Íî»îúî^îéîeî"î(Xî+vî-Î î4î5·î6Ùî9$î>@îA ïŸî «î’î˜îbîAîî#î&÷î)„î+�î.;î0î1Cî5Öî9‚î?`îAØ ïkî «îcï6îmî>îp îmî#Ýî%Aî(î*`î,¬ î6ƒî8�î;«î>îA,îCxîE˜ïî « î_î‡î*î·î!î$Yî*Uî-î3�î8�î>EîAzîCÇïÍî «î &î î6î»îîî æî%½î*Sî-ˆî.Ìî3 î7ùî9Ìî>zîDãîFï ™î «îî¸î:î:îÑî £î"Xî%Aî&³ î/î5Àî7iî:–î<—î??îDîGsï dî « îËîÕîî¥îÅî‚î#1î&²î)î,Jî.¡î8Üî: î>ÊîD(îGs NTVm$ËTheAlpinefilesystem9writtentoitsunderlyingfileonlywhennecessarytoreclaimlogspace;otherwiseitscurrentvalueresidesinthebufferpoolandinthelog.Theaddedfunctionthatthelogimplementationsupportsisfilebackup.Backupprotectsagainstfailureofthediskstoragemedium,e.g.duetoaheadcrash,bykeepingaredundantcopyofallcommitteddata.Thewholepointoftheshadowpageschemeistowritethenewdatajustonce,butthisisnotconsistentwithadesiretomaintainabackupcopy.Inalog-basedfileimplementation,backupcanbeimplementedbytakingaperiodicdumpofthefilesystemandsavingalllogrecordswrittenafterthemostrecentdump.Itisevenpossibletotakeadumpconcurrentlywithfileupdateactivity,sothatbackupisnotdisruptive.Themajorimplementationadvantageofthelog-basedapproachtoatomicfileupdateisthatitcanbelayeredonanexistingsimplefileimplementation.Thisistruebecausethelogapproachdoesnotrelyonanyspecialpropertiesofhowfilesareimplemented;itsimplyreadsandwritesfiles.Thefastertheunderlyingfilesystem,thebetterthelog-basedimplementationperforms.Thelog-basedtransactionimplementationcanbestructuredsothatmostofitdoesnotdependondetailsoftheunderlyingfilesystem,andiseasytomovefromonefilesystemtoanother.Addingtransactionloggingtoagoodexistingfilesystemismuchlessworkthanwritinganewfilesystemfromscratch,includingallofitsassociatedutilityprograms.4.2CommunicateusingremoteprocedurecallsManyspecializedprotocolshavebeendesignedforaccesstoafileonaremoteserver.Forinstance,XDFSincludedaspeciallytailoredprotocolbuiltdirectlyuponthePuppacketlevel[Boggsetal,1980].Inprinciple,clientsofXDFSviewedinteractionswiththefileserverintermsofthesequenceofrequestandresultmessagesexchanged.Inpractice,clientsofXDFSusedastandardpackagetoprovideaprocedure-orientedinterfacetothefileserver.Oneoftheusualargumentsinfavorofmessage-orientedcommunicationisthatmessagesprovideparallelism:aclientprogramcansendamessageandthendomorecomputation,perhapsevensendmoremessages,beforewaitingforareply.IntheMesaenvironmentparallelismcanbeobtainedbyforkingprocesses,andtheseprocessesarequiteinexpensive[LampsonandRedell,1980].SointheMesaenvironmentitwasnaturaltoviewinteractionswithXDFSasremoteprocedurecalls.Unfortunately,theimplementationofXDFSitselfdidnotreflectthisview(perhapsbecausetheMesaprocessfacilitieswereaddedaftertheprojectwaswellunderway).Inparticular,therewasnocleanseparationbetweenthefilesystemanddatacommunicationscomponentsofXDFS.Forinstance,adatatypedefiningthepacketformatwasknowntothefilesystemcomponentofXDFS.Asaresult,changesinthecommunicationscomponentcouldforcerecompilationoftheentiresystem.InAlpineweenforceacleanseparationbetweenthefilesystemanddatacommunicationscomponents.Thisisdonebydefiningthesystem'sbehaviorintermsofasmallsetofCedarinterfaces,notintermsofanyspecificnetworkprotocol.Theinterfacesareusableeitherbyaclientvïgî"Àî%™î*î,ˆtïgîG”vï_/î «îsî6î% î*î¨î Öî$ î*Èî,‹î1~î3æî8)î>gî@VîE5ï\ûî «î2îàî?înî“îJîøî"XïZÆîmî/î<î îXî¡î!Þ î+¦î1 î2uî4Èî:Lî?+îDBïX‘î «î"îøîtîîNî"2î$Øî'¬î)wî*¾î.8î2Aî4Zî9¢î:éîAªîEîFîïV]î «î�î«î™î½î!rî#Bî%¸î*Ãî.!î3î4˜î6]î9ñî§ïQôî «î~îîö îFî?î#kî$“î)êî-êî/¡î1ÿî4fî8ßî;•î?ËîA¹îD ïO¿î «îSîƒîØî)îAî" î#vî$Öî(î-Hî.ëî1Ùî2÷î6ï î>ÞîAíîDKïM‹î «îÍî‘î_î4î î ïKVîmîKîH î,î%ªî'iî)Îî/þî6î7¸î<9î>©îCBîD´îGˆïI"î «î&îîÊîÀî î›î!ðî$Iî.ãî1íî3Hî6î;-î=}î?¿îE®ïFíî «îîÁî·îGî³ î î!Âî$¶î'“î)Ö î2‘î3×î87î;Åî>lîB]îFïD¹î «îtîÜ îÔîFî "î"Šî&Šî(òî/$ î9 î?ÔîBµïB„î « î½ î±îRî!Y î'óî)Ìî,°î0#î1ñî3]î6£î9.î>/î@KîD°îFï@Pî « î»îDî6î î˜î!»î#‰î'gî*íî-¸î0Aî4Ûî6©î<ÎîAâ ï>î «îƒî,îOî¼îÀî$î"™î#ÿî'Ðî*_î-Öî0öî5£î6Æî9®î<î@‡îCèï;çî «îÀî°îhîC î¯î!²yï6iî «î é î�î.îÉî%vï3îmîˆ î’îªî#î&—î,wî.Ùî3 î4ßî6-î8»î:æî<5îAîF3ï0èî «îCî�î'îBî!Ãî&¿î,î/Xî4?î7Åî:î<ëîA8îDoxï.´î «î Nvï.´îRîþîá îî kî"8î&¦î+a î2Ôî6î8uî:òî?î@ÔîD²îFï,î «î”îMî!îÙî¤î$ ï*Kîmî>î»îî½î î#Xî$„î*"î/fî1î6$î7PîC9ï(î «î fîÒîHîIîZîî‹î"7î(òî*¬î.Lî0î:Ø îD˜îFï%âî «î�î� îîFî# î( î+1î.rî/¡î4þî7»î:çî<óî@Œ ï#­î «î×îîVîèî!î%iî*;î,wî- î2î3Ðî6.î9Ö îAä ï!yî «îîïîƒîbî î"Rî$íî(Zî.;î0rî3ß î;7îA†îD!ïDî «î³îüîëîŒîw î#Èî%_î(Mî-Aî/1î2® î:Nî=«îBGîD7ïî «î.ïÛîm î¤î÷ î#Èî%tî)Âî-î/zî1âî6î8£î;ÑîAjîFï§î «îQî" î�îÏî ïî$(î&„î+î-Åî0° î8Tî: î@ªîD0îFØïrî «î| îQîýîšî!@î%øî(íî,/ î6£ î>Œî@‚îF3ï>î «îPîyî}î�îúî Xî$³î)-î+Øî0]î2 î4jî6Òî;MîBtîD,ï î «î Ÿî¬î²îÁîRî” î%®î,¹î0gî3Ç î<_î=úî@=îD ïÕîmîxî;îžîÄî*î!ú î(Îî.yî1î3»î8rî;fî>§ ï  î « î«îî©îWî�î%9î'Ôî-hî3Tî5>î9Dî;9î<Ÿî@yîBÑîDÆï lî « xî&ï lï lîåvï lî‚î)îìîžî7î#î(jî.¦î1w î7™î9åî>"îBîCüîE ÄTVm$�10thatneedsallthefeaturesofAlpinefileserviceorbyonethatimplementsasimplifiedfileaccessprotocollikePup-FTP.Wewerequitefortunatethataprojecttoproduceageneral-purposeremoteprocedurecallfacility[BirrellandNelson,1983]wascarriedoutconcurrentlywiththedesignandimplementationofAlpine.Oneresultofthisprojectisacompiler,calledLupine,thattakesaCedarinterfaceasinputandproducesserverandclientstubmodulesasoutput.TheclientstubmoduleexportstheCedarinterface,translatinglocalcallsintoasuitablesequenceofpacketsaddressedtoaserver;theserverstubimportstheCedarinterface,receivingpacketsandtranslatingthemintolocalcalls.(WediscussthismorefullyinSection5.1below.)Lupineimposessomerestrictionsoninterfacedesign;itwillnottransmitarbitrarydatastructuresfromonemachinetoanother.Evenso,Lupinedidnotinhibitthedesignofourfilesysteminterfaces.LupinehasmadetheevolutionofAlpinemuchsimpler,becausewecanbuildanewversionofthesystemwithoutinvestingalotofefforttokeepthecommunicationscomponentconsistentwiththefilesystemcomponent.Lupinegeneratesabout6000linesofcodeforusewithAlpine.ItispossiblethatwecouldhavemaintainedthecleanseparationbetweencommunicationsandfilesystemwithoutLupine,andevenwithoutadoptinganRPC-styleinterface,buttheexistenceofLupinereducedthepossibilityofgettingthiswrong.Isageneral-purposeRPClessefficientthanaprotocolthatisspecializedtothetaskathand?Notnecessarily.BirrellandNelsontakeadvantageoftheassumptionthatRPCisthestandardmodeofcommunicationbyoptimizingthepathofaremotecallandreturnthroughthelayersofcommunicationsoftware.Itwouldnotbefeasibletooptimizemorethanafewprotocolsinthisway,soitfollowsthattheprocessoroverheadforanRPCcanbelessthanforthemorespecializedprotocol.Afternormalizingfortheeffectsofusingdifferentprocessors,CedarRPCisaboutfourtimesfasterthanXDFSinmakingasimpleremoteprocedurecall.Withsomespecializedmicrocodeorhardware,thegeneral-purposeRPCcanstillbespeededupbyafactorofthreeormore.5.DesignAnAlpinefilesystemexportsfourpublicinterfaces:AlpineTransaction,AlpineVolume,AlpineFile,andAlpineOwner.ThemosteffectivewayofdescribingAlpine'sdesignisintermsoftheseinterfaces.InmostrespectsthedescriptionsbelowmatchtheCedarinterfacesactuallyexportedbyAlpine.Wehavechosentoomitsomefeaturesoftheactualinterfacesthatareunimplemented,orareimplementedbuthavenotbeenexercisedbyanyclient.OurnotationforproceduredeclarationsisProcName[arg1,arg2,...,argN]>[result1,result2,...,resultM]!exception1,exception2,exceptionK.Normallyanargumentorresultconsistsofasimplename;whenthetypefortheargumentorresultisnotobvious,thenameisfollowedby":"andthetype.Anexceptionisanameoptionallytïg/î «vï_/î «î‹î~îîðî.îùî"�î% î)£î+xî-…î0Bî3" î:�î;Ù îBVîDÑï\ûî «îîÅïZÆîmî*î®îjî�î!‘î"íî'½î)žî/*î0†î:Äî?žîFSïX‘î «î<îìî­îÅî xî#.î'Ôî*S î2Wî5|î7åî<>î? ïV]î «î îî3îîëî§î#^î$äî&(î,Uxî0gïV]ïV]î1Zvî4ƒïV]ïV]î5zî8bî;úî=>îApîG0ïT(î «înî>î3îXî'xî#ïT(ïT(î#„î%þvïT(î+Pî-î2•î5…î9]î<{îA“îFïQôî «îÊ îÎ îŽîÛî"ðî%Ïî&ÿî,î2 î3Ëî8°î? î@ÂîAòîFïOÀî «î¶î¹îÁîî4 î$0î* î.çî1œ î8Sî;Úî>°îAôîEÚïM‹î «îGîçîyî³î`î >î"yî'Ùî, î1àî5r îqîDïKWî «î îªîî€î$î ( î&hî)Íî,xî1ûî3¨î9Œî=î?.îCõîFiïI"î «îBîÈî=îîÌî\î"ý î*Oî/=î1Øî5¾î8Cî>}î@\îEïFîî «îóîîHîÚîî¯î"£î'qî)0î+–î0î5)î;î<0î>Hî@îCØîE�ïD¹î «î îCîl î%Ãî(ßî+?î-©î2% î:*î>óîDüïB…î «îîˆîoîäîOîòî ;î%ùî'žî)8î.¨î1¤î3ùî7óî;g îB½îEJï@Pî « îMîÆ î"î$Èî';î+Àî0Öî6î8Âî<îA(îFîï>î «î- î+î¬î î"èî$¡î)jî.­î1 î7�î9Hî=Ùî@{ï;çîmî îCî^îÊî!oî&×î* î+Gî0Åî3£î5 î<î=Ñî@AîC(îDÑï9³î «îi îùî)îÍî!pî$Vî*ºî,`î.¬ î5×î8’î;Ûî=4î?€îEï7~î «î ½ îÉî î!Pî$î'ˆî)šî+î0î3î6î:˜î@)îBáîG%ï5Jî « îîî¬î!ûî$�î&¡î+Áî-�î3Vî7 î:Pî;šî>[îDnîF=ï3î «îÝî£îûî¹îŠîëî"î'õî*4î,&î/„î2î4î6›î9Ãî<î>dîAù ï0áî «îîÉ îoî¾î"0î&‘î(\î,î1Ï î8Ñî<ûî@iîAæîEÚï.­î «îCîðîîMîèî ¿î!Öî&)î*¾î1/î4qî7Üî;] îB0ï,xî «î oîÐî0î :î#—î&"î(Ãî*´î0î2î4î59î9%î:Þî>hî@,wï%Mî «î ˆvï"îmîDîMî:î9î#�î'î+Õ î2üî?N ïÍî « îéî¬ î(î" î%tî+î-éî/® î6Sî;Áî@îA”îCNîG%ï™î «î5 ïdîmî5î‹î°î î"˜î&žî*»î-î1% î7Hîƒî@êîGï î «îyîçî_îÚî<îþî lî&î(î*rî-,î/Žî3~î5Ôî< î=zî>¦îBh  TVm$7TheAlpinefilesystem11followedby"{",thenalistofthepossibleerrorcodesfortheexception,andthen"}".5.1CedarRPCbackgroundTheGrapevinesystem[Birrelletal,1982]providesanamespaceforusersofthePupinternet.AGrapevinenameforanindividual,suchas"Schroeder.pa",orforagroup,suchas"CSL^.pa",iscalledanRName.Cedar,andinparticulartheCedarRPCmachinery,usesRNamestonameindividualsandgroups.ACedarinterfaceisessentiallyarecordtypewhosenamedcomponentsareprocedures.Aninterfaceinstanceisarecordvaluecontainingnamedprocedurevalues.SotoobtainthevalueofprocedurePininterfaceinstanceIonewritesI.P,andtoapplythisproceduretoparametersargsonewritesI.P[args].Normally,aCedarprogrammodulegetsaninterfaceinstancebybeinglinkedtogetherwithanotherprogrammodulethatproducesthevalue.TheCedarRPCsystemallowsaclientprogramononemachinetoobtainaninterfaceinstanceonanothermachine,oftenaserver.Tomakethishappen,theserverfirstcallstheRPCsystemtodeclarethatitsinterfaceinstanceisavailabletoremoteclients.Thisgivestheinterfaceinstanceaname(anRName),whichisgenerallyjusttheserver'sname.Forexample,aninstanceofanAlpineinterfaceisnamedbyanRNameinthe"alpine"registry,suchas"Luther.alpine".AclientprogramthencallstheRPCsystem,specifyingtheboththeinterface(typeofservice)andinstancename(server)desired.Theclientprogramcanmakecallsthroughthisinterfaceinstanceusingthesamesyntaxasforlocalcalls.Sointhisstyleofcommunicationtheidentityoftheserverisimplicitintheinterfaceinstance,andisnotspecifiedasaparametertoeachprocedure.AclientmustcalltheRPCsystemtoestablishconversationwithaserverbeforeitcanmakeauthenticatedcallstotheserver.Theconversationembodiestheauthenticatedidentitiesofboththeclientandtheserver,andthesecuritylevel(encryptedorunencrypted)oftheircommunication.Byconvention,aconversationisthefirstparametertoallserverprocedures.InourdescriptionsofAlpinepublicproceduresbelowweshallomittheconversationparameter.5.2AlpineTransactioninterfaceTheAlpineTransactioninterfacecontainsproceduresforthecreationandmanipulationoftransactions.AllAlpineproceduresthatmanipulatedatarequireatransaction.TherearetwodistinctservicesbehindtheAlpineTransactioninterface:thetransactioncoordinatorandthetransactionworker.ThecoordinatormanufacturestransactionIDsandplaystheroleofmasterintwo-phasecommit.Theworkerperformsdatamanipulationunderatransactionandplaystheroleofslaveintwo-phasecommit.Ideallythislevelofdetailwouldbehiddenfromclients,buttodothisrequiresthataworkerbeabletocommunicatewithacoordinatorofatransaction,giventhetransactionID.WewerenotwillingtoimplementthisaspartofAlpine,soclientsofmulti-servertransactionsmustdomorework;seeCreateWorkerbelow.vïgî"]î%5î)»î,%tïgîFÍvï_'î «îPîLî¾îäî îKîî!dî&¥î*î-ãî0 î2 î9 î;Äî>êyïY¨î «î éîëîG vïV\îmîHîî�xî!6ïV\ïV\î!Ñî"Èvî#ÜïV\ïV\î$»î(gî-ùî/%î2èî6 î8àîî@îCeïT(î «î 9îýî¾îüîí î"Èî%ûî'ªî1ªî3oî5­î6Øî;3î>eî@ îGsïQóî «îÞxî ïQóïQóîvî|ïQóïQóîRîþîðî!Ú î(Jî*åî/8î2Ð î:î=QîC5îEïO¿î « î²îiïMŠîmîxîUïMŠïMŠî¸vïMŠîîŽ î"<î#‡î'ùî+*î/zî4" î;ðî>e îF‹xïKVî «îKvïKVîŸî î_îÃî!‚ î(Qî,ìî3…î8¹î:Ôî<˜î@òîCfîG%ïI!î «xîAïI!vïI!î¿îî8xî ˜ïI!vïI!î!Éî$‡xî(œïI!ïI!î)7vî*vïI!ïI!î+eî./î/ðî3Íî6�î=î>Ø xîEñïI!ïI!îF¡vïFíî «îWxîYïFíïFíîôvîyïFíïFíîÙî^î ‡î$Ÿî*.î/.î1ûî3ìî9‘î>ßî@ÚîD¥ïD¸î «î'îZî~î%î$=î'#î-î/�î4Fî77î;gî>ÜîCoîG´ïB„î «îyîî)îáîsî!/î%�î'~î-1î2Œî4 î9¸î?¢îCCîDzï@Oî «î èî³îjîÃî8î [î#Iî&nî(ãî,Vî0çî2«î7î:cîî «î^îî£î²îÄî#.î%…î+"î0gî1‰î5@î7¡î=�îA”îBøï;æî «îSî¹î¨îOîî"Øî$Îî*"î+áî-×î2cî8î9�î> î@îBîG0ï9²î «î îîUîzî�î!î'¬î)î,Àî22î5;î8.î:qî=±îBg ï7~î «îîNî±îZîæî£î#¦î&`î+±î/tî4vî:"î<ýî@ÁîFSï5Iî «îYîaî’î-îËî%î(µî+ î.ƒî2Áî4hî6žî9Ýî=»î?ºîAaîCüîG%ï3î « î`îÂîÏîŠî ëî$úî&gî+tî-$î/†î5-î:Õî=Žî>ûîArîG0ï0àî «î ÕîWîî7 ï.«îmîîñîuîî—î î$¦î&pxî,'ï.«ï.«î, vï.«î4î78î8~î<¦îAîBƒîE*ï,wî « î$î+îÒî*î î"Ô î*Åî0èî3@ î;¸ îA˜îCJîFï*Cî «îiîîyîÛî�îëî"þî&A î-î.Ú î7@î8öî<: îFÂï(î « î<î� î­î@î Æî#Åî*nî,Dî.[î2� î:Àî<¶î?h îG%ï%Úî «î1îl îsî€î!§î$âî(î*} î2v yï [î «î éîRvïîmî›îgî#cî) î0yî3 î5Âî;Zî>h îG%ïÛî « îîZîà î!çî$µ î+Ýî.âî3«î4Õ ï¦îmîFîpîòîžî î$þî'4î2� î8wî:­ îA€ ïrî «î‰î î2îî! î(… î1* î8Mî;î=ýîA¬îD2îG%ï=î «îî¸î2îýî Ìî%jî+>î.: î6™î:“î;´ îB§îEVï î «îîËî~îßî‡îî#Óî(^î*ùî.9î/ìî3±î7Ùî9Ãî>fîAÇîF]ïÔî «î _îkîîcî7îfî î"î%î&¹ î/1î2Qî3€ î:äî<¢î=Ñ îE*ï  î «î ñ îÔî¤îîLî¨î$î%¨î,tî.üî0�î3Zî4úî9¾î;hî?“îA3 ï kî « î,î”îšî-î $î"w î+bÿ TVm$k12AtransactionIDcontainsenoughunpredictablebitssothatitisextremelydifficulttoforge,andcanbetreatedasacapability.AnyclientthatknowsthetransactionIDmayparticipateinthetransaction.Itisusefulforaserveradministratortobeabletobypassaccesscontrolchecksinsomesituations,whileobeyingtheminnormalsituations.Weallowanadministratortoexplicitly"enable"aspecifictransactionforaccesscontrolbypassing.Create[createLocalWorker:BOOLEAN]>[transID]!OperationFailed{busy};Calltocoordinator;requeststhecoordinatortocreateanewtransaction.IfcreateLocalWorker,thecoordinatorcallsCreateWorker[transID,RName-of-this-server].RaisesOperationFailed[busy]iftheserverisoverloaded.CreateWorker[transID,coordinator:RName]!Unknown{coordinator,transID};Calltoworker;informstheworkerthattransactiontransIDisbeingcoordinatedbytheAlpineinstancecoordinator.RaisesUnknown[coordinator]iftheworkercannotcommunicatewithcoordinator,andUnknown[transID]iftransIDisunknowntocoordinator.Ifthisprocedurereturnswithoutanexception,theworkeriswillingtoperformAlpinedatamanipulationproceduresusingthistransaction.Finish[transID,requestedOutcome:{abort,commit},continue:BOOLEAN]>[outcome:{abort,commit,unknown},newTransID];Calltocoordinator;requeststhecoordinatortocompletethetransaction.WhenaclientusingatransactionhascompleteditscallstotheAlpinedatamanipulationprocedures,itcallswithrequestedOutcome=committocommitthetransaction.Togiveuponatransactionandundoitseffects,aclientcallswithrequestedOutcome=abort.Ifthetransactionhasalreadycommittedoraborted,thisproceduresimplyreturnstheoutcome,whichisunknownifthetransactionhasbeenfinishedformorethanafewminutes.Acallwithcontinue=TRUEcommitstheeffectsofatransaction,thencreatesandreturnsanewtransactionthatholdsthesamedatastate(locks,openfiles,andsoforth)astheprevioustransaction.SystemRcallsthisasavepoint[Grayetal,1981].Thisfeatureencouragesaclientthatismakingmanyupdatestocommitperiodically,wheneverithasmadeaconsistentsetofchanges.AssertAlpineWheel[transID,enable:BOOLEAN]!OperationFailed{grapevineNotResponding,notAlpineWheel},Unknown{transID};Calltoworker.Whencalledwithenable=TRUE,causessubsequentAlpineprocedurecallsforthis(conversation,transID)pairtopassaccesscontrolcheckswithoutactuallyperformingthechecks;raisesOperationFailed[notAlpineWheel]ifthecallerisnotamemberoftheAlpineWheelsgroupforthisserver.Whencalledwithenable=FALSE,causesnormalaccesscontrolcheckingtoresumeforthis(conversation,transID)pair.tïg/î «vï_/îmï_/î î2ï_/îyîûî$ î,Íî/�î1pî4\î5Ñî7\î=ÏîC&îDóï\ûî «îfîõîéîŠî;îi î!Œî$“î(Wî+(î/oî1Ò î8Òî:ýî> îDÍîFïZÆî « ïX’îmîÆîî î,î7î% î$yî& î'Ûî*¶î,Fî0˜î4‡î9î=cî>òîBg ïV]î «îTîîýîŸîQ î%4î'³î+Qî-5 î5œî7? î=îBÖîCôïT)î « î§îåîòî¥î#ïyïQ!î ½zïQ!î-{îØïQ!ïQ!î‘zî$xïQ!{ïQ!î%Ezî'VïQ!ïQ!î'¹ïNìîÎîËî ïL¸îÎî»îj îBî!›î#ú î+Yî-î1 î23î5! î<ùxïJƒî¡zîäïJƒïJƒîÀî î&~xî)�ïJƒïJƒî*‹zî7ÂïJƒïJƒî8ËxîD¨ïJƒzïJƒîEïHOî¡xîäïHOïHOîøzïHOî"Pî#±î&î*î+ˆ yïEGî ½ zïEGî²îy î$QïCîÎîËî7 îžï@ÞîÎî»îjîŠîŸî þî%¥î(s xî/oï@Þï@Þî/ßzï@Þî4‰î5õî9À îAKîCGï>©î¡î&xîtï>©ï>©î zî!ï>©ï>©î"{xî&¿ï>©ï>©î'Ózï>©î4tî5Õî85î<ÛïîBhï.fî¡îJît îpîåî%”î'nî*~î,,î.‹î3î6 î>~ îEÝï,2î¡î°xîËï,2ï,2îOî!òî#×zï,2î(¦î*Uî/Uî1´ î9Œî;³î> î@³îB¹ï)þî¡ îœîTîèîÂî$kî%”î)Uî,dxî/~ï)þï)þî0î:¦î<‹zî?‘ï)þï)þî@ñîBsï'Éî¡ îœîîåî%Àî'„î,èî/‰î6 î:|î?/îAŽï%•î¡î®xîï%•ï%•î×zï%•îöîVî¶ î&²î)'î,ƒî1Æî4î7–î:¼î;æî>‡ï#`îÎîZîåxîï#`ï#`î›îw|î\ï#`ï#`îzï#`î"î'ˆî)çî.7î/ðî1 î8nî;”î@îBÒîG…ï!,î¡î� î‹îYî!î#mî&êî)ïî- î1oî4âî8(î:ßî<£î@�îB=ï÷î¡î0 îî"Åî$Sî'bî*xî+-ï÷ï÷î+±î.zï÷î1’xî5~ï÷ï÷î6î7 zî8!ï÷ï÷î8ýî=‚î@œïÃî¡ î²îÜîœîjî Öî%¿î)‰î.¡î0Oî5O î=îCPîD¦ïŽî¡îaîŠ îáîþî¶yï†î ½zï†îŠï†î6{î$ï†ï†î$Îzî)µï†ï†ïRîÎîËî î+Éî7î=‰ ïîÎî»îjîìîî!üxî%ïïî%±î)S|î+8ïïî+ñzî.[ïïî/7î3q î:šî? îE£ïéî¡îÞî xîJïéïéîºzî"àïéïéî#Ýî&¶î(dî+]î/kî4î8ƒî=�ï´î¡ îÒî2îxî"Ñï´ï´î#äzï´î7î8iî:Èî>}î?éîB^ï €î¡îîÈî' î#î' î)Fî+èî0Ðî4èî8ßxî;úï €ï €î<•zï €î@7{îBï €ï €îBÕzîEºï €ï €ï Lî¡îÚî—î¥î"Wî(î)Âî.Šî0Çî3i î<3îA¸ÿ jTVm$qTheAlpinefilesystem13RaisesUnknown[transID]iftransIDisnotknowntotheworker.ThismightbebecausetheclienthasnotcalledCreateWorker,orbecausethetransactionisalreadyfinished.5.3AlpineVolumeinterfaceAvolumeisanabstractionofaphysicaldiskvolume.Thereareseveralreasonsforhavingavolumeabstraction.Ifavolumecorrespondstoadiskarm,thenclientshavetheabilitytoimproveperformancebydistributingthemost-frequentlyaccessedfilesacrossseveraldiskarms.Avolumemayalsobetheunitofscavenging,solimitingthesizeofvolumessetsanboundsthetimetorestartifasinglevolumeneedstobescavenged.Alpinedoesnothaveanyambitionsofitsownforvolumes;itjustuseswhatevervolumestructureisprovidedbytheunderlyingsimplefilesystem.AlpinedoesassumethatvolumeIDsaregloballyunique.Aserveroftencontainsseveralvolumesthatareequivalentfromthepointofviewofitsusers.Inparticular,ausermaynotcarewhichvolumehecreatesafileon.Forthisreason,anAlpinefilesystem'svolumesarepartitionedintooneormorevolumegroups.Agroupcontainsoneormorevolumes,andeveryvolumebelongstoexactlyonegroup.Diskspacequotasforownersaremaintainedforvolumegroupsratherthanindividualvolumes;seetheAlpineOwnerinterfacebelow.Whencreatingafileaclientmayspecifyavolumegroup,ratherthanaspecificvolume.Alpinethenselectssomevolumeinthegroupandcreatesthefilethere;seeAlpineFile.Createbelow.AnyprocedurethattakesantransIDparameterraisestheexceptionUnknown[transID]ifthetransIDisnotknowntotheworker.ThismightbebecausetheclienthasnotcalledAlpineTransaction.CreateWorker,orbecausethetransactionisalreadyfinished.Weshallnotmentionthisexceptionintheindividualproceduredescriptionsforanyoftheproceduresinthisorthenexttwosections.GetNextGroup[transID,previousVolumeGroupID]>[volumeGroupID]!Unknown{volumeGroupID};Statelessenumeratorfortheon-linevolumegroupsofthisAlpineinstance.CallingwithpreviousGroup=nullVolumeGroupIDstartsanenumeration,andvolumeGroupID=nullVolumeGroupIDisreturnedattheendofanenumeration.GetGroup[transID,volumeGroupID]>[volumes:LISTOFVolumeID]!Unknown{volumeGroupID};Returnsthelistofvolumesbelongingtothespecifiedvolumegroup.5.4AlpineFileinterfaceAfileisasetofpropertyvaluesandasequenceof512bytepages,indexedfromzero.Eachfileiscontainedinasinglevolume.AfileisnamedbyafileIDthatisuniquewithinthecontainingvolume.AUniversalFileisaglobally-uniquefilename:a[volumeID,fileID]pair.vïgî"]î%5î)»î,%tïgîFÍzï_,î¡xîäï_,ï_,îøzï_,î ‰xî!êï_,ï_,î"Zzï_,î'î(pî*åî/jî1î3xî8ûî<î@ îAýï\øî¡îîÀî5îªî¢ î(åî*©î/Êî2* î9&î:‘î?eyïWyî «î é î½vïT-îmxîïT-ïT-î©vïT-îÃîDîI îZî!(î"gî'Éî*Ìî0»î4Ñî7:î;ßî@ÒîC$îG´ïQøî «î“ îgîçîîö î'•î)Bî*jî-Vî0„î3¨î7ëî;/î=�îAÄîCqïOÄî « îÁîÍ î>î¯î)µî/@î2?î6\î:þî=ýîBWîCõïM�î «î¥îgîMî¢î|î* î!hî#!î(7î*Œî--î.Üî4?î6Öî8¼î=‘î?æîCîD¥ïK[î «î Aî îÀîÞîôîØîý î'Åî,€î/åî2�î6 î8àî?kîAYîChîF¡ïI'î «î±î&îæîþîúî$î)Ýî+hî1Xî3sî5ñ î=îAƒîD ïFòî «î1îbî*îøîâî"Žî$áî*ïD½îmîÿîî©îî!§î'î)íî,E î2ùî6eî8Êî,îAlîC*îE ïB‰î «î u îýî îîî�î iî$qî)Uî+?î/Àî0äî3Gî6î8Ãî;_î@ îAõîFuï@Tî «îîžî î &î#î%Øî'³xî+\ï@Tï@Tî+÷î0vî3êï@Tï@Tî5xî7î;4î@®îCpîEKï> î «î¿îÅîÇîÿî#Wî%Tî*?î-9î2³î6Gî:Kî>ÿîA‹îF‹ï;ëî « îÈîúîÙîTî"Wî%r î+êî1Æî4î6c î>ßîDzï9·î «îÞî0îuîùî=îî!7î%îî'2î,6î0¬î4Ôî8î9Yî>^îDXï7‚î «îÒîî©î’îAî î#¢î&Zî*àî-@î/©î3¬î5ÿîAï5Mîmî�î-îî²xî Àï5Mï5Mî!0vî%÷ï5Mï5Mî&¾î,–î0rî2îxî9@ï5Mï5Mî:Tvï5MîEîFxï3î «vï3îVîQîVîkîªî ™î';î*åî/lî1ìî7žî:�î>ÝîAâîDçï0åî «î î!¶î&µî(ò î/Ëî1î5Åî;žî>îAîCpï.°î «îPî‰î:îœ î"î%¨ î-Aî/‚î2&î3âî6E î=Oî?îA¥îClîEÏï,|î «îWyï)sî ½ zï)sîîæ{ï)sî- zî/ï)sï)sî/ ï'>îÎîËî7ï% îÎîS î±îïî!Nî&î*éî/pî1)î3Êî8Pî=õîB½xï"Õî¡ îƒîhzï"Õî'ûî+�î- î5Üxî8“ï"Õï"Õî9. îB�ï  î¡zï  î3îŸî$:î%Òî(2î*éî,¢î.’ yï—î ½zï—î2îù {ï—î$Åzî&Öï—ï—î':{î-!ï—ï—î-Úï—î0 zï—î2:ïbîÎîËî7ï.îÎîîeî¢î[î Éî')î(Øî+7î0óî5Üyï¯î «î é îvïcîmxî ïcïcîwvïcîlîçî îLîî¾î"ûî%Âî&ûî,óî.»î1_î4~î8±î=÷îAmîEkï.î «îî`î›î9îSî.î!Óî#Oî%¨î'î+zî-eî.î0Øî2ðî5®î7 î;¡î?ÖîB% ï úî «îpîý î„îðîî'íî*Vî.�î/¹î5î7†î9ïî îEÎxï\òî «vî­ï\òï\òîƒî—xîKï\òï\òîüvî Öï\òï\òxî!¬ï\òï\òî"G vî(Íï\òï\òxî)£ï\òï\òî*vî/Zï\òï\òxî00ï\òï\òî0àvî3¥ï\òï\òxî4{ï\òï\òî4ÿ vî=ï\òï\òxî=òï\òï\òî?vîHï\òïZ¾î «xîcïZ¾ïZ¾î vîàïZ¾ïZ¾ïX‰îmîùî0î«îWî‡î"Óî%éî*�î/Qî2Õî4Ÿî7]î<î@ îF‹ïVTî «îÆî}î0î,îpî(î#®î)Šî+�ïT îmîïxîOïT ïT îÿvïT î>î î†î] î$Oî&Aî(–î-±î/`î0î4ðî6ªî7Êî<”î>îC§ïQëî «î »î.î_î+î¦îèî —î$¢xî'ïQëïQëî'Æî+#vî0$ïQëïQëî1î2” î9îî «î .îòîhî;î‚îëî /î%áî)‹î/î0Eî4áî9î;±xî>'ï>ï>î>×îB7îFGvîHï>ï;Þî «î‡îîJî îQîLî"Gî$’î&�î+³î.™î2qî48î6¤î:ßî>ïîA:îB´ï9ªî «îkî…îåîJîÍï7uîmîîîKîDîîÖîcî!·î$bî(…î-èî00 î7 î=Œî?|îDÆï5Aî «î ÚîHî¹î‡î|î:îîèî"4î(Æî.’î1Oî5î67î8¥î:î@îBg ï3 î «îmî«î0îhî"7î(dî-Éî0 î5î7Åî>JîC¤îETîFuï0Øî «î *î4xî!ï0Øï0ØîÞîFîvîï0Øï0Øî› î$Áî'4î*lî.?î1åî3dî5Öî9/î>nî@:îB­îE˜ï.£î «îÊî[î­î‰î!²î%uî) î-=î1Æî3xî9!î>;î?íîBPï,oî «î�îiîÜîHî3îlî"?î%åî'd î/ê î7%î94î=Íî?ŽîClîE8îFuï*;î «î ÷îúîsî•îMîÐî•î!©î$î'î*Öî.a î5 î<î>vîA“îEKï(î «î îAîîÒîÄî’î&î$î&Bî(«î*dî+Žî.Óî4Bî6–î8œî<à ï%Ñîmî‹ îªîÊî*îKî î#axî&/ï%Ñï%Ñî&àvï%Ñî)eî+„î1 î2@î4¡ î<Þî@^îE@ï#�î «î ïî~î–î}îqî¾îîùî ;î&2î+pî0Šî1Î î7æî8ýî<<îA xîCWï#�ï#�îDï!hî «vî Zï!hï!hî4îMîu îaîjî!!î$Pî'î(†î+Ÿî-™î/öî4î6¶î:î<„î>sîDîE­ï4î «î�îîîAîOî´ î&tî'Ûî,î0Þî5)î7î8|î<¥î?LîCŒîDóïî « îçîSîÛîéî"…î&Åî,î.ë î5Gî6£î:î<î@F îGïËî « î³îÎî.î¢îèî"î&1î'\î+î,Ìî1_î4¼î6kî<• îCCîEJîFuï—î «îòîRî²îrîç î :î!èî%[î'ºî*$î,aïbîmîE îLîî %î#lî'šî)Hî+ÿî/fî2Ùî5Æî:°î<¶î?ÑîAŠ ï-î «îÄî=îwîî î&î'²î+sî.7î0€î3î8…î:4î<‰î?òîC.îF'ïùî «î\îºî/îtîfî!l î'í î.Wî/âî2xî40 î;„î?Nî@¹îFãïÄî «î Õî6î` îp î$Úï �îmîûîý î î!¦î%òî)¤î+[î0 î7î;î<Óî?ÉîC9ï [î « î î” î î#> î)¬î,eî/®î5bî8âî<+îAîBnîE¬îG´ÿ TTVm$ŸTheAlpinefilesystem15file,thefilepropertiesarelockedasaunit.Insteadofhidingthesefactsfromclients,weallowclientstoinfluencethelocking.Thechoicebetweenwhole-filelocking(thedefault)andpagelockingismadebytheclientatthetimeafileisopened.Lockingisalsoperformedimplicitlyasasideeffectofreadandwriteoperations.Areadaccesslockstheobjectinreadmode(thedefault)orwritemode,whileamodifyaccesslockstheobjectinwritemode.Aclientwhoissatisfiedwiththedefaultbehaviorneednotbeconcernedfurtherwithlocks.Butmoreambitiousclientsmayspecifypagegranularitylocking,mayexplicitlysetlocksinordertoreserveresources,andmayexplicitlyreleasereadlocksbeforetheendofatransactiontoreduceconflicts.AnumberoftheAlpineprocedurestakealockOptionparameter,whichisusedtospecifythedesiredlockmodeandtoindicatewhatAlpineshoulddoincaseofaconflictintryingtosetthelock.IfthereisaconflictandlockOption.ifConflictisfail,theprocedureraisestheexceptionLockFailed.IflockOption.ifConflictiswait,theproceduredoesnotreturnuntileitherthelockissetorthetransactionisaborted.Alpineplacesfewrestrictionsuponitsclientswhenitcomestoconcurrentoperationswithinasingletransaction.Locksdonotsynchronizeconcurrentprocedurecallsforthesametransaction;thisistheclient'sresponsibility.Itisperfectlyoktohave,say,7ReadPagesand2WritePagescallsinprogressatthesametimeforonetransaction.Itisprobablynotusefulforareadtobeconcurrentwithawriteofthesamepage;theresultofthereadwillbeeithertheoldvalueorthenewvalueofthepage,butthereadercannottellwhich.ArequesttocommitatransactionwhileanotherAlpineoperationisinprogressforthetransactionisaclienterrorandabortsthetransaction.AnyprocedurethattakesanownerorvolumeIDparameterraisestheexceptionUnknown{owner,volumeID}ifthecorrespondingargumentdoesnotidentifyanexistingobject.AnyprocedureraisestheexceptionStaticallyInvalidifitdetectsanoutofrangeargumentvaluebysomestatictest,forinstanceaninvalidvaluefromanenumeratedtype.AnyprocedurewithalockOptionparameterraisestheexceptionLockFailediflockOption.ifConflictisfailandthelockcannotbeset.Weshallnotmentiontheseexceptionsintheindividualproceduredescriptionsinthissectionorthenext.Create[transID,volumeID,owner:RName,initialPageCount,referencePattern:{random,sequential}]>[openFileID,universalFile]!AccessFailed{ownerCreate,spaceQuota},OperationFailed{insufficientSpace}.CreatesandopensthenewfileuniversalFilewithinitialPageCountpagesundertransID.volumeIDmaybeeitheraspecificvolumeIDoravolumegroupID;inthelattercase,theserverchoosesamongthevolumesofthegroup.Theclientmustbeamemberofowner'screateaccesslist,andtheallocationmustnotexceedowner'squotaorthecapacityoftheserver.Allfilepropertiesaresettodefaultvalues:byteLengthandhighWaterMark:0,createdTime:now,readAccess:"World",modifyAccess:"Owner"plusowner'screateaccesslist,owner:owner,andtextName:emptystring.Ifthecallissuccessful,thenewfileislockedinwritemode,andtheclienthasread-writevïgî"]î%5î)»î,%tïgîFÍvï_/î «î�îîŸ î9î°î!8î# î$Vî([î-Rî/.î3¡î7Mî:¡î>+îBëîE5ï\ûî «îðîžîœîüïZÆîmîVî¬î+ î!§î&‹î)uî.§î1oî4Çî9«î;'î>øîAîCuîGFïX’î «î&îfî«î/îµî¦î"î#Ÿî&†î-e î3žî5gî6¬î9Ÿî=…î?YîBŽîEaïV]î « î#î¦î·î¼î0î!†î%–î';î*Lî.î0èî6î7¼î;0î?UîCîD!ïT)î «îÂîHî±îÓîŠîî#Õî%jî)4î,Aî-¶î3 î60î8˜î=JîCîFiïQôî «î ©îNîî*î �î#Kî&êî-Mî1žî4¯î9Xî<« îC³ïOÀî «îÉ îËîî™îaî /î!øî&à î-3î0î3" î9$î=Äî@øîD�ïM‹î «î îÂî{î¥ î¡îOî Ë ïKWîmîî>îîoî î%î(xî)OïKWïKWî)²vïKWî0[ î7Aî;[î<Óî@îAÖîFïI"î «î‡î’îzîDîî!Dî$´î)Lî-Ûî/ôî1´î4µî6�î7½î<ºî>zîB�îDOîFïFîî «îîÉî”îBî®îÛxî ÕïFîïFîî!8vî'PïFîxïFîî'¨ vïFîî-íxî/›ïFîïFîî0 vî1€ïFîïFîî2Ÿî5Aî<î@îB©xïD¹î « vî›ïD¹ïD¹îxîïD¹ïD¹îvvîŽïD¹xïD¹îå vïD¹î!Þxî#?ïD¹ïD¹î$&vî%ªïD¹ïD¹î&|î(Ñî/Jî2pî4Úî8þî<;î@îBrîE`îFÁïB…î «î oîÏ îËî6ï@Pîmîþî!îÍ î Óî$rî&Xî*§î.gî/Èî4î5» î<¬ îCeîG´ï>î «î² îÀîÜîþî Ž î(4 î/5î5Óî8þî;Vî=ÑîAi ï;çî «îLî·îî²îÿî!vî"áî(‘î*Œî,9î/Øî2Žxî3Âï;çï;çî4¿vï;çî:¦î=]xî>‘ï;çï;çî?òvï;çîEÏï9³î «î FîŸî$îpîÙîêîî!¬ î)\î*¿î,î1Õî46î8;î:dî;zî>€î@îAø ï7î «îÓî î“îYîÅîNîî!‡î%_î'$î)�î,·î/oî1lî5eî7Ñî:Gî=þî?ÎîB:îE5ï5Jî «î ŒîîÙî�îîtî"î$�î)Öî+Šî0†î2[î7ƒî8Ô î?÷îCÓï3î «î1î[îÇîuîâî!î# î*{î+çî-î0Ñî4Bî6úî;î=} ï0áîmîUî¼înîÐxî¥ï0áï0áî Uvï0áî#ƒxî%+ï0áï0áî%Ævî+^ï0áï0áî,%î1Åî5hî7¬xî=Åï0áï0áî>Ùvï0áîCÜxîDŒï0áï0áîE=vîHï0áxï.­î «vîvï.­ï.­îŸîõîI î4î%Sî(xî*âî/íî1Òî6Ñî;¯î>§îEï,xî «îxîgï,xï,xîDvï,xî¡î î!î&&î()î*²î,î0]î6šî:Wîî@ îCîE£ï%Ûî «î îŽî îÑîî!ß î(aî.ä î6zî8(î:Êî?fîA*îCŠyï"Óî ½zï"Óî-îóîØî#î(üî3Âî>~ï žî ½ îSîè î ïjîÎîË îû î" î*zî4¼ï5îÎî·îoîfîÅî ³xî#ï5ï5î#Ù zï5î+xî.)ï5ï5î.�zï5î8–îî �î& î'Äî*#î.}î1Uî5î8}î:nî;˜îAxîB¿ïÌïÌîCozîF4ïÌïÌîFŒï˜î¡î£î±îGîþî ] î&�î*î,zxî1ï˜ï˜î1±zî4vï˜ï˜î4Îî5×î9¹î;}î=ÜîC*îDãïcî¡ï/îÎî!îŠ îîUîqî! î%Èxî*pï/ï/î+ zï/î1~xî46ï/ï/î4ó zî=³ï/ï/î>±xî@>ï/ï/î@Ù zîG_ï/ï/ïúî¡xîýïúïúî�zîSïúïúîQxî!Yïúïúî"o zî)ïúïúî*î0xî2üïúïúî3¬zî6qïúïúî6Éî7Òî;Õî?âîBxxï Æî¡zîï Æï Æîóxîªï Æï Æîzîaï Æï Æî_î"˜ï ‘îÎîPî¯î:î¦ îUî ´î#¢î& î'wî+Ýxî-‹ï ‘ï ‘î.rzï ‘î0éî5î7Îî:.î=îî@c ÿ TVm$Ð16accesstothefileusingopenFileID.AlpineusesthereferencePatternparametertocontrolread-aheadandbufferreplacementstrategiesforthefile.Open[transID,universalFile,access:{readOnly,readWrite},lock,referencePattern:{random,sequential}]>[openFileID,fileID]!AccessFailed{fileRead,fileModify}.OpensanexistingfileuniversalFileforaccessundertransID.Thefile'saccesslistsarecheckedtoensurethattheclientisallowedtousethefileasspecifiedbyaccess.Ifaccess=readOnly,theclientisrestrictedtoreadoperationsonopenFileID,eveniftheclientpassesthechecksforread-writeaccess.Theentirefileislockedinlock.mode;lock.ifConflictisalsorememberedandisusedwhenperformingcertainfileactions(e.g.,Delete)thatdonotallowaLockModespecification.AlpineusesthereferencePatternparametertocontrolread-aheadandbufferreplacementstrategiesforthefile.AfileIDconsistsofboththefileidentifier,whichispermanentlyunique,andsomelocationinformation,whichistreatedasahint[Lampson,1983]andissubjecttochangeduringthelifetimeofthefile.OpenreturnsafileIDwhoselocationhintmaydifferfromthehintinthefileIDthatiscontainedinuniversalFile.WhenthefileIDchanges,theclientshouldstoreitinitsowndataordirectorystructuressothatsubsequentOpencallswillbemoreefficient.Close[openFileID].BreakstheassociationbetweenopenFileIDanditsfile.ThenumberofsimultaneousopenfilespermittedononeAlpinefilesystemislargebutnotunlimited;clientsareencouragedtoclosefilesthatarenolongerneeded,particularlywhenreferencingmanyfilesunderonetransaction.Closingafiledoesnotterminatethetransactionanddoesnotreleaseanylocksonthefile;nordoesitrestricttheclient'sabilitytolaterre-openthefileunderthesametransaction.Delete[openFileID]!AccessFailed{handleReadWrite};Firstlockstheentirefileinwritemode;thendeletesthefile.openFileIDmustallowread-writeaccess.DeletemakesopenFileIDinvalidforsubsequentoperations.Theowner'sallocationiscreditedwiththereleasedpageswhenthetransactioncommits.ReadPages[openFileID,pageRun,resultPageBuffer,lockOption]!OperationFailed{nonexistentFilePage}.ReadsdatafromthepagesdescribedbypageRunofthefileassociatedwithopenFileID,andputsitcontiguouslyintoclientmemoryintheblockdescribedbyresultPageBuffer.AResultPageBufferconsistsofapointerintovirtualmemoryandawordcount;Lupineunderstandsthatthecontentsoftheblock(notthepointerandcount)istherealvalue,andthatthisvalueisreallyaprocedureresult(notanargument).tïg/î «zï_,î¡î®î]î¼î%xîÏï_,ï_,îzî%uï_,ï_,î&Õî+[î.Txî0´ï_,ï_,î18zï_,î:ÊîALîBûï\øî¡ î³îjî™ î&[ î,Nî.‹î0ëyïYïî ½zïYïîrî8 î¿î$F î+W î2Öî6(î@ãïWºî ½ {ïWºî8zîIïWºïWºî¬ înïU…îÎîË îû îˆ ïSPîÎîî îxî�ïSPïSPî> zïSPî%sî'°î+¾xî/ÁïSPïSPî01zî4WïSPïSPî5·î8�î;Õî?âîB¤ïQî¡îïî�îîÑî!0î$ñî&\î+rî- î/•î1õî4^î6 î;Èxî=ÄïQïQî>tzîAMïQïQîB­xîD/ïQïQîDßïNçî¡î†zîàïNçïNçî½îîÜî H î&Gî'õî+ î1¾xî3ÄïNçïNçî4tzî:jïNçïNçî;Fî>�î?íîBMïL³î¡îÄî#î‰îÆ î$Tî)=î,î0î2jî3Öî8;xî9éïL³ïL³î:Mzî?ÉïL³ïL³xïJ~î¡zïJ~îqîÝî© î%­î(eî)Ðî- î0Á î7óîãîC€ïHJî¡î€îNîUîÊî sî!œî(— î1Wî5Üî8Öxî;5ïHJïHJî;¹zïFî¡î#îÑî„ î$–î'Mî+| î3> î91î;nî=ÎïCàîÎîZîÄîëîëî¤îáî"@î$© î*ôî/î0n î8gî=hî@ïA¬î¡îØ îºî!Èî#3î'Ñî)î*©î-Œî4Pî7ùî:°î<î@ÅîBsï?wî¡îîqî{î4î ”xî#Ùï?wï?wî$ìzï?wî'zî,-î-Wî/Àî1èî6î;Mî>1îA5îEï=Cî¡îîäî’îñî[îƒî!Qî"¼î)xî*¶ï=Cï=Cî+s zî2$ï=Cï=Cî3„î7œî9ûî�îDï;î¡îaîÝî9î�î=î!î$î'!î(åî.¶ î4øî6¼î9Š xî@³ï;ï;îAÆzï;îDTï8Úî¡îLî=îÐ yï5Ñî ½zï5Ñî‡ ï3œîÎîHî¨ î�xî"ûï3œï3œî#¬zï3œî*&î,Ýî.¸î1xî4Qî9}î;6 îC|ï1hî¡îŽîÚîàîŒî#î%{î)öî+bî.Éî1Jî3¿ î:yî>½îA ï/3î¡îOî¶î¤îrîÆîÌî$î)1 î0zî4/ î;aî?,îBîFï,ÿî¡ îxîwî¡î! î$;î&°î,Úî/9 î65î8ìî<î>’îCï*Êî¡îî$î„îfîñî!!î"wî' î)iî.î2?î3íî7î<)î>ˆî@ñîDôï(–î¡î yï%�î ½zï%�î! ï#XîÎîË îûï!#îÎîî‘îñîÝîFî ôî$rî(Áî+çî0yî2Øxî6ï!#ï!#î6Îzï!#î=Hî@°ïîî¡ î.xîïîïîî+zïîî Sxî$‹ïîïîî%<zïîî+¶î0Gî2„ î9­ îA7ïºî¡î« îêîVî"¤î%¿î(î-kî16î4ëî7K î>Fyï±î ½zï±î îæî#î-× ï|îÎîËî ïGîÎîñîöî]î½î ‡î&²xî(®ïGïGî)^zïGî.Wî0î2oî4Ù î;Exî>`ïGïGî?zîEïGïGîEãïî¡î¦îü îîÙî#™î)î*´î-î0Ôî6þxî8úïïî9~zîB½ïïïÝîÎxîZïÝïÝîXzïÝîî!î"Ôî#þî(Æî+Ÿî/ùî5fî8î9Gî<ÐîA ï©î¡ îNîî{î"êî$£î'î*Ãî-±î0î4Ùî7‘î;áî=Mî?¬îBcï tî¡îXî&îÈîqîÝî!§î"Ñî)Tî-î0 î1þ  TVm$PTheAlpinefilesystem17WritePages[openFileID,pageRun,valuePageBuffer,lockOption]!AccessFailed{handleReadWrite},OperationFailed{nonexistentFilePage}.WritesdatafromclientmemoryintheblockdescribedbyvaluePageBuffertothepagesdescribedbypageRunofthefileassociatedwithopenFileID,whichmustallowread-writeaccess.AValuePageBufferhasthesamerepresentationasaResultPageBuffer,butLupineunderstandsthatinthiscasethevalueisreallyaprocedureargument(notaresult).LockPages[openFileID,pageRun,lockOption].Explicitlysetslocksonthespecifiedpagesofthefile.UnlockPages[openFileID,pageRun].Ifthespecifiedpagesofthefilearelockedinreadmode,thenremovesthoselocks.Itistheclient'sresponsibilitytoassureconsistencyofanysubsequentoperationswhosebehaviordependsonthedatathatwasreadunderthoselocks.LockrequestsarecountedandthelockisnotremoveduntiloneUnlockPageshasbeendoneforeachLockPagesorReadPagespreviouslyperformedonthesamepages.Attemptstoremovenonexistentlocksorlocksotherthanreadareignoredwithouterrorindication.GetSize[openFileID,lockOption]>[size:PageCount].Returnsthefile'ssize,aftersettingalockonthesizeproperty.SetSize[openFileID,newPageCount,lockOption]!AccessFailed{handleReadWrite,spaceQuota},OperationFailed{insufficientSpace}.Setsawritelockonthefileproperites,thenchangesthefile'ssizetonewPageCount.Decreasingafile'ssizelockstheentirefileinwritemode.openFileIDmustallowread-writeaccess;theclientneednotbeamemberoftheowner'screateaccesslist.Ifthefilesizeisbeingincreased,theowner'sallocationischargedforthenewpagesimmediately,butifthesizeisbeingdecreased,theowner'sallocationiscreditedwhenthetransactioncommits.ReadProperties[openFileID,desiredProperties:PropertySet,lockOption]>[properties:LISTOFPropertyValuePair];ThetypePropertySetrepresentsasetoffileproperties,forexample{createdTime,textName}.ThetypePropertyValuePairrepresentsaproperty,pairedwithalegalvalueforthatproperty,forexample[createdTime,February12,198411:46:52amPST]or[textName,"/Luther.alpine/MBrown.pa/Walnut.segment"].ReadPropertiesreturnsalistofthepropertyvaluesspecifiedbydesiredProperties,orderedasinthedeclarationofProperty.WriteProperties[openFileID,properties:LISTOFPropertyValuePair,lockOption]!AccessFailed{handleReadWrite,ownerCreate,spaceQuota},OperationFailed{insufficientSpace,unwritableProperty};Writesthesuppliedproperties,whichmaybeorderedarbitrarily.vïgî"]î%5î)»î,%tïgîFÍyï_,î ½ zï_,î% îIî#î. ï\÷îÎîË îûî%²î/ôïZÃîÎî3î8îŸî_î#Ìî%zî'Úî+šî1Äxî3ÀïZÃïZÃî4[ zïZÃî=Úî?ˆîAèïXŽî¡îËxîÇïXŽïXŽîwzïXŽîpî )î"‰î$ò î+^xî.yïXŽïXŽî/)zî5ïXŽïXŽî5üî: î=rîA ïVZî¡ïT%îÎîZîéî^î ½î$; î-2î.àî0 î;Iî=ÊïQñî¡ îNîîÊîkî"Zî$¹î(cî)Ïî-™î.Âî5Eî;oî>^î?‡yïNéî ½zïNéîÁ îæî# ïL´îÎ î÷î˜îîî {î&7î*î+»î.yïI¬î ½ zïI¬î î0ïGwîÎîPî¯îkî6îïî!Nî#¸î& î*qxî,ïGwïGwî,£zïGwî/#î3Qî6wî;äî?ƒîCÜîETïECî¡îî� î î!½î%à î-î.Ìî1m î8– î?DïCî¡îQîÀîÆî &î#+î%ùî(¤î+¿î/Âî3aî7ºî;7î@�îBãï@Úî¡îXî·î°îî‘î"Aî%ˆî(4 î0cî2Øî65î9¨î;åî?îEäï>¥î¡î‘ î3î$øî&þî)]î,Ûî1�î7tî9#î> îE`ï¼î?æîC+ïâî¡îÞî¬îŸîÜxî#Uïâïâî#à î+Áî1ˆî3Æî7 î<¥î>ïzïâîB�xï­î¡ î¢ð*zî3™ï­ï­xî4ùï­ï­î5ö zï­î>TîCîD1îFoïyî¡îî›îÉî"…xî$€ïyïyî%1zî.aïyïyî/=î4^î6 î7ºî: îA,xîBåïyïyîCÌzîGæïyïyyïpî ½zïpîº îß {î&Ïïpïpî'‰ïpî)Ïzïpî+éî7· ï<îÎîË îûî% î-i î5Ñï î¡îEï ÓîÎî3î’î" î"òî'î*î+ôî1 ÿ TVm$Ñ18TowritethebyteLength,createdTime,highWaterMark,andtextNamepropertiesrequiresthattheopenFileIDhaveaccess=readWrite.TowritereadAccessormodifyAccessrequiresthattheclientbethefile'sowneroramemberoftheownercreatelistforthefile'sowner,butdoesNOTrequirethatopenFileIDhaveaccess=readWrite.Towriteownerrequiresthatboththeaboveconditionsbesatisfied,andadditionallyrequiresthattheclientbeamemberoftheownercreatelistforthenewowner;thediskspaceoccupiedbythefileiscreditedtotheoldownerandchargedtothenewone.Ifthereisinsufficientspaceintheleaderpagetorepresentthenewproperties,theexceptionOperationFailed[insufficientSpace]israised.Ifmultiplepropertiesarewrittenbyonecallandanerroroccurs,someofthepropertiesmayneverthelesshavebeenwrittensuccessfully.5.5AlpineOwnerinterfaceTheownerdatabase,adatabaseindexedbythesetofvalidownernames,isassociatedwitheachvolumegroup.Thesetofentriesinanownerdatabaserecordisfixed,andisdescribedbytheenumeratedtypeOwnerProperty,withelementsspaceInUse,quota,rootFile,createAccessList,andmodifyAccessList.Anowner'sspaceInUseisthetotalnumberofpagesinallownedfiles,plusafixedoverheadchargeperownedfile.HencespaceInUseischangedasasideeffectofAlpineFile.Create,Delete,SetSize,andWriteProperties(writingtheowner)calls.Anowner'squotaisanupperboundonspaceInUse,enforcedbyAlpineFile.CreateandSetSizecalls.Creationoffilesforanownerisgovernedbytheownercreateaccesslist,asdescribedabove.TheownerrootfileisaUniversalFilethatcanbereadandwrittenbyclients.Itisintendedforusebyadirectorysystem.Thecreationoffilesforanownerisgovernedbytheownercreateaccesslist,asdescribedintheprevioussection.Modificationoftheownercreateaccesslistiscontrolledbytheownermodifyaccesslist.Thisallowsforalimitedamountofdecentralizedadministrationoftheownerdatabase.Alpineallowsotherupdatestotheownerdatabase,suchascreatingownersandchangingspacequotas,onlyfortransactionswithwheelstatusenabled.Weomittheproceduresthatperformtheseadministrativeupdates.ReadProperties[transID,volumeGroupID,owner:RName,desiredProperties:OwnerPropertySet]>[properties:LISTOFOwnerPropertyValuePair];ReadsthepropertiesspecifiedbydesiredProperties,orderedasinthedeclarationofOwnerProperty.WriteProperties[transID,volumeGroupID,owner:RName,properties:LISTOFOwnerPropertyValuePair]!AccessFailed{alpineWheel,ownerEntry},OperationFailed{ownerRecordFull,tïg/î «zï_,îÎîõîrxîÒï_,ï_,î‚zî\ï_,ï_,xî9ï_,ï_,îÔ zî&Zï_,ï_,xî'7ï_,ï_,î'ó zî0´ï_,ï_,î1‘xî4Hï_,ï_,î4¸zï_,î:ƒ î@ûï\øî¡îoxîÎï\øï\øîzï\øîùxî ?ï\øï\øî ðî$Mî&2zî,ï\øï\øî-fî/�xî3 ï\øï\øî3Žzï\øî9åxî;©ï\øï\øî<¿ zïZÃî¡îîî¼îîÜî Ìî#,î&rî*Ÿî,cî-�î2ûî4´î7î;Aî?DîA�îC¿ïX�î¡îæîlîíîî!Àî&ˆxî)WïX�ïX�î*zïX�î0�xî3ÈïX�ïX�î4xî7Õî9»zî?ŽïX�ïX�î@îîCxïVZî¡zïVZîšîèî¶îòî"Rî&S î,÷î.è î4�î7D î>ÏîDïT&î¡îîÀî±îÛîIî!î#aî'�î+‘î-Ïî0 î2lî5Zî:î<`î?NîCïQñî¡îœîüîeîÑîîÍî"-î$—î(Äî+|î0¨î2Wî4¶î7¤ïO¼îÎîPîÙîE îmî!"î"Ðî%/î)Rî,™î.Gî4Eî6¥î9“ î@bïMˆî¡xîÖïMˆïMˆîéð!zïMˆî+ˆî,ôî1Òî3Tî8Í î?DîA˜îFKïKSî¡îLî×î�îîñî"Žî&!î'Úî*9 î0±î3µ î;kî>²îBïIî¡ yïC î «î é î#vï@Tîmxî9ï@Tï@Tîéî'vî(ï@Tï@Tîùîî!¥î&Ñî(Àî+î-%î.Ñî2-î6Nî:Þî<> îBžîE­ï> î «î»îåîãî&îî!›î#oî%…î)Ùî/šî4î5¡î9�î<{î> îD]îFï;ëî « îcîž î Éî$xî)÷ï;ëï;ëî*{vî0žï;ëï;ëxî1¦ï;ëï;ëî2Vvî4äï;ëï;ëxî5ìï;ëï;ëî6qvî:ï;ëï;ëxî;ˆï;ëï;ëî<"vîEï;ëï;ëîF'xï9·î «vî»ï9·ï9·ï7‚îmîÖxîöï7‚ï7‚î{vï7‚î7î¹î!/î$jî)­î+|î/\î1 î3'î7­î; î>î?XîBìï5Nî «î'î³î9î«î î&qî'óî-xî/<î0|î3kî7Mxî9ï5Nï5Nî:vîCXï5Nï5NxîDJï5Nï5NîE^vîHï5Nxï3î «vîï3ï3îxîúï3ï3î[ vï3îßî#:xî%Éï3ï3î&yvî)>ï3ï3î*kî.´î16xî6pï3ï3î7 vï3î:aî;üî>îBNîFØï0åî « î�îxî¼ï0åï0åîºvï0åî&½xî)¶ï0åï0åî*’vï0åî.Øî3Eî9+î;%î>Tî@ÒîCîGsï.°î «î©î¤xîï.°ï.°î´îýî÷î"vî#Àï.°ï.°î$œî&Jî,uï,{îmî@xîhï,{ï,{îìî<vï,{î‹îñxîï,{ï,{î) vï,{î%Xî(!î*§î,’î/§î2Yî7î8ýî>î?„î@êîF¡ï*Gî «î îîFîï(îmî[î³î‚î…îØîÞî$!î%£î+¶î-Çxî0<ï(ï(î0íî4Lî8[î<vî>:ï(ï(î?,î@ðîG0ï%Ýî «îî¤î' î!]î#î%î)²î-ºî1Ìî4î5€ î<î>xî@mï%Ýï%ÝîAîDlï#©î «î¹vîtï#©ï#©îÔîîîîYî‚î"5î'@î(ù î1V î:nî<'î>‡îB´ï!tîmîïîî³îÆî!pî#Ìî'õî-åî1î2¼î7ïî<�î?PîE)ï?î «îgî}î· î4î Lî$@î(î.î0�î3Õî61 î=5î@îEUï î « î—yïî ½ zïîWî î'úî,¡î2ïÎî ½{ïÎî‡zî˜ïÎïÎîü {î"ìïÎïÎî#¥ïÎî%ìzïÎî(ï™îÎîñîQ îÈî"„xî$ï™ï™î%0zî.`ï™ï™î/<î4]î6 î7¹î: îA+xïdî¡ zî{ïdïdyï\î ½zï\îºî� î(]î-î2� {î9qï\ï\î:*ï\îî@ îDžïT%î¡ îŸîNî­î6 î$®î'eî)Äî-Òî2„î6ëî9¬î<ÒïQðî¡î`î¿xîõïQðïQðîòzî,ïQðïQðî-gî3dî5Äî:Wî?¤îBîEÄïO¼î¡î‘î¾îlî•îŒxî"6ïO¼ïO¼î"¦zî&ÌïO¼ïO¼ïM‡îÎîTîÂîUî"Î î*"î.Pî2]î5î9„î>cîDIïKRî¡îkîJîÖî")î&¼î(jî*Zî.ˆî2•î4Óî7×xïIî¡zî$ÞïIïIî%»î)’î+@î-}î/æî3ôwïAóî «î ˆ vï>§îmî¹ î€ î% î'Ìî)Ñ î1¿î5¶î7Çî:ëî=_îAðîE ïúîBîDzï5Ôî «îæîQîIîëî¥ î!¢î&î,hî0Ãî54î8Þî;Jî>Dî?ýîDMï3 î «îtîãîbîaîxîÕî"%î%íî* î.Xî2‚î4Zî8�î:Hî?îB€îD,ï1kî «î î9îù î!î&Lî(|î*Œî- î1¥î4î7ëî;;î>€îCàîGsï/7î «î ºîîeî¼îsî†î![î+Bî0¹î5sî8Íî;?î?î@ÉîC1îF'ï-î «îˆîîîÛîdî ‚î#Wî%á î/éî1Ìî4I î¥îA°îBì ï(šî «îÅîëî¢îÒîGîÖî"ñî&�î*ß î1�î4\î7_î:±î>Dï&eîmîmî$îvîî î'¨î)Hî*Üî.Lî2î6€î8Vî9¨îCcîGgï$0î «îùîXî‘î@î½îçî#£î&éî)€î+.î. ï!ûîmî îî¾ î"íî%üî+«î0î4´î8Gî<ïîCZîG´ïÇî «î—îîõîrîkî#î$´î(Šî*êî1@î4î5dî9àï’îmî± î~î î$‰ î+èî1åxî7ãï’ï’î8~î9Övï’î<)îAu ï]î « î|îØ îï î'Žî)î/úî33î7§î:ž îDšï)î «îB î#îiî ^î!þî$Pî)óî,Ôî.€î/œ î6Šî9Kî?îAîCoïõî «î�îMîÊîÖî­îõ î î"ûî(õî+î-Šî2¿î4‹î7î:¤î?GîD³îFïÀî « î§ ï‹îmî1 î‡îÓî* î$Ûî'  î1kî3î7yî9Ïî>NîD"ïWî «îî&îoîDîCîçî$¼î'¿î+(î-‡î2àî3ÿî8î;¬î>Ýî@�îFuï"î « îõîŠîSî" î)~î,î5àî8Å î@îC îG´ï îî «î=ÿ ©TVm$ö20Alpinedeviatesfromthepureredologschemeinthefollowingimportantrespect:actionsthatallocatediskspace,suchascreate-fileorextend-file,arenotdeferreduntilaftertransactioncommit.Instead,Alpinewritesalogrecordthatissufficienttoundotheaction,thenperformsit.Shouldthetransactionabort,theundoisperformed.Onereasonthatwedonotdeferdiskallocationsisthatwiththeunderlyingfilesystemsweexpecttouse,thereisnopracticalwaytocommittoadiskallocationwithoutactuallydoingit.Andunlikeafilepagewrite,verylittleinformationneedbewrittenintotheloginordertomakeadiskallocationundoable.Anotherdeviationfromthepureredologschemeisthefilehighwatermarkoptimization.Pagewritespastthehighwatermarkaremadedirectlytothefileandnotlogged,andthehighwatermarkisadvanced.Allfileupdatesmustbeforcedtodiskbeforeatransactioncommits.Ifatransactionabortsthehighwatermarkmustnotbeadvanced.OwnerDBimplementstheownerdatabaseandaccesscontrols.TheownerdatabaseisrepresentedasanormalAlpinefile;toreadandwritetheownerdatabase,OwnerDBcallsFilethroughtheAlpineFileinterface.Forinstance,whenaclientcallsAlpineFile.Createtocreatea10pagefileforaparticularownerunderatransaction,CreatecallsOwnerDBtoreadtheownerdatabaseunderthistransactionandverifythattheclientisauthorizedtocreatethefileandthatthe10additionalpageswillnotexceedthelimitfortheowner.ToreducecontentionOwnerDBbuildsavolatilerepresentationofthequotaandreleasesthereadlockontheownerdatabasefilepage.Justbeforethetransactioncommits,OwnerDBupdatestheownerdatabaseunderthetransactiontoshow10morepagesinusebytheowner.Hencethetransactionmechanismguaranteestheconsistencyoftheownerdatabase.Theownerdatabasefileisorganizedasanopen-addresshashtablewithonerecordperpage;whenitfillsup,theadministratorcallsaproceduretoexpandandreorganizetheownerdatabase,againusingthetransactionfacilitytocovertheupdate.OwnerDBtestsmembershipinaccesscontrollistsbycallingGrapevine.Theefficiencyofthisismadeacceptablebycachingtheresultsofthesecalls.InordertotrackGrapevineupdatesitsufficestodiscardoldcacheentries,sinceGrapevine'sownconsistencyguaranteesarenotstrong.7.ExperienceandevaluationByearly1983,wehadcodedandstartedtotestanAlpineimplementationthatlackedtwo-copyloggingandincrementalbackup(bothareneededtomeetthegoalofnotlosingdatainadiskfailure),andwaslimitedtoasinglediskvolume,butwasotherwisecomplete.Wedecidedthatitwasmoreimportanttogetsomeexperiencewithwhatwehadimplementedthantoimplementtherestofthedesign.7.1SupportingfacilitiesTomakeAlpineusablefromCedar,threeadditionalcomponentswererequired:adirectorytïg/î «vï_/îmî÷î=î¨î î!Kî$î&Öî+¹î-kî/Îî5äîî$cî(±î*]î-(î0®î2î4î9žî îCîDÉîEðïT)î « îî+î\î Wî"¾î%òî*Eî+‰î. î1nî5^î8‡î;Ò îCvîFîïQôî «î^î7î–îéî—îLîúî"®î#Øî&Æ î-ïO¿îmîÈî²îîRî"{î%˜î'Øî,¤î-ýî0Iî2Ÿî5²î9_î<ß îE�ïM‹î «îÊîÊîGî‰îfî î"…î&bî+tî-?î/»î2Aî5î7§î<Œî?`îAÜîEïKVî «îsîînîõî“î"ßî&|î(¢î-î.þî2!î6¥î8 î?4îEþîG´ïI"î « î§îËî*îPî î#£î' î)€î+qïFíîmîÒ îîMî"Tî'Èî*Xî.?î4î6µî:»î@/îAt ïD¹î «î „îÙîÀîqîîXî �î#î'(î)²î. î4)î:àî>îAîFxïB„î « vïB„îF îßî•î!Fî%î&<î*xî-"ïB„ïB„î.vïB„î7íî9§î=µî>êî@ÚîD,îF¡ï@Pî «î Î îýî$îîB xî#�ï@Pï@Pî$�vï@Pî'åî*íî1sî3î6.î8†î<­îBAîF=ï>î « î¦î[îEîîpî".î#˜ î*gî,î0î2rî4Úî7�î:\î<ºî>ž îEï;çî «î¿î�îŒîTîî©î"qî(Kî*Ûî/¿ î6øî=íîByîD ï9²î « î¥îaîÃî§îaî$mî&Ïî)ìî,èî.ðî1Rî5ƒî; î=ŒîA³îD�ï7~î «î- îJîHî!öî'/î)°î-ÿî3¼î7àî:a îAîCOîFùï5Iî «îUî7îûî‡î™îî!Fî%­î($ î/6î6 î=fî?Ü îG%ï3î «îî[îôîÞî î%Éî(Dî)Áî0î1Ûî3Ý î<@î?�îCîF3ï0áî «îî‡îSîîuî,î ¢î# î+‹î.¦î/Ûî6jî8$î=î?Æ îFï.¬î «îÙîÌîvîî î&{î+î,°î0dî2Äï,wîmîî î î!´î%Èî*�î-Jî/Lî3· î;cî>B îD}îF=ï*Cî «î ?î' îÿî#îKî!Óî&Jî(+î+Ýî0î2î5ëî7Âî;]îBIîGˆï(î «î•îDîîlî8î"î%s î-î0 î7J î>î@mîBâwï ãî «î ˆ îî' vï—îmî‚îáîxî˜îHî Nî"þî'sî)î+žî-‡î2 î;Üî>£îBëïbî «î·îœ îJî Mî$1î&²î+ªî-†î1î3©î6Ðî8·î;Zî?‰îB¼îD˜îEðï.î «îçî¯îkî-îìî&î""î% î*qî-î/¿î5øî<Ýî?wîDªîGˆïùî «î^îùîaîîgî  î&ãî*î-iî/˜î2V î:¯î=Ýî?’îFïÅî «îMîîeyïFî «î é îí vï úîmî½î›îKî¹î!Iî%ãî)– î06 î8 î;‡îA¹îC  ½TVm$5TheAlpinefilesystem21system,animplementationofCedaropenfiles,andauserinterfacetosomeoftheserver'sadministrativefunctions.AdirectorysystemmapsthetextnameforafileintoaUniversalFile.SincewewishtoreplaceIFS,wemusteventuallyimplementahierarchicaldirectorysystemwhosefunctionalityincludesthecommonly-usedIFSfunctions,suchasfileversionnumbers,asasubset.Asatemporaryexpedient,weimplementedaverysimpledirectorysystemthatprovidesaflatnamespacetoeachfileowner.Thesimpledirectorysystemisnotsuitableforstoringalargenumberoffiles,aswouldberequiredofanIFSreplacement,buthasbeensufficienttosupporttheuseofAlpinefordatabaseapplications.ACedaropenfileisanobjectthatimplementsoperationssuchasRead(pagesfromfiletovirtualmemory)andWrite(pagesfromvirtualmemorytofile).InCedar,allbutafewlow-levelclientsoffilesaccessthemviaopenfiles,soimplementingthisabstractionintegratesAlpinewithCedartoaconsiderabledegree.Forinstance,filestreamsareimplementedusingopenfiles,soanyprogramthattakesastreamasinputcanbepassedastreamforanAlpinefile.ACedarusersometimesneedstodealwithanAlpineserverdirectly,aswhencheckingadiskquotaorchangingafileaccesslist.Cedarprovidestheuserwithanexpressioninterpreter,soinprincipleausercanqueryandmanipulateanAlpineserverbymakingcallstothevariousAlpineinterfaces.Thisisinconvenientbecauseofthelargeamountof"boiler-plate"codethatittakestobindtotheserver,createatransaction,andsoforth.Soweimplementedasetofprocedures,analogoustotheadministrativeproceduresexportedfromtheAlpineserver,suchthateachprocedurecallrunsasanewtransaction.This"Alpinecommandspackage"runsoneachuserworkstationasanordinaryAlpineclient,andanyCedaruserisfreetomodifythepackageasheseesfit.Inadditiontothesenewcomponents,theexistingdatabasemanagementsystemwasmodifiedtouseAlpinefilesaswellasXDFSfiles.Andtomakeitsensibleforuserstotryourfilesystem,weimplementedatrivialbackupsystemthatcopiedchangedfilesfromanAlpineservertoanIFSserverduringoffhours.7.2ApplicationsCypress[Cattell,1983]isanentity-relationshipdatabasemanagementsystemthatevolvedfromDBTuples[Brownetal,1981].CypressnowusesonlyAlpinefilestorage.SeveralapplicationsofCypresshavebeenwritten,includingasystemforstoringelectronicmailmessages,ageneral-purposedatabasebrowser,asimpleillustrator,andadatabasecontainingrelationshipsbetweenCedarmodules.Themessagefilingsystem,calledWalnut,isbyfarthemostheavilyusedapplicationofCypressandAlpine.Walnutrepresentsitsdataastwofiles:aWalnutlogfileandaCypressdatabase.TheWalnutlogfilecontainsthemessagesthemselvesandarecordofallupdates,whiletheCypressdatabaseisusedasanindex.TheWalnutlogfilecanbestoredineitheraworkstation'sfilesystemoranAlpinefilesystem.BecauseofthevariousshortcomingsofXDFSdiscussedinSection2,itwasneverpracticaltostoreWalnutlogsanddatabasesonXDFS.Instead,WalnutusedtheCedarworkstation'sPilotfilevïgî"]î%5î)»î,%tïgîFÍvï_/î «îÙî# î[înî#àî'­î+Lî.^î/áî34î94î;<î?)îA<îCõï\ûî « î— ïZÆîmîòî¼î/îÆî î"Îî&…î(»î)Ýî,>î/î01 î9„î=2î?QîBzîD ïX‘î «îÀîíîZ î÷î!âî# î*�î0Xî4Øî9 îAîFïV]î « î›îM îžî!Êî#sî%Øî*šî0žî2Gî3lî8lî:xî;�îB; ïT(î «î Ü î7îiî�îïî$Êî)Nî,%î1¾î2ðî5nî97î<õî>­îAçîDYïQôî «î€îâî±î)î‘î!î&î(Qî,ßî.î1iî6’î8Hî;‹î=6îAaîCNïO¿î «î Rî/îÓ îÛîIî¬î!õ î'áî)|î.vî0Âî3$î4Ëî9>î;hî@ð ïM‹îmî#xîeïM‹ïM‹îîÎvïM‹îLîáîûî">î%6 î,Ê î3¢î6ýî8Õî<žîA îD�îG0ïKVî «îîî×îÉî!î$—î)î.�î0@î4!î6î:ƒî<„î?î@QîCïI"î «îîêîøî%îÏî-î"Àî&&î( î0êî3« î:È îAîEÃïFíî «îÂîpî˜ î…îÏî"yî(î*†î/yî1Ì î:î=ÅîA6îD{îF=ïD¹î «î:îî†î°î îÎî"yî%î&õî+Zî,„î0õî32î5"î9¨ïB„îmîî î îàî!Èî#}î&}î)Ÿî+—î0#î47î9‹î;@î>ýîD¿îEðï@Pî «î¥î�îvî¸î9î_î"¨î&Øî,€î.÷î2î5;î7D î> îETîG0ï>î «î„îÀîËîhîgî0 î&jî(lî-î1#î30î8+î;Lî= î?~îDXï;çî « îËîòîk î�î$Ìî&’î(ÿî,sî1‹î3Q î<î?gîBBîC¥îG0ï9²î «îîûî�î$îYî¶ î%<î(&î*î.Ðî1 î3c î;èî=Dî?“îA ï7~î «îüî�îÕ î¦ î%“î+4î.€î0Åî50î9zî<‘î?EîB[ï5Iî «î=î]îîBî6 îî";î'xî.cî4\î7}î9Šî<Áî?Á îG0ï3î «î œî+î°îÉî€î!!î%9î(2î)žî,kî.î2Öî56î:xî<&î>î@ïï0àîmîOîÑî“î/î1 î&Hî(»î-Ùî3‡ î;´î@CîCï.¬î «î dîãîsîkî#îîÔî"9î&î);î*óî.²î0î5Hî7�î;î<Ðî?îA—îD ï,wî «î Ú î2îcî`î <î$¾î'“î, î1�î4vî7ãî9Ûî>gîB{îD0îF'ï*Cî «î¸î)î[yï$Äî «î é vï!xîmîŸîÑî€îòîèî+Eî0æ î9î=‡î@\îEwïDî «îGxî)ïDïDîÄîÇvîÚïDïDîÆîhî$¢î'µî*½î-æî2zî4òî:žî?€ îG%ïî «îÄîùîCî;î"=î#Tî'½î)èî.f î4”î7›î=¼î>ÔïÛî «î"îŒî‘îÑ î"Dî$×î%Ûî+R î1æ î9Åî?îCï¦îmî:î‡îîâî"Ïî(î)gî+Wî-tî/Éî3î7Ìî:ý îBîC³ïrî «îaî¿î¨ î(î!î$î%±î([î+Áî,éî1Ñî4#î6‹î9@î:hî?’îFï=î «î¿î<îÐî]îæî#ì î+î-çî/;î3µî5—î7±î=KîA)îC³ï î «îAî¨îßîˆîsîî âî%Çî(î*yî-î.ëî3 î4²î8šî9¾ îAÿîDcïÕî «î oî`îåîOï  îmî¼î�îíî î%*î&ðî+Wî1mî3'î8î9¬î;î=ÇîAžîG0ï kî «î îûî×î’î¶î!Áî'î,1î1î4`î6Äî:à îC*îFuÿ ÔTVm$¨22system[Redelletal,1980],whichprovidedtransactions.Later,WalnutusersweregiventheoptionofstoringtheirfilesonanAlpineserver,andalmostallofthemdid.AlpinegavethemanoticeableperformanceimprovementoverPilot,butthemainreasonforitspopularitywasthatitallowedausertoaccesshisfiledmessagesfromanyCedarworkstation,notjusthispersonalworkstation.Luther,thepublicAlpineserver,hasbeeninservicesinceMarch1983.(LutherpassislocatedinAlpinecounty,California.)SinceJuly1983theAlpinecoderunningonLutherhasnotbeenchangedinasignificantway,andLutherhasaveragedabouttworestartsperweek.About40%oftherestartswereduetohardwareproblemsandamicrocodebug,and10%weretoinstallsoftwarechanges.AllbutafewoftheremainingrestartswerecausedbythreespecificAlpinebugsthathavebeenfixed,orthefixisunderstood.Arestartgenerallytookabouttwominutes;ontwooccasions,restartfailedandthesystemwascold-started(ignoringthestateofthelog).LutheristhefirstserveratPARCtousetheDorado[Clarketal,1981]asitsprocessor.SomeflawsthatareacceptablewhentheDoradoisusedasaworkstationareintolerablewhenitisusedasaserver.OnetwooccasionsLutherhasbeenunavailableformorethanadayduetoproblemswithDoradohardware.Wearenowconsideringaconfigurationwithawarmspareprocessortoreducethisproblem.Alpineusershaveseveralcomplaintswiththesystemthatareunrelatedtothehardware.ThemostoftenheardcomplaintisthatAlpineabortstransactionstoofrequently.ClientsusethefeatureofAlpineTransaction.Finishthatallowsthemtocommitupdatesbutimmediatelycreateanewtransaction,maintainingtheconsistencyoftheirapplicationdatastructuresbynotreleasinglocksonAlpine.Thisworksfinewhenthelocksareonaprivatedatabase,butisabadideawhenthelocksareonashareddatabasebecauseitleadstolockconflictordeadlock.Recallthatextendingafilerequiresawritelockonapageoftheownerdatabase.ThislockisnotreleasedbyAlpineTransaction.Finishwithcontinue=TRUE.Wearenowconsideringwhethertofixthisspecificproblemortoprovideageneralfacilitytoidentifylockrequestsasbeingofshortorlongduration.Therearetwootheraspectsofthetoo-frequenttransactionabortproblem.First,Alpineprovidestheuserwithnowayoffindingoutwhyatransactionhasaborted.Thisisclearlyamistake;itwillnotbehardtologabitmoreinformationaboutthecauseoftransactionabort,andletaclientreadthisinformationfromthelog.Second,applicationslikeWalnutweredevelopedusingPilottransactionsinalocalfilesystem.Thesetransactionsabortedonlyduetospecificrequestorduetoaworkstationcrash.Soapplicationswerenotstructuredwithsmoothrecoveryfromtransactionabortinmind.Thenextgenerationofapplicationswillhidethelow-leveltransactionconceptfromusers.Inspiteofthesedeficiencies,Alpinehassucceededinitsprimarygoal:supportingresearchindatabasemanagementsystemsandapplications.7.3PerformanceWehavedonenoperformancetuningofAlpine;noneofourusershasaskedforit.Weareintïg/î «vï_'î «î'xîðï_'ï_'î‹î�vî”ï_'ï_'îqîsî ‚î&T î.±î2´î7Ÿî;î>oîB$îD„ï\òî «î Zîáîîîýîãî _î$¹î'fî+Áî-§î/Uî2Ôî6î:�î=²îA1îBQ ïZ¾î « îÉ îUî‰î#Aî%Üî(Uî+ìî0_î2¶î4« î;hî>-îAîB…îG´ïX‰î «î¥îSîaî“îÄîŸî#î%§î)¿ î1�î3öî6—î8Êî>N ïVTîmîUî±îéîlî"Îî%@î(šî*Eî.Éî29î6œî:¸î?ÀîB·îD ïT î «î {î#î$ î3î# î&&î)�î,î0¶î4î9xî; î@TîBëîE�ïQìî «î#îÙî î¬îäî ¤î%?î'¼î-‹î1uî4*î8ðî;mî?âîD/îG%ïO·î «îîØî1îðî¦î ¶î&Æî)…î*¶î1lî4Žî7Mî:Bî=›î?QîCeïMƒî «îšîßîSîpîî°îî$wî)(î,lî0Ûî2Êî6Fî;$î?œîBÖîE˜ïKNî «î îãîªî î îŽ î"£î$2î(nî.Xî1î5dî8î=Æî?ÏîB~ ïIî «îåî»îrîÒîMîù î'nî-`î/¿î2ñî4©î7 ïFåîmîÿîkîËî£î¯îHî#­î%[î'Ðî*0î/;xî3hïFåïFåî4î4÷vî6 ïFåïFåî6çî:�î îEïD±î «îBîî€ î>îî!nî&‡î(î+Kî-î.@ î5·î8 î?îBÄîD(îE¢ïB|î «î fîœî�î­îeîzî$î&šî* î1Xî3¢î7Aî:sî;ªî>WîAîBÖï@Hî «îæîî5îßî Rî#v î*éî,3 î4Åî7ÿî9Iî=>î@ýîG0ï>î «î(îÉï;Þîmîþî†îØît î%oî(•î*ÿî/†î2_î4½î:èî<¡î? îFï9ªî «îî‹îdîÈî,î òî%pî)‹ î1î3d î:Óî?rîAßîD6ï7vî «xî ¯ï7vï7vî­vï7vî3î Lî$Åî(™î*’î/Ýî5?î8 î@.îD{îEðï5Aî « îù î‰îâ î$î%Áî) î0î3 î9Hî;>î=­îCaîFØï3 î «î î$î$îðî¤î!î$~î&Ñî(Öî)ÿî.šî4�î7 î8wî9 îßîE@îFuï.¤î «î�îJî\îéî„îAî#î%iî(]î-î4¾î8lî;ùî=ùîAîFãxï,oî «vï,oîÕxîáï,oï,oî|î#J|î% ï,oï,oî%Úvî(Cï,oï,oî)†î,î.Fî1; î8€î=¿î?_îAaîCôï*;î «î0îóî¢î­îÖîªî$0î%Þî*õî-íî3Fî4ôî8¿î:xî=öî?ºîBÔï(îmîRîŠîîœî(î Åî# î*Ú î1ºî5<î;dî>æîCOï%Òî «î îîîîòî©îpî!ãî$Úî& î,ûî/nî5Qî8iî9Óî>6î?]îDßîF3ï#�î «îî îFîòîBîjî„î î%�î)|î+Ùî/Œî1B î8<î<1î>åî@ßîBîEÄï!iî «îM î×î>î�ï4îmî¡ î@îóî"åî&=î,Þî0�î3Ý î;eî=î>LîAšîD ïÿî «î— îîöîúî!›î#4î(î,Æî.tî1î2­î3Á î;î?WîAH ïËî «î î� îîHî 5î%Òî)G î0Pî3ýî5¹î:Pî=6î@T îG%ï—î « îBîíîîgî!C î(?î-Vî0½ïbîmîJîžîdîû î ¿î%Rî'Õî.fî0!î2 î7Mî:Ì îA¿îG0ï-î «îG î`î`î! yï¯î «î é vï cîmîòî3î î¡ î!Ÿî%ôî'¨î,¢î0î1Âî4Gî7¿î:.î=ÿî@6îB]îDâîG0ÿ µTVm$ÆTheAlpinefilesystem23thefortunatepositionofrunningthesystemonaDorado,whichisroughly10timesasfastastheAltoforexecutingMesacode.(ThisfactorisnoteasytoevaluatesinceCedarprogramstendtousemore32-bitquantitiesthanAlto/Mesaprogramsdid,andtheDoradohas16-bitdatapaths.)AsimpleMesainstructiontakes125nanoseconds,andaprocedurecallandreturntakes5microseconds.WedesignedAlpinetohavegoodperformanceonslowermachines,buthaveneverrunitonone.OurDoradocomeswith2mbytesofmainstore,theminimumconfiguration,andLutherarbitrarilyuses200kbytesofvirtualmemoryforfilebuffers.Priortowritingthispaper,wehadtworatheroffhandsourcesofperformanceinformation.First,wenoticedthetimetocopylargefilesbetweenaworkstationandAlpine,usingtheCopyprocedureincludedintheAlpinecommandspackage.ThiscopyprocedureusesasingleprocessthatloopscallingAlpineFile.ReadPagesorWritePagesasappropriate,transferring12pagesineachcall.Forlargefiles,copyingproceedsat450kbit/sec.Thisincludesdatatransportovera3mbit/secexperimentalEthernet.Second,wenoticedthestatisticsthatarekeptbytheCypressdatabasemanagementsystem.Cypressmaintainstheaveragetimepercallforseveralinternalprocedures,includingeachAlpineprocedurethatituses.CypressusesAlpineFile.ReadPagesandWritePagestotransferasinglepagepercall.WhencalledfromWalnut,theaveragetimeCypressseesforAlpineFile.ReadPagesisvariesbetween20and40msec,andtheaveragetimeforWritePagesisabout10msec.WhenpreparingthispaperweranthefilesystembenchmarksusedbyMitchellandDionintheircomparisonofXDFSandtheCambridgeFileServer[MitchellandDion,1981].Theirbenchmarkusesasingle256kbytefile.Thefirsttestmeasuresthetimetakenrequiredforanullremoteprocedurecall,andthesecondmeasuresthetimeforanulltransaction.Thethirdtestmeasurestheaveragetimeperreadwhenperforming100randomreadsinasingletransaction,andthefourthtestmeasuresthetimeperwritewhenperforming100randomwritesinasingletransaction.Thefifthtestmeasuresthetimetowritetheentirefilesequentially.Theresults:1.Remotecall,noparameters,noresults:1msec[BirrellandNelson,1983]2.AlpineTransaction.Create;AlpineTransaction.Finish:10msec3.Averageof100randomreads:25msec4.Averageof100randomwrites:8.9msec5.Write256kbytestoexistingfile(writing512bytespercall):4.8secWrite256kbytestoexistingfile(writing2048bytespercall):2.6secWrite256kbytestoexistingfile(writing8192bytespercall):3.2secTest2shouldinvolvenoI/O,butdoesinvolveapotentiallyremotecallfromthecoordinatortotheworker(thecallturnsouttobelocalinthetest),andthiscallisdonefromaseparateprocesssothatmultipleworkerscanbecalledinparallel(thereisonlyoneworkerinthetest).Intests3and4,thegoodrelativeperformanceofrandomwritesversusrandomreadsdemonstratestheadvanatageofconvertingrandomI/Ointosequential(log)I/O.Test5showsthatgiventhesmallpagesusedinAlpine,itisimportanttobeabletosendarunofpagesinasinglecall.Thepeakperformanceof800kbits/secondforsequentialwritingcansurelybeimprovedbysomeworkonvïgî"]î%5î)»î,%tïgîFÍvï_/î «îîîcî'î jî"Õî'\î)nî*£î0î4+î5¢î:Äî<´î@jîB#îDÅîFï\ûî «î¾îõîî»îÑî"^î&Cî'¨î*î-î.¼î4î7„î;–îA¢îDÁîFiïZÆî «îeî„ îöîCî$Yî*“î-ˆî0fî2ìî8î:ºî>ØîBîGRïX’î «îõîƒ îBî¤î  î(_î*úî, î2pî4ßî7{î;Žî>ðî@ ïV]î «îBî î›îUî¨î!& î)6î+Hî/¢î6î8œî;îî?ÅîBgîCÉîEÛïT)î «î„î…î¨î¹îãî‡î!î"Àî&3î)Ýî,2î2} î;>î=ëîBs ïQôî «î¥î:îzîîÇî!î!�î#Ìî&5ïO¿îmîîûîÞî±î î"uî%^î(;î,zî1Øî6Ýî8Ç î@ý ïM‹î «îpî½îÂîHî“îhî!ßî%lî(€î.î/d î6óî9Ñî>ÕîB¤îE*ïKWî «îLîîÜîZî ýî(î.Zî1’î5î;£î>ºî@îD ïI"î «î‚î4î¢î$Fî& î-Mî/ î6Ä î>6î@#îC÷îE­ïFîî «îLîî™îüîEî$î%Ôî(‡î)äî/Œî2Ãî8Dî;fîA`îD—îEÞîG0ïD¹î «î> îyïB„îmîÅîî!î¬ î#;î&4î(³î+ùî.î0ªî6î;Ç îD ï@Pî «îïîFî½îÔî"î$Ÿî'Aî)–î.?î3l î:äîAîDXï>î «î.îûîQî%îPî"Hî/äî2› î9Ìî;zî@„îA­îE˜ï;çî «îîOîTî9î�î!¼î$ î(õî,î1!î3æî6îCšîDóï9³î «îîÿî¶îœîfîî }î%|î(¢î*ß î2î3}î7^î9Cï7~îmî�îõî¯î©î!èî$uî&íî)nî. î5Æî9î;.î@ÀîC�îG0ï5Iî «îC îòîûî¦î ®î#^î*Ëî-óî2“î8Àî;Èî?ùîEï3î «îÛîÜî îî�îäî!üî%Pî(0î+î-£î3�î6î91î<øîB�îDÕîFï0áî «î…î:îOî9îÊî$Žî*³î-Dî0œî3 î4gî7r î?®îB¸îFSï.¬î «î îîî+î¢î!¿î%v î,«î/Bî4eî8î9·î:ãî>Ñ îF'ï,xî «î êîîmî>î}î�î!Õî%2î(Å î/Öî2Kî7Jî;+î<¸î=ÁîA‹ ï*Cî «î„î“îîîqî–î!Dî$Âî'"î+î-w î5éî8Áï(îmîùî%îî î!mî#sî(<î)qî,ãî1Šî4Aî9Oï%Úîmîùî !î0(î2 ï#¥îmîùî[îîªîÊî"âî$Çï!pîmîùî[îîªîÊî#Eî%‚ï;îmîùîÚîoî¯îCîñî!üî$eî)‘î,&î/»î20î5­î7êïîúîÛîpî°îDîòî!ýî$fî)’î,×î0lî2áî6^î8›ïÒîúîÛîpî°îDîòî!ýî$fî)’î,×î0lî2áî6^î8›ï�îmî�îÅîQî3îIî!}î$î'Nî,0î-i î4Hî8ÿî;šî?îA€ ïhî «î Qî¨îFîî™îî‡î!,î#î&Rî'øî*Oî-£î0Rî2ëî5mî6Ñî:;î=™î>»îD ï4î «î }îYîáîî³î±î#¶î%rî*iî.zî/óî3î5Õî:‰î²îB¯îDŒîGªïÿî «î­îƒî-îéî î$_î&bî+Ìî0î4�î9ûî=ã îFïËî « îÒî• îcî �î#dî&F î,Òî0"î3Ýî6ìî8*î[îAîCÞï\ûî « îBîýî‚îmî!>î#î%î+¡î.ˆî0Oî2Èî6>î:dî=‚î?Ù îF'ïZÆî « î/îqî»îÌî]î!qî#³î&Üî*î,�î0ßî60î8´î:’î>î?+ïX’î «î^ yïSî «î éîéîŠîÄvïOÇîmî÷îÏî0îèî!aî%çî'”î.�î2±î7yî:àî>%î@LîD!ïM“î « î]îÕîiîÿîÏî$»î'4î,!î0<î2 î;Äî=ÙîA"îD­îFïK^î « îAîÚîÀî[î¸î"0î%Bî&Ýî)*î.-î1—î40 îîG0ïFöî «î†îîîî#“ î+Þî.9î0Øî3Ïî5Çî9Lî;²î>©îD¤ïDÁî « îî î�îñî!³î#•î&'î)Šî,ùî1Oî4:î9bî;õ îFïB�î « î£î î“î"0î%î(Jî-îî0ñî3õî7³î9(î>¬îCFîEKï@Xî « î3îüîBî¡î"ðî%§î*# î1Øî3§î:zî=Àî?çîFï>$î «î©îäî°îÍîÎîxî",î#vî&yî(”î+?î,áî/Úî2Cî4–î8î:²îA2 ï;ïî «îâîYîãî mî$¢î&Óî)Àî/î2[î5ù î=ºîA îCëîF·ï9»î « î7îîî fî"-î("î,tî/î:9î<î@]îEŒï7†î «î Ìîî�î> î#î%Îî)¾î+ßî.þî0óî3Lî8qî:$î=›îBÖï5Rî «î Vî±î‚î:îÆîxî",î$Dî*×î,Œî0Sî3–î6îî<"î=Íî@(îDŸîF_ï3îmîÒîiî‡îü î(î,î/dî1.î5Xî8±î:pî=îB­îE�ï0éî «î˜î:îfî¦î î"mî%+î' î,Ÿî1Žxî2éï0éï0éî3švï0éî6Ûî8+î9qî:Ëî=÷î?áîDï.´î «î sîâ îqîªîxî Šï.´ï.´î!:vî$xï.´ï.´î%öî(Ýî.éî3«î7î8| î?}îA:îFï,€î « îîiî"îiï(îmî² ï(î"íî&2î(ï%áîmî ï%áî,îrî Wï#­îmï#­î"íî&2î(ïCîmïCî,îrî Wïîmïî"íî&2î(ïÙîmïÙî#õî'“î(Èï¤îmï¤î"íî&2î(ïpîmïpî"íî&2î(ï;îmï;î"íî&2î(ïîm ïî#õî&‹î(pï œîmî°îÊîÚî]î‘î!rî$˜î*¸î,‰î1î4 î7%î:5î=ÕîA ï hî «îWîpî6î{TVm$ZTheAlpinefilesystem25ACedarworkstationaccessingAlpineruns8500linesofCedarcodeforthistask.About4000linesaremanuallywrittencodenotalsousedintheserver,and3200linesareLupine-generatedcodenotusedintheserver.Theworkstationalsoruns18000linesofCypresscodefordatabaseaccess.DuringtheprojectweweresurprisedbytherelativedifficultyoftheOwnerDBcomponent.Thepresentdesignisamajorsimplificationofouroriginalscheme,yetitisstillthesecond-largestcomponentinAlpine.Asecondsurpriseistheamountofeffortrequiredforworkstationcode.Thisisnotdifficultprogramming,butthereisasignificantamountofittodo.Workstationcodedependsuponhigher-levelCedarfacilitiesthantheserverdoes.Henceitisinherentlylessstable,andthecostofmaintainingitduringtheprojectishigherperline.Oftheservercomponents,FileandOwnerDBwouldbechangedifwedecidedtoturnAlpineintoadatabaseserverthatdidnotsupporttheintermediateabstractionofanunstructuredfilewithtransactions.OfcoursesomethingequivalenttoOwnerDBwouldstillberequired,butitwouldpresumablybebuiltusingahigher-levelaccessmethod.Thiswouldnotactuallysimplifyitverymuch.SoevenifweeventuallydecidetobuildotheraccessmethodsintoAlpine,wehavenotwrittenmuchextracode,andinthemeantimewewereabletouseCypresscodeverylittlemodification.7.5StatusandObservationsAlpinestilllackstwo-copyloggingandincrementalbackup,andislimitedtoasinglediskvolume.AhierarchicaldirectorysystemandaPup-FTPserverforAlpinehavebeencodedbutnotyetintegratedwiththerestofthesystem.WehavenoticedafewfeaturesthatseemusefulandfitinwellwithAlpine'sdesign.Oneistheabilitytoaddablocksizepropertytoeachfile.Theblocksizeisanumberofpages,defaultone,andrepresentstheunitoffine-grainedlockingonafile.Inthiswayclientsthatprefertodealin2048bytepagesarenotpenalizedbyhavingtosetfourlocksoneachpageaccess.Anothereasyfeatureistheabilitytoperformdirtyreads,i.e.toreadwithoutsettingareadlock.Theincrementalbackupsystemwouldliketousethisfeature,andwecanimagineotherclients.Wehaveconsideredthepossibilityofprovidingunloggedudpates,asintheCambridgeFileServer'sstandardfiles.Weneedtoevaluatetheeffectivenessofthehighwatermarkoptimizationbeforemakingadecision.Atpresent,everytransactionwritesonelogrecordwhenthetransactioniscreated,andthissetsanultimatelimittothedurationofatransaction:whenthispartofthelogfileneedtobereused,thetransactionmustgoaway.Weshouldeitherimplementamoreelaborateloggingscheme,orweshouldallowspecialreadonlytransactionsthatwritenologrecords,orboth.Oneofthedisadvantagesofasystemstructurewithasinglevirtualaddressspaceisthatitbecomesdifficulttocircumscribetheresourcesusedbyatransaction.Sofarwehavenotadoptedanysystematicapproachtothisproblem,whichmeansthatanerranttransactioncancrashthesystemvïgî"]î%5î)»î,%tïgîFÍvï_/îmîüî î‚î!lî%ôî)î,Yî/–î1Rî5lî8µî:õî=™îAQîE˜ï\ûî «îÔîîî£îØî!;î#õî'î(¼î+ î/\î2î55î8_î: îE—ïZÆî «î î\î îjîRî* î$”î'`î*zî.qî1¬î3eî8�î;×î>îC¯ïX‘îmî]îãî§îöî nî&‡î(ªî+0î06 î6Eî8%î:«îA_ ïV]î «îŽîmîÆî<îqîq î'î(Óî+hî0|î5¾î8î9rî:èî=“î?ý ïT(î «îÓî�ïQôîmîî³îóîsîçî#î$Óî(²î.Vî0§ î8$îòîD\îEÏï@Pî «î¬îÙîFîÎî î Ûî%]î'2î*ùî.¿î2óî8ªî;©î@®îBüîFiï>î «î±îÛî î’îœî!œî$Nî+î-|î1 î4lî6mî94î>³îBLîE®ï;çî « yï6hî «î éî7î× vï3îmî,îî¨îÕî$ìî'Ý î/–î4ýî7îî9“î>€î@hîAËîEðï0èî «îkîõ î\î ,î$¤î'Yî(€î.zî2„î4¿î9Bî<†î?àîCëîFiï.´î «î ô îlî‡îæî‡î@î  ï,îmîî_îOîŠî;î"xî%Wî(åî-î/Öî1¶î3uî6sî9Ÿî?îD^îGsï*Jî «îîjî+îõxî1ï*Jï*Jîâîîvï*Jî¢î$Pî&î)Uî,¿î/ªî3}î6;î7¹î8õî>4î@îD6ï(î «î®îc îäîAî#îÛ î&�î+aî-eî.�î1Ïî3�î6<î9î=Uî@"îD8îEåï%áî «î YîŸî¯îzîÍîCî"lî$hî(ãî*‘î,®î/²î30î56î8gî;­ï#­îmîÏîÆîbîÁîî#Bî$äxî*/ï#­ï#­î*àî-Uvî0Yï#­ï#­î1)î3Yî4ûî8 î= îAbîB€îEŽï!xî «î„ îîØîSî#‚î&-î'Ûî*Pî,òî1òî4©î6Ñî9\î>’îB1ïCîmîî„ îŒî î$³î&�î,ñî3î8¤î:uîÈîFïî «îäî�îqîî rî".î'Ÿî* î2î3Øî6Eî9xî=Eî@å ïÚî «îûîãî ï¦îmîcîŠî9 î 0î$,î&Óî)!î-kî1î3u î:lî;Òî@ïîC¡îF=ïqî «î §îîhî"î�î (î!íî#" î*£î.cî1î3ÿî5Äî8/î:�î=î@jîB$îD ï=î «î îûî]îFî“î!î%Žî)tî0Sî1wî5î:ðî?ÈîDùîF·ïî «î'îÐîLîü î%|î(Jî+Èî-Îî0!î5Mî7ïÓîmîžî…î îéî Ïî"&î&Ïî,¹î0î1Yî5qî9ùî?îBóîDŒîGˆï Ÿî «îQî•îO î _î"Êî(Óî,î."î/W î7Fî9Xî;‹î=¾îAîC�ï kî «î7 î°î™î3î¿î$‡î(€î,¯î/hî1Dî5< î<#î>™îBîDcÿ TTVm$’26by,say,openingahugenumberoffiles.Asimpleinteractivedatabaseapplicationtendstoholdatransactionopenforlongperiodsoftime.Thiswouldnotbenecessaryiftherewereanefficientwayofvalidatingaworkstation'scacheofdatafromtheremoteserver.Thisshouldbepossibleatthelevelofcachedfilepages,butnogeneralcachepackageofthisformhasbeenimplementedforAlpine.Sadlyforus,theexperimentsindatabaseaccessmethodsthatwethinkaresoeasytoperformwithAlpinehavenothappenedyet,sowecannotreportonhowdifficultoreasytheseexperimentswere.Somesourcesofunnecessarycontentioninadatabasesystemwithphysicallockingareevident.Oneistheallocationoffreestorageinadatabase.Ifthereisasinglefreelistanditismodifiedoneachallocation,thenallallocationsareserialized.Perhapsbybuildingafewprimitivesofthissortintothefilemodelitispossibletoreducecontentionwithoutbuildingaccessmethodsintotheserver.8.UsingCedarTheAlpineprojectisdistinctfromtheCedarproject,butthetwoprojectshavecloseties.Cedar'sdatabaseapplicationsneedAlpinefordatabasestorage;AlpineneedstheCedarlanguageandCedarnucleus,andwasdevelopedusingthetoolsfromtheCedarprogrammingenvironment.AstheimplementorsofanambitiousCedarapplication,weareinagoodpositiontocommentonthesystem'sstrengthsandweaknesses.8.1GarbagecollectionandfinalizationCedarhasastoragemanagementsystem[Rovner,1984]thatisfullyintegratedwiththelanguage'stypesystemandhasautomaticreclaimationofunusedstorage,i.e.garbagecollection.Cedar'sautomaticstoragemanagementexistsatanunusuallylowlevelinthesystem,anditisusedbyallthemainoperatingsystemcomponentsexceptforthevirtualmemorymanager.(ThisstructureisnotuniquetoCedar;LispMachineLisp[WeinrebandMoon,1978]andInterlisp-D[TeitelmanandMasinter,1981]arebuiltinthisway.)Automaticstoragereclaimationisobviouslyaconveniencetotheprogrammer,andisconsideredanabsolutenecessityinsomeprogrammingcommunities.ButotherprogrammersconsiderlanguageslikeBliss,C,andPascaltobethehighest-levellanguagessuitablefor"systemsprogramming";oneoftenhearsconcernsaboutthecostorunpredictableperformanceofgarbagecollection.Sinceafileserverisclearlyasystemsprogrammingproject,ourexperienceinbuildingAlpineusingCedar'sautomaticstoragemanagementsystemshouldbeofinterest.Cedar'sgarbagecollectorisincrementalandoperatesasabackgroundactivity.Withoutthisproperty,wewouldnotbeabletousegarbage-collectedstorage,becausewecannotregularlyrefuseservicetoclientsforthetensecondsorsoittakesatrace-and-sweepgarbagecollectortodoitswork.tïg/î «vï_/î «î ÿî¶îî,î”îÁî!zï\úîmî î† îHî ÷ î(î+Ûî-�î0áî2 î9.î<´î?îB3îG%ïZÆî «î¦î½îèîZîHî!Xî"¶î&<î)Šî+wî0Ìî3¡î5W î;©î<Ð îEïX‘î «î |î˜îî�îKî bî#“î(&î*.î/‡î17î3®î7 î8Ûî=…î@îD@îFØïV]î «î~îJî�îFîçî!Nî#Ãî' î/rî1¯ïT(îmîAî‡î¸î î àî"—î(;î,Qî1êî4Áî6ñî:™î<öî>ÂîAÏîC†ïQóî «îÇîMî”î îbî"î#Èî%ðî*lî.�î0—î3œî8Õî:™î=žîA' ïO¿î «ïMŠîmîAîîË î j î'8î(äî* î/¦î4î79î<„îAVîC¨ïKUî «î«îîo î«î`î)î!×î#�î$§î+î,”î0î1‚î2¨î6�î9Xî;’î>Eî?˜î@ÿîFØïI!î «îã î�î­î¤ î!nî#Ç î*¸î/õî1÷î7wî8§î;N îAÀîCîF'ïFìî «îmî·î î,îlîÂîíî †î$ì î+¥î0›î5þî9öî?oîB1îDzwï?Áî «î ˆîHvïìîBiîFï:Aî «îÀî{ î2î!¯î&Uî(²î.mî3¹î8_î<`î>àîCï8 î «îtî�îîÏîŒî$5î'ðî*`î-Ãî1;î3«î7Ô î@x ï5Øî «î Éî6 îíî³î°î#î'9 î.°î0åî3Fî5î68î9·î?î@ÂîFØï3£î «î îcî5îì yï.%î «îmîð î9îÙ vï*Øîmîbîµî¼îL î"Cî&œî,î/¤î2Pî3™î6² î=î?ÿîB< ï(¤î «îþî»îµîlî  î(î*î/&î4sî6ñî¯î@îA”îDáîFîï$;î «î î³îçîw î$9î(žî*ñî-eî1Õî7Xî=øîA îGsï"î «îî¾îgîóîî!³î$Çî*Êî-|î1æî5Šî8; î?H îF'ïÒî «îÊîsîÆî î¼î]ï�îmîîº î!‚î"Þî)î* î1Ûî3zî5Ê î=õî@œîAù ïiî «î „îÛîîî‘ î& î.Òî1\î4ã î=2îB”ï4î «îaîþîãî¥îÒî‹î†î ð î(ôî/Iî4jî6±îîE ÿ `TVm$ÐTheAlpinefilesystem27Inexchangefortheconvenienceofanincrementalgarbagecollector,wemustbecarefultoavoidcirculardatastructures,ortobreakupthecircularitiesbeforereleasingsuchstructures.ThiswasnotaprobleminAlpine.InimplementingAlpineweconsciouslyminimizedtheallocationofnewstorageinplaceswhereweexpectedperformancetomattermost,forexampleinthemain-lineoperationsforreadingandwritingindividualfilepages.Wellundertenpercentofthecodefallsintothiscategory.Elsewhereintheimplementationweallocatestorageasseemsconvenient;thisdefinitelymakesthecodeeasiertowriteandtounderstand.ButtherearequalitativedifferencesevenbetweenthecodethatminimizesallocationsandcodethatwehavepreviouslywritteninstandardMesa,whichlacksgarbagecollection.ThedifferencesareknowntoimplementorsofproductionLispprograms,whoalsomustminimizestorageallocationinsomesituations.First,alldebuggingisdoneatalevelthathidestheformatofobjectsinmemoryandthedetailsofthestorageallocator.ThisispossiblebecauseessentiallyallofAlpineiswritteninasubsetoftheCedarlanguagethatallowsthecompilertocheckthattheprogramcannotdestroythegarbagecollector'sinvariants.OnlythecallontheCedarnucleusthatreadsfromthediskintovirtualmemorybufferscannotbecheckedbythecompiler.InMesa,danglingreferencesoccurandaprogrammermustsometimesdebugattheleveloftheunderlyingmachine.Aseconddifferenceisthatcleanupinexceptionalconditionhandlingneednotbeperformedsocarefully.IfaMesaaprogramcleansupbyfreeingsomesetofallocatedobjects,thecorrespondingCedarprogramhasnoexplicitcleanupatall.Themostimportantadvantageofautomaticallymanagedstorageisthatitsimplifiesthedesignofinterfacesbetweenmodulesandsimplifiesthedesignofdatastructuresthataresharedbetweenprocesses.Procedurescanacceptreferencestoarbitrarydatastructuresorcomputeandreturnsuchobjectswithoutconcernoverwhetherthecallerorthecallee"owns"thestorage.Thisisespeciallyimportantwhentheproceduresarepossiblyremote.Sometimesthereisanexplicitactionthatmustbeperformedwhenacollectibleobjectistobereclaimed.Forexample,thereisahashtablethatmapsfileidentifierstothevolatileobjectsrepresentingfilesactivelyinuse.Whenafileobjectceasestobereferencedfromanywhereinthesystem,weneedtoremoveitfromthehashtable.ToaccomplishthisweuseCedar's"finalization"mechanism,whichpermitsarbitraryprogrammer-providedcodetobeexecutedwhenanobjectisabouttobegarbagecollected,orwhenaspecifiednumberofreferencestotheobjectremain.Inthisway,Cedar'sautomaticstoragemanagementfacilityhelpsustotakecareofataskthatwouldotherwisehavetobedonebymanualreferencecounting.WhiledevelopingAlpine,weidentifiedseveraldeficienciesinCedar'simplementationofautomaticstoragemanagement.Mostnotablewasalimitonthenumberofsimultaneousreferencestoanobject;exceedingthislimitwouldmaketheobject'sreferencecountbecome"pinned,"causingitnottobereclaimeduntilatrace-and-sweepgarbagecollectionwasinvoked.OurexperiencewithAlpineandotherCedarapplicationsledtoasignificantreengineeringoftheCedarautomaticstoragemanagementfacilitytoeliminateallthearbitrarylimitationsthathadexisted.vïgî"]î%5î)»î,%tïgîFÍvï_/î «î ‘î¥îøîm î Pî"î$& î+¼î0ò î6ðî9.î<¬î>²îCZîEï\ûî «î¹î× î‰îfî-î"î$Gî&¿ î.,î2”î8gî;± îCîF3ïZÆî «î îJîÎî|ïX‘îmî/ îáîYîs î&¤î-eî/· î5éî7•î:uî?î@»îDÆïV]î «î æîµ îÌîŽî!ûî%Ãî(î-Ÿî/`î1Òî8 î>ÏîAîF'ïT(î «îY îÖî:îÖî!"î%î'yî,_î.î0mî3¯î6˜î9kî<îBRïQôî «î Vî± îŒî¯î «î%Zî'î+ î2rî5 î;+î?_îA»îDþïO¿î «î ¢îhîhî_ îõî!ßî%°î(L î/O î6“î:!î?ÙîB�îFïM‹î «î îÂî]îˆî!9î#Eî&o î,õî1Œî3î8œî<�î@sîC¾ïKWî « î®î îtîÁî#?î$ç î-‰î/; î6<î9Oî?³îB±îEvïI"î «î³îe î¥îSî!æ ïFíîmîÿîãî�îðîVî âî"î%9î'ûî+Žî-áî2Pî3ýî8Žî:0î?�îB<îD�ïD¹î «î yîíî³ îRî€î î%Wî*� î1.î32î5î9šî;î?áîA¤îBâîG%ïB„î «îî=îîëî%î!’î'Zî)î-î/ßî2Lî7çîOîAuîD„ï>î «îHî+î×î÷î"uî$¡î'0î.&î0%î4Wî:+ î@ÝîDÍîG´ï;çî « îŽîöî®î!Ýî#vî%Õî)î*Ôî-4 î4$ï9²îmîïîw îãîEî î$ î%Ä î,÷î3 î8½î<î>zî@aîGï7~î « îî’î²îQîqîöî#î% î&ÿî+�î/&î19î2éî8¦î=’î?ç ï5Iî «îÄîRîÇîÍî¢î#Ãî%\ï3îmîJî¬îî!Žî#L î+Äî1¦î6]î7Îî:¡î;ý îB+îD�ï0àî «î t î­î+î¿î!† î'¾î*-î.Œî0Tî3i î9ºî<—î>úîCpï.¬î « î� î‘îî S î&Òî(î."î1% î7dî9&î>ËîA€îE­ï,wî «îNî_î‘î°î#î%iî)#î*ìî-Qî1,î6î8€î>îA8îBª ï*Cî «î îÂî! î(î!|î&Éï(îmîkîøîgîZî!2î%Nî(î+Šî-~î4Fî7þî9+ î?±îCÍîE<îFîï%Úî « îRî>îOî î!Äî#.î&ªî*Rî-`î1?î3é î: î<Žî?.îDAï#¥î « î‹î�î‰î>î Ÿî$¿î%ñî(bî,‚î0¢î2Yî4Q î;î>ŒîDÉîFï!qî «î‚î¬î î½î©îî!lî#Îî' î*Ïî,ù î4î6½î8èî;_î@W ï<î « îWî†îœî"bî0,î3“î5cî7tî=RîA(îC9îGsïî «î îaîdî˜ î¿î –î$]î%šî+iî0¨î2s î9î:Éî=;îAgîGïÓî «î]îžî£î î!Í î)÷î.Žî2>î4î5Üî8æî;åî=®î>éîAÑîD°ïŸî «îÕîîÊî»î-î)î#î)ïjîmîé îTî—î"# î(½î-² î5vî7‰î<â îG%ï6î «îúî¥ î‹î# î'îî*’î+´î.òî0ðî3Hî8mî: îB\ ïî «î Mî0î¶î îŸîØî#úî'¡î)ôî.Üî4Íî8—î= îCôïÍî «î îwî%îî`î§îÑî'èî- î3=î5éî<î>é îEÃï ˜î «î îÆîTîZ î!ßî$"î%¿î&× î-^ î5êî7’î9àî=çîD,ï dî « îÅîLîúî÷î!çî$Gî)ì î0°î3~î66 ¡TVm$£288.2LightweightprocessesWithAlpine,wereaffirmedourbeliefinthevalueoflightweightprocessmachinery,alegacyofMesathathasbeencarriedoverintoCedar[LampsonandRedell,1980].InCedar,asystemcanhavehundredsofprocessesifnecessary.Thecostofswitchingbetweenprocessesisnegligible,andtheyusethesameaddressspacesodatasharingischeap.Thisleadstoaprogrammingstyleinwhichseparateprocessesareusedforseparateactivities,howeversmall.Theprocessmachineryeliminatestheneedtoexplicitlymultiplexorscheduleactivities(exceptwhereshareddatamustbereferenced)andimprovesconcurrency.Theremoteprocedurecallmechanismexploitslightweightprocessestothefullest.Ontheserver,eachincomingprocedurecallcausesaprocesstocomeintoexistence;whentheprocedurereturns,theprocessterminates.Aremoteprocedurecallcanbeofarbitraryduration,sinceitexecutesconcurrentlywithotherprocedurecallsandactivities.8.3LupineandCedarRPCAspreviouslydiscussed,theRPCfacilityenablesinter-machinecommunicationtobeexpressedasordinaryCedarprocedurecalls,withtheactualdatarepresentationsandnetworkprotocolstakencareofautomatically.Theremoteprocedurecallsemanticsresemblethelocalonesveryclosely,andthereareonlyafewdifferencesthatclientprogrammersneedbeawareof.WhileimplementingAlpine,twoinconvenientaspectsofRPCweremostnoticeable.First,onesemanticdifferencebetweenremoteandlocalcallsisthatintheremotecasethecallerandcalleedonotsharethesameaddressspace.ForAlpine,thismeansthatthecallercannotrefertoanobjectsuchasanopenfileoratransactionsimplybypresentingapointertothatobject,butmustinsteadpresentsomeidentifierthatnamestheobject.Thecalleemustmaintainadatastructurethatmapsidentifierstoobjects,andthecallermustmanagethesetofactiveidentifierssomehow.Itseemspossiblethatinsomecases,theRPCsystemcouldmanagesurrogateobjectsfortheclient,sendtheobjectidentifierdownthewire,andmakethecallintermsoftherealobjectattheserver.Second,Cedarprovidesnoconvenientwaytomanageandrefertoadynamicallyvaryingcollectionofinstancesofthesameinterface,eachlocatedatadifferentserver.Thisproblemseldomarisesinthestrictlylocalcase,sinceitisrarefortheretobemorethanoneinstanceofanygiveninterface,andthereforethebindingcanbespecifiedbyastaticconfiguration(forwhichCedar'sfacilitiesarewelldeveloped).Toovercometheseinconveniences,weconstructedan"Alpineobjectpackage"thatresidesontheclientmachineandisolatesclientprogramsfromdirectaccesstoAlpine'sremoteinterfaces.Thispackagemaintainssurrogateobjectscorrespondingtoservers,transactions,andopenfiles.Aclientcanthereforedealwithanopenfileratherthanwithan[open-fileID,server]pair.Remoteproceduresarethencalledbyinvokingthecorrespondingoperationsontheappropriatelocalobjects.Theobjects,beingallocatedfromautomaticallymanagedstorage,arereclaimedwhennolongerinuse,andanydesirableremoteside-effects(e.g.,closingopenfiles)aretriggeredbymeansofthefinalizationtïg/î «yï_,î «îm îövï[àîmîýîíî' îýî"šî&‚î(Bî*´î.pî0; î7kîî?‚ îF'ïUCî «îÞîvîùî™î¦î ~î"eî%�î*ƒî,î1,î4iî8 î9Ûî;' îCÝîG0ïSî «îæîlî–îî!€î#êî)o î/šî5Kî:î=$îB%ïPÚî « î6îŸîî¼ î­î%àî'­î-] î3 î7Þî;ÿî@nîC|îFîïN¦î « îéî¡î’ ïLqîmîzîWîîÐî'8î,ƒ î3Õî:î;ìî>�îCëîFïJ=î «î&îmî‹î $î"Äî'î(Tî-=î/î2Áî5¯ î<î?æîB[ïHî «î™îÛî‘ îßî Nî$×î+<î-ªî0î1êî3…î9 î>×îB,îCdïEÔî « î¥îÀî_î âî#ñî&© yï@Vî «îmîî¨îªvï= îmî{ î îyîÕî#/î'²î,™ î5V î?î@±îBžï:Öî «î ]îðî î“î ÿî$î&�î*ˆî-‘î7î9Ìî?(îEï8¢î «î�î8 îmî8î Òî'Hî)Åî/íî5±î8î;<î>_îAaîF'ï6mî «î5îˆî¢îÌîl îhî"6î%ö î.]î1ºî3ªî7¡ï49îmî� î<î î"¾ î*àî/„î19î4‘î7Þî;7 îB˜îF3ï2î «îS îÁî&î!Äî$rî'¯î*µî,î.Ýî0‚î2Øî7vî:[î<²î@]îC îFØï/Ðî «î.îÚîGîÒîÉî!uî$.î)î+Èî0î2õî5bî9$î=­îA îBÈîDÅï-›î «îÝîŒî|îïîYîîH î"Dî&´î(° î/_î0‰î5Rî7î9Ðî>Aî@ÃîD+ï+gî «î„î îîæî!.î#’î(�î+mî/Gî2´î8sî9¢î<«îBmîE?ï)3î « î?î îîñînî"?î%Äî*öî-sî/­î1ƒî5Œ î< îCHîDÝï&þî «îîî¾îmîîÎî.î"Œî'î*Õî/ìî5ëî:‰î<Çî?(îCBîFï$Êî «îÄ î·î‚îáîHî!ÿî%´î(î*žî,Lî0î1Ðî4/î6æî:ÿî<—î>÷ï"•îmîßî=îî ^ î'Ÿî*½î,±î2 î5 î8 î:”î< îCõï aî « îÕî‚îHîõîIî º î&­î)Òî.…î0î1/î6Éî;šî>©îD!ï,î «îzî7î¥î0î…îÛî"\î#Áî%<î(#î*oî.î/Äî1Äî5fî8›î;Vî@²îBzîE*ïøî « îÏî¬î¹î>î"zî%*î'Aî-"î/Cî0“î4B î<Úî?¶îCêïÃî « îîbîP ï�îmî¢îïî†î$gî&œ î-ÿî/ýî5Aî9hî?hîBDîFØïZî «î ûî«îîÆî~î".î(1î+ˆî/Zî3Wî4õî:Hî>ß îEÄï&î «îöî>îDî!ê î*êî,¡î1’ î9sî<3î?®îC‰îEïòî «îîÖî«î¡îmî»î!î$éî'ëî*âî,® î2½î5î9dî<ÏîA× ï½î «î1îˆî±îÞî¿î P î)y î0Xî2�î5! î<²î@*îFï ‰î «î±îŒîcîÚ î&]î,Jî1eî3Èî:#î=éî?ÿîDSîFï Tî «î=î¹îeîç î!ßî%î)‹î,Ùî0î2Iî7õî9Ëî=êî?}îA¸ ÿ ãTVm$VTheAlpinefilesystem29mechanismmentionedearlier.Theremoteprocedurecallmodel(incontrasttothemessagepassingmodel)potentiallypermitsstraightforwardon-linedebuggingofanapplicationprogramthatprovokesanerrordetectedduringacalltoanAlpineserver.Whentheexception(anordinaryCedarsignal)israised,theserverprocessexecutingtheprocedureissuspended(alongwiththecaller'sprocess,whichisalreadysuspendedwaitingforthecalltocomplete);buttherestoftheserver,includinganyothercalltothesameprocedure,proceedsunhinderedsinceeachremoteprocedurecallisexecutedbyaseparateprocessontheserver.Conceptually,thecallstackextendsfromthedebuggerontheclientmachine,throughachainofproceduresontheservermachine,andthenbacktothesiteoftheoriginalcallontheclientmachine.Unfortunately,theCedardebuggerpresentlylacksfacilitiesfortracingthecallstackacrossmachineboundaries;sothepartofthestacklocatedontheserver(includingtheactualcontextinwhichtheexceptionwassignalled)isnotvisibletothedebugger.Suchacapabilitywouldbeausefuladdition.OverallwefeelthatLupineandRPCwereaboontoAlpine.Lupinetranslatesroughly600linesofAlpinepublicinterfacesintoroughly7000linesofbug-freeCedarcodethatperformswell.LupineandRPCdonotcompletelysolvetheproblemofprotocolevolution,butwethinktheywillhelp.Withsuchassmallusercommunity,wehaveneverattemptedtosupporttwoversionsoftheAlpinepublicinterfacesatonetime.ItisworthreemphasizingthepointthatRPCdoesnotmakearemotecalllookexactlylikealocalcall.RPCdoesnotattempttohidethefactthattheaddressspacesaredifferentintheremotecase,orthattheremotecallistoamachinethathasfailuresindependentofyouroriginatingmachine.ThegreatthingaboutRPCisthattheremotecallstakeafamiliarform,andthatyouarenottemptedtocallinadifferentwayinthelocalcaseoutoflazinessortomakethelocalcallmoreefficient.RPCallowslocalcallstolookremote,nottheotherwayaround.8.4ModulesInSection4wenotedthatalog-basedtransactionimplementationcanbestructuredsothatmostofitdoesnotdependondetailsoftheunderlyingfilesystem,andiseasytomovefromonefilesystemtoanother.WerecentlytestedthishypothesisintheAlpineprojectbyconvertingthesystemtouseanewCedarfilesystemthatborenoresemblancetothepreviousfilesystem.EssentiallytheentireworkoftheconversionwasconfinedtotheBuffercomponent,asexpected.TheinterfacemoduleconstructofCedar(borrowedfromMesa)encouragesthissortofcleandecompositionofalargesystem.Wefeelthattheinterfacemodule,includingthetypecheckingacrossmoduleboundariesthatitmakespossible,isthestrongestfeatureoftheCedarlanguage.AlpineusedthefeatureofCedar(andMesa)interfacesthatallowsthemtobeparameterizedatcompiletime;thisisanalogoustogenericpackageinstantiationinAda.Unfortunatelythisfeatureisdifficulttouse;oftenaprogrammermustdefineanewinterfacejusttotransmitafewparametersvïgî"]î%5î)»î,%tïgîFÍvï_/î «îÞî¸ï\úîmî>îßî[îßî#î%2î*Xî+ÿî.Xî3©î8uî=! îCéïZÆî «î<îíî ¥î"]î$M î+^î0ìî3¹î9“î;ƒî>ôîDnïX‘î «î î¾î›îºîoîµî!üî$‹î*ïî-‡î3Eî7Œî< î=ºîBCîDÒïV]î «îÃî1îÔî šî"Jî)Hî-Äî1"î3Æî8šî> îB[îD ïT(î «î{îdî¶î+îËî Ž î'~î*î,‰î/?î1î3‚î7üî>%î@ÛîD�îG0ïQôî «î ÿîq îAîò î%Fî(­î+Óî0oî6æî9fî:Æî@wîBgîC†ïO¿î «îî…îåïM‹îm î+î’î&î¡î$ªî(î*�î0’î2¡î5 î8Ñî>¶îC÷îE)ïKVî «î Š î¶îâîfî˜î#šî&wî)Âî-.î/î1†î4,î6 î8�î=¾î@nîB™îEïI"î «îì î!îpî!xî'rî-Jî0¡ î5ôî8"î<¤î>óîAnîDÑïFíî «î? îÙî¬îî î!Ôî$Cî'Åî,’î.§î1î50 î;Íî>;îBMîG0ïD¹î «îÝîaî»îŠ î!ãî#sî& î*î,Qî.Õî6î9šî:è îAMîE îG´ïB„î «îÄï@Pîmîcî£îgîMî .î"þî&sî)Üî+î.¿î0†î6î:ú îAîFIï>î «îæîŸî%î_ î‰î"bî'wî*½î-øî/±î56î9Nî<•î?cîE?ï;æîmî3îçîAîDî¶ î$¯î((î*…î0î1¼î7' î=�î@îB2îEÎï9²î «îUîIîÆîöî£î@î!8 î(Ìî*òî.8î2î8xî:%î?0îAÚîG%ï7}î «î î‘îË îõîŽî!9ï5Iîmîõîrîz î˜î!î$¸î'—î+î.Fî0Ìî4‘î5Ìî:„î= î@JîDøîG´ï3î «îíîJî¡îÍî=î Dî!îî%î'^î*î,Ïî/*î4î8Dî:’î@3îAÜîD7ï0àî «î×îî2îvîîrîÂîUî dî%Íî(€î*Ùî/œ î7pî9î<. îCï.«î «îmîÊîHîîZî¯î gî"°î'Aî*:î-î.1î3;î6äî9…î<=î>ÞîAîCzï,wî «î nîîÐîîÉîµîxîìî#Gî&Iî(Óî*¡î/´î1�î3Pî7î9Œî<çî?‡îC. ï*Bî «îî5î{îŠî9îRî#Rî%Çî(&î+Åî.�yï$Äî «îmvï!xîmî`îcî¼îî îÿî!Mî'š î.º î8¼î;lî=€ îD(îFïDî «îîÛî>î{îýîôîî#dî%*î'– î.“î1 î5êî8®î:'î=7î>óîB¿îF3ïî «î)î¹î|îŒî+î"wî&„î): î0î1Öî4Jî8äî=–î?¦ îFïÛî «îî�îÞîäî®î¢îçî">î$èî'õî)× î1‹î3î5Qî:¼î=îB ï¦î «îîåîYî î_ î ;î"Ýî(…î**î,�î0Ç î8>î9ãî@iîC9ïrî «î´î¦îgîˆî#?î&®î*Ú î1ôî4žî7^î9î<¼ îEóîG´ï=î «îëîôîWîÜîƒî¼î#:î(kî.Xî0�î3yî9î<ôîAÌ ï î «îzîÐîî¢îînî#4î'Üî)•î+õî0 ïÔîmîîî$î~î!îÕî"èî&î*1 î0Uî3î7Fî:Êî_ îGFï  î «îíî—îDîºî1î êî%¾î+ î2îî4¨î8’ îAŠîD6ï kî «î î>îäîÊîUîv î#Pî&°î*áî,î.çî4…î7î8Ãî>î?@îAØ  ƒTVm$‰30tothepackage,andlatermustdealwithseveralfilesgeneratedbythecompilerintheinstantiationprocess.TheCedarsystemmodeller[LampsonandSchmidt,1983]isdesignedtosolvetheseproblems.Withoutthemodeller,wefounditmoreconvenienttoinstantiateasmallpackagebycopyingitssourcecodeinastylizedway.Thisworksfineaslongasthepackageisstable.8.5BeingpartofalargesystembuildingprojectThedecisiontobuildAlpineontopoftheCedarsystem(ratherthanfromscratch)wasmaderelativelyearlyinthelifetimeoftheCedarproject.ThishadtheinevitableconsequenceoftyingAlpinetotheevolutionandfortunesofCedar,acomplexandambitiousundertakingwhoseultimateoutcomewasnotyetcompletelyunderstood.Wasthisagooddecision?ThereisnoquestionthatAlpinederivedsubstantialbenefitfromusingCedarasabase.Inparticular,theautomaticstoragemanagementandremoteprocedurecallfacilitiesweresourcesofleverage,thoughRPCprobablywouldhavebeendevelopedanyway.Later,whenCedarreimplementeditsvirtualmemoryandfilesystem,wewereabletosuggestfeaturesthatmadethesemoreusabletoAlpine,withoutbuildingthemourselves.Ontheotherhand,usingCedarhadconsiderablecostsaswell.Earlyon,wespentagreatdealofdesigntimeconsideringhowtoadapttoaspectsofCedarthatwerelessthanidealforAlpine'spurposes;thiswasparticularlytrueofthePilotfilesystemandvirtualmemorythatCedarusedinitially.WeexperimentedwithwaystotakeadvantageofnewCedarlanguagefeaturesastheybecameavailable,suchasopaquetypesandobjectnotationforprocedurecalls,andtheseexperimentsdidnotcontributemuchtoAlpine.AsCedarevolved,Alpinerepeatedlyhadtobeconvertedtonewerversions.However,therewerepleasinglyfewsituationsinwhichshortcomingsorbugsintheCedarsystemheldupprogressontheAlpineproject.Actually,themostseriousdiversionoftimeandeffortwasduetotheAlpinedevelopersalsobeingactiveparticipantsintheCedarproject.WeoftendecidedtopursueactivitiesofultimatebenefittobothCedarandAlpineratherthanfocusingexclusivelyonAlpine.Ofcourse,allthisisreallyaprojectmanagementissue;andtheconsequencesareareflectionoftheinformalprojectorganizationthatistypicalofourresearchenvironment.ConsideringbothAlpineandCedarinthatcontext,weareverypleasedwiththeoutcome.AcknowledgementsManypeoplecontributedinonewayoranothertotheAlpineproject.ButlerLampsonandForestBaskettgaveussomegoodideasandencouragementduringtheearlygoing.AndrewBirrellandBruceNelsonproducedtheCedarRemoteProcedureCallfacility,whichallowedustoconcentrateonprovidingfileservicewhiletheywereprovidingdatacommunication.ThemembersoftheDoradoandCedarprojectshelpedcreateaproductiveprogrammingenvironmentthatwasthebasistïg/î «vï_/î «î aîÇîhî&îRîÁî!Áî$ãî)zî,nî2Àî4Ãî7)î<ëî> îA ï\ûî «îéîîgî*î$7î*éî-çî3öî7æî9™î?œîA‘îEUïZÆî «îÓîdîåî!%î#oî'žî)î,Ë î3èî5¸ îÂîB2îG%ïBŒî «îòî1îî!wî&1î*î-ìî5î;øî@…îDÆï@Wî « î&îîYî Æî#|î%åî*¸î,Þî0/î3'î4Õî9�î>ÈîA–îEUï>#î «î?îƒî1îîî$•î( ï;îîmîÆî îºî‹î/î"Bî$ô î,Ýî0)î1Òî5�î94î;�î=¯îASîBxîEåï9¹î «î wîØî îuî‹î!Lî%*î&êî+¥î-pî1šî4{î7Þî:†î=¾îA,îC|ï7…î «îîåî½ î2î"Bî$'î&²î*$î,ºî1aî4Dî8Ëî>dîA^îE¢ï5Pî « îÐî€ îCî ƒî$î%×î(õî/’î1oî4‚î8¿î>ªîCûîEÎï3î «î� î…îšî,îîî#fî&î)ýî/Nî1oî7Õî; î=»îA' ï0èî «î;îÊ î~înî7î"Íî$øî)*î.²î3Q î:î<ìî>´î@¿îG0ï.³î «î»îÓîî�î"Ê î).î+Æ î1Þî3„î7‰ î?ÞîAšîDÙîFï,î «îÄî?îZîlîÙî àî#?î'Åï*JîmîUîÌî?îòî$ûî&Ëî*î,Õî0·î3zî6Hî8î:„î?! îFï(î «îœî¯ î@îî™î#×î)œî,Lî0î5Nî7#î;Ð îAœîC{ï%áî «î\îîXîxî8î Æî$Üî( î-� î4…î6”î<î> îBÐîDÉîGsï#¬î «î�îîî² îôî!ñî$Ðî'V î0î2‚î3Ó î:î;úî>€îDAï!xî « îwî;î›îî¯î /î%ˆ î.\ î6î99î=³î@`îDmîFïCî «îØîÿîSîbîLî gî"Æwïî «vïÌîmî€î î”î ^î#%î&î'ùî- î.êî1fî6î;¸î@îF'ï˜î «îîîÁîïî¾îPî Áî$=î&ó î0„î4óî7Qî:·î?[îD›ïcî «î9îî“îŠîÀî"®î'±î.î0Ùî5Žî9sî>_î@îA‰ ï/î «î ìîfî îÊî¹î#î&�î- î0I î;Lî>_îD‹îFï úî «î³îfî{î™î!î%î&A î- î5¨ î=³î@~îC&îE‚ÿ ¿TVm$TheAlpinefilesystem31forAlpine.References[Birrelletal,1982]AndrewD.Birrell,RoyLevin,RogerM.NeedhamandMichaelD.Schroeder,"Grapevine:anexerciseinDistributedComputing,"CommunicationsoftheACM25,4,April1982.[Birrell,1984]AndrewD.Birrell,"SecureCommunicationUsingRemoteProcedureCalls,"submittedtoACMTransactionsonComputerSystems.[BirrellandNelson,1983]AndrewD.BirrellandBruceJayNelson,"ImplementingRemoteProcedureCalls,"ACMTransactionsonComputerSystems2,1,February1984(toappear).[Boggsetal1980]DavidR.Boggs,JohnF.Shoch,EdwardA.Taft,andRobertM.Metcalfe,"Pup:AnInternetworkarchitecture,"IEEETransactionsonCommunicationsCom-28,4,April1980.[Brownetal,1981]MarkR.Brown,RodericG.G.Cattell,andNorihisaSuzuki,"TheCedarDBMS:apreliminaryreport,"ProceedingsofACM-SIGMOD1981,April1981,p205211.[Cattell,1983]R.G.G.Cattell,"DesignandImplementationofaRelationship-Entity-DatumDataModel,"XeroxPARCtechnicalreportCSL-83-4,May1983.[Clarketal,1981]DouglasW.Clark,ButlerW.Lampson,GeneA.McDaniel,SeveroM.Ornstein,andKennethA.Pier,"TheDorado:AHigh-PerformancePersonalComputer,"XeroxPARCtechnicalreportCSL-81-1,January1981.[Gray,1978]JamesGray,"NotesonDatabaseOperatingSystems,"OperatingSystemsanAdvancedCourse,SpringerLectureNotesinComputerScience60,1978,p393481.AlsoappearedasIBMResearchReportRJ2188,February1978.[Grayetal,1981]JimGrayetal,"TherecoverymanageroftheSystemRdatabasemanager,"ACMComputingsurveys13,2,June1981,p223242.[Israeletal,1978]JayE.Israel,JamesG.Mitchell,andHowardE.Sturgis,"Separatingdatafromfunctioninadistributedfilesystem,"XeroxPARCtechnicalreportCSL-78-5,September1978.[Lampson,1983]vïgî"]î%5î)»î,%tïgîFÍvï_/î «î éwïXî « vïT¸î «xîRïT¸ïT¸îíîávîõïT¸ïT¸îÑïR„îjî¬î§îCî<î!€î%£î'Õî.$î0Üî6)î8% î? îFîïPOîjî–îD îŽ xî$ÕïPOïPOî%Ò î/#î0Æî3yïPOî6çvî8GïPOïPOî9$î:±î>OïMÔî «îªïKŸîjî™î‚î î% î)(î-î20î8«î=îCnxïKŸîE ïIkîj î_îRî—vî#CïIkïIkïFðî «îRî îïD»îjîõî:îÇîÈî" î$Çî* î3ùî9oî@FxîE ïD»ïD»îFïB†îj î_îRî—yïB†î#Çvî$wïB†ïB†î%Tî&áî,Þî0$î2Lï@ î «xîï@ ï@ î¶îªvï@ îBï=×îjîhî'îeî§îEî!§î&¢î(`î+Œî.î2Ÿî4«î:Žî>vî@£ ï;¢îj xîôï;¢ï;¢î�îí î"âî$Õ yï;¢î/#vî3µï;¢ï;¢î4‘î6î9¼ï9'î «xî~ï9'ï9'îî vî!ï9'ï9'îýï6òîjîîùî¶îâîÝî!Øî&–î)Cî.Öî3µî73î;@î@VîAu ï4¾îjxî–ï4¾ï4¾î~ îî± î&ïvî)±ï4¾ï4¾î*�î.+î1Éî3ï2Cî «î×ï0îjîmî�î³î™îî!ã î,î-×î/î?öîCqï-Úîjî�îòî¹î Ýî'iî*™ï+^î «xîÙï+^ï+^îtîhvî|ï+^ï+^îXï)*îjîÕîîBîxî ¼î'$î*ëî,Öî3¢î8/î:hî@mîC+ï&õîjîFîxîøîtîøî)rî.ø î6…î: î>üîD»ï$Áîjî÷î#ï"Fî «îïï îjîfî)î¸î¡î"wî(Ñxî.ÿï ï î0î5=î:Pî<î=îîCôvîHï ïÜîjî3îlî•îpî&,yî+OïÜïÜî,vî,°ïÜïÜî-ºî1†î2ÿî:>î=›îC¼îE˜ï¨îjîRîúî<î$:ï-î «xî—ï-ï-î2î&vî:ï-ï-îïøîjî"î¶îZîKîßî!zî'î(äî+Oî0î1²î7Yxî>ïøïøî?îAçïÄîjyïÄîvîtïÄïÄîQîÞî0îÎîïHî «xîÎïHïHîiî]vîqïHïHîMïîjîôîÌîùî&î@î#'î%óî+Vî-.î28 î9Íî<çî@cîEòîG´ï ßîj î\îÆîJî!lî%Ñî+˜î/¼î6Hî=/ï dî «îoÿ0TVm$32ButlerLampson,"HintsforComputerSystemDesign,"ProceedingsoftheNinthACMSymposiumonOperatingSystemPrinciples,October1983,p3348.[Lampson,1984]ButlerLampson,"CedarLanguageReferenceManual,"XeroxPARCtechnicalreport,toappear.[LampsonandSchmidt,1983]ButlerW.LampsonandEricE.Schmidt,"PracticalUseofaPolymorphicApplicativeLanguage,"ProceedingsoftheTenthACMSymposiumonPrinciplesofProgrammingLanguages,January1983,p237255.[LampsonandRedell,1980]ButlerW.LampsonandDavidD.Redell,"ExperiencewithProcessesandMonitorsinMesa,"CommunicationsoftheACM23,2,February1980,p105117.[Lindsayetal,1979]B.G.Lindsay,P.G.Selinger,C.Galtieri,J.N.Gray,R.A.Lorie,T.G.Price,F.Putzolu,I.L.Traiger,andB.W.Wade,"NotesonDistributedDatabases,"IBMResearchReoprtRJ2571,July1979.[MitchellandDion,1981]JamesMitchellandJeremyDion,"AComparisonofTwoNetwork-BasedFileServers,"CommunicationsoftheACM25,4,April1982,p233245.[Mitchelletal,1979]JamesG.Mitchell,WilliamMaybury,andRichardSweet,"MesaLanguageManual,Version5.0,"XeroxPARCtechnicalreportCSL-79-3,April1979.[PetersonandStrickland,1983]R.J.PetersonandJ.P.Strickland,"Logwrite-aheadprotocolsandIMS/VSlogging,"ProceedingsoftheSecondACMSIGACT-SIGMODSymposiumonPrinciplesofDatabaseSystems,March1983,p216243.[Redelletal,1980]DavidD.Redelletal,"Pilot:anOperatingSystemforaPersonalComputer,"CommunicationsoftheACM23,2,February1980,p8192.[Rovner,1984]PaulRovner,"OnAddingGarbageCollectionandRuntimeTypestoaStrongly-Typed,Statically-Checked,ConcurrentLanguage,"XeroxPARCtechnicalreport,toappear.[Svobodova,1984]LibaSvobodova,"FileServersforNetwork-BasedDistributedSystems,"ACMComputingsurveys,toappear.AdraftappearedasanIBMResearchReport.[TeitelmanandMasinter,1981]WarrenTeitelmanandLarryMasinter,"TheInterlispprogrammingenvironment,"Computer14,4,April1981,p.2534.[Teitelman,1984]tïg/î «vï_,îjîîæîÎî!‚î(‡î-»xî3âï_,ï_,î4É î;Ðî=êî@­îE ï\øîjî¡î•îïî"š vî(Xï\øï\øî)5î.‚î2 î3kïZ}î «îoïXHîjî~îÄîqî#¡î* î0 î4î8^î> îBlîDïUÍî «îîÎî–ïS™îjîuî�îqîîÎî!mî' î--î/Öî1kî2q î:g îA‹ xïQdîj îîÅî0îBî"5î)Œî+Ÿ î2î3Ä îöîCœï?3îjîdï<¸î «îˆî?î ï:„îjîæîÃîÞî! î%Oî'ï î0î20î5¹ î?ÇîCxï8Pîj î¹î\î¨yï8Pî |vî!Ýï8Pï8Pî"ºî$Fî'äî+ƒî,Îï5Õî «îˆî!îï3 îjî¥îÍîÂî %î&’î)lî.Òî3Oî7Ìî>9îCÉï1lîjî¯îÒî7îþî$"î*®î.Lï.ñî «î©î` îFï,¼îjî*î|îðîƒîÔî] î#î&€ î-Ðî3žî60î;¥xîAgï,¼ï,¼îBN ï*ˆîjî!îîHî/ î'‡î.Ñî0× î7,î8âî>ÞvîC‰ï*ˆï*ˆîDyï(SîjîîTï%Øî «xîtï%Øï%Øîîvîï%Øï%Øîóï#¤îjîŽî‰xîîï#¤ï#¤î‰î~vî‘ï#¤ï#¤înî Þî"Ïî)Fî.î0Aî1kî6ú xî>�ï#¤ï#¤î?� ï!oîjîîZyï!oî.vî�ï!oï!oîkîøîöî#”î$ßïôî «îPïÀîjîõî�îî kî&k î-iî0†î6§î;î=.î>½ï‹îjîQ î!š î(íî-î1tî7<î;¸î=fïî « îxïÜîjî îÃî¥î"Óî%j î/o î7xî=¸ïÜïÜî>¶îAçï¨îjvî�ï¨ï¨îlîî}î îfî%Zî'î(øî,>î2&ï,î « î�îGîfïøîjî‘î:îî! î'Pî+î0¡ î9[ xîB™ïøïøîC—yï ÄîjvîËï Äï Äî¨î4îÓîqîï Iî « îèùTVm$.TheAlpinefilesystem33WarrenTeitelman,"TheCedarprogrammingenvironment:amidtermreportandexamination,"ProceedingsoftheSeventhInternationalConferenceonSoftwareEngineering,March1984,toappear.AlsotoappearasaXeroxPARCtechnicalreport.[WeinrebandMoon,1978]DanielWeinrebandDavidMoon,"LispMachineManual,"MITArtificialIntelligenceLaboratory,November1978.vïgî"]î%5î)»î,%tïgîFÍvï_/îjî[ î&îŸî!© î*, î2¦î3Áî9Lî=aî@ xï\ûîj îîÊî8îw î'Ë î.ûî1î6Ù vî=éï\ûï\ûî>èîCpîG0ïZÆîjîÍîüî«î2îàî î$,î(‘î.XïXKî «î´îkîÚïVîjîeî‰îÀî!cî&Rî*œî0Ìî7jî;/ îAu ïSâîj îßî±ÿVTVm$� ÿ TIMESROMANþæ ÿ TIMESROMANþæ ÿLAURELþŸ ÿ TIMESROMANþŸÿ TIMESROMANþŸÿ TIMESROMANþYÿ TIMESROMANþŸÿLOGOü´ÿ HELVETICAþŸÿ HELVETICAþŸÿ HELVETICAþæÿ HELVETICAþYÿ HELVETICAý…¥  ä s# t. ð9 »C ÀN �Y c Äm …w Ù� zŠ ¶–  ¢ &« ¨´ Á¾ 4Ç ëÑ íÜ Þç ›òçú C  ‹ 7" 4, 5Í<TCÄEj/H#FœY�9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&Tuesday, February 14, 1984 7:04 pm PST