%!
%%BoundingBox: (atend)
%%Pages: (atend)
%%DocumentFonts: (atend)
%%EndComments
%
% FrameMaker PostScript Prolog 3.0, for use with FrameMaker 3.0
% Copyright (c) 1986,87,89,90,91 by Frame Technology Corporation.
% All rights reserved.
%
% Known Problems:
% Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1
/FMversion (3.0) def
% Set up Color vs. Black-and-White
/FMPrintInColor systemdict /colorimage known
systemdict /currentcolortransfer known or def
% Uncomment this line to force b&w on color printer
% /FMPrintInColor false def
/FrameDict 295 dict def
systemdict /errordict known not {/errordict 10 dict def
errordict /rangecheck {stop} put} if
% The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk
FrameDict /tmprangecheck errordict /rangecheck get put
errordict /rangecheck {FrameDict /bug true put} put
FrameDict /bug false put
mark
% Some PS machines read past the CR, so keep the following 3 lines together!
currentfile 5 string readline
00
0000000000
cleartomark
errordict /rangecheck FrameDict /tmprangecheck get put
FrameDict /bug get {
/readline {
/gstring exch def
/gfile exch def
/gindex 0 def
{
gfile read pop
dup 10 eq {exit} if
dup 13 eq {exit} if
gstring exch gindex exch put
/gindex gindex 1 add def
} loop
pop
gstring 0 gindex getinterval true
} def
} if
/FMVERSION {
FMversion ne {
/Times-Roman findfont 18 scalefont setfont
100 100 moveto
(FrameMaker version does not match postscript_prolog!)
dup =
show showpage
} if
} def
/FMLOCAL {
FrameDict begin
0 def
end
} def
/gstring FMLOCAL
/gfile FMLOCAL
/gindex FMLOCAL
/orgxfer FMLOCAL
/orgproc FMLOCAL
/organgle FMLOCAL
/orgfreq FMLOCAL
/yscale FMLOCAL
/xscale FMLOCAL
/manualfeed FMLOCAL
/paperheight FMLOCAL
/paperwidth FMLOCAL
/FMDOCUMENT {
array /FMfonts exch def
/#copies exch def
FrameDict begin
0 ne dup {setmanualfeed} if
/manualfeed exch def
/paperheight exch def
/paperwidth exch def
/yscale exch def
/xscale exch def
currenttransfer cvlit /orgxfer exch def
currentscreen cvlit /orgproc exch def
/organgle exch def /orgfreq exch def
setpapername
manualfeed {true} {papersize} ifelse
{manualpapersize} {false} ifelse
{desperatepapersize} if
end
} def
/pagesave FMLOCAL
/orgmatrix FMLOCAL
/landscape FMLOCAL
/FMBEGINPAGE {
FrameDict begin
/pagesave save def
3.86 setmiterlimit
/landscape exch 0 ne def
landscape {
90 rotate 0 exch neg translate pop
}
{pop pop}
ifelse
xscale yscale scale
/orgmatrix matrix def
gsave
} def
/FMENDPAGE {
grestore
pagesave restore
end
showpage
} def
/FMFONTDEFINE {
FrameDict begin
findfont
ReEncode
1 index exch
definefont
FMfonts 3 1 roll
put
end
} def
/FMFILLS {
FrameDict begin
array /fillvals exch def
end
} def
/FMFILL {
FrameDict begin
fillvals 3 1 roll put
end
} def
/FMNORMALIZEGRAPHICS {
newpath
0.0 0.0 moveto
1 setlinewidth
0 setlinecap
0 0 0 sethsbcolor
0 setgray
} bind def
/fx FMLOCAL
/fy FMLOCAL
/fh FMLOCAL
/fw FMLOCAL
/llx FMLOCAL
/lly FMLOCAL
/urx FMLOCAL
/ury FMLOCAL
/FMBEGINEPSF {
end
/FMEPSF save def
/showpage {} def
FMNORMALIZEGRAPHICS
[/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall
fx fy translate
rotate
fw urx llx sub div fh ury lly sub div scale
llx neg lly neg translate
} bind def
/FMENDEPSF {
FMEPSF restore
FrameDict begin
} bind def
FrameDict begin
/setmanualfeed {
%%BeginFeature *ManualFeed True
statusdict /manualfeed true put
%%EndFeature
} def
/max {2 copy lt {exch} if pop} bind def
/min {2 copy gt {exch} if pop} bind def
/inch {72 mul} def
/pagedimen {
paperheight sub abs 16 lt exch
paperwidth sub abs 16 lt and
{/papername exch def} {pop} ifelse
} def
/papersizedict FMLOCAL
/setpapername {
/papersizedict 14 dict def
papersizedict begin
/papername /unknown def
/Letter 8.5 inch 11.0 inch pagedimen
/LetterSmall 7.68 inch 10.16 inch pagedimen
/Tabloid 11.0 inch 17.0 inch pagedimen
/Ledger 17.0 inch 11.0 inch pagedimen
/Legal 8.5 inch 14.0 inch pagedimen
/Statement 5.5 inch 8.5 inch pagedimen
/Executive 7.5 inch 10.0 inch pagedimen
/A3 11.69 inch 16.5 inch pagedimen
/A4 8.26 inch 11.69 inch pagedimen
/A4Small 7.47 inch 10.85 inch pagedimen
/B4 10.125 inch 14.33 inch pagedimen
/B5 7.16 inch 10.125 inch pagedimen
end
} def
/papersize {
papersizedict begin
/Letter {lettertray letter} def
/LetterSmall {lettertray lettersmall} def
/Tabloid {11x17tray 11x17} def
/Ledger {ledgertray ledger} def
/Legal {legaltray legal} def
/Statement {statementtray statement} def
/Executive {executivetray executive} def
/A3 {a3tray a3} def
/A4 {a4tray a4} def
/A4Small {a4tray a4small} def
/B4 {b4tray b4} def
/B5 {b5tray b5} def
/unknown {unknown} def
papersizedict dup papername known {papername} {/unknown} ifelse get
end
/FMdicttop countdictstack 1 add def
statusdict begin stopped end
countdictstack -1 FMdicttop {pop end} for
} def
/manualpapersize {
papersizedict begin
/Letter {letter} def
/LetterSmall {lettersmall} def
/Tabloid {11x17} def
/Ledger {ledger} def
/Legal {legal} def
/Statement {statement} def
/Executive {executive} def
/A3 {a3} def
/A4 {a4} def
/A4Small {a4small} def
/B4 {b4} def
/B5 {b5} def
/unknown {unknown} def
papersizedict dup papername known {papername} {/unknown} ifelse get
end
stopped
} def
/desperatepapersize {
statusdict /setpageparams known
{
paperwidth paperheight 0 1
statusdict begin
{setpageparams} stopped pop
end
} if
} def
/savematrix {
orgmatrix currentmatrix pop
} bind def
/restorematrix {
orgmatrix setmatrix
} bind def
/dmatrix matrix def
/dpi 72 0 dmatrix defaultmatrix dtransform
dup mul exch dup mul add sqrt 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
/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
/ReEncode {
dup
length
dict begin
{
1 index /FID ne
{def}
{pop pop} ifelse
} forall
0 eq {/Encoding DiacriticEncoding def} if
currentdict
end
} bind def
/graymode true def
/bwidth FMLOCAL
/bpside FMLOCAL
/bstring FMLOCAL
/onbits FMLOCAL
/offbits FMLOCAL
/xindex FMLOCAL
/yindex FMLOCAL
/x FMLOCAL
/y FMLOCAL
/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
{} settransfer
offbits offbits onbits add div FMsetgray
/graymode false def
} bind def
/grayness {
FMsetgray
graymode not {
/graymode true def
orgxfer cvx settransfer
orgfreq organgle orgproc cvx setscreen
} if
} bind def
/HUE FMLOCAL
/SAT FMLOCAL
/BRIGHT FMLOCAL
/Colors FMLOCAL
FMPrintInColor
{
/HUE 0 def
/SAT 0 def
/BRIGHT 0 def
% array of arrays Hue and Sat values for the separations [HUE BRIGHT]
/Colors
[[0 0 ] % black
[0 0 ] % white
[0.00 1.0] % red
[0.37 1.0] % green
[0.60 1.0] % blue
[0.50 1.0] % cyan
[0.83 1.0] % magenta
[0.16 1.0] % comment / yellow
] def
/BEGINBITMAPCOLOR {
BITMAPCOLOR} def
/BEGINBITMAPCOLORc {
BITMAPCOLORc} def
/BEGINBITMAPTRUECOLOR {
BITMAPTRUECOLOR } def
/BEGINBITMAPTRUECOLORc {
BITMAPTRUECOLORc } 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
/FMsetgray {
/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
}
{
/BEGINBITMAPCOLOR {
BITMAPGRAY} def
/BEGINBITMAPCOLORc {
BITMAPGRAYc} def
/BEGINBITMAPTRUECOLOR {
BITMAPTRUEGRAY } def
/BEGINBITMAPTRUECOLORc {
BITMAPTRUEGRAYc } def
/FMsetgray {setgray} bind def
/K {
pop
} def
}
ifelse
/normalize {
transform round exch round exch itransform
} bind def
/dnormalize {
dtransform round exch round exch idtransform
} bind def
/lnormalize {
0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop
} bind def
/H {
lnormalize setlinewidth
} bind def
/Z {
setlinecap
} bind def
/fillvals FMLOCAL
/X {
fillvals exch get
dup type /stringtype eq
{8 1 setpattern}
{grayness}
ifelse
} bind def
/V {
gsave eofill grestore
} bind def
/N {
stroke
} bind def
/M {newpath moveto} bind def
/E {lineto} bind def
/D {curveto} bind def
/O {closepath} bind def
/n FMLOCAL
/L {
/n exch def
newpath
normalize
moveto
2 1 n {pop normalize lineto} for
} bind def
/Y {
L
closepath
} bind def
/x1 FMLOCAL
/x2 FMLOCAL
/y1 FMLOCAL
/y2 FMLOCAL
/rad FMLOCAL
/R {
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
x1 y1
x2 y1
x2 y2
x1 y2
4 Y
} bind def
% The following commented out code did not work for tangent lines of zero
% length. The code following it was provided by Frame to patch this error.
%
%/RR {
% /rad exch def
% normalize
% /y2 exch def
% /x2 exch def
% normalize
% /y1 exch def
% /x1 exch def
% newpath
% x1 y1 rad add moveto
% x1 y2 x2 y2 rad arcto
% x2 y2 x2 y1 rad arcto
% x2 y1 x1 y1 rad arcto
% x1 y1 x1 y2 rad arcto
% closepath
% 16 {pop} repeat
% } bind def
/rarc
{rad
{arcto} stopped
} bind def
/RR {
/rad exch def
normalize
/y2 exch def
/x2 exch def
normalize
/y1 exch def
/x1 exch def
mark
newpath
x1 y1 rad add moveto
x1 y2 x2 y2 rarc
x2 y2 x2 y1 rarc
x2 y1 x1 y1 rarc
% x2 y1 x1 y1 rarc
x1 y1 x1 y2 rarc
closepath
cleartomark
} bind def
/C {
grestore
gsave
R
clip
} bind def
/FMpointsize FMLOCAL
/F {
FMfonts exch get
FMpointsize scalefont
setfont
} bind def
/Q {
/FMpointsize exch def
F
} bind def
/T {
moveto show
} bind def
/RF {
rotate
0 ne {-1 1 scale} if
} bind def
/TF {
gsave
moveto
RF
show
grestore
} bind def
/P {
moveto
0 32 3 2 roll widthshow
} bind def
/PF {
gsave
moveto
RF
0 32 3 2 roll widthshow
grestore
} bind def
/S {
moveto
0 exch ashow
} bind def
/SF {
gsave
moveto
RF
0 exch ashow
grestore
} bind def
/B {
moveto
0 32 4 2 roll 0 exch awidthshow
} bind def
/BF {
gsave
moveto
RF
0 32 4 2 roll 0 exch awidthshow
grestore
} bind def
/G {
gsave
newpath
normalize translate 0.0 0.0 moveto
dnormalize scale
0.0 0.0 1.0 5 3 roll arc
closepath fill
grestore
} bind def
/A {
gsave
savematrix
newpath
2 index 2 div add exch 3 index 2 div sub exch
normalize 2 index 2 div sub exch 3 index 2 div add exch
translate
scale
0.0 0.0 1.0 5 3 roll arc
restorematrix
stroke
grestore
} bind def
/x FMLOCAL
/y FMLOCAL
/w FMLOCAL
/h FMLOCAL
/xx FMLOCAL
/yy FMLOCAL
/ww FMLOCAL
/hh FMLOCAL
/FMsaveobject FMLOCAL
/FMoptop FMLOCAL
/FMdicttop FMLOCAL
/BEGINPRINTCODE {
/FMdicttop countdictstack 1 add def
/FMoptop count 4 sub def
/FMsaveobject save def
userdict begin
/showpage {} def
FMNORMALIZEGRAPHICS
3 index neg 3 index neg translate
} bind def
/ENDPRINTCODE {
count -1 FMoptop {pop pop} for
countdictstack -1 FMdicttop {pop end} for
FMsaveobject restore
} bind def
/gn {
0
{ 46 mul
cf read pop
32 sub
dup 46 lt {exit} if
46 sub add
} loop
add
} bind def
/str FMLOCAL
/cfs {
/str sl string def
0 1 sl 1 sub {str exch val put} for
str def
} bind def
/ic [
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
0
{0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx}
{10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx}
{19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12}
{13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh}
{4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh}
{13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl}
{7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl}
{0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl}
{10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl}
] def
/sl FMLOCAL
/val FMLOCAL
/ws FMLOCAL
/im FMLOCAL
/bs FMLOCAL
/cs FMLOCAL
/len FMLOCAL
/pos FMLOCAL
/ms {
/sl exch def
/val 255 def
/ws cfs
/im cfs
/val 0 def
/bs cfs
/cs cfs
} bind def
400 ms
/cip {
is
0
cf cs readline pop
{ ic exch get exec
add
} forall
pop
/tot w 1 sub def
0 1 tot {
/indx exch def
/indxa is indx get def
/placer nredt indxa get def
/placeg ngreent indxa get def
/placeb nbluet indxa get def
cris indx placer 255 mul cvi put
cgis indx placeg 255 mul cvi put
cbis indx placeb 255 mul cvi put
} for pop cris
} bind def
/ip {
is
0
cf cs readline pop
{ ic exch get exec
add
} forall
pop
} bind def
/wh {
/len exch def
/pos exch def
ws 0 len getinterval im pos len getinterval copy pop
pos len
} bind def
/bl {
/len exch def
/pos exch def
bs 0 len getinterval im pos len getinterval copy pop
pos len
} bind def
/s1 1 string def
/fl {
/len exch def
/pos exch def
/val cf s1 readhexstring pop 0 get def
pos 1 pos len add 1 sub {im exch val put} for
pos len
} bind def
/hx {
3 copy getinterval
cf exch readhexstring pop pop
} bind def
/h FMLOCAL
/w FMLOCAL
/d FMLOCAL
/lb FMLOCAL
/bitmapsave FMLOCAL
/is FMLOCAL
/cf FMLOCAL
/wbytes {
dup
8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse
} bind def
/BEGINBITMAPBWc {
1 {} COMMONBITMAPc
} bind def
/BEGINBITMAPGRAYc {
8 {} COMMONBITMAPc
} bind def
/BEGINBITMAP2BITc {
2 {} COMMONBITMAPc
} bind def
/COMMONBITMAPc {
/r exch def
/d exch def
gsave
translate rotate scale /h exch def /w exch def
/lb w d wbytes def
sl lb lt {lb ms} if
/bitmapsave save def
r
/is im 0 lb getinterval def
ws 0 lb getinterval is copy pop
/cf currentfile def
w h d [w 0 0 h neg 0 h]
{ip} image
bitmapsave restore
grestore
} bind def
/BEGINBITMAPBW {
1 {} COMMONBITMAP
} bind def
/BEGINBITMAPGRAY {
8 {} COMMONBITMAP
} bind def
/BEGINBITMAP2BIT {
2 {} COMMONBITMAP
} bind def
/COMMONBITMAP {
/r exch def
/d exch def
gsave
translate rotate scale /h exch def /w exch def
/bitmapsave save def
r
/is w d wbytes string def
/cf currentfile def
w h d [w 0 0 h neg 0 h]
{cf is readhexstring pop} image
bitmapsave restore
grestore
} bind def
/proc1 FMLOCAL
/proc2 FMLOCAL
/newproc FMLOCAL
/Fmcc {
/proc2 exch cvlit def
/proc1 exch cvlit def
/newproc proc1 length proc2 length add array def
newproc 0 proc1 putinterval
newproc proc1 length proc2 putinterval
newproc cvx
} bind def
/ngrayt 256 array def
/nredt 256 array def
/nbluet 256 array def
/ngreent 256 array def
/gryt FMLOCAL
/blut FMLOCAL
/grnt FMLOCAL
/redt FMLOCAL
/indx FMLOCAL
/cynu FMLOCAL
/magu FMLOCAL
/yelu FMLOCAL
/k FMLOCAL
/u FMLOCAL
/colorsetup {
currentcolortransfer
/gryt exch def
/blut exch def
/grnt exch def
/redt exch def
0 1 255 {
/indx exch def
/cynu 1 red indx get 255 div sub def
/magu 1 green indx get 255 div sub def
/yelu 1 blue indx get 255 div sub def
/k cynu magu min yelu min def
nredt indx 1 0 cynu max sub redt exec put
ngreent indx 1 0 magu max sub grnt exec put
nbluet indx 1 0 yelu max sub blut exec put
ngrayt indx 1 k sub gryt exec put
} for
} bind def
/tran FMLOCAL
/fakecolorsetup {
/tran 256 string def
0 1 255 {/indx exch def
tran indx
red indx get 77 mul
green indx get 151 mul
blue indx get 28 mul
add add 256 idiv put} for
currenttransfer
{255 mul cvi tran exch get 255.0 div}
exch Fmcc settransfer
} bind def
/BITMAPCOLOR {
/d 8 def
gsave
translate rotate scale /h exch def /w exch def
/bitmapsave save def
colorsetup
/is w d wbytes string def
/ris w d wbytes string def
/gis w d wbytes string def
/bis w d wbytes string def
/cf currentfile def
w h d [w 0 0 h neg 0 h]
{cf is readhexstring pop
/tot w 1 sub def
0 1 tot {
/indx exch def
/indxa is indx get def
/placer nredt indxa get def
/placeg ngreent indxa get def
/placeb nbluet indxa get def
ris indx placer 255 mul cvi put
gis indx placeg 255 mul cvi put
bis indx placeb 255 mul cvi put
} for pop ris}
{gis} {bis} true 3 colorimage
bitmapsave restore
grestore
} bind def
/BITMAPCOLORc {
/d 8 def
gsave
translate rotate scale /h exch def /w exch def
/lb w d wbytes def
sl lb lt {lb ms} if
/bitmapsave save def
colorsetup
/is im 0 lb getinterval def
/cris lb string def
/cgis lb string def
/cbis lb string def
ws 0 lb getinterval is copy pop
/cf currentfile def
w h d [w 0 0 h neg 0 h]
{cip} {cgis} {cbis} true 3 colorimage
bitmapsave restore
grestore
} bind def
/BITMAPTRUECOLORc {
gsave
translate rotate scale /h exch def /w exch def
/bitmapsave save def
/is w string def
ws 0 w getinterval is copy pop
/cf currentfile def
w h 8 [w 0 0 h neg 0 h]
{ip} {gip} {bip} true 3 colorimage
bitmapsave restore
grestore
} bind def
/BITMAPTRUECOLOR {
gsave
translate rotate scale /h exch def /w exch def
/bitmapsave save def
/is w string def
/gis w string def
/bis w string def
/cf currentfile def
w h 8 [w 0 0 h neg 0 h]
{ cf is readhexstring pop }
{ cf gis readhexstring pop }
{ cf bis readhexstring pop }
true 3 colorimage
bitmapsave restore
grestore
} bind def
/BITMAPTRUEGRAYc {
gsave
translate rotate scale /h exch def /w exch def
/bitmapsave save def
/is w string def
ws 0 w getinterval is copy pop
/cf currentfile def
w h 8 [w 0 0 h neg 0 h]
{ip gip bip w gray} image
bitmapsave restore
grestore
} bind def
/ww FMLOCAL
/r FMLOCAL
/g FMLOCAL
/b FMLOCAL
/i FMLOCAL
/gray {
/ww exch def
/b exch def
/g exch def
/r exch def
0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul
b i get .114 mul add add r i 3 -1 roll floor cvi put } for
r
} bind def
/BITMAPTRUEGRAY {
gsave
translate rotate scale /h exch def /w exch def
/bitmapsave save def
/is w string def
/gis w string def
/bis w string def
/cf currentfile def
w h 8 [w 0 0 h neg 0 h]
{ cf is readhexstring pop
cf gis readhexstring pop
cf bis readhexstring pop w gray} image
bitmapsave restore
grestore
} bind def
/BITMAPGRAY {
8 {fakecolorsetup} COMMONBITMAP
} bind def
/BITMAPGRAYc {
8 {fakecolorsetup} COMMONBITMAPc
} bind def
/ENDBITMAP {
} bind def
end
/ALDsave FMLOCAL
/ALDmatrix matrix def ALDmatrix currentmatrix pop
/StartALD {
/ALDsave save def
savematrix
ALDmatrix setmatrix
} bind def
/InALD {
restorematrix
} bind def
/DoneALD {
ALDsave restore
} bind def
%%EndProlog
%%BeginSetup
(3.0) FMVERSION
1 1 612 792 0 1 12 FMDOCUMENT
0 0 /Palatino-Roman FMFONTDEFINE
1 0 /Times-Roman FMFONTDEFINE
2 0 /Times-Bold FMFONTDEFINE
3 0 /Courier-Bold FMFONTDEFINE
4 0 /Times-Italic FMFONTDEFINE
5 0 /Helvetica FMFONTDEFINE
6 0 /Times-BoldItalic FMFONTDEFINE
32 FMFILLS
0 0 FMFILL
1 0.1 FMFILL
2 0.3 FMFILL
3 0.5 FMFILL
4 0.7 FMFILL
5 0.9 FMFILL
6 0.97 FMFILL
7 1 FMFILL
8 <0f1e3c78f0e1c387> FMFILL
9 <0f87c3e1f0783c1e> FMFILL
10 <cccccccccccccccc> FMFILL
11 <ffff0000ffff0000> FMFILL
12 <8142241818244281> FMFILL
13 <03060c183060c081> FMFILL
14 <8040201008040201> FMFILL
16 1 FMFILL
17 0.9 FMFILL
18 0.7 FMFILL
19 0.5 FMFILL
20 0.3 FMFILL
21 0.1 FMFILL
22 0.03 FMFILL
23 0 FMFILL
24 <f0e1c3870f1e3c78> FMFILL
25 <f0783c1e0f87c3e1> FMFILL
26 <3333333333333333> FMFILL
27 <0000ffff0000ffff> FMFILL
28 <7ebddbe7e7dbbd7e> FMFILL
29 <fcf9f3e7cf9f3f7e> FMFILL
30 <7fbfdfeff7fbfdfe> FMFILL
%%EndSetup
%%Page: "1" 1
%%BeginPaperSize: Letter
%%EndPaperSize
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(1) 500 42.62 T
1 24 Q
(xFS Project Architecture) 186.75 704 T
2 12 Q
(Curtis Anderson) 263.19 664 T
(Doug Doucette) 268.2 648 T
(Jeff Glover) 277.19 632 T
(W) 286.51 616 T
(ei Hu) 297.84 616 T
(Michael Nishimoto) 257.53 600 T
(Geoff Peck) 277.86 584 T
(Adam Sweeney) 266.86 568 T
2 16 Q
(1.0 Intr) 72 525.33 T
(oduction) 127.23 525.33 T
1 12 Q
0.74 (This project is concerned with producing a next generation \336le system and volume manager for) 72 498 P
-0.01 (IRIX. Included in this project are changes to the underlying disk drivers, buf) 72 484 P
-0.01 (fer cache, and virtual) 438.78 484 P
0.83 (memory support. Also included are additional semantics added for reasons such as standardiza-) 72 470 P
(tion, new products, new markets, etc.) 72 456 T
2 16 Q
(2.0 Goals and Requir) 72 415.33 T
(ements) 220.54 415.33 T
2 14 Q
(2.1 High-level goals) 72 380.67 T
3 12 Q
(\245) 72 360 T
1 F
0.18 (Lar) 85.75 360 P
0.18 (ge systems must be saleable as scienti\336c \336le and compute servers, as commercial data pro-) 102.18 360 P
(cessing servers, and as digital media servers.) 85.75 346 T
3 F
(\245) 72 326 T
1 F
1.64 (The same software must be able to run on all supported SGI machines, in particular small) 85.75 326 P
(machines must be supported well.) 85.75 312 T
3 F
(\245) 72 292 T
1 F
0.62 (The \336le system should replace EFS \050the current SGI \336le system\051 completely) 85.75 292 P
0.62 (, i.e. it should do) 457.22 292 P
(everything that EFS does.) 85.75 278 T
3 F
(\245) 72 258 T
1 F
(The volume manager should replace the current two volume managers completely) 85.75 258 T
(.) 479.33 258 T
3 F
(\245) 72 238 T
1 F
(The \336le system must out-perform EFS on benchmarks that represent useful activity) 85.75 238 T
(.) 484.37 238 T
3 F
(\245) 72 218 T
1 F
-0.29 (The \336le system must support high availability by recovering quickly from failures and by keep-) 85.75 218 P
(ing its disk-based data in a consistent state at all times.) 85.75 204 T
3 F
(\245) 72 184 T
1 F
0.38 (The \336le system and volume manager design must support future extensions in certain speci\336c) 85.75 184 P
(areas, i.e. high availability) 85.75 170 T
(, distributed \336le systems, and user transactions.) 211.55 170 T
2 14 Q
(2.2 Detailed r) 72 136.67 T
(equir) 155.69 136.67 T
(ements) 187.31 136.67 T
1 12 Q
0.84 (The goals from section) 72 110 P
0.84 (2.1 have guided us in determining a detailed set of requirements for the) 187.79 110 P
1.75 (project. These are broken up into groups below) 72 96 P
1.75 (. Items in the) 309.93 96 P
4 F
1.75 (implementation) 382.53 96 P
1 F
1.75 ( sections are not) 457.16 96 P
0.69 (really requirements in the same sense that the) 72 82 P
4 F
0.69 (functionality) 298.7 82 P
1 F
0.69 ( items are; they represent our current) 359.34 82 P
FMENDPAGE
%%EndPage: "1" 2
%%Page: "2" 2
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(2) 500 42.62 T
1 12 Q
1.06 (ideas about how to ful\336ll the functional requirements. In each section, the items are not in any) 72 712 P
(particular order) 72 698 T
(.) 145.6 698 T
2 F
(2.2.1 File System Requir) 72 666 T
(ements) 199.71 666 T
(2.2.1.1 File system functionality) 72 634 T
3 F
(\245) 72 614 T
1 F
-0.01 (Implement asynchronous I/O, direct I/O, and synchronous I/O as is done in EFS, in addition to) 85.75 614 P
(normal \050buf) 85.75 600 T
(fered\051 I/O.) 142.49 600 T
3 F
(\245) 72 580 T
1 F
0.17 (Ef) 85.75 580 P
0.17 (\336cient support for very lar) 96.85 580 P
0.17 (ge \336les, where very lar) 223.23 580 P
0.17 (ge means a 64 bit size. There must be little) 333.27 580 P
0.24 (or no performance penalty to access blocks in dif) 85.75 566 P
0.24 (ferent areas of the \336le. Some disk space pen-) 323.26 566 P
0.12 (alty \050for indices, for example\051 is allowed to increase performance. Linear searches through the) 85.75 552 P
(\336le system data structures to get to blocks at the end of a lar) 85.75 538 T
(ge \336le are unacceptable.) 373.01 538 T
3 F
(\245) 72 518 T
1 F
1.39 (Ef) 85.75 518 P
1.39 (\336cient support for sparse \336les. Arbitrary holes must be supported, areas of the \336le which) 96.85 518 P
0.07 (have never been written and which read back as zeroes. The representation must be disk-space) 85.75 504 P
-0.06 (ef) 85.75 490 P
-0.06 (\336cient as well as cpu-time ef) 94.86 490 P
-0.06 (\336cient in retrieval of old data and insertion of new data. There is) 231.92 490 P
-0.21 (no requirement to detect blocks of zeroes being written in order to replace them with holes \050nor) 85.75 476 P
-0.04 (is it forbidden\051. This capability is important for some scienti\336c and compute-intensive applica-) 85.75 462 P
(tions, as well as for Hierarchical Storage Management \050HSM\051.) 85.75 448 T
3 F
(\245) 72 428 T
1 F
1 (Ef) 85.75 428 P
1 (\336cient support for very small \336les, under 1KB or so. A normal root or usr \336le system has) 96.85 428 P
0.06 (many such \336les, as does a \336le system which contains program sources. Most symbolic links \336t) 85.75 414 P
(into this category) 85.75 400 T
(, as well.) 168.26 400 T
3 F
(\245) 72 380 T
1 F
0.62 (Ef) 85.75 380 P
0.62 (\336cient support for lar) 96.85 380 P
0.62 (ge directories, both for searches and for insertions and deletions. This) 200.08 380 P
(implies some index scheme, to avoid linear searches through a long directory) 85.75 366 T
(.) 455.38 366 T
3 F
(\245) 72 346 T
1 F
0.27 (The time to recover from failure does not increase with the size of the \336le system. The time is) 85.75 346 P
0.75 (allowed to increase with the level of activity in the \336le system at the time of the failure. The) 85.75 332 P
-0.21 (recovery scheme must not scan all inodes, or all directories, to ensure consistency) 85.75 318 P
-0.21 (. This implies) 474.79 318 P
-0.18 (that consistency is guaranteed by use of a log, since the alternative \050synchronous behavior as in) 85.75 304 P
(MS-DOS\051 is unacceptably slow) 85.75 290 T
(.) 237.21 290 T
3 F
(\245) 72 270 T
1 F
-0.16 (Recovery never backs out changes that were committed after returning successfully to the user) 85.75 270 P
-0.16 (.) 537 270 P
-0.07 (Some operations must be synchronous, at least as far as the log writes are concerned. Certainly) 85.75 256 P
(this includes \336le creation and deletion, and does not include ordinary \050buf) 85.75 242 T
(fered\051 writes.) 439.29 242 T
3 F
(\245) 72 222 T
1 F
0.08 (Supports ACLs and other POSIX 1003.6 functionality) 85.75 222 P
0.08 (. This includes some form of support for) 345.6 222 P
(Mandatory Access Controls, Information Labeling, and auditing.) 85.75 208 T
3 F
(\245) 72 188 T
1 F
0.65 (Supports extents, contiguous regions in a single \336le. Contiguity is de\336ned with respect to the) 85.75 188 P
-0.13 (underlying logical volume, not with respect to the actual disk space. It is not a requirement that) 85.75 174 P
1.33 (the extents be exposed in the programming interface to the user) 85.75 160 P
1.33 (. This is primarily a perfor-) 402.8 160 P
(mance issue but we may choose to make the extent sizes visible or settable per) 85.75 146 T
(-\336le.) 462.57 146 T
3 F
(\245) 72 126 T
1 F
0.51 (Supports multiple logical block sizes, ranging from the disk sector size up to something lar) 85.75 126 P
0.51 (ge) 528.68 126 P
0.29 (like 64KB or 256KB. The block size is set at \336le system creation time. It is the minimum unit) 85.75 112 P
(of allocation in the \336le system \050except for inodes, which can be smaller\051.) 85.75 98 T
FMENDPAGE
%%EndPage: "2" 3
%%Page: "3" 3
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(3) 500 42.62 T
3 12 Q
(\245) 72 712 T
1 F
-0.15 (Supports multiple physical sector sizes. This allows us to support dif) 85.75 712 P
-0.15 (ferent disk hardware with-) 413.55 712 P
0.17 (out a built-in reliance on a particular formatted sector size. Smaller sector sizes yield less total) 85.75 698 P
0.2 (useable disk space, so more ef) 85.75 684 P
0.2 (\336cient use of current disks can be made by increasing the sector) 231.74 684 P
(size.) 85.75 670 T
3 F
(\245) 72 650 T
1 F
0.59 (Allow the \336le system to change size on-line, possible automatically as well as by administra-) 85.75 650 P
0.38 (tive command. The \336le system\325) 85.75 636 P
0.38 (s underlying space \050volume\051 can grow) 238.18 636 P
0.38 (, so the \336le system must) 422.82 636 P
0.64 (be able to use the new space. It is also possible to allow communication between the volume) 85.75 622 P
0.83 (manager and the \336le system so that the \336le system will ask the volume manager to grow the) 85.75 608 P
-0.17 (underlying volume when the \336le system is getting full \050this is a low priority goal, not a require-) 85.75 594 P
0.31 (ment\051. It is not a requirement to allow on-line shrinking of a \336le system; it is a requirement to) 85.75 580 P
(allow of) 85.75 566 T
(f-line shrinking.) 125.17 566 T
3 F
(\245) 72 546 T
1 F
1.64 (Allow the separation of \336le system space between inodes and data to change on-line. This) 85.75 546 P
1.85 (implies dynamic allocation of the space for inodes as the only reasonable implementation.) 85.75 532 P
1.06 (Note that any mechanism which yields dif) 85.75 518 P
1.06 (ferent numbers of inodes in each allocation group) 294.43 518 P
(implies some sort of indexing scheme to \336nd the inodes.) 85.75 504 T
3 F
(\245) 72 484 T
1 F
-0.07 (It must be possible to attach an) 85.75 484 P
4 F
-0.07 (arbitrary attribute) 236.83 484 P
1 F
-0.07 ( to any object in the namespace. An arbitrary) 325.06 484 P
0.05 (attribute is a \050name, value\051 pair where the name is a printable string and the value is a smallish) 85.75 470 P
(string of arbitrary bytes.) 85.75 456 T
3 F
(\245) 72 436 T
1 F
0.21 (High throughput for \336le server and compute server applications. In particular) 85.75 436 P
0.21 (, the NFS perfor-) 457.43 436 P
2.06 (mance must make our system price/performance competitive. Compute server applications) 85.75 422 P
(need high single-\336le throughput.) 85.75 408 T
3 F
(\245) 72 388 T
1 F
0.41 (Extremely high throughput for video server applications. This means that sequential access to) 85.75 388 P
2.36 (lar) 85.75 374 P
2.36 (ge \336les must be very fast. This will be done via directives from the application about) 98.19 374 P
(required read/write performance rates.) 85.75 360 T
3 F
(\245) 72 340 T
1 F
0.56 (Fast, guaranteed response time for digital media and other real-time applications. In part, this) 85.75 340 P
0.05 (requirement will be met by providing portable interfaces for real-time programming de\336ned in) 85.75 326 P
(POSIX 1003.4; this includes preallocation of blocks to \336les.) 85.75 312 T
3 F
(\245) 72 292 T
1 F
0.18 (High throughput for random access to very lar) 85.75 292 P
0.18 (ge databases, via direct I/O and asynchronous I/) 308.94 292 P
(O. Such applications may elect to bypass the buf) 85.75 278 T
(fer cache and implement their own cacheing.) 319.05 278 T
3 F
(\245) 72 258 T
1 F
0.61 (Backup and HSM interfaces for Epoch and similar systems are supported. File migration and) 85.75 258 P
-0.03 (backup tools are supported or supplied by us. Backup tools allow full and incremental backups) 85.75 244 P
(in a reasonable length of time, even for systems with very lar) 85.75 230 T
(ge amounts of online storage.) 378.65 230 T
3 F
(\245) 72 210 T
1 F
0.82 (It must be possible to restore \336lesystems from backup media after a disaster) 85.75 210 P
0.82 (, in a reasonably) 458.92 210 P
0.72 (short amount of time. File restore must also allow selection of individual \336les to restore, and) 85.75 196 P
(must allow the backup media to be remote from the \336le system.) 85.75 182 T
3 F
(\245) 72 162 T
1 F
0.76 (Support low-power machines with the ability to turn of) 85.75 162 P
0.76 (f the disk drives when they are not in) 356.08 162 P
(use, and turn them on again when needed.) 85.75 148 T
2 F
(2.2.1.2 File system implementation) 72 116 T
3 F
(\245) 72 96 T
1 F
0.43 (The \336le system is implemented under vnodes, possibly extended from the current ones. Other) 85.75 96 P
0.88 (\336le systems \050excluding EFS\051 in IRIX continue to run with little or no implementation ef) 85.75 82 P
0.88 (fort.) 519.68 82 P
(EFS must continue to run, but may have impaired performance.) 85.75 68 T
FMENDPAGE
%%EndPage: "3" 4
%%Page: "4" 4
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(4) 500 42.62 T
3 12 Q
(\245) 72 712 T
1 F
-0.11 (File system is implemented as a journalled \336le system. This is implied by the requirement for a) 85.75 712 P
(small recovery time for lar) 85.75 698 T
(ge \336lesystems.) 213.43 698 T
3 F
(\245) 72 678 T
1 F
-0.06 (May be implemented using message passing and kernel threads. The former allows later distri-) 85.75 678 P
-0.09 (bution in a network, but costs some performance in the local case. The latter may allow greater) 85.75 664 P
(ease of implementation.) 85.75 650 T
3 F
(\245) 72 630 T
1 F
-0.19 (Implement so that a user) 85.75 630 P
-0.19 (-mode simulation of the \336le system is functional and usable for debug-) 202.66 630 P
(ging and performance modelling.) 85.75 616 T
3 F
(\245) 72 596 T
1 F
0.47 (Support lar) 85.75 596 P
0.47 (ge, sparse \336les using a B-tree as the index to the data blocks, replacing the current) 139.63 596 P
0.58 (direct and indirect blocks scheme. This makes the performance of these \336les acceptable. Any) 85.75 582 P
(equivalent index scheme will do as well.) 85.75 568 T
3 F
(\245) 72 548 T
1 F
1.89 (Delay allocation of user data blocks when possible to make blocks more contiguous. This) 85.75 548 P
0.67 (allows us to make extents lar) 85.75 534 P
0.67 (ge without requiring the user to specify extent size, and without) 227.81 534 P
(requiring a \336le system reor) 85.75 520 T
(ganizer to \336x the extent sizes up after the fact.) 214.78 520 T
3 F
(\245) 72 500 T
1 F
0.72 (Store symlinks and other small \336les in the inode when possible. By doing so, we save a disk) 85.75 500 P
(block and the time to read it.) 85.75 486 T
3 F
(\245) 72 466 T
1 F
0.89 (Support directories with some form of indexed structure, so that searches are faster for lar) 85.75 466 P
0.89 (ge) 528.68 466 P
(directories. Some form of B-tree will work.) 85.75 452 T
2 F
(2.2.2 V) 72 420 T
(olume Manager Requir) 109.54 420 T
(ements) 229.25 420 T
1 F
-0.25 (A volume manager is an integral part of the next generation \336le system. The volume manager pro-) 72 394 P
-0.19 (vides an operational interface to the system\325) 72 380 P
-0.19 (s disks and isolates the higher layers of the \336le system) 282.05 380 P
(from the details of the hardware.) 72 366 T
2 F
(2.2.2.1 V) 72 334 T
(olume manager functionality) 118.53 334 T
3 F
(\245) 72 314 T
1 F
0.4 (Auto-assembly of logical volumes. The volume manager will be able to assemble logical vol-) 85.75 314 P
(umes by scanning the hardware on the system and reading all the disk labels.) 85.75 300 T
3 F
(\245) 72 280 T
1 F
1.5 (Mirroring \050plexing\051 of storage. Flexibility is required, we do not want to require duplexing) 85.75 280 P
(entire disks, or limiting to two plexes.) 85.75 266 T
3 F
(\245) 72 246 T
1 F
(Disk striping. Required for performance on lar) 85.75 246 T
(ge systems.) 309.03 246 T
3 F
(\245) 72 226 T
1 F
0.44 (Concatenation of storage sections. Should be able to build arbitrarily lar) 85.75 226 P
0.44 (ge volumes, up to the) 435.32 226 P
(64 bit limit.) 85.75 212 T
3 F
(\245) 72 192 T
1 F
0.9 (On-line con\336guration changes. The volume manager will support the restructuring of logical) 85.75 192 P
0.04 (volumes \050e.g., adding a new plex, growing, shrinking\051, without requiring the volume to be dis-) 85.75 178 P
(mounted.) 85.75 164 T
3 F
(\245) 72 144 T
1 F
1.23 (Separate logging, data and unreliable sub-volumes. Logging sub-volumes are needed by the) 85.75 144 P
1.32 (\336le system. Unreliable sub-volumes are needed by multimedia \336le systems. Each should be) 85.75 130 P
(sized and or) 85.75 116 T
(ganized independently in its portion of the volume.) 143.49 116 T
3 F
(\245) 72 96 T
1 F
1.41 (High throughput for \336le server applications. The performance penalty for using the volume) 85.75 96 P
(manager should be vanishingly small in normal operation.) 85.75 82 T
FMENDPAGE
%%EndPage: "4" 5
%%Page: "5" 5
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(5) 500 42.62 T
3 12 Q
(\245) 72 712 T
1 F
0.42 (Support of RAID devices at their full performance. Implies lar) 85.75 712 P
0.42 (ge transfers generated from the) 389.11 712 P
(\336le system code, through the volume manager) 85.75 698 T
(, down to the RAID driver) 306.79 698 T
(.) 432.71 698 T
3 F
(\245) 72 678 T
1 F
0.94 (Support of RAID in software, as opposed to purely hardware RAID implementations, which) 85.75 678 P
(appear to the system as lar) 85.75 664 T
(ge disks.) 212.44 664 T
3 F
(\245) 72 644 T
1 F
(Fast, guaranteed response time for digital media and other real-time applications.) 85.75 644 T
3 F
(\245) 72 624 T
1 F
-0.16 (Support multiple logical sector sizes \050one per volume\051. This supports the equivalent \336le system) 85.75 624 P
(requirement.) 85.75 610 T
3 F
(\245) 72 590 T
1 F
-0.23 (The new and old volume managers \050lv) 85.75 590 P
-0.23 (, not V) 268.13 590 P
-0.23 (eritas\051 must be able to run in the same system. It is) 299.33 590 P
3.46 (not a requirement to run a V) 85.75 576 P
3.46 (eritas volume in the same system. This allows a gradual) 241.06 576 P
1.23 (changeover to the new \336le system and volume manager) 85.75 562 P
1.23 (, since the only way to convert data) 361.55 562 P
(from EFS to xFS is to dump and restore it.) 85.75 548 T
3 F
(\245) 72 528 T
1 F
0.54 (EFS and non \336le system applications must be able to run on top of the new volume manager) 85.75 528 P
0.54 (.) 537 528 P
(Ordinary driver interfaces must be presented to these clients, even if xFS doesn\325) 85.75 514 T
(t use them.) 470.25 514 T
3 F
(\245) 72 494 T
1 F
0.18 (Provide for future support of multiple-access \050dual-ported\051 disk controllers. Necessary for real) 85.75 494 P
(high-availability applications.) 85.75 480 T
3 F
(\245) 72 460 T
1 F
(Provide for future dynamic relocation of control for a volume. Necessary for high availability) 85.75 460 T
(.) 533.96 460 T
2 F
(2.2.2.2 V) 72 428 T
(olume manager implementation) 118.53 428 T
3 F
(\245) 72 408 T
1 F
1.68 (The volume manager will store all con\336guration data on the disk labels themselves. These) 85.75 408 P
1.29 (labels will be replicated so that a logical volume can be assembled even if some pieces are) 85.75 394 P
(missing.) 85.75 380 T
3 F
(\245) 72 360 T
1 F
0.23 (W) 85.75 360 P
0.23 (rite-logging \050on disk\051 of blocks that will be changed to reduce the need for plex copies after) 96.59 360 P
(a system restarts after a crash.) 85.75 346 T
3 F
(\245) 72 326 T
1 F
0.3 (Logging of written blocks \050in memory\051 when volume is incomplete. Necessary for high avail-) 85.75 326 P
(ability \050fast recovery from a disk failure\051.) 85.75 312 T
3 F
(\245) 72 292 T
1 F
-0.12 (A reduced functionality) 85.75 292 P
4 F
-0.12 (lightweight) 202.3 292 P
1 F
-0.12 (volume manager may be produced for smaller system con-) 259.16 292 P
-0.28 (\336gurations. This volume manager would support only concatenation, plexing, strping, and soft-) 85.75 278 P
2.57 (ware RAID. Disk media will be completely compatible between the full and lightweight) 85.75 264 P
(volume manager implementations.) 85.75 250 T
2 K
([Geof) 254.98 250 T
(f: what is left out?]) 282.73 250 T
2 F
0 K
(2.2.3 Buffer cache and virtual memory support) 72 218 T
3 F
(\245) 72 198 T
1 F
-0.09 (Need to be able to keep blocks from going to disk until prerequisite blocks have gone out. This) 85.75 198 P
(is required to ensure consistency in a journalled \336le system.) 85.75 184 T
2 14 Q
(2.3 Possible r) 72 150.67 T
(equir) 154.15 150.67 T
(ements) 185.77 150.67 T
3 12 Q
(\245) 72 130 T
1 F
-0.01 (Support DFS vnode interfaces. This will wait until we \336gure out what is happening with DFS.) 85.75 130 P
3 F
(\245) 72 110 T
1 F
0.56 (W) 85.75 110 P
0.56 (e may need to allow the user to ensure that their \336les are contiguous, implying that there is) 96.11 110 P
(some way to display layout information, and some way to make a \336le contiguous.) 85.75 96 T
3 F
(\245) 72 76 T
1 F
(W) 85.75 76 T
(e may need a \336le system reor) 96.11 76 T
(ganizer program, to improve \336le contiguity in the background.) 235.78 76 T
FMENDPAGE
%%EndPage: "5" 6
%%Page: "6" 6
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(6) 500 42.62 T
2 16 Q
(3.0 Design Overview) 72 709.33 T
2 14 Q
(3.1 xFS File System) 72 674.67 T
1 12 Q
0.45 (The xFS \336le system is a) 72 648 P
2 F
0.45 (journalled) 192.66 648 P
1 F
0.45 ( \336le system. This means that updates to \336le system metadata) 245.97 648 P
0.44 (\050inodes, directories, bitmaps, etc.\051 are written to a serial log area on disk before the original disk) 72 634 P
1.38 (blocks are updated in place. In the event of a crash, such operations can be redone or undone) 72 620 P
0.48 (using data present in the log, to restore the \336le system to a consistent state. This implementation) 72 606 P
0.31 (technique replaces the use of a \336le system check and repair program \050fsck\051 before mounting \336le-) 72 592 P
1 (systems that were active when a system crash occurred. Since a full \336le system check takes an) 72 578 P
-0.26 (amount of time proportional to the size of the \336le system, we must avoid it to meet our availability) 72 564 P
(goals. Therefore, we choose the logging mechanism for our implementation.) 72 550 T
2 14 Q
(3.2 xFS V) 72 516.67 T
(olume Manager) 132.12 516.67 T
1 12 Q
1.39 (The xFS volume manager \050also known as xlv\051 is intended to replace both the IRIS lv volume) 72 490 P
0.78 (manager and the V) 72 476 P
0.78 (eritas V) 163.93 476 P
0.78 (olume Manager products. Xlv creates an abstraction of a sequence of) 200.8 476 P
0.26 (logical disk blocks to be used by the xFS \336le system. The sequence of disk blocks can be assem-) 72 462 P
2.14 (bled by concatenating, plexing \050copying\051, and striping \050including RAID\051 across a number of) 72 448 P
(physical disk drives. Xlv ensures that plexed data is kept consistent across all plexes.) 72 434 T
2 14 Q
(3.3 xFS Gr) 72 400.67 T
(owth Path) 140.16 400.67 T
1 12 Q
0.13 (In the long run, we expect to add user) 72 374 P
0.13 (-level transactions to the \336le system, at which time selected) 253.67 374 P
-0.08 (user data will be logged along with the \336lesystem metadata. This feature will make it practical for) 72 360 P
0.4 (user applications to easily implement databases and database-like systems on top of this \336le sys-) 72 346 P
(tem.) 72 332 T
0.31 (The other major future change anticipated is that the \336le system will be distributed over multiple) 72 306 P
1.26 (computers \050referred to as nodes\051, connected by a fast local area network. This technology will) 72 292 P
0.8 (allow us to provide high availability to user data in the event of failure of a node. For instance,) 72 278 P
0.21 (nodes might share disk controllers via multiporting, where only one node at a time uses the disks) 72 264 P
-0.24 (attached to the controller) 72 250 P
-0.24 (. T) 190.18 250 P
-0.24 (o achieve consistent operation, the nodes must communicate with each) 202.43 250 P
(other) 72 236 T
(.) 95.99 236 T
0.14 (In order to achieve transparent high availability in such an environment, \336le system naming must) 72 210 P
0.29 (be location independent: a \336le\325) 72 196 P
0.29 (s name must be the same no matter where it is being named from,) 221.07 196 P
(or which machine has mounted the \336le system containing it.) 72 182 T
0.03 (The \336rst release will have neither the distributed capabilities nor transactions, but the architecture) 72 156 P
1 (is designed to accommodate both. The intent is to make future additions to the implementation) 72 142 P
(easier to do by putting a little more ef) 72 128 T
(fort in up front.) 252.33 128 T
FMENDPAGE
%%EndPage: "6" 7
%%Page: "7" 7
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(7) 500 42.62 T
2 16 Q
(4.0 The Big Pictur) 72 709.33 T
(e) 204.09 709.33 T
1 12 Q
(The following is the current architectural diagram for the xFS project.) 72 682 T
2 10 Q
(FIGURE 1. xFS Ar) 85.75 657.33 T
(chitectural Diagram) 167.74 657.33 T
1 12 Q
0.57 (The structure of xFS is similar to that of a conventional \336le system with the addition of the vol-) 72 294 P
0.12 (ume manager between the disk drivers and the \336le system code and the log manager) 72 280 P
0.12 (. The follow-) 476.8 280 P
(ing sections describe the functionality of each component in the architectural diagram.) 72 266 T
2 16 Q
(5.0 System Call and Vnode Interfaces) 72 225.33 T
1 12 Q
0.02 (The \336le system related calls are implemented here: read, write, open, ioctl, etc., for all \336le system) 72 198 P
0.17 (types. The operations are then vectored out to dif) 72 184 P
0.17 (ferent routines for each \336le system type through) 308.64 184 P
(the vnode interfaces.) 72 170 T
0.43 (Both 32-bit and 64-bit interfaces are supported, where those are supported by the underlying OS) 72 144 P
1.66 (and hardware. The semantics of 32-bit applications operating naively on \336les longer than 2) 72 130 P
1 10 Q
1.39 (32) 530.01 134.8 P
1 12 Q
(bytes are de\336ned in the paper \32264 Bit File Access\323.) 72 116 T
2.24 (The vnode interfaces also allow interoperation with remote clients such as NFS. In a future) 72 90 P
(release the vnode interface may be expanded to support DFS semantics.) 72 76 T
72 63 540 720 C
93 318 519 654 C
219 382.74 408 411.17 R
7 X
0 K
V
0.5 H
0 Z
0 X
N
318 573 408 573 408 465.17 381 465.17 381 546 318 546 6 Y
7 X
V
0 X
N
255 537.17 372 537.17 372 465.17 345 465.17 345 510.17 255 510.17 255 519.17 7 Y
7 X
V
0 X
N
255 501.17 336 501.17 336 465.17 255 465.17 4 Y
7 X
V
0 X
N
267 477 325.44 489.92 R
7 X
V
5 9 Q
0 X
(Log Manager) 267 482.92 T
267 477 325.44 489.92 R
7 X
N
219 420.17 408 458.86 R
V
0 X
N
291 429.17 349.32 442.94 R
7 X
V
0 X
(Buf) 291 435.94 T
(fer Cache) 304.33 435.94 T
291 429.17 349.32 442.94 R
7 X
N
282 390.17 368.22 402.17 R
V
0 X
(V) 282 395.17 T
(olume Manager) 287.5 395.17 T
282 390.17 368.22 402.17 R
7 X
N
426 509.72 480 546.17 R
V
426 509.72 480 546.17 R
0 X
N
259.1 339 368.44 375.45 R
7 X
V
0 X
N
286.5 351.17 340.5 363.17 R
7 X
V
0 X
(Disk Drivers) 286.5 355.17 T
286.5 351.17 340.5 363.17 R
7 X
N
135.17 382.74 164.33 600.17 R
V
0 X
N
146.21 389.32 159.75 587.03 R
7 X
V
0 X
(A) 146.21 535.03 T
(d) 146.21 512.03 T
(m) 146.21 489.03 T
(i) 146.21 466.03 T
(n) 146.21 443.03 T
146.21 389.32 159.75 587.03 R
7 X
N
213.81 405.03 218.99 402.01 213.79 399.03 213.8 402.03 4 Y
0 X
V
165 402.17 213.8 402.02 2 L
7 X
V
2 Z
0 X
N
213.8 504.17 219 501.17 213.8 498.17 213.8 501.17 4 Y
V
165 501.17 213.8 501.17 2 L
7 X
V
0 X
N
213.79 566.99 218.99 564.01 213.81 560.99 213.8 563.99 4 Y
V
165 563.83 213.8 563.98 2 L
7 X
V
0 X
N
99 321 513 645 R
3 H
0 Z
N
(Lock Mgr) 434.79 525.64 T
278.94 516.17 345 528.17 R
7 X
V
0 X
(Space Manager) 278.94 520.17 T
278.94 516.17 345 528.17 R
0.5 H
7 X
N
300 573.17 219 573.17 219 465.17 246 465.17 246 546.17 300 546.17 6 Y
V
0 X
N
228 552.17 282 564.17 R
7 X
V
0 X
(Attribute Mgr) 228 557.17 T
228 552.17 282 564.17 R
7 X
N
312 542.2 309 537 306 542.2 309 542.2 4 Y
0 X
V
309 600 309 542.2 2 L
7 X
V
2 Z
0 X
N
375 578.37 372 573.17 369 578.37 372 578.37 4 Y
V
372 600.17 372 578.37 2 L
7 X
V
0 X
N
267 578.37 264 573.17 261 578.37 264 578.37 4 Y
V
264 600.17 264 578.37 2 L
7 X
V
0 X
N
150 605.37 147 600.17 144 605.37 147 605.37 4 Y
V
219 618.17 147 618.17 147 605.37 3 L
N
456 551.37 453 546.17 450 551.37 453 551.37 4 Y
V
408 618.17 453 618.17 453 551.37 3 L
N
413.2 435.17 408 438.17 413.2 441.17 413.2 438.17 4 Y
V
453 510.17 453 438.17 413.2 438.17 3 L
N
348 578.37 345 573.17 342 578.37 345 578.37 4 Y
V
165 591 345 591 345 578.37 3 L
N
219 600 408 627 R
0 Z
N
237 606.66 390 618 R
7 X
V
0 X
(System Call and VNODE Interface) 237 611 T
237 606.66 390 618 R
7 X
N
249.8 486 255 483 249.8 480 249.8 483 4 Y
0 X
V
165 483 249.8 483 2 L
7 X
V
2 Z
0 X
N
249.8 531 255 528 249.8 525 249.8 528 4 Y
V
165 528 249.8 528 2 L
7 X
V
0 X
N
327 552 399 564 R
7 X
V
0 X
(NameSpace Mgr) 327 557 T
327 552 399 564 R
0 Z
7 X
N
72 63 540 720 C
0 0 612 792 C
FMENDPAGE
%%EndPage: "7" 8
%%Page: "8" 8
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(8) 500 42.62 T
1 12 Q
1.49 (When xFS is distributed, references to remote \336les will come through the vnode layer and be) 72 712 P
0.7 (turned into messages if the references cannot be satis\336ed locally) 72 698 P
0.7 (. On receipt of a distributed \336le) 385.59 698 P
0.37 (system request message, the node owning the \336le system will send a call through its vnode layer) 72 684 P
(to get data in and out of the \336le system.) 72 670 T
0 (There will be new system call and vnode operations to support Hierarchical Storage Management) 72 644 P
0.25 (\050HSM\051 and backup applications; these are currently being designed by an industry-wide working) 72 630 P
(group \050DMIG, Data Management Interfaces Group\051.) 72 616 T
1.24 (There will also be new system call and vnode operations to support extended attributes. There) 72 590 P
0.25 (may be a standard proposed for the system call interfaces for these soon, but in all likelihood not) 72 576 P
0.04 (before we must ship to customers. One possibility is that we will tell internal customers and ISVs) 72 562 P
0.38 (about the new interfaces, with the caveat that they will be replaced with POSIX-compliant inter-) 72 548 P
-0.23 (faces when those exist. Another possibility is that both sets of interfaces will be supported, one set) 72 534 P
(as a library built on the other set.) 72 520 T
2 16 Q
(6.0 Lock Manager) 72 479.33 T
1 12 Q
0.08 (The lock manager implements locking on user \336les \050fcntl and \337ock calls\051. For the \336rst release the) 72 452 P
0.67 (lock manager is identical to the current implementation. The performance in the non-distributed) 72 438 P
(case must be no worse than that of the current EFS implementation.) 72 424 T
1.36 (In the future, user transactions and distributed locking will be supported. These will cause the) 72 398 P
0.28 (lock manager implementation to expand in size and complexity) 72 384 P
0.28 (. A distributed two-phase commit) 377.96 384 P
0.31 (protocol will be implemented to allow transactions in the distributed system. Also, some form of) 72 370 P
(distributed deadlock detection will be implemented, possibly using timeouts.) 72 356 T
2 16 Q
(7.0 NameSpace Manager) 72 315.33 T
1 12 Q
1.13 (The namespace manager implements \336le system naming operations, translating pathnames into) 72 288 P
0.4 (\336le references. A \336le is identi\336ed internal to the \336le system by its \336le system and its inode num-) 72 274 P
0.5 (ber) 72 260 P
0.5 (. The inode is the on-disk structure which holds information about a \336le; the inode number is) 86.66 260 P
0.92 (the label \050or index\051 of the inode within the particular \336le system. Files are also identi\336ed inter-) 72 246 P
(nally by a numeric value unique to the \336le, called the \336le unique id.) 72 232 T
-0.04 (File systems may be identi\336ed either by a \322magic cookie\323, typically a memory address of the root) 72 206 P
0.46 (inode, or by a \336le system unique id. File system unique id\325) 72 192 P
0.46 (s are assigned when the \336le system is) 357.9 192 P
1.31 (created and are associated uniquely with that \336le system until the \336le system is destroyed. An) 72 178 P
0.14 (additional temporary unique id, the \336le system I/O unique id, is created whenever a \336le system is) 72 164 P
-0.04 (mounted, and is valid only for the duration of the mount. The \336le system I/O unique id is used for) 72 150 P
(dynamic recon\336guration in the distributed version of xFS.) 72 136 T
0.79 (The namespace manager manages the directory structures and the contents of the inode that are) 72 110 P
1.36 (unrelated to space management, such as \336le permissions and timestamps. Requests from other) 72 96 P
0.69 (systems via NFS come into the system with a) 72 82 P
4 F
0.69 (\336le handle) 299.05 82 P
1 F
0.69 ( which the namespace manager uses to) 350.04 82 P
0.55 (\336nd the inode. The) 72 68 P
0.55 (\336le handle) 167.82 68 P
0.55 (includes enough information to deduce the \336le system, the inode,) 222.22 68 P
FMENDPAGE
%%EndPage: "8" 9
%%Page: "9" 9
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(9) 500 42.62 T
1 12 Q
-0.15 (and which version of the \336le is meant \050inodes may be reused\051. Requests from other nodes in a dis-) 72 712 P
1.14 (tributed xFS \336le system would enter with a \336le system unique id and inode number) 72 698 P
1.14 (, and a \336le) 486.61 698 P
(unique id, and be validated at this level \050to see that the two forms of identi\336cation match\051.) 72 684 T
1.49 (The namespace manager may have a cache to speed up naming operations. The details of the) 72 658 P
(name translation are hidden from the callers.) 72 644 T
1.58 (In the distributed system, we have yet to decide whether the distributed nature of the naming) 72 618 P
0.99 (should be transparent \050single system view\051 or visible \050multiple system view\051. \050Indeed, dif) 72 604 P
0.99 (ferent) 512.03 604 P
-0.05 (sites may prefer one model over the other) 72 590 P
-0.05 (, or some customer might even want both models within) 270.65 590 P
0.17 (a single installation.\051 The issue is whether or not it is necessary to know what machine is manag-) 72 576 P
0.96 (ing a \336le system to name a \336le within the \336le system. If the machine name is embedded in the) 72 562 P
0.38 (pathname \050as in DFS, for example\051 then the machine controlling access to the \336le system cannot) 72 548 P
-0.19 (change without clients being aware of the change. If the machine name is not in the pathname, but) 72 534 P
1.04 (rather the \336le system can move easily from machine to machine, and the \336le system name and) 72 520 P
0.17 (location is broadcast when it moves, then this can change without knowledge of user or user pro-) 72 506 P
(grams.) 72 492 T
0.02 (The current design of the namespace manager) 72 466 P
0.02 (\325) 293.02 466 P
0.02 (s mount semantics have a \336le system node called a) 296.35 466 P
4 F
1.92 (mount point) 72 452 P
1 F
1.92 ( which replaces the empty-directory mount points of the current \336le system. The) 131.56 452 P
0.33 (mount point node contains a \336le system unique id. When a mount point which refers to a remote) 72 438 P
1.04 (\336le system is encountered during a naming operation, a message is sent to the remote machine) 72 424 P
0.18 (which is managing the \336le system with that \336le system unique id, along with the naming request,) 72 410 P
(to complete the operation.) 72 396 T
1.11 (It is possible that alternate or extended naming schemes may be implemented in user mode by) 72 370 P
0.02 (allowing the entity at the other end of the message queue to be a program. This will not be imple-) 72 356 P
(mented in the \336rst release of the system.) 72 342 T
2 16 Q
(8.0 Attribute Manager) 72 301.33 T
1 12 Q
-0.12 (The attribute manager implements \336le system attribute operations: storing and retrieving arbitrary) 72 274 P
0.93 (user) 72 260 P
0.93 (-de\336ned attributes associated with objects in the namespace. Arbitrary attributes are \050name,) 91.74 260 P
1.22 (value\051 pairs where the name is a printable string and the value is a smallish string of arbitrary) 72 246 P
0.96 (bytes. Attributes may be controlled either by user applications or by the kernel \050ACLs, T) 72 232 P
0.96 (rusted) 510.69 232 P
0.14 (IRIX attributes\051. Certain attributes are pre-de\336ned by the system and may be accessed using both) 72 218 P
0.19 (existing UNIX interfaces and the new attribute access system calls. \050For example: \336le access and) 72 204 P
3 (modi\336cation times.\051 The system call interfaces for controlling attributes have not yet been) 72 190 P
(de\336ned.) 72 176 T
0.17 (An attribute is stored internally by attaching it to the inode of the referenced object. The attribute) 72 150 P
0.74 (manager manages the attribute structures that are associated with inodes. However) 72 136 P
0.74 (, the attribute) 474.9 136 P
0.4 (manager does not manage those \336elds which are handled by the namespace manager such as \336le) 72 122 P
(permissions and timestamps.) 72 108 T
0.87 (No storage for arbitrary attributes is allocated when an object is created, and any attributes that) 72 82 P
0.05 (exist when an object is destroyed are destroyed as well. Attributes are not shared between inodes.) 72 68 P
FMENDPAGE
%%EndPage: "9" 10
%%Page: "10" 10
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(10) 496 42.62 T
1 12 Q
2.13 (Access control lists are handled as a special case of attributes; these can be shared between) 72 712 P
0.58 (inodes. There will be no method faster than the equivalent of a) 72 698 P
6 F
0.58 (\336nd) 382.38 698 P
1 F
0.58 ( to locate all the objects in a) 401.71 698 P
(\336lesystem that have certain attributes or attribute values.) 72 684 T
-0.16 (Some system utility programs will be modi\336ed to know about attributes, for example) 72 658 P
6 F
-0.16 (cp) 481.02 658 P
1 F
-0.16 ( will copy) 492.35 658 P
1.23 (selected attributes of a \336le when it copies the \336le. The system backup utility will back up and) 72 644 P
(restore the attributes of an object when that object is backed up or restored.) 72 630 T
-0.05 (Standard NFS does not support attributes beyond the traditional UNIX set, so these attributes will) 72 604 P
0.77 (not be visible in any way to a client that is accessing an xFS \336lesystem via standard NFS. NFS) 72 590 P
(mounted \336le systems will continue to operate as if this feature did not exist.) 72 576 T
0.53 (SGI has an extended version of the NFS protocol that it can speak with other SGI systems. This) 72 550 P
0.82 (version may be extended to know about attributes if the distributed system implementation will) 72 536 P
(not be ready in time for the majority of customers of attributes.) 72 522 T
0.69 (For the distributed system case, using the xFS internal protocols, attributes will be accessible in) 72 496 P
1.87 (just the same way that other \336lesystem objects are accessible. There should be no dif) 72 482 P
1.87 (ference) 504.71 482 P
0.26 (between accessing attributes on an object that is managed locally from accessing attributes on an) 72 468 P
(object that is managed remotely) 72 454 T
(.) 224.45 454 T
2 16 Q
(9.0 Space Manager) 72 413.33 T
1 12 Q
0.08 (The space manager manages the allocation of disk space within a \336le system. It is responsible for) 72 386 P
0.45 (mapping a \336le \050a sequence of bytes\051 into a sequence of disk blocks. The internal structure of the) 72 372 P
0.41 (\336le system - allocation \050cylinder\051 groups, inodes, and free space management - are controlled by) 72 358 P
(the space manager) 72 344 T
(, as well as the above mapping function.) 160.1 344 T
0.81 (The space layout choices in the design are in\337uenced by the requirements to support very lar) 72 318 P
0.81 (ge) 528.68 318 P
-0.16 (\336les and \336le systems ef) 72 304 P
-0.16 (\336ciently) 183.08 304 P
-0.16 (, including the possibility of sparse 64 bit \336les. The space manager) 221.62 304 P
0.23 (is also responsible for optimizing the layout of blocks in a \336le to avoid seeking during sequential) 72 290 P
-0.14 (processing, and keeping related \336les \050those in the same directory\051 close to each other on the disks.) 72 276 P
1.42 (Each \336le system is divided into log, metadata, data, and real-time sub-volumes. Normally) 72 250 P
1.42 (, the) 517.93 250 P
1.02 (data sub-volume and the real-time sub-volume do not exist. If the data sub-volume exists, then) 72 236 P
0.09 (ordinary user data is stored in it, otherwise in the metadata sub-volume. Data blocks for real-time) 72 222 P
1.48 (\336les are stored in the real-time sub-volume, if it exists, otherwise in the data sub-volume if it) 72 208 P
0.69 (exists, otherwise in the metadata sub-volume. All \336le system data is stored in the log and meta-) 72 194 P
(data sub-volumes.) 72 180 T
0.05 (The space manager divides each \336le system metadata and data sub-volume into a number of) 72 154 P
4 F
0.05 (allo-) 517.34 154 P
0.54 (cation gr) 72 140 P
0.54 (oups) 115.74 140 P
1 F
0.54 (. When the data sub-volume exists, the allocation group contains blocks from both) 138.4 140 P
1.43 (the metadata and data sub-volumes. Each allocation group has a collection of inodes and data) 72 126 P
0.41 (blocks, and data structures to control their allocation. The blocks containing inodes are allocated) 72 112 P
0.64 (dynamically from the data block pool, to permit more ef) 72 98 P
0.64 (\336cient use of disk space. Knowledge of) 347.32 98 P
0.21 (the location of the sequence of inode blocks for an allocation group is kept the same way it is for) 72 84 P
(ordinary \336les \050in a B-tree\051.) 72 70 T
FMENDPAGE
%%EndPage: "10" 11
%%Page: "11" 11
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(1) 496.44 42.62 T
(1) 500 42.62 T
1 12 Q
-0.07 (Free blocks in an allocation group are kept track of via one of two schemes. The \336rst scheme uses) 72 712 P
1.09 (a bitmap and a set of counters or) 72 698 P
1.09 (ganized by starting bitmap block and the log) 235.6 698 P
1 10 Q
0.9 (2) 456.73 695 P
1 12 Q
1.09 ( size of the free) 461.73 698 P
0.13 (extent. The second scheme uses a pair of B-trees, one indexed by size of the free extent \050and sec-) 72 684 P
1.44 (ondarily by the starting block\051, the other indexed by the starting block of the free extent. The) 72 670 P
0.03 (scheme to be used will be chosen later) 72 656 P
0.03 (, after both methods have been prototyped and their perfor-) 255.94 656 P
(mance analyzed.) 72 642 T
1.26 (The real-time sub-volume is divided into a number of \336xed-size extents. The size is chosen at) 72 616 P
2 F
0.09 (mkfs) 72 602 P
1 F
0.09 ( time; it is expected to be lar) 97.32 602 P
0.09 (ge \050say on the order of 1MByte\051. The size does not have to be a) 233.98 602 P
0.4 (power of two, just a multiple of the \336le system block size; it should be the ideal I/O size for that) 72 588 P
0.22 (volume con\336guration, or a multiple of it. A single extent in the metadata sub-volume contains an) 72 574 P
1.03 (allocation bitmap for the real-time sub-volume extents; another extent contains summary infor-) 72 560 P
0.71 (mation per bitmap block \050number of free extents\051. This alternate method of allocation is chosen) 72 546 P
0.31 (for the real-time sub-volume due to the improved performance possible because of the \336xed-size) 72 532 P
(extents.) 72 518 T
0.53 (Storage for \336les is represented in one of three ways, depending on the size and contiguity of the) 72 492 P
0.1 (\336le. For small \336les, the data in the \336le is stored in the inode. For medium \336les, the inode contains) 72 478 P
-0.23 (pointers to extents containing the \336le data. For lar) 72 464 P
-0.23 (ge \336les, the inode contains the root block of a B-) 308.79 464 P
0.37 (tree indexed by logical position in the \336le, where the records point to disk extents containing the) 72 450 P
1.34 (\336le data. This storage structure allows for lar) 72 436 P
1.34 (ge fragmented and lar) 296.34 436 P
1.34 (ge sparse \336les to be imple-) 405.05 436 P
(mented ef) 72 422 T
(\336ciently) 119.41 422 T
(, at the cost of some overhead to manage the B-tree indices.) 157.95 422 T
-0.29 (An active \336le system may be extended by adding more space to the underlying volume. This oper-) 72 396 P
0.49 (ation is supported on-line by the space manager) 72 382 P
0.49 (, which receives a request to expand the \336le sys-) 303.78 382 P
(tem and updates on-disk and in-memory structures to implement it.) 72 368 T
0.93 (In a future implementation it may be required to support splitting the control of space manage-) 72 342 P
0.31 (ment in a single \336le system over multiple nodes of the system. There will be no ef) 72 328 P
0.31 (fort in the \336rst) 470.12 328 P
(implementation to take this into account.) 72 314 T
2 16 Q
(10.0 Log Manager) 72 273.33 T
1 12 Q
-0.22 (All changes to \336le system metadata \050inodes, directories, bitmaps, etc.\051 are serially logged to a sep-) 72 246 P
-0.17 (arate area of the disk space. There is a separate log for each \336le system. The log allows fast recon-) 72 232 P
2.79 (struction of a consistent and correct \336le system \050recovery\051 if a crash intervenes before the) 72 218 P
0.07 (metadata blocks are written to disk. The log space is allocated independently from the \336le system) 72 204 P
0.14 (space for safety; this separation is managed by the underlying volume manager) 72 190 P
0.14 (. The log manager) 452.3 190 P
0.31 (utilizes information provided by the space manager to control the sequencing of write operations) 72 176 P
0.17 (from the buf) 72 162 P
0.17 (fer cache, since speci\336c log writes must be sequenced before or after data operations) 132.09 162 P
(for correctness if there is a crash.) 72 148 T
0.14 (The space and name manager subsystems send logging requests to the log manager) 72 122 P
0.14 (. Each request) 472.11 122 P
1.18 (may \336ll a partial log block or multiple blocks of the log. The log is implemented as a circular) 72 108 P
1.13 (sequential list which wraps when writes reach the end. Each log entry contains a log sequence) 72 94 P
0.27 (number) 72 80 P
0.27 (, so that the end of the log may be found by looking for the highest sequence number) 108.16 80 P
0.27 (. On) 519.08 80 P
FMENDPAGE
%%EndPage: "11" 12
%%Page: "12" 12
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(12) 496 42.62 T
1 12 Q
1.12 (plexed volumes, the buf) 72 712 P
1.12 (fer cache is also responsible for inserting log records for non-metadata) 190.4 712 P
0.7 (blocks, so that the volume manager) 72 698 P
0.7 (\325) 245.82 698 P
0.7 (s write-change log does not need to be used by the \336le sys-) 249.15 698 P
0.65 (tem. This allows the system to keep the plexes of a volume synchronized with each other in the) 72 684 P
(event of a crash between writes.) 72 670 T
0.16 (After a crash, the log must be recovered before the \336le system can be used. Operations which are) 72 644 P
0.49 (recorded and are complete in the log but are not yet stored in the data area of the \336le system are) 72 630 P
0.35 (re-done so that the \336le system data re\337ects a correct and consistent state. The log manager) 72 616 P
0.35 (\325) 510 616 P
0.35 (s role) 513.34 616 P
0.14 (in this is to identify the log records and to call other pieces of the \336le system to perform recovery) 72 602 P
(operations.) 72 588 T
0.95 (Log operations are blocked together to get higher throughput on the log portion of the volume.) 72 562 P
0.46 (The block is called a log record. T) 72 548 P
0.46 (ypically) 238.95 548 P
0.46 (, log records are written asynchronously; the log man-) 276.81 548 P
0.83 (ager can be directed by higher levels of the system to force writing of the current log record as) 72 534 P
(soon as possible. A given log write cannot be started until the previous one \336nishes.) 72 520 T
2 16 Q
(1) 72 479.33 T
(1.0 Buffer Cache) 79.12 479.33 T
1 12 Q
0.38 (The buf) 72 452 P
0.38 (fer cache is a cache of disk blocks for the various \336le systems local to a machine \050node\051.) 109.8 452 P
1.15 (Read requests may be satis\336ed from the buf) 72 438 P
1.15 (fer cache; write requests may write into the cache.) 290.01 438 P
0.38 (Cache entries are \337ushed when new entries are needed, in an order which takes into account fre-) 72 424 P
0.16 (quency \050or recency\051 of use, and \336le system semantics. File system metadata as well as \336le data is) 72 410 P
-0.14 (stored in the buf) 72 396 P
-0.14 (fer cache. User requests may bypass the cache by setting \337ags \050O_DIRECT\051; oth-) 149.65 396 P
(erwise all \336le system I/O goes through the cache.) 72 382 T
1.39 (The current buf) 72 356 P
1.39 (fer cache interfaces will be extended in two ways. First, 64-bit versions of the) 149.17 356 P
0.59 (interfaces will be added to support xFS\325) 72 342 P
0.59 (s 64-bit \336le sizes. Second, a transaction mechanism will) 266.77 342 P
0.76 (be provided. This will allow buf) 72 328 P
0.76 (fer cache clients to collect and modify buf) 230.17 328 P
0.76 (fers during an opera-) 437.47 328 P
0.21 (tion, send the changed buf) 72 314 P
0.21 (fers to the log manager) 198.85 314 P
0.21 (, and release all the buf) 309.77 314 P
0.21 (fers after successful log-) 421.82 314 P
(ging.) 72 300 T
-0.09 (In the future distributed system, a buf) 72 274 P
-0.09 (fer cache will hold data for \336lesystems remote to a machine.) 251.46 274 P
2 16 Q
(12.0 Guaranteed Rate I/O) 72 233.33 T
1 12 Q
-0.24 (xFS will support digital media applications with a guaranteed rate I/O mechanism. This will allow) 72 206 P
0.75 (applications to specify \322real-time\323 guarantees for the rate at which they can read or write a \336le.) 72 192 P
-0.07 (The application will specify a rate of X bytes per Y seconds for a given \336le, possibly beginning at) 72 178 P
0 (some future time, and the \336le system will reserve the bandwidth of all underlying devices to meet) 72 164 P
-0.21 (the requested guarantee. If the bandwidth is not available the application\325) 72 150 P
-0.21 (s request will be refused.) 421.28 150 P
0.04 (Note that this mechanism is device and topology independent; it can, for example, be extended to) 72 136 P
(a distributed system with no change to application code.) 72 122 T
0.8 (The only new interface to the user will be that used to make a bandwidth reservation. This will) 72 96 P
0.56 (take the form of a new ioctl\050\051 call on a \336le or a new system call. All data accesses will be made) 72 82 P
(with standard read\050\051 and write\050\051 system calls.) 72 68 T
FMENDPAGE
%%EndPage: "12" 13
%%Page: "13" 13
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(13) 496 42.62 T
1 12 Q
0.08 (Guaranteed rate I/O will have very little impact on the buf) 72 712 P
0.08 (fer cache, because programs which uti-) 351.75 712 P
-0.02 (lize this mechanism will typically be required to use direct I/O and will thus completely avoid the) 72 698 P
0.08 (buf) 72 684 P
0.08 (fer cache. It will, however) 87.77 684 P
0.08 (, have an impact on the disk drivers. These must be modi\336ed to rec-) 213.5 684 P
0.08 (ognize guaranteed rate requests and to schedule them in a real time manner) 72 670 P
0.08 (. The disk and volume) 432.73 670 P
1.2 (drivers will also be required to export an interface for acquiring their response time and band-) 72 656 P
(width characteristics for use by the reservation scheduling module.) 72 642 T
0.04 (The knowledge of what bandwidth is available for reservation will most likely be pushed out into) 72 616 P
0.23 (a user level reservation scheduling daemon. The daemon will have knowledge of the characteris-) 72 602 P
0.04 (tics and con\336guration of the disks and volumes on the system \050including backplane and SCSI bus) 72 588 P
-0.04 (throughput\051, and it will be the responsibility of this daemon to track both current and future band-) 72 574 P
(width reservations.) 72 560 T
2 16 Q
(13.0 V) 72 519.33 T
(olume Manager) 122.05 519.33 T
1 12 Q
1.13 (W) 72 492 P
1.13 (ithin each logical volume, the volume manager implements multiple sub-volumes, which are) 82.84 492 P
1.94 (separate linear address spaces of disk blocks in which the \336le system stores its data and log) 72 478 P
-0.12 (blocks. Each subvolume is made of) 72 464 P
4 F
-0.12 (partitions) 244.16 464 P
1 F
-0.12 ( \050real, physical regions of disk blocks\051 composed by) 290.81 464 P
-0.03 (concatenation, plexing \050copying\051, and striping. The volume manager is responsible for translating) 72 450 P
0.91 (logical addresses in the linear address spaces into real disk addresses. Where there are multiple) 72 436 P
0.48 (copies of a logical block \050plexing\051, the volume manager writes to) 72 422 P
4 F
0.48 (all) 393.05 422 P
1 F
0.48 ( copies, and reads from) 405.71 422 P
4 F
0.48 (any) 522.68 422 P
1 F
2.08 (copy \050since all copies are identical\051. The volume manager is responsible for maintaining the) 72 408 P
0.62 (equality of plexes across crashes and both temporary and permanent disk failures. In future sys-) 72 394 P
1.35 (tems, volumes will be spread across nodes of the system and will be accessible from multiple) 72 380 P
(nodes.) 72 366 T
-0.1 (A volume used for \336le system operations is composed of at least two subvolumes, one for log and) 72 340 P
0.75 (one for data. Each subvolume consists of a number of plexes. Plexes are individually or) 72 326 P
0.75 (ganized) 502.7 326 P
1.15 (and map dif) 72 312 P
1.15 (ferent portions of the subvolume\325) 131.37 312 P
1.15 (s address space. A plex consists of a sequence of) 295.86 312 P
0.48 (volume elements each of which maps a portion of the plex\325) 72 298 P
0.48 (s address space. V) 360.62 298 P
0.48 (olume element can) 448.44 298 P
(then be striped across a number of disk partitions.) 72 284 T
0.34 (T) 72 258 P
0.34 (o support plexing on non-xFS volumes, the volume manager will maintain an on-disk write log) 78.49 258 P
0.58 (to keep track of changed blocks. This allows the volume manager to synchronize the data on all) 72 244 P
0.51 (the plexes without copying the full contents of the plex. When the volume manager is providing) 72 230 P
-0.29 (plexing support for an xFS \336le system, the volume manager interfaces will allow the \336le system to) 72 216 P
(do the write logging.) 72 202 T
2 16 Q
(14.0 Disk Drivers) 72 161.33 T
1 12 Q
1.36 (Disk drivers are the same as in traditional and current IRIX systems, except for ordering con-) 72 134 P
0.01 (straints needed by the log and volume managers and rate guarantees. In particular) 72 120 P
0.01 (, it must be pos-) 463 120 P
0.67 (sible for the volume manager to be certain that a write request has actually been completed, not) 72 106 P
0.21 (merely cached for later writing. It should also be possible for the volume manager to specify that) 72 92 P
0.21 (a given write not be reordered - that all blocks passed to the driver before this block will be writ-) 72 78 P
FMENDPAGE
%%EndPage: "13" 14
%%Page: "14" 14
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(14) 496 42.62 T
1 12 Q
0.26 (ten before this block is written, and all blocks passed to the driver after this block will be written) 72 712 P
0.75 (after this block. \050If non-ordered writes are not available on a particular driver) 72 698 P
0.75 (, the volume man-) 450.49 698 P
(ager can synthesize this behavior by waiting for completion, but this is much less ef) 72 684 T
(\336cient.\051) 473.85 684 T
2 16 Q
(15.0 Administration) 72 643.33 T
1 12 Q
0.33 (xFS administration includes the utilities needed to create and maintain volumes and \336le systems.) 72 616 P
-0.11 (It also includes programmatic interfaces for volume control, \336le system control \050mount, unmount,) 72 602 P
0.56 (etc.\051, backup and restore, hierarchical \336le systems, etc. In the future, administration support will) 72 588 P
1.97 (be expanded to allow remote access to volumes and \336le systems, for mounting, backup, etc.) 72 574 P
1.31 (Graphical interfaces will be provided by the system administration group in MSD for the new) 72 560 P
(tools that need it, i.e. volume administration.) 72 546 T
2 16 Q
(16.0 Thr) 72 505.33 T
(eads, Messages, Memory Allocation \050Kernel Services\051) 138.35 505.33 T
1 12 Q
0.41 (The project will make use of new kernel services at some point, not necessarily in the \336rst \050non-) 72 478 P
0.21 (distributed\051 release. The underlying communication between certain modules will be by message) 72 464 P
0.23 (passing in the remote cases in the future implementation, otherwise by ordinary procedural inter-) 72 450 P
1.18 (faces. The implementation will be based on kernel threads to increase parallelism. The threads) 72 436 P
0.33 (will pass messages to each other through message queues. There may also be memory allocation) 72 422 P
0 (enhancements to support the \336le system and its messages. None of this will be present in the \336rst,) 72 408 P
(non-distributed, release.) 72 394 T
2 16 Q
(17.0 Inter) 72 353.33 T
(-module Communication) 146.02 353.33 T
1 12 Q
1.12 (Communication between major xFS modules will be done by messages where that gives us an) 72 326 P
0.08 (advantage. This will happen either if the sender is remote, in a distributed system, or if additional) 72 312 P
0.17 (performance \050parallelism\051 can be gained by using messages. W) 72 298 P
0.17 (e expect to use messages from the) 375.79 298 P
0.38 (vnode layer to the \336le system implementation layers in the distributed cases, and procedure calls) 72 284 P
0.58 (in the local cases. Disk drivers do not need a message interface; the volume managers can com-) 72 270 P
-0.22 (municate with each other) 72 256 P
-0.22 (. Administrative interfaces must all be message-based so that administra-) 191.58 256 P
1 (tive utilities can be run remotely to the administered object. The log manager interfaces do not) 72 242 P
0.74 (need to be message-based, as log accesses are never remote. The name manager needs message) 72 228 P
-0.28 (interfaces to deal with mount points for remote \336le systems encountered during pathname parsing.) 72 214 P
-0.25 (Communication is addressed to a message queue, identi\336ed either by a unique id or by an address;) 72 188 P
1.03 (the address is allowed only in the case where the queue is known to be local. The unique id is) 72 174 P
0.34 (associated with the queue when it is created. A message queue may be serviced by one thread or) 72 160 P
2.6 (by several threads. The message-passing routines are simple synchronous and asynchronous) 72 146 P
0.62 (queueing routines. For the remote case we will need to implement a communication manager to) 72 132 P
-0.02 (identify the machines associated with each unique id, and to packetize and transmit the messages.) 72 118 P
0.02 (In the local case this module is a simple routine that handles the translation of unique id\325) 72 104 P
0.02 (s to mes-) 496.66 104 P
(sage queue addresses, and queues the message appropriately) 72 90 T
(.) 360.98 90 T
FMENDPAGE
%%EndPage: "14" 15
%%Page: "15" 15
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(xFS Pr) 72 42.62 T
(oject Ar) 94.61 42.62 T
(chitectur) 122.07 42.62 T
(e) 153.03 42.62 T
(October 8, 1993) 260.9 42.62 T
(15) 496 42.62 T
1 12 Q
-0.15 (Proper assignment of unique id\325) 72 712 P
-0.15 (s, whereby the non-timestamp portion of the unique id is adminis-) 224.65 712 P
0.88 (tered in a rational way) 72 698 P
0.88 (, will mean that the administration tasks will scale. The goal is to have a) 181.97 698 P
0 (unique id space that can be interpreted correctly over a wide area network, so that \336lesystems can) 72 684 P
(be mounted and accessed from very remote systems.) 72 670 T
FMENDPAGE
%%EndPage: "15" 16
%%Trailer
%%BoundingBox: 0 0 612 792
%%Pages: 15 1
%%DocumentFonts: Palatino-Roman
%%+ Times-Roman
%%+ Times-Bold
%%+ Courier-Bold
%%+ Times-Italic
%%+ Helvetica
%%+ Times-BoldItalic