%!PS-Adobe-2.0 %%Creator: dvips, version 5.396 (C) 1986-90 Radical Eye Software %%Title: overview.dvi %%Pages: 17 1 %%BoundingBox: 0 0 612 792 %%DocumentFonts: Times-Roman Times-Bold Times-Italic Courier %%EndComments %%BeginProcSet: tex.pro /TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{ isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale Resolution VResolution vsize neg mul TR}B /@letter{/vsize 10 N}B /@landscape{ /isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@legal{/vsize 13 N} B /@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[ 1 0 0 -1 0 0]N /FBB[0 0 0 0]N /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /E{pop nn dup definefont setfont}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ctr 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{ ]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto}B /eop{ clear SI restore showpage userdict /eop-hook known{eop-hook}if}B /@start{ userdict /start-hook known{start-hook}if /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for} B /p /show load N /RMat[1 0 0 -1 0 0]N /BDot 8 string N /v{/ruley X /rulex X V }B /V{gsave TR -.1 -.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}B /a{moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{ 1 M}B /i{2 M}B /j{3 M}B /k{4 M}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w }B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /w{0 rmoveto}B /x{0 S rmoveto} B /y{3 2 roll p a}B /bos{/SS save N}B /eos{clear SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro TeXDict begin /rf{655360 div mul Resolution mul 7227 div /PixPerEm X findfont dup length 1 add dict /nn X{1 index /FID ne{nn 3 1 roll put}{pop pop}ifelse} forall 256 dict begin nn /Encoding get 0 1 255{2 copy get 3 index 2 index get 1000 mul PixPerEm div N pop}for pop pop nn /Metrics currentdict put end /fontname X /nn dup nn definefont[PixPerEm 0 0 PixPerEm neg 0 0]makefont N fontname{/foo setfont}2 array copy cvx N fontname load 0 nn put}B /ObliqueSlant{dup sin S cos div neg}B /SlantFont{/foo X[1 0 foo 1 0 0] TransFont}B /ExtendFont{/foo X 3 2 roll[S{foo div}forall]3 1 roll[foo 0 0 1 0 0]TransFont}B /TransFont{S findfont S makefont dup length dict /nn X{1 index /FID ne{nn 3 1 roll put}{pop pop}ifelse}forall dup nn definefont pop}B end %%EndProcSet %%BeginProcSet: special.pro TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N /vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP false N /BBcalc false N }B /@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit div /vsc X}B /@hsize{/hs X /CLIP true N}B /@vsize{/vs X /CLIP true N}B /@hoffset{ /ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{10 div /rwi X}B /@llx{/llx X} B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X /BBcalc true N}B /magscale true def end /@MacSetUp{userdict /md known{userdict /md get type /dicttype eq{md begin /letter{}N /note{}N /legal{}N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{ transform{itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N /txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale} if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp{pop pop showpage pm restore}N end}if}if}N /normalscale {Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale}if} N /psfts{S 65536 div N}N /startTexFig{/psf$SavedState save N userdict maxlength dict begin /magscale false def normalscale currentpoint TR /psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts /psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR /showpage{}N /erasepage{}N /copypage{}N @MacSetUp}N /doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict begin /SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults}B /@setspecial{CLIP{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}{initclip}ifelse ho vo TR hsc vsc scale ang rotate BBcalc{rwi urx llx sub div dup scale llx neg lly neg TR}if /showpage{}N /erasepage{}N /copypage{}N newpath}B /@endspecial{grestore clear SpecialSave restore end}B /@defspecial{SDict begin}B /@fedspecial{end}B /li{ lineto}B /rl{rlineto}B /rc{rcurveto}B /np{/SaveX currentpoint /SaveY X N 1 setlinecap newpath}B /st{stroke SaveX SaveY moveto}B /fil{fill SaveX SaveY moveto}B /ellipse{/endangle X /startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}B end %%EndProcSet TeXDict begin @defspecial userdict begin /bop-hook{gsave 200 30 translate 65 rotate /Times-Roman findfont 216 scalefont setfont 0 0 moveto 0.8 setgray (DRAFT) show grestore}def end /@scaleunit 100 def @fedspecial end TeXDict begin 1000 300 300 @start /Fa 1 16 df<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7F FE7FFE3FFC1FF80FF003C010127D9317>15 D E /Fb [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 27 27 27 27 27 27 27 27 27 27 27 27 0 0 0 27 27 27 27 0 27 27 27 27 27 27 27 0 0 27 0 27 27 27 27 27 27 27 27 0 27 27 0 27 27 27 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 27 27 0 27 0 0 0 0 0 0 0 0 0 27 0 0 27 27 0 27 0 0 0 0 ] /Courier 1000 717619 rf /Fc [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 15 19 23 23 38 35 15 15 15 23 31 11 15 11 13 23 23 23 23 23 23 23 23 23 23 15 15 31 31 31 23 42 28 28 30 33 28 28 33 33 15 20 30 25 38 30 33 28 33 28 23 25 33 28 38 28 25 25 18 13 18 19 23 15 23 23 20 23 20 13 23 23 13 13 20 13 33 23 23 23 23 18 18 13 23 20 30 20 20 18 18 12 18 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 23 23 8 23 23 23 23 10 25 23 15 15 23 23 0 23 23 23 11 0 24 16 15 25 25 23 40 45 0 23 0 15 15 15 15 15 15 15 15 0 15 15 0 15 15 15 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 0 13 0 0 0 0 25 33 43 14 0 0 0 0 0 30 0 0 0 13 0 0 13 23 30 23 0 0 0 0 ] /Times-Italic 1000 717619 rf /Fd [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 15 19 23 23 38 35 15 15 15 23 26 11 15 11 13 23 23 23 23 23 23 23 23 23 23 13 13 26 26 26 20 42 33 30 30 33 28 25 33 33 15 18 33 28 40 33 33 25 33 30 25 28 33 33 43 33 33 28 15 13 15 21 23 15 20 23 20 23 20 15 23 23 13 13 23 13 35 23 23 23 23 15 18 13 23 23 33 23 23 20 22 9 22 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 23 23 8 23 23 23 23 8 20 23 15 15 25 25 0 23 23 23 11 0 21 16 15 20 20 23 45 45 0 20 0 15 15 15 15 15 15 15 15 0 15 15 0 15 15 15 45 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 0 13 0 0 0 0 28 33 40 14 0 0 0 0 0 30 0 0 0 13 0 0 13 23 33 23 0 0 0 0 ] /Times-Roman 1000 717619 rf /Fe [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 15 25 23 23 45 38 15 15 15 23 26 11 15 11 13 23 23 23 23 23 23 23 23 23 23 15 15 26 26 26 23 42 33 30 33 33 30 28 35 35 18 23 35 30 43 33 35 28 35 33 25 30 33 33 45 33 33 30 15 13 15 26 23 15 23 25 20 25 20 15 23 25 13 15 25 13 38 25 23 25 25 20 18 15 25 23 33 23 23 20 18 10 18 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 23 23 8 23 23 23 23 13 23 23 15 15 25 25 0 23 23 23 11 0 25 16 15 23 23 23 45 45 0 23 0 15 15 15 15 15 15 15 15 0 15 15 0 15 15 15 45 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 0 14 0 0 0 0 30 35 45 15 0 0 0 0 0 33 0 0 0 13 0 0 13 23 33 25 0 0 0 0 ] /Times-Bold 1000 717619 rf /Ff [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 17 28 25 25 50 41 17 17 17 25 28 12 17 12 14 25 25 25 25 25 25 25 25 25 25 17 17 28 28 28 25 46 36 33 36 36 33 30 39 39 19 25 39 33 47 36 39 30 39 36 28 33 36 36 50 36 36 33 17 14 17 29 25 17 25 28 22 28 22 17 25 28 14 17 28 14 41 28 25 28 28 22 19 17 28 25 36 25 25 22 20 11 20 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 25 25 8 25 25 25 25 14 25 25 17 17 28 28 0 25 25 25 12 0 27 17 17 25 25 25 50 50 0 25 0 17 17 17 17 17 17 17 17 0 17 17 0 17 17 17 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 0 15 0 0 0 0 33 39 50 16 0 0 0 0 0 36 0 0 0 14 0 0 14 25 36 28 0 0 0 0 ] /Times-Bold 1000 786432 rf /Fg [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 17 20 25 25 41 39 17 17 17 25 28 12 17 12 14 25 25 25 25 25 25 25 25 25 25 14 14 28 28 28 22 46 36 33 33 36 30 28 36 36 17 19 36 30 44 36 36 28 36 33 28 30 36 36 47 36 36 30 17 14 17 23 25 17 22 25 22 25 22 17 25 25 14 14 25 14 39 25 25 25 25 17 19 14 25 25 36 25 25 22 24 10 24 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 25 25 8 25 25 25 25 9 22 25 17 17 28 28 0 25 25 25 12 0 23 17 17 22 22 25 50 50 0 22 0 17 17 17 17 17 17 17 17 0 17 17 0 17 17 17 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 14 0 0 0 0 30 36 44 15 0 0 0 0 0 33 0 0 0 14 0 0 14 25 36 25 0 0 0 0 ] /Times-Roman 1000 786432 rf /Fh [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 24 29 36 36 60 56 24 24 24 36 40 18 24 18 20 36 36 36 36 36 36 36 36 36 36 20 20 40 40 40 32 66 52 48 48 52 44 40 52 52 24 28 52 44 64 52 52 40 52 48 40 44 52 52 68 52 52 44 24 20 24 34 36 24 32 36 32 36 32 24 36 36 20 20 36 20 56 36 36 36 36 24 28 20 36 36 52 36 36 32 34 14 34 39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 36 36 12 36 36 36 36 13 32 36 24 24 40 40 0 36 36 36 18 0 32 25 24 32 32 36 72 72 0 32 0 24 24 24 24 24 24 24 24 0 24 24 0 24 24 24 72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 0 20 0 0 0 0 44 52 64 22 0 0 0 0 0 48 0 0 0 20 0 0 20 36 52 36 0 0 0 0 ] /Times-Roman 1000 1132462 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 300 TeXDict begin @letter %%EndSetup %%Page: 1 1 bop 464 224 a Fh(The)18 b(Mach)f(3.0)h(Multi-Server)e(System)832 315 y(Overview)829 483 y Fg(Daniel)c(P)-6 b(.)13 b(Julin)688 600 y(School)f(of)g(Computer)f(Science)694 658 y(Carnegie)h(Mellon)h (University)761 716 y(Pittsbur)o(gh,)f(P)-5 b(A)12 b(15213)807 832 y(dpj@cs.cmu.edu)720 975 y Ff(DRAFT)h Fg(of)e(July)i(16,)g(1991)62 1191 y Ff(This)8 b(is)g(a)g(working)g(document.)16 b(The)8 b(information)g(pr)o(esented)g(her)o(ein)g(is)g(subject)g(to)g(change)g (withou)o(t)0 1247 y(notice.)0 1416 y Fe(1.)46 b(Intr)o(oduction)0 1561 y Fd(The)12 b(Mach)g(3.0)g(multi-server)f(emulation)f(system)i(is)f(a)h (research)g(ef)o(fort)g(conducted)f(in)g(collaboration)f(between)h(CMU)0 1618 y(and)k(the)f(Research)h(Institute)e(of)i(OSF)l(.)h(The)e(main)h(goal)f (is)h(to)f(study)f(the)i(issues)e(and)i(technologies)d(involved)h(in)h(the)0 1674 y(development)j(of)g(collections)f(of)i(software)f(components)g(or)h (servers)f(that)g(cooperate)h(to)f(emulate)h(the)g(high-level)0 1731 y(semantics)11 b(and)h(functionality)e(of)i(various)f(modern)h (operating)f(systems,)h(on)f(top)h(of)g(a)g(Mach)h(3.0)f(micro-kernel)g (base.)0 1787 y(The)f(current)g(ef)o(fort)h(concentrates)e(on)h(the)g (realization)f(of)h(a)h(prototype)d(for)j(the)f(emulation)f(of)h(UNIX)g(4.3)g (BSD.)62 1885 y(This)g(paper)i(is)e(divided)g(in)h(two)f(major)i(sections.)18 b(The)12 b(\256rst)g(section)f(presents)g(a)i(brief)f(discussion)e(of)i(the)g (strategy)0 1941 y(and)f(major)h(design)e(considerations)f(for)i(the)g (development)f(of)i(this)e(prototype,)g(followed)g(by)h(an)g(overview)g(of)g (the)g(key)0 1998 y(elements)h(and)h(ideas)f(underlying)f(this)h(design.)20 b(The)12 b(second)g(section)g(provides)f(technical)h(descriptions)f(for)i (most)f(of)0 2054 y(the)f(major)g(areas)h(of)f(the)g(design)f(and)h (implementation.)962 2504 y(1)p eop %%Page: 2 2 bop 0 945 a @beginspecial 66 @vscale 66 @hscale 90 @angle 504 @hoffset -60 @voffset @setspecial %%BeginDocument: layers.ps /__NXdef{1 index where{pop pop pop}{def}ifelse}bind def /__NXbdef{1 index where{pop pop pop}{bind def}ifelse}bind def /UserObjects 10 array __NXdef /defineuserobject{ exch dup 1 add dup UserObjects length gt{ array dup 0 UserObjects putinterval /UserObjects exch def }{pop}ifelse UserObjects exch 3 -1 roll put }__NXbdef /undefineuserobject{UserObjects exch null put}__NXbdef /execuserobject{UserObjects exch get exec}__NXbdef /__NXRectPath{4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath}__NXbdef /__NXProcessRectArgs{ 1 index type /arraytype eq{ exch 0 4 2 index length 1 sub{ dup 3 add 1 exch{1 index exch get exch}for 5 1 roll 5 index exec }for pop pop }{exec}ifelse }__NXbdef /rectfill{gsave newpath {__NXRectPath fill} __NXProcessRectArgs grestore}__NXbdef /rectclip{newpath {__NXRectPath} __NXProcessRectArgs clip newpath}__NXbdef /rectstroke{ gsave newpath dup type /arraytype eq{dup length 6 eq}{false}ifelse{ {gsave __NXRectPath null concat stroke grestore} dup length array cvx copy dup 2 4 -1 roll put __NXProcessRectArgs }{{__NXRectPath stroke} __NXProcessRectArgs}ifelse grestore }__NXbdef /xyshow{ 0 1 3 index length 1 sub{ currentpoint 4 index 3 index 1 getinterval show 3 index 3 index 2 mul 1 add get add exch 3 index 3 index 2 mul get add exch moveto pop }for pop pop }__NXbdef /xshow{ 0 1 3 index length 1 sub{ currentpoint 4 index 3 index 1 getinterval show exch 3 index 3 index get add exch moveto pop }for pop pop }__NXbdef /yshow{ 0 1 3 index length 1 sub{ currentpoint 4 index 3 index 1 getinterval show 3 index 3 index get add moveto pop }for pop pop }__NXbdef /arct{arcto pop pop pop pop}__NXbdef /setbbox{pop pop pop pop}__NXbdef /ucache{}__NXbdef /ucachestatus{mark 0 0 0 0 0}__NXbdef /setucacheparams{cleartomark}__NXbdef /uappend{systemdict begin cvx exec end}__NXbdef /ueofill{gsave newpath uappend eofill grestore}__NXbdef /ufill{gsave newpath uappend fill grestore}__NXbdef /ustroke{ gsave newpath dup length 6 eq {exch uappend concat}{uappend}ifelse stroke grestore }__NXbdef /__NXustrokepathMatrix dup where {pop pop}{matrix def}ifelse /ustrokepath{ newpath dup length 6 eq{ exch uappend __NXustrokepathMatrix currentmatrix exch concat strokepath setmatrix }{uappend strokepath}ifelse } __NXbdef /upath{ [exch {/ucache cvx}if pathbbox /setbbox cvx {/moveto cvx}{/lineto cvx}{/curveto cvx}{/closepath cvx}pathforall]cvx } __NXbdef /setstrokeadjust{pop}__NXbdef /currentstrokeadjust{false}__NXbdef /selectfont{exch findfont exch dup type /arraytype eq {makefont}{scalefont}ifelse setfont}__NXbdef /_NXCombineArrays{ counttomark dup 2 add index dup length 3 -1 roll { 2 index length sub dup 4 1 roll 1 index exch 4 -1 roll putinterval exch }repeat pop pop pop }__NXbdef /setcmykcolor{ 1.0 exch sub dup dup 6 -1 roll sub dup 0 lt{pop 0}if 5 1 roll 4 -1 roll sub dup 0 lt{pop 0}if 3 1 roll exch sub dup 0 lt{pop 0}if setrgbcolor }__NXbdef /currentcmykcolor{currentrgbcolor 3{1.0 exch sub 3 1 roll}repeat 0}__NXbdef /flushgraphics{}def /setwindowtype{pop pop}def /currentwindowtype{pop 0}def /setalpha{pop}def /currentalpha{1.0}def /hidecursor{}def /obscurecursor{}def /revealcursor{}def /setcursor{4 {pop}repeat}bind def /showcursor{}def /NextStepEncoding where not{ /NextStepEncoding StandardEncoding 256 array copy def 0 [129/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/Ccedilla/Egrave /Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/Ugrave/Uacute /Ucircumflex/Udieresis/Yacute/Thorn/mu/multiply/divide/copyright 176/registered 181/brokenbar 190/logicalnot 192/onesuperior 201/twosuperior 204/threesuperior 209/plusminus/onequarter/onehalf/threequarters/agrave /aacute/acircumflex/atilde/adieresis/aring/ccedilla/egrave/eacute /ecircumflex/edieresis/igrave 226/iacute 228/icircumflex/idieresis/eth /ntilde 236/ograve/oacute/ocircumflex/otilde/odieresis 242/ugrave/uacute /ucircumflex 246/udieresis/yacute 252/thorn/ydieresis] {dup type /nametype eq {NextStepEncoding 2 index 2 index put pop 1 add}{exch pop}ifelse }forall pop /NextStepEncoding NextStepEncoding readonly def /_NXfstr 128 string dup 0 (_NX) putinterval def /findfont{ % Because we can never let NextStepEncoding get into % SharedFontDirectory, we cannot reencode a font to NextStepEncoding % if we are in shared mode. So if currentshared is true, % we call the normal findfont and return that /currentshared where {pop currentshared} {false} ifelse {//findfont exec} {dup _NXfstr 3 125 getinterval cvs length 3 add _NXfstr 0 3 -1 roll getinterval cvn exch FontDirectory 2 index known {pop FontDirectory exch get} {//findfont exec dup /Encoding get StandardEncoding eq { dup length dict exch {1 index /FID ne {2 index 3 1 roll put}{pop pop}ifelse}forall dup /Encoding NextStepEncoding put definefont }{exch pop} ifelse }ifelse }ifelse }bind def }{pop}ifelse /_NXProcArray 5 array __NXdef /_NXChannels 0 __NXdef /_NXTotalBytes 0 __NXdef /_NXDoImageOp{ 1 index{dup}{1}ifelse /_NXChannels exch store _NXChannels 2 add 2 roll _NXProcArray 0 _NXChannels getinterval astore pop 5 index 4 index mul 2 index{1 sub 8 idiv 1 add mul}{mul 1 sub 8 idiv 1 add}ifelse 4 index mul /_NXTotalBytes exch store pop exch pop gsave matrix invertmatrix concat 0.5 setgray 0 0 4 2 roll rectfill grestore { 0 1 _NXChannels 1 sub{ _NXProcArray exch get exec length _NXTotalBytes exch sub /_NXTotalBytes exch store}for _NXTotalBytes 0 le{exit}if }loop /_NXProcArray 5 array def }__NXbdef /colorimage{_NXDoImageOp}__NXbdef /alphaimage{1 add _NXDoImageOp}def /landscape false def /t300 [0.000 0.006 0.011 0.017 0.022 0.028 0.033 0.039 0.045 0.050 0.056 0.061 0.067 0.073 0.078 0.084 0.089 0.095 0.101 0.117 0.133 0.148 0.164 0.179 0.195 0.210 0.225 0.240 0.255 0.270 0.285 0.299 0.314 0.329 0.344 0.359 0.374 0.389 0.404 0.419 0.435 0.451 0.466 0.482 0.498 0.513 0.529 0.544 0.560 0.576 0.591 0.610 0.632 0.654 0.677 0.699 0.721 0.744 0.766 0.788 0.821 0.866 0.911 0.955 1.000 ] def /t400 [0.000 0.003 0.006 0.009 0.012 0.014 0.017 0.020 0.023 0.026 0.029 0.032 0.035 0.038 0.041 0.043 0.046 0.049 0.056 0.063 0.071 0.079 0.087 0.095 0.104 0.117 0.130 0.143 0.157 0.173 0.189 0.205 0.225 0.245 0.259 0.272 0.285 0.298 0.314 0.329 0.345 0.361 0.376 0.392 0.407 0.423 0.439 0.454 0.470 0.486 0.502 0.528 0.554 0.580 0.605 0.628 0.650 0.672 0.695 0.727 0.762 0.796 0.857 0.922 1.000 ] def /tlinear [0.000 0.016 0.031 0.047 0.062 0.078 0.094 0.109 0.125 0.141 0.156 0.172 0.188 0.203 0.219 0.234 0.250 0.266 0.281 0.297 0.312 0.328 0.344 0.359 0.375 0.391 0.406 0.422 0.438 0.453 0.469 0.484 0.500 0.516 0.531 0.547 0.562 0.578 0.594 0.609 0.625 0.641 0.656 0.672 0.688 0.703 0.719 0.734 0.750 0.766 0.781 0.797 0.812 0.828 0.844 0.859 0.875 0.891 0.906 0.922 0.938 0.953 0.969 0.984 1.000 ] def /dmatrix matrix def /desiredpat 0 def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul exch dup mul add sqrt round def /freq dpi 18.75 div 8 div round dup 0 eq { pop 1 } if 8 mul dpi exch div def /sangle 1 0 dmatrix defaultmatrix dtransform exch atan def /graymode true def /pats 16 array def /mymatrix matrix def /savedgray 0 def /F /fill load def /rc /rectclip load def /GS /gsave load def /GR /grestore load def /SL /setlinewidth load def /SC /setlinecap load def /CS { closepath S } bind def /A /strokepath load def /TR /translate load def /M /moveto load def /C /closepath load def /smat { mymatrix currentmatrix pop } bind def /rmat { mymatrix setmatrix } bind def /sp { P exch get exec } bind def systemdict /setshared known { 300 dpi eq { /tran t300 def } { /tran t400 def } ifelse } { /tran tlinear def } ifelse systemdict /xshow known not { /xhow { /pts exch def /str exch def 0 1 str length 1 sub { currentpoint 3 -1 roll str 1 index 1 getinterval show 3 1 roll moveto pts exch get 0 rmoveto } for } bind def } { /xhow { checkink xshow } bind def } ifelse systemdict /xyshow known not { /xyhow { /pts exch def /str exch def 0 1 str length 1 sub { currentpoint 3 -1 roll str 1 index 1 getinterval show 3 1 roll moveto 2 mul pts 1 index get pts 3 -1 roll 1 add get rmoveto } for } bind def } { /xyhow { checkink xyshow } bind def } ifelse /PrintInColor systemdict /colorimage known def PrintInColor { /HUE 0 def /SAT 0 def /BRIGHT 0 def /Colors [[0 0 ] [0 0 ] [0.00 1.0] [0.37 1.0] [0.60 1.0] [0.50 1.0] [0.83 1.0] [0.16 1.0] ] def /K { Colors exch get dup 0 get /HUE exch store 1 get /BRIGHT exch store HUE 0 eq BRIGHT 0 eq and {1.0 SAT sub setgray } {HUE SAT BRIGHT sethsbcolor } ifelse } def /mysetgray { /SAT exch 1.0 exch sub store HUE 0 eq BRIGHT 0 eq and {1.0 SAT sub setgray } {HUE SAT BRIGHT sethsbcolor } ifelse } bind def } { /mysetgray /setgray load def /K /pop load def } ifelse /setpattern { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/y exch def /x exch def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen tran offbits 64 mul offbits onbits add div cvi get mysetgray } bind def /myfonts [] def /procarray 30 array def 3.86 setmiterlimit currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def /currentpat -1 def /checkpat { graymode currentpat desiredpat ne or { pats desiredpat get exec /graymode false store /currentpat desiredpat store } if } bind def /Z { checkpat fill } bind def /checkink { graymode not { orgfreq organgle orgproc cvx setscreen /graymode true store savedgray mysetgray } if } bind def /F { checkink fill } bind def /dorectfill { checkink rectfill } bind def /dorectstroke { checkink rectstroke } bind def /S { checkink stroke } bind def /G { /savedgray exch def savedgray mysetgray } def /makecontextpattern { exch pop [null 8 1 /setpattern cvx] 4 array copy dup 0 5 -1 roll put cvx pats 3 1 roll put } def /P [ 0 1 15 { [ /desiredpat 3 -1 roll /store cvx ] cvx } for ] def /patoffsetx 0 def /patoffsety 0 def /currentpat null def /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /DiacriticEncode { /basefontdict exch def /newfontdict basefontdict maxlength 2 add dict def basefontdict {exch dup /FID ne {dup /Encoding eq {exch pop DiacriticEncoding } {exch} ifelse newfontdict 3 1 roll put } {pop pop} ifelse } forall newfontdict } def /line { pop pop pop pop } def /rrectpath { smat 4 2 roll TR /h exch def /w exch def /r exch def mark r 0 M w 0 w h r arcto w h 0 h r arcto 0 h 0 0 r arcto 0 0 w 0 r arcto C cleartomark rmat } def /RF { rrectpath F } bind def /RP { checkpat rrectpath fill } bind def /RS { rrectpath S } bind def /RQ { checkpat rrectpath A fill } bind def /NF { dorectfill } bind def /NR { checkpat 4 2 roll rectfill } bind def /W { savedgray 5 1 roll 1.0 G dorectfill G } bind def /invertbox { pop pop pop pop } def /highbox { pop pop pop pop } def /PP { newpath 3 1 roll M 1 sub { lineto } repeat } bind def /SP { 3 1 roll M 3 div cvi { curveto } repeat } bind def /rectpath { M dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto C } def /N { dorectstroke } bind def /NQ { checkpat 4 2 roll rectstroke } bind def /drawip { pop pop pop } bind def /eraseip { pop pop pop } bind def /highip { pop pop pop pop } def /insideedgebox { pop pop pop pop pop } def /replbox { pop pop pop pop pop pop } def /pop4 { pop pop pop pop } def /graybox { pop4 } def /darkgraybox { pop4 } def /arcpath { newpath TR /h exch def /w exch def /dth exch def /th exch def 90 th dth add sub 90 th sub dth 0 lt { exch } if 1 h w div neg scale 0 0 w 2 div 5 -2 roll arc } def /AS { smat arcpath rmat S } bind def /AP { checkpat smat arcpath rmat A fill } bind def /AF { smat arcpath 0 0 lineto rmat F } bind def /AQ { checkpat smat arcpath 0 0 lineto rmat fill } bind def /mymakefont { /size exch def /name exch def /i exch def /myfontdict name cvn findfont def myfontdict /Encoding get dup StandardEncoding eq exch /NextStepEncoding where { pop NextStepEncoding eq or }{ pop } ifelse { myfontdict DiacriticEncode /gfontdict exch def /gfontdict (F ) dup 1 i ( ) cvs putinterval cvn gfontdict definefont def } { /gfontdict myfontdict def } ifelse /myfonts [ myfonts aload pop null ] def myfonts i gfontdict [size 0 0 size neg 0 0 ] makefont put } def /FF { myfonts exch get setfont } bind def /CR { initclip newpath 4 2 roll M dup 0 exch rlineto exch 0 rlineto 0 exch neg rlineto C clip newpath } bind def /cliptowindow { initclip } def /beginprintcode { GS newpath 1 setlinewidth 0 SL 0 setlinejoin [] 0 setdash 0 setgray 10 setmiterlimit /FMdicttop countdictstack 1 add def /FMoptop count 7 sub def 200 dict begin TR dup neg scale 0.0 0.0 M } def /endprintcode { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for GR } def /beginPSInsetprintcode { /pinsetsave save def newpath 1 setlinewidth 0 setlinecap 0 setlinejoin [] 0 setdash 0 setgray 10 setmiterlimit /showpage {} def /FMdicttop countdictstack 1 add def /FMoptop count def 200 dict begin /showimage {} def } def /endPSInsetprintcode { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for pinsetsave restore } def /cacheimage { /flip exch def /theta exch def /bps exch def /h exch def /w exch def /destHeight exch def /destWidth exch def /destY exch def /destX exch def /rowbytes w bps mul 7 add 8 idiv def /buffer rowbytes string def GS destX destY TR theta rotate flip {destWidth neg destHeight scale} {destWidth destHeight scale} ifelse w h bps [w 0 0 h 0 h ] { currentfile buffer readhexstring pop } bind image GR } def <0f1e3c78f0e1c387> (I17e658) 8 makecontextpattern <0f87c3e1f0783c1e> (I17e674) 9 makecontextpattern (I17e690) 10 makecontextpattern (I17e6ac) 11 makecontextpattern <8142241818244281> (I17e6c8) 12 makecontextpattern <03060c183060c081> (I17e6e4) 13 makecontextpattern <8040201008040201> (I17e700) 14 makecontextpattern gsave -1 -9 translate /__NXbasematrix matrix currentmatrix def grestore /__NXsheetsavetoken save def -90 rotate -792 0 translate 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 792 612 rectclip [1 0 0 -1 0 612] concat 0 0 translate gsave 0 0 792 612 rectclip /landscape true def 0 0 792 612 CR 1 G 72 36 648 10 NF 0 G 0 (Times-Roman) 10 mymakefont 0 FF 72 42.67 M ( ) [0 ] xhow 1 G 72 569.333374 648 10 NF 0 G 72 576 M ( ) [0 ] xhow 1 G 72 72 648 468 NF 0 G 1 (Times-Roman) 12 mymakefont 1 FF 72 80 M ( ) [0 ] xhow 99 117 594 414 CR 1 G 99 117 594 414 NF 351 180 108 162 NF 2 SL 3.86 setmiterlimit 0 G 351 180 108 162 N 1 G 360 261 90 54 NF 0.5 G 360 261 90 54 N 1 G 360 189 90 54 NF 0.5 G 360 189 90 54 N 0 G 2 (Helvetica) 22 mymakefont 2 FF 384.03 219.79 M (Appl) [14.67 12.23 12.23 0 ] xhow 369 279 M (Emul) [14.67 18.32 12.23 0 ] xhow 407.01 302.1 M (Lib) [12.23 4.88 0 ] xhow 1 G 495 180 108 162 NF 0 G 495 180 108 162 N 1 G 504 261 90 54 NF 0.5 G 504 261 90 54 N 1 G 504 189 90 54 NF 0.5 G 504 189 90 54 N 0 G 528.03 219.79 M (Appl) [14.67 12.23 12.23 0 ] xhow 513 279 M (Emul) [14.67 18.32 12.23 0 ] xhow 551.01 302.1 M (Lib) [12.23 4.88 0 ] xhow 1 G 567 378 90 54 NF 0 G 567 378 90 54 N 583.25 409.18 M (Server) [14.67 12.23 7.32 10.99 12.23 0 ] xhow 1 G 432 378 90 54 NF 0 G 432 378 90 54 N 448.25 409.18 M (Server) [14.67 12.23 7.32 10.99 12.23 0 ] xhow 1 G 297 378 90 54 NF 0 G 297 378 90 54 N 313.25 409.18 M (Server) [14.67 12.23 7.32 10.99 12.23 0 ] xhow 1 G 270 468 414 54 NF 0 G 270 468 414 54 N 416.58 499.18 M (Mach Kernel) [18.32 12.23 10.99 12.23 6.11 14.67 12.23 7.32 12.23 12.23 0 ] xhow 343.93 171.18 M (User process) [15.88 10.99 12.23 7.32 6.11 12.23 7.32 12.23 10.99 12.23 10.99 0 ] xhow 486 172.18 M (User process) [15.88 10.99 12.23 7.32 6.11 12.23 7.32 12.23 10.99 12.23 10.99 0 ] xhow 279 450 117 450 2 PP 1 SL S 279 315 117 315 2 PP S 279 252 117 252 2 PP S 121.04 269.3 126 252 130.96 269.3 126 269.3 4 PP F 130.96 297.7 126 315 121.04 297.7 126 297.7 4 PP F 126 269.3 126 297.7 2 PP 2 SL S 121.04 332.3 126 315 130.96 332.3 126 332.3 4 PP F 130.96 432.7 126 450 121.04 432.7 126 432.7 4 PP F 126 332.3 126 432.7 2 PP S 121.04 467.3 126 450 130.96 467.3 126 467.3 4 PP F 130.96 504.7 126 522 121.04 504.7 126 504.7 4 PP F 126 467.3 126 504.7 2 PP S 117 522 270 522 2 PP 1 SL S 145.24 292.18 M (Emulation) [14.67 18.32 12.23 4.88 12.23 6.11 4.88 12.23 0 ] xhow 142.69 391.18 M (Service) [14.67 12.23 7.32 10.99 4.88 10.99 0 ] xhow 144 493.03 M (Kernel) [14.67 12.23 7.32 12.23 12.23 0 ] xhow grestore grestore showpage __NXsheetsavetoken restore %%EndDocument @endspecial 649 1018 a Fd(Figure)11 b(1:)16 b(General)11 b(System)g (Structure)0 1152 y Fe(2.)46 b(Design)10 b(Strategy)0 1297 y(2.1.)46 b(System)11 b(Structur)o(e)0 1425 y Fd(The)18 b(main)g(goal)f(of)h (the)f(system)g(is)h(to)f(provide)g(an)h(environment)e(for)i(the)g(execution) f(of)g(a)i(number)e(of)h Fc(emulated)0 1482 y(processes)p Fd(.)e(Each)11 b(such)f(process)h(contains)f(a)i(program)f(originally)e(written)h(for)i (another)e(operating)g(system,)h(and)g(must)0 1538 y(be)j(made)g(to)f (operate)g(in)g(this)g(emulated)g(environment)g(as)g(if)h(it)f(was)g(running) f(on)h(its)g(native)g(system.)23 b(The)13 b(operating)0 1595 y(system)e(whose)g(features)g(are)h(thus)f(being)f(emulated)h(is)g(often)g (hereafter)h(referred)h(to)e(as)g(the)g Fc(target)g(operating)e(system)p Fd(.)0 1651 y(In)k(the)f(context)g(of)h(an)f(emulation)g(system,)h(the)f (execution)g(environment)g(de\256ned)g(by)h(the)f(Application)f(Programmer)0 1708 y(Interface)h(\(API\))g(of)f(the)g(tar)o(get)g(operating)f(system)h(is)f (also)h(often)g(referred)h(to)e(as)i(the)f Fc(operating)e(system)h (environment)p Fd(,)0 1764 y(to)h(distinguish)e(it)i(from)h(the)g(API)g(and)g (facilities)e(found)h(in)h(a)g(\252native\272,)g(non-emulated)f (implementation)f(of)i(the)f(tar)o(get)0 1821 y(operating)f(system.)62 1918 y(Figure)h(1)f(shows)f(the)h(general)h(or)o(ganization)e(of)h(a)h (system)f(performing)g(such)g(emulation.)16 b(Each)10 b(emulated)h(process)0 1975 y(is)e(implemented)g(by)h(a)g(Mach)g Fc(task)p Fd(.)16 b(Beside)9 b(the)h(program)g(to)f(be)h(emulated,)g(each)g(of)g(those)f(tasks) g(contains)f(an)i(instance)0 2031 y(of)i(the)g Fc(emulation)f(library)p Fd(,)g(which)g(intercepts)g(the)h(system)g(calls)f(invoked)g(by)h(that)g (program.)19 b(The)12 b(bulk)f(of)i(the)e(work)0 2088 y(for)16 b(the)g(emulation)f(is)g(performed)i(by)e(a)i(combination)d(of)i(individual)e (servers)i(responsible)e(for)i(functions)f(such)g(as)0 2144 y(\256le)f(service,)g(network)f(access,)h(process)f(management,)i(etc.)24 b(These)13 b(services)g(are)h(normally)f(exported)g(to)g(the)g(client)0 2201 y(emulation)d(libraries)g(through)f(special)h(libraries)g(or)h(proxies)e (linked)h(with)g(the)g(clients,)g(which)g(facilitate)g(and)h(optimize)0 2257 y(client-server)j(interactions.)24 b(Finally)m(,)14 b(the)g Fc(pure)i(Mach)f(kernel)f Fd(provides)f(the)h(basic)g(facilities)f(for)i(the) f(execution)f(of)0 2314 y(those)d(various)h(components,)f(as)h(well)g(as)g (raw)h(device)f(access.)17 b(This)10 b(or)o(ganization)g(can)i(be)f(viewed)g (as)g(a)h(combination)0 2370 y(of)h(three)g(software)g(layers)g(that)g(can)g (be)h(designed)d(and)i(maintained)g(independently)m(,)f(corresponding)f(the)i (the)g(kernel,)884 2504 y Fc(DRAFT-2)p eop %%Page: 3 3 bop 0 42 a Fd(the)11 b(servers)g(and)g(their)g(proxies,)f(and)h(the)g (emulation)f(libraries.)0 206 y Fe(2.2.)46 b(Major)11 b(Design)f (Considerations)0 334 y Fd(The)h(or)o(ganization)f(above)h(of)o(fers)h(the)f (potential)e(to)i(achieve)g(a)h(number)f(of)h(high-level)e(goals,)g(while)h (at)g(the)g(same)h(time)0 391 y(creating)f(concerns)g(in)g(other)g(areas.)17 b(Consideration)10 b(for)i(these)e(questions)g(guides)g(the)h(whole)g(design) f(and)h(de\256nes)g(the)0 447 y(various)f(tradeof)o(fs)h(to)g(be)g(resolved:) 0 611 y Fe(Modularity)45 b Fd(The)11 b(\256rst)h(major)g(aspect)f(of)h(the)f (structure)g(described)g(above)g(is)g(the)h(separation)e(of)i(the)f(basic)g (services)0 668 y(into)g(many)h(independent,)e(modular)i(components.)17 b(Such)12 b(modularity)f(is)g(obviously)e(crucial)j(in)f(the)h(area)h(of)e (software)0 724 y(development)e(and)h(maintenance,)h(but)e(it)h(also)g(of)o (fers)g(the)g(potential)f(for)h(generating)g(systems)f(that)g(are)i (customized)f(for)0 781 y(dif)o(ferent)15 b(user)o(-level)f(applications)e (and)j(dif)o(ferent)f(operating)g(environments.)26 b(System)14 b(engineers)h(can)g(build)e(many)0 837 y(system)h(con\256gurations)f(by)i (selecting)e(and)i(assembling)e(components)h(from)h(a)g(collection)f(of)g (general-purpose)g(and)0 894 y(specialized)d(servers)g(supporting)e(a)j(wide) f(variety)g(of)g(requirements.)17 b(Ideally)m(,)11 b(this)g(approach)g(could) f(also)h(give)g(rise)h(to)0 950 y(a)f(new)g(industry)d(for)j(the)g (production)d(of)j(\252system)f(components\272,)g(with)g(the)g(potential)f (to)i(greatly)f(enhance)g(the)h(overall)0 1006 y(quality)f(and)h (\257exibility)e(of)i(future)g(systems.)0 1171 y Fe(Extensibility)44 b Fd(A)11 b(second)e(major)h(consideration)f(is)g(the)h(ability)e(to)i (extend)g(or)g(alter)g(the)g(design)f(and)h(implementation)0 1227 y(of)g(an)g(existing)f(system)g(in)h(ways)g(not)f(directly)g (anticipated)g(by)h(the)f(original)g(designers.)15 b(Examples)10 b(of)g(such)g(modi\256ca-)0 1283 y(tions)h(include)h(the)h(addition)e(of)i (new)f(high-level)g(services)g(and)h(functions)e(corresponding)g(to)h(new)h (developments)f(in)0 1340 y(technology)7 b(or)i(system)f(programming)g (concepts)g(\(specialized)g(\256le)h(servers,)h(databases,)f(distributed)d (facilities,)j(multi-)0 1396 y(threading,)h(etc.\),)j(and)d(changes)h(to)g (the)g(application)e(programming)i(interface)g(exported)f(by)h(the)g (emulation)f(system)h(to)0 1453 y(represent)g(dif)o(ferent)g (\252\257avors\272)g(of)h(interfaces)f(or)g(to)g(accommodate)g(evolving)f (standards.)15 b(The)c(keys)g(to)g(realizing)f(this)0 1509 y(potential)f(are)j(the)f(separation)g(of)g(functions)e(between)i(servers,)h (careful)f(design)f(of)i(server)f(interfaces)g(to)g(facilitate)f(the)0 1566 y(integration)f(of)j(new)f(services,)g(and)g(careful)g(design)f(of)i (individual)c(components)i(to)h(simplify)f(modi\256cations.)0 1730 y Fe(Support)h(for)g(Multiple)f(Emulations)44 b Fd(Combining)9 b(the)h(modularity)f(and)g(extensibility)e(aspects)j(mentioned)f(above,)0 1786 y(it)16 b(is)g(also)h(possible)d(to)j(reduce)g(the)f(design)g(and)g (implementation)g(ef)o(forts)g(necessary)h(to)f(build)f(several)i(emulation)0 1843 y(systems)c(for)i(dif)o(ferent)f(tar)o(get)f(operating)g(systems.)25 b(A)14 b(number)g(of)g(high-level)f(functions)f(to)i(be)g(provided)f(in)h (many)0 1899 y(operating)j(systems)g(dif)o(fer)i(only)e(in)g(relatively)g (small)h(details)f(of)h(interface)g(\(network)g(access,)i(IPC,)f(\256le)g (service,)0 1956 y(etc.\).)31 b(For)17 b(these)e(cases,)j(it)d(is)g (desirable)g(to)h(design)f(servers)g(than)h(can)g(be)g(easily)f(reused)h(or)g (specialized)f(for)h(each)0 2012 y(tar)o(get)e(system.)25 b(Moreover)n(,)16 b(in)d(cases)i(where)f(it)g(is)f(impractical)h(to)g(use)g(a)g(whole)g(common) g(server)n(,)i(the)e(design)f(may)0 2069 y(substantially)7 b(simplify)i(the)h(task)g(of)g(constructing)e(dif)o(ferent)i(servers)g(or)g (other)g(components)f(by)h(identifying)e(common)0 2125 y(sub-systems)13 b(and)h(lower)o(-level)g(modules)g(\(access)g(control,)h(name)g(resolution,)f (data)g(transfer)n(,)i(etc.\))27 b(and)14 b(providing)0 2182 y(reusable)d(implementations)e(for)j(them.)62 2279 y(Beside)h(the)g (immediate)g(question)f(of)h(simplifying)e(the)i(implementation)f(of)h(dif)o (ferent)g(emulation)f(systems)g(to)h(be)0 2336 y(used)f(independently)m(,)f (the)h(ideas)g(presented)g(here)h(also)f(raise)h(two)e(additional)g (questions.)18 b(First,)13 b(it)f(may)h(be)g(desirable)0 2392 y(to)i(support)g(multiple)f(emulations)h(executing)f(simultaneously)f(on)j (the)f(same)i(hardware,)g(either)f(with)e(disjoint)g(sets)884 2504 y Fc(DRAFT-3)p eop %%Page: 4 4 bop 0 42 a Fd(of)14 b(servers)g(or)h(with)e(some)h(sharing)g(of)g(hardware)g (and)g(system)g(facilities.)25 b(Second,)15 b(assuming)e(that)h(more)h(than)e (one)0 98 y(emulation)h(system)g(is)g(operating)f(on)h(a)h(given)f(node)g(or) h(distributed)d(network,)j(it)f(may)h(be)f(desirable)g(to)g(provide)g(for)0 154 y(interoperability)8 b(between)i(various)f(user)h(programs)h(executing)e (in)h(these)g(dif)o(ferent)g(operating)f(system)h(environments,)0 211 y(in)j(the)g(form)h(of)f(sharing)g(of)g(software)g(resources)h(visible)d (to)i(application)f(programmers)i(\(\256les,)g(I/O)f(channels,)h(etc.\).)0 267 y(Although)8 b(these)i(questions)e(certainly)h(merit)i(further)f (investigation,)e(they)h(are)i(not)f(directly)f(addressed)g(by)h(the)g (current)0 324 y(prototype.)0 484 y Fe(Security)46 b Fd(It)10 b(is)f(expected)g(that)g(the)g(emulation)g(architecture)g(under)g (consideration)f(can)i(be)g(used)f(to)g(produce)g(systems)0 541 y(with)h(very)g(high)g(security)f(levels,)i(potentially)d(higher)i(than)g (those)g(achievable)g(with)f(traditional)g(system)h(implementa-)0 597 y(tions.)k(Since)7 b(each)g(server)g(operates)g(in)g(a)g(separate,)i (protected)e(address)g(space)g(with)g(secure)g(communications)g(channels,)0 653 y(the)12 b(task)g(of)g(verifying)f(the)h(correctness)g(and)g(integrity)f (of)h(each)h(sub-system)e(is)h(greatly)f(simpli\256ed)h(compared)g(to)g(the)0 710 y(equivalent)c(task)g(in)h(a)g(monolithic)f(system.)15 b(Moreover)n(,)10 b(a)g(careful)f(de\256nition)f(of)h(the)g(separation)f(of)h (functions)e(between)0 766 y(dif)o(ferent)j(servers)g(can)g(in)f(many)h (cases)g(eliminate)g(the)f(need)h(for)g(certi\256cation)f(of)h(some)g (servers)g(altogether)m(.)16 b(However)n(,)0 823 y(this)11 b(architecture)h(also)g(introduces)f(new)h(dif)o(\256culties.)19 b(Unlike)11 b(the)h(situation)e(found)i(in)g(traditional)e(systems,)i(there)h (is)0 879 y(no)g(system)g(component)g(that)g(constitutes)e(a)j(natural)f (centralized)g(repository)f(for)h(security-related)g(information)f(and)0 936 y(policies.)k(In)c(addition,)e(the)h(very)h(modularity)e(of)i(this)e(or)o (ganization)g(gives)h(rise)g(to)g(potentially)f(complex)h(interactions)0 992 y(between)h(components)e(that)i(can)g(themselves)f(complicate)g(the)h (security)f(analysis.)17 b(Both)12 b(of)g(these)f(problems)h(need)g(to)0 1049 y(be)f(addressed)g(early)g(in)g(the)g(design)f(if)h(this)f(design)g(is)h (to)f(be)i(successful)e(in)h(the)f(area)j(of)e(security)m(.)0 1209 y Fe(Practical)h(Considerations)44 b Fd(In)12 b(addition)e(to)i(the)g (high-level)f(goals)g(listed)g(above,)h(a)h(practical)e(system)h(should)f (also)0 1265 y(try)g(to)g(meet)g(a)h(few)f(more)h(mundane)f(requirements:)0 1381 y Fe(Performance)23 b Fd(:)32 b(The)19 b(overall)g(performance)h(of)f (the)g(system)g(is)g(very)g(critical)f(to)h(its)f(success)h(and)g (acceptance.)114 1438 y(Problems)7 b(in)h(this)e(area)j(stem)f(from)g(the)g (overhead)f(of)h(communications)e(between)i(clients)f(and)g(servers,)i(and)f (from)114 1494 y(the)f(need)h(of)g(various)f(servers)g(to)h(sometimes)f (communicate)h(with)f(each)h(other)f(to)h(maintain)f(a)h(shared,)g (distributed)114 1551 y(view)i(of)g(the)g(system)g(state.)16 b(They)10 b(must)g(be)h(addressed)f(through)f(careful)i(analysis)e(of)i(all)f (interactions)e(between)114 1607 y(components,)14 b(and)g(through)f(the)h (design)f(of)i(appropriate)e(interfaces)h(and)h(communications)e(techniques.) 24 b(On)114 1663 y(the)15 b(other)g(hand,)i(since)e(the)h(architecture)f(of)h (the)f(emulation)g(system)g(is)g(quite)g(dif)o(ferent)g(from)i(that)e(of)g (more)114 1720 y(traditional)d(systems,)i(performance)g(in)g(various)f(areas) h(is)f(not)h(necessarily)f(bounded)f(by)i(the)f(performance)i(of)114 1776 y(existing)9 b(architectures.)0 1862 y Fe(Importing)i(Existing)f(Code:) 23 b Fd(In)c(a)h(lar)o(ge)f(software)g(project)f(such)h(as)g(the)g(one)g (described)f(here,)k(it)d(is)f(extremely)114 1919 y(desirable)11 b(to)g(be)h(able)g(to)f(import)g(components)g(or)h(servers)f(built)g(for)h (other)f(projects.)17 b(For)12 b(example,)h(it)e(is)g(often)114 1975 y(expedient)e(to)h(take)h(advantage)f(of)g(code)h(for)g(various)e (\256le)i(systems)f(or)g(networking)f(implementations,)g(that)h(was)114 2032 y(originally)f(written)h(for)h(a)h(speci\256c)f(\(non-emulated\))g (operating)f(system.)0 2118 y Fe(Reasonable)h(Licensing:)22 b Fd(In)12 b(view)f(of)h(the)f(desire)h(to)f(import)g(foreign)g(code,)h(the)g (success)f(of)g(a)h(new)g(system)f(is)g(likely)114 2174 y(to)g(be)h (in\257uenced)f(by)g(the)h(licensing)e(constraints)g(imposed)h(by)g(the)h (various)e(software)i(elements)f(that)g(compose)114 2231 y(it.)24 b(Although)12 b(licensing)g(restrictions)g(per)i(se)h(are)f(not)f (necessarily)g(avoidable)g(or)h(even)g(undesirable)f(\(see)h(the)114 2287 y(suggestion)e(for)j(a)g(\252components)e(industry\272)g(above\),)j(the) f(emulation)e(system)h(must)g(try)h(to)f(avoid)g(relying)f(on)114 2344 y(components)f(for)h(which)g(those)f(restrictions)g(are)i(too)f(strong,) g(or)g(provide)g(for)g(the)g(easy)g(replacement)h(of)g(such)114 2400 y(components)c(if)h(desired.)884 2504 y Fc(DRAFT-4)p eop %%Page: 5 5 bop 0 42 a Fe(2.3.)46 b(Major)11 b(Design)f(Dir)o(ections)0 170 y Fd(W)n(ithin)h(the)h(guidelines)e(de\256ned)j(by)f(these)f(high-level)g (considerations,)g(the)h(design)f(is)h(based)g(on)g(a)h(small)f(number)g(of)0 226 y(key)f(ideas)g(representing)f(the)h(fundamental)f(approach)h(and)g (technologies)e(available)i(to)g(the)f(implementers:)0 389 y Fe(Systematic)d(r)o(e-design)46 b Fd(First)8 b(of)f(all,)i(the)e(design)g (under)g(consideration)f(constitutes)f(a)j(new)g(approach)f(of)h(the)f (problem)0 445 y(of)j(implementing)f(high-level)f(system)h(services,)h(and)g (not)f(an)h(evolution)e(of)i(existing)e(kernel-based)h(implementations.)0 502 y(No)k(ef)o(fort)h(is)f(made)h(to)f(imitate)g(any)h(internal)e(details)h (or)g(data)g(structures)g(from)h(other)f(systems;)h(instead,)f(the)g(design)0 558 y(concentrates)i(on)g(identifying)e(and)i(applying)f(the)h(techniques)f (best)h(suited)f(to)h(the)g(proposed)f(micro-kernel,)j(multi-)0 615 y(server)11 b(architecture.)0 777 y Fe(Generic)19 b(Services)46 b Fd(A)17 b(second)h(key)f(idea)h(is)f(the)h(observation)e(that)h(the)h (emulation)f(library)g(is)g(the)h(only)f(system)0 833 y(component)f(that)g (interacts)g(directly)g(with)g(the)g(application)f(programs)i(operating)e(in) i(the)f(emulated)h(environment.)0 890 y(Therefore,)c(the)f(programming)g (interface)h(of)f(the)g(tar)o(get)g(operating)f(system)h(to)g(be)g(emulated)g (need)g(only)f(be)i(exported)0 946 y(at)k(the)f(boundary)g(between)g(these)g (application)f(programs)i(and)f(their)g(emulation)g(library)g(and)g(not)g (directly)g(by)g(the)0 1003 y(collection)10 b(of)h(servers.)16 b(In)c(the)e(proposed)g(system)h(design,)g(many)g(of)g(the)g(servers)g(are)h (lar)o(gely)f(\252generic\272,)h(providing)d(a)0 1059 y(set)h(of)f(services)h (that)f(are)i(useful)e(to)g(a)h(wide)g(class)f(of)h(high-level)e(operating)h (system)h(interfaces)f(and/or)g(con\256gurations.)0 1116 y(The)15 b(aspects)h(of)f(interface)h(or)g(functionality)d(that)i(are)h(speci\256c)g (to)f(a)h(particular)f(emulation)g(tar)o(get)g(are)i(as)e(much)h(as)0 1172 y(possible)e(concentrated)i(in)f(the)h(emulation)f(library)m(,)i(which)f (then)f(acts)h(as)g(a)h(sort)e(of)h(\252translator)r(\272)f(or)i (\252presentation)0 1229 y(layer)r(\272)9 b(above)h(the)f(generic)h(service)f (layer)m(.)17 b(Note)9 b(that)g(this)f(approach)h(also)g(allows)g(the)g (design)g(of)g(the)g(server)h(interfaces)0 1285 y(to)f(concentrate)h(on)f (issues)g(of)g(\257exibility)m(,)g(security)g(and)g(performance,)j(with)c (questions)g(of)i(simplicity)e(and)h(ease)h(of)g(use)0 1341 y(by)h(application)e(programmers)j(becoming)f(secondary)m(.)0 1504 y Fe(Modular)17 b(Services)46 b Fd(In)17 b(accordance)h(with)e(the)h (objectives)f(established)g(above,)i(and)g(following)d(on)i(the)g(idea)g(of)0 1560 y(keeping)10 b(the)h(service)g(layer)g(as)g(generic)g(as)g(possible,)e (the)i(design)f(also)g(attempts)g(to)h(make)g(this)f(layer)h(highly)f (modular)m(.)0 1617 y(The)k(whole)f(system)g(is)g(treated)h(not)f(as)h(a)g (single)f(rigid)g(construction)e(but)i(as)h(a)g(library)g(of)f(replaceable)h (tools,)g(with)f(a)0 1673 y(\257exible)h(framework)g(for)g(assembling)f (them.)25 b(The)14 b(design)f(de\256nes)g(as)h(many)h(independent)d(services) h(in)h(the)g(second)0 1730 y(layer)h(as)f(possible,)g(each)h(of)f(which)g(to) g(be)h(implemented)f(typically)f(with)g(a)i(separate)f(server)m(.)28 b(This)13 b(decomposition)0 1786 y(is)f(limited)g(by)h(two)f(main)h (considerations.)19 b(First,)13 b(when)f(dealing)g(with)g(multiple)g(tar)o (get)g(emulations,)h(it)f(is)g(important)0 1843 y(that)f(the)g(set)g(of)g (services)g(so)g(de\256ned)g(not)g(simply)f(be)h(the)g(concatenation)f(of)i (all)f(the)g(speci\256c)g(services)g(for)g(each)h(tar)o(get)0 1899 y(environment;)k(commonalities)f(must)g(be)h(properly)e(recognized,)j (analyzed)e(and)h(exploited.)28 b(Second,)17 b(interactions)0 1955 y(between)11 b(servers)h(are)g(typically)e(more)j(expensive)d(than)h (interactions)f(between)i(modules)f(inside)f(a)i(particular)f(server;)0 2012 y(the)16 b(separation)g(of)g(services)g(and)g(the)h(corresponding)d (interfaces)i(must)g(be)h(carefully)f(de\256ned)h(to)f(minimize)g(those)0 2068 y(interactions.)0 2231 y Fe(Common)h(Mechanisms)g(and)h(Facilities)44 b Fd(In)18 b(a)g(modular)f(system)g(such)h(as)f(the)h(one)f(proposed)g(here,) j(there)d(are)0 2287 y(many)12 b(examples)g(of)f(functions)g(and)g(problems)g (that)h(must)f(be)h(addressed)f(in)g(several)h(dif)o(ferent)g(servers,)g(or)g (in)f(several)0 2344 y(specialized)c(versions)g(of)g(the)g(same)g(service:)13 b(data)7 b(transfer)g(\(I/O\),)g(access)g(mediation,)i(management)e(of)g (shared)g(buf)o(fers,)0 2400 y(naming,)12 b(synchronization,)e(etc.)19 b(T)m(o)11 b(maximize)h(the)g(potential)e(for)i(extensibility)d(and)i(ease)h (of)g(modi\256cation,)g(as)g(well)884 2504 y Fc(DRAFT-5)p eop %%Page: 6 6 bop 0 42 a Fd(as)10 b(to)g(reduce)h(the)f(overall)g(complexity)f(and)h(avoid) g(code)g(duplication,)e(the)j(design)e(concentrates)g(on)h(identifying)e (these)0 98 y(common)14 b(issues)e(and)i(de\256ning)f(\252standard\272)g (solutions)e(or)i(mechanisms)h(that)f(can)h(be)f(used)h(throughout)d(the)i (system.)0 154 y(Examples)e(of)h(this)f(approach)g(range)h(from)h(the)e (creation)h(of)f(a)i(library)e(of)h(code)f(fragments)h(that)f(can)h(be)g (used)g(in)f(many)0 211 y(servers,)e(to)g(the)f(de\256nition)f(of)i(general)g (principles)e(about)h(how)g(a)h(whole)f(class)g(of)h(speci\256c)g(issues)e (should)g(be)i(addressed.)0 375 y Fe(Standard,)i(Object-Oriented)i(System)c (Interfaces)46 b Fd(As)9 b(an)h(important)f(application)e(of)j(the)f(idea)h (of)g(using)e(common)0 431 y(facilities,)14 b(most)f(high-level)f(functions)g (are)j(de\256ned)f(in)f(terms)h(of)g(an)g(object-oriented)e(approach,)j(with) d(a)j(collection)0 488 y(of)g(standard)f(service)h(interfaces.)28 b(Each)16 b(operating)e(system)g(service)h(is)g(represented)f(by)h(one)g(or)g (more)h(abstract)e Fc(OS)0 544 y(objects)g Fd(or)i Fc(items)p Fd(,)f(exporting)f(a)i(well-de\256ned)e(set)h(of)h(operations.)27 b(Examples)15 b(from)h(the)f(UNIX)g(domain)g(are)h(\256les,)0 601 y(pipes,)f(sockets,)g(ttys,)f(etc.,)j(but)d(in)g(practice,)i(each)f(of)f (those)g(UNIX)g(abstractions)f(may)i(be)g(represented)f(by)h(a)f(more)0 657 y(neutral)d(item,)h(corresponding)e(to)h(a)h(generic)g(service)f(that)g (can)h(be)g(specialized)f(for)g(a)h(given)f(emulation)g(environment.)0 714 y(Each)i(server)h(normally)e(implements)h(a)g(lar)o(ge)h(number)f(of)g (similar)n(,)h(but)e(independent)g(items.)22 b(Note)13 b(that)f(the)h (various)0 770 y(servers)f(and)g(items)g(may)g(themselves)f(be)i(implemented) e(using)g(object-oriented)f(techniques;)h(the)h(word)f Fc(item)h Fd(is)g(used)0 827 y(to)f(avoid)f(confusion)g(with)g(the)h(actual)g(objects)f (used)h(at)g(the)g(implementation)e(level.)62 925 y(The)h(operations)e (exported)h(by)g(each)h(item)g(are)g(grouped)f(in)g(several)h(independent)e (interfaces)h(such)h(as)f(I/O,)h(naming,)0 981 y(access)g(control,)g(etc.)16 b(Several)11 b(of)f(these)g(interfaces)g(are)h(generic,)f(while)g(others)f (are)i(speci\256c)f(to)g(particular)f(sub-classes)0 1038 y(of)15 b(items.)27 b(They)14 b(provide)g(a)h(common)g(base)g(for)g(the)g(system)f (speci\256cation,)h(that)f(can)h(be)g(extended)f(or)h(specialized)0 1094 y(as)d(needed)g(to)g(support)e(additions)g(in)i(high-level)e (functionality)m(,)g(or)j(deal)e(with)h(the)f(speci\256c)h(requirements)g(of) g(various)0 1150 y(tar)o(get)g(emulations.)18 b(Note)11 b(that)g(these)h (basic)g(interfaces)f(do)h(not)f(map)i(directly)e(into)g(the)g(various)g (high-level)g(services;)0 1207 y(rather)n(,)f(they)d(correspond)h(to)g (low-level)f(services)h(that)g(must)g(be)g(combined)g(to)g(de\256ne)h(the)f (complete)g(item)g(functionality)m(.)0 1263 y(In)15 b(particular)n(,)i (special)d(attention)g(is)h(given)f(to)h(avoid)g(imposing)e(any)i(particular) g(subdivision)d(of)k(services)e(between)0 1320 y(servers,)d(or)h(any)f (speci\256c)g(server)g(implementation.)0 1484 y Fe(Client-side)k(Pr)o (ocessing)44 b Fd(Independent)14 b(of)h(providing)e(a)i(convenient)e (mechanism)i(for)g(introducing)e(a)i(separation)0 1540 y(between)8 b(a)h(generic)f(and)g(a)h(tar)o(get-speci\256c)f(layer)g(in)g(the)g(system,)h (the)f(emulation)f(library)h(also)f(provides)g(an)i(opportunity)0 1597 y(to)h(optimize)f(many)i(client-server)f(interactions)e(by)i(displacing) e(some)j(of)f(the)g(processing)f(required)h(to)g(service)g(various)0 1653 y(functions)g(from)i(the)f(system)f(servers)i(into)e(the)h(clients)f(of) i(these)f(services)g(themselves.)16 b(Several)c(system)e(services)h(are)0 1710 y(de\256ned)k(so)f(that)g(the)g(emulation)g(library)g(itself)g(is)g (responsible)f(for)i(keeping)e(various)h(elements)h(of)f(client)g(state)g (and)0 1766 y(performing)9 b(many)g(functions)f(locally:)14 b(UNIX)9 b(signal)f(handling,)g(UNIX)h(\256le)h(descriptor)e(table,)i (pathname)f(resolution,)0 1823 y(current)17 b(working)e(directory)m(,)j Fb(exec\(\))g Fd(logic,)g(etc.)33 b(The)17 b(various)e(components)h(in)g(the) h(\252service\272)f(layer)h(are)h(then)0 1879 y(considered)12 b(as)i(a)f(second)g(level)g(of)g(service,)h(invoked)e(only)h(when)g(the)g (emulation)f(library)h(code)g(cannot)g(perform)g(all)0 1936 y(the)d(necessary)h(functions.)k(In)c(addition,)e(many)i(of)g(the)f (interactions)f(between)i(the)f(emulation)g(library)g(and)h(the)f(service)0 1992 y(layer)e(are)h(themselves)e(optimized,)i(through)d(the)i(use)g(of)h (client-side)d(caching)i(and)g(buf)o(fers)g(of)h(memory)f(shared)g(between)0 2049 y(clients)i(and)h(servers.)17 b(A)11 b(special)f(mechanism)i(\()p Fc(proxy)f(objects)p Fd(,)f(see)i(below\))e(facilitates)g(this)g(type)h(of)g (optimizations.)62 2146 y(It)g(is)f(clear)h(that)e(there)i(are)g(limitations) d(to)i(the)h(use)f(of)g(client-side)f(processing.)15 b(There)c(are)g(many)g (system)f(functions)0 2203 y(that)16 b(require)g(synchronization)e(and)j (sharing)e(of)i(information)e(or)i(resources)f(between)g(several)h(clients.) 31 b(Although)0 2259 y(there)15 b(are)h(mechanisms)f(to)f(handle)h(a)g (number)g(of)g(these)g(problems)f(with)g(minimal)h(server)g(overhead,)h(the)f (need)g(for)0 2316 y(external)e(agents)f(or)i(servers)f(cannot)f(be)i (completely)e(eliminated.)22 b(More)14 b(importantly)m(,)e(the)h(decision)f (to)h(place)g(more)0 2372 y(responsibility)e(for)k(various)f(system)g (functions)f(in)h(an)h(emulation)e(library)h(that)g(is)h(not)e(protected)h (from)i(incorrect)e(or)884 2504 y Fc(DRAFT-6)p eop %%Page: 7 7 bop 0 42 a Fd(malicious)8 b(user)g(programs)g(has)h(obvious)e(implications)f (in)i(the)h(areas)g(of)f(robustness)f(and)h(security)m(.)15 b(In)9 b(accordance)g(with)0 98 y(the)j(goal)h(of)f(supporting)f(very)h (secure)h(system)f(implementations,)g(the)g(design)g(policy)f(is)h(to)h (avoid)f(any)g(optimization)0 154 y(that)h(can)h(allow)e(a)i(malicious)f (emulated)g(client)g(to)g(gain)g(unauthorized)f(access)h(to)h(protected)e (resources,)j(or)e(to)g(af)o(fect)0 211 y(the)h(integrity)e(of)j(another)f (emulated)g(client)f(in)h(ways)g(that)f(would)h(not)f(be)h(possible)f(simply) g(through)g(the)h(use)g(of)g(the)0 267 y(\252published\272)7 b(application)f(programming)i(interface)h(being)e(emulated.)16 b(On)8 b(the)g(other)g(hand,)h(reasonable)e(compromises)0 324 y(for)h(optimization)e(are)i(acceptable)g(with)e(respect)i(to)f(the)g (robustness)f(of)i(individual)d(clients.)14 b(An)8 b(incorrect)f(user)h (program)0 380 y(may)k(be)g(allowed)f(to)g(corrupt)g(the)h(data)f(structures) g(of)h(its)f(own)g(emulation)g(library)m(.)17 b(As)12 b(a)g(result,)f(it)h (may)g(even)g(modify)0 437 y(the)h(external)h(behavior)f(of)h(the)f(whole)g (emulated)h(process,)g(but)f(only)g(in)g(ways)g(that)h(could)e(also)i(be)f (achieved)h(with)f(a)0 493 y(dif)o(ferent)e(\(correct\))h(user)f(program.)0 657 y Fe(Language)j(and)h(Run-time)f(Support)47 b Fd(Finally)m(,)14 b(since)f(the)h(present)g(design)e(is)i(essentially)e(new)i(and)g (independent)0 714 y(of)f(previous)f(ef)o(forts,)h(it)g(is)f(in)h(a)g (position)e(to)h(take)h(full)g(advantage)f(of)h(some)g(modern)g(software)g (facilities)e(not)i(always)0 770 y(used)f(to)g(the)g(same)h(extent)f(in)g (more)h(traditional)d(designs.)19 b(First,)13 b(many)f(of)h(the)f(common)h (mechanisms)f(and)g(facilities)0 827 y(mentioned)17 b(above,)i(as)f(well)f (as)h(some)f(complete)h(servers,)i(are)e(implemented)f(using)f (object-oriented)g(techniques)0 883 y(and)f(languages.)27 b(The)14 b(system)h(contains)f(a)h(relatively)f(lar)o(ge)h(library)f(of)h(standard)f (classes)h(that)f(can)h(be)g(used)g(in)f(the)0 940 y(implementation)i(of)h (server)h(and)f(emulation)g(libraries.)34 b(Second,)19 b(the)e(design)g (itself)f(dictates)h(various)f(extensions)0 996 y(or)e(special)g(features)h (that)f(are)h(then)f(incorporated)f(in)h(the)g(implementation)f(language)h (and)g(run-time)g(system.)26 b(Such)0 1052 y(extensions)9 b(include)g (support)g(for)i(controlled)d(run-time)j(binding,)e(garbage)h(collection,)f (interrupt)h(mechanisms,)g(and)h(a)0 1109 y(sophisticated)c(remote)i (procedure)g(call)g(RPC)h(package)f(integrated)f(with)h(the)f(implementation) g(language)g(that)h(supports)0 1165 y(complex)i(object)f(data)h(types)g(and)g (limited)f(loading)g(of)h(\252server)r(\272)g(code)h(into)e(the)h(client')m (s)f(address)h(space.)0 1335 y Fe(3.)46 b(T)l(echnical)11 b(Overview)0 1479 y(3.1.)46 b(Major)11 b(Components)0 1608 y Fd(As)i(indicated)g(above,)h (the)g(system)f(is)g(or)o(ganized)h(around)f(a)h(collection)e(of)i (independent)e(servers)i(each)g(executing)f(in)0 1664 y(a)g(separate)g(Mach)h (task)e(and)h(exporting)f(their)g(services)h(through)e(a)j(combination)d(of)i (IPC)h(and)f(shared)f(memory)m(.)23 b(The)0 1721 y(various)10 b(system)h(servers)g(currently)f(implemented)h(or)g(under)g(consideration)e (are:)0 1856 y Fe(servers)i(that)h(pr)o(ovide)f(services)g(dir)o(ectly)h (visible)e(to)h(application)g(pr)o(ograms:)168 1962 y Fa(\017)23 b Fd(one)10 b(or)g(more)h(\256le)f(servers)g(supporting)e(random-access)j (collections)d(of)i(bytes)g(stored)f(in)h(various)f(formats)214 2019 y(on)h(local)h(disks)f(or)h(remote)h(\256le)f(servers)168 2092 y Fa(\017)23 b Fd(a)11 b(terminal)g(server)g(\(\252TTY\272\))h(for)f (the)g(management)h(of)f(logical)f(and)h(physical)f(terminal)h(devices)168 2165 y Fa(\017)23 b Fd(a)8 b(local)f(IPC)h(server)g(supporting)e(basic)h (communication)g(between)g(application)f(programs)h(\(pipes,)h(queues,)214 2221 y(UNIX-domain)i(sockets,...\))168 2295 y Fa(\017)23 b Fd(a)14 b(process)g(management)h(server)f(or)g(\252task)g(master)r(\272)h(to) e(keep)i(track)f(of)g(emulated)g(processes)g(and)g(allow)214 2351 y(them)d(to)g(be)g(operated)g(on)g(by)f(external)h(agents)884 2504 y Fc(DRAFT-7)p eop %%Page: 8 8 bop 168 42 a Fa(\017)23 b Fd(one)9 b(or)g(more)h(network)e(servers)h (providing)e(access)j(to)f(the)g(network)f(and)h(implementing)f(various)g (protocol)214 98 y(families)168 170 y Fa(\017)23 b Fd(a)11 b(device)g(server)h(to)e(control)g(user)i(access)f(to)g(the)g(physical)e (devices)i(controlled)f(by)h(the)g(micro-kernel)0 274 y Fe(servers)g(that)h (support)g(the)g(operation)f(of)g(the)h(other)g(servers:)168 378 y Fa(\017)23 b Fd(one)14 b(or)g(more)h Fc(root)f(name)h(servers)p Fd(,)g(responsible)e(for)h(integrating)e(the)i(various)f(servers)h(together)g (into)f(a)214 434 y(single)d(central)h(name)g(space)h(from)f(which)g(they)g (can)g(be)g(located)g(by)g(clients)168 506 y Fa(\017)23 b Fd(an)11 b(authentication)e(server)n(,)j(acting)e(as)h(a)h(secure)f(repository)f(for)h (information)f(on)h(the)g(identity)e(of)j(users)168 578 y Fa(\017)23 b Fd(a)12 b(blackboard)g(server)g(to)g(manage)h(any)f(information)f(that)g (must)h(be)g(ef)o(\256ciently)g(shared)g(between)g(several)214 635 y(emulated)f(processes)f(and/or)h(servers)168 707 y Fa(\017)23 b Fd(a)11 b(lock/semaphore)f(server)i(to)e(handle)h(synchronization)e (functions)g(between)i(clients)f(and/or)h(servers)168 778 y Fa(\017)23 b Fd(a)17 b(con\256guration/admin/startu)o(p)d(server)k(to)e (handle)h(the)f(startup)g(of)h(all)g(the)g(other)f(servers)h(and)g(of)g(the) 214 835 y(system)11 b(as)h(a)h(whole,)e(and)h(to)g(keep)g(track)g(of)g(the)g (system)f(con\256guration)g(\(which)g(servers)h(to)g(start,)g(which)214 891 y(devices)e(to)h(use,)g(etc.\))168 963 y Fa(\017)23 b Fd(a)14 b(remote)g(Mach)g(IPC)h(server)f(\(\252netmsgserver)r(\272\))f(responsible)f (for)i(forwarding)f(the)g(Mach)i(IPC)f(facility)214 1020 y(over)d(the)g (network)168 1092 y Fa(\017)23 b Fd(a)12 b(network)f(shared)g(memory)i (server)n(,)g(providing)c(uniform)j(shared)f(memory)i(over)f(a)g(collection)e (of)i(nodes)214 1148 y(connected)e(by)h(a)h(network)168 1220 y Fa(\017)23 b Fd(a)9 b(diagnostics)d(server)j(responsible)e(for)h(logging)f (all)h(debugging,)g(warning)g(and)g(error)h(messages)g(produced)214 1276 y(during)h(the)h(operation)f(of)h(the)g(system)62 1409 y(The)i(relatively)f(high-level)f(services)i(exported)f(by)h(those)f(servers) h(are)h(in)e(turn)h(de\256ned)f(in)h(terms)g(of)g(a)h(collection)0 1465 y(of)e(more)h(basic)f(facilities)f(and/or)g(standard)g(interfaces)h (exported)g(by)g(various)f(objects)g(or)h Fc(items)p Fd(.)19 b(In)12 b(many)g(cases,)h(the)0 1522 y(system)d(prototype)e(also)i(includes)f (a)h(collection)f(of)h(standard)g(classes)f(or)i(code)f(fragments)g(that)g (can)g(be)h(included)e(in)g(the)0 1578 y(implementation)h(of)h(various)f (components.)16 b(The)11 b(main)g(examples)g(of)g(such)g(facilities)f(and)h (interfaces)g(are:)68 1711 y Fa(\017)23 b Fd(a)9 b(client-server)g (invocation)e(facility)m(,)i(specifying)f(how)h(item)g(operations)f(can)i(be) f(invoked)f(by)h(clients)f(in)h(general)68 1803 y Fa(\017)23 b Fd(an)14 b(access)h(control)f(facility)m(,)h(to)f(determine)h(which)f (operations)f(may)i(or)g(may)g(not)f(be)h(performed)g(on)g(a)g(given)114 1860 y(item,)c(and)g(to)g(keep)g(track)g(of)h(the)e(identity)g(of)h(the)g (invokers)68 1953 y Fa(\017)23 b Fd(a)11 b(naming)g(interface,)h(to)e(locate) h(and)g(create)h(all)f(items)g(in)g(a)g(single)f(uniform)h(name)h(space)68 2045 y Fa(\017)23 b Fd(a)11 b(simple)g(I/O)g(interface,)g(to)g(transfer)g (data)g(between)g(an)h(item)f(and)g(a)g(client)68 2138 y Fa(\017)23 b Fd(a)9 b(noti\256cation)d(facility)m(,)j(allowing)e(client)g(processes)h (to)g(receive)h(asynchronous)e(noti\256cations)g(of)h(various)g(events)114 2194 y(\(signals,)i(AST')m(s,)i(...\))68 2287 y Fa(\017)23 b Fd(a)10 b(shared)f(state)g(management)i(facility)m(,)e(to)g(handle)g (information)g(shared)g(between)h(multiple)e(components)h(\(or)o(ga-)114 2344 y(nized)g(around)h(the)g(blackboard)f(server\))i(and)e(to)h(keep)g (track)g(of)h(information)e(cached)h(inside)f(various)g(emulation)114 2400 y(libraries)884 2504 y Fc(DRAFT-8)p eop %%Page: 9 9 bop 62 42 a Fd(The)13 b(following)e(sections)h(present)h(more)g(details)f (about)h(the)g(design)f(and)h(current)g(status)f(of)h(some)g(of)g(those)f (basic)0 98 y(system)f(facilities.)0 262 y Fe(3.2.)46 b(Client-Server)12 b(Communication)e(and)i(Access)f(Mediation)0 391 y Fd(Each)c(item)h(is)f (implemented)g(with)f(a)i(set)f(of)g(software)h(objects)e(as)h(de\256ned)h (by)f(an)g(object-oriented)f(programming)h(facility)0 447 y(such)i(as)h(the)f (MachObjects)g(package[)p Fe(?)p Fd(])16 b(or)9 b(an)h(extended)f(C++)g (package[)p Fe(?)p Fd(].)16 b(This)9 b(set)g(of)g(objects)g(is)g(itself)f (subdivided)0 504 y(into)k(a)h(server)o(-side)g(group)g(residing)e(on)i(the)g (server)g(responsible)f(for)h(the)g(management)g(of)h(the)e(corresponding)g (item,)0 560 y(and)f(a)h(collection)d(of)i(objects)g(operating)f(in)g(the)h (address)g(spaces)g(of)g(the)g(various)f(clients.)62 658 y(Servers)g(export)f (access)h(to)e(the)i(items)f(that)f(they)h(manage)h(through)e(a)i(special)f (mechanism)g(called)h(a)f Fc(proxy)g(object)g Fd(or)0 714 y(simply)g Fc(proxy)p Fd([)p Fe(?)p Fd(].)16 b(A)10 b(proxy)f(is)h(a)g(body)f(of)h(code) g(loaded)g(in)f(a)i(client')m(s)e(address)h(space,)g(which)g(acts)f(as)i(a)f (representative)0 771 y(with)i(that)g(client)g(for)h(a)g(given)f(item)h(from) h(a)f(given)f(server)m(.)22 b(Each)13 b(proxy)f(contains)g(at)g(least)h(a)g Fc(send)f Fd(right)g(for)h(a)g(Mach)0 827 y(port,)e(for)h(which)f(the)g Fc(receive)h Fd(right)e(is)h(held)g(in)g(the)g(corresponding)f(server)m(.)18 b(All)11 b(operations)f(on)h(the)g(item)g(are)h(invoked)0 884 y(by)i(the)f(client)g(as)h(local)g(operations)e(on)i(the)f(proxy)g(instead)g (of)h(being)f(directed)h(at)g(the)f(server)m(.)26 b(In)14 b(the)f(simple)h (cases,)0 940 y(the)c(proxy)g(simply)g(forwards)h(or)g Fc(delegates)e Fd(all)i(client)f(invocations)e(to)i(the)h(server)g(via)f(Mach)i(IPC,)g(but)e (in)g(other)h(cases,)0 997 y(the)f(proxy)f(may)h(perform)g(most)g(or)g(all)f (of)h(the)g(processing)e(locally)m(,)i(thereby)f(reducing)g(the)h (communications)e(overhead)0 1053 y(and)k(the)f(load)g(on)g(the)h(server)m(.) 19 b(One)11 b(typical)g(application)f(is)h(to)g(use)h(a)g(proxy)f(to)g(cache) h(information)f(on)g(the)h(client)f(side)0 1110 y(of)j(a)g(client-server)g (interface;)h(another)f(is)f(to)h(use)f(a)i(proxy)e(to)h(transparently)e (manage)j(a)f(region)f(of)i(memory)f(shared)0 1166 y(between)e(the)h(client)e (and)i(the)f(server)h(\(e.g)g(an)g(open)f(\256le)h(in)f(a)h(\256le)g (server\),)g(thereby)f(avoiding)f(much)i(communication)0 1223 y(overhead.)j(A)9 b(new)g(proxy)f(object)g(is)h(instantiated)e(in)h(a)i (client')m(s)f(address)f(space)h(as)g(part)g(of)h(the)e(protocol)g(through)g (which)0 1279 y(that)13 b(client)f(gains)g(access)i(to)f(the)g(corresponding) e(item,)j(with)f(support)e(from)j(the)f(RPC)i(run-time)e(system.)22 b(Note)13 b(that)0 1335 y(the)g(set)g(of)g(all)g(the)h(proxies)e(for)h(the)g (items)g(currently)g(accessed)h(by)f(a)g(given)g(client)f(can)i(be)f(viewed)g (as)h(an)f(additional)0 1392 y(layer)j(of)g(software)g(within)e(the)i (macroscopic)f(service)h(\(or)g(second\))g(layer)m(.)31 b(Although)14 b(they)i(reside)f(in)h(the)g(client')m(s)0 1448 y(address)9 b(space,)i(those)e(proxies)f(are)j(logically)d(part)h(of)h(the)f (implementations)f(of)i(the)f(servers)h(for)g(the)f(items)h(which)f(they)0 1505 y(represent.)26 b(Their)14 b(nature,)h(as)g(well)f(as)g(their)g (implementation)f(or)h(object)g(class,)h(are)g(speci\256ed)g(by)f(the)g (designers)f(of)0 1561 y(each)f(individual)c(server)n(,)k(and)f(not)g(by)g (the)f(clients.)62 1659 y(On)e(the)g(server)h(side,)g(the)f(group)f(of)i (objects)e(implementing)g(a)i(single)e(item)h(is)g(constituted)e(by)i(a)h (set)f(of)g Fc(agent)g Fd(objects,)0 1716 y(all)15 b(pointing)d(to)j(a)g (single)e Fc(agency)i Fd(object.)27 b(The)15 b(agency)g(object)f(is)g (speci\256c)h(to)f(the)h(type)f(of)h(item)g(concerned.)28 b(It)15 b(is)0 1772 y(responsible)9 b(for)i(maintaining)e(the)i(state)f(associated)g (with)f(the)i(item,)g(and)g(it)f(implements)g(all)g(its)g(exported)g (operations,)0 1829 y(without)g(concern)i(for)g(access)h(control.)k(The)12 b(agents)g(are)g(normally)g(independent)e(of)i(the)g(type)f(of)h(the)g(item.) 19 b(They)11 b(are)0 1885 y(responsible)d(for)i(all)f(access)h(mediation)f (for)h(operations)e(performed)i(on)f(the)h(item,)g(which)f(they)g(perform)i (by)e(acting)g(as)h(a)0 1941 y(\256lter)g(between)f(the)h(clients)f(and)g (the)h(agency)m(.)16 b(Each)10 b(agent)f(contains)g(a)h(record)g(of)g(user)g (credentials)f(and)h(a)g Fc(receive)g Fd(right)0 1998 y(for)i(a)h(Mach)g (port,)f(both)f(of)h(which)g(are)h(established)d(when)i(the)g(agent)g(is)f (created)i(and)f(can)g(never)h(change)f(afterwards.)0 2054 y(The)e(various)g(proxies)f(that)h(hold)f(the)h(corresponding)f Fc(send)g Fd(rights)h(use)g(this)f(port)h(to)g(send)f(their)h(requests)g(for) g(service)h(to)0 2111 y(the)h(agent.)21 b(They)12 b(are)h(indistiguis)o (hable)d(from)j(each)g(other)n(,)g(and)f(are)h(treated)g(as)f(a)h(set)f(of)h (clients)e(associated)h(with)f(the)0 2167 y(same)f(user)g(credentials.)15 b(Since)c(Mach)f(port)f(rights)g(are)i(secure)f(capabilities,)e(each)j(proxy) e(can)h(only)f(contact)g(the)h(server)0 2224 y(by)h(sending)e(requests)h(to)h (its)f(associated)g(agent)h(and)f(never)h(directly)g(to)f(the)h(agency)g(or)g (another)f(agent.)16 b(The)11 b(agent)g(can)0 2280 y(thus)d(use)g(the)g (stored)g(credentials)g(to)g(perform)h(all)f(the)h(appropriate)f(access)g (checks)h(before)g(forwarding)e(each)j(individual)0 2337 y(request)i(to)g (the)h(agency)m(,)g(and)g(can)g(provide)f(the)g(agency)h(with)e(a)j (reference)f(to)g(the)f(client')m(s)g(credentials)g(if)h(needed.)21 b(In)0 2393 y(this)14 b(scheme,)i(the)f(agents)f(can)h(be)f(considered)g(as)h (trusted)f(representatives)f(of)i(the)g(clients)e(with)h(the)g(agency;)i (since)884 2504 y Fc(DRAFT-9)p eop %%Page: 10 10 bop 0 42 a Fd(they)13 b(are)h(stored)f(in)g(the)h(server)r(')m(s)g(address)f (space,)h(they)f(cannot)g(be)h(tampered)g(with)f(by)g(the)g(clients.)23 b(Note)13 b(that)g(with)0 98 y(this)c(system)h(or)o(ganization,)g(the)g (service)g(interface)h(for)g(a)f(given)g(item)h(is)f(really)g(the)g(set)g(of) h(operations)e(exported)g(by)h(the)0 154 y(proxy)i(objects,)h(but)f(the)h (interface)g(that)g(needs)f(to)h(be)g(examined)g(to)f(verify)h(the)g (security)f(of)h(the)g(system)f(is)h(the)f(set)h(of)0 211 y(interactions)c (taking)h(place)i(between)f(proxy)f(objects)g(and)h(servers.)62 309 y(Finally)m(,)17 b(since)e(communication)g(between)h(proxy)f(objects)g (and)h(agents)f(uses)h(Mach)g(IPC,)h(the)f(Mach)h Fc(no-more-)0 365 y(senders)8 b Fd(noti\256cation)g(mechanism)h(is)g(used)g(to)f(detect)h (the)g(disappearance)g(of)g(all)g(clients,)g(and)g(provides)f(a)h(natural)g (basis)0 422 y(for)j(a)g(garbage-collection)e(facility)m(,)h(allowing)f (agencies)h(to)g(take)g(special)g(action)g(when)g(all)h(their)f(agents)g (\(and)g(clients\))0 478 y(have)g(been)g(deallocated.)0 641 y Fe(3.3.)46 b(Authentication)11 b(and)h(Access)f(Contr)o(ol)0 769 y(3.3.1.)46 b(Pr)o(otection)11 b(Model)0 898 y Fd(In)18 b(accordance)g(with)f(the)h(principle)e(of)i(using)f(generic)g(interfaces,)j (the)e(access)g(control)e(interface)i(is)g(based)f(on)h(a)0 954 y(single)10 b(protection)f(model,)i(of)h(which)e(the)h(models)f(of)h(the) g(various)f(tar)o(get)h(environments)e(should)h(be)h(either)g(subsets)e(or)0 1011 y(reasonable)i(variations.)k(This)10 b(model)h(is)g(or)o(ganized)f (around)h(three)g(basic)g(concepts:)68 1138 y Fa(\017)23 b Fd(each)17 b(operation)e(exported)h(by)h(an)g(agency)f(is)g(associated)g (with)g(a)h(set)f(of)h Fc(access)i(rights)p Fd(.)32 b(Those)16 b(rights)f(are)114 1194 y(normally)c(established)g(and)h(stored)g(in)g(the)g (agent)g(when)g(this)f(agent)h(is)g(created.)21 b(The)12 b(appropriate)f (rights)g(must)114 1251 y(be)g(present)g(in)f(the)h(agent)g(if)g(the)g (corresponding)e(operation)h(is)h(to)g(be)g(allowed)f(to)h(the)g(client.)68 1341 y Fa(\017)23 b Fd(each)12 b(client)g(is)g(associated)f(with)h(a)g(list)g (of)g Fc(credentials)f Fd(representing)g(its)g(identity)m(,)g(associated)h (with)f(the)h(corre-)114 1397 y(sponding)c(agent.)16 b(These)10 b(credentials)g(are)h(a)g(simple)f(ordered)g(list)f(of)i(32-bit)e Fc(authentication)e(identifiers)p Fd(,)i(which)114 1454 y(may)14 b(be)g(obtained)f(from)h(the)g(authentication)e(server)i(upon)f(presentation) g(of)h(an)g(unfor)o(geable)f Fc(authentication)114 1510 y(token)p Fd(.)j(The)11 b(token)f(itself)h(is)f(created)i(by)f(the)g(authentication)d (server)n(,)k(from)g(a)g(user)r(')m(s)f(password.)68 1601 y Fa(\017)23 b Fd(each)9 b(agency)h(logically)d(contains)h(an)i Fc(access)f(control)f(list)g Fd(or)h Fc(ACL)p Fd(.)i(This)d(list)g(is)h(an)g (ordered)h(list)e(of)h(entries,)h(each)114 1657 y(containing)g(an)i (authentication)d(identi\256er)j(and)f(a)i(set)e(of)h(access)g(rights.)18 b(The)12 b(agency)g(exports)f(an)h(operation)f(to)114 1714 y(match)g(a)h(list)e(of)h(credentials)f(against)g(the)h(ACL,)h(and)f (determine)g(the)g(set)g(of)g(access)h(rights)d(thus)i(authorized)f(for)114 1770 y(that)i(client.)22 b(In)13 b(addition,)f(each)i(agency)f(speci\256es)f (a)i Fc(privileged)e(identifier)p Fd(.)21 b(Presence)13 b(of)h(this)e (identi\256er)g(in)h(a)114 1827 y(list)d(of)h(credentials)f(causes)h(all)g (access)g(checks)g(to)g(be)g(bypassed,)g(and)g(all)g(access)g(rights)f(to)h (be)g(authorized.)0 1989 y Fe(3.3.2.)46 b(Access)11 b(Contr)o(ol)g(Interface) 0 2118 y Fd(Given)16 b(this)f(model,)j(clients)e(acquire)g(access)h(to)f(an)h (item)g(by)f(obtaining)e(access)j(to)f(an)h(agent)f(via)h(a)g(proxy)e (object.)0 2174 y(The)d(agent)g(contains)g(the)g(credentials)f(of)i(the)f (client,)g(and)g(a)h(set)f(of)h(enabled)f(access)h(rights.)19 b(Those)11 b(access)i(rights)e(are)0 2231 y(speci\256ed)f(by)g(the)g(client)f (\(under)h(the)g(restrictions)e(imposed)h(by)h(the)g(access)g(control)g (list\),)f(which)h(indicates)e(in)i(this)f(way)0 2287 y(what)g(operations)e (it)i(intends)f(to)g(perform)i(on)f(the)g(item)g(\(e.g.)16 b(read-only)9 b(\256le,)h(read-write,)g(etc.\).)16 b(The)9 b(main)h(primitive)e(in)0 2344 y(the)i(access)g(control)f(interface,)i(to)f (be)g(invoked)e(against)i(one)f(proxy)h(object,)g(returns)f(a)i(new)f(proxy)f (object)g(representing)0 2400 y(the)h(same)h(item,)g(but)e(with)h(dif)o (ferent)g(credentials)f(and/or)h(access)g(rights,)g(subject)f(to)h(mediation) f(through)g(the)h(ACL)g(and)872 2504 y Fc(DRAFT-10)p eop %%Page: 11 11 bop 0 42 a Fd(authentication)10 b(mechanisms.)21 b(The)12 b(system)g(has)h (special)f(bootstrap)e(mechanisms)j(to)f(create)h(an)g(agent/proxy)e(object)0 98 y(with)d("anonymous")f(credentials,)i(and)g(simple)g(rules)g(for)g (inheritance)f(of)i(credentials)e(when)h(an)g(operation)f(on)h(one)g(item)0 154 y(must)i(return)g(access)g(to)g(another)g(item.)62 252 y(The)h(other)g(primitives)e(in)h(the)h(access)g(control)f(interface)h(can)h (be)f(used)f(to)g(query)h(the)g(status)e(of)i(agent)g(\(credentials)0 309 y(and)h(enabled)f(access)h(rights\),)g(\256nd)g(out)f(the)g(privileged)g (identi\256er)g(for)h(a)g(given)f(item,)i(or)f(manipulate)f(access)h(control) 0 365 y(lists.)0 528 y Fe(3.4.)46 b(Naming)0 656 y(3.4.1.)g(Basic)11 b(Concepts)0 785 y Fd(All)h(items)g(in)g(the)h(system)f(are)h(listed)f(in)g (a)h(single,)f(uniform)g(name)h(space)g(controlled)e(by)i(the)f(standard)g (name)h(service)0 841 y(interface.)28 b(The)15 b(structure)f(of)h(this)f (name)h(space)h(is)e(hierarchical;)i(it)f(includes)e(leaves)i(for)g(servers)g (implementing)f(a)0 898 y(single)d(item)h(such)f(as)h(a)h(device,)f(and)g (whole)f(subtrees)g(representing)g(all)h(the)f(items)h(managed)g(by)g(one)g (server)n(,)h(such)e(as)0 954 y(all)e(the)g(\256les)h(in)f(a)g(\256le)h (server)m(.)17 b(Each)9 b(server)h(managing)f(such)g(a)g(subtree)g(must)g (conform)h(to)f(the)g(name)h(service)f(interface;)0 1011 y(however)i(the)g (internal)f(implementation)g(is)g(left)h(to)g(the)g(discretion)f(of)h(the)g (designer)m(.)62 1109 y(The)h(name)g(space)g(is)g(de\256ned)g(around)f (\256ve)h(fundamental)f(entities,)g(all)g(represented)h(by)f(items,)h(and)g (exporting)e(the)0 1165 y(normal)h(access)h(control)e(interface:)68 1293 y Fa(\017)23 b Fd(a)13 b Fc(terminal)f Fd(is)g(any)i(item)f(which)f(is)h (at)g(a)h(leaf)f(in)g(the)g(name)h(space,)g(that)f(is,)h(which)e(does)h(not)f (itself)h(export)f(any)114 1349 y(name)f(service)h(operations)d(such)i(as)g (lookup.)68 1440 y Fa(\017)23 b Fd(a)11 b Fc(directory)f Fd(is)h(a)g (container)g(for)g(a)g(set)g(of)g(entries)g(in)g(the)f(name)i(space,)g (identi\256ed)e(with)g(a)h(single-level)f(name.)17 b(It)114 1497 y(exports)12 b(a)i Fc(lookup)e Fd(operation,)h(which)g(returns)g(a)h (proxy)f(object)f(for)i(the)f(item)h(designated)e(by)h(the)g(given)f(entry) 114 1553 y(name.)68 1644 y Fa(\017)23 b Fd(a)12 b Fc(symbolic)f(link)g Fd(or)h Fc(symlink)f Fd(is)h(essentially)e(identical)g(to)i(the)f(symbolic)g (links)g(found)g(in)g(traditional)f(operating)114 1700 y(systems.)15 b(It)c(contains)f(a)h(path)f(name)i(used)e(to)h(redirect)f(the)h(name)h (resolution)c(when)j(it)f(is)h(encountered)f(during)g(a)114 1757 y(path)i(name)h(traversal.)20 b(The)13 b(path)f(in)g(the)g(symlink)f (can)i(be)g(absolute,)f(or)h(relative)f(to)g(the)g(directory)g(containing)114 1813 y(the)f(symlink.)68 1904 y Fa(\017)23 b Fd(a)13 b Fc(mount)f(point)f Fd(operates)h(like)g(a)h(symlink)e(to)i(redirect)f(a)h(name)g(resolution,)f (but)g(instead)f(of)i(containing)e(a)i(path)114 1961 y(name,)h(it)e(contains) f(a)i(direct)g(reference)h(\(proxy)e(and)g(associated)g(Mach)h(port\))f(to)h (another)f(point)f(\(directory\))i(in)114 2017 y(the)c(name)i(space,)g (possibly)c(managed)j(by)g(a)g(dif)o(ferent)g(server)m(.)17 b(This)9 b(reference)i(is)e(returned)h(to)f(the)h(clients)f(in)g(the)114 2074 y(form)i(of)h(a)f(simple)g(proxy)f(object)h(representing)f(the)h(tar)o (get)g(of)g(the)g(mount)f(point.)68 2164 y Fa(\017)23 b Fd(a)7 b Fc(transparent)g(symlink)g Fd(is)f(exactly)h(identi)o(cal)g(to)g(a)g (normal)g(symlink,)e(with)i(the)g(exception)g(that)g(the)g(system)g(allows) 114 2221 y(clients)14 b(to)h(specify)g(independently)e(whether)i(transparent) g(and)g(normal)g(symlinks)f(should)g(be)h(automatically)114 2277 y(followed)f(when)h(found)g(at)g(the)g(end)g(of)h(a)g(path)f(by)g(the)g (pathname)g(resolving)f(logic.)29 b(T)n(ransparent)15 b(symlinks)114 2334 y(provide)f(a)i(simple)e(way)i(to)f(\252graft\272)g(arbitrary)g(items)g (in)g(arbitrary)g(directories)g(of)g(the)g(name)h(space,)h(without)114 2390 y(increasing)10 b(the)h(complexity)f(of)h(all)g(directory)f(servers)h (beyond)f(support)g(for)h(symbolic)g(links.)872 2504 y Fc(DRAFT-11)p eop %%Page: 12 12 bop 0 42 a Fe(3.4.2.)46 b(Name)11 b(Resolving)0 170 y Fd(W)n(ith)f(this)g(or) o(ganization,)h(name)g(resolving)f(proceeds)h(in)g(the)g(following)e(manner:) 57 305 y(1.)23 b(the)11 b(client)f(ships)g(the)h(entire)f(path)h(name)h(to)f (a)g(base)g(\(root\))g(directory)m(.)57 399 y(2.)23 b(this)16 b(directory)m(,)i(or)g(the)f(server)g(managing)g(it,)i(consumes)e(as)g(much)h (of)f(the)g(path)g(name)h(as)f(possible)f(before)114 456 y(returning)d(to)h (the)h(client.)26 b(If)15 b(the)f(desired)g(object)g(is)g(found,)i(an)e (appropriate)g(proxy)g(object)g(is)g(returned.)27 b(If)15 b(a)114 512 y(symlink)d(or)i(mount)f(point)f(is)h(encountered,)h(the)g(server)f (returns)h(to)f(the)g(client)g(the)g(information)g(contained)g(in)114 569 y(that)d(object,)g(as)h(well)f(as)h(an)g(indication)e(of)h(how)h(much)g (of)f(the)h(path)f(name)h(was)g(traversed)g(before)g(encountering)114 625 y(it.)57 719 y(3.)23 b(if)12 b(necessary)m(,)g(the)g(client)f(applies)g (the)h(necessary)g(transformations)f(implied)g(by)h(the)g(symlink)e(or)j (mount)e(point,)114 775 y(and)g(restarts)f(the)h(resolving)f(loop)g(at)h (step)g(1,)g(possibly)e(with)h(a)i(dif)o(ferent)f(starting)f(directory)m(.)62 911 y(Note)i(that)f(this)g(scheme)h(leaves)g(to)g(the)f(client)g(all)h (liberty)f(to)g(interpret)h(symlinks)e(in)h(a)i(way)f(speci\256c)g(to)f(any)h (given)0 967 y(environment.)28 b(Similarly)m(,)16 b(concepts)f(such)g(as)g (the)g(UNIX)g(".")h(and)f("..")g(are)h(interpreted)f(by)g(the)g(client,)h (not)e(by)h(the)0 1023 y(server)m(.)j(Finally)m(,)10 b(it)h(is)g(not)f(even)i (necessary)f(for)g(the)g(client)g(to)g(know)f(the)h(path)g(name)h(component)e (separator)h(character)0 1080 y(\(")p Fb(/)p Fd(",)k(")p Fb(\\)p Fd(",)g(...\))27 b(in)13 b(use)h(in)g(a)h(given)e(server)n(,)j(since)e(each)g (server)h(will)e(consume)h(those)f(characters)i(naturally)e(when)h(it)0 1136 y(receives)d(the)g(whole)g(path)f(name.)0 1301 y Fe(3.4.3.)46 b(Object)12 b(Cr)o(eation)0 1429 y Fd(The)i(name)h(space)f(is)g(also)f(used)h (as)g(the)g(framework)h(to)e(control)g(the)h(creation)g(of)g(items.)25 b(Each)15 b(item)f(in)f(the)h(system,)0 1486 y(with)g(the)g(exception)f(of)i (the)f(root)g(directory)g(on)g(each)h(server)n(,)h(can)f(only)e(be)i(created) g(in)f(the)g(context)g(of)g(a)h(directory)m(,)0 1542 y(by)e(an)h(operation)e (exported)h(by)g(that)g(containing)e(directory)m(.)23 b(In)13 b(this)g(way)m(,)h(all)f(items)g(are)h(automatically)e(named)i(and)0 1598 y(reachable,)19 b(and)e(the)g(access)g(control)f(list)f(on)i(the)g (containing)e(directory)h(can)h(be)g(used)g(to)f(mediate)h(item)g(creation.)0 1655 y(Moreover)n(,)f(this)c(scheme)j(allows)e(items)g(to)h(be)g(created,)h (while)f(avoiding)e(the)i(need)f(to)h(export)f(any)h(abstraction)f(of)h(a)0 1711 y(server)f(at)g(the)f(user)h(level.)21 b(Any)12 b(item)h(can)g(be)g (subsequently)d(detached)j(from)g(its)f(parent)g(directory)m(,)h(but)f(in)h (this)e(case,)0 1768 y(that)g(item)g(can)g(only)f(be)i(volatile,)e(and)h (disappears)f(as)h(soon)f(as)i(its)e(last)g(current)i(client)e(releases)h (it.)62 1866 y(However)n(,)f(this)f(scheme)h(leads)f(to)g(one)g (complication.)15 b(Although)7 b(all)i(directories)g(ful\256ll)f(the)i(same)g (basic)f(functions)0 1922 y(with)i(respect)g(to)g(the)g(name)i(service)e (interface,)h(the)f(structure)g(of)h(the)f(name)h(space)g(is)f(such)g(that)g (many)h(directories)e(are)0 1979 y(embedded)k(inside)e(various)g(servers.)24 b(Those)13 b(servers)g(do)h(not)e(necessarily)h(support)f(all)h(kinds)g(of)g (items.)24 b(T)m(o)13 b(resolve)0 2035 y(this)c(problem,)i(the)e(name)i (service)f(interface)h(de\256nes)f(a)h(speci\256c)f Fc(type)g Fd(for)g(each)h(item,)g(and)f(each)h(directory)e(possesses)g(a)0 2092 y(special)g(attribute)g(that)g(is)g(the)g(list)g(of)h(all)f(item)h (types)f(that)g(it)g(may)h(contain.)15 b(In)10 b(this)f(way)m(,)h (directories)f(in)g(various)g(servers)0 2148 y(are)j("specialized")d(with)h (respect)i(to)e(item)h(creation.)872 2504 y Fc(DRAFT-12)p eop %%Page: 13 13 bop 0 42 a Fe(3.4.4.)46 b(Other)12 b(Functions)0 170 y Fd(Next)h(to)g(the)g (basic)f(functions)g(of)h(lookup)f(and)h(creation,)h(the)f(name)h(service)f (interface)g(speci\256es)g(a)h(number)f(of)g(other)0 226 y(functions)8 b(for)i(removing)f(or)h(renaming)g(entries,)g(listing)d(the)j(contents)f(of)g (directories,)h(etc.)16 b(In)10 b(addition,)f(every)h(item)g(in)0 283 y(the)h(name)i(space)e(exports)g(a)h(set)f(of)h(operation)f(to)g(query)g (various)g Fc(attributes)e Fd(or)i(groups)g(of)h(attributes,)e(giving)g (generic)0 339 y(information)g(about)g(that)h(item.)62 437 y(All)k(the)h(primitives)e(in)h(the)g(name)i(service)e(interface)h(are)h (normally)e(intended)f(to)h(be)h(exported)f(by)g(servers)h(that)0 494 y(implement)d(at)g(the)h(same)g(time)f(a)h(set)f(of)g(terminal)g(items,)i (and)e(the)g(portion)f(of)h(the)g(name)h(space)g(that)f(contains)f(those)0 550 y(items.)22 b(However)n(,)14 b(when)e(security)g(requirements)h(are)h (very)f(severe,)h(it)e(is)h(desirable)f(to)h(split)e(these)i(aspects)f (between)0 607 y(two)d(servers:)14 b(an)c(item)f(manager)n(,)i(which)d (implements)h(the)g(terminal)f(items,)i(and)f(a)h Fc(segregated)e(name)g (server)p Fd(,)i(which)f(is)0 663 y(responsible)f(for)h(the)g(naming)g(and)h (access)f(control)g(functions.)14 b(In)9 b(this)g(way)m(,)h(the)f(segregated) g(name)h(server)f(can)h(operate)0 720 y(in)h(a)g(separate)g(address)g(space)g (from)h(the)f(item)g(manager;)g(it)g(can)g(be)g(easily)f(standardized,)h(and) g(formally)g(veri\256ed.)33 b(T)m(o)0 776 y(distinguish)5 b(it)j(from)h(this) e(segregated)h(mode)h(of)f(operation,)g(the)h(normal)f(or)o(ganization)f(is)h (sometimes)g(called)g Fc(integrated)0 833 y(name)j(server)p Fd(.)0 997 y Fe(3.4.5.)46 b(Name)11 b(Space)h(Organization)0 1125 y Fd(All)e(the)h(subtrees)g(in)f(the)h(various)f(servers)h(are)h (assembled)f(in)f(a)i(single)e(name)h(space)h(through)d(mount)i(points)e(in)i (one)g(or)0 1182 y(more)k(system)e(or)h Fc(root)f Fd(name)h(servers.)25 b(These)14 b(servers)g(are)g(standard)f(components)g(supporting)f (directories,)i(mount)0 1238 y(points)7 b(and)i(symbolic)f(links,)h(but)f(no) h(terminal)g(entries.)15 b(They)9 b(do)g(not)f(maintain)g(any)h(persistent)f (storage;)h(their)g(naming)0 1295 y(hierarchy)i(must)g(be)g(created)h (dynamically)e(during)g(the)h(system)f(startup)g(and)h(con\256guration)f (process.)62 1393 y(In)j(addition)e(to)i(this)f(global)g(name)h(space,)h (each)f(client)g(of)g(the)f(system)h(maintains)f(a)h(separate)g Fc(prefix)g(table)p Fd(.)21 b(This)0 1449 y(table)11 b(contains)g(a)h(set)g (of)g(path)f(name)i(pre\256xes,)f(and)g(corresponding)e(proxy)h(objects)g (representing)g(items)g(in)h(the)f(name)0 1505 y(space)f(that)g(are)h (associated)e(with)g(those)g(pre\256xes.)16 b(Every)10 b(name)h(resolution)d (performed)j(by)e(a)i(client)e(starts)h(by)f(a)i(search)0 1562 y(in)i(the)f(pre\256x)h(table)g(to)g(\256nd)f(an)i(initial)d(directory)h(to)h (handle)f(the)h(path)f(name.)23 b(This)12 b(mechanism)h(is)f(used)h(for)g (several)0 1618 y(functions:)68 1754 y Fa(\017)23 b Fd(some)12 b(pre\256xes)h(established)e(at)i(bootstrap)e(time)i(represent)f(a)h(few)g (key)g(directories)e(in)h(the)h(name)g(space.)21 b(They)114 1810 y(provide)8 b(good)h(starting)g(points)f(for)i(name)g(resolution)e (without)g(incurring)g(the)i(overhead)f(of)h(contacting)e(a)i(single)114 1867 y(server)h(implementing)f(the)h("root")f(directory)m(.)68 1960 y Fa(\017)23 b Fd(pre\256xes)18 b(provide)f(a)h(level)g(of)g (indirection)e(between)h(clients)g(and)h(the)g(global)e(name)j(space.)37 b(In)18 b(this)f(view)m(,)114 2017 y(they)9 b(can)i(be)f(used)g(as)g(a)h (form)g(of)f(client-speci\256c)g(mount)f(points,)h(to)f(customize)h(the)g (name)h(space)g(by)f(specifying)114 2073 y(dif)o(ferent)d(names)i(for)f (various)f(subtrees,)h(and)g(even)g(by)f(masking)h(existing)e(path)h(names)h (to)g(redirect)g(them)g(to)f(other)114 2130 y(subtrees.)15 b(Among)c(other)f(applications,)f(this)h(feature)h(allows)f(clients)f (operating)h(under)h(various)e(environments)114 2186 y(to)h(observe)h(a)h (name)f(space)h(that)e(\256ts)h(the)g(expectations)f(of)h(those)f (environments.)68 2280 y Fa(\017)23 b Fd(pre\256xes)11 b(can)h(act)f(as)h(a)f (cache)h(for)g(name)g(resolving,)e(to)h(avoid)f(the)h(processing)f(of)i (mount)e(points)g(and)h(symbolic)114 2336 y(links)e(on)i(each)h(lookup,)e (and)h(direct)g(the)g(client)f(immediately)h(to)f(the)h(server)h(containing)d (the)i(requested)f(object.)872 2504 y Fc(DRAFT-13)p eop %%Page: 14 14 bop 68 42 a Fa(\017)23 b Fd(some)14 b(pre\256xes)g(that)g(can)h(be)f (rede\256ned)h(freely)f(by)g(the)g(client)f(itself)h(are)h(used)f(to)f (generalize)i(the)f(notion)e(of)j(a)114 98 y("current)10 b(working)g (directory",)g(without)g(requiring)g(that)g(any)h(state)g(be)g(kept)g(in)g (any)g(servers.)0 262 y Fe(3.5.)46 b(Input)12 b(/)f(Output)0 391 y(3.5.1.)46 b(Generalities)0 519 y Fd(The)13 b(input/output)c(interface) 14 b(is)e(responsible)f(for)i(all)g(transfers)g(of)g(data)g(between)f(an)i (emulation)e(client)g(and)h(an)g(item,)0 576 y(representing)h(abstractions)f (such)h(as)h(\256les,)h(pipes,)f(sockets,)g(etc.)28 b(It)15 b(speci\256es)f(a)i(collection)d(of)i(basic)f(operations)g(to)0 632 y(manipulate)8 b(simple)g(unstructured)f(data,)i(and)g(provides)e(a)i (basis)f(for)h(the)f(de\256nition)f(of)i(\252derived\272)f(operations)g(to)g (handle)0 689 y(more)13 b(complex)f(data)h(elements)f(\(i.e.)21 b(data)12 b(with)f(attributes,)h(etc.\).)21 b(In)12 b(addition,)g(the)g(I/O)g (interface)g(supports)f(the)h(use)0 745 y(of)h(shared)f(memory)i(buf)o(fers)f (as)f(an)h(alternative)f(to)g(IPC)i(for)f(data)g(transfers,)g(and)f(manages)h (independent)f(concurrent)0 801 y(access)f(to)g(the)g(same)h(data)f(by)g (multiple)f(users.)0 966 y Fe(3.5.2.)46 b(T)m(ypes)11 b(of)g(Client-server)g (Interactions)0 1094 y Fd(The)g(\256rst)g(question)f(for)h(the)g (speci\256cation)f(of)i(the)f(I/O)g(interface)g(is)g(to)g(determine)g(the)g (nature)g(of)g(the)g(I/O)g(interactions,)0 1151 y(and)h(how)f(they)h(are)h (initiated:)j(existing)10 b(systems)h(include)g(concepts)g(of)h(data)g (sinks,)g(sources,)g(pumps,)g(asynchronous)0 1207 y(and)c(synchronous)f(I/O,) i(polling,)e(etc.)16 b(T)m(o)8 b(keep)g(the)h(standard)e(interface)i(as)g (simple)f(as)g(possible,)g(the)g(standard)g(interface)0 1263 y(speci\256es)k(that)f(all)h(I/O)g(operations)f(should)f(be)j(synchronous,)d (and)i(initiated)f(by)g(the)h(client:)17 b(the)12 b(client)f(requests)h(each) 0 1320 y(individual)e(data)i(transfer)g(explicitly)e(by)i(invoking)e(an)i (operation)f(\(read)i(or)f(write\))g(on)g(the)g(data-managing)f(item,)i(and)0 1376 y(blocks)d(waiting)g(for)h(that)g(transfer)g(to)g(complete.)17 b(Under)11 b(no)f(circumstances)h(can)h(an)f(item)g(ef)o(fect)i(more)e(than)g (one)g(data)0 1433 y(transfer)j(in)g(response)f(to)h(a)g(single)f(client)g (request,)i(or)f(interact)f(with)h(a)g(client)f(that)h(is)f(not)h(blocked)f (waiting)f(for)j(that)0 1489 y(interaction.)i(All)11 b(I/O)h(primitives)e (also)h(specify)g(two)h(mode)f(\257ags)h(that)f(modify)h(the)f(type)g(of)h (client-server)f(interaction)0 1546 y(performed:)68 1681 y Fa(\017)23 b Fd(the)13 b Fc(wait)g Fd(\257ag)g(speci\256es)h(that)e(the)h (I/O)h(operation)e(should)g(block)g(until)g(it)h(can)h(be)f(completed.)23 b(Otherwise,)13 b(the)114 1737 y(I/O)e(operation)f(would)g(return)h (immediately)f(with)g(a)i(failure)f(code)g(instead)f(of)h(blocking.)68 1831 y Fa(\017)23 b Fd(the)12 b Fc(probe)f Fd(\257ag)h(speci\256es)g(that)g (the)g(item)g(should)e(report)i(exactly)g(how)f(the)h(speci\256ed)g(I/O)g (operation)f(would)g(be)114 1888 y(performed)f(\(number)g(of)g(bytes)f (transferred,)i(wait,)f(etc.\),)h(but)e(not)g(actually)g(transfer)h(any)g (data.)16 b(The)10 b(state)f(of)h(the)114 1944 y(item)h(cannot)f(be)i (modi\256ed)f(by)f(the)h(invocation)f(of)h(an)g(I/O)g(operation)f(with)g(the) h(probe)g(attribute.)0 2080 y(These)g(\257ags,)h(in)e(conjunction)g(with)g (the)h(use)g(of)g(multiple)f(synchronous)f(threads)i(in)g(the)g(client)f (emulation)h(libraries)f(as)0 2136 y(needed,)h(provide)g(enough)f (functionality)f(for)i(the)g(various)f(other)h(useful)f(types)h(of)g(I/O)g (interactions.)872 2504 y Fc(DRAFT-14)p eop %%Page: 15 15 bop 0 42 a Fe(3.5.3.)46 b(Speci\256cation)12 b(of)f(Data)g(Elements)0 170 y Fd(The)k(second)g(question)f(is)h(to)g(determine)g(how)g(a)h(client)e (can)i(specify)m(,)g(in)f(an)h(I/O)f(request,)h(the)g(exact)f(portion)f(of)h (all)0 226 y(the)e(data)h(represented)f(by)g(an)h(item)f(that)g(is)g(to)g(be) h(the)f(object)g(of)h(a)g(transfer)m(.)24 b(Although)11 b(the)j(I/O)f (interface)h(should)e(in)0 283 y(principle)d(ignore)h(the)h(structure)f(and)g (nature)h(of)g(the)f(data)h(that)f(it)g(is)g(manipulating,)f(this)h(problem)g (requires)g(at)h(least)f(the)0 339 y(de\256nition)h(of)i(data)g(elements)g (that)f(can)i(be)f(individually)d(designated)h(within)h(the)g(set)h(of)g(all) g(data.)21 b(For)14 b(this)e(purpose,)0 396 y(each)h(data-managing)f(item)g (is)g(de\256ned)h(to)f(be)h(either)f(byte-)g(or)g(record-oriented,)h (depending)e(on)h(the)h(intrinsic)d(nature)0 452 y(of)h(the)g(data)g(set)g (that)g(it)f(represents.)62 550 y(A)k(byte-level)f(I/O)g(item)h(represents)f (a)h(collection)e(of)i(bytes)f(such)g(that)g(each)h(byte)f(can)h(be)g (manipulated)f(\(read)h(or)0 607 y(written\))g(by)g(clients)f(independently)g (of)h(all)h(other)f(bytes)g(in)g(the)g(collection.)26 b(Examples)14 b(of)g(such)h(data)f(sets)g(include)0 663 y(UNIX)d(\256les,)h(UNIX)f(pipes,)g (etc.)17 b(The)12 b(I/O)f(interface)g(designates)f(every)i(byte)f(in)g(a)g (byte-level)g(data)g(set)g(with)f(a)i(unique)0 720 y(64-bit)7 b Fc(offset)f Fd(and)i(provides)f(operations)g(for)h(the)f(transfer)h(of)h (individual)c(bytes)i(or)h(of)g(ranges)g(of)g(bytes)f(with)g(consecutive)0 776 y(of)o(fsets,)k(designated)f(by)h(a)g(starting)f(of)o(fset)h(and)g(a)h (length.)62 874 y(A)h(record-level)g(I/O)g(item)g(represents)f(a)i (collection)d(of)i(bytes)f(grouped)g(in)h Fc(records)f Fd(such)g(that)h(each) g(record)g(must)0 931 y(always)j(be)g(manipulated)f(as)h(a)h(whole.)31 b(Records)17 b(may)f(be)h(all)e(of)i(a)f(\256xed)h(size)f(or)g(have)g (arbitrary)g(variable)g(sizes.)0 987 y(Examples)11 b(of)g(such)g(data)g(sets) g(include)f(record-oriented)h(\256les)h(\(not)e(UNIX\),)i(packets)f(on)g(a)h (network)e(connection,)h(etc.)0 1043 y(The)i(I/O)g(interface)g(designates)f (every)i(record)f(with)f(a)i(64-bit)e Fc(record)h(number)p Fd(.)22 b(T)m(o)13 b(avoid)f(the)h(problem)g(of)g(marking)0 1100 y(record)8 b(boundaries)f(in)h(a)g(collection)f(of)h(variable-length)e (records)i(stored)g(in)f(a)i(single)e(buf)o(fer)n(,)i(the)f(simple)g(I/O)g (primitives)0 1156 y(de\256ne)j(operations)e(for)i(the)g(transfer)g(of)g (only)e(one)i(record)g(at)g(a)g(time.)16 b(An)11 b(extended)f(version)g(of)h (the)f(I/O)h(interface)g(\(see)0 1213 y(below\))g(may)g(support)f(the)h (manipulation)e(of)i(ranges)g(of)h(records)f(with)f(consecutive)g(record)h (numbers.)62 1311 y(The)f(I/O)f(interface)g(also)g(de\256nes)h(a)f(special)g (mode)h(\257ag)g(named)f Fc(truncate)f Fd(to)h(control)g(the)g(behavior)g(of) g(the)g(I/O)g(items)0 1367 y(when)j(manipulating)f(ranges)h(of)h(bytes)f(or)g (records.)21 b(If)13 b(set,)g(this)f(\257ag)h(speci\256es)f(that,)h(if)f(the) h(item)f(can)h(only)f(currently)0 1424 y(transfer)f(\(read)h(or)f(write\))g (fewer)h(data)f(elements)g(than)g(have)g(been)g(speci\256ed)g(in)g(the)g (client)f(request,)h(the)g(I/O)g(operation)0 1480 y(should)d(transfer)i(as)g (many)g(elements)f(as)h(possible)e(at)i(once)f(and)h(ignore)f(the)g(rest)h (of)g(the)f(range.)16 b(Otherwise,)10 b(if)f(this)g(\257ags)0 1537 y(is)h(not)g(set,)h(the)f(I/O)g(operation)f(should)g(fail)i(or)f(block)g (until)f(the)h(complete)h(range)f(of)h(data)f(elements)h(can)f(be)h (transferred)0 1593 y(in)g(one)g(operation.)0 1757 y Fe(3.5.4.)46 b(Sequential)12 b(vs.)k(Random)11 b(Access)0 1886 y Fd(For)k(each)f (fundamental)g(operation)f(\(read/write,)i(byte/records,)f(...\),)j(the)d (I/O)g(interface)g(de\256nes)h(two)e(variations)g(for)0 1942 y(random)d(and)g(sequential)e(access.)17 b(For)10 b(the)f(random)h(access)h (primitives,)e(the)g(client)g(speci\256es)h(in)g(the)f(request)h(the)f(of)o (fset)0 1999 y(or)15 b(the)g(record)g(number)h(of)f(the)g(data)g(elements)f (to)h(transfer)m(.)29 b(For)15 b(the)g(sequential)f(access)h(primitives,)g (the)g(of)o(fset)g(or)0 2055 y(record)i(number)f(is)g(returned)g(as)g(a)h (result)e(of)i(the)f(data)g(transfer)g(operation)f(\(read)i(or)g(write\),)g (to)f(be)h(used)e(in)h(future)0 2111 y(references)c(to)f(the)g(data)g (elements)g(in)f(question.)62 2209 y(In)16 b(general,)i(most)d(types)g(of)h (data)g(access)g(can)g(be)g(implemented)g(as)g(applications)d(of)j(the)g (pure)g(random-access)0 2266 y(model)9 b(with)g(a)h(single)e(scalar)h(data)h (identi\256er)n(,)f(augmented)g(with)g(external)g(support)f(such)h(as)g (table)g(of)h(contents,)f(indices,)0 2322 y(counters,)h(etc.)16 b(In)10 b(particular)n(,)g(the)g(traditional)e(UNIX)h(sequential)g(\256le)h (reading)f(semantics)g(\(\252seek\272\))i(are)g(implemented)0 2379 y(with)f(a)i(\252current)f(of)o(fset\272)g(maintained)f(by)h(the)g (client)f(emulation)g(libraries)g(and)h(not)g(by)f(the)h(I/O)g(items.)16 b(This)10 b(approach)872 2504 y Fc(DRAFT-15)p eop %%Page: 16 16 bop 0 42 a Fd(relieves)10 b(the)f(I/O)h(items)g(of)g(the)f(responsibility)e (to)j(keep)g(track)g(of)g(multiple)e(seek)i(of)o(fsets)g(for)g(several)g (unrelated)f(groups)0 98 y(of)k(clients,)g(and)g(facilitates)f(the)h(use)g (of)g(memory-mapped)h(\256les)f(and)g(the)g(handling)f(of)h(multi-threaded)f (clients.)21 b(The)0 154 y(sequential-access)13 b(primitives)g(are)j (intended)d(to)h(be)g(used)g(for)h(the)f(special)g(cases)h(of)f(I/O)h (interactions)e(that)g(have)i(an)0 211 y(intrinsically)10 b(sequential)h (character)j(not)e(imposed)g(by)g(the)h(clients,)f(such)g(as)h(pipe)f(I/O,)h (TTY)f(I/O)h(or)g(multiple)e(clients)0 267 y(appending)f(to)g(a)i(\256le.)0 431 y Fe(3.5.5.)46 b(Data)10 b(Manipulation)0 560 y Fd(Most)16 b(naive)g(applications)e(and)i(application)e(programming)i(interfaces)g (manipulate)f(I/O)h(data)g(by)g(copying)f(to)g(and)0 616 y(from)c(buf)o(fers) f(allocated)g(and)g(speci\256ed)g(by)g(the)g(clients.)15 b(However)n(,)10 b(to)g(maximize)h(the)f(performance)h(of)f(data)g(transfers)0 673 y(through)16 b(shared)g(memory)i(buf)o(fers)f(as)g(well)g(as)g(between)g (modules)f(inside)g(individual)e(servers,)19 b(it)e(is)f(desirable)h(to)0 729 y(manipulate)9 b(data)i(through)d(pointers)h(to)h(long-lived,)f (system-controlled)f(buf)o(fers)j(that)e(can)i(be)f(simply)f(passed)h (without)0 786 y(copying)g(along)g(a)i(chain)f(of)g(data)g(processing)f (modules.)62 884 y(In)19 b(the)e(interest)h(of)g(simplicity)m(,)g(the)g (standard)g(I/O)g(interface)g(is)g(divided)e(between)i(a)h(basic)e(and)h(an)h (extended)0 940 y(interfaces)9 b(corresponding)f(to)h(those)g(two)g(modes)h (of)f(operations.)15 b(The)9 b(basic)g(interface)h(only)f(supports)f(copies)h (to/from)0 997 y(client)i(buf)o(fers,)i(and)e(is)h(exported)f(to)g(all)h (clients)e(\(emulation)h(libraries\).)18 b(The)12 b(extended)f(interface)h (de\256nes)g(additional)0 1053 y(data)e(structures)f(\(blocks)g(and)h (records\))h(to)e(represent)h(data)h(buf)o(fers,)f(and)g(a)h(set)f(of)g (primitives)f(that)g(parallel)h(the)g(\252basic\272)0 1110 y(primitives)f(but)h(operate)h(on)f(those)g(data)g(structures.)16 b(This)9 b(extended)h(interface)h(is)f(not)g(currently)g(exported)g(to)g (external)0 1166 y(clients,)e(but)f(it)h(is)f(used)h(for)g(the)g(internal)f (implementation)g(of)h(various)f(servers)h(and)g(proxies)f(in)h(the)g(system) f(prototype.)14 b(It)0 1223 y(may)8 b(be)h(exported)e(for)h(sophisticated)d (clients)i(in)h(the)f(future.)16 b(Note)7 b(that)h(thanks)e(to)i(its)f(more)i (sophisticated)c(mechanisms)0 1279 y(for)13 b(data)g(representation,)g(this)f (extended)g(interface)h(can)g(also)g(support)e(the)i(manipulation)e(of)i (ranges)g(of)g(records)g(and)0 1335 y(provide)d(scatter)o(-gather)h (capabilities)e(for)j(blocks)e(of)h(data.)0 1500 y Fe(3.6.)46 b(Asynchr)o(onous)11 b(Noti\256cations)0 1628 y Fd(The)i(noti\256cation)d (facility)i(allows)g(various)f(service)i(providers)e(to)h(initiate)g (interactions)e(with)i(emulation)g(clients)f(and)0 1685 y(inform)k(them)h(of) g(special)f(events)g(happening)f(in)h(the)g(system.)29 b(Its)16 b(main)f(use)h(is)f(for)g(the)h(emulation)e(of)i(UNIX-like)0 1741 y(signals.)62 1839 y(The)11 b(fundamental)f(abstraction)g(in)g(this)g (facility)g(is)g(an)h Fc(exception)g(item)f Fd(instantiated)f(inside)g(the)i (emulation)f(library)0 1895 y(of)i(each)g(client)f(process.)17 b(This)11 b(object)g(exports)g(a)h(simple)f(operation)g(to)g(deliver)g(a)h (noti\256cation)e(to)h(the)h(tar)o(get)f(process.)0 1952 y(Such)j(a)f (noti\256cation)f(contains)g(a)i(simple)f(numeric)h(code,)g(from)g(a)g (uni\256ed)f(space)h(of)f(error)h(and)f(exception)g(codes.)23 b(It)0 2008 y(can)13 b(be)h(handled)e(by)g(the)h(emulation)f(library)h(in)g (any)f(way)h(speci\256ed)g(by)g(the)g(implementer)g(of)g(that)g(library;)g (the)f(most)0 2065 y(common)f(approach)g(is)g(to)g(raise)g(an)g(exception)f (at)i(the)e(programming)h(language)g(level)f(in)h(the)g(client)f(process.)62 2163 y(T)m(o)e(allow)f(external)h(servers)g(to)g(locate)g(and)g(access)h (those)e(exception)g(items,)i(each)g(emulated)f(process)g(is)f(represented)0 2219 y(by)13 b(a)g Fc(task)h(item)e Fd(managed)i(by)e(the)h(process)g (management)g(server)h(or)f Fc(task)g(master)p Fd(.)21 b(This)12 b(server)i(makes)f(those)f(items)0 2276 y(available)i(in)h(the)g(global)f (name)i(space,)h(and)e(takes)g(care)h(of)f(access)g(mediation)f(in)h(the)g (normal)g(fashion.)28 b(Among)15 b(a)0 2332 y(number)10 b(of)g(primitives)e (concerned)i(with)f(control)g(of)h(the)f(tar)o(get)h(task,)g(the)g(task)f (item)h(exports)f(an)h(operation)f(to)g(forward)0 2389 y(a)j(noti\256cation)d (to)i(the)g(tar)o(get)g(emulated)g(process.)872 2504 y Fc(DRAFT-16)p eop %%Page: 17 17 bop 0 42 a Fe(3.7.)46 b(Support)12 b(for)g(Shar)o(ed)g(State)0 170 y Fd(In)f(a)h(typical)e(emulation)g(system,)h(there)g(are)h(many)f (instances)f(of)h(information)f(that)h(must)f(be)h(shared)g(between)g (several)0 226 y(components:)68 362 y Fa(\017)23 b Fd(UNIX)11 b(\256le)g(descriptor)f(state,)h(shared)g(between)g(multiple)f(UNIX)h (processes)68 456 y Fa(\017)23 b Fd(\256le)11 b(size)g(and)g(control)f (information,)h(shared)g(between)f(a)i(\256le)f(server)h(and)f(potentially)e (many)i(clients)68 549 y Fa(\017)23 b Fd(information)10 b(maintained)g(by)h (various)f(servers)h(and)g(cached)h(in)e(the)h(emulation)f(library)68 643 y Fa(\017)23 b Fd(etc.)0 779 y(The)c(most)f(direct)h(approach)f(to)h (deal)f(with)g(this)g(issue)g(is)g(to)h(integrate)f(support)f(for)i(each)g (speci\256c)g(data)g(sharing)0 835 y(requirement)13 b(rigidly)e(in)h(the)h (design)e(of)i(each)h(concerned)e(server)h(or)g(client.)21 b(However)n(,)14 b(in)e(keeping)g(with)g(the)g(design)0 891 y(guideline)c(of)i(attempting)f(to)h(minimize)f(the)h(number)g(of)g (specialized)f(mechanisms)h(in)g(the)g(system,)g(a)g(general)g(purpose)0 948 y(facility)g(is)h(currently)f(under)h(consideration,)f(that)g(can)i(be)f (used)g(as)g(a)g(basis)g(for)g(many)g(dif)o(ferent)h(applications.)62 1046 y(The)j(model)g(for)g(the)g(shared)g(state)g(management)g(facility)f(is) h(based)g(upon)f(the)h(abstractions)e(of)i Fc(shared)h(records)0 1102 y Fd(and)e Fc(blackboards)p Fd(,)f(managed)h(by)f(a)h(central)g Fc(blackboard)g(server)p Fd(.)24 b(Each)14 b(element)g(of)g(data)g(in)f(the)h (system)f(that)g(must)0 1159 y(potentially)g(be)i(shared)g(by)f(several)h (components)f(is)g(represented)h(as)g(a)h(separate)f(abstract)f(record)h (allocated)g(by)f(the)0 1215 y(blackboard)j(server)h(and)f(uniquely)f (identi\256ed)g(throughout)g(the)h(system.)35 b(Each)18 b(client)e(of)i(the)f (sharing)g(facility)g(is)0 1272 y(associated)g(with)h(a)g(private)g (blackboard)f(item)i(in)e(the)h(blackboard)g(server)n(,)j(that)c(holds)g(the) h(collection)f(of)h(shared)0 1328 y(records)12 b(accessible)f(to)h(this)f (client.)18 b(The)12 b(data)g(stored)f(in)h(those)f(shared)h(records)g(can)g (be)g(manipulated)f(by)g(each)i(client)0 1385 y(through)8 b(simple)h (operations)g(exported)g(by)g(the)g(proxy)g(for)h(the)g(blackboard.)15 b(Note)9 b(that)g(in)g(general,)i(by)e(the)h(very)f(nature)0 1441 y(of)i(a)g(shared)f(state)g(facility)m(,)g(a)h(single)e(shared)i(record) g(may)g(be)f(accessible)g(through)f(many)i(client)f(blackboards.)15 b(Clients)0 1498 y(use)c(an)g(explicit)f Fc(attach)g Fd(primitive)g(to)h (gain)f(access)i(to)f(speci\256c)g(records)g(in)g(the)g(context)f(of)h(their) g(own)f(blackboard.)62 1596 y(The)g(preferred)h(implementation)d(of)i(this)f (facility)g(is)h(for)g(each)g(blackboard)f(to)h(correspond)f(to)h(a)g(region) f(of)h(memory)0 1652 y(shared)17 b(between)g(one)g(client)g(and)g(the)g (blackboard)g(server)n(,)j(storing)15 b(a)j(copy)f(of)g(all)g(the)h(relevant) f(shared)g(records.)0 1708 y(The)f(blackboard)f(server)h(is)f(then)h (responsible)e(for)i(keeping)f(track)h(of)g(client)f(accesses)h(and)g(for)g (copying)f(the)g(most)0 1765 y(up-to-date)10 b(information)f(into)h(each)h (blackboard)f(as)h(appropriate.)k(When)c(this)e(full)h(shared-memory)i (implementation)0 1821 y(is)i(not)g(possible,)g(the)g(blackboard)g(facility)f (can)i(also)f(be)h(implemented)f(with)f(other)h(caching)g(schemes)h(at)g(the) f(client)0 1878 y(level,)e(or)g(even)g(with)f(no)h(caching)f(at)h(all,)h(by)e (forcing)h(each)g(client)f(to)h(communicate)g(with)f(the)h(blackboard)f (server)h(via)0 1934 y(RPC)g(for)g(each)f(data)g(access.)872 2504 y Fc(DRAFT-17)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF