From 4d972493b66d4841c135cf56414f9f54bac948bc Mon Sep 17 00:00:00 2001
From: Robert Morris <rtm@nephron.lcs.mit.edu>
Date: Mon, 30 Aug 2010 07:26:54 -0400
Subject: [PATCH] no more xv6.pdf .ps

---
 xv6.pdf |   Bin 147427 -> 0 bytes
 xv6.ps  | 23941 ------------------------------------------------------
 2 files changed, 23941 deletions(-)
 delete mode 100644 xv6.pdf
 delete mode 100644 xv6.ps

diff --git a/xv6.pdf b/xv6.pdf
deleted file mode 100644
index 51e8834468dc53f3515a3590b255d26bf63956da..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147427
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

diff --git a/xv6.ps b/xv6.ps
deleted file mode 100644
index d573f61..0000000
--- a/xv6.ps
+++ /dev/null
@@ -1,23941 +0,0 @@
-%!PS-Adobe-3.0
-% Produced by xpdf/pdftops 3.02
-%%Creator: mpage 2.5.5 November 2006
-%%Title: <stdin> (mpage)
-%%LanguageLevel: 2
-%%DocumentSuppliedResources: (atend)
-%%DocumentMedia: plain 612 792 0 () ()
-%%BoundingBox: 0 0 612 792
-%%Pages: 80
-%%EndComments
-%%BeginDefaults
-%%PageMedia: plain
-%%EndDefaults
-%%BeginProlog
-%%BeginResource: procset xpdf 3.02 0
-%%Copyright: Copyright 1996-2007 Glyph & Cog, LLC
-/xpdf 75 dict def xpdf begin
-% PDF special state
-/pdfDictSize 15 def
-/pdfSetup {
-  3 1 roll 2 array astore
-  /setpagedevice where {
-    pop 3 dict begin
-      /PageSize exch def
-      /ImagingBBox null def
-      /Policies 1 dict dup begin /PageSize 3 def end def
-      { /Duplex true def } if
-    currentdict end setpagedevice
-  } {
-    pop pop
-  } ifelse
-} def
-/pdfStartPage {
-  pdfDictSize dict begin
-  /pdfFillCS [] def
-  /pdfFillXform {} def
-  /pdfStrokeCS [] def
-  /pdfStrokeXform {} def
-  /pdfFill [0] def
-  /pdfStroke [0] def
-  /pdfFillOP false def
-  /pdfStrokeOP false def
-  /pdfLastFill false def
-  /pdfLastStroke false def
-  /pdfTextMat [1 0 0 1 0 0] def
-  /pdfFontSize 0 def
-  /pdfCharSpacing 0 def
-  /pdfTextRender 0 def
-  /pdfTextRise 0 def
-  /pdfWordSpacing 0 def
-  /pdfHorizScaling 1 def
-  /pdfTextClipPath [] def
-} def
-/pdfEndPage { end } def
-% PDF color state
-/cs { /pdfFillXform exch def dup /pdfFillCS exch def
-      setcolorspace } def
-/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
-      setcolorspace } def
-/sc { pdfLastFill not { pdfFillCS setcolorspace } if
-      dup /pdfFill exch def aload pop pdfFillXform setcolor
-     /pdfLastFill true def /pdfLastStroke false def } def
-/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
-      dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
-     /pdfLastStroke true def /pdfLastFill false def } def
-/op { /pdfFillOP exch def
-      pdfLastFill { pdfFillOP setoverprint } if } def
-/OP { /pdfStrokeOP exch def
-      pdfLastStroke { pdfStrokeOP setoverprint } if } def
-/fCol {
-  pdfLastFill not {
-    pdfFillCS setcolorspace
-    pdfFill aload pop pdfFillXform setcolor
-    pdfFillOP setoverprint
-    /pdfLastFill true def /pdfLastStroke false def
-  } if
-} def
-/sCol {
-  pdfLastStroke not {
-    pdfStrokeCS setcolorspace
-    pdfStroke aload pop pdfStrokeXform setcolor
-    pdfStrokeOP setoverprint
-    /pdfLastStroke true def /pdfLastFill false def
-  } if
-} def
-% build a font
-/pdfMakeFont {
-  4 3 roll findfont
-  4 2 roll matrix scale makefont
-  dup length dict begin
-    { 1 index /FID ne { def } { pop pop } ifelse } forall
-    /Encoding exch def
-    currentdict
-  end
-  definefont pop
-} def
-/pdfMakeFont16 {
-  exch findfont
-  dup length dict begin
-    { 1 index /FID ne { def } { pop pop } ifelse } forall
-    /WMode exch def
-    currentdict
-  end
-  definefont pop
-} def
-% graphics state operators
-/q { gsave pdfDictSize dict begin } def
-/Q {
-  end grestore
-  /pdfLastFill where {
-    pop
-    pdfLastFill {
-      pdfFillOP setoverprint
-    } {
-      pdfStrokeOP setoverprint
-    } ifelse
-  } if
-} def
-/cm { concat } def
-/d { setdash } def
-/i { setflat } def
-/j { setlinejoin } def
-/J { setlinecap } def
-/M { setmiterlimit } def
-/w { setlinewidth } def
-% path segment operators
-/m { moveto } def
-/l { lineto } def
-/c { curveto } def
-/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
-      neg 0 rlineto closepath } def
-/h { closepath } def
-% path painting operators
-/S { sCol stroke } def
-/Sf { fCol stroke } def
-/f { fCol fill } def
-/f* { fCol eofill } def
-% clipping operators
-/W { clip newpath } def
-/W* { eoclip newpath } def
-/Ws { strokepath clip newpath } def
-% text state operators
-/Tc { /pdfCharSpacing exch def } def
-/Tf { dup /pdfFontSize exch def
-      dup pdfHorizScaling mul exch matrix scale
-      pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
-      exch findfont exch makefont setfont } def
-/Tr { /pdfTextRender exch def } def
-/Ts { /pdfTextRise exch def } def
-/Tw { /pdfWordSpacing exch def } def
-/Tz { /pdfHorizScaling exch def } def
-% text positioning operators
-/Td { pdfTextMat transform moveto } def
-/Tm { /pdfTextMat exch def } def
-% text string operators
-/cshow where {
-  pop
-  /cshow2 {
-    dup {
-      pop pop
-      1 string dup 0 3 index put 3 index exec
-    } exch cshow
-    pop pop
-  } def
-}{
-  /cshow2 {
-    currentfont /FontType get 0 eq {
-      0 2 2 index length 1 sub {
-        2 copy get exch 1 add 2 index exch get
-        2 copy exch 256 mul add
-        2 string dup 0 6 5 roll put dup 1 5 4 roll put
-        3 index exec
-      } for
-    } {
-      dup {
-        1 string dup 0 3 index put 3 index exec
-      } forall
-    } ifelse
-    pop pop
-  } def
-} ifelse
-/awcp {
-  exch {
-    false charpath
-    5 index 5 index rmoveto
-    6 index eq { 7 index 7 index rmoveto } if
-  } exch cshow2
-  6 {pop} repeat
-} def
-/Tj {
-  fCol
-  1 index stringwidth pdfTextMat idtransform pop
-  sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse
-  pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32
-  4 3 roll pdfCharSpacing pdfHorizScaling mul add 0
-  pdfTextMat dtransform
-  6 5 roll Tj1
-} def
-/Tj16 {
-  fCol
-  2 index stringwidth pdfTextMat idtransform pop
-  sub exch div
-  pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32
-  4 3 roll pdfCharSpacing pdfHorizScaling mul add 0
-  pdfTextMat dtransform
-  6 5 roll Tj1
-} def
-/Tj16V {
-  fCol
-  2 index stringwidth pdfTextMat idtransform exch pop
-  sub exch div
-  0 pdfWordSpacing pdfTextMat dtransform 32
-  4 3 roll pdfCharSpacing add 0 exch
-  pdfTextMat dtransform
-  6 5 roll Tj1
-} def
-/Tj1 {
-  0 pdfTextRise pdfTextMat dtransform rmoveto
-  currentpoint 8 2 roll
-  pdfTextRender 1 and 0 eq {
-    6 copy awidthshow
-  } if
-  pdfTextRender 3 and dup 1 eq exch 2 eq or {
-    7 index 7 index moveto
-    6 copy
-    currentfont /FontType get 3 eq { fCol } { sCol } ifelse
-    false awcp currentpoint stroke moveto
-  } if
-  pdfTextRender 4 and 0 ne {
-    8 6 roll moveto
-    false awcp
-    /pdfTextClipPath [ pdfTextClipPath aload pop
-      {/moveto cvx}
-      {/lineto cvx}
-      {/curveto cvx}
-      {/closepath cvx}
-    pathforall ] def
-    currentpoint newpath moveto
-  } {
-    8 {pop} repeat
-  } ifelse
-  0 pdfTextRise neg pdfTextMat dtransform rmoveto
-} def
-/TJm { pdfFontSize 0.001 mul mul neg 0
-       pdfTextMat dtransform rmoveto } def
-/TJmV { pdfFontSize 0.001 mul mul neg 0 exch
-        pdfTextMat dtransform rmoveto } def
-/Tclip { pdfTextClipPath cvx exec clip newpath
-         /pdfTextClipPath [] def } def
-% Level 2 image operators
-/pdfImBuf 100 string def
-/pdfIm {
-  image
-  { currentfile pdfImBuf readline
-    not { pop exit } if
-    (%-EOD-) eq { exit } if } loop
-} def
-/pdfImM {
-  fCol imagemask
-  { currentfile pdfImBuf readline
-    not { pop exit } if
-    (%-EOD-) eq { exit } if } loop
-} def
-/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
-/pdfImClip {
-  gsave
-  0 2 4 index length 1 sub {
-    dup 4 index exch 2 copy
-    get 5 index div put
-    1 add 3 index exch 2 copy
-    get 3 index div put
-  } for
-  pop pop rectclip
-} def
-/pdfImClipEnd { grestore } def
-% shading operators
-/colordelta {
-  false 0 1 3 index length 1 sub {
-    dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
-      pop true
-    } if
-  } for
-  exch pop exch pop
-} def
-/funcCol { func n array astore } def
-/funcSH {
-  dup 0 eq {
-    true
-  } {
-    dup 6 eq {
-      false
-    } {
-      4 index 4 index funcCol dup
-      6 index 4 index funcCol dup
-      3 1 roll colordelta 3 1 roll
-      5 index 5 index funcCol dup
-      3 1 roll colordelta 3 1 roll
-      6 index 8 index funcCol dup
-      3 1 roll colordelta 3 1 roll
-      colordelta or or or
-    } ifelse
-  } ifelse
-  {
-    1 add
-    4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
-    6 index 6 index 4 index 4 index 4 index funcSH
-    2 index 6 index 6 index 4 index 4 index funcSH
-    6 index 2 index 4 index 6 index 4 index funcSH
-    5 3 roll 3 2 roll funcSH pop pop
-  } {
-    pop 3 index 2 index add 0.5 mul 3 index  2 index add 0.5 mul
-    funcCol sc
-    dup 4 index exch mat transform m
-    3 index 3 index mat transform l
-    1 index 3 index mat transform l
-    mat transform l pop pop h f*
-  } ifelse
-} def
-/axialCol {
-  dup 0 lt {
-    pop t0
-  } {
-    dup 1 gt {
-      pop t1
-    } {
-      dt mul t0 add
-    } ifelse
-  } ifelse
-  func n array astore
-} def
-/axialSH {
-  dup 0 eq {
-    true
-  } {
-    dup 8 eq {
-      false
-    } {
-      2 index axialCol 2 index axialCol colordelta
-    } ifelse
-  } ifelse
-  {
-    1 add 3 1 roll 2 copy add 0.5 mul
-    dup 4 3 roll exch 4 index axialSH
-    exch 3 2 roll axialSH
-  } {
-    pop 2 copy add 0.5 mul
-    axialCol sc
-    exch dup dx mul x0 add exch dy mul y0 add
-    3 2 roll dup dx mul x0 add exch dy mul y0 add
-    dx abs dy abs ge {
-      2 copy yMin sub dy mul dx div add yMin m
-      yMax sub dy mul dx div add yMax l
-      2 copy yMax sub dy mul dx div add yMax l
-      yMin sub dy mul dx div add yMin l
-      h f*
-    } {
-      exch 2 copy xMin sub dx mul dy div add xMin exch m
-      xMax sub dx mul dy div add xMax exch l
-      exch 2 copy xMax sub dx mul dy div add xMax exch l
-      xMin sub dx mul dy div add xMin exch l
-      h f*
-    } ifelse
-  } ifelse
-} def
-/radialCol {
-  dup t0 lt {
-    pop t0
-  } {
-    dup t1 gt {
-      pop t1
-    } if
-  } ifelse
-  func n array astore
-} def
-/radialSH {
-  dup 0 eq {
-    true
-  } {
-    dup 8 eq {
-      false
-    } {
-      2 index dt mul t0 add radialCol
-      2 index dt mul t0 add radialCol colordelta
-    } ifelse
-  } ifelse
-  {
-    1 add 3 1 roll 2 copy add 0.5 mul
-    dup 4 3 roll exch 4 index radialSH
-    exch 3 2 roll radialSH
-  } {
-    pop 2 copy add 0.5 mul dt mul t0 add
-    radialCol sc
-    encl {
-      exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
-      0 360 arc h
-      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
-      360 0 arcn h f
-    } {
-      2 copy
-      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
-      a1 a2 arcn
-      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
-      a2 a1 arcn h
-      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
-      a1 a2 arc
-      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
-      a2 a1 arc h f
-    } ifelse
-  } ifelse
-} def
-end
-%%EndResource
-%%EndProlog
-%%BeginSetup
-xpdf begin
-%%BeginResource: font APYGPQ+LucidaSans-Typewriter83
-%!FontType1-1.0: APYGPQ+LucidaSans-Typewriter83
-12 dict begin
-/FontInfo 10 dict dup begin
-/Notice (Copyright (c) 1991 Bigelow & Holmes Inc. and Y&Y, Inc. (508) 371-3286. All Rights Reserved.) readonly def
-/FullName (Lucida Sans Typewriter 83) readonly def
-/FamilyName (LucidaSansTypewriter83) readonly def
-/isFixedPitch true def
-/ItalicAngle 0 def
-/UnderlinePosition 0 def
-/UnderlineThickness 0 def
-end readonly def
-/FontName /APYGPQ+LucidaSans-Typewriter83 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.00083333 0 0 0.00083333 0 0] readonly def
-/FontBBox [0 -170 501 652] readonly def
-/StrokeWidth 0 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 32 /space put
-dup 33 /exclam put
-dup 34 /quotedbl put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /less put
-dup 61 /equal put
-dup 62 /greater put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 91 /bracketleft put
-dup 92 /backslash put
-dup 93 /bracketright put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /braceleft put
-dup 124 /bar put
-dup 125 /braceright put
-dup 126 /asciitilde put
-readonly def
-currentdict end
-currentfile eexec
-5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62
-BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68
-368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79
-BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97
-1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B
-1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE
-7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF5
-C2A9054AD59AE4D5522D8745045620C9C40EAB675A6FE53511D83C04968F37DE
-389C3A7A551DC79580FF1B382205C5951A9F8E7B6CEF33E027D608C14A394033
-1E603A09B3061B66BB71AC1D2A232B5F2BC9481D7D44F334ACCBBF6537EF8BC7
-075D89E6422C4E0A415BF3A1B001A284566A4DF8C6877CB0C70D67F5E7FA25E1
-90435DC2AFD452D1184CEA4CBF9F81F8CD7BE3B6EBA8395A40925FDDEB186DE2
-AB0372CF67C17BEE733C73CA29E00C3909E960A0417FCACC7211EBF3DD7225F0
-6F4FB7DBA35BF59A21014E1066BF090958F991C2BFD22CCA4189376B0BBFE928
-8CE7E8D06A551258E5938EB0F85097E557F3C3BA2177A88670054C2473FD9D0F
-D9E6EE78BE4DE7D3B32C0A4890438F857B2B893F8CA4A75001BA5A42D90EC4F2
-B0D3E24CE17100E1A20EADBD615C9B006D73287E8A5580ED034E01BB6AFBB7A0
-C1A5D5BE8ED4D234E62C1E772182E6F6963800F7A410EE3FBBC30A5FFB47BBA3
-62C0896EF2CC54DC4ED804FFB912F5407AB4542A2E55201ABBBCED278812B35E
-9703C069C38BF54D0E32CD1C0F7873115DFA318F164F6E50342252E9EFE643D5
-E9C5F46AE46E7E21C3DBA8384CD35EE082D11FE17BF955D48E02736A05C23160
-7592275355E00E6967AC691913925629C1F41E0F49804C413205EF4DD853CD4A
-AFEFEEB55FAA06A85289F680D6670531DF5F087ABFA6D1B9A2C381186F70CB3C
-CE3FC0A3BCABEE4281A7C3DAC0B396BA8CF66077B079929DEFBE76C413ABC1B9
-E14159DE9583E6E10894C743E1C9D3CE4C3676B5A85ACA7E16E3A19B674051C5
-465EC644D5F2AA776BBEC2DA4B1977A85FA5C08E9E4286DD9BD6116B110B7724
-6AD93C41A70B08EE2FA8E1FCCBC5091B57F55D942459893BE6CC261B726BF304
-78E3F84A7C65A1ADB01906F84FEE55EA3E57A3AF2DA474592C95726288B797BF
-F751385F38BA7F09673B57BF2ADD79F0A4A6069CD3C238EEB149D77528B84CDD
-E31D788A4A5476B55DE425A4A120EEF60DEDE1F42FFE488A01D1ED003AEBE51F
-082784D7A5892C9F5806C2914FCB8CA5C4CCDFEF5D4E14DEA1777FEAE33C139B
-355BE39D995C9449B3E55807C695200EF55EA2F7EA676A6770164CB127DA7C07
-260FAEC3E976FFF9A350B8641A4D7B8EB2AF8ADBD241670C96F33EF95252FA03
-F0F65E148FA2466B74557628163CCF600D8C8858D515F09312E45FF4938FFDC6
-2BE334D3D9BDF1293532963B6EE923E356E17762BEF9E43461CFCF403CF9307F
-AC186610ACF18D27F662455921F450FD6B210EDC50F0C450BA94577C18EABFB0
-A4F21370E1E3194DB8B48668BF3342A5B33D10631C2CC5FC0F2495302A7EDDE9
-B46C85BA080BF1BF5AE4E492ACFBEBC7A358D213D0325ADB982E378B621963DD
-E8B0326C8E8162D878D685D25409F83A57577F1C3A0D46D9B6805C68AFEDBC48
-09E4883C54C678FECB4F587F41EBBD6F7B1F656FA528BA27273B92EA24AEA34C
-D31FAB98A48968B19BFBC34DCC9CBC40F4EA35783B607966EEBD88E0752F06EB
-BF3FE55F88183F5A21AB5B3CC322E5C56CCDD19E40EBE24617D02E4AB3E15CDE
-E92DA46DE2357F366ECA16119EA107853FDFE570B7CBEF695FFBCF049E902B4E
-CCC477AF9B9875B6D079FF00A302DAD67363BF90E38CD58C46961F7A53CE0C23
-06B0125C2DFF62A9879D24D9A524BDD035375F95790071CB9ABC08D5FF89A3D5
-583C4C33D9F20AEF1B7A12CE819A6194F7116BC7B171C1BF0454763D10EDCE92
-DBB45261F97E88977722DF2C624DBEAF95D18E5CEFCF466C58958C36A48D4190
-01E72651FD55FC8684C19C3183B306D3A061F16CFA7086C3F51CCBA865D88C9A
-589F25A52DB95453BBD66E89CB1E6C8059858A4898772A5307A3592889AF708B
-EC8CA855D6DD899181CF8DC664EFDF9A8DC9286918B7CD63490660C033471AA8
-2910D2ADF17271D6A680EB97891D247EAFF2A4EC3BF4FF395BCC292402ACBA77
-F7CE635F25EA8D29CCF6DF4121DE62533AD46D3A84E68AD70991E5FEF9EA2EBE
-19C2071821C214700AC9D23586F03E97D71ADC38BC97A4CBE534D318853DD3E1
-968978C85F9EDC6ADE6F0BB3E97A1F3ED7BB9936365D0D15DE805EF048E26BBD
-9A671078FCED2DBFF6A2FA1361EF137091FFD933EB556768D1B33A4E05048FBC
-0E7C672B080578E8F478BB66DAAA9EC09C4F779553D34C0A6A2D9A685A4C040C
-99AAE40D8DB6529065539BFA4681AFDFCC4BE7405875F78865D70BE1815B9E3A
-D243E623E80332D958019217B70E799BD5AF9779DE42F7291E824AF4F8D0E26D
-E76420BD441F4F7516A667BBDD083B40C5FF9476D707B1C10EA2F8C80BE8C9DE
-4DA48BD4AE3E661841CBB3AC4EEE0BEAEC612C7C9C748D0697819680D70F91B6
-F58FE67C3B4F8E64587CAC7BDB08C3A2E594B1AC8E97E77E427A8FEC289B5533
-60CDEA1957D4527DAC116E46169D1B70D742494A567425D0417F3134E623A56C
-CE14F537A4A8163C335D2FB084AAC9B5440BD23BFF9F708B1C7CB2DF361B639A
-B2796CA3BD382D8F26E991C83F1D7449E3C9869B23494A02606E7DA6528797EF
-85ACD89D7553701C04F77C5886CD5EC47AE302F3785944090BFC60818B486514
-1322587334EA1DCA899E1B6FB0653BBB16A15781C25B258028CEB1AAAC52016E
-A8F2F36A157759A3232654C0576C51F06A370BA928CEB3B6481D57745A5CCAC4
-63B5E306C676DE356BD593692C80026EC4F5DD0B89785A2D8650289F2FEDF380
-23F066B6C104EA6789AD199F36300032371B0AE9BCC92AE9E94280AB95E7BE99
-E69EEE109E5A34D8D192181AD22D814F49DFED9B87149C8C3FA247710B996F6B
-52DF6C1ACB344F56878C706E0B4EA2C33274FC47A03E549CCB29D26C1CC50450
-C4F1178015B818357F327FC4098FB65247ACA89F7852A8C5BEF8A61D928D3E29
-792F36AF218C14E22095213B9BF70F4A2AB9F8D41ABAE3F70BFD3E64434ECC5B
-8AF293E0657F662F071403F7B2BB2DC191361860DDC9761CF201A9E5DD64D0F1
-EDC9592D92EB02933A4E063E224301316A22F1676DE180193B1063733D5FBF31
-85C98ED0D8C1C459F41A6DF1A614740EF25462C7748AC4615A4C983E88089255
-ECBF5A92B7DDAC6E9BC0C1AC135977F1536CE490985B364118E7753B1B5D40B0
-40DE97B0EFB6A1E09894B24A32B1B2E2ABC02C64D2ECCCB43B8D2CE9BC9ACCC8
-F570F3AA2252EB95EE46B9452DF2EC804879265A0AB41B42BE6BE78777EF9487
-74F81B1B5D92DC44926F3C8421A432589B8C4B6D98BA9602EDB7CF5BDD7DFBDE
-B6C37D3FD4112313F2D404AD0770C84E9E9BC3AE4E0A12348B096EE17F95BCBC
-874F5F024D3B1E4515FA9457AD089F1C14A6ED93B0A1520C3C8435D8B9CC4FC3
-39DF5D18913CECA2F9FD3DFA46424594315D1400DAC9F2A09299F4C9D7D41E34
-661E0D305E9F62FC4E36BD2FB79021D8CDAABCFAE932E23F74CDA3600121BC33
-517A1F8CF50CFF67224D8F919290534C8CFDF8EA8C688E409BF3E831FBA6B2AC
-0BCB08B086D6B8F6243182E8BEF410B7551E32AB6CF2AC674A3A3A926EDEE757
-F19BFCA5BBAABB1523917BCCFA765E1360DEF6269CDB2F18A55AFA721C9C78E5
-27EB85923D08AC830462E485F9A73F4B092703DF336CDCFD15031619597C731A
-37E3D119025984C85D76C493BDD17187D760AD92E22CFCFE8145D07CD8400522
-0777845D8746C9A6D111E5F1EF2419276113092AA4F5D41526D6F40C40CD93C4
-4896F797DE2387E2382D8F5A068EE0290C64154C77B0D79399D85E81BB3B028F
-96E0CE1AF4021CAAAD279F78B18B54977BE8B5046ADAACC7464AD41B0C0D4E68
-FA2E980EF83C094CB09BFE4FAB84C02C70B88B9D071684DE404BDD0FA567FB66
-EF04E703C9F8580B0A095FF6076E4935A125265C35A49D263E4D3226C1BEE986
-8DEEA8F6ED7541C2EE75BC8FB8330223ACDB932803B4007435B0F36940C86510
-AEED548FD5B9E056EBF6F2484FF612D7681E04D1E87D708D95C64E58385045AC
-2A87E7F6AABA9DAC680524CE99C5E7A4DA70A14873FE4A9E4F58CA6BEB0D109E
-627947411DE2130D783D43CC6D3D6725F79E5BC46E14385EF63D569BFEDDBFC5
-CE454F9B754EBC68A1DE413063FF6005E027DB80750003B112C93CBEABAA04FC
-E07F75A62E7BC5B34E802BAD054E3DD77A436B6A5FCC5B006E38D628F69E0409
-BA8E2D97754CE7C8B00DB026D10E4FDDC3369316BB4E0B944EEC0BF4A5544EF5
-1FA02D9B429267F2C9E852125E556A0D1116D04C2A97BD27C518ED07E952EB11
-2C0B1960FBB05CB5BEBF5C91D1703A671AFF159DF7BA512726FC058213635BA4
-11D64072880D65AEA08C585BE4BBA690528242774855410872E61DA5279908E4
-ABE0948928C1E2E47C61FCB67C9A83E489454F29E18A4E646A6BC5E367D6D84C
-4B70D67CDCAA9B729085EB85582265C17E56FD97C71EB9F3472EF2422269D69F
-AA40ECB9062D232AAF45AAE6EA95223C95F48F435666C06EA821A00F4F614D6D
-457A3CD5AA85614D60B54BC13ABB3264EC1D822FA53ADDC1E7551A9C3CED3A60
-840A2A924BBF48CC951ED9ACBB4B7759CA3A75345DFEA4BD12543421C6E65FC3
-8007DB5EA10F40B4E0797E171F42A0A70486132291040C587F79549AE2A98FA4
-DC43764E8ED321DC920EDF6A79C34839E3C5BB11E7F3CC939AFF71AE82D8BB2B
-2C4CDEE000FAC57BD089D8D5C2D6317F85546F65828A62D32C3D43A2A21EAD07
-7338893F0FC2B7C2C2F0D7F8C066549174C6C411D066AD5CBEC6892C2B092866
-3117CE0F58AFA7A2B061DA228B8CB96E533415F9D9E5F80A3E49529418775E22
-59AC479B3BC8A9A1F01CAEE5D95897730BB50C0CAA2D8974EC9B90339D08A840
-DA8E831BC7D2544A636AC9693861A4A37C8EF436896C65398718B4903598FB0A
-60DA2F1C172D2362FD0CBC94197EA355ABFEBD7E8E6B95ADC8C219FAAC322876
-312B362C88BC3422379422D3DD17841A2C9D1F32FC15EEE6E780745CAD5A61D4
-FA61A2C3394585C89B5D78165009CA3620F333A6F360E06118C4B7BF69E6675B
-57BB57D837E05E1F1F11A3C1276901B507B967BA69B7DE18A17BA10E0DC02828
-811E45FFD3A83CD75E69CB8F8B50F820F7AC6F1DF9776584E7778D683BC6CD2D
-A9D611470E6E7AA289576EBEF0202221847E2A46286DAA4366188B425AC2D3D3
-D883B9412725017F3B6C2F35316AA01EAFDEADE1806C48AF7E82EFDDF2A00245
-DA561354F1761D126C030ED21705D89E255931B47EDB1A52C57183DDD4D33F99
-BAB362278939C80F739554D6BFC7119D941A68F33ECC2901AD2B34C0306C47EE
-2372E7FE3DEEC8B02789420272BB7CC2FF4DF6D23569A118046033C811232A1D
-5BCA1D629A4FF3A2C2492C0243B70C8D090778A766474FBEA9DAB50C3D29B7C5
-66FBB2D444B3C06B7C9241DF74C77DB5ADF648822014C49F9141CA9323594675
-E9640F26D24BF6B9E540034F1ACE1AD766E450865F9DA29B2F8BDF66B4FF8025
-BA11D57A064CCA9B211DAF756A18621F877942D8A30ED103C6186884D68153DD
-BBAF399F3D0DF5169B0E94A214B7D18F672A48B937A13133ABC5E9033734B0A2
-12A7B4DD72BE1886ADE94B968D11D29CCDA8251C2A284287037543A6E240CF67
-0EAB7EF796BD4DBD313FD3DC6D3535674184EABDAD1DA7B0A3AAD4B78CF82241
-E378FBF975403D8FAC2AA692686545D1550E8B9F457A396B3F68493A342D1982
-3E6E24DDA7D014EA1A297C38078A3404F0D87CD299DF9BF3C93FB8F236BBCA14
-F71300C5710A43605ABA308D54DBC954C66F03123393A7379C4F20DBBB03DDD5
-C273C234E8EBE27F93347F1E5B3EC0FFCE0440A205DBA5CAC312245AF05BFCC3
-734795D36BE536F56BBE0E6A42E9E9DD7EFC0B6A032E250BE71996B41B743D7D
-B2C6DF05A46CAB1FE425D0AEE07284E7A556AADB19B9DB7F4FDE477C87DF72D8
-EEC435D249CC2D564C57F2379E9912A0AAF33661D0CCD213BD1A38EAE0D4535C
-08BB493031B1FFD9C030B98C455C9B04304B1E628CB95FFC7FA6AAA12C2D2C83
-9166660FDD6DFC6C0CD04FB951C6BE616A258EDFAAEE4AD926608A4A36B1CD55
-9023D8647CABD029C539163705156A854D36D83EC488258C38C9B1126555D7AC
-68B4B770A5800B06D374230A78C9107963B637E39D6DC7497883032EC3055DE6
-CA392F3B2ABA182FC0C468549655B8392E94DB4D85AA14DA0E3B2D3B3DFCAEE3
-F5CF755FF7A7CE0CD930DE5AF138A6262898C2316902934912FAE3924A9833BD
-8D5B85F35EA4558E1FB9FFAF597F802F89AFFB5B289884A9F9BAED04084DD7E3
-A985178519BD80E3224F8533AA2D954F75096E490ECB780E6CCFF07D91E02D2C
-67AF4A699F81E84134E3EA69467F5514E5F3A73A9936839729E9347BC77B709F
-19137F238C2ADAE3858F31034BBEEEE79079F4B2EBE3081701B1B2FB0F114899
-C59DB78F99ED4B980DA4F04251CEE1F478A470C3954E5E83212726EC6673273F
-A2285C9AD2BCE145C5EBBB946EA0D58449BE7C77332D1F222EC6C5DF2D559BAD
-6E0A3122812688D9D2807F09FC09285FC0B2D3FA570E49A776B00DE85965843A
-B9C936AB2C2D8960EE0FABE64C7C983C546795A4C258E4E73AADF310673C9A2D
-534055FFC79B03C3E455643AFB8629AC355BAA755FB8DD4AACCBB21F2CCF8FB1
-E51E0B5C608EA149C6E6CFE107113C36FC9C85AED43723B11AED08B1B8661C0D
-EB0C7DD1EC047371DE2A4C24A789CA5B186A1AEC4258814A37FE30706D29ED48
-7639345B0CDB29BF192345D5AD372BA3E696964D91CF03748F3950BD649FC102
-A1E09A59AB246350BE4A7831D126472D627758741C8F38B6A01C0DF4C2F27C68
-6ABA6364D88DF009855B73630A4C3FAC44D2F0E2488EB71808D003C12632EE18
-039732BAC01B13E1A4D8C80C8BEF266CD168CB79462C44D0F891B60E0B15CCD8
-81949F998147933D377B10CF3AC3845FC2AA53ACA02AD96DCE8314416D09F2C1
-050AD9AA80448527A9947CC7B9B365C23E950A02FF730D1C3C91CBF14A746E6B
-7A2B87FD9561A4FD6254E9A2A3004B0C9A0C2E59CB914178FB114BECC02CD370
-2DAFA039EAD3D35D6CEDB468C1C42404B88BFB70C275D8636293D1A71CB48CAA
-D971DDB3252B324A5499E419CCE408BC03B688F0D8774D28D7E5D740110DC5CB
-22B3CD013F61BAE5983B56D23143BC45C94CE85769C1846B1E2BFC36DF7BD587
-37919D573819EC3EFAF1EB66E2A07469CE0CE596546EBAB2EEEA5F73645429AC
-551E5C8F16966BC0D32D6E1C9C3EF288EF36F977EF3751931BC881935DFC6C40
-E547AD3A923DC51D1072B085F1B23CA0E191BF3D010EA0A01C83C973B835ED74
-7DFB263E2848A83AB9E06F5071F6D252A1FF14ED1A6AA8BC3DA3996207675678
-CFCFB1E134A18D1CC3ABC395CF287E139C4338CBFFAB27345A1541073127C242
-1DA55018AB81A6B3738BF659347D8D70D86B8F4C40B8A9E991DF788399B5F13B
-50ED46EEE43CADED29594102E07602154608111060499F7C1C03E5372B415F33
-5A741E8EA5E3F41AF934063C94641F1129204EC1019488EA4FF89D7B003CD643
-7D2314441404815203F7FBC2DD130A5E1C5610457E583363D8B439B75C41C3B2
-05E2348A4A826D4DE429E1B61FABE14FD4ECA2C3DB124E738FF3662840AA03B8
-EF40A8D5C60E86C341D1755EF63F1D82DCA856402B949945265283420BB2B4A4
-FBF7023F2C0B36348145F92EF66D292BE48545C5555E670B5EFB973B29FFE465
-92247869BF8E3F0644CD5754A3D35FA3A1DE5BCCC43F0BE41BA782892DCAE8E5
-5EB501686B68B9C2CDDEA53787D795F59E9C827321CF42062C503F4D4B591BD4
-0F2F661B5487F7ECA6694169D335ED8EC725E53AB0CEB25CAEB9F832E93715D8
-8C8BB6F6742B14CD5F3E837A636DB41DD9C109E9771A2F8C7D7A7D12BBCF650A
-BB131F547A894CC90508A936EA97154E81443C052AD474592314BE31FBAB4A79
-4C1992A35BAAE07F6816D542463726930BF25F75AD69AA44E90F55EC8A1AB06B
-232EE37734835402F80EBD4E69C375D3E704A38A6DCC903119A7E23217250899
-FA9F1F37773894E24C7054D4B736742FBB054CA11BA2D3F4C3BADC74A84C904D
-6A83ED9B0BEA6694C35AE8CCB0D36B92DDFC9962D2C110D99C53CD82B57C855A
-B7DB749998FF87F09C6DE41CC2302131B0876A2559E4C24FB292BB477839BD18
-05028C9D217AEFF5FA65147FE25C45E9AB9503C0C90DE3F6FB98284B41192882
-21572BD89F5E970D9ECFAC501145CD0FD0ABC38DA574C0E634B14149F3A80995
-2F6CEBA40F796D7765E629C7020A5F2E5F50ECA761629A52507344F027284E93
-97F9361949AE79D2F7D911AB1F4BA65168A682D09BBDB02979B71223175EC6DD
-3FFD963B5D061B59181FCFA92434BA11A578CB8442AFCBA65580C69849A6EADD
-8F1D2613362869F8E16D26770C001C1F55B93EA982B6C5CAC6BA6E92A95C03B3
-A8276A01E6FBDCADF623A538CEA34178B6690DF25563B350C18B816A724E2F7D
-EB84ECDABF1C2D8AA75437368AA7041E02BFA94446AFD657B423AC4DAD19B2A1
-BDEE4F3A4BBCCE651986FC707BD35922488EC1F354A05EF6497B51277E75FCEE
-92177CF4CEC6FCDAF8F899B9B9A71719493D537B7DC78B384487F6D4B898D2EF
-99B796B4BED49575CBE63FE809B385FC6CC84AF3AA9F87121CF7D8BEA3C6E986
-A0781F7C920943F43C3F01981C13688F7904CA925A57C527149975371BE9AB45
-FBDB098AA2C62BDA5F44BB282D022DD64CB3FE1568AB770058E372A132456331
-71FDE3E5EA752F47931DD50BD2DC54E52C69EB63E21095DC53C056CBCC05A162
-B4950FFD705C1CE37BFB3E7426260469A80204CE9B68D1C127433ACE8C3FDB27
-FD6F9C6AD71662DA823259BC1B073F829750CB8C2A50E69799F1D58DA0CCBAA8
-EC92AF28104003E13AAEEA0BEEE540696613808D91319FB12E7812FBB2CAAEB3
-A2D3EC0E6D78E720176FD3938D4C62AE1678681E98B6F82F2772356DA8FB9D82
-EB298D383F7D0C3BE5D219DD0AC897B8A2E705F15B2F9AC9306BF39AB6F50BB1
-DADA17AB813BA25513DCA43E685D04D0B44CFC212366D3A1AFC58B4B18D3D4A9
-ECD8D864890F8C03A37E4BEA20866DEF9877065A2C3F666C2862922DC4A021AD
-A75DB963BF97B8AFF3D63B89707C86B4E0E5B93BFCA9407021848444ED229F16
-0B2E8889AE97BD4AC2194546FF3555245087A98FEE7B2A38401C8BE18E9D7224
-5437ED0E4E2A8876E0C8633323A2E9A7CD8C704C858FD25311262EFC6534D7A8
-9E0857B5C6282E98938B5D8E216923B0A0A75D84B1807CDFEF19D33A15C47D2A
-6DF303E5A179C1752489A9A5FBAF7F00077047551702CD0C08C30E79BAB4BBCA
-10AD85AA96D1EC193E05C68B9D46E44B844CA8216A9F535B737606703F07EDEE
-B3825E3473244C3F2C5EA13AFD2927C769E48B6A90B41A77D57ED5D1DE504461
-C6D373489B465F0F70F107EE46D5DCABDA14BEFDAA37CE0AF78D5F416AA1456E
-3DA7E189860395CFF6236CEDBBC2E0189D3BB92FC5C958A63A641CBD415D2EAF
-BC219AD89CA3A17DD335495FF452FBAF85BE0293D9E5E9927196192FE3CD25C2
-C461C62B001A3723A322AF77250B8AB1D83C16858E3FC30EFE7E338663AD9F84
-EC41DCC80171C45D187E8D5C2E7E431E899C4E0644E66958EBADA5F0F6E64D21
-B2539F89570D2C1F17CDBCF5F6CB16A9787C9A4834B2F2A516D909A141F2C614
-B4B7698315DEA7CF292A85578A127BD7E0CFC5D92C57B7EBB10111BA4165E32D
-162A740EE2D921BD28B8A7300B198297A58C947919A8A64722764632D9390804
-EB5CB88B984E29A580AB26B544965E3143BCDD2EF47C2738364B3F896E76C1A9
-010B624DCB2EF607984D7657ACB93E87A4E5A280745975644ED00326C559570F
-C5CF308F470074A121BDCF2CFB73E0B2A872EDDD0CE746B9DA409DEFC535EB20
-5EB9D59C076EBF6F94D31EBA64ED9BF53B69ECEF4AC19B4F9CFC0BC991581179
-94C3190C95E4F261468E0AB12BFC9C20E7B1C522959E7E761F6C5229EBCF3A86
-FCE964B1371DA44FD114FBF539608B82C6B40AF191818F8B9270530914021CCF
-A9F233CF6431C7D23AED734BA58A3C5959E5A2F14FCBAEED5866BB194D8CE6CA
-39ABC81C4961FAF1F6C8D66998A2861F0C42B5F95D21DE751130274176C6D363
-E832D3F711916611F6F409AA859A323183B4444EA38E79062F77F30C723A3FD9
-EC9D4D27C8C25555769B2226B66601F7DA8A94A02463E541D8352FCBDDBF1297
-BB482169E9C831640C7BA586DCF00125BC2A7448C384BA5EA898F91152FE0848
-70C084B63689E76B656231CE960D4CA628E1C070AD9A1CE3467DC83453D92E34
-2123676178D378B7D234A7280E83DBA97551467C9457BABEE8835FBB594D03F3
-0C7FF2FA6E308FE763C7C894259FA5D3C66814F6A4C3EFA30A7A4C3E081373EE
-3C2EA9F831EA2A7BDDB473401CEFE0DF0EA110ECB4DDC952C05F74461BD3D9C6
-80E3BB0E6E1B6D0AAFBD5A524A3732940CB4854CDEFEC572FEEE79120D436E84
-4186D94ED3B9854450097DB09C514BFBF558BCE425003F6CEF7A5417C8960126
-BC49E6FE3CE87834CC68D540D8E12F502BD63972C802D9715ED49C7B52DE87DA
-AA4710B679718F9A71C0A39085D972BE32596C509D27CE809F02960FA7560D66
-678BA0AF4D0A19CA679033B1217D852DB0B6768A6821C72321FA7194E5A62D99
-AF7AE2958947C9965A1838DB932444D886247EE953A1C8A7ED765BF1DE6CD137
-7C749F346437471DD0F0DCCE249D368608BDE06D1FBC1C0236AE40135687A8EC
-6D084CDC52FB99D2963FCEF40DC6E0D23AD138F38813DB0AE9B7F731312B7831
-D84A6BA2AA09637C743F686AC572B97D8D72F825E522AD2E3B943476F664A8E9
-63313AE3DAF935EC8CA6B4FC9D396270D24D5705AD16564CBF21A9AA234B6C01
-C5B6C8CDAFF4E3462B74369FB0A63B1EB1DF9696EC7860B3F6E573E34D5E953A
-0B25044729B9B19854EF5A3CABAA30D2A62F60588D7171A7732171EAF9EED5D5
-B9DB771F1AEEA1F8F658BBF35E31D88FE3511B9860154DC2A96C1C3FB233A716
-516F36767EBF1D6FECE4DDE153B4E538004E0B66FF827D52A72DDF4699D4EEED
-960F974C6ED54F50D9608DEA1785164C73D0B25CA313B3630171177B8EA6A2DC
-3D5704DF7A0CD5098BEE074480E862F18D47FBE0F6964125DF29C23D087D0F9A
-25292369A7335F33210A4660F425EFD0FD0C3F6534A12ED913697ED4444FC93B
-51CF9FFFC2AB8256303E690A71E9EA8B7766E282847681497B52C297F25E60A3
-79B1D70FE503F87E9EBB5FCF1FED71321A2D21B3BFAC5A17F66A2A5CC5BD6D0F
-E968A013C33EFC735A161F340F56237CAC1B347F88A4D62249023F6763111497
-4A6F068F4A49B55791D039667EC08BEEECF3E919C4F29FAE5DECE224856FD035
-999318F9B69125586FE6972508505DDE0F129687AB056E5322C1D967FE606151
-71DC9FF6098CE976C0F7BEBD4A5B16E18C1E085894C43C4A1E311B1FA34B75AC
-1F444AD9912718855B50CA02AE362D66643EBFF19EA6BE2C8EA4D4339D59C52B
-BCBAC2375DF2219D9D56BAA08C4577FB159143886605FC91A09885F9C2E44064
-943BC2B9040E0031BC0744B89782BCDB129A4DDAE418A03FE6EE8705089CD7B3
-C87B18939CCE4361A4C1FFD24072E620D121EBEE435489E8907DF63FF2BD505B
-FF50E33DD3B3258F32D96823BCFE4519C7B77C20D2AFE9D00036EFFCE8E586E9
-667891E4D513C3BDC4615AE8369FADF56829F68139416A40C65D736601E47B0C
-793C8A7493FC11C9461685966FC974DE827E81ABBC881EAE43712C3DBA1AE5CE
-BB1E7FDB696C3221681D75DD419972E6AAA0AF20F8B3826AACBD3B808BEBA198
-D90A5B27CB07C2F753AF493D1863BE77EC132A394F3DAF1F9E3DD07B6BC23765
-6A392A8611D16434BDA4CE27DE4BAA3DBF95BAA05C873CA0A36177F502F87E94
-75662F5368EC605F1E00A98F6B50FB7F522A26C1C9E73D025C3A6428DB735344
-64F704E272CC268798D13D0D93B619E550F1B80562A440E7F2462D9907AEC25F
-F3A6E0A4D95B253E3144404DE918C1C40D79B578D8A2C85F943DDC9DB69727CB
-957ACF72D67F50D228219C582C434B24C6E3AA6BF2A8194A85D775086929A82B
-F0528989A483CE5C7723A2570529C1BDF292FDD988F59D80187A25C47501C2E3
-84C702FE7F4D6C4C6B41F778367897EC91D5A4F8A3FCF300FFA584127C3BC171
-730BCCBB51AD8A85A3810F846797476EA45C4E7A250215A79CD055BBF8B97BAE
-DBEB87DA404BAE058875D793264C15010DDC6F6DBD9C45BC5307F6DB4AF867DF
-236EBE6CECAA1CFD3CE15FE3EB91ACBDF5433AD03CB971E78823FABF2B3C3BA7
-8ADA62C7B4FB2E65F0D7D4411634645764E198861B589F8529DC2CB6B180889A
-E35B5B1BAC735866A4C49A386C1A98A59343060D7995E7C86C3380E65670E94E
-4B7C2D2FB94EBDE96773547CFA5053B3B31188BAA0B57A12A2FF6EE7945D5A17
-ED1FE90E30859D3E14EA58A9FD90D5514A115EF7B11C94ADEC8608F60F06D2B0
-46DC9861614ADBD91032A92543BDDF359DA8073FD08E64F9B4D0A7B1DFD6F52A
-168E09CD5E2BF9EDA46E77AEA46C25BAC9E0D8220E30D92892426B964E894015
-2F0240EFB5D931EB16EE2423B659D360433A7DCEBA96C031FDA734F0C6E89ED3
-B00946763285821FD3A63D5E0153A4B02E5CC633F6979385C908E73DB718E004
-92105D0F71028D2CD5C0A3E3F06614716B2D48B4A51E9E9D77B058F38B0F7855
-EEC100CF05536D9AC7433A3BF58D4B068E923D4B471B9A0FDA85EECEC3ED9158
-389A10E55F4DE52D2EB5B3CB5D9CC1C24B51F1A19C2F629122B05C03FC8B2A57
-18B06EBDE41C4871BFB1E6A24A85535DF5E088B94EAD6222E07DE110F1B51DB0
-8C1586F7C9711317DF20336D6DE4A2C04A4A1B121F09A2C340B22CA9F26AE7A8
-616DDE1A2D87F9729F82E20BA099D1EAC7F726CCA9D5FA93092DC3886D2529A9
-41B75B58FF112B5F97BD4301627CB3DEE6DEFC44E0392874FB86C51CE77C1969
-2A66E623BF9A64265EF5A68C3B86EFEFEB04C920D16D9F9E037E9FCC621726D5
-69449BBCB0330CAC67F0597509316FE77395FD3ACA40FFDE9CF1976DDF047674
-93683ADF1B1EF9977B03DBF04B2D213C5A67FBA1F99F752C217D672117B9087A
-6A5DDA70150BF9988514E786D28336B903B3C96A746E911D7155E49470DC2F37
-41D47249C723DC2E1846A35A67820DEFCCC9462B67B26201EA4D5625CE2DE401
-D186126A214ADCB090CA7D8DAED3A1D8FABCDD8DFE1F0837CCC087A486622C2C
-281CC8260608D0896A49019EDF7FDF57D5CE0279E7F491E8370B4954779B4B53
-C6D7B6E2F349283AA0467D9BB06FDDD321BA05F988C5518DA8E48D66D24136BC
-271123C27D43408927F0DCBC5DB8D8CAD7E61C46BEEE70F137B087A6899EB040
-145D9AD63C840BC5D030ACDBE4B87A23AF641A64E796336FB31B00B0674AA9CD
-B19BDFF46C93DDBA27ED0D8BBF5E6DD642736D594B616C3B26A59C463FB4253A
-136DDD4592D6223940C98E4BCE603CCD05D30B3A26B1A4B2C8BEEC799E61907B
-855B2CE81549AF2EA116F9DD3A35446CD662EFF77C49DB0BF7B3BBF496D750B6
-E2025B2F041092F322ECF8CD037C5829568CCDE9823BF7F37756DFB7F6D05CC0
-E5B6B6F95A839DF60F9CA9E03AE4E9944ECC2957141606326763789EE4B4D7FC
-154A7C3C509362E80D9D2E84967E60B2A14940B08805625EA09988A68BE7AACB
-6770F8C05B472FF649514CB7DADE001B7B85E5A849ABC018F34E59292A527A99
-1E2734A3D8D3EF87CDD665814A7CFCB663ACEE51E9E61BF232FFD8F917A5AE70
-57ACF846460F772202A834BE3DB233E117DCFC0A039E04AE30EB0AA3C773CE6A
-9EA4E2686283660E068FF095BC780A6F1D4857D7C0789D599798AAF9C71AB082
-6555100BC97C54577AD82D5E063017207922DBE0BF744D51E31A921B27954B60
-95B3695098C47CD0996438CC0F89198ABCA22FEEC261BD0C0B617DC02F553837
-4DD1EC502C935A8DDAF7C73791D7DA2764AA3863D43A5E3EF39AB099CA249A7C
-D4CAE2FB83851EFE6863256E432D5F0DC898029C3A069C6EFB8C342B8507182A
-44292E6F4E75397621A3DF4F94557AA746C9049B5B86ECE49BFA031F30B3D505
-D42215F78BD2D50E86142B28C2B06A2FD427E5F1C569E58587BB3B531AD4E8AD
-10065410A4B3BFEF97070CC87FCAB12C9F0FCB5F1716E00975B2EBE522586123
-A7C33B060079D22EF11DD55A719819AF9CA90B587A11C56F8F9A846BCDB3C930
-AD1E3A490DA0643CB34758E109DD6C91B22C2AD4859101DB53723D3C9C48CC41
-7FF3D9FE1FE57922335D28EC50F0CEE33DCF55A87A0FD383EBDC3D33C8FFFBC7
-05D658873D655635A841C5D8A52294A060DA01A586F63E3EACF1AC7941CDAA7A
-1A4DDF5DC5018186B40713A69B759150B3BC3561CA963516783A7BF2D182CFD6
-2529AC360ABDD6863B33C84B3DE527E64E5F1C0B72BAF23B1FF7276773FC2951
-523ACE4D620FC9A1FC5966ABC74D421DAA156B9955B579C781AD87124687BBA2
-DD1116F80D7F6980E10CC387AFF901B19F6CD0667C82932D9123287301A5FD9E
-660D5F9E5ABB4A42936BC6DDAE92198CF969FB3D397BA6B1DFE1233752272225
-2B8F0BF0765ED694D50D0BE4F8C09F85713E37E85A3BFD559DAF869E3B6ECF7E
-080D71A25B2FF6E38D966C75233D12E3C15A8B4002A985DE92DACB4AD2F6D9C9
-69B09914EC2719A160CDF0BD16E56898B0BD07C1B7747D1C6E591FD66DE00A64
-C5ACDE5D0488D9AAC392DAD684B5F681A554CD6EA6159B6807D861E2FAB69482
-DDB29C8D046AD8A6707BC19DD9494B8E44
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndResource
-/F8_0 /APYGPQ+LucidaSans-Typewriter83 1 1
-[ /.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/quoteright
-  /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
-  /quoteleft/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/bullet
-  /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
-  /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet
-  /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
-  /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/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]
-pdfMakeFont
-612 792 false pdfSetup
-%%EndSetup
-%%Page: 1 1
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  README  Page 1) 144.161 Tj
-0 -28.4801 Td
-(xv6 is a re-implementation of Dennis Ritchie's and Ken Thompson\
-'s Unix) 305.796 Tj
-0 -37.9735 Td
-(Version 6 \(v6\).  xv6 loosely follows the structure and style \
-of v6,) 292.6905 Tj
-0 -47.4668 Td
-(but is implemented for a modern x86-based multiprocessor using \
-ANSI C.) 305.796 Tj
-0 -66.4535 Td
-(ACKNOWLEDGMENTS) 65.5277 Tj
-0 -85.4402 Td
-(xv6 is inspired by John Lions's Commentary on UNIX 6th Edition \
-\(Peer) 297.059 Tj
-0 -94.9336 Td
-(to Peer Communications; ISBN: 1-57398-013-7; 1st edition \(June\
- 14,) 288.322 Tj
-0 -104.4269 Td
-(2000\)\). See also http://pdos.csail.mit.edu/6.828/2007/v6.html\
-, which) 297.059 Tj
-0 -113.9203 Td
-(provides pointers to on-line resources for v6.) 200.9517 Tj
-0 -132.907 Td
-(xv6 borrows code from the following sources:) 192.2146 Tj
-17.4613 -142.4004 Td
-(JOS \(asm.h, elf.h, mmu.h, bootasm.S, ide.c, console.c, and oth\
-ers\)) 288.322 Tj
-17.4613 -151.8937 Td
-(Plan 9 \(bootother.S, mp.h, mp.c, lapic.c\)) 179.1091 Tj
-17.4613 -161.3871 Td
-(FreeBSD \(ioapic.c\)) 78.6333 Tj
-17.4613 -170.8804 Td
-(NetBSD \(console.c\)) 78.6333 Tj
-0 -189.8667 Td
-(The following people made contributions:) 174.7406 Tj
-17.4613 -199.3601 Td
-(Russ Cox \(context switching, locking\)) 161.635 Tj
-17.4613 -208.8535 Td
-(Cliff Frey \(MP\)) 65.5277 Tj
-17.4613 -218.3468 Td
-(Xiao Yu \(MP\)) 52.4222 Tj
-0 -237.3335 Td
-(The code in the files that constitute xv6 is) 192.2146 Tj
-0 -246.8269 Td
-(Copyright 2006-2007 Frans Kaashoek, Robert Morris, and Russ Cox\
-.) 279.5849 Tj
-0 -265.8136 Td
-(ERROR REPORTS) 56.7907 Tj
-0 -284.8003 Td
-(If you spot errors or have suggestions for improvement, please \
-send) 292.6905 Tj
-0 -294.2936 Td
-(email to Frans Kaashoek and Robert Morris \(kaashoek,rtm@csail.\
-mit.edu\). ) 314.533 Tj
-0 -313.2803 Td
-(BUILDING AND RUNNING XV6) 104.8443 Tj
-0 -332.267 Td
-(To build xv6 on an x86 ELF machine \(like Linux or FreeBSD\), r\
-un "make".) 310.1645 Tj
-0 -341.7604 Td
-(On non-x86 or non-ELF machines \(like OS X, even on x86\), you \
-will) 283.9534 Tj
-0 -351.2538 Td
-(need to install a cross-compiler gcc suite capable of producing\
- x86 ELF) 310.1645 Tj
-0 -360.7471 Td
-(binaries.  See http://pdos.csail.mit.edu/6.828/2007/tools.html.) 275.2164 Tj
-0 -370.2405 Td
-(Then run "make TOOLPREFIX=i386-jos-elf-".) 179.1091 Tj
-0 -389.2272 Td
-(To run xv6, you can use Bochs or QEMU, both PC simulators.) 253.3738 Tj
-0 -398.7205 Td
-(Bochs makes debugging easier, but QEMU is much faster. ) 240.2683 Tj
-0 -408.2139 Td
-(To run in Bochs, run "make bochs" and then type "c" at the boch\
-s prompt.) 314.533 Tj
-0 -417.7073 Td
-(To run in QEMU, run "make qemu".  Both log the xv6 screen outpu\
-t to ) 297.059 Tj
-0 -427.2006 Td
-(standard output.) 69.8962 Tj
-0 -446.1873 Td
-(To create a typeset version of the code, run "make xv6.pdf".) 262.1109 Tj
-0 -455.6807 Td
-(This requires the "mpage" text formatting utility.) 218.4257 Tj
-0 -465.174 Td
-(See http://www.mesa.nl/pub/mpage/.) 148.5295 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  table of contents  Page 1) 192.2146 Tj
-0 -28.4801 Td
-(The numbers to the left of the file names in the table are shee\
-t numbers.) 318.9016 Tj
-0 -37.9735 Td
-(The source code has been printed in a double column format with\
- fifty) 301.4275 Tj
-0 -47.4668 Td
-(lines per column, giving one hundred lines per sheet \(or page\)\
-.) 275.2164 Tj
-0 -56.9602 Td
-(Thus there is a convenient relationship between line numbers an\
-d sheet numbers.) 345.1126 Tj
-0 -85.4403 Td
-(# basic headers) 65.5277 Tj
--4514.2 TJm
-(# system calls) 61.1592 Tj
--5015.87 TJm
-(# pipes) 30.5796 Tj
-0 -94.9336 Td
-(01 types.h) 43.6851 Tj
--7022.54 TJm
-(24 traps.h) 43.6851 Tj
--7022.54 TJm
-(51 pipe.c) 39.3166 Tj
-0 -104.427 Td
-(01 param.h) 43.6851 Tj
--7022.54 TJm
-(24 vectors.pl) 56.7907 Tj
-0 -113.9204 Td
-(02 defs.h) 39.3166 Tj
--7524.2 TJm
-(25 trapasm.S) 52.4222 Tj
--6019.2 TJm
-(# string operations) 83.0018 Tj
-0 -123.4137 Td
-(04 x86.h) 34.9481 Tj
--8025.87 TJm
-(25 trap.c) 39.3166 Tj
--7524.2 TJm
-(53 string.c) 48.0537 Tj
-0 -132.9071 Td
-(06 asm.h) 34.9481 Tj
--8025.87 TJm
-(27 syscall.h) 52.4222 Tj
-0 -142.4004 Td
-(06 mmu.h) 34.9481 Tj
--8025.87 TJm
-(27 syscall.c) 52.4222 Tj
--6019.2 TJm
-(# low-level hardware) 87.3703 Tj
-0 -151.8938 Td
-(08 elf.h) 34.9481 Tj
--8025.87 TJm
-(29 sysproc.c) 52.4222 Tj
--6019.2 TJm
-(54 mp.h) 30.5796 Tj
-209.536 -161.3872 Td
-(55 mp.c) 30.5796 Tj
-0 -170.8805 Td
-(# startup) 39.3166 Tj
--7524.2 TJm
-(# file system) 56.7907 Tj
--5517.54 TJm
-(56 lapic.c) 43.6851 Tj
-0 -180.3739 Td
-(09 bootasm.S) 52.4222 Tj
--6019.2 TJm
-(30 buf.h) 34.9481 Tj
--8025.87 TJm
-(58 ioapic.c) 48.0537 Tj
-0 -189.8672 Td
-(10 bootother.S) 61.1592 Tj
--5015.87 TJm
-(30 fcntl.h) 43.6851 Tj
--7022.54 TJm
-(59 picirq.c) 48.0537 Tj
-0 -199.3606 Td
-(11 bootmain.c) 56.7907 Tj
--5517.54 TJm
-(31 stat.h) 39.3166 Tj
--7524.2 TJm
-(61 kbd.h) 34.9481 Tj
-0 -208.854 Td
-(12 main.c) 39.3166 Tj
--7524.2 TJm
-(31 fs.h) 30.5796 Tj
--8527.54 TJm
-(62 kbd.c) 34.9481 Tj
-104.768 -218.3473 Td
-(32 file.h) 39.3166 Tj
--7524.2 TJm
-(63 console.c) 52.4222 Tj
-0 -227.8407 Td
-(# locks) 30.5796 Tj
--8527.54 TJm
-(33 ide.c) 34.9481 Tj
--8025.87 TJm
-(66 timer.c) 43.6851 Tj
-0 -237.334 Td
-(13 spinlock.h) 56.7907 Tj
--5517.54 TJm
-(35 bio.c) 34.9481 Tj
-0 -246.8274 Td
-(13 spinlock.c) 56.7907 Tj
--5517.54 TJm
-(36 fs.c) 30.5796 Tj
--8527.54 TJm
-(# user-level) 52.4222 Tj
-104.768 -256.3208 Td
-(44 file.c) 39.3166 Tj
--7524.2 TJm
-(67 initcode.S) 56.7907 Tj
-0 -265.8141 Td
-(# processes) 48.0537 Tj
--6520.87 TJm
-(45 sysfile.c) 52.4222 Tj
--6019.2 TJm
-(67 usys.S) 39.3166 Tj
-0 -275.3075 Td
-(15 proc.h) 39.3166 Tj
--7524.2 TJm
-(50 exec.c) 39.3166 Tj
--7524.2 TJm
-(68 init.c) 39.3166 Tj
-0 -284.8008 Td
-(16 proc.c) 39.3166 Tj
-209.536 -284.8008 Td
-(68 sh.c) 30.5796 Tj
-0 -294.2942 Td
-(22 swtch.S) 43.6851 Tj
-0 -303.7876 Td
-(22 kalloc.c) 48.0537 Tj
-0 -341.7606 Td
-(The source listing is preceded by a cross-reference that lists \
-every defined ) 336.3756 Tj
-0 -351.2539 Td
-(constant, struct, global variable, and function in xv6.  Each e\
-ntry gives,) 323.2701 Tj
-0 -360.7473 Td
-(on the same line as the name, the line number \(or, in a few ca\
-ses, numbers\)) 327.6386 Tj
-0 -370.2406 Td
-(where the name is defined.  Successive lines in an entry list t\
-he line) 305.796 Tj
-0 -379.734 Td
-(numbers where the name is used.  For example, this entry:) 249.0053 Tj
-17.4613 -398.7207 Td
-(swtch 2208) 43.6851 Tj
-34.9226 -408.2141 Td
-(0318 1928 1967 2207) 83.0018 Tj
-34.9226 -417.7074 Td
-(2208) 17.4741 Tj
--0 -436.6941 Td
-(indicates that swtch is defined on line 2208 and is mentioned o\
-n five lines) 327.6386 Tj
--0 -446.1875 Td
-(on sheets 03, 19, and 22.) 109.2129 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 2 2
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  cross-references  Page 1) 187.8461 Tj
-0 -28.4801 Td
-(acquire 1373) 52.4222 Tj
--12038.8 TJm
-(bmap 4010) 39.3166 Tj
-17.4613 -37.9735 Td
-(0321 1373 1377 1759) 83.0018 Tj
--8527.14 TJm
-(4010 4036 4119 4169) 83.0018 Tj
-17.4613 -47.4664 Td
-(1917 1975 2018 2033) 83.0018 Tj
--8527.14 TJm
-(4222) 17.4741 Tj
-17.4613 -56.9594 Td
-(2066 2079 2123 2158) 83.0018 Tj
--6520.6 TJm
-(bootmain 1116) 56.7907 Tj
-17.4613 -66.4524 Td
-(2315 2362 2616 2971) 83.0018 Tj
--8527.14 TJm
-(0976 1116) 39.3166 Tj
-17.4613 -75.9453 Td
-(3407 3465 3570 3629) 83.0018 Tj
--6520.6 TJm
-(bootothers 1267) 65.5277 Tj
-17.4613 -85.4383 Td
-(3857 3890 3910 3939) 83.0018 Tj
--8527.14 TJm
-(1207 1234 1267) 61.1592 Tj
-17.4613 -94.9313 Td
-(3954 3964 4425 4441) 83.0018 Tj
--6520.6 TJm
-(BPB 3188) 34.9481 Tj
-17.4613 -104.4243 Td
-(4456 5213 5234 5255) 83.0018 Tj
--8527.14 TJm
-(3188 3191 3712 3714) 83.0018 Tj
-17.4613 -113.9172 Td
-(6360 6516 6558 6606) 83.0018 Tj
--8527.14 TJm
-(3740) 17.4741 Tj
-0 -123.4106 Td
-(allocproc 1754) 61.1592 Tj
--11035.5 TJm
-(bread 3602) 43.6851 Tj
-17.4613 -132.9039 Td
-(1754 1807 1860) 61.1592 Tj
--11035.5 TJm
-(0211 3602 3682 3693) 83.0018 Tj
-0 -142.3973 Td
-(alltraps 2506) 56.7907 Tj
--13543.7 TJm
-(3713 3739 3811 3832) 83.0018 Tj
-17.4613 -151.8907 Td
-(2459 2467 2480 2485) 83.0018 Tj
--8527.14 TJm
-(3917 4026 4068 4119) 83.0018 Tj
-17.4613 -161.3836 Td
-(2505 2506) 39.3166 Tj
--13543.8 TJm
-(4169 4222) 39.3166 Tj
-0 -170.877 Td
-(ALT 6110) 34.9481 Tj
--14045.5 TJm
-(brelse 3624) 48.0537 Tj
-17.4613 -180.3703 Td
-(6110 6138 6140) 61.1592 Tj
--11035.5 TJm
-(0212 3624 3627 3684) 83.0018 Tj
-0 -189.8633 Td
-(argfd 4563) 43.6851 Tj
--15048.7 TJm
-(3696 3719 3723 3746) 83.0018 Tj
-17.4613 -199.3567 Td
-(4563 4606 4621 4633) 83.0018 Tj
--8527.14 TJm
-(3817 3820 3841 3925) 83.0018 Tj
-17.4613 -208.8497 Td
-(4644 4656) 39.3166 Tj
--13543.8 TJm
-(4032 4074 4122 4173) 83.0018 Tj
-0 -218.343 Td
-(argint 2794) 48.0537 Tj
--14547 TJm
-(4233 4237) 39.3166 Tj
-17.4613 -227.8364 Td
-(0339 2794 2808 2824) 83.0018 Tj
--6520.6 TJm
-(BSIZE 3158) 43.6851 Tj
-17.4613 -237.3293 Td
-(2931 2956 2969 4568) 83.0018 Tj
--8527.14 TJm
-(3158 3168 3182 3188) 83.0018 Tj
-17.4613 -246.8223 Td
-(4621 4633 4858 4921) 83.0018 Tj
--8527.14 TJm
-(3694 4119 4120 4121) 83.0018 Tj
-17.4613 -256.3153 Td
-(4922 4957) 39.3166 Tj
--13543.8 TJm
-(4165 4166 4169 4170) 83.0018 Tj
-0 -265.8086 Td
-(argptr 2804) 48.0537 Tj
--14547 TJm
-(4171 4221 4222 4224) 83.0018 Tj
-17.4613 -275.302 Td
-(0340 2804 4621 4633) 83.0018 Tj
--6520.6 TJm
-(buf 3000) 34.9481 Tj
-17.4613 -284.795 Td
-(4656 4982) 39.3166 Tj
--13543.8 TJm
-(0200 0211 0212 0213) 83.0018 Tj
-0 -294.2883 Td
-(argstr 2821) 48.0537 Tj
--14547 TJm
-(0253 3000 3004 3005) 83.0018 Tj
-17.4613 -303.7817 Td
-(0341 2821 4668 4758) 83.0018 Tj
--8527.14 TJm
-(3006 3310 3325 3328) 83.0018 Tj
-17.4613 -313.2747 Td
-(4858 4906 4920 4935) 83.0018 Tj
--8527.14 TJm
-(3375 3404 3454 3456) 83.0018 Tj
-17.4613 -322.7676 Td
-(4957) 17.4741 Tj
--16052.1 TJm
-(3459 3527 3531 3535) 83.0018 Tj
-0 -332.2606 Td
-(BACK 6861) 39.3166 Tj
--15550.3 TJm
-(3541 3553 3565 3568) 83.0018 Tj
-17.4613 -341.754 Td
-(6861 6974 7120 7389) 83.0018 Tj
--8527.14 TJm
-(3601 3604 3614 3624) 83.0018 Tj
-0 -351.2473 Td
-(backcmd 6896 7114) 74.2647 Tj
--11537 TJm
-(3669 3680 3691 3707) 83.0018 Tj
-17.4613 -360.7407 Td
-(6896 6909 6975 7114) 83.0018 Tj
--8527.14 TJm
-(3732 3805 3829 3904) 83.0018 Tj
-17.4613 -370.2337 Td
-(7116 7242 7355 7390) 83.0018 Tj
--8527.14 TJm
-(4013 4057 4105 4155) 83.0018 Tj
-0 -379.727 Td
-(BACKSPACE 6450) 61.1592 Tj
--13042 TJm
-(4215 6328 6339 6342) 83.0018 Tj
-17.4613 -389.2204 Td
-(6450 6467 6526 6532) 83.0018 Tj
--8527.14 TJm
-(6345 6503 6524 6537) 83.0018 Tj
-0 -398.7137 Td
-(balloc 3704) 48.0537 Tj
--14547 TJm
-(6568 6601 6608 6984) 83.0018 Tj
-17.4613 -408.2071 Td
-(3704 3725 4017 4025) 83.0018 Tj
--8527.14 TJm
-(6987 6988 6989 7003) 83.0018 Tj
-17.4613 -417.7001 Td
-(4029) 17.4741 Tj
--16052.1 TJm
-(7015 7016 7019 7020) 83.0018 Tj
-0 -427.1934 Td
-(BBLOCK 3191) 48.0537 Tj
--14547 TJm
-(7021 7025) 39.3166 Tj
-17.4613 -436.6868 Td
-(3191 3713 3739) 61.1592 Tj
--9028.94 TJm
-(bwrite 3614) 48.0537 Tj
-0 -446.1801 Td
-(bfree 3730) 43.6851 Tj
--15048.7 TJm
-(0213 3614 3617 3695) 83.0018 Tj
-17.4613 -455.6735 Td
-(3730 4062 4072 4075) 83.0018 Tj
--8527.14 TJm
-(3718 3745 3816 3840) 83.0018 Tj
-0 -465.1669 Td
-(bget 3566) 39.3166 Tj
--15550.3 TJm
-(4030 4172) 39.3166 Tj
-17.4613 -474.6598 Td
-(3566 3596 3606) 61.1592 Tj
--9028.94 TJm
-(bzero 3689) 43.6851 Tj
-0 -484.1532 Td
-(binit 3539) 43.6851 Tj
--15048.7 TJm
-(3689 3736) 39.3166 Tj
-17.4613 -493.6466 Td
-(0210 1227 3539) 61.1592 Tj
--9028.94 TJm
-(B_BUSY 3009) 48.0537 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  cross-references  Page 2) 187.8461 Tj
-17.4613 -28.4801 Td
-(3009 3458 3576 3577) 83.0018 Tj
--8527.14 TJm
-(7394) 17.4741 Tj
-17.4613 -37.9735 Td
-(3588 3591 3616 3626) 83.0018 Tj
--6520.6 TJm
-(CONSOLE 3290) 52.4222 Tj
-17.4613 -47.4668 Td
-(3638) 17.4741 Tj
--16052.1 TJm
-(3290 6621 6622) 61.1592 Tj
-0 -56.9602 Td
-(B_DIRTY 3011) 52.4222 Tj
--12038.8 TJm
-(consoleinit 6616) 69.8962 Tj
-17.4613 -66.4535 Td
-(3011 3387 3416 3421) 83.0018 Tj
--8527.14 TJm
-(0216 1219 6616) 61.1592 Tj
-17.4613 -75.9469 Td
-(3460 3479 3618) 61.1592 Tj
--9028.94 TJm
-(consoleintr 6512) 69.8962 Tj
-0 -85.4403 Td
-(B_VALID 3010) 52.4222 Tj
--14045.3 TJm
-(0218 6298 6512) 61.1592 Tj
-17.4613 -94.9336 Td
-(3010 3420 3460 3479) 83.0018 Tj
--6520.6 TJm
-(consoleread 6551) 69.8962 Tj
-17.4613 -104.427 Td
-(3607) 17.4741 Tj
--16052.1 TJm
-(6551 6622) 39.3166 Tj
-0 -113.9203 Td
-(C 6131 6509) 48.0537 Tj
--12540.5 TJm
-(consolewrite 6601) 74.2647 Tj
-17.4613 -123.4137 Td
-(6131 6179 6204 6205) 83.0018 Tj
--8527.14 TJm
-(6601 6621) 39.3166 Tj
-17.4613 -132.9071 Td
-(6206 6207 6208 6210) 83.0018 Tj
--6520.6 TJm
-(consputc 6487) 56.7907 Tj
-17.4613 -142.4004 Td
-(6509 6519 6522 6529) 83.0018 Tj
--8527.14 TJm
-(6315 6345 6366 6384) 83.0018 Tj
-17.4613 -151.8938 Td
-(6539 6569) 39.3166 Tj
--13543.8 TJm
-(6387 6391 6392 6487) 83.0018 Tj
-0 -161.3871 Td
-(CAPSLOCK 6112) 56.7907 Tj
--13543.7 TJm
-(6526 6532 6538 6608) 83.0018 Tj
-17.4613 -170.8805 Td
-(6112 6145 6286) 61.1592 Tj
--9028.94 TJm
-(context 1518) 52.4222 Tj
-0 -180.3739 Td
-(cgaputc 6455) 52.4222 Tj
--14045.3 TJm
-(0201 0318 1518 1537) 83.0018 Tj
-17.4613 -189.8668 Td
-(6455 6496) 39.3166 Tj
--13543.8 TJm
-(1559 1678 1787 1788) 83.0018 Tj
-0 -199.3602 Td
-(cli 0520) 34.9481 Tj
--16052 TJm
-(1789 1790 1928 1967) 83.0018 Tj
-17.4613 -208.8535 Td
-(0520 0522 0915 1029) 83.0018 Tj
--6520.6 TJm
-(cprintf 1221 6352) 74.2647 Tj
-17.4613 -218.3469 Td
-(1460 6406 6490) 61.1592 Tj
--11035.5 TJm
-(0217 1221 1222 1258) 83.0018 Tj
-0 -227.8403 Td
-(cmd 6865) 34.9481 Tj
--16052 TJm
-(1262 1676 1680 1682) 83.0018 Tj
-17.4613 -237.3336 Td
-(6865 6877 6886 6887) 83.0018 Tj
--8527.14 TJm
-(2286 2375 2637 2653) 83.0018 Tj
-17.4613 -246.827 Td
-(6892 6893 6898 6902) 83.0018 Tj
--8527.14 TJm
-(2658 2882 3410 5619) 83.0018 Tj
-17.4613 -256.3203 Td
-(6906 6915 6918 6923) 83.0018 Tj
--8527.14 TJm
-(5639 5761 5912 6352) 83.0018 Tj
-17.4613 -265.8137 Td
-(6931 6937 6941 6951) 83.0018 Tj
--8527.14 TJm
-(6408 6409 6410 6413) 83.0018 Tj
-17.4613 -275.3071 Td
-(6975 6977 7052 7055) 83.0018 Tj
--6520.6 TJm
-(cpu 1557) 34.9481 Tj
-17.4613 -284.8004 Td
-(7057 7058 7059 7060) 83.0018 Tj
--8527.14 TJm
-(0256 1221 1222 1258) 83.0018 Tj
-17.4613 -294.2938 Td
-(7063 7064 7066 7068) 83.0018 Tj
--8527.14 TJm
-(1260 1262 1271 1306) 83.0018 Tj
-17.4613 -303.7871 Td
-(7069 7070 7071 7072) 83.0018 Tj
--8527.14 TJm
-(1365 1386 1408 1446) 83.0018 Tj
-17.4613 -313.2805 Td
-(7073 7074 7075 7076) 83.0018 Tj
--8527.14 TJm
-(1461 1462 1470 1472) 83.0018 Tj
-17.4613 -322.7739 Td
-(7079 7080 7082 7084) 83.0018 Tj
--8527.14 TJm
-(1557 1567 1571 1582) 83.0018 Tj
-17.4613 -332.2672 Td
-(7085 7086 7087 7088) 83.0018 Tj
--8527.14 TJm
-(1705 1710 1715 1724) 83.0018 Tj
-17.4613 -341.7606 Td
-(7089 7100 7101 7103) 83.0018 Tj
--8527.14 TJm
-(1725 1726 1727 1728) 83.0018 Tj
-17.4613 -351.2539 Td
-(7105 7106 7107 7108) 83.0018 Tj
--8527.14 TJm
-(1729 1928 1959 1966) 83.0018 Tj
-17.4613 -360.7473 Td
-(7109 7110 7113 7114) 83.0018 Tj
--8527.14 TJm
-(1967 1968 2615 2637) 83.0018 Tj
-17.4613 -370.2407 Td
-(7116 7118 7119 7120) 83.0018 Tj
--8527.14 TJm
-(2638 2653 2654 2658) 83.0018 Tj
-17.4613 -379.734 Td
-(7121 7122 7212 7213) 83.0018 Tj
--8527.14 TJm
-(2659 5512 5513 5761) 83.0018 Tj
-17.4613 -389.2274 Td
-(7214 7215 7217 7221) 83.0018 Tj
--8527.14 TJm
-(6408) 17.4741 Tj
-17.4613 -398.7207 Td
-(7224 7230 7231 7234) 83.0018 Tj
--6520.6 TJm
-(cpunum 5751) 48.0537 Tj
-17.4613 -408.2141 Td
-(7237 7239 7242 7246) 83.0018 Tj
--8527.14 TJm
-(0269 1255 1256 1279) 83.0018 Tj
-17.4613 -417.7075 Td
-(7248 7250 7253 7255) 83.0018 Tj
--8527.14 TJm
-(1707 5751 5923 5932) 83.0018 Tj
-17.4613 -427.2008 Td
-(7258 7260 7263 7264) 83.0018 Tj
--6520.6 TJm
-(CR0_PE 0910 1024) 69.8962 Tj
-17.4613 -436.6942 Td
-(7275 7278 7281 7285) 83.0018 Tj
--8527.14 TJm
-(0956 1056) 39.3166 Tj
-17.4613 -446.1875 Td
-(7300 7303 7308 7312) 83.0018 Tj
--6520.6 TJm
-(create 4801) 48.0537 Tj
-17.4613 -455.6809 Td
-(7313 7316 7321 7322) 83.0018 Tj
--8527.14 TJm
-(4801 4821 4834 4838) 83.0018 Tj
-17.4613 -465.1743 Td
-(7328 7337 7338 7344) 83.0018 Tj
--8527.14 TJm
-(4862 4906 4923) 61.1592 Tj
-17.4613 -474.6676 Td
-(7345 7351 7352 7361) 83.0018 Tj
--6520.6 TJm
-(CRTPORT 6451) 52.4222 Tj
-17.4613 -484.161 Td
-(7364 7366 7372 7373) 83.0018 Tj
--8527.14 TJm
-(6451 6460 6461 6462) 83.0018 Tj
-17.4613 -493.6543 Td
-(7378 7384 7390 7391) 83.0018 Tj
--8527.14 TJm
-(6463 6479 6480 6481) 83.0018 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 3 3
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  cross-references  Page 3) 187.8461 Tj
-17.4613 -28.4801 Td
-(6482) 17.4741 Tj
--14045.6 TJm
-(exit 2104) 39.3166 Tj
-0 -37.9735 Td
-(CTL 6109) 34.9481 Tj
--16052 TJm
-(0302 2104 2140 2605) 83.0018 Tj
-17.4613 -47.4664 Td
-(6109 6135 6139 6285) 83.0018 Tj
--8527.14 TJm
-(2609 2667 2676 2916) 83.0018 Tj
-0 -56.9598 Td
-(devsw 3283) 43.6851 Tj
--15048.7 TJm
-(6715 6718 6761 6826) 83.0018 Tj
-17.4613 -66.4531 Td
-(3283 3288 4108 4110) 83.0018 Tj
--8527.14 TJm
-(6831 6916 6925 6935) 83.0018 Tj
-17.4613 -75.9465 Td
-(4158 4160 4407 6621) 83.0018 Tj
--8527.14 TJm
-(6980 7028 7035) 61.1592 Tj
-17.4613 -85.4399 Td
-(6622) 17.4741 Tj
--14045.6 TJm
-(fdalloc 4582) 52.4222 Tj
-0 -94.9332 Td
-(dinode 3172) 48.0537 Tj
--14547 TJm
-(4582 4608 4874 4987) 83.0018 Tj
-17.4613 -104.4266 Td
-(3172 3182 3806 3812) 83.0018 Tj
--6520.6 TJm
-(fetchint 2766) 56.7907 Tj
-17.4613 -113.9199 Td
-(3830 3833 3905 3918) 83.0018 Tj
--8527.14 TJm
-(0342 2766 2796 4963) 83.0018 Tj
-0 -123.4133 Td
-(dirent 3203) 48.0537 Tj
--12540.5 TJm
-(fetchstr 2778) 56.7907 Tj
-17.4613 -132.9067 Td
-(3203 4216 4223 4224) 83.0018 Tj
--8527.14 TJm
-(0343 2778 2826 4969) 83.0018 Tj
-17.4613 -142.4 Td
-(4255 4705 4754) 61.1592 Tj
--9028.94 TJm
-(file 3250) 39.3166 Tj
-0 -151.8934 Td
-(dirlink 4252) 52.4222 Tj
--14045.3 TJm
-(0202 0225 0226 0227) 83.0018 Tj
-17.4613 -161.3867 Td
-(0234 4252 4267 4275) 83.0018 Tj
--8527.14 TJm
-(0229 0230 0231 0287) 83.0018 Tj
-17.4613 -170.8801 Td
-(4684 4833 4837 4838) 83.0018 Tj
--8527.14 TJm
-(1540 3250 3671 4404) 83.0018 Tj
-0 -180.3735 Td
-(dirlookup 4212) 61.1592 Tj
--13042 TJm
-(4410 4420 4423 4426) 83.0018 Tj
-17.4613 -189.8664 Td
-(0235 4212 4219 4259) 83.0018 Tj
--8527.14 TJm
-(4438 4439 4452 4454) 83.0018 Tj
-17.4613 -199.3598 Td
-(4374 4770 4811) 61.1592 Tj
--11035.5 TJm
-(4476 4502 4522 4557) 83.0018 Tj
-0 -208.8532 Td
-(DIRSIZ 3201) 48.0537 Tj
--14547 TJm
-(4563 4566 4582 4603) 83.0018 Tj
-17.4613 -218.3465 Td
-(3201 3205 4205 4272) 83.0018 Tj
--8527.14 TJm
-(4617 4629 4642 4653) 83.0018 Tj
-17.4613 -227.8399 Td
-(4328 4329 4391 4665) 83.0018 Tj
--8527.14 TJm
-(4855 4979 5156 5171) 83.0018 Tj
-17.4613 -237.3332 Td
-(4755 4805) 39.3166 Tj
--13543.8 TJm
-(6310 6878 6933 6934) 83.0018 Tj
-0 -246.8266 Td
-(DPL_USER 0711) 56.7907 Tj
--13543.7 TJm
-(7064 7072 7272) 61.1592 Tj
-17.4613 -256.32 Td
-(0711 1724 1725 1817) 83.0018 Tj
--6520.6 TJm
-(filealloc 4421) 61.1592 Tj
-17.4613 -265.8133 Td
-(1818 2572 2666 2675) 83.0018 Tj
--8527.14 TJm
-(0225 4421 4874 5177) 83.0018 Tj
-0 -275.3067 Td
-(E0ESC 6116) 43.6851 Tj
--13042.1 TJm
-(fileclose 4452) 61.1592 Tj
-17.4613 -284.8 Td
-(6116 6270 6274 6275) 83.0018 Tj
--8527.14 TJm
-(0226 2115 4452 4458) 83.0018 Tj
-17.4613 -294.2934 Td
-(6277 6280) 39.3166 Tj
--13543.8 TJm
-(4647 4876 4990 4991) 83.0018 Tj
-0 -303.7868 Td
-(elfhdr 0855) 48.0537 Tj
--14547 TJm
-(5204 5206) 39.3166 Tj
-17.4613 -313.2801 Td
-(0855 1118 1123 5014) 83.0018 Tj
--6520.6 TJm
-(filedup 4439) 52.4222 Tj
-0 -322.7735 Td
-(ELF_MAGIC 0852) 61.1592 Tj
--13042 TJm
-(0227 1880 4439 4443) 83.0018 Tj
-17.4613 -332.2664 Td
-(0852 1129 5028) 61.1592 Tj
--11035.5 TJm
-(4610) 17.4741 Tj
-0 -341.7598 Td
-(ELF_PROG_LOAD 0886) 78.6333 Tj
--9028.81 TJm
-(fileinit 4414) 56.7907 Tj
-17.4613 -351.2532 Td
-(0886 5036 5067) 61.1592 Tj
--11035.5 TJm
-(0228 1228 4414) 61.1592 Tj
-0 -360.7465 Td
-(EOI 5663) 34.9481 Tj
--14045.5 TJm
-(fileread 4502) 56.7907 Tj
-17.4613 -370.2399 Td
-(5663 5734 5775) 61.1592 Tj
--11035.5 TJm
-(0229 4502 4517 4623) 83.0018 Tj
-0 -379.7332 Td
-(ERROR 5681) 43.6851 Tj
--13042.1 TJm
-(filestat 4476) 56.7907 Tj
-17.4613 -389.2266 Td
-(5681 5727) 39.3166 Tj
--13543.8 TJm
-(0230 4476 4658) 61.1592 Tj
-0 -398.72 Td
-(ESR 5666) 34.9481 Tj
--14045.5 TJm
-(filewrite 4522) 61.1592 Tj
-17.4613 -408.2133 Td
-(5666 5730 5731) 61.1592 Tj
--11035.5 TJm
-(0231 4522 4537 4635) 83.0018 Tj
-0 -417.7067 Td
-(EXEC 6857) 39.3166 Tj
--13543.8 TJm
-(FL_IF 0660) 43.6851 Tj
-17.4613 -427.2 Td
-(6857 6922 7059 7365) 83.0018 Tj
--8527.14 TJm
-(0660 1462 1468 1821) 83.0018 Tj
-0 -436.6934 Td
-(exec 5009) 39.3166 Tj
--15550.3 TJm
-(1963 5758) 39.3166 Tj
-17.4613 -446.1868 Td
-(0222 4972 5009 6768) 83.0018 Tj
--6520.6 TJm
-(fork 1854) 39.3166 Tj
-17.4613 -455.6801 Td
-(6829 6830 6926 6927) 83.0018 Tj
--8527.14 TJm
-(0303 1854 2910 6760) 83.0018 Tj
-0 -465.1735 Td
-(execcmd 6869 7053) 74.2647 Tj
--11537 TJm
-(6823 6825 7043 7045) 83.0018 Tj
-17.4613 -474.6665 Td
-(6869 6910 6923 7053) 83.0018 Tj
--6520.6 TJm
-(fork1 7039) 43.6851 Tj
-17.4613 -484.1598 Td
-(7055 7321 7327 7328) 83.0018 Tj
--8527.14 TJm
-(6900 6942 6954 6961) 83.0018 Tj
-17.4613 -493.6532 Td
-(7356 7366) 39.3166 Tj
--13543.8 TJm
-(6976 7024 7039) 61.1592 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  cross-references  Page 4) 187.8461 Tj
-0 -28.4801 Td
-(forkret 1984) 52.4222 Tj
--14045.3 TJm
-(3317 3391) 39.3166 Tj
-17.4613 -37.9735 Td
-(1616 1790 1984) 61.1592 Tj
--9028.94 TJm
-(IDE_CMD_WRITE 3318) 78.6333 Tj
-0 -47.4664 Td
-(gatedesc 0801) 56.7907 Tj
--13543.7 TJm
-(3318 3388) 39.3166 Tj
-17.4613 -56.9598 Td
-(0464 0467 0801 2560) 83.0018 Tj
--6520.6 TJm
-(IDE_DF 3314) 48.0537 Tj
-0 -66.4531 Td
-(getcallerpcs 1426) 74.2647 Tj
--11537 TJm
-(3314 3338) 39.3166 Tj
-17.4613 -75.9465 Td
-(0322 1387 1426 1678) 83.0018 Tj
--6520.6 TJm
-(IDE_DRDY 3313) 56.7907 Tj
-17.4613 -85.4399 Td
-(6411) 17.4741 Tj
--16052.1 TJm
-(3313 3336) 39.3166 Tj
-0 -94.9332 Td
-(getcmd 6984) 48.0537 Tj
--12540.5 TJm
-(IDE_ERR 3315) 52.4222 Tj
-17.4613 -104.4266 Td
-(6984 7015) 39.3166 Tj
--13543.8 TJm
-(3315 3338) 39.3166 Tj
-0 -113.9199 Td
-(gettoken 7156) 56.7907 Tj
--11537.1 TJm
-(idtinit 2578) 52.4222 Tj
-17.4613 -123.4133 Td
-(7156 7241 7245 7257) 83.0018 Tj
--8527.14 TJm
-(0351 1259 2578) 61.1592 Tj
-17.4613 -132.9067 Td
-(7270 7271 7307 7311) 83.0018 Tj
--6520.6 TJm
-(idup 3888) 39.3166 Tj
-17.4613 -142.4 Td
-(7333) 17.4741 Tj
--16052.1 TJm
-(0237 1881 3888 4361) 83.0018 Tj
-0 -151.8934 Td
-(growproc 1834) 56.7907 Tj
--11537.1 TJm
-(iget 3853) 39.3166 Tj
-17.4613 -161.3867 Td
-(0304 1834 2959) 61.1592 Tj
--11035.5 TJm
-(3794 3818 3853 3873) 83.0018 Tj
-0 -170.8801 Td
-(havedisk1 3327) 61.1592 Tj
--13042 TJm
-(4234 4359) 39.3166 Tj
-17.4613 -180.3735 Td
-(3327 3364 3462) 61.1592 Tj
--9028.94 TJm
-(iinit 3789) 43.6851 Tj
-0 -189.8664 Td
-(holding 1444) 52.4222 Tj
--14045.3 TJm
-(0238 1229 3789) 61.1592 Tj
-17.4613 -199.3598 Td
-(0323 1376 1404 1444) 83.0018 Tj
--6520.6 TJm
-(ilock 3902) 43.6851 Tj
-17.4613 -208.8532 Td
-(1957) 17.4741 Tj
--16052.1 TJm
-(0239 3902 3908 3928) 83.0018 Tj
-0 -218.3465 Td
-(ialloc 3802) 48.0537 Tj
--14547 TJm
-(4364 4479 4511 4531) 83.0018 Tj
-17.4613 -227.8399 Td
-(0236 3802 3822 4820) 83.0018 Tj
--8527.14 TJm
-(4672 4683 4693 4762) 83.0018 Tj
-17.4613 -237.3332 Td
-(4821) 17.4741 Tj
--16052.1 TJm
-(4774 4809 4813 4823) 83.0018 Tj
-0 -246.8266 Td
-(IBLOCK 3185) 48.0537 Tj
--14547 TJm
-(4867 4937 5023 6563) 83.0018 Tj
-17.4613 -256.32 Td
-(3185 3811 3832 3917) 83.0018 Tj
--8527.14 TJm
-(6583 6610) 39.3166 Tj
-0 -265.8133 Td
-(ICRHI 5674) 43.6851 Tj
--13042.1 TJm
-(inb 0403) 34.9481 Tj
-17.4613 -275.3067 Td
-(5674 5737 5807 5819) 83.0018 Tj
--8527.14 TJm
-(0403 0928 0936 1154) 83.0018 Tj
-0 -284.8 Td
-(ICRLO 5667) 43.6851 Tj
--15048.7 TJm
-(3336 3363 5647 6264) 83.0018 Tj
-17.4613 -294.2934 Td
-(5667 5738 5739 5808) 83.0018 Tj
--8527.14 TJm
-(6267 6461 6463) 61.1592 Tj
-17.4613 -303.7868 Td
-(5810 5820) 39.3166 Tj
--11537.3 TJm
-(initlock 1361) 56.7907 Tj
-0 -313.2801 Td
-(ID 5660) 30.5796 Tj
-174.613 -313.2801 Td
-(0324 1361 1622 2283) 83.0018 Tj
-17.461 -322.7735 Td
-(5660 5693 5766) 61.1592 Tj
--11035.5 TJm
-(2574 3355 3543 3791) 83.0018 Tj
--0.0003 -332.2664 Td
-(ideinit 3351) 52.4222 Tj
--14045.3 TJm
-(4416 5185 6618 6619) 83.0018 Tj
-17.461 -341.7598 Td
-(0251 1230 3351) 61.1592 Tj
--9028.94 TJm
-(inode 3263) 43.6851 Tj
--0.0003 -351.2532 Td
-(ideintr 3402) 52.4222 Tj
--14045.3 TJm
-(0203 0234 0235 0236) 83.0018 Tj
-17.461 -360.7465 Td
-(0252 2624 3402) 61.1592 Tj
--11035.5 TJm
-(0237 0239 0240 0241) 83.0018 Tj
--0.0003 -370.2399 Td
-(idelock 3324) 52.4222 Tj
--14045.3 TJm
-(0242 0243 0245 0246) 83.0018 Tj
-17.461 -379.7332 Td
-(3324 3355 3407 3409) 83.0018 Tj
--8527.14 TJm
-(0247 0248 0249 1541) 83.0018 Tj
-17.461 -389.2266 Td
-(3428 3465 3480 3482) 83.0018 Tj
--8527.14 TJm
-(3256 3263 3284 3285) 83.0018 Tj
--0.0003 -398.72 Td
-(iderw 3454) 43.6851 Tj
--15048.7 TJm
-(3674 3785 3794 3801) 83.0018 Tj
-17.461 -408.2133 Td
-(0253 3454 3459 3461) 83.0018 Tj
--8527.14 TJm
-(3827 3852 3855 3861) 83.0018 Tj
-17.461 -417.7067 Td
-(3608 3619) 39.3166 Tj
--13543.8 TJm
-(3887 3888 3902 3934) 83.0018 Tj
--0.0003 -427.2 Td
-(idestart 3375) 56.7907 Tj
--13543.7 TJm
-(3952 3974 4010 4054) 83.0018 Tj
-17.461 -436.6934 Td
-(3328 3375 3378 3426) 83.0018 Tj
--8527.14 TJm
-(4085 4102 4152 4211) 83.0018 Tj
-17.461 -446.1868 Td
-(3475) 17.4741 Tj
--16052.1 TJm
-(4212 4252 4256 4353) 83.0018 Tj
--0.0003 -455.6801 Td
-(idewait 3332) 52.4222 Tj
--14045.3 TJm
-(4356 4388 4395 4666) 83.0018 Tj
-17.461 -465.1735 Td
-(3332 3358 3380 3416) 83.0018 Tj
--8527.14 TJm
-(4702 4753 4800 4804) 83.0018 Tj
--0.0003 -474.6665 Td
-(IDE_BSY 3312) 52.4222 Tj
--14045.3 TJm
-(4856 4904 4915 4933) 83.0018 Tj
-17.461 -484.1598 Td
-(3312 3336) 39.3166 Tj
--13543.8 TJm
-(5015 6551 6601) 61.1592 Tj
--0.0003 -493.6532 Td
-(IDE_CMD_READ 3317) 74.2647 Tj
--9530.47 TJm
-(INPUT_BUF 6500) 61.1592 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 4 4
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  cross-references  Page 5) 187.8461 Tj
-17.4613 -28.4801 Td
-(6500 6503 6524 6536) 83.0018 Tj
--8527.14 TJm
-(2432 2627 6625 6626) 83.0018 Tj
-17.4613 -37.9735 Td
-(6537 6539 6568) 61.1592 Tj
--9028.94 TJm
-(IRQ_SLAVE 5960) 61.1592 Tj
-0 -47.4664 Td
-(insl 0412) 39.3166 Tj
--15550.3 TJm
-(5960 5964 6002 6017) 83.0018 Tj
-17.4613 -56.9598 Td
-(0412 0414 1173 3417) 83.0018 Tj
--6520.6 TJm
-(IRQ_SPURIOUS 2436) 74.2647 Tj
-0 -66.4531 Td
-(INT_DISABLED 5869) 74.2647 Tj
--11537 TJm
-(2436 2636 5707) 61.1592 Tj
-17.4613 -75.9465 Td
-(5869 5917) 39.3166 Tj
--11537.3 TJm
-(IRQ_TIMER 2431) 61.1592 Tj
-0 -85.4399 Td
-(IOAPIC 5858) 48.0537 Tj
--14547 TJm
-(2431 2614 2671 5714) 83.0018 Tj
-17.4613 -94.9332 Td
-(5858 5908) 39.3166 Tj
--13543.8 TJm
-(6680) 17.4741 Tj
-0 -104.4266 Td
-(ioapic 5877) 48.0537 Tj
--12540.5 TJm
-(isdirempty 4702) 65.5277 Tj
-17.4613 -113.9199 Td
-(5607 5629 5630 5874) 83.0018 Tj
--8527.14 TJm
-(4702 4709 4778) 61.1592 Tj
-17.4613 -123.4133 Td
-(5877 5886 5887 5893) 83.0018 Tj
--6520.6 TJm
-(ismp 5514) 39.3166 Tj
-17.4613 -132.9067 Td
-(5894 5908) 39.3166 Tj
--13543.8 TJm
-(0277 1231 5514 5612) 83.0018 Tj
-0 -142.4 Td
-(ioapicenable 5923) 74.2647 Tj
--11537 TJm
-(5905 5925) 39.3166 Tj
-17.4613 -151.8934 Td
-(0256 3357 5923 6626) 83.0018 Tj
--6520.6 TJm
-(itrunc 4054) 48.0537 Tj
-0 -161.3867 Td
-(ioapicid 5516) 56.7907 Tj
--13543.7 TJm
-(3674 3961 4054) 61.1592 Tj
-17.4613 -170.8801 Td
-(0257 5516 5630 5911) 83.0018 Tj
--6520.6 TJm
-(iunlock 3934) 52.4222 Tj
-17.4613 -180.3735 Td
-(5912) 17.4741 Tj
--16052.1 TJm
-(0241 3934 3937 3976) 83.0018 Tj
-0 -189.8664 Td
-(ioapicinit 5901) 65.5277 Tj
--12540.3 TJm
-(4371 4481 4514 4534) 83.0018 Tj
-17.4613 -199.3598 Td
-(0258 1218 5901 5912) 83.0018 Tj
--8527.14 TJm
-(4679 4880 4942 6556) 83.0018 Tj
-0 -208.8532 Td
-(ioapicread 5884) 65.5277 Tj
--12540.3 TJm
-(6605) 17.4741 Tj
-17.4613 -218.3465 Td
-(5884 5909 5910) 61.1592 Tj
--9028.94 TJm
-(iunlockput 3974) 65.5277 Tj
-0 -227.8399 Td
-(ioapicwrite 5891) 69.8962 Tj
--12038.7 TJm
-(0242 3974 4366 4375) 83.0018 Tj
-17.4613 -237.3332 Td
-(5891 5917 5918 5931) 83.0018 Tj
--8527.14 TJm
-(4378 4674 4685 4688) 83.0018 Tj
-17.4613 -246.8266 Td
-(5932) 17.4741 Tj
--16052.1 TJm
-(4696 4766 4771 4779) 83.0018 Tj
-0 -256.32 Td
-(IO_PIC1 5957) 52.4222 Tj
--14045.3 TJm
-(4780 4791 4795 4812) 83.0018 Tj
-17.4613 -265.8133 Td
-(5957 5970 5985 5994) 83.0018 Tj
--8527.14 TJm
-(4816 4840 4869 4877) 83.0018 Tj
-17.4613 -275.3067 Td
-(5997 6002 6012 6026) 83.0018 Tj
--8527.14 TJm
-(4908 4925 4939 5077) 83.0018 Tj
-17.4613 -284.8 Td
-(6027) 17.4741 Tj
--16052.1 TJm
-(5118) 17.4741 Tj
-0 -294.2934 Td
-(IO_PIC2 5958) 52.4222 Tj
--12038.8 TJm
-(iupdate 3827) 52.4222 Tj
-17.4613 -303.7868 Td
-(5958 5971 5986 6015) 83.0018 Tj
--8527.14 TJm
-(0243 3827 3963 4080) 83.0018 Tj
-17.4613 -313.2801 Td
-(6016 6017 6020 6029) 83.0018 Tj
--8527.14 TJm
-(4178 4678 4695 4789) 83.0018 Tj
-17.4613 -322.7735 Td
-(6030) 17.4741 Tj
--16052.1 TJm
-(4794 4827 4831) 61.1592 Tj
-0 -332.2664 Td
-(IO_RTC 5786) 48.0537 Tj
--12540.5 TJm
-(I_BUSY 3277) 48.0537 Tj
-17.4613 -341.7598 Td
-(5786 5799 5800) 61.1592 Tj
--11035.5 TJm
-(3277 3911 3913 3936) 83.0018 Tj
-0 -351.2532 Td
-(IO_TIMER1 6659) 61.1592 Tj
--13042 TJm
-(3940 3957 3959) 61.1592 Tj
-17.4613 -360.7465 Td
-(6659 6668 6678 6679) 83.0018 Tj
--6520.6 TJm
-(I_VALID 3278) 52.4222 Tj
-0 -370.2399 Td
-(IPB 3182) 34.9481 Tj
--16052 TJm
-(3278 3916 3926 3955) 83.0018 Tj
-17.4613 -379.7332 Td
-(3182 3185 3191 3812) 83.0018 Tj
--6520.6 TJm
-(kalloc 2354) 48.0537 Tj
-17.4613 -389.2266 Td
-(3833 3918) 39.3166 Tj
--13543.8 TJm
-(0261 1283 1772 1812) 83.0018 Tj
-0 -398.72 Td
-(iput 3952) 39.3166 Tj
--15550.3 TJm
-(1838 1865 2354 2360) 83.0018 Tj
-17.4613 -408.2133 Td
-(0240 2120 3952 3958) 83.0018 Tj
--8527.14 TJm
-(2375 5058 5179) 61.1592 Tj
-17.4613 -417.7067 Td
-(3977 4260 4382 4471) 83.0018 Tj
--6520.6 TJm
-(KBDATAP 6104) 52.4222 Tj
-17.4613 -427.2 Td
-(4689 4943) 39.3166 Tj
--13543.8 TJm
-(6104 6267) 39.3166 Tj
-0 -436.6934 Td
-(IRQ_COM1 2433) 56.7907 Tj
--11537.1 TJm
-(kbdgetc 6256) 52.4222 Tj
-17.4613 -446.1868 Td
-(2433 2631) 39.3166 Tj
--13543.8 TJm
-(6256 6298) 39.3166 Tj
-0 -455.6801 Td
-(IRQ_ERROR 2435) 61.1592 Tj
--11035.5 TJm
-(kbdintr 6296) 52.4222 Tj
-17.4613 -465.1735 Td
-(2435 5727) 39.3166 Tj
--13543.8 TJm
-(0266 2628 6296) 61.1592 Tj
-0 -474.6665 Td
-(IRQ_IDE 2434) 52.4222 Tj
--12038.8 TJm
-(KBSTATP 6102) 52.4222 Tj
-17.4613 -484.1598 Td
-(2434 2623 3356 3357) 83.0018 Tj
--8527.14 TJm
-(6102 6264) 39.3166 Tj
-0 -493.6532 Td
-(IRQ_KBD 2432) 52.4222 Tj
--12038.8 TJm
-(KBS_DIB 6103) 52.4222 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  cross-references  Page 6) 187.8461 Tj
-17.4613 -28.4801 Td
-(6103 6265) 39.3166 Tj
--13543.8 TJm
-(0453 0461 0954 1054) 83.0018 Tj
-0 -37.9735 Td
-(KEY_DEL 6128) 52.4222 Tj
--14045.3 TJm
-(1711) 17.4741 Tj
-17.4613 -47.4664 Td
-(6128 6169 6191 6215) 83.0018 Tj
--6520.6 TJm
-(lidt 0467) 39.3166 Tj
-0 -56.9598 Td
-(KEY_DN 6122) 48.0537 Tj
--14547 TJm
-(0467 0475 2580) 61.1592 Tj
-17.4613 -66.4531 Td
-(6122 6165 6187 6211) 83.0018 Tj
--6520.6 TJm
-(LINT0 5679) 43.6851 Tj
-0 -75.9465 Td
-(KEY_END 6120) 52.4222 Tj
--14045.3 TJm
-(5679 5718) 39.3166 Tj
-17.4613 -85.4399 Td
-(6120 6168 6190 6214) 83.0018 Tj
--6520.6 TJm
-(LINT1 5680) 43.6851 Tj
-0 -94.9332 Td
-(KEY_HOME 6119) 56.7907 Tj
--13543.7 TJm
-(5680 5719) 39.3166 Tj
-17.4613 -104.4266 Td
-(6119 6168 6190 6214) 83.0018 Tj
--6520.6 TJm
-(LIST 6860) 39.3166 Tj
-0 -113.9199 Td
-(KEY_INS 6127) 52.4222 Tj
--14045.3 TJm
-(6860 6940 7107 7383) 83.0018 Tj
-17.4613 -123.4133 Td
-(6127 6169 6191 6215) 83.0018 Tj
--6520.6 TJm
-(listcmd 6890 7101) 74.2647 Tj
-0 -132.9067 Td
-(KEY_LF 6123) 48.0537 Tj
--14547 TJm
-(6890 6911 6941 7101) 83.0018 Tj
-17.4613 -142.4 Td
-(6123 6167 6189 6213) 83.0018 Tj
--8527.14 TJm
-(7103 7246 7357 7384) 83.0018 Tj
-0 -151.8934 Td
-(KEY_PGDN 6126) 56.7907 Tj
--11537.1 TJm
-(loadgs 0514) 48.0537 Tj
-17.4613 -161.3867 Td
-(6126 6166 6188 6212) 83.0018 Tj
--8527.14 TJm
-(0514 1712) 39.3166 Tj
-0 -170.8801 Td
-(KEY_PGUP 6125) 56.7907 Tj
--11537.1 TJm
-(ltr 0479) 34.9481 Tj
-17.4613 -180.3735 Td
-(6125 6166 6188 6212) 83.0018 Tj
--8527.14 TJm
-(0479 0481 1730) 61.1592 Tj
-0 -189.8664 Td
-(KEY_RT 6124) 48.0537 Tj
--12540.5 TJm
-(MAXARGS 6863) 52.4222 Tj
-17.4613 -199.3598 Td
-(6124 6167 6189 6213) 83.0018 Tj
--8527.14 TJm
-(6863 6871 6872 7340) 83.0018 Tj
-0 -208.8532 Td
-(KEY_UP 6121) 48.0537 Tj
--12540.5 TJm
-(MAXFILE 3169) 52.4222 Tj
-17.4613 -218.3465 Td
-(6121 6165 6187 6211) 83.0018 Tj
--8527.14 TJm
-(3169 4165 4166) 61.1592 Tj
-0 -227.8399 Td
-(kfree 2305) 43.6851 Tj
--13042.1 TJm
-(memcmp 5311) 48.0537 Tj
-17.4613 -237.3332 Td
-(0262 1843 1866 2169) 83.0018 Tj
--8527.14 TJm
-(0330 5311 5543 5588) 83.0018 Tj
-17.4613 -246.8266 Td
-(2170 2287 2305 2310) 83.0018 Tj
--6520.6 TJm
-(memmove 5327) 52.4222 Tj
-17.4613 -256.32 Td
-(5107 5117 5202 5223) 83.0018 Tj
--8527.14 TJm
-(0331 1276 1814 1841) 83.0018 Tj
-0 -265.8133 Td
-(kill 2075) 39.3166 Tj
--15550.3 TJm
-(1871 3683 3839 3924) 83.0018 Tj
-17.4613 -275.3067 Td
-(0305 2075 2658 2933) 83.0018 Tj
--8527.14 TJm
-(4121 4171 4329 4331) 83.0018 Tj
-17.4613 -284.8 Td
-(6767) 17.4741 Tj
--16052.1 TJm
-(5088 5327 6474) 61.1592 Tj
-0 -294.2934 Td
-(kinit 2277) 43.6851 Tj
--13042.1 TJm
-(memset 5304) 48.0537 Tj
-17.4613 -303.7868 Td
-(0263 1224 2277) 61.1592 Tj
--11035.5 TJm
-(0332 1789 1813 1816) 83.0018 Tj
-0 -313.2801 Td
-(ksegment 1703) 56.7907 Tj
--13543.7 TJm
-(1842 2313 3694 3814) 83.0018 Tj
-17.4613 -322.7735 Td
-(0309 1216 1257 1703) 83.0018 Tj
--8527.14 TJm
-(4784 4959 5061 5075) 83.0018 Tj
-0 -332.2664 Td
-(KSTACKSIZE 0152) 65.5277 Tj
--12540.3 TJm
-(5304 6476 6987 7058) 83.0018 Tj
-17.4613 -341.7598 Td
-(0152 1283 1284 1729) 83.0018 Tj
--8527.14 TJm
-(7069 7085 7106 7119) 83.0018 Tj
-17.4613 -351.2532 Td
-(1772 1776 1866 2170) 83.0018 Tj
--6520.6 TJm
-(microdelay 5781) 65.5277 Tj
-0 -360.7465 Td
-(lapiceoi 5772) 56.7907 Tj
--13543.7 TJm
-(0274 5781 5809 5811) 83.0018 Tj
-17.4613 -370.2399 Td
-(0271 2621 2625 2629) 83.0018 Tj
--8527.14 TJm
-(5821) 17.4741 Tj
-17.4613 -379.7332 Td
-(2633 2639 5772) 61.1592 Tj
--9028.94 TJm
-(min 3673) 34.9481 Tj
-0 -389.2266 Td
-(lapicinit 5701) 61.1592 Tj
--13042 TJm
-(3673 4120 4170) 61.1592 Tj
-17.4613 -398.72 Td
-(0272 1215 1256 5701) 83.0018 Tj
--6520.6 TJm
-(mp 5402) 30.5796 Tj
-0 -408.2133 Td
-(lapicstartap 5791) 74.2647 Tj
--11537 TJm
-(5402 5507 5536 5542) 83.0018 Tj
-17.4613 -417.7067 Td
-(0273 1286 5791) 61.1592 Tj
--11035.5 TJm
-(5543 5544 5555 5560) 83.0018 Tj
-0 -427.2 Td
-(lapicw 5690) 48.0537 Tj
--14547 TJm
-(5564 5565 5568 5569) 83.0018 Tj
-17.4613 -436.6934 Td
-(5690 5707 5713 5714) 83.0018 Tj
--8527.14 TJm
-(5580 5583 5585 5587) 83.0018 Tj
-17.4613 -446.1868 Td
-(5715 5718 5719 5724) 83.0018 Tj
--8527.14 TJm
-(5594 5604 5610 5643) 83.0018 Tj
-17.4613 -455.6801 Td
-(5727 5730 5731 5734) 83.0018 Tj
--6520.6 TJm
-(mpbcpu 5519) 48.0537 Tj
-17.4613 -465.1735 Td
-(5737 5738 5743 5775) 83.0018 Tj
--8527.14 TJm
-(0278 1215 1255 5519) 83.0018 Tj
-17.4613 -474.6668 Td
-(5807 5808 5810 5819) 83.0018 Tj
--6520.6 TJm
-(MPBUS 5452) 43.6851 Tj
-17.4613 -484.1602 Td
-(5820) 17.4741 Tj
--16052.1 TJm
-(5452 5633) 39.3166 Tj
-0 -493.6536 Td
-(lgdt 0453) 39.3166 Tj
--13543.8 TJm
-(mpconf 5413) 48.0537 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 5 5
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  cross-references  Page 7) 187.8461 Tj
-17.4613 -28.4801 Td
-(5413 5579 5582 5587) 83.0018 Tj
--8527.14 TJm
-(4076) 17.4741 Tj
-17.4613 -37.9735 Td
-(5605) 17.4741 Tj
--14045.6 TJm
-(NELEM 0362) 43.6851 Tj
-0 -47.4664 Td
-(mpconfig 5580) 56.7907 Tj
--13543.7 TJm
-(0362 1672 2879 4961) 83.0018 Tj
-17.4613 -56.9598 Td
-(5580 5610) 39.3166 Tj
--11537.3 TJm
-(nextpid 1615) 52.4222 Tj
-0 -66.4531 Td
-(mpinit 5601) 48.0537 Tj
--14547 TJm
-(1615 1768) 39.3166 Tj
-17.4613 -75.9465 Td
-(0279 1214 5601 5619) 83.0018 Tj
--6520.6 TJm
-(NFILE 0155) 43.6851 Tj
-17.4613 -85.4399 Td
-(5620 5639 5640) 61.1592 Tj
--11035.5 TJm
-(0155 4410 4426) 61.1592 Tj
-0 -94.9332 Td
-(MPIOAPIC 5453) 56.7907 Tj
--11537.1 TJm
-(NINDIRECT 3168) 61.1592 Tj
-17.4613 -104.4266 Td
-(5453 5628) 39.3166 Tj
--13543.8 TJm
-(3168 3169 4022 4070) 83.0018 Tj
-0 -113.9199 Td
-(mpioapic 5439) 56.7907 Tj
--11537.1 TJm
-(NINODE 0157) 48.0537 Tj
-17.4613 -123.4133 Td
-(5439 5607 5629 5631) 83.0018 Tj
--8527.14 TJm
-(0157 3785 3861) 61.1592 Tj
-0 -132.9067 Td
-(MPIOINTR 5454) 56.7907 Tj
--11537.1 TJm
-(NO 6106) 30.5796 Tj
-17.4613 -142.4 Td
-(5454 5634) 39.3166 Tj
--13543.8 TJm
-(6106 6152 6155 6157) 83.0018 Tj
-0 -151.8934 Td
-(MPLINTR 5455) 52.4222 Tj
--14045.3 TJm
-(6158 6159 6160 6162) 83.0018 Tj
-17.4613 -161.3867 Td
-(5455 5635) 39.3166 Tj
--13543.8 TJm
-(6174 6177 6179 6180) 83.0018 Tj
-0 -170.8801 Td
-(mpmain 1253) 48.0537 Tj
--14547 TJm
-(6181 6182 6184 6202) 83.0018 Tj
-17.4613 -180.3735 Td
-(1208 1237 1253 1258) 83.0018 Tj
--8527.14 TJm
-(6203 6205 6206 6207) 83.0018 Tj
-17.4613 -189.8668 Td
-(1285) 17.4741 Tj
--16052.1 TJm
-(6208) 17.4741 Tj
-0 -199.3602 Td
-(MPPROC 5451) 48.0537 Tj
--12540.5 TJm
-(NOFILE 0154) 48.0537 Tj
-17.4613 -208.8535 Td
-(5451 5616) 39.3166 Tj
--13543.8 TJm
-(0154 1540 1878 2113) 83.0018 Tj
-0 -218.3469 Td
-(mpproc 5428) 48.0537 Tj
--14547 TJm
-(4570 4586) 39.3166 Tj
-17.4613 -227.8403 Td
-(5428 5606 5617 5626) 83.0018 Tj
--6520.6 TJm
-(NPROC 0150) 43.6851 Tj
-0 -237.3336 Td
-(mpsearch 5556) 56.7907 Tj
--13543.7 TJm
-(0150 1610 1669 1760) 83.0018 Tj
-17.4613 -246.827 Td
-(5556 5585) 39.3166 Tj
--13543.8 TJm
-(1918 2057 2080 2129) 83.0018 Tj
-0 -256.3203 Td
-(mpsearch1 5537) 61.1592 Tj
--13042 TJm
-(2162) 17.4741 Tj
-17.4613 -265.8137 Td
-(5537 5564 5568 5571) 83.0018 Tj
--6520.6 TJm
-(NSEGS 1508) 43.6851 Tj
-0 -275.3071 Td
-(namecmp 4203) 52.4222 Tj
--14045.3 TJm
-(1508 1561) 39.3166 Tj
-17.4613 -284.8004 Td
-(0244 4203 4228 4765) 83.0018 Tj
--6520.6 TJm
-(nulterminate 7352) 74.2647 Tj
-0 -294.2938 Td
-(namei 4389) 43.6851 Tj
--15048.7 TJm
-(7215 7230 7352 7373) 83.0018 Tj
-17.4613 -303.7871 Td
-(0245 1826 4389 4670) 83.0018 Tj
--8527.14 TJm
-(7379 7380 7385 7386) 83.0018 Tj
-17.4613 -313.2805 Td
-(4865 4935 5021) 61.1592 Tj
--11035.5 TJm
-(7391) 17.4741 Tj
-0 -322.7739 Td
-(nameiparent 4396) 69.8962 Tj
--10032.1 TJm
-(NUMLOCK 6113) 52.4222 Tj
-17.4613 -332.2668 Td
-(0246 4354 4369 4381) 83.0018 Tj
--8527.14 TJm
-(6113 6146) 39.3166 Tj
-17.4613 -341.7602 Td
-(4396 4681 4760 4807) 83.0018 Tj
--6520.6 TJm
-(outb 0421) 39.3166 Tj
-0 -351.2536 Td
-(namex 4354) 43.6851 Tj
--15048.7 TJm
-(0421 0933 0941 1164) 83.0018 Tj
-17.4613 -360.7469 Td
-(4354 4392 4398) 61.1592 Tj
--11035.5 TJm
-(1165 1166 1167 1168) 83.0018 Tj
-0 -370.2403 Td
-(NBUF 0156) 39.3166 Tj
--15550.3 TJm
-(1169 3361 3370 3381) 83.0018 Tj
-17.4613 -379.7336 Td
-(0156 3531 3553) 61.1592 Tj
--11035.5 TJm
-(3382 3383 3384 3385) 83.0018 Tj
-0 -389.227 Td
-(NCPU 0153) 39.3166 Tj
--15550.3 TJm
-(3386 3388 3391 5646) 83.0018 Tj
-17.4613 -398.7204 Td
-(0153 1571 5512) 61.1592 Tj
--11035.5 TJm
-(5647 5799 5800 5970) 83.0018 Tj
-0 -408.2137 Td
-(ncpu 5515) 39.3166 Tj
--15550.3 TJm
-(5971 5985 5986 5994) 83.0018 Tj
-17.4613 -417.7071 Td
-(1222 1278 1572 3357) 83.0018 Tj
--8527.14 TJm
-(5997 6002 6012 6015) 83.0018 Tj
-17.4613 -427.2004 Td
-(5515 5618 5619 5623) 83.0018 Tj
--8527.14 TJm
-(6016 6017 6020 6026) 83.0018 Tj
-17.4613 -436.6938 Td
-(5624 5625) 39.3166 Tj
--13543.8 TJm
-(6027 6029 6030 6460) 83.0018 Tj
-0 -446.1872 Td
-(NDEV 0158) 39.3166 Tj
--15550.3 TJm
-(6462 6479 6480 6481) 83.0018 Tj
-17.4613 -455.6805 Td
-(0158 4108 4158 4407) 83.0018 Tj
--8527.14 TJm
-(6482 6677 6678 6679) 83.0018 Tj
-0 -465.1739 Td
-(NDIRECT 3167) 52.4222 Tj
--12038.8 TJm
-(outsl 0433) 43.6851 Tj
-17.4613 -474.6668 Td
-(3167 3169 3178 3274) 83.0018 Tj
--8527.14 TJm
-(0433 0435 3389) 61.1592 Tj
-17.4613 -484.1602 Td
-(4015 4020 4024 4025) 83.0018 Tj
--6520.6 TJm
-(outw 0427) 39.3166 Tj
-17.4613 -493.6536 Td
-(4060 4067 4068 4075) 83.0018 Tj
--8527.14 TJm
-(0427 0982 0984 1082) 83.0018 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  cross-references  Page 8) 187.8461 Tj
-17.4613 -28.4801 Td
-(1084) 17.4741 Tj
--16052.1 TJm
-(7201 7225 7240 7244) 83.0018 Tj
-0 -37.9735 Td
-(O_CREATE 3053) 56.7907 Tj
--13543.7 TJm
-(7256 7269 7305 7309) 83.0018 Tj
-17.4613 -47.4664 Td
-(3053 4861 7278 7281) 83.0018 Tj
--8527.14 TJm
-(7324 7332) 39.3166 Tj
-0 -56.9598 Td
-(O_RDONLY 3050) 56.7907 Tj
--11537.1 TJm
-(picenable 5975) 61.1592 Tj
-17.4613 -66.4531 Td
-(3050 4868 7275) 61.1592 Tj
--11035.5 TJm
-(0283 3356 5975 6625) 83.0018 Tj
-0 -75.9465 Td
-(O_RDWR 3052) 48.0537 Tj
--14547 TJm
-(6680) 17.4741 Tj
-17.4613 -85.4399 Td
-(3052 4886 6814 6816) 83.0018 Tj
--6520.6 TJm
-(picinit 5982) 52.4222 Tj
-17.4613 -94.9332 Td
-(7007) 17.4741 Tj
--16052.1 TJm
-(0284 1217 5982) 61.1592 Tj
-0 -104.4266 Td
-(O_WRONLY 3051) 56.7907 Tj
--11537.1 TJm
-(picsetmask 5967) 65.5277 Tj
-17.4613 -113.9199 Td
-(3051 4885 4886 7278) 83.0018 Tj
--8527.14 TJm
-(5967 5977 6033) 61.1592 Tj
-17.4613 -123.4133 Td
-(7281) 17.4741 Tj
--14045.6 TJm
-(pinit 1620) 43.6851 Tj
-0 -132.9067 Td
-(PAGE 0151) 39.3166 Tj
--15550.3 TJm
-(0306 1225 1620) 61.1592 Tj
-17.4613 -142.4 Td
-(0151 0152 1811 2284) 83.0018 Tj
--6520.6 TJm
-(PIPE 6859) 39.3166 Tj
-17.4613 -151.8934 Td
-(2285 2309 2359 5054) 83.0018 Tj
--8527.14 TJm
-(6859 6950 7086 7377) 83.0018 Tj
-17.4613 -161.3867 Td
-(5057 5179 5202 5223) 83.0018 Tj
--6520.6 TJm
-(pipe 5161) 39.3166 Tj
-0 -170.8801 Td
-(panic 6401 7032) 65.5277 Tj
--12540.3 TJm
-(0204 0288 0289 0290) 83.0018 Tj
-17.4613 -180.3735 Td
-(0219 1377 1405 1469) 83.0018 Tj
--8527.14 TJm
-(3255 4469 4509 4529) 83.0018 Tj
-17.4613 -189.8668 Td
-(1471 1958 1960 1962) 83.0018 Tj
--8527.14 TJm
-(5161 5173 5179 5185) 83.0018 Tj
-17.4613 -199.3602 Td
-(1964 2006 2009 2110) 83.0018 Tj
--8527.14 TJm
-(5189 5193 5211 5230) 83.0018 Tj
-17.4613 -208.8535 Td
-(2140 2310 2321 2360) 83.0018 Tj
--8527.14 TJm
-(5251 6763 6952 6953) 83.0018 Tj
-17.4613 -218.3469 Td
-(2655 3378 3459 3461) 83.0018 Tj
--6520.6 TJm
-(pipealloc 5171) 61.1592 Tj
-17.4613 -227.8403 Td
-(3463 3596 3617 3627) 83.0018 Tj
--8527.14 TJm
-(0287 4984 5171) 61.1592 Tj
-17.4613 -237.3336 Td
-(3725 3743 3822 3873) 83.0018 Tj
--6520.6 TJm
-(pipeclose 5211) 61.1592 Tj
-17.4613 -246.827 Td
-(3908 3928 3937 3958) 83.0018 Tj
--8527.14 TJm
-(0288 4469 5211) 61.1592 Tj
-17.4613 -256.3203 Td
-(4036 4219 4267 4275) 83.0018 Tj
--6520.6 TJm
-(pipecmd 6884 7080) 74.2647 Tj
-17.4613 -265.8137 Td
-(4443 4458 4517 4537) 83.0018 Tj
--8527.14 TJm
-(6884 6912 6951 7080) 83.0018 Tj
-17.4613 -275.3071 Td
-(4709 4777 4786 4821) 83.0018 Tj
--8527.14 TJm
-(7082 7258 7358 7378) 83.0018 Tj
-17.4613 -284.8004 Td
-(4834 4838 5620 5640) 83.0018 Tj
--6520.6 TJm
-(piperead 5251) 56.7907 Tj
-17.4613 -294.2938 Td
-(6401 6408 6901 6920) 83.0018 Tj
--8527.14 TJm
-(0289 4509 5251) 61.1592 Tj
-17.4613 -303.7871 Td
-(6953 7032 7045 7228) 83.0018 Tj
--6520.6 TJm
-(PIPESIZE 5159) 56.7907 Tj
-17.4613 -313.2805 Td
-(7272 7306 7310 7336) 83.0018 Tj
--8527.14 TJm
-(5159 5163 5236 5244) 83.0018 Tj
-17.4613 -322.7739 Td
-(7341) 17.4741 Tj
--16052.1 TJm
-(5266) 17.4741 Tj
-0 -332.2668 Td
-(panicked 6317) 56.7907 Tj
--11537.1 TJm
-(pipewrite 5230) 61.1592 Tj
-17.4613 -341.7602 Td
-(6317 6414 6489) 61.1592 Tj
--11035.5 TJm
-(0290 4529 5230) 61.1592 Tj
-0 -351.2536 Td
-(parseblock 7301) 65.5277 Tj
--10533.8 TJm
-(popcli 1466) 48.0537 Tj
-17.4613 -360.7469 Td
-(7301 7306 7325) 61.1592 Tj
--11035.5 TJm
-(0327 1421 1466 1469) 83.0018 Tj
-0 -370.2403 Td
-(parsecmd 7218) 56.7907 Tj
--13543.7 TJm
-(1471 1731) 39.3166 Tj
-17.4613 -379.7336 Td
-(6902 7025 7218) 61.1592 Tj
--9028.94 TJm
-(printint 6325) 56.7907 Tj
-0 -389.227 Td
-(parseexec 7317) 61.1592 Tj
--13042 TJm
-(6325 6374 6378) 61.1592 Tj
-17.4613 -398.7204 Td
-(7214 7255 7317) 61.1592 Tj
--9028.94 TJm
-(proc 1529) 39.3166 Tj
-0 -408.2137 Td
-(parseline 7235) 61.1592 Tj
--13042 TJm
-(0205 0301 0342 0343) 83.0018 Tj
-17.4613 -417.7071 Td
-(7212 7224 7235 7246) 83.0018 Tj
--8527.14 TJm
-(1204 1357 1529 1535) 83.0018 Tj
-17.4613 -427.2004 Td
-(7308) 17.4741 Tj
--16052.1 TJm
-(1568 1583 1605 1610) 83.0018 Tj
-0 -436.6938 Td
-(parsepipe 7251) 61.1592 Tj
--13042 TJm
-(1613 1665 1669 1716) 83.0018 Tj
-17.4613 -446.1872 Td
-(7213 7239 7251 7258) 83.0018 Tj
--8527.14 TJm
-(1724 1725 1729 1753) 83.0018 Tj
-0 -455.6805 Td
-(parseredirs 7264) 69.8962 Tj
--12038.7 TJm
-(1756 1760 1804 1838) 83.0018 Tj
-17.4613 -465.1739 Td
-(7264 7312 7331 7342) 83.0018 Tj
--8527.14 TJm
-(1841 1842 1843 1844) 83.0018 Tj
-0 -474.6668 Td
-(PCINT 5678) 43.6851 Tj
--15048.7 TJm
-(1845 1857 1864 1871) 83.0018 Tj
-17.4613 -484.1602 Td
-(5678 5724) 39.3166 Tj
--13543.8 TJm
-(1872 1873 1879 1880) 83.0018 Tj
-0 -493.6536 Td
-(peek 7201) 39.3166 Tj
--15550.3 TJm
-(1881 1910 1918 1925) 83.0018 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 6 6
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  cross-references  Page 9) 187.8461 Tj
-17.4613 -28.4801 Td
-(1928 1932 1961 1967) 83.0018 Tj
--8527.14 TJm
-(5862 5917 5918 5931) 83.0018 Tj
-17.4613 -37.9735 Td
-(1976 2005 2023 2024) 83.0018 Tj
--8527.14 TJm
-(5932) 17.4741 Tj
-17.4613 -47.4668 Td
-(2028 2055 2057 2077) 83.0018 Tj
--6520.6 TJm
-(REG_VER 5861) 52.4222 Tj
-17.4613 -56.9602 Td
-(2080 2106 2109 2114) 83.0018 Tj
--8527.14 TJm
-(5861 5909) 39.3166 Tj
-17.4613 -66.4535 Td
-(2115 2116 2120 2121) 83.0018 Tj
--6520.6 TJm
-(release 1402) 52.4222 Tj
-17.4613 -75.9469 Td
-(2126 2129 2130 2138) 83.0018 Tj
--8527.14 TJm
-(0325 1402 1405 1763) 83.0018 Tj
-17.4613 -85.4403 Td
-(2155 2162 2163 2182) 83.0018 Tj
--8527.14 TJm
-(1769 1934 1978 1987) 83.0018 Tj
-17.4613 -94.9336 Td
-(2188 2554 2604 2606) 83.0018 Tj
--8527.14 TJm
-(2019 2032 2068 2086) 83.0018 Tj
-17.4613 -104.427 Td
-(2608 2651 2658 2659) 83.0018 Tj
--8527.14 TJm
-(2090 2176 2183 2343) 83.0018 Tj
-17.4613 -113.9203 Td
-(2660 2666 2671 2675) 83.0018 Tj
--8527.14 TJm
-(2369 2373 2619 2975) 83.0018 Tj
-17.4613 -123.4137 Td
-(2754 2766 2778 2796) 83.0018 Tj
--8527.14 TJm
-(2980 3409 3428 3482) 83.0018 Tj
-17.4613 -132.9071 Td
-(2810 2812 2826 2878) 83.0018 Tj
--8527.14 TJm
-(3578 3592 3641 3864) 83.0018 Tj
-17.4613 -142.4004 Td
-(2880 2883 2884 2905) 83.0018 Tj
--8527.14 TJm
-(3880 3892 3914 3942) 83.0018 Tj
-17.4613 -151.8938 Td
-(2939 2958 2974 3306) 83.0018 Tj
--8527.14 TJm
-(3960 3969 4429 4433) 83.0018 Tj
-17.4613 -161.3871 Td
-(3667 4361 4555 4570) 83.0018 Tj
--8527.14 TJm
-(4445 4460 4466 5222) 83.0018 Tj
-17.4613 -170.8805 Td
-(4587 4588 4646 4943) 83.0018 Tj
--8527.14 TJm
-(5225 5238 5247 5258) 83.0018 Tj
-17.4613 -180.3739 Td
-(4944 4963 4969 4989) 83.0018 Tj
--8527.14 TJm
-(5269 6398 6547 6562) 83.0018 Tj
-17.4613 -189.8672 Td
-(5003 5104 5107 5108) 83.0018 Tj
--8527.14 TJm
-(6582 6609) 39.3166 Tj
-17.4613 -199.3606 Td
-(5109 5110 5111 5154) 83.0018 Tj
--6520.6 TJm
-(ROOTDEV 0159) 52.4222 Tj
-17.4613 -208.8539 Td
-(5237 5257 5510 5606) 83.0018 Tj
--8527.14 TJm
-(0159 4359) 39.3166 Tj
-17.4613 -218.3473 Td
-(5617 5618 5619 5622) 83.0018 Tj
--6520.6 TJm
-(ROOTINO 3157) 52.4222 Tj
-17.4613 -227.8407 Td
-(6312 6561) 39.3166 Tj
--13543.8 TJm
-(3157 4359) 39.3166 Tj
-0 -237.334 Td
-(procdump 1654) 56.7907 Tj
--11537.1 TJm
-(run 2262) 34.9481 Tj
-17.4613 -246.8274 Td
-(0307 1654 6520) 61.1592 Tj
--11035.5 TJm
-(1661 2262 2263 2269) 83.0018 Tj
-0 -256.3207 Td
-(proghdr 0874) 52.4222 Tj
--14045.3 TJm
-(2307 2316 2317 2319) 83.0018 Tj
-17.4613 -265.8141 Td
-(0874 1119 1133 5016) 83.0018 Tj
--8527.14 TJm
-(2357) 17.4741 Tj
-0 -275.3075 Td
-(pushcli 1455) 52.4222 Tj
--12038.8 TJm
-(runcmd 6906) 48.0537 Tj
-17.4613 -284.8008 Td
-(0326 1375 1455 1723) 83.0018 Tj
--8527.14 TJm
-(6906 6920 6937 6943) 83.0018 Tj
-0 -294.2942 Td
-(readeflags 0485) 65.5277 Tj
--12540.3 TJm
-(6945 6959 6966 6977) 83.0018 Tj
-17.4613 -303.7875 Td
-(0485 1459 1468 1963) 83.0018 Tj
--8527.14 TJm
-(7025) 17.4741 Tj
-17.4613 -313.2809 Td
-(5758) 17.4741 Tj
--14045.6 TJm
-(RUNNING 1526) 52.4222 Tj
-0 -322.7743 Td
-(readi 4102) 43.6851 Tj
--15048.7 TJm
-(1526 1661 1927 1961) 83.0018 Tj
-17.4613 -332.2672 Td
-(0247 4102 4266 4512) 83.0018 Tj
--8527.14 TJm
-(2671) 17.4741 Tj
-17.4613 -341.7606 Td
-(4708 4709 5026 5034) 83.0018 Tj
--6520.6 TJm
-(safestrcpy 5375) 65.5277 Tj
-17.4613 -351.2539 Td
-(5065 5073) 39.3166 Tj
--13543.8 TJm
-(0333 1825 5104 5375) 83.0018 Tj
-0 -360.7473 Td
-(readsb 3678) 48.0537 Tj
--12540.5 TJm
-(sched 1953) 43.6851 Tj
-17.4613 -370.2407 Td
-(3678 3711 3738 3809) 83.0018 Tj
--8527.14 TJm
-(1953 1958 1960 1962) 83.0018 Tj
-0 -379.734 Td
-(readsect 1160) 56.7907 Tj
--13543.7 TJm
-(1964 1977 2025 2139) 83.0018 Tj
-17.4613 -389.2274 Td
-(1160 1195) 39.3166 Tj
--11537.3 TJm
-(scheduler 1908) 61.1592 Tj
-0 -398.7207 Td
-(readseg 1179) 52.4222 Tj
--14045.3 TJm
-(0308 1263 1559 1908) 83.0018 Tj
-17.4613 -408.2141 Td
-(1113 1126 1137 1179) 83.0018 Tj
--8527.14 TJm
-(1928 1967) 39.3166 Tj
-0 -417.7075 Td
-(REDIR 6858) 43.6851 Tj
--13042.1 TJm
-(SCROLLLOCK 6114) 65.5277 Tj
-17.4613 -427.2008 Td
-(6858 6930 7070 7371) 83.0018 Tj
--8527.14 TJm
-(6114 6147) 39.3166 Tj
-0 -436.6942 Td
-(redircmd 6875 7064) 78.6333 Tj
--9028.81 TJm
-(SECTSIZE 1111) 56.7907 Tj
-17.4613 -446.1875 Td
-(6875 6913 6931 7064) 83.0018 Tj
--8527.14 TJm
-(1111 1173 1186 1189) 83.0018 Tj
-17.4613 -455.6809 Td
-(7066 7275 7278 7281) 83.0018 Tj
--8527.14 TJm
-(1194) 17.4741 Tj
-17.4613 -465.1743 Td
-(7359 7372) 39.3166 Tj
--11537.3 TJm
-(SEG 0701) 34.9481 Tj
-0 -474.6672 Td
-(REG_ID 5860) 48.0537 Tj
--14547 TJm
-(0701 1708 1709 1710) 83.0018 Tj
-17.4613 -484.1606 Td
-(5860 5910) 39.3166 Tj
--13543.8 TJm
-(1724 1725) 39.3166 Tj
-0 -493.654 Td
-(REG_TABLE 5862) 61.1592 Tj
--11035.5 TJm
-(SEG16 0706) 43.6851 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  cross-references  Page 10) 192.2146 Tj
-17.4613 -28.4801 Td
-(0706 1726) 39.3166 Tj
--13543.8 TJm
-(3665 4085 4476 4553) 83.0018 Tj
-0 -37.9735 Td
-(segdesc 0677) 52.4222 Tj
--14045.3 TJm
-(4654 6803) 39.3166 Tj
-17.4613 -47.4664 Td
-(0450 0453 0677 0701) 83.0018 Tj
--6520.6 TJm
-(stati 4085) 43.6851 Tj
-17.4613 -56.9598 Td
-(0706 1561) 39.3166 Tj
--13543.8 TJm
-(0248 4085 4480) 61.1592 Tj
-0 -66.4531 Td
-(SEG_ASM 0608) 52.4222 Tj
--12038.8 TJm
-(STA_R 0617 0718) 65.5277 Tj
-17.4613 -75.9465 Td
-(0608 0992 0993 1092) 83.0018 Tj
--8527.14 TJm
-(0617 0718 0992 1092) 83.0018 Tj
-17.4613 -85.4399 Td
-(1093) 17.4741 Tj
--16052.1 TJm
-(1708 1724) 39.3166 Tj
-0 -94.9332 Td
-(SEG_KCODE 0907 1021 1502 2500) 126.6869 Tj
--3510.47 TJm
-(STA_W 0616 0717) 65.5277 Tj
-17.4613 -104.4266 Td
-(0961 1061 1502 1708) 83.0018 Tj
--8527.14 TJm
-(0616 0717 0993 1093) 83.0018 Tj
-17.4613 -113.9199 Td
-(2571 2572) 39.3166 Tj
--13543.8 TJm
-(1709 1710 1725) 61.1592 Tj
-0 -123.4133 Td
-(SEG_KCPU 1504 2502) 78.6333 Tj
--9028.81 TJm
-(STA_X 0613 0714) 65.5277 Tj
-17.4613 -132.9067 Td
-(1504 1710 1712 2518) 83.0018 Tj
--8527.14 TJm
-(0613 0714 0992 1092) 83.0018 Tj
-0 -142.4 Td
-(SEG_KDATA 0908 1022 1503 2501) 126.6869 Tj
--5517.01 TJm
-(1708 1724) 39.3166 Tj
-17.4613 -151.8934 Td
-(0966 1066 1503 1709) 83.0018 Tj
--6520.6 TJm
-(sti 0526) 34.9481 Tj
-17.4613 -161.3867 Td
-(1728 2515) 39.3166 Tj
--13543.8 TJm
-(0526 0528 1473 1914) 83.0018 Tj
-0 -170.8801 Td
-(SEG_NULLASM 0604) 69.8962 Tj
--10032.1 TJm
-(stosb 0442) 43.6851 Tj
-17.4613 -180.3735 Td
-(0604 0991 1091) 61.1592 Tj
--11035.5 TJm
-(0442 0444 1139 5306) 83.0018 Tj
-0 -189.8664 Td
-(SEG_TSS 1507) 52.4222 Tj
--12038.8 TJm
-(strlen 5389) 48.0537 Tj
-17.4613 -199.3598 Td
-(1507 1726 1727 1730) 83.0018 Tj
--8527.14 TJm
-(0334 5046 5086 5389) 83.0018 Tj
-0 -208.8532 Td
-(SEG_UCODE 1505) 61.1592 Tj
--13042 TJm
-(7019 7223) 39.3166 Tj
-17.4613 -218.3465 Td
-(1505 1724 1817) 61.1592 Tj
--9028.94 TJm
-(strncmp 5351) 52.4222 Tj
-0 -227.8399 Td
-(SEG_UDATA 1506) 61.1592 Tj
--13042 TJm
-(0335 4205 5351) 61.1592 Tj
-17.4613 -237.3332 Td
-(1506 1725 1818) 61.1592 Tj
--9028.94 TJm
-(strncpy 5361) 52.4222 Tj
-0 -246.8266 Td
-(SETGATE 0821) 52.4222 Tj
--14045.3 TJm
-(0336 4272 5361) 61.1592 Tj
-17.4613 -256.32 Td
-(0821 2571 2572) 61.1592 Tj
--9028.94 TJm
-(STS_IG32 0732) 56.7907 Tj
-0 -265.8133 Td
-(SHIFT 6108) 43.6851 Tj
--15048.7 TJm
-(0732 0827) 39.3166 Tj
-17.4613 -275.3067 Td
-(6108 6136 6137 6285) 83.0018 Tj
--6520.6 TJm
-(STS_T32A 0729) 56.7907 Tj
-0 -284.8 Td
-(skipelem 4315) 56.7907 Tj
--13543.7 TJm
-(0729 1726) 39.3166 Tj
-17.4613 -294.2934 Td
-(4315 4363) 39.3166 Tj
--11537.3 TJm
-(STS_TG32 0733) 56.7907 Tj
-0 -303.7868 Td
-(sleep 2003) 43.6851 Tj
--15048.7 TJm
-(0733 0827) 39.3166 Tj
-17.4613 -313.2801 Td
-(0311 1659 2003 2006) 83.0018 Tj
--6520.6 TJm
-(sum 5525) 34.9481 Tj
-17.4613 -322.7735 Td
-(2009 2188 2978 3480) 83.0018 Tj
--8527.14 TJm
-(5525 5527 5529 5531) 83.0018 Tj
-17.4613 -332.2668 Td
-(3581 3912 5242 5261) 83.0018 Tj
--8527.14 TJm
-(5532 5543 5592) 61.1592 Tj
-17.4613 -341.7602 Td
-(6566 6779) 39.3166 Tj
--11537.3 TJm
-(superblock 3161) 65.5277 Tj
-0 -351.2536 Td
-(spinlock 1301) 56.7907 Tj
--13543.7 TJm
-(3161 3678 3708 3733) 83.0018 Tj
-17.4613 -360.7469 Td
-(0206 0311 0321 0323) 83.0018 Tj
--8527.14 TJm
-(3807) 17.4741 Tj
-17.4613 -370.2403 Td
-(0324 0325 0354 1301) 83.0018 Tj
--6520.6 TJm
-(SVR 5664) 34.9481 Tj
-17.4613 -379.7336 Td
-(1358 1361 1373 1402) 83.0018 Tj
--8527.14 TJm
-(5664 5707) 39.3166 Tj
-17.4613 -389.227 Td
-(1444 1606 1609 2003) 83.0018 Tj
--6520.6 TJm
-(swtch 2208) 43.6851 Tj
-17.4613 -398.7204 Td
-(2260 2268 2557 2562) 83.0018 Tj
--8527.14 TJm
-(0318 1928 1967 2207) 83.0018 Tj
-17.4613 -408.2137 Td
-(3309 3324 3526 3530) 83.0018 Tj
--8527.14 TJm
-(2208) 17.4741 Tj
-17.4613 -417.7071 Td
-(3668 3784 4405 4409) 83.0018 Tj
--6520.6 TJm
-(SYSCALL 6753 6760 6761 6762 6763 67) 152.898 Tj
-17.4613 -427.2004 Td
-(5157 5162 6308 6320) 83.0018 Tj
--8527.14 TJm
-(6760 6761 6762 6763) 83.0018 Tj
-17.4613 -436.6938 Td
-(6502) 17.4741 Tj
--16052.1 TJm
-(6764 6765 6766 6767) 83.0018 Tj
-0 -446.1872 Td
-(start 0914 1028 6707) 87.3703 Tj
--10032 TJm
-(6768 6769 6770 6771) 83.0018 Tj
-17.4613 -455.6805 Td
-(0913 0914 0975 1027) 83.0018 Tj
--8527.14 TJm
-(6772 6773 6774 6775) 83.0018 Tj
-17.4613 -465.1739 Td
-(1028 1075 1076 6706) 83.0018 Tj
--8527.14 TJm
-(6776 6777 6778 6779) 83.0018 Tj
-17.4613 -474.6672 Td
-(6707) 17.4741 Tj
--14045.6 TJm
-(syscall 2874) 52.4222 Tj
-0 -484.1606 Td
-(stat 3104) 39.3166 Tj
--15550.3 TJm
-(0344 2607 2756 2874) 83.0018 Tj
-17.4613 -493.654 Td
-(0207 0230 0248 3104) 83.0018 Tj
--6520.6 TJm
-(SYS_chdir 2716) 61.1592 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 7 7
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  cross-references  Page 11) 192.2146 Tj
-17.4613 -28.4801 Td
-(2716 2851) 39.3166 Tj
--13543.8 TJm
-(2841 2863 4851) 61.1592 Tj
-0 -37.9735 Td
-(sys_chdir 4930) 61.1592 Tj
--11035.5 TJm
-(SYS_pipe 2704) 56.7907 Tj
-17.4613 -47.4664 Td
-(2829 2851 4930) 61.1592 Tj
--11035.5 TJm
-(2704 2864) 39.3166 Tj
-0 -56.9598 Td
-(SYS_close 2707) 61.1592 Tj
--11035.5 TJm
-(sys_pipe 4976) 56.7907 Tj
-17.4613 -66.4531 Td
-(2707 2852) 39.3166 Tj
--13543.8 TJm
-(2842 2864 4976) 61.1592 Tj
-0 -75.9465 Td
-(sys_close 4639) 61.1592 Tj
--11035.5 TJm
-(SYS_read 2706) 56.7907 Tj
-17.4613 -85.4399 Td
-(2830 2852 4639) 61.1592 Tj
--11035.5 TJm
-(2706 2865) 39.3166 Tj
-0 -94.9332 Td
-(SYS_dup 2717) 52.4222 Tj
--12038.8 TJm
-(sys_read 4615) 56.7907 Tj
-17.4613 -104.4266 Td
-(2717 2853) 39.3166 Tj
--13543.8 TJm
-(2843 2865 4615) 61.1592 Tj
-0 -113.9199 Td
-(sys_dup 4601) 52.4222 Tj
--12038.8 TJm
-(SYS_sbrk 2719) 56.7907 Tj
-17.4613 -123.4133 Td
-(2831 2853 4601) 61.1592 Tj
--11035.5 TJm
-(2719 2866) 39.3166 Tj
-0 -132.9067 Td
-(SYS_exec 2709) 56.7907 Tj
--11537.1 TJm
-(sys_sbrk 2951) 56.7907 Tj
-17.4613 -142.4 Td
-(2709 2854 6711) 61.1592 Tj
--11035.5 TJm
-(2844 2866 2951) 61.1592 Tj
-0 -151.8934 Td
-(sys_exec 4951) 56.7907 Tj
--11537.1 TJm
-(SYS_sleep 2720) 61.1592 Tj
-17.4613 -161.3867 Td
-(2832 2854 4951) 61.1592 Tj
--11035.5 TJm
-(2720 2867) 39.3166 Tj
-0 -170.8801 Td
-(SYS_exit 2702) 56.7907 Tj
--11537.1 TJm
-(sys_sleep 2965) 61.1592 Tj
-17.4613 -180.3735 Td
-(2702 2855 6716) 61.1592 Tj
--11035.5 TJm
-(2845 2867 2965) 61.1592 Tj
-0 -189.8664 Td
-(sys_exit 2914) 56.7907 Tj
--11537.1 TJm
-(SYS_unlink 2712) 65.5277 Tj
-17.4613 -199.3598 Td
-(2833 2855 2914) 61.1592 Tj
--11035.5 TJm
-(2712 2868) 39.3166 Tj
-0 -208.8532 Td
-(SYS_fork 2701) 56.7907 Tj
--11537.1 TJm
-(sys_unlink 4751) 65.5277 Tj
-17.4613 -218.3465 Td
-(2701 2856) 39.3166 Tj
--13543.8 TJm
-(2846 2868 4751) 61.1592 Tj
-0 -227.8399 Td
-(sys_fork 2908) 56.7907 Tj
--11537.1 TJm
-(SYS_wait 2703) 56.7907 Tj
-17.4613 -237.3332 Td
-(2834 2856 2908) 61.1592 Tj
--11035.5 TJm
-(2703 2869) 39.3166 Tj
-0 -246.8266 Td
-(SYS_fstat 2713) 61.1592 Tj
--11035.5 TJm
-(sys_wait 2921) 56.7907 Tj
-17.4613 -256.32 Td
-(2713 2857) 39.3166 Tj
--13543.8 TJm
-(2847 2869 2921) 61.1592 Tj
-0 -265.8133 Td
-(sys_fstat 4651) 61.1592 Tj
--11035.5 TJm
-(SYS_write 2705) 61.1592 Tj
-17.4613 -275.3067 Td
-(2835 2857 4651) 61.1592 Tj
--11035.5 TJm
-(2705 2870) 39.3166 Tj
-0 -284.8 Td
-(SYS_getpid 2718) 65.5277 Tj
--10533.8 TJm
-(sys_write 4627) 61.1592 Tj
-17.4613 -294.2934 Td
-(2718 2858) 39.3166 Tj
--13543.8 TJm
-(2848 2870 4627) 61.1592 Tj
-0 -303.7868 Td
-(sys_getpid 2937) 65.5277 Tj
--10533.8 TJm
-(taskstate 0751) 61.1592 Tj
-17.4613 -313.2801 Td
-(2836 2858 2937) 61.1592 Tj
--11035.5 TJm
-(0751 1560) 39.3166 Tj
-0 -322.7735 Td
-(SYS_kill 2708) 56.7907 Tj
--11537.1 TJm
-(TDCR 5685) 39.3166 Tj
-17.4613 -332.2664 Td
-(2708 2859) 39.3166 Tj
--13543.8 TJm
-(5685 5713) 39.3166 Tj
-0 -341.7598 Td
-(sys_kill 2927) 56.7907 Tj
--11537.1 TJm
-(ticks 2563) 43.6851 Tj
-17.4613 -351.2532 Td
-(2837 2859 2927) 61.1592 Tj
--11035.5 TJm
-(0352 2563 2617 2618) 83.0018 Tj
-0 -360.7465 Td
-(SYS_link 2714) 56.7907 Tj
--13543.7 TJm
-(2972 2973 2978) 61.1592 Tj
-17.4613 -370.2399 Td
-(2714 2860) 39.3166 Tj
--11537.3 TJm
-(tickslock 2562) 61.1592 Tj
-0 -379.7332 Td
-(sys_link 4663) 56.7907 Tj
--13543.7 TJm
-(0354 2562 2574 2616) 83.0018 Tj
-17.4613 -389.2266 Td
-(2838 2860 4663) 61.1592 Tj
--11035.5 TJm
-(2619 2971 2975 2978) 83.0018 Tj
-0 -398.72 Td
-(SYS_mkdir 2715) 61.1592 Tj
--13042 TJm
-(2980) 17.4741 Tj
-17.4613 -408.2133 Td
-(2715 2861) 39.3166 Tj
--11537.3 TJm
-(TICR 5683) 39.3166 Tj
-0 -417.7067 Td
-(sys_mkdir 4901) 61.1592 Tj
--13042 TJm
-(5683 5715) 39.3166 Tj
-17.4613 -427.2 Td
-(2839 2861 4901) 61.1592 Tj
--9028.94 TJm
-(TIMER 5675) 43.6851 Tj
-0 -436.6934 Td
-(SYS_mknod 2711) 61.1592 Tj
--13042 TJm
-(5675 5714) 39.3166 Tj
-17.4613 -446.1868 Td
-(2711 2862) 39.3166 Tj
--11537.3 TJm
-(timerinit 6674) 61.1592 Tj
-0 -455.6801 Td
-(sys_mknod 4913) 61.1592 Tj
--13042 TJm
-(0347 1232 6674) 61.1592 Tj
-17.4613 -465.1735 Td
-(2840 2862 4913) 61.1592 Tj
--9028.94 TJm
-(TIMER_16BIT 6671) 69.8962 Tj
-0 -474.6665 Td
-(SYS_open 2710) 56.7907 Tj
--13543.7 TJm
-(6671 6677) 39.3166 Tj
-17.4613 -484.1598 Td
-(2710 2863) 39.3166 Tj
--11537.3 TJm
-(TIMER_DIV 6666) 61.1592 Tj
-0 -493.6532 Td
-(sys_open 4851) 56.7907 Tj
--13543.7 TJm
-(6666 6678 6679) 61.1592 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  cross-references  Page 12) 192.2146 Tj
-0 -28.4801 Td
-(TIMER_FREQ 6665) 65.5277 Tj
--12540.3 TJm
-(5931 5997 6016) 61.1592 Tj
-17.4613 -37.9735 Td
-(6665 6666) 39.3166 Tj
--11537.3 TJm
-(T_SYSCALL 2426) 61.1592 Tj
-0 -47.4664 Td
-(TIMER_MODE 6668) 65.5277 Tj
--12540.3 TJm
-(2426 2572 2603 6712) 83.0018 Tj
-17.4613 -56.9598 Td
-(6668 6677) 39.3166 Tj
--13543.8 TJm
-(6717 6757) 39.3166 Tj
-0 -66.4531 Td
-(TIMER_RATEGEN 6670) 78.6333 Tj
--9028.81 TJm
-(usegment 1721) 56.7907 Tj
-17.4613 -75.9465 Td
-(6670 6677) 39.3166 Tj
--13543.8 TJm
-(0310 1721 1846 1926) 83.0018 Tj
-0 -85.4399 Td
-(TIMER_SEL0 6669) 65.5277 Tj
--12540.3 TJm
-(5112) 17.4741 Tj
-17.4613 -94.9332 Td
-(6669 6677) 39.3166 Tj
--11537.3 TJm
-(userinit 1802) 56.7907 Tj
-0 -104.4266 Td
-(TPR 5662) 34.9481 Tj
--16052 TJm
-(0312 1233 1802) 61.1592 Tj
-17.4613 -113.9199 Td
-(5662 5743) 39.3166 Tj
--11537.3 TJm
-(VER 5661) 34.9481 Tj
-0 -123.4133 Td
-(trap 2601) 39.3166 Tj
--15550.3 TJm
-(5661 5723) 39.3166 Tj
-17.4613 -132.9067 Td
-(2452 2454 2524 2601) 83.0018 Tj
--6520.6 TJm
-(wait 2153) 39.3166 Tj
-17.4613 -142.4 Td
-(2653 2655 2658) 61.1592 Tj
--11035.5 TJm
-(0313 2153 2923 6762) 83.0018 Tj
-0 -151.8934 Td
-(trapframe 0552) 61.1592 Tj
--13042 TJm
-(6833 6944 6970 6971) 83.0018 Tj
-17.4613 -161.3867 Td
-(0552 1536 1780 2601) 83.0018 Tj
--8527.14 TJm
-(7026) 17.4741 Tj
-0 -170.8801 Td
-(trapret 2529) 52.4222 Tj
--12038.8 TJm
-(waitdisk 1151) 56.7907 Tj
-17.4613 -180.3735 Td
-(1617 1785 2528 2529) 83.0018 Tj
--8527.14 TJm
-(1151 1163 1172) 61.1592 Tj
-0 -189.8664 Td
-(tvinit 2566) 48.0537 Tj
--12540.5 TJm
-(wakeup 2064) 48.0537 Tj
-17.4613 -199.3598 Td
-(0353 1226 2566) 61.1592 Tj
--11035.5 TJm
-(0314 2064 2618 3422) 83.0018 Tj
-0 -208.8532 Td
-(T_DEV 3102) 43.6851 Tj
--15048.7 TJm
-(3639 3941 3966 5216) 83.0018 Tj
-17.4613 -218.3465 Td
-(3102 4107 4157 4923) 83.0018 Tj
--8527.14 TJm
-(5219 5241 5246 5268) 83.0018 Tj
-0 -227.8399 Td
-(T_DIR 3100) 43.6851 Tj
--15048.7 TJm
-(6541) 17.4741 Tj
-17.4613 -237.3332 Td
-(3100 4218 4365 4673) 83.0018 Tj
--6520.6 TJm
-(wakeup1 2053) 52.4222 Tj
-17.4613 -246.8266 Td
-(4778 4787 4829 4868) 83.0018 Tj
--8527.14 TJm
-(2053 2067 2126 2133) 83.0018 Tj
-17.4613 -256.32 Td
-(4906 4938) 39.3166 Tj
--11537.3 TJm
-(writei 4152) 48.0537 Tj
-0 -265.8133 Td
-(T_FILE 3101) 48.0537 Tj
--14547 TJm
-(0249 4152 4274 4532) 83.0018 Tj
-17.4613 -275.3067 Td
-(3101 4814 4862) 61.1592 Tj
--11035.5 TJm
-(4785 4786) 39.3166 Tj
-0 -284.8 Td
-(T_IRQ0 2429) 48.0537 Tj
--12540.5 TJm
-(xchg 0501) 39.3166 Tj
-17.4613 -294.2934 Td
-(2429 2614 2623 2627) 83.0018 Tj
--8527.14 TJm
-(0501 1260 1382 1419) 83.0018 Tj
-17.4613 -303.7868 Td
-(2631 2635 2636 2671) 83.0018 Tj
--6520.6 TJm
-(yield 1973) 43.6851 Tj
-17.4613 -313.2801 Td
-(5707 5714 5727 5917) 83.0018 Tj
--8527.14 TJm
-(0315 1973 2672) 61.1592 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 8 8
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/types.h  Page 1) 166.0035 Tj
-0 -28.4801 Td
-(0100 typedef unsigned int   uint;) 144.161 Tj
-0 -37.9735 Td
-(0101 typedef unsigned short ushort;) 152.898 Tj
-0 -47.4668 Td
-(0102 typedef unsigned char  uchar;) 148.5295 Tj
-0 -56.9602 Td
-(0103 ) 21.8426 Tj
-0 -66.4535 Td
-(0104 ) 21.8426 Tj
-0 -75.9469 Td
-(0105 ) 21.8426 Tj
-0 -85.4403 Td
-(0106 ) 21.8426 Tj
-0 -94.9336 Td
-(0107 ) 21.8426 Tj
-0 -104.427 Td
-(0108 ) 21.8426 Tj
-0 -113.9203 Td
-(0109 ) 21.8426 Tj
-0 -123.4137 Td
-(0110 ) 21.8426 Tj
-0 -132.9071 Td
-(0111 ) 21.8426 Tj
-0 -142.4004 Td
-(0112 ) 21.8426 Tj
-0 -151.8938 Td
-(0113 ) 21.8426 Tj
-0 -161.3871 Td
-(0114 ) 21.8426 Tj
-0 -170.8805 Td
-(0115 ) 21.8426 Tj
-0 -180.3739 Td
-(0116 ) 21.8426 Tj
-0 -189.8672 Td
-(0117 ) 21.8426 Tj
-0 -199.3606 Td
-(0118 ) 21.8426 Tj
-0 -208.8539 Td
-(0119 ) 21.8426 Tj
-0 -218.3473 Td
-(0120 ) 21.8426 Tj
-0 -227.8407 Td
-(0121 ) 21.8426 Tj
-0 -237.334 Td
-(0122 ) 21.8426 Tj
-0 -246.8274 Td
-(0123 ) 21.8426 Tj
-0 -256.3207 Td
-(0124 ) 21.8426 Tj
-0 -265.8141 Td
-(0125 ) 21.8426 Tj
-0 -275.3075 Td
-(0126 ) 21.8426 Tj
-0 -284.8008 Td
-(0127 ) 21.8426 Tj
-0 -294.2942 Td
-(0128 ) 21.8426 Tj
-0 -303.7875 Td
-(0129 ) 21.8426 Tj
-0 -313.2809 Td
-(0130 ) 21.8426 Tj
-0 -322.7743 Td
-(0131 ) 21.8426 Tj
-0 -332.2676 Td
-(0132 ) 21.8426 Tj
-0 -341.761 Td
-(0133 ) 21.8426 Tj
-0 -351.2543 Td
-(0134 ) 21.8426 Tj
-0 -360.7477 Td
-(0135 ) 21.8426 Tj
-0 -370.2411 Td
-(0136 ) 21.8426 Tj
-0 -379.7344 Td
-(0137 ) 21.8426 Tj
-0 -389.2278 Td
-(0138 ) 21.8426 Tj
-0 -398.7211 Td
-(0139 ) 21.8426 Tj
-0 -408.2145 Td
-(0140 ) 21.8426 Tj
-0 -417.7079 Td
-(0141 ) 21.8426 Tj
-0 -427.2012 Td
-(0142 ) 21.8426 Tj
-0 -436.6946 Td
-(0143 ) 21.8426 Tj
-0 -446.1879 Td
-(0144 ) 21.8426 Tj
-0 -455.6813 Td
-(0145 ) 21.8426 Tj
-0 -465.1747 Td
-(0146 ) 21.8426 Tj
-0 -474.668 Td
-(0147 ) 21.8426 Tj
-0 -484.1614 Td
-(0148 ) 21.8426 Tj
-0 -493.6547 Td
-(0149 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 01) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/param.h  Page 1) 166.0035 Tj
-0 -28.4801 Td
-(0150 #define NPROC        64  // maximum number of processes) 262.1109 Tj
-0 -37.9735 Td
-(0151 #define PAGE       4096  // granularity of user-space memo\
-ry allocation) 332.0071 Tj
-0 -47.4668 Td
-(0152 #define KSTACKSIZE PAGE  // size of per-process kernel sta\
-ck) 283.9534 Tj
-0 -56.9602 Td
-(0153 #define NCPU          8  // maximum number of CPUs) 240.2683 Tj
-0 -66.4535 Td
-(0154 #define NOFILE       16  // open files per process) 240.2683 Tj
-0 -75.9469 Td
-(0155 #define NFILE       100  // open files per system) 235.8998 Tj
-0 -85.4403 Td
-(0156 #define NBUF         10  // size of disk block cache) 249.0053 Tj
-0 -94.9336 Td
-(0157 #define NINODE       50  // maximum number of active i-nod\
-es) 283.9534 Tj
-0 -104.427 Td
-(0158 #define NDEV         10  // maximum major device number) 262.1109 Tj
-0 -113.9203 Td
-(0159 #define ROOTDEV       1  // device number of file system r\
-oot disk) 310.1645 Tj
-0 -123.4137 Td
-(0160 ) 21.8426 Tj
-0 -132.9071 Td
-(0161 ) 21.8426 Tj
-0 -142.4004 Td
-(0162 ) 21.8426 Tj
-0 -151.8938 Td
-(0163 ) 21.8426 Tj
-0 -161.3871 Td
-(0164 ) 21.8426 Tj
-0 -170.8805 Td
-(0165 ) 21.8426 Tj
-0 -180.3739 Td
-(0166 ) 21.8426 Tj
-0 -189.8672 Td
-(0167 ) 21.8426 Tj
-0 -199.3606 Td
-(0168 ) 21.8426 Tj
-0 -208.8539 Td
-(0169 ) 21.8426 Tj
-0 -218.3473 Td
-(0170 ) 21.8426 Tj
-0 -227.8407 Td
-(0171 ) 21.8426 Tj
-0 -237.334 Td
-(0172 ) 21.8426 Tj
-0 -246.8274 Td
-(0173 ) 21.8426 Tj
-0 -256.3207 Td
-(0174 ) 21.8426 Tj
-0 -265.8141 Td
-(0175 ) 21.8426 Tj
-0 -275.3075 Td
-(0176 ) 21.8426 Tj
-0 -284.8008 Td
-(0177 ) 21.8426 Tj
-0 -294.2942 Td
-(0178 ) 21.8426 Tj
-0 -303.7875 Td
-(0179 ) 21.8426 Tj
-0 -313.2809 Td
-(0180 ) 21.8426 Tj
-0 -322.7743 Td
-(0181 ) 21.8426 Tj
-0 -332.2676 Td
-(0182 ) 21.8426 Tj
-0 -341.761 Td
-(0183 ) 21.8426 Tj
-0 -351.2543 Td
-(0184 ) 21.8426 Tj
-0 -360.7477 Td
-(0185 ) 21.8426 Tj
-0 -370.2411 Td
-(0186 ) 21.8426 Tj
-0 -379.7344 Td
-(0187 ) 21.8426 Tj
-0 -389.2278 Td
-(0188 ) 21.8426 Tj
-0 -398.7211 Td
-(0189 ) 21.8426 Tj
-0 -408.2145 Td
-(0190 ) 21.8426 Tj
-0 -417.7079 Td
-(0191 ) 21.8426 Tj
-0 -427.2012 Td
-(0192 ) 21.8426 Tj
-0 -436.6946 Td
-(0193 ) 21.8426 Tj
-0 -446.1879 Td
-(0194 ) 21.8426 Tj
-0 -455.6813 Td
-(0195 ) 21.8426 Tj
-0 -465.1747 Td
-(0196 ) 21.8426 Tj
-0 -474.668 Td
-(0197 ) 21.8426 Tj
-0 -484.1614 Td
-(0198 ) 21.8426 Tj
-0 -493.6547 Td
-(0199 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 01) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 9 9
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/defs.h  Page 1) 161.635 Tj
-0 -28.4801 Td
-(0200 struct buf;) 69.8962 Tj
-0 -37.9735 Td
-(0201 struct context;) 87.3703 Tj
-0 -47.4668 Td
-(0202 struct file;) 74.2647 Tj
-0 -56.9602 Td
-(0203 struct inode;) 78.6333 Tj
-0 -66.4535 Td
-(0204 struct pipe;) 74.2647 Tj
-0 -75.9469 Td
-(0205 struct proc;) 74.2647 Tj
-0 -85.4403 Td
-(0206 struct spinlock;) 91.7388 Tj
-0 -94.9336 Td
-(0207 struct stat;) 74.2647 Tj
-0 -104.427 Td
-(0208 ) 21.8426 Tj
-0 -113.9203 Td
-(0209 // bio.c) 56.7907 Tj
-0 -123.4137 Td
-(0210 void            binit\(void\);) 144.161 Tj
-0 -132.9071 Td
-(0211 struct buf*     bread\(uint, uint\);) 170.3721 Tj
-0 -142.4004 Td
-(0212 void            brelse\(struct buf*\);) 179.1091 Tj
-0 -151.8938 Td
-(0213 void            bwrite\(struct buf*\);) 179.1091 Tj
-0 -161.3871 Td
-(0214 ) 21.8426 Tj
-0 -170.8805 Td
-(0215 // console.c) 74.2647 Tj
-0 -180.3739 Td
-(0216 void            consoleinit\(void\);) 170.3721 Tj
-0 -189.8672 Td
-(0217 void            cprintf\(char*, ...\);) 179.1091 Tj
-0 -199.3606 Td
-(0218 void            consoleintr\(int\(*\)\(void\)\);) 205.3202 Tj
-0 -208.8539 Td
-(0219 void            panic\(char*\) __attribute__\(\(noreturn\)\
-\);) 262.1109 Tj
-0 -218.3473 Td
-(0220 ) 21.8426 Tj
-0 -227.8407 Td
-(0221 // exec.c) 61.1592 Tj
-0 -237.334 Td
-(0222 int             exec\(char*, char**\);) 179.1091 Tj
-0 -246.8274 Td
-(0223 ) 21.8426 Tj
-0 -256.3207 Td
-(0224 // file.c) 61.1592 Tj
-0 -265.8141 Td
-(0225 struct file*    filealloc\(void\);) 161.635 Tj
-0 -275.3075 Td
-(0226 void            fileclose\(struct file*\);) 196.5831 Tj
-0 -284.8008 Td
-(0227 struct file*    filedup\(struct file*\);) 187.8461 Tj
-0 -294.2942 Td
-(0228 void            fileinit\(void\);) 157.2665 Tj
-0 -303.7875 Td
-(0229 int             fileread\(struct file*, char*, int n\);) 253.3738 Tj
-0 -313.2809 Td
-(0230 int             filestat\(struct file*, struct stat*\);) 253.3738 Tj
-0 -322.7743 Td
-(0231 int             filewrite\(struct file*, char*, int n\);) 257.7424 Tj
-0 -332.2676 Td
-(0232 ) 21.8426 Tj
-0 -341.761 Td
-(0233 // fs.c) 52.4222 Tj
-0 -351.2543 Td
-(0234 int             dirlink\(struct inode*, char*, uint\);) 249.0053 Tj
-0 -360.7477 Td
-(0235 struct inode*   dirlookup\(struct inode*, char*, uint*\);) 262.1109 Tj
-0 -370.2411 Td
-(0236 struct inode*   ialloc\(uint, short\);) 179.1091 Tj
-0 -379.7344 Td
-(0237 struct inode*   idup\(struct inode*\);) 179.1091 Tj
-0 -389.2278 Td
-(0238 void            iinit\(void\);) 144.161 Tj
-0 -398.7211 Td
-(0239 void            ilock\(struct inode*\);) 183.4776 Tj
-0 -408.2145 Td
-(0240 void            iput\(struct inode*\);) 179.1091 Tj
-0 -417.7079 Td
-(0241 void            iunlock\(struct inode*\);) 192.2146 Tj
-0 -427.2012 Td
-(0242 void            iunlockput\(struct inode*\);) 205.3202 Tj
-0 -436.6946 Td
-(0243 void            iupdate\(struct inode*\);) 192.2146 Tj
-0 -446.1879 Td
-(0244 int             namecmp\(const char*, const char*\);) 240.2683 Tj
-0 -455.6813 Td
-(0245 struct inode*   namei\(char*\);) 148.5295 Tj
-0 -465.1747 Td
-(0246 struct inode*   nameiparent\(char*, char*\);) 205.3202 Tj
-0 -474.668 Td
-(0247 int             readi\(struct inode*, char*, uint, uint\);) 266.4794 Tj
-0 -484.1614 Td
-(0248 void            stati\(struct inode*, struct stat*\);) 244.6368 Tj
-0 -493.6547 Td
-(0249 int             writei\(struct inode*, char*, uint, uint\)\
-;) 270.8479 Tj
-0 -522.1348 Td
-(Sheet 02) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/defs.h  Page 2) 161.635 Tj
-0 -28.4801 Td
-(0250 // ide.c) 56.7907 Tj
-0 -37.9735 Td
-(0251 void            ideinit\(void\);) 152.898 Tj
-0 -47.4668 Td
-(0252 void            ideintr\(void\);) 152.898 Tj
-0 -56.9602 Td
-(0253 void            iderw\(struct buf*\);) 174.7406 Tj
-0 -66.4535 Td
-(0254 ) 21.8426 Tj
-0 -75.9469 Td
-(0255 // ioapic.c) 69.8962 Tj
-0 -85.4403 Td
-(0256 void            ioapicenable\(int irq, int cpu\);) 227.1628 Tj
-0 -94.9336 Td
-(0257 extern uchar    ioapicid;) 131.0554 Tj
-0 -104.427 Td
-(0258 void            ioapicinit\(void\);) 166.0035 Tj
-0 -113.9203 Td
-(0259 ) 21.8426 Tj
-0 -123.4137 Td
-(0260 // kalloc.c) 69.8962 Tj
-0 -132.9071 Td
-(0261 char*           kalloc\(int\);) 144.161 Tj
-0 -142.4004 Td
-(0262 void            kfree\(char*, int\);) 170.3721 Tj
-0 -151.8938 Td
-(0263 void            kinit\(void\);) 144.161 Tj
-0 -161.3871 Td
-(0264 ) 21.8426 Tj
-0 -170.8805 Td
-(0265 // kbd.c) 56.7907 Tj
-0 -180.3739 Td
-(0266 void            kbdintr\(void\);) 152.898 Tj
-0 -189.8672 Td
-(0267 ) 21.8426 Tj
-0 -199.3606 Td
-(0268 // lapic.c) 65.5277 Tj
-0 -208.8539 Td
-(0269 int             cpunum\(void\);) 148.5295 Tj
-0 -218.3473 Td
-(0270 extern volatile uint*    lapic;) 157.2665 Tj
-0 -227.8407 Td
-(0271 void            lapiceoi\(void\);) 157.2665 Tj
-0 -237.334 Td
-(0272 void            lapicinit\(int\);) 157.2665 Tj
-0 -246.8274 Td
-(0273 void            lapicstartap\(uchar, uint\);) 205.3202 Tj
-0 -256.3207 Td
-(0274 void            microdelay\(int\);) 161.635 Tj
-0 -265.8141 Td
-(0275 ) 21.8426 Tj
-0 -275.3075 Td
-(0276 // mp.c) 52.4222 Tj
-0 -284.8008 Td
-(0277 extern int      ismp;) 113.5814 Tj
-0 -294.2942 Td
-(0278 int             mpbcpu\(void\);) 148.5295 Tj
-0 -303.7875 Td
-(0279 void            mpinit\(void\);) 148.5295 Tj
-0 -313.2809 Td
-(0280 void            mpstartthem\(void\);) 170.3721 Tj
-0 -322.7743 Td
-(0281 ) 21.8426 Tj
-0 -332.2676 Td
-(0282 // picirq.c) 69.8962 Tj
-0 -341.761 Td
-(0283 void            picenable\(int\);) 157.2665 Tj
-0 -351.2543 Td
-(0284 void            picinit\(void\);) 152.898 Tj
-0 -360.7477 Td
-(0285 ) 21.8426 Tj
-0 -370.2411 Td
-(0286 // pipe.c) 61.1592 Tj
-0 -379.7344 Td
-(0287 int             pipealloc\(struct file**, struct file**\);) 266.4794 Tj
-0 -389.2278 Td
-(0288 void            pipeclose\(struct pipe*, int\);) 218.4257 Tj
-0 -398.7211 Td
-(0289 int             piperead\(struct pipe*, char*, int\);) 244.6368 Tj
-0 -408.2145 Td
-(0290 int             pipewrite\(struct pipe*, char*, int\);) 249.0053 Tj
-0 -417.7079 Td
-(0291 ) 21.8426 Tj
-0 -427.2012 Td
-(0292 ) 21.8426 Tj
-0 -436.6946 Td
-(0293 ) 21.8426 Tj
-0 -446.1879 Td
-(0294 ) 21.8426 Tj
-0 -455.6813 Td
-(0295 ) 21.8426 Tj
-0 -465.1747 Td
-(0296 ) 21.8426 Tj
-0 -474.668 Td
-(0297 ) 21.8426 Tj
-0 -484.1614 Td
-(0298 ) 21.8426 Tj
-0 -493.6547 Td
-(0299 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 02) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 10 10
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/defs.h  Page 3) 161.635 Tj
-0 -28.4801 Td
-(0300 // proc.c) 61.1592 Tj
-0 -37.9735 Td
-(0301 struct proc*    copyproc\(struct proc*\);) 192.2146 Tj
-0 -47.4668 Td
-(0302 void            exit\(void\);) 139.7925 Tj
-0 -56.9602 Td
-(0303 int             fork\(void\);) 139.7925 Tj
-0 -66.4535 Td
-(0304 int             growproc\(int\);) 152.898 Tj
-0 -75.9469 Td
-(0305 int             kill\(int\);) 135.4239 Tj
-0 -85.4403 Td
-(0306 void            pinit\(void\);) 144.161 Tj
-0 -94.9336 Td
-(0307 void            procdump\(void\);) 157.2665 Tj
-0 -104.427 Td
-(0308 void            scheduler\(void\) __attribute__\(\(noretur\
-n\)\);) 275.2164 Tj
-0 -113.9203 Td
-(0309 void            ksegment\(void\);) 157.2665 Tj
-0 -123.4137 Td
-(0310 void            usegment\(void\);) 157.2665 Tj
-0 -132.9071 Td
-(0311 void            sleep\(void*, struct spinlock*\);) 227.1628 Tj
-0 -142.4004 Td
-(0312 void            userinit\(void\);) 157.2665 Tj
-0 -151.8938 Td
-(0313 int             wait\(void\);) 139.7925 Tj
-0 -161.3871 Td
-(0314 void            wakeup\(void*\);) 152.898 Tj
-0 -170.8805 Td
-(0315 void            yield\(void\);) 144.161 Tj
-0 -180.3739 Td
-(0316 ) 21.8426 Tj
-0 -189.8672 Td
-(0317 // swtch.S) 65.5277 Tj
-0 -199.3606 Td
-(0318 void            swtch\(struct context**, struct context*\)\
-;) 270.8479 Tj
-0 -208.8539 Td
-(0319 ) 21.8426 Tj
-0 -218.3473 Td
-(0320 // spinlock.c) 78.6333 Tj
-0 -227.8407 Td
-(0321 void            acquire\(struct spinlock*\);) 205.3202 Tj
-0 -237.334 Td
-(0322 void            getcallerpcs\(void*, uint*\);) 209.6887 Tj
-0 -246.8274 Td
-(0323 int             holding\(struct spinlock*\);) 205.3202 Tj
-0 -256.3207 Td
-(0324 void            initlock\(struct spinlock*, char*\);) 240.2683 Tj
-0 -265.8141 Td
-(0325 void            release\(struct spinlock*\);) 205.3202 Tj
-0 -275.3075 Td
-(0326 void            pushcli\(\);) 135.4239 Tj
-0 -284.8008 Td
-(0327 void            popcli\(\);) 131.0554 Tj
-0 -294.2942 Td
-(0328 ) 21.8426 Tj
-0 -303.7875 Td
-(0329 // string.c) 69.8962 Tj
-0 -313.2809 Td
-(0330 int             memcmp\(const void*, const void*, uint\);) 262.1109 Tj
-0 -322.7743 Td
-(0331 void*           memmove\(void*, const void*, uint\);) 240.2683 Tj
-0 -332.2676 Td
-(0332 void*           memset\(void*, int, uint\);) 200.9517 Tj
-0 -341.761 Td
-(0333 char*           safestrcpy\(char*, const char*, int\);) 249.0053 Tj
-0 -351.2543 Td
-(0334 int             strlen\(const char*\);) 179.1091 Tj
-0 -360.7477 Td
-(0335 int             strncmp\(const char*, const char*, uint\);) 266.4794 Tj
-0 -370.2411 Td
-(0336 char*           strncpy\(char*, const char*, int\);) 235.8998 Tj
-0 -379.7344 Td
-(0337 ) 21.8426 Tj
-0 -389.2278 Td
-(0338 // syscall.c) 74.2647 Tj
-0 -398.7211 Td
-(0339 int             argint\(int, int*\);) 170.3721 Tj
-0 -408.2145 Td
-(0340 int             argptr\(int, char**, int\);) 200.9517 Tj
-0 -417.7079 Td
-(0341 int             argstr\(int, char**\);) 179.1091 Tj
-0 -427.2012 Td
-(0342 int             fetchint\(struct proc*, uint, int*\);) 244.6368 Tj
-0 -436.6946 Td
-(0343 int             fetchstr\(struct proc*, uint, char**\);) 253.3738 Tj
-0 -446.1879 Td
-(0344 void            syscall\(void\);) 152.898 Tj
-0 -455.6813 Td
-(0345 ) 21.8426 Tj
-0 -465.1747 Td
-(0346 // timer.c) 65.5277 Tj
-0 -474.668 Td
-(0347 void            timerinit\(void\);) 161.635 Tj
-0 -484.1614 Td
-(0348 ) 21.8426 Tj
-0 -493.6547 Td
-(0349 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 03) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/defs.h  Page 4) 161.635 Tj
-0 -28.4801 Td
-(0350 // trap.c) 61.1592 Tj
-0 -37.9735 Td
-(0351 void            idtinit\(void\);) 152.898 Tj
-0 -47.4668 Td
-(0352 extern int      ticks;) 117.9499 Tj
-0 -56.9602 Td
-(0353 void            tvinit\(void\);) 148.5295 Tj
-0 -66.4535 Td
-(0354 extern struct spinlock tickslock;) 166.0035 Tj
-0 -75.9469 Td
-(0355 ) 21.8426 Tj
-0 -85.4403 Td
-(0356 // uart.c) 61.1592 Tj
-0 -94.9336 Td
-(0357 void            uartinit\(void\);) 157.2665 Tj
-0 -104.427 Td
-(0358 void            uartintr\(void\);) 157.2665 Tj
-0 -113.9203 Td
-(0359 void            uartputc\(int\);) 152.898 Tj
-0 -123.4137 Td
-(0360 ) 21.8426 Tj
-0 -132.9071 Td
-(0361 // number of elements in fixed-size array) 200.9517 Tj
-0 -142.4004 Td
-(0362 #define NELEM\(x\) \(sizeof\(x\)/sizeof\(\(x\)[0]\)\)) 209.6887 Tj
-0 -151.8938 Td
-(0363 ) 21.8426 Tj
-0 -161.3871 Td
-(0364 ) 21.8426 Tj
-0 -170.8805 Td
-(0365 ) 21.8426 Tj
-0 -180.3739 Td
-(0366 ) 21.8426 Tj
-0 -189.8672 Td
-(0367 ) 21.8426 Tj
-0 -199.3606 Td
-(0368 ) 21.8426 Tj
-0 -208.8539 Td
-(0369 ) 21.8426 Tj
-0 -218.3473 Td
-(0370 ) 21.8426 Tj
-0 -227.8407 Td
-(0371 ) 21.8426 Tj
-0 -237.334 Td
-(0372 ) 21.8426 Tj
-0 -246.8274 Td
-(0373 ) 21.8426 Tj
-0 -256.3207 Td
-(0374 ) 21.8426 Tj
-0 -265.8141 Td
-(0375 ) 21.8426 Tj
-0 -275.3075 Td
-(0376 ) 21.8426 Tj
-0 -284.8008 Td
-(0377 ) 21.8426 Tj
-0 -294.2942 Td
-(0378 ) 21.8426 Tj
-0 -303.7875 Td
-(0379 ) 21.8426 Tj
-0 -313.2809 Td
-(0380 ) 21.8426 Tj
-0 -322.7743 Td
-(0381 ) 21.8426 Tj
-0 -332.2676 Td
-(0382 ) 21.8426 Tj
-0 -341.761 Td
-(0383 ) 21.8426 Tj
-0 -351.2543 Td
-(0384 ) 21.8426 Tj
-0 -360.7477 Td
-(0385 ) 21.8426 Tj
-0 -370.2411 Td
-(0386 ) 21.8426 Tj
-0 -379.7344 Td
-(0387 ) 21.8426 Tj
-0 -389.2278 Td
-(0388 ) 21.8426 Tj
-0 -398.7211 Td
-(0389 ) 21.8426 Tj
-0 -408.2145 Td
-(0390 ) 21.8426 Tj
-0 -417.7079 Td
-(0391 ) 21.8426 Tj
-0 -427.2012 Td
-(0392 ) 21.8426 Tj
-0 -436.6946 Td
-(0393 ) 21.8426 Tj
-0 -446.1879 Td
-(0394 ) 21.8426 Tj
-0 -455.6813 Td
-(0395 ) 21.8426 Tj
-0 -465.1747 Td
-(0396 ) 21.8426 Tj
-0 -474.668 Td
-(0397 ) 21.8426 Tj
-0 -484.1614 Td
-(0398 ) 21.8426 Tj
-0 -493.6547 Td
-(0399 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 03) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 11 11
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/x86.h  Page 1) 157.2665 Tj
-0 -28.4801 Td
-(0400 // Routines to let C code use special x86 instructions.) 262.1109 Tj
-0 -37.9735 Td
-(0401 ) 21.8426 Tj
-0 -47.4668 Td
-(0402 static inline uchar) 104.8443 Tj
-0 -56.9602 Td
-(0403 inb\(ushort port\)) 91.7388 Tj
-0 -66.4535 Td
-(0404 {) 26.2111 Tj
-0 -75.9469 Td
-(0405   uchar data;) 78.6333 Tj
-0 -85.4403 Td
-(0406 ) 21.8426 Tj
-0 -94.9336 Td
-(0407   asm volatile\("in %1,%0" : "=a" \(data\) : "d" \(port\)\)\
-;) 257.7424 Tj
-0 -104.427 Td
-(0408   return data;) 83.0018 Tj
-0 -113.9203 Td
-(0409 }) 26.2111 Tj
-0 -123.4137 Td
-(0410 ) 21.8426 Tj
-0 -132.9071 Td
-(0411 static inline void) 100.4758 Tj
-0 -142.4004 Td
-(0412 insl\(int port, void *addr, int cnt\)) 174.7406 Tj
-0 -151.8938 Td
-(0413 {) 26.2111 Tj
-0 -161.3871 Td
-(0414   asm volatile\("cld; rep insl" :) 161.635 Tj
-0 -170.8805 Td
-(0415                "=D" \(addr\), "=c" \(cnt\) :) 196.5831 Tj
-0 -180.3739 Td
-(0416                "d" \(port\), "0" \(addr\), "1" \(cnt\) :) 240.2683 Tj
-0 -189.8672 Td
-(0417                "memory", "cc"\);) 157.2665 Tj
-0 -199.3606 Td
-(0418 }) 26.2111 Tj
-0 -208.8539 Td
-(0419 ) 21.8426 Tj
-0 -218.3473 Td
-(0420 static inline void) 100.4758 Tj
-0 -227.8407 Td
-(0421 outb\(ushort port, uchar data\)) 148.5295 Tj
-0 -237.334 Td
-(0422 {) 26.2111 Tj
-0 -246.8274 Td
-(0423   asm volatile\("out %0,%1" : : "a" \(data\), "d" \(port\)\
-\);) 262.1109 Tj
-0 -256.3207 Td
-(0424 }) 26.2111 Tj
-0 -265.8141 Td
-(0425 ) 21.8426 Tj
-0 -275.3075 Td
-(0426 static inline void) 100.4758 Tj
-0 -284.8008 Td
-(0427 outw\(ushort port, ushort data\)) 152.898 Tj
-0 -294.2942 Td
-(0428 {) 26.2111 Tj
-0 -303.7875 Td
-(0429   asm volatile\("out %0,%1" : : "a" \(data\), "d" \(port\)\
-\);) 262.1109 Tj
-0 -313.2809 Td
-(0430 }) 26.2111 Tj
-0 -322.7743 Td
-(0431 ) 21.8426 Tj
-0 -332.2676 Td
-(0432 static inline void) 100.4758 Tj
-0 -341.761 Td
-(0433 outsl\(int port, const void *addr, int cnt\)) 205.3202 Tj
-0 -351.2543 Td
-(0434 {) 26.2111 Tj
-0 -360.7477 Td
-(0435   asm volatile\("cld; rep outsl" :) 166.0035 Tj
-0 -370.2411 Td
-(0436                "=S" \(addr\), "=c" \(cnt\) :) 196.5831 Tj
-0 -379.7344 Td
-(0437                "d" \(port\), "0" \(addr\), "1" \(cnt\) :) 240.2683 Tj
-0 -389.2278 Td
-(0438                "cc"\);) 113.5814 Tj
-0 -398.7211 Td
-(0439 }) 26.2111 Tj
-0 -408.2145 Td
-(0440 ) 21.8426 Tj
-0 -417.7079 Td
-(0441 static inline void) 100.4758 Tj
-0 -427.2012 Td
-(0442 stosb\(void *addr, int data, int cnt\)) 179.1091 Tj
-0 -436.6946 Td
-(0443 {) 26.2111 Tj
-0 -446.1879 Td
-(0444   asm volatile\("cld; rep stosb" :) 166.0035 Tj
-0 -455.6813 Td
-(0445                "=D" \(addr\), "=c" \(cnt\) :) 196.5831 Tj
-0 -465.1747 Td
-(0446                "0" \(addr\), "1" \(cnt\), "a" \(data\) :) 240.2683 Tj
-0 -474.668 Td
-(0447                "memory", "cc"\);) 157.2665 Tj
-0 -484.1614 Td
-(0448 }) 26.2111 Tj
-0 -493.6547 Td
-(0449 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 04) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/x86.h  Page 2) 157.2665 Tj
-0 -28.4801 Td
-(0450 struct segdesc;) 87.3703 Tj
-0 -37.9735 Td
-(0451 ) 21.8426 Tj
-0 -47.4668 Td
-(0452 static inline void) 100.4758 Tj
-0 -56.9602 Td
-(0453 lgdt\(struct segdesc *p, int size\)) 166.0035 Tj
-0 -66.4535 Td
-(0454 {) 26.2111 Tj
-0 -75.9469 Td
-(0455   volatile ushort pd[3];) 126.6869 Tj
-0 -85.4403 Td
-(0456 ) 21.8426 Tj
-0 -94.9336 Td
-(0457   pd[0] = size-1;) 96.1073 Tj
-0 -104.427 Td
-(0458   pd[1] = \(uint\)p;) 100.4758 Tj
-0 -113.9203 Td
-(0459   pd[2] = \(uint\)p >> 16;) 126.6869 Tj
-0 -123.4137 Td
-(0460 ) 21.8426 Tj
-0 -132.9071 Td
-(0461   asm volatile\("lgdt \(%0\)" : : "r" \(pd\)\);) 200.9517 Tj
-0 -142.4004 Td
-(0462 }) 26.2111 Tj
-0 -151.8938 Td
-(0463 ) 21.8426 Tj
-0 -161.3871 Td
-(0464 struct gatedesc;) 91.7388 Tj
-0 -170.8805 Td
-(0465 ) 21.8426 Tj
-0 -180.3739 Td
-(0466 static inline void) 100.4758 Tj
-0 -189.8672 Td
-(0467 lidt\(struct gatedesc *p, int size\)) 170.3721 Tj
-0 -199.3606 Td
-(0468 {) 26.2111 Tj
-0 -208.8539 Td
-(0469   volatile ushort pd[3];) 126.6869 Tj
-0 -218.3473 Td
-(0470 ) 21.8426 Tj
-0 -227.8407 Td
-(0471   pd[0] = size-1;) 96.1073 Tj
-0 -237.334 Td
-(0472   pd[1] = \(uint\)p;) 100.4758 Tj
-0 -246.8274 Td
-(0473   pd[2] = \(uint\)p >> 16;) 126.6869 Tj
-0 -256.3207 Td
-(0474 ) 21.8426 Tj
-0 -265.8141 Td
-(0475   asm volatile\("lidt \(%0\)" : : "r" \(pd\)\);) 200.9517 Tj
-0 -275.3075 Td
-(0476 }) 26.2111 Tj
-0 -284.8008 Td
-(0477 ) 21.8426 Tj
-0 -294.2942 Td
-(0478 static inline void) 100.4758 Tj
-0 -303.7875 Td
-(0479 ltr\(ushort sel\)) 87.3703 Tj
-0 -313.2809 Td
-(0480 {) 26.2111 Tj
-0 -322.7743 Td
-(0481   asm volatile\("ltr %0" : : "r" \(sel\)\);) 192.2146 Tj
-0 -332.2676 Td
-(0482 }) 26.2111 Tj
-0 -341.761 Td
-(0483 ) 21.8426 Tj
-0 -351.2543 Td
-(0484 static inline uint) 100.4758 Tj
-0 -360.7477 Td
-(0485 readeflags\(void\)) 91.7388 Tj
-0 -370.2411 Td
-(0486 {) 26.2111 Tj
-0 -379.7344 Td
-(0487   uint eflags;) 83.0018 Tj
-0 -389.2278 Td
-(0488   asm volatile\("pushfl; popl %0" : "=r" \(eflags\)\);) 240.2683 Tj
-0 -398.7211 Td
-(0489   return eflags;) 91.7388 Tj
-0 -408.2145 Td
-(0490 }) 26.2111 Tj
-0 -417.7079 Td
-(0491 ) 21.8426 Tj
-0 -427.2012 Td
-(0492 ) 21.8426 Tj
-0 -436.6946 Td
-(0493 ) 21.8426 Tj
-0 -446.1879 Td
-(0494 ) 21.8426 Tj
-0 -455.6813 Td
-(0495 ) 21.8426 Tj
-0 -465.1747 Td
-(0496 ) 21.8426 Tj
-0 -474.668 Td
-(0497 ) 21.8426 Tj
-0 -484.1614 Td
-(0498 ) 21.8426 Tj
-0 -493.6547 Td
-(0499 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 04) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 12 12
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/x86.h  Page 3) 157.2665 Tj
-0 -28.4801 Td
-(0500 static inline uint) 100.4758 Tj
-0 -37.9735 Td
-(0501 xchg\(volatile uint *addr, uint newval\)) 187.8461 Tj
-0 -47.4668 Td
-(0502 {) 26.2111 Tj
-0 -56.9602 Td
-(0503   uint result;) 83.0018 Tj
-0 -66.4535 Td
-(0504 ) 21.8426 Tj
-0 -75.9469 Td
-(0505   // The + in "+m" denotes a read-modify-write operand.) 262.1109 Tj
-0 -85.4403 Td
-(0506   asm volatile\("lock; xchgl %0, %1" :) 183.4776 Tj
-0 -94.9336 Td
-(0507                "+m" \(*addr\), "=a" \(result\) :) 214.0572 Tj
-0 -104.427 Td
-(0508                "1" \(newval\) :) 148.5295 Tj
-0 -113.9203 Td
-(0509                "cc"\);) 113.5814 Tj
-0 -123.4137 Td
-(0510   return result;) 91.7388 Tj
-0 -132.9071 Td
-(0511 }) 26.2111 Tj
-0 -142.4004 Td
-(0512 ) 21.8426 Tj
-0 -151.8938 Td
-(0513 static inline void) 100.4758 Tj
-0 -161.3871 Td
-(0514 loadgs\(ushort v\)) 91.7388 Tj
-0 -170.8805 Td
-(0515 {) 26.2111 Tj
-0 -180.3739 Td
-(0516   asm volatile\("movw %0, %%gs" : : "r" \(v\)\);) 214.0572 Tj
-0 -189.8672 Td
-(0517 }) 26.2111 Tj
-0 -199.3606 Td
-(0518 ) 21.8426 Tj
-0 -208.8539 Td
-(0519 static inline void) 100.4758 Tj
-0 -218.3473 Td
-(0520 cli\(void\)) 61.1592 Tj
-0 -227.8407 Td
-(0521 {) 26.2111 Tj
-0 -237.334 Td
-(0522   asm volatile\("cli"\);) 117.9499 Tj
-0 -246.8274 Td
-(0523 }) 26.2111 Tj
-0 -256.3207 Td
-(0524 ) 21.8426 Tj
-0 -265.8141 Td
-(0525 static inline void) 100.4758 Tj
-0 -275.3075 Td
-(0526 sti\(void\)) 61.1592 Tj
-0 -284.8008 Td
-(0527 {) 26.2111 Tj
-0 -294.2942 Td
-(0528   asm volatile\("sti"\);) 117.9499 Tj
-0 -303.7875 Td
-(0529 }) 26.2111 Tj
-0 -313.2809 Td
-(0530 ) 21.8426 Tj
-0 -322.7743 Td
-(0531 ) 21.8426 Tj
-0 -332.2676 Td
-(0532 ) 21.8426 Tj
-0 -341.761 Td
-(0533 ) 21.8426 Tj
-0 -351.2543 Td
-(0534 ) 21.8426 Tj
-0 -360.7477 Td
-(0535 ) 21.8426 Tj
-0 -370.2411 Td
-(0536 ) 21.8426 Tj
-0 -379.7344 Td
-(0537 ) 21.8426 Tj
-0 -389.2278 Td
-(0538 ) 21.8426 Tj
-0 -398.7211 Td
-(0539 ) 21.8426 Tj
-0 -408.2145 Td
-(0540 ) 21.8426 Tj
-0 -417.7079 Td
-(0541 ) 21.8426 Tj
-0 -427.2012 Td
-(0542 ) 21.8426 Tj
-0 -436.6946 Td
-(0543 ) 21.8426 Tj
-0 -446.1879 Td
-(0544 ) 21.8426 Tj
-0 -455.6813 Td
-(0545 ) 21.8426 Tj
-0 -465.1747 Td
-(0546 ) 21.8426 Tj
-0 -474.668 Td
-(0547 ) 21.8426 Tj
-0 -484.1614 Td
-(0548 ) 21.8426 Tj
-0 -493.6547 Td
-(0549 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 05) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/x86.h  Page 4) 157.2665 Tj
-0 -28.4801 Td
-(0550 // Layout of the trap frame built on the stack by the) 253.3738 Tj
-0 -37.9735 Td
-(0551 // hardware and by trapasm.S, and passed to trap\(\).) 244.6368 Tj
-0 -47.4668 Td
-(0552 struct trapframe {) 100.4758 Tj
-0 -56.9602 Td
-(0553   // registers as pushed by pusha) 166.0035 Tj
-0 -66.4535 Td
-(0554   uint edi;) 69.8962 Tj
-0 -75.9469 Td
-(0555   uint esi;) 69.8962 Tj
-0 -85.4403 Td
-(0556   uint ebp;) 69.8962 Tj
-0 -94.9336 Td
-(0557   uint oesp;      // useless & ignored) 187.8461 Tj
-0 -104.427 Td
-(0558   uint ebx;) 69.8962 Tj
-0 -113.9203 Td
-(0559   uint edx;) 69.8962 Tj
-0 -123.4137 Td
-(0560   uint ecx;) 69.8962 Tj
-0 -132.9071 Td
-(0561   uint eax;) 69.8962 Tj
-0 -142.4004 Td
-(0562 ) 21.8426 Tj
-0 -151.8938 Td
-(0563   // rest of trap frame) 122.3184 Tj
-0 -161.3871 Td
-(0564   ushort gs;) 74.2647 Tj
-0 -170.8805 Td
-(0565   ushort padding1;) 100.4758 Tj
-0 -180.3739 Td
-(0566   ushort fs;) 74.2647 Tj
-0 -189.8672 Td
-(0567   ushort padding2;) 100.4758 Tj
-0 -199.3606 Td
-(0568   ushort es;) 74.2647 Tj
-0 -208.8539 Td
-(0569   ushort padding3;) 100.4758 Tj
-0 -218.3473 Td
-(0570   ushort ds;) 74.2647 Tj
-0 -227.8407 Td
-(0571   ushort padding4;) 100.4758 Tj
-0 -237.334 Td
-(0572   uint trapno;) 83.0018 Tj
-0 -246.8274 Td
-(0573 ) 21.8426 Tj
-0 -256.3207 Td
-(0574   // below here defined by x86 hardware) 192.2146 Tj
-0 -265.8141 Td
-(0575   uint err;) 69.8962 Tj
-0 -275.3075 Td
-(0576   uint eip;) 69.8962 Tj
-0 -284.8008 Td
-(0577   ushort cs;) 74.2647 Tj
-0 -294.2942 Td
-(0578   ushort padding5;) 100.4758 Tj
-0 -303.7875 Td
-(0579   uint eflags;) 83.0018 Tj
-0 -313.2809 Td
-(0580 ) 21.8426 Tj
-0 -322.7743 Td
-(0581   // below here only when crossing rings, such as from use\
-r to kernel) 323.2701 Tj
-0 -332.2676 Td
-(0582   uint esp;) 69.8962 Tj
-0 -341.761 Td
-(0583   ushort ss;) 74.2647 Tj
-0 -351.2543 Td
-(0584   ushort padding6;) 100.4758 Tj
-0 -360.7477 Td
-(0585 };) 30.5796 Tj
-0 -370.2411 Td
-(0586 ) 21.8426 Tj
-0 -379.7344 Td
-(0587 ) 21.8426 Tj
-0 -389.2278 Td
-(0588 ) 21.8426 Tj
-0 -398.7211 Td
-(0589 ) 21.8426 Tj
-0 -408.2145 Td
-(0590 ) 21.8426 Tj
-0 -417.7079 Td
-(0591 ) 21.8426 Tj
-0 -427.2012 Td
-(0592 ) 21.8426 Tj
-0 -436.6946 Td
-(0593 ) 21.8426 Tj
-0 -446.1879 Td
-(0594 ) 21.8426 Tj
-0 -455.6813 Td
-(0595 ) 21.8426 Tj
-0 -465.1747 Td
-(0596 ) 21.8426 Tj
-0 -474.668 Td
-(0597 ) 21.8426 Tj
-0 -484.1614 Td
-(0598 ) 21.8426 Tj
-0 -493.6547 Td
-(0599 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 05) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 13 13
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/asm.h  Page 1) 157.2665 Tj
-0 -28.4801 Td
-(0600 //) 30.5796 Tj
-0 -37.9735 Td
-(0601 // assembler macros to create x86 segments) 205.3202 Tj
-0 -47.4668 Td
-(0602 //) 30.5796 Tj
-0 -56.9602 Td
-(0603 ) 21.8426 Tj
-0 -66.4535 Td
-(0604 #define SEG_NULLASM                                       \
-      \\) 305.796 Tj
-0 -75.9469 Td
-(0605         .word 0, 0;                                       \
-      \\) 305.796 Tj
-0 -85.4403 Td
-(0606         .byte 0, 0, 0, 0) 126.6869 Tj
-0 -94.9336 Td
-(0607 ) 21.8426 Tj
-0 -104.427 Td
-(0608 #define SEG_ASM\(type,base,lim\)                          \
-        \\) 305.796 Tj
-0 -113.9203 Td
-(0609         .word \(\(\(lim\) >> 12\) & 0xffff\), \(\(base\) &\
- 0xffff\);      \\) 305.796 Tj
-0 -123.4137 Td
-(0610         .byte \(\(\(base\) >> 16\) & 0xff\), \(0x90 | \(ty\
-pe\)\),         \\) 305.796 Tj
-0 -132.9071 Td
-(0611                 \(0xC0 | \(\(\(lim\) >> 28\) & 0xf\)\), \(\
-\(\(base\) >> 24\) & 0xff\)) 332.0071 Tj
-0 -142.4004 Td
-(0612 ) 21.8426 Tj
-0 -151.8938 Td
-(0613 #define STA_X     0x8       // Executable segment) 235.8998 Tj
-0 -161.3871 Td
-(0614 #define STA_E     0x4       // Expand down \(non-executabl\
-e segments\)) 318.9016 Tj
-0 -170.8805 Td
-(0615 #define STA_C     0x4       // Conforming code segment \(e\
-xecutable only\)) 336.3756 Tj
-0 -180.3739 Td
-(0616 #define STA_W     0x2       // Writeable \(non-executable \
-segments\)) 310.1645 Tj
-0 -189.8672 Td
-(0617 #define STA_R     0x2       // Readable \(executable segme\
-nts\)) 288.322 Tj
-0 -199.3606 Td
-(0618 #define STA_A     0x1       // Accessed) 192.2146 Tj
-0 -208.8539 Td
-(0619 ) 21.8426 Tj
-0 -218.3473 Td
-(0620 ) 21.8426 Tj
-0 -227.8407 Td
-(0621 ) 21.8426 Tj
-0 -237.334 Td
-(0622 ) 21.8426 Tj
-0 -246.8274 Td
-(0623 ) 21.8426 Tj
-0 -256.3207 Td
-(0624 ) 21.8426 Tj
-0 -265.8141 Td
-(0625 ) 21.8426 Tj
-0 -275.3075 Td
-(0626 ) 21.8426 Tj
-0 -284.8008 Td
-(0627 ) 21.8426 Tj
-0 -294.2942 Td
-(0628 ) 21.8426 Tj
-0 -303.7875 Td
-(0629 ) 21.8426 Tj
-0 -313.2809 Td
-(0630 ) 21.8426 Tj
-0 -322.7743 Td
-(0631 ) 21.8426 Tj
-0 -332.2676 Td
-(0632 ) 21.8426 Tj
-0 -341.761 Td
-(0633 ) 21.8426 Tj
-0 -351.2543 Td
-(0634 ) 21.8426 Tj
-0 -360.7477 Td
-(0635 ) 21.8426 Tj
-0 -370.2411 Td
-(0636 ) 21.8426 Tj
-0 -379.7344 Td
-(0637 ) 21.8426 Tj
-0 -389.2278 Td
-(0638 ) 21.8426 Tj
-0 -398.7211 Td
-(0639 ) 21.8426 Tj
-0 -408.2145 Td
-(0640 ) 21.8426 Tj
-0 -417.7079 Td
-(0641 ) 21.8426 Tj
-0 -427.2012 Td
-(0642 ) 21.8426 Tj
-0 -436.6946 Td
-(0643 ) 21.8426 Tj
-0 -446.1879 Td
-(0644 ) 21.8426 Tj
-0 -455.6813 Td
-(0645 ) 21.8426 Tj
-0 -465.1747 Td
-(0646 ) 21.8426 Tj
-0 -474.668 Td
-(0647 ) 21.8426 Tj
-0 -484.1614 Td
-(0648 ) 21.8426 Tj
-0 -493.6547 Td
-(0649 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 06) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/mmu.h  Page 1) 157.2665 Tj
-0 -28.4801 Td
-(0650 // This file contains definitions for the) 200.9517 Tj
-0 -37.9735 Td
-(0651 // x86 memory management unit \(MMU\).) 179.1091 Tj
-0 -47.4668 Td
-(0652 ) 21.8426 Tj
-0 -56.9602 Td
-(0653 // Eflags register) 100.4758 Tj
-0 -66.4535 Td
-(0654 #define FL_CF           0x00000001      // Carry Flag) 253.3738 Tj
-0 -75.9469 Td
-(0655 #define FL_PF           0x00000004      // Parity Flag) 257.7424 Tj
-0 -85.4403 Td
-(0656 #define FL_AF           0x00000010      // Auxiliary carry\
- Flag) 297.059 Tj
-0 -94.9336 Td
-(0657 #define FL_ZF           0x00000040      // Zero Flag) 249.0053 Tj
-0 -104.427 Td
-(0658 #define FL_SF           0x00000080      // Sign Flag) 249.0053 Tj
-0 -113.9203 Td
-(0659 #define FL_TF           0x00000100      // Trap Flag) 249.0053 Tj
-0 -123.4137 Td
-(0660 #define FL_IF           0x00000200      // Interrupt Enabl\
-e) 279.5849 Tj
-0 -132.9071 Td
-(0661 #define FL_DF           0x00000400      // Direction Flag) 270.8479 Tj
-0 -142.4004 Td
-(0662 #define FL_OF           0x00000800      // Overflow Flag) 266.4794 Tj
-0 -151.8938 Td
-(0663 #define FL_IOPL_MASK    0x00003000      // I/O Privilege L\
-evel bitmask) 327.6386 Tj
-0 -161.3871 Td
-(0664 #define FL_IOPL_0       0x00000000      //   IOPL == 0) 257.7424 Tj
-0 -170.8805 Td
-(0665 #define FL_IOPL_1       0x00001000      //   IOPL == 1) 257.7424 Tj
-0 -180.3739 Td
-(0666 #define FL_IOPL_2       0x00002000      //   IOPL == 2) 257.7424 Tj
-0 -189.8672 Td
-(0667 #define FL_IOPL_3       0x00003000      //   IOPL == 3) 257.7424 Tj
-0 -199.3606 Td
-(0668 #define FL_NT           0x00004000      // Nested Task) 257.7424 Tj
-0 -208.8539 Td
-(0669 #define FL_RF           0x00010000      // Resume Flag) 257.7424 Tj
-0 -218.3473 Td
-(0670 #define FL_VM           0x00020000      // Virtual 8086 mo\
-de) 283.9534 Tj
-0 -227.8407 Td
-(0671 #define FL_AC           0x00040000      // Alignment Check) 275.2164 Tj
-0 -237.334 Td
-(0672 #define FL_VIF          0x00080000      // Virtual Interru\
-pt Flag) 305.796 Tj
-0 -246.8274 Td
-(0673 #define FL_VIP          0x00100000      // Virtual Interru\
-pt Pending) 318.9016 Tj
-0 -256.3207 Td
-(0674 #define FL_ID           0x00200000      // ID flag) 240.2683 Tj
-0 -265.8141 Td
-(0675 ) 21.8426 Tj
-0 -275.3075 Td
-(0676 // Segment Descriptor) 113.5814 Tj
-0 -284.8008 Td
-(0677 struct segdesc {) 91.7388 Tj
-0 -294.2942 Td
-(0678   uint lim_15_0 : 16;  // Low bits of segment limit) 244.6368 Tj
-0 -303.7875 Td
-(0679   uint base_15_0 : 16; // Low bits of segment base address) 275.2164 Tj
-0 -313.2809 Td
-(0680   uint base_23_16 : 8; // Middle bits of segment base addr\
-ess) 288.322 Tj
-0 -322.7743 Td
-(0681   uint type : 4;       // Segment type \(see STS_ constant\
-s\)) 279.5849 Tj
-0 -332.2676 Td
-(0682   uint s : 1;          // 0 = system, 1 = application) 253.3738 Tj
-0 -341.761 Td
-(0683   uint dpl : 2;        // Descriptor Privilege Level) 249.0053 Tj
-0 -351.2543 Td
-(0684   uint p : 1;          // Present) 166.0035 Tj
-0 -360.7477 Td
-(0685   uint lim_19_16 : 4;  // High bits of segment limit) 249.0053 Tj
-0 -370.2411 Td
-(0686   uint avl : 1;        // Unused \(available for software \
-use\)) 288.322 Tj
-0 -379.7344 Td
-(0687   uint rsv1 : 1;       // Reserved) 170.3721 Tj
-0 -389.2278 Td
-(0688   uint db : 1;         // 0 = 16-bit segment, 1 = 32-bit s\
-egment) 301.4275 Tj
-0 -398.7211 Td
-(0689   uint g : 1;          // Granularity: limit scaled by 4K \
-when set) 310.1645 Tj
-0 -408.2145 Td
-(0690   uint base_31_24 : 8; // High bits of segment base addres\
-s) 279.5849 Tj
-0 -417.7079 Td
-(0691 };) 30.5796 Tj
-0 -427.2012 Td
-(0692 ) 21.8426 Tj
-0 -436.6946 Td
-(0693 ) 21.8426 Tj
-0 -446.1879 Td
-(0694 ) 21.8426 Tj
-0 -455.6813 Td
-(0695 ) 21.8426 Tj
-0 -465.1747 Td
-(0696 ) 21.8426 Tj
-0 -474.668 Td
-(0697 ) 21.8426 Tj
-0 -484.1614 Td
-(0698 ) 21.8426 Tj
-0 -493.6547 Td
-(0699 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 06) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 14 14
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/mmu.h  Page 2) 157.2665 Tj
-0 -28.4801 Td
-(0700 // Normal segment) 96.1073 Tj
-0 -37.9735 Td
-(0701 #define SEG\(type, base, lim, dpl\) \(struct segdesc\)    \
-\\) 262.1109 Tj
-0 -47.4668 Td
-(0702 { \(\(lim\) >> 12\) & 0xffff, \(uint\)\(base\) & 0xffff,  \
-    \\) 262.1109 Tj
-0 -56.9602 Td
-(0703   \(\(uint\)\(base\) >> 16\) & 0xff, type, 1, dpl, 1,     \
-  \\) 262.1109 Tj
-0 -66.4535 Td
-(0704   \(uint\)\(lim\) >> 28, 0, 0, 1, 1, \(uint\)\(base\) >> 2\
-4 }) 253.3738 Tj
-0 -75.9469 Td
-(0705 ) 21.8426 Tj
-0 -85.4403 Td
-(0706 #define SEG16\(type, base, lim, dpl\) \(struct segdesc\)  \
-\\) 262.1109 Tj
-0 -94.9336 Td
-(0707 { \(lim\) & 0xffff, \(uint\)\(base\) & 0xffff,            \
-  \\) 262.1109 Tj
-0 -104.427 Td
-(0708   \(\(uint\)\(base\) >> 16\) & 0xff, type, 1, dpl, 1,     \
-  \\) 262.1109 Tj
-0 -113.9203 Td
-(0709   \(uint\)\(lim\) >> 16, 0, 0, 1, 0, \(uint\)\(base\) >> 2\
-4 }) 253.3738 Tj
-0 -123.4137 Td
-(0710 ) 21.8426 Tj
-0 -132.9071 Td
-(0711 #define DPL_USER    0x3     // User DPL) 192.2146 Tj
-0 -142.4004 Td
-(0712 ) 21.8426 Tj
-0 -151.8938 Td
-(0713 // Application segment type bits) 161.635 Tj
-0 -161.3871 Td
-(0714 #define STA_X       0x8     // Executable segment) 235.8998 Tj
-0 -170.8805 Td
-(0715 #define STA_E       0x4     // Expand down \(non-executabl\
-e segments\)) 318.9016 Tj
-0 -180.3739 Td
-(0716 #define STA_C       0x4     // Conforming code segment \(e\
-xecutable only\)) 336.3756 Tj
-0 -189.8672 Td
-(0717 #define STA_W       0x2     // Writeable \(non-executable \
-segments\)) 310.1645 Tj
-0 -199.3606 Td
-(0718 #define STA_R       0x2     // Readable \(executable segme\
-nts\)) 288.322 Tj
-0 -208.8539 Td
-(0719 #define STA_A       0x1     // Accessed) 192.2146 Tj
-0 -218.3473 Td
-(0720 ) 21.8426 Tj
-0 -227.8407 Td
-(0721 // System segment type bits) 139.7925 Tj
-0 -237.334 Td
-(0722 #define STS_T16A    0x1     // Available 16-bit TSS) 244.6368 Tj
-0 -246.8274 Td
-(0723 #define STS_LDT     0x2     // Local Descriptor Table) 253.3738 Tj
-0 -256.3207 Td
-(0724 #define STS_T16B    0x3     // Busy 16-bit TSS) 222.7942 Tj
-0 -265.8141 Td
-(0725 #define STS_CG16    0x4     // 16-bit Call Gate) 227.1628 Tj
-0 -275.3075 Td
-(0726 #define STS_TG      0x5     // Task Gate / Coum Transmitio\
-ns) 283.9534 Tj
-0 -284.8008 Td
-(0727 #define STS_IG16    0x6     // 16-bit Interrupt Gate) 249.0053 Tj
-0 -294.2942 Td
-(0728 #define STS_TG16    0x7     // 16-bit Trap Gate) 227.1628 Tj
-0 -303.7875 Td
-(0729 #define STS_T32A    0x9     // Available 32-bit TSS) 244.6368 Tj
-0 -313.2809 Td
-(0730 #define STS_T32B    0xB     // Busy 32-bit TSS) 222.7942 Tj
-0 -322.7743 Td
-(0731 #define STS_CG32    0xC     // 32-bit Call Gate) 227.1628 Tj
-0 -332.2676 Td
-(0732 #define STS_IG32    0xE     // 32-bit Interrupt Gate) 249.0053 Tj
-0 -341.761 Td
-(0733 #define STS_TG32    0xF     // 32-bit Trap Gate) 227.1628 Tj
-0 -351.2543 Td
-(0734 ) 21.8426 Tj
-0 -360.7477 Td
-(0735 ) 21.8426 Tj
-0 -370.2411 Td
-(0736 ) 21.8426 Tj
-0 -379.7344 Td
-(0737 ) 21.8426 Tj
-0 -389.2278 Td
-(0738 ) 21.8426 Tj
-0 -398.7211 Td
-(0739 ) 21.8426 Tj
-0 -408.2145 Td
-(0740 ) 21.8426 Tj
-0 -417.7079 Td
-(0741 ) 21.8426 Tj
-0 -427.2012 Td
-(0742 ) 21.8426 Tj
-0 -436.6946 Td
-(0743 ) 21.8426 Tj
-0 -446.1879 Td
-(0744 ) 21.8426 Tj
-0 -455.6813 Td
-(0745 ) 21.8426 Tj
-0 -465.1747 Td
-(0746 ) 21.8426 Tj
-0 -474.668 Td
-(0747 ) 21.8426 Tj
-0 -484.1614 Td
-(0748 ) 21.8426 Tj
-0 -493.6547 Td
-(0749 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 07) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/mmu.h  Page 3) 157.2665 Tj
-0 -28.4801 Td
-(0750 // Task state segment format) 144.161 Tj
-0 -37.9735 Td
-(0751 struct taskstate {) 100.4758 Tj
-0 -47.4668 Td
-(0752   uint link;         // Old ts selector) 192.2146 Tj
-0 -56.9602 Td
-(0753   uint esp0;         // Stack pointers and segment selecto\
-rs) 283.9534 Tj
-0 -66.4535 Td
-(0754   ushort ss0;        //   after an increase in privilege l\
-evel) 292.6905 Tj
-0 -75.9469 Td
-(0755   ushort padding1;) 100.4758 Tj
-0 -85.4403 Td
-(0756   uint *esp1;) 78.6333 Tj
-0 -94.9336 Td
-(0757   ushort ss1;) 78.6333 Tj
-0 -104.427 Td
-(0758   ushort padding2;) 100.4758 Tj
-0 -113.9203 Td
-(0759   uint *esp2;) 78.6333 Tj
-0 -123.4137 Td
-(0760   ushort ss2;) 78.6333 Tj
-0 -132.9071 Td
-(0761   ushort padding3;) 100.4758 Tj
-0 -142.4004 Td
-(0762   void *cr3;         // Page directory base) 209.6887 Tj
-0 -151.8938 Td
-(0763   uint *eip;         // Saved state from last task switch) 270.8479 Tj
-0 -161.3871 Td
-(0764   uint eflags;) 83.0018 Tj
-0 -170.8805 Td
-(0765   uint eax;          // More saved state \(registers\)) 249.0053 Tj
-0 -180.3739 Td
-(0766   uint ecx;) 69.8962 Tj
-0 -189.8672 Td
-(0767   uint edx;) 69.8962 Tj
-0 -199.3606 Td
-(0768   uint ebx;) 69.8962 Tj
-0 -208.8539 Td
-(0769   uint *esp;) 74.2647 Tj
-0 -218.3473 Td
-(0770   uint *ebp;) 74.2647 Tj
-0 -227.8407 Td
-(0771   uint esi;) 69.8962 Tj
-0 -237.334 Td
-(0772   uint edi;) 69.8962 Tj
-0 -246.8274 Td
-(0773   ushort es;         // Even more saved state \(segment se\
-lectors\)) 305.796 Tj
-0 -256.3207 Td
-(0774   ushort padding4;) 100.4758 Tj
-0 -265.8141 Td
-(0775   ushort cs;) 74.2647 Tj
-0 -275.3075 Td
-(0776   ushort padding5;) 100.4758 Tj
-0 -284.8008 Td
-(0777   ushort ss;) 74.2647 Tj
-0 -294.2942 Td
-(0778   ushort padding6;) 100.4758 Tj
-0 -303.7875 Td
-(0779   ushort ds;) 74.2647 Tj
-0 -313.2809 Td
-(0780   ushort padding7;) 100.4758 Tj
-0 -322.7743 Td
-(0781   ushort fs;) 74.2647 Tj
-0 -332.2676 Td
-(0782   ushort padding8;) 100.4758 Tj
-0 -341.761 Td
-(0783   ushort gs;) 74.2647 Tj
-0 -351.2543 Td
-(0784   ushort padding9;) 100.4758 Tj
-0 -360.7477 Td
-(0785   ushort ldt;) 78.6333 Tj
-0 -370.2411 Td
-(0786   ushort padding10;) 104.8443 Tj
-0 -379.7344 Td
-(0787   ushort t;          // Trap on task switch) 209.6887 Tj
-0 -389.2278 Td
-(0788   ushort iomb;       // I/O map base address) 214.0572 Tj
-0 -398.7211 Td
-(0789 };) 30.5796 Tj
-0 -408.2145 Td
-(0790 ) 21.8426 Tj
-0 -417.7079 Td
-(0791 ) 21.8426 Tj
-0 -427.2012 Td
-(0792 ) 21.8426 Tj
-0 -436.6946 Td
-(0793 ) 21.8426 Tj
-0 -446.1879 Td
-(0794 ) 21.8426 Tj
-0 -455.6813 Td
-(0795 ) 21.8426 Tj
-0 -465.1747 Td
-(0796 ) 21.8426 Tj
-0 -474.668 Td
-(0797 ) 21.8426 Tj
-0 -484.1614 Td
-(0798 ) 21.8426 Tj
-0 -493.6547 Td
-(0799 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 07) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 15 15
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/mmu.h  Page 4) 157.2665 Tj
-0 -28.4801 Td
-(0800 // Gate descriptors for interrupts and traps) 214.0572 Tj
-0 -37.9735 Td
-(0801 struct gatedesc {) 96.1073 Tj
-0 -47.4668 Td
-(0802   uint off_15_0 : 16;   // low 16 bits of offset in segmen\
-t) 279.5849 Tj
-0 -56.9602 Td
-(0803   uint cs : 16;         // code segment selector) 231.5313 Tj
-0 -66.4535 Td
-(0804   uint args : 5;        // # args, 0 for interrupt/trap ga\
-tes) 288.322 Tj
-0 -75.9469 Td
-(0805   uint rsv1 : 3;        // reserved\(should be zero I gues\
-s\)) 279.5849 Tj
-0 -85.4403 Td
-(0806   uint type : 4;        // type\(STS_{TG,IG32,TG32}\)) 244.6368 Tj
-0 -94.9336 Td
-(0807   uint s : 1;           // must be 0 \(system\)) 218.4257 Tj
-0 -104.427 Td
-(0808   uint dpl : 2;         // descriptor\(meaning new\) privi\
-lege level) 310.1645 Tj
-0 -113.9203 Td
-(0809   uint p : 1;           // Present) 170.3721 Tj
-0 -123.4137 Td
-(0810   uint off_31_16 : 16;  // high bits of offset in segment) 270.8479 Tj
-0 -132.9071 Td
-(0811 };) 30.5796 Tj
-0 -142.4004 Td
-(0812 ) 21.8426 Tj
-0 -151.8938 Td
-(0813 // Set up a normal interrupt/trap gate descriptor.) 240.2683 Tj
-0 -161.3871 Td
-(0814 // - istrap: 1 for a trap \(= exception\) gate, 0 for an i\
-nterrupt gate.) 327.6386 Tj
-0 -170.8805 Td
-(0815 //   interrupt gate clears FL_IF, trap gate leaves FL_IF a\
-lone) 292.6905 Tj
-0 -180.3739 Td
-(0816 // - sel: Code segment selector for interrupt/trap handler) 275.2164 Tj
-0 -189.8672 Td
-(0817 // - off: Offset in code segment for interrupt/trap handle\
-r) 279.5849 Tj
-0 -199.3606 Td
-(0818 // - dpl: Descriptor Privilege Level -) 187.8461 Tj
-0 -208.8539 Td
-(0819 //        the privilege level required for software to inv\
-oke) 288.322 Tj
-0 -218.3473 Td
-(0820 //        this interrupt/trap gate explicitly using an int\
- instruction.) 332.0071 Tj
-0 -227.8407 Td
-(0821 #define SETGATE\(gate, istrap, sel, off, d\)              \
-  \\) 279.5849 Tj
-0 -237.334 Td
-(0822 {                                                         \
-\\) 279.5849 Tj
-0 -246.8274 Td
-(0823   \(gate\).off_15_0 = \(uint\) \(off\) & 0xffff;          \
-      \\) 279.5849 Tj
-0 -256.3207 Td
-(0824   \(gate\).cs = \(sel\);                                  \
-    \\) 279.5849 Tj
-0 -265.8141 Td
-(0825   \(gate\).args = 0;                                      \
-  \\) 279.5849 Tj
-0 -275.3075 Td
-(0826   \(gate\).rsv1 = 0;                                      \
-  \\) 279.5849 Tj
-0 -284.8008 Td
-(0827   \(gate\).type = \(istrap\) ? STS_TG32 : STS_IG32;       \
-    \\) 279.5849 Tj
-0 -294.2942 Td
-(0828   \(gate\).s = 0;                                         \
-  \\) 279.5849 Tj
-0 -303.7875 Td
-(0829   \(gate\).dpl = \(d\);                                   \
-    \\) 279.5849 Tj
-0 -313.2809 Td
-(0830   \(gate\).p = 1;                                         \
-  \\) 279.5849 Tj
-0 -322.7743 Td
-(0831   \(gate\).off_31_16 = \(uint\) \(off\) >> 16;            \
-      \\) 279.5849 Tj
-0 -332.2676 Td
-(0832 }) 26.2111 Tj
-0 -341.761 Td
-(0833 ) 21.8426 Tj
-0 -351.2543 Td
-(0834 ) 21.8426 Tj
-0 -360.7477 Td
-(0835 ) 21.8426 Tj
-0 -370.2411 Td
-(0836 ) 21.8426 Tj
-0 -379.7344 Td
-(0837 ) 21.8426 Tj
-0 -389.2278 Td
-(0838 ) 21.8426 Tj
-0 -398.7211 Td
-(0839 ) 21.8426 Tj
-0 -408.2145 Td
-(0840 ) 21.8426 Tj
-0 -417.7079 Td
-(0841 ) 21.8426 Tj
-0 -427.2012 Td
-(0842 ) 21.8426 Tj
-0 -436.6946 Td
-(0843 ) 21.8426 Tj
-0 -446.1879 Td
-(0844 ) 21.8426 Tj
-0 -455.6813 Td
-(0845 ) 21.8426 Tj
-0 -465.1747 Td
-(0846 ) 21.8426 Tj
-0 -474.668 Td
-(0847 ) 21.8426 Tj
-0 -484.1614 Td
-(0848 ) 21.8426 Tj
-0 -493.6547 Td
-(0849 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 08) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/elf.h  Page 1) 157.2665 Tj
-0 -28.4801 Td
-(0850 // Format of an ELF executable file) 174.7406 Tj
-0 -37.9735 Td
-(0851 ) 21.8426 Tj
-0 -47.4668 Td
-(0852 #define ELF_MAGIC 0x464C457FU  // "\\x7FELF" in little end\
-ian) 283.9534 Tj
-0 -56.9602 Td
-(0853 ) 21.8426 Tj
-0 -66.4535 Td
-(0854 // File header) 83.0018 Tj
-0 -75.9469 Td
-(0855 struct elfhdr {) 87.3703 Tj
-0 -85.4403 Td
-(0856   uint magic;  // must equal ELF_MAGIC) 187.8461 Tj
-0 -94.9336 Td
-(0857   uchar elf[12];) 91.7388 Tj
-0 -104.427 Td
-(0858   ushort type;) 83.0018 Tj
-0 -113.9203 Td
-(0859   ushort machine;) 96.1073 Tj
-0 -123.4137 Td
-(0860   uint version;) 87.3703 Tj
-0 -132.9071 Td
-(0861   uint entry;) 78.6333 Tj
-0 -142.4004 Td
-(0862   uint phoff;) 78.6333 Tj
-0 -151.8938 Td
-(0863   uint shoff;) 78.6333 Tj
-0 -161.3871 Td
-(0864   uint flags;) 78.6333 Tj
-0 -170.8805 Td
-(0865   ushort ehsize;) 91.7388 Tj
-0 -180.3739 Td
-(0866   ushort phentsize;) 104.8443 Tj
-0 -189.8672 Td
-(0867   ushort phnum;) 87.3703 Tj
-0 -199.3606 Td
-(0868   ushort shentsize;) 104.8443 Tj
-0 -208.8539 Td
-(0869   ushort shnum;) 87.3703 Tj
-0 -218.3473 Td
-(0870   ushort shstrndx;) 100.4758 Tj
-0 -227.8407 Td
-(0871 };) 30.5796 Tj
-0 -237.334 Td
-(0872 ) 21.8426 Tj
-0 -246.8274 Td
-(0873 // Program section header) 131.0554 Tj
-0 -256.3207 Td
-(0874 struct proghdr {) 91.7388 Tj
-0 -265.8141 Td
-(0875   uint type;) 74.2647 Tj
-0 -275.3075 Td
-(0876   uint offset;) 83.0018 Tj
-0 -284.8008 Td
-(0877   uint va;) 65.5277 Tj
-0 -294.2942 Td
-(0878   uint pa;) 65.5277 Tj
-0 -303.7875 Td
-(0879   uint filesz;) 83.0018 Tj
-0 -313.2809 Td
-(0880   uint memsz;) 78.6333 Tj
-0 -322.7743 Td
-(0881   uint flags;) 78.6333 Tj
-0 -332.2676 Td
-(0882   uint align;) 78.6333 Tj
-0 -341.761 Td
-(0883 };) 30.5796 Tj
-0 -351.2543 Td
-(0884 ) 21.8426 Tj
-0 -360.7477 Td
-(0885 // Values for Proghdr type) 135.4239 Tj
-0 -370.2411 Td
-(0886 #define ELF_PROG_LOAD           1) 166.0035 Tj
-0 -379.7344 Td
-(0887 ) 21.8426 Tj
-0 -389.2278 Td
-(0888 // Flag bits for Proghdr flags) 152.898 Tj
-0 -398.7211 Td
-(0889 #define ELF_PROG_FLAG_EXEC      1) 166.0035 Tj
-0 -408.2145 Td
-(0890 #define ELF_PROG_FLAG_WRITE     2) 166.0035 Tj
-0 -417.7079 Td
-(0891 #define ELF_PROG_FLAG_READ      4) 166.0035 Tj
-0 -427.2012 Td
-(0892 ) 21.8426 Tj
-0 -436.6946 Td
-(0893 ) 21.8426 Tj
-0 -446.1879 Td
-(0894 ) 21.8426 Tj
-0 -455.6813 Td
-(0895 ) 21.8426 Tj
-0 -465.1747 Td
-(0896 ) 21.8426 Tj
-0 -474.668 Td
-(0897 ) 21.8426 Tj
-0 -484.1614 Td
-(0898 ) 21.8426 Tj
-0 -493.6547 Td
-(0899 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 08) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 16 16
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/bootasm.S  Page 1) 174.7406 Tj
-0 -28.4801 Td
-(0900 #include "asm.h") 91.7388 Tj
-0 -37.9735 Td
-(0901 ) 21.8426 Tj
-0 -47.4668 Td
-(0902 # Start the first CPU: switch to 32-bit protected mode, ju\
-mp into C.) 318.9016 Tj
-0 -56.9602 Td
-(0903 # The BIOS loads this code from the first sector of the ha\
-rd disk into) 327.6386 Tj
-0 -66.4535 Td
-(0904 # memory at physical address 0x7c00 and starts executing i\
-n real mode) 323.2701 Tj
-0 -75.9469 Td
-(0905 # with %cs=0 %ip=7c00.) 117.9499 Tj
-0 -85.4403 Td
-(0906 ) 21.8426 Tj
-0 -94.9336 Td
-(0907 #define SEG_KCODE 1  // kernel code) 174.7406 Tj
-0 -104.427 Td
-(0908 #define SEG_KDATA 2  // kernel data+stack) 200.9517 Tj
-0 -113.9203 Td
-(0909 ) 21.8426 Tj
-0 -123.4137 Td
-(0910 #define CR0_PE    1  // protected mode enable bit) 235.8998 Tj
-0 -132.9071 Td
-(0911 ) 21.8426 Tj
-0 -142.4004 Td
-(0912 .code16                       # Assemble for 16-bit mode) 266.4794 Tj
-0 -151.8938 Td
-(0913 .globl start) 74.2647 Tj
-0 -161.3871 Td
-(0914 start:) 48.0537 Tj
-0 -170.8805 Td
-(0915   cli                         # Disable interrupts) 240.2683 Tj
-0 -180.3739 Td
-(0916 ) 21.8426 Tj
-0 -189.8672 Td
-(0917   # Set up the important data segment registers \(DS, ES, \
-SS\).) 288.322 Tj
-0 -199.3606 Td
-(0918   xorw    %ax,%ax             # Segment number zero) 244.6368 Tj
-0 -208.8539 Td
-(0919   movw    %ax,%ds             # -> Data Segment) 227.1628 Tj
-0 -218.3473 Td
-(0920   movw    %ax,%es             # -> Extra Segment) 231.5313 Tj
-0 -227.8407 Td
-(0921   movw    %ax,%ss             # -> Stack Segment) 231.5313 Tj
-0 -237.334 Td
-(0922 ) 21.8426 Tj
-0 -246.8274 Td
-(0923   # Enable A20:) 87.3703 Tj
-0 -256.3207 Td
-(0924   #   For backwards compatibility with the earliest PCs, p\
-hysical) 305.796 Tj
-0 -265.8141 Td
-(0925   #   address line 20 is tied low, so that addresses highe\
-r than) 301.4275 Tj
-0 -275.3075 Td
-(0926   #   1MB wrap around to zero by default.  This code undoe\
-s this.) 305.796 Tj
-0 -284.8008 Td
-(0927 seta20.1:) 61.1592 Tj
-0 -294.2942 Td
-(0928   inb     $0x64,%al               # Wait for not busy) 253.3738 Tj
-0 -303.7875 Td
-(0929   testb   $0x2,%al) 100.4758 Tj
-0 -313.2809 Td
-(0930   jnz     seta20.1) 100.4758 Tj
-0 -322.7743 Td
-(0931 ) 21.8426 Tj
-0 -332.2676 Td
-(0932   movb    $0xd1,%al               # 0xd1 -> port 0x64) 253.3738 Tj
-0 -341.761 Td
-(0933   outb    %al,$0x64) 104.8443 Tj
-0 -351.2543 Td
-(0934 ) 21.8426 Tj
-0 -360.7477 Td
-(0935 seta20.2:) 61.1592 Tj
-0 -370.2411 Td
-(0936   inb     $0x64,%al               # Wait for not busy) 253.3738 Tj
-0 -379.7344 Td
-(0937   testb   $0x2,%al) 100.4758 Tj
-0 -389.2278 Td
-(0938   jnz     seta20.2) 100.4758 Tj
-0 -398.7211 Td
-(0939 ) 21.8426 Tj
-0 -408.2145 Td
-(0940   movb    $0xdf,%al               # 0xdf -> port 0x60) 253.3738 Tj
-0 -417.7079 Td
-(0941   outb    %al,$0x60) 104.8443 Tj
-0 -427.2012 Td
-(0942 ) 21.8426 Tj
-0 -436.6946 Td
-(0943 ) 21.8426 Tj
-0 -446.1879 Td
-(0944 ) 21.8426 Tj
-0 -455.6813 Td
-(0945 ) 21.8426 Tj
-0 -465.1747 Td
-(0946 ) 21.8426 Tj
-0 -474.668 Td
-(0947 ) 21.8426 Tj
-0 -484.1614 Td
-(0948 ) 21.8426 Tj
-0 -493.6547 Td
-(0949 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 09) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/bootasm.S  Page 2) 174.7406 Tj
-0 -28.4801 Td
-(0950   # Switch from real to protected mode, using a bootstrap \
-GDT) 288.322 Tj
-0 -37.9735 Td
-(0951   # and segment translation that makes virtual addresses) 266.4794 Tj
-0 -47.4668 Td
-(0952   # identical to physical addresses, so that the) 231.5313 Tj
-0 -56.9602 Td
-(0953   # effective memory map does not change during the switch\
-.) 279.5849 Tj
-0 -66.4535 Td
-(0954   lgdt    gdtdesc) 96.1073 Tj
-0 -75.9469 Td
-(0955   movl    %cr0, %eax) 109.2129 Tj
-0 -85.4403 Td
-(0956   orl     $CR0_PE, %eax) 122.3184 Tj
-0 -94.9336 Td
-(0957   movl    %eax, %cr0) 109.2129 Tj
-0 -104.427 Td
-(0958 ) 21.8426 Tj
-0 -113.9203 Td
-(0959   # Jump to next instruction, but in 32-bit code segment.) 270.8479 Tj
-0 -123.4137 Td
-(0960   # Switches processor into 32-bit mode.) 196.5831 Tj
-0 -132.9071 Td
-(0961   ljmp    $\(SEG_KCODE<<3\), $start32) 174.7406 Tj
-0 -142.4004 Td
-(0962 ) 21.8426 Tj
-0 -151.8938 Td
-(0963 .code32                       # Assemble for 32-bit mode) 266.4794 Tj
-0 -161.3871 Td
-(0964 start32:) 56.7907 Tj
-0 -170.8805 Td
-(0965   # Set up the protected-mode data segment registers) 249.0053 Tj
-0 -180.3739 Td
-(0966   movw    $\(SEG_KDATA<<3\), %ax    # Our data segment sel\
-ector) 288.322 Tj
-0 -189.8672 Td
-(0967   movw    %ax, %ds                # -> DS: Data Segment) 262.1109 Tj
-0 -199.3606 Td
-(0968   movw    %ax, %es                # -> ES: Extra Segment) 266.4794 Tj
-0 -208.8539 Td
-(0969   movw    %ax, %ss                # -> SS: Stack Segment) 266.4794 Tj
-0 -218.3473 Td
-(0970   movw    $0, %ax                 # Zero segments not read\
-y for use) 314.533 Tj
-0 -227.8407 Td
-(0971   movw    %ax, %fs                # -> FS) 200.9517 Tj
-0 -237.334 Td
-(0972   movw    %ax, %gs                # -> GS) 200.9517 Tj
-0 -246.8274 Td
-(0973 ) 21.8426 Tj
-0 -256.3207 Td
-(0974   # Set up the stack pointer and call into C.) 218.4257 Tj
-0 -265.8141 Td
-(0975   movl    $start, %esp) 117.9499 Tj
-0 -275.3075 Td
-(0976   call    bootmain) 100.4758 Tj
-0 -284.8008 Td
-(0977 ) 21.8426 Tj
-0 -294.2942 Td
-(0978   # If bootmain returns \(it shouldn't\), trigger a Bochs) 262.1109 Tj
-0 -303.7875 Td
-(0979   # breakpoint if running under Bochs, then loop.) 235.8998 Tj
-0 -313.2809 Td
-(0980   movw    $0x8a00, %ax            # 0x8a00 -> port 0x8a00) 270.8479 Tj
-0 -322.7743 Td
-(0981   movw    %ax, %dx) 100.4758 Tj
-0 -332.2676 Td
-(0982   outw    %ax, %dx) 100.4758 Tj
-0 -341.761 Td
-(0983   movw    $0x8e00, %ax            # 0x8e00 -> port 0x8a00) 270.8479 Tj
-0 -351.2543 Td
-(0984   outw    %ax, %dx) 100.4758 Tj
-0 -360.7477 Td
-(0985 spin:) 43.6851 Tj
-0 -370.2411 Td
-(0986   jmp     spin) 83.0018 Tj
-0 -379.7344 Td
-(0987 ) 21.8426 Tj
-0 -389.2278 Td
-(0988 # Bootstrap GDT) 87.3703 Tj
-0 -398.7211 Td
-(0989 .p2align 2                                # force 4 byte a\
-lignment) 310.1645 Tj
-0 -408.2145 Td
-(0990 gdt:) 39.3166 Tj
-0 -417.7079 Td
-(0991   SEG_NULLASM                             # null seg) 249.0053 Tj
-0 -427.2012 Td
-(0992   SEG_ASM\(STA_X|STA_R, 0x0, 0xffffffff\)   # code seg) 249.0053 Tj
-0 -436.6946 Td
-(0993   SEG_ASM\(STA_W, 0x0, 0xffffffff\)         # data seg) 249.0053 Tj
-0 -446.1879 Td
-(0994 ) 21.8426 Tj
-0 -455.6813 Td
-(0995 gdtdesc:) 56.7907 Tj
-0 -465.1747 Td
-(0996   .word   \(gdtdesc - gdt - 1\)                           \
- # sizeof\(gdt\) - 1) 345.1126 Tj
-0 -474.668 Td
-(0997   .long   gdt                             # address gdt) 262.1109 Tj
-0 -484.1614 Td
-(0998 ) 21.8426 Tj
-0 -493.6547 Td
-(0999 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 09) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 17 17
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/bootother.S  Page 1) 183.4776 Tj
-0 -28.4801 Td
-(1000 #include "asm.h") 91.7388 Tj
-0 -37.9735 Td
-(1001 ) 21.8426 Tj
-0 -47.4668 Td
-(1002 # Each non-boot CPU \("AP"\) is started up in response to \
-a STARTUP) 305.796 Tj
-0 -56.9602 Td
-(1003 # IPI from the boot CPU.  Section B.4.2 of the Multi-Proce\
-ssor) 292.6905 Tj
-0 -66.4535 Td
-(1004 # Specification says that the AP will start in real mode w\
-ith CS:IP) 314.533 Tj
-0 -75.9469 Td
-(1005 # set to XY00:0000, where XY is an 8-bit value sent with t\
-he) 283.9534 Tj
-0 -85.4403 Td
-(1006 # STARTUP. Thus this code must start at a 4096-byte bounda\
-ry.) 288.322 Tj
-0 -94.9336 Td
-(1007 #) 26.2111 Tj
-0 -104.427 Td
-(1008 # Because this code sets DS to zero, it must sit) 231.5313 Tj
-0 -113.9203 Td
-(1009 # at an address in the low 2^16 bytes.) 187.8461 Tj
-0 -123.4137 Td
-(1010 #) 26.2111 Tj
-0 -132.9071 Td
-(1011 # Bootothers \(in main.c\) sends the STARTUPs, one at a ti\
-me.) 279.5849 Tj
-0 -142.4004 Td
-(1012 # It puts this code \(start\) at 0x7000.) 187.8461 Tj
-0 -151.8938 Td
-(1013 # It puts the correct %esp in start-4,) 187.8461 Tj
-0 -161.3871 Td
-(1014 # and the place to jump to in start-8.) 187.8461 Tj
-0 -170.8805 Td
-(1015 #) 26.2111 Tj
-0 -180.3739 Td
-(1016 # This code is identical to bootasm.S except:) 218.4257 Tj
-0 -189.8672 Td
-(1017 #   - it does not need to enable A20) 179.1091 Tj
-0 -199.3606 Td
-(1018 #   - it uses the address at start-4 for the %esp) 235.8998 Tj
-0 -208.8539 Td
-(1019 #   - it jumps to the address at start-8 instead of callin\
-g bootmain) 318.9016 Tj
-0 -218.3473 Td
-(1020 ) 21.8426 Tj
-0 -227.8407 Td
-(1021 #define SEG_KCODE 1  // kernel code) 174.7406 Tj
-0 -237.334 Td
-(1022 #define SEG_KDATA 2  // kernel data+stack) 200.9517 Tj
-0 -246.8274 Td
-(1023 ) 21.8426 Tj
-0 -256.3207 Td
-(1024 #define CR0_PE    1  // protected mode enable bit) 235.8998 Tj
-0 -265.8141 Td
-(1025 ) 21.8426 Tj
-0 -275.3075 Td
-(1026 .code16                       # Assemble for 16-bit mode) 266.4794 Tj
-0 -284.8008 Td
-(1027 .globl start) 74.2647 Tj
-0 -294.2942 Td
-(1028 start:) 48.0537 Tj
-0 -303.7875 Td
-(1029   cli                         # Disable interrupts) 240.2683 Tj
-0 -313.2809 Td
-(1030 ) 21.8426 Tj
-0 -322.7743 Td
-(1031   # Set up the important data segment registers \(DS, ES, \
-SS\).) 288.322 Tj
-0 -332.2676 Td
-(1032   xorw    %ax,%ax             # Segment number zero) 244.6368 Tj
-0 -341.761 Td
-(1033   movw    %ax,%ds             # -> Data Segment) 227.1628 Tj
-0 -351.2543 Td
-(1034   movw    %ax,%es             # -> Extra Segment) 231.5313 Tj
-0 -360.7477 Td
-(1035   movw    %ax,%ss             # -> Stack Segment) 231.5313 Tj
-0 -370.2411 Td
-(1036 ) 21.8426 Tj
-0 -379.7344 Td
-(1037 ) 21.8426 Tj
-0 -389.2278 Td
-(1038 ) 21.8426 Tj
-0 -398.7211 Td
-(1039 ) 21.8426 Tj
-0 -408.2145 Td
-(1040 ) 21.8426 Tj
-0 -417.7079 Td
-(1041 ) 21.8426 Tj
-0 -427.2012 Td
-(1042 ) 21.8426 Tj
-0 -436.6946 Td
-(1043 ) 21.8426 Tj
-0 -446.1879 Td
-(1044 ) 21.8426 Tj
-0 -455.6813 Td
-(1045 ) 21.8426 Tj
-0 -465.1747 Td
-(1046 ) 21.8426 Tj
-0 -474.668 Td
-(1047 ) 21.8426 Tj
-0 -484.1614 Td
-(1048 ) 21.8426 Tj
-0 -493.6547 Td
-(1049 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 10) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/bootother.S  Page 2) 183.4776 Tj
-0 -28.4801 Td
-(1050   # Switch from real to protected mode, using a bootstrap \
-GDT) 288.322 Tj
-0 -37.9735 Td
-(1051   # and segment translation that makes virtual addresses) 266.4794 Tj
-0 -47.4668 Td
-(1052   # identical to physical addresses, so that the) 231.5313 Tj
-0 -56.9602 Td
-(1053   # effective memory map does not change during the switch\
-.) 279.5849 Tj
-0 -66.4535 Td
-(1054   lgdt    gdtdesc) 96.1073 Tj
-0 -75.9469 Td
-(1055   movl    %cr0, %eax) 109.2129 Tj
-0 -85.4403 Td
-(1056   orl     $CR0_PE, %eax) 122.3184 Tj
-0 -94.9336 Td
-(1057   movl    %eax, %cr0) 109.2129 Tj
-0 -104.427 Td
-(1058 ) 21.8426 Tj
-0 -113.9203 Td
-(1059   # Jump to next instruction, but in 32-bit code segment.) 270.8479 Tj
-0 -123.4137 Td
-(1060   # Switches processor into 32-bit mode.) 196.5831 Tj
-0 -132.9071 Td
-(1061   ljmp    $\(SEG_KCODE<<3\), $start32) 174.7406 Tj
-0 -142.4004 Td
-(1062 ) 21.8426 Tj
-0 -151.8938 Td
-(1063 .code32                       # Assemble for 32-bit mode) 266.4794 Tj
-0 -161.3871 Td
-(1064 start32:) 56.7907 Tj
-0 -170.8805 Td
-(1065   # Set up the protected-mode data segment registers) 249.0053 Tj
-0 -180.3739 Td
-(1066   movw    $\(SEG_KDATA<<3\), %ax    # Our data segment sel\
-ector) 288.322 Tj
-0 -189.8672 Td
-(1067   movw    %ax, %ds                # -> DS: Data Segment) 262.1109 Tj
-0 -199.3606 Td
-(1068   movw    %ax, %es                # -> ES: Extra Segment) 266.4794 Tj
-0 -208.8539 Td
-(1069   movw    %ax, %ss                # -> SS: Stack Segment) 266.4794 Tj
-0 -218.3473 Td
-(1070   movw    $0, %ax                 # Zero segments not read\
-y for use) 314.533 Tj
-0 -227.8407 Td
-(1071   movw    %ax, %fs                # -> FS) 200.9517 Tj
-0 -237.334 Td
-(1072   movw    %ax, %gs                # -> GS) 200.9517 Tj
-0 -246.8274 Td
-(1073 ) 21.8426 Tj
-0 -256.3207 Td
-(1074   # Set up the stack pointer and call into C.) 218.4257 Tj
-0 -265.8141 Td
-(1075   movl    start-4, %esp) 122.3184 Tj
-0 -275.3075 Td
-(1076   call) 48.0537 Tj
--2507.8 TJm
-(*\(start-8\)) 43.6851 Tj
-0 -284.8008 Td
-(1077 ) 21.8426 Tj
-0 -294.2942 Td
-(1078   # If the call returns \(it shouldn't\), trigger a Bochs) 262.1109 Tj
-0 -303.7875 Td
-(1079   # breakpoint if running under Bochs, then loop.) 235.8998 Tj
-0 -313.2809 Td
-(1080   movw    $0x8a00, %ax            # 0x8a00 -> port 0x8a00) 270.8479 Tj
-0 -322.7743 Td
-(1081   movw    %ax, %dx) 100.4758 Tj
-0 -332.2676 Td
-(1082   outw    %ax, %dx) 100.4758 Tj
-0 -341.761 Td
-(1083   movw    $0x8e00, %ax            # 0x8e00 -> port 0x8a00) 270.8479 Tj
-0 -351.2543 Td
-(1084   outw    %ax, %dx) 100.4758 Tj
-0 -360.7477 Td
-(1085 spin:) 43.6851 Tj
-0 -370.2411 Td
-(1086   jmp     spin) 83.0018 Tj
-0 -379.7344 Td
-(1087 ) 21.8426 Tj
-0 -389.2278 Td
-(1088 # Bootstrap GDT) 87.3703 Tj
-0 -398.7211 Td
-(1089 .p2align 2                                # force 4 byte a\
-lignment) 310.1645 Tj
-0 -408.2145 Td
-(1090 gdt:) 39.3166 Tj
-0 -417.7079 Td
-(1091   SEG_NULLASM                             # null seg) 249.0053 Tj
-0 -427.2012 Td
-(1092   SEG_ASM\(STA_X|STA_R, 0x0, 0xffffffff\)   # code seg) 249.0053 Tj
-0 -436.6946 Td
-(1093   SEG_ASM\(STA_W, 0x0, 0xffffffff\)         # data seg) 249.0053 Tj
-0 -446.1879 Td
-(1094 ) 21.8426 Tj
-0 -455.6813 Td
-(1095 gdtdesc:) 56.7907 Tj
-0 -465.1747 Td
-(1096   .word   \(gdtdesc - gdt - 1\)                           \
- # sizeof\(gdt\) - 1) 345.1126 Tj
-0 -474.668 Td
-(1097   .long   gdt                             # address gdt) 262.1109 Tj
-0 -484.1614 Td
-(1098 ) 21.8426 Tj
-0 -493.6547 Td
-(1099 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 10) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 18 18
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/bootmain.c  Page 1) 179.1091 Tj
-0 -28.4801 Td
-(1100 // Boot loader.) 87.3703 Tj
-0 -37.9735 Td
-(1101 //) 30.5796 Tj
-0 -47.4668 Td
-(1102 // Part of the boot sector, along with bootasm.S, which ca\
-lls bootmain\(\).) 340.7441 Tj
-0 -56.9602 Td
-(1103 // bootasm.S has put the processor into protected 32-bit m\
-ode.) 292.6905 Tj
-0 -66.4535 Td
-(1104 // bootmain\(\) loads an ELF kernel image from the disk st\
-arting at) 305.796 Tj
-0 -75.9469 Td
-(1105 // sector 1 and then jumps to the kernel entry routine.) 262.1109 Tj
-0 -85.4403 Td
-(1106 ) 21.8426 Tj
-0 -94.9336 Td
-(1107 #include "types.h") 100.4758 Tj
-0 -104.427 Td
-(1108 #include "elf.h") 91.7388 Tj
-0 -113.9203 Td
-(1109 #include "x86.h") 91.7388 Tj
-0 -123.4137 Td
-(1110 ) 21.8426 Tj
-0 -132.9071 Td
-(1111 #define SECTSIZE  512) 113.5814 Tj
-0 -142.4004 Td
-(1112 ) 21.8426 Tj
-0 -151.8938 Td
-(1113 void readseg\(uchar*, uint, uint\);) 166.0035 Tj
-0 -161.3871 Td
-(1114 ) 21.8426 Tj
-0 -170.8805 Td
-(1115 void) 39.3166 Tj
-0 -180.3739 Td
-(1116 bootmain\(void\)) 83.0018 Tj
-0 -189.8672 Td
-(1117 {) 26.2111 Tj
-0 -199.3606 Td
-(1118   struct elfhdr *elf;) 113.5814 Tj
-0 -208.8539 Td
-(1119   struct proghdr *ph, *eph;) 139.7925 Tj
-0 -218.3473 Td
-(1120   void \(*entry\)\(void\);) 117.9499 Tj
-0 -227.8407 Td
-(1121   uchar* va;) 74.2647 Tj
-0 -237.334 Td
-(1122 ) 21.8426 Tj
-0 -246.8274 Td
-(1123   elf = \(struct elfhdr*\)0x10000;  // scratch space) 240.2683 Tj
-0 -256.3207 Td
-(1124 ) 21.8426 Tj
-0 -265.8141 Td
-(1125   // Read 1st page off disk) 139.7925 Tj
-0 -275.3075 Td
-(1126   readseg\(\(uchar*\)elf, 4096, 0\);) 161.635 Tj
-0 -284.8008 Td
-(1127 ) 21.8426 Tj
-0 -294.2942 Td
-(1128   // Is this an ELF executable?) 157.2665 Tj
-0 -303.7875 Td
-(1129   if\(elf->magic != ELF_MAGIC\)) 148.5295 Tj
-0 -313.2809 Td
-(1130     return;  // let bootasm.S handle error) 205.3202 Tj
-0 -322.7743 Td
-(1131 ) 21.8426 Tj
-0 -332.2676 Td
-(1132   // Load each program segment \(ignores ph flags\).) 240.2683 Tj
-0 -341.761 Td
-(1133   ph = \(struct proghdr*\)\(\(uchar*\)elf + elf->phoff\);) 244.6368 Tj
-0 -351.2543 Td
-(1134   eph = ph + elf->phnum;) 126.6869 Tj
-0 -360.7477 Td
-(1135   for\(; ph < eph; ph++\) {) 131.0554 Tj
-0 -370.2411 Td
-(1136     va = \(uchar*\)\(ph->va & 0xFFFFFF\);) 183.4776 Tj
-0 -379.7344 Td
-(1137     readseg\(va, ph->filesz, ph->offset\);) 196.5831 Tj
-0 -389.2278 Td
-(1138     if\(ph->memsz > ph->filesz\)) 152.898 Tj
-0 -398.7211 Td
-(1139       stosb\(va + ph->filesz, 0, ph->memsz - ph->filesz\);) 266.4794 Tj
-0 -408.2145 Td
-(1140   }) 34.9481 Tj
-0 -417.7079 Td
-(1141 ) 21.8426 Tj
-0 -427.2012 Td
-(1142   // Call the entry point from the ELF header.) 222.7942 Tj
-0 -436.6946 Td
-(1143   // Does not return!) 113.5814 Tj
-0 -446.1879 Td
-(1144   entry = \(void\(*\)\(void\)\)\(elf->entry & 0xFFFFFF\);) 235.8998 Tj
-0 -455.6813 Td
-(1145   entry\(\);) 65.5277 Tj
-0 -465.1747 Td
-(1146 }) 26.2111 Tj
-0 -474.668 Td
-(1147 ) 21.8426 Tj
-0 -484.1614 Td
-(1148 ) 21.8426 Tj
-0 -493.6547 Td
-(1149 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 11) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/bootmain.c  Page 2) 179.1091 Tj
-0 -28.4801 Td
-(1150 void) 39.3166 Tj
-0 -37.9735 Td
-(1151 waitdisk\(void\)) 83.0018 Tj
-0 -47.4668 Td
-(1152 {) 26.2111 Tj
-0 -56.9602 Td
-(1153   // Wait for disk ready.) 131.0554 Tj
-0 -66.4535 Td
-(1154   while\(\(inb\(0x1F7\) & 0xC0\) != 0x40\)) 179.1091 Tj
-0 -75.9469 Td
-(1155     ;) 43.6851 Tj
-0 -85.4403 Td
-(1156 }) 26.2111 Tj
-0 -94.9336 Td
-(1157 ) 21.8426 Tj
-0 -104.427 Td
-(1158 // Read a single sector at offset into dst.) 209.6887 Tj
-0 -113.9203 Td
-(1159 void) 39.3166 Tj
-0 -123.4137 Td
-(1160 readsect\(void *dst, uint offset\)) 161.635 Tj
-0 -132.9071 Td
-(1161 {) 26.2111 Tj
-0 -142.4004 Td
-(1162   // Issue command.) 104.8443 Tj
-0 -151.8938 Td
-(1163   waitdisk\(\);) 78.6333 Tj
-0 -161.3871 Td
-(1164   outb\(0x1F2, 1\);   // count = 1) 161.635 Tj
-0 -170.8805 Td
-(1165   outb\(0x1F3, offset\);) 117.9499 Tj
-0 -180.3739 Td
-(1166   outb\(0x1F4, offset >> 8\);) 139.7925 Tj
-0 -189.8672 Td
-(1167   outb\(0x1F5, offset >> 16\);) 144.161 Tj
-0 -199.3606 Td
-(1168   outb\(0x1F6, \(offset >> 24\) | 0xE0\);) 183.4776 Tj
-0 -208.8539 Td
-(1169   outb\(0x1F7, 0x20\);  // cmd 0x20 - read sectors) 231.5313 Tj
-0 -218.3473 Td
-(1170 ) 21.8426 Tj
-0 -227.8407 Td
-(1171   // Read data.) 87.3703 Tj
-0 -237.334 Td
-(1172   waitdisk\(\);) 78.6333 Tj
-0 -246.8274 Td
-(1173   insl\(0x1F0, dst, SECTSIZE/4\);) 157.2665 Tj
-0 -256.3207 Td
-(1174 }) 26.2111 Tj
-0 -265.8141 Td
-(1175 ) 21.8426 Tj
-0 -275.3075 Td
-(1176 // Read 'count' bytes at 'offset' from kernel into virtual\
- address 'va'.) 336.3756 Tj
-0 -284.8008 Td
-(1177 // Might copy more than asked.) 152.898 Tj
-0 -294.2942 Td
-(1178 void) 39.3166 Tj
-0 -303.7875 Td
-(1179 readseg\(uchar* va, uint count, uint offset\)) 209.6887 Tj
-0 -313.2809 Td
-(1180 {) 26.2111 Tj
-0 -322.7743 Td
-(1181   uchar* eva;) 78.6333 Tj
-0 -332.2676 Td
-(1182 ) 21.8426 Tj
-0 -341.761 Td
-(1183   eva = va + count;) 104.8443 Tj
-0 -351.2543 Td
-(1184 ) 21.8426 Tj
-0 -360.7477 Td
-(1185   // Round down to sector boundary.) 174.7406 Tj
-0 -370.2411 Td
-(1186   va -= offset % SECTSIZE;) 135.4239 Tj
-0 -379.7344 Td
-(1187 ) 21.8426 Tj
-0 -389.2278 Td
-(1188   // Translate from bytes to sectors; kernel starts at sec\
-tor 1.) 301.4275 Tj
-0 -398.7211 Td
-(1189   offset = \(offset / SECTSIZE\) + 1;) 174.7406 Tj
-0 -408.2145 Td
-(1190 ) 21.8426 Tj
-0 -417.7079 Td
-(1191   // If this is too slow, we could read lots of sectors at\
- a time.) 310.1645 Tj
-0 -427.2012 Td
-(1192   // We'd write more to memory than asked, but it doesn't \
-matter --) 314.533 Tj
-0 -436.6946 Td
-(1193   // we load in increasing order.) 166.0035 Tj
-0 -446.1879 Td
-(1194   for\(; va < eva; va += SECTSIZE, offset++\)) 209.6887 Tj
-0 -455.6813 Td
-(1195     readsect\(va, offset\);) 131.0554 Tj
-0 -465.1747 Td
-(1196 }) 26.2111 Tj
-0 -474.668 Td
-(1197 ) 21.8426 Tj
-0 -484.1614 Td
-(1198 ) 21.8426 Tj
-0 -493.6547 Td
-(1199 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 11) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 19 19
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/main.c  Page 1) 161.635 Tj
-0 -28.4801 Td
-(1200 #include "types.h") 100.4758 Tj
-0 -37.9735 Td
-(1201 #include "defs.h") 96.1073 Tj
-0 -47.4668 Td
-(1202 #include "param.h") 100.4758 Tj
-0 -56.9602 Td
-(1203 #include "mmu.h") 91.7388 Tj
-0 -66.4535 Td
-(1204 #include "proc.h") 96.1073 Tj
-0 -75.9469 Td
-(1205 #include "x86.h") 91.7388 Tj
-0 -85.4403 Td
-(1206 ) 21.8426 Tj
-0 -94.9336 Td
-(1207 static void bootothers\(void\);) 148.5295 Tj
-0 -104.427 Td
-(1208 static void mpmain\(void\) __attribute__\(\(noreturn\)\);) 244.6368 Tj
-0 -113.9203 Td
-(1209 ) 21.8426 Tj
-0 -123.4137 Td
-(1210 // Bootstrap processor starts running C code here.) 240.2683 Tj
-0 -132.9071 Td
-(1211 int) 34.9481 Tj
-0 -142.4004 Td
-(1212 main\(void\)) 65.5277 Tj
-0 -151.8938 Td
-(1213 {) 26.2111 Tj
-0 -161.3871 Td
-(1214   mpinit\(\); // collect info about this machine) 222.7942 Tj
-0 -170.8805 Td
-(1215   lapicinit\(mpbcpu\(\)\);) 117.9499 Tj
-0 -180.3739 Td
-(1216   ksegment\(\);) 78.6333 Tj
-0 -189.8672 Td
-(1217   picinit\(\);       // interrupt controller) 205.3202 Tj
-0 -199.3606 Td
-(1218   ioapicinit\(\);    // another interrupt controller) 240.2683 Tj
-0 -208.8539 Td
-(1219   consoleinit\(\);   // I/O devices & their interrupts) 249.0053 Tj
-0 -218.3473 Td
-(1220   uartinit\(\);      // serial port) 166.0035 Tj
-0 -227.8407 Td
-(1221 cprintf\("cpus %p cpu %p\\n", cpus, cpu\);) 192.2146 Tj
-0 -237.334 Td
-(1222   cprintf\("\\ncpu%d: starting xv6\\n\\n", cpu->id\);) 231.5313 Tj
-0 -246.8274 Td
-(1223 ) 21.8426 Tj
-0 -256.3207 Td
-(1224   kinit\(\);         // physical memory allocator) 227.1628 Tj
-0 -265.8141 Td
-(1225   pinit\(\);         // process table) 174.7406 Tj
-0 -275.3075 Td
-(1226   tvinit\(\);        // trap vectors) 170.3721 Tj
-0 -284.8008 Td
-(1227   binit\(\);         // buffer cache) 170.3721 Tj
-0 -294.2942 Td
-(1228   fileinit\(\);      // file table) 161.635 Tj
-0 -303.7875 Td
-(1229   iinit\(\);         // inode cache) 166.0035 Tj
-0 -313.2809 Td
-(1230   ideinit\(\);       // disk) 135.4239 Tj
-0 -322.7743 Td
-(1231   if\(!ismp\)) 69.8962 Tj
-0 -332.2676 Td
-(1232     timerinit\(\);   // uniprocessor timer) 196.5831 Tj
-0 -341.761 Td
-(1233   userinit\(\);      // first user process) 196.5831 Tj
-0 -351.2543 Td
-(1234   bootothers\(\);    // start other processors) 214.0572 Tj
-0 -360.7477 Td
-(1235 ) 21.8426 Tj
-0 -370.2411 Td
-(1236   // Finish setting up this processor in mpmain.) 231.5313 Tj
-0 -379.7344 Td
-(1237   mpmain\(\);) 69.8962 Tj
-0 -389.2278 Td
-(1238 }) 26.2111 Tj
-0 -398.7211 Td
-(1239 ) 21.8426 Tj
-0 -408.2145 Td
-(1240 ) 21.8426 Tj
-0 -417.7079 Td
-(1241 ) 21.8426 Tj
-0 -427.2012 Td
-(1242 ) 21.8426 Tj
-0 -436.6946 Td
-(1243 ) 21.8426 Tj
-0 -446.1879 Td
-(1244 ) 21.8426 Tj
-0 -455.6813 Td
-(1245 ) 21.8426 Tj
-0 -465.1747 Td
-(1246 ) 21.8426 Tj
-0 -474.668 Td
-(1247 ) 21.8426 Tj
-0 -484.1614 Td
-(1248 ) 21.8426 Tj
-0 -493.6547 Td
-(1249 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 12) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/main.c  Page 2) 161.635 Tj
-0 -28.4801 Td
-(1250 // Bootstrap processor gets here after setting up the hard\
-ware.) 297.059 Tj
-0 -37.9735 Td
-(1251 // Additional processors start here.) 179.1091 Tj
-0 -47.4668 Td
-(1252 static void) 69.8962 Tj
-0 -56.9602 Td
-(1253 mpmain\(void\)) 74.2647 Tj
-0 -66.4535 Td
-(1254 {) 26.2111 Tj
-0 -75.9469 Td
-(1255   if\(cpunum\(\) != mpbcpu\(\)\)) 135.4239 Tj
-0 -85.4403 Td
-(1256     lapicinit\(cpunum\(\)\);) 126.6869 Tj
-0 -94.9336 Td
-(1257   ksegment\(\);) 78.6333 Tj
-0 -104.427 Td
-(1258   cprintf\("cpu%d: mpmain\\n", cpu->id\);) 187.8461 Tj
-0 -113.9203 Td
-(1259   idtinit\(\);) 74.2647 Tj
-0 -123.4137 Td
-(1260   xchg\(&cpu->booted, 1\);) 126.6869 Tj
-0 -132.9071 Td
-(1261 ) 21.8426 Tj
-0 -142.4004 Td
-(1262   cprintf\("cpu%d: scheduling\\n", cpu->id\);) 205.3202 Tj
-0 -151.8938 Td
-(1263   scheduler\(\);) 83.0018 Tj
-0 -161.3871 Td
-(1264 }) 26.2111 Tj
-0 -170.8805 Td
-(1265 ) 21.8426 Tj
-0 -180.3739 Td
-(1266 static void) 69.8962 Tj
-0 -189.8672 Td
-(1267 bootothers\(void\)) 91.7388 Tj
-0 -199.3606 Td
-(1268 {) 26.2111 Tj
-0 -208.8539 Td
-(1269   extern uchar _binary_bootother_start[], _binary_bootothe\
-r_size[];) 314.533 Tj
-0 -218.3473 Td
-(1270   uchar *code;) 83.0018 Tj
-0 -227.8407 Td
-(1271   struct cpu *c;) 91.7388 Tj
-0 -237.334 Td
-(1272   char *stack;) 83.0018 Tj
-0 -246.8274 Td
-(1273 ) 21.8426 Tj
-0 -256.3207 Td
-(1274   // Write bootstrap code to unused memory at 0x7000.) 253.3738 Tj
-0 -265.8141 Td
-(1275   code = \(uchar*\)0x7000;) 126.6869 Tj
-0 -275.3075 Td
-(1276   memmove\(code, _binary_bootother_start, \(uint\)_binary_\
-bootother_size\);) 332.0071 Tj
-0 -284.8008 Td
-(1277 ) 21.8426 Tj
-0 -294.2942 Td
-(1278   for\(c = cpus; c < cpus+ncpu; c++\){) 179.1091 Tj
-0 -303.7875 Td
-(1279     if\(c == cpus+cpunum\(\)\)  // We've started already.) 253.3738 Tj
-0 -313.2809 Td
-(1280       continue;) 87.3703 Tj
-0 -322.7743 Td
-(1281 ) 21.8426 Tj
-0 -332.2676 Td
-(1282     // Fill in %esp, %eip and start code on cpu.) 231.5313 Tj
-0 -341.761 Td
-(1283     stack = kalloc\(KSTACKSIZE\);) 157.2665 Tj
-0 -351.2543 Td
-(1284     *\(void**\)\(code-4\) = stack + KSTACKSIZE;) 209.6887 Tj
-0 -360.7477 Td
-(1285     *\(void**\)\(code-8\) = mpmain;) 157.2665 Tj
-0 -370.2411 Td
-(1286     lapicstartap\(c->id, \(uint\)code\);) 179.1091 Tj
-0 -379.7344 Td
-(1287 ) 21.8426 Tj
-0 -389.2278 Td
-(1288     // Wait for cpu to get through bootstrap.) 218.4257 Tj
-0 -398.7211 Td
-(1289     while\(c->booted == 0\)) 131.0554 Tj
-0 -408.2145 Td
-(1290       ;) 52.4222 Tj
-0 -417.7079 Td
-(1291   }) 34.9481 Tj
-0 -427.2012 Td
-(1292 }) 26.2111 Tj
-0 -436.6946 Td
-(1293 ) 21.8426 Tj
-0 -446.1879 Td
-(1294 ) 21.8426 Tj
-0 -455.6813 Td
-(1295 ) 21.8426 Tj
-0 -465.1747 Td
-(1296 ) 21.8426 Tj
-0 -474.668 Td
-(1297 ) 21.8426 Tj
-0 -484.1614 Td
-(1298 ) 21.8426 Tj
-0 -493.6547 Td
-(1299 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 12) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 20 20
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/spinlock.h  Page 1) 179.1091 Tj
-0 -28.4801 Td
-(1300 // Mutual exclusion lock.) 131.0554 Tj
-0 -37.9735 Td
-(1301 struct spinlock {) 96.1073 Tj
-0 -47.4668 Td
-(1302   uint locked;       // Is the lock held?) 200.9517 Tj
-0 -56.9602 Td
-(1303 ) 21.8426 Tj
-0 -66.4535 Td
-(1304   // For debugging:) 104.8443 Tj
-0 -75.9469 Td
-(1305   char *name;        // Name of lock.) 183.4776 Tj
-0 -85.4403 Td
-(1306   struct cpu *cpu;   // The cpu holding the lock.) 235.8998 Tj
-0 -94.9336 Td
-(1307   uint pcs[10];      // The call stack \(an array of progr\
-am counters\)) 323.2701 Tj
-0 -104.427 Td
-(1308                      // that locked the lock.) 218.4257 Tj
-0 -113.9203 Td
-(1309 };) 30.5796 Tj
-0 -123.4137 Td
-(1310 ) 21.8426 Tj
-0 -132.9071 Td
-(1311 ) 21.8426 Tj
-0 -142.4004 Td
-(1312 ) 21.8426 Tj
-0 -151.8938 Td
-(1313 ) 21.8426 Tj
-0 -161.3871 Td
-(1314 ) 21.8426 Tj
-0 -170.8805 Td
-(1315 ) 21.8426 Tj
-0 -180.3739 Td
-(1316 ) 21.8426 Tj
-0 -189.8672 Td
-(1317 ) 21.8426 Tj
-0 -199.3606 Td
-(1318 ) 21.8426 Tj
-0 -208.8539 Td
-(1319 ) 21.8426 Tj
-0 -218.3473 Td
-(1320 ) 21.8426 Tj
-0 -227.8407 Td
-(1321 ) 21.8426 Tj
-0 -237.334 Td
-(1322 ) 21.8426 Tj
-0 -246.8274 Td
-(1323 ) 21.8426 Tj
-0 -256.3207 Td
-(1324 ) 21.8426 Tj
-0 -265.8141 Td
-(1325 ) 21.8426 Tj
-0 -275.3075 Td
-(1326 ) 21.8426 Tj
-0 -284.8008 Td
-(1327 ) 21.8426 Tj
-0 -294.2942 Td
-(1328 ) 21.8426 Tj
-0 -303.7875 Td
-(1329 ) 21.8426 Tj
-0 -313.2809 Td
-(1330 ) 21.8426 Tj
-0 -322.7743 Td
-(1331 ) 21.8426 Tj
-0 -332.2676 Td
-(1332 ) 21.8426 Tj
-0 -341.761 Td
-(1333 ) 21.8426 Tj
-0 -351.2543 Td
-(1334 ) 21.8426 Tj
-0 -360.7477 Td
-(1335 ) 21.8426 Tj
-0 -370.2411 Td
-(1336 ) 21.8426 Tj
-0 -379.7344 Td
-(1337 ) 21.8426 Tj
-0 -389.2278 Td
-(1338 ) 21.8426 Tj
-0 -398.7211 Td
-(1339 ) 21.8426 Tj
-0 -408.2145 Td
-(1340 ) 21.8426 Tj
-0 -417.7079 Td
-(1341 ) 21.8426 Tj
-0 -427.2012 Td
-(1342 ) 21.8426 Tj
-0 -436.6946 Td
-(1343 ) 21.8426 Tj
-0 -446.1879 Td
-(1344 ) 21.8426 Tj
-0 -455.6813 Td
-(1345 ) 21.8426 Tj
-0 -465.1747 Td
-(1346 ) 21.8426 Tj
-0 -474.668 Td
-(1347 ) 21.8426 Tj
-0 -484.1614 Td
-(1348 ) 21.8426 Tj
-0 -493.6547 Td
-(1349 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 13) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/spinlock.c  Page 1) 179.1091 Tj
-0 -28.4801 Td
-(1350 // Mutual exclusion spin locks.) 157.2665 Tj
-0 -37.9735 Td
-(1351 ) 21.8426 Tj
-0 -47.4668 Td
-(1352 #include "types.h") 100.4758 Tj
-0 -56.9602 Td
-(1353 #include "defs.h") 96.1073 Tj
-0 -66.4535 Td
-(1354 #include "param.h") 100.4758 Tj
-0 -75.9469 Td
-(1355 #include "x86.h") 91.7388 Tj
-0 -85.4403 Td
-(1356 #include "mmu.h") 91.7388 Tj
-0 -94.9336 Td
-(1357 #include "proc.h") 96.1073 Tj
-0 -104.427 Td
-(1358 #include "spinlock.h") 113.5814 Tj
-0 -113.9203 Td
-(1359 ) 21.8426 Tj
-0 -123.4137 Td
-(1360 void) 39.3166 Tj
-0 -132.9071 Td
-(1361 initlock\(struct spinlock *lk, char *name\)) 200.9517 Tj
-0 -142.4004 Td
-(1362 {) 26.2111 Tj
-0 -151.8938 Td
-(1363   lk->name = name;) 100.4758 Tj
-0 -161.3871 Td
-(1364   lk->locked = 0;) 96.1073 Tj
-0 -170.8805 Td
-(1365   lk->cpu = 0;) 83.0018 Tj
-0 -180.3739 Td
-(1366 }) 26.2111 Tj
-0 -189.8672 Td
-(1367 ) 21.8426 Tj
-0 -199.3606 Td
-(1368 // Acquire the lock.) 109.2129 Tj
-0 -208.8539 Td
-(1369 // Loops \(spins\) until the lock is acquired.) 214.0572 Tj
-0 -218.3473 Td
-(1370 // Holding a lock for a long time may cause) 209.6887 Tj
-0 -227.8407 Td
-(1371 // other CPUs to waste time spinning to acquire it.) 244.6368 Tj
-0 -237.334 Td
-(1372 void) 39.3166 Tj
-0 -246.8274 Td
-(1373 acquire\(struct spinlock *lk\)) 144.161 Tj
-0 -256.3207 Td
-(1374 {) 26.2111 Tj
-0 -265.8141 Td
-(1375   pushcli\(\);) 74.2647 Tj
-0 -275.3075 Td
-(1376   if\(holding\(lk\)\)) 96.1073 Tj
-0 -284.8008 Td
-(1377     panic\("acquire"\);) 113.5814 Tj
-0 -294.2942 Td
-(1378 ) 21.8426 Tj
-0 -303.7875 Td
-(1379   // The xchg is atomic.) 126.6869 Tj
-0 -313.2809 Td
-(1380   // It also serializes, so that reads after acquire are n\
-ot) 283.9534 Tj
-0 -322.7743 Td
-(1381   // reordered before it.) 131.0554 Tj
-0 -332.2676 Td
-(1382   while\(xchg\(&lk->locked, 1\) != 0\)) 170.3721 Tj
-0 -341.761 Td
-(1383     ;) 43.6851 Tj
-0 -351.2543 Td
-(1384 ) 21.8426 Tj
-0 -360.7477 Td
-(1385   // Record info about lock acquisition for debugging.) 257.7424 Tj
-0 -370.2411 Td
-(1386   lk->cpu = cpu;) 91.7388 Tj
-0 -379.7344 Td
-(1387   getcallerpcs\(&lk, lk->pcs\);) 148.5295 Tj
-0 -389.2278 Td
-(1388 }) 26.2111 Tj
-0 -398.7211 Td
-(1389 ) 21.8426 Tj
-0 -408.2145 Td
-(1390 ) 21.8426 Tj
-0 -417.7079 Td
-(1391 ) 21.8426 Tj
-0 -427.2012 Td
-(1392 ) 21.8426 Tj
-0 -436.6946 Td
-(1393 ) 21.8426 Tj
-0 -446.1879 Td
-(1394 ) 21.8426 Tj
-0 -455.6813 Td
-(1395 ) 21.8426 Tj
-0 -465.1747 Td
-(1396 ) 21.8426 Tj
-0 -474.668 Td
-(1397 ) 21.8426 Tj
-0 -484.1614 Td
-(1398 ) 21.8426 Tj
-0 -493.6547 Td
-(1399 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 13) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 21 21
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/spinlock.c  Page 2) 179.1091 Tj
-0 -28.4801 Td
-(1400 // Release the lock.) 109.2129 Tj
-0 -37.9735 Td
-(1401 void) 39.3166 Tj
-0 -47.4668 Td
-(1402 release\(struct spinlock *lk\)) 144.161 Tj
-0 -56.9602 Td
-(1403 {) 26.2111 Tj
-0 -66.4535 Td
-(1404   if\(!holding\(lk\)\)) 100.4758 Tj
-0 -75.9469 Td
-(1405     panic\("release"\);) 113.5814 Tj
-0 -85.4403 Td
-(1406 ) 21.8426 Tj
-0 -94.9336 Td
-(1407   lk->pcs[0] = 0;) 96.1073 Tj
-0 -104.427 Td
-(1408   lk->cpu = 0;) 83.0018 Tj
-0 -113.9203 Td
-(1409 ) 21.8426 Tj
-0 -123.4137 Td
-(1410   // The xchg serializes, so that reads before release are) 275.2164 Tj
-0 -132.9071 Td
-(1411   // not reordered after it.  The 1996 PentiumPro manual \(\
-Volume 3,) 314.533 Tj
-0 -142.4004 Td
-(1412   // 7.2\) says reads can be carried out speculatively and\
- in) 283.9534 Tj
-0 -151.8938 Td
-(1413   // any order, which implies we need to serialize here.) 266.4794 Tj
-0 -161.3871 Td
-(1414   // But the 2007 Intel 64 Architecture Memory Ordering Wh\
-ite) 288.322 Tj
-0 -170.8805 Td
-(1415   // Paper says that Intel 64 and IA-32 will not move a lo\
-ad) 283.9534 Tj
-0 -180.3739 Td
-(1416   // after a store. So lock->locked = 0 would work here.) 266.4794 Tj
-0 -189.8672 Td
-(1417   // The xchg being asm volatile ensures gcc emits it afte\
-r) 279.5849 Tj
-0 -199.3606 Td
-(1418   // the above assignments \(and after the critical sectio\
-n\).) 283.9534 Tj
-0 -208.8539 Td
-(1419   xchg\(&lk->locked, 0\);) 122.3184 Tj
-0 -218.3473 Td
-(1420 ) 21.8426 Tj
-0 -227.8407 Td
-(1421   popcli\(\);) 69.8962 Tj
-0 -237.334 Td
-(1422 }) 26.2111 Tj
-0 -246.8274 Td
-(1423 ) 21.8426 Tj
-0 -256.3207 Td
-(1424 // Record the current call stack in pcs[] by following the\
- %ebp chain.) 327.6386 Tj
-0 -265.8141 Td
-(1425 void) 39.3166 Tj
-0 -275.3075 Td
-(1426 getcallerpcs\(void *v, uint pcs[]\)) 166.0035 Tj
-0 -284.8008 Td
-(1427 {) 26.2111 Tj
-0 -294.2942 Td
-(1428   uint *ebp;) 74.2647 Tj
-0 -303.7875 Td
-(1429   int i;) 56.7907 Tj
-0 -313.2809 Td
-(1430 ) 21.8426 Tj
-0 -322.7743 Td
-(1431   ebp = \(uint*\)v - 2;) 113.5814 Tj
-0 -332.2676 Td
-(1432   for\(i = 0; i < 10; i++\){) 135.4239 Tj
-0 -341.761 Td
-(1433     if\(ebp == 0 || ebp == \(uint*\)0xffffffff\)) 214.0572 Tj
-0 -351.2543 Td
-(1434       break;) 74.2647 Tj
-0 -360.7477 Td
-(1435     pcs[i] = ebp[1];     // saved %eip) 187.8461 Tj
-0 -370.2411 Td
-(1436     ebp = \(uint*\)ebp[0]; // saved %ebp) 187.8461 Tj
-0 -379.7344 Td
-(1437   }) 34.9481 Tj
-0 -389.2278 Td
-(1438   for\(; i < 10; i++\)) 109.2129 Tj
-0 -398.7211 Td
-(1439     pcs[i] = 0;) 87.3703 Tj
-0 -408.2145 Td
-(1440 }) 26.2111 Tj
-0 -417.7079 Td
-(1441 ) 21.8426 Tj
-0 -427.2012 Td
-(1442 // Check whether this cpu is holding the lock.) 222.7942 Tj
-0 -436.6946 Td
-(1443 int) 34.9481 Tj
-0 -446.1879 Td
-(1444 holding\(struct spinlock *lock\)) 152.898 Tj
-0 -455.6813 Td
-(1445 {) 26.2111 Tj
-0 -465.1747 Td
-(1446   return lock->locked && lock->cpu == cpu;) 205.3202 Tj
-0 -474.668 Td
-(1447 }) 26.2111 Tj
-0 -484.1614 Td
-(1448 ) 21.8426 Tj
-0 -493.6547 Td
-(1449 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 14) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/spinlock.c  Page 3) 179.1091 Tj
-0 -28.4801 Td
-(1450 // Pushcli/popcli are like cli/sti except that they are ma\
-tched:) 301.4275 Tj
-0 -37.9735 Td
-(1451 // it takes two popcli to undo two pushcli.  Also, if inte\
-rrupts) 301.4275 Tj
-0 -47.4668 Td
-(1452 // are off, then pushcli, popcli leaves them off.) 235.8998 Tj
-0 -56.9602 Td
-(1453 ) 21.8426 Tj
-0 -66.4535 Td
-(1454 void) 39.3166 Tj
-0 -75.9469 Td
-(1455 pushcli\(void\)) 78.6333 Tj
-0 -85.4403 Td
-(1456 {) 26.2111 Tj
-0 -94.9336 Td
-(1457   int eflags;) 78.6333 Tj
-0 -104.427 Td
-(1458 ) 21.8426 Tj
-0 -113.9203 Td
-(1459   eflags = readeflags\(\);) 126.6869 Tj
-0 -123.4137 Td
-(1460   cli\(\);) 56.7907 Tj
-0 -132.9071 Td
-(1461   if\(cpu->ncli++ == 0\)) 117.9499 Tj
-0 -142.4004 Td
-(1462     cpu->intena = eflags & FL_IF;) 166.0035 Tj
-0 -151.8938 Td
-(1463 }) 26.2111 Tj
-0 -161.3871 Td
-(1464 ) 21.8426 Tj
-0 -170.8805 Td
-(1465 void) 39.3166 Tj
-0 -180.3739 Td
-(1466 popcli\(void\)) 74.2647 Tj
-0 -189.8672 Td
-(1467 {) 26.2111 Tj
-0 -199.3606 Td
-(1468   if\(readeflags\(\)&FL_IF\)) 126.6869 Tj
-0 -208.8539 Td
-(1469     panic\("popcli - interruptible"\);) 179.1091 Tj
-0 -218.3473 Td
-(1470   if\(--cpu->ncli < 0\)) 113.5814 Tj
-0 -227.8407 Td
-(1471     panic\("popcli"\);) 109.2129 Tj
-0 -237.334 Td
-(1472   if\(cpu->ncli == 0 && cpu->intena\)) 174.7406 Tj
-0 -246.8274 Td
-(1473     sti\(\);) 65.5277 Tj
-0 -256.3207 Td
-(1474 }) 26.2111 Tj
-0 -265.8141 Td
-(1475 ) 21.8426 Tj
-0 -275.3075 Td
-(1476 ) 21.8426 Tj
-0 -284.8008 Td
-(1477 ) 21.8426 Tj
-0 -294.2942 Td
-(1478 ) 21.8426 Tj
-0 -303.7875 Td
-(1479 ) 21.8426 Tj
-0 -313.2809 Td
-(1480 ) 21.8426 Tj
-0 -322.7743 Td
-(1481 ) 21.8426 Tj
-0 -332.2676 Td
-(1482 ) 21.8426 Tj
-0 -341.761 Td
-(1483 ) 21.8426 Tj
-0 -351.2543 Td
-(1484 ) 21.8426 Tj
-0 -360.7477 Td
-(1485 ) 21.8426 Tj
-0 -370.2411 Td
-(1486 ) 21.8426 Tj
-0 -379.7344 Td
-(1487 ) 21.8426 Tj
-0 -389.2278 Td
-(1488 ) 21.8426 Tj
-0 -398.7211 Td
-(1489 ) 21.8426 Tj
-0 -408.2145 Td
-(1490 ) 21.8426 Tj
-0 -417.7079 Td
-(1491 ) 21.8426 Tj
-0 -427.2012 Td
-(1492 ) 21.8426 Tj
-0 -436.6946 Td
-(1493 ) 21.8426 Tj
-0 -446.1879 Td
-(1494 ) 21.8426 Tj
-0 -455.6813 Td
-(1495 ) 21.8426 Tj
-0 -465.1747 Td
-(1496 ) 21.8426 Tj
-0 -474.668 Td
-(1497 ) 21.8426 Tj
-0 -484.1614 Td
-(1498 ) 21.8426 Tj
-0 -493.6547 Td
-(1499 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 14) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 22 22
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/proc.h  Page 1) 161.635 Tj
-0 -28.4801 Td
-(1500 // Segments in proc->gdt.) 131.0554 Tj
-0 -37.9735 Td
-(1501 // Also known to bootasm.S and trapasm.S) 196.5831 Tj
-0 -47.4668 Td
-(1502 #define SEG_KCODE 1  // kernel code) 174.7406 Tj
-0 -56.9602 Td
-(1503 #define SEG_KDATA 2  // kernel data+stack) 200.9517 Tj
-0 -66.4535 Td
-(1504 #define SEG_KCPU  3  // kernel per-cpu data) 209.6887 Tj
-0 -75.9469 Td
-(1505 #define SEG_UCODE 4) 104.8443 Tj
-0 -85.4403 Td
-(1506 #define SEG_UDATA 5) 104.8443 Tj
-0 -94.9336 Td
-(1507 #define SEG_TSS   6  // this process's task state) 235.8998 Tj
-0 -104.427 Td
-(1508 #define NSEGS     7) 104.8443 Tj
-0 -113.9203 Td
-(1509 ) 21.8426 Tj
-0 -123.4137 Td
-(1510 // Saved registers for kernel context switches.) 227.1628 Tj
-0 -132.9071 Td
-(1511 // Don't need to save all the segment registers \(%cs, etc\
-\),) 279.5849 Tj
-0 -142.4004 Td
-(1512 // because they are constant across kernel contexts.) 249.0053 Tj
-0 -151.8938 Td
-(1513 // Don't need to save %eax, %ecx, %edx, because the) 244.6368 Tj
-0 -161.3871 Td
-(1514 // x86 convention is that the caller has saved them.) 249.0053 Tj
-0 -170.8805 Td
-(1515 // Contexts are stored at the bottom of the stack they) 257.7424 Tj
-0 -180.3739 Td
-(1516 // describe; the stack pointer is the address of the conte\
-xt.) 288.322 Tj
-0 -189.8672 Td
-(1517 // The layout of the context must match the code in swtch.\
-S.) 283.9534 Tj
-0 -199.3606 Td
-(1518 struct context {) 91.7388 Tj
-0 -208.8539 Td
-(1519   uint edi;) 69.8962 Tj
-0 -218.3473 Td
-(1520   uint esi;) 69.8962 Tj
-0 -227.8407 Td
-(1521   uint ebx;) 69.8962 Tj
-0 -237.334 Td
-(1522   uint ebp;) 69.8962 Tj
-0 -246.8274 Td
-(1523   uint eip;) 69.8962 Tj
-0 -256.3207 Td
-(1524 };) 30.5796 Tj
-0 -265.8141 Td
-(1525 ) 21.8426 Tj
-0 -275.3075 Td
-(1526 enum procstate { UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNI\
-NG, ZOMBIE };) 332.0071 Tj
-0 -284.8008 Td
-(1527 ) 21.8426 Tj
-0 -294.2942 Td
-(1528 // Per-process state) 109.2129 Tj
-0 -303.7875 Td
-(1529 struct proc {) 78.6333 Tj
-0 -313.2809 Td
-(1530   char *mem;                   // Start of process memory \
-\(kernel address\)) 345.1126 Tj
-0 -322.7743 Td
-(1531   uint sz;                     // Size of process memory \(\
-bytes\)) 301.4275 Tj
-0 -332.2676 Td
-(1532   char *kstack;                // Bottom of kernel stack f\
-or this process) 340.7441 Tj
-0 -341.761 Td
-(1533   enum procstate state;        // Process state) 227.1628 Tj
-0 -351.2543 Td
-(1534   volatile int pid;            // Process ID) 214.0572 Tj
-0 -360.7477 Td
-(1535   struct proc *parent;         // Parent process) 231.5313 Tj
-0 -370.2411 Td
-(1536   struct trapframe *tf;        // Trap frame for current s\
-yscall) 301.4275 Tj
-0 -379.7344 Td
-(1537   struct context *context;     // Switch here to run proce\
-ss) 283.9534 Tj
-0 -389.2278 Td
-(1538   void *chan;                  // If non-zero, sleeping on\
- chan) 297.059 Tj
-0 -398.7211 Td
-(1539   int killed;                  // If non-zero, have been k\
-illed) 297.059 Tj
-0 -408.2145 Td
-(1540   struct file *ofile[NOFILE];  // Open files) 214.0572 Tj
-0 -417.7079 Td
-(1541   struct inode *cwd;           // Current directory) 244.6368 Tj
-0 -427.2012 Td
-(1542   char name[16];               // Process name \(debugging\
-\)) 275.2164 Tj
-0 -436.6946 Td
-(1543 };) 30.5796 Tj
-0 -446.1879 Td
-(1544 ) 21.8426 Tj
-0 -455.6813 Td
-(1545 ) 21.8426 Tj
-0 -465.1747 Td
-(1546 ) 21.8426 Tj
-0 -474.668 Td
-(1547 ) 21.8426 Tj
-0 -484.1614 Td
-(1548 ) 21.8426 Tj
-0 -493.6547 Td
-(1549 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 15) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/proc.h  Page 2) 161.635 Tj
-0 -28.4801 Td
-(1550 // Process memory is laid out contiguously, low addresses \
-first:) 301.4275 Tj
-0 -37.9735 Td
-(1551 //   text) 61.1592 Tj
-0 -47.4668 Td
-(1552 //   original data and bss) 135.4239 Tj
-0 -56.9602 Td
-(1553 //   fixed-size stack) 113.5814 Tj
-0 -66.4535 Td
-(1554 //   expandable heap) 109.2129 Tj
-0 -75.9469 Td
-(1555 ) 21.8426 Tj
-0 -85.4403 Td
-(1556 // Per-CPU state) 91.7388 Tj
-0 -94.9336 Td
-(1557 struct cpu {) 74.2647 Tj
-0 -104.427 Td
-(1558   uchar id;                    // Local APIC ID; index int\
-o cpus[] below) 336.3756 Tj
-0 -113.9203 Td
-(1559   struct context *scheduler;   // Switch here to enter sch\
-eduler) 301.4275 Tj
-0 -123.4137 Td
-(1560   struct taskstate ts;         // Used by x86 to find stac\
-k for interrupt) 340.7441 Tj
-0 -132.9071 Td
-(1561   struct segdesc gdt[NSEGS];   // x86 global descriptor ta\
-ble) 288.322 Tj
-0 -142.4004 Td
-(1562   volatile uint booted;        // Has the CPU started?) 257.7424 Tj
-0 -151.8938 Td
-(1563   int ncli;                    // Depth of pushcli nesting\
-.) 279.5849 Tj
-0 -161.3871 Td
-(1564   int intena;                  // Were interrupts enabled \
-before pushcli?) 340.7441 Tj
-0 -170.8805 Td
-(1565 ) 21.8426 Tj
-0 -180.3739 Td
-(1566   // Cpu-local storage variables; see below) 209.6887 Tj
-0 -189.8672 Td
-(1567   struct cpu *cpu;) 100.4758 Tj
-0 -199.3606 Td
-(1568   struct proc *proc;) 109.2129 Tj
-0 -208.8539 Td
-(1569 };) 30.5796 Tj
-0 -218.3473 Td
-(1570 ) 21.8426 Tj
-0 -227.8407 Td
-(1571 extern struct cpu cpus[NCPU];) 148.5295 Tj
-0 -237.334 Td
-(1572 extern int ncpu;) 91.7388 Tj
-0 -246.8274 Td
-(1573 ) 21.8426 Tj
-0 -256.3207 Td
-(1574 // Per-CPU variables, holding pointers to the) 218.4257 Tj
-0 -265.8141 Td
-(1575 // current cpu and to the current process.) 205.3202 Tj
-0 -275.3075 Td
-(1576 // The asm suffix tells gcc to use "%gs:0" to refer to cpu) 275.2164 Tj
-0 -284.8008 Td
-(1577 // and "%gs:4" to refer to proc.  ksegment sets up the) 257.7424 Tj
-0 -294.2942 Td
-(1578 // %gs segment register so that %gs refers to the memory) 266.4794 Tj
-0 -303.7875 Td
-(1579 // holding those two variables in the local cpu's struct c\
-pu.) 288.322 Tj
-0 -313.2809 Td
-(1580 // This is similar to how thread-local variables are imple\
-mented) 301.4275 Tj
-0 -322.7743 Td
-(1581 // in thread libraries such as Linux pthreads.) 222.7942 Tj
-0 -332.2676 Td
-(1582 extern struct cpu *cpu asm\("%gs:0"\);       // This cpu.) 262.1109 Tj
-0 -341.761 Td
-(1583 extern struct proc *proc asm\("%gs:4"\);     // Current pr\
-oc on this cpu.) 332.0071 Tj
-0 -351.2543 Td
-(1584 ) 21.8426 Tj
-0 -360.7477 Td
-(1585 ) 21.8426 Tj
-0 -370.2411 Td
-(1586 ) 21.8426 Tj
-0 -379.7344 Td
-(1587 ) 21.8426 Tj
-0 -389.2278 Td
-(1588 ) 21.8426 Tj
-0 -398.7211 Td
-(1589 ) 21.8426 Tj
-0 -408.2145 Td
-(1590 ) 21.8426 Tj
-0 -417.7079 Td
-(1591 ) 21.8426 Tj
-0 -427.2012 Td
-(1592 ) 21.8426 Tj
-0 -436.6946 Td
-(1593 ) 21.8426 Tj
-0 -446.1879 Td
-(1594 ) 21.8426 Tj
-0 -455.6813 Td
-(1595 ) 21.8426 Tj
-0 -465.1747 Td
-(1596 ) 21.8426 Tj
-0 -474.668 Td
-(1597 ) 21.8426 Tj
-0 -484.1614 Td
-(1598 ) 21.8426 Tj
-0 -493.6547 Td
-(1599 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 15) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 23 23
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/proc.c  Page 1) 161.635 Tj
-0 -28.4801 Td
-(1600 #include "types.h") 100.4758 Tj
-0 -37.9735 Td
-(1601 #include "defs.h") 96.1073 Tj
-0 -47.4668 Td
-(1602 #include "param.h") 100.4758 Tj
-0 -56.9602 Td
-(1603 #include "mmu.h") 91.7388 Tj
-0 -66.4535 Td
-(1604 #include "x86.h") 91.7388 Tj
-0 -75.9469 Td
-(1605 #include "proc.h") 96.1073 Tj
-0 -85.4403 Td
-(1606 #include "spinlock.h") 113.5814 Tj
-0 -94.9336 Td
-(1607 ) 21.8426 Tj
-0 -104.427 Td
-(1608 struct {) 56.7907 Tj
-0 -113.9203 Td
-(1609   struct spinlock lock;) 122.3184 Tj
-0 -123.4137 Td
-(1610   struct proc proc[NPROC];) 135.4239 Tj
-0 -132.9071 Td
-(1611 } ptable;) 61.1592 Tj
-0 -142.4004 Td
-(1612 ) 21.8426 Tj
-0 -151.8938 Td
-(1613 static struct proc *initproc;) 148.5295 Tj
-0 -161.3871 Td
-(1614 ) 21.8426 Tj
-0 -170.8805 Td
-(1615 int nextpid = 1;) 91.7388 Tj
-0 -180.3739 Td
-(1616 extern void forkret\(void\);) 135.4239 Tj
-0 -189.8672 Td
-(1617 extern void trapret\(void\);) 135.4239 Tj
-0 -199.3606 Td
-(1618 ) 21.8426 Tj
-0 -208.8539 Td
-(1619 void) 39.3166 Tj
-0 -218.3473 Td
-(1620 pinit\(void\)) 69.8962 Tj
-0 -227.8407 Td
-(1621 {) 26.2111 Tj
-0 -237.334 Td
-(1622   initlock\(&ptable.lock, "ptable"\);) 174.7406 Tj
-0 -246.8274 Td
-(1623 }) 26.2111 Tj
-0 -256.3207 Td
-(1624 ) 21.8426 Tj
-0 -265.8141 Td
-(1625 ) 21.8426 Tj
-0 -275.3075 Td
-(1626 ) 21.8426 Tj
-0 -284.8008 Td
-(1627 ) 21.8426 Tj
-0 -294.2942 Td
-(1628 ) 21.8426 Tj
-0 -303.7875 Td
-(1629 ) 21.8426 Tj
-0 -313.2809 Td
-(1630 ) 21.8426 Tj
-0 -322.7743 Td
-(1631 ) 21.8426 Tj
-0 -332.2676 Td
-(1632 ) 21.8426 Tj
-0 -341.761 Td
-(1633 ) 21.8426 Tj
-0 -351.2543 Td
-(1634 ) 21.8426 Tj
-0 -360.7477 Td
-(1635 ) 21.8426 Tj
-0 -370.2411 Td
-(1636 ) 21.8426 Tj
-0 -379.7344 Td
-(1637 ) 21.8426 Tj
-0 -389.2278 Td
-(1638 ) 21.8426 Tj
-0 -398.7211 Td
-(1639 ) 21.8426 Tj
-0 -408.2145 Td
-(1640 ) 21.8426 Tj
-0 -417.7079 Td
-(1641 ) 21.8426 Tj
-0 -427.2012 Td
-(1642 ) 21.8426 Tj
-0 -436.6946 Td
-(1643 ) 21.8426 Tj
-0 -446.1879 Td
-(1644 ) 21.8426 Tj
-0 -455.6813 Td
-(1645 ) 21.8426 Tj
-0 -465.1747 Td
-(1646 ) 21.8426 Tj
-0 -474.668 Td
-(1647 ) 21.8426 Tj
-0 -484.1614 Td
-(1648 ) 21.8426 Tj
-0 -493.6547 Td
-(1649 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 16) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/proc.c  Page 2) 161.635 Tj
-0 -28.4801 Td
-(1650 // Print a process listing to console.  For debugging.) 257.7424 Tj
-0 -37.9735 Td
-(1651 // Runs when user types ^P on console.) 187.8461 Tj
-0 -47.4668 Td
-(1652 // No lock to avoid wedging a stuck machine further.) 249.0053 Tj
-0 -56.9602 Td
-(1653 void) 39.3166 Tj
-0 -66.4535 Td
-(1654 procdump\(void\)) 83.0018 Tj
-0 -75.9469 Td
-(1655 {) 26.2111 Tj
-0 -85.4403 Td
-(1656   static char *states[] = {) 139.7925 Tj
-0 -94.9336 Td
-(1657   [UNUSED]    "unused",) 122.3184 Tj
-0 -104.427 Td
-(1658   [EMBRYO]    "embryo",) 122.3184 Tj
-0 -113.9203 Td
-(1659   [SLEEPING]  "sleep ",) 122.3184 Tj
-0 -123.4137 Td
-(1660   [RUNNABLE]  "runble",) 122.3184 Tj
-0 -132.9071 Td
-(1661   [RUNNING]   "run   ",) 122.3184 Tj
-0 -142.4004 Td
-(1662   [ZOMBIE]    "zombie") 117.9499 Tj
-0 -151.8938 Td
-(1663   };) 39.3166 Tj
-0 -161.3871 Td
-(1664   int i;) 56.7907 Tj
-0 -170.8805 Td
-(1665   struct proc *p;) 96.1073 Tj
-0 -180.3739 Td
-(1666   char *state;) 83.0018 Tj
-0 -189.8672 Td
-(1667   uint pc[10];) 83.0018 Tj
-0 -199.3606 Td
-(1668 ) 21.8426 Tj
-0 -208.8539 Td
-(1669   for\(p = ptable.proc; p < &ptable.proc[NPROC]; p++\){) 253.3738 Tj
-0 -218.3473 Td
-(1670     if\(p->state == UNUSED\)) 135.4239 Tj
-0 -227.8407 Td
-(1671       continue;) 87.3703 Tj
-0 -237.334 Td
-(1672     if\(p->state >= 0 && p->state < NELEM\(states\) && sta\
-tes[p->state]\)) 323.2701 Tj
-0 -246.8274 Td
-(1673       state = states[p->state];) 157.2665 Tj
-0 -256.3207 Td
-(1674     else) 56.7907 Tj
-0 -265.8141 Td
-(1675       state = "???";) 109.2129 Tj
-0 -275.3075 Td
-(1676     cprintf\("%d %s %s", p->pid, state, p->name\);) 231.5313 Tj
-0 -284.8008 Td
-(1677     if\(p->state == SLEEPING\){) 148.5295 Tj
-0 -294.2942 Td
-(1678       getcallerpcs\(\(uint*\)p->context->ebp+2, pc\);) 235.8998 Tj
-0 -303.7875 Td
-(1679       for\(i=0; i<10 && pc[i] != 0; i++\)) 192.2146 Tj
-0 -313.2809 Td
-(1680         cprintf\(" %p", pc[i]\);) 152.898 Tj
-0 -322.7743 Td
-(1681     }) 43.6851 Tj
-0 -332.2676 Td
-(1682     cprintf\("\\n"\);) 100.4758 Tj
-0 -341.761 Td
-(1683   }) 34.9481 Tj
-0 -351.2543 Td
-(1684 }) 26.2111 Tj
-0 -360.7477 Td
-(1685 ) 21.8426 Tj
-0 -370.2411 Td
-(1686 ) 21.8426 Tj
-0 -379.7344 Td
-(1687 ) 21.8426 Tj
-0 -389.2278 Td
-(1688 ) 21.8426 Tj
-0 -398.7211 Td
-(1689 ) 21.8426 Tj
-0 -408.2145 Td
-(1690 ) 21.8426 Tj
-0 -417.7079 Td
-(1691 ) 21.8426 Tj
-0 -427.2012 Td
-(1692 ) 21.8426 Tj
-0 -436.6946 Td
-(1693 ) 21.8426 Tj
-0 -446.1879 Td
-(1694 ) 21.8426 Tj
-0 -455.6813 Td
-(1695 ) 21.8426 Tj
-0 -465.1747 Td
-(1696 ) 21.8426 Tj
-0 -474.668 Td
-(1697 ) 21.8426 Tj
-0 -484.1614 Td
-(1698 ) 21.8426 Tj
-0 -493.6547 Td
-(1699 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 16) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 24 24
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/proc.c  Page 3) 161.635 Tj
-0 -28.4801 Td
-(1700 // Set up CPU's kernel segment descriptors.) 209.6887 Tj
-0 -37.9735 Td
-(1701 // Run once at boot time on each CPU.) 183.4776 Tj
-0 -47.4668 Td
-(1702 void) 39.3166 Tj
-0 -56.9602 Td
-(1703 ksegment\(void\)) 83.0018 Tj
-0 -66.4535 Td
-(1704 {) 26.2111 Tj
-0 -75.9469 Td
-(1705   struct cpu *c;) 91.7388 Tj
-0 -85.4403 Td
-(1706 ) 21.8426 Tj
-0 -94.9336 Td
-(1707   c = &cpus[cpunum\(\)];) 117.9499 Tj
-0 -104.427 Td
-(1708   c->gdt[SEG_KCODE] = SEG\(STA_X|STA_R, 0, 0x100000 + 64*1\
-024-1, 0\);) 314.533 Tj
-0 -113.9203 Td
-(1709   c->gdt[SEG_KDATA] = SEG\(STA_W, 0, 0xffffffff, 0\);) 244.6368 Tj
-0 -123.4137 Td
-(1710   c->gdt[SEG_KCPU] = SEG\(STA_W, &c->cpu, 8, 0\);) 227.1628 Tj
-0 -132.9071 Td
-(1711   lgdt\(c->gdt, sizeof\(c->gdt\)\);) 157.2665 Tj
-0 -142.4004 Td
-(1712   loadgs\(SEG_KCPU << 3\);) 126.6869 Tj
-0 -151.8938 Td
-(1713 ) 21.8426 Tj
-0 -161.3871 Td
-(1714   // Initialize cpu-local storage.) 170.3721 Tj
-0 -170.8805 Td
-(1715   cpu = c;) 65.5277 Tj
-0 -180.3739 Td
-(1716   proc = 0;) 69.8962 Tj
-0 -189.8672 Td
-(1717 }) 26.2111 Tj
-0 -199.3606 Td
-(1718 ) 21.8426 Tj
-0 -208.8539 Td
-(1719 // Set up CPU's segment descriptors and current process ta\
-sk state.) 314.533 Tj
-0 -218.3473 Td
-(1720 void) 39.3166 Tj
-0 -227.8407 Td
-(1721 usegment\(void\)) 83.0018 Tj
-0 -237.334 Td
-(1722 {) 26.2111 Tj
-0 -246.8274 Td
-(1723   pushcli\(\);) 74.2647 Tj
-0 -256.3207 Td
-(1724   cpu->gdt[SEG_UCODE] = SEG\(STA_X|STA_R, proc->mem, proc-\
->sz-1, DPL_USER\);) 345.1126 Tj
-0 -265.8141 Td
-(1725   cpu->gdt[SEG_UDATA] = SEG\(STA_W, proc->mem, proc->sz-1,\
- DPL_USER\);) 318.9016 Tj
-0 -275.3075 Td
-(1726   cpu->gdt[SEG_TSS] = SEG16\(STS_T32A, &cpu->ts, sizeof\(c\
-pu->ts\)-1, 0\);) 327.6386 Tj
-0 -284.8008 Td
-(1727   cpu->gdt[SEG_TSS].s = 0;) 135.4239 Tj
-0 -294.2942 Td
-(1728   cpu->ts.ss0 = SEG_KDATA << 3;) 157.2665 Tj
-0 -303.7875 Td
-(1729   cpu->ts.esp0 = \(uint\)proc->kstack + KSTACKSIZE;) 235.8998 Tj
-0 -313.2809 Td
-(1730   ltr\(SEG_TSS << 3\);) 109.2129 Tj
-0 -322.7743 Td
-(1731   popcli\(\);) 69.8962 Tj
-0 -332.2676 Td
-(1732 }) 26.2111 Tj
-0 -341.761 Td
-(1733 ) 21.8426 Tj
-0 -351.2543 Td
-(1734 ) 21.8426 Tj
-0 -360.7477 Td
-(1735 ) 21.8426 Tj
-0 -370.2411 Td
-(1736 ) 21.8426 Tj
-0 -379.7344 Td
-(1737 ) 21.8426 Tj
-0 -389.2278 Td
-(1738 ) 21.8426 Tj
-0 -398.7211 Td
-(1739 ) 21.8426 Tj
-0 -408.2145 Td
-(1740 ) 21.8426 Tj
-0 -417.7079 Td
-(1741 ) 21.8426 Tj
-0 -427.2012 Td
-(1742 ) 21.8426 Tj
-0 -436.6946 Td
-(1743 ) 21.8426 Tj
-0 -446.1879 Td
-(1744 ) 21.8426 Tj
-0 -455.6813 Td
-(1745 ) 21.8426 Tj
-0 -465.1747 Td
-(1746 ) 21.8426 Tj
-0 -474.668 Td
-(1747 ) 21.8426 Tj
-0 -484.1614 Td
-(1748 ) 21.8426 Tj
-0 -493.6547 Td
-(1749 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 17) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/proc.c  Page 4) 161.635 Tj
-0 -28.4801 Td
-(1750 // Look in the process table for an UNUSED proc.) 231.5313 Tj
-0 -37.9735 Td
-(1751 // If found, change state to EMBRYO and return it.) 240.2683 Tj
-0 -47.4668 Td
-(1752 // Otherwise return 0.) 117.9499 Tj
-0 -56.9602 Td
-(1753 static struct proc*) 104.8443 Tj
-0 -66.4535 Td
-(1754 allocproc\(void\)) 87.3703 Tj
-0 -75.9469 Td
-(1755 {) 26.2111 Tj
-0 -85.4403 Td
-(1756   struct proc *p;) 96.1073 Tj
-0 -94.9336 Td
-(1757   char *sp;) 69.8962 Tj
-0 -104.427 Td
-(1758 ) 21.8426 Tj
-0 -113.9203 Td
-(1759   acquire\(&ptable.lock\);) 126.6869 Tj
-0 -123.4137 Td
-(1760   for\(p = ptable.proc; p < &ptable.proc[NPROC]; p++\)) 249.0053 Tj
-0 -132.9071 Td
-(1761     if\(p->state == UNUSED\)) 135.4239 Tj
-0 -142.4004 Td
-(1762       goto found;) 96.1073 Tj
-0 -151.8938 Td
-(1763   release\(&ptable.lock\);) 126.6869 Tj
-0 -161.3871 Td
-(1764   return 0;) 69.8962 Tj
-0 -170.8805 Td
-(1765 ) 21.8426 Tj
-0 -180.3739 Td
-(1766 found:) 48.0537 Tj
-0 -189.8672 Td
-(1767   p->state = EMBRYO;) 109.2129 Tj
-0 -199.3606 Td
-(1768   p->pid = nextpid++;) 113.5814 Tj
-0 -208.8539 Td
-(1769   release\(&ptable.lock\);) 126.6869 Tj
-0 -218.3473 Td
-(1770 ) 21.8426 Tj
-0 -227.8407 Td
-(1771   // Allocate kernel stack if necessary.) 196.5831 Tj
-0 -237.334 Td
-(1772   if\(\(p->kstack = kalloc\(KSTACKSIZE\)\) == 0\){) 214.0572 Tj
-0 -246.8274 Td
-(1773     p->state = UNUSED;) 117.9499 Tj
-0 -256.3207 Td
-(1774     return 0;) 78.6333 Tj
-0 -265.8141 Td
-(1775   }) 34.9481 Tj
-0 -275.3075 Td
-(1776   sp = p->kstack + KSTACKSIZE;) 152.898 Tj
-0 -284.8008 Td
-(1777 ) 21.8426 Tj
-0 -294.2942 Td
-(1778   // Leave room for trap frame.) 157.2665 Tj
-0 -303.7875 Td
-(1779   sp -= sizeof *p->tf;) 117.9499 Tj
-0 -313.2809 Td
-(1780   p->tf = \(struct trapframe*\)sp;) 161.635 Tj
-0 -322.7743 Td
-(1781 ) 21.8426 Tj
-0 -332.2676 Td
-(1782   // Set up new context to start executing at forkret,) 257.7424 Tj
-0 -341.761 Td
-(1783   // which returns to trapret \(see below\).) 205.3202 Tj
-0 -351.2543 Td
-(1784   sp -= 4;) 65.5277 Tj
-0 -360.7477 Td
-(1785   *\(uint*\)sp = \(uint\)trapret;) 148.5295 Tj
-0 -370.2411 Td
-(1786 ) 21.8426 Tj
-0 -379.7344 Td
-(1787   sp -= sizeof *p->context;) 139.7925 Tj
-0 -389.2278 Td
-(1788   p->context = \(struct context*\)sp;) 174.7406 Tj
-0 -398.7211 Td
-(1789   memset\(p->context, 0, sizeof *p->context\);) 214.0572 Tj
-0 -408.2145 Td
-(1790   p->context->eip = \(uint\)forkret;) 170.3721 Tj
-0 -417.7079 Td
-(1791   return p;) 69.8962 Tj
-0 -427.2012 Td
-(1792 }) 26.2111 Tj
-0 -436.6946 Td
-(1793 ) 21.8426 Tj
-0 -446.1879 Td
-(1794 ) 21.8426 Tj
-0 -455.6813 Td
-(1795 ) 21.8426 Tj
-0 -465.1747 Td
-(1796 ) 21.8426 Tj
-0 -474.668 Td
-(1797 ) 21.8426 Tj
-0 -484.1614 Td
-(1798 ) 21.8426 Tj
-0 -493.6547 Td
-(1799 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 17) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 25 25
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/proc.c  Page 5) 161.635 Tj
-0 -28.4801 Td
-(1800 // Set up first user process.) 148.5295 Tj
-0 -37.9735 Td
-(1801 void) 39.3166 Tj
-0 -47.4668 Td
-(1802 userinit\(void\)) 83.0018 Tj
-0 -56.9602 Td
-(1803 {) 26.2111 Tj
-0 -66.4535 Td
-(1804   struct proc *p;) 96.1073 Tj
-0 -75.9469 Td
-(1805   extern char _binary_initcode_start[], _binary_initcode_s\
-ize[];) 301.4275 Tj
-0 -85.4403 Td
-(1806 ) 21.8426 Tj
-0 -94.9336 Td
-(1807   p = allocproc\(\);) 100.4758 Tj
-0 -104.427 Td
-(1808   initproc = p;) 87.3703 Tj
-0 -113.9203 Td
-(1809 ) 21.8426 Tj
-0 -123.4137 Td
-(1810   // Initialize memory from initcode.S) 187.8461 Tj
-0 -132.9071 Td
-(1811   p->sz = PAGE;) 87.3703 Tj
-0 -142.4004 Td
-(1812   p->mem = kalloc\(p->sz\);) 131.0554 Tj
-0 -151.8938 Td
-(1813   memset\(p->mem, 0, p->sz\);) 139.7925 Tj
-0 -161.3871 Td
-(1814   memmove\(p->mem, _binary_initcode_start, \(int\)_binary_\
-initcode_size\);) 327.6386 Tj
-0 -170.8805 Td
-(1815 ) 21.8426 Tj
-0 -180.3739 Td
-(1816   memset\(p->tf, 0, sizeof\(*p->tf\)\);) 174.7406 Tj
-0 -189.8672 Td
-(1817   p->tf->cs = \(SEG_UCODE << 3\) | DPL_USER;) 205.3202 Tj
-0 -199.3606 Td
-(1818   p->tf->ds = \(SEG_UDATA << 3\) | DPL_USER;) 205.3202 Tj
-0 -208.8539 Td
-(1819   p->tf->es = p->tf->ds;) 126.6869 Tj
-0 -218.3473 Td
-(1820   p->tf->ss = p->tf->ds;) 126.6869 Tj
-0 -227.8407 Td
-(1821   p->tf->eflags = FL_IF;) 126.6869 Tj
-0 -237.334 Td
-(1822   p->tf->esp = p->sz;) 113.5814 Tj
-0 -246.8274 Td
-(1823   p->tf->eip = 0;  // beginning of initcode.S) 218.4257 Tj
-0 -256.3207 Td
-(1824 ) 21.8426 Tj
-0 -265.8141 Td
-(1825   safestrcpy\(p->name, "initcode", sizeof\(p->name\)\);) 244.6368 Tj
-0 -275.3075 Td
-(1826   p->cwd = namei\("/"\);) 117.9499 Tj
-0 -284.8008 Td
-(1827 ) 21.8426 Tj
-0 -294.2942 Td
-(1828   p->state = RUNNABLE;) 117.9499 Tj
-0 -303.7875 Td
-(1829 }) 26.2111 Tj
-0 -313.2809 Td
-(1830 ) 21.8426 Tj
-0 -322.7743 Td
-(1831 // Grow current process's memory by n bytes.) 214.0572 Tj
-0 -332.2676 Td
-(1832 // Return 0 on success, -1 on failure.) 187.8461 Tj
-0 -341.761 Td
-(1833 int) 34.9481 Tj
-0 -351.2543 Td
-(1834 growproc\(int n\)) 87.3703 Tj
-0 -360.7477 Td
-(1835 {) 26.2111 Tj
-0 -370.2411 Td
-(1836   char *newmem;) 87.3703 Tj
-0 -379.7344 Td
-(1837 ) 21.8426 Tj
-0 -389.2278 Td
-(1838   newmem = kalloc\(proc->sz + n\);) 161.635 Tj
-0 -398.7211 Td
-(1839   if\(newmem == 0\)) 96.1073 Tj
-0 -408.2145 Td
-(1840     return -1;) 83.0018 Tj
-0 -417.7079 Td
-(1841   memmove\(newmem, proc->mem, proc->sz\);) 192.2146 Tj
-0 -427.2012 Td
-(1842   memset\(newmem + proc->sz, 0, n\);) 170.3721 Tj
-0 -436.6946 Td
-(1843   kfree\(proc->mem, proc->sz\);) 148.5295 Tj
-0 -446.1879 Td
-(1844   proc->mem = newmem;) 113.5814 Tj
-0 -455.6813 Td
-(1845   proc->sz += n;) 91.7388 Tj
-0 -465.1747 Td
-(1846   usegment\(\);) 78.6333 Tj
-0 -474.668 Td
-(1847   return 0;) 69.8962 Tj
-0 -484.1614 Td
-(1848 }) 26.2111 Tj
-0 -493.6547 Td
-(1849 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 18) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/proc.c  Page 6) 161.635 Tj
-0 -28.4801 Td
-(1850 // Create a new process copying p as the parent.) 231.5313 Tj
-0 -37.9735 Td
-(1851 // Sets up stack to return as if from system call.) 240.2683 Tj
-0 -47.4668 Td
-(1852 // Caller must set state of returned proc to RUNNABLE.) 257.7424 Tj
-0 -56.9602 Td
-(1853 int) 34.9481 Tj
-0 -66.4535 Td
-(1854 fork\(void\)) 65.5277 Tj
-0 -75.9469 Td
-(1855 {) 26.2111 Tj
-0 -85.4403 Td
-(1856   int i, pid;) 78.6333 Tj
-0 -94.9336 Td
-(1857   struct proc *np;) 100.4758 Tj
-0 -104.427 Td
-(1858 ) 21.8426 Tj
-0 -113.9203 Td
-(1859   // Allocate process.) 117.9499 Tj
-0 -123.4137 Td
-(1860   if\(\(np = allocproc\(\)\) == 0\)) 148.5295 Tj
-0 -132.9071 Td
-(1861     return -1;) 83.0018 Tj
-0 -142.4004 Td
-(1862 ) 21.8426 Tj
-0 -151.8938 Td
-(1863   // Copy process state from p.) 157.2665 Tj
-0 -161.3871 Td
-(1864   np->sz = proc->sz;) 109.2129 Tj
-0 -170.8805 Td
-(1865   if\(\(np->mem = kalloc\(np->sz\)\) == 0\){) 187.8461 Tj
-0 -180.3739 Td
-(1866     kfree\(np->kstack, KSTACKSIZE\);) 170.3721 Tj
-0 -189.8672 Td
-(1867     np->kstack = 0;) 104.8443 Tj
-0 -199.3606 Td
-(1868     np->state = UNUSED;) 122.3184 Tj
-0 -208.8539 Td
-(1869     return -1;) 83.0018 Tj
-0 -218.3473 Td
-(1870   }) 34.9481 Tj
-0 -227.8407 Td
-(1871   memmove\(np->mem, proc->mem, np->sz\);) 187.8461 Tj
-0 -237.334 Td
-(1872   np->parent = proc;) 109.2129 Tj
-0 -246.8274 Td
-(1873   *np->tf = *proc->tf;) 117.9499 Tj
-0 -256.3207 Td
-(1874 ) 21.8426 Tj
-0 -265.8141 Td
-(1875   // Clear %eax so that fork returns 0 in the child.) 249.0053 Tj
-0 -275.3075 Td
-(1876   np->tf->eax = 0;) 100.4758 Tj
-0 -284.8008 Td
-(1877 ) 21.8426 Tj
-0 -294.2942 Td
-(1878   for\(i = 0; i < NOFILE; i++\)) 148.5295 Tj
-0 -303.7875 Td
-(1879     if\(proc->ofile[i]\)) 117.9499 Tj
-0 -313.2809 Td
-(1880       np->ofile[i] = filedup\(proc->ofile[i]\);) 218.4257 Tj
-0 -322.7743 Td
-(1881   np->cwd = idup\(proc->cwd\);) 144.161 Tj
-0 -332.2676 Td
-(1882 ) 21.8426 Tj
-0 -341.761 Td
-(1883   pid = np->pid;) 91.7388 Tj
-0 -351.2543 Td
-(1884   np->state = RUNNABLE;) 122.3184 Tj
-0 -360.7477 Td
-(1885 ) 21.8426 Tj
-0 -370.2411 Td
-(1886   return pid;) 78.6333 Tj
-0 -379.7344 Td
-(1887 }) 26.2111 Tj
-0 -389.2278 Td
-(1888 ) 21.8426 Tj
-0 -398.7211 Td
-(1889 ) 21.8426 Tj
-0 -408.2145 Td
-(1890 ) 21.8426 Tj
-0 -417.7079 Td
-(1891 ) 21.8426 Tj
-0 -427.2012 Td
-(1892 ) 21.8426 Tj
-0 -436.6946 Td
-(1893 ) 21.8426 Tj
-0 -446.1879 Td
-(1894 ) 21.8426 Tj
-0 -455.6813 Td
-(1895 ) 21.8426 Tj
-0 -465.1747 Td
-(1896 ) 21.8426 Tj
-0 -474.668 Td
-(1897 ) 21.8426 Tj
-0 -484.1614 Td
-(1898 ) 21.8426 Tj
-0 -493.6547 Td
-(1899 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 18) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 26 26
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/proc.c  Page 7) 161.635 Tj
-0 -28.4801 Td
-(1900 // Per-CPU process scheduler.) 148.5295 Tj
-0 -37.9735 Td
-(1901 // Each CPU calls scheduler\(\) after setting itself up.) 257.7424 Tj
-0 -47.4668 Td
-(1902 // Scheduler never returns.  It loops, doing:) 218.4257 Tj
-0 -56.9602 Td
-(1903 //  - choose a process to run) 148.5295 Tj
-0 -66.4535 Td
-(1904 //  - swtch to start running that process) 200.9517 Tj
-0 -75.9469 Td
-(1905 //  - eventually that process transfers control) 227.1628 Tj
-0 -85.4403 Td
-(1906 //      via swtch back to the scheduler.) 196.5831 Tj
-0 -94.9336 Td
-(1907 void) 39.3166 Tj
-0 -104.427 Td
-(1908 scheduler\(void\)) 87.3703 Tj
-0 -113.9203 Td
-(1909 {) 26.2111 Tj
-0 -123.4137 Td
-(1910   struct proc *p;) 96.1073 Tj
-0 -132.9071 Td
-(1911 ) 21.8426 Tj
-0 -142.4004 Td
-(1912   for\(;;\){) 65.5277 Tj
-0 -151.8938 Td
-(1913     // Enable interrupts on this processor.) 209.6887 Tj
-0 -161.3871 Td
-(1914     sti\(\);) 65.5277 Tj
-0 -170.8805 Td
-(1915 ) 21.8426 Tj
-0 -180.3739 Td
-(1916     // Loop over process table looking for process to run.) 275.2164 Tj
-0 -189.8672 Td
-(1917     acquire\(&ptable.lock\);) 135.4239 Tj
-0 -199.3606 Td
-(1918     for\(p = ptable.proc; p < &ptable.proc[NPROC]; p++\){) 262.1109 Tj
-0 -208.8539 Td
-(1919       if\(p->state != RUNNABLE\)) 152.898 Tj
-0 -218.3473 Td
-(1920         continue;) 96.1073 Tj
-0 -227.8407 Td
-(1921 ) 21.8426 Tj
-0 -237.334 Td
-(1922       // Switch to chosen process.  It is the process's jo\
-b) 279.5849 Tj
-0 -246.8274 Td
-(1923       // to release ptable.lock and then reacquire it) 253.3738 Tj
-0 -256.3207 Td
-(1924       // before jumping back to us.) 174.7406 Tj
-0 -265.8141 Td
-(1925       proc = p;) 87.3703 Tj
-0 -275.3075 Td
-(1926       usegment\(\);) 96.1073 Tj
-0 -284.8008 Td
-(1927       p->state = RUNNING;) 131.0554 Tj
-0 -294.2942 Td
-(1928       swtch\(&cpu->scheduler, proc->context\);) 214.0572 Tj
-0 -303.7875 Td
-(1929 ) 21.8426 Tj
-0 -313.2809 Td
-(1930       // Process is done running for now.) 200.9517 Tj
-0 -322.7743 Td
-(1931       // It should have changed its p->state before coming\
- back.) 301.4275 Tj
-0 -332.2676 Td
-(1932       proc = 0;) 87.3703 Tj
-0 -341.761 Td
-(1933     }) 43.6851 Tj
-0 -351.2543 Td
-(1934     release\(&ptable.lock\);) 135.4239 Tj
-0 -360.7477 Td
-(1935 ) 21.8426 Tj
-0 -370.2411 Td
-(1936   }) 34.9481 Tj
-0 -379.7344 Td
-(1937 }) 26.2111 Tj
-0 -389.2278 Td
-(1938 ) 21.8426 Tj
-0 -398.7211 Td
-(1939 ) 21.8426 Tj
-0 -408.2145 Td
-(1940 ) 21.8426 Tj
-0 -417.7079 Td
-(1941 ) 21.8426 Tj
-0 -427.2012 Td
-(1942 ) 21.8426 Tj
-0 -436.6946 Td
-(1943 ) 21.8426 Tj
-0 -446.1879 Td
-(1944 ) 21.8426 Tj
-0 -455.6813 Td
-(1945 ) 21.8426 Tj
-0 -465.1747 Td
-(1946 ) 21.8426 Tj
-0 -474.668 Td
-(1947 ) 21.8426 Tj
-0 -484.1614 Td
-(1948 ) 21.8426 Tj
-0 -493.6547 Td
-(1949 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 19) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/proc.c  Page 8) 161.635 Tj
-0 -28.4801 Td
-(1950 // Enter scheduler.  Must hold only ptable.lock) 227.1628 Tj
-0 -37.9735 Td
-(1951 // and have changed proc->state.) 161.635 Tj
-0 -47.4668 Td
-(1952 void) 39.3166 Tj
-0 -56.9602 Td
-(1953 sched\(void\)) 69.8962 Tj
-0 -66.4535 Td
-(1954 {) 26.2111 Tj
-0 -75.9469 Td
-(1955   int intena;) 78.6333 Tj
-0 -85.4403 Td
-(1956 ) 21.8426 Tj
-0 -94.9336 Td
-(1957   if\(!holding\(&ptable.lock\)\)) 144.161 Tj
-0 -104.427 Td
-(1958     panic\("sched ptable.lock"\);) 157.2665 Tj
-0 -113.9203 Td
-(1959   if\(cpu->ncli != 1\)) 109.2129 Tj
-0 -123.4137 Td
-(1960     panic\("sched locks"\);) 131.0554 Tj
-0 -132.9071 Td
-(1961   if\(proc->state == RUNNING\)) 144.161 Tj
-0 -142.4004 Td
-(1962     panic\("sched running"\);) 139.7925 Tj
-0 -151.8938 Td
-(1963   if\(readeflags\(\)&FL_IF\)) 126.6869 Tj
-0 -161.3871 Td
-(1964     panic\("sched interruptible"\);) 166.0035 Tj
-0 -170.8805 Td
-(1965 ) 21.8426 Tj
-0 -180.3739 Td
-(1966   intena = cpu->intena;) 122.3184 Tj
-0 -189.8672 Td
-(1967   swtch\(&proc->context, cpu->scheduler\);) 196.5831 Tj
-0 -199.3606 Td
-(1968   cpu->intena = intena;) 122.3184 Tj
-0 -208.8539 Td
-(1969 }) 26.2111 Tj
-0 -218.3473 Td
-(1970 ) 21.8426 Tj
-0 -227.8407 Td
-(1971 // Give up the CPU for one scheduling round.) 214.0572 Tj
-0 -237.334 Td
-(1972 void) 39.3166 Tj
-0 -246.8274 Td
-(1973 yield\(void\)) 69.8962 Tj
-0 -256.3207 Td
-(1974 {) 26.2111 Tj
-0 -265.8141 Td
-(1975   acquire\(&ptable.lock\);  ) 135.4239 Tj
-0 -275.3075 Td
-(1976   proc->state = RUNNABLE;) 131.0554 Tj
-0 -284.8008 Td
-(1977   sched\(\);) 65.5277 Tj
-0 -294.2942 Td
-(1978   release\(&ptable.lock\);) 126.6869 Tj
-0 -303.7875 Td
-(1979 }) 26.2111 Tj
-0 -313.2809 Td
-(1980 ) 21.8426 Tj
-0 -322.7743 Td
-(1981 // A fork child's very first scheduling by scheduler\(\)) 257.7424 Tj
-0 -332.2676 Td
-(1982 // will swtch here.  "Return" to user space.) 214.0572 Tj
-0 -341.761 Td
-(1983 void) 39.3166 Tj
-0 -351.2543 Td
-(1984 forkret\(void\)) 78.6333 Tj
-0 -360.7477 Td
-(1985 {) 26.2111 Tj
-0 -370.2411 Td
-(1986   // Still holding ptable.lock from scheduler.) 222.7942 Tj
-0 -379.7344 Td
-(1987   release\(&ptable.lock\);) 126.6869 Tj
-0 -389.2278 Td
-(1988 ) 21.8426 Tj
-0 -398.7211 Td
-(1989   // Return to "caller", actually trapret \(see allocproc\)\
-.) 275.2164 Tj
-0 -408.2145 Td
-(1990 }) 26.2111 Tj
-0 -417.7079 Td
-(1991 ) 21.8426 Tj
-0 -427.2012 Td
-(1992 ) 21.8426 Tj
-0 -436.6946 Td
-(1993 ) 21.8426 Tj
-0 -446.1879 Td
-(1994 ) 21.8426 Tj
-0 -455.6813 Td
-(1995 ) 21.8426 Tj
-0 -465.1747 Td
-(1996 ) 21.8426 Tj
-0 -474.668 Td
-(1997 ) 21.8426 Tj
-0 -484.1614 Td
-(1998 ) 21.8426 Tj
-0 -493.6547 Td
-(1999 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 19) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 27 27
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/proc.c  Page 9) 161.635 Tj
-0 -28.4801 Td
-(2000 // Atomically release lock and sleep on chan.) 218.4257 Tj
-0 -37.9735 Td
-(2001 // Reacquires lock when awakened.) 166.0035 Tj
-0 -47.4668 Td
-(2002 void) 39.3166 Tj
-0 -56.9602 Td
-(2003 sleep\(void *chan, struct spinlock *lk\)) 187.8461 Tj
-0 -66.4535 Td
-(2004 {) 26.2111 Tj
-0 -75.9469 Td
-(2005   if\(proc == 0\)) 87.3703 Tj
-0 -85.4403 Td
-(2006     panic\("sleep"\);) 104.8443 Tj
-0 -94.9336 Td
-(2007 ) 21.8426 Tj
-0 -104.427 Td
-(2008   if\(lk == 0\)) 78.6333 Tj
-0 -113.9203 Td
-(2009     panic\("sleep without lk"\);) 152.898 Tj
-0 -123.4137 Td
-(2010 ) 21.8426 Tj
-0 -132.9071 Td
-(2011   // Must acquire ptable.lock in order to) 200.9517 Tj
-0 -142.4004 Td
-(2012   // change p->state and then call sched.) 200.9517 Tj
-0 -151.8938 Td
-(2013   // Once we hold ptable.lock, we can be) 196.5831 Tj
-0 -161.3871 Td
-(2014   // guaranteed that we won't miss any wakeup) 218.4257 Tj
-0 -170.8805 Td
-(2015   // \(wakeup runs with ptable.lock locked\),) 209.6887 Tj
-0 -180.3739 Td
-(2016   // so it's okay to release lk.) 161.635 Tj
-0 -189.8672 Td
-(2017   if\(lk != &ptable.lock\){  ) 139.7925 Tj
-0 -199.3606 Td
-(2018     acquire\(&ptable.lock\);  ) 144.161 Tj
-0 -208.8539 Td
-(2019     release\(lk\);) 91.7388 Tj
-0 -218.3473 Td
-(2020   }) 34.9481 Tj
-0 -227.8407 Td
-(2021 ) 21.8426 Tj
-0 -237.334 Td
-(2022   // Go to sleep.) 96.1073 Tj
-0 -246.8274 Td
-(2023   proc->chan = chan;) 109.2129 Tj
-0 -256.3207 Td
-(2024   proc->state = SLEEPING;) 131.0554 Tj
-0 -265.8141 Td
-(2025   sched\(\);) 65.5277 Tj
-0 -275.3075 Td
-(2026 ) 21.8426 Tj
-0 -284.8008 Td
-(2027   // Tidy up.) 78.6333 Tj
-0 -294.2942 Td
-(2028   proc->chan = 0;) 96.1073 Tj
-0 -303.7875 Td
-(2029 ) 21.8426 Tj
-0 -313.2809 Td
-(2030   // Reacquire original lock.) 148.5295 Tj
-0 -322.7743 Td
-(2031   if\(lk != &ptable.lock\){  ) 139.7925 Tj
-0 -332.2676 Td
-(2032     release\(&ptable.lock\);) 135.4239 Tj
-0 -341.761 Td
-(2033     acquire\(lk\);) 91.7388 Tj
-0 -351.2543 Td
-(2034   }) 34.9481 Tj
-0 -360.7477 Td
-(2035 }) 26.2111 Tj
-0 -370.2411 Td
-(2036 ) 21.8426 Tj
-0 -379.7344 Td
-(2037 ) 21.8426 Tj
-0 -389.2278 Td
-(2038 ) 21.8426 Tj
-0 -398.7211 Td
-(2039 ) 21.8426 Tj
-0 -408.2145 Td
-(2040 ) 21.8426 Tj
-0 -417.7079 Td
-(2041 ) 21.8426 Tj
-0 -427.2012 Td
-(2042 ) 21.8426 Tj
-0 -436.6946 Td
-(2043 ) 21.8426 Tj
-0 -446.1879 Td
-(2044 ) 21.8426 Tj
-0 -455.6813 Td
-(2045 ) 21.8426 Tj
-0 -465.1747 Td
-(2046 ) 21.8426 Tj
-0 -474.668 Td
-(2047 ) 21.8426 Tj
-0 -484.1614 Td
-(2048 ) 21.8426 Tj
-0 -493.6547 Td
-(2049 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 20) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/proc.c  Page 10) 166.0035 Tj
-0 -28.4801 Td
-(2050 // Wake up all processes sleeping on chan.) 205.3202 Tj
-0 -37.9735 Td
-(2051 // The ptable lock must be held.) 161.635 Tj
-0 -47.4668 Td
-(2052 static void) 69.8962 Tj
-0 -56.9602 Td
-(2053 wakeup1\(void *chan\)) 104.8443 Tj
-0 -66.4535 Td
-(2054 {) 26.2111 Tj
-0 -75.9469 Td
-(2055   struct proc *p;) 96.1073 Tj
-0 -85.4403 Td
-(2056 ) 21.8426 Tj
-0 -94.9336 Td
-(2057   for\(p = ptable.proc; p < &ptable.proc[NPROC]; p++\)) 249.0053 Tj
-0 -104.427 Td
-(2058     if\(p->state == SLEEPING && p->chan == chan\)) 227.1628 Tj
-0 -113.9203 Td
-(2059       p->state = RUNNABLE;) 135.4239 Tj
-0 -123.4137 Td
-(2060 }) 26.2111 Tj
-0 -132.9071 Td
-(2061 ) 21.8426 Tj
-0 -142.4004 Td
-(2062 // Wake up all processes sleeping on chan.) 205.3202 Tj
-0 -151.8938 Td
-(2063 void) 39.3166 Tj
-0 -161.3871 Td
-(2064 wakeup\(void *chan\)) 100.4758 Tj
-0 -170.8805 Td
-(2065 {) 26.2111 Tj
-0 -180.3739 Td
-(2066   acquire\(&ptable.lock\);) 126.6869 Tj
-0 -189.8672 Td
-(2067   wakeup1\(chan\);) 91.7388 Tj
-0 -199.3606 Td
-(2068   release\(&ptable.lock\);) 126.6869 Tj
-0 -208.8539 Td
-(2069 }) 26.2111 Tj
-0 -218.3473 Td
-(2070 ) 21.8426 Tj
-0 -227.8407 Td
-(2071 // Kill the process with the given pid.) 192.2146 Tj
-0 -237.334 Td
-(2072 // Process won't exit until it returns) 187.8461 Tj
-0 -246.8274 Td
-(2073 // to user space \(see trap in trap.c\).) 187.8461 Tj
-0 -256.3207 Td
-(2074 int) 34.9481 Tj
-0 -265.8141 Td
-(2075 kill\(int pid\)) 78.6333 Tj
-0 -275.3075 Td
-(2076 {) 26.2111 Tj
-0 -284.8008 Td
-(2077   struct proc *p;) 96.1073 Tj
-0 -294.2942 Td
-(2078 ) 21.8426 Tj
-0 -303.7875 Td
-(2079   acquire\(&ptable.lock\);) 126.6869 Tj
-0 -313.2809 Td
-(2080   for\(p = ptable.proc; p < &ptable.proc[NPROC]; p++\){) 253.3738 Tj
-0 -322.7743 Td
-(2081     if\(p->pid == pid\){) 117.9499 Tj
-0 -332.2676 Td
-(2082       p->killed = 1;) 109.2129 Tj
-0 -341.761 Td
-(2083       // Wake process from sleep if necessary.) 222.7942 Tj
-0 -351.2543 Td
-(2084       if\(p->state == SLEEPING\)) 152.898 Tj
-0 -360.7477 Td
-(2085         p->state = RUNNABLE;) 144.161 Tj
-0 -370.2411 Td
-(2086       release\(&ptable.lock\);) 144.161 Tj
-0 -379.7344 Td
-(2087       return 0;) 87.3703 Tj
-0 -389.2278 Td
-(2088     }) 43.6851 Tj
-0 -398.7211 Td
-(2089   }) 34.9481 Tj
-0 -408.2145 Td
-(2090   release\(&ptable.lock\);) 126.6869 Tj
-0 -417.7079 Td
-(2091   return -1;) 74.2647 Tj
-0 -427.2012 Td
-(2092 }) 26.2111 Tj
-0 -436.6946 Td
-(2093 ) 21.8426 Tj
-0 -446.1879 Td
-(2094 ) 21.8426 Tj
-0 -455.6813 Td
-(2095 ) 21.8426 Tj
-0 -465.1747 Td
-(2096 ) 21.8426 Tj
-0 -474.668 Td
-(2097 ) 21.8426 Tj
-0 -484.1614 Td
-(2098 ) 21.8426 Tj
-0 -493.6547 Td
-(2099 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 20) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 28 28
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/proc.c  Page 11) 166.0035 Tj
-0 -28.4801 Td
-(2100 // Exit the current process.  Does not return.) 222.7942 Tj
-0 -37.9735 Td
-(2101 // An exited process remains in the zombie state) 231.5313 Tj
-0 -47.4668 Td
-(2102 // until its parent calls wait\(\) to find out it exited.) 262.1109 Tj
-0 -56.9602 Td
-(2103 void) 39.3166 Tj
-0 -66.4535 Td
-(2104 exit\(void\)) 65.5277 Tj
-0 -75.9469 Td
-(2105 {) 26.2111 Tj
-0 -85.4403 Td
-(2106   struct proc *p;) 96.1073 Tj
-0 -94.9336 Td
-(2107   int fd;) 61.1592 Tj
-0 -104.427 Td
-(2108 ) 21.8426 Tj
-0 -113.9203 Td
-(2109   if\(proc == initproc\)) 117.9499 Tj
-0 -123.4137 Td
-(2110     panic\("init exiting"\);) 135.4239 Tj
-0 -132.9071 Td
-(2111 ) 21.8426 Tj
-0 -142.4004 Td
-(2112   // Close all open files.) 135.4239 Tj
-0 -151.8938 Td
-(2113   for\(fd = 0; fd < NOFILE; fd++\){) 166.0035 Tj
-0 -161.3871 Td
-(2114     if\(proc->ofile[fd]\){) 126.6869 Tj
-0 -170.8805 Td
-(2115       fileclose\(proc->ofile[fd]\);) 166.0035 Tj
-0 -180.3739 Td
-(2116       proc->ofile[fd] = 0;) 135.4239 Tj
-0 -189.8672 Td
-(2117     }) 43.6851 Tj
-0 -199.3606 Td
-(2118   }) 34.9481 Tj
-0 -208.8539 Td
-(2119 ) 21.8426 Tj
-0 -218.3473 Td
-(2120   iput\(proc->cwd\);) 100.4758 Tj
-0 -227.8407 Td
-(2121   proc->cwd = 0;) 91.7388 Tj
-0 -237.334 Td
-(2122 ) 21.8426 Tj
-0 -246.8274 Td
-(2123   acquire\(&ptable.lock\);) 126.6869 Tj
-0 -256.3207 Td
-(2124 ) 21.8426 Tj
-0 -265.8141 Td
-(2125   // Parent might be sleeping in wait\(\).) 196.5831 Tj
-0 -275.3075 Td
-(2126   wakeup1\(proc->parent\);) 126.6869 Tj
-0 -284.8008 Td
-(2127 ) 21.8426 Tj
-0 -294.2942 Td
-(2128   // Pass abandoned children to init.) 183.4776 Tj
-0 -303.7875 Td
-(2129   for\(p = ptable.proc; p < &ptable.proc[NPROC]; p++\){) 253.3738 Tj
-0 -313.2809 Td
-(2130     if\(p->parent == proc\){) 135.4239 Tj
-0 -322.7743 Td
-(2131       p->parent = initproc;) 139.7925 Tj
-0 -332.2676 Td
-(2132       if\(p->state == ZOMBIE\)) 144.161 Tj
-0 -341.761 Td
-(2133         wakeup1\(initproc\);) 135.4239 Tj
-0 -351.2543 Td
-(2134     }) 43.6851 Tj
-0 -360.7477 Td
-(2135   }) 34.9481 Tj
-0 -370.2411 Td
-(2136 ) 21.8426 Tj
-0 -379.7344 Td
-(2137   // Jump into the scheduler, never to return.) 222.7942 Tj
-0 -389.2278 Td
-(2138   proc->state = ZOMBIE;) 122.3184 Tj
-0 -398.7211 Td
-(2139   sched\(\);) 65.5277 Tj
-0 -408.2145 Td
-(2140   panic\("zombie exit"\);) 122.3184 Tj
-0 -417.7079 Td
-(2141 }) 26.2111 Tj
-0 -427.2012 Td
-(2142 ) 21.8426 Tj
-0 -436.6946 Td
-(2143 ) 21.8426 Tj
-0 -446.1879 Td
-(2144 ) 21.8426 Tj
-0 -455.6813 Td
-(2145 ) 21.8426 Tj
-0 -465.1747 Td
-(2146 ) 21.8426 Tj
-0 -474.668 Td
-(2147 ) 21.8426 Tj
-0 -484.1614 Td
-(2148 ) 21.8426 Tj
-0 -493.6547 Td
-(2149 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 21) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/proc.c  Page 12) 166.0035 Tj
-0 -28.4801 Td
-(2150 // Wait for a child process to exit and return its pid.) 262.1109 Tj
-0 -37.9735 Td
-(2151 // Return -1 if this process has no children.) 218.4257 Tj
-0 -47.4668 Td
-(2152 int) 34.9481 Tj
-0 -56.9602 Td
-(2153 wait\(void\)) 65.5277 Tj
-0 -66.4535 Td
-(2154 {) 26.2111 Tj
-0 -75.9469 Td
-(2155   struct proc *p;) 96.1073 Tj
-0 -85.4403 Td
-(2156   int havekids, pid;) 109.2129 Tj
-0 -94.9336 Td
-(2157 ) 21.8426 Tj
-0 -104.427 Td
-(2158   acquire\(&ptable.lock\);) 126.6869 Tj
-0 -113.9203 Td
-(2159   for\(;;\){) 65.5277 Tj
-0 -123.4137 Td
-(2160     // Scan through table looking for zombie children.) 257.7424 Tj
-0 -132.9071 Td
-(2161     havekids = 0;) 96.1073 Tj
-0 -142.4004 Td
-(2162     for\(p = ptable.proc; p < &ptable.proc[NPROC]; p++\){) 262.1109 Tj
-0 -151.8938 Td
-(2163       if\(p->parent != proc\)) 139.7925 Tj
-0 -161.3871 Td
-(2164         continue;) 96.1073 Tj
-0 -170.8805 Td
-(2165       havekids = 1;) 104.8443 Tj
-0 -180.3739 Td
-(2166       if\(p->state == ZOMBIE\){) 148.5295 Tj
-0 -189.8672 Td
-(2167         // Found one.) 113.5814 Tj
-0 -199.3606 Td
-(2168         pid = p->pid;) 113.5814 Tj
-0 -208.8539 Td
-(2169         kfree\(p->mem, p->sz\);) 148.5295 Tj
-0 -218.3473 Td
-(2170         kfree\(p->kstack, KSTACKSIZE\);) 183.4776 Tj
-0 -227.8407 Td
-(2171         p->state = UNUSED;) 135.4239 Tj
-0 -237.334 Td
-(2172         p->pid = 0;) 104.8443 Tj
-0 -246.8274 Td
-(2173         p->parent = 0;) 117.9499 Tj
-0 -256.3207 Td
-(2174         p->name[0] = 0;) 122.3184 Tj
-0 -265.8141 Td
-(2175         p->killed = 0;) 117.9499 Tj
-0 -275.3075 Td
-(2176         release\(&ptable.lock\);) 152.898 Tj
-0 -284.8008 Td
-(2177         return pid;) 104.8443 Tj
-0 -294.2942 Td
-(2178       }) 52.4222 Tj
-0 -303.7875 Td
-(2179     }) 43.6851 Tj
-0 -313.2809 Td
-(2180 ) 21.8426 Tj
-0 -322.7743 Td
-(2181     // No point waiting if we don't have any children.) 257.7424 Tj
-0 -332.2676 Td
-(2182     if\(!havekids || proc->killed\){) 170.3721 Tj
-0 -341.761 Td
-(2183       release\(&ptable.lock\);) 144.161 Tj
-0 -351.2543 Td
-(2184       return -1;) 91.7388 Tj
-0 -360.7477 Td
-(2185     }) 43.6851 Tj
-0 -370.2411 Td
-(2186 ) 21.8426 Tj
-0 -379.7344 Td
-(2187     // Wait for children to exit.  \(See wakeup1 call in p\
-roc_exit.\)) 314.533 Tj
-0 -389.2278 Td
-(2188     sleep\(proc, &ptable.lock\);  ) 161.635 Tj
-0 -398.7211 Td
-(2189   }) 34.9481 Tj
-0 -408.2145 Td
-(2190 }) 26.2111 Tj
-0 -417.7079 Td
-(2191 ) 21.8426 Tj
-0 -427.2012 Td
-(2192 ) 21.8426 Tj
-0 -436.6946 Td
-(2193 ) 21.8426 Tj
-0 -446.1879 Td
-(2194 ) 21.8426 Tj
-0 -455.6813 Td
-(2195 ) 21.8426 Tj
-0 -465.1747 Td
-(2196 ) 21.8426 Tj
-0 -474.668 Td
-(2197 ) 21.8426 Tj
-0 -484.1614 Td
-(2198 ) 21.8426 Tj
-0 -493.6547 Td
-(2199 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 21) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 29 29
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/swtch.S  Page 1) 166.0035 Tj
-0 -28.4801 Td
-(2200 # Context switch) 91.7388 Tj
-0 -37.9735 Td
-(2201 #) 26.2111 Tj
-0 -47.4668 Td
-(2202 #   void swtch\(struct context **old, struct context *new\)\
-;) 275.2164 Tj
-0 -56.9602 Td
-(2203 #) 26.2111 Tj
-0 -66.4535 Td
-(2204 # Save current register context in old) 187.8461 Tj
-0 -75.9469 Td
-(2205 # and then load register context from new.) 205.3202 Tj
-0 -85.4403 Td
-(2206 ) 21.8426 Tj
-0 -94.9336 Td
-(2207 .globl swtch) 74.2647 Tj
-0 -104.427 Td
-(2208 swtch:) 48.0537 Tj
-0 -113.9203 Td
-(2209   movl 4\(%esp\), %eax) 109.2129 Tj
-0 -123.4137 Td
-(2210   movl 8\(%esp\), %edx) 109.2129 Tj
-0 -132.9071 Td
-(2211 ) 21.8426 Tj
-0 -142.4004 Td
-(2212   # Save old callee-save registers) 170.3721 Tj
-0 -151.8938 Td
-(2213   pushl %ebp) 74.2647 Tj
-0 -161.3871 Td
-(2214   pushl %ebx) 74.2647 Tj
-0 -170.8805 Td
-(2215   pushl %esi) 74.2647 Tj
-0 -180.3739 Td
-(2216   pushl %edi) 74.2647 Tj
-0 -189.8672 Td
-(2217 ) 21.8426 Tj
-0 -199.3606 Td
-(2218   # Switch stacks) 96.1073 Tj
-0 -208.8539 Td
-(2219   movl %esp, \(%eax\)) 104.8443 Tj
-0 -218.3473 Td
-(2220   movl %edx, %esp) 96.1073 Tj
-0 -227.8407 Td
-(2221 ) 21.8426 Tj
-0 -237.334 Td
-(2222   # Load new callee-save registers) 170.3721 Tj
-0 -246.8274 Td
-(2223   popl %edi) 69.8962 Tj
-0 -256.3207 Td
-(2224   popl %esi) 69.8962 Tj
-0 -265.8141 Td
-(2225   popl %ebx) 69.8962 Tj
-0 -275.3075 Td
-(2226   popl %ebp) 69.8962 Tj
-0 -284.8008 Td
-(2227   ret) 43.6851 Tj
-0 -294.2942 Td
-(2228 ) 21.8426 Tj
-0 -303.7875 Td
-(2229 ) 21.8426 Tj
-0 -313.2809 Td
-(2230 ) 21.8426 Tj
-0 -322.7743 Td
-(2231 ) 21.8426 Tj
-0 -332.2676 Td
-(2232 ) 21.8426 Tj
-0 -341.761 Td
-(2233 ) 21.8426 Tj
-0 -351.2543 Td
-(2234 ) 21.8426 Tj
-0 -360.7477 Td
-(2235 ) 21.8426 Tj
-0 -370.2411 Td
-(2236 ) 21.8426 Tj
-0 -379.7344 Td
-(2237 ) 21.8426 Tj
-0 -389.2278 Td
-(2238 ) 21.8426 Tj
-0 -398.7211 Td
-(2239 ) 21.8426 Tj
-0 -408.2145 Td
-(2240 ) 21.8426 Tj
-0 -417.7079 Td
-(2241 ) 21.8426 Tj
-0 -427.2012 Td
-(2242 ) 21.8426 Tj
-0 -436.6946 Td
-(2243 ) 21.8426 Tj
-0 -446.1879 Td
-(2244 ) 21.8426 Tj
-0 -455.6813 Td
-(2245 ) 21.8426 Tj
-0 -465.1747 Td
-(2246 ) 21.8426 Tj
-0 -474.668 Td
-(2247 ) 21.8426 Tj
-0 -484.1614 Td
-(2248 ) 21.8426 Tj
-0 -493.6547 Td
-(2249 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 22) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/kalloc.c  Page 1) 170.3721 Tj
-0 -28.4801 Td
-(2250 // Physical memory allocator, intended to allocate) 240.2683 Tj
-0 -37.9735 Td
-(2251 // memory for user processes. Allocates in 4096-byte "page\
-s".) 288.322 Tj
-0 -47.4668 Td
-(2252 // Free list is kept sorted and combines adjacent pages in\
-to) 283.9534 Tj
-0 -56.9602 Td
-(2253 // long runs, to make it easier to allocate big segments.) 270.8479 Tj
-0 -66.4535 Td
-(2254 // One reason the page size is 4k is that the x86 segment \
-size) 292.6905 Tj
-0 -75.9469 Td
-(2255 // granularity is 4k.) 113.5814 Tj
-0 -85.4403 Td
-(2256 ) 21.8426 Tj
-0 -94.9336 Td
-(2257 #include "types.h") 100.4758 Tj
-0 -104.427 Td
-(2258 #include "defs.h") 96.1073 Tj
-0 -113.9203 Td
-(2259 #include "param.h") 100.4758 Tj
-0 -123.4137 Td
-(2260 #include "spinlock.h") 113.5814 Tj
-0 -132.9071 Td
-(2261 ) 21.8426 Tj
-0 -142.4004 Td
-(2262 struct run {) 74.2647 Tj
-0 -151.8938 Td
-(2263   struct run *next;) 104.8443 Tj
-0 -161.3871 Td
-(2264   int len; // bytes) 104.8443 Tj
-0 -170.8805 Td
-(2265 };) 30.5796 Tj
-0 -180.3739 Td
-(2266 ) 21.8426 Tj
-0 -189.8672 Td
-(2267 struct {) 56.7907 Tj
-0 -199.3606 Td
-(2268   struct spinlock lock;) 122.3184 Tj
-0 -208.8539 Td
-(2269   struct run *freelist;) 122.3184 Tj
-0 -218.3473 Td
-(2270 } kmem;) 52.4222 Tj
-0 -227.8407 Td
-(2271 ) 21.8426 Tj
-0 -237.334 Td
-(2272 // Initialize free list of physical pages.) 205.3202 Tj
-0 -246.8274 Td
-(2273 // This code cheats by just considering one megabyte of) 262.1109 Tj
-0 -256.3207 Td
-(2274 // pages after end.  Real systems would determine the) 253.3738 Tj
-0 -265.8141 Td
-(2275 // amount of memory available in the system and use it all\
-.) 279.5849 Tj
-0 -275.3075 Td
-(2276 void) 39.3166 Tj
-0 -284.8008 Td
-(2277 kinit\(void\)) 69.8962 Tj
-0 -294.2942 Td
-(2278 {) 26.2111 Tj
-0 -303.7875 Td
-(2279   extern char end[];) 109.2129 Tj
-0 -313.2809 Td
-(2280   uint len;) 69.8962 Tj
-0 -322.7743 Td
-(2281   char *p;) 65.5277 Tj
-0 -332.2676 Td
-(2282 ) 21.8426 Tj
-0 -341.761 Td
-(2283   initlock\(&kmem.lock, "kmem"\);) 157.2665 Tj
-0 -351.2543 Td
-(2284   p = \(char*\)\(\(\(uint\)end + PAGE\) & ~\(PAGE-1\)\);) 222.7942 Tj
-0 -360.7477 Td
-(2285   len = 256*PAGE; // assume computer has 256 pages of RAM,\
- 1 MB) 297.059 Tj
-0 -370.2411 Td
-(2286   cprintf\("mem = %d\\n", len\);) 148.5295 Tj
-0 -379.7344 Td
-(2287   kfree\(p, len\);) 91.7388 Tj
-0 -389.2278 Td
-(2288 }) 26.2111 Tj
-0 -398.7211 Td
-(2289 ) 21.8426 Tj
-0 -408.2145 Td
-(2290 ) 21.8426 Tj
-0 -417.7079 Td
-(2291 ) 21.8426 Tj
-0 -427.2012 Td
-(2292 ) 21.8426 Tj
-0 -436.6946 Td
-(2293 ) 21.8426 Tj
-0 -446.1879 Td
-(2294 ) 21.8426 Tj
-0 -455.6813 Td
-(2295 ) 21.8426 Tj
-0 -465.1747 Td
-(2296 ) 21.8426 Tj
-0 -474.668 Td
-(2297 ) 21.8426 Tj
-0 -484.1614 Td
-(2298 ) 21.8426 Tj
-0 -493.6547 Td
-(2299 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 22) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 30 30
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/kalloc.c  Page 2) 170.3721 Tj
-0 -28.4801 Td
-(2300 // Free the len bytes of memory pointed at by v,) 231.5313 Tj
-0 -37.9735 Td
-(2301 // which normally should have been returned by a) 231.5313 Tj
-0 -47.4668 Td
-(2302 // call to kalloc\(len\).  \(The exception is when) 227.1628 Tj
-0 -56.9602 Td
-(2303 // initializing the allocator; see kinit above.\)) 231.5313 Tj
-0 -66.4535 Td
-(2304 void) 39.3166 Tj
-0 -75.9469 Td
-(2305 kfree\(char *v, int len\)) 122.3184 Tj
-0 -85.4403 Td
-(2306 {) 26.2111 Tj
-0 -94.9336 Td
-(2307   struct run *r, *rend, **rp, *p, *pend;) 196.5831 Tj
-0 -104.427 Td
-(2308 ) 21.8426 Tj
-0 -113.9203 Td
-(2309   if\(len <= 0 || len % PAGE\)) 144.161 Tj
-0 -123.4137 Td
-(2310     panic\("kfree"\);) 104.8443 Tj
-0 -132.9071 Td
-(2311 ) 21.8426 Tj
-0 -142.4004 Td
-(2312   // Fill with junk to catch dangling refs.) 209.6887 Tj
-0 -151.8938 Td
-(2313   memset\(v, 1, len\);) 109.2129 Tj
-0 -161.3871 Td
-(2314 ) 21.8426 Tj
-0 -170.8805 Td
-(2315   acquire\(&kmem.lock\);) 117.9499 Tj
-0 -180.3739 Td
-(2316   p = \(struct run*\)v;) 113.5814 Tj
-0 -189.8672 Td
-(2317   pend = \(struct run*\)\(v + len\);) 161.635 Tj
-0 -199.3606 Td
-(2318   for\(rp=&kmem.freelist; \(r=*rp\) != 0 && r <= pend; rp=\
-&r->next\){) 305.796 Tj
-0 -208.8539 Td
-(2319     rend = \(struct run*\)\(\(char*\)r + r->len\);) 214.0572 Tj
-0 -218.3473 Td
-(2320     if\(r <= p && p < rend\)) 135.4239 Tj
-0 -227.8407 Td
-(2321       panic\("freeing free page"\);) 166.0035 Tj
-0 -237.334 Td
-(2322     if\(rend == p\){  // r before p: expand r to include p) 266.4794 Tj
-0 -246.8274 Td
-(2323       r->len += len;) 109.2129 Tj
-0 -256.3207 Td
-(2324       if\(r->next && r->next == pend\){  // r now next to \
-r->next?) 301.4275 Tj
-0 -265.8141 Td
-(2325         r->len += r->next->len;) 157.2665 Tj
-0 -275.3075 Td
-(2326         r->next = r->next->next;) 161.635 Tj
-0 -284.8008 Td
-(2327       }) 52.4222 Tj
-0 -294.2942 Td
-(2328       goto out;) 87.3703 Tj
-0 -303.7875 Td
-(2329     }) 43.6851 Tj
-0 -313.2809 Td
-(2330     if\(pend == r\){  // p before r: expand p to include, \
-replace r) 305.796 Tj
-0 -322.7743 Td
-(2331       p->len = len + r->len;) 144.161 Tj
-0 -332.2676 Td
-(2332       p->next = r->next;) 126.6869 Tj
-0 -341.761 Td
-(2333       *rp = p;) 83.0018 Tj
-0 -351.2543 Td
-(2334       goto out;) 87.3703 Tj
-0 -360.7477 Td
-(2335     }) 43.6851 Tj
-0 -370.2411 Td
-(2336   }) 34.9481 Tj
-0 -379.7344 Td
-(2337   // Insert p before r in list.) 157.2665 Tj
-0 -389.2278 Td
-(2338   p->len = len;) 87.3703 Tj
-0 -398.7211 Td
-(2339   p->next = r;) 83.0018 Tj
-0 -408.2145 Td
-(2340   *rp = p;) 65.5277 Tj
-0 -417.7079 Td
-(2341 ) 21.8426 Tj
-0 -427.2012 Td
-(2342  out:) 43.6851 Tj
-0 -436.6946 Td
-(2343   release\(&kmem.lock\);) 117.9499 Tj
-0 -446.1879 Td
-(2344 }) 26.2111 Tj
-0 -455.6813 Td
-(2345 ) 21.8426 Tj
-0 -465.1747 Td
-(2346 ) 21.8426 Tj
-0 -474.668 Td
-(2347 ) 21.8426 Tj
-0 -484.1614 Td
-(2348 ) 21.8426 Tj
-0 -493.6547 Td
-(2349 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 23) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/kalloc.c  Page 3) 170.3721 Tj
-0 -28.4801 Td
-(2350 // Allocate n bytes of physical memory.) 192.2146 Tj
-0 -37.9735 Td
-(2351 // Returns a kernel-segment pointer.) 179.1091 Tj
-0 -47.4668 Td
-(2352 // Returns 0 if the memory cannot be allocated.) 227.1628 Tj
-0 -56.9602 Td
-(2353 char*) 43.6851 Tj
-0 -66.4535 Td
-(2354 kalloc\(int n\)) 78.6333 Tj
-0 -75.9469 Td
-(2355 {) 26.2111 Tj
-0 -85.4403 Td
-(2356   char *p;) 65.5277 Tj
-0 -94.9336 Td
-(2357   struct run *r, **rp;) 117.9499 Tj
-0 -104.427 Td
-(2358 ) 21.8426 Tj
-0 -113.9203 Td
-(2359   if\(n % PAGE || n <= 0\)) 126.6869 Tj
-0 -123.4137 Td
-(2360     panic\("kalloc"\);) 109.2129 Tj
-0 -132.9071 Td
-(2361 ) 21.8426 Tj
-0 -142.4004 Td
-(2362   acquire\(&kmem.lock\);) 117.9499 Tj
-0 -151.8938 Td
-(2363   for\(rp=&kmem.freelist; \(r=*rp\) != 0; rp=&r->next\){) 249.0053 Tj
-0 -161.3871 Td
-(2364     if\(r->len >= n\){) 109.2129 Tj
-0 -170.8805 Td
-(2365       r->len -= n;) 100.4758 Tj
-0 -180.3739 Td
-(2366       p = \(char*\)r + r->len;) 144.161 Tj
-0 -189.8672 Td
-(2367       if\(r->len == 0\)) 113.5814 Tj
-0 -199.3606 Td
-(2368         *rp = r->next;) 117.9499 Tj
-0 -208.8539 Td
-(2369       release\(&kmem.lock\);) 135.4239 Tj
-0 -218.3473 Td
-(2370       return p;) 87.3703 Tj
-0 -227.8407 Td
-(2371     }) 43.6851 Tj
-0 -237.334 Td
-(2372   }) 34.9481 Tj
-0 -246.8274 Td
-(2373   release\(&kmem.lock\);) 117.9499 Tj
-0 -256.3207 Td
-(2374 ) 21.8426 Tj
-0 -265.8141 Td
-(2375   cprintf\("kalloc: out of memory\\n"\);) 183.4776 Tj
-0 -275.3075 Td
-(2376   return 0;) 69.8962 Tj
-0 -284.8008 Td
-(2377 }) 26.2111 Tj
-0 -294.2942 Td
-(2378 ) 21.8426 Tj
-0 -303.7875 Td
-(2379 ) 21.8426 Tj
-0 -313.2809 Td
-(2380 ) 21.8426 Tj
-0 -322.7743 Td
-(2381 ) 21.8426 Tj
-0 -332.2676 Td
-(2382 ) 21.8426 Tj
-0 -341.761 Td
-(2383 ) 21.8426 Tj
-0 -351.2543 Td
-(2384 ) 21.8426 Tj
-0 -360.7477 Td
-(2385 ) 21.8426 Tj
-0 -370.2411 Td
-(2386 ) 21.8426 Tj
-0 -379.7344 Td
-(2387 ) 21.8426 Tj
-0 -389.2278 Td
-(2388 ) 21.8426 Tj
-0 -398.7211 Td
-(2389 ) 21.8426 Tj
-0 -408.2145 Td
-(2390 ) 21.8426 Tj
-0 -417.7079 Td
-(2391 ) 21.8426 Tj
-0 -427.2012 Td
-(2392 ) 21.8426 Tj
-0 -436.6946 Td
-(2393 ) 21.8426 Tj
-0 -446.1879 Td
-(2394 ) 21.8426 Tj
-0 -455.6813 Td
-(2395 ) 21.8426 Tj
-0 -465.1747 Td
-(2396 ) 21.8426 Tj
-0 -474.668 Td
-(2397 ) 21.8426 Tj
-0 -484.1614 Td
-(2398 ) 21.8426 Tj
-0 -493.6547 Td
-(2399 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 23) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 31 31
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/traps.h  Page 1) 166.0035 Tj
-0 -28.4801 Td
-(2400 // x86 trap and interrupt constants.) 179.1091 Tj
-0 -37.9735 Td
-(2401 ) 21.8426 Tj
-0 -47.4668 Td
-(2402 // Processor-defined:) 113.5814 Tj
-0 -56.9602 Td
-(2403 #define T_DIVIDE         0      // divide error) 227.1628 Tj
-0 -66.4535 Td
-(2404 #define T_DEBUG          1      // debug exception) 240.2683 Tj
-0 -75.9469 Td
-(2405 #define T_NMI            2      // non-maskable interrupt) 270.8479 Tj
-0 -85.4403 Td
-(2406 #define T_BRKPT          3      // breakpoint) 218.4257 Tj
-0 -94.9336 Td
-(2407 #define T_OFLOW          4      // overflow) 209.6887 Tj
-0 -104.427 Td
-(2408 #define T_BOUND          5      // bounds check) 227.1628 Tj
-0 -113.9203 Td
-(2409 #define T_ILLOP          6      // illegal opcode) 235.8998 Tj
-0 -123.4137 Td
-(2410 #define T_DEVICE         7      // device not available) 262.1109 Tj
-0 -132.9071 Td
-(2411 #define T_DBLFLT         8      // double fault) 227.1628 Tj
-0 -142.4004 Td
-(2412 // #define T_COPROC      9      // reserved \(not used sin\
-ce 486\)) 301.4275 Tj
-0 -151.8938 Td
-(2413 #define T_TSS           10      // invalid task switch seg\
-ment) 292.6905 Tj
-0 -161.3871 Td
-(2414 #define T_SEGNP         11      // segment not present) 257.7424 Tj
-0 -170.8805 Td
-(2415 #define T_STACK         12      // stack exception) 240.2683 Tj
-0 -180.3739 Td
-(2416 #define T_GPFLT         13      // general protection faul\
-t) 279.5849 Tj
-0 -189.8672 Td
-(2417 #define T_PGFLT         14      // page fault) 218.4257 Tj
-0 -199.3606 Td
-(2418 // #define T_RES        15      // reserved) 209.6887 Tj
-0 -208.8539 Td
-(2419 #define T_FPERR         16      // floating point error) 262.1109 Tj
-0 -218.3473 Td
-(2420 #define T_ALIGN         17      // aligment check) 235.8998 Tj
-0 -227.8407 Td
-(2421 #define T_MCHK          18      // machine check) 231.5313 Tj
-0 -237.334 Td
-(2422 #define T_SIMDERR       19      // SIMD floating point err\
-or) 283.9534 Tj
-0 -246.8274 Td
-(2423 ) 21.8426 Tj
-0 -256.3207 Td
-(2424 // These are arbitrarily chosen, but with care not to over\
-lap) 288.322 Tj
-0 -265.8141 Td
-(2425 // processor defined exceptions or interrupt vectors.) 253.3738 Tj
-0 -275.3075 Td
-(2426 #define T_SYSCALL       64     // system call) 218.4257 Tj
-0 -284.8008 Td
-(2427 #define T_DEFAULT      500      // catchall) 209.6887 Tj
-0 -294.2942 Td
-(2428 ) 21.8426 Tj
-0 -303.7875 Td
-(2429 #define T_IRQ0          32      // IRQ 0 corresponds to in\
-t T_IRQ) 305.796 Tj
-0 -313.2809 Td
-(2430 ) 21.8426 Tj
-0 -322.7743 Td
-(2431 #define IRQ_TIMER        0) 135.4239 Tj
-0 -332.2676 Td
-(2432 #define IRQ_KBD          1) 135.4239 Tj
-0 -341.761 Td
-(2433 #define IRQ_COM1         4) 135.4239 Tj
-0 -351.2543 Td
-(2434 #define IRQ_IDE         14) 135.4239 Tj
-0 -360.7477 Td
-(2435 #define IRQ_ERROR       19) 135.4239 Tj
-0 -370.2411 Td
-(2436 #define IRQ_SPURIOUS    31) 135.4239 Tj
-0 -379.7344 Td
-(2437 ) 21.8426 Tj
-0 -389.2278 Td
-(2438 ) 21.8426 Tj
-0 -398.7211 Td
-(2439 ) 21.8426 Tj
-0 -408.2145 Td
-(2440 ) 21.8426 Tj
-0 -417.7079 Td
-(2441 ) 21.8426 Tj
-0 -427.2012 Td
-(2442 ) 21.8426 Tj
-0 -436.6946 Td
-(2443 ) 21.8426 Tj
-0 -446.1879 Td
-(2444 ) 21.8426 Tj
-0 -455.6813 Td
-(2445 ) 21.8426 Tj
-0 -465.1747 Td
-(2446 ) 21.8426 Tj
-0 -474.668 Td
-(2447 ) 21.8426 Tj
-0 -484.1614 Td
-(2448 ) 21.8426 Tj
-0 -493.6547 Td
-(2449 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 24) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/vectors.pl  Page 1) 179.1091 Tj
-0 -28.4801 Td
-(2450 #!/usr/bin/perl -w) 100.4758 Tj
-0 -37.9735 Td
-(2451 ) 21.8426 Tj
-0 -47.4668 Td
-(2452 # Generate vectors.S, the trap/interrupt entry points.) 257.7424 Tj
-0 -56.9602 Td
-(2453 # There has to be one entry point per interrupt number) 257.7424 Tj
-0 -66.4535 Td
-(2454 # since otherwise there's no way for trap\(\) to discover) 262.1109 Tj
-0 -75.9469 Td
-(2455 # the interrupt number.) 122.3184 Tj
-0 -85.4403 Td
-(2456 ) 21.8426 Tj
-0 -94.9336 Td
-(2457 print "# generated by vectors.pl - do not edit\\n";) 240.2683 Tj
-0 -104.427 Td
-(2458 print "# handlers\\n";) 113.5814 Tj
-0 -113.9203 Td
-(2459 print ".globl alltraps\\n";) 135.4239 Tj
-0 -123.4137 Td
-(2460 for\(my $i = 0; $i < 256; $i++\){) 157.2665 Tj
-0 -132.9071 Td
-(2461     print ".globl vector$i\\n";) 152.898 Tj
-0 -142.4004 Td
-(2462     print "vector$i:\\n";) 126.6869 Tj
-0 -151.8938 Td
-(2463     if\(!\($i == 8 || \($i >= 10 && $i <= 14\) || $i == 17\
-\)\){) 270.8479 Tj
-0 -161.3871 Td
-(2464         print "  pushl \\$0\\n";) 152.898 Tj
-0 -170.8805 Td
-(2465     }) 43.6851 Tj
-0 -180.3739 Td
-(2466     print "  pushl \\$$i\\n";) 139.7925 Tj
-0 -189.8672 Td
-(2467     print "  jmp alltraps\\n";) 148.5295 Tj
-0 -199.3606 Td
-(2468 }) 26.2111 Tj
-0 -208.8539 Td
-(2469 ) 21.8426 Tj
-0 -218.3473 Td
-(2470 print "\\n# vector table\\n";) 139.7925 Tj
-0 -227.8407 Td
-(2471 print ".data\\n";) 91.7388 Tj
-0 -237.334 Td
-(2472 print ".globl vectors\\n";) 131.0554 Tj
-0 -246.8274 Td
-(2473 print "vectors:\\n";) 104.8443 Tj
-0 -256.3207 Td
-(2474 for\(my $i = 0; $i < 256; $i++\){) 157.2665 Tj
-0 -265.8141 Td
-(2475     print "  .long vector$i\\n";) 157.2665 Tj
-0 -275.3075 Td
-(2476 }) 26.2111 Tj
-0 -284.8008 Td
-(2477 ) 21.8426 Tj
-0 -294.2942 Td
-(2478 # sample output:) 91.7388 Tj
-0 -303.7875 Td
-(2479 #   # handlers) 83.0018 Tj
-0 -313.2809 Td
-(2480 #   .globl alltraps) 104.8443 Tj
-0 -322.7743 Td
-(2481 #   .globl vector0) 100.4758 Tj
-0 -332.2676 Td
-(2482 #   vector0:) 74.2647 Tj
-0 -341.761 Td
-(2483 #     pushl $0) 83.0018 Tj
-0 -351.2543 Td
-(2484 #     pushl $0) 83.0018 Tj
-0 -360.7477 Td
-(2485 #     jmp alltraps) 100.4758 Tj
-0 -370.2411 Td
-(2486 #   ...) 52.4222 Tj
-0 -379.7344 Td
-(2487 #) 26.2111 Tj
-0 -389.2278 Td
-(2488 #   # vector table) 100.4758 Tj
-0 -398.7211 Td
-(2489 #   .data) 61.1592 Tj
-0 -408.2145 Td
-(2490 #   .globl vectors) 100.4758 Tj
-0 -417.7079 Td
-(2491 #   vectors:) 74.2647 Tj
-0 -427.2012 Td
-(2492 #     .long vector0) 104.8443 Tj
-0 -436.6946 Td
-(2493 #     .long vector1) 104.8443 Tj
-0 -446.1879 Td
-(2494 #     .long vector2) 104.8443 Tj
-0 -455.6813 Td
-(2495 #   ...) 52.4222 Tj
-0 -465.1747 Td
-(2496 ) 21.8426 Tj
-0 -474.668 Td
-(2497 ) 21.8426 Tj
-0 -484.1614 Td
-(2498 ) 21.8426 Tj
-0 -493.6547 Td
-(2499 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 24) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 32 32
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/trapasm.S  Page 1) 174.7406 Tj
-0 -28.4801 Td
-(2500 #define SEG_KCODE 1  // kernel code) 174.7406 Tj
-0 -37.9735 Td
-(2501 #define SEG_KDATA 2  // kernel data+stack) 200.9517 Tj
-0 -47.4668 Td
-(2502 #define SEG_KCPU  3  // kernel per-cpu data) 209.6887 Tj
-0 -56.9602 Td
-(2503 ) 21.8426 Tj
-0 -66.4535 Td
-(2504   # vectors.S sends all traps here.) 174.7406 Tj
-0 -75.9469 Td
-(2505 .globl alltraps) 87.3703 Tj
-0 -85.4403 Td
-(2506 alltraps:) 61.1592 Tj
-0 -94.9336 Td
-(2507   # Build trap frame.) 113.5814 Tj
-0 -104.427 Td
-(2508   pushl %ds) 69.8962 Tj
-0 -113.9203 Td
-(2509   pushl %es) 69.8962 Tj
-0 -123.4137 Td
-(2510   pushl %fs) 69.8962 Tj
-0 -132.9071 Td
-(2511   pushl %gs) 69.8962 Tj
-0 -142.4004 Td
-(2512   pushal) 56.7907 Tj
-0 -151.8938 Td
-(2513 ) 21.8426 Tj
-0 -161.3871 Td
-(2514   # Set up data and per-cpu segments.) 183.4776 Tj
-0 -170.8805 Td
-(2515   movw $\(SEG_KDATA<<3\), %ax) 139.7925 Tj
-0 -180.3739 Td
-(2516   movw %ax, %ds) 87.3703 Tj
-0 -189.8672 Td
-(2517   movw %ax, %es) 87.3703 Tj
-0 -199.3606 Td
-(2518   movw $\(SEG_KCPU<<3\), %ax) 135.4239 Tj
-0 -208.8539 Td
-(2519   movw %ax, %fs) 87.3703 Tj
-0 -218.3473 Td
-(2520   movw %ax, %gs) 87.3703 Tj
-0 -227.8407 Td
-(2521 ) 21.8426 Tj
-0 -237.334 Td
-(2522   # Call trap\(tf\), where tf=%esp) 161.635 Tj
-0 -246.8274 Td
-(2523   pushl %esp) 74.2647 Tj
-0 -256.3207 Td
-(2524   call trap) 69.8962 Tj
-0 -265.8141 Td
-(2525   addl $4, %esp) 87.3703 Tj
-0 -275.3075 Td
-(2526 ) 21.8426 Tj
-0 -284.8008 Td
-(2527   # Return falls through to trapret...) 187.8461 Tj
-0 -294.2942 Td
-(2528 .globl trapret) 83.0018 Tj
-0 -303.7875 Td
-(2529 trapret:) 56.7907 Tj
-0 -313.2809 Td
-(2530   popal) 52.4222 Tj
-0 -322.7743 Td
-(2531   popl %gs) 65.5277 Tj
-0 -332.2676 Td
-(2532   popl %fs) 65.5277 Tj
-0 -341.761 Td
-(2533   popl %es) 65.5277 Tj
-0 -351.2543 Td
-(2534   popl %ds) 65.5277 Tj
-0 -360.7477 Td
-(2535   addl $0x8, %esp  # trapno and errcode) 192.2146 Tj
-0 -370.2411 Td
-(2536   iret) 48.0537 Tj
-0 -379.7344 Td
-(2537 ) 21.8426 Tj
-0 -389.2278 Td
-(2538 ) 21.8426 Tj
-0 -398.7211 Td
-(2539 ) 21.8426 Tj
-0 -408.2145 Td
-(2540 ) 21.8426 Tj
-0 -417.7079 Td
-(2541 ) 21.8426 Tj
-0 -427.2012 Td
-(2542 ) 21.8426 Tj
-0 -436.6946 Td
-(2543 ) 21.8426 Tj
-0 -446.1879 Td
-(2544 ) 21.8426 Tj
-0 -455.6813 Td
-(2545 ) 21.8426 Tj
-0 -465.1747 Td
-(2546 ) 21.8426 Tj
-0 -474.668 Td
-(2547 ) 21.8426 Tj
-0 -484.1614 Td
-(2548 ) 21.8426 Tj
-0 -493.6547 Td
-(2549 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 25) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/trap.c  Page 1) 161.635 Tj
-0 -28.4801 Td
-(2550 #include "types.h") 100.4758 Tj
-0 -37.9735 Td
-(2551 #include "defs.h") 96.1073 Tj
-0 -47.4668 Td
-(2552 #include "param.h") 100.4758 Tj
-0 -56.9602 Td
-(2553 #include "mmu.h") 91.7388 Tj
-0 -66.4535 Td
-(2554 #include "proc.h") 96.1073 Tj
-0 -75.9469 Td
-(2555 #include "x86.h") 91.7388 Tj
-0 -85.4403 Td
-(2556 #include "traps.h") 100.4758 Tj
-0 -94.9336 Td
-(2557 #include "spinlock.h") 113.5814 Tj
-0 -104.427 Td
-(2558 ) 21.8426 Tj
-0 -113.9203 Td
-(2559 // Interrupt descriptor table \(shared by all CPUs\).) 244.6368 Tj
-0 -123.4137 Td
-(2560 struct gatedesc idt[256];) 131.0554 Tj
-0 -132.9071 Td
-(2561 extern uint vectors[];  // in vectors.S: array of 256 entr\
-y pointers) 318.9016 Tj
-0 -142.4004 Td
-(2562 struct spinlock tickslock;) 135.4239 Tj
-0 -151.8938 Td
-(2563 int ticks;) 65.5277 Tj
-0 -161.3871 Td
-(2564 ) 21.8426 Tj
-0 -170.8805 Td
-(2565 void) 39.3166 Tj
-0 -180.3739 Td
-(2566 tvinit\(void\)) 74.2647 Tj
-0 -189.8672 Td
-(2567 {) 26.2111 Tj
-0 -199.3606 Td
-(2568   int i;) 56.7907 Tj
-0 -208.8539 Td
-(2569 ) 21.8426 Tj
-0 -218.3473 Td
-(2570   for\(i = 0; i < 256; i++\)) 135.4239 Tj
-0 -227.8407 Td
-(2571     SETGATE\(idt[i], 0, SEG_KCODE<<3, vectors[i], 0\);) 249.0053 Tj
-0 -237.334 Td
-(2572   SETGATE\(idt[T_SYSCALL], 1, SEG_KCODE<<3, vectors[T_SYSC\
-ALL], DPL_USER\);) 340.7441 Tj
-0 -246.8274 Td
-(2573 ) 21.8426 Tj
-0 -256.3207 Td
-(2574   initlock\(&tickslock, "time"\);) 157.2665 Tj
-0 -265.8141 Td
-(2575 }) 26.2111 Tj
-0 -275.3075 Td
-(2576 ) 21.8426 Tj
-0 -284.8008 Td
-(2577 void) 39.3166 Tj
-0 -294.2942 Td
-(2578 idtinit\(void\)) 78.6333 Tj
-0 -303.7875 Td
-(2579 {) 26.2111 Tj
-0 -313.2809 Td
-(2580   lidt\(idt, sizeof\(idt\)\);) 131.0554 Tj
-0 -322.7743 Td
-(2581 }) 26.2111 Tj
-0 -332.2676 Td
-(2582 ) 21.8426 Tj
-0 -341.761 Td
-(2583 ) 21.8426 Tj
-0 -351.2543 Td
-(2584 ) 21.8426 Tj
-0 -360.7477 Td
-(2585 ) 21.8426 Tj
-0 -370.2411 Td
-(2586 ) 21.8426 Tj
-0 -379.7344 Td
-(2587 ) 21.8426 Tj
-0 -389.2278 Td
-(2588 ) 21.8426 Tj
-0 -398.7211 Td
-(2589 ) 21.8426 Tj
-0 -408.2145 Td
-(2590 ) 21.8426 Tj
-0 -417.7079 Td
-(2591 ) 21.8426 Tj
-0 -427.2012 Td
-(2592 ) 21.8426 Tj
-0 -436.6946 Td
-(2593 ) 21.8426 Tj
-0 -446.1879 Td
-(2594 ) 21.8426 Tj
-0 -455.6813 Td
-(2595 ) 21.8426 Tj
-0 -465.1747 Td
-(2596 ) 21.8426 Tj
-0 -474.668 Td
-(2597 ) 21.8426 Tj
-0 -484.1614 Td
-(2598 ) 21.8426 Tj
-0 -493.6547 Td
-(2599 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 25) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 33 33
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/trap.c  Page 2) 161.635 Tj
-0 -28.4801 Td
-(2600 void) 39.3166 Tj
-0 -37.9735 Td
-(2601 trap\(struct trapframe *tf\)) 135.4239 Tj
-0 -47.4668 Td
-(2602 {) 26.2111 Tj
-0 -56.9602 Td
-(2603   if\(tf->trapno == T_SYSCALL\){) 152.898 Tj
-0 -66.4535 Td
-(2604     if\(proc->killed\)) 109.2129 Tj
-0 -75.9469 Td
-(2605       exit\(\);) 78.6333 Tj
-0 -85.4403 Td
-(2606     proc->tf = tf;) 100.4758 Tj
-0 -94.9336 Td
-(2607     syscall\(\);) 83.0018 Tj
-0 -104.427 Td
-(2608     if\(proc->killed\)) 109.2129 Tj
-0 -113.9203 Td
-(2609       exit\(\);) 78.6333 Tj
-0 -123.4137 Td
-(2610     return;) 69.8962 Tj
-0 -132.9071 Td
-(2611   }) 34.9481 Tj
-0 -142.4004 Td
-(2612 ) 21.8426 Tj
-0 -151.8938 Td
-(2613   switch\(tf->trapno\){) 113.5814 Tj
-0 -161.3871 Td
-(2614   case T_IRQ0 + IRQ_TIMER:) 135.4239 Tj
-0 -170.8805 Td
-(2615     if\(cpu->id == 0\){) 113.5814 Tj
-0 -180.3739 Td
-(2616       acquire\(&tickslock\);) 135.4239 Tj
-0 -189.8672 Td
-(2617       ticks++;) 83.0018 Tj
-0 -199.3606 Td
-(2618       wakeup\(&ticks\);) 113.5814 Tj
-0 -208.8539 Td
-(2619       release\(&tickslock\);) 135.4239 Tj
-0 -218.3473 Td
-(2620     }) 43.6851 Tj
-0 -227.8407 Td
-(2621     lapiceoi\(\);) 87.3703 Tj
-0 -237.334 Td
-(2622     break;) 65.5277 Tj
-0 -246.8274 Td
-(2623   case T_IRQ0 + IRQ_IDE:) 126.6869 Tj
-0 -256.3207 Td
-(2624     ideintr\(\);) 83.0018 Tj
-0 -265.8141 Td
-(2625     lapiceoi\(\);) 87.3703 Tj
-0 -275.3075 Td
-(2626     break;) 65.5277 Tj
-0 -284.8008 Td
-(2627   case T_IRQ0 + IRQ_KBD:) 126.6869 Tj
-0 -294.2942 Td
-(2628     kbdintr\(\);) 83.0018 Tj
-0 -303.7875 Td
-(2629     lapiceoi\(\);) 87.3703 Tj
-0 -313.2809 Td
-(2630     break;) 65.5277 Tj
-0 -322.7743 Td
-(2631   case T_IRQ0 + IRQ_COM1:) 131.0554 Tj
-0 -332.2676 Td
-(2632     uartintr\(\);) 87.3703 Tj
-0 -341.761 Td
-(2633     lapiceoi\(\);) 87.3703 Tj
-0 -351.2543 Td
-(2634     break;) 65.5277 Tj
-0 -360.7477 Td
-(2635   case T_IRQ0 + 7:) 100.4758 Tj
-0 -370.2411 Td
-(2636   case T_IRQ0 + IRQ_SPURIOUS:) 148.5295 Tj
-0 -379.7344 Td
-(2637     cprintf\("cpu%d: spurious interrupt at %x:%x\\n",) 244.6368 Tj
-0 -389.2278 Td
-(2638             cpu->id, tf->cs, tf->eip\);) 187.8461 Tj
-0 -398.7211 Td
-(2639     lapiceoi\(\);) 87.3703 Tj
-0 -408.2145 Td
-(2640     break;) 65.5277 Tj
-0 -417.7079 Td
-(2641 ) 21.8426 Tj
-0 -427.2012 Td
-(2642 ) 21.8426 Tj
-0 -436.6946 Td
-(2643 ) 21.8426 Tj
-0 -446.1879 Td
-(2644 ) 21.8426 Tj
-0 -455.6813 Td
-(2645 ) 21.8426 Tj
-0 -465.1747 Td
-(2646 ) 21.8426 Tj
-0 -474.668 Td
-(2647 ) 21.8426 Tj
-0 -484.1614 Td
-(2648 ) 21.8426 Tj
-0 -493.6547 Td
-(2649 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 26) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/trap.c  Page 3) 161.635 Tj
-0 -28.4801 Td
-(2650   default:) 65.5277 Tj
-0 -37.9735 Td
-(2651     if\(proc == 0 || \(tf->cs&3\) == 0\){) 183.4776 Tj
-0 -47.4668 Td
-(2652       // In kernel, it must be our mistake.) 209.6887 Tj
-0 -56.9602 Td
-(2653       cprintf\("unexpected trap %d from cpu %d eip %x\\n",) 266.4794 Tj
-0 -66.4535 Td
-(2654               tf->trapno, cpu->id, tf->eip\);) 214.0572 Tj
-0 -75.9469 Td
-(2655       panic\("trap"\);) 109.2129 Tj
-0 -85.4403 Td
-(2656     }) 43.6851 Tj
-0 -94.9336 Td
-(2657     // In user space, assume process misbehaved.) 231.5313 Tj
-0 -104.427 Td
-(2658     cprintf\("pid %d %s: trap %d err %d on cpu %d eip %x -\
-- kill proc\\n",) 336.3756 Tj
-0 -113.9203 Td
-(2659             proc->pid, proc->name, tf->trapno, tf->err, cp\
-u->id, tf->eip\);) 345.1126 Tj
-0 -123.4137 Td
-(2660     proc->killed = 1;) 113.5814 Tj
-0 -132.9071 Td
-(2661   }) 34.9481 Tj
-0 -142.4004 Td
-(2662 ) 21.8426 Tj
-0 -151.8938 Td
-(2663   // Force process exit if it has been killed and is in us\
-er space.) 314.533 Tj
-0 -161.3871 Td
-(2664   // \(If it is still executing in the kernel, let it keep\
- running) 305.796 Tj
-0 -170.8805 Td
-(2665   // until it gets to the regular system call return.\)) 257.7424 Tj
-0 -180.3739 Td
-(2666   if\(proc && proc->killed && \(tf->cs&3\) == DPL_USER\)) 249.0053 Tj
-0 -189.8672 Td
-(2667     exit\(\);) 69.8962 Tj
-0 -199.3606 Td
-(2668 ) 21.8426 Tj
-0 -208.8539 Td
-(2669   // Force process to give up CPU on clock tick.) 231.5313 Tj
-0 -218.3473 Td
-(2670   // If interrupts were on while locks held, would need to\
- check nlock.) 332.0071 Tj
-0 -227.8407 Td
-(2671   if\(proc && proc->state == RUNNING && tf->trapno == T_IR\
-Q0+IRQ_TIMER\)) 327.6386 Tj
-0 -237.334 Td
-(2672     yield\(\);) 74.2647 Tj
-0 -246.8274 Td
-(2673 ) 21.8426 Tj
-0 -256.3207 Td
-(2674   // Check if the process has been killed since we yielded) 275.2164 Tj
-0 -265.8141 Td
-(2675   if\(proc && proc->killed && \(tf->cs&3\) == DPL_USER\)) 249.0053 Tj
-0 -275.3075 Td
-(2676     exit\(\);) 69.8962 Tj
-0 -284.8008 Td
-(2677 }) 26.2111 Tj
-0 -294.2942 Td
-(2678 ) 21.8426 Tj
-0 -303.7875 Td
-(2679 ) 21.8426 Tj
-0 -313.2809 Td
-(2680 ) 21.8426 Tj
-0 -322.7743 Td
-(2681 ) 21.8426 Tj
-0 -332.2676 Td
-(2682 ) 21.8426 Tj
-0 -341.761 Td
-(2683 ) 21.8426 Tj
-0 -351.2543 Td
-(2684 ) 21.8426 Tj
-0 -360.7477 Td
-(2685 ) 21.8426 Tj
-0 -370.2411 Td
-(2686 ) 21.8426 Tj
-0 -379.7344 Td
-(2687 ) 21.8426 Tj
-0 -389.2278 Td
-(2688 ) 21.8426 Tj
-0 -398.7211 Td
-(2689 ) 21.8426 Tj
-0 -408.2145 Td
-(2690 ) 21.8426 Tj
-0 -417.7079 Td
-(2691 ) 21.8426 Tj
-0 -427.2012 Td
-(2692 ) 21.8426 Tj
-0 -436.6946 Td
-(2693 ) 21.8426 Tj
-0 -446.1879 Td
-(2694 ) 21.8426 Tj
-0 -455.6813 Td
-(2695 ) 21.8426 Tj
-0 -465.1747 Td
-(2696 ) 21.8426 Tj
-0 -474.668 Td
-(2697 ) 21.8426 Tj
-0 -484.1614 Td
-(2698 ) 21.8426 Tj
-0 -493.6547 Td
-(2699 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 26) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 34 34
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/syscall.h  Page 1) 174.7406 Tj
-0 -28.4801 Td
-(2700 // System call numbers) 117.9499 Tj
-0 -37.9735 Td
-(2701 #define SYS_fork    1) 113.5814 Tj
-0 -47.4668 Td
-(2702 #define SYS_exit    2) 113.5814 Tj
-0 -56.9602 Td
-(2703 #define SYS_wait    3) 113.5814 Tj
-0 -66.4535 Td
-(2704 #define SYS_pipe    4) 113.5814 Tj
-0 -75.9469 Td
-(2705 #define SYS_write   5) 113.5814 Tj
-0 -85.4403 Td
-(2706 #define SYS_read    6) 113.5814 Tj
-0 -94.9336 Td
-(2707 #define SYS_close   7) 113.5814 Tj
-0 -104.427 Td
-(2708 #define SYS_kill    8) 113.5814 Tj
-0 -113.9203 Td
-(2709 #define SYS_exec    9) 113.5814 Tj
-0 -123.4137 Td
-(2710 #define SYS_open   10) 113.5814 Tj
-0 -132.9071 Td
-(2711 #define SYS_mknod  11) 113.5814 Tj
-0 -142.4004 Td
-(2712 #define SYS_unlink 12) 113.5814 Tj
-0 -151.8938 Td
-(2713 #define SYS_fstat  13) 113.5814 Tj
-0 -161.3871 Td
-(2714 #define SYS_link   14) 113.5814 Tj
-0 -170.8805 Td
-(2715 #define SYS_mkdir  15) 113.5814 Tj
-0 -180.3739 Td
-(2716 #define SYS_chdir  16) 113.5814 Tj
-0 -189.8672 Td
-(2717 #define SYS_dup    17) 113.5814 Tj
-0 -199.3606 Td
-(2718 #define SYS_getpid 18) 113.5814 Tj
-0 -208.8539 Td
-(2719 #define SYS_sbrk   19) 113.5814 Tj
-0 -218.3473 Td
-(2720 #define SYS_sleep  20) 113.5814 Tj
-0 -227.8407 Td
-(2721 ) 21.8426 Tj
-0 -237.334 Td
-(2722 ) 21.8426 Tj
-0 -246.8274 Td
-(2723 ) 21.8426 Tj
-0 -256.3207 Td
-(2724 ) 21.8426 Tj
-0 -265.8141 Td
-(2725 ) 21.8426 Tj
-0 -275.3075 Td
-(2726 ) 21.8426 Tj
-0 -284.8008 Td
-(2727 ) 21.8426 Tj
-0 -294.2942 Td
-(2728 ) 21.8426 Tj
-0 -303.7875 Td
-(2729 ) 21.8426 Tj
-0 -313.2809 Td
-(2730 ) 21.8426 Tj
-0 -322.7743 Td
-(2731 ) 21.8426 Tj
-0 -332.2676 Td
-(2732 ) 21.8426 Tj
-0 -341.761 Td
-(2733 ) 21.8426 Tj
-0 -351.2543 Td
-(2734 ) 21.8426 Tj
-0 -360.7477 Td
-(2735 ) 21.8426 Tj
-0 -370.2411 Td
-(2736 ) 21.8426 Tj
-0 -379.7344 Td
-(2737 ) 21.8426 Tj
-0 -389.2278 Td
-(2738 ) 21.8426 Tj
-0 -398.7211 Td
-(2739 ) 21.8426 Tj
-0 -408.2145 Td
-(2740 ) 21.8426 Tj
-0 -417.7079 Td
-(2741 ) 21.8426 Tj
-0 -427.2012 Td
-(2742 ) 21.8426 Tj
-0 -436.6946 Td
-(2743 ) 21.8426 Tj
-0 -446.1879 Td
-(2744 ) 21.8426 Tj
-0 -455.6813 Td
-(2745 ) 21.8426 Tj
-0 -465.1747 Td
-(2746 ) 21.8426 Tj
-0 -474.668 Td
-(2747 ) 21.8426 Tj
-0 -484.1614 Td
-(2748 ) 21.8426 Tj
-0 -493.6547 Td
-(2749 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 27) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/syscall.c  Page 1) 174.7406 Tj
-0 -28.4801 Td
-(2750 #include "types.h") 100.4758 Tj
-0 -37.9735 Td
-(2751 #include "defs.h") 96.1073 Tj
-0 -47.4668 Td
-(2752 #include "param.h") 100.4758 Tj
-0 -56.9602 Td
-(2753 #include "mmu.h") 91.7388 Tj
-0 -66.4535 Td
-(2754 #include "proc.h") 96.1073 Tj
-0 -75.9469 Td
-(2755 #include "x86.h") 91.7388 Tj
-0 -85.4403 Td
-(2756 #include "syscall.h") 109.2129 Tj
-0 -94.9336 Td
-(2757 ) 21.8426 Tj
-0 -104.427 Td
-(2758 // User code makes a system call with INT T_SYSCALL.) 249.0053 Tj
-0 -113.9203 Td
-(2759 // System call number in %eax.) 152.898 Tj
-0 -123.4137 Td
-(2760 // Arguments on the stack, from the user call to the C) 257.7424 Tj
-0 -132.9071 Td
-(2761 // library system call function. The saved user %esp point\
-s) 279.5849 Tj
-0 -142.4004 Td
-(2762 // to a saved program counter, and then the first argument\
-.) 279.5849 Tj
-0 -151.8938 Td
-(2763 ) 21.8426 Tj
-0 -161.3871 Td
-(2764 // Fetch the int at addr from process p.) 196.5831 Tj
-0 -170.8805 Td
-(2765 int) 34.9481 Tj
-0 -180.3739 Td
-(2766 fetchint\(struct proc *p, uint addr, int *ip\)) 214.0572 Tj
-0 -189.8672 Td
-(2767 {) 26.2111 Tj
-0 -199.3606 Td
-(2768   if\(addr >= p->sz || addr+4 > p->sz\)) 183.4776 Tj
-0 -208.8539 Td
-(2769     return -1;) 83.0018 Tj
-0 -218.3473 Td
-(2770   *ip = *\(int*\)\(p->mem + addr\);) 157.2665 Tj
-0 -227.8407 Td
-(2771   return 0;) 69.8962 Tj
-0 -237.334 Td
-(2772 }) 26.2111 Tj
-0 -246.8274 Td
-(2773 ) 21.8426 Tj
-0 -256.3207 Td
-(2774 // Fetch the nul-terminated string at addr from process p.) 275.2164 Tj
-0 -265.8141 Td
-(2775 // Doesn't actually copy the string - just sets *pp to poi\
-nt at it.) 314.533 Tj
-0 -275.3075 Td
-(2776 // Returns length of string, not including nul.) 227.1628 Tj
-0 -284.8008 Td
-(2777 int) 34.9481 Tj
-0 -294.2942 Td
-(2778 fetchstr\(struct proc *p, uint addr, char **pp\)) 222.7942 Tj
-0 -303.7875 Td
-(2779 {) 26.2111 Tj
-0 -313.2809 Td
-(2780   char *s, *ep;) 87.3703 Tj
-0 -322.7743 Td
-(2781 ) 21.8426 Tj
-0 -332.2676 Td
-(2782   if\(addr >= p->sz\)) 104.8443 Tj
-0 -341.761 Td
-(2783     return -1;) 83.0018 Tj
-0 -351.2543 Td
-(2784   *pp = p->mem + addr;) 117.9499 Tj
-0 -360.7477 Td
-(2785   ep = p->mem + p->sz;) 117.9499 Tj
-0 -370.2411 Td
-(2786   for\(s = *pp; s < ep; s++\)) 139.7925 Tj
-0 -379.7344 Td
-(2787     if\(*s == 0\)) 87.3703 Tj
-0 -389.2278 Td
-(2788       return s - *pp;) 113.5814 Tj
-0 -398.7211 Td
-(2789   return -1;) 74.2647 Tj
-0 -408.2145 Td
-(2790 }) 26.2111 Tj
-0 -417.7079 Td
-(2791 ) 21.8426 Tj
-0 -427.2012 Td
-(2792 // Fetch the nth 32-bit system call argument.) 218.4257 Tj
-0 -436.6946 Td
-(2793 int) 34.9481 Tj
-0 -446.1879 Td
-(2794 argint\(int n, int *ip\)) 117.9499 Tj
-0 -455.6813 Td
-(2795 {) 26.2111 Tj
-0 -465.1747 Td
-(2796   return fetchint\(proc, proc->tf->esp + 4 + 4*n, ip\);) 253.3738 Tj
-0 -474.668 Td
-(2797 }) 26.2111 Tj
-0 -484.1614 Td
-(2798 ) 21.8426 Tj
-0 -493.6547 Td
-(2799 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 27) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 35 35
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/syscall.c  Page 2) 174.7406 Tj
-0 -28.4801 Td
-(2800 // Fetch the nth word-sized system call argument as a poin\
-ter) 288.322 Tj
-0 -37.9735 Td
-(2801 // to a block of memory of size n bytes.  Check that the p\
-ointer) 301.4275 Tj
-0 -47.4668 Td
-(2802 // lies within the process address space.) 200.9517 Tj
-0 -56.9602 Td
-(2803 int) 34.9481 Tj
-0 -66.4535 Td
-(2804 argptr\(int n, char **pp, int size\)) 170.3721 Tj
-0 -75.9469 Td
-(2805 {) 26.2111 Tj
-0 -85.4403 Td
-(2806   int i;) 56.7907 Tj
-0 -94.9336 Td
-(2807 ) 21.8426 Tj
-0 -104.427 Td
-(2808   if\(argint\(n, &i\) < 0\)) 122.3184 Tj
-0 -113.9203 Td
-(2809     return -1;) 83.0018 Tj
-0 -123.4137 Td
-(2810   if\(\(uint\)i >= proc->sz || \(uint\)i+size >= proc->sz\)) 253.3738 Tj
-0 -132.9071 Td
-(2811     return -1;) 83.0018 Tj
-0 -142.4004 Td
-(2812   *pp = proc->mem + i;) 117.9499 Tj
-0 -151.8938 Td
-(2813   return 0;) 69.8962 Tj
-0 -161.3871 Td
-(2814 }) 26.2111 Tj
-0 -170.8805 Td
-(2815 ) 21.8426 Tj
-0 -180.3739 Td
-(2816 // Fetch the nth word-sized system call argument as a stri\
-ng pointer.) 323.2701 Tj
-0 -189.8672 Td
-(2817 // Check that the pointer is valid and the string is nul-t\
-erminated.) 318.9016 Tj
-0 -199.3606 Td
-(2818 // \(There is no shared writable memory, so the string can\
-'t change) 310.1645 Tj
-0 -208.8539 Td
-(2819 // between this check and being used by the kernel.\)) 249.0053 Tj
-0 -218.3473 Td
-(2820 int) 34.9481 Tj
-0 -227.8407 Td
-(2821 argstr\(int n, char **pp\)) 126.6869 Tj
-0 -237.334 Td
-(2822 {) 26.2111 Tj
-0 -246.8274 Td
-(2823   int addr;) 69.8962 Tj
-0 -256.3207 Td
-(2824   if\(argint\(n, &addr\) < 0\)) 135.4239 Tj
-0 -265.8141 Td
-(2825     return -1;) 83.0018 Tj
-0 -275.3075 Td
-(2826   return fetchstr\(proc, addr, pp\);) 170.3721 Tj
-0 -284.8008 Td
-(2827 }) 26.2111 Tj
-0 -294.2942 Td
-(2828 ) 21.8426 Tj
-0 -303.7875 Td
-(2829 extern int sys_chdir\(void\);) 139.7925 Tj
-0 -313.2809 Td
-(2830 extern int sys_close\(void\);) 139.7925 Tj
-0 -322.7743 Td
-(2831 extern int sys_dup\(void\);) 131.0554 Tj
-0 -332.2676 Td
-(2832 extern int sys_exec\(void\);) 135.4239 Tj
-0 -341.761 Td
-(2833 extern int sys_exit\(void\);) 135.4239 Tj
-0 -351.2543 Td
-(2834 extern int sys_fork\(void\);) 135.4239 Tj
-0 -360.7477 Td
-(2835 extern int sys_fstat\(void\);) 139.7925 Tj
-0 -370.2411 Td
-(2836 extern int sys_getpid\(void\);) 144.161 Tj
-0 -379.7344 Td
-(2837 extern int sys_kill\(void\);) 135.4239 Tj
-0 -389.2278 Td
-(2838 extern int sys_link\(void\);) 135.4239 Tj
-0 -398.7211 Td
-(2839 extern int sys_mkdir\(void\);) 139.7925 Tj
-0 -408.2145 Td
-(2840 extern int sys_mknod\(void\);) 139.7925 Tj
-0 -417.7079 Td
-(2841 extern int sys_open\(void\);) 135.4239 Tj
-0 -427.2012 Td
-(2842 extern int sys_pipe\(void\);) 135.4239 Tj
-0 -436.6946 Td
-(2843 extern int sys_read\(void\);) 135.4239 Tj
-0 -446.1879 Td
-(2844 extern int sys_sbrk\(void\);) 135.4239 Tj
-0 -455.6813 Td
-(2845 extern int sys_sleep\(void\);) 139.7925 Tj
-0 -465.1747 Td
-(2846 extern int sys_unlink\(void\);) 144.161 Tj
-0 -474.668 Td
-(2847 extern int sys_wait\(void\);) 135.4239 Tj
-0 -484.1614 Td
-(2848 extern int sys_write\(void\);) 139.7925 Tj
-0 -493.6547 Td
-(2849 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 28) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/syscall.c  Page 3) 174.7406 Tj
-0 -28.4801 Td
-(2850 static int \(*syscalls[]\)\(void\) = {) 170.3721 Tj
-0 -37.9735 Td
-(2851 [SYS_chdir]   sys_chdir,) 126.6869 Tj
-0 -47.4668 Td
-(2852 [SYS_close]   sys_close,) 126.6869 Tj
-0 -56.9602 Td
-(2853 [SYS_dup]     sys_dup,) 117.9499 Tj
-0 -66.4535 Td
-(2854 [SYS_exec]    sys_exec,) 122.3184 Tj
-0 -75.9469 Td
-(2855 [SYS_exit]    sys_exit,) 122.3184 Tj
-0 -85.4403 Td
-(2856 [SYS_fork]    sys_fork,) 122.3184 Tj
-0 -94.9336 Td
-(2857 [SYS_fstat]   sys_fstat,) 126.6869 Tj
-0 -104.427 Td
-(2858 [SYS_getpid]  sys_getpid,) 131.0554 Tj
-0 -113.9203 Td
-(2859 [SYS_kill]    sys_kill,) 122.3184 Tj
-0 -123.4137 Td
-(2860 [SYS_link]    sys_link,) 122.3184 Tj
-0 -132.9071 Td
-(2861 [SYS_mkdir]   sys_mkdir,) 126.6869 Tj
-0 -142.4004 Td
-(2862 [SYS_mknod]   sys_mknod,) 126.6869 Tj
-0 -151.8938 Td
-(2863 [SYS_open]    sys_open,) 122.3184 Tj
-0 -161.3871 Td
-(2864 [SYS_pipe]    sys_pipe,) 122.3184 Tj
-0 -170.8805 Td
-(2865 [SYS_read]    sys_read,) 122.3184 Tj
-0 -180.3739 Td
-(2866 [SYS_sbrk]    sys_sbrk,) 122.3184 Tj
-0 -189.8672 Td
-(2867 [SYS_sleep]   sys_sleep,) 126.6869 Tj
-0 -199.3606 Td
-(2868 [SYS_unlink]  sys_unlink,) 131.0554 Tj
-0 -208.8539 Td
-(2869 [SYS_wait]    sys_wait,) 122.3184 Tj
-0 -218.3473 Td
-(2870 [SYS_write]   sys_write,) 126.6869 Tj
-0 -227.8407 Td
-(2871 };) 30.5796 Tj
-0 -237.334 Td
-(2872 ) 21.8426 Tj
-0 -246.8274 Td
-(2873 void) 39.3166 Tj
-0 -256.3207 Td
-(2874 syscall\(void\)) 78.6333 Tj
-0 -265.8141 Td
-(2875 {) 26.2111 Tj
-0 -275.3075 Td
-(2876   int num;) 65.5277 Tj
-0 -284.8008 Td
-(2877 ) 21.8426 Tj
-0 -294.2942 Td
-(2878   num = proc->tf->eax;) 117.9499 Tj
-0 -303.7875 Td
-(2879   if\(num >= 0 && num < NELEM\(syscalls\) && syscalls[num]\
-\)) 266.4794 Tj
-0 -313.2809 Td
-(2880     proc->tf->eax = syscalls[num]\(\);) 179.1091 Tj
-0 -322.7743 Td
-(2881   else {) 56.7907 Tj
-0 -332.2676 Td
-(2882     cprintf\("%d %s: unknown sys call %d\\n",) 209.6887 Tj
-0 -341.761 Td
-(2883             proc->pid, proc->name, num\);) 196.5831 Tj
-0 -351.2543 Td
-(2884     proc->tf->eax = -1;) 122.3184 Tj
-0 -360.7477 Td
-(2885   }) 34.9481 Tj
-0 -370.2411 Td
-(2886 }) 26.2111 Tj
-0 -379.7344 Td
-(2887 ) 21.8426 Tj
-0 -389.2278 Td
-(2888 ) 21.8426 Tj
-0 -398.7211 Td
-(2889 ) 21.8426 Tj
-0 -408.2145 Td
-(2890 ) 21.8426 Tj
-0 -417.7079 Td
-(2891 ) 21.8426 Tj
-0 -427.2012 Td
-(2892 ) 21.8426 Tj
-0 -436.6946 Td
-(2893 ) 21.8426 Tj
-0 -446.1879 Td
-(2894 ) 21.8426 Tj
-0 -455.6813 Td
-(2895 ) 21.8426 Tj
-0 -465.1747 Td
-(2896 ) 21.8426 Tj
-0 -474.668 Td
-(2897 ) 21.8426 Tj
-0 -484.1614 Td
-(2898 ) 21.8426 Tj
-0 -493.6547 Td
-(2899 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 28) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 36 36
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sysproc.c  Page 1) 174.7406 Tj
-0 -28.4801 Td
-(2900 #include "types.h") 100.4758 Tj
-0 -37.9735 Td
-(2901 #include "x86.h") 91.7388 Tj
-0 -47.4668 Td
-(2902 #include "defs.h") 96.1073 Tj
-0 -56.9602 Td
-(2903 #include "param.h") 100.4758 Tj
-0 -66.4535 Td
-(2904 #include "mmu.h") 91.7388 Tj
-0 -75.9469 Td
-(2905 #include "proc.h") 96.1073 Tj
-0 -85.4403 Td
-(2906 ) 21.8426 Tj
-0 -94.9336 Td
-(2907 int) 34.9481 Tj
-0 -104.427 Td
-(2908 sys_fork\(void\)) 83.0018 Tj
-0 -113.9203 Td
-(2909 {) 26.2111 Tj
-0 -123.4137 Td
-(2910   return fork\(\);) 91.7388 Tj
-0 -132.9071 Td
-(2911 }) 26.2111 Tj
-0 -142.4004 Td
-(2912 ) 21.8426 Tj
-0 -151.8938 Td
-(2913 int) 34.9481 Tj
-0 -161.3871 Td
-(2914 sys_exit\(void\)) 83.0018 Tj
-0 -170.8805 Td
-(2915 {) 26.2111 Tj
-0 -180.3739 Td
-(2916   exit\(\);) 61.1592 Tj
-0 -189.8672 Td
-(2917   return 0;  // not reached) 139.7925 Tj
-0 -199.3606 Td
-(2918 }) 26.2111 Tj
-0 -208.8539 Td
-(2919 ) 21.8426 Tj
-0 -218.3473 Td
-(2920 int) 34.9481 Tj
-0 -227.8407 Td
-(2921 sys_wait\(void\)) 83.0018 Tj
-0 -237.334 Td
-(2922 {) 26.2111 Tj
-0 -246.8274 Td
-(2923   return wait\(\);) 91.7388 Tj
-0 -256.3207 Td
-(2924 }) 26.2111 Tj
-0 -265.8141 Td
-(2925 ) 21.8426 Tj
-0 -275.3075 Td
-(2926 int) 34.9481 Tj
-0 -284.8008 Td
-(2927 sys_kill\(void\)) 83.0018 Tj
-0 -294.2942 Td
-(2928 {) 26.2111 Tj
-0 -303.7875 Td
-(2929   int pid;) 65.5277 Tj
-0 -313.2809 Td
-(2930 ) 21.8426 Tj
-0 -322.7743 Td
-(2931   if\(argint\(0, &pid\) < 0\)) 131.0554 Tj
-0 -332.2676 Td
-(2932     return -1;) 83.0018 Tj
-0 -341.761 Td
-(2933   return kill\(pid\);) 104.8443 Tj
-0 -351.2543 Td
-(2934 }) 26.2111 Tj
-0 -360.7477 Td
-(2935 ) 21.8426 Tj
-0 -370.2411 Td
-(2936 int) 34.9481 Tj
-0 -379.7344 Td
-(2937 sys_getpid\(void\)) 91.7388 Tj
-0 -389.2278 Td
-(2938 {) 26.2111 Tj
-0 -398.7211 Td
-(2939   return proc->pid;) 104.8443 Tj
-0 -408.2145 Td
-(2940 }) 26.2111 Tj
-0 -417.7079 Td
-(2941 ) 21.8426 Tj
-0 -427.2012 Td
-(2942 ) 21.8426 Tj
-0 -436.6946 Td
-(2943 ) 21.8426 Tj
-0 -446.1879 Td
-(2944 ) 21.8426 Tj
-0 -455.6813 Td
-(2945 ) 21.8426 Tj
-0 -465.1747 Td
-(2946 ) 21.8426 Tj
-0 -474.668 Td
-(2947 ) 21.8426 Tj
-0 -484.1614 Td
-(2948 ) 21.8426 Tj
-0 -493.6547 Td
-(2949 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 29) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sysproc.c  Page 2) 174.7406 Tj
-0 -28.4801 Td
-(2950 int) 34.9481 Tj
-0 -37.9735 Td
-(2951 sys_sbrk\(void\)) 83.0018 Tj
-0 -47.4668 Td
-(2952 {) 26.2111 Tj
-0 -56.9602 Td
-(2953   int addr;) 69.8962 Tj
-0 -66.4535 Td
-(2954   int n;) 56.7907 Tj
-0 -75.9469 Td
-(2955 ) 21.8426 Tj
-0 -85.4403 Td
-(2956   if\(argint\(0, &n\) < 0\)) 122.3184 Tj
-0 -94.9336 Td
-(2957     return -1;) 83.0018 Tj
-0 -104.427 Td
-(2958   addr = proc->sz;) 100.4758 Tj
-0 -113.9203 Td
-(2959   if\(growproc\(n\) < 0\)) 113.5814 Tj
-0 -123.4137 Td
-(2960     return -1;) 83.0018 Tj
-0 -132.9071 Td
-(2961   return addr;) 83.0018 Tj
-0 -142.4004 Td
-(2962 }) 26.2111 Tj
-0 -151.8938 Td
-(2963 ) 21.8426 Tj
-0 -161.3871 Td
-(2964 int) 34.9481 Tj
-0 -170.8805 Td
-(2965 sys_sleep\(void\)) 87.3703 Tj
-0 -180.3739 Td
-(2966 {) 26.2111 Tj
-0 -189.8672 Td
-(2967   int n, ticks0;) 91.7388 Tj
-0 -199.3606 Td
-(2968 ) 21.8426 Tj
-0 -208.8539 Td
-(2969   if\(argint\(0, &n\) < 0\)) 122.3184 Tj
-0 -218.3473 Td
-(2970     return -1;) 83.0018 Tj
-0 -227.8407 Td
-(2971   acquire\(&tickslock\);) 117.9499 Tj
-0 -237.334 Td
-(2972   ticks0 = ticks;) 96.1073 Tj
-0 -246.8274 Td
-(2973   while\(ticks - ticks0 < n\){) 144.161 Tj
-0 -256.3207 Td
-(2974     if\(proc->killed\){) 113.5814 Tj
-0 -265.8141 Td
-(2975       release\(&tickslock\);) 135.4239 Tj
-0 -275.3075 Td
-(2976       return -1;) 91.7388 Tj
-0 -284.8008 Td
-(2977     }) 43.6851 Tj
-0 -294.2942 Td
-(2978     sleep\(&ticks, &tickslock\);) 152.898 Tj
-0 -303.7875 Td
-(2979   }) 34.9481 Tj
-0 -313.2809 Td
-(2980   release\(&tickslock\);) 117.9499 Tj
-0 -322.7743 Td
-(2981   return 0;) 69.8962 Tj
-0 -332.2676 Td
-(2982 }) 26.2111 Tj
-0 -341.761 Td
-(2983 ) 21.8426 Tj
-0 -351.2543 Td
-(2984 ) 21.8426 Tj
-0 -360.7477 Td
-(2985 ) 21.8426 Tj
-0 -370.2411 Td
-(2986 ) 21.8426 Tj
-0 -379.7344 Td
-(2987 ) 21.8426 Tj
-0 -389.2278 Td
-(2988 ) 21.8426 Tj
-0 -398.7211 Td
-(2989 ) 21.8426 Tj
-0 -408.2145 Td
-(2990 ) 21.8426 Tj
-0 -417.7079 Td
-(2991 ) 21.8426 Tj
-0 -427.2012 Td
-(2992 ) 21.8426 Tj
-0 -436.6946 Td
-(2993 ) 21.8426 Tj
-0 -446.1879 Td
-(2994 ) 21.8426 Tj
-0 -455.6813 Td
-(2995 ) 21.8426 Tj
-0 -465.1747 Td
-(2996 ) 21.8426 Tj
-0 -474.668 Td
-(2997 ) 21.8426 Tj
-0 -484.1614 Td
-(2998 ) 21.8426 Tj
-0 -493.6547 Td
-(2999 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 29) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 37 37
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/buf.h  Page 1) 157.2665 Tj
-0 -28.4801 Td
-(3000 struct buf {) 74.2647 Tj
-0 -37.9735 Td
-(3001   int flags;) 74.2647 Tj
-0 -47.4668 Td
-(3002   uint dev;) 69.8962 Tj
-0 -56.9602 Td
-(3003   uint sector;) 83.0018 Tj
-0 -66.4535 Td
-(3004   struct buf *prev; // LRU cache list) 183.4776 Tj
-0 -75.9469 Td
-(3005   struct buf *next;) 104.8443 Tj
-0 -85.4403 Td
-(3006   struct buf *qnext; // disk queue) 170.3721 Tj
-0 -94.9336 Td
-(3007   uchar data[512];) 100.4758 Tj
-0 -104.427 Td
-(3008 };) 30.5796 Tj
-0 -113.9203 Td
-(3009 #define B_BUSY  0x1  // buffer is locked by some process) 266.4794 Tj
-0 -123.4137 Td
-(3010 #define B_VALID 0x2  // buffer has been read from disk) 257.7424 Tj
-0 -132.9071 Td
-(3011 #define B_DIRTY 0x4  // buffer needs to be written to disk) 275.2164 Tj
-0 -142.4004 Td
-(3012 ) 21.8426 Tj
-0 -151.8938 Td
-(3013 ) 21.8426 Tj
-0 -161.3871 Td
-(3014 ) 21.8426 Tj
-0 -170.8805 Td
-(3015 ) 21.8426 Tj
-0 -180.3739 Td
-(3016 ) 21.8426 Tj
-0 -189.8672 Td
-(3017 ) 21.8426 Tj
-0 -199.3606 Td
-(3018 ) 21.8426 Tj
-0 -208.8539 Td
-(3019 ) 21.8426 Tj
-0 -218.3473 Td
-(3020 ) 21.8426 Tj
-0 -227.8407 Td
-(3021 ) 21.8426 Tj
-0 -237.334 Td
-(3022 ) 21.8426 Tj
-0 -246.8274 Td
-(3023 ) 21.8426 Tj
-0 -256.3207 Td
-(3024 ) 21.8426 Tj
-0 -265.8141 Td
-(3025 ) 21.8426 Tj
-0 -275.3075 Td
-(3026 ) 21.8426 Tj
-0 -284.8008 Td
-(3027 ) 21.8426 Tj
-0 -294.2942 Td
-(3028 ) 21.8426 Tj
-0 -303.7875 Td
-(3029 ) 21.8426 Tj
-0 -313.2809 Td
-(3030 ) 21.8426 Tj
-0 -322.7743 Td
-(3031 ) 21.8426 Tj
-0 -332.2676 Td
-(3032 ) 21.8426 Tj
-0 -341.761 Td
-(3033 ) 21.8426 Tj
-0 -351.2543 Td
-(3034 ) 21.8426 Tj
-0 -360.7477 Td
-(3035 ) 21.8426 Tj
-0 -370.2411 Td
-(3036 ) 21.8426 Tj
-0 -379.7344 Td
-(3037 ) 21.8426 Tj
-0 -389.2278 Td
-(3038 ) 21.8426 Tj
-0 -398.7211 Td
-(3039 ) 21.8426 Tj
-0 -408.2145 Td
-(3040 ) 21.8426 Tj
-0 -417.7079 Td
-(3041 ) 21.8426 Tj
-0 -427.2012 Td
-(3042 ) 21.8426 Tj
-0 -436.6946 Td
-(3043 ) 21.8426 Tj
-0 -446.1879 Td
-(3044 ) 21.8426 Tj
-0 -455.6813 Td
-(3045 ) 21.8426 Tj
-0 -465.1747 Td
-(3046 ) 21.8426 Tj
-0 -474.668 Td
-(3047 ) 21.8426 Tj
-0 -484.1614 Td
-(3048 ) 21.8426 Tj
-0 -493.6547 Td
-(3049 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 30) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fcntl.h  Page 1) 166.0035 Tj
-0 -28.4801 Td
-(3050 #define O_RDONLY  0x000) 122.3184 Tj
-0 -37.9735 Td
-(3051 #define O_WRONLY  0x001) 122.3184 Tj
-0 -47.4668 Td
-(3052 #define O_RDWR    0x002) 122.3184 Tj
-0 -56.9602 Td
-(3053 #define O_CREATE  0x200) 122.3184 Tj
-0 -66.4535 Td
-(3054 ) 21.8426 Tj
-0 -75.9469 Td
-(3055 ) 21.8426 Tj
-0 -85.4403 Td
-(3056 ) 21.8426 Tj
-0 -94.9336 Td
-(3057 ) 21.8426 Tj
-0 -104.427 Td
-(3058 ) 21.8426 Tj
-0 -113.9203 Td
-(3059 ) 21.8426 Tj
-0 -123.4137 Td
-(3060 ) 21.8426 Tj
-0 -132.9071 Td
-(3061 ) 21.8426 Tj
-0 -142.4004 Td
-(3062 ) 21.8426 Tj
-0 -151.8938 Td
-(3063 ) 21.8426 Tj
-0 -161.3871 Td
-(3064 ) 21.8426 Tj
-0 -170.8805 Td
-(3065 ) 21.8426 Tj
-0 -180.3739 Td
-(3066 ) 21.8426 Tj
-0 -189.8672 Td
-(3067 ) 21.8426 Tj
-0 -199.3606 Td
-(3068 ) 21.8426 Tj
-0 -208.8539 Td
-(3069 ) 21.8426 Tj
-0 -218.3473 Td
-(3070 ) 21.8426 Tj
-0 -227.8407 Td
-(3071 ) 21.8426 Tj
-0 -237.334 Td
-(3072 ) 21.8426 Tj
-0 -246.8274 Td
-(3073 ) 21.8426 Tj
-0 -256.3207 Td
-(3074 ) 21.8426 Tj
-0 -265.8141 Td
-(3075 ) 21.8426 Tj
-0 -275.3075 Td
-(3076 ) 21.8426 Tj
-0 -284.8008 Td
-(3077 ) 21.8426 Tj
-0 -294.2942 Td
-(3078 ) 21.8426 Tj
-0 -303.7875 Td
-(3079 ) 21.8426 Tj
-0 -313.2809 Td
-(3080 ) 21.8426 Tj
-0 -322.7743 Td
-(3081 ) 21.8426 Tj
-0 -332.2676 Td
-(3082 ) 21.8426 Tj
-0 -341.761 Td
-(3083 ) 21.8426 Tj
-0 -351.2543 Td
-(3084 ) 21.8426 Tj
-0 -360.7477 Td
-(3085 ) 21.8426 Tj
-0 -370.2411 Td
-(3086 ) 21.8426 Tj
-0 -379.7344 Td
-(3087 ) 21.8426 Tj
-0 -389.2278 Td
-(3088 ) 21.8426 Tj
-0 -398.7211 Td
-(3089 ) 21.8426 Tj
-0 -408.2145 Td
-(3090 ) 21.8426 Tj
-0 -417.7079 Td
-(3091 ) 21.8426 Tj
-0 -427.2012 Td
-(3092 ) 21.8426 Tj
-0 -436.6946 Td
-(3093 ) 21.8426 Tj
-0 -446.1879 Td
-(3094 ) 21.8426 Tj
-0 -455.6813 Td
-(3095 ) 21.8426 Tj
-0 -465.1747 Td
-(3096 ) 21.8426 Tj
-0 -474.668 Td
-(3097 ) 21.8426 Tj
-0 -484.1614 Td
-(3098 ) 21.8426 Tj
-0 -493.6547 Td
-(3099 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 30) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 38 38
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/stat.h  Page 1) 161.635 Tj
-0 -28.4801 Td
-(3100 #define T_DIR  1   // Directory) 157.2665 Tj
-0 -37.9735 Td
-(3101 #define T_FILE 2   // File) 135.4239 Tj
-0 -47.4668 Td
-(3102 #define T_DEV  3   // Special device) 179.1091 Tj
-0 -56.9602 Td
-(3103 ) 21.8426 Tj
-0 -66.4535 Td
-(3104 struct stat {) 78.6333 Tj
-0 -75.9469 Td
-(3105   short type;  // Type of file) 152.898 Tj
-0 -85.4403 Td
-(3106   int dev;     // Device number) 157.2665 Tj
-0 -94.9336 Td
-(3107   uint ino;    // Inode number on device) 196.5831 Tj
-0 -104.427 Td
-(3108   short nlink; // Number of links to file) 200.9517 Tj
-0 -113.9203 Td
-(3109   uint size;   // Size of file in bytes) 192.2146 Tj
-0 -123.4137 Td
-(3110 };) 30.5796 Tj
-0 -132.9071 Td
-(3111 ) 21.8426 Tj
-0 -142.4004 Td
-(3112 ) 21.8426 Tj
-0 -151.8938 Td
-(3113 ) 21.8426 Tj
-0 -161.3871 Td
-(3114 ) 21.8426 Tj
-0 -170.8805 Td
-(3115 ) 21.8426 Tj
-0 -180.3739 Td
-(3116 ) 21.8426 Tj
-0 -189.8672 Td
-(3117 ) 21.8426 Tj
-0 -199.3606 Td
-(3118 ) 21.8426 Tj
-0 -208.8539 Td
-(3119 ) 21.8426 Tj
-0 -218.3473 Td
-(3120 ) 21.8426 Tj
-0 -227.8407 Td
-(3121 ) 21.8426 Tj
-0 -237.334 Td
-(3122 ) 21.8426 Tj
-0 -246.8274 Td
-(3123 ) 21.8426 Tj
-0 -256.3207 Td
-(3124 ) 21.8426 Tj
-0 -265.8141 Td
-(3125 ) 21.8426 Tj
-0 -275.3075 Td
-(3126 ) 21.8426 Tj
-0 -284.8008 Td
-(3127 ) 21.8426 Tj
-0 -294.2942 Td
-(3128 ) 21.8426 Tj
-0 -303.7875 Td
-(3129 ) 21.8426 Tj
-0 -313.2809 Td
-(3130 ) 21.8426 Tj
-0 -322.7743 Td
-(3131 ) 21.8426 Tj
-0 -332.2676 Td
-(3132 ) 21.8426 Tj
-0 -341.761 Td
-(3133 ) 21.8426 Tj
-0 -351.2543 Td
-(3134 ) 21.8426 Tj
-0 -360.7477 Td
-(3135 ) 21.8426 Tj
-0 -370.2411 Td
-(3136 ) 21.8426 Tj
-0 -379.7344 Td
-(3137 ) 21.8426 Tj
-0 -389.2278 Td
-(3138 ) 21.8426 Tj
-0 -398.7211 Td
-(3139 ) 21.8426 Tj
-0 -408.2145 Td
-(3140 ) 21.8426 Tj
-0 -417.7079 Td
-(3141 ) 21.8426 Tj
-0 -427.2012 Td
-(3142 ) 21.8426 Tj
-0 -436.6946 Td
-(3143 ) 21.8426 Tj
-0 -446.1879 Td
-(3144 ) 21.8426 Tj
-0 -455.6813 Td
-(3145 ) 21.8426 Tj
-0 -465.1747 Td
-(3146 ) 21.8426 Tj
-0 -474.668 Td
-(3147 ) 21.8426 Tj
-0 -484.1614 Td
-(3148 ) 21.8426 Tj
-0 -493.6547 Td
-(3149 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 31) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.h  Page 1) 152.898 Tj
-0 -28.4801 Td
-(3150 // On-disk file system format.) 152.898 Tj
-0 -37.9735 Td
-(3151 // Both the kernel and user programs use this header file.) 275.2164 Tj
-0 -47.4668 Td
-(3152 ) 21.8426 Tj
-0 -56.9602 Td
-(3153 // Block 0 is unused.) 113.5814 Tj
-0 -66.4535 Td
-(3154 // Block 1 is super block.) 135.4239 Tj
-0 -75.9469 Td
-(3155 // Inodes start at block 2.) 139.7925 Tj
-0 -85.4403 Td
-(3156 ) 21.8426 Tj
-0 -94.9336 Td
-(3157 #define ROOTINO 1  // root i-number) 174.7406 Tj
-0 -104.427 Td
-(3158 #define BSIZE 512  // block size) 161.635 Tj
-0 -113.9203 Td
-(3159 ) 21.8426 Tj
-0 -123.4137 Td
-(3160 // File system super block) 135.4239 Tj
-0 -132.9071 Td
-(3161 struct superblock {) 104.8443 Tj
-0 -142.4004 Td
-(3162   uint size;         // Size of file system image \(blocks\
-\)) 275.2164 Tj
-0 -151.8938 Td
-(3163   uint nblocks;      // Number of data blocks) 218.4257 Tj
-0 -161.3871 Td
-(3164   uint ninodes;      // Number of inodes.) 200.9517 Tj
-0 -170.8805 Td
-(3165 };) 30.5796 Tj
-0 -180.3739 Td
-(3166 ) 21.8426 Tj
-0 -189.8672 Td
-(3167 #define NDIRECT 12) 100.4758 Tj
-0 -199.3606 Td
-(3168 #define NINDIRECT \(BSIZE / sizeof\(uint\)\)) 196.5831 Tj
-0 -208.8539 Td
-(3169 #define MAXFILE \(NDIRECT + NINDIRECT\)) 183.4776 Tj
-0 -218.3473 Td
-(3170 ) 21.8426 Tj
-0 -227.8407 Td
-(3171 // On-disk inode structure) 135.4239 Tj
-0 -237.334 Td
-(3172 struct dinode {) 87.3703 Tj
-0 -246.8274 Td
-(3173   short type;           // File type) 179.1091 Tj
-0 -256.3207 Td
-(3174   short major;          // Major device number \(T_DEV onl\
-y\)) 279.5849 Tj
-0 -265.8141 Td
-(3175   short minor;          // Minor device number \(T_DEV onl\
-y\)) 279.5849 Tj
-0 -275.3075 Td
-(3176   short nlink;          // Number of links to inode in fil\
-e system) 310.1645 Tj
-0 -284.8008 Td
-(3177   uint size;            // Size of file \(bytes\)) 227.1628 Tj
-0 -294.2942 Td
-(3178   uint addrs[NDIRECT+1];   // Data block addresses) 240.2683 Tj
-0 -303.7875 Td
-(3179 };) 30.5796 Tj
-0 -313.2809 Td
-(3180 ) 21.8426 Tj
-0 -322.7743 Td
-(3181 // Inodes per block.) 109.2129 Tj
-0 -332.2676 Td
-(3182 #define IPB           \(BSIZE / sizeof\(struct dinode\)\)) 253.3738 Tj
-0 -341.761 Td
-(3183 ) 21.8426 Tj
-0 -351.2543 Td
-(3184 // Block containing inode i) 139.7925 Tj
-0 -360.7477 Td
-(3185 #define IBLOCK\(i\)     \(\(i\) / IPB + 2\)) 183.4776 Tj
-0 -370.2411 Td
-(3186 ) 21.8426 Tj
-0 -379.7344 Td
-(3187 // Bitmap bits per block) 126.6869 Tj
-0 -389.2278 Td
-(3188 #define BPB           \(BSIZE*8\)) 157.2665 Tj
-0 -398.7211 Td
-(3189 ) 21.8426 Tj
-0 -408.2145 Td
-(3190 // Block containing bit for block b) 174.7406 Tj
-0 -417.7079 Td
-(3191 #define BBLOCK\(b, ninodes\) \(b/BPB + \(ninodes\)/IPB + 3\
-\)) 257.7424 Tj
-0 -427.2012 Td
-(3192 ) 21.8426 Tj
-0 -436.6946 Td
-(3193 ) 21.8426 Tj
-0 -446.1879 Td
-(3194 ) 21.8426 Tj
-0 -455.6813 Td
-(3195 ) 21.8426 Tj
-0 -465.1747 Td
-(3196 ) 21.8426 Tj
-0 -474.668 Td
-(3197 ) 21.8426 Tj
-0 -484.1614 Td
-(3198 ) 21.8426 Tj
-0 -493.6547 Td
-(3199 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 31) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 39 39
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.h  Page 2) 152.898 Tj
-0 -28.4801 Td
-(3200 // Directory is a file containing a sequence of dirent str\
-uctures.) 310.1645 Tj
-0 -37.9735 Td
-(3201 #define DIRSIZ 14) 96.1073 Tj
-0 -47.4668 Td
-(3202 ) 21.8426 Tj
-0 -56.9602 Td
-(3203 struct dirent {) 87.3703 Tj
-0 -66.4535 Td
-(3204   ushort inum;) 83.0018 Tj
-0 -75.9469 Td
-(3205   char name[DIRSIZ];) 109.2129 Tj
-0 -85.4403 Td
-(3206 };) 30.5796 Tj
-0 -94.9336 Td
-(3207 ) 21.8426 Tj
-0 -104.427 Td
-(3208 ) 21.8426 Tj
-0 -113.9203 Td
-(3209 ) 21.8426 Tj
-0 -123.4137 Td
-(3210 ) 21.8426 Tj
-0 -132.9071 Td
-(3211 ) 21.8426 Tj
-0 -142.4004 Td
-(3212 ) 21.8426 Tj
-0 -151.8938 Td
-(3213 ) 21.8426 Tj
-0 -161.3871 Td
-(3214 ) 21.8426 Tj
-0 -170.8805 Td
-(3215 ) 21.8426 Tj
-0 -180.3739 Td
-(3216 ) 21.8426 Tj
-0 -189.8672 Td
-(3217 ) 21.8426 Tj
-0 -199.3606 Td
-(3218 ) 21.8426 Tj
-0 -208.8539 Td
-(3219 ) 21.8426 Tj
-0 -218.3473 Td
-(3220 ) 21.8426 Tj
-0 -227.8407 Td
-(3221 ) 21.8426 Tj
-0 -237.334 Td
-(3222 ) 21.8426 Tj
-0 -246.8274 Td
-(3223 ) 21.8426 Tj
-0 -256.3207 Td
-(3224 ) 21.8426 Tj
-0 -265.8141 Td
-(3225 ) 21.8426 Tj
-0 -275.3075 Td
-(3226 ) 21.8426 Tj
-0 -284.8008 Td
-(3227 ) 21.8426 Tj
-0 -294.2942 Td
-(3228 ) 21.8426 Tj
-0 -303.7875 Td
-(3229 ) 21.8426 Tj
-0 -313.2809 Td
-(3230 ) 21.8426 Tj
-0 -322.7743 Td
-(3231 ) 21.8426 Tj
-0 -332.2676 Td
-(3232 ) 21.8426 Tj
-0 -341.761 Td
-(3233 ) 21.8426 Tj
-0 -351.2543 Td
-(3234 ) 21.8426 Tj
-0 -360.7477 Td
-(3235 ) 21.8426 Tj
-0 -370.2411 Td
-(3236 ) 21.8426 Tj
-0 -379.7344 Td
-(3237 ) 21.8426 Tj
-0 -389.2278 Td
-(3238 ) 21.8426 Tj
-0 -398.7211 Td
-(3239 ) 21.8426 Tj
-0 -408.2145 Td
-(3240 ) 21.8426 Tj
-0 -417.7079 Td
-(3241 ) 21.8426 Tj
-0 -427.2012 Td
-(3242 ) 21.8426 Tj
-0 -436.6946 Td
-(3243 ) 21.8426 Tj
-0 -446.1879 Td
-(3244 ) 21.8426 Tj
-0 -455.6813 Td
-(3245 ) 21.8426 Tj
-0 -465.1747 Td
-(3246 ) 21.8426 Tj
-0 -474.668 Td
-(3247 ) 21.8426 Tj
-0 -484.1614 Td
-(3248 ) 21.8426 Tj
-0 -493.6547 Td
-(3249 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 32) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/file.h  Page 1) 161.635 Tj
-0 -28.4801 Td
-(3250 struct file {) 78.6333 Tj
-0 -37.9735 Td
-(3251   enum { FD_NONE, FD_PIPE, FD_INODE } type;) 209.6887 Tj
-0 -47.4668 Td
-(3252   int ref; // reference count) 148.5295 Tj
-0 -56.9602 Td
-(3253   char readable;) 91.7388 Tj
-0 -66.4535 Td
-(3254   char writable;) 91.7388 Tj
-0 -75.9469 Td
-(3255   struct pipe *pipe;) 109.2129 Tj
-0 -85.4403 Td
-(3256   struct inode *ip;) 104.8443 Tj
-0 -94.9336 Td
-(3257   uint off;) 69.8962 Tj
-0 -104.427 Td
-(3258 };) 30.5796 Tj
-0 -113.9203 Td
-(3259 ) 21.8426 Tj
-0 -123.4137 Td
-(3260 ) 21.8426 Tj
-0 -132.9071 Td
-(3261 // in-core file system types) 144.161 Tj
-0 -142.4004 Td
-(3262 ) 21.8426 Tj
-0 -151.8938 Td
-(3263 struct inode {) 83.0018 Tj
-0 -161.3871 Td
-(3264   uint dev;           // Device number) 187.8461 Tj
-0 -170.8805 Td
-(3265   uint inum;          // Inode number) 183.4776 Tj
-0 -180.3739 Td
-(3266   int ref;            // Reference count) 196.5831 Tj
-0 -189.8672 Td
-(3267   int flags;          // I_BUSY, I_VALID) 196.5831 Tj
-0 -199.3606 Td
-(3268 ) 21.8426 Tj
-0 -208.8539 Td
-(3269   short type;         // copy of disk inode) 209.6887 Tj
-0 -218.3473 Td
-(3270   short major;) 83.0018 Tj
-0 -227.8407 Td
-(3271   short minor;) 83.0018 Tj
-0 -237.334 Td
-(3272   short nlink;) 83.0018 Tj
-0 -246.8274 Td
-(3273   uint size;) 74.2647 Tj
-0 -256.3207 Td
-(3274   uint addrs[NDIRECT+1];) 126.6869 Tj
-0 -265.8141 Td
-(3275 };) 30.5796 Tj
-0 -275.3075 Td
-(3276 ) 21.8426 Tj
-0 -284.8008 Td
-(3277 #define I_BUSY 0x1) 100.4758 Tj
-0 -294.2942 Td
-(3278 #define I_VALID 0x2) 104.8443 Tj
-0 -303.7875 Td
-(3279 ) 21.8426 Tj
-0 -313.2809 Td
-(3280 ) 21.8426 Tj
-0 -322.7743 Td
-(3281 // device implementations) 131.0554 Tj
-0 -332.2676 Td
-(3282 ) 21.8426 Tj
-0 -341.761 Td
-(3283 struct devsw {) 83.0018 Tj
-0 -351.2543 Td
-(3284   int \(*read\)\(struct inode*, char*, int\);) 200.9517 Tj
-0 -360.7477 Td
-(3285   int \(*write\)\(struct inode*, char*, int\);) 205.3202 Tj
-0 -370.2411 Td
-(3286 };) 30.5796 Tj
-0 -379.7344 Td
-(3287 ) 21.8426 Tj
-0 -389.2278 Td
-(3288 extern struct devsw devsw[];) 144.161 Tj
-0 -398.7211 Td
-(3289 ) 21.8426 Tj
-0 -408.2145 Td
-(3290 #define CONSOLE 1) 96.1073 Tj
-0 -417.7079 Td
-(3291 ) 21.8426 Tj
-0 -427.2012 Td
-(3292 ) 21.8426 Tj
-0 -436.6946 Td
-(3293 ) 21.8426 Tj
-0 -446.1879 Td
-(3294 ) 21.8426 Tj
-0 -455.6813 Td
-(3295 ) 21.8426 Tj
-0 -465.1747 Td
-(3296 ) 21.8426 Tj
-0 -474.668 Td
-(3297 ) 21.8426 Tj
-0 -484.1614 Td
-(3298 ) 21.8426 Tj
-0 -493.6547 Td
-(3299 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 32) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 40 40
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/ide.c  Page 1) 157.2665 Tj
-0 -28.4801 Td
-(3300 // Simple PIO-based \(non-DMA\) IDE driver code.) 222.7942 Tj
-0 -37.9735 Td
-(3301 ) 21.8426 Tj
-0 -47.4668 Td
-(3302 #include "types.h") 100.4758 Tj
-0 -56.9602 Td
-(3303 #include "defs.h") 96.1073 Tj
-0 -66.4535 Td
-(3304 #include "param.h") 100.4758 Tj
-0 -75.9469 Td
-(3305 #include "mmu.h") 91.7388 Tj
-0 -85.4403 Td
-(3306 #include "proc.h") 96.1073 Tj
-0 -94.9336 Td
-(3307 #include "x86.h") 91.7388 Tj
-0 -104.427 Td
-(3308 #include "traps.h") 100.4758 Tj
-0 -113.9203 Td
-(3309 #include "spinlock.h") 113.5814 Tj
-0 -123.4137 Td
-(3310 #include "buf.h") 91.7388 Tj
-0 -132.9071 Td
-(3311 ) 21.8426 Tj
-0 -142.4004 Td
-(3312 #define IDE_BSY       0x80) 135.4239 Tj
-0 -151.8938 Td
-(3313 #define IDE_DRDY      0x40) 135.4239 Tj
-0 -161.3871 Td
-(3314 #define IDE_DF        0x20) 135.4239 Tj
-0 -170.8805 Td
-(3315 #define IDE_ERR       0x01) 135.4239 Tj
-0 -180.3739 Td
-(3316 ) 21.8426 Tj
-0 -189.8672 Td
-(3317 #define IDE_CMD_READ  0x20) 135.4239 Tj
-0 -199.3606 Td
-(3318 #define IDE_CMD_WRITE 0x30) 135.4239 Tj
-0 -208.8539 Td
-(3319 ) 21.8426 Tj
-0 -218.3473 Td
-(3320 // idequeue points to the buf now being read/written to th\
-e disk.) 305.796 Tj
-0 -227.8407 Td
-(3321 // idequeue->qnext points to the next buf to be processed.) 275.2164 Tj
-0 -237.334 Td
-(3322 // You must hold idelock while manipulating queue.) 240.2683 Tj
-0 -246.8274 Td
-(3323 ) 21.8426 Tj
-0 -256.3207 Td
-(3324 static struct spinlock idelock;) 157.2665 Tj
-0 -265.8141 Td
-(3325 static struct buf *idequeue;) 144.161 Tj
-0 -275.3075 Td
-(3326 ) 21.8426 Tj
-0 -284.8008 Td
-(3327 static int havedisk1;) 113.5814 Tj
-0 -294.2942 Td
-(3328 static void idestart\(struct buf*\);) 170.3721 Tj
-0 -303.7875 Td
-(3329 ) 21.8426 Tj
-0 -313.2809 Td
-(3330 // Wait for IDE disk to become ready.) 183.4776 Tj
-0 -322.7743 Td
-(3331 static int) 65.5277 Tj
-0 -332.2676 Td
-(3332 idewait\(int checkerr\)) 113.5814 Tj
-0 -341.761 Td
-(3333 {) 26.2111 Tj
-0 -351.2543 Td
-(3334   int r;) 56.7907 Tj
-0 -360.7477 Td
-(3335 ) 21.8426 Tj
-0 -370.2411 Td
-(3336   while\(\(\(r = inb\(0x1f7\)\) & \(IDE_BSY|IDE_DRDY\)\) !\
-= IDE_DRDY\)) 283.9534 Tj
-0 -379.7344 Td
-(3337     ;) 43.6851 Tj
-0 -389.2278 Td
-(3338   if\(checkerr && \(r & \(IDE_DF|IDE_ERR\)\) != 0\)) 218.4257 Tj
-0 -398.7211 Td
-(3339     return -1;) 83.0018 Tj
-0 -408.2145 Td
-(3340   return 0;) 69.8962 Tj
-0 -417.7079 Td
-(3341 }) 26.2111 Tj
-0 -427.2012 Td
-(3342 ) 21.8426 Tj
-0 -436.6946 Td
-(3343 ) 21.8426 Tj
-0 -446.1879 Td
-(3344 ) 21.8426 Tj
-0 -455.6813 Td
-(3345 ) 21.8426 Tj
-0 -465.1747 Td
-(3346 ) 21.8426 Tj
-0 -474.668 Td
-(3347 ) 21.8426 Tj
-0 -484.1614 Td
-(3348 ) 21.8426 Tj
-0 -493.6547 Td
-(3349 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 33) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/ide.c  Page 2) 157.2665 Tj
-0 -28.4801 Td
-(3350 void) 39.3166 Tj
-0 -37.9735 Td
-(3351 ideinit\(void\)) 78.6333 Tj
-0 -47.4668 Td
-(3352 {) 26.2111 Tj
-0 -56.9602 Td
-(3353   int i;) 56.7907 Tj
-0 -66.4535 Td
-(3354 ) 21.8426 Tj
-0 -75.9469 Td
-(3355   initlock\(&idelock, "ide"\);) 144.161 Tj
-0 -85.4403 Td
-(3356   picenable\(IRQ_IDE\);) 113.5814 Tj
-0 -94.9336 Td
-(3357   ioapicenable\(IRQ_IDE, ncpu - 1\);) 170.3721 Tj
-0 -104.427 Td
-(3358   idewait\(0\);) 78.6333 Tj
-0 -113.9203 Td
-(3359 ) 21.8426 Tj
-0 -123.4137 Td
-(3360   // Check if disk 1 is present) 157.2665 Tj
-0 -132.9071 Td
-(3361   outb\(0x1f6, 0xe0 | \(1<<4\)\);) 148.5295 Tj
-0 -142.4004 Td
-(3362   for\(i=0; i<1000; i++\){) 126.6869 Tj
-0 -151.8938 Td
-(3363     if\(inb\(0x1f7\) != 0\){) 126.6869 Tj
-0 -161.3871 Td
-(3364       havedisk1 = 1;) 109.2129 Tj
-0 -170.8805 Td
-(3365       break;) 74.2647 Tj
-0 -180.3739 Td
-(3366     }) 43.6851 Tj
-0 -189.8672 Td
-(3367   }) 34.9481 Tj
-0 -199.3606 Td
-(3368 ) 21.8426 Tj
-0 -208.8539 Td
-(3369   // Switch back to disk 0.) 139.7925 Tj
-0 -218.3473 Td
-(3370   outb\(0x1f6, 0xe0 | \(0<<4\)\);) 148.5295 Tj
-0 -227.8407 Td
-(3371 }) 26.2111 Tj
-0 -237.334 Td
-(3372 ) 21.8426 Tj
-0 -246.8274 Td
-(3373 // Start the request for b.  Caller must hold idelock.) 257.7424 Tj
-0 -256.3207 Td
-(3374 static void) 69.8962 Tj
-0 -265.8141 Td
-(3375 idestart\(struct buf *b\)) 122.3184 Tj
-0 -275.3075 Td
-(3376 {) 26.2111 Tj
-0 -284.8008 Td
-(3377   if\(b == 0\)) 74.2647 Tj
-0 -294.2942 Td
-(3378     panic\("idestart"\);) 117.9499 Tj
-0 -303.7875 Td
-(3379 ) 21.8426 Tj
-0 -313.2809 Td
-(3380   idewait\(0\);) 78.6333 Tj
-0 -322.7743 Td
-(3381   outb\(0x3f6, 0\);  // generate interrupt) 196.5831 Tj
-0 -332.2676 Td
-(3382   outb\(0x1f2, 1\);  // number of sectors) 192.2146 Tj
-0 -341.761 Td
-(3383   outb\(0x1f3, b->sector & 0xff\);) 161.635 Tj
-0 -351.2543 Td
-(3384   outb\(0x1f4, \(b->sector >> 8\) & 0xff\);) 192.2146 Tj
-0 -360.7477 Td
-(3385   outb\(0x1f5, \(b->sector >> 16\) & 0xff\);) 196.5831 Tj
-0 -370.2411 Td
-(3386   outb\(0x1f6, 0xe0 | \(\(b->dev&1\)<<4\) | \(\(b->sector>\
->24\)&0x0f\)\);) 297.059 Tj
-0 -379.7344 Td
-(3387   if\(b->flags & B_DIRTY\){) 131.0554 Tj
-0 -389.2278 Td
-(3388     outb\(0x1f7, IDE_CMD_WRITE\);) 157.2665 Tj
-0 -398.7211 Td
-(3389     outsl\(0x1f0, b->data, 512/4\);) 166.0035 Tj
-0 -408.2145 Td
-(3390   } else {) 65.5277 Tj
-0 -417.7079 Td
-(3391     outb\(0x1f7, IDE_CMD_READ\);) 152.898 Tj
-0 -427.2012 Td
-(3392   }) 34.9481 Tj
-0 -436.6946 Td
-(3393 }) 26.2111 Tj
-0 -446.1879 Td
-(3394 ) 21.8426 Tj
-0 -455.6813 Td
-(3395 ) 21.8426 Tj
-0 -465.1747 Td
-(3396 ) 21.8426 Tj
-0 -474.668 Td
-(3397 ) 21.8426 Tj
-0 -484.1614 Td
-(3398 ) 21.8426 Tj
-0 -493.6547 Td
-(3399 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 33) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 41 41
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/ide.c  Page 3) 157.2665 Tj
-0 -28.4801 Td
-(3400 // Interrupt handler.) 113.5814 Tj
-0 -37.9735 Td
-(3401 void) 39.3166 Tj
-0 -47.4668 Td
-(3402 ideintr\(void\)) 78.6333 Tj
-0 -56.9602 Td
-(3403 {) 26.2111 Tj
-0 -66.4535 Td
-(3404   struct buf *b;) 91.7388 Tj
-0 -75.9469 Td
-(3405 ) 21.8426 Tj
-0 -85.4403 Td
-(3406   // Take first buffer off queue.) 166.0035 Tj
-0 -94.9336 Td
-(3407   acquire\(&idelock\);) 109.2129 Tj
-0 -104.427 Td
-(3408   if\(\(b = idequeue\) == 0\){) 135.4239 Tj
-0 -113.9203 Td
-(3409     release\(&idelock\);) 117.9499 Tj
-0 -123.4137 Td
-(3410     cprintf\("Spurious IDE interrupt.\\n"\);) 200.9517 Tj
-0 -132.9071 Td
-(3411     return;) 69.8962 Tj
-0 -142.4004 Td
-(3412   }) 34.9481 Tj
-0 -151.8938 Td
-(3413   idequeue = b->qnext;) 117.9499 Tj
-0 -161.3871 Td
-(3414 ) 21.8426 Tj
-0 -170.8805 Td
-(3415   // Read data if needed.) 131.0554 Tj
-0 -180.3739 Td
-(3416   if\(!\(b->flags & B_DIRTY\) && idewait\(1\) >= 0\)) 222.7942 Tj
-0 -189.8672 Td
-(3417     insl\(0x1f0, b->data, 512/4\);) 161.635 Tj
-0 -199.3606 Td
-(3418 ) 21.8426 Tj
-0 -208.8539 Td
-(3419   // Wake process waiting for this buf.) 192.2146 Tj
-0 -218.3473 Td
-(3420   b->flags |= B_VALID;) 117.9499 Tj
-0 -227.8407 Td
-(3421   b->flags &= ~B_DIRTY;) 122.3184 Tj
-0 -237.334 Td
-(3422   wakeup\(b\);) 74.2647 Tj
-0 -246.8274 Td
-(3423 ) 21.8426 Tj
-0 -256.3207 Td
-(3424   // Start disk on next buf in queue.) 183.4776 Tj
-0 -265.8141 Td
-(3425   if\(idequeue != 0\)) 104.8443 Tj
-0 -275.3075 Td
-(3426     idestart\(idequeue\);) 122.3184 Tj
-0 -284.8008 Td
-(3427 ) 21.8426 Tj
-0 -294.2942 Td
-(3428   release\(&idelock\);) 109.2129 Tj
-0 -303.7875 Td
-(3429 }) 26.2111 Tj
-0 -313.2809 Td
-(3430 ) 21.8426 Tj
-0 -322.7743 Td
-(3431 ) 21.8426 Tj
-0 -332.2676 Td
-(3432 ) 21.8426 Tj
-0 -341.761 Td
-(3433 ) 21.8426 Tj
-0 -351.2543 Td
-(3434 ) 21.8426 Tj
-0 -360.7477 Td
-(3435 ) 21.8426 Tj
-0 -370.2411 Td
-(3436 ) 21.8426 Tj
-0 -379.7344 Td
-(3437 ) 21.8426 Tj
-0 -389.2278 Td
-(3438 ) 21.8426 Tj
-0 -398.7211 Td
-(3439 ) 21.8426 Tj
-0 -408.2145 Td
-(3440 ) 21.8426 Tj
-0 -417.7079 Td
-(3441 ) 21.8426 Tj
-0 -427.2012 Td
-(3442 ) 21.8426 Tj
-0 -436.6946 Td
-(3443 ) 21.8426 Tj
-0 -446.1879 Td
-(3444 ) 21.8426 Tj
-0 -455.6813 Td
-(3445 ) 21.8426 Tj
-0 -465.1747 Td
-(3446 ) 21.8426 Tj
-0 -474.668 Td
-(3447 ) 21.8426 Tj
-0 -484.1614 Td
-(3448 ) 21.8426 Tj
-0 -493.6547 Td
-(3449 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 34) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/ide.c  Page 4) 157.2665 Tj
-0 -28.4801 Td
-(3450 // Sync buf with disk.) 117.9499 Tj
-0 -37.9735 Td
-(3451 // If B_DIRTY is set, write buf to disk, clear B_DIRTY, se\
-t B_VALID.) 318.9016 Tj
-0 -47.4668 Td
-(3452 // Else if B_VALID is not set, read buf from disk, set B_V\
-ALID.) 297.059 Tj
-0 -56.9602 Td
-(3453 void) 39.3166 Tj
-0 -66.4535 Td
-(3454 iderw\(struct buf *b\)) 109.2129 Tj
-0 -75.9469 Td
-(3455 {) 26.2111 Tj
-0 -85.4403 Td
-(3456   struct buf **pp;) 100.4758 Tj
-0 -94.9336 Td
-(3457 ) 21.8426 Tj
-0 -104.427 Td
-(3458   if\(!\(b->flags & B_BUSY\)\)) 135.4239 Tj
-0 -113.9203 Td
-(3459     panic\("iderw: buf not busy"\);) 166.0035 Tj
-0 -123.4137 Td
-(3460   if\(\(b->flags & \(B_VALID|B_DIRTY\)\) == B_VALID\)) 227.1628 Tj
-0 -132.9071 Td
-(3461     panic\("iderw: nothing to do"\);) 170.3721 Tj
-0 -142.4004 Td
-(3462   if\(b->dev != 0 && !havedisk1\)) 157.2665 Tj
-0 -151.8938 Td
-(3463     panic\("idrw: ide disk 1 not present"\);) 205.3202 Tj
-0 -161.3871 Td
-(3464 ) 21.8426 Tj
-0 -170.8805 Td
-(3465   acquire\(&idelock\);) 109.2129 Tj
-0 -180.3739 Td
-(3466 ) 21.8426 Tj
-0 -189.8672 Td
-(3467   // Append b to idequeue.) 135.4239 Tj
-0 -199.3606 Td
-(3468   b->qnext = 0;) 87.3703 Tj
-0 -208.8539 Td
-(3469   for\(pp=&idequeue; *pp; pp=&\(*pp\)->qnext\)) 205.3202 Tj
-0 -218.3473 Td
-(3470     ;) 43.6851 Tj
-0 -227.8407 Td
-(3471   *pp = b;) 65.5277 Tj
-0 -237.334 Td
-(3472 ) 21.8426 Tj
-0 -246.8274 Td
-(3473   // Start disk if necessary.) 148.5295 Tj
-0 -256.3207 Td
-(3474   if\(idequeue == b\)) 104.8443 Tj
-0 -265.8141 Td
-(3475     idestart\(b\);) 91.7388 Tj
-0 -275.3075 Td
-(3476 ) 21.8426 Tj
-0 -284.8008 Td
-(3477   // Wait for request to finish.) 161.635 Tj
-0 -294.2942 Td
-(3478   // Assuming will not sleep too long: ignore proc->killed\
-.) 279.5849 Tj
-0 -303.7875 Td
-(3479   while\(\(b->flags & \(B_VALID|B_DIRTY\)\) != B_VALID\)) 240.2683 Tj
-0 -313.2809 Td
-(3480     sleep\(b, &idelock\);) 122.3184 Tj
-0 -322.7743 Td
-(3481 ) 21.8426 Tj
-0 -332.2676 Td
-(3482   release\(&idelock\);) 109.2129 Tj
-0 -341.761 Td
-(3483 }) 26.2111 Tj
-0 -351.2543 Td
-(3484 ) 21.8426 Tj
-0 -360.7477 Td
-(3485 ) 21.8426 Tj
-0 -370.2411 Td
-(3486 ) 21.8426 Tj
-0 -379.7344 Td
-(3487 ) 21.8426 Tj
-0 -389.2278 Td
-(3488 ) 21.8426 Tj
-0 -398.7211 Td
-(3489 ) 21.8426 Tj
-0 -408.2145 Td
-(3490 ) 21.8426 Tj
-0 -417.7079 Td
-(3491 ) 21.8426 Tj
-0 -427.2012 Td
-(3492 ) 21.8426 Tj
-0 -436.6946 Td
-(3493 ) 21.8426 Tj
-0 -446.1879 Td
-(3494 ) 21.8426 Tj
-0 -455.6813 Td
-(3495 ) 21.8426 Tj
-0 -465.1747 Td
-(3496 ) 21.8426 Tj
-0 -474.668 Td
-(3497 ) 21.8426 Tj
-0 -484.1614 Td
-(3498 ) 21.8426 Tj
-0 -493.6547 Td
-(3499 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 34) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 42 42
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/bio.c  Page 1) 157.2665 Tj
-0 -28.4801 Td
-(3500 // Buffer cache.) 91.7388 Tj
-0 -37.9735 Td
-(3501 //) 30.5796 Tj
-0 -47.4668 Td
-(3502 // The buffer cache is a linked list of buf structures hol\
-ding) 292.6905 Tj
-0 -56.9602 Td
-(3503 // cached copies of disk block contents.  Caching disk blo\
-cks) 288.322 Tj
-0 -66.4535 Td
-(3504 // in memory reduces the number of disk reads and also pro\
-vides) 297.059 Tj
-0 -75.9469 Td
-(3505 // a synchronization point for disk blocks used by multipl\
-e processes.) 327.6386 Tj
-0 -85.4403 Td
-(3506 //) 30.5796 Tj
-0 -94.9336 Td
-(3507 // Interface:) 78.6333 Tj
-0 -104.427 Td
-(3508 // * To get a buffer for a particular disk block, call bre\
-ad.) 288.322 Tj
-0 -113.9203 Td
-(3509 // * After changing buffer data, call bwrite to flush it t\
-o disk.) 305.796 Tj
-0 -123.4137 Td
-(3510 // * When done with the buffer, call brelse.) 214.0572 Tj
-0 -132.9071 Td
-(3511 // * Do not use the buffer after calling brelse.) 231.5313 Tj
-0 -142.4004 Td
-(3512 // * Only one process at a time can use a buffer,) 235.8998 Tj
-0 -151.8938 Td
-(3513 //     so do not keep them longer than necessary.) 235.8998 Tj
-0 -161.3871 Td
-(3514 //) 30.5796 Tj
-0 -170.8805 Td
-(3515 // The implementation uses three state flags internally:) 266.4794 Tj
-0 -180.3739 Td
-(3516 // * B_BUSY: the block has been returned from bread) 244.6368 Tj
-0 -189.8672 Td
-(3517 //     and has not been passed back to brelse.) 222.7942 Tj
-0 -199.3606 Td
-(3518 // * B_VALID: the buffer data has been initialized) 240.2683 Tj
-0 -208.8539 Td
-(3519 //     with the associated disk block contents.) 227.1628 Tj
-0 -218.3473 Td
-(3520 // * B_DIRTY: the buffer data has been modified) 227.1628 Tj
-0 -227.8407 Td
-(3521 //     and needs to be written to disk.) 192.2146 Tj
-0 -237.334 Td
-(3522 ) 21.8426 Tj
-0 -246.8274 Td
-(3523 #include "types.h") 100.4758 Tj
-0 -256.3207 Td
-(3524 #include "defs.h") 96.1073 Tj
-0 -265.8141 Td
-(3525 #include "param.h") 100.4758 Tj
-0 -275.3075 Td
-(3526 #include "spinlock.h") 113.5814 Tj
-0 -284.8008 Td
-(3527 #include "buf.h") 91.7388 Tj
-0 -294.2942 Td
-(3528 ) 21.8426 Tj
-0 -303.7875 Td
-(3529 struct {) 56.7907 Tj
-0 -313.2809 Td
-(3530   struct spinlock lock;) 122.3184 Tj
-0 -322.7743 Td
-(3531   struct buf buf[NBUF];) 122.3184 Tj
-0 -332.2676 Td
-(3532 ) 21.8426 Tj
-0 -341.761 Td
-(3533   // Linked list of all buffers, through prev/next.) 244.6368 Tj
-0 -351.2543 Td
-(3534   // head.next is most recently used.) 183.4776 Tj
-0 -360.7477 Td
-(3535   struct buf head;) 100.4758 Tj
-0 -370.2411 Td
-(3536 } bcache;) 61.1592 Tj
-0 -379.7344 Td
-(3537 ) 21.8426 Tj
-0 -389.2278 Td
-(3538 void) 39.3166 Tj
-0 -398.7211 Td
-(3539 binit\(void\)) 69.8962 Tj
-0 -408.2145 Td
-(3540 {) 26.2111 Tj
-0 -417.7079 Td
-(3541   struct buf *b;) 91.7388 Tj
-0 -427.2012 Td
-(3542 ) 21.8426 Tj
-0 -436.6946 Td
-(3543   initlock\(&bcache.lock, "bcache"\);) 174.7406 Tj
-0 -446.1879 Td
-(3544 ) 21.8426 Tj
-0 -455.6813 Td
-(3545 ) 21.8426 Tj
-0 -465.1747 Td
-(3546 ) 21.8426 Tj
-0 -474.668 Td
-(3547 ) 21.8426 Tj
-0 -484.1614 Td
-(3548 ) 21.8426 Tj
-0 -493.6547 Td
-(3549 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 35) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/bio.c  Page 2) 157.2665 Tj
-0 -28.4801 Td
-(3550   // Create linked list of buffers) 170.3721 Tj
-0 -37.9735 Td
-(3551   bcache.head.prev = &bcache.head;) 170.3721 Tj
-0 -47.4668 Td
-(3552   bcache.head.next = &bcache.head;) 170.3721 Tj
-0 -56.9602 Td
-(3553   for\(b = bcache.buf; b < bcache.buf+NBUF; b++\){) 231.5313 Tj
-0 -66.4535 Td
-(3554     b->next = bcache.head.next;) 157.2665 Tj
-0 -75.9469 Td
-(3555     b->prev = &bcache.head;) 139.7925 Tj
-0 -85.4403 Td
-(3556     b->dev = -1;) 91.7388 Tj
-0 -94.9336 Td
-(3557     bcache.head.next->prev = b;) 157.2665 Tj
-0 -104.427 Td
-(3558     bcache.head.next = b;) 131.0554 Tj
-0 -113.9203 Td
-(3559   }) 34.9481 Tj
-0 -123.4137 Td
-(3560 }) 26.2111 Tj
-0 -132.9071 Td
-(3561 ) 21.8426 Tj
-0 -142.4004 Td
-(3562 // Look through buffer cache for sector on device dev.) 257.7424 Tj
-0 -151.8938 Td
-(3563 // If not found, allocate fresh block.) 187.8461 Tj
-0 -161.3871 Td
-(3564 // In either case, return locked buffer.) 196.5831 Tj
-0 -170.8805 Td
-(3565 static struct buf*) 100.4758 Tj
-0 -180.3739 Td
-(3566 bget\(uint dev, uint sector\)) 139.7925 Tj
-0 -189.8672 Td
-(3567 {) 26.2111 Tj
-0 -199.3606 Td
-(3568   struct buf *b;) 91.7388 Tj
-0 -208.8539 Td
-(3569 ) 21.8426 Tj
-0 -218.3473 Td
-(3570   acquire\(&bcache.lock\);) 126.6869 Tj
-0 -227.8407 Td
-(3571 ) 21.8426 Tj
-0 -237.334 Td
-(3572  loop:) 48.0537 Tj
-0 -246.8274 Td
-(3573   // Try for cached block.) 135.4239 Tj
-0 -256.3207 Td
-(3574   for\(b = bcache.head.next; b != &bcache.head; b = b->nex\
-t\){) 283.9534 Tj
-0 -265.8141 Td
-(3575     if\(b->dev == dev && b->sector == sector\){) 218.4257 Tj
-0 -275.3075 Td
-(3576       if\(!\(b->flags & B_BUSY\)\){) 157.2665 Tj
-0 -284.8008 Td
-(3577         b->flags |= B_BUSY;) 139.7925 Tj
-0 -294.2942 Td
-(3578         release\(&bcache.lock\);) 152.898 Tj
-0 -303.7875 Td
-(3579         return b;) 96.1073 Tj
-0 -313.2809 Td
-(3580       }) 52.4222 Tj
-0 -322.7743 Td
-(3581       sleep\(b, &bcache.lock\);) 148.5295 Tj
-0 -332.2676 Td
-(3582       goto loop;) 91.7388 Tj
-0 -341.761 Td
-(3583     }) 43.6851 Tj
-0 -351.2543 Td
-(3584   }) 34.9481 Tj
-0 -360.7477 Td
-(3585 ) 21.8426 Tj
-0 -370.2411 Td
-(3586   // Allocate fresh block.) 135.4239 Tj
-0 -379.7344 Td
-(3587   for\(b = bcache.head.prev; b != &bcache.head; b = b->pre\
-v\){) 283.9534 Tj
-0 -389.2278 Td
-(3588     if\(\(b->flags & B_BUSY\) == 0\){) 166.0035 Tj
-0 -398.7211 Td
-(3589       b->dev = dev;) 104.8443 Tj
-0 -408.2145 Td
-(3590       b->sector = sector;) 131.0554 Tj
-0 -417.7079 Td
-(3591       b->flags = B_BUSY;) 126.6869 Tj
-0 -427.2012 Td
-(3592       release\(&bcache.lock\);) 144.161 Tj
-0 -436.6946 Td
-(3593       return b;) 87.3703 Tj
-0 -446.1879 Td
-(3594     }) 43.6851 Tj
-0 -455.6813 Td
-(3595   }) 34.9481 Tj
-0 -465.1747 Td
-(3596   panic\("bget: no buffers"\);) 144.161 Tj
-0 -474.668 Td
-(3597 }) 26.2111 Tj
-0 -484.1614 Td
-(3598 ) 21.8426 Tj
-0 -493.6547 Td
-(3599 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 35) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 43 43
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/bio.c  Page 3) 157.2665 Tj
-0 -28.4801 Td
-(3600 // Return a B_BUSY buf with the contents of the indicated \
-disk sector.) 327.6386 Tj
-0 -37.9735 Td
-(3601 struct buf*) 69.8962 Tj
-0 -47.4668 Td
-(3602 bread\(uint dev, uint sector\)) 144.161 Tj
-0 -56.9602 Td
-(3603 {) 26.2111 Tj
-0 -66.4535 Td
-(3604   struct buf *b;) 91.7388 Tj
-0 -75.9469 Td
-(3605 ) 21.8426 Tj
-0 -85.4403 Td
-(3606   b = bget\(dev, sector\);) 126.6869 Tj
-0 -94.9336 Td
-(3607   if\(!\(b->flags & B_VALID\)\)) 139.7925 Tj
-0 -104.427 Td
-(3608     iderw\(b\);) 78.6333 Tj
-0 -113.9203 Td
-(3609   return b;) 69.8962 Tj
-0 -123.4137 Td
-(3610 }) 26.2111 Tj
-0 -132.9071 Td
-(3611 ) 21.8426 Tj
-0 -142.4004 Td
-(3612 // Write b's contents to disk.  Must be locked.) 227.1628 Tj
-0 -151.8938 Td
-(3613 void) 39.3166 Tj
-0 -161.3871 Td
-(3614 bwrite\(struct buf *b\)) 113.5814 Tj
-0 -170.8805 Td
-(3615 {) 26.2111 Tj
-0 -180.3739 Td
-(3616   if\(\(b->flags & B_BUSY\) == 0\)) 152.898 Tj
-0 -189.8672 Td
-(3617     panic\("bwrite"\);) 109.2129 Tj
-0 -199.3606 Td
-(3618   b->flags |= B_DIRTY;) 117.9499 Tj
-0 -208.8539 Td
-(3619   iderw\(b\);) 69.8962 Tj
-0 -218.3473 Td
-(3620 }) 26.2111 Tj
-0 -227.8407 Td
-(3621 ) 21.8426 Tj
-0 -237.334 Td
-(3622 // Release the buffer b.) 126.6869 Tj
-0 -246.8274 Td
-(3623 void) 39.3166 Tj
-0 -256.3207 Td
-(3624 brelse\(struct buf *b\)) 113.5814 Tj
-0 -265.8141 Td
-(3625 {) 26.2111 Tj
-0 -275.3075 Td
-(3626   if\(\(b->flags & B_BUSY\) == 0\)) 152.898 Tj
-0 -284.8008 Td
-(3627     panic\("brelse"\);) 109.2129 Tj
-0 -294.2942 Td
-(3628 ) 21.8426 Tj
-0 -303.7875 Td
-(3629   acquire\(&bcache.lock\);) 126.6869 Tj
-0 -313.2809 Td
-(3630 ) 21.8426 Tj
-0 -322.7743 Td
-(3631   b->next->prev = b->prev;) 135.4239 Tj
-0 -332.2676 Td
-(3632   b->prev->next = b->next;) 135.4239 Tj
-0 -341.761 Td
-(3633   b->next = bcache.head.next;) 148.5295 Tj
-0 -351.2543 Td
-(3634   b->prev = &bcache.head;) 131.0554 Tj
-0 -360.7477 Td
-(3635   bcache.head.next->prev = b;) 148.5295 Tj
-0 -370.2411 Td
-(3636   bcache.head.next = b;) 122.3184 Tj
-0 -379.7344 Td
-(3637 ) 21.8426 Tj
-0 -389.2278 Td
-(3638   b->flags &= ~B_BUSY;) 117.9499 Tj
-0 -398.7211 Td
-(3639   wakeup\(b\);) 74.2647 Tj
-0 -408.2145 Td
-(3640 ) 21.8426 Tj
-0 -417.7079 Td
-(3641   release\(&bcache.lock\);) 126.6869 Tj
-0 -427.2012 Td
-(3642 }) 26.2111 Tj
-0 -436.6946 Td
-(3643 ) 21.8426 Tj
-0 -446.1879 Td
-(3644 ) 21.8426 Tj
-0 -455.6813 Td
-(3645 ) 21.8426 Tj
-0 -465.1747 Td
-(3646 ) 21.8426 Tj
-0 -474.668 Td
-(3647 ) 21.8426 Tj
-0 -484.1614 Td
-(3648 ) 21.8426 Tj
-0 -493.6547 Td
-(3649 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 36) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 1) 152.898 Tj
-0 -28.4801 Td
-(3650 // File system implementation.  Four layers:) 214.0572 Tj
-0 -37.9735 Td
-(3651 //   + Blocks: allocator for raw disk blocks.) 218.4257 Tj
-0 -47.4668 Td
-(3652 //   + Files: inode allocator, reading, writing, metadata.) 275.2164 Tj
-0 -56.9602 Td
-(3653 //   + Directories: inode with special contents \(list of \
-other inodes!\)) 332.0071 Tj
-0 -66.4535 Td
-(3654 //   + Names: paths like /usr/rtm/xv6/fs.c for convenient \
-naming.) 305.796 Tj
-0 -75.9469 Td
-(3655 //) 30.5796 Tj
-0 -85.4403 Td
-(3656 // Disk layout is: superblock, inodes, block in-use bitmap\
-, data blocks.) 336.3756 Tj
-0 -94.9336 Td
-(3657 //) 30.5796 Tj
-0 -104.427 Td
-(3658 // This file contains the low-level file system manipulati\
-on) 283.9534 Tj
-0 -113.9203 Td
-(3659 // routines.  The \(higher-level\) system call implementat\
-ions) 283.9534 Tj
-0 -123.4137 Td
-(3660 // are in sysfile.c.) 109.2129 Tj
-0 -132.9071 Td
-(3661 ) 21.8426 Tj
-0 -142.4004 Td
-(3662 #include "types.h") 100.4758 Tj
-0 -151.8938 Td
-(3663 #include "defs.h") 96.1073 Tj
-0 -161.3871 Td
-(3664 #include "param.h") 100.4758 Tj
-0 -170.8805 Td
-(3665 #include "stat.h") 96.1073 Tj
-0 -180.3739 Td
-(3666 #include "mmu.h") 91.7388 Tj
-0 -189.8672 Td
-(3667 #include "proc.h") 96.1073 Tj
-0 -199.3606 Td
-(3668 #include "spinlock.h") 113.5814 Tj
-0 -208.8539 Td
-(3669 #include "buf.h") 91.7388 Tj
-0 -218.3473 Td
-(3670 #include "fs.h") 87.3703 Tj
-0 -227.8407 Td
-(3671 #include "file.h") 96.1073 Tj
-0 -237.334 Td
-(3672 ) 21.8426 Tj
-0 -246.8274 Td
-(3673 #define min\(a, b\) \(\(a\) < \(b\) ? \(a\) : \(b\)\)) 200.9517 Tj
-0 -256.3207 Td
-(3674 static void itrunc\(struct inode*\);) 170.3721 Tj
-0 -265.8141 Td
-(3675 ) 21.8426 Tj
-0 -275.3075 Td
-(3676 // Read the super block.) 126.6869 Tj
-0 -284.8008 Td
-(3677 static void) 69.8962 Tj
-0 -294.2942 Td
-(3678 readsb\(int dev, struct superblock *sb\)) 187.8461 Tj
-0 -303.7875 Td
-(3679 {) 26.2111 Tj
-0 -313.2809 Td
-(3680   struct buf *bp;) 96.1073 Tj
-0 -322.7743 Td
-(3681 ) 21.8426 Tj
-0 -332.2676 Td
-(3682   bp = bread\(dev, 1\);) 113.5814 Tj
-0 -341.761 Td
-(3683   memmove\(sb, bp->data, sizeof\(*sb\)\);) 183.4776 Tj
-0 -351.2543 Td
-(3684   brelse\(bp\);) 78.6333 Tj
-0 -360.7477 Td
-(3685 }) 26.2111 Tj
-0 -370.2411 Td
-(3686 ) 21.8426 Tj
-0 -379.7344 Td
-(3687 // Zero a block.) 91.7388 Tj
-0 -389.2278 Td
-(3688 static void) 69.8962 Tj
-0 -398.7211 Td
-(3689 bzero\(int dev, int bno\)) 122.3184 Tj
-0 -408.2145 Td
-(3690 {) 26.2111 Tj
-0 -417.7079 Td
-(3691   struct buf *bp;) 96.1073 Tj
-0 -427.2012 Td
-(3692 ) 21.8426 Tj
-0 -436.6946 Td
-(3693   bp = bread\(dev, bno\);) 122.3184 Tj
-0 -446.1879 Td
-(3694   memset\(bp->data, 0, BSIZE\);) 148.5295 Tj
-0 -455.6813 Td
-(3695   bwrite\(bp\);) 78.6333 Tj
-0 -465.1747 Td
-(3696   brelse\(bp\);) 78.6333 Tj
-0 -474.668 Td
-(3697 }) 26.2111 Tj
-0 -484.1614 Td
-(3698 ) 21.8426 Tj
-0 -493.6547 Td
-(3699 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 36) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 44 44
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 2) 152.898 Tj
-0 -28.4801 Td
-(3700 // Blocks.) 65.5277 Tj
-0 -37.9735 Td
-(3701 ) 21.8426 Tj
-0 -47.4668 Td
-(3702 // Allocate a disk block.) 131.0554 Tj
-0 -56.9602 Td
-(3703 static uint) 69.8962 Tj
-0 -66.4535 Td
-(3704 balloc\(uint dev\)) 91.7388 Tj
-0 -75.9469 Td
-(3705 {) 26.2111 Tj
-0 -85.4403 Td
-(3706   int b, bi, m;) 87.3703 Tj
-0 -94.9336 Td
-(3707   struct buf *bp;) 96.1073 Tj
-0 -104.427 Td
-(3708   struct superblock sb;) 122.3184 Tj
-0 -113.9203 Td
-(3709 ) 21.8426 Tj
-0 -123.4137 Td
-(3710   bp = 0;) 61.1592 Tj
-0 -132.9071 Td
-(3711   readsb\(dev, &sb\);) 104.8443 Tj
-0 -142.4004 Td
-(3712   for\(b = 0; b < sb.size; b += BPB\){) 179.1091 Tj
-0 -151.8938 Td
-(3713     bp = bread\(dev, BBLOCK\(b, sb.ninodes\)\);) 209.6887 Tj
-0 -161.3871 Td
-(3714     for\(bi = 0; bi < BPB; bi++\){) 161.635 Tj
-0 -170.8805 Td
-(3715       m = 1 << \(bi % 8\);) 126.6869 Tj
-0 -180.3739 Td
-(3716       if\(\(bp->data[bi/8] & m\) == 0\){  // Is block free\
-?) 262.1109 Tj
-0 -189.8672 Td
-(3717         bp->data[bi/8] |= m;  // Mark block in use on disk\
-.) 279.5849 Tj
-0 -199.3606 Td
-(3718         bwrite\(bp\);) 104.8443 Tj
-0 -208.8539 Td
-(3719         brelse\(bp\);) 104.8443 Tj
-0 -218.3473 Td
-(3720         return b + bi;) 117.9499 Tj
-0 -227.8407 Td
-(3721       }) 52.4222 Tj
-0 -237.334 Td
-(3722     }) 43.6851 Tj
-0 -246.8274 Td
-(3723     brelse\(bp\);) 87.3703 Tj
-0 -256.3207 Td
-(3724   }) 34.9481 Tj
-0 -265.8141 Td
-(3725   panic\("balloc: out of blocks"\);) 166.0035 Tj
-0 -275.3075 Td
-(3726 }) 26.2111 Tj
-0 -284.8008 Td
-(3727 ) 21.8426 Tj
-0 -294.2942 Td
-(3728 // Free a disk block.) 113.5814 Tj
-0 -303.7875 Td
-(3729 static void) 69.8962 Tj
-0 -313.2809 Td
-(3730 bfree\(int dev, uint b\)) 117.9499 Tj
-0 -322.7743 Td
-(3731 {) 26.2111 Tj
-0 -332.2676 Td
-(3732   struct buf *bp;) 96.1073 Tj
-0 -341.761 Td
-(3733   struct superblock sb;) 122.3184 Tj
-0 -351.2543 Td
-(3734   int bi, m;) 74.2647 Tj
-0 -360.7477 Td
-(3735 ) 21.8426 Tj
-0 -370.2411 Td
-(3736   bzero\(dev, b\);) 91.7388 Tj
-0 -379.7344 Td
-(3737 ) 21.8426 Tj
-0 -389.2278 Td
-(3738   readsb\(dev, &sb\);) 104.8443 Tj
-0 -398.7211 Td
-(3739   bp = bread\(dev, BBLOCK\(b, sb.ninodes\)\);) 200.9517 Tj
-0 -408.2145 Td
-(3740   bi = b % BPB;) 87.3703 Tj
-0 -417.7079 Td
-(3741   m = 1 << \(bi % 8\);) 109.2129 Tj
-0 -427.2012 Td
-(3742   if\(\(bp->data[bi/8] & m\) == 0\)) 157.2665 Tj
-0 -436.6946 Td
-(3743     panic\("freeing free block"\);) 161.635 Tj
-0 -446.1879 Td
-(3744   bp->data[bi/8] &= ~m;  // Mark block free on disk.) 249.0053 Tj
-0 -455.6813 Td
-(3745   bwrite\(bp\);) 78.6333 Tj
-0 -465.1747 Td
-(3746   brelse\(bp\);) 78.6333 Tj
-0 -474.668 Td
-(3747 }) 26.2111 Tj
-0 -484.1614 Td
-(3748 ) 21.8426 Tj
-0 -493.6547 Td
-(3749 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 37) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 3) 152.898 Tj
-0 -28.4801 Td
-(3750 // Inodes.) 65.5277 Tj
-0 -37.9735 Td
-(3751 //) 30.5796 Tj
-0 -47.4668 Td
-(3752 // An inode is a single, unnamed file in the file system.) 270.8479 Tj
-0 -56.9602 Td
-(3753 // The inode disk structure holds metadata \(the type, dev\
-ice numbers,) 323.2701 Tj
-0 -66.4535 Td
-(3754 // and data size\) along with a list of blocks where the a\
-ssociated) 310.1645 Tj
-0 -75.9469 Td
-(3755 // data can be found.) 113.5814 Tj
-0 -85.4403 Td
-(3756 //) 30.5796 Tj
-0 -94.9336 Td
-(3757 // The inodes are laid out sequentially on disk immediatel\
-y after) 305.796 Tj
-0 -104.427 Td
-(3758 // the superblock.  The kernel keeps a cache of the in-use) 275.2164 Tj
-0 -113.9203 Td
-(3759 // on-disk structures to provide a place for synchronizing\
- access) 305.796 Tj
-0 -123.4137 Td
-(3760 // to inodes shared between multiple processes.) 227.1628 Tj
-0 -132.9071 Td
-(3761 //) 30.5796 Tj
-0 -142.4004 Td
-(3762 // ip->ref counts the number of pointer references to this\
- cached) 305.796 Tj
-0 -151.8938 Td
-(3763 // inode; references are typically kept in struct file and\
- in proc->cwd.) 336.3756 Tj
-0 -161.3871 Td
-(3764 // When ip->ref falls to zero, the inode is no longer cach\
-ed.) 288.322 Tj
-0 -170.8805 Td
-(3765 // It is an error to use an inode without holding a refere\
-nce to it.) 318.9016 Tj
-0 -180.3739 Td
-(3766 //) 30.5796 Tj
-0 -189.8672 Td
-(3767 // Processes are only allowed to read and write inode) 253.3738 Tj
-0 -199.3606 Td
-(3768 // metadata and contents when holding the inode's lock,) 262.1109 Tj
-0 -208.8539 Td
-(3769 // represented by the I_BUSY flag in the in-memory copy.) 266.4794 Tj
-0 -218.3473 Td
-(3770 // Because inode locks are held during disk accesses,) 253.3738 Tj
-0 -227.8407 Td
-(3771 // they are implemented using a flag rather than with) 253.3738 Tj
-0 -237.334 Td
-(3772 // spin locks.  Callers are responsible for locking) 244.6368 Tj
-0 -246.8274 Td
-(3773 // inodes before passing them to routines in this file; le\
-aving) 297.059 Tj
-0 -256.3207 Td
-(3774 // this responsibility with the caller makes it possible f\
-or them) 305.796 Tj
-0 -265.8141 Td
-(3775 // to create arbitrarily-sized atomic operations.) 235.8998 Tj
-0 -275.3075 Td
-(3776 //) 30.5796 Tj
-0 -284.8008 Td
-(3777 // To give maximum control over locking to the callers,) 262.1109 Tj
-0 -294.2942 Td
-(3778 // the routines in this file that return inode pointers) 262.1109 Tj
-0 -303.7875 Td
-(3779 // return pointers to *unlocked* inodes.  It is the caller\
-s') 283.9534 Tj
-0 -313.2809 Td
-(3780 // responsibility to lock them before using them.  A non-z\
-ero) 288.322 Tj
-0 -322.7743 Td
-(3781 // ip->ref keeps these unlocked inodes in the cache.) 249.0053 Tj
-0 -332.2676 Td
-(3782 ) 21.8426 Tj
-0 -341.761 Td
-(3783 struct {) 56.7907 Tj
-0 -351.2543 Td
-(3784   struct spinlock lock;) 122.3184 Tj
-0 -360.7477 Td
-(3785   struct inode inode[NINODE];) 148.5295 Tj
-0 -370.2411 Td
-(3786 } icache;) 61.1592 Tj
-0 -379.7344 Td
-(3787 ) 21.8426 Tj
-0 -389.2278 Td
-(3788 void) 39.3166 Tj
-0 -398.7211 Td
-(3789 iinit\(void\)) 69.8962 Tj
-0 -408.2145 Td
-(3790 {) 26.2111 Tj
-0 -417.7079 Td
-(3791   initlock\(&icache.lock, "icache"\);) 174.7406 Tj
-0 -427.2012 Td
-(3792 }) 26.2111 Tj
-0 -436.6946 Td
-(3793 ) 21.8426 Tj
-0 -446.1879 Td
-(3794 static struct inode* iget\(uint dev, uint inum\);) 227.1628 Tj
-0 -455.6813 Td
-(3795 ) 21.8426 Tj
-0 -465.1747 Td
-(3796 ) 21.8426 Tj
-0 -474.668 Td
-(3797 ) 21.8426 Tj
-0 -484.1614 Td
-(3798 ) 21.8426 Tj
-0 -493.6547 Td
-(3799 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 37) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 45 45
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 4) 152.898 Tj
-0 -28.4801 Td
-(3800 // Allocate a new inode with the given type on device dev.) 275.2164 Tj
-0 -37.9735 Td
-(3801 struct inode*) 78.6333 Tj
-0 -47.4668 Td
-(3802 ialloc\(uint dev, short type\)) 144.161 Tj
-0 -56.9602 Td
-(3803 {) 26.2111 Tj
-0 -66.4535 Td
-(3804   int inum;) 69.8962 Tj
-0 -75.9469 Td
-(3805   struct buf *bp;) 96.1073 Tj
-0 -85.4403 Td
-(3806   struct dinode *dip;) 113.5814 Tj
-0 -94.9336 Td
-(3807   struct superblock sb;) 122.3184 Tj
-0 -104.427 Td
-(3808 ) 21.8426 Tj
-0 -113.9203 Td
-(3809   readsb\(dev, &sb\);) 104.8443 Tj
-0 -123.4137 Td
-(3810   for\(inum = 1; inum < sb.ninodes; inum++\){  // loop ove\
-r inode blocks) 327.6386 Tj
-0 -132.9071 Td
-(3811     bp = bread\(dev, IBLOCK\(inum\)\);) 170.3721 Tj
-0 -142.4004 Td
-(3812     dip = \(struct dinode*\)bp->data + inum%IPB;) 222.7942 Tj
-0 -151.8938 Td
-(3813     if\(dip->type == 0\){  // a free inode) 196.5831 Tj
-0 -161.3871 Td
-(3814       memset\(dip, 0, sizeof\(*dip\)\);) 174.7406 Tj
-0 -170.8805 Td
-(3815       dip->type = type;) 122.3184 Tj
-0 -180.3739 Td
-(3816       bwrite\(bp\);   // mark it allocated on the disk) 249.0053 Tj
-0 -189.8672 Td
-(3817       brelse\(bp\);) 96.1073 Tj
-0 -199.3606 Td
-(3818       return iget\(dev, inum\);) 148.5295 Tj
-0 -208.8539 Td
-(3819     }) 43.6851 Tj
-0 -218.3473 Td
-(3820     brelse\(bp\);) 87.3703 Tj
-0 -227.8407 Td
-(3821   }) 34.9481 Tj
-0 -237.334 Td
-(3822   panic\("ialloc: no inodes"\);) 148.5295 Tj
-0 -246.8274 Td
-(3823 }) 26.2111 Tj
-0 -256.3207 Td
-(3824 ) 21.8426 Tj
-0 -265.8141 Td
-(3825 // Copy inode, which has changed, from memory to disk.) 257.7424 Tj
-0 -275.3075 Td
-(3826 void) 39.3166 Tj
-0 -284.8008 Td
-(3827 iupdate\(struct inode *ip\)) 131.0554 Tj
-0 -294.2942 Td
-(3828 {) 26.2111 Tj
-0 -303.7875 Td
-(3829   struct buf *bp;) 96.1073 Tj
-0 -313.2809 Td
-(3830   struct dinode *dip;) 113.5814 Tj
-0 -322.7743 Td
-(3831 ) 21.8426 Tj
-0 -332.2676 Td
-(3832   bp = bread\(ip->dev, IBLOCK\(ip->inum\)\);) 196.5831 Tj
-0 -341.761 Td
-(3833   dip = \(struct dinode*\)bp->data + ip->inum%IPB;) 231.5313 Tj
-0 -351.2543 Td
-(3834   dip->type = ip->type;) 122.3184 Tj
-0 -360.7477 Td
-(3835   dip->major = ip->major;) 131.0554 Tj
-0 -370.2411 Td
-(3836   dip->minor = ip->minor;) 131.0554 Tj
-0 -379.7344 Td
-(3837   dip->nlink = ip->nlink;) 131.0554 Tj
-0 -389.2278 Td
-(3838   dip->size = ip->size;) 122.3184 Tj
-0 -398.7211 Td
-(3839   memmove\(dip->addrs, ip->addrs, sizeof\(ip->addrs\)\);) 249.0053 Tj
-0 -408.2145 Td
-(3840   bwrite\(bp\);) 78.6333 Tj
-0 -417.7079 Td
-(3841   brelse\(bp\);) 78.6333 Tj
-0 -427.2012 Td
-(3842 }) 26.2111 Tj
-0 -436.6946 Td
-(3843 ) 21.8426 Tj
-0 -446.1879 Td
-(3844 ) 21.8426 Tj
-0 -455.6813 Td
-(3845 ) 21.8426 Tj
-0 -465.1747 Td
-(3846 ) 21.8426 Tj
-0 -474.668 Td
-(3847 ) 21.8426 Tj
-0 -484.1614 Td
-(3848 ) 21.8426 Tj
-0 -493.6547 Td
-(3849 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 38) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 5) 152.898 Tj
-0 -28.4801 Td
-(3850 // Find the inode with number inum on device dev) 231.5313 Tj
-0 -37.9735 Td
-(3851 // and return the in-memory copy.) 166.0035 Tj
-0 -47.4668 Td
-(3852 static struct inode*) 109.2129 Tj
-0 -56.9602 Td
-(3853 iget\(uint dev, uint inum\)) 131.0554 Tj
-0 -66.4535 Td
-(3854 {) 26.2111 Tj
-0 -75.9469 Td
-(3855   struct inode *ip, *empty;) 139.7925 Tj
-0 -85.4403 Td
-(3856 ) 21.8426 Tj
-0 -94.9336 Td
-(3857   acquire\(&icache.lock\);) 126.6869 Tj
-0 -104.427 Td
-(3858 ) 21.8426 Tj
-0 -113.9203 Td
-(3859   // Try for cached inode.) 135.4239 Tj
-0 -123.4137 Td
-(3860   empty = 0;) 74.2647 Tj
-0 -132.9071 Td
-(3861   for\(ip = &icache.inode[0]; ip < &icache.inode[NINODE]; \
-ip++\){) 297.059 Tj
-0 -142.4004 Td
-(3862     if\(ip->ref > 0 && ip->dev == dev && ip->inum == inum\)\
-{) 275.2164 Tj
-0 -151.8938 Td
-(3863       ip->ref++;) 91.7388 Tj
-0 -161.3871 Td
-(3864       release\(&icache.lock\);) 144.161 Tj
-0 -170.8805 Td
-(3865       return ip;) 91.7388 Tj
-0 -180.3739 Td
-(3866     }) 43.6851 Tj
-0 -189.8672 Td
-(3867     if\(empty == 0 && ip->ref == 0\)    // Remember empty \
-slot.) 288.322 Tj
-0 -199.3606 Td
-(3868       empty = ip;) 96.1073 Tj
-0 -208.8539 Td
-(3869   }) 34.9481 Tj
-0 -218.3473 Td
-(3870 ) 21.8426 Tj
-0 -227.8407 Td
-(3871   // Allocate fresh inode.) 135.4239 Tj
-0 -237.334 Td
-(3872   if\(empty == 0\)) 91.7388 Tj
-0 -246.8274 Td
-(3873     panic\("iget: no inodes"\);) 148.5295 Tj
-0 -256.3207 Td
-(3874 ) 21.8426 Tj
-0 -265.8141 Td
-(3875   ip = empty;) 78.6333 Tj
-0 -275.3075 Td
-(3876   ip->dev = dev;) 91.7388 Tj
-0 -284.8008 Td
-(3877   ip->inum = inum;) 100.4758 Tj
-0 -294.2942 Td
-(3878   ip->ref = 1;) 83.0018 Tj
-0 -303.7875 Td
-(3879   ip->flags = 0;) 91.7388 Tj
-0 -313.2809 Td
-(3880   release\(&icache.lock\);) 126.6869 Tj
-0 -322.7743 Td
-(3881 ) 21.8426 Tj
-0 -332.2676 Td
-(3882   return ip;) 74.2647 Tj
-0 -341.761 Td
-(3883 }) 26.2111 Tj
-0 -351.2543 Td
-(3884 ) 21.8426 Tj
-0 -360.7477 Td
-(3885 // Increment reference count for ip.) 179.1091 Tj
-0 -370.2411 Td
-(3886 // Returns ip to enable ip = idup\(ip1\) idiom.) 218.4257 Tj
-0 -379.7344 Td
-(3887 struct inode*) 78.6333 Tj
-0 -389.2278 Td
-(3888 idup\(struct inode *ip\)) 117.9499 Tj
-0 -398.7211 Td
-(3889 {) 26.2111 Tj
-0 -408.2145 Td
-(3890   acquire\(&icache.lock\);) 126.6869 Tj
-0 -417.7079 Td
-(3891   ip->ref++;) 74.2647 Tj
-0 -427.2012 Td
-(3892   release\(&icache.lock\);) 126.6869 Tj
-0 -436.6946 Td
-(3893   return ip;) 74.2647 Tj
-0 -446.1879 Td
-(3894 }) 26.2111 Tj
-0 -455.6813 Td
-(3895 ) 21.8426 Tj
-0 -465.1747 Td
-(3896 ) 21.8426 Tj
-0 -474.668 Td
-(3897 ) 21.8426 Tj
-0 -484.1614 Td
-(3898 ) 21.8426 Tj
-0 -493.6547 Td
-(3899 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 38) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 46 46
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 6) 152.898 Tj
-0 -28.4801 Td
-(3900 // Lock the given inode.) 126.6869 Tj
-0 -37.9735 Td
-(3901 void) 39.3166 Tj
-0 -47.4668 Td
-(3902 ilock\(struct inode *ip\)) 122.3184 Tj
-0 -56.9602 Td
-(3903 {) 26.2111 Tj
-0 -66.4535 Td
-(3904   struct buf *bp;) 96.1073 Tj
-0 -75.9469 Td
-(3905   struct dinode *dip;) 113.5814 Tj
-0 -85.4403 Td
-(3906 ) 21.8426 Tj
-0 -94.9336 Td
-(3907   if\(ip == 0 || ip->ref < 1\)) 144.161 Tj
-0 -104.427 Td
-(3908     panic\("ilock"\);) 104.8443 Tj
-0 -113.9203 Td
-(3909 ) 21.8426 Tj
-0 -123.4137 Td
-(3910   acquire\(&icache.lock\);) 126.6869 Tj
-0 -132.9071 Td
-(3911   while\(ip->flags & I_BUSY\)) 139.7925 Tj
-0 -142.4004 Td
-(3912     sleep\(ip, &icache.lock\);) 144.161 Tj
-0 -151.8938 Td
-(3913   ip->flags |= I_BUSY;) 117.9499 Tj
-0 -161.3871 Td
-(3914   release\(&icache.lock\);) 126.6869 Tj
-0 -170.8805 Td
-(3915 ) 21.8426 Tj
-0 -180.3739 Td
-(3916   if\(!\(ip->flags & I_VALID\)\){) 148.5295 Tj
-0 -189.8672 Td
-(3917     bp = bread\(ip->dev, IBLOCK\(ip->inum\)\);) 205.3202 Tj
-0 -199.3606 Td
-(3918     dip = \(struct dinode*\)bp->data + ip->inum%IPB;) 240.2683 Tj
-0 -208.8539 Td
-(3919     ip->type = dip->type;) 131.0554 Tj
-0 -218.3473 Td
-(3920     ip->major = dip->major;) 139.7925 Tj
-0 -227.8407 Td
-(3921     ip->minor = dip->minor;) 139.7925 Tj
-0 -237.334 Td
-(3922     ip->nlink = dip->nlink;) 139.7925 Tj
-0 -246.8274 Td
-(3923     ip->size = dip->size;) 131.0554 Tj
-0 -256.3207 Td
-(3924     memmove\(ip->addrs, dip->addrs, sizeof\(ip->addrs\)\);) 257.7424 Tj
-0 -265.8141 Td
-(3925     brelse\(bp\);) 87.3703 Tj
-0 -275.3075 Td
-(3926     ip->flags |= I_VALID;) 131.0554 Tj
-0 -284.8008 Td
-(3927     if\(ip->type == 0\)) 113.5814 Tj
-0 -294.2942 Td
-(3928       panic\("ilock: no type"\);) 152.898 Tj
-0 -303.7875 Td
-(3929   }) 34.9481 Tj
-0 -313.2809 Td
-(3930 }) 26.2111 Tj
-0 -322.7743 Td
-(3931 ) 21.8426 Tj
-0 -332.2676 Td
-(3932 // Unlock the given inode.) 135.4239 Tj
-0 -341.761 Td
-(3933 void) 39.3166 Tj
-0 -351.2543 Td
-(3934 iunlock\(struct inode *ip\)) 131.0554 Tj
-0 -360.7477 Td
-(3935 {) 26.2111 Tj
-0 -370.2411 Td
-(3936   if\(ip == 0 || !\(ip->flags & I_BUSY\) || ip->ref < 1\)) 253.3738 Tj
-0 -379.7344 Td
-(3937     panic\("iunlock"\);) 113.5814 Tj
-0 -389.2278 Td
-(3938 ) 21.8426 Tj
-0 -398.7211 Td
-(3939   acquire\(&icache.lock\);) 126.6869 Tj
-0 -408.2145 Td
-(3940   ip->flags &= ~I_BUSY;) 122.3184 Tj
-0 -417.7079 Td
-(3941   wakeup\(ip\);) 78.6333 Tj
-0 -427.2012 Td
-(3942   release\(&icache.lock\);) 126.6869 Tj
-0 -436.6946 Td
-(3943 }) 26.2111 Tj
-0 -446.1879 Td
-(3944 ) 21.8426 Tj
-0 -455.6813 Td
-(3945 ) 21.8426 Tj
-0 -465.1747 Td
-(3946 ) 21.8426 Tj
-0 -474.668 Td
-(3947 ) 21.8426 Tj
-0 -484.1614 Td
-(3948 ) 21.8426 Tj
-0 -493.6547 Td
-(3949 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 39) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 7) 152.898 Tj
-0 -28.4801 Td
-(3950 // Caller holds reference to unlocked ip.  Drop reference.) 275.2164 Tj
-0 -37.9735 Td
-(3951 void) 39.3166 Tj
-0 -47.4668 Td
-(3952 iput\(struct inode *ip\)) 117.9499 Tj
-0 -56.9602 Td
-(3953 {) 26.2111 Tj
-0 -66.4535 Td
-(3954   acquire\(&icache.lock\);) 126.6869 Tj
-0 -75.9469 Td
-(3955   if\(ip->ref == 1 && \(ip->flags & I_VALID\) && ip->nlink\
- == 0\){) 292.6905 Tj
-0 -85.4403 Td
-(3956     // inode is no longer used: truncate and free inode.) 266.4794 Tj
-0 -94.9336 Td
-(3957     if\(ip->flags & I_BUSY\)) 135.4239 Tj
-0 -104.427 Td
-(3958       panic\("iput busy"\);) 131.0554 Tj
-0 -113.9203 Td
-(3959     ip->flags |= I_BUSY;) 126.6869 Tj
-0 -123.4137 Td
-(3960     release\(&icache.lock\);) 135.4239 Tj
-0 -132.9071 Td
-(3961     itrunc\(ip\);) 87.3703 Tj
-0 -142.4004 Td
-(3962     ip->type = 0;) 96.1073 Tj
-0 -151.8938 Td
-(3963     iupdate\(ip\);) 91.7388 Tj
-0 -161.3871 Td
-(3964     acquire\(&icache.lock\);) 135.4239 Tj
-0 -170.8805 Td
-(3965     ip->flags = 0;) 100.4758 Tj
-0 -180.3739 Td
-(3966     wakeup\(ip\);) 87.3703 Tj
-0 -189.8672 Td
-(3967   }) 34.9481 Tj
-0 -199.3606 Td
-(3968   ip->ref--;) 74.2647 Tj
-0 -208.8539 Td
-(3969   release\(&icache.lock\);) 126.6869 Tj
-0 -218.3473 Td
-(3970 }) 26.2111 Tj
-0 -227.8407 Td
-(3971 ) 21.8426 Tj
-0 -237.334 Td
-(3972 // Common idiom: unlock, then put.) 170.3721 Tj
-0 -246.8274 Td
-(3973 void) 39.3166 Tj
-0 -256.3207 Td
-(3974 iunlockput\(struct inode *ip\)) 144.161 Tj
-0 -265.8141 Td
-(3975 {) 26.2111 Tj
-0 -275.3075 Td
-(3976   iunlock\(ip\);) 83.0018 Tj
-0 -284.8008 Td
-(3977   iput\(ip\);) 69.8962 Tj
-0 -294.2942 Td
-(3978 }) 26.2111 Tj
-0 -303.7875 Td
-(3979 ) 21.8426 Tj
-0 -313.2809 Td
-(3980 ) 21.8426 Tj
-0 -322.7743 Td
-(3981 ) 21.8426 Tj
-0 -332.2676 Td
-(3982 ) 21.8426 Tj
-0 -341.761 Td
-(3983 ) 21.8426 Tj
-0 -351.2543 Td
-(3984 ) 21.8426 Tj
-0 -360.7477 Td
-(3985 ) 21.8426 Tj
-0 -370.2411 Td
-(3986 ) 21.8426 Tj
-0 -379.7344 Td
-(3987 ) 21.8426 Tj
-0 -389.2278 Td
-(3988 ) 21.8426 Tj
-0 -398.7211 Td
-(3989 ) 21.8426 Tj
-0 -408.2145 Td
-(3990 ) 21.8426 Tj
-0 -417.7079 Td
-(3991 ) 21.8426 Tj
-0 -427.2012 Td
-(3992 ) 21.8426 Tj
-0 -436.6946 Td
-(3993 ) 21.8426 Tj
-0 -446.1879 Td
-(3994 ) 21.8426 Tj
-0 -455.6813 Td
-(3995 ) 21.8426 Tj
-0 -465.1747 Td
-(3996 ) 21.8426 Tj
-0 -474.668 Td
-(3997 ) 21.8426 Tj
-0 -484.1614 Td
-(3998 ) 21.8426 Tj
-0 -493.6547 Td
-(3999 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 39) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 47 47
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 8) 152.898 Tj
-0 -28.4801 Td
-(4000 // Inode contents) 96.1073 Tj
-0 -37.9735 Td
-(4001 //) 30.5796 Tj
-0 -47.4668 Td
-(4002 // The contents \(data\) associated with each inode is sto\
-red) 279.5849 Tj
-0 -56.9602 Td
-(4003 // in a sequence of blocks on the disk.  The first NDIRECT\
- blocks) 305.796 Tj
-0 -66.4535 Td
-(4004 // are listed in ip->addrs[].  The next NINDIRECT blocks a\
-re) 283.9534 Tj
-0 -75.9469 Td
-(4005 // listed in the block ip->addrs[INDIRECT].) 209.6887 Tj
-0 -85.4403 Td
-(4006 ) 21.8426 Tj
-0 -94.9336 Td
-(4007 // Return the disk block address of the nth block in inode\
- ip.) 292.6905 Tj
-0 -104.427 Td
-(4008 // If there is no such block, bmap allocates one.) 235.8998 Tj
-0 -113.9203 Td
-(4009 static uint) 69.8962 Tj
-0 -123.4137 Td
-(4010 bmap\(struct inode *ip, uint bn\)) 157.2665 Tj
-0 -132.9071 Td
-(4011 {) 26.2111 Tj
-0 -142.4004 Td
-(4012   uint addr, *a;) 91.7388 Tj
-0 -151.8938 Td
-(4013   struct buf *bp;) 96.1073 Tj
-0 -161.3871 Td
-(4014 ) 21.8426 Tj
-0 -170.8805 Td
-(4015   if\(bn < NDIRECT\){) 104.8443 Tj
-0 -180.3739 Td
-(4016     if\(\(addr = ip->addrs[bn]\) == 0\)) 174.7406 Tj
-0 -189.8672 Td
-(4017       ip->addrs[bn] = addr = balloc\(ip->dev\);) 218.4257 Tj
-0 -199.3606 Td
-(4018     return addr;) 91.7388 Tj
-0 -208.8539 Td
-(4019   }) 34.9481 Tj
-0 -218.3473 Td
-(4020   bn -= NDIRECT;) 91.7388 Tj
-0 -227.8407 Td
-(4021 ) 21.8426 Tj
-0 -237.334 Td
-(4022   if\(bn < NINDIRECT\){) 113.5814 Tj
-0 -246.8274 Td
-(4023     // Load indirect block, allocating if necessary.) 249.0053 Tj
-0 -256.3207 Td
-(4024     if\(\(addr = ip->addrs[NDIRECT]\) == 0\)) 196.5831 Tj
-0 -265.8141 Td
-(4025       ip->addrs[NDIRECT] = addr = balloc\(ip->dev\);) 240.2683 Tj
-0 -275.3075 Td
-(4026     bp = bread\(ip->dev, addr\);) 152.898 Tj
-0 -284.8008 Td
-(4027     a = \(uint*\)bp->data;) 126.6869 Tj
-0 -294.2942 Td
-(4028     if\(\(addr = a[bn]\) == 0\){) 144.161 Tj
-0 -303.7875 Td
-(4029       a[bn] = addr = balloc\(ip->dev\);) 183.4776 Tj
-0 -313.2809 Td
-(4030       bwrite\(bp\);) 96.1073 Tj
-0 -322.7743 Td
-(4031     }) 43.6851 Tj
-0 -332.2676 Td
-(4032     brelse\(bp\);) 87.3703 Tj
-0 -341.761 Td
-(4033     return addr;) 91.7388 Tj
-0 -351.2543 Td
-(4034   }) 34.9481 Tj
-0 -360.7477 Td
-(4035 ) 21.8426 Tj
-0 -370.2411 Td
-(4036   panic\("bmap: out of range"\);) 152.898 Tj
-0 -379.7344 Td
-(4037 }) 26.2111 Tj
-0 -389.2278 Td
-(4038 ) 21.8426 Tj
-0 -398.7211 Td
-(4039 ) 21.8426 Tj
-0 -408.2145 Td
-(4040 ) 21.8426 Tj
-0 -417.7079 Td
-(4041 ) 21.8426 Tj
-0 -427.2012 Td
-(4042 ) 21.8426 Tj
-0 -436.6946 Td
-(4043 ) 21.8426 Tj
-0 -446.1879 Td
-(4044 ) 21.8426 Tj
-0 -455.6813 Td
-(4045 ) 21.8426 Tj
-0 -465.1747 Td
-(4046 ) 21.8426 Tj
-0 -474.668 Td
-(4047 ) 21.8426 Tj
-0 -484.1614 Td
-(4048 ) 21.8426 Tj
-0 -493.6547 Td
-(4049 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 40) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 9) 152.898 Tj
-0 -28.4801 Td
-(4050 // Truncate inode \(discard contents\).) 183.4776 Tj
-0 -37.9735 Td
-(4051 // Only called after the last dirent referring) 222.7942 Tj
-0 -47.4668 Td
-(4052 // to this inode has been erased on disk.) 200.9517 Tj
-0 -56.9602 Td
-(4053 static void) 69.8962 Tj
-0 -66.4535 Td
-(4054 itrunc\(struct inode *ip\)) 126.6869 Tj
-0 -75.9469 Td
-(4055 {) 26.2111 Tj
-0 -85.4403 Td
-(4056   int i, j;) 69.8962 Tj
-0 -94.9336 Td
-(4057   struct buf *bp;) 96.1073 Tj
-0 -104.427 Td
-(4058   uint *a;) 65.5277 Tj
-0 -113.9203 Td
-(4059 ) 21.8426 Tj
-0 -123.4137 Td
-(4060   for\(i = 0; i < NDIRECT; i++\){) 157.2665 Tj
-0 -132.9071 Td
-(4061     if\(ip->addrs[i]\){) 113.5814 Tj
-0 -142.4004 Td
-(4062       bfree\(ip->dev, ip->addrs[i]\);) 174.7406 Tj
-0 -151.8938 Td
-(4063       ip->addrs[i] = 0;) 122.3184 Tj
-0 -161.3871 Td
-(4064     }) 43.6851 Tj
-0 -170.8805 Td
-(4065   }) 34.9481 Tj
-0 -180.3739 Td
-(4066 ) 21.8426 Tj
-0 -189.8672 Td
-(4067   if\(ip->addrs[NDIRECT]\){) 131.0554 Tj
-0 -199.3606 Td
-(4068     bp = bread\(ip->dev, ip->addrs[NDIRECT]\);) 214.0572 Tj
-0 -208.8539 Td
-(4069     a = \(uint*\)bp->data;) 126.6869 Tj
-0 -218.3473 Td
-(4070     for\(j = 0; j < NINDIRECT; j++\){) 174.7406 Tj
-0 -227.8407 Td
-(4071       if\(a[j]\)) 83.0018 Tj
-0 -237.334 Td
-(4072         bfree\(ip->dev, a[j]\);) 148.5295 Tj
-0 -246.8274 Td
-(4073     }) 43.6851 Tj
-0 -256.3207 Td
-(4074     brelse\(bp\);) 87.3703 Tj
-0 -265.8141 Td
-(4075     bfree\(ip->dev, ip->addrs[NDIRECT]\);) 192.2146 Tj
-0 -275.3075 Td
-(4076     ip->addrs[NDIRECT] = 0;) 139.7925 Tj
-0 -284.8008 Td
-(4077   }) 34.9481 Tj
-0 -294.2942 Td
-(4078 ) 21.8426 Tj
-0 -303.7875 Td
-(4079   ip->size = 0;) 87.3703 Tj
-0 -313.2809 Td
-(4080   iupdate\(ip\);) 83.0018 Tj
-0 -322.7743 Td
-(4081 }) 26.2111 Tj
-0 -332.2676 Td
-(4082 ) 21.8426 Tj
-0 -341.761 Td
-(4083 // Copy stat information from inode.) 179.1091 Tj
-0 -351.2543 Td
-(4084 void) 39.3166 Tj
-0 -360.7477 Td
-(4085 stati\(struct inode *ip, struct stat *st\)) 196.5831 Tj
-0 -370.2411 Td
-(4086 {) 26.2111 Tj
-0 -379.7344 Td
-(4087   st->dev = ip->dev;) 109.2129 Tj
-0 -389.2278 Td
-(4088   st->ino = ip->inum;) 113.5814 Tj
-0 -398.7211 Td
-(4089   st->type = ip->type;) 117.9499 Tj
-0 -408.2145 Td
-(4090   st->nlink = ip->nlink;) 126.6869 Tj
-0 -417.7079 Td
-(4091   st->size = ip->size;) 117.9499 Tj
-0 -427.2012 Td
-(4092 }) 26.2111 Tj
-0 -436.6946 Td
-(4093 ) 21.8426 Tj
-0 -446.1879 Td
-(4094 ) 21.8426 Tj
-0 -455.6813 Td
-(4095 ) 21.8426 Tj
-0 -465.1747 Td
-(4096 ) 21.8426 Tj
-0 -474.668 Td
-(4097 ) 21.8426 Tj
-0 -484.1614 Td
-(4098 ) 21.8426 Tj
-0 -493.6547 Td
-(4099 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 40) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 48 48
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 10) 157.2665 Tj
-0 -28.4801 Td
-(4100 // Read data from inode.) 126.6869 Tj
-0 -37.9735 Td
-(4101 int) 34.9481 Tj
-0 -47.4668 Td
-(4102 readi\(struct inode *ip, char *dst, uint off, uint n\)) 249.0053 Tj
-0 -56.9602 Td
-(4103 {) 26.2111 Tj
-0 -66.4535 Td
-(4104   uint tot, m;) 83.0018 Tj
-0 -75.9469 Td
-(4105   struct buf *bp;) 96.1073 Tj
-0 -85.4403 Td
-(4106 ) 21.8426 Tj
-0 -94.9336 Td
-(4107   if\(ip->type == T_DEV\){) 126.6869 Tj
-0 -104.427 Td
-(4108     if\(ip->major < 0 || ip->major >= NDEV || !devsw[ip->m\
-ajor].read\)) 318.9016 Tj
-0 -113.9203 Td
-(4109       return -1;) 91.7388 Tj
-0 -123.4137 Td
-(4110     return devsw[ip->major].read\(ip, dst, n\);) 218.4257 Tj
-0 -132.9071 Td
-(4111   }) 34.9481 Tj
-0 -142.4004 Td
-(4112 ) 21.8426 Tj
-0 -151.8938 Td
-(4113   if\(off > ip->size || off + n < off\)) 183.4776 Tj
-0 -161.3871 Td
-(4114     return -1;) 83.0018 Tj
-0 -170.8805 Td
-(4115   if\(off + n > ip->size\)) 126.6869 Tj
-0 -180.3739 Td
-(4116     n = ip->size - off;) 122.3184 Tj
-0 -189.8672 Td
-(4117 ) 21.8426 Tj
-0 -199.3606 Td
-(4118   for\(tot=0; tot<n; tot+=m, off+=m, dst+=m\){) 214.0572 Tj
-0 -208.8539 Td
-(4119     bp = bread\(ip->dev, bmap\(ip, off/BSIZE\)\);) 218.4257 Tj
-0 -218.3473 Td
-(4120     m = min\(n - tot, BSIZE - off%BSIZE\);) 196.5831 Tj
-0 -227.8407 Td
-(4121     memmove\(dst, bp->data + off%BSIZE, m\);) 205.3202 Tj
-0 -237.334 Td
-(4122     brelse\(bp\);) 87.3703 Tj
-0 -246.8274 Td
-(4123   }) 34.9481 Tj
-0 -256.3207 Td
-(4124   return n;) 69.8962 Tj
-0 -265.8141 Td
-(4125 }) 26.2111 Tj
-0 -275.3075 Td
-(4126 ) 21.8426 Tj
-0 -284.8008 Td
-(4127 ) 21.8426 Tj
-0 -294.2942 Td
-(4128 ) 21.8426 Tj
-0 -303.7875 Td
-(4129 ) 21.8426 Tj
-0 -313.2809 Td
-(4130 ) 21.8426 Tj
-0 -322.7743 Td
-(4131 ) 21.8426 Tj
-0 -332.2676 Td
-(4132 ) 21.8426 Tj
-0 -341.761 Td
-(4133 ) 21.8426 Tj
-0 -351.2543 Td
-(4134 ) 21.8426 Tj
-0 -360.7477 Td
-(4135 ) 21.8426 Tj
-0 -370.2411 Td
-(4136 ) 21.8426 Tj
-0 -379.7344 Td
-(4137 ) 21.8426 Tj
-0 -389.2278 Td
-(4138 ) 21.8426 Tj
-0 -398.7211 Td
-(4139 ) 21.8426 Tj
-0 -408.2145 Td
-(4140 ) 21.8426 Tj
-0 -417.7079 Td
-(4141 ) 21.8426 Tj
-0 -427.2012 Td
-(4142 ) 21.8426 Tj
-0 -436.6946 Td
-(4143 ) 21.8426 Tj
-0 -446.1879 Td
-(4144 ) 21.8426 Tj
-0 -455.6813 Td
-(4145 ) 21.8426 Tj
-0 -465.1747 Td
-(4146 ) 21.8426 Tj
-0 -474.668 Td
-(4147 ) 21.8426 Tj
-0 -484.1614 Td
-(4148 ) 21.8426 Tj
-0 -493.6547 Td
-(4149 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 41) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 11) 157.2665 Tj
-0 -28.4801 Td
-(4150 // Write data to inode.) 122.3184 Tj
-0 -37.9735 Td
-(4151 int) 34.9481 Tj
-0 -47.4668 Td
-(4152 writei\(struct inode *ip, char *src, uint off, uint n\)) 253.3738 Tj
-0 -56.9602 Td
-(4153 {) 26.2111 Tj
-0 -66.4535 Td
-(4154   uint tot, m;) 83.0018 Tj
-0 -75.9469 Td
-(4155   struct buf *bp;) 96.1073 Tj
-0 -85.4403 Td
-(4156 ) 21.8426 Tj
-0 -94.9336 Td
-(4157   if\(ip->type == T_DEV\){) 126.6869 Tj
-0 -104.427 Td
-(4158     if\(ip->major < 0 || ip->major >= NDEV || !devsw[ip->m\
-ajor].write\)) 323.2701 Tj
-0 -113.9203 Td
-(4159       return -1;) 91.7388 Tj
-0 -123.4137 Td
-(4160     return devsw[ip->major].write\(ip, src, n\);) 222.7942 Tj
-0 -132.9071 Td
-(4161   }) 34.9481 Tj
-0 -142.4004 Td
-(4162 ) 21.8426 Tj
-0 -151.8938 Td
-(4163   if\(off > ip->size || off + n < off\)) 183.4776 Tj
-0 -161.3871 Td
-(4164     return -1;) 83.0018 Tj
-0 -170.8805 Td
-(4165   if\(off + n > MAXFILE*BSIZE\)) 148.5295 Tj
-0 -180.3739 Td
-(4166     n = MAXFILE*BSIZE - off;) 144.161 Tj
-0 -189.8672 Td
-(4167 ) 21.8426 Tj
-0 -199.3606 Td
-(4168   for\(tot=0; tot<n; tot+=m, off+=m, src+=m\){) 214.0572 Tj
-0 -208.8539 Td
-(4169     bp = bread\(ip->dev, bmap\(ip, off/BSIZE\)\);) 218.4257 Tj
-0 -218.3473 Td
-(4170     m = min\(n - tot, BSIZE - off%BSIZE\);) 196.5831 Tj
-0 -227.8407 Td
-(4171     memmove\(bp->data + off%BSIZE, src, m\);) 205.3202 Tj
-0 -237.334 Td
-(4172     bwrite\(bp\);) 87.3703 Tj
-0 -246.8274 Td
-(4173     brelse\(bp\);) 87.3703 Tj
-0 -256.3207 Td
-(4174   }) 34.9481 Tj
-0 -265.8141 Td
-(4175 ) 21.8426 Tj
-0 -275.3075 Td
-(4176   if\(n > 0 && off > ip->size\){) 152.898 Tj
-0 -284.8008 Td
-(4177     ip->size = off;) 104.8443 Tj
-0 -294.2942 Td
-(4178     iupdate\(ip\);) 91.7388 Tj
-0 -303.7875 Td
-(4179   }) 34.9481 Tj
-0 -313.2809 Td
-(4180   return n;) 69.8962 Tj
-0 -322.7743 Td
-(4181 }) 26.2111 Tj
-0 -332.2676 Td
-(4182 ) 21.8426 Tj
-0 -341.761 Td
-(4183 ) 21.8426 Tj
-0 -351.2543 Td
-(4184 ) 21.8426 Tj
-0 -360.7477 Td
-(4185 ) 21.8426 Tj
-0 -370.2411 Td
-(4186 ) 21.8426 Tj
-0 -379.7344 Td
-(4187 ) 21.8426 Tj
-0 -389.2278 Td
-(4188 ) 21.8426 Tj
-0 -398.7211 Td
-(4189 ) 21.8426 Tj
-0 -408.2145 Td
-(4190 ) 21.8426 Tj
-0 -417.7079 Td
-(4191 ) 21.8426 Tj
-0 -427.2012 Td
-(4192 ) 21.8426 Tj
-0 -436.6946 Td
-(4193 ) 21.8426 Tj
-0 -446.1879 Td
-(4194 ) 21.8426 Tj
-0 -455.6813 Td
-(4195 ) 21.8426 Tj
-0 -465.1747 Td
-(4196 ) 21.8426 Tj
-0 -474.668 Td
-(4197 ) 21.8426 Tj
-0 -484.1614 Td
-(4198 ) 21.8426 Tj
-0 -493.6547 Td
-(4199 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 41) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 49 49
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 12) 157.2665 Tj
-0 -28.4801 Td
-(4200 // Directories) 83.0018 Tj
-0 -37.9735 Td
-(4201 ) 21.8426 Tj
-0 -47.4668 Td
-(4202 int) 34.9481 Tj
-0 -56.9602 Td
-(4203 namecmp\(const char *s, const char *t\)) 183.4776 Tj
-0 -66.4535 Td
-(4204 {) 26.2111 Tj
-0 -75.9469 Td
-(4205   return strncmp\(s, t, DIRSIZ\);) 157.2665 Tj
-0 -85.4403 Td
-(4206 }) 26.2111 Tj
-0 -94.9336 Td
-(4207 ) 21.8426 Tj
-0 -104.427 Td
-(4208 // Look for a directory entry in a directory.) 218.4257 Tj
-0 -113.9203 Td
-(4209 // If found, set *poff to byte offset of entry.) 227.1628 Tj
-0 -123.4137 Td
-(4210 // Caller must have already locked dp.) 187.8461 Tj
-0 -132.9071 Td
-(4211 struct inode*) 78.6333 Tj
-0 -142.4004 Td
-(4212 dirlookup\(struct inode *dp, char *name, uint *poff\)) 244.6368 Tj
-0 -151.8938 Td
-(4213 {) 26.2111 Tj
-0 -161.3871 Td
-(4214   uint off, inum;) 96.1073 Tj
-0 -170.8805 Td
-(4215   struct buf *bp;) 96.1073 Tj
-0 -180.3739 Td
-(4216   struct dirent *de;) 109.2129 Tj
-0 -189.8672 Td
-(4217 ) 21.8426 Tj
-0 -199.3606 Td
-(4218   if\(dp->type != T_DIR\)) 122.3184 Tj
-0 -208.8539 Td
-(4219     panic\("dirlookup not DIR"\);) 157.2665 Tj
-0 -218.3473 Td
-(4220 ) 21.8426 Tj
-0 -227.8407 Td
-(4221   for\(off = 0; off < dp->size; off += BSIZE\){) 218.4257 Tj
-0 -237.334 Td
-(4222     bp = bread\(dp->dev, bmap\(dp, off / BSIZE\)\);) 227.1628 Tj
-0 -246.8274 Td
-(4223     for\(de = \(struct dirent*\)bp->data;) 187.8461 Tj
-0 -256.3207 Td
-(4224         de < \(struct dirent*\)\(bp->data + BSIZE\);) 231.5313 Tj
-0 -265.8141 Td
-(4225         de++\){) 83.0018 Tj
-0 -275.3075 Td
-(4226       if\(de->inum == 0\)) 122.3184 Tj
-0 -284.8008 Td
-(4227         continue;) 96.1073 Tj
-0 -294.2942 Td
-(4228       if\(namecmp\(name, de->name\) == 0\){) 192.2146 Tj
-0 -303.7875 Td
-(4229         // entry matches path element) 183.4776 Tj
-0 -313.2809 Td
-(4230         if\(poff\)) 91.7388 Tj
-0 -322.7743 Td
-(4231           *poff = off + \(uchar*\)de - bp->data;) 222.7942 Tj
-0 -332.2676 Td
-(4232         inum = de->inum;) 126.6869 Tj
-0 -341.761 Td
-(4233         brelse\(bp\);) 104.8443 Tj
-0 -351.2543 Td
-(4234         return iget\(dp->dev, inum\);) 174.7406 Tj
-0 -360.7477 Td
-(4235       }) 52.4222 Tj
-0 -370.2411 Td
-(4236     }) 43.6851 Tj
-0 -379.7344 Td
-(4237     brelse\(bp\);) 87.3703 Tj
-0 -389.2278 Td
-(4238   }) 34.9481 Tj
-0 -398.7211 Td
-(4239   return 0;) 69.8962 Tj
-0 -408.2145 Td
-(4240 }) 26.2111 Tj
-0 -417.7079 Td
-(4241 ) 21.8426 Tj
-0 -427.2012 Td
-(4242 ) 21.8426 Tj
-0 -436.6946 Td
-(4243 ) 21.8426 Tj
-0 -446.1879 Td
-(4244 ) 21.8426 Tj
-0 -455.6813 Td
-(4245 ) 21.8426 Tj
-0 -465.1747 Td
-(4246 ) 21.8426 Tj
-0 -474.668 Td
-(4247 ) 21.8426 Tj
-0 -484.1614 Td
-(4248 ) 21.8426 Tj
-0 -493.6547 Td
-(4249 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 42) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 13) 157.2665 Tj
-0 -28.4801 Td
-(4250 // Write a new directory entry \(name, inum\) into the dir\
-ectory dp.) 310.1645 Tj
-0 -37.9735 Td
-(4251 int) 34.9481 Tj
-0 -47.4668 Td
-(4252 dirlink\(struct inode *dp, char *name, uint inum\)) 231.5313 Tj
-0 -56.9602 Td
-(4253 {) 26.2111 Tj
-0 -66.4535 Td
-(4254   int off;) 65.5277 Tj
-0 -75.9469 Td
-(4255   struct dirent de;) 104.8443 Tj
-0 -85.4403 Td
-(4256   struct inode *ip;) 104.8443 Tj
-0 -94.9336 Td
-(4257 ) 21.8426 Tj
-0 -104.427 Td
-(4258   // Check that name is not present.) 179.1091 Tj
-0 -113.9203 Td
-(4259   if\(\(ip = dirlookup\(dp, name, 0\)\) != 0\){) 200.9517 Tj
-0 -123.4137 Td
-(4260     iput\(ip\);) 78.6333 Tj
-0 -132.9071 Td
-(4261     return -1;) 83.0018 Tj
-0 -142.4004 Td
-(4262   }) 34.9481 Tj
-0 -151.8938 Td
-(4263 ) 21.8426 Tj
-0 -161.3871 Td
-(4264   // Look for an empty dirent.) 152.898 Tj
-0 -170.8805 Td
-(4265   for\(off = 0; off < dp->size; off += sizeof\(de\)\){) 240.2683 Tj
-0 -180.3739 Td
-(4266     if\(readi\(dp, \(char*\)&de, off, sizeof\(de\)\) != si\
-zeof\(de\)\)) 283.9534 Tj
-0 -189.8672 Td
-(4267       panic\("dirlink read"\);) 144.161 Tj
-0 -199.3606 Td
-(4268     if\(de.inum == 0\)) 109.2129 Tj
-0 -208.8539 Td
-(4269       break;) 74.2647 Tj
-0 -218.3473 Td
-(4270   }) 34.9481 Tj
-0 -227.8407 Td
-(4271 ) 21.8426 Tj
-0 -237.334 Td
-(4272   strncpy\(de.name, name, DIRSIZ\);) 166.0035 Tj
-0 -246.8274 Td
-(4273   de.inum = inum;) 96.1073 Tj
-0 -256.3207 Td
-(4274   if\(writei\(dp, \(char*\)&de, off, sizeof\(de\)\) != siz\
-eof\(de\)\)) 279.5849 Tj
-0 -265.8141 Td
-(4275     panic\("dirlink"\);) 113.5814 Tj
-0 -275.3075 Td
-(4276 ) 21.8426 Tj
-0 -284.8008 Td
-(4277   return 0;) 69.8962 Tj
-0 -294.2942 Td
-(4278 }) 26.2111 Tj
-0 -303.7875 Td
-(4279 ) 21.8426 Tj
-0 -313.2809 Td
-(4280 ) 21.8426 Tj
-0 -322.7743 Td
-(4281 ) 21.8426 Tj
-0 -332.2676 Td
-(4282 ) 21.8426 Tj
-0 -341.761 Td
-(4283 ) 21.8426 Tj
-0 -351.2543 Td
-(4284 ) 21.8426 Tj
-0 -360.7477 Td
-(4285 ) 21.8426 Tj
-0 -370.2411 Td
-(4286 ) 21.8426 Tj
-0 -379.7344 Td
-(4287 ) 21.8426 Tj
-0 -389.2278 Td
-(4288 ) 21.8426 Tj
-0 -398.7211 Td
-(4289 ) 21.8426 Tj
-0 -408.2145 Td
-(4290 ) 21.8426 Tj
-0 -417.7079 Td
-(4291 ) 21.8426 Tj
-0 -427.2012 Td
-(4292 ) 21.8426 Tj
-0 -436.6946 Td
-(4293 ) 21.8426 Tj
-0 -446.1879 Td
-(4294 ) 21.8426 Tj
-0 -455.6813 Td
-(4295 ) 21.8426 Tj
-0 -465.1747 Td
-(4296 ) 21.8426 Tj
-0 -474.668 Td
-(4297 ) 21.8426 Tj
-0 -484.1614 Td
-(4298 ) 21.8426 Tj
-0 -493.6547 Td
-(4299 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 42) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 50 50
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 14) 157.2665 Tj
-0 -28.4801 Td
-(4300 // Paths) 56.7907 Tj
-0 -37.9735 Td
-(4301 ) 21.8426 Tj
-0 -47.4668 Td
-(4302 // Copy the next path element from path into name.) 240.2683 Tj
-0 -56.9602 Td
-(4303 // Return a pointer to the element following the copied on\
-e.) 283.9534 Tj
-0 -66.4535 Td
-(4304 // The returned path has no leading slashes,) 214.0572 Tj
-0 -75.9469 Td
-(4305 // so the caller can check *path=='\\0' to see if the name\
- is the last one.) 345.1126 Tj
-0 -85.4403 Td
-(4306 // If no name to remove, return 0.) 170.3721 Tj
-0 -94.9336 Td
-(4307 //) 30.5796 Tj
-0 -104.427 Td
-(4308 // Examples:) 74.2647 Tj
-0 -113.9203 Td
-(4309 //   skipelem\("a/bb/c", name\) = "bb/c", setting name = "\
-a") 275.2164 Tj
-0 -123.4137 Td
-(4310 //   skipelem\("///a//bb", name\) = "bb", setting name = "\
-a") 275.2164 Tj
-0 -132.9071 Td
-(4311 //   skipelem\("a", name\) = "", setting name = "a") 235.8998 Tj
-0 -142.4004 Td
-(4312 //   skipelem\("", name\) = skipelem\("////", name\) = 0) 249.0053 Tj
-0 -151.8938 Td
-(4313 //) 30.5796 Tj
-0 -161.3871 Td
-(4314 static char*) 74.2647 Tj
-0 -170.8805 Td
-(4315 skipelem\(char *path, char *name\)) 161.635 Tj
-0 -180.3739 Td
-(4316 {) 26.2111 Tj
-0 -189.8672 Td
-(4317   char *s;) 65.5277 Tj
-0 -199.3606 Td
-(4318   int len;) 65.5277 Tj
-0 -208.8539 Td
-(4319 ) 21.8426 Tj
-0 -218.3473 Td
-(4320   while\(*path == '/'\)) 113.5814 Tj
-0 -227.8407 Td
-(4321     path++;) 69.8962 Tj
-0 -237.334 Td
-(4322   if\(*path == 0\)) 91.7388 Tj
-0 -246.8274 Td
-(4323     return 0;) 78.6333 Tj
-0 -256.3207 Td
-(4324   s = path;) 69.8962 Tj
-0 -265.8141 Td
-(4325   while\(*path != '/' && *path != 0\)) 174.7406 Tj
-0 -275.3075 Td
-(4326     path++;) 69.8962 Tj
-0 -284.8008 Td
-(4327   len = path - s;) 96.1073 Tj
-0 -294.2942 Td
-(4328   if\(len >= DIRSIZ\)) 104.8443 Tj
-0 -303.7875 Td
-(4329     memmove\(name, s, DIRSIZ\);) 148.5295 Tj
-0 -313.2809 Td
-(4330   else {) 56.7907 Tj
-0 -322.7743 Td
-(4331     memmove\(name, s, len\);) 135.4239 Tj
-0 -332.2676 Td
-(4332     name[len] = 0;) 100.4758 Tj
-0 -341.761 Td
-(4333   }) 34.9481 Tj
-0 -351.2543 Td
-(4334   while\(*path == '/'\)) 113.5814 Tj
-0 -360.7477 Td
-(4335     path++;) 69.8962 Tj
-0 -370.2411 Td
-(4336   return path;) 83.0018 Tj
-0 -379.7344 Td
-(4337 }) 26.2111 Tj
-0 -389.2278 Td
-(4338 ) 21.8426 Tj
-0 -398.7211 Td
-(4339 ) 21.8426 Tj
-0 -408.2145 Td
-(4340 ) 21.8426 Tj
-0 -417.7079 Td
-(4341 ) 21.8426 Tj
-0 -427.2012 Td
-(4342 ) 21.8426 Tj
-0 -436.6946 Td
-(4343 ) 21.8426 Tj
-0 -446.1879 Td
-(4344 ) 21.8426 Tj
-0 -455.6813 Td
-(4345 ) 21.8426 Tj
-0 -465.1747 Td
-(4346 ) 21.8426 Tj
-0 -474.668 Td
-(4347 ) 21.8426 Tj
-0 -484.1614 Td
-(4348 ) 21.8426 Tj
-0 -493.6547 Td
-(4349 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 43) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/fs.c  Page 15) 157.2665 Tj
-0 -28.4801 Td
-(4350 // Look up and return the inode for a path name.) 231.5313 Tj
-0 -37.9735 Td
-(4351 // If parent != 0, return the inode for the parent and cop\
-y the final) 323.2701 Tj
-0 -47.4668 Td
-(4352 // path element into name, which must have room for DIRSIZ\
- bytes.) 305.796 Tj
-0 -56.9602 Td
-(4353 static struct inode*) 109.2129 Tj
-0 -66.4535 Td
-(4354 namex\(char *path, int nameiparent, char *name\)) 222.7942 Tj
-0 -75.9469 Td
-(4355 {) 26.2111 Tj
-0 -85.4403 Td
-(4356   struct inode *ip, *next;) 135.4239 Tj
-0 -94.9336 Td
-(4357 ) 21.8426 Tj
-0 -104.427 Td
-(4358   if\(*path == '/'\)) 100.4758 Tj
-0 -113.9203 Td
-(4359     ip = iget\(ROOTDEV, ROOTINO\);) 161.635 Tj
-0 -123.4137 Td
-(4360   else) 48.0537 Tj
-0 -132.9071 Td
-(4361     ip = idup\(proc->cwd\);) 131.0554 Tj
-0 -142.4004 Td
-(4362 ) 21.8426 Tj
-0 -151.8938 Td
-(4363   while\(\(path = skipelem\(path, name\)\) != 0\){) 214.0572 Tj
-0 -161.3871 Td
-(4364     ilock\(ip\);) 83.0018 Tj
-0 -170.8805 Td
-(4365     if\(ip->type != T_DIR\){) 135.4239 Tj
-0 -180.3739 Td
-(4366       iunlockput\(ip\);) 113.5814 Tj
-0 -189.8672 Td
-(4367       return 0;) 87.3703 Tj
-0 -199.3606 Td
-(4368     }) 43.6851 Tj
-0 -208.8539 Td
-(4369     if\(nameiparent && *path == '\\0'\){) 183.4776 Tj
-0 -218.3473 Td
-(4370       // Stop one level early.) 152.898 Tj
-0 -227.8407 Td
-(4371       iunlock\(ip\);) 100.4758 Tj
-0 -237.334 Td
-(4372       return ip;) 91.7388 Tj
-0 -246.8274 Td
-(4373     }) 43.6851 Tj
-0 -256.3207 Td
-(4374     if\(\(next = dirlookup\(ip, name, 0\)\) == 0\){) 218.4257 Tj
-0 -265.8141 Td
-(4375       iunlockput\(ip\);) 113.5814 Tj
-0 -275.3075 Td
-(4376       return 0;) 87.3703 Tj
-0 -284.8008 Td
-(4377     }) 43.6851 Tj
-0 -294.2942 Td
-(4378     iunlockput\(ip\);) 104.8443 Tj
-0 -303.7875 Td
-(4379     ip = next;) 83.0018 Tj
-0 -313.2809 Td
-(4380   }) 34.9481 Tj
-0 -322.7743 Td
-(4381   if\(nameiparent\){) 100.4758 Tj
-0 -332.2676 Td
-(4382     iput\(ip\);) 78.6333 Tj
-0 -341.761 Td
-(4383     return 0;) 78.6333 Tj
-0 -351.2543 Td
-(4384   }) 34.9481 Tj
-0 -360.7477 Td
-(4385   return ip;) 74.2647 Tj
-0 -370.2411 Td
-(4386 }) 26.2111 Tj
-0 -379.7344 Td
-(4387 ) 21.8426 Tj
-0 -389.2278 Td
-(4388 struct inode*) 78.6333 Tj
-0 -398.7211 Td
-(4389 namei\(char *path\)) 96.1073 Tj
-0 -408.2145 Td
-(4390 {) 26.2111 Tj
-0 -417.7079 Td
-(4391   char name[DIRSIZ];) 109.2129 Tj
-0 -427.2012 Td
-(4392   return namex\(path, 0, name\);) 152.898 Tj
-0 -436.6946 Td
-(4393 }) 26.2111 Tj
-0 -446.1879 Td
-(4394 ) 21.8426 Tj
-0 -455.6813 Td
-(4395 struct inode*) 78.6333 Tj
-0 -465.1747 Td
-(4396 nameiparent\(char *path, char *name\)) 174.7406 Tj
-0 -474.668 Td
-(4397 {) 26.2111 Tj
-0 -484.1614 Td
-(4398   return namex\(path, 1, name\);) 152.898 Tj
-0 -493.6547 Td
-(4399 }) 26.2111 Tj
-0 -522.1348 Td
-(Sheet 43) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 51 51
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/file.c  Page 1) 161.635 Tj
-0 -28.4801 Td
-(4400 #include "types.h") 100.4758 Tj
-0 -37.9735 Td
-(4401 #include "defs.h") 96.1073 Tj
-0 -47.4668 Td
-(4402 #include "param.h") 100.4758 Tj
-0 -56.9602 Td
-(4403 #include "fs.h") 87.3703 Tj
-0 -66.4535 Td
-(4404 #include "file.h") 96.1073 Tj
-0 -75.9469 Td
-(4405 #include "spinlock.h") 113.5814 Tj
-0 -85.4403 Td
-(4406 ) 21.8426 Tj
-0 -94.9336 Td
-(4407 struct devsw devsw[NDEV];) 131.0554 Tj
-0 -104.427 Td
-(4408 struct {) 56.7907 Tj
-0 -113.9203 Td
-(4409   struct spinlock lock;) 122.3184 Tj
-0 -123.4137 Td
-(4410   struct file file[NFILE];) 135.4239 Tj
-0 -132.9071 Td
-(4411 } ftable;) 61.1592 Tj
-0 -142.4004 Td
-(4412 ) 21.8426 Tj
-0 -151.8938 Td
-(4413 void) 39.3166 Tj
-0 -161.3871 Td
-(4414 fileinit\(void\)) 83.0018 Tj
-0 -170.8805 Td
-(4415 {) 26.2111 Tj
-0 -180.3739 Td
-(4416   initlock\(&ftable.lock, "ftable"\);) 174.7406 Tj
-0 -189.8672 Td
-(4417 }) 26.2111 Tj
-0 -199.3606 Td
-(4418 ) 21.8426 Tj
-0 -208.8539 Td
-(4419 // Allocate a file structure.) 148.5295 Tj
-0 -218.3473 Td
-(4420 struct file*) 74.2647 Tj
-0 -227.8407 Td
-(4421 filealloc\(void\)) 87.3703 Tj
-0 -237.334 Td
-(4422 {) 26.2111 Tj
-0 -246.8274 Td
-(4423   struct file *f;) 96.1073 Tj
-0 -256.3207 Td
-(4424 ) 21.8426 Tj
-0 -265.8141 Td
-(4425   acquire\(&ftable.lock\);) 126.6869 Tj
-0 -275.3075 Td
-(4426   for\(f = ftable.file; f < ftable.file + NFILE; f++\){) 253.3738 Tj
-0 -284.8008 Td
-(4427     if\(f->ref == 0\){) 109.2129 Tj
-0 -294.2942 Td
-(4428       f->ref = 1;) 96.1073 Tj
-0 -303.7875 Td
-(4429       release\(&ftable.lock\);) 144.161 Tj
-0 -313.2809 Td
-(4430       return f;) 87.3703 Tj
-0 -322.7743 Td
-(4431     }) 43.6851 Tj
-0 -332.2676 Td
-(4432   }) 34.9481 Tj
-0 -341.761 Td
-(4433   release\(&ftable.lock\);) 126.6869 Tj
-0 -351.2543 Td
-(4434   return 0;) 69.8962 Tj
-0 -360.7477 Td
-(4435 }) 26.2111 Tj
-0 -370.2411 Td
-(4436 ) 21.8426 Tj
-0 -379.7344 Td
-(4437 // Increment ref count for file f.) 170.3721 Tj
-0 -389.2278 Td
-(4438 struct file*) 74.2647 Tj
-0 -398.7211 Td
-(4439 filedup\(struct file *f\)) 122.3184 Tj
-0 -408.2145 Td
-(4440 {) 26.2111 Tj
-0 -417.7079 Td
-(4441   acquire\(&ftable.lock\);) 126.6869 Tj
-0 -427.2012 Td
-(4442   if\(f->ref < 1\)) 91.7388 Tj
-0 -436.6946 Td
-(4443     panic\("filedup"\);) 113.5814 Tj
-0 -446.1879 Td
-(4444   f->ref++;) 69.8962 Tj
-0 -455.6813 Td
-(4445   release\(&ftable.lock\);) 126.6869 Tj
-0 -465.1747 Td
-(4446   return f;) 69.8962 Tj
-0 -474.668 Td
-(4447 }) 26.2111 Tj
-0 -484.1614 Td
-(4448 ) 21.8426 Tj
-0 -493.6547 Td
-(4449 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 44) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/file.c  Page 2) 161.635 Tj
-0 -28.4801 Td
-(4450 // Close file f.  \(Decrement ref count, close when reache\
-s 0.\)) 292.6905 Tj
-0 -37.9735 Td
-(4451 void) 39.3166 Tj
-0 -47.4668 Td
-(4452 fileclose\(struct file *f\)) 131.0554 Tj
-0 -56.9602 Td
-(4453 {) 26.2111 Tj
-0 -66.4535 Td
-(4454   struct file ff;) 96.1073 Tj
-0 -75.9469 Td
-(4455 ) 21.8426 Tj
-0 -85.4403 Td
-(4456   acquire\(&ftable.lock\);) 126.6869 Tj
-0 -94.9336 Td
-(4457   if\(f->ref < 1\)) 91.7388 Tj
-0 -104.427 Td
-(4458     panic\("fileclose"\);) 122.3184 Tj
-0 -113.9203 Td
-(4459   if\(--f->ref > 0\){) 104.8443 Tj
-0 -123.4137 Td
-(4460     release\(&ftable.lock\);) 135.4239 Tj
-0 -132.9071 Td
-(4461     return;) 69.8962 Tj
-0 -142.4004 Td
-(4462   }) 34.9481 Tj
-0 -151.8938 Td
-(4463   ff = *f;) 65.5277 Tj
-0 -161.3871 Td
-(4464   f->ref = 0;) 78.6333 Tj
-0 -170.8805 Td
-(4465   f->type = FD_NONE;) 109.2129 Tj
-0 -180.3739 Td
-(4466   release\(&ftable.lock\);) 126.6869 Tj
-0 -189.8672 Td
-(4467 ) 21.8426 Tj
-0 -199.3606 Td
-(4468   if\(ff.type == FD_PIPE\)) 126.6869 Tj
-0 -208.8539 Td
-(4469     pipeclose\(ff.pipe, ff.writable\);) 179.1091 Tj
-0 -218.3473 Td
-(4470   else if\(ff.type == FD_INODE\)) 152.898 Tj
-0 -227.8407 Td
-(4471     iput\(ff.ip\);) 91.7388 Tj
-0 -237.334 Td
-(4472 }) 26.2111 Tj
-0 -246.8274 Td
-(4473 ) 21.8426 Tj
-0 -256.3207 Td
-(4474 // Get metadata about file f.) 148.5295 Tj
-0 -265.8141 Td
-(4475 int) 34.9481 Tj
-0 -275.3075 Td
-(4476 filestat\(struct file *f, struct stat *st\)) 200.9517 Tj
-0 -284.8008 Td
-(4477 {) 26.2111 Tj
-0 -294.2942 Td
-(4478   if\(f->type == FD_INODE\){) 135.4239 Tj
-0 -303.7875 Td
-(4479     ilock\(f->ip\);) 96.1073 Tj
-0 -313.2809 Td
-(4480     stati\(f->ip, st\);) 113.5814 Tj
-0 -322.7743 Td
-(4481     iunlock\(f->ip\);) 104.8443 Tj
-0 -332.2676 Td
-(4482     return 0;) 78.6333 Tj
-0 -341.761 Td
-(4483   }) 34.9481 Tj
-0 -351.2543 Td
-(4484   return -1;) 74.2647 Tj
-0 -360.7477 Td
-(4485 }) 26.2111 Tj
-0 -370.2411 Td
-(4486 ) 21.8426 Tj
-0 -379.7344 Td
-(4487 ) 21.8426 Tj
-0 -389.2278 Td
-(4488 ) 21.8426 Tj
-0 -398.7211 Td
-(4489 ) 21.8426 Tj
-0 -408.2145 Td
-(4490 ) 21.8426 Tj
-0 -417.7079 Td
-(4491 ) 21.8426 Tj
-0 -427.2012 Td
-(4492 ) 21.8426 Tj
-0 -436.6946 Td
-(4493 ) 21.8426 Tj
-0 -446.1879 Td
-(4494 ) 21.8426 Tj
-0 -455.6813 Td
-(4495 ) 21.8426 Tj
-0 -465.1747 Td
-(4496 ) 21.8426 Tj
-0 -474.668 Td
-(4497 ) 21.8426 Tj
-0 -484.1614 Td
-(4498 ) 21.8426 Tj
-0 -493.6547 Td
-(4499 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 44) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 52 52
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/file.c  Page 3) 161.635 Tj
-0 -28.4801 Td
-(4500 // Read from file f.  Addr is kernel address.) 218.4257 Tj
-0 -37.9735 Td
-(4501 int) 34.9481 Tj
-0 -47.4668 Td
-(4502 fileread\(struct file *f, char *addr, int n\)) 209.6887 Tj
-0 -56.9602 Td
-(4503 {) 26.2111 Tj
-0 -66.4535 Td
-(4504   int r;) 56.7907 Tj
-0 -75.9469 Td
-(4505 ) 21.8426 Tj
-0 -85.4403 Td
-(4506   if\(f->readable == 0\)) 117.9499 Tj
-0 -94.9336 Td
-(4507     return -1;) 83.0018 Tj
-0 -104.427 Td
-(4508   if\(f->type == FD_PIPE\)) 126.6869 Tj
-0 -113.9203 Td
-(4509     return piperead\(f->pipe, addr, n\);) 187.8461 Tj
-0 -123.4137 Td
-(4510   if\(f->type == FD_INODE\){) 135.4239 Tj
-0 -132.9071 Td
-(4511     ilock\(f->ip\);) 96.1073 Tj
-0 -142.4004 Td
-(4512     if\(\(r = readi\(f->ip, addr, f->off, n\)\) > 0\)) 227.1628 Tj
-0 -151.8938 Td
-(4513       f->off += r;) 100.4758 Tj
-0 -161.3871 Td
-(4514     iunlock\(f->ip\);) 104.8443 Tj
-0 -170.8805 Td
-(4515     return r;) 78.6333 Tj
-0 -180.3739 Td
-(4516   }) 34.9481 Tj
-0 -189.8672 Td
-(4517   panic\("fileread"\);) 109.2129 Tj
-0 -199.3606 Td
-(4518 }) 26.2111 Tj
-0 -208.8539 Td
-(4519 ) 21.8426 Tj
-0 -218.3473 Td
-(4520 // Write to file f.  Addr is kernel address.) 214.0572 Tj
-0 -227.8407 Td
-(4521 int) 34.9481 Tj
-0 -237.334 Td
-(4522 filewrite\(struct file *f, char *addr, int n\)) 214.0572 Tj
-0 -246.8274 Td
-(4523 {) 26.2111 Tj
-0 -256.3207 Td
-(4524   int r;) 56.7907 Tj
-0 -265.8141 Td
-(4525 ) 21.8426 Tj
-0 -275.3075 Td
-(4526   if\(f->writable == 0\)) 117.9499 Tj
-0 -284.8008 Td
-(4527     return -1;) 83.0018 Tj
-0 -294.2942 Td
-(4528   if\(f->type == FD_PIPE\)) 126.6869 Tj
-0 -303.7875 Td
-(4529     return pipewrite\(f->pipe, addr, n\);) 192.2146 Tj
-0 -313.2809 Td
-(4530   if\(f->type == FD_INODE\){) 135.4239 Tj
-0 -322.7743 Td
-(4531     ilock\(f->ip\);) 96.1073 Tj
-0 -332.2676 Td
-(4532     if\(\(r = writei\(f->ip, addr, f->off, n\)\) > 0\)) 231.5313 Tj
-0 -341.761 Td
-(4533       f->off += r;) 100.4758 Tj
-0 -351.2543 Td
-(4534     iunlock\(f->ip\);) 104.8443 Tj
-0 -360.7477 Td
-(4535     return r;) 78.6333 Tj
-0 -370.2411 Td
-(4536   }) 34.9481 Tj
-0 -379.7344 Td
-(4537   panic\("filewrite"\);) 113.5814 Tj
-0 -389.2278 Td
-(4538 }) 26.2111 Tj
-0 -398.7211 Td
-(4539 ) 21.8426 Tj
-0 -408.2145 Td
-(4540 ) 21.8426 Tj
-0 -417.7079 Td
-(4541 ) 21.8426 Tj
-0 -427.2012 Td
-(4542 ) 21.8426 Tj
-0 -436.6946 Td
-(4543 ) 21.8426 Tj
-0 -446.1879 Td
-(4544 ) 21.8426 Tj
-0 -455.6813 Td
-(4545 ) 21.8426 Tj
-0 -465.1747 Td
-(4546 ) 21.8426 Tj
-0 -474.668 Td
-(4547 ) 21.8426 Tj
-0 -484.1614 Td
-(4548 ) 21.8426 Tj
-0 -493.6547 Td
-(4549 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 45) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sysfile.c  Page 1) 174.7406 Tj
-0 -28.4801 Td
-(4550 #include "types.h") 100.4758 Tj
-0 -37.9735 Td
-(4551 #include "defs.h") 96.1073 Tj
-0 -47.4668 Td
-(4552 #include "param.h") 100.4758 Tj
-0 -56.9602 Td
-(4553 #include "stat.h") 96.1073 Tj
-0 -66.4535 Td
-(4554 #include "mmu.h") 91.7388 Tj
-0 -75.9469 Td
-(4555 #include "proc.h") 96.1073 Tj
-0 -85.4403 Td
-(4556 #include "fs.h") 87.3703 Tj
-0 -94.9336 Td
-(4557 #include "file.h") 96.1073 Tj
-0 -104.427 Td
-(4558 #include "fcntl.h") 100.4758 Tj
-0 -113.9203 Td
-(4559 ) 21.8426 Tj
-0 -123.4137 Td
-(4560 // Fetch the nth word-sized system call argument as a file\
- descriptor) 323.2701 Tj
-0 -132.9071 Td
-(4561 // and return both the descriptor and the corresponding st\
-ruct file.) 318.9016 Tj
-0 -142.4004 Td
-(4562 static int) 65.5277 Tj
-0 -151.8938 Td
-(4563 argfd\(int n, int *pfd, struct file **pf\)) 196.5831 Tj
-0 -161.3871 Td
-(4564 {) 26.2111 Tj
-0 -170.8805 Td
-(4565   int fd;) 61.1592 Tj
-0 -180.3739 Td
-(4566   struct file *f;) 96.1073 Tj
-0 -189.8672 Td
-(4567 ) 21.8426 Tj
-0 -199.3606 Td
-(4568   if\(argint\(n, &fd\) < 0\)) 126.6869 Tj
-0 -208.8539 Td
-(4569     return -1;) 83.0018 Tj
-0 -218.3473 Td
-(4570   if\(fd < 0 || fd >= NOFILE || \(f=proc->ofile[fd]\) == 0\
-\)) 266.4794 Tj
-0 -227.8407 Td
-(4571     return -1;) 83.0018 Tj
-0 -237.334 Td
-(4572   if\(pfd\)) 61.1592 Tj
-0 -246.8274 Td
-(4573     *pfd = fd;) 83.0018 Tj
-0 -256.3207 Td
-(4574   if\(pf\)) 56.7907 Tj
-0 -265.8141 Td
-(4575     *pf = f;) 74.2647 Tj
-0 -275.3075 Td
-(4576   return 0;) 69.8962 Tj
-0 -284.8008 Td
-(4577 }) 26.2111 Tj
-0 -294.2942 Td
-(4578 ) 21.8426 Tj
-0 -303.7875 Td
-(4579 // Allocate a file descriptor for the given file.) 235.8998 Tj
-0 -313.2809 Td
-(4580 // Takes over file reference from caller on success.) 249.0053 Tj
-0 -322.7743 Td
-(4581 static int) 65.5277 Tj
-0 -332.2676 Td
-(4582 fdalloc\(struct file *f\)) 122.3184 Tj
-0 -341.761 Td
-(4583 {) 26.2111 Tj
-0 -351.2543 Td
-(4584   int fd;) 61.1592 Tj
-0 -360.7477 Td
-(4585 ) 21.8426 Tj
-0 -370.2411 Td
-(4586   for\(fd = 0; fd < NOFILE; fd++\){) 166.0035 Tj
-0 -379.7344 Td
-(4587     if\(proc->ofile[fd] == 0\){) 148.5295 Tj
-0 -389.2278 Td
-(4588       proc->ofile[fd] = f;) 135.4239 Tj
-0 -398.7211 Td
-(4589       return fd;) 91.7388 Tj
-0 -408.2145 Td
-(4590     }) 43.6851 Tj
-0 -417.7079 Td
-(4591   }) 34.9481 Tj
-0 -427.2012 Td
-(4592   return -1;) 74.2647 Tj
-0 -436.6946 Td
-(4593 }) 26.2111 Tj
-0 -446.1879 Td
-(4594 ) 21.8426 Tj
-0 -455.6813 Td
-(4595 ) 21.8426 Tj
-0 -465.1747 Td
-(4596 ) 21.8426 Tj
-0 -474.668 Td
-(4597 ) 21.8426 Tj
-0 -484.1614 Td
-(4598 ) 21.8426 Tj
-0 -493.6547 Td
-(4599 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 45) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 53 53
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sysfile.c  Page 2) 174.7406 Tj
-0 -28.4801 Td
-(4600 int) 34.9481 Tj
-0 -37.9735 Td
-(4601 sys_dup\(void\)) 78.6333 Tj
-0 -47.4668 Td
-(4602 {) 26.2111 Tj
-0 -56.9602 Td
-(4603   struct file *f;) 96.1073 Tj
-0 -66.4535 Td
-(4604   int fd;) 61.1592 Tj
-0 -75.9469 Td
-(4605 ) 21.8426 Tj
-0 -85.4403 Td
-(4606   if\(argfd\(0, 0, &f\) < 0\)) 131.0554 Tj
-0 -94.9336 Td
-(4607     return -1;) 83.0018 Tj
-0 -104.427 Td
-(4608   if\(\(fd=fdalloc\(f\)\) < 0\)) 131.0554 Tj
-0 -113.9203 Td
-(4609     return -1;) 83.0018 Tj
-0 -123.4137 Td
-(4610   filedup\(f\);) 78.6333 Tj
-0 -132.9071 Td
-(4611   return fd;) 74.2647 Tj
-0 -142.4004 Td
-(4612 }) 26.2111 Tj
-0 -151.8938 Td
-(4613 ) 21.8426 Tj
-0 -161.3871 Td
-(4614 int) 34.9481 Tj
-0 -170.8805 Td
-(4615 sys_read\(void\)) 83.0018 Tj
-0 -180.3739 Td
-(4616 {) 26.2111 Tj
-0 -189.8672 Td
-(4617   struct file *f;) 96.1073 Tj
-0 -199.3606 Td
-(4618   int n;) 56.7907 Tj
-0 -208.8539 Td
-(4619   char *p;) 65.5277 Tj
-0 -218.3473 Td
-(4620 ) 21.8426 Tj
-0 -227.8407 Td
-(4621   if\(argfd\(0, 0, &f\) < 0 || argint\(2, &n\) < 0 || argp\
-tr\(1, &p, n\) < 0\)) 327.6386 Tj
-0 -237.334 Td
-(4622     return -1;) 83.0018 Tj
-0 -246.8274 Td
-(4623   return fileread\(f, p, n\);) 139.7925 Tj
-0 -256.3207 Td
-(4624 }) 26.2111 Tj
-0 -265.8141 Td
-(4625 ) 21.8426 Tj
-0 -275.3075 Td
-(4626 int) 34.9481 Tj
-0 -284.8008 Td
-(4627 sys_write\(void\)) 87.3703 Tj
-0 -294.2942 Td
-(4628 {) 26.2111 Tj
-0 -303.7875 Td
-(4629   struct file *f;) 96.1073 Tj
-0 -313.2809 Td
-(4630   int n;) 56.7907 Tj
-0 -322.7743 Td
-(4631   char *p;) 65.5277 Tj
-0 -332.2676 Td
-(4632 ) 21.8426 Tj
-0 -341.761 Td
-(4633   if\(argfd\(0, 0, &f\) < 0 || argint\(2, &n\) < 0 || argp\
-tr\(1, &p, n\) < 0\)) 327.6386 Tj
-0 -351.2543 Td
-(4634     return -1;) 83.0018 Tj
-0 -360.7477 Td
-(4635   return filewrite\(f, p, n\);) 144.161 Tj
-0 -370.2411 Td
-(4636 }) 26.2111 Tj
-0 -379.7344 Td
-(4637 ) 21.8426 Tj
-0 -389.2278 Td
-(4638 int) 34.9481 Tj
-0 -398.7211 Td
-(4639 sys_close\(void\)) 87.3703 Tj
-0 -408.2145 Td
-(4640 {) 26.2111 Tj
-0 -417.7079 Td
-(4641   int fd;) 61.1592 Tj
-0 -427.2012 Td
-(4642   struct file *f;) 96.1073 Tj
-0 -436.6946 Td
-(4643 ) 21.8426 Tj
-0 -446.1879 Td
-(4644   if\(argfd\(0, &fd, &f\) < 0\)) 139.7925 Tj
-0 -455.6813 Td
-(4645     return -1;) 83.0018 Tj
-0 -465.1747 Td
-(4646   proc->ofile[fd] = 0;) 117.9499 Tj
-0 -474.668 Td
-(4647   fileclose\(f\);) 87.3703 Tj
-0 -484.1614 Td
-(4648   return 0;) 69.8962 Tj
-0 -493.6547 Td
-(4649 }) 26.2111 Tj
-0 -522.1348 Td
-(Sheet 46) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sysfile.c  Page 3) 174.7406 Tj
-0 -28.4801 Td
-(4650 int) 34.9481 Tj
-0 -37.9735 Td
-(4651 sys_fstat\(void\)) 87.3703 Tj
-0 -47.4668 Td
-(4652 {) 26.2111 Tj
-0 -56.9602 Td
-(4653   struct file *f;) 96.1073 Tj
-0 -66.4535 Td
-(4654   struct stat *st;) 100.4758 Tj
-0 -75.9469 Td
-(4655 ) 21.8426 Tj
-0 -85.4403 Td
-(4656   if\(argfd\(0, 0, &f\) < 0 || argptr\(1, \(void*\)&st, si\
-zeof\(*st\)\) < 0\)) 314.533 Tj
-0 -94.9336 Td
-(4657     return -1;) 83.0018 Tj
-0 -104.427 Td
-(4658   return filestat\(f, st\);) 131.0554 Tj
-0 -113.9203 Td
-(4659 }) 26.2111 Tj
-0 -123.4137 Td
-(4660 ) 21.8426 Tj
-0 -132.9071 Td
-(4661 // Create the path new as a link to the same inode as old.) 275.2164 Tj
-0 -142.4004 Td
-(4662 int) 34.9481 Tj
-0 -151.8938 Td
-(4663 sys_link\(void\)) 83.0018 Tj
-0 -161.3871 Td
-(4664 {) 26.2111 Tj
-0 -170.8805 Td
-(4665   char name[DIRSIZ], *new, *old;) 161.635 Tj
-0 -180.3739 Td
-(4666   struct inode *dp, *ip;) 126.6869 Tj
-0 -189.8672 Td
-(4667 ) 21.8426 Tj
-0 -199.3606 Td
-(4668   if\(argstr\(0, &old\) < 0 || argstr\(1, &new\) < 0\)) 231.5313 Tj
-0 -208.8539 Td
-(4669     return -1;) 83.0018 Tj
-0 -218.3473 Td
-(4670   if\(\(ip = namei\(old\)\) == 0\)) 144.161 Tj
-0 -227.8407 Td
-(4671     return -1;) 83.0018 Tj
-0 -237.334 Td
-(4672   ilock\(ip\);) 74.2647 Tj
-0 -246.8274 Td
-(4673   if\(ip->type == T_DIR\){) 126.6869 Tj
-0 -256.3207 Td
-(4674     iunlockput\(ip\);) 104.8443 Tj
-0 -265.8141 Td
-(4675     return -1;) 83.0018 Tj
-0 -275.3075 Td
-(4676   }) 34.9481 Tj
-0 -284.8008 Td
-(4677   ip->nlink++;) 83.0018 Tj
-0 -294.2942 Td
-(4678   iupdate\(ip\);) 83.0018 Tj
-0 -303.7875 Td
-(4679   iunlock\(ip\);) 83.0018 Tj
-0 -313.2809 Td
-(4680 ) 21.8426 Tj
-0 -322.7743 Td
-(4681   if\(\(dp = nameiparent\(new, name\)\) == 0\)) 196.5831 Tj
-0 -332.2676 Td
-(4682     goto bad;) 78.6333 Tj
-0 -341.761 Td
-(4683   ilock\(dp\);) 74.2647 Tj
-0 -351.2543 Td
-(4684   if\(dp->dev != ip->dev || dirlink\(dp, name, ip->inum\) \
-< 0\){) 283.9534 Tj
-0 -360.7477 Td
-(4685     iunlockput\(dp\);) 104.8443 Tj
-0 -370.2411 Td
-(4686     goto bad;) 78.6333 Tj
-0 -379.7344 Td
-(4687   }) 34.9481 Tj
-0 -389.2278 Td
-(4688   iunlockput\(dp\);) 96.1073 Tj
-0 -398.7211 Td
-(4689   iput\(ip\);) 69.8962 Tj
-0 -408.2145 Td
-(4690   return 0;) 69.8962 Tj
-0 -417.7079 Td
-(4691 ) 21.8426 Tj
-0 -427.2012 Td
-(4692 bad:) 39.3166 Tj
-0 -436.6946 Td
-(4693   ilock\(ip\);) 74.2647 Tj
-0 -446.1879 Td
-(4694   ip->nlink--;) 83.0018 Tj
-0 -455.6813 Td
-(4695   iupdate\(ip\);) 83.0018 Tj
-0 -465.1747 Td
-(4696   iunlockput\(ip\);) 96.1073 Tj
-0 -474.668 Td
-(4697   return -1;) 74.2647 Tj
-0 -484.1614 Td
-(4698 }) 26.2111 Tj
-0 -493.6547 Td
-(4699 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 46) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 54 54
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sysfile.c  Page 4) 174.7406 Tj
-0 -28.4801 Td
-(4700 // Is the directory dp empty except for "." and ".." ?) 257.7424 Tj
-0 -37.9735 Td
-(4701 static int) 65.5277 Tj
-0 -47.4668 Td
-(4702 isdirempty\(struct inode *dp\)) 144.161 Tj
-0 -56.9602 Td
-(4703 {) 26.2111 Tj
-0 -66.4535 Td
-(4704   int off;) 65.5277 Tj
-0 -75.9469 Td
-(4705   struct dirent de;) 104.8443 Tj
-0 -85.4403 Td
-(4706 ) 21.8426 Tj
-0 -94.9336 Td
-(4707   for\(off=2*sizeof\(de\); off<dp->size; off+=sizeof\(de\)\
-\){) 262.1109 Tj
-0 -104.427 Td
-(4708     if\(readi\(dp, \(char*\)&de, off, sizeof\(de\)\) != si\
-zeof\(de\)\)) 283.9534 Tj
-0 -113.9203 Td
-(4709       panic\("isdirempty: readi"\);) 166.0035 Tj
-0 -123.4137 Td
-(4710     if\(de.inum != 0\)) 109.2129 Tj
-0 -132.9071 Td
-(4711       return 0;) 87.3703 Tj
-0 -142.4004 Td
-(4712   }) 34.9481 Tj
-0 -151.8938 Td
-(4713   return 1;) 69.8962 Tj
-0 -161.3871 Td
-(4714 }) 26.2111 Tj
-0 -170.8805 Td
-(4715 ) 21.8426 Tj
-0 -180.3739 Td
-(4716 ) 21.8426 Tj
-0 -189.8672 Td
-(4717 ) 21.8426 Tj
-0 -199.3606 Td
-(4718 ) 21.8426 Tj
-0 -208.8539 Td
-(4719 ) 21.8426 Tj
-0 -218.3473 Td
-(4720 ) 21.8426 Tj
-0 -227.8407 Td
-(4721 ) 21.8426 Tj
-0 -237.334 Td
-(4722 ) 21.8426 Tj
-0 -246.8274 Td
-(4723 ) 21.8426 Tj
-0 -256.3207 Td
-(4724 ) 21.8426 Tj
-0 -265.8141 Td
-(4725 ) 21.8426 Tj
-0 -275.3075 Td
-(4726 ) 21.8426 Tj
-0 -284.8008 Td
-(4727 ) 21.8426 Tj
-0 -294.2942 Td
-(4728 ) 21.8426 Tj
-0 -303.7875 Td
-(4729 ) 21.8426 Tj
-0 -313.2809 Td
-(4730 ) 21.8426 Tj
-0 -322.7743 Td
-(4731 ) 21.8426 Tj
-0 -332.2676 Td
-(4732 ) 21.8426 Tj
-0 -341.761 Td
-(4733 ) 21.8426 Tj
-0 -351.2543 Td
-(4734 ) 21.8426 Tj
-0 -360.7477 Td
-(4735 ) 21.8426 Tj
-0 -370.2411 Td
-(4736 ) 21.8426 Tj
-0 -379.7344 Td
-(4737 ) 21.8426 Tj
-0 -389.2278 Td
-(4738 ) 21.8426 Tj
-0 -398.7211 Td
-(4739 ) 21.8426 Tj
-0 -408.2145 Td
-(4740 ) 21.8426 Tj
-0 -417.7079 Td
-(4741 ) 21.8426 Tj
-0 -427.2012 Td
-(4742 ) 21.8426 Tj
-0 -436.6946 Td
-(4743 ) 21.8426 Tj
-0 -446.1879 Td
-(4744 ) 21.8426 Tj
-0 -455.6813 Td
-(4745 ) 21.8426 Tj
-0 -465.1747 Td
-(4746 ) 21.8426 Tj
-0 -474.668 Td
-(4747 ) 21.8426 Tj
-0 -484.1614 Td
-(4748 ) 21.8426 Tj
-0 -493.6547 Td
-(4749 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 47) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sysfile.c  Page 5) 174.7406 Tj
-0 -28.4801 Td
-(4750 int) 34.9481 Tj
-0 -37.9735 Td
-(4751 sys_unlink\(void\)) 91.7388 Tj
-0 -47.4668 Td
-(4752 {) 26.2111 Tj
-0 -56.9602 Td
-(4753   struct inode *ip, *dp;) 126.6869 Tj
-0 -66.4535 Td
-(4754   struct dirent de;) 104.8443 Tj
-0 -75.9469 Td
-(4755   char name[DIRSIZ], *path;) 139.7925 Tj
-0 -85.4403 Td
-(4756   uint off;) 69.8962 Tj
-0 -94.9336 Td
-(4757 ) 21.8426 Tj
-0 -104.427 Td
-(4758   if\(argstr\(0, &path\) < 0\)) 135.4239 Tj
-0 -113.9203 Td
-(4759     return -1;) 83.0018 Tj
-0 -123.4137 Td
-(4760   if\(\(dp = nameiparent\(path, name\)\) == 0\)) 200.9517 Tj
-0 -132.9071 Td
-(4761     return -1;) 83.0018 Tj
-0 -142.4004 Td
-(4762   ilock\(dp\);) 74.2647 Tj
-0 -151.8938 Td
-(4763 ) 21.8426 Tj
-0 -161.3871 Td
-(4764   // Cannot unlink "." or "..".) 157.2665 Tj
-0 -170.8805 Td
-(4765   if\(namecmp\(name, "."\) == 0 || namecmp\(name, ".."\) =\
-= 0\){) 275.2164 Tj
-0 -180.3739 Td
-(4766     iunlockput\(dp\);) 104.8443 Tj
-0 -189.8672 Td
-(4767     return -1;) 83.0018 Tj
-0 -199.3606 Td
-(4768   }) 34.9481 Tj
-0 -208.8539 Td
-(4769 ) 21.8426 Tj
-0 -218.3473 Td
-(4770   if\(\(ip = dirlookup\(dp, name, &off\)\) == 0\){) 214.0572 Tj
-0 -227.8407 Td
-(4771     iunlockput\(dp\);) 104.8443 Tj
-0 -237.334 Td
-(4772     return -1;) 83.0018 Tj
-0 -246.8274 Td
-(4773   }) 34.9481 Tj
-0 -256.3207 Td
-(4774   ilock\(ip\);) 74.2647 Tj
-0 -265.8141 Td
-(4775 ) 21.8426 Tj
-0 -275.3075 Td
-(4776   if\(ip->nlink < 1\)) 104.8443 Tj
-0 -284.8008 Td
-(4777     panic\("unlink: nlink < 1"\);) 157.2665 Tj
-0 -294.2942 Td
-(4778   if\(ip->type == T_DIR && !isdirempty\(ip\)\){) 209.6887 Tj
-0 -303.7875 Td
-(4779     iunlockput\(ip\);) 104.8443 Tj
-0 -313.2809 Td
-(4780     iunlockput\(dp\);) 104.8443 Tj
-0 -322.7743 Td
-(4781     return -1;) 83.0018 Tj
-0 -332.2676 Td
-(4782   }) 34.9481 Tj
-0 -341.761 Td
-(4783 ) 21.8426 Tj
-0 -351.2543 Td
-(4784   memset\(&de, 0, sizeof\(de\)\);) 148.5295 Tj
-0 -360.7477 Td
-(4785   if\(writei\(dp, \(char*\)&de, off, sizeof\(de\)\) != siz\
-eof\(de\)\)) 279.5849 Tj
-0 -370.2411 Td
-(4786     panic\("unlink: writei"\);) 144.161 Tj
-0 -379.7344 Td
-(4787   if\(ip->type == T_DIR\){) 126.6869 Tj
-0 -389.2278 Td
-(4788     dp->nlink--;) 91.7388 Tj
-0 -398.7211 Td
-(4789     iupdate\(dp\);) 91.7388 Tj
-0 -408.2145 Td
-(4790   }) 34.9481 Tj
-0 -417.7079 Td
-(4791   iunlockput\(dp\);) 96.1073 Tj
-0 -427.2012 Td
-(4792 ) 21.8426 Tj
-0 -436.6946 Td
-(4793   ip->nlink--;) 83.0018 Tj
-0 -446.1879 Td
-(4794   iupdate\(ip\);) 83.0018 Tj
-0 -455.6813 Td
-(4795   iunlockput\(ip\);) 96.1073 Tj
-0 -465.1747 Td
-(4796   return 0;) 69.8962 Tj
-0 -474.668 Td
-(4797 }) 26.2111 Tj
-0 -484.1614 Td
-(4798 ) 21.8426 Tj
-0 -493.6547 Td
-(4799 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 47) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 55 55
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sysfile.c  Page 6) 174.7406 Tj
-0 -28.4801 Td
-(4800 static struct inode*) 109.2129 Tj
-0 -37.9735 Td
-(4801 create\(char *path, short type, short major, short minor\)) 266.4794 Tj
-0 -47.4668 Td
-(4802 {) 26.2111 Tj
-0 -56.9602 Td
-(4803   uint off;) 69.8962 Tj
-0 -66.4535 Td
-(4804   struct inode *ip, *dp;) 126.6869 Tj
-0 -75.9469 Td
-(4805   char name[DIRSIZ];) 109.2129 Tj
-0 -85.4403 Td
-(4806 ) 21.8426 Tj
-0 -94.9336 Td
-(4807   if\(\(dp = nameiparent\(path, name\)\) == 0\)) 200.9517 Tj
-0 -104.427 Td
-(4808     return 0;) 78.6333 Tj
-0 -113.9203 Td
-(4809   ilock\(dp\);) 74.2647 Tj
-0 -123.4137 Td
-(4810 ) 21.8426 Tj
-0 -132.9071 Td
-(4811   if\(\(ip = dirlookup\(dp, name, &off\)\) != 0\){) 214.0572 Tj
-0 -142.4004 Td
-(4812     iunlockput\(dp\);) 104.8443 Tj
-0 -151.8938 Td
-(4813     ilock\(ip\);) 83.0018 Tj
-0 -161.3871 Td
-(4814     if\(type == T_FILE && ip->type == T_FILE\)) 214.0572 Tj
-0 -170.8805 Td
-(4815       return ip;) 91.7388 Tj
-0 -180.3739 Td
-(4816     iunlockput\(ip\);) 104.8443 Tj
-0 -189.8672 Td
-(4817     return 0;) 78.6333 Tj
-0 -199.3606 Td
-(4818   }) 34.9481 Tj
-0 -208.8539 Td
-(4819 ) 21.8426 Tj
-0 -218.3473 Td
-(4820   if\(\(ip = ialloc\(dp->dev, type\)\) == 0\)) 192.2146 Tj
-0 -227.8407 Td
-(4821     panic\("create: ialloc"\);) 144.161 Tj
-0 -237.334 Td
-(4822 ) 21.8426 Tj
-0 -246.8274 Td
-(4823   ilock\(ip\);) 74.2647 Tj
-0 -256.3207 Td
-(4824   ip->major = major;) 109.2129 Tj
-0 -265.8141 Td
-(4825   ip->minor = minor;) 109.2129 Tj
-0 -275.3075 Td
-(4826   ip->nlink = 1;) 91.7388 Tj
-0 -284.8008 Td
-(4827   iupdate\(ip\);) 83.0018 Tj
-0 -294.2942 Td
-(4828 ) 21.8426 Tj
-0 -303.7875 Td
-(4829   if\(type == T_DIR\){  // Create . and .. entries.) 235.8998 Tj
-0 -313.2809 Td
-(4830     dp->nlink++;  // for "..") 148.5295 Tj
-0 -322.7743 Td
-(4831     iupdate\(dp\);) 91.7388 Tj
-0 -332.2676 Td
-(4832     // No ip->nlink++ for ".": avoid cyclic ref count.) 257.7424 Tj
-0 -341.761 Td
-(4833     if\(dirlink\(ip, ".", ip->inum\) < 0 || dirlink\(ip, "\
-..", dp->inum\) < 0\)) 340.7441 Tj
-0 -351.2543 Td
-(4834       panic\("create dots"\);) 139.7925 Tj
-0 -360.7477 Td
-(4835   }) 34.9481 Tj
-0 -370.2411 Td
-(4836 ) 21.8426 Tj
-0 -379.7344 Td
-(4837   if\(dirlink\(dp, name, ip->inum\) < 0\)) 183.4776 Tj
-0 -389.2278 Td
-(4838     panic\("create: dirlink"\);) 148.5295 Tj
-0 -398.7211 Td
-(4839 ) 21.8426 Tj
-0 -408.2145 Td
-(4840   iunlockput\(dp\);) 96.1073 Tj
-0 -417.7079 Td
-(4841   return ip;) 74.2647 Tj
-0 -427.2012 Td
-(4842 }) 26.2111 Tj
-0 -436.6946 Td
-(4843 ) 21.8426 Tj
-0 -446.1879 Td
-(4844 ) 21.8426 Tj
-0 -455.6813 Td
-(4845 ) 21.8426 Tj
-0 -465.1747 Td
-(4846 ) 21.8426 Tj
-0 -474.668 Td
-(4847 ) 21.8426 Tj
-0 -484.1614 Td
-(4848 ) 21.8426 Tj
-0 -493.6547 Td
-(4849 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 48) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sysfile.c  Page 7) 174.7406 Tj
-0 -28.4801 Td
-(4850 int) 34.9481 Tj
-0 -37.9735 Td
-(4851 sys_open\(void\)) 83.0018 Tj
-0 -47.4668 Td
-(4852 {) 26.2111 Tj
-0 -56.9602 Td
-(4853   char *path;) 78.6333 Tj
-0 -66.4535 Td
-(4854   int fd, omode;) 91.7388 Tj
-0 -75.9469 Td
-(4855   struct file *f;) 96.1073 Tj
-0 -85.4403 Td
-(4856   struct inode *ip;) 104.8443 Tj
-0 -94.9336 Td
-(4857 ) 21.8426 Tj
-0 -104.427 Td
-(4858   if\(argstr\(0, &path\) < 0 || argint\(1, &omode\) < 0\)) 244.6368 Tj
-0 -113.9203 Td
-(4859     return -1;) 83.0018 Tj
-0 -123.4137 Td
-(4860 ) 21.8426 Tj
-0 -132.9071 Td
-(4861   if\(omode & O_CREATE\){) 122.3184 Tj
-0 -142.4004 Td
-(4862     if\(\(ip = create\(path, T_FILE, 0, 0\)\) == 0\)) 222.7942 Tj
-0 -151.8938 Td
-(4863       return -1;) 91.7388 Tj
-0 -161.3871 Td
-(4864   } else {) 65.5277 Tj
-0 -170.8805 Td
-(4865     if\(\(ip = namei\(path\)\) == 0\)) 157.2665 Tj
-0 -180.3739 Td
-(4866       return -1;) 91.7388 Tj
-0 -189.8672 Td
-(4867     ilock\(ip\);) 83.0018 Tj
-0 -199.3606 Td
-(4868     if\(ip->type == T_DIR && omode != O_RDONLY\){) 227.1628 Tj
-0 -208.8539 Td
-(4869       iunlockput\(ip\);) 113.5814 Tj
-0 -218.3473 Td
-(4870       return -1;) 91.7388 Tj
-0 -227.8407 Td
-(4871     }) 43.6851 Tj
-0 -237.334 Td
-(4872   }) 34.9481 Tj
-0 -246.8274 Td
-(4873 ) 21.8426 Tj
-0 -256.3207 Td
-(4874   if\(\(f = filealloc\(\)\) == 0 || \(fd = fdalloc\(f\)\) \
-< 0\){) 257.7424 Tj
-0 -265.8141 Td
-(4875     if\(f\)) 61.1592 Tj
-0 -275.3075 Td
-(4876       fileclose\(f\);) 104.8443 Tj
-0 -284.8008 Td
-(4877     iunlockput\(ip\);) 104.8443 Tj
-0 -294.2942 Td
-(4878     return -1;) 83.0018 Tj
-0 -303.7875 Td
-(4879   }) 34.9481 Tj
-0 -313.2809 Td
-(4880   iunlock\(ip\);) 83.0018 Tj
-0 -322.7743 Td
-(4881 ) 21.8426 Tj
-0 -332.2676 Td
-(4882   f->type = FD_INODE;) 113.5814 Tj
-0 -341.761 Td
-(4883   f->ip = ip;) 78.6333 Tj
-0 -351.2543 Td
-(4884   f->off = 0;) 78.6333 Tj
-0 -360.7477 Td
-(4885   f->readable = !\(omode & O_WRONLY\);) 179.1091 Tj
-0 -370.2411 Td
-(4886   f->writable = \(omode & O_WRONLY\) || \(omode & O_RDWR\)\
-;) 262.1109 Tj
-0 -379.7344 Td
-(4887 ) 21.8426 Tj
-0 -389.2278 Td
-(4888   return fd;) 74.2647 Tj
-0 -398.7211 Td
-(4889 }) 26.2111 Tj
-0 -408.2145 Td
-(4890 ) 21.8426 Tj
-0 -417.7079 Td
-(4891 ) 21.8426 Tj
-0 -427.2012 Td
-(4892 ) 21.8426 Tj
-0 -436.6946 Td
-(4893 ) 21.8426 Tj
-0 -446.1879 Td
-(4894 ) 21.8426 Tj
-0 -455.6813 Td
-(4895 ) 21.8426 Tj
-0 -465.1747 Td
-(4896 ) 21.8426 Tj
-0 -474.668 Td
-(4897 ) 21.8426 Tj
-0 -484.1614 Td
-(4898 ) 21.8426 Tj
-0 -493.6547 Td
-(4899 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 48) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 56 56
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sysfile.c  Page 8) 174.7406 Tj
-0 -28.4801 Td
-(4900 int) 34.9481 Tj
-0 -37.9735 Td
-(4901 sys_mkdir\(void\)) 87.3703 Tj
-0 -47.4668 Td
-(4902 {) 26.2111 Tj
-0 -56.9602 Td
-(4903   char *path;) 78.6333 Tj
-0 -66.4535 Td
-(4904   struct inode *ip;) 104.8443 Tj
-0 -75.9469 Td
-(4905 ) 21.8426 Tj
-0 -85.4403 Td
-(4906   if\(argstr\(0, &path\) < 0 || \(ip = create\(path, T_DIR\
-, 0, 0\)\) == 0\)) 314.533 Tj
-0 -94.9336 Td
-(4907     return -1;) 83.0018 Tj
-0 -104.427 Td
-(4908   iunlockput\(ip\);) 96.1073 Tj
-0 -113.9203 Td
-(4909   return 0;) 69.8962 Tj
-0 -123.4137 Td
-(4910 }) 26.2111 Tj
-0 -132.9071 Td
-(4911 ) 21.8426 Tj
-0 -142.4004 Td
-(4912 int) 34.9481 Tj
-0 -151.8938 Td
-(4913 sys_mknod\(void\)) 87.3703 Tj
-0 -161.3871 Td
-(4914 {) 26.2111 Tj
-0 -170.8805 Td
-(4915   struct inode *ip;) 104.8443 Tj
-0 -180.3739 Td
-(4916   char *path;) 78.6333 Tj
-0 -189.8672 Td
-(4917   int len;) 65.5277 Tj
-0 -199.3606 Td
-(4918   int major, minor;) 104.8443 Tj
-0 -208.8539 Td
-(4919 ) 21.8426 Tj
-0 -218.3473 Td
-(4920   if\(\(len=argstr\(0, &path\)\) < 0 ||) 170.3721 Tj
-0 -227.8407 Td
-(4921      argint\(1, &major\) < 0 ||) 148.5295 Tj
-0 -237.334 Td
-(4922      argint\(2, &minor\) < 0 ||) 148.5295 Tj
-0 -246.8274 Td
-(4923      \(ip = create\(path, T_DEV, major, minor\)\) == 0\)) 244.6368 Tj
-0 -256.3207 Td
-(4924     return -1;) 83.0018 Tj
-0 -265.8141 Td
-(4925   iunlockput\(ip\);) 96.1073 Tj
-0 -275.3075 Td
-(4926   return 0;) 69.8962 Tj
-0 -284.8008 Td
-(4927 }) 26.2111 Tj
-0 -294.2942 Td
-(4928 ) 21.8426 Tj
-0 -303.7875 Td
-(4929 int) 34.9481 Tj
-0 -313.2809 Td
-(4930 sys_chdir\(void\)) 87.3703 Tj
-0 -322.7743 Td
-(4931 {) 26.2111 Tj
-0 -332.2676 Td
-(4932   char *path;) 78.6333 Tj
-0 -341.761 Td
-(4933   struct inode *ip;) 104.8443 Tj
-0 -351.2543 Td
-(4934 ) 21.8426 Tj
-0 -360.7477 Td
-(4935   if\(argstr\(0, &path\) < 0 || \(ip = namei\(path\)\) == \
-0\)) 253.3738 Tj
-0 -370.2411 Td
-(4936     return -1;) 83.0018 Tj
-0 -379.7344 Td
-(4937   ilock\(ip\);) 74.2647 Tj
-0 -389.2278 Td
-(4938   if\(ip->type != T_DIR\){) 126.6869 Tj
-0 -398.7211 Td
-(4939     iunlockput\(ip\);) 104.8443 Tj
-0 -408.2145 Td
-(4940     return -1;) 83.0018 Tj
-0 -417.7079 Td
-(4941   }) 34.9481 Tj
-0 -427.2012 Td
-(4942   iunlock\(ip\);) 83.0018 Tj
-0 -436.6946 Td
-(4943   iput\(proc->cwd\);) 100.4758 Tj
-0 -446.1879 Td
-(4944   proc->cwd = ip;) 96.1073 Tj
-0 -455.6813 Td
-(4945   return 0;) 69.8962 Tj
-0 -465.1747 Td
-(4946 }) 26.2111 Tj
-0 -474.668 Td
-(4947 ) 21.8426 Tj
-0 -484.1614 Td
-(4948 ) 21.8426 Tj
-0 -493.6547 Td
-(4949 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 49) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sysfile.c  Page 9) 174.7406 Tj
-0 -28.4801 Td
-(4950 int) 34.9481 Tj
-0 -37.9735 Td
-(4951 sys_exec\(void\)) 83.0018 Tj
-0 -47.4668 Td
-(4952 {) 26.2111 Tj
-0 -56.9602 Td
-(4953   char *path, *argv[20];) 126.6869 Tj
-0 -66.4535 Td
-(4954   int i;) 56.7907 Tj
-0 -75.9469 Td
-(4955   uint uargv, uarg;) 104.8443 Tj
-0 -85.4403 Td
-(4956 ) 21.8426 Tj
-0 -94.9336 Td
-(4957   if\(argstr\(0, &path\) < 0 || argint\(1, \(int*\)&uargv\)\
- < 0\)) 270.8479 Tj
-0 -104.427 Td
-(4958     return -1;) 83.0018 Tj
-0 -113.9203 Td
-(4959   memset\(argv, 0, sizeof\(argv\)\);) 161.635 Tj
-0 -123.4137 Td
-(4960   for\(i=0;; i++\){) 96.1073 Tj
-0 -132.9071 Td
-(4961     if\(i >= NELEM\(argv\)\)) 126.6869 Tj
-0 -142.4004 Td
-(4962       return -1;) 91.7388 Tj
-0 -151.8938 Td
-(4963     if\(fetchint\(proc, uargv+4*i, \(int*\)&uarg\) < 0\)) 240.2683 Tj
-0 -161.3871 Td
-(4964       return -1;) 91.7388 Tj
-0 -170.8805 Td
-(4965     if\(uarg == 0\){) 100.4758 Tj
-0 -180.3739 Td
-(4966       argv[i] = 0;) 100.4758 Tj
-0 -189.8672 Td
-(4967       break;) 74.2647 Tj
-0 -199.3606 Td
-(4968     }) 43.6851 Tj
-0 -208.8539 Td
-(4969     if\(fetchstr\(proc, uarg, &argv[i]\) < 0\)) 205.3202 Tj
-0 -218.3473 Td
-(4970       return -1;) 91.7388 Tj
-0 -227.8407 Td
-(4971   }) 34.9481 Tj
-0 -237.334 Td
-(4972   return exec\(path, argv\);) 135.4239 Tj
-0 -246.8274 Td
-(4973 }) 26.2111 Tj
-0 -256.3207 Td
-(4974 ) 21.8426 Tj
-0 -265.8141 Td
-(4975 int) 34.9481 Tj
-0 -275.3075 Td
-(4976 sys_pipe\(void\)) 83.0018 Tj
-0 -284.8008 Td
-(4977 {) 26.2111 Tj
-0 -294.2942 Td
-(4978   int *fd;) 65.5277 Tj
-0 -303.7875 Td
-(4979   struct file *rf, *wf;) 122.3184 Tj
-0 -313.2809 Td
-(4980   int fd0, fd1;) 87.3703 Tj
-0 -322.7743 Td
-(4981 ) 21.8426 Tj
-0 -332.2676 Td
-(4982   if\(argptr\(0, \(void*\)&fd, 2*sizeof\(fd[0]\)\) < 0\)) 231.5313 Tj
-0 -341.761 Td
-(4983     return -1;) 83.0018 Tj
-0 -351.2543 Td
-(4984   if\(pipealloc\(&rf, &wf\) < 0\)) 148.5295 Tj
-0 -360.7477 Td
-(4985     return -1;) 83.0018 Tj
-0 -370.2411 Td
-(4986   fd0 = -1;) 69.8962 Tj
-0 -379.7344 Td
-(4987   if\(\(fd0 = fdalloc\(rf\)\) < 0 || \(fd1 = fdalloc\(wf\)\
-\) < 0\){) 270.8479 Tj
-0 -389.2278 Td
-(4988     if\(fd0 >= 0\)) 91.7388 Tj
-0 -398.7211 Td
-(4989       proc->ofile[fd0] = 0;) 139.7925 Tj
-0 -408.2145 Td
-(4990     fileclose\(rf\);) 100.4758 Tj
-0 -417.7079 Td
-(4991     fileclose\(wf\);) 100.4758 Tj
-0 -427.2012 Td
-(4992     return -1;) 83.0018 Tj
-0 -436.6946 Td
-(4993   }) 34.9481 Tj
-0 -446.1879 Td
-(4994   fd[0] = fd0;) 83.0018 Tj
-0 -455.6813 Td
-(4995   fd[1] = fd1;) 83.0018 Tj
-0 -465.1747 Td
-(4996   return 0;) 69.8962 Tj
-0 -474.668 Td
-(4997 }) 26.2111 Tj
-0 -484.1614 Td
-(4998 ) 21.8426 Tj
-0 -493.6547 Td
-(4999 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 49) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 57 57
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/exec.c  Page 1) 161.635 Tj
-0 -28.4801 Td
-(5000 #include "types.h") 100.4758 Tj
-0 -37.9735 Td
-(5001 #include "param.h") 100.4758 Tj
-0 -47.4668 Td
-(5002 #include "mmu.h") 91.7388 Tj
-0 -56.9602 Td
-(5003 #include "proc.h") 96.1073 Tj
-0 -66.4535 Td
-(5004 #include "defs.h") 96.1073 Tj
-0 -75.9469 Td
-(5005 #include "x86.h") 91.7388 Tj
-0 -85.4403 Td
-(5006 #include "elf.h") 91.7388 Tj
-0 -94.9336 Td
-(5007 ) 21.8426 Tj
-0 -104.427 Td
-(5008 int) 34.9481 Tj
-0 -113.9203 Td
-(5009 exec\(char *path, char **argv\)) 148.5295 Tj
-0 -123.4137 Td
-(5010 {) 26.2111 Tj
-0 -132.9071 Td
-(5011   char *mem, *s, *last;) 122.3184 Tj
-0 -142.4004 Td
-(5012   int i, argc, arglen, len, off;) 161.635 Tj
-0 -151.8938 Td
-(5013   uint sz, sp, argp;) 109.2129 Tj
-0 -161.3871 Td
-(5014   struct elfhdr elf;) 109.2129 Tj
-0 -170.8805 Td
-(5015   struct inode *ip;) 104.8443 Tj
-0 -180.3739 Td
-(5016   struct proghdr ph;) 109.2129 Tj
-0 -189.8672 Td
-(5017 ) 21.8426 Tj
-0 -199.3606 Td
-(5018   mem = 0;) 65.5277 Tj
-0 -208.8539 Td
-(5019   sz = 0;) 61.1592 Tj
-0 -218.3473 Td
-(5020 ) 21.8426 Tj
-0 -227.8407 Td
-(5021   if\(\(ip = namei\(path\)\) == 0\)) 148.5295 Tj
-0 -237.334 Td
-(5022     return -1;) 83.0018 Tj
-0 -246.8274 Td
-(5023   ilock\(ip\);) 74.2647 Tj
-0 -256.3207 Td
-(5024 ) 21.8426 Tj
-0 -265.8141 Td
-(5025   // Check ELF header) 113.5814 Tj
-0 -275.3075 Td
-(5026   if\(readi\(ip, \(char*\)&elf, 0, sizeof\(elf\)\) < sizeo\
-f\(elf\)\)) 275.2164 Tj
-0 -284.8008 Td
-(5027     goto bad;) 78.6333 Tj
-0 -294.2942 Td
-(5028   if\(elf.magic != ELF_MAGIC\)) 144.161 Tj
-0 -303.7875 Td
-(5029     goto bad;) 78.6333 Tj
-0 -313.2809 Td
-(5030 ) 21.8426 Tj
-0 -322.7743 Td
-(5031   // Compute memory size of new process.) 196.5831 Tj
-0 -332.2676 Td
-(5032   // Program segments.) 117.9499 Tj
-0 -341.761 Td
-(5033   for\(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof\(\
-ph\)\){) 288.322 Tj
-0 -351.2543 Td
-(5034     if\(readi\(ip, \(char*\)&ph, off, sizeof\(ph\)\) != si\
-zeof\(ph\)\)) 283.9534 Tj
-0 -360.7477 Td
-(5035       goto bad;) 87.3703 Tj
-0 -370.2411 Td
-(5036     if\(ph.type != ELF_PROG_LOAD\)) 161.635 Tj
-0 -379.7344 Td
-(5037       continue;) 87.3703 Tj
-0 -389.2278 Td
-(5038     if\(ph.memsz < ph.filesz\)) 144.161 Tj
-0 -398.7211 Td
-(5039       goto bad;) 87.3703 Tj
-0 -408.2145 Td
-(5040     sz += ph.memsz;) 104.8443 Tj
-0 -417.7079 Td
-(5041   }) 34.9481 Tj
-0 -427.2012 Td
-(5042 ) 21.8426 Tj
-0 -436.6946 Td
-(5043   // Arguments.) 87.3703 Tj
-0 -446.1879 Td
-(5044   arglen = 0;) 78.6333 Tj
-0 -455.6813 Td
-(5045   for\(argc=0; argv[argc]; argc++\)) 166.0035 Tj
-0 -465.1747 Td
-(5046     arglen += strlen\(argv[argc]\) + 1;) 183.4776 Tj
-0 -474.668 Td
-(5047   arglen = \(arglen+3\) & ~3;) 139.7925 Tj
-0 -484.1614 Td
-(5048   sz += arglen;) 87.3703 Tj
-0 -493.6547 Td
-(5049   sz += 4*\(argc+1\);  // argv data) 166.0035 Tj
-0 -522.1348 Td
-(Sheet 50) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/exec.c  Page 2) 161.635 Tj
-0 -28.4801 Td
-(5050   sz += 4;  // argv) 104.8443 Tj
-0 -37.9735 Td
-(5051   sz += 4;  // argc) 104.8443 Tj
-0 -47.4668 Td
-(5052 ) 21.8426 Tj
-0 -56.9602 Td
-(5053   // Stack.) 69.8962 Tj
-0 -66.4535 Td
-(5054   sz += PAGE;) 78.6333 Tj
-0 -75.9469 Td
-(5055 ) 21.8426 Tj
-0 -85.4403 Td
-(5056   // Allocate program memory.) 148.5295 Tj
-0 -94.9336 Td
-(5057   sz = \(sz+PAGE-1\) & ~\(PAGE-1\);) 157.2665 Tj
-0 -104.427 Td
-(5058   mem = kalloc\(sz\);) 104.8443 Tj
-0 -113.9203 Td
-(5059   if\(mem == 0\)) 83.0018 Tj
-0 -123.4137 Td
-(5060     goto bad;) 78.6333 Tj
-0 -132.9071 Td
-(5061   memset\(mem, 0, sz\);) 113.5814 Tj
-0 -142.4004 Td
-(5062 ) 21.8426 Tj
-0 -151.8938 Td
-(5063   // Load program into memory.) 152.898 Tj
-0 -161.3871 Td
-(5064   for\(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof\(\
-ph\)\){) 288.322 Tj
-0 -170.8805 Td
-(5065     if\(readi\(ip, \(char*\)&ph, off, sizeof\(ph\)\) != si\
-zeof\(ph\)\)) 283.9534 Tj
-0 -180.3739 Td
-(5066       goto bad;) 87.3703 Tj
-0 -189.8672 Td
-(5067     if\(ph.type != ELF_PROG_LOAD\)) 161.635 Tj
-0 -199.3606 Td
-(5068       continue;) 87.3703 Tj
-0 -208.8539 Td
-(5069     if\(ph.va + ph.memsz < ph.va || ph.va + ph.memsz > sz\)) 270.8479 Tj
-0 -218.3473 Td
-(5070       goto bad;) 87.3703 Tj
-0 -227.8407 Td
-(5071     if\(ph.memsz < ph.filesz\)) 144.161 Tj
-0 -237.334 Td
-(5072       goto bad;) 87.3703 Tj
-0 -246.8274 Td
-(5073     if\(readi\(ip, mem + ph.va, ph.offset, ph.filesz\) != \
-ph.filesz\)) 305.796 Tj
-0 -256.3207 Td
-(5074       goto bad;) 87.3703 Tj
-0 -265.8141 Td
-(5075     memset\(mem + ph.va + ph.filesz, 0, ph.memsz - ph.file\
-sz\);) 288.322 Tj
-0 -275.3075 Td
-(5076   }) 34.9481 Tj
-0 -284.8008 Td
-(5077   iunlockput\(ip\);) 96.1073 Tj
-0 -294.2942 Td
-(5078 ) 21.8426 Tj
-0 -303.7875 Td
-(5079   // Initialize stack.) 117.9499 Tj
-0 -313.2809 Td
-(5080   sp = sz;) 65.5277 Tj
-0 -322.7743 Td
-(5081   argp = sz - arglen - 4*\(argc+1\);) 170.3721 Tj
-0 -332.2676 Td
-(5082 ) 21.8426 Tj
-0 -341.761 Td
-(5083   // Copy argv strings and pointers to stack.) 218.4257 Tj
-0 -351.2543 Td
-(5084   *\(uint*\)\(mem+argp + 4*argc\) = 0;  // argv[argc]) 235.8998 Tj
-0 -360.7477 Td
-(5085   for\(i=argc-1; i>=0; i--\){) 139.7925 Tj
-0 -370.2411 Td
-(5086     len = strlen\(argv[i]\) + 1;) 152.898 Tj
-0 -379.7344 Td
-(5087     sp -= len;) 83.0018 Tj
-0 -389.2278 Td
-(5088     memmove\(mem+sp, argv[i], len\);) 170.3721 Tj
-0 -398.7211 Td
-(5089     *\(uint*\)\(mem+argp + 4*i\) = sp;  // argv[i]) 222.7942 Tj
-0 -408.2145 Td
-(5090   }) 34.9481 Tj
-0 -417.7079 Td
-(5091 ) 21.8426 Tj
-0 -427.2012 Td
-(5092   // Stack frame for main\(argc, argv\), below arguments.) 262.1109 Tj
-0 -436.6946 Td
-(5093   sp = argp;) 74.2647 Tj
-0 -446.1879 Td
-(5094   sp -= 4;) 65.5277 Tj
-0 -455.6813 Td
-(5095   *\(uint*\)\(mem+sp\) = argp;) 135.4239 Tj
-0 -465.1747 Td
-(5096   sp -= 4;) 65.5277 Tj
-0 -474.668 Td
-(5097   *\(uint*\)\(mem+sp\) = argc;) 135.4239 Tj
-0 -484.1614 Td
-(5098   sp -= 4;) 65.5277 Tj
-0 -493.6547 Td
-(5099   *\(uint*\)\(mem+sp\) = 0xffffffff;   // fake return pc) 249.0053 Tj
-0 -522.1348 Td
-(Sheet 50) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 58 58
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/exec.c  Page 3) 161.635 Tj
-0 -28.4801 Td
-(5100   // Save program name for debugging.) 183.4776 Tj
-0 -37.9735 Td
-(5101   for\(last=s=path; *s; s++\)) 139.7925 Tj
-0 -47.4668 Td
-(5102     if\(*s == '/'\)) 96.1073 Tj
-0 -56.9602 Td
-(5103       last = s+1;) 96.1073 Tj
-0 -66.4535 Td
-(5104   safestrcpy\(proc->name, last, sizeof\(proc->name\)\);) 244.6368 Tj
-0 -75.9469 Td
-(5105 ) 21.8426 Tj
-0 -85.4403 Td
-(5106   // Commit to the new image.) 148.5295 Tj
-0 -94.9336 Td
-(5107   kfree\(proc->mem, proc->sz\);) 148.5295 Tj
-0 -104.427 Td
-(5108   proc->mem = mem;) 100.4758 Tj
-0 -113.9203 Td
-(5109   proc->sz = sz;) 91.7388 Tj
-0 -123.4137 Td
-(5110   proc->tf->eip = elf.entry;  // main) 183.4776 Tj
-0 -132.9071 Td
-(5111   proc->tf->esp = sp;) 113.5814 Tj
-0 -142.4004 Td
-(5112   usegment\(\);) 78.6333 Tj
-0 -151.8938 Td
-(5113   return 0;) 69.8962 Tj
-0 -161.3871 Td
-(5114 ) 21.8426 Tj
-0 -170.8805 Td
-(5115  bad:) 43.6851 Tj
-0 -180.3739 Td
-(5116   if\(mem\)) 61.1592 Tj
-0 -189.8672 Td
-(5117     kfree\(mem, sz\);) 104.8443 Tj
-0 -199.3606 Td
-(5118   iunlockput\(ip\);) 96.1073 Tj
-0 -208.8539 Td
-(5119   return -1;) 74.2647 Tj
-0 -218.3473 Td
-(5120 }) 26.2111 Tj
-0 -227.8407 Td
-(5121 ) 21.8426 Tj
-0 -237.334 Td
-(5122 ) 21.8426 Tj
-0 -246.8274 Td
-(5123 ) 21.8426 Tj
-0 -256.3207 Td
-(5124 ) 21.8426 Tj
-0 -265.8141 Td
-(5125 ) 21.8426 Tj
-0 -275.3075 Td
-(5126 ) 21.8426 Tj
-0 -284.8008 Td
-(5127 ) 21.8426 Tj
-0 -294.2942 Td
-(5128 ) 21.8426 Tj
-0 -303.7875 Td
-(5129 ) 21.8426 Tj
-0 -313.2809 Td
-(5130 ) 21.8426 Tj
-0 -322.7743 Td
-(5131 ) 21.8426 Tj
-0 -332.2676 Td
-(5132 ) 21.8426 Tj
-0 -341.761 Td
-(5133 ) 21.8426 Tj
-0 -351.2543 Td
-(5134 ) 21.8426 Tj
-0 -360.7477 Td
-(5135 ) 21.8426 Tj
-0 -370.2411 Td
-(5136 ) 21.8426 Tj
-0 -379.7344 Td
-(5137 ) 21.8426 Tj
-0 -389.2278 Td
-(5138 ) 21.8426 Tj
-0 -398.7211 Td
-(5139 ) 21.8426 Tj
-0 -408.2145 Td
-(5140 ) 21.8426 Tj
-0 -417.7079 Td
-(5141 ) 21.8426 Tj
-0 -427.2012 Td
-(5142 ) 21.8426 Tj
-0 -436.6946 Td
-(5143 ) 21.8426 Tj
-0 -446.1879 Td
-(5144 ) 21.8426 Tj
-0 -455.6813 Td
-(5145 ) 21.8426 Tj
-0 -465.1747 Td
-(5146 ) 21.8426 Tj
-0 -474.668 Td
-(5147 ) 21.8426 Tj
-0 -484.1614 Td
-(5148 ) 21.8426 Tj
-0 -493.6547 Td
-(5149 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 51) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/pipe.c  Page 1) 161.635 Tj
-0 -28.4801 Td
-(5150 #include "types.h") 100.4758 Tj
-0 -37.9735 Td
-(5151 #include "defs.h") 96.1073 Tj
-0 -47.4668 Td
-(5152 #include "param.h") 100.4758 Tj
-0 -56.9602 Td
-(5153 #include "mmu.h") 91.7388 Tj
-0 -66.4535 Td
-(5154 #include "proc.h") 96.1073 Tj
-0 -75.9469 Td
-(5155 #include "fs.h") 87.3703 Tj
-0 -85.4403 Td
-(5156 #include "file.h") 96.1073 Tj
-0 -94.9336 Td
-(5157 #include "spinlock.h") 113.5814 Tj
-0 -104.427 Td
-(5158 ) 21.8426 Tj
-0 -113.9203 Td
-(5159 #define PIPESIZE 512) 109.2129 Tj
-0 -123.4137 Td
-(5160 ) 21.8426 Tj
-0 -132.9071 Td
-(5161 struct pipe {) 78.6333 Tj
-0 -142.4004 Td
-(5162   struct spinlock lock;) 122.3184 Tj
-0 -151.8938 Td
-(5163   char data[PIPESIZE];) 117.9499 Tj
-0 -161.3871 Td
-(5164   uint nread;     // number of bytes read) 200.9517 Tj
-0 -170.8805 Td
-(5165   uint nwrite;    // number of bytes written) 214.0572 Tj
-0 -180.3739 Td
-(5166   int readopen;   // read fd is still open) 205.3202 Tj
-0 -189.8672 Td
-(5167   int writeopen;  // write fd is still open) 209.6887 Tj
-0 -199.3606 Td
-(5168 };) 30.5796 Tj
-0 -208.8539 Td
-(5169 ) 21.8426 Tj
-0 -218.3473 Td
-(5170 int) 34.9481 Tj
-0 -227.8407 Td
-(5171 pipealloc\(struct file **f0, struct file **f1\)) 218.4257 Tj
-0 -237.334 Td
-(5172 {) 26.2111 Tj
-0 -246.8274 Td
-(5173   struct pipe *p;) 96.1073 Tj
-0 -256.3207 Td
-(5174 ) 21.8426 Tj
-0 -265.8141 Td
-(5175   p = 0;) 56.7907 Tj
-0 -275.3075 Td
-(5176   *f0 = *f1 = 0;) 91.7388 Tj
-0 -284.8008 Td
-(5177   if\(\(*f0 = filealloc\(\)\) == 0 || \(*f1 = filealloc\(\)\
-\) == 0\)) 275.2164 Tj
-0 -294.2942 Td
-(5178     goto bad;) 78.6333 Tj
-0 -303.7875 Td
-(5179   if\(\(p = \(struct pipe*\)kalloc\(PAGE\)\) == 0\)) 209.6887 Tj
-0 -313.2809 Td
-(5180     goto bad;) 78.6333 Tj
-0 -322.7743 Td
-(5181   p->readopen = 1;) 100.4758 Tj
-0 -332.2676 Td
-(5182   p->writeopen = 1;) 104.8443 Tj
-0 -341.761 Td
-(5183   p->nwrite = 0;) 91.7388 Tj
-0 -351.2543 Td
-(5184   p->nread = 0;) 87.3703 Tj
-0 -360.7477 Td
-(5185   initlock\(&p->lock, "pipe"\);) 148.5295 Tj
-0 -370.2411 Td
-(5186   \(*f0\)->type = FD_PIPE;) 126.6869 Tj
-0 -379.7344 Td
-(5187   \(*f0\)->readable = 1;) 117.9499 Tj
-0 -389.2278 Td
-(5188   \(*f0\)->writable = 0;) 117.9499 Tj
-0 -398.7211 Td
-(5189   \(*f0\)->pipe = p;) 100.4758 Tj
-0 -408.2145 Td
-(5190   \(*f1\)->type = FD_PIPE;) 126.6869 Tj
-0 -417.7079 Td
-(5191   \(*f1\)->readable = 0;) 117.9499 Tj
-0 -427.2012 Td
-(5192   \(*f1\)->writable = 1;) 117.9499 Tj
-0 -436.6946 Td
-(5193   \(*f1\)->pipe = p;) 100.4758 Tj
-0 -446.1879 Td
-(5194   return 0;) 69.8962 Tj
-0 -455.6813 Td
-(5195 ) 21.8426 Tj
-0 -465.1747 Td
-(5196 ) 21.8426 Tj
-0 -474.668 Td
-(5197 ) 21.8426 Tj
-0 -484.1614 Td
-(5198 ) 21.8426 Tj
-0 -493.6547 Td
-(5199 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 51) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 59 59
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/pipe.c  Page 2) 161.635 Tj
-0 -28.4801 Td
-(5200  bad:) 43.6851 Tj
-0 -37.9735 Td
-(5201   if\(p\)) 52.4222 Tj
-0 -47.4668 Td
-(5202     kfree\(\(char*\)p, PAGE\);) 135.4239 Tj
-0 -56.9602 Td
-(5203   if\(*f0\)) 61.1592 Tj
-0 -66.4535 Td
-(5204     fileclose\(*f0\);) 104.8443 Tj
-0 -75.9469 Td
-(5205   if\(*f1\)) 61.1592 Tj
-0 -85.4403 Td
-(5206     fileclose\(*f1\);) 104.8443 Tj
-0 -94.9336 Td
-(5207   return -1;) 74.2647 Tj
-0 -104.427 Td
-(5208 }) 26.2111 Tj
-0 -113.9203 Td
-(5209 ) 21.8426 Tj
-0 -123.4137 Td
-(5210 void) 39.3166 Tj
-0 -132.9071 Td
-(5211 pipeclose\(struct pipe *p, int writable\)) 192.2146 Tj
-0 -142.4004 Td
-(5212 {) 26.2111 Tj
-0 -151.8938 Td
-(5213   acquire\(&p->lock\);) 109.2129 Tj
-0 -161.3871 Td
-(5214   if\(writable\){) 87.3703 Tj
-0 -170.8805 Td
-(5215     p->writeopen = 0;) 113.5814 Tj
-0 -180.3739 Td
-(5216     wakeup\(&p->nread\);) 117.9499 Tj
-0 -189.8672 Td
-(5217   } else {) 65.5277 Tj
-0 -199.3606 Td
-(5218     p->readopen = 0;) 109.2129 Tj
-0 -208.8539 Td
-(5219     wakeup\(&p->nwrite\);) 122.3184 Tj
-0 -218.3473 Td
-(5220   }) 34.9481 Tj
-0 -227.8407 Td
-(5221   if\(p->readopen == 0 && p->writeopen == 0\) {) 218.4257 Tj
-0 -237.334 Td
-(5222     release\(&p->lock\);) 117.9499 Tj
-0 -246.8274 Td
-(5223     kfree\(\(char*\)p, PAGE\);) 135.4239 Tj
-0 -256.3207 Td
-(5224   } else) 56.7907 Tj
-0 -265.8141 Td
-(5225     release\(&p->lock\);) 117.9499 Tj
-0 -275.3075 Td
-(5226 }) 26.2111 Tj
-0 -284.8008 Td
-(5227 ) 21.8426 Tj
-0 -294.2942 Td
-(5228 ) 21.8426 Tj
-0 -303.7875 Td
-(5229 int) 34.9481 Tj
-0 -313.2809 Td
-(5230 pipewrite\(struct pipe *p, char *addr, int n\)) 214.0572 Tj
-0 -322.7743 Td
-(5231 {) 26.2111 Tj
-0 -332.2676 Td
-(5232   int i;) 56.7907 Tj
-0 -341.761 Td
-(5233 ) 21.8426 Tj
-0 -351.2543 Td
-(5234   acquire\(&p->lock\);) 109.2129 Tj
-0 -360.7477 Td
-(5235   for\(i = 0; i < n; i++\){) 131.0554 Tj
-0 -370.2411 Td
-(5236     while\(p->nwrite == p->nread + PIPESIZE\) {  ) 227.1628 Tj
-0 -379.7344 Td
-(5237       if\(p->readopen == 0 || proc->killed\){) 209.6887 Tj
-0 -389.2278 Td
-(5238         release\(&p->lock\);) 135.4239 Tj
-0 -398.7211 Td
-(5239         return -1;) 100.4758 Tj
-0 -408.2145 Td
-(5240       }) 52.4222 Tj
-0 -417.7079 Td
-(5241       wakeup\(&p->nread\);) 126.6869 Tj
-0 -427.2012 Td
-(5242       sleep\(&p->nwrite, &p->lock\);  ) 179.1091 Tj
-0 -436.6946 Td
-(5243     }) 43.6851 Tj
-0 -446.1879 Td
-(5244     p->data[p->nwrite++ % PIPESIZE] = addr[i];) 222.7942 Tj
-0 -455.6813 Td
-(5245   }) 34.9481 Tj
-0 -465.1747 Td
-(5246   wakeup\(&p->nread\);  ) 117.9499 Tj
-0 -474.668 Td
-(5247   release\(&p->lock\);) 109.2129 Tj
-0 -484.1614 Td
-(5248   return n;) 69.8962 Tj
-0 -493.6547 Td
-(5249 }) 26.2111 Tj
-0 -522.1348 Td
-(Sheet 52) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/pipe.c  Page 3) 161.635 Tj
-0 -28.4801 Td
-(5250 int) 34.9481 Tj
-0 -37.9735 Td
-(5251 piperead\(struct pipe *p, char *addr, int n\)) 209.6887 Tj
-0 -47.4668 Td
-(5252 {) 26.2111 Tj
-0 -56.9602 Td
-(5253   int i;) 56.7907 Tj
-0 -66.4535 Td
-(5254 ) 21.8426 Tj
-0 -75.9469 Td
-(5255   acquire\(&p->lock\);) 109.2129 Tj
-0 -85.4403 Td
-(5256   while\(p->nread == p->nwrite && p->writeopen\){  ) 235.8998 Tj
-0 -94.9336 Td
-(5257     if\(proc->killed\){) 113.5814 Tj
-0 -104.427 Td
-(5258       release\(&p->lock\);) 126.6869 Tj
-0 -113.9203 Td
-(5259       return -1;) 91.7388 Tj
-0 -123.4137 Td
-(5260     }) 43.6851 Tj
-0 -132.9071 Td
-(5261     sleep\(&p->nread, &p->lock\); ) 161.635 Tj
-0 -142.4004 Td
-(5262   }) 34.9481 Tj
-0 -151.8938 Td
-(5263   for\(i = 0; i < n; i++\){  ) 139.7925 Tj
-0 -161.3871 Td
-(5264     if\(p->nread == p->nwrite\)) 148.5295 Tj
-0 -170.8805 Td
-(5265       break;) 74.2647 Tj
-0 -180.3739 Td
-(5266     addr[i] = p->data[p->nread++ % PIPESIZE];) 218.4257 Tj
-0 -189.8672 Td
-(5267   }) 34.9481 Tj
-0 -199.3606 Td
-(5268   wakeup\(&p->nwrite\);  ) 122.3184 Tj
-0 -208.8539 Td
-(5269   release\(&p->lock\);) 109.2129 Tj
-0 -218.3473 Td
-(5270   return i;) 69.8962 Tj
-0 -227.8407 Td
-(5271 }) 26.2111 Tj
-0 -237.334 Td
-(5272 ) 21.8426 Tj
-0 -246.8274 Td
-(5273 ) 21.8426 Tj
-0 -256.3207 Td
-(5274 ) 21.8426 Tj
-0 -265.8141 Td
-(5275 ) 21.8426 Tj
-0 -275.3075 Td
-(5276 ) 21.8426 Tj
-0 -284.8008 Td
-(5277 ) 21.8426 Tj
-0 -294.2942 Td
-(5278 ) 21.8426 Tj
-0 -303.7875 Td
-(5279 ) 21.8426 Tj
-0 -313.2809 Td
-(5280 ) 21.8426 Tj
-0 -322.7743 Td
-(5281 ) 21.8426 Tj
-0 -332.2676 Td
-(5282 ) 21.8426 Tj
-0 -341.761 Td
-(5283 ) 21.8426 Tj
-0 -351.2543 Td
-(5284 ) 21.8426 Tj
-0 -360.7477 Td
-(5285 ) 21.8426 Tj
-0 -370.2411 Td
-(5286 ) 21.8426 Tj
-0 -379.7344 Td
-(5287 ) 21.8426 Tj
-0 -389.2278 Td
-(5288 ) 21.8426 Tj
-0 -398.7211 Td
-(5289 ) 21.8426 Tj
-0 -408.2145 Td
-(5290 ) 21.8426 Tj
-0 -417.7079 Td
-(5291 ) 21.8426 Tj
-0 -427.2012 Td
-(5292 ) 21.8426 Tj
-0 -436.6946 Td
-(5293 ) 21.8426 Tj
-0 -446.1879 Td
-(5294 ) 21.8426 Tj
-0 -455.6813 Td
-(5295 ) 21.8426 Tj
-0 -465.1747 Td
-(5296 ) 21.8426 Tj
-0 -474.668 Td
-(5297 ) 21.8426 Tj
-0 -484.1614 Td
-(5298 ) 21.8426 Tj
-0 -493.6547 Td
-(5299 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 52) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 60 60
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/string.c  Page 1) 170.3721 Tj
-0 -28.4801 Td
-(5300 #include "types.h") 100.4758 Tj
-0 -37.9735 Td
-(5301 #include "x86.h") 91.7388 Tj
-0 -47.4668 Td
-(5302 ) 21.8426 Tj
-0 -56.9602 Td
-(5303 void*) 43.6851 Tj
-0 -66.4535 Td
-(5304 memset\(void *dst, int c, uint n\)) 161.635 Tj
-0 -75.9469 Td
-(5305 {) 26.2111 Tj
-0 -85.4403 Td
-(5306   stosb\(dst, c, n\);) 104.8443 Tj
-0 -94.9336 Td
-(5307   return dst;) 78.6333 Tj
-0 -104.427 Td
-(5308 }) 26.2111 Tj
-0 -113.9203 Td
-(5309 ) 21.8426 Tj
-0 -123.4137 Td
-(5310 int) 34.9481 Tj
-0 -132.9071 Td
-(5311 memcmp\(const void *v1, const void *v2, uint n\)) 222.7942 Tj
-0 -142.4004 Td
-(5312 {) 26.2111 Tj
-0 -151.8938 Td
-(5313   const uchar *s1, *s2;) 122.3184 Tj
-0 -161.3871 Td
-(5314 ) 21.8426 Tj
-0 -170.8805 Td
-(5315   s1 = v1;) 65.5277 Tj
-0 -180.3739 Td
-(5316   s2 = v2;) 65.5277 Tj
-0 -189.8672 Td
-(5317   while\(n-- > 0\){) 96.1073 Tj
-0 -199.3606 Td
-(5318     if\(*s1 != *s2\)) 100.4758 Tj
-0 -208.8539 Td
-(5319       return *s1 - *s2;) 122.3184 Tj
-0 -218.3473 Td
-(5320     s1++, s2++;) 87.3703 Tj
-0 -227.8407 Td
-(5321   }) 34.9481 Tj
-0 -237.334 Td
-(5322 ) 21.8426 Tj
-0 -246.8274 Td
-(5323   return 0;) 69.8962 Tj
-0 -256.3207 Td
-(5324 }) 26.2111 Tj
-0 -265.8141 Td
-(5325 ) 21.8426 Tj
-0 -275.3075 Td
-(5326 void*) 43.6851 Tj
-0 -284.8008 Td
-(5327 memmove\(void *dst, const void *src, uint n\)) 209.6887 Tj
-0 -294.2942 Td
-(5328 {) 26.2111 Tj
-0 -303.7875 Td
-(5329   const char *s;) 91.7388 Tj
-0 -313.2809 Td
-(5330   char *d;) 65.5277 Tj
-0 -322.7743 Td
-(5331 ) 21.8426 Tj
-0 -332.2676 Td
-(5332   s = src;) 65.5277 Tj
-0 -341.761 Td
-(5333   d = dst;) 65.5277 Tj
-0 -351.2543 Td
-(5334   if\(s < d && s + n > d\){) 131.0554 Tj
-0 -360.7477 Td
-(5335     s += n;) 69.8962 Tj
-0 -370.2411 Td
-(5336     d += n;) 69.8962 Tj
-0 -379.7344 Td
-(5337     while\(n-- > 0\)) 100.4758 Tj
-0 -389.2278 Td
-(5338       *--d = *--s;) 100.4758 Tj
-0 -398.7211 Td
-(5339   } else) 56.7907 Tj
-0 -408.2145 Td
-(5340     while\(n-- > 0\)) 100.4758 Tj
-0 -417.7079 Td
-(5341       *d++ = *s++;) 100.4758 Tj
-0 -427.2012 Td
-(5342 ) 21.8426 Tj
-0 -436.6946 Td
-(5343   return dst;) 78.6333 Tj
-0 -446.1879 Td
-(5344 }) 26.2111 Tj
-0 -455.6813 Td
-(5345 ) 21.8426 Tj
-0 -465.1747 Td
-(5346 ) 21.8426 Tj
-0 -474.668 Td
-(5347 ) 21.8426 Tj
-0 -484.1614 Td
-(5348 ) 21.8426 Tj
-0 -493.6547 Td
-(5349 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 53) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/string.c  Page 2) 170.3721 Tj
-0 -28.4801 Td
-(5350 int) 34.9481 Tj
-0 -37.9735 Td
-(5351 strncmp\(const char *p, const char *q, uint n\)) 218.4257 Tj
-0 -47.4668 Td
-(5352 {) 26.2111 Tj
-0 -56.9602 Td
-(5353   while\(n > 0 && *p && *p == *q\)) 161.635 Tj
-0 -66.4535 Td
-(5354     n--, p++, q++;) 100.4758 Tj
-0 -75.9469 Td
-(5355   if\(n == 0\)) 74.2647 Tj
-0 -85.4403 Td
-(5356     return 0;) 78.6333 Tj
-0 -94.9336 Td
-(5357   return \(uchar\)*p - \(uchar\)*q;) 157.2665 Tj
-0 -104.427 Td
-(5358 }) 26.2111 Tj
-0 -113.9203 Td
-(5359 ) 21.8426 Tj
-0 -123.4137 Td
-(5360 char*) 43.6851 Tj
-0 -132.9071 Td
-(5361 strncpy\(char *s, const char *t, int n\)) 187.8461 Tj
-0 -142.4004 Td
-(5362 {) 26.2111 Tj
-0 -151.8938 Td
-(5363   char *os;) 69.8962 Tj
-0 -161.3871 Td
-(5364 ) 21.8426 Tj
-0 -170.8805 Td
-(5365   os = s;) 61.1592 Tj
-0 -180.3739 Td
-(5366   while\(n-- > 0 && \(*s++ = *t++\) != 0\)) 187.8461 Tj
-0 -189.8672 Td
-(5367     ;) 43.6851 Tj
-0 -199.3606 Td
-(5368   while\(n-- > 0\)) 91.7388 Tj
-0 -208.8539 Td
-(5369     *s++ = 0;) 78.6333 Tj
-0 -218.3473 Td
-(5370   return os;) 74.2647 Tj
-0 -227.8407 Td
-(5371 }) 26.2111 Tj
-0 -237.334 Td
-(5372 ) 21.8426 Tj
-0 -246.8274 Td
-(5373 // Like strncpy but guaranteed to NUL-terminate.) 231.5313 Tj
-0 -256.3207 Td
-(5374 char*) 43.6851 Tj
-0 -265.8141 Td
-(5375 safestrcpy\(char *s, const char *t, int n\)) 200.9517 Tj
-0 -275.3075 Td
-(5376 {) 26.2111 Tj
-0 -284.8008 Td
-(5377   char *os;) 69.8962 Tj
-0 -294.2942 Td
-(5378 ) 21.8426 Tj
-0 -303.7875 Td
-(5379   os = s;) 61.1592 Tj
-0 -313.2809 Td
-(5380   if\(n <= 0\)) 74.2647 Tj
-0 -322.7743 Td
-(5381     return os;) 83.0018 Tj
-0 -332.2676 Td
-(5382   while\(--n > 0 && \(*s++ = *t++\) != 0\)) 187.8461 Tj
-0 -341.761 Td
-(5383     ;) 43.6851 Tj
-0 -351.2543 Td
-(5384   *s = 0;) 61.1592 Tj
-0 -360.7477 Td
-(5385   return os;) 74.2647 Tj
-0 -370.2411 Td
-(5386 }) 26.2111 Tj
-0 -379.7344 Td
-(5387 ) 21.8426 Tj
-0 -389.2278 Td
-(5388 int) 34.9481 Tj
-0 -398.7211 Td
-(5389 strlen\(const char *s\)) 113.5814 Tj
-0 -408.2145 Td
-(5390 {) 26.2111 Tj
-0 -417.7079 Td
-(5391   int n;) 56.7907 Tj
-0 -427.2012 Td
-(5392 ) 21.8426 Tj
-0 -436.6946 Td
-(5393   for\(n = 0; s[n]; n++\)) 122.3184 Tj
-0 -446.1879 Td
-(5394     ;) 43.6851 Tj
-0 -455.6813 Td
-(5395   return n;) 69.8962 Tj
-0 -465.1747 Td
-(5396 }) 26.2111 Tj
-0 -474.668 Td
-(5397 ) 21.8426 Tj
-0 -484.1614 Td
-(5398 ) 21.8426 Tj
-0 -493.6547 Td
-(5399 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 53) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 61 61
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/mp.h  Page 1) 152.898 Tj
-0 -28.4801 Td
-(5400 // See MultiProcessor Specification Version 1.[14]) 240.2683 Tj
-0 -37.9735 Td
-(5401 ) 21.8426 Tj
-0 -47.4668 Td
-(5402 struct mp {             // floating pointer) 209.6887 Tj
-0 -56.9602 Td
-(5403   uchar signature[4];           // "_MP_") 200.9517 Tj
-0 -66.4535 Td
-(5404   void *physaddr;               // phys addr of MP config \
-table) 297.059 Tj
-0 -75.9469 Td
-(5405   uchar length;                 // 1) 179.1091 Tj
-0 -85.4403 Td
-(5406   uchar specrev;                // [14]) 192.2146 Tj
-0 -94.9336 Td
-(5407   uchar checksum;               // all bytes must add up t\
-o 0) 288.322 Tj
-0 -104.427 Td
-(5408   uchar type;                   // MP system config type) 266.4794 Tj
-0 -113.9203 Td
-(5409   uchar imcrp;) 83.0018 Tj
-0 -123.4137 Td
-(5410   uchar reserved[3];) 109.2129 Tj
-0 -132.9071 Td
-(5411 };) 30.5796 Tj
-0 -142.4004 Td
-(5412 ) 21.8426 Tj
-0 -151.8938 Td
-(5413 struct mpconf {         // configuration table header) 253.3738 Tj
-0 -161.3871 Td
-(5414   uchar signature[4];           // "PCMP") 200.9517 Tj
-0 -170.8805 Td
-(5415   ushort length;                // total table length) 253.3738 Tj
-0 -180.3739 Td
-(5416   uchar version;                // [14]) 192.2146 Tj
-0 -189.8672 Td
-(5417   uchar checksum;               // all bytes must add up t\
-o 0) 288.322 Tj
-0 -199.3606 Td
-(5418   uchar product[20];            // product id) 218.4257 Tj
-0 -208.8539 Td
-(5419   uint *oemtable;               // OEM table pointer) 249.0053 Tj
-0 -218.3473 Td
-(5420   ushort oemlength;             // OEM table length) 244.6368 Tj
-0 -227.8407 Td
-(5421   ushort entry;                 // entry count) 222.7942 Tj
-0 -237.334 Td
-(5422   uint *lapicaddr;              // address of local APIC) 266.4794 Tj
-0 -246.8274 Td
-(5423   ushort xlength;               // extended table length) 266.4794 Tj
-0 -256.3207 Td
-(5424   uchar xchecksum;              // extended table checksum) 275.2164 Tj
-0 -265.8141 Td
-(5425   uchar reserved;) 96.1073 Tj
-0 -275.3075 Td
-(5426 };) 30.5796 Tj
-0 -284.8008 Td
-(5427 ) 21.8426 Tj
-0 -294.2942 Td
-(5428 struct mpproc {         // processor table entry) 231.5313 Tj
-0 -303.7875 Td
-(5429   uchar type;                   // entry type \(0\)) 235.8998 Tj
-0 -313.2809 Td
-(5430   uchar apicid;                 // local APIC id) 231.5313 Tj
-0 -322.7743 Td
-(5431   uchar version;                // local APIC verison) 253.3738 Tj
-0 -332.2676 Td
-(5432   uchar flags;                  // CPU flags) 214.0572 Tj
-0 -341.761 Td
-(5433     #define MPBOOT 0x02           // This proc is the boot\
-strap processor.) 345.1126 Tj
-0 -351.2543 Td
-(5434   uchar signature[4];           // CPU signature) 231.5313 Tj
-0 -360.7477 Td
-(5435   uint feature;                 // feature flags from CPUI\
-D instruction) 332.0071 Tj
-0 -370.2411 Td
-(5436   uchar reserved[8];) 109.2129 Tj
-0 -379.7344 Td
-(5437 };) 30.5796 Tj
-0 -389.2278 Td
-(5438 ) 21.8426 Tj
-0 -398.7211 Td
-(5439 struct mpioapic {       // I/O APIC table entry) 227.1628 Tj
-0 -408.2145 Td
-(5440   uchar type;                   // entry type \(2\)) 235.8998 Tj
-0 -417.7079 Td
-(5441   uchar apicno;                 // I/O APIC id) 222.7942 Tj
-0 -427.2012 Td
-(5442   uchar version;                // I/O APIC version) 244.6368 Tj
-0 -436.6946 Td
-(5443   uchar flags;                  // I/O APIC flags) 235.8998 Tj
-0 -446.1879 Td
-(5444   uint *addr;                  // I/O APIC address) 240.2683 Tj
-0 -455.6813 Td
-(5445 };) 30.5796 Tj
-0 -465.1747 Td
-(5446 ) 21.8426 Tj
-0 -474.668 Td
-(5447 ) 21.8426 Tj
-0 -484.1614 Td
-(5448 ) 21.8426 Tj
-0 -493.6547 Td
-(5449 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 54) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/mp.h  Page 2) 152.898 Tj
-0 -28.4801 Td
-(5450 // Table entry types) 109.2129 Tj
-0 -37.9735 Td
-(5451 #define MPPROC    0x00  // One per processor) 214.0572 Tj
-0 -47.4668 Td
-(5452 #define MPBUS     0x01  // One per bus) 187.8461 Tj
-0 -56.9602 Td
-(5453 #define MPIOAPIC  0x02  // One per I/O APIC) 209.6887 Tj
-0 -66.4535 Td
-(5454 #define MPIOINTR  0x03  // One per bus interrupt source) 262.1109 Tj
-0 -75.9469 Td
-(5455 #define MPLINTR   0x04  // One per system interrupt source) 275.2164 Tj
-0 -85.4403 Td
-(5456 ) 21.8426 Tj
-0 -94.9336 Td
-(5457 ) 21.8426 Tj
-0 -104.427 Td
-(5458 ) 21.8426 Tj
-0 -113.9203 Td
-(5459 ) 21.8426 Tj
-0 -123.4137 Td
-(5460 ) 21.8426 Tj
-0 -132.9071 Td
-(5461 ) 21.8426 Tj
-0 -142.4004 Td
-(5462 ) 21.8426 Tj
-0 -151.8938 Td
-(5463 ) 21.8426 Tj
-0 -161.3871 Td
-(5464 ) 21.8426 Tj
-0 -170.8805 Td
-(5465 ) 21.8426 Tj
-0 -180.3739 Td
-(5466 ) 21.8426 Tj
-0 -189.8672 Td
-(5467 ) 21.8426 Tj
-0 -199.3606 Td
-(5468 ) 21.8426 Tj
-0 -208.8539 Td
-(5469 ) 21.8426 Tj
-0 -218.3473 Td
-(5470 ) 21.8426 Tj
-0 -227.8407 Td
-(5471 ) 21.8426 Tj
-0 -237.334 Td
-(5472 ) 21.8426 Tj
-0 -246.8274 Td
-(5473 ) 21.8426 Tj
-0 -256.3207 Td
-(5474 ) 21.8426 Tj
-0 -265.8141 Td
-(5475 ) 21.8426 Tj
-0 -275.3075 Td
-(5476 ) 21.8426 Tj
-0 -284.8008 Td
-(5477 ) 21.8426 Tj
-0 -294.2942 Td
-(5478 ) 21.8426 Tj
-0 -303.7875 Td
-(5479 ) 21.8426 Tj
-0 -313.2809 Td
-(5480 ) 21.8426 Tj
-0 -322.7743 Td
-(5481 ) 21.8426 Tj
-0 -332.2676 Td
-(5482 ) 21.8426 Tj
-0 -341.761 Td
-(5483 ) 21.8426 Tj
-0 -351.2543 Td
-(5484 ) 21.8426 Tj
-0 -360.7477 Td
-(5485 ) 21.8426 Tj
-0 -370.2411 Td
-(5486 ) 21.8426 Tj
-0 -379.7344 Td
-(5487 ) 21.8426 Tj
-0 -389.2278 Td
-(5488 ) 21.8426 Tj
-0 -398.7211 Td
-(5489 ) 21.8426 Tj
-0 -408.2145 Td
-(5490 ) 21.8426 Tj
-0 -417.7079 Td
-(5491 ) 21.8426 Tj
-0 -427.2012 Td
-(5492 ) 21.8426 Tj
-0 -436.6946 Td
-(5493 ) 21.8426 Tj
-0 -446.1879 Td
-(5494 ) 21.8426 Tj
-0 -455.6813 Td
-(5495 ) 21.8426 Tj
-0 -465.1747 Td
-(5496 ) 21.8426 Tj
-0 -474.668 Td
-(5497 ) 21.8426 Tj
-0 -484.1614 Td
-(5498 ) 21.8426 Tj
-0 -493.6547 Td
-(5499 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 54) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 62 62
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/mp.c  Page 1) 152.898 Tj
-0 -28.4801 Td
-(5500 // Multiprocessor bootstrap.) 144.161 Tj
-0 -37.9735 Td
-(5501 // Search memory for MP description structures.) 227.1628 Tj
-0 -47.4668 Td
-(5502 // http://developer.intel.com/design/pentium/datashts/2420\
-1606.pdf) 310.1645 Tj
-0 -56.9602 Td
-(5503 ) 21.8426 Tj
-0 -66.4535 Td
-(5504 #include "types.h") 100.4758 Tj
-0 -75.9469 Td
-(5505 #include "defs.h") 96.1073 Tj
-0 -85.4403 Td
-(5506 #include "param.h") 100.4758 Tj
-0 -94.9336 Td
-(5507 #include "mp.h") 87.3703 Tj
-0 -104.427 Td
-(5508 #include "x86.h") 91.7388 Tj
-0 -113.9203 Td
-(5509 #include "mmu.h") 91.7388 Tj
-0 -123.4137 Td
-(5510 #include "proc.h") 96.1073 Tj
-0 -132.9071 Td
-(5511 ) 21.8426 Tj
-0 -142.4004 Td
-(5512 struct cpu cpus[NCPU];) 117.9499 Tj
-0 -151.8938 Td
-(5513 static struct cpu *bcpu;) 126.6869 Tj
-0 -161.3871 Td
-(5514 int ismp;) 61.1592 Tj
-0 -170.8805 Td
-(5515 int ncpu;) 61.1592 Tj
-0 -180.3739 Td
-(5516 uchar ioapicid;) 87.3703 Tj
-0 -189.8672 Td
-(5517 ) 21.8426 Tj
-0 -199.3606 Td
-(5518 int) 34.9481 Tj
-0 -208.8539 Td
-(5519 mpbcpu\(void\)) 74.2647 Tj
-0 -218.3473 Td
-(5520 {) 26.2111 Tj
-0 -227.8407 Td
-(5521   return bcpu-cpus;) 104.8443 Tj
-0 -237.334 Td
-(5522 }) 26.2111 Tj
-0 -246.8274 Td
-(5523 ) 21.8426 Tj
-0 -256.3207 Td
-(5524 static uchar) 74.2647 Tj
-0 -265.8141 Td
-(5525 sum\(uchar *addr, int len\)) 131.0554 Tj
-0 -275.3075 Td
-(5526 {) 26.2111 Tj
-0 -284.8008 Td
-(5527   int i, sum;) 78.6333 Tj
-0 -294.2942 Td
-(5528 ) 21.8426 Tj
-0 -303.7875 Td
-(5529   sum = 0;) 65.5277 Tj
-0 -313.2809 Td
-(5530   for\(i=0; i<len; i++\)) 117.9499 Tj
-0 -322.7743 Td
-(5531     sum += addr[i];) 104.8443 Tj
-0 -332.2676 Td
-(5532   return sum;) 78.6333 Tj
-0 -341.761 Td
-(5533 }) 26.2111 Tj
-0 -351.2543 Td
-(5534 ) 21.8426 Tj
-0 -360.7477 Td
-(5535 // Look for an MP structure in the len bytes at addr.) 253.3738 Tj
-0 -370.2411 Td
-(5536 static struct mp*) 96.1073 Tj
-0 -379.7344 Td
-(5537 mpsearch1\(uchar *addr, int len\)) 157.2665 Tj
-0 -389.2278 Td
-(5538 {) 26.2111 Tj
-0 -398.7211 Td
-(5539   uchar *e, *p;) 87.3703 Tj
-0 -408.2145 Td
-(5540 ) 21.8426 Tj
-0 -417.7079 Td
-(5541   e = addr+len;) 87.3703 Tj
-0 -427.2012 Td
-(5542   for\(p = addr; p < e; p += sizeof\(struct mp\)\)) 222.7942 Tj
-0 -436.6946 Td
-(5543     if\(memcmp\(p, "_MP_", 4\) == 0 && sum\(p, sizeof\(str\
-uct mp\)\) == 0\)) 314.533 Tj
-0 -446.1879 Td
-(5544       return \(struct mp*\)p;) 139.7925 Tj
-0 -455.6813 Td
-(5545   return 0;) 69.8962 Tj
-0 -465.1747 Td
-(5546 }) 26.2111 Tj
-0 -474.668 Td
-(5547 ) 21.8426 Tj
-0 -484.1614 Td
-(5548 ) 21.8426 Tj
-0 -493.6547 Td
-(5549 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 55) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/mp.c  Page 2) 152.898 Tj
-0 -28.4801 Td
-(5550 // Search for the MP Floating Pointer Structure, which acc\
-ording to the) 332.0071 Tj
-0 -37.9735 Td
-(5551 // spec is in one of the following three locations:) 244.6368 Tj
-0 -47.4668 Td
-(5552 // 1\) in the first KB of the EBDA;) 170.3721 Tj
-0 -56.9602 Td
-(5553 // 2\) in the last KB of system base memory;) 209.6887 Tj
-0 -66.4535 Td
-(5554 // 3\) in the BIOS ROM between 0xE0000 and 0xFFFFF.) 240.2683 Tj
-0 -75.9469 Td
-(5555 static struct mp*) 96.1073 Tj
-0 -85.4403 Td
-(5556 mpsearch\(void\)) 83.0018 Tj
-0 -94.9336 Td
-(5557 {) 26.2111 Tj
-0 -104.427 Td
-(5558   uchar *bda;) 78.6333 Tj
-0 -113.9203 Td
-(5559   uint p;) 61.1592 Tj
-0 -123.4137 Td
-(5560   struct mp *mp;) 91.7388 Tj
-0 -132.9071 Td
-(5561 ) 21.8426 Tj
-0 -142.4004 Td
-(5562   bda = \(uchar*\)0x400;) 117.9499 Tj
-0 -151.8938 Td
-(5563   if\(\(p = \(\(bda[0x0F]<<8\)|bda[0x0E]\) << 4\)\){) 214.0572 Tj
-0 -161.3871 Td
-(5564     if\(\(mp = mpsearch1\(\(uchar*\)p, 1024\)\)\)) 200.9517 Tj
-0 -170.8805 Td
-(5565       return mp;) 91.7388 Tj
-0 -180.3739 Td
-(5566   } else {) 65.5277 Tj
-0 -189.8672 Td
-(5567     p = \(\(bda[0x14]<<8\)|bda[0x13]\)*1024;) 196.5831 Tj
-0 -199.3606 Td
-(5568     if\(\(mp = mpsearch1\(\(uchar*\)p-1024, 1024\)\)\)) 222.7942 Tj
-0 -208.8539 Td
-(5569       return mp;) 91.7388 Tj
-0 -218.3473 Td
-(5570   }) 34.9481 Tj
-0 -227.8407 Td
-(5571   return mpsearch1\(\(uchar*\)0xF0000, 0x10000\);) 218.4257 Tj
-0 -237.334 Td
-(5572 }) 26.2111 Tj
-0 -246.8274 Td
-(5573 ) 21.8426 Tj
-0 -256.3207 Td
-(5574 // Search for an MP configuration table.  For now,) 240.2683 Tj
-0 -265.8141 Td
-(5575 // don't accept the default configurations \(physaddr == 0\
-\).) 279.5849 Tj
-0 -275.3075 Td
-(5576 // Check for correct signature, calculate the checksum and\
-,) 279.5849 Tj
-0 -284.8008 Td
-(5577 // if correct, check the version.) 166.0035 Tj
-0 -294.2942 Td
-(5578 // To do: check extended table checksum.) 196.5831 Tj
-0 -303.7875 Td
-(5579 static struct mpconf*) 113.5814 Tj
-0 -313.2809 Td
-(5580 mpconfig\(struct mp **pmp\)) 131.0554 Tj
-0 -322.7743 Td
-(5581 {) 26.2111 Tj
-0 -332.2676 Td
-(5582   struct mpconf *conf;) 117.9499 Tj
-0 -341.761 Td
-(5583   struct mp *mp;) 91.7388 Tj
-0 -351.2543 Td
-(5584 ) 21.8426 Tj
-0 -360.7477 Td
-(5585   if\(\(mp = mpsearch\(\)\) == 0 || mp->physaddr == 0\)) 235.8998 Tj
-0 -370.2411 Td
-(5586     return 0;) 78.6333 Tj
-0 -379.7344 Td
-(5587   conf = \(struct mpconf*\)mp->physaddr;) 187.8461 Tj
-0 -389.2278 Td
-(5588   if\(memcmp\(conf, "PCMP", 4\) != 0\)) 170.3721 Tj
-0 -398.7211 Td
-(5589     return 0;) 78.6333 Tj
-0 -408.2145 Td
-(5590   if\(conf->version != 1 && conf->version != 4\)) 222.7942 Tj
-0 -417.7079 Td
-(5591     return 0;) 78.6333 Tj
-0 -427.2012 Td
-(5592   if\(sum\(\(uchar*\)conf, conf->length\) != 0\)) 205.3202 Tj
-0 -436.6946 Td
-(5593     return 0;) 78.6333 Tj
-0 -446.1879 Td
-(5594   *pmp = mp;) 74.2647 Tj
-0 -455.6813 Td
-(5595   return conf;) 83.0018 Tj
-0 -465.1747 Td
-(5596 }) 26.2111 Tj
-0 -474.668 Td
-(5597 ) 21.8426 Tj
-0 -484.1614 Td
-(5598 ) 21.8426 Tj
-0 -493.6547 Td
-(5599 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 55) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 63 63
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/mp.c  Page 3) 152.898 Tj
-0 -28.4801 Td
-(5600 void) 39.3166 Tj
-0 -37.9735 Td
-(5601 mpinit\(void\)) 74.2647 Tj
-0 -47.4668 Td
-(5602 {) 26.2111 Tj
-0 -56.9602 Td
-(5603   uchar *p, *e;) 87.3703 Tj
-0 -66.4535 Td
-(5604   struct mp *mp;) 91.7388 Tj
-0 -75.9469 Td
-(5605   struct mpconf *conf;) 117.9499 Tj
-0 -85.4403 Td
-(5606   struct mpproc *proc;) 117.9499 Tj
-0 -94.9336 Td
-(5607   struct mpioapic *ioapic;) 135.4239 Tj
-0 -104.427 Td
-(5608 ) 21.8426 Tj
-0 -113.9203 Td
-(5609   bcpu = &cpus[0];) 100.4758 Tj
-0 -123.4137 Td
-(5610   if\(\(conf = mpconfig\(&mp\)\) == 0\)) 166.0035 Tj
-0 -132.9071 Td
-(5611     return;) 69.8962 Tj
-0 -142.4004 Td
-(5612   ismp = 1;) 69.8962 Tj
-0 -151.8938 Td
-(5613   lapic = \(uint*\)conf->lapicaddr;) 166.0035 Tj
-0 -161.3871 Td
-(5614   for\(p=\(uchar*\)\(conf+1\), e=\(uchar*\)conf+conf->leng\
-th; p<e; \){) 292.6905 Tj
-0 -170.8805 Td
-(5615     switch\(*p\){) 87.3703 Tj
-0 -180.3739 Td
-(5616     case MPPROC:) 91.7388 Tj
-0 -189.8672 Td
-(5617       proc = \(struct mpproc*\)p;) 157.2665 Tj
-0 -199.3606 Td
-(5618       if\(ncpu != proc->apicid\) {) 161.635 Tj
-0 -208.8539 Td
-(5619         cprintf\("mpinit: ncpu=%d apicpid=%d", ncpu, proc-\
->apicid\);) 310.1645 Tj
-0 -218.3473 Td
-(5620         panic\("mpinit"\);) 126.6869 Tj
-0 -227.8407 Td
-(5621       }) 52.4222 Tj
-0 -237.334 Td
-(5622       if\(proc->flags & MPBOOT\)) 152.898 Tj
-0 -246.8274 Td
-(5623         bcpu = &cpus[ncpu];) 139.7925 Tj
-0 -256.3207 Td
-(5624       cpus[ncpu].id = ncpu;) 139.7925 Tj
-0 -265.8141 Td
-(5625       ncpu++;) 78.6333 Tj
-0 -275.3075 Td
-(5626       p += sizeof\(struct mpproc\);) 166.0035 Tj
-0 -284.8008 Td
-(5627       continue;) 87.3703 Tj
-0 -294.2942 Td
-(5628     case MPIOAPIC:) 100.4758 Tj
-0 -303.7875 Td
-(5629       ioapic = \(struct mpioapic*\)p;) 174.7406 Tj
-0 -313.2809 Td
-(5630       ioapicid = ioapic->apicno;) 161.635 Tj
-0 -322.7743 Td
-(5631       p += sizeof\(struct mpioapic\);) 174.7406 Tj
-0 -332.2676 Td
-(5632       continue;) 87.3703 Tj
-0 -341.761 Td
-(5633     case MPBUS:) 87.3703 Tj
-0 -351.2543 Td
-(5634     case MPIOINTR:) 100.4758 Tj
-0 -360.7477 Td
-(5635     case MPLINTR:) 96.1073 Tj
-0 -370.2411 Td
-(5636       p += 8;) 78.6333 Tj
-0 -379.7344 Td
-(5637       continue;) 87.3703 Tj
-0 -389.2278 Td
-(5638     default:) 74.2647 Tj
-0 -398.7211 Td
-(5639       cprintf\("mpinit: unknown config type %x\\n", *p\);) 257.7424 Tj
-0 -408.2145 Td
-(5640       panic\("mpinit"\);) 117.9499 Tj
-0 -417.7079 Td
-(5641     }) 43.6851 Tj
-0 -427.2012 Td
-(5642   }) 34.9481 Tj
-0 -436.6946 Td
-(5643   if\(mp->imcrp\){) 91.7388 Tj
-0 -446.1879 Td
-(5644     // Bochs doesn't support IMCR, so this doesn't run on \
-Bochs.) 301.4275 Tj
-0 -455.6813 Td
-(5645     // But it would on real hardware.) 183.4776 Tj
-0 -465.1747 Td
-(5646     outb\(0x22, 0x70\);   // Select IMCR) 187.8461 Tj
-0 -474.668 Td
-(5647     outb\(0x23, inb\(0x23\) | 1\);  // Mask external inter\
-rupts.) 283.9534 Tj
-0 -484.1614 Td
-(5648   }) 34.9481 Tj
-0 -493.6547 Td
-(5649 }) 26.2111 Tj
-0 -522.1348 Td
-(Sheet 56) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/lapic.c  Page 1) 166.0035 Tj
-0 -28.4801 Td
-(5650 // The local APIC manages internal \(non-I/O\) interrupts.) 266.4794 Tj
-0 -37.9735 Td
-(5651 // See Chapter 8 & Appendix C of Intel processor manual vo\
-lume 3.) 305.796 Tj
-0 -47.4668 Td
-(5652 ) 21.8426 Tj
-0 -56.9602 Td
-(5653 #include "types.h") 100.4758 Tj
-0 -66.4535 Td
-(5654 #include "defs.h") 96.1073 Tj
-0 -75.9469 Td
-(5655 #include "traps.h") 100.4758 Tj
-0 -85.4403 Td
-(5656 #include "mmu.h") 91.7388 Tj
-0 -94.9336 Td
-(5657 #include "x86.h") 91.7388 Tj
-0 -104.427 Td
-(5658 ) 21.8426 Tj
-0 -113.9203 Td
-(5659 // Local APIC registers, divided by 4 for use as uint[] in\
-dices.) 301.4275 Tj
-0 -123.4137 Td
-(5660 #define ID      \(0x0020/4\)   // ID) 170.3721 Tj
-0 -132.9071 Td
-(5661 #define VER     \(0x0030/4\)   // Version) 192.2146 Tj
-0 -142.4004 Td
-(5662 #define TPR     \(0x0080/4\)   // Task Priority) 218.4257 Tj
-0 -151.8938 Td
-(5663 #define EOI     \(0x00B0/4\)   // EOI) 174.7406 Tj
-0 -161.3871 Td
-(5664 #define SVR     \(0x00F0/4\)   // Spurious Interrupt Vecto\
-r) 270.8479 Tj
-0 -170.8805 Td
-(5665   #define ENABLE     0x00000100   // Unit Enable) 231.5313 Tj
-0 -180.3739 Td
-(5666 #define ESR     \(0x0280/4\)   // Error Status) 214.0572 Tj
-0 -189.8672 Td
-(5667 #define ICRLO   \(0x0300/4\)   // Interrupt Command) 235.8998 Tj
-0 -199.3606 Td
-(5668   #define INIT       0x00000500   // INIT/RESET) 227.1628 Tj
-0 -208.8539 Td
-(5669   #define STARTUP    0x00000600   // Startup IPI) 231.5313 Tj
-0 -218.3473 Td
-(5670   #define DELIVS     0x00001000   // Delivery status) 249.0053 Tj
-0 -227.8407 Td
-(5671   #define ASSERT     0x00004000   // Assert interrupt \(vs\
- deassert\)) 314.533 Tj
-0 -237.334 Td
-(5672   #define LEVEL      0x00008000   // Level triggered) 249.0053 Tj
-0 -246.8274 Td
-(5673   #define BCAST      0x00080000   // Send to all APICs, in\
-cluding self.) 332.0071 Tj
-0 -256.3207 Td
-(5674 #define ICRHI   \(0x0310/4\)   // Interrupt Command [63:32\
-]) 270.8479 Tj
-0 -265.8141 Td
-(5675 #define TIMER   \(0x0320/4\)   // Local Vector Table 0 \(T\
-IMER\)) 283.9534 Tj
-0 -275.3075 Td
-(5676   #define X1         0x0000000B   // divide counts by 1) 262.1109 Tj
-0 -284.8008 Td
-(5677   #define PERIODIC   0x00020000   // Periodic) 218.4257 Tj
-0 -294.2942 Td
-(5678 #define PCINT   \(0x0340/4\)   // Performance Counter LVT) 262.1109 Tj
-0 -303.7875 Td
-(5679 #define LINT0   \(0x0350/4\)   // Local Vector Table 1 \(L\
-INT0\)) 283.9534 Tj
-0 -313.2809 Td
-(5680 #define LINT1   \(0x0360/4\)   // Local Vector Table 2 \(L\
-INT1\)) 283.9534 Tj
-0 -322.7743 Td
-(5681 #define ERROR   \(0x0370/4\)   // Local Vector Table 3 \(E\
-RROR\)) 283.9534 Tj
-0 -332.2676 Td
-(5682   #define MASKED     0x00010000   // Interrupt masked) 253.3738 Tj
-0 -341.761 Td
-(5683 #define TICR    \(0x0380/4\)   // Timer Initial Count) 244.6368 Tj
-0 -351.2543 Td
-(5684 #define TCCR    \(0x0390/4\)   // Timer Current Count) 244.6368 Tj
-0 -360.7477 Td
-(5685 #define TDCR    \(0x03E0/4\)   // Timer Divide Configurati\
-on) 275.2164 Tj
-0 -370.2411 Td
-(5686 ) 21.8426 Tj
-0 -379.7344 Td
-(5687 volatile uint *lapic;  // Initialized in mp.c) 218.4257 Tj
-0 -389.2278 Td
-(5688 ) 21.8426 Tj
-0 -398.7211 Td
-(5689 static void) 69.8962 Tj
-0 -408.2145 Td
-(5690 lapicw\(int index, int value\)) 144.161 Tj
-0 -417.7079 Td
-(5691 {) 26.2111 Tj
-0 -427.2012 Td
-(5692   lapic[index] = value;) 122.3184 Tj
-0 -436.6946 Td
-(5693   lapic[ID];  // wait for write to finish, by reading) 253.3738 Tj
-0 -446.1879 Td
-(5694 }) 26.2111 Tj
-0 -455.6813 Td
-(5695 ) 21.8426 Tj
-0 -465.1747 Td
-(5696 ) 21.8426 Tj
-0 -474.668 Td
-(5697 ) 21.8426 Tj
-0 -484.1614 Td
-(5698 ) 21.8426 Tj
-0 -493.6547 Td
-(5699 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 56) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 64 64
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/lapic.c  Page 2) 166.0035 Tj
-0 -28.4801 Td
-(5700 void) 39.3166 Tj
-0 -37.9735 Td
-(5701 lapicinit\(int c\)) 91.7388 Tj
-0 -47.4668 Td
-(5702 {) 26.2111 Tj
-0 -56.9602 Td
-(5703   if\(!lapic\)) 74.2647 Tj
-0 -66.4535 Td
-(5704     return;) 69.8962 Tj
-0 -75.9469 Td
-(5705 ) 21.8426 Tj
-0 -85.4403 Td
-(5706   // Enable local APIC; set spurious interrupt vector.) 257.7424 Tj
-0 -94.9336 Td
-(5707   lapicw\(SVR, ENABLE | \(T_IRQ0 + IRQ_SPURIOUS\)\);) 231.5313 Tj
-0 -104.427 Td
-(5708 ) 21.8426 Tj
-0 -113.9203 Td
-(5709   // The timer repeatedly counts down at bus frequency) 257.7424 Tj
-0 -123.4137 Td
-(5710   // from lapic[TICR] and then issues an interrupt.) 244.6368 Tj
-0 -132.9071 Td
-(5711   // If xv6 cared more about precise timekeeping,) 235.8998 Tj
-0 -142.4004 Td
-(5712   // TICR would be calibrated using an external time sourc\
-e.) 283.9534 Tj
-0 -151.8938 Td
-(5713   lapicw\(TDCR, X1\);) 104.8443 Tj
-0 -161.3871 Td
-(5714   lapicw\(TIMER, PERIODIC | \(T_IRQ0 + IRQ_TIMER\)\);) 235.8998 Tj
-0 -170.8805 Td
-(5715   lapicw\(TICR, 10000000\);) 131.0554 Tj
-0 -180.3739 Td
-(5716 ) 21.8426 Tj
-0 -189.8672 Td
-(5717   // Disable logical interrupt lines.) 183.4776 Tj
-0 -199.3606 Td
-(5718   lapicw\(LINT0, MASKED\);) 126.6869 Tj
-0 -208.8539 Td
-(5719   lapicw\(LINT1, MASKED\);) 126.6869 Tj
-0 -218.3473 Td
-(5720 ) 21.8426 Tj
-0 -227.8407 Td
-(5721   // Disable performance counter overflow interrupts) 249.0053 Tj
-0 -237.334 Td
-(5722   // on machines that provide that interrupt entry.) 244.6368 Tj
-0 -246.8274 Td
-(5723   if\(\(\(lapic[VER]>>16\) & 0xFF\) >= 4\)) 179.1091 Tj
-0 -256.3207 Td
-(5724     lapicw\(PCINT, MASKED\);) 135.4239 Tj
-0 -265.8141 Td
-(5725 ) 21.8426 Tj
-0 -275.3075 Td
-(5726   // Map error interrupt to IRQ_ERROR.) 187.8461 Tj
-0 -284.8008 Td
-(5727   lapicw\(ERROR, T_IRQ0 + IRQ_ERROR\);) 179.1091 Tj
-0 -294.2942 Td
-(5728 ) 21.8426 Tj
-0 -303.7875 Td
-(5729   // Clear error status register \(requires back-to-back w\
-rites\).) 301.4275 Tj
-0 -313.2809 Td
-(5730   lapicw\(ESR, 0\);) 96.1073 Tj
-0 -322.7743 Td
-(5731   lapicw\(ESR, 0\);) 96.1073 Tj
-0 -332.2676 Td
-(5732 ) 21.8426 Tj
-0 -341.761 Td
-(5733   // Ack any outstanding interrupts.) 179.1091 Tj
-0 -351.2543 Td
-(5734   lapicw\(EOI, 0\);) 96.1073 Tj
-0 -360.7477 Td
-(5735 ) 21.8426 Tj
-0 -370.2411 Td
-(5736   // Send an Init Level De-Assert to synchronise arbitrati\
-on ID's.) 310.1645 Tj
-0 -379.7344 Td
-(5737   lapicw\(ICRHI, 0\);) 104.8443 Tj
-0 -389.2278 Td
-(5738   lapicw\(ICRLO, BCAST | INIT | LEVEL\);) 187.8461 Tj
-0 -398.7211 Td
-(5739   while\(lapic[ICRLO] & DELIVS\)) 152.898 Tj
-0 -408.2145 Td
-(5740     ;) 43.6851 Tj
-0 -417.7079 Td
-(5741 ) 21.8426 Tj
-0 -427.2012 Td
-(5742   // Enable interrupts on the APIC \(but not on the proces\
-sor\).) 292.6905 Tj
-0 -436.6946 Td
-(5743   lapicw\(TPR, 0\);) 96.1073 Tj
-0 -446.1879 Td
-(5744 }) 26.2111 Tj
-0 -455.6813 Td
-(5745 ) 21.8426 Tj
-0 -465.1747 Td
-(5746 ) 21.8426 Tj
-0 -474.668 Td
-(5747 ) 21.8426 Tj
-0 -484.1614 Td
-(5748 ) 21.8426 Tj
-0 -493.6547 Td
-(5749 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 57) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/lapic.c  Page 3) 166.0035 Tj
-0 -28.4801 Td
-(5750 int) 34.9481 Tj
-0 -37.9735 Td
-(5751 cpunum\(void\)) 74.2647 Tj
-0 -47.4668 Td
-(5752 {) 26.2111 Tj
-0 -56.9602 Td
-(5753   // Cannot call cpu when interrupts are enabled:) 235.8998 Tj
-0 -66.4535 Td
-(5754   // result not guaranteed to last long enough to be used!) 275.2164 Tj
-0 -75.9469 Td
-(5755   // Would prefer to panic but even printing is chancy her\
-e:) 283.9534 Tj
-0 -85.4403 Td
-(5756   // almost everything, including cprintf and panic, calls\
- cpu,) 297.059 Tj
-0 -94.9336 Td
-(5757   // often indirectly through acquire and release.) 240.2683 Tj
-0 -104.427 Td
-(5758   if\(readeflags\(\)&FL_IF\){) 131.0554 Tj
-0 -113.9203 Td
-(5759     static int n;) 96.1073 Tj
-0 -123.4137 Td
-(5760     if\(n++ == 0\)) 91.7388 Tj
-0 -132.9071 Td
-(5761       cprintf\("cpu called from %x with interrupts enabled\
-\\n",) 288.322 Tj
-0 -142.4004 Td
-(5762         __builtin_return_address\(0\)\);) 183.4776 Tj
-0 -151.8938 Td
-(5763   }) 34.9481 Tj
-0 -161.3871 Td
-(5764 ) 21.8426 Tj
-0 -170.8805 Td
-(5765   if\(lapic\)) 69.8962 Tj
-0 -180.3739 Td
-(5766     return lapic[ID]>>24;) 131.0554 Tj
-0 -189.8672 Td
-(5767   return 0;) 69.8962 Tj
-0 -199.3606 Td
-(5768 }) 26.2111 Tj
-0 -208.8539 Td
-(5769 ) 21.8426 Tj
-0 -218.3473 Td
-(5770 // Acknowledge interrupt.) 131.0554 Tj
-0 -227.8407 Td
-(5771 void) 39.3166 Tj
-0 -237.334 Td
-(5772 lapiceoi\(void\)) 83.0018 Tj
-0 -246.8274 Td
-(5773 {) 26.2111 Tj
-0 -256.3207 Td
-(5774   if\(lapic\)) 69.8962 Tj
-0 -265.8141 Td
-(5775     lapicw\(EOI, 0\);) 104.8443 Tj
-0 -275.3075 Td
-(5776 }) 26.2111 Tj
-0 -284.8008 Td
-(5777 ) 21.8426 Tj
-0 -294.2942 Td
-(5778 // Spin for a given number of microseconds.) 209.6887 Tj
-0 -303.7875 Td
-(5779 // On real hardware would want to tune this dynamically.) 266.4794 Tj
-0 -313.2809 Td
-(5780 void) 39.3166 Tj
-0 -322.7743 Td
-(5781 microdelay\(int us\)) 100.4758 Tj
-0 -332.2676 Td
-(5782 {) 26.2111 Tj
-0 -341.761 Td
-(5783 }) 26.2111 Tj
-0 -351.2543 Td
-(5784 ) 21.8426 Tj
-0 -360.7477 Td
-(5785 ) 21.8426 Tj
-0 -370.2411 Td
-(5786 #define IO_RTC  0x70) 109.2129 Tj
-0 -379.7344 Td
-(5787 ) 21.8426 Tj
-0 -389.2278 Td
-(5788 // Start additional processor running bootstrap code at ad\
-dr.) 288.322 Tj
-0 -398.7211 Td
-(5789 // See Appendix B of MultiProcessor Specification.) 240.2683 Tj
-0 -408.2145 Td
-(5790 void) 39.3166 Tj
-0 -417.7079 Td
-(5791 lapicstartap\(uchar apicid, uint addr\)) 183.4776 Tj
-0 -427.2012 Td
-(5792 {) 26.2111 Tj
-0 -436.6946 Td
-(5793   int i;) 56.7907 Tj
-0 -446.1879 Td
-(5794   ushort *wrv;) 83.0018 Tj
-0 -455.6813 Td
-(5795 ) 21.8426 Tj
-0 -465.1747 Td
-(5796   // "The BSP must initialize CMOS shutdown code to 0AH) 262.1109 Tj
-0 -474.668 Td
-(5797   // and the warm reset vector \(DWORD based at 40:67\) to\
- point at) 305.796 Tj
-0 -484.1614 Td
-(5798   // the AP startup code prior to the [universal startup a\
-lgorithm].") 323.2701 Tj
-0 -493.6547 Td
-(5799   outb\(IO_RTC, 0xF\);  // offset 0xF is shutdown code) 249.0053 Tj
-0 -522.1348 Td
-(Sheet 57) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 65 65
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/lapic.c  Page 4) 166.0035 Tj
-0 -28.4801 Td
-(5800   outb\(IO_RTC+1, 0x0A\);) 122.3184 Tj
-0 -37.9735 Td
-(5801   wrv = \(ushort*\)\(0x40<<4 | 0x67\);  // Warm reset vect\
-or) 266.4794 Tj
-0 -47.4668 Td
-(5802   wrv[0] = 0;) 78.6333 Tj
-0 -56.9602 Td
-(5803   wrv[1] = addr >> 4;) 113.5814 Tj
-0 -66.4535 Td
-(5804 ) 21.8426 Tj
-0 -75.9469 Td
-(5805   // "Universal startup algorithm.") 174.7406 Tj
-0 -85.4403 Td
-(5806   // Send INIT \(level-triggered\) interrupt to reset othe\
-r CPU.) 292.6905 Tj
-0 -94.9336 Td
-(5807   lapicw\(ICRHI, apicid<<24\);) 144.161 Tj
-0 -104.427 Td
-(5808   lapicw\(ICRLO, INIT | LEVEL | ASSERT\);) 192.2146 Tj
-0 -113.9203 Td
-(5809   microdelay\(200\);) 100.4758 Tj
-0 -123.4137 Td
-(5810   lapicw\(ICRLO, INIT | LEVEL\);) 152.898 Tj
-0 -132.9071 Td
-(5811   microdelay\(100\);    // should be 10ms, but too slow in\
- Bochs!) 297.059 Tj
-0 -142.4004 Td
-(5812 ) 21.8426 Tj
-0 -151.8938 Td
-(5813   // Send startup IPI \(twice!\) to enter bootstrap code.) 262.1109 Tj
-0 -161.3871 Td
-(5814   // Regular hardware is supposed to only accept a STARTUP) 275.2164 Tj
-0 -170.8805 Td
-(5815   // when it is in the halted state due to an INIT.  So th\
-e second) 310.1645 Tj
-0 -180.3739 Td
-(5816   // should be ignored, but it is part of the official Int\
-el algorithm.) 332.0071 Tj
-0 -189.8672 Td
-(5817   // Bochs complains about the second one.  Too bad for Bo\
-chs.) 292.6905 Tj
-0 -199.3606 Td
-(5818   for\(i = 0; i < 2; i++\){) 131.0554 Tj
-0 -208.8539 Td
-(5819     lapicw\(ICRHI, apicid<<24\);) 152.898 Tj
-0 -218.3473 Td
-(5820     lapicw\(ICRLO, STARTUP | \(addr>>12\)\);) 196.5831 Tj
-0 -227.8407 Td
-(5821     microdelay\(200\);) 109.2129 Tj
-0 -237.334 Td
-(5822   }) 34.9481 Tj
-0 -246.8274 Td
-(5823 }) 26.2111 Tj
-0 -256.3207 Td
-(5824 ) 21.8426 Tj
-0 -265.8141 Td
-(5825 ) 21.8426 Tj
-0 -275.3075 Td
-(5826 ) 21.8426 Tj
-0 -284.8008 Td
-(5827 ) 21.8426 Tj
-0 -294.2942 Td
-(5828 ) 21.8426 Tj
-0 -303.7875 Td
-(5829 ) 21.8426 Tj
-0 -313.2809 Td
-(5830 ) 21.8426 Tj
-0 -322.7743 Td
-(5831 ) 21.8426 Tj
-0 -332.2676 Td
-(5832 ) 21.8426 Tj
-0 -341.761 Td
-(5833 ) 21.8426 Tj
-0 -351.2543 Td
-(5834 ) 21.8426 Tj
-0 -360.7477 Td
-(5835 ) 21.8426 Tj
-0 -370.2411 Td
-(5836 ) 21.8426 Tj
-0 -379.7344 Td
-(5837 ) 21.8426 Tj
-0 -389.2278 Td
-(5838 ) 21.8426 Tj
-0 -398.7211 Td
-(5839 ) 21.8426 Tj
-0 -408.2145 Td
-(5840 ) 21.8426 Tj
-0 -417.7079 Td
-(5841 ) 21.8426 Tj
-0 -427.2012 Td
-(5842 ) 21.8426 Tj
-0 -436.6946 Td
-(5843 ) 21.8426 Tj
-0 -446.1879 Td
-(5844 ) 21.8426 Tj
-0 -455.6813 Td
-(5845 ) 21.8426 Tj
-0 -465.1747 Td
-(5846 ) 21.8426 Tj
-0 -474.668 Td
-(5847 ) 21.8426 Tj
-0 -484.1614 Td
-(5848 ) 21.8426 Tj
-0 -493.6547 Td
-(5849 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 58) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/ioapic.c  Page 1) 170.3721 Tj
-0 -28.4801 Td
-(5850 // The I/O APIC manages hardware interrupts for an SMP sys\
-tem.) 292.6905 Tj
-0 -37.9735 Td
-(5851 // http://www.intel.com/design/chipsets/datashts/29056601.\
-pdf) 288.322 Tj
-0 -47.4668 Td
-(5852 // See also picirq.c.) 113.5814 Tj
-0 -56.9602 Td
-(5853 ) 21.8426 Tj
-0 -66.4535 Td
-(5854 #include "types.h") 100.4758 Tj
-0 -75.9469 Td
-(5855 #include "defs.h") 96.1073 Tj
-0 -85.4403 Td
-(5856 #include "traps.h") 100.4758 Tj
-0 -94.9336 Td
-(5857 ) 21.8426 Tj
-0 -104.427 Td
-(5858 #define IOAPIC  0xFEC00000   // Default physical address o\
-f IO APIC) 314.533 Tj
-0 -113.9203 Td
-(5859 ) 21.8426 Tj
-0 -123.4137 Td
-(5860 #define REG_ID     0x00  // Register index: ID) 222.7942 Tj
-0 -132.9071 Td
-(5861 #define REG_VER    0x01  // Register index: version) 244.6368 Tj
-0 -142.4004 Td
-(5862 #define REG_TABLE  0x10  // Redirection table base) 240.2683 Tj
-0 -151.8938 Td
-(5863 ) 21.8426 Tj
-0 -161.3871 Td
-(5864 // The redirection table starts at REG_TABLE and uses) 253.3738 Tj
-0 -170.8805 Td
-(5865 // two registers to configure each interrupt.) 218.4257 Tj
-0 -180.3739 Td
-(5866 // The first \(low\) register in a pair contains configura\
-tion bits.) 310.1645 Tj
-0 -189.8672 Td
-(5867 // The second \(high\) register contains a bitmask telling\
- which) 292.6905 Tj
-0 -199.3606 Td
-(5868 // CPUs can serve that interrupt.) 166.0035 Tj
-0 -208.8539 Td
-(5869 #define INT_DISABLED   0x00010000  // Interrupt disabled) 266.4794 Tj
-0 -218.3473 Td
-(5870 #define INT_LEVEL      0x00008000  // Level-triggered \(vs\
- edge-\)) 301.4275 Tj
-0 -227.8407 Td
-(5871 #define INT_ACTIVELOW  0x00002000  // Active low \(vs high\
-\)) 275.2164 Tj
-0 -237.334 Td
-(5872 #define INT_LOGICAL    0x00000800  // Destination is CPU i\
-d \(vs APIC ID\)) 336.3756 Tj
-0 -246.8274 Td
-(5873 ) 21.8426 Tj
-0 -256.3207 Td
-(5874 volatile struct ioapic *ioapic;) 157.2665 Tj
-0 -265.8141 Td
-(5875 ) 21.8426 Tj
-0 -275.3075 Td
-(5876 // IO APIC MMIO structure: write reg, then read or write d\
-ata.) 292.6905 Tj
-0 -284.8008 Td
-(5877 struct ioapic {) 87.3703 Tj
-0 -294.2942 Td
-(5878   uint reg;) 69.8962 Tj
-0 -303.7875 Td
-(5879   uint pad[3];) 83.0018 Tj
-0 -313.2809 Td
-(5880   uint data;) 74.2647 Tj
-0 -322.7743 Td
-(5881 };) 30.5796 Tj
-0 -332.2676 Td
-(5882 ) 21.8426 Tj
-0 -341.761 Td
-(5883 static uint) 69.8962 Tj
-0 -351.2543 Td
-(5884 ioapicread\(int reg\)) 104.8443 Tj
-0 -360.7477 Td
-(5885 {) 26.2111 Tj
-0 -370.2411 Td
-(5886   ioapic->reg = reg;) 109.2129 Tj
-0 -379.7344 Td
-(5887   return ioapic->data;) 117.9499 Tj
-0 -389.2278 Td
-(5888 }) 26.2111 Tj
-0 -398.7211 Td
-(5889 ) 21.8426 Tj
-0 -408.2145 Td
-(5890 static void) 69.8962 Tj
-0 -417.7079 Td
-(5891 ioapicwrite\(int reg, uint data\)) 157.2665 Tj
-0 -427.2012 Td
-(5892 {) 26.2111 Tj
-0 -436.6946 Td
-(5893   ioapic->reg = reg;) 109.2129 Tj
-0 -446.1879 Td
-(5894   ioapic->data = data;) 117.9499 Tj
-0 -455.6813 Td
-(5895 }) 26.2111 Tj
-0 -465.1747 Td
-(5896 ) 21.8426 Tj
-0 -474.668 Td
-(5897 ) 21.8426 Tj
-0 -484.1614 Td
-(5898 ) 21.8426 Tj
-0 -493.6547 Td
-(5899 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 58) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 66 66
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/ioapic.c  Page 2) 170.3721 Tj
-0 -28.4801 Td
-(5900 void) 39.3166 Tj
-0 -37.9735 Td
-(5901 ioapicinit\(void\)) 91.7388 Tj
-0 -47.4668 Td
-(5902 {) 26.2111 Tj
-0 -56.9602 Td
-(5903   int i, id, maxintr;) 113.5814 Tj
-0 -66.4535 Td
-(5904 ) 21.8426 Tj
-0 -75.9469 Td
-(5905   if\(!ismp\)) 69.8962 Tj
-0 -85.4403 Td
-(5906     return;) 69.8962 Tj
-0 -94.9336 Td
-(5907 ) 21.8426 Tj
-0 -104.427 Td
-(5908   ioapic = \(volatile struct ioapic*\)IOAPIC;) 209.6887 Tj
-0 -113.9203 Td
-(5909   maxintr = \(ioapicread\(REG_VER\) >> 16\) & 0xFF;) 227.1628 Tj
-0 -123.4137 Td
-(5910   id = ioapicread\(REG_ID\) >> 24;) 161.635 Tj
-0 -132.9071 Td
-(5911   if\(id != ioapicid\)) 109.2129 Tj
-0 -142.4004 Td
-(5912     cprintf\("ioapicinit: id isn't equal to ioapicid; not \
-a MP\\n"\);) 310.1645 Tj
-0 -151.8938 Td
-(5913 ) 21.8426 Tj
-0 -161.3871 Td
-(5914   // Mark all interrupts edge-triggered, active high, disa\
-bled,) 297.059 Tj
-0 -170.8805 Td
-(5915   // and not routed to any CPUs.) 161.635 Tj
-0 -180.3739 Td
-(5916   for\(i = 0; i <= maxintr; i++\){) 161.635 Tj
-0 -189.8672 Td
-(5917     ioapicwrite\(REG_TABLE+2*i, INT_DISABLED | \(T_IRQ0 + \
-i\)\);) 283.9534 Tj
-0 -199.3606 Td
-(5918     ioapicwrite\(REG_TABLE+2*i+1, 0\);) 179.1091 Tj
-0 -208.8539 Td
-(5919   }) 34.9481 Tj
-0 -218.3473 Td
-(5920 }) 26.2111 Tj
-0 -227.8407 Td
-(5921 ) 21.8426 Tj
-0 -237.334 Td
-(5922 void) 39.3166 Tj
-0 -246.8274 Td
-(5923 ioapicenable\(int irq, int cpunum\)) 166.0035 Tj
-0 -256.3207 Td
-(5924 {) 26.2111 Tj
-0 -265.8141 Td
-(5925   if\(!ismp\)) 69.8962 Tj
-0 -275.3075 Td
-(5926     return;) 69.8962 Tj
-0 -284.8008 Td
-(5927 ) 21.8426 Tj
-0 -294.2942 Td
-(5928   // Mark interrupt edge-triggered, active high,) 231.5313 Tj
-0 -303.7875 Td
-(5929   // enabled, and routed to the given cpunum,) 218.4257 Tj
-0 -313.2809 Td
-(5930   // which happens to be that cpu's APIC ID.) 214.0572 Tj
-0 -322.7743 Td
-(5931   ioapicwrite\(REG_TABLE+2*irq, T_IRQ0 + irq\);) 218.4257 Tj
-0 -332.2676 Td
-(5932   ioapicwrite\(REG_TABLE+2*irq+1, cpunum << 24\);) 227.1628 Tj
-0 -341.761 Td
-(5933 }) 26.2111 Tj
-0 -351.2543 Td
-(5934 ) 21.8426 Tj
-0 -360.7477 Td
-(5935 ) 21.8426 Tj
-0 -370.2411 Td
-(5936 ) 21.8426 Tj
-0 -379.7344 Td
-(5937 ) 21.8426 Tj
-0 -389.2278 Td
-(5938 ) 21.8426 Tj
-0 -398.7211 Td
-(5939 ) 21.8426 Tj
-0 -408.2145 Td
-(5940 ) 21.8426 Tj
-0 -417.7079 Td
-(5941 ) 21.8426 Tj
-0 -427.2012 Td
-(5942 ) 21.8426 Tj
-0 -436.6946 Td
-(5943 ) 21.8426 Tj
-0 -446.1879 Td
-(5944 ) 21.8426 Tj
-0 -455.6813 Td
-(5945 ) 21.8426 Tj
-0 -465.1747 Td
-(5946 ) 21.8426 Tj
-0 -474.668 Td
-(5947 ) 21.8426 Tj
-0 -484.1614 Td
-(5948 ) 21.8426 Tj
-0 -493.6547 Td
-(5949 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 59) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/picirq.c  Page 1) 170.3721 Tj
-0 -28.4801 Td
-(5950 // Intel 8259A programmable interrupt controllers.) 240.2683 Tj
-0 -37.9735 Td
-(5951 ) 21.8426 Tj
-0 -47.4668 Td
-(5952 #include "types.h") 100.4758 Tj
-0 -56.9602 Td
-(5953 #include "x86.h") 91.7388 Tj
-0 -66.4535 Td
-(5954 #include "traps.h") 100.4758 Tj
-0 -75.9469 Td
-(5955 ) 21.8426 Tj
-0 -85.4403 Td
-(5956 // I/O Addresses of the two programmable interrupt control\
-lers) 292.6905 Tj
-0 -94.9336 Td
-(5957 #define IO_PIC1         0x20    // Master \(IRQs 0-7\)) 249.0053 Tj
-0 -104.427 Td
-(5958 #define IO_PIC2         0xA0    // Slave \(IRQs 8-15\)) 249.0053 Tj
-0 -113.9203 Td
-(5959 ) 21.8426 Tj
-0 -123.4137 Td
-(5960 #define IRQ_SLAVE       2       // IRQ at which slave conn\
-ects to master) 336.3756 Tj
-0 -132.9071 Td
-(5961 ) 21.8426 Tj
-0 -142.4004 Td
-(5962 // Current IRQ mask.) 109.2129 Tj
-0 -151.8938 Td
-(5963 // Initial IRQ mask has interrupt 2 enabled \(for slave 82\
-59A\).) 292.6905 Tj
-0 -161.3871 Td
-(5964 static ushort irqmask = 0xFFFF & ~\(1<<IRQ_SLAVE\);) 235.8998 Tj
-0 -170.8805 Td
-(5965 ) 21.8426 Tj
-0 -180.3739 Td
-(5966 static void) 69.8962 Tj
-0 -189.8672 Td
-(5967 picsetmask\(ushort mask\)) 122.3184 Tj
-0 -199.3606 Td
-(5968 {) 26.2111 Tj
-0 -208.8539 Td
-(5969   irqmask = mask;) 96.1073 Tj
-0 -218.3473 Td
-(5970   outb\(IO_PIC1+1, mask\);) 126.6869 Tj
-0 -227.8407 Td
-(5971   outb\(IO_PIC2+1, mask >> 8\);) 148.5295 Tj
-0 -237.334 Td
-(5972 }) 26.2111 Tj
-0 -246.8274 Td
-(5973 ) 21.8426 Tj
-0 -256.3207 Td
-(5974 void) 39.3166 Tj
-0 -265.8141 Td
-(5975 picenable\(int irq\)) 100.4758 Tj
-0 -275.3075 Td
-(5976 {) 26.2111 Tj
-0 -284.8008 Td
-(5977   picsetmask\(irqmask & ~\(1<<irq\)\);) 170.3721 Tj
-0 -294.2942 Td
-(5978 }) 26.2111 Tj
-0 -303.7875 Td
-(5979 ) 21.8426 Tj
-0 -313.2809 Td
-(5980 // Initialize the 8259A interrupt controllers.) 222.7942 Tj
-0 -322.7743 Td
-(5981 void) 39.3166 Tj
-0 -332.2676 Td
-(5982 picinit\(void\)) 78.6333 Tj
-0 -341.761 Td
-(5983 {) 26.2111 Tj
-0 -351.2543 Td
-(5984   // mask all interrupts) 126.6869 Tj
-0 -360.7477 Td
-(5985   outb\(IO_PIC1+1, 0xFF\);) 126.6869 Tj
-0 -370.2411 Td
-(5986   outb\(IO_PIC2+1, 0xFF\);) 126.6869 Tj
-0 -379.7344 Td
-(5987 ) 21.8426 Tj
-0 -389.2278 Td
-(5988   // Set up master \(8259A-1\)) 144.161 Tj
-0 -398.7211 Td
-(5989 ) 21.8426 Tj
-0 -408.2145 Td
-(5990   // ICW1:  0001g0hi) 109.2129 Tj
-0 -417.7079 Td
-(5991   //    g:  0 = edge triggering, 1 = level triggering) 253.3738 Tj
-0 -427.2012 Td
-(5992   //    h:  0 = cascaded PICs, 1 = master only) 222.7942 Tj
-0 -436.6946 Td
-(5993   //    i:  0 = no ICW4, 1 = ICW4 required) 205.3202 Tj
-0 -446.1879 Td
-(5994   outb\(IO_PIC1, 0x11\);) 117.9499 Tj
-0 -455.6813 Td
-(5995 ) 21.8426 Tj
-0 -465.1747 Td
-(5996   // ICW2:  Vector offset) 131.0554 Tj
-0 -474.668 Td
-(5997   outb\(IO_PIC1+1, T_IRQ0\);) 135.4239 Tj
-0 -484.1614 Td
-(5998 ) 21.8426 Tj
-0 -493.6547 Td
-(5999 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 59) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 67 67
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/picirq.c  Page 2) 170.3721 Tj
-0 -28.4801 Td
-(6000   // ICW3:  \(master PIC\) bit mask of IR lines connected \
-to slaves) 305.796 Tj
-0 -37.9735 Td
-(6001   //        \(slave PIC\) 3-bit # of slave's connection to\
- master) 297.059 Tj
-0 -47.4668 Td
-(6002   outb\(IO_PIC1+1, 1<<IRQ_SLAVE\);) 161.635 Tj
-0 -56.9602 Td
-(6003 ) 21.8426 Tj
-0 -66.4535 Td
-(6004   // ICW4:  000nbmap) 109.2129 Tj
-0 -75.9469 Td
-(6005   //    n:  1 = special fully nested mode) 200.9517 Tj
-0 -85.4403 Td
-(6006   //    b:  1 = buffered mode) 148.5295 Tj
-0 -94.9336 Td
-(6007   //    m:  0 = slave PIC, 1 = master PIC) 200.9517 Tj
-0 -104.427 Td
-(6008   //      \(ignored when b is 0, as the master/slave role) 266.4794 Tj
-0 -113.9203 Td
-(6009   //      can be hardwired\).) 144.161 Tj
-0 -123.4137 Td
-(6010   //    a:  1 = Automatic EOI mode) 170.3721 Tj
-0 -132.9071 Td
-(6011   //    p:  0 = MCS-80/85 mode, 1 = intel x86 mode) 240.2683 Tj
-0 -142.4004 Td
-(6012   outb\(IO_PIC1+1, 0x3\);) 122.3184 Tj
-0 -151.8938 Td
-(6013 ) 21.8426 Tj
-0 -161.3871 Td
-(6014   // Set up slave \(8259A-2\)) 139.7925 Tj
-0 -170.8805 Td
-(6015   outb\(IO_PIC2, 0x11\);                  // ICW1) 227.1628 Tj
-0 -180.3739 Td
-(6016   outb\(IO_PIC2+1, T_IRQ0 + 8\);      // ICW2) 209.6887 Tj
-0 -189.8672 Td
-(6017   outb\(IO_PIC2+1, IRQ_SLAVE\);           // ICW3) 227.1628 Tj
-0 -199.3606 Td
-(6018   // NB Automatic EOI mode doesn't tend to work on the sla\
-ve.) 288.322 Tj
-0 -208.8539 Td
-(6019   // Linux source code says it's "to be investigated".) 257.7424 Tj
-0 -218.3473 Td
-(6020   outb\(IO_PIC2+1, 0x3\);                 // ICW4) 227.1628 Tj
-0 -227.8407 Td
-(6021 ) 21.8426 Tj
-0 -237.334 Td
-(6022   // OCW3:  0ef01prs) 109.2129 Tj
-0 -246.8274 Td
-(6023   //   ef:  0x = NOP, 10 = clear specific mask, 11 = set s\
-pecific mask) 327.6386 Tj
-0 -256.3207 Td
-(6024   //    p:  0 = no polling, 1 = polling mode) 214.0572 Tj
-0 -265.8141 Td
-(6025   //   rs:  0x = NOP, 10 = read IRR, 11 = read ISR) 240.2683 Tj
-0 -275.3075 Td
-(6026   outb\(IO_PIC1, 0x68\);             // clear specific mas\
-k) 270.8479 Tj
-0 -284.8008 Td
-(6027   outb\(IO_PIC1, 0x0a\);             // read IRR by defaul\
-t) 270.8479 Tj
-0 -294.2942 Td
-(6028 ) 21.8426 Tj
-0 -303.7875 Td
-(6029   outb\(IO_PIC2, 0x68\);             // OCW3) 205.3202 Tj
-0 -313.2809 Td
-(6030   outb\(IO_PIC2, 0x0a\);             // OCW3) 205.3202 Tj
-0 -322.7743 Td
-(6031 ) 21.8426 Tj
-0 -332.2676 Td
-(6032   if\(irqmask != 0xFFFF\)) 122.3184 Tj
-0 -341.761 Td
-(6033     picsetmask\(irqmask\);) 126.6869 Tj
-0 -351.2543 Td
-(6034 }) 26.2111 Tj
-0 -360.7477 Td
-(6035 ) 21.8426 Tj
-0 -370.2411 Td
-(6036 ) 21.8426 Tj
-0 -379.7344 Td
-(6037 ) 21.8426 Tj
-0 -389.2278 Td
-(6038 ) 21.8426 Tj
-0 -398.7211 Td
-(6039 ) 21.8426 Tj
-0 -408.2145 Td
-(6040 ) 21.8426 Tj
-0 -417.7079 Td
-(6041 ) 21.8426 Tj
-0 -427.2012 Td
-(6042 ) 21.8426 Tj
-0 -436.6946 Td
-(6043 ) 21.8426 Tj
-0 -446.1879 Td
-(6044 ) 21.8426 Tj
-0 -455.6813 Td
-(6045 ) 21.8426 Tj
-0 -465.1747 Td
-(6046 ) 21.8426 Tj
-0 -474.668 Td
-(6047 ) 21.8426 Tj
-0 -484.1614 Td
-(6048 ) 21.8426 Tj
-0 -493.6547 Td
-(6049 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 60) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/picirq.c  Page 3) 170.3721 Tj
-0 -28.4801 Td
-(6050 // Blank page.) 83.0018 Tj
-0 -37.9735 Td
-(6051 ) 21.8426 Tj
-0 -47.4668 Td
-(6052 ) 21.8426 Tj
-0 -56.9602 Td
-(6053 ) 21.8426 Tj
-0 -66.4535 Td
-(6054 ) 21.8426 Tj
-0 -75.9469 Td
-(6055 ) 21.8426 Tj
-0 -85.4403 Td
-(6056 ) 21.8426 Tj
-0 -94.9336 Td
-(6057 ) 21.8426 Tj
-0 -104.427 Td
-(6058 ) 21.8426 Tj
-0 -113.9203 Td
-(6059 ) 21.8426 Tj
-0 -123.4137 Td
-(6060 ) 21.8426 Tj
-0 -132.9071 Td
-(6061 ) 21.8426 Tj
-0 -142.4004 Td
-(6062 ) 21.8426 Tj
-0 -151.8938 Td
-(6063 ) 21.8426 Tj
-0 -161.3871 Td
-(6064 ) 21.8426 Tj
-0 -170.8805 Td
-(6065 ) 21.8426 Tj
-0 -180.3739 Td
-(6066 ) 21.8426 Tj
-0 -189.8672 Td
-(6067 ) 21.8426 Tj
-0 -199.3606 Td
-(6068 ) 21.8426 Tj
-0 -208.8539 Td
-(6069 ) 21.8426 Tj
-0 -218.3473 Td
-(6070 ) 21.8426 Tj
-0 -227.8407 Td
-(6071 ) 21.8426 Tj
-0 -237.334 Td
-(6072 ) 21.8426 Tj
-0 -246.8274 Td
-(6073 ) 21.8426 Tj
-0 -256.3207 Td
-(6074 ) 21.8426 Tj
-0 -265.8141 Td
-(6075 ) 21.8426 Tj
-0 -275.3075 Td
-(6076 ) 21.8426 Tj
-0 -284.8008 Td
-(6077 ) 21.8426 Tj
-0 -294.2942 Td
-(6078 ) 21.8426 Tj
-0 -303.7875 Td
-(6079 ) 21.8426 Tj
-0 -313.2809 Td
-(6080 ) 21.8426 Tj
-0 -322.7743 Td
-(6081 ) 21.8426 Tj
-0 -332.2676 Td
-(6082 ) 21.8426 Tj
-0 -341.761 Td
-(6083 ) 21.8426 Tj
-0 -351.2543 Td
-(6084 ) 21.8426 Tj
-0 -360.7477 Td
-(6085 ) 21.8426 Tj
-0 -370.2411 Td
-(6086 ) 21.8426 Tj
-0 -379.7344 Td
-(6087 ) 21.8426 Tj
-0 -389.2278 Td
-(6088 ) 21.8426 Tj
-0 -398.7211 Td
-(6089 ) 21.8426 Tj
-0 -408.2145 Td
-(6090 ) 21.8426 Tj
-0 -417.7079 Td
-(6091 ) 21.8426 Tj
-0 -427.2012 Td
-(6092 ) 21.8426 Tj
-0 -436.6946 Td
-(6093 ) 21.8426 Tj
-0 -446.1879 Td
-(6094 ) 21.8426 Tj
-0 -455.6813 Td
-(6095 ) 21.8426 Tj
-0 -465.1747 Td
-(6096 ) 21.8426 Tj
-0 -474.668 Td
-(6097 ) 21.8426 Tj
-0 -484.1614 Td
-(6098 ) 21.8426 Tj
-0 -493.6547 Td
-(6099 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 60) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 68 68
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/kbd.h  Page 1) 157.2665 Tj
-0 -28.4801 Td
-(6100 // PC keyboard interface constants) 170.3721 Tj
-0 -37.9735 Td
-(6101 ) 21.8426 Tj
-0 -47.4668 Td
-(6102 #define KBSTATP         0x64    // kbd controller status p\
-ort\(I\)) 301.4275 Tj
-0 -56.9602 Td
-(6103 #define KBS_DIB         0x01    // kbd data in buffer) 253.3738 Tj
-0 -66.4535 Td
-(6104 #define KBDATAP         0x60    // kbd data port\(I\)) 244.6368 Tj
-0 -75.9469 Td
-(6105 ) 21.8426 Tj
-0 -85.4403 Td
-(6106 #define NO              0) 131.0554 Tj
-0 -94.9336 Td
-(6107 ) 21.8426 Tj
-0 -104.427 Td
-(6108 #define SHIFT           \(1<<0\)) 152.898 Tj
-0 -113.9203 Td
-(6109 #define CTL             \(1<<1\)) 152.898 Tj
-0 -123.4137 Td
-(6110 #define ALT             \(1<<2\)) 152.898 Tj
-0 -132.9071 Td
-(6111 ) 21.8426 Tj
-0 -142.4004 Td
-(6112 #define CAPSLOCK        \(1<<3\)) 152.898 Tj
-0 -151.8938 Td
-(6113 #define NUMLOCK         \(1<<4\)) 152.898 Tj
-0 -161.3871 Td
-(6114 #define SCROLLLOCK      \(1<<5\)) 152.898 Tj
-0 -170.8805 Td
-(6115 ) 21.8426 Tj
-0 -180.3739 Td
-(6116 #define E0ESC           \(1<<6\)) 152.898 Tj
-0 -189.8672 Td
-(6117 ) 21.8426 Tj
-0 -199.3606 Td
-(6118 // Special keycodes) 104.8443 Tj
-0 -208.8539 Td
-(6119 #define KEY_HOME        0xE0) 144.161 Tj
-0 -218.3473 Td
-(6120 #define KEY_END         0xE1) 144.161 Tj
-0 -227.8407 Td
-(6121 #define KEY_UP          0xE2) 144.161 Tj
-0 -237.334 Td
-(6122 #define KEY_DN          0xE3) 144.161 Tj
-0 -246.8274 Td
-(6123 #define KEY_LF          0xE4) 144.161 Tj
-0 -256.3207 Td
-(6124 #define KEY_RT          0xE5) 144.161 Tj
-0 -265.8141 Td
-(6125 #define KEY_PGUP        0xE6) 144.161 Tj
-0 -275.3075 Td
-(6126 #define KEY_PGDN        0xE7) 144.161 Tj
-0 -284.8008 Td
-(6127 #define KEY_INS         0xE8) 144.161 Tj
-0 -294.2942 Td
-(6128 #define KEY_DEL         0xE9) 144.161 Tj
-0 -303.7875 Td
-(6129 ) 21.8426 Tj
-0 -313.2809 Td
-(6130 // C\('A'\) == Control-A) 117.9499 Tj
-0 -322.7743 Td
-(6131 #define C\(x\) \(x - '@'\)) 117.9499 Tj
-0 -332.2676 Td
-(6132 ) 21.8426 Tj
-0 -341.761 Td
-(6133 static uchar shiftcode[256] =) 148.5295 Tj
-0 -351.2543 Td
-(6134 {) 26.2111 Tj
-0 -360.7477 Td
-(6135   [0x1D] CTL,) 78.6333 Tj
-0 -370.2411 Td
-(6136   [0x2A] SHIFT,) 87.3703 Tj
-0 -379.7344 Td
-(6137   [0x36] SHIFT,) 87.3703 Tj
-0 -389.2278 Td
-(6138   [0x38] ALT,) 78.6333 Tj
-0 -398.7211 Td
-(6139   [0x9D] CTL,) 78.6333 Tj
-0 -408.2145 Td
-(6140   [0xB8] ALT) 74.2647 Tj
-0 -417.7079 Td
-(6141 };) 30.5796 Tj
-0 -427.2012 Td
-(6142 ) 21.8426 Tj
-0 -436.6946 Td
-(6143 static uchar togglecode[256] =) 152.898 Tj
-0 -446.1879 Td
-(6144 {) 26.2111 Tj
-0 -455.6813 Td
-(6145   [0x3A] CAPSLOCK,) 100.4758 Tj
-0 -465.1747 Td
-(6146   [0x45] NUMLOCK,) 96.1073 Tj
-0 -474.668 Td
-(6147   [0x46] SCROLLLOCK) 104.8443 Tj
-0 -484.1614 Td
-(6148 };) 30.5796 Tj
-0 -493.6547 Td
-(6149 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 61) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/kbd.h  Page 2) 157.2665 Tj
-0 -28.4801 Td
-(6150 static uchar normalmap[256] =) 148.5295 Tj
-0 -37.9735 Td
-(6151 {) 26.2111 Tj
-0 -47.4668 Td
-(6152   NO,   0x1B, '1',  '2',  '3',  '4',  '5',  '6',  // 0x00) 270.8479 Tj
-0 -56.9602 Td
-(6153   '7',  '8',  '9',  '0',  '-',  '=',  '\\b', '\\t',) 235.8998 Tj
-0 -66.4535 Td
-(6154   'q',  'w',  'e',  'r',  't',  'y',  'u',  'i',  // 0x10) 270.8479 Tj
-0 -75.9469 Td
-(6155   'o',  'p',  '[',  ']',  '\\n', NO,   'a',  's',) 231.5313 Tj
-0 -85.4403 Td
-(6156   'd',  'f',  'g',  'h',  'j',  'k',  'l',  ';',  // 0x20) 270.8479 Tj
-0 -94.9336 Td
-(6157   '\\'', '`',  NO,   '\\\\', 'z',  'x',  'c',  'v',) 231.5313 Tj
-0 -104.427 Td
-(6158   'b',  'n',  'm',  ',',  '.',  '/',  NO,   '*',  // 0x30) 270.8479 Tj
-0 -113.9203 Td
-(6159   NO,   ' ',  NO,   NO,   NO,   NO,   NO,   NO,) 227.1628 Tj
-0 -123.4137 Td
-(6160   NO,   NO,   NO,   NO,   NO,   NO,   NO,   '7',  // 0x40) 270.8479 Tj
-0 -132.9071 Td
-(6161   '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',) 231.5313 Tj
-0 -142.4004 Td
-(6162   '2',  '3',  '0',  '.',  NO,   NO,   NO,   NO,   // 0x50) 270.8479 Tj
-0 -151.8938 Td
-(6163   [0x9C] '\\n',      // KP_Enter) 157.2665 Tj
-0 -161.3871 Td
-(6164   [0xB5] '/',       // KP_Div) 148.5295 Tj
-0 -170.8805 Td
-(6165   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.3721 Tj
-0 -180.3739 Td
-(6166   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.1091 Tj
-0 -189.8672 Td
-(6167   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.3721 Tj
-0 -199.3606 Td
-(6168   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.7406 Tj
-0 -208.8539 Td
-(6169   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.3721 Tj
-0 -218.3473 Td
-(6170 };) 30.5796 Tj
-0 -227.8407 Td
-(6171 ) 21.8426 Tj
-0 -237.334 Td
-(6172 static uchar shiftmap[256] =) 144.161 Tj
-0 -246.8274 Td
-(6173 {) 26.2111 Tj
-0 -256.3207 Td
-(6174   NO,   033,  '!',  '@',  '#',  '$',  '%',  '^',  // 0x00) 270.8479 Tj
-0 -265.8141 Td
-(6175   '&',  '*',  '\(',  '\)',  '_',  '+',  '\\b', '\\t',) 235.8998 Tj
-0 -275.3075 Td
-(6176   'Q',  'W',  'E',  'R',  'T',  'Y',  'U',  'I',  // 0x10) 270.8479 Tj
-0 -284.8008 Td
-(6177   'O',  'P',  '{',  '}',  '\\n', NO,   'A',  'S',) 231.5313 Tj
-0 -294.2942 Td
-(6178   'D',  'F',  'G',  'H',  'J',  'K',  'L',  ':',  // 0x20) 270.8479 Tj
-0 -303.7875 Td
-(6179   '"',  '~',  NO,   '|',  'Z',  'X',  'C',  'V',) 231.5313 Tj
-0 -313.2809 Td
-(6180   'B',  'N',  'M',  '<',  '>',  '?',  NO,   '*',  // 0x30) 270.8479 Tj
-0 -322.7743 Td
-(6181   NO,   ' ',  NO,   NO,   NO,   NO,   NO,   NO,) 227.1628 Tj
-0 -332.2676 Td
-(6182   NO,   NO,   NO,   NO,   NO,   NO,   NO,   '7',  // 0x40) 270.8479 Tj
-0 -341.761 Td
-(6183   '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',) 231.5313 Tj
-0 -351.2543 Td
-(6184   '2',  '3',  '0',  '.',  NO,   NO,   NO,   NO,   // 0x50) 270.8479 Tj
-0 -360.7477 Td
-(6185   [0x9C] '\\n',      // KP_Enter) 157.2665 Tj
-0 -370.2411 Td
-(6186   [0xB5] '/',       // KP_Div) 148.5295 Tj
-0 -379.7344 Td
-(6187   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.3721 Tj
-0 -389.2278 Td
-(6188   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.1091 Tj
-0 -398.7211 Td
-(6189   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.3721 Tj
-0 -408.2145 Td
-(6190   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.7406 Tj
-0 -417.7079 Td
-(6191   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.3721 Tj
-0 -427.2012 Td
-(6192 };) 30.5796 Tj
-0 -436.6946 Td
-(6193 ) 21.8426 Tj
-0 -446.1879 Td
-(6194 ) 21.8426 Tj
-0 -455.6813 Td
-(6195 ) 21.8426 Tj
-0 -465.1747 Td
-(6196 ) 21.8426 Tj
-0 -474.668 Td
-(6197 ) 21.8426 Tj
-0 -484.1614 Td
-(6198 ) 21.8426 Tj
-0 -493.6547 Td
-(6199 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 61) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 69 69
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/kbd.h  Page 3) 157.2665 Tj
-0 -28.4801 Td
-(6200 static uchar ctlmap[256] =) 135.4239 Tj
-0 -37.9735 Td
-(6201 {) 26.2111 Tj
-0 -47.4668 Td
-(6202   NO,      NO,      NO,      NO,      NO,      NO,      NO\
-,      NO,) 318.9016 Tj
-0 -56.9602 Td
-(6203   NO,      NO,      NO,      NO,      NO,      NO,      NO\
-,      NO,) 318.9016 Tj
-0 -66.4535 Td
-(6204   C\('Q'\),  C\('W'\),  C\('E'\),  C\('R'\),  C\('T'\),  C\
-\('Y'\),  C\('U'\),  C\('I'\),) 336.3756 Tj
-0 -75.9469 Td
-(6205   C\('O'\),  C\('P'\),  NO,      NO,      '\\r',    NO,   \
-   C\('A'\),  C\('S'\),) 336.3756 Tj
-0 -85.4403 Td
-(6206   C\('D'\),  C\('F'\),  C\('G'\),  C\('H'\),  C\('J'\),  C\
-\('K'\),  C\('L'\),  NO,) 318.9016 Tj
-0 -94.9336 Td
-(6207   NO,      NO,      NO,      C\('\\\\'\), C\('Z'\),  C\('X\
-'\),  C\('C'\),  C\('V'\),) 336.3756 Tj
-0 -104.427 Td
-(6208   C\('B'\),  C\('N'\),  C\('M'\),  NO,      NO,      C\('/\
-'\),  NO,      NO,) 318.9016 Tj
-0 -113.9203 Td
-(6209   [0x9C] '\\r',      // KP_Enter) 157.2665 Tj
-0 -123.4137 Td
-(6210   [0xB5] C\('/'\),    // KP_Div) 148.5295 Tj
-0 -132.9071 Td
-(6211   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.3721 Tj
-0 -142.4004 Td
-(6212   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.1091 Tj
-0 -151.8938 Td
-(6213   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.3721 Tj
-0 -161.3871 Td
-(6214   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.7406 Tj
-0 -170.8805 Td
-(6215   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.3721 Tj
-0 -180.3739 Td
-(6216 };) 30.5796 Tj
-0 -189.8672 Td
-(6217 ) 21.8426 Tj
-0 -199.3606 Td
-(6218 ) 21.8426 Tj
-0 -208.8539 Td
-(6219 ) 21.8426 Tj
-0 -218.3473 Td
-(6220 ) 21.8426 Tj
-0 -227.8407 Td
-(6221 ) 21.8426 Tj
-0 -237.334 Td
-(6222 ) 21.8426 Tj
-0 -246.8274 Td
-(6223 ) 21.8426 Tj
-0 -256.3207 Td
-(6224 ) 21.8426 Tj
-0 -265.8141 Td
-(6225 ) 21.8426 Tj
-0 -275.3075 Td
-(6226 ) 21.8426 Tj
-0 -284.8008 Td
-(6227 ) 21.8426 Tj
-0 -294.2942 Td
-(6228 ) 21.8426 Tj
-0 -303.7875 Td
-(6229 ) 21.8426 Tj
-0 -313.2809 Td
-(6230 ) 21.8426 Tj
-0 -322.7743 Td
-(6231 ) 21.8426 Tj
-0 -332.2676 Td
-(6232 ) 21.8426 Tj
-0 -341.761 Td
-(6233 ) 21.8426 Tj
-0 -351.2543 Td
-(6234 ) 21.8426 Tj
-0 -360.7477 Td
-(6235 ) 21.8426 Tj
-0 -370.2411 Td
-(6236 ) 21.8426 Tj
-0 -379.7344 Td
-(6237 ) 21.8426 Tj
-0 -389.2278 Td
-(6238 ) 21.8426 Tj
-0 -398.7211 Td
-(6239 ) 21.8426 Tj
-0 -408.2145 Td
-(6240 ) 21.8426 Tj
-0 -417.7079 Td
-(6241 ) 21.8426 Tj
-0 -427.2012 Td
-(6242 ) 21.8426 Tj
-0 -436.6946 Td
-(6243 ) 21.8426 Tj
-0 -446.1879 Td
-(6244 ) 21.8426 Tj
-0 -455.6813 Td
-(6245 ) 21.8426 Tj
-0 -465.1747 Td
-(6246 ) 21.8426 Tj
-0 -474.668 Td
-(6247 ) 21.8426 Tj
-0 -484.1614 Td
-(6248 ) 21.8426 Tj
-0 -493.6547 Td
-(6249 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 62) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/kbd.c  Page 1) 157.2665 Tj
-0 -28.4801 Td
-(6250 #include "types.h") 100.4758 Tj
-0 -37.9735 Td
-(6251 #include "x86.h") 91.7388 Tj
-0 -47.4668 Td
-(6252 #include "defs.h") 96.1073 Tj
-0 -56.9602 Td
-(6253 #include "kbd.h") 91.7388 Tj
-0 -66.4535 Td
-(6254 ) 21.8426 Tj
-0 -75.9469 Td
-(6255 int) 34.9481 Tj
-0 -85.4403 Td
-(6256 kbdgetc\(void\)) 78.6333 Tj
-0 -94.9336 Td
-(6257 {) 26.2111 Tj
-0 -104.427 Td
-(6258   static uint shift;) 109.2129 Tj
-0 -113.9203 Td
-(6259   static uchar *charcode[4] = {) 157.2665 Tj
-0 -123.4137 Td
-(6260     normalmap, shiftmap, ctlmap, ctlmap) 192.2146 Tj
-0 -132.9071 Td
-(6261   };) 39.3166 Tj
-0 -142.4004 Td
-(6262   uint st, data, c;) 104.8443 Tj
-0 -151.8938 Td
-(6263 ) 21.8426 Tj
-0 -161.3871 Td
-(6264   st = inb\(KBSTATP\);) 109.2129 Tj
-0 -170.8805 Td
-(6265   if\(\(st & KBS_DIB\) == 0\)) 131.0554 Tj
-0 -180.3739 Td
-(6266     return -1;) 83.0018 Tj
-0 -189.8672 Td
-(6267   data = inb\(KBDATAP\);) 117.9499 Tj
-0 -199.3606 Td
-(6268 ) 21.8426 Tj
-0 -208.8539 Td
-(6269   if\(data == 0xE0\){) 104.8443 Tj
-0 -218.3473 Td
-(6270     shift |= E0ESC;) 104.8443 Tj
-0 -227.8407 Td
-(6271     return 0;) 78.6333 Tj
-0 -237.334 Td
-(6272   } else if\(data & 0x80\){) 131.0554 Tj
-0 -246.8274 Td
-(6273     // Key released) 104.8443 Tj
-0 -256.3207 Td
-(6274     data = \(shift & E0ESC ? data : data & 0x7F\);) 231.5313 Tj
-0 -265.8141 Td
-(6275     shift &= ~\(shiftcode[data] | E0ESC\);) 196.5831 Tj
-0 -275.3075 Td
-(6276     return 0;) 78.6333 Tj
-0 -284.8008 Td
-(6277   } else if\(shift & E0ESC\){) 139.7925 Tj
-0 -294.2942 Td
-(6278     // Last character was an E0 escape; or with 0x80) 249.0053 Tj
-0 -303.7875 Td
-(6279     data |= 0x80;) 96.1073 Tj
-0 -313.2809 Td
-(6280     shift &= ~E0ESC;) 109.2129 Tj
-0 -322.7743 Td
-(6281   }) 34.9481 Tj
-0 -332.2676 Td
-(6282 ) 21.8426 Tj
-0 -341.761 Td
-(6283   shift |= shiftcode[data];) 139.7925 Tj
-0 -351.2543 Td
-(6284   shift ^= togglecode[data];) 144.161 Tj
-0 -360.7477 Td
-(6285   c = charcode[shift & \(CTL | SHIFT\)][data];) 214.0572 Tj
-0 -370.2411 Td
-(6286   if\(shift & CAPSLOCK\){) 122.3184 Tj
-0 -379.7344 Td
-(6287     if\('a' <= c && c <= 'z'\)) 144.161 Tj
-0 -389.2278 Td
-(6288       c += 'A' - 'a';) 113.5814 Tj
-0 -398.7211 Td
-(6289     else if\('A' <= c && c <= 'Z'\)) 166.0035 Tj
-0 -408.2145 Td
-(6290       c += 'a' - 'A';) 113.5814 Tj
-0 -417.7079 Td
-(6291   }) 34.9481 Tj
-0 -427.2012 Td
-(6292   return c;) 69.8962 Tj
-0 -436.6946 Td
-(6293 }) 26.2111 Tj
-0 -446.1879 Td
-(6294 ) 21.8426 Tj
-0 -455.6813 Td
-(6295 void) 39.3166 Tj
-0 -465.1747 Td
-(6296 kbdintr\(void\)) 78.6333 Tj
-0 -474.668 Td
-(6297 {) 26.2111 Tj
-0 -484.1614 Td
-(6298   consoleintr\(kbdgetc\);) 122.3184 Tj
-0 -493.6547 Td
-(6299 }) 26.2111 Tj
-0 -522.1348 Td
-(Sheet 62) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 70 70
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/console.c  Page 1) 174.7406 Tj
-0 -28.4801 Td
-(6300 // Console input and output.) 144.161 Tj
-0 -37.9735 Td
-(6301 // Input is from the keyboard or serial port.) 218.4257 Tj
-0 -47.4668 Td
-(6302 // Output is written to the screen and serial port.) 244.6368 Tj
-0 -56.9602 Td
-(6303 ) 21.8426 Tj
-0 -66.4535 Td
-(6304 #include "types.h") 100.4758 Tj
-0 -75.9469 Td
-(6305 #include "defs.h") 96.1073 Tj
-0 -85.4403 Td
-(6306 #include "param.h") 100.4758 Tj
-0 -94.9336 Td
-(6307 #include "traps.h") 100.4758 Tj
-0 -104.427 Td
-(6308 #include "spinlock.h") 113.5814 Tj
-0 -113.9203 Td
-(6309 #include "fs.h") 87.3703 Tj
-0 -123.4137 Td
-(6310 #include "file.h") 96.1073 Tj
-0 -132.9071 Td
-(6311 #include "mmu.h") 91.7388 Tj
-0 -142.4004 Td
-(6312 #include "proc.h") 96.1073 Tj
-0 -151.8938 Td
-(6313 #include "x86.h") 91.7388 Tj
-0 -161.3871 Td
-(6314 ) 21.8426 Tj
-0 -170.8805 Td
-(6315 static void consputc\(int\);) 135.4239 Tj
-0 -180.3739 Td
-(6316 ) 21.8426 Tj
-0 -189.8672 Td
-(6317 static int panicked = 0;) 126.6869 Tj
-0 -199.3606 Td
-(6318 ) 21.8426 Tj
-0 -208.8539 Td
-(6319 static struct {) 87.3703 Tj
-0 -218.3473 Td
-(6320 ) 21.8426 Tj
--1504.73 TJm
-(struct spinlock lock;) 91.7388 Tj
-0 -227.8407 Td
-(6321 ) 21.8426 Tj
--1504.73 TJm
-(int locking;) 52.4222 Tj
-0 -237.334 Td
-(6322 } cons;) 52.4222 Tj
-0 -246.8274 Td
-(6323 ) 21.8426 Tj
-0 -256.3207 Td
-(6324 static void) 69.8962 Tj
-0 -265.8141 Td
-(6325 printint\(int xx, int base, int sgn\)) 174.7406 Tj
-0 -275.3075 Td
-(6326 {) 26.2111 Tj
-0 -284.8008 Td
-(6327   static char digits[] = "0123456789abcdef";) 214.0572 Tj
-0 -294.2942 Td
-(6328   char buf[16];) 87.3703 Tj
-0 -303.7875 Td
-(6329   int i = 0, neg = 0;) 113.5814 Tj
-0 -313.2809 Td
-(6330   uint x;) 61.1592 Tj
-0 -322.7743 Td
-(6331 ) 21.8426 Tj
-0 -332.2676 Td
-(6332   if\(sgn && xx < 0\){) 109.2129 Tj
-0 -341.761 Td
-(6333     neg = 1;) 74.2647 Tj
-0 -351.2543 Td
-(6334     x = -xx;) 74.2647 Tj
-0 -360.7477 Td
-(6335   } else) 56.7907 Tj
-0 -370.2411 Td
-(6336     x = xx;) 69.8962 Tj
-0 -379.7344 Td
-(6337 ) 21.8426 Tj
-0 -389.2278 Td
-(6338   do{) 43.6851 Tj
-0 -398.7211 Td
-(6339     buf[i++] = digits[x % base];) 161.635 Tj
-0 -408.2145 Td
-(6340   }while\(\(x /= base\) != 0\);) 139.7925 Tj
-0 -417.7079 Td
-(6341   if\(neg\)) 61.1592 Tj
-0 -427.2012 Td
-(6342     buf[i++] = '-';) 104.8443 Tj
-0 -436.6946 Td
-(6343 ) 21.8426 Tj
-0 -446.1879 Td
-(6344   while\(--i >= 0\)) 96.1073 Tj
-0 -455.6813 Td
-(6345     consputc\(buf[i]\);) 113.5814 Tj
-0 -465.1747 Td
-(6346 }) 26.2111 Tj
-0 -474.668 Td
-(6347 ) 21.8426 Tj
-0 -484.1614 Td
-(6348 ) 21.8426 Tj
-0 -493.6547 Td
-(6349 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 63) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/console.c  Page 2) 174.7406 Tj
-0 -28.4801 Td
-(6350 // Print to the console. only understands %d, %x, %p, %s.) 270.8479 Tj
-0 -37.9735 Td
-(6351 void) 39.3166 Tj
-0 -47.4668 Td
-(6352 cprintf\(char *fmt, ...\)) 122.3184 Tj
-0 -56.9602 Td
-(6353 {) 26.2111 Tj
-0 -66.4535 Td
-(6354   int i, c, state, locking;) 139.7925 Tj
-0 -75.9469 Td
-(6355   uint *argp;) 78.6333 Tj
-0 -85.4403 Td
-(6356   char *s;) 65.5277 Tj
-0 -94.9336 Td
-(6357 ) 21.8426 Tj
-0 -104.427 Td
-(6358   locking = cons.locking;) 131.0554 Tj
-0 -113.9203 Td
-(6359   if\(locking\)) 78.6333 Tj
-0 -123.4137 Td
-(6360     acquire\(&cons.lock\);) 126.6869 Tj
-0 -132.9071 Td
-(6361 ) 21.8426 Tj
-0 -142.4004 Td
-(6362   argp = \(uint*\)\(void*\)\(&fmt + 1\);) 170.3721 Tj
-0 -151.8938 Td
-(6363   state = 0;) 74.2647 Tj
-0 -161.3871 Td
-(6364   for\(i = 0; \(c = fmt[i] & 0xff\) != 0; i++\){) 214.0572 Tj
-0 -170.8805 Td
-(6365     if\(c != '%'\){) 96.1073 Tj
-0 -180.3739 Td
-(6366       consputc\(c\);) 100.4758 Tj
-0 -189.8672 Td
-(6367       continue;) 87.3703 Tj
-0 -199.3606 Td
-(6368     }) 43.6851 Tj
-0 -208.8539 Td
-(6369     c = fmt[++i] & 0xff;) 126.6869 Tj
-0 -218.3473 Td
-(6370     if\(c == 0\)) 83.0018 Tj
-0 -227.8407 Td
-(6371       break;) 74.2647 Tj
-0 -237.334 Td
-(6372     switch\(c\){) 83.0018 Tj
-0 -246.8274 Td
-(6373     case 'd':) 78.6333 Tj
-0 -256.3207 Td
-(6374       printint\(*argp++, 10, 1\);) 157.2665 Tj
-0 -265.8141 Td
-(6375       break;) 74.2647 Tj
-0 -275.3075 Td
-(6376     case 'x':) 78.6333 Tj
-0 -284.8008 Td
-(6377     case 'p':) 78.6333 Tj
-0 -294.2942 Td
-(6378       printint\(*argp++, 16, 0\);) 157.2665 Tj
-0 -303.7875 Td
-(6379       break;) 74.2647 Tj
-0 -313.2809 Td
-(6380     case 's':) 78.6333 Tj
-0 -322.7743 Td
-(6381       if\(\(s = \(char*\)*argp++\) == 0\)) 174.7406 Tj
-0 -332.2676 Td
-(6382         s = "\(null\)";) 113.5814 Tj
-0 -341.761 Td
-(6383       for\(; *s; s++\)) 109.2129 Tj
-0 -351.2543 Td
-(6384         consputc\(*s\);) 113.5814 Tj
-0 -360.7477 Td
-(6385       break;) 74.2647 Tj
-0 -370.2411 Td
-(6386     case '%':) 78.6333 Tj
-0 -379.7344 Td
-(6387       consputc\('%'\);) 109.2129 Tj
-0 -389.2278 Td
-(6388       break;) 74.2647 Tj
-0 -398.7211 Td
-(6389     default:) 74.2647 Tj
-0 -408.2145 Td
-(6390       // Print unknown % sequence to draw attention.) 249.0053 Tj
-0 -417.7079 Td
-(6391       consputc\('%'\);) 109.2129 Tj
-0 -427.2012 Td
-(6392       consputc\(c\);) 100.4758 Tj
-0 -436.6946 Td
-(6393       break;) 74.2647 Tj
-0 -446.1879 Td
-(6394     }) 43.6851 Tj
-0 -455.6813 Td
-(6395   }) 34.9481 Tj
-0 -465.1747 Td
-(6396 ) 21.8426 Tj
-0 -474.668 Td
-(6397   if\(locking\)) 78.6333 Tj
-0 -484.1614 Td
-(6398     release\(&cons.lock\);) 126.6869 Tj
-0 -493.6547 Td
-(6399 }) 26.2111 Tj
-0 -522.1348 Td
-(Sheet 63) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 71 71
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/console.c  Page 3) 174.7406 Tj
-0 -28.4801 Td
-(6400 void) 39.3166 Tj
-0 -37.9735 Td
-(6401 panic\(char *s\)) 83.0018 Tj
-0 -47.4668 Td
-(6402 {) 26.2111 Tj
-0 -56.9602 Td
-(6403   int i;) 56.7907 Tj
-0 -66.4535 Td
-(6404   uint pcs[10];) 87.3703 Tj
-0 -75.9469 Td
-(6405 ) 21.8426 Tj
-0 -85.4403 Td
-(6406   cli\(\);) 56.7907 Tj
-0 -94.9336 Td
-(6407   cons.locking = 0;) 104.8443 Tj
-0 -104.427 Td
-(6408   cprintf\("cpu%d: panic: ", cpu->id\);) 183.4776 Tj
-0 -113.9203 Td
-(6409   cprintf\(s\);) 78.6333 Tj
-0 -123.4137 Td
-(6410   cprintf\("\\n"\);) 91.7388 Tj
-0 -132.9071 Td
-(6411   getcallerpcs\(&s, pcs\);) 126.6869 Tj
-0 -142.4004 Td
-(6412   for\(i=0; i<10; i++\)) 113.5814 Tj
-0 -151.8938 Td
-(6413     cprintf\(" %p", pcs[i]\);) 139.7925 Tj
-0 -161.3871 Td
-(6414   panicked = 1; // freeze other CPU) 174.7406 Tj
-0 -170.8805 Td
-(6415   for\(;;\)) 61.1592 Tj
-0 -180.3739 Td
-(6416     ;) 43.6851 Tj
-0 -189.8672 Td
-(6417 }) 26.2111 Tj
-0 -199.3606 Td
-(6418 ) 21.8426 Tj
-0 -208.8539 Td
-(6419 ) 21.8426 Tj
-0 -218.3473 Td
-(6420 ) 21.8426 Tj
-0 -227.8407 Td
-(6421 ) 21.8426 Tj
-0 -237.334 Td
-(6422 ) 21.8426 Tj
-0 -246.8274 Td
-(6423 ) 21.8426 Tj
-0 -256.3207 Td
-(6424 ) 21.8426 Tj
-0 -265.8141 Td
-(6425 ) 21.8426 Tj
-0 -275.3075 Td
-(6426 ) 21.8426 Tj
-0 -284.8008 Td
-(6427 ) 21.8426 Tj
-0 -294.2942 Td
-(6428 ) 21.8426 Tj
-0 -303.7875 Td
-(6429 ) 21.8426 Tj
-0 -313.2809 Td
-(6430 ) 21.8426 Tj
-0 -322.7743 Td
-(6431 ) 21.8426 Tj
-0 -332.2676 Td
-(6432 ) 21.8426 Tj
-0 -341.761 Td
-(6433 ) 21.8426 Tj
-0 -351.2543 Td
-(6434 ) 21.8426 Tj
-0 -360.7477 Td
-(6435 ) 21.8426 Tj
-0 -370.2411 Td
-(6436 ) 21.8426 Tj
-0 -379.7344 Td
-(6437 ) 21.8426 Tj
-0 -389.2278 Td
-(6438 ) 21.8426 Tj
-0 -398.7211 Td
-(6439 ) 21.8426 Tj
-0 -408.2145 Td
-(6440 ) 21.8426 Tj
-0 -417.7079 Td
-(6441 ) 21.8426 Tj
-0 -427.2012 Td
-(6442 ) 21.8426 Tj
-0 -436.6946 Td
-(6443 ) 21.8426 Tj
-0 -446.1879 Td
-(6444 ) 21.8426 Tj
-0 -455.6813 Td
-(6445 ) 21.8426 Tj
-0 -465.1747 Td
-(6446 ) 21.8426 Tj
-0 -474.668 Td
-(6447 ) 21.8426 Tj
-0 -484.1614 Td
-(6448 ) 21.8426 Tj
-0 -493.6547 Td
-(6449 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 64) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/console.c  Page 4) 174.7406 Tj
-0 -28.4801 Td
-(6450 #define BACKSPACE 0x100) 122.3184 Tj
-0 -37.9735 Td
-(6451 #define CRTPORT 0x3d4) 113.5814 Tj
-0 -47.4668 Td
-(6452 static ushort *crt = \(ushort*\)0xb8000;  // CGA memory) 253.3738 Tj
-0 -56.9602 Td
-(6453 ) 21.8426 Tj
-0 -66.4535 Td
-(6454 static void) 69.8962 Tj
-0 -75.9469 Td
-(6455 cgaputc\(int c\)) 83.0018 Tj
-0 -85.4403 Td
-(6456 {) 26.2111 Tj
-0 -94.9336 Td
-(6457   int pos;) 65.5277 Tj
-0 -104.427 Td
-(6458 ) 21.8426 Tj
-0 -113.9203 Td
-(6459   // Cursor position: col + 80*row.) 174.7406 Tj
-0 -123.4137 Td
-(6460   outb\(CRTPORT, 14\);) 109.2129 Tj
-0 -132.9071 Td
-(6461   pos = inb\(CRTPORT+1\) << 8;) 144.161 Tj
-0 -142.4004 Td
-(6462   outb\(CRTPORT, 15\);) 109.2129 Tj
-0 -151.8938 Td
-(6463   pos |= inb\(CRTPORT+1\);) 126.6869 Tj
-0 -161.3871 Td
-(6464 ) 21.8426 Tj
-0 -170.8805 Td
-(6465   if\(c == '\\n'\)) 87.3703 Tj
-0 -180.3739 Td
-(6466     pos += 80 - pos%80;) 122.3184 Tj
-0 -189.8672 Td
-(6467   else if\(c == BACKSPACE\){) 135.4239 Tj
-0 -199.3606 Td
-(6468     if\(pos > 0\)) 87.3703 Tj
-0 -208.8539 Td
-(6469       crt[--pos] = ' ' | 0x0700;) 161.635 Tj
-0 -218.3473 Td
-(6470   } else) 56.7907 Tj
-0 -227.8407 Td
-(6471     crt[pos++] = \(c&0xff\) | 0x0700;  // black on white) 257.7424 Tj
-0 -237.334 Td
-(6472 ) 21.8426 Tj
-0 -246.8274 Td
-(6473   if\(\(pos/80\) >= 24\){  // Scroll up.) 179.1091 Tj
-0 -256.3207 Td
-(6474     memmove\(crt, crt+80, sizeof\(crt[0]\)*23*80\);) 227.1628 Tj
-0 -265.8141 Td
-(6475     pos -= 80;) 83.0018 Tj
-0 -275.3075 Td
-(6476     memset\(crt+pos, 0, sizeof\(crt[0]\)*\(24*80 - pos\)\)\
-;) 253.3738 Tj
-0 -284.8008 Td
-(6477   }) 34.9481 Tj
-0 -294.2942 Td
-(6478 ) 21.8426 Tj
-0 -303.7875 Td
-(6479   outb\(CRTPORT, 14\);) 109.2129 Tj
-0 -313.2809 Td
-(6480   outb\(CRTPORT+1, pos>>8\);) 135.4239 Tj
-0 -322.7743 Td
-(6481   outb\(CRTPORT, 15\);) 109.2129 Tj
-0 -332.2676 Td
-(6482   outb\(CRTPORT+1, pos\);) 122.3184 Tj
-0 -341.761 Td
-(6483   crt[pos] = ' ' | 0x0700;) 135.4239 Tj
-0 -351.2543 Td
-(6484 }) 26.2111 Tj
-0 -360.7477 Td
-(6485 ) 21.8426 Tj
-0 -370.2411 Td
-(6486 void) 39.3166 Tj
-0 -379.7344 Td
-(6487 consputc\(int c\)) 87.3703 Tj
-0 -389.2278 Td
-(6488 {) 26.2111 Tj
-0 -398.7211 Td
-(6489   if\(panicked\){) 87.3703 Tj
-0 -408.2145 Td
-(6490     cli\(\);) 65.5277 Tj
-0 -417.7079 Td
-(6491     for\(;;\)) 69.8962 Tj
-0 -427.2012 Td
-(6492       ;) 52.4222 Tj
-0 -436.6946 Td
-(6493   }) 34.9481 Tj
-0 -446.1879 Td
-(6494 ) 21.8426 Tj
-0 -455.6813 Td
-(6495   uartputc\(c\);) 83.0018 Tj
-0 -465.1747 Td
-(6496   cgaputc\(c\);) 78.6333 Tj
-0 -474.668 Td
-(6497 }) 26.2111 Tj
-0 -484.1614 Td
-(6498 ) 21.8426 Tj
-0 -493.6547 Td
-(6499 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 64) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 72 72
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/console.c  Page 5) 174.7406 Tj
-0 -28.4801 Td
-(6500 #define INPUT_BUF 128) 113.5814 Tj
-0 -37.9735 Td
-(6501 struct {) 56.7907 Tj
-0 -47.4668 Td
-(6502   struct spinlock lock;) 122.3184 Tj
-0 -56.9602 Td
-(6503   char buf[INPUT_BUF];) 117.9499 Tj
-0 -66.4535 Td
-(6504   uint r;  // Read index) 126.6869 Tj
-0 -75.9469 Td
-(6505   uint w;  // Write index) 131.0554 Tj
-0 -85.4403 Td
-(6506   uint e;  // Edit index) 126.6869 Tj
-0 -94.9336 Td
-(6507 } input;) 56.7907 Tj
-0 -104.427 Td
-(6508 ) 21.8426 Tj
-0 -113.9203 Td
-(6509 #define C\(x\)  \(\(x\)-'@'\)  // Control-x) 183.4776 Tj
-0 -123.4137 Td
-(6510 ) 21.8426 Tj
-0 -132.9071 Td
-(6511 void) 39.3166 Tj
-0 -142.4004 Td
-(6512 consoleintr\(int \(*getc\)\(void\)\)) 152.898 Tj
-0 -151.8938 Td
-(6513 {) 26.2111 Tj
-0 -161.3871 Td
-(6514   int c;) 56.7907 Tj
-0 -170.8805 Td
-(6515 ) 21.8426 Tj
-0 -180.3739 Td
-(6516   acquire\(&input.lock\);) 122.3184 Tj
-0 -189.8672 Td
-(6517   while\(\(c = getc\(\)\) >= 0\){) 139.7925 Tj
-0 -199.3606 Td
-(6518     switch\(c\){) 83.0018 Tj
-0 -208.8539 Td
-(6519     case C\('P'\):  // Process listing.) 183.4776 Tj
-0 -218.3473 Td
-(6520       procdump\(\);) 96.1073 Tj
-0 -227.8407 Td
-(6521       break;) 74.2647 Tj
-0 -237.334 Td
-(6522     case C\('U'\):  // Kill line.) 157.2665 Tj
-0 -246.8274 Td
-(6523       while\(input.e != input.w &&) 166.0035 Tj
-0 -256.3207 Td
-(6524             input.buf[\(input.e-1\) % INPUT_BUF] != '\\n'\)\
-{) 266.4794 Tj
-0 -265.8141 Td
-(6525         input.e--;) 100.4758 Tj
-0 -275.3075 Td
-(6526         consputc\(BACKSPACE\);) 144.161 Tj
-0 -284.8008 Td
-(6527       }) 52.4222 Tj
-0 -294.2942 Td
-(6528       break;) 74.2647 Tj
-0 -303.7875 Td
-(6529     case C\('H'\):  // Backspace) 152.898 Tj
-0 -313.2809 Td
-(6530       if\(input.e != input.w\){) 148.5295 Tj
-0 -322.7743 Td
-(6531         input.e--;) 100.4758 Tj
-0 -332.2676 Td
-(6532         consputc\(BACKSPACE\);) 144.161 Tj
-0 -341.761 Td
-(6533       }) 52.4222 Tj
-0 -351.2543 Td
-(6534       break;) 74.2647 Tj
-0 -360.7477 Td
-(6535     default:) 74.2647 Tj
-0 -370.2411 Td
-(6536       if\(c != 0 && input.e-input.r < INPUT_BUF\){) 231.5313 Tj
-0 -379.7344 Td
-(6537         input.buf[input.e++ % INPUT_BUF] = c;) 218.4257 Tj
-0 -389.2278 Td
-(6538         consputc\(c\);) 109.2129 Tj
-0 -398.7211 Td
-(6539         if\(c == '\\n' || c == C\('D'\) || input.e == inpu\
-t.r+INPUT_BUF\){) 323.2701 Tj
-0 -408.2145 Td
-(6540           input.w = input.e;) 144.161 Tj
-0 -417.7079 Td
-(6541           wakeup\(&input.r\);) 139.7925 Tj
-0 -427.2012 Td
-(6542         }) 61.1592 Tj
-0 -436.6946 Td
-(6543       }) 52.4222 Tj
-0 -446.1879 Td
-(6544       break;) 74.2647 Tj
-0 -455.6813 Td
-(6545     }) 43.6851 Tj
-0 -465.1747 Td
-(6546   }) 34.9481 Tj
-0 -474.668 Td
-(6547   release\(&input.lock\);) 122.3184 Tj
-0 -484.1614 Td
-(6548 }) 26.2111 Tj
-0 -493.6547 Td
-(6549 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 65) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/console.c  Page 6) 174.7406 Tj
-0 -28.4801 Td
-(6550 int) 34.9481 Tj
-0 -37.9735 Td
-(6551 consoleread\(struct inode *ip, char *dst, int n\)) 227.1628 Tj
-0 -47.4668 Td
-(6552 {) 26.2111 Tj
-0 -56.9602 Td
-(6553   uint target;) 83.0018 Tj
-0 -66.4535 Td
-(6554   int c;) 56.7907 Tj
-0 -75.9469 Td
-(6555 ) 21.8426 Tj
-0 -85.4403 Td
-(6556   iunlock\(ip\);) 83.0018 Tj
-0 -94.9336 Td
-(6557   target = n;) 78.6333 Tj
-0 -104.427 Td
-(6558   acquire\(&input.lock\);) 122.3184 Tj
-0 -113.9203 Td
-(6559   while\(n > 0\){) 87.3703 Tj
-0 -123.4137 Td
-(6560     while\(input.r == input.w\){) 152.898 Tj
-0 -132.9071 Td
-(6561       if\(proc->killed\){) 122.3184 Tj
-0 -142.4004 Td
-(6562         release\(&input.lock\);) 148.5295 Tj
-0 -151.8938 Td
-(6563         ilock\(ip\);) 100.4758 Tj
-0 -161.3871 Td
-(6564         return -1;) 100.4758 Tj
-0 -170.8805 Td
-(6565       }) 52.4222 Tj
-0 -180.3739 Td
-(6566       sleep\(&input.r, &input.lock\);) 174.7406 Tj
-0 -189.8672 Td
-(6567     }) 43.6851 Tj
-0 -199.3606 Td
-(6568     c = input.buf[input.r++ % INPUT_BUF];) 200.9517 Tj
-0 -208.8539 Td
-(6569     if\(c == C\('D'\)\){  // EOF) 144.161 Tj
-0 -218.3473 Td
-(6570       if\(n < target\){) 113.5814 Tj
-0 -227.8407 Td
-(6571         // Save ^D for next time, to make sure) 222.7942 Tj
-0 -237.334 Td
-(6572         // caller gets a 0-byte result.) 192.2146 Tj
-0 -246.8274 Td
-(6573         input.r--;) 100.4758 Tj
-0 -256.3207 Td
-(6574       }) 52.4222 Tj
-0 -265.8141 Td
-(6575       break;) 74.2647 Tj
-0 -275.3075 Td
-(6576     }) 43.6851 Tj
-0 -284.8008 Td
-(6577     *dst++ = c;) 87.3703 Tj
-0 -294.2942 Td
-(6578     --n;) 56.7907 Tj
-0 -303.7875 Td
-(6579     if\(c == '\\n'\)) 96.1073 Tj
-0 -313.2809 Td
-(6580       break;) 74.2647 Tj
-0 -322.7743 Td
-(6581   }) 34.9481 Tj
-0 -332.2676 Td
-(6582   release\(&input.lock\);) 122.3184 Tj
-0 -341.761 Td
-(6583   ilock\(ip\);) 74.2647 Tj
-0 -351.2543 Td
-(6584 ) 21.8426 Tj
-0 -360.7477 Td
-(6585   return target - n;) 109.2129 Tj
-0 -370.2411 Td
-(6586 }) 26.2111 Tj
-0 -379.7344 Td
-(6587 ) 21.8426 Tj
-0 -389.2278 Td
-(6588 ) 21.8426 Tj
-0 -398.7211 Td
-(6589 ) 21.8426 Tj
-0 -408.2145 Td
-(6590 ) 21.8426 Tj
-0 -417.7079 Td
-(6591 ) 21.8426 Tj
-0 -427.2012 Td
-(6592 ) 21.8426 Tj
-0 -436.6946 Td
-(6593 ) 21.8426 Tj
-0 -446.1879 Td
-(6594 ) 21.8426 Tj
-0 -455.6813 Td
-(6595 ) 21.8426 Tj
-0 -465.1747 Td
-(6596 ) 21.8426 Tj
-0 -474.668 Td
-(6597 ) 21.8426 Tj
-0 -484.1614 Td
-(6598 ) 21.8426 Tj
-0 -493.6547 Td
-(6599 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 65) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 73 73
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/console.c  Page 7) 174.7406 Tj
-0 -28.4801 Td
-(6600 int) 34.9481 Tj
-0 -37.9735 Td
-(6601 consolewrite\(struct inode *ip, char *buf, int n\)) 231.5313 Tj
-0 -47.4668 Td
-(6602 {) 26.2111 Tj
-0 -56.9602 Td
-(6603   int i;) 56.7907 Tj
-0 -66.4535 Td
-(6604 ) 21.8426 Tj
-0 -75.9469 Td
-(6605   iunlock\(ip\);) 83.0018 Tj
-0 -85.4403 Td
-(6606   acquire\(&cons.lock\);) 117.9499 Tj
-0 -94.9336 Td
-(6607   for\(i = 0; i < n; i++\)) 126.6869 Tj
-0 -104.427 Td
-(6608     consputc\(buf[i] & 0xff\);) 144.161 Tj
-0 -113.9203 Td
-(6609   release\(&cons.lock\);) 117.9499 Tj
-0 -123.4137 Td
-(6610   ilock\(ip\);) 74.2647 Tj
-0 -132.9071 Td
-(6611 ) 21.8426 Tj
-0 -142.4004 Td
-(6612   return n;) 69.8962 Tj
-0 -151.8938 Td
-(6613 }) 26.2111 Tj
-0 -161.3871 Td
-(6614 ) 21.8426 Tj
-0 -170.8805 Td
-(6615 void) 39.3166 Tj
-0 -180.3739 Td
-(6616 consoleinit\(void\)) 96.1073 Tj
-0 -189.8672 Td
-(6617 {) 26.2111 Tj
-0 -199.3606 Td
-(6618   initlock\(&cons.lock, "console"\);) 170.3721 Tj
-0 -208.8539 Td
-(6619   initlock\(&input.lock, "input"\);) 166.0035 Tj
-0 -218.3473 Td
-(6620 ) 21.8426 Tj
-0 -227.8407 Td
-(6621   devsw[CONSOLE].write = consolewrite;) 187.8461 Tj
-0 -237.334 Td
-(6622   devsw[CONSOLE].read = consoleread;) 179.1091 Tj
-0 -246.8274 Td
-(6623   cons.locking = 1;) 104.8443 Tj
-0 -256.3207 Td
-(6624 ) 21.8426 Tj
-0 -265.8141 Td
-(6625   picenable\(IRQ_KBD\);) 113.5814 Tj
-0 -275.3075 Td
-(6626   ioapicenable\(IRQ_KBD, 0\);) 139.7925 Tj
-0 -284.8008 Td
-(6627 }) 26.2111 Tj
-0 -294.2942 Td
-(6628 ) 21.8426 Tj
-0 -303.7875 Td
-(6629 ) 21.8426 Tj
-0 -313.2809 Td
-(6630 ) 21.8426 Tj
-0 -322.7743 Td
-(6631 ) 21.8426 Tj
-0 -332.2676 Td
-(6632 ) 21.8426 Tj
-0 -341.761 Td
-(6633 ) 21.8426 Tj
-0 -351.2543 Td
-(6634 ) 21.8426 Tj
-0 -360.7477 Td
-(6635 ) 21.8426 Tj
-0 -370.2411 Td
-(6636 ) 21.8426 Tj
-0 -379.7344 Td
-(6637 ) 21.8426 Tj
-0 -389.2278 Td
-(6638 ) 21.8426 Tj
-0 -398.7211 Td
-(6639 ) 21.8426 Tj
-0 -408.2145 Td
-(6640 ) 21.8426 Tj
-0 -417.7079 Td
-(6641 ) 21.8426 Tj
-0 -427.2012 Td
-(6642 ) 21.8426 Tj
-0 -436.6946 Td
-(6643 ) 21.8426 Tj
-0 -446.1879 Td
-(6644 ) 21.8426 Tj
-0 -455.6813 Td
-(6645 ) 21.8426 Tj
-0 -465.1747 Td
-(6646 ) 21.8426 Tj
-0 -474.668 Td
-(6647 ) 21.8426 Tj
-0 -484.1614 Td
-(6648 ) 21.8426 Tj
-0 -493.6547 Td
-(6649 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 66) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/timer.c  Page 1) 166.0035 Tj
-0 -28.4801 Td
-(6650 // Intel 8253/8254/82C54 Programmable Interval Timer \(PIT\
-\).) 279.5849 Tj
-0 -37.9735 Td
-(6651 // Only used on uniprocessors;) 152.898 Tj
-0 -47.4668 Td
-(6652 // SMP machines use the local APIC timer.) 200.9517 Tj
-0 -56.9602 Td
-(6653 ) 21.8426 Tj
-0 -66.4535 Td
-(6654 #include "types.h") 100.4758 Tj
-0 -75.9469 Td
-(6655 #include "defs.h") 96.1073 Tj
-0 -85.4403 Td
-(6656 #include "traps.h") 100.4758 Tj
-0 -94.9336 Td
-(6657 #include "x86.h") 91.7388 Tj
-0 -104.427 Td
-(6658 ) 21.8426 Tj
-0 -113.9203 Td
-(6659 #define IO_TIMER1       0x040           // 8253 Timer #1) 266.4794 Tj
-0 -123.4137 Td
-(6660 ) 21.8426 Tj
-0 -132.9071 Td
-(6661 // Frequency of all three count-down timers;) 214.0572 Tj
-0 -142.4004 Td
-(6662 // \(TIMER_FREQ/freq\) is the appropriate count) 218.4257 Tj
-0 -151.8938 Td
-(6663 // to generate a frequency of freq Hz.) 187.8461 Tj
-0 -161.3871 Td
-(6664 ) 21.8426 Tj
-0 -170.8805 Td
-(6665 #define TIMER_FREQ      1193182) 157.2665 Tj
-0 -180.3739 Td
-(6666 #define TIMER_DIV\(x\)    \(\(TIMER_FREQ+\(x\)/2\)/\(x\)\)) 231.5313 Tj
-0 -189.8672 Td
-(6667 ) 21.8426 Tj
-0 -199.3606 Td
-(6668 #define TIMER_MODE      \(IO_TIMER1 + 3\) // timer mode po\
-rt) 275.2164 Tj
-0 -208.8539 Td
-(6669 #define TIMER_SEL0      0x00    // select counter 0) 244.6368 Tj
-0 -218.3473 Td
-(6670 #define TIMER_RATEGEN   0x04    // mode 2, rate generator) 270.8479 Tj
-0 -227.8407 Td
-(6671 #define TIMER_16BIT     0x30    // r/w counter 16 bits, LS\
-B first) 305.796 Tj
-0 -237.334 Td
-(6672 ) 21.8426 Tj
-0 -246.8274 Td
-(6673 void) 39.3166 Tj
-0 -256.3207 Td
-(6674 timerinit\(void\)) 87.3703 Tj
-0 -265.8141 Td
-(6675 {) 26.2111 Tj
-0 -275.3075 Td
-(6676   // Interrupt 100 times/sec.) 148.5295 Tj
-0 -284.8008 Td
-(6677   outb\(TIMER_MODE, TIMER_SEL0 | TIMER_RATEGEN | TIMER_16B\
-IT\);) 288.322 Tj
-0 -294.2942 Td
-(6678   outb\(IO_TIMER1, TIMER_DIV\(100\) % 256\);) 196.5831 Tj
-0 -303.7875 Td
-(6679   outb\(IO_TIMER1, TIMER_DIV\(100\) / 256\);) 196.5831 Tj
-0 -313.2809 Td
-(6680   picenable\(IRQ_TIMER\);) 122.3184 Tj
-0 -322.7743 Td
-(6681 }) 26.2111 Tj
-0 -332.2676 Td
-(6682 ) 21.8426 Tj
-0 -341.761 Td
-(6683 ) 21.8426 Tj
-0 -351.2543 Td
-(6684 ) 21.8426 Tj
-0 -360.7477 Td
-(6685 ) 21.8426 Tj
-0 -370.2411 Td
-(6686 ) 21.8426 Tj
-0 -379.7344 Td
-(6687 ) 21.8426 Tj
-0 -389.2278 Td
-(6688 ) 21.8426 Tj
-0 -398.7211 Td
-(6689 ) 21.8426 Tj
-0 -408.2145 Td
-(6690 ) 21.8426 Tj
-0 -417.7079 Td
-(6691 ) 21.8426 Tj
-0 -427.2012 Td
-(6692 ) 21.8426 Tj
-0 -436.6946 Td
-(6693 ) 21.8426 Tj
-0 -446.1879 Td
-(6694 ) 21.8426 Tj
-0 -455.6813 Td
-(6695 ) 21.8426 Tj
-0 -465.1747 Td
-(6696 ) 21.8426 Tj
-0 -474.668 Td
-(6697 ) 21.8426 Tj
-0 -484.1614 Td
-(6698 ) 21.8426 Tj
-0 -493.6547 Td
-(6699 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 66) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 74 74
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/initcode.S  Page 1) 179.1091 Tj
-0 -28.4801 Td
-(6700 # Initial process execs /init.) 152.898 Tj
-0 -37.9735 Td
-(6701 ) 21.8426 Tj
-0 -47.4668 Td
-(6702 #include "syscall.h") 109.2129 Tj
-0 -56.9602 Td
-(6703 #include "traps.h") 100.4758 Tj
-0 -66.4535 Td
-(6704 ) 21.8426 Tj
-0 -75.9469 Td
-(6705 # exec\(init, argv\)) 100.4758 Tj
-0 -85.4403 Td
-(6706 .globl start) 74.2647 Tj
-0 -94.9336 Td
-(6707 start:) 48.0537 Tj
-0 -104.427 Td
-(6708   pushl $argv) 78.6333 Tj
-0 -113.9203 Td
-(6709   pushl $init) 78.6333 Tj
-0 -123.4137 Td
-(6710   pushl $0  // where caller pc would be) 192.2146 Tj
-0 -132.9071 Td
-(6711   movl $SYS_exec, %eax) 117.9499 Tj
-0 -142.4004 Td
-(6712   int $T_SYSCALL) 91.7388 Tj
-0 -151.8938 Td
-(6713 ) 21.8426 Tj
-0 -161.3871 Td
-(6714 # for\(;;\) exit\(\);) 96.1073 Tj
-0 -170.8805 Td
-(6715 exit:) 43.6851 Tj
-0 -180.3739 Td
-(6716   movl $SYS_exit, %eax) 117.9499 Tj
-0 -189.8672 Td
-(6717   int $T_SYSCALL) 91.7388 Tj
-0 -199.3606 Td
-(6718   jmp exit) 65.5277 Tj
-0 -208.8539 Td
-(6719 ) 21.8426 Tj
-0 -218.3473 Td
-(6720 # char init[] = "/init\\0";) 135.4239 Tj
-0 -227.8407 Td
-(6721 init:) 43.6851 Tj
-0 -237.334 Td
-(6722   .string "/init\\0") 104.8443 Tj
-0 -246.8274 Td
-(6723 ) 21.8426 Tj
-0 -256.3207 Td
-(6724 # char *argv[] = { init, 0 };) 148.5295 Tj
-0 -265.8141 Td
-(6725 .p2align 2) 65.5277 Tj
-0 -275.3075 Td
-(6726 argv:) 43.6851 Tj
-0 -284.8008 Td
-(6727   .long init) 74.2647 Tj
-0 -294.2942 Td
-(6728   .long 0) 61.1592 Tj
-0 -303.7875 Td
-(6729 ) 21.8426 Tj
-0 -313.2809 Td
-(6730 ) 21.8426 Tj
-0 -322.7743 Td
-(6731 ) 21.8426 Tj
-0 -332.2676 Td
-(6732 ) 21.8426 Tj
-0 -341.761 Td
-(6733 ) 21.8426 Tj
-0 -351.2543 Td
-(6734 ) 21.8426 Tj
-0 -360.7477 Td
-(6735 ) 21.8426 Tj
-0 -370.2411 Td
-(6736 ) 21.8426 Tj
-0 -379.7344 Td
-(6737 ) 21.8426 Tj
-0 -389.2278 Td
-(6738 ) 21.8426 Tj
-0 -398.7211 Td
-(6739 ) 21.8426 Tj
-0 -408.2145 Td
-(6740 ) 21.8426 Tj
-0 -417.7079 Td
-(6741 ) 21.8426 Tj
-0 -427.2012 Td
-(6742 ) 21.8426 Tj
-0 -436.6946 Td
-(6743 ) 21.8426 Tj
-0 -446.1879 Td
-(6744 ) 21.8426 Tj
-0 -455.6813 Td
-(6745 ) 21.8426 Tj
-0 -465.1747 Td
-(6746 ) 21.8426 Tj
-0 -474.668 Td
-(6747 ) 21.8426 Tj
-0 -484.1614 Td
-(6748 ) 21.8426 Tj
-0 -493.6547 Td
-(6749 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 67) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/usys.S  Page 1) 161.635 Tj
-0 -28.4801 Td
-(6750 #include "syscall.h") 109.2129 Tj
-0 -37.9735 Td
-(6751 #include "traps.h") 100.4758 Tj
-0 -47.4668 Td
-(6752 ) 21.8426 Tj
-0 -56.9602 Td
-(6753 #define SYSCALL\(name\) \\) 122.3184 Tj
-0 -66.4535 Td
-(6754   .globl name; \\) 91.7388 Tj
-0 -75.9469 Td
-(6755   name: \\) 61.1592 Tj
-0 -85.4403 Td
-(6756     movl $SYS_ ## name, %eax; \\) 157.2665 Tj
-0 -94.9336 Td
-(6757     int $T_SYSCALL; \\) 113.5814 Tj
-0 -104.427 Td
-(6758     ret) 52.4222 Tj
-0 -113.9203 Td
-(6759 ) 21.8426 Tj
-0 -123.4137 Td
-(6760 SYSCALL\(fork\)) 78.6333 Tj
-0 -132.9071 Td
-(6761 SYSCALL\(exit\)) 78.6333 Tj
-0 -142.4004 Td
-(6762 SYSCALL\(wait\)) 78.6333 Tj
-0 -151.8938 Td
-(6763 SYSCALL\(pipe\)) 78.6333 Tj
-0 -161.3871 Td
-(6764 SYSCALL\(read\)) 78.6333 Tj
-0 -170.8805 Td
-(6765 SYSCALL\(write\)) 83.0018 Tj
-0 -180.3739 Td
-(6766 SYSCALL\(close\)) 83.0018 Tj
-0 -189.8672 Td
-(6767 SYSCALL\(kill\)) 78.6333 Tj
-0 -199.3606 Td
-(6768 SYSCALL\(exec\)) 78.6333 Tj
-0 -208.8539 Td
-(6769 SYSCALL\(open\)) 78.6333 Tj
-0 -218.3473 Td
-(6770 SYSCALL\(mknod\)) 83.0018 Tj
-0 -227.8407 Td
-(6771 SYSCALL\(unlink\)) 87.3703 Tj
-0 -237.334 Td
-(6772 SYSCALL\(fstat\)) 83.0018 Tj
-0 -246.8274 Td
-(6773 SYSCALL\(link\)) 78.6333 Tj
-0 -256.3207 Td
-(6774 SYSCALL\(mkdir\)) 83.0018 Tj
-0 -265.8141 Td
-(6775 SYSCALL\(chdir\)) 83.0018 Tj
-0 -275.3075 Td
-(6776 SYSCALL\(dup\)) 74.2647 Tj
-0 -284.8008 Td
-(6777 SYSCALL\(getpid\)) 87.3703 Tj
-0 -294.2942 Td
-(6778 SYSCALL\(sbrk\)) 78.6333 Tj
-0 -303.7875 Td
-(6779 SYSCALL\(sleep\)) 83.0018 Tj
-0 -313.2809 Td
-(6780 ) 21.8426 Tj
-0 -322.7743 Td
-(6781 ) 21.8426 Tj
-0 -332.2676 Td
-(6782 ) 21.8426 Tj
-0 -341.761 Td
-(6783 ) 21.8426 Tj
-0 -351.2543 Td
-(6784 ) 21.8426 Tj
-0 -360.7477 Td
-(6785 ) 21.8426 Tj
-0 -370.2411 Td
-(6786 ) 21.8426 Tj
-0 -379.7344 Td
-(6787 ) 21.8426 Tj
-0 -389.2278 Td
-(6788 ) 21.8426 Tj
-0 -398.7211 Td
-(6789 ) 21.8426 Tj
-0 -408.2145 Td
-(6790 ) 21.8426 Tj
-0 -417.7079 Td
-(6791 ) 21.8426 Tj
-0 -427.2012 Td
-(6792 ) 21.8426 Tj
-0 -436.6946 Td
-(6793 ) 21.8426 Tj
-0 -446.1879 Td
-(6794 ) 21.8426 Tj
-0 -455.6813 Td
-(6795 ) 21.8426 Tj
-0 -465.1747 Td
-(6796 ) 21.8426 Tj
-0 -474.668 Td
-(6797 ) 21.8426 Tj
-0 -484.1614 Td
-(6798 ) 21.8426 Tj
-0 -493.6547 Td
-(6799 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 67) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 75 75
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/init.c  Page 1) 161.635 Tj
-0 -28.4801 Td
-(6800 // init: The initial user-level program) 192.2146 Tj
-0 -37.9735 Td
-(6801 ) 21.8426 Tj
-0 -47.4668 Td
-(6802 #include "types.h") 100.4758 Tj
-0 -56.9602 Td
-(6803 #include "stat.h") 96.1073 Tj
-0 -66.4535 Td
-(6804 #include "user.h") 96.1073 Tj
-0 -75.9469 Td
-(6805 #include "fcntl.h") 100.4758 Tj
-0 -85.4403 Td
-(6806 ) 21.8426 Tj
-0 -94.9336 Td
-(6807 char *argv[] = { "sh", 0 };) 139.7925 Tj
-0 -104.427 Td
-(6808 ) 21.8426 Tj
-0 -113.9203 Td
-(6809 int) 34.9481 Tj
-0 -123.4137 Td
-(6810 main\(void\)) 65.5277 Tj
-0 -132.9071 Td
-(6811 {) 26.2111 Tj
-0 -142.4004 Td
-(6812   int pid, wpid;) 91.7388 Tj
-0 -151.8938 Td
-(6813 ) 21.8426 Tj
-0 -161.3871 Td
-(6814   if\(open\("console", O_RDWR\) < 0\){) 170.3721 Tj
-0 -170.8805 Td
-(6815     mknod\("console", 1, 1\);) 139.7925 Tj
-0 -180.3739 Td
-(6816     open\("console", O_RDWR\);) 144.161 Tj
-0 -189.8672 Td
-(6817   }) 34.9481 Tj
-0 -199.3606 Td
-(6818   dup\(0\);  // stdout) 109.2129 Tj
-0 -208.8539 Td
-(6819   dup\(0\);  // stderr) 109.2129 Tj
-0 -218.3473 Td
-(6820 ) 21.8426 Tj
-0 -227.8407 Td
-(6821   for\(;;\){) 65.5277 Tj
-0 -237.334 Td
-(6822     printf\(1, "init: starting sh\\n"\);) 183.4776 Tj
-0 -246.8274 Td
-(6823     pid = fork\(\);) 96.1073 Tj
-0 -256.3207 Td
-(6824     if\(pid < 0\){) 91.7388 Tj
-0 -265.8141 Td
-(6825       printf\(1, "init: fork failed\\n"\);) 192.2146 Tj
-0 -275.3075 Td
-(6826       exit\(\);) 78.6333 Tj
-0 -284.8008 Td
-(6827     }) 43.6851 Tj
-0 -294.2942 Td
-(6828     if\(pid == 0\){) 96.1073 Tj
-0 -303.7875 Td
-(6829       exec\("sh", argv\);) 122.3184 Tj
-0 -313.2809 Td
-(6830       printf\(1, "init: exec sh failed\\n"\);) 205.3202 Tj
-0 -322.7743 Td
-(6831       exit\(\);) 78.6333 Tj
-0 -332.2676 Td
-(6832     }) 43.6851 Tj
-0 -341.761 Td
-(6833     while\(\(wpid=wait\(\)\) >= 0 && wpid != pid\)) 214.0572 Tj
-0 -351.2543 Td
-(6834       printf\(1, "zombie!\\n"\);) 148.5295 Tj
-0 -360.7477 Td
-(6835   }) 34.9481 Tj
-0 -370.2411 Td
-(6836 }) 26.2111 Tj
-0 -379.7344 Td
-(6837 ) 21.8426 Tj
-0 -389.2278 Td
-(6838 ) 21.8426 Tj
-0 -398.7211 Td
-(6839 ) 21.8426 Tj
-0 -408.2145 Td
-(6840 ) 21.8426 Tj
-0 -417.7079 Td
-(6841 ) 21.8426 Tj
-0 -427.2012 Td
-(6842 ) 21.8426 Tj
-0 -436.6946 Td
-(6843 ) 21.8426 Tj
-0 -446.1879 Td
-(6844 ) 21.8426 Tj
-0 -455.6813 Td
-(6845 ) 21.8426 Tj
-0 -465.1747 Td
-(6846 ) 21.8426 Tj
-0 -474.668 Td
-(6847 ) 21.8426 Tj
-0 -484.1614 Td
-(6848 ) 21.8426 Tj
-0 -493.6547 Td
-(6849 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 68) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sh.c  Page 1) 152.898 Tj
-0 -28.4801 Td
-(6850 // Shell.) 61.1592 Tj
-0 -37.9735 Td
-(6851 ) 21.8426 Tj
-0 -47.4668 Td
-(6852 #include "types.h") 100.4758 Tj
-0 -56.9602 Td
-(6853 #include "user.h") 96.1073 Tj
-0 -66.4535 Td
-(6854 #include "fcntl.h") 100.4758 Tj
-0 -75.9469 Td
-(6855 ) 21.8426 Tj
-0 -85.4403 Td
-(6856 // Parsed command representation) 161.635 Tj
-0 -94.9336 Td
-(6857 #define EXEC  1) 87.3703 Tj
-0 -104.427 Td
-(6858 #define REDIR 2) 87.3703 Tj
-0 -113.9203 Td
-(6859 #define PIPE  3) 87.3703 Tj
-0 -123.4137 Td
-(6860 #define LIST  4) 87.3703 Tj
-0 -132.9071 Td
-(6861 #define BACK  5) 87.3703 Tj
-0 -142.4004 Td
-(6862 ) 21.8426 Tj
-0 -151.8938 Td
-(6863 #define MAXARGS 10) 100.4758 Tj
-0 -161.3871 Td
-(6864 ) 21.8426 Tj
-0 -170.8805 Td
-(6865 struct cmd {) 74.2647 Tj
-0 -180.3739 Td
-(6866   int type;) 69.8962 Tj
-0 -189.8672 Td
-(6867 };) 30.5796 Tj
-0 -199.3606 Td
-(6868 ) 21.8426 Tj
-0 -208.8539 Td
-(6869 struct execcmd {) 91.7388 Tj
-0 -218.3473 Td
-(6870   int type;) 69.8962 Tj
-0 -227.8407 Td
-(6871   char *argv[MAXARGS];) 117.9499 Tj
-0 -237.334 Td
-(6872   char *eargv[MAXARGS];) 122.3184 Tj
-0 -246.8274 Td
-(6873 };) 30.5796 Tj
-0 -256.3207 Td
-(6874 ) 21.8426 Tj
-0 -265.8141 Td
-(6875 struct redircmd {) 96.1073 Tj
-0 -275.3075 Td
-(6876   int type;) 69.8962 Tj
-0 -284.8008 Td
-(6877   struct cmd *cmd;) 100.4758 Tj
-0 -294.2942 Td
-(6878   char *file;) 78.6333 Tj
-0 -303.7875 Td
-(6879   char *efile;) 83.0018 Tj
-0 -313.2809 Td
-(6880   int mode;) 69.8962 Tj
-0 -322.7743 Td
-(6881   int fd;) 61.1592 Tj
-0 -332.2676 Td
-(6882 };) 30.5796 Tj
-0 -341.761 Td
-(6883 ) 21.8426 Tj
-0 -351.2543 Td
-(6884 struct pipecmd {) 91.7388 Tj
-0 -360.7477 Td
-(6885   int type;) 69.8962 Tj
-0 -370.2411 Td
-(6886   struct cmd *left;) 104.8443 Tj
-0 -379.7344 Td
-(6887   struct cmd *right;) 109.2129 Tj
-0 -389.2278 Td
-(6888 };) 30.5796 Tj
-0 -398.7211 Td
-(6889 ) 21.8426 Tj
-0 -408.2145 Td
-(6890 struct listcmd {) 91.7388 Tj
-0 -417.7079 Td
-(6891   int type;) 69.8962 Tj
-0 -427.2012 Td
-(6892   struct cmd *left;) 104.8443 Tj
-0 -436.6946 Td
-(6893   struct cmd *right;) 109.2129 Tj
-0 -446.1879 Td
-(6894 };) 30.5796 Tj
-0 -455.6813 Td
-(6895 ) 21.8426 Tj
-0 -465.1747 Td
-(6896 struct backcmd {) 91.7388 Tj
-0 -474.668 Td
-(6897   int type;) 69.8962 Tj
-0 -484.1614 Td
-(6898   struct cmd *cmd;) 100.4758 Tj
-0 -493.6547 Td
-(6899 };) 30.5796 Tj
-0 -522.1348 Td
-(Sheet 68) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 76 76
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sh.c  Page 2) 152.898 Tj
-0 -28.4801 Td
-(6900 int fork1\(void\);  // Fork but panics on failure.) 231.5313 Tj
-0 -37.9735 Td
-(6901 void panic\(char*\);) 100.4758 Tj
-0 -47.4668 Td
-(6902 struct cmd *parsecmd\(char*\);) 144.161 Tj
-0 -56.9602 Td
-(6903 ) 21.8426 Tj
-0 -66.4535 Td
-(6904 // Execute cmd.  Never returns.) 157.2665 Tj
-0 -75.9469 Td
-(6905 void) 39.3166 Tj
-0 -85.4403 Td
-(6906 runcmd\(struct cmd *cmd\)) 122.3184 Tj
-0 -94.9336 Td
-(6907 {) 26.2111 Tj
-0 -104.427 Td
-(6908   int p[2];) 69.8962 Tj
-0 -113.9203 Td
-(6909   struct backcmd *bcmd;) 122.3184 Tj
-0 -123.4137 Td
-(6910   struct execcmd *ecmd;) 122.3184 Tj
-0 -132.9071 Td
-(6911   struct listcmd *lcmd;) 122.3184 Tj
-0 -142.4004 Td
-(6912   struct pipecmd *pcmd;) 122.3184 Tj
-0 -151.8938 Td
-(6913   struct redircmd *rcmd;) 126.6869 Tj
-0 -161.3871 Td
-(6914 ) 21.8426 Tj
-0 -170.8805 Td
-(6915   if\(cmd == 0\)) 83.0018 Tj
-0 -180.3739 Td
-(6916     exit\(\);) 69.8962 Tj
-0 -189.8672 Td
-(6917 ) 21.8426 Tj
-0 -199.3606 Td
-(6918   switch\(cmd->type\){) 109.2129 Tj
-0 -208.8539 Td
-(6919   default:) 65.5277 Tj
-0 -218.3473 Td
-(6920     panic\("runcmd"\);) 109.2129 Tj
-0 -227.8407 Td
-(6921 ) 21.8426 Tj
-0 -237.334 Td
-(6922   case EXEC:) 74.2647 Tj
-0 -246.8274 Td
-(6923     ecmd = \(struct execcmd*\)cmd;) 161.635 Tj
-0 -256.3207 Td
-(6924     if\(ecmd->argv[0] == 0\)) 135.4239 Tj
-0 -265.8141 Td
-(6925       exit\(\);) 78.6333 Tj
-0 -275.3075 Td
-(6926     exec\(ecmd->argv[0], ecmd->argv\);) 179.1091 Tj
-0 -284.8008 Td
-(6927     printf\(2, "exec %s failed\\n", ecmd->argv[0]\);) 235.8998 Tj
-0 -294.2942 Td
-(6928     break;) 65.5277 Tj
-0 -303.7875 Td
-(6929 ) 21.8426 Tj
-0 -313.2809 Td
-(6930   case REDIR:) 78.6333 Tj
-0 -322.7743 Td
-(6931     rcmd = \(struct redircmd*\)cmd;) 166.0035 Tj
-0 -332.2676 Td
-(6932     close\(rcmd->fd\);) 109.2129 Tj
-0 -341.761 Td
-(6933     if\(open\(rcmd->file, rcmd->mode\) < 0\){) 200.9517 Tj
-0 -351.2543 Td
-(6934       printf\(2, "open %s failed\\n", rcmd->file\);) 231.5313 Tj
-0 -360.7477 Td
-(6935       exit\(\);) 78.6333 Tj
-0 -370.2411 Td
-(6936     }) 43.6851 Tj
-0 -379.7344 Td
-(6937     runcmd\(rcmd->cmd\);) 117.9499 Tj
-0 -389.2278 Td
-(6938     break;) 65.5277 Tj
-0 -398.7211 Td
-(6939 ) 21.8426 Tj
-0 -408.2145 Td
-(6940   case LIST:) 74.2647 Tj
-0 -417.7079 Td
-(6941     lcmd = \(struct listcmd*\)cmd;) 161.635 Tj
-0 -427.2012 Td
-(6942     if\(fork1\(\) == 0\)) 109.2129 Tj
-0 -436.6946 Td
-(6943       runcmd\(lcmd->left\);) 131.0554 Tj
-0 -446.1879 Td
-(6944     wait\(\);) 69.8962 Tj
-0 -455.6813 Td
-(6945     runcmd\(lcmd->right\);) 126.6869 Tj
-0 -465.1747 Td
-(6946     break;) 65.5277 Tj
-0 -474.668 Td
-(6947 ) 21.8426 Tj
-0 -484.1614 Td
-(6948 ) 21.8426 Tj
-0 -493.6547 Td
-(6949 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 69) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sh.c  Page 3) 152.898 Tj
-0 -28.4801 Td
-(6950   case PIPE:) 74.2647 Tj
-0 -37.9735 Td
-(6951     pcmd = \(struct pipecmd*\)cmd;) 161.635 Tj
-0 -47.4668 Td
-(6952     if\(pipe\(p\) < 0\)) 104.8443 Tj
-0 -56.9602 Td
-(6953       panic\("pipe"\);) 109.2129 Tj
-0 -66.4535 Td
-(6954     if\(fork1\(\) == 0\){) 113.5814 Tj
-0 -75.9469 Td
-(6955       close\(1\);) 87.3703 Tj
-0 -85.4403 Td
-(6956       dup\(p[1]\);) 91.7388 Tj
-0 -94.9336 Td
-(6957       close\(p[0]\);) 100.4758 Tj
-0 -104.427 Td
-(6958       close\(p[1]\);) 100.4758 Tj
-0 -113.9203 Td
-(6959       runcmd\(pcmd->left\);) 131.0554 Tj
-0 -123.4137 Td
-(6960     }) 43.6851 Tj
-0 -132.9071 Td
-(6961     if\(fork1\(\) == 0\){) 113.5814 Tj
-0 -142.4004 Td
-(6962       close\(0\);) 87.3703 Tj
-0 -151.8938 Td
-(6963       dup\(p[0]\);) 91.7388 Tj
-0 -161.3871 Td
-(6964       close\(p[0]\);) 100.4758 Tj
-0 -170.8805 Td
-(6965       close\(p[1]\);) 100.4758 Tj
-0 -180.3739 Td
-(6966       runcmd\(pcmd->right\);) 135.4239 Tj
-0 -189.8672 Td
-(6967     }) 43.6851 Tj
-0 -199.3606 Td
-(6968     close\(p[0]\);) 91.7388 Tj
-0 -208.8539 Td
-(6969     close\(p[1]\);) 91.7388 Tj
-0 -218.3473 Td
-(6970     wait\(\);) 69.8962 Tj
-0 -227.8407 Td
-(6971     wait\(\);) 69.8962 Tj
-0 -237.334 Td
-(6972     break;) 65.5277 Tj
-0 -246.8274 Td
-(6973 ) 21.8426 Tj
-0 -256.3207 Td
-(6974   case BACK:) 74.2647 Tj
-0 -265.8141 Td
-(6975     bcmd = \(struct backcmd*\)cmd;) 161.635 Tj
-0 -275.3075 Td
-(6976     if\(fork1\(\) == 0\)) 109.2129 Tj
-0 -284.8008 Td
-(6977       runcmd\(bcmd->cmd\);) 126.6869 Tj
-0 -294.2942 Td
-(6978     break;) 65.5277 Tj
-0 -303.7875 Td
-(6979   }) 34.9481 Tj
-0 -313.2809 Td
-(6980   exit\(\);) 61.1592 Tj
-0 -322.7743 Td
-(6981 }) 26.2111 Tj
-0 -332.2676 Td
-(6982 ) 21.8426 Tj
-0 -341.761 Td
-(6983 int) 34.9481 Tj
-0 -351.2543 Td
-(6984 getcmd\(char *buf, int nbuf\)) 139.7925 Tj
-0 -360.7477 Td
-(6985 {) 26.2111 Tj
-0 -370.2411 Td
-(6986   printf\(2, "$ "\);) 100.4758 Tj
-0 -379.7344 Td
-(6987   memset\(buf, 0, nbuf\);) 122.3184 Tj
-0 -389.2278 Td
-(6988   gets\(buf, nbuf\);) 100.4758 Tj
-0 -398.7211 Td
-(6989   if\(buf[0] == 0\) // EOF) 126.6869 Tj
-0 -408.2145 Td
-(6990     return -1;) 83.0018 Tj
-0 -417.7079 Td
-(6991   return 0;) 69.8962 Tj
-0 -427.2012 Td
-(6992 }) 26.2111 Tj
-0 -436.6946 Td
-(6993 ) 21.8426 Tj
-0 -446.1879 Td
-(6994 ) 21.8426 Tj
-0 -455.6813 Td
-(6995 ) 21.8426 Tj
-0 -465.1747 Td
-(6996 ) 21.8426 Tj
-0 -474.668 Td
-(6997 ) 21.8426 Tj
-0 -484.1614 Td
-(6998 ) 21.8426 Tj
-0 -493.6547 Td
-(6999 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 69) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 77 77
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sh.c  Page 4) 152.898 Tj
-0 -28.4801 Td
-(7000 int) 34.9481 Tj
-0 -37.9735 Td
-(7001 main\(void\)) 65.5277 Tj
-0 -47.4668 Td
-(7002 {) 26.2111 Tj
-0 -56.9602 Td
-(7003   static char buf[100];) 122.3184 Tj
-0 -66.4535 Td
-(7004   int fd;) 61.1592 Tj
-0 -75.9469 Td
-(7005 ) 21.8426 Tj
-0 -85.4403 Td
-(7006   // Assumes three file descriptors open.) 200.9517 Tj
-0 -94.9336 Td
-(7007   while\(\(fd = open\("console", O_RDWR\)\) >= 0\){) 218.4257 Tj
-0 -104.427 Td
-(7008     if\(fd >= 3\){) 91.7388 Tj
-0 -113.9203 Td
-(7009       close\(fd\);) 91.7388 Tj
-0 -123.4137 Td
-(7010       break;) 74.2647 Tj
-0 -132.9071 Td
-(7011     }) 43.6851 Tj
-0 -142.4004 Td
-(7012   }) 34.9481 Tj
-0 -151.8938 Td
-(7013 ) 21.8426 Tj
-0 -161.3871 Td
-(7014   // Read and run input commands.) 166.0035 Tj
-0 -170.8805 Td
-(7015   while\(getcmd\(buf, sizeof\(buf\)\) >= 0\){) 192.2146 Tj
-0 -180.3739 Td
-(7016     if\(buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' '\){) 266.4794 Tj
-0 -189.8672 Td
-(7017       // Clumsy but will have to do for now.) 214.0572 Tj
-0 -199.3606 Td
-(7018       // Chdir has no effect on the parent if run in the c\
-hild.) 297.059 Tj
-0 -208.8539 Td
-(7019       buf[strlen\(buf\)-1] = 0;  // chop \\n) 200.9517 Tj
-0 -218.3473 Td
-(7020       if\(chdir\(buf+3\) < 0\)) 135.4239 Tj
-0 -227.8407 Td
-(7021         printf\(2, "cannot cd %s\\n", buf+3\);) 209.6887 Tj
-0 -237.334 Td
-(7022       continue;) 87.3703 Tj
-0 -246.8274 Td
-(7023     }) 43.6851 Tj
-0 -256.3207 Td
-(7024     if\(fork1\(\) == 0\)) 109.2129 Tj
-0 -265.8141 Td
-(7025       runcmd\(parsecmd\(buf\)\);) 144.161 Tj
-0 -275.3075 Td
-(7026     wait\(\);) 69.8962 Tj
-0 -284.8008 Td
-(7027   }) 34.9481 Tj
-0 -294.2942 Td
-(7028   exit\(\);) 61.1592 Tj
-0 -303.7875 Td
-(7029 }) 26.2111 Tj
-0 -313.2809 Td
-(7030 ) 21.8426 Tj
-0 -322.7743 Td
-(7031 void) 39.3166 Tj
-0 -332.2676 Td
-(7032 panic\(char *s\)) 83.0018 Tj
-0 -341.761 Td
-(7033 {) 26.2111 Tj
-0 -351.2543 Td
-(7034   printf\(2, "%s\\n", s\);) 122.3184 Tj
-0 -360.7477 Td
-(7035   exit\(\);) 61.1592 Tj
-0 -370.2411 Td
-(7036 }) 26.2111 Tj
-0 -379.7344 Td
-(7037 ) 21.8426 Tj
-0 -389.2278 Td
-(7038 int) 34.9481 Tj
-0 -398.7211 Td
-(7039 fork1\(void\)) 69.8962 Tj
-0 -408.2145 Td
-(7040 {) 26.2111 Tj
-0 -417.7079 Td
-(7041   int pid;) 65.5277 Tj
-0 -427.2012 Td
-(7042 ) 21.8426 Tj
-0 -436.6946 Td
-(7043   pid = fork\(\);) 87.3703 Tj
-0 -446.1879 Td
-(7044   if\(pid == -1\)) 87.3703 Tj
-0 -455.6813 Td
-(7045     panic\("fork"\);) 100.4758 Tj
-0 -465.1747 Td
-(7046   return pid;) 78.6333 Tj
-0 -474.668 Td
-(7047 }) 26.2111 Tj
-0 -484.1614 Td
-(7048 ) 21.8426 Tj
-0 -493.6547 Td
-(7049 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 70) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sh.c  Page 5) 152.898 Tj
-0 -28.4801 Td
-(7050 // Constructors) 87.3703 Tj
-0 -37.9735 Td
-(7051 ) 21.8426 Tj
-0 -47.4668 Td
-(7052 struct cmd*) 69.8962 Tj
-0 -56.9602 Td
-(7053 execcmd\(void\)) 78.6333 Tj
-0 -66.4535 Td
-(7054 {) 26.2111 Tj
-0 -75.9469 Td
-(7055   struct execcmd *cmd;) 117.9499 Tj
-0 -85.4403 Td
-(7056 ) 21.8426 Tj
-0 -94.9336 Td
-(7057   cmd = malloc\(sizeof\(*cmd\)\);) 148.5295 Tj
-0 -104.427 Td
-(7058   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.2665 Tj
-0 -113.9203 Td
-(7059   cmd->type = EXEC;) 104.8443 Tj
-0 -123.4137 Td
-(7060   return \(struct cmd*\)cmd;) 135.4239 Tj
-0 -132.9071 Td
-(7061 }) 26.2111 Tj
-0 -142.4004 Td
-(7062 ) 21.8426 Tj
-0 -151.8938 Td
-(7063 struct cmd*) 69.8962 Tj
-0 -161.3871 Td
-(7064 redircmd\(struct cmd *subcmd, char *file, char *efile, int\
- mode, int fd\)) 332.0071 Tj
-0 -170.8805 Td
-(7065 {) 26.2111 Tj
-0 -180.3739 Td
-(7066   struct redircmd *cmd;) 122.3184 Tj
-0 -189.8672 Td
-(7067 ) 21.8426 Tj
-0 -199.3606 Td
-(7068   cmd = malloc\(sizeof\(*cmd\)\);) 148.5295 Tj
-0 -208.8539 Td
-(7069   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.2665 Tj
-0 -218.3473 Td
-(7070   cmd->type = REDIR;) 109.2129 Tj
-0 -227.8407 Td
-(7071   cmd->cmd = subcmd;) 109.2129 Tj
-0 -237.334 Td
-(7072   cmd->file = file;) 104.8443 Tj
-0 -246.8274 Td
-(7073   cmd->efile = efile;) 113.5814 Tj
-0 -256.3207 Td
-(7074   cmd->mode = mode;) 104.8443 Tj
-0 -265.8141 Td
-(7075   cmd->fd = fd;) 87.3703 Tj
-0 -275.3075 Td
-(7076   return \(struct cmd*\)cmd;) 135.4239 Tj
-0 -284.8008 Td
-(7077 }) 26.2111 Tj
-0 -294.2942 Td
-(7078 ) 21.8426 Tj
-0 -303.7875 Td
-(7079 struct cmd*) 69.8962 Tj
-0 -313.2809 Td
-(7080 pipecmd\(struct cmd *left, struct cmd *right\)) 214.0572 Tj
-0 -322.7743 Td
-(7081 {) 26.2111 Tj
-0 -332.2676 Td
-(7082   struct pipecmd *cmd;) 117.9499 Tj
-0 -341.761 Td
-(7083 ) 21.8426 Tj
-0 -351.2543 Td
-(7084   cmd = malloc\(sizeof\(*cmd\)\);) 148.5295 Tj
-0 -360.7477 Td
-(7085   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.2665 Tj
-0 -370.2411 Td
-(7086   cmd->type = PIPE;) 104.8443 Tj
-0 -379.7344 Td
-(7087   cmd->left = left;) 104.8443 Tj
-0 -389.2278 Td
-(7088   cmd->right = right;) 113.5814 Tj
-0 -398.7211 Td
-(7089   return \(struct cmd*\)cmd;) 135.4239 Tj
-0 -408.2145 Td
-(7090 }) 26.2111 Tj
-0 -417.7079 Td
-(7091 ) 21.8426 Tj
-0 -427.2012 Td
-(7092 ) 21.8426 Tj
-0 -436.6946 Td
-(7093 ) 21.8426 Tj
-0 -446.1879 Td
-(7094 ) 21.8426 Tj
-0 -455.6813 Td
-(7095 ) 21.8426 Tj
-0 -465.1747 Td
-(7096 ) 21.8426 Tj
-0 -474.668 Td
-(7097 ) 21.8426 Tj
-0 -484.1614 Td
-(7098 ) 21.8426 Tj
-0 -493.6547 Td
-(7099 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 70) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 78 78
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sh.c  Page 6) 152.898 Tj
-0 -28.4801 Td
-(7100 struct cmd*) 69.8962 Tj
-0 -37.9735 Td
-(7101 listcmd\(struct cmd *left, struct cmd *right\)) 214.0572 Tj
-0 -47.4668 Td
-(7102 {) 26.2111 Tj
-0 -56.9602 Td
-(7103   struct listcmd *cmd;) 117.9499 Tj
-0 -66.4535 Td
-(7104 ) 21.8426 Tj
-0 -75.9469 Td
-(7105   cmd = malloc\(sizeof\(*cmd\)\);) 148.5295 Tj
-0 -85.4403 Td
-(7106   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.2665 Tj
-0 -94.9336 Td
-(7107   cmd->type = LIST;) 104.8443 Tj
-0 -104.427 Td
-(7108   cmd->left = left;) 104.8443 Tj
-0 -113.9203 Td
-(7109   cmd->right = right;) 113.5814 Tj
-0 -123.4137 Td
-(7110   return \(struct cmd*\)cmd;) 135.4239 Tj
-0 -132.9071 Td
-(7111 }) 26.2111 Tj
-0 -142.4004 Td
-(7112 ) 21.8426 Tj
-0 -151.8938 Td
-(7113 struct cmd*) 69.8962 Tj
-0 -161.3871 Td
-(7114 backcmd\(struct cmd *subcmd\)) 139.7925 Tj
-0 -170.8805 Td
-(7115 {) 26.2111 Tj
-0 -180.3739 Td
-(7116   struct backcmd *cmd;) 117.9499 Tj
-0 -189.8672 Td
-(7117 ) 21.8426 Tj
-0 -199.3606 Td
-(7118   cmd = malloc\(sizeof\(*cmd\)\);) 148.5295 Tj
-0 -208.8539 Td
-(7119   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.2665 Tj
-0 -218.3473 Td
-(7120   cmd->type = BACK;) 104.8443 Tj
-0 -227.8407 Td
-(7121   cmd->cmd = subcmd;) 109.2129 Tj
-0 -237.334 Td
-(7122   return \(struct cmd*\)cmd;) 135.4239 Tj
-0 -246.8274 Td
-(7123 }) 26.2111 Tj
-0 -256.3207 Td
-(7124 ) 21.8426 Tj
-0 -265.8141 Td
-(7125 ) 21.8426 Tj
-0 -275.3075 Td
-(7126 ) 21.8426 Tj
-0 -284.8008 Td
-(7127 ) 21.8426 Tj
-0 -294.2942 Td
-(7128 ) 21.8426 Tj
-0 -303.7875 Td
-(7129 ) 21.8426 Tj
-0 -313.2809 Td
-(7130 ) 21.8426 Tj
-0 -322.7743 Td
-(7131 ) 21.8426 Tj
-0 -332.2676 Td
-(7132 ) 21.8426 Tj
-0 -341.761 Td
-(7133 ) 21.8426 Tj
-0 -351.2543 Td
-(7134 ) 21.8426 Tj
-0 -360.7477 Td
-(7135 ) 21.8426 Tj
-0 -370.2411 Td
-(7136 ) 21.8426 Tj
-0 -379.7344 Td
-(7137 ) 21.8426 Tj
-0 -389.2278 Td
-(7138 ) 21.8426 Tj
-0 -398.7211 Td
-(7139 ) 21.8426 Tj
-0 -408.2145 Td
-(7140 ) 21.8426 Tj
-0 -417.7079 Td
-(7141 ) 21.8426 Tj
-0 -427.2012 Td
-(7142 ) 21.8426 Tj
-0 -436.6946 Td
-(7143 ) 21.8426 Tj
-0 -446.1879 Td
-(7144 ) 21.8426 Tj
-0 -455.6813 Td
-(7145 ) 21.8426 Tj
-0 -465.1747 Td
-(7146 ) 21.8426 Tj
-0 -474.668 Td
-(7147 ) 21.8426 Tj
-0 -484.1614 Td
-(7148 ) 21.8426 Tj
-0 -493.6547 Td
-(7149 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 71) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sh.c  Page 7) 152.898 Tj
-0 -28.4801 Td
-(7150 // Parsing) 65.5277 Tj
-0 -37.9735 Td
-(7151 ) 21.8426 Tj
-0 -47.4668 Td
-(7152 char whitespace[] = " \\t\\r\\n\\v";) 161.635 Tj
-0 -56.9602 Td
-(7153 char symbols[] = "<|>&;\(\)";) 139.7925 Tj
-0 -66.4535 Td
-(7154 ) 21.8426 Tj
-0 -75.9469 Td
-(7155 int) 34.9481 Tj
-0 -85.4403 Td
-(7156 gettoken\(char **ps, char *es, char **q, char **eq\)) 240.2683 Tj
-0 -94.9336 Td
-(7157 {) 26.2111 Tj
-0 -104.427 Td
-(7158   char *s;) 65.5277 Tj
-0 -113.9203 Td
-(7159   int ret;) 65.5277 Tj
-0 -123.4137 Td
-(7160 ) 21.8426 Tj
-0 -132.9071 Td
-(7161   s = *ps;) 65.5277 Tj
-0 -142.4004 Td
-(7162   while\(s < es && strchr\(whitespace, *s\)\)) 200.9517 Tj
-0 -151.8938 Td
-(7163     s++;) 56.7907 Tj
-0 -161.3871 Td
-(7164   if\(q\)) 52.4222 Tj
-0 -170.8805 Td
-(7165     *q = s;) 69.8962 Tj
-0 -180.3739 Td
-(7166   ret = *s;) 69.8962 Tj
-0 -189.8672 Td
-(7167   switch\(*s\){) 78.6333 Tj
-0 -199.3606 Td
-(7168   case 0:) 61.1592 Tj
-0 -208.8539 Td
-(7169     break;) 65.5277 Tj
-0 -218.3473 Td
-(7170   case '|':) 69.8962 Tj
-0 -227.8407 Td
-(7171   case '\(':) 69.8962 Tj
-0 -237.334 Td
-(7172   case '\)':) 69.8962 Tj
-0 -246.8274 Td
-(7173   case ';':) 69.8962 Tj
-0 -256.3207 Td
-(7174   case '&':) 69.8962 Tj
-0 -265.8141 Td
-(7175   case '<':) 69.8962 Tj
-0 -275.3075 Td
-(7176     s++;) 56.7907 Tj
-0 -284.8008 Td
-(7177     break;) 65.5277 Tj
-0 -294.2942 Td
-(7178   case '>':) 69.8962 Tj
-0 -303.7875 Td
-(7179     s++;) 56.7907 Tj
-0 -313.2809 Td
-(7180     if\(*s == '>'\){) 100.4758 Tj
-0 -322.7743 Td
-(7181       ret = '+';) 91.7388 Tj
-0 -332.2676 Td
-(7182       s++;) 65.5277 Tj
-0 -341.761 Td
-(7183     }) 43.6851 Tj
-0 -351.2543 Td
-(7184     break;) 65.5277 Tj
-0 -360.7477 Td
-(7185   default:) 65.5277 Tj
-0 -370.2411 Td
-(7186     ret = 'a';) 83.0018 Tj
-0 -379.7344 Td
-(7187     while\(s < es && !strchr\(whitespace, *s\) && !strchr\(\
-symbols, *s\)\)) 318.9016 Tj
-0 -389.2278 Td
-(7188       s++;) 65.5277 Tj
-0 -398.7211 Td
-(7189     break;) 65.5277 Tj
-0 -408.2145 Td
-(7190   }) 34.9481 Tj
-0 -417.7079 Td
-(7191   if\(eq\)) 56.7907 Tj
-0 -427.2012 Td
-(7192     *eq = s;) 74.2647 Tj
-0 -436.6946 Td
-(7193 ) 21.8426 Tj
-0 -446.1879 Td
-(7194   while\(s < es && strchr\(whitespace, *s\)\)) 200.9517 Tj
-0 -455.6813 Td
-(7195     s++;) 56.7907 Tj
-0 -465.1747 Td
-(7196   *ps = s;) 65.5277 Tj
-0 -474.668 Td
-(7197   return ret;) 78.6333 Tj
-0 -484.1614 Td
-(7198 }) 26.2111 Tj
-0 -493.6547 Td
-(7199 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 71) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 79 79
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sh.c  Page 8) 152.898 Tj
-0 -28.4801 Td
-(7200 int) 34.9481 Tj
-0 -37.9735 Td
-(7201 peek\(char **ps, char *es, char *toks\)) 183.4776 Tj
-0 -47.4668 Td
-(7202 {) 26.2111 Tj
-0 -56.9602 Td
-(7203   char *s;) 65.5277 Tj
-0 -66.4535 Td
-(7204 ) 21.8426 Tj
-0 -75.9469 Td
-(7205   s = *ps;) 65.5277 Tj
-0 -85.4403 Td
-(7206   while\(s < es && strchr\(whitespace, *s\)\)) 200.9517 Tj
-0 -94.9336 Td
-(7207     s++;) 56.7907 Tj
-0 -104.427 Td
-(7208   *ps = s;) 65.5277 Tj
-0 -113.9203 Td
-(7209   return *s && strchr\(toks, *s\);) 161.635 Tj
-0 -123.4137 Td
-(7210 }) 26.2111 Tj
-0 -132.9071 Td
-(7211 ) 21.8426 Tj
-0 -142.4004 Td
-(7212 struct cmd *parseline\(char**, char*\);) 183.4776 Tj
-0 -151.8938 Td
-(7213 struct cmd *parsepipe\(char**, char*\);) 183.4776 Tj
-0 -161.3871 Td
-(7214 struct cmd *parseexec\(char**, char*\);) 183.4776 Tj
-0 -170.8805 Td
-(7215 struct cmd *nulterminate\(struct cmd*\);) 187.8461 Tj
-0 -180.3739 Td
-(7216 ) 21.8426 Tj
-0 -189.8672 Td
-(7217 struct cmd*) 69.8962 Tj
-0 -199.3606 Td
-(7218 parsecmd\(char *s\)) 96.1073 Tj
-0 -208.8539 Td
-(7219 {) 26.2111 Tj
-0 -218.3473 Td
-(7220   char *es;) 69.8962 Tj
-0 -227.8407 Td
-(7221   struct cmd *cmd;) 100.4758 Tj
-0 -237.334 Td
-(7222 ) 21.8426 Tj
-0 -246.8274 Td
-(7223   es = s + strlen\(s\);) 113.5814 Tj
-0 -256.3207 Td
-(7224   cmd = parseline\(&s, es\);) 135.4239 Tj
-0 -265.8141 Td
-(7225   peek\(&s, es, ""\);) 104.8443 Tj
-0 -275.3075 Td
-(7226   if\(s != es\){) 83.0018 Tj
-0 -284.8008 Td
-(7227     printf\(2, "leftovers: %s\\n", s\);) 179.1091 Tj
-0 -294.2942 Td
-(7228     panic\("syntax"\);) 109.2129 Tj
-0 -303.7875 Td
-(7229   }) 34.9481 Tj
-0 -313.2809 Td
-(7230   nulterminate\(cmd\);) 109.2129 Tj
-0 -322.7743 Td
-(7231   return cmd;) 78.6333 Tj
-0 -332.2676 Td
-(7232 }) 26.2111 Tj
-0 -341.761 Td
-(7233 ) 21.8426 Tj
-0 -351.2543 Td
-(7234 struct cmd*) 69.8962 Tj
-0 -360.7477 Td
-(7235 parseline\(char **ps, char *es\)) 152.898 Tj
-0 -370.2411 Td
-(7236 {) 26.2111 Tj
-0 -379.7344 Td
-(7237   struct cmd *cmd;) 100.4758 Tj
-0 -389.2278 Td
-(7238 ) 21.8426 Tj
-0 -398.7211 Td
-(7239   cmd = parsepipe\(ps, es\);) 135.4239 Tj
-0 -408.2145 Td
-(7240   while\(peek\(ps, es, "&"\)\){) 139.7925 Tj
-0 -417.7079 Td
-(7241     gettoken\(ps, es, 0, 0\);) 139.7925 Tj
-0 -427.2012 Td
-(7242     cmd = backcmd\(cmd\);) 122.3184 Tj
-0 -436.6946 Td
-(7243   }) 34.9481 Tj
-0 -446.1879 Td
-(7244   if\(peek\(ps, es, ";"\)\){) 126.6869 Tj
-0 -455.6813 Td
-(7245     gettoken\(ps, es, 0, 0\);) 139.7925 Tj
-0 -465.1747 Td
-(7246     cmd = listcmd\(cmd, parseline\(ps, es\)\);) 205.3202 Tj
-0 -474.668 Td
-(7247   }) 34.9481 Tj
-0 -484.1614 Td
-(7248   return cmd;) 78.6333 Tj
-0 -493.6547 Td
-(7249 }) 26.2111 Tj
-0 -522.1348 Td
-(Sheet 72) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sh.c  Page 9) 152.898 Tj
-0 -28.4801 Td
-(7250 struct cmd*) 69.8962 Tj
-0 -37.9735 Td
-(7251 parsepipe\(char **ps, char *es\)) 152.898 Tj
-0 -47.4668 Td
-(7252 {) 26.2111 Tj
-0 -56.9602 Td
-(7253   struct cmd *cmd;) 100.4758 Tj
-0 -66.4535 Td
-(7254 ) 21.8426 Tj
-0 -75.9469 Td
-(7255   cmd = parseexec\(ps, es\);) 135.4239 Tj
-0 -85.4403 Td
-(7256   if\(peek\(ps, es, "|"\)\){) 126.6869 Tj
-0 -94.9336 Td
-(7257     gettoken\(ps, es, 0, 0\);) 139.7925 Tj
-0 -104.427 Td
-(7258     cmd = pipecmd\(cmd, parsepipe\(ps, es\)\);) 205.3202 Tj
-0 -113.9203 Td
-(7259   }) 34.9481 Tj
-0 -123.4137 Td
-(7260   return cmd;) 78.6333 Tj
-0 -132.9071 Td
-(7261 }) 26.2111 Tj
-0 -142.4004 Td
-(7262 ) 21.8426 Tj
-0 -151.8938 Td
-(7263 struct cmd*) 69.8962 Tj
-0 -161.3871 Td
-(7264 parseredirs\(struct cmd *cmd, char **ps, char *es\)) 235.8998 Tj
-0 -170.8805 Td
-(7265 {) 26.2111 Tj
-0 -180.3739 Td
-(7266   int tok;) 65.5277 Tj
-0 -189.8672 Td
-(7267   char *q, *eq;) 87.3703 Tj
-0 -199.3606 Td
-(7268 ) 21.8426 Tj
-0 -208.8539 Td
-(7269   while\(peek\(ps, es, "<>"\)\){) 144.161 Tj
-0 -218.3473 Td
-(7270     tok = gettoken\(ps, es, 0, 0\);) 166.0035 Tj
-0 -227.8407 Td
-(7271     if\(gettoken\(ps, es, &q, &eq\) != 'a'\)) 196.5831 Tj
-0 -237.334 Td
-(7272       panic\("missing file for redirection"\);) 214.0572 Tj
-0 -246.8274 Td
-(7273     switch\(tok\){) 91.7388 Tj
-0 -256.3207 Td
-(7274     case '<':) 78.6333 Tj
-0 -265.8141 Td
-(7275       cmd = redircmd\(cmd, q, eq, O_RDONLY, 0\);) 222.7942 Tj
-0 -275.3075 Td
-(7276       break;) 74.2647 Tj
-0 -284.8008 Td
-(7277     case '>':) 78.6333 Tj
-0 -294.2942 Td
-(7278       cmd = redircmd\(cmd, q, eq, O_WRONLY|O_CREATE, 1\);) 262.1109 Tj
-0 -303.7875 Td
-(7279       break;) 74.2647 Tj
-0 -313.2809 Td
-(7280     case '+':  // >>) 109.2129 Tj
-0 -322.7743 Td
-(7281       cmd = redircmd\(cmd, q, eq, O_WRONLY|O_CREATE, 1\);) 262.1109 Tj
-0 -332.2676 Td
-(7282       break;) 74.2647 Tj
-0 -341.761 Td
-(7283     }) 43.6851 Tj
-0 -351.2543 Td
-(7284   }) 34.9481 Tj
-0 -360.7477 Td
-(7285   return cmd;) 78.6333 Tj
-0 -370.2411 Td
-(7286 }) 26.2111 Tj
-0 -379.7344 Td
-(7287 ) 21.8426 Tj
-0 -389.2278 Td
-(7288 ) 21.8426 Tj
-0 -398.7211 Td
-(7289 ) 21.8426 Tj
-0 -408.2145 Td
-(7290 ) 21.8426 Tj
-0 -417.7079 Td
-(7291 ) 21.8426 Tj
-0 -427.2012 Td
-(7292 ) 21.8426 Tj
-0 -436.6946 Td
-(7293 ) 21.8426 Tj
-0 -446.1879 Td
-(7294 ) 21.8426 Tj
-0 -455.6813 Td
-(7295 ) 21.8426 Tj
-0 -465.1747 Td
-(7296 ) 21.8426 Tj
-0 -474.668 Td
-(7297 ) 21.8426 Tj
-0 -484.1614 Td
-(7298 ) 21.8426 Tj
-0 -493.6547 Td
-(7299 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 72) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Page: 80 80
-%%BeginPageSetup
-%%PageOrientation: Landscape
-pdfStartPage
-180 rotate
--612 -792 translate
-0 0 612 792 re W
-%%EndPageSetup
-[] 0 d
-1 i
-0 j
-0 J
-10 M
-1 w
-/DeviceGray {} cs
-[0] sc
-/DeviceGray {} CS
-[0] SC
-false op
-false OP
-{} settransfer
-0 0 612 792 re
-W
-q
-q
-[0.1 0 0 0.1 0 0] cm
-q
-180 3960 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 738.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sh.c  Page 10) 157.2665 Tj
-0 -28.4801 Td
-(7300 struct cmd*) 69.8962 Tj
-0 -37.9735 Td
-(7301 parseblock\(char **ps, char *es\)) 157.2665 Tj
-0 -47.4668 Td
-(7302 {) 26.2111 Tj
-0 -56.9602 Td
-(7303   struct cmd *cmd;) 100.4758 Tj
-0 -66.4535 Td
-(7304 ) 21.8426 Tj
-0 -75.9469 Td
-(7305   if\(!peek\(ps, es, "\("\)\)) 126.6869 Tj
-0 -85.4403 Td
-(7306     panic\("parseblock"\);) 126.6869 Tj
-0 -94.9336 Td
-(7307   gettoken\(ps, es, 0, 0\);) 131.0554 Tj
-0 -104.427 Td
-(7308   cmd = parseline\(ps, es\);) 135.4239 Tj
-0 -113.9203 Td
-(7309   if\(!peek\(ps, es, "\)"\)\)) 126.6869 Tj
-0 -123.4137 Td
-(7310     panic\("syntax - missing \)"\);) 161.635 Tj
-0 -132.9071 Td
-(7311   gettoken\(ps, es, 0, 0\);) 131.0554 Tj
-0 -142.4004 Td
-(7312   cmd = parseredirs\(cmd, ps, es\);) 166.0035 Tj
-0 -151.8938 Td
-(7313   return cmd;) 78.6333 Tj
-0 -161.3871 Td
-(7314 }) 26.2111 Tj
-0 -170.8805 Td
-(7315 ) 21.8426 Tj
-0 -180.3739 Td
-(7316 struct cmd*) 69.8962 Tj
-0 -189.8672 Td
-(7317 parseexec\(char **ps, char *es\)) 152.898 Tj
-0 -199.3606 Td
-(7318 {) 26.2111 Tj
-0 -208.8539 Td
-(7319   char *q, *eq;) 87.3703 Tj
-0 -218.3473 Td
-(7320   int tok, argc;) 91.7388 Tj
-0 -227.8407 Td
-(7321   struct execcmd *cmd;) 117.9499 Tj
-0 -237.334 Td
-(7322   struct cmd *ret;) 100.4758 Tj
-0 -246.8274 Td
-(7323 ) 21.8426 Tj
-0 -256.3207 Td
-(7324   if\(peek\(ps, es, "\("\)\)) 122.3184 Tj
-0 -265.8141 Td
-(7325     return parseblock\(ps, es\);) 152.898 Tj
-0 -275.3075 Td
-(7326 ) 21.8426 Tj
-0 -284.8008 Td
-(7327   ret = execcmd\(\);) 100.4758 Tj
-0 -294.2942 Td
-(7328   cmd = \(struct execcmd*\)ret;) 148.5295 Tj
-0 -303.7875 Td
-(7329 ) 21.8426 Tj
-0 -313.2809 Td
-(7330   argc = 0;) 69.8962 Tj
-0 -322.7743 Td
-(7331   ret = parseredirs\(ret, ps, es\);) 166.0035 Tj
-0 -332.2676 Td
-(7332   while\(!peek\(ps, es, "|\)&;"\)\){) 157.2665 Tj
-0 -341.761 Td
-(7333     if\(\(tok=gettoken\(ps, es, &q, &eq\)\) == 0\)) 214.0572 Tj
-0 -351.2543 Td
-(7334       break;) 74.2647 Tj
-0 -360.7477 Td
-(7335     if\(tok != 'a'\)) 100.4758 Tj
-0 -370.2411 Td
-(7336       panic\("syntax"\);) 117.9499 Tj
-0 -379.7344 Td
-(7337     cmd->argv[argc] = q;) 126.6869 Tj
-0 -389.2278 Td
-(7338     cmd->eargv[argc] = eq;) 135.4239 Tj
-0 -398.7211 Td
-(7339     argc++;) 69.8962 Tj
-0 -408.2145 Td
-(7340     if\(argc >= MAXARGS\)) 122.3184 Tj
-0 -417.7079 Td
-(7341       panic\("too many args"\);) 148.5295 Tj
-0 -427.2012 Td
-(7342     ret = parseredirs\(ret, ps, es\);) 174.7406 Tj
-0 -436.6946 Td
-(7343   }) 34.9481 Tj
-0 -446.1879 Td
-(7344   cmd->argv[argc] = 0;) 117.9499 Tj
-0 -455.6813 Td
-(7345   cmd->eargv[argc] = 0;) 122.3184 Tj
-0 -465.1747 Td
-(7346   return ret;) 78.6333 Tj
-0 -474.668 Td
-(7347 }) 26.2111 Tj
-0 -484.1614 Td
-(7348 ) 21.8426 Tj
-0 -493.6547 Td
-(7349 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 73) 34.9481 Tj
-Q
-Q
-q
-180 500 5760 3460 re
-W
-/DeviceGray {} CS
-[0] SC
-/DeviceGray {} cs
-[0] sc
-q
-[10 0 0 10 0 0] cm
-[1 0 0 1 0 0] Tm
-0 0 Td
-[0 -0.9679 1 0 564.72 392.865] Tm
-0 0 Td
-/F8_0 8.7022 Tf
-(Sep  3 00:44 2009  xv6/sh.c  Page 11) 157.2665 Tj
-0 -28.4801 Td
-(7350 // NUL-terminate all the counted strings.) 200.9517 Tj
-0 -37.9735 Td
-(7351 struct cmd*) 69.8962 Tj
-0 -47.4668 Td
-(7352 nulterminate\(struct cmd *cmd\)) 148.5295 Tj
-0 -56.9602 Td
-(7353 {) 26.2111 Tj
-0 -66.4535 Td
-(7354   int i;) 56.7907 Tj
-0 -75.9469 Td
-(7355   struct backcmd *bcmd;) 122.3184 Tj
-0 -85.4403 Td
-(7356   struct execcmd *ecmd;) 122.3184 Tj
-0 -94.9336 Td
-(7357   struct listcmd *lcmd;) 122.3184 Tj
-0 -104.427 Td
-(7358   struct pipecmd *pcmd;) 122.3184 Tj
-0 -113.9203 Td
-(7359   struct redircmd *rcmd;) 126.6869 Tj
-0 -123.4137 Td
-(7360 ) 21.8426 Tj
-0 -132.9071 Td
-(7361   if\(cmd == 0\)) 83.0018 Tj
-0 -142.4004 Td
-(7362     return 0;) 78.6333 Tj
-0 -151.8938 Td
-(7363 ) 21.8426 Tj
-0 -161.3871 Td
-(7364   switch\(cmd->type\){) 109.2129 Tj
-0 -170.8805 Td
-(7365   case EXEC:) 74.2647 Tj
-0 -180.3739 Td
-(7366     ecmd = \(struct execcmd*\)cmd;) 161.635 Tj
-0 -189.8672 Td
-(7367     for\(i=0; ecmd->argv[i]; i++\)) 161.635 Tj
-0 -199.3606 Td
-(7368       *ecmd->eargv[i] = 0;) 135.4239 Tj
-0 -208.8539 Td
-(7369     break;) 65.5277 Tj
-0 -218.3473 Td
-(7370 ) 21.8426 Tj
-0 -227.8407 Td
-(7371   case REDIR:) 78.6333 Tj
-0 -237.334 Td
-(7372     rcmd = \(struct redircmd*\)cmd;) 166.0035 Tj
-0 -246.8274 Td
-(7373     nulterminate\(rcmd->cmd\);) 144.161 Tj
-0 -256.3207 Td
-(7374     *rcmd->efile = 0;) 113.5814 Tj
-0 -265.8141 Td
-(7375     break;) 65.5277 Tj
-0 -275.3075 Td
-(7376 ) 21.8426 Tj
-0 -284.8008 Td
-(7377   case PIPE:) 74.2647 Tj
-0 -294.2942 Td
-(7378     pcmd = \(struct pipecmd*\)cmd;) 161.635 Tj
-0 -303.7875 Td
-(7379     nulterminate\(pcmd->left\);) 148.5295 Tj
-0 -313.2809 Td
-(7380     nulterminate\(pcmd->right\);) 152.898 Tj
-0 -322.7743 Td
-(7381     break;) 65.5277 Tj
-0 -332.2676 Td
-(7382 ) 21.8426 Tj
-0 -341.761 Td
-(7383   case LIST:) 74.2647 Tj
-0 -351.2543 Td
-(7384     lcmd = \(struct listcmd*\)cmd;) 161.635 Tj
-0 -360.7477 Td
-(7385     nulterminate\(lcmd->left\);) 148.5295 Tj
-0 -370.2411 Td
-(7386     nulterminate\(lcmd->right\);) 152.898 Tj
-0 -379.7344 Td
-(7387     break;) 65.5277 Tj
-0 -389.2278 Td
-(7388 ) 21.8426 Tj
-0 -398.7211 Td
-(7389   case BACK:) 74.2647 Tj
-0 -408.2145 Td
-(7390     bcmd = \(struct backcmd*\)cmd;) 161.635 Tj
-0 -417.7079 Td
-(7391     nulterminate\(bcmd->cmd\);) 144.161 Tj
-0 -427.2012 Td
-(7392     break;) 65.5277 Tj
-0 -436.6946 Td
-(7393   }) 34.9481 Tj
-0 -446.1879 Td
-(7394   return cmd;) 78.6333 Tj
-0 -455.6813 Td
-(7395 }) 26.2111 Tj
-0 -465.1747 Td
-(7396 ) 21.8426 Tj
-0 -474.668 Td
-(7397 ) 21.8426 Tj
-0 -484.1614 Td
-(7398 ) 21.8426 Tj
-0 -493.6547 Td
-(7399 ) 21.8426 Tj
-0 -522.1348 Td
-(Sheet 73) 34.9481 Tj
-Q
-Q
-Q
-Q
-showpage
-%%PageTrailer
-pdfEndPage
-%%Trailer
-end
-%%DocumentSuppliedResources:
-%%+ font APYGPQ+LucidaSans-Typewriter83
-%%EOF
-- 
GitLab