From 28034190e6ffa80204e6ab29b2968d8c5ba178b9 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sun, 12 Sep 2004 00:00:42 +0000 Subject: [PATCH] Work on projects. --- doc/Makefile | 7 + doc/mlfqs.pdf | Bin 0 -> 40487 bytes doc/mlfqs.ps | 3313 +++++++++++++++++++++++++++++++++++++++++++++ doc/threads.texi | 16 +- doc/userprog.texi | 4 + doc/vm.texi | 4 +- 6 files changed, 3335 insertions(+), 9 deletions(-) create mode 100644 doc/Makefile create mode 100644 doc/mlfqs.pdf create mode 100644 doc/mlfqs.ps diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..138cf35 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,7 @@ +TEXIS = projects.texi threads.texi userprog.texi filesys.texi vm.texi + +projects.info: $(TEXIS) + makeinfo $< + +projects.html: $(TEXIS) + texi2html -toc_file=$@ -split=chapter -no-sec_nav -no-menu $< diff --git a/doc/mlfqs.pdf b/doc/mlfqs.pdf new file mode 100644 index 0000000000000000000000000000000000000000..88950887b9f3af2193bbc42be723b19b21b37889 GIT binary patch literal 40487 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 CRA)5+ literal 0 HcmV?d00001 diff --git a/doc/mlfqs.ps b/doc/mlfqs.ps new file mode 100644 index 0000000..0b1f527 --- /dev/null +++ b/doc/mlfqs.ps @@ -0,0 +1,3313 @@ +%!PS-Adobe-3.0 +%%Title: (Solaris) +%%Version: 1 2 +%%CreationDate: (D:19981004210632) +%%For: (Administrator) +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%BoundingBox: 0 0 612 792 +%%Pages: 7 +%%DocumentProcessColors: (atend) +%%DocumentSuppliedResources: +%%+ font TimesNewRoman,Italic$2X1 +%%+ font CourierNew +%%+ font TimesNewRoman,Bold$2X1 +%%+ font TimesNewRoman$2X1 +%%+ procset (Adobe Acrobat - PDF operators) 1.2 0 +%%+ procset (Adobe Acrobat - type operators) 1.2 0 +%%+ procset (Adobe Acrobat - general image support) 1.2 0 +%%+ procset (Adobe Acrobat - monochrome image support) 1.2 0 +%%EndComments +%%BeginDefaults +%%EndDefaults +%%BeginProlog +%%EndProlog +%%BeginSetup +%%BeginFile: l2check +%%Copyright: Copyright 1993 Adobe Systems Incorporated. All Rights Reserved. +systemdict /languagelevel known +{ systemdict /languagelevel get 1 eq } +{ true } +ifelse +{ +initgraphics /Helvetica findfont 18 scalefont setfont +72 600 moveto (Error: Your printer driver needs to be configured) dup show +72 580 moveto (for printing to a PostScript Level 1 printer.) dup show +exch = = +/Helvetica-Bold findfont 16 scalefont setfont +72 520 moveto (Windows and Unix) show +/Times-Roman findfont 16 scalefont setfont +72 500 moveto (Select ªLevel 1º in the PostScript options section) show +72 480 moveto (of the Acrobat Exchange or Reader print dialog.) show +/Helvetica-Bold findfont 16 scalefont setfont +72 440 moveto (Macintosh) show +/Times-Roman findfont 16 scalefont setfont +72 420 moveto (In the Chooser, select your printer driver.) show +72 400 moveto (Then select your printer and click the Setup button.) show +72 380 moveto (Follow any on-screen dialogs that may appear.) show +showpage +quit +} +if +%%EndFile +/currentpacking where{pop currentpacking true setpacking}if +userdict /PDF 85 dict put +%%BeginFile: pdfvars.prc +%%Copyright: Copyright 1987-1996 Adobe Systems Incorporated. All Rights Reserved. +userdict /PDFVars 75 dict dup begin put +/_save 0 def +/_cshow 0 def +/InitAll 0 def +/TermAll 0 def +/_lp /none def +/_doClip 0 def +/sfc 0 def +/_sfcs 0 def +/_sfc 0 def +/ssc 0 def +/_sscs 0 def +/_ssc 0 def +/_fcs 0 def +/_scs 0 def +/_fp 0 def +/_sp 0 def +/_f0 0 array def +/_f1 1 array def +/_f3 3 array def +/_f4 4 array def +/_fc null def +/_s0 0 array def +/_s1 1 array def +/_s3 3 array def +/_s4 4 array def +/_sc null def +/_cpcf null def +/_cpcs null def +/_inT false def +/_tr -1 def +/_rise 0 def +/_ax 0 def +/_cx 0 def +/_ld 0 def +/_tm matrix def +/_ctm matrix def +/_mtx matrix def +/_hy (-) def +/_fScl 0 def +/_hs 1 def +/_pdfEncodings 2 array def +/_baselineadj 0 def +/_Tj 0 def +/_italMtx[1 0 .212557 1 0 0]def +/_italMtx_WMode1 [1 -.212557 0 1 0 0]def +/_basefont 0 def +/_basefonto 0 def +/_pdf_oldCIDInit null def +/_categories 10 dict def +/_sa? true def +/_op? false def +/_ColorSep5044? false def +/_tmpcolr? [] def +/_tmpop? {} def +end +%%EndFile +PDFVars begin PDF begin +%%BeginFile: pdfutil.prc +%%Copyright: Copyright 1993 Adobe Systems Incorporated. All Rights Reserved. +/bd {bind def} bind def +/ld {load def} bd +/dd { PDFVars 3 1 roll put } bd +/xdd { exch dd } bd +/Level2? +systemdict /languagelevel known +{ systemdict /languagelevel get 2 ge } { false } ifelse +def +/here { +dup currentdict exch known +{ currentdict exch get true } +{ pop false } +ifelse +} bd +/isdefined? { where { pop true } { false } ifelse } bd +/StartLoad { dup dup not { /_save save dd } if } bd +/EndLoad { if not { _save restore } if } bd +/npop { { pop } repeat } bd +%%EndFile +%%BeginFile: pdf.prc +%%Copyright: Copyright 1987-1996 Adobe Systems Incorporated. All Rights Reserved. +/initialize { +_ColorSep5044? {sep_ops begin 50 dict begin} if +newpath +} bd +/terminate { +_ColorSep5044? {end end} if +} bd +Level2? StartLoad +{ /m/moveto ld +/l/lineto ld +/c/curveto ld +/setSA/setstrokeadjust ld +} EndLoad +Level2? not StartLoad +{ +/pl { +transform +0.25 sub round 0.25 add exch +0.25 sub round 0.25 add exch +itransform +} bd +/m { _sa? { pl } if moveto } bd +/l { _sa? { pl } if lineto } bd +/c { _sa? { pl } if curveto } bd +/setSA { /_sa? xdd } bd +} EndLoad +/v { currentpoint 6 2 roll c } bd +/y { 2 copy c } bd +/h/closepath ld +/d/setdash ld +/j/setlinejoin ld +/J/setlinecap ld +/M/setmiterlimit ld +/w/setlinewidth ld +/cf currentflat def +/i { +dup 0 eq { pop cf } if +setflat +} bd +/ilp { /_lp /none dd } bd +/sfc { +_lp /fill ne { +_sfcs +_sfc +/_lp /fill dd +} if +} dd +/ssc { +_lp /stroke ne { +_sscs +_ssc +/_lp /stroke dd +} if +} dd +/n { +_doClip 1 ge { +_doClip 1 eq { clip } { eoclip } ifelse +/_doClip 0 dd +} if +newpath +} bd +/f { +_doClip 1 ge +{ +gsave sfc fill grestore +_doClip 1 eq { clip } { eoclip } ifelse +newpath +ilp +/_doClip 0 dd +} +{ sfc fill } +ifelse +} bd +/f* { +_doClip 1 ge +{ +gsave sfc eofill grestore +_doClip 1 eq { clip } { eoclip } ifelse +newpath +ilp +/_doClip 0 dd +} +{ sfc eofill } +ifelse +} bd +/S { +_doClip 1 ge +{ +gsave ssc stroke grestore +_doClip 1 eq { clip } { eoclip } ifelse +newpath +ilp +/_doClip 0 dd +} +{ ssc stroke } +ifelse +} bd +/s { h S } bd +/B { +_doClip dup 1 ge +gsave f grestore +{ +gsave S grestore +1 eq { clip } { eoclip } ifelse +newpath +ilp +/_doClip 0 dd +} +{ pop S } +ifelse +} bd +/b { h B } bd +/B* { +_doClip dup 1 ge +gsave f* grestore +{ +gsave S grestore +1 eq { clip } { eoclip } ifelse +newpath +ilp +/_doClip 0 dd +} +{ pop S } +ifelse +} bd +/b* { h B* } bd +/W { /_doClip 1 dd } bd +/W* { /_doClip 2 dd } bd +/q/save ld +/Q { restore ilp } bd +Level2? StartLoad +{ /defineRes/defineresource ld +/findRes/findresource ld +currentglobal +true systemdict /setglobal get exec +[/Function /ExtGState /Form] +{ /Generic /Category findresource dup length dict copy /Category defineresource pop } +forall +systemdict /setglobal get exec +} EndLoad +Level2? not StartLoad +{ /AlmostFull? +{ dup maxlength exch length sub 2 le +} bind def +/Expand +{ 1 index maxlength mul cvi dict +dup begin exch { def } forall end +} bind def +/xput +{ 3 2 roll +dup 3 index known not +{ dup AlmostFull? { 1.5 Expand } if +} if +dup 4 2 roll put +} bind def +/defineRes +{ _categories 1 index known not +{ /_categories _categories 2 index 10 dict xput store +} if +_categories exch 2 copy get 5 -1 roll 4 index xput put +} bind def +/findRes +{ _categories exch get exch get +} bind def +} EndLoad +/cs +{ +dup where { pop load } if +dup /_fcs xdd +ucs +_cpcf exch get +/_fc xdd +/_fp null dd +} bd +/CS +{ +dup where { pop load } if +dup /_scs xdd ucs _cpcs exch get /_sc xdd /_sp null dd +} bd +/ucs { +dup type /arraytype eq +{ dup 0 get +dup /Indexed eq +{ pop 0 get } +{ /Pattern eq +{ dup length 2 eq +{ 1 get ucs } +{ 0 get } +ifelse } +{ 0 get } +ifelse } +ifelse } +if } +bd +/_cpcf +15 dict dup begin +/DefaultGray _f1 def +/DeviceGray _f1 def +/DefaultRGB _f3 def +/DeviceRGB _f3 def +/DeviceCMYK _f4 def +/CalGray _f1 def +/CalRGB _f3 def +/CalCMYK _f4 def +/Lab _f3 def +/Pattern _f0 def +/Indexed _f1 def +/Separation _f1 def +/CIEBasedA _f1 def +/CIEBasedABC _f3 def +end +dd +/_cpcs +15 dict dup begin +/DefaultGray _s1 def +/DeviceGray _s1 def +/DefaultRGB _s3 def +/DeviceRGB _s3 def +/DeviceCMYK _s4 def +/CalGray _s1 def +/CalRGB _s3 def +/CalCMYK _s4 def +/Lab _s3 def +/Pattern _s0 def +/Indexed _s1 def +/Separation _s1 def +/CIEBasedA _s1 def +/CIEBasedABC _s3 def +end +dd +Level2? not StartLoad { +/ri/pop ld +/makePat/pop ld +} EndLoad +Level2? StartLoad { +/ri +{ +/findcolorrendering isdefined? +{ +mark exch +findcolorrendering +counttomark 2 eq +{ type /booleantype eq +{ dup type /nametype eq +{ dup /ColorRendering resourcestatus +{ pop pop +dup /DefaultColorRendering ne +{ +/ColorRendering findresource +setcolorrendering +} if +} if +} if +} if +} if +cleartomark +} +{ pop +} ifelse +} bd +/makePat /makepattern ld +} EndLoad +Level2? not _ColorSep5044? or StartLoad +{ +/L1setcolor { +aload length +dup 0 eq +{ pop .5 setgray } +{ dup 1 eq +{ pop setgray } +{ 3 eq +{ setrgbcolor } +{ setcmykcolor } +ifelse } +ifelse } +ifelse +} bind dd +/_sfcs { } dd +/_sscs { } dd +} EndLoad +Level2? not _ColorSep5044? not and StartLoad +{ +/_sfc { _fc L1setcolor } dd +/_ssc { _sc L1setcolor } dd +} EndLoad +Level2? _ColorSep5044? not and StartLoad +{ +/_sfcs +{ +_fcs setcolorspace +} bind dd +/_sscs +{ +_scs setcolorspace +} bind dd +/_sfc +{ +_fc aload pop +_fp null eq +{ setcolor } +{ _fp setpattern } +ifelse +} bind dd +/_ssc +{ +_sc aload pop +_sp null eq { setcolor } { _sp setpattern } ifelse +} bind dd +} EndLoad +/sc +{ +_fc astore pop +ilp +} bd +/SC +{ +_sc astore pop +ilp +} bd +/scn { +dup type /dicttype eq +{ dup /_fp xdd +/PaintType get 1 eq +{ /_fc _f0 dd ilp } +{ /_fc _cpcf _fcs ucs get dd +sc } +ifelse } +{ sc } +ifelse +} bd +/SCN { +dup type /dicttype eq +{ dup /_sp xdd +/PaintType get 1 eq +{ /_sc _s0 dd ilp } +{ /_sc _cpcs _scs ucs get dd +SC } +ifelse } +{ SC } +ifelse +} bd +/g { /DefaultGray cs sc } bd +/rg { /DefaultRGB cs sc } bd +/k { /DeviceCMYK cs sc } bd +/G { /DefaultGray CS SC } bd +/RG { /DefaultRGB CS SC } bd +/K { /DeviceCMYK CS SC } bd +/cm { _mtx astore concat } bd +/re { +4 2 roll m +1 index 0 rlineto +0 exch rlineto +neg 0 rlineto +h +} bd +/RC/rectclip ld +/EF/execform ld +/PS { cvx exec } bd +/initgs { +/DefaultGray where +{ pop } +{ /DefaultGray /DeviceGray dd } +ifelse +/DefaultRGB where +{ pop } +{ /DefaultRGB /DeviceRGB dd } +ifelse +0 g 0 G +[] 0 d 0 j 0 J 10 M 1 w +true setSA +} bd +21 dict dup begin +/CosineDot +{ 180 mul cos exch 180 mul cos add 2 div } bd +/Cross +{ abs exch abs 2 copy gt { exch } if pop neg } bd +/Diamond +{ abs exch abs 2 copy add .75 le +{ dup mul exch dup mul add 1 exch sub } +{ 2 copy add 1.23 le +{ .85 mul add 1 exch sub } +{ 1 sub dup mul exch 1 sub dup mul add 1 sub } +ifelse } +ifelse } bd +/Double +{ exch 2 div exch 2 { 360 mul sin 2 div exch } repeat add } bd +/DoubleDot +{ 2 { 360 mul sin 2 div exch } repeat add } bd +/Ellipse +{ abs exch abs 2 copy 3 mul exch 4 mul add 3 sub dup 0 lt +{ pop dup mul exch .75 div dup mul add 4 div +1 exch sub } +{ dup 1 gt +{pop 1 exch sub dup mul exch 1 exch sub +.75 div dup mul add 4 div 1 sub } +{ .5 exch sub exch pop exch pop } +ifelse } +ifelse } bd +/EllipseA +{ dup mul .9 mul exch dup mul add 1 exch sub } bd +/EllipseB +{ dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub } bd +/EllipseC +{ dup .5 gt { 1 exch sub } if +dup .25 ge +{ .5 exch sub 4 mul dup mul 1 sub } +{ 4 mul dup mul 1 exch sub } +ifelse +exch +dup .5 gt { 1 exch sub } if +dup .25 ge +{ .5 exch sub 4 mul dup mul 1 sub } +{ 4 mul dup mul 1 exch sub } +ifelse +add -2 div } bd +/InvertedDouble +{ exch 2 div exch 2 { 360 mul sin 2 div exch } repeat add neg } bd +/InvertedDoubleDot +{ 2 { 360 mul sin 2 div exch } repeat add neg } bd +/InvertedEllipseA +{ dup mul .9 mul exch dup mul add 1 sub } bd +/InvertedSimpleDot +{ dup mul exch dup mul add 1 sub } bd +/Line +{ exch pop abs neg } bd +/LineX +{ pop } bd +/LineY +{ exch pop } bd +/Rhomboid +{ abs exch abs 0.9 mul add 2 div } bd +/Round +{ abs exch abs 2 copy add 1 le +{ dup mul exch dup mul add 1 exch sub } +{ 1 sub dup mul exch 1 sub dup mul add 1 sub } +ifelse } bd +/SimpleDot +{ dup mul exch dup mul add 1 exch sub } bd +/Square +{ abs exch abs 2 copy lt { exch } if pop neg } bd +end +{ /Function defineRes pop } forall +/Identity {} /Function defineRes pop +_ColorSep5044? StartLoad { +/_defaulttransferfunc currenttransfer def +/currentcolortransfer where +{ pop /_defaultcolortransferfuncs [ currentcolortransfer ] def } +if +/concattransferfuncs { +[ 3 1 roll /exec load exch /exec load ] cvx +} bd +/concatandsettransfer { +/_defaulttransferfunc load concattransferfuncs settransfer +} bd +/concatandsetcolortransfer { +colorplate 0 eq +{ +_defaultcolortransferfuncs aload pop +8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll +6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll +4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll +concattransferfuncs +setcolortransfer +} if +colorplate 1 ge colorplate 4 le and +{ +4 colorplate sub index 4 { exch pop } repeat +concatandsettransfer +} if +colorplate 5 ge +{ +0 index 4 { exch pop } repeat +concatandsettransfer +} if +} bd +/tn5044sethalftone +{ +begin +HalftoneType 5 eq +{ [/Default /Cyan /Magenta /Yellow /Black /Default /Default /Default] +colorplate get +here not { +/Default here not { currentdict } if +} if +} +{ currentdict } +ifelse +end +begin +/TransferFunction here +{ +concatandsettransfer +currentdict dup length dict +begin +{ +1 index /TransferFunction ne { def } { pop pop } ifelse +} forall +currentdict +end +} +{ +currentdict +} ifelse +end +sethalftone +} bd +} EndLoad +Level2? StartLoad { +/gs +{ +begin +/SA here { setstrokeadjust } if +/OP here { setoverprint } if +/BG here { setblackgeneration } if +/UCR here { setundercolorremoval } if +/TR here +{ +_ColorSep5044? +{ +dup xcheck +{ concatandsettransfer } +{ aload pop concatandsetcolortransfer } +ifelse +} +{ +dup xcheck +{ settransfer } +{ aload pop setcolortransfer } +ifelse +} ifelse +} if +/sethalftonephase isdefined? { /HTP here { sethalftonephase } if } if +/HT here +{ _ColorSep5044? +{ tn5044sethalftone } +{ sethalftone } +ifelse +} if +end +} bd +/_defaulthalftone currenthalftone def +} EndLoad +Level2? not StartLoad { +/gs +{ +begin +/SA here { /_sa? xdd } if +/OP here { dup /_op? xdd +/setoverprint where {pop setoverprint} +{pop} ifelse +} if +/TR here +{ +_ColorSep5044? +{ dup xcheck +{ concatandsettransfer } +{ aload pop concatandsetcolortransfer } +ifelse +} +{ dup xcheck +{ settransfer } +{ aload pop setcolortransfer } +ifelse +} ifelse +} if +/HT here +{ _ColorSep5044? +{ tn5044sethalftone } +{ sethalftone } +ifelse +} if +end +} bd +5 dict dup +begin +currentscreen 1 [/HalftoneType /SpotFunction /Angle /Frequency ] +{ exch def } forall +end +/_defaulthalftone exch def +} EndLoad +/int { +dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul +exch pop add exch pop +} bd +/limit { +dup 2 index le { exch } if pop +dup 2 index ge { exch } if pop +} bd +_ColorSep5044? StartLoad { +/_sfc +{ +_fp null eq +{ _fcs type /arraytype eq +{_fcs 0 get /Separation eq +{ +_fcs 1 get /All eq +{ +_fc aload pop 1 exch sub +/setseparationgray where pop begin setseparationgray end +} +{ +1 _fcs 3 get exec _fcs 1 get +/findcmykcustomcolor where pop begin findcmykcustomcolor end +_fc aload pop +/setcustomcolor where pop begin setcustomcolor end +} +ifelse +} +{ _fc L1setcolor } +ifelse +} +{ _fc L1setcolor } +ifelse +} +{ _fc L1setcolor } +ifelse +} bind dd +/_ssc +{ +_sp null eq +{ _scs type /arraytype eq +{_scs 0 get /Separation eq +{ +_scs 1 get /All eq +{ +_sc aload pop 1 exch sub +/setseparationgray where pop begin setseparationgray end +} +{ +1 _scs 3 get exec _scs 1 get +/findcmykcustomcolor where pop begin findcmykcustomcolor end +_sc aload pop +/setcustomcolor where pop begin setcustomcolor end +} +ifelse +} +{ _sc L1setcolor } +ifelse +} +{ _sc L1setcolor } +ifelse +} +{ _sc L1setcolor } +ifelse +} bind dd +} EndLoad +%%EndFile +%%BeginFile: pdftext.prc +%%Copyright: Copyright 1987-1997 Adobe Systems Incorporated. All Rights Reserved. +PDF /PDFText 65 dict dup begin put +/initialize { PDFText begin } bd +/terminate { end } bd +/pdf_has_composefont? systemdict /composefont known def +/CopyFont { +{ +1 index /FID ne 2 index /UniqueID ne and +{ def } { pop pop } ifelse +} forall +} bd +/Type0CopyFont +{ +exch +dup length dict +begin +CopyFont +[ +exch +FDepVector +{ +dup /FontType get 0 eq +{ +1 index Type0CopyFont +/_pdfType0 exch definefont +} +{ +/_pdfBaseFont exch +2 index exec +} +ifelse +exch +} +forall +pop +] +/FDepVector exch def +currentdict +end +} bd +/cHexEncoding +[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 +/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 +/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 +/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B +/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E +/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 +/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 +/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 +/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA +/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD +/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 +/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 +/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 +/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def +/modEnc { +/_enc xdd +/_icode 0 dd +counttomark 1 sub -1 0 +{ +index +dup type /nametype eq +{ +_enc _icode 3 -1 roll put +_icode 1 add +} +if +/_icode xdd +} for +cleartomark +_enc +} bd +/trEnc { +/_enc xdd +255 -1 0 { +exch dup -1 eq +{ pop /.notdef } +{ Encoding exch get } +ifelse +_enc 3 1 roll put +} for +pop +_enc +} bd +/TE { +/_i xdd +StandardEncoding 256 array copy modEnc +_pdfEncodings exch _i exch put +} bd +/TZ +{ +/_usePDFEncoding xdd +findfont +dup length 2 add dict +begin +{ +1 index /FID ne { def } { pop pop } ifelse +} forall +/FontName exch def +_usePDFEncoding 0 ge +{ +/Encoding _pdfEncodings _usePDFEncoding get def +pop +} +{ +_usePDFEncoding -1 eq +{ +counttomark 0 eq +{ pop } +{ +Encoding 256 array copy +modEnc /Encoding exch def +} +ifelse +} +{ +256 array +trEnc /Encoding exch def +} +ifelse +} +ifelse +FontName currentdict +end +definefont pop +} +bd +/Level2? +systemdict /languagelevel known +{systemdict /languagelevel get 2 ge} +{false} +ifelse +def +Level2? +{ +/_pdfFontStatus +{ +currentglobal exch +/Font resourcestatus +{pop pop true} +{false} +ifelse +exch setglobal +} bd +} +{ +/_pdfFontStatusString 50 string def +_pdfFontStatusString 0 (fonts/) putinterval +/_pdfFontStatus +{ +_pdfFontStatusString 6 42 getinterval +cvs length 6 add +_pdfFontStatusString exch 0 exch getinterval +status +{ pop pop pop pop true} +{ false } +ifelse +} bd +} +ifelse +Level2? +{ +/_pdfCIDFontStatus +{ +/CIDFont /Category resourcestatus +{ +pop pop +/CIDFont resourcestatus +{pop pop true} +{false} +ifelse +} +{ pop false } +ifelse +} bd +} +if +/_pdfString100 100 string def +/_pdfComposeFontName +{ +dup length 1 eq +{ +0 get +1 index +type /nametype eq +{ +_pdfString100 cvs +length dup dup _pdfString100 exch (-) putinterval +_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval +2 index exch cvs length +add 1 add _pdfString100 exch 0 exch getinterval +exch pop +true +} +{ +pop pop +false +} +ifelse +} +{ +false +} +ifelse +} bd +pdf_has_composefont? +{ +/_pdfComposeFont +{ +1 index /CMap resourcestatus +{pop pop true} +{false} +ifelse +1 index true exch +{ +_pdfCIDFontStatus not +{pop false exit} +if +} +forall +and +{ 3 -1 roll pop composefont true} +{ +4 -1 roll pop +_pdfComposeFontName +{ +dup _pdfFontStatus +{ findfont definefont true } +{ +pop +dup _pdfFontStatus +{ findfont true } +{ pop false } +ifelse +} +ifelse +} +{ +dup _pdfFontStatus +{ findfont true } +{ pop false } +ifelse +} +ifelse +} +ifelse +} bd +} +{ +/_pdfComposeFont +{ +4 -1 roll pop +_pdfComposeFontName not +{ +dup +} +if +2 copy _pdfFontStatus +{pop findfont exch pop true} +{ +eq +{pop false} +{ +dup _pdfFontStatus +{findfont true} +{pop false} +ifelse +} +ifelse +} +ifelse +} bd +} +ifelse +/_pdfFaceByStyleDict 4 dict dup begin +Level2? +{ +/Serif +/HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus +{/HeiseiMin-W3} +{/Ryumin-Light} +ifelse +def +/SansSerif +/HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus +{/HeiseiKakuGo-W5} +{/GothicBBB-Medium} +ifelse +def +/HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus +{/HeiseiMaruGo-W4} +{ +/Jun101-Light-RKSJ-H _pdfFontStatus +{ /Jun101-Light } +{ SansSerif } +ifelse +} +ifelse +/RoundSansSerif exch def +/Default Serif def +} +{ +/Serif /Ryumin-Light def +/SansSerif /GothicBBB-Medium def +{ +(fonts/Jun101-Light-83pv-RKSJ-H) status +}stopped +{pop}{ +{ pop pop pop pop /Jun101-Light } +{ SansSerif } +ifelse +/RoundSansSerif exch def +}ifelse +/Default Serif def +} +ifelse +end +def +/_pdf_Adobe-Japan1-2 (Adobe-Japan1-2) def +/_pdfConcatNames +{ +exch +_pdfString100 cvs +length dup dup _pdfString100 exch (-) putinterval +_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval +3 -1 roll exch cvs length +add 1 add _pdfString100 exch 0 exch getinterval +} bind def +/_pdfSubSetFontByStyleDict 4 dict dup begin +_pdfFaceByStyleDict +{ +_pdf_Adobe-Japan1-2 _pdfConcatNames +dup _pdfFontStatus +{ def } +{ +{ +pop +dup /SansSerif eq +{ +/HeiseiKakuGo-W5-Adobe-Japan1-2 dup _pdfFontStatus +{ def exit } +{ pop } +ifelse +} +if +dup /Serif eq +{ +/HeiseiMin-W3-Adobe-Japan1-2 dup _pdfFontStatus +{ def exit } +{ pop } +ifelse +} +if +pop exit +} +loop +} +ifelse +} +forall +end def +/TZzero +{ +/_fyAdj xdd +/_wmode xdd +/_styleArr xdd +4 copy +_pdfComposeFont +{exch pop exch pop exch pop} +{ +[ +0 1 _styleArr length 1 sub +{ +_styleArr exch get +_pdfFaceByStyleDict exch 2 copy known not +{ pop /Default } +if +get +} +for +] +exch pop +3 index 3 index 4 2 roll +_pdfComposeFont +{exch pop} +{ +findfont +} +ifelse +} +ifelse +dup /FontType get 3 eq _wmode 1 eq and +{ +_pdfVerticalRomanT3Font dup length dict copy +begin +/_basefont exch def +/Encoding _basefont /Encoding get def +} +{ +dup length 2 add dict +begin +{1 index /FID ne {def}{pop pop} ifelse } +forall +} ifelse +/WMode _wmode def +/BaseLineAdj _fyAdj def +FontType 0 ne +{ +/Encoding Encoding dup length array copy dup 16#5c /yen put def +/_fauxfont true def +} if +currentdict +end +definefont pop +} +bd +/swj { +dup 4 1 roll +dup length exch stringwidth +exch 5 -1 roll 3 index mul add +4 1 roll 3 1 roll mul add +6 2 roll /_cnt 0 dd +{1 index eq {/_cnt _cnt 1 add dd} if} forall pop +exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop +} bd +/jss { +4 1 roll +{ +2 npop +(0) exch 2 copy 0 exch put +gsave +32 eq +{ +exch 6 index 6 index 6 index 5 -1 roll widthshow +currentpoint +} +{ +false charpath currentpoint +4 index setmatrix stroke +} +ifelse +grestore +moveto +2 copy rmoveto +} exch cshow +6 npop +} def +/jsfTzero { +{ +2 npop +(0) exch 2 copy 0 exch put +exch show +32 eq +{ +4 index 4 index rmoveto +} +if +2 copy rmoveto +} exch cshow +5 npop +} def +/jsp +{ +{ +2 npop +(0) exch 2 copy 0 exch put +32 eq +{ exch 5 index 5 index 5 index 5 -1 roll widthshow } +{ false charpath } +ifelse +2 copy rmoveto +} exch cshow +5 npop +} bd +/trj { _cx 0 fWModeProc 32 _ax 0 fWModeProc 6 5 roll } bd +/pjsf { trj sfc fawidthshowProc } bd +/pjss { trj _ctm ssc jss } bd +/pjsc { trj jsp } bd +/_Tjdef [ +/pjsf load +/pjss load +{ +dup +currentpoint 3 2 roll +pjsf +newpath moveto +pjss +} bind +{ +trj swj rmoveto +} bind +{ +dup currentpoint 4 2 roll gsave +pjsf +grestore 3 1 roll moveto +pjsc +} bind +{ +dup currentpoint 4 2 roll +currentpoint gsave newpath moveto +pjss +grestore 3 1 roll moveto +pjsc +} bind +{ +dup currentpoint 4 2 roll gsave +dup currentpoint 3 2 roll +pjsf +newpath moveto +pjss +grestore 3 1 roll moveto +pjsc +} bind +/pjsc load +] def +/BT +{ +/_inT true dd +_ctm currentmatrix pop matrix _tm copy pop +0 _rise _baselineadj add translate _hs 1 scale +0 0 moveto +} bd +/ET +{ +/_inT false dd +_tr 3 gt {clip} if +_ctm setmatrix newpath +} bd +/Tr { +_inT { _tr 3 le {currentpoint newpath moveto} if } if +dup /_tr xdd +_Tjdef exch get /_Tj xdd +} bd +/Tj { +userdict /$$copystring 2 index put +_Tj +} bd +/iTm { _ctm setmatrix _tm concat 0 _rise _baselineadj add translate _hs 1 scale } bd +/Tm { _tm astore pop iTm 0 0 moveto } bd +/Td { _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto } bd +/TD { dup /_ld xdd Td } bd +/_nullProc {} bd +/Tf { +dup 1000 div /_fScl xdd +exch findfont dup +/_nullProc exch +/WMode known +{ +1 index /WMode get 1 eq +{pop /exch} +if +} +if +load /fWModeProc xdd +dup +/FontType get 0 eq dup _cx 0 ne and +{ /jsfTzero } +{ /awidthshow } +ifelse +load /fawidthshowProc xdd +/_fTzero xdd +dup /BaseLineAdj known +{ dup /BaseLineAdj get _fScl mul } +{ 0 } +ifelse +/_baselineadj xdd +currentpoint iTm moveto +exch scalefont setfont +} bd +/TL { neg /_ld xdd } bd +/Tw { +/_cx xdd +_cx 0 ne _fTzero and +{ /jsfTzero } +{ /awidthshow } +ifelse +load /fawidthshowProc xdd +} bd +/Tc { /_ax xdd } bd +/Ts { /_rise xdd currentpoint iTm moveto } bd +/Tz { 100 div /_hs xdd iTm } bd +/Tk { exch pop _fScl mul neg 0 fWModeProc rmoveto } bd +/T* { 0 _ld Td } bd +/' { T* Tj } bd +/" { exch Tc exch Tw ' } bd +/TJ { +{ +dup type /stringtype eq +{ Tj } +{ 0 exch Tk } +ifelse +} forall +} bd +/T- { _hy Tj } bd +/d0/setcharwidth ld +/d1 { setcachedevice /sfc{}dd /ssc{}dd } bd +/nND {{/.notdef} repeat} bd +/T3Defs { +/BuildChar +{ +1 index /Encoding get exch get +1 index /BuildGlyph get exec +} +def +/BuildGlyph { +exch begin +GlyphProcs exch get exec +end +} def +} bd +/_pdfBoldRomanWidthProc +{ +stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth +} bd +/_pdfType0WidthProc +{ +dup stringwidth 0 0 moveto +2 index true charpath pathbbox +0 -1 +7 index 2 div .88 +setcachedevice2 +pop +} bd +/_pdfBoldBaseFont +10 dict begin +/FontType 3 def +/FontMatrix[1 0 0 1 0 0]def +/FontBBox[0 0 1 1]def +/Encoding cHexEncoding def +/_setwidthProc /_pdfBoldRomanWidthProc load def +/_bcstr1 1 string def +/BuildChar +{ +exch begin +_basefont setfont +_bcstr1 dup 0 4 -1 roll put +dup +_setwidthProc +0 0 moveto +dup show +_basefonto setfont +0 0 moveto +show +end +}bd +currentdict +end +def +/_pdfVerticalRomanT3Font +10 dict begin +/FontType 3 def +/FontMatrix[1 0 0 1 0 0]def +/FontBBox[0 0 1 1]def +/_bcstr1 1 string def +/BuildChar +{ +exch begin +_basefont setfont +_bcstr1 dup 0 4 -1 roll put +dup +_pdfType0WidthProc +0 0 moveto +show +end +}bd +currentdict +end +def +/MakeBoldFont +{ +dup dup length 2 add dict +begin +CopyFont +/PaintType 2 def +/StrokeWidth .03 0 FontMatrix idtransform pop def +/dummybold currentdict +end +definefont +_pdfBoldBaseFont 8 dict copy begin +/_basefont exch def +/_basefonto exch def +currentdict +end +definefont +} bd +/MakeBold { +findfont dup +/FontType get 0 eq +{ +_pdfBoldBaseFont /_setwidthProc /_pdfType0WidthProc load put +{MakeBoldFont} Type0CopyFont definefont +} +{ +dup /_fauxfont known not +{ +_pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put +MakeBoldFont +} +{ definefont } +ifelse +} +ifelse +pop +}bd +/MakeItalic { +findfont +dup /WMode 2 copy known +{ +get 1 eq +{ _italMtx_WMode1 } +{ _italMtx } +ifelse +} +{ pop pop _italMtx } +ifelse +makefont +definefont pop +}bd +/MakeBoldItalic { +/dummybold exch +MakeBold +/dummybold +MakeItalic +}bd +currentdict readonly pop end +%%EndFile +PDFText begin +[39/quotesingle 96/grave 128/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/degree/cent/sterling/section/bullet/paragraph/germandbls +/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash +/.notdef/plusminus/.notdef/.notdef/yen/mu/.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/divide +/.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 +0 TE +[1/dotlessi/caron 39/quotesingle 96/grave +127/bullet/bullet/bullet/quotesinglbase/florin/quotedblbase/ellipsis +/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE +/bullet/bullet/bullet/bullet/quoteleft/quoteright/quotedblleft +/quotedblright/bullet/endash/emdash/tilde/trademark/scaron +/guilsinglright/oe/bullet/bullet/Ydieresis/space/exclamdown/cent/sterling +/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine +/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus +/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla +/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters +/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis +/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash +/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave +/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute +/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde +/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute +/ucircumflex/udieresis/yacute/thorn/ydieresis +1 TE +end +%%BeginFile: pdfimage.prc +%%Copyright: Copyright 1987-1993 Adobe Systems Incorporated. All Rights Reserved. +PDF /PDFImage 38 dict put +PDF /PDFIVars 20 dict put +PDF /PDFImage get begin +/initialize { PDFImage begin } bd +/terminate { end } bd +/nulldict 0 dict def +/gv { PDFIVars exch get } bd +/pv { PDFIVars 3 1 roll put } bd +/BI { save /savelevel exch pv mark } bd +/EI { /savelevel gv restore } bd +end +%%EndFile +%%BeginFile: pdfimg2.prc +%%Copyright: Copyright 1987-1993 Adobe Systems Incorporated. All Rights Reserved. +PDF /PDFImage get begin +Level2? StartLoad { +/ID { +5 counttomark 2 idiv +dup 3 1 roll add +dict begin +{ def } repeat +cleartomark +currentdict +end +begin +/ImageType 1 def +/ImageMatrix [ Width 0 0 Height neg 0 Height ] def +/ImageMask here { not } { true } ifelse +{ /ImageMask false def } if +ImageMask not { ColorSpace setcolorspace } if +/Intent here { ri } if +/Decode here { pop } { +/Decode [ +ImageMask { +0 1 +} { +currentcolorspace 0 get /Indexed eq { +0 2 BitsPerComponent exp 1 sub +} { +mark currentcolor counttomark +dup 2 add 1 roll cleartomark +{ 0 1 } repeat +} ifelse +} ifelse +] def +} ifelse +[ +/DataSource here { pop } { +currentfile +/Filter here { +dup type /arraytype eq { length } { pop 1 } ifelse +1 sub 0 1 3 -1 roll { +/DecodeParms here { +dup type /arraytype eq { +1 index get +} if +dup null eq { pop } { exch } ifelse +} if +Filter dup type /arraytype eq +{ exch get } { exch pop } ifelse +filter +dup +} for +} if +/DataSource exch def +} ifelse +currentdict +/ImageMask here not { false } if +{ sfc imagemask } { image } ifelse +counttomark +{ dup status +{ dup flushfile closefile } +{ pop } +ifelse +} +repeat +pop +end +} bd +currentdict readonly pop +} EndLoad +end +%%EndFile +currentdict readonly pop +end end +/currentpacking where {pop setpacking}if +PDFVars/InitAll{[PDF PDFText PDFImage]{/initialize get exec}forall initgs 0 Tr}put +PDFVars/TermAll{[PDFImage PDFText PDF]{/terminate get exec}forall}put +PDFVars begin PDF begin PDFVars/InitAll get exec +userdict begin +%%BeginResource: font TimesNewRoman,Bold +%%EndResource +end +% Begin encoding-delta +[/N8/Times-Bold 1 TZ +% End encoding-delta +userdict begin +%%BeginResource: font TimesNewRoman +%%EndResource +end +% Begin encoding-delta +[/N6/Times-Roman 1 TZ +% End encoding-delta +userdict begin +%%BeginResource: font TimesNewRoman,Italic +%%EndResource +end +% Begin encoding-delta +[/N10/Times-Italic 1 TZ +% End encoding-delta +userdict begin +%%BeginResource: font CourierNew +%%EndResource +end +% Begin encoding-delta +[/N17/Courier 1 TZ +% End encoding-delta +PDFVars/TermAll get exec end end + +%%EndSetup +%%Page: 1 1 +%%BeginPageSetup +userdict /pgsave save put +PDFVars begin PDF begin PDFVars/InitAll get exec +%%EndPageSetup +0 0 612 792 RC +BT +303.6 36 TD +0 0 0 rg +/N6 9.84 Tf +0.0019 Tc +0 Tw +(1)Tj +ET +1 1 1 rg +180 657.12 252 62.88 re +f +BT +180 712.08 TD +0 0 0 rg +/N6 12 Tf +0.0933 Tc +-0.1293 Tw +(Stanford University)Tj +0 -14.16 TD +0.0768 Tc +-0.1128 Tw +(Computer Science Department)Tj +0 -27.84 TD +0.0447 Tc +0.0393 Tw +(CS140: Operating Systems)Tj +ET +1 1 1 rg +432 684 108 36 re +f +BT +448.08 712.08 TD +0 0 0 rg +0.03 Tc +0.174 Tw +(A. Arpaci-Dusseau)Tj +25.68 -14.16 TD +0.024 Tc +0.18 Tw +(Autumn 1998)Tj +-401.76 -77.28 TD +/N8 13.92 Tf +0.076 Tc +0 Tw +(Purpose)Tj +0 -24.72 TD +/N6 12 Tf +0.0743 Tc +1.0447 Tw +(In this handout, we give a brief overview of the behavior of the Solaris\ + 2.6 Time-Sharing \(TS\))Tj +0 -13.92 TD +0.096 Tc +0.3 Tw +(scheduler, an example of a )Tj +132.96 0 TD +/N10 12 Tf +0.0104 Tc +0.1496 Tw +(Multilevel Feedback Queue )Tj +136.8 0 TD +/N6 12 Tf +0.1083 Tc +0.3357 Tw +(scheduler. The information in this hand-)Tj +-269.76 -13.92 TD +0.1074 Tc +1.0849 Tw +(out, in conjunction with that given in Lecture, should be used to answer\ + Problem 4 of the first)Tj +0 -14.16 TD +0.0991 Tc +-0.2251 Tw +(assignment. The end of this document specifies in more detail which asp\ +ects of the Solaris sched-)Tj +0 -13.92 TD +0.1191 Tc +0.0369 Tw +(uler that you should implement. )Tj +0 -29.28 TD +/N8 13.92 Tf +0.0723 Tc +-0.1437 Tw +(Multilevel Feedback Queue Schedulers)Tj +0 -24.72 TD +/N6 12 Tf +0.1389 Tc +0.7251 Tw +(The goal of a multilevel feedback queue scheduler is to fairly and effic\ +iently schedule a mix of)Tj +0 -13.92 TD +0.0972 Tc +2.6544 Tw +(processes with a variety of execution characteristics. By controlling h\ +ow a process moves)Tj +0 -14.16 TD +0.063 Tc +0.7301 Tw +(between priority levels, processes with different characteristics can be\ + scheduled as appropriate.)Tj +0 -13.92 TD +0.0613 Tc +2.0627 Tw +(Priority-based schedulers attempt to provide a compromise between severa\ +l desirable metrics)Tj +T* +0.0834 Tc +0.6929 Tw +(\(e.g., response time for interactive jobs, throughput for compute-inte\ +nsive jobs, and fair alloca-)Tj +0 -14.16 TD +0.0875 Tc +0.0205 Tw +(tions for all jobs\). )Tj +0 -24 TD +0.0825 Tc +1.1158 Tw +(The queues in the system are ranked according to priority. Processes wai\ +ting in higher priority)Tj +0 -13.92 TD +0.0821 Tc +0.4899 Tw +(queues are always scheduled over those in lower priority queues. Proces\ +ses at the same priority)Tj +T* +0.1077 Tc +-0.0237 Tw +(are usually scheduled in a round-robin fashion.)Tj +0 -24 TD +0.072 Tc +-0.204 Tw +(Such schedulers tend to be )Tj +129.6 0 TD +/N10 12 Tf +0.0218 Tc +-0.2618 Tw +( preemptible )Tj +62.64 0 TD +/N6 12 Tf +0.0642 Tc +-0.2922 Tw +(in order to support interactive processes. That is, a higher)Tj +-192.24 -14.16 TD +0.0929 Tc +-0.0009 Tw +(priority process is immediately scheduled if a lower priority process is\ + running on the CPU. )Tj +0 -29.28 TD +/N8 13.92 Tf +0.1088 Tc +-0.1001 Tw +(Scheduling in Solaris)Tj +0 -24.72 TD +/N6 12 Tf +0.0748 Tc +2.3577 Tw +(The Solaris operating system is based on Unix System V Release 4 \(SVR4\)\ +. Scheduling in)Tj +0 -13.92 TD +0.0614 Tc +0.8226 Tw +(Solaris, as in all SVR4-based schedulers, is performed at two levels: cl\ +ass-independent routines)Tj +T* +0.068 Tc +0.836 Tw +(and class-dependent routines. Class-independent routines are those that\ + are responsible for dis-)Tj +0 -14.16 TD +0.0641 Tc +1.6279 Tw +(patching and preempting processes \(the low-level mechanisms\). Class-d\ +ependent routines are)Tj +0 -13.92 TD +0.0854 Tc +0.0198 Tw +(those that are responsible for setting the priority of each of its proce\ +sses \(the high-level policy\). )Tj +0 -24 TD +0.0772 Tc +0.2668 Tw +(By default, Solaris supports three scheduling classes: time-sharing \(TS\ +\), real-time \(RT\), and sys-)Tj +0 -13.92 TD +0.0817 Tc +0.3623 Tw +(tem \(SYS\). Users with root privileges can easily implement and add ne\ +w scheduling classes by)Tj +0 -14.16 TD +0.0944 Tc +0.7656 Tw +(adhering to a predefined interface. Each scheduling class gives each of\ + its processes a priority,)Tj +0 -13.92 TD +0.1174 Tc +-0.0334 Tw +(the range of which is shown below.)Tj +0 562.08 TD +0.072 Tc +-0.108 Tw +(Handout #9)Tj +ET +PDFVars/TermAll get exec end end +userdict /pgsave get restore +showpage +%%PageTrailer +%%EndPage +%%Page: 2 2 +%%BeginPageSetup +userdict /pgsave save put +PDFVars begin PDF begin PDFVars/InitAll get exec +%%EndPageSetup +0 0 612 792 RC +BT +303.6 36 TD +0 0 0 rg +/N6 9.84 Tf +0.0019 Tc +0 Tw +(2)Tj +-231.6 553.92 TD +/N6 12 Tf +0.0772 Tc +1.0334 Tw +(As long as a user has the correct privileges, he or she can submit jobs \ +to any scheduling class.)Tj +0 -13.92 TD +0.0647 Tc +0.2993 Tw +(\(See the man pages for )Tj +117.6 0 TD +/N8 12 Tf +0.03 Tc +0 Tw +(priocntl)Tj +40.56 0 TD +/N6 12 Tf +0.1242 Tc +0.2325 Tw +( on any machine running Solaris for information on how to sub-)Tj +-158.16 -13.92 TD +0.1112 Tc +0.7168 Tw +(mit jobs to different scheduling classes; however, since you probably do\ +n)Tj +-2.892 Tc +0 Tw +(\222)Tj +0.0493 Tc +0.8747 Tw +(t have root privileges)Tj +0 -14.16 TD +0.18 Tc +1.464 Tw +(on your machine, you won)Tj +-2.652 Tc +0 Tw +(\222)Tj +0.1005 Tc +1.5435 Tw +(t be able to do much.\) By default, jobs are executed in the same)Tj +0 -13.92 TD +0.0876 Tc +-0.0036 Tw +(scheduling class as the parent process that forked the job. Since your \ +shell is running in the time-)Tj +T* +0.1086 Tc +-0.0246 Tw +(sharing class, all of your jobs run by default in the time-sharing class\ +.)Tj +0 -24 TD +0.0816 Tc +1.2824 Tw +(To see the scheduling class of each process in the system, run )Tj +-1.692 Tc +0 Tw +(\223)Tj +318.72 0 TD +/N8 12 Tf +-0.0267 Tc +1.2507 Tw +(ps -edaflc)Tj +50.16 0 TD +/N6 12 Tf +-1.452 Tc +2.856 Tw +(\224 )Tj +-0.012 Tc +0 Tw +(\()Tj +13.68 0 TD +/N8 12 Tf +-0.09 Tc +0.114 Tw +(-c )Tj +13.44 0 TD +/N6 12 Tf +0.1292 Tc +1.2748 Tw +(is the flag that)Tj +-396 -14.16 TD +0.1028 Tc +0.6452 Tw +(shows the scheduling class\). The fourth column shows the scheduling cl\ +ass of the running pro-)Tj +0 -13.92 TD +0.091 Tc +0.461 Tw +(cess. Most jobs will be running in the TS class, with a few \(owned by \ +root\) running in the SYS)Tj +T* +0.062 Tc +0 Tw +(class.)Tj +0 -14.16 TD +/N17 12 Tf +-0.0133 Tc +0.0133 Tw +(elaine1:~> ps -edafc)Tj +0 -13.92 TD +-0.0077 Tc +0.0077 Tw +( UID PID PPID CLS PRI STIME TTY TIME CMD)Tj +T* +0 Tc +-0.0083 Tw +( root 0 0 SYS 96 Aug 01 ? 0:00 sched)Tj +0 -14.16 TD +-0.0077 Tw +( root 1 0 TS 58 Aug 01 ? 1:06 /etc/init -)Tj +0 -13.92 TD +-0.0083 Tw +( root 2 0 SYS 98 Aug 01 ? 0:02 pageout)Tj +T* +-0.0086 Tw +( root 3 0 SYS 60 Aug 01 ? 15:22 fsflush)Tj +0 -14.16 TD +-0.008 Tc +0.008 Tw +( root 245 239 TS 59 Aug 01 ? 0:00 ttymon)Tj +0 -13.92 TD +0 Tc +-0.0083 Tw +( root 181 1 TS 48 Aug 01 ? 0:00 sendmail -q15m)Tj +T* +-0.008 Tw +( root 239 1 TS 59 Aug 01 ? 0:00 sac -t 300)Tj +0 -14.16 TD +-0.0083 Tw +( root 96 1 TS 58 Aug 01 ? 0:00 rpcbind)Tj +0 -13.92 TD +-0.0092 Tw +( root 125 1 TS 59 Aug 01 ? 0:32 syslogd)Tj +0 -37.92 TD +/N6 12 Tf +0.0821 Tc +0.1519 Tw +(In this document, we only discuss the Solaris time-sharing \(TS\) class.\ + Note the priorities of each)Tj +0 -14.16 TD +0.1155 Tc +-0.0315 Tw +(of the processes, as listed in the fifth column.)Tj +0 -29.28 TD +/N8 13.92 Tf +0.1063 Tc +-0.2177 Tw +(Class Independent Functionality)Tj +0 -24.72 TD +/N6 12 Tf +0.0693 Tc +0.4855 Tw +(The class independent routines arbitrate across the scheduling classes. \ + This involves three basic)Tj +0 -13.92 TD +0.0438 Tc +0 Tw +(responsibilities.)Tj +0 -24 TD +-2.652 Tc +(\225)Tj +18 0 TD +0.0745 Tc +0.4015 Tw +(The process with the highest priority must be dispatched, and the state \ +of the preempted pro-)Tj +0 -13.92 TD +0.0444 Tc +0.0796 Tw +(cess saved. )Tj +-18 -24 TD +-2.652 Tc +0 Tw +(\225)Tj +18 0 TD +0.1096 Tc +-0.1256 Tw +(The class independent functions must notifying the class-dependent routi\ +nes when the state of)Tj +0 -14.16 TD +0.0722 Tc +0.1318 Tw +(its processes changes \(for example, at creation and termination, when a\ + process changes from)Tj +0 -13.92 TD +0.057 Tc +0.067 Tw +(blocked to runnable, or runnable to blocked, and when a 10ms timer expir\ +es\). )Tj +111.6 613.92 TD +0.084 Tc +0.12 Tw +(Scheduling Class)Tj +136.32 0 TD +0.0348 Tc +0 Tw +(Priorities)Tj +-143.04 -24 TD +0.084 Tc +(Real-Time)Tj +108 0 TD +-0.1251 Tc +(100-159)Tj +-108 -21.84 TD +0.134 Tc +(System)Tj +108 0 TD +-0.1176 Tc +(60-99)Tj +-108 -22.08 TD +0.077 Tc +(Time-Sharing)Tj +108 0 TD +-0.111 Tc +(0-59)Tj +-152.64 -22.08 TD +/N8 12 Tf +0.012 Tc +-0.108 Tw +(Table 1: )Tj +45.36 0 TD +0.0258 Tc +-0.139 Tw +(Range of Priorities for Scheduling Classes in Solaris)Tj +ET +188.64 628.32 0.48 91.44 re +f +296.64 627.84 0.48 92.4 re +f +422.88 628.32 0.48 91.44 re +f +188.64 720.24 m +188.64 719.76 l +423.36 719.76 l +423.36 720.24 l +h +f +189.36 695.52 m +189.36 695.04 l +422.64 695.04 l +422.64 695.52 l +h +f +189.36 693.12 m +189.36 692.64 l +422.64 692.64 l +422.64 693.12 l +h +f +188.64 672.24 m +188.64 671.76 l +423.36 671.76 l +423.36 672.24 l +h +f +188.64 650.16 m +188.64 649.68 l +423.36 649.68 l +423.36 650.16 l +h +f +188.64 628.32 m +188.64 627.84 l +423.36 627.84 l +423.36 628.32 l +h +f +PDFVars/TermAll get exec end end +userdict /pgsave get restore +showpage +%%PageTrailer +%%EndPage +%%Page: 3 3 +%%BeginPageSetup +userdict /pgsave save put +PDFVars begin PDF begin PDFVars/InitAll get exec +%%EndPageSetup +0 0 612 792 RC +BT +303.6 36 TD +0 0 0 rg +/N6 9.84 Tf +0.0019 Tc +0 Tw +(3)Tj +-231.6 676.08 TD +/N6 12 Tf +-2.652 Tc +(\225)Tj +18 0 TD +0.0755 Tc +0.147 Tw +(Processes must be moved between priority queues in the class independent\ + data structures, as)Tj +0 -14.16 TD +0.0968 Tc +-0.0048 Tw +(directed by its scheduling class, and must be moved between blocked and \ +ready queues. )Tj +-18 -29.28 TD +/N8 13.92 Tf +0.0866 Tc +-0.078 Tw +(Time-Sharing Scheduling Class)Tj +0 -24.72 TD +/N6 12 Tf +0.0848 Tc +1.8361 Tw +(The Time-Sharing scheduler in Solaris is an example of a multi-level fee\ +dback queue sched-)Tj +0 -13.92 TD +0.0841 Tc +0.4104 Tw +(uler. A job begins at priority 29. Compute-bound jobs then filter do\ +wn to the lower priorities,)Tj +T* +0.0777 Tc +0.5377 Tw +(where they are scheduled less frequently \(but for longer time-slices\) \ +and interactive jobs propa-)Tj +0 -14.16 TD +0.0919 Tc +0.7521 Tw +(gate to the higher priorities \(where they are scheduled whenever they h\ +ave work to perform, on)Tj +0 -13.92 TD +0.0831 Tc +-0.0441 Tw +(the assumption that they will soon relinquish the processor again\). In\ + the TS scheduler, the prior-)Tj +T* +0.1006 Tc +0.2297 Tw +(ity of a process is lowered after it consumes its allocated time-slice. \ + Its priority is raised if it has)Tj +0 -14.16 TD +0.091 Tc +0.033 Tw +(not consumed its time-slice before a )Tj +176.64 0 TD +/N10 12 Tf +0.0133 Tc +-0.0133 Tw +(starvation interval )Tj +94.8 0 TD +/N6 12 Tf +0.0315 Tc +0 Tw +(expires.)Tj +-271.44 -25.92 TD +/N8 12 Tf +0.0175 Tc +-0.2335 Tw +(Dispatch Table)Tj +0 -24 TD +/N6 12 Tf +0.084 Tc +0.0343 Tw +(The durations of the time-slices, the changes in priorities, and the sta\ +rvation interval are specified)Tj +0 -13.92 TD +0.0961 Tc +0.1593 Tw +(in a user-tunable dispatch table. The system administrator \(or anyone \ +with root privileges again\))Tj +0 -14.16 TD +0.089 Tc +0.4579 Tw +(can change the values in this table, thus configuring how the time-shari\ +ng scheduler manages its)Tj +0 -13.92 TD +0.12 Tc +-0.3693 Tw +(jobs. While this has the noble intention of allowing different systems \ + to tune the scheduler to bet-)Tj +T* +0.1129 Tc +1.5151 Tw +(ter handle their workloads, in reality no one really knows how to config\ +ure these tables well.)Tj +0 -14.16 TD +0.0878 Tc +0.1162 Tw +(Therefore, we will focus on the default dispatch table. )Tj +0 -24 TD +0.116 Tc +-0.032 Tw +(To see how this table is configured in your system, run)Tj +185.52 -24 TD +/N8 12 Tf +0.044 Tc +-0.18 Tw +(dispadmin -c TS -g)Tj +-185.52 -24 TD +/N6 12 Tf +0.1011 Tc +1.2888 Tw +(You should see something like that in Table 2. \(Looking at the man pag\ +es on dispadmin and)Tj +0 -13.92 TD +0.0963 Tc +0.9689 Tw +(ts_dptbl may also be helpful\). You will see one row for every priority\ + in the scheduling class:)Tj +T* +0.0871 Tc +0.0369 Tw +(from 0 to 59. For each priority, there are five columns: )Tj +0 -24 TD +-2.652 Tc +0 Tw +(\225)Tj +18 0 TD +/N8 12 Tf +0.0905 Tc +(ts_quantum:)Tj +65.28 0 TD +/N6 12 Tf +0.1021 Tc +1.6619 Tw +( Length of the time-slice \(in the actual table, this value is specified\ + in 10ms)Tj +-65.28 -14.16 TD +0.111 Tc +-0.051 Tw +(clock ticks; in the output from running dispadmin, the value is specifie\ +d in units of 1ms\).)Tj +-18 -24 TD +-2.652 Tc +0 Tw +(\225)Tj +18 0 TD +/N8 12 Tf +0.0413 Tc +(ts_tqexp:)Tj +47.28 0 TD +/N6 12 Tf +0.1113 Tc +0.4969 Tw +( Priority level of the new queue on which to place a process if it exc\ +eeds its time)Tj +-47.28 -13.92 TD +0.1106 Tc +-0.0196 Tw +(quantum. Normally this field links to a lower priority time-sharing\ + level. )Tj +-18 -24 TD +-2.652 Tc +0 Tw +(\225)Tj +18 0 TD +/N8 12 Tf +0.006 Tc +(ts_slpret:)Tj +48 0 TD +/N6 12 Tf +0.0994 Tc +1.3732 Tw +( the priority to change to \(generally a higher priority\) when the job \ +returns from)Tj +-48 -13.92 TD +0.0863 Tc +-0.0115 Tw +(sleeping \(i.e., from the blocked queue\) if ts_dispwait exceeds ts_max\ +wait \(see next entry\).)Tj +-18 -24 TD +-2.652 Tc +0 Tw +(\225)Tj +18 0 TD +/N8 12 Tf +0.048 Tc +(ts_maxwait)Tj +58.56 0 TD +/N6 12 Tf +0.0504 Tc +-0.0864 Tw +(: A per process counter,)Tj +119.52 0 TD +/N8 12 Tf +0.018 Tc +-0.154 Tw +( ts_dispwait, )Tj +69.6 0 TD +/N6 12 Tf +0.072 Tc +-0.108 Tw +(is initialized to zero each time a process)Tj +-247.68 -14.16 TD +0.0602 Tc +1.081 Tw +(is placed back on the dispatcher queue after its time quantum has e\ +xpired or when it is)Tj +0 -13.92 TD +0.0602 Tc +0.0347 Tw +(awakened \(ts_dispwait is not reset to zero when a process is preempt\ +ed by a higher prior-)Tj +T* +0.0862 Tc +-0.1889 Tw +(ity process\). This counter is incremented once per second. If a \ +process)Tj +-2.652 Tc +0 Tw +(\222)Tj +0.0572 Tc +-0.0932 Tw +(s ts_dispwait value)Tj +0 -14.16 TD +0.0843 Tc +0.1197 Tw +(exceeds the ts_maxwait value for its level, the process)Tj +-2.652 Tc +0 Tw +(\222)Tj +0.1033 Tc +0.1007 Tw +(s priority is changed to that indicated)Tj +0 -13.92 TD +0.092 Tc +-0.0189 Tw +(by ts_lwait. The purpose of this field is to prevent starvation.)Tj +-18 -24 TD +-2.652 Tc +0 Tw +(\225)Tj +18 0 TD +/N8 12 Tf +0.036 Tc +(ts_lwait:)Tj +43.92 0 TD +/N6 12 Tf +0.0936 Tc +0.5047 Tw +( the priority to change to \(generally a higher priority\) if the starva\ +tion timer expires)Tj +-43.92 -13.92 TD +0.0825 Tc +-0.0225 Tw +(before the job consumes its time-slice \(i.e., if ts_dispwait exceeds ts\ +_maxwait\).)Tj +ET +PDFVars/TermAll get exec end end +userdict /pgsave get restore +showpage +%%PageTrailer +%%EndPage +%%Page: 4 4 +%%BeginPageSetup +userdict /pgsave save put +PDFVars begin PDF begin PDFVars/InitAll get exec +%%EndPageSetup +0 0 612 792 RC +BT +303.6 36 TD +0 0 0 rg +/N6 9.84 Tf +0.0019 Tc +0 Tw +(4)Tj +ET +1 1 1 rg +103.44 80.88 405.12 630.24 re +f +BT +103.44 704.4 TD +0 0 0 rg +0.1271 Tc +-0.0582 Tw +(# ts_quantum ts_tqexp ts_slpret ts_maxwait ts_lwait #PRIORITY LEVEL \ + )Tj +0 -10.08 TD +-0.0635 Tc +0.1735 Tw +(200 0 50 0 50 # 0 )Tj +T* +0.1753 Tw +(200 0 50 0 50 # 1 )Tj +0 -9.84 TD +0.1735 Tw +(200 0 50 0 50 # 2 )Tj +0 -10.08 TD +(200 0 50 0 50 # 3 )Tj +T* +(200 0 50 0 50 # 4 )Tj +0 -9.84 TD +(200 0 50 0 50 # 5 )Tj +0 -10.08 TD +(200 0 50 0 50 # 6 )Tj +T* +(200 0 50 0 50 # 7 )Tj +0 -9.84 TD +(200 0 50 0 50 # 8 )Tj +0 -10.08 TD +(200 0 50 0 50 # 9 )Tj +T* +-0.0581 Tc +0.1698 Tw +(160 0 51 0 51 # 10 )Tj +0 -9.84 TD +(160 1 51 0 51 # 11 )Tj +0 -10.08 TD +(160 2 51 0 51 # 12 )Tj +T* +(160 3 51 0 51 # 13 )Tj +0 -9.84 TD +(160 4 51 0 51 # 14 )Tj +0 -10.08 TD +(160 5 51 0 51 # 15 )Tj +T* +(160 6 51 0 51 # 16 )Tj +0 -9.84 TD +(160 7 51 0 51 # 17 )Tj +0 -10.08 TD +(160 8 51 0 51 # 18 )Tj +T* +(160 9 51 0 51 # 19 )Tj +0 -9.84 TD +-0.0535 Tc +0.1627 Tw +(120 10 52 0 52 # 20 )Tj +0 -10.08 TD +(120 11 52 0 52 # 21 )Tj +T* +(120 12 52 0 52 # 22 )Tj +0 -9.84 TD +(120 13 52 0 52 # 23 )Tj +0 -10.08 TD +(120 14 52 0 52 # 24 )Tj +T* +(120 15 52 0 52 # 25 )Tj +0 -9.84 TD +(120 16 52 0 52 # 26 )Tj +0 -10.08 TD +(120 17 52 0 52 # 27 )Tj +T* +(120 18 52 0 52 # 28 )Tj +0 -9.84 TD +0.1609 Tw +(120 19 52 0 52 # 29 )Tj +0 -10.08 TD +-0.0181 Tc +0.1212 Tw +(80 20 53 0 53 # 30 )Tj +T* +(80 21 53 0 53 # 31 )Tj +0 -9.84 TD +(80 22 53 0 53 # 32 )Tj +0 -10.08 TD +(80 23 53 0 53 # 33 )Tj +T* +0.1186 Tw +(80 24 53 0 53 # 34 )Tj +0 -9.84 TD +0.1212 Tw +(80 25 54 0 54 # 35 )Tj +0 -10.08 TD +(80 26 54 0 54 # 36 )Tj +T* +(80 27 54 0 54 # 37 )Tj +0 -9.84 TD +0.1186 Tw +(80 28 54 0 54 # 38 )Tj +0 -10.08 TD +0.1212 Tw +(80 29 54 0 54 # 39 )Tj +T* +(40 30 55 0 55 # 40 )Tj +0 -9.84 TD +0.1186 Tw +(40 31 55 0 55 # 41 )Tj +0 -10.08 TD +0.1212 Tw +(40 32 55 0 55 # 42 )Tj +T* +0.1186 Tw +(40 33 55 0 55 # 43 )Tj +0 -9.84 TD +0.1212 Tw +(40 34 55 0 55 # 44 )Tj +0 -10.08 TD +(40 35 56 0 56 # 45 )Tj +T* +(40 36 57 0 57 # 46 )Tj +0 -9.84 TD +(40 37 58 0 58 # 47 )Tj +0 -10.08 TD +(40 38 58 0 58 # 48 )Tj +T* +0.1186 Tw +(40 39 58 0 59 # 49 )Tj +0 -9.84 TD +(40 40 58 0 59 # 50 )Tj +0 -10.08 TD +0.1212 Tw +(40 41 58 0 59 # 51 )Tj +T* +(40 42 58 0 59 # 52 )Tj +0 -9.84 TD +(40 43 58 0 59 # 53 )Tj +0 -10.08 TD +(40 44 58 0 59 # 54 )Tj +T* +(40 45 58 0 59 # 55 )Tj +0 -9.84 TD +(40 46 58 0 59 # 56 )Tj +0 -10.08 TD +(40 47 58 0 59 # 57 )Tj +T* +0.1186 Tw +(40 48 58 0 59 # 58 )Tj +0 -9.84 TD +-0.0281 Tc +0.133 Tw +(20 49 59 32000 59 # 59)Tj +0 -18 TD +0.1233 Tc +-0.0801 Tw +(Table 2: Default Solaris Time-Sharing Dispatch Table )Tj +ET +PDFVars/TermAll get exec end end +userdict /pgsave get restore +showpage +%%PageTrailer +%%EndPage +%%Page: 5 5 +%%BeginPageSetup +userdict /pgsave save put +PDFVars begin PDF begin PDFVars/InitAll get exec +%%EndPageSetup +0 0 612 792 RC +BT +303.6 36 TD +0 0 0 rg +/N6 9.84 Tf +0.0019 Tc +0 Tw +(5)Tj +-231.6 676.08 TD +/N6 12 Tf +0.0731 Tc +0.3138 Tw +(In this table, the priority of jobs ranges from a high of 59 down to 0.\ + Time-slices begin at 20ms)Tj +0 -14.16 TD +0.0887 Tc +1.5553 Tw +(at the highest priority and gradually increase in duration up to 200ms a\ +t the lowest priorities.)Tj +0 -13.92 TD +0.0769 Tc +0.0521 Tw +(Generally, the priority of a process decreases by 10 levels after it con\ +sumes its time-slice; the pri-)Tj +T* +0.0616 Tc +0.091 Tw +(ority of a process is increased to 50 or above when the starvation timer\ + expires.)Tj +0 -26.16 TD +/N8 12 Tf +0.0591 Tc +0 Tw +(Implementation)Tj +0 -24 TD +/N6 12 Tf +0.0869 Tc +0.3571 Tw +(For each job in the TS class, the following data structure is maintained\ + \(we)Tj +-2.652 Tc +0 Tw +(\222)Tj +0.1296 Tc +0.2544 Tw +(ve removed a few of)Tj +0 -13.92 TD +0.1285 Tc +-0.0045 Tw +(the fields for simplicity\):)Tj +0 -12.72 TD +/N17 9.84 Tf +0.096 Tc +0 Tw +(/*)Tj +0 -12 TD +0.0901 Tc +0.0059 Tw +( * time-sharing class specific thread structure)Tj +T* +0.096 Tc +0 Tw +( */)Tj +T* +0.084 Tc +0.012 Tw +(typedef struct tsproc {)Tj +T* +0.096 Tc +0 Tw +( long)Tj +54 0 TD +0.076 Tc +0.02 Tw +( ts_timeleft;)Tj +132 0 TD +0.096 Tc +0 Tw +( /* time remaining in quantum */)Tj +-186 -12 TD +0.09 Tc +0.006 Tw +( long ts_dispwait; /* number of seconds since */)Tj +0 -12 TD +0.096 Tc +-0.0062 Tw +( /* start of quantum \(not reset */)Tj +T* +-0.0067 Tw +( /* upon preemption\) */)Tj +T* +0.088 Tc +0.008 Tw +( pri_t ts_pri; /* priority \(0-59\) */)Tj +T* +0.0891 Tc +0.0069 Tw +( kthread_t *ts_tp; /* pointer to thread */)Tj +T* +0.0909 Tc +0.0051 Tw +( struct tsproc *ts_next; /* link to next tsproc on list */)Tj +T* +0.0907 Tc +0.0053 Tw +( struct tsproc *ts_prev; /* link to previous tsproc */)Tj +T* +0.096 Tc +0 Tw +(} tsproc_t;)Tj +0 -23.28 TD +/N6 12 Tf +0.0908 Tc +0.7224 Tw +(The kthread_t structure tracks the necessary information to context-swit\ +ch to and from this pro-)Tj +0 -13.92 TD +0.0673 Tc +0.6617 Tw +(cess. This structure is kept separate from the time-sharing class in or\ +der to separate the mecha-)Tj +0 -14.16 TD +0.0989 Tc +0.0178 Tw +(nisms of the dispatcher from the policies of the scheduler. )Tj +0 -24 TD +0.0592 Tc +0.0548 Tw +(There are seven interesting routines in the TS class:)Tj +T* +-2.652 Tc +0 Tw +(\225)Tj +18 0 TD +/N8 12 Tf +0.018 Tc +-0.234 Tw +(ts_enterclass\(thread *T\):)Tj +128.16 0 TD +/N6 12 Tf +0.0846 Tc +0.0321 Tw +( called when a new thread is added to the TS class.)Tj +-128.16 -13.92 TD +0.0675 Tc +0.0405 Tw +(It initializes a tsproc structure for this process and adds it to the li\ +st of processes)Tj +-18 -24 TD +-2.652 Tc +0 Tw +(\225)Tj +18 0 TD +/N8 12 Tf +0.0256 Tc +-0.2416 Tw +(ts_exitclass\(thread *T\):)Tj +120.24 0 TD +/N6 12 Tf +0.0819 Tc +0.0155 Tw +( called when the thread terminates or exits the class.)Tj +-120.24 -13.92 TD +0.0722 Tc +0.0518 Tw +(The tsproc structure is removed from the list of processes.)Tj +-18 -24 TD +-2.652 Tc +0 Tw +(\225)Tj +18 0 TD +/N8 12 Tf +0.048 Tc +-0.264 Tw +(ts_tick\(thread *T\):)Tj +96.96 0 TD +/N6 12 Tf +0.1131 Tc +-0.0891 Tw +( called once every 10ms with a pointer to the currently running thread.)Tj +-96.96 -14.16 TD +0.1146 Tc +0.7934 Tw +(The ts_timeleft variable of the running thread is decremented by one. I\ +f ts_timeleft goes to)Tj +0 -13.92 TD +0.094 Tc +-0.2712 Tw +(zero, then its new priority is calculated according to the value of ts_t\ +qexp in the table, its time-)Tj +T* +0.0714 Tc +-0.1356 Tw +(slice is reset, and ts_dispwait is cleared; the thread is then added to \ +the back of the appropriate)Tj +0 -14.16 TD +0.1083 Tc +-0.1101 Tw +(priority queue and a new job is scheduled.)Tj +-18 -24 TD +-2.652 Tc +0 Tw +(\225)Tj +18 0 TD +/N8 12 Tf +0.045 Tc +(ts_update\(\):)Tj +61.92 0 TD +/N6 12 Tf +0.1059 Tc +-0.0619 Tw +( called once a second to check the starvation qualities of each job.)Tj +-61.92 -13.92 TD +0.082 Tc +0.5848 Tw +(The routine increments the ts_dispwait counter of every process in the c\ +lass \(even those that)Tj +0 -13.92 TD +0.0962 Tc +1.3318 Tw +(are blocked\) by one. If the job is on the ready queue \(i.e., the job\ + is neither running nor)Tj +0 -14.16 TD +0.0806 Tc +0.0034 Tw +(blocked\), then if its ts_dispwait exceeds ts_maxwait, the priority and\ + the ts_dispwait value of)Tj +0 -13.92 TD +0.0752 Tc +0.0488 Tw +(this process are reset \(but not ts_timeleft\). Note that this may invo\ +lve rearranging the priority)Tj +T* +0.0394 Tc +0.1646 Tw +(queues. )Tj +-18 -24 TD +-2.652 Tc +0 Tw +(\225)Tj +18 0 TD +/N8 12 Tf +0.024 Tc +-0.24 Tw +(ts_sleep\(thread *T\):)Tj +102.96 0 TD +/N6 12 Tf +0.0904 Tc +0.0136 Tw +( called when the thread blocks \(e.g., due to I/O or synchronization\). \ +)Tj +-102.96 -14.16 TD +0.0935 Tc +0.0785 Tw +(The TS routine does not need to do anything in these circumstance. Howe\ +ver, the dispatcher,)Tj +ET +PDFVars/TermAll get exec end end +userdict /pgsave get restore +showpage +%%PageTrailer +%%EndPage +%%Page: 6 6 +%%BeginPageSetup +userdict /pgsave save put +PDFVars begin PDF begin PDFVars/InitAll get exec +%%EndPageSetup +0 0 612 792 RC +BT +303.6 36 TD +0 0 0 rg +/N6 9.84 Tf +0.0019 Tc +0 Tw +(6)Tj +-213.6 676.08 TD +/N6 12 Tf +0.081 Tc +0.7401 Tw +(or class-independent routines, must add the thread to the blocked queue \ +and schedule a new)Tj +0 -14.16 TD +0.096 Tc +0 Tw +(thread.)Tj +-18 -24 TD +-2.652 Tc +(\225)Tj +18 0 TD +/N8 12 Tf +0.0618 Tc +-0.1578 Tw +(ts_wakeup\(thread *T\): )Tj +120.48 0 TD +/N6 12 Tf +0.1034 Tc +-0.0194 Tw +(called when the blocked thread becomes ready. )Tj +-120.48 -13.92 TD +0.0809 Tc +0.0751 Tw +(If the ts_dispwait value associated with this process is greater than th\ +e value of ts_maxwait in)Tj +0 -13.92 TD +0.0816 Tc +0.1224 Tw +(the dispatch table, then the priority of the process is set to that spec\ +ified by ts_slpret, its time-)Tj +0 -14.16 TD +0.0892 Tc +-0.1385 Tw +(slice \(ts_timeleft\) is reset, and ts_dispwait is cleared. If the prio\ +rity of this job is less than that)Tj +0 -13.92 TD +0.1074 Tc +-0.1567 Tw +(of the running job, then the newly awoken job is added to the back of it\ +s priority queue; other-)Tj +T* +0.0831 Tc +0.0409 Tw +(wise, it preempts the currently running job.)Tj +-18 -24 TD +-2.652 Tc +0 Tw +(\225)Tj +18 0 TD +/N8 12 Tf +0.0206 Tc +0.0034 Tw +(ts_preempt\(thread *T\): )Tj +123.84 0 TD +/N6 12 Tf +0.086 Tc +0.022 Tw +(called when the thread is preempted by a higher priority thread.)Tj +-123.84 -14.16 TD +0.1009 Tc +-0.0278 Tw +(The preempted thread is added to the front of its priority queue.)Tj +-18 -25.92 TD +/N8 12 Tf +-0.0255 Tc +0 Tw +(Fairness)Tj +0 -24 TD +/N6 12 Tf +0.086 Tc +0.938 Tw +(The Solaris time-sharing scheduler approximates fair allocations by decr\ +easing the priority of a)Tj +0 -13.92 TD +0.0971 Tc +0.0469 Tw +(job the more that it is scheduled. Therefore, a job that is runnable re\ +latively infrequently remains)Tj +0 -14.16 TD +0.0963 Tc +0.3477 Tw +(at a higher priority and is scheduled over lower priority jobs. However\ +, due to the configuration)Tj +0 -13.92 TD +0.0914 Tc +-0.1674 Tw +(of the default dispatch table \(i.e., the starvation interval is set to \ +zero\), you will note that the prior-)Tj +T* +0.1038 Tc +0.8061 Tw +(ity of every process is raised once a second, regardless of whether or n\ +ot it is actually starving.)Tj +0 -14.16 TD +0.0824 Tc +0.1401 Tw +(Thus, the allocation history of each process is erased every second and \ +compute-bound processes)Tj +0 -13.92 TD +0.0881 Tc +-0.0241 Tw +(tend to acquire more than their fair share of the resources. )Tj +0 -24 TD +0.0766 Tc +0.8794 Tw +(This behavior is illustrated in Figure 1 for three competing jobs that r\ +elinquish the processor at)Tj +0 -13.92 TD +0.123 Tc +0.1343 Tw +(different rates while waiting for I/O to complete: a )Tj +247.68 0 TD +/N10 12 Tf +0.04 Tc +0 Tw +(coarse)Tj +31.92 0 TD +/N6 12 Tf +0.0662 Tc +0.3092 Tw +( job that rarely relinquishes the CPU, a)Tj +-279.6 -14.16 TD +/N10 12 Tf +0 Tc +0 Tw +(medium)Tj +37.92 0 TD +/N6 12 Tf +0.1129 Tc +-0.0589 Tw +( job that does so more frequently, and a)Tj +189.36 0 TD +/N10 12 Tf +-0.06 Tc +-0.18 Tw +( fine)Tj +21.12 0 TD +/N6 12 Tf +0.0796 Tc +0.0444 Tw +( job that often relinquishes the CPU. The fig-)Tj +-248.4 -13.92 TD +0.091 Tc +-0.157 Tw +(ure shows a typical snapshot over a five second execution interval. As \ +described, each second the)Tj +0 -13.92 TD +0.0788 Tc +0.2452 Tw +(priority of all three jobs is raised to level 50 or higher. As a job ex\ +ecutes and consumes its time-)Tj +0 -14.16 TD +0.0872 Tc +-0.1232 Tw +(slice, its priority is lowered about ten levels Since the coarse job ru\ +ns more frequently, it drops in)Tj +0 -13.92 TD +0.0922 Tc +-0.0215 Tw +(priority at a faster rate than the other two jobs.)Tj +ET +1 1 1 rg +160.08 103.92 288 207.12 re +f +q +288 0 0 207.12 160.08 103.92 cm +BI + /Width 341 + /Height 252 + /BitsPerComponent 1 + /ColorSpace /DeviceGray + /Decode [1 0 ] + /DecodeParms [null <> ] + /Filter [/ASCII85Decode /CCITTFaxDecode ] +ID +-D5]FA8n>d7gp!_JX[(R5">e_j!0;@j@9Z7"XAU2d2e_p*"\,c3#Ka/8'jaH&a,4- +#\85\,N&M_PW@[i'VW`2TgqY6%"m9(Eif#,+NhRZU!,MtGK`'RHROJclh`+B1kB";)XU5`d7B!_EFsYEA<> +W";hc#V..7_C0RG,M4,<#UTrL":JHNs8VkBJ)gS/pdI^NJ,^T3$iUPcIQulmn,>E? +503?pi.6CU&2*jd%t&=]^]+FVoEZ5KJ'@m'?SB1PJUdA8m4e5Q":.5H#_2:^%N/f'pf!H3=[S;G-:'6g-A!n+)8(a8a25&G'O>A*+jmo?7,0pqB3^I#glAa5hHbrunC*s'LhS +I"*Poa'aH'p\@1:3QM0tU%'5.aUabgr."a]are\(."B;6r'rI@s7o%^J!;s'j8Y2? +p%\?U*0G+I)H!Es8Dpnr]g3Gs8PIG3J[Y7s6PV-PW<76s,[3Q +q"]^FargZ\+"2-L+92B)Ld.%E0_rchs8N$HIin^jreJP<5!T(.p-g(G+3-A@s-,b@ +q"]^Fs8VG5U&8p1r-tF`r]Xc^O8o#Ck9'0`L[kEErKmdb?]US%J,^KBrr4Br*97(u +;#!? +9Re/)a?fk(J,^i[jU_@rr`K3\s5W.V3<0$S1&ptrIj#'sr."bF8,rV4+92B3L]

`%T)6s:ur0`jU^Si3X?oj#cI5$NZo<../AYu+e3LW +`'f!*NZjP$8,R6(+91mK+7^D$s,RQe6BC1,s8W*k+#\B>LQD!#^]006deAlbj=(%i +cMs!Ar]n*qr"2;\3t)[MO8o7[s7hZ9.0'>Hs,Y*JM#[M@q&'+_j='(;s8W-!kTYf[ +J&hS=a6A`&?fWWqq1o"%nhL1E+J=5as8W,sKcg5Bs7,ft&cBQHs5[\br^)W3O8o7[ +rb24WEW?'Zcm'(s$97/i0`F<97R-q6'G(6)0L,U;YN.,23<0$=m=$:II)GaZq&'*^ +IR9&]O8n8p5QCaC$ND1fJ,fPhne?R-q1nM7s8U.>ne`J#s+C6'+34E]s+GCl+#*`T +n,NFK.0'=/_#D+Kr]WRHs851^6BC7Nr-eV@2$8oF3[:@[,G7Vm3CB#k6^0PQ9?8-p +@"23I7!(peF@S`@7mqGh7!(peF;OuPLkrE*"7eDg"EFJ>K0]J:s8W)W"lnZ$T^dU: +ZV[HN'sIQ#N=g8<+G/+;$?DZ7.E@QgJd@Bg.IhEf,Da_HOD>h(>^$bl&;%u<%un@( +s7l`VO6@dCc(E6i8,d69&7:+'N.8oaO.:^j%>0K:=9&<\j?^WjoF):\r]WSuru]1/ +r8[h:&7>J;j5`MHs8O/`5lZKRs8I$T&3o4Ts8W'0?iU0+j8]/ZrX`H:s8V-Zs8W'0 +?iU0+j8]/ZrX`H:s8RoTs8W'd*$E#rnc/.Zs,[(Es8G<(na[g]s8VWm&-)\0r]cM! +Lu^l$C12AniFcIa=lC(c3"u<7a>isM*)_:ds79mDnbu!BO,nejYlFWNs8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!r.a!Ha20:q*@LkCEA,BG%R?\-"Tsi7 +*.^BRs8Kq9nc/+k&b60Z9G8Cu,T=`S_4ZE+*saC5j$=Z-5lr:hO?eWs7i_^E*9\N$ +kTc.KUS,XnNfa:;#bf\";l'bt8Q(TU+^lO5PrMBf8<8'$W3Q35]);`X2NTg8#,i@b +O>@?#^EJ[U_i@)4F)f5C5i`hR,lE[-(dbk4ni*(.f.:sTX/"WS +EI +Q +BT +286.08 85.92 TD +0 0 0 rg +/N8 12 Tf +-0.0086 Tc +0.0326 Tw +(Figure 1)Tj +ET +PDFVars/TermAll get exec end end +userdict /pgsave get restore +showpage +%%PageTrailer +%%EndPage +%%Page: 7 7 +%%BeginPageSetup +userdict /pgsave save put +PDFVars begin PDF begin PDFVars/InitAll get exec +%%EndPageSetup +0 0 612 792 RC +BT +303.6 36 TD +0 0 0 rg +/N6 9.84 Tf +0.0019 Tc +0 Tw +(7)Tj +-231.6 676.08 TD +/N6 12 Tf +0.1058 Tc +-0.1418 Tw +(The impact of this policy on the relative execution times of the three a\ +pplications is shown in Fig-)Tj +0 -14.16 TD +0.0714 Tc +-0.2345 Tw +(ure 2. Because the coarse application acquires more CPU time, it finish\ +es its work earlier than the)Tj +0 -13.92 TD +0.0967 Tc +-0.2527 Tw +(other applications, even though all three jobs require the same amount o\ +f time in a dedicated envi-)Tj +T* +0.1286 Tc +0 Tw +(ronment)Tj +0 -290.4 TD +/N8 13.92 Tf +0.0697 Tc +-0.0611 Tw +(Project Requirements)Tj +0 -24.72 TD +/N6 12 Tf +0.1132 Tc +1.2458 Tw +(For your project, you need to implement code that is similar in function\ +ality to the Solaris TS)Tj +0 -13.92 TD +0.1128 Tc +-0.0954 Tw +(scheduler, but your code does not have to be structured in the same way.\ + Implement your code in)Tj +0 -14.16 TD +0.1186 Tc +-0.0253 Tw +(whatever manner you find easiest when interfacing with the already exist\ +ing Nachos code. )Tj +0 -24 TD +0.0825 Tc +0.2743 Tw +(Specifically, you are not required to separate the class-independent and\ + class-dependent schedul-)Tj +0 -13.92 TD +0.1074 Tc +0.6886 Tw +(ing functionality. You do not need to support multiple scheduling class\ +es. You can implement)Tj +T* +0.13 Tc +0.419 Tw +(any routines that you feel are necessary, not just the seven functions w\ +e specifically listed. You)Tj +0 -14.16 TD +0.1262 Tc +-0.0593 Tw +(can pass any parameters that you find helpful.)Tj +0 -24 TD +0.068 Tc +1.416 Tw +(However, it is important that your approach be table-driven, with a user\ +-configurable dispatch)Tj +0 -13.92 TD +0.1033 Tc +0.154 Tw +(table. Your table should be initialized to the default values in Solari\ +s 2.6, but you may also want)Tj +T* +0.1348 Tc +0.3492 Tw +(to experiment with different configurations. To demonstrate the functio\ +nality of your scheduler,)Tj +0 -14.16 TD +0.1051 Tc +0.3089 Tw +(you may want to print out the change in priorities of several different \ +competing processes, as in)Tj +0 -13.92 TD +0.0405 Tc +0.1635 Tw +(Figure 1. )Tj +ET +1 1 1 rg +150.96 432 315.12 225.12 re +f +q +315.12 0 0 225.12 150.96 432 cm +BI + /Width 341 + /Height 252 + /BitsPerComponent 1 + /ColorSpace /DeviceGray + /Decode [1 0 ] + /DecodeParms [null <> ] + /Filter [/ASCII85Decode /CCITTFaxDecode ] +ID +-D5T@*#T_R#j@>3`c+g8+WV0Tfc1\<_$Ju0_BXXE`^^,YNXB)_TA[R+A:+?CLE*3A +cXe*VS9']+%s"dE_M87$4L*'"XLs09$?CnbQ$-HLT#"/]6"dKqK-ifZ5c>5sGST*A +('rsj";T%>n;8=KHk8UMj2""b-9Z<61Ch;jHNX\,"MoRQK%C,5ru2E%fMDO."onU] ++Gu3`s1ub9s,ZeB^[OLe&3u1=s6("HM"grK#S\sY"mD"so%s^+Qf%]P?fV/rK.?p# ++Ft&`5Q?BBE.8u%$H3'Q`#qF.A+CK[83)GJG\.lJa!%Pi]`\of!lcDINe/_LOL_]m +&!;pG@$c]Ls8W-!s8W-!s8W-!q=Bu+i`VE4_;c]*Bb0DMM!-%T7!Xl/FGMK.69hF'kn1c$V^i+[LEZ/f4es=0Jgc$" +TKs19:e2-pJj=la*g7EP6jgsX?P&QdO0/kpj'fuadR0WVrK69;4jYG[j.JpS>f3A( +,DM:660o.*j5@`^U#<`rTTYD?i].Et-ZFZ'+M#9hVNU`D77'>,BZOg+[iku9j>*GQ +'KSVtLE-FMrV6U-#cAei.Re%_4@0#?4bB2ELH+JfLD68n.hFuP@0Al`J(NW\TKt8= +jEqM9q&]_T#`:oC;kX@d-+2)cI"21rlnK)@c4U\SJgc,_?[r+5q?16r8KnS\TXnZQ +=8p,\6f\*?(Ud87/_(c7D8&9Zss00M:V1Kr9TuAUerWqQAJ"T7Q +Jd(:?ThEf^I"jmD^6;tZ6'aJr&,sQ[8VGVbYK,UT +OouFHEMWG9CM]C&5nssK/dehE5ns!F&B#cJKNICb#V_E,Ml#I06'^AZ3Zs'P#X:r@ +&OV3`("E?lpdpA8&jZSBr<,ENGo[)#64uoWI4088q?\Z$oA5Zs";F0.7mR:#++bn] +LXKT[$kC69s6(d9aUXM%`->K$#rf4YV;S_6J!%WR4X(-KUd#-_2C,8C +JZg:=+o**8aS.t34h*cg[A?H9J?K7\5qHu,'GZn#5nH/6k^!f*i?AMrTY2gIHkklK +\Ju(C:dGVbJL%p*+I-@T5f#U"opJd;oT +4:II*";!&H:cO-%";$WeJHR2&Uk0a[KQ6XI$%k+JdU6d7NhZ#S;Y#s5q7N+IB9oNg(YPD-rre"eE +O?jK*=X!Eg"??CG!XNl0&d/c!$F/"b+JYPc&4!2rjD\%nU(B]g5_026S-=./,Sq\W +SKNM/*$C%/JdLK;9t[s";8aG ++B/pn"eEdUL99\gUcgImC')fh+ID:T+Fse`X8#+DYU#<$G(n#X5ls<'cp\F3:k)"Y +5nVIL1,s##"G-tFNYEUi!rmoZ+UB7F_FPf83'ef$=`L5C+[KLfdKgD;&B#1$dRYYi +&G1Q>M!-BKKFf7m&f_c/(%jirNY2I+TY2T^5nAX3#U/t.O<@,>8HK5_P!K0AJHX'X +00pnFWX'70JHX'X0*DhP"Wp#U&2-Qc82!73#U"oP&d`kTNa[0(63quB+YQBUJg6r% +":-:q8HK//qPZ[jTRd4[HmTg)JdWa2)PFT/59lhQNg%Ckq4!4i7QCpOaDHr)CiUJ) +OP:b0d/F"Elp(O?s8O3R)\%&o80Fl71uQ_J:(IIbLHH-tZClrB)E:/G%9J3]TRd^E +MKBCtF:h9PMKgO<4,+hHG-QOQRF\0qo3XmJ:ddXml^Bc"PJNs1O?6;Kr?`3o# +lLGC&GVG#&L62/eI`#TeCc3+Qp)=,?2B*/LAfD2.6Qe+=*/7;Pj,QBUa>AoKq&Hmu +Km3@RD`E`Z=QOg08&D@..Lfd^Ab2<1i.<2H8.\J4r/ZF85ob=[!XXOr&b&(?YYW@% +"nipcr-Jo4s'bq9Da9GEs6rN#5`q)!hLP_3o9eLQJe3JDrX^7B@"eXb#X/eC_6,!c +6']N,O7&?j^]XX&~> +EI +Q +BT +286.08 414 TD +0 0 0 rg +/N8 12 Tf +-0.0086 Tc +0.0326 Tw +(Figure 2)Tj +ET +PDFVars/TermAll get exec end end +userdict /pgsave get restore +showpage +%%PageTrailer +%%EndPage +%%Trailer +%%DocumentProcessColors: Cyan Magenta Yellow Black +%%EOF diff --git a/doc/threads.texi b/doc/threads.texi index c604b96..4341cac 100644 --- a/doc/threads.texi +++ b/doc/threads.texi @@ -32,8 +32,10 @@ primitives (semaphores, locks, and condition variables). @c FIXME: base system doesn't do anything. Debugger sucks. However, there's a lot of magic going on in some of this code, so you should compile and run the base system to see a simple test of the -code. You should trace the execution using your favorite debugger to -get a sense for what's going on. +code. You should read through the source code by hand to see what's +going on. If you like, you can add calls to @code{printf()} almost +anywhere, then recompile and run to see what happens and in what +order. When a thread is created, you are creating a new context to be scheduled. You provide a function to be run in this context as an @@ -52,8 +54,8 @@ synchronization primitives are used to force context switches when one thread needs to wait for another thread to do something. The exact mechanics of a context switch are pretty gruesome and have -been provided for you in @file{switch.S} (this is 80@var{x}86 -assembly; don't worry about understanding it). It involves saving the +been provided for you in @file{threads/switch.S} (this is 80@var{x}86 +assembly; don't worry about understanding it). It involves saving the state of the currently running thread and restoring the state of the thread we're switching to. @c FIXME @@ -263,9 +265,9 @@ However, you do need to implement priority scheduling in all cases. @section Problem 1-4 Advanced Scheduler Implement Solaris's multilevel feedback queue scheduler (MFQS), as -explained below, to reduce the average response time for running jobs -on your system. -@c FIXME need link +explained in this @uref{mlfqs.pdf, , PDF} or @uref{mlfqs.ps, , +PostScript} file, to reduce the average response time for running jobs +on your system. Demonstrate that your scheduling algorithm reduces response time relative to the original Pintos scheduling algorithm (round robin) for diff --git a/doc/userprog.texi b/doc/userprog.texi index 2b7edb4..f80a80c 100644 --- a/doc/userprog.texi +++ b/doc/userprog.texi @@ -516,6 +516,10 @@ restore registers before and after a function call, you need to write the stack pointer, you have a couple of jumps which probably wrecks some of your caches. This is why inlining code can be much faster. +@menu +* Argument Passing to main:: +@end menu + @node Argument Passing to main @subsection Argument Passing to @code{main()} diff --git a/doc/vm.texi b/doc/vm.texi index 812915e..84b0752 100644 --- a/doc/vm.texi +++ b/doc/vm.texi @@ -570,13 +570,13 @@ length, and then use Mmap: #include int main (void) -{ +@{ void *addr = (void *) 0x10000000; int fd = open ("foo"); int length = filesize (fd); if (mmap (fd, addr, length)) printf ("success!\n"); -} +@} @end example Suppose @file{foo} is a text file and you want to print the first 64 -- 2.30.2