%!PS-Adobe-2.0 %%Title: %%Creator: FrameMaker %%CreationDate: Mon Jul 27 16:37:46 1992 %%For: dpj %%DocumentFonts: (atend) %%Pages: (atend) 1 %%BoundingBox: (atend) %%DocumentPaperSizes: Letter %%Orientation: Portrait %%EndComments %%BeginDocument: /usr/lib/NextStep/printPackage.ps %!PS-Adobe-2.0 %%Title: Printing Package %%EndComments %Version: 2.0 %Copyright: 1988, NeXT, Inc. /__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 %%EndDocument /FMwantcolorprinting false def %- %- FrameMaker Postscript Prolog 3.0, for use with FrameMaker 3.0 %- Copyright (c) 1986, 87, 88, 89, 90, 91 by Frame Technology, Inc. %- All rights reserved. %- %- /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/orgmatrix matrix def /savematrix{orgmatrix currentmatrix pop}bind def/restorematrix{orgmatrix setmatrix}bind 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/L/lineto load def/M/moveto load def/D/curveto load def/C /closepath load def/T{moveto show}bind 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/CR{initclip newpath 4 2 roll M dup 0 exch rlineto exch 0 rlineto 0 exch neg rlineto C clip newpath}bind 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/FrameDict 250 dict def/FMBEGINPAGE{FrameDict begin}def/FMENDPAGE{end}def/FMLOCAL{ FrameDict begin 0 def end}def FrameDict begin/NaN 0 def/gstring 0 def/gfile 0 def/gindex 0 def/orgxfer 0 def/yscale 0 def/xscale 0 def/FMPrintInColor systemdict/colorimage known systemdict/currentcolortransfer known or FMwantcolorprinting and def FMPrintInColor{/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 /KT/K load 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/KT/pop load def}ifelse/G{/savedgray exch def savedgray mysetgray}def/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/FmEncoding[/.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/FmEncode{/basefontdict exch def/newfontdict basefontdict maxlength 3 add dict def basefontdict{exch dup/FID ne{dup/Encoding eq{exch pop FmEncoding}{exch}ifelse newfontdict 3 1 roll put}{pop pop}ifelse}forall newfontdict}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/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/replbox{M dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto C currentgray .5 setgray fill setgray pop pop}def /graybox{currentgray 5 1 roll .6666666 setgray rectfill setgray}bind def /darkgraybox{currentgray 5 1 roll .333333 setgray rectfill setgray}bind 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 begin Encoding StandardEncoding eq/NextStepEncoding where{pop Encoding NextStepEncoding eq or}if end{ myfontdict FmEncode/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/mymakefontmetric{/BitmapWidths exch 0 eq def mymakefont}def /FF{myfonts exch get setfont}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/showpage{}def 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 /FMdicttop countdictstack 1 add def/FMoptop count def 200 dict begin/showpage {}def/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 destWidth flip{neg}if destHeight scale w h bps[w 0 0 h 0 h]{currentfile buffer readhexstring pop}bind image GR}def/inch{72 mul}def/paperheight 0 def /paperwidth 0 def/pagedimen{paperheight sub abs 16 lt exch paperwidth sub abs 16 lt and{/papername exch def}{pop}ifelse}def/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/manualfeed false def /FmHorrible{4 dict begin/execuserobject{pop}def/undefineuserobject{pop}def /termwindow{}def/currentgstate{null}def}def/FmEndHorrible{end}def end /FmConfigurePaper{FrameDict begin pop pop/paperheight exch def/paperwidth exch def setpapername manualfeed{true}{papersize}ifelse{manualpapersize}{false} ifelse{desperatepapersize}if end}def/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 <0f1e3c78f0e1c387> (I2107fc) 8 makecontextpattern <0f87c3e1f0783c1e> (I2108a0) 9 makecontextpattern (I2108bc) 10 makecontextpattern (I2108d8) 11 makecontextpattern <8142241818244281> (I2108f4) 12 makecontextpattern <03060c183060c081> (I210910) 13 makecontextpattern <8040201008040201> (I21092c) 14 makecontextpattern gsave /__NXbasematrix matrix currentmatrix def grestore %%EndProlog %%BeginSetup %%PaperSize: Letter %%Feature: *ManualFeed False %%BeginPaperSize: Letter 612 792 (Letter) false FmConfigurePaper %%EndPaperSize %%EndSetup %%Page: 1 1 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 2 SL 3.86 setmiterlimit 0 SC 0 G 433.01 36 M 71.42 36 L S 0.5 SL 2 SC 433.01 718.7 M 71.42 718.7 L S 0 0 612 792 CR 1 G 71.424072 107.136108 359.928009 504.432495 NF 0 G 0 (Times-Bold) 30 1 mymakefontmetric 0 FF (Mach 3 Ser) 71.424 127.136 T (v) 217.764 127.136 T (er Writer\325) 232.464 127.136 T (s ) 363.774 127.136 T (Guide) 71.424 163.136 T 1 (Times-Bold) 18 1 mymakefontmetric 1 FF (Open Softwar) 71.424 261.16 T (e F) 178.596 261.16 T (oundation and Car) 201.637 261.16 T (negie ) 347.401 261.16 T (Mellon Uni) 71.424 281.16 T (v) 157.752 281.16 T (ersity) 166.572 281.16 T (K) 71.424 478.752 T (eith Loeper) 84.978 478.752 T (e, Editor) 173.143 478.752 T 71.424072 173.135925 351 30.024002 CR 1 G 71.424072 173.135925 351 30.024002 NF 0 G 377.42 194.16 M 71.42 194.16 L S 71.424072 287.159851 348.47998 167.592606 CR 1 G 71.424072 287.159851 348.47998 167.592606 NF 71.424072 539.568604 150.120361 72 CR 71.424072 539.568604 150.120361 72 NF 0 G 139.02 573.28 M 139.02 601.56 L 114.71 601.56 L 111.24 598.03 L 111.24 573.28 L F 1 SL 0 SC 139.02 573.28 M 139.02 601.56 L 114.71 601.56 L 111.24 598.03 L 111.24 573.28 L CS 1 K 1 G 2 (Helvetica-BoldOblique) 36 1 mymakefontmetric 2 FF (S) 105.218 603.11 T 0 G 0 K 172.81 573.28 M 172.81 601.56 L 148.5 601.56 L 145.03 598.03 L 145.03 573.28 L F 172.81 573.28 M 172.81 601.56 L 148.5 601.56 L 145.03 598.03 L 145.03 573.28 L CS 1 K 1 G (F) 139.011 603.11 T 0 G 0 K 105.23 573.28 M 105.23 601.56 L 80.92 601.56 L 77.44 598.03 L 77.44 573.28 L F 105.23 573.28 M 105.23 601.56 L 80.92 601.56 L 77.44 598.03 L 77.44 573.28 L CS 1 K 1 G (O) 71.424 603.11 T 0 G 0 K 0 0 612 792 CR 1 G 71.424072 700.704712 361.584351 18 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (NORMA-MK12, user15:July 15, 1992) 277.738 707.371 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 2 2 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 179.136108 107.136108 361.008423 611.568604 NF 0 G 0 (Times-Roman) 10 1 mymakefontmetric 0 FF (This book is in the ) 179.136 113.803 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF (Open Softwar) 256.086 113.803 T (e F) 315.626 113.803 T (oundation Mach 3) 328.426 113.803 T 0 FF ( series.) 406.216 113.803 T (Books in the OSF Mach 3 series:) 179.136 137.803 T 1 FF (Mach 3 K) 251.136 161.803 T (er) 293.106 161.803 T (nel Principles) 301.836 161.803 T (Mach 3 K) 251.136 185.803 T (er) 293.106 185.803 T (nel Interfaces) 301.836 185.803 T (Mach 3 Ser) 251.136 209.802 T (v) 299.916 209.802 T (er Writer\325) 304.816 209.802 T (s Guide) 348.586 209.802 T (Mach 3 Ser) 251.136 233.802 T (v) 299.916 233.802 T (er Writer\325) 304.816 233.802 T (s Interfaces) 348.586 233.802 T 0 FF (Re) 179.136 281.802 T (vision History:) 189.996 281.802 T (Re) 179.136 305.802 T (vision 2) 189.996 305.802 T (MK67, user11: January 15, 1992) 251.136 305.802 T (OSF Mach release) 395.136 305.802 T (Re) 179.136 317.802 T (vision 2.2) 189.996 317.802 T (NORMA-MK12, user15: July 15, 1992) 251.136 317.802 T (Change bars indicate changes since MK67, user 11.) 179.136 341.802 T (Cop) 179.136 403.802 T (yright\251 1990 by the Open Softw) 195.706 403.802 T (are F) 327.366 403.802 T (oundation and Carne) 347.486 403.802 T (gie Mellon Uni) 430.656 403.802 T (v) 491.517 403.802 T (ersity) 496.367 403.802 T (.) 517.937 403.802 T (All rights reserv) 179.136 425.802 T (ed.) 243.976 425.802 T 179.136108 472.802063 M 1.348114 0 32 (This document is partially deri) widthshow 307.048706 472.802063 M 1.348114 0 32 (v) widthshow 311.898804 472.802063 M 1.348114 0 32 (ed from earlier Mach documents written by Richard P) widthshow 537.644348 472.802063 M 1.348114 0 32 (.) widthshow (Dra) 179.136 484.802 T (v) 193.926 484.802 T (es, Michael B. Jones, Mary R. Thompson, Eric Cooper and Randall Dean.) 198.776 484.802 T 179.136108 508.802002 M 1.229095 0 32 (CHAPTER 4 and CHAPTER 6 are deri) widthshow 344.580811 508.802002 M 1.229095 0 32 (v) widthshow 349.430908 508.802002 M 1.229095 0 32 (ed from a tutorial gi) widthshow 434.087433 508.802002 M 1.229095 0 32 (v) widthshow 438.9375 508.802002 M 1.229095 0 32 (en by Richard Dra) widthshow 516.014893 508.802002 M 1.229095 0 32 (v) widthshow 520.86499 508.802002 M 1.229095 0 32 (es at) widthshow (the 1991 USENIX Mach symposium.) 179.136 520.802 T 179.136108 544.802002 M 0.377151 0 32 (CHAPTER 7 is deri) widthshow 260.297699 544.802002 M 0.377151 0 32 (v) widthshow 265.147766 544.802002 M 0.377151 0 32 (ed from a tutorial gi) widthshow 346.396545 544.802002 M 0.377151 0 32 (v) widthshow 351.246613 544.802002 M 0.377151 0 32 (en by Da) widthshow 387.901031 544.802002 M 0.377151 0 32 (vid Black at the 1991 USENIX Mach) widthshow (symposium.) 179.136 556.802 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 3 3 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 207.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF (iii ) 549.66 731.707 T 1 G 72 49.824005 360 12.024002 NF 0 G 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 2 (Times-Italic) 24 1 mymakefontmetric 2 FF 72 123.999969 M -0.479736 0 (Contents) ashow 3 (Times-Roman) 12 1 mymakefontmetric 3 FF (CHAPTER 1) 72.0 164.0 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (Intr) 153.0 164.0 T (oduction) 173.448 164.0 T 3 FF ( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 219.0 164.0 T (1) 426.0 164.0 T (CHAPTER 2) 72.0 200.0 T 4 FF (Name Ser) 153.0 200.0 T (v) 203.196 200.0 T (er) 209.076 200.0 T 3 FF (. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 222.0 200.0 T (3) 426.0 200.0 T (Local Name Space) 153.0 214.0 T (. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 246.0 214.0 T (3) 426.0 214.0 T (Netw) 153.0 228.0 T (ork Name Space) 178.872 228.0 T ( . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 261.0 228.0 T (4) 426.0 228.0 T (CHAPTER 3) 72.0 264.0 T 4 FF (Mach Interface Generator \(MIG\)) 153.0 264.0 T 3 FF ( . . . . . . . . . . . . . . . . ) 327.0 264.0 T (5) 426.0 264.0 T (Introduction) 153.0 278.0 T ( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 213.0 278.0 T (5) 426.0 278.0 T (MIG Speci\336cation File Basics) 153.0 292.0 T (. . . . . . . . . . . . . . . . . . . . . ) 300.0 292.0 T (7) 426.0 292.0 T (T) 153.0 306.0 T (ype Speci\336cations) 159.373 306.0 T ( . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 249.0 306.0 T (12) 420.0 306.0 T (Operation Descriptions) 153.0 320.0 T ( . . . . . . . . . . . . . . . . . . . . . . . . . ) 267.0 320.0 T (21) 420.0 320.0 T (Function Prototype Generation) 153.0 334.0 T ( . . . . . . . . . . . . . . . . . . . ) 303.0 334.0 T (23) 420.0 334.0 T (Special En) 153.0 348.0 T (vironment Subsystems) 204.18 348.0 T ( . . . . . . . . . . . . . . . . . ) 315.0 348.0 T (25) 420.0 348.0 T (Using the Interf) 153.0 362.0 T (ace Modules) 228.864 362.0 T ( . . . . . . . . . . . . . . . . . . . . . ) 291.0 362.0 T (26) 420.0 362.0 T (Compiling De\336nition Files) 153.0 376.0 T ( . . . . . . . . . . . . . . . . . . . . . . ) 285.0 376.0 T (27) 420.0 376.0 T (CHAPTER 4) 72.0 412.0 T 4 FF (Basic IPC\320Based Ser) 153.0 412.0 T (v) 260.88 412.0 T (ers) 266.76 412.0 T 3 FF ( . . . . . . . . . . . . . . . . . . . . . . ) 285.0 412.0 T (29) 420.0 412.0 T (Basic Request Processing) 153.0 426.0 T ( . . . . . . . . . . . . . . . . . . . . . . . ) 279.0 426.0 T (29) 420.0 426.0 T (Single-Threaded Serv) 153.0 440.0 T (er Example) 257.796 440.0 T ( . . . . . . . . . . . . . . . . . ) 315.0 440.0 T (36) 420.0 440.0 T (CHAPTER 5) 72.0 476.0 T 4 FF (C Thr) 153.0 476.0 T (eads) 184.452 476.0 T 3 FF (. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 210.0 476.0 T (51) 420.0 476.0 T (Naming Con) 153.0 490.0 T (v) 214.188 490.0 T (entions) 220.008 490.0 T ( . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 255.0 490.0 T (51) 420.0 490.0 T (Initializing the C Threads P) 153.0 504.0 T (ackage) 285.48 504.0 T ( . . . . . . . . . . . . . . . . ) 321.0 504.0 T (52) 420.0 504.0 T (Threads of Control) 153.0 518.0 T (. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 246.0 518.0 T (52) 420.0 518.0 T (Synchronization) 153.0 532.0 T (. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 234.0 532.0 T (55) 420.0 532.0 T (Shared V) 153.0 546.0 T (ariables) 196.657 546.0 T (. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 234.0 546.0 T (58) 420.0 546.0 T (Using the C Threads P) 153.0 560.0 T (ackage) 261.48 560.0 T ( . . . . . . . . . . . . . . . . . . . . ) 297.0 560.0 T (58) 420.0 560.0 T (Deb) 153.0 574.0 T (ugging) 172.752 574.0 T ( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 207.0 574.0 T (58) 420.0 574.0 T (Examples) 153.0 588.0 T ( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 201.0 588.0 T (59) 420.0 588.0 T (CHAPTER 6) 72.0 624.0 T 4 FF (Multi-Thr) 153.0 624.0 T (eaded IPC\320Based Ser) 205.452 624.0 T (v) 315.996 624.0 T (ers) 321.876 624.0 T 3 FF ( . . . . . . . . . . . . . ) 339.0 624.0 T (63) 420.0 624.0 T (Basic Multi-Threaded Serv) 153.0 638.0 T (er Structure) 283.464 638.0 T (. . . . . . . . . . . . . ) 342.0 638.0 T (63) 420.0 638.0 T (Locking, Operation Sequencing and Consistenc) 153.0 652.0 T (y) 381.792 652.0 T (. . . . . ) 390.0 652.0 T (65) 420.0 652.0 T (Multi-Threaded Object-Oriented Example) 153.0 666.0 T ( . . . . . . . . . . ) 357.0 666.0 T (69) 420.0 666.0 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 4 4 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (iv ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 315.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 2 (Times-Roman) 12 1 mymakefontmetric 2 FF (CHAPTER 7) 180.0 113.984 T 3 (Times-Bold) 12 1 mymakefontmetric 3 FF (Exter) 261.0 113.984 T (nal Memory Managers) 289.476 113.984 T 2 FF (. . . . . . . . . . . . . . . . . . . . ) 408.0 113.984 T (89) 528.0 113.984 T (Ov) 261.0 127.984 T (ervie) 275.484 127.984 T (w) 299.172 127.984 T ( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 309.0 127.984 T (89) 528.0 127.984 T (Role of a Memory Manager) 261.0 141.984 T (. . . . . . . . . . . . . . . . . . . . . . ) 396.0 141.984 T (90) 528.0 141.984 T (Memory Object State) 261.0 155.984 T (. . . . . . . . . . . . . . . . . . . . . . . . . . . ) 366.0 155.984 T (90) 528.0 155.984 T (P) 261.0 169.984 T (age-in and P) 267.492 169.984 T (age-out) 327.3 169.984 T (. . . . . . . . . . . . . . . . . . . . . . . . . . . ) 366.0 169.984 T (92) 528.0 169.984 T (Strict K) 261.0 183.984 T (ernel and Manager P) 298.368 183.984 T (age Consistenc) 397.824 183.984 T (y) 469.968 183.984 T ( . . . . . . . . ) 477.0 183.984 T (94) 528.0 183.984 T (Simple Memory Manager Example) 261.0 197.984 T (. . . . . . . . . . . . . . . . ) 432.0 197.984 T (99) 528.0 197.984 T (Object Cache) 261.0 211.984 T ( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 327.0 211.984 T (125) 522.0 211.984 T (Precious P) 261.0 225.984 T (ages) 311.82 225.984 T (. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 336.0 225.984 T (126) 522.0 225.984 T (Synchronization with Multiple Objects, K) 261.0 239.984 T (ernels and ) 462.36 239.984 T (Threads) 261.0 253.984 T (. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 300.0 253.984 T (126) 522.0 253.984 T (Loose Consistenc) 261.0 267.984 T (y) 345.816 267.984 T (. . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 354.0 267.984 T (129) 522.0 267.984 T (CHAPTER 8) 180.0 303.984 T 3 FF (Netw) 261.0 303.984 T (ork Shar) 287.532 303.984 T (ed Memory Ser) 332.988 303.984 T (v) 412.176 303.984 T (er) 418.056 303.984 T 2 FF ( . . . . . . . . . . . . . . . ) 429.0 303.984 T (131) 522.0 303.984 T (APPENDIX A) 180.0 339.984 T 3 FF (MIG Language Speci\336cation) 261.0 339.984 T 2 FF ( . . . . . . . . . . . . . . . . . . ) 411.0 339.984 T (135) 522.0 339.984 T (APPENDIX B) 180.0 375.984 T 3 FF (Standard MIG T) 261.0 375.984 T (ypes) 347.46 375.984 T 2 FF (. . . . . . . . . . . . . . . . . . . . . . . . . ) 372.0 375.984 T (143) 522.0 375.984 T (IPC T) 261.0 389.984 T (ypenames) 289.045 389.984 T ( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 339.0 389.984 T (143) 522.0 389.984 T (Standard De\336ned T) 261.0 403.984 T (ypes) 354.025 403.984 T (. . . . . . . . . . . . . . . . . . . . . . . . ) 378.0 403.984 T (145) 522.0 403.984 T (APPENDIX C) 180.0 439.984 T 3 FF (Ser) 261.0 439.984 T (vice Ser) 278.208 439.984 T (v) 318.408 439.984 T (er) 324.288 439.984 T 2 FF (. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) 336.0 439.984 T (149) 522.0 439.984 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 5 5 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 2 SL 3.86 setmiterlimit 0 G 432 45 M 72 45 L S 2 SC 432 342 M 72 342 L S 0.25 SL 432 720 M 72 720 L S 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 427 731.706665 M -2.5 0 32 (1 ) widthshow 0 0 612 792 CR 1 G 72 99 360 225 NF 0 G 2 (Times-Roman) 12 1 mymakefontmetric 2 FF 72 114.999969 M 1.19989 0 (CHAPTER 1) ashow 3 (Times-Roman) 24 1 mymakefontmetric 3 FF 180 114.999969 M -0.479736 0 (Introduction) ashow 1 G 72 360 360 344.015991 NF 0 G 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 72 366.666626 M 2.284958 0 32 (This document describes information of generic interest to an) widthshow 336.199768 366.666626 M 2.284958 0 32 (yone who is writing a) widthshow 72 378.666565 M 0.893021 0 32 (Mach serv) widthshow 114.673111 378.666565 M 0.893021 0 32 (er) widthshow 122.043335 378.666565 M 0.893021 0 32 (, or an) widthshow 148.949463 378.666565 M 0.893021 0 32 (y Mach task that wishes to communicate with another task. Whereas) widthshow 72 390.666504 M -0.01236 0 32 (the ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 86.707642 390.666504 M -0.01236 0 32 (K) widthshow 93.027832 390.666504 M -0.01236 0 32 (ernel Interfaces) widthshow 4 FF 156.055481 390.666504 M -0.01236 0 32 ( document describes the \322pure k) widthshow 284.473755 390.666504 M -0.01236 0 32 (ernel\323 which an) widthshow 347.609131 390.666504 M -0.01236 0 32 (y task must use \(pos-) widthshow 72 402.666443 M 1.375427 0 32 (sibly hidden under multiple emulation layers\), this document describes f) widthshow 373.698914 402.666443 M 1.375427 0 32 (acilities that a) widthshow 72 414.666382 M 0.542908 0 32 (task does not ) widthshow 5 FF 128.348724 414.666382 M 0.542908 0 32 (need) widthshow 4 FF 147.228729 414.666382 M 0.542908 0 32 ( in an absolute sense, b) widthshow 241.953384 414.666382 M 0.542908 0 32 (ut probably wishes to use to w) widthshow 366.770874 414.666382 M 0.542908 0 32 (ork in the Mach) widthshow (en) 72.0 426.666 T (vironment.) 81.04 426.666 T 72 450.66626 M 0.108292 0 32 (Mach subscribes to the client\320serv) widthshow 210.593262 450.66626 M 0.108292 0 32 (er model of computing. The Mach k) widthshow 355.843079 450.66626 M 0.108292 0 32 (ernel pro) widthshow 391.62146 450.66626 M 0.108292 0 32 (vides pro-) widthshow 72 462.666199 M 0.617401 0 32 (tected access to shared hardw) widthshow 192.659683 462.666199 M 0.617401 0 32 (are resources suf) widthshow 260.834656 462.666199 M 0.617401 0 32 widthshow 349.476929 462.666199 M 0.617401 0 32 (er tasks that pro) widthshow 414.779236 462.666199 M 0.617401 0 32 (vide) widthshow 72 474.666138 M 0.299255 0 32 (access to the ph) widthshow 135.887802 474.666138 M 0.299255 0 32 (ysical and logical resources of the system, and the k) widthshow 346.221191 474.666138 M 0.299255 0 32 (ernel pro) widthshow 382.190521 474.666138 M 0.299255 0 32 (vides \322inter) widthshow 428.669891 474.666138 M 0.299255 0 32 (-) widthshow 72 486.666077 M 0.949051 0 32 (process\323 communication \(IPC\) between tasks so that clients may mak) widthshow 359.571533 486.666077 M 0.949051 0 32 (e service requests) widthshow (upon serv) 72.0 498.666 T (ers.) 111.01 498.666 T 72 522.665955 M 0.319138 0 32 (Mach IPC is oriented to) widthshow 168.576691 522.665955 M 0.319138 0 32 (w) widthshow 175.696747 522.665955 M 0.319138 0 32 (ards sending discrete messages to destinations named by k) widthshow 412.009918 522.665955 M 0.319138 0 32 (ernel) widthshow 72 534.665894 M 0.414383 0 32 (protected capabilities. The f) widthshow 184.783218 534.665894 M 0.414383 0 32 (acility allo) widthshow 227.447739 534.665894 M 0.414383 0 32 (ws both synchronous and asynchronous communi-) widthshow 72 546.665833 M 0.21904 0 32 (cation. The mechanisms are suf) widthshow 198.986313 546.665833 M 0.21904 0 32 widthshow 414.779694 546.665833 M 0.21904 0 32 (vide) widthshow 72 558.665771 M 0.759964 0 32 (\(system-le) widthshow 113.410141 558.665771 M 0.759964 0 32 (v) widthshow 118.260223 558.665771 M 0.759964 0 32 (el\) object-oriented programming \(using capabilities \(port rights\) to name ob-) widthshow 72 570.66571 M 1.168976 0 32 (jects\) and streaming of data. Cop) widthshow 209.944946 570.66571 M 1.168976 0 32 (y-on-write virtual memory optimizations are pro) widthshow 409.779907 570.66571 M 1.168976 0 32 (vided) widthshow (for ef) 72.0 582.666 T 93.68 582.666 T (ge data. The mechanisms are netw) 174.88 582.666 T (ork transparent.) 312.52 582.666 T 72 606.665588 M 0.386383 0 32 (The \336ne details of Mach IPC are described in the ) widthshow 5 FF 274.713867 606.665588 M 0.386383 0 32 (K) widthshow 281.034058 606.665588 M 0.386383 0 32 (ernel Principles) widthshow 4 FF 345.580444 606.665588 M 0.386383 0 32 ( document and speci-) widthshow 72 618.665527 M 0.336609 0 32 widthshow 5 FF 115.509827 618.665527 M 0.336609 0 32 (K) widthshow 121.830017 618.665527 M 0.336609 0 32 (ernel Interfaces) widthshow 4 FF 185.206635 618.665527 M 0.336609 0 32 ( document. Those documents should be referenced before at-) widthshow (tempting to read this v) 72.0 630.665 T (olume.) 161.8 630.665 T 72 654.665405 M 0.509979 0 32 (The precise details of generating messages suitable for Mach IPC, including marshalling) widthshow 72 666.665344 M 1.414597 0 32 (data into and un-marshalling data out of the message, are normally handled by \322stub\323) widthshow 72 678.665283 M 1.056625 0 32 (programs generated by MIG, the Mach Interf) widthshow 259.019836 678.665283 M 1.056625 0 32 (ace Generator) widthshow 315.326782 678.665283 M 1.056625 0 32 (. This tool, described in this) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 6 6 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (2 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Intr) 180.0 55.824 T (oduction) 195.336 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 0.331955 0 32 (v) widthshow 184.80011 112.650635 M 0.331955 0 32 (olume, does not hide IPC features; it pro) widthshow 349.183899 112.650635 M 0.331955 0 32 (vides a more con) widthshow 417.819977 112.650635 M 0.331955 0 32 (v) widthshow 422.670044 112.650635 M 0.331955 0 32 (enient syntax in which to e) widthshow 531.669922 112.650635 M 0.331955 0 32 (x-) widthshow (press the use of these features.) 180.0 124.651 T 180 148.650513 M 1.891052 0 32 (MIG does not pro) widthshow 256.903259 148.650513 M 1.891052 0 32 (vide transparent programming language-le) widthshow 432.566559 148.650513 M 1.891052 0 32 (v) widthshow 437.416626 148.650513 M 1.891052 0 32 (el remote procedure call) widthshow 180 160.650452 M 0.283279 0 32 (support. It is used to specify the operations performed by a serv) widthshow 437.36618 160.650452 M 0.283279 0 32 (er) widthshow 444.736389 160.650452 M 0.283279 0 32 (, and the parameters re-) widthshow 180 172.650391 M 0.042831 0 32 (quired for the messages between clients and serv) widthshow 375.379944 172.650391 M 0.042831 0 32 (ers, in a w) widthshow 416.508484 172.650391 M 0.042831 0 32 (ay usable by multiple languag-) widthshow (es, b) 180.0 184.65 T (ut mostly for C.) 198.13 184.65 T 180 208.650269 M 1.130707 0 32 (A Mach serv) widthshow 233.761505 208.650269 M 1.130707 0 32 (er e) widthshow 249.452301 208.650269 M 1.130707 0 32 (x) widthshow 254.302383 208.650269 M 1.130707 0 32 (ecutes a service loop \(pro) widthshow 360.865295 208.650269 M 1.130707 0 32 (vided by library routines\) that recei) widthshow 507.628998 208.650269 M 1.130707 0 32 (v) widthshow 512.479065 208.650269 M 1.130707 0 32 (es IPC) widthshow 180 220.650208 M 0.678406 0 32 (messages from clients, in) widthshow 282.735443 220.650208 M 0.678406 0 32 (v) widthshow 287.535553 220.650208 M 0.678406 0 32 (ok) widthshow 297.435608 220.650208 M 0.678406 0 32 (es the service routine so requested, then sends a reply mes-) widthshow (sage to the client, returning to the service loop. The generation of a serv) 180.0 232.65 T (er requires:) 467.29 232.65 T 4 (Times-Roman) 7 1 mymakefontmetric 4 FF 180.0 250.65 T 3 FF 193.535995 250.650085 M 0.759537 0 32 (The speci\336cation of the messages that a client will send to the serv) widthshow 469.130554 250.650085 M 0.759537 0 32 (er and the replies) widthshow 193.535995 262.650024 M 0.722427 0 32 (to be returned \(normally in the form of RPCs\), which MIG will translate into appro-) widthshow (priate stubs.) 193.536 274.65 T 4 FF 180.0 289.65 T 3 FF (The implementation of the service routines to be in) 193.536 289.65 T (v) 397.556 289.65 T (ok) 402.356 289.65 T (ed by the MIG stubs.) 412.256 289.65 T 4 FF 180.0 304.65 T 3 FF 193.535995 304.649841 M 0.366928 0 32 (Initialization code to start the serv) widthshow 331.590729 304.649841 M 0.366928 0 32 (er) widthshow 338.960938 304.649841 M 0.366928 0 32 (, create appropriate initial objects, mak) widthshow 496.495667 304.649841 M 0.366928 0 32 (e them po-) widthshow (tentially kno) 193.536 316.65 T (wn to clients and in) 243.566 316.65 T (v) 321.496 316.65 T (ok) 326.296 316.65 T (e the service loop code.) 336.197 316.65 T (The details of these portions of a serv) 180.0 340.65 T (er are discussed in this v) 330.1 340.65 T (olume at length.) 427.94 340.65 T 180 364.649658 M 0.2388 0 32 (F) widthshow 185.41008 364.649658 M 0.2388 0 32 (or a serv) widthshow 220.16777 364.649658 M 0.2388 0 32 (er to be kno) widthshow 268.124329 364.649658 M 0.2388 0 32 (wn to client tasks, it must re) widthshow 381.907196 364.649658 M 0.2388 0 32 (gister itself in some client visible name) widthshow 180 376.649597 M 0.26329 0 32 (space. This name space is pro) widthshow 300.02655 376.649597 M 0.26329 0 32 (vided by a Name Serv) widthshow 389.799805 376.649597 M 0.26329 0 32 (er) widthshow 397.170044 376.649597 M 0.26329 0 32 (, the basic interf) widthshow 462.289978 376.649597 M 0.26329 0 32 (ace and support for) widthshow (which are described in this v) 180.0 388.65 T (olume.) 294.5 388.65 T 180 412.649475 M 0.941498 0 32 (A serv) widthshow 207.171585 412.649475 M 0.941498 0 32 (er that wishes to process multiple service requests in parallel w) widthshow 468.666626 412.649475 M 0.941498 0 32 (ould use multiple) widthshow 180 424.649414 M 0.300629 0 32 (threads to service the requests. Gi) widthshow 316.223297 424.649414 M 0.300629 0 32 (v) widthshow 321.073364 424.649414 M 0.300629 0 32 (en that most serv) widthshow 389.875366 424.649414 M 0.300629 0 32 (ers are not written in parallel or task-) widthshow 180 436.649353 M 1.355362 0 32 (ing languages, the C threads package is pro) widthshow 362.637634 436.649353 M 1.355362 0 32 (vided. This package, discussed in this v) widthshow 528.889893 436.649353 M 1.355362 0 32 (ol-) widthshow (ume, supports multi-threaded programming in the C \(or C++\) language.) 180.0 448.649 T 180 472.649231 M 1.170761 0 32 (The C threads package pro) widthshow 291.723145 472.649231 M 1.170761 0 32 (vides a friendly interf) widthshow 381.505493 472.649231 M 1.170761 0 32 (ace to k) widthshow 414.847076 472.649231 M 1.170761 0 32 (ernel-le) widthshow 445.137207 472.649231 M 1.170761 0 32 (v) widthshow 449.987305 472.649231 M 1.170761 0 32 (el threads. It pro) widthshow 518.889648 472.649231 M 1.170761 0 32 (vides) widthshow 180 484.64917 M 0.909912 0 32 (traditional mute) widthshow 244.369995 484.64917 M 0.909912 0 32 (x and condition v) widthshow 316.569885 484.64917 M 0.909912 0 32 (ariable synchronization primiti) widthshow 441.459839 484.64917 M 0.909912 0 32 (v) widthshow 446.309937 484.64917 M 0.909912 0 32 (es. Control is pro) widthshow 517.779724 484.64917 M 0.909912 0 32 (vided) widthshow 180 496.649109 M 0.12352 0 32 (o) widthshow 184.850082 496.649109 M 0.12352 0 32 (v) widthshow 189.700165 496.649109 M 0.12352 0 32 (er the creation and destruction of threads and the multiple) widthshow 421.451965 496.649109 M 0.12352 0 32 (xing of user threads onto k) widthshow 528.899597 496.649109 M 0.12352 0 32 (er-) widthshow (nel threads.) 180.0 508.649 T 180 532.648987 M 0.541611 0 32 (Subsequent chapters deal with details in) widthshow 342.568298 532.648987 M 0.541611 0 32 (v) widthshow 347.368408 532.648987 M 0.541611 0 32 (olv) widthshow 359.998474 532.648987 M 0.541611 0 32 (ed in serv) widthshow 399.811768 532.648987 M 0.541611 0 32 (er mechanisms and in writing spe-) widthshow 180 544.648926 M 0.057404 0 32 (ci\336c types of serv) widthshow 250.8423 544.648926 M 0.057404 0 32 (ers. Issues in) widthshow 301.937317 544.648926 M 0.057404 0 32 (v) widthshow 306.737427 544.648926 M 0.057404 0 32 (olv) widthshow 319.367523 544.648926 M 0.057404 0 32 (ed in writing a correctly operating multi-threaded serv-) widthshow (er are also co) 180.0 556.649 T (v) 232.88 556.649 T (ered in this v) 237.73 556.649 T (olume.) 289.47 556.649 T 180 580.648804 M 0.33577 0 32 (This v) widthshow 205.415878 580.648804 M 0.33577 0 32 (olume describes, with e) widthshow 300.703278 580.648804 M 0.33577 0 32 (xamples, the structure of a basic single-threaded serv) widthshow 515.073792 580.648804 M 0.33577 0 32 (er) widthshow 522.44397 580.648804 M 0.33577 0 32 (, the) widthshow 180 592.648743 M 0.959122 0 32 (structure of a multi-threaded object-oriented serv) widthshow 380.985718 592.648743 M 0.959122 0 32 (er and the structure of a basic e) widthshow 512.229675 592.648743 M 0.959122 0 32 (xternal) widthshow (memory manager) 180.0 604.649 T (.) 249.71 604.649 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 7 7 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 2 SL 3.86 setmiterlimit 0 G 432 45 M 72 45 L S 2 SC 432 342 M 72 342 L S 0.25 SL 432 720 M 72 720 L S 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 427 731.706665 M -2.5 0 32 (3 ) widthshow 0 0 612 792 CR 1 G 72 99 360 225 NF 0 G 2 (Times-Roman) 12 1 mymakefontmetric 2 FF 72 115 M 1.19989 0 (CHAPTER 2) ashow 3 (Times-Roman) 24 1 mymakefontmetric 3 FF 180 115 M -0.479736 0 (Name Serv) ashow 282.626587 115 M -0.479736 0 (er) ashow 1 G 72 360 360 344.015991 NF 0 G 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 72 366.666626 M 0.031082 0 32 (A task starts life with a limited set of port rights. It can ask for its o) widthshow 340.837463 366.666626 M 0.031082 0 32 (wn port \() widthshow 1 FF 377.559631 366.666626 M 0.031082 0 32 (mach_task_-) widthshow 72 378.666565 M -0.000885 0 32 (self) widthshow 4 FF 86.440002 378.666565 M -0.000885 0 32 (\), that of its e) widthshow 139.336548 378.666565 M -0.000885 0 32 (x) widthshow 144.18663 378.666565 M -0.000885 0 32 (ecuting thread \() widthshow 1 FF 206.94487 378.666565 M -0.000885 0 32 (mach_thr) widthshow 248.424973 378.666565 M -0.000885 0 32 (ead_self) widthshow 4 FF 282.86499 378.666565 M -0.000885 0 32 (\), its host \() widthshow 1 FF 325.642334 378.666565 M -0.000885 0 32 (mach_host_self) widthshow 4 FF 391.192322 378.666565 M -0.000885 0 32 (\) and a re-) widthshow 72 390.666504 M 1.328964 0 32 (ply port \() widthshow 1 FF 111.87793 390.666504 M 1.328964 0 32 (mach_r) widthshow 144.468033 390.666504 M 1.328964 0 32 (eply_port) widthshow 4 FF 185.578033 390.666504 M 1.328964 0 32 (\). It has a handful of special ports \() widthshow 1 FF 335.89978 390.666504 M 1.328964 0 32 (task_get_special_port) widthshow 4 FF 428.669769 390.666504 M 1.328964 0 32 (\)) widthshow 72 402.666443 M 0.787842 0 32 (which name an e) widthshow 141.693619 402.666443 M 0.787842 0 32 (xception port and a bootstrap port. The bootstrap port is typically used) widthshow 72 414.666382 M 0.956375 0 32 (to name the principal serv) widthshow 179.545593 414.666382 M 0.956375 0 32 (er controlling the task; in the single-serv) widthshow 346.783936 414.666382 M 0.956375 0 32 (er system, this is the) widthshow 72 426.666321 M 1.181366 0 32 (request port for the single-serv) widthshow 199.325562 426.666321 M 1.181366 0 32 (er) widthshow 206.545868 426.666321 M 1.181366 0 32 (. The only other ports inherently kno) widthshow 360.314209 426.666321 M 1.181366 0 32 (wn to a ne) widthshow 404.988464 426.666321 M 1.181366 0 32 (w task) widthshow 72 438.66626 M 0.273773 0 32 (are the ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 101.977554 438.66626 M 0.273773 0 32 (r) widthshow 105.497757 438.66626 M 0.273773 0 32 (e) widthshow 109.537979 438.66626 M 0.273773 0 32 (gister) widthshow 131.948181 438.66626 M 0.273773 0 32 (ed) widthshow 4 FF 141.388184 438.66626 M 0.273773 0 32 ( ports \() widthshow 1 FF 170.265732 438.66626 M 0.273773 0 32 (mach_ports_lookup) widthshow 4 FF 255.275726 438.66626 M 0.273773 0 32 (\). It is these re) widthshow 313.150909 438.66626 M 0.273773 0 32 (gistered ports that are used to) widthshow (locate e) 72.0 450.666 T (xtra services.) 102.67 450.666 T 72 474.666138 M -0.012711 0 32 (The signi\336cant port found in the set of re) widthshow 235.618408 474.666138 M -0.012711 0 32 (gistered ports names a ) widthshow 5 FF 327.21759 474.666138 M -0.012711 0 32 (name service) widthshow 4 FF 379.684875 474.666138 M -0.012711 0 32 (. Since re) widthshow 416.999542 474.666138 M -0.012711 0 32 (gis-) widthshow 72 486.666077 M 0.919952 0 32 (tered ports are inherited by created tasks, all tasks tend \(unless o) widthshow 339.139587 486.666077 M 0.919952 0 32 (v) widthshow 343.989685 486.666077 M 0.919952 0 32 (erridden\) to share the) widthshow 72 498.666016 M 0.749969 0 32 (port to a single name service. The name service pro) widthshow 284.659851 498.666016 M 0.749969 0 32 (vides a common repository of name) widthshow (to serv) 72.0 510.666 T (er mappings that allo) 98.79 510.666 T (w tasks to locate and share access to system serv) 182.7 510.666 T (ers.) 377.23 510.666 T 72 552.999207 360 3.024002 CR 432 554.51 M 72 554.51 L S 0 0 612 792 CR 6 (Times-Bold) 14 1 mymakefontmetric 6 FF (Local Name Space) 72.0 548.333 T 4 FF 72 572.689819 M 2.011063 0 32 (An application task locates a serv) widthshow 216.04541 572.689819 M 2.011063 0 32 (er with ) widthshow 5 FF 250.617538 572.689819 M 2.011063 0 32 (name_server) widthshow 7 (Symbol) 10 1 mymakefontmetric 7 FF 302.267548 572.689819 M 2.011063 0 32 widthshow 1 FF 312.137543 572.689819 M 2.011063 0 32 (netname_look_up) widthshow 4 FF 388.257538 572.689819 M 2.011063 0 32 (. This call) widthshow 72 584.689758 M 1.023972 0 32 (tak) widthshow 84.120056 584.689758 M 1.023972 0 32 (es an ar) widthshow 116.528107 584.689758 M 1.023972 0 32 (gument of a name string naming the desired service. The call returns a send) widthshow (right to the port associated with the service.) 72.0 596.69 T 72 620.689636 M 0.445511 0 32 (A serv) widthshow 98.675598 620.689636 M 0.445511 0 32 (er task mak) widthshow 145.566681 620.689636 M 0.445511 0 32 (es itself publicly kno) widthshow 230.263351 620.689636 M 0.445511 0 32 (wn by calling ) widthshow 5 FF 288.539886 620.689636 M 0.445511 0 32 (name_server) widthshow 7 FF 340.18988 620.689636 M 0.445511 0 32 widthshow 1 FF 350.059875 620.689636 M 0.445511 0 32 (netname_check_in) widthshow 4 FF 429.499878 620.689636 M 0.445511 0 32 (.) widthshow 72 632.689575 M 0.384628 0 32 (This call re) widthshow 117.609344 632.689575 M 0.384628 0 32 (gisters a supplied port \(send right\) with a gi) widthshow 294.866516 632.689575 M 0.384628 0 32 (v) widthshow 299.716614 632.689575 M 0.384628 0 32 (en service name. The serv) widthshow 405.235229 632.689575 M 0.384628 0 32 (er also) widthshow 72 644.689514 M 0.239258 0 32 (supplies a ) widthshow 5 FF 114.698517 644.689514 M 0.239258 0 32 (signatur) widthshow 147.668716 644.689514 M 0.239258 0 32 (e) widthshow 4 FF 152.108719 644.689514 M 0.239258 0 32 ( port of its choosing that the name serv) widthshow 309.412872 644.689514 M 0.239258 0 32 (er requires for subsequent ma-) widthshow 72 656.689453 M 0.919952 0 32 (nipulations of this service mapping so that random tasks cannot af) widthshow 345.36969 656.689453 M 0.919952 0 32 (fect the mapping. In-) widthshow 72 668.689392 M 0.603821 0 32 (deed, since an) widthshow 129.427734 668.689392 M 0.603821 0 32 (y task may use the ) widthshow 1 FF 208.826843 668.689392 M 0.603821 0 32 (netname_check_in) widthshow 4 FF 288.266846 668.689392 M 0.603821 0 32 ( function, it is necessary to pro) widthshow 414.779846 668.689392 M 0.603821 0 32 (vide) widthshow 72 680.689331 M 1.107285 0 32 (unique service names for all of the system serv) widthshow 268.448364 680.689331 M 1.107285 0 32 (ers and to arrange for them to initialize) widthshow (and re) 72.0 692.689 T (gister themselv) 96.56 692.689 T (es with the name serv) 157.24 692.689 T (er prior to running an) 243.74 692.689 T (y application tasks.) 329.13 692.689 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 8 8 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (4 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Name Ser) 180.0 55.824 T (v) 217.647 55.824 T (er) 222.057 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 0.853607 0 32 (A serv) widthshow 207.083694 112.650635 M 0.853607 0 32 (er task can de-re) widthshow 275.294617 112.650635 M 0.853607 0 32 (gister itself with ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 352.062653 112.650635 M 0.853607 0 32 (name_server) widthshow 5 (Symbol) 10 1 mymakefontmetric 5 FF 403.712646 112.650635 M 0.853607 0 32 widthshow 0 FF 413.582642 112.650635 M 0.853607 0 32 (netname_check_out) widthshow 3 FF 498.572662 112.650635 M 0.853607 0 32 (. This call) widthshow 180 124.650574 M 0.696869 0 32 (requires the signature port speci\336ed in the check-in call. Destro) widthshow 439.451904 124.650574 M 0.696869 0 32 (ying the service port has) widthshow (the same result.) 180.0 136.651 T 180 160.650452 M 1.534958 0 32 (The original name serv) widthshow 276.934967 160.650452 M 1.534958 0 32 (er w) widthshow 295.859985 160.650452 M 1.534958 0 32 (as part of the Net Message Serv) widthshow 432.109833 160.650452 M 1.534958 0 32 (er \(the Net Name serv) widthshow 526.39978 160.650452 M 1.534958 0 32 (er\),) widthshow 180 172.650391 M 0.469971 0 32 (hence the name of these interf) widthshow 302.489929 172.650391 M 0.469971 0 32 (aces. The typical name service used in base Mach systems) widthshow 180 184.65033 M 1.015274 0 32 (is ) widthshow 0 FF 190.185272 184.65033 M 1.015274 0 32 (snames) widthshow 3 FF 221.295273 184.65033 M 1.015274 0 32 (, a simple name serv) widthshow 307.136475 184.65033 M 1.015274 0 32 (er) widthshow 314.35675 184.65033 M 1.015274 0 32 (. Since an) widthshow 355.3974 184.65033 M 1.015274 0 32 (y number of serv) widthshow 426.333313 184.65033 M 1.015274 0 32 (ers could be written to pro-) widthshow 180 196.650269 M 1.838837 0 32 (vide the name serv) widthshow 260.626587 196.650269 M 1.838837 0 32 (er protocol, an additional call, ) widthshow 4 FF 392.300781 196.650269 M 1.838837 0 32 (name_server) widthshow 5 FF 443.950806 196.650269 M 1.838837 0 32 widthshow 0 FF 453.820801 196.650269 M 1.838837 0 32 (netname_v) widthshow 500.380859 196.650269 M 1.838837 0 32 (ersion) widthshow 3 FF 526.490845 196.650269 M 1.838837 0 32 (, is) widthshow 180 208.650208 M 0.909958 0 32 (pro) widthshow 193.180084 208.650208 M 0.909958 0 32 (vided which returns a string describing \(naming\) the name serv) widthshow 454.229797 208.650208 M 0.909958 0 32 (er in use and its v) widthshow 528.899658 208.650208 M 0.909958 0 32 (er-) widthshow (sion.) 180.0 220.65 T 180 262.983398 360 3.024002 CR 0.25 SL 2 SC 540 264.5 M 180 264.5 L S 0 0 612 792 CR 6 (Times-Bold) 14 1 mymakefontmetric 6 FF (Netw) 180.0 258.317 T (ork Name Space) 210.954 258.317 T 3 FF 180 282.674011 M 1.694565 0 32 (The ) widthshow 0 FF 199.744568 282.674011 M 1.694565 0 32 (snames) widthshow 3 FF 230.854568 282.674011 M 1.694565 0 32 ( name serv) widthshow 277.413788 282.674011 M 1.694565 0 32 (er pro) widthshow 302.558441 282.674011 M 1.694565 0 32 (vides a single local name space. Only those clients who) widthshow 180 294.67395 M 1.003265 0 32 (ha) widthshow 189.240112 294.67395 M 1.003265 0 32 (v) widthshow 194.090195 294.67395 M 1.003265 0 32 (e as their re) widthshow 243.320084 294.67395 M 1.003265 0 32 (gistered name serv) widthshow 320.156708 294.67395 M 1.003265 0 32 (er port the port to the same ) widthshow 0 FF 437.439575 294.67395 M 1.003265 0 32 (snames) widthshow 3 FF 468.549561 294.67395 M 1.003265 0 32 ( serv) widthshow 488.562927 294.67395 M 1.003265 0 32 (er will share) widthshow (the gi) 180.0 306.674 T (v) 202.25 306.674 T (en name space.) 207.1 306.674 T 180 330.673828 M 0.217285 0 32 (The original Net Name serv) widthshow 292.359253 330.673828 M 0.217285 0 32 (er \(part of the Net Message serv) widthshow 421.80304 330.673828 M 0.217285 0 32 (er\) pro) widthshow 448.800415 330.673828 M 0.217285 0 32 (vides a set of per) widthshow 517.229675 330.673828 M 0.217285 0 32 (-node) widthshow 180 342.673767 M 0.791809 0 32 (name spaces. Clients on a node ha) widthshow 321.470978 342.673767 M 0.791809 0 32 (v) widthshow 326.321045 342.673767 M 0.791809 0 32 (e as their re) widthshow 374.916565 342.673767 M 0.791809 0 32 (gistered name serv) widthshow 451.330292 342.673767 M 0.791809 0 32 (er port the port to the) widthshow 180 354.673706 M 1.474228 0 32 (local name serv) widthshow 245.558548 354.673706 M 1.474228 0 32 (er) widthshow 252.778854 354.673706 M 1.474228 0 32 (. W) widthshow 268.293304 354.673706 M 1.474228 0 32 (ith this port the) widthshow 333.406067 354.673706 M 1.474228 0 32 (y can look-up and check-in serv) widthshow 468.647308 354.673706 M 1.474228 0 32 (ers on their local) widthshow (node.) 180.0 366.674 T 180 390.673584 M 0.861969 0 32 (As part of system / netw) widthshow 281.69989 390.673584 M 0.861969 0 32 (ork initialization, the Net Name serv) widthshow 431.949829 390.673584 M 0.861969 0 32 (er on a gi) widthshow 471.775879 390.673584 M 0.861969 0 32 (v) widthshow 476.625977 390.673584 M 0.861969 0 32 (en node locates) widthshow 180 402.673523 M 0.437958 0 32 (other nodes and announces itself to the name service on the other nodes. W) widthshow 486.343689 402.673523 M 0.437958 0 32 (ith the ) widthshow 4 FF 514.999634 402.673523 M 0.437958 0 32 (host_-) widthshow 180 414.673462 M 0.08075 0 32 (name) widthshow 3 FF 201.660004 414.673462 M 0.08075 0 32 ( parameter to ) widthshow 0 FF 257.162262 414.673462 M 0.08075 0 32 (netname_look_up) widthshow 3 FF 333.282257 414.673462 M 0.08075 0 32 (, clients can locate serv) widthshow 426.485352 414.673462 M 0.08075 0 32 (ers on other nodes. It is nec-) widthshow 180 426.673401 M 0.811188 0 32 (essary for clients to establish a con) widthshow 323.88736 426.673401 M 0.811188 0 32 (v) widthshow 328.737427 426.673401 M 0.811188 0 32 (ention as to what host will check-in a serv) widthshow 503.387024 426.673401 M 0.811188 0 32 (er \(so all) widthshow 180 438.67334 M 1.263687 0 32 (clients kno) widthshow 224.623825 438.67334 M 1.263687 0 32 (w what ) widthshow 4 FF 258.811218 438.67334 M 1.263687 0 32 (host_name) widthshow 3 FF 302.141205 438.67334 M 1.263687 0 32 ( v) widthshow 310.655029 438.67334 M 1.263687 0 32 (alue to use to \336nd it\) or clients must bro) widthshow 481.498352 438.67334 M 1.263687 0 32 (wse the set of) widthshow (name serv) 180.0 450.673 T (ers in some unde\336ned manner) 220.67 450.673 T (.) 340.1 450.673 T 180 474.673218 M 0.23494 0 32 (Each name serv) widthshow 243.629974 474.673218 M 0.23494 0 32 (er is re) widthshow 271.159943 474.673218 M 0.23494 0 32 (gistered in its o) widthshow 333.004883 474.673218 M 0.23494 0 32 (wn name space \(with the string \322NameServ) widthshow 508.114624 474.673218 M 0.23494 0 32 (er\323\). As) widthshow 180 486.673157 M 0.239334 0 32 (such, a client can obtain the port for the local name serv) widthshow 406.322784 486.673157 M 0.239334 0 32 (er on another node \(by supplying) widthshow 180 498.673096 M 0.266876 0 32 (that node\325) widthshow 219.987183 498.673096 M 0.266876 0 32 (s host name to ) widthshow 0 FF 281.054688 498.673096 M 0.266876 0 32 (netname_look_up) widthshow 3 FF 357.174683 498.673096 M 0.266876 0 32 (\). W) widthshow 374.811768 498.673096 M 0.266876 0 32 (ith this port, a client can directly look-up) widthshow (serv) 180.0 510.673 T (ers on that node, as well as check in serv) 196.51 510.673 T (ers on that node.) 359.1 510.673 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 9 9 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 2 SL 3.86 setmiterlimit 0 SC 0 G 432 45 M 72 45 L S 2 SC 432 342 M 72 342 L S 0.25 SL 432 720 M 72 720 L S 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 427 731.706665 M -2.5 0 32 (5 ) widthshow 0 0 612 792 CR 1 G 72 99 360 225 NF 0 G 2 (Times-Roman) 12 1 mymakefontmetric 2 FF 72 115 M 1.19989 0 (CHAPTER 3) ashow 3 (Times-Roman) 24 1 mymakefontmetric 3 FF 180 115 M -0.479736 0 (Mach Interf) ashow 288.435059 115 M -0.479736 0 (ace Generator ) ashow 3 FF 180 145 M -0.479736 0 (\(MIG\)) ashow 1 G 72 360 360 344.015991 NF 0 G 4 (Times-Roman) 10 1 mymakefontmetric 4 FF (This chapter describes MIG, the Mach Interf) 72.0 366.667 T (ace Generator) 250.46 366.667 T (.) 305.71 366.667 T 72 408.999939 360 3.024002 CR 432 410.51 M 72 410.51 L S 0 0 612 792 CR 5 (Times-Bold) 14 1 mymakefontmetric 5 FF (Intr) 72.0 404.333 T (oduction) 95.856 404.333 T 4 FF 72 428.690613 M 0.238297 0 32 (MIG is a program which generates remote procedure call \(RPC\) code for communication) widthshow 72 440.690613 M 0.973969 0 32 (between a client \(hereafter referred to as the user side\) and a serv) widthshow 343.987762 440.690613 M 0.973969 0 32 (er process \(the serv) widthshow 424.229767 440.690613 M 0.973969 0 32 (er) widthshow 4 FF 72 452.690582 M 0.511505 0 32 (side\). Mach serv) widthshow 139.243103 452.690582 M 0.511505 0 32 (ers e) widthshow 158.204697 452.690582 M 0.511505 0 32 (x) widthshow 163.054779 452.690582 M 0.511505 0 32 (ecute as separate tasks and communicate with their users by send-) widthshow 4 FF 72 464.690552 M 0.083618 0 32 (ing Mach inter) widthshow 130.847351 464.690552 M 0.083618 0 32 (-process communication \(IPC\) messages. The IPC interf) widthshow 357.049133 464.690552 M 0.083618 0 32 (ace is language in-) widthshow 72 476.690552 M 1.039047 0 32 (dependent and f) widthshow 137.84816 476.690552 M 1.039047 0 32 (airly comple) widthshow 189.007294 476.690552 M 1.039047 0 32 (x. The MIG program is designed to automatically generate) widthshow 72 488.690552 M 0.463715 0 32 (procedures in C to pack and send, or recei) widthshow 243.469879 488.690552 M 0.463715 0 32 (v) widthshow 248.319962 488.690552 M 0.463715 0 32 (e and unpack the IPC messages used to com-) widthshow (municate between processes. ) 72.0 500.691 T 72 524.690491 M 0.6353 0 32 (The user must pro) widthshow 146.245987 524.690491 M 0.6353 0 32 (vide a speci\336cation \336le de\336ning parameters of both the message pass-) widthshow (ing interf) 72.0 536.69 T (ace and the procedure call interf) 108.84 536.69 T (ace. MIG then generates \(by def) 237.3 536.69 T (ault\) three \336les: ) 366.04 536.69 T 6 (Times-Roman) 7 1 mymakefontmetric 6 FF 72.0 554.69 T 4 FF 85.535995 554.690491 M 1.094543 0 32 (User Interf) widthshow 130.120605 554.690491 M 1.094543 0 32 (ace Module: This module is meant to be link) widthshow 317.657013 554.690491 M 1.094543 0 32 (ed into the user program. It) widthshow 85.535995 566.69043 M 0.568497 0 32 (implements and e) widthshow 157.073074 566.69043 M 0.568497 0 32 (xports procedures and functions to send and recei) widthshow 358.812714 566.69043 M 0.568497 0 32 (v) widthshow 363.662781 566.69043 M 0.568497 0 32 (e the appropriate) widthshow (messages to and from the serv) 85.536 578.69 T (er) 206.196 578.69 T (.) 213.416 578.69 T 6 FF 72.0 593.69 T 4 FF 85.535995 593.69043 M 0.600891 0 32 (User Header Module: This module is meant to be included in the user code to de\336ne) widthshow (the types and routines needed at compilation time.) 85.536 605.69 T 6 FF 72.0 620.69 T 4 FF 85.535995 620.69043 M 0.424118 0 32 (Serv) widthshow 103.71608 620.69043 M 0.424118 0 32 (er Interf) widthshow 136.520264 620.69043 M 0.424118 0 32 (ace Module: This module is link) widthshow 268.260925 620.69043 M 0.424118 0 32 (ed into the serv) widthshow 330.763367 620.69043 M 0.424118 0 32 (er process. It e) widthshow 390.195801 620.69043 M 0.424118 0 32 (xtracts the) widthshow 85.535995 632.690369 M 1.156418 0 32 (input parameters from an IPC message, and calls a serv) widthshow 317.413879 632.690369 M 1.156418 0 32 (er procedure to perform the) widthshow 85.535995 644.690369 M 1.005783 0 32 (operation. When the tar) widthshow 182.793457 644.690369 M 1.005783 0 32 (get serv) widthshow 215.029327 644.690369 M 1.005783 0 32 (er procedure or function returns, the generated inter-) widthshow 85.535995 656.690369 M 1.821243 0 32 (f) widthshow 88.766052 656.690369 M 1.821243 0 32 (ace module g) widthshow 145.678574 656.690369 M 1.821243 0 32 (athers the output parameters and correctly formats a reply message.) widthshow 4 FF 85.535995 668.690308 M 0.884125 0 32 (Note that this generated module does not perform the action of recei) widthshow 368.011536 668.690308 M 0.884125 0 32 (ving or sending) widthshow (messages, only the interpretation and generation of messages.) 85.536 680.69 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 10 10 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (6 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Mach Interface Generator \(MIG\)) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650665 M 0.694885 0 32 (A gi) widthshow 197.945023 112.650665 M 0.694885 0 32 (v) widthshow 202.795105 112.650665 M 0.694885 0 32 (en MIG speci\336cation \336le de\336nes either some interf) widthshow 411.139374 112.650665 M 0.694885 0 32 (aces to a ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 450.154053 112.650665 M 0.694885 0 32 (subsystem) widthshow 3 FF 490.704041 112.650665 M 0.694885 0 32 (, or the data) widthshow 180 124.65065 M 0.439331 0 32 (types of v) widthshow 220.068802 124.65065 M 0.439331 0 32 (alues to be passed to or returned from that subsystem, or both. By def) widthshow 503.700195 124.65065 M 0.439331 0 32 (ault, gi) widthshow 531.669678 124.65065 M 0.439331 0 32 (v-) widthshow 180 136.650635 M 0.206787 0 32 (en a \336le de\336ning interf) widthshow 271.827209 136.650635 M 0.206787 0 32 (aces with names ) widthshow 4 FF 340.487579 136.650635 M 0.206787 0 32 (foo) widthshow 3 FF 353.267578 136.650635 M 0.206787 0 32 (, ) widthshow 4 FF 358.474365 136.650635 M 0.206787 0 32 (bar) widthshow 3 FF 371.9646 136.650635 M 0.206787 0 32 (, etc. to subsystem ) widthshow 4 FF 448.901733 136.650635 M 0.206787 0 32 (sys) widthshow 3 FF 461.121735 136.650635 M 0.206787 0 32 (, the output of MIG) widthshow (will be as follo) 180.0 148.651 T (ws:) 239.47 148.651 T 5 (Times-Roman) 7 1 mymakefontmetric 5 FF 180.0 166.651 T 3 FF 193.535995 166.650604 M 0.484543 0 32 (The user interf) widthshow 253.275146 166.650604 M 0.484543 0 32 (ace module will consist of C functions named ) widthshow 4 FF 442.691498 166.650604 M 0.484543 0 32 (foo) widthshow 3 FF 455.471497 166.650604 M 0.484543 0 32 (, ) widthshow 4 FF 460.956055 166.650604 M 0.484543 0 32 (bar) widthshow 3 FF 474.446259 166.650604 M 0.484543 0 32 (, etc. that g) widthshow 520.009888 166.650604 M 0.484543 0 32 (ather) widthshow 193.535995 178.650589 M 0.440247 0 32 (the parameters de\336ned for these operations and generate a Mach IPC message for the) widthshow (desired port.) 193.536 190.651 T 5 FF 180.0 205.651 T 3 FF 193.535995 205.650558 M 0.545654 0 32 (The user header module will consist of the necessary data descriptions, and the func-) widthshow 193.535995 217.650543 M 0.923615 0 32 (tion prototypes for these C functions. The prototypes for these functions are deri) widthshow 525.709534 217.650543 M 0.923615 0 32 (v) widthshow 530.559631 217.650543 M 0.923615 0 32 (ed) widthshow (from the MIG speci\336cation in a w) 193.536 229.651 T (ay described at length belo) 329.526 229.651 T (w) 436.476 229.651 T (.) 443.047 229.651 T 5 FF 180.0 244.651 T 3 FF 193.535995 244.650513 M 0.750229 0 32 (The serv) widthshow 228.846313 244.650513 M 0.750229 0 32 (er interf) widthshow 261.426605 244.650513 M 0.750229 0 32 (ace module will consist of a top-le) widthshow 403.43811 244.650513 M 0.750229 0 32 (v) widthshow 408.288208 244.650513 M 0.750229 0 32 (el C function whose name is set) widthshow 3 FF 193.535995 256.650513 M 1.241943 0 32 (by the ) widthshow 4 FF 223.239883 256.650513 M 1.241943 0 32 (server) widthshow 247.860092 256.650513 M 1.241943 0 32 (demux) widthshow 3 FF 273.960083 256.650513 M 1.241943 0 32 ( declaration \(or to ) widthshow 4 FF 352.797882 256.650513 M 1.241943 0 32 (sys) widthshow 0 FF 365.017883 256.650513 M 1.241943 0 32 (_ser) widthshow 382.687927 256.650513 M 1.241943 0 32 (v) widthshow 387.588013 256.650513 M 1.241943 0 32 (er) widthshow 3 FF 396.468018 256.650513 M 1.241943 0 32 ( if no name is chosen\) appropriate) widthshow 3 FF (for use by ) 193.536 268.65 T 0 FF (mach_msg_ser) 236.026 268.65 T (v) 299.246 268.65 T (er) 304.146 268.65 T 3 FF (. This generated routine has the follo) 312.476 268.65 T (wing prototype:) 459.147 268.65 T (boolean_t ) 216.0 292.65 T 4 FF (sys) 257.94 292.65 T 0 FF (_ser) 270.16 292.65 T (v) 287.83 292.65 T (er) 292.73 292.65 T 3 FF ( \() 301.61 292.65 T 4 FF (mac) 307.44 292.65 T (h_msg_header_t) 323.95 292.65 T 3 FF ( *) 390.61 292.65 T 4 FF (InHeadP) 398.11 292.65 T 3 FF (, ) 433.101 292.65 T 4 FF (mac) 438.101 292.65 T (h_msg_header_t) 454.611 292.65 T 3 FF ( ) 521.271 292.65 T (*) 270.0 304.65 T 4 FF (OutHeadP) 275.0 304.65 T 3 FF (\);) 317.77 304.65 T 193.535995 322.650452 M 0.855286 0 32 (\(The actual parameters are of type ) widthshow 4 FF 338.057739 322.650452 M 0.855286 0 32 (mig_r) widthshow 361.577942 322.650452 M 0.855286 0 32 (eply_header_t) widthshow 3 FF 418.787964 322.650452 M 0.855286 0 32 ( which are cast from the sup-) widthshow 193.535995 334.650421 M 0.454865 0 32 (plied ) widthshow 4 FF 216.49086 334.650421 M 0.454865 0 32 (mac) widthshow 233.000946 334.650421 M 0.454865 0 32 (h_msg_header_t) widthshow 3 FF 299.66095 334.650421 M 0.454865 0 32 (.\) This routine e) widthshow 364.755615 334.650421 M 0.454865 0 32 (xamines the gi) widthshow 423.745483 334.650421 M 0.454865 0 32 (v) widthshow 428.595581 334.650421 M 0.454865 0 32 (en message header to see if) widthshow 193.535995 346.650391 M 0.317383 0 32 (the message is one recognized by this subsystem \(by e) widthshow 413.712524 346.650391 M 0.317383 0 32 (xamining ) widthshow 4 FF 454.309937 346.650391 M 0.317383 0 32 (InHead) widthshow 484.299927 346.650391 M 0.317383 0 32 (P) widthshow 6 (Symbol) 10 1 mymakefontmetric 6 FF 490.409912 346.650391 M 0.317383 0 32 widthshow 4 FF 500.279907 346.650391 M 0.317383 0 32 (msgh_id) widthshow 3 FF 534.169922 346.650391 M 0.317383 0 32 (\).) widthshow 193.535995 358.650391 M 0.573074 0 32 (If the message is not recognized, F) widthshow 335.374878 358.650391 M 0.573074 0 32 (ALSE is returned by ) widthshow 4 FF 422.657166 358.650391 M 0.573074 0 32 (sys) widthshow 0 FF 434.877167 358.650391 M 0.573074 0 32 (_ser) widthshow 452.547241 358.650391 M 0.573074 0 32 (v) widthshow 457.447266 358.650391 M 0.573074 0 32 (er) widthshow 3 FF 465.777588 358.650391 M 0.573074 0 32 (. If the message is) widthshow 193.535995 370.650391 M 0.959427 0 32 (recognized, the parameters from the IPC message are unpack) widthshow 445.761505 370.650391 M 0.959427 0 32 (ed and the correspond-) widthshow 193.535995 382.65036 M 0.298767 0 32 (ing routine \(i.e., ) widthshow 4 FF 261.092285 382.65036 M 0.298767 0 32 (foo) widthshow 3 FF 273.872314 382.65036 M 0.298767 0 32 (, ) widthshow 4 FF 279.171082 382.65036 M 0.298767 0 32 (bar) widthshow 3 FF 292.661285 382.65036 M 0.298767 0 32 (, etc.\) will be called, with TR) widthshow 410.984131 382.65036 M 0.298767 0 32 (UE returned by ) widthshow 4 FF 476.030426 382.65036 M 0.298767 0 32 (sys) widthshow 0 FF 488.250427 382.65036 M 0.298767 0 32 (_ser) widthshow 505.920471 382.65036 M 0.298767 0 32 (v) widthshow 510.820557 382.65036 M 0.298767 0 32 (er) widthshow 3 FF 519.150879 382.65036 M 0.298767 0 32 (. The) widthshow 193.535995 394.65033 M 0.675537 0 32 (return code from the called function will be returned as the ) widthshow 4 FF 438.966919 394.65033 M 0.675537 0 32 (RetCode) widthshow 3 FF 473.406921 394.65033 M 0.675537 0 32 ( \336eld in the out-) widthshow 193.535995 406.65033 M 1.620255 0 32 (put message. By def) widthshow 279.39682 406.65033 M 1.620255 0 32 (ault, the routines called in the serv) widthshow 426.448425 406.65033 M 1.620255 0 32 (er ha) widthshow 447.578796 406.65033 M 1.620255 0 32 (v) widthshow 452.428894 406.65033 M 1.620255 0 32 (e the same names as) widthshow 193.535995 418.65033 M 1.102097 0 32 (those called by the user since it is assumed that the user and serv) widthshow 466.283356 418.65033 M 1.102097 0 32 (er li) widthshow 482.965576 418.65033 M 1.102097 0 32 (v) widthshow 487.815674 418.65033 M 1.102097 0 32 (e in separate) widthshow (spaces.) 193.536 430.65 T 193.535995 445.650269 M 0.777588 0 32 (The serv) widthshow 228.873672 445.650269 M 0.777588 0 32 (er interf) widthshow 261.481323 445.650269 M 0.777588 0 32 (ace module also contains a message typing routine named ) widthshow 4 FF 502.609619 445.650269 M 0.777588 0 32 (server) widthshow 527.229858 445.650269 M 0.777588 0 32 (de-) widthshow 4 FF 193.535995 457.650269 M 1.833038 0 32 (mux) widthshow 0 FF 210.195999 457.650269 M 1.833038 0 32 (_r) widthshow 219.4561 457.650269 M 1.833038 0 32 (outine) widthshow 3 FF 246.126099 457.650269 M 1.833038 0 32 ( \(that is, the same name as the message de-multiple) widthshow 467.443542 457.650269 M 1.833038 0 32 (xing routine with) widthshow 0 FF 193.535995 469.650269 M 0.3685 0 32 (_r) widthshow 202.796097 469.650269 M 0.3685 0 32 (outine) widthshow 3 FF 229.466095 469.650269 M 0.3685 0 32 ( appended\) useful for quickly determining if the gi) widthshow 434.354248 469.650269 M 0.3685 0 32 (v) widthshow 439.204346 469.650269 M 0.3685 0 32 (en message is acceptable) widthshow 3 FF 193.535995 481.650238 M 0.840256 0 32 (to this MIG subsystem \(and which internal stub should be called\). This routine is of) widthshow 3 FF 193.535995 493.650208 M 0.48381 0 32 (use when messages recei) widthshow 294.427582 493.650208 M 0.48381 0 32 (v) widthshow 299.277649 493.650208 M 0.48381 0 32 (ed from a gi) widthshow 349.079224 493.650208 M 0.48381 0 32 (v) widthshow 353.929321 493.650208 M 0.48381 0 32 (en port may be directed to multiple MIG sub-) widthshow (systems. This generated routine has the follo) 193.536 505.65 T (wing prototype:) 371.876 505.65 T (typedef v) 216.0 529.65 T (oid \(*) 253.29 529.65 T 4 FF (mig_r) 276.9 529.65 T (outine_t) 300.34 529.65 T 3 FF (\) \(mach_msg_header_t *) 333.12 529.65 T 4 FF (InHeadP) 432.54 529.65 T 3 FF (, ) 467.531 529.65 T (mach_msg_header_t *) 270.0 541.65 T 4 FF (OutHeadP) 360.26 541.65 T 3 FF (\);) 403.03 541.65 T 4 FF (mig_r) 216.0 565.65 T (outine_t) 239.44 565.65 T 3 FF ( ) 272.22 565.65 T 4 FF (sys) 274.72 565.65 T 0 FF (_ser) 286.94 565.65 T (v) 304.61 565.65 T (er_r) 309.51 565.65 T (outine) 327.65 565.65 T 3 FF ( \() 354.32 565.65 T 4 FF (mac) 360.15 565.65 T (h_msg_header_t) 376.661 565.65 T 3 FF ( *) 443.321 565.65 T 4 FF (InHeadP) 450.821 565.65 T 3 FF (\);) 486.921 565.65 T 193.535995 583.650146 M 0.982391 0 32 (This routine e) widthshow 250.900864 583.650146 M 0.982391 0 32 (xamines the gi) widthshow 310.945801 583.650146 M 0.982391 0 32 (v) widthshow 315.795868 583.650146 M 0.982391 0 32 (en message header to see if the message is one recog-) widthshow 193.535995 595.650146 M 0.465775 0 32 (nized by this subsystem \(by e) widthshow 313.764954 595.650146 M 0.465775 0 32 (xamining ) widthshow 4 FF 354.510742 595.650146 M 0.465775 0 32 (InHead) widthshow 384.500732 595.650146 M 0.465775 0 32 (P) widthshow 6 FF 390.610718 595.650146 M 0.465775 0 32 widthshow 4 FF 400.480713 595.650146 M 0.465775 0 32 (msgh_id) widthshow 3 FF 434.370728 595.650146 M 0.465775 0 32 (\). If the message is recog-) widthshow (nized, a pointer to a message unpacking routine is returned. The intended use is:) 193.536 607.65 T 3 FF ([1]) 195.34 621.65 T 0 FF (mig_r) 216.0 621.65 T (eply_setup) 241.37 621.65 T 3 FF ( \(&) 286.93 621.65 T 4 FF (r) 300.54 621.65 T (equest) 304.06 621.65 T 3 FF (, &) 329.61 621.65 T 4 FF (r) 342.39 621.65 T (eply) 345.911 621.65 T 3 FF (\);) 362.571 621.65 T 3 FF ([2]) 195.34 633.65 T 3 FF (if \(\() 216.0 633.65 T 4 FF (r) 231.27 633.65 T (outine) 234.71 633.65 T 3 FF ( = ) 259.71 633.65 T 4 FF (sys1) 270.35 633.65 T 0 FF (_ser) 287.57 633.65 T (v) 305.24 633.65 T (er_r) 310.14 633.65 T (outine) 328.28 633.65 T 3 FF ( \(&) 354.95 633.65 T 4 FF (r) 368.56 633.65 T (equest) 372.081 633.65 T 3 FF (\) != 0\) ||) 397.631 633.65 T 3 FF ([3]) 195.34 645.65 T 3 FF (\() 288.0 645.65 T 4 FF (r) 291.33 645.65 T (outine) 294.77 645.65 T 3 FF ( = ) 319.77 645.65 T 4 FF (sys2) 330.41 645.65 T 0 FF (_ser) 347.63 645.65 T (v) 365.3 645.65 T (er_r) 370.2 645.65 T (outine) 388.34 645.65 T 3 FF ( \(&) 415.01 645.65 T 4 FF (r) 428.62 645.65 T (equest) 432.141 645.65 T 3 FF (\) != 0\) ||) 457.691 645.65 T ([4]) 195.34 657.65 T 3 FF (\() 288.0 657.65 T 4 FF (r) 291.33 657.65 T (outine) 294.77 657.65 T 3 FF ( = ) 319.77 657.65 T 4 FF (sys3) 330.41 657.65 T 0 FF (_ser) 347.63 657.65 T (v) 365.3 657.65 T (er_r) 370.2 657.65 T (outine) 388.34 657.65 T 3 FF ( \(&) 415.01 657.65 T 4 FF (r) 428.62 657.65 T (equest) 432.141 657.65 T 3 FF (\) != 0\)\)) 457.691 657.65 T ([5]) 195.34 669.65 T 3 FF (\(*) 252.0 669.65 T 4 FF (r) 260.33 669.65 T (outine) 263.77 669.65 T 3 FF (\) \(&) 288.77 669.65 T 4 FF (r) 305.71 669.65 T (equest) 309.23 669.65 T 3 FF (, &) 334.78 669.65 T 4 FF (r) 347.56 669.65 T (eply) 351.081 669.65 T 3 FF (\);) 367.741 669.65 T 558 474.983582 2 9.999985 NF 558 522.983521 2 21.999969 NF 558 614.983459 2 57.999924 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 11 11 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 427 731.706665 M -2.5 0 32 (7 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (MIG Speci\336cation File Basics) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666656 M 0.513565 0 32 (MIG pro) widthshow 107.633652 114.666656 M 0.513565 0 32 (vides man) widthshow 148.827301 114.666656 M 0.513565 0 32 (y controls o) widthshow 196.924515 114.666656 M 0.513565 0 32 (v) widthshow 201.774597 114.666656 M 0.513565 0 32 (er this generation process, including changing the names) widthshow (of the v) 72.0 126.667 T (arious generated entities.) 102.3 126.667 T 72 168.999939 360 3.024002 CR 432 170.51 M 72 170.51 L S 0 0 612 792 CR 4 (Times-Bold) 14 1 mymakefontmetric 4 FF (MIG Speci\336cation File Basics) 72.0 164.333 T 3 FF 72 188.690598 M 0.021469 0 32 (A MIG speci\336cation \336le contains the follo) widthshow 241.30896 188.690598 M 0.021469 0 32 (wing components, some of which may be omit-) widthshow (ted.) 72.0 200.691 T 5 (Times-Roman) 7 1 mymakefontmetric 5 FF 72.0 218.691 T 3 FF (SubSystem identi\336cation) 85.536 218.691 T 5 FF 72.0 233.691 T 3 FF (Serv) 85.536 233.691 T (erDemux declaration) 103.716 233.691 T 5 FF 72.0 248.691 T 3 FF (RcsId speci\336cation) 85.536 248.691 T 5 FF 72.0 263.691 T 3 FF (T) 85.536 263.691 T (ype speci\336cations) 90.846 263.691 T 5 FF 72.0 278.691 T 3 FF (Import declarations) 85.536 278.691 T 5 FF 72.0 293.69 T 3 FF (Operation descriptions) 85.536 293.69 T 5 FF 72.0 308.69 T 3 FF (Options declarations) 85.536 308.69 T 3 FF 72 332.69046 M 1.208267 0 32 (A MIG speci\336cation \336le may include comments and preprocessor macros such as) widthshow 1 FF 411.620972 332.69046 M 1.208267 0 32 ( #in-) widthshow (clude) 72.0 344.69 T 3 FF ( or ) 94.78 344.69 T 1 FF (#de\336ne) 108.11 344.69 T 3 FF (. F) 138.67 344.69 T (or e) 149.08 344.69 T (xample the statement:) 164.2 344.69 T (#include) 108.0 368.69 T 1 FF ( ) 142.44 368.69 T 3 FF (can be used to include the type de\336nitions for standard Mach and C types.) 72.0 392.69 T 72 416.690399 M 1.07402 0 32 (The subsystem identi\336cation should appear \336rst for clarity) widthshow 312.458496 416.690399 M 1.07402 0 32 (. T) widthshow 323.842957 416.690399 M 1.07402 0 32 (ypes must be declared be-) widthshow 72 428.690369 M 0.200653 0 32 (fore the) widthshow 102.870743 428.690369 M 0.200653 0 32 (y are used. Code is generated for the operations and import declarations in the or-) widthshow 72 440.690369 M 0.426331 0 32 (der in which the) widthshow 137.839081 440.690369 M 0.426331 0 32 (y appear in the de\336nitions \336les. Options af) widthshow 310.563538 440.690369 M 0.426331 0 32 (fect the operations that follo) widthshow 424.778992 440.690369 M 0.426331 0 32 (w) widthshow (them.) 72.0 452.69 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (SubSystem Identi\336cation) 72.0 484.024 T 3 FF (The subsystem identi\336cation statement is of the form:) 72.0 500.69 T (subsystem) 108.0 524.69 T 7 (Times-Italic) 10 1 mymakefontmetric 7 FF ( sys messa) 149.67 524.69 T (g) 191.23 524.69 T (e-base-id;) 196.13 524.69 T 72 548.690308 M 0.311615 0 32 (sys) widthshow 3 FF 84.220001 548.690308 M 0.311615 0 32 ( is the name of the subsystem. It is used as the pre\336x for all generated \336le names. The) widthshow 72 560.690308 M 0.388138 0 32 (user \336le name will be ) widthshow 7 FF 162.540695 560.690308 M 0.388138 0 32 (sys) widthshow 3 FF 174.760696 560.690308 M 0.388138 0 32 (User) widthshow 193.091003 560.690308 M 0.388138 0 32 (.c, the user header \336le will be) widthshow 7 FF 313.169861 560.690308 M 0.388138 0 32 ( sys) widthshow 3 FF 328.277985 560.690308 M 0.388138 0 32 (.h, and the serv) widthshow 390.112488 560.690308 M 0.388138 0 32 (er \336le will) widthshow (be ) 72.0 572.69 T 7 FF (sys) 83.94 572.69 T 3 FF (Serv) 96.16 572.69 T (er) 114.34 572.69 T (.c. These \336le names may be o) 121.56 572.69 T (v) 239.72 572.69 T (erridden by command line switches.) 244.571 572.69 T 7 FF 72 596.690247 M 0.663528 0 32 (messa) widthshow 96.340057 596.690247 M 0.663528 0 32 (g) widthshow 101.240112 596.690247 M 0.663528 0 32 (e-base-id) widthshow 3 FF 138.450119 596.690247 M 0.663528 0 32 ( is a decimal inte) widthshow 208.724319 596.690247 M 0.663528 0 32 (ger that is used as the IPC message ID \() widthshow 7 FF 373.83609 596.690247 M 0.663528 0 32 (msgh_id) widthshow 3 FF 407.726074 596.690247 M 0.663528 0 32 ( \336eld\)) widthshow 72 608.690247 M 0.039902 0 32 (of the \336rst operation in the speci\336cation \336le. Operations are numbered sequentially be) widthshow 415.888916 608.690247 M 0.039902 0 32 (gin-) widthshow 72 620.690247 M 0.739136 0 32 (ning with this base. The ) widthshow 7 FF 174.025681 620.690247 M 0.739136 0 32 (messa) widthshow 198.365738 620.690247 M 0.739136 0 32 (g) widthshow 203.265793 620.690247 M 0.739136 0 32 (e-base-id) widthshow 3 FF 240.4758 620.690247 M 0.739136 0 32 ( can be selected arbitrarily by the implementor) widthshow 72 632.690186 M 1.637421 0 32 (of the subsystem, b) widthshow 153.932373 632.690186 M 1.637421 0 32 (ut it is recommended for \322of) widthshow 275.459625 632.690186 M 1.637421 0 32 widthshow 72 644.690186 M 1.389038 0 32 (quest an unused ) widthshow 7 FF 142.547119 644.690186 M 1.389038 0 32 (messa) widthshow 166.887177 644.690186 M 1.389038 0 32 (g) widthshow 171.787231 644.690186 M 1.389038 0 32 (e-base-id) widthshow 3 FF 208.997238 644.690186 M 1.389038 0 32 ( from the Mach librarian. The only technical require-) widthshow 72 656.690186 M 0.80246 0 32 (ment is that all requests sent to a single service port should ha) widthshow 328.629639 656.690186 M 0.80246 0 32 (v) widthshow 333.479736 656.690186 M 0.80246 0 32 (e dif) widthshow 352.082336 656.690186 M 0.80246 0 32 (ferent IDs, to allo) widthshow 424.779846 656.690186 M 0.80246 0 32 (w) widthshow 72 668.690186 M 0.5793 0 32 (the serv) widthshow 103.809387 668.690186 M 0.5793 0 32 (er to easily distinguish them. The IPC message ID for the reply message for an) widthshow 426.999695 668.690186 M 0.5793 0 32 (y) widthshow 3 FF (gi) 72.0 680.69 T (v) 79.53 680.69 T (en user message is 100 \(decimal\) more than the request ID.) 84.38 680.69 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 12 12 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (8 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Mach Interface Generator \(MIG\)) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Bold) 12 1 mymakefontmetric 3 FF (Ser) 180.0 113.984 T (v) 197.208 113.984 T (erDemux Declaration) 203.088 113.984 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 180 130.650665 M 0.559189 0 32 (By def) widthshow 207.399246 130.650665 M 0.559189 0 32 (ault, the serv) widthshow 259.747711 130.650665 M 0.559189 0 32 (er de-multiple) widthshow 316.536987 130.650665 M 0.559189 0 32 (xing routine in the serv) widthshow 411.393829 130.650665 M 0.559189 0 32 (er stub for use by ) widthshow 0 FF 486.119781 130.650665 M 0.559189 0 32 (mach_msg_-) widthshow 180 142.65065 M 0.307419 0 32 (ser) widthshow 192.670059 142.65065 M 0.307419 0 32 (v) widthshow 197.570114 142.65065 M 0.307419 0 32 (er) widthshow 4 FF 206.450119 142.65065 M 0.307419 0 32 ( generated by MIG is called) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 319.347229 142.65065 M 0.307419 0 32 ( sys) widthshow 0 FF 334.374634 142.65065 M 0.307419 0 32 (_ser) widthshow 352.044708 142.65065 M 0.307419 0 32 (v) widthshow 356.944763 142.65065 M 0.307419 0 32 (er) widthshow 4 FF 365.275085 142.65065 M 0.307419 0 32 (. A dif) widthshow 391.470032 142.65065 M 0.307419 0 32 (ferent name can be used if set by the) widthshow 5 FF (server) 180.0 154.651 T (demux) 204.62 154.651 T 4 FF ( declaration, of the form:) 230.72 154.651 T (serv) 216.0 178.651 T (erdemux ) 232.51 178.651 T 5 FF (identi\336er) 270.0 178.651 T 4 FF (;) 306.11 178.651 T 180 202.650604 M 0.278427 0 32 (The message typing routine al) widthshow 301.553772 202.650604 M 0.278427 0 32 (w) widthshow 308.673828 202.650604 M 0.278427 0 32 (ays has the same name as the serv) widthshow 446.272919 202.650604 M 0.278427 0 32 (er de-multiple) widthshow 502.781433 202.650604 M 0.278427 0 32 (xing rou-) widthshow (tine with ) 180.0 214.651 T 0 FF (_r) 217.78 214.651 T (outine) 227.04 214.651 T 4 FF ( appended.) 253.71 214.651 T 3 FF (RcsId Speci\336cation) 180.0 245.984 T 4 FF (The) 180.0 262.651 T 5 FF ( r) 195.55 262.651 T (csid) 201.57 262.651 T 4 FF ( speci\336cation is of the form:) 217.68 262.651 T (rcsid \322) 216.0 286.651 T 5 FF ($Header information$) 242.38 286.651 T 4 FF 332.1 286.651 T 180 310.650543 M 0.702621 0 32 (This speci\336cation causes a string v) widthshow 322.413269 310.650543 M 0.702621 0 32 (ariable) widthshow 5 FF 349.62326 310.650543 M 0.702621 0 32 ( Sys_user_r) widthshow 397.165955 310.650543 M 0.702621 0 32 (scid) widthshow 4 FF 413.27594 310.650543 M 0.702621 0 32 ( in the user and ) widthshow 5 FF 480.389038 310.650543 M 0.702621 0 32 (Sys_server_r) widthshow 532.229248 310.650543 M 0.702621 0 32 (c-) widthshow (sid) 180.0 322.651 T 4 FF ( in the serv) 191.67 322.651 T (er module to be set to the input string.) 235.68 322.651 T 3 FF (T) 180.0 353.984 T (ype Declarations) 187.116 353.984 T 4 FF (A type declaration is of the form:) 180.0 370.651 T (type ) 216.0 394.65 T 5 FF (user) 235.72 394.65 T (-typename) 252.74 394.65 T 4 FF ( = ) 294.39 394.65 T 0 FF (type-desc) 305.03 394.65 T 4 FF ( [) 345.02 394.65 T 0 FF (translation-inf) 350.85 394.65 T (o) 412.27 394.65 T 4 FF (];) 417.27 394.65 T 4 FF 180 418.650482 M 0.27919 0 32 (\(The [] indicate that the ) widthshow 0 FF 278.315979 418.650482 M 0.27919 0 32 (translation-inf) widthshow 339.736084 418.650482 M 0.27919 0 32 (o) widthshow 4 FF 344.736084 418.650482 M 0.27919 0 32 ( is optional.\) The purpose of type declarations is) widthshow 4 FF 180 430.650452 M 1.29863 0 32 (to inform MIG about the types to use for the parameters of the v) widthshow 453.532349 430.650452 M 1.29863 0 32 (arious operation rou-) widthshow 180 442.650452 M 0.778534 0 32 (tines, and to inform MIG of the storage requirements for parameters and the method by) widthshow 180 454.650452 M 0.959961 0 32 (which the parameters are to be \322marshalled\323 to form the data for an IPC message. It is) widthshow 180 466.650421 M 0.208664 0 32 (possible to describe the types of the parameters for a routine directly in the declaration of) widthshow 180 478.650391 M 0.251923 0 32 (a routine; b) widthshow 225.853958 478.650391 M 0.251923 0 32 (ut, it is often more con) widthshow 317.263794 478.650391 M 0.251923 0 32 (v) widthshow 322.113892 478.650391 M 0.251923 0 32 (enient to de\336ne the types and their attrib) widthshow 485.047455 478.650391 M 0.251923 0 32 (utes separate-) widthshow 180 490.650391 M 0.931473 0 32 (ly) widthshow 187.130356 490.650391 M 0.931473 0 32 (, gi) widthshow 200.591965 490.650391 M 0.931473 0 32 (ving this collection of information a ) widthshow 0 FF 352.84082 490.650391 M 0.931473 0 32 (user) widthshow 370.801025 490.650391 M 0.931473 0 32 (-typename) widthshow 4 FF 415.791016 490.650391 M 0.931473 0 32 (, and then just simply use this) widthshow 0 FF (user) 180.0 502.65 T (-typename) 197.96 502.65 T 4 FF ( when specifying a routine parameter) 242.95 502.65 T (.) 390.971 502.65 T 180 526.650391 M 0.858612 0 32 (The ) widthshow 5 FF 198.908615 526.650391 M 0.858612 0 32 (user) widthshow 215.928726 526.650391 M 0.858612 0 32 (-typename) widthshow 4 FF 257.578735 526.650391 M 0.858612 0 32 ( is the name by which MIG will refer to the type. It must e) widthshow 502.929443 526.650391 M 0.858612 0 32 (v) widthshow 507.779541 526.650391 M 0.858612 0 32 (entually) widthshow 180 538.65033 M 0.409927 0 32 (be de\336ned in terms of b) widthshow 276.559753 538.65033 M 0.409927 0 32 (uilt-in MIG types, although ) widthshow 0 FF 390.699463 538.65033 M 0.409927 0 32 () widthshow 4 FF 487.929443 538.65033 M 0.409927 0 32 ( and ) widthshow 0 FF 508.189331 538.65033 M 0.409927 0 32 ( ) widthshow 4 FF 259.403564 550.65033 M 0.933563 0 32 (already mak) widthshow 309.387207 550.65033 M 0.933563 0 32 (e most of the needed de\336nitions. A MIG type de\336nition) widthshow (really de\336nes three related notions:) 180.0 562.65 T 6 (Times-Roman) 7 1 mymakefontmetric 6 FF 180.0 580.65 T 4 FF (The MIG type name itself, used in making ne) 193.536 580.65 T (w MIG type declarations.) 375.206 580.65 T 6 FF 180.0 595.65 T 4 FF 193.535995 595.650269 M 0.600204 0 32 (The underlying Mach IPC type. F) widthshow 331.377106 595.650269 M 0.600204 0 32 (or e) widthshow 347.097412 595.650269 M 0.600204 0 32 (xample, if a MIG type is de\336ned as an array of) widthshow 193.535995 607.650269 M 0.828171 0 32 (structures of the basic type MA) widthshow 323.087097 607.650269 M 0.828171 0 32 (CH_MSG_TYPE_INTEGER_32, then the Mach IPC) widthshow 193.535995 619.650269 M 0.056641 0 32 (type \(which is placed in the ) widthshow 5 FF 306.635864 619.650269 M 0.056641 0 32 (msgt_name) widthshow 4 FF 352.185852 619.650269 M 0.056641 0 32 ( \336eld in a data descriptor\) will be MA) widthshow 503.329224 619.650269 M 0.056641 0 32 (CH_MS-) widthshow 193.535995 631.650269 M 1.149368 0 32 (G_TYPE_INTEGER_32. MIG will set the ) widthshow 5 FF 372.602844 631.650269 M 1.149368 0 32 (msgt_size) widthshow 4 FF 411.492859 631.650269 M 1.149368 0 32 ( \336eld accordingly \(in this case,) widthshow 4 FF 193.535995 643.650208 M 0.232391 0 32 (32 bits\), and will compute the v) widthshow 321.620483 643.650208 M 0.232391 0 32 (alue for ) widthshow 5 FF 355.405273 643.650208 M 0.232391 0 32 (msgt_number) widthshow 4 FF 409.845276 643.650208 M 0.232391 0 32 ( on the basis of ) widthshow 5 FF 474.057251 643.650208 M 0.232391 0 32 (msgt_size) widthshow 4 FF 512.947266 643.650208 M 0.232391 0 32 (, gi) widthshow 525.709778 643.650208 M 0.232391 0 32 (v) widthshow 530.559814 643.650208 M 0.232391 0 32 (en) widthshow (the array and structure sizes gi) 193.536 655.65 T (v) 315.196 655.65 T (en in the MIG type declaration.) 320.046 655.65 T 6 FF 180.0 670.65 T 4 FF 193.535995 670.650208 M 0.39711 0 32 (The data types used in the generated C code. The MIG type name is used, by def) widthshow 522.499878 670.650208 M 0.39711 0 32 (ault,) widthshow 193.535995 682.650146 M 0.293121 0 32 (whene) widthshow 219.386139 682.650146 M 0.293121 0 32 (v) widthshow 224.236221 682.650146 M 0.293121 0 32 (er a C type name is used. The C types to be used can be directly speci\336ed. Ei-) widthshow 193.535995 694.650146 M 0.41156 0 32 (ther w) widthshow 219.117615 694.650146 M 0.41156 0 32 (ay) widthshow 227.907974 694.650146 M 0.41156 0 32 (, MIG separates the notions of its type name by which it refers to parameters) widthshow 558 171.983963 2 45.999954 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 13 13 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 427 731.706665 M -2.5 0 32 (9 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (MIG Speci\336cation File Basics) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 85.535995 114.666656 M 1.493103 0 32 (and the type names used in the generated C code. Re) widthshow 311.107117 114.666656 M 1.493103 0 32 (g) widthshow 316.057159 114.666656 M 1.493103 0 32 (ardless of whether the MIG) widthshow 85.535995 126.666641 M 1.05629 0 32 (type name is used or a user speci\336ed type name is used for the C data types, the C) widthshow 85.535995 138.666626 M 1.932556 0 32 (data types must be speci\336ed in some header \336le \322imported\323 into the generated C) widthshow (code, as well as the users of this code.) 85.536 150.667 T 72 174.666595 M 0.9328 0 32 (The ) widthshow 1 FF 90.982803 174.666595 M 0.9328 0 32 (type-desc) widthshow 3 FF 130.972809 174.666595 M 0.9328 0 32 ( de\336nes the properties of the MIG type, such as its deri) widthshow 360.393768 174.666595 M 0.9328 0 32 (v) widthshow 365.143921 174.666595 M 0.9328 0 32 (ation from basic) widthshow 72 186.66658 M 0.343933 0 32 (MIG types, and the storage attrib) widthshow 205.719788 186.66658 M 0.343933 0 32 (utes for the type. It also speci\336es attrib) widthshow 362.90744 186.66658 M 0.343933 0 32 (utes that will im-) widthshow (plicitly or e) 72.0 198.667 T (xplicitly set v) 117.96 198.667 T (arious IPC \337ags in generated type descriptors:) 172.16 198.667 T 4 (Times-Roman) 7 1 mymakefontmetric 4 FF 72.0 216.667 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF (msgt_inline) 85.536 216.667 T 3 FF ( \321 data follo) 132.206 216.667 T (ws the type descriptor \(as opposed to a pointer to the data\)) 185.006 216.667 T 4 FF 72.0 231.667 T 5 FF 85.535995 231.666534 M 0.55336 0 32 (msgt_longform) widthshow 3 FF 146.095993 231.666534 M 0.55336 0 32 ( \321 type descriptor is the long form \() widthshow 5 FF 297.172882 231.666534 M 0.55336 0 32 (mac) widthshow 313.682983 231.666534 M 0.55336 0 32 (h_msg_type_long) widthshow 3 FF 384.232971 231.666534 M 0.55336 0 32 ( as opposed) widthshow (to ) 85.536 243.667 T 5 FF (mac) 95.816 243.667 T (h_msg_type) 112.326 243.667 T 3 FF (\)) 160.096 243.667 T 4 FF 72.0 258.667 T 5 FF (msgt_deallocate) 85.536 258.667 T 3 FF ( \321 de-allocate related port or storage) 151.086 258.667 T 72 282.666504 M 0.576096 0 32 (The optional ) widthshow 1 FF 126.482193 282.666504 M 0.576096 0 32 (translation-inf) widthshow 187.902328 282.666504 M 0.576096 0 32 (o) widthshow 3 FF 192.902328 282.666504 M 0.576096 0 32 ( de\336nes the C types to use, as well as translation functions) widthshow (to be called to translate data types in the generated serv) 72.0 294.666 T (er stub) 292.91 294.666 T (.) 319.45 294.666 T 72 318.666443 M 1.959946 0 32 (MIG understands the Mach IPC types as b) widthshow 255.219742 318.666443 M 1.959946 0 32 (uilt-in types. It allo) widthshow 337.519714 318.666443 M 1.959946 0 32 (ws the construction of) widthshow 72 330.666443 M 0.499298 0 32 (types from these b) widthshow 146.89801 330.666443 M 0.499298 0 32 (uilt-in types as structures of, arrays of and \322pointers\323 to these basic or) widthshow (generated types.) 72.0 342.666 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Import Declarations) 72.0 374.0 T 3 FF 72 390.666412 M 0.289993 0 32 (If an) widthshow 90.740082 390.666412 M 0.289993 0 32 (y of the type names to be used in the generated C code are other than the standard C) widthshow 72 402.666382 M 0.374298 0 32 (types \(e.g. int, char) widthshow 149.373123 402.666382 M 0.374298 0 32 (, etc.\), C type de\336nition \336les must be imported into the user and serv-) widthshow 72 414.666382 M 2.177429 0 32 (er interf) widthshow 106.007492 414.666382 M 2.177429 0 32 (ace modules so that the) widthshow 207.887299 414.666382 M 2.177429 0 32 (y will compile. The) widthshow 5 FF 292.749573 414.666382 M 2.177429 0 32 ( import) widthshow 3 FF 324.097015 414.666382 M 2.177429 0 32 ( declarations specify \336les) widthshow (which are imported into the modules generated by MIG. ) 72.0 426.666 T (An) 72.0 450.666 T 5 FF ( import) 84.22 450.666 T 3 FF ( declaration is of one of the follo) 113.39 450.666 T (wing forms: ) 243.95 450.666 T (import ) 108.0 474.666 T 1 FF 137.17 474.666 T 3 FF (;) 176.61 474.666 T (uimport ) 108.0 498.666 T 1 FF 142.17 498.666 T 3 FF (;) 181.61 498.666 T (simport) 108.0 522.666 T 5 FF ( ) 138.56 522.666 T 1 FF 141.06 522.666 T 3 FF (;) 180.5 522.666 T 72 546.66626 M 0.279922 0 32 (where) widthshow 5 FF 96.430008 546.66626 M 0.279922 0 32 ( ) widthshow 1 FF 99.20993 546.66626 M 0.279922 0 32 widthshow 3 FF 138.649933 546.66626 M 0.279922 0 32 ( is in a form acceptable by) widthshow 1 FF 245.859482 546.66626 M 0.279922 0 32 ( cpp) widthshow 3 FF 264.199402 546.66626 M 0.279922 0 32 ( in ) widthshow 1 FF 277.539246 546.66626 M 0.279922 0 32 (#include) widthshow 3 FF 313.659241 546.66626 M 0.279922 0 32 ( statements, e.g. ) widthshow 1 FF 381.158997 546.66626 M 0.279922 0 32 (<\336le-name>) widthshow 3 FF (or ) 72.0 558.666 T 1 FF 82.83 558.666 T 3 FF (.) 132.27 558.666 T (F) 72.0 582.666 T (or e) 77.41 582.666 T (xample:) 92.53 582.666 T (import \322) 108.0 606.666 T 1 FF (my_defs.h) 141.61 606.666 T 3 FF 185.22 606.666 T (import \322) 108.0 630.666 T 1 FF (/usr/mach/include/cthr) 141.61 630.666 T (eads.h) 238.66 630.666 T 3 FF 265.61 630.666 T (import ) 108.0 654.666 T 1 FF () 160.46 654.666 T 3 FF (;) 193.11 654.666 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 14 14 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (10 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Mach Interface Generator \(MIG\)) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Italic) 10 1 mymakefontmetric 3 FF 180 112.650665 M 0.872269 0 32 (import) widthshow 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 206.669998 112.650665 M 0.872269 0 32 ( declarations are included in both the user and serv) widthshow 417.380524 112.650665 M 0.872269 0 32 (er side code. ) widthshow 3 FF 472.757324 112.650665 M 0.872269 0 32 (uimport) widthshow 4 FF 504.427338 112.650665 M 0.872269 0 32 ( declara-) widthshow 180 124.65065 M 0.447311 0 32 (tions are included in just the user side. ) widthshow 3 FF 339.398499 124.65065 M 0.447311 0 32 (simport) widthshow 4 FF 369.958496 124.65065 M 0.447311 0 32 ( declarations are included in just the serv-) widthshow (er side.) 180.0 136.651 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Standard Operations) 180.0 167.984 T 4 FF (There are tw) 180.0 184.651 T (o types of standard operations that may be speci\336ed:) 230.43 184.651 T 6 (Times-Roman) 7 1 mymakefontmetric 6 FF 180.0 202.651 T 4 FF (Routine) 193.536 202.651 T 6 FF 180.0 217.651 T 4 FF (Simple Routine) 193.536 217.651 T 180 241.650574 M 1.296616 0 32 (Also, the k) widthshow 226.103287 241.650574 M 1.296616 0 32 (e) widthshow 230.393372 241.650574 M 1.296616 0 32 (yw) widthshow 242.513428 241.650574 M 1.296616 0 32 (ord) widthshow 3 FF 255.84343 241.650574 M 1.296616 0 32 ( skip) widthshow 4 FF 275.750061 241.650574 M 1.296616 0 32 ( is pro) widthshow 303.193359 241.650574 M 1.296616 0 32 (vided to allo) widthshow 355.536743 241.650574 M 1.296616 0 32 (wed a procedure to be remo) widthshow 473.21991 241.650574 M 1.296616 0 32 (v) widthshow 478.070007 241.650574 M 1.296616 0 32 (ed from a sub-) widthshow 180 253.650558 M 0.592453 0 32 (system without causing all the subsequent message interf) widthshow 412.637238 253.650558 M 0.592453 0 32 (aces to be renumbered. It caus-) widthshow (es no code to be generated, b) 180.0 265.651 T (ut uses up a) 295.6 265.651 T 3 FF ( msgh_id) 342.54 265.651 T 4 FF ( number) 378.93 265.651 T (.) 411.43 265.651 T (An operation de\336nition has the syntax:) 180.0 289.651 T 3 FF (oper) 216.0 313.651 T (ation-type) 234.18 313.651 T 4 FF ( ) 274.73 313.651 T 0 FF (operation-name) 277.23 313.651 T 4 FF ( \() 345.0 313.651 T 0 FF (parameter) 350.83 313.651 T (-list) 395.44 313.651 T 3 FF (\)) 411.55 313.651 T 4 FF (;) 414.88 313.651 T 180 337.650513 M 0.549316 0 32 (The) widthshow 3 FF 195.550003 337.650513 M 0.549316 0 32 ( ) widthshow 0 FF 198.599319 337.650513 M 0.549316 0 32 (parameter) widthshow 243.209534 337.650513 M 0.549316 0 32 (-list) widthshow 4 FF 259.319519 337.650513 M 0.549316 0 32 ( is a list of parameter names and types separated by \322;\323. The form of) widthshow (each parameter is:) 180.0 349.65 T 0 FF (speci\336cation) 216.0 373.65 T 3 FF ( var) 268.78 373.65 T (-name:) 284.41 373.65 T 4 FF ( ) 312.73 373.65 T 0 FF (type-description) 315.23 373.65 T 4 FF (where) 180.0 397.65 T 3 FF ( ) 204.43 397.65 T 0 FF (speci\336cation) 206.93 397.65 T 4 FF ( may either be omitted or one of the follo) 259.71 397.65 T (wing:) 424.16 397.65 T 6 FF 180.0 415.65 T 4 FF (the direction of the parameter \() 193.536 415.65 T 3 FF (in) 317.666 415.65 T 4 FF (,) 325.446 415.65 T 3 FF ( out) 327.946 415.65 T 4 FF ( or ) 343.226 415.65 T 3 FF (inout) 356.556 415.65 T 4 FF (\)) 377.116 415.65 T 6 FF 180.0 430.65 T 4 FF (the e) 193.536 430.65 T (xplicit speci\336cation of which parameter supplies the request port \() 212.546 430.65 T 3 FF (r) 477.226 430.65 T (equestport) 480.746 430.65 T 4 FF (\)) 522.966 430.65 T 6 FF 180.0 445.65 T 4 FF (the e) 193.536 445.65 T (xplicit speci\336cation of the reply port to use \() 212.546 445.65 T 3 FF (r) 390.306 445.65 T (eplyport, sr) 393.826 445.65 T (eplyport, ur) 439.566 445.65 T (eplyport) 486.417 445.65 T 4 FF (\)) 519.747 445.65 T 6 FF 180.0 460.65 T 4 FF (a property of the generated ) 193.536 460.65 T 0 FF (mach_msg) 303.776 460.65 T 4 FF ( call \() 349.326 460.65 T 3 FF (waittime) 372.096 460.65 T (, msgseqno, msgoption) 406.446 460.65 T 4 FF (\)) 497.556 460.65 T 0 FF 180 484.650391 M 0.010757 0 32 (type-description) widthshow 4 FF 249.440002 484.650391 M 0.010757 0 32 ( can be an) widthshow 289.582367 484.650391 M 0.010757 0 32 (y) widthshow 3 FF 294.582367 484.650391 M 0.010757 0 32 ( ) widthshow 0 FF 297.09314 484.650391 M 0.010757 0 32 (user) widthshow 315.053345 484.650391 M 0.010757 0 32 (-typename) widthshow 4 FF 360.043335 484.650391 M 0.010757 0 32 ( that w) widthshow 387.184906 484.650391 M 0.010757 0 32 (as declared in the type de\336nitions sec-) widthshow 180 496.65036 M 0.444061 0 32 (tion or can be a complete) widthshow 3 FF 283.030334 496.65036 M 0.444061 0 32 ( type description) widthshow 4 FF 350.57843 496.65036 M 0.444061 0 32 ( in the same form as in the type de\336nition sec-) widthshow 180 508.65033 M 1.220779 0 32 (tion. The ) widthshow 0 FF 221.051559 508.65033 M 1.220779 0 32 (type-description) widthshow 4 FF 290.491577 508.65033 M 1.220779 0 32 ( may be appended with additional IPC \337ags to o) widthshow 493.818665 508.65033 M 1.220779 0 32 (v) widthshow 498.668762 508.65033 M 1.220779 0 32 (erride an) widthshow 534.999634 508.65033 M 1.220779 0 32 (y) widthshow (IPC attrib) 180.0 520.65 T (utes de\336ned in the ) 218.97 520.65 T 0 FF (user) 294.52 520.65 T (-typename) 312.48 520.65 T 4 FF (.) 357.47 520.65 T 180 544.65033 M 0.137405 0 32 (A) widthshow 3 FF 187.220001 544.65033 M 0.137405 0 32 ( simpler) widthshow 219.407654 544.65033 M 0.137405 0 32 (outine) widthshow 4 FF 244.407654 544.65033 M 0.137405 0 32 ( sends a message to the serv) widthshow 357.282166 544.65033 M 0.137405 0 32 (er b) widthshow 372.489685 544.65033 M 0.137405 0 32 (ut does not e) widthshow 423.582001 544.65033 M 0.137405 0 32 (xpect a reply) widthshow 474.857178 544.65033 M 0.137405 0 32 (. The return v) widthshow 529.449524 544.65033 M 0.137405 0 32 (al-) widthshow 180 556.650269 M 0.414536 0 32 (ue of a) widthshow 3 FF 208.039078 556.650269 M 0.414536 0 32 ( simpler) widthshow 240.50386 556.650269 M 0.414536 0 32 (outine) widthshow 4 FF 265.503845 556.650269 M 0.414536 0 32 ( \(type ) widthshow 3 FF 291.882935 556.650269 M 0.414536 0 32 (k) widthshow 296.222992 556.650269 M 0.414536 0 32 (ern_r) widthshow 318.073181 556.650269 M 0.414536 0 32 (eturn_t) widthshow 4 FF 346.963196 556.650269 M 0.414536 0 32 (\) is the v) widthshow 382.676941 556.650269 M 0.414536 0 32 (alue returned by the ) widthshow 0 FF 466.535095 556.650269 M 0.414536 0 32 (mach_msg) widthshow 4 FF 512.085083 556.650269 M 0.414536 0 32 ( primi-) widthshow 180 568.650269 M 1.039917 0 32 (ti) widthshow 185.310135 568.650269 M 1.039917 0 32 (v) widthshow 190.160217 568.650269 M 1.039917 0 32 (e send operation. A) widthshow 3 FF 271.039978 568.650269 M 1.039917 0 32 ( simpler) widthshow 304.130127 568.650269 M 1.039917 0 32 (outine) widthshow 4 FF 329.130127 568.650269 M 1.039917 0 32 ( is used when asynchronous communication with a) widthshow 180 580.650269 M 1.250763 0 32 (serv) widthshow 196.510086 580.650269 M 1.250763 0 32 (er is desired \(or to declare the asynchronous response from the serv) widthshow 479.768616 580.650269 M 1.250763 0 32 (er\).) widthshow 3 FF 493.368591 580.650269 M 1.250763 0 32 ( simpler) widthshow 526.669617 580.650269 M 1.250763 0 32 (ou-) widthshow (tine) 180.0 592.65 T 4 FF (s cannot ha) 195.0 592.65 T (v) 239.79 592.65 T (e ) 244.64 592.65 T 3 FF (out) 251.58 592.65 T 4 FF ( or ) 264.36 592.65 T 3 FF (inout) 277.69 592.65 T 4 FF ( parameters.) 298.25 592.65 T 180 616.650269 M 0.621185 0 32 (A) widthshow 3 FF 187.220001 616.650269 M 0.621185 0 32 ( r) widthshow 193.781433 616.650269 M 0.621185 0 32 (outine) widthshow 4 FF 218.781433 616.650269 M 0.621185 0 32 ( operation w) widthshow 269.913879 616.650269 M 0.621185 0 32 (aits for a reply message from the serv) widthshow 424.352264 616.650269 M 0.621185 0 32 (er) widthshow 431.572571 616.650269 M 0.621185 0 32 (. It is a function whose re-) widthshow 180 628.650208 M 1.185791 0 32 (sult is of type) widthshow 3 FF 237.727371 628.650208 M 1.185791 0 32 ( k) widthshow 245.75322 628.650208 M 1.185791 0 32 (ern_r) widthshow 267.603424 628.650208 M 1.185791 0 32 (eturn_t) widthshow 4 FF 296.493408 628.650208 M 1.185791 0 32 (. This result indicates whether the requested operation w) widthshow 531.6698 628.650208 M 1.185791 0 32 (as) widthshow 180 640.650208 M 0.59494 0 32 (successfully completed. If a ) widthshow 3 FF 296.519775 640.650208 M 0.59494 0 32 (r) widthshow 299.960022 640.650208 M 0.59494 0 32 (outine) widthshow 4 FF 324.960022 640.650208 M 0.59494 0 32 ( returns a v) widthshow 371.204987 640.650208 M 0.59494 0 32 (alue other than KERN_SUCCESS the re-) widthshow (ply message will not include an) 180.0 652.65 T (y of the reply parameters e) 306.23 652.65 T (xcept the error code. ) 412.99 652.65 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 15 15 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (11 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (MIG Speci\336cation File Basics) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Bold) 12 1 mymakefontmetric 3 FF (Ser) 72.0 116.0 T (v) 89.208 116.0 T (erPr) 95.088 116.0 T (e\336x Speci\336cation) 118.188 116.0 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF (The) 72.0 132.667 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF ( serverpr) 87.55 132.667 T (e\336x) 123.56 132.667 T 4 FF ( speci\336cation is of the form:) 137.44 132.667 T (serv) 108.0 156.667 T (erpre\336x) 124.51 156.667 T 5 FF ( string;) 155.61 156.667 T 4 FF 72 180.666626 M 0.265228 0 32 (The w) widthshow 97.435287 180.666626 M 0.265228 0 32 (ord) widthshow 5 FF 110.765289 180.666626 M 0.265228 0 32 ( serverpr) widthshow 147.040726 180.666626 M 0.265228 0 32 (e\336x) widthshow 4 FF 160.920731 180.666626 M 0.265228 0 32 ( is follo) widthshow 191.761322 180.666626 M 0.265228 0 32 (wed by an identi\336er) widthshow 5 FF 272.267029 180.666626 M 0.265228 0 32 ( string) widthshow 4 FF 298.372253 180.666626 M 0.265228 0 32 ( which will be pre\336x) widthshow 382.053223 180.666626 M 0.265228 0 32 (ed to the ac-) widthshow 72 192.666611 M 1.28746 0 32 (tual names of all the follo) widthshow 180.677444 192.666611 M 1.28746 0 32 (wing serv) widthshow 220.974991 192.666611 M 1.28746 0 32 (er side functions implementing the message opera-) widthshow 72 204.666595 M 2.852127 0 32 (tions. This is particularly useful when it is necessary for the user and serv) widthshow 402.767761 204.666595 M 2.852127 0 32 (er side) widthshow 72 216.66658 M 0.996429 0 32 (functions to ha) widthshow 133.232971 216.66658 M 0.996429 0 32 (v) widthshow 138.083054 216.66658 M 0.996429 0 32 (e dif) widthshow 156.879623 216.66658 M 0.996429 0 32 (ferent names, as must be the case when a serv) widthshow 348.9776 216.66658 M 0.996429 0 32 (er is also a client of) widthshow 4 FF 72 228.666565 M 0.26825 0 32 (the same interf) widthshow 131.866562 228.666565 M 0.26825 0 32 (ace. This speci\336cation applies to all operations de\336ned after this speci\336ca-) widthshow 4 FF (tion in the de\336nition \336le.) 72.0 240.667 T 3 FF (UserPr) 72.0 272.0 T (e\336x Speci\336cation) 108.432 272.0 T 4 FF (The) 72.0 288.667 T 5 FF ( userpr) 87.55 288.667 T (e\336x) 115.79 288.667 T 4 FF ( speci\336cation is of the form:) 129.67 288.667 T (userpre\336x) 108.0 312.667 T 5 FF ( string;) 147.99 312.667 T 4 FF 72 336.666504 M 0.264542 0 32 (The w) widthshow 97.434601 336.666504 M 0.264542 0 32 (ord) widthshow 5 FF 110.764603 336.666504 M 0.264542 0 32 ( userpr) widthshow 139.269348 336.666504 M 0.264542 0 32 (e\336x) widthshow 4 FF 153.149353 336.666504 M 0.264542 0 32 ( is follo) widthshow 183.988571 336.666504 M 0.264542 0 32 (wed by an identi\336er) widthshow 5 FF 264.492188 336.666504 M 0.264542 0 32 ( string) widthshow 4 FF 290.596741 336.666504 M 0.264542 0 32 ( which will be pre\336x) widthshow 374.274994 336.666504 M 0.264542 0 32 (ed to the actu-) widthshow 72 348.666504 M 0.749969 0 32 (al names of all the follo) widthshow 170.209991 348.666504 M 0.749969 0 32 (wing user side functions calling the message operations. ) widthshow 5 FF 403.679749 348.666504 M 0.749969 0 32 (server-) widthshow 72 360.666473 M 1.292068 0 32 (pr) widthshow 80.520203 360.666473 M 1.292068 0 32 (e\336x) widthshow 4 FF 94.400208 360.666473 M 1.292068 0 32 ( should usually be used when dif) widthshow 233.002762 360.666473 M 1.292068 0 32 (ferent names are needed for the user and serv) widthshow 424.229431 360.666473 M 1.292068 0 32 (er) widthshow 72 372.666443 M 1.394424 0 32 (functions, b) widthshow 120.414536 372.666443 M 1.394424 0 32 (ut) widthshow 5 FF 128.194534 372.666443 M 1.394424 0 32 ( userpr) widthshow 157.829163 372.666443 M 1.394424 0 32 (e\336x) widthshow 4 FF 171.709167 372.666443 M 1.394424 0 32 ( is also a) widthshow 210.412552 372.666443 M 1.394424 0 32 (v) widthshow 215.162689 372.666443 M 1.394424 0 32 (ailable for completeness sak) widthshow 332.276031 372.666443 M 1.394424 0 32 (e. This speci\336cation ap-) widthshow (plies to all operations de\336ned after this speci\336cation in the de\336nition \336le.) 72.0 384.666 T 3 FF (Options Declarations) 72.0 416.0 T 4 FF 72 432.666443 M 0.093842 0 32 (Along with ) widthshow 5 FF 119.967682 432.666443 M 0.093842 0 32 (serverpr) widthshow 153.47789 432.666443 M 0.093842 0 32 (e\336x) widthshow 4 FF 167.357895 432.666443 M 0.093842 0 32 ( and ) widthshow 5 FF 186.98558 432.666443 M 0.093842 0 32 (userpr) widthshow 212.725784 432.666443 M 0.093842 0 32 (e\336x) widthshow 4 FF 226.605789 432.666443 M 0.093842 0 32 (, se) widthshow 239.77977 432.666443 M 0.093842 0 32 (v) widthshow 244.629852 432.666443 M 0.093842 0 32 (eral special-purpose options about the generat-) widthshow 72 444.666412 M 1.08493 0 32 (ed code may be speci\336ed. Def) widthshow 197.844727 444.666412 M 1.08493 0 32 (aults are a) widthshow 240.354706 444.666412 M 1.08493 0 32 (v) widthshow 245.104843 444.666412 M 1.08493 0 32 (ailable for each, and simple interf) widthshow 384.839569 444.666412 M 1.08493 0 32 (aces do not) widthshow 72 456.666382 M 0.778534 0 32 (usually need to change them. These options may occur more than once in the speci\336ca-) widthshow 72 468.666382 M 0.685272 0 32 (tion \336le. Each time an option declaration appears it sets that option for all the follo) widthshow 411.999237 468.666382 M 0.685272 0 32 (wing) widthshow (operations.) 72.0 480.666 T 4 FF (The) 72.0 504.666 T 5 FF ( waittime) 87.55 504.666 T 4 FF ( speci\336cation has tw) 124.5 504.666 T (o forms:) 205.78 504.666 T (w) 108.0 528.666 T (aittime ) 115.12 528.666 T 5 FF (time;) 145.4 528.666 T 4 FF (no) 108.0 552.666 T (w) 117.75 552.666 T (aittime;) 124.87 552.666 T 72 576.666321 M 0.67276 0 32 (The w) widthshow 97.842819 576.666321 M 0.67276 0 32 (ord) widthshow 5 FF 111.172821 576.666321 M 0.67276 0 32 ( waittime) widthshow 4 FF 148.795578 576.666321 M 0.67276 0 32 ( is follo) widthshow 180.451233 576.666321 M 0.67276 0 32 (wed by an inte) widthshow 240.919601 576.666321 M 0.67276 0 32 (ger or an identi\336er that speci\336es the maximum) widthshow 72 588.66626 M 0.21347 0 32 (time in milliseconds that the user code will w) widthshow 255.267822 588.66626 M 0.21347 0 32 (ait for a reply from the serv) widthshow 366.368744 588.66626 M 0.21347 0 32 (er) widthshow 373.58905 588.66626 M 0.21347 0 32 (. If an identi\336-) widthshow 72 600.66626 M 0.211639 0 32 (er is used, it should be declared as an e) widthshow 229.274857 600.66626 M 0.211639 0 32 (xtern v) widthshow 257.286621 600.66626 M 0.211639 0 32 (ariable by some module in the user code. If) widthshow 72 612.66626 M 0.795319 0 32 (the) widthshow 5 FF 84.220001 612.66626 M 0.795319 0 32 ( waittime) widthshow 4 FF 121.965317 612.66626 M 0.795319 0 32 ( option is omitted, or if the ) widthshow 5 FF 236.982544 612.66626 M 0.795319 0 32 (nowaittime) widthshow 4 FF 281.432556 612.66626 M 0.795319 0 32 ( statement is seen, the RPC does not) widthshow 72 624.66626 M 0.375671 0 32 (return until a message is recei) widthshow 192.768509 624.66626 M 0.375671 0 32 (v) widthshow 197.618591 624.66626 M 0.375671 0 32 (ed. This v) widthshow 237.840073 624.66626 M 0.375671 0 32 (alue sets the ) widthshow 5 FF 290.347107 624.66626 M 0.375671 0 32 (timeout) widthshow 4 FF 320.347107 624.66626 M 0.375671 0 32 ( ar) widthshow 330.812866 624.66626 M 0.375671 0 32 (gument to the \(user) widthshow 409.22998 624.66626 M 0.375671 0 32 (-side\)) widthshow 1 FF (mach_msg) 72.0 636.666 T 4 FF ( call.) 117.55 636.666 T 4 FF (The) 72.0 660.666 T 5 FF ( msgoption ) 87.55 660.666 T 4 FF (speci\336cation is of the form:) 134.22 660.666 T (msgoption ) 108.0 684.666 T 5 FF (manifest-constant;) 152.73 684.666 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 16 16 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (12 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Mach Interface Generator \(MIG\)) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650665 M 0.449173 0 32 (where the) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 219.599182 112.650665 M 0.449173 0 32 ( manifest-constant) widthshow 3 FF 293.658356 112.650665 M 0.449173 0 32 ( may be one of the option v) widthshow 406.262695 112.650665 M 0.449173 0 32 (alues from the \336le ) widthshow 0 FF 483.049408 112.650665 M 0.449173 0 32 () widthshow 3 FF 537.49939 112.650665 M 0.449173 0 32 (.) widthshow 180 124.65065 M 0.403519 0 32 (This v) widthshow 205.433655 124.65065 M 0.403519 0 32 (alue is OR\325ed into the ) widthshow 4 FF 297.721252 124.65065 M 0.403519 0 32 (option) widthshow 3 FF 323.28125 124.65065 M 0.403519 0 32 ( ar) widthshow 333.774872 124.65065 M 0.403519 0 32 (gument to the \(user) widthshow 412.275543 124.65065 M 0.403519 0 32 (-side\) ) widthshow 0 FF 437.949066 124.65065 M 0.403519 0 32 (mach_msg) widthshow 3 FF 483.499084 124.65065 M 0.403519 0 32 ( call. The v) widthshow 529.449768 124.65065 M 0.403519 0 32 (al-) widthshow 180 136.650635 M 0.219955 0 32 (ue MA) widthshow 207.870178 136.650635 M 0.219955 0 32 (CH_MSG_OPTION_NONE can be used to reset the ) widthshow 4 FF 422.429871 136.650635 M 0.219955 0 32 (msgoption) widthshow 3 FF 464.099884 136.650635 M 0.219955 0 32 ( v) widthshow 471.569977 136.650635 M 0.219955 0 32 (alue. Most of the) widthshow 180 148.65062 M 1.185379 0 32 (option v) widthshow 213.995514 148.65062 M 1.185379 0 32 (alues to ) widthshow 0 FF 249.696274 148.65062 M 1.185379 0 32 (mach_msg) widthshow 3 FF 295.246277 148.65062 M 1.185379 0 32 ( cannot be speci\336ed since the) widthshow 417.943268 148.65062 M 1.185379 0 32 (y w) widthshow 433.748718 148.65062 M 1.185379 0 32 (ould require manipulating) widthshow 180 160.650604 M 2.040665 0 32 (the ar) widthshow 204.350769 160.650604 M 2.040665 0 32 (guments to the ) widthshow 0 FF 271.862762 160.650604 M 2.040665 0 32 (mach_msg) widthshow 3 FF 317.412781 160.650604 M 2.040665 0 32 ( call itself. T) widthshow 373.285217 160.650604 M 2.040665 0 32 (w) widthshow 380.405273 160.650604 M 2.040665 0 32 (o that may be speci\336ed are MA) widthshow 517.77948 160.650604 M 2.040665 0 32 (CH_-) widthshow 180 172.650589 M 2.106964 0 32 (SEND_INTERR) widthshow 246.820221 172.650589 M 2.106964 0 32 (UPT and MA) widthshow 305.074371 172.650589 M 2.106964 0 32 (CH_RCV_INTERR) widthshow 385.234589 172.650589 M 2.106964 0 32 (UPT) widthshow 403.38501 172.650589 M 2.106964 0 32 (, which cause ) widthshow 0 FF 466.355896 172.650589 M 2.106964 0 32 (mach_msg) widthshow 3 FF 511.905884 172.650589 M 2.106964 0 32 ( to re-) widthshow 180 184.650574 M 0.828629 0 32 (turn to the caller if the send or recei) widthshow 329.119202 184.650574 M 0.828629 0 32 (v) widthshow 333.969269 184.650574 M 0.828629 0 32 (e operations are interrupted instead of retrying the) widthshow (calls.) 180.0 196.651 T 180 238.983856 360 3.024002 CR 0.25 SL 2 SC 540 240.5 M 180 240.5 L S 0 0 612 792 CR 5 (Times-Bold) 14 1 mymakefontmetric 5 FF (T) 180.0 234.317 T (ype Speci\336cations) 188.303 234.317 T 3 FF 180 258.6745 M 0.476151 0 32 (All types referenced in a de\336nition \336le must be de\336ned if the) widthshow 428.667755 258.6745 M 0.476151 0 32 (y are other than the b) widthshow 515.548645 258.6745 M 0.476151 0 32 (uilt-in) widthshow (IPC types.) 180.0 270.674 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Simple T) 180.0 302.008 T (ypes) 225.456 302.008 T 3 FF 180 318.6745 M 0.298538 0 32 (A simple type declaration declares a ) widthshow 4 FF 329.53125 318.6745 M 0.298538 0 32 (user) widthshow 346.551361 318.6745 M 0.298538 0 32 (-typename) widthshow 3 FF 388.201355 318.6745 M 0.298538 0 32 ( which names a MIG type that can be) widthshow (used for parameters of the de\336ned operations. The declaration is of the form:) 180.0 330.674 T 3 FF (type ) 216.0 354.674 T 4 FF (user) 235.72 354.674 T (-typename) 252.74 354.674 T 3 FF ( = ) 294.39 354.674 T 0 FF (type-desc) 305.03 354.674 T 3 FF ( [) 345.02 354.674 T 0 FF (translation-inf) 350.85 354.674 T (o) 412.27 354.674 T 3 FF (];) 417.27 354.674 T 3 FF 180 378.674438 M 0.595657 0 32 (\(the [] indicate that the ) widthshow 0 FF 276.568298 378.674438 M 0.595657 0 32 (translation-inf) widthshow 337.988434 378.674438 M 0.595657 0 32 (o) widthshow 3 FF 342.988434 378.674438 M 0.595657 0 32 ( is optional\) where a) widthshow 4 FF 427.021057 378.674438 M 0.595657 0 32 ( ) widthshow 0 FF 430.11673 378.674438 M 0.595657 0 32 (type-desc) widthshow 3 FF 470.10675 378.674438 M 0.595657 0 32 ( is either a pre) widthshow 528.889526 378.674438 M 0.595657 0 32 (vi-) widthshow (ously de\336ned) 180.0 390.674 T 4 FF ( user) 233.61 390.674 T (-typename) 253.13 390.674 T 3 FF ( or an ) 294.78 390.674 T 0 FF (ipc-type-desc) 320.05 390.674 T 3 FF ( which is of the form:) 376.15 390.674 T (\() 216.0 414.674 T 4 FF (ipc-typename) 219.33 414.674 T 3 FF (, ) 273.2 414.674 T 4 FF (size) 278.2 414.674 T 3 FF ( [, ) 293.2 414.674 T 0 FF (IPC-\337ags) 304.03 414.674 T 3 FF (]\)) 344.03 414.674 T (or:) 180.0 438.674 T 3 FF (ipc-typename) 216.0 462.674 T 3 FF (\(The [] indicate that the comma separated ) 180.0 486.674 T 0 FF (IPC-\337ags) 349.12 486.674 T 3 FF ( list is optional.\)) 389.12 486.674 T 180 510.674347 M 0.082855 0 32 (The) widthshow 4 FF 195.550003 510.674347 M 0.082855 0 32 ( ) widthshow 0 FF 198.132858 510.674347 M 0.082855 0 32 (ipc-type-desc) widthshow 3 FF 254.232864 510.674347 M 0.082855 0 32 ( of simple types is enclosed in parentheses and consists of an IPC type-) widthshow 180 522.674316 M 1.199295 0 32 (name, decimal inte) widthshow 258.068665 522.674316 M 1.199295 0 32 (ger or inte) widthshow 301.417358 522.674316 M 1.199295 0 32 (ger e) widthshow 322.176758 522.674316 M 1.199295 0 32 (xpression that is the number of bits in the IPC type,) widthshow 180 534.674316 M 0.957443 0 32 (and optional IPC option k) widthshow 287.069824 534.674316 M 0.957443 0 32 (e) widthshow 291.359924 534.674316 M 0.957443 0 32 (yw) widthshow 303.47998 534.674316 M 0.957443 0 32 (ords which are: ) widthshow 4 FF 370.502319 534.674316 M 0.957443 0 32 (dealloc, dealloc) widthshow 3 FF 435.339752 534.674316 M 0.957443 0 32 ( []) widthshow 4 FF 445.457214 534.674316 M 0.957443 0 32 (,) widthshow 3 FF 447.957214 534.674316 M 0.957443 0 32 ( ) widthshow 4 FF 451.414642 534.674316 M 0.957443 0 32 (notdealloc) widthshow 3 FF 493.634644 534.674316 M 0.957443 0 32 (, ) widthshow 4 FF 499.592102 534.674316 M 0.957443 0 32 (islong) widthshow 3 FF 524.042114 534.674316 M 0.957443 0 32 (, ) widthshow 4 FF 529.999512 534.674316 M 0.957443 0 32 (is-) widthshow (notlong) 180.0 546.674 T 3 FF (, ) 210.56 546.674 T 4 FF (server) 215.56 546.674 T (copy) 240.18 546.674 T 3 FF ( and ) 259.06 546.674 T 4 FF (countinout) 278.5 546.674 T 3 FF (. The user may de\336ne additional IPC types.) 321.28 546.674 T 3 FF 180 570.674316 M 2.32814 0 32 (If the) widthshow 4 FF 203.708145 570.674316 M 2.32814 0 32 ( ipc-typename) widthshow 3 FF 262.406311 570.674316 M 2.32814 0 32 ( is one of the standard ones, e) widthshow 396.863373 570.674316 M 2.32814 0 32 (xcept for MA) widthshow 455.549866 570.674316 M 2.32814 0 32 (CH_MSG_TYPE_S-) widthshow 180 582.674255 M 4.764664 0 32 (TRING, MA) widthshow 236.024887 582.674255 M 4.764664 0 32 (CH_MSG_TYPE_STRING_C, MA) widthshow 384.839783 582.674255 M 4.764664 0 32 (CH_MSG_TYPE_UNSTR) widthshow 492.779968 582.674255 M 4.764664 0 32 (UCTURED) widthshow (or MA) 180.0 594.674 T (CH_MSG_TYPE_REAL, just the ) 206.54 594.674 T 4 FF (ipc-typename) 344.88 594.674 T 3 FF ( can be used.) 398.75 594.674 T 6 FF (IPC Flags) 180.0 626.008 T 3 FF 180 642.674255 M 0.809937 0 32 (There are three sets of IPC \337ags: one set pertains to de-allocation of the parameter) widthshow 519.74939 642.674255 M 0.809937 0 32 (, one) widthshow 180 654.674194 M 0.270691 0 32 (pertains to normal v) widthshow 260.932159 654.674194 M 0.270691 0 32 (ersus long form type descriptors and the third refers to handling v) widthshow 526.119934 654.674194 M 0.270691 0 32 (ari-) widthshow 3 FF (able sized data that may be transmitted in or out of line in the message.) 180.0 666.674 T 558 540.007629 2 9.999985 NF 558 660.007568 2 9.999985 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 17 17 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (13 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (T) 72.0 55.824 T (ype Speci\336cations) 77.338 55.824 T 0.25 SL 3.86 setmiterlimit 0 SC 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666656 M 1.052246 0 32 (The de-allocation \337ag is used to describe the treatment of ports and \322pointers\323 \(out-of-) widthshow 3 FF 72 126.666641 M 0.181381 0 32 (line data\) after the messages with which the) widthshow 248.359772 126.666641 M 0.181381 0 32 (y are associated ha) widthshow 323.954041 126.666641 M 0.181381 0 32 (v) widthshow 328.804138 126.666641 M 0.181381 0 32 (e been sent. ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 378.778259 126.666641 M 0.181381 0 32 (dealloc) widthshow 3 FF 408.218262 126.666641 M 0.181381 0 32 ( caus-) widthshow 72 138.666626 M 0.502884 0 32 (es the de-allocation bit in the IPC message to be set on. Otherwise it is al) widthshow 371.083313 138.666626 M 0.502884 0 32 (w) widthshow 378.203369 138.666626 M 0.502884 0 32 (ays of) widthshow 402.616394 138.666626 M 0.502884 0 32 (f. ) widthshow 4 FF 411.44928 138.666626 M 0.502884 0 32 (deal-) widthshow 72 150.666611 M 0.718384 0 32 (loc) widthshow 3 FF 84.220001 150.666611 M 0.718384 0 32 ( can be used only with ports and \322pointers\323. If it is used with a port, the port will be) widthshow 72 162.666595 M 1.274979 0 32 (de-allocated after the message is sent. If) widthshow 4 FF 239.879898 162.666595 M 1.274979 0 32 ( dealloc) widthshow 3 FF 273.094879 162.666595 M 1.274979 0 32 ( is used with a \322pointer\323, the memory) widthshow 72 174.66658 M 1.138535 0 32 (that the pointer references will be de-allocated after the message has been sent. \(It can) widthshow 3 FF 72 186.666565 M 0.362122 0 32 (also be used with unbounded arrays \(those that can be passed either in-line or out-of-line) widthshow 72 198.66655 M 1.358063 0 32 (depending on size\). In such a case, the \337ag only applies when the data is sent out-of-) widthshow 72 210.666534 M 1.525833 0 32 (line.\) An error will result if ) widthshow 4 FF 192.525009 210.666534 M 1.525833 0 32 (dealloc) widthshow 3 FF 221.965012 210.666534 M 1.525833 0 32 ( is used with an) widthshow 290.138428 210.666534 M 1.525833 0 32 (y ar) widthshow 306.754364 210.666534 M 1.525833 0 32 (gument other than a port or a) widthshow 3 FF 72 222.666519 M 1.764252 0 32 widthshow 4 FF 165.97702 222.666519 M 1.764252 0 32 (dealloc) widthshow 3 FF 195.417023 222.666519 M 1.764252 0 32 ( with ports is not normally needed, as there are b) widthshow 407.549683 222.666519 M 1.764252 0 32 (uilt-in) widthshow (types that dispose of ports properly) 72.0 234.667 T (. ) 212.17 234.667 T (The dynamic de-allocation \337ag:) 72.0 258.666 T (dealloc []) 108.0 282.666 T 3 FF 72 306.666443 M 0.283539 0 32 (causes the generated stub to accept an additional parameter \(of C type ) widthshow 4 FF 357.55249 306.666443 M 0.283539 0 32 (boolean_t) widthshow 3 FF 397.55249 306.666443 M 0.283539 0 32 (\) that al-) widthshow 72 318.666443 M 0.335953 0 32 (lo) widthshow 79.530136 318.666443 M 0.335953 0 32 (ws the caller to specify whether the de-allocation \337ag should be set in the data descrip-) widthshow (tor \(TR) 72.0 330.666 T (UE meaning that the data should be de-allocated\).) 101.32 330.666 T 3 FF 72 354.666412 M 0.267212 0 32 (Normally) widthshow 109.680359 354.666412 M 0.267212 0 32 (, MIG will choose the appropriate size for the type descriptor \() widthshow 1 FF 363.11972 354.666412 M 0.267212 0 32 (mach_msg_type) widthshow 3 FF 72 366.666382 M 0.704956 0 32 (or ) widthshow 1 FF 83.534958 366.666382 M 0.704956 0 32 (mach_msg_type_long) widthshow 3 FF 175.754959 366.666382 M 0.704956 0 32 (\). The ) widthshow 4 FF 203.544876 366.666382 M 0.704956 0 32 (islong ) widthshow 3 FF 231.199829 366.666382 M 0.704956 0 32 (k) widthshow 236.099884 366.666382 M 0.704956 0 32 (e) widthshow 240.389969 366.666382 M 0.704956 0 32 (yw) widthshow 252.510025 366.666382 M 0.704956 0 32 (ord forces a long form type descriptor to be) widthshow 72 378.666382 M 0.491135 0 32 (used for a parameter of this type. If a long form type descriptor w) widthshow 340.444824 378.666382 M 0.491135 0 32 (as not needed, a w) widthshow 415.899445 378.666382 M 0.491135 0 32 (arn-) widthshow 72 390.666382 M 1.019241 0 32 (ing is issued, b) widthshow 134.307831 390.666382 M 1.019241 0 32 (ut a long form type descriptor is used an) widthshow 303.401855 390.666382 M 1.019241 0 32 (yw) widthshow 315.521912 390.666382 M 1.019241 0 32 (ay) widthshow 324.312256 390.666382 M 1.019241 0 32 (. ) widthshow 4 FF 330.331512 390.666382 M 1.019241 0 32 (isnotlong) widthshow 3 FF 367.561523 390.666382 M 1.019241 0 32 ( speci\336es that a) widthshow 72 402.666351 M 1.42749 0 32 (normal form type descriptor is to be used. If a long form type descriptor is needed, a) widthshow 72 414.666321 M 0.542633 0 32 (w) widthshow 79.120056 414.666321 M 0.542633 0 32 (arning is issued, and a long form type descriptor will be used. This k) widthshow 360.214355 414.666321 M 0.542633 0 32 (e) widthshow 364.504456 414.666321 M 0.542633 0 32 (yw) widthshow 376.624512 414.666321 M 0.542633 0 32 (ord is pro) widthshow 415.889832 414.666321 M 0.542633 0 32 (vid-) widthshow 3 FF 72 426.666321 M 0.845795 0 32 (ed for compatibility with pre) widthshow 190.123322 426.666321 M 0.845795 0 32 (vious v) widthshow 219.989197 426.666321 M 0.845795 0 32 (ersions of MIG in which some parameters \(v) widthshow 404.789917 426.666321 M 0.845795 0 32 (ariable) widthshow 72 438.666321 M 1.25766 0 32 (sized arrays, in particular\) al) widthshow 191.060715 438.666321 M 1.25766 0 32 (w) widthshow 198.180771 438.666321 M 1.25766 0 32 (ays had long form descriptors. It should no) widthshow 378.384521 438.666321 M 1.25766 0 32 (w be consid-) widthshow 3 FF (ered obsolete.) 72.0 450.666 T 3 FF 72 474.66626 M 0.960648 0 32 (The ) widthshow 4 FF 91.010651 474.66626 M 0.960648 0 32 (server) widthshow 115.630859 474.66626 M 0.960648 0 32 (copy) widthshow 3 FF 134.510864 474.66626 M 0.960648 0 32 ( k) widthshow 142.871567 474.66626 M 0.960648 0 32 (e) widthshow 147.161652 474.66626 M 0.960648 0 32 (yw) widthshow 159.281708 474.66626 M 0.960648 0 32 (ord can be used only for ) widthshow 4 FF 264.465607 474.66626 M 0.960648 0 32 (in) widthshow 3 FF 272.245605 474.66626 M 0.960648 0 32 ( parameters and only af) widthshow 369.698364 474.66626 M 0.960648 0 32 (fects the serv) widthshow 424.229736 474.66626 M 0.960648 0 32 (er) widthshow 72 486.66626 M 1.013794 0 32 (side routine. This k) widthshow 152.161438 486.66626 M 1.013794 0 32 (e) widthshow 156.451523 486.66626 M 1.013794 0 32 (yw) widthshow 168.571579 486.66626 M 1.013794 0 32 (ord is used for parameters that can optionally be transmitted ei-) widthshow 72 498.66626 M 3.045959 0 32 (ther in-line or out-of-line\321namely) widthshow 220.188248 498.66626 M 3.045959 0 32 (, unbounded \322in-line\323 arrays \(data declared as a) widthshow 3 FF 72 510.666229 M 0.766296 0 32 widthshow 224.797852 510.666229 M 0.766296 0 32 (w) widthshow 231.917908 510.666229 M 0.766296 0 32 (ays out-of-line\). Normally) widthshow 338.060852 510.666229 M 0.766296 0 32 (, parameters passed in-) widthshow 3 FF 72 522.666199 M 0.680618 0 32 (line \(present in the message body\) are destro) widthshow 255.234406 522.666199 M 0.680618 0 32 (yed on the serv) widthshow 317.94635 522.666199 M 0.680618 0 32 (er side when the serv) widthshow 404.938904 522.666199 M 0.680618 0 32 (er side) widthshow 72 534.666199 M 1.07193 0 32 (routine returns \(because the message b) widthshow 231.839783 534.666199 M 1.07193 0 32 (uf) widthshow 239.919922 534.666199 M 1.07193 0 32 (fer is rec) widthshow 276.89386 534.666199 M 1.07193 0 32 (ycled\) whereas out-of-line parameters) widthshow 72 546.666199 M 1.138535 0 32 (\(those allocated their o) widthshow 166.535751 546.666199 M 1.138535 0 32 (wn virtual cop) widthshow 226.48288 546.666199 M 1.138535 0 32 (y\) will not be touched on the assumption that the) widthshow 72 558.666138 M 2.002258 0 32 (serv) widthshow 88.510086 558.666138 M 2.002258 0 32 (er will de-allocate this space. The serv) widthshow 253.943741 558.666138 M 2.002258 0 32 (er is free, though, to k) widthshow 351.895081 558.666138 M 2.002258 0 32 (eep this out-of-line) widthshow 72 570.666138 M 0.390732 0 32 (cop) widthshow 86.340057 570.666138 M 0.390732 0 32 (y) widthshow 90.690414 570.666138 M 0.390732 0 32 (. F) widthshow 101.491226 570.666138 M 0.390732 0 32 (or consistenc) widthshow 154.222046 570.666138 M 0.390732 0 32 (y) widthshow 158.572403 570.666138 M 0.390732 0 32 (, ar) widthshow 171.553238 570.666138 M 0.390732 0 32 (guments that may be optionally transmitted either in-line or out-) widthshow 72 582.666138 M 1.023285 0 32 (of-line are gi) widthshow 125.446716 582.666138 M 1.023285 0 32 (v) widthshow 130.296799 582.666138 M 1.023285 0 32 (en the in-line semantics \(in as much as that the) widthshow 326.276459 582.666138 M 1.023285 0 32 (y are declared as in-line\);) widthshow 72 594.666138 M 0.274887 0 32 (namely) widthshow 100.790359 594.666138 M 0.274887 0 32 (, the data will be destro) widthshow 195.384857 594.666138 M 0.274887 0 32 (yed when the serv) widthshow 268.539612 594.666138 M 0.274887 0 32 (er routine returns. T) widthshow 348.544739 594.666138 M 0.274887 0 32 (o achie) widthshow 377.169739 594.666138 M 0.274887 0 32 (v) widthshow 382.019836 594.666138 M 0.274887 0 32 (e the out-of-) widthshow 72 606.666138 M 1.119034 0 32 (line semantics, the ) widthshow 4 FF 152.017105 606.666138 M 1.119034 0 32 (server) widthshow 176.637314 606.666138 M 1.119034 0 32 (copy) widthshow 3 FF 195.517319 606.666138 M 1.119034 0 32 ( k) widthshow 204.036407 606.666138 M 1.119034 0 32 (e) widthshow 208.326492 606.666138 M 1.119034 0 32 (yw) widthshow 220.446548 606.666138 M 1.119034 0 32 (ord is speci\336ed. When set, the serv) widthshow 366.430847 606.666138 M 1.119034 0 32 (er\325) widthshow 376.98114 606.666138 M 1.119034 0 32 (s routine will) widthshow 72 618.666077 M 0.609131 0 32 (be called with an additional parameter \(of type ) widthshow 4 FF 266.273071 618.666077 M 0.609131 0 32 (boolean_t) widthshow 3 FF 306.273071 618.666077 M 0.609131 0 32 (\) specifying whether the corre-) widthshow 72 630.666077 M 0.246124 0 32 (sponding ar) widthshow 119.006226 630.666077 M 0.246124 0 32 (gument w) widthshow 158.872406 630.666077 M 0.246124 0 32 (as transmitted in-line in the message. If the data w) widthshow 362.067596 630.666077 M 0.246124 0 32 (as transmitted in-) widthshow 72 642.666077 M 0.730698 0 32 (line \(the additional ) widthshow 4 FF 152.242096 642.666077 M 0.730698 0 32 (server) widthshow 176.862305 642.666077 M 0.730698 0 32 (copy) widthshow 3 FF 195.74231 642.666077 M 0.730698 0 32 ( ar) widthshow 206.56311 642.666077 M 0.730698 0 32 (gument is TR) widthshow 262.074707 642.666077 M 0.730698 0 32 (UE\), the data passed to the serv) widthshow 392.669006 642.666077 M 0.730698 0 32 (er routine) widthshow 72 654.666016 M 0.41423 0 32 (will be destro) widthshow 127.168518 654.666016 M 0.41423 0 32 (yed when the serv) widthshow 200.741302 654.666016 M 0.41423 0 32 (er routine returns \(because the message b) widthshow 367.976807 654.666016 M 0.41423 0 32 (uf) widthshow 376.056946 654.666016 M 0.41423 0 32 (fer will be re-) widthshow 72 666.666016 M 0.379974 0 32 (c) widthshow 76.290085 666.666016 M 0.379974 0 32 (ycled\) and so the serv) widthshow 164.860077 666.666016 M 0.379974 0 32 (er routine must mak) widthshow 246.170059 666.666016 M 0.379974 0 32 (e a cop) widthshow 275.150085 666.666016 M 0.379974 0 32 (y if it wishes it to persist. If the data is) widthshow 72 678.666016 M 0.526581 0 32 (out-of-line, the ) widthshow 4 FF 135.543167 678.666016 M 0.526581 0 32 (server) widthshow 160.163376 678.666016 M 0.526581 0 32 (copy) widthshow 3 FF 179.043381 678.666016 M 0.526581 0 32 ( parameter will be F) widthshow 260.950134 678.666016 M 0.526581 0 32 (ALSE, informing the serv) widthshow 366.259949 678.666016 M 0.526581 0 32 (er routine that it) widthshow (does not need to mak) 72.0 690.666 T (e a cop) 156.89 690.666 T (y of the data; the data will not be de-allocated upon return.) 185.11 690.666 T 52 119.999985 2 9.999985 NF 52 179.999908 2 45.999939 NF 52 443.999634 2 9.999985 NF 52 503.999573 2 9.999985 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 18 18 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (14 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Mach Interface Generator \(MIG\)) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650665 M 0.34996 0 32 (The ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 198.399963 112.650665 M 0.34996 0 32 (countinout) widthshow 3 FF 241.179962 112.650665 M 0.34996 0 32 ( k) widthshow 248.929977 112.650665 M 0.34996 0 32 (e) widthshow 253.220062 112.650665 M 0.34996 0 32 (yw) widthshow 265.340118 112.650665 M 0.34996 0 32 (ord applies to v) widthshow 328.080139 112.650665 M 0.34996 0 32 (ariable length ) widthshow 4 FF 385.990051 112.650665 M 0.34996 0 32 (out) widthshow 3 FF 398.770081 112.650665 M 0.34996 0 32 ( parameters. It does what the name) widthshow 180 124.65065 M 0.605316 0 32 (implies: the count parameter that the user side must specify to recei) widthshow 456.088623 124.65065 M 0.605316 0 32 (v) widthshow 460.938721 124.65065 M 0.605316 0 32 (e the number of re-) widthshow 180 136.650635 M 0.736649 0 32 (turned elements is also considered as an input parameter to be sent to the serv) widthshow 500.663208 136.650635 M 0.736649 0 32 (er routine) widthshow 180 148.65062 M 0.540543 0 32 (so that the serv) widthshow 241.741714 148.65062 M 0.540543 0 32 (er does not attempt to return too man) widthshow 393.415588 148.65062 M 0.540543 0 32 (y v) widthshow 406.206299 148.65062 M 0.540543 0 32 (alues. In the absence of this k) widthshow 527.379639 148.65062 M 0.540543 0 32 (e) widthshow 531.669678 148.65062 M 0.540543 0 32 (y-) widthshow 180 160.650604 M 0.113251 0 32 (w) widthshow 187.120056 160.650604 M 0.113251 0 32 (ord, the number of elements in the user\325) widthshow 347.33313 160.650604 M 0.113251 0 32 (s b) widthshow 358.636475 160.650604 M 0.113251 0 32 (uf) widthshow 366.716614 160.650604 M 0.113251 0 32 (fer is not sent to the serv) widthshow 465.566223 160.650604 M 0.113251 0 32 (er) widthshow 472.78653 160.650604 M 0.113251 0 32 (. If the serv) widthshow 518.516357 160.650604 M 0.113251 0 32 (er re-) widthshow 180 172.650589 M 0.851929 0 32 (turns a message with more v) widthshow 298.15979 172.650589 M 0.851929 0 32 (alues than for which the user allo) widthshow 435.771515 172.650589 M 0.851929 0 32 (wed, the user\325) widthshow 493.295685 172.650589 M 0.851929 0 32 (s MIG stub) widthshow (will discard the data and return MIG_ARRA) 180.0 184.651 T (Y_T) 357.811 184.651 T (OO_LARGE.) 375.961 184.651 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Simple T) 180.0 215.984 T (ypes) 225.456 215.984 T 3 FF (Some e) 180.0 232.651 T (xamples of simple type declarations are:) 209.57 232.651 T (type) 216.0 256.651 T 4 FF ( int) 233.22 256.651 T 3 FF ( = MA) 246.28 256.651 T (CH_MSG_TYPE_INTEGER_32;) 272.63 256.651 T (type) 216.0 280.651 T 4 FF ( my_string) 233.22 280.651 T 3 FF ( = \(MA) 275.72 280.651 T (CH_MSG_TYPE_STRING,8*80\);) 305.4 280.651 T (type) 216.0 304.651 T 4 FF ( k) 233.22 304.651 T (ern_r) 240.06 304.651 T (eturn_t) 261.91 304.651 T 3 FF ( = ) 290.8 304.651 T 4 FF (int) 301.44 304.651 T 3 FF (;) 312.0 304.651 T 180 328.650513 M 0.917664 0 32 (The MIG generated code assumes that the C types) widthshow 4 FF 388.411316 328.650513 M 0.917664 0 32 ( my_string) widthshow 3 FF 431.828979 328.650513 M 0.917664 0 32 ( and ) widthshow 4 FF 453.104309 328.650513 M 0.917664 0 32 (k) widthshow 457.444397 328.650513 M 0.917664 0 32 (ern_r) widthshow 479.294586 328.650513 M 0.917664 0 32 (eturn_t ) widthshow 3 FF 511.602234 328.650513 M 0.917664 0 32 (are de-) widthshow 180 340.650482 M 1.015274 0 32 widthshow 277.841156 340.650482 M 1.015274 0 32 (ay by a user pro) widthshow 345.622345 340.650482 M 1.015274 0 32 (vided include \336le. The \336les ) widthshow 0 FF 462.358704 340.650482 M 1.015274 0 32 () 180.0 352.65 T 3 FF ( and ) 202.92 352.65 T 0 FF () 222.36 352.65 T 3 FF ( de\336ne the basic C and Mach types.) 330.14 352.65 T 180 376.650452 M 1.093246 0 32 (MIG assumes that an) widthshow 267.839844 376.650452 M 1.093246 0 32 (y v) widthshow 281.183228 376.650452 M 1.093246 0 32 (ariable of type MA) widthshow 360.433167 376.650452 M 1.093246 0 32 (CH_MSG_TYPE_STRING or MA) widthshow 503.329895 376.650452 M 1.093246 0 32 (CH_MS-) widthshow 180 388.650452 M 1.138458 0 32 (G_TYPE_STRING_C \(which are considered the same\) is declared as a C char *) widthshow 4 FF 515.251526 388.650452 M 1.138458 0 32 (foo) widthshow 3 FF 528.031555 388.650452 M 1.138458 0 32 ( or) widthshow 180 400.650421 M 0.3564 0 32 (char ) widthshow 4 FF 200.066406 400.650421 M 0.3564 0 32 (foo) widthshow 3 FF 212.846405 400.650421 M 0.3564 0 32 ([) widthshow 4 FF 216.176407 400.650421 M 0.3564 0 32 (n) widthshow 3 FF 221.176407 400.650421 M 0.3564 0 32 (]. Thus it generates code for a parameter passed by reference and uses ) widthshow 0 FF 507.929657 400.650421 M 0.3564 0 32 (str) widthshow 519.439758 400.650421 M 0.3564 0 32 (ncpy) widthshow 3 FF (for assignment statements.) 180.0 412.65 T 5 FF (Structur) 180.0 443.984 T (ed T) 223.776 443.984 T (ypes) 245.893 443.984 T 3 FF (F) 180.0 460.65 T (our kinds of structured types are recognized: arrays, C strings, structures and \322pointers\323.) 185.41 460.65 T 0 FF (Basic Arrays and Structur) 180.0 484.65 T (es) 292.87 484.65 T 3 FF (De\336nitions of arrays and structures follo) 180.0 497.65 T (w the P) 341.67 497.65 T (ascal-style syntax of:) 371.52 497.65 T 3 FF (struct [) 216.0 521.65 T 4 FF (size) 244.05 521.65 T 3 FF (] of ) 259.05 521.65 T 0 FF (comp-type-desc) 275.71 521.65 T 3 FF (array [) 216.0 545.65 T 4 FF (size) 242.37 545.65 T 3 FF (] of) 257.37 545.65 T 4 FF ( ) 271.53 545.65 T 0 FF (comp-type-desc) 274.03 545.65 T 3 FF 180 569.65033 M 0.292618 0 32 (where ) widthshow 0 FF 207.222626 569.65033 M 0.292618 0 32 (comp-type-desc ) widthshow 3 FF 276.665253 569.65033 M 0.292618 0 32 (may be a simple ) widthshow 0 FF 345.605713 569.65033 M 0.292618 0 32 (type-desc) widthshow 3 FF 385.595734 569.65033 M 0.292618 0 32 ( or may be an) widthshow 4 FF 441.196228 569.65033 M 0.292618 0 32 ( arr) widthshow 456.618896 569.65033 M 0.292618 0 32 (ay) widthshow 3 FF 466.058899 569.65033 M 0.292618 0 32 ( or ) widthshow 4 FF 479.974152 569.65033 M 0.292618 0 32 (struct) widthshow 3 FF 502.75415 569.65033 M 0.292618 0 32 ( type and) widthshow 4 FF (size) 180.0 581.65 T 3 FF ( may be a decimal inte) 195.0 581.65 T (ger constant or e) 285.11 581.65 T (xpression.) 351.33 581.65 T 180 605.650269 M 1.119949 0 32 (If a type is declared as an array the C type must also be an array) widthshow 451.909637 605.650269 M 1.119949 0 32 (, since the MIG RPC) widthshow 180 617.650269 M 0.087616 0 32 (code will treat the user type as an array \(i.e. assuming it is passed by reference and gener-) widthshow 180 629.650269 M 0.995667 0 32 (ating special code for array assignments\). A v) widthshow 370.009827 629.650269 M 0.995667 0 32 (ariable declared as a) widthshow 4 FF 454.346863 629.650269 M 0.995667 0 32 ( struct) widthshow 3 FF 480.622498 629.650269 M 0.995667 0 32 ( is assumed to) widthshow 180 641.650269 M 0.613281 0 32 (be passed by v) widthshow 240.189987 641.650269 M 0.613281 0 32 (alue and treated as a C structure in assignment statements. Other than the) widthshow 180 653.650208 M 0.510712 0 32 (dif) widthshow 190.860138 653.650208 M 0.510712 0 32 (ference in ar) widthshow 241.671677 653.650208 M 0.510712 0 32 (gument passing, the \336x) widthshow 335.833893 653.650208 M 0.510712 0 32 (ed size ) widthshow 4 FF 366.845337 653.650208 M 0.510712 0 32 (struct) widthshow 3 FF 389.625305 653.650208 M 0.510712 0 32 ( and ) widthshow 4 FF 410.086731 653.650208 M 0.510712 0 32 (arr) widthshow 422.716827 653.650208 M 0.510712 0 32 (ay) widthshow 3 FF 432.15683 653.650208 M 0.510712 0 32 ( declarations are the same.) widthshow 180 665.650208 M 0.402603 0 32 (There is no w) widthshow 235.817871 665.650208 M 0.402603 0 32 (ay to specify the \336elds of a C structure to MIG. That is, all elements of the) widthshow 3 FF 180 677.650208 M 0.558624 0 32 (structure must deri) widthshow 255.857391 677.650208 M 0.558624 0 32 (v) widthshow 260.707458 677.650208 M 0.558624 0 32 (e from the same basic C type, as an) widthshow 406.386566 677.650208 M 0.558624 0 32 (y data con) widthshow 448.204041 677.650208 M 0.558624 0 32 (v) widthshow 453.054138 677.650208 M 0.558624 0 32 (ersion that Mach IPC) widthshow 558 105.984009 2 81.999893 NF 558 477.983704 2 22.999969 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 19 19 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (15 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (T) 72.0 55.824 T (ype Speci\336cations) 77.338 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666656 M 0.340683 0 32 (may attempt when crossing machine boundaries will be based on this base type. The) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 414.158905 114.666656 M 0.340683 0 32 ( size) widthshow 3 FF (and) 72.0 126.667 T 4 FF ( ) 86.44 126.667 T 1 FF (comp-type-desc) 88.94 126.667 T 3 FF ( are just used to gi) 155.59 126.667 T (v) 228.39 126.667 T (e the size of the structure.) 233.24 126.667 T 1 FF (V) 72.0 150.667 T (ariable Sized Arrays) 78.301 150.667 T 3 FF (The array form:) 72.0 163.667 T (array [*: ) 108.0 187.667 T 4 FF (maxsize) 144.65 187.667 T 3 FF (] of ) 176.31 187.667 T 1 FF (comp-type-desc) 192.97 187.667 T 3 FF 72 211.66658 M 0.834961 0 32 (speci\336es that a v) widthshow 140.635025 211.66658 M 0.834961 0 32 (ariable length array is to be passed in-line in the message. In this form) widthshow 4 FF 72 223.666565 M 1.999207 0 32 (maxsize) widthshow 3 FF 103.660004 223.666565 M 1.999207 0 32 ( is the maximum length of the item. F) widthshow 270.34375 223.666565 M 1.999207 0 32 (or v) widthshow 287.923096 223.666565 M 1.999207 0 32 (ariable length arrays an additional) widthshow 72 235.66655 M 1.352844 0 32 (count parameter is generated to specify ho) widthshow 249.267227 235.66655 M 1.352844 0 32 (w much of the array is actually being used.) widthshow 72 247.666534 M 0.717926 0 32 (V) widthshow 78.110611 247.666534 M 0.717926 0 32 (ariable-length in-line ) widthshow 4 FF 166.196472 247.666534 M 0.717926 0 32 (inout) widthshow 3 FF 186.75647 247.666534 M 0.717926 0 32 ( ar) widthshow 197.564499 247.666534 M 0.717926 0 32 (guments are not supported. The ) widthshow 1 FF 330.024139 247.666534 M 0.717926 0 32 (comp-type-desc) widthshow 3 FF 396.674133 247.666534 M 0.717926 0 32 ( must be) widthshow (of \336x) 72.0 259.667 T (ed size \(i.e., not a v) 93.24 259.667 T (ariable sized array\).) 170.75 259.667 T 1 FF (Unbounded Arrays) 72.0 283.667 T 3 FF (The \336nal array form:) 72.0 296.666 T (array [] of ) 108.0 320.666 T 1 FF (comp-type-desc) 151.03 320.666 T 3 FF 72 344.666443 M 0.294571 0 32 (speci\336es an unbounded array whose size is pro) widthshow 261.372101 344.666443 M 0.294571 0 32 (vided at run-time via an additional param-) widthshow 72 356.666443 M 0.684082 0 32 (eter) widthshow 86.440308 356.666443 M 0.684082 0 32 (. If the size of the array does not e) widthshow 228.517151 356.666443 M 0.684082 0 32 (xceed a certain size \(currently 2048 bytes\), it will) widthshow 72 368.666443 M 1.698151 0 32 (be sent in-line, otherwise out-of-line \(appearing allocated as if by ) widthshow 1 FF 353.091553 368.666443 M 1.698151 0 32 (vm_allocate) widthshow 3 FF 404.191528 368.666443 M 1.698151 0 32 (\). This) widthshow (form is not permitted for ) 72.0 380.666 T 4 FF (inout) 173.38 380.666 T 3 FF ( parameters.) 193.94 380.666 T 72 404.666382 M 0.737793 0 32 (F) widthshow 77.41008 404.666382 M 0.737793 0 32 (or an unbounded ) widthshow 4 FF 149.333466 404.666382 M 0.737793 0 32 (in) widthshow 3 FF 157.113464 404.666382 M 0.737793 0 32 ( parameter) widthshow 199.931488 404.666382 M 0.737793 0 32 (, the data will be transmitted in-line or out-of-line as ap-) widthshow 72 416.666382 M 0.801956 0 32 (propriate; the serv) widthshow 146.214005 416.666382 M 0.801956 0 32 (er will be passed a pointer to the recei) widthshow 304.009827 416.666382 M 0.801956 0 32 (v) widthshow 308.859894 416.666382 M 0.801956 0 32 (ed data \(in accordance with C) widthshow 72 428.666382 M 0.4935 0 32 (array rules\). By def) widthshow 151.130569 428.666382 M 0.4935 0 32 (ault, the semantics of the data reception at the serv) widthshow 357.602173 428.666382 M 0.4935 0 32 (er will be as if the) widthshow 72 440.666351 M 0.193283 0 32 (data is al) widthshow 107.836624 440.666351 M 0.193283 0 32 (w) widthshow 114.95668 440.666351 M 0.193283 0 32 (ays transmitted in-line; that is, when the serv) widthshow 295.589752 440.666351 M 0.193283 0 32 (er routine returns, the data will be) widthshow 72 452.666321 M 0.576202 0 32 (destro) widthshow 96.340057 452.666321 M 0.576202 0 32 (yed. If the serv) widthshow 157.898758 452.666321 M 0.576202 0 32 (er wishes to mak) widthshow 227.017426 452.666321 M 0.576202 0 32 (e a cop) widthshow 256.389893 452.666321 M 0.576202 0 32 (y of the data, and wishes to tak) widthshow 384.193359 452.666321 M 0.576202 0 32 (e adv) widthshow 405.899719 452.666321 M 0.576202 0 32 (antage) widthshow 72 464.666321 M 1.023712 0 32 (of the f) widthshow 102.827484 464.666321 M 1.023712 0 32 (act that the data may be transmitted out-of-line \(and so a virtual cop) widthshow 386.632111 464.666321 M 1.023712 0 32 (y had been) widthshow 72 476.666321 M 0.280685 0 32 (made\), the parameter w) widthshow 167.15213 476.666321 M 0.280685 0 32 (ould be gi) widthshow 207.463638 476.666321 M 0.280685 0 32 (v) widthshow 212.313721 476.666321 M 0.280685 0 32 (en the ) widthshow 4 FF 239.535095 476.666321 M 0.280685 0 32 (server) widthshow 264.155304 476.666321 M 0.280685 0 32 (copy) widthshow 3 FF 283.035309 476.666321 M 0.280685 0 32 ( k) widthshow 290.716064 476.666321 M 0.280685 0 32 (e) widthshow 295.006134 476.666321 M 0.280685 0 32 (yw) widthshow 307.12619 476.666321 M 0.280685 0 32 (ord. This will pre) widthshow 377.158386 476.666321 M 0.280685 0 32 (v) widthshow 382.008484 476.666321 M 0.280685 0 32 (ent the serv-) widthshow 72 488.66629 M 0.740585 0 32 (er stub from deleting the array data upon return from the service routine if the data w) widthshow 423.669464 488.66629 M 0.740585 0 32 (as) widthshow 72 500.66626 M 1.428299 0 32 (transmitted out-of-line; also, an additional parameter will be supplied to the serv) widthshow 409.191406 500.66626 M 1.428299 0 32 (er in-) widthshow 72 512.66626 M 0.959351 0 32 (forming it whether it must mak) widthshow 201.416809 512.66626 M 0.959351 0 32 (e a cop) widthshow 231.555573 512.66626 M 0.959351 0 32 (y \(the data w) widthshow 286.263672 512.66626 M 0.959351 0 32 (as in-line\) or whether it can simply) widthshow (use the allocated cop) 72.0 524.666 T (y \(data w) 155.49 524.666 T (as out-of-line\).) 192.6 524.666 T 72 548.66626 M 0.380661 0 32 (F) widthshow 77.41008 548.66626 M 0.380661 0 32 (or an unbounded ) widthshow 4 FF 148.26207 548.66626 M 0.380661 0 32 (out) widthshow 3 FF 161.042068 548.66626 M 0.380661 0 32 ( parameter) widthshow 203.50296 548.66626 M 0.380661 0 32 (, the data will be transmitted in-line or out-of-line as ap-) widthshow 72 560.666199 M 1.692612 0 32 (propriate, visible to the user and serv) widthshow 230.035767 560.666199 M 1.692612 0 32 (er sides. The user supplies a pointer to a b) widthshow 412.819397 560.666199 M 1.692612 0 32 (uf) widthshow 420.899536 560.666199 M 1.692612 0 32 (fer) widthshow 3 FF 72 572.666199 M 0.031052 0 32 (pointer naming a b) widthshow 147.163269 572.666199 M 0.031052 0 32 (uf) widthshow 155.243408 572.666199 M 0.031052 0 32 (fer to recei) widthshow 198.365662 572.666199 M 0.031052 0 32 (v) widthshow 203.215744 572.666199 M 0.031052 0 32 (e the data and a pointer to the size of the b) widthshow 372.487427 572.666199 M 0.031052 0 32 (uf) widthshow 380.567566 572.666199 M 0.031052 0 32 (fer) widthshow 391.117889 572.666199 M 0.031052 0 32 (. Upon re-) widthshow 72 584.666199 M 0.259933 0 32 (turn, the size will re\337ect the number of v) widthshow 236.859619 584.666199 M 0.259933 0 32 (alues returned; if the v) widthshow 327.629517 584.666199 M 0.259933 0 32 (alues were transmitted in-) widthshow 72 596.666138 M 1.403 0 32 (line and \336t into the user\325) widthshow 176.515305 596.666138 M 1.403 0 32 (s b) widthshow 189.108414 596.666138 M 1.403 0 32 (uf) widthshow 197.188553 596.666138 M 1.403 0 32 (fer) widthshow 207.888779 596.666138 M 1.403 0 32 (, the v) widthshow 235.164917 596.666138 M 1.403 0 32 (alues will be placed there and the user\325) widthshow 400.226257 596.666138 M 1.403 0 32 (s b) widthshow 412.819336 596.666138 M 1.403 0 32 (uf) widthshow 420.899475 596.666138 M 1.403 0 32 (fer) widthshow 72 608.666138 M 0.764542 0 32 (pointer will be unchanged; otherwise, ) widthshow 1 FF 229.132721 608.666138 M 0.764542 0 32 (vm_allocate) widthshow 3 FF 280.232727 608.666138 M 0.764542 0 32 ( produced space will be made \(either) widthshow 72 620.666138 M 1.045685 0 32 (because the data w) widthshow 150.287125 620.666138 M 1.045685 0 32 (as sent out-of-line or because the MIG stub allocates space\) and the) widthshow (user\325) 72.0 632.666 T (s b) 91.44 632.666 T (uf) 102.63 632.666 T (fer pointer will be changed to point to the allocated space. F) 110.711 632.666 T (or e) 350.521 632.666 T (xample:) 365.641 632.666 T 3 FF ([1]) 87.34 650.666 T 4 FF (type) 108.0 650.666 T (b) 288.0 650.666 T (uf) 292.8 650.666 T (fer) 300.4 650.666 T 3 FF ( [MAX];) 311.51 650.666 T 3 FF ([2]) 87.34 662.666 T 4 FF (type) 108.0 662.666 T 3 FF (*) 124.66 662.666 T 4 FF (ptr) 288.0 662.666 T 3 FF (;) 299.67 662.666 T 3 FF ([3]) 87.34 674.666 T 3 FF (unsigned int) 108.0 674.666 T 4 FF (count) 288.0 674.666 T 3 FF (;) 310.22 674.666 T 3 FF ([4]) 87.34 686.666 T 4 FF (ptr) 108.0 686.666 T 3 FF ( = &) 119.67 686.666 T 4 FF (b) 138.09 686.666 T (uf) 142.89 686.666 T (fer) 150.49 686.666 T 3 FF ([0];) 161.6 686.666 T 3 FF ([5]) 87.34 698.666 T 4 FF (count) 108.0 698.666 T 3 FF ( = MAX;) 130.22 698.666 T 52 143.999969 2 9.999985 NF 52 276.999847 2 9.999985 NF 52 565.999512 2 135.999832 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 20 20 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (16 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Mach Interface Generator \(MIG\)) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([6]) 195.34 112.651 T 3 FF (\(v) 216.0 112.651 T (oid\) ) 224.13 112.651 T 0 FF (user_stub) 242.74 112.651 T 3 FF ( \(..., &) 284.41 112.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (ptr) 310.52 112.651 T 3 FF (, &) 321.79 112.651 T 4 FF (count) 334.57 112.651 T 3 FF (, ...\);) 356.79 112.651 T 180 117.983994 360 9 CR 1 G 180 117.983994 360 9 NF 0 G 3 FF (/*) 199.224 124.815 T 3 SL 0.6667 G 530.91 122.48 M 530.91 127.73 L 540 122.48 L 530.91 117.23 L F 530.91 122.48 M 216 122.48 L S 180 136.983978 360 9 CR 1 G 180 136.983978 360 9 NF 0 G 3 FF (*/) 198.0 143.81 T 0.6667 G 225.09 141.48 M 225.09 136.23 L 216 141.48 L 225.09 146.73 L F 540 141.48 M 225.09 141.48 L S 0 0 612 792 CR 0 G 3 FF (Reference data) 216.0 133.651 T 3 FF ([7]) 195.34 154.651 T 3 FF (if \() 216.0 154.651 T 4 FF (ptr) 227.94 154.651 T 3 FF ( != ) 239.61 154.651 T 4 FF (b) 253.58 154.651 T (uf) 258.38 154.651 T (fer) 265.98 154.651 T 3 FF (\)) 277.09 154.651 T 3 FF ([8]) 195.34 166.651 T 3 FF (\(v) 252.0 166.651 T (oid\) ) 260.13 166.651 T 0 FF (vm_deallocate) 278.74 166.651 T 3 FF ( \() 339.84 166.651 T 0 FF (mach_task_self) 345.67 166.651 T 3 FF ( \(\), \(vm_of) 411.22 166.651 T (fset_t\) ) 454.57 166.651 T 4 FF (ptr) 482.62 166.651 T 3 FF (, ) 493.89 166.651 T 4 FF (count) 498.89 166.651 T 3 FF ( * ) 521.11 166.651 T (sizeof \() 306.0 176.651 T 4 FF (type) 335.71 176.651 T 3 FF (\)\);) 352.37 176.651 T 180 198.650589 M 0.729935 0 32 (The serv) widthshow 215.290024 198.650589 M 0.729935 0 32 (er operates accordingly) widthshow 309.400269 198.650589 M 0.729935 0 32 (. The serv) widthshow 350.420227 198.650589 M 0.729935 0 32 (er is passed a pointer to a b) widthshow 463.919891 198.650589 M 0.729935 0 32 (uf) widthshow 472.000031 198.650589 M 0.729935 0 32 (fer pointer and a) widthshow 180 210.650574 M 0.92662 0 32 (pointer to the maximum count. \(The count will either be the user\325) widthshow 451.83313 210.650574 M 0.92662 0 32 (s v) widthshow 463.899902 210.650574 M 0.92662 0 32 (alue, if the ) widthshow 4 FF 511.669769 210.650574 M 0.92662 0 32 (counti-) widthshow 180 222.650558 M 0.57991 0 32 (nout) widthshow 3 FF 197.779999 222.650558 M 0.57991 0 32 ( k) widthshow 205.759964 222.650558 M 0.57991 0 32 (e) widthshow 210.050049 222.650558 M 0.57991 0 32 (yw) widthshow 222.170105 222.650558 M 0.57991 0 32 (ord is in ef) widthshow 266.709961 222.650558 M 0.57991 0 32 (fect, or the size of the stub\325) widthshow 378.779755 222.650558 M 0.57991 0 32 (s b) widthshow 390.549774 222.650558 M 0.57991 0 32 (uf) widthshow 398.629913 222.650558 M 0.57991 0 32 (fer) widthshow 409.330139 222.650558 M 0.57991 0 32 (, namely the maximum size that) widthshow 180 234.650543 M 0.099899 0 32 (can be transmitted in-line.\) If the serv) widthshow 331.249512 234.650543 M 0.099899 0 32 (er\325) widthshow 341.799805 234.650543 M 0.099899 0 32 (s data \336ts into the supplied b) widthshow 456.649292 234.650543 M 0.099899 0 32 (uf) widthshow 464.729431 234.650543 M 0.099899 0 32 (fer) widthshow 475.429688 234.650543 M 0.099899 0 32 (, it does so; oth-) widthshow 180 246.650528 M 1.16394 0 32 (erwise it allocates space and changes the b) widthshow 358.177734 246.650528 M 1.16394 0 32 (uf) widthshow 366.257874 246.650528 M 1.16394 0 32 (fer pointer to refer to it. The ) widthshow 4 FF 489.375458 246.650528 M 1.16394 0 32 (dealloc) widthshow 3 FF 518.81543 246.650528 M 1.16394 0 32 ( k) widthshow 527.379456 246.650528 M 1.16394 0 32 (e) widthshow 531.669556 246.650528 M 1.16394 0 32 (y-) widthshow 180 258.650513 M 1.732635 0 32 (w) widthshow 187.120056 258.650513 M 1.732635 0 32 (ord can be used to specify that this allocated memory is to be de-allocated in such) widthshow (cases.) 180.0 270.65 T 0 FF (C Strings) 180.0 294.65 T 3 FF (C strings ha) 180.0 307.65 T (v) 227.58 307.65 T (e the format:) 232.43 307.65 T (c_string [) 216.0 331.65 T 4 FF (size) 254.05 331.65 T 3 FF (]) 269.05 331.65 T (c_string [*: ) 216.0 355.65 T 4 FF (size) 264.33 355.65 T 3 FF (]) 279.33 355.65 T 3 FF 180 379.650421 M 0.942719 0 32 (\(V) widthshow 189.440613 379.650421 M 0.942719 0 32 (ariable sized strings cannot be speci\336ed as ) widthshow 4 FF 367.949646 379.650421 M 0.942719 0 32 (inout) widthshow 3 FF 388.509644 379.650421 M 0.942719 0 32 (.\) The \336x) widthshow 427.185181 379.650421 M 0.942719 0 32 (ed sized C string is equi) widthshow 527.478882 379.650421 M 0.942719 0 32 (v) widthshow 532.229065 379.650421 M 0.942719 0 32 (a-) widthshow (lent to an array of characters:) 180.0 391.65 T 3 FF (array [) 216.0 415.65 T 4 FF (size) 242.37 415.65 T 3 FF (] of \(MA) 257.37 415.65 T (CH_MSG_TYPE_STRING_C, 8\)) 293.07 415.65 T 180 439.650391 M 0.223953 0 32 (The v) widthshow 203.024094 439.650391 M 0.223953 0 32 (ariable sized C string presents the semantics of C strings \(as presented by the ANSI) widthshow 180 451.65036 M 0.840714 0 32 (C library\), namely) widthshow 254.63179 451.65036 M 0.840714 0 32 (, a null-byte terminated string. A v) widthshow 397.746216 451.65036 M 0.840714 0 32 (ariable sized C string will transmit) widthshow 180 463.65033 M 0.499954 0 32 (the \(v) widthshow 203.300095 463.65033 M 0.499954 0 32 (ariable sized\) v) widthshow 265.140137 463.65033 M 0.499954 0 32 (alid portion of the string \(all characters up to and including the null) widthshow 180 475.65033 M 1.05423 0 32 (byte\) in the message. This form sa) widthshow 323.605499 475.65033 M 1.05423 0 32 (v) widthshow 328.455566 475.65033 M 1.05423 0 32 (es space in the message by not al) widthshow 467.655273 475.65033 M 1.05423 0 32 (w) widthshow 474.77533 475.65033 M 1.05423 0 32 (ays transmitting) widthshow 180 487.65033 M 0.570709 0 32 (the full size of the character array) widthshow 317.164642 487.65033 M 0.570709 0 32 (. No additional parameter is generated requesting from) widthshow 180 499.650299 M 0.584335 0 32 (the sender nor pro) widthshow 254.083099 499.650299 M 0.584335 0 32 (viding to the recei) widthshow 328.076233 499.650299 M 0.584335 0 32 (v) widthshow 332.926331 499.650299 M 0.584335 0 32 (er the current size of the string; this size is deri) widthshow 525.709839 499.650299 M 0.584335 0 32 (v) widthshow 530.559937 499.650299 M 0.584335 0 32 (ed) widthshow (from the string itself.) 180.0 511.65 T 0 FF 180.0 535.65 T (ointer\323 \(Out-of-Line\) T) 190.91 535.65 T (ypes) 290.161 535.65 T 3 FF 180 548.650269 M 0.662109 0 32 (In the de\336nition of \322pointer\323 types, the symbol \322^\323 precedes a simple, array or structure) widthshow (de\336nition.) 180.0 560.65 T (^ ) 216.0 584.65 T 0 FF (comp-type-desc) 223.19 584.65 T 3 FF 180 608.650208 M 0.834122 0 32 (Data types declared as \322pointers\323 are al) widthshow 342.624817 608.650208 M 0.834122 0 32 (w) widthshow 349.744873 608.650208 M 0.834122 0 32 (ays sent out-of-line in the message. \322Pointers\323) widthshow 180 620.650208 M 0.473816 0 32 (to v) widthshow 195.503952 620.650208 M 0.473816 0 32 (ariable sized arrays \(unbounded or otherwise\) transmit the actual size as an addition-) widthshow 180 632.650146 M 0.636292 0 32 (al parameter) widthshow 229.786606 632.650146 M 0.636292 0 32 (. Since sending out-of-line is considerably more e) widthshow 432.950745 632.650146 M 0.636292 0 32 (xpensi) widthshow 458.810883 632.650146 M 0.636292 0 32 (v) widthshow 463.66095 632.650146 M 0.636292 0 32 (e than in-line data,) widthshow 3 FF 180 644.650146 M 0.534973 0 32 widthshow 353.814941 644.650146 M 0.534973 0 32 (ge or v) widthshow 382.405029 644.650146 M 0.534973 0 32 (ariable amounts of data. A call that re-) widthshow 3 FF 180 656.650146 M 0.441391 0 32 (turns an out-of-line item allocates the necessary space in the user\325) widthshow 447.134247 656.650146 M 0.441391 0 32 (s virtual memory \(as if) widthshow 180 668.650146 M 0.89061 0 32 (with ) widthshow 0 FF 201.170609 668.650146 M 0.89061 0 32 (vm_allocate) widthshow 3 FF 252.270615 668.650146 M 0.89061 0 32 (\). It is up to the application to de-allocate this memory when it is \336n-) widthshow (ished with the data.) 180.0 680.65 T 558 105.984009 2 191.999802 NF 558 528.983643 2 9.999985 NF 558 637.983521 2 9.999985 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 21 21 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (17 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (T) 72.0 55.824 T (ype Speci\336cations) 77.338 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666656 M 0.674973 0 32 (The C type name is assumed to resolv) widthshow 228.504898 114.666656 M 0.674973 0 32 (e to a C type of form *... MIG will generate code) widthshow (to indirect through the parameters of these types to access the actual data.) 72.0 126.667 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (Examples of Complex T) 72.0 158.0 T (ypes:) 194.112 158.0 T 3 FF ([1]) 87.34 174.667 T (type) 108.0 174.667 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF ( pr) 125.22 174.667 T (ocids) 136.16 174.667 T 3 FF ( =) 157.27 174.667 T (array [10] of) 288.0 174.667 T 5 FF ( ) 338.53 174.667 T 3 FF (int;) 341.03 174.667 T ([2]) 87.34 186.667 T (type) 108.0 186.667 T 5 FF ( pr) 125.22 186.667 T (ocidinfo) 136.16 186.667 T 3 FF ( =) 168.94 186.667 T (struct [5*10] of ) 288.0 186.667 T (MA) 162.0 196.667 T (CH_MSG_TYPE_INTEGER_32;) 177.71 196.667 T ([3]) 87.34 208.667 T (type) 108.0 208.667 T 5 FF ( var) 125.22 208.667 T (data) 140.68 208.667 T 3 FF ( =) 158.46 208.667 T (array [*: 1024] of) 288.0 208.667 T 5 FF ( ) 358.81 208.667 T 3 FF (int;) 361.31 208.667 T ([4]) 87.34 220.667 T (type) 108.0 220.667 T 5 FF ( arr) 125.22 220.667 T (ay_by_value) 140.35 220.667 T 3 FF ( =) 190.89 220.667 T (struct [1] of array [20] of ) 288.0 220.667 T (MA) 162.0 230.667 T (CH_MSG_TYPE_CHAR;) 177.71 230.667 T ([5]) 87.34 242.667 T (type) 108.0 242.667 T 5 FF ( pa) 125.22 242.667 T (g) 137.62 242.667 T (e_ptr) 142.52 242.667 T 3 FF ( =) 163.63 242.667 T (^ array [4096] of ) 288.0 242.667 T (MA) 162.0 252.667 T (CH_MSG_TYPE_INTEGER_32;) 177.71 252.667 T ([6]) 87.34 264.667 T (type) 108.0 264.667 T 5 FF ( var_arr) 125.22 264.667 T (ay) 158.68 264.667 T 3 FF ( =) 168.12 264.667 T (^ array [] of) 288.0 264.667 T 5 FF ( ) 335.72 264.667 T 3 FF (int;) 338.22 264.667 T 4 FF (P) 72.0 294.0 T (olymor) 79.092 294.0 T (phic T) 115.632 294.0 T (ypes) 147.757 294.0 T 3 FF 72 310.666504 M 0.169174 0 32 (MIG supports polymorphic types. F) widthshow 216.13678 310.666504 M 0.169174 0 32 (or e) widthshow 231.426041 310.666504 M 0.169174 0 32 (xample, using this f) widthshow 310.723633 310.666504 M 0.169174 0 32 (acility) widthshow 335.073975 310.666504 M 0.169174 0 32 (, one may specify an ar-) widthshow 72 322.666473 M 0.874329 0 32 (gument which can be either an inte) widthshow 217.066071 322.666473 M 0.874329 0 32 (ger or a port, with the e) widthshow 315.752136 322.666473 M 0.874329 0 32 (xact type determined at run-) widthshow 72 334.666443 M 0.335953 0 32 (time. The type information is passed in an auxiliary ar) widthshow 291.483704 334.666443 M 0.335953 0 32 (gument, similar to the w) widthshow 390.227539 334.666443 M 0.335953 0 32 (ay size in-) widthshow 72 346.666443 M 0.827438 0 32 (formation in v) widthshow 130.625015 346.666443 M 0.827438 0 32 (ariable-sized arrays is handled. \(If an ar) widthshow 293.959778 346.666443 M 0.827438 0 32 (gument is both v) widthshow 363.142212 346.666443 M 0.827438 0 32 (ariable-sized and) widthshow (polymorphic, the auxiliary type ar) 72.0 358.666 T (gument comes before the count ar) 208.19 358.666 T (gument.\) ) 343.81 358.666 T ([1]) 87.34 376.666 T (type ) 108.0 376.666 T 5 FF (poly_t) 127.72 376.666 T 3 FF ( = \(MA) 152.72 376.666 T (CH_MSG_TYPE_POL) 182.4 376.666 T (YMORPHIC,32\);) 275.851 376.666 T ([2]) 87.34 388.666 T (simpleroutine) 108.0 388.666 T 1 FF ( SendP) 163.0 388.666 T (ortOrInt) 192.53 388.666 T 3 FF ([3]) 87.34 400.666 T (\() 108.0 400.666 T ([4]) 87.34 412.666 T 5 FF (server:) 288.0 412.666 T 3 FF ( ) 316.32 412.666 T 5 FF (mac) 318.82 412.666 T (h_port_t) 335.33 412.666 T 3 FF (;) 369.78 412.666 T ([5]) 87.34 424.666 T 3 FF (poly: poly_t) 288.0 424.666 T 3 FF ([6]) 87.34 436.666 T 3 FF (\);) 108.0 436.666 T 3 FF (and then in user C code) 72.0 458.666 T ([1]) 87.34 476.666 T 5 FF (mac) 108.0 476.666 T (h_port_t) 124.51 476.666 T (server) 288.0 476.666 T 3 FF (, ) 312.59 476.666 T 5 FF (port) 317.59 476.666 T 3 FF (;) 334.26 476.666 T ([2]) 87.34 488.666 T 5 FF (k) 108.0 488.666 T (ern_r) 112.34 488.666 T (eturn_t) 134.19 488.666 T (kr) 288.0 488.666 T 3 FF (;) 296.33 488.666 T ([3]) 87.34 500.666 T 5 FF (kr) 108.0 500.666 T 3 FF ( = ) 116.33 500.666 T 1 FF (SendP) 126.97 500.666 T (ortOrInt ) 154.0 500.666 T 3 FF (\() 194.27 500.666 T 5 FF (server) 197.6 500.666 T 3 FF (, 5, MA) 222.19 500.666 T (CH_MSG_TYPE_INTEGER_32\);) 252.901 500.666 T ([4]) 87.34 512.666 T 5 FF (kr) 108.0 512.666 T 3 FF ( = ) 116.33 512.666 T 1 FF (SendP) 126.97 512.666 T (ortOrInt ) 154.0 512.666 T 3 FF (\() 194.27 512.666 T 5 FF (server) 197.6 512.666 T 3 FF (, ) 222.19 512.666 T 5 FF (port) 227.19 512.666 T 3 FF (, MA) 243.86 512.666 T (CH_MSG_TYPE_COPY_SEND\);) 264.571 512.666 T (The b) 72.0 534.666 T (uilt-in type ) 94.85 534.666 T 5 FF (polymorphic) 141.52 534.666 T 3 FF ( is ef) 192.07 534.666 T (fecti) 211.26 534.666 T (v) 228.78 534.666 T (ely de\336ned as:) 233.63 534.666 T (type polymorphic = \(MA) 108.0 558.666 T (CH_MSG_TYPE_POL) 208.51 558.666 T (YMORPHIC,32\);) 301.961 558.666 T 4 FF (T) 72.0 590.0 T (ype T) 79.116 590.0 T (ranslation Inf) 107.233 590.0 T (ormation) 177.277 590.0 T 3 FF 72 606.666199 M 0.817947 0 32 (Optional information describing procedures for translating the type or destro) widthshow 385.601624 606.666199 M 0.817947 0 32 (ying v) widthshow 411.449707 606.666199 M 0.817947 0 32 (alues) widthshow 72 618.666199 M 0.679092 0 32 (may appear after the type de\336nition information. T) widthshow 279.703857 618.666199 M 0.679092 0 32 (ranslation functions allo) widthshow 377.472168 618.666199 M 0.679092 0 32 (w the type as) widthshow 72 630.666199 M 0.967819 0 32 (seen by the user process and the serv) widthshow 226.084839 630.666199 M 0.967819 0 32 (er process to be dif) widthshow 305.796265 630.666199 M 0.967819 0 32 (ferent. Destructor functions al-) widthshow 72 642.666138 M 0.652237 0 32 (lo) widthshow 79.530136 642.666138 M 0.652237 0 32 (w the serv) widthshow 121.784698 642.666138 M 0.652237 0 32 (er code to automatically de-allocate input or translated types after the) widthshow 405.3172 642.666138 M 0.652237 0 32 (y ha) widthshow 422.709534 642.666138 M 0.652237 0 32 (v) widthshow 427.559631 642.666138 M 0.652237 0 32 (e) widthshow (been used.) 72.0 654.666 T (F) 72.0 678.666 T (or each MIG type, there are up to three corresponding C types. These are:) 77.41 678.666 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 22 22 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (18 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Mach Interface Generator \(MIG\)) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 7 1 mymakefontmetric 3 FF 180.0 112.651 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 193.535995 112.650665 M 0.27771 0 32 (The type used in the user stub module \(the ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 368.515381 112.650665 M 0.27771 0 32 (UserT) widthshow 392.775818 112.650665 M 0.27771 0 32 (ype) widthshow 4 FF 406.655823 112.650665 M 0.27771 0 32 (\), which is the v) widthshow 471.676788 112.650665 M 0.27771 0 32 (alue that will de-) widthshow 193.535995 124.65065 M 0.594894 0 32 widthshow (inserting data into the outgoing IPC message to the serv) 193.536 136.651 T (er) 416.986 136.651 T (.) 424.206 136.651 T 3 FF 180.0 151.651 T 4 FF 193.535995 151.65062 M 0.717346 0 32 (The type seen by the serv) widthshow 298.892822 151.65062 M 0.717346 0 32 (er stub module \(the ) widthshow 5 FF 381.752197 151.65062 M 0.717346 0 32 (ServerT) widthshow 412.672607 151.65062 M 0.717346 0 32 (ype) widthshow 4 FF 426.552612 151.65062 M 0.717346 0 32 (\) when it e) widthshow 471.044739 151.65062 M 0.717346 0 32 (xtracts this v) widthshow 523.3396 151.65062 M 0.717346 0 32 (alue) widthshow 193.535995 163.650604 M 0.780212 0 32 (from the incoming IPC message. It is also the type used by the serv) widthshow 472.948853 163.650604 M 0.780212 0 32 (er stub when in-) widthshow 193.535995 175.650589 M 1.281128 0 32 (serting a v) widthshow 237.508392 175.650589 M 1.281128 0 32 (alue into an outgoing \(return\) IPC message. No con) widthshow 453.717651 175.650589 M 1.281128 0 32 (v) widthshow 458.567749 175.650589 M 1.281128 0 32 (ersion functions are) widthshow 193.535995 187.650574 M 0.102493 0 32 (called to con) widthshow 244.441208 187.650574 M 0.102493 0 32 (v) widthshow 249.29129 187.650574 M 0.102493 0 32 (ert between the ) widthshow 5 FF 313.188782 187.650574 M 0.102493 0 32 (UserT) widthshow 337.449188 187.650574 M 0.102493 0 32 (ype) widthshow 4 FF 351.329193 187.650574 M 0.102493 0 32 ( and the ) widthshow 5 FF 385.796692 187.650574 M 0.102493 0 32 (ServerT) widthshow 416.717102 187.650574 M 0.102493 0 32 (ype) widthshow 4 FF 430.597107 187.650574 M 0.102493 0 32 (; these types must be ef) widthshow 524.459717 187.650574 M 0.102493 0 32 (fec-) widthshow 193.535995 199.650558 M 0.197754 0 32 (ti) widthshow 198.84613 199.650558 M 0.197754 0 32 (v) widthshow 203.696213 199.650558 M 0.197754 0 32 (ely equi) widthshow 235.584106 199.650558 M 0.197754 0 32 (v) widthshow 240.334244 199.650558 M 0.197754 0 32 (alent \(at least in storage requirements\) and are simply dif) widthshow 469.874207 199.650558 M 0.197754 0 32 (ferent names gi) widthshow 531.669861 199.650558 M 0.197754 0 32 (v-) widthshow (en by the dif) 193.536 211.651 T (ferent en) 243.556 211.651 T (vironments to the same storage.) 278.416 211.651 T 3 FF 180.0 226.651 T 4 FF 193.535995 226.650528 M 1.284821 0 32 (The translated type used by the serv) widthshow 344.955017 226.650528 M 1.284821 0 32 (er procedure \(the ) widthshow 5 FF 419.609497 226.650528 M 1.284821 0 32 (T) widthshow 424.619812 226.650528 M 1.284821 0 32 (r) widthshow 428.359863 226.650528 M 1.284821 0 32 (ansT) widthshow 447.070282 226.650528 M 1.284821 0 32 (ype) widthshow 4 FF 460.950287 226.650528 M 1.284821 0 32 (\). This is the v) widthshow 523.339722 226.650528 M 1.284821 0 32 (alue) widthshow (used to de\336ne the type seen by the tar) 193.536 238.651 T (get routine called in the serv) 343.886 238.651 T (er) 457.326 238.651 T (.) 464.547 238.651 T (By def) 180.0 262.65 T (ault these three types are all the same, and ha) 206.84 262.65 T (v) 387.15 262.65 T (e the same name as the MIG type. ) 392.0 262.65 T 180 286.650482 M 1.056549 0 32 (The ) widthshow 5 FF 199.106552 286.650482 M 1.056549 0 32 (UserT) widthshow 223.366959 286.650482 M 1.056549 0 32 (ype) widthshow 4 FF 237.246964 286.650482 M 1.056549 0 32 ( and ) widthshow 5 FF 258.800049 286.650482 M 1.056549 0 32 (ServerT) widthshow 289.720459 286.650482 M 1.056549 0 32 (ype) widthshow 4 FF 303.600464 286.650482 M 1.056549 0 32 ( may be speci\336ed with the ) widthshow 5 FF 417.14978 286.650482 M 1.056549 0 32 (cusertype) widthshow 4 FF 455.469788 286.650482 M 1.056549 0 32 ( and) widthshow 5 FF 473.466339 286.650482 M 1.056549 0 32 ( cservertype) widthshow 4 FF 523.112915 286.650482 M 1.056549 0 32 ( op-) widthshow 180 298.650452 M 1.252319 0 32 (tions, respecti) widthshow 236.55246 298.650452 M 1.252319 0 32 (v) widthshow 241.402542 298.650452 M 1.252319 0 32 (ely) widthshow 252.9729 298.650452 M 1.252319 0 32 (, or both speci\336ed together with the) widthshow 5 FF 402.416809 298.650452 M 1.252319 0 32 ( ctype) widthshow 4 FF 427.269165 298.650452 M 1.252319 0 32 ( option. The ) widthshow 5 FF 482.136108 298.650452 M 1.252319 0 32 (T) widthshow 487.146423 298.650452 M 1.252319 0 32 (r) widthshow 490.886475 298.650452 M 1.252319 0 32 (ansT) widthshow 509.596893 298.650452 M 1.252319 0 32 (ype) widthshow 4 FF 523.476929 298.650452 M 1.252319 0 32 ( de-) widthshow 180 310.650452 M 3.677292 0 32 (f) widthshow 183.230057 310.650452 M 3.677292 0 32 (aults to the ) widthshow 5 FF 240.651932 310.650452 M 3.677292 0 32 (ServerT) widthshow 271.572327 310.650452 M 3.677292 0 32 (ype) widthshow 4 FF 285.452332 310.650452 M 3.677292 0 32 (; it can not be set e) widthshow 382.356201 310.650452 M 3.677292 0 32 (xplicitly; it is set implicitly by the) widthshow (speci\336cation of translation functions.) 180.0 322.65 T (Examples:) 180.0 346.65 T (type) 216.0 370.65 T 5 FF ( mac) 233.22 370.65 T (h_port_mo) 252.23 370.65 T (ve_r) 296.02 370.65 T (eceive_t) 313.42 370.65 T 4 FF ( = MA) 346.18 370.65 T (CH_MSG_TYPE_MO) 372.531 370.65 T (VE_RECEIVE) 463.701 370.65 T (ctype: ) 270.0 382.65 T 5 FF (mac) 296.94 382.65 T (h_port_t) 313.45 382.65 T 4 FF (;) 347.9 382.65 T (type) 216.0 406.65 T 5 FF ( funny_int) 233.22 406.65 T 4 FF ( = ) 273.5 406.65 T 5 FF (int) 284.14 406.65 T 4 FF (cusertype: ) 270.0 418.65 T 5 FF (user_int) 313.6 418.65 T 4 FF (cserv) 270.0 430.65 T (ertype: ) 290.95 430.65 T 5 FF (server_int) 321.22 430.65 T 4 FF (;) 361.77 430.65 T 180 454.65033 M 1.046021 0 32 (If the ) widthshow 5 FF 205.972046 454.65033 M 1.046021 0 32 (ServerT) widthshow 236.892456 454.65033 M 1.046021 0 32 (ype) widthshow 4 FF 250.772461 454.65033 M 1.046021 0 32 ( and the ) widthshow 5 FF 288.070526 454.65033 M 1.046021 0 32 (T) widthshow 293.080811 454.65033 M 1.046021 0 32 (r) widthshow 296.820923 454.65033 M 1.046021 0 32 (ansT) widthshow 315.531311 454.65033 M 1.046021 0 32 (ype) widthshow 4 FF 329.411316 454.65033 M 1.046021 0 32 ( are to be dif) widthshow 383.885559 454.65033 M 1.046021 0 32 (ferent, then translation functions must) widthshow 180 466.65033 M 0.517609 0 32 (be de\336ned to perform the con) widthshow 300.218262 466.65033 M 0.517609 0 32 (v) widthshow 305.068359 466.65033 M 0.517609 0 32 (ersion. All data type translations \(and the destructor func-) widthshow (tion as well\) are performed on the serv) 180.0 478.65 T (er side.) 334.53 478.65 T 180 502.650269 M 1.592361 0 32 (T) widthshow 185.760193 502.650269 M 1.592361 0 32 (ranslation from the ) widthshow 5 FF 269.137268 502.650269 M 1.592361 0 32 (ServerT) widthshow 300.057678 502.650269 M 1.592361 0 32 (ype) widthshow 4 FF 313.937683 502.650269 M 1.592361 0 32 ( to the ) widthshow 5 FF 346.214783 502.650269 M 1.592361 0 32 (T) widthshow 351.225098 502.650269 M 1.592361 0 32 (r) widthshow 354.965149 502.650269 M 1.592361 0 32 (ansT) widthshow 373.675568 502.650269 M 1.592361 0 32 (ype) widthshow 4 FF 387.555573 502.650269 M 1.592361 0 32 ( is performed by an ) widthshow 5 FF 475.777405 502.650269 M 1.592361 0 32 (intr) widthshow 490.077454 502.650269 M 1.592361 0 32 (an) widthshow 4 FF 500.077454 502.650269 M 1.592361 0 32 ( function.) widthshow (The syntax is:) 180.0 514.65 T (intran: ) 216.0 538.65 T 5 FF (T) 244.61 538.65 T (r) 249.62 538.65 T (ansT) 253.36 538.65 T (ype) 272.071 538.65 T 4 FF ( ) 285.951 538.65 T 0 FF (intran-function) 288.451 538.65 T 4 FF ( \(S) 354.011 538.65 T 5 FF (erverT) 365.401 538.65 T (ype\)) 391.321 538.65 T 4 FF 180 562.650269 M 0.404053 0 32 (Note that specifying an ) widthshow 5 FF 277.156219 562.650269 M 0.404053 0 32 (intr) widthshow 291.456299 562.650269 M 0.404053 0 32 (an) widthshow 4 FF 301.456299 562.650269 M 0.404053 0 32 ( function implicitly sets both ) widthshow 5 FF 420.986572 562.650269 M 0.404053 0 32 (ServerT) widthshow 451.906982 562.650269 M 0.404053 0 32 (ype) widthshow 4 FF 465.786987 562.650269 M 0.404053 0 32 ( and ) widthshow 5 FF 486.035095 562.650269 M 0.404053 0 32 (T) widthshow 491.04538 562.650269 M 0.404053 0 32 (r) widthshow 494.785461 562.650269 M 0.404053 0 32 (ansT) widthshow 513.49585 562.650269 M 0.404053 0 32 (ype) widthshow 4 FF 527.375854 562.650269 M 0.404053 0 32 (. A) widthshow 180 574.650208 M 0.895309 0 32 (call to the ) widthshow 5 FF 224.625931 574.650208 M 0.895309 0 32 (intr) widthshow 238.92601 574.650208 M 0.895309 0 32 (an) widthshow 4 FF 248.92601 574.650208 M 0.895309 0 32 ( function is inserted automatically by MIG before the call to the tar) widthshow 527.779846 574.650208 M 0.895309 0 32 (get) widthshow 180 586.650208 M 0.069305 0 32 (serv) widthshow 196.510086 586.650208 M 0.069305 0 32 (er routine. The actual translation function must be \322hand coded\323 \(that is, it is not gen-) widthshow 4 FF (erated by MIG\) and imported, with the follo) 180.0 598.65 T (wing prototype:) 356.39 598.65 T 5 FF (T) 216.0 622.65 T (r) 221.01 622.65 T (ansT) 224.75 622.65 T (ype ) 243.461 622.65 T 0 FF (intran-function ) 259.841 622.65 T 4 FF (\() 327.901 622.65 T 5 FF (ServerT) 331.231 622.65 T (ype x) 362.151 622.65 T 4 FF (\);) 382.971 622.65 T 180 646.650146 M 0.57373 0 32 (T) widthshow 185.760193 646.650146 M 0.57373 0 32 (ranslation back from the ) widthshow 5 FF 288.035126 646.650146 M 0.57373 0 32 (T) widthshow 293.04541 646.650146 M 0.57373 0 32 (r) widthshow 296.785522 646.650146 M 0.57373 0 32 (ansT) widthshow 315.495911 646.650146 M 0.57373 0 32 (ype) widthshow 4 FF 329.375916 646.650146 M 0.57373 0 32 ( to the ) widthshow 5 FF 358.597107 646.650146 M 0.57373 0 32 (ServerT) widthshow 389.517517 646.650146 M 0.57373 0 32 (ype) widthshow 4 FF 403.397522 646.650146 M 0.57373 0 32 ( is performed by an ) widthshow 5 FF 486.526184 646.650146 M 0.57373 0 32 (outtr) widthshow 505.826263 646.650146 M 0.57373 0 32 (an) widthshow 4 FF 515.826294 646.650146 M 0.57373 0 32 ( func-) widthshow (tion. The syntax is:) 180.0 658.65 T (outtran: ) 216.0 682.65 T 5 FF (ServerT) 249.61 682.65 T (ype) 280.53 682.65 T 4 FF ( ) 294.41 682.65 T 0 FF (outtran-function) 296.91 682.65 T 4 FF ( \(T) 368.02 682.65 T 5 FF (r) 379.411 682.65 T (ansT) 383.151 682.65 T (ype\)) 401.861 682.65 T 558 591.983521 2 9.999985 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 23 23 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (19 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (T) 72.0 55.824 T (ype Speci\336cations) 77.338 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666656 M 0.869858 0 32 (Note that specifying an ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 171.01944 114.666656 M 0.869858 0 32 (outtr) widthshow 190.319519 114.666656 M 0.869858 0 32 (an) widthshow 3 FF 200.319519 114.666656 M 0.869858 0 32 ( function implicitly sets both ) widthshow 4 FF 322.178802 114.666656 M 0.869858 0 32 (ServerT) widthshow 353.099213 114.666656 M 0.869858 0 32 (ype) widthshow 3 FF 366.979218 114.666656 M 0.869858 0 32 ( and ) widthshow 4 FF 388.158936 114.666656 M 0.869858 0 32 (T) widthshow 393.16925 114.666656 M 0.869858 0 32 (r) widthshow 396.909302 114.666656 M 0.869858 0 32 (ansT) widthshow 415.61972 114.666656 M 0.869858 0 32 (ype) widthshow 3 FF 429.499725 114.666656 M 0.869858 0 32 (.) widthshow 72 126.666641 M 0.37059 0 32 (A call to the ) widthshow 4 FF 125.142365 126.666641 M 0.37059 0 32 (outtr) widthshow 144.442444 126.666641 M 0.37059 0 32 (an) widthshow 3 FF 154.442444 126.666641 M 0.37059 0 32 ( function is inserted automatically by MIG after the call to the tar) widthshow 419.779663 126.666641 M 0.37059 0 32 (get) widthshow 72 138.666626 M 0.665817 0 32 (serv) widthshow 88.510086 138.666626 M 0.665817 0 32 (er routine. The actual translation function must be \322hand coded\323 and imported, with) widthshow (the follo) 72.0 150.667 T (wing prototype:) 105.36 150.667 T 4 FF (ServerT) 108.0 174.667 T (ype ) 138.92 174.667 T 1 FF (outtran-function ) 155.3 174.667 T 3 FF (\() 228.91 174.667 T 4 FF (T) 232.24 174.667 T (r) 237.251 174.667 T (ansT) 240.991 174.667 T (ype) 259.701 174.667 T 3 FF ( ) 273.581 174.667 T 4 FF (x) 276.081 174.667 T 3 FF (\);) 280.521 174.667 T (Consider an e) 72.0 198.667 T (xample for task related k) 126.84 198.667 T (ernel primiti) 226.16 198.667 T (v) 275.63 198.667 T (es:) 280.48 198.667 T ([1]) 87.34 216.667 T (type) 108.0 216.667 T 4 FF ( task_t) 125.22 216.667 T 3 FF ( = ) 151.61 216.667 T 4 FF (mac) 162.25 216.667 T (h_port_t) 178.76 216.667 T 3 FF ([2]) 87.34 228.667 T (intran: ) 144.0 228.667 T 4 FF (task_t) 172.61 228.667 T 3 FF ( ) 196.5 228.667 T 1 FF (con) 199.0 228.667 T (v) 213.6 228.667 T (ert_port_to_task) 218.5 228.667 T 3 FF (\() 290.15 228.667 T 4 FF (mac) 293.48 228.667 T (h_port_t) 309.99 228.667 T 3 FF (\)) 344.44 228.667 T ([3]) 87.34 240.667 T (outtran: ) 144.0 240.667 T 4 FF (mac) 177.61 240.667 T (h_port_t ) 194.12 240.667 T 1 FF (con) 231.07 240.667 T (v) 245.67 240.667 T (ert_task_to_port) 250.57 240.667 T 3 FF (\() 322.22 240.667 T 4 FF (task_t) 325.55 240.667 T 3 FF (\)) 349.44 240.667 T ([4]) 87.34 252.667 T (destructor: ) 144.0 252.667 T 1 FF (task_deallocate ) 189.27 252.667 T 3 FF (\() 257.32 252.667 T 4 FF (task_t) 260.65 252.667 T 3 FF (\);) 284.54 252.667 T 72 274.666504 M 0.609009 0 32 (\(The destructor function will be e) widthshow 209.035141 274.666504 M 0.609009 0 32 (xplained shortly) widthshow 273.714508 274.666504 M 0.609009 0 32 (.\) In this e) widthshow 315.94162 274.666504 M 0.609009 0 32 (xample, ) widthshow 4 FF 350.990631 274.666504 M 0.609009 0 32 (mac) widthshow 367.500732 274.666504 M 0.609009 0 32 (h_port_t) widthshow 3 FF 401.950714 274.666504 M 0.609009 0 32 (, which) widthshow 72 286.666504 M 0.865738 0 32 (is the type seen by the user code, is de\336ned as a port in the message. The type seen by) widthshow 72 298.666473 M 0.544968 0 32 (the tar) widthshow 97.635071 298.666473 M 0.544968 0 32 (get serv) widthshow 129.410126 298.666473 M 0.544968 0 32 (er code is ) widthshow 4 FF 171.865036 298.666473 M 0.544968 0 32 (task_t) widthshow 3 FF 195.755035 298.666473 M 0.544968 0 32 (, which is some data structure used by the serv) widthshow 386.589844 298.666473 M 0.544968 0 32 (er \(the k) widthshow 420.899841 298.666473 M 0.544968 0 32 (er-) widthshow 72 310.666443 M 0.937958 0 32 (nel, in this case\) to store information about each task it is serving. The) widthshow 4 FF 364.993469 310.666443 M 0.937958 0 32 ( intr) widthshow 382.731506 310.666443 M 0.937958 0 32 (an) widthshow 3 FF 392.731506 310.666443 M 0.937958 0 32 ( function,) widthshow 1 FF 72 322.666443 M 0.742645 0 32 (con) widthshow 86.60022 322.666443 M 0.742645 0 32 (v) widthshow 91.500275 322.666443 M 0.742645 0 32 (ert_port_to_task) widthshow 3 FF 163.150284 322.666443 M 0.742645 0 32 (, translates v) widthshow 214.655716 322.666443 M 0.742645 0 32 (alues of type) widthshow 4 FF 267.241028 322.666443 M 0.742645 0 32 ( mac) widthshow 286.993744 322.666443 M 0.742645 0 32 (h_port_t ) widthshow 3 FF 324.686401 322.666443 M 0.742645 0 32 (to ) widthshow 4 FF 335.709045 322.666443 M 0.742645 0 32 (task_t) widthshow 3 FF 359.59903 322.666443 M 0.742645 0 32 ( on receipt by the) widthshow 72 334.666443 M 1.975479 0 32 (serv) widthshow 88.510086 334.666443 M 1.975479 0 32 (er process. The ) widthshow 4 FF 157.746536 334.666443 M 1.975479 0 32 (outtr) widthshow 177.046616 334.666443 M 1.975479 0 32 (an) widthshow 3 FF 187.046616 334.666443 M 1.975479 0 32 ( function, ) widthshow 1 FF 231.827576 334.666443 M 1.975479 0 32 (con) widthshow 246.427795 334.666443 M 1.975479 0 32 (v) widthshow 251.32785 334.666443 M 1.975479 0 32 (ert_task_to_port) widthshow 3 FF 322.977844 334.666443 M 1.975479 0 32 (, translates v) widthshow 376.948975 334.666443 M 1.975479 0 32 (alues of type) widthshow 4 FF (task_t) 72.0 346.666 T 3 FF ( to type ) 95.89 346.666 T 4 FF (mac) 128.39 346.666 T (h_port_t ) 144.9 346.666 T 3 FF (before return.) 181.85 346.666 T 72 370.666382 M 1.234924 0 32 (F) widthshow 77.41008 370.666382 M 1.234924 0 32 (or this e) widthshow 111.950012 370.666382 M 1.234924 0 32 (xample to w) widthshow 163.759918 370.666382 M 1.234924 0 32 (ork within the k) widthshow 230.974747 370.666382 M 1.234924 0 32 (ernel, the k) widthshow 278.054657 370.666382 M 1.234924 0 32 (ernel must hold some v) widthshow 376.074493 370.666382 M 1.234924 0 32 (alid reference) widthshow 72 382.666382 M 0.251389 0 32 (\(and therefore, some lock\) upon its ) widthshow 4 FF 215.978348 382.666382 M 0.251389 0 32 (task_t) widthshow 3 FF 239.868347 382.666382 M 0.251389 0 32 ( object. Imagine that the ) widthshow 4 FF 340.555298 382.666382 M 0.251389 0 32 (intr) widthshow 354.855377 382.666382 M 0.251389 0 32 (an) widthshow 3 FF 364.855377 382.666382 M 0.251389 0 32 ( function will do) widthshow 72 394.666382 M 0.318527 0 32 (this. This reference must be released after the tar) widthshow 269.028351 394.666382 M 0.318527 0 32 (get serv) widthshow 300.576965 394.666382 M 0.318527 0 32 (er routine is called. When ) widthshow 4 FF 407.699615 394.666382 M 0.318527 0 32 (intr) widthshow 421.999695 394.666382 M 0.318527 0 32 (an) widthshow 3 FF 72 406.666351 M 0.929977 0 32 (functions are called, it is f) widthshow 180.419952 406.666351 M 0.929977 0 32 (airly common that the translation results in allocated storage,) widthshow 72 418.666321 M 1.256134 0 32 (or perhaps additional reference counts for some objects that must be released. F) widthshow 405.463745 418.666321 M 1.256134 0 32 (or this) widthshow (purpose, there are ) 72.0 430.666 T 4 FF (destructor) 145.86 430.666 T 3 FF ( functions. The syntax is:) 186.97 430.666 T (destructor: ) 108.0 454.666 T 1 FF (destructor) 153.27 454.666 T (-function) 197.33 454.666 T 3 FF ( \(T) 236.22 454.666 T 4 FF (r) 247.611 454.666 T (ansT) 251.351 454.666 T (ype\)) 270.061 454.666 T 3 FF 72 478.66629 M 0.026855 0 32 (Note that specifying a) widthshow 4 FF 160.120575 478.66629 M 0.026855 0 32 ( destructor ) widthshow 3 FF 206.284286 478.66629 M 0.026855 0 32 (function implicitly sets ) widthshow 4 FF 301.094849 478.66629 M 0.026855 0 32 (T) widthshow 306.105164 478.66629 M 0.026855 0 32 (r) widthshow 309.845215 478.66629 M 0.026855 0 32 (ansT) widthshow 328.555634 478.66629 M 0.026855 0 32 (ype) widthshow 3 FF 342.435638 478.66629 M 0.026855 0 32 (. A call to the ) widthshow 4 FF 399.229919 478.66629 M 0.026855 0 32 (destruc-) widthshow 72 490.66626 M 1.079254 0 32 (tor ) widthshow 3 FF 87.249252 490.66626 M 1.079254 0 32 (function is inserted automatically by MIG after the call to the tar) widthshow 357.511169 490.66626 M 1.079254 0 32 (get serv) widthshow 389.820496 490.66626 M 1.079254 0 32 (er routine.) widthshow 72 502.66626 M 1.20578 0 32 (The actual destructor function must be \322hand coded\323 and imported, with the follo) widthshow 411.999512 502.66626 M 1.20578 0 32 (wing) widthshow (prototype:) 72.0 514.666 T (v) 108.0 538.666 T (oid) 112.8 538.666 T 4 FF ( ) 125.58 538.666 T 1 FF (destructor) 128.08 538.666 T (-function ) 172.14 538.666 T 3 FF (\() 213.53 538.666 T 4 FF (T) 216.86 538.666 T (r) 221.871 538.666 T (ansT) 225.611 538.666 T (ype) 244.321 538.666 T 3 FF ( ) 258.201 538.666 T 4 FF (x) 260.701 538.666 T 3 FF (\);) 265.141 538.666 T 72 562.666199 M 0.722458 0 32 (In the e) widthshow 103.285004 562.666199 M 0.722458 0 32 (xample, ) widthshow 1 FF 138.447464 562.666199 M 0.722458 0 32 (task_deallocate ) widthshow 3 FF 207.219925 562.666199 M 0.722458 0 32 (is called on the translated input parameter) widthshow 378.34491 562.666199 M 0.722458 0 32 (, ) widthshow 4 FF 384.067383 562.666199 M 0.722458 0 32 (task_t) widthshow 3 FF 407.957367 562.666199 M 0.722458 0 32 (, after) widthshow 72 574.666199 M 0.301743 0 32 (the return from the serv) widthshow 167.477066 574.666199 M 0.301743 0 32 (er procedure and can be used to de-allocate an) widthshow 354.671143 574.666199 M 0.301743 0 32 (y or all parts of the) widthshow (internal v) 72.0 586.666 T (ariable.) 109.8 586.666 T 4 FF 72 610.666138 M 0.314972 0 32 (Destructor) widthshow 3 FF 115.330002 610.666138 M 0.314972 0 32 ( functions are called only for ) widthshow 4 FF 234.969849 610.666138 M 0.314972 0 32 (in) widthshow 3 FF 242.749847 610.666138 M 0.314972 0 32 ( parameters. The) widthshow 310.149902 610.666138 M 0.314972 0 32 (y are not called if the parame-) widthshow 72 622.666138 M 0.208084 0 32 (ter is also an ) widthshow 4 FF 125.602341 622.666138 M 0.208084 0 32 (out) widthshow 3 FF 138.382339 622.666138 M 0.208084 0 32 ( ar) widthshow 148.680527 622.666138 M 0.208084 0 32 (gument, because the correct time to de-allocate an ) widthshow 4 FF 353.345215 622.666138 M 0.208084 0 32 (out) widthshow 3 FF 366.125244 622.666138 M 0.208084 0 32 ( parameter is af-) widthshow 72 634.666138 M 0.348206 0 32 (ter the reply message has been sent, which is not code that can be generated by MIG. \(In) widthshow (these circumstances, ) 72.0 646.666 T 4 FF (dealloc) 156.7 646.666 T 3 FF ( \337ags are needed.\)) 186.14 646.666 T 72 670.666138 M 1.142609 0 32 (A ) widthshow 4 FF 82.86261 670.666138 M 1.142609 0 32 (destructor) widthshow 3 FF 123.97261 670.666138 M 1.142609 0 32 ( function can be used e) widthshow 221.355804 670.666138 M 1.142609 0 32 (v) widthshow 226.205887 670.666138 M 1.142609 0 32 (en if no translation is speci\336ed. F) widthshow 365.961609 670.666138 M 1.142609 0 32 (or e) widthshow 382.224304 670.666138 M 1.142609 0 32 (xample, if a) widthshow 72 682.666077 M 0.313293 0 32 (lar) widthshow 82.370102 682.666077 M 0.313293 0 32 (ge out-of-line data se) widthshow 167.860077 682.666077 M 0.313293 0 32 (gment is passed to the serv) widthshow 276.766632 682.666077 M 0.313293 0 32 (er it could use a ) widthshow 4 FF 344.153107 682.666077 M 0.313293 0 32 (destructor) widthshow 3 FF 385.263123 682.666077 M 0.313293 0 32 ( function to) widthshow (de-allocate the memory after the data w) 72.0 694.666 T (as used. ) 230.74 694.666 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 24 24 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (20 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Mach Interface Generator \(MIG\)) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650665 M 1.156876 0 32 (Note that translation functions are called only for scalar v) widthshow 420.392029 112.650665 M 1.156876 0 32 (alues; MIG will not generate) widthshow (code to translate the multiple elements of an array) 180.0 124.651 T (.) 379.31 124.651 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (T) 180.0 155.984 T (ransmission T) 187.116 155.984 T (ype Changes) 258.577 155.984 T 3 FF (MIG supports types which change during transmission. The syntax is:) 180.0 172.651 T (type) 216.0 196.651 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF ( type-name) 233.22 196.651 T 3 FF ( = ) 277.37 196.651 T 5 FF (sending-IPCT) 288.01 196.651 T (ype) 343.38 196.651 T 3 FF ( | ) 357.26 196.651 T 5 FF (r) 364.26 196.651 T (eceiving-IPCT) 367.781 196.651 T (ype) 425.361 196.651 T 3 FF (;) 439.241 196.651 T 180 220.650604 M 1.056625 0 32 (This syntax indicates that the ) widthshow 5 FF 304.443115 220.650604 M 1.056625 0 32 (msgt_name) widthshow 3 FF 349.993134 220.650604 M 1.056625 0 32 ( \336eld in the message should be set to the IPC) widthshow 180 232.650589 M 2.318115 0 32 (type associated with ) widthshow 5 FF 270.554352 232.650589 M 2.318115 0 32 (sending-IPCT) widthshow 325.924744 232.650589 M 2.318115 0 32 (ype ) widthshow 3 FF 344.622864 232.650589 M 2.318115 0 32 (when the message is transmitted, and that, in) widthshow 180 244.650574 M 0.474503 0 32 (some magic w) widthshow 238.619064 244.650574 M 0.474503 0 32 (ay) widthshow 247.409424 244.650574 M 0.474503 0 32 (, the ) widthshow 5 FF 268.07843 244.650574 M 0.474503 0 32 (msgt_name) widthshow 3 FF 313.628418 244.650574 M 0.474503 0 32 ( \336eld will be the IPC type associated with ) widthshow 5 FF 487.05896 244.650574 M 0.474503 0 32 (r) widthshow 490.579163 244.650574 M 0.474503 0 32 (eceiving-IP-) widthshow 180 256.650574 M 0.265915 0 32 (CT) widthshow 191.490402 256.650574 M 0.265915 0 32 (ype) widthshow 3 FF 205.370407 256.650574 M 0.265915 0 32 ( when it is recei) widthshow 269.504211 256.650574 M 0.265915 0 32 (v) widthshow 274.354309 256.650574 M 0.265915 0 32 (ed. Such an IPC type change clearly only occurs when the associ-) widthshow (ated parameter is handled by some intermediary) 180.0 268.651 T (, or when it is handled by the k) 371.53 268.651 T (ernel.) 495.03 268.651 T 180 292.650513 M 0.668106 0 32 (In cases other than a ) widthshow 5 FF 267.48053 292.650513 M 0.668106 0 32 (K) widthshow 273.80072 292.650513 M 0.668106 0 32 (ernelServer) widthshow 3 FF 320.450745 292.650513 M 0.668106 0 32 ( subsystem, when this type is sent \(either as an ) widthshow 5 FF 516.281799 292.650513 M 0.668106 0 32 (in) widthshow 3 FF 524.061829 292.650513 M 0.668106 0 32 ( pa-) widthshow 180 304.650513 M 0.004074 0 32 (rameter or the return of an ) widthshow 5 FF 287.764465 304.650513 M 0.004074 0 32 (out) widthshow 3 FF 300.544464 304.650513 M 0.004074 0 32 ( or ) widthshow 5 FF 313.882629 304.650513 M 0.004074 0 32 (inout) widthshow 3 FF 334.442627 304.650513 M 0.004074 0 32 ( parameter\), the ) widthshow 5 FF 399.984863 304.650513 M 0.004074 0 32 (msgt_name) widthshow 3 FF 445.534851 304.650513 M 0.004074 0 32 ( \336eld is set by the send-) widthshow 180 316.650513 M 1.994553 0 32 (er of the message to the IPC type associated with ) widthshow 5 FF 398.805542 316.650513 M 1.994553 0 32 (sending-IPCT) widthshow 454.175964 316.650513 M 1.994553 0 32 (ype) widthshow 3 FF 468.055969 316.650513 M 1.994553 0 32 ( and the recei) widthshow 527.379761 316.650513 M 1.994553 0 32 (v) widthshow 532.229858 316.650513 M 1.994553 0 32 (er) widthshow 180 328.650482 M 0.574493 0 32 (e) widthshow 184.290085 328.650482 M 0.574493 0 32 (xpects the \336eld to ha) widthshow 269.158173 328.650482 M 0.574493 0 32 (v) widthshow 274.00824 328.650482 M 0.574493 0 32 (e the IPC type v) widthshow 340.496368 328.650482 M 0.574493 0 32 (alue associated with ) widthshow 5 FF 425.259857 328.650482 M 0.574493 0 32 (r) widthshow 428.78006 328.650482 M 0.574493 0 32 (eceiving-IPCT) widthshow 486.360474 328.650482 M 0.574493 0 32 (ype) widthshow 3 FF 500.240479 328.650482 M 0.574493 0 32 (. This has) widthshow 180 340.650452 M 0.742065 0 32 (the e) widthshow 199.752151 340.650452 M 0.742065 0 32 (xpected beha) widthshow 252.774338 340.650452 M 0.742065 0 32 (vior for ) widthshow 5 FF 287.028473 340.650452 M 0.742065 0 32 (in) widthshow 3 FF 294.808472 340.650452 M 0.742065 0 32 ( and ) widthshow 5 FF 315.732605 340.650452 M 0.742065 0 32 (out) widthshow 3 FF 328.512604 340.650452 M 0.742065 0 32 ( parameters, namely) widthshow 410.157104 340.650452 M 0.742065 0 32 (, that the sender and recei) widthshow 515.807617 340.650452 M 0.742065 0 32 (v) widthshow 520.657654 340.650452 M 0.742065 0 32 (er of) widthshow 180 352.650452 M 0.867416 0 32 (the parameter sees the sending and recei) widthshow 346.014648 352.650452 M 0.867416 0 32 (ving IPC types, respecti) widthshow 443.917053 352.650452 M 0.867416 0 32 (v) widthshow 448.767151 352.650452 M 0.867416 0 32 (ely) widthshow 460.337494 352.650452 M 0.867416 0 32 (. F) widthshow 471.61499 352.650452 M 0.867416 0 32 (or ) widthshow 5 FF 483.312408 352.650452 M 0.867416 0 32 (inout) widthshow 3 FF 503.872406 352.650452 M 0.867416 0 32 ( parame-) widthshow 180 364.650452 M 0.906219 0 32 (ters, this is probably not what is desired, since the user will see the ) widthshow 5 FF 461.547089 364.650452 M 0.906219 0 32 (inout) widthshow 3 FF 482.107086 364.650452 M 0.906219 0 32 ( parameter re-) widthshow (turn with a dif) 180.0 376.65 T (ferent IPC type then that with which it w) 236.69 376.65 T (as sent.) 399.91 376.65 T 180 400.650391 M 1.659958 0 32 (Note that this syntax only e) widthshow 297.869873 400.650391 M 1.659958 0 32 (xpresses that the IPC type, as re\337ected in the ) widthshow 5 FF 494.449524 400.650391 M 1.659958 0 32 (msgt_name) widthshow 3 FF 180 412.650391 M 0.535233 0 32 widthshow 323.586731 412.650391 M 0.535233 0 32 (xpress an actual type change as seen by the user stub) widthshow 180 424.650391 M 0.591278 0 32 (or tar) widthshow 201.791382 424.650391 M 0.591278 0 32 (get serv) widthshow 233.612747 424.650391 M 0.591278 0 32 (er routine, nor does it e) widthshow 329.17923 424.650391 M 0.591278 0 32 (xpress ho) widthshow 367.570648 424.650391 M 0.591278 0 32 (w such a con) widthshow 420.874695 424.650391 M 0.591278 0 32 (v) widthshow 425.724792 424.650391 M 0.591278 0 32 (ersion occurs. If this feature) widthshow 180 436.65036 M 0.445969 0 32 (is used with other than port types, it will probably be used in conjunction with ) widthshow 5 FF 501.679535 436.65036 M 0.445969 0 32 (cusertype) widthshow 3 FF (and ) 180.0 448.65 T 5 FF (cservertype) 196.94 448.65 T 3 FF ( to e) 243.03 448.65 T (xpress the probable \(magic\) type con) 260.1 448.65 T (v) 407.72 448.65 T (ersions that will be occurring.) 412.57 448.65 T 3 FF 180 472.65033 M 0.311615 0 32 (One use for transmission type changes is in ) widthshow 5 FF 358.582947 472.65033 M 0.311615 0 32 (K) widthshow 364.903137 472.65033 M 0.311615 0 32 (ernelServer) widthshow 3 FF 411.553131 472.65033 M 0.311615 0 32 ( subsystems where the recipient) widthshow 180 484.65033 M 0.309982 0 32 (of a message is the k) widthshow 264.48999 484.65033 M 0.309982 0 32 (ernel and so the k) widthshow 336.169983 484.65033 M 0.309982 0 32 (ernel can arrange for IPC type translations. This is) widthshow 180 496.650299 M 0.902817 0 32 (most lik) widthshow 213.312866 496.650299 M 0.902817 0 32 (ely to be used in conjunction with request and reply ports, which are translated) widthshow 180 508.650269 M 0.312424 0 32 (by necessity in the transmission process. F) widthshow 351.994629 508.650269 M 0.312424 0 32 (or e) widthshow 367.427124 508.650269 M 0.312424 0 32 (xample, gi) widthshow 409.709717 508.650269 M 0.312424 0 32 (v) widthshow 414.559784 508.650269 M 0.312424 0 32 (en the follo) widthshow 460.484772 508.650269 M 0.312424 0 32 (wing de\336nitions for) widthshow (the Mach IPC port types:) 180.0 520.65 T ([1]) 195.34 538.65 T (#de\336ne MA) 216.0 538.65 T (CH_MSG_TYPE_MO) 263.65 538.65 T (VE_RECEIVE ) 354.82 538.65 T (16) 417.871 538.65 T ([2]) 195.34 550.65 T (#de\336ne MA) 216.0 550.65 T (CH_MSG_TYPE_MO) 263.65 550.65 T (VE_SEND) 354.82 550.65 T (17) 399.261 550.65 T ([3]) 195.34 562.65 T (#de\336ne MA) 216.0 562.65 T (CH_MSG_TYPE_MO) 263.65 562.65 T (VE_SEND_ONCE) 354.82 562.65 T (18) 431.481 562.65 T ([4]) 195.34 574.65 T (#de\336ne MA) 216.0 574.65 T (CH_MSG_TYPE_COPY_SEND) 263.65 574.65 T (19) 396.991 574.65 T ([5]) 195.34 586.65 T (#de\336ne MA) 216.0 586.65 T (CH_MSG_TYPE_MAKE_SEND) 263.65 586.65 T (20) 399.761 586.65 T ([6]) 195.34 598.65 T (#de\336ne MA) 216.0 598.65 T (CH_MSG_TYPE_MAKE_SEND_ONCE) 263.65 598.65 T (21) 431.981 598.65 T ([7]) 195.34 610.65 T (#de\336ne MA) 216.0 610.65 T (CH_MSG_TYPE_POL) 263.65 610.65 T (YMORPHIC) 357.101 610.65 T (-1) 409.881 610.65 T 180 632.650146 M 0.350571 0 32 (the follo) widthshow 213.710709 632.650146 M 0.350571 0 32 (wing b) widthshow 241.361389 632.650146 M 0.350571 0 32 (uilt-in MIG types can be vie) widthshow 355.904388 632.650146 M 0.350571 0 32 (wed as de\336ned in the follo) widthshow 463.227386 632.650146 M 0.350571 0 32 (wing w) widthshow 493.197998 632.650146 M 0.350571 0 32 (ay from the) widthshow 3 FF (Mach IPC types:) 180.0 644.65 T 3 FF ([1]) 195.34 662.65 T (type MA) 216.0 662.65 T (CH_MSG_TYPE_MO) 251.43 662.65 T (VE_RECEIVE = ) 342.6 662.65 T (16;) 413.79 662.65 T ([2]) 195.34 674.65 T (type MA) 216.0 674.65 T (CH_MSG_TYPE_MO) 251.43 674.65 T (VE_SEND = ) 342.6 674.65 T (17;) 397.68 674.65 T ([3]) 195.34 686.65 T (type MA) 216.0 686.65 T (CH_MSG_TYPE_MO) 251.43 686.65 T (VE_SEND_ONCE =) 342.6 686.65 T (18;) 427.4 686.65 T ([4]) 195.34 698.65 T (type MA) 216.0 698.65 T (CH_MSG_TYPE_COPY_SEND =) 251.43 698.65 T (19 | 17;) 396.0 698.65 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 25 25 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (21 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Operation Descriptions) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([5]) 87.34 114.667 T (type MA) 108.0 114.667 T (CH_MSG_TYPE_MAKE_SEND =) 143.43 114.667 T (20 | 17;) 288.0 114.667 T ([6]) 87.34 126.667 T (type MA) 108.0 126.667 T (CH_MSG_TYPE_MAKE_SEND_ONCE =) 143.43 126.667 T (21 | 18;) 319.9 126.667 T 72 148.666626 M 0.251312 0 32 (The other major use of transmission type changes is to specify a parameter \(most lik) widthshow 412.58844 148.666626 M 0.251312 0 32 (ely a) widthshow 72 160.666611 M 1.304962 0 32 (port type\) that is polymorphic on the sender\325) widthshow 259.175049 160.666611 M 1.304962 0 32 (s side \(user side for ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 345.959869 160.666611 M 1.304962 0 32 (in) widthshow 3 FF 353.739868 160.666611 M 1.304962 0 32 ( parameters, serv) widthshow 424.229889 160.666611 M 1.304962 0 32 (er) widthshow 72 172.666595 M 0.543243 0 32 (side for ) widthshow 4 FF 105.856491 172.666595 M 0.543243 0 32 (out) widthshow 3 FF 118.63649 172.666595 M 0.543243 0 32 ( parameters, both for ) widthshow 4 FF 206.619476 172.666595 M 0.543243 0 32 (inout) widthshow 3 FF 227.179474 172.666595 M 0.543243 0 32 ( parameters\) b) widthshow 285.266083 172.666595 M 0.543243 0 32 (ut of a kno) widthshow 329.695953 172.666595 M 0.543243 0 32 (wn type on the recei) widthshow 412.709076 172.666595 M 0.543243 0 32 (v) widthshow 417.559143 172.666595 M 0.543243 0 32 (er\325) widthshow 428.109467 172.666595 M 0.543243 0 32 (s) widthshow 3 FF 72 184.66658 M 0.553314 0 32 (side. That is, the sender will specify a port and a port type, b) widthshow 320.62323 184.66658 M 0.553314 0 32 (ut the result of sending this) widthshow 72 196.666565 M 0.294296 0 32 (port will be to generate a kno) widthshow 190.715927 196.666565 M 0.294296 0 32 (wn port type. The follo) widthshow 284.13324 196.666565 M 0.294296 0 32 (wing b) widthshow 311.727661 196.666565 M 0.294296 0 32 (uilt-in MIG types ha) widthshow 394.350647 196.666565 M 0.294296 0 32 (v) widthshow 399.200745 196.666565 M 0.294296 0 32 (e such a) widthshow (speci\336cation:) 72.0 208.667 T ([1]) 87.34 226.667 T (type MA) 108.0 226.667 T (CH_MSG_TYPE_POR) 143.43 226.667 T (T_RECEIVE =) 237.841 226.667 T (-1 | 16;) 299.311 226.667 T ([2]) 87.34 238.667 T (type MA) 108.0 238.667 T (CH_MSG_TYPE_POR) 143.43 238.667 T (T_SEND =) 237.841 238.667 T (-1 | 17;) 288.0 238.667 T ([3]) 87.34 250.667 T (type MA) 108.0 250.667 T (CH_MSG_TYPE_POR) 143.43 250.667 T (T_SEND_ONCE =) 237.841 250.667 T (-1 | 18;) 315.421 250.667 T (As an e) 72.0 272.666 T (xample, ) 101.84 272.666 T 1 FF (std_types.defs) 136.28 272.666 T 3 FF ( mak) 196.0 272.666 T (es the follo) 215.62 272.666 T (wing de\336nition:) 259.81 272.666 T (type ) 108.0 296.666 T 4 FF (mac) 127.72 296.666 T (h_port_send_t) 144.23 296.666 T 3 FF ( = MA) 202.01 296.666 T (CH_MSG_TYPE_POR) 228.36 296.666 T (T_SEND) 322.771 296.666 T (ctype: ) 162.0 308.666 T 4 FF (mac) 188.94 308.666 T (h_port_t) 205.45 308.666 T 3 FF (;) 239.9 308.666 T (The \(k) 72.0 332.666 T (ernel\) function ) 98.28 332.666 T 1 FF (de) 159.93 332.666 T (vice_set_\336lter) 169.78 332.666 T 3 FF ( is de\336ned as follo) 228.65 332.666 T (ws:) 301.73 332.666 T ([1]) 87.34 350.666 T (routine ) 108.0 350.666 T 1 FF (de) 138.83 350.666 T (vice_set_\336lter) 148.68 350.666 T 3 FF ([2]) 87.34 362.666 T (\() 108.0 362.666 T ([3]) 87.34 374.666 T 3 FF (de) 144.0 374.666 T (vice:) 153.19 374.666 T (de) 288.0 374.666 T (vice_t;) 297.19 374.666 T 3 FF ([4]) 87.34 386.666 T 4 FF (r) 144.0 386.666 T (eceive_port) 147.52 386.666 T 3 FF (:) 194.17 386.666 T 4 FF (mac) 288.0 386.666 T (h_port_send_t) 304.51 386.666 T 3 FF (;) 362.29 386.666 T ([5]) 87.34 398.666 T 4 FF (priority:) 144.0 398.666 T (int) 288.0 398.666 T 3 FF (;) 298.56 398.666 T ([6]) 87.34 410.666 T 4 FF 144.0 410.666 T 288.0 410.666 T (ay_t) 324.52 410.666 T 3 FF ([7]) 87.34 422.666 T (\);) 108.0 422.666 T 72 444.666321 M 0.031281 0 32 (On the sending side, ) widthshow 4 FF 156.285126 444.666321 M 0.031281 0 32 (r) widthshow 159.805328 444.666321 M 0.031281 0 32 (eceive_port) widthshow 3 FF 206.455338 444.666321 M 0.031281 0 32 ( is of MIG type ) widthshow 4 FF 270.771729 444.666321 M 0.031281 0 32 (polymorphic) widthshow 3 FF 321.321747 444.666321 M 0.031281 0 32 (, so it e) widthshow 350.15567 444.666321 M 0.031281 0 32 (xpands into an ar) widthshow 418.669617 444.666321 M 0.031281 0 32 (gu-) widthshow 72 456.666321 M 1.00795 0 32 (ment of type ) widthshow 4 FF 128.073853 456.666321 M 1.00795 0 32 (mac) widthshow 144.583939 456.666321 M 1.00795 0 32 (h_port_t) widthshow 3 FF 179.033936 456.666321 M 1.00795 0 32 ( \(the ) widthshow 4 FF 201.599838 456.666321 M 1.00795 0 32 (ctype) widthshow 3 FF 222.699844 456.666321 M 1.00795 0 32 (\) and an ar) widthshow 268.023804 456.666321 M 1.00795 0 32 (gument to specify the MIG type for the) widthshow 72 468.66629 M 2.481949 0 32 (message header \() widthshow 4 FF 145.823914 468.66629 M 2.481949 0 32 (mac) widthshow 162.334 468.66629 M 2.481949 0 32 (h_msg_type_name_t) widthshow 3 FF 244.544006 468.66629 M 2.481949 0 32 (\). The sender can supply a recei) widthshow 386.085876 468.66629 M 2.481949 0 32 (v) widthshow 390.935944 468.66629 M 2.481949 0 32 (e or send) widthshow 72 480.66626 M 0.13237 0 32 (right, specifying MA) widthshow 156.024963 480.66626 M 0.13237 0 32 (CH_MSG_TYPE_MAKE_SEND or MA) widthshow 321.439941 480.66626 M 0.13237 0 32 (CH_MSG_TYPE_COPY_-) widthshow 72 492.66626 M 1.269028 0 32 (SEND, respecti) widthshow 135.229172 492.66626 M 1.269028 0 32 (v) widthshow 140.079254 492.66626 M 1.269028 0 32 (ely) widthshow 151.649612 492.66626 M 1.269028 0 32 (, for the port type parameter) widthshow 269.635071 492.66626 M 1.269028 0 32 (. On the recei) widthshow 327.062317 492.66626 M 1.269028 0 32 (v) widthshow 331.912384 492.66626 M 1.269028 0 32 (e side, ) widthshow 4 FF 362.500427 492.66626 M 1.269028 0 32 (r) widthshow 366.02063 492.66626 M 1.269028 0 32 (eceive_port ) widthshow 3 FF 416.439697 492.66626 M 1.269028 0 32 (will) widthshow 72 504.66626 M 0.669891 0 32 (automatically become of IPC type MA) widthshow 230.209686 504.66626 M 0.669891 0 32 (CH_MSG_TYPE_MO) widthshow 321.379944 504.66626 M 0.669891 0 32 (VE_SEND, and the recei) widthshow 423.6698 504.66626 M 0.669891 0 32 (v-) widthshow (er will only see a single parameter) 72.0 516.666 T (, of C type ) 208.79 516.666 T 4 FF (mac) 253.51 516.666 T (h_port_t) 270.02 516.666 T 3 FF (.) 304.47 516.666 T 72 558.999512 360 3.024002 CR 432 560.51 M 72 560.51 L S 0 0 612 792 CR 5 (Times-Bold) 14 1 mymakefontmetric 5 FF (Operation Descriptions) 72.0 554.333 T 3 FF (An operation description has the syntax:) 72.0 578.69 T 4 FF (oper) 108.0 602.69 T (ation-type) 126.18 602.69 T 3 FF ( ) 166.73 602.69 T 1 FF (operation-name) 169.23 602.69 T 3 FF ( \() 237.0 602.69 T 1 FF (parameter) 242.83 602.69 T (-list) 287.44 602.69 T 4 FF (\)) 303.55 602.69 T 3 FF (;) 306.88 602.69 T 72 626.690186 M 0.549316 0 32 (The) widthshow 4 FF 87.550003 626.690186 M 0.549316 0 32 ( ) widthshow 1 FF 90.599319 626.690186 M 0.549316 0 32 (parameter) widthshow 135.209534 626.690186 M 0.549316 0 32 (-list) widthshow 3 FF 151.319534 626.690186 M 0.549316 0 32 ( is a list of parameter names and types separated by \322;\323. The form of) widthshow (each parameter is:) 72.0 638.69 T 4 FF (speci\336cation var) 108.0 662.69 T (-name:) 174.18 662.69 T 3 FF ( ) 202.5 662.69 T 1 FF (type-description) 205.0 662.69 T 3 FF ( [,) 274.44 662.69 T 1 FF (IPC-\337ags) 282.77 662.69 T 3 FF (]) 322.77 662.69 T 52 403.999695 2 9.999985 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 26 26 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (22 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Mach Interface Generator \(MIG\)) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650665 M 0.413284 0 32 (where) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 204.430008 112.650665 M 0.413284 0 32 ( speci\336cation) widthshow 3 FF 257.893311 112.650665 M 0.413284 0 32 ( may either be omitted or be one of the follo) widthshow 438.41629 112.650665 M 0.413284 0 32 (wing: ) widthshow 4 FF 464.109558 112.650665 M 0.413284 0 32 (in) widthshow 3 FF 471.889587 112.650665 M 0.413284 0 32 ( | ) widthshow 4 FF 479.716125 112.650665 M 0.413284 0 32 (out) widthshow 3 FF 492.496155 112.650665 M 0.413284 0 32 ( | ) widthshow 4 FF 500.322693 112.650665 M 0.413284 0 32 (inout) widthshow 3 FF 520.88269 112.650665 M 0.413284 0 32 ( | ) widthshow 4 FF 528.70929 112.650665 M 0.413284 0 32 (r) widthshow 532.229492 112.650665 M 0.413284 0 32 (e-) widthshow 180 124.65065 M 0.402252 0 32 (questport) widthshow 3 FF 217.779999 124.65065 M 0.402252 0 32 ( |) widthshow 4 FF 222.682251 124.65065 M 0.402252 0 32 ( r) widthshow 229.104706 124.65065 M 0.402252 0 32 (eplyport) widthshow 3 FF 262.434692 124.65065 M 0.402252 0 32 ( |) widthshow 4 FF 267.336975 124.65065 M 0.402252 0 32 ( sr) widthshow 277.649414 124.65065 M 0.402252 0 32 (eplyport ) widthshow 3 FF 313.881653 124.65065 M 0.402252 0 32 (|) widthshow 4 FF 315.881653 124.65065 M 0.402252 0 32 ( ur) widthshow 327.304138 124.65065 M 0.402252 0 32 (eplyport ) widthshow 3 FF 363.536377 124.65065 M 0.402252 0 32 (| ) widthshow 4 FF 368.438629 124.65065 M 0.402252 0 32 (waittime) widthshow 3 FF 402.888611 124.65065 M 0.402252 0 32 ( | ) widthshow 4 FF 410.693115 124.65065 M 0.402252 0 32 (msgseqno) widthshow 3 FF 450.133118 124.65065 M 0.402252 0 32 ( | ) widthshow 4 FF 457.937622 124.65065 M 0.402252 0 32 (msgoption) widthshow 3 FF 499.607635 124.65065 M 0.402252 0 32 (. ) widthshow 0 FF 505.009888 124.65065 M 0.402252 0 32 (type-de-) widthshow 180 136.650635 M 1.000702 0 32 (scription) widthshow 3 FF 217.779999 136.650635 M 1.000702 0 32 ( can be an) widthshow 260.892212 136.650635 M 1.000702 0 32 (y) widthshow 4 FF 265.892212 136.650635 M 1.000702 0 32 ( user) widthshow 286.413025 136.650635 M 1.000702 0 32 (-typename) widthshow 3 FF 328.063019 136.650635 M 1.000702 0 32 ( that w) widthshow 357.184479 136.650635 M 1.000702 0 32 (as declared in the type de\336nitions section or) widthshow 180 148.65062 M 1.173508 0 32 (can be a complete) widthshow 4 FF 255.440536 148.65062 M 1.173508 0 32 ( ) widthshow 0 FF 259.114044 148.65062 M 1.173508 0 32 (type-description) widthshow 3 FF 328.554047 148.65062 M 1.173508 0 32 ( in the same form as in the type de\336nition section.) widthshow 180 160.650604 M 0.420685 0 32 (The ) widthshow 0 FF 198.470688 160.650604 M 0.420685 0 32 (IPC-\337ags) widthshow 3 FF 238.470688 160.650604 M 0.420685 0 32 ( are either omitted or consist of a comma separated list of ) widthshow 4 FF 475.698914 160.650604 M 0.420685 0 32 (dealloc) widthshow 3 FF 505.138916 160.650604 M 0.420685 0 32 (, ) widthshow 4 FF 510.559631 160.650604 M 0.420685 0 32 (dealloc) widthshow 3 FF 180 172.650589 M 0.289001 0 32 ([], ) widthshow 4 FF 191.949005 172.650589 M 0.289001 0 32 (notdealloc) widthshow 3 FF 234.169006 172.650589 M 0.289001 0 32 (, ) widthshow 4 FF 239.458008 172.650589 M 0.289001 0 32 (islong) widthshow 3 FF 263.90802 172.650589 M 0.289001 0 32 (, ) widthshow 4 FF 269.197021 172.650589 M 0.289001 0 32 (isnotlong) widthshow 306.327057 172.650589 M 0.289001 0 32 (,) widthshow 3 FF 308.827057 172.650589 M 0.289001 0 32 ( ) widthshow 4 FF 311.616058 172.650589 M 0.289001 0 32 (server) widthshow 336.236267 172.650589 M 0.289001 0 32 (copy) widthshow 3 FF 355.116272 172.650589 M 0.289001 0 32 ( and ) widthshow 4 FF 375.134277 172.650589 M 0.289001 0 32 (countinout) widthshow 3 FF 417.914276 172.650589 M 0.289001 0 32 (. These \337ags will o) widthshow 494.750366 172.650589 M 0.289001 0 32 (v) widthshow 499.600464 172.650589 M 0.289001 0 32 (erride an) widthshow 534.999512 172.650589 M 0.289001 0 32 (y) widthshow (IPC \337ags associated with the type de\336nition. \(Refer to IPC Flags on page 12.\)) 180.0 184.651 T 180 208.650558 M 0.659943 0 32 (The ) widthshow 4 FF 198.709946 208.650558 M 0.659943 0 32 (oper) widthshow 216.89003 208.650558 M 0.659943 0 32 (ation-type) widthshow 3 FF 257.440033 208.650558 M 0.659943 0 32 ( is either ) widthshow 4 FF 296.359863 208.650558 M 0.659943 0 32 (r) widthshow 299.80011 208.650558 M 0.659943 0 32 (outine) widthshow 3 FF 324.80011 208.650558 M 0.659943 0 32 (, to specify an operation that e) widthshow 449.419861 208.650558 M 0.659943 0 32 (xpects a reply) widthshow 505.630127 208.650558 M 0.659943 0 32 (, or ) widthshow 4 FF 522.780029 208.650558 M 0.659943 0 32 (sim-) widthshow (pler) 180.0 220.651 T (outine) 195.66 220.651 T 3 FF (, for an operation that does not recei) 220.66 220.651 T (v) 364.82 220.651 T (e a reply) 369.67 220.651 T (.) 403.451 220.651 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Request and Reply P) 180.0 251.984 T (orts) 286.764 251.984 T 3 FF 180 268.650513 M 1.35994 0 32 (The \336rst \(not otherwise speci\336ed\) parameter in an) widthshow 389.049683 268.650513 M 1.35994 0 32 (y operation statement is assumed be) widthshow 180 280.650513 M 0.709915 0 32 (the ) widthshow 4 FF 195.429916 280.650513 M 0.709915 0 32 (r) widthshow 198.950119 280.650513 M 0.709915 0 32 (equestport) widthshow 3 FF 241.17012 280.650513 M 0.709915 0 32 ( unless a) widthshow 4 FF 277.029968 280.650513 M 0.709915 0 32 ( r) widthshow 283.760071 280.650513 M 0.709915 0 32 (equestport) widthshow 3 FF 325.980072 280.650513 M 0.709915 0 32 ( parameter is speci\336ed. This is the port to which the) widthshow (message will be sent.) 180.0 292.65 T 180 316.650482 M 0.657303 0 32 (By def) widthshow 207.49736 316.650482 M 0.657303 0 32 (ault, MIG user stub routines use a MIG internal reply port for recei) widthshow 483.135162 316.650482 M 0.657303 0 32 (ving the reply) widthshow 180 328.650452 M 1.804916 0 32 (message. The ) widthshow 4 FF 240.539841 328.650452 M 1.804916 0 32 (r) widthshow 244.060043 328.650452 M 1.804916 0 32 (eplyport) widthshow 3 FF 277.390045 328.650452 M 1.804916 0 32 ( speci\336cation allo) widthshow 351.300018 328.650452 M 1.804916 0 32 (ws one of the parameters to be an e) widthshow 506.659454 328.650452 M 1.804916 0 32 (xplicitly) widthshow 180 340.650452 M 0.789062 0 32 (named reply port. The ) widthshow 4 FF 274.526245 340.650452 M 0.789062 0 32 (sr) widthshow 281.936462 340.650452 M 0.789062 0 32 (eplyport) widthshow 3 FF 315.266479 340.650452 M 0.789062 0 32 ( and ) widthshow 4 FF 336.284607 340.650452 M 0.789062 0 32 (ur) widthshow 344.80481 340.650452 M 0.789062 0 32 (eplyport) widthshow 3 FF 378.134796 340.650452 M 0.789062 0 32 ( speci\336cations ha) widthshow 448.393036 340.650452 M 0.789062 0 32 (v) widthshow 453.243103 340.650452 M 0.789062 0 32 (e a related ef) widthshow 506.720459 340.650452 M 0.789062 0 32 (fect that) widthshow (is related to the generation of the actual function interf) 180.0 352.65 T (ace prototypes, as e) 397.91 352.65 T (xplained belo) 476.07 352.65 T (w) 529.98 352.65 T (.) 536.551 352.65 T 5 FF (P) 180.0 383.984 T (arameter Dir) 187.212 383.984 T (ection) 254.628 383.984 T 3 FF 180 400.650421 M 0.822784 0 32 (The k) widthshow 203.772842 400.650421 M 0.822784 0 32 (e) widthshow 208.062927 400.650421 M 0.822784 0 32 (yw) widthshow 220.182983 400.650421 M 0.822784 0 32 (ords) widthshow 4 FF 237.402985 400.650421 M 0.822784 0 32 ( in) widthshow 3 FF 248.505768 400.650421 M 0.822784 0 32 (, ) widthshow 4 FF 254.328552 400.650421 M 0.822784 0 32 (out) widthshow 3 FF 267.108551 400.650421 M 0.822784 0 32 ( and) widthshow 4 FF 284.871338 400.650421 M 0.822784 0 32 ( inout) widthshow 3 FF 308.75412 400.650421 M 0.822784 0 32 ( are optional and indicate the direction of the parameter) widthshow 537.499512 400.650421 M 0.822784 0 32 (.) widthshow 180 412.650391 M 0.171692 0 32 (If no such k) widthshow 227.905136 412.650391 M 0.171692 0 32 (e) widthshow 232.195221 412.650391 M 0.171692 0 32 (yw) widthshow 244.315277 412.650391 M 0.171692 0 32 (ord is gi) widthshow 277.188782 412.650391 M 0.171692 0 32 (v) widthshow 282.038879 412.650391 M 0.171692 0 32 (en the def) widthshow 321.712341 412.650391 M 0.171692 0 32 (ault is ) widthshow 4 FF 348.725708 412.650391 M 0.171692 0 32 (in) widthshow 3 FF 356.505707 412.650391 M 0.171692 0 32 (. The k) widthshow 384.799133 412.650391 M 0.171692 0 32 (e) widthshow 389.089233 412.650391 M 0.171692 0 32 (yw) widthshow 401.20929 412.650391 M 0.171692 0 32 (ord) widthshow 4 FF 414.539307 412.650391 M 0.171692 0 32 ( in) widthshow 3 FF 424.990967 412.650391 M 0.171692 0 32 ( is used with parameters that) widthshow 180 424.650391 M 0.915833 0 32 (are to be sent to the serv) widthshow 282.545105 424.650391 M 0.915833 0 32 (er) widthshow 289.765381 424.650391 M 0.915833 0 32 (. The k) widthshow 319.547119 424.650391 M 0.915833 0 32 (e) widthshow 323.837219 424.650391 M 0.915833 0 32 (yw) widthshow 335.957275 424.650391 M 0.915833 0 32 (ord) widthshow 4 FF 349.287262 424.650391 M 0.915833 0 32 ( out) widthshow 3 FF 365.483093 424.650391 M 0.915833 0 32 ( is used with parameters to be returned by) widthshow (the serv) 180.0 436.65 T (er) 211.23 436.65 T (. The k) 218.45 436.65 T (e) 246.4 436.65 T (yw) 250.691 436.65 T (ord) 262.811 436.65 T 4 FF ( inout) 276.141 436.65 T 3 FF ( is used with parameters to be both sent and returned.) 299.201 436.65 T 5 FF (W) 180.0 467.984 T (aitT) 191.22 467.984 T (ime P) 212.341 467.984 T (arameter) 241.213 467.984 T 3 FF 180 484.65036 M 0.881607 0 32 (The) widthshow 4 FF 195.550003 484.65036 M 0.881607 0 32 ( waittime) widthshow 3 FF 233.381607 484.65036 M 0.881607 0 32 ( k) widthshow 241.663269 484.65036 M 0.881607 0 32 (e) widthshow 245.953354 484.65036 M 0.881607 0 32 (yw) widthshow 258.073425 484.65036 M 0.881607 0 32 (ord indicates that the corresponding ar) widthshow 415.881561 484.65036 M 0.881607 0 32 (gument to the user stub speci-) widthshow 180 496.65033 M 1.033936 0 32 widthshow 255.351944 496.65033 M 1.033936 0 32 (alue to be used. The v) widthshow 348.031769 496.65033 M 1.033936 0 32 (alue is the maximum time in milliseconds that) widthshow 3 FF 180 508.65033 M 0.38829 0 32 (the user code will w) widthshow 261.993225 508.65033 M 0.38829 0 32 (ait for a reply from the serv) widthshow 374.143066 508.65033 M 0.38829 0 32 (er) widthshow 381.363373 508.65033 M 0.38829 0 32 (. If no ) widthshow 4 FF 409.188232 508.65033 M 0.38829 0 32 (waittime) widthshow 3 FF 443.638245 508.65033 M 0.38829 0 32 ( parameter is used, or if) widthshow 3 FF 180 520.65033 M 1.484329 0 32 (no w) widthshow 201.104385 520.65033 M 1.484329 0 32 (ait time statement has been seen, the RPC does not return until a message is re-) widthshow 3 FF (cei) 180.0 532.65 T (v) 191.41 532.65 T (ed. This v) 196.26 532.65 T (alue sets the ) 235.73 532.65 T 4 FF (timeout) 287.11 532.65 T 3 FF ( ar) 317.11 532.65 T (gument to the ) 327.2 532.65 T 0 FF (mach_msg) 384.7 532.65 T 3 FF ( call.) 430.25 532.65 T 5 FF (MsgOption P) 180.0 563.984 T (arameter) 248.22 563.984 T 3 FF 180 580.650269 M 0.279953 0 32 (The) widthshow 4 FF 195.550003 580.650269 M 0.279953 0 32 ( msgoption) widthshow 3 FF 239.999954 580.650269 M 0.279953 0 32 ( k) widthshow 247.679962 580.650269 M 0.279953 0 32 (e) widthshow 251.970047 580.650269 M 0.279953 0 32 (yw) widthshow 264.090088 580.650269 M 0.279953 0 32 (ord indicates that the corresponding ar) widthshow 418.889984 580.650269 M 0.279953 0 32 (gument to the user stub speci-) widthshow 180 592.650269 M 1.204224 0 32 widthshow 0 FF 299.621124 592.650269 M 1.204224 0 32 (mach_msg) widthshow 3 FF 345.171143 592.650269 M 1.204224 0 32 ( call. The v) widthshow 393.523926 592.650269 M 1.204224 0 32 (alue is OR\325ed into the ) widthshow 4 FF 489.815063 592.650269 M 1.204224 0 32 (option) widthshow 3 FF 515.375061 592.650269 M 1.204224 0 32 ( ar) widthshow 526.669373 592.650269 M 1.204224 0 32 (gu-) widthshow (ment to the ) 180.0 604.65 T 0 FF (mach_msg) 227.5 604.65 T 3 FF ( call.) 273.05 604.65 T 5 FF (MsgSeqno P) 180.0 635.984 T (arameter) 243.552 635.984 T 3 FF 180 652.650269 M 0.573044 0 32 (Messages recei) widthshow 241.133194 652.650269 M 0.573044 0 32 (v) widthshow 245.983276 652.650269 M 0.573044 0 32 (ed from a port contain a sequence number indicating the order of recep-) widthshow 180 664.650208 M 1.202805 0 32 (tion. This information can be of use to multi-threaded serv) widthshow 424.535339 664.650208 M 1.202805 0 32 (ers to order the acti) widthshow 506.296692 664.650208 M 1.202805 0 32 (vities of) widthshow 180 676.650208 M 0.401489 0 32 (multiple threads recei) widthshow 267.203125 676.650208 M 0.401489 0 32 (ving from the same port. This sequence number can be made a) widthshow 521.919678 676.650208 M 0.401489 0 32 (v) widthshow 526.6698 676.650208 M 0.401489 0 32 (ail-) widthshow 558 165.983932 2 9.999985 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 27 27 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (23 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Function Pr) 72.0 55.824 T (ototype Generation) 118.089 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666656 M 1.169006 0 32 (able with the ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 129.667023 114.666656 M 1.169006 0 32 (msgseqno) widthshow 3 FF 169.107025 114.666656 M 1.169006 0 32 ( k) widthshow 177.676086 114.666656 M 1.169006 0 32 (e) widthshow 181.966171 114.666656 M 1.169006 0 32 (yw) widthshow 194.086227 114.666656 M 1.169006 0 32 (ord. The associated serv) widthshow 294.083344 114.666656 M 1.169006 0 32 (er) widthshow 301.653442 114.666656 M 1.169006 0 32 (-side parameter will recei) widthshow 406.820618 114.666656 M 1.169006 0 32 (v) widthshow 411.670715 114.666656 M 1.169006 0 32 (e the) widthshow (message\325) 72.0 126.667 T (s sequence number) 108.66 126.667 T (.) 184.201 126.667 T 72 168.999939 360 3.024002 CR 432 170.51 M 72 170.51 L S 0 0 612 792 CR 5 (Times-Bold) 14 1 mymakefontmetric 5 FF (Function Pr) 72.0 164.333 T (ototype Generation) 143.694 164.333 T 3 FF 72 188.690598 M 0.368607 0 32 (The prototype for a user stub or tar) widthshow 214.090363 188.690598 M 0.368607 0 32 (get serv) widthshow 245.689056 188.690598 M 0.368607 0 32 (er function is deri) widthshow 317.365021 188.690598 M 0.368607 0 32 (v) widthshow 322.215088 188.690598 M 0.368607 0 32 (ed from the MIG operation) widthshow 72 200.690582 M 0.302887 0 32 (de\336nition. In a general w) widthshow 173.371613 200.690582 M 0.302887 0 32 (ay) widthshow 182.161972 200.690582 M 0.302887 0 32 (, the ar) widthshow 210.07785 200.690582 M 0.302887 0 32 (gument list for the prototype is the same as that for the) widthshow 72 212.690567 M 0.279114 0 32 (MIG operation, with the MIG type names replaced by the ) widthshow 4 FF 307.801147 212.690567 M 0.279114 0 32 (UserT) widthshow 332.061584 212.690567 M 0.279114 0 32 (ype) widthshow 3 FF 345.941589 212.690567 M 0.279114 0 32 ( or ) widthshow 4 FF 359.829803 212.690567 M 0.279114 0 32 (T) widthshow 364.840088 212.690567 M 0.279114 0 32 (r) widthshow 368.5802 212.690567 M 0.279114 0 32 (ansT) widthshow 387.290588 212.690567 M 0.279114 0 32 (ype) widthshow 3 FF 401.170593 212.690567 M 0.279114 0 32 ( names,) widthshow (when de\336ned.) 72.0 224.691 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (P) 72.0 256.024 T (arameter Order) 79.212 256.024 T 3 FF 72 272.690552 M 0.761414 0 32 (A single parameter or possibly a set of parameters will be generated for each parameter) widthshow 3 FF 72 284.690521 M 0.278473 0 32 (listed in the operation de\336nition, in the order speci\336ed in the operation de\336nition, in both) widthshow (the user and serv) 72.0 296.691 T (er sides, with the follo) 139.33 296.691 T (wing e) 228.24 296.691 T (xceptions.) 255.03 296.691 T 7 (Times-Roman) 7 1 mymakefontmetric 7 FF 72.0 314.69 T 3 FF 85.535995 314.690491 M 0.481033 0 32 (The presence of the ) widthshow 4 FF 168.540146 314.690491 M 0.481033 0 32 (r) widthshow 172.060349 314.690491 M 0.481033 0 32 (eplyport) widthshow 3 FF 205.39035 314.690491 M 0.481033 0 32 ( parameter causes an e) widthshow 297.124573 314.690491 M 0.481033 0 32 (xplicit parameter to appear in the) widthshow 3 FF 85.535995 326.690491 M 0.868103 0 32 (ar) widthshow 93.126099 326.690491 M 0.868103 0 32 (gument list for the user stub routine, as well as the corresponding ar) widthshow 374.71344 326.690491 M 0.868103 0 32 (gument to ap-) widthshow 3 FF 85.535995 338.69046 M 0.785217 0 32 (pear in the call to the tar) widthshow 187.26741 338.69046 M 0.785217 0 32 (get serv) widthshow 219.282715 338.69046 M 0.785217 0 32 (er routine, to pass an e) widthshow 313.038879 338.69046 M 0.785217 0 32 (xplicitly named reply port. If) widthshow 4 FF 85.535995 350.69043 M 1.22879 0 32 (r) widthshow 89.056198 350.69043 M 1.22879 0 32 (eplyport) widthshow 3 FF 122.3862 350.69043 M 1.22879 0 32 ( is not speci\336ed, a reply port pri) widthshow 257.947876 350.69043 M 1.22879 0 32 (v) widthshow 262.697998 350.69043 M 1.22879 0 32 (ate to the MIG interf) widthshow 350.273254 350.69043 M 1.22879 0 32 (ace routines will be) widthshow 85.535995 362.69043 M 0.420227 0 32 (used; it will not appear as a parameter in an) widthshow 263.298157 362.69043 M 0.420227 0 32 (y calls. The ) widthshow 4 FF 313.438843 362.69043 M 0.420227 0 32 (sr) widthshow 320.84903 362.69043 M 0.420227 0 32 (eplyport) widthshow 3 FF 354.179016 362.69043 M 0.420227 0 32 ( and ) widthshow 4 FF 374.459473 362.69043 M 0.420227 0 32 (ur) widthshow 382.979675 362.69043 M 0.420227 0 32 (eplyport) widthshow 3 FF 416.309692 362.69043 M 0.420227 0 32 ( pa-) widthshow 85.535995 374.69043 M 0.425827 0 32 (rameters can be used if only the user or serv) widthshow 265.558533 374.69043 M 0.425827 0 32 (er side parameter is needed. When a ) widthshow 4 FF 415.709351 374.69043 M 0.425827 0 32 (ur) widthshow 424.229553 374.69043 M 0.425827 0 32 (e-) widthshow 85.535995 386.690399 M 2.692795 0 32 (plyport) widthshow 3 FF 114.425995 386.690399 M 2.692795 0 32 ( parameter is present, the user stub routine will ha) widthshow 337.871277 386.690399 M 2.692795 0 32 (v) widthshow 342.721375 386.690399 M 2.692795 0 32 (e an e) widthshow 371.277039 386.690399 M 2.692795 0 32 (xtra parameter) widthshow 85.535995 398.690369 M 1.026382 0 32 (through which it can name an e) widthshow 217.074387 398.690369 M 1.026382 0 32 (xplicit reply port. Ho) widthshow 304.343689 398.690369 M 1.026382 0 32 (we) widthshow 315.753815 398.690369 M 1.026382 0 32 (v) widthshow 320.603882 398.690369 M 1.026382 0 32 (er) widthshow 327.974121 398.690369 M 1.026382 0 32 (, the tar) widthshow 360.117004 398.690369 M 1.026382 0 32 (get serv) widthshow 392.373474 398.690369 M 1.026382 0 32 (er routine) widthshow 85.535995 410.690369 M 0.418961 0 32 (will not ha) widthshow 128.954025 410.690369 M 0.418961 0 32 (v) widthshow 133.804108 410.690369 M 0.418961 0 32 (e this e) widthshow 162.822113 410.690369 M 0.418961 0 32 (xtra parameter; the reply port will be kno) widthshow 330.195007 410.690369 M 0.418961 0 32 (wn only to the MIG gen-) widthshow 85.535995 422.690369 M 1.097794 0 32 (erated serv) widthshow 130.073883 422.690369 M 1.097794 0 32 (er function. When a ) widthshow 4 FF 216.385071 422.690369 M 1.097794 0 32 (sr) widthshow 223.795273 422.690369 M 1.097794 0 32 (eplyport) widthshow 3 FF 257.125275 422.690369 M 1.097794 0 32 ( parameter is named, the user stub routine) widthshow 85.535995 434.690338 M 1.167374 0 32 (will not ha) widthshow 130.450851 434.690338 M 1.167374 0 32 (v) widthshow 135.300934 434.690338 M 1.167374 0 32 (e an e) widthshow 160.805771 434.690338 M 1.167374 0 32 (xtra parameter through which an e) widthshow 303.952759 434.690338 M 1.167374 0 32 (xplicit reply port is named. In-) widthshow 85.535995 446.690308 M 0.981628 0 32 (stead, the MIG local reply port will be used. Ho) widthshow 285.480804 446.690308 M 0.981628 0 32 (we) widthshow 296.89093 446.690308 M 0.981628 0 32 (v) widthshow 301.741028 446.690308 M 0.981628 0 32 (er) widthshow 309.111267 446.690308 M 0.981628 0 32 (, the tar) widthshow 341.164612 446.690308 M 0.981628 0 32 (get serv) widthshow 373.376343 446.690308 M 0.981628 0 32 (er routine will) widthshow 85.535995 458.690308 M 0.601578 0 32 (be passed this reply port as an e) widthshow 216.517136 458.690308 M 0.601578 0 32 (xplicit ar) widthshow 252.768814 458.690308 M 0.601578 0 32 (gument \(instead of its being kno) widthshow 384.686829 458.690308 M 0.601578 0 32 (wn only in-) widthshow (side the MIG serv) 85.536 470.69 T (er stub\).) 157.316 470.69 T 7 FF 72.0 485.69 T 3 FF (The ) 85.536 485.69 T 4 FF (waittime) 103.586 485.69 T 3 FF ( and ) 138.036 485.69 T 4 FF (msgoption) 157.476 485.69 T 3 FF ( parameters appear only on the user side.) 199.146 485.69 T 7 FF 72.0 500.69 T 3 FF (The ) 85.536 500.69 T 4 FF (msgseqno) 103.586 500.69 T 3 FF ( parameter appears only on the serv) 143.026 500.69 T (er side.) 285.056 500.69 T 3 FF 72 524.690247 M 0.233536 0 32 (The ) widthshow 4 FF 90.283539 524.690247 M 0.233536 0 32 (r) widthshow 93.803741 524.690247 M 0.233536 0 32 (equestport) widthshow 3 FF 136.023743 524.690247 M 0.233536 0 32 ( parameter) widthshow 178.337509 524.690247 M 0.233536 0 32 (, whether implicitly or e) widthshow 275.50174 524.690247 M 0.233536 0 32 (xplicitly speci\336ed, is al) widthshow 368.882385 524.690247 M 0.233536 0 32 (w) widthshow 376.002441 524.690247 M 0.233536 0 32 (ays a parame-) widthshow 72 536.690247 M 0.576096 0 32 (ter to both the user and serv) widthshow 186.396667 536.690247 M 0.576096 0 32 (er side routines. The ) widthshow 4 FF 272.851074 536.690247 M 0.576096 0 32 (r) widthshow 276.371277 536.690247 M 0.576096 0 32 (equestport) widthshow 3 FF 318.591248 536.690247 M 0.576096 0 32 ( speci\336cation merely allo) widthshow 420.889709 536.690247 M 0.576096 0 32 (ws) widthshow 3 FF 72 548.690186 M 0.703049 0 32 (the speci\336cation of which parameter in the list is the request port; the def) widthshow 372.939697 548.690186 M 0.703049 0 32 (ault is the \336rst) widthshow (parameter) 72.0 560.69 T (.) 111.43 560.69 T 6 FF (Data P) 72.0 592.024 T (arameter T) 106.872 592.024 T (ype) 164.293 592.024 T 3 FF 72 608.690186 M 0.919952 0 32 (The data parameter generated by a gi) widthshow 225.549881 608.690186 M 0.919952 0 32 (v) widthshow 230.399963 608.690186 M 0.919952 0 32 (en MIG ar) widthshow 273.709961 608.690186 M 0.919952 0 32 (gument de\336nition has a C type chosen) widthshow (from the MIG declared ) 72.0 620.69 T 4 FF (ctype) 166.97 620.69 T 3 FF ( as follo) 188.07 620.69 T (ws:) 220.04 620.69 T 7 FF 72.0 638.69 T 3 FF 85.535995 638.690186 M 0.561859 0 32 (A ) widthshow 4 FF 95.817856 638.690186 M 0.561859 0 32 (type-name) widthshow 3 FF 137.467865 638.690186 M 0.561859 0 32 ( that is a b) widthshow 180.625412 638.690186 M 0.561859 0 32 (uilt-in ) widthshow 4 FF 208.137268 638.690186 M 0.561859 0 32 (IPCT) widthshow 229.067673 638.690186 M 0.561859 0 32 (ype) widthshow 242.847733 638.690186 M 0.561859 0 32 (,) widthshow 3 FF 245.347733 638.690186 M 0.561859 0 32 ( where ) widthshow 4 FF 275.901459 638.690186 M 0.561859 0 32 (IPCT) widthshow 296.831848 638.690186 M 0.561859 0 32 (ype) widthshow 3 FF 310.711853 638.690186 M 0.561859 0 32 ( is other than MA) widthshow 383.109528 638.690186 M 0.561859 0 32 (CH_MSG_-) widthshow 85.535995 650.690125 M 1.797943 0 32 (TYPE_STRING or MA) widthshow 184.282104 650.690125 M 1.797943 0 32 (CH_MSG_TYPE_STRING_C, has ) widthshow 4 FF 332.047974 650.690125 M 1.797943 0 32 (type-name) widthshow 3 FF 373.697998 650.690125 M 1.797943 0 32 ( as its C data) widthshow (parameter type for ) 85.536 662.69 T 4 FF (in) 161.896 662.69 T 3 FF ( parameters, and *) 169.676 662.69 T 4 FF (type-name) 242.986 662.69 T 3 FF ( for ) 284.636 662.69 T 4 FF (out) 301.296 662.69 T 3 FF ( or ) 314.076 662.69 T 4 FF (inout) 327.406 662.69 T 3 FF ( parameters.) 347.966 662.69 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 28 28 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (24 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Mach Interface Generator \(MIG\)) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 7 1 mymakefontmetric 3 FF 180.0 112.651 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 193.535995 112.650665 M 4.542572 0 32 (A ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 207.798569 112.650665 M 4.542572 0 32 (type-name) widthshow 4 FF 249.448578 112.650665 M 4.542572 0 32 ( that is a b) widthshow 308.528992 112.650665 M 4.542572 0 32 (uilt-in ) widthshow 5 FF 340.021545 112.650665 M 4.542572 0 32 (IPCT) widthshow 360.951965 112.650665 M 4.542572 0 32 (ype) widthshow 4 FF 374.83197 112.650665 M 4.542572 0 32 ( of MA) widthshow 412.957336 112.650665 M 4.542572 0 32 (CH_MSG_TYPE_STRING or) widthshow 193.535995 124.65065 M 0.050385 0 32 (MA) widthshow 209.246216 124.65065 M 0.050385 0 32 (CH_MSG_TYPE_STRING_C has ) widthshow 5 FF 351.016968 124.65065 M 0.050385 0 32 (type-name) widthshow 4 FF 392.666992 124.65065 M 0.050385 0 32 ( as its C data parameter type, re) widthshow 518.949768 124.65065 M 0.050385 0 32 (g) widthshow 523.89978 124.65065 M 0.050385 0 32 (ard-) widthshow (less of the direction of the parameter) 193.536 136.651 T (.) 339.616 136.651 T 3 FF 180.0 151.651 T 4 FF 193.535995 151.65062 M 0.46669 0 32 (A ) widthshow 5 FF 203.722687 151.65062 M 0.46669 0 32 (type-name) widthshow 4 FF 245.372696 151.65062 M 0.46669 0 32 ( that is an array type or a C string has ) widthshow 5 FF 402.4263 151.65062 M 0.46669 0 32 (type-name) widthshow 4 FF 444.076294 151.65062 M 0.46669 0 32 ( as its C data parameter) widthshow 193.535995 163.650604 M 1.043549 0 32 (type, re) widthshow 224.419632 163.650604 M 1.043549 0 32 (g) widthshow 229.369659 163.650604 M 1.043549 0 32 (ardless of the direction of the parameter) widthshow 394.481262 163.650604 M 1.043549 0 32 (. Ho) widthshow 412.494965 163.650604 M 1.043549 0 32 (we) widthshow 423.90509 163.650604 M 1.043549 0 32 (v) widthshow 428.755188 163.650604 M 1.043549 0 32 (er) widthshow 436.125427 163.650604 M 1.043549 0 32 (, an unbounded ) widthshow 5 FF 503.136047 163.650604 M 1.043549 0 32 (out) widthshow 4 FF 515.916077 163.650604 M 1.043549 0 32 ( array) widthshow 193.535995 175.650589 M 0.840836 0 32 (has *) widthshow 5 FF 215.206833 175.650589 M 0.840836 0 32 (type-name) widthshow 4 FF 256.856842 175.650589 M 0.840836 0 32 ( as its C data parameter type. This type is assumed to con) widthshow 495.687103 175.650589 M 0.840836 0 32 (v) widthshow 500.53717 175.650589 M 0.840836 0 32 (ert to a C) widthshow (pointer type) 193.536 187.651 T 3 FF 180.0 202.651 T 4 FF 193.535995 202.650558 M 0.408966 0 32 (A ) widthshow 5 FF 203.664963 202.650558 M 0.408966 0 32 (type-name) widthshow 4 FF 245.314972 202.650558 M 0.408966 0 32 ( that is a structure type has ) widthshow 5 FF 357.327759 202.650558 M 0.408966 0 32 (type-name) widthshow 4 FF 398.977753 202.650558 M 0.408966 0 32 ( as its C data parameter type for ) widthshow 5 FF 532.219482 202.650558 M 0.408966 0 32 (in) widthshow 4 FF (parameters, and *) 193.536 214.651 T 5 FF (type-name) 264.346 214.651 T 4 FF ( for ) 305.996 214.651 T 5 FF (out) 322.656 214.651 T 4 FF ( or ) 335.436 214.651 T 5 FF (inout) 348.766 214.651 T 4 FF ( parameters.) 369.326 214.651 T 3 FF 180.0 229.651 T 4 FF 193.535995 229.650528 M 0.270233 0 32 (A ) widthshow 5 FF 203.52623 229.650528 M 0.270233 0 32 (type-name) widthshow 4 FF 245.176239 229.650528 M 0.270233 0 32 ( that is a \322pointer\323 type has ) widthshow 5 FF 358.437866 229.650528 M 0.270233 0 32 (type-name) widthshow 4 FF 400.087891 229.650528 M 0.270233 0 32 ( as its C data parameter type for ) widthshow 5 FF 532.219788 229.650528 M 0.270233 0 32 (in) widthshow 4 FF (parameters, and *) 193.536 241.651 T 5 FF (type-name) 264.346 241.651 T 4 FF ( for ) 305.996 241.651 T 5 FF (out) 322.656 241.651 T 4 FF ( or ) 335.436 241.651 T 5 FF (inout) 348.766 241.651 T 4 FF ( parameters.) 369.326 241.651 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Pseudo P) 180.0 272.984 T (arameters) 226.884 272.984 T 4 FF 180 289.650513 M 0.264587 0 32 (A MIG parameter can e) widthshow 275.868469 289.650513 M 0.264587 0 32 (xpand into up to \336v) widthshow 355.116882 289.650513 M 0.264587 0 32 (e actual parameters. The \336rst parameter in the) widthshow (prototype is the data parameter deri) 180.0 301.65 T (v) 321.66 301.65 T (ed from the MIG type, as e) 326.51 301.65 T (xplained abo) 434.39 301.65 T (v) 485.62 301.65 T (e.) 490.471 301.65 T 180 325.650452 M 1.297684 0 32 (The ne) widthshow 208.637772 325.650452 M 1.297684 0 32 (xt \(pseudo\) parameter is added for polymorphic types, to supply the actual IPC) widthshow 180 337.650452 M 0.716431 0 32 (type at run-time. Whether such a parameter is added to the user or to the serv) widthshow 498.856567 337.650452 M 0.716431 0 32 (er side, or) widthshow (both, depends on the nature and direction of the polymorphic parameter) 180.0 349.65 T (.) 466.34 349.65 T 4 FF 180 373.650421 M 0.709946 0 32 (A parameter which is polymorphic to both the sender and recei) widthshow 439.019623 373.650421 M 0.709946 0 32 (v) widthshow 443.86969 373.650421 M 0.709946 0 32 (er of the parameter \(for) widthshow 180 385.650391 M 0.527344 0 32 (e) widthshow 184.290085 385.650391 M 0.527344 0 32 (xample, deri) widthshow 234.557571 385.650391 M 0.527344 0 32 (v) widthshow 239.407654 385.650391 M 0.527344 0 32 (ed from MA) widthshow 290.052551 385.650391 M 0.527344 0 32 (CH_MSG_TYPE_POL) widthshow 383.503113 385.650391 M 0.527344 0 32 (YMORPHIC\), will add a parameter of) widthshow 4 FF 180 397.650391 M 0.319977 0 32 (type ) widthshow 5 FF 200.039978 397.650391 M 0.319977 0 32 (mac) widthshow 216.550064 397.650391 M 0.319977 0 32 (h_msg_type_name_t) widthshow 4 FF 298.760071 397.650391 M 0.319977 0 32 ( for ) widthshow 5 FF 316.060028 397.650391 M 0.319977 0 32 (in) widthshow 4 FF 323.840027 397.650391 M 0.319977 0 32 ( parameters and of type *) widthshow 5 FF 426.799927 397.650391 M 0.319977 0 32 (mac) widthshow 443.309998 397.650391 M 0.319977 0 32 (h_msg_type_name_t) widthshow 4 FF 525.52002 397.650391 M 0.319977 0 32 ( for) widthshow 5 FF (out) 180.0 409.65 T 4 FF ( or ) 192.78 409.65 T 5 FF (inout) 206.11 409.65 T 4 FF ( parameters to both the user and serv) 226.67 409.65 T (er sides.) 373.43 409.65 T 4 FF 180 433.65036 M 5.725403 0 32 (A parameter which is polymorphic only on the sender\325) widthshow 444.103546 433.65036 M 5.725403 0 32 (s side \(for e) widthshow 508.059845 433.65036 M 5.725403 0 32 (xample,) widthshow 180 445.65033 M 1.304321 0 32 (MA) widthshow 195.71022 445.65033 M 1.304321 0 32 (CH_MSG_TYPE_POR) widthshow 290.120544 445.65033 M 1.304321 0 32 (T_S) widthshow 306.790527 445.65033 M 1.304321 0 32 (END\), will add the e) widthshow 394.897919 445.65033 M 1.304321 0 32 (xtra parameter only to the sender\325) widthshow 536.109863 445.65033 M 1.304321 0 32 (s) widthshow 180 457.65033 M 0.74913 0 32 (side. That is, for ) widthshow 5 FF 250.766525 457.65033 M 0.74913 0 32 (in) widthshow 4 FF 258.546509 457.65033 M 0.74913 0 32 ( parameters, an e) widthshow 328.394012 457.65033 M 0.74913 0 32 (xtra parameter of type ) widthshow 5 FF 422.470551 457.65033 M 0.74913 0 32 (mac) widthshow 438.980652 457.65033 M 0.74913 0 32 (h_msg_type_name_t) widthshow 4 FF 521.190674 457.65033 M 0.74913 0 32 ( will) widthshow 180 469.65033 M 0.462189 0 32 (be added to the user side to specify the outgoing type, b) widthshow 407.634216 469.65033 M 0.462189 0 32 (ut not the serv) widthshow 465.810852 469.65033 M 0.462189 0 32 (er side. F) widthshow 503.52533 469.65033 M 0.462189 0 32 (or an ) widthshow 5 FF 527.219727 469.65033 M 0.462189 0 32 (out) widthshow 4 FF 180 481.650299 M 0.043289 0 32 (parameter) widthshow 219.580231 481.650299 M 0.043289 0 32 (, an e) widthshow 240.896896 481.650299 M 0.043289 0 32 (xtra parameter of type *) widthshow 5 FF 337.150085 481.650299 M 0.043289 0 32 (mac) widthshow 353.660156 481.650299 M 0.043289 0 32 (h_msg_type_name_t) widthshow 4 FF 435.870178 481.650299 M 0.043289 0 32 ( will be added to the serv-) widthshow 180 493.650269 M 0.004959 0 32 (er side to allo) widthshow 233.925018 493.650269 M 0.004959 0 32 (w the return of the outgoing type, b) widthshow 375.409851 493.650269 M 0.004959 0 32 (ut not the user side. F) widthshow 461.394714 493.650269 M 0.004959 0 32 (or an ) widthshow 5 FF 484.174652 493.650269 M 0.004959 0 32 (inout) widthshow 4 FF 504.73465 493.650269 M 0.004959 0 32 ( parame-) widthshow 180 505.650269 M 0.670654 0 32 (ter) widthshow 190.150223 505.650269 M 0.670654 0 32 (, an e) widthshow 212.721619 505.650269 M 0.670654 0 32 (xtra parameter of type ) widthshow 5 FF 306.484253 505.650269 M 0.670654 0 32 (mac) widthshow 322.994324 505.650269 M 0.670654 0 32 (h_msg_type_name_t) widthshow 4 FF 405.204346 505.650269 M 0.670654 0 32 ( will be added to the user side to) widthshow 180 517.650269 M 0.689957 0 32 (specify the outgoing type, and an e) widthshow 323.689819 517.650269 M 0.689957 0 32 (xtra parameter of type *) widthshow 5 FF 422.529663 517.650269 M 0.689957 0 32 (mac) widthshow 439.039764 517.650269 M 0.689957 0 32 (h_msg_type_name_t) widthshow 4 FF 521.249756 517.650269 M 0.689957 0 32 ( will) widthshow (be added to the serv) 180.0 529.65 T (er side to allo) 259.83 529.65 T (w the return of the outgoing \(return\) type.) 313.74 529.65 T 180 553.650208 M 0.445816 0 32 (If the MIG type is or deri) widthshow 283.515045 553.650208 M 0.445816 0 32 (v) widthshow 288.365112 553.650208 M 0.445816 0 32 (es in an) widthshow 319.65686 553.650208 M 0.445816 0 32 (y w) widthshow 334.722717 553.650208 M 0.445816 0 32 (ay from a v) widthshow 381.63031 553.650208 M 0.445816 0 32 (ariable sized \(or unbounded\) array \(b) widthshow 532.219543 553.650208 M 0.445816 0 32 (ut) widthshow 180 565.650208 M 0.761215 0 32 (not a C string\), an e) widthshow 262.536163 565.650208 M 0.761215 0 32 (xtra parameter is added to contain the actual array size \(the number) widthshow 4 FF 180 577.650208 M 1.672699 0 32 (of elements\). MIG scales this array element count when calculating the ) widthshow 5 FF 485.559723 577.650208 M 1.672699 0 32 (msgt_number) widthshow 4 FF 180 589.650146 M 0.965759 0 32 widthshow 5 FF 417.263367 589.650146 M 0.965759 0 32 (mac) widthshow 433.773438 589.650146 M 0.965759 0 32 (h_msg_type_number_t) widthshow 4 FF 524.873474 589.650146 M 0.965759 0 32 ( for) widthshow 5 FF 180 601.650146 M 0.10997 0 32 (in) widthshow 4 FF 187.779999 601.650146 M 0.10997 0 32 ( parameters, and *) widthshow 5 FF 261.419922 601.650146 M 0.10997 0 32 (mac) widthshow 277.929993 601.650146 M 0.10997 0 32 (h_msg_type_number_t) widthshow 4 FF 369.030029 601.650146 M 0.10997 0 32 ( for ) widthshow 5 FF 385.909973 601.650146 M 0.10997 0 32 (out) widthshow 4 FF 398.689941 601.650146 M 0.10997 0 32 ( or ) widthshow 5 FF 412.239899 601.650146 M 0.10997 0 32 (inout) widthshow 4 FF 432.799896 601.650146 M 0.10997 0 32 ( parameters. This e) widthshow 509.069885 601.650146 M 0.10997 0 32 (xtra pa-) widthshow 4 FF 180 613.650146 M 0.482635 0 32 (rameter is added to both the user and serv) widthshow 350.341187 613.650146 M 0.482635 0 32 (er sides. \(The ) widthshow 5 FF 408.439087 613.650146 M 0.482635 0 32 (countinout) widthshow 4 FF 451.219116 613.650146 M 0.482635 0 32 ( k) widthshow 459.101807 613.650146 M 0.482635 0 32 (e) widthshow 463.391876 613.650146 M 0.482635 0 32 (yw) widthshow 475.511932 613.650146 M 0.482635 0 32 (ord does not af-) widthshow 180 625.650146 M 0.943298 0 32 (fect this; it only af) widthshow 256.853333 625.650146 M 0.943298 0 32 (fects whether the user side supplied count v) widthshow 437.896576 625.650146 M 0.943298 0 32 (alue is transmitted to the) widthshow (serv) 180.0 637.65 T (er for unbounded ) 196.51 637.65 T 5 FF (out) 267.88 637.65 T 4 FF ( parameters.\)) 280.66 637.65 T 4 FF 180 661.650085 M 1.001617 0 32 (If the MIG type speci\336es dynamic de-allocation \() widthshow 5 FF 384.471344 661.650085 M 1.001617 0 32 (dealloc) widthshow 4 FF 413.911346 661.650085 M 1.001617 0 32 ( []\), an additional parameter is) widthshow 180 673.650085 M 0.390656 0 32 (added to the sending side to permit the speci\336cation of dynamic de-allocation. F) widthshow 505.337952 673.650085 M 0.390656 0 32 (or ) widthshow 5 FF 516.558594 673.650085 M 0.390656 0 32 (in) widthshow 4 FF 524.338623 673.650085 M 0.390656 0 32 ( pa-) widthshow 180 685.650085 M 0.829956 0 32 (rameters, an e) widthshow 237.320007 685.650085 M 0.829956 0 32 (xtra parameter of type ) widthshow 5 FF 331.719849 685.650085 M 0.829956 0 32 (boolean_t) widthshow 4 FF 371.719849 685.650085 M 0.829956 0 32 ( will be added to the user side to specify) widthshow 180 697.650024 M 0.297928 0 32 (the de-allocation \337ag, b) widthshow 275.123901 697.650024 M 0.297928 0 32 (ut not the serv) widthshow 332.80777 697.650024 M 0.297928 0 32 (er side. F) widthshow 370.193726 697.650024 M 0.297928 0 32 (or an ) widthshow 5 FF 393.55957 697.650024 M 0.297928 0 32 (out) widthshow 4 FF 406.339569 697.650024 M 0.297928 0 32 ( parameter) widthshow 448.717712 697.650024 M 0.297928 0 32 (, an e) widthshow 470.543671 697.650024 M 0.297928 0 32 (xtra parameter of) widthshow 558 156.983948 2 33.999954 NF 558 222.983871 2 9.999985 NF 558 606.983521 2 33.999954 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 29 29 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (25 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Special En) 72.0 55.824 T (vir) 112.402 55.824 T (onment Subsystems) 123.238 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666656 M 0.826645 0 32 (type *) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 97.546646 114.666656 M 0.826645 0 32 (boolean_t) widthshow 3 FF 137.546646 114.666656 M 0.826645 0 32 ( will be added to the serv) widthshow 242.896606 114.666656 M 0.826645 0 32 (er side to allo) widthshow 299.286682 114.666656 M 0.826645 0 32 (w the return of the de-allocation) widthshow 72 126.666641 M 0.767929 0 32 widthshow 97.568039 126.666641 M 0.767929 0 32 (ut not the user side. F) widthshow 187.367767 126.666641 M 0.767929 0 32 (or an ) widthshow 4 FF 211.67363 126.666641 M 0.767929 0 32 (inout) widthshow 3 FF 232.233627 126.666641 M 0.767929 0 32 ( parameter) widthshow 275.081787 126.666641 M 0.767929 0 32 (, an e) widthshow 297.847717 126.666641 M 0.767929 0 32 (xtra parameter of type ) widthshow 4 FF 391.999451 126.666641 M 0.767929 0 32 (boolean_t) widthshow 3 FF 72 138.666626 M 0.483093 0 32 (will be added to the user side to specify the de-allocation \337ag, and an e) widthshow 362.173401 138.666626 M 0.483093 0 32 (xtra parameter of) widthshow 72 150.666611 M 0.826645 0 32 (type *) widthshow 4 FF 97.546646 150.666611 M 0.826645 0 32 (boolean_t) widthshow 3 FF 137.546646 150.666611 M 0.826645 0 32 ( will be added to the serv) widthshow 242.896606 150.666611 M 0.826645 0 32 (er side to allo) widthshow 299.286682 150.666611 M 0.826645 0 32 (w the return of the de-allocation) widthshow 72.0 162.667 T 72 186.66658 M 0.93837 0 32 (If the MIG type speci\336es ) widthshow 4 FF 179.17186 186.66658 M 0.93837 0 32 (server) widthshow 203.792068 186.66658 M 0.93837 0 32 (copy) widthshow 3 FF 222.02243 186.66658 M 0.93837 0 32 (, an additional parameter of type ) widthshow 4 FF 360.122681 186.66658 M 0.93837 0 32 (boolean_t) widthshow 3 FF 400.122681 186.66658 M 0.93837 0 32 ( will be) widthshow 72 198.666565 M 0.715256 0 32 (added to the serv) widthshow 142.035858 198.666565 M 0.715256 0 32 (er side, b) widthshow 179.646484 198.666565 M 0.715256 0 32 (ut not the user side, to specify whether the data v) widthshow 382.349182 198.666565 M 0.715256 0 32 (alue w) widthshow 409.344513 198.666565 M 0.715256 0 32 (as in-) widthshow (line \(that is, the serv) 72.0 210.667 T (er needs to mak) 153.23 210.667 T (e a cop) 216.17 210.667 T (y if desired\).) 244.39 210.667 T 72 252.999847 360 3.024002 CR 432 254.51 M 72 254.51 L S 0 0 612 792 CR 5 (Times-Bold) 14 1 mymakefontmetric 5 FF (Special En) 72.0 248.333 T (vir) 134.846 248.333 T (onment Subsystems) 151.702 248.333 T 3 FF 72 272.690491 M 1.629181 0 32 (MIG generates alternate code for the user or serv) widthshow 280.923584 272.690491 M 1.629181 0 32 (er stubs for v) widthshow 338.05127 272.690491 M 1.629181 0 32 (arious special en) widthshow 407.559845 272.690491 M 1.629181 0 32 (viron-) widthshow 72 284.690491 M 0.386841 0 32 (ments. MIG generates this code when a subsystem modi\336er is speci\336ed in the subsystem) widthshow (speci\336cation:) 72.0 296.69 T (subsystem ) 108.0 320.69 T 4 FF (subsystemmod) 152.17 320.69 T 3 FF ( ) 209.94 320.69 T 4 FF (sys) 212.44 320.69 T 3 FF ( ) 224.66 320.69 T 4 FF (messa) 227.16 320.69 T (g) 251.5 320.69 T (e-base-id;) 256.4 320.69 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (K) 72.0 352.024 T (er) 81.036 352.024 T (nelSer) 91.512 352.024 T (v) 124.056 352.024 T (er Subsystem) 129.936 352.024 T 3 FF 72 368.69043 M 0.649948 0 32 (The ) widthshow 4 FF 90.699951 368.69043 M 0.649948 0 32 (K) widthshow 97.020142 368.69043 M 0.649948 0 32 (ernelServer) widthshow 3 FF 143.670151 368.69043 M 0.649948 0 32 ( en) widthshow 155.860321 368.69043 M 0.649948 0 32 (vironment is that in which a routine which is to be the tar) widthshow 392.349792 368.69043 M 0.649948 0 32 (get serv) widthshow 424.229858 368.69043 M 0.649948 0 32 (er) widthshow 72 380.69043 M 0.429947 0 32 (routine associated with a MIG de\336nition is to reside in the Mach k) widthshow 342.589417 380.69043 M 0.429947 0 32 (ernel. The tar) widthshow 396.859436 380.69043 M 0.429947 0 32 (get serv-) widthshow (er routines ha) 72.0 392.69 T (v) 126.23 392.69 T (e the same prototypes as the) 131.08 392.69 T (y w) 243.41 392.69 T (ould otherwise.) 258.03 392.69 T 72 416.690399 M 0.152237 0 32 (A ) widthshow 4 FF 81.872238 416.690399 M 0.152237 0 32 (K) widthshow 88.192429 416.690399 M 0.152237 0 32 (ernelServer) widthshow 3 FF 134.842438 416.690399 M 0.152237 0 32 ( subsystem modi\336es the beha) widthshow 252.471497 416.690399 M 0.152237 0 32 (vior of MIG type translation in that the serv-) widthshow 72 428.690369 M 0.895493 0 32 (er stub e) widthshow 107.521072 428.690369 M 0.895493 0 32 (xpects the types to ha) widthshow 197.003159 428.690369 M 0.895493 0 32 (v) widthshow 201.853241 428.690369 M 0.895493 0 32 (e been translated on the w) widthshow 310.370789 428.690369 M 0.895493 0 32 (ay to it, b) widthshow 350.63736 428.690369 M 0.895493 0 32 (ut it sets the ) widthshow 4 FF 404.779327 428.690369 M 0.895493 0 32 (msgt_-) widthshow 72 440.690369 M 2.573242 0 32 (name) widthshow 3 FF 93.660004 440.690369 M 2.573242 0 32 ( \336eld on return to the IPC type associated with ) widthshow 4 FF 307.712433 440.690369 M 2.573242 0 32 (r) widthshow 311.232635 440.690369 M 2.573242 0 32 (eceiving-IPCT) widthshow 368.813049 440.690369 M 2.573242 0 32 (ype) widthshow 3 FF 382.693054 440.690369 M 2.573242 0 32 (, instead of) widthshow (e) 72.0 452.69 T (xpecting the type to be changed magically) 76.29 452.69 T (.) 244.5 452.69 T 3 FF 72 476.690338 M 0.427933 0 32 (MIG hacks port types on the serv) widthshow 207.727692 476.690338 M 0.427933 0 32 (er side of a ) widthshow 4 FF 256.089417 476.690338 M 0.427933 0 32 (K) widthshow 262.409607 476.690338 M 0.427933 0 32 (ernelServer) widthshow 3 FF 309.059631 476.690338 M 0.427933 0 32 ( subsystem. An) widthshow 371.155579 476.690338 M 0.427933 0 32 (y serv) widthshow 395.593597 476.690338 M 0.427933 0 32 (er side C) widthshow 72 488.690308 M 0.860855 0 32 (types of ) widthshow 4 FF 108.161713 488.690308 M 0.860855 0 32 (mac) widthshow 124.671799 488.690308 M 0.860855 0 32 (h_port_t) widthshow 3 FF 159.121796 488.690308 M 0.860855 0 32 ( are automatically con) widthshow 249.894592 488.690308 M 0.860855 0 32 (v) widthshow 254.744675 488.690308 M 0.860855 0 32 (erted to their \(true\) k) widthshow 341.398163 488.690308 M 0.860855 0 32 (ernel type, ) widthshow 4 FF 387.829895 488.690308 M 0.860855 0 32 (ipc_port_t) widthshow 3 FF 429.499878 488.690308 M 0.860855 0 32 (.) widthshow 72 500.690308 M 0.724258 0 32 (This hack w) widthshow 122.228577 500.690308 M 0.724258 0 32 (as introduced to a) widthshow 195.021469 500.690308 M 0.724258 0 32 (v) widthshow 199.821579 500.690308 M 0.724258 0 32 (oid the use of e) widthshow 263.668701 500.690308 M 0.724258 0 32 (xplicit type coercions and conditionals in) widthshow (the k) 72.0 512.69 T (ernel MIG de\336nitions.) 91.62 512.69 T 3 FF 72 536.690308 M 0.766556 0 32 (V) widthshow 78.110611 536.690308 M 0.766556 0 32 (arious name con\337icts can arise when the user and serv) widthshow 301.749725 536.690308 M 0.766556 0 32 (er code e) widthshow 339.222931 536.690308 M 0.766556 0 32 (xist in the same space.) widthshow 72 548.690247 M 0.823212 0 32 (One method to resolv) widthshow 160.699722 548.690247 M 0.823212 0 32 (e this con\337ict a) widthshow 223.799469 548.690247 M 0.823212 0 32 (v) widthshow 228.549606 548.690247 M 0.823212 0 32 (ailable for ) widthshow 4 FF 273.516052 548.690247 M 0.823212 0 32 (K) widthshow 279.836243 548.690247 M 0.823212 0 32 (ernelServer) widthshow 3 FF 326.486237 548.690247 M 0.823212 0 32 ( subsystems is to rede\336ne) widthshow 72 560.690247 M 1.217453 0 32 (the names of the user stub routines. This is done with an internal header \336le. This \336le) widthshow (consists of one line for each operation ) 72.0 572.69 T 4 FF (foo) 226.69 572.69 T 3 FF (, of the form:) 239.47 572.69 T 1 FF (#de\336ne) 108.0 596.69 T 3 FF ( ) 138.56 596.69 T 4 FF (foo foo) 141.06 596.69 T 3 FF (_e) 169.12 596.69 T (xternal) 178.41 596.69 T 72 620.690186 M 0.60939 0 32 (This \336le can be ) widthshow 1 FF 138.317566 620.690186 M 0.60939 0 32 (#included) widthshow 3 FF 179.997559 620.690186 M 0.60939 0 32 ( into a \336le using the user interf) widthshow 306.653351 620.690186 M 0.60939 0 32 (ace, to force it to call the MIG) widthshow 3 FF 72 632.690186 M 1.360657 0 32 (user stubs instead of the tar) widthshow 187.773392 632.690186 M 1.360657 0 32 (get serv) widthshow 220.364136 632.690186 M 1.360657 0 32 (er routines, if the) widthshow 292.616211 632.690186 M 1.360657 0 32 (y w) widthshow 308.596924 632.690186 M 1.360657 0 32 (ould otherwise ha) widthshow 382.218323 632.690186 M 1.360657 0 32 (v) widthshow 387.06842 632.690186 M 1.360657 0 32 (e the same) widthshow 3 FF 72 644.690186 M 0.207932 0 32 (name. When an internal header \336le is generated \(via the -) widthshow 4 FF 303.179352 644.690186 M 0.207932 0 32 (iheader) widthshow 3 FF 333.72937 644.690186 M 0.207932 0 32 ( MIG option\), this \336le is) widthshow (automatically ) 72.0 656.69 T 1 FF (#include) 128.94 656.69 T 3 FF (d in the user stub \336le.) 165.06 656.69 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 30 30 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (26 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Mach Interface Generator \(MIG\)) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Bold) 12 1 mymakefontmetric 3 FF (K) 180.0 113.984 T (er) 189.036 113.984 T (nelUser Subsystem) 199.512 113.984 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 180 130.650665 M 0.421829 0 32 (This is the en) widthshow 234.475708 130.650665 M 0.421829 0 32 (vironment in which a routine in the Mach k) widthshow 411.620422 130.650665 M 0.421829 0 32 (ernel wishes to call what w) widthshow 522.219604 130.650665 M 0.421829 0 32 (ould) widthshow 180 142.65065 M 0.909302 0 32 (be the user stub) widthshow 244.81813 142.65065 M 0.909302 0 32 (. The user stub for this en) widthshow 351.804169 142.65065 M 0.909302 0 32 (vironment has the same prototype as it w) widthshow 522.21936 142.65065 M 0.909302 0 32 (ould) widthshow 180 154.650635 M 0.77182 0 32 (otherwise. It dif) widthshow 244.893784 154.650635 M 0.77182 0 32 (fers only in that it uses a Mach k) widthshow 381.508423 154.650635 M 0.77182 0 32 (ernel routine to perform the Mach IPC) widthshow (operation; an internal k) 180.0 166.651 T (ernel port is used as the reply port.) 272.94 166.651 T 180 190.650604 M 0.294342 0 32 (MIG hacks port types on the user side of a ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 355.133423 190.650604 M 0.294342 0 32 (K) widthshow 361.453613 190.650604 M 0.294342 0 32 (ernelUser ) widthshow 4 FF 404.237976 190.650604 M 0.294342 0 32 (subsystem. An) widthshow 463.2724 190.650604 M 0.294342 0 32 (y user side C types) widthshow 180 202.650589 M 1.163559 0 32 (of ) widthshow 5 FF 191.993561 202.650589 M 1.163559 0 32 (mac) widthshow 208.503647 202.650589 M 1.163559 0 32 (h_port_t) widthshow 4 FF 242.953644 202.650589 M 1.163559 0 32 ( are automatically con) widthshow 334.634552 202.650589 M 1.163559 0 32 (v) widthshow 339.484619 202.650589 M 1.163559 0 32 (erted to their \(true\) k) widthshow 427.348938 202.650589 M 1.163559 0 32 (ernel type, ) widthshow 5 FF 474.386047 202.650589 M 1.163559 0 32 (ipc_port_t) widthshow 4 FF 516.05603 202.650589 M 1.163559 0 32 (. This) widthshow 180 214.650574 M 1.121368 0 32 (hack w) widthshow 209.621429 214.650574 M 1.121368 0 32 (as introduced to a) widthshow 283.605652 214.650574 M 1.121368 0 32 (v) widthshow 288.405762 214.650574 M 1.121368 0 32 (oid the use of e) widthshow 353.841309 214.650574 M 1.121368 0 32 (xplicit type coercions and conditionals in the) widthshow (k) 180.0 226.651 T (ernel MIG de\336nitions.) 184.9 226.651 T 180 268.983856 360 3.024002 CR 0.25 SL 2 SC 540 270.5 M 180 270.5 L S 0 0 612 792 CR 6 (Times-Bold) 14 1 mymakefontmetric 6 FF (Using the Interface Modules) 180.0 264.317 T 4 FF 180 288.6745 M 0.353012 0 32 (In the follo) widthshow 224.896164 288.6745 M 0.353012 0 32 (wing discussion let) widthshow 5 FF 302.272186 288.6745 M 0.353012 0 32 ( r) widthshow 308.865295 288.6745 M 0.353012 0 32 (andom) widthshow 4 FF 336.085266 288.6745 M 0.353012 0 32 ( be the declared subsystem name in the de\336nitions) widthshow 180.0 300.674 T 180 324.6745 M 0.718155 0 32 (T) widthshow 185.31044 324.6745 M 0.718155 0 32 (o use the calls e) widthshow 251.353149 324.6745 M 0.718155 0 32 (xported by the user interf) widthshow 355.21582 324.6745 M 0.718155 0 32 (ace module, a user must \336rst \336nd the port on) widthshow 180 336.674469 M 0.766602 0 32 (which to call the serv) widthshow 268.456482 336.674469 M 0.766602 0 32 (er) widthshow 275.676819 336.674469 M 0.766602 0 32 (. The service ports for basic system serv) widthshow 441.413116 336.674469 M 0.766602 0 32 (ers are inherited when a) widthshow 180 348.674438 M 0.742188 0 32 (task is created and can be found in v) widthshow 331.207642 348.674438 M 0.742188 0 32 (arious globals. One of these ports is the port to the) widthshow 4 FF 180 360.674438 M 1.094238 0 32 (Name Serv) widthshow 225.654327 360.674438 M 1.094238 0 32 (er which can be used to check-in or look-up user supplied ports. The ) widthshow 5 FF 516.489441 360.674438 M 1.094238 0 32 (r) widthshow 520.009644 360.674438 M 1.094238 0 32 (eply-) widthshow 180 372.674438 M 0.613098 0 32 (port) widthshow 4 FF 196.669998 372.674438 M 0.613098 0 32 ( for MIG is a per) widthshow 267.015625 372.674438 M 0.613098 0 32 (-thread global that is initialized when the thread is created. The) widthshow 5 FF 525.596619 372.674438 M 0.613098 0 32 ( r) widthshow 532.229919 372.674438 M 0.613098 0 32 (e-) widthshow (plyport) 180.0 384.674 T 4 FF ( can be speci\336ed as a parameter to an operation if necessary) 208.89 384.674 T (. ) 447.33 384.674 T 180 408.674377 M 0.874939 0 32 (When making speci\336c interf) widthshow 296.114868 408.674377 M 0.874939 0 32 (ace calls the user should be a) widthshow 417.294617 408.674377 M 0.874939 0 32 (w) widthshow 424.414673 408.674377 M 0.874939 0 32 (are if an) widthshow 458.774658 408.674377 M 0.874939 0 32 (y out-of-line data is) widthshow 180 420.674377 M 0.509369 0 32 (being returned to it. If so, it may wish to de-allocate the space with a call to ) widthshow 0 FF 492.779297 420.674377 M 0.509369 0 32 (vm_deallo-) widthshow (cate) 180.0 432.674 T 4 FF (.) 197.21 432.674 T 180 456.674347 M 0.714951 0 32 (The most common system error that a user of MIG interf) widthshow 414.789581 456.674347 M 0.714951 0 32 (ace may encounter is ) widthshow 5 FF 504.289398 456.674347 M 0.714951 0 32 (in) widthshow 511.669617 456.674347 M 0.714951 0 32 (valid_-) widthshow (port) 180.0 468.674 T 4 FF (. This can mean se) 196.67 468.674 T (v) 270.57 468.674 T (eral things:) 275.42 468.674 T 7 (Times-Roman) 7 1 mymakefontmetric 7 FF 180.0 486.674 T 4 FF (The ) 193.536 486.674 T 5 FF (r) 211.586 486.674 T (equestport) 215.106 486.674 T 4 FF ( parameter is an in) 257.326 486.674 T (v) 330.796 486.674 T (alid port or lacks send rights.) 335.547 486.674 T 7 FF 180.0 501.674 T 4 FF 193.535995 501.674316 M 0.269547 0 32 (The) widthshow 5 FF 209.085999 501.674316 M 0.269547 0 32 ( r) widthshow 215.375748 501.674316 M 0.269547 0 32 (eplyport) widthshow 4 FF 248.70575 501.674316 M 0.269547 0 32 ( is in) widthshow 268.295044 501.674316 M 0.269547 0 32 (v) widthshow 273.045197 501.674316 M 0.269547 0 32 (alid or lacks recei) widthshow 344.414001 501.674316 M 0.269547 0 32 (v) widthshow 349.264069 501.674316 M 0.269547 0 32 (e rights. If the user is supplying this port as pa-) widthshow 193.535995 513.674316 M 1.018936 0 32 (rameter it may be at f) widthshow 284.340759 513.674316 M 1.018936 0 32 (ault. If the system pro) widthshow 375.756592 513.674316 M 1.018936 0 32 (vided) widthshow 5 FF 397.976562 513.674316 M 1.018936 0 32 ( r) widthshow 405.015717 513.674316 M 1.018936 0 32 (eply) widthshow 4 FF 421.67572 513.674316 M 1.018936 0 32 ( port is being used this error) widthshow (should not happen.) 193.536 525.674 T 7 FF 180.0 540.674 T 4 FF (A port that is being passed in either the send or reply message is in) 193.536 540.674 T (v) 460.326 540.674 T (alid.) 465.076 540.674 T 5 FF 180 564.674255 M 1.029968 0 32 (timed_out) widthshow 4 FF 220 564.674255 M 1.029968 0 32 ( is another system error a user could recei) widthshow 394.609924 564.674255 M 1.029968 0 32 (v) widthshow 399.459991 564.674255 M 1.029968 0 32 (e. This results from a RPC with a) widthshow 5 FF 180 576.674194 M 0.657272 0 32 (timeout) widthshow 4 FF 210 576.674194 M 0.657272 0 32 ( v) widthshow 217.90741 576.674194 M 0.657272 0 32 (alue set, timing out before a reply is recei) widthshow 388.715759 576.674194 M 0.657272 0 32 (v) widthshow 393.565826 576.674194 M 0.657272 0 32 (ed. This usually only happens if the) widthshow 180 588.674194 M 1.179916 0 32 (serv) widthshow 196.510086 588.674194 M 1.179916 0 32 (er is on a remote machine from the user) widthshow 364.249756 588.674194 M 1.179916 0 32 (. The MIG errors de\336ned in) widthshow 0 FF 480.679321 588.674194 M 1.179916 0 32 ( mig_err) widthshow 518.609375 588.674194 M 1.179916 0 32 (ors.h) widthshow 4 FF 180 600.674194 M 0.548706 0 32 (usually only occur if the user is using a dif) widthshow 354.948486 600.674194 M 0.548706 0 32 (ferent v) widthshow 386.167297 600.674194 M 0.548706 0 32 (ersion of the interf) widthshow 461.863464 600.674194 M 0.548706 0 32 (ace than the serv) widthshow 530.279663 600.674194 M 0.548706 0 32 (er) widthshow 537.5 600.674194 M 0.548706 0 32 (.) widthshow (MIG error codes can be interpreted by the routines in) 180.0 612.674 T 0 FF ( mach_err) 393.0 612.674 T (or) 436.97 612.674 T (.) 445.411 612.674 T 4 FF 180 636.674194 M 0.939941 0 32 (The subsystem writer must hand code tw) widthshow 349.409729 636.674194 M 0.939941 0 32 (o things in addition to the MIG de\336nition \336le.) widthshow 180 648.674133 M 0.29213 0 32 (First, the actual operations must be declared and imported into the serv) widthshow 466.913513 648.674133 M 0.29213 0 32 (er module, and all) widthshow 180 660.674133 M 0.249176 0 32 (normal operations must be coded. Second, code must be written to recei) widthshow 470.501099 660.674133 M 0.249176 0 32 (v) widthshow 475.351196 660.674133 M 0.249176 0 32 (e messages, call) widthshow 180 672.674133 M 0.381393 0 32 (the serv) widthshow 211.611481 672.674133 M 0.381393 0 32 (er interf) widthshow 243.822937 672.674133 M 0.381393 0 32 (ace module, and then send a reply message when appropriate. This set of) widthshow 180 684.674072 M 0.942917 0 32 (functions is pro) widthshow 243.955917 684.674072 M 0.942917 0 32 (vided by the ) widthshow 0 FF 298.72467 684.674072 M 0.942917 0 32 (libmach.a) widthshow 4 FF 340.674683 684.674072 M 0.942917 0 32 ( function ) widthshow 0 FF 380.890503 684.674072 M 0.942917 0 32 (mach_msg_ser) widthshow 444.110565 684.674072 M 0.942917 0 32 (v) widthshow 449.01062 684.674072 M 0.942917 0 32 (er) widthshow 4 FF 457.340942 684.674072 M 0.942917 0 32 (. The serv) widthshow 498.786865 684.674072 M 0.942917 0 32 (er module) widthshow 180 696.674072 M 0.674927 0 32 (e) widthshow 184.290085 696.674072 M 0.674927 0 32 (xports one function called) widthshow 0 FF 290.464874 696.674072 M 0.674927 0 32 ( ) widthshow 5 FF 293.639801 696.674072 M 0.674927 0 32 (r) widthshow 297.379883 696.674072 M 0.674927 0 32 (andom) widthshow 0 FF 324.599884 696.674072 M 0.674927 0 32 (_ser) widthshow 342.269958 696.674072 M 0.674927 0 32 (v) widthshow 347.169983 696.674072 M 0.674927 0 32 (er) widthshow 4 FF 355.650208 696.674072 M 0.674927 0 32 (, which accepts as ar) widthshow 440.640045 696.674072 M 0.674927 0 32 (guments a pointer to the) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 31 31 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (27 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Compiling De\336nition Files) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 0 SC 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666656 M 0.75531 0 32 (message recei) widthshow 128.31546 114.666656 M 0.75531 0 32 (v) widthshow 133.165543 114.666656 M 0.75531 0 32 (ed, and a pointer to a record for the reply message. The function will re-) widthshow (turn TR) 72.0 126.667 T (UE if the recei) 102.99 126.667 T (v) 161.33 126.667 T (ed message id w) 166.18 126.667 T (as in the serv) 231.901 126.667 T (er\325) 284.241 126.667 T (s range. ) 294.791 126.667 T 72 150.666626 M 0.59639 0 32 (In general, a reply should al) widthshow 186.522018 150.666626 M 0.59639 0 32 (w) widthshow 193.642075 150.666626 M 0.59639 0 32 (ays be returned for an) widthshow 283.067749 150.666626 M 0.59639 0 32 (y message recei) widthshow 347.320679 150.666626 M 0.59639 0 32 (v) widthshow 352.170746 150.666626 M 0.59639 0 32 (ed unless the return) widthshow 72 162.666611 M 0.378372 0 32 (code from the Serv) widthshow 149.355209 162.666611 M 0.378372 0 32 (er w) widthshow 167.123642 162.666611 M 0.378372 0 32 (as MIG_NO_REPL) widthshow 245.662567 162.666611 M 0.378372 0 32 (Y or the request message doesn\325) widthshow 377.064545 162.666611 M 0.378372 0 32 (t ha) widthshow 391.963013 162.666611 M 0.378372 0 32 (v) widthshow 396.81311 162.666611 M 0.378372 0 32 (e a reply) widthshow 72 174.666595 M 0.573273 0 32 (port. The boolean function v) widthshow 188.193237 174.666595 M 0.573273 0 32 (alue from the serv) widthshow 262.243164 174.666595 M 0.573273 0 32 (er function may be used to ha) widthshow 383.792908 174.666595 M 0.573273 0 32 (v) widthshow 388.643005 174.666595 M 0.573273 0 32 (e the same) widthshow 72 186.66658 M 0.678253 0 32 (recei) widthshow 91.180145 186.66658 M 0.678253 0 32 (v) widthshow 96.030228 186.66658 M 0.678253 0 32 (e loop processing se) widthshow 178.635132 186.66658 M 0.678253 0 32 (v) widthshow 183.485214 186.66658 M 0.678253 0 32 (eral logically distinct serv) widthshow 288.970062 186.66658 M 0.678253 0 32 (er\325) widthshow 299.520386 186.66658 M 0.678253 0 32 (s requests. Once a serv) widthshow 393.443481 186.66658 M 0.678253 0 32 (er has re-) widthshow 72 198.666565 M 0.397369 0 32 (turned TR) widthshow 112.827591 198.666565 M 0.397369 0 32 (UE, or all the serv) widthshow 187.307159 198.666565 M 0.397369 0 32 (ers ha) widthshow 211.104645 198.666565 M 0.397369 0 32 (v) widthshow 215.954727 198.666565 M 0.397369 0 32 (e returned F) widthshow 264.329895 198.666565 M 0.397369 0 32 (ALSE the recei) widthshow 326.52478 198.666565 M 0.397369 0 32 (v) widthshow 331.374847 198.666565 M 0.397369 0 32 (e-serv) widthshow 355.654938 198.666565 M 0.397369 0 32 (e-send loop should) widthshow 72 210.66655 M 0.33725 0 32 (send a reply \(unless of course, the return code w) widthshow 268.215332 210.66655 M 0.33725 0 32 (as MIG_NO_REPL) widthshow 346.713135 210.66655 M 0.33725 0 32 (Y or the reply port is) widthshow (MA) 72.0 222.667 T (CH_POR) 87.71 222.667 T (T_NULL\). ) 125.451 222.667 T 72 246.666519 M 0.68927 0 32 (Details of a Mach IPC-based serv) widthshow 209.98645 246.666519 M 0.68927 0 32 (er are discussed at length in CHAPTER 4 and CHAP-) widthshow 3 FF (TER 6.) 72.0 258.667 T 72 300.999817 360 3.024002 CR 432 302.51 M 72 302.51 L S 0 0 612 792 CR 4 (Times-Bold) 14 1 mymakefontmetric 4 FF (Compiling De\336nition Files) 72.0 296.333 T 3 FF 72 320.69046 M 0.226624 0 32 (MIG is implemented as a co) widthshow 186.023209 320.69046 M 0.226624 0 32 (v) widthshow 190.873291 320.69046 M 0.226624 0 32 (er program that recognizes a fe) widthshow 315.876587 320.69046 M 0.226624 0 32 (w switches, calls ) widthshow 1 FF 386.546448 320.69046 M 0.226624 0 32 (cpp) widthshow 3 FF 402.106445 320.69046 M 0.226624 0 32 ( to pro-) widthshow 72 332.69043 M 0.885803 0 32 (cess comments and preprocessor macros and then passes the preprocessed output to the) widthshow (program) 72.0 344.69 T 1 FF ( migcom) 105.88 344.69 T 3 FF ( which generates the C \336les.) 142.26 344.69 T (The switches that MIG recognizes are:) 72.0 368.69 T 72.0 392.69 T (,R]) 83.26 392.69 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 144 392.690399 M 1.457062 0 32 (r) widthshow 3 FF 147.889999 392.690399 M 1.457062 0 32 widthshow 1 FF 175.177063 392.690399 M 1.457062 0 32 (mach_msg) widthshow 3 FF 220.727066 392.690399 M 1.457062 0 32 ( with both the MA) widthshow 300.045532 392.690399 M 1.457062 0 32 (CH_SEND_MSG and MA) widthshow 409.779877 392.690399 M 1.457062 0 32 (CH_-) widthshow 144 404.690369 M 3.544418 0 32 (RCV_MSG options; ) widthshow 5 FF 235.548828 404.690369 M 3.544418 0 32 (R) widthshow 3 FF 241.658829 404.690369 M 3.544418 0 32 widthshow 1 FF 344.360931 404.690369 M 3.544418 0 32 (mach_msg ) widthshow 3 FF 395.955353 404.690369 M 3.544418 0 32 (with the) widthshow 144 416.690369 M 5.356552 0 32 (MA) widthshow 159.71022 416.690369 M 5.356552 0 32 (CH_SEND_MSG option and ) widthshow 1 FF 294.94989 416.690369 M 5.356552 0 32 (mach_msg) widthshow 3 FF 340.499878 416.690369 M 5.356552 0 32 ( with the MA) widthshow 409.779755 416.690369 M 5.356552 0 32 (CH_-) widthshow (RCV_MSG option. Def) 144.0 428.69 T (ault is) 239.18 428.69 T 5 FF ( r) 263.35 428.69 T 3 FF (.) 269.19 428.69 T 72.0 452.69 T 5 FF 144 452.690338 M 2.899963 0 32 (q) widthshow 3 FF 149 452.690338 M 2.899963 0 32 widthshow 205.960022 452.690338 M 2.899963 0 32 (arning statements; ) widthshow 5 FF 287.309937 452.690338 M 2.899963 0 32 (Q) widthshow 3 FF 294.529968 452.690338 M 2.899963 0 32 widthshow 335.939972 452.690338 M 2.899963 0 32 (arning statements. De-) widthshow 3 FF (f) 144.0 464.69 T (ault is) 147.23 464.69 T 5 FF ( Q) 171.4 464.69 T 3 FF (.) 181.12 464.69 T 72.0 488.69 T (,V]) 84.68 488.69 T 5 FF 144 488.690308 M 1.584961 0 32 (v) widthshow 3 FF 148.440002 488.690308 M 1.584961 0 32 widthshow 163.290085 488.690308 M 1.584961 0 32 (erbose, prints out routines and types as the) widthshow 344.214905 488.690308 M 1.584961 0 32 (y are processed; ) widthshow 5 FF 415.889801 488.690308 M 1.584961 0 32 (V) widthshow 3 FF 421.999817 488.690308 M 1.584961 0 32 widthshow (compiles silently) 144.0 500.69 T (. Def) 211.41 500.69 T (ault is) 231.3 500.69 T 5 FF ( V) 255.47 500.69 T 3 FF (.) 262.791 500.69 T 72.0 524.69 T 5 FF 144 524.690308 M 0.417206 0 32 (s) widthshow 3 FF 147.889999 524.690308 M 0.417206 0 32 widthshow 5 FF 275.236023 524.690308 M 0.417206 0 32 (sys) widthshow 3 FF 287.456055 524.690308 M 0.417206 0 32 (Serv) widthshow 305.636108 524.690308 M 0.417206 0 32 (er) widthshow 312.856445 524.690308 M 0.417206 0 32 (.c code. The layout of a sym-) widthshow 144 536.690247 M 0.615646 0 32 (bol table \() widthshow 5 FF 185.781296 536.690247 M 0.615646 0 32 (mig_symtab_t) widthshow 3 FF 241.891296 536.690247 M 0.615646 0 32 (\) is de\336ned in ) widthshow 1 FF 301.573883 536.690247 M 0.615646 0 32 () widthshow 3 FF 368.613983 536.690247 M 0.615646 0 32 (. ) widthshow 5 FF 374.229614 536.690247 M 0.615646 0 32 (S) widthshow 3 FF 379.229614 536.690247 M 0.615646 0 32 widthshow 3 FF 144 548.690247 M 1.823608 0 32 (the symbol table. Def) widthshow 235.470886 548.690247 M 1.823608 0 32 (ault is) widthshow 5 FF 261.464478 548.690247 M 1.823608 0 32 ( S) widthshow 3 FF 270.788086 548.690247 M 1.823608 0 32 (. This is useful for protection systems) widthshow 144 560.690247 M 1.745453 0 32 (where access to the serv) widthshow 247.461914 560.690247 M 1.745453 0 32 (er\325) widthshow 258.012207 560.690247 M 1.745453 0 32 (s operations is dynamically speci\336able or) widthshow 144 572.690186 M 1.25087 0 32 (for pro) widthshow 172.590958 572.690186 M 1.25087 0 32 (viding a serv) widthshow 226.602783 572.690186 M 1.25087 0 32 (er call interf) widthshow 277.874573 572.690186 M 1.25087 0 32 (ace that is re-directed at run-time ala) widthshow 1 FF (syscall) 144.0 584.69 T 3 FF ( \(serv) 171.78 584.69 T (er) 194.12 584.69 T (-to-serv) 201.69 584.69 T (er calls made on behalf of a user\).) 232.64 584.69 T 3 FF 72.0 608.69 T 3 FF 144 608.690186 M 1.082642 0 32 (instead of a single user \336le, generate indi) widthshow 315.18866 608.690186 M 1.082642 0 32 (vidual \336les for each routine,) widthshow 144 620.690186 M 0.684509 0 32 (for ease in b) widthshow 195.003647 620.690186 M 0.684509 0 32 (uilding a library) widthshow 260.163025 620.690186 M 0.684509 0 32 (. The \336le name for each \336le is ) widthshow 1 FF 387.559113 620.690186 M 0.684509 0 32 (operation-) widthshow (name.c) 144.0 632.69 T 3 FF (.) 174.27 632.69 T 3 FF 72.0 656.69 T (er) 93.51 656.69 T 5 FF ( name) 101.28 656.69 T 3 FF (name the serv) 144.0 656.69 T (er \336le) 199.39 656.69 T 5 FF ( name) 222.44 656.69 T 3 FF (.) 246.6 656.69 T 3 FF 72.0 680.69 T 5 FF ( name) 93.66 680.69 T 3 FF (name the user \336le) 144.0 680.69 T 5 FF ( name) 214.82 680.69 T 3 FF (.) 238.98 680.69 T 52 251.999847 2 9.999985 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 32 32 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (28 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Mach Interface Generator \(MIG\)) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180.0 112.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF ( name) 211.65 112.651 T 3 FF (name the user header \336le) 252.0 112.651 T 4 FF ( name) 351.97 112.651 T 3 FF (.) 376.13 112.651 T 180.0 136.651 T 4 FF (name) 218.04 136.651 T 3 FF 252 136.65065 M 0.45993 0 32 (name the serv) widthshow 308.309937 136.65065 M 0.45993 0 32 (er header \336le name. This \336le is generated only if this op-) widthshow 252 148.650635 M 0.291901 0 32 (tion is speci\336ed. The serv) widthshow 355.50769 148.650635 M 0.291901 0 32 (er header \336le contains function prototypes for) widthshow 252 160.65062 M 0.458405 0 32 (the v) widthshow 271.928528 160.65062 M 0.458405 0 32 (arious functions to be called on the serv) widthshow 434.127472 160.65062 M 0.458405 0 32 (er side by the MIG gener-) widthshow (ated de-multiple) 252.0 172.651 T (xing routine.) 317.12 172.651 T 180.0 196.651 T 4 FF ( name) 214.43 196.651 T 3 FF 252 196.650589 M 2.091599 0 32 (name the user internal header \336le) widthshow 4 FF 395.478027 196.650589 M 2.091599 0 32 ( name) widthshow 3 FF 421.729614 196.650589 M 2.091599 0 32 (. This is only used for ) widthshow 4 FF 523.999207 196.650589 M 2.091599 0 32 (k) widthshow 528.339233 196.650589 M 2.091599 0 32 (er-) widthshow (nelserver) 252.0 208.651 T 3 FF ( subsystems.) 289.21 208.651 T 180 232.650558 M 0.620605 0 32 (An) widthshow 192.070084 232.650558 M 0.620605 0 32 (y switches that MIG does not recognize are passed on to ) widthshow 0 FF 426.906769 232.650558 M 0.620605 0 32 (cpp) widthshow 3 FF 442.466766 232.650558 M 0.620605 0 32 (. MIG also notices if\323 \320) widthshow 3 FF 180 244.650543 M 0.372574 0 32 (MD\323 is being passed to) widthshow 0 FF 275.3703 244.650543 M 0.372574 0 32 ( cpp) widthshow 3 FF 293.802856 244.650543 M 0.372574 0 32 (. If it is, MIG \336x) widthshow 361.905823 244.650543 M 0.372574 0 32 (es up the resulting ) widthshow 4 FF 438.946106 244.650543 M 0.372574 0 32 (sys) widthshow 0 FF 451.166138 244.650543 M 0.372574 0 32 (.d) widthshow 4 FF 459.226135 244.650543 M 0.372574 0 32 ( ) widthshow 3 FF 462.098694 244.650543 M 0.372574 0 32 widthshow 502.043976 244.650543 M 0.372574 0 32 (w the de-) widthshow 180 256.650513 M 1.61319 0 32 (pendencies of the) widthshow 4 FF 253.20639 256.650513 M 1.61319 0 32 ( sys) widthshow 0 FF 269.539581 256.650513 M 1.61319 0 32 (.h) widthshow 3 FF 277.599579 256.650513 M 1.61319 0 32 (, ) widthshow 4 FF 284.212769 256.650513 M 1.61319 0 32 (sys) widthshow 0 FF 296.43277 256.650513 M 1.61319 0 32 (User) widthshow 315.42334 256.650513 M 1.61319 0 32 (.c) widthshow 3 FF 322.363342 256.650513 M 1.61319 0 32 ( and) widthshow 4 FF 340.916504 256.650513 M 1.61319 0 32 ( sys) widthshow 0 FF 357.249695 256.650513 M 1.61319 0 32 (Ser) widthshow 371.589783 256.650513 M 1.61319 0 32 (v) widthshow 376.489807 256.650513 M 1.61319 0 32 (er) widthshow 384.370361 256.650513 M 1.61319 0 32 (.c) widthshow 3 FF 391.310364 256.650513 M 1.61319 0 32 ( on the) widthshow 4 FF 421.756775 256.650513 M 1.61319 0 32 ( sys) widthshow 0 FF 438.089966 256.650513 M 1.61319 0 32 (.defs) widthshow 3 FF 457.809937 256.650513 M 1.61319 0 32 ( and an) widthshow 489.766418 256.650513 M 1.61319 0 32 (y) widthshow 0 FF 494.766418 256.650513 M 1.61319 0 32 ( #include) widthshow 3 FF 534.999634 256.650513 M 1.61319 0 32 (d) widthshow 180 268.650513 M 1.111938 0 32 widthshow 0 FF 184.440002 268.650513 M 1.111938 0 32 (.defs) widthshow 4 FF 204.160004 268.650513 M 1.111938 0 32 widthshow 3 FF 209.720001 268.650513 M 1.111938 0 32 ( \336les. F) widthshow 241.523956 268.650513 M 1.111938 0 32 (or this feature to w) widthshow 321.411774 268.650513 M 1.111938 0 32 (ork correctly the name of the subsystem must be the) widthshow (same as the name of the) 180.0 280.65 T 4 FF ( sys) 275.81 280.65 T 0 FF (.defs) 290.53 280.65 T 3 FF ( \336le.) 310.25 280.65 T 180 304.650482 M 0.862686 0 32 (T) widthshow 185.31044 304.650482 M 0.862686 0 32 (o use MIG, gi) widthshow 243.198639 304.650482 M 0.862686 0 32 (v) widthshow 248.048721 304.650482 M 0.862686 0 32 (e the name of the) widthshow 4 FF 320.369476 304.650482 M 0.862686 0 32 ( \322) widthshow 0 FF 329.292175 304.650482 M 0.862686 0 32 (.defs) widthshow 4 FF 349.012146 304.650482 M 0.862686 0 32 widthshow 3 FF 354.572144 304.650482 M 0.862686 0 32 ( \336le or \336les and an) widthshow 432.895691 304.650482 M 0.862686 0 32 (y switch v) widthshow 475.481201 304.650482 M 0.862686 0 32 (alues on a MIG) widthshow (command line, for e) 180.0 316.65 T (xample:) 260.39 316.65 T 0 FF (mig) 216.0 340.65 T 3 FF ( \320v) 232.11 340.65 T 4 FF ( r) 244.61 340.65 T (andom) 250.85 340.65 T 0 FF (.defs) 278.07 340.65 T 3 FF 180 364.650452 M 0.667801 0 32 (If) widthshow 4 FF 186.660004 364.650452 M 0.667801 0 32 ( r) widthshow 193.567886 364.650452 M 0.667801 0 32 (andom) widthshow 3 FF 220.787888 364.650452 M 0.667801 0 32 ( is the subsystem name declared in the de\336nitions \336le, then MIG will produce) widthshow 180 376.650421 M 1.306183 0 32 (the \336les ) widthshow 4 FF 216.502365 376.650421 M 1.306183 0 32 (r) widthshow 220.242447 376.650421 M 1.306183 0 32 (andom) widthshow 0 FF 247.462448 376.650421 M 1.306183 0 32 (.h) widthshow 3 FF 255.522446 376.650421 M 1.306183 0 32 (,) widthshow 4 FF 258.022461 376.650421 M 1.306183 0 32 ( r) widthshow 265.568726 376.650421 M 1.306183 0 32 (andom) widthshow 0 FF 292.788696 376.650421 M 1.306183 0 32 (User) widthshow 311.779266 376.650421 M 1.306183 0 32 (.c) widthshow 3 FF 318.719269 376.650421 M 1.306183 0 32 ( and) widthshow 4 FF 336.965454 376.650421 M 1.306183 0 32 ( r) widthshow 344.511719 376.650421 M 1.306183 0 32 (andom) widthshow 0 FF 371.73172 376.650421 M 1.306183 0 32 (Ser) widthshow 386.071777 376.650421 M 1.306183 0 32 (v) widthshow 390.971832 376.650421 M 1.306183 0 32 (er) widthshow 398.852386 376.650421 M 1.306183 0 32 (.c) widthshow 3 FF 405.792389 376.650421 M 1.306183 0 32 ( as output. If the \322\320MD\323 switch) widthshow (w) 180.0 388.65 T (as gi) 187.12 388.65 T (v) 205.48 388.65 T (en, a) 210.33 388.65 T 4 FF ( r) 229.21 388.65 T (andom) 235.45 388.65 T 0 FF (.d) 262.67 388.65 T 3 FF ( \336le will also be generated.) 270.73 388.65 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 33 33 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 2 SL 3.86 setmiterlimit 0 G 432 45 M 72 45 L S 2 SC 432 342 M 72 342 L S 0.25 SL 432 720 M 72 720 L S 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (29 ) widthshow 0 0 612 792 CR 1 G 72 99 360 225 NF 0 G 2 (Times-Roman) 12 1 mymakefontmetric 2 FF 72 115 M 1.19989 0 (CHAPTER 4) ashow 3 (Times-Roman) 24 1 mymakefontmetric 3 FF 180 115 M -0.479736 0 (Basic IPC\320Based Serv) ashow 387.365479 115 M -0.479736 0 (ers) ashow 52 99 2 24 NF 1 G 72 360 360 344.015991 NF 0 G 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 72 366.666656 M 0.813293 0 32 (A serv) widthshow 99.043381 366.666656 M 0.813293 0 32 (er has a wide range of concerns in order to correctly function.. This chapter con-) widthshow 72 378.666626 M 0.845367 0 32 (cerns the details in) widthshow 148.846329 378.666626 M 0.845367 0 32 (v) widthshow 153.646439 378.666626 M 0.845367 0 32 (olv) widthshow 166.27652 378.666626 M 0.845367 0 32 (ed in writing a basic single-threaded serv) widthshow 335.608826 378.666626 M 0.845367 0 32 (er) widthshow 342.829132 378.666626 M 0.845367 0 32 (. Multi-threaded serv-) widthshow 4 FF (ers are co) 72.0 390.667 T (v) 110.16 390.667 T (ered in CHAPTER 6.) 115.01 390.667 T 72 432.999878 360 3.024002 CR 432 434.51 M 72 434.51 L S 0 0 612 792 CR 5 (Times-Bold) 14 1 mymakefontmetric 5 FF (Basic Request Pr) 72.0 428.333 T (ocessing) 173.626 428.333 T 4 FF 72 452.690491 M 0.492706 0 32 (Unlik) widthshow 94.680054 452.690491 M 0.492706 0 32 (e most application programs that perform some processing to produce some results) widthshow 72 464.69043 M 0.757828 0 32 (and then terminate, a serv) widthshow 177.911407 464.69043 M 0.757828 0 32 (er \(almost\) ne) widthshow 234.717209 464.69043 M 0.757828 0 32 (v) widthshow 239.567291 464.69043 M 0.757828 0 32 (er terminates; it continues to process in a loop,) widthshow 72 476.690369 M 1.871796 0 32 (recei) widthshow 91.180145 476.690369 M 1.871796 0 32 (ving requests for service from its clients, performing them, returning results and) widthshow (w) 72.0 488.69 T (aiting to recei) 79.12 488.69 T (v) 133.86 488.69 T (e more requests.) 138.71 488.69 T 72 512.690247 M 0.895645 0 32 (The details of the ) widthshow 1 FF 147.792587 512.690247 M 0.895645 0 32 (mach_msg) widthshow 4 FF 193.34259 512.690247 M 0.895645 0 32 ( call and the format of Mach messages are suf) widthshow 384.713562 512.690247 M 0.895645 0 32 widthshow 72 524.690186 M 0.611298 0 32 (v) widthshow 76.80011 524.690186 M 0.611298 0 32 (olv) widthshow 89.430191 524.690186 M 0.611298 0 32 (ed that the) widthshow 132.162872 524.690186 M 0.611298 0 32 (y are best left, and fortunately can be left, to system supplied library rou-) widthshow (tines \(and MIG generated stubs\). The basic form of a serv) 72.0 536.69 T (er is as follo) 303.18 536.69 T (ws:) 352.09 536.69 T 72 548.023438 360 9 CR 1 G 72 548.023438 360 9 NF 0 G 4 FF (/*) 91.224 554.855 T 3 SL 0 SC 0.6667 G 422.91 552.52 M 422.91 557.77 L 432 552.52 L 422.91 547.27 L F 422.91 552.52 M 108 552.52 L S 0 0 612 792 CR 0 G 4 FF 108 563.690063 M 3.476288 0 32 (Allocate a service port from which the serv) widthshow 305.194122 563.690063 M 3.476288 0 32 (er will recei) widthshow 359.65686 563.690063 M 3.476288 0 32 (v) widthshow 364.506927 563.690063 M 3.476288 0 32 (e client request) widthshow 72 577.023315 360 9 CR 1 G 72 577.023315 360 9 NF 0 G 4 FF (*/) 90.0 583.85 T 0.6667 G 117.09 581.52 M 117.09 576.27 L 108 581.52 L 117.09 586.77 L F 432 581.52 M 117.09 581.52 L S 0 0 612 792 CR 0 G 4 FF (messages.) 108.0 573.69 T ([1]) 87.34 594.69 T (\(v) 108.0 594.69 T (oid\) ) 116.13 594.69 T 1 FF (mach_port_allocate) 134.74 594.69 T 4 FF ( \() 219.17 594.69 T 1 FF (mach_task_self) 225.0 594.69 T 4 FF ( \(\), ) 290.55 594.69 T (MA) 162.0 604.69 T (CH_POR) 177.71 604.69 T (T_RIGHT_RECEIVE, &) 215.451 604.69 T 6 (Times-Italic) 10 1 mymakefontmetric 6 FF (service_port) 317.111 604.69 T 4 FF (\);) 367.101 604.69 T 72 610.023193 360 9 CR 1 G 72 610.023193 360 9 NF 0 G 4 FF (/*) 91.224 616.854 T 0.6667 G 422.91 614.52 M 422.91 619.77 L 432 614.52 L 422.91 609.27 L F 422.91 614.52 M 108 614.52 L S 72 629.023132 360 9 CR 1 G 72 629.023132 360 9 NF 0 G 4 FF (*/) 90.0 635.849 T 0.6667 G 117.09 633.52 M 117.09 628.27 L 108 633.52 L 117.09 638.77 L F 432 633.52 M 117.09 633.52 L S 0 0 612 792 CR 0 G 4 FF 108.0 625.69 T (Announce\323 the request port in some w) 111.64 625.69 T (ay so that clients can \336nd it.) 265.401 625.69 T ([2]) 87.34 646.69 T 6 FF (r) 108.0 646.69 T (esult) 111.52 646.69 T 4 FF ( = ) 130.41 646.69 T 1 FF (netname_check_in) 141.05 646.69 T 4 FF ( \() 220.49 646.69 T 6 FF (name_server_port) 226.32 646.69 T 4 FF (, \322service-name\323, ) 299.64 646.69 T 1 FF (mach_task_self) 162.0 656.69 T 4 FF ( \(\), ) 227.55 656.69 T 6 FF (service_port) 241.71 656.69 T 4 FF (\);) 291.7 656.69 T ([3]) 87.34 668.69 T (if \() 108.0 668.69 T 6 FF (r) 119.94 668.69 T (esult) 123.46 668.69 T 4 FF ( != KERN_SUCCESS\)) 142.35 668.69 T ([4]) 87.34 680.69 T (die horribly) 144.0 680.69 T (...) 190.29 680.69 T 52 383.999969 2 9.999985 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 34 34 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (30 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Basic IPC\320Based Ser) 180.0 55.824 T (v) 260.91 55.824 T (ers) 265.32 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 180 105.984009 360 9 CR 180 105.984009 360 9 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (/*) 199.224 112.815 T 3 SL 0.6667 G 530.91 110.48 M 530.91 115.73 L 540 110.48 L 530.91 105.23 L F 530.91 110.48 M 216 110.48 L S 0 0 612 792 CR 0 G 3 FF 216 121.650635 M 2.604401 0 32 (Use ) widthshow 0 FF 236.654404 121.650635 M 2.604401 0 32 (mach_msg_ser) widthshow 299.874451 121.650635 M 2.604401 0 32 (v) widthshow 304.774536 121.650635 M 2.604401 0 32 (er) widthshow 3 FF 313.654541 121.650635 M 2.604401 0 32 ( to loop o) widthshow 359.377808 121.650635 M 2.604401 0 32 (v) widthshow 364.227905 121.650635 M 2.604401 0 32 (er all incoming messages, handling error) widthshow 216 131.650574 M 2.947922 0 32 (cases, disposition of messages, etc. while calling the serv) widthshow 468.013489 131.650574 M 2.947922 0 32 (er\325) widthshow 478.563782 131.650574 M 2.947922 0 32 (s message de-) widthshow 180 144.983826 360 9 CR 1 G 180 144.983826 360 9 NF 0 G 3 FF (*/) 198.0 151.81 T 0.6667 G 225.09 149.48 M 225.09 144.23 L 216 149.48 L 225.09 154.73 L F 540 149.48 M 225.09 149.48 L S 0 0 612 792 CR 0 G 3 FF (multiple) 216.0 141.651 T (xing routine \(normally generated by MIG\).) 249.19 141.651 T ([5]) 195.34 162.65 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (r) 216.0 162.65 T (esult) 219.52 162.65 T 3 FF ( = ) 238.41 162.65 T 0 FF (mach_msg_ser) 249.05 162.65 T (v) 312.27 162.65 T (er) 317.17 162.65 T 3 FF ( \() 326.05 162.65 T 0 FF (MIG_demux_ser) 331.88 162.65 T (v) 404.55 162.65 T (er) 409.45 162.65 T 3 FF (, MAX_MSG_SIZE, ) 417.931 162.65 T 4 FF (service_port) 270.0 172.65 T 3 FF (\);) 319.99 172.65 T ([6]) 195.34 184.65 T (terminate...) 216.0 184.65 T 180 206.650269 M 0.234558 0 32 (The ) widthshow 0 FF 198.284561 206.650269 M 0.234558 0 32 (mach_msg_ser) widthshow 261.504639 206.650269 M 0.234558 0 32 (v) widthshow 266.404663 206.650269 M 0.234558 0 32 (er) widthshow 3 FF 275.284668 206.650269 M 0.234558 0 32 ( routine is the basic serv) widthshow 373.237549 206.650269 M 0.234558 0 32 (er loop. It recei) widthshow 434.781372 206.650269 M 0.234558 0 32 (v) widthshow 439.63147 206.650269 M 0.234558 0 32 (es an initial request mes-) widthshow 180 218.650208 M 0.679962 0 32 (sage, processes it and sends a reply while w) widthshow 360.579773 218.650208 M 0.679962 0 32 (aiting for the ne) widthshow 426.069763 218.650208 M 0.679962 0 32 (xt client request. The serv) widthshow 532.229675 218.650208 M 0.679962 0 32 (er) widthshow 180 230.650146 M 1.479034 0 32 (loop routine, beside implementing the basic serv) widthshow 382.874298 230.650146 M 1.479034 0 32 (er dri) widthshow 405.483459 230.650146 M 1.479034 0 32 (v) widthshow 410.333557 230.650146 M 1.479034 0 32 (er) widthshow 417.703796 230.650146 M 1.479034 0 32 (, hides important details con-) widthshow (cerning the ) 180.0 242.65 T 0 FF (mach_msg) 227.21 242.65 T 3 FF ( call, especially error conditions.) 272.76 242.65 T (The message de-multiple) 180.0 266.65 T (xing serv) 280.39 266.65 T (er routine called by ) 317.18 266.65 T 0 FF (mach_msg_ser) 397.16 266.65 T (v) 460.38 266.65 T (er) 465.28 266.65 T 3 FF (,) 473.761 266.65 T (boolean_t ) 216.0 290.65 T 0 FF (demux_ser) 257.94 290.65 T (v) 304.5 290.65 T (er) 309.4 290.65 T 3 FF ( \(mach_msg_header_t *) 318.28 290.65 T 4 FF (r) 414.37 290.65 T (equest-msg) 417.89 290.65 T 3 FF (, ) 462.88 290.65 T (mach_msg_header_t *) 270.0 302.65 T 4 FF (r) 360.26 302.65 T (eply-msg) 363.78 302.65 T 3 FF (\),) 399.88 302.65 T 180 326.649841 M 0.429306 0 32 (returns TR) widthshow 223.079529 326.649841 M 0.429306 0 32 (UE if this function processed the request. In an) widthshow 414.384094 326.649841 M 0.429306 0 32 (y case, it must initialize the re-) widthshow 180 338.64978 M 1.665421 0 32 (ply message. This function is normally the ) widthshow 4 FF 364.427948 338.64978 M 1.665421 0 32 (service) widthshow 0 FF 392.747955 338.64978 M 1.665421 0 32 (_ser) widthshow 410.41803 338.64978 M 1.665421 0 32 (v) widthshow 415.318054 338.64978 M 1.665421 0 32 (er) widthshow 3 FF 424.198059 338.64978 M 1.665421 0 32 ( routine generated by MIG.) widthshow 180 350.649719 M 0.436249 0 32 (This routine hides the details of the format of Mach messages. It is this routine that calls) widthshow (the actual tar) 180.0 362.65 T (get serv) 231.47 362.65 T (er routine.) 262.7 362.65 T 180 386.649597 M 0.537827 0 32 (This basic structure handles all of the details of basic RPC communication with a client.) widthshow 180 398.649536 M 0.633804 0 32 (In particular) widthshow 229.384033 398.649536 M 0.633804 0 32 (, it handles message formats, handling of request and reply port rights, mar-) widthshow (shalling and un-marshalling of ar) 180.0 410.649 T (guments, method dispatch and error handling.) 312.58 410.649 T (The use of ) 180.0 434.649 T 0 FF (mach_msg_ser) 224.71 434.649 T (v) 287.93 434.649 T (er) 292.83 434.649 T 3 FF ( pro) 301.71 434.649 T (vides a v) 317.39 434.649 T (ariety of bene\336ts:) 352.69 434.649 T 5 (Times-Roman) 7 1 mymakefontmetric 5 FF 180.0 452.649 T 3 FF (Uses combined send/recei) 193.536 452.649 T (v) 297.706 452.649 T (e whene) 302.556 452.649 T (v) 335.346 452.649 T (er possible.) 340.196 452.649 T 5 FF 180.0 467.649 T 3 FF (Sends a reply message if there is a reply port.) 193.536 467.649 T 5 FF 180.0 482.649 T 3 FF (De-allocates resources in request message unless serv) 193.536 482.649 T (er function consumes them.) 408.326 482.649 T 5 FF 180.0 497.649 T 3 FF (De-allocates resources in reply message if it isn't sent.) 193.536 497.649 T 5 FF 180.0 512.649 T 3 FF (Protects ag) 193.536 512.649 T (ainst too-lar) 237.646 512.649 T (ge request messages.) 285.516 512.649 T 5 FF 180.0 527.649 T 3 FF (Protects ag) 193.536 527.649 T (ainst dead reply ports.) 237.646 527.649 T 5 FF 180.0 542.649 T 3 FF (Protects ag) 193.536 542.649 T (ainst \322full\323 reply ports.) 237.646 542.649 T 180 566.648926 M 1.179962 0 32 (Almost all of the remaining details of request processing are concerned with details of) widthshow (the operation of the service routines themselv) 180.0 578.649 T (es.) 362.04 578.649 T (F) 180.0 602.649 T (or e) 185.41 602.649 T (xample, gi) 200.53 602.649 T (v) 242.5 602.649 T (en the simple MIG de\336nition:) 247.35 602.649 T ([1]) 195.34 620.649 T (routine ) 216.0 620.649 T 0 FF (getbalance) 246.83 620.649 T 3 FF ([2]) 195.34 632.649 T (\() 216.0 632.649 T ([3]) 195.34 644.649 T 4 FF (server) 252.0 644.649 T 3 FF (: mach_port_t;) 396.0 644.649 T ([4]) 195.34 656.649 T (out ) 252.0 656.649 T 4 FF (balance) 267.28 656.649 T 3 FF (: int) 396.0 656.649 T ([5]) 195.34 668.648 T (\)) 216.0 668.648 T (with the corresponding client call:) 180.0 690.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 35 35 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (31 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Basic Request Pr) 72.0 55.824 T (ocessing) 137.331 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([1]) 87.34 114.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (r) 108.0 114.667 T (esult) 111.52 114.667 T 3 FF ( = ) 130.41 114.667 T 1 FF (getbalance) 141.05 114.667 T 3 FF ( \() 186.6 114.667 T 4 FF (server) 192.43 114.667 T 3 FF (, &) 217.02 114.667 T 4 FF (balance) 229.8 114.667 T 3 FF (\);) 261.46 114.667 T (the serv) 72.0 136.667 T (er only need pro) 103.23 136.667 T (vide the follo) 168.34 136.667 T (wing simple service routine:) 221.42 136.667 T ([1]) 87.34 154.667 T (k) 108.0 154.667 T (ern_return_t ) 112.9 154.667 T 1 FF (getbalance) 164.83 154.667 T 3 FF ( \(mach_port_t ) 210.38 154.667 T 4 FF (server) 269.26 154.667 T 3 FF (, int *) 293.85 154.667 T 4 FF (balance) 316.91 154.667 T 3 FF (\)) 348.57 154.667 T ([2]) 87.34 166.666 T ({) 108.0 166.666 T ([3]) 87.34 178.666 T (*) 144.0 178.666 T 4 FF (balance) 149.0 178.666 T 3 FF ( = ) 180.66 178.666 T 4 FF (server_balance) 191.3 178.666 T 3 FF (;) 252.95 178.666 T ([4]) 87.34 190.666 T (return KERN_SUCCESS;) 144.0 190.666 T ([5]) 87.34 202.666 T (}) 108.0 202.666 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Handling Multiple Request T) 72.0 232.0 T (ypes) 221.472 232.0 T 3 FF 72 248.666275 M 0.280945 0 32 (The ) widthshow 4 FF 90.330948 248.666275 M 0.280945 0 32 (service) widthshow 1 FF 118.650955 248.666275 M 0.280945 0 32 (_ser) widthshow 136.321014 248.666275 M 0.280945 0 32 (v) widthshow 141.221069 248.666275 M 0.280945 0 32 (er) widthshow 3 FF 150.101074 248.666275 M 0.280945 0 32 ( routine generated by MIG de-multiple) widthshow 306.605896 248.666275 M 0.280945 0 32 (x) widthshow 311.455994 248.666275 M 0.280945 0 32 (es messages associated with a) widthshow 72 260.66626 M 0.45726 0 32 (single MIG de\336nition \336le. It is sometimes the case that a serv) widthshow 322.419952 260.66626 M 0.45726 0 32 (er needs to handle messag-) widthshow 72 272.66626 M 0.205231 0 32 (es that may be recei) widthshow 151.991074 272.66626 M 0.205231 0 32 (v) widthshow 156.841156 272.66626 M 0.205231 0 32 (ed from a gi) widthshow 205.806992 272.66626 M 0.205231 0 32 (v) widthshow 210.657074 272.66626 M 0.205231 0 32 (en port that were generated by multiple de\336nition \336les.) widthshow (In such cases, a custom de-multiple) 72.0 284.666 T (xing routine must be constructed.) 214.05 284.666 T 72 308.666199 M 1.058914 0 32 (The follo) widthshow 109.749054 308.666199 M 1.058914 0 32 (wing e) widthshow 137.598053 308.666199 M 1.058914 0 32 (xample uses the ) widthshow 4 FF 207.1548 308.666199 M 1.058914 0 32 (service) widthshow 1 FF 235.474808 308.666199 M 1.058914 0 32 (_ser) widthshow 253.144867 308.666199 M 1.058914 0 32 (v) widthshow 258.044922 308.666199 M 1.058914 0 32 (er_r) widthshow 276.185028 308.666199 M 1.058914 0 32 (outine) widthshow 3 FF 302.855042 308.666199 M 1.058914 0 32 (s generated by MIG. \(The con-) widthshow 3 FF (struct belo) 72.0 320.666 T (w is f) 113.69 320.666 T (aster than calling the v) 135.81 320.666 T (arious ) 226.1 320.666 T 4 FF (service) 253.04 320.666 T 1 FF (_ser) 281.36 320.666 T (v) 299.03 320.666 T (er) 303.93 320.666 T 3 FF ( routines in succession.\)) 312.81 320.666 T 3 FF ([1]) 87.34 338.666 T (boolean_t ) 108.0 338.666 T 1 FF (multiple_ser) 149.94 338.666 T (vice_demux) 203.17 338.666 T 3 FF ( \(mach_msg_header_t *) 253.72 338.666 T 4 FF (inmsg) 349.81 338.666 T 3 FF (, ) 373.7 338.666 T 3 FF (mach_msg_header_t *) 162.0 348.666 T 4 FF (outmsg) 252.26 348.666 T 3 FF (\)) 281.15 348.666 T ([2]) 87.34 360.666 T 3 FF ({) 108.0 360.666 T 3 FF ([3]) 87.34 372.666 T 3 FF (mig_routine_t) 144.0 372.666 T 4 FF (r) 288.0 372.666 T (outine) 291.44 372.666 T 3 FF (;) 316.44 372.666 T 3 FF ([4]) 87.34 384.666 T 1 FF (mig_r) 144.0 384.666 T (eply_setup) 169.37 384.666 T 3 FF ( \(&) 214.93 384.666 T 4 FF (inmsg) 228.54 384.666 T 3 FF (, &) 252.43 384.666 T 4 FF (outmsg) 265.21 384.666 T 3 FF (\);) 294.1 384.666 T 3 FF ([5]) 87.34 396.666 T (if \(\() 144.0 396.666 T 4 FF (r) 159.27 396.666 T (outine) 162.71 396.666 T 3 FF ( = ) 187.71 396.666 T 4 FF (sys1) 198.35 396.666 T 1 FF (_ser) 215.57 396.666 T (v) 233.24 396.666 T (er_r) 238.14 396.666 T (outine) 256.28 396.666 T 3 FF ( \(&) 282.95 396.666 T 4 FF (inmsg) 296.56 396.666 T 3 FF (\) != 0\) ||) 320.45 396.666 T 3 FF ([6]) 87.34 408.666 T (\() 180.0 408.666 T 4 FF (r) 183.33 408.666 T (outine) 186.77 408.666 T 3 FF ( = ) 211.77 408.666 T 4 FF (sys2) 222.41 408.666 T 1 FF (_ser) 239.63 408.666 T (v) 257.3 408.666 T (er_r) 262.2 408.666 T (outine) 280.34 408.666 T 3 FF ( \(&) 307.01 408.666 T 4 FF (inmsg) 320.62 408.666 T 3 FF (\) != 0\) ||) 344.51 408.666 T 3 FF ([7]) 87.34 420.666 T (\() 180.0 420.666 T 4 FF (r) 183.33 420.666 T (outine) 186.77 420.666 T 3 FF ( = ) 211.77 420.666 T 4 FF (sys3) 222.41 420.666 T 1 FF (_ser) 239.63 420.666 T (v) 257.3 420.666 T (er_r) 262.2 420.666 T (outine) 280.34 420.666 T 3 FF ( \(&) 307.01 420.666 T 4 FF (inmsg) 320.62 420.666 T 3 FF (\) != 0\)\)) 344.51 420.666 T 3 FF ([8]) 87.34 432.666 T 3 FF ({) 144.0 432.666 T 3 FF ([9]) 87.34 444.666 T (\(*) 180.0 444.666 T 4 FF (r) 188.33 444.666 T (outine) 191.77 444.666 T 3 FF (\) \(&) 216.77 444.666 T 4 FF (inmsg) 233.71 444.666 T 3 FF (, &) 257.6 444.666 T 4 FF (outmsg) 270.38 444.666 T 3 FF (\);) 299.27 444.666 T 3 FF ([10]) 82.34 456.666 T 3 FF (return TR) 180.0 456.666 T (UE;) 218.76 456.666 T 3 FF ([11]) 82.34 468.666 T 3 FF (}) 144.0 468.666 T 3 FF ([12]) 82.34 480.666 T 3 FF (else) 144.0 480.666 T 3 FF ([13]) 82.34 492.666 T 3 FF (return F) 180.0 492.666 T (ALSE;) 211.2 492.666 T 3 FF ([14]) 82.34 504.666 T 3 FF (}) 108.0 504.666 T 5 FF (Synchr) 72.0 533.999 T (onous, Asynchr) 108.456 533.999 T (onous and Deferr) 187.584 533.999 T (ed Pr) 276.696 533.999 T (ocessing) 304.14 533.999 T 3 FF 72 550.665894 M 0.534973 0 32 (Most client\320serv) widthshow 139.325058 550.665894 M 0.534973 0 32 (er interactions are synchronous \(RPC\): the client mak) widthshow 357.659943 550.665894 M 0.534973 0 32 (es a request of the) widthshow 72 562.665833 M 0.679245 0 32 (serv) widthshow 88.510086 562.665833 M 0.679245 0 32 (er and w) widthshow 124.198639 562.665833 M 0.679245 0 32 (aits for a response; the serv) widthshow 236.584961 562.665833 M 0.679245 0 32 (er recei) widthshow 266.714355 562.665833 M 0.679245 0 32 (v) widthshow 271.564453 562.665833 M 0.679245 0 32 (es the request and directly replies. This) widthshow 72 574.665771 M 0.254974 0 32 (mode of operation is declared as a MIG ) widthshow 4 FF 235.109818 574.665771 M 0.254974 0 32 (r) widthshow 238.550064 574.665771 M 0.254974 0 32 (outine) widthshow 3 FF 263.550049 574.665771 M 0.254974 0 32 (. This mode of operation is recommended) widthshow (because of general simplicity) 72.0 586.666 T (.) 188.27 586.666 T 72 610.665649 M 0.632126 0 32 (The problem with synchronous processing is the f) widthshow 276.024963 610.665649 M 0.632126 0 32 (act that clients must w) widthshow 367.893494 610.665649 M 0.632126 0 32 (ait. This can ei-) widthshow 72 622.665588 M 0.14621 0 32 (ther lead to loss of parallelism \(the client thread can\325) widthshow 283.926025 622.665588 M 0.14621 0 32 (t be doing an) widthshow 336.154724 622.665588 M 0.14621 0 32 (ything else\), or a poten-) widthshow 72 634.665527 M 1.785309 0 32 (tial source of denial-of-service if the serv) widthshow 247.511963 634.665527 M 1.785309 0 32 (er is not trusted \(as is the case for e) widthshow 404.229858 634.665527 M 1.785309 0 32 (xternal) widthshow 72 646.665466 M 0.766632 0 32 (memory managers\). F) widthshow 161.423355 646.665466 M 0.766632 0 32 (or these circumstances, asynchronous processing can be desirable.) widthshow 72 658.665405 M 0.337097 0 32 (W) widthshow 81.040222 658.665405 M 0.337097 0 32 (ith asynchronous processing, the client does not w) widthshow 284.389954 658.665405 M 0.337097 0 32 (ait for a response; at some later time) widthshow 72 670.665344 M 0.954544 0 32 (the client may recei) widthshow 153.203781 670.665344 M 0.954544 0 32 (v) widthshow 158.053864 670.665344 M 0.954544 0 32 (e a reply) widthshow 193.743317 670.665344 M 0.954544 0 32 (, b) widthshow 204.497971 670.665344 M 0.954544 0 32 (ut need not. Asynchron) widthshow 300.531677 670.665344 M 0.954544 0 32 (y on the serv) widthshow 354.625427 670.665344 M 0.954544 0 32 (er side can in) widthshow 410.129272 670.665344 M 0.954544 0 32 (v) widthshow 414.929382 670.665344 M 0.954544 0 32 (olv) widthshow 427.559448 670.665344 M 0.954544 0 32 (e) widthshow 72 682.665283 M 1.094131 0 32 (deferring client requests, processing them out of order \(by priority order) widthshow 371.091553 682.665283 M 1.094131 0 32 (, for e) widthshow 396.729919 682.665283 M 1.094131 0 32 (xample\).) widthshow (Asynchronous processing is discouraged for general use for a v) 72.0 694.665 T (ariety of reasons:) 325.3 694.665 T 52 223.999619 2 99.999908 NF 52 341.999512 2 165.999786 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 36 36 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (32 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Basic IPC\320Based Ser) 180.0 55.824 T (v) 260.91 55.824 T (ers) 265.32 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 7 1 mymakefontmetric 3 FF 180.0 112.651 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 193.535995 112.650635 M 0.464401 0 32 (Asynchronous programming is dif) widthshow 332.169342 112.650635 M 0.464401 0 32 widthshow 406.837097 112.650635 M 0.464401 0 32 widthshow (and serv) 193.536 124.651 T (er code looks lik) 226.986 124.651 T (e an RPC; the asynchron) 293.266 124.651 T (y is not immediately e) 391.996 124.651 T (vident.) 480.636 124.651 T 3 FF 180.0 139.651 T 4 FF (The serv) 193.536 139.651 T (er must be v) 228.096 139.651 T (ery careful about the order in which it e) 277.106 139.651 T (x) 435.246 139.651 T (ecutes client requests.) 440.096 139.651 T 3 FF 180.0 154.65 T 4 FF 193.535995 154.650452 M 0.749512 0 32 (The serv) widthshow 228.845596 154.650452 M 0.749512 0 32 (er\325) widthshow 239.395905 154.650452 M 0.749512 0 32 (s request port is no longer the sole source of control \337o) widthshow 467.640686 154.650452 M 0.749512 0 32 (w; the serv) widthshow 512.869812 154.650452 M 0.749512 0 32 (er also) widthshow (contrib) 193.536 166.65 T (utes in the w) 221.666 166.65 T (ay that it defers or processes these requests.) 272.396 166.65 T 3 FF 180.0 181.65 T 4 FF 193.535995 181.65033 M 1.15741 0 32 (Since it is the most common use of Mach IPC, Mach is optimized for synchronous) widthshow 193.535995 193.650269 M 1.018448 0 32 (processing. In particular) widthshow 292.09314 193.650269 M 1.018448 0 32 (, combined send/recei) widthshow 381.360168 193.650269 M 1.018448 0 32 (v) widthshow 386.210266 193.650269 M 1.018448 0 32 (e calls are the most ef) widthshow 477.972656 193.650269 M 1.018448 0 32 widthshow (type used by the MIG RPC stubs and ) 193.536 205.65 T 0 FF (mach_msg_ser) 344.646 205.65 T (v) 407.866 205.65 T (er) 412.766 205.65 T 4 FF (\).) 421.646 205.65 T 180 229.650146 M 0.237839 0 32 (Asynchronous processing is necessary at times. There are tw) widthshow 424.802795 229.650146 M 0.237839 0 32 (o w) widthshow 439.660706 229.650146 M 0.237839 0 32 (ays in which this can oc-) widthshow (cur) 180.0 241.65 T (.) 192.22 241.65 T (First, the asynchron) 180.0 265.65 T (y can be e) 259.01 265.65 T (xplicitly declared in MIG as a ) 299.12 265.65 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF (simpler) 421.32 265.65 T (outine) 450.87 265.65 T 4 FF (.) 475.87 265.65 T ([1]) 195.34 283.65 T (simpleroutine ) 216.0 283.65 T 0 FF (asetbalance) 273.5 283.65 T 4 FF ([2]) 195.34 295.65 T (\() 216.0 295.65 T ([3]) 195.34 307.65 T 5 FF (server) 252.0 307.65 T 4 FF (: mach_port_t;) 396.0 307.65 T ([4]) 195.34 319.65 T (in ) 252.0 319.65 T 5 FF (balance) 262.28 319.65 T 4 FF (: int) 396.0 319.65 T ([5]) 195.34 331.65 T (\)) 216.0 331.65 T (with the corresponding client call:) 180.0 353.65 T ([1]) 195.34 371.65 T 5 FF (r) 216.0 371.65 T (esult) 219.52 371.65 T 4 FF ( = ) 238.41 371.65 T 0 FF (asetbalance) 249.05 371.65 T 4 FF ( \() 298.49 371.65 T 5 FF (server) 304.32 371.65 T 4 FF (, ) 328.91 371.65 T 5 FF (balance) 333.91 371.65 T 4 FF (\);) 365.57 371.65 T (has the follo) 180.0 393.65 T (wing \(non-replying\) service routine:) 229.19 393.65 T ([1]) 195.34 411.649 T (k) 216.0 411.649 T (ern_return_t ) 220.9 411.649 T 0 FF (asetbalance) 272.83 411.649 T 4 FF ( \(mach_port_t ) 322.27 411.649 T 5 FF (server) 381.15 411.649 T 4 FF (, int ) 405.74 411.649 T 5 FF (balance) 423.8 411.649 T 4 FF (\)) 455.46 411.649 T ([2]) 195.34 423.649 T ({) 216.0 423.649 T ([3]) 195.34 435.649 T 5 FF (server_balance ) 252.0 435.649 T 4 FF (= ) 316.15 435.649 T 5 FF (balance) 324.29 435.649 T 4 FF (;) 355.95 435.649 T ([4]) 195.34 447.649 T (return KERN_SUCCESS;) 252.0 447.649 T ([5]) 195.34 459.649 T (}) 216.0 459.649 T 180 481.64917 M 0.055695 0 32 (Notice that both the client and serv) widthshow 320.164246 481.64917 M 0.055695 0 32 (er routines appear the same as their synchronous coun-) widthshow 180 493.649109 M 0.873291 0 32 (terparts. The client call still returns a result; this is the success of the message queuing.) widthshow 180 505.649048 M 0.575821 0 32 (The serv) widthshow 215.13591 505.649048 M 0.575821 0 32 (er routine also returns a result v) widthshow 344.980988 505.649048 M 0.575821 0 32 (alue to indicate to the serv) widthshow 452.970184 505.649048 M 0.575821 0 32 (er loop that it has ac-) widthshow (cepted the request.) 180.0 517.649 T 180 541.648926 M 0.328522 0 32 (In typical asynchronous use, the serv) widthshow 329.242706 541.648926 M 0.328522 0 32 (er w) widthshow 346.961304 541.648926 M 0.328522 0 32 (ould e) widthshow 371.759949 541.648926 M 0.328522 0 32 (v) widthshow 376.610046 541.648926 M 0.328522 0 32 (entually return a reply to the client. This) widthshow 180 553.648865 M 0.203247 0 32 (reply w) widthshow 210.373306 553.648865 M 0.203247 0 32 (ould also ha) widthshow 258.909912 553.648865 M 0.203247 0 32 (v) widthshow 263.76001 553.648865 M 0.203247 0 32 (e to be declared as a ) widthshow 5 FF 348.27948 553.648865 M 0.203247 0 32 (simpler) widthshow 377.829742 553.648865 M 0.203247 0 32 (outine) widthshow 4 FF 402.829742 553.648865 M 0.203247 0 32 ( to MIG. F) widthshow 446.06958 553.648865 M 0.203247 0 32 (or e) widthshow 461.392883 553.648865 M 0.203247 0 32 (xample, gi) widthshow 503.566284 553.648865 M 0.203247 0 32 (v) widthshow 508.416382 553.648865 M 0.203247 0 32 (en what) widthshow (appears to a client as a synchronous request:) 180.0 565.649 T ([1]) 195.34 583.649 T (subsystem ) 216.0 583.649 T 0 FF (client_example) 260.17 583.649 T 4 FF (362700;) 396.0 583.649 T ([2]) 195.34 595.649 T (routine ) 216.0 595.649 T 0 FF (getbalance) 246.83 595.649 T 4 FF ([3]) 195.34 607.649 T (\() 216.0 607.649 T ([4]) 195.34 619.649 T 5 FF (server) 252.0 619.649 T 4 FF (: mach_port_t;) 396.0 619.649 T ([5]) 195.34 631.648 T (out ) 252.0 631.648 T 5 FF (balance) 267.28 631.648 T 4 FF (: int) 396.0 631.648 T ([6]) 195.34 643.648 T (\)) 216.0 643.648 T (with the corresponding client call:) 180.0 665.648 T ([1]) 195.34 683.648 T 5 FF (r) 216.0 683.648 T (esult) 219.52 683.648 T 4 FF ( = ) 238.41 683.648 T 0 FF (getbalance) 249.05 683.648 T 4 FF ( \() 294.6 683.648 T 5 FF (server) 300.43 683.648 T 4 FF (, &) 325.02 683.648 T 5 FF (balance) 337.8 683.648 T 4 FF (\);) 369.46 683.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 37 37 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (33 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Basic Request Pr) 72.0 55.824 T (ocessing) 137.331 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (The serv) 72.0 114.667 T (er could process this asynchronously with the follo) 106.56 114.667 T (wing pair of MIG de\336nitions:) 309.9 114.667 T ([1]) 87.34 132.667 T (subsystem ) 108.0 132.667 T 1 FF (ser) 152.17 132.667 T (v) 164.84 132.667 T (er_example) 169.74 132.667 T 3 FF (362700;) 288.0 132.667 T ([2]) 87.34 144.667 T (simpleroutine ) 108.0 144.667 T 1 FF (getbalance) 165.5 144.667 T 3 FF ([3]) 87.34 156.666 T (\() 108.0 156.666 T ([4]) 87.34 168.666 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (server) 144.0 168.666 T 3 FF (: mach_port_t;) 288.0 168.666 T ([5]) 87.34 180.666 T (sreplyport ) 144.0 180.666 T 4 FF (r) 187.05 180.666 T (eply_port) 190.57 180.666 T 3 FF (: mach_port_mak) 288.0 180.666 T (e_send_once_t;) 358.17 180.666 T ([6]) 87.34 192.666 T (out ) 144.0 192.666 T 4 FF (balance) 159.28 192.666 T 3 FF (: int) 288.0 192.666 T ([7]) 87.34 204.666 T (\)) 108.0 204.666 T 72 226.666138 M 0.411179 0 32 (Notice that the serv) widthshow 151.123627 226.666138 M 0.411179 0 32 (er\325) widthshow 161.673935 226.666138 M 0.411179 0 32 (s vie) widthshow 180.445251 226.666138 M 0.411179 0 32 (w of this interf) widthshow 240.738846 226.666138 M 0.411179 0 32 (ace has the same message ID b) widthshow 366.856049 226.666138 M 0.411179 0 32 (ut dif) widthshow 388.407349 226.666138 M 0.411179 0 32 (fers in that) widthshow 72 238.666077 M 1.969101 0 32 (it is declared as a ) widthshow 4 FF 153.215515 238.666077 M 1.969101 0 32 (simpler) widthshow 182.765762 238.666077 M 1.969101 0 32 (outine) widthshow 3 FF 207.765762 238.666077 M 1.969101 0 32 (. An important addition is the ) widthshow 4 FF 339.860352 238.666077 M 1.969101 0 32 (sr) widthshow 347.270569 238.666077 M 1.969101 0 32 (eplyport) widthshow 3 FF 380.600586 238.666077 M 1.969101 0 32 ( declaration.) widthshow 72 250.666016 M 0.707275 0 32 (Since a reply must be generated e) widthshow 210.503754 250.666016 M 0.707275 0 32 (xplicitly by the serv) widthshow 292.195679 250.666016 M 0.707275 0 32 (er) widthshow 299.565887 250.666016 M 0.707275 0 32 (, the serv) widthshow 337.21051 250.666016 M 0.707275 0 32 (er must kno) widthshow 385.595215 250.666016 M 0.707275 0 32 (w the reply) widthshow (port itself, instead of this being kno) 72.0 262.666 T (wn merely by the serv) 213.69 262.666 T (er loop routine.) 302.41 262.666 T 72 286.665894 M 0.598175 0 32 (Since the serv) widthshow 129.146439 286.665894 M 0.598175 0 32 (er is so declared, the MIG stub does not e) widthshow 300.460114 286.665894 M 0.598175 0 32 (xpect a reply) widthshow 352.65683 286.665894 M 0.598175 0 32 (. Not only must the) widthshow 72 298.665833 M 0.388565 0 32 (serv) widthshow 88.510086 298.665833 M 0.388565 0 32 (er generate a reply) widthshow 163.156158 298.665833 M 0.388565 0 32 (, b) widthshow 173.344833 298.665833 M 0.388565 0 32 (ut the reply message must ha) widthshow 290.907776 298.665833 M 0.388565 0 32 (v) widthshow 295.757874 298.665833 M 0.388565 0 32 (e its o) widthshow 320.17511 298.665833 M 0.388565 0 32 (wn MIG de\336nition. A reply) widthshow (message consists of:) 72.0 310.666 T 5 (Times-Roman) 7 1 mymakefontmetric 5 FF 72.0 328.666 T 3 FF (The client\325) 85.536 328.666 T (s reply port.) 128.586 328.666 T 5 FF 72.0 343.666 T 3 FF (The client\325) 85.536 343.666 T (s result code.) 128.586 343.666 T 5 FF 72.0 358.666 T 3 FF (An) 85.536 358.666 T (y return v) 97.606 358.666 T (alues.) 136.236 358.666 T ([1]) 87.34 372.666 T (type ) 108.0 372.666 T 4 FF (r) 127.72 372.666 T (eply_port_t) 131.24 372.666 T 3 FF ( = MA) 177.35 372.666 T (CH_MSG_TYPE_MO) 203.7 372.666 T (VE_SEND_ONCE ctype: ) 294.871 372.666 T (mach_port_t;) 162.0 382.665 T ([2]) 87.34 394.665 T (msgoption MA) 108.0 394.665 T (CH_SEND_TIMEOUT) 168.44 394.665 T (;) 262.881 394.665 T ([3]) 87.34 406.665 T (subsystem ) 108.0 406.665 T 1 FF (ser) 152.17 406.665 T (v) 164.84 406.665 T (er_example_r) 169.74 406.665 T (eply) 228.43 406.665 T 3 FF (363700;) 288.0 406.665 T ([4]) 87.34 418.665 T (simpleroutine ) 108.0 418.665 T 1 FF (getbalance_r) 165.5 418.665 T (eply) 220.31 418.665 T 3 FF ([5]) 87.34 430.665 T (\() 108.0 430.665 T ([6]) 87.34 442.665 T 4 FF (r) 144.0 442.665 T (eply_port) 147.52 442.665 T 3 FF (: ) 288.0 442.665 T 4 FF (r) 293.28 442.665 T (eply_port_t) 296.8 442.665 T 3 FF (;) 342.91 442.665 T ([7]) 87.34 454.665 T (in ) 144.0 454.665 T 4 FF (r) 154.28 454.665 T (esult) 157.8 454.665 T 3 FF (: k) 288.0 454.665 T (ern_return_t;) 298.18 454.665 T ([8]) 87.34 466.665 T (in ) 144.0 466.665 T 4 FF (balance) 154.28 466.665 T 3 FF (: int) 288.0 466.665 T ([9]) 87.34 478.665 T (\)) 108.0 478.665 T 72 500.664917 M 0.43811 0 32 (Note that the reply message ID is 100 more than the request message ID. Note that what) widthshow 72 512.664856 M 0.194626 0 32 (were output v) widthshow 127.129395 512.664856 M 0.194626 0 32 (alues in the ) widthshow 4 FF 175.763275 512.664856 M 0.194626 0 32 (r) widthshow 179.203522 512.664856 M 0.194626 0 32 (outine) widthshow 3 FF 204.203522 512.664856 M 0.194626 0 32 ( are no) widthshow 231.552917 512.664856 M 0.194626 0 32 (w input v) widthshow 269.47229 512.664856 M 0.194626 0 32 (alues to the reply stub) widthshow 357.621033 512.664856 M 0.194626 0 32 (. This pair of mes-) widthshow (sages could ha) 72.0 524.665 T (v) 130.12 524.665 T (e the follo) 134.97 524.665 T (wing \(ef) 175.27 524.665 T (fecti) 208.62 524.665 T (v) 226.141 524.665 T (ely synchronous\) routine:) 230.991 524.665 T ([1]) 87.34 542.665 T (k) 108.0 542.665 T (ern_return_t ) 112.9 542.665 T 1 FF (getbalance) 164.83 542.665 T 3 FF ( \(mach_port_t ) 210.38 542.665 T 4 FF (server) 269.26 542.665 T 3 FF (, mach_port_t ) 293.85 542.665 T 4 FF (r) 351.9 542.665 T (eply_port) 355.421 542.665 T 3 FF (, int ) 393.751 542.665 T (*) 162.0 552.665 T 4 FF (balance) 167.0 552.665 T 3 FF (\)) 198.66 552.665 T ([2]) 87.34 564.665 T ({) 108.0 564.665 T ([3]) 87.34 576.665 T 4 FF (r) 144.0 576.665 T (esult) 147.52 576.665 T 3 FF ( = ) 166.41 576.665 T 1 FF (getbalance_r) 177.05 576.665 T (eply) 231.86 576.665 T 3 FF ( \() 249.64 576.665 T 4 FF (r) 255.47 576.665 T (eply_port) 258.991 576.665 T 3 FF (, KERN_SUCCESS, ) 297.321 576.665 T 4 FF (server_balance) 198.0 586.664 T 3 FF (\);) 259.65 586.664 T ([4]) 87.34 598.664 T (return KERN_SUCCESS;) 144.0 598.664 T ([5]) 87.34 610.664 T (}) 108.0 610.664 T 72 632.664368 M 0.15686 0 32 (In line [3], the KERN_SUCCESS v) widthshow 215.314438 632.664368 M 0.15686 0 32 (alue is the result code to be returned to the client. The) widthshow 72 644.664368 M 0.582123 0 32 (KERN_SUCCESS v) widthshow 155.402252 644.664368 M 0.582123 0 32 (alue in line [4] indicates to the MIG stub that the client request w) widthshow 423.669922 644.664368 M 0.582123 0 32 (as) widthshow (accepted.) 72.0 656.664 T 72 680.664246 M 0.673935 0 32 (The ) widthshow 4 FF 90.723938 680.664246 M 0.673935 0 32 (msgoption) widthshow 3 FF 132.393936 680.664246 M 0.673935 0 32 ( of MA) widthshow 162.782028 680.664246 M 0.673935 0 32 (CH_SEND_TIMEOUT is supplied to pro) widthshow 331.987854 680.664246 M 0.673935 0 32 (vide protection ag) widthshow 405.495758 680.664246 M 0.673935 0 32 (ainst a) widthshow 72 692.664185 M 0.610611 0 32 (full reply port. This will cause the send to time-out \(after zero time since the MIG stubs) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 38 38 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (34 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Basic IPC\320Based Ser) 180.0 55.824 T (v) 260.91 55.824 T (ers) 265.32 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 0.800659 0 32 (pro) widthshow 193.180084 112.650635 M 0.800659 0 32 (vide a zero v) widthshow 246.702209 112.650635 M 0.800659 0 32 (alue for the time-out ar) widthshow 341.924957 112.650635 M 0.800659 0 32 (gument to ) widthshow 0 FF 386.306274 112.650635 M 0.800659 0 32 (mach_msg) widthshow 3 FF 431.856262 112.650635 M 0.800659 0 32 (\) if the message cannot be) widthshow (sent.) 180.0 124.651 T 180 148.650513 M 0.293533 0 32 (In some cases, a serv) widthshow 265.164246 148.650513 M 0.293533 0 32 (er may pro) widthshow 308.921387 148.650513 M 0.293533 0 32 (vide a synchronous interf) widthshow 411.072052 148.650513 M 0.293533 0 32 (ace for which some requests for) widthshow 180 160.650452 M 0.671646 0 32 (service are indeed handled synchronously b) widthshow 357.838379 160.650452 M 0.671646 0 32 (ut for which some requests must be deferred) widthshow 180 172.650391 M 1.457214 0 32 (\(perhaps processed out of order\) and therefore processed asynchronously) widthshow 483.138123 172.650391 M 1.457214 0 32 (. In this case,) widthshow 180 184.65033 M 0.235291 0 32 (the client w) widthshow 227.03064 184.65033 M 0.235291 0 32 (ould still see the synchronous \() widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 352.367096 184.65033 M 0.235291 0 32 (r) widthshow 355.807343 184.65033 M 0.235291 0 32 (outine) widthshow 3 FF 380.807343 184.65033 M 0.235291 0 32 (\) MIG de\336nition. The serv) widthshow 487.418579 184.65033 M 0.235291 0 32 (er also w) widthshow 523.889221 184.65033 M 0.235291 0 32 (ants) widthshow 180 196.650269 M 0.048523 0 32 (to use this de\336nition, since it w) widthshow 304.921204 196.650269 M 0.048523 0 32 (ants to use synchronous processing when possible. A serv-) widthshow 180 208.650208 M 0.829315 0 32 (er routine can ha) widthshow 249.208069 208.650208 M 0.829315 0 32 (v) widthshow 254.058151 208.650208 M 0.829315 0 32 (e it both w) widthshow 298.946167 208.650208 M 0.829315 0 32 (ays, that is, to be able to synchronously or asynchronously) widthshow 180 220.650146 M 0.33931 0 32 (handle dif) widthshow 220.359451 220.650146 M 0.33931 0 32 (ferent requests as the) widthshow 305.367493 220.650146 M 0.33931 0 32 (y come in. T) widthshow 356.135864 220.650146 M 0.33931 0 32 (o do this, the serv) widthshow 428.173157 220.650146 M 0.33931 0 32 (er declares its interf) widthshow 508.231171 220.650146 M 0.33931 0 32 (ace as a) widthshow 4 FF 180 232.650085 M 0.121918 0 32 (r) widthshow 183.440247 232.650085 M 0.121918 0 32 (outine) widthshow 3 FF 208.440247 232.650085 M 0.121918 0 32 (. It also needs to declare a ) widthshow 4 FF 315.373688 232.650085 M 0.121918 0 32 (simpler) widthshow 344.92395 232.650085 M 0.121918 0 32 (outine) widthshow 3 FF 369.92395 232.650085 M 0.121918 0 32 ( reply message as abo) widthshow 457.4617 232.650085 M 0.121918 0 32 (v) widthshow 462.311768 232.650085 M 0.121918 0 32 (e to handle the cas-) widthshow 180 244.650024 M 0.290634 0 32 (es when it will defer processing and send its o) widthshow 366.505859 244.650024 M 0.290634 0 32 (wn response. When the serv) widthshow 479.988495 244.650024 M 0.290634 0 32 (er routine does) widthshow 180 256.649963 M 1.178925 0 32 (handle a request synchronously) widthshow 308.697144 256.649963 M 1.178925 0 32 (, it returns KERN_SUCCESS. When the routine wishes) widthshow 180 268.649902 M 0.336304 0 32 (to defer processing, it returns MI) widthshow 313.321533 268.649902 M 0.336304 0 32 (G_NO_REPL) widthshow 368.432068 268.649902 M 0.336304 0 32 (Y) widthshow 374.362793 268.649902 M 0.336304 0 32 (. This tells the serv) widthshow 451.388092 268.649902 M 0.336304 0 32 (er loop not to return a) widthshow (reply) 180.0 280.65 T (, b) 199.9 280.65 T (ut otherwise indicates the serv) 209.7 280.65 T (er routine did accept the client\325) 330.641 280.65 T (s request.) 454.781 280.65 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Consume-On-Success) 180.0 311.983 T 3 FF 180 328.649719 M 0.493317 0 32 (The serv) widthshow 215.053406 328.649719 M 0.493317 0 32 (er loop and message de-multiple) widthshow 346.85675 328.649719 M 0.493317 0 32 (xing routines handle the details of message for-) widthshow 180 340.649658 M 1.747238 0 32 (mats and transmittal. The in-coming request and out-going reply message headers, as) widthshow 180 352.649597 M 0.594131 0 32 (well as the in-line data and descriptors, are considered the property of ) widthshow 0 FF 468.449615 352.649597 M 0.594131 0 32 (mach_msg_ser) widthshow 531.669678 352.649597 M 0.594131 0 32 (v-) widthshow 180 364.649536 M 0.786621 0 32 (er) widthshow 3 FF 188.330307 364.649536 M 0.786621 0 32 (. The serv) widthshow 229.463638 364.649536 M 0.786621 0 32 (er routine allocates space for the messages. It rec) widthshow 431.376709 364.649536 M 0.786621 0 32 (ycles these spaces as it re-) widthshow 180 376.649475 M 2.85762 0 32 (cei) widthshow 191.410141 376.649475 M 2.85762 0 32 (v) widthshow 196.260223 376.649475 M 2.85762 0 32 (es additional messages. F) widthshow 306.34317 376.649475 M 2.85762 0 32 (or ) widthshow 4 FF 320.030792 376.649475 M 2.85762 0 32 (in) widthshow 3 FF 327.810791 376.649475 M 2.85762 0 32 ( ar) widthshow 340.758514 376.649475 M 2.85762 0 32 (guments to the service function, this is not a) widthshow 180 388.649414 M 0.374603 0 32 (problem; all of these v) widthshow 271.238556 388.649414 M 0.374603 0 32 (alues are passed by v) widthshow 356.907104 388.649414 M 0.374603 0 32 (alue. F) widthshow 384.351807 388.649414 M 0.374603 0 32 (or ) widthshow 4 FF 395.556396 388.649414 M 0.374603 0 32 (out) widthshow 3 FF 408.336426 388.649414 M 0.374603 0 32 ( ar) widthshow 418.801117 388.649414 M 0.374603 0 32 (guments, which are passed by) widthshow 180 400.649353 M 0.990753 0 32 (pointer reference \(according to C requirements\), this can be a potential source of error;) widthshow 180 412.649292 M 0.692093 0 32 (the space to which these pointers refer will be rec) widthshow 384.078949 412.649292 M 0.692093 0 32 (ycled when the service routine returns) widthshow (so it must not attempt to hold these pointers once it returns.) 180.0 424.649 T 180 448.64917 M 1.140747 0 32 (Data not contained in the message body \(out-of-line, declared as pointer types \(\322^\323\) in) widthshow 180 460.649109 M 1.009323 0 32 (MIG\) or port rights \(remember that the v) widthshow 350.395416 460.649109 M 1.009323 0 32 (alue in the message is a port name, the actual) widthshow 180 472.649048 M 0.611496 0 32 (right is k) widthshow 216.683044 472.649048 M 0.611496 0 32 (ernel protected and not actually in the message\) need special processing. These) widthshow 180 484.648987 M 0.162277 0 32 (resources \(port rights and out-of-line memory\) must be counted in some w) widthshow 479.695129 484.648987 M 0.162277 0 32 (ay and de-allo-) widthshow 180 496.648926 M 0.837479 0 32 (cated when no longer needed. The responsibility for dealing with these resources v) widthshow 521.119934 496.648926 M 0.837479 0 32 (aries) widthshow (with circumstances.) 180.0 508.649 T 180 532.648804 M 0.361511 0 32 (The basic rule is referred to as ) widthshow 4 FF 306.100586 532.648804 M 0.361511 0 32 (consume-on-success) widthshow 3 FF 387.740601 532.648804 M 0.361511 0 32 (. An) widthshow 405.172211 532.648804 M 0.361511 0 32 (y resources present in the request) widthshow 180 544.648743 M 0.578537 0 32 (message are the responsibility of the service function, if it is successful in responding to) widthshow (the request. Success is de\336ned in tw) 180.0 556.649 T (o w) 324.05 556.649 T (ays:) 338.67 556.649 T 6 (Times-Roman) 7 1 mymakefontmetric 6 FF 180.0 574.649 T 3 FF 193.535995 574.648621 M 0.649414 0 32 (Returning KERN_SUCCESS. This says that the user\325) widthshow 412.162781 574.648621 M 0.649414 0 32 (s request w) widthshow 458.351685 574.648621 M 0.649414 0 32 (as processed and all) widthshow (in-coming resources are recorded or de-allocated.) 193.536 586.649 T 6 FF 180.0 601.649 T 3 FF 193.535995 601.648499 M 0.649292 0 32 (Returning MIG_NO_REPL) widthshow 304.015839 601.648499 M 0.649292 0 32 (Y) widthshow 309.946533 601.648499 M 0.649292 0 32 (. This says that the user\325) widthshow 409.853333 601.648499 M 0.649292 0 32 (s request has been accepted and) widthshow (all in-coming resources are recorded by the serv) 193.536 613.648 T (er routine.) 385.826 613.648 T 180 637.648376 M 0.691223 0 32 (If the serv) widthshow 221.772537 637.648376 M 0.691223 0 32 (er routine returns an) widthshow 304.506287 637.648376 M 0.691223 0 32 (y other v) widthshow 341.188904 637.648376 M 0.691223 0 32 (alue, it is assumed that the serv) widthshow 469.896301 637.648376 M 0.691223 0 32 (er routine has re-) widthshow 180 649.648315 M 1.003296 0 32 (jected the request. As such, ) widthshow 0 FF 296.936493 649.648315 M 1.003296 0 32 (mach_msg_ser) widthshow 360.156555 649.648315 M 1.003296 0 32 (v) widthshow 365.05661 649.648315 M 1.003296 0 32 (er) widthshow 3 FF 373.936615 649.648315 M 1.003296 0 32 ( will destro) widthshow 420.843262 649.648315 M 1.003296 0 32 (y all resources present in the) widthshow 180 661.648254 M 1.01532 0 32 (in-coming message. This beha) widthshow 304.496094 661.648254 M 1.01532 0 32 (vior occurs whether the serv) widthshow 421.707458 661.648254 M 1.01532 0 32 (er routine w) widthshow 471.95816 661.648254 M 1.01532 0 32 (as a ) widthshow 4 FF 491.758789 661.648254 M 1.01532 0 32 (r) widthshow 495.199036 661.648254 M 1.01532 0 32 (outine) widthshow 3 FF 520.199036 661.648254 M 1.01532 0 32 ( or a) widthshow 4 FF 180 673.648193 M 1.122925 0 32 (simpler) widthshow 209.550247 673.648193 M 1.122925 0 32 (outine) widthshow 3 FF 234.550247 673.648193 M 1.122925 0 32 (. Therefore, the return code from asynchronous serv) widthshow 450.250854 673.648193 M 1.122925 0 32 (er functions is impor-) widthshow (tant.) 180.0 685.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 39 39 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (35 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Basic Request Pr) 72.0 55.824 T (ocessing) 137.331 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (F) 72.0 114.667 T (or e) 77.41 114.667 T (xample:) 92.53 114.667 T ([1]) 87.34 132.667 T (type ) 108.0 132.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (memory_t) 127.72 132.667 T 3 FF ( = ^array [] of MA) 167.71 132.667 T (CH_MSG_TYPE_INT ctype: vm_address_t;) 241.78 132.667 T ([2]) 87.34 144.667 T (routine ) 108.0 144.667 T 1 FF (setv) 138.83 144.667 T (alues) 155.39 144.667 T 3 FF ([3]) 87.34 156.666 T (\() 108.0 156.666 T ([4]) 87.34 168.666 T 4 FF (server) 144.0 168.666 T 3 FF (: mach_port_t;) 288.0 168.666 T ([5]) 87.34 180.666 T (in ) 144.0 180.666 T 4 FF (values) 154.28 180.666 T 3 FF (: ) 288.0 180.666 T 4 FF (memory_t) 293.28 180.666 T 3 FF ([6]) 87.34 192.666 T (\)) 108.0 192.666 T (with the corresponding client call:) 72.0 214.666 T ([1]) 87.34 232.666 T 4 FF (addr) 108.0 232.666 T (ess) 126.52 232.666 T 3 FF ( = 0;) 138.74 232.666 T ([2]) 87.34 244.666 T (\(v) 108.0 244.666 T (oid\) ) 116.13 244.666 T 1 FF (vm_allocate) 134.74 244.666 T 3 FF ( \() 185.84 244.666 T 1 FF (mach_task_self) 191.67 244.666 T 3 FF ( \(\), &) 257.22 244.666 T 4 FF (addr) 279.16 244.666 T (ess) 297.68 244.666 T 3 FF (, sizeof \(int\) * ) 309.9 244.666 T 4 FF (size) 368.5 244.666 T 3 FF (, TR) 383.5 244.666 T (UE\);) 400.881 244.666 T ([3]) 87.34 256.666 T 108.0 256.666 T (alues...) 136.65 256.666 T ([4]) 87.34 268.666 T 4 FF (r) 108.0 268.666 T (esult) 111.52 268.666 T 3 FF ( = ) 130.41 268.666 T 1 FF (setv) 141.05 268.666 T (alues) 157.61 268.666 T 3 FF ( \() 179.28 268.666 T 4 FF (server) 185.11 268.666 T 3 FF (, ) 209.7 268.666 T 4 FF (addr) 214.7 268.666 T (ess) 233.221 268.666 T 3 FF (, ) 245.441 268.666 T 4 FF (size) 250.441 268.666 T 3 FF (\);) 265.441 268.666 T ([5]) 87.34 280.666 T 1 FF (vm_deallocate) 108.0 280.666 T 3 FF ( \() 169.1 280.666 T 1 FF (mach_task_self) 174.93 280.666 T 3 FF ( \(\), ) 240.48 280.666 T 4 FF (addr) 254.64 280.666 T (ess) 273.16 280.666 T 3 FF (, sizeof \(int\) * ) 285.38 280.666 T 4 FF (size) 343.98 280.666 T 3 FF (\);) 358.98 280.666 T 72 302.665833 M 0.68576 0 32 (\(Of course, the ) widthshow 4 FF 136.257294 302.665833 M 0.68576 0 32 (values) widthshow 3 FF 161.807297 302.665833 M 0.68576 0 32 ( parameter could ha) widthshow 242.804703 302.665833 M 0.68576 0 32 (v) widthshow 247.654785 302.665833 M 0.68576 0 32 (e the de-allocate \337ag set.\) The corresponding) widthshow (serv) 72.0 314.666 T (er routine w) 88.51 314.666 T (ould be as follo) 136.73 314.666 T (ws:) 198.42 314.666 T ([1]) 87.34 332.666 T (k) 108.0 332.666 T (ern_return_t ) 112.9 332.666 T 1 FF (setv) 164.83 332.666 T (alues) 181.39 332.666 T 3 FF ( \(mach_port_t ) 203.06 332.666 T 4 FF (server) 261.94 332.666 T 3 FF (, vm_address_t ) 286.53 332.666 T 4 FF (addr) 349.58 332.666 T (ess) 368.101 332.666 T 3 FF (, vm_size_t ) 380.321 332.666 T 4 FF (size) 162.0 342.666 T 3 FF (\)) 177.0 342.666 T ([2]) 87.34 354.666 T ({) 108.0 354.666 T ([3]) 87.34 366.666 T (if \() 144.0 366.666 T 4 FF (size) 155.94 366.666 T 3 FF ( > MAX_SIZE\)) 170.94 366.666 T ([4]) 87.34 378.665 T (return SER) 180.0 378.665 T (VICE_T) 223.92 378.665 T (OO_BIG;) 258.181 378.665 T ([5]) 87.34 390.665 T (cop) 144.0 390.665 T (y v) 158.34 390.665 T (alues...) 170.59 390.665 T ([6]) 87.34 402.665 T 1 FF (vm_deallocate) 144.0 402.665 T 3 FF ( \() 205.1 402.665 T 1 FF (mach_task_self) 210.93 402.665 T 3 FF ( \(\), ) 276.48 402.665 T 4 FF (addr) 290.64 402.665 T (ess) 309.16 402.665 T 3 FF (, sizeof \(int\) * ) 321.38 402.665 T 4 FF (size) 379.98 402.665 T 3 FF (\);) 394.98 402.665 T ([7]) 87.34 414.665 T (return KERN_SUCCESS;) 144.0 414.665 T ([8]) 87.34 426.665 T (}) 108.0 426.665 T (Notice that the memory is de-allocated only in the success path.) 72.0 448.665 T (Lik) 72.0 472.665 T (e) 85.79 472.665 T (wise,) 89.98 472.665 T ([1]) 87.34 490.665 T (routine ) 108.0 490.665 T 1 FF (gi) 138.83 490.665 T (v) 146.51 490.665 T (eport) 151.41 490.665 T 3 FF ([2]) 87.34 502.665 T (\() 108.0 502.665 T ([3]) 87.34 514.665 T 4 FF (server) 144.0 514.665 T 3 FF (: mach_port_t;) 288.0 514.665 T ([4]) 87.34 526.665 T (in ) 144.0 526.665 T 4 FF (port) 154.28 526.665 T 3 FF (: mach_port_t = ) 288.0 526.665 T (MA) 198.0 536.665 T (CH_MSG_TYPE_MO) 213.71 536.665 T (VE_RECEIVE) 304.88 536.665 T ([5]) 87.34 548.665 T (\)) 108.0 548.665 T (with the corresponding client call:) 72.0 570.665 T ([1]) 87.34 588.665 T (\(v) 108.0 588.665 T (oid\) ) 116.13 588.665 T 1 FF (mach_port_allocate) 134.74 588.665 T 3 FF ( \() 219.17 588.665 T 1 FF (mach_task_self) 225.0 588.665 T 3 FF ( \(\), ) 290.55 588.665 T (MA) 162.0 598.665 T (CH_POR) 177.71 598.665 T (T_RIGHT_RECEIVE, &) 215.451 598.665 T 4 FF (port) 317.111 598.665 T 3 FF (\);) 333.781 598.665 T ([2]) 87.34 610.664 T 4 FF (r) 108.0 610.664 T (esult) 111.52 610.664 T 3 FF ( = ) 130.41 610.664 T 1 FF (gi) 141.05 610.664 T (v) 148.73 610.664 T (eport) 153.63 610.664 T 3 FF ( \() 176.4 610.664 T 4 FF (server) 182.23 610.664 T 3 FF (, ) 206.821 610.664 T 4 FF (port) 211.821 610.664 T 3 FF (\);) 228.491 610.664 T (The corresponding serv) 72.0 632.664 T (er routine w) 166.27 632.664 T (ould be as follo) 214.49 632.664 T (ws:) 276.18 632.664 T ([1]) 87.34 650.664 T (k) 108.0 650.664 T (ern_return_t ) 112.9 650.664 T 1 FF (gi) 164.83 650.664 T (v) 172.51 650.664 T (eport) 177.41 650.664 T 3 FF ( \(mach_port_t ) 200.18 650.664 T 4 FF (server) 259.06 650.664 T 3 FF (, mach_port_t ) 283.65 650.664 T 4 FF (port) 341.7 650.664 T 3 FF (\)) 358.37 650.664 T ([2]) 87.34 662.664 T ({) 108.0 662.664 T ([3]) 87.34 674.664 T (if \(MA) 144.0 674.664 T (CH_POR) 171.65 674.664 T (T_V) 209.391 674.664 T (ALID \() 226.371 674.664 T 4 FF (port) 256.081 674.664 T 3 FF (\)\)) 272.751 674.664 T ([4]) 87.34 686.664 T 1 FF (mach_port_mod_r) 180.0 686.664 T (efs) 259.81 686.664 T 3 FF ( \() 271.47 686.664 T 1 FF (mach_task_self) 277.3 686.664 T 3 FF ( \(\), ) 342.85 686.664 T 4 FF (port) 357.01 686.664 T 3 FF (, ) 373.68 686.664 T (MA) 234.0 696.664 T (CH_POR) 249.71 696.664 T (T_RIGHT_RECEIVE, -1\);) 287.451 696.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 40 40 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (36 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Basic IPC\320Based Ser) 180.0 55.824 T (v) 260.91 55.824 T (ers) 265.32 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([5]) 195.34 112.651 T (return KERN_SUCCESS;) 252.0 112.651 T ([6]) 195.34 124.651 T (}) 216.0 124.651 T 180 146.650513 M 0.809204 0 32 (What about resources in reply messages? Since the serv) widthshow 409.60376 146.650513 M 0.809204 0 32 (er routine loses control after re-) widthshow 180 158.650452 M 0.233795 0 32 (turning to the MIG stub, it can do nothing. Therefore, ) widthshow 0 FF 399.257965 158.650452 M 0.233795 0 32 (mach_msg_ser) widthshow 462.478027 158.650452 M 0.233795 0 32 (v) widthshow 467.378082 158.650452 M 0.233795 0 32 (er) widthshow 3 FF 476.258087 158.650452 M 0.233795 0 32 ( has the respon-) widthshow 180 170.650391 M 1.871826 0 32 (sibility) widthshow 207.14035 170.650391 M 1.871826 0 32 (. The only w) widthshow 263.205872 170.650391 M 1.871826 0 32 (ay to dispose of the resources in the reply message is to use the) widthshow 180 182.65033 M 1.026642 0 32 (appropriate port types that cause mo) widthshow 330.233307 182.65033 M 1.026642 0 32 (v) widthshow 335.083374 182.65033 M 1.026642 0 32 (ement of the rights, or the appropriate de-allocate) widthshow 180 194.650269 M 0.485306 0 32 widthshow 180 206.650208 M 0.331757 0 32 (sage cannot be deli) widthshow 257.115417 206.650208 M 0.331757 0 32 (v) widthshow 261.965515 206.650208 M 0.331757 0 32 (ered, ) widthshow 0 FF 284.507263 206.650208 M 0.331757 0 32 (mach_msg_ser) widthshow 347.727325 206.650208 M 0.331757 0 32 (v) widthshow 352.62738 206.650208 M 0.331757 0 32 (er) widthshow 3 FF 361.507385 206.650208 M 0.331757 0 32 ( tak) widthshow 376.459198 206.650208 M 0.331757 0 32 (es the responsibility of destro) widthshow 495.456299 206.650208 M 0.331757 0 32 (ying all re-) widthshow (sources that w) 180.0 218.65 T (ould ha) 237.11 218.65 T (v) 266.63 218.65 T (e been destro) 271.48 218.65 T (yed \(or mo) 324.14 218.65 T (v) 367.87 218.65 T (ed\) if the message had been sent.) 372.72 218.65 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (P) 180.0 249.983 T (ort Refer) 187.092 249.983 T (ence Maintenance) 233.844 249.983 T 3 FF 180 266.650024 M 2.104111 0 32 (As mentioned abo) widthshow 256.828308 266.650024 M 2.104111 0 32 (v) widthshow 261.678406 266.650024 M 2.104111 0 32 (e, serv) widthshow 289.732605 266.650024 M 2.104111 0 32 (er routines are responsible for the maintenance of the port) widthshow 180 278.649963 M 1.216583 0 32 (rights the) widthshow 218.566666 278.649963 M 1.216583 0 32 (y recei) widthshow 246.463394 278.649963 M 1.216583 0 32 (v) widthshow 251.313477 278.649963 M 1.216583 0 32 (e in messages. Also, the interf) widthshow 377.556458 278.649963 M 1.216583 0 32 (ace de\336nitions must specify the correct) widthshow (disposition of port rights in outgoing \(reply\) messages.) 180.0 290.65 T 180 314.649841 M 1.131241 0 32 (The request port in the incoming message is not a concern. This port right is a special) widthshow 180 326.64978 M 0.499954 0 32 (case in message transmission; the act of recei) widthshow 364.599854 326.64978 M 0.499954 0 32 (ving the message does not cause the recep-) widthshow 180 338.649719 M 0.731232 0 32 (tion of the send right \(or no) widthshow 294.127533 338.649719 M 0.731232 0 32 (w dead send-once right\) used to send the message. The port) widthshow 180 350.649658 M 1.4384 0 32 (name in the recei) widthshow 252.65535 350.649658 M 1.4384 0 32 (v) widthshow 257.505432 350.649658 M 1.4384 0 32 (ed message header names the recei) widthshow 404.117615 350.649658 M 1.4384 0 32 (v) widthshow 408.967682 350.649658 M 1.4384 0 32 (e right o) widthshow 445.024567 350.649658 M 1.4384 0 32 (v) widthshow 449.874634 350.649658 M 1.4384 0 32 (er which the message) widthshow (w) 180.0 362.65 T (as recei) 187.12 362.65 T (v) 217.13 362.65 T (ed; the send right count for this name is unaf) 221.98 362.65 T (fected.) 400.32 362.65 T 180 386.649536 M 0.637665 0 32 (MIG generated stubs produce send-once rights for reply ports. As such, when the serv) widthshow 532.229736 386.649536 M 0.637665 0 32 (er) widthshow 180 398.649475 M 0.581818 0 32 (produces a reply) widthshow 246.604004 398.649475 M 0.581818 0 32 (, this right will v) widthshow 315.081421 398.649475 M 0.581818 0 32 (anish. If a reply is e) widthshow 396.710571 398.649475 M 0.581818 0 32 (xplicitly generated, as in the e) widthshow 519.449768 398.649475 M 0.581818 0 32 (xam-) widthshow 180 410.649414 M 0.32196 0 32 (ple abo) widthshow 209.332047 410.649414 M 0.32196 0 32 (v) widthshow 214.182129 410.649414 M 0.32196 0 32 (e, the reply port \(which appears as the request port for the reply generating stub\)) widthshow 180 422.649353 M 1.213867 0 32 (must specify MA) widthshow 251.467957 422.649353 M 1.213867 0 32 (CH_MSG_TYPE_MO) widthshow 342.638245 422.649353 M 1.213867 0 32 (VE_SEND_ONCE. \(Standard type ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 489.039856 422.649353 M 1.213867 0 32 (mac) widthshow 505.549927 422.649353 M 1.213867 0 32 (h_port_t) widthshow 3 FF (def) 180.0 434.649 T (aults to MA) 192.67 434.649 T (CH_MSG_TYPE_COPY_SEND.\)) 240.05 434.649 T 180 458.649231 M 0.70636 0 32 (The dif) widthshow 209.616501 458.649231 M 0.70636 0 32 widthshow 395.101196 458.649231 M 0.70636 0 32 (v) widthshow 399.951263 458.649231 M 0.70636 0 32 (ed in a message. These port rights) widthshow 180 470.64917 M 0.907059 0 32 (do accumulate in the serv) widthshow 285.678345 470.64917 M 0.907059 0 32 (er) widthshow 292.898621 470.64917 M 0.907059 0 32 (. F) widthshow 304.215759 470.64917 M 0.907059 0 32 (or instance, e) widthshow 358.820038 470.64917 M 0.907059 0 32 (v) widthshow 363.670105 470.64917 M 0.907059 0 32 (ery message from the k) widthshow 460.508423 470.64917 M 0.907059 0 32 (ernel to an e) widthshow 512.229675 470.64917 M 0.907059 0 32 (xternal) widthshow 180 482.649109 M 0.925674 0 32 (memory manager recei) widthshow 273.791504 482.649109 M 0.925674 0 32 (v) widthshow 278.641602 482.649109 M 0.925674 0 32 (es a ne) widthshow 307.453064 482.649109 M 0.925674 0 32 (w send right for the memory cache control port to name) widthshow 180 494.649048 M 0.266373 0 32 (the k) widthshow 199.886429 494.649048 M 0.266373 0 32 (ernel making the request. The serv) widthshow 339.368408 494.649048 M 0.266373 0 32 (er can remo) widthshow 386.951233 494.649048 M 0.266373 0 32 (v) widthshow 391.801331 494.649048 M 0.266373 0 32 (e each user right reference each time) widthshow 180 506.648987 M 0.556595 0 32 (it recei) widthshow 207.796738 506.648987 M 0.556595 0 32 (v) widthshow 212.64682 506.648987 M 0.556595 0 32 (es one, b) widthshow 248.830124 506.648987 M 0.556595 0 32 (ut this can be costly) widthshow 329.846863 506.648987 M 0.556595 0 32 (. Instead, it is typical practice to k) widthshow 468.903076 506.648987 M 0.556595 0 32 (eep a count of all) widthshow (such accumulated rights and to periodically remo) 180.0 518.649 T (v) 377.04 518.649 T (e them en masse.) 381.89 518.649 T 180 560.982178 360 3.024002 CR 0.25 SL 2 SC 540 562.49 M 180 562.49 L S 0 0 612 792 CR 6 (Times-Bold) 14 1 mymakefontmetric 6 FF (Single-Thr) 180.0 556.316 T (eaded Ser) 244.316 556.316 T (v) 302.892 556.316 T (er Example) 309.752 556.316 T 3 FF 180 580.672791 M 0.235245 0 32 (The follo) widthshow 216.925385 580.672791 M 0.235245 0 32 (wing source is a simpli\336ed v) widthshow 332.671692 580.672791 M 0.235245 0 32 (ersion of the core of the ) widthshow 0 FF 431.833191 580.672791 M 0.235245 0 32 (machid) widthshow 3 FF 463.503174 580.672791 M 0.235245 0 32 ( serv) widthshow 482.748505 580.672791 M 0.235245 0 32 (er) widthshow 489.968811 580.672791 M 0.235245 0 32 (. This serv) widthshow 532.22937 580.672791 M 0.235245 0 32 (er) widthshow 180 592.672729 M 2.266342 0 32 (maintains a mapping between port \(send\) rights and MachIDs \(inte) widthshow 468.257202 592.672729 M 2.266342 0 32 (gers\) naming the) widthshow 180 604.672668 M 0.343704 0 32 (ports. The serv) widthshow 240.247498 604.672668 M 0.343704 0 32 (er pro) widthshow 264.04129 604.672668 M 0.343704 0 32 (vides requests to return a send right gi) widthshow 418.677368 604.672668 M 0.343704 0 32 (v) widthshow 423.527466 604.672668 M 0.343704 0 32 (en a MachID or to return the) widthshow 180 616.672607 M 0.466843 0 32 (MachID gi) widthshow 223.816986 616.672607 M 0.466843 0 32 (v) widthshow 228.667068 616.672607 M 0.466843 0 32 (en a send right. All send rights to the same port will ha) widthshow 453.219299 616.672607 M 0.466843 0 32 (v) widthshow 458.069397 616.672607 M 0.466843 0 32 (e the same MachID.) widthshow 180 628.672546 M 0.899307 0 32 (Whene) widthshow 208.070145 628.672546 M 0.899307 0 32 (v) widthshow 212.920227 628.672546 M 0.899307 0 32 (er a ne) widthshow 241.118988 628.672546 M 0.899307 0 32 (w send right is presented to the serv) widthshow 390.854248 628.672546 M 0.899307 0 32 (er \(one it hasn\325) widthshow 453.632263 628.672546 M 0.899307 0 32 (t seen before\), a ne) widthshow 532.779663 628.672546 M 0.899307 0 32 (w) widthshow 180 640.672485 M 0.729401 0 32 (MachID is assigned for it. The pair is added to a pair of hash ta-) widthshow 180 652.672424 M 1.578522 0 32 (bles. This entry will continue to e) widthshow 323.481201 652.672424 M 1.578522 0 32 (xist until the port is destro) widthshow 436.003876 652.672424 M 1.578522 0 32 (yed. The serv) widthshow 493.161011 652.672424 M 1.578522 0 32 (er becomes) widthshow (a) 180.0 664.672 T (w) 184.29 664.672 T (are of this via a dead-name noti\336cation for the port.) 191.41 664.672 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 41 41 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (37 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Single-Thr) 72.0 55.824 T (eaded Ser) 113.346 55.824 T (v) 151.002 55.824 T (er Example) 155.412 55.824 T 0.25 SL 3.86 setmiterlimit 0 SC 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Bold) 12 1 mymakefontmetric 3 FF (T) 72.0 116.0 T (ype De\336nitions) 79.116 116.0 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 72 132.66658 M 1.338379 0 32 (The de\336nition of the serv) widthshow 178.303604 132.66658 M 1.338379 0 32 (er\325) widthshow 188.853912 132.66658 M 1.338379 0 32 (s interf) widthshow 218.142349 132.66658 M 1.338379 0 32 (ace includes a custom C type ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 345.042633 132.66658 M 1.338379 0 32 (mac) widthshow 361.552734 132.66658 M 1.338379 0 32 (h_id_t) widthshow 4 FF 387.112732 132.66658 M 1.338379 0 32 ( which de-) widthshow 72.0 144.667 T (v) 290.88 144.667 T (alent thereof.) 295.63 144.667 T ([1]) 87.34 162.666 T (#ifndef _MA) 108.0 162.666 T (CHID_TYPES_H_) 160.09 162.666 T ([2]) 87.34 174.666 T (#de\336ne _MA) 108.0 174.666 T (CHID_TYPES_H_) 160.65 174.666 T 72 179.99971 360 9 CR 1 G 72 179.99971 360 9 NF 0 G 4 FF (/*) 91.224 186.831 T 3 SL 0 SC 0.6667 G 422.91 184.5 M 422.91 189.75 L 432 184.5 L 422.91 179.25 L F 422.91 184.5 M 108 184.5 L S 0 0 612 792 CR 0 G 4 FF (File: ) 108.0 195.666 T 1 FF (machid_types.h) 128.84 195.666 T (A) 108.0 205.666 T 4 FF (uthor: Richard P) 115.22 205.666 T (. Dra) 180.221 205.666 T (v) 200.011 205.666 T (es) 204.861 205.666 T 72 218.999527 360 9 CR 1 G 72 218.999527 360 9 NF 0 G 4 FF (*/) 90.0 225.826 T 0.6667 G 117.09 223.5 M 117.09 218.25 L 108 223.5 L 117.09 228.75 L F 432 223.5 M 117.09 223.5 L S 0 0 612 792 CR 0 G 4 FF (External de\336nitions for ) 108.0 215.666 T 1 FF (machid) 203.27 215.666 T 4 FF (.) 234.94 215.666 T ([3]) 87.34 236.666 T (typedef unsigned int) 108.0 236.666 T 5 FF (mac) 288.0 236.666 T (h_id_t) 304.51 236.666 T 4 FF (;) 330.07 236.666 T ([4]) 87.34 248.666 T (#endif _MA) 108.0 248.666 T (CHID_TYPES_H_) 156.76 248.666 T 72 270.666016 M 0.29808 0 32 (MIG types. It is good practice to place type de\336nitions in separate MIG \336les from the in-) widthshow (terf) 72.0 282.666 T (ace de\336nitions. Notice the importation of the corresponding C header \336le.) 85.78 282.666 T ([1]) 87.34 300.666 T (#ifndef _MA) 108.0 300.666 T (CHID_TYPES_DEFS_) 160.09 300.666 T ([2]) 87.34 312.666 T (#de\336ne _MA) 108.0 312.666 T (CHID_TYPES_DEFS_) 160.65 312.666 T 72 317.999146 360 9 CR 1 G 72 317.999146 360 9 NF 0 G 4 FF (/*) 91.224 324.83 T 0.6667 G 422.91 322.5 M 422.91 327.75 L 432 322.5 L 422.91 317.25 L F 422.91 322.5 M 108 322.5 L S 0 0 612 792 CR 0 G 4 FF (File: ) 108.0 333.666 T 1 FF (machid_types.defs) 128.84 333.666 T 4 FF (Author: Richard P) 108.0 343.666 T (. Dra) 180.221 343.666 T (v) 200.011 343.666 T (es) 204.861 343.666 T 72 356.998962 360 9 CR 1 G 72 356.998962 360 9 NF 0 G 4 FF (*/) 90.0 363.825 T 0.6667 G 117.09 361.5 M 117.09 356.25 L 108 361.5 L 117.09 366.75 L F 432 361.5 M 117.09 361.5 L S 0 0 612 792 CR 0 G 4 FF (MIG de\336nitions for ) 108.0 353.666 T 1 FF (machid) 188.83 353.666 T 4 FF (.) 220.5 353.666 T ([3]) 87.34 374.666 T (#include ) 108.0 374.666 T ([4]) 87.34 386.666 T (type ) 108.0 386.666 T 5 FF (mac) 127.72 386.666 T (h_id_t) 144.23 386.666 T 4 FF ( = unsigned;) 169.79 386.666 T ([5]) 87.34 398.665 T (import \322) 108.0 398.665 T 1 FF (machid_types) 141.61 398.665 T 4 FF (.h\323;) 200.5 398.665 T ([6]) 87.34 410.665 T (#endif _MA) 108.0 410.665 T (CHID_TYPES_DEFS_) 156.76 410.665 T 3 FF (Interface De\336nitions) 72.0 439.999 T 4 FF 72 456.665314 M 0.966034 0 32 (Notice the use of ) widthshow 5 FF 146.404144 456.665314 M 0.966034 0 32 (userpr) widthshow 172.144348 456.665314 M 0.966034 0 32 (e\336x) widthshow 4 FF 186.024353 456.665314 M 0.966034 0 32 ( and ) widthshow 5 FF 207.396423 456.665314 M 0.966034 0 32 (serverpr) widthshow 240.906631 456.665314 M 0.966034 0 32 (e\336x) widthshow 4 FF 254.786636 456.665314 M 0.966034 0 32 ( declarations. In this w) widthshow 349.37085 456.665314 M 0.966034 0 32 (ay) widthshow 358.161194 456.665314 M 0.966034 0 32 (, client and serv) widthshow 424.22937 456.665314 M 0.966034 0 32 (er) widthshow 72 468.665253 M 0.972626 0 32 (side routines will ha) widthshow 155.547989 468.665253 M 0.972626 0 32 (v) widthshow 160.398071 468.665253 M 0.972626 0 32 (e distinct names. This can be v) widthshow 289.123901 468.665253 M 0.972626 0 32 (ery useful if both client and serv) widthshow 424.229767 468.665253 M 0.972626 0 32 (er) widthshow (functions are bound into the same program, perhaps during testing.) 72.0 480.665 T 72 504.665131 M 0.597076 0 32 (The ) widthshow 1 FF 90.647079 504.665131 M 0.597076 0 32 (r) widthshow 94.907181 504.665131 M 0.597076 0 32 (egister) widthshow 4 FF 123.227188 504.665131 M 0.597076 0 32 ( function returns a MachID gi) widthshow 245.102722 504.665131 M 0.597076 0 32 (v) widthshow 249.952805 504.665131 M 0.597076 0 32 (en a send right. It is named ) widthshow 1 FF 364.672363 504.665131 M 0.597076 0 32 (r) widthshow 368.932434 504.665131 M 0.597076 0 32 (egister) widthshow 4 FF 397.252441 504.665131 M 0.597076 0 32 ( because) widthshow 72 516.665039 M 2.139923 0 32 (it re) widthshow 89.820007 516.665039 M 2.139923 0 32 (gisters the ne) widthshow 146.619995 516.665039 M 2.139923 0 32 (w port right if not pre) widthshow 243.449753 516.665039 M 2.139923 0 32 (viously kno) widthshow 292.289795 516.665039 M 2.139923 0 32 (wn. The MA) widthshow 347.549866 516.665039 M 2.139923 0 32 (CH_MSG_TYPE_P-) widthshow 72 528.665039 M 0.541458 0 32 (OR) widthshow 85.290329 528.665039 M 0.541458 0 32 (T_SEND indicates that the serv) widthshow 213.956253 528.665039 M 0.541458 0 32 (er routine will recei) widthshow 293.920776 528.665039 M 0.541458 0 32 (v) widthshow 298.770874 528.665039 M 0.541458 0 32 (e a send right; whether that right) widthshow (w) 72.0 540.665 T (as copied, mo) 79.12 540.665 T (v) 134.24 540.665 T (ed or made by the client is not kno) 139.09 540.665 T (wn \(or rele) 277.16 540.665 T (v) 320.781 540.665 T (ant\).) 325.531 540.665 T 72 564.664917 M 1.065979 0 32 (The ) widthshow 1 FF 91.115982 564.664917 M 1.065979 0 32 (lookup) widthshow 4 FF 120.575974 564.664917 M 1.065979 0 32 ( function returns a port right gi) widthshow 250.041992 564.664917 M 1.065979 0 32 (v) widthshow 254.892075 564.664917 M 1.065979 0 32 (en a MachID. Notice that the output is de-) widthshow 72 576.664795 M 0.388794 0 32 (clared as MA) widthshow 126.247818 576.664795 M 0.388794 0 32 (CH_MSG_TYPE_MO) widthshow 217.418091 576.664795 M 0.388794 0 32 (VE_SEND, which will remo) widthshow 333.424561 576.664795 M 0.388794 0 32 (v) widthshow 338.274658 576.664795 M 0.388794 0 32 (e a user reference from) widthshow 72 588.664795 M 0.226822 0 32 (the serv) widthshow 103.456909 588.664795 M 0.226822 0 32 (er\325) widthshow 114.007217 588.664795 M 0.226822 0 32 (s send right. This is done to help k) widthshow 253.221848 588.664795 M 0.226822 0 32 (eep do) widthshow 279.578796 588.664795 M 0.226822 0 32 (wn the number of user references that) widthshow (are accumulating in the serv) 72.0 600.665 T (er) 184.6 600.665 T (.) 191.82 600.665 T 72 611.998047 360 9 CR 1 G 72 611.998047 360 9 NF 0 G 4 FF (/*) 91.224 618.829 T 0.6667 G 422.91 616.5 M 422.91 621.75 L 432 616.5 L 422.91 611.25 L F 422.91 616.5 M 108 616.5 L S 0 0 612 792 CR 0 G 4 FF (File: ) 108.0 627.665 T 1 FF (machid.defs) 128.84 627.665 T 4 FF (Author: Richard P) 108.0 637.665 T (. Dra) 180.221 637.665 T (v) 200.011 637.665 T (es) 204.861 637.665 T 72 650.997803 360 9 CR 1 G 72 650.997803 360 9 NF 0 G 4 FF (*/) 90.0 657.824 T 0.6667 G 117.09 655.5 M 117.09 650.25 L 108 655.5 L 117.09 660.75 L F 432 655.5 M 117.09 655.5 L S 0 0 612 792 CR 0 G 4 FF (MIG interf) 108.0 647.665 T (ace for ) 151.5 647.665 T 1 FF (machid) 181.48 647.665 T 4 FF (.) 213.15 647.665 T ([1]) 87.34 668.664 T (subsystem ) 108.0 668.664 T 5 FF (mac) 152.17 668.664 T (hid) 168.68 668.664 T 4 FF ( 4375300;) 181.46 668.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 42 42 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (38 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Basic IPC\320Based Ser) 180.0 55.824 T (v) 260.91 55.824 T (ers) 265.32 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 180 105.984009 360 9 CR 180 105.984009 360 9 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (/*) 199.224 112.815 T 3 SL 0.6667 G 530.91 110.48 M 530.91 115.73 L 540 110.48 L 530.91 105.23 L F 530.91 110.48 M 216 110.48 L S 0 0 612 792 CR 0 G 3 FF 216 121.650635 M 1.81633 0 32 (A simple interf) widthshow 280.082703 121.650635 M 1.81633 0 32 (ace to establish and query mappings between send rights and) widthshow 180 134.983887 360 9 CR 1 G 180 134.983887 360 9 NF 0 G 3 FF (*/) 198.0 141.81 T 0.6667 G 225.09 139.48 M 225.09 134.23 L 216 139.48 L 225.09 144.73 L F 540 139.48 M 225.09 139.48 L S 0 0 612 792 CR 0 G 3 FF (MachIDs.) 216.0 131.651 T ([2]) 195.34 152.651 T (userpre\336x ) 216.0 152.651 T 0 FF (machid_) 258.49 152.651 T 3 FF (;) 295.16 152.651 T ([3]) 195.34 164.65 T (serv) 216.0 164.65 T (erpre\336x ) 232.51 164.65 T 0 FF (do_) 266.11 164.65 T 3 FF (;) 281.67 164.65 T ([4]) 195.34 176.65 T (#include ) 216.0 176.65 T ([5]) 195.34 188.65 T (#include \322) 216.0 188.65 T 0 FF (machid_types) 257.38 188.65 T 3 FF (.defs\323) 316.27 188.65 T ([6]) 195.34 200.65 T (routine ) 216.0 200.65 T 0 FF (r) 246.83 200.65 T (egister) 251.09 200.65 T 3 FF ([7]) 195.34 212.65 T (\() 216.0 212.65 T ([8]) 195.34 224.65 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (server) 252.0 224.65 T 3 FF (: mach_port_t;) 396.0 224.65 T ([9]) 195.34 236.65 T 4 FF (port) 252.0 236.65 T 3 FF (: mach_port_t = ) 396.0 236.65 T (MA) 306.0 246.65 T (CH_MSG_TYPE_POR) 321.71 246.65 T (T_SEND;) 416.121 246.65 T ([10]) 190.34 258.65 T (out ) 252.0 258.65 T 4 FF (name) 267.28 258.65 T 3 FF (: ) 396.0 258.65 T 4 FF (mac) 401.28 258.65 T (h_id_t) 417.79 258.65 T 3 FF ([11]) 190.34 270.65 T (\);) 216.0 270.65 T ([12]) 190.34 282.65 T (routine ) 216.0 282.65 T 0 FF (lookup) 246.83 282.65 T 3 FF ([13]) 190.34 294.65 T (\() 216.0 294.65 T ([14]) 190.34 306.65 T 4 FF (server) 252.0 306.65 T 3 FF (: mach_port_t;) 396.0 306.65 T ([15]) 190.34 318.65 T 4 FF (name) 252.0 318.65 T 3 FF (: ) 396.0 318.65 T 4 FF (mac) 401.28 318.65 T (h_id_t) 417.79 318.65 T 3 FF (;) 443.35 318.65 T ([16]) 190.34 330.65 T (out ) 252.0 330.65 T 4 FF (port) 267.28 330.65 T 3 FF (: mach_port_t = ) 396.0 330.65 T (MA) 306.0 340.65 T (CH_MSG_TYPE_MO) 321.71 340.65 T (VE_SEND) 412.88 340.65 T ([17]) 190.34 352.649 T (\);) 216.0 352.649 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Ser) 180.0 381.983 T (v) 197.208 381.983 T (er Pr) 203.088 381.983 T (ogram De\336nitions) 229.188 381.983 T 3 FF 180 398.649353 M 0.750732 0 32 (The serv) widthshow 215.310822 398.649353 M 0.750732 0 32 (er source itself follo) widthshow 297.573181 398.649353 M 0.750732 0 32 (ws. This basic translation service is deri) widthshow 461.52771 398.649353 M 0.750732 0 32 (v) widthshow 466.377808 398.649353 M 0.750732 0 32 (ed from the Mach) widthshow (3 ) 180.0 410.649 T 0 FF (machid) 187.5 410.649 T 3 FF ( serv) 219.17 410.649 T (er) 238.18 410.649 T (.) 245.4 410.649 T 4 FF 180 434.649231 M 1.70993 0 32 (port_r) widthshow 205.190201 434.649231 M 1.70993 0 32 (ecor) widthshow 222.590408 434.649231 M 1.70993 0 32 (d_t) widthshow 3 FF 235.370407 434.649231 M 1.70993 0 32 ( de\336nes the relationship between a port right and a MachID. Notice the) widthshow 180 446.64917 M 0.701401 0 32 (maintenance of the count of current user references \(send right count\) for the port right.) widthshow 180 458.649109 M 0.735657 0 32 (This e) widthshow 205.30574 458.649109 M 0.735657 0 32 (xample also sho) widthshow 270.967194 458.649109 M 0.735657 0 32 (ws the desired hash function for port names gi) widthshow 461.572601 458.649109 M 0.735657 0 32 (v) widthshow 466.422668 458.649109 M 0.735657 0 32 (en the current im-) widthshow (plementation of Mach IPC.) 180.0 470.649 T 180 481.982361 360 9 CR 1 G 180 481.982361 360 9 NF 0 G 3 FF (/*) 199.224 488.814 T 0.6667 G 530.91 486.48 M 530.91 491.73 L 540 486.48 L 530.91 481.23 L F 530.91 486.48 M 216 486.48 L S 0 0 612 792 CR 0 G 3 FF (File: ) 216.0 497.649 T 0 FF (machid.c) 236.84 497.649 T 3 FF (Author: Richard P) 216.0 507.649 T (. Dra) 288.221 507.649 T (v) 308.011 507.649 T (es) 312.861 507.649 T 180 520.982178 360 9 CR 1 G 180 520.982178 360 9 NF 0 G 3 FF (*/) 198.0 527.808 T 0.6667 G 225.09 525.48 M 225.09 520.23 L 216 525.48 L 225.09 530.73 L F 540 525.48 M 225.09 525.48 L S 0 0 612 792 CR 0 G 3 FF (MachID to name translation serv) 216.0 517.649 T (er) 347.49 517.649 T (.) 354.71 517.649 T ([1]) 195.34 538.649 T (#include ) 216.0 538.649 T ([2]) 195.34 550.649 T (#include ) 216.0 550.649 T ([3]) 195.34 562.649 T (#include ) 216.0 562.649 T ([4]) 195.34 574.649 T (#include ) 306.26 574.649 T ([5]) 195.34 586.649 T (#include ) 304.12 586.649 T ([6]) 195.34 598.649 T (#include \322) 216.0 598.649 T 0 FF (machid_types) 257.38 598.649 T 3 FF (.h\323) 316.27 598.649 T 180 603.981812 360 9 CR 1 G 180 603.981812 360 9 NF 0 G 3 FF (/*) 199.224 610.813 T 0.6667 G 530.91 608.48 M 530.91 613.73 L 540 608.48 L 530.91 603.23 L F 530.91 608.48 M 216 608.48 L S 180 622.98175 360 9 CR 1 G 180 622.98175 360 9 NF 0 G 3 FF (*/) 198.0 629.808 T 0.6667 G 225.09 627.48 M 225.09 622.23 L 216 627.48 L 225.09 632.73 L F 540 627.48 M 225.09 627.48 L S 0 0 612 792 CR 0 G 3 FF (Port\320name records) 216.0 619.648 T ([7]) 195.34 640.648 T (static mach_id_t ) 216.0 640.648 T 4 FF (ne) 284.33 640.648 T (xt_mac) 293.57 640.648 T (hid_name) 322.3 640.648 T 3 FF ( = 1;) 361.74 640.648 T 180 645.981689 360 9 CR 1 G 180 645.981689 360 9 NF 0 G 3 FF (/*) 198.0 652.813 T 0.6667 G 530.91 650.48 M 530.91 655.73 L 540 650.48 L 530.91 645.23 L F 530.91 650.48 M 396 650.48 L S 0 0 612 792 CR 0 G 3 FF 396 661.648315 M 0.45993 0 32 (MachID to be assigned to ne) widthshow 512.849731 661.648315 M 0.45993 0 32 (xt ne) widthshow 532.779785 661.648315 M 0.45993 0 32 (w) widthshow 180 674.981567 360 9 CR 1 G 180 674.981567 360 9 NF 0 G 3 FF (*/) 198.0 681.808 T 0.6667 G 405.09 679.48 M 405.09 674.23 L 396 679.48 L 405.09 684.73 L F 540 679.48 M 405.09 679.48 L S 0 0 612 792 CR 0 G 3 FF (port) 396.0 671.648 T ([8]) 195.34 692.648 T (typedef struct ) 216.0 692.648 T 4 FF (port_r) 273.21 692.648 T (ecor) 298.4 692.648 T (d) 315.8 692.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 43 43 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (39 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Single-Thr) 72.0 55.824 T (eaded Ser) 113.346 55.824 T (v) 151.002 55.824 T (er Example) 155.412 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([9]) 87.34 114.667 T ({) 108.0 114.667 T ([10]) 82.34 126.667 T (struct ) 144.0 126.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (port_r) 168.72 126.667 T (ecor) 193.91 126.667 T (d) 211.31 126.667 T 3 FF (*) 288.0 126.667 T 4 FF (pr_pnne) 293.0 126.667 T (xt) 326.13 126.667 T 3 FF (;) 333.35 126.667 T 72 131.999878 360 9 CR 1 G 72 131.999878 360 9 NF 0 G 3 FF (/*) 90.0 138.831 T 3 SL 0 SC 0.6667 G 422.91 136.5 M 422.91 141.75 L 432 136.5 L 422.91 131.25 L F 422.91 136.5 M 288 136.5 L S 72 150.999817 360 9 CR 1 G 72 150.999817 360 9 NF 0 G 3 FF (*/) 90.0 157.826 T 0.6667 G 297.09 155.5 M 297.09 150.25 L 288 155.5 L 297.09 160.75 L F 432 155.5 M 297.09 155.5 L S 0 0 612 792 CR 0 G 3 FF (link for port) 288.0 147.667 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 336.33 147.667 T 3 FF (name hash table) 346.2 147.667 T ([11]) 82.34 168.666 T (struct ) 144.0 168.666 T 4 FF (port_r) 168.72 168.666 T (ecor) 193.91 168.666 T (d) 211.31 168.666 T 3 FF (*) 288.0 168.666 T 4 FF (pr_npne) 293.0 168.666 T (xt) 326.13 168.666 T 3 FF (;) 333.35 168.666 T 72 173.999756 360 9 CR 1 G 72 173.999756 360 9 NF 0 G 3 FF (/*) 90.0 180.831 T 0.6667 G 422.91 178.5 M 422.91 183.75 L 432 178.5 L 422.91 173.25 L F 422.91 178.5 M 288 178.5 L S 72 192.999695 360 9 CR 1 G 72 192.999695 360 9 NF 0 G 3 FF (*/) 90.0 199.826 T 0.6667 G 297.09 197.5 M 297.09 192.25 L 288 197.5 L 297.09 202.75 L F 432 197.5 M 297.09 197.5 L S 0 0 612 792 CR 0 G 3 FF (link for name) 288.0 189.666 T 5 FF 341.88 189.666 T 3 FF (port hash table) 351.75 189.666 T ([12]) 82.34 210.666 T (mach_port_t) 144.0 210.666 T 4 FF (pr_port) 288.0 210.666 T 3 FF (;) 318.56 210.666 T 72 215.999634 360 9 CR 1 G 72 215.999634 360 9 NF 0 G 3 FF (/*) 90.0 222.831 T 0.6667 G 422.91 220.5 M 422.91 225.75 L 432 220.5 L 422.91 215.25 L F 422.91 220.5 M 288 220.5 L S 72 234.999573 360 9 CR 1 G 72 234.999573 360 9 NF 0 G 3 FF (*/) 90.0 241.826 T 0.6667 G 297.09 239.5 M 297.09 234.25 L 288 239.5 L 297.09 244.75 L F 432 239.5 M 297.09 239.5 L S 0 0 612 792 CR 0 G 3 FF (a send right for the port) 288.0 231.666 T ([13]) 82.34 252.666 T (mach_port_urefs_t) 144.0 252.666 T 4 FF (pr_ur) 288.0 252.666 T (efs) 310.41 252.666 T 3 FF (;) 321.52 252.666 T 72 257.999512 360 9 CR 1 G 72 257.999512 360 9 NF 0 G 3 FF (/*) 90.0 264.831 T 0.6667 G 422.91 262.5 M 422.91 267.75 L 432 262.5 L 422.91 257.25 L F 422.91 262.5 M 288 262.5 L S 72 276.999451 360 9 CR 1 G 72 276.999451 360 9 NF 0 G 3 FF (*/) 90.0 283.826 T 0.6667 G 297.09 281.5 M 297.09 276.25 L 288 281.5 L 297.09 286.75 L F 432 281.5 M 297.09 281.5 L S 0 0 612 792 CR 0 G 3 FF (number of user references we hold) 288.0 273.666 T ([14]) 82.34 294.666 T (mach_id_t) 144.0 294.666 T 4 FF (pr_name) 288.0 294.666 T 3 FF (;) 323.55 294.666 T 72 299.99939 360 9 CR 1 G 72 299.99939 360 9 NF 0 G 3 FF (/*) 90.0 306.831 T 0.6667 G 422.91 304.5 M 422.91 309.75 L 432 304.5 L 422.91 299.25 L F 422.91 304.5 M 288 304.5 L S 72 318.999329 360 9 CR 1 G 72 318.999329 360 9 NF 0 G 3 FF (*/) 90.0 325.826 T 0.6667 G 297.09 323.5 M 297.09 318.25 L 288 323.5 L 297.09 328.75 L F 432 323.5 M 297.09 323.5 L S 0 0 612 792 CR 0 G 3 FF (the MachID for the port) 288.0 315.666 T ([15]) 82.34 336.666 T (} ) 108.0 336.666 T 4 FF (port_r) 115.3 336.666 T (ecor) 140.49 336.666 T (d_t) 157.89 336.666 T 3 FF (;) 170.67 336.666 T ([16]) 82.34 348.666 T (#de\336ne HASH_T) 108.0 348.666 T (ABLE_SIZE) 177.341 348.666 T (256) 288.0 348.666 T 72 353.999207 360 9 CR 1 G 72 353.999207 360 9 NF 0 G 3 FF (/*) 90.0 360.83 T 0.6667 G 422.91 358.5 M 422.91 363.75 L 432 358.5 L 422.91 353.25 L F 422.91 358.5 M 288 358.5 L S 0 0 612 792 CR 0 G 3 FF 288 369.665833 M 1.30397 0 32 (good hash function for port names) widthshow 288 379.665771 M 3.579941 0 32 (combine the lo) widthshow 354.350037 379.665771 M 3.579941 0 32 (w 8 bits and the) widthshow 72 392.999023 360 9 CR 1 G 72 392.999023 360 9 NF 0 G 3 FF (*/) 90.0 399.825 T 0.6667 G 297.09 397.5 M 297.09 392.25 L 288 397.5 L 297.09 402.75 L F 432 397.5 M 297.09 397.5 L S 0 0 612 792 CR 0 G 3 FF (high 24 bits) 288.0 389.666 T ([17]) 82.34 410.666 T (#de\336ne POR) 108.0 410.666 T (T_HASH \() 158.79 410.666 T 4 FF (port) 202.95 410.666 T 3 FF (\)) 219.62 410.666 T (\(\(\(\() 288.0 410.666 T 4 FF (port) 301.32 410.666 T 3 FF (\) & 0xf) 317.99 410.666 T (f\) + \(\() 347.18 410.666 T 4 FF (port) 371.14 410.666 T 3 FF (\) >> 8\)\) ) 387.81 410.666 T (% HASH_T) 162.0 420.666 T (ABLE_SIZE\)) 210.231 420.666 T ([18]) 82.34 432.666 T (#de\336ne N) 108.0 432.666 T (AME_HASH \() 146.81 432.666 T 4 FF (name) 207.08 432.666 T 3 FF (\)) 228.74 432.666 T (\(\() 288.0 432.666 T 4 FF (name) 294.66 432.666 T 3 FF (\) % HASH_T) 316.32 432.666 T (ABLE_SIZE\)) 370.381 432.666 T 72 437.99884 360 9 CR 1 G 72 437.99884 360 9 NF 0 G 3 FF (/*) 91.224 444.83 T 0.6667 G 422.91 442.5 M 422.91 447.75 L 432 442.5 L 422.91 437.25 L F 422.91 442.5 M 108 442.5 L S 72 456.998779 360 9 CR 1 G 72 456.998779 360 9 NF 0 G 3 FF (*/) 90.0 463.825 T 0.6667 G 117.09 461.5 M 117.09 456.25 L 108 461.5 L 117.09 466.75 L F 432 461.5 M 117.09 461.5 L S 0 0 612 792 CR 0 G 3 FF (Hash table headers) 108.0 453.665 T ([19]) 82.34 474.665 T (static port_record_t) 108.0 474.665 T (*) 288.0 474.665 T 4 FF (port_to_name) 293.0 474.665 T 3 FF ( ) 349.11 474.665 T ([HASH_T) 162.0 484.665 T (ABLE_SIZE];) 202.731 484.665 T ([20]) 82.34 496.665 T (static port_record_t) 108.0 496.665 T (*) 288.0 496.665 T 4 FF (name_to_port) 293.0 496.665 T 3 FF ( ) 349.11 496.665 T ([HASH_T) 162.0 506.665 T (ABLE_SIZE];) 202.731 506.665 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Hash T) 72.0 535.999 T (able Sear) 108.577 535.999 T (ch Routines) 156.025 535.999 T 72 545.998474 360 9 CR 1 G 72 545.998474 360 9 NF 0 G 3 FF (/*) 91.224 552.83 T 0.6667 G 422.91 550.5 M 422.91 555.75 L 432 550.5 L 422.91 545.25 L F 422.91 550.5 M 108 550.5 L S 72 564.998413 360 9 CR 1 G 72 564.998413 360 9 NF 0 G 3 FF (*/) 90.0 571.825 T 0.6667 G 117.09 569.5 M 117.09 564.25 L 108 569.5 L 117.09 574.75 L F 432 569.5 M 117.09 569.5 L S 0 0 612 792 CR 0 G 3 FF (Look for a port in the port) 108.0 561.665 T 5 FF 212.43 561.665 T 3 FF (name hash table) 222.3 561.665 T ([21]) 82.34 582.665 T (static ) 108.0 582.665 T 4 FF (port_r) 131.61 582.665 T (ecor) 156.8 582.665 T (d_t) 174.2 582.665 T 3 FF ( * ) 186.98 582.665 T 1 FF 196.98 582.665 T 3 FF (\(mach_port_t ) 239.49 582.665 T 4 FF (port) 295.87 582.665 T 3 FF (\)) 312.54 582.665 T ([22]) 82.34 594.665 T ({) 108.0 594.665 T ([23]) 82.34 606.665 T 4 FF (port_r) 144.0 606.665 T (ecor) 169.19 606.665 T (d_t) 186.59 606.665 T 3 FF (*) 288.0 606.665 T 4 FF (this) 293.0 606.665 T 3 FF (;) 307.45 606.665 T ([24]) 82.34 618.665 T (for \() 144.0 618.665 T 4 FF (this) 161.49 618.665 T 3 FF ( = ) 175.94 618.665 T 4 FF (port_to_name) 186.58 618.665 T 3 FF ([POR) 242.69 618.665 T (T_HASH\(port\)];) 264.87 618.665 T 4 FF ( this) 332.08 618.665 T 3 FF ( != NULL; ) 349.03 618.665 T 4 FF (this) 394.94 618.665 T 3 FF ( = ) 409.39 618.665 T 4 FF (this) 198.0 628.665 T 5 FF 212.45 628.665 T 4 FF (pr_pnne) 222.32 628.665 T (xt) 255.45 628.665 T 3 FF (\)) 262.67 628.665 T ([25]) 82.34 640.665 T (if \() 180.0 640.665 T 4 FF (this) 191.94 640.665 T 5 FF 206.39 640.665 T 4 FF (pr_port) 216.26 640.665 T 3 FF ( == ) 246.82 640.665 T 4 FF (port) 263.1 640.665 T 3 FF (\)) 279.77 640.665 T ([26]) 82.34 652.665 T (return ) 216.0 652.665 T 4 FF (this) 242.38 652.665 T 3 FF (;) 256.83 652.665 T ([27]) 82.34 664.665 T (return NULL;) 144.0 664.665 T ([28]) 82.34 676.665 T (}) 108.0 676.665 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 44 44 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (40 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Basic IPC\320Based Ser) 180.0 55.824 T (v) 260.91 55.824 T (ers) 265.32 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 180 105.984009 360 9 CR 180 105.984009 360 9 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (/*) 199.224 112.815 T 3 SL 0.6667 G 530.91 110.48 M 530.91 115.73 L 540 110.48 L 530.91 105.23 L F 530.91 110.48 M 216 110.48 L S 180 124.983948 360 9 CR 1 G 180 124.983948 360 9 NF 0 G 3 FF (*/) 198.0 131.81 T 0.6667 G 225.09 129.48 M 225.09 124.23 L 216 129.48 L 225.09 134.73 L F 540 129.48 M 225.09 129.48 L S 0 0 612 792 CR 0 G 3 FF (Look for a name in the name) 216.0 121.651 T 4 (Symbol) 10 1 mymakefontmetric 4 FF 331.53 121.651 T 3 FF (port hash table) 341.4 121.651 T ([29]) 190.34 142.651 T (static ) 216.0 142.651 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF (port_r) 239.61 142.651 T (ecor) 264.8 142.651 T (d_t) 282.2 142.651 T 3 FF ( * ) 294.98 142.651 T 0 FF 304.98 142.651 T 3 FF (\(mach_id_t ) 352.49 142.651 T 5 FF (name) 400.54 142.651 T 3 FF (\)) 422.2 142.651 T ([30]) 190.34 154.651 T ({) 216.0 154.651 T ([31]) 190.34 166.65 T 5 FF (port_r) 252.0 166.65 T (ecor) 277.19 166.65 T (d_t) 294.59 166.65 T 3 FF (*) 396.0 166.65 T 5 FF (this) 401.0 166.65 T 3 FF (;) 415.45 166.65 T ([32]) 190.34 178.65 T (for \() 252.0 178.65 T 5 FF (this) 269.49 178.65 T 3 FF ( = ) 283.94 178.65 T 5 FF (name_to_port) 294.58 178.65 T 3 FF ([N) 350.69 178.65 T (AME_HASH\() 360.89 178.65 T 5 FF (name) 418.66 178.65 T 3 FF (\)]; ) 440.32 178.65 T 5 FF (this) 452.26 178.65 T 3 FF ( != NULL; ) 466.71 178.65 T 5 FF (this) 512.62 178.65 T 3 FF ( = ) 527.07 178.65 T 5 FF (this) 306.0 188.65 T 4 FF 320.45 188.65 T 5 FF (pr_npne) 330.32 188.65 T (xt) 363.45 188.65 T 3 FF (\)) 370.67 188.65 T ([33]) 190.34 200.65 T (if \() 288.0 200.65 T 5 FF (this) 299.94 200.65 T 4 FF 314.39 200.65 T 5 FF (pr_name) 324.26 200.65 T 3 FF ( == ) 359.81 200.65 T 5 FF (name) 376.09 200.65 T 3 FF (\)) 397.75 200.65 T ([34]) 190.34 212.65 T (return ) 324.0 212.65 T 5 FF (this) 350.38 212.65 T 3 FF (;) 364.83 212.65 T ([35]) 190.34 224.65 T (return NULL;) 252.0 224.65 T ([36]) 190.34 236.65 T (}) 216.0 236.65 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (User Refer) 180.0 265.983 T (ence Count) 235.416 265.983 T 3 FF 180 282.649963 M 0.535965 0 32 (The ) widthshow 0 FF 198.585968 282.649963 M 0.535965 0 32 (add_r) widthshow 223.966064 282.649963 M 0.535965 0 32 (efer) widthshow 240.436172 282.649963 M 0.535965 0 32 (ence) widthshow 3 FF 259.316162 282.649963 M 0.535965 0 32 ( routine is called when a send right is recei) widthshow 434.690002 282.649963 M 0.535965 0 32 (v) widthshow 439.5401 282.649963 M 0.535965 0 32 (ed. Most of the time this) widthshow 180 294.649902 M 0.484573 0 32 (routine merely counts the ne) widthshow 295.558441 294.649902 M 0.484573 0 32 (w send right. When this count e) widthshow 425.245972 294.649902 M 0.484573 0 32 (xceeds a reasonable bounds,) widthshow (the e) 180.0 306.65 T (xtra rights are remo) 199.01 306.65 T (v) 277.45 306.65 T (ed en masse.) 282.3 306.65 T 0 FF 180 330.64978 M 0.747101 0 32 (sub_r) widthshow 204.270096 330.64978 M 0.747101 0 32 (efer) widthshow 220.740204 330.64978 M 0.747101 0 32 (ence) widthshow 3 FF 239.620209 330.64978 M 0.747101 0 32 ( \(subtract reference\) is called when a port right is being returned to a cli-) widthshow 180 342.649719 M 0.192108 0 32 (ent. This routine mostly subtracts from the user reference count. If that w) widthshow 474.925385 342.649719 M 0.192108 0 32 (ould remo) widthshow 515.797607 342.649719 M 0.192108 0 32 (v) widthshow 520.647644 342.649719 M 0.192108 0 32 (e the) widthshow 180 354.649658 M 1.33461 0 32 (last reference \(thereby deleting our send right\), a number of user references are added) widthshow (\(prior to returning this right to the client\).) 180.0 366.65 T 180 377.98291 360 9 CR 1 G 180 377.98291 360 9 NF 0 G 3 FF (/*) 199.224 384.814 T 0.6667 G 530.91 382.48 M 530.91 387.73 L 540 382.48 L 530.91 377.23 L F 530.91 382.48 M 216 382.48 L S 180 396.982849 360 9 CR 1 G 180 396.982849 360 9 NF 0 G 3 FF (*/) 198.0 403.809 T 0.6667 G 225.09 401.48 M 225.09 396.23 L 216 401.48 L 225.09 406.73 L F 540 401.48 M 225.09 401.48 L S 0 0 612 792 CR 0 G 3 FF (User reference count manipulation.) 216.0 393.65 T ([37]) 190.34 414.649 T (#de\336ne MAX_UREFS) 216.0 414.649 T (1000) 396.0 414.649 T 180 419.982788 360 9 CR 1 G 180 419.982788 360 9 NF 0 G 3 FF (/*) 198.0 426.814 T 0.6667 G 530.91 424.48 M 530.91 429.73 L 540 424.48 L 530.91 419.23 L F 530.91 424.48 M 396 424.48 L S 180 438.982727 360 9 CR 1 G 180 438.982727 360 9 NF 0 G 3 FF (*/) 198.0 445.809 T 0.6667 G 405.09 443.48 M 405.09 438.23 L 396 443.48 L 405.09 448.73 L F 540 443.48 M 405.09 443.48 L S 0 0 612 792 CR 0 G 3 FF (max urefs we will hold for a port) 396.0 435.649 T ([38]) 190.34 456.649 T (#de\336ne MORE_UREFS) 216.0 456.649 T (100) 396.0 456.649 T 180 461.982666 360 9 CR 1 G 180 461.982666 360 9 NF 0 G 3 FF (/*) 198.0 468.814 T 0.6667 G 530.91 466.48 M 530.91 471.73 L 540 466.48 L 530.91 461.23 L F 530.91 466.48 M 396 466.48 L S 0 0 612 792 CR 0 G 3 FF 396 477.649292 M 1.248276 0 32 (when we need urefs, ho) widthshow 495.433258 477.649292 M 1.248276 0 32 (w man) widthshow 523.471619 477.649292 M 1.248276 0 32 (y to) widthshow 180 490.982544 360 9 CR 1 G 180 490.982544 360 9 NF 0 G 3 FF (*/) 198.0 497.809 T 0.6667 G 405.09 495.48 M 405.09 490.23 L 396 495.48 L 405.09 500.73 L F 540 495.48 M 405.09 495.48 L S 0 0 612 792 CR 0 G 3 FF (mak) 396.0 487.649 T (e) 413.12 487.649 T 180 501.982544 360 9 CR 1 G 180 501.982544 360 9 NF 0 G 3 FF (/*) 199.224 508.814 T 0.6667 G 530.91 506.48 M 530.91 511.73 L 540 506.48 L 530.91 501.23 L F 530.91 506.48 M 216 506.48 L S 180 520.982483 360 9 CR 1 G 180 520.982483 360 9 NF 0 G 3 FF (*/) 198.0 527.809 T 0.6667 G 225.09 525.48 M 225.09 520.23 L 216 525.48 L 225.09 530.73 L F 540 525.48 M 225.09 525.48 L S 0 0 612 792 CR 0 G 3 FF (Add a user) 216.0 517.649 T (-reference to the port record) 259.12 517.649 T ([39]) 190.34 538.649 T (static v) 216.0 538.649 T (oid ) 244.41 538.649 T 0 FF (add_r) 259.69 538.649 T (efer) 285.07 538.649 T (ence) 301.54 538.649 T 3 FF (\(port_record_t *) 320.42 538.649 T 5 FF (pr) 385.68 538.649 T 3 FF (\)) 394.57 538.649 T ([40]) 190.34 550.649 T ({) 216.0 550.649 T ([41]) 190.34 562.649 T (k) 252.0 562.649 T (ern_return_t) 256.9 562.649 T 5 FF (kr) 396.0 562.649 T 3 FF (;) 404.33 562.649 T ([42]) 190.34 574.649 T (if \(++) 252.0 574.649 T 5 FF (pr) 275.22 574.649 T 4 FF 284.11 574.649 T 5 FF (pr_ur) 293.98 574.649 T (efs) 316.39 574.649 T 3 FF ( > MAX_UREFS\)) 327.5 574.649 T ([43]) 190.34 586.649 T ({) 252.0 586.649 T 180 591.982178 360 9 CR 1 G 180 591.982178 360 9 NF 0 G 3 FF (/*) 199.224 598.813 T 0.6667 G 530.91 596.48 M 530.91 601.73 L 540 596.48 L 530.91 591.23 L F 530.91 596.48 M 216 596.48 L S 180 610.982117 360 9 CR 1 G 180 610.982117 360 9 NF 0 G 3 FF (*/) 198.0 617.808 T 0.6667 G 225.09 615.48 M 225.09 610.23 L 216 615.48 L 225.09 620.73 L F 540 615.48 M 225.09 615.48 L S 0 0 612 792 CR 0 G 3 FF (Remo) 288.0 607.649 T (v) 311.74 607.649 T (e e) 316.59 607.649 T (xcess user references held by this module) 327.82 607.649 T ([44]) 190.34 628.649 T 5 FF (kr) 288.0 628.649 T 3 FF ( = ) 296.33 628.649 T 0 FF (mach_port_mod_r) 306.97 628.649 T (efs) 386.78 628.649 T 3 FF (\() 398.44 628.649 T 0 FF (mach_task_self) 401.77 628.649 T 3 FF (\(\), ) 467.32 628.649 T 5 FF (pr) 478.98 628.649 T 4 FF 487.87 628.649 T 5 FF (pr_port) 497.74 628.649 T 3 FF (, ) 528.3 628.649 T (MA) 342.0 638.649 T (CH_POR) 357.71 638.649 T (T_RIGHT_SEND, 1 \320 ) 395.451 638.649 T 5 FF (pr) 342.0 648.649 T 4 FF 350.89 648.649 T 5 FF (pr_ur) 360.76 648.649 T (efs) 383.17 648.649 T 3 FF (\);) 394.28 648.649 T ([45]) 190.34 660.649 T (if \() 288.0 660.649 T 5 FF (kr) 299.94 660.649 T 3 FF ( == KERN_INV) 308.27 660.649 T (ALID_RIGHT\)) 373.191 660.649 T ([46]) 190.34 672.649 T 5 FF (kr) 324.0 672.649 T 3 FF ( = ) 332.33 672.649 T 0 FF (mach_port_mod_r) 342.97 672.649 T (efs) 422.78 672.649 T 3 FF (\() 434.44 672.649 T 0 FF (mach_task_self) 437.77 672.649 T 3 FF (\(\), ) 503.32 672.649 T 5 FF (pr) 378.0 682.648 T 4 FF 386.89 682.648 T 5 FF (pr_port) 396.76 682.648 T 3 FF (, ) 427.32 682.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 45 45 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (41 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Single-Thr) 72.0 55.824 T (eaded Ser) 113.346 55.824 T (v) 151.002 55.824 T (er Example) 155.412 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (MA) 270.0 114.667 T (CH_POR) 285.71 114.667 T (T_RIGHT_DEAD_N) 323.451 114.667 T (AME) 409.751 114.667 T (, 1 \320 ) 270.0 124.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (pr) 290.0 124.667 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 298.89 124.667 T 4 FF (pr_ur) 308.76 124.667 T (efs) 331.17 124.667 T 3 FF (\);) 342.28 124.667 T ([47]) 82.34 136.667 T (if \() 180.0 136.667 T 4 FF (kr) 191.94 136.667 T 3 FF ( != KERN_SUCCESS\)) 200.27 136.667 T ([48]) 82.34 148.666 T 1 FF (quit) 216.0 148.666 T 3 FF (\(1, \322) 233.23 148.666 T 1 FF (machid) 251.0 148.666 T 3 FF (: ) 282.67 148.666 T 1 FF (add_r) 287.95 148.666 T (efer) 313.33 148.666 T (ence) 329.8 148.666 T 3 FF (: ) 348.68 148.666 T 1 FF (mach_port_mod_r) 270.0 158.666 T (efs) 349.81 158.666 T 3 FF (: %s\\n\323, ) 361.47 158.666 T (mach_error_string\() 270.0 168.666 T 4 FF (kr) 347.2 168.666 T 3 FF (\)\);) 355.53 168.666 T ([49]) 82.34 180.666 T 4 FF (pr) 180.0 180.666 T 5 FF 188.89 180.666 T 4 FF (pr_ur) 198.76 180.666 T (efs) 221.17 180.666 T 3 FF ( = 1;) 232.28 180.666 T ([50]) 82.34 192.666 T (}) 144.0 192.666 T ([51]) 82.34 204.666 T (}) 108.0 204.666 T 72 209.999451 360 9 CR 1 G 72 209.999451 360 9 NF 0 G 3 FF (/*) 91.224 216.831 T 3 SL 0 SC 0.6667 G 422.91 214.5 M 422.91 219.75 L 432 214.5 L 422.91 209.25 L F 422.91 214.5 M 108 214.5 L S 72 228.99939 360 9 CR 1 G 72 228.99939 360 9 NF 0 G 3 FF (*/) 90.0 235.826 T 0.6667 G 117.09 233.5 M 117.09 228.25 L 108 233.5 L 117.09 238.75 L F 432 233.5 M 117.09 233.5 L S 0 0 612 792 CR 0 G 3 FF (T) 108.0 225.666 T (ak) 113.31 225.666 T (e a user) 122.65 225.666 T (-reference from the port record) 152.991 225.666 T ([52]) 82.34 246.666 T (static v) 108.0 246.666 T (oid ) 136.41 246.666 T 1 FF (sub_r) 151.69 246.666 T (efer) 175.96 246.666 T (ence) 192.43 246.666 T 3 FF (\(port_record_t *) 211.31 246.666 T 4 FF (pr) 276.57 246.666 T 3 FF (\)) 285.46 246.666 T ([53]) 82.34 258.666 T ({) 108.0 258.666 T ([54]) 82.34 270.666 T (k) 144.0 270.666 T (ern_return_t) 148.9 270.666 T 4 FF (kr) 288.0 270.666 T 3 FF (;) 296.33 270.666 T ([55]) 82.34 282.666 T (if \(\320\320) 144.0 282.666 T 4 FF (pr) 165.94 282.666 T 5 FF 174.83 282.666 T 4 FF (pr_ur) 184.7 282.666 T (efs) 207.11 282.666 T 3 FF ( == 0\)) 218.22 282.666 T ([56]) 82.34 294.666 T ({) 144.0 294.666 T 72 299.999084 360 9 CR 1 G 72 299.999084 360 9 NF 0 G 3 FF (/*) 91.224 306.83 T 0.6667 G 422.91 304.5 M 422.91 309.75 L 432 304.5 L 422.91 299.25 L F 422.91 304.5 M 108 304.5 L S 72 318.999023 360 9 CR 1 G 72 318.999023 360 9 NF 0 G 3 FF (*/) 90.0 325.825 T 0.6667 G 117.09 323.5 M 117.09 318.25 L 108 323.5 L 117.09 328.75 L F 432 323.5 M 117.09 323.5 L S 0 0 612 792 CR 0 G 3 FF (Create more user references for this module) 180.0 315.666 T ([57]) 82.34 336.666 T 4 FF (kr) 180.0 336.666 T 3 FF ( = ) 188.33 336.666 T 1 FF (mach_port_mod_r) 198.97 336.666 T (efs) 278.78 336.666 T 3 FF (\() 290.44 336.666 T 1 FF (mach_task_self) 293.77 336.666 T 3 FF (\(\), ) 359.32 336.666 T 4 FF (pr) 370.98 336.666 T 5 FF 379.87 336.666 T 4 FF (pr_port) 389.74 336.666 T 3 FF (, ) 420.3 336.666 T (MA) 234.0 346.666 T (CH_POR) 249.71 346.666 T (T_RIGHT_SEND, ) 287.451 346.666 T (MORE_UREFS\);) 234.0 356.666 T ([58]) 82.34 368.665 T (if \() 180.0 368.665 T 4 FF (kr) 191.94 368.665 T 3 FF ( == KERN_INV) 200.27 368.665 T (ALID_RIGHT\)) 265.191 368.665 T ([59]) 82.34 380.665 T 4 FF (kr) 216.0 380.665 T 3 FF ( = ) 224.33 380.665 T 1 FF (mach_port_mod_r) 234.97 380.665 T (efs) 314.78 380.665 T 3 FF (\() 326.44 380.665 T 1 FF (mach_task_self) 329.77 380.665 T 3 FF (\(\), ) 395.32 380.665 T 4 FF (pr) 270.0 390.665 T 5 FF 278.89 390.665 T 4 FF (pr_port) 288.76 390.665 T 3 FF (, ) 319.32 390.665 T (MA) 270.0 400.665 T (CH_POR) 285.71 400.665 T (T_RIGHT_DEAD_N) 323.451 400.665 T (AME) 409.751 400.665 T (, MORE_UREFS\);) 270.0 410.665 T ([60]) 82.34 422.665 T (if \() 180.0 422.665 T 4 FF (kr) 191.94 422.665 T 3 FF ( != KERN_SUCCESS\)) 200.27 422.665 T ([61]) 82.34 434.665 T 1 FF (quit) 216.0 434.665 T 3 FF (\(1, \322) 233.23 434.665 T 1 FF (machid) 251.0 434.665 T 3 FF (: ) 282.67 434.665 T 1 FF (sub_r) 287.95 434.665 T (efer) 312.22 434.665 T (ence) 328.69 434.665 T 3 FF (: ) 347.57 434.665 T 1 FF (mach_port_mod_r) 270.0 444.665 T (efs) 349.81 444.665 T 3 FF (: %s\\n\323, ) 361.47 444.665 T (mach_error_string\() 270.0 454.665 T 4 FF (kr) 347.2 454.665 T 3 FF (\)\);) 355.53 454.665 T ([62]) 82.34 466.665 T 4 FF (pr) 180.0 466.665 T 5 FF 188.89 466.665 T 4 FF (pr_ur) 198.76 466.665 T (efs) 221.17 466.665 T 3 FF ( += MORE_UREFS;) 232.28 466.665 T ([63]) 82.34 478.665 T (}) 144.0 478.665 T ([64]) 82.34 490.665 T (}) 108.0 490.665 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Ser) 72.0 519.998 T (vice Routines) 89.208 519.998 T 3 FF 72 536.664673 M 1.269943 0 32 (The follo) widthshow 109.960083 536.664673 M 1.269943 0 32 (wing ) widthshow 1 FF 133.730026 536.664673 M 1.269943 0 32 (name_lookup) widthshow 3 FF 191.52002 536.664673 M 1.269943 0 32 ( and ) widthshow 1 FF 213.499908 536.664673 M 1.269943 0 32 (port_lookup) widthshow 3 FF 266.289917 536.664673 M 1.269943 0 32 ( routines do the actual w) widthshow 370.579681 536.664673 M 1.269943 0 32 (ork of locating) widthshow 72 548.664612 M 0.272247 0 32 (names, creating ne) widthshow 146.994644 548.664612 M 0.272247 0 32 (w entries and maintaining the reference counts. The) widthshow 355.920471 548.664612 M 0.272247 0 32 (y form the body of) widthshow (the actual top le) 72.0 560.665 T (v) 135.35 560.665 T (el serv) 140.2 560.665 T (er routines.) 166.43 560.665 T 72 584.66449 M 1.816635 0 32 (Note that ) widthshow 1 FF 115.073273 584.66449 M 1.816635 0 32 (name_lookup) widthshow 3 FF 172.863266 584.66449 M 1.816635 0 32 ( accounts for the recei) widthshow 268.179962 584.66449 M 1.816635 0 32 (v) widthshow 273.030029 584.66449 M 1.816635 0 32 (ed send right whether it is pre) widthshow 402.549988 584.66449 M 1.816635 0 32 (viously) widthshow 72 596.664429 M 0.853958 0 32 (kno) widthshow 86.750137 596.664429 M 0.853958 0 32 (wn or not. It does this once it \336nds or creates the corresponding port record. ) widthshow 1 FF 405.339539 596.664429 M 0.853958 0 32 (port_-) widthshow 72 608.664368 M 1.168442 0 32 (lookup) widthshow 3 FF 101.459991 608.664368 M 1.168442 0 32 (, on the other hand, subtracts a reference because of the use of MA) widthshow 383.109985 608.664368 M 1.168442 0 32 (CH_MSG_-) widthshow (TYPE_MO) 72.0 620.664 T (VE_SEND when returning this right to the client.) 117.61 620.664 T 72 631.99762 360 9 CR 1 G 72 631.99762 360 9 NF 0 G 3 FF (/*) 91.224 638.829 T 0.6667 G 422.91 636.5 M 422.91 641.75 L 432 636.5 L 422.91 631.25 L F 422.91 636.5 M 108 636.5 L S 0 0 612 792 CR 0 G 3 FF 108 647.664246 M 0.947418 0 32 (Con) widthshow 124.270218 647.664246 M 0.947418 0 32 (v) widthshow 129.1203 647.664246 M 0.947418 0 32 (ert a send right to our e) widthshow 227.414902 647.664246 M 0.947418 0 32 (xported name, consuming a user) widthshow 360.704712 647.664246 M 0.947418 0 32 (-reference for the) widthshow 72 660.997498 360 9 CR 1 G 72 660.997498 360 9 NF 0 G 3 FF (*/) 90.0 667.824 T 0.6667 G 117.09 665.5 M 117.09 660.25 L 108 665.5 L 117.09 670.75 L F 432 665.5 M 117.09 665.5 L S 0 0 612 792 CR 0 G 3 FF (send right) 108.0 657.664 T ([65]) 82.34 678.664 T (static ) 108.0 678.664 T 4 FF (mac) 131.61 678.664 T (h_id_t ) 148.12 678.664 T 1 FF (name_lookup ) 176.18 678.664 T 3 FF (\(mach_port_t ) 236.47 678.664 T 4 FF (port) 292.85 678.664 T 3 FF (\)) 309.52 678.664 T ([66]) 82.34 690.664 T ({) 108.0 690.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 46 46 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (42 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Basic IPC\320Based Ser) 180.0 55.824 T (v) 260.91 55.824 T (ers) 265.32 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([67]) 190.34 112.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (port_r) 252.0 112.651 T (ecor) 277.19 112.651 T (d_t) 294.59 112.651 T 3 FF (*) 396.0 112.651 T 4 FF (this) 401.0 112.651 T 3 FF (, **) 415.45 112.651 T 4 FF (b) 430.45 112.651 T (uc) 435.25 112.651 T (k) 444.49 112.651 T (et) 448.83 112.651 T 3 FF (;) 456.05 112.651 T ([68]) 190.34 124.651 T (mach_port_t) 252.0 124.651 T 4 FF (pr) 396.0 124.651 T (e) 404.52 124.651 T (vious) 408.81 124.651 T 3 FF (;) 429.92 124.651 T ([69]) 190.34 136.651 T (k) 252.0 136.651 T (ern_return_t) 256.9 136.651 T 4 FF (kr) 396.0 136.651 T 3 FF (;) 404.33 136.651 T ([70]) 190.34 148.65 T (if \(!MA) 252.0 148.65 T (CH_POR) 282.98 148.65 T (T_V) 320.721 148.65 T (ALID \() 337.701 148.65 T 4 FF (port) 367.411 148.65 T 3 FF (\)\)) 384.081 148.65 T ([71]) 190.34 160.65 T (return 0;) 288.0 160.65 T ([72]) 190.34 172.65 T 4 FF (this) 252.0 172.65 T 3 FF ( = ) 266.45 172.65 T 0 FF 277.09 172.65 T 3 FF (\() 319.6 172.65 T 4 FF (port) 322.93 172.65 T 3 FF (\);) 339.6 172.65 T ([73]) 190.34 184.65 T (if \() 252.0 184.65 T 4 FF (this) 263.94 184.65 T 3 FF ( != NULL\)) 278.39 184.65 T ([74]) 190.34 196.65 T ({) 252.0 196.65 T 180 201.983521 360 9 CR 1 G 180 201.983521 360 9 NF 0 G 3 FF (/*) 199.224 208.815 T 3 SL 0.6667 G 530.91 206.48 M 530.91 211.73 L 540 206.48 L 530.91 201.23 L F 530.91 206.48 M 216 206.48 L S 180 220.983459 360 9 CR 1 G 180 220.983459 360 9 NF 0 G 3 FF (*/) 198.0 227.81 T 0.6667 G 225.09 225.48 M 225.09 220.23 L 216 225.48 L 225.09 230.73 L F 540 225.48 M 225.09 225.48 L S 0 0 612 792 CR 0 G 3 FF (F) 288.0 217.65 T (ound an e) 293.41 217.65 T (xisting port record) 332.14 217.65 T ([75]) 190.34 238.65 T 0 FF (add_r) 288.0 238.65 T (efer) 313.38 238.65 T (ence ) 329.85 238.65 T 3 FF (\() 351.23 238.65 T 4 FF (this) 354.56 238.65 T 3 FF (\);) 369.01 238.65 T ([76]) 190.34 250.65 T (return ) 288.0 250.65 T 4 FF (this) 314.38 250.65 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 328.83 250.65 T 4 FF (pr_name) 338.7 250.65 T 3 FF (;) 374.25 250.65 T ([77]) 190.34 262.65 T (}) 252.0 262.65 T 180 267.983276 360 9 CR 1 G 180 267.983276 360 9 NF 0 G 3 FF (/*) 199.224 274.814 T 0.6667 G 530.91 272.48 M 530.91 277.73 L 540 272.48 L 530.91 267.23 L F 530.91 272.48 M 216 272.48 L S 180 286.983215 360 9 CR 1 G 180 286.983215 360 9 NF 0 G 3 FF (*/) 198.0 293.809 T 0.6667 G 225.09 291.48 M 225.09 286.23 L 216 291.48 L 225.09 296.73 L F 540 291.48 M 225.09 291.48 L S 0 0 612 792 CR 0 G 3 FF (No port record, so create a ne) 252.0 283.65 T (w one) 369.76 283.65 T ([78]) 190.34 304.65 T 4 FF (this) 252.0 304.65 T 3 FF ( = \() 266.45 304.65 T 4 FF (port_r) 280.42 304.65 T (ecor) 305.61 304.65 T (d_t) 323.01 304.65 T 3 FF ( *\) malloc \(sizeof *) 335.79 304.65 T 4 FF (this) 413.55 304.65 T 3 FF (\);) 428.0 304.65 T ([79]) 190.34 316.65 T (if \() 252.0 316.65 T 4 FF (this) 263.94 316.65 T 3 FF ( == NULL\)) 278.39 316.65 T ([80]) 190.34 328.65 T 0 FF (quit) 288.0 328.65 T 3 FF (\(1, \322) 305.23 328.65 T 0 FF (machid) 323.0 328.65 T 3 FF (: malloc f) 354.67 328.65 T (ailed\\n\323\);) 392.9 328.65 T ([81]) 190.34 340.65 T 4 FF (this) 252.0 340.65 T 5 FF 266.45 340.65 T 4 FF (pr_port) 276.32 340.65 T 3 FF ( = ) 306.88 340.65 T 4 FF (port) 317.52 340.65 T 3 FF (;) 334.19 340.65 T ([82]) 190.34 352.65 T 4 FF (this) 252.0 352.65 T 5 FF 266.45 352.65 T 4 FF (pr_name) 276.32 352.65 T 3 FF ( = ) 311.87 352.65 T 4 FF (ne) 322.51 352.65 T (xt_mac) 331.75 352.65 T (hid_name) 360.48 352.65 T 3 FF (++;) 399.92 352.65 T ([83]) 190.34 364.65 T 4 FF (this) 252.0 364.65 T 5 FF 266.45 364.65 T 4 FF (pr_ur) 276.32 364.65 T (efs) 298.73 364.65 T 3 FF ( = 1;) 309.84 364.65 T 180 369.982849 360 9 CR 1 G 180 369.982849 360 9 NF 0 G 3 FF (/*) 198.0 376.814 T 0.6667 G 530.91 374.48 M 530.91 379.73 L 540 374.48 L 530.91 369.23 L F 530.91 374.48 M 396 374.48 L S 180 388.982788 360 9 CR 1 G 180 388.982788 360 9 NF 0 G 3 FF (*/) 198.0 395.809 T 0.6667 G 405.09 393.48 M 405.09 388.23 L 396 393.48 L 405.09 398.73 L F 540 393.48 M 405.09 393.48 L S 0 0 612 792 CR 0 G 3 FF (consume a user) 396.0 385.649 T (-reference) 457.45 385.649 T 180 399.982788 360 9 CR 1 G 180 399.982788 360 9 NF 0 G 3 FF (/*) 199.224 406.814 T 0.6667 G 530.91 404.48 M 530.91 409.73 L 540 404.48 L 530.91 399.23 L F 530.91 404.48 M 216 404.48 L S 180 418.982727 360 9 CR 1 G 180 418.982727 360 9 NF 0 G 3 FF (*/) 198.0 425.809 T 0.6667 G 225.09 423.48 M 225.09 418.23 L 216 423.48 L 225.09 428.73 L F 540 423.48 M 225.09 423.48 L S 0 0 612 792 CR 0 G 3 FF (Link record into port) 252.0 415.649 T 5 FF 335.6 415.649 T 3 FF (name hash table) 345.47 415.649 T ([84]) 190.34 436.649 T 4 FF (b) 252.0 436.649 T (uc) 256.8 436.649 T (k) 266.04 436.649 T (et) 270.38 436.649 T 3 FF ( = &) 277.6 436.649 T 4 FF (port_to_name) 296.02 436.649 T 3 FF ([POR) 352.13 436.649 T (T_HASH\() 374.311 436.649 T 4 FF (port) 415.971 436.649 T 3 FF (\)];) 432.641 436.649 T ([85]) 190.34 448.649 T 4 FF (this) 252.0 448.649 T 5 FF 266.45 448.649 T 4 FF (pr_pnne) 276.32 448.649 T (xt) 309.45 448.649 T 3 FF ( = *) 316.67 448.649 T 4 FF (b) 332.31 448.649 T (uc) 337.11 448.649 T (k) 346.35 448.649 T (et) 350.69 448.649 T 3 FF (;) 357.91 448.649 T ([86]) 190.34 460.649 T (*) 252.0 460.649 T 4 FF (b) 257.0 460.649 T (uc) 261.8 460.649 T (k) 271.04 460.649 T (et) 275.38 460.649 T 3 FF ( = ) 282.6 460.649 T 4 FF (this) 293.24 460.649 T 3 FF (;) 307.69 460.649 T 180 465.982544 360 9 CR 1 G 180 465.982544 360 9 NF 0 G 3 FF (/*) 199.224 472.814 T 0.6667 G 530.91 470.48 M 530.91 475.73 L 540 470.48 L 530.91 465.23 L F 530.91 470.48 M 216 470.48 L S 180 484.982483 360 9 CR 1 G 180 484.982483 360 9 NF 0 G 3 FF (*/) 198.0 491.809 T 0.6667 G 225.09 489.48 M 225.09 484.23 L 216 489.48 L 225.09 494.73 L F 540 489.48 M 225.09 489.48 L S 0 0 612 792 CR 0 G 3 FF (Link record into name) 252.0 481.649 T 5 FF 341.15 481.649 T 3 FF (port hash table) 351.02 481.649 T ([87]) 190.34 502.649 T 4 FF (b) 252.0 502.649 T (uc) 256.8 502.649 T (k) 266.04 502.649 T (et) 270.38 502.649 T 3 FF ( = &) 277.6 502.649 T 4 FF (name_to_port) 296.02 502.649 T 3 FF ([N) 352.13 502.649 T (AME_HASH\() 362.33 502.649 T 4 FF (this) 420.1 502.649 T 5 FF 434.55 502.649 T 4 FF (pr_name) 444.42 502.649 T 3 FF (\)];) 479.97 502.649 T ([88]) 190.34 514.649 T 4 FF (this) 252.0 514.649 T 5 FF 266.45 514.649 T 4 FF (pr_npne) 276.32 514.649 T (xt) 309.45 514.649 T 3 FF ( = *) 316.67 514.649 T 4 FF (b) 332.31 514.649 T (uc) 337.11 514.649 T (k) 346.35 514.649 T (et) 350.69 514.649 T 3 FF (;) 357.91 514.649 T ([89]) 190.34 526.649 T (*) 252.0 526.649 T 4 FF (b) 257.0 526.649 T (uc) 261.8 526.649 T (k) 271.04 526.649 T (et) 275.38 526.649 T 3 FF ( = ) 282.6 526.649 T 4 FF (this) 293.24 526.649 T 3 FF (;) 307.69 526.649 T 180 531.9823 360 9 CR 1 G 180 531.9823 360 9 NF 0 G 3 FF (/*) 199.224 538.813 T 0.6667 G 530.91 536.48 M 530.91 541.73 L 540 536.48 L 530.91 531.23 L F 530.91 536.48 M 216 536.48 L S 180 550.982239 360 9 CR 1 G 180 550.982239 360 9 NF 0 G 3 FF (*/) 198.0 557.808 T 0.6667 G 225.09 555.48 M 225.09 550.23 L 216 555.48 L 225.09 560.73 L F 540 555.48 M 225.09 555.48 L S 0 0 612 792 CR 0 G 3 FF (Request a dead-name noti\336cation) 252.0 547.649 T ([90]) 190.34 568.649 T 4 FF (kr) 252.0 568.649 T 3 FF ( = ) 260.33 568.649 T 0 FF (mach_port_r) 270.97 568.649 T (equest_noti\336cation) 326.89 568.649 T 3 FF (\() 407.45 568.649 T 0 FF (mach_task_self) 410.78 568.649 T 3 FF (\(\), ) 476.33 568.649 T 4 FF (port) 487.99 568.649 T 3 FF (, ) 504.66 568.649 T (MA) 306.0 578.649 T (CH_NO) 321.71 578.649 T (TIFY_DEAD_N) 354.64 578.649 T (AME, TR) 421.501 578.649 T (UE,) 461.101 578.649 T 4 FF ( notify) 476.931 578.649 T 3 FF (, ) 501.561 578.649 T (MA) 306.0 588.649 T (CH_MSG_TYPE_MAKE_SEND_ONCE, ) 321.71 588.649 T (&) 306.0 598.649 T 4 FF (pr) 313.78 598.649 T (e) 322.3 598.649 T (vious) 326.59 598.649 T 3 FF (\);) 347.7 598.649 T ([91]) 190.34 610.649 T (if \(\() 252.0 610.649 T 4 FF (kr) 267.27 610.649 T 3 FF ( != KERN_SUCCESS\) || \() 275.6 610.649 T 4 FF (pr) 380.8 610.649 T (e) 389.32 610.649 T (vious) 393.61 610.649 T 3 FF ( != MA) 414.72 610.649 T (CH_POR) 444.401 610.649 T (T_NULL\)\)) 482.141 610.649 T ([92]) 190.34 622.649 T 0 FF (quit) 288.0 622.649 T 3 FF (\(1, \322) 305.23 622.649 T 0 FF (machid) 323.0 622.649 T 3 FF (: ) 354.67 622.649 T 0 FF (mach_port_r) 359.95 622.649 T (equest_noti\336cation) 415.87 622.649 T 3 FF (: %s\\n\323, ) 496.43 622.649 T (mach_error_string\() 342.0 632.648 T 4 FF (kr) 419.2 632.648 T 3 FF (\)\);) 427.53 632.648 T ([93]) 190.34 644.648 T (return ) 252.0 644.648 T 4 FF (this) 278.38 644.648 T 5 FF 292.83 644.648 T 4 FF (pr_name) 302.7 644.648 T 3 FF (;) 338.25 644.648 T ([94]) 190.34 656.648 T (}) 216.0 656.648 T 180 661.981689 360 9 CR 1 G 180 661.981689 360 9 NF 0 G 3 FF (/*) 199.224 668.813 T 0.6667 G 530.91 666.48 M 530.91 671.73 L 540 666.48 L 530.91 661.23 L F 530.91 666.48 M 216 666.48 L S 0 0 612 792 CR 0 G 3 FF 216 677.648315 M 1.874084 0 32 (Con) widthshow 232.270218 677.648315 M 1.874084 0 32 (v) widthshow 237.1203 677.648315 M 1.874084 0 32 (ert an e) widthshow 270.14856 677.648315 M 1.874084 0 32 (xported name to a send right, returning a user) widthshow 466.851379 677.648315 M 1.874084 0 32 (-reference for the) widthshow 180 690.981567 360 9 CR 1 G 180 690.981567 360 9 NF 0 G 3 FF (*/) 198.0 697.808 T 0.6667 G 225.09 695.48 M 225.09 690.23 L 216 695.48 L 225.09 700.73 L F 540 695.48 M 225.09 695.48 L S 0 0 612 792 CR 0 G 3 FF (send right) 216.0 687.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 47 47 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (43 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Single-Thr) 72.0 55.824 T (eaded Ser) 113.346 55.824 T (v) 151.002 55.824 T (er Example) 155.412 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([95]) 82.34 114.667 T (static k) 108.0 114.667 T (ern_return_t ) 136.51 114.667 T 1 FF (port_lookup ) 188.44 114.667 T 3 FF (\(mach_id_t ) 243.73 114.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (name) 291.78 114.667 T 3 FF (, mach_port_t *) 313.44 114.667 T 4 FF (portp) 376.49 114.667 T 3 FF (\)) 398.16 114.667 T ([96]) 82.34 126.667 T ({) 108.0 126.667 T ([97]) 82.34 138.667 T 4 FF (port_r) 144.0 138.667 T (ecor) 169.19 138.667 T (d_t) 186.59 138.667 T 3 FF (*) 288.0 138.667 T 4 FF (this) 293.0 138.667 T 3 FF (;) 307.45 138.667 T ([98]) 82.34 150.666 T 4 FF (this) 144.0 150.666 T 3 FF ( = ) 158.45 150.666 T 1 FF 169.09 150.666 T 3 FF (\() 216.6 150.666 T 4 FF (name) 219.93 150.666 T 3 FF (\);) 241.59 150.666 T ([99]) 82.34 162.666 T (if \() 144.0 162.666 T 4 FF (this) 155.94 162.666 T 3 FF ( == NULL\)) 170.39 162.666 T ([100]) 77.34 174.666 T (return KERN_INV) 180.0 174.666 T (ALID_N) 255.021 174.666 T (AME;) 290.771 174.666 T ([101]) 77.34 186.666 T 1 FF (sub_r) 144.0 186.666 T (efer) 168.27 186.666 T (ence ) 184.74 186.666 T 3 FF (\() 206.12 186.666 T 4 FF (this) 209.45 186.666 T 3 FF (\);) 223.9 186.666 T ([102]) 77.34 198.666 T (*) 144.0 198.666 T 4 FF (portp) 149.0 198.666 T 3 FF ( = ) 170.67 198.666 T 4 FF (this) 181.31 198.666 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 195.76 198.666 T 4 FF (pr_port) 205.63 198.666 T 3 FF (;) 236.19 198.666 T ([103]) 77.34 210.666 T (return KERN_SUCCESS;) 144.0 210.666 T ([104]) 77.34 222.666 T (}) 108.0 222.666 T 72 244.666016 M 0.645676 0 32 (A port record is destro) widthshow 164.462769 244.666016 M 0.645676 0 32 (yed when the port is. This function, ) widthshow 1 FF 313.692505 244.666016 M 0.645676 0 32 (port_destr) widthshow 358.502625 244.666016 M 0.645676 0 32 (oy) widthshow 3 FF 367.852966 244.666016 M 0.645676 0 32 (, is called when) widthshow 72 256.665955 M 0.025284 0 32 (the serv) widthshow 103.255371 256.665955 M 0.025284 0 32 (er recei) widthshow 132.730804 256.665955 M 0.025284 0 32 (v) widthshow 137.580887 256.665955 M 0.025284 0 32 (es a dead name noti\336cation. Remember that recei) widthshow 334.688049 256.665955 M 0.025284 0 32 (ving a dead name noti\336-) widthshow (cation adds a user reference to the dead right.) 72.0 268.666 T 72 279.999207 360 9 CR 1 G 72 279.999207 360 9 NF 0 G 3 FF (/*) 91.224 286.83 T 3 SL 0 SC 0.6667 G 422.91 284.5 M 422.91 289.75 L 432 284.5 L 422.91 279.25 L F 422.91 284.5 M 108 284.5 L S 0 0 612 792 CR 0 G 3 FF 108 295.665833 M 1.374969 0 32 (Destro) widthshow 134.560059 295.665833 M 1.374969 0 32 (y the port record of a dead port, consuming an e) widthshow 340.059875 295.665833 M 1.374969 0 32 (xtra user) widthshow 375.944946 295.665833 M 1.374969 0 32 (-reference for) widthshow 72 308.999084 360 9 CR 1 G 72 308.999084 360 9 NF 0 G 3 FF (*/) 90.0 315.825 T 0.6667 G 117.09 313.5 M 117.09 308.25 L 108 313.5 L 117.09 318.75 L F 432 313.5 M 117.09 313.5 L S 0 0 612 792 CR 0 G 3 FF (the dead-name noti\336cation) 108.0 305.666 T ([105]) 77.34 326.666 T (static v) 108.0 326.666 T (oid) 136.41 326.666 T 1 FF ( port_destr) 149.19 326.666 T (oy ) 196.5 326.666 T 3 FF (\(mach_port_t ) 209.0 326.666 T 4 FF (port) 265.38 326.666 T 3 FF (\)) 282.05 326.666 T ([106]) 77.34 338.666 T ({) 108.0 338.666 T ([107]) 77.34 350.666 T 4 FF (port_r) 144.0 350.666 T (ecor) 169.19 350.666 T (d_t) 186.59 350.666 T 3 FF (*) 288.0 350.666 T 4 FF (this) 293.0 350.666 T 3 FF (, **) 307.45 350.666 T 4 FF (pr) 322.45 350.666 T (e) 330.97 350.666 T (v) 335.26 350.666 T 3 FF (;) 339.7 350.666 T ([108]) 77.34 362.666 T (k) 144.0 362.666 T (ern_return_t) 148.9 362.666 T 4 FF (kr) 288.0 362.666 T 3 FF (;) 296.33 362.666 T 72 367.99884 360 9 CR 1 G 72 367.99884 360 9 NF 0 G 3 FF (/*) 91.224 374.83 T 0.6667 G 422.91 372.5 M 422.91 377.75 L 432 372.5 L 422.91 367.25 L F 422.91 372.5 M 108 372.5 L S 72 386.998779 360 9 CR 1 G 72 386.998779 360 9 NF 0 G 3 FF (*/) 90.0 393.825 T 0.6667 G 117.09 391.5 M 117.09 386.25 L 108 391.5 L 117.09 396.75 L F 432 391.5 M 117.09 391.5 L S 0 0 612 792 CR 0 G 3 FF (Remo) 144.0 383.665 T (v) 167.74 383.665 T (e the port record from port) 172.59 383.665 T 5 FF 278.95 383.665 T 3 FF (name hash table) 288.82 383.665 T ([109]) 77.34 404.665 T (for \() 144.0 404.665 T 4 FF (pr) 161.49 404.665 T (e) 170.01 404.665 T (v) 174.3 404.665 T 3 FF ( = &) 178.74 404.665 T 4 FF (port_to_name) 197.16 404.665 T 3 FF ([POR) 253.27 404.665 T (T_HASH\() 275.451 404.665 T 4 FF (port) 317.111 404.665 T 3 FF (\)]; \() 333.781 404.665 T 4 FF (this) 349.051 404.665 T 3 FF ( = *) 363.501 404.665 T 4 FF (pr) 379.141 404.665 T (e) 387.661 404.665 T (v) 391.951 404.665 T 3 FF (\) != ) 396.391 404.665 T (NULL; ) 198.0 414.665 T 4 FF (pr) 229.94 414.665 T (e) 238.46 414.665 T (v) 242.75 414.665 T 3 FF ( = &) 247.19 414.665 T 4 FF (this) 265.61 414.665 T 5 FF 280.06 414.665 T 4 FF (pr_pnne) 289.93 414.665 T (xt) 323.06 414.665 T 3 FF (\)) 330.28 414.665 T ([110]) 77.34 426.665 T (if \() 180.0 426.665 T 4 FF (this) 191.94 426.665 T 5 FF 206.39 426.665 T 4 FF (pr_port) 216.26 426.665 T 3 FF ( == ) 246.82 426.665 T 4 FF (port) 263.1 426.665 T 3 FF (\)) 279.77 426.665 T ([111]) 77.34 438.665 T (break;) 216.0 438.665 T ([112]) 77.34 450.665 T (if \() 144.0 450.665 T 4 FF (this) 155.94 450.665 T 3 FF ( == NULL\)) 170.39 450.665 T ([113]) 77.34 462.665 T 1 FF (quit) 180.0 462.665 T 3 FF (\(1, \322) 197.23 462.665 T 1 FF (machid) 215.0 462.665 T 3 FF (: ) 246.67 462.665 T 1 FF (port_destr) 251.95 462.665 T (oy) 296.76 462.665 T 3 FF (: didn't \336nd port\\n\323\);) 306.76 462.665 T ([114]) 77.34 474.665 T (*) 144.0 474.665 T 4 FF (pr) 149.0 474.665 T (e) 157.52 474.665 T (v) 161.81 474.665 T 3 FF ( = ) 166.25 474.665 T 4 FF (this) 176.89 474.665 T 5 FF 191.34 474.665 T 4 FF (pr_pnne) 201.21 474.665 T (xt) 234.34 474.665 T 3 FF (;) 241.56 474.665 T 72 479.998352 360 9 CR 1 G 72 479.998352 360 9 NF 0 G 3 FF (/*) 91.224 486.83 T 0.6667 G 422.91 484.5 M 422.91 489.75 L 432 484.5 L 422.91 479.25 L F 422.91 484.5 M 108 484.5 L S 72 498.998291 360 9 CR 1 G 72 498.998291 360 9 NF 0 G 3 FF (*/) 90.0 505.825 T 0.6667 G 117.09 503.5 M 117.09 498.25 L 108 503.5 L 117.09 508.75 L F 432 503.5 M 117.09 503.5 L S 0 0 612 792 CR 0 G 3 FF (Remo) 144.0 495.665 T (v) 167.74 495.665 T (e the port record from name) 172.59 495.665 T 5 FF 284.5 495.665 T 3 FF (port hash table) 294.37 495.665 T ([115]) 77.34 516.665 T (for \() 144.0 516.665 T 4 FF (pr) 161.49 516.665 T (e) 170.01 516.665 T (v) 174.3 516.665 T 3 FF ( = &) 178.74 516.665 T 4 FF (name_to_port) 197.16 516.665 T 3 FF ([N) 253.27 516.665 T (AME_HASH\() 263.47 516.665 T 4 FF (this) 321.24 516.665 T 5 FF 335.69 516.665 T 4 FF (pr_name) 345.56 516.665 T 3 FF (\)]; \() 381.11 516.665 T 4 FF (this) 396.38 516.665 T 3 FF ( = ) 410.83 516.665 T (*) 198.0 526.665 T 4 FF (pr) 203.0 526.665 T (e) 211.52 526.665 T (v) 215.81 526.665 T 3 FF (\) != NULL;) 220.25 526.665 T 4 FF ( pr) 266.99 526.665 T (e) 278.01 526.665 T (v) 282.301 526.665 T 3 FF ( = &) 286.741 526.665 T 4 FF (this) 305.161 526.665 T 5 FF 319.611 526.665 T 4 FF (pr_npne) 329.481 526.665 T (xt) 362.611 526.665 T 3 FF (\)) 369.831 526.665 T ([116]) 77.34 538.665 T (if \() 180.0 538.665 T 4 FF (this) 191.94 538.665 T 5 FF 206.39 538.665 T 4 FF (pr_port) 216.26 538.665 T 3 FF ( == ) 246.82 538.665 T 4 FF (port) 263.1 538.665 T 3 FF (\)) 279.77 538.665 T ([117]) 77.34 550.665 T (break;) 216.0 550.665 T ([118]) 77.34 562.665 T (if \() 144.0 562.665 T 4 FF (this) 155.94 562.665 T 3 FF ( == NULL\)) 170.39 562.665 T ([119]) 77.34 574.665 T 1 FF (quit) 180.0 574.665 T 3 FF (\(1, \322) 197.23 574.665 T 1 FF (machid) 215.0 574.665 T 3 FF (: ) 246.67 574.665 T 1 FF (port_destr) 251.95 574.665 T (oy) 296.76 574.665 T 3 FF (: didn't \336nd port\\n\323\);) 306.76 574.665 T ([120]) 77.34 586.665 T (*) 144.0 586.665 T 4 FF (pr) 149.0 586.665 T (e) 157.52 586.665 T (v) 161.81 586.665 T 3 FF ( = ) 166.25 586.665 T 4 FF (this) 176.89 586.665 T 5 FF 191.34 586.665 T 4 FF (pr_npne) 201.21 586.665 T (xt) 234.34 586.665 T 3 FF (;) 241.56 586.665 T 72 591.997864 360 9 CR 1 G 72 591.997864 360 9 NF 0 G 3 FF (/*) 91.224 598.829 T 0.6667 G 422.91 596.5 M 422.91 601.75 L 432 596.5 L 422.91 591.25 L F 422.91 596.5 M 108 596.5 L S 72 610.997803 360 9 CR 1 G 72 610.997803 360 9 NF 0 G 3 FF (*/) 90.0 617.824 T 0.6667 G 117.09 615.5 M 117.09 610.25 L 108 615.5 L 117.09 620.75 L F 432 615.5 M 117.09 615.5 L S 0 0 612 792 CR 0 G 3 FF (De-allocate the dead name) 144.0 607.664 T ([121]) 77.34 628.664 T 4 FF (kr) 144.0 628.664 T 3 FF ( = ) 152.33 628.664 T 1 FF (mach_port_mod_r) 162.97 628.664 T (efs) 242.78 628.664 T 3 FF (\() 254.44 628.664 T 1 FF (mach_task_self) 257.77 628.664 T 3 FF (\(\), ) 323.32 628.664 T 4 FF (port) 334.98 628.664 T 3 FF (, ) 351.65 628.664 T (MA) 198.0 638.664 T (CH_POR) 213.71 638.664 T (T_RIGHT_DEAD_N) 251.451 638.664 T (AME, \320 ) 337.751 638.664 T (\() 198.0 648.664 T 4 FF (this) 201.33 648.664 T 5 FF 215.78 648.664 T 4 FF (pr_ur) 225.65 648.664 T (efs) 248.06 648.664 T 3 FF ( + 1\)\);) 259.17 648.664 T ([122]) 77.34 660.664 T (if \() 144.0 660.664 T 4 FF (kr) 155.94 660.664 T 3 FF ( != KERN_SUCCESS\)) 164.27 660.664 T ([123]) 77.34 672.664 T 1 FF (quit) 180.0 672.664 T 3 FF (\(1, \322) 197.23 672.664 T 1 FF (machid) 215.0 672.664 T 3 FF (: ) 246.67 672.664 T 1 FF (port_destr) 251.95 672.664 T (oy) 296.76 672.664 T 3 FF (: ) 306.76 672.664 T 1 FF (mach_port_mod_r) 312.04 672.664 T (efs) 391.85 672.664 T 3 FF (: ) 403.51 672.664 T (%s\\n\323, mach_error_string\() 234.0 682.664 T 4 FF (kr) 340.64 682.664 T 3 FF (\)\);) 348.97 682.664 T ([124]) 77.34 694.664 T (free \(\(char *\) ) 144.0 694.664 T 4 FF (this) 199.24 694.664 T 3 FF (\);) 213.69 694.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 48 48 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (44 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Basic IPC\320Based Ser) 180.0 55.824 T (v) 260.91 55.824 T (ers) 265.32 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([125]) 185.34 112.651 T (}) 216.0 112.651 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (T) 180.0 141.984 T (op-Le) 186.901 141.984 T (v) 216.721 141.984 T (el Ser) 222.601 141.984 T (v) 251.473 141.984 T (er Routines) 257.353 141.984 T 180 151.983902 360 9 CR 1 G 180 151.983902 360 9 NF 0 G 3 FF (/*) 199.224 158.815 T 3 SL 0.6667 G 530.91 156.48 M 530.91 161.73 L 540 156.48 L 530.91 151.23 L F 530.91 156.48 M 216 156.48 L S 180 170.983841 360 9 CR 1 G 180 170.983841 360 9 NF 0 G 3 FF (*/) 198.0 177.81 T 0.6667 G 225.09 175.48 M 225.09 170.23 L 216 175.48 L 225.09 180.73 L F 540 175.48 M 225.09 175.48 L S 0 0 612 792 CR 0 G 3 FF (Serv) 216.0 167.651 T (er functions for the ) 234.18 167.651 T 0 FF (machid) 313.05 167.651 T 3 FF ( interf) 344.72 167.651 T (ace.) 368.78 167.651 T ([126]) 185.34 188.65 T (k) 216.0 188.65 T (ern_return_t) 220.9 188.65 T 0 FF ( do_r) 270.33 188.65 T (egister ) 292.65 188.65 T 3 FF (\(mach_port_t ) 323.47 188.65 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF (server) 379.85 188.65 T 3 FF (, mach_port_t ) 404.44 188.65 T 5 FF (port) 462.49 188.65 T 3 FF (, ) 479.16 188.65 T 5 FF (mac) 484.16 188.65 T (h_id_t) 500.67 188.65 T 3 FF ( ) 526.23 188.65 T (*) 270.0 198.65 T 5 FF (namep) 275.0 198.65 T 3 FF (\)) 301.66 198.65 T ([127]) 185.34 210.65 T ({) 216.0 210.65 T ([128]) 185.34 222.65 T 5 FF (mac) 252.0 222.65 T (h_id_t) 268.51 222.65 T (name) 396.0 222.65 T 3 FF (;) 417.66 222.65 T 180 227.983597 360 9 CR 1 G 180 227.983597 360 9 NF 0 G 3 FF (/*) 199.224 234.815 T 0.6667 G 530.91 232.48 M 530.91 237.73 L 540 232.48 L 530.91 227.23 L F 530.91 232.48 M 216 232.48 L S 0 0 612 792 CR 0 G 3 FF 252 243.650223 M 1.085388 0 32 (W) widthshow 260.640442 243.650223 M 1.085388 0 32 (e ha) widthshow 277.905945 243.650223 M 1.085388 0 32 (v) widthshow 282.756042 243.650223 M 1.085388 0 32 (e a port right that must be consumed. ) widthshow 0 FF 442.259155 243.650223 M 1.085388 0 32 (name_lookup) widthshow 3 FF 500.049133 243.650223 M 1.085388 0 32 ( does this) widthshow 180 256.983459 360 9 CR 1 G 180 256.983459 360 9 NF 0 G 3 FF (*/) 198.0 263.81 T 0.6667 G 225.09 261.48 M 225.09 256.23 L 216 261.48 L 225.09 266.73 L F 540 261.48 M 225.09 261.48 L S 0 0 612 792 CR 0 G 3 FF (for us.) 252.0 253.65 T ([129]) 185.34 274.65 T 5 FF (name) 252.0 274.65 T 3 FF ( = ) 273.66 274.65 T 0 FF (name_lookup) 284.3 274.65 T 3 FF (\() 342.09 274.65 T 5 FF (port) 345.42 274.65 T 3 FF (\);) 362.09 274.65 T ([130]) 185.34 286.65 T (*) 252.0 286.65 T 5 FF (namep) 257.0 286.65 T 3 FF ( = ) 283.66 286.65 T 5 FF (name) 294.3 286.65 T 3 FF (;) 315.96 286.65 T ([131]) 185.34 298.65 T (return KERN_SUCCESS;) 252.0 298.65 T ([132]) 185.34 310.65 T (}) 216.0 310.65 T ([133]) 185.34 322.65 T (k) 216.0 322.65 T (ern_return_t ) 220.9 322.65 T 0 FF (do_lookup ) 272.83 322.65 T 3 FF (\(mach_port_t ) 320.35 322.65 T 5 FF (server) 376.73 322.65 T 3 FF (, mach_id_t ) 401.32 322.65 T 5 FF (name) 451.04 322.65 T 3 FF (, mach_port_t ) 472.7 322.65 T (*) 270.0 332.65 T 5 FF (portp) 275.0 332.65 T 3 FF (\)) 296.67 332.65 T ([134]) 185.34 344.65 T ({) 216.0 344.65 T ([135]) 185.34 356.65 T (mach_port_t) 252.0 356.65 T 5 FF (port) 396.0 356.65 T 3 FF (;) 412.67 356.65 T ([136]) 185.34 368.65 T (k) 252.0 368.65 T (ern_return_t) 256.9 368.65 T 5 FF (kr) 396.0 368.65 T 3 FF (;) 404.33 368.65 T 180 373.98291 360 9 CR 1 G 180 373.98291 360 9 NF 0 G 3 FF (/*) 199.224 380.814 T 0.6667 G 530.91 378.48 M 530.91 383.73 L 540 378.48 L 530.91 373.23 L F 530.91 378.48 M 216 378.48 L S 0 0 612 792 CR 0 G 3 FF 252 389.649536 M 1.640778 0 32 (W) widthshow 260.640442 389.649536 M 1.640778 0 32 (e must return a port right reference to put into the reply message.) widthshow 180 402.982788 360 9 CR 1 G 180 402.982788 360 9 NF 0 G 3 FF (*/) 198.0 409.809 T 0.6667 G 225.09 407.48 M 225.09 402.23 L 216 407.48 L 225.09 412.73 L F 540 407.48 M 225.09 407.48 L S 0 0 612 792 CR 0 G 0 FF (port_lookup) 252.0 399.649 T 3 FF ( returns a reference for us.) 304.79 399.649 T ([137]) 185.34 420.649 T 5 FF (kr) 252.0 420.649 T 3 FF ( = ) 260.33 420.649 T 0 FF (port_lookup ) 270.97 420.649 T 3 FF (\() 326.26 420.649 T 5 FF (name) 329.59 420.649 T 3 FF (, &) 351.25 420.649 T 5 FF (port) 364.03 420.649 T 3 FF (\);) 380.7 420.649 T ([138]) 185.34 432.649 T (if \() 252.0 432.649 T 5 FF (kr) 263.94 432.649 T 3 FF ( != KERN_SUCCESS\)) 272.27 432.649 T ([139]) 185.34 444.649 T (return ) 288.0 444.649 T 5 FF (kr) 314.38 444.649 T 3 FF (;) 322.71 444.649 T ([140]) 185.34 456.649 T (*) 252.0 456.649 T 5 FF (portp) 257.0 456.649 T 3 FF ( = ) 278.67 456.649 T 5 FF (port) 289.31 456.649 T 3 FF (;) 305.98 456.649 T ([141]) 185.34 468.649 T (return KERN_SUCCESS;) 252.0 468.649 T ([142]) 185.34 480.649 T (}) 216.0 480.649 T 4 FF (Noti\336cation Routines) 180.0 509.982 T 180 519.982422 360 9 CR 1 G 180 519.982422 360 9 NF 0 G 3 FF (/*) 199.224 526.814 T 0.6667 G 530.91 524.48 M 530.91 529.73 L 540 524.48 L 530.91 519.23 L F 530.91 524.48 M 216 524.48 L S 0 0 612 792 CR 0 G 3 FF 216 535.649048 M 1.538879 0 32 (Serv) widthshow 234.180084 535.649048 M 1.538879 0 32 (er functions for the noti\336cation interf) widthshow 390.364563 535.649048 M 1.538879 0 32 (ace. W) widthshow 418.863892 535.649048 M 1.538879 0 32 (e should only get dead-name) widthshow 180 548.9823 360 9 CR 1 G 180 548.9823 360 9 NF 0 G 3 FF (*/) 198.0 555.809 T 0.6667 G 225.09 553.48 M 225.09 548.23 L 216 553.48 L 225.09 558.73 L F 540 553.48 M 225.09 553.48 L S 0 0 612 792 CR 0 G 3 FF (noti\336cations.) 216.0 545.649 T ([143]) 185.34 566.649 T (k) 216.0 566.649 T (ern_return_t ) 220.9 566.649 T 0 FF (do_mach_notify_dead_name) 272.83 566.649 T 3 FF (\(mach_port_t ) 395.61 566.649 T 5 FF (notify) 451.99 566.649 T 3 FF (, mach_port_t ) 474.12 566.649 T 5 FF (name) 270.0 576.649 T 3 FF (\)) 291.66 576.649 T ([144]) 185.34 588.649 T ({) 216.0 588.649 T 180 593.982056 360 9 CR 1 G 180 593.982056 360 9 NF 0 G 3 FF (/*) 199.224 600.813 T 0.6667 G 530.91 598.48 M 530.91 603.73 L 540 598.48 L 530.91 593.23 L F 530.91 598.48 M 216 598.48 L S 0 0 612 792 CR 0 G 3 FF 252 609.648682 M 1.379929 0 32 (The dead-name noti\336cation generated an e) widthshow 428.979736 609.648682 M 1.379929 0 32 (xtra reference for the dead) widthshow 180 622.981934 360 9 CR 1 G 180 622.981934 360 9 NF 0 G 3 FF (*/) 198.0 629.808 T 0.6667 G 225.09 627.48 M 225.09 622.23 L 216 627.48 L 225.09 632.73 L F 540 627.48 M 225.09 627.48 L S 0 0 612 792 CR 0 G 3 FF (name. ) 252.0 619.649 T 0 FF (port_destr) 278.66 619.649 T (oy) 323.47 619.649 T 3 FF ( consumes it for us.) 333.47 619.649 T ([145]) 185.34 640.649 T 0 FF (port_destr) 252.0 640.649 T (oy) 296.81 640.649 T 3 FF (\() 306.81 640.649 T 5 FF (name) 310.14 640.649 T 3 FF (\);) 331.8 640.649 T ([146]) 185.34 652.649 T (return KERN_SUCCESS;) 252.0 652.649 T ([147]) 185.34 664.648 T (}) 216.0 664.648 T ([148]) 185.34 676.648 T (k) 216.0 676.648 T (ern_return_t ) 220.9 676.648 T 0 FF (do_mach_notify_port_deleted) 272.83 676.648 T 3 FF (\(mach_port_t ) 400.6 676.648 T 5 FF (notify) 456.98 676.648 T 3 FF (, mach_port_t ) 479.11 676.648 T 5 FF (name) 270.0 686.648 T 3 FF (\)) 291.66 686.648 T ([149]) 185.34 698.648 T ({) 216.0 698.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 49 49 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (45 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Single-Thr) 72.0 55.824 T (eaded Ser) 113.346 55.824 T (v) 151.002 55.824 T (er Example) 155.412 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([150]) 77.34 114.667 T 1 FF (quit) 144.0 114.667 T 3 FF (\(1, \322) 161.23 114.667 T 1 FF (machid) 179.0 114.667 T 3 FF (: do_mach_notify_port_deleted\\n\323\);) 210.67 114.667 T ([151]) 77.34 126.667 T (return KERN_F) 144.0 126.667 T (AILURE;) 207.42 126.667 T ([152]) 77.34 138.667 T (}) 108.0 138.667 T ([153]) 77.34 150.666 T (k) 108.0 150.666 T (ern_return_t ) 112.9 150.666 T 1 FF (do_mach_notify_msg_accepted) 164.83 150.666 T 3 FF (\(mach_port_t ) 298.15 150.666 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (notify) 354.53 150.666 T 3 FF (, ) 376.66 150.666 T (mach_port_t ) 162.0 160.666 T 4 FF (name) 215.05 160.666 T 3 FF (\)) 236.71 160.666 T ([154]) 77.34 172.666 T ({) 108.0 172.666 T ([155]) 77.34 184.666 T 1 FF (quit) 144.0 184.666 T 3 FF (\(1, \322) 161.23 184.666 T 1 FF (machid) 179.0 184.666 T 3 FF (: ) 210.67 184.666 T 1 FF (do_mach_notify_msg_accepted) 215.95 184.666 T 3 FF (\\n\323\);) 349.27 184.666 T ([156]) 77.34 196.666 T (return KERN_F) 144.0 196.666 T (AILURE;) 207.42 196.666 T ([157]) 77.34 208.666 T (}) 108.0 208.666 T ([158]) 77.34 220.666 T (k) 108.0 220.666 T (ern_return_t ) 112.9 220.666 T 1 FF (do_mach_notify_port_destr) 164.83 220.666 T (oy) 283.53 220.666 T (ed) 293.43 220.666 T 3 FF (\(mach_port_t ) 303.43 220.666 T 4 FF (notify) 359.81 220.666 T 3 FF (, ) 381.941 220.666 T (mach_port_t ) 162.0 230.666 T 4 FF (port) 215.05 230.666 T 3 FF (\)) 231.72 230.666 T ([159]) 77.34 242.666 T ({) 108.0 242.666 T ([160]) 77.34 254.666 T 1 FF (quit) 144.0 254.666 T 3 FF (\(1, \322) 161.23 254.666 T 1 FF (machid) 179.0 254.666 T 3 FF (: ) 210.67 254.666 T 1 FF (do_mach_notify_port_destr) 215.95 254.666 T (oy) 334.65 254.666 T (ed) 344.55 254.666 T 3 FF (\\n\323\);) 354.55 254.666 T ([161]) 77.34 266.666 T (return KERN_F) 144.0 266.666 T (AILURE;) 207.42 266.666 T ([162]) 77.34 278.666 T (}) 108.0 278.666 T ([163]) 77.34 290.666 T (k) 108.0 290.666 T (ern_return_t ) 112.9 290.666 T 1 FF (do_mach_notify_no_senders) 164.83 290.666 T 3 FF (\(mach_port_t ) 286.5 290.666 T 4 FF (notify) 342.88 290.666 T 3 FF (, ) 365.01 290.666 T (mach_port_mscount_t ) 162.0 300.666 T 4 FF (mscount) 253.94 300.666 T 3 FF (\)) 287.27 300.666 T ([164]) 77.34 312.666 T ({) 108.0 312.666 T ([165]) 77.34 324.666 T 1 FF (quit) 144.0 324.666 T 3 FF (\(1, \322) 161.23 324.666 T 1 FF (machid) 179.0 324.666 T 3 FF (: ) 210.67 324.666 T 1 FF (do_mach_notify_no_senders) 215.95 324.666 T 3 FF (\\n\323\);) 337.62 324.666 T ([166]) 77.34 336.665 T (return KERN_F) 144.0 336.665 T (AILURE;) 207.42 336.665 T ([167]) 77.34 348.665 T (}) 108.0 348.665 T ([168]) 77.34 360.665 T (k) 108.0 360.665 T (ern_return_t ) 112.9 360.665 T 1 FF (do_mach_notify_send_once) 164.83 360.665 T 3 FF (\(mach_port_t ) 282.61 360.665 T 4 FF (port) 338.99 360.665 T 3 FF (\)) 355.66 360.665 T ([169]) 77.34 372.665 T ({) 108.0 372.665 T ([170]) 77.34 384.665 T 1 FF (quit) 144.0 384.665 T 3 FF (\(1, \322) 161.23 384.665 T 1 FF (machid) 179.0 384.665 T 3 FF (: ) 210.67 384.665 T 1 FF (do_mach_notify_send_once) 215.95 384.665 T 3 FF (\\n\323\);) 333.73 384.665 T ([171]) 77.34 396.665 T (return KERN_F) 144.0 396.665 T (AILURE;) 207.42 396.665 T ([172]) 77.34 408.665 T (}) 108.0 408.665 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Ser) 72.0 437.998 T (v) 89.208 437.998 T (er Loop and Main Pr) 95.088 437.998 T (ogram) 203.544 437.998 T 3 FF 72 454.664978 M 0.357239 0 32 (A custom message de-multiple) widthshow 196.521805 454.664978 M 0.357239 0 32 (xing routine \() widthshow 1 FF 251.676285 454.664978 M 0.357239 0 32 (machid_demux) widthshow 3 FF 317.236267 454.664978 M 0.357239 0 32 (\) is pro) widthshow 346.130859 454.664978 M 0.357239 0 32 (vided so that a single) widthshow 72 466.664917 M 0.537216 0 32 (serv) widthshow 88.510086 466.664917 M 0.537216 0 32 (er loop may service both noti\336cation and client request messages. The de-multiple) widthshow 423.669556 466.664917 M 0.537216 0 32 (x-) widthshow 72 478.664856 M 0.953552 0 32 (ing routine merely dif) widthshow 162.1008 478.664856 M 0.953552 0 32 (ferentiates the type on the basis of the destination port, then calls) widthshow (the MIG generated de-multiple) 72.0 490.665 T (xing routine for messages associated with that port.) 195.99 490.665 T 72 501.998108 360 9 CR 1 G 72 501.998108 360 9 NF 0 G 3 FF (/*) 91.224 508.829 T 3 SL 0 SC 0.6667 G 422.91 506.5 M 422.91 511.75 L 432 506.5 L 422.91 501.25 L F 422.91 506.5 M 108 506.5 L S 72 520.998047 360 9 CR 1 G 72 520.998047 360 9 NF 0 G 3 FF (*/) 90.0 527.824 T 0.6667 G 117.09 525.5 M 117.09 520.25 L 108 525.5 L 117.09 530.75 L F 432 525.5 M 117.09 525.5 L S 0 0 612 792 CR 0 G 3 FF (Main serv) 108.0 517.665 T (er loop support.) 148.12 517.665 T ([173]) 77.34 538.665 T (static mach_port_t) 108.0 538.665 T 4 FF (service) 288.0 538.665 T 3 FF (;) 316.32 538.665 T 72 543.997986 360 9 CR 1 G 72 543.997986 360 9 NF 0 G 3 FF (/*) 90.0 550.829 T 0.6667 G 422.91 548.5 M 422.91 553.75 L 432 548.5 L 422.91 543.25 L F 422.91 548.5 M 288 548.5 L S 72 562.997925 360 9 CR 1 G 72 562.997925 360 9 NF 0 G 3 FF (*/) 90.0 569.824 T 0.6667 G 297.09 567.5 M 297.09 562.25 L 288 567.5 L 297.09 572.75 L F 432 567.5 M 297.09 567.5 L S 0 0 612 792 CR 0 G 3 FF (our o) 288.0 559.665 T (wn service port) 308.58 559.665 T ([174]) 77.34 580.665 T (static mach_port_t) 108.0 580.665 T 4 FF (notify) 288.0 580.665 T 3 FF (;) 310.78 580.665 T 72 585.997864 360 9 CR 1 G 72 585.997864 360 9 NF 0 G 3 FF (/*) 90.0 592.829 T 0.6667 G 422.91 590.5 M 422.91 595.75 L 432 590.5 L 422.91 585.25 L F 422.91 590.5 M 288 590.5 L S 72 604.997803 360 9 CR 1 G 72 604.997803 360 9 NF 0 G 3 FF (*/) 90.0 611.824 T 0.6667 G 297.09 609.5 M 297.09 604.25 L 288 609.5 L 297.09 614.75 L F 432 609.5 M 297.09 609.5 L S 0 0 612 792 CR 0 G 3 FF (our noti\336cation port) 288.0 601.665 T ([175]) 77.34 622.664 T (static boolean_t ) 108.0 622.664 T 1 FF (machid_demux) 173.55 622.664 T 3 FF ( \(mach_msg_header_t *) 239.11 622.664 T 4 FF (r) 335.2 622.664 T (equest) 338.72 622.664 T 3 FF (, ) 364.27 622.664 T (mach_msg_header_t *) 162.0 632.664 T 4 FF (r) 252.26 632.664 T (eply) 255.78 632.664 T 3 FF (\)) 272.44 632.664 T ([176]) 77.34 644.664 T ({) 108.0 644.664 T 72 649.99762 360 9 CR 1 G 72 649.99762 360 9 NF 0 G 3 FF (/*) 91.224 656.829 T 0.6667 G 422.91 654.5 M 422.91 659.75 L 432 654.5 L 422.91 649.25 L F 422.91 654.5 M 108 654.5 L S 72 668.997559 360 9 CR 1 G 72 668.997559 360 9 NF 0 G 3 FF (*/) 90.0 675.824 T 0.6667 G 117.09 673.5 M 117.09 668.25 L 108 673.5 L 117.09 678.75 L F 432 673.5 M 117.09 673.5 L S 0 0 612 792 CR 0 G 3 FF 144 665.664246 M -0.003403 0 32 (Handle a request message based on the port from which it w) widthshow 385.202637 665.664246 M -0.003403 0 32 (as recei) widthshow 415.209412 665.664246 M -0.003403 0 32 (v) widthshow 420.059479 665.664246 M -0.003403 0 32 (ed.) widthshow ([177]) 77.34 686.664 T (if \() 144.0 686.664 T 4 FF (r) 155.94 686.664 T (equest) 159.46 686.664 T 6 (Symbol) 10 1 mymakefontmetric 6 FF 185.01 686.664 T 4 FF (msgh_local_port) 194.88 686.664 T 3 FF ( == ) 262.66 686.664 T 4 FF (service) 278.94 686.664 T 3 FF (\)) 307.26 686.664 T ([178]) 77.34 698.664 T (return ) 180.0 698.664 T 1 FF (machid_ser) 206.38 698.664 T (v) 255.72 698.664 T (er ) 260.62 698.664 T 3 FF (\() 272.0 698.664 T 4 FF (r) 275.33 698.664 T (equest) 278.85 698.664 T 3 FF (, ) 304.4 698.664 T 4 FF (r) 309.4 698.664 T (eply) 312.921 698.664 T 3 FF (\);) 329.581 698.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 50 50 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (46 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Basic IPC\320Based Ser) 180.0 55.824 T (v) 260.91 55.824 T (ers) 265.32 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([179]) 185.34 112.651 T (else if \() 252.0 112.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (r) 281.99 112.651 T (equest) 285.51 112.651 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 311.06 112.651 T 4 FF (msgh_local_port) 320.93 112.651 T 3 FF ( == ) 388.71 112.651 T 4 FF (notify) 404.99 112.651 T 3 FF (\)) 427.77 112.651 T ([180]) 185.34 124.651 T (return ) 288.0 124.651 T 0 FF (notify_ser) 314.38 124.651 T (v) 357.05 124.651 T (er ) 361.95 124.651 T 3 FF (\() 373.33 124.651 T 4 FF (r) 376.66 124.651 T (equest) 380.18 124.651 T 3 FF (, ) 405.73 124.651 T 4 FF (r) 410.73 124.651 T (eply) 414.251 124.651 T 3 FF (\);) 430.911 124.651 T ([181]) 185.34 136.651 T (else) 252.0 136.651 T ([182]) 185.34 148.65 T 0 FF (quit) 288.0 148.65 T 3 FF (\(1, \322machid: ) 305.23 148.65 T 0 FF (machid_demux) 357.72 148.65 T 3 FF (: bad local port %x\\n\323,) 423.28 148.65 T 4 FF ( ) 514.1 148.65 T (r) 342.0 158.65 T (equest) 345.52 158.65 T 5 FF 371.07 158.65 T 4 FF (msgh_local_port) 380.94 158.65 T 3 FF (\);) 448.72 158.65 T ([183]) 185.34 170.65 T (}) 216.0 170.65 T 180 175.983643 360 9 CR 1 G 180 175.983643 360 9 NF 0 G 3 FF (/*) 199.224 182.815 T 3 SL 0.6667 G 530.91 180.48 M 530.91 185.73 L 540 180.48 L 530.91 175.23 L F 530.91 180.48 M 216 180.48 L S 180 194.983582 360 9 CR 1 G 180 194.983582 360 9 NF 0 G 3 FF (*/) 198.0 201.81 T 0.6667 G 225.09 199.48 M 225.09 194.23 L 216 199.48 L 225.09 204.73 L F 540 199.48 M 225.09 199.48 L S 0 0 612 792 CR 0 G 3 FF (Initialization and main serv) 216.0 191.65 T (er loop) 325.56 191.65 T ([184]) 185.34 212.65 T (#de\336ne MAX_MSG_SIZE) 216.0 212.65 T (512) 396.0 212.65 T 180 217.983521 360 9 CR 1 G 180 217.983521 360 9 NF 0 G 3 FF (/*) 198.0 224.815 T 0.6667 G 530.91 222.48 M 530.91 227.73 L 540 222.48 L 530.91 217.23 L F 530.91 222.48 M 396 222.48 L S 0 0 612 792 CR 0 G 3 FF 396 233.650146 M 1.747971 0 32 (An upper bound on messages that) widthshow 180 246.983398 360 9 CR 1 G 180 246.983398 360 9 NF 0 G 3 FF (*/) 198.0 253.81 T 0.6667 G 405.09 251.48 M 405.09 246.23 L 396 251.48 L 405.09 256.73 L F 540 251.48 M 405.09 251.48 L S 0 0 612 792 CR 0 G 3 FF (we handle) 396.0 243.65 T ([185]) 185.34 264.65 T (int ) 216.0 264.65 T 0 FF (main) 229.06 264.65 T 3 FF ( \(int ) 250.73 264.65 T 4 FF (ar) 269.62 264.65 T (gc) 278.14 264.65 T 3 FF (, char *) 287.58 264.65 T 4 FF (ar) 317.29 264.65 T (gv) 325.81 264.65 T 3 FF ([]\)) 335.25 264.65 T ([186]) 185.34 276.65 T ({) 216.0 276.65 T ([187]) 185.34 288.65 T (mach_port_t) 252.0 288.65 T 4 FF (pset) 396.0 288.65 T 3 FF (;) 412.11 288.65 T ([188]) 185.34 300.65 T (k) 252.0 300.65 T (ern_return_t) 256.9 300.65 T 4 FF (kr) 396.0 300.65 T 3 FF (;) 404.33 300.65 T 180 305.983154 360 9 CR 1 G 180 305.983154 360 9 NF 0 G 3 FF (/*) 199.224 312.814 T 0.6667 G 530.91 310.48 M 530.91 315.73 L 540 310.48 L 530.91 305.23 L F 530.91 310.48 M 216 310.48 L S 180 324.983093 360 9 CR 1 G 180 324.983093 360 9 NF 0 G 3 FF (*/) 198.0 331.809 T 0.6667 G 225.09 329.48 M 225.09 324.23 L 216 329.48 L 225.09 334.73 L F 540 329.48 M 225.09 329.48 L S 0 0 612 792 CR 0 G 3 FF (Allocate our service port and check it into the name service.) 252.0 321.65 T ([189]) 185.34 342.65 T (\(v) 252.0 342.65 T (oid\) ) 260.13 342.65 T 0 FF (mach_port_allocate) 278.74 342.65 T 3 FF ( \() 363.17 342.65 T 0 FF (mach_task_self) 369.0 342.65 T 3 FF (\(\), ) 434.55 342.65 T (MA) 306.0 352.65 T (CH_POR) 321.71 352.65 T (T_RIGHT_RECEIVE, &) 359.451 352.65 T 4 FF (service) 461.111 352.65 T 3 FF (\);) 489.431 352.65 T ([190]) 185.34 364.65 T 4 FF (kr) 252.0 364.65 T 3 FF ( = ) 260.33 364.65 T 0 FF (netname_check_in) 270.97 364.65 T 3 FF ( \() 350.41 364.65 T 4 FF (name_server_port) 356.24 364.65 T 3 FF (, \322demoMachID\323, ) 429.56 364.65 T 0 FF (mach_task_self) 306.0 374.65 T 3 FF (\(\), ) 371.55 374.65 T 4 FF (service) 383.21 374.65 T 3 FF (\);) 411.53 374.65 T ([191]) 185.34 386.649 T (if \() 252.0 386.649 T 4 FF (kr) 263.94 386.649 T 3 FF ( != KERN_SUCCESS\)) 272.27 386.649 T ([192]) 185.34 398.649 T 0 FF (quit) 288.0 398.649 T 3 FF ( \(1, \322) 305.23 398.649 T 0 FF (machid) 325.5 398.649 T 3 FF (: ) 357.17 398.649 T 0 FF (netname_check_in) 362.45 398.649 T 3 FF (: %s\\n\323, ) 441.89 398.649 T (mach_error_string \(kr\)\);) 342.0 408.649 T 180 413.982666 360 9 CR 1 G 180 413.982666 360 9 NF 0 G 3 FF (/*) 199.224 420.814 T 0.6667 G 530.91 418.48 M 530.91 423.73 L 540 418.48 L 530.91 413.23 L F 530.91 418.48 M 216 418.48 L S 0 0 612 792 CR 0 G 3 FF 252 429.649292 M 1.454926 0 32 (Allocate a port for recei) widthshow 353.089844 429.649292 M 1.454926 0 32 (ving noti\336cations and a port set, and put the) widthshow 180 442.982544 360 9 CR 1 G 180 442.982544 360 9 NF 0 G 3 FF (*/) 198.0 449.809 T 0.6667 G 225.09 447.48 M 225.09 442.23 L 216 447.48 L 225.09 452.73 L F 540 447.48 M 225.09 447.48 L S 0 0 612 792 CR 0 G 3 FF (service port and the notify port into the port set.) 252.0 439.649 T ([193]) 185.34 460.649 T (\(v) 252.0 460.649 T (oid\) ) 260.13 460.649 T 0 FF (mach_port_allocate) 278.74 460.649 T 3 FF (\() 363.17 460.649 T 0 FF (mach_task_self) 366.5 460.649 T 3 FF (\(\), ) 432.05 460.649 T (MA) 306.0 470.649 T (CH_POR) 321.71 470.649 T (T_RIGHT_RECEIVE, &) 359.451 470.649 T 4 FF (notify) 461.111 470.649 T 3 FF (\);) 483.891 470.649 T ([194]) 185.34 482.649 T (\(v) 252.0 482.649 T (oid\) ) 260.13 482.649 T 0 FF (mach_port_allocate) 278.74 482.649 T 3 FF (\() 363.17 482.649 T 0 FF (mach_task_self) 366.5 482.649 T 3 FF (\(\), ) 432.05 482.649 T (MA) 306.0 492.649 T (CH_POR) 321.71 492.649 T (T_RIGHT_POR) 359.451 492.649 T (T_SET) 424.961 492.649 T (, &) 453.111 492.649 T 4 FF (pset) 465.891 492.649 T 3 FF (\);) 482.001 492.649 T ([195]) 185.34 504.649 T (\(v) 252.0 504.649 T (oid\) ) 260.13 504.649 T 0 FF (mach_port_mo) 278.74 504.649 T (v) 343.63 504.649 T (e_member) 348.53 504.649 T 3 FF (\() 393.51 504.649 T 0 FF (mach_task_self) 396.84 504.649 T 3 FF (\(\), ) 462.39 504.649 T 4 FF (service) 474.05 504.649 T 3 FF (, ) 502.37 504.649 T 4 FF (pset) 507.37 504.649 T 3 FF (\);) 523.48 504.649 T ([196]) 185.34 516.649 T (\(v) 252.0 516.649 T (oid\) ) 260.13 516.649 T 0 FF (mach_port_mo) 278.74 516.649 T (v) 343.63 516.649 T (e_member) 348.53 516.649 T 3 FF (\() 393.51 516.649 T 0 FF (mach_task_self) 396.84 516.649 T 3 FF (\(\), ) 462.39 516.649 T 4 FF (notify) 474.05 516.649 T 3 FF (, ) 496.181 516.649 T 4 FF (pset) 501.181 516.649 T 3 FF (\);) 517.291 516.649 T ([197]) 185.34 528.649 T 4 FF (kr) 252.0 528.649 T 3 FF ( = ) 260.33 528.649 T 0 FF (mach_msg_ser) 270.97 528.649 T (v) 334.19 528.649 T (er) 339.09 528.649 T 3 FF (\() 347.97 528.649 T 0 FF (machid_demux) 351.3 528.649 T 3 FF (, MAX_MSG_SIZE, ) 416.86 528.649 T 4 FF (pset) 502.97 528.649 T 3 FF (\);) 519.08 528.649 T ([198]) 185.34 540.649 T 0 FF (quit) 252.0 540.649 T 3 FF (\(1, \322machid: mach_msg_serv) 269.23 540.649 T (er: %s\\n\323, mach_error_string\() 386.56 540.649 T 4 FF (kr) 506.25 540.649 T 3 FF (\)\);) 514.58 540.649 T ([199]) 185.34 552.649 T (return 0;) 252.0 552.649 T ([200]) 185.34 564.649 T (}) 216.0 564.649 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Sample Client) 180.0 593.982 T 180 603.981873 360 9 CR 1 G 180 603.981873 360 9 NF 0 G 3 FF (/*) 199.224 610.813 T 0.6667 G 530.91 608.48 M 530.91 613.73 L 540 608.48 L 530.91 603.23 L F 530.91 608.48 M 216 608.48 L S 0 0 612 792 CR 0 G 3 FF (File: ) 216.0 619.649 T 0 FF (mclient.c) 236.84 619.649 T 3 FF (Author: Richard P) 216.0 629.648 T (. Dra) 288.221 629.648 T (v) 308.011 629.648 T (es) 312.861 629.648 T 180 642.981689 360 9 CR 1 G 180 642.981689 360 9 NF 0 G 3 FF (*/) 198.0 649.808 T 0.6667 G 225.09 647.48 M 225.09 642.23 L 216 647.48 L 225.09 652.73 L F 540 647.48 M 225.09 647.48 L S 0 0 612 792 CR 0 G 3 FF (Sample client for ) 216.0 639.648 T 0 FF (machid) 287.38 639.648 T 3 FF (.) 319.05 639.648 T ([1]) 195.34 660.648 T (#include ) 216.0 660.648 T ([2]) 195.34 672.648 T (#include ) 216.0 672.648 T ([3]) 195.34 684.648 T (#include ) 216.0 684.648 T ([4]) 195.34 696.648 T (#include ) 304.12 696.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 51 51 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (47 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Single-Thr) 72.0 55.824 T (eaded Ser) 113.346 55.824 T (v) 151.002 55.824 T (er Example) 155.412 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([5]) 87.34 114.667 T (#include ) 167.09 114.667 T ([6]) 87.34 126.667 T (#include \322) 108.0 126.667 T 1 FF (machid) 149.38 126.667 T 3 FF (.h\323) 181.05 126.667 T ([7]) 87.34 138.667 T 1 FF (main ) 108.0 138.667 T 3 FF (\(int ) 132.17 138.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (ar) 148.56 138.667 T (gc) 157.08 138.667 T 3 FF (, char *) 166.52 138.667 T 4 FF (ar) 196.23 138.667 T (gv) 204.75 138.667 T 3 FF (\)) 214.19 138.667 T ([8]) 87.34 150.666 T ({) 108.0 150.666 T ([9]) 87.34 162.666 T (mach_port_t) 144.0 162.666 T 4 FF (server) 288.0 162.666 T 3 FF (;) 312.99 162.666 T ([10]) 82.34 174.666 T (k) 144.0 174.666 T (ern_return_t) 148.9 174.666 T 4 FF (kr) 288.0 174.666 T 3 FF (;) 296.33 174.666 T 72 179.999634 360 9 CR 1 G 72 179.999634 360 9 NF 0 G 3 FF (/*) 91.224 186.831 T 3 SL 0 SC 0.6667 G 422.91 184.5 M 422.91 189.75 L 432 184.5 L 422.91 179.25 L F 422.91 184.5 M 108 184.5 L S 72 198.999573 360 9 CR 1 G 72 198.999573 360 9 NF 0 G 3 FF (*/) 90.0 205.826 T 0.6667 G 117.09 203.5 M 117.09 198.25 L 108 203.5 L 117.09 208.75 L F 432 203.5 M 117.09 203.5 L S 0 0 612 792 CR 0 G 3 FF (Lookup the port for the machid service) 144.0 195.666 T ([11]) 82.34 216.666 T 4 FF (kr) 144.0 216.666 T 3 FF ( = ) 152.33 216.666 T 1 FF (netname_look_up) 162.97 216.666 T 3 FF (\() 239.09 216.666 T 4 FF (name_server_port) 242.42 216.666 T 3 FF (, \322\323, \322demoMachID\323, ) 315.74 216.666 T (&) 198.0 226.666 T 4 FF (server) 205.78 226.666 T 3 FF (\);) 230.77 226.666 T ([12]) 82.34 238.666 T (if \() 144.0 238.666 T 4 FF (kr) 155.94 238.666 T 3 FF ( != KERN_SUCCESS\)) 164.27 238.666 T ([13]) 82.34 250.666 T 1 FF (quit) 180.0 250.666 T 3 FF (\(1, \322) 197.23 250.666 T 1 FF (mclient) 215.0 250.666 T 3 FF (: ) 246.66 250.666 T 1 FF (netname_look_up ) 251.94 250.666 T 3 FF (\(demoMachID\): %s\\n\323, ) 330.56 250.666 T (mach_error_string\() 234.0 260.666 T 4 FF (kr) 311.2 260.666 T 3 FF (\)\);) 319.53 260.666 T 72 265.999268 360 9 CR 1 G 72 265.999268 360 9 NF 0 G 3 FF (/*) 91.224 272.83 T 0.6667 G 422.91 270.5 M 422.91 275.75 L 432 270.5 L 422.91 265.25 L F 422.91 270.5 M 108 270.5 L S 72 284.999207 360 9 CR 1 G 72 284.999207 360 9 NF 0 G 3 FF (*/) 90.0 291.825 T 0.6667 G 117.09 289.5 M 117.09 284.25 L 108 289.5 L 117.09 294.75 L F 432 289.5 M 117.09 289.5 L S 0 0 612 792 CR 0 G 3 FF (Loop reading and e) 144.0 281.666 T (x) 221.33 281.666 T (ecuting commands until eof) 226.18 281.666 T ([14]) 82.34 302.666 T (for \(;;\)) 144.0 302.666 T ([15]) 82.34 314.666 T ({) 144.0 314.666 T ([16]) 82.34 326.666 T (char) 180.0 326.666 T 4 FF (command) 288.0 326.666 T 3 FF ([2];) 326.88 326.666 T ([17]) 82.34 338.666 T (mach_port_t) 180.0 338.666 T 4 FF (port) 288.0 338.666 T 3 FF (;) 304.67 338.666 T ([18]) 82.34 350.666 T (mach_id_t) 180.0 350.666 T 4 FF (name) 288.0 350.666 T 3 FF (;) 309.66 350.666 T ([19]) 82.34 362.666 T (printf \(\322) 180.0 362.666 T 1 FF (mclient) 212.49 362.666 T 3 FF (>\323\);) 244.15 362.666 T ([20]) 82.34 374.665 T (if \(scanf\(\322%1s\323, ) 180.0 374.665 T 4 FF (command) 247.47 374.665 T 3 FF (\) < 1\)) 286.35 374.665 T ([21]) 82.34 386.665 T ({) 180.0 386.665 T ([22]) 82.34 398.665 T (printf\(\322\\n\323\);) 216.0 398.665 T ([23]) 82.34 410.665 T (break;) 216.0 410.665 T ([24]) 82.34 422.665 T (}) 180.0 422.665 T ([25]) 82.34 434.665 T (switch \() 180.0 434.665 T 4 FF (command) 211.94 434.665 T 3 FF ([0]\)) 250.82 434.665 T ([26]) 82.34 446.665 T ({) 180.0 446.665 T ([27]) 82.34 458.665 T (case '?':) 180.0 458.665 T ([28]) 82.34 470.665 T (case 'h':) 180.0 470.665 T ([29]) 82.34 482.665 T (printf\(\322Commands:\\n\323\);) 216.0 482.665 T ([30]) 82.34 494.665 T (printf \(\322a) 216.0 494.665 T 288.0 494.665 T ([31]) 82.34 506.665 T (printf \(\322d ) 216.0 506.665 T 288.0 506.665 T ([32]) 82.34 518.665 T (printf \(\322r ) 216.0 518.665 T 288.0 518.665 T (gister a port to get a name\\n\323\);) 303.12 518.665 T ([33]) 82.34 530.665 T (printf \(\322l ) 216.0 530.665 T 288.0 530.665 T ([34]) 82.34 542.665 T (break;) 216.0 542.665 T ([35]) 82.34 554.665 T (case 'a':) 180.0 554.665 T 72 559.997864 360 9 CR 1 G 72 559.997864 360 9 NF 0 G 3 FF (/*) 91.224 566.829 T 0.6667 G 422.91 564.5 M 422.91 569.75 L 432 564.5 L 422.91 559.25 L F 422.91 564.5 M 108 564.5 L S 72 578.997803 360 9 CR 1 G 72 578.997803 360 9 NF 0 G 3 FF (*/) 90.0 585.824 T 0.6667 G 117.09 583.5 M 117.09 578.25 L 108 583.5 L 117.09 588.75 L F 432 583.5 M 117.09 583.5 L S 0 0 612 792 CR 0 G 3 FF (Allocate a port) 216.0 575.664 T ([36]) 82.34 596.664 T 4 FF (kr) 216.0 596.664 T 3 FF ( = ) 224.33 596.664 T 1 FF (mach_port_allocate) 234.97 596.664 T 3 FF (\() 319.4 596.664 T 1 FF (mach_task_self) 322.73 596.664 T 3 FF (\(\), ) 388.28 596.664 T (MA) 270.0 606.664 T (CH_POR) 285.71 606.664 T (T_RIGHT_RECEIVE, ) 323.451 606.664 T (&) 270.0 616.664 T 4 FF (port) 277.78 616.664 T 3 FF (\);) 294.45 616.664 T ([37]) 82.34 628.664 T (if \() 216.0 628.664 T 4 FF (kr) 227.94 628.664 T 3 FF ( == KERN_SUCCESS\)) 236.27 628.664 T ([38]) 82.34 640.664 T (printf \(\322allocated port %x\\n\323, ) 252.0 640.664 T 4 FF (port) 372.25 640.664 T 3 FF (\);) 388.92 640.664 T ([39]) 82.34 652.664 T (else) 216.0 652.664 T ([40]) 82.34 664.664 T (printf \(\322) 252.0 664.664 T 1 FF (mclient) 284.49 664.664 T 3 FF (: ) 316.15 664.664 T 1 FF (mach_port_allocate) 321.43 664.664 T 3 FF (: ) 405.86 664.664 T (%s\\n\323, mach_error_string\() 306.0 674.664 T 4 FF (kr) 412.64 674.664 T 3 FF (\)\);) 420.97 674.664 T ([41]) 82.34 686.664 T (break;) 216.0 686.664 T ([42]) 82.34 698.664 T (case 'd':) 180.0 698.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 52 52 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (48 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Basic IPC\320Based Ser) 180.0 55.824 T (v) 260.91 55.824 T (ers) 265.32 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([43]) 190.34 112.651 T (if \(scanf \(\322%x\323, &) 324.0 112.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (port) 397.86 112.651 T 3 FF (\) < 1\)) 414.53 112.651 T ([44]) 190.34 124.651 T ({) 324.0 124.651 T ([45]) 190.34 136.651 T (printf \(\322syntax error\\n\323\);) 360.0 136.651 T ([46]) 190.34 148.65 T (break;) 360.0 148.65 T ([47]) 190.34 160.65 T (}) 324.0 160.65 T 180 165.983704 360 9 CR 1 G 180 165.983704 360 9 NF 0 G 3 FF (/*) 199.224 172.815 T 3 SL 0.6667 G 530.91 170.48 M 530.91 175.73 L 540 170.48 L 530.91 165.23 L F 530.91 170.48 M 216 170.48 L S 180 184.983643 360 9 CR 1 G 180 184.983643 360 9 NF 0 G 3 FF (*/) 198.0 191.81 T 0.6667 G 225.09 189.48 M 225.09 184.23 L 216 189.48 L 225.09 194.73 L F 540 189.48 M 225.09 189.48 L S 0 0 612 792 CR 0 G 3 FF (Destro) 324.0 181.65 T (y all rights for the port) 350.56 181.65 T ([48]) 190.34 202.65 T 4 FF (kr) 324.0 202.65 T 3 FF ( = ) 332.33 202.65 T 0 FF (mach_port_destr) 342.97 202.65 T (oy) 416.11 202.65 T 3 FF (\() 426.11 202.65 T 0 FF (mach_task_self) 429.44 202.65 T 3 FF (\(\), ) 494.99 202.65 T 4 FF (port) 506.65 202.65 T 3 FF (\);) 523.32 202.65 T ([49]) 190.34 214.65 T (if \() 324.0 214.65 T 4 FF (kr) 335.94 214.65 T 3 FF ( == KERN_SUCCESS\)) 344.27 214.65 T ([50]) 190.34 226.65 T (printf \(\322de-allocated port %x\\n\323, ) 360.0 226.65 T 4 FF (port) 493.02 226.65 T 3 FF (\);) 509.69 226.65 T ([51]) 190.34 238.65 T (else) 324.0 238.65 T ([52]) 190.34 250.65 T (printf \(\322) 360.0 250.65 T 0 FF (mclient) 392.49 250.65 T 3 FF (: ) 424.15 250.65 T 0 FF (mach_port_destr) 429.43 250.65 T (oy) 502.57 250.65 T 3 FF (: ) 512.57 250.65 T (%s\\n\323, mach_error_string\() 414.0 260.65 T 4 FF (kr) 520.64 260.65 T 3 FF (\)\);) 528.97 260.65 T ([53]) 190.34 272.65 T (break;) 324.0 272.65 T ([54]) 190.34 284.65 T (case 'r':) 288.0 284.65 T ([55]) 190.34 296.65 T (if \(scanf \(\322%x\323, &) 324.0 296.65 T 4 FF (port) 397.86 296.65 T 3 FF (\) < 1\)) 414.53 296.65 T ([56]) 190.34 308.65 T ({) 324.0 308.65 T ([57]) 190.34 320.65 T (printf \(\322syntax error\\n\323\);) 360.0 320.65 T ([58]) 190.34 332.65 T (break;) 360.0 332.65 T ([59]) 190.34 344.65 T (}) 324.0 344.65 T 180 349.982849 360 9 CR 1 G 180 349.982849 360 9 NF 0 G 3 FF (/*) 199.224 356.814 T 0.6667 G 530.91 354.48 M 530.91 359.73 L 540 354.48 L 530.91 349.23 L F 530.91 354.48 M 216 354.48 L S 180 368.982788 360 9 CR 1 G 180 368.982788 360 9 NF 0 G 3 FF (*/) 198.0 375.809 T 0.6667 G 225.09 373.48 M 225.09 368.23 L 216 373.48 L 225.09 378.73 L F 540 373.48 M 225.09 373.48 L S 0 0 612 792 CR 0 G 3 FF (Get a name for the port, using a ne) 324.0 365.649 T (w send right) 462.33 365.649 T ([60]) 190.34 386.649 T 4 FF (kr) 324.0 386.649 T 3 FF ( = ) 332.33 386.649 T 0 FF (machid_r) 342.97 386.649 T (egister ) 383.9 386.649 T 3 FF (\() 414.72 386.649 T 4 FF (server) 418.05 386.649 T 3 FF (, ) 442.64 386.649 T 4 FF (port) 447.64 386.649 T 3 FF (, ) 464.31 386.649 T (MA) 378.0 396.649 T (CH_MSG_TYPE_MAKE_SEND, ) 393.71 396.649 T (&) 378.0 406.649 T 4 FF (name) 385.78 406.649 T 3 FF (\);) 407.44 406.649 T ([61]) 190.34 418.649 T (if \() 324.0 418.649 T 4 FF (kr) 335.94 418.649 T 3 FF ( == KERN_SUCCESS\)) 344.27 418.649 T ([62]) 190.34 430.649 T (printf \(\322re) 360.0 430.649 T (gister port %x => name %d\\n\323, ) 400.11 430.649 T 4 FF (port) 414.0 440.649 T 3 FF (, name\);) 430.67 440.649 T ([63]) 190.34 452.649 T (else) 324.0 452.649 T ([64]) 190.34 464.649 T (printf \(\322) 360.0 464.649 T 0 FF (mclient) 392.49 464.649 T 3 FF (: ) 424.15 464.649 T 0 FF (machid_r) 429.43 464.649 T (egister) 470.36 464.649 T 3 FF (: %s\\n\323, ) 498.68 464.649 T (mach_error_string\() 414.0 474.649 T 4 FF (kr) 491.2 474.649 T 3 FF (\)\);) 499.53 474.649 T ([65]) 190.34 486.649 T (break;) 324.0 486.649 T ([66]) 190.34 498.649 T (case 'l':) 288.0 498.649 T ([67]) 190.34 510.649 T (if \(scanf \(\322%d\323, &) 324.0 510.649 T 4 FF (name) 397.86 510.649 T 3 FF (\) < 1\)) 419.52 510.649 T ([68]) 190.34 522.649 T ({) 324.0 522.649 T ([69]) 190.34 534.649 T (printf \(\322syntax error\\n\323\);) 360.0 534.649 T ([70]) 190.34 546.649 T (break;) 360.0 546.649 T ([71]) 190.34 558.648 T (}) 324.0 558.648 T 180 563.981812 360 9 CR 1 G 180 563.981812 360 9 NF 0 G 3 FF (/*) 199.224 570.813 T 0.6667 G 530.91 568.48 M 530.91 573.73 L 540 568.48 L 530.91 563.23 L F 530.91 568.48 M 216 568.48 L S 0 0 612 792 CR 0 G 3 FF (Con) 324.0 579.648 T (v) 340.27 579.648 T (ert the name to a send right, which we don't de-) 345.12 579.648 T 180 592.981689 360 9 CR 1 G 180 592.981689 360 9 NF 0 G 3 FF (*/) 198.0 599.808 T 0.6667 G 225.09 597.48 M 225.09 592.23 L 216 597.48 L 225.09 602.73 L F 540 597.48 M 225.09 597.48 L S 0 0 612 792 CR 0 G 3 FF (allocate) 324.0 589.648 T ([72]) 190.34 610.648 T 4 FF (kr) 324.0 610.648 T 3 FF ( = ) 332.33 610.648 T 0 FF (machid_lookup ) 342.97 610.648 T 3 FF (\() 411.6 610.648 T 4 FF (server) 414.93 610.648 T 3 FF (, ) 439.52 610.648 T 4 FF (name) 444.52 610.648 T 3 FF (, &) 466.18 610.648 T 4 FF (port) 478.96 610.648 T 3 FF (\);) 495.63 610.648 T ([73]) 190.34 622.648 T (if \() 324.0 622.648 T 4 FF (kr) 335.94 622.648 T 3 FF ( == KERN_SUCCESS\)) 344.27 622.648 T ([74]) 190.34 634.648 T (printf \(\322lookup name %d => port %x\\n\323, ) 360.0 634.648 T 4 FF (name) 414.0 644.648 T 3 FF (, ) 435.66 644.648 T 4 FF (port) 440.66 644.648 T 3 FF (\);) 457.33 644.648 T ([75]) 190.34 656.648 T (else) 324.0 656.648 T ([76]) 190.34 668.648 T (printf \(\322) 360.0 668.648 T 0 FF (mclient) 392.49 668.648 T 3 FF (: ) 424.15 668.648 T 0 FF (machid_lookup) 429.43 668.648 T 3 FF (: %s\\n\323, ) 495.56 668.648 T (mach_error_string\() 414.0 678.648 T 4 FF (kr) 491.2 678.648 T 3 FF (\)\);) 499.53 678.648 T ([77]) 190.34 690.648 T (break;) 324.0 690.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 53 53 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (49 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Single-Thr) 72.0 55.824 T (eaded Ser) 113.346 55.824 T (v) 151.002 55.824 T (er Example) 155.412 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([78]) 82.34 114.667 T (}) 180.0 114.667 T ([79]) 82.34 126.667 T (}) 144.0 126.667 T ([80]) 82.34 138.667 T (e) 144.0 138.667 T (xit\(0\);) 148.29 138.667 T ([81]) 82.34 150.666 T (}) 108.0 150.666 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (Mak) 72.0 180.0 T (e\336le) 95.88 180.0 T 72 189.99971 360 9 CR 1 G 72 189.99971 360 9 NF 0 G 3 FF (/*) 91.224 196.831 T 3 SL 0 SC 0.6667 G 422.91 194.5 M 422.91 199.75 L 432 194.5 L 422.91 189.25 L F 422.91 194.5 M 108 194.5 L S 0 0 612 792 CR 0 G 3 FF (File: ) 108.0 205.666 T 1 FF (Mak) 128.84 205.666 T (e\336le) 148.74 205.666 T 3 FF (Author: Richard P) 108.0 215.666 T (. Dra) 180.221 215.666 T (v) 200.011 215.666 T (es) 204.861 215.666 T 72 228.999527 360 9 CR 1 G 72 228.999527 360 9 NF 0 G 3 FF (*/) 90.0 235.826 T 0.6667 G 117.09 233.5 M 117.09 228.25 L 108 233.5 L 117.09 238.75 L F 432 233.5 M 117.09 233.5 L S 0 0 612 792 CR 0 G 3 FF (Mak) 108.0 225.666 T (e\336le for ) 126.23 225.666 T 1 FF (machid) 160.11 225.666 T 3 FF (.) 191.78 225.666 T ([1]) 87.34 246.666 T (all : ) 108.0 246.666 T 1 FF (machid) 125.78 246.666 T 3 FF ( ) 157.45 246.666 T 1 FF (mclient) 159.95 246.666 T 3 FF ([2]) 87.34 258.666 T 1 FF (machid) 108.0 258.666 T 3 FF ( : ) 139.67 258.666 T 1 FF (machid) 147.45 258.666 T 3 FF (.o ) 179.12 258.666 T 1 FF (machidSer) 189.12 258.666 T (v) 235.13 258.666 T (er) 240.03 258.666 T 3 FF (.o) 248.36 258.666 T ([3]) 87.34 270.666 T ($\(CC\) \320o $@ ) 144.0 270.666 T 1 FF (machid) 200.71 270.666 T 3 FF (.o ) 232.38 270.666 T 1 FF (machidSer) 242.38 270.666 T (v) 288.39 270.666 T (er) 293.29 270.666 T 3 FF (.o \320lthreads \320lmach) 301.62 270.666 T ([4]) 87.34 282.666 T 1 FF (mclient) 108.0 282.666 T 3 FF ( : ) 139.66 282.666 T 1 FF (mclient) 147.44 282.666 T 3 FF (.o ) 179.1 282.666 T 1 FF (machidUser) 189.1 282.666 T 3 FF (.o) 240.21 282.666 T ([5]) 87.34 294.666 T ($\(CC\) \320o $@ ) 144.0 294.666 T 1 FF (mclient) 200.71 294.666 T 3 FF (.o ) 232.37 294.666 T 1 FF (machidUser) 242.37 294.666 T 3 FF (.o \320lmach) 293.48 294.666 T ([6]) 87.34 306.666 T 1 FF (mclient) 108.0 306.666 T 3 FF (.o : ) 139.66 306.666 T 1 FF (machid) 154.94 306.666 T 3 FF (.h) 186.61 306.666 T ([7]) 87.34 318.666 T 1 FF (machid) 108.0 318.666 T 3 FF (.h ) 139.67 318.666 T 1 FF (machidUser) 149.67 318.666 T 3 FF (.c ) 200.78 318.666 T 1 FF (machidSer) 210.22 318.666 T (v) 256.23 318.666 T (er) 261.13 318.666 T 3 FF (.c : ) 269.461 318.666 T 1 FF (machid) 284.181 318.666 T 3 FF (.defs) 315.851 318.666 T ([8]) 87.34 330.666 T (mig ) 144.0 330.666 T 1 FF (machid) 162.06 330.666 T 3 FF (.defs) 193.73 330.666 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 54 54 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (50 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Basic IPC\320Based Ser) 180.0 55.824 T (v) 260.91 55.824 T (ers) 265.32 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 55 55 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 2 SL 3.86 setmiterlimit 0 G 432 45 M 72 45 L S 2 SC 432 342 M 72 342 L S 0.25 SL 432 720 M 72 720 L S 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (51 ) widthshow 0 0 612 792 CR 1 G 72 99 360 225 NF 0 G 2 (Times-Roman) 12 1 mymakefontmetric 2 FF 72 115 M 1.19989 0 (CHAPTER 5) ashow 3 (Times-Roman) 24 1 mymakefontmetric 3 FF 180 115 M -0.479736 0 (C Threads) ashow 1 G 72 360 360 344.015991 NF 0 G 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 72 366.666626 M 2.669907 0 32 (Mach pro) widthshow 113.119995 366.666626 M 2.669907 0 32 (vides a set of lo) widthshow 186.319763 366.666626 M 2.669907 0 32 (w-le) widthshow 203.839905 366.666626 M 2.669907 0 32 (v) widthshow 208.689987 366.666626 M 2.669907 0 32 (el, language-independent primiti) widthshow 344.039948 366.666626 M 2.669907 0 32 (v) widthshow 348.890015 366.666626 M 2.669907 0 32 (es for manipulating) widthshow 72 378.666565 M 0.722458 0 32 (threads of control in support of multi-threaded programming. The C Threads package is) widthshow 72 390.666504 M 0.716125 0 32 (a run-time library that pro) widthshow 178.584595 390.666504 M 0.716125 0 32 (vides a C language interf) widthshow 281.329163 390.666504 M 0.716125 0 32 (ace to these f) widthshow 335.857605 390.666504 M 0.716125 0 32 (acilities. The constructs) widthshow 72 402.666443 M 2.123032 0 32 (pro) widthshow 85.180084 402.666443 M 2.123032 0 32 (vided are similar to those found in Mesa and Modula-2+: forking and joining of) widthshow 72 414.666382 M 0.257217 0 32 (threads, protection of critical re) widthshow 198.67897 414.666382 M 0.257217 0 32 (gions with mute) widthshow 263.493469 414.666382 M 0.257217 0 32 (x v) widthshow 276.000854 414.666382 M 0.257217 0 32 (ariables and synchronization by means) widthshow (of condition v) 72.0 426.666 T (ariables.) 127.86 426.666 T 72 468.999573 360 3.024002 CR 432 470.51 M 72 470.51 L S 0 0 612 792 CR 5 (Times-Bold) 14 1 mymakefontmetric 5 FF (Naming Con) 72.0 464.333 T (v) 147.278 464.333 T (entions) 154.138 464.333 T 4 FF 72 488.690186 M 0.391998 0 32 (An attempt has been made to use a consistent style of naming for the abstractions imple-) widthshow 72 500.690125 M 0.493042 0 32 (mented by the C Threads package. All types, macros, and functions implementing a gi) widthshow 423.669708 500.690125 M 0.493042 0 32 (v-) widthshow 72 512.690063 M 0.241196 0 32 (en abstract data type are pre\336x) widthshow 195.516083 512.690063 M 0.241196 0 32 (ed with the type name and an underscore. The name of the) widthshow (type itself is suf) 72.0 524.69 T 135.36 524.69 T (ed with ) 145.77 524.69 T 6 (Times-Italic) 10 1 mymakefontmetric 6 FF (_t ) 177.99 524.69 T 4 FF (and is de\336ned via a C typedef. Documentation of the form:) 188.27 524.69 T (typedef struct ) 108.0 548.69 T 6 FF (mute) 165.21 548.69 T (x) 184.45 548.69 T 4 FF ( {...} *) 188.89 548.69 T 6 FF (mute) 215.99 548.69 T (x_t) 235.23 548.69 T 4 FF (;) 247.45 548.69 T 72 572.68988 M 1.875916 0 32 (indicates that the ) widthshow 6 FF 147.897751 572.68988 M 1.875916 0 32 (mute) widthshow 167.137863 572.68988 M 1.875916 0 32 (x_t) widthshow 4 FF 179.357864 572.68988 M 1.875916 0 32 ( type is de\336ned as a pointer to a ) widthshow 6 FF 325.391113 572.68988 M 1.875916 0 32 (r) widthshow 328.911316 572.68988 M 1.875916 0 32 (efer) widthshow 344.091522 572.68988 M 1.875916 0 32 (ent type ) widthshow 4 FF 381.723358 572.68988 M 1.875916 0 32 (struct) widthshow 6 FF 403.943359 572.68988 M 1.875916 0 32 ( mute) widthshow 427.559387 572.68988 M 1.875916 0 32 (x) widthshow 4 FF 72 584.689819 M 0.977814 0 32 (which may itself be useful to the programmer) widthshow 260.765015 584.689819 M 0.977814 0 32 (. \(In cases where the referent type should) widthshow (be considered ) 72.0 596.69 T 6 FF (opaque) 129.76 596.69 T 4 FF (, documentation such as:) 159.2 596.69 T ( typedef... ) 108.0 620.69 T 6 FF (cthr) 150.49 620.69 T (ead_t) 166.23 620.69 T 4 FF (;) 188.45 620.69 T (is used instead.\)) 72.0 644.69 T 72 668.689575 M 0.558121 0 32 (Continuing the e) widthshow 139.636322 668.689575 M 0.558121 0 32 (xample of the ) widthshow 6 FF 198.80069 668.689575 M 0.558121 0 32 (mute) widthshow 218.040802 668.689575 M 0.558121 0 32 (x_t) widthshow 4 FF 230.260803 668.689575 M 0.558121 0 32 ( type, the functions ) widthshow 1 FF 311.65329 668.689575 M 0.558121 0 32 (mutex_alloc) widthshow 4 FF 363.313293 668.689575 M 0.558121 0 32 ( and ) widthshow 1 FF 383.869537 668.689575 M 0.558121 0 32 (mutex_fr) widthshow 423.119629 668.689575 M 0.558121 0 32 (ee) widthshow 4 FF 72 680.689514 M 0.214951 0 32 (pro) widthshow 85.180084 680.689514 M 0.214951 0 32 (vide dynamic storage allocation and de-allocation. The functions ) widthshow 1 FF 348.799713 680.689514 M 0.214951 0 32 (mutex_init) widthshow 4 FF 394.909729 680.689514 M 0.214951 0 32 ( and ) widthshow 1 FF 414.779602 680.689514 M 0.214951 0 32 (mu-) widthshow 72 692.689453 M 0.778122 0 32 (tex_clear) widthshow 4 FF 110.87001 692.689453 M 0.778122 0 32 ( pro) widthshow 127.328217 692.689453 M 0.778122 0 32 (vide initialization and \336nalization of the referent type. These functions are) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 56 56 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (52 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (C Thr) 180.0 55.824 T (eads) 203.589 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 0.561401 0 32 (useful if the programmer wishes to include the referent type itself \(rather than a pointer\)) widthshow 180 124.650574 M 0.959198 0 32 (in a lar) widthshow 209.508499 124.650574 M 0.959198 0 32 (ger structure, for more ef) widthshow 313.335449 124.650574 M 0.959198 0 32 widthshow 434.933136 124.650574 M 0.959198 0 32 (y should not be called on) widthshow 180 136.650513 M 1.002914 0 32 (objects that are dynamically allocated via ) widthshow 0 FF 354.317505 136.650513 M 1.002914 0 32 (mutex_alloc) widthshow 3 FF 405.977509 136.650513 M 1.002914 0 32 (. T) widthshow 417.290863 136.650513 M 1.002914 0 32 (ype-speci\336c functions such as) widthshow 0 FF (mutex_lock) 180.0 148.65 T 3 FF ( and ) 229.44 148.65 T 0 FF (mutex_unlock ) 248.88 148.65 T 3 FF (are also de\336ned, of course.) 311.94 148.65 T 180 190.983688 360 3.024002 CR 0.25 SL 2 SC 540 192.5 M 180 192.5 L S 0 0 612 792 CR 4 (Times-Bold) 14 1 mymakefontmetric 4 FF (Initializing the C Thr) 180.0 186.317 T (eads P) 307.708 186.317 T (ackage) 346.068 186.317 T 3 FF 180 210.674316 M 3.401642 0 32 (Initialization of the C threads package is f) widthshow 371.18158 210.674316 M 3.401642 0 32 (airly automatic, gi) widthshow 450.784973 210.674316 M 3.401642 0 32 (v) widthshow 455.635071 210.674316 M 3.401642 0 32 (en the inclusion of) widthshow 0 FF 180 222.674255 M 0.463593 0 32 (libthr) widthshow 204.270096 222.674255 M 0.463593 0 32 (eads.a) widthshow 3 FF 230.660095 222.674255 M 0.463593 0 32 ( when linking. The ) widthshow 0 FF 310.564453 222.674255 M 0.463593 0 32 (libthr) widthshow 334.834564 222.674255 M 0.463593 0 32 (eads) widthshow 3 FF 353.724548 222.674255 M 0.463593 0 32 ( library must be included when linking before) widthshow 0 FF 180 234.674194 M 1.841919 0 32 (libmach) widthshow 3 FF 214.449997 234.674194 M 1.841919 0 32 ( because ) widthshow 0 FF 254.783844 234.674194 M 1.841919 0 32 (libthr) widthshow 279.053955 234.674194 M 1.841919 0 32 (eads) widthshow 3 FF 297.943939 234.674194 M 1.841919 0 32 ( rede\336nes certain functions to operate correctly gi) widthshow 509.147522 234.674194 M 1.841919 0 32 (v) widthshow 513.99762 234.674194 M 1.841919 0 32 (en the) widthshow (presence of multiple threads.) 180.0 246.674 T 3 FF 180 270.674072 M 0.517609 0 32 (The header \336le ) widthshow 0 FF 244.032837 270.674072 M 0.517609 0 32 (cthr) widthshow 261.622925 270.674072 M 0.517609 0 32 (eads.h) widthshow 3 FF 288.572937 270.674072 M 0.517609 0 32 ( de\336nes the C threads interf) widthshow 401.321045 270.674072 M 0.517609 0 32 (ace. All programs using C threads) widthshow (must include this \336le.) 180.0 282.674 T 180 306.67395 M 0.219955 0 32 (The ) widthshow 0 FF 198.269958 306.67395 M 0.219955 0 32 (cthr) widthshow 215.860062 306.67395 M 0.219955 0 32 (ead_init) widthshow 3 FF 250.310059 306.67395 M 0.219955 0 32 ( function initializes the C threads implementation. This call is automati-) widthshow (cally made by ) 180.0 318.674 T 0 FF (_start) 238.6 318.674 T 3 FF ( if the C threads package w) 263.59 318.674 T (as link) 372.35 318.674 T (ed with the task.) 398.64 318.674 T 180 361.007141 360 3.024002 CR 540 362.52 M 180 362.52 L S 0 0 612 792 CR 4 FF (Thr) 180.0 356.34 T (eads of Contr) 203.086 356.34 T (ol) 283.712 356.34 T 3 FF (The C threads package allo) 180.0 380.698 T (ws for multiple threads of control in a C application.) 288.61 380.698 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Cr) 180.0 412.031 T (eation) 193.776 412.031 T 3 FF 180 428.697632 M 0.615952 0 32 (When a C program starts, it contains a single thread of control, the one e) widthshow 478.423431 428.697632 M 0.615952 0 32 (x) widthshow 483.273499 428.697632 M 0.615952 0 32 (ecuting ) widthshow 0 FF 515.829468 428.697632 M 0.615952 0 32 (main) widthshow 3 FF 537.499451 428.697632 M 0.615952 0 32 (.) widthshow 180 440.697571 M 0.366364 0 32 (The thread of control is an acti) widthshow 304.698334 440.697571 M 0.366364 0 32 (v) widthshow 309.548401 440.697571 M 0.366364 0 32 (e entity) widthshow 338.985138 440.697571 M 0.366364 0 32 (, mo) widthshow 356.981567 440.697571 M 0.366364 0 32 (ving from statement to statement, calling and) widthshow (returning from procedures. Ne) 180.0 452.698 T (w threads are created by ) 301.38 452.698 T 6 (Times-Italic) 10 1 mymakefontmetric 6 FF (fork) 401.06 452.698 T 3 FF ( operations.) 417.17 452.698 T 180 476.697449 M 1.115295 0 32 (F) widthshow 185.41008 476.697449 M 1.115295 0 32 (orking a ne) widthshow 232.380814 476.697449 M 1.115295 0 32 (w thread of control is similar to calling a procedure, e) widthshow 458.063873 476.697449 M 1.115295 0 32 (xcept that the caller) widthshow 180 488.697388 M 0.19928 0 32 (does not w) widthshow 223.628616 488.697388 M 0.19928 0 32 (ait for the procedure to return. Instead, the caller continues to e) widthshow 477.550812 488.697388 M 0.19928 0 32 (x) widthshow 482.400879 488.697388 M 0.19928 0 32 (ecute in paral-) widthshow 180 500.697327 M 1.103287 0 32 (lel with the e) widthshow 235.099945 500.697327 M 1.103287 0 32 (x) widthshow 239.950027 500.697327 M 1.103287 0 32 (ecution of the procedure in the ne) widthshow 380.729919 500.697327 M 1.103287 0 32 (wly fork) widthshow 415.89325 500.697327 M 1.103287 0 32 (ed thread. At some later time,) widthshow 180 512.697266 M 1.024323 0 32 (the caller may rendezv) widthshow 273.673096 512.697266 M 1.024323 0 32 (ous with the thread and retrie) widthshow 395.464844 512.697266 M 1.024323 0 32 (v) widthshow 400.314941 512.697266 M 1.024323 0 32 (e its result \(if an) widthshow 469.252319 512.697266 M 1.024323 0 32 (y\) by means of a) widthshow 6 FF 180 524.697205 M 0.624619 0 32 (join) widthshow 3 FF 195.559998 524.697205 M 0.624619 0 32 ( operation, or the caller may ) widthshow 6 FF 314.557739 524.697205 M 0.624619 0 32 (detac) widthshow 336.06781 524.697205 M 0.624619 0 32 (h) widthshow 3 FF 341.06781 524.697205 M 0.624619 0 32 ( the ne) widthshow 368.727173 524.697205 M 0.624619 0 32 (wly created thread to assert that no thread) widthshow (will e) 180.0 536.697 T (v) 202.25 536.697 T (er be interested in joining it.) 207.1 536.697 T 5 FF (T) 180.0 568.03 T (ermination) 186.901 568.03 T 3 FF 180 584.697021 M 0.56926 0 32 (A thread ) widthshow 6 FF 218.348526 584.697021 M 0.56926 0 32 (t ) widthshow 3 FF 224.197784 584.697021 M 0.56926 0 32 (terminates when it returns from the top-le) widthshow 394.003479 584.697021 M 0.56926 0 32 (v) widthshow 398.853577 584.697021 M 0.56926 0 32 (el procedure it w) widthshow 467.941406 584.697021 M 0.56926 0 32 (as e) widthshow 483.630768 584.697021 M 0.56926 0 32 (x) widthshow 488.480835 584.697021 M 0.56926 0 32 (ecuting.) widthshow 7 (Times-Roman) 8 1 mymakefontmetric 7 FF 520.420837 580.697021 M 0.455414 0 32 (1) widthshow 3 FF 524.420837 584.697021 M 0.56926 0 32 ( If ) widthshow 6 FF 537.21936 584.697021 M 0.56926 0 32 (t) widthshow 3 FF 180 596.697021 M 0.48465 0 32 (has not been detached, it remains in limbo until another thread either joins it or detaches) widthshow (it; if ) 180.0 608.697 T 6 FF (t) 199.45 608.697 T 3 FF ( has been detached, no rendezv) 202.23 608.697 T (ous is necessary) 326.43 608.697 T (.) 390.21 608.697 T 180 648.976074 360 30.024002 CR 324 666.98 M 180 666.98 L S 0 0 612 792 CR 8 (Times-Roman) 9 1 mymakefontmetric 8 FF 180 685.000061 M 0.454178 0 32 (1. This is also effectively true of the initial thread \(executing ) widthshow 2 FF 408.164124 685.000061 M 0.454178 0 32 (main) widthshow 8 FF 427.667114 685.000061 M 0.454178 0 32 (\). After effectively terminating) widthshow (itself, the initial thread waits for all other threads to terminate. It then terminates the task.) 180.0 695.0 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 57 57 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (53 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Thr) 72.0 55.824 T (eads of Contr) 86.841 55.824 T (ol) 138.672 55.824 T 0.25 SL 3.86 setmiterlimit 0 SC 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Bold) 12 1 mymakefontmetric 3 FF (Stack Management) 72.0 116.0 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 72 132.666656 M 1.802292 0 32 (The C threads package automatically allocates space for the stack for each C thread.) widthshow 72 144.666641 M 0.553284 0 32 (Each C thread will ha) widthshow 160.663254 144.666641 M 0.553284 0 32 (v) widthshow 165.513336 144.666641 M 0.553284 0 32 (e a stack of the same size. All stacks are page aligned and ha) widthshow 415.216187 144.666641 M 0.553284 0 32 (v) widthshow 420.066254 144.666641 M 0.553284 0 32 (e a) widthshow 72 156.666626 M 0.186844 0 32 (length which is an inte) widthshow 163.147461 156.666626 M 0.186844 0 32 (gral multiple of the page size. The only control o) widthshow 360.209167 156.666626 M 0.186844 0 32 (v) widthshow 365.059235 156.666626 M 0.186844 0 32 (er this process is) widthshow 72 168.666611 M 0.543091 0 32 (control o) widthshow 108.223175 168.666611 M 0.543091 0 32 (v) widthshow 113.073257 168.666611 M 0.543091 0 32 (er the size of stacks to be allocated. Such control can only be af) widthshow 373.713623 168.666611 M 0.543091 0 32 (fected at com-) widthshow (pile time by declaring \(at \336le scope\):) 72.0 180.667 T (vm_size_t ) 108.0 204.667 T 1 FF (cthr) 151.61 204.667 T (ead_stack_size) 169.2 204.667 T 4 FF ( = ) 231.97 204.667 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF (N) 242.61 204.667 T 4 FF (;) 249.28 204.667 T (The stack size in ef) 72.0 228.667 T (fect can be e) 148.95 228.667 T (xamined at run-time by reading ) 199.05 228.667 T 1 FF (cthr) 327.64 228.667 T (ead_stack_size) 345.23 228.667 T 4 FF (.) 408.0 228.667 T 3 FF (Thr) 72.0 260.0 T (ead Management) 91.788 260.0 T 4 FF 72 276.666473 M 0.826111 0 32 (The sole means of creating ne) widthshow 195.570709 276.666473 M 0.826111 0 32 (w threads is via the ) widthshow 1 FF 279.411255 276.666473 M 0.826111 0 32 (cthr) widthshow 297.001373 276.666473 M 0.826111 0 32 (ead_f) widthshow 320.081512 276.666473 M 0.826111 0 32 (ork) widthshow 4 FF 335.081512 276.666473 M 0.826111 0 32 ( function. This function) widthshow 72 288.666412 M 0.841599 0 32 (returns a v) widthshow 115.643341 288.666412 M 0.841599 0 32 (alue of type ) widthshow 5 FF 167.878143 288.666412 M 0.841599 0 32 (cthr) widthshow 183.618347 288.666412 M 0.841599 0 32 (ead_t) widthshow 4 FF 205.838348 288.666412 M 0.841599 0 32 (. The ) widthshow 1 FF 230.571548 288.666412 M 0.841599 0 32 (cthr) widthshow 248.161652 288.666412 M 0.841599 0 32 (ead_self) widthshow 4 FF 282.601654 288.666412 M 0.841599 0 32 ( function returns the ) widthshow 5 FF 369.288055 288.666412 M 0.841599 0 32 (cthr) widthshow 385.028259 288.666412 M 0.841599 0 32 (ead_t) widthshow 4 FF 407.24826 288.666412 M 0.841599 0 32 ( v) widthshow 415.339996 288.666412 M 0.841599 0 32 (alue) widthshow 72 300.666351 M 0.353958 0 32 (that w) widthshow 96.974014 300.666351 M 0.353958 0 32 (as returned by ) widthshow 1 FF 157.185898 300.666351 M 0.353958 0 32 (cthr) widthshow 174.776001 300.666351 M 0.353958 0 32 (ead_f) widthshow 197.85614 300.666351 M 0.353958 0 32 (ork ) widthshow 4 FF 215.710098 300.666351 M 0.353958 0 32 (to the creator of the thread. This v) widthshow 354.017944 300.666351 M 0.353958 0 32 (alue forms a thread) widthshow 72 312.66629 M 0.036804 0 32 (identi\336er that uniquely identi\336es the thread, and hence may be used as a k) widthshow 367.88855 312.66629 M 0.036804 0 32 (e) widthshow 372.178619 312.66629 M 0.036804 0 32 (y in data struc-) widthshow 72 324.666229 M 0.707626 0 32 (tures that associate user data with indi) widthshow 228.195908 324.666229 M 0.707626 0 32 (vidual threads. Since thread identi\336ers may be re-) widthshow 72 336.666168 M 1.369965 0 32 (used by the underlying implementation, the programmer should be careful to clean up) widthshow (such associations when threads e) 72.0 348.666 T (xit.) 203.49 348.666 T 72 372.666046 M 0.522461 0 32 (Although a thread automatically terminates when it returns from its top-le) widthshow 372.494751 372.666046 M 0.522461 0 32 (v) widthshow 377.344849 372.666046 M 0.522461 0 32 (el function, it) widthshow (may also terminate itself e) 72.0 384.666 T (xplicitly with ) 177.39 384.666 T 1 FF (cthr) 233.51 384.666 T (ead_exit) 251.1 384.666 T 4 FF (.) 286.65 384.666 T 72 408.665924 M 1.074524 0 32 (The ) widthshow 1 FF 91.124527 408.665924 M 1.074524 0 32 (cthr) widthshow 108.71463 408.665924 M 1.074524 0 32 (ead_detach) widthshow 4 FF 157.044632 408.665924 M 1.074524 0 32 ( function indicates that the named thread will not rendezv) widthshow 396.755493 408.665924 M 1.074524 0 32 (ous with) widthshow 72 420.665863 M 0.743256 0 32 (an) widthshow 81.290085 420.665863 M 0.743256 0 32 (y other thread. ) widthshow 1 FF 144.05986 420.665863 M 0.743256 0 32 (cthr) widthshow 161.649963 420.665863 M 0.743256 0 32 (ead_join) widthshow 4 FF 198.319962 420.665863 M 0.743256 0 32 ( is used to rendezv) widthshow 275.523102 420.665863 M 0.743256 0 32 (ous with a thread\325) widthshow 349.133179 420.665863 M 0.743256 0 32 (s termination. When) widthshow 72 432.665802 M 0.733795 0 32 (a rendezv) widthshow 111.123917 432.665802 M 0.733795 0 32 (ous occurs, the joining thread proceeds, gi) widthshow 284.136841 432.665802 M 0.733795 0 32 (v) widthshow 288.986938 432.665802 M 0.733795 0 32 (en the return v) widthshow 348.978455 432.665802 M 0.733795 0 32 (alue from the joined) widthshow 72 444.665741 M 0.657761 0 32 (thread\325) widthshow 99.770309 444.665741 M 0.657761 0 32 (s top-le) widthshow 129.898209 444.665741 M 0.657761 0 32 (v) widthshow 134.748291 444.665741 M 0.657761 0 32 (el function, or the v) widthshow 215.729477 444.665741 M 0.657761 0 32 (alue supplied to ) widthshow 1 FF 283.532776 444.665741 M 0.657761 0 32 (cthr) widthshow 301.122864 444.665741 M 0.657761 0 32 (ead_exit) widthshow 4 FF 336.672852 444.665741 M 0.657761 0 32 (, if that is the means of) widthshow (termination for the joined thread.) 72.0 456.666 T (It follo) 72.0 480.666 T (ws that attempting to join one\325) 99.25 480.666 T (s o) 221.2 480.666 T (wn thread will result in deadlock.) 232.341 480.666 T 72 504.665558 M 1.389954 0 32 (The C threads package allo) widthshow 186.169968 504.665558 M 1.389954 0 32 (ws for a single v) widthshow 257.579926 504.665558 M 1.389954 0 32 (alue \(of type ) widthshow 5 FF 314.789795 504.665558 M 1.389954 0 32 (any_t) widthshow 4 FF 337.009796 504.665558 M 1.389954 0 32 (\) to be associated with) widthshow 72 516.665527 M 0.89325 0 32 (each thread, pro) widthshow 137.776596 516.665527 M 0.89325 0 32 (viding a simple form thread-speci\336c \322global\323 v) widthshow 331.746246 516.665527 M 0.89325 0 32 (ariable. This v) widthshow 390.772888 516.665527 M 0.89325 0 32 (alue is set) widthshow 72 528.665405 M 2.533676 0 32 (by) widthshow 1 FF 82 528.665405 M 2.533676 0 32 ( cthr) widthshow 104.623779 528.665405 M 2.533676 0 32 (ead_set_data) widthshow 4 FF 160.173782 528.665405 M 2.533676 0 32 ( and retrie) widthshow 205.531281 528.665405 M 2.533676 0 32 (v) widthshow 210.381363 528.665405 M 2.533676 0 32 (ed with) widthshow 1 FF 242.63504 528.665405 M 2.533676 0 32 ( cthr) widthshow 265.25882 528.665405 M 2.533676 0 32 (ead_data) widthshow 4 FF 304.148804 528.665405 M 2.533676 0 32 (. More elaborate mechanisms,) widthshow (such as per) 72.0 540.665 T (-thread property lists or hash tables, can then be b) 116.23 540.665 T (uilt with these primiti) 314.88 540.665 T (v) 401.03 540.665 T (es.) 405.88 540.665 T (The current number of C threads can be obtained from ) 72.0 564.665 T 1 FF (cthr) 292.5 564.665 T (ead_count) 310.09 564.665 T 4 FF (.) 353.98 564.665 T 6 (Times-Roman) 12 1 mymakefontmetric 6 FF (E) 72.0 595.999 T 3 FF (xecution of Thr) 79.332 595.999 T (eads) 158.448 595.999 T 4 FF 72 612.665222 M 0.615921 0 32 (A set of C threads may e) widthshow 174.415619 612.665222 M 0.615921 0 32 (x) widthshow 179.265701 612.665222 M 0.615921 0 32 (ecute in parallel on multiple processors within a system. V) widthshow 418.119629 612.665222 M 0.615921 0 32 (ari-) widthshow 72 624.665161 M 0.488235 0 32 (ous f) widthshow 92.108292 624.665161 M 0.488235 0 32 (actors, e) widthshow 125.666672 624.665161 M 0.488235 0 32 (v) widthshow 130.516754 624.665161 M 0.488235 0 32 (en be) widthshow 152.235077 624.665161 M 0.488235 0 32 (yond those in) widthshow 206.701767 624.665161 M 0.488235 0 32 (v) widthshow 211.501877 624.665161 M 0.488235 0 32 (olv) widthshow 224.131958 624.665161 M 0.488235 0 32 (e k) widthshow 236.460251 624.665161 M 0.488235 0 32 (ernel scheduling, af) widthshow 315.776855 624.665161 M 0.488235 0 32 (fect the e) widthshow 353.253418 624.665161 M 0.488235 0 32 (xtent of parallelism) widthshow (achie) 72.0 636.665 T (v) 92.85 636.665 T (ed by a set of C threads.) 97.7 636.665 T 72 660.665039 M 0.71788 0 32 (Underlying C threads is the notion of ) widthshow 5 FF 228.405167 660.665039 M 0.71788 0 32 (cpr) widthshow 241.285416 660.665039 M 0.71788 0 32 (oc) widthshow 4 FF 250.725418 660.665039 M 0.71788 0 32 widthshow 253.505722 660.665039 M 0.71788 0 32 (s, and under ) widthshow 5 FF 306.759369 660.665039 M 0.71788 0 32 (cpr) widthshow 319.639618 660.665039 M 0.71788 0 32 (oc) widthshow 4 FF 329.07962 660.665039 M 0.71788 0 32 widthshow 331.859924 660.665039 M 0.71788 0 32 (s f) widthshow 342.197876 660.665039 M 0.71788 0 32 (all Mach threads. It is) widthshow 72 672.664978 M 0.720749 0 32 (Mach threads that are actually managed by the k) widthshow 271.506073 672.664978 M 0.720749 0 32 (ernel and therefore schedulable on pro-) widthshow (cessors) 72.0 684.665 T 5 FF (. ) 100.88 684.665 T 4 FF (A C thread e) 105.88 684.665 T (x) 156.55 684.665 T (ecutes only when:) 161.4 684.665 T 52 108 2 123.999893 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 58 58 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (54 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (C Thr) 180.0 55.824 T (eads) 203.589 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 7 1 mymakefontmetric 3 FF 180.0 112.651 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF (A ) 193.536 112.651 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF (cpr) 203.256 112.651 T (oc ) 216.136 112.651 T 4 FF (has been assigned to the C thread) 228.076 112.651 T 3 FF 180.0 127.651 T 4 FF (A Mach thread has been assigned to the ) 193.536 127.651 T 5 FF (cpr) 355.166 127.651 T (oc) 368.046 127.651 T 4 FF (.) 377.486 127.651 T 3 FF 180.0 142.651 T 4 FF (The k) 193.536 142.651 T (ernel has decided to schedule the Mach thread.) 216.486 142.651 T 180 166.650452 M 1.41243 0 32 (\(The issues in) widthshow 237.975082 166.650452 M 1.41243 0 32 (v) widthshow 242.775192 166.650452 M 1.41243 0 32 (olving the scheduling of Mach threads in) widthshow 414.720001 166.650452 M 1.41243 0 32 (v) widthshow 419.520111 166.650452 M 1.41243 0 32 (olv) widthshow 432.150208 166.650452 M 1.41243 0 32 (es processor sets and task) widthshow (and thread assignments, policies and priorities and is not co) 180.0 178.65 T (v) 418.16 178.65 T (ered here.\)) 423.01 178.65 T 180 202.65033 M 0.214386 0 32 (A ) widthshow 5 FF 189.934387 202.65033 M 0.214386 0 32 (cpr) widthshow 202.814636 202.65033 M 0.214386 0 32 (oc) widthshow 4 FF 212.254639 202.65033 M 0.214386 0 32 ( is assigned to a C thread when one is free. By def) widthshow 414.967346 202.65033 M 0.214386 0 32 (ault, ) widthshow 5 FF 435.181732 202.65033 M 0.214386 0 32 (cpr) widthshow 448.061981 202.65033 M 0.214386 0 32 (oc) widthshow 4 FF 457.501984 202.65033 M 0.214386 0 32 widthshow 460.282288 202.65033 M 0.214386 0 32 (s are created so that) widthshow 180 214.650269 M 2.986328 0 32 (each C thread has its o) widthshow 284.941772 214.650269 M 2.986328 0 32 (wn. Ho) widthshow 317.118256 214.650269 M 2.986328 0 32 (we) widthshow 328.528381 214.650269 M 2.986328 0 32 (v) widthshow 333.378479 214.650269 M 2.986328 0 32 (er) widthshow 340.748718 214.650269 M 2.986328 0 32 (, the number of ) widthshow 5 FF 416.294006 214.650269 M 2.986328 0 32 (cpr) widthshow 429.174255 214.650269 M 2.986328 0 32 (oc) widthshow 4 FF 438.614258 214.650269 M 2.986328 0 32 widthshow 441.394592 214.650269 M 2.986328 0 32 (s can be limited \(with) widthshow 0 FF 180 226.650208 M 0.412827 0 32 (cthr) widthshow 197.590103 226.650208 M 0.412827 0 32 (ead_set_limit) widthshow 4 FF 254.250107 226.650208 M 0.412827 0 32 (\) so that the number of C threads that can be making progress is limit-) widthshow (ed. A ) 180.0 238.65 T 5 FF (cpr) 204.16 238.65 T (oc) 217.04 238.65 T 4 FF ( becomes free when the C thread assigned to it terminates.) 226.48 238.65 T 180 262.650085 M 0.283508 0 32 (A Mach thread is assigned to a ) widthshow 5 FF 307.794556 262.650085 M 0.283508 0 32 (cpr) widthshow 320.674805 262.650085 M 0.283508 0 32 (oc) widthshow 4 FF 330.114807 262.650085 M 0.283508 0 32 ( when one is free. By def) widthshow 431.965942 262.650085 M 0.283508 0 32 (ault, Mach threads are cre-) widthshow 180 274.650024 M 0.253021 0 32 (ated so that each ) widthshow 5 FF 249.882095 274.650024 M 0.253021 0 32 (cpr) widthshow 262.762329 274.650024 M 0.253021 0 32 (oc) widthshow 4 FF 272.202332 274.650024 M 0.253021 0 32 ( has its o) widthshow 307.991547 274.650024 M 0.253021 0 32 (wn. Ho) widthshow 337.434692 274.650024 M 0.253021 0 32 (we) widthshow 348.844849 274.650024 M 0.253021 0 32 (v) widthshow 353.694946 274.650024 M 0.253021 0 32 (er) widthshow 361.065155 274.650024 M 0.253021 0 32 (, the number of Mach threads can be limited) widthshow (\(with ) 180.0 286.65 T 0 FF (cthr) 203.61 286.65 T (ead_set_k) 221.2 286.65 T (er) 263.32 286.65 T (nel_limit) 272.05 286.65 T 4 FF (\). Making such a limit has a v) 309.83 286.65 T (ariety of ef) 428.46 286.65 T (fects:) 472.081 286.65 T 3 FF 180.0 304.65 T 4 FF (The maximum de) 193.536 304.65 T (gree of true parallelism is set.) 263.936 304.65 T 3 FF 180.0 319.65 T 4 FF (The k) 193.536 319.65 T (ernel o) 216.486 319.65 T (v) 243.826 319.65 T (erhead associated with the number of Mach threads is controlled.) 248.676 319.65 T 3 FF 180.0 334.65 T 4 FF 193.535995 334.64978 M 0.567169 0 32 (Allo) widthshow 211.066132 334.64978 M 0.567169 0 32 (wing multiple C threads the chance to share a Mach thread reduces the o) widthshow 508.499451 334.64978 M 0.567169 0 32 (v) widthshow 513.349548 334.64978 M 0.567169 0 32 (erhead) widthshow 193.535995 346.649719 M 2.08934 0 32 (of synchronization between them by allo) widthshow 366.762848 346.649719 M 2.08934 0 32 (wing conte) widthshow 412.862274 346.649719 M 2.08934 0 32 (xt switches without k) widthshow 504.310364 346.649719 M 2.08934 0 32 (ernel in-) widthshow (v) 193.536 358.65 T (olv) 198.336 358.65 T (ement.) 210.966 358.65 T 180 382.649597 M 1.022491 0 32 (It is possible to force a binding between a C thread and a Mach thread with ) widthshow 0 FF 499.079895 382.649597 M 1.022491 0 32 (cthr) widthshow 516.669983 382.649597 M 1.022491 0 32 (ead_-) widthshow 180 394.649536 M 1.328506 0 32 (wir) widthshow 194.260101 394.649536 M 1.328506 0 32 (e) widthshow 4 FF 198.700104 394.649536 M 1.328506 0 32 ( \() widthshow 0 FF 205.858612 394.649536 M 1.328506 0 32 (cthr) widthshow 223.448715 394.649536 M 1.328506 0 32 (ead_unwir) widthshow 268.828796 394.649536 M 1.328506 0 32 (e) widthshow 4 FF 273.268799 394.649536 M 1.328506 0 32 ( undoes this\). W) widthshow 342.404541 394.649536 M 1.328506 0 32 (iring a C thread to a Mach thread k) widthshow 492.902679 394.649536 M 1.328506 0 32 (eeps that C) widthshow 180 406.649475 M 0.838547 0 32 (thread from being serviced by an) widthshow 315.95282 406.649475 M 0.838547 0 32 (y other Mach thread; it also pre) widthshow 446.264282 406.649475 M 0.838547 0 32 (v) widthshow 451.114349 406.649475 M 0.838547 0 32 (ents that Mach thread) widthshow 180 418.649414 M 0.344315 0 32 (from servicing an) widthshow 251.07872 418.649414 M 0.344315 0 32 (y other C thread. In this w) widthshow 357.754669 418.649414 M 0.344315 0 32 (ay) widthshow 366.545044 418.649414 M 0.344315 0 32 (, a Mach thread will al) widthshow 458.146667 418.649414 M 0.344315 0 32 (w) widthshow 465.266724 418.649414 M 0.344315 0 32 (ays be a) widthshow 497.965454 418.649414 M 0.344315 0 32 (v) widthshow 502.715607 418.649414 M 0.344315 0 32 (ailable to) widthshow 180 430.649353 M 0.85434 0 32 (service this C thread, in the case where the number of Mach threads is being limited to) widthshow (less than the number of C threads.) 180.0 442.649 T 180 466.649231 M 0.944244 0 32 (The ) widthshow 0 FF 198.994247 466.649231 M 0.944244 0 32 (cthr) widthshow 216.584351 466.649231 M 0.944244 0 32 (ead_yield ) widthshow 4 FF 260.588593 466.649231 M 0.944244 0 32 (procedure is a hint to the scheduler) widthshow 405.82428 466.649231 M 0.944244 0 32 (, suggesting that this w) widthshow 501.451324 466.649231 M 0.944244 0 32 (ould be a) widthshow 180 478.64917 M 0.499954 0 32 (con) widthshow 194.040222 478.64917 M 0.499954 0 32 (v) widthshow 198.890305 478.64917 M 0.499954 0 32 (enient point to schedule another thread to run on the current processor) widthshow 484.06012 478.64917 M 0.499954 0 32 (. This may be) widthshow (required to a) 180.0 490.649 T (v) 230.34 490.649 T (oid starv) 235.14 490.649 T (ation when the number of Mach threads is limited.) 269.61 490.649 T 180 514.649048 M 1.984131 0 32 (When a C thread e) widthshow 262.206604 514.649048 M 1.984131 0 32 (x) widthshow 267.056702 514.649048 M 1.984131 0 32 (ecutes a blocking k) widthshow 349.839172 514.649048 M 1.984131 0 32 (ernel function \() widthshow 0 FF 415.457428 514.649048 M 1.984131 0 32 (mach_msg) widthshow 4 FF 461.007446 514.649048 M 1.984131 0 32 ( perhaps being the) widthshow 180 526.648987 M 2.174911 0 32 (most e) widthshow 208.414993 526.648987 M 2.174911 0 32 (xtreme e) widthshow 245.149994 526.648987 M 2.174911 0 32 (xample\), its corresponding Mach thread is block) widthshow 451.679535 526.648987 M 2.174911 0 32 (ed as well. T) widthshow 508.5047 526.648987 M 2.174911 0 32 (o a) widthshow 522.419739 526.648987 M 2.174911 0 32 (v) widthshow 527.219849 526.648987 M 2.174911 0 32 (oid) widthshow 180 538.648926 M 3.579941 0 32 (blocking an e) widthshow 240.889969 538.648926 M 3.579941 0 32 (xcessi) widthshow 265.080109 538.648926 M 3.579941 0 32 (v) widthshow 269.930176 538.648926 M 3.579941 0 32 (e number of Mach threads, a special v) widthshow 447.019897 538.648926 M 3.579941 0 32 (ersion of ) widthshow 0 FF 491.949768 538.648926 M 3.579941 0 32 (mach_msg) widthshow 4 FF 537.499756 538.648926 M 3.579941 0 32 (,) widthshow 0 FF 180 550.648865 M 0.488129 0 32 (cthr) widthshow 197.590103 550.648865 M 0.488129 0 32 (ead_mach_msg) widthshow 4 FF 263.140106 550.648865 M 0.488129 0 32 ( is pro) widthshow 288.966431 550.648865 M 0.488129 0 32 (vided. This function performs just lik) widthshow 440.747131 550.648865 M 0.488129 0 32 (e ) widthshow 0 FF 448.175293 550.648865 M 0.488129 0 32 (mach_msg) widthshow 4 FF 493.725281 550.648865 M 0.488129 0 32 (, b) widthshow 504.013519 550.648865 M 0.488129 0 32 (ut it lim-) widthshow 180 562.648804 M 1.214401 0 32 (its the number of C threads that can be \322acti) widthshow 366.479767 562.648804 M 1.214401 0 32 (v) widthshow 371.329834 562.648804 M 1.214401 0 32 (e\323 listeners for a port. A C thread is de-) widthshow 180 574.648743 M 6.819946 0 32 (clared an acti) widthshow 246.700043 574.648743 M 6.819946 0 32 (v) widthshow 251.550125 574.648743 M 6.819946 0 32 (e listener for a port when it calls ) widthshow 0 FF 437.749695 574.648743 M 6.819946 0 32 (cthr) widthshow 455.339813 574.648743 M 6.819946 0 32 (ead_msg_acti) widthshow 513.009888 574.648743 M 6.819946 0 32 (v) widthshow 517.909912 574.648743 M 6.819946 0 32 (e) widthshow 4 FF 522.349915 574.648743 M 6.819946 0 32 ( or) widthshow 0 FF 180 586.648682 M 1.759186 0 32 (cthr) widthshow 197.590103 586.648682 M 1.759186 0 32 (ead_mach_msg) widthshow 4 FF 263.140106 586.648682 M 1.759186 0 32 ( specifying a port. It ceases to be an acti) widthshow 438.682922 586.648682 M 1.759186 0 32 (v) widthshow 443.53302 586.648682 M 1.759186 0 32 (e listener when it calls) widthshow 0 FF 180 598.648621 M 0.082809 0 32 (cthr) widthshow 197.590103 598.648621 M 0.082809 0 32 (ead_msg_b) widthshow 245.170212 598.648621 M 0.082809 0 32 (usy) widthshow 4 FF 259.620209 598.648621 M 0.082809 0 32 ( or ) widthshow 0 FF 273.115845 598.648621 M 0.082809 0 32 (cthr) widthshow 290.705933 598.648621 M 0.082809 0 32 (ead_mach_msg) widthshow 4 FF 356.25592 598.648621 M 0.082809 0 32 ( for a dif) widthshow 390.964508 598.648621 M 0.082809 0 32 (ferent port. If a C thread is not an ac-) widthshow 180 610.64856 M 0.241501 0 32 (ti) widthshow 185.310135 610.64856 M 0.241501 0 32 (v) widthshow 190.160217 610.64856 M 0.241501 0 32 (e listener for a port when it calls ) widthshow 0 FF 323.732239 610.64856 M 0.241501 0 32 (cthr) widthshow 341.322327 610.64856 M 0.241501 0 32 (ead_mach_msg) widthshow 4 FF 406.872345 610.64856 M 0.241501 0 32 ( \(intending to perform a message) widthshow 180 622.648499 M 0.384674 0 32 (recei) widthshow 199.180145 622.648499 M 0.384674 0 32 (v) widthshow 204.030228 622.648499 M 0.384674 0 32 (e\), and making it a listener w) widthshow 322.608337 622.648499 M 0.384674 0 32 (ould e) widthshow 347.56311 622.648499 M 0.384674 0 32 (xceed the limit set for that port, the C thread it-) widthshow 180 634.648438 M 1.430893 0 32 (self will block \(without blocking its underlying Mach thread\), thereby pro) widthshow 489.959045 634.648438 M 1.430893 0 32 (viding more) widthshow 180 646.648376 M 0.401382 0 32 (free \(un-block) widthshow 237.221451 646.648376 M 0.401382 0 32 (ed\) Mach threads. The C thread will get to e) widthshow 417.313995 646.648376 M 0.401382 0 32 (x) widthshow 422.164062 646.648376 M 0.401382 0 32 (ecute its message recei) widthshow 514.478394 646.648376 M 0.401382 0 32 (v) widthshow 519.328491 646.648376 M 0.401382 0 32 (e op-) widthshow (eration when some other C thread stops being a listener for that port.) 180.0 658.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 59 59 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (55 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Synchr) 72.0 55.824 T (onization) 99.342 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 72 121.999924 360 3.024002 CR 0 G 432 123.51 M 72 123.51 L S 0 0 612 792 CR 3 (Times-Bold) 14 1 mymakefontmetric 3 FF (Synchr) 72.0 117.333 T (onization) 114.532 117.333 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 72 141.690552 M 1.14769 0 32 (This section describes mutual e) widthshow 201.98085 141.690552 M 1.14769 0 32 (xclusion and synchronization primiti) widthshow 352.114075 141.690552 M 1.14769 0 32 (v) widthshow 356.964142 141.690552 M 1.14769 0 32 (es, called mute) widthshow 418.819611 141.690552 M 1.14769 0 32 (x) widthshow 423.669678 141.690552 M 1.14769 0 32 (es) widthshow 72 153.690491 M 0.374557 0 32 (and condition v) widthshow 134.719254 153.690491 M 0.374557 0 32 (ariables. In general, these primiti) widthshow 267.607635 153.690491 M 0.374557 0 32 (v) widthshow 272.457703 153.690491 M 0.374557 0 32 (es are used to constrain the possible in-) widthshow 72 165.69043 M 1.47995 0 32 (terlea) widthshow 94.010117 165.69043 M 1.47995 0 32 (ving of threads\325 e) widthshow 168.560059 165.69043 M 1.47995 0 32 (x) widthshow 173.410141 165.69043 M 1.47995 0 32 (ecution streams. The) widthshow 259.260132 165.69043 M 1.47995 0 32 (y separate the tw) widthshow 331.080048 165.69043 M 1.47995 0 32 (o most common uses of) widthshow 72 177.690369 M 0.617218 0 32 (Dijkstra\325) widthshow 107.000305 177.690369 M 0.617218 0 32 (s ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 114.007523 177.690369 M 0.617218 0 32 (P) widthshow 4 FF 120.117523 177.690369 M 0.617218 0 32 ( and ) widthshow 5 FF 140.791962 177.690369 M 0.617218 0 32 (V) widthshow 4 FF 146.901962 177.690369 M 0.617218 0 32 ( operations into distinct f) widthshow 249.270889 177.690369 M 0.617218 0 32 (acilities. This approach basically implements) widthshow (monitors, b) 72.0 189.69 T (ut without the syntactic sug) 117.36 189.69 T (ar) 227.31 189.69 T (.) 234.53 189.69 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Mutex V) 72.0 221.024 T (ariables) 115.885 221.024 T 4 FF 72 237.690201 M 0.633774 0 32 (Mutually e) widthshow 116.093857 237.690201 M 0.633774 0 32 (xclusi) widthshow 139.733994 237.690201 M 0.633774 0 32 (v) widthshow 144.584076 237.690201 M 0.633774 0 32 (e access to mutable data is necessary to pre) widthshow 322.13443 237.690201 M 0.633774 0 32 (v) widthshow 326.984497 237.690201 M 0.633774 0 32 (ent corruption of data. As) widthshow 72 249.69014 M 0.71994 0 32 (simple e) widthshow 106.180023 249.69014 M 0.71994 0 32 (xample, consider concurrent attempts to update a simple counter) widthshow 369.399872 249.69014 M 0.71994 0 32 (. If tw) widthshow 394.899811 249.69014 M 0.71994 0 32 (o threads) widthshow 72 261.690063 M 0.708389 0 32 (fetch the current v) widthshow 146.905319 261.690063 M 0.708389 0 32 (alue into a \(thread-local\) re) widthshow 258.438965 261.690063 M 0.708389 0 32 (gister) widthshow 280.259216 261.690063 M 0.708389 0 32 (, increment, and write the v) widthshow 393.251282 261.690063 M 0.708389 0 32 (alue back) widthshow 72 273.690002 M 0.676071 0 32 (in some order) widthshow 127.942368 273.690002 M 0.676071 0 32 (, the counter will only be incremented once, losing one thread\325) widthshow 384.663391 273.690002 M 0.676071 0 32 (s operation.) widthshow 72 285.689941 M 1.040878 0 32 (A mute) widthshow 102.610962 285.689941 M 1.040878 0 32 (x solv) widthshow 127.671921 285.689941 M 1.040878 0 32 (es this problem by making the fetch-increment-deposit action atomic. Be-) widthshow 72 297.68988 M 0.676376 0 32 (fore fetching a counter) widthshow 164.429367 297.68988 M 0.676376 0 32 (, a thread locks the associated mute) widthshow 309.697723 297.68988 M 0.676376 0 32 (x. After depositing a ne) widthshow 406.303375 297.68988 M 0.676376 0 32 (w v) widthshow 421.44989 297.68988 M 0.676376 0 32 (al-) widthshow 72 309.689819 M 2.071228 0 32 (ue, the thread unlocks the mute) widthshow 207.186234 309.689819 M 2.071228 0 32 (x. If an) widthshow 239.778778 309.689819 M 2.071228 0 32 (y other thread tries to use the counter in the) widthshow 72 321.689758 M 0.84407 0 32 (meantime, it will block when it tries to lock the mute) widthshow 292.230774 321.689758 M 0.84407 0 32 (x. If more than one thread tries to) widthshow 72 333.689697 M 0.169327 0 32 (lock the mute) widthshow 126.628738 333.689697 M 0.169327 0 32 (x at the same time, the C threads package guarantees that only one will suc-) widthshow (ceed; the rest will block.) 72.0 345.69 T 72 369.689575 M 0.677444 0 32 (While a mute) widthshow 127.084976 369.689575 M 0.677444 0 32 (x is lock) widthshow 162.229919 369.689575 M 0.677444 0 32 (ed, all other attempts to lock the mute) widthshow 317.922119 369.689575 M 0.677444 0 32 (x will block until the mute) widthshow 426.99942 369.689575 M 0.677444 0 32 (x) widthshow 72 381.689514 M 0.1633 0 32 (is unlock) widthshow 108.453354 381.689514 M 0.1633 0 32 (ed. When the mute) widthshow 184.333344 381.689514 M 0.1633 0 32 (x is unlock) widthshow 228.449997 381.689514 M 0.1633 0 32 (ed, one of the block) widthshow 308.153259 381.689514 M 0.1633 0 32 (ed threads will then succeed in) widthshow 72 393.689453 M 0.250656 0 32 (locking the mute) widthshow 139.571396 393.689453 M 0.250656 0 32 (x. Unlocking a mute) widthshow 221.83345 393.689453 M 0.250656 0 32 (x does not guarantee that one of the block) widthshow 390.928772 393.689453 M 0.250656 0 32 (ed threads) widthshow 72 405.689392 M 2.409134 0 32 (will run immediately; normally the unlocking thread will continue to run and other) widthshow (threads will ha) 72.0 417.689 T (v) 130.68 417.689 T (e to w) 135.53 417.689 T (ait for assignment to k) 159.87 417.689 T (ernel threads.) 249.21 417.689 T 72 441.68927 M 0.595352 0 32 (A mute) widthshow 102.165436 441.68927 M 0.595352 0 32 (x v) widthshow 115.010925 441.68927 M 0.595352 0 32 (ariable is lock) widthshow 172.201691 441.68927 M 0.595352 0 32 (ed with the ) widthshow 1 FF 220.92775 441.68927 M 0.595352 0 32 (mutex_lock) widthshow 4 FF 270.367737 441.68927 M 0.595352 0 32 ( function. This function will block until) widthshow 72 453.689209 M 0.62442 0 32 (the mute) widthshow 107.194504 453.689209 M 0.62442 0 32 (x can be \(and is\) lock) widthshow 196.026672 453.689209 M 0.62442 0 32 (ed. It is f) widthshow 233.349991 453.689209 M 0.62442 0 32 (airly common that a thread wishes to lock a mu-) widthshow 72 465.689148 M 0.130493 0 32 (te) widthshow 79.070084 465.689148 M 0.130493 0 32 (x, b) widthshow 94.000687 465.689148 M 0.130493 0 32 (ut has other things it can do until it can succeed in locking the mute) widthshow 365.657684 465.689148 M 0.130493 0 32 (x. F) widthshow 381.198242 465.689148 M 0.130493 0 32 (or these pur-) widthshow 72 477.689087 M 1.339188 0 32 (poses, there is the ) widthshow 1 FF 150.956757 477.689087 M 1.339188 0 32 (mutex_try_lock) widthshow 4 FF 218.166763 477.689087 M 1.339188 0 32 ( function. If this function cannot lock the mute) widthshow 415.100342 477.689087 M 1.339188 0 32 (x, it) widthshow 72 489.689026 M 1.721802 0 32 (simply returns instead of blocking \(returning a status indicating this occurrence\). The) widthshow 72 501.688965 M 0.071213 0 32 (thread can proceed to accomplish other w) widthshow 238.947357 501.688965 M 0.071213 0 32 (ork and try its lock attempt later) widthshow 367.144958 501.688965 M 0.071213 0 32 (. A mute) widthshow 401.857452 501.688965 M 0.071213 0 32 (x is un-) widthshow (lock) 72.0 513.689 T (ed with ) 89.12 513.689 T 1 FF (mutex_unlock) 121.34 513.689 T 4 FF (.) 181.9 513.689 T 6 FF (Condition V) 72.0 545.022 T (ariables) 133.909 545.022 T 4 FF 72 561.688843 M 0.631363 0 32 (Condition v) widthshow 119.891495 561.688843 M 0.631363 0 32 (ariables are used when one thread w) widthshow 268.529755 561.688843 M 0.631363 0 32 (ants to w) widthshow 305.802551 561.688843 M 0.631363 0 32 (ait until another thread has \336n-) widthshow 72 573.688721 M 1.113281 0 32 (ished doing something. Ev) widthshow 181.859924 573.688721 M 1.113281 0 32 (ery condition v) widthshow 244.386627 573.688721 M 1.113281 0 32 (ariable should be protected by a mute) widthshow 400.886414 573.688721 M 1.113281 0 32 (x. Con-) widthshow 72 585.688721 M 0.774948 0 32 (ceptually) widthshow 108.010361 585.688721 M 0.774948 0 32 (, the condition is a boolean function of the shared data that the mute) widthshow 389.564789 585.688721 M 0.774948 0 32 (x protects.) widthshow 72 597.688599 M 0.537949 0 32 (Commonly) widthshow 116.360352 597.688599 M 0.537949 0 32 (, a thread locks the mute) widthshow 216.660187 597.688599 M 0.537949 0 32 (x and inspects the shared data. If it doesn\325) widthshow 388.803894 597.688599 M 0.537949 0 32 (t lik) widthshow 405.081909 597.688599 M 0.537949 0 32 (e what) widthshow 72 609.688599 M 1.032257 0 32 (it \336nds, it w) widthshow 122.786819 609.688599 M 1.032257 0 32 (aits using a condition v) widthshow 219.445984 609.688599 M 1.032257 0 32 (ariable. This operation also temporarily unlocks the) widthshow 72 621.688477 M 1.019928 0 32 (mute) widthshow 91.850082 621.688477 M 1.019928 0 32 (x, to gi) widthshow 121.700073 621.688477 M 1.019928 0 32 (v) widthshow 126.550156 621.688477 M 1.019928 0 32 (e other threads a chance to get in and modify the shared data. Ev) widthshow 397.929321 621.688477 M 1.019928 0 32 (entually) widthshow 429.499695 621.688477 M 1.019928 0 32 (,) widthshow 72 633.688477 M 0.005295 0 32 (one of them should signal the condition \(which w) widthshow 270.262421 633.688477 M 0.005295 0 32 (ak) widthshow 279.602478 633.688477 M 0.005295 0 32 (es up the block) widthshow 339.788422 633.688477 M 0.005295 0 32 (ed thread\) before it un-) widthshow 72 645.688354 M 0.463486 0 32 (locks the mute) widthshow 131.107056 645.688354 M 0.463486 0 32 (x. At that point, the original thread will re) widthshow 301.875031 645.688354 M 0.463486 0 32 (g) widthshow 306.825073 645.688354 M 0.463486 0 32 (ain its lock and can look at the) widthshow 72 657.688354 M 0.825226 0 32 (shared data to see if things ha) widthshow 195.061478 657.688354 M 0.825226 0 32 (v) widthshow 199.91156 657.688354 M 0.825226 0 32 (e impro) widthshow 231.41687 657.688354 M 0.825226 0 32 (v) widthshow 236.266953 657.688354 M 0.825226 0 32 (ed. It can\325) widthshow 277.997498 657.688354 M 0.825226 0 32 (t assume that it will lik) widthshow 373.423706 657.688354 M 0.825226 0 32 (e what it sees,) widthshow 72 669.688232 M 0.20195 0 32 (because some other thread may ha) widthshow 210.269882 669.688232 M 0.20195 0 32 (v) widthshow 215.119965 669.688232 M 0.20195 0 32 (e slipped in and muck) widthshow 303.597839 669.688232 M 0.20195 0 32 (ed with the data after the condi-) widthshow (tion w) 72.0 681.688 T (as signaled.) 97.18 681.688 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 60 60 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (56 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (C Thr) 180.0 55.824 T (eads) 203.589 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 0.69664 0 32 (The ) widthshow 0 FF 198.746643 112.650635 M 0.69664 0 32 (condition_signal) widthshow 3 FF 268.766632 112.650635 M 0.69664 0 32 ( function should be called when one thread wishes to indicate that) widthshow 180 124.650574 M 0.904953 0 32 (the condition represented by the condition v) widthshow 361.269867 124.650574 M 0.904953 0 32 (ariable is no) widthshow 411.7099 124.650574 M 0.904953 0 32 (w true. If an) widthshow 463.144867 124.650574 M 0.904953 0 32 (y other threads are) widthshow 180 136.650513 M 0.869247 0 32 (w) widthshow 187.120056 136.650513 M 0.869247 0 32 (aiting \(via ) widthshow 0 FF 232.188553 136.650513 M 0.869247 0 32 (condition_wait) widthshow 3 FF 295.528564 136.650513 M 0.869247 0 32 (\), then at least one of them will be a) widthshow 446.511871 136.650513 M 0.869247 0 32 (w) widthshow 453.631927 136.650513 M 0.869247 0 32 (ak) widthshow 462.971985 136.650513 M 0.869247 0 32 (ened. If no threads) widthshow 180 148.650452 M 0.00087 0 32 (are w) widthshow 201.830933 148.650452 M 0.00087 0 32 (aiting, then nothing happens. The ) widthshow 0 FF 338.215271 148.650452 M 0.00087 0 32 (condition_br) widthshow 393.04538 148.650452 M 0.00087 0 32 (oadcast) widthshow 3 FF 425.265381 148.650452 M 0.00087 0 32 ( function) widthshow 0 FF 461.096252 148.650452 M 0.00087 0 32 ( ) widthshow 3 FF 463.597107 148.650452 M 0.00087 0 32 (is similar to ) widthshow 0 FF 513.329712 148.650452 M 0.00087 0 32 (condi-) widthshow 180 160.650391 M 0.837814 0 32 (tion_signal) widthshow 3 FF 226.679993 160.650391 M 0.837814 0 32 (, e) widthshow 236.807892 160.650391 M 0.837814 0 32 (xcept that it a) widthshow 293.331421 160.650391 M 0.837814 0 32 (w) widthshow 300.451477 160.650391 M 0.837814 0 32 (ak) widthshow 309.791534 160.650391 M 0.837814 0 32 (ens ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 326.459351 160.650391 M 0.837814 0 32 (all) widthshow 3 FF 337.019348 160.650391 M 0.837814 0 32 ( threads w) widthshow 379.695038 160.650391 M 0.837814 0 32 (aiting for the condition, not just one of) widthshow (them.) 180.0 172.65 T 180 196.650269 M 0.309937 0 32 (The ) widthshow 0 FF 198.35994 196.650269 M 0.309937 0 32 (condition_wait) widthshow 3 FF 261.699951 196.650269 M 0.309937 0 32 ( function tak) widthshow 312.769867 196.650269 M 0.309937 0 32 (es as ar) widthshow 342.639832 196.650269 M 0.309937 0 32 (guments a mute) widthshow 406.439819 196.650269 M 0.309937 0 32 (x ) widthshow 4 FF 414.249756 196.650269 M 0.309937 0 32 (m) widthshow 3 FF 421.469727 196.650269 M 0.309937 0 32 ( and a condition v) widthshow 494.119629 196.650269 M 0.309937 0 32 (ariable ) widthshow 4 FF 524.139587 196.650269 M 0.309937 0 32 (c) widthshow 3 FF 528.57959 196.650269 M 0.309937 0 32 (. It) widthshow 180 208.650208 M 1.159973 0 32 (unlocks ) widthshow 4 FF 214.769974 208.650208 M 1.159973 0 32 (m) widthshow 3 FF 221.989975 208.650208 M 1.159973 0 32 (, suspends the calling thread until the speci\336ed condition is ) widthshow 4 FF 472.189697 208.650208 M 1.159973 0 32 (lik) widthshow 482.089783 208.650208 M 1.159973 0 32 (ely) widthshow 3 FF 493.749756 208.650208 M 1.159973 0 32 ( to be true,) widthshow 180 220.650146 M 0.897293 0 32 (and locks ) widthshow 4 FF 222.344589 220.650146 M 0.897293 0 32 (m) widthshow 3 FF 229.56459 220.650146 M 0.897293 0 32 ( ag) widthshow 242.351913 220.650146 M 0.897293 0 32 (ain when the thread resumes. Since there is no guarantee that the condi-) widthshow 180 232.650085 M 0.589325 0 32 (tion will be true when the thread resumes, use of this procedure should al) widthshow 480.291321 232.650085 M 0.589325 0 32 (w) widthshow 487.411377 232.650085 M 0.589325 0 32 (ays be of the) widthshow (form:) 180.0 244.65 T ([1]) 195.34 262.65 T 0 FF ( mutex_lock) 216.0 262.65 T 3 FF (\() 267.94 262.65 T 4 FF (m) 271.27 262.65 T 3 FF (\);) 278.49 262.65 T ([2]) 195.34 274.65 T ( while \(/* condition is not true */\)) 216.0 274.65 T ([3]) 195.34 286.65 T 0 FF ( condition_wait ) 252.0 286.65 T 3 FF (\() 320.34 286.65 T 4 FF (c) 323.67 286.65 T 3 FF (, ) 328.11 286.65 T 4 FF (m) 333.11 286.65 T 3 FF (\);) 340.33 286.65 T ([4]) 195.34 298.65 T (/* do w) 216.0 298.65 T (ork requiring condition */) 245.9 298.65 T ([5]) 195.34 310.65 T 0 FF (mutex_unlock ) 216.0 310.65 T 3 FF (\() 279.06 310.65 T 4 FF (m) 282.39 310.65 T 3 FF (\);) 289.61 310.65 T 180 332.649658 M 1.091644 0 32 (Shared v) widthshow 216.111786 332.649658 M 1.091644 0 32 (ariables should be inspected on each iteration to determine whether the condi-) widthshow (tion is true.) 180.0 344.65 T 180 368.649536 M 1.183731 0 32 (Because of the use of a mute) widthshow 301.922485 368.649536 M 1.183731 0 32 (x in the ) widthshow 0 FF 337.973694 368.649536 M 1.183731 0 32 (condition_wait) widthshow 3 FF 401.31366 368.649536 M 1.183731 0 32 ( call, that mute) widthshow 464.154968 368.649536 M 1.183731 0 32 (x must be held by) widthshow 180 380.649475 M 0.337936 0 32 (an) widthshow 189.290085 380.649475 M 0.337936 0 32 (y caller of ) widthshow 0 FF 233.343903 380.649475 M 0.337936 0 32 (condition_signal) widthshow 3 FF 303.363892 380.649475 M 0.337936 0 32 ( or ) widthshow 0 FF 317.369751 380.649475 M 0.337936 0 32 (condition_br) widthshow 372.19986 380.649475 M 0.337936 0 32 (oadcast) widthshow 3 FF 404.419861 380.649475 M 0.337936 0 32 ( for the associated condition v) widthshow 526.11969 380.649475 M 0.337936 0 32 (ari-) widthshow (able, or the results are unspeci\336ed.) 180.0 392.649 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Pr) 180.0 423.983 T (ecautions) 192.444 423.983 T 3 FF 180 440.649292 M 0.506134 0 32 (One must tak) widthshow 234.242325 440.649292 M 0.506134 0 32 (e special care with data structures that are dynamically allocated and de-al-) widthshow 180 452.649231 M 1.179199 0 32 (located. In particular) widthshow 264.988647 452.649231 M 1.179199 0 32 (, if the mute) widthshow 316.706299 452.649231 M 1.179199 0 32 (x that is controlling access to a dynamically allocated) widthshow 180 464.64917 M 0.588867 0 32 (record is part of the record, one must be sure that no thread is w) widthshow 443.364227 464.64917 M 0.588867 0 32 (aiting for the mute) widthshow 519.14093 464.64917 M 0.588867 0 32 (x be-) widthshow (fore freeing the record.) 180.0 476.649 T 180 500.649048 M 0.48851 0 32 (Attempting to lock a mute) widthshow 286.804138 500.649048 M 0.48851 0 32 (x that one already holds is another common error) widthshow 486.792542 500.649048 M 0.48851 0 32 (. The of) widthshow 518.899658 500.649048 M 0.48851 0 32 (fend-) widthshow 180 512.648987 M 1.367294 0 32 (ing thread will block w) widthshow 278.139221 512.648987 M 1.367294 0 32 (aiting for itself. This can happen when a thread is tra) widthshow 502.402313 512.648987 M 1.367294 0 32 (v) widthshow 507.25238 512.648987 M 1.367294 0 32 (ersing a) widthshow 180 524.648926 M 1.670715 0 32 (complicated data structure, locking as it goes, and reaches the same data by dif) widthshow 516.679443 524.648926 M 1.670715 0 32 (ferent) widthshow 180 536.648865 M 1.085587 0 32 (paths. Another instance of this is when a thread is locking elements in an array) widthshow 509.218597 536.648865 M 1.085587 0 32 (, say to) widthshow (sw) 180.0 548.649 T (ap them, and it doesn\325) 191.01 548.649 T (t check for the special case that the elements are the same.) 279.43 548.649 T 180 572.648743 M 0.319931 0 32 (In general, one must be v) widthshow 282.539734 572.648743 M 0.319931 0 32 (ery careful to a) widthshow 343.549683 572.648743 M 0.319931 0 32 (v) widthshow 348.349792 572.648743 M 0.319931 0 32 (oid deadlock. Deadlock is de\336ned as the condi-) widthshow 180 584.648682 M 0.952103 0 32 (tion in which one or more threads are permanently block) widthshow 415.369019 584.648682 M 0.952103 0 32 (ed w) widthshow 435.381165 584.648682 M 0.952103 0 32 (aiting for each other) widthshow 518.497803 584.648682 M 0.952103 0 32 (. The) widthshow 180 596.648621 M 0.957108 0 32 (abo) widthshow 194.290085 596.648621 M 0.957108 0 32 (v) widthshow 199.140167 596.648621 M 0.957108 0 32 (e scenarios are a special case of deadlock. The easiest w) widthshow 433.251343 596.648621 M 0.957108 0 32 (ay to a) widthshow 461.625671 596.648621 M 0.957108 0 32 (v) widthshow 466.425781 596.648621 M 0.957108 0 32 (oid deadlock with) widthshow 180 608.64856 M 0.857269 0 32 (mute) widthshow 199.850082 608.64856 M 0.857269 0 32 (x) widthshow 204.700165 608.64856 M 0.857269 0 32 (es is to impose a total ordering on the mute) widthshow 384.755676 608.64856 M 0.857269 0 32 (x) widthshow 389.605774 608.64856 M 0.857269 0 32 (es, and then ensure that threads only) widthshow (lock mute) 180.0 620.649 T (x) 219.57 620.649 T (es in increasing order) 224.42 620.649 T (.) 309.68 620.649 T 180 644.648438 M 1.232834 0 32 (One important issue the programmer must decide is what kind of granularity to use in) widthshow 180 656.648376 M 0.470688 0 32 (protecting shared data with mute) widthshow 312.822845 656.648376 M 0.470688 0 32 (x) widthshow 317.672913 656.648376 M 0.470688 0 32 (es. The tw) widthshow 359.894348 656.648376 M 0.470688 0 32 (o e) widthshow 372.155151 656.648376 M 0.470688 0 32 (xtremes are to ha) widthshow 441.957336 656.648376 M 0.470688 0 32 (v) widthshow 446.807404 656.648376 M 0.470688 0 32 (e one mute) widthshow 491.478882 656.648376 M 0.470688 0 32 (x protecting) widthshow 180 668.648315 M 0.244553 0 32 (all shared memory) widthshow 254.26947 668.648315 M 0.244553 0 32 (, and to ha) widthshow 296.463257 668.648315 M 0.244553 0 32 (v) widthshow 301.313324 668.648315 M 0.244553 0 32 (e one mute) widthshow 345.532532 668.648315 M 0.244553 0 32 (x for e) widthshow 371.871765 668.648315 M 0.244553 0 32 (v) widthshow 376.721863 668.648315 M 0.244553 0 32 (ery byte of shared memory) widthshow 484.800415 668.648315 M 0.244553 0 32 (. Finer granu-) widthshow 180 680.648254 M 0.707657 0 32 (larity normally increases the possible parallelism, because less data is lock) widthshow 484.986633 680.648254 M 0.707657 0 32 (ed at an) widthshow 517.352051 680.648254 M 0.707657 0 32 (y one) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 61 61 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (57 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Synchr) 72.0 55.824 T (onization) 99.342 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666626 M 0.622208 0 32 (time. Ho) widthshow 107.372345 114.666626 M 0.622208 0 32 (we) widthshow 118.782486 114.666626 M 0.622208 0 32 (v) widthshow 123.632568 114.666626 M 0.622208 0 32 (er) widthshow 131.002792 114.666626 M 0.622208 0 32 (, it also increases the o) widthshow 224.503922 114.666626 M 0.622208 0 32 (v) widthshow 229.354004 114.666626 M 0.622208 0 32 (erhead lost to locking and unlocking mute) widthshow 401.257324 114.666626 M 0.622208 0 32 (x) widthshow 406.107422 114.666626 M 0.622208 0 32 (es and) widthshow (increases the possibility of deadlock.) 72.0 126.667 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (Management of Synchr) 72.0 158.0 T (onization V) 191.772 158.0 T (ariables) 249.673 158.0 T 3 FF 72 174.666458 M 1.124954 0 32 (A mute) widthshow 102.695038 174.666458 M 1.124954 0 32 (x or condition v) widthshow 169.430038 174.666458 M 1.124954 0 32 (ariable can be allocated dynamically from the heap, or the pro-) widthshow 72 186.666397 M 0.892792 0 32 (grammer can tak) widthshow 140.885651 186.666397 M 0.892792 0 32 (e an object of the referent type, initialize it appropriately) widthshow 374.331177 186.666397 M 0.892792 0 32 (, and then use) widthshow (its address.) 72.0 198.666 T 72 222.666275 M 1.795502 0 32 (The functions ) widthshow 1 FF 133.361008 222.666275 M 1.795502 0 32 (mutex_alloc) widthshow 3 FF 185.021011 222.666275 M 1.795502 0 32 ( and ) widthshow 1 FF 208.052017 222.666275 M 1.795502 0 32 (condition_alloc) widthshow 3 FF 273.062012 222.666275 M 1.795502 0 32 ( pro) widthshow 290.537598 222.666275 M 1.795502 0 32 (vide dynamic allocation of mute) widthshow 426.999695 222.666275 M 1.795502 0 32 (x) widthshow (and condition objects.) 72.0 234.666 T 1 FF 72 258.666138 M 1.083939 0 32 (mutex_fr) widthshow 111.250107 258.666138 M 1.083939 0 32 (ee) widthshow 3 FF 120.130112 258.666138 M 1.083939 0 32 ( and ) widthshow 1 FF 141.737991 258.666138 M 1.083939 0 32 (condition_fr) widthshow 194.338089 258.666138 M 1.083939 0 32 (ee) widthshow 3 FF 203.218094 258.666138 M 1.083939 0 32 ( allo) widthshow 221.55217 258.666138 M 1.083939 0 32 (w the programmer to de-allocate mute) widthshow 379.84198 258.666138 M 1.083939 0 32 (x and condi-) widthshow 72 270.666077 M 0.106613 0 32 (tion objects that were allocated dynamically) widthshow 248.243439 270.666077 M 0.106613 0 32 (. Before de-allocating such an object, the pro-) widthshow 72 282.666016 M 1.811478 0 32 (grammer must guarantee that no other thread will reference it. In particular) widthshow 391.446533 282.666016 M 1.811478 0 32 (, a thread) widthshow 72 294.665955 M 1.526337 0 32 (block) widthshow 94.120056 294.665955 M 1.526337 0 32 (ed in ) widthshow 1 FF 119.392731 294.665955 M 1.526337 0 32 (mutex_lock) widthshow 3 FF 168.832733 294.665955 M 1.526337 0 32 ( or ) widthshow 1 FF 185.215408 294.665955 M 1.526337 0 32 (condition_wait) widthshow 3 FF 248.555405 294.665955 M 1.526337 0 32 ( should be vie) widthshow 308.714539 294.665955 M 1.526337 0 32 (wed as referencing the object) widthshow 72 306.665894 M 0.141937 0 32 (continually) widthshow 116.350357 306.665894 M 0.141937 0 32 (, so freeing the object \322out from under\323 such a thread is erroneous, and can re-) widthshow (sult in b) 72.0 318.666 T (ugs that are e) 104.03 318.666 T (xtremely dif) 156.92 318.666 T 205.83 318.666 T (wn.) 271.41 318.666 T 72 342.665771 M 0.178528 0 32 (A programmer can initialize an object of the struct) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 275.608246 342.665771 M 0.178528 0 32 ( mute) widthshow 297.526886 342.665771 M 0.178528 0 32 (x) widthshow 3 FF 301.966888 342.665771 M 0.178528 0 32 ( or struct) widthshow 5 FF 337.873962 342.665771 M 0.178528 0 32 ( condition) widthshow 3 FF 378.332458 342.665771 M 0.178528 0 32 ( referent type) widthshow 72 354.66571 M 0.487823 0 32 (with ) widthshow 1 FF 92.767822 354.66571 M 0.487823 0 32 (mutex_init) widthshow 3 FF 138.877823 354.66571 M 0.487823 0 32 ( or ) widthshow 1 FF 153.183472 354.66571 M 0.487823 0 32 (condition_init) widthshow 3 FF 212.643463 354.66571 M 0.487823 0 32 (, so that its address can be used where) widthshow 368.206207 354.66571 M 0.487823 0 32 (v) widthshow 373.056274 354.66571 M 0.487823 0 32 (er an object of) widthshow 72 366.665649 M 0.33577 0 32 (type ) widthshow 5 FF 92.055771 366.665649 M 0.33577 0 32 (mute) widthshow 111.295883 366.665649 M 0.33577 0 32 (x_t) widthshow 3 FF 123.515884 366.665649 M 0.33577 0 32 ( or ) widthshow 5 FF 137.517426 366.665649 M 0.33577 0 32 (condition_t) widthshow 3 FF 183.077423 366.665649 M 0.33577 0 32 ( is e) widthshow 199.709045 366.665649 M 0.33577 0 32 (xpected. F) widthshow 241.554901 366.665649 M 0.33577 0 32 (or e) widthshow 257.010742 366.665649 M 0.33577 0 32 (xample, the ) widthshow 1 FF 306.842285 366.665649 M 0.33577 0 32 (mutex_alloc) widthshow 3 FF 358.502319 366.665649 M 0.33577 0 32 ( function could be) widthshow (written in terms of ) 72.0 378.666 T 1 FF (mutex_init) 148.66 378.666 T 3 FF ( as follo) 194.77 378.666 T (ws:) 226.74 378.666 T ([1]) 87.34 396.666 T 5 FF ( mute) 108.0 396.666 T (x_t) 129.74 396.666 T 1 FF ( mutex_alloc) 141.96 396.666 T 3 FF (\(\)) 196.12 396.666 T ([2]) 87.34 408.665 T ({) 108.0 408.665 T ([3]) 87.34 420.665 T (re) 144.0 420.665 T (gister) 151.62 420.665 T 5 FF ( mute) 173.84 420.665 T (x_t) 195.58 420.665 T (m) 288.0 420.665 T 3 FF (;) 295.22 420.665 T ([4]) 87.34 432.665 T 5 FF ( m) 144.0 432.665 T 3 FF ( = \() 153.72 432.665 T 5 FF (mute) 167.69 432.665 T (x_t) 186.93 432.665 T 3 FF (\) ) 199.15 432.665 T 1 FF (malloc ) 204.98 432.665 T 3 FF (\(sizeof \(struct ) 235.81 432.665 T 5 FF (mute) 293.57 432.665 T (x) 312.81 432.665 T 3 FF (\)\);) 317.25 432.665 T ([5]) 87.34 444.665 T ( ) 144.0 444.665 T 1 FF (mutex_init) 146.5 444.665 T 3 FF (\() 192.61 444.665 T 5 FF (m) 195.94 444.665 T 3 FF (\);) 203.16 444.665 T ([6]) 87.34 456.665 T ( return ) 144.0 456.665 T 5 FF (m) 172.88 456.665 T 3 FF (;) 180.1 456.665 T ([7]) 87.34 468.665 T (}) 108.0 468.665 T 72 490.6651 M 0.880737 0 32 (Initialization of the referent type is most often used when the programmer has included) widthshow 72 502.665039 M 0.40596 0 32 (the referent type itself \(rather than a pointer\) in a lar) widthshow 284.149719 502.665039 M 0.40596 0 32 (ger structure, for more ef) widthshow 385.763733 502.665039 M 0.40596 0 32 widthshow 72 514.664978 M 1.319199 0 32 (age allocation. F) widthshow 140.868484 514.664978 M 1.319199 0 32 (or instance, a data structure might contain a component of type struct) widthshow 5 FF 72 526.664917 M 0.566864 0 32 (mute) widthshow 91.240112 526.664917 M 0.566864 0 32 (x) widthshow 3 FF 95.680115 526.664917 M 0.566864 0 32 ( to allo) widthshow 124.343979 526.664917 M 0.566864 0 32 (w each instance of that structure to be lock) widthshow 299.848969 526.664917 M 0.566864 0 32 (ed independently) widthshow 368.366211 526.664917 M 0.566864 0 32 (. During initial-) widthshow 72 538.664856 M 0.668411 0 32 (ization of the instance, the programmer w) widthshow 242.820541 538.664856 M 0.668411 0 32 (ould call ) widthshow 1 FF 281.37738 538.664856 M 0.668411 0 32 (mutex_init) widthshow 3 FF 327.487366 538.664856 M 0.668411 0 32 ( on the struct ) widthshow 5 FF 384.601013 538.664856 M 0.668411 0 32 (mute) widthshow 403.841125 538.664856 M 0.668411 0 32 (x) widthshow 3 FF 408.281128 538.664856 M 0.668411 0 32 ( com-) widthshow 72 550.664795 M 4.551773 0 32 (ponent. The alternati) widthshow 163.893692 550.664795 M 4.551773 0 32 (v) widthshow 168.743774 550.664795 M 4.551773 0 32 (e of using a ) widthshow 5 FF 235.830872 550.664795 M 4.551773 0 32 (mute) widthshow 255.070984 550.664795 M 4.551773 0 32 (x_t) widthshow 3 FF 267.290985 550.664795 M 4.551773 0 32 ( component and initializing it using) widthshow 1 FF (mutex_alloc) 72.0 562.665 T 3 FF ( w) 123.66 562.665 T (ould be less ef) 133.28 562.665 T 190.52 562.665 T 1 FF 72 586.664673 M 0.563965 0 32 (mutex_clear) widthshow 3 FF 124.76001 586.664673 M 0.563965 0 32 ( and ) widthshow 1 FF 145.327942 586.664673 M 0.563965 0 32 (condition_clear) widthshow 3 FF 211.437943 586.664673 M 0.563965 0 32 ( should be called before freeing the storage associated) widthshow 3 FF 72 598.664612 M 0.139313 0 32 (with an object of the struct ) widthshow 5 FF 182.265884 598.664612 M 0.139313 0 32 (mute) widthshow 201.505997 598.664612 M 0.139313 0 32 (x) widthshow 3 FF 205.945999 598.664612 M 0.139313 0 32 ( or struct ) widthshow 5 FF 244.41394 598.664612 M 0.139313 0 32 (condition) widthshow 3 FF 282.193939 598.664612 M 0.139313 0 32 ( referent type. \(Clearing a mute) widthshow 408.26062 598.664612 M 0.139313 0 32 (x cur-) widthshow 3 FF 72 610.664551 M 0.5336 0 32 (rently does nothing; clearing a condition v) widthshow 244.381744 610.664551 M 0.5336 0 32 (ariable broadcasts its condition.\) F) widthshow 384.40625 610.664551 M 0.5336 0 32 (or e) widthshow 400.059937 610.664551 M 0.5336 0 32 (xample,) widthshow 3 FF (the ) 72.0 622.665 T 1 FF (mutex_fr) 86.72 622.665 T (ee) 125.97 622.665 T 3 FF ( procedure could be written in terms of ) 134.85 622.665 T 1 FF (mutex_clear) 293.15 622.665 T 3 FF ( as follo) 345.91 622.665 T (ws:) 377.88 622.665 T ([1]) 87.34 640.664 T (v) 108.0 640.664 T (oid ) 112.8 640.664 T 1 FF (mutex_fr) 128.08 640.664 T (ee ) 167.33 640.664 T 3 FF (\() 178.71 640.664 T 5 FF (mute) 182.04 640.664 T (x_t m) 201.28 640.664 T 3 FF (\)) 223.22 640.664 T ([2]) 87.34 652.664 T ({) 108.0 652.664 T ([3]) 87.34 664.664 T 1 FF (mutex_clear) 144.0 664.664 T 3 FF (\() 196.76 664.664 T 5 FF (m) 200.09 664.664 T 3 FF (\);) 207.31 664.664 T ([4]) 87.34 676.664 T 1 FF (fr) 144.0 676.664 T (ee ) 151.59 676.664 T 3 FF (\(\(char *\) ) 162.97 676.664 T 5 FF (m) 200.17 676.664 T 3 FF (\);) 207.39 676.664 T ([5]) 87.34 688.664 T (}) 108.0 688.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 62 62 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (58 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (C Thr) 180.0 55.824 T (eads) 203.589 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 180 119.983932 360 3.024002 CR 0.25 SL 2 SC 0 G 540 121.5 M 180 121.5 L S 0 0 612 792 CR 3 (Times-Bold) 14 1 mymakefontmetric 3 FF (Shar) 180.0 115.317 T (ed V) 208.532 115.317 T (ariables) 234.853 115.317 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 180 139.674561 M 0.224609 0 32 (All global and static v) widthshow 268.978577 139.674561 M 0.224609 0 32 (ariables are shared among all threads: if one thread modi\336es such a) widthshow 180 151.6745 M 1.249161 0 32 (v) widthshow 184.750137 151.6745 M 1.249161 0 32 (ariable, all other threads will observ) widthshow 334.706055 151.6745 M 1.249161 0 32 (e the ne) widthshow 368.054504 151.6745 M 1.249161 0 32 (w v) widthshow 383.773804 151.6745 M 1.249161 0 32 (alue. In addition, a v) widthshow 470.730591 151.6745 M 1.249161 0 32 (ariable reachable) widthshow 180 163.674438 M 1.49353 0 32 (from a pointer is shared among all threads that can de-reference that pointer) widthshow 500.622711 163.674438 M 1.49353 0 32 (. This in-) widthshow 180 175.674377 M 0.213547 0 32 (cludes objects pointed to by shared v) widthshow 328.791443 175.674377 M 0.213547 0 32 (ariables of pointer type, as well as ar) widthshow 476.736389 175.674377 M 0.213547 0 32 (guments passed) widthshow (by reference in ) 180.0 187.674 T 0 FF (cthr) 242.47 187.674 T (ead_f) 260.06 187.674 T (ork) 283.14 187.674 T 4 FF (.) 298.14 187.674 T 180 211.674255 M 1.152451 0 32 (When pointers are shared, some care is required to a) widthshow 399.552185 211.674255 M 1.152451 0 32 (v) widthshow 404.352295 211.674255 M 1.152451 0 32 (oid dangling reference problems.) widthshow 180 223.674194 M 0.613327 0 32 (The programmer must ensure that the lifetime of the object pointed to is long enough to) widthshow 180 235.674133 M 0.196609 0 32 (allo) widthshow 194.750137 235.674133 M 0.196609 0 32 (w the other threads to de-reference the pointer) widthshow 380.236755 235.674133 M 0.196609 0 32 (. Since there is no bound on the relati) widthshow 530.709778 235.674133 M 0.196609 0 32 (v) widthshow 535.559814 235.674133 M 0.196609 0 32 (e) widthshow 180 247.674072 M 0.322113 0 32 (e) widthshow 184.290085 247.674072 M 0.322113 0 32 (x) widthshow 189.140167 247.674072 M 0.322113 0 32 (ecution speed of threads, the simplest solution is to share pointers to global or heap-al-) widthshow 180 259.674011 M 0.338699 0 32 (located objects only) widthshow 260.017761 259.674011 M 0.338699 0 32 (. If a pointer to a local v) widthshow 358.228821 259.674011 M 0.338699 0 32 (ariable is shared, the procedure in which that) widthshow 180 271.67395 M 0.768585 0 32 (v) widthshow 184.750137 271.67395 M 0.768585 0 32 (ariable is de\336ned must remain acti) widthshow 325.823212 271.67395 M 0.768585 0 32 (v) widthshow 330.673279 271.67395 M 0.768585 0 32 (e until it can be guaranteed that the pointer will no) widthshow 180 283.673889 M 1.003296 0 32 (longer be de-referenced by other threads. The synchronization functions can be used to) widthshow (ensure this.) 180.0 295.674 T 180 319.673767 M 1.543762 0 32 (The programmer must remember that unless a library) widthshow 403.726715 319.673767 M 1.543762 0 32 (, lik) widthshow 420.73053 319.673767 M 1.543762 0 32 (e the standard C library) widthshow 520.125977 319.673767 M 1.543762 0 32 (, has) widthshow 180 331.673706 M 0.814926 0 32 (been designed to w) widthshow 259.274841 331.673706 M 0.814926 0 32 (ork in the presence of re-entranc) widthshow 392.869568 331.673706 M 0.814926 0 32 (y) widthshow 397.21994 331.673706 M 0.814926 0 32 (, the operations pro) widthshow 476.724792 331.673706 M 0.814926 0 32 (vided by the li-) widthshow 180 343.673645 M 0.420761 0 32 (brary must be presumed to mak) widthshow 308.373871 343.673645 M 0.420761 0 32 (e unprotected use of shared data. Hence, the programmer) widthshow 180 355.673584 M 1.068604 0 32 (must protect ag) widthshow 243.747238 355.673584 M 1.068604 0 32 (ainst this through the use of a mute) widthshow 391.347534 355.673584 M 1.068604 0 32 (x that is lock) widthshow 445.843414 355.673584 M 1.068604 0 32 (ed before e) widthshow 492.150757 355.673584 M 1.068604 0 32 (v) widthshow 497.000854 355.673584 M 1.068604 0 32 (ery library) widthshow (call \(or sequence of library calls\) and unlock) 180.0 367.674 T (ed afterw) 358.46 367.674 T (ards.) 395.84 367.674 T 180 391.673462 M 0.637924 0 32 (Dynamic allocation and freeing of user) widthshow 339.339752 391.673462 M 0.637924 0 32 (-de\336ned data structures is typically accomplished) widthshow 180 403.673401 M 0.512268 0 32 (with the standard C functions ) widthshow 0 FF 302.83136 403.673401 M 0.512268 0 32 (malloc) widthshow 4 FF 331.161346 403.673401 M 0.512268 0 32 ( and ) widthshow 0 FF 351.625885 403.673401 M 0.512268 0 32 (fr) widthshow 359.216003 403.673401 M 0.512268 0 32 (ee) widthshow 4 FF 368.096008 403.673401 M 0.512268 0 32 (. The C threads package pro) widthshow 482.697449 403.673401 M 0.512268 0 32 (vides v) widthshow 511.6698 403.673401 M 0.512268 0 32 (ersions) widthshow (of these functions that w) 180.0 415.673 T (ork correctly in the presence of multiple threads.) 278.22 415.673 T 180 458.006592 360 3.024002 CR 540 459.52 M 180 459.52 L S 0 0 612 792 CR 3 FF (Using the C Thr) 180.0 453.34 T (eads P) 276.586 453.34 T (ackage) 314.946 453.34 T 4 FF 180 477.697205 M 0.75058 0 32 (T) widthshow 185.31044 477.697205 M 0.75058 0 32 (o compile a program that uses C threads, the user must include the \336le ) widthshow 0 FF 479.39856 477.697205 M 0.75058 0 32 (cthr) widthshow 496.988678 477.697205 M 0.75058 0 32 (eads.h) widthshow 4 FF 523.93866 477.697205 M 0.75058 0 32 (. T) widthshow 534.999695 477.697205 M 0.75058 0 32 (o) widthshow 180 489.697144 M 0.00293 0 32 (link a program that uses C threads, the user must specify on the ) widthshow 0 FF 436.118103 489.697144 M 0.00293 0 32 (cc) widthshow 4 FF 444.998108 489.697144 M 0.00293 0 32 ( command line the ) widthshow 0 FF 521.6698 489.697144 M 0.00293 0 32 (-lth-) widthshow 180 501.697083 M 0.192566 0 32 (r) widthshow 184.260101 501.697083 M 0.192566 0 32 (eads ) widthshow 4 FF 205.842667 501.697083 M 0.192566 0 32 (library before the ) widthshow 0 FF 278.340393 501.697083 M 0.192566 0 32 (-lmach) widthshow 4 FF 307.780396 501.697083 M 0.192566 0 32 ( library) widthshow 336.483307 501.697083 M 0.192566 0 32 (. Linking a program in this w) widthshow 454.47876 501.697083 M 0.192566 0 32 (ay is suf) widthshow 487.944031 501.697083 M 0.192566 0 32 widthshow (tialize and be) 180.0 513.697 T (gin use of the C threads package.) 233.17 513.697 T 180 556.030273 360 3.024002 CR 540 557.54 M 180 557.54 L S 0 0 612 792 CR 3 FF (Deb) 180.0 551.364 T (ugging) 203.828 551.364 T 4 FF (Deb) 180.0 575.721 T (ugging with multiple C threads can be a problem for a v) 196.46 575.721 T (ariety of reasons:) 420.35 575.721 T 5 (Times-Roman) 7 1 mymakefontmetric 5 FF 180.0 593.721 T 4 FF 193.535995 593.720825 M 0.204849 0 32 (The order of thread conte) widthshow 295.83551 593.720825 M 0.204849 0 32 (xt switching is not repeatable in successi) widthshow 459.574738 593.720825 M 0.204849 0 32 (v) widthshow 464.424805 593.720825 M 0.204849 0 32 (e e) widthshow 475.859741 593.720825 M 0.204849 0 32 (x) widthshow 480.709839 593.720825 M 0.204849 0 32 (ecutions of the) widthshow (program, so ob) 193.536 605.721 T (vious synchronization b) 253.656 605.721 T (ugs may be dif) 349.006 605.721 T 407.916 605.721 T 5 FF 180.0 620.721 T 4 FF 193.535995 620.720703 M 0.850296 0 32 (Since the program consists of multiple e) widthshow 359.58786 620.720703 M 0.850296 0 32 (x) widthshow 364.437927 620.720703 M 0.850296 0 32 (ecution points, e) widthshow 431.818604 620.720703 M 0.850296 0 32 (xisting deb) widthshow 476.639038 620.720703 M 0.850296 0 32 (uggers may not) widthshow (be usable.) 193.536 632.721 T 6 (Times-Roman) 8 1 mymakefontmetric 6 FF (1) 233.526 628.721 T 5 FF 180.0 647.721 T 4 FF (The user may need to w) 193.536 647.721 T (orry about concurrent calls to C library routines.) 289.246 647.721 T 180 658.976074 360 30.024002 CR 324 676.98 M 180 676.98 L S 0 0 612 792 CR 7 (Times-Roman) 9 1 mymakefontmetric 7 FF (1. A C thread version of ) 180.0 695.0 T 2 FF (gdb) 271.485 695.0 T 7 FF ( is in the works.) 285.993 695.0 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 63 63 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (59 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Examples) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 0 SC 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666626 M 0.746841 0 32 (One w) widthshow 99.026901 114.666626 M 0.746841 0 32 (ay to a) widthshow 126.980698 114.666626 M 0.746841 0 32 (v) widthshow 131.780807 114.666626 M 0.746841 0 32 (oid these problems is to set the number of k) widthshow 313.112427 114.666626 M 0.746841 0 32 (ernel threads to 1 \() widthshow 1 FF 391.079834 114.666626 M 0.746841 0 32 (cthr) widthshow 408.669922 114.666626 M 0.746841 0 32 (ead_-) widthshow 72 126.666565 M 0.967056 0 32 (set_k) widthshow 94.120056 126.666565 M 0.967056 0 32 (er) widthshow 102.850143 126.666565 M 0.967056 0 32 (nel_limit) widthshow 3 FF 140.630142 126.666565 M 0.967056 0 32 (\). In this w) widthshow 186.761368 126.666565 M 0.967056 0 32 (ay) widthshow 195.551727 126.666565 M 0.967056 0 32 (, the v) widthshow 221.955978 126.666565 M 0.967056 0 32 (arious C threads act as co-routines and may be de-) widthshow (b) 72.0 138.667 T (ugged more as a sequential program.) 76.8 138.667 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (Associating Names with C Thr) 72.0 170.0 T (ead Objects) 228.444 170.0 T 3 FF 72 186.666397 M 0.158188 0 32 (A name \(actually) widthshow 140.536743 186.666397 M 0.158188 0 32 (, a pointer to a character string\) can be associated with a C thread, a mu-) widthshow 72 198.666336 M 0.268631 0 32 (te) widthshow 79.070084 198.666336 M 0.268631 0 32 (x or a condition v) widthshow 150.444748 198.666336 M 0.268631 0 32 (ariable. These names are not currently used for an) widthshow 352.103912 198.666336 M 0.268631 0 32 (ything, b) widthshow 387.732666 198.666336 M 0.268631 0 32 (ut the) widthshow 410.351379 198.666336 M 0.268631 0 32 (y can) widthshow 72 210.666275 M 1.47995 0 32 (be of use to deb) widthshow 141.039917 210.666275 M 1.47995 0 32 (ugging. Such names are set via ) widthshow 1 FF 276.289612 210.666275 M 1.47995 0 32 (cthr) widthshow 293.87973 210.666275 M 1.47995 0 32 (ead_set_name) widthshow 3 FF 353.869751 210.666275 M 1.47995 0 32 (, ) widthshow 1 FF 360.34967 210.666275 M 1.47995 0 32 (mutex_set_name) widthshow 3 FF 72 222.666214 M 2.092438 0 32 (and ) widthshow 1 FF 91.03244 222.666214 M 2.092438 0 32 (condition_set_name) widthshow 3 FF 176.03244 222.666214 M 2.092438 0 32 (, and retrie) widthshow 223.007462 222.666214 M 2.092438 0 32 (v) widthshow 227.857544 222.666214 M 2.092438 0 32 (ed via ) widthshow 1 FF 258.702423 222.666214 M 2.092438 0 32 (cthr) widthshow 276.292542 222.666214 M 2.092438 0 32 (ead_name) widthshow 3 FF 319.622528 222.666214 M 2.092438 0 32 (, ) widthshow 1 FF 326.714966 222.666214 M 2.092438 0 32 (mutex_name) widthshow 3 FF 381.704956 222.666214 M 2.092438 0 32 ( and ) widthshow 1 FF 405.329834 222.666214 M 2.092438 0 32 (condi-) widthshow (tion_name) 72.0 234.666 T 3 FF (.) 117.0 234.666 T 4 FF (Pitfalls of Pr) 72.0 265.999 T (eempti) 136.44 265.999 T (v) 170.976 265.999 T (ely Scheduled Thr) 176.856 265.999 T (eads) 269.988 265.999 T 3 FF 72 282.666046 M 1.312103 0 32 (The C run-time library needs a substantial amount of modi\336cation in order to be used) widthshow 72 294.665985 M 0.034561 0 32 (with preempti) widthshow 127.6147 294.665985 M 0.034561 0 32 (v) widthshow 132.464783 294.665985 M 0.034561 0 32 (ely scheduled threads. Currently the user must ensure that calls to the stan-) widthshow 72 306.665924 M 0.19928 0 32 (dard I/O library are serialized, through the use of one or more mute) widthshow 343.341492 306.665924 M 0.19928 0 32 (x v) widthshow 355.790894 306.665924 M 0.19928 0 32 (ariables. \(The stor-) widthshow (age allocation functions ) 72.0 318.666 T 1 FF (malloc) 170.04 318.666 T 3 FF ( and ) 198.37 318.666 T 1 FF (fr) 217.81 318.666 T (ee ) 225.4 318.666 T 3 FF (do not require an) 236.78 318.666 T (y special precautions.\)) 304.67 318.666 T 72 342.665802 M 0.419189 0 32 (The deb) widthshow 104.709305 342.665802 M 0.419189 0 32 (uggers currently a) widthshow 177.547806 342.665802 M 0.419189 0 32 (v) widthshow 182.297943 342.665802 M 0.419189 0 32 (ailable under Mach cannot be used on programs that run with) widthshow 72 354.665741 M 0.931625 0 32 (preempti) widthshow 107.30014 354.665741 M 0.931625 0 32 (v) widthshow 112.150223 354.665741 M 0.931625 0 32 (ely scheduled threads. Furthermore, the v) widthshow 282.458435 354.665741 M 0.931625 0 32 (ery act of turning on tracing or add-) widthshow 72 366.66568 M 1.269943 0 32 (ing print statements may perturb programs that incorrectly depend on thread e) widthshow 397.709473 366.66568 M 1.269943 0 32 (x) widthshow 402.55957 366.66568 M 1.269943 0 32 (ecution) widthshow 72 378.665619 M 0.314331 0 32 (speed. One technique that is useful in such cases is to v) widthshow 296.287781 378.665619 M 0.314331 0 32 (ary the granularity of locking and) widthshow 72 390.665558 M 1.054993 0 32 (synchronization used in the program, making sure that the program w) widthshow 361.02002 390.665558 M 1.054993 0 32 (orks with coarse-) widthshow (grained synchronization before re\336ning it further) 72.0 402.665 T (.) 267.24 402.665 T 72 444.998718 360 3.024002 CR 432 446.51 M 72 446.51 L S 0 0 612 792 CR 5 (Times-Bold) 14 1 mymakefontmetric 5 FF (Examples) 72.0 440.332 T 3 FF (The follo) 72.0 464.689 T (wing e) 108.69 464.689 T (xamples illustrate the use of the C threads f) 135.48 464.689 T (acilities.) 308.69 464.689 T 4 FF (Hoar) 72.0 496.023 T (e Monitors) 98.448 496.023 T 3 FF (This program demonstrates the use of these f) 72.0 512.689 T (acilities to program Hoare monitors.) 251.59 512.689 T 72 524.022583 360 9 CR 1 G 72 524.022583 360 9 NF 0 G 3 FF (/*) 91.224 530.854 T 3 SL 0 SC 0.6667 G 422.91 528.52 M 422.91 533.77 L 432 528.52 L 422.91 523.27 L F 422.91 528.52 M 108 528.52 L S 0 0 612 792 CR 0 G 3 FF (Producer/consumer with bounded b) 108.0 539.689 T (uf) 250.28 539.689 T (fer) 258.36 539.689 T (.) 268.911 539.689 T 108 549.689148 M 1.834946 0 32 (The producer reads characters from stdin and puts them into the b) widthshow 390.984558 549.689148 M 1.834946 0 32 (uf) widthshow 399.064697 549.689148 M 1.834946 0 32 (fer) widthshow 409.61499 549.689148 M 1.834946 0 32 (. The) widthshow 108 559.689087 M 1.564941 0 32 (consumer gets characters from the b) widthshow 260.30484 559.689087 M 1.564941 0 32 (uf) widthshow 268.384979 559.689087 M 1.564941 0 32 (fer and writes them to stdout. The tw) widthshow 426.999634 559.689087 M 1.564941 0 32 (o) widthshow 72 573.022339 360 9 CR 1 G 72 573.022339 360 9 NF 0 G 3 FF (*/) 90.0 579.849 T 0.6667 G 117.09 577.52 M 117.09 572.27 L 108 577.52 L 117.09 582.77 L F 432 577.52 M 117.09 577.52 L S 0 0 612 792 CR 0 G 3 FF (threads e) 108.0 569.689 T (x) 143.67 569.689 T (ecute concurrently e) 148.52 569.689 T (xcept when synchronized by the b) 229.45 569.689 T (uf) 365.61 569.689 T (fer) 373.691 569.689 T (.) 384.241 569.689 T ([1]) 87.34 590.689 T (#include ) 108.0 590.689 T 1 FF () 144.94 590.689 T 3 FF ([2]) 87.34 602.689 T (#include ) 108.0 602.689 T 1 FF () 168.23 602.689 T 3 FF ([3]) 87.34 614.689 T (typedef struct ) 108.0 614.689 T 6 (Times-Italic) 10 1 mymakefontmetric 6 FF (b) 165.21 614.689 T (uf) 170.01 614.689 T (fer) 177.61 614.689 T 3 FF ([4]) 87.34 626.689 T ({) 108.0 626.689 T ([5]) 87.34 638.689 T (struct) 144.0 638.689 T 6 FF ( mute) 166.22 638.689 T (x) 187.96 638.689 T (loc) 288.0 638.689 T (k) 300.02 638.689 T 3 FF (;) 304.46 638.689 T ([6]) 87.34 650.689 T (char *) 144.0 650.689 T 6 FF (c) 288.0 650.689 T (har) 292.29 650.689 T (s) 306.08 650.689 T 3 FF (;) 309.97 650.689 T 72 656.021973 360 9 CR 1 G 72 656.021973 360 9 NF 0 G 3 FF (/*) 90.0 662.853 T 0.6667 G 422.91 660.52 M 422.91 665.77 L 432 660.52 L 422.91 655.27 L F 422.91 660.52 M 288 660.52 L S 72 675.021912 360 9 CR 1 G 72 675.021912 360 9 NF 0 G 3 FF (*/) 90.0 681.848 T 0.6667 G 297.09 679.52 M 297.09 674.27 L 288 679.52 L 297.09 684.77 L F 432 679.52 M 297.09 679.52 L S 0 0 612 792 CR 0 G 6 FF (c) 288.0 671.689 T (har) 292.29 671.689 T (s) 306.08 671.689 T 3 FF ([0...) 309.97 671.689 T 6 FF (size) 325.8 671.689 T 3 FF 340.8 671.689 T ([7]) 87.34 692.689 T (int) 144.0 692.689 T 6 FF (size) 288.0 692.689 T 3 FF (;) 303.0 692.689 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 64 64 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (60 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (C Thr) 180.0 55.824 T (eads) 203.589 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([8]) 195.34 112.651 T (int) 252.0 112.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (px) 396.0 112.651 T 3 FF (,) 405.44 112.651 T 4 FF ( cx) 407.94 112.651 T 3 FF (;) 419.32 112.651 T 180 117.983948 360 9 CR 1 G 180 117.983948 360 9 NF 0 G 3 FF (/*) 198.0 124.815 T 3 SL 0.6667 G 530.91 122.48 M 530.91 127.73 L 540 122.48 L 530.91 117.23 L F 530.91 122.48 M 396 122.48 L S 180 136.983887 360 9 CR 1 G 180 136.983887 360 9 NF 0 G 3 FF (*/) 198.0 143.81 T 0.6667 G 405.09 141.48 M 405.09 136.23 L 396 141.48 L 405.09 146.73 L F 540 141.48 M 405.09 141.48 L S 0 0 612 792 CR 0 G 3 FF (producer and consumer indices) 396.0 133.651 T ([9]) 195.34 154.651 T (int) 252.0 154.651 T 4 FF (count) 396.0 154.651 T 3 FF (;) 418.22 154.651 T 180 159.983826 360 9 CR 1 G 180 159.983826 360 9 NF 0 G 3 FF (/*) 198.0 166.815 T 0.6667 G 530.91 164.48 M 530.91 169.73 L 540 164.48 L 530.91 159.23 L F 530.91 164.48 M 396 164.48 L S 0 0 612 792 CR 0 G 3 FF 396 175.650452 M 3.089981 0 32 (number of un-consumed chars in) widthshow 180 188.983704 360 9 CR 1 G 180 188.983704 360 9 NF 0 G 3 FF (*/) 198.0 195.81 T 0.6667 G 405.09 193.48 M 405.09 188.23 L 396 193.48 L 405.09 198.73 L F 540 193.48 M 405.09 193.48 L S 0 0 612 792 CR 0 G 3 FF (b) 396.0 185.65 T (uf) 400.8 185.65 T (fer) 408.88 185.65 T ([10]) 190.34 206.65 T (struct) 252.0 206.65 T 4 FF ( condition) 274.22 206.65 T (non_empty) 396.0 206.65 T 3 FF (,) 439.23 206.65 T 4 FF ( non_full) 441.73 206.65 T 3 FF (;) 477.57 206.65 T ([11]) 190.34 218.65 T (} *) 216.0 218.65 T 4 FF (b) 228.3 218.65 T (uf) 233.1 218.65 T (fer_t) 240.7 218.65 T 3 FF (;) 259.59 218.65 T ([12]) 190.34 230.65 T (v) 216.0 230.65 T (oid ) 220.8 230.65 T 0 FF (b) 236.08 230.65 T (uffer_put ) 241.44 230.65 T 3 FF (\(char ) 284.49 230.65 T 4 FF (c) 307.53 230.65 T (h) 311.82 230.65 T 3 FF (, ) 316.82 230.65 T 4 FF (b) 321.82 230.65 T (uf) 326.62 230.65 T (fer_t) 334.221 230.65 T 3 FF ( ) 353.111 230.65 T 4 FF (b) 355.611 230.65 T 3 FF (\)) 360.611 230.65 T ([13]) 190.34 242.65 T ({) 216.0 242.65 T ([14]) 190.34 254.65 T 0 FF (mutex_lock ) 252.0 254.65 T 3 FF (\(&) 303.94 254.65 T 4 FF (b) 315.05 254.65 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 320.05 254.65 T 4 FF (loc) 329.92 254.65 T (k) 341.94 254.65 T 3 FF (\);) 346.38 254.65 T ([15]) 190.34 266.65 T (while \() 252.0 266.65 T 4 FF (b) 280.05 266.65 T 5 FF 285.05 266.65 T 4 FF (count) 294.92 266.65 T 3 FF ( ==) 317.14 266.65 T 4 FF ( b) 330.92 266.65 T 5 FF 338.42 266.65 T 4 FF (size) 348.29 266.65 T 3 FF (\)) 363.29 266.65 T ([16]) 190.34 278.65 T 0 FF (condition_wait ) 288.0 278.65 T 3 FF (\(&) 353.84 278.65 T 4 FF (b) 364.95 278.65 T 5 FF 369.95 278.65 T 4 FF (non_full) 379.82 278.65 T 3 FF (, &) 413.16 278.65 T 4 FF (b) 425.94 278.65 T 5 FF 430.94 278.65 T 4 FF (loc) 440.81 278.65 T (k) 452.83 278.65 T 3 FF (\);) 457.27 278.65 T ([17]) 190.34 290.65 T (ASSER) 252.0 290.65 T (T\(0 <= ) 282.52 290.65 T 4 FF (b) 313.24 290.65 T 5 FF 318.24 290.65 T 4 FF (count) 328.11 290.65 T 3 FF ( &&) 350.33 290.65 T 4 FF ( b) 368.39 290.65 T 5 FF 375.89 290.65 T 4 FF (count) 385.76 290.65 T 3 FF ( <) 407.98 290.65 T 4 FF ( b) 416.12 290.65 T 5 FF 423.62 290.65 T 4 FF (size) 433.49 290.65 T 3 FF (\);) 448.49 290.65 T ([18]) 190.34 302.65 T 4 FF (b) 252.0 302.65 T 5 FF 257.0 302.65 T 4 FF (c) 266.87 302.65 T (har) 271.16 302.65 T (s ) 284.95 302.65 T 3 FF ([) 291.34 302.65 T 4 FF (b) 294.67 302.65 T 5 FF 299.67 302.65 T 4 FF (px) 309.54 302.65 T 3 FF (] = ) 318.98 302.65 T 4 FF (c) 332.95 302.65 T (h) 337.24 302.65 T 3 FF (;) 342.24 302.65 T ([19]) 190.34 314.65 T 4 FF (b) 252.0 314.65 T 5 FF 257.0 314.65 T 4 FF (px) 266.87 314.65 T 3 FF ( = \() 276.31 314.65 T 4 FF (b) 290.28 314.65 T 5 FF 295.28 314.65 T 4 FF (px) 305.15 314.65 T 3 FF ( + 1\)%) 314.59 314.65 T 4 FF ( b) 341.89 314.65 T 5 FF 349.39 314.65 T 4 FF (size) 359.26 314.65 T 3 FF (;) 374.26 314.65 T ([20]) 190.34 326.65 T 4 FF (b) 252.0 326.65 T 5 FF 257.0 326.65 T 4 FF (count) 266.87 326.65 T 3 FF ( += 1;) 289.09 326.65 T ([21]) 190.34 338.65 T 0 FF (condition_signal ) 252.0 338.65 T 3 FF (\(&) 324.52 338.65 T 4 FF (b) 335.63 338.65 T 5 FF 340.63 338.65 T 4 FF (non_empty) 350.5 338.65 T 3 FF (\);) 394.38 338.65 T ([22]) 190.34 350.65 T 0 FF (mutex_unlock ) 252.0 350.65 T 3 FF (\(&) 315.06 350.65 T 4 FF (b) 326.17 350.65 T 5 FF 331.17 350.65 T 4 FF (loc) 341.04 350.65 T (k) 353.06 350.65 T 3 FF (\);) 357.5 350.65 T ([23]) 190.34 362.65 T (}) 216.0 362.65 T ([24]) 190.34 374.649 T (char ) 216.0 374.649 T 0 FF (b) 235.71 374.649 T (uffer_get ) 241.07 374.649 T 3 FF (\() 282.44 374.649 T 4 FF (b) 285.77 374.649 T (uf) 290.57 374.649 T (fer_t) 298.17 374.649 T 3 FF ( ) 317.06 374.649 T 4 FF (b) 319.56 374.649 T 3 FF (\)) 324.56 374.649 T ([25]) 190.34 386.649 T ({) 216.0 386.649 T ([26]) 190.34 398.649 T (char) 252.0 398.649 T 4 FF (c) 396.0 398.649 T (h) 400.29 398.649 T 3 FF (;) 405.29 398.649 T ([27]) 190.34 410.649 T 0 FF (mutex_lock ) 252.0 410.649 T 3 FF (\(&) 303.94 410.649 T 4 FF (b) 315.05 410.649 T 5 FF 320.05 410.649 T 0 FF (lock) 329.92 410.649 T 3 FF (\);) 347.7 410.649 T ([28]) 190.34 422.649 T (while \() 252.0 422.649 T 4 FF (b) 280.05 422.649 T 5 FF 285.05 422.649 T 4 FF (count) 294.92 422.649 T 3 FF ( == 0\)) 317.14 422.649 T ([29]) 190.34 434.649 T 0 FF (condition_wait ) 288.0 434.649 T 3 FF (\(&) 353.84 434.649 T 4 FF (b) 364.95 434.649 T 5 FF 369.95 434.649 T 4 FF (non_empty) 379.82 434.649 T 3 FF (, &) 423.05 434.649 T 4 FF (b) 435.83 434.649 T 5 FF 440.83 434.649 T 4 FF (loc) 450.7 434.649 T (k) 462.72 434.649 T 3 FF (\);) 467.16 434.649 T ([30]) 190.34 446.649 T (ASSER) 252.0 446.649 T (T\(0 <) 282.52 446.649 T 4 FF ( b) 305.1 446.649 T 5 FF 312.6 446.649 T 4 FF (count) 322.47 446.649 T 3 FF ( &&) 344.69 446.649 T 4 FF ( b) 362.75 446.649 T 5 FF 370.25 446.649 T 4 FF (count) 380.12 446.649 T 3 FF ( <=) 402.34 446.649 T 4 FF ( b) 416.12 446.649 T 5 FF 423.62 446.649 T 4 FF (size) 433.49 446.649 T 3 FF (\);) 448.49 446.649 T ([31]) 190.34 458.649 T 4 FF (c) 252.0 458.649 T (h) 256.29 458.649 T 3 FF ( =) 261.29 458.649 T 4 FF ( b) 269.43 458.649 T 5 FF 276.93 458.649 T 4 FF (c) 286.8 458.649 T (har) 291.09 458.649 T (s ) 304.88 458.649 T 3 FF ([) 311.27 458.649 T 4 FF (b) 314.6 458.649 T 5 FF 319.6 458.649 T 4 FF (cx) 329.47 458.649 T 3 FF (];) 338.35 458.649 T ([32]) 190.34 470.649 T 4 FF (b) 252.0 470.649 T 5 FF 257.0 470.649 T 4 FF (cx) 266.87 470.649 T 3 FF ( = \() 275.75 470.649 T 4 FF (b) 289.72 470.649 T 5 FF 294.72 470.649 T 4 FF (cx) 304.59 470.649 T 3 FF ( + 1\)% ) 313.47 470.649 T 4 FF (b) 343.27 470.649 T 5 FF 348.27 470.649 T 4 FF (size) 358.14 470.649 T 3 FF (;) 373.14 470.649 T ([33]) 190.34 482.649 T 4 FF (b) 252.0 482.649 T 5 FF 257.0 482.649 T 4 FF (count) 266.87 482.649 T 3 FF ( \320= 1;) 289.09 482.649 T ([34]) 190.34 494.649 T 0 FF (condition_signal ) 252.0 494.649 T 3 FF (\(&) 324.52 494.649 T 4 FF (b) 335.63 494.649 T 5 FF 340.63 494.649 T 4 FF (non_full) 350.5 494.649 T 3 FF (\);) 383.84 494.649 T ([35]) 190.34 506.649 T 0 FF (mutex_unlock ) 252.0 506.649 T 3 FF (\(&) 315.06 506.649 T 4 FF (b) 326.17 506.649 T 5 FF 331.17 506.649 T 4 FF (loc) 341.04 506.649 T (k) 353.06 506.649 T 3 FF (\);) 357.5 506.649 T ([36]) 190.34 518.649 T (return) 252.0 518.649 T 4 FF ( c) 275.88 518.649 T (h) 282.67 518.649 T 3 FF (;) 287.67 518.649 T ([37]) 190.34 530.649 T (}) 216.0 530.649 T ([38]) 190.34 542.649 T (v) 216.0 542.649 T (oid ) 220.8 542.649 T 0 FF (pr) 236.08 542.649 T (oducer ) 245.9 542.649 T 3 FF (\() 277.84 542.649 T 4 FF (b) 281.17 542.649 T (uf) 285.97 542.649 T (fer_t) 293.57 542.649 T 3 FF ( ) 312.46 542.649 T 6 (Times-BoldItalic) 10 1 mymakefontmetric 6 FF (b) 314.96 542.649 T 3 FF (\)) 319.96 542.649 T ([39]) 190.34 554.649 T ({) 216.0 554.649 T ([40]) 190.34 566.648 T (int) 252.0 566.648 T 4 FF (c) 396.0 566.648 T (h) 400.29 566.648 T 3 FF (;) 405.29 566.648 T ([41]) 190.34 578.648 T (do) 252.0 578.648 T ([42]) 190.34 590.648 T 0 FF (b) 288.0 590.648 T (uffer_put ) 293.36 590.648 T 3 FF (\(\() 336.41 590.648 T 4 FF (c) 343.07 590.648 T (h) 347.36 590.648 T 3 FF ( = ) 352.36 590.648 T 0 FF (getchar) 363.0 590.648 T 3 FF (\(\)\), ) 395.21 590.648 T 4 FF (b) 410.2 590.648 T 3 FF (\);) 415.2 590.648 T ([43]) 190.34 602.648 T (while \() 252.0 602.648 T 4 FF (c) 280.05 602.648 T (h!) 284.34 602.648 T 3 FF (= EOF\);) 292.67 602.648 T ([44]) 190.34 614.648 T (}) 216.0 614.648 T ([45]) 190.34 626.648 T (v) 216.0 626.648 T (oid ) 220.8 626.648 T 0 FF (consumer ) 236.08 626.648 T 3 FF (\() 280.24 626.648 T 4 FF (b) 283.57 626.648 T (uf) 288.37 626.648 T (fer_t) 295.97 626.648 T 3 FF ( ) 314.86 626.648 T 4 FF (b) 317.36 626.648 T 3 FF (\)) 322.36 626.648 T ([46]) 190.34 638.648 T ({) 216.0 638.648 T ([47]) 190.34 650.648 T (int) 252.0 650.648 T 4 FF (c) 396.0 650.648 T (h) 400.29 650.648 T 3 FF (;) 405.29 650.648 T ([48]) 190.34 662.648 T (while \(\() 252.0 662.648 T 4 FF (c) 283.38 662.648 T (h) 287.67 662.648 T 3 FF ( = ) 292.67 662.648 T 0 FF (b) 303.31 662.648 T (uffer_get ) 308.67 662.648 T 3 FF (\() 350.04 662.648 T 4 FF (b) 353.37 662.648 T 3 FF (\)\)!= EOF\)) 358.37 662.648 T ([49]) 190.34 674.648 T 0 FF (printf ) 288.0 674.648 T 3 FF (\(\322%c\323,) 315.5 674.648 T 4 FF ( c) 342.98 674.648 T (h) 349.77 674.648 T 3 FF (\);) 354.77 674.648 T ([50]) 190.34 686.648 T (}) 216.0 686.648 T ([51]) 190.34 698.648 T 4 FF (b) 216.0 698.648 T (uf) 220.8 698.648 T (fer_t ) 228.4 698.648 T 0 FF (b) 249.79 698.648 T (uffer_alloc ) 255.15 698.648 T 3 FF (\(int ) 303.75 698.648 T 4 FF (size) 320.14 698.648 T 3 FF (\)) 335.14 698.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 65 65 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (61 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Examples) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([52]) 82.34 114.667 T ({) 108.0 114.667 T ([53]) 82.34 126.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (b) 144.0 126.667 T (uf) 148.8 126.667 T (fer_t) 156.4 126.667 T (b) 288.0 126.667 T 3 FF (;) 293.0 126.667 T ([54]) 82.34 138.667 T (e) 144.0 138.667 T (xtern char *) 148.29 138.667 T 1 FF (malloc) 196.05 138.667 T 3 FF (\(\);) 224.38 138.667 T ([55]) 82.34 150.666 T 4 FF (b) 144.0 150.666 T 3 FF ( = \() 149.0 150.666 T 4 FF (b) 162.97 150.666 T (uf) 167.77 150.666 T (fer_t) 175.37 150.666 T 3 FF (\) ) 194.26 150.666 T 1 FF (malloc ) 200.09 150.666 T 3 FF (\(sizeof \(struct) 230.92 150.666 T 4 FF ( b) 286.18 150.666 T (uf) 293.48 150.666 T (fer) 301.08 150.666 T 3 FF (\)\);) 312.19 150.666 T ([56]) 82.34 162.666 T 1 FF (mutex_init ) 144.0 162.666 T 3 FF (\(&) 192.61 162.666 T 4 FF (b) 203.72 162.666 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 208.72 162.666 T 4 FF (loc) 218.59 162.666 T (k) 230.61 162.666 T 3 FF (\);) 235.05 162.666 T ([57]) 82.34 174.666 T 4 FF (b) 144.0 174.666 T 5 FF 149.0 174.666 T 4 FF (size) 158.87 174.666 T 3 FF ( = ) 173.87 174.666 T 4 FF (size) 184.51 174.666 T 3 FF (;) 199.51 174.666 T ([58]) 82.34 186.666 T 4 FF (b) 144.0 186.666 T 5 FF 149.0 186.666 T 4 FF (c) 158.87 186.666 T (har) 163.16 186.666 T (s) 176.95 186.666 T 3 FF ( =) 180.84 186.666 T 1 FF ( malloc ) 188.98 186.666 T 3 FF (\(\(unsigned\)) 222.31 186.666 T 4 FF ( size) 268.41 186.666 T 3 FF (\);) 285.91 186.666 T ([59]) 82.34 198.666 T 4 FF (b) 144.0 198.666 T 5 FF 149.0 198.666 T 4 FF (px) 158.87 198.666 T 3 FF ( = ) 168.31 198.666 T 4 FF (b) 178.95 198.666 T 5 FF 183.95 198.666 T 4 FF (cx) 193.82 198.666 T 3 FF ( =) 202.7 198.666 T 4 FF ( b) 210.84 198.666 T 5 FF 218.34 198.666 T 4 FF (count) 228.21 198.666 T 3 FF ( = 0;) 250.43 198.666 T ([60]) 82.34 210.666 T 1 FF (condition_init ) 144.0 210.666 T 3 FF (\(&) 205.96 210.666 T 4 FF (b) 217.07 210.666 T 5 FF 222.07 210.666 T 4 FF (non_empty) 231.94 210.666 T 3 FF (\);) 275.82 210.666 T ([61]) 82.34 222.666 T 1 FF (condition_init ) 144.0 222.666 T 3 FF (\(&) 205.96 222.666 T 4 FF (b) 217.07 222.666 T 5 FF 222.07 222.666 T 4 FF (non_full) 231.94 222.666 T 3 FF (\);) 265.28 222.666 T ([62]) 82.34 234.666 T (return) 144.0 234.666 T 4 FF ( b) 167.88 234.666 T 3 FF (;) 175.38 234.666 T ([63]) 82.34 246.666 T (}) 108.0 246.666 T ([64]) 82.34 258.666 T (#de\336ne B) 108.0 258.666 T (UFFER_SIZE) 146.51 258.666 T (10) 288.0 258.666 T ([65]) 82.34 270.666 T (int ) 108.0 270.666 T 1 FF (main) 121.06 270.666 T 3 FF (\(\)) 142.73 270.666 T ([66]) 82.34 282.666 T ({) 108.0 282.666 T ([67]) 82.34 294.666 T 4 FF ( b) 144.0 294.666 T (uf) 151.3 294.666 T (fer_t) 158.9 294.666 T (b) 288.0 294.666 T 3 FF ( =) 293.0 294.666 T 1 FF ( b) 301.14 294.666 T (uffer_alloc) 309.0 294.666 T 3 FF (\(B) 355.1 294.666 T (UFFER_SIZE\);) 365.0 294.666 T ([68]) 82.34 306.666 T 1 FF (cthr) 144.0 306.666 T (ead_detach) 161.59 306.666 T 3 FF (\() 209.92 306.666 T 1 FF (cthr) 213.25 306.666 T (ead_f) 230.84 306.666 T (ork) 253.92 306.666 T 3 FF (\() 268.92 306.666 T 1 FF (pr) 272.25 306.666 T (oducer) 282.07 306.666 T 3 FF (,) 311.111 306.666 T 4 FF ( b) 313.611 306.666 T 3 FF (\)\);) 321.111 306.666 T ([69]) 82.34 318.666 T 1 FF (cthr) 144.0 318.666 T (ead_detach) 161.59 318.666 T 3 FF (\() 209.92 318.666 T 1 FF (cthr) 213.25 318.666 T (ead_f) 230.84 318.666 T (ork) 253.92 318.666 T 3 FF (\() 268.92 318.666 T 1 FF (consumer) 272.25 318.666 T 3 FF (,) 313.511 318.666 T 4 FF ( b) 316.011 318.666 T 3 FF (\)\);) 323.511 318.666 T ([70]) 82.34 330.666 T (return 0;) 144.0 330.666 T ([71]) 82.34 342.665 T (}) 108.0 342.665 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Single Master / Multiple Sla) 72.0 371.999 T (v) 215.04 371.999 T (es) 220.92 371.999 T 3 FF 72 388.665344 M 2.273788 0 32 (The follo) widthshow 110.963928 388.665344 M 2.273788 0 32 (wing e) widthshow 140.027802 388.665344 M 2.273788 0 32 (xample sho) widthshow 187.881729 388.665344 M 2.273788 0 32 (ws ho) widthshow 213.515656 388.665344 M 2.273788 0 32 (w to structure a program in which a single master) widthshow (thread spa) 72.0 400.665 T (wns a number of concurrent sla) 112.67 400.665 T (v) 238.27 400.665 T (es and then w) 243.12 400.665 T (aits until the) 297.73 400.665 T (y all \336nish.) 347.03 400.665 T 72 411.998596 360 9 CR 1 G 72 411.998596 360 9 NF 0 G 3 FF (/*) 91.224 418.83 T 3 SL 0 SC 0.6667 G 422.91 416.5 M 422.91 421.75 L 432 416.5 L 422.91 411.25 L F 422.91 416.5 M 108 416.5 L S 72 430.998535 360 9 CR 1 G 72 430.998535 360 9 NF 0 G 3 FF (*/) 90.0 437.825 T 0.6667 G 117.09 435.5 M 117.09 430.25 L 108 435.5 L 117.09 440.75 L F 432 435.5 M 117.09 435.5 L S 0 0 612 792 CR 0 G 3 FF (Master/sla) 108.0 427.665 T (v) 149.46 427.665 T (e program structure.) 154.31 427.665 T ([1]) 87.34 448.665 T (#include) 108.0 448.665 T 1 FF ( ) 142.44 448.665 T 3 FF ([2]) 87.34 460.665 T (#include) 108.0 460.665 T 1 FF ( ) 168.23 460.665 T 3 FF ([3]) 87.34 472.665 T (int) 108.0 472.665 T 4 FF (count) 288.0 472.665 T 3 FF (;) 310.22 472.665 T 72 477.998352 360 9 CR 1 G 72 477.998352 360 9 NF 0 G 3 FF (/*) 90.0 484.83 T 0.6667 G 422.91 482.5 M 422.91 487.75 L 432 482.5 L 422.91 477.25 L F 422.91 482.5 M 288 482.5 L S 72 496.998291 360 9 CR 1 G 72 496.998291 360 9 NF 0 G 3 FF (*/) 90.0 503.825 T 0.6667 G 297.09 501.5 M 297.09 496.25 L 288 501.5 L 297.09 506.75 L F 432 501.5 M 297.09 501.5 L S 0 0 612 792 CR 0 G 3 FF (number of sla) 288.0 493.665 T (v) 342.79 493.665 T (es acti) 347.64 493.665 T (v) 372.66 493.665 T (e) 377.51 493.665 T ([4]) 87.34 514.665 T 4 FF (mute) 108.0 514.665 T (x_t) 127.24 514.665 T (loc) 288.0 514.665 T (k) 300.02 514.665 T 3 FF (;) 304.46 514.665 T 72 519.99823 360 9 CR 1 G 72 519.99823 360 9 NF 0 G 3 FF (/*) 90.0 526.829 T 0.6667 G 422.91 524.5 M 422.91 529.75 L 432 524.5 L 422.91 519.25 L F 422.91 524.5 M 288 524.5 L S 72 538.998169 360 9 CR 1 G 72 538.998169 360 9 NF 0 G 3 FF (*/) 90.0 545.824 T 0.6667 G 297.09 543.5 M 297.09 538.25 L 288 543.5 L 297.09 548.75 L F 432 543.5 M 297.09 543.5 L S 0 0 612 792 CR 0 G 3 FF (mutual e) 288.0 535.665 T (xclusion for count) 322.57 535.665 T ([5]) 87.34 556.665 T 4 FF (condition_t) 108.0 556.665 T (done) 288.0 556.665 T 3 FF (;) 307.44 556.665 T 72 561.998108 360 9 CR 1 G 72 561.998108 360 9 NF 0 G 3 FF (/*) 90.0 568.829 T 0.6667 G 422.91 566.5 M 422.91 571.75 L 432 566.5 L 422.91 561.25 L F 422.91 566.5 M 288 566.5 L S 72 580.998047 360 9 CR 1 G 72 580.998047 360 9 NF 0 G 3 FF (*/) 90.0 587.824 T 0.6667 G 297.09 585.5 M 297.09 580.25 L 288 585.5 L 297.09 590.75 L F 432 585.5 M 297.09 585.5 L S 0 0 612 792 CR 0 G 3 FF (signalled each time a sla) 288.0 577.665 T (v) 385.56 577.665 T (e \336nishes) 390.41 577.665 T 72 591.998047 360 9 CR 1 G 72 591.998047 360 9 NF 0 G 3 FF (/*) 91.224 598.829 T 0.6667 G 422.91 596.5 M 422.91 601.75 L 432 596.5 L 422.91 591.25 L F 422.91 596.5 M 108 596.5 L S 0 0 612 792 CR 0 G 3 FF 108 607.664673 M 2.857437 0 32 (Each sla) widthshow 144.257553 607.664673 M 2.857437 0 32 (v) widthshow 149.107635 607.664673 M 2.857437 0 32 (e just counts up to its ar) widthshow 261.072357 607.664673 M 2.857437 0 32 (gument, yielding the processor on each) widthshow 108 617.664612 M 0.207092 0 32 (iteration. When it is \336nished, it decrements the global count and signals that it is) widthshow 72 630.997864 360 9 CR 1 G 72 630.997864 360 9 NF 0 G 3 FF (*/) 90.0 637.824 T 0.6667 G 117.09 635.5 M 117.09 630.25 L 108 635.5 L 117.09 640.75 L F 432 635.5 M 117.09 635.5 L S 0 0 612 792 CR 0 G 3 FF (done.) 108.0 627.665 T ([6]) 87.34 648.665 T (v) 108.0 648.665 T (oid ) 112.8 648.665 T 1 FF (sla) 128.08 648.665 T (v) 139.5 648.665 T (e ) 144.4 648.665 T 3 FF (\(int ) 151.34 648.665 T 4 FF (n) 167.73 648.665 T 3 FF (\)) 172.73 648.665 T ([7]) 87.34 660.664 T ({) 108.0 660.664 T ([8]) 87.34 672.664 T (int) 144.0 672.664 T 4 FF (i) 288.0 672.664 T 3 FF (;) 290.78 672.664 T ([9]) 87.34 684.664 T (for \() 144.0 684.664 T 4 FF (i) 161.49 684.664 T 3 FF ( = 0;) 164.27 684.664 T 4 FF ( i) 182.69 684.664 T 3 FF ( < ) 187.97 684.664 T 4 FF (n) 198.61 684.664 T 3 FF (; ) 203.61 684.664 T 4 FF (i) 208.89 684.664 T 3 FF ( += 1\)) 211.67 684.664 T ([10]) 82.34 696.664 T 1 FF (cthr) 180.0 696.664 T (ead_yield) 197.59 696.664 T 3 FF (\(\);) 238.15 696.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 66 66 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (62 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (C Thr) 180.0 55.824 T (eads) 203.589 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([11]) 190.34 112.651 T 0 FF (mutex_lock) 252.0 112.651 T 3 FF (\() 301.44 112.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (loc) 304.77 112.651 T (k) 316.79 112.651 T 3 FF (\);) 321.23 112.651 T ([12]) 190.34 124.651 T 4 FF (count) 252.0 124.651 T 3 FF ( \320= 1;) 274.22 124.651 T ([13]) 190.34 136.651 T 0 FF (printf ) 252.0 136.651 T 3 FF (\(\322Sla) 279.5 136.651 T (v) 299.85 136.651 T (e \336nished %d c) 304.7 136.651 T (ycles.\\n\323, ) 365.93 136.651 T 4 FF (n) 406.2 136.651 T 3 FF (\);) 411.2 136.651 T ([14]) 190.34 148.65 T 0 FF (condition_signal ) 252.0 148.65 T 3 FF (\() 324.52 148.65 T 4 FF (done) 327.85 148.65 T 3 FF (\);) 347.29 148.65 T ([15]) 190.34 160.65 T 0 FF (mutex_unlock ) 252.0 160.65 T 3 FF (\() 315.06 160.65 T 4 FF (loc) 318.39 160.65 T (k) 330.41 160.65 T 3 FF (\);) 334.85 160.65 T ([16]) 190.34 172.65 T (}) 216.0 172.65 T 180 177.983643 360 9 CR 1 G 180 177.983643 360 9 NF 0 G 3 FF (/*) 199.224 184.815 T 3 SL 0.6667 G 530.91 182.48 M 530.91 187.73 L 540 182.48 L 530.91 177.23 L F 530.91 182.48 M 216 182.48 L S 0 0 612 792 CR 0 G 3 FF 216 193.650269 M 1.868515 0 32 (The master spa) widthshow 280.127136 193.650269 M 1.868515 0 32 (wns a gi) widthshow 316.944275 193.650269 M 1.868515 0 32 (v) widthshow 321.794373 193.650269 M 1.868515 0 32 (en number of sla) widthshow 394.130035 193.650269 M 1.868515 0 32 (v) widthshow 398.980103 193.650269 M 1.868515 0 32 (es and then w) widthshow 459.19574 193.650269 M 1.868515 0 32 (aits for them all to) widthshow 180 206.983521 360 9 CR 1 G 180 206.983521 360 9 NF 0 G 3 FF (*/) 198.0 213.81 T 0.6667 G 225.09 211.48 M 225.09 206.23 L 216 211.48 L 225.09 216.73 L F 540 211.48 M 225.09 211.48 L S 0 0 612 792 CR 0 G 3 FF 216.0 203.65 T ([17]) 190.34 224.65 T (v) 216.0 224.65 T (oid ) 220.8 224.65 T 0 FF (master ) 236.08 224.65 T 3 FF (\(int ) 268.01 224.65 T 4 FF (nslaves) 284.4 224.65 T 3 FF (\)) 313.84 224.65 T ([18]) 190.34 236.65 T ({) 216.0 236.65 T ([19]) 190.34 248.65 T (int) 252.0 248.65 T 4 FF (i) 396.0 248.65 T 3 FF (;) 398.78 248.65 T ([20]) 190.34 260.65 T (for \() 252.0 260.65 T 4 FF (i) 269.49 260.65 T 3 FF ( = 1;) 272.27 260.65 T 4 FF ( i) 290.69 260.65 T 3 FF ( <= ) 295.97 260.65 T 4 FF (nslaves) 312.25 260.65 T 3 FF (; ) 341.69 260.65 T 4 FF (i) 346.97 260.65 T 3 FF ( += 1\)) 349.75 260.65 T ([21]) 190.34 272.65 T ({) 252.0 272.65 T ([22]) 190.34 284.65 T 0 FF (mutex_lock) 288.0 284.65 T 3 FF (\() 337.44 284.65 T 4 FF (loc) 340.77 284.65 T (k) 352.79 284.65 T 3 FF (\);) 357.23 284.65 T 180 289.983154 360 9 CR 1 G 180 289.983154 360 9 NF 0 G 3 FF (/*) 199.224 296.814 T 0.6667 G 530.91 294.48 M 530.91 299.73 L 540 294.48 L 530.91 289.23 L F 530.91 294.48 M 216 294.48 L S 0 0 612 792 CR 0 G 3 FF 288 305.64978 M 2.388107 0 32 (F) widthshow 293.410095 305.64978 M 2.388107 0 32 (ork a sla) widthshow 331.866394 305.64978 M 2.388107 0 32 (v) widthshow 336.716492 305.64978 M 2.388107 0 32 (e and detach it, since the master ne) widthshow 492.593384 305.64978 M 2.388107 0 32 (v) widthshow 497.443481 305.64978 M 2.388107 0 32 (er joins it) widthshow 180 318.983032 360 9 CR 1 G 180 318.983032 360 9 NF 0 G 3 FF (*/) 198.0 325.809 T 0.6667 G 225.09 323.48 M 225.09 318.23 L 216 323.48 L 225.09 328.73 L F 540 323.48 M 225.09 323.48 L S 0 0 612 792 CR 0 G 3 FF (indi) 288.0 315.65 T (vidually) 303.31 315.65 T (.) 335.44 315.65 T ([23]) 190.34 336.65 T 4 FF (count) 288.0 336.65 T 3 FF ( += 1;) 310.22 336.65 T ([24]) 190.34 348.65 T 0 FF (cthr) 288.0 348.65 T (ead_detach) 305.59 348.65 T 3 FF (\() 353.92 348.65 T 0 FF (cthr) 357.25 348.65 T (ead_f) 374.84 348.65 T (ork) 397.92 348.65 T 3 FF (\() 412.92 348.65 T 0 FF (sla) 416.25 348.65 T (v) 427.67 348.65 T (e) 432.571 348.65 T 3 FF (, ) 437.011 348.65 T 0 FF (random) 442.011 348.65 T 3 FF (\(\)% 1000\)\);) 475.901 348.65 T ([25]) 190.34 360.65 T 0 FF (mutex_unlock ) 288.0 360.65 T 3 FF (\() 351.06 360.65 T 4 FF (loc) 354.39 360.65 T (k) 366.41 360.65 T 3 FF (\);) 370.85 360.65 T ([26]) 190.34 372.649 T (}) 252.0 372.649 T ([27]) 190.34 384.649 T 0 FF (mutex_lock) 252.0 384.649 T 3 FF (\() 301.44 384.649 T 4 FF (loc) 304.77 384.649 T (k) 316.79 384.649 T 3 FF (\);) 321.23 384.649 T ([28]) 190.34 396.649 T (while \() 252.0 396.649 T 4 FF (count!) 280.05 396.649 T 3 FF (= 0\)) 305.6 396.649 T ([29]) 190.34 408.649 T 0 FF (condition_wait ) 288.0 408.649 T 3 FF (\() 353.84 408.649 T 4 FF (done) 357.17 408.649 T 3 FF (, ) 376.61 408.649 T 4 FF (loc) 381.61 408.649 T (k) 393.63 408.649 T 3 FF (\);) 398.07 408.649 T ([30]) 190.34 420.649 T 0 FF (mutex_unlock ) 252.0 420.649 T 3 FF (\() 315.06 420.649 T 4 FF (loc) 318.39 420.649 T (k) 330.41 420.649 T 3 FF (\);) 334.85 420.649 T ([31]) 190.34 432.649 T 0 FF (printf ) 252.0 432.649 T 3 FF (\(\322) 279.5 432.649 T (All %d sla) 286.47 432.649 T (v) 328.491 432.649 T (es ha) 333.341 432.649 T (v) 353.411 432.649 T (e \336nished.\\n\323, ) 358.261 432.649 T 4 FF (nslaves) 416.591 432.649 T 3 FF (\);) 446.031 432.649 T ([32]) 190.34 444.649 T 0 FF (cthr) 252.0 444.649 T (ead_exit) 269.59 444.649 T 3 FF (\(0\);) 305.14 444.649 T ([33]) 190.34 456.649 T (}) 216.0 456.649 T ([34]) 190.34 468.649 T (int ) 216.0 468.649 T 0 FF (main) 229.06 468.649 T 3 FF (\(\)) 250.73 468.649 T ([35]) 190.34 480.649 T ({) 216.0 480.649 T ([36]) 190.34 492.649 T 4 FF (count) 252.0 492.649 T 3 FF ( = 0;) 274.22 492.649 T ([37]) 190.34 504.649 T 4 FF (loc) 252.0 504.649 T (k) 264.02 504.649 T 3 FF ( = ) 268.46 504.649 T 0 FF (mutex_alloc) 279.1 504.649 T 3 FF (\(\);) 330.76 504.649 T ([38]) 190.34 516.649 T 4 FF (done) 252.0 516.649 T 3 FF ( = ) 271.44 516.649 T 0 FF (condition_alloc) 282.08 516.649 T 3 FF (\(\);) 347.09 516.649 T ([39]) 190.34 528.649 T 0 FF (srandom ) 252.0 528.649 T 3 FF (\() 292.28 528.649 T 0 FF (time ) 295.61 528.649 T 3 FF (\(\(int *\) 0\)\);) 316.99 528.649 T 180 533.981995 360 9 CR 1 G 180 533.981995 360 9 NF 0 G 3 FF (/*) 198.0 540.813 T 0.6667 G 530.91 538.48 M 530.91 543.73 L 540 538.48 L 530.91 533.23 L F 530.91 538.48 M 396 538.48 L S 180 552.981934 360 9 CR 1 G 180 552.981934 360 9 NF 0 G 3 FF (*/) 198.0 559.808 T 0.6667 G 405.09 557.48 M 405.09 552.23 L 396 557.48 L 405.09 562.73 L F 540 557.48 M 405.09 557.48 L S 0 0 612 792 CR 0 G 3 FF (initialize random number generator) 396.0 549.649 T ([40]) 190.34 570.649 T 0 FF (master ) 252.0 570.649 T 3 FF (\(\(int\) ) 283.93 570.649 T 0 FF (random) 306.98 570.649 T 3 FF (\(\)% 16\);) 340.87 570.649 T 180 575.981873 360 9 CR 1 G 180 575.981873 360 9 NF 0 G 3 FF (/*) 198.0 582.813 T 0.6667 G 530.91 580.48 M 530.91 585.73 L 540 580.48 L 530.91 575.23 L F 530.91 580.48 M 396 580.48 L S 180 594.981812 360 9 CR 1 G 180 594.981812 360 9 NF 0 G 3 FF (*/) 198.0 601.808 T 0.6667 G 405.09 599.48 M 405.09 594.23 L 396 599.48 L 405.09 604.73 L F 540 599.48 M 405.09 599.48 L S 0 0 612 792 CR 0 G 3 FF (create up to 15 sla) 396.0 591.648 T (v) 468.56 591.648 T (es) 473.41 591.648 T ([41]) 190.34 612.648 T (return 0;) 252.0 612.648 T ([42]) 190.34 624.648 T (}) 216.0 624.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 67 67 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 2 SL 3.86 setmiterlimit 0 G 432 45 M 72 45 L S 2 SC 432 342 M 72 342 L S 0.25 SL 432 720 M 72 720 L S 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (63 ) widthshow 0 0 612 792 CR 1 G 72 99 360 225 NF 0 G 2 (Times-Roman) 12 1 mymakefontmetric 2 FF 72 115 M 1.19989 0 (CHAPTER 6) ashow 3 (Times-Roman) 24 1 mymakefontmetric 3 FF 180 115 M -0.479736 0 (Multi-Threaded IPC\320) ashow 3 FF 180 145 M -0.479736 0 (Based Serv) ashow 283.490845 145 M -0.479736 0 (ers) ashow 52 99 2 24 NF 1 G 72 360 360 344.015991 NF 0 G 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 72 366.666626 M 1.015961 0 32 (A serv) widthshow 99.246048 366.666626 M 1.015961 0 32 (er has a wide range of concerns in order to correctly function. This is especially) widthshow 72 378.666595 M 1.541397 0 32 (true if the serv) widthshow 134.514282 378.666595 M 1.541397 0 32 (er is multi-threaded; that is, if it can process multiple simultaneous re-) widthshow 72 390.666565 M 2.446289 0 32 (quests. This chapter concerns the details in) widthshow 257.63797 390.666565 M 2.446289 0 32 (v) widthshow 262.43808 390.666565 M 2.446289 0 32 (olv) widthshow 275.068176 390.666565 M 2.446289 0 32 (ed in writing a correctly functioning) widthshow 72 402.666565 M 1.068222 0 32 (multi-threaded serv) widthshow 150.958313 402.666565 M 1.068222 0 32 (er) widthshow 158.178619 402.666565 M 1.068222 0 32 (. \(The basic issues in) widthshow 245.651733 402.666565 M 1.068222 0 32 (v) widthshow 250.451843 402.666565 M 1.068222 0 32 (olv) widthshow 263.081909 402.666565 M 1.068222 0 32 (ed in an IPC-based serv) widthshow 362.184906 402.666565 M 1.068222 0 32 (er are co) widthshow 398.591431 402.666565 M 1.068222 0 32 (v) widthshow 403.441528 402.666565 M 1.068222 0 32 (ered in) widthshow 4 FF (CHAPTER 4.\)) 72.0 414.667 T 72 456.999847 360 3.024002 CR 432 458.51 M 72 458.51 L S 0 0 612 792 CR 5 (Times-Bold) 14 1 mymakefontmetric 5 FF (Basic Multi-Thr) 72.0 452.333 T (eaded Ser) 168.586 452.333 T (v) 227.162 452.333 T (er Structur) 234.022 452.333 T (e) 301.026 452.333 T 4 FF 72 476.690491 M 0.609131 0 32 (A multi-threaded serv) widthshow 160.828354 476.690491 M 0.609131 0 32 (er can process multiple requests in parallel. The most ob) widthshow 391.680634 476.690491 M 0.609131 0 32 (vious rea-) widthshow 72 488.69043 M 0.516891 0 32 (son to write a multi-threaded serv) widthshow 209.134552 488.69043 M 0.516891 0 32 (er is for parallelism. Multi-threading allo) widthshow 375.339172 488.69043 M 0.516891 0 32 (ws a serv) widthshow 413.433044 488.69043 M 0.516891 0 32 (er to) widthshow 72 500.690369 M 0.426407 0 32 (mak) widthshow 89.120056 500.690369 M 0.426407 0 32 (e use of multiple processors. Also, for serv) widthshow 263.315002 500.690369 M 0.426407 0 32 (er operations that can block w) widthshow 385.597107 500.690369 M 0.426407 0 32 (aiting for I/) widthshow 72 512.690308 M 0.154526 0 32 (O completion, multiple threads can support multiple outstanding I/O operations for great-) widthshow (er I/O parallelism.) 72.0 524.69 T 72 548.690186 M 0.303299 0 32 (This latter case, o) widthshow 143.299988 548.690186 M 0.303299 0 32 (v) widthshow 148.15007 548.690186 M 0.303299 0 32 (erlapping I/O operations, is a special case of the more general issue of) widthshow 72 560.690125 M 0.574646 0 32 (starv) widthshow 91.19014 560.690125 M 0.574646 0 32 (ation. If a serv) widthshow 150.52417 560.690125 M 0.574646 0 32 (er has some operations that can tak) widthshow 293.842102 560.690125 M 0.574646 0 32 (e a long time, multiple threads al-) widthshow (lo) 72.0 572.69 T (w other client requests to be processed in the interim, assuming no interdependencies.) 79.53 572.69 T 72 596.690002 M 0.551605 0 32 (Not all serv) widthshow 119.613297 596.690002 M 0.551605 0 32 (ers should be multi-threaded, though. A serv) widthshow 301.083008 596.690002 M 0.551605 0 32 (er whose operations are in) widthshow 407.85968 596.690002 M 0.551605 0 32 (v) widthshow 412.65979 596.690002 M 0.551605 0 32 (ok) widthshow 422.559845 596.690002 M 0.551605 0 32 (ed) widthshow 72 608.689941 M 0.235825 0 32 (infrequently \(there tends to be little parallelism\) or whose operations complete quickly or) widthshow 72 620.68988 M 0.716278 0 32 (al) widthshow 79.120056 620.68988 M 0.716278 0 32 (w) widthshow 86.240112 620.68988 M 0.716278 0 32 (ays pre) widthshow 115.306534 620.68988 M 0.716278 0 32 (v) widthshow 120.156616 620.68988 M 0.716278 0 32 (ent other concurrent operations from proceeding w) widthshow 327.634369 620.68988 M 0.716278 0 32 (ould be best serv) widthshow 397.123291 620.68988 M 0.716278 0 32 (ed being) widthshow (single-threaded.) 72.0 632.69 T 72 656.689758 M 0.466919 0 32 (The issues in) widthshow 124.754059 656.689758 M 0.466919 0 32 (v) widthshow 129.554169 656.689758 M 0.466919 0 32 (olv) widthshow 142.18425 656.689758 M 0.466919 0 32 (ed in writing a multi-threaded serv) widthshow 282.958923 656.689758 M 0.466919 0 32 (er\321serv) widthshow 317.239014 656.689758 M 0.466919 0 32 (er or) widthshow 336.126038 656.689758 M 0.466919 0 32 (g) widthshow 341.07608 656.689758 M 0.466919 0 32 (anization, locking, op-) widthshow 72 668.689697 M 1.733932 0 32 (eration sequencing, consistenc) widthshow 197.237961 668.689697 M 1.733932 0 32 (y\321are the basic issues in) widthshow 305.42392 668.689697 M 1.733932 0 32 (v) widthshow 310.22403 668.689697 M 1.733932 0 32 (olv) widthshow 322.854126 668.689697 M 1.733932 0 32 (ed in all system program-) widthshow 72 680.689636 M 1.679337 0 32 (ming, clearly be) widthshow 139.918762 680.689636 M 1.679337 0 32 (yond the scope of a te) widthshow 235.645538 680.689636 M 1.679337 0 32 (xt such as this. These issues are dri) widthshow 387.131042 680.689636 M 1.679337 0 32 (v) widthshow 391.98114 680.689636 M 1.679337 0 32 (en by the) widthshow 72 692.689575 M 0.224258 0 32 (nature and e) widthshow 121.16861 692.689575 M 0.224258 0 32 (xtent of parallelism desired and the consistenc) widthshow 307.334259 692.689575 M 0.224258 0 32 (y that must be presented to cli-) widthshow 52 407.999878 2 48.999954 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 68 68 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (64 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 180.0 55.824 T (eaded IPC\320Based Ser) 219.339 55.824 T (v) 302.247 55.824 T (ers) 306.657 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 1.263687 0 32 (ents. The remainder of this te) widthshow 303.36853 112.650635 M 1.263687 0 32 (xt co) widthshow 324.202301 112.650635 M 1.263687 0 32 (v) widthshow 329.052368 112.650635 M 1.263687 0 32 (ers such issues at top le) widthshow 428.720947 112.650635 M 1.263687 0 32 (v) widthshow 433.571045 112.650635 M 1.263687 0 32 (el in the conte) widthshow 493.592194 112.650635 M 1.263687 0 32 (xt of Mach) widthshow (IPC-based serv) 180.0 124.651 T (ers.) 240.67 124.651 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (Ser) 180.0 155.984 T (v) 197.208 155.984 T (er Or) 203.088 155.984 T (ganization) 231.288 155.984 T 3 FF 180 172.650467 M 1.406281 0 32 (W) widthshow 189.040222 172.650467 M 1.406281 0 32 (ith a single-threaded \(synchronous\) serv) widthshow 355.035461 172.650467 M 1.406281 0 32 (er) widthshow 362.40567 172.650467 M 1.406281 0 32 (, it does not matter which service requests) widthshow 180 184.650406 M 1.470718 0 32 (act upon which serv) widthshow 264.522247 184.650406 M 1.470718 0 32 (er maintained objects. There are no con\337icts; each request is pro-) widthshow 180 196.650345 M 0.955353 0 32 (cessed in order; order of requests is maintained; the single thread handles whate) widthshow 510.594421 196.650345 M 0.955353 0 32 (v) widthshow 515.444458 196.650345 M 0.955353 0 32 (er ob-) widthshow 180 208.650284 M 0.957031 0 32 (ject a request names, and when it is done, can safely w) widthshow 408.987427 208.650284 M 0.957031 0 32 (ork on a dif) widthshow 457.988647 208.650284 M 0.957031 0 32 (ferent object for the) widthshow (ne) 180.0 220.65 T (xt request.) 189.29 220.65 T 180 244.650162 M 0.769958 0 32 (When a serv) widthshow 231.37001 244.650162 M 0.769958 0 32 (er is multi-threaded, the relationship between acti) widthshow 433.759918 244.650162 M 0.769958 0 32 (v) widthshow 438.609985 244.650162 M 0.769958 0 32 (e threads and the objects) widthshow 180 256.650085 M 1.284592 0 32 (the) widthshow 192.070084 256.650085 M 1.284592 0 32 (y are manipulating is much more comple) widthshow 363.497742 256.650085 M 1.284592 0 32 (x. Unless something is done, it is possible) widthshow 180 268.650024 M 0.86998 0 32 (that multiple threads are simultaneously trying to manipulate the same object \(one e) widthshow 525.7099 268.650024 M 0.86998 0 32 (v) widthshow 530.559998 268.650024 M 0.86998 0 32 (en) widthshow (possibly trying to delete it\).) 180.0 280.65 T 180 304.649902 M 0.421295 0 32 (There are v) widthshow 226.122742 304.649902 M 0.421295 0 32 (arious w) widthshow 260.604095 304.649902 M 0.421295 0 32 (ays to handle this class of problem. The simplest approach is to ha) widthshow 530.709778 304.649902 M 0.421295 0 32 (v) widthshow 535.559814 304.649902 M 0.421295 0 32 (e) widthshow 180 316.649841 M 0.609161 0 32 (a single thread that recei) widthshow 279.936798 316.649841 M 0.609161 0 32 (v) widthshow 284.786865 316.649841 M 0.609161 0 32 (es all incoming messages and hands them of) widthshow 466.281158 316.649841 M 0.609161 0 32 (f, portioning them) widthshow 180 328.64978 M 0.430679 0 32 (to service threads. The single thread k) widthshow 334.394165 328.64978 M 0.430679 0 32 (eeps track of which service threads are doing what) widthshow 180 340.649719 M 0.180664 0 32 (so that it can guarantee order and consistenc) widthshow 358.014771 340.649719 M 0.180664 0 32 (y) widthshow 362.365112 340.649719 M 0.180664 0 32 (. This approach has the adv) widthshow 472.438599 340.649719 M 0.180664 0 32 (antage that order) widthshow 180 352.649658 M 0.896637 0 32 (is easily handled. Request priorities, if pro) widthshow 354.659912 352.649658 M 0.896637 0 32 (vided, are also easily handled. This approach) widthshow 180 364.649597 M -0.006714 0 32 (is not v) widthshow 209.286652 364.649597 M -0.006714 0 32 (ery ef) widthshow 232.070084 364.649597 M -0.006714 0 32 widthshow (tional conte) 180.0 376.65 T (xt switches for processing.) 226.79 376.65 T 180 400.649475 M 0.990936 0 32 (Most multi-threaded serv) widthshow 282.931946 400.649475 M 0.990936 0 32 (ers utilize multiple threads each directly recei) widthshow 470.807739 400.649475 M 0.990936 0 32 (ving requests for) widthshow 180 412.649414 M 0.260696 0 32 (service. Gi) widthshow 223.330841 412.649414 M 0.260696 0 32 (v) widthshow 228.180923 412.649414 M 0.260696 0 32 (en the multiple possible recei) widthshow 346.183838 412.649414 M 0.260696 0 32 (v) widthshow 351.033936 412.649414 M 0.260696 0 32 (ers, it is possible to ha) widthshow 441.027527 412.649414 M 0.260696 0 32 (v) widthshow 445.877625 412.649414 M 0.260696 0 32 (e dif) widthshow 463.938446 412.649414 M 0.260696 0 32 (ferent mappings of) widthshow (service threads to objects the) 180.0 424.649 T (y service.) 295.38 424.649 T 180 448.649292 M 0.652618 0 32 (At one e) widthshow 215.035324 448.649292 M 0.652618 0 32 (xtreme, each thread can recei) widthshow 334.28595 448.649292 M 0.652618 0 32 (v) widthshow 339.136047 448.649292 M 0.652618 0 32 (e from its o) widthshow 386.674042 448.649292 M 0.652618 0 32 (wn \(unique\) port \(set\) which names a) widthshow 180 460.649231 M 0.797989 0 32 (set of objects maintained by that thread which is disjoint from the set maintained by all) widthshow 180 472.64917 M 1.289902 0 32 (other threads. In this w) widthshow 276.989685 472.64917 M 1.289902 0 32 (ay) widthshow 285.780029 472.64917 M 1.289902 0 32 (, each thread is basically its o) widthshow 410.749573 472.64917 M 1.289902 0 32 (wn single-threaded serv) widthshow 508.709473 472.64917 M 1.289902 0 32 (er) widthshow 515.92981 472.64917 M 1.289902 0 32 (. This) widthshow 180 484.649109 M 0.779953 0 32 (w) widthshow 187.120056 484.649109 M 0.779953 0 32 (as the approach tak) widthshow 266.279968 484.649109 M 0.779953 0 32 (en by some early Mach serv) widthshow 382.499847 484.649109 M 0.779953 0 32 (ers. The disadv) widthshow 444.629883 484.649109 M 0.779953 0 32 (antage of this approach) widthshow 180 496.649048 M 0.034668 0 32 (is that gi) widthshow 214.26947 496.649048 M 0.034668 0 32 (v) widthshow 219.119553 496.649048 M 0.034668 0 32 (en the static allocation of objects to threads, the serv) widthshow 428.69165 496.649048 M 0.034668 0 32 (er does not adjust to the dy-) widthshow 180 508.648987 M 1.20575 0 32 (namic distrib) widthshow 233.505859 508.648987 M 1.20575 0 32 (ution of requests from clients\321it is dif) widthshow 396.040497 508.648987 M 1.20575 0 32 widthshow 448.912048 508.648987 M 1.20575 0 32 (e a reasonable assign-) widthshow 180 520.648926 M 0.445969 0 32 (ment of a ne) widthshow 230.79805 520.648926 M 0.445969 0 32 (w object to a thread. Also, this approach does not simplify locking concerns) widthshow 180 532.648865 M 0.557281 0 32 (as much as might be suspected; the v) widthshow 331.691101 532.648865 M 0.557281 0 32 (arious threads must still be concerned with the cre-) widthshow (ation and deletion of objects.) 180.0 544.649 T 180 568.648743 M 0.384933 0 32 (At the other e) widthshow 235.71489 568.648743 M 0.384933 0 32 (xtreme, each service thread recei) widthshow 368.334778 568.648743 M 0.384933 0 32 (v) widthshow 373.184875 568.648743 M 0.384933 0 32 (es requests from a single port \(set\) repre-) widthshow 180 580.648682 M 0.608292 0 32 (senting all objects maintained by the serv) widthshow 349.039856 580.648682 M 0.608292 0 32 (er) widthshow 356.260132 580.648682 M 0.608292 0 32 (. This approach pro) widthshow 435.695129 580.648682 M 0.608292 0 32 (vides the greatest dynam-) widthshow (ics, b) 180.0 592.649 T (ut requires the greatest care for operation ordering and consistenc) 200.91 592.649 T (y) 462.63 592.649 T (.) 466.981 592.649 T 180 616.64856 M 0.278091 0 32 (Either of these multiple thread approaches mak) widthshow 370.41864 616.64856 M 0.278091 0 32 (es priority management, if pro) widthshow 492.751099 616.64856 M 0.278091 0 32 (vided, dif) widthshow 531.109314 616.64856 M 0.278091 0 32 widthshow 180 628.648499 M 0.38765 0 32 (cult. Dif) widthshow 213.467789 628.648499 M 0.38765 0 32 (ferent ports \(and sets\) are typically required to represent dif) widthshow 454.696808 628.648499 M 0.38765 0 32 (ferent priority of ser-) widthshow (vice.) 180.0 640.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 69 69 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (65 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Locking, Operation Sequencing and Consistency) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Bold) 12 1 mymakefontmetric 3 FF (Ho) 72.0 116.0 T (w Many Thr) 87.216 116.0 T (eads?) 151.668 116.0 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 72 132.66658 M 0.211365 0 32 (The number of threads a serv) widthshow 189.816925 132.66658 M 0.211365 0 32 (er should ha) widthshow 238.919769 132.66658 M 0.211365 0 32 (v) widthshow 243.769852 132.66658 M 0.211365 0 32 (e depends on the possible or e) widthshow 364.868134 132.66658 M 0.211365 0 32 (xpected parallel-) widthshow (ism the serv) 72.0 144.667 T (er will pro) 120.18 144.667 T (vide.) 161.69 144.667 T 72 168.666458 M 0.890732 0 32 (The number and nature of threads allocated depends on the serv) widthshow 336.247437 168.666458 M 0.890732 0 32 (er or) widthshow 355.558289 168.666458 M 0.890732 0 32 (g) widthshow 360.508301 168.666458 M 0.890732 0 32 (anization. If indi-) widthshow 72 180.666397 M 0.597641 0 32 (vidual threads service indi) widthshow 178.80307 180.666397 M 0.597641 0 32 (vidual objects or clients, then the allocation of threads is dri) widthshow 423.669617 180.666397 M 0.597641 0 32 (v-) widthshow (en by this concern. In a more dynamic serv) 72.0 192.666 T (er) 244.31 192.666 T (, the question becomes more dif) 251.68 192.666 T 379.19 192.666 T 72 216.666275 M 0.407288 0 32 (First of all, assuming that the possible usage could be that high, a serv) widthshow 357.404846 216.666275 M 0.407288 0 32 (er w) widthshow 375.202179 216.666275 M 0.407288 0 32 (ould normally) widthshow 72 228.666214 M 1.080627 0 32 (allocate a number of Mach k) widthshow 191.99321 228.666214 M 1.080627 0 32 (ernel threads at least as lar) widthshow 303.016479 228.666214 M 1.080627 0 32 (ge as the number of processors) widthshow (that could e) 72.0 240.666 T (x) 118.51 240.666 T (ecute them.) 123.36 240.666 T 72 264.666077 M 0.731613 0 32 (The number of C-threads multiple) widthshow 211.426544 264.666077 M 0.731613 0 32 (x) widthshow 216.276627 264.666077 M 0.731613 0 32 (ed onto those k) widthshow 279.201538 264.666077 M 0.731613 0 32 (ernel threads depends on the possible) widthshow 72 276.666016 M 0.263779 0 32 (resource or locking con\337icts that can occur while servicing a client request. F) widthshow 384.675476 276.666016 M 0.263779 0 32 (or e) widthshow 400.059326 276.666016 M 0.263779 0 32 (xample,) widthshow 72 288.665955 M 0.025253 0 32 (if no client request will e) widthshow 171.586411 288.665955 M 0.025253 0 32 (v) widthshow 176.436493 288.665955 M 0.025253 0 32 (er cause a C-thread to block w) widthshow 298.118103 288.665955 M 0.025253 0 32 (aiting for another) widthshow 367.198822 288.665955 M 0.025253 0 32 (, there is no rea-) widthshow (son wh) 72.0 300.666 T (y a one-to-one mapping of C-threads to k) 100.56 300.666 T (ernel threads is not possible.) 265.71 300.666 T 72 324.665833 M 1.823578 0 32 (If client requests can block \(especially inde\336nitely\), there are v) widthshow 340.322388 324.665833 M 1.823578 0 32 (arious other concerns.) widthshow 72 336.665771 M 0.784943 0 32 (First of all, there should al) widthshow 181.374771 336.665771 M 0.784943 0 32 (w) widthshow 188.494827 336.665771 M 0.784943 0 32 (ays be a thread w) widthshow 260.954651 336.665771 M 0.784943 0 32 (aiting for ne) widthshow 311.154694 336.665771 M 0.784943 0 32 (w client requests \(such as the) widthshow 72 348.66571 M 1.04068 0 32 (one that may un-block some w) widthshow 200.143463 348.66571 M 1.04068 0 32 (aiting threads\). One possibility is to create a ne) widthshow 396.249054 348.66571 M 1.04068 0 32 (w thread) widthshow 72 360.665649 M 0.821259 0 32 (when the last thread becomes b) widthshow 201.156418 360.665649 M 0.821259 0 32 (usy) widthshow 214.396774 360.665649 M 0.821259 0 32 (. A more deferred approach is to create a ne) widthshow 396.468262 360.665649 M 0.821259 0 32 (w thread) widthshow (when a thread \(perhaps the last one\) blocks.) 72.0 372.666 T 72 414.99884 360 3.024002 CR 432 416.51 M 72 416.51 L S 0 0 612 792 CR 5 (Times-Bold) 14 1 mymakefontmetric 5 FF (Locking, Operation Sequencing and Consistency) 72.0 410.332 T 4 FF 72 434.689453 M 0.715591 0 32 (Unless one allocates a dif) widthshow 176.812515 434.689453 M 0.715591 0 32 (ferent thread for each object \(or set\) and has no issue with the) widthshow 72 446.689392 M 0.392838 0 32 (dynamic creation and deletion of objects, then one needs to lock serv) widthshow 352.231323 446.689392 M 0.392838 0 32 (er data structures to) widthshow 72 458.689331 M 2.446899 0 32 (guarantee the proper operation sequencing and consistenc) widthshow 317.581512 458.689331 M 2.446899 0 32 (y) widthshow 321.931885 458.689331 M 2.446899 0 32 (. This section will brie\337y) widthshow (touch on these issues.) 72.0 470.689 T 3 FF (Lock Granularity) 72.0 502.023 T 4 FF 72 518.689209 M 0.432465 0 32 (The basic mechanism used to maintain consistenc) widthshow 273.864868 518.689209 M 0.432465 0 32 (y when manipulating an object is lock-) widthshow 72 530.689087 M 0.505676 0 32 (ing. A lock \(called a ) widthshow 6 (Times-Italic) 10 1 mymakefontmetric 6 FF 158.398392 530.689087 M 0.505676 0 32 (mute) widthshow 177.638504 530.689087 M 0.505676 0 32 (x) widthshow 4 FF 182.078506 530.689087 M 0.505676 0 32 ( in C-threads parlance\) protects data \(not code\) by pre) widthshow 402.14978 530.689087 M 0.505676 0 32 (v) widthshow 406.999847 530.689087 M 0.505676 0 32 (enting) widthshow 72 542.689087 M 0.201416 0 32 (other threads not holding the lock from manipulating the data protected by the lock while) widthshow 72 554.688965 M 1.263733 0 32 (a thread holding the lock is manipulating the data. A lock ) widthshow 6 FF 318.101074 554.688965 M 1.263733 0 32 (pr) widthshow 326.541321 554.688965 M 1.263733 0 32 (otects) widthshow 4 FF 349.871338 554.688965 M 1.263733 0 32 ( a data element if a) widthshow 72 566.688965 M 0.817978 0 32 (thread must ) widthshow 6 FF 123.075958 566.688965 M 0.817978 0 32 (hold) widthshow 4 FF 140.855957 566.688965 M 0.817978 0 32 ( the lock protecting the data element in order to mak) widthshow 358.345825 566.688965 M 0.817978 0 32 (e an) widthshow 375.39386 566.688965 M 0.817978 0 32 (y reference to) widthshow 72 578.688843 M 0.454971 0 32 (the data element. Since only one thread holds the lock at a time, the data element cannot) widthshow 72 590.688843 M 0.864059 0 32 (be under) widthshow 107.394165 590.688843 M 0.864059 0 32 (going modi\336cation by another thread while being e) widthshow 317.992676 590.688843 M 0.864059 0 32 (xamined or modi\336ed by the) widthshow (lock holding thread.) 72.0 602.689 T 72 626.688721 M 0.847961 0 32 (The granularity of locks is concerned with the e) widthshow 269.703796 626.688721 M 0.847961 0 32 (xtent of data protected by that lock and) widthshow 72 638.688599 M 1.66153 0 32 (the e) widthshow 92.671616 638.688599 M 1.66153 0 32 (xtent of the operations performed upon that data while holding the lock; coarse-) widthshow 72 650.688599 M 0.314972 0 32 (grained locking is in ef) widthshow 165.220032 650.688599 M 0.314972 0 32 (fect when a small number of locks is used, each protecting a wide) widthshow 72 662.688477 M 1.630661 0 32 (range of data \(the limit being a single global lock that protects all data\); \336ne-grained) widthshow 72 674.688477 M 1.149979 0 32 (locking is in ef) widthshow 134.920074 674.688477 M 1.149979 0 32 (fect when each lock protects a small amount of data \(possibly one lock) widthshow (per object or e) 72.0 686.688 T (v) 129.23 686.688 T (en \336ner) 134.08 686.688 T (-grained than that\).) 164.15 686.688 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 70 70 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (66 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 180.0 55.824 T (eaded IPC\320Based Ser) 219.339 55.824 T (v) 302.247 55.824 T (ers) 306.657 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 0.297318 0 32 (The locking granularity needed for a serv) widthshow 347.144012 112.650635 M 0.297318 0 32 (er is directly related to the reason wh) widthshow 497.195282 112.650635 M 0.297318 0 32 (y the serv-) widthshow 180 124.650574 M 0.256195 0 32 (er is multi-threaded in the \336rst place: if the serv) widthshow 372.405853 124.650574 M 0.256195 0 32 (er wishes to perform some number of op-) widthshow 180 136.650513 M 1.128036 0 32 (erations concurrently) widthshow 265.178406 136.650513 M 1.128036 0 32 (, the data must ha) widthshow 339.760681 136.650513 M 1.128036 0 32 (v) widthshow 344.610748 136.650513 M 1.128036 0 32 (e suf) widthshow 364.648926 136.650513 M 1.128036 0 32 widthshow 180 148.650452 M 2.590744 0 32 (multiple threads to e) widthshow 269.562317 148.650452 M 2.590744 0 32 (x) widthshow 274.412415 148.650452 M 2.590744 0 32 (ecute without needing the locks held by the other threads. If) widthshow 180 160.650391 M 0.903046 0 32 (threads are assigned per object or client, locks should be chosen accordingly; if threads) widthshow 180 172.65033 M 0.922272 0 32 (are dynamically assigned, locks are chosen to permit operations to proceed with as fe) widthshow 532.779724 172.65033 M 0.922272 0 32 (w) widthshow (lock con\337icts as possible gi) 180.0 184.65 T (v) 289.75 184.65 T (en the e) 294.6 184.65 T (xpected distrib) 325.55 184.65 T (ution of requests.) 384.51 184.65 T 180 208.650208 M 0.229294 0 32 (It is often reasonable to use a small number of coarse-grained locks. F) widthshow 462.821655 208.650208 M 0.229294 0 32 (or e) widthshow 478.171021 208.650208 M 0.229294 0 32 (xample, if each) widthshow 180 220.650146 M 0.710632 0 32 (service request is v) widthshow 258.35199 220.650146 M 0.710632 0 32 (ery short, a single global lock may be reasonable. The e) widthshow 488.038422 220.650146 M 0.710632 0 32 (xistence of a) widthshow 180 232.650085 M 0.404617 0 32 (single lock doesn\325) widthshow 253.399338 232.650085 M 0.404617 0 32 (t mean that e) widthshow 305.743347 232.650085 M 0.404617 0 32 (v) widthshow 310.593414 232.650085 M 0.404617 0 32 (ery operation in the serv) widthshow 409.261963 232.650085 M 0.404617 0 32 (er is serialized; there is still par-) widthshow 180 244.650024 M 0.8284 0 32 (allel reception and v) widthshow 263.605347 244.650024 M 0.8284 0 32 (alidation of service requests, the e) widthshow 403.677429 244.650024 M 0.8284 0 32 (x) widthshow 408.527527 244.650024 M 0.8284 0 32 (ecution time of which may v) widthshow 527.229614 244.650024 M 0.8284 0 32 (ery) widthshow 180 256.649963 M 0.900757 0 32 (much dw) widthshow 217.740814 256.649963 M 0.900757 0 32 (arf the request e) widthshow 284.433167 256.649963 M 0.900757 0 32 (x) widthshow 289.283264 256.649963 M 0.900757 0 32 (ecution time. Such coarse-grained locks also ha) widthshow 484.727936 256.649963 M 0.900757 0 32 (v) widthshow 489.578003 256.649963 M 0.900757 0 32 (e the adv) widthshow 527.229675 256.649963 M 0.900757 0 32 (an-) widthshow (tage that the) 180.0 268.65 T (y can be statically allocated.) 228.73 268.65 T 180 292.649841 M 0.80658 0 32 (When there are more and \336ner) widthshow 305.733032 292.649841 M 0.80658 0 32 (-grained locks, the comple) widthshow 414.092865 292.649841 M 0.80658 0 32 (xity rises dramatically) widthshow 503.936401 292.649841 M 0.80658 0 32 (. Also, it) widthshow 180 304.64978 M 1.116821 0 32 (is possible that the o) widthshow 265.987366 304.64978 M 1.116821 0 32 (v) widthshow 270.837463 304.64978 M 1.116821 0 32 (erhead in manipulating the locks can e) widthshow 431.248474 304.64978 M 1.116821 0 32 (xceed the bene\336t achie) widthshow 525.709106 304.64978 M 1.116821 0 32 (v) widthshow 530.559204 304.64978 M 1.116821 0 32 (ed) widthshow (from maintaining them.) 180.0 316.65 T 180 340.649658 M 0.837479 0 32 (A typical form of \336ne-grained locks is a lock per structure. As such, the allocation of a) widthshow 180 352.649597 M 0.187256 0 32 (ne) widthshow 189.19014 352.649597 M 0.187256 0 32 (w structure in) widthshow 244.154877 352.649597 M 0.187256 0 32 (v) widthshow 248.954987 352.649597 M 0.187256 0 32 (olv) widthshow 261.585083 352.649597 M 0.187256 0 32 (es the allocation of a protecting lock as well, most lik) widthshow 476.947693 352.649597 M 0.187256 0 32 (ely in the struc-) widthshow (ture itself. This brings up the topic of the e) 180.0 364.65 T (xistence of objects and the protection needed.) 350.39 364.65 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (Object Existence and Naming) 180.0 395.983 T 3 FF 180 412.649414 M 1.463272 0 32 (W) widthshow 189.040222 412.649414 M 1.463272 0 32 (ith a single-threaded \(synchronous\) serv) widthshow 355.263428 412.649414 M 1.463272 0 32 (er) widthshow 362.633636 412.649414 M 1.463272 0 32 (, the serv) widthshow 401.790283 412.649414 M 1.463272 0 32 (er has no constraint on its object) widthshow 180 424.649353 M 0.626099 0 32 (naming scheme. Each service request is recei) widthshow 364.286743 424.649353 M 0.626099 0 32 (v) widthshow 369.136841 424.649353 M 0.626099 0 32 (ed, with some object name; the serv) widthshow 516.333496 424.649353 M 0.626099 0 32 (er de-) widthshow (termines if the named object e) 180.0 436.649 T (xists, performs the operation and returns a result.) 300.66 436.649 T 180 460.649231 M 0.421371 0 32 (W) widthshow 189.040222 460.649231 M 0.421371 0 32 (ith a multi-threaded serv) widthshow 288.194427 460.649231 M 0.421371 0 32 (er) widthshow 295.564636 460.649231 M 0.421371 0 32 (, the issue of whether an object e) widthshow 429.444336 460.649231 M 0.421371 0 32 (xists when a request comes) widthshow 180 472.64917 M 0.022888 0 32 (in and locating the object is not tri) widthshow 316.850342 472.64917 M 0.022888 0 32 (vial. It follo) widthshow 364.146271 472.64917 M 0.022888 0 32 (ws that while the serv) widthshow 451.297913 472.64917 M 0.022888 0 32 (er is recei) widthshow 489.963837 472.64917 M 0.022888 0 32 (ving and be-) widthshow 180 484.649109 M 0.28186 0 32 (ginning to start a service request for some object that another thread may be trying to de-) widthshow (lete that object.) 180.0 496.649 T 180 520.648987 M 0.983307 0 32 (A simple approach to this problem is to maintain a table that maps client object names) widthshow 180 532.648926 M 0.97995 0 32 (into data structure references. This table w) widthshow 356.009766 532.648926 M 0.97995 0 32 (ould ha) widthshow 386.509827 532.648926 M 0.97995 0 32 (v) widthshow 391.359924 532.648926 M 0.97995 0 32 (e a single global lock protecting the) widthshow 180 544.648865 M 0.347778 0 32 (e) widthshow 184.290085 544.648865 M 0.347778 0 32 (xistence of elements in the table. Ho) widthshow 331.93689 544.648865 M 0.347778 0 32 (we) widthshow 343.347046 544.648865 M 0.347778 0 32 (v) widthshow 348.197144 544.648865 M 0.347778 0 32 (er) widthshow 355.567352 544.648865 M 0.347778 0 32 (, this global lock forms a major bottleneck. A) widthshow 180 556.648804 M 0.751373 0 32 (global lock may be necessary to protect the master data structures that go) widthshow 481.586609 556.648804 M 0.751373 0 32 (v) widthshow 486.436676 556.648804 M 0.751373 0 32 (ern the e) widthshow 522.219482 556.648804 M 0.751373 0 32 (xist-) widthshow 180 568.648743 M 0.805847 0 32 (ence of an object \(and therefore this global lock must be held to create or delete an ob-) widthshow 180 580.648682 M 0.884659 0 32 (ject\), b) widthshow 208.454773 580.648682 M 0.884659 0 32 (ut it is undesirable to ha) widthshow 308.508179 580.648682 M 0.884659 0 32 (v) widthshow 313.358276 580.648682 M 0.884659 0 32 (e to hold the global lock merely to locate an object for) widthshow (each and e) 180.0 592.649 T (v) 221.95 592.649 T (ery service request.) 226.8 592.649 T 180 616.64856 M 0.964539 0 32 (The base alternati) widthshow 252.769226 616.64856 M 0.964539 0 32 (v) widthshow 257.619324 616.64856 M 0.964539 0 32 (e is to pro) widthshow 300.083008 616.64856 M 0.964539 0 32 (vide clients with some identi\336er that more directly locates) widthshow (the object data structures in the serv) 180.0 628.649 T (er) 323.71 628.649 T (.) 330.93 628.649 T 180 652.648438 M 0.125534 0 32 (One such identi\336er is an array inde) widthshow 320.573303 652.648438 M 0.125534 0 32 (x. If objects are allocated from an array) widthshow 478.52243 652.648438 M 0.125534 0 32 (, clients can di-) widthshow 180 664.648376 M 1.172592 0 32 (rectly supply an array inde) widthshow 291.180481 664.648376 M 1.172592 0 32 (x to name an object\325) widthshow 376.97113 664.648376 M 1.172592 0 32 (s data structure. The inde) widthshow 482.321594 664.648376 M 1.172592 0 32 (x that a client) widthshow 180 676.648315 M 0.534622 0 32 (supplies may not name an entry in use, b) widthshow 347.117096 676.648315 M 0.534622 0 32 (ut the static location of the entry corresponding) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 71 71 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (67 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Locking, Operation Sequencing and Consistency) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666626 M 0.81459 0 32 (to that inde) widthshow 118.479263 114.666626 M 0.81459 0 32 (x allo) widthshow 141.543991 114.666626 M 0.81459 0 32 (ws the serv) widthshow 188.01326 114.666626 M 0.81459 0 32 (er to locate and lock the structure safely) widthshow 352.745789 114.666626 M 0.81459 0 32 (. W) widthshow 367.600586 114.666626 M 0.81459 0 32 (ith the structure) widthshow (lock) 72.0 126.667 T (ed, the serv) 89.12 126.667 T (er can determine whether the inde) 134.79 126.667 T (x) 270.43 126.667 T (ed element is still v) 275.28 126.667 T (alid.) 352.81 126.667 T 72 150.666504 M 0.533295 0 32 (An alternati) widthshow 119.773438 150.666504 M 0.533295 0 32 (v) widthshow 124.62352 150.666504 M 0.533295 0 32 (e is to use the request port name itself. W) widthshow 294.553406 150.666504 M 0.533295 0 32 (ith ) widthshow 1 FF 308.146698 150.666504 M 0.533295 0 32 (mach_port_allocate_name) widthshow 3 FF 420.906708 150.666504 M 0.533295 0 32 (, it) widthshow 72 162.666443 M 0.38623 0 32 (is possible to arrange for the request port names to match the address of the object struc-) widthshow 72 174.666382 M 0.69191 0 32 (ture so named. Ho) widthshow 147.145874 174.666382 M 0.69191 0 32 (we) widthshow 158.556015 174.666382 M 0.69191 0 32 (v) widthshow 163.406097 174.666382 M 0.69191 0 32 (er) widthshow 170.776321 174.666382 M 0.69191 0 32 (, since a task does not ha) widthshow 273.877899 174.666382 M 0.69191 0 32 (v) widthshow 278.727966 174.666382 M 0.69191 0 32 (e complete control o) widthshow 362.583801 174.666382 M 0.69191 0 32 (v) widthshow 367.433899 174.666382 M 0.69191 0 32 (er its port name) widthshow 72 186.666321 M 0.473785 0 32 (space \(the k) widthshow 120.607635 186.666321 M 0.473785 0 32 (ernel creates port names for rights recei) widthshow 281.48053 186.666321 M 0.473785 0 32 (v) widthshow 286.330597 186.666321 M 0.473785 0 32 (ed in messages\), an arbitrary virtual) widthshow 72 198.66626 M 0.490601 0 32 (address may not be usable as a port name because of name collision. Thus, some care in) widthshow (choosing port names is necessary) 72.0 210.666 T 72 234.666138 M 0.751221 0 32 (F) widthshow 77.41008 234.666138 M 0.751221 0 32 (or this latter approach to be v) widthshow 198.867554 234.666138 M 0.751221 0 32 (alid, the serv) widthshow 251.600082 234.666138 M 0.751221 0 32 (er must arrange for the object address to re-) widthshow 72 246.666077 M 0.445862 0 32 (main v) widthshow 99.695999 246.666077 M 0.445862 0 32 (alid as long as an) widthshow 170.209534 246.666077 M 0.445862 0 32 (y client can send a service request, that is, the serv) widthshow 376.138245 246.666077 M 0.445862 0 32 (er cannot free) widthshow 72 258.666016 M 0.367966 0 32 (the object structure until it processes a no-more-senders noti\336cation. \(A no-more-senders) widthshow 72 270.665955 M 0.30925 0 32 (noti\336cation indicates the absence of send rights at the time the message w) widthshow 370.571075 270.665955 M 0.30925 0 32 (as generated. It) widthshow 72 282.665894 M 0.332214 0 32 (does not, ho) widthshow 121.024567 282.665894 M 0.332214 0 32 (we) widthshow 132.434708 282.665894 M 0.332214 0 32 (v) widthshow 137.28479 282.665894 M 0.332214 0 32 (er) widthshow 144.655014 282.665894 M 0.332214 0 32 (, indicate the absence of send-once rights. If send-once rights are gi) widthshow 417.709534 282.665894 M 0.332214 0 32 (v) widthshow 422.559631 282.665894 M 0.332214 0 32 (en) widthshow 72 294.665833 M 0.131989 0 32 (to clients as well, the serv) widthshow 175.830032 294.665833 M 0.131989 0 32 (er must w) widthshow 215.434067 294.665833 M 0.131989 0 32 (ait until the number the number of send-once generat-) widthshow 72 306.665771 M 1.881943 0 32 (ed messages \(and send-once noti\336cations\) recei) widthshow 271.389893 306.665771 M 1.881943 0 32 (v) widthshow 276.23996 306.665771 M 1.881943 0 32 (ed matches the number of send-once) widthshow 72 318.66571 M 1.144974 0 32 (rights it generated.\) Since the no-more-senders processing must synchronize with other) widthshow 72 330.665649 M 0.231964 0 32 (threads possibly e) widthshow 143.974014 330.665649 M 0.231964 0 32 (x) widthshow 148.824097 330.665649 M 0.231964 0 32 (ecuting \(older\) requests upon the object, the no-more-senders process-) widthshow (ing w) 72.0 342.666 T (ould typically require obtaining the object\325) 94.4 342.666 T (s o) 265.22 342.666 T (wn lock.) 276.361 342.666 T 72 366.665527 M 1.012421 0 32 (The no-more-senders noti\336cation races with the production of send rights in the serv) widthshow 422.279175 366.665527 M 1.012421 0 32 (er) widthshow 429.499451 366.665527 M 1.012421 0 32 (.) widthshow 72 378.665466 M 1.704102 0 32 (That is, between the time the k) widthshow 205.164673 378.665466 M 1.704102 0 32 (ernel generates a no-more-senders noti\336cation and the) widthshow 72 390.665405 M 1.053497 0 32 (time the serv) widthshow 125.617081 390.665405 M 1.053497 0 32 (er recei) widthshow 156.120728 390.665405 M 1.053497 0 32 (v) widthshow 160.97081 390.665405 M 1.053497 0 32 (es it, the serv) widthshow 216.751389 390.665405 M 1.053497 0 32 (er may ha) widthshow 258.088501 390.665405 M 1.053497 0 32 (v) widthshow 262.938599 390.665405 M 1.053497 0 32 (e generated another send right. Thus, the) widthshow 72 402.665344 M 1.089172 0 32 (serv) widthshow 88.510086 402.665344 M 1.089172 0 32 (er must synchronize with its o) widthshow 213.976089 402.665344 M 1.089172 0 32 (wn send right generation via the mak) widthshow 368.721191 402.665344 M 1.089172 0 32 (e-send count in) widthshow (the no-more-senders noti\336cation message.) 72.0 414.665 T 72 438.665222 M 0.409927 0 32 (The no-more-senders noti\336cation message does not include the name of the port \(recei) widthshow 422.70929 438.665222 M 0.409927 0 32 (v) widthshow 427.559387 438.665222 M 0.409927 0 32 (e) widthshow 72 450.665161 M 0.322113 0 32 (right\) losing its senders. Thus, each port for which noti\336cations are desired needs a sepa-) widthshow 72 462.6651 M 0.419922 0 32 (rate port from which the no-more-senders noti\336cation can be recei) widthshow 340.739471 462.6651 M 0.419922 0 32 (v) widthshow 345.589539 462.6651 M 0.419922 0 32 (ed so as to dif) widthshow 402.569397 462.6651 M 0.419922 0 32 (ferenti-) widthshow 72 474.665039 M 0.43457 0 32 (ate the noti\336cations. T) widthshow 161.944153 474.665039 M 0.43457 0 32 (o a) widthshow 174.118835 474.665039 M 0.43457 0 32 (v) widthshow 178.918945 474.665039 M 0.43457 0 32 (oid a proliferation of ports, a con) widthshow 313.0466 474.665039 M 0.43457 0 32 (v) widthshow 317.896667 474.665039 M 0.43457 0 32 (enient choice for this port is) widthshow 72 486.664978 M 1.061813 0 32 (to use the object\325) widthshow 143.235748 486.664978 M 1.061813 0 32 (s port itself \(that is, use the same port for both client service requests) widthshow 72 498.664917 M 1.262894 0 32 (and k) widthshow 95.102951 498.664917 M 1.262894 0 32 (ernel noti\336cations\). The serv) widthshow 213.721725 498.664917 M 1.262894 0 32 (er can safely detect k) widthshow 303.083374 498.664917 M 1.262894 0 32 (ernel noti\336cations \(dif) widthshow 394.239319 498.664917 M 1.262894 0 32 (ferentiate) widthshow 72 510.664856 M 1.32782 0 32 (them from f) widthshow 122.325699 510.664856 M 1.32782 0 32 (ak) widthshow 131.665756 510.664856 M 1.32782 0 32 (e client generated messages\) by the IPC right type included in the mes-) widthshow 72 522.664795 M 0.899963 0 32 (sage. Noti\336cation messages are sent via send-once rights. If only the k) widthshow 363.139679 522.664795 M 0.899963 0 32 (ernel is pro) widthshow 409.779694 522.664795 M 0.899963 0 32 (vided) widthshow 72 534.664734 M 1.489975 0 32 (send-once rights \(clients need send rights so as to send multiple service requests an) widthshow 423.6698 534.664734 M 1.489975 0 32 (y-) widthshow (w) 72.0 546.665 T (ay\), then the serv) 79.12 546.665 T (er can tell messages that must ha) 147.84 546.665 T (v) 278.73 546.665 T (e originated in the k) 283.58 546.665 T (ernel.) 363.47 546.665 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (Blocking Operations and Deadlock) 72.0 577.998 T 3 FF 72 594.664551 M 0.10498 0 32 (It is typically the case that the data in a serv) widthshow 247.869904 594.664551 M 0.10498 0 32 (er will be protected by multiple locks. F) widthshow 408.444855 594.664551 M 0.10498 0 32 (or e) widthshow 423.669922 594.664551 M 0.10498 0 32 (x-) widthshow 72 606.66449 M 0.971222 0 32 (ample, there may be a global lock that protects the list of objects and a per) widthshow 383.538452 606.66449 M 0.971222 0 32 (-object lock) widthshow 72 618.664429 M 0.270645 0 32 (protecting the state of each object. The order in which these multiple locks can be lock) widthshow 422.559753 618.664429 M 0.270645 0 32 (ed) widthshow (must be chosen carefully to a) 72.0 630.664 T (v) 188.72 630.664 T (oid deadlock.) 193.52 630.664 T 72 654.664307 M 0.494263 0 32 (Deadlock is a situation in which multiple threads are each block) widthshow 332.91272 654.664307 M 0.494263 0 32 (ed w) widthshow 352.467041 654.664307 M 0.494263 0 32 (aiting for locks that) widthshow 72 666.664246 M 0.755798 0 32 (the other threads hold. F) widthshow 172.363281 666.664246 M 0.755798 0 32 (or e) widthshow 188.239166 666.664246 M 0.755798 0 32 (xample, if thread A holds lock X and is w) widthshow 362.141418 666.664246 M 0.755798 0 32 (aiting for lock Y) widthshow 429.499512 666.664246 M 0.755798 0 32 (,) widthshow (and thread B holds lock Y and is w) 72.0 678.664 T (aiting for lock X, neither thread will e) 212.44 678.664 T (v) 363.83 678.664 T (er proceed.) 368.68 678.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 72 72 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (68 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 180.0 55.824 T (eaded IPC\320Based Ser) 219.339 55.824 T (v) 302.247 55.824 T (ers) 306.657 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 1.425278 0 32 (The typical w) widthshow 237.740616 112.650635 M 1.425278 0 32 (ay to a) widthshow 267.05127 112.650635 M 1.425278 0 32 (v) widthshow 271.851379 112.650635 M 1.425278 0 32 (oid these situations is to choose a \(partial\) order in which locks) widthshow 180 124.650574 M 0.188751 0 32 (must be acquired. So, gi) widthshow 277.165161 124.650574 M 0.188751 0 32 (v) widthshow 282.015228 124.650574 M 0.188751 0 32 (en an) widthshow 303.434082 124.650574 M 0.188751 0 32 (y tw) widthshow 321.022888 124.650574 M 0.188751 0 32 (o locks X and Y) widthshow 385.478577 124.650574 M 0.188751 0 32 (, there w) widthshow 420.466156 124.650574 M 0.188751 0 32 (ould be a rule stating whether) widthshow 180 136.650513 M 0.853226 0 32 (X must be obtained \336rst, or Y) widthshow 302.990051 136.650513 M 0.853226 0 32 (. If all code locks these locks in the same order) widthshow 498.582581 136.650513 M 0.853226 0 32 (, no dead-) widthshow 180 148.650452 M 0.509949 0 32 (lock can occur) widthshow 238.780212 148.650452 M 0.509949 0 32 (. It is not necessary that all locks be acquired by all code paths, though; if) widthshow 180 160.650391 M 1.430588 0 32 (locks X, Y and Z must be acquired in that order to pre) widthshow 413.267212 160.650391 M 1.430588 0 32 (v) widthshow 418.11731 160.650391 M 1.430588 0 32 (ent deadlock, b) widthshow 481.598572 160.650391 M 1.430588 0 32 (ut a particular) widthshow 180 172.65033 M 0.770493 0 32 (code path needs only locks X and Z, it need not acquire Y) widthshow 419.856628 172.65033 M 0.770493 0 32 (. Also, code is free to release) widthshow (the locks in an) 180.0 184.65 T (y order) 237.9 184.65 T (, as long as it does not try to reacquire an) 266.1 184.65 T (y locks it released.) 430.09 184.65 T 180 208.650208 M 0.289948 0 32 (It must be remembered that a serv) widthshow 317.6698 208.650208 M 0.289948 0 32 (er\325) widthshow 328.220093 208.650208 M 0.289948 0 32 (s o) widthshow 339.650177 208.650208 M 0.289948 0 32 (wn locks are not the only source of deadlock. If a) widthshow 180 220.650146 M 0.049973 0 32 (thread mak) widthshow 224.660034 220.650146 M 0.049973 0 32 (es a request of another thread \(or another serv) widthshow 408.179932 220.650146 M 0.049973 0 32 (er\) that then mak) widthshow 476.269897 220.650146 M 0.049973 0 32 (es a \(nested\) re-) widthshow 180 232.650085 M 0.829315 0 32 (quest of this serv) widthshow 250.388031 232.650085 M 0.829315 0 32 (er/thread, this loop of calls can deadlock if the nested call requires the) widthshow 180 244.650024 M 0.673294 0 32 (same lock \(or thread, if the request requires service by a thread dedicated to some func-) widthshow (tion\).) 180.0 256.65 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (Request Ordering) 180.0 287.983 T 3 FF 180 304.649841 M 1.175262 0 32 (If a single client mak) widthshow 269.031128 304.649841 M 1.175262 0 32 (es only synchronous requests of a serv) widthshow 429.792786 304.649841 M 1.175262 0 32 (er) widthshow 437.163025 304.649841 M 1.175262 0 32 (, then no matter ho) widthshow 516.884216 304.649841 M 1.175262 0 32 (w the) widthshow 180 316.64978 M 0.191345 0 32 (serv) widthshow 196.510086 316.64978 M 0.191345 0 32 (er is or) widthshow 224.48288 316.64978 M 0.191345 0 32 (g) widthshow 229.432907 316.64978 M 0.191345 0 32 (anized, the client\325) widthshow 300.635925 316.64978 M 0.191345 0 32 (s requests will be processed in order) widthshow 446.204285 316.64978 M 0.191345 0 32 (. When there are multi-) widthshow 180 328.649719 M 0.904388 0 32 (ple \(asynchronously e) widthshow 269.418884 328.649719 M 0.904388 0 32 (x) widthshow 274.268951 328.649719 M 0.904388 0 32 (ecuting\) clients, or clients making asynchronous service requests) widthshow 180 340.649658 M 0.49263 0 32 (\(such as the k) widthshow 236.087952 340.649658 M 0.49263 0 32 (ernel\325) widthshow 258.858276 340.649658 M 0.49263 0 32 (s e) widthshow 270.030975 340.649658 M 0.49263 0 32 (xternal memory management and noti\336cation interf) widthshow 478.754211 340.649658 M 0.49263 0 32 (aces\), the issue) widthshow (of the order in which these requests should be e) 180.0 352.65 T (x) 370.09 352.65 T (ecuted arises.) 374.94 352.65 T 180 376.649536 M 0.428085 0 32 (On the one hand, it w) widthshow 268.140503 376.649536 M 0.428085 0 32 (ould seem as though requests should be e) widthshow 436.247192 376.649536 M 0.428085 0 32 (x) widthshow 441.09726 376.649536 M 0.428085 0 32 (ecuted in strict order ac-) widthshow 180 388.649475 M 1.107285 0 32 (cording to the order in which the) widthshow 317.583801 388.649475 M 1.107285 0 32 (y were recei) widthshow 368.408508 388.649475 M 1.107285 0 32 (v) widthshow 373.258606 388.649475 M 1.107285 0 32 (ed from the request port. Ev) widthshow 490.845123 388.649475 M 1.107285 0 32 (en this rule,) widthshow 180 400.649414 M 0.874512 0 32 (though, is dif) widthshow 234.559158 400.649414 M 0.874512 0 32 widthshow 433.740906 400.649414 M 0.874512 0 32 (v) widthshow 438.590973 400.649414 M 0.874512 0 32 (e messages from a gi) widthshow 525.709167 400.649414 M 0.874512 0 32 (v) widthshow 530.559265 400.649414 M 0.874512 0 32 (en) widthshow 180 412.649353 M 0.589935 0 32 (port, then service thread A can recei) widthshow 327.959778 412.649353 M 0.589935 0 32 (v) widthshow 332.809875 412.649353 M 0.589935 0 32 (e a message, be preempted, be follo) widthshow 478.83963 412.649353 M 0.589935 0 32 (wed by service) widthshow 180 424.649292 M 1.162598 0 32 (thread B which recei) widthshow 266.267944 424.649292 M 1.162598 0 32 (v) widthshow 271.118042 424.649292 M 1.162598 0 32 (es the ne) widthshow 308.283325 424.649292 M 1.162598 0 32 (xt message and processes it before thread A e) widthshow 499.504272 424.649292 M 1.162598 0 32 (v) widthshow 504.35434 424.649292 M 1.162598 0 32 (en had a) widthshow (chance to record the f) 180.0 436.649 T (act that it recei) 266.53 436.649 T (v) 325.43 436.649 T (ed a message.) 330.28 436.649 T 180 460.64917 M 0.372467 0 32 (This problem can be a) widthshow 270.159973 460.64917 M 0.372467 0 32 (v) widthshow 274.960083 460.64917 M 0.372467 0 32 (oided by using the k) widthshow 357.460022 460.64917 M 0.372467 0 32 (ernel generated sequence numbers associated) widthshow 180 472.649109 M 1.327667 0 32 (with each port. The k) widthshow 270.470734 472.649109 M 1.327667 0 32 (ernel increments its sequence number whene) widthshow 455.979248 472.649109 M 1.327667 0 32 (v) widthshow 460.829315 472.649109 M 1.327667 0 32 (er a message is re-) widthshow 180 484.649048 M 0.704224 0 32 (cei) widthshow 191.410141 484.649048 M 0.704224 0 32 (v) widthshow 196.260223 484.649048 M 0.704224 0 32 (ed. The serv) widthshow 246.668762 484.649048 M 0.704224 0 32 (er w) widthshow 264.763062 484.649048 M 0.704224 0 32 (ould maintain its o) widthshow 341.355835 484.649048 M 0.704224 0 32 (wn count of the last message processed. When a) widthshow 180 496.648987 M 1.644928 0 32 (thread recei) widthshow 228.315079 496.648987 M 1.644928 0 32 (v) widthshow 233.165161 496.648987 M 1.644928 0 32 (es a message, it w) widthshow 311.574951 496.648987 M 1.644928 0 32 (ould compare its message\325) widthshow 422.330017 496.648987 M 1.644928 0 32 (s sequence number with the) widthshow 180 508.648926 M 0.121185 0 32 (serv) widthshow 196.510086 508.648926 M 0.121185 0 32 (er\325) widthshow 207.060394 508.648926 M 0.121185 0 32 (s count \(under protection of some lock, of course\); if there is a g) widthshow 465.755859 508.648926 M 0.121185 0 32 (ap, then some oth-) widthshow 180 520.648865 M 0.9478 0 32 (er threads ha) widthshow 232.785721 520.648865 M 0.9478 0 32 (v) widthshow 237.635803 520.648865 M 0.9478 0 32 (e recei) widthshow 264.703735 520.648865 M 0.9478 0 32 (v) widthshow 269.553833 520.648865 M 0.9478 0 32 (ed messages that the) widthshow 354.177307 520.648865 M 0.9478 0 32 (y ha) widthshow 371.865234 520.648865 M 0.9478 0 32 (v) widthshow 376.715332 520.648865 M 0.9478 0 32 (e not yet processed, so this thread must) widthshow 180 532.648804 M 1.737137 0 32 (defer to them. Note that the set of threads holding messages w) widthshow 447.858582 532.648804 M 1.737137 0 32 (aiting to be processed) widthshow (forms the deferred processing queue.) 180.0 544.649 T 180 568.648682 M 0.573502 0 32 (It is not al) widthshow 221.900558 568.648682 M 0.573502 0 32 (w) widthshow 229.020615 568.648682 M 0.573502 0 32 (ays possible, or desirable, to e) widthshow 351.99823 568.648682 M 0.573502 0 32 (x) widthshow 356.848297 568.648682 M 0.573502 0 32 (ecute client requests in strict \336rst-in, \336rst-out) widthshow 180 580.648621 M 0.95993 0 32 (order) widthshow 200.700226 580.648621 M 0.95993 0 32 (, nor is it al) widthshow 249.720001 580.648621 M 0.95993 0 32 (w) widthshow 256.840057 580.648621 M 0.95993 0 32 (ays necessary) widthshow 311.850342 580.648621 M 0.95993 0 32 (. F) widthshow 323.220367 580.648621 M 0.95993 0 32 (or e) widthshow 339.300385 580.648621 M 0.95993 0 32 (xample, consider the data read logic in a POSIX) widthshow 180 592.64856 M 1.222794 0 32 widthshow 248.978516 592.64856 M 1.222794 0 32 (v) widthshow 253.828598 592.64856 M 1.222794 0 32 (en client request may require reading more than one disk block. The) widthshow 180 604.648499 M 0.540573 0 32 (read atomicity rules state that the data read must be an atomic vie) widthshow 447.857056 604.648499 M 0.540573 0 32 (w of the \336le\321the read) widthshow 180 616.648438 M 0.971634 0 32 (must not sho) widthshow 232.8134 616.648438 M 0.971634 0 32 (w partial results of not-yet-completed write calls. Thus, all blocks af) widthshow 515.569885 616.648438 M 0.971634 0 32 (fected) widthshow 180 628.648376 M 0.214951 0 32 (by the data read must be lock) widthshow 298.389771 628.648376 M 0.214951 0 32 (ed while the data is being copied from the blocks. Ho) widthshow 513.869446 628.648376 M 0.214951 0 32 (we) widthshow 525.279541 628.648376 M 0.214951 0 32 (v) widthshow 530.129639 628.648376 M 0.214951 0 32 (er) widthshow 537.499878 628.648376 M 0.214951 0 32 (,) widthshow 180 640.648315 M 0.560638 0 32 (it is not necessary to k) widthshow 271.863251 640.648315 M 0.560638 0 32 (eep the blocks already in memory lock) widthshow 430.097168 640.648315 M 0.560638 0 32 (ed while w) widthshow 474.998474 640.648315 M 0.560638 0 32 (aiting for others) widthshow 180 652.648254 M 0.940582 0 32 (to be transferred from disk; only when all blocks are in memory is it necessary to hold) widthshow 180 664.648193 M 0.173721 0 32 (them lock) widthshow 219.793777 664.648193 M 0.173721 0 32 (ed. As such, a request to write one of the blocks that strictly speaking arri) widthshow 515.81604 664.648193 M 0.173721 0 32 (v) widthshow 520.666138 664.648193 M 0.173721 0 32 (ed at) widthshow (the serv) 180.0 676.648 T (er after the read request could be processed \336rst.) 211.23 676.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 73 73 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (69 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 72.0 55.824 T (eaded Object-Oriented Example) 111.339 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666626 M 1.184952 0 32 (In general, it is not necessary to e) widthshow 214.004761 114.666626 M 1.184952 0 32 (x) widthshow 218.854843 114.666626 M 1.184952 0 32 (ecute client requests in strict client order; it is only) widthshow 72 126.666565 M 0.278625 0 32 (necessary to e) widthshow 128.497345 126.666565 M 0.278625 0 32 (x) widthshow 133.347427 126.666565 M 0.278625 0 32 (ecute them in the order that the clients can detect that the) widthshow 364.2724 126.666565 M 0.278625 0 32 (y were e) widthshow 398.549744 126.666565 M 0.278625 0 32 (x) widthshow 403.399841 126.666565 M 0.278625 0 32 (ecuted.) widthshow 72 138.666504 M 1.428864 0 32 (That is, if a client cannot tell that a request w) widthshow 266.438721 138.666504 M 1.428864 0 32 (as e) widthshow 282.987671 138.666504 M 1.428864 0 32 (x) widthshow 287.837738 138.666504 M 1.428864 0 32 (ecuted until it gets its reply or via) widthshow 72 150.666443 M 0.949249 0 32 (some other request of the serv) widthshow 196.846344 150.666443 M 0.949249 0 32 (er) widthshow 204.216568 150.666443 M 0.949249 0 32 (, then the serv) widthshow 263.014404 150.666443 M 0.949249 0 32 (er is free to \(implicitly\) re-order requests) widthshow 72 162.666382 M 1.158096 0 32 (until it does send such a reply or respond to some other request that e) widthshow 364.693451 162.666382 M 1.158096 0 32 (xposes the com-) widthshow (pleteness or non-completeness of the pre) 72.0 174.666 T (vious request.) 234.77 174.666 T 72 198.66626 M 0.593292 0 32 (F) widthshow 77.41008 198.66626 M 0.593292 0 32 (or increased parallelism, a serv) widthshow 203.763351 198.66626 M 0.593292 0 32 (er may not w) widthshow 257.933289 198.66626 M 0.593292 0 32 (ant to hold an object lock) widthshow 362.17981 198.66626 M 0.593292 0 32 (ed during the en-) widthshow 72 210.666199 M 0.627975 0 32 (tire e) widthshow 92.748062 210.666199 M 0.627975 0 32 (x) widthshow 97.598145 210.666199 M 0.627975 0 32 (ecution of a service request. In such a situation, then, the serv) widthshow 350.415985 210.666199 M 0.627975 0 32 (er needs some other) widthshow 72 222.666138 M 0.674515 0 32 (defense besides the object lock to pre) widthshow 225.207245 222.666138 M 0.674515 0 32 (v) widthshow 230.057327 222.666138 M 0.674515 0 32 (ent no-more-senders processing from deleting the) widthshow 72 234.666077 M 0.341415 0 32 (object. A typical approach is to maintain a count of the number of in-progress operations) widthshow 72 246.666016 M 1.115982 0 32 (on the object \(the count being protected by the object lock\). The object can be deleted) widthshow (when the no-more-senders noti\336cation is recei) 72.0 258.666 T (v) 256.99 258.666 T (ed and the in-progress count hits zero.) 261.84 258.666 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (Documentation) 72.0 289.999 T 3 FF 72 306.665833 M 0.709991 0 32 (The locking rules are perhaps the most important property of a serv) widthshow 349.330017 306.665833 M 0.709991 0 32 (er to document. The) widthshow (serv) 72.0 318.666 T (er should document:) 88.51 318.666 T 5 (Times-Roman) 7 1 mymakefontmetric 5 FF 72.0 336.666 T 3 FF (The locking hierarch) 85.536 336.666 T (y) 168.796 336.666 T (.) 173.146 336.666 T 5 FF 72.0 351.666 T 3 FF (F) 85.536 351.666 T (or each data \336eld, the lock protecting it.) 90.946 351.666 T 5 FF 72.0 366.666 T 3 FF 85.535995 366.665588 M 0.463287 0 32 (F) widthshow 90.946075 366.665588 M 0.463287 0 32 (or each module entry) widthshow 176.386307 366.665588 M 0.463287 0 32 (, what locks must be held on entry) widthshow 316.189697 366.665588 M 0.463287 0 32 (, what locks can be held and) widthshow (what locks might be tak) 85.536 378.666 T (en or released.) 180.986 378.666 T 72 420.998779 360 3.024002 CR 432 422.51 M 72 422.51 L S 0 0 612 792 CR 6 (Times-Bold) 14 1 mymakefontmetric 6 FF (Multi-Thr) 72.0 416.332 T (eaded Object-Oriented Example) 133.194 416.332 T 3 FF 72 440.689392 M 0.46489 0 32 (The follo) widthshow 109.155029 440.689392 M 0.46489 0 32 (wing C++ e) widthshow 157.32489 440.689392 M 0.46489 0 32 (xample sho) widthshow 203.369919 440.689392 M 0.46489 0 32 (ws a simpli\336ed b) widthshow 272.624695 440.689392 M 0.46489 0 32 (ut typical object-oriented serv) widthshow 393.569458 440.689392 M 0.46489 0 32 (er) widthshow 400.789764 440.689392 M 0.46489 0 32 (. In this) widthshow 72 452.689331 M 0.99559 0 32 (serv) widthshow 88.510086 452.689331 M 0.99559 0 32 (er) widthshow 95.88031 452.689331 M 0.99559 0 32 (, a send right held by a client represents a reference to an object managed by the) widthshow 72 464.68927 M 0.702209 0 32 (serv) widthshow 88.510086 464.68927 M 0.702209 0 32 (er) widthshow 95.730392 464.68927 M 0.702209 0 32 (. The serv) widthshow 136.694901 464.68927 M 0.702209 0 32 (er\325) widthshow 147.245209 464.68927 M 0.702209 0 32 (s port name for the corresponding recei) widthshow 308.388611 464.68927 M 0.702209 0 32 (v) widthshow 313.238708 464.68927 M 0.702209 0 32 (e right locates the data struc-) widthshow 72 476.689209 M 0.864487 0 32 (ture representing the object. No-more-senders noti\336cation is used to determine when an) widthshow 72 488.689148 M 0.620728 0 32 (object should be deleted. The e) widthshow 199.373734 488.689148 M 0.620728 0 32 (xample maintains a single link) widthshow 323.976685 488.689148 M 0.620728 0 32 (ed list of objects protected) widthshow 72 500.689087 M 0.191833 0 32 (by a global lock; each object has its o) widthshow 223.264816 500.689087 M 0.191833 0 32 (wn object lock that protects manipulation of the ob-) widthshow (ject\325) 72.0 512.689 T (s visible state.) 89.22 512.689 T 4 FF (Interface De\336nitions) 72.0 544.022 T 3 FF 72 560.688965 M 0.318375 0 32 (There are tw) widthshow 123.066818 560.688965 M 0.318375 0 32 (o interf) widthshow 152.445251 560.688965 M 0.318375 0 32 (ace de\336nition \336les. Operations upon objects, sent to the object\325) widthshow 406.680939 560.688965 M 0.318375 0 32 (s port,) widthshow 72 572.688843 M 0.411377 0 32 (are de\336ned in ) widthshow 1 FF 130.164139 572.688843 M 0.411377 0 32 (object) widthshow 3 FF 156.264145 572.688843 M 0.411377 0 32 (.defs. The serv) widthshow 215.806992 572.688843 M 0.411377 0 32 (er\325) widthshow 226.3573 572.688843 M 0.411377 0 32 (s lookup operation, though, is not sent to an object) widthshow 72 584.688843 M 0.027618 0 32 (port, it is sent to a speci\336c serv) widthshow 195.923416 584.688843 M 0.027618 0 32 (er port that responds to such requests. This operation is de-) widthshow 72.0 596.689 T 1 FF (ooser) 104.78 596.689 T (v) 127.45 596.689 T (er) 132.35 596.689 T 3 FF (.defs.) 140.68 596.689 T 72 620.688721 M 2.891769 0 32 (The interesting detail in the lookup operation is the use of MA) widthshow 353.10968 620.688721 M 2.891769 0 32 (CH_MSG_TYPE_-) widthshow 72 632.688599 M 0.994339 0 32 (MO) widthshow 87.610275 632.688599 M 0.994339 0 32 (VE_SEND. Refer to the de\336nition of this operation \() widthshow 7 (Times-Italic) 10 1 mymakefontmetric 7 FF 306.934998 632.688599 M 0.994339 0 32 (object_list) widthshow 3 FF 348.60498 632.688599 M 0.994339 0 32 (::) widthshow 1 FF 354.164978 632.688599 M 0.994339 0 32 widthshow 409.075043 632.688599 M 0.994339 0 32 (e) widthshow 3 FF 413.515045 632.688599 M 0.994339 0 32 (\) for) widthshow (an e) 72.0 644.689 T (xplanation.) 88.23 644.689 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 74 74 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (70 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 180.0 55.824 T (eaded IPC\320Based Ser) 219.339 55.824 T (v) 302.247 55.824 T (ers) 306.657 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 180 105.984009 360 9 CR 180 105.984009 360 9 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (/*) 199.224 112.815 T 3 SL 0.6667 G 530.91 110.48 M 530.91 115.73 L 540 110.48 L 530.91 105.23 L F 530.91 110.48 M 216 110.48 L S 0 0 612 792 CR 0 G 3 FF (File: ) 216.0 121.651 T 0 FF (ooser) 236.84 121.651 T (v) 259.51 121.651 T (er) 264.41 121.651 T (.) 272.291 121.651 T 3 FF (defs) 274.791 121.651 T (Author: Richard P) 216.0 131.651 T (. Dra) 288.221 131.651 T (v) 308.011 131.651 T (es) 312.861 131.651 T 180 144.983826 360 9 CR 1 G 180 144.983826 360 9 NF 0 G 3 FF (*/) 198.0 151.81 T 0.6667 G 225.09 149.48 M 225.09 144.23 L 216 149.48 L 225.09 154.73 L F 540 149.48 M 225.09 149.48 L S 0 0 612 792 CR 0 G 3 FF (Interf) 216.0 141.651 T (ace de\336nitions for ) 238.11 141.651 T 0 FF (ooser) 312.82 141.651 T (v) 335.49 141.651 T (er) 340.39 141.651 T 3 FF (.) 348.72 141.651 T ([1]) 195.34 162.65 T (subsystem ) 216.0 162.65 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (ooserver) 260.17 162.65 T 3 FF (2783600;) 396.0 162.65 T ([2]) 195.34 174.65 T (serv) 216.0 174.65 T (erpre\336x ) 232.51 174.65 T 0 FF (do_) 266.11 174.65 T 3 FF (;) 281.67 174.65 T ([3]) 195.34 186.65 T (#include ) 216.0 186.65 T 180 191.983643 360 9 CR 1 G 180 191.983643 360 9 NF 0 G 3 FF (/*) 199.224 198.815 T 0.6667 G 530.91 196.48 M 530.91 201.73 L 540 196.48 L 530.91 191.23 L F 530.91 196.48 M 216 196.48 L S 180 210.983582 360 9 CR 1 G 180 210.983582 360 9 NF 0 G 3 FF (*/) 198.0 217.81 T 0.6667 G 225.09 215.48 M 225.09 210.23 L 216 215.48 L 225.09 220.73 L F 540 215.48 M 225.09 215.48 L S 0 0 612 792 CR 0 G 3 FF (Get an object port.) 216.0 207.65 T ([4]) 195.34 228.65 T (routine ) 216.0 228.65 T 0 FF (ooser) 246.83 228.65 T (v) 269.5 228.65 T (er_lookup) 274.4 228.65 T 3 FF ([5]) 195.34 240.65 T (\() 216.0 240.65 T ([6]) 195.34 252.65 T 4 FF (server) 252.0 252.65 T 3 FF (: mach_port_t;) 396.0 252.65 T ([7]) 195.34 264.65 T 4 FF (name) 252.0 264.65 T 3 FF (: int;) 396.0 264.65 T ([8]) 195.34 276.65 T (out ) 252.0 276.65 T 4 FF (object) 267.28 276.65 T 3 FF (: mach_port_t = ) 396.0 276.65 T (MA) 306.0 286.65 T (CH_MSG_TYPE_MO) 321.71 286.65 T (VE_SEND) 412.88 286.65 T ([9]) 195.34 298.65 T (\);) 216.0 298.65 T (This \336le de\336nes a simple change and query operation for the object\325) 180.0 320.65 T (s inte) 451.9 320.65 T (ger v) 473.14 320.65 T (alue.) 493.161 320.65 T 180 331.983093 360 9 CR 1 G 180 331.983093 360 9 NF 0 G 3 FF (/*) 199.224 338.814 T 0.6667 G 530.91 336.48 M 530.91 341.73 L 540 336.48 L 530.91 331.23 L F 530.91 336.48 M 216 336.48 L S 0 0 612 792 CR 0 G 3 FF (File: ) 216.0 347.65 T 0 FF (object.) 236.84 347.65 T 3 FF (defs) 265.44 347.65 T (Author: Richard P) 216.0 357.65 T (. Dra) 288.221 357.65 T (v) 308.011 357.65 T (es) 312.861 357.65 T 180 370.98291 360 9 CR 1 G 180 370.98291 360 9 NF 0 G 3 FF (*/) 198.0 377.809 T 0.6667 G 225.09 375.48 M 225.09 370.23 L 216 375.48 L 225.09 380.73 L F 540 375.48 M 225.09 375.48 L S 0 0 612 792 CR 0 G 3 FF (Interf) 216.0 367.65 T (ace de\336nitions for ) 238.11 367.65 T 0 FF (ooser) 312.82 367.65 T (v) 335.49 367.65 T (er) 340.39 367.65 T 3 FF ( objects.) 349.27 367.65 T ([1]) 195.34 388.65 T (subsystem ) 216.0 388.65 T 4 FF (object) 260.17 388.65 T 3 FF (2783700;) 396.0 388.65 T ([2]) 195.34 400.649 T (serv) 216.0 400.649 T (erpre\336x ) 232.51 400.649 T 0 FF (do_) 266.11 400.649 T 3 FF (;) 281.67 400.649 T ([3]) 195.34 412.649 T (#include ) 216.0 412.649 T 180 417.982727 360 9 CR 1 G 180 417.982727 360 9 NF 0 G 3 FF (/*) 199.224 424.814 T 0.6667 G 530.91 422.48 M 530.91 427.73 L 540 422.48 L 530.91 417.23 L F 530.91 422.48 M 216 422.48 L S 180 436.982666 360 9 CR 1 G 180 436.982666 360 9 NF 0 G 3 FF (*/) 198.0 443.809 T 0.6667 G 225.09 441.48 M 225.09 436.23 L 216 441.48 L 225.09 446.73 L F 540 441.48 M 225.09 441.48 L S 0 0 612 792 CR 0 G 3 FF (Operations on an object port.) 216.0 433.649 T ([4]) 195.34 454.649 T (routine ) 216.0 454.649 T 0 FF (object_change) 246.83 454.649 T 3 FF ([5]) 195.34 466.649 T (\() 216.0 466.649 T ([6]) 195.34 478.649 T 4 FF (object) 252.0 478.649 T 3 FF (: mach_port_t;) 396.0 478.649 T ([7]) 195.34 490.649 T 4 FF (value) 252.0 490.649 T 3 FF (: int) 396.0 490.649 T ([8]) 195.34 502.649 T (\);) 216.0 502.649 T ([9]) 195.34 514.649 T (routine ) 216.0 514.649 T 0 FF (object_query) 246.83 514.649 T 3 FF ([10]) 190.34 526.649 T (\() 216.0 526.649 T ([11]) 190.34 538.649 T 4 FF (object) 252.0 538.649 T 3 FF (: mach_port_t;) 396.0 538.649 T ([12]) 190.34 550.649 T (out ) 252.0 550.649 T 4 FF (value) 267.28 550.649 T 3 FF (: int) 396.0 550.649 T ([13]) 190.34 562.649 T (\);) 216.0 562.649 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Ser) 180.0 591.982 T (v) 197.208 591.982 T (er Pr) 203.088 591.982 T (ogram De\336nitions) 229.188 591.982 T 3 FF 180 608.648621 M 0.780716 0 32 (The serv) widthshow 215.340805 608.648621 M 0.780716 0 32 (er code follo) widthshow 267.192383 608.648621 M 0.780716 0 32 (ws. It be) widthshow 302.763916 608.648621 M 0.780716 0 32 (gins with the pre-requisite e) widthshow 417.386841 608.648621 M 0.780716 0 32 (xternal de\336nitions \(all de\336ned) widthshow 180 620.64856 M 0.923492 0 32 (as ) widthshow 4 FF 191.753494 620.64856 M 0.923492 0 32 (e) widthshow 195.993607 620.64856 M 0.923492 0 32 (xtern \322C\323) widthshow 3 FF 237.757095 620.64856 M 0.923492 0 32 ( because the) widthshow 288.324158 620.64856 M 0.923492 0 32 (y were written for general C use\). Included are de\336nitions of) widthshow 180 632.648499 M 1.06163 0 32 (the MIG generated serv) widthshow 277.724976 632.648499 M 1.06163 0 32 (er routines. Notice that some internal routines are also declared) widthshow 180 644.648438 M 0.720596 0 32 (here as ) widthshow 4 FF 211.981201 644.648438 M 0.720596 0 32 (e) widthshow 216.221313 644.648438 M 0.720596 0 32 (xtern \322C\323) widthshow 3 FF 257.781921 644.648438 M 0.720596 0 32 ( so that appropriate linkage is generated for them so that the) widthshow 505.238586 644.648438 M 0.720596 0 32 (y can be) widthshow (called by MIG generated stubs.) 180.0 656.648 T 180 667.981689 360 9 CR 1 G 180 667.981689 360 9 NF 0 G 3 FF (/*) 199.224 674.813 T 0.6667 G 530.91 672.48 M 530.91 677.73 L 540 672.48 L 530.91 667.23 L F 530.91 672.48 M 216 672.48 L S 0 0 612 792 CR 0 G 3 FF (File: ) 216.0 683.648 T 0 FF (ooser) 236.84 683.648 T (v) 259.51 683.648 T (er) 264.41 683.648 T (.c) 272.291 683.648 T 3 FF (Original C v) 216.0 693.648 T (ersion by Richard P) 265.85 693.648 T (. Dra) 343.901 693.648 T (v) 363.691 693.648 T (es) 368.541 693.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 75 75 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (71 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 72.0 55.824 T (eaded Object-Oriented Example) 111.339 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 108 114.666626 M 1.17717 0 32 (Sample object-oriented serv) widthshow 222.404434 114.666626 M 1.17717 0 32 (er) widthshow 229.624741 114.666626 M 1.17717 0 32 (. Each object pro) widthshow 300.766357 114.666626 M 1.17717 0 32 (vides a single v) widthshow 365.987976 114.666626 M 1.17717 0 32 (alue that can be) widthshow 72 127.999878 360 9 CR 1 G 72 127.999878 360 9 NF 0 G 3 FF (*/) 90.0 134.826 T 3 SL 0 SC 0.6667 G 117.09 132.5 M 117.09 127.25 L 108 132.5 L 117.09 137.75 L F 432 132.5 M 117.09 132.5 L S 0 0 612 792 CR 0 G 3 FF (set and e) 108.0 124.667 T (xamined.) 142.84 124.667 T ([1]) 87.34 145.667 T (e) 108.0 145.667 T (xtern \322C\323) 112.29 145.667 T ([2]) 87.34 157.666 T ({) 108.0 157.666 T ([3]) 87.34 169.666 T (#include ) 108.0 169.666 T ([4]) 87.34 181.666 T (#include ) 108.0 181.666 T ([5]) 87.34 193.666 T (#include ) 108.0 193.666 T ([6]) 87.34 205.666 T (#include ) 198.26 205.666 T ([7]) 87.34 217.666 T (#include ) 196.12 217.666 T ([8]) 87.34 229.666 T (#include ) 108.0 229.666 T ([9]) 87.34 241.666 T (#include \322cthreads.h\323) 108.0 241.666 T ([10]) 82.34 253.666 T (e) 144.0 253.666 T (xtern k) 148.29 253.666 T (ern_return_t ) 176.24 253.666 T 1 FF (mach_msg_ser) 228.17 253.666 T (v) 291.39 253.666 T (er) 296.29 253.666 T 3 FF ( \(boolean_t \(*\) ) 305.17 253.666 T (\(mach_msg_header_t*, mach_msg_header_t*\), ) 198.0 263.666 T (mach_msg_size_t, mach_port_t\);) 198.0 273.666 T ([11]) 82.34 285.666 T (e) 144.0 285.666 T (xtern k) 148.29 285.666 T (ern_return_t ) 176.24 285.666 T 1 FF (netname_check_in) 228.17 285.666 T 3 FF ( \(mach_port_t, char*, ) 307.61 285.666 T (mach_port_t, mach_port_t\);) 198.0 295.666 T ([12]) 82.34 307.666 T (e) 144.0 307.666 T (xtern v) 148.29 307.666 T (oid quit \(int, ...\);) 176.14 307.666 T ([13]) 82.34 319.666 T (e) 144.0 319.666 T (xtern int atoi \(char*\);) 148.29 319.666 T ([14]) 82.34 331.666 T (e) 144.0 331.666 T (xtern boolean_t ) 148.29 331.666 T 1 FF (ooser) 213.28 331.666 T (v) 235.95 331.666 T (er_ser) 240.85 331.666 T (v) 267.4 331.666 T (er) 272.3 331.666 T 3 FF (\(mach_msg_header_t*, ) 281.18 331.666 T (mach_msg_header_t*\);) 198.0 341.665 T ([15]) 82.34 353.665 T (e) 144.0 353.665 T (xtern boolean_t ) 148.29 353.665 T 1 FF (object_ser) 213.28 353.665 T (v) 257.05 353.665 T (er) 261.95 353.665 T 3 FF (\(mach_msg_header_t*, ) 270.83 353.665 T (mach_msg_header_t*\);) 198.0 363.665 T ([16]) 82.34 375.665 T (typedef long int size_t;) 144.0 375.665 T ([17]) 82.34 387.665 T (e) 144.0 387.665 T (xtern v) 148.29 387.665 T (oid *malloc\(size_t\);) 176.14 387.665 T ([18]) 82.34 399.665 T (e) 144.0 399.665 T (xtern v) 148.29 399.665 T (oid free \(v) 176.14 399.665 T (oid*\);) 217.59 399.665 T ([19]) 82.34 411.665 T (e) 144.0 411.665 T (xtern k) 148.29 411.665 T (ern_return_t ) 176.24 411.665 T 1 FF (do_object_change) 228.17 411.665 T 3 FF (\(mach_port_t ) 304.83 411.665 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (port) 361.21 411.665 T 3 FF (, int ) 377.88 411.665 T 4 FF (value) 395.94 411.665 T 3 FF (\);) 417.6 411.665 T ([20]) 82.34 423.665 T (e) 144.0 423.665 T (xtern k) 148.29 423.665 T (ern_return_t ) 176.24 423.665 T 1 FF (do_object_query) 228.17 423.665 T 3 FF (\(mach_port_t ) 299.83 423.665 T 4 FF (port) 356.21 423.665 T 3 FF (, int *) 372.88 423.665 T 4 FF (valuep) 395.94 423.665 T 3 FF (\);) 422.6 423.665 T ([21]) 82.34 435.665 T (e) 144.0 435.665 T (xtern k) 148.29 435.665 T (ern_return_t ) 176.24 435.665 T 1 FF (do_ooser) 228.17 435.665 T (v) 266.4 435.665 T (er_lookup) 271.3 435.665 T 3 FF (\(mach_port_t ) 314.64 435.665 T 4 FF (server) 371.02 435.665 T 3 FF (, int ) 395.61 435.665 T 4 FF (name) 198.0 445.665 T 3 FF (, mach_port_t *) 219.66 445.665 T 4 FF (portp) 282.71 445.665 T 3 FF (\);) 304.38 445.665 T ([22]) 82.34 457.665 T (}) 108.0 457.665 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Space and Matching P) 72.0 486.998 T (ort Allocator) 186.768 486.998 T 3 FF 72 503.664734 M 0.490677 0 32 (Since the objects maintained by this serv) widthshow 238.114151 503.664734 M 0.490677 0 32 (er will use their object data structure virtual ad-) widthshow 72 515.664673 M 0.912247 0 32 (dress as their recei) widthshow 148.626892 515.664673 M 0.912247 0 32 (ving port right name, memory space and recei) widthshow 338.612793 515.664673 M 0.912247 0 32 (v) widthshow 343.46286 515.664673 M 0.912247 0 32 (e rights are generated) widthshow 72 527.664612 M 1.819153 0 32 (together) widthshow 104.220306 527.664612 M 1.819153 0 32 (. T) widthshow 116.349899 527.664612 M 1.819153 0 32 (o handle the case where a virtual address accidentally collides with a port) widthshow 72 539.664551 M 1.000778 0 32 (name, the general memory allocator \(global ::) widthshow 1 FF 261.024689 539.664551 M 1.000778 0 32 (operator) widthshow 3 FF 298.23468 539.664551 M 1.000778 0 32 ( ) widthshow 1 FF 301.735474 539.664551 M 1.000778 0 32 (new) widthshow 3 FF 318.955475 539.664551 M 1.000778 0 32 (\) is rede\336ned to ensure this) widthshow 72 551.66449 M 1.84227 0 32 (match. The allocator continues to allocate space until it can allocate a matching port) widthshow 72 563.664429 M 1.063309 0 32 (name, then frees an) widthshow 152.790024 563.664429 M 1.063309 0 32 (y e) widthshow 165.643417 563.664429 M 1.063309 0 32 (xtraneous blocks \() widthshow 4 FF 241.090042 563.664429 M 1.063309 0 32 (badobjects) widthshow 3 FF 284.420044 563.664429 M 1.063309 0 32 (\). An) widthshow 305.883423 563.664429 M 1.063309 0 32 (y space freed will probably be) widthshow (usable in the future, as the con\337icting rights in client messages come and go.) 72.0 575.664 T 72 586.997681 360 9 CR 1 G 72 586.997681 360 9 NF 0 G 3 FF (/*) 91.224 593.829 T 0.6667 G 422.91 591.5 M 422.91 596.75 L 432 591.5 L 422.91 586.25 L F 422.91 591.5 M 108 591.5 L S 0 0 612 792 CR 0 G 3 FF 108 602.664307 M 1.069946 0 32 (Allocate a structure and a port together) widthshow 270.089905 602.664307 M 1.069946 0 32 (, so that the structure\325) widthshow 360.75 602.664307 M 1.069946 0 32 (s address and the) widthshow 72 615.997559 360 9 CR 1 G 72 615.997559 360 9 NF 0 G 3 FF (*/) 90.0 622.824 T 0.6667 G 117.09 620.5 M 117.09 615.25 L 108 620.5 L 117.09 625.75 L F 432 620.5 M 117.09 620.5 L S 0 0 612 792 CR 0 G 3 FF (port\325) 108.0 612.664 T (s name are the same) 126.89 612.664 T ([23]) 82.34 633.664 T (static v) 108.0 633.664 T (oid* ::) 136.41 633.664 T 1 FF (operator) 162.25 633.664 T 3 FF ( ) 199.46 633.664 T 1 FF (new ) 201.96 633.664 T 3 FF (\(size_t ) 221.68 633.664 T 4 FF (size) 250.84 633.664 T 3 FF (\)) 265.84 633.664 T ([24]) 82.34 645.664 T ({) 108.0 645.664 T ([25]) 82.34 657.664 T (char *) 144.0 657.664 T 4 FF (badobjects) 288.0 657.664 T 3 FF ( = NULL;) 331.33 657.664 T ([26]) 82.34 669.664 T (char *) 144.0 669.664 T 4 FF (object_p) 288.0 669.664 T 3 FF (;) 322.44 669.664 T ([27]) 82.34 681.664 T (k) 144.0 681.664 T (ern_return_t) 148.9 681.664 T 4 FF (kr) 288.0 681.664 T 3 FF (;) 296.33 681.664 T ([28]) 82.34 693.664 T (for \(;;\)) 144.0 693.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 76 76 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (72 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 180.0 55.824 T (eaded IPC\320Based Ser) 219.339 55.824 T (v) 302.247 55.824 T (ers) 306.657 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([29]) 190.34 112.651 T ({) 252.0 112.651 T ([30]) 190.34 124.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (object_p) 288.0 124.651 T 3 FF ( = \(char*\) malloc\() 322.44 124.651 T 4 FF (size) 395.0 124.651 T 3 FF (\);) 410.0 124.651 T ([31]) 190.34 136.651 T (if \() 288.0 136.651 T 4 FF (object_p) 299.94 136.651 T 3 FF ( == NULL\)) 334.38 136.651 T ([32]) 190.34 148.65 T (quit\(1, \322) 324.0 148.65 T 0 FF (ooser) 357.33 148.65 T (v) 380.0 148.65 T (er) 384.9 148.65 T 3 FF (: malloc f) 393.78 148.65 T (ailed\\n\323\);) 432.01 148.65 T 180 153.983765 360 9 CR 1 G 180 153.983765 360 9 NF 0 G 3 FF (/*) 199.224 160.815 T 3 SL 0.6667 G 530.91 158.48 M 530.91 163.73 L 540 158.48 L 530.91 153.23 L F 530.91 158.48 M 216 158.48 L S 180 172.983704 360 9 CR 1 G 180 172.983704 360 9 NF 0 G 3 FF (*/) 198.0 179.81 T 0.6667 G 225.09 177.48 M 225.09 172.23 L 216 177.48 L 225.09 182.73 L F 540 177.48 M 225.09 177.48 L S 0 0 612 792 CR 0 G 3 FF (T) 288.0 169.65 T (ry to allocate a port with this name) 293.76 169.65 T ([33]) 190.34 190.65 T (kr = ) 288.0 190.65 T 0 FF (mach_port_allocate_name) 306.97 190.65 T 3 FF (\() 419.73 190.65 T 0 FF (mach_task_self) 423.06 190.65 T 3 FF (\(\), ) 488.61 190.65 T (MA) 342.0 200.65 T (CH_POR) 357.71 200.65 T (T_RIGHT_RECEIVE, ) 395.451 200.65 T (\(mach_port_t\) ) 342.0 210.65 T 4 FF (object_p) 401.71 210.65 T 3 FF (\);) 436.15 210.65 T ([34]) 190.34 222.65 T (if \() 288.0 222.65 T 4 FF (kr) 299.94 222.65 T 3 FF ( == KERN_SUCCESS\)) 308.27 222.65 T ([35]) 190.34 234.65 T (break;) 324.0 234.65 T ([36]) 190.34 246.65 T (if \() 288.0 246.65 T 4 FF (kr) 299.94 246.65 T 3 FF ( != KERN_N) 308.27 246.65 T (AME_EXISTS\)) 361.33 246.65 T ([37]) 190.34 258.65 T (quit\(1, \322) 324.0 258.65 T 0 FF (ooser) 357.33 258.65 T (v) 380.0 258.65 T (er) 384.9 258.65 T 3 FF (: ) 393.78 258.65 T 0 FF (mach_port_allocate_name) 399.06 258.65 T 3 FF (: ) 511.82 258.65 T (%s\\n\323, mach_error_string\() 378.0 268.65 T 4 FF (kr) 484.64 268.65 T 3 FF (\)\);) 492.97 268.65 T 180 273.983215 360 9 CR 1 G 180 273.983215 360 9 NF 0 G 3 FF (/*) 199.224 280.814 T 0.6667 G 530.91 278.48 M 530.91 283.73 L 540 278.48 L 530.91 273.23 L F 530.91 278.48 M 216 278.48 L S 180 292.983154 360 9 CR 1 G 180 292.983154 360 9 NF 0 G 3 FF (*/) 198.0 299.809 T 0.6667 G 225.09 297.48 M 225.09 292.23 L 216 297.48 L 225.09 302.73 L F 540 297.48 M 225.09 297.48 L S 0 0 612 792 CR 0 G 3 FF (Sa) 288.0 289.65 T (v) 297.8 289.65 T (e this structure and try ag) 302.65 289.65 T (ain) 403.97 289.65 T ([38]) 190.34 310.65 T (* \(char **\) ) 288.0 310.65 T 4 FF (object_p) 334.37 310.65 T 3 FF ( = ) 368.81 310.65 T 4 FF (badobjects) 379.45 310.65 T 3 FF (;) 422.78 310.65 T ([39]) 190.34 322.65 T 4 FF (badobjects) 288.0 322.65 T 3 FF ( = ) 331.33 322.65 T 4 FF (object_p) 341.97 322.65 T 3 FF (;) 376.41 322.65 T ([40]) 190.34 334.65 T (}) 252.0 334.65 T 180 339.982971 360 9 CR 1 G 180 339.982971 360 9 NF 0 G 3 FF (/*) 199.224 346.814 T 0.6667 G 530.91 344.48 M 530.91 349.73 L 540 344.48 L 530.91 339.23 L F 530.91 344.48 M 216 344.48 L S 180 358.98291 360 9 CR 1 G 180 358.98291 360 9 NF 0 G 3 FF (*/) 198.0 365.809 T 0.6667 G 225.09 363.48 M 225.09 358.23 L 216 363.48 L 225.09 368.73 L F 540 363.48 M 225.09 363.48 L S 0 0 612 792 CR 0 G 3 FF (Free the unused objects) 252.0 355.65 T ([41]) 190.34 376.65 T (while \() 252.0 376.65 T 4 FF (badobjects) 280.05 376.65 T 3 FF ( != NULL\)) 323.38 376.65 T ([42]) 190.34 388.649 T ({) 252.0 388.649 T ([43]) 190.34 400.649 T (char *) 288.0 400.649 T 4 FF (ne) 396.0 400.649 T (xt) 405.24 400.649 T 3 FF ( = * \(char **\) ) 412.46 400.649 T 4 FF (badobjects) 469.47 400.649 T 3 FF (;) 512.8 400.649 T ([44]) 190.34 412.649 T (free\() 288.0 412.649 T 4 FF (badobjects) 306.87 412.649 T 3 FF (\);) 350.2 412.649 T ([45]) 190.34 424.649 T 4 FF (badobjects) 288.0 424.649 T 3 FF ( = ) 331.33 424.649 T 4 FF (ne) 341.97 424.649 T (xt) 351.21 424.649 T 3 FF (;) 358.43 424.649 T ([46]) 190.34 436.649 T (}) 252.0 436.649 T ([47]) 190.34 448.649 T (return \(v) 252.0 448.649 T (oid*\) ) 286.51 448.649 T 4 FF (object_p) 310.12 448.649 T 3 FF (;) 344.56 448.649 T ([48]) 190.34 460.649 T (}) 216.0 460.649 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Object De\336nition) 180.0 489.982 T 3 FF 180 506.648987 M 1.302979 0 32 (The ) widthshow 4 FF 199.352982 506.648987 M 1.302979 0 32 (object) widthshow 3 FF 223.792984 506.648987 M 1.302979 0 32 ( class de\336nes the client visible object. It\325) widthshow 395.124146 506.648987 M 1.302979 0 32 (s de\336nition is di) widthshow 462.963196 506.648987 M 1.302979 0 32 (vided among three) widthshow 180 518.648926 M 0.532639 0 32 (classes \(via inheritance\) that de\336ne data protected by dif) widthshow 409.511292 518.648926 M 0.532639 0 32 (ferent locks supporting dif) widthshow 516.679321 518.648926 M 0.532639 0 32 (ferent) widthshow (le) 180.0 530.649 T (v) 186.97 530.649 T (els of mechanism.) 191.82 530.649 T 180 554.648804 M 1.199188 0 32 (The lo) widthshow 206.779327 554.648804 M 1.199188 0 32 (west le) widthshow 235.778656 554.648804 M 1.199188 0 32 (v) widthshow 240.628738 554.648804 M 1.199188 0 32 (el class, ) widthshow 4 FF 277.187134 554.648804 M 1.199188 0 32 (object_link) widthshow 3 FF 321.627136 554.648804 M 1.199188 0 32 (, de\336nes the \336elds that link an object into the object) widthshow 180 566.648743 M 0.913803 0 32 (list \(friend class ) widthshow 4 FF 249.121414 566.648743 M 0.913803 0 32 (object_list) widthshow 3 FF 290.791412 566.648743 M 0.913803 0 32 (\). These \336elds concern the basic e) widthshow 431.364319 566.648743 M 0.913803 0 32 (xistence and naming of an) widthshow 180 578.648682 M 0.345993 0 32 (object. \(A class parameterized by type of name w) widthshow 380.66803 578.648682 M 0.345993 0 32 (ould probably be used in a more gener-) widthshow 180 590.648621 M 1.061432 0 32 (al e) widthshow 195.071518 590.648621 M 1.061432 0 32 (xample.\) This class de\336nes only a constructor) widthshow 383.92041 590.648621 M 1.061432 0 32 (. All manipulations of these \336elds are) widthshow 180 602.64856 M 0.512466 0 32 (made by the ) widthshow 4 FF 232.917404 602.64856 M 0.512466 0 32 (object_list) widthshow 3 FF 274.587402 602.64856 M 0.512466 0 32 ( class and so the) widthshow 341.477356 602.64856 M 0.512466 0 32 (y are pri) widthshow 375.572449 602.64856 M 0.512466 0 32 (v) widthshow 380.322571 602.64856 M 0.512466 0 32 (ate to the ) widthshow 4 FF 421.019958 602.64856 M 0.512466 0 32 (object_link) widthshow 3 FF 465.459961 602.64856 M 0.512466 0 32 ( class. Since all of) widthshow 180 614.648499 M 0.91922 0 32 (these \336elds concern e) widthshow 268.417755 614.648499 M 0.91922 0 32 (xistence and naming, the) widthshow 370.455505 614.648499 M 0.91922 0 32 (y are protected by the global lock \(in the) widthshow 4 FF 180 626.648438 M 0.480682 0 32 (object_list) widthshow 3 FF 221.669998 626.648438 M 0.480682 0 32 ( class\), another good reason to mak) widthshow 365.814148 626.648438 M 0.480682 0 32 (e them pri) widthshow 407.075684 626.648438 M 0.480682 0 32 (v) widthshow 411.825806 626.648438 M 0.480682 0 32 (ate so deri) widthshow 453.637329 626.648438 M 0.480682 0 32 (v) widthshow 458.487396 626.648438 M 0.480682 0 32 (ed classes can\325) widthshow 518.688843 626.648438 M 0.480682 0 32 (t ma-) widthshow (nipulate them \(since the) 180.0 638.648 T (y don\325) 275.67 638.648 T (t reference the global lock\).) 301.32 638.648 T 180 662.648315 M 0.28392 0 32 (The ) widthshow 4 FF 198.333923 662.648315 M 0.28392 0 32 (object_base) widthshow 3 FF 246.103928 662.648315 M 0.28392 0 32 ( class de\336nes \336elds concerned with controlling and synchronizing opera-) widthshow (tions upon objects. These \336elds are all protected by the object lock, one of the \336elds.) 180.0 674.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 77 77 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (73 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 72.0 55.824 T (eaded Object-Oriented Example) 111.339 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666626 M 0.946609 0 32 (The ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 90.996613 114.666626 M 0.946609 0 32 (object) widthshow 3 FF 115.436615 114.666626 M 0.946609 0 32 ( class, then, only de\336nes the \336elds of interest to the client visible object \(the) widthshow (object\325) 72.0 126.667 T (s v) 99.22 126.667 T (alue\). These \336elds are also protected by the \(inherited as protected\) object lock.) 110.36 126.667 T ([49]) 82.34 144.667 T (class ) 108.0 144.667 T 4 FF (object_list) 129.94 144.667 T 3 FF (;) 171.61 144.667 T 72 149.999817 360 9 CR 1 G 72 149.999817 360 9 NF 0 G 3 FF (/*) 91.224 156.831 T 3 SL 0 SC 0.6667 G 422.91 154.5 M 422.91 159.75 L 432 154.5 L 422.91 149.25 L F 422.91 154.5 M 108 154.5 L S 72 168.999756 360 9 CR 1 G 72 168.999756 360 9 NF 0 G 3 FF (*/) 90.0 175.826 T 0.6667 G 117.09 173.5 M 117.09 168.25 L 108 173.5 L 117.09 178.75 L F 432 173.5 M 117.09 173.5 L S 0 0 612 792 CR 0 G 3 FF (forw) 144.0 165.666 T (ard reference) 162.78 165.666 T 72 196.666382 M 0.750732 0 32 (The ) widthshow 4 FF 90.800735 196.666382 M 0.750732 0 32 (object_link) widthshow 3 FF 135.240738 196.666382 M 0.750732 0 32 ( class de\336nes the name\320port relationship and the linking of the object in) widthshow 72 208.666321 M 0.657837 0 32 (the global list so that a name lookup operation can be done. The name\320port relationship) widthshow 72 220.66626 M 1.323044 0 32 (includes the mak) widthshow 142.316147 220.66626 M 1.323044 0 32 (e-send count used to determine when the object may be unlink) widthshow 405.406677 220.66626 M 1.323044 0 32 (ed \(no) widthshow (more send rights mean that no one continues to care about the object\325) 72.0 232.666 T (s v) 349.18 232.666 T (alue\).) 360.32 232.666 T ([50]) 82.34 250.666 T (class ) 108.0 250.666 T 4 FF (object_link) 129.94 250.666 T 3 FF ([51]) 82.34 262.666 T ({) 108.0 262.666 T ([52]) 82.34 274.666 T (friend class ) 144.0 274.666 T 4 FF (object_list) 192.32 274.666 T 3 FF (;) 233.99 274.666 T ([53]) 82.34 286.666 T (public:) 108.0 286.666 T ([54]) 82.34 298.666 T 1 FF (object_link) 144.0 298.666 T 3 FF ( \(int ) 191.78 298.666 T 4 FF (name) 210.67 298.666 T 3 FF (, ) 232.33 298.666 T 4 FF (object_link) 237.33 298.666 T 3 FF (* ) 281.77 298.666 T 4 FF (ne) 289.27 298.666 T (xt_object) 298.51 298.666 T 3 FF (\);) 335.17 298.666 T ([55]) 82.34 310.666 T (pri) 108.0 310.666 T (v) 118.86 310.666 T (ate:) 123.61 310.666 T 72 315.999146 360 9 CR 1 G 72 315.999146 360 9 NF 0 G 3 FF (/*) 91.224 322.83 T 0.6667 G 422.91 320.5 M 422.91 325.75 L 432 320.5 L 422.91 315.25 L F 422.91 320.5 M 108 320.5 L S 0 0 612 792 CR 0 G 3 FF 108 331.665771 M 0.435638 0 32 (All \336elds are protected by the global lock. The) widthshow 297.69519 331.665771 M 0.435638 0 32 (y are all pri) widthshow 344.572266 331.665771 M 0.435638 0 32 (v) widthshow 349.322388 331.665771 M 0.435638 0 32 (ate since only friend) widthshow 72 344.999023 360 9 CR 1 G 72 344.999023 360 9 NF 0 G 3 FF (*/) 90.0 351.825 T 0.6667 G 117.09 349.5 M 117.09 344.25 L 108 349.5 L 117.09 354.75 L F 432 349.5 M 117.09 349.5 L S 0 0 612 792 CR 0 G 3 FF (class ) 108.0 341.666 T 4 FF (object_list) 129.94 341.666 T 3 FF ( manipulates them.) 171.61 341.666 T ([56]) 82.34 362.666 T 4 FF (object_link) 144.0 362.666 T 3 FF (*) 188.44 362.666 T 4 FF (o_ne) 288.0 362.666 T (xt) 307.24 362.666 T 3 FF (;) 314.46 362.666 T 72 367.998962 360 9 CR 1 G 72 367.998962 360 9 NF 0 G 3 FF (/*) 90.0 374.83 T 0.6667 G 422.91 372.5 M 422.91 377.75 L 432 372.5 L 422.91 367.25 L F 422.91 372.5 M 288 372.5 L S 72 386.998901 360 9 CR 1 G 72 386.998901 360 9 NF 0 G 3 FF (*/) 90.0 393.825 T 0.6667 G 297.09 391.5 M 297.09 386.25 L 288 391.5 L 297.09 396.75 L F 432 391.5 M 297.09 391.5 L S 0 0 612 792 CR 0 G 3 FF (ne) 288.0 383.666 T (xt in list of objects) 297.29 383.666 T ([57]) 82.34 404.666 T (mach_port_t) 144.0 404.666 T 4 FF (o_port) 288.0 404.666 T 3 FF (;) 314.67 404.666 T 72 409.99884 360 9 CR 1 G 72 409.99884 360 9 NF 0 G 3 FF (/*) 90.0 416.83 T 0.6667 G 422.91 414.5 M 422.91 419.75 L 432 414.5 L 422.91 409.25 L F 422.91 414.5 M 288 414.5 L S 72 428.998779 360 9 CR 1 G 72 428.998779 360 9 NF 0 G 3 FF (*/) 90.0 435.825 T 0.6667 G 297.09 433.5 M 297.09 428.25 L 288 433.5 L 297.09 438.75 L F 432 433.5 M 297.09 433.5 L S 0 0 612 792 CR 0 G 3 FF (port representing the object) 288.0 425.665 T ([58]) 82.34 446.665 T (mach_port_mscount_t) 144.0 446.665 T 4 FF (o_mscount) 288.0 446.665 T 3 FF (;) 331.33 446.665 T 72 451.998718 360 9 CR 1 G 72 451.998718 360 9 NF 0 G 3 FF (/*) 90.0 458.83 T 0.6667 G 422.91 456.5 M 422.91 461.75 L 432 456.5 L 422.91 451.25 L F 422.91 456.5 M 288 456.5 L S 72 470.998657 360 9 CR 1 G 72 470.998657 360 9 NF 0 G 3 FF (*/) 90.0 477.825 T 0.6667 G 297.09 475.5 M 297.09 470.25 L 288 475.5 L 297.09 480.75 L F 432 475.5 M 297.09 475.5 L S 0 0 612 792 CR 0 G 3 FF (mak) 288.0 467.665 T (e-send count for the port) 305.12 467.665 T ([59]) 82.34 488.665 T (int) 144.0 488.665 T 4 FF (o_name) 288.0 488.665 T 3 FF (;) 319.66 488.665 T 72 493.998596 360 9 CR 1 G 72 493.998596 360 9 NF 0 G 3 FF (/*) 90.0 500.83 T 0.6667 G 422.91 498.5 M 422.91 503.75 L 432 498.5 L 422.91 493.25 L F 422.91 498.5 M 288 498.5 L S 72 512.998535 360 9 CR 1 G 72 512.998535 360 9 NF 0 G 3 FF (*/) 90.0 519.825 T 0.6667 G 297.09 517.5 M 297.09 512.25 L 288 517.5 L 297.09 522.75 L F 432 517.5 M 297.09 517.5 L S 0 0 612 792 CR 0 G 3 FF (client ID) 288.0 509.665 T ([60]) 82.34 530.665 T (};) 108.0 530.665 T ([61]) 82.34 542.665 T 4 FF (object_link) 108.0 542.665 T 3 FF (::) 152.44 542.665 T 1 FF (object_link) 158.0 542.665 T 3 FF ( \(int ) 205.78 542.665 T 4 FF (name) 224.67 542.665 T 3 FF (, ) 246.33 542.665 T 4 FF (object_link) 251.33 542.665 T 3 FF (* ) 295.77 542.665 T 4 FF (ne) 303.27 542.665 T (xt_object) 312.51 542.665 T 3 FF (\)) 349.17 542.665 T ([62]) 82.34 554.665 T ({) 108.0 554.665 T ([63]) 82.34 566.665 T 4 FF (o_port) 144.0 566.665 T 3 FF ( = \(mach_port_t\) ) 170.67 566.665 T 4 FF (this) 241.02 566.665 T 3 FF (;) 255.47 566.665 T 72 571.998291 360 9 CR 1 G 72 571.998291 360 9 NF 0 G 3 FF (/*) 90.0 578.829 T 0.6667 G 422.91 576.5 M 422.91 581.75 L 432 576.5 L 422.91 571.25 L F 422.91 576.5 M 288 576.5 L S 0 0 612 792 CR 0 G 1 FF 288 587.664917 M 0.527985 0 32 (operator new) widthshow 3 FF 345.458008 587.664917 M 0.527985 0 32 ( allocated a port with) widthshow 72 600.998169 360 9 CR 1 G 72 600.998169 360 9 NF 0 G 3 FF (*/) 90.0 607.824 T 0.6667 G 297.09 605.5 M 297.09 600.25 L 288 605.5 L 297.09 610.75 L F 432 605.5 M 297.09 605.5 L S 0 0 612 792 CR 0 G 4 FF (this) 288.0 597.665 T 3 FF ( name) 302.45 597.665 T ([64]) 82.34 618.665 T 4 FF (o_mscount) 144.0 618.665 T 3 FF ( = 0;) 187.33 618.665 T ([65]) 82.34 630.665 T 4 FF (o_ne) 144.0 630.665 T (xt) 163.24 630.665 T 3 FF ( = ) 170.46 630.665 T 4 FF (ne) 181.1 630.665 T (xt_object) 190.34 630.665 T 3 FF (;) 227.0 630.665 T ([66]) 82.34 642.665 T 4 FF (o_name) 144.0 642.665 T 3 FF ( = ) 175.66 642.665 T 4 FF (name) 186.3 642.665 T 3 FF (;) 207.96 642.665 T ([67]) 82.34 654.665 T (}) 108.0 654.665 T 72 676.664551 M 0.703735 0 32 (The ) widthshow 4 FF 90.753738 676.664551 M 0.703735 0 32 (object_base) widthshow 3 FF 138.523743 676.664551 M 0.703735 0 32 ( class encapsulates the operation-in-progress and object synchronization) widthshow 72 688.66449 M 0.344574 0 32 (mechanisms. Included is a lock on all of these \336elds \(and \336elds in deri) widthshow 357.309631 688.66449 M 0.344574 0 32 (v) widthshow 362.159698 688.66449 M 0.344574 0 32 (ed classes, which) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 78 78 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (74 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 180.0 55.824 T (eaded IPC\320Based Ser) 219.339 55.824 T (v) 302.247 55.824 T (ers) 306.657 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 0.165817 0 32 (is wh) widthshow 201.505844 112.650635 M 0.165817 0 32 (y the lock is protected instead of pri) widthshow 346.006714 112.650635 M 0.165817 0 32 (v) widthshow 350.756836 112.650635 M 0.165817 0 32 (ate\). The ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 389.128479 112.650635 M 0.165817 0 32 (wait) widthshow 3 FF 406.35849 112.650635 M 0.165817 0 32 ( and ) widthshow 4 FF 426.130127 112.650635 M 0.165817 0 32 (seqno) widthshow 3 FF 449.460144 112.650635 M 0.165817 0 32 ( \336elds are used to syn-) widthshow 180 124.650574 M 1.383286 0 32 (chronize the ) widthshow 234.41658 125.650024 9.440002 1 NF 3 FF 234.41658 124.650574 M 1.383286 0 32 (be) widthshow 243.706665 125.650024 30.559998 1 NF 243.706665 124.650574 M 1.383286 0 32 (ginning) widthshow 3 FF 274.266663 124.650574 M 1.383286 0 32 ( of operations; in particular) widthshow 388.27002 124.650574 M 1.383286 0 32 (, to defer the be) widthshow 456.13327 124.650574 M 1.383286 0 32 (ginning of no-more-) widthshow 180 136.650513 M 0.307159 0 32 (senders noti\336cations until all preceding operations ha) widthshow 394.953064 136.650513 M 0.307159 0 32 (v) widthshow 399.803162 136.650513 M 0.307159 0 32 (e obtained a ) widthshow 4 FF 451.544647 136.650513 M 0.307159 0 32 (r) widthshow 455.06485 136.650513 M 0.307159 0 32 (efer) widthshow 470.245056 136.650513 M 0.307159 0 32 (ence) widthshow 3 FF 488.565063 136.650513 M 0.307159 0 32 (. The ) widthshow 4 FF 512.22937 136.650513 M 0.307159 0 32 (alive_-) widthshow 180 148.650452 M 0.446198 0 32 (count) widthshow 3 FF 202.220001 148.650452 M 0.446198 0 32 ( \336eld is a count of references to the object that pre) widthshow 407.108337 148.650452 M 0.446198 0 32 (v) widthshow 411.958435 148.650452 M 0.446198 0 32 (ent the object from being delet-) widthshow 180 160.650391 M 1.449234 0 32 (ed. \(The object can be unlink) widthshow 303.786255 160.650391 M 1.449234 0 32 (ed whene) widthshow 343.025635 160.650391 M 1.449234 0 32 (v) widthshow 347.875702 160.650391 M 1.449234 0 32 (er the send count is zero; the ) widthshow 4 FF 474.940369 160.650391 M 1.449234 0 32 (object_list) widthshow 3 FF 516.610352 160.650391 M 1.449234 0 32 ( class) widthshow 180 172.65033 M 1.389999 0 32 (will do this without obtaining the object lock. The object will not actually be deleted,) widthshow 180 184.650269 M 0.964233 0 32 (though, until the global list reference is remo) widthshow 366.579712 184.650269 M 0.964233 0 32 (v) widthshow 371.42981 184.650269 M 0.964233 0 32 (ed \(when the object is unlink) widthshow 491.971039 184.650269 M 0.964233 0 32 (ed from the) widthshow 180 196.650208 M 0.672791 0 32 (global list\) ) widthshow 226.905579 197.649658 14.440002 1 NF 3 FF 226.905579 196.650208 M 0.672791 0 32 (and) widthshow 3 FF 241.345581 196.650208 M 0.672791 0 32 ( all operations in progress ha) widthshow 359.769653 196.650208 M 0.672791 0 32 (v) widthshow 364.619751 196.650208 M 0.672791 0 32 (e completed. The ali) widthshow 448.038269 196.650208 M 0.672791 0 32 (v) widthshow 452.888336 196.650208 M 0.672791 0 32 (e count records all of) widthshow (these references.\)) 180.0 208.65 T 180 232.650085 M 0.968399 0 32 (The methods de\336ned for the ) widthshow 4 FF 300.10199 232.650085 M 0.968399 0 32 (object_base) widthshow 3 FF 347.872009 232.650085 M 0.968399 0 32 ( class \(aside from the constructor\) add a refer-) widthshow 180 244.650024 M 0.19577 0 32 (ence and remo) widthshow 238.551636 244.650024 M 0.19577 0 32 (v) widthshow 243.401718 244.650024 M 0.19577 0 32 (e a reference. ) widthshow 0 FF 300.059052 244.650024 M 0.19577 0 32 (synchr) widthshow 328.769165 244.650024 M 0.19577 0 32 (onize_and_r) widthshow 381.369263 244.650024 M 0.19577 0 32 (efer) widthshow 397.839355 244.650024 M 0.19577 0 32 (ence) widthshow 3 FF 416.71936 244.650024 M 0.19577 0 32 ( adds a reference; while it is at) widthshow 180 256.649963 M 0.645325 0 32 (it, it synchronizes \(under protection of the object lock and sequence number \336elds\) with) widthshow 180 268.649902 M 0.289917 0 32 (other operations. ) widthshow 0 FF 250.289841 268.649902 M 0.289917 0 32 (is_ali) widthshow 272.419891 268.649902 M 0.289917 0 32 (v) widthshow 277.319946 268.649902 M 0.289917 0 32 (e_and_der) widthshow 322.140045 268.649902 M 0.289917 0 32 (efer) widthshow 338.610168 268.649902 M 0.289917 0 32 (ence) widthshow 3 FF 357.490173 268.649902 M 0.289917 0 32 ( remo) widthshow 380.680176 268.649902 M 0.289917 0 32 (v) widthshow 385.530243 268.649902 M 0.289917 0 32 (es a reference; it also indicates wheth-) widthshow 180 280.649841 M 0.574646 0 32 (er there are an) widthshow 238.484039 280.649841 M 0.574646 0 32 (y remaining references. If there are none, no ne) widthshow 432.201385 280.649841 M 0.574646 0 32 (w references can be added) widthshow 180 292.64978 M 2.007172 0 32 (\(the object is not in the global list so no client can \336nd it and no operations are in) widthshow (progress\) so the object can be deleted.) 180.0 304.65 T 180 328.649658 M 0.754242 0 32 (Although the object is lock) widthshow 291.247009 328.649658 M 0.754242 0 32 (ed for e) widthshow 323.045654 328.649658 M 0.754242 0 32 (v) widthshow 327.895752 328.649658 M 0.754242 0 32 (ery manipulation thereof \(and one of the bene\336ts of) widthshow 180 340.649597 M 0.278625 0 32 (the structure here is that each method in ) widthshow 4 FF 344.419006 340.649597 M 0.278625 0 32 (object_base) widthshow 3 FF 392.189026 340.649597 M 0.278625 0 32 ( and its deri) widthshow 439.715027 340.649597 M 0.278625 0 32 (v) widthshow 444.565125 340.649597 M 0.278625 0 32 (ed class ) widthshow 4 FF 479.00238 340.649597 M 0.278625 0 32 (object) widthshow 3 FF 503.442383 340.649597 M 0.278625 0 32 ( tak) widthshow 518.341064 340.649597 M 0.278625 0 32 (e and) widthshow 180 352.649536 M 0.107605 0 32 (release the object lock\), the object is not held lock) widthshow 381.388519 352.649536 M 0.107605 0 32 (ed from the time that the message is re-) widthshow 180 364.649475 M 0.622635 0 32 (cei) widthshow 191.410141 364.649475 M 0.622635 0 32 (v) widthshow 196.260223 364.649475 M 0.622635 0 32 (ed and synchronized with others to the time that the reply is generated. This is done) widthshow 180 376.649414 M 0.528717 0 32 (here to sho) widthshow 224.687576 376.649414 M 0.528717 0 32 (w the mechanisms when the object is not to be lock) widthshow 435.964813 376.649414 M 0.528717 0 32 (ed for the entire duration.) widthshow 180 388.649353 M 0.701599 0 32 (The alternati) widthshow 231.271744 388.649353 M 0.701599 0 32 (v) widthshow 236.121826 388.649353 M 0.701599 0 32 (e w) widthshow 250.883484 388.649353 M 0.701599 0 32 (ould be to ha) widthshow 304.728394 388.649353 M 0.701599 0 32 (v) widthshow 309.578491 388.649353 M 0.701599 0 32 (e a method that performs object synchronization, return-) widthshow 180 400.649292 M 0.159988 0 32 (ing with the object lock) widthshow 274.980011 400.649292 M 0.159988 0 32 (ed, and another method that unlocks the object. \(Additional meth-) widthshow 180 412.649231 M 3.029968 0 32 (ods w) widthshow 206.540024 412.649231 M 3.029968 0 32 (ould be necessary to handle the global list reference.\) Ha) widthshow 460.769897 412.649231 M 3.029968 0 32 (ving such e) widthshow 512.229919 412.649231 M 3.029968 0 32 (xternal) widthshow 180 424.64917 M 0.337097 0 32 (kno) widthshow 194.750137 424.64917 M 0.337097 0 32 (wledge as to whether the object is lock) widthshow 352.259888 424.64917 M 0.337097 0 32 (ed dif) widthshow 375.397125 424.64917 M 0.337097 0 32 (fers little from the e) widthshow 456.025604 424.64917 M 0.337097 0 32 (xplicit reference ma-) widthshow 180 436.649109 M 0.452271 0 32 (nipulation here. One must be careful holding the lock for the operation duration, though;) widthshow 180 448.649048 M 1.84845 0 32 (the no-more-senders logic w) widthshow 299.585419 448.649048 M 1.84845 0 32 (ould then need to hold both the global and object locks.) widthshow 180 460.648987 M 0.329239 0 32 (Some order w) widthshow 236.658539 460.648987 M 0.329239 0 32 (ould be chosen for these locks \(either obtain the global lock before starting) widthshow 180 472.648926 M 1.868973 0 32 (no-more-senders processing, or after the synchronization and object locking has been) widthshow 180 484.648865 M 0.948639 0 32 (done\); this order must be the same for all other such manipulations \(of which there are) widthshow (currently none\).) 180.0 496.649 T ([68]) 190.34 514.649 T (class ) 216.0 514.649 T 4 FF (object_base) 237.94 514.649 T 3 FF ( : public ) 285.71 514.649 T 4 FF (object_link) 320.99 514.649 T 3 FF ([69]) 190.34 526.649 T ({) 216.0 526.649 T ([70]) 190.34 538.649 T (public:) 216.0 538.649 T ([71]) 190.34 550.649 T 0 FF (object_base) 252.0 550.649 T 3 FF ( \(int ) 301.99 550.649 T 4 FF (name) 320.88 550.649 T 3 FF (, ) 342.54 550.649 T 4 FF (object_link) 347.54 550.649 T 3 FF (* ) 391.98 550.649 T 4 FF (ne) 399.48 550.649 T (xt_object) 408.72 550.649 T 3 FF (\);) 445.38 550.649 T ([72]) 190.34 562.648 T (v) 252.0 562.648 T (oid ) 256.8 562.648 T 0 FF (synchr) 272.08 562.648 T (onize_and_r) 300.79 562.648 T (efer) 353.39 562.648 T (ence) 369.86 562.648 T 3 FF ( \(int ) 388.74 562.648 T 4 FF (seqno) 407.63 562.648 T 3 FF (\);) 430.96 562.648 T ([73]) 190.34 574.648 T (int ) 252.0 574.648 T 0 FF (is_ali) 265.06 574.648 T (v) 287.19 574.648 T (e_and_der) 292.09 574.648 T (efer) 336.91 574.648 T (ence) 353.38 574.648 T 3 FF ( \(\);) 372.26 574.648 T ([74]) 190.34 586.648 T (protected:) 216.0 586.648 T 180 591.981689 360 9 CR 1 G 180 591.981689 360 9 NF 0 G 3 FF (/*) 199.224 598.813 T 3 SL 0.6667 G 530.91 596.48 M 530.91 601.73 L 540 596.48 L 530.91 591.23 L F 530.91 596.48 M 216 596.48 L S 180 610.981628 360 9 CR 1 G 180 610.981628 360 9 NF 0 G 3 FF (*/) 198.0 617.808 T 0.6667 G 225.09 615.48 M 225.09 610.23 L 216 615.48 L 225.09 620.73 L F 540 615.48 M 225.09 615.48 L S 0 0 612 792 CR 0 G 3 FF (All \336elds are protected by the object lock.) 216.0 607.648 T ([75]) 190.34 628.648 T (struct mute) 252.0 628.648 T (x) 296.57 628.648 T 4 FF (o_loc) 396.0 628.648 T (k) 418.02 628.648 T 3 FF (;) 422.46 628.648 T 180 633.981567 360 9 CR 1 G 180 633.981567 360 9 NF 0 G 3 FF (/*) 198.0 640.813 T 0.6667 G 530.91 638.48 M 530.91 643.73 L 540 638.48 L 530.91 633.23 L F 530.91 638.48 M 396 638.48 L S 180 652.981506 360 9 CR 1 G 180 652.981506 360 9 NF 0 G 3 FF (*/) 198.0 659.808 T 0.6667 G 405.09 657.48 M 405.09 652.23 L 396 657.48 L 405.09 662.73 L F 540 657.48 M 405.09 657.48 L S 0 0 612 792 CR 0 G 3 FF (lock for the object) 396.0 649.648 T ([76]) 190.34 670.648 T (pri) 216.0 670.648 T (v) 226.86 670.648 T (ate:) 231.61 670.648 T ([77]) 190.34 682.648 T (struct condition) 252.0 682.648 T 4 FF (o_wait) 396.0 682.648 T 3 FF (;) 423.23 682.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 79 79 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (75 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 72.0 55.824 T (eaded Object-Oriented Example) 111.339 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 72 108 360 9 CR 72 108 360 9 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (/*) 90.0 114.831 T 3 SL 0 SC 0.6667 G 422.91 112.5 M 422.91 117.75 L 432 112.5 L 422.91 107.25 L F 422.91 112.5 M 288 112.5 L S 72 126.999939 360 9 CR 1 G 72 126.999939 360 9 NF 0 G 3 FF (*/) 90.0 133.826 T 0.6667 G 297.09 131.5 M 297.09 126.25 L 288 131.5 L 297.09 136.75 L F 432 131.5 M 297.09 131.5 L S 0 0 612 792 CR 0 G 3 FF (w) 288.0 123.667 T (ait for sequence number) 295.12 123.667 T ([78]) 82.34 144.667 T (mach_port_seqno_t) 144.0 144.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (o_seqno) 288.0 144.667 T 3 FF (;) 321.33 144.667 T 72 149.999878 360 9 CR 1 G 72 149.999878 360 9 NF 0 G 3 FF (/*) 90.0 156.831 T 0.6667 G 422.91 154.5 M 422.91 159.75 L 432 154.5 L 422.91 149.25 L F 422.91 154.5 M 288 154.5 L S 72 168.999817 360 9 CR 1 G 72 168.999817 360 9 NF 0 G 3 FF (*/) 90.0 175.826 T 0.6667 G 297.09 173.5 M 297.09 168.25 L 288 173.5 L 297.09 178.75 L F 432 173.5 M 297.09 173.5 L S 0 0 612 792 CR 0 G 3 FF (sequence number for the port) 288.0 165.667 T ([79]) 82.34 186.666 T (unsigned int) 144.0 186.666 T 4 FF (o_alive_count) 288.0 186.666 T 3 FF (;) 344.66 186.666 T 72 191.999756 360 9 CR 1 G 72 191.999756 360 9 NF 0 G 3 FF (/*) 90.0 198.831 T 0.6667 G 422.91 196.5 M 422.91 201.75 L 432 196.5 L 422.91 191.25 L F 422.91 196.5 M 288 196.5 L S 0 0 612 792 CR 0 G 3 FF 288 207.666382 M 1.527969 0 32 (internal refs\321one for being in the) widthshow 288 217.666321 M 12.602463 0 32 (object list, one for each) widthshow 72 230.999573 360 9 CR 1 G 72 230.999573 360 9 NF 0 G 3 FF (*/) 90.0 237.826 T 0.6667 G 297.09 235.5 M 297.09 230.25 L 288 235.5 L 297.09 240.75 L F 432 235.5 M 297.09 235.5 L S 0 0 612 792 CR 0 G 3 FF (outstanding operation) 288.0 227.666 T ([80]) 82.34 248.666 T (};) 108.0 248.666 T ([81]) 82.34 260.666 T 4 FF (object_base) 108.0 260.666 T 3 FF (::) 155.77 260.666 T 1 FF (object_base) 161.33 260.666 T 3 FF ( \(int ) 211.32 260.666 T 4 FF (name) 230.21 260.666 T 3 FF (, ) 251.87 260.666 T 4 FF (object_link) 256.87 260.666 T 3 FF (* ) 301.31 260.666 T 4 FF (ne) 308.81 260.666 T (xt_object) 318.05 260.666 T 3 FF (\)) 354.71 260.666 T ([82]) 82.34 272.666 T (: ) 108.0 272.666 T 4 FF (object_link) 113.28 272.666 T 3 FF ( \() 157.72 272.666 T 4 FF (name) 163.55 272.666 T 3 FF (, ) 185.21 272.666 T 4 FF (ne) 190.21 272.666 T (xt_object) 199.45 272.666 T 3 FF (\)) 236.11 272.666 T ([83]) 82.34 284.666 T ({) 108.0 284.666 T ([84]) 82.34 296.666 T 4 FF (o_alive_count) 144.0 296.666 T 3 FF ( = 1;) 200.66 296.666 T 72 301.999268 360 9 CR 1 G 72 301.999268 360 9 NF 0 G 3 FF (/*) 90.0 308.83 T 0.6667 G 422.91 306.5 M 422.91 311.75 L 432 306.5 L 422.91 301.25 L F 422.91 306.5 M 288 306.5 L S 0 0 612 792 CR 0 G 3 FF 288 317.665894 M 0.916595 0 32 (One because the object will ha) widthshow 414.853088 317.665894 M 0.916595 0 32 (v) widthshow 419.703186 317.665894 M 0.916595 0 32 (e a) widthshow 72 330.999146 360 9 CR 1 G 72 330.999146 360 9 NF 0 G 3 FF (*/) 90.0 337.825 T 0.6667 G 297.09 335.5 M 297.09 330.25 L 288 335.5 L 297.09 340.75 L F 432 335.5 M 297.09 335.5 L S 0 0 612 792 CR 0 G 3 FF (send right assigned) 288.0 327.666 T ([85]) 82.34 348.666 T 4 FF (o_seqno) 144.0 348.666 T 3 FF ( = 0;) 177.33 348.666 T ([86]) 82.34 360.666 T 1 FF (mutex_init ) 144.0 360.666 T 3 FF (\(&) 192.61 360.666 T 4 FF (o_loc) 203.72 360.666 T (k) 225.74 360.666 T 3 FF (\);) 230.18 360.666 T ([87]) 82.34 372.666 T 1 FF (condition_init ) 144.0 372.666 T 3 FF (\(&) 205.96 372.666 T 4 FF (o_wait) 217.07 372.666 T 3 FF (\);) 244.3 372.666 T ([88]) 82.34 384.666 T (}) 108.0 384.666 T 72 406.665527 M 0.087814 0 32 (The ) widthshow 1 FF 90.137817 406.665527 M 0.087814 0 32 (condition_wait) widthshow 3 FF 153.477814 406.665527 M 0.087814 0 32 ( call belo) widthshow 190.063583 406.665527 M 0.087814 0 32 (w releases the lock \(and re-obtains it\); this is okay) widthshow 391.004272 406.665527 M 0.087814 0 32 (, since be-) widthshow 72 418.665466 M 0.846634 0 32 (fore that we increment the ali) widthshow 193.453323 418.665466 M 0.846634 0 32 (v) widthshow 198.303406 418.665466 M 0.846634 0 32 (e count to indicate our operation in progress, and we ha-) widthshow 72 430.665405 M 1.356308 0 32 (v) widthshow 76.850082 430.665405 M 1.356308 0 32 (en\325) widthshow 89.440186 430.665405 M 1.356308 0 32 (t yet incremented the sequence number indicating that we ha) widthshow 343.897095 430.665405 M 1.356308 0 32 (v) widthshow 348.747192 430.665405 M 1.356308 0 32 (e synchronized with) widthshow (other operations in progress.) 72.0 442.665 T ([89]) 82.34 460.665 T (v) 108.0 460.665 T (oid ) 112.8 460.665 T 4 FF (object_base) 128.08 460.665 T 3 FF (::) 175.85 460.665 T 1 FF (synchr) 181.41 460.665 T (onize_and_r) 210.12 460.665 T (efer) 262.72 460.665 T (ence) 279.19 460.665 T 3 FF ( \(int ) 298.07 460.665 T 4 FF (seqno) 316.96 460.665 T 3 FF (\)) 340.29 460.665 T ([90]) 82.34 472.665 T ({) 108.0 472.665 T ([91]) 82.34 484.665 T 1 FF (mutex_lock) 144.0 484.665 T 3 FF (\(&) 193.44 484.665 T 4 FF (o_loc) 204.55 484.665 T (k) 226.57 484.665 T 3 FF (\);) 231.01 484.665 T ([92]) 82.34 496.665 T 4 FF (o_alive_count) 144.0 496.665 T 3 FF (++;) 200.66 496.665 T 72 501.998413 360 9 CR 1 G 72 501.998413 360 9 NF 0 G 3 FF (/*) 91.224 508.83 T 0.6667 G 422.91 506.5 M 422.91 511.75 L 432 506.5 L 422.91 501.25 L F 422.91 506.5 M 108 506.5 L S 0 0 612 792 CR 0 G 3 FF 144 517.665039 M 0.366776 0 32 (W) widthshow 152.640442 517.665039 M 0.366776 0 32 (e w) widthshow 167.067276 517.665039 M 0.366776 0 32 (ait for an) widthshow 203.750916 517.665039 M 0.366776 0 32 (y pre) widthshow 224.137833 517.665039 M 0.366776 0 32 (vious requests to get this f) widthshow 330.591766 517.665039 M 0.366776 0 32 (ar) widthshow 337.812073 517.665039 M 0.366776 0 32 (. In particular) widthshow 392.295837 517.665039 M 0.366776 0 32 (, we can\325) widthshow 429.219513 517.665039 M 0.366776 0 32 (t) widthshow 144 527.664978 M 0.953247 0 32 (process a no-more-senders noti\336cation for a port while some pre) widthshow 410.329407 527.664978 M 0.953247 0 32 (vious) widthshow 144 537.664917 M 1.177444 0 32 (requests on the port ha) widthshow 239.049896 537.664917 M 1.177444 0 32 (v) widthshow 243.899979 537.664917 M 1.177444 0 32 (en\325) widthshow 256.490082 537.664917 M 1.177444 0 32 (t yet translated the port into an object and) widthshow 72 550.998169 360 9 CR 1 G 72 550.998169 360 9 NF 0 G 3 FF (*/) 90.0 557.824 T 0.6667 G 117.09 555.5 M 117.09 550.25 L 108 555.5 L 117.09 560.75 L F 432 555.5 M 117.09 555.5 L S 0 0 612 792 CR 0 G 3 FF (tak) 144.0 547.665 T (en a reference for the object, incrementing the ) 156.12 547.665 T 4 FF (alive_count) 343.0 547.665 T 3 FF ( count.) 389.66 547.665 T ([93]) 82.34 568.665 T (while \() 144.0 568.665 T 4 FF (o_seqno) 172.05 568.665 T 3 FF ( < ) 205.38 568.665 T 4 FF (seqno) 216.02 568.665 T 3 FF (\)) 239.35 568.665 T ([94]) 82.34 580.665 T 1 FF (condition_wait ) 180.0 580.665 T 3 FF (\(&) 245.84 580.665 T 4 FF (o_wait) 256.95 580.665 T 3 FF (, &) 284.18 580.665 T 4 FF (o_loc) 296.96 580.665 T (k) 318.98 580.665 T 3 FF (\);) 323.42 580.665 T ([95]) 82.34 592.665 T 4 FF (o_seqno) 144.0 592.665 T 3 FF (++;) 177.33 592.665 T ([96]) 82.34 604.665 T 1 FF (mutex_unlock) 144.0 604.665 T 3 FF (\(&) 204.56 604.665 T 4 FF (o_loc) 215.67 604.665 T (k) 237.69 604.665 T 3 FF (\);) 242.13 604.665 T ([97]) 82.34 616.665 T 1 FF (condition_br) 144.0 616.665 T (oadcast) 198.83 616.665 T 3 FF (\(&) 231.05 616.665 T 4 FF (o_wait) 242.16 616.665 T 3 FF (\);) 269.39 616.665 T ([98]) 82.34 628.664 T (}) 108.0 628.664 T ([99]) 82.34 640.664 T (int ) 108.0 640.664 T 4 FF (object_base) 121.06 640.664 T 3 FF (::) 168.83 640.664 T 1 FF (is_ali) 174.39 640.664 T (v) 196.52 640.664 T (e_and_der) 201.42 640.664 T (efer) 246.24 640.664 T (ence) 262.71 640.664 T 3 FF ( \(\)) 281.59 640.664 T ([100]) 77.34 652.664 T ({) 108.0 652.664 T ([101]) 77.34 664.664 T (int) 144.0 664.664 T 4 FF (r) 288.0 664.664 T (efer) 291.52 664.664 T (enced) 306.7 664.664 T 3 FF (;) 330.02 664.664 T ([102]) 77.34 676.664 T 1 FF (mutex_lock) 144.0 676.664 T 3 FF (\(&) 193.44 676.664 T 4 FF (o_loc) 204.55 676.664 T (k) 226.57 676.664 T 3 FF (\);) 231.01 676.664 T ([103]) 77.34 688.664 T 4 FF (r) 144.0 688.664 T (efer) 147.52 688.664 T (enced) 162.7 688.664 T 3 FF ( = \(0 != \320\320) 186.02 688.664 T 4 FF (o_alive_count) 228.96 688.664 T 3 FF (\);) 285.62 688.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 80 80 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (76 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 180.0 55.824 T (eaded IPC\320Based Ser) 219.339 55.824 T (v) 302.247 55.824 T (ers) 306.657 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([104]) 185.34 112.651 T 0 FF (mutex_unlock) 252.0 112.651 T 3 FF (\(&) 312.56 112.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (o_loc) 323.67 112.651 T (k) 345.69 112.651 T 3 FF (\);) 350.13 112.651 T ([105]) 185.34 124.651 T (return ) 252.0 124.651 T 4 FF (r) 278.38 124.651 T (efer) 281.9 124.651 T (enced) 297.08 124.651 T 3 FF (;) 320.4 124.651 T ([106]) 185.34 136.651 T (}) 216.0 136.651 T 180 158.650452 M 1.056595 0 32 (The ) widthshow 4 FF 199.106598 158.650452 M 1.056595 0 32 (object) widthshow 3 FF 223.5466 158.650452 M 1.056595 0 32 ( class has only the object\325) widthshow 331.319885 158.650452 M 1.056595 0 32 (s v) widthshow 343.516602 158.650452 M 1.056595 0 32 (alue to de\336ne. The only methods are the ) widthshow 0 FF 514.99939 158.650452 M 1.056595 0 32 (query) widthshow 3 FF (and ) 180.0 170.65 T 0 FF (change) 196.94 170.65 T 3 FF ( operations. The object lock is held while referencing the object v) 226.94 170.65 T (alue.) 488.86 170.65 T ([107]) 185.34 188.65 T (class ) 216.0 188.65 T 4 FF (object) 237.94 188.65 T 3 FF ( : public ) 262.38 188.65 T 4 FF (object_base) 297.66 188.65 T 3 FF ([108]) 185.34 200.65 T ({) 216.0 200.65 T ([109]) 185.34 212.65 T (public:) 216.0 212.65 T ([110]) 185.34 224.65 T 0 FF (object) 252.0 224.65 T 3 FF ( \(int ) 278.1 224.65 T 4 FF (name) 296.99 224.65 T 3 FF (, ) 318.65 224.65 T 4 FF (object_link) 323.65 224.65 T 3 FF (* ) 368.09 224.65 T 4 FF (ne) 375.59 224.65 T (xt_object) 384.83 224.65 T 3 FF (\);) 421.49 224.65 T ([111]) 185.34 236.65 T (v) 252.0 236.65 T (oid ) 256.8 236.65 T 0 FF (change) 272.08 236.65 T 3 FF ( \(int ) 302.08 236.65 T 4 FF (value) 320.97 236.65 T 3 FF (\);) 342.63 236.65 T ([112]) 185.34 248.65 T (int ) 252.0 248.65 T 0 FF (query) 265.06 248.65 T 3 FF ( \(\);) 290.06 248.65 T ([113]) 185.34 260.65 T (pri) 216.0 260.65 T (v) 226.86 260.65 T (ate:) 231.61 260.65 T 180 265.983276 360 9 CR 1 G 180 265.983276 360 9 NF 0 G 3 FF (/*) 199.224 272.814 T 3 SL 0.6667 G 530.91 270.48 M 530.91 275.73 L 540 270.48 L 530.91 265.23 L F 530.91 270.48 M 216 270.48 L S 180 284.983215 360 9 CR 1 G 180 284.983215 360 9 NF 0 G 3 FF (*/) 198.0 291.809 T 0.6667 G 225.09 289.48 M 225.09 284.23 L 216 289.48 L 225.09 294.73 L F 540 289.48 M 225.09 289.48 L S 0 0 612 792 CR 0 G 3 FF (The follo) 216.0 281.65 T (wing \336elds are protected by the object lock.) 252.69 281.65 T ([114]) 185.34 302.65 T (int) 252.0 302.65 T 4 FF (o_value) 396.0 302.65 T 3 FF (;) 427.66 302.65 T 180 307.983154 360 9 CR 1 G 180 307.983154 360 9 NF 0 G 3 FF (/*) 198.0 314.814 T 0.6667 G 530.91 312.48 M 530.91 317.73 L 540 312.48 L 530.91 307.23 L F 530.91 312.48 M 396 312.48 L S 180 326.983093 360 9 CR 1 G 180 326.983093 360 9 NF 0 G 3 FF (*/) 198.0 333.809 T 0.6667 G 405.09 331.48 M 405.09 326.23 L 396 331.48 L 405.09 336.73 L F 540 331.48 M 405.09 331.48 L S 0 0 612 792 CR 0 G 3 FF (the object\325) 396.0 323.65 T (s v) 437.94 323.65 T (alue) 449.08 323.65 T ([115]) 185.34 344.65 T (};) 216.0 344.65 T ([116]) 185.34 356.65 T 4 FF (object) 216.0 356.65 T 3 FF (::) 240.44 356.65 T 0 FF (object) 246.0 356.65 T 3 FF ( \(int ) 272.1 356.65 T 4 FF (name) 290.99 356.65 T 3 FF (, ) 312.65 356.65 T 4 FF (object_link) 317.65 356.65 T 3 FF (* ) 362.09 356.65 T 4 FF (ne) 369.59 356.65 T (xt_object) 378.83 356.65 T 3 FF (\)) 415.49 356.65 T ([117]) 185.34 368.65 T (: ) 216.0 368.65 T 4 FF (object_base) 221.28 368.65 T 3 FF ( \() 269.05 368.65 T 4 FF (name) 274.88 368.65 T 3 FF (, ) 296.54 368.65 T 4 FF (ne) 301.54 368.65 T (xt_object) 310.78 368.65 T 3 FF (\)) 347.44 368.65 T ([118]) 185.34 380.65 T ({) 216.0 380.65 T ([119]) 185.34 392.649 T 4 FF (o_value) 252.0 392.649 T 3 FF ( = 0;) 283.66 392.649 T ([120]) 185.34 404.649 T (}) 216.0 404.649 T ([121]) 185.34 416.649 T (v) 216.0 416.649 T (oid ) 220.8 416.649 T 4 FF (object) 236.08 416.649 T 3 FF (::) 260.52 416.649 T 0 FF (change) 266.08 416.649 T 3 FF ( \(int ) 296.08 416.649 T 4 FF (value) 314.97 416.649 T 3 FF (\)) 336.63 416.649 T ([122]) 185.34 428.649 T ({) 216.0 428.649 T ([123]) 185.34 440.649 T 0 FF (mutex_lock) 252.0 440.649 T 3 FF (\(&) 301.44 440.649 T 4 FF (o_loc) 312.55 440.649 T (k) 334.57 440.649 T 3 FF (\);) 339.01 440.649 T ([124]) 185.34 452.649 T 4 FF (o_value) 252.0 452.649 T 3 FF ( = ) 283.66 452.649 T 4 FF (value) 294.3 452.649 T 3 FF (;) 315.96 452.649 T ([125]) 185.34 464.649 T 0 FF (mutex_unlock) 252.0 464.649 T 3 FF (\(&) 312.56 464.649 T 4 FF (o_loc) 323.67 464.649 T (k) 345.69 464.649 T 3 FF (\);) 350.13 464.649 T ([126]) 185.34 476.649 T (}) 216.0 476.649 T ([127]) 185.34 488.649 T (int ) 216.0 488.649 T 4 FF (object) 229.06 488.649 T 3 FF (::) 253.5 488.649 T 0 FF (query) 259.06 488.649 T 3 FF ( \(\)) 284.06 488.649 T ([128]) 185.34 500.649 T ({) 216.0 500.649 T ([129]) 185.34 512.649 T (int ) 252.0 512.649 T 4 FF (value) 265.06 512.649 T 3 FF (;) 286.72 512.649 T ([130]) 185.34 524.649 T 0 FF (mutex_lock) 252.0 524.649 T 3 FF (\(&) 301.44 524.649 T 4 FF (o_loc) 312.55 524.649 T (k) 334.57 524.649 T 3 FF (\);) 339.01 524.649 T ([131]) 185.34 536.649 T 4 FF (value) 252.0 536.649 T 3 FF ( = ) 273.66 536.649 T 4 FF (o_value) 284.3 536.649 T 3 FF (;) 315.96 536.649 T ([132]) 185.34 548.649 T 0 FF (mutex_unlock) 252.0 548.649 T 3 FF (\(&) 312.56 548.649 T 4 FF (o_loc) 323.67 548.649 T (k) 345.69 548.649 T 3 FF (\);) 350.13 548.649 T ([133]) 185.34 560.649 T (return ) 252.0 560.649 T 4 FF (value) 278.38 560.649 T 3 FF (;) 300.04 560.649 T ([134]) 185.34 572.649 T (}) 216.0 572.649 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Object List De\336nition) 180.0 601.982 T 3 FF 180 618.648438 M 1.003494 0 32 (The ) widthshow 4 FF 199.053497 618.648438 M 1.003494 0 32 (object_list) widthshow 3 FF 240.723495 618.648438 M 1.003494 0 32 ( class de\336nes the list of object kno) widthshow 384.988098 618.648438 M 1.003494 0 32 (wn to the serv) widthshow 444.228668 618.648438 M 1.003494 0 32 (er) widthshow 451.448975 618.648438 M 1.003494 0 32 (. Its methods concern) widthshow (the e) 180.0 630.648 T (xistence of the objects \(class ) 199.01 630.648 T 4 FF (object) 315.93 630.648 T 3 FF (\).) 340.37 630.648 T 180 654.648315 M 0.564606 0 32 (The ) widthshow 0 FF 198.614609 654.648315 M 0.564606 0 32 widthshow 253.524658 654.648315 M 0.564606 0 32 (e) widthshow 3 FF 257.964661 654.648315 M 0.564606 0 32 ( method locates or creates an object. It can do this using just the glo-) widthshow 180 666.648254 M 1.139328 0 32 (bal lock. If the object e) widthshow 277.746735 666.648254 M 1.139328 0 32 (xists, the method returns a ne) widthshow 400.403503 666.648254 M 1.139328 0 32 (w send right for the object \(using) widthshow 180 678.648193 M 1.247284 0 32 (only \336elds in the ) widthshow 4 FF 254.439133 678.648193 M 1.247284 0 32 (object_link) widthshow 3 FF 298.87915 678.648193 M 1.247284 0 32 ( base class\). If the object doesn\325) widthshow 434.202942 678.648193 M 1.247284 0 32 (t e) widthshow 445.020325 678.648193 M 1.247284 0 32 (xist, it is created. Note) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 81 81 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (77 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 72.0 55.824 T (eaded Object-Oriented Example) 111.339 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666626 M 0.816833 0 32 (that the object lock isn\325) widthshow 168.967438 114.666626 M 0.816833 0 32 (t necessary in such a case because there can be no references to) widthshow (the object and no other thread can \336nd it \(gi) 72.0 126.667 T (v) 247.0 126.667 T (en the holding of the global list lock\).) 251.85 126.667 T 72 150.666504 M 0.242874 0 32 (The ) widthshow 1 FF 90.292877 150.666504 M 0.242874 0 32 (unr) widthshow 105.672974 150.666504 M 0.242874 0 32 (efer) widthshow 122.143082 150.666504 M 0.242874 0 32 (enced_object) widthshow 3 FF 177.68309 150.666504 M 0.242874 0 32 ( method is ef) widthshow 230.101852 150.666504 M 0.242874 0 32 (fecti) widthshow 247.621994 150.666504 M 0.242874 0 32 (v) widthshow 252.472076 150.666504 M 0.242874 0 32 (ely the re) widthshow 289.917969 150.666504 M 0.242874 0 32 (v) widthshow 294.768066 150.666504 M 0.242874 0 32 (erse of ) widthshow 1 FF 324.683807 150.666504 M 0.242874 0 32 widthshow 379.593872 150.666504 M 0.242874 0 32 (e) widthshow 3 FF 384.033875 150.666504 M 0.242874 0 32 (. If success-) widthshow 72 162.666443 M 0.34935 0 32 (ful, it unlinks the object. \(Actual deletion of the object cannot be done with only the glo-) widthshow 72 174.666382 M 1.071503 0 32 (bal lock held\321there may be operations in progress.\) This method contains the logic to) widthshow 72 186.666321 M 0.691605 0 32 (synchronize with the k) widthshow 164.794876 186.666321 M 0.691605 0 32 (ernel\325) widthshow 187.565186 186.666321 M 0.691605 0 32 (s mak) widthshow 211.766846 186.666321 M 0.691605 0 32 (e-send count logic, so the method will not necessarily) widthshow (unlink the object.) 72.0 198.666 T 72 222.666199 M 1.176453 0 32 (The ) widthshow 1 FF 91.226456 222.666199 M 1.176453 0 32 (port_set) widthshow 3 FF 126.216461 222.666199 M 1.176453 0 32 ( method is used simply to return the v) widthshow 286.48822 222.666199 M 1.176453 0 32 (alue of the port set held by the list) widthshow (naming all object ports.) 72.0 234.666 T ([135]) 77.34 252.666 T (class ) 108.0 252.666 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (object_list) 129.94 252.666 T 3 FF ([136]) 77.34 264.666 T ({) 108.0 264.666 T ([137]) 77.34 276.666 T (public:) 108.0 276.666 T ([138]) 77.34 288.666 T 1 FF (object_list) 144.0 288.666 T 3 FF ( \(\);) 187.88 288.666 T ([139]) 77.34 300.666 T (mach_port_t ) 144.0 300.666 T 1 FF 197.05 300.666 T (e) 251.96 300.666 T 3 FF ( \(int ) 256.4 300.666 T 4 FF (name) 275.29 300.666 T 3 FF (\);) 296.95 300.666 T ([140]) 77.34 312.666 T (int ) 144.0 312.666 T 1 FF (unr) 157.06 312.666 T (efer) 172.44 312.666 T (enced_object) 188.91 312.666 T 3 FF ( \() 244.45 312.666 T 4 FF (object_link) 250.28 312.666 T 3 FF (* ) 294.72 312.666 T 4 FF (object_p) 302.22 312.666 T 3 FF (, ) 336.66 312.666 T (mach_port_mscount_t ) 198.0 322.666 T 4 FF (mscount) 289.94 322.666 T 3 FF (\);) 323.27 322.666 T ([141]) 77.34 334.666 T (mach_port_t ) 144.0 334.666 T 1 FF (port_set) 197.05 334.666 T 3 FF ( \(\);) 232.04 334.666 T ([142]) 77.34 346.666 T (pri) 108.0 346.666 T (v) 118.86 346.666 T (ate:) 123.61 346.666 T 72 351.998901 360 9 CR 1 G 72 351.998901 360 9 NF 0 G 3 FF (/*) 91.224 358.83 T 3 SL 0 SC 0.6667 G 422.91 356.5 M 422.91 361.75 L 432 356.5 L 422.91 351.25 L F 422.91 356.5 M 108 356.5 L S 0 0 612 792 CR 0 G 3 FF 108 367.665527 M 0.834961 0 32 (The global lock protects the object list, which implies the e) widthshow 352.569702 367.665527 M 0.834961 0 32 (xistence and names) widthshow 108 377.665466 M 1.243774 0 32 (of objects, including the mscount. Each object has its o) widthshow 339.204102 377.665466 M 1.243774 0 32 (wn lock for its pri) widthshow 415.589355 377.665466 M 1.243774 0 32 (v) widthshow 420.339478 377.665466 M 1.243774 0 32 (ate) widthshow 72 390.998718 360 9 CR 1 G 72 390.998718 360 9 NF 0 G 3 FF (*/) 90.0 397.825 T 0.6667 G 117.09 395.5 M 117.09 390.25 L 108 395.5 L 117.09 400.75 L F 432 395.5 M 117.09 395.5 L S 0 0 612 792 CR 0 G 3 FF 108.0 387.665 T ([143]) 77.34 408.665 T (struct mute) 144.0 408.665 T (x) 188.57 408.665 T 4 FF (g_loc) 288.0 408.665 T (k) 310.02 408.665 T 3 FF (;) 314.46 408.665 T ([144]) 77.34 420.665 T 4 FF (object_link) 144.0 420.665 T 3 FF (*) 188.44 420.665 T 4 FF (g_head) 288.0 420.665 T 3 FF (;) 317.44 420.665 T 72 425.998596 360 9 CR 1 G 72 425.998596 360 9 NF 0 G 3 FF (/*) 90.0 432.83 T 0.6667 G 422.91 430.5 M 422.91 435.75 L 432 430.5 L 422.91 425.25 L F 422.91 430.5 M 288 430.5 L S 72 444.998535 360 9 CR 1 G 72 444.998535 360 9 NF 0 G 3 FF (*/) 90.0 451.825 T 0.6667 G 297.09 449.5 M 297.09 444.25 L 288 449.5 L 297.09 454.75 L F 432 449.5 M 297.09 449.5 L S 0 0 612 792 CR 0 G 3 FF (pointer to \336rst object in list) 288.0 441.665 T ([145]) 77.34 462.665 T (mach_port_t) 144.0 462.665 T 4 FF (g_object_ports) 288.0 462.665 T 3 FF (;) 348.0 462.665 T 72 467.998474 360 9 CR 1 G 72 467.998474 360 9 NF 0 G 3 FF (/*) 90.0 474.83 T 0.6667 G 422.91 472.5 M 422.91 477.75 L 432 472.5 L 422.91 467.25 L F 422.91 472.5 M 288 472.5 L S 72 486.998413 360 9 CR 1 G 72 486.998413 360 9 NF 0 G 3 FF (*/) 90.0 493.825 T 0.6667 G 297.09 491.5 M 297.09 486.25 L 288 491.5 L 297.09 496.75 L F 432 491.5 M 297.09 491.5 L S 0 0 612 792 CR 0 G 3 FF (port set to hold all object ports) 288.0 483.665 T ([146]) 77.34 504.665 T (};) 108.0 504.665 T ([147]) 77.34 516.665 T 4 FF (object_list) 108.0 516.665 T 3 FF (::) 149.67 516.665 T 1 FF (object_list) 155.23 516.665 T 3 FF ( \(\)) 199.11 516.665 T ([148]) 77.34 528.665 T ({) 108.0 528.665 T ([149]) 77.34 540.665 T 1 FF (mutex_init) 144.0 540.665 T 3 FF ( \(&) 190.11 540.665 T 4 FF (g_loc) 203.72 540.665 T (k) 225.74 540.665 T 3 FF (\);) 230.18 540.665 T ([150]) 77.34 552.665 T 4 FF (g_head) 144.0 552.665 T 3 FF ( = NULL;) 173.44 552.665 T 72 557.998108 360 9 CR 1 G 72 557.998108 360 9 NF 0 G 3 FF (/*) 91.224 564.829 T 0.6667 G 422.91 562.5 M 422.91 567.75 L 432 562.5 L 422.91 557.25 L F 422.91 562.5 M 108 562.5 L S 72 576.998047 360 9 CR 1 G 72 576.998047 360 9 NF 0 G 3 FF (*/) 90.0 583.824 T 0.6667 G 117.09 581.5 M 117.09 576.25 L 108 581.5 L 117.09 586.75 L F 432 581.5 M 117.09 581.5 L S 0 0 612 792 CR 0 G 3 FF (Allocate a port set from which serv) 144.0 573.665 T (er threads will recei) 284.93 573.665 T (v) 363.82 573.665 T (e) 368.67 573.665 T ([151]) 77.34 594.665 T (\(v) 144.0 594.665 T (oid\) ) 152.13 594.665 T 1 FF (mach_port_allocate) 170.74 594.665 T 3 FF (\() 255.17 594.665 T 1 FF (mach_task_self) 258.5 594.665 T 3 FF (\(\), ) 324.05 594.665 T (MA) 198.0 604.665 T (CH_POR) 213.71 604.665 T (T_RIGHT_POR) 251.451 604.665 T (T_SET) 316.961 604.665 T (, &) 345.111 604.665 T 4 FF (g_object_ports) 357.891 604.665 T 3 FF (\);) 417.891 604.665 T ([152]) 77.34 616.665 T (}) 108.0 616.665 T 72 638.66449 M 0.15686 0 32 (The structure of the objects and the list allo) widthshow 246.315033 638.66449 M 0.15686 0 32 (ws this method to operate purely with the glo-) widthshow 72 650.664429 M 1.81842 0 32 (bal lock, simply searching the object list for the client supplied name. As mentioned) widthshow 72 662.664368 M 0.486298 0 32 (abo) widthshow 86.290085 662.664368 M 0.486298 0 32 (v) widthshow 91.140167 662.664368 M 0.486298 0 32 (e, it is safe to create a ne) widthshow 192.594406 662.664368 M 0.486298 0 32 (w object here if the desired one is not found, adding its re-) widthshow (cei) 72.0 674.664 T (v) 83.41 674.664 T (e right to the port set and starting the no-more-senders noti\336cation \(race\).) 88.26 674.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 82 82 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (78 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 180.0 55.824 T (eaded IPC\320Based Ser) 219.339 55.824 T (v) 302.247 55.824 T (ers) 306.657 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 2.924347 0 32 (The interesting detail here is the use of ) widthshow 0 FF 361.144775 112.650635 M 2.924347 0 32 (mach_port_insert_right) widthshow 3 FF 463.354797 112.650635 M 2.924347 0 32 ( \(MA) widthshow 487.819366 112.650635 M 2.924347 0 32 (CH_POR) widthshow 525.559692 112.650635 M 2.924347 0 32 (T_-) widthshow 180 124.650574 M 0.468628 0 32 (TYPE_MAKE_SEND\) and the use of MA) widthshow 352.753357 124.650574 M 0.468628 0 32 (CH_POR) widthshow 390.493713 124.650574 M 0.468628 0 32 (T_TYPE_MO) widthshow 447.213989 124.650574 M 0.468628 0 32 (VE_SEND in the MIG) widthshow 180 136.650513 M 0.930786 0 32 (de\336nition for the method \() widthshow 0 FF 289.273132 136.650513 M 0.930786 0 32 (ooser) widthshow 311.943207 136.650513 M 0.930786 0 32 (v) widthshow 316.843262 136.650513 M 0.930786 0 32 (er_lookup) widthshow 3 FF 360.183258 136.650513 M 0.930786 0 32 (\). It w) widthshow 386.104889 136.650513 M 0.930786 0 32 (ould seem that this could be replaced) widthshow 180 148.650452 M 1.729889 0 32 (with the use of MA) widthshow 264.289795 148.650452 M 1.729889 0 32 (CH_POR) widthshow 302.03009 148.650452 M 1.729889 0 32 (T_TYPE_MAKE_SEND in the MIG interf) widthshow 481.609741 148.650452 M 1.729889 0 32 (ace de\336nition.) widthshow 180 160.650391 M 0.26561 0 32 (This replacement f) widthshow 255.411285 160.650391 M 0.26561 0 32 (ails, ho) widthshow 284.317017 160.650391 M 0.26561 0 32 (we) widthshow 295.727173 160.650391 M 0.26561 0 32 (v) widthshow 300.577271 160.650391 M 0.26561 0 32 (er) widthshow 307.947479 160.650391 M 0.26561 0 32 (, in error cases. T) widthshow 377.630371 160.650391 M 0.26561 0 32 (o see this, consider the race between the) widthshow 180 172.65033 M 0.384674 0 32 (time that the global lock is released and the time that the send right w) widthshow 463.035522 172.65033 M 0.384674 0 32 (ould be created via) widthshow 180 184.650269 M 0.645325 0 32 (the send of the reply message. During this time a no-more-senders noti\336cation could ar-) widthshow 180 196.650208 M 0.758698 0 32 (ri) widthshow 185.860138 196.650208 M 0.758698 0 32 (v) widthshow 190.71022 196.650208 M 0.758698 0 32 (e which could delete the object \(and the port\) thereby causing our reply to use an in-) widthshow 180 208.650146 M 0.762634 0 32 (v) widthshow 184.750137 208.650146 M 0.762634 0 32 (alid port \(possibly a port which could be reassigned during that time\). This is wh) widthshow 518.407043 208.650146 M 0.762634 0 32 (y our) widthshow 180 220.650085 M 0.172455 0 32 (mak) widthshow 197.120056 220.650085 M 0.172455 0 32 (e-send count must be incremented here \(under protection of the global lock\). Ho) widthshow 520.259705 220.650085 M 0.172455 0 32 (we) widthshow 531.6698 220.650085 M 0.172455 0 32 (v-) widthshow 180 232.650024 M 0.120544 0 32 (er) widthshow 187.370224 232.650024 M 0.120544 0 32 (, if the reply message \(which w) widthshow 313.243561 232.650024 M 0.120544 0 32 (ould ha) widthshow 342.884216 232.650024 M 0.120544 0 32 (v) widthshow 347.734314 232.650024 M 0.120544 0 32 (e made a send right\) cannot be sent \(such as be-) widthshow 180 244.649963 M 2.961914 0 32 (cause of an in) widthshow 243.745972 244.649963 M 2.961914 0 32 (v) widthshow 248.496109 244.649963 M 2.961914 0 32 (alid reply destination\), ) widthshow 0 FF 350.151855 244.649963 M 2.961914 0 32 (mach_msg_ser) widthshow 413.371918 244.649963 M 2.961914 0 32 (v) widthshow 418.271973 244.649963 M 2.961914 0 32 (er) widthshow 3 FF 427.151978 244.649963 M 2.961914 0 32 ( will destro) widthshow 477.975861 244.649963 M 2.961914 0 32 (y the message) widthshow 180 256.649902 M 0.362427 0 32 (without a send right ha) widthshow 272.909821 256.649902 M 0.362427 0 32 (ving been made \(thereby not incrementing the k) widthshow 467.256897 256.649902 M 0.362427 0 32 (ernel\325) widthshow 490.027191 256.649902 M 0.362427 0 32 (s mak) widthshow 513.899658 256.649902 M 0.362427 0 32 (e-send) widthshow 180 268.649841 M 0.08609 0 32 (count, which must be done so that it matches our count\). As such, we need a w) widthshow 496.507507 268.649841 M 0.08609 0 32 (ay to guar-) widthshow 180 280.64978 M 0.683517 0 32 (antee the generation of the send right, by doing it e) widthshow 390.265259 280.64978 M 0.683517 0 32 (xplicitly) widthshow 422.955627 280.64978 M 0.683517 0 32 (. The use of MA) widthshow 491.109924 280.64978 M 0.683517 0 32 (CH_MSG_-) widthshow 180 292.649719 M 0.336075 0 32 (TYPE_MO) widthshow 225.610275 292.649719 M 0.336075 0 32 (VE_SEND in the reply message not only arranges for the k) widthshow 466.051086 292.649719 M 0.336075 0 32 (ernel to gi) widthshow 507.023376 292.649719 M 0.336075 0 32 (v) widthshow 511.873474 292.649719 M 0.336075 0 32 (e a) widthshow 523.439636 292.649719 M 0.336075 0 32 (w) widthshow 530.559692 292.649719 M 0.336075 0 32 (ay) widthshow 180 304.649658 M 0.215942 0 32 (the right, b) widthshow 223.841995 304.649658 M 0.215942 0 32 (ut it also cues in ) widthshow 0 FF 292.421692 304.649658 M 0.215942 0 32 (mach_msg_ser) widthshow 355.641785 304.649658 M 0.215942 0 32 (v) widthshow 360.541809 304.649658 M 0.215942 0 32 (er) widthshow 3 FF 369.421814 304.649658 M 0.215942 0 32 ( to deallocate the right if the message can-) widthshow (not be sent.) 180.0 316.65 T ([153]) 185.34 334.65 T (mach_port_t ) 216.0 334.65 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (object_list) 269.05 334.65 T 3 FF (::) 310.72 334.65 T 0 FF 316.28 334.65 T (e) 371.19 334.65 T 3 FF ( \(int ) 375.63 334.65 T 4 FF (name) 394.52 334.65 T 3 FF (\)) 416.18 334.65 T ([154]) 185.34 346.649 T ({) 216.0 346.649 T ([155]) 185.34 358.649 T 4 FF (object_link) 252.0 358.649 T 3 FF (*) 296.44 358.649 T 4 FF (object_p) 396.0 358.649 T 3 FF (;) 430.44 358.649 T ([156]) 185.34 370.649 T (mach_port_t) 252.0 370.649 T 4 FF (port) 396.0 370.649 T 3 FF (;) 412.67 370.649 T ([157]) 185.34 382.649 T (k) 252.0 382.649 T (ern_return_t) 256.9 382.649 T 4 FF (kr) 396.0 382.649 T 3 FF (;) 404.33 382.649 T 180 387.982605 360 9 CR 1 G 180 387.982605 360 9 NF 0 G 3 FF (/*) 199.224 394.814 T 3 SL 0.6667 G 530.91 392.48 M 530.91 397.73 L 540 392.48 L 530.91 387.23 L F 530.91 392.48 M 216 392.48 L S 180 406.982544 360 9 CR 1 G 180 406.982544 360 9 NF 0 G 3 FF (*/) 198.0 413.809 T 0.6667 G 225.09 411.48 M 225.09 406.23 L 216 411.48 L 225.09 416.73 L F 540 411.48 M 225.09 411.48 L S 0 0 612 792 CR 0 G 3 FF (W) 252.0 403.649 T (e reference no \336elds here protected by the object lock.) 260.64 403.649 T ([158]) 185.34 424.649 T 0 FF (mutex_lock) 252.0 424.649 T 3 FF (\(&) 301.44 424.649 T 4 FF (g_loc) 312.55 424.649 T (k) 334.57 424.649 T 3 FF (\);) 339.01 424.649 T ([159]) 185.34 436.649 T (for \() 252.0 436.649 T 4 FF (object_p) 269.49 436.649 T 3 FF ( = ) 303.93 436.649 T 4 FF (g_head) 314.57 436.649 T 3 FF (; ) 344.01 436.649 T 4 FF (object_p) 349.29 436.649 T 3 FF ( != NULL; ) 383.73 436.649 T 4 FF (object_p) 429.64 436.649 T 3 FF ( = ) 464.08 436.649 T 4 FF (object_p) 306.0 446.649 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 340.44 446.649 T 4 FF (o_ne) 350.31 446.649 T (xt) 369.55 446.649 T 3 FF (\)) 376.77 446.649 T ([160]) 185.34 458.649 T (if \() 288.0 458.649 T 4 FF (object_p) 299.94 458.649 T 5 FF 334.38 458.649 T 4 FF (o_name) 344.25 458.649 T 3 FF ( == ) 375.91 458.649 T 4 FF (name) 392.19 458.649 T 3 FF (\)) 413.85 458.649 T ([161]) 185.34 470.649 T (break;) 324.0 470.649 T ([162]) 185.34 482.649 T (if \() 252.0 482.649 T 4 FF (object_p) 263.94 482.649 T 3 FF ( == NULL\)) 298.38 482.649 T ([163]) 185.34 494.649 T ({) 252.0 494.649 T ([164]) 185.34 506.649 T (mach_port_t) 288.0 506.649 T 4 FF (pr) 396.0 506.649 T (e) 404.52 506.649 T (vious) 408.81 506.649 T 3 FF (;) 429.92 506.649 T 180 511.982056 360 9 CR 1 G 180 511.982056 360 9 NF 0 G 3 FF (/*) 199.224 518.813 T 0.6667 G 530.91 516.48 M 530.91 521.73 L 540 516.48 L 530.91 511.23 L F 530.91 516.48 M 216 516.48 L S 180 530.981995 360 9 CR 1 G 180 530.981995 360 9 NF 0 G 3 FF (*/) 198.0 537.808 T 0.6667 G 225.09 535.48 M 225.09 530.23 L 216 535.48 L 225.09 540.73 L F 540 535.48 M 225.09 535.48 L S 0 0 612 792 CR 0 G 3 FF (Create a ne) 288.0 527.649 T (w object and port for it) 332.73 527.649 T ([165]) 185.34 548.649 T 4 FF (object_p) 288.0 548.649 T 3 FF ( = ne) 322.44 548.649 T (w ) 342.27 548.649 T 4 FF (object) 351.99 548.649 T 3 FF ( \() 376.43 548.649 T 4 FF (name) 382.26 548.649 T 3 FF (, ) 403.92 548.649 T 4 FF (g_head) 408.92 548.649 T 3 FF (\);) 438.36 548.649 T ([166]) 185.34 560.649 T 4 FF (g_head) 288.0 560.649 T 3 FF ( = ) 317.44 560.649 T 4 FF (object_p) 328.08 560.649 T 3 FF (;) 362.52 560.649 T ([167]) 185.34 572.648 T 4 FF (port) 288.0 572.648 T 3 FF ( = \(mach_port_t\) ) 304.67 572.648 T 4 FF (object_p) 375.02 572.648 T 3 FF (;) 409.46 572.648 T 180 577.981812 360 9 CR 1 G 180 577.981812 360 9 NF 0 G 3 FF (/*) 199.224 584.813 T 0.6667 G 530.91 582.48 M 530.91 587.73 L 540 582.48 L 530.91 577.23 L F 530.91 582.48 M 216 582.48 L S 180 596.98175 360 9 CR 1 G 180 596.98175 360 9 NF 0 G 3 FF (*/) 198.0 603.808 T 0.6667 G 225.09 601.48 M 225.09 596.23 L 216 601.48 L 225.09 606.73 L F 540 601.48 M 225.09 601.48 L S 0 0 612 792 CR 0 G 3 FF (Put the object port into the port set) 288.0 593.648 T ([168]) 185.34 614.648 T 4 FF (kr) 288.0 614.648 T 3 FF ( = ) 296.33 614.648 T 0 FF (mach_port_mo) 306.97 614.648 T (v) 371.86 614.648 T (e_member) 376.76 614.648 T 3 FF (\() 421.74 614.648 T 0 FF (mach_task_self) 425.07 614.648 T 3 FF (\(\), ) 490.62 614.648 T 4 FF (port) 502.28 614.648 T 3 FF (, ) 518.95 614.648 T 4 FF (g_object_ports) 342.0 624.648 T 3 FF (\);) 402.0 624.648 T ([169]) 185.34 636.648 T (if \() 288.0 636.648 T 4 FF (kr) 299.94 636.648 T 3 FF ( != KERN_SUCCESS\)) 308.27 636.648 T ([170]) 185.34 648.648 T (quit\(1, \322) 324.0 648.648 T 0 FF (ooser) 357.33 648.648 T (v) 380.0 648.648 T (er) 384.9 648.648 T 3 FF (: ) 393.78 648.648 T 0 FF (mach_port_mo) 399.06 648.648 T (v) 463.95 648.648 T (e_member) 468.85 648.648 T 3 FF (: ) 513.83 648.648 T (%s\\n\323, mach_error_string\() 378.0 658.648 T 4 FF (kr) 484.64 658.648 T 3 FF (\)\);) 492.97 658.648 T 180 663.981445 360 9 CR 1 G 180 663.981445 360 9 NF 0 G 3 FF (/*) 199.224 670.813 T 0.6667 G 530.91 668.48 M 530.91 673.73 L 540 668.48 L 530.91 663.23 L F 530.91 668.48 M 216 668.48 L S 180 682.981384 360 9 CR 1 G 180 682.981384 360 9 NF 0 G 3 FF (*/) 198.0 689.808 T 0.6667 G 225.09 687.48 M 225.09 682.23 L 216 687.48 L 225.09 692.73 L F 540 687.48 M 225.09 687.48 L S 0 0 612 792 CR 0 G 3 FF (Request the initial no-more-senders noti\336cation) 288.0 679.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 83 83 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (79 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 72.0 55.824 T (eaded Object-Oriented Example) 111.339 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([171]) 77.34 114.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (kr) 180.0 114.667 T 3 FF ( = ) 188.33 114.667 T 1 FF (mach_port_r) 198.97 114.667 T (equest_noti\336cation) 254.89 114.667 T 3 FF (\() 335.45 114.667 T 1 FF (mach_task_self) 338.78 114.667 T 3 FF (\(\), ) 404.33 114.667 T 4 FF (object_p) 234.0 124.667 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 268.44 124.667 T 4 FF (o_port) 278.31 124.667 T 3 FF (, ) 304.98 124.667 T (MA) 234.0 134.667 T (CH_NO) 249.71 134.667 T (TIFY_NO_SENDERS, 1, ) 282.64 134.667 T 4 FF (object_p) 234.0 144.666 T 5 FF 268.44 144.666 T 4 FF (o_port) 278.31 144.666 T 3 FF (, ) 304.98 144.666 T (MA) 234.0 154.666 T (CH_MSG_TYPE_MAKE_SEND_ONCE, ) 249.71 154.666 T (&) 234.0 164.666 T 4 FF (pr) 241.78 164.666 T (e) 250.3 164.666 T (vious) 254.59 164.666 T 3 FF (\);) 275.7 164.666 T ([172]) 77.34 176.666 T (if \(\() 180.0 176.666 T 4 FF (kr) 195.27 176.666 T 3 FF ( != KERN_SUCCESS\) || \() 203.6 176.666 T 4 FF (pr) 308.8 176.666 T (e) 317.32 176.666 T (vious) 321.61 176.666 T 3 FF ( != ) 342.72 176.666 T (MA) 234.0 186.666 T (CH_POR) 249.71 186.666 T (T_NULL\)\)) 287.451 186.666 T ([173]) 77.34 198.666 T (quit\(1, \322) 216.0 198.666 T 1 FF (ooser) 249.33 198.666 T (v) 272.0 198.666 T (er) 276.9 198.666 T 3 FF (: ) 285.78 198.666 T 1 FF (mach_port_r) 270.0 208.666 T (equest_noti\336cation) 325.92 208.666 T 3 FF (: ) 406.48 208.666 T (%s\\n\323, mach_error_string\() 270.0 218.666 T 4 FF (kr) 376.64 218.666 T 3 FF (\)\);) 384.97 218.666 T ([174]) 77.34 230.666 T (}) 144.0 230.666 T ([175]) 77.34 242.666 T 4 FF (object_p) 144.0 242.666 T 5 FF 178.44 242.666 T 4 FF (o_mscount) 188.31 242.666 T 3 FF (++;) 231.64 242.666 T ([176]) 77.34 254.666 T 4 FF (port) 144.0 254.666 T 3 FF ( = ) 160.67 254.666 T 4 FF (object_p) 171.31 254.666 T 5 FF 205.75 254.666 T 4 FF (o_port) 215.62 254.666 T 3 FF (;) 242.29 254.666 T ([177]) 77.34 266.666 T 4 FF (kr) 144.0 266.666 T 3 FF ( = ) 152.33 266.666 T 1 FF (mach_port_insert_right ) 162.97 266.666 T 3 FF (\() 267.68 266.666 T 1 FF (mach_task_self) 271.01 266.666 T 3 FF (\(\), ) 336.56 266.666 T 4 FF (port) 348.22 266.666 T 3 FF (, ) 364.89 266.666 T 4 FF (port) 369.89 266.666 T 3 FF (, ) 386.56 266.666 T (MA) 198.0 276.666 T (CH_MSG_TYPE_MAKE_SEND\);) 213.71 276.666 T ([178]) 77.34 288.666 T (if \() 144.0 288.666 T 4 FF (kr) 155.94 288.666 T 3 FF ( != KERN_SUCCESS\)) 164.27 288.666 T ([179]) 77.34 300.666 T (quit\(1, \322) 180.0 300.666 T 1 FF (ooser) 213.33 300.666 T (v) 236.0 300.666 T (er) 240.9 300.666 T 3 FF (: ) 249.78 300.666 T 1 FF (mach_port_insert_right) 255.06 300.666 T 3 FF (: %s\\n\323, ) 357.27 300.666 T (mach_error_string\() 234.0 310.666 T 4 FF (kr) 311.2 310.666 T 3 FF (\)\);) 319.53 310.666 T ([180]) 77.34 322.665 T 1 FF (mutex_unlock) 144.0 322.665 T 3 FF (\(&) 204.56 322.665 T 4 FF (g_loc) 215.67 322.665 T (k) 237.69 322.665 T 3 FF (\);) 242.13 322.665 T 72 327.998779 360 9 CR 1 G 72 327.998779 360 9 NF 0 G 3 FF (/*) 91.224 334.83 T 3 SL 0 SC 0.6667 G 422.91 332.5 M 422.91 337.75 L 432 332.5 L 422.91 327.25 L F 422.91 332.5 M 108 332.5 L S 0 0 612 792 CR 0 G 3 FF 144 343.665405 M 0.217392 0 32 (It is safe to unlock e) widthshow 225.657104 343.665405 M 0.217392 0 32 (v) widthshow 230.507187 343.665405 M 0.217392 0 32 (erything no) widthshow 276.304718 343.665405 M 0.217392 0 32 (w) widthshow 282.875061 343.665405 M 0.217392 0 32 (, with the port v) widthshow 347.104797 343.665405 M 0.217392 0 32 (alue remaining v) widthshow 414.499695 343.665405 M 0.217392 0 32 (alid,) widthshow 144 353.665344 M 1.28772 0 32 (e) widthshow 148.19014 353.665344 M 1.28772 0 32 (v) widthshow 153.040222 353.665344 M 1.28772 0 32 (en though we ha) widthshow 222.523499 353.665344 M 1.28772 0 32 (v) widthshow 227.373581 353.665344 M 1.28772 0 32 (e not incremented the ) widthshow 4 FF 321.39447 353.665344 M 1.28772 0 32 (alive_count) widthshow 3 FF 368.054474 353.665344 M 1.28772 0 32 ( count, because) widthshow 144 363.665283 M 1.211014 0 32 (no ne) widthshow 166.901154 363.665283 M 1.211014 0 32 (w no-more-senders noti\336cation will be generated gi) widthshow 380.547394 363.665283 M 1.211014 0 32 (v) widthshow 385.397461 363.665283 M 1.211014 0 32 (en our ne) widthshow 424.779663 363.665283 M 1.211014 0 32 (w) widthshow 144 373.665222 M 0.846558 0 32 (send right, and an) widthshow 217.489761 373.665222 M 0.846558 0 32 (y pending no-more-senders noti\336cation will \336nd our) widthshow 144 383.665161 M 0.678787 0 32 (mak) widthshow 161.120056 383.665161 M 0.678787 0 32 (e-send count not matching the k) widthshow 292.454041 383.665161 M 0.678787 0 32 (ernel\325) widthshow 315.224365 383.665161 M 0.678787 0 32 (s since we ha) widthshow 370.10083 383.665161 M 0.678787 0 32 (v) widthshow 374.950928 383.665161 M 0.678787 0 32 (e incremented) widthshow 72 396.998413 360 9 CR 1 G 72 396.998413 360 9 NF 0 G 3 FF (*/) 90.0 403.825 T 0.6667 G 117.09 401.5 M 117.09 396.25 L 108 401.5 L 117.09 406.75 L F 432 401.5 M 117.09 401.5 L S 0 0 612 792 CR 0 G 3 FF (our mscount.) 144.0 393.665 T ([181]) 77.34 414.665 T (return ) 144.0 414.665 T 4 FF (port) 170.38 414.665 T 3 FF (;) 187.05 414.665 T ([182]) 77.34 426.665 T (}) 108.0 426.665 T 72 448.664917 M 0.914261 0 32 (The follo) widthshow 109.604401 448.664917 M 0.914261 0 32 (wing method unlinks the object if there really are no more send rights. Object) widthshow 72 460.664856 M 0.39325 0 32 (deletion doesn\325) widthshow 133.593353 460.664856 M 0.39325 0 32 (t occur until ) widthshow 1 FF 185.603104 460.664856 M 0.39325 0 32 (object_demux) widthshow 3 FF 245.593109 460.664856 M 0.39325 0 32 ( \336nds the last reference remo) widthshow 363.209473 460.664856 M 0.39325 0 32 (v) widthshow 368.05954 460.664856 M 0.39325 0 32 (ed. If the object) widthshow 72 472.664795 M 1.567078 0 32 (is unlink) widthshow 108.197128 472.664795 M 1.567078 0 32 (ed, TR) widthshow 136.584427 472.664795 M 1.567078 0 32 (UE is returned so the caller kno) widthshow 272.377045 472.664795 M 1.567078 0 32 (ws to remo) widthshow 319.80127 472.664795 M 1.567078 0 32 (v) widthshow 324.651367 472.664795 M 1.567078 0 32 (e the global list reference) widthshow 72 484.664734 M 0.266373 0 32 (\(ali) widthshow 85.080139 484.664734 M 0.266373 0 32 (v) widthshow 89.930222 484.664734 M 0.266373 0 32 (e count\) corresponding to being un-link) widthshow 249.752151 484.664734 M 0.266373 0 32 (ed. The caller of this method f) widthshow 372.060455 484.664734 M 0.266373 0 32 (aces no race in) widthshow 72 496.664673 M 0.039215 0 32 (remo) widthshow 92.400085 496.664673 M 0.039215 0 32 (ving the global link reference \(which requires the object lock\) with other threads try-) widthshow 72 508.664612 M 0.807953 0 32 (ing to locate the object \(which requires the global lock\), e) widthshow 310.61969 508.664612 M 0.807953 0 32 (v) widthshow 315.469788 508.664612 M 0.807953 0 32 (en though the caller will not) widthshow 72 520.664551 M 1.073944 0 32 (be holding the global lock when it does, because no ne) widthshow 301.06958 520.664551 M 1.073944 0 32 (w messages will be arri) widthshow 398.985535 520.664551 M 1.073944 0 32 (ving for) widthshow 72 532.66449 M 0.203964 0 32 (this object \(no send rights e) widthshow 183.139908 532.66449 M 0.203964 0 32 (xist\) and the object is unlink) widthshow 297.6698 532.66449 M 0.203964 0 32 (ed. An interesting property of the) widthshow 72 544.664429 M 0.246841 0 32 (program\325) widthshow 108.660309 544.664429 M 0.246841 0 32 (s structure is that there is no place in the program where both the global and ob-) widthshow (ject locks are held at the same time.) 72.0 556.664 T 72 567.997681 360 9 CR 1 G 72 567.997681 360 9 NF 0 G 3 FF (/*) 91.224 574.829 T 0.6667 G 422.91 572.5 M 422.91 577.75 L 432 572.5 L 422.91 567.25 L F 422.91 572.5 M 108 572.5 L S 72 586.99762 360 9 CR 1 G 72 586.99762 360 9 NF 0 G 3 FF (*/) 90.0 593.824 T 0.6667 G 117.09 591.5 M 117.09 586.25 L 108 591.5 L 117.09 596.75 L F 432 591.5 M 117.09 591.5 L S 0 0 612 792 CR 0 G 3 FF (Possibly delete \(unlink\) an object.) 108.0 583.664 T ([183]) 77.34 604.664 T (int ) 108.0 604.664 T 4 FF (object_list) 121.06 604.664 T 3 FF (::) 162.73 604.664 T 1 FF (unr) 168.29 604.664 T (efer) 183.67 604.664 T (enced_object) 200.14 604.664 T 3 FF ( \() 255.68 604.664 T 4 FF (object_link) 261.51 604.664 T 3 FF (* ) 305.95 604.664 T 4 FF (object_p) 313.45 604.664 T 3 FF (, ) 347.89 604.664 T (mach_port_mscount_t ) 162.0 614.664 T 4 FF (mscount) 253.94 614.664 T 3 FF (\)) 287.27 614.664 T ([184]) 77.34 626.664 T ({) 108.0 626.664 T ([185]) 77.34 638.664 T (int) 144.0 638.664 T 4 FF (r) 288.0 638.664 T (esult) 291.52 638.664 T 3 FF ( = F) 310.41 638.664 T (ALSE;) 325.871 638.664 T ([186]) 77.34 650.664 T 1 FF (mutex_lock) 144.0 650.664 T 3 FF (\(&) 193.44 650.664 T 4 FF (g_loc) 204.55 650.664 T (k) 226.57 650.664 T 3 FF (\);) 231.01 650.664 T ([187]) 77.34 662.664 T (if \() 144.0 662.664 T 4 FF (object_p) 155.94 662.664 T 5 FF 190.38 662.664 T 4 FF (o_mscount) 200.25 662.664 T 3 FF ( == ) 243.58 662.664 T 4 FF (mscount) 259.86 662.664 T 3 FF (\)) 293.19 662.664 T ([188]) 77.34 674.664 T ({) 144.0 674.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 84 84 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (80 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 180.0 55.824 T (eaded IPC\320Based Ser) 219.339 55.824 T (v) 302.247 55.824 T (ers) 306.657 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 180 105.984009 360 9 CR 180 105.984009 360 9 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (/*) 199.224 112.815 T 3 SL 0.6667 G 530.91 110.48 M 530.91 115.73 L 540 110.48 L 530.91 105.23 L F 530.91 110.48 M 216 110.48 L S 0 0 612 792 CR 0 G 3 FF 288 121.650635 M 1.268158 0 32 (Since we hold the global lock, no ne) widthshow 442.167236 121.650635 M 1.268158 0 32 (w send rights are being) widthshow 288 131.650574 M 2.874939 0 32 (generated \(that are not re\337ected in our mak) widthshow 480.47467 131.650574 M 2.874939 0 32 (e-send count\).) widthshow 288 141.650513 M 0.356628 0 32 (Thus, we are safe to mark the object dead and unlink it. There) widthshow 288 151.650452 M 1.918716 0 32 (may still be other outstanding operations in progress; when) widthshow 288 161.650391 M 3.28598 0 32 (the last one ends \(probably this one\), the object will be) widthshow 180 174.983643 360 9 CR 1 G 180 174.983643 360 9 NF 0 G 3 FF (*/) 198.0 181.81 T 0.6667 G 225.09 179.48 M 225.09 174.23 L 216 179.48 L 225.09 184.73 L F 540 179.48 M 225.09 179.48 L S 0 0 612 792 CR 0 G 3 FF (deleted \(by ) 288.0 171.65 T 0 FF (object_demux) 335.21 171.65 T 3 FF (\).) 395.2 171.65 T ([189]) 185.34 192.65 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (object_link) 288.0 192.65 T 3 FF (*) 332.44 192.65 T 4 FF (pr) 396.0 192.65 T (e) 404.52 192.65 T (v_object_p) 408.81 192.65 T 3 FF (;) 452.69 192.65 T ([190]) 185.34 204.65 T (if \() 288.0 204.65 T 4 FF (object_p) 299.94 204.65 T 3 FF ( == ) 334.38 204.65 T 4 FF (g_head) 350.66 204.65 T 3 FF (\)) 380.1 204.65 T ([191]) 185.34 216.65 T 4 FF (g_head) 324.0 216.65 T 3 FF ( = ) 353.44 216.65 T 4 FF (object_p) 364.08 216.65 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 398.52 216.65 T 4 FF (o_ne) 408.39 216.65 T (xt) 427.63 216.65 T 3 FF (;) 434.85 216.65 T ([192]) 185.34 228.65 T (else) 288.0 228.65 T ([193]) 185.34 240.65 T ({) 288.0 240.65 T ([194]) 185.34 252.65 T (for \() 324.0 252.65 T 4 FF (pr) 341.49 252.65 T (e) 350.01 252.65 T (v_object_p) 354.3 252.65 T 3 FF ( = ) 398.18 252.65 T 4 FF (g_head) 408.82 252.65 T 3 FF (; ) 438.26 252.65 T 4 FF (pr) 443.54 252.65 T (e) 452.061 252.65 T (v_object_p) 456.351 252.65 T 3 FF ( != ) 500.231 252.65 T (NULL; ) 378.0 262.65 T 4 FF (pr) 409.94 262.65 T (e) 418.46 262.65 T (v_object_p) 422.75 262.65 T 3 FF ( = ) 466.63 262.65 T 4 FF (pr) 378.0 272.65 T (e) 386.52 272.65 T (v_object_p) 390.81 272.65 T 5 FF 434.69 272.65 T 4 FF (o_ne) 444.56 272.65 T (xt) 463.8 272.65 T 3 FF (\)) 471.02 272.65 T ([195]) 185.34 284.65 T (if \() 360.0 284.65 T 4 FF (pr) 371.94 284.65 T (e) 380.46 284.65 T (v_object_p) 384.75 284.65 T 5 FF 428.63 284.65 T 4 FF (o_ne) 438.5 284.65 T (xt) 457.74 284.65 T 3 FF ( == ) 464.96 284.65 T 4 FF (object_p) 481.24 284.65 T 3 FF (\)) 515.68 284.65 T ([196]) 185.34 296.65 T (break;) 396.0 296.65 T ([197]) 185.34 308.65 T (if \() 324.0 308.65 T 4 FF (pr) 335.94 308.65 T (e) 344.46 308.65 T (v_object_p) 348.75 308.65 T 3 FF ( == NULL\)) 392.63 308.65 T ([198]) 185.34 320.65 T (quit\(1, \322) 360.0 320.65 T 0 FF (ooser) 393.33 320.65 T (v) 416.0 320.65 T (er) 420.9 320.65 T 3 FF (: object not in object ) 429.78 320.65 T (list\\n\323\);) 414.0 330.65 T ([199]) 185.34 342.649 T 4 FF (pr) 324.0 342.649 T (e) 332.52 342.649 T (v_object_p) 336.81 342.649 T 5 FF 380.69 342.649 T 4 FF (o_ne) 390.56 342.649 T (xt) 409.8 342.649 T 3 FF ( = ) 417.02 342.649 T 4 FF (object_p) 427.66 342.649 T 5 FF 462.1 342.649 T 4 FF (o_ne) 471.97 342.649 T (xt) 491.211 342.649 T 3 FF (;) 498.431 342.649 T ([200]) 185.34 354.649 T (}) 288.0 354.649 T ([201]) 185.34 366.649 T (\(v) 288.0 366.649 T (oid\) ) 296.13 366.649 T 0 FF (mach_port_mod_r) 314.74 366.649 T (efs) 394.55 366.649 T 3 FF ( \() 406.21 366.649 T 0 FF (mach_task_self) 412.04 366.649 T 3 FF ( \(\), ) 477.59 366.649 T 4 FF (object_p) 342.0 376.649 T 5 FF 376.44 376.649 T 4 FF (o_port) 386.31 376.649 T 3 FF (, ) 412.98 376.649 T (MA) 342.0 386.649 T (CH_POR) 357.71 386.649 T (T_RIGHT_RECEIVE, \3201\);) 395.451 386.649 T ([202]) 185.34 398.649 T 4 FF (object_p) 288.0 398.649 T 5 FF 322.44 398.649 T 4 FF (o_port) 332.31 398.649 T 3 FF ( = MA) 358.98 398.649 T (CH_POR) 385.33 398.649 T (T_NULL;) 423.071 398.649 T ([203]) 185.34 410.649 T 4 FF (r) 288.0 410.649 T (esult) 291.52 410.649 T 3 FF ( = TR) 310.41 410.649 T (UE;) 333.43 410.649 T 180 415.982422 360 9 CR 1 G 180 415.982422 360 9 NF 0 G 3 FF (/*) 198.0 422.814 T 0.6667 G 530.91 420.48 M 530.91 425.73 L 540 420.48 L 530.91 415.23 L F 530.91 420.48 M 396 420.48 L S 180 434.982361 360 9 CR 1 G 180 434.982361 360 9 NF 0 G 3 FF (*/) 198.0 441.809 T 0.6667 G 405.09 439.48 M 405.09 434.23 L 396 439.48 L 405.09 444.73 L F 540 439.48 M 405.09 439.48 L S 0 0 612 792 CR 0 G 3 FF (means object no longer kno) 396.0 431.649 T (wn) 506.29 431.649 T ([204]) 185.34 452.649 T (}) 252.0 452.649 T ([205]) 185.34 464.649 T (else) 252.0 464.649 T ([206]) 185.34 476.649 T ({) 252.0 476.649 T ([207]) 185.34 488.649 T (mach_port_t) 288.0 488.649 T 4 FF (pr) 396.0 488.649 T (e) 404.52 488.649 T (vious) 408.81 488.649 T 3 FF (;) 429.92 488.649 T ([208]) 185.34 500.649 T (k) 288.0 500.649 T (ern_return_t) 292.9 500.649 T 4 FF (kr) 396.0 500.649 T 3 FF (;) 404.33 500.649 T 180 505.982056 360 9 CR 1 G 180 505.982056 360 9 NF 0 G 3 FF (/*) 199.224 512.813 T 0.6667 G 530.91 510.48 M 530.91 515.73 L 540 510.48 L 530.91 505.23 L F 530.91 510.48 M 216 510.48 L S 0 0 612 792 CR 0 G 3 FF 288 521.648682 M 2.89711 0 32 (This means a ) widthshow 0 FF 351.961334 521.648682 M 2.89711 0 32 (do_ooser) widthshow 390.191406 521.648682 M 2.89711 0 32 (v) widthshow 395.091431 521.648682 M 2.89711 0 32 (er_lookup) widthshow 3 FF 438.431458 521.648682 M 2.89711 0 32 ( slipped in and created) widthshow 288 531.648621 M 1.591949 0 32 (another send right for the object, so we shouldn\325) widthshow 494.135712 531.648621 M 1.591949 0 32 (t destro) widthshow 525.347717 531.648621 M 1.591949 0 32 (y it) widthshow 180 544.981873 360 9 CR 1 G 180 544.981873 360 9 NF 0 G 3 FF (*/) 198.0 551.808 T 0.6667 G 225.09 549.48 M 225.09 544.23 L 216 549.48 L 225.09 554.73 L F 540 549.48 M 225.09 549.48 L S 0 0 612 792 CR 0 G 3 FF (yet. W) 288.0 541.649 T (e request another no-more-senders noti\336cation instead.) 313.86 541.649 T ([209]) 185.34 562.648 T 4 FF (kr) 288.0 562.648 T 3 FF ( = ) 296.33 562.648 T 0 FF (mach_port_r) 306.97 562.648 T (equest_noti\336cation) 362.89 562.648 T 3 FF (\() 443.45 562.648 T 0 FF (mach_task_self) 446.78 562.648 T 3 FF (\(\), ) 512.33 562.648 T 4 FF (object_p) 342.0 572.648 T 5 FF 376.44 572.648 T 4 FF (o_port) 386.31 572.648 T 3 FF (, ) 412.98 572.648 T (MA) 342.0 582.648 T (CH_NO) 357.71 582.648 T (TIFY_NO_SENDERS, ) 390.64 582.648 T 4 FF (object_p) 342.0 592.648 T 5 FF 376.44 592.648 T 4 FF (o_mscount) 386.31 592.648 T 3 FF (, ) 429.64 592.648 T 4 FF (object_p) 434.64 592.648 T 5 FF 469.08 592.648 T 4 FF (o_port) 478.95 592.648 T 3 FF (, ) 505.62 592.648 T (MA) 342.0 602.648 T (CH_MSG_TYPE_MAKE_SEND_ONCE, ) 357.71 602.648 T (&) 342.0 612.648 T 4 FF (pr) 349.78 612.648 T (e) 358.3 612.648 T (vious) 362.59 612.648 T 3 FF (\);) 383.7 612.648 T ([210]) 185.34 624.648 T (if \(\() 288.0 624.648 T 4 FF (kr) 303.27 624.648 T 3 FF ( != KERN_SUCCESS\) || \() 311.6 624.648 T 4 FF (pr) 416.8 624.648 T (e) 425.32 624.648 T (vious) 429.61 624.648 T 3 FF ( != ) 450.72 624.648 T (MA) 342.0 634.648 T (CH_POR) 357.71 634.648 T (T_NULL\)\)) 395.451 634.648 T ([211]) 185.34 646.648 T (quit\(1, \322) 324.0 646.648 T 0 FF (ooser) 357.33 646.648 T (v) 380.0 646.648 T (er) 384.9 646.648 T 3 FF (: ) 393.78 646.648 T 0 FF (mach_port_r) 378.0 656.648 T (equest_noti\336cation) 433.92 656.648 T 3 FF (: ) 514.48 656.648 T (%s\\n\323, mach_error_string\() 378.0 666.648 T 4 FF (kr) 484.64 666.648 T 3 FF (\)\);) 492.97 666.648 T ([212]) 185.34 678.648 T (}) 252.0 678.648 T ([213]) 185.34 690.648 T 0 FF (mutex_unlock) 252.0 690.648 T 3 FF (\(&) 312.56 690.648 T 4 FF (g_loc) 323.67 690.648 T (k) 345.69 690.648 T 3 FF (\);) 350.13 690.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 85 85 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (81 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 72.0 55.824 T (eaded Object-Oriented Example) 111.339 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([214]) 77.34 114.667 T (return ) 144.0 114.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (r) 170.38 114.667 T (esult) 173.9 114.667 T 3 FF (;) 192.79 114.667 T ([215]) 77.34 126.667 T (}) 108.0 126.667 T 72 131.999878 360 9 CR 1 G 72 131.999878 360 9 NF 0 G 3 FF (/*) 91.224 138.831 T 3 SL 0 SC 0.6667 G 422.91 136.5 M 422.91 141.75 L 432 136.5 L 422.91 131.25 L F 422.91 136.5 M 108 136.5 L S 72 150.999817 360 9 CR 1 G 72 150.999817 360 9 NF 0 G 3 FF (*/) 90.0 157.826 T 0.6667 G 117.09 155.5 M 117.09 150.25 L 108 155.5 L 117.09 160.75 L F 432 155.5 M 117.09 155.5 L S 0 0 612 792 CR 0 G 3 FF (Return the port set into which all object ports are placed) 108.0 147.667 T ([216]) 77.34 168.666 T (mach_port_t ) 108.0 168.666 T 4 FF (object_list) 161.05 168.666 T 3 FF (::) 202.72 168.666 T 1 FF (port_set) 208.28 168.666 T 3 FF ( \(\)) 243.27 168.666 T ([217]) 77.34 180.666 T ({) 108.0 180.666 T ([218]) 77.34 192.666 T (return ) 144.0 192.666 T 4 FF (g_object_ports) 170.38 192.666 T 3 FF (;) 230.38 192.666 T ([219]) 77.34 204.666 T (}) 108.0 204.666 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (MIG T) 72.0 234.0 T (ar) 107.233 234.0 T (get Routines) 118.441 234.0 T 3 FF 72 250.666153 M 0.095673 0 32 (The follo) widthshow 108.785812 250.666153 M 0.095673 0 32 (wing routines are the actual tar) widthshow 232.664291 250.666153 M 0.095673 0 32 (get routines of the MIG generated stubs, after ini-) widthshow 72 262.666077 M 1.151611 0 32 (tial object reference processing by ) widthshow 1 FF 217.43808 262.666077 M 1.151611 0 32 (object_demux) widthshow 3 FF 277.428101 262.666077 M 1.151611 0 32 (. V) widthshow 290.200012 262.666077 M 1.151611 0 32 (irtually all w) widthshow 343.513306 262.666077 M 1.151611 0 32 (ork is done by object) widthshow (methods.) 72.0 274.666 T ([220]) 77.34 292.666 T (static ) 108.0 292.666 T 4 FF (object_list) 131.61 292.666 T 3 FF (*) 173.28 292.666 T 4 FF (all_objects) 288.0 292.666 T 3 FF (;) 331.89 292.666 T 72 297.999268 360 9 CR 1 G 72 297.999268 360 9 NF 0 G 3 FF (/*) 91.224 304.83 T 0.6667 G 422.91 302.5 M 422.91 307.75 L 432 302.5 L 422.91 297.25 L F 422.91 302.5 M 108 302.5 L S 72 316.999207 360 9 CR 1 G 72 316.999207 360 9 NF 0 G 3 FF (*/) 90.0 323.825 T 0.6667 G 117.09 321.5 M 117.09 316.25 L 108 321.5 L 117.09 326.75 L F 432 321.5 M 117.09 321.5 L S 0 0 612 792 CR 0 G 3 FF (pointer to the global object list) 144.0 313.666 T ([221]) 77.34 334.666 T (k) 108.0 334.666 T (ern_return_t ) 112.9 334.666 T 1 FF (do_object_change) 164.83 334.666 T 3 FF ( \(mach_port_t ) 241.49 334.666 T 4 FF (port) 300.37 334.666 T 3 FF (, int ) 317.04 334.666 T 4 FF (value) 335.1 334.666 T 3 FF (\)) 356.76 334.666 T ([222]) 77.34 346.666 T ({) 108.0 346.666 T ([223]) 77.34 358.666 T 4 FF (object) 144.0 358.666 T 3 FF (*) 168.44 358.666 T 4 FF (object_p) 288.0 358.666 T 3 FF ( = \() 322.44 358.666 T 4 FF (object) 336.41 358.666 T 3 FF (*\) ) 360.85 358.666 T 4 FF (port) 371.68 358.666 T 3 FF (;) 388.35 358.666 T ([224]) 77.34 370.666 T 4 FF (object_p) 144.0 370.666 T 6 (Symbol) 10 1 mymakefontmetric 6 FF 178.44 370.666 T 1 FF (change) 188.31 370.666 T 3 FF ( \() 218.31 370.666 T 4 FF (value) 224.14 370.666 T 3 FF (\);) 245.8 370.666 T ([225]) 77.34 382.666 T (return KERN_SUCCESS;) 144.0 382.666 T ([226]) 77.34 394.666 T (}) 108.0 394.666 T ([227]) 77.34 406.665 T (k) 108.0 406.665 T (ern_return_t ) 112.9 406.665 T 1 FF (do_object_query) 164.83 406.665 T 3 FF (\(mach_port_t ) 236.49 406.665 T 4 FF (port) 292.87 406.665 T 3 FF (, int *) 309.54 406.665 T 4 FF (valuep) 332.6 406.665 T 3 FF (\)) 359.26 406.665 T ([228]) 77.34 418.665 T ({) 108.0 418.665 T ([229]) 77.34 430.665 T 4 FF (object) 144.0 430.665 T 3 FF (*) 168.44 430.665 T ( ) 288.0 430.665 T 4 FF (object_p) 290.5 430.665 T 3 FF ( = \() 324.94 430.665 T 4 FF (object) 338.91 430.665 T 3 FF (*\) ) 363.35 430.665 T 4 FF (port) 374.18 430.665 T 3 FF (;) 390.85 430.665 T ([230]) 77.34 442.665 T (*) 144.0 442.665 T 4 FF (valuep) 149.0 442.665 T 3 FF ( = ) 175.66 442.665 T 4 FF (object_p) 186.3 442.665 T 6 FF 220.74 442.665 T 1 FF (query) 230.61 442.665 T 3 FF (\(\);) 255.61 442.665 T ([231]) 77.34 454.665 T (return KERN_SUCCESS;) 144.0 454.665 T ([232]) 77.34 466.665 T (}) 108.0 466.665 T ([233]) 77.34 478.665 T (k) 108.0 478.665 T (ern_return_t ) 112.9 478.665 T 1 FF (do_ooser) 164.83 478.665 T (v) 203.06 478.665 T (er_lookup) 207.96 478.665 T 3 FF (\(mach_port_t ) 251.3 478.665 T 4 FF (server) 307.68 478.665 T 3 FF (, int ) 332.27 478.665 T 4 FF (name) 350.33 478.665 T 3 FF (, mach_port_t ) 371.99 478.665 T (*) 162.0 488.665 T 4 FF (portp) 167.0 488.665 T 3 FF (\)) 188.67 488.665 T ([234]) 77.34 500.665 T ({) 108.0 500.665 T ([235]) 77.34 512.665 T (*) 144.0 512.665 T 4 FF (portp) 149.0 512.665 T 3 FF ( = ) 170.67 512.665 T 4 FF (all_objects) 181.31 512.665 T 6 FF 225.2 512.665 T 1 FF 235.07 512.665 T (e) 289.98 512.665 T 3 FF ( \() 294.42 512.665 T 4 FF (name) 300.25 512.665 T 3 FF (\);) 321.91 512.665 T ([236]) 77.34 524.665 T (return KERN_SUCCESS;) 144.0 524.665 T ([237]) 77.34 536.665 T (}) 108.0 536.665 T 5 FF (Object Refer) 72.0 565.998 T (ence Pr) 138.084 565.998 T (ocessing) 176.184 565.998 T 3 FF 72 582.664673 M 0.204575 0 32 (The ) widthshow 1 FF 90.254578 582.664673 M 0.204575 0 32 (object_demux) widthshow 3 FF 150.244583 582.664673 M 0.204575 0 32 ( routine brack) widthshow 206.093796 582.664673 M 0.204575 0 32 (ets all incoming operations on an object so as to proper-) widthshow 72 594.664673 M 1.24176 0 32 (ly maintain the ) widthshow 4 FF 138.225281 594.664673 M 1.24176 0 32 (alive_count) widthshow 3 FF 184.885284 594.664673 M 1.24176 0 32 ( count. Note that a no-more-senders noti\336cation, which can) widthshow 72 606.664551 M 0.537292 0 32 (be vie) widthshow 96.447433 606.664551 M 0.537292 0 32 (wed as an operation on the global list, is still object speci\336c and must synchronize) widthshow (with all other operations on an object \(to pre) 72.0 618.665 T (v) 249.5 618.665 T (ent premature unlinking of the object\).) 254.35 618.665 T ([238]) 77.34 636.664 T (static boolean_t ) 108.0 636.664 T 1 FF (object_demux) 173.55 636.664 T 3 FF (\(mach_msg_header_t *) 233.54 636.664 T 4 FF (r) 327.13 636.664 T (equest) 330.65 636.664 T 3 FF (, ) 356.2 636.664 T (mach_msg_header_t *) 162.0 646.664 T 4 FF (r) 252.26 646.664 T (eply) 255.78 646.664 T 3 FF (\)) 272.44 646.664 T ([239]) 77.34 658.664 T ({) 108.0 658.664 T ([240]) 77.34 670.664 T 4 FF (object) 144.0 670.664 T 3 FF (*) 168.44 670.664 T 4 FF (object_p) 288.0 670.664 T 3 FF (;) 322.44 670.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 86 86 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (82 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 180.0 55.824 T (eaded IPC\320Based Ser) 219.339 55.824 T (v) 302.247 55.824 T (ers) 306.657 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 180 105.984009 360 9 CR 180 105.984009 360 9 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (/*) 199.224 112.815 T 3 SL 0.6667 G 530.91 110.48 M 530.91 115.73 L 540 110.48 L 530.91 105.23 L F 530.91 110.48 M 216 110.48 L S 180 124.983948 360 9 CR 1 G 180 124.983948 360 9 NF 0 G 3 FF (*/) 198.0 131.81 T 0.6667 G 225.09 129.48 M 225.09 124.23 L 216 129.48 L 225.09 134.73 L F 540 129.48 M 225.09 129.48 L S 0 0 612 792 CR 0 G 3 FF (T) 252.0 121.651 T (ranslate the port into an object) 257.76 121.651 T ([241]) 185.34 142.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (object_p) 252.0 142.651 T 3 FF ( = \() 286.44 142.651 T 4 FF (object) 300.41 142.651 T 3 FF (*\)) 324.85 142.651 T 4 FF ( r) 333.18 142.651 T (equest) 339.2 142.651 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 364.75 142.651 T 4 FF (msgh_local_port) 374.62 142.651 T 3 FF (;) 442.4 142.651 T 180 147.983887 360 9 CR 1 G 180 147.983887 360 9 NF 0 G 3 FF (/*) 199.224 154.815 T 0.6667 G 530.91 152.48 M 530.91 157.73 L 540 152.48 L 530.91 147.23 L F 530.91 152.48 M 216 152.48 L S 0 0 612 792 CR 0 G 3 FF 252 163.650513 M 3.446655 0 32 (It is not necessary to hold the global lock here to maintain the) widthshow 252 173.650452 M 1.517639 0 32 (e) widthshow 256.2901 173.650452 M 1.517639 0 32 (xistence of the object while we try to lock it. W) widthshow 460.916931 173.650452 M 1.517639 0 32 (e can\325) widthshow 486.404663 173.650452 M 1.517639 0 32 (t possibly be) widthshow 252 183.650391 M 2.851791 0 32 (racing with some other thread trying to delete the object \(that is,) widthshow 252 193.65033 M 0.954208 0 32 (processing a no-more-senders noti\336cation\) because the strict sequence) widthshow 252 203.650269 M 0.303604 0 32 (number ordering of these messages \(the same port is used for no-more-) widthshow 252 213.650208 M 0.805969 0 32 (senders as well as client requests\) means that no-more-senders will be) widthshow 252 223.650146 M 0.562469 0 32 (deferred \(not started\) until the other requests \(such as this one\) ha) widthshow 520.427307 223.650146 M 0.562469 0 32 (v) widthshow 525.277405 223.650146 M 0.562469 0 32 (e at) widthshow 180 236.983398 360 9 CR 1 G 180 236.983398 360 9 NF 0 G 3 FF (*/) 198.0 243.81 T 0.6667 G 225.09 241.48 M 225.09 236.23 L 216 241.48 L 225.09 246.73 L F 540 241.48 M 225.09 241.48 L S 0 0 612 792 CR 0 G 3 FF (least started \(thereby obtaining a reference\).) 252.0 233.65 T ([242]) 185.34 254.65 T 4 FF (object_p) 252.0 254.65 T 5 FF 286.44 254.65 T 0 FF (synchr) 296.31 254.65 T (onize_and_r) 325.02 254.65 T (efer) 377.62 254.65 T (ence) 394.09 254.65 T 3 FF ( \() 412.97 254.65 T 4 FF (r) 418.8 254.65 T (equest) 422.321 254.65 T 5 FF 447.871 254.65 T 4 FF (msgh_seqno) 457.741 254.65 T 3 FF (\);) 507.181 254.65 T 180 259.983337 360 9 CR 1 G 180 259.983337 360 9 NF 0 G 3 FF (/*) 199.224 266.815 T 0.6667 G 530.91 264.48 M 530.91 269.73 L 540 264.48 L 530.91 259.23 L F 530.91 264.48 M 216 264.48 L S 0 0 612 792 CR 0 G 3 FF 252 275.649963 M 2.976105 0 32 (If this message w) widthshow 330.538391 275.649963 M 2.976105 0 32 (as sent to a send-once right, then it must be a) widthshow 252 285.649902 M 3.556473 0 32 (le) widthshow 259.070068 285.649902 M 3.556473 0 32 (gitimate no-more-senders noti\336cation. \(W) widthshow 437.249939 285.649902 M 3.556473 0 32 (e gi) widthshow 455.27655 285.649902 M 3.556473 0 32 (v) widthshow 460.126648 285.649902 M 3.556473 0 32 (e send-once rights) widthshow 180 298.983154 360 9 CR 1 G 180 298.983154 360 9 NF 0 G 3 FF (*/) 198.0 305.809 T 0.6667 G 225.09 303.48 M 225.09 298.23 L 216 303.48 L 225.09 308.73 L F 540 303.48 M 225.09 303.48 L S 0 0 612 792 CR 0 G 3 FF (only to the k) 252.0 295.65 T (ernel.\) Otherwise use ) 302.18 295.65 T 0 FF (object_ser) 389.93 295.65 T (v) 433.7 295.65 T (er) 438.6 295.65 T 3 FF (, passing the object.) 447.08 295.65 T ([243]) 185.34 316.65 T (if \(MA) 252.0 316.65 T (CH_MSGH_BITS_LOCAL\() 279.65 316.65 T 4 FF (r) 395.76 316.65 T (equest) 399.28 316.65 T 5 FF 424.83 316.65 T 4 FF (msgh_bits) 434.7 316.65 T 3 FF (\) == ) 475.26 316.65 T (MA) 306.0 326.65 T (CH_MSG_TYPE_POR) 321.71 326.65 T (T_SEND_ONCE\)) 416.121 326.65 T ([244]) 185.34 338.65 T ({) 252.0 338.65 T ([245]) 185.34 350.65 T (mach_no_senders_noti\336cation_t *) 288.0 350.65 T 4 FF (n) 425.49 350.65 T 3 FF ( = ) 430.49 350.65 T (\(mach_no_senders_noti\336cation_t *\) ) 342.0 360.65 T 4 FF (r) 488.65 360.65 T (equest) 492.17 360.65 T 3 FF (;) 517.72 360.65 T ([246]) 185.34 372.649 T (mig_reply_header_t *) 288.0 372.649 T 4 FF (r) 396.0 372.649 T 3 FF ( = \(mig_reply_header_t *\) ) 399.89 372.649 T 4 FF (r) 507.73 372.649 T (eply) 511.25 372.649 T 3 FF (;) 527.91 372.649 T 180 377.982788 360 9 CR 1 G 180 377.982788 360 9 NF 0 G 3 FF (/*) 199.224 384.814 T 0.6667 G 530.91 382.48 M 530.91 387.73 L 540 382.48 L 530.91 377.23 L F 530.91 382.48 M 216 382.48 L S 180 396.982727 360 9 CR 1 G 180 396.982727 360 9 NF 0 G 3 FF (*/) 198.0 403.809 T 0.6667 G 225.09 401.48 M 225.09 396.23 L 216 401.48 L 225.09 406.73 L F 540 401.48 M 225.09 401.48 L S 0 0 612 792 CR 0 G 3 FF (Handle the noti\336cation) 288.0 393.649 T ([247]) 185.34 414.649 T (if \() 288.0 414.649 T 4 FF (all_objects) 299.94 414.649 T 5 FF 343.83 414.649 T 0 FF (unr) 353.7 414.649 T (efer) 369.08 414.649 T (enced_object) 385.55 414.649 T 3 FF ( \() 441.09 414.649 T 4 FF (object_p) 446.92 414.649 T 3 FF (, ) 481.36 414.649 T 4 FF (n) 342.0 424.649 T 5 FF 347.0 424.649 T 4 FF (not_count) 356.87 424.649 T 3 FF (\)\)) 396.87 424.649 T ([248]) 185.34 436.649 T (\(v) 324.0 436.649 T (oid\) ) 332.13 436.649 T 4 FF (object_p) 350.74 436.649 T 5 FF 385.18 436.649 T 0 FF (is_ali) 395.05 436.649 T (v) 417.18 436.649 T (e_and_der) 422.08 436.649 T (efer) 466.9 436.649 T (ence) 483.37 436.649 T 3 FF ( \(\);) 502.25 436.649 T 180 441.982544 360 9 CR 1 G 180 441.982544 360 9 NF 0 G 3 FF (/*) 198.0 448.814 T 0.6667 G 530.91 446.48 M 530.91 451.73 L 540 446.48 L 530.91 441.23 L F 530.91 446.48 M 396 446.48 L S 180 460.982483 360 9 CR 1 G 180 460.982483 360 9 NF 0 G 3 FF (*/) 198.0 467.809 T 0.6667 G 405.09 465.48 M 405.09 460.23 L 396 465.48 L 405.09 470.73 L F 540 465.48 M 405.09 465.48 L S 0 0 612 792 CR 0 G 3 FF (remo) 396.0 457.649 T (v) 416.4 457.649 T (e global reference) 421.25 457.649 T 180 471.982483 360 9 CR 1 G 180 471.982483 360 9 NF 0 G 3 FF (/*) 199.224 478.814 T 0.6667 G 530.91 476.48 M 530.91 481.73 L 540 476.48 L 530.91 471.23 L F 530.91 476.48 M 216 476.48 L S 0 0 612 792 CR 0 G 3 FF 288 487.649109 M 2.929871 0 32 (T) widthshow 293.4104 487.649109 M 2.929871 0 32 (ell ) widthshow 0 FF 308.840271 487.649109 M 2.929871 0 32 (mach_msg_ser) widthshow 372.060303 487.649109 M 2.929871 0 32 (v) widthshow 376.960388 487.649109 M 2.929871 0 32 (er) widthshow 3 FF 385.840393 487.649109 M 2.929871 0 32 ( not to send a reply) widthshow 476.220093 487.649109 M 2.929871 0 32 (. we need this) widthshow 180 500.982361 360 9 CR 1 G 180 500.982361 360 9 NF 0 G 3 FF (*/) 198.0 507.809 T 0.6667 G 225.09 505.48 M 225.09 500.23 L 216 505.48 L 225.09 510.73 L F 540 505.48 M 225.09 505.48 L S 0 0 612 792 CR 0 G 3 FF (because we didn\325) 288.0 497.649 T (t use ) 357.24 497.649 T 0 FF (notify_ser) 378.35 497.649 T (v) 421.02 497.649 T (er) 425.92 497.649 T 3 FF (\(\)) 434.8 497.649 T ([249]) 185.34 518.649 T 4 FF (r) 288.0 518.649 T 5 FF 291.89 518.649 T 4 FF (Head) 301.76 518.649 T 3 FF (.) 323.42 518.649 T 4 FF (msgh_bits) 325.92 518.649 T 3 FF ( = 0;) 366.48 518.649 T ([250]) 185.34 530.649 T 4 FF (r) 288.0 530.649 T 5 FF 291.89 530.649 T 4 FF (Head) 301.76 530.649 T 3 FF (.) 323.42 530.649 T 4 FF (msgh_r) 325.92 530.649 T (emote_port) 355.55 530.649 T 3 FF ( = MA) 401.1 530.649 T (CH_POR) 427.45 530.649 T (T_NULL;) 465.191 530.649 T ([251]) 185.34 542.649 T 4 FF (r) 288.0 542.649 T 5 FF 291.89 542.649 T 4 FF (RetCode) 301.76 542.649 T 3 FF ( = KERN_SUCCESS;) 336.2 542.649 T ([252]) 185.34 554.649 T (}) 252.0 554.649 T ([253]) 185.34 566.649 T (else) 252.0 566.649 T ([254]) 185.34 578.649 T (\(v) 288.0 578.649 T (oid\) ) 296.13 578.649 T 0 FF (object_ser) 314.74 578.649 T (v) 358.51 578.649 T (er ) 363.41 578.649 T 3 FF (\() 374.79 578.649 T 4 FF (r) 378.12 578.649 T (equest) 381.64 578.649 T 3 FF (, ) 407.19 578.649 T 4 FF (r) 412.19 578.649 T (eply) 415.711 578.649 T 3 FF (\);) 432.371 578.649 T 180 583.981995 360 9 CR 1 G 180 583.981995 360 9 NF 0 G 3 FF (/*) 199.224 590.813 T 0.6667 G 530.91 588.48 M 530.91 593.73 L 540 588.48 L 530.91 583.23 L F 530.91 588.48 M 216 588.48 L S 0 0 612 792 CR 0 G 3 FF 252 599.648621 M 1.14093 0 32 (Decrement the ) widthshow 4 FF 315.371887 599.648621 M 1.14093 0 32 (alive_count) widthshow 3 FF 362.03186 599.648621 M 1.14093 0 32 ( count. If we \336nd no references, the object) widthshow 252 609.64856 M 1.564514 0 32 (has already been unlink) widthshow 351.29361 609.64856 M 1.564514 0 32 (ed from the object chain, there are no e) widthshow 519.999817 609.64856 M 1.564514 0 32 (xtant) widthshow 252 619.648499 M 1.686401 0 32 (send rights for it, therefore no one can \336nd it, so we can delete the) widthshow 180 632.98175 360 9 CR 1 G 180 632.98175 360 9 NF 0 G 3 FF (*/) 198.0 639.808 T 0.6667 G 225.09 637.48 M 225.09 632.23 L 216 637.48 L 225.09 642.73 L F 540 637.48 M 225.09 637.48 L S 0 0 612 792 CR 0 G 3 FF (object here \(without the global lock\).) 252.0 629.648 T ([255]) 185.34 650.648 T (if \(! ) 252.0 650.648 T 4 FF (object_p) 269.77 650.648 T 5 FF 304.21 650.648 T 0 FF (is_ali) 314.08 650.648 T (v) 336.21 650.648 T (e_and_der) 341.11 650.648 T (efer) 385.93 650.648 T (ence) 402.4 650.648 T 3 FF ( \(\)\)) 421.28 650.648 T ([256]) 185.34 662.648 T (delete ) 288.0 662.648 T 4 FF (object_p) 314.38 662.648 T 3 FF (;) 348.82 662.648 T ([257]) 185.34 674.648 T (return TR) 252.0 674.648 T (UE;) 290.76 674.648 T ([258]) 185.34 686.648 T (}) 216.0 686.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 87 87 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (83 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 72.0 55.824 T (eaded Object-Oriented Example) 111.339 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Bold) 12 1 mymakefontmetric 3 FF (Ser) 72.0 116.0 T (v) 89.208 116.0 T (er Loop and Initialization) 95.088 116.0 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF (The follo) 72.0 132.667 T (wing is basic multi-threaded serv) 108.69 132.667 T (er loop start-up processing.) 241.3 132.667 T ([259]) 77.34 150.667 T (#de\336ne MAX_MSG_SIZE) 108.0 150.667 T (512) 288.0 150.667 T 72 155.999832 360 9 CR 1 G 72 155.999832 360 9 NF 0 G 4 FF (/*) 90.0 162.831 T 3 SL 0 SC 0.6667 G 422.91 160.5 M 422.91 165.75 L 432 160.5 L 422.91 155.25 L F 422.91 160.5 M 288 160.5 L S 0 0 612 792 CR 0 G 4 FF 288 171.666458 M 2.303955 0 32 (an upper bound on messages that) widthshow 72 184.99971 360 9 CR 1 G 72 184.99971 360 9 NF 0 G 4 FF (*/) 90.0 191.826 T 0.6667 G 297.09 189.5 M 297.09 184.25 L 288 189.5 L 297.09 194.75 L F 432 189.5 M 297.09 189.5 L S 0 0 612 792 CR 0 G 4 FF (we handle) 288.0 181.666 T ([260]) 77.34 202.666 T (static an) 108.0 202.666 T (y_t ) 140.9 202.666 T 1 FF (ser) 156.18 202.666 T (v) 168.85 202.666 T (er_thr) 173.75 202.666 T (ead ) 200.78 202.666 T 4 FF (\(an) 218.28 202.666 T (y_t ) 230.9 202.666 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF (ar) 246.18 202.666 T (g) 254.701 202.666 T 4 FF (\)) 259.701 202.666 T ([261]) 77.34 214.666 T ({) 108.0 214.666 T ([262]) 77.34 226.666 T (k) 144.0 226.666 T (ern_return_t) 148.9 226.666 T 5 FF (kr) 288.0 226.666 T 4 FF (;) 296.33 226.666 T ([263]) 77.34 238.666 T 5 FF (kr) 144.0 238.666 T 4 FF ( = ) 152.33 238.666 T 1 FF (mach_msg_ser) 162.97 238.666 T (v) 226.19 238.666 T (er) 231.09 238.666 T 4 FF (\() 239.97 238.666 T 1 FF (object_demux) 243.3 238.666 T 4 FF (, MAX_MSG_SIZE, ) 303.29 238.666 T 5 FF (all_objects) 198.0 248.666 T 6 (Symbol) 10 1 mymakefontmetric 6 FF 241.89 248.666 T 1 FF (port_set) 251.76 248.666 T 4 FF (\(\)\);) 286.75 248.666 T ([264]) 77.34 260.666 T (quit\(1, \322) 144.0 260.666 T 1 FF (ooser) 177.33 260.666 T (v) 200.0 260.666 T (er) 204.9 260.666 T 4 FF (: ) 213.78 260.666 T 1 FF (mach_msg_ser) 219.06 260.666 T (v) 282.28 260.666 T (er) 287.18 260.666 T 4 FF (: %s\\n\323, mach_error_string\() 296.06 260.666 T 5 FF (kr) 407.98 260.666 T 4 FF (\)\);) 416.31 260.666 T ([265]) 77.34 272.666 T (return 0;) 144.0 272.666 T ([266]) 77.34 284.666 T (}) 108.0 284.666 T ([267]) 77.34 296.666 T (int ) 108.0 296.666 T 1 FF (main ) 121.06 296.666 T 4 FF (\(int ) 145.23 296.666 T 5 FF (ar) 161.62 296.666 T (gc) 170.14 296.666 T 4 FF (, char *) 179.58 296.666 T 5 FF (ar) 209.29 296.666 T (gv) 217.81 296.666 T 4 FF ([]\)) 227.25 296.666 T ([268]) 77.34 308.666 T ({) 108.0 308.666 T ([269]) 77.34 320.666 T (int) 144.0 320.666 T 5 FF (i) 288.0 320.666 T 4 FF (, ) 290.78 320.666 T 5 FF (num_thr) 295.78 320.666 T (eads) 329.3 320.666 T 4 FF (;) 347.63 320.666 T ([270]) 77.34 332.666 T (mach_port_t) 144.0 332.666 T 5 FF (service) 288.0 332.666 T 4 FF (;) 316.32 332.666 T ([271]) 77.34 344.666 T (k) 144.0 344.666 T (ern_return_t) 148.9 344.666 T 5 FF (kr) 288.0 344.666 T 4 FF (;) 296.33 344.666 T ([272]) 77.34 356.666 T (switch \(ar) 144.0 356.666 T (gc\)) 183.53 356.666 T ([273]) 77.34 368.665 T ({) 144.0 368.665 T ([274]) 77.34 380.665 T (case 1:) 144.0 380.665 T ([275]) 77.34 392.665 T 5 FF (num_thr) 180.0 392.665 T (eads) 213.52 392.665 T 4 FF ( = 1;) 231.85 392.665 T ([276]) 77.34 404.665 T (break;) 180.0 404.665 T ([277]) 77.34 416.665 T (case 2:) 144.0 416.665 T ([278]) 77.34 428.665 T 5 FF (num_thr) 180.0 428.665 T (eads) 213.52 428.665 T 4 FF ( = atoi\() 231.85 428.665 T 5 FF (ar) 260.82 428.665 T (gv) 269.34 428.665 T 4 FF ([1]\);) 278.78 428.665 T ([279]) 77.34 440.665 T (if \() 180.0 440.665 T 5 FF (num_thr) 191.94 440.665 T (eads) 225.46 440.665 T 4 FF ( >= 0\)) 243.79 440.665 T ([280]) 77.34 452.665 T (break;) 216.0 452.665 T ([281]) 77.34 464.665 T (def) 144.0 464.665 T (ault:) 156.67 464.665 T ([282]) 77.34 476.665 T (quit\(1, \322usage: ) 180.0 476.665 T 1 FF (ooser) 241.38 476.665 T (v) 264.05 476.665 T (er) 268.95 476.665 T 4 FF ( [num-threads]\\n\323\);) 277.83 476.665 T ([283]) 77.34 488.665 T (}) 144.0 488.665 T 72 493.998169 360 9 CR 1 G 72 493.998169 360 9 NF 0 G 4 FF (/*) 91.224 500.829 T 0.6667 G 422.91 498.5 M 422.91 503.75 L 432 498.5 L 422.91 493.25 L F 422.91 498.5 M 108 498.5 L S 72 512.998108 360 9 CR 1 G 72 512.998108 360 9 NF 0 G 4 FF (*/) 90.0 519.824 T 0.6667 G 117.09 517.5 M 117.09 512.25 L 108 517.5 L 117.09 522.75 L F 432 517.5 M 117.09 517.5 L S 0 0 612 792 CR 0 G 4 FF (Start object list.) 144.0 509.665 T ([284]) 77.34 530.665 T 5 FF (all_objects) 144.0 530.665 T 4 FF ( = ne) 187.89 530.665 T (w ) 207.72 530.665 T 5 FF (object_list) 217.44 530.665 T 4 FF (;) 259.11 530.665 T 72 535.998047 360 9 CR 1 G 72 535.998047 360 9 NF 0 G 4 FF (/*) 91.224 542.829 T 0.6667 G 422.91 540.5 M 422.91 545.75 L 432 540.5 L 422.91 535.25 L F 422.91 540.5 M 108 540.5 L S 72 554.997986 360 9 CR 1 G 72 554.997986 360 9 NF 0 G 4 FF (*/) 90.0 561.824 T 0.6667 G 117.09 559.5 M 117.09 554.25 L 108 559.5 L 117.09 564.75 L F 432 559.5 M 117.09 559.5 L S 0 0 612 792 CR 0 G 4 FF (Service port created when ) 144.0 551.665 T 5 FF (object_list) 250.63 551.665 T 4 FF ( w) 292.3 551.665 T (as allocated.) 301.92 551.665 T ([285]) 77.34 572.665 T 5 FF (service) 144.0 572.665 T 4 FF ( = \(mach_port_t\) ) 172.32 572.665 T 5 FF (all_objects) 242.67 572.665 T 4 FF (;) 286.56 572.665 T ([286]) 77.34 584.665 T 5 FF (kr) 144.0 584.665 T 4 FF ( = ) 152.33 584.665 T 1 FF (netname_check_in) 162.97 584.665 T 4 FF (\() 242.41 584.665 T 5 FF (name_server_port) 245.74 584.665 T 4 FF (, \322OOServ) 319.06 584.665 T (er\323, ) 361.12 584.665 T 1 FF (mach_task_self) 198.0 594.665 T 4 FF (\(\), ) 263.55 594.665 T 5 FF (service) 275.21 594.665 T 4 FF (\);) 303.53 594.665 T ([287]) 77.34 606.664 T (if \() 144.0 606.664 T 5 FF (kr) 155.94 606.664 T 4 FF ( != KERN_SUCCESS\)) 164.27 606.664 T ([288]) 77.34 618.664 T (quit\(1, \322) 180.0 618.664 T 1 FF (ooser) 213.33 618.664 T (v) 236.0 618.664 T (er) 240.9 618.664 T 4 FF (: ) 249.78 618.664 T 1 FF (netname_check_in) 255.06 618.664 T 4 FF (: %s\\n\323, ) 334.5 618.664 T (mach_error_string\() 234.0 628.664 T 5 FF (kr) 311.2 628.664 T 4 FF (\)\);) 319.53 628.664 T ([289]) 77.34 640.664 T (for \() 144.0 640.664 T 5 FF (i) 161.49 640.664 T 4 FF ( = 0; ) 164.27 640.664 T 5 FF (i) 185.19 640.664 T 4 FF ( < ) 187.97 640.664 T 5 FF (num_thr) 198.61 640.664 T (eads) 232.13 640.664 T 4 FF (; ) 250.46 640.664 T 5 FF (i) 255.74 640.664 T 4 FF (++\)) 258.52 640.664 T ([290]) 77.34 652.664 T 1 FF (cthr) 180.0 652.664 T (ead_detach) 197.59 652.664 T 4 FF (\() 245.92 652.664 T 1 FF (cthr) 249.25 652.664 T (ead_f) 266.84 652.664 T (ork) 289.92 652.664 T 4 FF (\() 304.92 652.664 T 1 FF (ser) 308.25 652.664 T (v) 320.92 652.664 T (er_thr) 325.82 652.664 T (ead) 352.851 652.664 T 4 FF (, 0\)\);) 367.851 652.664 T 72 657.997498 360 9 CR 1 G 72 657.997498 360 9 NF 0 G 4 FF (/*) 91.224 664.829 T 0.6667 G 422.91 662.5 M 422.91 667.75 L 432 662.5 L 422.91 657.25 L F 422.91 662.5 M 108 662.5 L S 72 676.997437 360 9 CR 1 G 72 676.997437 360 9 NF 0 G 4 FF (*/) 90.0 683.824 T 0.6667 G 117.09 681.5 M 117.09 676.25 L 108 681.5 L 117.09 686.75 L F 432 681.5 M 117.09 681.5 L S 0 0 612 792 CR 0 G 4 FF (W) 144.0 673.664 T (e service messages sent to the service port.) 152.64 673.664 T ([291]) 77.34 694.664 T 5 FF (kr) 144.0 694.664 T 4 FF ( = ) 152.33 694.664 T 1 FF (mach_msg_ser) 162.97 694.664 T (v) 226.19 694.664 T (er) 231.09 694.664 T 4 FF (\() 239.97 694.664 T 1 FF (ooser) 243.3 694.664 T (v) 265.97 694.664 T (er_ser) 270.87 694.664 T (v) 297.42 694.664 T (er) 302.32 694.664 T 4 FF (, MAX_MSG_SIZE, ) 310.801 694.664 T 5 FF (service) 396.911 694.664 T 4 FF (\);) 425.231 694.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 88 88 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (84 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 180.0 55.824 T (eaded IPC\320Based Ser) 219.339 55.824 T (v) 302.247 55.824 T (ers) 306.657 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([292]) 185.34 112.651 T (quit\(1, \322) 252.0 112.651 T 0 FF (ooser) 285.33 112.651 T (v) 308.0 112.651 T (er) 312.9 112.651 T 3 FF (: ) 321.78 112.651 T 0 FF (mach_msg_ser) 327.06 112.651 T (v) 390.28 112.651 T (er) 395.18 112.651 T 3 FF (: %s\\n\323, mach_error_string\() 404.06 112.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (kr) 515.98 112.651 T 3 FF (\)\);) 524.31 112.651 T ([293]) 185.34 124.651 T (return 0;) 252.0 124.651 T ([294]) 185.34 136.651 T (}) 216.0 136.651 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Sample Client) 180.0 165.984 T 3 FF 180 182.650406 M 1.637604 0 32 (This sample client program can directly in) widthshow 358.845856 182.650406 M 1.637604 0 32 (v) widthshow 363.645966 182.650406 M 1.637604 0 32 (ok) widthshow 373.546021 182.650406 M 1.637604 0 32 (e all de\336ned methods. It does not itself) widthshow 180 194.650345 M 1.011841 0 32 (k) widthshow 184.900055 194.650345 M 1.011841 0 32 (eep track of the rights it accumulates, b) widthshow 348.973083 194.650345 M 1.011841 0 32 (ut it does detect when it releases the last right) widthshow (for the object last located with the ) 180.0 206.65 T 4 FF (l) 318.59 206.65 T 3 FF ( request.) 321.37 206.65 T 180 217.983597 360 9 CR 1 G 180 217.983597 360 9 NF 0 G 3 FF (/*) 199.224 224.815 T 3 SL 0.6667 G 530.91 222.48 M 530.91 227.73 L 540 222.48 L 530.91 217.23 L F 530.91 222.48 M 216 222.48 L S 0 0 612 792 CR 0 G 3 FF (File: ) 216.0 233.65 T 0 FF (ooclient.c) 236.84 233.65 T 3 FF (Author: Richard P) 216.0 243.65 T (. Dra) 288.221 243.65 T (v) 308.011 243.65 T (es) 312.861 243.65 T 180 256.983398 360 9 CR 1 G 180 256.983398 360 9 NF 0 G 3 FF (*/) 198.0 263.81 T 0.6667 G 225.09 261.48 M 225.09 256.23 L 216 261.48 L 225.09 266.73 L F 540 261.48 M 225.09 261.48 L S 0 0 612 792 CR 0 G 3 FF (Sample client for ) 216.0 253.65 T 0 FF (ooser) 287.38 253.65 T (v) 310.05 253.65 T (er) 314.95 253.65 T 3 FF (.) 323.28 253.65 T ([1]) 195.34 274.65 T (#include ) 216.0 274.65 T ([2]) 195.34 286.65 T (#include ) 216.0 286.65 T ([3]) 195.34 298.65 T (#include ) 216.0 298.65 T ([4]) 195.34 310.65 T (#include ) 304.12 310.65 T ([5]) 195.34 322.65 T (#include ) 275.09 322.65 T ([6]) 195.34 334.65 T (#include \322) 216.0 334.65 T 0 FF (ooser) 257.38 334.65 T (v) 280.05 334.65 T (er) 284.95 334.65 T 3 FF (.h\323) 293.28 334.65 T ([7]) 195.34 346.65 T (#include \322) 216.0 346.65 T 0 FF (object) 257.38 346.65 T 3 FF (.h\323) 283.48 346.65 T ([8]) 195.34 358.65 T 0 FF (main) 216.0 358.65 T 3 FF ( \(int ) 237.67 358.65 T 4 FF (ar) 256.56 358.65 T (gc) 265.08 358.65 T 3 FF (, char *) 274.52 358.65 T 4 FF (ar) 304.23 358.65 T (gv) 312.75 358.65 T 3 FF (\)) 322.19 358.65 T ([9]) 195.34 370.65 T ({) 216.0 370.65 T ([10]) 190.34 382.649 T (mach_port_t) 252.0 382.649 T 4 FF (server) 396.0 382.649 T 3 FF (;) 420.99 382.649 T ([11]) 190.34 394.649 T (mach_port_t) 252.0 394.649 T 4 FF (object) 396.0 394.649 T 3 FF (;) 420.44 394.649 T ([12]) 190.34 406.649 T (k) 252.0 406.649 T (ern_return_t) 256.9 406.649 T 4 FF (kr) 396.0 406.649 T 3 FF (;) 404.33 406.649 T 180 411.982666 360 9 CR 1 G 180 411.982666 360 9 NF 0 G 3 FF (/*) 199.224 418.814 T 0.6667 G 530.91 416.48 M 530.91 421.73 L 540 416.48 L 530.91 411.23 L F 530.91 416.48 M 216 416.48 L S 180 430.982605 360 9 CR 1 G 180 430.982605 360 9 NF 0 G 3 FF (*/) 198.0 437.809 T 0.6667 G 225.09 435.48 M 225.09 430.23 L 216 435.48 L 225.09 440.73 L F 540 435.48 M 225.09 435.48 L S 0 0 612 792 CR 0 G 3 FF (Lookup the port for the ooservice) 252.0 427.649 T ([13]) 190.34 448.649 T 4 FF (kr) 252.0 448.649 T 3 FF ( = ) 260.33 448.649 T 0 FF (netname_look_up) 270.97 448.649 T 3 FF (\() 347.09 448.649 T 4 FF (name_server_port) 350.42 448.649 T 3 FF (, \322\323, \322OOServ) 423.74 448.649 T (er\323, &) 479.68 448.649 T 4 FF (server) 504.67 448.649 T 3 FF (\);) 529.66 448.649 T ([14]) 190.34 460.649 T (if \() 252.0 460.649 T 4 FF (kr) 263.94 460.649 T 3 FF ( != KERN_SUCCESS\)) 272.27 460.649 T ([15]) 190.34 472.649 T 0 FF (quit) 288.0 472.649 T 3 FF (\(1, \322) 305.23 472.649 T 0 FF (ooclient) 323.0 472.649 T 3 FF (: ) 356.33 472.649 T 0 FF (netname_look_up) 361.61 472.649 T 3 FF (\(OOServ) 437.73 472.649 T (er\): %s\\n\323, ) 473.68 472.649 T (mach_error_string\() 342.0 482.649 T 4 FF (kr) 419.2 482.649 T 3 FF (\)\);) 427.53 482.649 T 180 487.982361 360 9 CR 1 G 180 487.982361 360 9 NF 0 G 3 FF (/*) 199.224 494.814 T 0.6667 G 530.91 492.48 M 530.91 497.73 L 540 492.48 L 530.91 487.23 L F 530.91 492.48 M 216 492.48 L S 180 506.9823 360 9 CR 1 G 180 506.9823 360 9 NF 0 G 3 FF (*/) 198.0 513.809 T 0.6667 G 225.09 511.48 M 225.09 506.23 L 216 511.48 L 225.09 516.73 L F 540 511.48 M 225.09 511.48 L S 0 0 612 792 CR 0 G 3 FF (Loop reading and e) 252.0 503.649 T (x) 329.33 503.649 T (ecuting commands until eof) 334.18 503.649 T ([16]) 190.34 524.649 T 4 FF (object) 252.0 524.649 T 3 FF ( = MA) 276.44 524.649 T (CH_POR) 302.79 524.649 T (T_NULL;) 340.531 524.649 T ([17]) 190.34 536.649 T (for \(;;\)) 252.0 536.649 T ([18]) 190.34 548.649 T ({) 252.0 548.649 T ([19]) 190.34 560.649 T (char) 288.0 560.649 T 4 FF (command) 396.0 560.649 T 3 FF ([2];) 434.88 560.649 T ([20]) 190.34 572.649 T (int) 288.0 572.649 T 4 FF (value) 396.0 572.649 T 3 FF (;) 417.66 572.649 T ([21]) 190.34 584.649 T (mach_port_urefs_t) 288.0 584.649 T 4 FF (object_r) 396.0 584.649 T (efs) 428.96 584.649 T 3 FF (;) 440.07 584.649 T ([22]) 190.34 596.649 T (printf \(\322) 288.0 596.649 T 0 FF (ooclient) 320.49 596.649 T 3 FF (> \322\);) 353.82 596.649 T ([23]) 190.34 608.649 T (if \(scanf\(\322%1s\323, ) 288.0 608.649 T 4 FF (command) 355.47 608.649 T 3 FF (\) < 1\)) 394.35 608.649 T ([24]) 190.34 620.648 T ({) 288.0 620.648 T ([25]) 190.34 632.648 T (printf\(\322\\n\323\);) 324.0 632.648 T ([26]) 190.34 644.648 T (break;) 324.0 644.648 T ([27]) 190.34 656.648 T (}) 288.0 656.648 T ([28]) 190.34 668.648 T 4 FF (kr) 288.0 668.648 T 3 FF ( = KERN_SUCCESS;) 296.33 668.648 T ([29]) 190.34 680.648 T (switch \() 288.0 680.648 T 4 FF (command) 319.94 680.648 T 3 FF ([0]\)) 358.82 680.648 T ([30]) 190.34 692.648 T ({) 288.0 692.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 89 89 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (85 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 72.0 55.824 T (eaded Object-Oriented Example) 111.339 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([31]) 82.34 114.667 T (case '?':) 180.0 114.667 T ([32]) 82.34 126.667 T (case 'h':) 180.0 126.667 T ([33]) 82.34 138.667 T (printf \(\322Commands:\\n\323\);) 216.0 138.667 T ([34]) 82.34 150.666 T (printf \(\322l \320 lookup object port reference\\n\323\);) 216.0 150.666 T ([35]) 82.34 162.666 T (printf \(\322d \320 de-allocate object port reference\\n\323\);) 216.0 162.666 T ([36]) 82.34 174.666 T (printf \(\322c \320 change the v) 216.0 174.666 T (alue of the ) 344.78 174.666 T (object\\n\323\);) 270.0 184.666 T ([37]) 82.34 196.666 T (printf \(\322q \320 query the v) 216.0 196.666 T (alue of the object\\n\323\);) 308.23 196.666 T ([38]) 82.34 208.666 T (break;) 216.0 208.666 T ([39]) 82.34 220.666 T (case 'l':) 180.0 220.666 T ([40]) 82.34 232.666 T (if \(scanf \(\322%d\323, &) 216.0 232.666 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (value) 289.86 232.666 T 3 FF (\) < 1\)) 311.52 232.666 T ([41]) 82.34 244.666 T ({) 216.0 244.666 T ([42]) 82.34 256.666 T (printf \(\322syntax error\\n\323\);) 252.0 256.666 T ([43]) 82.34 268.666 T (break;) 252.0 268.666 T ([44]) 82.34 280.666 T (}) 216.0 280.666 T 72 285.999084 360 9 CR 1 G 72 285.999084 360 9 NF 0 G 3 FF (/*) 91.224 292.83 T 3 SL 0 SC 0.6667 G 422.91 290.5 M 422.91 295.75 L 432 290.5 L 422.91 285.25 L F 422.91 290.5 M 108 290.5 L S 72 304.999023 360 9 CR 1 G 72 304.999023 360 9 NF 0 G 3 FF (*/) 90.0 311.825 T 0.6667 G 117.09 309.5 M 117.09 304.25 L 108 309.5 L 117.09 314.75 L F 432 309.5 M 117.09 309.5 L S 0 0 612 792 CR 0 G 3 FF (Lookup a send right for the object port) 216.0 301.666 T ([45]) 82.34 322.666 T 4 FF (kr) 216.0 322.666 T 3 FF ( = ) 224.33 322.666 T 1 FF (ooser) 234.97 322.666 T (v) 257.64 322.666 T (er_lookup ) 262.54 322.666 T 3 FF (\() 308.38 322.666 T 4 FF (server) 311.71 322.666 T 3 FF (, ) 336.3 322.666 T 4 FF (value) 341.3 322.666 T 3 FF (, &) 362.96 322.666 T 4 FF (object) 375.74 322.666 T 3 FF (\);) 400.18 322.666 T ([46]) 82.34 334.666 T (if \() 216.0 334.666 T 4 FF (kr) 227.94 334.666 T 3 FF ( == KERN_SUCCESS\)) 236.27 334.666 T ([47]) 82.34 346.666 T (printf \(\322Recei) 252.0 346.666 T (v) 307.01 346.666 T (ed a send right for the object ) 311.86 346.666 T (port.\\n\323\);) 306.0 356.665 T ([48]) 82.34 368.665 T (else) 216.0 368.665 T ([49]) 82.34 380.665 T (printf \(\322) 252.0 380.665 T 1 FF (ooclient) 284.49 380.665 T 3 FF (: ) 317.82 380.665 T 1 FF (ooser) 323.1 380.665 T (v) 345.77 380.665 T (er_lookup) 350.67 380.665 T 3 FF (: %s\\n\323, ) 394.01 380.665 T (mach_error_string\() 306.0 390.665 T 4 FF (kr) 383.2 390.665 T 3 FF (\)\);) 391.53 390.665 T ([50]) 82.34 402.665 T (break;) 216.0 402.665 T ([51]) 82.34 414.665 T (case 'd':) 180.0 414.665 T 72 419.998474 360 9 CR 1 G 72 419.998474 360 9 NF 0 G 3 FF (/*) 91.224 426.83 T 0.6667 G 422.91 424.5 M 422.91 429.75 L 432 424.5 L 422.91 419.25 L F 422.91 424.5 M 108 424.5 L S 72 438.998413 360 9 CR 1 G 72 438.998413 360 9 NF 0 G 3 FF (*/) 90.0 445.825 T 0.6667 G 117.09 443.5 M 117.09 438.25 L 108 443.5 L 117.09 448.75 L F 432 443.5 M 117.09 443.5 L S 0 0 612 792 CR 0 G 3 FF (De-allocate a send right for the object port) 216.0 435.665 T ([52]) 82.34 456.665 T 4 FF (kr) 216.0 456.665 T 3 FF ( = ) 224.33 456.665 T 1 FF (mach_port_get_r) 234.97 456.665 T (efs) 308.66 456.665 T 3 FF ( \() 320.32 456.665 T 1 FF (mach_task_self) 326.15 456.665 T 3 FF ( \(\), ) 391.7 456.665 T 4 FF (object) 270.0 466.665 T 3 FF (, MA) 294.44 466.665 T (CH_POR) 315.15 466.665 T (T_RIGHT_SEND, ) 352.891 466.665 T (&) 270.0 476.665 T 4 FF (object_r) 277.78 476.665 T (efs) 310.74 476.665 T 3 FF (\);) 321.85 476.665 T ([53]) 82.34 488.665 T (if \() 216.0 488.665 T 4 FF (kr) 227.94 488.665 T 3 FF ( != KERN_SUCCESS\)) 236.27 488.665 T ([54]) 82.34 500.665 T ({) 216.0 500.665 T ([55]) 82.34 512.665 T (printf \(\322) 252.0 512.665 T 1 FF (ooclient) 284.49 512.665 T 3 FF (: ) 317.82 512.665 T 1 FF (mach_port_get_r) 323.1 512.665 T (efs) 396.79 512.665 T 3 FF (: ) 408.45 512.665 T (%s\\n\323, mach_error_string\() 306.0 522.665 T 4 FF (kr) 412.64 522.665 T 3 FF (\)\);) 420.97 522.665 T ([56]) 82.34 534.665 T (break;) 252.0 534.665 T ([57]) 82.34 546.665 T (}) 216.0 546.665 T ([58]) 82.34 558.664 T 4 FF (kr) 216.0 558.664 T 3 FF ( = ) 224.33 558.664 T 1 FF (mach_port_deallocate) 234.97 558.664 T 3 FF (\() 329.4 558.664 T 1 FF (mach_task_self) 332.73 558.664 T 3 FF (\(\), ) 398.28 558.664 T 4 FF (object) 270.0 568.664 T 3 FF (\);) 294.44 568.664 T ([59]) 82.34 580.664 T (if \() 216.0 580.664 T 4 FF (kr) 227.94 580.664 T 3 FF ( == KERN_SUCCESS\)) 236.27 580.664 T ([60]) 82.34 592.664 T ({) 216.0 592.664 T ([61]) 82.34 604.664 T (if \() 252.0 604.664 T 4 FF (object_r) 263.94 604.664 T (efs) 296.9 604.664 T 3 FF ( == 1\)) 308.01 604.664 T ([62]) 82.34 616.664 T ({) 252.0 616.664 T ([63]) 82.34 628.664 T (printf \(\322De-allocated the last send ) 288.0 628.664 T (right for the object ) 342.0 638.664 T (port.\\n\323\);) 342.0 648.664 T ([64]) 82.34 660.664 T 4 FF (object) 288.0 660.664 T 3 FF ( = MA) 312.44 660.664 T (CH_POR) 338.79 660.664 T (T_NULL;) 376.531 660.664 T ([65]) 82.34 672.664 T (}) 252.0 672.664 T ([66]) 82.34 684.664 T (else) 252.0 684.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 90 90 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (86 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 180.0 55.824 T (eaded IPC\320Based Ser) 219.339 55.824 T (v) 302.247 55.824 T (ers) 306.657 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([67]) 190.34 112.651 T (printf \(\322De-allocated a send right ) 396.0 112.651 T (for the object ) 450.0 122.651 T (port.\\n\323\);) 450.0 132.651 T ([68]) 190.34 144.65 T (}) 324.0 144.65 T ([69]) 190.34 156.65 T (else) 324.0 156.65 T ([70]) 190.34 168.65 T (printf \(\322) 360.0 168.65 T 0 FF (ooclient) 392.49 168.65 T 3 FF (: ) 425.82 168.65 T 0 FF (mach_port_deallocate) 431.1 168.65 T 3 FF (: ) 525.53 168.65 T (%s\\n\323, mach_error_string\() 414.0 178.65 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (kr) 520.64 178.65 T 3 FF (\)\);) 528.97 178.65 T ([71]) 190.34 190.65 T (break;) 324.0 190.65 T ([72]) 190.34 202.65 T (case 'c':) 288.0 202.65 T ([73]) 190.34 214.65 T (if \(scanf \(\322%d\323, &) 324.0 214.65 T 4 FF (value) 397.86 214.65 T 3 FF (\) < 1\)) 419.52 214.65 T ([74]) 190.34 226.65 T ({) 324.0 226.65 T ([75]) 190.34 238.65 T (printf \(\322syntax error\\n\323\);) 360.0 238.65 T ([76]) 190.34 250.65 T (break;) 360.0 250.65 T ([77]) 190.34 262.65 T (}) 324.0 262.65 T 180 267.983154 360 9 CR 1 G 180 267.983154 360 9 NF 0 G 3 FF (/*) 199.224 274.814 T 3 SL 0.6667 G 530.91 272.48 M 530.91 277.73 L 540 272.48 L 530.91 267.23 L F 530.91 272.48 M 216 272.48 L S 180 286.983093 360 9 CR 1 G 180 286.983093 360 9 NF 0 G 3 FF (*/) 198.0 293.809 T 0.6667 G 225.09 291.48 M 225.09 286.23 L 216 291.48 L 225.09 296.73 L F 540 291.48 M 225.09 291.48 L S 0 0 612 792 CR 0 G 3 FF (Change the v) 324.0 283.65 T (alue of the object) 376.52 283.65 T ([78]) 190.34 304.65 T 4 FF (kr) 324.0 304.65 T 3 FF ( = ) 332.33 304.65 T 0 FF (object_change ) 342.97 304.65 T 3 FF (\() 406.57 304.65 T 4 FF (object) 409.9 304.65 T 3 FF (, ) 434.34 304.65 T 4 FF (value) 439.34 304.65 T 3 FF (\);) 461.0 304.65 T ([79]) 190.34 316.65 T (if \() 324.0 316.65 T 4 FF (kr) 335.94 316.65 T 3 FF ( == KERN_SUCCESS\)) 344.27 316.65 T ([80]) 190.34 328.65 T (printf \(\322Changed the object's v) 360.0 328.65 T (alue to ) 482.64 328.65 T (%d.\\n\323, ) 414.0 338.65 T 4 FF (value) 447.05 338.65 T 3 FF (\);) 468.71 338.65 T ([81]) 190.34 350.649 T (else) 324.0 350.649 T ([82]) 190.34 362.649 T (printf \(\322) 360.0 362.649 T 0 FF (ooclient) 392.49 362.649 T 3 FF (: ) 425.82 362.649 T 0 FF (object_change) 431.1 362.649 T 3 FF (: %s\\n\323, ) 492.2 362.649 T (mach_error_string\() 414.0 372.649 T 4 FF (kr) 491.2 372.649 T 3 FF (\)\);) 499.53 372.649 T ([83]) 190.34 384.649 T (break;) 324.0 384.649 T ([84]) 190.34 396.649 T (case 'q':) 288.0 396.649 T 180 401.982544 360 9 CR 1 G 180 401.982544 360 9 NF 0 G 3 FF (/*) 199.224 408.814 T 0.6667 G 530.91 406.48 M 530.91 411.73 L 540 406.48 L 530.91 401.23 L F 530.91 406.48 M 216 406.48 L S 180 420.982483 360 9 CR 1 G 180 420.982483 360 9 NF 0 G 3 FF (*/) 198.0 427.809 T 0.6667 G 225.09 425.48 M 225.09 420.23 L 216 425.48 L 225.09 430.73 L F 540 425.48 M 225.09 425.48 L S 0 0 612 792 CR 0 G 3 FF (Query the v) 324.0 417.649 T (alue of the object) 370.96 417.649 T ([85]) 190.34 438.649 T 4 FF (kr) 324.0 438.649 T 3 FF ( = ) 332.33 438.649 T 0 FF (object_query ) 342.97 438.649 T 3 FF (\() 401.57 438.649 T 4 FF (object) 404.9 438.649 T 3 FF (, &) 429.34 438.649 T 4 FF (value) 442.12 438.649 T 3 FF (\);) 463.78 438.649 T ([86]) 190.34 450.649 T (if \() 324.0 450.649 T 4 FF (kr) 335.94 450.649 T 3 FF ( == KERN_SUCCESS\)) 344.27 450.649 T ([87]) 190.34 462.649 T (printf \(\322The object's current v) 360.0 462.649 T (alue is ) 478.74 462.649 T (%d.\\n\323, ) 414.0 472.649 T 4 FF (value) 447.05 472.649 T 3 FF (\);) 468.71 472.649 T ([88]) 190.34 484.649 T (else) 324.0 484.649 T ([89]) 190.34 496.649 T (printf \(\322) 360.0 496.649 T 0 FF (ooclient) 392.49 496.649 T 3 FF (: ) 425.82 496.649 T 0 FF (object_query) 431.1 496.649 T 3 FF (: %s\\n\323, ) 487.2 496.649 T (mach_error_string\() 414.0 506.649 T 4 FF (kr) 491.2 506.649 T 3 FF (\)\);) 499.53 506.649 T ([90]) 190.34 518.649 T (break;) 324.0 518.649 T ([91]) 190.34 530.649 T (}) 288.0 530.649 T ([92]) 190.34 542.649 T (if \() 288.0 542.649 T 4 FF (kr) 299.94 542.649 T 3 FF ( != KERN_SUCCESS\)) 308.27 542.649 T ([93]) 190.34 554.648 T 4 FF (object) 324.0 554.648 T 3 FF ( = MA) 348.44 554.648 T (CH_POR) 374.79 554.648 T (T_NULL;) 412.531 554.648 T ([94]) 190.34 566.648 T (}) 252.0 566.648 T ([95]) 190.34 578.648 T (e) 252.0 578.648 T (xit\(0\);) 256.29 578.648 T ([96]) 190.34 590.648 T (}) 216.0 590.648 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Mak) 180.0 619.982 T (e\336le) 203.88 619.982 T 180 629.981567 360 9 CR 1 G 180 629.981567 360 9 NF 0 G 3 FF (/*) 199.224 636.813 T 0.6667 G 530.91 634.48 M 530.91 639.73 L 540 634.48 L 530.91 629.23 L F 530.91 634.48 M 216 634.48 L S 0 0 612 792 CR 0 G 3 FF (File: ) 216.0 645.648 T 0 FF (Mak) 236.84 645.648 T (e\336le) 256.74 645.648 T 3 FF (Author: Richard P) 216.0 655.648 T (. Dra) 288.221 655.648 T (v) 308.011 655.648 T (es) 312.861 655.648 T 180 668.981384 360 9 CR 1 G 180 668.981384 360 9 NF 0 G 3 FF (*/) 198.0 675.808 T 0.6667 G 225.09 673.48 M 225.09 668.23 L 216 673.48 L 225.09 678.73 L F 540 673.48 M 225.09 673.48 L S 0 0 612 792 CR 0 G 3 FF (Mak) 216.0 665.648 T (e\336le for ) 234.23 665.648 T 0 FF (ooser) 268.11 665.648 T (v) 290.78 665.648 T (er) 295.68 665.648 T 3 FF (.) 304.01 665.648 T ([1]) 195.34 686.648 T (all : ) 216.0 686.648 T 0 FF (ooser) 233.78 686.648 T (v) 256.45 686.648 T (er) 261.35 686.648 T 3 FF ( ) 270.23 686.648 T 0 FF (ooclient) 272.73 686.648 T 3 FF ([2]) 195.34 698.648 T 0 FF (ooser) 216.0 698.648 T (v) 238.67 698.648 T (er) 243.57 698.648 T 3 FF ( : ) 252.45 698.648 T 0 FF (ooser) 260.23 698.648 T (v) 282.9 698.648 T (er) 287.8 698.648 T 3 FF (.o ) 296.131 698.648 T 0 FF (ooser) 306.131 698.648 T (v) 328.801 698.648 T (erSer) 333.701 698.648 T (v) 356.921 698.648 T (er) 361.821 698.648 T 3 FF (.o ) 370.151 698.648 T 0 FF (objectSer) 380.151 698.648 T (v) 420.591 698.648 T (er) 425.491 698.648 T 3 FF (.o) 433.822 698.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 91 91 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (87 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 72.0 55.824 T (eaded Object-Oriented Example) 111.339 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([3]) 87.34 114.667 T ($\(CC\) \320o $@ ) 144.0 114.667 T 1 FF (ooser) 200.71 114.667 T (v) 223.38 114.667 T (er) 228.28 114.667 T 3 FF (.o ) 236.61 114.667 T 1 FF (ooser) 246.61 114.667 T (v) 269.28 114.667 T (erSer) 274.181 114.667 T (v) 297.401 114.667 T (er) 302.301 114.667 T 3 FF (.o ) 310.631 114.667 T 1 FF (objectSer) 320.631 114.667 T (v) 361.071 114.667 T (er) 365.971 114.667 T 3 FF (.o \320lthreads \320) 374.301 114.667 T (lmach \320lc++) 198.0 124.667 T ([4]) 87.34 136.667 T 1 FF (ooser) 108.0 136.667 T (v) 130.67 136.667 T (er) 135.57 136.667 T 3 FF (.o : ) 143.9 136.667 T 1 FF (ooser) 159.18 136.667 T (v) 181.85 136.667 T (er) 186.751 136.667 T 3 FF (.h ) 195.081 136.667 T 1 FF (object) 205.081 136.667 T 3 FF (.h ) 231.181 136.667 T 1 FF (ooser) 241.181 136.667 T (v) 263.851 136.667 T (er) 268.751 136.667 T 3 FF (.c) 277.081 136.667 T ([5]) 87.34 148.666 T ($\(CC_PLUS_PLUS\) \320c ) 144.0 148.666 T 1 FF (ooser) 242.34 148.666 T (v) 265.01 148.666 T (er) 269.91 148.666 T 3 FF (.c) 278.24 148.666 T ([6]) 87.34 160.666 T 1 FF (ooclient) 108.0 160.666 T 3 FF ( : ) 141.33 160.666 T 1 FF (ooclient) 149.11 160.666 T 3 FF (.o ) 182.44 160.666 T 1 FF (ooser) 192.44 160.666 T (v) 215.11 160.666 T (erUser) 220.01 160.666 T 3 FF (.o ) 248.33 160.666 T 1 FF (objectUser) 258.33 160.666 T 3 FF (.o) 303.871 160.666 T ([7]) 87.34 172.666 T ($\(CC\) \320o $@ ) 144.0 172.666 T 1 FF (ooclient) 200.71 172.666 T 3 FF (.o ) 234.04 172.666 T 1 FF (ooser) 244.04 172.666 T (v) 266.71 172.666 T (erUser) 271.61 172.666 T 3 FF (.o ) 299.93 172.666 T 1 FF (objectUser) 309.93 172.666 T 3 FF (.o \320lmach) 355.471 172.666 T ([8]) 87.34 184.666 T 1 FF (ooclient) 108.0 184.666 T 3 FF (.o : ) 141.33 184.666 T 1 FF (ooser) 156.61 184.666 T (v) 179.28 184.666 T (er) 184.18 184.666 T 3 FF (.h ) 192.51 184.666 T 1 FF (object) 202.51 184.666 T 3 FF (.h) 228.61 184.666 T ([9]) 87.34 196.666 T 1 FF (ooser) 108.0 196.666 T (v) 130.67 196.666 T (er) 135.57 196.666 T 3 FF (.h ) 143.9 196.666 T 1 FF (ooser) 153.9 196.666 T (v) 176.57 196.666 T (erUser) 181.471 196.666 T 3 FF (.c ) 209.791 196.666 T 1 FF (ooser) 219.231 196.666 T (v) 241.901 196.666 T (erSer) 246.801 196.666 T (v) 270.021 196.666 T (er) 274.921 196.666 T 3 FF (.c : ) 283.251 196.666 T 1 FF (ooser) 297.971 196.666 T (v) 320.641 196.666 T (er) 325.542 196.666 T 3 FF (.defs) 333.872 196.666 T ([10]) 82.34 208.666 T (mig ) 144.0 208.666 T 1 FF (ooser) 162.06 208.666 T (v) 184.73 208.666 T (er) 189.63 208.666 T 3 FF (.defs) 197.96 208.666 T ([11]) 82.34 220.666 T 1 FF (object) 108.0 220.666 T 3 FF (.h ) 134.1 220.666 T 1 FF (objectUser) 144.1 220.666 T 3 FF (.c ) 189.64 220.666 T 1 FF (objectSer) 199.08 220.666 T (v) 239.52 220.666 T (er) 244.42 220.666 T 3 FF (.c : ) 252.751 220.666 T 1 FF (object) 267.471 220.666 T 3 FF (.defs) 293.571 220.666 T ([12]) 82.34 232.666 T (mig ) 144.0 232.666 T 1 FF (object) 162.06 232.666 T 3 FF (.defs) 188.16 232.666 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 92 92 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (88 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Multi-Thr) 180.0 55.824 T (eaded IPC\320Based Ser) 219.339 55.824 T (v) 302.247 55.824 T (ers) 306.657 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 93 93 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 2 SL 3.86 setmiterlimit 0 G 432 45 M 72 45 L S 2 SC 432 342 M 72 342 L S 0.25 SL 432 720 M 72 720 L S 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (89 ) widthshow 0 0 612 792 CR 1 G 72 99 360 225 NF 0 G 2 (Times-Roman) 12 1 mymakefontmetric 2 FF 72 115 M 1.19989 0 (CHAPTER 7) ashow 3 (Times-Roman) 24 1 mymakefontmetric 3 FF 180 115 M -0.479736 0 (External Memory ) ashow 180 145 M -0.479736 0 (Managers) ashow 1 G 72 360 360 344.015991 NF 0 G 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 72 366.666626 M 0.817947 0 32 (Perhaps the most no) widthshow 155.133926 366.666626 M 0.817947 0 32 (v) widthshow 159.984009 366.666626 M 0.817947 0 32 (el of Mach\325) widthshow 207.720215 366.666626 M 0.817947 0 32 (s features is its support for e) widthshow 325.237976 366.666626 M 0.817947 0 32 (xternal \(to the k) widthshow 391.191895 366.666626 M 0.817947 0 32 (ernel, that) widthshow 72 378.666565 M 0.77449 0 32 (is\) memory managers. The basic dialog between the memory manager) widthshow 359.620667 378.666565 M 0.77449 0 32 (, which maintains) widthshow 72 390.666504 M 0.478317 0 32 (the \322backing store\323 representing an abstract memory object, and the k) widthshow 355.783264 390.666504 M 0.478317 0 32 (ernel, which main-) widthshow 72 402.666443 M 0.288422 0 32 (tains the ph) widthshow 118.636871 402.666443 M 0.288422 0 32 (ysical memory cache \(memory cache object\) of data from the abstract memo-) widthshow 72 414.666382 M 2.016907 0 32 (ry object, is described in the ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 199.36145 414.666382 M 2.016907 0 32 (K) widthshow 205.681641 414.666382 M 2.016907 0 32 (ernel Principles) widthshow 4 FF 271.858551 414.666382 M 2.016907 0 32 ( document. This chapter looks at that) widthshow 72 426.666321 M 0.79689 0 32 (dialog in more detail, e) widthshow 167.527649 426.666321 M 0.79689 0 32 (xamining a simple e) widthshow 250.598404 426.666321 M 0.79689 0 32 (xample of a memory manager and consider-) widthshow (ing other details that a memory manager must co) 72.0 438.666 T (v) 267.38 438.666 T (er) 272.23 438.666 T (.) 279.45 438.666 T 72 480.999512 360 3.024002 CR 432 482.51 M 72 482.51 L S 0 0 612 792 CR 6 (Times-Bold) 14 1 mymakefontmetric 6 FF (Ov) 72.0 476.333 T (er) 89.752 476.333 T (view) 102.044 476.333 T 4 FF 72 500.690125 M 0.96492 0 32 (Because of the in\336nite v) widthshow 172.819824 500.690125 M 0.96492 0 32 (ariety of e) widthshow 215.139755 500.690125 M 0.96492 0 32 (xternal memory managers that could be written, it is) widthshow 72 512.690063 M 0.842972 0 32 (dif) widthshow 82.860138 512.690063 M 0.842972 0 32 widthshow 243.893997 512.690063 M 0.842972 0 32 (vide suf) widthshow 276.427124 512.690063 M 0.842972 0 32 widthshow 72 524.690002 M 0.599243 0 32 (wishing to write an arbitrary manager) widthshow 225.246536 524.690002 M 0.599243 0 32 (. In principle, all of the information that one needs) widthshow 72 536.689941 M 0.266266 0 32 (appears in the ) widthshow 5 FF 130.838806 536.689941 M 0.266266 0 32 (K) widthshow 137.158997 536.689941 M 0.266266 0 32 (ernel Principles) widthshow 4 FF 201.585266 536.689941 M 0.266266 0 32 ( and ) widthshow 5 FF 221.5578 536.689941 M 0.266266 0 32 (K) widthshow 227.877991 536.689941 M 0.266266 0 32 (ernel Interfaces) widthshow 4 FF 291.184265 536.689941 M 0.266266 0 32 ( documents. Practice, ho) widthshow 389.773193 536.689941 M 0.266266 0 32 (we) widthshow 401.18335 536.689941 M 0.266266 0 32 (v) widthshow 406.033447 536.689941 M 0.266266 0 32 (er) widthshow 413.403656 536.689941 M 0.266266 0 32 (, has) widthshow (sho) 72.0 548.69 T (wn that producing a correct e) 85.64 548.69 T (xternal memory manager is a dif) 202.4 548.69 T 332.4 548.69 T 72 572.689819 M 0.431519 0 32 (This chapter discusses in detail the mechanics of basic memory managers, such as might) widthshow 72 584.689758 M 0.781479 0 32 (appear in the def) widthshow 141.164505 584.689758 M 0.781479 0 32 (ault memory manager) widthshow 229.937775 584.689758 M 0.781479 0 32 (. The initial discussion concerns the basics of the) widthshow 72 596.689697 M 1.627228 0 32 (page-in / page-out path, re) widthshow 183.509064 596.689697 M 1.627228 0 32 (vie) widthshow 195.479202 596.689697 M 1.627228 0 32 (wing the k) widthshow 240.853714 596.689697 M 1.627228 0 32 (ernel interactions and considering the interac-) widthshow 72 608.689636 M 1.6138 0 32 (tions with backing storage that a simple manager w) widthshow 290.340454 608.689636 M 1.6138 0 32 (ould encounter) widthshow 351.114563 608.689636 M 1.6138 0 32 (. Of course, not all) widthshow 72 620.689575 M 1.769104 0 32 (managers ha) widthshow 123.829224 620.689575 M 1.769104 0 32 (v) widthshow 128.679306 620.689575 M 1.769104 0 32 (e separate backing store; some might back storage in their o) widthshow 385.520508 620.689575 M 1.769104 0 32 (wn address) widthshow 72 632.689514 M 0.14682 0 32 (space \(such as a shared memory serv) widthshow 220.461029 632.689514 M 0.14682 0 32 (er\) or not back storage at all, if the) widthshow 359.505676 632.689514 M 0.14682 0 32 (y reconstruct pag-) widthshow (es when needed.) 72.0 644.689 T 72 668.689392 M 0.342102 0 32 (Ev) widthshow 82.960083 668.689392 M 0.342102 0 32 (entually the discussion leads to an e) widthshow 228.182785 668.689392 M 0.342102 0 32 (xample manager that supports both a paging and a) widthshow 72 680.689331 M 1.006119 0 32 (message interf) widthshow 130.946182 680.689331 M 1.006119 0 32 (ace to a memory object. This simple e) widthshow 290.039124 680.689331 M 1.006119 0 32 (xample illustrates the use of much) widthshow 72 692.68927 M 1.453018 0 32 (of the k) widthshow 105.356094 692.68927 M 1.453018 0 32 (ernel mechanisms and interf) widthshow 222.645218 692.68927 M 1.453018 0 32 (aces. In particular) widthshow 296.511475 692.68927 M 1.453018 0 32 (, the e) widthshow 323.427612 692.68927 M 1.453018 0 32 (xample raises the issue of) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 94 94 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (90 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 0.941498 0 32 (maintaining consistenc) widthshow 272.731567 112.650635 M 0.941498 0 32 (y between the page images held by the k) widthshow 442.353638 112.650635 M 0.941498 0 32 (ernel in its memory ob-) widthshow 180 124.650574 M 1.967117 0 32 (ject cache v) widthshow 230.984329 124.650574 M 1.967117 0 32 (ersus the page image a manager might hold \(or that other k) widthshow 488.312683 124.650574 M 1.967117 0 32 (ernels might) widthshow 180 136.650513 M 0.143814 0 32 (hold\). The discussion leading to the chapter\325) widthshow 358.343201 136.650513 M 0.143814 0 32 (s e) widthshow 369.167114 136.650513 M 0.143814 0 32 (xample considers the simple case of main-) widthshow (taining strict read\320write consistenc) 180.0 148.65 T (y between a single manager and a single k) 319.55 148.65 T (ernel.) 488.3 148.65 T 180 172.650391 M 0.345688 0 32 (After the e) widthshow 223.301468 172.650391 M 0.345688 0 32 (xample, more adv) widthshow 295.672974 172.650391 M 0.345688 0 32 (anced topics are discussed, b) widthshow 412.105865 172.650391 M 0.345688 0 32 (ut in less detail. Some ideas are) widthshow 180 184.65033 M 0.379974 0 32 (pro) widthshow 193.180084 184.65033 M 0.379974 0 32 (vided for managers that are multi-threaded, although much of these concerns are co) widthshow 531.669922 184.65033 M 0.379974 0 32 (v-) widthshow (ered in CHAPTER 4.) 180.0 196.65 T 180 220.650208 M 0.459061 0 32 (The chapter also includes a brief discussion of consistenc) widthshow 412.922607 220.650208 M 0.459061 0 32 (y management between k) widthshow 516.119873 220.650208 M 0.459061 0 32 (ernels) widthshow 180 232.650146 M 0.957672 0 32 (sharing a memory object. A full discussion of this topic \(distrib) widthshow 442.976837 232.650146 M 0.957672 0 32 (uted shared memory\) is) widthshow (be) 180.0 244.65 T (yond the scope of this te) 189.29 244.65 T (xt.) 286.63 244.65 T 180 286.983337 360 3.024002 CR 0.25 SL 2 SC 540 288.5 M 180 288.5 L S 0 0 612 792 CR 4 (Times-Bold) 14 1 mymakefontmetric 4 FF (Role of a Memory Manager) 180.0 282.317 T 3 FF (A memory manager has tw) 180.0 306.674 T (o responsibilities:) 288.21 306.674 T 5 (Times-Roman) 7 1 mymakefontmetric 5 FF 180.0 324.674 T 3 FF 193.535995 324.673889 M 0.540314 0 32 widthshow 203.386078 324.673889 M 0.540314 0 32 (aging\323 the memory object \(supplying data to the k) widthshow 408.698669 324.673889 M 0.540314 0 32 (ernel to satisfy page-in requests,) widthshow (accepting the \(modi\336ed\) data back for storage to satisfy page-out requests\).) 193.536 336.674 T 5 FF 180.0 351.674 T 3 FF 193.535995 351.673767 M 1.248322 0 32 (Pro) widthshow 207.276077 351.673767 M 1.248322 0 32 (viding consistenc) widthshow 278.094482 351.673767 M 1.248322 0 32 (y between backing store and the k) widthshow 421.564484 351.673767 M 1.248322 0 32 (ernel\325) widthshow 444.334778 351.673767 M 1.248322 0 32 (s memory object cache) widthshow (or the memory object caches of multiple k) 193.536 363.674 T (ernels.) 362.576 363.674 T (One w) 180.0 387.674 T (ould write a memory manager if one had speci\336c requirements for:) 206.28 387.674 T 5 FF 180.0 405.674 T 3 FF 193.535995 405.673584 M 1.656448 0 32 (Backing storage management \(such as the source of storage or its format, such as) widthshow (compressed or encrypted\).) 193.536 417.674 T 5 FF 180.0 432.673 T 3 FF 193.535995 432.673462 M 0.06488 0 32 (Consistenc) widthshow 237.276077 432.673462 M 0.06488 0 32 (y management of the backing store v) widthshow 385.265442 432.673462 M 0.06488 0 32 (ersus the memory cache. Examples in-) widthshow 193.535995 444.673401 M 2.103729 0 32 (clude mapped \336le support, transaction-based virtual memory or distrib) widthshow 492.075958 444.673401 M 2.103729 0 32 (uted shared) widthshow (memory) 193.536 456.673 T (.) 226.216 456.673 T 5 FF 180.0 471.673 T 3 FF 193.535995 471.673279 M 1.601334 0 32 (P) widthshow 198.946075 471.673279 M 1.601334 0 32 (aging mechanisms. The memory manager has direct in) widthshow 428.605652 471.673279 M 1.601334 0 32 (v) widthshow 433.405762 471.673279 M 1.601334 0 32 (olv) widthshow 446.035828 471.673279 M 1.601334 0 32 (ement with the paging) widthshow 193.535995 483.673218 M 0.139465 0 32 (mechanisms for the objects it manages. It has indirect in\337uence on o) widthshow 468.770203 483.673218 M 0.139465 0 32 (v) widthshow 473.6203 483.673218 M 0.139465 0 32 (erall paging pol-) widthshow (ic) 193.536 495.673 T (y by its actions.) 200.606 495.673 T 180 519.673096 M 0.878403 0 32 (This chapter concentrates on the issues of mechanism and consistenc) widthshow 463.535736 519.673096 M 0.878403 0 32 (y) widthshow 467.886108 519.673096 M 0.878403 0 32 (. The issue of the) widthshow (management of backing store proper is out of scope for this v) 180.0 531.673 T (olume.) 425.59 531.673 T 180 574.006287 360 3.024002 CR 540 575.52 M 180 575.52 L S 0 0 612 792 CR 4 FF (Memory Object State) 180.0 569.34 T 3 FF 180 593.696899 M 0.599243 0 32 (Most of the services of a memory manager concern indi) widthshow 408.703369 593.696899 M 0.599243 0 32 (vidual pages or ranges of pages.) widthshow 180 605.696838 M 0.331802 0 32 (Certain operations, mostly initialization and termination, concern the memory object as a) widthshow (whole.) 180.0 617.697 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Initialization) 180.0 649.03 T 3 FF (There are tw) 180.0 665.697 T (o broad phases of memory object initialization.) 230.43 665.697 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 95 95 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (91 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Memory Object State) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 0 SC 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666626 M 0.037796 0 32 (A port representing the abstract memory object must be created and made a) widthshow 374.403687 114.666626 M 0.037796 0 32 (v) widthshow 379.153839 114.666626 M 0.037796 0 32 (ailable to cli-) widthshow 72 126.666565 M 0.657959 0 32 (ents that wish to ) widthshow 1 FF 142.411835 126.666565 M 0.657959 0 32 (vm_map) widthshow 3 FF 179.631836 126.666565 M 0.657959 0 32 ( the object. There is nothing special about this port relati) widthshow 411.771576 126.666565 M 0.657959 0 32 (v) widthshow 416.621643 126.666565 M 0.657959 0 32 (e to) widthshow 72 138.666504 M 0.61763 0 32 (port management. The memory manager is free to destro) widthshow 304.291138 138.666504 M 0.61763 0 32 (y it when it chooses. Normally) widthshow 429.499634 138.666504 M 0.61763 0 32 (,) widthshow 72 150.666443 M 0.625839 0 32 (this w) widthshow 96.695892 150.666443 M 0.625839 0 32 (ould not be done until the object is kno) widthshow 257.562744 150.666443 M 0.625839 0 32 (wn to not be in use \(until all ) widthshow 1 FF 377.569458 150.666443 M 0.625839 0 32 (memory_ob-) widthshow (ject_terminate) 72.0 162.666 T 3 FF ( messages ha) 134.19 162.666 T (v) 186.2 162.666 T (e been recei) 191.05 162.666 T (v) 238.55 162.666 T (ed\). ) 243.4 162.666 T 72 186.666321 M 0.193283 0 32 (The abstract memory object is not kno) widthshow 226.779846 186.666321 M 0.193283 0 32 (wn to the k) widthshow 271.979736 186.666321 M 0.193283 0 32 (ernel until some client performs a ) widthshow 1 FF 410.339478 186.666321 M 0.193283 0 32 (vm_-) widthshow 72 198.66626 M 0.217468 0 32 (map) widthshow 3 FF 90.889999 198.66626 M 0.217468 0 32 ( operation ag) widthshow 143.48497 198.66626 M 0.217468 0 32 (ainst the abstract memory object port. This results in a ) widthshow 1 FF 365.35968 198.66626 M 0.217468 0 32 (memory_objec-) widthshow 72 210.666199 M 4.044495 0 32 (t_init) widthshow 3 FF 94.779999 210.666199 M 4.044495 0 32 ( message being sent to the memory manager) widthshow 300.01178 210.666199 M 4.044495 0 32 (. The manager responds with) widthshow 1 FF 72 222.666138 M 2.807083 0 32 (memory_object_r) widthshow 147.900116 222.666138 M 2.807083 0 32 (eady ) widthshow 3 FF 173.207199 222.666138 M 2.807083 0 32 (\(or ) widthshow 1 FF 190.174286 222.666138 M 2.807083 0 32 (memory_object_set_attrib) widthshow 302.714417 222.666138 M 2.807083 0 32 (utes) widthshow 3 FF 319.934418 222.666138 M 2.807083 0 32 ( if an old form manager\)) widthshow (when ready) 72.0 234.666 T (.) 117.72 234.666 T 72 258.666016 M 0.81749 0 32 (The ) widthshow 1 FF 90.867493 258.666016 M 0.81749 0 32 (memory_object_init) widthshow 3 FF 176.957504 258.666016 M 0.81749 0 32 ( message carries a send right to the memory cache name port.) widthshow 72 270.665955 M 0.890579 0 32 (This port serv) widthshow 129.181244 270.665955 M 0.890579 0 32 (es a single purpose: it is the port returned by ) widthshow 1 FF 318.067047 270.665955 M 0.890579 0 32 (vm_r) widthshow 340.657166 270.665955 M 0.890579 0 32 (egion) widthshow 3 FF 363.437134 270.665955 M 0.890579 0 32 ( in an attempt to) widthshow 72 282.665894 M 0.753052 0 32 (pro) widthshow 85.180084 282.665894 M 0.753052 0 32 (vide the identity of virtual memory re) widthshow 240.088486 282.665894 M 0.753052 0 32 (gions. This port is normally discarded once re-) widthshow (cei) 72.0 294.666 T (v) 83.41 294.666 T (ed.) 88.26 294.666 T 72 318.665771 M 0.766632 0 32 (The memory cache control port is the important v) widthshow 276.743225 318.665771 M 0.766632 0 32 (alue in the ) widthshow 1 FF 323.203125 318.665771 M 0.766632 0 32 (memory_object_init) widthshow 3 FF 409.293121 318.665771 M 0.766632 0 32 ( mes-) widthshow 72 330.66571 M 0.207092 0 32 (sage. The manager sa) widthshow 158.501404 330.66571 M 0.207092 0 32 (v) widthshow 163.351486 330.66571 M 0.207092 0 32 (es this port as the identi\336cation of the object being manipulated by) widthshow 72 342.665649 M -0.012894 0 32 (future k) widthshow 103.267166 342.665649 M -0.012894 0 32 (ernel requests. All k) widthshow 183.668549 342.665649 M -0.012894 0 32 (ernel\320-to\320manager messages \(e) widthshow 309.562866 342.665649 M -0.012894 0 32 (xcept ) widthshow 1 FF 333.709961 342.665649 M -0.012894 0 32 (memory_object_termi-) widthshow 72 354.665588 M 0.431976 0 32 (nate) widthshow 3 FF 90.330002 354.665588 M 0.431976 0 32 (\) pro) widthshow 109.772064 354.665588 M 0.431976 0 32 (vide a send right to this memory cache control port. These e) widthshow 354.333923 354.665588 M 0.431976 0 32 (xtra send rights ac-) widthshow (cumulate in the manager which must handle and dispose of them appropriately) 72.0 366.666 T (.) 386.58 366.666 T 72 390.665466 M 0.795364 0 32 (It is common practice to merely count these accumulated rights and to de-allocate them) widthshow (in b) 72.0 402.665 T (unches, thereby a) 87.08 402.665 T (v) 156.58 402.665 T (oiding a \(common\) e) 161.38 402.665 T (xtra k) 244.83 402.665 T (ernel interaction.) 267.78 402.665 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (T) 72.0 433.999 T (ermination) 78.901 433.999 T 3 FF 72 450.665283 M 1.186096 0 32 (At some future time, unkno) widthshow 186.764526 450.665283 M 1.186096 0 32 (wn to the manager) widthshow 264.073059 450.665283 M 1.186096 0 32 (, all clients will ) widthshow 1 FF 332.987427 450.665283 M 1.186096 0 32 (vm_deallocate) widthshow 3 FF 394.087433 450.665283 M 1.186096 0 32 ( their ac-) widthshow 72 462.665222 M 0.561523 0 32 (cesses to the object. This will cause a ) widthshow 1 FF 228.412201 462.665222 M 0.561523 0 32 (memory_object_terminate) widthshow 3 FF 341.702209 462.665222 M 0.561523 0 32 ( message to be sent to) widthshow (the manager) 72.0 474.665 T (.) 120.6 474.665 T 72 498.6651 M 0.920898 0 32 (Alternately) widthshow 116.340363 498.6651 M 0.920898 0 32 (, the manager can in) widthshow 200.434189 498.6651 M 0.920898 0 32 (v) widthshow 205.234299 498.6651 M 0.920898 0 32 (ok) widthshow 215.134354 498.6651 M 0.920898 0 32 (e ) widthshow 1 FF 222.995255 498.6651 M 0.920898 0 32 (memory_object_destr) widthshow 316.115356 498.6651 M 0.920898 0 32 (oy ) widthshow 3 FF 329.536255 498.6651 M 0.920898 0 32 (to destro) widthshow 365.077209 498.6651 M 0.920898 0 32 (y the object; the) widthshow 72 510.665039 M 0.887711 0 32 (k) widthshow 76.900055 510.665039 M 0.887711 0 32 (ernel\325) widthshow 99.670364 510.665039 M 0.887711 0 32 (s response is the same \() widthshow 1 FF 198.258926 510.665039 M 0.887711 0 32 (memory_object_terminate) widthshow 3 FF 311.54895 510.665039 M 0.887711 0 32 (\). If the manager de-allocates) widthshow 72 522.664978 M 1.276855 0 32 (the abstract memory object port \(as w) widthshow 230.641205 522.664978 M 1.276855 0 32 (ould happen if it died\), the result is the same as) widthshow 1 FF 72 534.664917 M 1.114914 0 32 (memory_object_destr) widthshow 165.120117 534.664917 M 1.114914 0 32 (oy) widthshow 3 FF 174.470474 534.664917 M 1.114914 0 32 (. Destro) widthshow 207.145447 534.664917 M 1.114914 0 32 (ying the object discards its pages. An e) widthshow 370.889954 534.664917 M 1.114914 0 32 (xplicit lock re-) widthshow (quest \(\337ush\) sequence should be used if the pages are desired.) 72.0 546.665 T 72 570.664795 M 1.940872 0 32 (There is a race between the deli) widthshow 210.015396 570.664795 M 1.940872 0 32 (v) widthshow 214.865479 570.664795 M 1.940872 0 32 (ery of the ) widthshow 1 FF 261.508118 570.664795 M 1.940872 0 32 (memory_object_terminate) widthshow 3 FF 374.798126 570.664795 M 1.940872 0 32 ( message and) widthshow 72 582.664734 M 1.070709 0 32 (manager in) widthshow 117.380936 582.664734 M 1.070709 0 32 (v) widthshow 122.181046 582.664734 M 1.070709 0 32 (ok) widthshow 132.0811 582.664734 M 1.070709 0 32 (ed operations upon the object. That is, the k) widthshow 315.526855 582.664734 M 1.070709 0 32 (ernel can send the terminate) widthshow 72 594.664673 M 0.408401 0 32 (message \(and disa) widthshow 145.376923 594.664673 M 0.408401 0 32 (v) widthshow 150.177032 594.664673 M 0.408401 0 32 (o) widthshow 154.92717 594.664673 M 0.408401 0 32 (w an) widthshow 174.345657 594.664673 M 0.408401 0 32 (y kno) widthshow 197.004196 594.664673 M 0.408401 0 32 (wledge of the object\) before the manager realizes this and) widthshow 72 606.664612 M 0.064117 0 32 (is therefore still trying to manipulate the object. F) widthshow 270.963013 606.664612 M 0.064117 0 32 (or this reason, the ) widthshow 1 FF 344.819519 606.664612 M 0.064117 0 32 (memory_object_ter-) widthshow 72 618.664551 M 0.787811 0 32 (minate) widthshow 3 FF 101.440002 618.664551 M 0.787811 0 32 ( message includes the recei) widthshow 213.201401 618.664551 M 0.787811 0 32 (v) widthshow 218.051483 618.664551 M 0.787811 0 32 (e right to the memory cache control port \(as well as) widthshow 72 630.66449 M 1.546631 0 32 (the memory cache name port\). When the manager recei) widthshow 305.993225 630.66449 M 1.546631 0 32 (v) widthshow 310.843323 630.66449 M 1.546631 0 32 (es the memory cache control) widthshow 72 642.664429 M 0.299942 0 32 (port, it should drain an) widthshow 163.879852 642.664429 M 0.299942 0 32 (y messages from this port, if the) widthshow 294.129578 642.664429 M 0.299942 0 32 (y carry v) widthshow 330.019623 642.664429 M 0.299942 0 32 (aluable information. This) widthshow 72 654.664368 M 1.120605 0 32 (w) widthshow 79.120056 654.664368 M 1.120605 0 32 (ould be the case if ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 159.983093 654.664368 M 1.120605 0 32 (pr) widthshow 168.503296 654.664368 M 1.120605 0 32 (ecious) widthshow 3 FF 194.053299 654.664368 M 1.120605 0 32 ( pages could ha) widthshow 259.145233 654.664368 M 1.120605 0 32 (v) widthshow 263.9953 654.664368 M 1.120605 0 32 (e been supplied to the k) widthshow 364.208405 654.664368 M 1.120605 0 32 (ernel during this) widthshow (race.) 72.0 666.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 96 96 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (92 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 0.572464 0 32 (It does not follo) widthshow 245.07753 112.650635 M 0.572464 0 32 (w that when a memory object is terminated that no clients hold rights to) widthshow 180 124.650574 M 1.275513 0 32 (the abstract memory object port. Indeed, the ) widthshow 0 FF 368.058594 124.650574 M 1.275513 0 32 (memory_object_terminate) widthshow 3 FF 481.348633 124.650574 M 1.275513 0 32 ( message may) widthshow 180 136.650513 M 0.5672 0 32 (be follo) widthshow 211.147339 136.650513 M 0.5672 0 32 (wed by a subsequent ) widthshow 0 FF 298.956146 136.650513 M 0.5672 0 32 (memory_object_init) widthshow 3 FF 385.046143 136.650513 M 0.5672 0 32 ( message. \(Actually) widthshow 464.680908 136.650513 M 0.5672 0 32 (, it is currently the) widthshow 180 148.650452 M 0.629959 0 32 (case that the subsequent initialization message can precede the termination message, b) widthshow 532.219727 148.650452 M 0.629959 0 32 (ut) widthshow 180 160.650391 M 0.733978 0 32 (this is scheduled to be corrected in the future.\) Of course, when multiple k) widthshow 486.331787 160.650391 M 0.733978 0 32 (ernels are in-) widthshow (v) 180.0 172.65 T (olv) 184.8 172.65 T (ed, multiple initialization messages can be recei) 197.43 172.65 T (v) 388.54 172.65 T (ed from the v) 393.39 172.65 T (arious k) 446.741 172.65 T (ernels.) 478.581 172.65 T 180 214.983566 360 3.024002 CR 0.25 SL 2 SC 540 216.5 M 180 216.5 L S 0 0 612 792 CR 4 (Times-Bold) 14 1 mymakefontmetric 4 FF (P) 180.0 210.317 T (age-in and P) 188.414 210.317 T (age-out) 262.95 210.317 T 3 FF 180 234.674194 M 1.315689 0 32 (The basic k) widthshow 228.631439 234.674194 M 1.315689 0 32 (ernel page-in request and k) widthshow 342.094269 234.674194 M 1.315689 0 32 (ernel page-out e) widthshow 408.895813 234.674194 M 1.315689 0 32 (viction path for a page is f) widthshow 521.669983 234.674194 M 1.315689 0 32 (airly) widthshow 180 246.674133 M 0.419266 0 32 (simple. What complicates the situation is the asynchronous nature of this path and its re-) widthshow (lationship to the \(typically asynchronous\) backing store update path.) 180.0 258.674 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (In-T) 180.0 290.007 T (ransit P) 202.452 290.007 T (ages) 242.665 290.007 T 3 FF 180 306.674011 M 0.92308 0 32 (The v) widthshow 203.723221 306.674011 M 0.92308 0 32 (arious states of a page \(as visible to the memory manager\) for the basic page-in /) widthshow (page-out path are sho) 180.0 318.674 T (wn in FIGURE 1.) 265.56 318.674 T (The k) 180.0 616.634 T (ernel mak) 202.95 616.634 T (es a v) 242.56 616.634 T (ariety of guarantees in) 265.08 616.634 T (v) 353.82 616.634 T (olving its protocol:) 358.621 616.634 T 6 (Times-Roman) 7 1 mymakefontmetric 6 FF 180.0 634.634 T 3 FF 193.535995 634.633911 M 2.321503 0 32 (No page-in requests \() widthshow 0 FF 286.310516 634.633911 M 2.321503 0 32 (memory_object_data_r) widthshow 386.100647 634.633911 M 2.321503 0 32 (equest) widthshow 3 FF 413.320618 634.633911 M 2.321503 0 32 (\) will be made for a resident) widthshow (page.) 193.536 646.634 T 6 FF 180.0 661.634 T 3 FF 193.535995 661.633789 M 0.608704 0 32 (No page-in request will be made for a page with an outstanding \(unsatis\336ed\) page-in) widthshow (request.) 193.536 673.634 T 171 322.007324 378 273.960022 CR 1 G 171 322.007324 378 273.960022 NF 180 565.007324 360 27 NF 180 565.007324 360 13.031998 CR 0 G 540 571.52 M 252 571.52 L S 0 SC 243 571.52 M 180 571.52 L S 171 322.007324 378 273.960022 CR 7 (Helvetica-Bold) 9 1 mymakefontmetric 7 FF (FIGURE 1) 180.0 584.039 T 2 FF (Basic P) 252.0 584.039 T (age-in / P) 280.161 584.039 T (age-out P) 316.071 584.039 T (ath) 352.224 584.039 T 1 G 0 360 99 36 490.5 538.007324 AF 0.5 SL 0 G 0 360 99 36 490.5 538.007324 AS 3 FF (in-k) 472.456 541.42 T (ernel) 488.466 541.42 T 1 G 0 360 99 36 229.5 430.007324 AF 0 G 0 360 99 36 229.5 430.007324 AS (backing-store) 202.292 433.42 T 1 G 0 360 99 36 490.5 430.007324 AF 0 G 0 360 99 36 490.5 430.007324 AS (manager) 455.063 433.42 T (-memory) 489.293 433.42 T 1 G 0 360 99 36 337.5 511.007324 AF 0 G 0 360 99 36 337.5 511.007324 AS (being-written) 310.568 514.42 T 1 G 0 360 99 36 337.5 349.007324 AF 0 G 0 360 99 36 337.5 349.007324 AS (being-read) 316.125 352.42 T 510.72 458 M 514.02 457.94 L 510.51 446.47 L 507.41 458.06 L F 510.72 458 M 511.87 521.77 L S 471.22 509.89 M 467.92 509.88 L 471.19 521.42 L 474.53 509.9 L F 471.24 509.9 M 471.44 446.62 L S 394.46 502.21 M 391.93 500.07 L 386.99 511 L 396.98 504.35 L F 394.46 502.21 M 447.77 439.09 L S 251.8 456.62 M 254.54 454.77 L 245.36 447.05 L 249.06 458.47 L F 251.8 456.63 M 288 511.01 L S 284.98 365.25 M 287.62 367.25 L 291.95 356.06 L 282.35 363.25 L F 284.99 365.25 M 248.8 413.43 L S 446.61 409.91 M 444.5 412.45 L 455.49 417.28 L 448.73 407.36 L F 446.62 409.91 M 382.18 356.75 L S 8 (Times-Roman) 12 1 mymakefontmetric 8 FF (DS) 450.0 481.405 T (DR) 517.0 481.0 T (WR) 403.679 499.405 T (R) 406.0 373.405 T (W) 252.0 492.199 T (RR) 254.001 373.405 T 1 G 297 394.007324 108 81 NF 0 G (DS) 297.0 400.674 T 3 FF 312.336 400.674 T 8 FF (DR) 297.0 412.674 T 3 FF 313.668 412.674 T 8 FF (RR) 297.0 424.674 T 3 FF 313.008 424.674 T 8 FF (R) 297.0 436.674 T 3 FF 305.004 436.674 T 8 FF (WR) 297.0 448.674 T 3 FF 316.332 448.674 T 8 FF (W) 297.0 460.674 T 3 FF 308.328 460.674 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 97 97 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (93 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (P) 72.0 55.824 T (age-in and P) 77.409 55.824 T (age-out) 125.325 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 7 1 mymakefontmetric 3 FF 72.0 114.667 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 85.535995 114.666626 M 1.863892 0 32 (P) widthshow 90.946075 114.666626 M 1.863892 0 32 (age-out requests \() widthshow 1 FF 165.76387 114.666626 M 1.863892 0 32 (memory_object_data_r) widthshow 265.553986 114.666626 M 1.863892 0 32 (etur) widthshow 283.174072 114.666626 M 1.863892 0 32 (n ) widthshow 4 FF 293.097961 114.666626 M 1.863892 0 32 (\(ne) widthshow 305.618103 114.666626 M 1.863892 0 32 (w form\) or ) widthshow 1 FF 357.029785 114.666626 M 1.863892 0 32 (memory_object_-) widthshow (data_write) 85.536 126.667 T 4 FF ( \(old form\)\) will precede a subsequent page-in request for the same page.) 131.636 126.667 T 72 150.666504 M 1.087753 0 32 (The page-in path by itself presents no special dif) widthshow 274.862183 150.666504 M 1.087753 0 32 widthshow 299.772522 150.666504 M 1.087753 0 32 (. The k) widthshow 329.898102 150.666504 M 1.087753 0 32 (ernel will request a page) widthshow 72 162.666443 M 1.695511 0 32 (\() widthshow 1 FF 75.330002 162.666443 M 1.695511 0 32 (memory_object_data_r) widthshow 175.120117 162.666443 M 1.695511 0 32 (equest) widthshow 4 FF 202.340118 162.666443 M 1.695511 0 32 (\). The manager will request the page from its backing) widthshow 72 174.666382 M 0.19458 0 32 (store; when the page is recei) widthshow 186.303055 174.666382 M 0.19458 0 32 (v) widthshow 191.153137 174.666382 M 0.19458 0 32 (ed it can be supplied to the k) widthshow 307.125244 174.666382 M 0.19458 0 32 (ernel \() widthshow 1 FF 333.139832 174.666382 M 0.19458 0 32 (memory_object_data_-) widthshow 72 186.666321 M 2.363968 0 32 (supply ) widthshow 4 FF 105.213959 186.666321 M 2.363968 0 32 (\(ne) widthshow 117.7341 186.666321 M 2.363968 0 32 (w form\) or ) widthshow 1 FF 170.646011 186.666321 M 2.363968 0 32 (memory_object_data_pr) widthshow 275.996124 186.666321 M 2.363968 0 32 (o) widthshow 280.896179 186.666321 M 2.363968 0 32 (vided) widthshow 4 FF 304.236176 186.666321 M 2.363968 0 32 ( \(old form\)\). When a page is) widthshow 72 198.66626 M 0.825378 0 32 (e) widthshow 76.19014 198.66626 M 0.825378 0 32 (victed, it will be supplied by the k) widthshow 217.977844 198.66626 M 0.825378 0 32 (ernel to the manager \() widthshow 1 FF 309.029358 198.66626 M 0.825378 0 32 (memory_object_data_r) widthshow 408.819489 198.66626 M 0.825378 0 32 (etur) widthshow 426.439575 198.66626 M 0.825378 0 32 (n) widthshow 4 FF 72 210.666199 M 2.339966 0 32 (\(ne) widthshow 84.520142 210.666199 M 2.339966 0 32 (w form\) or ) widthshow 1 FF 137.360046 210.666199 M 2.339966 0 32 (memory_object_data_write) widthshow 4 FF 255.100067 210.666199 M 2.339966 0 32 ( \(old form\)\). The manager will write the) widthshow (page out to its backing store.) 72.0 222.666 T 72 246.666077 M 0.952454 0 32 (The dif) widthshow 101.862595 246.666077 M 0.952454 0 32 widthshow 72 258.666016 M 0.35701 0 32 (paths. The k) widthshow 121.774078 258.666016 M 0.35701 0 32 (ernel may request a page that it has just e) widthshow 289.427307 258.666016 M 0.35701 0 32 (victed. That is, since the k) widthshow 395.822449 258.666016 M 0.35701 0 32 (ernel has) widthshow 72 270.665955 M 1.159088 0 32 (no kno) widthshow 100.409225 270.665955 M 1.159088 0 32 (wledge or understanding of the manager\325) widthshow 270.334991 270.665955 M 1.159088 0 32 (s interaction with its backing store, the) widthshow 72 282.665894 M 1.047287 0 32 (k) widthshow 76.900055 282.665894 M 1.047287 0 32 (ernel may request a page that is in transit to the manager\325) widthshow 316.99054 282.665894 M 1.047287 0 32 (s backing store. This means) widthshow 72 294.665833 M 0.238449 0 32 (that the manager cannot just blindly send pages \(asynchronously\) to its backing store and) widthshow 72 306.665771 M 0.236893 0 32 (for) widthshow 83.480103 306.665771 M 0.236893 0 32 (get about them; the manager must k) widthshow 228.121521 306.665771 M 0.236893 0 32 (eep track of outstanding backing store acti) widthshow 398.703033 306.665771 M 0.236893 0 32 (vities so) widthshow 72 318.66571 M 0.704987 0 32 (that, if the k) widthshow 122.345016 318.66571 M 0.704987 0 32 (ernel should request a page on transit to the backing store, the manager can) widthshow 72 330.665649 M 0.520508 0 32 (either supply a cop) widthshow 149.281586 330.665649 M 0.520508 0 32 (y it is still holding or the manager will w) widthshow 316.926208 330.665649 M 0.520508 0 32 (ait for the page to be kno) widthshow 419.779419 330.665649 M 0.520508 0 32 (wn) widthshow 72 342.665588 M 1.259232 0 32 (to ha) widthshow 92.779343 342.665588 M 1.259232 0 32 (v) widthshow 97.629425 342.665588 M 1.259232 0 32 (e to reached the backing store \(a reply w) widthshow 269.773376 342.665588 M 1.259232 0 32 (as recei) widthshow 301.042725 342.665588 M 1.259232 0 32 (v) widthshow 305.892822 342.665588 M 1.259232 0 32 (ed\) before requesting the page) widthshow (ag) 72.0 354.666 T (ain from backing store.) 81.39 354.666 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (P) 72.0 385.999 T (age \322Stealing\323) 79.212 385.999 T 4 FF 72 402.665405 M 0.834961 0 32 (Whene) widthshow 100.070145 402.665405 M 0.834961 0 32 (v) widthshow 104.920227 402.665405 M 0.834961 0 32 (er a page is sent to the k) widthshow 207.035019 402.665405 M 0.834961 0 32 (ernel in a ) widthshow 1 FF 249.249908 402.665405 M 0.834961 0 32 (memory_object_data_supply ) widthshow 4 FF 376.464874 402.665405 M 0.834961 0 32 (or ) widthshow 1 FF 388.129822 402.665405 M 0.834961 0 32 (memory_-) widthshow 72 414.665344 M 1.324387 0 32 (object_data_pr) widthshow 136.810104 414.665344 M 1.324387 0 32 (o) widthshow 141.710159 414.665344 M 1.324387 0 32 (vided) widthshow 4 FF 165.050156 414.665344 M 1.324387 0 32 ( message or sent to the manager in a ) widthshow 1 FF 324.439636 414.665344 M 1.324387 0 32 (memory_object_data_r) widthshow 424.229767 414.665344 M 1.324387 0 32 (e-) widthshow 72 426.665283 M 2.369949 0 32 (tur) widthshow 85.180084 426.665283 M 2.369949 0 32 (n) widthshow 4 FF 90.740082 426.665283 M 2.369949 0 32 ( or ) widthshow 1 FF 108.809982 426.665283 M 2.369949 0 32 (memory_object_data_write) widthshow 4 FF 226.550003 426.665283 M 2.369949 0 32 ( message \(or in interactions with backing store,) widthshow 72 438.665222 M 1.499252 0 32 (most lik) widthshow 105.909302 438.665222 M 1.499252 0 32 (ely\), it is logically copied. Performance is clearly impro) widthshow 341.053406 438.665222 M 1.499252 0 32 (v) widthshow 345.903503 438.665222 M 1.499252 0 32 (ed if the page is not) widthshow 72 450.665161 M 0.228531 0 32 (ph) widthshow 81.950027 450.665161 M 0.228531 0 32 (ysically copied. A page can be ) widthshow 6 (Times-Italic) 10 1 mymakefontmetric 6 FF 208.01123 450.665161 M 0.228531 0 32 (stolen) widthshow 4 FF 231.90123 450.665161 M 0.228531 0 32 ( \(that is, directly mo) widthshow 313.495422 450.665161 M 0.228531 0 32 (v) widthshow 318.34552 450.665161 M 0.228531 0 32 (ed \(mapped\) from one place) widthshow 72 462.6651 M 0.29892 0 32 (to another\) if three conditions hold: the page is in memory) widthshow 307.649567 462.6651 M 0.29892 0 32 (, it is not shared and if it is de-) widthshow 72 474.665039 M 1.41861 0 32 (allocated from its source as it is sent in the message \(de-allocate \337ag set\). The k) widthshow 412.009216 474.665039 M 1.41861 0 32 (ernel) widthshow 72 486.664978 M 2.076904 0 32 (transfers pages to the manager in this w) widthshow 245.018402 486.664978 M 2.076904 0 32 (ay) widthshow 253.808762 486.664978 M 2.076904 0 32 (. ) widthshow 1 FF 260.885681 486.664978 M 2.076904 0 32 (memory_object_data_supply) widthshow 4 FF 384.765686 486.664978 M 2.076904 0 32 ( allo) widthshow 404.092712 486.664978 M 2.076904 0 32 (ws the) widthshow (manager to specify the de-allocation of the pages it is sending.) 72.0 498.665 T 72 522.664856 M 1.423264 0 32 (Unfortunately) widthshow 127.450363 522.664856 M 1.423264 0 32 (, Mach does not track uses of indi) widthshow 272.143372 522.664856 M 1.423264 0 32 (vidual pages, and therefore cannot tell) widthshow 72 534.664795 M 0.835953 0 32 (whether an indi) widthshow 135.63205 534.664795 M 0.835953 0 32 (vidual page is shared or not. The page stealing code relies on the object) widthshow 72 546.664734 M 0.560608 0 32 (reference count that records all mappings or other uses of the object. If the count is one,) widthshow 72 558.664673 M 1.021072 0 32 (then the object is not shared, and if the object is shared, then the count will be at least) widthshow 72 570.664612 M 0.335953 0 32 (tw) widthshow 81.900055 570.664612 M 0.335953 0 32 (o. F) widthshow 97.646088 570.664612 M 0.335953 0 32 (alse page sharing will be seen when disjoint ranges of an object are mapped. Man-) widthshow 72 582.664551 M 0.524979 0 32 (agers must therefore a) widthshow 161.955063 582.664551 M 0.524979 0 32 (v) widthshow 166.755173 582.664551 M 0.524979 0 32 (oid creating such mappings \(e.g., by de-allocating memory in the) widthshow (middle of the object\). T) 72.0 594.665 T (w) 165.91 594.665 T (o possible techniques are:) 173.031 594.665 T 3 FF 72.0 612.664 T 4 FF (Creating a separate \(b) 85.536 612.664 T (uf) 172.806 612.664 T (fer\) re) 180.886 612.664 T (gion of memory and using it sequentially) 205.436 612.664 T 3 FF 72.0 627.664 T 4 FF 85.535995 627.664368 M 0.26123 0 32 (P) widthshow 90.946075 627.664368 M 0.26123 0 32 (assing memory obtained directly from the Mach de) widthshow 297.214844 627.664368 M 0.26123 0 32 (vice interf) widthshow 338.196136 627.664368 M 0.26123 0 32 (ace \(which returns data) widthshow (in ne) 85.536 639.664 T (wly created memory objects\).) 105.006 639.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 98 98 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (94 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 180 119.983932 360 3.024002 CR 0.25 SL 2 SC 0 G 540 121.5 M 180 121.5 L S 0 0 612 792 CR 3 (Times-Bold) 14 1 mymakefontmetric 3 FF (Strict K) 180.0 115.317 T (er) 227.474 115.317 T (nel and Manager P) 239.696 115.317 T (age Consistency) 353.502 115.317 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 180 139.674561 M 0.77446 0 32 (The e) widthshow 203.114548 139.674561 M 0.77446 0 32 (xternal memory management interactions may in) widthshow 402.947083 139.674561 M 0.77446 0 32 (v) widthshow 407.747192 139.674561 M 0.77446 0 32 (olv) widthshow 420.377258 139.674561 M 0.77446 0 32 (e multiple pages, b) widthshow 498.050781 139.674561 M 0.77446 0 32 (ut the) widthshow 521.175293 139.674561 M 0.77446 0 32 (y al-) widthshow 180 151.6745 M 1.336899 0 32 (w) widthshow 187.120056 151.6745 M 1.336899 0 32 (ays deal with whole pages. Because these interactions are asynchronous, it is not, in) widthshow 180 163.674438 M 0.327942 0 32 (general, possible for the memory manager to kno) widthshow 378.675751 163.674438 M 0.327942 0 32 (w precisely the state of the pages at an) widthshow 534.99939 163.674438 M 0.327942 0 32 (y) widthshow 180 175.674377 M 0.118286 0 32 (gi) widthshow 187.530136 175.674377 M 0.118286 0 32 (v) widthshow 192.380219 175.674377 M 0.118286 0 32 (en time. That is, a page may be in-transit \(in a message\) or in the process of being ma-) widthshow (nipulated by the k) 180.0 187.674 T (ernel \(or the hardw) 251.84 187.674 T (are\).) 328.1 187.674 T 180 211.674255 M 0.725708 0 32 (A simple memory manager such as the def) widthshow 355.780029 211.674255 M 0.725708 0 32 (ault manager is not concerned with this class) widthshow 180 223.674194 M 0.599899 0 32 (of dif) widthshow 202.290039 223.674194 M 0.599899 0 32 widthshow 227.200394 223.674194 M 0.599899 0 32 (. This manager does not synchronize with k) widthshow 405.719757 223.674194 M 0.599899 0 32 (ernel manipulations \(actually cli-) widthshow 180 235.674133 M 1.38855 0 32 (ent manipulations\) of the pages. The manager deals with one k) widthshow 444.575562 235.674133 M 1.38855 0 32 (ernel; if that k) widthshow 505.021301 235.674133 M 1.38855 0 32 (ernel re-) widthshow 180 247.674072 M 1.716385 0 32 (quests a page, the manager kno) widthshow 313.302063 247.674072 M 1.716385 0 32 (ws its contents are the current contents; if that k) widthshow 520.009644 247.674072 M 1.716385 0 32 (ernel) widthshow 180 259.674011 M 1.043549 0 32 (returns the page, the result must be the latest contents. No other k) widthshow 454.052673 259.674011 M 1.043549 0 32 (ernel interactions are) widthshow (meaningful.) 180.0 271.674 T 180 295.673889 M 1.527435 0 32 (Some memory managers, ho) widthshow 298.762451 295.673889 M 1.527435 0 32 (we) widthshow 310.172607 295.673889 M 1.527435 0 32 (v) widthshow 315.022675 295.673889 M 1.527435 0 32 (er) widthshow 322.392883 295.673889 M 1.527435 0 32 (, need to manipulate their pages at times other than) widthshow (when the k) 180.0 307.674 T (ernel v) 223.78 307.674 T (oluntarily gi) 251.07 307.674 T (v) 299.99 307.674 T (es up access. Possible reasons for this are:) 304.84 307.674 T 5 (Times-Roman) 7 1 mymakefontmetric 5 FF 180.0 325.674 T 4 FF (The manager supports a message interf) 193.536 325.674 T (ace to access the memory object.) 349.786 325.674 T 5 FF 180.0 340.674 T 4 FF 193.535995 340.673706 M 0.487167 0 32 (Lik) widthshow 207.32605 340.673706 M 0.487167 0 32 (e the netw) widthshow 249.300446 340.673706 M 0.487167 0 32 (ork shared memory serv) widthshow 347.532043 340.673706 M 0.487167 0 32 (er) widthshow 354.902283 340.673706 M 0.487167 0 32 (, the manager needs to pro) widthshow 462.718201 340.673706 M 0.487167 0 32 (vide the latest con-) widthshow (tents of the page to another node.) 193.536 352.674 T 5 FF 180.0 367.674 T 4 FF 193.535995 367.673584 M 1.179459 0 32 (The manager is pro) widthshow 274.40448 367.673584 M 1.179459 0 32 (viding transaction semantics for the pages and needs their v) widthshow 523.339722 367.673584 M 1.179459 0 32 (alue) widthshow (when a client \322commits\323 them.) 193.536 379.674 T (These memory managers need to synchronize with k) 180.0 403.673 T (ernel manipulations of the pages.) 390.69 403.673 T 180 427.673401 M 0.561371 0 32 (There are a v) widthshow 233.904266 427.673401 M 0.561371 0 32 (ariety of consistenc) widthshow 312.637085 427.673401 M 0.561371 0 32 (y policies that a memory manager may pro) widthshow 487.776794 427.673401 M 0.561371 0 32 (vide with re-) widthshow 180 439.67334 M 0.638763 0 32 (spect to the vie) widthshow 241.936432 439.67334 M 0.638763 0 32 (w that it and its multiple clients \(or k) widthshow 394.726593 439.67334 M 0.638763 0 32 (ernels\) ha) widthshow 434.315491 439.67334 M 0.638763 0 32 (v) widthshow 439.165558 439.67334 M 0.638763 0 32 (e to a gi) widthshow 472.771973 439.67334 M 0.638763 0 32 (v) widthshow 477.62207 439.67334 M 0.638763 0 32 (en memory ob-) widthshow 180 451.673279 M 0.359833 0 32 (ject. Gi) widthshow 209.549973 451.673279 M 0.359833 0 32 (v) widthshow 214.400055 451.673279 M 0.359833 0 32 (en suf) widthshow 238.670029 451.673279 M 0.359833 0 32 widthshow 301.909851 451.673279 M 0.359833 0 32 (v) widthshow 306.759918 451.673279 M 0.359833 0 32 (el information about client accesses to memory) widthshow 497.129272 451.673279 M 0.359833 0 32 (, adv) widthshow 516.67926 451.673279 M 0.359833 0 32 (anced) widthshow (consistenc) 180.0 463.673 T (y protocols are possible.) 221.51 463.673 T 180 487.673157 M 1.132431 0 32 (The most typical consistenc) widthshow 294.62738 487.673157 M 1.132431 0 32 (y polic) widthshow 323.109894 487.673157 M 1.132431 0 32 (y) widthshow 327.460266 487.673157 M 1.132431 0 32 (, that supplied by the def) widthshow 431.902466 487.673157 M 1.132431 0 32 (ault memory manager and) widthshow 180 499.673096 M 0.487137 0 32 (the XMM library) widthshow 249.204636 499.673096 M 0.487137 0 32 (, is full read\320write consistenc) widthshow 368.483276 499.673096 M 0.487137 0 32 (y) widthshow 372.833618 499.673096 M 0.487137 0 32 (. This polic) widthshow 418.937988 499.673096 M 0.487137 0 32 (y mimics standard hardw) widthshow 521.119446 499.673096 M 0.487137 0 32 (are\325) widthshow 536.109741 499.673096 M 0.487137 0 32 (s) widthshow 180 511.673035 M 0.921631 0 32 (shared memory polic) widthshow 266.123352 511.673035 M 0.921631 0 32 (y\321once a client modi\336es a memory object, those changes are \(ef-) widthshow (fecti) 180.0 523.673 T (v) 197.52 523.673 T (ely\) immediately visible to all clients referencing the memory object.) 202.37 523.673 T 180 547.672913 M 0.00354 0 32 (Clients on an) widthshow 232.637161 547.672913 M 0.00354 0 32 (y gi) widthshow 247.670837 547.672913 M 0.00354 0 32 (v) widthshow 252.52092 547.672913 M 0.00354 0 32 (en node that share a memory object \() widthshow 0 FF 400.565735 547.672913 M 0.00354 0 32 (vm_map) widthshow 4 FF 437.785706 547.672913 M 0.00354 0 32 ( the same abstract memo-) widthshow 180 559.672852 M 0.055313 0 32 (ry object port\) automatically recei) widthshow 316.051392 559.672852 M 0.055313 0 32 (v) widthshow 320.901489 559.672852 M 0.055313 0 32 (e full read\320write consistenc) widthshow 431.167542 559.672852 M 0.055313 0 32 (y) widthshow 435.517883 559.672852 M 0.055313 0 32 (. It may seem that a mem-) widthshow 180 571.672791 M 2.76535 0 32 (ory manager could enjo) widthshow 282.896118 571.672791 M 2.76535 0 32 (y this same le) widthshow 345.662292 571.672791 M 2.76535 0 32 (v) widthshow 350.51239 571.672791 M 2.76535 0 32 (el of consistenc) widthshow 418.10318 571.672791 M 2.76535 0 32 (y with its clients simply by) widthshow 0 FF 180 583.672729 M 1.18248 0 32 (vm_map) widthshow 4 FF 217.220001 583.672729 M 1.18248 0 32 (-ping the object itself. A memory manager does not typically do this, though,) widthshow 4 FF (for tw) 180.0 595.673 T (o reasons:) 204.06 595.673 T 5 FF 180.0 613.673 T 4 FF 193.535995 613.672607 M 0.835953 0 32 (A manager can only share \(ph) widthshow 317.905823 613.672607 M 0.835953 0 32 (ysical\) pages with the k) widthshow 415.579681 613.672607 M 0.835953 0 32 (ernel on which it is e) widthshow 503.209534 613.672607 M 0.835953 0 32 (x) widthshow 508.059631 613.672607 M 0.835953 0 32 (ecuting,) widthshow (which is not necessarily the ones on which its clients are e) 193.536 625.673 T (x) 426.406 625.673 T (ecuting.) 431.256 625.673 T 5 FF 180.0 640.672 T 4 FF 193.535995 640.672485 M 0.193329 0 32 (Direct manager reference to its o) widthshow 325.592804 640.672485 M 0.193329 0 32 (wn memory objects often leads to deadlock. An) widthshow 517.876221 640.672485 M 0.193329 0 32 (y ref-) widthshow 193.535995 652.672424 M 0.215836 0 32 (erence at all to the contents of a memory object must be vie) widthshow 434.166199 652.672424 M 0.215836 0 32 (wed as a potential interac-) widthshow 193.535995 664.672363 M 0.940201 0 32 (tion with its manager) widthshow 280.676819 664.672363 M 0.940201 0 32 (, since the k) widthshow 331.16748 664.672363 M 0.940201 0 32 (ernel can e) widthshow 376.108032 664.672363 M 0.940201 0 32 (vict pages at an) widthshow 440.70874 664.672363 M 0.940201 0 32 (y time. Therefore, if the) widthshow 193.535995 676.672302 M 0.48027 0 32 (manager were b) widthshow 258.156677 676.672302 M 0.48027 0 32 (usy processing some request when it went to touch an object it main-) widthshow 193.535995 688.672241 M 0.286209 0 32 (tains, the result is a circular dependenc) widthshow 350.343353 688.672241 M 0.286209 0 32 (y) widthshow 354.693726 688.672241 M 0.286209 0 32 (. If the pager has only one thread handling re-) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 99 99 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (95 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Strict K) 72.0 55.824 T (er) 102.519 55.824 T (nel and Manager P) 110.376 55.824 T (age Consistency) 183.538 55.824 T 0.25 SL 3.86 setmiterlimit 0 SC 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 85.535995 114.666626 M 1.783096 0 32 (quests for this memory object, it will deadlock. Ev) widthshow 301.86084 114.666626 M 1.783096 0 32 (en if it has multiple threads to) widthshow 85.535995 126.666565 M 0.105591 0 32 (support this object, the pager is most lik) widthshow 246.175186 126.666565 M 0.105591 0 32 (ely holding internal locks on the page in ques-) widthshow (tion when it tries to reference it, ag) 85.536 138.667 T (ain leading to deadlock.) 225.456 138.667 T (When multiple k) 72.0 162.666 T (ernels are in) 139.12 162.666 T (v) 187.59 162.666 T (olv) 192.39 162.666 T (ed, the situation becomes e) 205.02 162.666 T (v) 312.811 162.666 T (en more in) 317.661 162.666 T (v) 360.031 162.666 T (olv) 364.831 162.666 T (ed.) 377.461 162.666 T 72 186.666382 M 0.847473 0 32 (Since the v) widthshow 117.885086 186.666382 M 0.847473 0 32 (arious k) widthshow 150.572617 186.666382 M 0.847473 0 32 (ernels referencing a shared memory object, and the manager manag-) widthshow 72 198.666321 M 0.645676 0 32 (ing it, cannot directly share the memory) widthshow 234.924423 198.666321 M 0.645676 0 32 (, it is necessary for these components to interact) widthshow (to implement their consistenc) 72.0 210.666 T (y polic) 189.9 210.666 T (y) 217.25 210.666 T (.) 221.601 210.666 T 72 234.666199 M 0.745651 0 32 (One w) widthshow 99.025711 234.666199 M 0.745651 0 32 (ay to think about these interactions, in the speci\336c case of full read\320write consis-) widthshow 72 246.666138 M 1.057083 0 32 (tenc) widthshow 88.510086 246.666138 M 1.057083 0 32 (y) widthshow 92.860443 246.666138 M 1.057083 0 32 (, is to consider the v) widthshow 178.445999 246.666138 M 1.057083 0 32 (arious states of ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 244.107254 246.666138 M 1.057083 0 32 (owner) widthshow 269.007324 246.666138 M 1.057083 0 32 (ship) widthshow 3 FF 285.677307 246.666138 M 1.057083 0 32 ( of a page\321which entities hold the) widthshow (current \(v) 72.0 258.666 T (alid\) page contents\321and the transitions between these states.) 110.9 258.666 T 72 282.666016 M 0.100967 0 32 (The follo) widthshow 108.791107 282.666016 M 0.100967 0 32 (wing sections discuss maintaining full read\320write consistenc) widthshow 351.447021 282.666016 M 0.100967 0 32 (y between a manag-) widthshow 72 294.665955 M 1.045639 0 32 (er and a single k) widthshow 141.62262 294.665955 M 1.045639 0 32 (ernel. Issues in) widthshow 203.024124 294.665955 M 1.045639 0 32 (v) widthshow 207.824234 294.665955 M 1.045639 0 32 (olv) widthshow 220.454315 294.665955 M 1.045639 0 32 (ed when there are multiple k) widthshow 339.722595 294.665955 M 1.045639 0 32 (ernels are discussed at) widthshow 3 FF (the end of this chapter) 72.0 306.666 T (.) 160.32 306.666 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (P) 72.0 337.999 T (age \322Ownership\323) 79.212 337.999 T 3 FF 72 354.665771 M 0.161743 0 32 (The memory manager must deal with the state of a page in broad terms ha) widthshow 370.674561 354.665771 M 0.161743 0 32 (ving to do with) widthshow 72 366.66571 M 0.968628 0 32 (the potential ) widthshow 4 FF 126.157257 366.66571 M 0.968628 0 32 (owner) widthshow 151.057312 366.66571 M 0.968628 0 32 (ship) widthshow 3 FF 167.72731 366.66571 M 0.968628 0 32 ( of the page \(that is, who holds a v) widthshow 313.955109 366.66571 M 0.968628 0 32 (alid cop) widthshow 346.763794 366.66571 M 0.968628 0 32 (y\) and an) widthshow 385.761139 366.66571 M 0.968628 0 32 (y operation) widthshow 72 378.665649 M 0.053711 0 32 (that the memory manager has requested upon the page \(b) widthshow 300.843536 378.665649 M 0.053711 0 32 (ut is not yet kno) widthshow 365.258514 378.665649 M 0.053711 0 32 (wn to ha) widthshow 399.606049 378.665649 M 0.053711 0 32 (v) widthshow 404.456116 378.665649 M 0.053711 0 32 (e com-) widthshow 72 390.665588 M 1.343262 0 32 (pleted\). \(Actually) widthshow 143.233627 390.665588 M 1.343262 0 32 (, the situation can be e) widthshow 239.130081 390.665588 M 1.343262 0 32 (v) widthshow 243.980164 390.665588 M 1.343262 0 32 (en more complicated if the memory manager) widthshow 72 402.665527 M 0.92926 0 32 (has sent multiple requests to the k) widthshow 213.02562 402.665527 M 0.92926 0 32 (ernel to manipulate a single page without w) widthshow 394.130493 402.665527 M 0.92926 0 32 (aiting for) widthshow 72 414.665527 M 0.134125 0 32 (the k) widthshow 91.754181 414.665527 M 0.134125 0 32 (ernel\325) widthshow 114.52449 414.665527 M 0.134125 0 32 (s responses. This section tak) widthshow 228.56105 414.665527 M 0.134125 0 32 (es the simplifying assumption that only one transi-) widthshow 72 426.665497 M 0.471298 0 32 (tion has been requested at a time.\) These ) widthshow 4 FF 241.010406 426.665497 M 0.471298 0 32 (owner) widthshow 265.910461 426.665497 M 0.471298 0 32 (ship) widthshow 3 FF 282.580444 426.665497 M 0.471298 0 32 ( states are sho) widthshow 339.564514 426.665497 M 0.471298 0 32 (wn in FIGURE 2 from) widthshow (the point of vie) 72.0 438.665 T (w of the memory manager) 132.58 438.665 T (.) 237.56 438.665 T (There are three general classes of o) 72.0 462.665 T (wnership:) 212.8 462.665 T 6 (Times-Roman) 7 1 mymakefontmetric 6 FF 72.0 480.665 T 3 FF 85.535995 480.665344 M 0.464249 0 32 (The memory manager holds the only v) widthshow 243.051636 480.665344 M 0.464249 0 32 (alid cop) widthshow 275.355957 480.665344 M 0.464249 0 32 (y of the page. This cop) widthshow 369.227234 480.665344 M 0.464249 0 32 (y may reside in) widthshow 85.535995 492.665283 M 0.218811 0 32 (the address space of the manager) widthshow 218.130295 492.665283 M 0.218811 0 32 (, or be placed on some backing storage. The memory) widthshow (manager is free to modify the page\325) 85.536 504.665 T (s contents as it sees \336t.) 227.726 504.665 T 6 FF 72.0 519.665 T 3 FF 85.535995 519.665161 M 1.382553 0 32 (Both the k) widthshow 129.871155 519.665161 M 1.382553 0 32 (ernel and the memory manager hold v) widthshow 290.106628 519.665161 M 1.382553 0 32 (alid copies of the page\325) widthshow 388.397156 519.665161 M 1.382553 0 32 (s contents.) widthshow (Neither one of them is allo) 85.536 531.665 T (wed to modify the page.) 192.216 531.665 T 6 FF 72.0 546.665 T 3 FF 85.535995 546.665039 M 0.328064 0 32 (The k) widthshow 108.814117 546.665039 M 0.328064 0 32 (ernel holds the only v) widthshow 196.536514 546.665039 M 0.328064 0 32 (alid cop) widthshow 228.704636 546.665039 M 0.328064 0 32 (y of the page because it \(actually) widthshow 361.653381 546.665039 M 0.328064 0 32 (, clients referenc-) widthshow 85.535995 558.664978 M 0.363724 0 32 (ing the virtual page\) has the ability to modify the page. In these states it is not kno) widthshow 419.779449 558.664978 M 0.363724 0 32 (wn) widthshow 85.535995 570.664917 M 0.944092 0 32 (whether or not the k) widthshow 169.752426 570.664917 M 0.944092 0 32 (ernel holds modi\336ed page contents, or whether the k) widthshow 386.895233 570.664917 M 0.944092 0 32 (ernel holds) widthshow 85.535995 582.664856 M 0.270233 0 32 (the page at all. \(It may ha) widthshow 188.877518 582.664856 M 0.270233 0 32 (v) widthshow 193.7276 582.664856 M 0.270233 0 32 (e discarded the page without modi\336cation.\) What is kno) widthshow 419.779602 582.664856 M 0.270233 0 32 (wn) widthshow 85.535995 594.664795 M 0.276062 0 32 (is that the manager\325) widthshow 164.964493 594.664795 M 0.276062 0 32 (s cop) widthshow 185.970612 594.664795 M 0.276062 0 32 (y of the page may be stale. In these states, if the current con-) widthshow 85.535995 606.664734 M 0.07576 0 32 (tents of the page are desired, it is necessary to interact with the k) widthshow 344.700958 606.664734 M 0.07576 0 32 (ernel so that it can re-) widthshow 85.535995 618.664673 M 2.567703 0 32 (turn its cop) widthshow 135.571457 618.664673 M 2.567703 0 32 (y) widthshow 139.921814 618.664673 M 2.567703 0 32 (, or return the f) widthshow 210.352692 618.664673 M 2.567703 0 32 (act that it does not hold a cop) widthshow 345.716675 618.664673 M 2.567703 0 32 (y \(and therefore the) widthshow (manager\325) 85.536 630.665 T (s cop) 122.746 630.665 T (y is v) 143.476 630.665 T (alid\).) 164.896 630.665 T 85.535995 645.664551 M 0.597687 0 32 (This is also the state for ) widthshow 4 FF 186.89212 645.664551 M 0.597687 0 32 (pr) widthshow 195.412323 645.664551 M 0.597687 0 32 (ecious) widthshow 3 FF 220.962326 645.664551 M 0.597687 0 32 ( pages that ha) widthshow 277.265503 645.664551 M 0.597687 0 32 (v) widthshow 282.115601 645.664551 M 0.597687 0 32 (e been supplied to the k) widthshow 379.714081 645.664551 M 0.597687 0 32 (ernel and for) widthshow 85.535995 657.66449 M 0.502548 0 32 (which the manager has not k) widthshow 202.648804 657.66449 M 0.502548 0 32 (ept a cop) widthshow 239.653961 657.66449 M 0.502548 0 32 (y) widthshow 244.004318 657.66449 M 0.502548 0 32 (. In this case, it is kno) widthshow 333.989746 657.66449 M 0.502548 0 32 (wn that the k) widthshow 387.337463 657.66449 M 0.502548 0 32 (ernel holds) widthshow 85.535995 669.664429 M 1.042511 0 32 (a cop) widthshow 107.858566 669.664429 M 1.042511 0 32 (y) widthshow 112.208923 669.664429 M 1.042511 0 32 (, which may or may not be under) widthshow 251.526611 669.664429 M 1.042511 0 32 (going modi\336cation depending on the access) widthshow (set. Interaction with the k) 85.536 681.664 T (ernel is necessary for the manager to hold a current cop) 187.366 681.664 T (y) 408.866 681.664 T (.) 413.217 681.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 100 100 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (96 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Bold) 12 1 mymakefontmetric 3 FF (Ownership T) 180.0 527.984 T (ransitions) 246.792 527.984 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 180 544.650574 M 0.223923 0 32 (There are tw) widthshow 230.877914 544.650574 M 0.223923 0 32 (o operations a manager can in) widthshow 351.287781 544.650574 M 0.223923 0 32 (v) widthshow 356.087891 544.650574 M 0.223923 0 32 (ok) widthshow 365.987915 544.650574 M 0.223923 0 32 (e to af) widthshow 391.175903 544.650574 M 0.223923 0 32 (fect the o) widthshow 428.583923 544.650574 M 0.223923 0 32 (wnership of a page: ) widthshow 0 FF 510.569611 544.650574 M 0.223923 0 32 (memo-) widthshow 180 556.650513 M 4.664948 0 32 (ry_object_data_supply) widthshow 4 FF 277.779999 556.650513 M 4.664948 0 32 ( / ) widthshow 0 FF 294.889893 556.650513 M 4.664948 0 32 (memory_object_data_pr) widthshow 400.23999 556.650513 M 4.664948 0 32 (o) widthshow 405.140076 556.650513 M 4.664948 0 32 (vided) widthshow 4 FF 428.480042 556.650513 M 4.664948 0 32 ( \(or ) widthshow 0 FF 454.469971 556.650513 M 4.664948 0 32 (memory_object_da-) widthshow (ta_una) 180.0 568.65 T (v) 209.2 568.65 T (ailable) 214.1 568.65 T 4 FF (\) and ) 242.44 568.65 T 0 FF (memory_object_lock_r) 265.21 568.65 T (equest) 363.89 568.65 T 4 FF (. ) 391.11 568.65 T 5 (Times-Roman) 7 1 mymakefontmetric 5 FF 180.0 586.65 T 0 FF 193.535995 586.650391 M 3.076736 0 32 (memory_object_data_supply) widthshow 4 FF 317.416016 586.650391 M 3.076736 0 32 ( / ) widthshow 0 FF 331.349487 586.650391 M 3.076736 0 32 (memory_object_data_pr) widthshow 436.699585 586.650391 M 3.076736 0 32 (o) widthshow 441.59964 586.650391 M 3.076736 0 32 (vided) widthshow 4 FF 464.939636 586.650391 M 3.076736 0 32 ( must be consid-) widthshow 193.535995 598.65033 M 0.364914 0 32 (ered to af) widthshow 231.77597 598.65033 M 0.364914 0 32 (fect the o) widthshow 269.465942 598.65033 M 0.364914 0 32 (wnership of the page as soon as the message is sent since it cannot) widthshow (be kno) 193.536 610.65 T (wn when the k) 220.226 610.65 T (ernel will recei) 278.726 610.65 T (v) 338.456 610.65 T (e \(and possibly allo) 343.306 610.65 T (w modi\336cations to\) the page.) 421.107 610.65 T 5 FF 180.0 625.65 T 0 FF 193.535995 625.650208 M 1.791458 0 32 (memory_object_lock_r) widthshow 292.216125 625.650208 M 1.791458 0 32 (equest) widthshow 4 FF 319.436096 625.650208 M 1.791458 0 32 ( can cause a v) widthshow 381.88208 625.650208 M 1.791458 0 32 (ariety of o) widthshow 426.315155 625.650208 M 1.791458 0 32 (wnership changes to occur) widthshow 537.499878 625.650208 M 1.791458 0 32 (.) widthshow 193.535995 637.650146 M 0.418732 0 32 (This operation produces a reply for which the manager must be prepared. Whether or) widthshow 193.535995 649.650085 M 0.195847 0 32 (not the o) widthshow 228.677826 649.650085 M 0.195847 0 32 (wnership is vie) widthshow 289.369659 649.650085 M 0.195847 0 32 (wed as changed when the message is sent or when the reply is) widthshow (recei) 193.536 661.65 T (v) 212.716 661.65 T (ed depends on the operation being performed.) 217.566 661.65 T 171 105.984009 378 414 CR 1 G 171 105.984009 378 414 NF 288 366.984009 144 126 NF 0 G 6 (Times-Roman) 12 1 mymakefontmetric 6 FF 288 373.650635 M 8.27916 0 32 (S) widthshow 4 FF 294.671997 373.650635 M 6.899292 0 32 (r\321data supplied, read access) widthshow (only) 288.0 385.651 T (, cop) 305.13 385.651 T (y held) 324.47 385.651 T 6 FF 288 397.650513 M 4.809586 0 32 (Sw) widthshow 4 FF 303.335999 397.650513 M 4.00798 0 32 widthshow (or ) 288.0 409.65 T 7 (Times-Italic) 10 1 mymakefontmetric 7 FF (pr) 298.83 409.65 T (ecious) 307.35 409.65 T 4 FF ( \(with no cop) 332.9 409.65 T (y held) 385.85 409.65 T 7 FF (\)) 410.57 409.65 T 6 FF (U) 288.0 421.65 T 4 FF 296.664 421.65 T (v) 367.794 421.65 T (e write access) 372.644 421.65 T 6 FF 288 433.65033 M 6.642288 0 32 (C) widthshow 4 FF 296.003998 433.65033 M 5.535233 0 32 widthshow 422.709778 433.65033 M 5.535233 0 32 (v) widthshow 427.559875 433.65033 M 5.535233 0 32 (e) widthshow (write access) 288.0 445.65 T 6 FF 288 457.650208 M 3.371292 0 32 (F) widthshow 4 FF 294.671997 457.650208 M 2.809402 0 32 widthshow (remo) 288.0 469.65 T (v) 308.4 469.65 T (e write access) 313.25 469.65 T 6 FF (OK) 288.0 481.65 T 4 FF 305.328 481.65 T (v) 398.388 481.65 T (ed) 403.238 481.65 T 1 G 180 492.984009 360 27 NF 180 492.984009 360 13.031998 CR 0.25 SL 2 SC 0 G 540 499.5 M 252 499.5 L S 0 SC 243 499.5 M 180 499.5 L S 171 105.984009 378 414 CR 8 (Helvetica-Bold) 9 1 mymakefontmetric 8 FF (FIGURE 2) 180.0 512.016 T 2 FF (Strict Consistency P) 252.0 512.016 T (age \322Ownership\323 T) 329.4 512.016 T (ransitions) 403.741 512.016 T 0.5 SL 290.77 176.02 M 294.07 176.02 L 290.77 164.48 L 287.46 176.02 L F 290.77 176.02 M 290.77 218.48 L S 479.35 175.54 M 482.66 175.52 L 479.28 164 L 476.05 175.56 L F 479.36 175.54 M 479.64 219 L S 333.38 257.87 M 335.86 255.68 L 325.76 249.21 L 330.9 260.05 L F 333.39 257.87 M 477.15 421.65 L S 420.94 305.76 M 418.98 308.43 L 430.23 312.61 L 422.91 303.1 L F 420.95 305.77 M 335.99 243.8 L S 468.98 265.97 M 472.28 265.66 L 467.92 254.48 L 465.69 266.27 L F 468.99 265.97 M 472.5 303.98 L S 6 FF (Sr) 259.338 276.176 T (F) 295.936 202.381 T (F) 485.716 202.365 T (OK) 213.286 193.381 T (OK) 360.0 195.176 T (C) 509.604 285.984 T (OK) 459.682 391.381 T (U) 410.604 294.984 T (OK) 473.604 285.984 T 1 G 0 360 99 36 467.929321 236.484009 AF 0 G 0 360 99 36 467.929321 236.484009 AS 4 FF (k) 455.438 239.897 T (ernel) 460.338 239.897 T 1 G 0 360 99 36 490.5 438.984009 AF 0 G 0 360 99 36 490.5 438.984009 AS (k) 459.409 442.397 T (ernel-cleaning) 464.309 442.397 T 1 G 0 360 99 36 472.5 321.984009 AF 0 G 0 360 99 36 472.5 321.984009 AS (k) 443.347 325.397 T (ernel-locking) 448.247 325.397 T 1 G 0 360 99 36 467.929321 146.484009 AF 0 G 0 360 99 36 467.929321 146.484009 AS (k) 437.387 149.897 T (ernel-\337ushing) 442.287 149.897 T 1 G 0 360 99 36 290.766663 146.484009 AF 0 G 0 360 99 36 290.766663 146.484009 AS (both-\337ushing) 263.827 149.897 T 1 G 0 360 99 36 290.766663 236.484009 AF 0 G 0 360 99 36 290.766663 236.484009 AS (both) 281.878 239.897 T 1 G 0 360 99 36 229.5 438.984009 AF 0 G 0 360 99 36 229.5 438.984009 AS (manager) 212.289 442.397 T 1 SL 285.51 264.75 M 288.46 266.26 L 290.76 254.48 L 282.57 263.24 L F 285.52 264.75 M 205.22 423.3 L S 0.5 SL 225.09 412.15 M 222.42 410.19 L 218.26 421.45 L 227.75 414.11 L F 225.09 412.16 M 418.43 146.48 L S 196.42 414.88 M 193.16 414.33 L 194.5 426.25 L 199.68 415.43 L F 196.42 414.88 M 241.27 146.48 L S 534.45 420.02 M 531.16 420.32 L 535.52 431.5 L 537.75 419.71 L F 534.46 420.03 M 517.43 236.48 L S 414.15 253.86 M 415.95 258.03 L 428.68 247.59 L 412.35 249.7 L F 270 43 1199.630615 496.4729 852.811462 423.122681 AS 6 FF (Sw) 394.338 247.381 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 101 101 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (97 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Strict K) 72.0 55.824 T (er) 102.519 55.824 T (nel and Manager P) 110.376 55.824 T (age Consistency) 183.538 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666626 M 1.441452 0 32 (These operations af) widthshow 152.943054 114.666626 M 1.441452 0 32 (fect merely the v) widthshow 224.497559 114.666626 M 1.441452 0 32 (alidity of the manager\325) widthshow 319.642212 114.666626 M 1.441452 0 32 (s or the k) widthshow 360.806641 114.666626 M 1.441452 0 32 (ernel\325) widthshow 383.576965 114.666626 M 1.441452 0 32 (s page con-) widthshow 72 126.666565 M 1.749954 0 32 (tents. Other operations \(such as controlling e) widthshow 261.489807 126.666565 M 1.749954 0 32 (x) widthshow 266.339905 126.666565 M 1.749954 0 32 (ecute access\) are omitted for simplicity) widthshow (since the) 72.0 138.667 T (y do not af) 107.12 138.667 T (fect page o) 149.92 138.667 T (wnership.) 193.54 138.667 T 72 162.666519 M 0.209198 0 32 (The v) widthshow 95.009338 162.666519 M 0.209198 0 32 (arious transitions in FIGURE 2 are detailed belo) widthshow 289.813873 162.666519 M 0.209198 0 32 (w) widthshow 296.384216 162.666519 M 0.209198 0 32 (. P) widthshow 307.00351 162.666519 M 0.209198 0 32 (ages start in the ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 372.830322 162.666519 M 0.209198 0 32 (mana) widthshow 394.950378 162.666519 M 0.209198 0 32 (g) widthshow 399.850403 162.666519 M 0.209198 0 32 (er ) widthshow 3 FF 410.889618 162.666519 M 0.209198 0 32 (state;) widthshow 72 174.666504 M 0.062286 0 32 (that is, the manager holds the \(only\) v) widthshow 223.836151 174.666504 M 0.062286 0 32 (alid cop) widthshow 255.738495 174.666504 M 0.062286 0 32 (y) widthshow 260.088867 174.666504 M 0.062286 0 32 (. \(If the page starts out with no data, ) widthshow 1 FF 407.569458 174.666504 M 0.062286 0 32 (mem-) widthshow 72 186.666489 M 1.889954 0 32 (ory_object_data_una) widthshow 162.30014 186.666489 M 1.889954 0 32 (v) widthshow 167.200195 186.666489 M 1.889954 0 32 (ailable) widthshow 3 FF 195.540192 186.666489 M 1.889954 0 32 ( can be used instead to cause the k) widthshow 347.749878 186.666489 M 1.889954 0 32 (ernel to generate an) widthshow 72 198.666473 M 0.329971 0 32 (empty page instead of the manager ha) widthshow 225.409958 198.666473 M 0.329971 0 32 (ving to create an empty page to send in the ) widthshow 1 FF 402.569702 198.666473 M 0.329971 0 32 (memo-) widthshow (ry_object_data_pr) 72.0 210.666 T (o) 151.25 210.666 T (vided) 156.15 210.666 T 3 FF ( message, b) 179.49 210.666 T (ut this can be vie) 225.67 210.666 T (wed as an optimization.\)) 293.19 210.666 T 5 (Times-Roman) 7 1 mymakefontmetric 5 FF 72.0 228.666 T 4 FF (mana) 85.536 228.666 T (g) 107.656 228.666 T (er) 112.556 228.666 T 6 (Symbol) 10 1 mymakefontmetric 6 FF 120.886 228.666 T 4 FF (k) 130.756 228.666 T (ernel) 135.096 228.666 T 3 FF (: This transition can be caused by tw) 155.646 228.666 T (o e) 301.916 228.666 T (v) 313.606 228.666 T (ents:) 318.456 228.666 T 5 FF 108.0 243.666 T 3 FF 121.535995 243.666351 M 2.541687 0 32 (The manager sends a ) widthshow 4 FF 218.342758 243.666351 M 2.541687 0 32 (pr) widthshow 226.862961 243.666351 M 2.541687 0 32 (ecious) widthshow 3 FF 252.412964 243.666351 M 2.541687 0 32 ( page via a ) widthshow 1 FF 308.11972 243.666351 M 2.541687 0 32 (memory_object_data_supply) widthshow 3 FF 121.535995 255.66629 M 0.336227 0 32 (message \(in response to a pre) widthshow 240.437286 255.66629 M 0.336227 0 32 (vious ) widthshow 1 FF 264.943512 255.66629 M 0.336227 0 32 (memory_object_data_r) widthshow 364.733643 255.66629 M 0.336227 0 32 (equest) widthshow 3 FF 391.953613 255.66629 M 0.336227 0 32 ( message\)) widthshow 121.535995 267.666229 M 0.364227 0 32 (and the manager does not k) widthshow 232.957199 267.666229 M 0.364227 0 32 (eep a cop) widthshow 271.345703 267.666229 M 0.364227 0 32 (y of the page \(which is the basic reason) widthshow 121.535995 279.666168 M 1.081009 0 32 (wh) widthshow 133.706024 279.666168 M 1.081009 0 32 (y the page is supplied as ) widthshow 4 FF 240.182083 279.666168 M 1.081009 0 32 (pr) widthshow 248.702286 279.666168 M 1.081009 0 32 (ecious) widthshow 3 FF 274.252289 279.666168 M 1.081009 0 32 (\). The k) widthshow 307.694366 279.666168 M 1.081009 0 32 (ernel is vie) widthshow 353.486511 279.666168 M 1.081009 0 32 (wed as holding the) widthshow 121.535995 291.666107 M 1.270218 0 32 (only cop) widthshow 157.42627 291.666107 M 1.270218 0 32 (y of the page as soon as it is sent. It does not matter whether the) widthshow 121.535995 303.666046 M 1.177933 0 32 (page is gi) widthshow 161.972 303.666046 M 1.177933 0 32 (v) widthshow 166.822083 303.666046 M 1.177933 0 32 (en write access; the k) widthshow 256.963867 303.666046 M 1.177933 0 32 (ernel will return this page to the manager) widthshow 429.499634 303.666046 M 1.177933 0 32 (,) widthshow 121.535995 315.665985 M 0.907776 0 32 (modi\336ed or not, and interaction with the k) widthshow 296.670471 315.665985 M 0.907776 0 32 (ernel is necessary if the manager) widthshow (needs to see the page.) 121.536 327.666 T 5 FF 108.0 342.666 T 3 FF 121.535995 342.665863 M 1.780548 0 32 (The manager sends a ) widthshow 1 FF 215.298203 342.665863 M 1.780548 0 32 (memory_object_data_supply) widthshow 3 FF 339.178223 342.665863 M 1.780548 0 32 ( message \(in response) widthshow 121.535995 354.665802 M 1.763336 0 32 (to a pre) widthshow 154.802811 354.665802 M 1.763336 0 32 (vious ) widthshow 1 FF 180.736145 354.665802 M 1.763336 0 32 (memory_object_data_r) widthshow 280.526245 354.665802 M 1.763336 0 32 (equest) widthshow 3 FF 307.746277 354.665802 M 1.763336 0 32 ( message\) that speci\336es write) widthshow 121.535995 366.665741 M 1.143341 0 32 (access. The k) widthshow 177.312744 366.665741 M 1.143341 0 32 (ernel must be vie) widthshow 249.092911 366.665741 M 1.143341 0 32 (wed as holding the only current cop) widthshow 399.163025 366.665741 M 1.143341 0 32 (y of the) widthshow 121.535995 378.66568 M 0.83168 0 32 (page as soon as it is sent. The manager must al) widthshow 316.672852 378.66568 M 0.83168 0 32 (w) widthshow 323.792908 378.66568 M 0.83168 0 32 (ays assume that the k) widthshow 412.009705 378.66568 M 0.83168 0 32 (ernel) widthshow 121.535995 390.665619 M 0.571136 0 32 (holds the current page contents, e) widthshow 258.001831 390.665619 M 0.571136 0 32 (v) widthshow 262.851929 390.665619 M 0.571136 0 32 (en though the k) widthshow 326.405396 390.665619 M 0.571136 0 32 (ernel may discard them at) widthshow 121.535995 402.665558 M 0.457794 0 32 (an) widthshow 130.82608 402.665558 M 0.457794 0 32 (y time. Only via lock request interactions with the k) widthshow 342.606293 402.665558 M 0.457794 0 32 (ernel can the manager) widthshow (kno) 121.536 414.665 T (w whether the cop) 136.286 414.665 T (y it sa) 209.776 414.665 T (v) 233.466 414.665 T (es is the current page contents.) 238.316 414.665 T 5 FF 72.0 429.665 T 4 FF 85.535995 429.665436 M 0.509216 0 32 (mana) widthshow 107.656052 429.665436 M 0.509216 0 32 (g) widthshow 112.556107 429.665436 M 0.509216 0 32 (er) widthshow 6 FF 120.886108 429.665436 M 0.509216 0 32 widthshow 4 FF 130.756104 429.665436 M 0.509216 0 32 (both) widthshow 3 FF 148.536102 429.665436 M 0.509216 0 32 (: The manager sends a ) widthshow 1 FF 243.002197 429.665436 M 0.509216 0 32 (memory_object_data_supply) widthshow 3 FF 366.882202 429.665436 M 0.509216 0 32 ( message \(in re-) widthshow 85.535995 441.665375 M 2.674179 0 32 (sponse to a pre) widthshow 153.018677 441.665375 M 2.674179 0 32 (vious ) widthshow 1 FF 179.862854 441.665375 M 2.674179 0 32 (memory_object_data_r) widthshow 279.652954 441.665375 M 2.674179 0 32 (equest) widthshow 3 FF 306.872986 441.665375 M 2.674179 0 32 ( message\) that speci\336es only) widthshow 85.535995 453.665314 M 1.270905 0 32 (read access. The manager k) widthshow 200.749695 453.665314 M 1.270905 0 32 (eeps a cop) widthshow 244.841568 453.665314 M 1.270905 0 32 (y of the page. The k) widthshow 331.076172 453.665314 M 1.270905 0 32 (ernel must be vie) widthshow 403.239014 453.665314 M 1.270905 0 32 (wed as) widthshow 85.535995 465.665253 M 0.486679 0 32 (holding a cop) widthshow 140.849411 465.665253 M 0.486679 0 32 (y of the page as soon as this message is sent. Both the manager and the) widthshow 85.535995 477.665192 M 1.56871 0 32 (k) widthshow 90.43605 477.665192 M 1.56871 0 32 (ernel hold current page contents, b) widthshow 236.37973 477.665192 M 1.56871 0 32 (ut neither is allo) widthshow 305.556 477.665192 M 1.56871 0 32 (wed to modify them since the) widthshow (changes w) 85.536 489.665 T (ould not be re\337ected in the other\325) 127.366 489.665 T (s cop) 260.126 489.665 T (y) 280.856 489.665 T (.) 285.207 489.665 T 5 FF 72.0 504.665 T 4 FF 85.535995 504.66507 M 3.384659 0 32 (k) widthshow 89.876053 504.66507 M 3.384659 0 32 (ernel) widthshow 6 FF 110.426056 504.66507 M 3.384659 0 32 widthshow 4 FF 120.296051 504.66507 M 3.384659 0 32 (k) widthshow 124.636108 504.66507 M 3.384659 0 32 (ernel-\337ushing) widthshow 6 FF 180.186111 504.66507 M 3.384659 0 32 widthshow 4 FF 190.056107 504.66507 M 3.384659 0 32 (mana) widthshow 212.176163 504.66507 M 3.384659 0 32 (g) widthshow 217.076218 504.66507 M 3.384659 0 32 (er) widthshow 3 FF 225.406219 504.66507 M 3.384659 0 32 (: The manager sends a ) widthshow 1 FF 334.249512 504.66507 M 3.384659 0 32 (memory_object_lock_-) widthshow 85.535995 516.665039 M 0.587158 0 32 (r) widthshow 89.796097 516.665039 M 0.587158 0 32 (equest) widthshow 3 FF 117.016098 516.665039 M 0.587158 0 32 ( \(\337ush\) to the k) widthshow 180.374786 516.665039 M 0.587158 0 32 (ernel. When \(b) widthshow 241.049225 516.665039 M 0.587158 0 32 (ut not until\) the k) widthshow 312.747925 516.665039 M 0.587158 0 32 (ernel responds \(possibly with) widthshow 1 FF 85.535995 528.664917 M 2.480927 0 32 (memory_object_data_r) widthshow 185.326111 528.664917 M 2.480927 0 32 (etur) widthshow 202.946198 528.664917 M 2.480927 0 32 (n) widthshow 3 FF 208.506195 528.664917 M 2.480927 0 32 ( and ending with ) widthshow 1 FF 287.869904 528.664917 M 2.480927 0 32 (memory_object_lock_completed) widthshow 3 FF 426.169922 528.664917 M 2.480927 0 32 (\),) widthshow (it is kno) 85.536 540.665 T (wn that the manager has the sole cop) 117.516 540.665 T (y of the page.) 264.886 540.665 T 5 FF 72.0 555.665 T 4 FF 85.535995 555.664795 M 0.714722 0 32 (k) widthshow 89.876053 555.664795 M 0.714722 0 32 (ernel) widthshow 6 FF 110.426056 555.664795 M 0.714722 0 32 widthshow 4 FF 120.296051 555.664795 M 0.714722 0 32 (k) widthshow 124.636108 555.664795 M 0.714722 0 32 (ernel-cleaning) widthshow 6 FF 182.956116 555.664795 M 0.714722 0 32 widthshow 4 FF 192.826111 555.664795 M 0.714722 0 32 (both) widthshow 3 FF 210.60611 555.664795 M 0.714722 0 32 (: The manager sends a ) widthshow 1 FF 306.099731 555.664795 M 0.714722 0 32 (memory_object_lock_r) widthshow 404.779846 555.664795 M 0.714722 0 32 (equest) widthshow 3 FF 85.535995 567.664795 M 0.617981 0 32 (\(clean\) to the k) widthshow 147.550003 567.664795 M 0.617981 0 32 (ernel. When \(b) widthshow 208.286087 567.664795 M 0.617981 0 32 (ut not until\) the k) widthshow 280.108063 567.664795 M 0.617981 0 32 (ernel responds \(possibly with ) widthshow 1 FF 402.570007 567.664795 M 0.617981 0 32 (memo-) widthshow 85.535995 579.664673 M 3.148727 0 32 (ry_object_data_r) widthshow 159.226105 579.664673 M 3.148727 0 32 (etur) widthshow 176.846191 579.664673 M 3.148727 0 32 (n) widthshow 3 FF 182.406189 579.664673 M 3.148727 0 32 ( and ending with ) widthshow 1 FF 264.441101 579.664673 M 3.148727 0 32 (memory_object_lock_completed) widthshow 3 FF 402.741119 579.664673 M 3.148727 0 32 (\), both) widthshow 85.535995 591.664673 M 1.227951 0 32 (the manager and the k) widthshow 178.657867 591.664673 M 1.227951 0 32 (ernel will ha) widthshow 230.903885 591.664673 M 1.227951 0 32 (v) widthshow 235.753967 591.664673 M 1.227951 0 32 (e v) widthshow 248.672058 591.664673 M 1.227951 0 32 (alid read-only copies. \(Of course, the k) widthshow 412.009827 591.664673 M 1.227951 0 32 (ernel) widthshow 85.535995 603.664551 M 0.606918 0 32 (may discard its cop) widthshow 164.746811 603.664551 M 0.606918 0 32 (y at an) widthshow 192.470734 603.664551 M 0.606918 0 32 (y time.\) Notice that this sequence races with the basic k) widthshow 420.899994 603.664551 M 0.606918 0 32 (er-) widthshow 85.535995 615.664551 M 1.666107 0 32 (nel e) widthshow 106.112244 615.664551 M 1.666107 0 32 (viction mechanisms. That is, the k) widthshow 251.282837 615.664551 M 1.666107 0 32 (ernel may ha) widthshow 306.065186 615.664551 M 1.666107 0 32 (v) widthshow 310.915253 615.664551 M 1.666107 0 32 (e already sent the \(modi\336ed\)) widthshow 85.535995 627.664429 M 2.939255 0 32 (page via ) widthshow 1 FF 127.514511 627.664429 M 2.939255 0 32 (memory_object_data_r) widthshow 227.304626 627.664429 M 2.939255 0 32 (etur) widthshow 244.924713 627.664429 M 2.939255 0 32 (n) widthshow 3 FF 250.484711 627.664429 M 2.939255 0 32 ( before the manager e) widthshow 348.621887 627.664429 M 2.939255 0 32 (v) widthshow 353.471985 627.664429 M 2.939255 0 32 (en started this se-) widthshow 85.535995 639.664429 M 0.407593 0 32 (quence. As such, when ) widthshow 1 FF 181.58638 639.664429 M 0.407593 0 32 (memory_object_lock_r) widthshow 280.266479 639.664429 M 0.407593 0 32 (equest) widthshow 3 FF 307.486511 639.664429 M 0.407593 0 32 ( are being used, it is not possi-) widthshow 85.535995 651.664307 M 0.361359 0 32 (bly to distinguish between a ) widthshow 1 FF 202.06279 651.664307 M 0.361359 0 32 (memory_object_data_r) widthshow 301.852905 651.664307 M 0.361359 0 32 (etur) widthshow 319.472992 651.664307 M 0.361359 0 32 (n) widthshow 3 FF 325.03299 651.664307 M 0.361359 0 32 ( that means that the k) widthshow 412.009827 651.664307 M 0.361359 0 32 (ernel) widthshow 85.535995 663.664307 M 1.245956 0 32 (is pro) widthshow 109.132034 663.664307 M 1.245956 0 32 (viding the current page contents b) widthshow 250.971939 663.664307 M 1.245956 0 32 (ut still k) widthshow 286.1539 663.664307 M 1.245956 0 32 (eeping a cop) widthshow 339.085876 663.664307 M 1.245956 0 32 (y v) widthshow 352.681915 663.664307 M 1.245956 0 32 (ersus gi) widthshow 384.507996 663.664307 M 1.245956 0 32 (ving up the) widthshow 85.535995 675.664185 M 0.259247 0 32 (page all together) widthshow 152.1548 675.664185 M 0.259247 0 32 (. \() widthshow 1 FF 160.744049 675.664185 M 0.259247 0 32 (memory_object_data_r) widthshow 260.53418 675.664185 M 0.259247 0 32 (etur) widthshow 278.154236 675.664185 M 0.259247 0 32 (n) widthshow 3 FF 283.714233 675.664185 M 0.259247 0 32 ( does return that information, b) widthshow 409.240601 675.664185 M 0.259247 0 32 (ut the) widthshow 85.535995 687.664185 M 0.738602 0 32 (k) widthshow 90.43605 687.664185 M 0.738602 0 32 (ernel can discard its cop) widthshow 189.930527 687.664185 M 0.738602 0 32 (y immediately afterw) widthshow 276.847778 687.664185 M 0.738602 0 32 (ard, unless the page is ) widthshow 4 FF 371.080811 687.664185 M 0.738602 0 32 (pr) widthshow 379.601013 687.664185 M 0.738602 0 32 (ecious) widthshow 3 FF 405.151001 687.664185 M 0.738602 0 32 (.\) This) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 102 102 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (98 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 193.535995 112.650665 M 0.406342 0 32 (is wh) widthshow 215.282364 112.650665 M 0.406342 0 32 (y ) widthshow 0 FF 223.188705 112.650665 M 0.406342 0 32 (memory_object_data_r) widthshow 322.978821 112.650665 M 0.406342 0 32 (etur) widthshow 340.598907 112.650665 M 0.406342 0 32 (n) widthshow 3 FF 346.158905 112.650665 M 0.406342 0 32 ( is not sho) widthshow 387.968079 112.650665 M 0.406342 0 32 (wn as a meaningful o) widthshow 474.883575 112.650665 M 0.406342 0 32 (wnership transi-) widthshow 193.535995 124.65065 M 0.014877 0 32 (tion in FIGURE 2. It does follo) widthshow 318.655396 124.65065 M 0.014877 0 32 (w) widthshow 325.225769 124.65065 M 0.014877 0 32 (, though, that the data returned via ) widthshow 0 FF 465.029907 124.65065 M 0.014877 0 32 (memory_object_-) widthshow 193.535995 136.650635 M 6.949417 0 32 (data_r) widthshow 221.686096 136.650635 M 6.949417 0 32 (etur) widthshow 239.306183 136.650635 M 6.949417 0 32 (n) widthshow 3 FF 244.86618 136.650635 M 6.949417 0 32 ( is more current than an) widthshow 374.163361 136.650635 M 6.949417 0 32 (y data the manager holds. If no) widthshow 0 FF 193.535995 148.650589 M 1.532898 0 32 (memory_object_lock_r) widthshow 292.216125 148.650589 M 1.532898 0 32 (equest) widthshow 3 FF 319.436096 148.650589 M 1.532898 0 32 ( operations are e) widthshow 389.594971 148.650589 M 1.532898 0 32 (v) widthshow 394.445038 148.650589 M 1.532898 0 32 (er performed by the manager) widthshow 516.246887 148.650589 M 1.532898 0 32 (, then) widthshow 193.535995 160.650528 M 2.880508 0 32 (recei) widthshow 212.716141 160.650528 M 2.880508 0 32 (ving a ) widthshow 0 FF 245.697159 160.650528 M 2.880508 0 32 (memory_object_data_r) widthshow 345.487274 160.650528 M 2.880508 0 32 (etur) widthshow 363.107361 160.650528 M 2.880508 0 32 (n) widthshow 3 FF 368.667358 160.650528 M 2.880508 0 32 ( message does indeed signify transition) widthshow 193.535995 172.650467 M 1.00589 0 32 (from ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 216.481888 172.650467 M 1.00589 0 32 (k) widthshow 220.821945 172.650467 M 1.00589 0 32 (ernel) widthshow 3 FF 241.371948 172.650467 M 1.00589 0 32 (-o) widthshow 249.452087 172.650467 M 1.00589 0 32 (wned to ) widthshow 4 FF 285.90387 172.650467 M 1.00589 0 32 (mana) widthshow 308.023926 172.650467 M 1.00589 0 32 (g) widthshow 312.923981 172.650467 M 1.00589 0 32 (er) widthshow 3 FF 321.054077 172.650467 M 1.00589 0 32 (-o) widthshow 329.134216 172.650467 M 1.00589 0 32 (wned. This observ) widthshow 404.496155 172.650467 M 1.00589 0 32 (ation doesn\325) widthshow 454.482147 172.650467 M 1.00589 0 32 (t help much, though,) widthshow 193.535995 184.650406 M 1.234085 0 32 (since it only applies to pages that are indeed modi\336ed by the k) widthshow 457.6651 184.650406 M 1.234085 0 32 (ernel. Non-modi\336ed) widthshow 193.535995 196.650345 M 0.498505 0 32 (\(and non-) widthshow 4 FF 232.634506 196.650345 M 0.498505 0 32 (pr) widthshow 241.154709 196.650345 M 0.498505 0 32 (ecious) widthshow 3 FF 266.704712 196.650345 M 0.498505 0 32 (\) pages are simply discarded by the page e) widthshow 439.842896 196.650345 M 0.498505 0 32 (viction mechanisms, and) widthshow 193.535995 208.650284 M 0.680267 0 32 (so ) widthshow 0 FF 205.606262 208.650284 M 0.680267 0 32 (memory_object_lock_r) widthshow 304.286377 208.650284 M 0.680267 0 32 (equest) widthshow 3 FF 331.506378 208.650284 M 0.680267 0 32 ( is the only w) widthshow 388.017517 208.650284 M 0.680267 0 32 (ay to be sure that the k) widthshow 482.539185 208.650284 M 0.680267 0 32 (ernel does not) widthshow 193.535995 220.650223 M 0.338318 0 32 (hold a cop) widthshow 235.77269 220.650223 M 0.338318 0 32 (y of the page. Of course, if the manager doesn\325) widthshow 426.637695 220.650223 M 0.338318 0 32 (t care what the o) widthshow 493.831116 220.650223 M 0.338318 0 32 (wnership is) widthshow (\(the manager ne) 193.536 232.65 T (v) 257.706 232.65 T (er e) 262.556 232.65 T (xamines the data itself\), this is not a concern.) 277.116 232.65 T 5 (Times-Roman) 7 1 mymakefontmetric 5 FF 180.0 247.65 T 4 FF 193.535995 247.650101 M 0.598679 0 32 (both) widthshow 6 (Symbol) 10 1 mymakefontmetric 6 FF 211.315994 247.650101 M 0.598679 0 32 widthshow 4 FF 221.185989 247.650101 M 0.598679 0 32 (both-\337ushing) widthshow 6 FF 273.966003 247.650101 M 0.598679 0 32 widthshow 4 FF 283.835999 247.650101 M 0.598679 0 32 (mana) widthshow 305.956055 247.650101 M 0.598679 0 32 (g) widthshow 310.856079 247.650101 M 0.598679 0 32 (er) widthshow 3 FF 319.186096 247.650101 M 0.598679 0 32 (: The manager sends a ) widthshow 0 FF 414.099487 247.650101 M 0.598679 0 32 (memory_object_lock_r) widthshow 512.779602 247.650101 M 0.598679 0 32 (equest) widthshow 3 FF 193.535995 259.650024 M 0.744858 0 32 (\(\337ush\) to the k) widthshow 254.280624 259.650024 M 0.744858 0 32 (ernel. When \(b) widthshow 315.270447 259.650024 M 0.744858 0 32 (ut not until\) the k) widthshow 387.599945 259.650024 M 0.744858 0 32 (ernel responds \(possibly with ) widthshow 0 FF 510.569397 259.650024 M 0.744858 0 32 (memo-) widthshow 193.535995 271.649963 M 3.548965 0 32 (ry_object_data_r) widthshow 267.226105 271.649963 M 3.548965 0 32 (etur) widthshow 284.846191 271.649963 M 3.548965 0 32 (n) widthshow 3 FF 290.406189 271.649963 M 3.548965 0 32 ( and ending with ) widthshow 0 FF 374.042053 271.649963 M 3.548965 0 32 (memory_object_lock_completed) widthshow 3 FF 512.342041 271.649963 M 3.548965 0 32 (\) it is) widthshow (kno) 193.536 283.65 T (wn that the manager has the sole cop) 208.286 283.65 T (y of the page.) 355.656 283.65 T 5 FF 180.0 298.65 T 4 FF 193.535995 298.649841 M 1.754715 0 32 (both) widthshow 6 FF 211.315994 298.649841 M 1.754715 0 32 widthshow 4 FF 221.185989 298.649841 M 1.754715 0 32 (k) widthshow 225.526047 298.649841 M 1.754715 0 32 (ernel-loc) widthshow 261.426147 298.649841 M 1.754715 0 32 (king) widthshow 6 FF 278.646179 298.649841 M 1.754715 0 32 widthshow 4 FF 288.516174 298.649841 M 1.754715 0 32 (k) widthshow 292.856201 298.649841 M 1.754715 0 32 (ernel) widthshow 3 FF 313.406219 298.649841 M 1.754715 0 32 (: The manager sends a ) widthshow 0 FF 414.099792 298.649841 M 1.754715 0 32 (memory_object_lock_r) widthshow 512.779907 298.649841 M 1.754715 0 32 (equest) widthshow 3 FF 193.535995 310.64978 M 0.164337 0 32 (\(unlock\) to the k) widthshow 260.309082 310.64978 M 0.164337 0 32 (ernel. As soon as this is sent, the k) widthshow 399.293823 310.64978 M 0.164337 0 32 (ernel must be vie) widthshow 468.136963 310.64978 M 0.164337 0 32 (wed as being able) widthshow 193.535995 322.649719 M 2.265961 0 32 (to modify the page, and therefore o) widthshow 347.681915 322.649719 M 2.265961 0 32 (wns it. The ) widthshow 0 FF 401.699799 322.649719 M 2.265961 0 32 (memory_object_lock_completed) widthshow 3 FF (message merely con\336rms the action.) 193.536 334.65 T 7 (Times-Bold) 12 1 mymakefontmetric 7 FF (Pr) 180.0 365.983 T (eser) 192.444 365.983 T (ving Operation Order During Lock Sequences) 212.976 365.983 T 3 FF 180 382.649567 M 2.401199 0 32 (Some of these transitions require recei) widthshow 345.336151 382.649567 M 2.401199 0 32 (ving a ) widthshow 0 FF 377.358551 382.649567 M 2.401199 0 32 (memory_object_lock_completed) widthshow 3 FF 515.658569 382.649567 M 2.401199 0 32 ( mes-) widthshow 180 394.649506 M 1.124268 0 32 (sage. If the memory manager must serialize its operations upon a gi) widthshow 462.627106 394.649506 M 1.124268 0 32 (v) widthshow 467.477173 394.649506 M 1.124268 0 32 (en page \(which it) widthshow 180 406.649445 M 0.325317 0 32 (typically must do\), then it has to w) widthshow 321.067261 406.649445 M 0.325317 0 32 (ait for this message, and defer processing other opera-) widthshow 180 418.649384 M 1.219131 0 32 (tions upon this page until it does recei) widthshow 340.22406 418.649384 M 1.219131 0 32 (v) widthshow 345.074158 418.649384 M 1.219131 0 32 (e the message. Once a ) widthshow 0 FF 442.249817 418.649384 M 1.219131 0 32 (memory_object_lock_-) widthshow 180 430.649323 M 0.743942 0 32 (r) widthshow 184.260101 430.649323 M 0.743942 0 32 (equest) widthshow 3 FF 211.480103 430.649323 M 0.743942 0 32 ( message has been sent to the k) widthshow 341.287781 430.649323 M 0.743942 0 32 (ernel for a page, the follo) widthshow 445.837646 430.649323 M 0.743942 0 32 (wing messages may be) widthshow (subsequently recei) 180.0 442.649 T (v) 253.9 442.649 T (ed for that page:) 258.75 442.649 T 5 FF 180.0 460.649 T 3 FF 193.535995 460.6492 M 1.126968 0 32 (Direct client service requests. Of course, clients can al) widthshow 419.611816 460.6492 M 1.126968 0 32 (w) widthshow 426.731873 460.6492 M 1.126968 0 32 (ays mak) widthshow 460.808899 460.6492 M 1.126968 0 32 (e direct requests of) widthshow (the memory manager at an) 193.536 472.649 T (y time.) 300.026 472.649 T 5 FF 180.0 487.649 T 0 FF 193.535995 487.649078 M 1.072159 0 32 (memory_object_data_r) widthshow 293.326111 487.649078 M 1.072159 0 32 (equest) widthshow 3 FF 320.546112 487.649078 M 1.072159 0 32 (. It is possible that the k) widthshow 422.159119 487.649078 M 1.072159 0 32 (ernel does not hold the page) widthshow 193.535995 499.649017 M 1.122543 0 32 (in question \(it discarded it pre) widthshow 318.608856 499.649017 M 1.122543 0 32 (viously\) and no) widthshow 382.824097 499.649017 M 1.122543 0 32 (w) widthshow 389.39444 499.649017 M 1.122543 0 32 (, by coincidence, it is requesting the) widthshow 193.535995 511.648956 M 0.418198 0 32 (page to satisfy some client\325) widthshow 304.089111 511.648956 M 0.418198 0 32 (s page f) widthshow 335.925537 511.648956 M 0.418198 0 32 (ault. The k) widthshow 379.712006 511.648956 M 0.418198 0 32 (ernel is clearly prepared to w) widthshow 498.05307 511.648956 M 0.418198 0 32 (ait for this) widthshow 193.535995 523.648926 M 1.182816 0 32 (page until the manager completes its lock processing. The manager must not for) widthshow 527.779907 523.648926 M 1.182816 0 32 (get) widthshow (that the k) 193.536 535.649 T (ernel is w) 230.656 535.649 T (aiting for the page; the k) 269.436 535.649 T (ernel ne) 367.376 535.649 T (v) 399.056 535.649 T (er multiply issues page requests.) 403.906 535.649 T 5 FF 180.0 550.649 T 0 FF 193.535995 550.648804 M 1.879303 0 32 (memory_object_data_unlock) widthshow 3 FF 317.966003 550.648804 M 1.879303 0 32 (. The k) widthshow 349.674683 550.648804 M 1.879303 0 32 (ernel is requesting more access for the page.) widthshow 193.535995 562.648682 M 1.230927 0 32 (This will ha) widthshow 243.577957 562.648682 M 1.230927 0 32 (v) widthshow 248.42804 562.648682 M 1.230927 0 32 (e to w) widthshow 275.22995 562.648682 M 1.230927 0 32 (ait until lock processing is completed. If the manager\325) widthshow 500.327698 562.648682 M 1.230927 0 32 (s lock re-) widthshow 193.535995 574.648682 M 1.464874 0 32 (quest in) widthshow 225.991089 574.648682 M 1.464874 0 32 (v) widthshow 230.791199 574.648682 M 1.464874 0 32 (olv) widthshow 243.42128 574.648682 M 1.464874 0 32 (es cleaning, then the k) widthshow 338.330841 574.648682 M 1.464874 0 32 (ernel will still need to be granted greater access) widthshow 193.535995 586.64856 M 0.764496 0 32 (when the lock sequence is completed. If the manager\325) widthshow 414.322296 586.64856 M 0.764496 0 32 (s lock request is a \337ush opera-) widthshow 193.535995 598.64856 M 0.274918 0 32 (tion, though, the k) widthshow 267.320801 598.64856 M 0.274918 0 32 (ernel will cease to hold the page and so granting greater access will) widthshow 193.535995 610.648438 M 0.597336 0 32 (ha) widthshow 202.776108 610.648438 M 0.597336 0 32 (v) widthshow 207.62619 610.648438 M 0.597336 0 32 (e no ef) widthshow 235.781006 610.648438 M 0.597336 0 32 (fect. Indeed, the k) widthshow 309.393066 610.648438 M 0.597336 0 32 (ernel, after \337ushing the page, will proceed to request the) widthshow (page back \(with the greater access\).) 193.536 622.648 T 5 FF 180.0 637.648 T 0 FF 193.535995 637.648315 M 0.613358 0 32 (memory_object_data_r) widthshow 293.326111 637.648315 M 0.613358 0 32 (etur) widthshow 310.946198 637.648315 M 0.613358 0 32 (n) widthshow 3 FF 316.506195 637.648315 M 0.613358 0 32 (. Either the k) widthshow 369.906311 637.648315 M 0.613358 0 32 (ernel is supplying the requested page as a) widthshow 193.535995 649.648315 M 0.481522 0 32 (result of our lock processing or it is randomly e) widthshow 387.319824 649.648315 M 0.481522 0 32 (victing the page. Either w) widthshow 492.185974 649.648315 M 0.481522 0 32 (ay) widthshow 500.976349 649.648315 M 0.481522 0 32 (, this sent) widthshow (page is more current than an) 193.536 661.648 T (y cop) 306.966 661.648 T (y the manager holds.) 328.806 661.648 T 5 FF 180.0 676.648 T 0 FF 193.535995 676.648193 M 1.349365 0 32 (memory_object_terminate) widthshow 3 FF 306.826019 676.648193 M 1.349365 0 32 (. The manager lost the race with the un-mapping of the) widthshow 193.535995 688.648071 M 0.734589 0 32 (object by clients. It follo) widthshow 294.274475 688.648071 M 0.734589 0 32 (ws that an) widthshow 336.143738 688.648071 M 0.734589 0 32 (y data to be returned from the k) widthshow 467.545959 688.648071 M 0.734589 0 32 (ernel has been al-) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 103 103 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 422 731.706665 M -2.5 0 32 (99 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Simple Memory Manager Example) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 85.535995 114.666626 M 0.775909 0 32 (ready) widthshow 107.096359 114.666626 M 0.775909 0 32 (, so the manager has the latest page cop) widthshow 271.223694 114.666626 M 0.775909 0 32 (y) widthshow 275.574066 114.666626 M 0.775909 0 32 (. An) widthshow 293.420044 114.666626 M 0.775909 0 32 (y lock processing is aborted since) widthshow (the k) 85.536 126.667 T (ernel clearly did not see the manager\325) 105.156 126.667 T (s lock request.) 255.116 126.667 T 72 168.999802 360 3.024002 CR 432 170.51 M 72 170.51 L S 0 0 612 792 CR 4 (Times-Bold) 14 1 mymakefontmetric 4 FF (Simple Memory Manager Example) 72.0 164.333 T 3 FF 72 188.69043 M 0.360672 0 32 (The management of page consistenc) widthshow 218.81279 188.69043 M 0.360672 0 32 (y will be sho) widthshow 271.034943 188.69043 M 0.360672 0 32 (wn with a simple e) widthshow 347.877716 188.69043 M 0.360672 0 32 (xample of a memory) widthshow 72 200.690369 M 0.169937 0 32 (manager) widthshow 105.88031 200.690369 M 0.169937 0 32 (. This memory manager can be vie) widthshow 245.230087 200.690369 M 0.169937 0 32 (wed as the basis for a netw) widthshow 353.89978 200.690369 M 0.169937 0 32 (ork shared memory) widthshow 72 212.690308 M 1.628418 0 32 (manager: it supports paging operations to a k) widthshow 263.55899 212.690308 M 1.628418 0 32 (ernel b) widthshow 292.477539 212.690308 M 1.628418 0 32 (ut it also supports direct requests) widthshow (upon the memory requiring the use of direct cache management primiti) 72.0 224.69 T (v) 356.7 224.69 T (es.) 361.55 224.69 T (V) 72.0 248.69 T (arious simpli\336cations are made for this manager:) 78.111 248.69 T 5 (Times-Roman) 7 1 mymakefontmetric 5 FF 72.0 266.69 T 3 FF (The manager supports a single memory object consisting of a single page.) 85.536 266.69 T 5 FF 72.0 281.69 T 3 FF (At most one k) 85.536 281.69 T (ernel has the object mapped.) 141.826 281.69 T 5 FF 72.0 296.69 T 3 FF (The manager is single threaded.) 85.536 296.69 T 5 FF 72.0 311.69 T 3 FF (The message-based memory references access only one inte) 85.536 311.69 T (ger) 325.586 311.69 T (.) 337.806 311.69 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Ov) 72.0 343.023 T (er) 87.216 343.023 T (view) 97.752 343.023 T 3 FF (The ) 72.0 359.69 T 1 FF (netmem) 90.05 359.69 T 3 FF ( manager consists of the follo) 124.48 359.69 T (wing \336les:) 242.27 359.69 T 5 FF 72.0 377.69 T 1 FF (Mak) 85.536 377.69 T (e\336le) 105.436 377.69 T 3 FF 122.656 377.69 T 5 FF 72.0 392.69 T 1 FF (netmem_defs) 85.536 392.69 T 3 FF (.h\321De\336nitions e) 142.186 392.69 T (xported to clients) 210.926 392.69 T 5 FF 72.0 407.69 T 1 FF (netmem_msg) 85.536 407.69 T 3 FF (.defs\321MIG de\336nitions of client\320serv) 142.186 407.69 T (er messages) 292.576 407.69 T 5 FF 72.0 422.69 T 1 FF 85.535995 422.689575 M 0.397873 0 32 (netmem_msg_r) widthshow 151.446106 422.689575 M 0.397873 0 32 (eply) widthshow 3 FF 168.576462 422.689575 M 0.397873 0 32 (.defs\321MIG de\336nitions of manager reply to client messages \(dis-) widthshow (cussed belo) 85.536 434.69 T (w\)) 131.666 434.69 T 5 FF 72.0 449.689 T 1 FF (netmem_obj) 85.536 449.689 T 3 FF (.h\321Internal de\336nitions) 138.856 449.689 T 5 FF 72.0 464.689 T 1 FF (netmem_pager) 85.536 464.689 T 3 FF (.c\321Memory manager code itself) 148.856 464.689 T (There is also a simple test client program \() 72.0 488.689 T 1 FF (netmem_client) 242.53 488.689 T 3 FF (.c\).) 305.29 488.689 T 72 512.68927 M 1.265671 0 32 (Most of the structure of the memory manager can be deri) widthshow 312.68689 512.68927 M 1.265671 0 32 (v) widthshow 317.536957 512.68927 M 1.265671 0 32 (ed from the sections abo) widthshow 420.209717 512.68927 M 1.265671 0 32 (v) widthshow 425.059814 512.68927 M 1.265671 0 32 (e.) widthshow 72 524.689209 M 0.923035 0 32 (The only real complication in this manager results from the direct client message inter-) widthshow 72 536.689148 M 0.963593 0 32 (f) widthshow 75.230057 536.689148 M 0.963593 0 32 (ace, resulting in the page consistenc) widthshow 223.758118 536.689148 M 0.963593 0 32 (y protocol described earlier) widthshow 335.789215 536.689148 M 0.963593 0 32 (. This protocol requires) widthshow 72 548.689087 M 0.912628 0 32 (that the pager be able to defer processing of some incoming requests to serialize all re-) widthshow (quests for the page. A queue of pending operations is maintained.) 72.0 560.689 T 6 FF (Exter) 72.0 592.022 T (nal De\336nitions) 100.476 592.022 T 72 602.022339 360 9 CR 1 G 72 602.022339 360 9 NF 0 G 3 FF (/*) 91.224 608.854 T 3 SL 0 SC 0.6667 G 422.91 606.52 M 422.91 611.77 L 432 606.52 L 422.91 601.27 L F 422.91 606.52 M 108 606.52 L S 0 0 612 792 CR 0 G 3 FF (File: ) 108.0 617.689 T 1 FF (netmem_defs.h) 128.84 617.689 T 3 FF (Author: Da) 108.0 627.689 T (vid L. Black) 153.07 627.689 T 72 641.022095 360 9 CR 1 G 72 641.022095 360 9 NF 0 G 3 FF (*/) 90.0 647.848 T 0.6667 G 117.09 645.52 M 117.09 640.27 L 108 645.52 L 117.09 650.77 L F 432 645.52 M 117.09 645.52 L S 0 0 612 792 CR 0 G 3 FF (External de\336nitions for ) 108.0 637.689 T 1 FF (netmem_pager) 203.27 637.689 T 3 FF (.) 266.59 637.689 T ([1]) 87.34 658.689 T (#include ) 193.9 658.689 T ([2]) 87.34 670.689 T (#de\336ne NETMEM_N) 108.0 670.689 T (AME) 195.14 670.689 T 288.0 670.689 T 1 FF (netmem_pager) 292.44 670.689 T 3 FF 356.31 670.689 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 104 104 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (100 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 180 105.984009 360 9 CR 180 105.984009 360 9 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (/*) 198.0 112.815 T 3 SL 0.6667 G 530.91 110.48 M 530.91 115.73 L 540 110.48 L 530.91 105.23 L F 530.91 110.48 M 396 110.48 L S 0 0 612 792 CR 0 G 3 FF 396 121.650635 M 8.195984 0 32 (Name of the pager for the) widthshow 180 134.983887 360 9 CR 1 G 180 134.983887 360 9 NF 0 G 3 FF (*/) 198.0 141.81 T 0.6667 G 405.09 139.48 M 405.09 134.23 L 396 139.48 L 405.09 144.73 L F 540 139.48 M 405.09 139.48 L S 0 0 612 792 CR 0 G 3 FF (nameservice.) 396.0 131.651 T 180 145.983887 360 9 CR 1 G 180 145.983887 360 9 NF 0 G 3 FF (/*) 199.224 152.815 T 0.6667 G 530.91 150.48 M 530.91 155.73 L 540 150.48 L 530.91 145.23 L F 530.91 150.48 M 216 150.48 L S 180 164.983826 360 9 CR 1 G 180 164.983826 360 9 NF 0 G 3 FF (*/) 198.0 171.81 T 0.6667 G 225.09 169.48 M 225.09 164.23 L 216 169.48 L 225.09 174.73 L F 540 169.48 M 225.09 169.48 L S 0 0 612 792 CR 0 G 3 FF (F) 216.0 161.651 T (ailure codes. Use user) 221.41 161.651 T (-reserv) 308.96 161.651 T (ed errors.) 336.57 161.651 T ([3]) 195.34 182.65 T (#de\336ne NETMEM_B) 216.0 182.65 T (AD_OBJECT) 302.59 182.65 T (\(err_local | err_sub \(13\)|1\)) 396.0 182.65 T ([4]) 195.34 194.65 T (#de\336ne NETMEM_B) 216.0 194.65 T (AD_OFFSET) 302.59 194.65 T (\(err_local | err_sub \(13\)|2\)) 396.0 194.65 T ([5]) 195.34 206.65 T (#de\336ne NETMEM_F) 216.0 206.65 T (AILURE) 301.09 206.65 T (\(err_local | err_sub \(13\)|3\)) 396.0 206.65 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (Client Request De\336nitions) 180.0 235.984 T 3 FF 180 252.650223 M 0.747452 0 32 (Special MIG de\336nitions are required for client messages because there can be incoming) widthshow 180 264.650146 M 0.343277 0 32 (requests that will not be processed and therefore will not ha) widthshow 421.522888 264.650146 M 0.343277 0 32 (v) widthshow 426.372986 264.650146 M 0.343277 0 32 (e a reply before returning to) widthshow (the serv) 180.0 276.65 T (er loop to obtain the ne) 211.23 276.65 T (xt message.) 303.57 276.65 T 180 300.650085 M 1.249084 0 32 (The request de\336nitions must e) widthshow 305.396423 300.650085 M 1.249084 0 32 (xplicitly specify ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 375.114594 300.650085 M 1.249084 0 32 (sr) widthshow 382.52478 300.650085 M 1.249084 0 32 (eplyport) widthshow 3 FF 415.854797 300.650085 M 1.249084 0 32 ( options for the reply port for) widthshow 180 312.650055 M 0.78598 0 32 (the message \(lines [7] and [14]\) so that the reply port becomes an e) widthshow 458.617859 312.650055 M 0.78598 0 32 (xplicit ar) widthshow 495.053955 312.650055 M 0.78598 0 32 (gument for) widthshow 180 324.650024 M 0.184174 0 32 (the call to the serv) widthshow 253.906784 324.650024 M 0.184174 0 32 (er routines. The serv) widthshow 336.509399 324.650024 M 0.184174 0 32 (er will need to sa) widthshow 405.366211 324.650024 M 0.184174 0 32 (v) widthshow 410.216309 324.650024 M 0.184174 0 32 (e the reply port if it needs to de-) widthshow (fer the request.) 180.0 336.65 T 180 360.649902 M 1.42395 0 32 (The requests consist of tw) widthshow 290.025879 360.649902 M 1.42395 0 32 (o simple requests: ) widthshow 0 FF 369.0177 360.649902 M 1.42395 0 32 (netmem_r) widthshow 412.707825 360.649902 M 1.42395 0 32 (ead) widthshow 3 FF 427.707825 360.649902 M 1.42395 0 32 ( and ) widthshow 0 FF 449.995728 360.649902 M 1.42395 0 32 (netmem_write) widthshow 3 FF 511.635742 360.649902 M 1.42395 0 32 ( which) widthshow (each tak) 180.0 372.65 T (e an object of) 212.94 372.65 T (fset and get or set, respecti) 266.84 372.65 T (v) 373.23 372.65 T (ely) 378.08 372.65 T (, the inte) 389.651 372.65 T (ger at that of) 424.221 372.65 T (fset.) 474.791 372.65 T 180 383.983154 360 9 CR 1 G 180 383.983154 360 9 NF 0 G 3 FF (/*) 199.224 390.814 T 0.6667 G 530.91 388.48 M 530.91 393.73 L 540 388.48 L 530.91 383.23 L F 530.91 388.48 M 216 388.48 L S 0 0 612 792 CR 0 G 3 FF (File: ) 216.0 399.65 T 0 FF (netmem_msg) 236.84 399.65 T 3 FF (.defs) 293.49 399.65 T (Author: Da) 216.0 409.65 T (vid L. Black) 261.07 409.65 T 180 422.982971 360 9 CR 1 G 180 422.982971 360 9 NF 0 G 3 FF (*/) 198.0 429.809 T 0.6667 G 225.09 427.48 M 225.09 422.23 L 216 427.48 L 225.09 432.73 L F 540 427.48 M 225.09 427.48 L S 0 0 612 792 CR 0 G 3 FF (MIG interf) 216.0 419.65 T (ace for messages to simple netmemory serv) 259.5 419.65 T (er) 433.76 419.65 T ([1]) 195.34 440.65 T (subsystem ) 216.0 440.65 T 5 FF (netmem_msg) 260.17 440.65 T 3 FF (417200;) 396.0 440.65 T ([2]) 195.34 452.65 T (#include ) 216.0 452.65 T ([3]) 195.34 464.649 T (#include ) 216.0 464.649 T 180 469.982788 360 9 CR 1 G 180 469.982788 360 9 NF 0 G 3 FF (/*) 199.224 476.814 T 0.6667 G 530.91 474.48 M 530.91 479.73 L 540 474.48 L 530.91 469.23 L F 530.91 474.48 M 216 474.48 L S 180 488.982727 360 9 CR 1 G 180 488.982727 360 9 NF 0 G 3 FF (*/) 198.0 495.809 T 0.6667 G 225.09 493.48 M 225.09 488.23 L 216 493.48 L 225.09 498.73 L F 540 493.48 M 225.09 493.48 L S 0 0 612 792 CR 0 G 3 FF (Read data from the object) 216.0 485.649 T ([4]) 195.34 506.649 T (routine ) 216.0 506.649 T 0 FF (netmem_r) 246.83 506.649 T (ead) 290.52 506.649 T 3 FF ([5]) 195.34 518.649 T (\() 216.0 518.649 T ([6]) 195.34 530.649 T 5 FF (object) 252.0 530.649 T 3 FF (: mach_port_t;) 396.0 530.649 T ([7]) 195.34 542.649 T (sreplyport ) 252.0 542.649 T 5 FF (r) 295.05 542.649 T (eply_to) 298.57 542.649 T 3 FF (: mach_port_mak) 396.0 542.649 T (e_send_once_t;) 466.17 542.649 T ([8]) 195.34 554.649 T 5 FF (of) 252.0 554.649 T (fset) 259.6 554.649 T 3 FF (: vm_address_t;) 396.0 554.649 T ([9]) 195.34 566.649 T (out ) 252.0 566.649 T 5 FF (value) 267.28 566.649 T 3 FF (: int) 396.0 566.649 T ([10]) 190.34 578.649 T (\);) 216.0 578.649 T 180 583.9823 360 9 CR 1 G 180 583.9823 360 9 NF 0 G 3 FF (/*) 199.224 590.813 T 0.6667 G 530.91 588.48 M 530.91 593.73 L 540 588.48 L 530.91 583.23 L F 530.91 588.48 M 216 588.48 L S 180 602.982239 360 9 CR 1 G 180 602.982239 360 9 NF 0 G 3 FF (*/) 198.0 609.808 T 0.6667 G 225.09 607.48 M 225.09 602.23 L 216 607.48 L 225.09 612.73 L F 540 607.48 M 225.09 607.48 L S 0 0 612 792 CR 0 G 3 FF (Write data to the object) 216.0 599.649 T ([11]) 190.34 620.649 T (routine ) 216.0 620.649 T 0 FF (netmem_write) 246.83 620.649 T 3 FF ([12]) 190.34 632.649 T (\() 216.0 632.649 T ([13]) 190.34 644.649 T 5 FF (object) 252.0 644.649 T 3 FF (: mach_port_t;) 396.0 644.649 T ([14]) 190.34 656.649 T (sreplyport ) 252.0 656.649 T 5 FF (r) 295.05 656.649 T (eply_to) 298.57 656.649 T 3 FF (: mach_port_mak) 396.0 656.649 T (e_send_once_t;) 466.17 656.649 T ([15]) 190.34 668.649 T 5 FF (of) 252.0 668.649 T (fset) 259.6 668.649 T 3 FF (: vm_address_t;) 396.0 668.649 T ([16]) 190.34 680.649 T 5 FF (value) 252.0 680.649 T 3 FF (: int) 396.0 680.649 T ([17]) 190.34 692.648 T (\);) 216.0 692.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 105 105 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (101 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Simple Memory Manager Example) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666656 M 1.234543 0 32 (It is necessary to separately de\336ne the reply messages that will be e) widthshow 356.054626 114.666656 M 1.234543 0 32 (xplicitly generated) widthshow 72 126.666641 M 0.648422 0 32 (when these deferred requests are processed \(lines [6] and [12]\). Note that the subsystem) widthshow 72 138.666595 M 0.391266 0 32 (ID is 100 more than that in the request de\336nitions which is Mach con) widthshow 353.606689 138.666595 M 0.391266 0 32 (v) widthshow 358.456787 138.666595 M 0.391266 0 32 (ention. In general,) widthshow 72 150.666534 M 0.813599 0 32 (most processing routines will perform their processing when called, returning an appro-) widthshow 72 162.666473 M 0.934219 0 32 (priate success or f) widthshow 146.622726 162.666473 M 0.934219 0 32 (ailure return to the MIG generated serv) widthshow 308.698151 162.666473 M 0.934219 0 32 (er stubs. Ho) widthshow 358.36673 162.666473 M 0.934219 0 32 (we) widthshow 369.776855 162.666473 M 0.934219 0 32 (v) widthshow 374.626953 162.666473 M 0.934219 0 32 (er) widthshow 381.997192 162.666473 M 0.934219 0 32 (, when a re-) widthshow 72 174.666443 M 0.719223 0 32 (quest is to be deferred, MIG_NO_REPL) widthshow 236.236679 174.666443 M 0.719223 0 32 (Y is returned to the stub which pre) widthshow 379.611389 174.666443 M 0.719223 0 32 (v) widthshow 384.461487 174.666443 M 0.719223 0 32 (ents a reply) widthshow 72 186.666428 M 1.297684 0 32 (from being sent. Replies are e) widthshow 197.758514 186.666428 M 1.297684 0 32 (xplicitly sent via these MIG generated reply stubs \(lines) widthshow ([73] and [81] in ) 72.0 198.666 T 1 FF (pending_op_execute) 137.54 198.666 T 3 FF (\).) 224.21 198.666 T 72 209.999741 360 9 CR 1 G 72 209.999741 360 9 NF 0 G 3 FF (/*) 91.224 216.831 T 3 SL 0 SC 0.6667 G 422.91 214.5 M 422.91 219.75 L 432 214.5 L 422.91 209.25 L F 422.91 214.5 M 108 214.5 L S 0 0 612 792 CR 0 G 3 FF (File: ) 108.0 225.666 T 1 FF (netmem_msg_r) 128.84 225.666 T (eply) 194.75 225.666 T 3 FF (.defs) 211.88 225.666 T (Author: Da) 108.0 235.666 T (vid L. Black) 153.07 235.666 T 72 248.999557 360 9 CR 1 G 72 248.999557 360 9 NF 0 G 3 FF (*/) 90.0 255.826 T 0.6667 G 117.09 253.5 M 117.09 248.25 L 108 253.5 L 117.09 258.75 L F 432 253.5 M 117.09 253.5 L S 0 0 612 792 CR 0 G 3 FF (MIG interf) 108.0 245.666 T (ace for reply messages from simple netmemory serv) 151.5 245.666 T (er) 360.47 245.666 T ([1]) 87.34 266.666 T (subsystem ) 108.0 266.666 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (netmem_msg_r) 152.17 266.666 T (eply) 212.9 266.666 T 3 FF (417300;) 288.0 266.666 T ([2]) 87.34 278.666 T (msgoption MA) 108.0 278.666 T (CH_SEND_TIMEOUT) 168.44 278.666 T (;) 262.881 278.666 T 72 283.999451 360 9 CR 1 G 72 283.999451 360 9 NF 0 G 3 FF (/*) 91.224 290.831 T 0.6667 G 422.91 288.5 M 422.91 293.75 L 432 288.5 L 422.91 283.25 L F 422.91 288.5 M 108 288.5 L S 72 302.99939 360 9 CR 1 G 72 302.99939 360 9 NF 0 G 3 FF (*/) 90.0 309.826 T 0.6667 G 117.09 307.5 M 117.09 302.25 L 108 307.5 L 117.09 312.75 L F 432 307.5 M 117.09 307.5 L S 0 0 612 792 CR 0 G 3 FF (Protect ag) 144.0 299.666 T (ainst full reply ports.) 184.22 299.666 T ([3]) 87.34 320.666 T (#include ) 108.0 320.666 T ([4]) 87.34 332.666 T (#include ) 108.0 332.666 T ([5]) 87.34 344.666 T (type ) 108.0 344.666 T 4 FF (r) 127.72 344.666 T (eply_port_t) 131.24 344.666 T 3 FF ( = MA) 177.35 344.666 T (CH_MSG_TYPE_MO) 203.7 344.666 T (VE_SEND_ONCE ctype: ) 294.871 344.666 T (mach_port_t;) 162.0 354.666 T 72 359.999146 360 9 CR 1 G 72 359.999146 360 9 NF 0 G 3 FF (/*) 91.224 366.83 T 0.6667 G 422.91 364.5 M 422.91 369.75 L 432 364.5 L 422.91 359.25 L F 422.91 364.5 M 108 364.5 L S 0 0 612 792 CR 0 G 3 FF 108 375.665771 M 1.286652 0 32 (Reply routine to complete a read operation. Return the result of the operation) widthshow 72 388.999023 360 9 CR 1 G 72 388.999023 360 9 NF 0 G 3 FF (*/) 90.0 395.825 T 0.6667 G 117.09 393.5 M 117.09 388.25 L 108 393.5 L 117.09 398.75 L F 432 393.5 M 117.09 393.5 L S 0 0 612 792 CR 0 G 3 FF (and the v) 108.0 385.666 T (alue read.) 144.41 385.666 T ([6]) 87.34 406.666 T (simpleroutine ) 108.0 406.666 T 1 FF (netmem_r) 165.5 406.666 T (ead_r) 209.19 406.666 T (eply) 233.45 406.666 T 3 FF ([7]) 87.34 418.666 T (\() 108.0 418.666 T ([8]) 87.34 430.666 T 4 FF (r) 144.0 430.666 T (eply_port) 147.52 430.666 T 3 FF (: reply_port_t;) 288.0 430.666 T ([9]) 87.34 442.665 T 4 FF (r) 144.0 442.665 T (esult) 147.52 442.665 T 3 FF (: k) 288.0 442.665 T (ern_return_t;) 298.18 442.665 T ([10]) 82.34 454.665 T 4 FF (value) 144.0 454.665 T 3 FF (: int) 288.0 454.665 T ([11]) 82.34 466.665 T (\);) 108.0 466.665 T 72 471.998657 360 9 CR 1 G 72 471.998657 360 9 NF 0 G 3 FF (/*) 91.224 478.83 T 0.6667 G 422.91 476.5 M 422.91 481.75 L 432 476.5 L 422.91 471.25 L F 422.91 476.5 M 108 476.5 L S 72 490.998596 360 9 CR 1 G 72 490.998596 360 9 NF 0 G 3 FF (*/) 90.0 497.825 T 0.6667 G 117.09 495.5 M 117.09 490.25 L 108 495.5 L 117.09 500.75 L F 432 495.5 M 117.09 495.5 L S 0 0 612 792 CR 0 G 3 FF (Reply routine to compete a write operation.) 108.0 487.665 T ([12]) 82.34 508.665 T (simpleroutine ) 108.0 508.665 T 1 FF (netmem_write_r) 165.5 508.665 T (eply) 236.4 508.665 T 3 FF ([13]) 82.34 520.665 T (\() 108.0 520.665 T ([14]) 82.34 532.665 T 4 FF (r) 144.0 532.665 T (eply_port) 147.52 532.665 T 3 FF (: reply_port_t;) 288.0 532.665 T ([15]) 82.34 544.665 T 4 FF (r) 144.0 544.665 T (esult) 147.52 544.665 T 3 FF (: k) 288.0 544.665 T (ern_return_t) 298.18 544.665 T ([16]) 82.34 556.665 T (\);) 108.0 556.665 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Inter) 72.0 585.998 T (nal De\336nitions) 97.812 585.998 T 3 FF 72 602.664917 M 1.243774 0 32 (This \336le de\336nes the internal memory object structure \(line [21]\). The object state con-) widthshow 72 614.664917 M 0.451309 0 32 (sists of the memory object cache port reference, a right count \(discussed later\) and a ref-) widthshow 72 626.664856 M 0.504639 0 32 (erence to the page data. Since the object consists of only one page, the page information) widthshow 72 638.664856 M 1.047974 0 32 (can be k) widthshow 107.31601 638.664856 M 1.047974 0 32 (ept in the same structure \(lines [26] and on\). The page information consists of) widthshow 72 650.664795 M 0.547485 0 32 (the \322backing store\323 for the page \(space obtained from ) widthshow 1 FF 293.807404 650.664795 M 0.547485 0 32 (vm_allocate) widthshow 3 FF 344.90741 650.664795 M 0.547485 0 32 (\), the ) widthshow 4 FF 369.052368 650.664795 M 0.547485 0 32 (owner) widthshow 393.952454 650.664795 M 0.547485 0 32 (ship) widthshow 3 FF 410.622437 650.664795 M 0.547485 0 32 ( state) widthshow (and the queue of pending operations.) 72.0 662.665 T 72 686.664734 M 0.596313 0 32 (There are six states de\336ned for the page as sho) widthshow 263.45697 686.664734 M 0.596313 0 32 (wn in FIGURE 3. V) widthshow 345.562866 686.664734 M 0.596313 0 32 (arious simpli\336cations) widthshow (from FIGURE 2 are possible because of the nature of the manager) 72.0 698.665 T (.) 336.66 698.665 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 106 106 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (102 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 7 1 mymakefontmetric 3 FF 180.0 434.635 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 193.535995 434.634644 M 1.274368 0 32 (NETMEM_OBJ_NONE\321No memory e) widthshow 359.80481 434.634644 M 1.274368 0 32 (xists for the object. This is the initial state.) widthshow 193.535995 446.634583 M 0.672989 0 32 (As soon as an) widthshow 250.675049 446.634583 M 0.672989 0 32 (y request for the page is made, a page of memory in the serv) widthshow 500.884033 446.634583 M 0.672989 0 32 (er will be) widthshow 193.535995 458.634521 M 1.247787 0 32 (allocated. This e) widthshow 261.70166 458.634521 M 1.247787 0 32 (xtra state is added simply to allo) widthshow 398.37854 458.634521 M 1.247787 0 32 (w the use of ) widthshow 0 FF 454.469666 458.634521 M 1.247787 0 32 (memory_object_da-) widthshow (ta_una) 193.536 470.635 T (v) 222.736 470.635 T (ailable) 227.636 470.635 T 4 FF ( when the page is \336rst requested \(line [214]\).) 255.976 470.635 T 3 FF 180.0 485.635 T 4 FF (NETMEM_OBJ_READ\321This corresponds to the ) 193.536 485.635 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF (both-r) 397.966 485.635 T (eading) 422.596 485.635 T 4 FF ( state in FIGURE 2.) 449.816 485.635 T 3 FF 180.0 500.634 T 4 FF 193.535995 500.634491 M 1.368637 0 32 (NETMEM_OBJ_SER) widthshow 282.186432 500.634491 M 1.368637 0 32 (VER_WRITE\321This corresponds to the ) widthshow 5 FF 450.42099 500.634491 M 1.368637 0 32 (mana) widthshow 472.541046 500.634491 M 1.368637 0 32 (g) widthshow 477.441101 500.634491 M 1.368637 0 32 (er) widthshow 485.571228 500.634491 M 1.368637 0 32 (-writing) widthshow 4 FF 517.801208 500.634491 M 1.368637 0 32 ( state) widthshow (in FIGURE 2.) 193.536 512.634 T 3 FF 180.0 527.634 T 4 FF 193.535995 527.63446 M 0.820648 0 32 (NETMEM_OBJ_KERNEL_WRITE\321This corresponds to the ) widthshow 5 FF 450.128601 527.63446 M 0.820648 0 32 (k) widthshow 454.468658 527.63446 M 0.820648 0 32 (ernel-writing) widthshow 4 FF 507.248657 527.63446 M 0.820648 0 32 ( state in) widthshow (FIGURE 2.) 193.536 539.634 T 3 FF 180.0 554.634 T 4 FF 193.535995 554.634399 M 0.349121 0 32 (NETMEM_OBJ_CLEANING\321This corresponds to the ) widthshow 5 FF 423.242493 554.634399 M 0.349121 0 32 (k) widthshow 427.58255 554.634399 M 0.349121 0 32 (ernel-cleaning) widthshow 4 FF 485.902557 554.634399 M 0.349121 0 32 ( state in FIG-) widthshow 4 FF (URE 2.) 193.536 566.634 T 3 FF 180.0 581.634 T 4 FF 193.535995 581.634399 M 2.316208 0 32 (NETMEM_OBJ_FLUSHING\321This corresponds to either the ) widthshow 5 FF 457.037048 581.634399 M 2.316208 0 32 (both-\337ushing) widthshow 4 FF 509.817047 581.634399 M 2.316208 0 32 ( or the) widthshow 5 FF 193.535995 593.634399 M 0.688583 0 32 (k) widthshow 197.876053 593.634399 M 0.688583 0 32 (ernel-\337ushing) widthshow 4 FF 253.426056 593.634399 M 0.688583 0 32 ( states in FIGURE 2. It is not necessary to dif) widthshow 441.992035 593.634399 M 0.688583 0 32 (ferentiate between these) widthshow 193.535995 605.634338 M 1.090271 0 32 (states in this e) widthshow 253.04689 605.634338 M 1.090271 0 32 (xample because no other operations will be performed upon the page) widthshow (while it is in either state.) 193.536 617.634 T 180 641.634216 M 1.424255 0 32 (The ) widthshow 5 FF 199.474258 641.634216 M 1.424255 0 32 (k) widthshow 203.814316 641.634216 M 1.424255 0 32 (ernel-loc) widthshow 239.714432 641.634216 M 1.424255 0 32 (king) widthshow 4 FF 256.934448 641.634216 M 1.424255 0 32 ( state is not needed because the manager does not w) widthshow 478.807068 641.634216 M 1.424255 0 32 (ait for \(nor re-) widthshow (quest\) a reply from that lock request.) 180.0 653.634 T 180 677.634094 M 0.309982 0 32 (The only possible pending k) widthshow 294.469971 677.634094 M 0.309982 0 32 (ernel operations are data unlock and data request. A data un-) widthshow 180 689.634033 M 0.468521 0 32 (lock will ne) widthshow 227.907181 689.634033 M 0.468521 0 32 (v) widthshow 232.757263 689.634033 M 0.468521 0 32 (er follo) widthshow 262.135925 689.634033 M 0.468521 0 32 (w a data request, so the structure need only remember one operation) widthshow 171 105.984009 378 321.984009 CR 1 G 171 105.984009 378 321.984009 NF 180 402.984009 360 27 NF 180 402.984009 360 13.031998 CR 0.25 SL 2 SC 0 G 540 409.5 M 252 409.5 L S 0 SC 243 409.5 M 180 409.5 L S 171 105.984009 378 321.984009 CR 6 (Helvetica-Bold) 9 1 mymakefontmetric 6 FF (FIGURE 3) 180.0 422.016 T 2 FF (Example Pr) 252.0 422.016 T (ogram P) 297.585 422.016 T (age State T) 330.237 422.016 T (ransitions) 372.565 422.016 T 1 G 288 285.984009 144 108 NF 0 G 7 (Times-Roman) 12 1 mymakefontmetric 7 FF (S) 288.0 292.651 T 4 FF (r\321data supplied, read access only) 294.672 292.651 T 7 FF (Sw) 288.0 304.651 T 4 FF 303.336 304.651 T 7 FF (I) 288.0 316.651 T 4 FF 291.996 316.651 T 7 FF (U) 288.0 328.65 T 4 FF 296.664 328.65 T (v) 367.794 328.65 T (e write access) 372.644 328.65 T 7 FF 288 340.650391 M 6.642288 0 32 (C) widthshow 4 FF 296.003998 340.650391 M 5.535233 0 32 widthshow 422.709778 340.650391 M 5.535233 0 32 (v) widthshow 427.559875 340.650391 M 5.535233 0 32 (e) widthshow (write access) 288.0 352.65 T 7 FF 288 364.650269 M 3.371292 0 32 (F) widthshow 4 FF 294.671997 364.650269 M 2.809402 0 32 widthshow (remo) 288.0 376.65 T (v) 308.4 376.65 T (e write access) 313.25 376.65 T 7 FF (OK) 288.0 388.65 T 4 FF 305.328 388.65 T (v) 398.388 388.65 T (ed) 403.238 388.65 T 504.98 237.58 M 501.34 238.09 L 506.76 250.3 L 508.63 237.07 L F 0.5 SL 270 171 286.46814 162.627472 363.52533 250.297745 AS 195.11 242.47 M 191.45 242.3 L 194.5 255.25 L 198.78 242.65 L F 276 84 222.999435 244.544601 305.998657 255.256302 AS 355.5 162.52 M 358.81 162.52 L 355.5 150.98 L 352.19 162.52 L F 355.5 162.52 M 355.5 204.98 L S 466.2 245.91 M 465.03 249 L 476.99 249.98 L 467.37 242.81 L F 466.21 245.91 M 405 222.98 L S 7 FF (Sr) 268.338 229.381 T (F) 369.0 193.381 T (F) 417.112 148.365 T (OK) 279.682 148.381 T (Sw) 236.672 229.381 T (C) 504.0 301.381 T (OK) 459.0 319.381 T (U) 441.341 229.381 T 1 G 0 360 99 36 490.5 267.984009 AF 0 G 0 360 99 36 490.5 267.984009 AS 4 FF (KERNEL_WRITE) 452.457 271.397 T 1 G 0 360 99 36 490.5 366.984009 AF 0 G 0 360 99 36 490.5 366.984009 AS (CLEANING) 464.954 370.397 T 1 G 0 360 99 36 355.5 132.984009 AF 0 G 0 360 99 36 355.5 132.984009 AS (FLUSHING) 330.784 136.397 T 1 G 0 360 99 36 355.5 222.984009 AF 0 G 0 360 99 36 355.5 222.984009 AS (READ) 341.892 226.397 T 1 G 0 360 99 36 229.5 267.984009 AF 0 G 0 360 99 36 229.5 267.984009 AS (SER) 192.405 271.397 T (VER_WRITE) 209.946 271.397 T 1 G 0 360 99 36 229.5 375.984009 AF 0 G 0 360 99 36 229.5 375.984009 AS (NONE) 215.617 379.397 T 7 FF (I) 198.0 310.381 T (I) 252.0 310.381 T 295.56 227.9 M 296.97 230.89 L 305.99 222.98 L 294.15 224.91 L F 295.57 227.91 M 246.12 251.03 L S 417.59 133.66 M 417.78 130.04 L 404.99 132.98 L 417.4 137.27 L F 6 84 240.999374 244.54155 405.001373 255.254776 AS 217.92 296.99 M 221.23 296.91 L 217.65 285.46 L 214.61 297.07 L F 217.92 296.99 M 219.34 358.37 L S 270 90 82.995453 190.539627 305.998779 363.253815 AS 490.5 337.45 M 487.19 337.45 L 490.5 348.98 L 493.81 337.45 L F 490.5 337.45 M 490.5 285.98 L S 429.46 267.98 M 429.46 271.29 L 441 267.98 L 429.46 264.68 L F 429.46 267.98 M 306 267.98 L S 397.53 244.85 M 400.16 242.83 L 390.5 235.71 L 394.91 246.87 L F 397.54 244.85 M 477 348.98 L S 0 0 612 792 CR 558 559.967773 2 9.999985 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 107 107 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (103 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Simple Memory Manager Example) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666656 M 0.418503 0 32 (\(the last\), line [30] \(and the access so requested, line [29]\). Client requests, ho) widthshow 389.070709 114.666656 M 0.418503 0 32 (we) widthshow 400.480835 114.666656 M 0.418503 0 32 (v) widthshow 405.330933 114.666656 M 0.418503 0 32 (er) widthshow 412.701172 114.666656 M 0.418503 0 32 (, can) widthshow 72 126.666641 M 0.685654 0 32 (stack up arbitrarily) widthshow 148.261673 126.666641 M 0.685654 0 32 (, so a queue is needed for them \(line [28]\). Client pending operations) widthshow 72 138.666626 M 0.603027 0 32 (\(line [10]\) must remember all of the parameters from the client\325) widthshow 332.420593 138.666626 M 0.603027 0 32 (s message, including the) widthshow (reply port.) 72.0 150.667 T 72 161.999893 360 9 CR 1 G 72 161.999893 360 9 NF 0 G 3 FF (/*) 91.224 168.831 T 3 SL 0 SC 0.6667 G 422.91 166.5 M 422.91 171.75 L 432 166.5 L 422.91 161.25 L F 422.91 166.5 M 108 166.5 L S 0 0 612 792 CR 0 G 3 FF (File: ) 108.0 177.667 T 1 FF (netmem_obj) 128.84 177.667 T 3 FF (.h) 182.16 177.667 T (Author: Da) 108.0 187.666 T (vid L. Black) 153.07 187.666 T 72 200.99971 360 9 CR 1 G 72 200.99971 360 9 NF 0 G 3 FF (*/) 90.0 207.826 T 0.6667 G 117.09 205.5 M 117.09 200.25 L 108 205.5 L 117.09 210.75 L F 432 205.5 M 117.09 205.5 L S 0 0 612 792 CR 0 G 3 FF (Internal de\336nitions for ) 108.0 197.666 T 1 FF (netmem_msg) 200.49 197.666 T 3 FF ( serv) 257.14 197.666 T (er) 276.15 197.666 T (.) 283.37 197.666 T ([1]) 87.34 218.666 T (#include ) 108.0 218.666 T 72 223.999649 360 9 CR 1 G 72 223.999649 360 9 NF 0 G 3 FF (/*) 91.224 230.831 T 0.6667 G 422.91 228.5 M 422.91 233.75 L 432 228.5 L 422.91 223.25 L F 422.91 228.5 M 108 228.5 L S 72 242.999588 360 9 CR 1 G 72 242.999588 360 9 NF 0 G 3 FF (*/) 90.0 249.826 T 0.6667 G 117.09 247.5 M 117.09 242.25 L 108 247.5 L 117.09 252.75 L F 432 247.5 M 117.09 247.5 L S 0 0 612 792 CR 0 G 3 FF (Possible object states) 108.0 239.666 T ([2]) 87.34 260.666 T (#de\336ne NETMEM_OBJ_NONE) 108.0 260.666 T (1) 288.0 260.666 T 72 265.999512 360 9 CR 1 G 72 265.999512 360 9 NF 0 G 3 FF (/*) 90.0 272.831 T 0.6667 G 422.91 270.5 M 422.91 275.75 L 432 270.5 L 422.91 265.25 L F 422.91 270.5 M 288 270.5 L S 72 284.999451 360 9 CR 1 G 72 284.999451 360 9 NF 0 G 3 FF (*/) 90.0 291.826 T 0.6667 G 297.09 289.5 M 297.09 284.25 L 288 289.5 L 297.09 294.75 L F 432 289.5 M 297.09 289.5 L S 0 0 612 792 CR 0 G 3 FF (No memory e) 288.0 281.666 T (xists for the object) 342.84 281.666 T ([3]) 87.34 302.666 T (#de\336ne NETMEM_OBJ_READ) 108.0 302.666 T (2) 288.0 302.666 T 72 307.99939 360 9 CR 1 G 72 307.99939 360 9 NF 0 G 3 FF (/*) 90.0 314.831 T 0.6667 G 422.91 312.5 M 422.91 317.75 L 432 312.5 L 422.91 307.25 L F 422.91 312.5 M 288 312.5 L S 0 0 612 792 CR 0 G 3 FF 288 323.666016 M 2.229874 0 32 (Serv) widthshow 306.180084 323.666016 M 2.229874 0 32 (er has read only cop) widthshow 395.529663 323.666016 M 2.229874 0 32 (y) widthshow 399.880005 323.666016 M 2.229874 0 32 (, k) widthshow 412.009949 323.666016 M 2.229874 0 32 (ernel) widthshow 72 336.999268 360 9 CR 1 G 72 336.999268 360 9 NF 0 G 3 FF (*/) 90.0 343.826 T 0.6667 G 297.09 341.5 M 297.09 336.25 L 288 341.5 L 297.09 346.75 L F 432 341.5 M 297.09 341.5 L S 0 0 612 792 CR 0 G 3 FF (may ha) 288.0 333.666 T (v) 316.96 333.666 T (e read only cop) 321.81 333.666 T (y) 383.08 333.666 T ([4]) 87.34 354.666 T (#de\336ne NETMEM_OBJ_SER) 108.0 354.666 T (VER_WRITE) 228.59 354.666 T (3) 288.0 354.666 T 72 359.999207 360 9 CR 1 G 72 359.999207 360 9 NF 0 G 3 FF (/*) 90.0 366.83 T 0.6667 G 422.91 364.5 M 422.91 369.75 L 432 364.5 L 422.91 359.25 L F 422.91 364.5 M 288 364.5 L S 0 0 612 792 CR 0 G 3 FF 288 375.665833 M 0.673859 0 32 (Serv) widthshow 306.180084 375.665833 M 0.673859 0 32 (er has writable cop) widthshow 383.911743 375.665833 M 0.673859 0 32 (y) widthshow 388.262085 375.665833 M 0.673859 0 32 (, no k) widthshow 412.009857 375.665833 M 0.673859 0 32 (ernel) widthshow 72 388.999084 360 9 CR 1 G 72 388.999084 360 9 NF 0 G 3 FF (*/) 90.0 395.825 T 0.6667 G 297.09 393.5 M 297.09 388.25 L 288 393.5 L 297.09 398.75 L F 432 393.5 M 297.09 393.5 L S 0 0 612 792 CR 0 G 3 FF (cop) 288.0 385.666 T (y) 302.34 385.666 T ([5]) 87.34 406.666 T (#de\336ne NETMEM_OBJ_KERNEL_WRITE) 108.0 406.666 T (4) 288.0 406.666 T 72 411.999023 360 9 CR 1 G 72 411.999023 360 9 NF 0 G 3 FF (/*) 90.0 418.83 T 0.6667 G 422.91 416.5 M 422.91 421.75 L 432 416.5 L 422.91 411.25 L F 422.91 416.5 M 288 416.5 L S 0 0 612 792 CR 0 G 3 FF 288 427.665649 M 4.332275 0 32 (K) widthshow 294.970154 427.665649 M 4.332275 0 32 (ernel may ha) widthshow 355.084808 427.665649 M 4.332275 0 32 (v) widthshow 359.934875 427.665649 M 4.332275 0 32 (e writable cop) widthshow 425.149506 427.665649 M 4.332275 0 32 (y) widthshow 429.499878 427.665649 M 4.332275 0 32 (,) widthshow 72 440.998901 360 9 CR 1 G 72 440.998901 360 9 NF 0 G 3 FF (*/) 90.0 447.825 T 0.6667 G 297.09 445.5 M 297.09 440.25 L 288 445.5 L 297.09 450.75 L F 432 445.5 M 297.09 445.5 L S 0 0 612 792 CR 0 G 3 FF (serv) 288.0 437.666 T (er has no-access cop) 304.51 437.666 T (y) 386.32 437.666 T ([6]) 87.34 458.666 T (#de\336ne NETMEM_OBJ_CLEANING) 108.0 458.666 T (5) 288.0 458.666 T 72 463.99884 360 9 CR 1 G 72 463.99884 360 9 NF 0 G 3 FF (/*) 90.0 470.83 T 0.6667 G 422.91 468.5 M 422.91 473.75 L 432 468.5 L 422.91 463.25 L F 422.91 468.5 M 288 468.5 L S 0 0 612 792 CR 0 G 3 FF 288 479.665466 M 1.657974 0 32 (Pending request to k) widthshow 374.813965 479.665466 M 1.657974 0 32 (ernel to clean) widthshow 72 492.998718 360 9 CR 1 G 72 492.998718 360 9 NF 0 G 3 FF (*/) 90.0 499.825 T 0.6667 G 297.09 497.5 M 297.09 492.25 L 288 497.5 L 297.09 502.75 L F 432 497.5 M 297.09 497.5 L S 0 0 612 792 CR 0 G 3 FF (page and set read-only) 288.0 489.665 T ([7]) 87.34 510.665 T (#de\336ne NETMEM_OBJ_FLUSHING) 108.0 510.665 T (6) 288.0 510.665 T 72 515.998657 360 9 CR 1 G 72 515.998657 360 9 NF 0 G 3 FF (/*) 90.0 522.83 T 0.6667 G 422.91 520.5 M 422.91 525.75 L 432 520.5 L 422.91 515.25 L F 422.91 520.5 M 288 520.5 L S 0 0 612 792 CR 0 G 3 FF 288 531.665283 M 1.657974 0 32 (Pending request to k) widthshow 374.813965 531.665283 M 1.657974 0 32 (ernel to clean) widthshow 72 544.998535 360 9 CR 1 G 72 544.998535 360 9 NF 0 G 3 FF (*/) 90.0 551.825 T 0.6667 G 297.09 549.5 M 297.09 544.25 L 288 549.5 L 297.09 554.75 L F 432 549.5 M 297.09 549.5 L S 0 0 612 792 CR 0 G 3 FF (and \337ush page) 288.0 541.665 T 72 555.998535 360 9 CR 1 G 72 555.998535 360 9 NF 0 G 3 FF (/*) 91.224 562.83 T 0.6667 G 422.91 560.5 M 422.91 565.75 L 432 560.5 L 422.91 555.25 L F 422.91 560.5 M 108 560.5 L S 72 574.998474 360 9 CR 1 G 72 574.998474 360 9 NF 0 G 3 FF (*/) 90.0 581.825 T 0.6667 G 117.09 579.5 M 117.09 574.25 L 108 579.5 L 117.09 584.75 L F 432 579.5 M 117.09 579.5 L S 0 0 612 792 CR 0 G 3 FF (Structure for a pending message operation) 108.0 571.665 T ([8]) 87.34 592.665 T (#de\336ne PENDING_READ) 108.0 592.665 T (1) 288.0 592.665 T ([9]) 87.34 604.665 T (#de\336ne PENDING_WRITE) 108.0 604.665 T (2) 288.0 604.665 T ([10]) 82.34 616.665 T (struct ) 108.0 616.665 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (pending_op) 132.72 616.665 T 3 FF ([11]) 82.34 628.665 T ({) 108.0 628.665 T ([12]) 82.34 640.665 T (struct pending_op) 144.0 640.665 T (*) 288.0 640.665 T 4 FF (ne) 293.0 640.665 T (xt) 302.24 640.665 T 3 FF (;) 309.46 640.665 T ([13]) 82.34 652.665 T (int) 144.0 652.665 T 4 FF (op) 288.0 652.665 T 3 FF (;) 298.0 652.665 T 72 657.998108 360 9 CR 1 G 72 657.998108 360 9 NF 0 G 3 FF (/*) 90.0 664.829 T 0.6667 G 422.91 662.5 M 422.91 667.75 L 432 662.5 L 422.91 657.25 L F 422.91 662.5 M 288 662.5 L S 72 676.998047 360 9 CR 1 G 72 676.998047 360 9 NF 0 G 3 FF (*/) 90.0 683.824 T 0.6667 G 297.09 681.5 M 297.09 676.25 L 288 681.5 L 297.09 686.75 L F 432 681.5 M 297.09 681.5 L S 0 0 612 792 CR 0 G 3 FF (read or write) 288.0 673.665 T ([14]) 82.34 694.665 T (vm_address_t) 144.0 694.665 T 4 FF (of) 288.0 694.665 T (fset) 295.6 694.665 T 3 FF (;) 309.49 694.665 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 108 108 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (104 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([15]) 190.34 112.651 T (int) 252.0 112.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (value) 396.0 112.651 T 3 FF (;) 417.66 112.651 T ([16]) 190.34 124.651 T (mach_port_t) 252.0 124.651 T 4 FF (r) 396.0 124.651 T (eply_port) 399.52 124.651 T 3 FF (;) 437.85 124.651 T ([17]) 190.34 136.651 T (};) 216.0 136.651 T ([18]) 190.34 148.65 T (typedef struct ) 216.0 148.65 T 4 FF (pending_op) 273.21 148.65 T 3 FF (*) 396.0 148.65 T 4 FF (pending_op_t) 401.0 148.65 T 3 FF (;) 456.0 148.65 T ([19]) 190.34 160.65 T (typedef struct ) 216.0 160.65 T 4 FF (pending_op) 273.21 160.65 T (pending_op_data_t) 396.0 160.65 T 3 FF (;) 473.78 160.65 T ([20]) 190.34 172.65 T (#de\336ne PENDING_OP_NULL) 216.0 172.65 T (\(\() 396.0 172.65 T 4 FF (pending_op_t) 402.66 172.65 T 3 FF (\) 0\)) 457.66 172.65 T 180 177.983643 360 9 CR 1 G 180 177.983643 360 9 NF 0 G 3 FF (/*) 199.224 184.815 T 3 SL 0.6667 G 530.91 182.48 M 530.91 187.73 L 540 182.48 L 530.91 177.23 L F 530.91 182.48 M 216 182.48 L S 180 196.983582 360 9 CR 1 G 180 196.983582 360 9 NF 0 G 3 FF (*/) 198.0 203.81 T 0.6667 G 225.09 201.48 M 225.09 196.23 L 216 201.48 L 225.09 206.73 L F 540 201.48 M 225.09 201.48 L S 0 0 612 792 CR 0 G 3 FF (Object data structure) 216.0 193.65 T ([21]) 190.34 214.65 T (struct ) 216.0 214.65 T 4 FF (netmem_obj) 240.72 214.65 T 3 FF ([22]) 190.34 226.65 T ({) 216.0 226.65 T ([23]) 190.34 238.65 T (mach_port_t) 252.0 238.65 T 4 FF (object_port) 396.0 238.65 T 3 FF (;) 442.11 238.65 T 180 243.983398 360 9 CR 1 G 180 243.983398 360 9 NF 0 G 3 FF (/*) 198.0 250.815 T 0.6667 G 530.91 248.48 M 530.91 253.73 L 540 248.48 L 530.91 243.23 L F 530.91 248.48 M 396 248.48 L S 180 262.983337 360 9 CR 1 G 180 262.983337 360 9 NF 0 G 3 FF (*/) 198.0 269.81 T 0.6667 G 405.09 267.48 M 405.09 262.23 L 396 267.48 L 405.09 272.73 L F 540 267.48 M 405.09 267.48 L S 0 0 612 792 CR 0 G 3 FF (represents object) 396.0 259.65 T ([24]) 190.34 280.65 T (mach_port_t) 252.0 280.65 T 4 FF (contr) 396.0 280.65 T (ol_port) 416.66 280.65 T 3 FF (;) 446.11 280.65 T 180 285.983276 360 9 CR 1 G 180 285.983276 360 9 NF 0 G 3 FF (/*) 198.0 292.814 T 0.6667 G 530.91 290.48 M 530.91 295.73 L 540 290.48 L 530.91 285.23 L F 530.91 290.48 M 396 290.48 L S 180 304.983215 360 9 CR 1 G 180 304.983215 360 9 NF 0 G 3 FF (*/) 198.0 311.809 T 0.6667 G 405.09 309.48 M 405.09 304.23 L 396 309.48 L 405.09 314.73 L F 540 309.48 M 405.09 309.48 L S 0 0 612 792 CR 0 G 3 FF (k) 396.0 301.65 T (ernel control port) 400.9 301.65 T ([25]) 190.34 322.65 T (int) 252.0 322.65 T 4 FF (send_rights) 396.0 322.65 T 3 FF (;) 442.67 322.65 T 180 327.983154 360 9 CR 1 G 180 327.983154 360 9 NF 0 G 3 FF (/*) 198.0 334.814 T 0.6667 G 530.91 332.48 M 530.91 337.73 L 540 332.48 L 530.91 327.23 L F 530.91 332.48 M 396 332.48 L S 180 346.983093 360 9 CR 1 G 180 346.983093 360 9 NF 0 G 3 FF (*/) 198.0 353.809 T 0.6667 G 405.09 351.48 M 405.09 346.23 L 396 351.48 L 405.09 356.73 L F 540 351.48 M 405.09 351.48 L S 0 0 612 792 CR 0 G 3 FF (control send right count) 396.0 343.65 T ([26]) 190.34 364.65 T (int) 252.0 364.65 T 4 FF (state) 396.0 364.65 T 3 FF (;) 414.89 364.65 T 180 369.983032 360 9 CR 1 G 180 369.983032 360 9 NF 0 G 3 FF (/*) 198.0 376.814 T 0.6667 G 530.91 374.48 M 530.91 379.73 L 540 374.48 L 530.91 369.23 L F 530.91 374.48 M 396 374.48 L S 180 388.982971 360 9 CR 1 G 180 388.982971 360 9 NF 0 G 3 FF (*/) 198.0 395.809 T 0.6667 G 405.09 393.48 M 405.09 388.23 L 396 393.48 L 405.09 398.73 L F 540 393.48 M 405.09 393.48 L S 0 0 612 792 CR 0 G 3 FF (who can access ho) 396.0 385.65 T (w) 469.89 385.65 T ([27]) 190.34 406.65 T (vm_address_t) 252.0 406.65 T 4 FF (data) 396.0 406.65 T 3 FF (;) 413.78 406.65 T 180 411.98291 360 9 CR 1 G 180 411.98291 360 9 NF 0 G 3 FF (/*) 198.0 418.814 T 0.6667 G 530.91 416.48 M 530.91 421.73 L 540 416.48 L 530.91 411.23 L F 530.91 416.48 M 396 416.48 L S 180 430.982849 360 9 CR 1 G 180 430.982849 360 9 NF 0 G 3 FF (*/) 198.0 437.809 T 0.6667 G 405.09 435.48 M 405.09 430.23 L 396 435.48 L 405.09 440.73 L F 540 435.48 M 405.09 435.48 L S 0 0 612 792 CR 0 G 3 FF (pointer to contents) 396.0 427.65 T 180 441.982849 360 9 CR 1 G 180 441.982849 360 9 NF 0 G 3 FF (/*) 199.224 448.814 T 0.6667 G 530.91 446.48 M 530.91 451.73 L 540 446.48 L 530.91 441.23 L F 530.91 446.48 M 216 446.48 L S 180 460.982788 360 9 CR 1 G 180 460.982788 360 9 NF 0 G 3 FF (*/) 198.0 467.809 T 0.6667 G 225.09 465.48 M 225.09 460.23 L 216 465.48 L 225.09 470.73 L F 540 465.48 M 225.09 465.48 L S 0 0 612 792 CR 0 G 3 FF (Ne) 252.0 457.649 T (xt three \336elds used only in cleaning and \337ushing states.) 263.51 457.649 T ([28]) 190.34 478.649 T (pending_op_t) 252.0 478.649 T 4 FF (pending_op_queue) 396.0 478.649 T 3 FF (;) 472.1 478.649 T 180 483.982727 360 9 CR 1 G 180 483.982727 360 9 NF 0 G 3 FF (/*) 198.0 490.814 T 0.6667 G 530.91 488.48 M 530.91 493.73 L 540 488.48 L 530.91 483.23 L F 530.91 488.48 M 396 488.48 L S 180 502.982666 360 9 CR 1 G 180 502.982666 360 9 NF 0 G 3 FF (*/) 198.0 509.809 T 0.6667 G 405.09 507.48 M 405.09 502.23 L 396 507.48 L 405.09 512.73 L F 540 507.48 M 405.09 507.48 L S 0 0 612 792 CR 0 G 3 FF (pending msg ops) 396.0 499.649 T ([29]) 190.34 520.649 T (vm_prot_t) 252.0 520.649 T 4 FF (pending_k) 396.0 520.649 T (ernel_access) 437.56 520.649 T 3 FF (;) 489.21 520.649 T 180 525.982605 360 9 CR 1 G 180 525.982605 360 9 NF 0 G 3 FF (/*) 198.0 532.814 T 0.6667 G 530.91 530.48 M 530.91 535.73 L 540 530.48 L 530.91 525.23 L F 530.91 530.48 M 396 530.48 L S 180 544.982544 360 9 CR 1 G 180 544.982544 360 9 NF 0 G 3 FF (*/) 198.0 551.809 T 0.6667 G 405.09 549.48 M 405.09 544.23 L 396 549.48 L 405.09 554.73 L F 540 549.48 M 405.09 549.48 L S 0 0 612 792 CR 0 G 3 FF (pending k) 396.0 541.649 T (ernel op) 435.62 541.649 T ([30]) 190.34 562.649 T (int) 252.0 562.649 T 4 FF (pending_k) 396.0 562.649 T (ernel_type) 437.56 562.649 T 3 FF (;) 479.77 562.649 T 180 567.982483 360 9 CR 1 G 180 567.982483 360 9 NF 0 G 3 FF (/*) 198.0 574.814 T 0.6667 G 530.91 572.48 M 530.91 577.73 L 540 572.48 L 530.91 567.23 L F 530.91 572.48 M 396 572.48 L S 180 586.982422 360 9 CR 1 G 180 586.982422 360 9 NF 0 G 3 FF (*/) 198.0 593.809 T 0.6667 G 405.09 591.48 M 405.09 586.23 L 396 591.48 L 405.09 596.73 L F 540 591.48 M 405.09 591.48 L S 0 0 612 792 CR 0 G 3 FF (which k) 396.0 583.649 T (ernel op) 427.84 583.649 T ([31]) 190.34 604.649 T (#de\336ne PENDING_TYPE_LOCK) 216.0 604.649 T (1) 396.0 604.649 T ([32]) 190.34 616.649 T (#de\336ne PENDING_TYPE_D) 216.0 616.649 T (A) 333.64 616.649 T (T) 339.751 616.649 T (A) 344.931 616.649 T (2) 396.0 616.649 T ([33]) 190.34 628.649 T (};) 216.0 628.649 T ([34]) 190.34 640.649 T (typedef struct ) 216.0 640.649 T 4 FF (netmem_obj) 273.21 640.649 T 3 FF (*) 396.0 640.649 T 4 FF (netmem_obj_t) 401.0 640.649 T 3 FF (;) 457.66 640.649 T ([35]) 190.34 652.649 T (typedef struct ) 216.0 652.649 T 4 FF (netmem_obj) 273.21 652.649 T (netmem_obj_data_t) 396.0 652.649 T 3 FF (;) 475.44 652.649 T ([36]) 190.34 664.649 T (#de\336ne NETMEM_OBJ_NULL) 216.0 664.649 T (\(\() 396.0 664.649 T 4 FF (netmem_obj_t) 402.66 664.649 T 3 FF (\) 0\)) 459.32 664.649 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 109 109 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (105 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Simple Memory Manager Example) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Bold) 12 1 mymakefontmetric 3 FF (Exter) 72.0 116.0 T (nal Memory Manager) 100.476 116.0 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF (The source for the manager itself follo) 72.0 132.667 T (ws.) 225.6 132.667 T (The one and only memory object is declared in line [11]. ) 72.0 156.667 T 72 167.999924 360 9 CR 1 G 72 167.999924 360 9 NF 0 G 4 FF (/*) 91.224 174.831 T 3 SL 0 SC 0.6667 G 422.91 172.5 M 422.91 177.75 L 432 172.5 L 422.91 167.25 L F 422.91 172.5 M 108 172.5 L S 0 0 612 792 CR 0 G 4 FF (File: ) 108.0 183.667 T 1 FF (netmem_pager) 128.84 183.667 T 4 FF (.c) 192.16 183.667 T (Author: Da) 108.0 193.666 T (vid L. Black) 153.07 193.666 T 108 203.666428 M 0.196106 0 32 (The actual ) widthshow 1 FF 152.82222 203.666428 M 0.196106 0 32 (netmem_msg) widthshow 4 FF 209.472229 203.666428 M 0.196106 0 32 ( pager) widthshow 233.828644 203.666428 M 0.196106 0 32 (. This is a simple pager that pro) widthshow 361.151489 203.666428 M 0.196106 0 32 (vides one page of) widthshow 108 213.666367 M 1.827194 0 32 (memory) widthshow 140.680359 213.666367 M 1.827194 0 32 (, accessible either via mapping or a message based interf) widthshow 383.635193 213.666367 M 1.827194 0 32 (ace. It only) widthshow 72 226.999619 360 9 CR 1 G 72 226.999619 360 9 NF 0 G 4 FF (*/) 90.0 233.826 T 0.6667 G 117.09 231.5 M 117.09 226.25 L 108 231.5 L 117.09 236.75 L F 432 231.5 M 117.09 231.5 L S 0 0 612 792 CR 0 G 4 FF (w) 108.0 223.666 T (orks with one k) 115.12 223.666 T (ernel.) 176.96 223.666 T ([1]) 87.34 244.666 T (#include ) 108.0 244.666 T ([2]) 87.34 256.666 T (#include ) 108.0 256.666 T ([3]) 87.34 268.666 T (#include ) 108.0 268.666 T ([4]) 87.34 280.666 T (#include ) 167.09 280.666 T ([5]) 87.34 292.666 T (#include ) 108.0 292.666 T ([6]) 87.34 304.666 T (#include ) 108.0 304.666 T ([7]) 87.34 316.666 T (#include \322) 108.0 316.666 T 1 FF (netmem_defs) 149.38 316.666 T 4 FF (.h\323) 206.03 316.666 T ([8]) 87.34 328.666 T (#include \322) 108.0 328.666 T 1 FF (netmem_obj) 149.38 328.666 T 4 FF (.h\323) 202.7 328.666 T ([9]) 87.34 340.666 T (#include \322) 108.0 340.666 T 1 FF (netmem_msg) 149.38 340.666 T 4 FF (.h\323) 206.03 340.666 T ([10]) 82.34 352.666 T (#include \322) 108.0 352.666 T 1 FF (netmem_msg_r) 149.38 352.666 T (eply) 215.29 352.666 T 4 FF (.h\323) 232.42 352.666 T ([11]) 82.34 364.666 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF (netmem_obj_data_t) 108.0 364.666 T (master_obj) 288.0 364.666 T 4 FF (;) 333.0 364.666 T 3 FF (Initialization) 72.0 393.999 T 4 FF 72 410.665527 M 0.842285 0 32 (The immediately follo) widthshow 162.87471 410.665527 M 0.842285 0 32 (wing ) widthshow 1 FF 186.216995 410.665527 M 0.842285 0 32 (init) widthshow 4 FF 200.666992 410.665527 M 0.842285 0 32 ( routine puts the object in the ob) widthshow 335.573059 410.665527 M 0.842285 0 32 (vious initial state. Most) widthshow 72 422.665466 M 1.691513 0 32 (of the routine is concerned with logically creating the memory object and making its) widthshow 72 434.665436 M 0.307922 0 32 (presence kno) widthshow 124.538071 434.665436 M 0.307922 0 32 (wn to the name serv) widthshow 206.159851 434.665436 M 0.307922 0 32 (er) widthshow 213.380157 434.665436 M 0.307922 0 32 (. Of course, the object isn\325) widthshow 320.549866 434.665436 M 0.307922 0 32 (t really kno) widthshow 366.465881 434.665436 M 0.307922 0 32 (wn to the k) widthshow 412.009705 434.665436 M 0.307922 0 32 (ernel) widthshow 72 446.665405 M 1.509964 0 32 (until the ) widthshow 1 FF 110.579926 446.665405 M 1.509964 0 32 (memory_object_init) widthshow 4 FF 196.669937 446.665405 M 1.509964 0 32 ( sequence. Note in the ) widthshow 1 FF 295.309753 446.665405 M 1.509964 0 32 (memory_object_r) widthshow 371.2099 446.665405 M 1.509964 0 32 (eady ) widthshow 4 FF 395.219849 446.665405 M 1.509964 0 32 (call \(line) widthshow 72 458.665405 M 1.235504 0 32 ([175]\) that the MEMOR) widthshow 172.546875 458.665405 M 1.235504 0 32 (Y_OBJECT_COPY_NONE strate) widthshow 311.122467 458.665405 M 1.235504 0 32 (gy is used since the manager) widthshow 72 470.665344 M 0.681381 0 32 (does, at times, modify the object itself. \(Refer to the discussion in the ) widthshow 5 FF 360.837952 470.665344 M 0.681381 0 32 (K) widthshow 367.158142 470.665344 M 0.681381 0 32 (ernel Principles) widthshow 4 FF (document.\)) 72.0 482.665 T 72 493.998596 360 9 CR 1 G 72 493.998596 360 9 NF 0 G 4 FF (/*) 91.224 500.83 T 0.6667 G 422.91 498.5 M 422.91 503.75 L 432 498.5 L 422.91 493.25 L F 422.91 498.5 M 108 498.5 L S 72 512.998535 360 9 CR 1 G 72 512.998535 360 9 NF 0 G 4 FF (*/) 90.0 519.825 T 0.6667 G 117.09 517.5 M 117.09 512.25 L 108 517.5 L 117.09 522.75 L F 432 517.5 M 117.09 517.5 L S 0 0 612 792 CR 0 G 4 FF (Initialization routine for the serv) 108.0 509.665 T (er) 237.83 509.665 T (.) 245.05 509.665 T ([12]) 82.34 530.665 T (v) 108.0 530.665 T (oid ) 112.8 530.665 T 1 FF (init \() 128.08 530.665 T 4 FF (\)) 148.36 530.665 T ([13]) 82.34 542.665 T ({) 108.0 542.665 T ([14]) 82.34 554.665 T (k) 144.0 554.665 T (ern_return_t) 148.9 554.665 T 5 FF (r) 288.0 554.665 T 4 FF (;) 291.89 554.665 T 72 559.998352 360 9 CR 1 G 72 559.998352 360 9 NF 0 G 4 FF (/*) 91.224 566.83 T 0.6667 G 422.91 564.5 M 422.91 569.75 L 432 564.5 L 422.91 559.25 L F 422.91 564.5 M 108 564.5 L S 72 578.998291 360 9 CR 1 G 72 578.998291 360 9 NF 0 G 4 FF (*/) 90.0 585.825 T 0.6667 G 117.09 583.5 M 117.09 578.25 L 108 583.5 L 117.09 588.75 L F 432 583.5 M 117.09 583.5 L S 0 0 612 792 CR 0 G 4 FF (Initialize the object. This had better w) 144.0 575.665 T (ork.) 295.82 575.665 T ([15]) 82.34 596.665 T 5 FF (r) 144.0 596.665 T 4 FF ( = ) 147.89 596.665 T 1 FF (mach_port_allocate) 158.53 596.665 T 4 FF ( \() 242.96 596.665 T 1 FF (mach_task_self) 248.79 596.665 T 4 FF ( \(\), ) 314.34 596.665 T (MA) 198.0 606.665 T (CH_POR) 213.71 606.665 T (T_RIGHT_RECEIVE, ) 251.451 606.665 T (&) 198.0 616.665 T 5 FF (master_obj) 205.78 616.665 T 4 FF (.) 250.78 616.665 T 5 FF (object_port) 253.28 616.665 T 4 FF (\);) 299.39 616.665 T ([16]) 82.34 628.665 T (if \() 144.0 628.665 T 5 FF (r) 155.94 628.665 T 4 FF ( != KERN_SUCCESS\)) 159.83 628.665 T ([17]) 82.34 640.665 T ({) 144.0 640.665 T ([18]) 82.34 652.665 T (printf \(\322Can\325) 180.0 652.665 T (t allocate object/service port\\n\323\);) 231.75 652.665 T ([19]) 82.34 664.665 T (e) 180.0 664.665 T (xit \(\3201\);) 184.29 664.665 T ([20]) 82.34 676.665 T (}) 144.0 676.665 T ([21]) 82.34 688.664 T 5 FF (master_obj) 144.0 688.664 T 4 FF (.) 189.0 688.664 T 5 FF (contr) 191.5 688.664 T (ol_port) 212.16 688.664 T 4 FF ( = MA) 241.61 688.664 T (CH_POR) 267.96 688.664 T (T_NULL;) 305.701 688.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 110 110 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (106 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([22]) 190.34 112.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (master_obj) 252.0 112.651 T 3 FF (.) 297.0 112.651 T 4 FF (state) 299.5 112.651 T 3 FF ( = NETMEM_OBJ_NONE;) 318.39 112.651 T ([23]) 190.34 124.651 T 4 FF (master_obj) 252.0 124.651 T 3 FF (.) 297.0 124.651 T 4 FF (data) 299.5 124.651 T 3 FF ( = \(vm_address_t\) 0;) 317.28 124.651 T ([24]) 190.34 136.651 T 4 FF (master_obj) 252.0 136.651 T 3 FF (.) 297.0 136.651 T 4 FF (pending_op_queue) 299.5 136.651 T 3 FF ( = PENDING_OP_NULL;) 375.6 136.651 T ([25]) 190.34 148.65 T 4 FF (master_obj) 252.0 148.65 T 3 FF (.) 297.0 148.65 T 4 FF (pending_k) 299.5 148.65 T (ernel_access) 341.06 148.65 T 3 FF ( = VM_PR) 392.71 148.65 T (O) 436.29 148.65 T (T_NONE;) 443.111 148.65 T 180 153.983765 360 9 CR 1 G 180 153.983765 360 9 NF 0 G 3 FF (/*) 199.224 160.815 T 3 SL 0.6667 G 530.91 158.48 M 530.91 163.73 L 540 158.48 L 530.91 153.23 L F 530.91 158.48 M 216 158.48 L S 0 0 612 792 CR 0 G 3 FF 252 169.650391 M 1.500809 0 32 (No) widthshow 263.970154 169.650391 M 1.500809 0 32 (w check it into the name service. No signature port means this is) widthshow 180 182.983643 360 9 CR 1 G 180 182.983643 360 9 NF 0 G 3 FF (*/) 198.0 189.81 T 0.6667 G 225.09 187.48 M 225.09 182.23 L 216 187.48 L 225.09 192.73 L F 540 187.48 M 225.09 187.48 L S 0 0 612 792 CR 0 G 3 FF (unprotected.) 252.0 179.65 T ([26]) 190.34 200.65 T (if \() 252.0 200.65 T 4 FF (r) 263.94 200.65 T 3 FF ( != NETN) 267.83 200.65 T (AME_SUCCESS\)) 308.11 200.65 T ([27]) 190.34 212.65 T ({) 252.0 212.65 T ([28]) 190.34 224.65 T (mach_error \(\322Check In:\323, ) 288.0 224.65 T 4 FF (r) 392.96 224.65 T 3 FF (\);) 396.85 224.65 T ([29]) 190.34 236.65 T (e) 288.0 236.65 T (xit \(\3201\);) 292.29 236.65 T ([30]) 190.34 248.65 T (}) 252.0 248.65 T ([31]) 190.34 260.65 T (}) 216.0 260.65 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (P) 180.0 289.983 T (ort Manipulation) 187.092 289.983 T 0 FF 180 306.649841 M 0.097458 0 32 (netmem_lookup) widthshow 3 FF 248.889999 306.649841 M 0.097458 0 32 ( is a typical routine needed to translate between the abstract memory ob-) widthshow 180 318.64978 M 1.459198 0 32 (ject port o) widthshow 223.318481 318.64978 M 1.459198 0 32 (v) widthshow 228.168564 318.64978 M 1.459198 0 32 (er which messages come into the memory object control structure that de-) widthshow (scribes that object. W) 180.0 330.65 T (ith only one object, this con) 266.25 330.65 T (v) 376.96 330.65 T (ersion is tri) 381.811 330.65 T (vial here.) 426.561 330.65 T 180 354.649658 M 1.605911 0 32 (The routine ) widthshow 0 FF 232.091827 354.649658 M 1.605911 0 32 (netmem_contr) widthshow 294.111938 354.649658 M 1.605911 0 32 (ol_cleanup) widthshow 3 FF 340.231934 354.649658 M 1.605911 0 32 ( is called whene) widthshow 408.949829 354.649658 M 1.605911 0 32 (v) widthshow 413.799896 354.649658 M 1.605911 0 32 (er a message is recei) widthshow 502.163696 354.649658 M 1.605911 0 32 (v) widthshow 507.013794 354.649658 M 1.605911 0 32 (ed from) widthshow 180 366.649597 M 0.622635 0 32 (the k) widthshow 200.242691 366.649597 M 0.622635 0 32 (ernel. Since all such messages carry a send right to the memory cache control port,) widthshow 180 378.649536 M 0.932617 0 32 (these accumulate. Instead of de-allocating them one at a time as the) widthshow 460.048889 378.649536 M 0.932617 0 32 (y come in, the) widthshow 519.356812 378.649536 M 0.932617 0 32 (y are) widthshow (left to add up, and \(almost all\) deleted periodically) 180.0 390.649 T (.) 381.82 390.649 T 180 401.982788 360 9 CR 1 G 180 401.982788 360 9 NF 0 G 3 FF (/*) 199.224 408.814 T 0.6667 G 530.91 406.48 M 530.91 411.73 L 540 406.48 L 530.91 401.23 L F 530.91 406.48 M 216 406.48 L S 0 0 612 792 CR 0 G 3 FF 216 417.649414 M 1.478043 0 32 (Con) widthshow 232.270218 417.649414 M 1.478043 0 32 (v) widthshow 237.1203 417.649414 M 1.478043 0 32 (ersion routine from port to object. V) widthshow 390.13916 417.649414 M 1.478043 0 32 (ery simple because there\325) widthshow 495.933624 417.649414 M 1.478043 0 32 (s only one) widthshow 180 430.982666 360 9 CR 1 G 180 430.982666 360 9 NF 0 G 3 FF (*/) 198.0 437.809 T 0.6667 G 225.09 435.48 M 225.09 430.23 L 216 435.48 L 225.09 440.73 L F 540 435.48 M 225.09 435.48 L S 0 0 612 792 CR 0 G 3 FF (object.) 216.0 427.649 T ([32]) 190.34 448.649 T 4 FF (netmem_obj_t ) 216.0 448.649 T 0 FF (netmem_lookup) 275.16 448.649 T 3 FF ( \(memory_object_t ) 344.05 448.649 T 4 FF (port) 422.93 448.649 T 3 FF (\)) 439.6 448.649 T ([33]) 190.34 460.649 T ({) 216.0 460.649 T ([34]) 190.34 472.649 T (if \() 252.0 472.649 T 4 FF (port) 263.94 472.649 T 3 FF ( != ) 280.61 472.649 T 4 FF (master_obj) 294.58 472.649 T 3 FF (.) 339.58 472.649 T 4 FF (object_port) 342.08 472.649 T 3 FF (\)) 388.19 472.649 T ([35]) 190.34 484.649 T ({) 252.0 484.649 T ([36]) 190.34 496.649 T (printf \(\322object mismatch\\n\323\);) 288.0 496.649 T ([37]) 190.34 508.649 T (return \(NETMEM_OBJ_NULL\); ) 288.0 508.649 T 180 513.9823 360 9 CR 1 G 180 513.9823 360 9 NF 0 G 3 FF (/*) 198.0 520.814 T 0.6667 G 530.91 518.48 M 530.91 523.73 L 540 518.48 L 530.91 513.23 L F 530.91 518.48 M 396 518.48 L S 180 532.982239 360 9 CR 1 G 180 532.982239 360 9 NF 0 G 3 FF (*/) 198.0 539.809 T 0.6667 G 405.09 537.48 M 405.09 532.23 L 396 537.48 L 405.09 542.73 L F 540 537.48 M 405.09 537.48 L S 0 0 612 792 CR 0 G 3 FF (Can\325) 396.0 529.649 T (t happen) 415.26 529.649 T ([38]) 190.34 550.649 T (}) 252.0 550.649 T ([39]) 190.34 562.649 T (return \(&) 252.0 562.649 T 4 FF (master_obj) 289.49 562.649 T 3 FF (\);) 334.49 562.649 T ([40]) 190.34 574.649 T (}) 216.0 574.649 T 180 579.982056 360 9 CR 1 G 180 579.982056 360 9 NF 0 G 3 FF (/*) 199.224 586.813 T 0.6667 G 530.91 584.48 M 530.91 589.73 L 540 584.48 L 530.91 579.23 L F 530.91 584.48 M 216 584.48 L S 0 0 612 792 CR 0 G 3 FF 216 595.648682 M 0.307846 0 32 (Routine for lazy discarding of send rights to control port. Add one more right to) widthshow 216 605.648621 M 0.72757 0 32 (the number we ha) widthshow 289.352844 605.648621 M 0.72757 0 32 (v) widthshow 294.202911 605.648621 M 0.72757 0 32 (e. If o) widthshow 319.108154 605.648621 M 0.72757 0 32 (v) widthshow 323.958221 605.648621 M 0.72757 0 32 (er limit, get rid of all b) widthshow 418.953735 605.648621 M 0.72757 0 32 (ut one. W) widthshow 458.769348 605.648621 M 0.72757 0 32 (e retain one right to) widthshow 180 618.981873 360 9 CR 1 G 180 618.981873 360 9 NF 0 G 3 FF (*/) 198.0 625.808 T 0.6667 G 225.09 623.48 M 225.09 618.23 L 216 623.48 L 225.09 628.73 L F 540 623.48 M 225.09 623.48 L S 0 0 612 792 CR 0 G 3 FF (ensure that the port\325) 216.0 615.649 T (s name doesn\325) 295.71 615.649 T (t change.) 352.74 615.649 T ([41]) 190.34 636.649 T (#de\336ne SEND_RIGHT_MAX) 216.0 636.649 T (10000) 396.0 636.649 T ([42]) 190.34 648.648 T (v) 216.0 648.648 T (oid ) 220.8 648.648 T 0 FF (netmem_contr) 236.08 648.648 T (ol_cleanup) 298.1 648.648 T 3 FF ( \() 344.22 648.648 T 4 FF (netmem_obj_t) 350.05 648.648 T 3 FF ( ) 406.71 648.648 T 4 FF (obj) 409.21 648.648 T 3 FF (\)) 421.99 648.648 T ([43]) 190.34 660.648 T ({) 216.0 660.648 T ([44]) 190.34 672.648 T 4 FF (obj) 252.0 672.648 T 6 (Symbol) 10 1 mymakefontmetric 6 FF 264.78 672.648 T 4 FF (send_rights) 274.65 672.648 T 3 FF (++;) 321.32 672.648 T ([45]) 190.34 684.648 T (if \() 252.0 684.648 T 4 FF (obj) 263.94 684.648 T 6 FF 276.72 684.648 T 4 FF (send_rights) 286.59 684.648 T 3 FF ( > SEND_RIGHT_MAX\)) 333.26 684.648 T ([46]) 190.34 696.648 T ({) 252.0 696.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 111 111 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (107 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Simple Memory Manager Example) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([47]) 82.34 114.667 T (\(v) 180.0 114.667 T (oid\) ) 188.13 114.667 T 1 FF (mach_port_mod_r) 206.74 114.667 T (efs) 286.55 114.667 T 3 FF ( \() 298.21 114.667 T 1 FF (mach_task_self) 304.04 114.667 T 3 FF ( \(\),) 369.59 114.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF ( ) 381.25 114.667 T (obj) 234.0 124.667 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 246.78 124.667 T 4 FF (contr) 256.65 124.667 T (ol_port) 277.31 124.667 T 3 FF (, ) 306.76 124.667 T (MA) 234.0 134.667 T (CH_POR) 249.71 134.667 T (T_RIGHT_SEND, \320) 287.451 134.667 T (\(SEND_RIGHT_MAX\)\);) 234.0 144.666 T ([48]) 82.34 156.666 T 4 FF (obj) 180.0 156.666 T 5 FF 192.78 156.666 T 4 FF (send_rights) 202.65 156.666 T 3 FF ( \320= SEND_RIGHT_MAX;) 249.32 156.666 T ([49]) 82.34 168.666 T (}) 144.0 168.666 T ([50]) 82.34 180.666 T (}) 108.0 180.666 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Deferr) 72.0 210.0 T (ed Operation Pr) 105.756 210.0 T (ocessing) 188.868 210.0 T 72 219.999527 360 9 CR 1 G 72 219.999527 360 9 NF 0 G 3 FF (/*) 91.224 226.831 T 3 SL 0 SC 0.6667 G 422.91 224.5 M 422.91 229.75 L 432 224.5 L 422.91 219.25 L F 422.91 224.5 M 108 224.5 L S 72 238.999466 360 9 CR 1 G 72 238.999466 360 9 NF 0 G 3 FF (*/) 90.0 245.826 T 0.6667 G 117.09 243.5 M 117.09 238.25 L 108 243.5 L 117.09 248.75 L F 432 243.5 M 117.09 243.5 L S 0 0 612 792 CR 0 G 3 FF (Routines for handling pending operations.) 108.0 235.666 T ([51]) 82.34 256.666 T (v) 108.0 256.666 T (oid ) 112.8 256.666 T 1 FF (pending_op_queue) 128.08 256.666 T 3 FF ( \() 208.66 256.666 T 4 FF (netmem_obj_t) 214.49 256.666 T 3 FF ( ) 271.15 256.666 T 4 FF (obj) 273.65 256.666 T 3 FF (, int ) 286.43 256.666 T 4 FF (op) 304.49 256.666 T 3 FF (, vm_address_t ) 314.49 256.666 T 4 FF (of) 377.54 256.666 T (fset) 385.14 256.666 T 3 FF (, int ) 399.03 256.666 T 4 FF (value) 162.0 266.666 T 3 FF (, mach_port_t ) 183.66 266.666 T 4 FF (r) 241.71 266.666 T (eply_to) 245.23 266.666 T 3 FF (\)) 274.67 266.666 T ([52]) 82.34 278.666 T ({) 108.0 278.666 T ([53]) 82.34 290.666 T 4 FF (pending_op_t) 144.0 290.666 T (pend) 288.0 290.666 T 3 FF (, *) 307.44 290.666 T 4 FF (pend_ptr) 317.44 290.666 T 3 FF (;) 353.55 290.666 T 72 295.999207 360 9 CR 1 G 72 295.999207 360 9 NF 0 G 3 FF (/*) 91.224 302.83 T 0.6667 G 422.91 300.5 M 422.91 305.75 L 432 300.5 L 422.91 295.25 L F 422.91 300.5 M 108 300.5 L S 72 314.999146 360 9 CR 1 G 72 314.999146 360 9 NF 0 G 3 FF (*/) 90.0 321.825 T 0.6667 G 117.09 319.5 M 117.09 314.25 L 108 319.5 L 117.09 324.75 L F 432 319.5 M 117.09 319.5 L S 0 0 612 792 CR 0 G 3 FF (Using malloc \(\) here is not particularly ef) 144.0 311.666 T 309.55 311.666 T ([54]) 82.34 332.666 T 4 FF (pend) 144.0 332.666 T 3 FF ( = \() 163.44 332.666 T 4 FF (pending_op_t) 177.41 332.666 T 3 FF (\) malloc \(sizeof \() 232.41 332.666 T 4 FF (pending_op_data_t) 301.0 332.666 T 3 FF (\)\);) 378.78 332.666 T 72 337.999084 360 9 CR 1 G 72 337.999084 360 9 NF 0 G 3 FF (/*) 91.224 344.83 T 0.6667 G 422.91 342.5 M 422.91 347.75 L 432 342.5 L 422.91 337.25 L F 422.91 342.5 M 108 342.5 L S 0 0 612 792 CR 0 G 3 FF 144 353.66571 M 1.234512 0 32 (Initialize pending op and add to queue. This results in LIFO pending) widthshow 72 366.998962 360 9 CR 1 G 72 366.998962 360 9 NF 0 G 3 FF (*/) 90.0 373.825 T 0.6667 G 117.09 371.5 M 117.09 366.25 L 108 371.5 L 117.09 376.75 L F 432 371.5 M 117.09 371.5 L S 0 0 612 792 CR 0 G 3 FF (operation order) 144.0 363.666 T (.) 204.82 363.666 T ([55]) 82.34 384.666 T 4 FF (pend) 144.0 384.666 T 5 FF 163.44 384.666 T 4 FF (op) 173.31 384.666 T 3 FF ( = ) 183.31 384.666 T 4 FF (op) 193.95 384.666 T 3 FF (;) 203.95 384.666 T ([56]) 82.34 396.666 T 4 FF (pend) 144.0 396.666 T 5 FF 163.44 396.666 T 4 FF (of) 173.31 396.666 T (fset) 180.91 396.666 T 3 FF ( = ) 194.8 396.666 T 4 FF (of) 205.44 396.666 T (fset) 213.04 396.666 T 3 FF (;) 226.93 396.666 T ([57]) 82.34 408.665 T 4 FF (pend) 144.0 408.665 T 5 FF 163.44 408.665 T 4 FF (value) 173.31 408.665 T 3 FF ( = ) 194.97 408.665 T 4 FF (value) 205.61 408.665 T 3 FF (;) 227.27 408.665 T ([58]) 82.34 420.665 T 4 FF (pend) 144.0 420.665 T 5 FF 163.44 420.665 T 4 FF (r) 173.31 420.665 T (eply_port) 176.83 420.665 T 3 FF ( = ) 215.16 420.665 T 4 FF (r) 225.8 420.665 T (eply_to) 229.32 420.665 T 3 FF (;) 258.76 420.665 T ([59]) 82.34 432.665 T 4 FF (pend) 144.0 432.665 T 5 FF 163.44 432.665 T 4 FF (ne) 173.31 432.665 T (xt) 182.55 432.665 T 3 FF ( = ) 189.77 432.665 T 4 FF (obj) 200.41 432.665 T 5 FF 213.19 432.665 T 4 FF (pending_op_queue) 223.06 432.665 T 3 FF (;) 299.16 432.665 T ([60]) 82.34 444.665 T 4 FF (obj) 144.0 444.665 T 5 FF 156.78 444.665 T 4 FF (pending_op_queue) 166.65 444.665 T 3 FF ( = ) 242.75 444.665 T 4 FF (pend) 253.39 444.665 T 3 FF (;) 272.83 444.665 T ([61]) 82.34 456.665 T (}) 108.0 456.665 T 72 478.665161 M 2.087479 0 32 (The routine ) widthshow 1 FF 125.054962 478.665161 M 2.087479 0 32 (pending_op_execute) widthshow 3 FF 211.72496 478.665161 M 2.087479 0 32 ( performs the processing deferred by ) widthshow 1 FF 373.649841 478.665161 M 2.087479 0 32 (pending_op_-) widthshow 72 490.6651 M 1.407959 0 32 (queue) widthshow 3 FF 97.559998 490.6651 M 1.407959 0 32 (. It is called only when a ) widthshow 1 FF 207.955719 490.6651 M 1.407959 0 32 (memory_object_lock_completed) widthshow 3 FF 346.255737 490.6651 M 1.407959 0 32 ( message is recei) widthshow 417.709778 490.6651 M 1.407959 0 32 (v) widthshow 422.559845 490.6651 M 1.407959 0 32 (ed) widthshow 72 502.665039 M 2.041504 0 32 (from the k) widthshow 117.643066 502.665039 M 2.041504 0 32 (ernel. As such, the page is either in the NETMEM_OBJ_READ or NET-) widthshow 72 514.664978 M 1.331863 0 32 (MEM_OBJ_SER) widthshow 141.210434 514.664978 M 1.331863 0 32 (VER_WRITE states, namely) widthshow 259.044525 514.664978 M 1.331863 0 32 (, the manager has a v) widthshow 349.873993 514.664978 M 1.331863 0 32 (alid cop) widthshow 383.045898 514.664978 M 1.331863 0 32 (y) widthshow 387.396271 514.664978 M 1.331863 0 32 (. This rou-) widthshow 72 526.664917 M 1.774933 0 32 (tine can then e) widthshow 135.21489 526.664917 M 1.774933 0 32 (x) widthshow 140.064972 526.664917 M 1.774933 0 32 (ecute all pending read requests. It can also e) widthshow 330.454529 526.664917 M 1.774933 0 32 (x) widthshow 335.304626 526.664917 M 1.774933 0 32 (ecute all pending write) widthshow 72 538.664856 M 0.02243 0 32 (requests if in the NETMEM_OBJ_SER) widthshow 229.620163 538.664856 M 0.02243 0 32 (VER_WRITE state. If not in this state, the manag-) widthshow 72 550.664795 M 1.252472 0 32 (er must start a ne) widthshow 145.080032 550.664795 M 1.252472 0 32 (w lock request sequence to enter this state, so the writes \(and subse-) widthshow (quent reads\) must continue to be deferred.) 72.0 562.665 T 72 573.998047 360 9 CR 1 G 72 573.998047 360 9 NF 0 G 3 FF (/*) 91.224 580.829 T 0.6667 G 422.91 578.5 M 422.91 583.75 L 432 578.5 L 422.91 573.25 L F 422.91 578.5 M 108 578.5 L S 0 0 612 792 CR 0 G 3 FF 108 589.664673 M 0.584518 0 32 (Ex) widthshow 118.960083 589.664673 M 0.584518 0 32 (ecute operations from pending op queue. This routine checks the object state) widthshow 108 599.664612 M 0.680695 0 32 (to \336nd out what is allo) widthshow 200.883606 599.664612 M 0.680695 0 32 (wed, so an) widthshow 244.585083 599.664612 M 0.680695 0 32 (y state transition must occur BEFORE calling) widthshow 108 609.664551 M 0.862839 0 32 (this routine. Processing stops when the queue is empty or a write is found that) widthshow 108 619.66449 M 3.45813 0 32 (can\325) widthshow 125.030106 619.66449 M 3.45813 0 32 (t be e) widthshow 153.456451 619.66449 M 3.45813 0 32 (x) widthshow 158.306534 619.66449 M 3.45813 0 32 (ecuted because the serv) widthshow 262.661011 619.66449 M 3.45813 0 32 (er only has read permission. Caller is) widthshow 72 632.997742 360 9 CR 1 G 72 632.997742 360 9 NF 0 G 3 FF (*/) 90.0 639.824 T 0.6667 G 117.09 637.5 M 117.09 632.25 L 108 637.5 L 117.09 642.75 L F 432 637.5 M 117.09 637.5 L S 0 0 612 792 CR 0 G 3 FF (responsible for handling pending k) 108.0 629.664 T (ernel access.) 247.33 629.664 T ([62]) 82.34 650.664 T (v) 108.0 650.664 T (oid ) 112.8 650.664 T 1 FF (pending_op_execute) 128.08 650.664 T 3 FF ( \() 214.75 650.664 T 4 FF (netmem_obj_t) 220.58 650.664 T 3 FF ( ) 277.24 650.664 T 4 FF (obj) 279.74 650.664 T 3 FF (\)) 292.52 650.664 T ([63]) 82.34 662.664 T ({) 108.0 662.664 T ([64]) 82.34 674.664 T 4 FF (pending_op_t) 144.0 674.664 T (pend) 288.0 674.664 T 3 FF (, ) 307.44 674.664 T 4 FF (ne) 312.44 674.664 T (w_pend) 321.73 674.664 T 3 FF (;) 352.84 674.664 T ([65]) 82.34 686.664 T (k) 144.0 686.664 T (ern_return_t) 148.9 686.664 T 4 FF (r) 288.0 686.664 T (esult) 291.52 686.664 T 3 FF (;) 310.41 686.664 T ([66]) 82.34 698.664 T 4 FF (pend) 144.0 698.664 T 3 FF ( = ) 163.44 698.664 T 4 FF (obj) 174.08 698.664 T 5 FF 186.86 698.664 T 4 FF (pending_op_queue) 196.73 698.664 T 3 FF (;) 272.83 698.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 112 112 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (108 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([67]) 190.34 112.651 T (while \() 252.0 112.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (pend) 280.05 112.651 T 3 FF ( != PENDING_OP_NULL\)) 299.49 112.651 T ([68]) 190.34 124.651 T ({) 252.0 124.651 T ([69]) 190.34 136.651 T (if \() 288.0 136.651 T 4 FF (pend) 299.94 136.651 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 319.38 136.651 T 4 FF (op) 329.25 136.651 T 3 FF ( == PENDING_READ\)) 339.25 136.651 T ([70]) 190.34 148.65 T ({) 288.0 148.65 T 180 153.983765 360 9 CR 1 G 180 153.983765 360 9 NF 0 G 3 FF (/*) 199.224 160.815 T 3 SL 0.6667 G 530.91 158.48 M 530.91 163.73 L 540 158.48 L 530.91 153.23 L F 530.91 158.48 M 216 158.48 L S 180 172.983704 360 9 CR 1 G 180 172.983704 360 9 NF 0 G 3 FF (*/) 198.0 179.81 T 0.6667 G 225.09 177.48 M 225.09 172.23 L 216 177.48 L 225.09 182.73 L F 540 177.48 M 225.09 177.48 L S 0 0 612 792 CR 0 G 3 FF (Can al) 324.0 169.65 T (w) 349.73 169.65 T (ays do read. Must send reply ourselv) 356.85 169.65 T (es.) 503.62 169.65 T ([71]) 190.34 190.65 T 4 FF (r) 324.0 190.65 T (esult) 327.52 190.65 T 3 FF ( = ) 346.41 190.65 T 0 FF (netmem_r) 357.05 190.65 T (ead) 400.74 190.65 T 3 FF ( \() 415.74 190.65 T 4 FF (obj) 421.57 190.65 T 5 FF 434.35 190.65 T 4 FF (object_port) 444.22 190.65 T 3 FF (, ) 490.33 190.65 T (MA) 378.0 200.65 T (CH_POR) 393.71 200.65 T (T_NULL, ) 431.451 200.65 T 4 FF (pend) 474.221 200.65 T 5 FF 493.661 200.65 T 4 FF (of) 503.531 200.65 T (fset) 511.131 200.65 T 3 FF (, ) 525.021 200.65 T (&) 378.0 210.65 T 4 FF (pend) 385.78 210.65 T 5 FF 405.22 210.65 T 4 FF (value) 415.09 210.65 T 3 FF (\);) 436.75 210.65 T ([72]) 190.34 222.65 T (printf \(\322read_reply\\n\323\);) 324.0 222.65 T ([73]) 190.34 234.65 T 4 FF (r) 324.0 234.65 T (esult) 327.52 234.65 T 3 FF ( = ) 346.41 234.65 T 0 FF (netmem_r) 357.05 234.65 T (ead_r) 400.74 234.65 T (eply) 425.0 234.65 T 3 FF ( \() 442.78 234.65 T 4 FF (pend) 448.61 234.65 T 5 FF 468.05 234.65 T 4 FF (r) 477.92 234.65 T (eply_port) 481.441 234.65 T 3 FF (, ) 519.771 234.65 T 4 FF (r) 378.0 244.65 T (esult) 381.52 244.65 T 3 FF (, ) 400.41 244.65 T 4 FF (pend) 405.41 244.65 T 5 FF 424.85 244.65 T 4 FF (value) 434.72 244.65 T 3 FF (\);) 456.38 244.65 T ([74]) 190.34 256.65 T (}) 288.0 256.65 T ([75]) 190.34 268.65 T (else) 288.0 268.65 T ([76]) 190.34 280.65 T ({) 288.0 280.65 T 180 285.983154 360 9 CR 1 G 180 285.983154 360 9 NF 0 G 3 FF (/*) 199.224 292.814 T 0.6667 G 530.91 290.48 M 530.91 295.73 L 540 290.48 L 530.91 285.23 L F 530.91 290.48 M 216 290.48 L S 180 304.983093 360 9 CR 1 G 180 304.983093 360 9 NF 0 G 3 FF (*/) 198.0 311.809 T 0.6667 G 225.09 309.48 M 225.09 304.23 L 216 309.48 L 225.09 314.73 L F 540 309.48 M 225.09 309.48 L S 0 0 612 792 CR 0 G 3 FF (Write case. Stop if read only) 324.0 301.65 T (.) 437.77 301.65 T ([77]) 190.34 322.65 T (if \() 324.0 322.65 T 4 FF (obj) 335.94 322.65 T 5 FF 348.72 322.65 T 4 FF (state) 358.59 322.65 T 3 FF ( == NETMEM_OBJ_READ\)) 377.48 322.65 T ([78]) 190.34 334.65 T (break;) 360.0 334.65 T ([79]) 190.34 346.65 T 4 FF (r) 324.0 346.65 T (esult) 327.52 346.65 T 3 FF ( = ) 346.41 346.65 T 0 FF (netmem_write) 357.05 346.65 T 3 FF ( \() 418.69 346.65 T 4 FF (obj) 424.52 346.65 T 5 FF 437.3 346.65 T 4 FF (object_port) 447.17 346.65 T 3 FF (, ) 493.28 346.65 T (MA) 378.0 356.65 T (CH_POR) 393.71 356.65 T (T_NULL, ) 431.451 356.65 T 4 FF (pend) 474.221 356.65 T 5 FF 493.661 356.65 T 4 FF (of) 503.531 356.65 T (fset) 511.131 356.65 T 3 FF (,) 525.021 356.65 T 4 FF ( ) 527.521 356.65 T (pend) 378.0 366.649 T 5 FF 397.44 366.649 T 4 FF (value) 407.31 366.649 T 3 FF (\);) 428.97 366.649 T ([80]) 190.34 378.649 T (printf \(\322write_reply\\n\323\);) 324.0 378.649 T ([81]) 190.34 390.649 T 4 FF (r) 324.0 390.649 T (esult) 327.52 390.649 T 3 FF ( = ) 346.41 390.649 T 0 FF (netmem_write_r) 357.05 390.649 T (eply) 427.95 390.649 T 3 FF ( \() 445.73 390.649 T 4 FF (pend) 451.56 390.649 T 5 FF 471.0 390.649 T 4 FF (r) 480.87 390.649 T (eply_port) 484.391 390.649 T 3 FF (, ) 522.721 390.649 T 4 FF (r) 378.0 400.649 T (esult) 381.52 400.649 T 3 FF (\);) 400.41 400.649 T ([82]) 190.34 412.649 T (}) 288.0 412.649 T 180 417.982544 360 9 CR 1 G 180 417.982544 360 9 NF 0 G 3 FF (/*) 199.224 424.814 T 0.6667 G 530.91 422.48 M 530.91 427.73 L 540 422.48 L 530.91 417.23 L F 530.91 422.48 M 216 422.48 L S 0 0 612 792 CR 0 G 3 FF 288 433.64917 M 1.557648 0 32 (Reply might f) widthshow 346.575348 433.64917 M 1.557648 0 32 (ail if client died. INV) widthshow 437.276672 433.64917 M 1.557648 0 32 (ALID_DEST is the only) widthshow 180 446.982422 360 9 CR 1 G 180 446.982422 360 9 NF 0 G 3 FF (*/) 198.0 453.809 T 0.6667 G 225.09 451.48 M 225.09 446.23 L 216 451.48 L 225.09 456.73 L F 540 451.48 M 225.09 451.48 L S 0 0 612 792 CR 0 G 3 FF (possible error) 288.0 443.649 T (.) 342.16 443.649 T ([83]) 190.34 464.649 T (if \() 288.0 464.649 T 4 FF (r) 299.94 464.649 T (esult) 303.46 464.649 T 3 FF ( == MA) 322.35 464.649 T (CH_SEND_INV) 354.34 464.649 T (ALID_DEST\)) 420.761 464.649 T ([84]) 190.34 476.649 T 0 FF (mach_port_deallocate) 324.0 476.649 T 3 FF ( \() 418.43 476.649 T 0 FF (mach_task_self) 424.26 476.649 T 3 FF ( \(\), ) 489.81 476.649 T 4 FF (pend) 378.0 486.649 T 5 FF 397.44 486.649 T 4 FF (r) 407.31 486.649 T (eply_port) 410.83 486.649 T 3 FF (\);) 449.16 486.649 T 180 491.982239 360 9 CR 1 G 180 491.982239 360 9 NF 0 G 3 FF (/*) 199.224 498.813 T 0.6667 G 530.91 496.48 M 530.91 501.73 L 540 496.48 L 530.91 491.23 L F 530.91 496.48 M 216 496.48 L S 180 510.982178 360 9 CR 1 G 180 510.982178 360 9 NF 0 G 3 FF (*/) 198.0 517.808 T 0.6667 G 225.09 515.48 M 225.09 510.23 L 216 515.48 L 225.09 520.73 L F 540 515.48 M 225.09 515.48 L S 0 0 612 792 CR 0 G 3 FF (Onw) 288.0 507.649 T (ard to ne) 307.34 507.649 T (xt pending operation.) 342.18 507.649 T ([85]) 190.34 528.649 T 4 FF (ne) 288.0 528.649 T (w_pend) 297.29 528.649 T 3 FF ( = ) 328.4 528.649 T 4 FF (pend) 339.04 528.649 T 5 FF 358.48 528.649 T 4 FF (ne) 368.35 528.649 T (xt) 377.59 528.649 T 3 FF (;) 384.81 528.649 T ([86]) 190.34 540.649 T (free \() 288.0 540.649 T 4 FF (pend) 309.37 540.649 T 3 FF (\);) 328.81 540.649 T ([87]) 190.34 552.649 T 4 FF (pend) 288.0 552.649 T 3 FF ( = ) 307.44 552.649 T 4 FF (ne) 318.08 552.649 T (w_pend) 327.37 552.649 T 3 FF (;) 358.48 552.649 T ([88]) 190.34 564.649 T (}) 252.0 564.649 T 180 569.981934 360 9 CR 1 G 180 569.981934 360 9 NF 0 G 3 FF (/*) 199.224 576.813 T 0.6667 G 530.91 574.48 M 530.91 579.73 L 540 574.48 L 530.91 569.23 L F 530.91 574.48 M 216 574.48 L S 0 0 612 792 CR 0 G 3 FF 252 585.64856 M 0.1828 0 32 (Reset pending op queue. This sets it to null if we ran it completely) widthshow 519.266785 585.64856 M 0.1828 0 32 (, else) widthshow 180 598.981812 360 9 CR 1 G 180 598.981812 360 9 NF 0 G 3 FF (*/) 198.0 605.808 T 0.6667 G 225.09 603.48 M 225.09 598.23 L 216 603.48 L 225.09 608.73 L F 540 603.48 M 225.09 603.48 L S 0 0 612 792 CR 0 G 3 FF (to the \336rst write that stopped us.) 252.0 595.648 T ([89]) 190.34 616.648 T 4 FF (obj) 252.0 616.648 T 5 FF 264.78 616.648 T 4 FF (pending_op_queue) 274.65 616.648 T 3 FF ( = ) 350.75 616.648 T 4 FF (pend) 361.39 616.648 T 3 FF (;) 380.83 616.648 T ([90]) 190.34 628.648 T (}) 216.0 628.648 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Client Request Pr) 180.0 657.982 T (ocessing) 271.104 657.982 T 3 FF 180 674.648315 M 0.606339 0 32 (The ) widthshow 0 FF 198.656342 674.648315 M 0.606339 0 32 (netmem_r) widthshow 242.346451 674.648315 M 0.606339 0 32 (ead) widthshow 3 FF 257.346436 674.648315 M 0.606339 0 32 ( and ) widthshow 0 FF 277.999146 674.648315 M 0.606339 0 32 (netmem_write) widthshow 3 FF 339.63916 674.648315 M 0.606339 0 32 ( routines handle read and write requests from the) widthshow 180 686.648315 M 0.219986 0 32 (clients. The page state determines whether the operation can be done directly \(lines [106]) widthshow 180 698.648254 M 0.442307 0 32 (or [135]\) or must be deferred \(lines [114] or [144]\). If the operation is to be deferred b) widthshow 532.21936 698.648254 M 0.442307 0 32 (ut) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 113 113 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (109 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Simple Memory Manager Example) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666626 M 0.681229 0 32 (there is no outstanding request for the page \(no lock request is pending\), then a lock re-) widthshow (quest is made.) 72.0 126.667 T 72 137.999878 360 9 CR 1 G 72 137.999878 360 9 NF 0 G 3 FF (/*) 91.224 144.831 T 3 SL 0 SC 0.6667 G 422.91 142.5 M 422.91 147.75 L 432 142.5 L 422.91 137.25 L F 422.91 142.5 M 108 142.5 L S 72 156.999817 360 9 CR 1 G 72 156.999817 360 9 NF 0 G 3 FF (*/) 90.0 163.826 T 0.6667 G 117.09 161.5 M 117.09 156.25 L 108 161.5 L 117.09 166.75 L F 432 161.5 M 117.09 161.5 L S 0 0 612 792 CR 0 G 3 FF (Routines for handling messages from clients) 108.0 153.667 T ([91]) 82.34 174.666 T (mach_error_t ) 108.0 174.666 T 1 FF (netmem_r) 164.37 174.666 T (ead) 208.06 174.666 T 3 FF ( \(mach_port_t ) 223.06 174.666 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (object) 281.94 174.666 T 3 FF (, mach_port_t ) 306.38 174.666 T 4 FF (r) 364.43 174.666 T (eply_to) 367.95 174.666 T 3 FF (, ) 397.39 174.666 T (vm_address_t ) 162.0 184.666 T 4 FF (of) 220.05 184.666 T (fset) 227.65 184.666 T 3 FF (, int *) 241.54 184.666 T 4 FF (value) 264.6 184.666 T 3 FF (\)) 286.26 184.666 T ([92]) 82.34 196.666 T ({) 108.0 196.666 T ([93]) 82.34 208.666 T 4 FF (netmem_obj_t) 144.0 208.666 T (my_obj) 288.0 208.666 T 3 FF (;) 317.44 208.666 T ([94]) 82.34 220.666 T (printf \(\322read\\n\323\);) 144.0 220.666 T 72 225.999512 360 9 CR 1 G 72 225.999512 360 9 NF 0 G 3 FF (/*) 91.224 232.831 T 0.6667 G 422.91 230.5 M 422.91 235.75 L 432 230.5 L 422.91 225.25 L F 422.91 230.5 M 108 230.5 L S 72 244.999451 360 9 CR 1 G 72 244.999451 360 9 NF 0 G 3 FF (*/) 90.0 251.826 T 0.6667 G 117.09 249.5 M 117.09 244.25 L 108 249.5 L 117.09 254.75 L F 432 249.5 M 117.09 249.5 L S 0 0 612 792 CR 0 G 3 FF (Check ar) 144.0 241.666 T (guments.) 179.64 241.666 T ([95]) 82.34 262.666 T (if \(\() 144.0 262.666 T 4 FF (my_obj) 159.27 262.666 T 3 FF ( = ) 188.71 262.666 T 1 FF (netmem_lookup) 199.35 262.666 T 3 FF ( \() 268.24 262.666 T 4 FF (object) 274.07 262.666 T 3 FF (\)\) == NETMEM_OBJ_NULL\)) 298.51 262.666 T ([96]) 82.34 274.666 T (return \(NETMEM_B) 180.0 274.666 T (AD_OBJECT\);) 264.36 274.666 T ([97]) 82.34 286.666 T (if \() 144.0 286.666 T 4 FF (of) 155.94 286.666 T (fset) 163.54 286.666 T 3 FF ( < 0 || ) 177.43 286.666 T 4 FF (of) 202.07 286.666 T (fset) 209.67 286.666 T 3 FF ( >= \(vm_page_size / sizeof \(int\)\)\)) 223.56 286.666 T ([98]) 82.34 298.666 T (return \(NETMEM_B) 180.0 298.666 T (AD_OFFSET\);) 264.36 298.666 T 72 303.999207 360 9 CR 1 G 72 303.999207 360 9 NF 0 G 3 FF (/*) 91.224 310.83 T 0.6667 G 422.91 308.5 M 422.91 313.75 L 432 308.5 L 422.91 303.25 L F 422.91 308.5 M 108 308.5 L S 72 322.999146 360 9 CR 1 G 72 322.999146 360 9 NF 0 G 3 FF (*/) 90.0 329.825 T 0.6667 G 117.09 327.5 M 117.09 322.25 L 108 327.5 L 117.09 332.75 L F 432 327.5 M 117.09 327.5 L S 0 0 612 792 CR 0 G 3 FF (Ex) 144.0 319.666 T (ecute the read.) 154.96 319.666 T ([99]) 82.34 340.666 T (switch \() 144.0 340.666 T 4 FF (my_obj) 175.94 340.666 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 205.38 340.666 T 4 FF (state) 215.25 340.666 T 3 FF (\)) 234.14 340.666 T ([100]) 77.34 352.666 T ({) 144.0 352.666 T ([101]) 77.34 364.666 T (case NETMEM_OBJ_NONE:) 144.0 364.666 T 72 369.998962 360 9 CR 1 G 72 369.998962 360 9 NF 0 G 3 FF (/*) 91.224 376.83 T 0.6667 G 422.91 374.5 M 422.91 379.75 L 432 374.5 L 422.91 369.25 L F 422.91 374.5 M 108 374.5 L S 0 0 612 792 CR 0 G 3 FF 180 385.665588 M 1.838684 0 32 (Need to initialize. Serv) widthshow 277.576141 385.665588 M 1.838684 0 32 (er has e) widthshow 311.643616 385.665588 M 1.838684 0 32 (xclusi) widthshow 335.283752 385.665588 M 1.838684 0 32 (v) widthshow 340.13382 385.665588 M 1.838684 0 32 (e access \(write\) when) widthshow 72 398.99884 360 9 CR 1 G 72 398.99884 360 9 NF 0 G 3 FF (*/) 90.0 405.825 T 0.6667 G 117.09 403.5 M 117.09 398.25 L 108 403.5 L 117.09 408.75 L F 432 403.5 M 117.09 403.5 L S 0 0 612 792 CR 0 G 3 FF (we\325) 180.0 395.666 T (re done.) 194.49 395.666 T ([102]) 77.34 416.665 T (\(v) 180.0 416.665 T (oid\) ) 188.13 416.665 T 1 FF (vm_allocate) 206.74 416.665 T 3 FF ( \() 257.84 416.665 T 1 FF (mach_task_self) 263.67 416.665 T 3 FF ( \(\), &) 329.22 416.665 T 4 FF (my_obj) 351.16 416.665 T 5 FF 380.6 416.665 T 4 FF (data) 390.47 416.665 T 3 FF (, ) 408.25 416.665 T (vm_page_size, TR) 234.0 426.665 T (UE\);) 308.59 426.665 T ([103]) 77.34 438.665 T 4 FF (my_obj) 180.0 438.665 T 5 FF 209.44 438.665 T 4 FF (state) 219.31 438.665 T 3 FF ( = NETMEM_OBJ_SER) 238.2 438.665 T (VER_WRITE;) 337.49 438.665 T 72 443.998657 360 9 CR 1 G 72 443.998657 360 9 NF 0 G 3 FF (/*) 90.0 450.83 T 0.6667 G 422.91 448.5 M 422.91 453.75 L 432 448.5 L 422.91 443.25 L F 422.91 448.5 M 288 448.5 L S 72 462.998596 360 9 CR 1 G 72 462.998596 360 9 NF 0 G 3 FF (*/) 90.0 469.825 T 0.6667 G 297.09 467.5 M 297.09 462.25 L 288 467.5 L 297.09 472.75 L F 432 467.5 M 297.09 467.5 L S 0 0 612 792 CR 0 G 3 FF (F) 288.0 459.665 T (all through...) 293.41 459.665 T ([104]) 77.34 480.665 T (case NETMEM_OBJ_READ:) 144.0 480.665 T ([105]) 77.34 492.665 T (case NETMEM_OBJ_SER) 144.0 492.665 T (VER_WRITE:) 252.36 492.665 T 72 497.998474 360 9 CR 1 G 72 497.998474 360 9 NF 0 G 3 FF (/*) 91.224 504.83 T 0.6667 G 422.91 502.5 M 422.91 507.75 L 432 502.5 L 422.91 497.25 L F 422.91 502.5 M 108 502.5 L S 72 516.998413 360 9 CR 1 G 72 516.998413 360 9 NF 0 G 3 FF (*/) 90.0 523.825 T 0.6667 G 117.09 521.5 M 117.09 516.25 L 108 521.5 L 117.09 526.75 L F 432 521.5 M 117.09 521.5 L S 0 0 612 792 CR 0 G 3 FF (Read the v) 180.0 513.665 T (alue.) 222.52 513.665 T ([106]) 77.34 534.665 T (*) 180.0 534.665 T 4 FF (value) 185.0 534.665 T 3 FF ( = * \(\(\(int *\) \() 206.66 534.665 T 4 FF (my_obj) 262.01 534.665 T 5 FF 291.45 534.665 T 4 FF (data) 301.32 534.665 T 3 FF (\)\) + ) 319.1 534.665 T 4 FF (of) 336.4 534.665 T (fset) 344.0 534.665 T 3 FF (\);) 357.89 534.665 T ([107]) 77.34 546.665 T (return \(ERR_SUCCESS\);) 180.0 546.665 T ([108]) 77.34 558.665 T (case NETMEM_OBJ_KERNEL_WRITE:) 144.0 558.665 T 72 563.99823 360 9 CR 1 G 72 563.99823 360 9 NF 0 G 3 FF (/*) 91.224 570.829 T 0.6667 G 422.91 568.5 M 422.91 573.75 L 432 568.5 L 422.91 563.25 L F 422.91 568.5 M 108 568.5 L S 0 0 612 792 CR 0 G 3 FF 180 579.664856 M 2.302658 0 32 (Request k) widthshow 221.922714 579.664856 M 2.302658 0 32 (ernel to gi) widthshow 266.828186 579.664856 M 2.302658 0 32 (v) widthshow 271.678253 579.664856 M 2.302658 0 32 (e up write access to page. Ask for a) widthshow 72 592.998108 360 9 CR 1 G 72 592.998108 360 9 NF 0 G 3 FF (*/) 90.0 599.824 T 0.6667 G 117.09 597.5 M 117.09 592.25 L 108 597.5 L 117.09 602.75 L F 432 597.5 M 117.09 597.5 L S 0 0 612 792 CR 0 G 3 FF (reply when it\325) 180.0 589.665 T (s \336nished.) 235.55 589.665 T ([109]) 77.34 610.665 T (printf \(\322lock_request: clean, lock %d\\n\323, ) 180.0 610.665 T (VM_PR) 234.0 620.665 T (O) 266.94 620.665 T (T_WRITE\);) 273.76 620.665 T ([110]) 77.34 632.665 T (\(v) 180.0 632.665 T (oid\) ) 188.13 632.665 T 1 FF (memory_object_lock_r) 206.74 632.665 T (equest) 305.42 632.665 T 3 FF ( \() 332.64 632.665 T 4 FF (my_obj) 338.47 632.665 T 5 FF 367.91 632.665 T 4 FF ( ) 377.78 632.665 T (contr) 234.0 642.665 T (ol_port) 254.66 642.665 T 3 FF (, \(vm_address_t\) 0, vm_page_size, ) 284.11 642.665 T (TR) 234.0 652.664 T (UE, F) 246.38 652.664 T (ALSE, VM_PR) 269.531 652.664 T (O) 332.471 652.664 T (T_WRITE,) 339.291 652.664 T 4 FF ( ) 384.561 652.664 T (my_obj) 234.0 662.664 T 5 FF 263.44 662.664 T 4 FF (object_port) 273.31 662.664 T 3 FF (\);) 319.42 662.664 T ([111]) 77.34 674.664 T 4 FF (my_obj) 180.0 674.664 T 5 FF 209.44 674.664 T 4 FF (state) 219.31 674.664 T 3 FF ( = NETMEM_OBJ_CLEANING;) 238.2 674.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 114 114 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (110 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 180 105.984009 360 9 CR 180 105.984009 360 9 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (/*) 198.0 112.815 T 3 SL 0.6667 G 530.91 110.48 M 530.91 115.73 L 540 110.48 L 530.91 105.23 L F 530.91 110.48 M 396 110.48 L S 180 124.983948 360 9 CR 1 G 180 124.983948 360 9 NF 0 G 3 FF (*/) 198.0 131.81 T 0.6667 G 405.09 129.48 M 405.09 124.23 L 396 129.48 L 405.09 134.73 L F 540 129.48 M 405.09 129.48 L S 0 0 612 792 CR 0 G 3 FF (F) 396.0 121.651 T (all through...) 401.41 121.651 T ([112]) 185.34 142.651 T (case NETMEM_OBJ_CLEANING:) 252.0 142.651 T ([113]) 185.34 154.651 T (case NETMEM_OBJ_FLUSHING:) 252.0 154.651 T 180 159.983826 360 9 CR 1 G 180 159.983826 360 9 NF 0 G 3 FF (/*) 199.224 166.815 T 0.6667 G 530.91 164.48 M 530.91 169.73 L 540 164.48 L 530.91 159.23 L F 530.91 164.48 M 216 164.48 L S 0 0 612 792 CR 0 G 3 FF 288 175.650452 M 0.25592 0 32 (W) widthshow 296.640442 175.650452 M 0.25592 0 32 (ait for this change to complete. Enqueue this operation to be) widthshow 180 188.983704 360 9 CR 1 G 180 188.983704 360 9 NF 0 G 3 FF (*/) 198.0 195.81 T 0.6667 G 225.09 193.48 M 225.09 188.23 L 216 193.48 L 225.09 198.73 L F 540 193.48 M 225.09 193.48 L S 0 0 612 792 CR 0 G 3 FF (handled later) 288.0 185.65 T (.) 339.38 185.65 T ([114]) 185.34 206.65 T 0 FF (pending_op_queue) 288.0 206.65 T 3 FF ( \() 368.58 206.65 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (my_obj) 374.41 206.65 T 3 FF (, PENDING_READ, ) 403.85 206.65 T 4 FF (of) 489.95 206.65 T (fset) 497.55 206.65 T 3 FF (, 0,) 511.44 206.65 T 4 FF ( ) 523.94 206.65 T (r) 342.0 216.65 T (eply_to) 345.52 216.65 T 3 FF (\);) 374.96 216.65 T 180 221.983582 360 9 CR 1 G 180 221.983582 360 9 NF 0 G 3 FF (/*) 199.224 228.815 T 0.6667 G 530.91 226.48 M 530.91 231.73 L 540 226.48 L 530.91 221.23 L F 530.91 226.48 M 216 226.48 L S 180 240.983521 360 9 CR 1 G 180 240.983521 360 9 NF 0 G 3 FF (*/) 198.0 247.81 T 0.6667 G 225.09 245.48 M 225.09 240.23 L 216 245.48 L 225.09 250.73 L F 540 245.48 M 225.09 245.48 L S 0 0 612 792 CR 0 G 3 FF (Reply will happen when lock_request completes.) 288.0 237.65 T ([115]) 185.34 258.65 T (return \(MIG_NO_REPL) 288.0 258.65 T (Y\);) 385.041 258.65 T ([116]) 185.34 270.65 T (def) 252.0 270.65 T (ault:) 264.67 270.65 T ([117]) 185.34 282.65 T (printf \(\322Bad state %d\\n\323, ) 288.0 282.65 T 4 FF (my_obj) 390.48 282.65 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 419.92 282.65 T 4 FF (state) 429.79 282.65 T 3 FF (\);) 448.68 282.65 T ([118]) 185.34 294.65 T (return \(NETMEM_F) 288.0 294.65 T (AILURE\); ) 370.86 294.65 T ([119]) 185.34 306.65 T (}) 252.0 306.65 T 180 311.983215 360 9 CR 1 G 180 311.983215 360 9 NF 0 G 3 FF (/*) 198.0 318.814 T 0.6667 G 530.91 316.48 M 530.91 321.73 L 540 316.48 L 530.91 311.23 L F 530.91 316.48 M 396 316.48 L S 180 330.983154 360 9 CR 1 G 180 330.983154 360 9 NF 0 G 3 FF (*/) 198.0 337.809 T 0.6667 G 405.09 335.48 M 405.09 330.23 L 396 335.48 L 405.09 340.73 L F 540 335.48 M 405.09 335.48 L S 0 0 612 792 CR 0 G 3 FF (NO) 396.0 327.65 T (TREA) 410.04 327.65 T (CHED) 435.75 327.65 T ([120]) 185.34 348.65 T (}) 216.0 348.65 T 180 353.983093 360 9 CR 1 G 180 353.983093 360 9 NF 0 G 3 FF (/*) 199.224 360.814 T 0.6667 G 530.91 358.48 M 530.91 363.73 L 540 358.48 L 530.91 353.23 L F 530.91 358.48 M 216 358.48 L S 180 372.983032 360 9 CR 1 G 180 372.983032 360 9 NF 0 G 3 FF (*/) 198.0 379.809 T 0.6667 G 225.09 377.48 M 225.09 372.23 L 216 377.48 L 225.09 382.73 L F 540 377.48 M 225.09 377.48 L S 0 0 612 792 CR 0 G 3 FF (Write request.) 216.0 369.65 T ([121]) 185.34 390.65 T (mach_error_t ) 216.0 390.65 T 0 FF (netmem_write) 272.37 390.65 T 3 FF ( \(mach_port_t ) 334.01 390.65 T 4 FF (object) 392.89 390.65 T 3 FF (, mach_port_t ) 417.33 390.65 T 4 FF (r) 475.38 390.65 T (eply_to) 478.9 390.65 T 3 FF (, ) 508.34 390.65 T (vm_address_t ) 270.0 400.65 T 4 FF (of) 328.05 400.65 T (fset) 335.65 400.65 T 3 FF (, int ) 349.54 400.65 T 4 FF (value) 367.6 400.65 T 3 FF (\)) 389.26 400.65 T ([122]) 185.34 412.65 T ({) 216.0 412.65 T ([123]) 185.34 424.649 T 4 FF (netmem_obj_t) 252.0 424.649 T (my_obj) 396.0 424.649 T 3 FF (;) 425.44 424.649 T ([124]) 185.34 436.649 T (printf \(\322write\\n\323\);) 252.0 436.649 T 180 441.982727 360 9 CR 1 G 180 441.982727 360 9 NF 0 G 3 FF (/*) 199.224 448.814 T 0.6667 G 530.91 446.48 M 530.91 451.73 L 540 446.48 L 530.91 441.23 L F 530.91 446.48 M 216 446.48 L S 180 460.982666 360 9 CR 1 G 180 460.982666 360 9 NF 0 G 3 FF (*/) 198.0 467.809 T 0.6667 G 225.09 465.48 M 225.09 460.23 L 216 465.48 L 225.09 470.73 L F 540 465.48 M 225.09 465.48 L S 0 0 612 792 CR 0 G 3 FF (Check ar) 252.0 457.649 T (guments. ) 287.64 457.649 T ([125]) 185.34 478.649 T (if \(\() 252.0 478.649 T 4 FF (my_obj) 267.27 478.649 T 3 FF ( = ) 296.71 478.649 T 0 FF (netmem_lookup) 307.35 478.649 T 3 FF ( \() 376.24 478.649 T 4 FF (object) 382.07 478.649 T 3 FF (\)\) == NETMEM_OBJ_NULL\)) 406.51 478.649 T ([126]) 185.34 490.649 T (return \(NETMEM_B) 288.0 490.649 T (AD_OBJECT\);) 372.36 490.649 T ([127]) 185.34 502.649 T (if \() 252.0 502.649 T 4 FF (of) 263.94 502.649 T (fset) 271.54 502.649 T 3 FF ( < 0 || ) 285.43 502.649 T 4 FF (of) 310.07 502.649 T (fset) 317.67 502.649 T 3 FF ( >= \(vm_page_size / sizeof \(int\)\)\)) 331.56 502.649 T ([128]) 185.34 514.649 T (return \(NETMEM_B) 288.0 514.649 T (AD_OFFSET\); ) 372.36 514.649 T 180 519.982422 360 9 CR 1 G 180 519.982422 360 9 NF 0 G 3 FF (/*) 199.224 526.814 T 0.6667 G 530.91 524.48 M 530.91 529.73 L 540 524.48 L 530.91 519.23 L F 530.91 524.48 M 216 524.48 L S 180 538.982361 360 9 CR 1 G 180 538.982361 360 9 NF 0 G 3 FF (*/) 198.0 545.809 T 0.6667 G 225.09 543.48 M 225.09 538.23 L 216 543.48 L 225.09 548.73 L F 540 543.48 M 225.09 543.48 L S 0 0 612 792 CR 0 G 3 FF (Ex) 252.0 535.649 T (ecute the write.) 262.96 535.649 T ([129]) 185.34 556.649 T (switch \() 252.0 556.649 T 4 FF (my_obj) 283.94 556.649 T 5 FF 313.38 556.649 T 4 FF (state) 323.25 556.649 T 3 FF (\)) 342.14 556.649 T ([130]) 185.34 568.649 T ({) 252.0 568.649 T ([131]) 185.34 580.649 T (case NETMEM_OBJ_NONE:) 252.0 580.649 T 180 585.982178 360 9 CR 1 G 180 585.982178 360 9 NF 0 G 3 FF (/*) 199.224 592.813 T 0.6667 G 530.91 590.48 M 530.91 595.73 L 540 590.48 L 530.91 585.23 L F 530.91 590.48 M 216 590.48 L S 0 0 612 792 CR 0 G 3 FF 288 601.648804 M 1.838684 0 32 (Need to initialize. Serv) widthshow 385.576141 601.648804 M 1.838684 0 32 (er has e) widthshow 419.643616 601.648804 M 1.838684 0 32 (xclusi) widthshow 443.283752 601.648804 M 1.838684 0 32 (v) widthshow 448.13382 601.648804 M 1.838684 0 32 (e access \(write\) when) widthshow 180 614.982056 360 9 CR 1 G 180 614.982056 360 9 NF 0 G 3 FF (*/) 198.0 621.808 T 0.6667 G 225.09 619.48 M 225.09 614.23 L 216 619.48 L 225.09 624.73 L F 540 619.48 M 225.09 619.48 L S 0 0 612 792 CR 0 G 3 FF (we\325) 288.0 611.649 T (re done.) 302.49 611.649 T ([132]) 185.34 632.649 T (\(v) 288.0 632.649 T (oid\) ) 296.13 632.649 T 0 FF (vm_allocate) 314.74 632.649 T 3 FF ( \() 365.84 632.649 T 0 FF (mach_task_self) 371.67 632.649 T 3 FF ( \(\), &) 437.22 632.649 T 4 FF (my_obj) 459.16 632.649 T 5 FF 488.6 632.649 T 4 FF (data) 498.47 632.649 T 3 FF (, ) 516.25 632.649 T (vm_page_size, TR) 342.0 642.649 T (UE\);) 416.59 642.649 T ([133]) 185.34 654.649 T 4 FF (my_obj) 288.0 654.649 T 5 FF 317.44 654.649 T 4 FF (state) 327.31 654.649 T 3 FF ( = NETMEM_OBJ_SER) 346.2 654.649 T (VER_WRITE;) 445.49 654.649 T 180 659.981873 360 9 CR 1 G 180 659.981873 360 9 NF 0 G 3 FF (/*) 198.0 666.813 T 0.6667 G 530.91 664.48 M 530.91 669.73 L 540 664.48 L 530.91 659.23 L F 530.91 664.48 M 396 664.48 L S 180 678.981812 360 9 CR 1 G 180 678.981812 360 9 NF 0 G 3 FF (*/) 198.0 685.808 T 0.6667 G 405.09 683.48 M 405.09 678.23 L 396 683.48 L 405.09 688.73 L F 540 683.48 M 405.09 683.48 L S 0 0 612 792 CR 0 G 3 FF (F) 396.0 675.648 T (all through...) 401.41 675.648 T ([134]) 185.34 696.648 T (case NETMEM_OBJ_SER) 252.0 696.648 T (VER_WRITE:) 360.36 696.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 115 115 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (111 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Simple Memory Manager Example) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 72 108 360 9 CR 72 108 360 9 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (/*) 91.224 114.831 T 3 SL 0 SC 0.6667 G 422.91 112.5 M 422.91 117.75 L 432 112.5 L 422.91 107.25 L F 422.91 112.5 M 108 112.5 L S 72 126.999939 360 9 CR 1 G 72 126.999939 360 9 NF 0 G 3 FF (*/) 90.0 133.826 T 0.6667 G 117.09 131.5 M 117.09 126.25 L 108 131.5 L 117.09 136.75 L F 432 131.5 M 117.09 131.5 L S 0 0 612 792 CR 0 G 3 FF (Write the v) 180.0 123.667 T (alue.) 224.74 123.667 T ([135]) 77.34 144.667 T (* \(\(int *\) \() 180.0 144.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (my_obj) 221.38 144.667 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 250.82 144.667 T 4 FF (data) 260.69 144.667 T 3 FF (\) + ) 278.47 144.667 T 4 FF (of) 292.44 144.667 T (fset) 300.04 144.667 T 3 FF (\) = ) 313.93 144.667 T 4 FF (value) 327.9 144.667 T 3 FF (;) 349.56 144.667 T ([136]) 77.34 156.667 T (return \(ERR_SUCCESS\);) 180.0 156.667 T ([137]) 77.34 168.666 T (case NETMEM_OBJ_READ:) 144.0 168.666 T ([138]) 77.34 180.666 T (case NETMEM_OBJ_KERNEL_WRITE:) 144.0 180.666 T 72 185.999695 360 9 CR 1 G 72 185.999695 360 9 NF 0 G 3 FF (/*) 91.224 192.831 T 0.6667 G 422.91 190.5 M 422.91 195.75 L 432 190.5 L 422.91 185.25 L F 422.91 190.5 M 108 190.5 L S 0 0 612 792 CR 0 G 3 FF 180 201.666321 M 1.069107 0 32 (Request k) widthshow 220.689163 201.666321 M 1.069107 0 32 (ernel to gi) widthshow 263.127502 201.666321 M 1.069107 0 32 (v) widthshow 267.9776 201.666321 M 1.069107 0 32 (e up all access to page. Ask for a reply) widthshow 72 214.999573 360 9 CR 1 G 72 214.999573 360 9 NF 0 G 3 FF (*/) 90.0 221.826 T 0.6667 G 117.09 219.5 M 117.09 214.25 L 108 219.5 L 117.09 224.75 L F 432 219.5 M 117.09 219.5 L S 0 0 612 792 CR 0 G 3 FF (when it\325) 180.0 211.666 T (s \336nished.) 212.5 211.666 T ([139]) 77.34 232.666 T (printf \(\322lock_request: clean, \337ush, lock %d\\n\323, ) 180.0 232.666 T (VM_PR) 234.0 242.666 T (O) 266.94 242.666 T (T_ALL\);) 273.76 242.666 T ([140]) 77.34 254.666 T (\(v) 180.0 254.666 T (oid\) ) 188.13 254.666 T 1 FF (memory_object_lock_r) 206.74 254.666 T (equest) 305.42 254.666 T 3 FF ( \() 332.64 254.666 T 4 FF (my_obj) 338.47 254.666 T 5 FF 367.91 254.666 T 3 FF ( ) 377.78 254.666 T 4 FF (contr) 234.0 264.666 T (ol_port) 254.66 264.666 T 3 FF (, \(vm_address_t\) 0, vm_page_size, ) 284.11 264.666 T (TR) 234.0 274.666 T (UE, TR) 246.38 274.666 T (UE, VM_PR) 277.09 274.666 T (O) 328.361 274.666 T (T_ALL, ) 335.181 274.666 T 4 FF (my_obj) 234.0 284.666 T 5 FF 263.44 284.666 T 4 FF (object_port) 273.31 284.666 T 3 FF (\);) 319.42 284.666 T ([141]) 77.34 296.666 T 4 FF (my_obj) 180.0 296.666 T 5 FF 209.44 296.666 T 4 FF (state) 219.31 296.666 T 3 FF ( = NETMEM_OBJ_FLUSHING;) 238.2 296.666 T 72 301.999146 360 9 CR 1 G 72 301.999146 360 9 NF 0 G 3 FF (/*) 90.0 308.83 T 0.6667 G 422.91 306.5 M 422.91 311.75 L 432 306.5 L 422.91 301.25 L F 422.91 306.5 M 288 306.5 L S 72 320.999084 360 9 CR 1 G 72 320.999084 360 9 NF 0 G 3 FF (*/) 90.0 327.825 T 0.6667 G 297.09 325.5 M 297.09 320.25 L 288 325.5 L 297.09 330.75 L F 432 325.5 M 297.09 325.5 L S 0 0 612 792 CR 0 G 3 FF (F) 288.0 317.666 T (all through...) 293.41 317.666 T ([142]) 77.34 338.666 T (case NETMEM_OBJ_CLEANING:) 144.0 338.666 T ([143]) 77.34 350.666 T (case NETMEM_OBJ_FLUSHING:) 144.0 350.666 T 72 355.998962 360 9 CR 1 G 72 355.998962 360 9 NF 0 G 3 FF (/*) 91.224 362.83 T 0.6667 G 422.91 360.5 M 422.91 365.75 L 432 360.5 L 422.91 355.25 L F 422.91 360.5 M 108 360.5 L S 0 0 612 792 CR 0 G 3 FF 180 371.665588 M 0.25592 0 32 (W) widthshow 188.640442 371.665588 M 0.25592 0 32 (ait for this change to complete. Enqueue this operation to be) widthshow 72 384.99884 360 9 CR 1 G 72 384.99884 360 9 NF 0 G 3 FF (*/) 90.0 391.825 T 0.6667 G 117.09 389.5 M 117.09 384.25 L 108 389.5 L 117.09 394.75 L F 432 389.5 M 117.09 389.5 L S 0 0 612 792 CR 0 G 3 FF (handled later) 180.0 381.666 T (.) 231.38 381.666 T ([144]) 77.34 402.665 T 1 FF (pending_op_queue) 180.0 402.665 T 3 FF ( \() 260.58 402.665 T 4 FF (my_obj) 266.41 402.665 T 3 FF (, PENDING_WRITE, ) 295.85 402.665 T 4 FF (of) 386.39 402.665 T (fset) 393.99 402.665 T 3 FF (, ) 407.88 402.665 T 4 FF (value) 234.0 412.665 T 3 FF (, ) 255.66 412.665 T 4 FF (r) 260.66 412.665 T (eply_to) 264.18 412.665 T 3 FF (\);) 293.62 412.665 T 72 417.998718 360 9 CR 1 G 72 417.998718 360 9 NF 0 G 3 FF (/*) 91.224 424.83 T 0.6667 G 422.91 422.5 M 422.91 427.75 L 432 422.5 L 422.91 417.25 L F 422.91 422.5 M 108 422.5 L S 72 436.998657 360 9 CR 1 G 72 436.998657 360 9 NF 0 G 3 FF (*/) 90.0 443.825 T 0.6667 G 117.09 441.5 M 117.09 436.25 L 108 441.5 L 117.09 446.75 L F 432 441.5 M 117.09 441.5 L S 0 0 612 792 CR 0 G 3 FF (Reply will happen when lock_request completes.) 180.0 433.665 T ([145]) 77.34 454.665 T (return \(MIG_NO_REPL) 180.0 454.665 T (Y\);) 277.041 454.665 T ([146]) 77.34 466.665 T (def) 144.0 466.665 T (ault:) 156.67 466.665 T ([147]) 77.34 478.665 T (printf \(\322Bad state %d\\n\323, ) 180.0 478.665 T 4 FF (my_obj) 282.48 478.665 T 5 FF 311.92 478.665 T 4 FF (state) 321.79 478.665 T 3 FF (\);) 340.68 478.665 T ([148]) 77.34 490.665 T (return \(NETMEM_F) 180.0 490.665 T (AILURE\); ) 262.86 490.665 T ([149]) 77.34 502.665 T (}) 144.0 502.665 T 72 507.998352 360 9 CR 1 G 72 507.998352 360 9 NF 0 G 3 FF (/*) 90.0 514.83 T 0.6667 G 422.91 512.5 M 422.91 517.75 L 432 512.5 L 422.91 507.25 L F 422.91 512.5 M 288 512.5 L S 72 526.998291 360 9 CR 1 G 72 526.998291 360 9 NF 0 G 3 FF (*/) 90.0 533.825 T 0.6667 G 297.09 531.5 M 297.09 526.25 L 288 531.5 L 297.09 536.75 L F 432 531.5 M 297.09 531.5 L S 0 0 612 792 CR 0 G 3 FF (NO) 288.0 523.665 T (TREA) 302.04 523.665 T (CHED) 327.75 523.665 T ([150]) 77.34 544.665 T (}) 108.0 544.665 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Exter) 72.0 573.998 T (nal Memory Management Pr) 100.476 573.998 T (otocol) 249.228 573.998 T 3 FF (The routines that follo) 72.0 590.665 T (w handle the e) 160.91 590.665 T (xternal memory management protocol itself.) 218.8 590.665 T 72 601.998108 360 9 CR 1 G 72 601.998108 360 9 NF 0 G 3 FF (/*) 91.224 608.829 T 0.6667 G 422.91 606.5 M 422.91 611.75 L 432 606.5 L 422.91 601.25 L F 422.91 606.5 M 108 606.5 L S 72 620.998047 360 9 CR 1 G 72 620.998047 360 9 NF 0 G 3 FF (*/) 90.0 627.824 T 0.6667 G 117.09 625.5 M 117.09 620.25 L 108 625.5 L 117.09 630.75 L F 432 625.5 M 117.09 625.5 L S 0 0 612 792 CR 0 G 3 FF (Routines for handling paging messages from the k) 108.0 617.665 T (ernel.) 309.27 617.665 T 72 631.998047 360 9 CR 1 G 72 631.998047 360 9 NF 0 G 3 FF (/*) 91.224 638.829 T 0.6667 G 422.91 636.5 M 422.91 641.75 L 432 636.5 L 422.91 631.25 L F 422.91 636.5 M 108 636.5 L S 72 650.997986 360 9 CR 1 G 72 650.997986 360 9 NF 0 G 3 FF (*/) 90.0 657.824 T 0.6667 G 117.09 655.5 M 117.09 650.25 L 108 655.5 L 117.09 660.75 L F 432 655.5 M 117.09 655.5 L S 0 0 612 792 CR 0 G 3 FF (K) 108.0 647.665 T (ernel request to initialize object.) 114.97 647.665 T ([151]) 77.34 668.665 T (k) 108.0 668.665 T (ern_return_t ) 112.9 668.665 T 1 FF (memory_object_init) 164.83 668.665 T 3 FF ( \(memory_object_t ) 250.92 668.665 T 4 FF (object) 329.8 668.665 T 3 FF (, ) 354.24 668.665 T (memory_object_control_t ) 162.0 678.665 T 4 FF (contr) 268.38 678.665 T (ol) 289.04 678.665 T 3 FF (, memory_object_name_t ) 296.82 678.665 T 4 FF (name) 401.53 678.665 T 3 FF (, ) 423.19 678.665 T (vm_size_t ) 162.0 688.665 T 4 FF (obj_pa) 205.61 688.665 T (g) 233.29 688.665 T (e_size) 238.19 688.665 T 3 FF (\)) 262.63 688.665 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 116 116 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (112 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([152]) 185.34 112.651 T ({) 216.0 112.651 T ([153]) 185.34 124.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (netmem_obj_t) 252.0 124.651 T (my_obj) 396.0 124.651 T 3 FF (;) 425.44 124.651 T ([154]) 185.34 136.651 T (printf \(\322init\\n\323\);) 252.0 136.651 T 180 141.983826 360 9 CR 1 G 180 141.983826 360 9 NF 0 G 3 FF (/*) 199.224 148.815 T 3 SL 0.6667 G 530.91 146.48 M 530.91 151.73 L 540 146.48 L 530.91 141.23 L F 530.91 146.48 M 216 146.48 L S 180 160.983765 360 9 CR 1 G 180 160.983765 360 9 NF 0 G 3 FF (*/) 198.0 167.81 T 0.6667 G 225.09 165.48 M 225.09 160.23 L 216 165.48 L 225.09 170.73 L F 540 165.48 M 225.09 165.48 L S 0 0 612 792 CR 0 G 3 FF (Check the object\325) 252.0 157.65 T (s page size.) 321.99 157.65 T ([155]) 185.34 178.65 T (if \() 252.0 178.65 T 4 FF (obj_pa) 263.94 178.65 T (g) 291.62 178.65 T (e_size) 296.52 178.65 T 3 FF ( != vm_page_size\)) 320.96 178.65 T ([156]) 185.34 190.65 T ({) 252.0 190.65 T ([157]) 185.34 202.65 T (printf \(\322page size mismatch\\n\323\);) 288.0 202.65 T ([158]) 185.34 214.65 T (return \(KERN_F) 288.0 214.65 T (AILURE\);) 354.75 214.65 T ([159]) 185.34 226.65 T (}) 252.0 226.65 T 180 231.983459 360 9 CR 1 G 180 231.983459 360 9 NF 0 G 3 FF (/*) 199.224 238.815 T 0.6667 G 530.91 236.48 M 530.91 241.73 L 540 236.48 L 530.91 231.23 L F 530.91 236.48 M 216 236.48 L S 180 250.983398 360 9 CR 1 G 180 250.983398 360 9 NF 0 G 3 FF (*/) 198.0 257.81 T 0.6667 G 225.09 255.48 M 225.09 250.23 L 216 255.48 L 225.09 260.73 L F 540 255.48 M 225.09 255.48 L S 0 0 612 792 CR 0 G 3 FF (Check that it\325) 252.0 247.65 T (s our object.) 305.89 247.65 T ([160]) 185.34 268.65 T (if \(\() 252.0 268.65 T 4 FF (my_obj) 267.27 268.65 T 3 FF ( = ) 296.71 268.65 T 0 FF (netmem_lookup) 307.35 268.65 T 3 FF ( \() 376.24 268.65 T 4 FF (object) 382.07 268.65 T 3 FF (\)\) == NETMEM_OBJ_NULL\)) 406.51 268.65 T ([161]) 185.34 280.65 T (return \(KERN_F) 288.0 280.65 T (AILURE\);) 354.75 280.65 T 180 285.983276 360 9 CR 1 G 180 285.983276 360 9 NF 0 G 3 FF (/*) 199.224 292.814 T 0.6667 G 530.91 290.48 M 530.91 295.73 L 540 290.48 L 530.91 285.23 L F 530.91 290.48 M 216 290.48 L S 0 0 612 792 CR 0 G 3 FF 252 301.649902 M 0.730743 0 32 (Set up control port. If it\325) widthshow 352.874023 301.649902 M 0.730743 0 32 (s not NULL, we\325) widthshow 422.886536 301.649902 M 0.730743 0 32 (v) widthshow 427.736633 301.649902 M 0.730743 0 32 (e just w) widthshow 460.20816 301.649902 M 0.730743 0 32 (on an init/terminate) widthshow 252 311.649841 M 1.12999 0 32 (race. This code does not cope with that race. The right thing to do is) widthshow 252 321.64978 M 0.948288 0 32 (allocate a ne) widthshow 303.626709 321.64978 M 0.948288 0 32 (w data structure to represent the object. This race will be) widthshow 180 334.983032 360 9 CR 1 G 180 334.983032 360 9 NF 0 G 3 FF (*/) 198.0 341.809 T 0.6667 G 225.09 339.48 M 225.09 334.23 L 216 339.48 L 225.09 344.73 L F 540 339.48 M 225.09 339.48 L S 0 0 612 792 CR 0 G 3 FF (remo) 252.0 331.65 T (v) 272.4 331.65 T (ed from future Mach k) 277.25 331.65 T (ernels.) 367.68 331.65 T ([162]) 185.34 352.65 T (if \() 252.0 352.65 T 4 FF (my_obj) 263.94 352.65 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 293.38 352.65 T 4 FF (contr) 303.25 352.65 T (ol_port) 323.91 352.65 T 3 FF ( != MA) 353.36 352.65 T (CH_POR) 383.04 352.65 T (T_NULL\)) 420.781 352.65 T ([163]) 185.34 364.65 T ({) 252.0 364.65 T ([164]) 185.34 376.65 T (printf \(\322init before terminate\\n\323\);) 288.0 376.65 T ([165]) 185.34 388.649 T (if \() 288.0 388.649 T 4 FF (my_obj) 299.94 388.649 T 5 FF 329.38 388.649 T 4 FF (contr) 339.25 388.649 T (ol_port) 359.91 388.649 T 3 FF ( == ) 389.36 388.649 T 4 FF (contr) 405.64 388.649 T (ol) 426.3 388.649 T 3 FF (\)) 434.08 388.649 T ([166]) 185.34 400.649 T ({) 288.0 400.649 T ([167]) 185.34 412.649 T (printf \(\322control port match: I\325m confused\\n\323\);) 324.0 412.649 T ([168]) 185.34 424.649 T (return \(KERN_F) 324.0 424.649 T (AILURE\);) 390.75 424.649 T ([169]) 185.34 436.649 T (}) 288.0 436.649 T 180 441.982544 360 9 CR 1 G 180 441.982544 360 9 NF 0 G 3 FF (/*) 199.224 448.814 T 0.6667 G 530.91 446.48 M 530.91 451.73 L 540 446.48 L 530.91 441.23 L F 530.91 446.48 M 216 446.48 L S 180 460.982483 360 9 CR 1 G 180 460.982483 360 9 NF 0 G 3 FF (*/) 198.0 467.809 T 0.6667 G 225.09 465.48 M 225.09 460.23 L 216 465.48 L 225.09 470.73 L F 540 465.48 M 225.09 465.48 L S 0 0 612 792 CR 0 G 3 FF (Get rid of all the send rights on that port.) 288.0 457.649 T ([170]) 185.34 478.649 T (\(v) 288.0 478.649 T (oid\) ) 296.13 478.649 T 0 FF (mach_port_mod_r) 314.74 478.649 T (efs) 394.55 478.649 T 3 FF ( \() 406.21 478.649 T 0 FF (mach_task_self) 412.04 478.649 T 3 FF ( \(\), ) 477.59 478.649 T 4 FF (my_obj) 342.0 488.649 T 5 FF 371.44 488.649 T 4 FF (contr) 381.31 488.649 T (ol_port) 401.97 488.649 T 3 FF (, ) 431.42 488.649 T (MA) 342.0 498.649 T (CH_POR) 357.71 498.649 T (T_RIGHT_SEND, \320 ) 395.451 498.649 T (\() 342.0 508.649 T 4 FF (my_obj) 345.33 508.649 T 5 FF 374.77 508.649 T 4 FF (send_rights) 384.64 508.649 T 3 FF (\)\);) 431.31 508.649 T ([171]) 185.34 520.649 T (}) 252.0 520.649 T ([172]) 185.34 532.649 T 4 FF (my_obj) 252.0 532.649 T 5 FF 281.44 532.649 T 4 FF (contr) 291.31 532.649 T (ol_port) 311.97 532.649 T 3 FF ( = ) 341.42 532.649 T 4 FF (contr) 352.06 532.649 T (ol) 372.72 532.649 T 3 FF (;) 380.5 532.649 T ([173]) 185.34 544.649 T 4 FF (my_obj) 252.0 544.649 T 5 FF 281.44 544.649 T 4 FF (send_rights) 291.31 544.649 T 3 FF ( = 1;) 337.98 544.649 T 180 549.982056 360 9 CR 1 G 180 549.982056 360 9 NF 0 G 3 FF (/*) 199.224 556.813 T 0.6667 G 530.91 554.48 M 530.91 559.73 L 540 554.48 L 530.91 549.23 L F 530.91 554.48 M 216 554.48 L S 180 568.981995 360 9 CR 1 G 180 568.981995 360 9 NF 0 G 3 FF (*/) 198.0 575.808 T 0.6667 G 225.09 573.48 M 225.09 568.23 L 216 573.48 L 225.09 578.73 L F 540 573.48 M 225.09 573.48 L S 0 0 612 792 CR 0 G 3 FF (Reply: the object is ready) 252.0 565.649 T (. Not cacheable, no special cop) 353.56 565.649 T (y strate) 477.59 565.649 T (gy) 506.601 565.649 T (.) 515.951 565.649 T ([174]) 185.34 586.649 T (printf \(\322ready\\n\323\);) 252.0 586.649 T ([175]) 185.34 598.649 T (\(v) 252.0 598.649 T (oid\) ) 260.13 598.649 T 0 FF (memory_object_r) 278.74 598.649 T (eady) 354.64 598.649 T 3 FF ( \() 374.64 598.649 T 4 FF (contr) 380.47 598.649 T (ol) 401.13 598.649 T 3 FF (, F) 408.91 598.649 T (ALSE, ) 418.731 598.649 T (MEMOR) 306.0 608.648 T (Y_OBJECT_COPY_NONE\);) 343.13 608.648 T 180 613.981812 360 9 CR 1 G 180 613.981812 360 9 NF 0 G 3 FF (/*) 199.224 620.813 T 0.6667 G 530.91 618.48 M 530.91 623.73 L 540 618.48 L 530.91 613.23 L F 530.91 618.48 M 216 618.48 L S 0 0 612 792 CR 0 G 3 FF 252 629.648438 M 3.531799 0 32 (Send right on control port is held by object data structure until) widthshow 252 639.648376 M 1.212463 0 32 (termination. Get rid of name port right. ) widthshow 0 FF 419.637268 639.648376 M 1.212463 0 32 (mach_port_deallocate) widthshow 3 FF 514.067261 639.648376 M 1.212463 0 32 ( could) widthshow 180 652.981628 360 9 CR 1 G 180 652.981628 360 9 NF 0 G 3 FF (*/) 198.0 659.808 T 0.6667 G 225.09 657.48 M 225.09 652.23 L 216 657.48 L 225.09 662.73 L F 540 657.48 M 225.09 657.48 L S 0 0 612 792 CR 0 G 3 FF (also be used here.) 252.0 649.648 T ([176]) 185.34 670.648 T (\(v) 252.0 670.648 T (oid\) ) 260.13 670.648 T 0 FF (mach_port_mod_r) 278.74 670.648 T (efs) 358.55 670.648 T 3 FF ( \() 370.21 670.648 T 0 FF (mach_task_self) 376.04 670.648 T 3 FF ( \(\), ) 441.59 670.648 T 4 FF (name) 455.75 670.648 T 3 FF (, ) 477.41 670.648 T (MA) 306.0 680.648 T (CH_POR) 321.71 680.648 T (T_RIGHT_SEND, \3201\);) 359.451 680.648 T ([177]) 185.34 692.648 T (return \(KERN_SUCCESS\);) 252.0 692.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 117 117 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (113 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Simple Memory Manager Example) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([178]) 77.34 114.667 T (}) 108.0 114.667 T 72 119.999939 360 9 CR 1 G 72 119.999939 360 9 NF 0 G 3 FF (/*) 91.224 126.831 T 3 SL 0 SC 0.6667 G 422.91 124.5 M 422.91 129.75 L 432 124.5 L 422.91 119.25 L F 422.91 124.5 M 108 124.5 L S 72 138.999878 360 9 CR 1 G 72 138.999878 360 9 NF 0 G 3 FF (*/) 90.0 145.826 T 0.6667 G 117.09 143.5 M 117.09 138.25 L 108 143.5 L 117.09 148.75 L F 432 143.5 M 117.09 143.5 L S 0 0 612 792 CR 0 G 3 FF (K) 108.0 135.667 T (ernel object termination.) 114.97 135.667 T ([179]) 77.34 156.667 T (k) 108.0 156.667 T (ern_return_t ) 112.9 156.667 T 1 FF (memory_object_terminate) 164.83 156.667 T 3 FF ( \(memory_object_t ) 278.12 156.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (object) 357.0 156.667 T 3 FF (, ) 381.44 156.667 T (memory_object_control_t ) 162.0 166.666 T 4 FF (contr) 268.38 166.666 T (ol) 289.04 166.666 T 3 FF (, memory_object_name_t) 296.82 166.666 T 4 FF ( name) 399.03 166.666 T 3 FF (\)) 423.19 166.666 T ([180]) 77.34 178.666 T ({) 108.0 178.666 T ([181]) 77.34 190.666 T 4 FF (netmem_obj_t) 144.0 190.666 T (my_obj) 288.0 190.666 T 3 FF (;) 317.44 190.666 T ([182]) 77.34 202.666 T (printf \(\322terminate\\n\323\);) 144.0 202.666 T 72 207.999573 360 9 CR 1 G 72 207.999573 360 9 NF 0 G 3 FF (/*) 91.224 214.831 T 0.6667 G 422.91 212.5 M 422.91 217.75 L 432 212.5 L 422.91 207.25 L F 422.91 212.5 M 108 212.5 L S 72 226.999512 360 9 CR 1 G 72 226.999512 360 9 NF 0 G 3 FF (*/) 90.0 233.826 T 0.6667 G 117.09 231.5 M 117.09 226.25 L 108 231.5 L 117.09 236.75 L F 432 231.5 M 117.09 231.5 L S 0 0 612 792 CR 0 G 3 FF (Check that it\325) 144.0 223.666 T (s our object.) 197.89 223.666 T ([183]) 77.34 244.666 T (if \(\() 144.0 244.666 T 4 FF (my_obj) 159.27 244.666 T 3 FF ( = ) 188.71 244.666 T 1 FF (netmem_lookup) 199.35 244.666 T 3 FF ( \() 268.24 244.666 T 4 FF (object) 274.07 244.666 T 3 FF (\)\) == NETMEM_OBJ_NULL\)) 298.51 244.666 T ([184]) 77.34 256.666 T (return \(KERN_F) 180.0 256.666 T (AILURE\);) 246.75 256.666 T 72 261.99939 360 9 CR 1 G 72 261.99939 360 9 NF 0 G 3 FF (/*) 91.224 268.831 T 0.6667 G 422.91 266.5 M 422.91 271.75 L 432 266.5 L 422.91 261.25 L F 422.91 266.5 M 108 266.5 L S 72 280.999329 360 9 CR 1 G 72 280.999329 360 9 NF 0 G 3 FF (*/) 90.0 287.826 T 0.6667 G 117.09 285.5 M 117.09 280.25 L 108 285.5 L 117.09 290.75 L F 432 285.5 M 117.09 285.5 L S 0 0 612 792 CR 0 G 3 FF (Clear control port, and remo) 144.0 277.666 T (v) 257.44 277.666 T (e an) 262.29 277.666 T (y send rights we ha) 278.52 277.666 T (v) 355.53 277.666 T (e.) 360.38 277.666 T ([185]) 77.34 298.666 T (if \() 144.0 298.666 T 4 FF (my_obj) 155.94 298.666 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 185.38 298.666 T 4 FF (contr) 195.25 298.666 T (ol_port) 215.91 298.666 T 3 FF ( == ) 245.36 298.666 T 4 FF (contr) 261.64 298.666 T (ol) 282.3 298.666 T 3 FF (\)) 290.08 298.666 T ([186]) 77.34 310.666 T ({) 144.0 310.666 T ([187]) 77.34 322.666 T 4 FF (my_obj) 180.0 322.666 T 5 FF 209.44 322.666 T 4 FF (contr) 219.31 322.666 T (ol_port) 239.97 322.666 T 3 FF ( = MA) 269.42 322.666 T (CH_POR) 295.77 322.666 T (T_NULL;) 333.511 322.666 T ([188]) 77.34 334.666 T (\(v) 180.0 334.666 T (oid\) ) 188.13 334.666 T 1 FF (mach_port_mod_r) 206.74 334.666 T (efs) 286.55 334.666 T 3 FF ( \() 298.21 334.666 T 1 FF (mach_task_self) 304.04 334.666 T 3 FF ( \(\), ) 369.59 334.666 T 4 FF (contr) 383.75 334.666 T (ol) 404.41 334.666 T 3 FF (, ) 412.19 334.666 T (MA) 234.0 344.666 T (CH_POR) 249.71 344.666 T (T_RIGHT_SEND, \320 ) 287.451 344.666 T (\() 234.0 354.666 T 4 FF (my_obj) 237.33 354.666 T 5 FF 266.77 354.666 T 4 FF (send_rights) 276.64 354.666 T 3 FF (\)\);) 323.31 354.666 T ([189]) 77.34 366.666 T 4 FF (my_obj) 180.0 366.666 T 5 FF 209.44 366.666 T 4 FF (send_rights) 219.31 366.666 T 3 FF ( = 0;) 265.98 366.666 T ([190]) 77.34 378.666 T (}) 144.0 378.666 T 72 383.99884 360 9 CR 1 G 72 383.99884 360 9 NF 0 G 3 FF (/*) 91.224 390.83 T 0.6667 G 422.91 388.5 M 422.91 393.75 L 432 388.5 L 422.91 383.25 L F 422.91 388.5 M 108 388.5 L S 72 402.998779 360 9 CR 1 G 72 402.998779 360 9 NF 0 G 3 FF (*/) 90.0 409.825 T 0.6667 G 117.09 407.5 M 117.09 402.25 L 108 407.5 L 117.09 412.75 L F 432 407.5 M 117.09 407.5 L S 0 0 612 792 CR 0 G 3 FF (Reset object state: no k) 144.0 399.665 T (ernel cop) 236.67 399.665 T (y) 273.5 399.665 T (, so serv) 277.85 399.665 T (er write ok.) 310.751 399.665 T ([191]) 77.34 420.665 T 4 FF (my_obj) 144.0 420.665 T 5 FF 173.44 420.665 T 4 FF (state) 183.31 420.665 T 3 FF ( = NETMEM_OBJ_SER) 202.2 420.665 T (VER_WRITE;) 301.49 420.665 T 72 425.998718 360 9 CR 1 G 72 425.998718 360 9 NF 0 G 3 FF (/*) 91.224 432.83 T 0.6667 G 422.91 430.5 M 422.91 435.75 L 432 430.5 L 422.91 425.25 L F 422.91 430.5 M 108 430.5 L S 72 444.998657 360 9 CR 1 G 72 444.998657 360 9 NF 0 G 3 FF (*/) 90.0 451.825 T 0.6667 G 117.09 449.5 M 117.09 444.25 L 108 449.5 L 117.09 454.75 L F 432 449.5 M 117.09 449.5 L S 0 0 612 792 CR 0 G 3 FF (No) 144.0 441.665 T (w get rid of the recei) 155.97 441.665 T (v) 238.75 441.665 T (e rights that came in this message.) 243.6 441.665 T ([192]) 77.34 462.665 T (\(v) 144.0 462.665 T (oid\) ) 152.13 462.665 T 1 FF (mach_port_mod_r) 170.74 462.665 T (efs) 250.55 462.665 T 3 FF ( \() 262.21 462.665 T 1 FF (mach_task_self) 268.04 462.665 T 3 FF ( \(\), ) 333.59 462.665 T 4 FF (contr) 347.75 462.665 T (ol) 368.41 462.665 T 3 FF (, ) 376.19 462.665 T (MA) 198.0 472.665 T (CH_POR) 213.71 472.665 T (T_RIGHT_RECEIVE,\3201\);) 251.451 472.665 T ([193]) 77.34 484.665 T (\(v) 144.0 484.665 T (oid\) ) 152.13 484.665 T 1 FF (mach_port_mod_r) 170.74 484.665 T (efs) 250.55 484.665 T 3 FF ( \() 262.21 484.665 T 1 FF (mach_task_self) 268.04 484.665 T 3 FF ( \(\), ) 333.59 484.665 T 4 FF (name) 347.75 484.665 T 3 FF (, ) 369.41 484.665 T (MA) 198.0 494.665 T (CH_POR) 213.71 494.665 T (T_RIGHT_RECEIVE,\3201\);) 251.451 494.665 T ([194]) 77.34 506.665 T (return \(KERN_SUCCESS\);) 144.0 506.665 T ([195]) 77.34 518.665 T (}) 108.0 518.665 T 1 FF 72 540.664917 M 0.330841 0 32 (memory_object_data_r) widthshow 171.790115 540.664917 M 0.330841 0 32 (equest) widthshow 3 FF 199.010117 540.664917 M 0.330841 0 32 ( is f) widthshow 214.571854 540.664917 M 0.330841 0 32 (airly simple. The mere f) widthshow 312.165283 540.664917 M 0.330841 0 32 (act that we recei) widthshow 378.157959 540.664917 M 0.330841 0 32 (v) widthshow 383.008057 540.664917 M 0.330841 0 32 (ed this mes-) widthshow 72 552.664856 M 0.3564 0 32 (sage means that the k) widthshow 158.865662 552.664856 M 0.3564 0 32 (ernel does not hold the page and w) widthshow 300.400513 552.664856 M 0.3564 0 32 (ants it. W) widthshow 338.923767 552.664856 M 0.3564 0 32 (e must clearly be hold-) widthshow 72 564.664795 M 1.327591 0 32 (ing the most recent cop) widthshow 170.530426 564.664795 M 1.327591 0 32 (y and can supply it to the k) widthshow 287.773621 564.664795 M 1.327591 0 32 (ernel directly) widthshow 341.491577 564.664795 M 1.327591 0 32 (, unless we are in the) widthshow (midst of a lock request sequence, in which case the page request is deferred.) 72.0 576.665 T 72 587.998047 360 9 CR 1 G 72 587.998047 360 9 NF 0 G 3 FF (/*) 91.224 594.829 T 0.6667 G 422.91 592.5 M 422.91 597.75 L 432 592.5 L 422.91 587.25 L F 422.91 592.5 M 108 592.5 L S 72 606.997986 360 9 CR 1 G 72 606.997986 360 9 NF 0 G 3 FF (*/) 90.0 613.824 T 0.6667 G 117.09 611.5 M 117.09 606.25 L 108 611.5 L 117.09 616.75 L F 432 611.5 M 117.09 611.5 L S 0 0 612 792 CR 0 G 3 FF (P) 108.0 603.665 T (age-in) 113.41 603.665 T ([196]) 77.34 624.665 T (k) 108.0 624.665 T (ern_return_t ) 112.9 624.665 T 1 FF (memory_object_data_r) 164.83 624.665 T (equest) 264.62 624.665 T 3 FF ( \(memory_object_t ) 291.84 624.665 T 4 FF (object) 370.72 624.665 T 3 FF (, ) 395.16 624.665 T (memory_object_control_t ) 162.0 634.665 T 4 FF (contr) 268.38 634.665 T (ol) 289.04 634.665 T 3 FF (, vm_address_t ) 296.82 634.665 T 4 FF (of) 359.87 634.665 T (fset) 367.47 634.665 T 3 FF (, vm_size_t ) 381.36 634.665 T 4 FF (length) 162.0 644.664 T 3 FF (, vm_prot_t ) 187.0 644.664 T 4 FF (access) 236.17 644.664 T 3 FF (\)) 262.27 644.664 T ([197]) 77.34 656.664 T ({) 108.0 656.664 T ([198]) 77.34 668.664 T 4 FF (netmem_obj_t) 144.0 668.664 T (my_obj) 288.0 668.664 T 3 FF (;) 317.44 668.664 T ([199]) 77.34 680.664 T (vm_prot_t) 144.0 680.664 T 4 FF (loc) 288.0 680.664 T (k_value) 300.02 680.664 T 3 FF (;) 331.12 680.664 T ([200]) 77.34 692.664 T (printf \(\322data_request %d\\n\323, access\);) 144.0 692.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 118 118 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (114 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 180 105.984009 360 9 CR 180 105.984009 360 9 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (/*) 199.224 112.815 T 3 SL 0.6667 G 530.91 110.48 M 530.91 115.73 L 540 110.48 L 530.91 105.23 L F 530.91 110.48 M 216 110.48 L S 180 124.983948 360 9 CR 1 G 180 124.983948 360 9 NF 0 G 3 FF (*/) 198.0 131.81 T 0.6667 G 225.09 129.48 M 225.09 124.23 L 216 129.48 L 225.09 134.73 L F 540 129.48 M 225.09 129.48 L S 0 0 612 792 CR 0 G 3 FF (Check that it\325) 252.0 121.651 T (s our object.) 305.89 121.651 T ([201]) 185.34 142.651 T (if \(\() 252.0 142.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (my_obj) 267.27 142.651 T 3 FF ( = ) 296.71 142.651 T 0 FF (netmem_lookup) 307.35 142.651 T 3 FF ( \() 376.24 142.651 T 4 FF (object) 382.07 142.651 T 3 FF (\)\) == NETMEM_OBJ_NULL\)) 406.51 142.651 T ([202]) 185.34 154.651 T (return \(KERN_F) 288.0 154.651 T (AILURE\);) 354.75 154.651 T 180 159.983826 360 9 CR 1 G 180 159.983826 360 9 NF 0 G 3 FF (/*) 199.224 166.815 T 0.6667 G 530.91 164.48 M 530.91 169.73 L 540 164.48 L 530.91 159.23 L F 530.91 164.48 M 216 164.48 L S 180 178.983765 360 9 CR 1 G 180 178.983765 360 9 NF 0 G 3 FF (*/) 198.0 185.81 T 0.6667 G 225.09 183.48 M 225.09 178.23 L 216 183.48 L 225.09 188.73 L F 540 183.48 M 225.09 183.48 L S 0 0 612 792 CR 0 G 3 FF (Check of) 252.0 175.65 T (fset and length ar) 288.13 175.65 T (guments.) 357.1 175.65 T ([203]) 185.34 196.65 T (if \() 252.0 196.65 T 4 FF (of) 263.94 196.65 T (fset) 271.54 196.65 T 3 FF ( > 0 || ) 285.43 196.65 T 4 FF (of) 310.07 196.65 T (fset) 317.67 196.65 T 3 FF ( + ) 331.56 196.65 T 4 FF (length) 342.2 196.65 T 3 FF ( > vm_page_size\)) 367.2 196.65 T ([204]) 185.34 208.65 T ({) 252.0 208.65 T 180 213.983643 360 9 CR 1 G 180 213.983643 360 9 NF 0 G 3 FF (/*) 199.224 220.815 T 0.6667 G 530.91 218.48 M 530.91 223.73 L 540 218.48 L 530.91 213.23 L F 530.91 218.48 M 216 218.48 L S 0 0 612 792 CR 0 G 3 FF 288 229.650269 M 1.674911 0 32 (Accessing this re) widthshow 359.519897 229.650269 M 1.674911 0 32 (gion of the object is an error) widthshow 482.329712 229.650269 M 1.674911 0 32 (. NO) widthshow 503.04483 229.650269 M 1.674911 0 32 (TE: This) widthshow 288 239.650208 M 1.491089 0 32 (code assumes that there will not be multi-page requests that) widthshow 288 249.650146 M 0.784332 0 32 (include both v) widthshow 346.538818 249.650146 M 0.784332 0 32 (alid and in) widthshow 389.927673 249.650146 M 0.784332 0 32 (v) widthshow 394.677826 249.650146 M 0.784332 0 32 (alid re) widthshow 420.582245 249.650146 M 0.784332 0 32 (gions. Current k) widthshow 486.770966 249.650146 M 0.784332 0 32 (ernels do not) widthshow 288 259.650085 M 0.614502 0 32 (mak) widthshow 305.120056 259.650085 M 0.614502 0 32 (e such requests. A request lik) widthshow 425.292633 259.650085 M 0.614502 0 32 (e that w) widthshow 458.081696 259.650085 M 0.614502 0 32 (ould be split into its) widthshow 180 272.983337 360 9 CR 1 G 180 272.983337 360 9 NF 0 G 3 FF (*/) 198.0 279.81 T 0.6667 G 225.09 277.48 M 225.09 272.23 L 216 277.48 L 225.09 282.73 L F 540 277.48 M 225.09 277.48 L S 0 0 612 792 CR 0 G 3 FF (components here.) 288.0 269.65 T ([205]) 185.34 290.65 T (printf \(\322data_error\\n\323\);) 288.0 290.65 T ([206]) 185.34 302.65 T (\(v) 288.0 302.65 T (oid\) ) 296.13 302.65 T 0 FF (memory_object_data_err) 314.74 302.65 T (or) 423.41 302.65 T 3 FF ( \() 432.85 302.65 T 4 FF (contr) 438.68 302.65 T (ol) 459.34 302.65 T 3 FF (, ) 467.12 302.65 T 4 FF (of) 472.12 302.65 T (fset) 479.721 302.65 T 3 FF (, ) 493.611 302.65 T 4 FF (length) 498.611 302.65 T 3 FF (, ) 523.611 302.65 T (NETMEM_B) 342.0 312.65 T (AD_OFFSET\);) 396.65 312.65 T ([207]) 185.34 324.65 T (return \(KERN_F) 288.0 324.65 T (AILURE\);) 354.75 324.65 T ([208]) 185.34 336.65 T (}) 252.0 336.65 T 180 341.983032 360 9 CR 1 G 180 341.983032 360 9 NF 0 G 3 FF (/*) 199.224 348.814 T 0.6667 G 530.91 346.48 M 530.91 351.73 L 540 346.48 L 530.91 341.23 L F 530.91 346.48 M 216 346.48 L S 180 360.982971 360 9 CR 1 G 180 360.982971 360 9 NF 0 G 3 FF (*/) 198.0 367.809 T 0.6667 G 225.09 365.48 M 225.09 360.23 L 216 365.48 L 225.09 370.73 L F 540 365.48 M 225.09 365.48 L S 0 0 612 792 CR 0 G 3 FF (No) 252.0 357.65 T (w do something about it.) 263.97 357.65 T ([209]) 185.34 378.65 T (switch \() 252.0 378.65 T 4 FF (my_obj) 283.94 378.65 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 313.38 378.65 T 4 FF (state) 323.25 378.65 T 3 FF (\)) 342.14 378.65 T ([210]) 185.34 390.65 T ({) 252.0 390.65 T ([211]) 185.34 402.649 T (case NETMEM_OBJ_NONE:) 252.0 402.649 T 180 407.982788 360 9 CR 1 G 180 407.982788 360 9 NF 0 G 3 FF (/*) 199.224 414.814 T 0.6667 G 530.91 412.48 M 530.91 417.73 L 540 412.48 L 530.91 407.23 L F 530.91 412.48 M 216 412.48 L S 0 0 612 792 CR 0 G 3 FF 288 423.649414 M 8.717117 0 32 (Need to initialize. Initialize k) widthshow 439.698547 423.649414 M 8.717117 0 32 (ernel to zeros with) widthshow 180 436.982666 360 9 CR 1 G 180 436.982666 360 9 NF 0 G 3 FF (*/) 198.0 443.809 T 0.6667 G 225.09 441.48 M 225.09 436.23 L 216 441.48 L 225.09 446.73 L F 540 441.48 M 225.09 441.48 L S 0 0 612 792 CR 0 G 3 FF (data_una) 288.0 433.649 T (v) 323.9 433.649 T (ailable. K) 328.65 433.649 T (ernel gets write access.) 367.28 433.649 T ([212]) 185.34 454.649 T (\(v) 288.0 454.649 T (oid\) ) 296.13 454.649 T 0 FF (vm_allocate) 314.74 454.649 T 3 FF ( \() 365.84 454.649 T 0 FF (mach_task_self) 371.67 454.649 T 3 FF ( \(\), &) 437.22 454.649 T 4 FF (my_obj) 459.16 454.649 T 5 FF 488.6 454.649 T 4 FF (data) 498.47 454.649 T 3 FF (, ) 516.25 454.649 T (vm_page_size, TR) 342.0 464.649 T (UE\);) 416.59 464.649 T ([213]) 185.34 476.649 T (printf \(\322data_una) 288.0 476.649 T (v) 356.39 476.649 T (ailable\\n\323\);) 361.14 476.649 T ([214]) 185.34 488.649 T (\(v) 288.0 488.649 T (oid\) ) 296.13 488.649 T 0 FF (memory_object_data_una) 314.74 488.649 T (v) 426.14 488.649 T (ailable) 431.04 488.649 T 3 FF ( \() 459.38 488.649 T 4 FF (contr) 465.21 488.649 T (ol) 485.871 488.649 T 3 FF (, ) 493.651 488.649 T 4 FF (of) 498.651 488.649 T (fset) 506.251 488.649 T 3 FF (, ) 520.141 488.649 T 4 FF (length) 342.0 498.649 T 3 FF (\);) 367.0 498.649 T ([215]) 185.34 510.649 T 4 FF (my_obj) 288.0 510.649 T 5 FF 317.44 510.649 T 4 FF (state) 327.31 510.649 T 3 FF ( = NETMEM_OBJ_KERNEL_WRITE;) 346.2 510.649 T ([216]) 185.34 522.649 T (break;) 288.0 522.649 T ([217]) 185.34 534.649 T (case NETMEM_OBJ_READ:) 252.0 534.649 T ([218]) 185.34 546.649 T (case NETMEM_OBJ_SER) 252.0 546.649 T (VER_WRITE:) 360.36 546.649 T ([219]) 185.34 558.649 T (case NETMEM_OBJ_KERNEL_WRITE:) 252.0 558.649 T 180 563.982056 360 9 CR 1 G 180 563.982056 360 9 NF 0 G 3 FF (/*) 199.224 570.813 T 0.6667 G 530.91 568.48 M 530.91 573.73 L 540 568.48 L 530.91 563.23 L F 530.91 568.48 M 216 568.48 L S 0 0 612 792 CR 0 G 3 FF 288 579.648682 M 0.875351 0 32 (K) widthshow 294.970154 579.648682 M 0.875351 0 32 (ernel does not ha) widthshow 365.43631 579.648682 M 0.875351 0 32 (v) widthshow 370.286377 579.648682 M 0.875351 0 32 (e a cop) widthshow 400.257141 579.648682 M 0.875351 0 32 (y) widthshow 404.607513 579.648682 M 0.875351 0 32 (. Gi) widthshow 420.233002 579.648682 M 0.875351 0 32 (v) widthshow 425.083069 579.648682 M 0.875351 0 32 (e it one. If write permission) widthshow 180 592.981934 360 9 CR 1 G 180 592.981934 360 9 NF 0 G 3 FF (*/) 198.0 599.808 T 0.6667 G 225.09 597.48 M 225.09 592.23 L 216 597.48 L 225.09 602.73 L F 540 597.48 M 225.09 597.48 L S 0 0 612 792 CR 0 G 3 FF (w) 288.0 589.649 T (asn\325) 295.12 589.649 T (t requested, don\325) 311.6 589.649 T (t grant it.) 378.35 589.649 T ([220]) 185.34 610.649 T (if \() 288.0 610.649 T 4 FF (access) 299.94 610.649 T 3 FF ( & VM_PR) 326.04 610.649 T (O) 371.76 610.649 T (T_WRITE\)) 378.58 610.649 T ([221]) 185.34 622.648 T ({) 288.0 622.648 T ([222]) 185.34 634.648 T 4 FF (loc) 324.0 634.648 T (k_value) 336.02 634.648 T 3 FF ( = VM_PR) 367.12 634.648 T (O) 410.7 634.648 T (T_NONE;) 417.521 634.648 T ([223]) 185.34 646.648 T 4 FF (my_obj) 324.0 646.648 T 5 FF 353.44 646.648 T 4 FF (state) 363.31 646.648 T 3 FF ( = ) 382.2 646.648 T (NETMEM_OBJ_KERNEL_WRITE;) 378.0 656.648 T ([224]) 185.34 668.648 T (}) 288.0 668.648 T ([225]) 185.34 680.648 T (else) 288.0 680.648 T ([226]) 185.34 692.648 T ({) 288.0 692.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 119 119 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (115 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Simple Memory Manager Example) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([227]) 77.34 114.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (loc) 216.0 114.667 T (k_value) 228.02 114.667 T 3 FF ( = VM_PR) 259.12 114.667 T (O) 302.7 114.667 T (T_WRITE;) 309.521 114.667 T ([228]) 77.34 126.667 T 4 FF (my_obj) 216.0 126.667 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 245.44 126.667 T 4 FF (state) 255.31 126.667 T 3 FF ( = NETMEM_OBJ_READ;) 274.2 126.667 T ([229]) 77.34 138.667 T (}) 180.0 138.667 T ([230]) 77.34 150.666 T (printf \(\322data_supply: lock %d\\n\323, ) 180.0 150.666 T 4 FF (loc) 316.37 150.666 T (k_value) 328.39 150.666 T 3 FF (\);) 359.49 150.666 T ([231]) 77.34 162.666 T (\(v) 180.0 162.666 T (oid\) ) 188.13 162.666 T 1 FF (memory_object_data_supply) 206.74 162.666 T 3 FF ( \() 330.62 162.666 T 4 FF (contr) 336.45 162.666 T (ol) 357.11 162.666 T 3 FF (, ) 364.89 162.666 T 4 FF (of) 369.89 162.666 T (fset) 377.49 162.666 T 3 FF (, ) 391.38 162.666 T 4 FF (my_obj) 234.0 172.666 T 5 FF 263.44 172.666 T 4 FF (data) 273.31 172.666 T 3 FF (, ) 291.09 172.666 T 4 FF (length) 296.09 172.666 T 3 FF (, F) 321.09 172.666 T (ALSE, ) 330.91 172.666 T 4 FF (loc) 360.91 172.666 T (k_value) 372.931 172.666 T 3 FF (, ) 404.031 172.666 T (F) 234.0 182.666 T (ALSE, MA) 238.82 182.666 T (CH_POR) 284.531 182.666 T (T_NULL\);) 322.271 182.666 T ([232]) 77.34 194.666 T (break;) 180.0 194.666 T ([233]) 77.34 206.666 T (case NETMEM_OBJ_CLEANING:) 144.0 206.666 T ([234]) 77.34 218.666 T (case NETMEM_OBJ_FLUSHING:) 144.0 218.666 T 72 223.99939 360 9 CR 1 G 72 223.99939 360 9 NF 0 G 3 FF (/*) 91.224 230.831 T 3 SL 0 SC 0.6667 G 422.91 228.5 M 422.91 233.75 L 432 228.5 L 422.91 223.25 L F 422.91 228.5 M 108 228.5 L S 72 242.999329 360 9 CR 1 G 72 242.999329 360 9 NF 0 G 3 FF (*/) 90.0 249.826 T 0.6667 G 117.09 247.5 M 117.09 242.25 L 108 247.5 L 117.09 252.75 L F 432 247.5 M 117.09 247.5 L S 0 0 612 792 CR 0 G 3 FF (This will be handled when the cleaning or \337ushing completes.) 180.0 239.666 T ([235]) 77.34 260.666 T 4 FF (my_obj) 180.0 260.666 T 5 FF 209.44 260.666 T 4 FF (pending_k) 219.31 260.666 T (ernel_access) 260.87 260.666 T 3 FF ( |= ) 312.52 260.666 T 4 FF (access) 325.16 260.666 T 3 FF (;) 351.26 260.666 T ([236]) 77.34 272.666 T 4 FF (my_obj) 180.0 272.666 T 5 FF 209.44 272.666 T 4 FF (pending_k) 219.31 272.666 T (ernel_type) 260.87 272.666 T 3 FF ( = PENDING_TYPE_D) 303.08 272.666 T (A) 399.42 272.666 T (T) 405.531 272.666 T (A;) 410.711 272.666 T ([237]) 77.34 284.666 T (break;) 180.0 284.666 T ([238]) 77.34 296.666 T (def) 144.0 296.666 T (ault:) 156.67 296.666 T ([239]) 77.34 308.666 T (printf \(\322Bad state %d\\n\323, ) 180.0 308.666 T 4 FF (my_obj) 282.48 308.666 T 5 FF 311.92 308.666 T 4 FF (state) 321.79 308.666 T 3 FF (\);) 340.68 308.666 T ([240]) 77.34 320.666 T (break;) 180.0 320.666 T ([241]) 77.34 332.666 T (}) 144.0 332.666 T 72 337.998901 360 9 CR 1 G 72 337.998901 360 9 NF 0 G 3 FF (/*) 91.224 344.83 T 0.6667 G 422.91 342.5 M 422.91 347.75 L 432 342.5 L 422.91 337.25 L F 422.91 342.5 M 108 342.5 L S 72 356.99884 360 9 CR 1 G 72 356.99884 360 9 NF 0 G 3 FF (*/) 90.0 363.825 T 0.6667 G 117.09 361.5 M 117.09 356.25 L 108 361.5 L 117.09 366.75 L F 432 361.5 M 117.09 361.5 L S 0 0 612 792 CR 0 G 3 FF (Get rid of send right on control port.) 144.0 353.666 T ([242]) 77.34 374.665 T 1 FF (netmem_contr) 144.0 374.665 T (ol_cleanup) 206.02 374.665 T 3 FF ( \() 252.14 374.665 T 4 FF (my_obj) 257.97 374.665 T 3 FF (\);) 287.41 374.665 T ([243]) 77.34 386.665 T (return \(KERN_SUCCESS\);) 144.0 386.665 T ([244]) 77.34 398.665 T (}) 108.0 398.665 T 72 420.665314 M 0.84903 0 32 (F) widthshow 77.41008 420.665314 M 0.84903 0 32 (or ) widthshow 1 FF 89.089111 420.665314 M 0.84903 0 32 (memory_object_data_unlock) widthshow 3 FF 213.519119 420.665314 M 0.84903 0 32 (, it follo) widthshow 246.917313 420.665314 M 0.84903 0 32 (ws that the k) widthshow 300.194458 420.665314 M 0.84903 0 32 (ernel holds the page, b) widthshow 393.650696 420.665314 M 0.84903 0 32 (ut wishes) widthshow 72 432.665283 M 0.691147 0 32 (more access. If not in the middle of a lock request sequence, we can grant it. Note \(line) widthshow 72 444.665283 M 0.43808 0 32 ([257]\) that no reply port is speci\336ed for the lock request that grants the access. Since the) widthshow 72 456.665222 M 1.251984 0 32 (page must be vie) widthshow 142.996094 456.665222 M 1.251984 0 32 (wed as entering the NETMEM_OBJ_KERNEL_WRITE state as soon) widthshow (as we send this request, there is no sense w) 72.0 468.665 T (aiting for a reply) 244.09 468.665 T (.) 310.37 468.665 T 72 479.998474 360 9 CR 1 G 72 479.998474 360 9 NF 0 G 3 FF (/*) 91.224 486.83 T 0.6667 G 422.91 484.5 M 422.91 489.75 L 432 484.5 L 422.91 479.25 L F 422.91 484.5 M 108 484.5 L S 72 498.998413 360 9 CR 1 G 72 498.998413 360 9 NF 0 G 3 FF (*/) 90.0 505.825 T 0.6667 G 117.09 503.5 M 117.09 498.25 L 108 503.5 L 117.09 508.75 L F 432 503.5 M 117.09 503.5 L S 0 0 612 792 CR 0 G 3 FF (Unlock request. The k) 108.0 495.665 T (ernel has a read only page and w) 196.77 495.665 T (ants to write.) 327.46 495.665 T ([245]) 77.34 516.665 T (k) 108.0 516.665 T (ern_return_t ) 112.9 516.665 T 1 FF (memory_object_data_unlock) 164.83 516.665 T 3 FF ( \(memory_object_t ) 289.26 516.665 T 4 FF (object) 368.14 516.665 T 3 FF (, ) 392.58 516.665 T (memory_object_control_t ) 162.0 526.665 T 4 FF (contr) 268.38 526.665 T (ol) 289.04 526.665 T 3 FF (, vm_address_t ) 296.82 526.665 T 4 FF (of) 359.87 526.665 T (fset) 367.47 526.665 T 3 FF (, vm_size_t ) 381.36 526.665 T 4 FF (length) 162.0 536.665 T 3 FF (, vm_prot_t ) 187.0 536.665 T 4 FF (access) 236.17 536.665 T 3 FF (\)) 262.27 536.665 T ([246]) 77.34 548.665 T ({) 108.0 548.665 T ([247]) 77.34 560.665 T 4 FF (netmem_obj_t) 144.0 560.665 T (my_obj) 288.0 560.665 T 3 FF (;) 317.44 560.665 T ([248]) 77.34 572.665 T (vm_prot_t) 144.0 572.665 T 4 FF (loc) 288.0 572.665 T (k_value) 300.02 572.665 T 3 FF (;) 331.12 572.665 T ([249]) 77.34 584.665 T (printf \(\322data_unlock %d\\n\323, ) 144.0 584.665 T 4 FF (access) 258.42 584.665 T 3 FF (\);) 284.52 584.665 T 72 589.997986 360 9 CR 1 G 72 589.997986 360 9 NF 0 G 3 FF (/*) 91.224 596.829 T 0.6667 G 422.91 594.5 M 422.91 599.75 L 432 594.5 L 422.91 589.25 L F 422.91 594.5 M 108 594.5 L S 72 608.997925 360 9 CR 1 G 72 608.997925 360 9 NF 0 G 3 FF (*/) 90.0 615.824 T 0.6667 G 117.09 613.5 M 117.09 608.25 L 108 613.5 L 117.09 618.75 L F 432 613.5 M 117.09 613.5 L S 0 0 612 792 CR 0 G 3 FF (Check that it\325) 144.0 605.665 T (s our object.) 197.89 605.665 T ([250]) 77.34 626.665 T (if \(\() 144.0 626.665 T 4 FF (my_obj) 159.27 626.665 T 3 FF ( = ) 188.71 626.665 T 1 FF (netmem_lookup) 199.35 626.665 T 3 FF ( \() 268.24 626.665 T 4 FF (object) 274.07 626.665 T 3 FF (\)\) == NETMEM_OBJ_NULL\)) 298.51 626.665 T ([251]) 77.34 638.665 T (return \(KERN_F) 180.0 638.665 T (AILURE\);) 246.75 638.665 T 72 643.997803 360 9 CR 1 G 72 643.997803 360 9 NF 0 G 3 FF (/*) 91.224 650.829 T 0.6667 G 422.91 648.5 M 422.91 653.75 L 432 648.5 L 422.91 643.25 L F 422.91 648.5 M 108 648.5 L S 72 662.997742 360 9 CR 1 G 72 662.997742 360 9 NF 0 G 3 FF (*/) 90.0 669.824 T 0.6667 G 117.09 667.5 M 117.09 662.25 L 108 667.5 L 117.09 672.75 L F 432 667.5 M 117.09 667.5 L S 0 0 612 792 CR 0 G 3 FF (Check of) 144.0 659.664 T (fset and length ar) 180.13 659.664 T (guments.) 249.1 659.664 T ([252]) 77.34 680.664 T (if \() 144.0 680.664 T 4 FF (of) 155.94 680.664 T (fset) 163.54 680.664 T 3 FF ( > 0 || ) 177.43 680.664 T 4 FF (of) 202.07 680.664 T (fset) 209.67 680.664 T 3 FF ( + ) 223.56 680.664 T 4 FF (length) 234.2 680.664 T 3 FF ( > vm_page_size\)) 259.2 680.664 T ([253]) 77.34 692.664 T (return \(KERN_F) 180.0 692.664 T (AILURE\);) 246.75 692.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 120 120 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (116 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 180 105.984009 360 9 CR 180 105.984009 360 9 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (/*) 199.224 112.815 T 3 SL 0.6667 G 530.91 110.48 M 530.91 115.73 L 540 110.48 L 530.91 105.23 L F 530.91 110.48 M 216 110.48 L S 180 124.983948 360 9 CR 1 G 180 124.983948 360 9 NF 0 G 3 FF (*/) 198.0 131.81 T 0.6667 G 225.09 129.48 M 225.09 124.23 L 216 129.48 L 225.09 134.73 L F 540 129.48 M 225.09 129.48 L S 0 0 612 792 CR 0 G 3 FF (Can handle in read state, otherwise mark as pending.) 252.0 121.651 T ([254]) 185.34 142.651 T (if \() 252.0 142.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (my_obj) 263.94 142.651 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 293.38 142.651 T 4 FF (state) 303.25 142.651 T 3 FF ( == NETMEM_OBJ_READ\)) 322.14 142.651 T ([255]) 185.34 154.651 T ({) 252.0 154.651 T 180 159.983826 360 9 CR 1 G 180 159.983826 360 9 NF 0 G 3 FF (/*) 199.224 166.815 T 0.6667 G 530.91 164.48 M 530.91 169.73 L 540 164.48 L 530.91 159.23 L F 530.91 164.48 M 216 164.48 L S 180 178.983765 360 9 CR 1 G 180 178.983765 360 9 NF 0 G 3 FF (*/) 198.0 185.81 T 0.6667 G 225.09 183.48 M 225.09 178.23 L 216 183.48 L 225.09 188.73 L F 540 183.48 M 225.09 183.48 L S 0 0 612 792 CR 0 G 3 FF (Drop the read page lock.) 288.0 175.65 T ([256]) 185.34 196.65 T (printf \(\322lock_request: lock %d\\n\323, VM_PR) 288.0 196.65 T (O) 460.08 196.65 T (T_NONE\);) 466.9 196.65 T ([257]) 185.34 208.65 T (\(v) 288.0 208.65 T (oid\) ) 296.13 208.65 T 0 FF (memory_object_lock_r) 314.74 208.65 T (equest) 413.42 208.65 T 3 FF ( \() 440.64 208.65 T 4 FF (contr) 446.47 208.65 T (ol) 467.13 208.65 T 3 FF (, ) 474.91 208.65 T 4 FF (of) 479.91 208.65 T (fset) 487.511 208.65 T 3 FF (, ) 501.401 208.65 T 4 FF (length) 506.401 208.65 T 3 FF (, ) 531.401 208.65 T (F) 342.0 218.65 T (ALSE, F) 346.82 218.65 T (ALSE, VM_PR) 381.641 218.65 T (O) 444.581 218.65 T (T_NONE, ) 451.401 218.65 T (MA) 342.0 228.65 T (CH_POR) 357.71 228.65 T (T_NULL\);) 395.451 228.65 T ([258]) 185.34 240.65 T 4 FF (my_obj) 288.0 240.65 T 5 FF 317.44 240.65 T 4 FF (state) 327.31 240.65 T 3 FF ( = NETMEM_OBJ_KERNEL_WRITE;) 346.2 240.65 T ([259]) 185.34 252.65 T (}) 252.0 252.65 T ([260]) 185.34 264.65 T (else if \() 252.0 264.65 T 4 FF (my_obj) 281.99 264.65 T 5 FF 311.43 264.65 T 4 FF (state) 321.3 264.65 T 3 FF ( == NETMEM_OBJ_CLEANING || ) 340.19 264.65 T 4 FF (my_obj) 306.0 274.65 T 5 FF 335.44 274.65 T 4 FF (state) 345.31 274.65 T 3 FF ( == NETMEM_OBJ_FLUSHING\)) 364.2 274.65 T ([261]) 185.34 286.65 T ({) 252.0 286.65 T ([262]) 185.34 298.65 T 4 FF (my_obj) 288.0 298.65 T 5 FF 317.44 298.65 T 4 FF (pending_k) 327.31 298.65 T (ernel_access) 368.87 298.65 T 3 FF ( |= ) 420.52 298.65 T 4 FF (access) 433.16 298.65 T 3 FF (;) 459.26 298.65 T ([263]) 185.34 310.65 T 4 FF (my_obj) 288.0 310.65 T 5 FF 317.44 310.65 T 4 FF (pending_k) 327.31 310.65 T (ernel_type) 368.87 310.65 T 3 FF ( = PENDING_TYPE_LOCK;) 411.08 310.65 T ([264]) 185.34 322.65 T (}) 252.0 322.65 T ([265]) 185.34 334.65 T (else) 252.0 334.65 T ([266]) 185.34 346.65 T (printf \(\322Une) 288.0 346.65 T (xpected state %d\\n\323, ) 337.0 346.65 T 4 FF (my_obj) 421.98 346.65 T 5 FF 451.42 346.65 T 4 FF (state) 461.29 346.65 T 3 FF (\);) 480.18 346.65 T 180 351.98291 360 9 CR 1 G 180 351.98291 360 9 NF 0 G 3 FF (/*) 199.224 358.814 T 0.6667 G 530.91 356.48 M 530.91 361.73 L 540 356.48 L 530.91 351.23 L F 530.91 356.48 M 216 356.48 L S 180 370.982849 360 9 CR 1 G 180 370.982849 360 9 NF 0 G 3 FF (*/) 198.0 377.809 T 0.6667 G 225.09 375.48 M 225.09 370.23 L 216 375.48 L 225.09 380.73 L F 540 375.48 M 225.09 375.48 L S 0 0 612 792 CR 0 G 3 FF (Get rid of send right on control port.) 252.0 367.65 T ([267]) 185.34 388.649 T 0 FF (netmem_contr) 252.0 388.649 T (ol_cleanup) 314.02 388.649 T 3 FF ( \() 360.14 388.649 T 4 FF (my_obj) 365.97 388.649 T 3 FF (\);) 395.41 388.649 T ([268]) 185.34 400.649 T (return \(KERN_SUCCESS\);) 252.0 400.649 T ([269]) 185.34 412.649 T (}) 216.0 412.649 T 0 FF 180 434.649292 M 2.00267 0 32 (memory_object_data_r) widthshow 279.7901 434.649292 M 2.00267 0 32 (etur) widthshow 297.410217 434.649292 M 2.00267 0 32 (n) widthshow 3 FF 302.970215 434.649292 M 2.00267 0 32 ( gi) widthshow 315.002991 434.649292 M 2.00267 0 32 (v) widthshow 319.853088 434.649292 M 2.00267 0 32 (es the manager a fresh cop) widthshow 436.116516 434.649292 M 2.00267 0 32 (y of the page. Since the) widthshow 180 446.649261 M 0.771973 0 32 (page w) widthshow 209.272034 446.649261 M 0.771973 0 32 (as virtually copied as part of the data message, the manager uses this page, free-) widthshow 180 458.649231 M 0.161545 0 32 (ing the old \(line [281]\). If the manager kno) widthshow 352.952515 458.649231 M 0.161545 0 32 (ws that it is not in the middle of a lock request) widthshow 180 470.6492 M 0.567276 0 32 (sequence, it follo) widthshow 249.484695 470.6492 M 0.567276 0 32 (ws that this page-out means that the k) widthshow 404.17569 470.6492 M 0.567276 0 32 (ernel is gi) widthshow 444.500366 470.6492 M 0.567276 0 32 (ving up its cop) widthshow 505.272278 470.6492 M 0.567276 0 32 (y; other-) widthshow (wise the manager cannot be sure.) 180.0 482.649 T 180 493.982452 360 9 CR 1 G 180 493.982452 360 9 NF 0 G 3 FF (/*) 199.224 500.814 T 0.6667 G 530.91 498.48 M 530.91 503.73 L 540 498.48 L 530.91 493.23 L F 530.91 498.48 M 216 498.48 L S 180 512.982422 360 9 CR 1 G 180 512.982422 360 9 NF 0 G 3 FF (*/) 198.0 519.809 T 0.6667 G 225.09 517.48 M 225.09 512.23 L 216 517.48 L 225.09 522.73 L F 540 517.48 M 225.09 517.48 L S 0 0 612 792 CR 0 G 3 FF (P) 216.0 509.649 T (age-out) 221.41 509.649 T ([270]) 185.34 530.649 T (k) 216.0 530.649 T (ern_return_t ) 220.9 530.649 T 0 FF (memory_object_data_r) 272.83 530.649 T (etur) 372.62 530.649 T (n) 390.24 530.649 T 3 FF ( \(memory_object_t ) 395.8 530.649 T 4 FF (object) 474.68 530.649 T 3 FF (, ) 499.12 530.649 T (memory_object_control_t ) 270.0 540.649 T 4 FF (contr) 376.38 540.649 T (ol) 397.04 540.649 T 3 FF (, vm_address_t ) 404.82 540.649 T 4 FF (of) 467.87 540.649 T (fset) 475.47 540.649 T 3 FF (, pointer_t ) 489.36 540.649 T 4 FF (data) 270.0 550.649 T 3 FF (, vm_size_t ) 287.78 550.649 T 4 FF (count) 336.39 550.649 T 3 FF (, boolean_t ) 358.61 550.649 T 4 FF (dirty) 405.55 550.649 T 3 FF (, boolean_t ) 423.79 550.649 T 4 FF (k) 470.73 550.649 T (ernel_copy) 475.07 550.649 T 3 FF (\)) 519.5 550.649 T ([271]) 185.34 562.649 T ({) 216.0 562.649 T ([272]) 185.34 574.649 T 4 FF (netmem_obj_t) 252.0 574.649 T (my_obj) 396.0 574.649 T 3 FF (;) 425.44 574.649 T ([273]) 185.34 586.649 T (printf \(\322data_return\\n\323\);) 252.0 586.649 T 180 591.982056 360 9 CR 1 G 180 591.982056 360 9 NF 0 G 3 FF (/*) 199.224 598.813 T 0.6667 G 530.91 596.48 M 530.91 601.73 L 540 596.48 L 530.91 591.23 L F 530.91 596.48 M 216 596.48 L S 180 610.981934 360 9 CR 1 G 180 610.981934 360 9 NF 0 G 3 FF (*/) 198.0 617.808 T 0.6667 G 225.09 615.48 M 225.09 610.23 L 216 615.48 L 225.09 620.73 L F 540 615.48 M 225.09 615.48 L S 0 0 612 792 CR 0 G 3 FF (Check that it\325) 252.0 607.649 T (s our object.) 305.89 607.649 T ([274]) 185.34 628.649 T (if \(\() 252.0 628.649 T 4 FF (my_obj) 267.27 628.649 T 3 FF ( = ) 296.71 628.649 T 0 FF (netmem_lookup) 307.35 628.649 T 3 FF ( \() 376.24 628.649 T 4 FF (object) 382.07 628.649 T 3 FF (\)\) == NETMEM_OBJ_NULL\)) 406.51 628.649 T ([275]) 185.34 640.649 T (return \(KERN_F) 288.0 640.649 T (AILURE\);) 354.75 640.649 T 180 645.981812 360 9 CR 1 G 180 645.981812 360 9 NF 0 G 3 FF (/*) 199.224 652.813 T 0.6667 G 530.91 650.48 M 530.91 655.73 L 540 650.48 L 530.91 645.23 L F 530.91 650.48 M 216 650.48 L S 0 0 612 792 CR 0 G 3 FF 252 661.648438 M 8.69278 0 32 (Check of) widthshow 296.822937 661.648438 M 8.69278 0 32 (fset and length ar) widthshow 391.871368 661.648438 M 8.69278 0 32 (guments. F) widthshow 444.864227 661.648438 M 8.69278 0 32 (ailure return causes) widthshow 180 674.981689 360 9 CR 1 G 180 674.981689 360 9 NF 0 G 3 FF (*/) 198.0 681.808 T 0.6667 G 225.09 679.48 M 225.09 674.23 L 216 679.48 L 225.09 684.73 L F 540 679.48 M 225.09 679.48 L S 0 0 612 792 CR 0 G 3 FF (mach_msg_serv) 252.0 671.648 T (er to de-allocate data for us.) 316.84 671.648 T ([276]) 185.34 692.648 T (if \() 252.0 692.648 T 4 FF (of) 263.94 692.648 T (fset) 271.54 692.648 T 3 FF ( > 0 || ) 285.43 692.648 T 4 FF (of) 310.07 692.648 T (fset) 317.67 692.648 T 3 FF ( + ) 331.56 692.648 T 4 FF (count) 342.2 692.648 T 3 FF ( > vm_page_size\)) 364.42 692.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 121 121 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (117 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Simple Memory Manager Example) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([277]) 77.34 114.667 T ({) 144.0 114.667 T ([278]) 77.34 126.667 T (printf \(\322wrong data\\n\323\);) 180.0 126.667 T ([279]) 77.34 138.667 T (return \(KERN_F) 180.0 138.667 T (AILURE\);) 246.75 138.667 T ([280]) 77.34 150.666 T (}) 144.0 150.666 T 72 155.999756 360 9 CR 1 G 72 155.999756 360 9 NF 0 G 3 FF (/*) 91.224 162.831 T 3 SL 0 SC 0.6667 G 422.91 160.5 M 422.91 165.75 L 432 160.5 L 422.91 155.25 L F 422.91 160.5 M 108 160.5 L S 72 174.999695 360 9 CR 1 G 72 174.999695 360 9 NF 0 G 3 FF (*/) 90.0 181.826 T 0.6667 G 117.09 179.5 M 117.09 174.25 L 108 179.5 L 117.09 184.75 L F 432 179.5 M 117.09 179.5 L S 0 0 612 792 CR 0 G 3 FF (Handle the write. Sw) 144.0 171.666 T (ap the data for our old cop) 228.33 171.666 T (y) 333.76 171.666 T (.) 338.11 171.666 T ([281]) 77.34 192.666 T (\(v) 144.0 192.666 T (oid\) ) 152.13 192.666 T 1 FF (vm_deallocate) 170.74 192.666 T 3 FF ( \() 231.84 192.666 T 1 FF (mach_task_self) 237.67 192.666 T 3 FF ( \(\), ) 303.22 192.666 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (my_obj) 317.38 192.666 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 346.82 192.666 T 4 FF (data) 356.69 192.666 T 3 FF (, ) 374.47 192.666 T (vm_page_size\);) 198.0 202.666 T ([282]) 77.34 214.666 T 4 FF (my_obj) 144.0 214.666 T 5 FF 173.44 214.666 T 4 FF (data) 183.31 214.666 T 3 FF ( = ) 201.09 214.666 T 4 FF (data) 211.73 214.666 T 3 FF (;) 229.51 214.666 T 72 219.999512 360 9 CR 1 G 72 219.999512 360 9 NF 0 G 3 FF (/*) 91.224 226.831 T 0.6667 G 422.91 224.5 M 422.91 229.75 L 432 224.5 L 422.91 219.25 L F 422.91 224.5 M 108 224.5 L S 0 0 612 792 CR 0 G 3 FF 144 235.666138 M 0.404236 0 32 (Either in k) widthshow 186.928528 235.666138 M 0.404236 0 32 (ernel write state, or middle of a clean or \337ush. In latter case,) widthshow 72 248.99939 360 9 CR 1 G 72 248.99939 360 9 NF 0 G 3 FF (*/) 90.0 255.826 T 0.6667 G 117.09 253.5 M 117.09 248.25 L 108 253.5 L 117.09 258.75 L F 432 253.5 M 117.09 253.5 L S 0 0 612 792 CR 0 G 3 FF (state changes when that operation completes.) 144.0 245.666 T ([283]) 77.34 266.666 T (if \() 144.0 266.666 T 4 FF (my_obj) 155.94 266.666 T 5 FF 185.38 266.666 T 4 FF (state) 195.25 266.666 T 3 FF ( == NETMEM_OBJ_KERNEL_WRITE\)) 214.14 266.666 T ([284]) 77.34 278.666 T 4 FF (my_obj) 180.0 278.666 T 5 FF 209.44 278.666 T 4 FF (state) 219.31 278.666 T 3 FF ( = NETMEM_OBJ_SER) 238.2 278.666 T (VER_WRITE;) 337.49 278.666 T ([285]) 77.34 290.666 T (else if \() 144.0 290.666 T 4 FF (my_obj) 173.99 290.666 T 5 FF 203.43 290.666 T 4 FF (state) 213.3 290.666 T 3 FF ( != NETMEM_OBJ_CLEANING && ) 232.19 290.666 T 4 FF (my_obj) 198.0 300.666 T 5 FF 227.44 300.666 T 4 FF (state) 237.31 300.666 T 3 FF ( != NETMEM_OBJ_FLUSHING\)) 256.2 300.666 T ([286]) 77.34 312.666 T (printf \(\322Une) 180.0 312.666 T (xpected state %d\\n\323, ) 229.0 312.666 T 4 FF (my_obj) 313.98 312.666 T 5 FF 343.42 312.666 T 4 FF (state) 353.29 312.666 T 3 FF (\);) 372.18 312.666 T 72 317.999084 360 9 CR 1 G 72 317.999084 360 9 NF 0 G 3 FF (/*) 91.224 324.83 T 0.6667 G 422.91 322.5 M 422.91 327.75 L 432 322.5 L 422.91 317.25 L F 422.91 322.5 M 108 322.5 L S 72 336.999023 360 9 CR 1 G 72 336.999023 360 9 NF 0 G 3 FF (*/) 90.0 343.825 T 0.6667 G 117.09 341.5 M 117.09 336.25 L 108 341.5 L 117.09 346.75 L F 432 341.5 M 117.09 341.5 L S 0 0 612 792 CR 0 G 3 FF (Get rid of send right on control port.) 144.0 333.666 T ([287]) 77.34 354.666 T 1 FF (netmem_contr) 144.0 354.666 T (ol_cleanup) 206.02 354.666 T 3 FF ( \() 252.14 354.666 T 4 FF (my_obj) 257.97 354.666 T 3 FF (\);) 287.41 354.666 T ([288]) 77.34 366.666 T (return \(KERN_SUCCESS\);) 144.0 366.666 T ([289]) 77.34 378.666 T (}) 108.0 378.666 T 72 400.665466 M 0.167465 0 32 (The ) widthshow 1 FF 90.217468 400.665466 M 0.167465 0 32 (memory_object_lock_completed) widthshow 3 FF 228.517487 400.665466 M 0.167465 0 32 ( routine e) widthshow 266.472504 400.665466 M 0.167465 0 32 (xists mostly to perform deferred process-) widthshow 72 412.665405 M 1.386215 0 32 (ing. If the lock request w) widthshow 178.811142 412.665405 M 1.386215 0 32 (as a clean operation, it follo) widthshow 296.582367 412.665405 M 1.386215 0 32 (ws that the k) widthshow 351.471069 412.665405 M 1.386215 0 32 (ernel no longer has) widthshow 72 424.665344 M 0.314285 0 32 (write access \(and all modi\336ed data has been recei) widthshow 271.984436 424.665344 M 0.314285 0 32 (v) widthshow 276.834534 424.665344 M 0.314285 0 32 (ed\); if the lock request w) widthshow 378.006042 424.665344 M 0.314285 0 32 (as a \337ush op-) widthshow 72 436.665314 M 0.768661 0 32 (eration, the k) widthshow 125.927383 436.665314 M 0.768661 0 32 (ernel no longer holds the page at all. The interesting thing about this latter) widthshow 72 448.665283 M 1.049301 0 32 (condition \(line [304]\) is that, if there were a pending k) widthshow 299.853088 448.665283 M 1.049301 0 32 (ernel request for more access to) widthshow 72 460.665253 M 0.116837 0 32 (the page, the k) widthshow 130.570572 460.665253 M 0.116837 0 32 (ernel no longer simply w) widthshow 230.927979 460.665253 M 0.116837 0 32 (ants more access, it w) widthshow 318.775391 460.665253 M 0.116837 0 32 (ants the page back. The k) widthshow 420.899658 460.665253 M 0.116837 0 32 (er-) widthshow 72 472.665192 M 0.46463 0 32 (nel will send a page request \(follo) widthshow 210.067932 472.665192 M 0.46463 0 32 (wing its \337ushing of the page\), so the manager discards) widthshow 72 484.665131 M 0.789948 0 32 (the access request. The lock completed routine uses ) widthshow 1 FF 287.439606 484.665131 M 0.789948 0 32 (pending_op_execute) widthshow 3 FF 374.109619 484.665131 M 0.789948 0 32 ( to e) widthshow 392.759583 484.665131 M 0.789948 0 32 (x) widthshow 397.60968 484.665131 M 0.789948 0 32 (ecute all) widthshow 72 496.66507 M 0.359344 0 32 (pending client requests it can gi) widthshow 200.476868 496.66507 M 0.359344 0 32 (v) widthshow 205.32695 496.66507 M 0.359344 0 32 (en the page state. If there is a pending write request and) widthshow 72 508.665009 M 0.316193 0 32 (the k) widthshow 91.936249 508.665009 M 0.316193 0 32 (ernel still holds a cop) widthshow 178.651077 508.665009 M 0.316193 0 32 (y) widthshow 183.001434 508.665009 M 0.316193 0 32 (, a ne) widthshow 204.763962 508.665009 M 0.316193 0 32 (w lock request sequence must be started. Once all pend-) widthshow (ing requests are processed, an) 72.0 520.665 T (y k) 190.98 520.665 T (ernel data requests can be honored.) 203.38 520.665 T 72 531.998291 360 9 CR 1 G 72 531.998291 360 9 NF 0 G 3 FF (/*) 91.224 538.829 T 0.6667 G 422.91 536.5 M 422.91 541.75 L 432 536.5 L 422.91 531.25 L F 422.91 536.5 M 108 536.5 L S 72 550.998169 360 9 CR 1 G 72 550.998169 360 9 NF 0 G 3 FF (*/) 90.0 557.824 T 0.6667 G 117.09 555.5 M 117.09 550.25 L 108 555.5 L 117.09 560.75 L F 432 555.5 M 117.09 555.5 L S 0 0 612 792 CR 0 G 3 FF (Completion of a clean or \337ush operation.) 108.0 547.665 T ([290]) 77.34 568.665 T (k) 108.0 568.665 T (ern_return_t ) 112.9 568.665 T 1 FF (memory_object_lock_completed) 164.83 568.665 T 3 FF ( \(memory_object_t ) 303.13 568.665 T 4 FF (object) 382.01 568.665 T 3 FF (, ) 406.45 568.665 T (memory_object_control_t ) 162.0 578.665 T 4 FF (contr) 268.38 578.665 T (ol) 289.04 578.665 T 3 FF (, vm_address_t ) 296.82 578.665 T 4 FF (of) 359.87 578.665 T (fset) 367.47 578.665 T 3 FF (, vm_size_t ) 381.36 578.665 T 4 FF (length) 162.0 588.665 T 3 FF (\)) 187.0 588.665 T ([291]) 77.34 600.665 T ({) 108.0 600.665 T ([292]) 77.34 612.665 T 4 FF (netmem_obj_t) 144.0 612.665 T (my_obj) 288.0 612.665 T 3 FF (;) 317.44 612.665 T ([293]) 77.34 624.665 T (vm_prot_t) 144.0 624.665 T 4 FF (loc) 288.0 624.665 T (k_value) 300.02 624.665 T 3 FF (;) 331.12 624.665 T ([294]) 77.34 636.664 T (printf \(\322lock_completed\\n\323\);) 144.0 636.664 T 72 641.997803 360 9 CR 1 G 72 641.997803 360 9 NF 0 G 3 FF (/*) 91.224 648.829 T 0.6667 G 422.91 646.5 M 422.91 651.75 L 432 646.5 L 422.91 641.25 L F 422.91 646.5 M 108 646.5 L S 72 660.997681 360 9 CR 1 G 72 660.997681 360 9 NF 0 G 3 FF (*/) 90.0 667.824 T 0.6667 G 117.09 665.5 M 117.09 660.25 L 108 665.5 L 117.09 670.75 L F 432 665.5 M 117.09 665.5 L S 0 0 612 792 CR 0 G 3 FF (Check that it\325) 144.0 657.664 T (s our object.) 197.89 657.664 T ([295]) 77.34 678.664 T (if \(\() 144.0 678.664 T 4 FF (my_obj) 159.27 678.664 T 3 FF ( = ) 188.71 678.664 T 1 FF (netmem_lookup) 199.35 678.664 T 3 FF ( \() 268.24 678.664 T 4 FF (object) 274.07 678.664 T 3 FF (\)\) == NETMEM_OBJ_NULL\)) 298.51 678.664 T ([296]) 77.34 690.664 T (return \(KERN_F) 180.0 690.664 T (AILURE\);) 246.75 690.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 122 122 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (118 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 180 105.984009 360 9 CR 180 105.984009 360 9 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (/*) 199.224 112.815 T 3 SL 0.6667 G 530.91 110.48 M 530.91 115.73 L 540 110.48 L 530.91 105.23 L F 530.91 110.48 M 216 110.48 L S 180 124.983948 360 9 CR 1 G 180 124.983948 360 9 NF 0 G 3 FF (*/) 198.0 131.81 T 0.6667 G 225.09 129.48 M 225.09 124.23 L 216 129.48 L 225.09 134.73 L F 540 129.48 M 225.09 129.48 L S 0 0 612 792 CR 0 G 3 FF (Check of) 252.0 121.651 T (fset and length ar) 288.13 121.651 T (guments.) 357.1 121.651 T ([297]) 185.34 142.651 T (if \() 252.0 142.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (of) 263.94 142.651 T (fset) 271.54 142.651 T 3 FF ( > 0 || ) 285.43 142.651 T 4 FF (of) 310.07 142.651 T (fset) 317.67 142.651 T 3 FF ( + ) 331.56 142.651 T 4 FF (length) 342.2 142.651 T 3 FF ( > vm_page_size\)) 367.2 142.651 T ([298]) 185.34 154.651 T (return \(KERN_F) 288.0 154.651 T (AILURE\);) 354.75 154.651 T 180 159.983826 360 9 CR 1 G 180 159.983826 360 9 NF 0 G 3 FF (/*) 199.224 166.815 T 0.6667 G 530.91 164.48 M 530.91 169.73 L 540 164.48 L 530.91 159.23 L F 530.91 164.48 M 216 164.48 L S 0 0 612 792 CR 0 G 3 FF 252 175.650452 M 0.294113 0 32 (Action depends on what state we were in, b) widthshow 428.28302 175.650452 M 0.294113 0 32 (ut cleaning and \337ushing are) widthshow 180 188.983704 360 9 CR 1 G 180 188.983704 360 9 NF 0 G 3 FF (*/) 198.0 195.81 T 0.6667 G 225.09 193.48 M 225.09 188.23 L 216 193.48 L 225.09 198.73 L F 540 193.48 M 225.09 193.48 L S 0 0 612 792 CR 0 G 3 FF (similar) 252.0 185.65 T (.) 279.23 185.65 T ([299]) 185.34 206.65 T (if \() 252.0 206.65 T 4 FF (my_obj) 263.94 206.65 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 293.38 206.65 T 4 FF (state) 303.25 206.65 T 3 FF ( == NETMEM_OBJ_CLEANING\)) 322.14 206.65 T 180 211.983643 360 9 CR 1 G 180 211.983643 360 9 NF 0 G 3 FF (/*) 199.224 218.815 T 0.6667 G 530.91 216.48 M 530.91 221.73 L 540 216.48 L 530.91 211.23 L F 530.91 216.48 M 216 216.48 L S 180 230.983582 360 9 CR 1 G 180 230.983582 360 9 NF 0 G 3 FF (*/) 198.0 237.81 T 0.6667 G 225.09 235.48 M 225.09 230.23 L 216 235.48 L 225.09 240.73 L F 540 235.48 M 225.09 235.48 L S 0 0 612 792 CR 0 G 3 FF (K) 288.0 227.65 T (ernel may ha) 294.97 227.65 T (v) 346.42 227.65 T (e read only cop) 351.27 227.65 T (y of page.) 412.54 227.65 T ([300]) 185.34 248.65 T 4 FF (my_obj) 288.0 248.65 T 5 FF 317.44 248.65 T 4 FF (state) 327.31 248.65 T 3 FF ( = NETMEM_OBJ_READ;) 346.2 248.65 T ([301]) 185.34 260.65 T (else if \() 252.0 260.65 T 4 FF (my_obj) 281.99 260.65 T 5 FF 311.43 260.65 T 4 FF (state) 321.3 260.65 T 3 FF ( == NETMEM_OBJ_FLUSHING\)) 340.19 260.65 T ([302]) 185.34 272.65 T ({) 252.0 272.65 T 180 277.983398 360 9 CR 1 G 180 277.983398 360 9 NF 0 G 3 FF (/*) 199.224 284.815 T 0.6667 G 530.91 282.48 M 530.91 287.73 L 540 282.48 L 530.91 277.23 L F 530.91 282.48 M 216 282.48 L S 180 296.983337 360 9 CR 1 G 180 296.983337 360 9 NF 0 G 3 FF (*/) 198.0 303.81 T 0.6667 G 225.09 301.48 M 225.09 296.23 L 216 301.48 L 225.09 306.73 L F 540 301.48 M 225.09 301.48 L S 0 0 612 792 CR 0 G 3 FF (K) 288.0 293.65 T (ernel no longer has page.) 294.97 293.65 T ([303]) 185.34 314.65 T 4 FF (my_obj) 288.0 314.65 T 5 FF 317.44 314.65 T 4 FF (state) 327.31 314.65 T 3 FF ( = NETMEM_OBJ_SER) 346.2 314.65 T (VER_WRITE;) 445.49 314.65 T ([304]) 185.34 326.65 T (if \() 288.0 326.65 T 4 FF (my_obj) 299.94 326.65 T 5 FF 329.38 326.65 T 4 FF (pending_k) 339.25 326.65 T (ernel_type) 380.81 326.65 T 3 FF ( = ) 423.02 326.65 T (PENDING_TYPE_LOCK\)) 342.0 336.65 T ([305]) 185.34 348.65 T 4 FF (my_obj) 324.0 348.65 T 5 FF 353.44 348.65 T 4 FF (pending_k) 363.31 348.65 T (ernel_access ) 404.87 348.65 T 3 FF (= ) 459.02 348.65 T (VM_PR) 378.0 358.65 T (O) 410.94 358.65 T (T_NONE;) 417.76 358.65 T ([306]) 185.34 370.65 T (}) 252.0 370.65 T ([307]) 185.34 382.65 T (else) 252.0 382.65 T ([308]) 185.34 394.65 T ({) 252.0 394.65 T ([309]) 185.34 406.649 T (printf \(\322une) 288.0 406.649 T (xpected state: %d\\n\323, ) 334.78 406.649 T 4 FF (my_obj) 422.54 406.649 T 5 FF 451.98 406.649 T 4 FF (state) 461.85 406.649 T 3 FF (\);) 480.74 406.649 T ([310]) 185.34 418.649 T (return \(KERN_F) 288.0 418.649 T (AILURE\);) 354.75 418.649 T ([311]) 185.34 430.649 T (}) 252.0 430.649 T 180 435.982666 360 9 CR 1 G 180 435.982666 360 9 NF 0 G 3 FF (/*) 199.224 442.814 T 0.6667 G 530.91 440.48 M 530.91 445.73 L 540 440.48 L 530.91 435.23 L F 530.91 440.48 M 216 440.48 L S 180 454.982605 360 9 CR 1 G 180 454.982605 360 9 NF 0 G 3 FF (*/) 198.0 461.809 T 0.6667 G 225.09 459.48 M 225.09 454.23 L 216 459.48 L 225.09 464.73 L F 540 459.48 M 225.09 459.48 L S 0 0 612 792 CR 0 G 3 FF (Handle pending client message operations.) 252.0 451.649 T ([312]) 185.34 472.649 T 0 FF (pending_op_execute) 252.0 472.649 T 3 FF ( \() 338.67 472.649 T 4 FF (my_obj) 344.5 472.649 T 3 FF (\);) 373.94 472.649 T 180 477.982544 360 9 CR 1 G 180 477.982544 360 9 NF 0 G 3 FF (/*) 199.224 484.814 T 0.6667 G 530.91 482.48 M 530.91 487.73 L 540 482.48 L 530.91 477.23 L F 530.91 482.48 M 216 482.48 L S 180 496.982483 360 9 CR 1 G 180 496.982483 360 9 NF 0 G 3 FF (*/) 198.0 503.809 T 0.6667 G 225.09 501.48 M 225.09 496.23 L 216 501.48 L 225.09 506.73 L F 540 501.48 M 225.09 501.48 L S 0 0 612 792 CR 0 G 3 FF (Pending message write tak) 252.0 493.649 T (es priority \(cleaning state only\).) 358.83 493.649 T ([313]) 185.34 514.649 T (if \() 252.0 514.649 T 4 FF (my_obj) 263.94 514.649 T 5 FF 293.38 514.649 T 4 FF (pending_op_queue) 303.25 514.649 T 3 FF ( != PENDING_OP_NULL\)) 379.35 514.649 T ([314]) 185.34 526.649 T ({) 252.0 526.649 T 180 531.982361 360 9 CR 1 G 180 531.982361 360 9 NF 0 G 3 FF (/*) 199.224 538.814 T 0.6667 G 530.91 536.48 M 530.91 541.73 L 540 536.48 L 530.91 531.23 L F 530.91 536.48 M 216 536.48 L S 0 0 612 792 CR 0 G 3 FF 288 547.648987 M 1.069107 0 32 (Request k) widthshow 328.689148 547.648987 M 1.069107 0 32 (ernel to gi) widthshow 371.127502 547.648987 M 1.069107 0 32 (v) widthshow 375.9776 547.648987 M 1.069107 0 32 (e up all access to page. Ask for a reply) widthshow 180 560.982239 360 9 CR 1 G 180 560.982239 360 9 NF 0 G 3 FF (*/) 198.0 567.808 T 0.6667 G 225.09 565.48 M 225.09 560.23 L 216 565.48 L 225.09 570.73 L F 540 565.48 M 225.09 565.48 L S 0 0 612 792 CR 0 G 3 FF (when it\325) 288.0 557.649 T (s \336nished.) 320.5 557.649 T ([315]) 185.34 578.649 T (printf \(\322lock_request: clean, \337ush, lock %d\\n\323, ) 288.0 578.649 T (VM_PR) 342.0 588.649 T (O) 374.94 588.649 T (T_ALL\);) 381.76 588.649 T ([316]) 185.34 600.649 T (\(v) 288.0 600.649 T (oid\) ) 296.13 600.649 T 0 FF (memory_object_lock_r) 314.74 600.649 T (equest) 413.42 600.649 T 3 FF ( \() 440.64 600.649 T 4 FF (contr) 446.47 600.649 T (ol) 467.13 600.649 T 3 FF (, ) 474.91 600.649 T (\(vm_address_t\) 0, vm_page_size, TR) 342.0 610.649 T (UE, ) 491.3 610.649 T (TR) 342.0 620.649 T (UE, VM_PR) 354.38 620.649 T (O) 405.65 620.649 T (T_ALL,) 412.471 620.649 T 4 FF ( my_obj) 445.521 620.649 T 5 FF 477.461 620.649 T 4 FF (object_port) 487.331 620.649 T 3 FF (\);) 533.441 620.649 T ([317]) 185.34 632.649 T 4 FF (my_obj) 288.0 632.649 T 5 FF 317.44 632.649 T 4 FF (state) 327.31 632.649 T 3 FF ( = NETMEM_OBJ_FLUSHING;) 346.2 632.649 T ([318]) 185.34 644.648 T (}) 252.0 644.648 T 180 649.981812 360 9 CR 1 G 180 649.981812 360 9 NF 0 G 3 FF (/*) 199.224 656.813 T 0.6667 G 530.91 654.48 M 530.91 659.73 L 540 654.48 L 530.91 649.23 L F 530.91 654.48 M 216 654.48 L S 180 668.98175 360 9 CR 1 G 180 668.98175 360 9 NF 0 G 3 FF (*/) 198.0 675.808 T 0.6667 G 225.09 673.48 M 225.09 668.23 L 216 673.48 L 225.09 678.73 L F 540 673.48 M 225.09 673.48 L S 0 0 612 792 CR 0 G 3 FF (Does the k) 252.0 665.648 T (ernel w) 294.67 665.648 T (ant the page?) 324.28 665.648 T ([319]) 185.34 686.648 T (else if \() 252.0 686.648 T 4 FF (my_obj) 281.99 686.648 T 5 FF 311.43 686.648 T 4 FF (pending_k) 321.3 686.648 T (ernel_access) 362.86 686.648 T 3 FF ( != VM_PR) 414.51 686.648 T (O) 461.42 686.648 T (T_NONE\)) 468.241 686.648 T ([320]) 185.34 698.648 T ({) 252.0 698.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 123 123 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (119 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Simple Memory Manager Example) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([321]) 77.34 114.667 T (if \() 180.0 114.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (my_obj) 191.94 114.667 T 5 (Symbol) 10 1 mymakefontmetric 5 FF 221.38 114.667 T 4 FF (pending_k) 231.25 114.667 T (ernel_access) 272.81 114.667 T 3 FF ( &VM_PR) 324.46 114.667 T (O) 367.68 114.667 T (T_WRITE\)) 374.501 114.667 T ([322]) 77.34 126.667 T ({) 180.0 126.667 T ([323]) 77.34 138.667 T 4 FF (loc) 216.0 138.667 T (k_value) 228.02 138.667 T 3 FF ( = VM_PR) 259.12 138.667 T (O) 302.7 138.667 T (T_NONE;) 309.521 138.667 T ([324]) 77.34 150.666 T 4 FF (my_obj) 216.0 150.666 T 5 FF 245.44 150.666 T 4 FF (state) 255.31 150.666 T 3 FF ( = ) 274.2 150.666 T (NETMEM_OBJ_KERNEL_WRITE;) 270.0 160.666 T ([325]) 77.34 172.666 T (}) 180.0 172.666 T ([326]) 77.34 184.666 T (else) 180.0 184.666 T ([327]) 77.34 196.666 T ({) 180.0 196.666 T ([328]) 77.34 208.666 T 4 FF (loc) 216.0 208.666 T (k_value) 228.02 208.666 T 3 FF ( = VM_PR) 259.12 208.666 T (O) 302.7 208.666 T (T_WRITE;) 309.521 208.666 T ([329]) 77.34 220.666 T 4 FF (my_obj) 216.0 220.666 T 5 FF 245.44 220.666 T 4 FF (state) 255.31 220.666 T 3 FF ( = NETMEM_OBJ_READ;) 274.2 220.666 T ([330]) 77.34 232.666 T (}) 180.0 232.666 T ([331]) 77.34 244.666 T 4 FF (my_obj) 180.0 244.666 T 5 FF 209.44 244.666 T 4 FF (pending_k) 219.31 244.666 T (ernel_access) 260.87 244.666 T 3 FF ( = VM_PR) 312.52 244.666 T (O) 356.1 244.666 T (T_NONE;) 362.921 244.666 T ([332]) 77.34 256.666 T (if \() 180.0 256.666 T 4 FF (my_obj) 191.94 256.666 T 5 FF 221.38 256.666 T 4 FF (pending_k) 231.25 256.666 T (ernel_type) 272.81 256.666 T 3 FF ( == ) 315.02 256.666 T (PENDING_TYPE_LOCK\)) 234.0 266.666 T ([333]) 77.34 278.666 T ({) 180.0 278.666 T ([334]) 77.34 290.666 T (printf \(\322lock_request: lock %d\\n\323, ) 216.0 290.666 T 4 FF (loc) 355.14 290.666 T (k_value) 367.16 290.666 T 3 FF (\);) 398.26 290.666 T ([335]) 77.34 302.666 T (\(v) 216.0 302.666 T (oid\) ) 224.13 302.666 T 1 FF (memory_object_lock_r) 242.74 302.666 T (equest) 341.42 302.666 T 3 FF ( \() 368.64 302.666 T 4 FF (contr) 374.47 302.666 T (ol) 395.13 302.666 T 3 FF (, ) 402.91 302.666 T (\(vm_address_t\) 0, vm_page_size, ) 270.0 312.666 T (F) 270.0 322.666 T (ALSE, F) 274.82 322.666 T (ALSE, ) 309.641 322.666 T 4 FF (loc) 339.641 322.666 T (k_value) 351.661 322.666 T 3 FF (, ) 382.761 322.666 T (MA) 270.0 332.665 T (CH_POR) 285.71 332.665 T (T_NULL\);) 323.451 332.665 T ([336]) 77.34 344.665 T (}) 180.0 344.665 T ([337]) 77.34 356.665 T (else) 180.0 356.665 T ([338]) 77.34 368.665 T ({) 180.0 368.665 T ([339]) 77.34 380.665 T (printf \(\322data_supply: lock %d\\n\323, ) 216.0 380.665 T 4 FF (loc) 352.37 380.665 T (k_value) 364.39 380.665 T 3 FF (\);) 395.49 380.665 T ([340]) 77.34 392.665 T (\(v) 216.0 392.665 T (oid\) ) 224.13 392.665 T 1 FF (memory_object_data_supply) 242.74 392.665 T 3 FF ( \() 366.62 392.665 T 4 FF (contr) 372.45 392.665 T (ol) 393.11 392.665 T 3 FF (, ) 400.89 392.665 T (\(vm_address_t\) 0, ) 270.0 402.665 T 4 FF (my_obj) 344.71 402.665 T 5 FF 374.15 402.665 T 4 FF (data) 384.02 402.665 T 3 FF (, ) 401.8 402.665 T (vm_page_size, F) 270.0 412.665 T (ALSE, ) 337.03 412.665 T 4 FF (loc) 367.03 412.665 T (k_value) 379.051 412.665 T 3 FF (, ) 410.151 412.665 T (F) 270.0 422.665 T (ALSE, MA) 274.82 422.665 T (CH_POR) 320.531 422.665 T (T_NULL\);) 358.271 422.665 T ([341]) 77.34 434.665 T (}) 180.0 434.665 T ([342]) 77.34 446.665 T (}) 144.0 446.665 T 72 451.998169 360 9 CR 1 G 72 451.998169 360 9 NF 0 G 3 FF (/*) 91.224 458.829 T 3 SL 0 SC 0.6667 G 422.91 456.5 M 422.91 461.75 L 432 456.5 L 422.91 451.25 L F 422.91 456.5 M 108 456.5 L S 72 470.998108 360 9 CR 1 G 72 470.998108 360 9 NF 0 G 3 FF (*/) 90.0 477.824 T 0.6667 G 117.09 475.5 M 117.09 470.25 L 108 475.5 L 117.09 480.75 L F 432 475.5 M 117.09 475.5 L S 0 0 612 792 CR 0 G 3 FF (Get rid of send right on control port.) 144.0 467.665 T ([343]) 77.34 488.665 T 1 FF (netmem_contr) 144.0 488.665 T (ol_cleanup) 206.02 488.665 T 3 FF ( \() 252.14 488.665 T 4 FF (my_obj) 257.97 488.665 T 3 FF (\);) 287.41 488.665 T ([344]) 77.34 500.665 T (return \(KERN_SUCCESS\);) 144.0 500.665 T ([345]) 77.34 512.665 T (}) 108.0 512.665 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Non-Used Stubs) 72.0 541.998 T 72 551.997864 360 9 CR 1 G 72 551.997864 360 9 NF 0 G 3 FF (/*) 91.224 558.829 T 0.6667 G 422.91 556.5 M 422.91 561.75 L 432 556.5 L 422.91 551.25 L F 422.91 556.5 M 108 556.5 L S 72 570.997803 360 9 CR 1 G 72 570.997803 360 9 NF 0 G 3 FF (*/) 90.0 577.824 T 0.6667 G 117.09 575.5 M 117.09 570.25 L 108 575.5 L 117.09 580.75 L F 432 575.5 M 117.09 575.5 L S 0 0 612 792 CR 0 G 3 FF (Not used by this pager) 108.0 567.665 T ([346]) 77.34 588.664 T (k) 108.0 588.664 T (ern_return_t ) 112.9 588.664 T 1 FF (memory_object_copy) 164.83 588.664 T 3 FF ( \(memory_object_t ) 256.47 588.664 T 4 FF (old_object) 335.35 588.664 T 3 FF (, ) 377.57 588.664 T (memory_object_control_t ) 162.0 598.664 T 4 FF (old_contr) 268.38 598.664 T (ol) 306.82 598.664 T 3 FF (, vm_address_t ) 314.6 598.664 T 4 FF (of) 377.65 598.664 T (fset) 385.25 598.664 T 3 FF (, ) 399.14 598.664 T (vm_size_t ) 162.0 608.664 T 4 FF (length) 205.61 608.664 T 3 FF (, memory_object_t) 230.61 608.664 T 4 FF ( ne) 306.16 608.664 T (w_object) 317.95 608.664 T 3 FF (\)) 354.06 608.664 T ([347]) 77.34 620.664 T ({) 108.0 620.664 T ([348]) 77.34 632.664 T (printf \(\322object_cop) 144.0 632.664 T (y\\n\323\);) 220.27 632.664 T ([349]) 77.34 644.664 T (return \(KERN_F) 144.0 644.664 T (AILURE\);) 210.75 644.664 T ([350]) 77.34 656.664 T (}) 108.0 656.664 T ([351]) 77.34 668.664 T (k) 108.0 668.664 T (ern_return_t ) 112.9 668.664 T 1 FF (memory_object_supply_completed) 164.83 668.664 T 3 FF ( \(memory_object_t ) 313.7 668.664 T 4 FF (object) 392.58 668.664 T 3 FF (, ) 417.02 668.664 T (memory_object_control_t ) 162.0 678.664 T 4 FF (contr) 268.38 678.664 T (ol) 289.04 678.664 T 3 FF (, vm_address_t ) 296.82 678.664 T 4 FF (of) 359.87 678.664 T (fset) 367.47 678.664 T 3 FF (, vm_size_t ) 381.36 678.664 T 4 FF (length) 162.0 688.664 T 3 FF (, k) 187.0 688.664 T (ern_return_t ) 196.9 688.664 T 4 FF (r) 248.83 688.664 T (esult) 252.35 688.664 T 3 FF (, vm_of) 271.24 688.664 T (fset_t ) 302.1 688.664 T 4 FF (err) 326.82 688.664 T (or_of) 338.591 688.664 T (fset) 360.081 688.664 T 3 FF (\)) 373.971 688.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 124 124 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (120 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([352]) 185.34 112.651 T ({) 216.0 112.651 T ([353]) 185.34 124.651 T (printf \(\322supply_completed\\n\323\);) 252.0 124.651 T ([354]) 185.34 136.651 T (return \(KERN_F) 252.0 136.651 T (AILURE\);) 318.75 136.651 T ([355]) 185.34 148.65 T (}) 216.0 148.65 T ([356]) 185.34 160.65 T (k) 216.0 160.65 T (ern_return_t ) 220.9 160.65 T 0 FF (memory_object_data_write) 272.83 160.65 T 3 FF ( \(memory_object_t ) 390.57 160.65 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (object) 469.45 160.65 T 3 FF (, ) 493.89 160.65 T (memory_object_control_t ) 270.0 170.65 T 4 FF (contr) 376.38 170.65 T (ol) 397.04 170.65 T 3 FF (, vm_address_t ) 404.82 170.65 T 4 FF (of) 467.87 170.65 T (fset) 475.47 170.65 T 3 FF (, pointer_t ) 489.36 170.65 T 4 FF (data) 270.0 180.65 T 3 FF (\)) 287.78 180.65 T ([357]) 185.34 192.65 T ({) 216.0 192.65 T ([358]) 185.34 204.65 T (printf \(\322data_write\\n\323\);) 252.0 204.65 T ([359]) 185.34 216.65 T (return \(KERN_F) 252.0 216.65 T (AILURE\);) 318.75 216.65 T ([360]) 185.34 228.65 T (}) 216.0 228.65 T ([361]) 185.34 240.65 T (k) 216.0 240.65 T (ern_return_t ) 220.9 240.65 T 0 FF (memory_object_change_completed) 272.83 240.65 T 3 FF ( \(memory_object_t ) 423.35 240.65 T 4 FF (object) 502.23 240.65 T 3 FF (, ) 526.67 240.65 T (boolean_t ) 270.0 250.65 T 4 FF (may_cac) 311.94 250.65 T (he) 347.33 250.65 T 3 FF (, boolean_t ) 356.77 250.65 T 4 FF (copy_str) 403.71 250.65 T (ate) 438.0 250.65 T (gy) 449.82 250.65 T 3 FF (\)) 459.26 250.65 T ([362]) 185.34 262.65 T ({) 216.0 262.65 T ([363]) 185.34 274.65 T (printf \(\322change_completed\323\);) 252.0 274.65 T ([364]) 185.34 286.65 T (return \(KERN_F) 252.0 286.65 T (AILURE\);) 318.75 286.65 T ([365]) 185.34 298.65 T (}) 216.0 298.65 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Ser) 180.0 327.983 T (v) 197.208 327.983 T (er Loop and Main Pr) 203.088 327.983 T (ogram) 311.544 327.983 T 180 337.98291 360 9 CR 1 G 180 337.98291 360 9 NF 0 G 3 FF (/*) 199.224 344.814 T 3 SL 0.6667 G 530.91 342.48 M 530.91 347.73 L 540 342.48 L 530.91 337.23 L F 530.91 342.48 M 216 342.48 L S 0 0 612 792 CR 0 G 3 FF 216 353.649536 M 0.997925 0 32 (De-mux routine for ) widthshow 0 FF 299.253784 353.649536 M 0.997925 0 32 (mach_msg_ser) widthshow 362.473846 353.649536 M 0.997925 0 32 (v) widthshow 367.373901 353.649536 M 0.997925 0 32 (er) widthshow 3 FF 375.704224 353.649536 M 0.997925 0 32 (. This allo) widthshow 417.730194 353.649536 M 0.997925 0 32 (ws us to splice tw) widthshow 492.731934 353.649536 M 0.997925 0 32 (o interf) widthshow 522.789917 353.649536 M 0.997925 0 32 (aces) widthshow 180 366.982788 360 9 CR 1 G 180 366.982788 360 9 NF 0 G 3 FF (*/) 198.0 373.809 T 0.6667 G 225.09 371.48 M 225.09 366.23 L 216 371.48 L 225.09 376.73 L F 540 371.48 M 225.09 371.48 L S 0 0 612 792 CR 0 G 3 FF (into ) 216.0 363.649 T 0 FF (mach_msg_ser) 234.06 363.649 T (v) 297.28 363.649 T (er) 302.18 363.649 T 3 FF ( \(\).) 311.06 363.649 T ([366]) 185.34 384.649 T (boolean_t ) 216.0 384.649 T 0 FF (netmem_demux) 257.94 384.649 T 3 FF ( \(mach_msg_header_t *) 326.26 384.649 T 4 FF (inmsg) 422.35 384.649 T 3 FF (, mach_msg_header_t ) 446.24 384.649 T (*) 270.0 394.649 T 4 FF (outmsg) 275.0 394.649 T 3 FF (\)) 303.89 394.649 T ([367]) 185.34 406.649 T ({) 216.0 406.649 T ([368]) 185.34 418.649 T (return \() 252.0 418.649 T 0 FF (netmem_msg_ser) 281.71 418.649 T (v) 356.03 418.649 T (er) 360.93 418.649 T 3 FF ( \() 369.81 418.649 T 4 FF (inmsg) 375.64 418.649 T 3 FF (, ) 399.53 418.649 T 4 FF (outmsg) 404.53 418.649 T 3 FF (\) || ) 433.42 418.649 T 0 FF (memory_object_ser) 306.0 428.649 T (v) 390.31 428.649 T (er) 395.21 428.649 T 3 FF ( \() 404.09 428.649 T 4 FF (inmsg) 409.92 428.649 T 3 FF (, ) 433.81 428.649 T 4 FF (outmsg) 438.81 428.649 T 3 FF (\)\);) 467.7 428.649 T ([369]) 185.34 440.649 T (}) 216.0 440.649 T 180 445.982422 360 9 CR 1 G 180 445.982422 360 9 NF 0 G 3 FF (/*) 199.224 452.814 T 0.6667 G 530.91 450.48 M 530.91 455.73 L 540 450.48 L 530.91 445.23 L F 530.91 450.48 M 216 450.48 L S 0 0 612 792 CR 0 G 3 FF 216 461.649048 M 1.453735 0 32 (Size of max message we\325) widthshow 322.955231 461.649048 M 1.453735 0 32 (re willing to recei) widthshow 397.886597 461.649048 M 1.453735 0 32 (v) widthshow 402.736664 461.649048 M 1.453735 0 32 (e or send. Ha) widthshow 459.65799 461.649048 M 1.453735 0 32 (v) widthshow 464.508057 461.649048 M 1.453735 0 32 (e to allo) widthshow 499.385681 461.649048 M 1.453735 0 32 (w enough) widthshow 216 471.648987 M 0.618439 0 32 (space for memory object messages from the k) widthshow 403.799133 471.648987 M 0.618439 0 32 (ernel. This number is on the high) widthshow 180 484.982239 360 9 CR 1 G 180 484.982239 360 9 NF 0 G 3 FF (*/) 198.0 491.809 T 0.6667 G 225.09 489.48 M 225.09 484.23 L 216 489.48 L 225.09 494.73 L F 540 489.48 M 225.09 489.48 L S 0 0 612 792 CR 0 G 3 FF (side.) 216.0 481.649 T ([370]) 185.34 502.649 T (#de\336ne NETMEM_MAX_MSG_SIZE) 216.0 502.649 T (512) 396.0 502.649 T 180 507.982178 360 9 CR 1 G 180 507.982178 360 9 NF 0 G 3 FF (/*) 199.224 514.813 T 0.6667 G 530.91 512.48 M 530.91 517.73 L 540 512.48 L 530.91 507.23 L F 530.91 512.48 M 216 512.48 L S 0 0 612 792 CR 0 G 3 FF 216 523.648804 M 0.251953 0 32 (Main routine: initialize and loop fore) widthshow 365.049927 523.648804 M 0.251953 0 32 (v) widthshow 369.899994 523.648804 M 0.251953 0 32 (er handling messages. Ignore error returns) widthshow 180 536.982056 360 9 CR 1 G 180 536.982056 360 9 NF 0 G 3 FF (*/) 198.0 543.808 T 0.6667 G 225.09 541.48 M 225.09 536.23 L 216 541.48 L 225.09 546.73 L F 540 541.48 M 225.09 541.48 L S 0 0 612 792 CR 0 G 3 FF (from ) 216.0 533.649 T 0 FF (mach_msg_ser) 237.94 533.649 T (v) 301.16 533.649 T (er) 306.06 533.649 T 3 FF (.) 314.39 533.649 T ([371]) 185.34 554.649 T 0 FF (main) 216.0 554.649 T 3 FF ( \(\)) 237.67 554.649 T ([372]) 185.34 566.649 T ({) 216.0 566.649 T ([373]) 185.34 578.649 T (\(v) 252.0 578.649 T (oid\) ) 260.13 578.649 T 0 FF (init) 278.74 578.649 T 3 FF ( \(\);) 293.19 578.649 T ([374]) 185.34 590.649 T (while \(1\)) 252.0 590.649 T ([375]) 185.34 602.648 T ({) 252.0 602.648 T ([376]) 185.34 614.648 T (\(v) 288.0 614.648 T (oid\) ) 296.13 614.648 T 0 FF (mach_msg_ser) 314.74 614.648 T (v) 377.96 614.648 T (er) 382.86 614.648 T 3 FF ( \() 391.74 614.648 T 0 FF (netmem_demux) 397.57 614.648 T 3 FF (, ) 465.89 614.648 T (NETMEM_MAX_MSG_SIZE, ) 342.0 624.648 T 4 FF (master_obj) 342.0 634.648 T 3 FF (.) 387.0 634.648 T 4 FF (object_port) 389.5 634.648 T 3 FF (\);) 435.61 634.648 T ([377]) 185.34 646.648 T (}) 252.0 646.648 T ([378]) 185.34 658.648 T (}) 216.0 658.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 125 125 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (121 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Simple Memory Manager Example) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Bold) 12 1 mymakefontmetric 3 FF (Sample Client) 72.0 116.0 T 72 125.999954 360 9 CR 1 G 72 125.999954 360 9 NF 0 G 4 (Times-Roman) 10 1 mymakefontmetric 4 FF (/*) 91.224 132.831 T 3 SL 0 SC 0.6667 G 422.91 130.5 M 422.91 135.75 L 432 130.5 L 422.91 125.25 L F 422.91 130.5 M 108 130.5 L S 0 0 612 792 CR 0 G 4 FF (File: ) 108.0 141.667 T 1 FF (netmem_client) 128.84 141.667 T 4 FF (.c) 191.6 141.667 T (Author: Da) 108.0 151.667 T (vid L. Black) 153.07 151.667 T 72 164.999771 360 9 CR 1 G 72 164.999771 360 9 NF 0 G 4 FF (*/) 90.0 171.826 T 0.6667 G 117.09 169.5 M 117.09 164.25 L 108 169.5 L 117.09 174.75 L F 432 169.5 M 117.09 169.5 L S 0 0 612 792 CR 0 G 4 FF (Simple client to demonstrate ) 108.0 161.666 T 1 FF (netmem) 225.22 161.666 T 4 FF ( serv) 259.65 161.666 T (er) 278.66 161.666 T (.) 285.88 161.666 T ([1]) 87.34 182.666 T (#include ) 108.0 182.666 T ([2]) 87.34 194.666 T (#include ) 108.0 194.666 T ([3]) 87.34 206.666 T (#include ) 167.09 206.666 T ([4]) 87.34 218.666 T (#include ) 108.0 218.666 T ([5]) 87.34 230.666 T (#include \322) 108.0 230.666 T 1 FF (netmem_defs) 149.38 230.666 T 4 FF (.h\323) 206.03 230.666 T ([6]) 87.34 242.666 T 1 FF (main) 108.0 242.666 T 4 FF ( \(\)) 129.67 242.666 T ([7]) 87.34 254.666 T ({) 108.0 254.666 T ([8]) 87.34 266.666 T (k) 144.0 266.666 T (ern_return_t) 148.9 266.666 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF (r) 288.0 266.666 T 4 FF (;) 291.89 266.666 T ([9]) 87.34 278.666 T (mach_port_t) 144.0 278.666 T 5 FF (server_port) 288.0 278.666 T 4 FF (;) 334.66 278.666 T ([10]) 82.34 290.666 T (vm_address_t) 144.0 290.666 T 5 FF (netmem_addr) 288.0 290.666 T (ess) 342.62 290.666 T 4 FF (;) 354.84 290.666 T ([11]) 82.34 302.666 T (r = ) 144.0 302.666 T 1 FF (netname_look_up) 157.97 302.666 T 4 FF ( \() 234.09 302.666 T 5 FF (name_server_port) 239.92 302.666 T 4 FF (, \322\322, NETMEM_N) 313.24 302.666 T (AME, ) 387.32 302.666 T (&) 198.0 312.666 T 5 FF (server_port) 205.78 312.666 T 4 FF (\);) 252.44 312.666 T ([12]) 82.34 324.666 T (if \() 144.0 324.666 T 5 FF (r) 155.94 324.666 T 4 FF ( != NETN) 159.83 324.666 T (AME_SUCCESS\)) 200.11 324.666 T ([13]) 82.34 336.666 T ({) 144.0 336.666 T ([14]) 82.34 348.666 T 1 FF (mach_err) 180.0 348.666 T (or) 221.47 348.666 T 4 FF ( \(\322Serv) 230.91 348.666 T (er Look Up\323, ) 259.36 348.666 T 5 FF (r) 314.9 348.666 T 4 FF (\);) 318.79 348.666 T ([15]) 82.34 360.665 T (e) 180.0 360.665 T (xit \(\3201\);) 184.29 360.665 T ([16]) 82.34 372.665 T (}) 144.0 372.665 T 72 377.998718 360 9 CR 1 G 72 377.998718 360 9 NF 0 G 4 FF (/*) 91.224 384.83 T 0.6667 G 422.91 382.5 M 422.91 387.75 L 432 382.5 L 422.91 377.25 L F 422.91 382.5 M 108 382.5 L S 72 396.998657 360 9 CR 1 G 72 396.998657 360 9 NF 0 G 4 FF (*/) 90.0 403.825 T 0.6667 G 117.09 401.5 M 117.09 396.25 L 108 401.5 L 117.09 406.75 L F 432 401.5 M 117.09 401.5 L S 0 0 612 792 CR 0 G 4 FF (Deliberately map in an e) 144.0 393.665 T (xtra page to e) 242.16 393.665 T (x) 296.16 393.665 T (ercise error path.) 301.01 393.665 T ([17]) 82.34 414.665 T 5 FF (netmem_addr) 144.0 414.665 T (ess) 198.62 414.665 T 4 FF ( = 0;) 210.84 414.665 T ([18]) 82.34 426.665 T 5 FF (r) 144.0 426.665 T 4 FF ( = ) 147.89 426.665 T 1 FF (vm_map) 158.53 426.665 T 4 FF ( \() 195.75 426.665 T 1 FF (mach_task_self) 201.58 426.665 T 4 FF ( \(\), &) 267.13 426.665 T 5 FF (netmem_addr) 289.07 426.665 T (ess) 343.69 426.665 T 4 FF (, 2 * ) 355.91 426.665 T (vm_page_size, 0, TR) 198.0 436.665 T (UE, ) 282.59 436.665 T 5 FF (server_port) 300.92 436.665 T 4 FF (, 0, F) 347.58 436.665 T (ALSE, ) 367.401 436.665 T (VM_PR) 198.0 446.665 T (O) 230.94 446.665 T (T_ALL, VM_PR) 237.76 446.665 T (O) 306.251 446.665 T (T_ALL, ) 313.071 446.665 T (VM_INHERIT_NONE\);) 198.0 456.665 T ([19]) 82.34 468.665 T (if \() 144.0 468.665 T 5 FF (r) 155.94 468.665 T 4 FF ( != KERN_SUCCESS\)) 159.83 468.665 T ([20]) 82.34 480.665 T ({) 144.0 480.665 T ([21]) 82.34 492.665 T 1 FF (mach_err) 180.0 492.665 T (or) 221.47 492.665 T 4 FF ( \(\322Object vm_map\323, ) 230.91 492.665 T 5 FF (r) 314.78 492.665 T 4 FF (\);) 318.67 492.665 T ([22]) 82.34 504.665 T (e) 180.0 504.665 T (xit \(\3201\);) 184.29 504.665 T ([23]) 82.34 516.665 T (}) 144.0 516.665 T ([24]) 82.34 528.665 T (printf \(\322Mapped at 0x%x\\n\323, ) 144.0 528.665 T 5 FF (netmem_addr) 262.03 528.665 T (ess) 316.65 528.665 T 4 FF (\);) 328.87 528.665 T 72 533.997986 360 9 CR 1 G 72 533.997986 360 9 NF 0 G 4 FF (/*) 91.224 540.829 T 0.6667 G 422.91 538.5 M 422.91 543.75 L 432 538.5 L 422.91 533.25 L F 422.91 538.5 M 108 538.5 L S 0 0 612 792 CR 0 G 4 FF (Simple command format:) 144.0 549.665 T (Letter of) 144.0 559.665 T (fset data) 178.46 559.665 T (Letter: p[ut], g[et], r[ead], w[rite]) 144.0 569.665 T 72 582.997742 360 9 CR 1 G 72 582.997742 360 9 NF 0 G 4 FF (*/) 90.0 589.824 T 0.6667 G 117.09 587.5 M 117.09 582.25 L 108 587.5 L 117.09 592.75 L F 432 587.5 M 117.09 587.5 L S 0 0 612 792 CR 0 G 4 FF (put and get are messages, read and write are memory) 144.0 579.664 T (.) 355.51 579.664 T ([25]) 82.34 600.664 T (printf \(\322Serv) 144.0 600.664 T (er contacted. pgrw = put/get/read/write x = e) 194.67 600.664 T (xit\\n\323\);) 372.98 600.664 T ([26]) 82.34 612.664 T (for \(;;\)) 144.0 612.664 T ([27]) 82.34 624.664 T ({) 144.0 624.664 T ([28]) 82.34 636.664 T (char) 180.0 636.664 T 5 FF (cmd) 288.0 636.664 T 4 FF (;) 304.66 636.664 T ([29]) 82.34 648.664 T (int) 180.0 648.664 T 5 FF (c) 288.0 648.664 T 4 FF (, ) 292.44 648.664 T 5 FF (of) 297.44 648.664 T (fset) 305.04 648.664 T 4 FF (, ) 318.93 648.664 T 5 FF (data) 323.93 648.664 T 4 FF (;) 341.71 648.664 T ([30]) 82.34 660.664 T (printf \(\322pgrw> \323\);) 180.0 660.664 T ([31]) 82.34 672.664 T (scanf \(\322%c %d\323, &) 180.0 672.664 T 5 FF (cmd) 257.19 672.664 T 4 FF (, &) 273.85 672.664 T 5 FF (of) 286.63 672.664 T (fset) 294.23 672.664 T 4 FF (\);) 308.12 672.664 T ([32]) 82.34 684.664 T (switch \() 180.0 684.664 T 5 FF (cmd) 211.94 684.664 T 4 FF (\)) 228.6 684.664 T ([33]) 82.34 696.664 T ({) 180.0 696.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 126 126 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (122 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([34]) 190.34 112.651 T (case \324p\325:) 288.0 112.651 T ([35]) 190.34 124.651 T (scanf \(\322%d\323, &) 324.0 124.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (data) 385.92 124.651 T 3 FF (\);) 403.7 124.651 T ([36]) 190.34 136.651 T (printf \(\322put %d = %d\323, ) 324.0 136.651 T 4 FF (of) 418.51 136.651 T (fset) 426.11 136.651 T 3 FF (, ) 440.0 136.651 T 4 FF (data) 445.0 136.651 T 3 FF (\);) 462.78 136.651 T ([37]) 190.34 148.65 T 4 FF (r) 324.0 148.65 T 3 FF ( = ) 327.89 148.65 T 0 FF (netmem_write) 338.53 148.65 T 3 FF ( \() 400.17 148.65 T 4 FF (server_port) 406.0 148.65 T 3 FF (, ) 452.66 148.65 T 4 FF (of) 457.66 148.65 T (fset) 465.26 148.65 T 3 FF (, ) 479.15 148.65 T 4 FF (data) 484.15 148.65 T 3 FF (\);) 501.93 148.65 T ([38]) 190.34 160.65 T (printf \(\322 result %d\\n\323, ) 324.0 160.65 T 4 FF (r) 414.26 160.65 T 3 FF (\);) 418.15 160.65 T ([39]) 190.34 172.65 T (break;) 324.0 172.65 T ([40]) 190.34 184.65 T (case \324g\325:) 288.0 184.65 T ([41]) 190.34 196.65 T (printf \(\322get %d\323, ) 324.0 196.65 T 4 FF (of) 393.98 196.65 T (fset) 401.58 196.65 T 3 FF (\);) 415.47 196.65 T ([42]) 190.34 208.65 T 4 FF (r) 324.0 208.65 T 3 FF ( = ) 327.89 208.65 T 0 FF (netmem_r) 338.53 208.65 T (ead) 382.22 208.65 T 3 FF ( \() 397.22 208.65 T 4 FF (server_port) 403.05 208.65 T 3 FF (, ) 449.71 208.65 T 4 FF (of) 454.71 208.65 T (fset) 462.31 208.65 T 3 FF (, &) 476.2 208.65 T 4 FF (data) 488.98 208.65 T 3 FF (\);) 506.76 208.65 T ([43]) 190.34 220.65 T (printf \(\322 = %d result %d\\n\323, ) 324.0 220.65 T 4 FF (data) 438.23 220.65 T 3 FF (, ) 456.01 220.65 T 4 FF (r) 461.01 220.65 T 3 FF (\);) 464.9 220.65 T ([44]) 190.34 232.65 T (break;) 324.0 232.65 T ([45]) 190.34 244.65 T (case \324r\325:) 288.0 244.65 T ([46]) 190.34 256.65 T 4 FF (data) 324.0 256.65 T 3 FF ( = * \(\(\(int *\) ) 341.78 256.65 T 4 FF (netmem_addr) 393.8 256.65 T (ess) 448.42 256.65 T 3 FF (\) + ) 460.64 256.65 T 4 FF (of) 474.61 256.65 T (fset) 482.21 256.65 T 3 FF (\);) 496.1 256.65 T ([47]) 190.34 268.65 T (printf \(\322read %d = %d\\n\323, ) 324.0 268.65 T 4 FF (of) 430.72 268.65 T (fset) 438.32 268.65 T 3 FF (, ) 452.21 268.65 T 4 FF (data) 457.21 268.65 T 3 FF (\);) 474.99 268.65 T ([48]) 190.34 280.65 T (break;) 324.0 280.65 T ([49]) 190.34 292.65 T (case \324w\325:) 288.0 292.65 T ([50]) 190.34 304.65 T (scanf \(\322%d\323, &) 324.0 304.65 T 4 FF (data) 385.92 304.65 T 3 FF (\);) 403.7 304.65 T ([51]) 190.34 316.65 T (* \(\(\(int *\)) 324.0 316.65 T 4 FF (netmem_addr) 362.88 316.65 T (ess) 417.5 316.65 T 3 FF (\) + ) 429.72 316.65 T 4 FF (of) 443.69 316.65 T (fset) 451.29 316.65 T 3 FF (\) = ) 465.18 316.65 T 4 FF (data) 479.15 316.65 T 3 FF (;) 496.93 316.65 T ([52]) 190.34 328.65 T (printf \(\322write %d = %d\\n\323, ) 324.0 328.65 T 4 FF (of) 434.06 328.65 T (fset) 441.66 328.65 T 3 FF (, ) 455.55 328.65 T 4 FF (data) 460.55 328.65 T 3 FF (\);) 478.33 328.65 T ([53]) 190.34 340.649 T (break;) 324.0 340.649 T ([54]) 190.34 352.649 T (case \324x\325:) 288.0 352.649 T ([55]) 190.34 364.649 T (e) 324.0 364.649 T (xit \(1\);) 328.29 364.649 T ([56]) 190.34 376.649 T (def) 288.0 376.649 T (ault:) 300.67 376.649 T ([57]) 190.34 388.649 T (printf \(\322???\\n\323\);) 324.0 388.649 T ([58]) 190.34 400.649 T (}) 288.0 400.649 T ([59]) 190.34 412.649 T (while \(\() 288.0 412.649 T 4 FF (c) 319.38 412.649 T 3 FF ( = getc \(stdin\)\) != \324\\n\325\);) 323.82 412.649 T ([60]) 190.34 424.649 T (}) 252.0 424.649 T 180 429.982361 360 9 CR 1 G 180 429.982361 360 9 NF 0 G 3 FF (/*) 198.0 436.814 T 3 SL 0.6667 G 530.91 434.48 M 530.91 439.73 L 540 434.48 L 530.91 429.23 L F 530.91 434.48 M 396 434.48 L S 180 448.9823 360 9 CR 1 G 180 448.9823 360 9 NF 0 G 3 FF (*/) 198.0 455.809 T 0.6667 G 405.09 453.48 M 405.09 448.23 L 396 453.48 L 405.09 458.73 L F 540 453.48 M 405.09 453.48 L S 0 0 612 792 CR 0 G 3 FF (NO) 396.0 445.649 T (TREA) 410.04 445.649 T (CHED) 435.75 445.649 T ([61]) 190.34 466.649 T (}) 216.0 466.649 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Mak) 180.0 495.982 T (e\336le) 203.88 495.982 T 180 505.982178 360 9 CR 1 G 180 505.982178 360 9 NF 0 G 3 FF (/*) 199.224 512.813 T 0.6667 G 530.91 510.48 M 530.91 515.73 L 540 510.48 L 530.91 505.23 L F 530.91 510.48 M 216 510.48 L S 0 0 612 792 CR 0 G 3 FF (File: ) 216.0 521.649 T 0 FF (Mak) 236.84 521.649 T (e\336le) 256.74 521.649 T 3 FF (Author: Da) 216.0 531.649 T (vid L. Black) 261.07 531.649 T 216 541.648682 M 1.28894 0 32 (Mak) widthshow 234.230057 541.648682 M 1.28894 0 32 (e\336le for ) widthshow 0 FF 270.687927 541.648682 M 1.28894 0 32 (netmem) widthshow 3 FF 305.11795 541.648682 M 1.28894 0 32 ( e) widthshow 313.19696 541.648682 M 1.28894 0 32 (xample. A) widthshow 355.406311 541.648682 M 1.28894 0 32 (v) widthshow 360.206421 541.648682 M 1.28894 0 32 (oids use of mak) widthshow 427.023315 541.648682 M 1.28894 0 32 (e features for clarity) widthshow 511.040527 541.648682 M 1.28894 0 32 (. Mak) widthshow 535.559509 541.648682 M 1.28894 0 32 (e) widthshow 180 554.981934 360 9 CR 1 G 180 554.981934 360 9 NF 0 G 3 FF (*/) 198.0 561.808 T 0.6667 G 225.09 559.48 M 225.09 554.23 L 216 559.48 L 225.09 564.73 L F 540 559.48 M 225.09 559.48 L S 0 0 612 792 CR 0 G 3 FF (kno) 216.0 551.649 T (ws ho) 230.75 551.649 T (w to mak) 254.11 551.649 T (e foo.o from foo.c \(cc \320c\).) 291.23 551.649 T ([1]) 195.34 572.649 T (all: ) 216.0 572.649 T 0 FF (netmem_client) 231.28 572.649 T 3 FF ( ) 294.04 572.649 T 0 FF (netmem_pager) 296.54 572.649 T 3 FF ([2]) 195.34 584.649 T 0 FF (netmem_pager) 216.0 584.649 T 3 FF (:) 279.87 584.649 T 0 FF ( netmem_msg_ser) 282.65 584.649 T (v) 359.47 584.649 T (er) 364.37 584.649 T 3 FF (.o ) 372.7 584.649 T 0 FF (netmem_pager) 382.7 584.649 T 3 FF (.o) 446.021 584.649 T 0 FF ( ) 453.521 584.649 T (netmem_msg_r) 270.0 594.648 T (eply_user) 335.91 594.648 T 3 FF (.o) 376.47 594.648 T ([3]) 195.34 606.648 T (cc \320o ) 252.0 606.648 T 0 FF (netmem_pager) 275.88 606.648 T 3 FF ( ) 339.75 606.648 T 0 FF (netmem_msg_ser) 342.25 606.648 T (v) 416.57 606.648 T (er) 421.47 606.648 T 3 FF (.o) 429.8 606.648 T 0 FF ( ) 437.3 606.648 T (netmem_msg_r) 306.0 616.648 T (eply_user) 371.91 616.648 T 3 FF (.o ) 412.47 616.648 T 0 FF (netmem_pager) 422.47 616.648 T 3 FF (.o \320lmach ) 485.791 616.648 T ([4]) 195.34 628.648 T 0 FF (netmem_pager) 216.0 628.648 T 3 FF (.o:) 279.32 628.648 T 0 FF ( netmem_msg) 289.6 628.648 T 3 FF (.h ) 348.75 628.648 T 0 FF (netmem_defs) 358.75 628.648 T 3 FF (.h ) 415.4 628.648 T 0 FF (netmem_obj) 425.4 628.648 T 3 FF (.h ) 478.72 628.648 T 0 FF (netmem_pager) 270.0 638.648 T 3 FF (.c ) 333.32 638.648 T 0 FF (netmem_msg_r) 342.76 638.648 T (eply) 408.67 638.648 T 3 FF (.h) 425.801 638.648 T ([5]) 195.34 650.648 T (cc \320c ) 252.0 650.648 T 0 FF (netmem_pager) 275.32 650.648 T 3 FF (.c) 338.64 650.648 T ([6]) 195.34 662.648 T 0 FF (netmem_client) 216.0 662.648 T 3 FF (:) 278.76 662.648 T 0 FF ( netmem_msg_user) 281.54 662.648 T 3 FF (.o ) 363.47 662.648 T 0 FF (netmem_client) 373.47 662.648 T 3 FF (.o) 436.23 662.648 T ([7]) 195.34 674.648 T (cc \320o ) 252.0 674.648 T 0 FF (netmem_client) 275.88 674.648 T 3 FF ( ) 338.64 674.648 T 0 FF (netmem_msg_user) 341.14 674.648 T 3 FF (.o ) 420.57 674.648 T 0 FF (netmem_client) 430.57 674.648 T 3 FF (.o \320lmach) 493.33 674.648 T ([8]) 195.34 686.648 T 0 FF (netmem_client) 216.0 686.648 T 3 FF (.o:) 278.76 686.648 T 0 FF ( netmem_msg) 289.04 686.648 T 3 FF (.h ) 348.19 686.648 T 0 FF (netmem_defs) 358.19 686.648 T 3 FF (.h ) 414.84 686.648 T 0 FF (netmem_client) 424.84 686.648 T 3 FF (.c) 487.6 686.648 T ([9]) 195.34 698.648 T (cc \320c ) 252.0 698.648 T 0 FF (netmem_client) 275.32 698.648 T 3 FF (.c) 338.08 698.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 127 127 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (123 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Simple Memory Manager Example) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([10]) 82.34 114.667 T 1 FF (netmem_msg_ser) 108.0 114.667 T (v) 182.32 114.667 T (er) 187.22 114.667 T 3 FF (.c ) 195.55 114.667 T 1 FF (netmem_msg_user) 204.99 114.667 T 3 FF (.c ) 284.421 114.667 T 1 FF (netmem_msg) 293.861 114.667 T 3 FF (.h:) 350.511 114.667 T 1 FF ( ) 360.791 114.667 T (netmem_msg) 162.0 124.667 T 3 FF (.defs) 218.65 124.667 T ([11]) 82.34 136.667 T (mig \320serv) 144.0 136.667 T (er ) 183.57 136.667 T 1 FF (netmem_msg_ser) 193.84 136.667 T (v) 268.16 136.667 T (er) 273.06 136.667 T 3 FF (.c \320user ) 281.391 136.667 T 1 FF (netmem_msg_user) 314.991 136.667 T 3 FF (.c ) 394.421 136.667 T 1 FF (netmem_msg) 198.0 146.666 T 3 FF (.defs) 254.65 146.666 T ([12]) 82.34 158.666 T 1 FF (netmem_msg_r) 108.0 158.666 T (eply) 173.91 158.666 T 3 FF (.h ) 191.04 158.666 T 1 FF (netmem_msg_r) 201.04 158.666 T (eply_user) 266.951 158.666 T 3 FF (.c:) 307.511 158.666 T 1 FF ( netmem_msg_r) 317.231 158.666 T (eply) 385.641 158.666 T 3 FF (.defs) 402.771 158.666 T ([13]) 82.34 170.666 T (mig \320user ) 144.0 170.666 T 1 FF (netmem_msg_r) 186.22 170.666 T (eply_user) 252.13 170.666 T 3 FF (.c \320serv) 292.69 170.666 T (er /de) 323.641 170.666 T (v/null ) 345.881 170.666 T 1 FF (netmem_msg_r) 198.0 180.666 T (eply) 263.91 180.666 T 3 FF (.defs) 281.04 180.666 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (Sample Output) 72.0 210.0 T 3 FF 72 226.666153 M 1.13121 0 32 (Start the pager and the client. \(The pager must be gi) widthshow 290.522278 226.666153 M 1.13121 0 32 (v) widthshow 295.372345 226.666153 M 1.13121 0 32 (en time to re) widthshow 348.886047 226.666153 M 1.13121 0 32 (gister itself with the) widthshow (name serv) 72.0 238.666 T (er) 112.67 238.666 T (, so it is started \336rst.\)) 120.04 238.666 T ([1]) 87.34 256.666 T (> ) 108.0 256.666 T 1 FF (netmem_client) 116.14 256.666 T 3 FF (> ) 288.0 256.666 T 1 FF (netmem_pager) 296.14 256.666 T 3 FF ([2]) 87.34 268.666 T (Mapped at 0x1d000) 108.0 268.666 T (init) 288.0 268.666 T ([3]) 87.34 280.666 T (ready) 288.0 280.666 T ([4]) 87.34 292.666 T (Serv) 108.0 292.666 T (er contacted. pgrw = put/get/read/write x = e) 126.18 292.666 T (xit) 304.49 292.666 T 1 FF (netmem_write) 72.0 314.666 T 3 FF (. P) 133.64 314.666 T (age e) 144.05 314.666 T (xists only in the manager) 164.72 314.666 T (.) 264.72 314.666 T ([5]) 87.34 332.666 T (pgrw> p 0 10) 108.0 332.666 T (write) 288.0 332.666 T ([6]) 87.34 344.666 T (put 0 = 10 result 0) 108.0 344.666 T 1 FF (netmem_r) 72.0 366.666 T (ead) 115.69 366.666 T 3 FF (. P) 130.69 366.666 T (age still only in the manager) 141.1 366.666 T (.) 254.15 366.666 T ([7]) 87.34 384.666 T (pgrw> g 0) 108.0 384.666 T (read) 288.0 384.666 T ([8]) 87.34 396.665 T (get 0 = 10 result 0) 108.0 396.665 T 72 418.665405 M 0.842392 0 32 (T) widthshow 77.31044 418.665405 M 0.842392 0 32 (ouch page. K) widthshow 131.78537 418.665405 M 0.842392 0 32 (ernel requests read-only cop) widthshow 247.23262 418.665405 M 0.842392 0 32 (y of page. Manager pro) widthshow 344.032288 418.665405 M 0.842392 0 32 (vides page. Both k) widthshow 420.899536 418.665405 M 0.842392 0 32 (er-) widthshow (nel and manager ha) 72.0 430.665 T (v) 149.83 430.665 T (e current cop) 154.68 430.665 T (y) 206.78 430.665 T (.) 211.131 430.665 T ([9]) 87.34 448.665 T (pgrw> r 0) 108.0 448.665 T (data_request 1) 288.0 448.665 T ([10]) 82.34 460.665 T (data_supply: lock 2) 288.0 460.665 T ([11]) 82.34 472.665 T (read 0 = 10) 108.0 472.665 T 1 FF (netmem_r) 72.0 494.665 T (ead) 115.69 494.665 T 3 FF (. Manager can directly reply since it has a current cop) 130.69 494.665 T (y) 345.25 494.665 T (.) 349.601 494.665 T ([12]) 82.34 512.665 T (pgrw> g 0) 108.0 512.665 T (read) 288.0 512.665 T ([13]) 82.34 524.665 T (get 0 = 10 result 0) 108.0 524.665 T 72 546.664917 M 0.559189 0 32 (Modify page. K) widthshow 136.468521 546.664917 M 0.559189 0 32 (ernel asks manager for write access. Write access granted. No) widthshow 388.661407 546.664917 M 0.559189 0 32 (w only the) widthshow (k) 72.0 558.665 T (ernel has a current cop) 76.9 558.665 T (y) 167.32 558.665 T (.) 171.67 558.665 T ([14]) 82.34 576.665 T (pgrw> w 1 20) 108.0 576.665 T (data_unlock 3) 288.0 576.665 T ([15]) 82.34 588.665 T (lock_request: lock 0) 288.0 588.665 T ([16]) 82.34 600.665 T (write 1 = 20) 108.0 600.665 T (T) 72.0 622.665 T (ouch page.) 77.31 622.665 T ([17]) 82.34 640.665 T (pgrw> r 1) 108.0 640.665 T ([18]) 82.34 652.665 T (read 1 = 20) 108.0 652.665 T 1 FF 72 674.664429 M 0.406067 0 32 (netmem_r) widthshow 115.690109 674.664429 M 0.406067 0 32 (ead) widthshow 3 FF 130.690109 674.664429 M 0.406067 0 32 (. Manager must ask k) widthshow 218.034439 674.664429 M 0.406067 0 32 (ernel for current cop) widthshow 301.062714 674.664429 M 0.406067 0 32 (y) widthshow 305.413086 674.664429 M 0.406067 0 32 (. Since the manager is only go-) widthshow 72 686.664368 M 0.362045 0 32 (ing to read the page, it does not ask the k) widthshow 239.110519 686.664368 M 0.362045 0 32 (ernel to \337ush its cop) widthshow 321.568756 686.664368 M 0.362045 0 32 (y) widthshow 325.919128 686.664368 M 0.362045 0 32 (, merely pro) widthshow 375.093292 686.664368 M 0.362045 0 32 (vide it and re-) widthshow (mo) 72.0 698.664 T (v) 84.63 698.664 T (e write access.) 89.48 698.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 128 128 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (124 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ([19]) 190.34 112.651 T (pgrw> g 1) 216.0 112.651 T (read) 396.0 112.651 T ([20]) 190.34 124.651 T (lock_request: clean, lock 2) 396.0 124.651 T ([21]) 190.34 136.651 T (data_return) 396.0 136.651 T ([22]) 190.34 148.65 T (lock_completed) 396.0 148.65 T (Pending read done and reply generated.) 180.0 170.65 T ([23]) 190.34 188.65 T (read) 396.0 188.65 T ([24]) 190.34 200.65 T (read_reply) 396.0 200.65 T ([25]) 190.34 212.65 T (get 1 = 20 result 0) 216.0 212.65 T 0 FF 180 234.650146 M 1.479263 0 32 (netmem_write) widthshow 3 FF 241.640015 234.650146 M 1.479263 0 32 (. Since the manager will modify the page, it must ask the k) widthshow 494.27124 234.650146 M 1.479263 0 32 (ernel to no) widthshow (longer ha) 180.0 246.65 T (v) 217.29 246.65 T (e a cop) 222.14 246.65 T (y) 250.36 246.65 T (.) 254.711 246.65 T ([26]) 190.34 264.65 T (pgrw> p 2 30) 216.0 264.65 T (write) 396.0 264.65 T ([27]) 190.34 276.65 T (lock_request: clean, \337ush, lock 7) 396.0 276.65 T ([28]) 190.34 288.65 T (lock_completed) 396.0 288.65 T (Pending write done here and reply generated.) 180.0 310.65 T ([29]) 190.34 328.65 T (write) 396.0 328.65 T ([30]) 190.34 340.65 T (write_reply) 396.0 340.65 T ([31]) 190.34 352.65 T (put 2 = 30 result 0) 216.0 352.65 T (Modify page. K) 180.0 374.65 T (ernel asks manager for page with write access.) 243.35 374.65 T ([32]) 190.34 392.65 T (pgrw> w 3 40) 216.0 392.65 T (data_request 3) 396.0 392.65 T ([33]) 190.34 404.649 T (data_supply: lock 0) 396.0 404.649 T ([34]) 190.34 416.649 T (write 3 = 40) 216.0 416.649 T 0 FF 180 438.649353 M 1.479263 0 32 (netmem_write) widthshow 3 FF 241.640015 438.649353 M 1.479263 0 32 (. Since the manager will modify the page, it must ask the k) widthshow 494.27124 438.649353 M 1.479263 0 32 (ernel to no) widthshow (longer ha) 180.0 450.649 T (v) 217.29 450.649 T (e a cop) 222.14 450.649 T (y) 250.36 450.649 T (. Here a full \337ush is necessary) 254.711 450.649 T (.) 374.311 450.649 T ([35]) 190.34 468.649 T (pgrw> p 4 50) 216.0 468.649 T (write) 396.0 468.649 T ([36]) 190.34 480.649 T (lock_request: clean, \337ush, lock 7) 396.0 480.649 T ([37]) 190.34 492.649 T (data_return) 396.0 492.649 T ([38]) 190.34 504.649 T (lock_completed) 396.0 504.649 T (Pending write done here.) 180.0 526.649 T ([39]) 190.34 544.649 T (write) 396.0 544.649 T ([40]) 190.34 556.649 T (write_reply) 396.0 556.649 T ([41]) 190.34 568.649 T (put 4 = 50 result 0) 216.0 568.649 T (Exit client. This will also send ) 180.0 590.649 T 0 FF (memory_object_terminate) 304.17 590.649 T 3 FF ( to the manager) 417.46 590.649 T (.) 478.84 590.649 T ([42]) 190.34 608.649 T (pgrw> x 0) 216.0 608.649 T (terminate) 396.0 608.649 T (Start client ag) 180.0 630.649 T (ain.) 235.5 630.649 T ([43]) 190.34 648.649 T (> ) 216.0 648.649 T 0 FF (netmem_client) 224.14 648.649 T 3 FF ([44]) 190.34 660.648 T (Mapped at 0x1d000) 216.0 660.648 T (init) 396.0 660.648 T ([45]) 190.34 672.648 T (ready) 396.0 672.648 T ([46]) 190.34 684.648 T (Serv) 216.0 684.648 T (er contacted. pgrw = put/get/...) 234.18 684.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 129 129 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (125 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Object Cache) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 1 FF (netmem_r) 72.0 114.667 T (ead) 115.69 114.667 T 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (. Notice that the serv) 130.69 114.667 T (er preserv) 213.58 114.667 T (ed the page.) 253.13 114.667 T ([47]) 82.34 132.667 T (pgrw> g 3) 108.0 132.667 T (read) 288.0 132.667 T ([48]) 82.34 144.667 T (get 3 = 40 result 0) 108.0 144.667 T (T) 72.0 166.666 T (ouch page. K) 77.31 166.666 T (ernel requests read-only cop) 130.101 166.666 T (y) 243.021 166.666 T (.) 247.371 166.666 T ([49]) 82.34 184.666 T (pgrw> r 4) 108.0 184.666 T (data_request 1) 288.0 184.666 T ([50]) 82.34 196.666 T (data_supply: lock 2) 288.0 196.666 T ([51]) 82.34 208.666 T (read 4 = 50) 108.0 208.666 T (Modify page. K) 72.0 230.666 T (ernel asks manager for write access.) 135.35 230.666 T ([52]) 82.34 248.666 T (pgrw> w 5 60) 108.0 248.666 T (data_unlock 3) 288.0 248.666 T ([53]) 82.34 260.666 T (lock_request: lock 0) 288.0 260.666 T ([54]) 82.34 272.666 T (write 5 = 60) 108.0 272.666 T 72 294.665955 M 0.376053 0 32 (T) widthshow 77.31044 294.665955 M 0.376053 0 32 (ouch data within mapped windo) widthshow 206.884796 294.665955 M 0.376053 0 32 (w size b) widthshow 240.207016 294.665955 M 0.376053 0 32 (ut be) widthshow 260.153137 294.665955 M 0.376053 0 32 (yond memory object size. The k) widthshow 390.803467 294.665955 M 0.376053 0 32 (ernel does) widthshow 72 306.665894 M 0.666611 0 32 (not kno) widthshow 102.696747 306.665894 M 0.666611 0 32 (w that this is an error) widthshow 190.190109 306.665894 M 0.666611 0 32 (. The manager replies with ) widthshow 1 FF 302.943176 306.665894 M 0.666611 0 32 (memory_object_data_err) widthshow 411.613281 306.665894 M 0.666611 0 32 (or) widthshow 3 FF 421.053284 306.665894 M 0.666611 0 32 ( to) widthshow (say that the page doesn\325) 72.0 318.666 T (t e) 167.91 318.666 T (xist.) 177.48 318.666 T ([55]) 82.34 336.666 T (pgrw> r 1200) 108.0 336.666 T (data_request 1) 288.0 336.666 T ([56]) 82.34 348.666 T (data_error) 288.0 348.666 T 72 370.665649 M 0.789948 0 32 (The client tak) widthshow 128.469955 370.665649 M 0.789948 0 32 (es a memory error as a result. Its termination un-maps the \(only\) windo) widthshow 422.929504 370.665649 M 0.789948 0 32 (w) widthshow 429.499847 370.665649 M 0.789948 0 32 (,) widthshow (which sends a ) 72.0 382.666 T 1 FF (memory_object_terminate) 130.6 382.666 T 3 FF ( message to the manager) 243.89 382.666 T (.) 341.65 382.666 T ([57]) 82.34 400.666 T (Bus error \(core dumped\)) 108.0 400.666 T (data_return) 288.0 400.666 T ([58]) 82.34 412.665 T (terminate) 288.0 412.665 T 72 452.998718 360 3.024002 CR 432 454.51 M 72 454.51 L S 0 0 612 792 CR 4 (Times-Bold) 14 1 mymakefontmetric 4 FF (Object Cache) 72.0 448.332 T 3 FF 72 472.689331 M 0.666656 0 32 (The Mach k) widthshow 121.553375 472.689331 M 0.666656 0 32 (ernel, through its memory cache object, maintains a ph) widthshow 346.246674 472.689331 M 0.666656 0 32 (ysical memory cache) widthshow 72 484.68927 M 1.938629 0 32 (of pages for a gi) widthshow 144.484665 484.68927 M 1.938629 0 32 (v) widthshow 149.334747 484.68927 M 1.938629 0 32 (en memory object. The contents of this cache v) widthshow 353.723938 484.68927 M 1.938629 0 32 (aries o) widthshow 381.892639 484.68927 M 1.938629 0 32 (v) widthshow 386.742737 484.68927 M 1.938629 0 32 (er time, of) widthshow 72 496.689209 M 0.301849 0 32 (course, b) widthshow 108.201965 496.689209 M 0.301849 0 32 (ut the cache e) widthshow 163.657608 496.689209 M 0.301849 0 32 (xists as long as does the memory object. This is normally until the) widthshow (last user of the object un-maps it.) 72.0 508.689 T 72 532.689087 M 0.762405 0 32 (V) widthshow 78.110611 532.689087 M 0.762405 0 32 (arious objects \(such as e) widthshow 178.210327 532.689087 M 0.762405 0 32 (x) widthshow 183.06041 532.689087 M 0.762405 0 32 (ecutable \336les and \336les that are read as soon as the) widthshow 388.824585 532.689087 M 0.762405 0 32 (y are writ-) widthshow 72 544.689026 M 1.342239 0 32 (ten\) w) widthshow 98.512299 544.689026 M 1.342239 0 32 (ould bene\336t from being kno) widthshow 215.291397 544.689026 M 1.342239 0 32 (wn to the k) widthshow 263.938171 544.689026 M 1.342239 0 32 (ernel e) widthshow 291.960571 544.689026 M 1.342239 0 32 (v) widthshow 296.810638 544.689026 M 1.342239 0 32 (en though the) widthshow 353.785217 544.689026 M 1.342239 0 32 (y \(temporarily\) are) widthshow 72 556.688965 M 0.290634 0 32 (not mapped by an) widthshow 144.10199 556.688965 M 0.290634 0 32 (y task. This beha) widthshow 212.544006 556.688965 M 0.290634 0 32 (vior can be achie) widthshow 281.196045 556.688965 M 0.290634 0 32 (v) widthshow 286.046143 556.688965 M 0.290634 0 32 (ed with the cacheability attrib) widthshow 405.878784 556.688965 M 0.290634 0 32 (ute set) widthshow (via ) 72.0 568.689 T 1 FF (memory_object_change_attrib) 86.72 568.689 T (utes) 217.6 568.689 T 3 FF (.) 234.82 568.689 T 72 592.688843 M 0.488388 0 32 (Objects mark) widthshow 125.988449 592.688843 M 0.488388 0 32 (ed as cacheable in this w) widthshow 227.470459 592.688843 M 0.488388 0 32 (ay are not af) widthshow 278.385773 592.688843 M 0.488388 0 32 (fected during normal operation. Ho) widthshow 421.449463 592.688843 M 0.488388 0 32 (w-) widthshow 72 604.688782 M 0.580551 0 32 (e) widthshow 76.19014 604.688782 M 0.580551 0 32 (v) widthshow 81.040222 604.688782 M 0.580551 0 32 (er) widthshow 88.410446 604.688782 M 0.580551 0 32 (, when the last task un-maps then, the) widthshow 242.584396 604.688782 M 0.580551 0 32 (y are k) widthshow 270.85556 604.688782 M 0.580551 0 32 (ept in a \(small\) k) widthshow 340.847839 604.688782 M 0.580551 0 32 (ernel cache of objects,) widthshow 72 616.688721 M 1.453049 0 32 (thereby preserving their ph) widthshow 184.339188 616.688721 M 1.453049 0 32 (ysical cache contents \(to the e) widthshow 311.144531 616.688721 M 1.453049 0 32 (xtent that their pages are not) widthshow 72 628.68866 M 0.122833 0 32 (e) widthshow 76.19014 628.68866 M 0.122833 0 32 (victed via normal system paging acti) widthshow 223.484451 628.68866 M 0.122833 0 32 (vity\). When a task does map them ag) widthshow 372.604309 628.68866 M 0.122833 0 32 (ain, no ) widthshow 1 FF 402.570007 628.68866 M 0.122833 0 32 (memo-) widthshow 72 640.688599 M 0.399933 0 32 (ry_object_init) widthshow 3 FF 131.990005 640.688599 M 0.399933 0 32 ( message will be sent to the manager) widthshow 281.309753 640.688599 M 0.399933 0 32 (, since the) widthshow 322.229736 640.688599 M 0.399933 0 32 (y were ne) widthshow 361.649719 640.688599 M 0.399933 0 32 (v) widthshow 366.499817 640.688599 M 0.399933 0 32 (er terminated. If) widthshow 72 652.688538 M 0.260696 0 32 (not mapped, though, at some future time the object will be terminated, with the appropri-) widthshow (ate message being sent to the manager) 72.0 664.688 T (.) 224.75 664.688 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 130 130 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (126 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 0.491409 0 32 (If an object is cacheable b) widthshow 286.387177 112.650635 M 0.491409 0 32 (ut not mapped, and the cacheable attrib) widthshow 446.045776 112.650635 M 0.491409 0 32 (ute is disabled \() widthshow 0 FF 510.570007 112.650635 M 0.491409 0 32 (memo-) widthshow (ry_object_change_attrib) 180.0 124.651 T (utes) 284.78 124.651 T 3 FF (\), the object will be terminated.) 302.0 124.651 T 180 166.98381 360 3.024002 CR 0.25 SL 2 SC 540 168.5 M 180 168.5 L S 0 0 612 792 CR 4 (Times-Bold) 14 1 mymakefontmetric 4 FF (Pr) 180.0 162.317 T (ecious P) 194.518 162.317 T (ages) 242.986 162.317 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 180 186.674438 M 0.293228 0 32 (Pr) widthshow 189.630203 186.674438 M 0.293228 0 32 (ecious) widthshow 3 FF 215.180206 186.674438 M 0.293228 0 32 ( pages \(described in the ) widthshow 5 FF 313.566345 186.674438 M 0.293228 0 32 (K) widthshow 319.886536 186.674438 M 0.293228 0 32 (ernel Principles) widthshow 3 FF 384.339783 186.674438 M 0.293228 0 32 ( document\) create a v) widthshow 471.342834 186.674438 M 0.293228 0 32 (ariety of dif) widthshow 518.889465 186.674438 M 0.293228 0 32 widthshow (ties in the page management protocols:) 180.0 198.674 T 6 (Times-Roman) 7 1 mymakefontmetric 6 FF 180.0 216.674 T 3 FF 193.535995 216.674316 M 1.156693 0 32 (The memory manager can send multiple ) widthshow 5 FF 364.336182 216.674316 M 1.156693 0 32 (pr) widthshow 372.856384 216.674316 M 1.156693 0 32 (ecious) widthshow 3 FF 398.406372 216.674316 M 1.156693 0 32 ( pages with a single ) widthshow 0 FF 485.569824 216.674316 M 1.156693 0 32 (memory_ob-) widthshow 193.535995 228.674255 M 0.49942 0 32 (ject_data_supply) widthshow 3 FF 266.315979 228.674255 M 0.49942 0 32 ( call. The k) widthshow 312.704315 228.674255 M 0.49942 0 32 (ernel, ho) widthshow 347.943878 228.674255 M 0.49942 0 32 (we) widthshow 359.354004 228.674255 M 0.49942 0 32 (v) widthshow 364.204102 228.674255 M 0.49942 0 32 (er) widthshow 371.574341 228.674255 M 0.49942 0 32 (, may not accept them all for v) widthshow 497.020416 228.674255 M 0.49942 0 32 (arious rea-) widthshow 193.535995 240.674194 M 0.24025 0 32 (sons \(most lik) widthshow 250.036545 240.674194 M 0.24025 0 32 (ely because the k) widthshow 319.247375 240.674194 M 0.24025 0 32 (ernel already has one or the k) widthshow 438.328918 240.674194 M 0.24025 0 32 (ernel does not w) widthshow 504.769745 240.674194 M 0.24025 0 32 (ant one\).) widthshow 193.535995 252.674133 M 1.010208 0 32 (As such, the k) widthshow 253.126678 252.674133 M 1.010208 0 32 (ernel may be f) widthshow 313.537354 252.674133 M 1.010208 0 32 (aced with some pages it must return to the manager) widthshow 527.879578 252.674133 M 1.010208 0 32 (. It) widthshow 193.535995 264.674072 M 0.480301 0 32 (will do so with ) widthshow 0 FF 257.687195 264.674072 M 0.480301 0 32 (memory_object_data_r) widthshow 357.477295 264.674072 M 0.480301 0 32 (etur) widthshow 375.097412 264.674072 M 0.480301 0 32 (n) widthshow 3 FF 380.65741 264.674072 M 0.480301 0 32 ( calls. If the memory manager w) widthshow 513.129272 264.674072 M 0.480301 0 32 (ants to) widthshow 193.535995 276.674011 M 0.323563 0 32 (synchronize with this data return, it can do so by requesting a reply message from the) widthshow 193.535995 288.67395 M 2.807648 0 32 (data supply call. This reply) widthshow 312.716949 288.67395 M 2.807648 0 32 (,) widthshow 7 (Symbol) 10 1 mymakefontmetric 7 FF 315.216949 288.67395 M 2.807648 0 32 ( ) widthshow 0 FF 320.524597 288.67395 M 2.807648 0 32 (memory_object_supply_completed) widthshow 3 FF 469.394592 288.67395 M 2.807648 0 32 ( indicates which) widthshow 193.535995 300.673889 M 1.376144 0 32 (pages were accepted. The reply will follo) widthshow 366.77301 300.673889 M 1.376144 0 32 (w all data return messages resulting from) widthshow 193.535995 312.673828 M 0.535202 0 32 (the data supply) widthshow 254.50676 312.673828 M 0.535202 0 32 (, so the manager can use this reply message as the delimiter of the se-) widthshow (quence.) 193.536 324.674 T 6 FF 180.0 339.674 T 3 FF 193.535995 339.673706 M 1.46312 0 32 (When the k) widthshow 242.462296 339.673706 M 1.46312 0 32 (ernel e) widthshow 270.60556 339.673706 M 1.46312 0 32 (victs pages of the memory object, it must return to the manager) widthshow 193.535995 351.673645 M 1.206055 0 32 (both modi\336ed pages \() widthshow 5 FF 284.094177 351.673645 M 1.206055 0 32 (pr) widthshow 292.61438 351.673645 M 1.206055 0 32 (ecious) widthshow 3 FF 318.164368 351.673645 M 1.206055 0 32 ( or otherwise\) as well as ) widthshow 5 FF 424.820709 351.673645 M 1.206055 0 32 (pr) widthshow 433.340912 351.673645 M 1.206055 0 32 (ecious) widthshow 3 FF 458.89093 351.673645 M 1.206055 0 32 ( pages \(modi\336ed or) widthshow 193.535995 363.673584 M 0.233719 0 32 (not\). The ) widthshow 0 FF 233.163437 363.673584 M 0.233719 0 32 (memory_object_data_r) widthshow 332.953552 363.673584 M 0.233719 0 32 (etur) widthshow 350.573639 363.673584 M 0.233719 0 32 (n) widthshow 3 FF 356.133636 363.673584 M 0.233719 0 32 ( message has information to allo) widthshow 486.76239 363.673584 M 0.233719 0 32 (w the memo-) widthshow (ry manager to be able to tell the dif) 193.536 375.674 T (ference between these cases.) 333.816 375.674 T 6 FF 180.0 390.673 T 3 FF 193.535995 390.673462 M 1.133041 0 32 (Gi) widthshow 203.286133 390.673462 M 1.133041 0 32 (v) widthshow 208.136215 390.673462 M 1.133041 0 32 (en the asynchronous nature of the memory management messages, it is possible) widthshow 193.535995 402.673401 M 0.947983 0 32 (that the memory object is terminated while the memory manager is trying to supply) widthshow 193.535995 414.67334 M 0.688095 0 32 (\() widthshow 5 FF 196.865997 414.67334 M 0.688095 0 32 (pr) widthshow 205.3862 414.67334 M 0.688095 0 32 (ecious) widthshow 3 FF 230.936203 414.67334 M 0.688095 0 32 (\) data to it \(by data supply messages to the memory cache control port\). T) widthshow 535 414.67334 M 0.688095 0 32 (o) widthshow 193.535995 426.673279 M 0.374069 0 32 (a) widthshow 197.776108 426.673279 M 0.374069 0 32 (v) widthshow 202.576218 426.673279 M 0.374069 0 32 (oid discarding these ) widthshow 5 FF 286.188416 426.673279 M 0.374069 0 32 (pr) widthshow 294.708618 426.673279 M 0.374069 0 32 (ecious) widthshow 3 FF 320.258636 426.673279 M 0.374069 0 32 ( pages, the k) widthshow 371.270905 426.673279 M 0.374069 0 32 (ernel gi) widthshow 401.6651 426.673279 M 0.374069 0 32 (v) widthshow 406.515198 426.673279 M 0.374069 0 32 (es the recei) widthshow 451.993469 426.673279 M 0.374069 0 32 (v) widthshow 456.843567 426.673279 M 0.374069 0 32 (e right to the memo-) widthshow 193.535995 438.673218 M 1.294357 0 32 (ry cache ports to the memory manager in the ) widthshow 0 FF 386.535217 438.673218 M 1.294357 0 32 (memory_object_terminate) widthshow 3 FF 499.825256 438.673218 M 1.294357 0 32 ( message.) widthshow (The memory manager must drain this port to re-obtain all of its ) 193.536 450.673 T 5 FF (pr) 449.066 450.673 T (ecious) 457.586 450.673 T 3 FF ( pages.) 483.136 450.673 T 4 FF (Synchr) 180.0 488.34 T (onization with Multiple Objects, K) 222.532 488.34 T (er) 429.466 488.34 T (nels and ) 441.688 488.34 T 180 509.006317 360 3.024002 CR 540 510.52 M 180 510.52 L S 0 0 612 792 CR 4 FF (Thr) 180.0 504.34 T (eads) 203.086 504.34 T 3 FF 180 528.69696 M 0.408966 0 32 (The e) widthshow 202.749054 528.69696 M 0.408966 0 32 (xternal memory management protocol consists of asynchronous interactions so that) widthshow 180 540.696899 M 1.691742 0 32 (the maximum de) widthshow 250.453568 540.696899 M 1.691742 0 32 (gree of parallelism can be achie) widthshow 385.562439 540.696899 M 1.691742 0 32 (v) widthshow 390.412537 540.696899 M 1.691742 0 32 (ed. This places considerable b) widthshow 517.229614 540.696899 M 1.691742 0 32 (urden) widthshow 180 552.696838 M 0.894119 0 32 (upon the memory manager to correctly synchronize acti) widthshow 409.569 552.696838 M 0.894119 0 32 (vities upon its objects. Man) widthshow 523.275574 552.696838 M 0.894119 0 32 (y of) widthshow 180 564.696777 M 0.415649 0 32 (the concerns in) widthshow 240.971527 564.696777 M 0.415649 0 32 (v) widthshow 245.771637 564.696777 M 0.415649 0 32 (olv) widthshow 258.401733 564.696777 M 0.415649 0 32 (ed in writing a multi-threaded pager are the same as those for writing) widthshow (an) 180.0 576.697 T (y other multi-threaded serv) 189.29 576.697 T (er) 297.73 576.697 T (.) 304.95 576.697 T 8 (Times-Bold) 12 1 mymakefontmetric 8 FF (Multiple P) 180.0 608.03 T (ages) 234.216 608.03 T 3 FF 180 624.696594 M 1.004333 0 32 (First of all, the manager must track the state of each page. F) widthshow 431.302124 624.696594 M 1.004333 0 32 (or each page, the manager) widthshow 180 636.696533 M 0.521271 0 32 (must track its o) widthshow 242.703949 636.696533 M 0.521271 0 32 (wnership and location \(which k) widthshow 370.779114 636.696533 M 0.521271 0 32 (ernels hold a cop) widthshow 440.282959 636.696533 M 0.521271 0 32 (y) widthshow 444.633331 636.696533 M 0.521271 0 32 (, whether the page is in) widthshow 180 648.696472 M 0.920746 0 32 (transit to backing store or other k) widthshow 318.18454 648.696472 M 0.920746 0 32 (ernels\) and an) widthshow 375.966125 648.696472 M 0.920746 0 32 (y outstanding operations upon the page.) widthshow 180 660.696411 M 0.628311 0 32 (Also, the manager must not attempt multiple simultaneous page-in or access changes on) widthshow (the same page.) 180.0 672.696 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 131 131 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (127 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Synchr) 72.0 55.824 T (onization with Multiple Objects, K) 99.342 55.824 T (er) 232.372 55.824 T (nels and Thr) 240.229 55.824 T (eads) 289.081 55.824 T 0.25 SL 3.86 setmiterlimit 0 SC 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 72 114.666626 M 0.751114 0 32 (The manager is allo) widthshow 153.153488 114.666626 M 0.751114 0 32 (wed to operate on a set of pages in a gi) widthshow 315.934784 114.666626 M 0.751114 0 32 (v) widthshow 320.784851 114.666626 M 0.751114 0 32 (en interaction with the k) widthshow 420.899384 114.666626 M 0.751114 0 32 (er-) widthshow 72 126.666565 M 1.056595 0 32 (nel. Ho) widthshow 102.246735 126.666565 M 1.056595 0 32 (we) widthshow 113.656876 126.666565 M 1.056595 0 32 (v) widthshow 118.506958 126.666565 M 1.056595 0 32 (er) widthshow 125.877182 126.666565 M 1.056595 0 32 (, multiple ranges must not o) widthshow 242.680237 126.666565 M 1.056595 0 32 (v) widthshow 247.530319 126.666565 M 1.056595 0 32 (erlap. If a request supplies pages 2, 3 and 4,) widthshow (for e) 72.0 138.667 T (xample, a second request must not supply pages 4, 5 and 6.) 90.45 138.667 T 72 162.666443 M 0.426636 0 32 (It is an error to supply a page more than once, and the k) widthshow 300.176331 162.666443 M 0.426636 0 32 (ernel does not guarantee that the) widthshow 72 174.666382 M 0.226624 0 32 widthshow 72 186.666321 M 0.623016 0 32 (k) widthshow 76.900055 186.666321 M 0.623016 0 32 (ernel still holds, the data supply is ignored. Ho) widthshow 268.294312 186.666321 M 0.623016 0 32 (we) widthshow 279.704468 186.666321 M 0.623016 0 32 (v) widthshow 284.554565 186.666321 M 0.623016 0 32 (er) widthshow 291.924774 186.666321 M 0.623016 0 32 (, the follo) widthshow 331.530945 186.666321 M 0.623016 0 32 (wing scenario will result) widthshow (in page inconsistenc) 72.0 198.666 T (y:) 152.95 198.666 T 4 (Times-Roman) 7 1 mymakefontmetric 4 FF 72.0 216.666 T 3 FF (The manager supplies a writable page to the k) 85.536 216.666 T (ernel which is subsequently modi\336ed.) 269.286 216.666 T 4 FF 72.0 231.666 T 3 FF (The k) 85.536 231.666 T (ernel decides to e) 108.486 231.666 T (vict the modi\336ed page.) 177.936 231.666 T 4 FF 72.0 246.666 T 3 FF 85.535995 246.666077 M 1.761047 0 32 (Not yet seeing the e) widthshow 171.76033 246.666077 M 1.761047 0 32 (victed page, the manager re-supplies the \(old contents of the\)) widthshow (page.) 85.536 258.666 T 4 FF 72.0 273.666 T 3 FF (The k) 85.536 273.666 T (ernel accepts this old page thereby ef) 108.486 273.666 T (fecti) 256.526 273.666 T (v) 274.046 273.666 T (ely discarding the recent changes.) 278.896 273.666 T 5 (Times-Bold) 12 1 mymakefontmetric 5 FF (Multiple Objects) 72.0 304.999 T 3 FF 72 321.665833 M 1.151962 0 32 (When the manager manages multiple objects, it is typical to create a port set that con-) widthshow 72 333.665771 M 1.251297 0 32 (tains the recei) widthshow 129.79274 333.665771 M 1.251297 0 32 (v) widthshow 134.642822 333.665771 M 1.251297 0 32 (e rights for the v) widthshow 205.498154 333.665771 M 1.251297 0 32 (arious abstract memory object ports to be used for the) widthshow 72 345.66571 M 0.959961 0 32 (serv) widthshow 88.510086 345.66571 M 0.959961 0 32 (er loop \() widthshow 1 FF 124.310013 345.66571 M 0.959961 0 32 (mach_msg_ser) widthshow 187.530075 345.66571 M 0.959961 0 32 (v) widthshow 192.43013 345.66571 M 0.959961 0 32 (er) widthshow 3 FF 201.310135 345.66571 M 0.959961 0 32 (\). The manager needs some translation table to translate) widthshow 72 357.665649 M 0.292084 0 32 (from port to memory object control structure. W) widthshow 267.504822 357.665649 M 0.292084 0 32 (ith care the manager can actually use the) widthshow 72 369.665649 M 0.70079 0 32 (memory object control structure address as the port name for the corresponding abstract) widthshow (memory object port as discussed in CHAPTER 6.) 72.0 381.666 T 5 FF (Multiple Thr) 72.0 412.999 T (eads) 138.792 412.999 T 3 FF 72 429.665527 M 0.899124 0 32 (T) widthshow 77.31044 429.665527 M 0.899124 0 32 (o achie) widthshow 106.559708 429.665527 M 0.899124 0 32 (v) widthshow 111.40979 429.665527 M 0.899124 0 32 (e greater parallelism in the memory manager) widthshow 295.804779 429.665527 M 0.899124 0 32 (, aside from the use of asynchro-) widthshow 72 441.665466 M 1.450882 0 32 (nous interactions, the manager w) widthshow 209.623596 441.665466 M 1.450882 0 32 (ould typically use multiple threads. A simple minded) widthshow 72 453.665405 M 0.674973 0 32 (use of multiple threads is to assign each memory object to one and only one thread \(b) widthshow 424.219696 453.665405 M 0.674973 0 32 (ut) widthshow 72 465.665344 M 0.928299 0 32 (dif) widthshow 82.860138 465.665344 M 0.928299 0 32 (ferent objects or sets of objects to dif) widthshow 237.138382 465.665344 M 0.928299 0 32 (ferent threads\) thereby preserving the operation) widthshow 72 477.665283 M 0.608246 0 32 (ordering described in the pre) widthshow 189.153137 477.665283 M 0.608246 0 32 (vious sections. Ho) widthshow 263.729767 477.665283 M 0.608246 0 32 (we) widthshow 275.139893 477.665283 M 0.608246 0 32 (v) widthshow 279.98999 477.665283 M 0.608246 0 32 (er) widthshow 287.360229 477.665283 M 0.608246 0 32 (, this limits parallelism for an) widthshow 408.031525 477.665283 M 0.608246 0 32 (y gi) widthshow 423.669922 477.665283 M 0.608246 0 32 (v-) widthshow 72 489.665222 M 0.398636 0 32 (en object; the k) widthshow 134.475967 489.665222 M 0.398636 0 32 (ernel is fully capable of supporting operations on multiple pages of a sin-) widthshow 72 501.665161 M 0.263748 0 32 (gle object at the same time. The use of multiple threads to handle paging operations for a) widthshow (single object requires special care.) 72.0 513.665 T 72 537.665039 M 2.567215 0 32 (As an e) widthshow 106.974518 537.665039 M 2.567215 0 32 (xample of the synchronization problem, consider the follo) widthshow 356.885193 537.665039 M 2.567215 0 32 (wing sequence of) widthshow (e) 72.0 549.665 T (v) 76.19 549.665 T (ents:) 81.04 549.665 T 4 FF 72.0 567.665 T 3 FF (The k) 85.536 567.665 T (ernel decides to e) 108.486 567.665 T (vict a modi\336ed page.) 177.936 567.665 T 4 FF 72.0 582.665 T 3 FF (The k) 85.536 582.665 T (ernel subsequently decides to read the page ag) 108.486 582.665 T (ain.) 293.666 582.665 T 4 FF 72.0 597.665 T 3 FF 85.535995 597.664795 M 1.952591 0 32 (Manager thread X recei) widthshow 185.823929 597.664795 M 1.952591 0 32 (v) widthshow 190.674011 597.664795 M 1.952591 0 32 (es the ) widthshow 1 FF 220.129196 597.664795 M 1.952591 0 32 (memory_object_data_r) widthshow 319.919312 597.664795 M 1.952591 0 32 (etur) widthshow 337.539398 597.664795 M 1.952591 0 32 (n) widthshow 3 FF 343.099396 597.664795 M 1.952591 0 32 ( message and is pre-) widthshow 3 FF (empted before it can process the request.) 85.536 609.665 T 4 FF 72.0 624.665 T 3 FF 85.535995 624.664673 M 1.275436 0 32 (Manager thread Y recei) widthshow 183.792465 624.664673 M 1.275436 0 32 (v) widthshow 188.642548 624.664673 M 1.275436 0 32 (es the ) widthshow 1 FF 216.743423 624.664673 M 1.275436 0 32 (memory_object_data_r) widthshow 316.533539 624.664673 M 1.275436 0 32 (equest) widthshow 3 FF 343.75354 624.664673 M 1.275436 0 32 ( message. Not realiz-) widthshow (ing that the page had been modi\336ed, it returns the old cop) 85.536 636.665 T (y of backing store.) 315.966 636.665 T 4 FF 72.0 651.665 T 3 FF (Thread X gets to run ag) 85.536 651.665 T (ain, updating backing store.) 180.186 651.665 T (In this case, the k) 72.0 675.664 T (ernel does not recei) 141.61 675.664 T (v) 219.39 675.664 T (e the correct \(latest\) page contents.) 224.24 675.664 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 132 132 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (128 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 0.357971 0 32 (Mach ports guarantee that the order that messages are en-queued onto a port \(from a sin-) widthshow 180 124.650574 M 0.114319 0 32 (gle source\) is the same order in which the) widthshow 347.394653 124.650574 M 0.114319 0 32 (y will be de-queued. Ho) widthshow 443.972076 124.650574 M 0.114319 0 32 (we) widthshow 455.382202 124.650574 M 0.114319 0 32 (v) widthshow 460.2323 124.650574 M 0.114319 0 32 (er) widthshow 467.602539 124.650574 M 0.114319 0 32 (, this is not neces-) widthshow 180 136.650513 M 1.291962 0 32 (sarily the same order in which a serv) widthshow 335.803833 136.650513 M 1.291962 0 32 (er will process them; that order is determined by) widthshow 180 148.650452 M 2.670853 0 32 (scheduling concerns. F) widthshow 277.121796 148.650452 M 2.670853 0 32 (or a memory manager to correctly maintain an) widthshow 481.457886 148.650452 M 2.670853 0 32 (y gi) widthshow 499.158875 148.650452 M 2.670853 0 32 (v) widthshow 504.008942 148.650452 M 2.670853 0 32 (en page,) widthshow (though, it must process these operations in order) 180.0 160.65 T (.) 373.32 160.65 T 180 184.65033 M 0.196609 0 32 (T) widthshow 185.31044 184.65033 M 0.196609 0 32 (o maintain this order) widthshow 268.550476 184.65033 M 0.196609 0 32 (, Mach IPC assigns sequence numbers to messages. These numbers) widthshow 180 196.650269 M 0.799179 0 32 (pro) widthshow 193.180084 196.650269 M 0.799179 0 32 (vide the order in which messages are de-queued from a source. F) widthshow 461.75116 196.650269 M 0.799179 0 32 (or a multi-threaded) widthshow 180 208.650208 M 2.06543 0 32 (manager to maintain operation order) widthshow 333.941956 208.650208 M 2.06543 0 32 (, it must synchronize ag) widthshow 437.423706 208.650208 M 2.06543 0 32 (ainst the memory object) widthshow 180 220.650146 M 0.839081 0 32 (structure. That is, the memory object structure maintains an operation sequence number) widthshow 180 232.650085 M 0.043289 0 32 (that is incremented whene) widthshow 284.580017 232.650085 M 0.043289 0 32 (v) widthshow 289.430115 232.650085 M 0.043289 0 32 (er an operation is processed. If a thread \(thread Y in the e) widthshow 519.449707 232.650085 M 0.043289 0 32 (xam-) widthshow 180 244.650024 M 0.671951 0 32 (ple sequence abo) widthshow 249.503998 244.650024 M 0.671951 0 32 (v) widthshow 254.35408 244.650024 M 0.671951 0 32 (e\) \336nds that the sequence number in its message is not one more than) widthshow 180 256.649963 M 0.79303 0 32 (the sequence number re\337ected in the memory object structure, it kno) widthshow 462.350464 256.649963 M 0.79303 0 32 (ws that some other) widthshow 180 268.649902 M 1.433029 0 32 (thread has the interv) widthshow 265.519165 268.649902 M 1.433029 0 32 (ening operation. The thread w) widthshow 391.401367 268.649902 M 1.433029 0 32 (ould then put its operation onto the) widthshow (pending operation queue for that object.) 180.0 280.65 T 4 (Times-Bold) 12 1 mymakefontmetric 4 FF (Multiple K) 180.0 311.983 T (er) 236.04 311.983 T (nels) 246.516 311.983 T 3 FF 180 328.649719 M 0.963593 0 32 (A manager that supports distrib) widthshow 309.754486 328.649719 M 0.963593 0 32 (uted memory spanning multiple k) widthshow 448.508911 328.649719 M 0.963593 0 32 (ernels \322simply\323 has to) widthshow 180 340.649658 M 0.525284 0 32 (track the state of each page on each k) widthshow 333.492371 340.649658 M 0.525284 0 32 (ernel, re) widthshow 366.527771 340.649658 M 0.525284 0 32 (v) widthshow 371.327881 340.649658 M 0.525284 0 32 (oking access and passing pages from ma-) widthshow (chine to machine. Much of the mechanisms to support this ha) 180.0 352.65 T (v) 425.61 352.65 T (e already been discussed.) 430.46 352.65 T 180 376.649628 M 0.872986 0 32 (V) widthshow 186.110611 376.649628 M 0.872986 0 32 (arious additions w) widthshow 261.086639 376.649628 M 0.872986 0 32 (ould be necessary to FIGURE 2 to handle the multiple k) widthshow 494.696564 376.649628 M 0.872986 0 32 (ernels. The) widthshow 180 388.649597 M 1.142838 0 32 (manager may well need to track which k) widthshow 350.359924 388.649597 M 1.142838 0 32 (ernels hold the current page contents, not just) widthshow 180 400.649536 M 0.421829 0 32 (whether the \(single\) k) widthshow 268.645569 400.649536 M 0.421829 0 32 (ernel does. Only a single k) widthshow 377.304749 400.649536 M 0.421829 0 32 (ernel w) widthshow 407.33667 400.649536 M 0.421829 0 32 (ould hold the page if it has write) widthshow 180 412.649475 M 0.964966 0 32 (access. A page may be present with read access on multiple k) widthshow 436.564697 412.649475 M 0.964966 0 32 (ernels, changing the ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 522.219604 412.649475 M 0.964966 0 32 (both) widthshow 3 FF (state into a ) 180.0 424.649 T 5 FF (many) 225.83 424.649 T 3 FF ( state.) 247.49 424.649 T (Additional transitions are meaningful:) 180.0 448.649 T 6 (Times-Roman) 7 1 mymakefontmetric 6 FF 180.0 466.649 T 3 FF 193.535995 466.649292 M -0.002899 0 32 (If the manager itself needs the page, it must clean or \337ush all k) widthshow 444.468384 466.649292 M -0.002899 0 32 (ernels holding the page.) widthshow 6 FF 180.0 481.649 T 3 FF (A data request message from one of the k) 193.536 481.649 T (ernels may \336nd the page in an) 359.506 481.649 T (y state:) 479.336 481.649 T 6 FF 216.0 496.649 T 3 FF 229.535995 496.64917 M 0.594864 0 32 (If in the ) widthshow 5 FF 265.480591 496.64917 M 0.594864 0 32 (mana) widthshow 287.600647 496.64917 M 0.594864 0 32 (g) widthshow 292.500702 496.64917 M 0.594864 0 32 (er) widthshow 3 FF 300.830688 496.64917 M 0.594864 0 32 ( state, the page w) widthshow 372.260223 496.64917 M 0.594864 0 32 (ould be pro) widthshow 418.850037 496.64917 M 0.594864 0 32 (vided to the requesting k) widthshow 520.009521 496.64917 M 0.594864 0 32 (ernel) widthshow 229.535995 508.649109 M 0.511246 0 32 (with appropriate access \(read implying a ) widthshow 5 FF 397.563477 508.649109 M 0.511246 0 32 (many) widthshow 3 FF 419.223511 508.649109 M 0.511246 0 32 ( state, write implying the ) widthshow 5 FF 523.999756 508.649109 M 0.511246 0 32 (k) widthshow 528.339783 508.649109 M 0.511246 0 32 (er-) widthshow (nel) 229.536 520.649 T 3 FF ( state\).) 241.756 520.649 T 6 FF 216.0 535.649 T 3 FF 229.535995 535.648987 M 0.469543 0 32 (If in a ) widthshow 5 FF 257.324646 535.648987 M 0.469543 0 32 (k) widthshow 261.664673 535.648987 M 0.469543 0 32 (ernel) widthshow 3 FF 282.214691 535.648987 M 0.469543 0 32 ( state \(current contents on some k) widthshow 419.35202 535.648987 M 0.469543 0 32 (ernel\), it is necessary to clean) widthshow 229.535995 547.648926 M 1.094086 0 32 (or \337ush that k) widthshow 287.998291 547.648926 M 1.094086 0 32 (ernel as appropriate to get current contents and to permit the) widthshow (access requested of this additional k) 229.536 559.649 T (ernel.) 373.576 559.649 T 6 FF 216.0 574.649 T 3 FF 229.535995 574.648804 M 1.275253 0 32 (If in the ) widthshow 5 FF 267.521759 574.648804 M 1.275253 0 32 (many) widthshow 3 FF 289.181763 574.648804 M 1.275253 0 32 ( state \(no k) widthshow 337.067566 574.648804 M 1.275253 0 32 (ernel has write permission\) the page can be sup-) widthshow 229.535995 586.648743 M 0.378876 0 32 (plied to the ne) widthshow 287.362762 586.648743 M 0.378876 0 32 (w k) widthshow 302.361694 586.648743 M 0.378876 0 32 (ernel; the other k) widthshow 371.438385 586.648743 M 0.378876 0 32 (ernels need to be \337ushed only if the addi-) widthshow (tional k) 229.536 598.649 T (ernel requests write access.) 259.716 598.649 T 193.535995 613.648621 M 0.918121 0 32 (Note that a data request message from a k) widthshow 367.96106 613.648621 M 0.918121 0 32 (ernel only means that particular k) widthshow 506.591736 613.648621 M 0.918121 0 32 (ernel no) widthshow (longer holds the page\321the other k) 193.536 625.649 T (ernels may well still hold it.) 332.026 625.649 T 6 FF 180.0 640.648 T 3 FF 193.535995 640.648499 M 0.782547 0 32 (A data unlock request can only \336nd the page in the ) widthshow 5 FF 407.944031 640.648499 M 0.782547 0 32 (many) widthshow 3 FF 429.604034 640.648499 M 0.782547 0 32 ( state. If a k) widthshow 479.56427 640.648499 M 0.782547 0 32 (ernel has write) widthshow 193.535995 652.648438 M 0.404312 0 32 (access to the page, it follo) widthshow 299.177704 652.648438 M 0.404312 0 32 (ws that no other k) widthshow 372.355011 652.648438 M 0.404312 0 32 (ernel holds the page and so no unlock re-) widthshow 193.535995 664.648376 M 0.404846 0 32 (quest is possible. Ho) widthshow 277.28067 664.648376 M 0.404846 0 32 (we) widthshow 288.690796 664.648376 M 0.404846 0 32 (v) widthshow 293.540894 664.648376 M 0.404846 0 32 (er) widthshow 300.911133 664.648376 M 0.404846 0 32 (, multiple k) widthshow 347.460876 664.648376 M 0.404846 0 32 (ernels may be holding a read-only cop) widthshow 503.090027 664.648376 M 0.404846 0 32 (y when a) widthshow 193.535995 676.648315 M 1.01738 0 32 (k) widthshow 198.43605 676.648315 M 1.01738 0 32 (ernel requests write access. It is necessary to \337ush the page from the other k) widthshow 516.119446 676.648315 M 1.01738 0 32 (ernels) widthshow (before granting the write access.) 193.536 688.648 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 133 133 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (129 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Loose Consistency) 72.0 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 7 1 mymakefontmetric 3 FF 72.0 114.667 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 85.535995 114.666626 M 0.511551 0 32 (It is meaningful to supply a read-only ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 242.15686 114.666626 M 0.511551 0 32 (pr) widthshow 250.677063 114.666626 M 0.511551 0 32 (ecious) widthshow 4 FF 276.227051 114.666626 M 0.511551 0 32 ( page to the k) widthshow 332.053345 114.666626 M 0.511551 0 32 (ernel e) widthshow 359.245026 114.666626 M 0.511551 0 32 (v) widthshow 364.095093 114.666626 M 0.511551 0 32 (en for a memory) widthshow 85.535995 126.666565 M 1.963348 0 32 (object that permits modi\336cation. This might be done if the page e) widthshow 368.632935 126.666565 M 1.963348 0 32 (xisted on other) widthshow (nodes.) 85.536 138.667 T 3 FF 72.0 153.666 T 4 FF 85.535995 153.666443 M 0.557709 0 32 (It w) widthshow 101.823761 153.666443 M 0.557709 0 32 (ould be meaningful to clean a ) widthshow 5 FF 226.260025 153.666443 M 0.557709 0 32 (pr) widthshow 234.780228 153.666443 M 0.557709 0 32 (ecious) widthshow 4 FF 260.330231 153.666443 M 0.557709 0 32 ( page. The manager might do this so as to) widthshow (recei) 85.536 165.666 T (v) 104.716 165.666 T (e the current contents of the page to be pro) 109.566 165.666 T (vided to another k) 280.206 165.666 T (ernel.) 352.596 165.666 T 72 189.666321 M 0.557587 0 32 (As it so happens it is more ef) widthshow 192.033249 189.666321 M 0.557587 0 32 widthshow 72 201.66626 M 0.582275 0 32 (municate with each other at a higher le) widthshow 231.066086 201.66626 M 0.582275 0 32 (v) widthshow 235.916168 201.66626 M 0.582275 0 32 (el than the e) widthshow 286.113098 201.66626 M 0.582275 0 32 (xternal memory management proto-) widthshow 72 213.666199 M 0.66745 0 32 (col. F) widthshow 95.297531 213.666199 M 0.66745 0 32 (or e) widthshow 111.085068 213.666199 M 0.66745 0 32 (xample, if k) widthshow 160.370026 213.666199 M 0.66745 0 32 (ernel A holds a page that k) widthshow 271.474792 213.666199 M 0.66745 0 32 (ernel B w) widthshow 311.589752 213.666199 M 0.66745 0 32 (ants \(and the central manager) widthshow 72 225.666138 M 0.268433 0 32 (is on neither A nor B\), it is more ef) widthshow 214.706039 225.666138 M 0.268433 0 32 widthshow 314.438324 225.666138 M 0.268433 0 32 (v) widthshow 319.288391 225.666138 M 0.268433 0 32 (el from A directly to B than) widthshow (from A to the manager and then to B. F) 72.0 237.666 T (or a discussion of this, see:) 229.61 237.666 T 108 261.666016 M 1.69487 0 32 (F) widthshow 113.41008 261.666016 M 1.69487 0 32 (orin, A., et al., \322The Shared Memory Serv) widthshow 293.424255 261.666016 M 1.69487 0 32 (er) widthshow 300.794495 261.666016 M 1.69487 0 32 (,) widthshow 302.594879 261.666016 M 1.69487 0 32 widthshow 5 FF 323.20462 261.666016 M 1.69487 0 32 (Pr) widthshow 332.754883 261.666016 M 1.69487 0 32 (oceedings of the W) widthshow 413.109802 261.666016 M 1.69487 0 32 (inter) widthshow (1989) 108.0 273.666 T 4 FF ( ) 128.0 273.666 T 5 FF (USENIX Confer) 130.5 273.666 T (ence) 194.85 273.666 T 4 FF (.) 213.17 273.666 T 72 315.999207 360 3.024002 CR 432 317.51 M 72 317.51 L S 0 0 612 792 CR 6 (Times-Bold) 14 1 mymakefontmetric 6 FF (Loose Consistency) 72.0 311.333 T 4 FF 72 335.689819 M 1.448318 0 32 (This chapter has discussed the use of k) widthshow 237.2883 335.689819 M 1.448318 0 32 (ernel mechanisms to maintain strict read\320write) widthshow 72 347.689758 M 1.159088 0 32 (consistenc) widthshow 113.510086 347.689758 M 1.159088 0 32 (y for shared memory) widthshow 199.927719 347.689758 M 1.159088 0 32 (. Not all memory managers need to maintain such strict) widthshow (consistenc) 72.0 359.69 T (y) 113.51 359.69 T (.) 117.86 359.69 T 72 383.689636 M 0.233536 0 32 (The consistenc) widthshow 131.793625 383.689636 M 0.233536 0 32 (y so f) widthshow 154.380753 383.689636 M 0.233536 0 32 (ar described is referred to as ) widthshow 5 FF 271.291992 383.689636 M 0.233536 0 32 (strict) widthshow 4 FF 291.85199 383.689636 M 0.233536 0 32 ( consistenc) widthshow 336.095612 383.689636 M 0.233536 0 32 (y because there is abso-) widthshow 72 395.689575 M 1.052048 0 32 (lutely no w) widthshow 119.00415 395.689575 M 1.052048 0 32 (ay that a client could detect an) widthshow 246.806534 395.689575 M 1.052048 0 32 (y inconsistenc) widthshow 304.648682 395.689575 M 1.052048 0 32 (y) widthshow 308.999023 395.689575 M 1.052048 0 32 (. The manager re) widthshow 379.655334 395.689575 M 1.052048 0 32 (v) widthshow 384.455444 395.689575 M 1.052048 0 32 (ok) widthshow 394.355469 395.689575 M 1.052048 0 32 (es all ac-) widthshow 72 407.689514 M 0.80661 0 32 (cess to all other entities \(clients and k) widthshow 227.806335 407.689514 M 0.80661 0 32 (ernels\) whene) widthshow 284.173096 407.689514 M 0.80661 0 32 (v) widthshow 289.023193 407.689514 M 0.80661 0 32 (er an) widthshow 309.389893 407.689514 M 0.80661 0 32 (y entity needs to write so that) widthshow 72 419.689453 M 0.367126 0 32 (these other entities will f) widthshow 172.248566 419.689453 M 0.367126 0 32 (ault on their memory and re-fetch it, thereby recei) widthshow 374.605743 419.689453 M 0.367126 0 32 (ving the abso-) widthshow 72 431.689392 M 0.126221 0 32 (lute latest changes. All accesses to a page are serialized; at an) widthshow 319.278564 431.689392 M 0.126221 0 32 (y gi) widthshow 334.434906 431.689392 M 0.126221 0 32 (v) widthshow 339.284973 431.689392 M 0.126221 0 32 (en time their are multi-) widthshow 4 FF 72 443.689331 M 1.213486 0 32 (ple readers ) widthshow 120.516983 444.688782 8.330002 1 NF 4 FF 120.516983 443.689331 M 1.213486 0 32 (or) widthshow 4 FF 128.846985 443.689331 M 1.213486 0 32 ( a single writer) widthshow 191.647751 443.689331 M 1.213486 0 32 (. This brute force approach, ho) widthshow 320.485352 443.689331 M 1.213486 0 32 (we) widthshow 331.895477 443.689331 M 1.213486 0 32 (v) widthshow 336.745544 443.689331 M 1.213486 0 32 (er) widthshow 344.115784 443.689331 M 1.213486 0 32 (, is often o) widthshow 389.826324 443.689331 M 1.213486 0 32 (v) widthshow 394.676392 443.689331 M 1.213486 0 32 (erkill. Its) widthshow 72 455.68927 M 1.210815 0 32 (strict serialization reduces the parallelism with which the shared memory can be refer-) widthshow 72 467.689209 M 0.21579 0 32 (enced. Also, the use of the e) widthshow 185.894836 467.689209 M 0.21579 0 32 (xternal memory management protocols to ensure consistenc) widthshow 426.999695 467.689209 M 0.21579 0 32 (y) widthshow 72 479.689148 M 1.098404 0 32 (requires the mo) widthshow 136.256897 479.689148 M 1.098404 0 32 (v) widthshow 141.106979 479.689148 M 1.098404 0 32 (ement of whole pages where much smaller data mo) widthshow 355.254333 479.689148 M 1.098404 0 32 (v) widthshow 360.104401 479.689148 M 1.098404 0 32 (ement may do \(if) widthshow (managed directly by the application\).) 72.0 491.689 T 4 FF 72 515.689026 M 0.383301 0 32 (The issue in loosening consistenc) widthshow 207.26329 515.689026 M 0.383301 0 32 (y constraints \(that is, allo) widthshow 309.376648 515.689026 M 0.383301 0 32 (wing multiple readers ) widthshow 400.236542 516.688477 14.440002 1 NF 4 FF 400.236542 515.689026 M 0.383301 0 32 (and) widthshow 4 FF 414.676544 515.689026 M 0.383301 0 32 ( one) widthshow 72 527.688965 M 0.262451 0 32 (or more writers\) is whether) widthshow 181.51004 527.688965 M 0.262451 0 32 (, gi) widthshow 194.302628 527.688965 M 0.262451 0 32 (v) widthshow 199.15271 527.688965 M 0.262451 0 32 (en a set of clients, one of them can see inconsistent mem-) widthshow 4 FF 72 539.688904 M 0.655975 0 32 (ory v) widthshow 93.236115 539.688904 M 0.655975 0 32 (alues. That is, consider data v) widthshow 214.85614 539.688904 M 0.655975 0 32 (alues A and B k) widthshow 281.260101 539.688904 M 0.655975 0 32 (ept in separate shared memory pages) widthshow 72 551.688843 M 0.073624 0 32 (where client X modi\336es A and then B. If client Y fetches B and sees the ne) widthshow 373.148132 551.688843 M 0.073624 0 32 (w v) widthshow 387.691895 551.688843 M 0.073624 0 32 (alue, it fol-) widthshow 4 FF 72 563.688782 M 0.205795 0 32 (lo) widthshow 79.530136 563.688782 M 0.205795 0 32 (ws that Y should also see the ne) widthshow 208.760849 563.688782 M 0.205795 0 32 (w v) widthshow 223.436783 563.688782 M 0.205795 0 32 (alue for A since it w) widthshow 305.73584 563.688782 M 0.205795 0 32 (as modi\336ed \336rst. W) widthshow 384.843445 563.688782 M 0.205795 0 32 (ithout some) widthshow 72 575.688721 M 0.97995 0 32 (synchronization, it w) widthshow 158.019958 575.688721 M 0.97995 0 32 (ould be possible for client Y to see the old v) widthshow 344.219604 575.688721 M 0.97995 0 32 (alue of A. Of course,) widthshow 72 587.68866 M 0.686829 0 32 (this consistenc) widthshow 131.146912 587.68866 M 0.686829 0 32 (y is only meaningful to Y if it kno) widthshow 273.061676 587.68866 M 0.686829 0 32 (ws \(or cares\) that A is modi\336ed before) widthshow (B.) 72.0 599.689 T 72 623.688538 M 0.832825 0 32 (One w) widthshow 99.112885 623.688538 M 0.832825 0 32 (ay to loosen the consistenc) widthshow 209.504272 623.688538 M 0.832825 0 32 (y constraints is for an application to tak) widthshow 373.274109 623.688538 M 0.832825 0 32 (e e) widthshow 385.337036 623.688538 M 0.832825 0 32 (xplicit con-) widthshow 72 635.688477 M 0.80661 0 32 (trol o) widthshow 94.046692 635.688477 M 0.80661 0 32 (v) widthshow 98.896774 635.688477 M 0.80661 0 32 (er when page images are updated on other nodes gi) widthshow 310.576416 635.688477 M 0.80661 0 32 (v) widthshow 315.426514 635.688477 M 0.80661 0 32 (en its o) widthshow 345.679871 635.688477 M 0.80661 0 32 (wn kno) widthshow 375.956604 635.688477 M 0.80661 0 32 (wledge of the) widthshow 72 647.688416 M 0.870743 0 32 (data dependencies. Another w) widthshow 195.032303 647.688416 M 0.870743 0 32 (ay is for the memory manager to track data references by) widthshow 72 659.688354 M 0.921051 0 32 (the v) widthshow 92.39119 659.688354 M 0.921051 0 32 (arious client \(nodes\). In this w) widthshow 218.546509 659.688354 M 0.921051 0 32 (ay) widthshow 227.336868 659.688354 M 0.921051 0 32 (, if the manager sends a ne) widthshow 338.973328 659.688354 M 0.921051 0 32 (w v) widthshow 354.364502 659.688354 M 0.921051 0 32 (alue of a page to a) widthshow 72 671.688293 M 0.341797 0 32 (node, it also sends ne) widthshow 158.387329 671.688293 M 0.341797 0 32 (w v) widthshow 173.199265 671.688293 M 0.341797 0 32 (alues \(or in) widthshow 218.473083 671.688293 M 0.341797 0 32 (v) widthshow 223.223221 671.688293 M 0.341797 0 32 (alidates old v) widthshow 276.986938 671.688293 M 0.341797 0 32 (alues\) of an) widthshow 324.170654 671.688293 M 0.341797 0 32 (y pages that it kno) widthshow 398.617981 671.688293 M 0.341797 0 32 (ws were) widthshow 72 683.688232 M 0.164642 0 32 (modi\336ed prior to the modi\336cation of the page it is sending. It is possible for a manager to) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 134 134 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (130 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Exter) 180.0 55.824 T (nal Memory Managers) 201.357 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 0.684921 0 32 (track the order of modi\336cation of pages via k) widthshow 365.899445 112.650635 M 0.684921 0 32 (ernel generated ) widthshow 0 FF 431.129303 112.650635 M 0.684921 0 32 (memory_object_unlock_-) widthshow (r) 180.0 124.651 T (equest) 184.26 124.651 T 3 FF ( messages. F) 211.48 124.651 T (or a more detailed discussion of this \322causal ordered\323 memory) 262.16 124.651 T (, see:) 511.181 124.651 T 216 148.650513 M 0.578003 0 32 (Bo) widthshow 227.570053 148.650513 M 0.578003 0 32 (yer) widthshow 239.940277 148.650513 M 0.578003 0 32 (, F) widthshow 250.278717 148.650513 M 0.578003 0 32 (., \322) widthshow 261.997162 148.650513 M 0.578003 0 32 (A Causal Distrib) widthshow 330.173279 148.650513 M 0.578003 0 32 (uted Shared Memory Based on External P) widthshow 501.801392 148.650513 M 0.578003 0 32 (agers,) widthshow 524.701782 148.650513 M 0.578003 0 32 widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (Pr) 216.0 160.65 T (oceedings of the 1991) 225.55 160.65 T 3 FF ( ) 313.04 160.65 T 4 FF (USENIX Mac) 315.54 160.65 T (h Symposium) 370.1 160.65 T 3 FF (.) 423.15 160.65 T 3 FF 180 184.650391 M 0.347672 0 32 (A sample use of loosened consistenc) widthshow 328.508453 184.650391 M 0.347672 0 32 (y appears in serv) widthshow 396.881561 184.650391 M 0.347672 0 32 (ers that maintain multiple copies of) widthshow 180 196.65033 M 0.999985 0 32 (data that need only be recent. Note that strict read\320write consistenc) widthshow 458.399963 196.65033 M 0.999985 0 32 (y required that only) widthshow 180 208.650269 M 0.815231 0 32 (one k) widthshow 202.655289 208.650269 M 0.815231 0 32 (ernel hold the modi\336ed contents of a page at a time; this means that the f) widthshow 505.583832 208.650269 M 0.815231 0 32 (ailure of) widthshow 180 220.650208 M 0.404617 0 32 (that k) widthshow 202.804672 220.650208 M 0.404617 0 32 (ernel damages the memory object. If a k) widthshow 366.607056 220.650208 M 0.404617 0 32 (ernel e) widthshow 393.691833 220.650208 M 0.404617 0 32 (victs modi\336ed page A which is sub-) widthshow 180 232.650146 M 1.459915 0 32 (sequently modi\336ed on some other k) widthshow 330.249634 232.650146 M 1.459915 0 32 (ernel without ha) widthshow 397.959595 232.650146 M 1.459915 0 32 (ving e) widthshow 423.889648 232.650146 M 1.459915 0 32 (victed modi\336ed page B, the) widthshow 180 244.650085 M 0.330582 0 32 (old contents of page B no longer correspond to the ne) widthshow 397.465973 244.650085 M 0.330582 0 32 (w v) widthshow 412.266693 244.650085 M 0.330582 0 32 (alue of page A. Loosening con-) widthshow 180 256.650024 M 0.175247 0 32 (sistenc) widthshow 207.070084 256.650024 M 0.175247 0 32 (y allo) widthshow 229.495468 256.650024 M 0.175247 0 32 (ws multiple modi\336ed copies to be k) widthshow 373.22699 256.650024 M 0.175247 0 32 (ept. Gi) widthshow 400.372375 256.650024 M 0.175247 0 32 (v) widthshow 405.222473 256.650024 M 0.175247 0 32 (en a f) widthshow 427.683044 256.650024 M 0.175247 0 32 (ailure of a cop) widthshow 485.588837 256.650024 M 0.175247 0 32 (y) widthshow 489.939209 256.650024 M 0.175247 0 32 (, the manag-) widthshow 180 268.649963 M 0.997238 0 32 (ers can reconstruct the latest v) widthshow 305.536346 268.649963 M 0.997238 0 32 (alues from recent v) widthshow 385.198212 268.649963 M 0.997238 0 32 (alues. It w) widthshow 428.472748 268.649963 M 0.997238 0 32 (ould be v) widthshow 467.537292 268.649963 M 0.997238 0 32 (ery dif) widthshow 494.664673 268.649963 M 0.997238 0 32 widthshow 180 280.649902 M 1.164932 0 32 (this in general b) widthshow 247.45491 280.649902 M 1.164932 0 32 (ut v) widthshow 263.649963 280.649902 M 1.164932 0 32 (arious \322blackboard\323 serv) widthshow 365.239929 280.649902 M 1.164932 0 32 (ers with limited semantics ha) widthshow 486.359802 280.649902 M 1.164932 0 32 (v) widthshow 491.209869 280.649902 M 1.164932 0 32 (e been b) widthshow 526.659851 280.649902 M 1.164932 0 32 (uilt) widthshow (that pro) 180.0 292.65 T (vide this service.) 210.68 292.65 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 135 135 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 2 SL 3.86 setmiterlimit 0 G 432 45 M 72 45 L S 2 SC 432 342 M 72 342 L S 0.25 SL 432 720 M 72 720 L S 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (131 ) widthshow 0 0 612 792 CR 1 G 72 99 360 225 NF 0 G 2 (Times-Roman) 12 1 mymakefontmetric 2 FF 72 115 M 1.19989 0 (CHAPTER 8) ashow 3 (Times-Roman) 24 1 mymakefontmetric 3 FF 180 115 M -0.479736 0 (Netw) ashow 229.825195 115 M -0.479736 0 (ork Shared Memory ) ashow 180 145 M -0.479736 0 (Serv) ashow 221.713257 145 M -0.479736 0 (er) ashow 1 G 72 360 360 344.015991 NF 0 G 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 72 366.666656 M 1.057816 0 32 (The most typical use of an e) widthshow 190.956985 366.666656 M 1.057816 0 32 (xternal memory manager is to pro) widthshow 331.906158 366.666656 M 1.057816 0 32 (vide shared memory be-) widthshow 72 378.666626 M 1.543045 0 32 (tween otherwise unrelated tasks. When this memory is to be shared between tasks on) widthshow 72 390.666626 M 1.073029 0 32 (multiple hosts, it is referred to as distrib) widthshow 238.751312 390.666626 M 1.073029 0 32 (uted shared memory or netmemory) widthshow 382.923798 390.666626 M 1.073029 0 32 (. Mach pro-) widthshow 72 402.666626 M 1.000748 0 32 (vides a standard e) widthshow 146.222336 402.666626 M 1.000748 0 32 (xternal memory manager serv) widthshow 268.764679 402.666626 M 1.000748 0 32 (er to pro) widthshow 304.496277 402.666626 M 1.000748 0 32 (vide such memory) widthshow 379.728119 402.666626 M 1.000748 0 32 (, suitable for) widthshow 72 414.666595 M 0.364639 0 32 (sharing between tasks on a single host, or between multiple hosts. This serv) widthshow 378.975769 414.666595 M 0.364639 0 32 (er is the Net-) widthshow (Memory serv) 72.0 426.667 T (er) 125.45 426.667 T (.) 132.67 426.667 T 72 450.666565 M 1.232758 0 32 (T) widthshow 77.31044 450.666565 M 1.232758 0 32 (o share memory between tasks using the netmemory serv) widthshow 315.87262 450.666565 M 1.232758 0 32 (er) widthshow 323.242828 450.666565 M 1.232758 0 32 (, a task \336rst creates a net-) widthshow 72 462.666565 M 0.040848 0 32 (memory object with the ) widthshow 1 FF 169.933395 462.666565 M 0.040848 0 32 (netmemory_cr) widthshow 232.50351 462.666565 M 0.040848 0 32 (eate) widthshow 4 FF 249.713516 462.666565 M 0.040848 0 32 ( call. This netmemory object can be distrib) widthshow 420.889587 462.666565 M 0.040848 0 32 (ut-) widthshow 72 474.666534 M 1.428635 0 32 (ed to all interested tasks either directly by IPC between tasks or indirectly by using a) widthshow (service such as the NetName serv) 72.0 486.667 T (er) 206.53 486.667 T (. ) 213.75 486.667 T 72 510.666504 M 0.432236 0 32 (Each task then \336nd its local netmemory serv) widthshow 252.355743 510.666504 M 0.432236 0 32 (er) widthshow 259.725952 510.666504 M 0.432236 0 32 (, and calls ) widthshow 1 FF 303.792664 510.666504 M 0.432236 0 32 (netmemory_cache) widthshow 4 FF 381.542694 510.666504 M 0.432236 0 32 ( on the local) widthshow 72 522.666504 M 0.943298 0 32 (serv) widthshow 88.510086 522.666504 M 0.943298 0 32 (er with the netmemory object to obtain a local Mach memory object corresponding) widthshow 72 534.666504 M 1.153595 0 32 (to the netmemory object. The ) widthshow 1 FF 198.307983 534.666504 M 1.153595 0 32 (netmemory_cache) widthshow 4 FF 276.057983 534.666504 M 1.153595 0 32 ( call allo) widthshow 312.555328 534.666504 M 1.153595 0 32 (ws the netmemory serv) widthshow 408.906189 534.666504 M 1.153595 0 32 (ers to) widthshow 72 546.666443 M 0.336304 0 32 (use more ef) widthshow 119.072754 546.666443 M 0.336304 0 32 widthshow 212.931778 546.666443 M 0.336304 0 32 (uted protocols for maintaining object consistenc) widthshow 406.94339 546.666443 M 0.336304 0 32 (y than) widthshow (the standard memory manager interf) 72.0 558.666 T (ace. ) 217.42 558.666 T 72 582.666443 M 0.690643 0 32 (Finally) widthshow 99.690353 582.666443 M 0.690643 0 32 (, the resulting memory object should be gi) widthshow 273.154999 582.666443 M 0.690643 0 32 (v) widthshow 278.005066 582.666443 M 0.690643 0 32 (en to ) widthshow 1 FF 301.606384 582.666443 M 0.690643 0 32 (vm_map) widthshow 4 FF 338.826355 582.666443 M 0.690643 0 32 ( to map the object into) widthshow 72 594.666382 M 0.533829 0 32 (the caller's address space. Ag) widthshow 191.125366 594.666382 M 0.533829 0 32 (ain, the netmemory object is only for use by ) widthshow 1 FF 374.799835 594.666382 M 0.533829 0 32 (netmemory_-) widthshow (cache) 72.0 606.666 T 4 FF (; it should not be handed directly to ) 95.88 606.666 T 1 FF (vm_map) 240.32 606.666 T 4 FF (.) 277.54 606.666 T 72 630.666382 M 1.715958 0 32 (The netmemory object can be e) widthshow 206.229889 630.666382 M 1.715958 0 32 (xplicitly destro) widthshow 268.125916 630.666382 M 1.715958 0 32 (yed by calling ) widthshow 1 FF 332.433777 630.666382 M 1.715958 0 32 (netmemory_destr) widthshow 407.783875 630.666382 M 1.715958 0 32 (oy) widthshow 4 FF 417.783875 630.666382 M 1.715958 0 32 ( on) widthshow 72 642.666382 M 1.105423 0 32 (the ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 87.825424 642.666382 M 1.105423 0 32 (netmemory_contr) widthshow 157.91568 642.666382 M 1.105423 0 32 (ol) widthshow 4 FF 165.695679 642.666382 M 1.105423 0 32 ( port. This call is not necessary with the current implementation) widthshow 72 654.666382 M 0.341415 0 32 (of the netmemoryserv) widthshow 160.292923 654.666382 M 0.341415 0 32 (er which cleans up a netmemory object after the last k) widthshow 379.667175 654.666382 M 0.341415 0 32 (ernel has un-) widthshow (mapped the object.) 72.0 666.666 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 136 136 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (132 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Netw) 180.0 55.824 T (ork Shar) 199.899 55.824 T (ed Memory Ser) 233.991 55.824 T (v) 293.382 55.824 T (er) 297.793 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650665 M 0.38829 0 32 (The current netmemory serv) widthshow 294.594971 112.650665 M 0.38829 0 32 (er is actually a compatibility front-end to the External Mem-) widthshow (ory Manager library) 180.0 124.651 T (.) 259.88 124.651 T (The follo) 180.0 148.651 T (wing is a routine which demonstrates ho) 216.69 148.651 T (w to use the netmemory serv) 378.09 148.651 T (er) 493.2 148.651 T (.) 500.421 148.651 T 180 159.983963 360 9 CR 1 G 180 159.983963 360 9 NF 0 G 3 FF (/*) 199.224 166.815 T 3 SL 0.6667 G 530.91 164.48 M 530.91 169.73 L 540 164.48 L 530.91 159.23 L F 530.91 164.48 M 216 164.48 L S 180 178.983948 360 9 CR 1 G 180 178.983948 360 9 NF 0 G 3 FF (*/) 198.0 185.81 T 0.6667 G 225.09 183.48 M 225.09 178.23 L 216 183.48 L 225.09 188.73 L F 540 183.48 M 225.09 183.48 L S 0 0 612 792 CR 0 G 3 FF (Create and map a shared object of gi) 216.0 175.651 T (v) 362.1 175.651 T (en size with netname ) 366.95 175.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (object_name) 453.6 175.651 T 3 FF (.) 504.7 175.651 T 180 189.983948 360 9 CR 1 G 180 189.983948 360 9 NF 0 G 3 FF (/*) 199.224 196.815 T 0.6667 G 530.91 194.48 M 530.91 199.73 L 540 194.48 L 530.91 189.23 L F 530.91 194.48 M 216 194.48 L S 0 0 612 792 CR 0 G 3 FF 216 205.650604 M 0.795364 0 32 (One task \(the \322master\323\) should call this routine with ) widthshow 4 FF 434.518311 205.650604 M 0.795364 0 32 (hostname) widthshow 3 FF 472.848297 205.650604 M 0.795364 0 32 ( = 0; the routine) widthshow 216 215.650589 M 2.076645 0 32 (will then create a netmemory object and re) widthshow 401.176636 215.650589 M 2.076645 0 32 (gister it with the netname serv) widthshow 532.229919 215.650589 M 2.076645 0 32 (er) widthshow 216 225.650574 M 1.176636 0 32 (under the supplied object name. All other tasks \(the \322sla) widthshow 450.799866 225.650574 M 1.176636 0 32 (v) widthshow 455.649933 225.650574 M 1.176636 0 32 (es\323\) call this routine) widthshow 180 238.983887 360 9 CR 1 G 180 238.983887 360 9 NF 0 G 3 FF (*/) 198.0 245.81 T 0.6667 G 225.09 243.48 M 225.09 238.23 L 216 243.48 L 225.09 248.73 L F 540 243.48 M 225.09 243.48 L S 0 0 612 792 CR 0 G 3 FF (with the ) 216.0 235.651 T 4 FF (hostname) 251.0 235.651 T 3 FF ( where the master li) 289.33 235.651 T (v) 367.95 235.651 T (es.) 372.8 235.651 T ([59]) 190.34 256.651 T (k) 216.0 256.651 T (ern_return_t ) 220.9 256.651 T 0 FF (map_object) 272.83 256.651 T 3 FF ( \(char* ) 322.82 256.651 T 4 FF (object_name) 353.36 256.651 T 3 FF (, char* ) 404.46 256.651 T 4 FF (hostname) 434.17 256.651 T 3 FF (, vm_of) 472.5 256.651 T (fset_t* ) 503.36 256.651 T 4 FF (addr) 270.0 266.651 T (ess) 288.52 266.651 T 3 FF (, vm_size_t ) 300.74 266.651 T 4 FF (size) 349.35 266.651 T 3 FF (, boolean_t ) 364.35 266.651 T 4 FF (anywher) 411.29 266.651 T (e) 445.36 266.651 T 3 FF (\)) 449.8 266.651 T ([60]) 190.34 278.651 T ({) 216.0 278.651 T ([61]) 190.34 290.65 T (k) 252.0 290.65 T (ern_return_t) 256.9 290.65 T 4 FF (kr) 396.0 290.65 T 3 FF (;) 404.33 290.65 T ([62]) 190.34 302.65 T (mach_port_t) 252.0 302.65 T 4 FF (netmemory_server) 396.0 302.65 T 3 FF (;) 470.42 302.65 T ([63]) 190.34 314.65 T (mach_port_t) 252.0 314.65 T 4 FF (memory_object) 396.0 314.65 T 3 FF (;) 457.65 314.65 T ([64]) 190.34 326.65 T (mach_port_t) 252.0 326.65 T 4 FF (netmemory_object) 396.0 326.65 T 3 FF (;) 469.87 326.65 T ([65]) 190.34 338.65 T (mach_port_t) 252.0 338.65 T 4 FF (netmemory_contr) 396.0 338.65 T (ol) 466.09 338.65 T 3 FF (;) 473.87 338.65 T 180 343.983765 360 9 CR 1 G 180 343.983765 360 9 NF 0 G 3 FF (/*) 199.224 350.815 T 0.6667 G 530.91 348.48 M 530.91 353.73 L 540 348.48 L 530.91 343.23 L F 530.91 348.48 M 216 348.48 L S 0 0 612 792 CR 0 G 3 FF 252 359.650421 M 0.199158 0 32 (Find the local netmemory serv) widthshow 374.85672 359.650421 M 0.199158 0 32 (er) widthshow 382.077026 359.650421 M 0.199158 0 32 (. \(If this routine is used a lot, this v) widthshow 523.3396 359.650421 M 0.199158 0 32 (alue) widthshow 180 372.983734 360 9 CR 1 G 180 372.983734 360 9 NF 0 G 3 FF (*/) 198.0 379.81 T 0.6667 G 225.09 377.48 M 225.09 372.23 L 216 377.48 L 225.09 382.73 L F 540 377.48 M 225.09 377.48 L S 0 0 612 792 CR 0 G 3 FF (can be cached.\)) 252.0 369.65 T ([66]) 190.34 390.65 T 4 FF (kr) 252.0 390.65 T 3 FF ( = ) 260.33 390.65 T 0 FF (netname_look_up) 270.97 390.65 T 3 FF ( \() 347.09 390.65 T 4 FF (name_server_port) 352.92 390.65 T 3 FF (, \322\323, \322netmemoryserv) 426.24 390.65 T (er\323,) 511.62 390.65 T ([67]) 190.34 402.65 T ( &) 396.0 402.65 T 4 FF (netmemory_server) 406.28 402.65 T 3 FF (\);) 480.7 402.65 T ([68]) 190.34 414.65 T (if \() 252.0 414.65 T 4 FF (kr) 263.94 414.65 T 3 FF (\)) 272.27 414.65 T ([69]) 190.34 426.65 T (return ) 288.0 426.65 T 4 FF (kr) 314.38 426.65 T 3 FF (;) 322.71 426.65 T 180 431.983673 360 9 CR 1 G 180 431.983673 360 9 NF 0 G 3 FF (/*) 199.224 438.815 T 0.6667 G 530.91 436.48 M 530.91 441.73 L 540 436.48 L 530.91 431.23 L F 530.91 436.48 M 216 436.48 L S 0 0 612 792 CR 0 G 3 FF 252 447.65033 M 1.38382 0 32 (If a hostname is pro) widthshow 336.815369 447.65033 M 1.38382 0 32 (vided, then we are the sla) widthshow 445.174591 447.65033 M 1.38382 0 32 (v) widthshow 450.024658 447.65033 M 1.38382 0 32 (e and thus we simply) widthshow 252 457.65033 M 1.580811 0 32 (look up the netmemory object on the gi) widthshow 420.305817 457.65033 M 1.580811 0 32 (v) widthshow 425.155884 457.65033 M 1.580811 0 32 (en host by using the object) widthshow 252 467.650299 M 1.036911 0 32 (name. If a hostname is not pro) widthshow 379.441559 467.650299 M 1.036911 0 32 (vided, then we are the master and thus) widthshow 252 477.650269 M 0.918839 0 32 (ha) widthshow 261.240112 477.650269 M 0.918839 0 32 (v) widthshow 266.09021 477.650269 M 0.918839 0 32 (e the responsibility of creating a netmemory object and re) widthshow 504.999847 477.650269 M 0.918839 0 32 (gistering) widthshow 180 490.983582 360 9 CR 1 G 180 490.983582 360 9 NF 0 G 3 FF (*/) 198.0 497.81 T 0.6667 G 225.09 495.48 M 225.09 490.23 L 216 495.48 L 225.09 500.73 L F 540 495.48 M 225.09 495.48 L S 0 0 612 792 CR 0 G 3 FF (it with the netname service under the gi) 252.0 487.65 T (v) 409.78 487.65 T (en object name.) 414.63 487.65 T ([70]) 190.34 508.65 T (if \() 252.0 508.65 T 4 FF (hostname) 263.94 508.65 T 3 FF (\)) 302.27 508.65 T ([71]) 190.34 520.65 T ({) 252.0 520.65 T ([72]) 190.34 532.65 T 4 FF (kr) 288.0 532.65 T 3 FF ( = ) 296.33 532.65 T 0 FF (netname_look_up) 306.97 532.65 T 3 FF ( \() 383.09 532.65 T 4 FF (name_server_port) 388.92 532.65 T 3 FF (, ) 462.24 532.65 T 4 FF (hostname) 467.24 532.65 T 3 FF (, ) 505.57 532.65 T 4 FF (object_name) 342.0 542.65 T 3 FF (, &) 393.1 542.65 T 4 FF (netmemory_object) 405.88 542.65 T 3 FF (\);) 479.75 542.65 T ([73]) 190.34 554.65 T (if \() 288.0 554.65 T 4 FF (kr) 299.94 554.65 T 3 FF (\)) 308.27 554.65 T ([74]) 190.34 566.65 T (return ) 324.0 566.65 T 4 FF (kr) 350.38 566.65 T 3 FF (;) 358.71 566.65 T ([75]) 190.34 578.65 T (}) 252.0 578.65 T ([76]) 190.34 590.65 T (else) 252.0 590.65 T ([77]) 190.34 602.65 T ({) 252.0 602.65 T ([78]) 190.34 614.65 T 4 FF (kr) 288.0 614.65 T 3 FF ( = ) 296.33 614.65 T 0 FF (netmemory_cr) 306.97 614.65 T (eate ) 369.54 614.65 T 3 FF (\() 389.25 614.65 T 4 FF (netmemory_server) 392.58 614.65 T 3 FF (, ) 466.6 614.65 T 4 FF (size) 471.6 614.65 T 3 FF (, ) 486.6 614.65 T (&) 342.0 624.65 T 4 FF (netmemory_object) 349.78 624.65 T 3 FF (, &) 423.65 624.65 T 4 FF (netmemory_contr) 436.43 624.65 T (ol) 506.52 624.65 T 3 FF (\);) 514.3 624.65 T ([79]) 190.34 636.65 T (if \() 288.0 636.65 T 4 FF (kr) 299.94 636.65 T 3 FF (\)) 308.27 636.65 T ([80]) 190.34 648.65 T (return ) 324.0 648.65 T 4 FF (kr) 350.38 648.65 T 3 FF (;) 358.71 648.65 T ([81]) 190.34 660.65 T 4 FF (kr) 288.0 660.65 T 3 FF ( = ) 296.33 660.65 T 0 FF (netname_check_in ) 306.97 660.65 T 3 FF (\() 388.91 660.65 T 4 FF (name_server_port) 392.24 660.65 T 3 FF (, ) 465.56 660.65 T 4 FF (object_name) 470.56 660.65 T 3 FF (, ) 521.66 660.65 T (MA) 342.0 670.65 T (CH_POR) 357.71 670.65 T (T_NULL, ) 395.451 670.65 T 4 FF (netmemory_object) 438.221 670.65 T 3 FF (\);) 512.091 670.65 T ([82]) 190.34 682.65 T (if \() 288.0 682.65 T 4 FF (kr) 299.94 682.65 T 3 FF (\)) 308.27 682.65 T ([83]) 190.34 694.65 T ({) 288.0 694.65 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 137 137 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (133 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 2 (Times-Roman) 10 1 mymakefontmetric 2 FF ([84]) 82.34 114.667 T 1 FF (netmemory_destr) 216.0 114.667 T (oy ) 291.35 114.667 T 2 FF (\() 303.85 114.667 T 3 (Times-Italic) 10 1 mymakefontmetric 3 FF (netmemory_contr) 307.18 114.667 T (ol) 377.27 114.667 T 2 FF (\);) 385.05 114.667 T ([85]) 82.34 126.667 T (return ) 216.0 126.667 T 3 FF (kr) 242.38 126.667 T 2 FF (;) 250.71 126.667 T ([86]) 82.34 138.667 T (}) 180.0 138.667 T ([87]) 82.34 150.667 T (}) 144.0 150.667 T 72 155.999939 360 9 CR 1 G 72 155.999939 360 9 NF 0 G 2 FF (/*) 91.224 162.831 T 3 SL 0 SC 0.6667 G 422.91 160.5 M 422.91 165.75 L 432 160.5 L 422.91 155.25 L F 422.91 160.5 M 108 160.5 L S 72 174.999924 360 9 CR 1 G 72 174.999924 360 9 NF 0 G 2 FF (*/) 90.0 181.826 T 0.6667 G 117.09 179.5 M 117.09 174.25 L 108 179.5 L 117.09 184.75 L F 432 179.5 M 117.09 179.5 L S 0 0 612 792 CR 0 G 2 FF (Cache the object locally) 144.0 171.667 T (. Note that e) 239.72 171.667 T (v) 288.351 171.667 T (en the master must do this.) 293.201 171.667 T ([88]) 82.34 192.667 T 3 FF (kr) 144.0 192.667 T 2 FF ( = ) 152.33 192.667 T 1 FF (netmemory_cache ) 162.97 192.667 T 2 FF (\() 243.22 192.667 T 3 FF (netmemory_server) 246.55 192.667 T 2 FF (, ) 320.57 192.667 T 3 FF (netmemory_object) 325.57 192.667 T 2 FF (, ) 399.44 192.667 T (&) 198.0 202.667 T 3 FF (memory_object) 205.78 202.667 T 2 FF (\);) 267.43 202.667 T ([89]) 82.34 214.667 T (if \() 144.0 214.667 T 3 FF (kr) 155.94 214.667 T 2 FF (\)) 164.27 214.667 T ([90]) 82.34 226.667 T (return ) 180.0 226.667 T 3 FF (kr) 206.38 226.667 T 2 FF (;) 214.71 226.667 T 72 231.999863 360 9 CR 1 G 72 231.999863 360 9 NF 0 G 2 FF (/*) 91.224 238.831 T 0.6667 G 422.91 236.5 M 422.91 241.75 L 432 236.5 L 422.91 231.25 L F 422.91 236.5 M 108 236.5 L S 72 250.999847 360 9 CR 1 G 72 250.999847 360 9 NF 0 G 2 FF (*/) 90.0 257.826 T 0.6667 G 117.09 255.5 M 117.09 250.25 L 108 255.5 L 117.09 260.75 L F 432 255.5 M 117.09 255.5 L S 0 0 612 792 CR 0 G 2 FF (Map the object, either an) 144.0 247.667 T (ywhere or at the supplied address.) 243.55 247.667 T ([91]) 82.34 268.667 T (if \() 144.0 268.667 T 3 FF (anywher) 155.94 268.667 T (e) 190.01 268.667 T 2 FF (\)) 194.45 268.667 T ([92]) 82.34 280.666 T (*) 180.0 280.666 T 3 FF (addr) 185.0 280.666 T (ess) 203.52 280.666 T 2 FF ( = 0;) 215.74 280.666 T 72 285.999817 360 9 CR 1 G 72 285.999817 360 9 NF 0 G 2 FF (/*) 90.0 292.831 T 0.6667 G 422.91 290.5 M 422.91 295.75 L 432 290.5 L 422.91 285.25 L F 422.91 290.5 M 288 290.5 L S 72 304.999817 360 9 CR 1 G 72 304.999817 360 9 NF 0 G 2 FF (*/) 90.0 311.826 T 0.6667 G 297.09 309.5 M 297.09 304.25 L 288 309.5 L 297.09 314.75 L F 432 309.5 M 297.09 309.5 L S 0 0 612 792 CR 0 G 2 FF (must be set) 288.0 301.666 T ([93]) 82.34 322.666 T (kr = ) 144.0 322.666 T 1 FF (vm_map ) 162.97 322.666 T 2 FF (\() 202.69 322.666 T 1 FF (mach_task_self ) 206.02 322.666 T 2 FF (\(\), ) 274.07 322.666 T 3 FF (addr) 285.73 322.666 T (ess) 304.25 322.666 T 2 FF (, ) 316.47 322.666 T 3 FF (size) 321.47 322.666 T 2 FF (, 0, ) 336.47 322.666 T 3 FF (anywher) 351.47 322.666 T (e) 385.54 322.666 T 2 FF (, ) 389.98 322.666 T 3 FF (memory_object) 198.0 332.666 T 2 FF (, 0, F) 259.65 332.666 T (ALSE, VM_PR) 279.47 332.666 T (O) 342.411 332.666 T (T_DEF) 349.231 332.666 T (A) 378.491 332.666 T (UL) 385.162 332.666 T (T) 397.572 332.666 T (, ) 402.942 332.666 T (VM_PR) 198.0 342.666 T (O) 230.94 342.666 T (T_DEF) 237.76 342.666 T (A) 267.021 342.666 T (UL) 273.691 342.666 T (T) 286.102 342.666 T (, VM_INHERIT_SHARE\);) 291.472 342.666 T ([94]) 82.34 354.666 T (if \() 144.0 354.666 T 3 FF (kr) 155.94 354.666 T 2 FF (\)) 164.27 354.666 T ([95]) 82.34 366.666 T (return ) 180.0 366.666 T 3 FF (kr) 206.38 366.666 T 2 FF (;) 214.71 366.666 T ([96]) 82.34 378.666 T (return KERN_SUCCESS;) 144.0 378.666 T ([97]) 82.34 390.666 T (}) 108.0 390.666 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 138 138 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 2 SC 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (134 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Netw) 180.0 55.824 T (ork Shar) 199.899 55.824 T (ed Memory Ser) 233.991 55.824 T (v) 293.382 55.824 T (er) 297.793 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 139 139 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 2 SL 3.86 setmiterlimit 0 G 432 45 M 72 45 L S 2 SC 432 342 M 72 342 L S 0.25 SL 432 720 M 72 720 L S 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (135 ) widthshow 0 0 612 792 CR 1 G 72 99 360 225 NF 0 G 2 (Times-Roman) 12 1 mymakefontmetric 2 FF 72 114.999969 M 1.19989 0 (APPENDIX A) ashow 3 (Times-Roman) 24 1 mymakefontmetric 3 FF 180 114.999969 M -0.479736 0 (MIG Language ) ashow 180 144.999924 M -0.479736 0 (Speci\336cation) ashow 1 G 72 360 360 344.015991 NF 0 G 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 72 366.666626 M 0.175934 0 32 (The syntax of speci\336cation \336les is gi) widthshow 219.465744 366.666626 M 0.175934 0 32 (v) widthshow 224.315826 366.666626 M 0.175934 0 32 (en semi-formally in what can be vie) widthshow 368.981567 366.666626 M 0.175934 0 32 (wed as a slight-) widthshow (ly e) 72.0 378.667 T (xtended conte) 86.57 378.667 T (xt free grammar) 142.24 378.667 T (. ) 206.11 378.667 T 72 402.666504 M 0.677826 0 32 (Meta language description: The right hand side of a production rule is indented from its) widthshow 72 414.666443 M 1.31076 0 32 (left hand side \(its heading\). T) widthshow 195.614197 414.666443 M 1.31076 0 32 (erminal symbols are in plain font. Non-terminal symbols) widthshow 72 426.666382 M 0.060684 0 32 (are in bold font. Symbols in italics are non-terminal symbols not de\336ned within the gram-) widthshow (mar b) 72.0 438.666 T (ut that ha) 94.85 438.666 T (v) 131.87 438.666 T (e ob) 136.72 438.666 T (vious de\336nitions:) 153.51 438.666 T 5 (Times-Roman) 7 1 mymakefontmetric 5 FF 72.0 456.666 T 6 (Times-Italic) 10 1 mymakefontmetric 6 FF (number) 85.536 456.666 T 4 FF ( - a string of digits from 0 to 9) 116.086 456.666 T 5 FF 72.0 471.666 T 6 FF 85.535995 471.666199 M 0.475189 0 32 (identi\336er) widthshow 4 FF 121.645996 471.666199 M 0.475189 0 32 ( - a name consisting of upper and lo) widthshow 268.50766 471.666199 M 0.475189 0 32 (wer case letters, digits 0 to 9 and under-) widthshow (scores, with the \336rst character being a letter or an underscore) 85.536 483.666 T 5 FF 72.0 498.666 T 6 FF 85.535995 498.666077 M 1.583633 0 32 (string) widthshow 4 FF 108.875992 498.666077 M 1.583633 0 32 ( - a string of letters, numbers, slashes, periods, underscores, dollar signs and) widthshow (dashes) 85.536 510.666 T 5 FF 72.0 525.666 T 6 FF 85.535995 525.665955 M 0.751953 0 32 (quotedstring) widthshow 4 FF 136.095993 525.665955 M 0.751953 0 32 ( - a string of arbitrary characters \(other than \323 and ne) widthshow 354.877655 525.665955 M 0.751953 0 32 (w-line\) surrounded) widthshow (by quotes) 85.536 537.666 T 5 FF 72.0 552.666 T 6 FF 85.535995 552.665833 M 1.068649 0 32 (anglestring) widthshow 4 FF 131.095993 552.665833 M 1.068649 0 32 ( - a string of arbitrary characters \(other than > and ne) widthshow 354.56131 552.665833 M 1.068649 0 32 (w-line\) surrounded) widthshow (by angle brack) 85.536 564.666 T (ets \(<>\)) 144.306 564.666 T 5 FF 72.0 579.666 T 6 FF 85.536 579.666 T 4 FF ( - a ) 119.416 579.666 T 6 FF (quotedstring ) 134.686 579.666 T 4 FF (or an ) 187.746 579.666 T 6 FF (anglestring) 210.516 579.666 T 4 FF (The symbol) 72.0 603.666 T 7 (Symbol) 12 1 mymakefontmetric 7 FF (e) 119.5 603.666 T 4 FF ( indicates an empty string.) 124.768 603.666 T 72 627.665588 M 0.69725 0 32 (Symbols within a single production are separated by blanks. Alternati) widthshow 356.885406 627.665588 M 0.69725 0 32 (v) widthshow 361.735474 627.665588 M 0.69725 0 32 (e productions are) widthshow (listed on consecuti) 72.0 639.666 T (v) 146.19 639.666 T (e lines under a production rule heading. ) 151.04 639.666 T 72 663.665466 M 1.958542 0 32 (Comments may be included in \322) widthshow 6 FF 210.952713 663.665466 M 1.958542 0 32 (.defs\323) widthshow 4 FF 235.122711 663.665466 M 1.958542 0 32 ( \336le if surrounded by \322/*\323 and \322*/\323. The) widthshow 410.331146 663.665466 M 1.958542 0 32 (y are) widthshow (parsed and remo) 72.0 675.665 T (v) 137.94 675.665 T (ed by ) 142.79 675.665 T 1 FF (cpp) 167.23 675.665 T 4 FF (. ) 182.79 675.665 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 140 140 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (136 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (MIG Language Speci\336cation) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 0.430634 0 32 (No attempt has been made to indicate in the grammar that types must be declared before) widthshow (the) 180.0 124.651 T (y are used. ) 192.07 124.651 T 0 FF (Statements) 180.0 154.651 T 4 (Symbol) 12 1 mymakefontmetric 4 FF (e) 216.0 178.65 T 0 FF (Statements) 216.0 202.65 T 3 FF ( ) 263.21 202.65 T 0 FF (Statement) 265.71 202.65 T 0 FF (Statement) 180.0 232.65 T 0 FF (Subsystem) 216.0 256.65 T 3 FF (;) 261.56 256.65 T 0 FF (W) 216.0 280.65 T (aitT) 225.35 280.65 T (ime) 242.95 280.65 T 3 FF (;) 258.5 280.65 T 0 FF (MsgOption) 216.0 304.65 T 3 FF (;) 264.34 304.65 T 0 FF (Ser) 216.0 328.65 T (v) 230.34 328.65 T (erPr) 235.24 328.65 T (e\336x) 254.49 328.65 T 3 FF (;) 269.49 328.65 T 0 FF (UserPr) 216.0 352.65 T (e\336x) 246.36 352.65 T 3 FF (;) 261.36 352.65 T 0 FF (Ser) 216.0 376.65 T (v) 230.34 376.65 T (erDemux) 235.24 376.65 T 3 FF (;) 274.67 376.65 T 0 FF (T) 216.0 400.65 T (ypeDecl) 221.93 400.65 T 3 FF (;) 255.81 400.65 T 0 FF (RoutineDecl) 216.0 424.65 T 3 FF (;) 268.77 424.65 T (skip;) 216.0 448.65 T 0 FF (Import) 216.0 472.65 T 3 FF (;) 246.55 472.65 T 0 FF (RCSDecl) 216.0 496.65 T 3 FF (;) 254.88 496.65 T (;) 216.0 520.65 T 0 FF (Subsystem) 180.0 550.65 T 3 FF (subsystem ) 216.0 574.65 T 0 FF (SubsystemMods SubsystemName) 260.17 574.65 T 3 FF ( ) 402.67 574.65 T 0 FF (SubsystemBase) 405.17 574.65 T 0 FF (SubsystemMods) 180.0 604.65 T 4 FF (e) 216.0 628.649 T 0 FF (SubsystemMods) 216.0 652.649 T 3 FF ( ) 285.45 652.649 T 0 FF (SubsystemMod) 287.95 652.649 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 141 141 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (137 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 1 FF (SubsystemMod) 72.0 114.667 T 2 (Times-Roman) 10 1 mymakefontmetric 2 FF (k) 108.0 138.667 T (erneluser) 112.9 138.667 T (k) 108.0 162.667 T (ernelserv) 112.9 162.667 T (er) 149.4 162.667 T 1 FF (SubsystemName) 72.0 192.666 T 3 (Times-Italic) 10 1 mymakefontmetric 3 FF (identi\336er) 108.0 216.666 T 2 FF ( ) 144.11 216.666 T 1 FF (SubsystemBase) 72.0 246.666 T 3 FF (number) 108.0 270.666 T 2 FF ( ) 138.55 270.666 T 1 FF (W) 72.0 300.666 T (aitT) 81.35 300.666 T (ime) 98.95 300.666 T 2 FF (w) 108.0 324.666 T (aittime ) 115.12 324.666 T 3 FF (string) 145.4 324.666 T 2 FF (no) 108.0 348.666 T (w) 117.75 348.666 T (aittime) 124.87 348.666 T 1 FF (MsgOption) 72.0 378.666 T 2 FF (msgoption ) 108.0 402.666 T 3 FF (string) 152.73 402.666 T 1 FF (Ser) 72.0 432.666 T (v) 86.34 432.666 T (erPr) 91.24 432.666 T (e\336x) 110.49 432.666 T 2 FF (serv) 108.0 456.666 T (erpre\336x ) 124.51 456.666 T 3 FF (identi\336er) 158.11 456.666 T 1 FF (UserPr) 72.0 486.666 T (e\336x) 102.36 486.666 T 2 FF (userpre\336x ) 108.0 510.666 T 3 FF (identi\336er) 150.49 510.666 T 1 FF (Ser) 72.0 540.666 T (v) 86.34 540.666 T (erDemux) 91.24 540.666 T 2 FF (serv) 108.0 564.666 T (erdemux ) 124.51 564.666 T 3 FF (identi\336er) 162.0 564.666 T 1 FF (Import) 72.0 594.666 T 1 FF (ImportIndicant) 108.0 618.666 T 2 FF ( ) 174.67 618.666 T 3 FF 177.17 618.666 T 1 FF (ImportIndicant) 72.0 648.665 T 2 FF (import) 108.0 672.665 T (uimport) 108.0 696.665 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 142 142 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (138 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (MIG Language Speci\336cation) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (simport) 216.0 112.651 T 0 FF (RCSDecl) 180.0 142.651 T 3 FF (rcsid ) 216.0 166.651 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (quotedstring) 237.94 166.651 T 0 FF (T) 180.0 196.65 T (ypeDecl) 185.93 196.65 T 3 FF (type ) 216.0 220.65 T 0 FF (NamedT) 235.72 220.65 T (ypeSpec) 272.2 220.65 T 0 FF (NamedT) 180.0 250.65 T (ypeSpec) 216.48 250.65 T 4 FF (identi\336er) 216.0 274.65 T 3 FF ( = ) 252.11 274.65 T 0 FF (T) 262.75 274.65 T (ransT) 268.68 274.65 T (ypeSpec) 293.501 274.65 T 0 FF (T) 180.0 304.65 T (ransT) 185.93 304.65 T (ypeSpec) 210.751 304.65 T 0 FF (T) 216.0 328.65 T (ypeSpec) 221.93 328.65 T 3 FF ( ) 256.93 328.65 T 0 FF (T) 216.0 352.65 T (ransT) 221.93 352.65 T (ypeSpec) 246.751 352.65 T 3 FF ( intran: ) 281.751 352.65 T 4 FF (identi\336er) 312.861 352.65 T 3 FF ( ) 348.971 352.65 T 4 FF (identi\336er) 351.471 352.65 T 3 FF ( \(i) 387.581 352.65 T 4 FF (denti\336er\)) 396.191 352.65 T 0 FF (T) 216.0 376.65 T (ransT) 221.93 376.65 T (ypeSpec) 246.751 376.65 T 3 FF ( outtran: ) 281.751 376.65 T 4 FF (identi\336er identi\336er) 317.861 376.65 T 3 FF ( \(i) 392.581 376.65 T 4 FF (denti\336er\)) 401.191 376.65 T 0 FF (T) 216.0 400.65 T (ransT) 221.93 400.65 T (ypeSpec) 246.751 400.65 T 3 FF ( destructor: ) 281.751 400.65 T 4 FF (identi\336er \(identi\336er\)) 329.521 400.65 T 0 FF (T) 216.0 424.65 T (ransT) 221.93 424.65 T (ypeSpec) 246.751 424.65 T 3 FF ( ctype: ) 281.751 424.65 T 4 FF (identi\336er) 311.191 424.65 T 0 FF (T) 216.0 448.65 T (ransT) 221.93 448.65 T (ypeSpec) 246.751 448.65 T 3 FF ( cusertype: ) 281.751 448.65 T 4 FF (identi\336er) 327.851 448.65 T 0 FF (T) 216.0 472.65 T (ransT) 221.93 472.65 T (ypeSpec) 246.751 472.65 T 3 FF ( cserv) 281.751 472.65 T (ertype: ) 305.201 472.65 T 4 FF (identi\336er) 335.471 472.65 T 0 FF (T) 180.0 502.65 T (ypeSpec) 185.93 502.65 T 0 FF (BasicT) 216.0 526.65 T (ypeSpec) 244.71 526.65 T 3 FF ( ) 279.71 526.65 T 0 FF (Pr) 216.0 550.65 T (e) 226.37 550.65 T (vT) 230.66 550.65 T (ypeSpec) 241.591 550.65 T 3 FF ( ) 276.591 550.65 T 0 FF (V) 216.0 574.65 T (arArrayHead) 222.301 574.65 T 3 FF ( ) 280.621 574.65 T 0 FF (T) 283.121 574.65 T (ypeSpec) 289.051 574.65 T (ArrayHead) 216.0 598.65 T 3 FF ( ) 264.88 598.65 T 0 FF (T) 267.38 598.65 T (ypeSpec) 273.31 598.65 T 3 FF (^ ) 216.0 622.65 T 0 FF (T) 223.19 622.65 T (ypeSpec) 229.12 622.65 T (StructHead) 216.0 646.649 T 3 FF ( ) 265.44 646.649 T 0 FF (T) 267.94 646.649 T (ypeSpec) 273.87 646.649 T (CStringSpec) 216.0 670.649 T 3 FF ( ) 269.89 670.649 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 143 143 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (139 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 1 FF (BasicT) 72.0 114.667 T (ypeSpec) 100.71 114.667 T 1 FF (IPCT) 108.0 138.667 T (ype) 131.15 138.667 T 2 (Times-Roman) 10 1 mymakefontmetric 2 FF ( ) 146.15 138.667 T 2 FF (\(I) 108.0 162.667 T 1 FF (PCT) 114.66 162.667 T (ype,) 133.92 162.667 T 2 FF ( ) 151.42 162.667 T 1 FF (IntExp IPCFlags) 153.92 162.667 T 2 FF (\)) 226.43 162.667 T 1 FF (IPCT) 72.0 192.666 T (ype) 95.15 192.666 T 1 FF (PrimIPCT) 108.0 216.666 T (ype) 152.81 216.666 T 2 FF ( ) 167.81 216.666 T 1 FF (PrimIPCT) 108.0 240.666 T (ype) 152.81 240.666 T 2 FF ( | ) 167.81 240.666 T 1 FF (PrimIPCT) 174.81 240.666 T (ype) 219.621 240.666 T 1 FF (PrimIPCT) 72.0 270.666 T (ype) 116.81 270.666 T 3 (Times-Italic) 10 1 mymakefontmetric 3 FF (number) 108.0 294.666 T 2 FF ( ) 138.55 294.666 T 2 FF (polymorphic) 108.0 318.666 T (MA) 108.0 342.666 T (CH_MSG_TYPE_UNSTR) 123.71 342.666 T (UCTURED) 231.65 342.666 T (MA) 108.0 366.666 T (CH_MSG_TYPE_BIT) 123.71 366.666 T (MA) 108.0 390.666 T (CH_MSG_TYPE_BOOLEAN) 123.71 390.666 T (MA) 108.0 414.666 T (CH_MSG_TYPE_INTEGER_8) 123.71 414.666 T (MA) 108.0 438.666 T (CH_MSG_TYPE_INTEGER_16) 123.71 438.666 T (MA) 108.0 462.666 T (CH_MSG_TYPE_INTEGER_32) 123.71 462.666 T (MA) 108.0 486.666 T (CH_MSG_TYPE_CHAR) 123.71 486.666 T (MA) 108.0 510.666 T (CH_MSG_TYPE_BYTE) 123.71 510.666 T (MA) 108.0 534.666 T (CH_MSG_TYPE_REAL) 123.71 534.666 T (MA) 108.0 558.666 T (CH_MSG_TYPE_STRING) 123.71 558.666 T (MA) 108.0 582.666 T (CH_MSG_TYPE_STRING_C) 123.71 582.666 T (MA) 108.0 606.666 T (CH_MSG_TYPE_POR) 123.71 606.666 T (T_N) 218.121 606.666 T (AME) 236.101 606.666 T (MA) 108.0 630.665 T (CH_MSG_TYPE_POL) 123.71 630.665 T (YMORPHIC) 217.161 630.665 T (MA) 108.0 654.665 T (CH_MSG_TYPE_MO) 123.71 654.665 T (VE_RECEIVE) 214.88 654.665 T (MA) 108.0 678.665 T (CH_MSG_TYPE_COPY_SEND) 123.71 678.665 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 144 144 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (140 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (MIG Language Speci\336cation) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (MA) 216.0 112.651 T (CH_MSG_TYPE_MAKE_SEND) 231.71 112.651 T (MA) 216.0 136.651 T (CH_MSG_TYPE_MO) 231.71 136.651 T (VE_SEND) 322.88 136.651 T (MA) 216.0 160.651 T (CH_MSG_TYPE_MAKE_SEND_ONCE) 231.71 160.651 T (MA) 216.0 184.65 T (CH_MSG_TYPE_MO) 231.71 184.65 T (VE_SEND_ONCE) 322.88 184.65 T (MA) 216.0 208.65 T (CH_MSG_TYPE_POR) 231.71 208.65 T (T_RECEIVE) 326.121 208.65 T (MA) 216.0 232.65 T (CH_MSG_TYPE_POR) 231.71 232.65 T (T_SEND) 326.121 232.65 T (MA) 216.0 256.65 T (CH_MSG_TYPE_POR) 231.71 256.65 T (T_SEND_ONCE) 326.121 256.65 T 0 FF (IPCFlags) 180.0 286.65 T 4 (Symbol) 12 1 mymakefontmetric 4 FF (e) 216.0 310.65 T 0 FF (IPCFlags) 216.0 334.65 T 3 FF (, serv) 256.0 334.65 T (ercop) 277.51 334.65 T (y) 299.62 334.65 T 0 FF (IPCFlags) 216.0 358.65 T 3 FF (, islong) 256.0 358.65 T 0 FF (IPCFlags,) 216.0 382.65 T 3 FF ( isnotlong) 258.5 382.65 T 0 FF (IPCFlags) 216.0 406.65 T 3 FF (, notdealloc) 256.0 406.65 T 0 FF (IPCFlags) 216.0 430.65 T 3 FF (, dealloc) 256.0 430.65 T 0 FF (IPCFlags,) 216.0 454.65 T 3 FF ( dealloc []) 258.5 454.65 T 0 FF (IPCFlags,) 216.0 478.65 T 3 FF ( countinout) 258.5 478.65 T 0 FF (Pr) 180.0 508.65 T (e) 190.37 508.65 T (vT) 194.66 508.65 T (ypeSpec) 205.591 508.65 T 5 (Times-Italic) 10 1 mymakefontmetric 5 FF (identi\336er) 216.0 532.65 T 3 FF ( ) 252.11 532.65 T 0 FF (V) 180.0 562.65 T (arArrayHead) 186.301 562.65 T 3 FF (array [] of) 216.0 586.65 T (array [*] of) 216.0 610.65 T (array [*: ) 216.0 634.649 T 0 FF (IntExp) 252.65 634.649 T 3 FF (] of) 282.66 634.649 T 0 FF (ArrayHead) 180.0 664.649 T 3 FF (array [I) 216.0 688.649 T 0 FF (ntExp) 245.7 688.649 T 3 FF (] of) 271.82 688.649 T 558 471.983154 2 9.999985 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 145 145 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (141 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 1 FF (StructHead) 72.0 114.667 T 2 (Times-Roman) 10 1 mymakefontmetric 2 FF (struct [I) 108.0 138.667 T 1 FF (ntExp) 139.38 138.667 T 2 FF (] of) 165.5 138.667 T 1 FF (CStringSpec) 72.0 168.667 T 2 FF (c_string [I) 108.0 192.666 T 1 FF (ntExp) 149.38 192.666 T 2 FF (]) 175.5 192.666 T (c_string [*: I) 108.0 216.666 T 1 FF (ntExp) 159.66 216.666 T 2 FF (]) 185.78 216.666 T 1 FF (IntExp) 72.0 246.666 T 1 FF (IntExp) 108.0 270.666 T 2 FF (+ ) 138.01 270.666 T 1 FF (IntExp) 146.15 270.666 T (IntExp) 108.0 294.666 T 2 FF 138.01 294.666 T 1 FF (IntExp) 145.51 294.666 T (IntExp) 108.0 318.666 T 2 FF (* ) 138.01 318.666 T 1 FF (IntExp) 145.51 318.666 T (IntExp) 108.0 342.666 T 2 FF (/ ) 138.01 342.666 T 1 FF (IntExp) 143.29 342.666 T 3 (Times-Italic) 10 1 mymakefontmetric 3 FF (number) 108.0 366.666 T 2 FF ( ) 138.55 366.666 T 2 FF (\(I) 108.0 390.666 T 1 FF (ntExp) 114.66 390.666 T 2 FF (\)) 140.78 390.666 T 1 FF (RoutineDecl) 72.0 420.666 T 2 FF (Routine) 108.0 444.666 T (SimpleRoutine) 108.0 468.666 T 1 FF (Routine) 72.0 498.666 T 2 FF (routine ) 108.0 522.666 T 3 FF (identi\336er) 138.83 522.666 T 2 FF ( ) 174.94 522.666 T 1 FF (Ar) 177.44 522.666 T (guments) 189.0 522.666 T 1 FF (SimpleRoutine) 72.0 552.666 T 2 FF (simpleroutine ) 108.0 576.666 T 3 FF (identi\336er) 165.5 576.666 T 2 FF ( ) 201.61 576.666 T 1 FF (Ar) 204.11 576.666 T (guments) 215.67 576.666 T 2 FF (A) 72.0 606.666 T 1 FF (r) 79.22 606.666 T (guments) 83.56 606.666 T 2 FF (\(\)) 108.0 630.665 T (\(A) 108.0 654.665 T 1 FF (r) 118.55 654.665 T (gumentList) 122.89 654.665 T 2 FF (\)) 171.78 654.665 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 146 146 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (142 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (MIG Language Speci\336cation) 180.0 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 0 FF (Ar) 180.0 112.651 T (gumentList) 191.56 112.651 T 0 FF (Ar) 216.0 136.651 T (gument) 227.56 136.651 T 3 (Times-Roman) 10 1 mymakefontmetric 3 FF ( ) 259.78 136.651 T 0 FF (Ar) 216.0 160.651 T (gument;) 227.56 160.651 T 3 FF ( ) 263.11 160.651 T 0 FF (Ar) 265.61 160.651 T (gumentList) 277.17 160.651 T 0 FF (Ar) 180.0 190.65 T (gument) 191.56 190.65 T 0 FF (Dir) 216.0 214.65 T (ection) 230.26 214.65 T 3 FF ( ) 255.81 214.65 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (identi\336er) 258.31 214.65 T 3 FF ( ) 294.42 214.65 T 0 FF (Ar) 296.92 214.65 T (gumentT) 308.48 214.65 T (ype) 346.631 214.65 T 3 FF ( ) 361.631 214.65 T 0 FF (IPCFlags) 364.131 214.65 T 0 FF (Dir) 180.0 244.65 T (ection) 194.26 244.65 T 5 (Symbol) 12 1 mymakefontmetric 5 FF (e) 216.0 268.65 T 3 FF (in) 216.0 292.65 T (out) 216.0 316.65 T (inout) 216.0 340.65 T (requestport) 216.0 364.65 T (replyport) 216.0 388.65 T (sreplyport) 216.0 412.65 T (ureplyport) 216.0 436.65 T (w) 216.0 460.65 T (aittime) 223.12 460.65 T (msgoption) 216.0 484.65 T (msgseqno) 216.0 508.65 T 0 FF (Ar) 180.0 538.65 T (gumentT) 191.56 538.65 T (ype) 229.71 538.65 T 3 FF (: ) 216.0 562.65 T 4 FF (identi\336er) 221.28 562.65 T 3 FF (: ) 216.0 586.65 T 0 FF (NamedT) 221.28 586.65 T (ypeSpec) 257.76 586.65 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 147 147 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 2 SL 3.86 setmiterlimit 0 G 432 45 M 72 45 L S 2 SC 432 342 M 72 342 L S 0.25 SL 432 720 M 72 720 L S 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Kernel Interfaces) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (143 ) widthshow 0 0 612 792 CR 1 G 72 99 360 225 NF 0 G 2 (Times-Roman) 12 1 mymakefontmetric 2 FF 72 115 M 1.19989 0 (APPENDIX B) ashow 3 (Times-Roman) 24 1 mymakefontmetric 3 FF 180 115 M -0.479736 0 (Standard MIG T) ashow 330.004761 115 M -0.479736 0 (ypes) ashow 1 G 72 360 360 344.015991 NF 0 G 4 (Times-Roman) 10 1 mymakefontmetric 4 FF (This appendix pro) 72.0 366.667 T (vides the de\336nition of the standard MIG data types.) 144.62 366.667 T 72 408.999878 360 3.024002 CR 432 410.51 M 72 410.51 L S 0 0 612 792 CR 5 (Times-Bold) 14 1 mymakefontmetric 5 FF (IPC T) 72.0 404.333 T (ypenames) 107.911 404.333 T 4 FF 72 428.690491 M 0.255768 0 32 (MIG internally de\336nes the follo) widthshow 199.983215 428.690491 M 0.255768 0 32 (wing ) widthshow 1 FF 222.738983 428.690491 M 0.255768 0 32 (ipc-typenames) widthshow 4 FF 284.398987 428.690491 M 0.255768 0 32 ( in terms of their Mach IPC counter-) widthshow 72 440.69043 M 0.383484 0 32 (parts. These types are almost ne) widthshow 201.417572 440.69043 M 0.383484 0 32 (v) widthshow 206.267654 440.69043 M 0.383484 0 32 (er directly used as the type in an ar) widthshow 348.565643 440.69043 M 0.383484 0 32 (gument speci\336cation) widthshow (because their type names do not ha) 72.0 452.69 T (v) 211.77 452.69 T (e corresponding named C data types.) 216.62 452.69 T (type MA) 108.0 476.69 T (CH_MSG_TYPE_BOOLEAN = ) 143.43 476.69 T (\(MA) 162.0 488.69 T (CH_MSG_TYPE_BOOLEAN,32\);) 181.04 488.69 T (type MA) 108.0 512.69 T (CH_MSG_TYPE_INTEGER_32 = ) 143.43 512.69 T (\(MA) 162.0 524.69 T (CH_MSG_TYPE_INTEGER_32,32\);) 181.04 524.69 T (type MA) 108.0 548.69 T (CH_MSG_TYPE_INTEGER_16 = ) 143.43 548.69 T (\(MA) 162.0 560.69 T (CH_MSG_TYPE_INTEGER_16,16\);) 181.04 560.69 T (type MA) 108.0 584.69 T (CH_MSG_TYPE_INTEGER_8 = ) 143.43 584.69 T (\(MA) 162.0 596.69 T (CH_MSG_TYPE_INTEGER_8,8\);) 181.04 596.69 T (type MA) 108.0 620.69 T (CH_MSG_TYPE_CHAR = \(MA) 143.43 620.69 T (CH_MSG_TYPE_CHAR,8\);) 276.45 620.69 T (type MA) 108.0 644.69 T (CH_MSG_TYPE_BYTE = \(MA) 143.43 644.69 T (CH_MSG_TYPE_BYTE,8\);) 274.78 644.69 T (type MA) 108.0 668.69 T (CH_MSG_TYPE_BIT = \(MA) 143.43 668.69 T (CH_MSG_TYPE_BIT) 264.78 668.69 T (,1\);) 355.711 668.69 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 148 148 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (144 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Kernel Interfaces) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Standard MIG T) 180.0 55.824 T (ypes) 244.846 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650635 M 1.204681 0 32 (This ne) widthshow 210.774765 112.650635 M 1.204681 0 32 (xt type does not de\336ne the passage of a port right, merely the name of a right.) widthshow (That is, this de\336nes a suf) 180.0 124.651 T 279.19 124.651 T (ge inte) 324.84 124.651 T (ger type to hold a port name.) 351.63 124.651 T (type MA) 216.0 148.651 T (CH_MSG_TYPE_POR) 251.43 148.651 T (T_N) 345.841 148.651 T (AME = ) 363.821 148.651 T (\(MA) 270.0 160.65 T (CH_MSG_TYPE_POR) 289.04 160.65 T (T_N) 383.451 160.65 T (AME,32\);) 401.431 160.65 T 180 184.650391 M 0.473053 0 32 (The follo) widthshow 217.163193 184.650391 M 0.473053 0 32 (wing types do not ha) widthshow 302.185516 184.650391 M 0.473053 0 32 (v) widthshow 307.035583 184.650391 M 0.473053 0 32 (e their length speci\336ed, and so must be used in their long) widthshow (form \(\322\() 180.0 196.65 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (ipc-typename) 213.04 196.65 T 3 FF (, ) 266.91 196.65 T 4 FF (size) 271.91 196.65 T 3 FF (\)\323\) in type or ar) 286.91 196.65 T (gument declarations.) 348.93 196.65 T (type MA) 216.0 220.65 T (CH_MSG_TYPE_REAL = \(MA) 251.43 220.65 T (CH_MSG_TYPE_REAL,0\);) 382.78 220.65 T (type MA) 216.0 244.65 T (CH_MSG_TYPE_STRING = \(MA) 251.43 244.65 T (CH_MSG_TYPE_STRING,0\);) 392.78 244.65 T (type MA) 216.0 268.65 T (CH_MSG_TYPE_STRING_C = ) 251.43 268.65 T (\(MA) 270.0 280.65 T (CH_MSG_TYPE_STRING_C,0\);) 289.04 280.65 T (type MA) 216.0 304.65 T (CH_MSG_TYPE_UNSTR) 251.43 304.65 T (UCTURED = ) 359.37 304.65 T (\(MA) 270.0 316.65 T (CH_MSG_TYPE_UNSTR) 289.04 316.65 T (UCTURED,0\);) 396.98 316.65 T (type MA) 216.0 340.65 T (CH_MSG_TYPE_POL) 251.43 340.65 T (YMORPHIC = ) 344.881 340.65 T (\(MA) 270.0 352.65 T (CH_MSG_TYPE_POL) 289.04 352.65 T (YMORPHIC,0\);) 382.491 352.65 T 180 376.64978 M 1.912155 0 32 (Note that the Mach IPC type for MA) widthshow 340.465332 376.64978 M 1.912155 0 32 (CH_MSG_TYPE_STRING and MA) widthshow 491.109863 376.64978 M 1.912155 0 32 (CH_MSG_-) widthshow (TYPE_STRING_C are the same.) 180.0 388.65 T 180 412.649658 M 0.73764 0 32 (The follo) widthshow 217.42778 412.649658 M 0.73764 0 32 (wing type dif) widthshow 271.983215 412.649658 M 0.73764 0 32 (fers from MA) widthshow 328.598694 412.649658 M 0.73764 0 32 (CH_MSG_TYPE_P) widthshow 409.718689 412.649658 M 0.73764 0 32 (OL) widthshow 422.049255 412.649658 M 0.73764 0 32 (YMORPHIC in that it speci-) widthshow 180.0 424.65 T (type ) 216.0 448.65 T 4 FF (polymorphic) 235.72 448.65 T 3 FF ( = \(MA) 286.27 448.65 T (CH_MSG_TYPE_POL) 315.95 448.65 T (YMORPHIC, 32\);) 409.401 448.65 T (The follo) 180.0 472.649 T (wing IPC types correspond to the standard treatment of port right passage.) 216.69 472.649 T (type MA) 216.0 496.649 T (CH_MSG_TYPE_MO) 251.43 496.649 T (VE_RECEIVE = ) 342.6 496.649 T (\(MA) 270.0 508.649 T (CH_MSG_TYPE_MO) 289.04 508.649 T (VE_RECEIVE | ) 380.21 508.649 T (MA) 270.0 520.649 T (CH_MSG_TYPE_POR) 285.71 520.649 T (T_RECEIVE,32\);) 380.121 520.649 T (type MA) 216.0 544.649 T (CH_MSG_TYPE_COPY_SEND = ) 251.43 544.649 T (\(MA) 270.0 556.649 T (CH_MSG_TYPE_COPY_SEND | ) 289.04 556.649 T (MA) 270.0 568.649 T (CH_MSG_TYPE_POR) 285.71 568.649 T (T_SEND,32\);) 380.121 568.649 T (type MA) 216.0 592.649 T (CH_MSG_TYPE_MAKE_SEND = ) 251.43 592.649 T (\(MA) 270.0 604.649 T (CH_MSG_TYPE_MAKE_SEND | ) 289.04 604.649 T (MA) 270.0 616.649 T (CH_MSG_TYPE_POR) 285.71 616.649 T (T_SEND,32\);) 380.121 616.649 T (type MA) 216.0 640.649 T (CH_MSG_TYPE_MO) 251.43 640.649 T (VE_SEND = ) 342.6 640.649 T (\(MA) 270.0 652.649 T (CH_MSG_TYPE_MO) 289.04 652.649 T (VE_SEND | ) 380.21 652.649 T (MA) 270.0 664.649 T (CH_MSG_TYPE_POR) 285.71 664.649 T (T_SEND,32\);) 380.121 664.649 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 149 149 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Kernel Interfaces) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (145 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Standard De\336ned T) 72.0 55.824 T (ypes) 147.349 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (type MA) 108.0 114.667 T (CH_MSG_TYPE_MAKE_SEND_ONCE = ) 143.43 114.667 T (\(MA) 162.0 126.667 T (CH_MSG_TYPE_MAKE_SEND_ONCE | ) 181.04 126.667 T (MA) 162.0 138.667 T (CH_MSG_TYPE_POR) 177.71 138.667 T (T_SEND_ONCE,32\);) 272.121 138.667 T (type MA) 108.0 162.666 T (CH_MSG_TYPE_MO) 143.43 162.666 T (VE_SEND_ONCE = ) 234.6 162.666 T (\(MA) 162.0 174.666 T (CH_MSG_TYPE_MO) 181.04 174.666 T (VE_SEND_ONCE | ) 272.21 174.666 T (MA) 162.0 186.666 T (CH_MSG_TYPE_POR) 177.71 186.666 T (T_SEND_ONCE,32\);) 272.121 186.666 T 72 210.66626 M 0.805923 0 32 (Note that the recei) widthshow 147.757919 210.66626 M 0.805923 0 32 (v) widthshow 152.608002 210.66626 M 0.805923 0 32 (er al) widthshow 170.803986 210.66626 M 0.805923 0 32 (w) widthshow 177.924042 210.66626 M 0.805923 0 32 (ays sees a Mach IPC type of ..._POR) widthshow 330.72583 210.66626 M 0.805923 0 32 (T_... Mach IPC does not) widthshow 72 222.666199 M 0.622589 0 32 (indicate to the recei) widthshow 152.207916 222.666199 M 0.622589 0 32 (v) widthshow 157.057999 222.666199 M 0.622589 0 32 (er whether the right w) widthshow 247.758423 222.666199 M 0.622589 0 32 (as made or mo) widthshow 308.076294 222.666199 M 0.622589 0 32 (v) widthshow 312.926361 222.666199 M 0.622589 0 32 (ed when sent. The sender) widthshow 416.376953 222.666199 M 0.622589 0 32 (, on) widthshow (the other hand, must specify the beha) 72.0 234.666 T (vior) 220.94 234.666 T (.) 236.5 234.666 T 72 258.666077 M 0.749161 0 32 (The follo) widthshow 109.439301 258.666077 M 0.749161 0 32 (wing IPC types de\336ne the ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 219.015106 258.666077 M 0.749161 0 32 (polymorphic) widthshow 3 FF 269.565125 258.666077 M 0.749161 0 32 ( right passage; that is, where the sender) widthshow 72 270.666016 M 0.529968 0 32 (must specify an additional parameter that pro) widthshow 256.109924 270.666016 M 0.529968 0 32 (vides the actual IPC type of the right being) widthshow (sent.) 72.0 282.666 T (type MA) 108.0 306.666 T (CH_MSG_TYPE_POR) 143.43 306.666 T (T_RECEIVE = ) 237.841 306.666 T (\(MA) 162.0 318.666 T (CH_MSG_TYPE_POL) 181.04 318.666 T (YMORPHIC | ) 274.491 318.666 T (MA) 162.0 330.666 T (CH_MSG_TYPE_POR) 177.71 330.666 T (T_RECEIVE,32\);) 272.121 330.666 T (type MA) 108.0 354.666 T (CH_MSG_TYPE_POR) 143.43 354.666 T (T_SEND = ) 237.841 354.666 T (\(MA) 162.0 366.666 T (CH_MSG_TYPE_POL) 181.04 366.666 T (YMORPHIC | ) 274.491 366.666 T (MA) 162.0 378.666 T (CH_MSG_TYPE_POR) 177.71 378.666 T (T_SEND,32\);) 272.121 378.666 T (type MA) 108.0 402.666 T (CH_MSG_TYPE_POR) 143.43 402.666 T (T_SEND_ONCE = ) 237.841 402.666 T (\(MA) 162.0 414.665 T (CH_MSG_TYPE_POL) 181.04 414.665 T (YMORPHIC | ) 274.491 414.665 T (MA) 162.0 426.665 T (CH_MSG_TYPE_POR) 177.71 426.665 T (T_SEND_ONCE,32\);) 272.121 426.665 T 72 468.998657 360 3.024002 CR 432 470.51 M 72 470.51 L S 0 0 612 792 CR 5 (Times-Bold) 14 1 mymakefontmetric 5 FF (Standard De\336ned T) 72.0 464.332 T (ypes) 189.209 464.332 T 3 FF 72 488.68927 M 0.233261 0 32 (The follo) widthshow 108.923401 488.68927 M 0.233261 0 32 (wing types are de\336ned in ) widthshow 1 FF 213.129715 488.68927 M 0.233261 0 32 () widthshow 3 FF 310.359711 488.68927 M 0.233261 0 32 (. These types are used in pref-) widthshow 72 500.689209 M 1.285782 0 32 (erence to MIG internally de\336ned types because these types ha) widthshow 330.812195 500.689209 M 1.285782 0 32 (v) widthshow 335.662262 500.689209 M 1.285782 0 32 (e corresponding C data) widthshow (types, or ha) 72.0 512.689 T (v) 118.18 512.689 T (e the corresponding C data type named e) 123.03 512.689 T (xplicitly) 285.9 512.689 T (.) 318.591 512.689 T 6 (Times-Bold) 12 1 mymakefontmetric 6 FF (Integer and Data T) 72.0 544.022 T (ypes) 169.44 544.022 T 3 FF (type ) 108.0 568.689 T 4 FF (c) 127.72 568.689 T (har) 132.01 568.689 T 3 FF ( = MA) 145.9 568.689 T (CH_MSG_TYPE_CHAR;) 172.25 568.689 T (type ) 108.0 592.689 T 4 FF (short) 127.72 592.689 T 3 FF ( = MA) 148.28 592.689 T (CH_MSG_TYPE_INTEGER_16;) 174.63 592.689 T (type ) 108.0 616.689 T 4 FF (int) 127.72 616.689 T 3 FF ( = MA) 138.28 616.689 T (CH_MSG_TYPE_INTEGER_32;) 164.63 616.689 T (type ) 108.0 640.689 T 4 FF (boolean_t) 127.72 640.689 T 3 FF ( = MA) 167.72 640.689 T (CH_MSG_TYPE_BOOLEAN;) 194.07 640.689 T (type ) 108.0 664.689 T 4 FF (unsigned) 127.72 664.689 T 3 FF ( = MA) 163.83 664.689 T (CH_MSG_TYPE_INTEGER_32;) 190.18 664.689 T (type ) 108.0 688.689 T 4 FF (pointer_t) 127.72 688.689 T 3 FF ( = ^array[] of MA) 164.39 688.689 T (CH_MSG_TYPE_BYTE;) 235.96 688.689 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 150 150 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (146 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Kernel Interfaces) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Standard MIG T) 180.0 55.824 T (ypes) 244.846 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Bold) 12 1 mymakefontmetric 3 FF (P) 180.0 113.984 T (ort Right T) 187.092 113.984 T (ypes) 244.201 113.984 T 4 (Times-Roman) 10 1 mymakefontmetric 4 FF (The follo) 180.0 130.651 T (wing types de\336ne actual port rights to be passed.) 216.69 130.651 T 180 154.650528 M 0.289917 0 32 (The ne) widthshow 207.630005 154.650528 M 0.289917 0 32 (xt types de\336ne passage of speci\336c rights. Note that ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 415.769287 154.650528 M 0.289917 0 32 (mac) widthshow 432.279358 154.650528 M 0.289917 0 32 (h_port_t) widthshow 4 FF 466.72937 154.650528 M 0.289917 0 32 ( def) widthshow 482.189331 154.650528 M 0.289917 0 32 (aults to a send) widthshow (right cop) 180.0 166.65 T (y) 215.73 166.65 T (.) 220.08 166.65 T (type ) 216.0 190.65 T 5 FF (mac) 235.72 190.65 T (h_port_t) 252.23 190.65 T 4 FF ( = MA) 286.68 190.65 T (CH_MSG_TYPE_COPY_SEND;) 313.03 190.65 T (type ) 216.0 214.65 T 5 FF (mac) 235.72 214.65 T (h_port_arr) 252.23 214.65 T (ay_t) 296.53 214.65 T 4 FF ( = array[] of ) 313.75 214.65 T 5 FF (mac) 364.92 214.65 T (h_port_t) 381.43 214.65 T 4 FF (;) 415.88 214.65 T (type ) 216.0 238.65 T 5 FF (mac) 235.72 238.65 T (h_port_mo) 252.23 238.65 T (ve_r) 296.02 238.65 T (eceive_t) 313.42 238.65 T 4 FF ( = MA) 346.18 238.65 T (CH_MSG_TYPE_MO) 372.531 238.65 T (VE_RECEIVE ) 463.701 238.65 T (ctype: ) 270.0 250.65 T 5 FF (mac) 296.94 250.65 T (h_port_t) 313.45 250.65 T 4 FF (;) 347.9 250.65 T (type ) 216.0 274.65 T 5 FF (mac) 235.72 274.65 T (h_port_copy_send_t) 252.23 274.65 T 4 FF ( = MA) 333.89 274.65 T (CH_MSG_TYPE_COPY_SEND ctype: ) 360.24 274.65 T 5 FF (mac) 270.0 286.65 T (h_port_t) 286.51 286.65 T 4 FF (;) 320.96 286.65 T (type ) 216.0 310.65 T 5 FF (mac) 235.72 310.65 T (h_port_mak) 252.23 310.65 T (e_send_t) 300.46 310.65 T 4 FF ( = MA) 336.01 310.65 T (CH_MSG_TYPE_MAKE_SEND ctype: ) 362.36 310.65 T 5 FF (mac) 270.0 322.65 T (h_port_t) 286.51 322.65 T 4 FF (;) 320.96 322.65 T (type ) 216.0 346.65 T 5 FF (mac) 235.72 346.65 T (h_port_mo) 252.23 346.65 T (ve_send_t) 296.02 346.65 T 4 FF ( = MA) 336.01 346.65 T (CH_MSG_TYPE_MO) 362.36 346.65 T (VE_SEND ctype: ) 453.531 346.65 T 5 FF (mac) 270.0 358.65 T (h_port_t) 286.51 358.65 T 4 FF (;) 320.96 358.65 T (type ) 216.0 382.65 T 5 FF (mac) 235.72 382.65 T (h_port_mak) 252.23 382.65 T (e_send_once_t) 300.46 382.65 T 4 FF ( = ) 359.89 382.65 T (MA) 270.0 394.65 T (CH_MSG_TYPE_MAKE_SEND_ONCE ctype: ) 285.71 394.65 T 5 FF (mac) 483.48 394.65 T (h_port_t) 499.99 394.65 T 4 FF (;) 534.44 394.65 T (type ) 216.0 418.65 T 5 FF (mac) 235.72 418.65 T (h_port_mo) 252.23 418.65 T (ve_send_once_t) 296.02 418.65 T 4 FF ( = ) 359.89 418.65 T (MA) 270.0 430.65 T (CH_MSG_TYPE_MO) 285.71 430.65 T (VE_SEND_ONCE ctype: ) 376.88 430.65 T 5 FF (mac) 482.98 430.65 T (h_port_t) 499.491 430.65 T 4 FF (;) 533.941 430.65 T 180 454.649658 M 0.800858 0 32 (The ne) widthshow 208.140945 454.649658 M 0.800858 0 32 (xt types de\336ne the polymorphic rights passage\321those requiring an additional ar-) widthshow (gument to the MIG stub to specify the actual type of right being passed.) 180.0 466.65 T (type ) 216.0 490.65 T 5 FF (mac) 235.72 490.65 T (h_port_r) 252.23 490.65 T (eceive_t) 287.42 490.65 T 4 FF ( = MA) 320.18 490.65 T (CH_MSG_TYPE_POR) 346.531 490.65 T (T_RECEIVE ctype: ) 440.941 490.65 T 5 FF (mac) 270.0 502.649 T (h_port_t) 286.51 502.649 T 4 FF (;) 320.96 502.649 T (type ) 216.0 526.649 T 5 FF (mac) 235.72 526.649 T (h_port_send_t) 252.23 526.649 T 4 FF ( = MA) 310.01 526.649 T (CH_MSG_TYPE_POR) 336.36 526.649 T (T_SEND ctype: ) 430.771 526.649 T 5 FF (mac) 270.0 538.649 T (h_port_t) 286.51 538.649 T 4 FF (;) 320.96 538.649 T (type ) 216.0 562.649 T 5 FF (mac) 235.72 562.649 T (h_port_send_once_t) 252.23 562.649 T 4 FF ( = MA) 333.89 562.649 T (CH_MSG_TYPE_POR) 360.24 562.649 T (T_SEND_ONCE ) 454.651 562.649 T (ctype: ) 270.0 574.649 T 5 FF (mac) 296.94 574.649 T (h_port_t) 313.45 574.649 T 4 FF (;) 347.9 574.649 T 180 598.64917 M 0.214081 0 32 (This last port right type de\336nes a port right that is polymorphic to both the sender and re-) widthshow (cei) 180.0 610.649 T (v) 191.41 610.649 T (er:) 196.26 610.649 T (type ) 216.0 634.649 T 5 FF (mac) 235.72 634.649 T (h_port_poly_t) 252.23 634.649 T 4 FF ( = ) 308.9 634.649 T 5 FF (polymorphic) 319.54 634.649 T 4 FF ( ctype: ) 370.09 634.649 T 5 FF (mac) 399.53 634.649 T (h_port_t) 416.04 634.649 T 4 FF (;) 450.49 634.649 T 3 FF (IPC Data V) 180.0 665.982 T (alues) 238.885 665.982 T 4 FF (type ) 216.0 690.649 T 5 FF (k) 235.72 690.649 T (ern_r) 240.06 690.649 T (eturn_t) 261.91 690.649 T 4 FF ( = ) 290.8 690.649 T 5 FF (int) 301.44 690.649 T 4 FF (;) 312.0 690.649 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 151 151 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Kernel Interfaces) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (147 ) widthshow 1 G 72 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Standard De\336ned T) 72.0 55.824 T (ypes) 147.349 55.824 T 0.25 SL 3.86 setmiterlimit 432 63 M 72 63 L S 2 SL 432 45 M 72 45 L S 0.25 SL 2 SC 432 720 M 72 720 L S 0 0 612 792 CR 1 G 72 108 360 594 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF (type ) 108.0 114.667 T 4 (Times-Italic) 10 1 mymakefontmetric 4 FF (mac) 127.72 114.667 T (h_port_right_t) 144.23 114.667 T 3 FF ( = ) 203.13 114.667 T 4 FF (unsigned) 213.77 114.667 T 3 FF (;) 249.88 114.667 T (type ) 108.0 138.667 T 4 FF (mac) 127.72 138.667 T (h_port_type_t) 144.23 138.667 T 3 FF ( = ) 200.34 138.667 T 4 FF (unsigned) 210.98 138.667 T 3 FF (;) 247.09 138.667 T (type ) 108.0 162.667 T 4 FF (mac) 127.72 162.667 T (h_port_type_arr) 144.23 162.667 T (ay_t) 210.19 162.667 T 3 FF ( = array[] of ) 227.41 162.667 T 4 FF (mac) 278.58 162.667 T (h_port_type_t) 295.09 162.667 T 3 FF (;) 351.2 162.667 T (type ) 108.0 186.667 T 4 FF (mac) 127.72 186.667 T (h_port_ur) 144.23 186.667 T (efs_t) 184.42 186.667 T 3 FF ( = ) 203.31 186.667 T 4 FF (unsigned) 213.95 186.667 T 3 FF (;) 250.06 186.667 T (type ) 108.0 210.666 T 4 FF (mac) 127.72 210.666 T (h_port_delta_t) 144.23 210.666 T 3 FF ( = ) 203.68 210.666 T 4 FF (int) 214.32 210.666 T 3 FF (;) 224.88 210.666 T (type ) 108.0 234.666 T 4 FF (mac) 127.72 234.666 T (h_port_seqno_t) 144.23 234.666 T 3 FF ( = ) 207.01 234.666 T 4 FF (unsigned) 217.65 234.666 T 3 FF (;) 253.76 234.666 T (type ) 108.0 258.666 T 4 FF (mac) 127.72 258.666 T (h_port_mscount_t) 144.23 258.666 T 3 FF ( = ) 217.01 258.666 T 4 FF (unsigned) 227.65 258.666 T 3 FF (;) 263.76 258.666 T (type ) 108.0 282.666 T 4 FF (mac) 127.72 282.666 T (h_port_msgcount_t) 144.23 282.666 T 3 FF ( = ) 222.01 282.666 T 4 FF (unsigned) 232.65 282.666 T 3 FF (;) 268.76 282.666 T (type ) 108.0 306.666 T 4 FF (mac) 127.72 306.666 T (h_port_rights_t) 144.23 306.666 T 3 FF ( = ) 207.02 306.666 T 4 FF (unsigned) 217.66 306.666 T 3 FF (;) 253.77 306.666 T (type ) 108.0 330.666 T 4 FF (mac) 127.72 330.666 T (h_msg_id_t) 144.23 330.666 T 3 FF ( = ) 190.9 330.666 T 4 FF (int) 201.54 330.666 T 3 FF (;) 212.1 330.666 T (type ) 108.0 354.666 T 4 FF (mac) 127.72 354.666 T (h_msg_type_name_t) 144.23 354.666 T 3 FF ( = ) 226.44 354.666 T 4 FF (unsigned) 237.08 354.666 T 3 FF (;) 273.19 354.666 T (type ) 108.0 378.666 T 4 FF (mac) 127.72 378.666 T (h_port_name_t) 144.23 378.666 T 3 FF ( = MA) 205.34 378.666 T (CH_POR) 231.69 378.666 T (T_TYPE_POR) 269.431 378.666 T (T_N) 329.391 378.666 T (AME ctype: ) 347.371 378.666 T 4 FF (mac) 162.0 390.666 T (h_port_t) 178.51 390.666 T 3 FF (;) 212.96 390.666 T (type ) 108.0 414.666 T 4 FF (mac) 127.72 414.666 T (h_port_name_arr) 144.23 414.666 T (ay_t ) 215.19 414.666 T 3 FF (= array[] of ) 234.91 414.666 T 4 FF (mac) 283.58 414.666 T (h_port_name_t) 300.09 414.666 T 3 FF ( ctype: ) 361.2 414.666 T 4 FF (mac) 162.0 426.666 T (h_port_arr) 178.51 426.666 T (ay_t) 222.81 426.666 T 3 FF (;) 240.03 426.666 T 52 407.999329 2 9.999985 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 152 152 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (148 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Kernel Interfaces) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Standard MIG T) 180.0 55.824 T (ypes) 244.846 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 153 153 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 2 SL 3.86 setmiterlimit 0 G 432 45 M 72 45 L S 2 SC 432 342 M 72 342 L S 0.25 SL 432 720 M 72 720 L S 1 G 72 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 8 1 mymakefontmetric 0 FF (Mach 3 Server Writer\325s Guide) 72.0 731.707 T 1 (Times-Bold) 10 1 mymakefontmetric 1 FF 417 731.706665 M -2.5 0 32 (149 ) widthshow 0 0 612 792 CR 1 G 72 99 360 225 NF 0 G 2 (Times-Roman) 12 1 mymakefontmetric 2 FF 72 115 M 1.19989 0 (APPENDIX C) ashow 3 (Times-Roman) 24 1 mymakefontmetric 3 FF 180 115 M -0.479736 0 (Service Serv) ashow 295.851379 115 M -0.479736 0 (er) ashow 1 G 72 360 360 344.015991 NF 0 G 4 (Times-Roman) 10 1 mymakefontmetric 4 FF 72 366.666656 M 0.884476 0 32 (Each task inherits a set of ) widthshow 5 (Times-Italic) 10 1 mymakefontmetric 5 FF 182.286865 366.666656 M 0.884476 0 32 (r) widthshow 185.807068 366.666656 M 0.884476 0 32 (e) widthshow 189.84729 366.666656 M 0.884476 0 32 (gister) widthshow 212.257492 366.666656 M 0.884476 0 32 (ed) widthshow 4 FF 221.697495 366.666656 M 0.884476 0 32 ( ports upon creation \() widthshow 1 FF 310.775391 366.666656 M 0.884476 0 32 (mach_ports_r) widthshow 370.58551 366.666656 M 0.884476 0 32 (egister) widthshow 4 FF 398.905518 366.666656 M 0.884476 0 32 (\). These) widthshow 72 378.666626 M 1.088486 0 32 (are \(send rights\) for the name serv) widthshow 215.56102 378.666626 M 1.088486 0 32 (er) widthshow 222.931244 378.666626 M 1.088486 0 32 (, an en) widthshow 251.08844 378.666626 M 1.088486 0 32 (vironment serv) widthshow 312.296997 378.666626 M 1.088486 0 32 (er and the service serv) widthshow 405.911072 378.666626 M 1.088486 0 32 (er) widthshow 413.131348 378.666626 M 1.088486 0 32 (. All) widthshow 72 390.666626 M 1.008789 0 32 (tasks in the system are intended to share the same name serv) widthshow 324.846802 390.666626 M 1.008789 0 32 (er \(that is the point of the) widthshow 72 402.666626 M 2.293503 0 32 (serv) widthshow 88.510086 402.666626 M 2.293503 0 32 (er\) whereas dif) widthshow 152.817245 402.666626 M 2.293503 0 32 (ferent groups of tasks may ha) widthshow 282.114868 402.666626 M 2.293503 0 32 (v) widthshow 286.964966 402.666626 M 2.293503 0 32 (e pri) widthshow 307.058594 402.666626 M 2.293503 0 32 (v) widthshow 311.808746 402.666626 M 2.293503 0 32 (ate en) widthshow 337.30249 402.666626 M 2.293503 0 32 (vironment serv) widthshow 399.716064 402.666626 M 2.293503 0 32 (ers. Al-) widthshow 72 414.666595 M 0.366821 0 32 (though an en) widthshow 123.993866 414.666595 M 0.366821 0 32 (vironment serv) widthshow 184.480774 414.666595 M 0.366821 0 32 (er has been written, it is not typically used \(and is not part of) widthshow 72 426.666565 M 0.372086 0 32 (the standard distrib) widthshow 149.204285 426.666565 M 0.372086 0 32 (ution\) so it is not discussed further) widthshow 289.217102 426.666565 M 0.372086 0 32 (. The name serv) widthshow 354.053467 426.666565 M 0.372086 0 32 (er w) widthshow 371.815613 426.666565 M 0.372086 0 32 (as discussed in) widthshow (CHAPTER 2. This appendix discusses the purpose and need for the service serv) 72.0 438.667 T (er) 392.63 438.667 T (.) 399.85 438.667 T 72 462.666565 M 1.54422 0 32 (All tasks need access to the \(same\) name serv) widthshow 266.933868 462.666565 M 1.54422 0 32 (er) widthshow 274.154175 462.666565 M 1.54422 0 32 (. Gi) widthshow 290.448547 462.666565 M 1.54422 0 32 (v) widthshow 295.298615 462.666565 M 1.54422 0 32 (en a task whose re) widthshow 374.63559 462.666565 M 1.54422 0 32 (gistered name) widthshow 72 474.666534 M 1.077271 0 32 (serv) widthshow 88.510086 474.666534 M 1.077271 0 32 (er port names the name serv) widthshow 206.216537 474.666534 M 1.077271 0 32 (er) widthshow 213.586761 474.666534 M 1.077271 0 32 (, all tasks deri) widthshow 272.118713 474.666534 M 1.077271 0 32 (v) widthshow 276.968811 474.666534 M 1.077271 0 32 (ed from that task will inherit the port) widthshow 72 486.666504 M 1.046326 0 32 (and share access to the name serv) widthshow 212.528061 486.666504 M 1.046326 0 32 (er) widthshow 219.748367 486.666504 M 1.046326 0 32 (. Unfortunately) widthshow 281.245056 486.666504 M 1.046326 0 32 (, being a task itself, the name serv) widthshow 424.229431 486.666504 M 1.046326 0 32 (er) widthshow 72 498.666504 M 1.585342 0 32 (initializes itself after certain other tasks \(such as) widthshow 1 FF 275.557434 498.666504 M 1.585342 0 32 ( ) widthshow 4 FF 279.642761 498.666504 M 1.585342 0 32 (the init process, ) widthshow 1 FF 349.948792 498.666504 M 1.585342 0 32 (/etc/init) widthshow 4 FF 382.168793 498.666504 M 1.585342 0 32 (\) run. Thus,) widthshow 72 510.666504 M 1.449966 0 32 (most tasks, which deri) widthshow 165.540039 510.666504 M 1.449966 0 32 (v) widthshow 170.390121 510.666504 M 1.449966 0 32 (e indirectly from the init task will be missing the name serv) widthshow 424.229858 510.666504 M 1.449966 0 32 (er) widthshow (\(and en) 72.0 522.666 T (vironment serv) 101.31 522.666 T (er\) port.) 161.43 522.666 T 72 546.666443 M 0.126602 0 32 (Because of this, the ports for the name and en) widthshow 255.47966 546.666443 M 0.126602 0 32 (vironment serv) widthshow 315.726349 546.666443 M 0.126602 0 32 (ers must be created \(and re) widthshow 423.669464 546.666443 M 0.126602 0 32 (g-) widthshow 72 558.666443 M 0.060654 0 32 (ister with the init process\) before the serv) widthshow 238.074677 558.666443 M 0.060654 0 32 (ers the ports name e) widthshow 318.1474 558.666443 M 0.060654 0 32 (xist. This mechanism is pro-) widthshow (vided by the ) 72.0 570.666 T 5 FF (service) 123.94 570.666 T 4 FF ( serv) 152.26 570.666 T (er) 171.27 570.666 T (.) 178.49 570.666 T 72 594.666382 M 1.438095 0 32 (The pri) widthshow 102.348236 594.666382 M 1.438095 0 32 (vile) widthshow 117.198318 594.666382 M 1.438095 0 32 (ged service serv) widthshow 184.344604 594.666382 M 1.438095 0 32 (er \() widthshow 1 FF 199.382706 594.666382 M 1.438095 0 32 (/mach_ser) widthshow 243.162766 594.666382 M 1.438095 0 32 (v) widthshow 248.06282 594.666382 M 1.438095 0 32 (ers/mach_init) widthshow 4 FF 306.392822 594.666382 M 1.438095 0 32 (\) is run as the \336rst process. It) widthshow 72 606.666382 M 0.578613 0 32 (creates the ports that will name the name and en) widthshow 269.267761 606.666382 M 0.578613 0 32 (vironment serv) widthshow 329.966461 606.666382 M 0.578613 0 32 (ers \(as well as itself\) and) widthshow 72 618.666382 M 1.076385 0 32 (forcibly re) widthshow 114.856476 618.666382 M 1.076385 0 32 (gisters them with its parent, thus placing these re) widthshow 318.577637 618.666382 M 1.076385 0 32 (gistered ports at the root of) widthshow (the task deri) 72.0 630.666 T (v) 120.63 630.666 T (ation tree.) 125.38 630.666 T 72 654.666382 M 1.553802 0 32 (When the name or en) widthshow 163.345444 654.666382 M 1.553802 0 32 (vironment serv) widthshow 225.019333 654.666382 M 1.553802 0 32 (er is initialized, it re) widthshow 311.354614 654.666382 M 1.553802 0 32 (gisters itself with the service) widthshow 72 666.666321 M 0.22525 0 32 (serv) widthshow 88.510086 666.666321 M 0.22525 0 32 (er) widthshow 95.88031 666.666321 M 0.22525 0 32 (, making the port created by the service serv) widthshow 274.432434 666.666321 M 0.22525 0 32 (er its o) widthshow 301.853058 666.666321 M 0.22525 0 32 (wn. Only the name and en) widthshow 407.55954 666.666321 M 0.22525 0 32 (viron-) widthshow 72 678.666321 M 1.034927 0 32 (ment serv) widthshow 112.045013 678.666321 M 1.034927 0 32 (er ha) widthshow 132.590057 678.666321 M 1.034927 0 32 (v) widthshow 137.44014 678.666321 M 1.034927 0 32 (e need for the service serv) widthshow 247.144882 678.666321 M 1.034927 0 32 (er) widthshow 254.365189 678.666321 M 1.034927 0 32 (. It is important that these serv) widthshow 381.80484 678.666321 M 1.034927 0 32 (ers initialize) widthshow grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Page: 154 154 %%PageBoundingBox: 0 0 612 792 %%PageFonts: (atend) %%BeginPageSetup %%PaperSize: Letter /__NXsheetsavetoken save def 0 0 translate gsave /__NXbasematrix matrix currentmatrix def grestore gsave 0 0 612 792 rectclip [1 0 0 -1 0 792] concat 0 0 translate %%EndPageSetup FMBEGINPAGE gsave 0 0 612 792 rectclip /landscape false def 0 0 612 792 CR 0.25 SL 3.86 setmiterlimit 0 G 540 720 M 180 720 L S 1 G 180 725.039978 360 11.951996 NF 0 G 0 (Times-Bold) 10 1 mymakefontmetric 0 FF (150 ) 180.0 731.707 T 1 (Times-Bold) 8 1 mymakefontmetric 1 FF (Mach 3 Server Writer\325s Guide) 324.0 731.707 T 1 G 180 49.824005 360 12.024002 NF 0 G 2 (Times-Bold) 9 1 mymakefontmetric 2 FF (Ser) 180.0 55.824 T (vice Ser) 192.906 55.824 T (v) 223.056 55.824 T (er) 227.466 55.824 T 0 SC 540 63 M 180 63 L S 2 SL 540 45 M 180 45 L S 0 0 612 792 CR 1 G 180 105.984009 360 596.015991 NF 0 G 3 (Times-Roman) 10 1 mymakefontmetric 3 FF 180 112.650665 M 0.111267 0 32 (before user tasks are created as the service serv) widthshow 369.550262 112.650665 M 0.111267 0 32 (er will check-in the correct \(the \336rst\) serv-) widthshow (ers to announce their desire to re) 180.0 124.651 T (gister) 310.37 124.651 T (.) 332.04 124.651 T 180 148.650635 M 1.750824 0 32 (Gi) widthshow 189.750137 148.650635 M 1.750824 0 32 (v) widthshow 194.60022 148.650635 M 1.750824 0 32 (en the service serv) widthshow 273.842773 148.650635 M 1.750824 0 32 (er port \(one of all task\325) widthshow 373.967224 148.650635 M 1.750824 0 32 (s re) widthshow 389.728149 148.650635 M 1.750824 0 32 (gistered ports\), ) widthshow 4 (Times-Italic) 10 1 mymakefontmetric 4 FF 455.719788 148.650635 M 1.750824 0 32 (service_server) widthshow 5 (Symbol) 10 1 mymakefontmetric 5 FF 514.029785 148.650635 M 1.750824 0 32 widthshow 0 FF 523.89978 148.650635 M 1.750824 0 32 (ser-) widthshow 180 160.65062 M 0.327606 0 32 (vice_checkin) widthshow 3 FF 234.440002 160.65062 M 0.327606 0 32 ( re) widthshow 244.887695 160.65062 M 0.327606 0 32 (gisters a gi) widthshow 288.623047 160.65062 M 0.327606 0 32 (v) widthshow 293.473145 160.65062 M 0.327606 0 32 (en serv) widthshow 322.250824 160.65062 M 0.327606 0 32 (er) widthshow 329.47113 160.65062 M 0.327606 0 32 (. The name serv) widthshow 394.174042 160.65062 M 0.327606 0 32 (er) widthshow 401.54425 160.65062 M 0.327606 0 32 (, for e) widthshow 425.649567 160.65062 M 0.327606 0 32 (xample, locates the port that) widthshow 180 172.650604 M 1.561737 0 32 (will name it \(by \336nding the send right in its re) widthshow 379.357452 172.650604 M 1.561737 0 32 (gistered port set\) and uses this port to) widthshow 180 184.650589 M 1.26709 0 32 (name itself to the service serv) widthshow 305.325562 184.650589 M 1.26709 0 32 (er) widthshow 312.545837 184.650589 M 1.26709 0 32 (. The service serv) widthshow 386.727234 184.650589 M 1.26709 0 32 (er then returns recei) widthshow 469.968628 184.650589 M 1.26709 0 32 (v) widthshow 474.818726 184.650589 M 1.26709 0 32 (e rights for that) widthshow 180 196.650574 M 0.236206 0 32 (port so that the name serv) widthshow 284.071106 196.650574 M 0.236206 0 32 (er can no) widthshow 320.943665 196.650574 M 0.236206 0 32 (w respond to client name requests. \(Up until this time,) widthshow 180 208.650558 M 1.026108 0 32 (the service serv) widthshow 244.10231 208.650558 M 1.026108 0 32 (er merely ignored requests on the name serv) widthshow 428.035156 208.650558 M 1.026108 0 32 (er port.\) The service serv) widthshow 532.229736 208.650558 M 1.026108 0 32 (er) widthshow 180 220.650543 M 0.23262 0 32 (also requests a port destro) widthshow 284.700562 220.650543 M 0.23262 0 32 (yed noti\336cation so that the name serv) widthshow 435.376343 220.650543 M 0.23262 0 32 (er port ne) widthshow 473.911743 220.650543 M 0.23262 0 32 (v) widthshow 478.761841 220.650543 M 0.23262 0 32 (er dies, and the) widthshow 180 232.650528 M 0.879929 0 32 (same port al) widthshow 230.539917 232.650528 M 0.879929 0 32 (w) widthshow 237.659973 232.650528 M 0.879929 0 32 (ays names the name serv) widthshow 340.449768 232.650528 M 0.879929 0 32 (er) widthshow 347.820007 232.650528 M 0.879929 0 32 (, no matter what task is re) widthshow 455.989685 232.650528 M 0.879929 0 32 (gistered as the name) widthshow (serv) 180.0 244.651 T (er at an) 196.51 244.651 T (y gi) 225.79 244.651 T (v) 240.82 244.651 T (en time.) 245.67 244.651 T 180 268.650513 M 1.312134 0 32 (The service serv) widthshow 248.004364 268.650513 M 1.312134 0 32 (er also pro) widthshow 292.688721 268.650513 M 1.312134 0 32 (vides a ) widthshow 4 FF 325.862976 268.650513 M 1.312134 0 32 (service_server) widthshow 5 FF 384.173004 268.650513 M 1.312134 0 32 widthshow 0 FF 394.042999 268.650513 M 1.312134 0 32 (ser) widthshow 406.713074 268.650513 M 1.312134 0 32 (vice_waitf) widthshow 449.783203 268.650513 M 1.312134 0 32 (or) widthshow 3 FF 459.223206 268.650513 M 1.312134 0 32 ( function that w) widthshow 526.10968 268.650513 M 1.312134 0 32 (aits) widthshow (until the named serv) 180.0 280.65 T (er is re) 261.23 280.65 T (gistered.) 288.29 280.65 T grestore FMENDPAGE grestore showpage __NXsheetsavetoken restore %%PageTrailer %%Trailer %%Pages: 154 1 %%BoundingBox:0 0 612 792