]> Devi Nivas Git - cs3210-lab0.git/commitdiff
final xv6 for 2007
authorrsc <rsc>
Thu, 30 Aug 2007 14:09:14 +0000 (14:09 +0000)
committerrsc <rsc>
Thu, 30 Aug 2007 14:09:14 +0000 (14:09 +0000)
xv6.pdf
xv6.ps

diff --git a/xv6.pdf b/xv6.pdf
index 0ff81d8715019f32dd83575d34d40134dd824b18..d6defdb9752e8d8692f2c8128f2d7fd7d0b285d6 100644 (file)
Binary files a/xv6.pdf and b/xv6.pdf differ
diff --git a/xv6.ps b/xv6.ps
index 8a7a9dbb06719649f7ad31731967de8efc895edf..b73ae3e3be0a8e76643bd7db959957bedc544766 100644 (file)
--- a/xv6.ps
+++ b/xv6.ps
@@ -1,16 +1,16 @@
 %!PS-Adobe-3.0
-%%Creator: xpdf/pdftops 3.00
+%%Creator: xpdf/pdftops 3.01
 %%LanguageLevel: 2
 %%DocumentSuppliedResources: (atend)
 %%DocumentMedia: plain 612 792 0 () ()
 %%BoundingBox: 0 0 612 792
-%%Pages: 75
+%%Pages: 79
 %%EndComments
 %%BeginDefaults
 %%PageMedia: plain
 %%EndDefaults
 %%BeginProlog
-%%BeginResource: procset xpdf 3.00 0
+%%BeginResource: procset xpdf 3.01 0
 /xpdf 75 dict def xpdf begin
 % PDF special state
 /pdfDictSize 15 def
 } 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
   /pdfTextClipPath [] def
 } def
 /pdfEndPage { end } def
-% separation convention operators
-/findcmykcustomcolor where {
-  pop
-}{
-  /findcmykcustomcolor { 5 array astore } def
-} ifelse
-/setcustomcolor where {
-  pop
-}{
-  /setcustomcolor {
-    exch
-    [ exch /Separation exch dup 4 get exch /DeviceCMYK exch
-      0 4 getinterval cvx
-      [ exch /dup load exch { mul exch dup } /forall load
-        /pop load dup ] cvx
-    ] setcolorspace setcolor
-  } def
-} ifelse
-/customcolorimage where {
-  pop
-}{
-  /customcolorimage {
-    gsave
-    [ exch /Separation exch dup 4 get exch /DeviceCMYK exch
-      0 4 getinterval
-      [ exch /dup load exch { mul exch dup } /forall load
-        /pop load dup ] cvx
-    ] setcolorspace
-    10 dict begin
-      /ImageType 1 def
-      /DataSource exch def
-      /ImageMatrix exch def
-      /BitsPerComponent exch def
-      /Height exch def
-      /Width exch def
-      /Decode [1 0] def
-    currentdict end
-    image
-    grestore
-  } def
-} ifelse
 % PDF color state
-/sCol {
-  pdfLastStroke not {
-    pdfStroke aload length
-    dup 1 eq {
-      pop setgray
-    }{
-      dup 3 eq {
-        pop setrgbcolor
-      }{
-        4 eq {
-          setcmykcolor
-        }{
-          findcmykcustomcolor exch setcustomcolor
-        } ifelse
-      } ifelse
-    } ifelse
-    /pdfLastStroke true def /pdfLastFill false def
-  } if
-} def
+/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 {
-    pdfFill aload length
-    dup 1 eq {
-      pop setgray
-    }{
-      dup 3 eq {
-        pop setrgbcolor
-      }{
-        4 eq {
-          setcmykcolor
-        }{
-          findcmykcustomcolor exch setcustomcolor
-        } ifelse
-      } ifelse
-    } ifelse
+    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
   end
   definefont pop
 } def
-/pdfMakeFont16L3 {
-  1 index /CIDFont resourcestatus {
-    pop pop 1 index /CIDFont findresource /CIDFontType known
-  } {
-    false
-  } ifelse
-  {
-    0 eq { /Identity-H } { /Identity-V } ifelse
-    exch 1 array astore composefont pop
-  } {
-    pdfMakeFont16
-  } ifelse
-} def
 % graphics state operators
 /q { gsave pdfDictSize dict begin } def
-/Q { end grestore } 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 { setlinecap } def
 /M { setmiterlimit } def
 /w { setlinewidth } def
-% color operators
-/g { dup 1 array astore /pdfFill exch def setgray
-     /pdfLastFill true def /pdfLastStroke false def } def
-/G { dup 1 array astore /pdfStroke exch def setgray
-     /pdfLastStroke true def /pdfLastFill false def } def
-/rg { 3 copy 3 array astore /pdfFill exch def setrgbcolor
-      /pdfLastFill true def /pdfLastStroke false def } def
-/RG { 3 copy 3 array astore /pdfStroke exch def setrgbcolor
-      /pdfLastStroke true def /pdfLastFill false def } def
-/k { 4 copy 4 array astore /pdfFill exch def setcmykcolor
-     /pdfLastFill true def /pdfLastStroke false def } def
-/K { 4 copy 4 array astore /pdfStroke exch def setcmykcolor
-     /pdfLastStroke true def /pdfLastFill false def } def
-/ck { 6 copy 6 array astore /pdfFill exch def
-      findcmykcustomcolor exch setcustomcolor
-      /pdfLastFill true def /pdfLastStroke false def } def
-/CK { 6 copy 6 array astore /pdfStroke exch def
-      findcmykcustomcolor exch setcustomcolor
-      /pdfLastStroke true def /pdfLastFill false def } def
 % path segment operators
 /m { moveto } def
 /l { lineto } def
     not { pop exit } if
     (%-EOD-) eq { exit } if } loop
 } def
-/pdfImSep {
-  findcmykcustomcolor exch
-  dup /Width get /pdfImBuf1 exch string def
-  dup /Decode get aload pop 1 index sub /pdfImDecodeRange exch def
-  /pdfImDecodeLow exch def
-  begin Width Height BitsPerComponent ImageMatrix DataSource end
-  /pdfImData exch def
-  { pdfImData pdfImBuf1 readstring pop
-    0 1 2 index length 1 sub {
-      1 index exch 2 copy get
-      pdfImDecodeRange mul 255 div pdfImDecodeLow add round cvi
-      255 exch sub put
-    } for }
-  6 5 roll customcolorimage
-  { 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
-end
-/__tumble {
-  180 rotate
-  -612 -792 translate
+/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 axialCol sc
+    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
+    0 360 arc h f*
+  } ifelse
+} def
+end
 %%EndResource
 %%EndProlog
 %%BeginSetup
 xpdf begin
-%%BeginResource: font LTWFJF+OurCharSet
-%!FontType1-1.0: LTWFJF+OurCharSet
+%%BeginResource: font LucidaSans-Typewriter83
+%!FontType1-1.0: 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 false def
+/isFixedPitch true def
 /ItalicAngle 0 def
-/UnderlinePosition -100 def
-/UnderlineThickness 50 def
+/UnderlinePosition 0 def
+/UnderlineThickness 0 def
 end readonly def
-/FontName /LTWFJF+OurCharSet def
+/FontName /LucidaSans-Typewriter83 def
 /PaintType 0 def
 /FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-12 -205 618 928] readonly def
+/FontMatrix [0.000833333 0 0 0.000833333 0 0] readonly def
+/FontBBox [0 -205 602 783] readonly def
 /StrokeWidth 0 def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
@@ -481,325 +526,330 @@ FE8DA1ABE05931A20F8FC365A0F90C9A22578FEBDD03E4201D2887923DD20ED9
 2F8F50AA500DE6414F5521ACCBBA45FBD55A4882C7485B52146BD36775948914
 F8D5FB4C38AFAA25CC8946C7A7DBA010B186D6B5B07DA514976B3CC03535B838
 7B3B0BE3D2A1813A3B406846433DF6235D79BA455E54E35184F42053C1FB0105
-CDB7B017C5BF449CEF69EF7E7B143698D00B249BA50E98D198FCE708667252B4
-E45CC9BE25735FF617ABA79311E655756E2F7993ACB8E4F27F76F14A9088DA85
-6E17B25267A4D8177DEF6684BEB1F400B6B07492E58311CB44EC0B528F8FECE8
-E96A50FC1F544E0F3DDFEC55E4CD9C34AE42CA8EF98BB1901E6D97DFECA023E0
-F1D49EC9054CFEFE87ED611814870C75F636FA9F1430AA5F53C397BD13CE9113
-7B57917BCBD964A8370F3FBCAF0FBC80BB0527B5E1C9DE292498096D0570A220
-444B3E5CCF7F32C09338E4B393D1528267A5CEC43DE04EB0A7D3E802146533F8
-5BE541383085700F322990AE9C7400CD2CD7031F05FDFB9D4825ABDB38E904C2
-096B183D3D32C10A5C0391DA6516282D95C06E54EFBFA34282AE4D4EE0D87D9E
-D0F41D3FCD7CEA0794E2A18A5F8092950BCA3B49A1A88A6A49E54BFC5BD354AD
-4B58480C1F9136A0D2B34C96E6FAAC235DA8B5A643E94CE0A3924CD4A9C07F8F
-CEEF6DB90ACD50F9438B78C1A7BB01F9A52B1A80F6DB7D5C0E26A3929939FCAF
-91A90F63E448D6B2513B8835B3732FB96A449289BBCCB20C65A77EA718C25FC5
-AE7C12089733357F89152E2667276AE55358EAA697CF0BA0031AB617710FF229
-571046B5EA6B5EB93FDEE581FAB465EEF10F302EE7C5E39DE51A3C8B3FCEF031
-9819ABC8FD2E80E6D0073E638992185B3C5301267853F69A9E0D969D229569C4
-D59E062DB6A53B5F82FF8ED7584D27CE27EDEEE8C6C31EACC673C18CF53B1D72
-419639DC644D9C1CBD370CE96E8D28C9ECA7F37F26989C125CF0B6B806D8B4D6
-2E1CA29F891ACDCCEBBFF5E2F8BE1D59AF78E01A10B841624499DC224081C1C2
-006938615363E596D014BD38E4729DF9AA2839500FF70D246873CE23A99DD173
-6E4AA28598A115331ADB40913F876D05B8F89625A122CD752A60F2180D971AD3
-486C49066503E24C50F5F4975C2EC545F051BC46DBF96898A28B2F09B608ECCB
-57D2499B735ED1C45DA6BC1778273180D9DCC6E15C7DBF9F53BDFF46569CD7D5
-3E66E85372B5A5D8CA62B906BD4CF56F0336441349554A5EF4C43837B83471FD
-6CB4FABBADF99FEE2AA79354678722725927BFF26B7797AC9CD034474F889C41
-403BCB546A701285EC285C90A7F69ED5FCFC6E1E9928E71999C408089A3D48C7
-136BB77E9165624383400B324F50F3F88AD03205515A33586CEA9155C3FF70FA
-CC1397107C484B8F9FD71F8E37265B47F8A28D50471A0539FE6B89C354A5ED46
-2A0ED3C91DD90FE617D27C70E86A3DC1C05BE7E99D527B681E0141A787139940
-FE22F116C428EA79BA326F462007EAF2D2CBFFEEA47D0A04840728FA57516073
-FC9E482B25CE59A3951841FCB2994A454DBB17F56A629310E128919D60017178
-4DE9E614779A44F400845C4905C13E75EF17E7D5653A62613E7BDC232674349F
-7B0D86E1D499F42964E9CCECF15FBB0B557B0BC864CF475BF309B64BDDED98D5
-D2B23DE6EAB32C8C3FD3D930ACD6288A80713148FD98BB757A8740B1DC48F757
-3B19A56CB146FC5F38F3F89C44C4AAC71EC2F65E6024E15F805EF905F3A45094
-289D38BF465D7E90EBB6C64C705D505ACAFF0631135855E9905C54808A9D1E53
-B24360028BE452FABBFF72AFE83F9A26B7101C6E9D4DAB8AA495E19AD99490B4
-870615F47C4135E29EF2178CED745490FCDB229E04FED8353A09DFA1448E3892
-75D7480CD30611AEBBEB051F8F6E5E90B487263DC92F34EF9D1951A40EF2FCCB
-3F5DFEBFCE277690B90A82291198B12C535EBE18E2206878829EFF8567B85D89
-CA7BEBC9FF25FC6411D78C1A07FBE98104041632129730E371AD0054A4B74E48
-CA21E60DB8AD10811A91CE4CC2A33D3750A0838643CBD5CE4E94566AACBA6146
-926594ADD73AA1E4A48A3B32B4300B13750E4298EF23E77CF2923F8B95926603
-16EDE4B6AA04E53CF708876C051A02B95D076BB4D754F4057C13EF0C9CAE1E02
-D969A5CD0C82ABC080F3CB65F672344D201B927676B2C80EC6BDD30BDAEA61B8
-6297D34A4BB3FCE96A8762161588AC43116550E8E6CA631B4F4DF540F03CBC41
-046C2CB4547ED81370856486665CA480DB67F6B00727DC6AD77BD78F9EED9A35
-BCF3E276E8BCF746E6BC38A59DD2171B87256AF5FAD646378F8E7DE26ECEA4CE
-7089E042EA0A7557C346AA6F8DD6CA1CB9D581B5AC86EA4F6A3B257E286F22F2
-C9CAD0DD32B0FF6798C83AE03B3168F70F7C7C849CC7C28F04F6CE8B6A6D0CF9
-23114D99AE626E926A170751F654B7B268A8934C25EC195D43941F241CB36819
-277B9CAB40F6EAD122B75DA9DD7918C8E5406AD44A54B3733BD01190CFF3740B
-4C66E2D58D4682DD41E8F9580570A302FF450C375D9247DC8C8DBD38E48E04FE
-F14D0650A63A5290A806C536E1F47EA00B13C27D8958F3332B9FAEE59875F289
-7B224AB3EEA0CF879F56914E64AFD23763C661CCC36FA6B750EE28A1388C2664
-AFE3DB6D09D3E21168A72A82DEED295BC44FC24A4EA46A02AA67447F7374DE34
-3CA0ABAA0777FBBF2D02FCDF58F4783A1823DA35A54CA3A6069FFD7B9960AD3F
-7E201A14A202BC5DEA12A40F12FBD779568CDE23DF90AD3EB281D5D63FDE864A
-6DBE38FF0FDE4E222EF669EB29DED49A900DC9678D37DA2BD520D9A7C878D4DE
-5877B8A6451CCC50B59D2455137CEBEC65CBAF609A00DE3CADFCF818C56409F4
-871107C839043D6319CF2D57B2F94B524C8B9D64C8C4420E0D630471161EAB9F
-D74449EBBDFEFCD9DEF0B39F4BF609B852394519F8697B42962BCC1499BF77A8
-B02A695893533389BCD4B204FABCA016459C53D08426AE31A23F52497DCA85F8
-8E19D62AA5AA45E3756BD0D067C510ABD271ECBD8B2A0466CB4AE70950C9A971
-9FD6264399B34D82B9FD7169103BD48886226F267158FCF8E9300A04E4BDE133
-06781119AE5C210F3858A00DCF23AF6D0E83FE052774EED1EF733075663A6599
-19A31B51A977380648DF55CF9A088A864A55515B28D7DC75730E05CAD07B3A2C
-818D43625A27F7284243AB26A90E2F80706DCA1676815313EC98F545D8EB02CC
-1D1A710DF5C183EB8D7CEF837986556B470C7C0DCFE193047521CCB067226571
-7C4929829A218FC50D522D4239F6B5C8D4A3E8006DE102A4873620AABF1A1FDD
-BF94D362FA7B23EA59B8B07828EE49B2E825502960EFBB7F27246F8784797F54
-3CDA02F9E8408E12F3F8724D465C73993321E8368D8E3FC8FE823CCA34042D72
-159038A933CC6618627CC8755E72EC6B3FE4DF5F36D59E99409C6D4F7399936F
-91DC03F065003B6AE676AA39B0D3F9746053E18B16C085F5D74C0FC3B6B00E99
-FCCE3590271AA78A76BB36248B7B9B00DE62EE0C6767690228CC5F97CD27107E
-D483D52A34182070A54EC20304CBC4763863735EE0C4941277755FC985CF6A9A
-D95C8A8DEC8DD9734BC35578B79DF8EB140EEA8C622DEFED33768625FF197B19
-1062FE5B7BC0C3E2EDF8F404477E4A0652342370889232DE662578DB1AE2DA0F
-B7612DB64253390460682A6EFD5DA4D3316491DDCA92269289EA782FDAC82A76
-FFE4181A6BAE23E0E539F31AF2CC0C9CF4DBD569C44598CFB6029B50C1D74151
-D98FC5FCF0248778CCDC4F7B59C070E1E7D3FA8D4030178E1F02382C69B0338D
-E2296378105DCAEA8AECAF50F8B90F1F2C20B03201D27B7AB1D633DA02D1626C
-B6FF684677B042CE5BC5C9668BC1D959B8E666BF00EF10DA7C450FC122DDA86A
-BC227BEB160C8F870A9A0BA1CC9ECF7A37E95186F150A3507E0AB6766E1E82BE
-7C3E8C7C9C832A89127D7728C8BF89EF8C599F9ED7DAA8223FB2531AD7CC7381
-918E6EB3386DDA03501A83D1BE49F381EE5C8BCE02432BBD93E7E145F681923D
-814DF79DE4CEA10E025134E81A1A947F1E62EEAF978EF4B9DADC322881A88090
-F1EE06A5DB1273F87737B35357651B77EC8D3E488BB949A2AC288FBA3C78C217
-FCD52E3BDD13C610022F53617775B14752AE4FA0E5CC39CB66B9539D33C711ED
-0F712DF81A28E42AD90C6AE2FAAD9C07ADF0A5CBA487F2D392E294069592F214
-7BB688CB4FCEE81D2518BCBD21B04E2F3F9BE8DE6BF0640A667E700E2EC5414C
-9F42F26FAC0923BAF78F63E03321E8BEC2332A8BE703C23457B1EA2448F7B48F
-CC7BED855283A132869D38A43D74948D1EA165CAFB6C1FE35A426C23436C411B
-C9B81EDCADE1F79F2A16963F609B8E5C8D9547FE8BBC20EBCB421D3D7510EF3F
-D801AA9C68B389310E6394952C72BCC2252946260CAD4EC880F69D95AB07AC90
-C6D0C8F95B72CA274CB690C5334B73A2F3B8B9CD6885E431E36FE16430FEB750
-FBB8A3154BE9ACB2F3837E5A69836832F4FF6BC000EFC90167B450916892C728
-D3BEE1F49B276C57BB298A646233A669BCB011179693BCD8AF0E09F14474EDEF
-A34936392F66C296A8050F79458AA8F10FC95954CA98096604B99859813B488D
-DEDACC162AB1330B9513B17F434A11F6E76746C180FF9B0AFDB4097453C6E1D8
-2B0290CF6F7B8119CFBD59D6FA3BD32BA2D40E6266FB10520A71B734C502B46D
-B96F597BBB18FDE6A61BCF7A9DACF524AC3B8C7770727BDB14850E3E6350A3BE
-6A5D849BBEA78FA4C973DA470D984C3D2234AF68171A01D7F1E573FD3C9DEBEB
-8A77F12916D9C22CA7026CAF1274A9C280FBE5089DA3EA526F9C68BC986A8B7F
-4743E87A10196A1E3B9BC621B614CA32F47A171F8DF9D83A6294E796835A98DF
-3C87725116BEB93D30C065EE4DFF5BE02E253F251647F3A6CBD9F8066884FA9D
-7372CB758C1EC8B19D9B3E85919453B788D6BA4EB55CC047E00AB8ABA22F9001
-4D7076D1B14BF9D9258DA19F8BB89DA70504254FB9D82F5E16F00576319F20FB
-98B680758D7435BA34E98EF02F5C8CD16A1062B35A42B2E522D90435072D3BD6
-5FC64AFBF541BBBF497328BE21F36B4EEE20EC18F41F3A985C49BBC05AFDA137
-06F850F85BC991B658EA5DD6504A43D64664900026F08F5AD0657E81CB4B6394
-29F8518C7F3A0CCB787EC827DF97B4EBE133AB28291C3202F7AE1E45DC8EC498
-367870A9C9CA93AF3053D334DBFD307AFA2C421D2DBF465605A711568CAD060D
-9C92373F4317EAE7B74228CD32BC3FE7289935DAAC9A1C95D67386820B478C2A
-E7A76926BF9EF3B372A9F4A5C98F30BF2A46C1A0C393826191BD343F0DFE5734
-DC38658406967441AE18C73FF0D2E70CC88255385E71F1FD5EBF85D4CCD4FD4D
-DF5D02A2C7FD38CCCD29368B7CDE2AAF50B716AFA07470692E6AA278DED84406
-F52643941EAA6ABDE13E948EFF746D506052BCFC45293FC75B3183A188712D37
-11F81585E2279E301A9C967533959B0D99819435ADF4394EAF23C8432E8114DD
-3DA40F4C2848A9A131403152773371ADCB6ADAE608A0159B3ED1DF37BCA6D1E1
-DE7261DE98D26A75FC64B23F61CBBF5984DC45112F3E44D9BADFE9372A8AD035
-D966F9D87CB5F831B40D6154C29DFEFCE905AD2F0F525DBA7A471BB8175A6E57
-25598FD243FC0282D2D41AFB41FAF75FC48413DB128475A00BB49E23E1A47C70
-657F84F3D09D66974B98DC898991A6DB7C7EFD32527F3FA56E9464793D47C5CC
-17631250AA37B1B7EBD972D379110778F7033B7E10875AECAF5226BF9C43C330
-E66639348E444F7A246D456A678637E6E4EECD1FB25C25A7037C364EB83DCDB3
-4A6FCA2E36E71754927C30A0BC968164FFF79F210D8913A4A03A90EE3F03A860
-4FB7D7513ACF84D3AD96E011067A9794DC09DCC003223A95CDD49C065A247105
-A77118106D8B301D12292C657432A4457D8FEBA4E605FD1D528F2ED51C972831
-4CB7A88AF1088B303598ED0BFDF520755E683F2267C50A0770AF901A7C4F830D
-AAE9691172D8CADBAB44276AEB5BFE3D60B23807BE33B7318B0F31D9D1ADE720
-670BC376989C51255259FE3231B842A200051006831B65AE59CA723A3E958FDF
-0B10CBC82E0184DA8FE9D172B76AF9472BEA2794FC1A4D6D256AD61A9951C388
-09115F42846C880AE0DA6B0C719BDA2773306957F2C46695104D436C27CC0F5E
-FDDBCF9AF99A8E94D7057E10410BCA5C8871CCF35F6640BC5EFF590C3528CA0A
-2B754DC5219EB8A95B33FB15698157565102FDA281A7C32C65FF594892ED419B
-0EE181A5535E3CAD898C9911A1CEF440A38301D930E534B6BE1142F214456CA0
-6B63D5F854E389C5CAB3C52713004004606CEB24ECD9630330F7DDED6E3CFD05
-E058904B16B3F198EB4A727DE5C24FF496D081A4F149244A9E9A563FA271EA72
-CE24AA04328A612060B88F2ADDCB21B1843B5B8CA7F1521B1D503787A9742FD0
-22C0A7EDD92849E87CD6732D753232392CB0CDE9DB9CC77641F8215EC7C7FB10
-202045EFAB63262F1F21C459A294628886C0D5A677ED6EDF183E92BA7A311456
-3F543B8E3032442269A1474114371F25E7411B3CBB9B1397B2CC7C193C0E0264
-E21FCFA9BC47115422E28D0033F20F9B898CEEE6A1507EB81E54427E2024C67D
-24DE610ED650D41FD7618201FA16DFB017890E2E0C5AF82216FC043D3DB21F29
-44748E3BEC5E5049AAB86DFB85AB9F891C2C564D7227C4F9A05B4C8F5CE44BB5
-5524183F6CC7BAD349D94C3C40A22F074F731DCC986D475772005074BFCE608D
-BDB002FBD772517D4B43A534081DB7B95AF23D84CF395376D8F9BD6A7B0AD7CC
-F9876E644B9CE1D0ACA576A749FBC65A6F56E625D9891096C319C0C355E8518D
-C708F6F9F17514C8C5543E8CABEF72B3E5AB01BC676632D2AF90A593346735F1
-446C775B2972E52632DA18869784D610890589D9E899CD9BC98641AFF1506352
-845E206C10FDBE99462B273231986D5E9C74F9B747F5378B7E294B14AC65D35E
-79CF4F095347A0EBEAE012D2BFB30BD241141B9F1FD70776E4CA993E7ACFCA53
-3B2CEC09393E72082FCEF5AEC847861C42B498C6F68B14620C4E3FE298C67234
-B9D05A74945CA5C549CC1169DAB2614D0F0FE3209B1D063FBD53DFB97EC0E40F
-F398B9A3363B6DE30E47726496A6B2DE2FBD8341C3F7FF2FC20C3589ADAD353B
-5CAB95C83A62AD97341C39276F3FB20756EC51464EE631F9DDC50D6AC8BE2482
-5E5341EC76366A610E36E9276893FBF05E7E0FFDDBBA50A13FE23F97700C7CA8
-A8DC0EC182378399ED1ACC44868D4E3A5FF4E7E9D9FB84AA72E868097CFAACB6
-9218465A00019D5D10A41AD270539F2757516DF0DE79ECE5AA4C90603C4C40E3
-D1B57ACB536CD43148EB7389D7D2139BFC287A5D63A89F8D2BA1BA2EB7F6A7A1
-A42472571FEA3C655856A6207D6F48EDF7BD0EDCC0A6E118E43DCA4870431C54
-02B9F9D6DC7E7D82526BB50A15BE15619366AD054AD489EF0E8C812DB50134F7
-F36D356D7B8AF6BA016D0A683FA662CE2809037915A9200893D352CEE4A8A539
-F4DF1320F72585E59943F6A3EE2CBC2E020C17F5391E1045B190CAEF1C0297DE
-45F87701542146D953F99FE0E6A23FC4FB081C8A2A3A89F2028F51DFEE278D98
-2FFAB44AA4122E8175074BCA6928252D4147F8A7115161D512DB3410F1762CAF
-16211C8FFD8C082F292D7944D508F2BA2FA7AFE471B35BA4B933B6E6E2DA4107
-81A9737C42DE3D56E55C002D83190D893743A3A2200D5B43F7E10F8B4735EEAA
-C5F911660F1C172CC1E5C4036098C0AFE71958B01FC261C70DC2C4BAE0A25254
-DEF0801BEF762156E673B69D359962F482E79EF5EC599D1B800E6111576DD289
-3D88CBA03D849DA14E865EDD612E34561ED626EE51BE0B7EBD995FEC2DCD1E1D
-1D13FD1EF101E572B732D69961D91E0130CBCB1D0F79AE3E5AB68E11E0B208CF
-2B11BEA9FAD42C67E63E35BE7E410D1725B1DD3532CC7F4730EDF325AB77C0F7
-93F39B4D89CA618FC6964C5EB58128DF2BF997000BF3A43341FADBD1FA6A577F
-B86018A21665D509AE01E02B73B36FA0BF1A434809512D70ED1231A49FDF5C17
-8A859F63E1C726069232DD0C4E6F9AD64BD7199AD19F14B360D906F40093B84B
-9B52A33F36D146E2B5264E53A41745DA30BD649E8CDF2B0871887996BD22D025
-8A4F8CAA6EE7D67E4E36D900DF0B8F31B5A1B10893CCA13A23734A2F6FD654D6
-0E1C9B0A73D59EE66DDE4E8F0C9FE805BF4AEC6F54F25AE66113BCBAE85FA720
-1322EA828073DC235AF729562F888A349D6C5D40CAFB28C495D8BDAAA8E93C4A
-4DF630094A7BCEC8C63F1BAA8F28F1BB4BFE28C30C5CABDC6DF2A31B246D3840
-C3642A683A551D3E605F0635773FF926F37B3017F75CF70E1C02B335DF9BB2B6
-25A634897D331FC1A3C23050EC25AC7B68B77BDF239DD2263DCA7893DA7EE147
-2842626C81FA4E487BE92876563211F4BF13B27BF3040021E09C9EBE30B1E342
-86E128E15C2AB17A47C10164862A4286B0B5164F43D9055E18E003A96BC41F52
-8E8EA4B37C0475510AFC513707D649527468E0D6843196AB2CD65B59967B956C
-95B2F98CBBEF2B900C65F581A1A4C273C1626131653C2CB2E78152ECCD8F2BBE
-C6F6B99EE6958C92B1C4B555AFFE911BBEAC9A2AF10BC8EBF41C2FA6929F414C
-CF5088B60DC6F3CDFECDC1169687333E8E42D2E756995DE5EFDC7F1F21B63627
-14AF8CD7B1EA7C84256332F6D2231BE5D6FAE80379CB0132A4BEB397A4D27375
-71D9B6AC8D466E408CED3A3C8D73E078BFE44EFE531433E41250752711EE6B99
-B6C5A8FA6CFAA3F858806A58D06681E8191C02A1555BA9A45FCECD26B6E7A4EA
-FD38B456CE576063E87567B9AB3BD3114220E4B4D24B3CCE8BFF26A01A658D96
-50A133E9AE039A6D39EAB0993ACBE8F71C60DEE0A25CADB02B1550C4E5F5406E
-238DDA885BCAFA01739AC40559A1FEC332706D9D1DBFE7B7AF9F2F6FB86F9706
-610809706FD7C80F35BBE8252E5E4A978683505F15E2AFF2F5A69F33581133A8
-5F261E686A495B74F7F6BEBE0ED509F0B0FEB387E632195B203ADCAA21FD6405
-B4634EFAAFCC5C5E859E82B7E52FD3B1AAE99898EE6622E40217BF98695468C2
-0E4703C8862208692C12C884AA8D65CD47FE385782F49E12FCCFFECB31125895
-A2AD4D9D20B7287ACB9180BD15B1657F95E80C324E68647E3D7B95F7F07FC917
-30210543C3851FC1E264A1CD1ED95D21AA479B12BCC9B74E9938FE33B4FD1A5C
-04AE0031D88D0DE723F56B21237F0D20BB40E0BEBF7D62152B541118B7EB9E0D
-EFB1DB53B3E4AA0680EEF6BC021748D23969EF9E711D95159A4271222F0433EF
-720E615CC7BF47E7E401512C39F84D873629D6964CC045B4FC422A56B0CEB142
-9CB1A2CF6EBE92B74B6A1D1CC7BCBBA9E50EB527F0186B1846E12384CCECE5EC
-335C4F2E7941E4793C63CF6DFBF5AB7C1286CED77D135BA8D1CD4C6D2BCEE104
-1570DFAA5ED9AB7778DBD2DE652B8038B5C2AEF8BE93CA80CA0ECD571E0BA9D7
-CC8614D176B178FB8C51F170017C70BCB01F28805B4053D0DC933A5A1420C27C
-88897D7D4A7029685F6C0F9F255CDBFB6CED05607A0A3A8116D61D96A31BEF71
-5397FC32D6A9B198B085D796FB330791085AAA33AF6D1349F5C93243E37797EE
-C3458787AA6EAC5753110237D8CDF153EA4ECF5FBBFFF4098A5A9E64E65E244C
-04F61511784F0E0524437209C2873143D9C87EEE272A852FF3AD554BC094C156
-4E6FD0F69124B074E1977DAF7AB3AA7914B64578C99A925818F6D54E5BDD53E2
-2A6A786087EF436909DAC86CB8F4CD595996FA03DDF2833BF1485C9611DC0ACD
-7366EAEB31F718FD569F1EA3D772945D347771B175D3B488D5F12587A2B91211
-0D5F37EE9FDBBCF9DFA3F7E104F53D80886AFEDF48F0449192EBEF6036278AC8
-9002DE452516EA28C9F3286D42DAA0F78A1B4BFAC7EC35D7E45A99AC66111052
-1AA6A6CA1FA68284997CF7A7674E43B40261177AA982657A7448C1F1DB05DBB8
-CFAE02FFD09F584D1B0B29E1F3FB7DC908021E0B854EBADAD8A833605FFFD1C9
-5D1A6C2E8CD3EAE89BEE21B3E9622398B610223ED6733D5C30DD37362324F2FB
-C764FCFDBE7B7EFB247A618016BD74BFD1C39420F6D33FFA6154898B62AB0444
-8B049117E5452A5B84CE45F48389B7AA696F3B194C04EEFA9CD79E1ACA160699
-9E5F7DE8027195E2559D0FA4A59A70CE1266B69F422FB62EC102482620FA09C6
-1B85E545596D226545AC83C89B941A3FA95B0704EA34C4E9FFF8917F1A611E8E
-0C9F8A4A8A3F3E9DFB2D3C34EFBAD3C6218B8624EDD9F77E7FA30A8A080EF8A3
-F360D8671D0692EB118A3E83C7140CC161E5E0011CC15073E9B30894354973AA
-BAC1DFF1C0889CFF50CF070A806CCA9B4A869E5E15EB345E5686764B142F6B2A
-F198443420B930CFD9441720C9BC3A17CF6FCB40ABE90EB198DB21259D402F03
-DE7C84D3BD01E9800348EF8F0B5DCC76D45E7E0869846CAEAF5535EFC15D5D32
-9BDF9869FA715C14639A3DCA72FD34024C89A2363A7C7F18210CA9BC5A75CDE3
-4C2E98737682AE6D20C37220947D5707071FB50C5077439B38795D64BD1530EA
-A3DA77C2D4C39AE44697950B5587D026167856859E679AB44776932D84E00225
-34822AD977566481DEB69B6D71FF394C744492443B0BC7E4201807684082B69F
-5D0973DAEF0167AFDCFA7C019EFA4FDEACB014B263EA6B5C8A14FE2ABE63516E
-A02EFE7B3BC3F7FFAC46725125D0C0DABEF697E9B2FC9017EA707242073D8C50
-46EAF3A89F2806D16B330AB73D64CB38399BBA1480B6DC038270A34B8B16FB6C
-F998C2901B8BE47FC0B3B30B352A436A3322948C97BB47741F4BBB3D9ED51A33
-E7005E22474EEF660E9AC247987008748F0B20A2F6EC487910B8F10AE20FDC51
-BE59F58EB10033CD563F1B24665EA7DD179708813390224241849C02DBE44F57
-EE17A22728C030B95AB5D8BDE385CE9E878E94FF2886C88FFF45E41F0FD783D7
-2A4BD1C6CE2353737DD9272C52DA8AA91D152BA16996484B31E0EF9741D43FF8
-9D4AE17847BF44A2A2EF04252FF904CF2F1FC0AE43BF8DFCB3D9035C2F11D359
-8AB2B94E53FAF40580542230648069C84E9475BC330FDA951A9DE4FB350EEEC9
-039BAC59746AE6E527C19DA1D5E81F1CB5D775FAE7326131D34A5D7BCAD1DD6E
-744241BB355593A364F8FFC50244911C2FF6932987CF49AC282F0618800DF652
-A396847B441024CE3B634BCB505B9CBAFC44204A980D4B9EB516F4BD166BB91D
-FA4AF61DDB4D94A4A23A727F687A801FCCC9CC81D93C64534259B2D74163441C
-70EFFCA0952EA5E9D977E965FBD2B931C78FD9F1727B82EE6EC5C3E5B1FA954C
-CE1624EBAFF6AF08DC4026D98CAEC116A4CA76CE7679B7683B323887A201CBE8
-3E08BDAE20E9813D26F7B50CFFFB608794B3E557212102106CF8862EFB170D0E
-9E90D5EF3E1EF3DCBF21BE27F70E527FDBA3C30DDDBC8BB319E62BCEA406F423
-B4FF9683313CBC0430EC7CA8887AE2924BDA5E048DB731ED00E4E955B19DCA3E
-57158330AE6D18A4047C22D0DCD86F1E5A6C02EBD19D39F81EB46BAF322C04D4
-6101A50AB3C0A6FE0575F36EA3703C96A5E273AADF2E263922065F0D296939F0
-B347FDF7DAE050A8C8C41D38DF5F951E7FF2D69BC5D17F6803774D7D795B8531
-46BC1B2541ACF1435C00C033FF98658B2C0A3B0F45EF89B6B7C2B9220CCEEADA
-73FD745AFF710B1BC5BA38906BBAC57DEDE11CE03F206269A0CF77FDF4252FEF
-878EE755C56ED29CF4775948F0555714E9BDECD09CA84B4D7990DEB7B85D2C04
-87287A6DC7F6AEAB9F6BF2CC06A1210B8B8405DF2CD29E6B36B767C950C0B8B3
-236983F8CAC70ECB93C3E252A28EF16FC8430CA65DF2F42FB5698AC0922C9851
-1AC47678E99535512247ABE19DF4729F9BCF62F9B155DE7B9201A095E5A456CB
-539F469F2B7D22DE5CFD57613652B7A38CDA3ADAC7990F5EE0EDB7345F894628
-13B1FAA7D73201D193F2F6B0E45E02D9391408C589C54DF99BD18E6BABD1946C
-1DBDB2889E5085519A651EC6AAB38518F71767A6792036F8E1F5E7789A8C3BC3
-294634D8682498A9E329A8DF7374E0A073439440FE90B551082AAC24C2F03423
-52B89E03BBFA681942D97269117D4BEED5F97CD402569A152927C8E1F42DAA04
-0126AA3E1B323368C16ED5F16EF7DDAC6B7CE493ACFA102128D1FE73AC927B44
-C4D5DE39D8919E1909A69B603EB73CF6B3EFD8503FCF03CF5550825D4D39FCA3
-19065E067C1663A930E50196D34307682B75F07733325F280C30FFF4E895F266
-CF553133A0D31CE4F7E88E4AE2D3F55FA72802D8DD04D7F02495B3D43048626C
-2C7020FBEBAB25364ADB70EE16C22C0C9CBCF1281872B5E23AE3688B17E5E0A7
-F38E12C07B9955BC6019786C9CF65D9A4E8EE5C273092DEAF97A92E5AC04D250
-1FA1799A112808F4E041C2E6B3DB25495F690C5E6D9EC0D529E23C28A6317F01
-B283DE471016E9587C6105C862984C7653A3B445C9CAD1C5D8F6E4068ED15C59
-4E16BD6572345A4B94AC1234A0CB46B543D15ECB9B3B11909E32BAEB53E13834
-96FCFC4482455BF5B847EFD142C2716FF6E6A5DCC9A568BFA9D0ECB2FF815B85
-175EE958D523C7F8C95D79DAB5FF776BDE102AB7DF6C81EFD51B9CF9C47DEA99
-42079BF3EA4C1F8C6D4950EB0F16FA591C5463A006FB6B9C07B699B39FEB8ACD
-06861753F64845934A846336B5F70C92E43D3625AD4B6E2D5E106B127C8E9155
-65130F0481F3B522F96386B06F90E4848BDEC9B034E2FD70467555F719E2DAFF
-7541D1678F9D33CBA501AE4AA5B37071E304FB5B4E5E8E4F242AB00C52CFF06E
-77F323F785D42F5727EB0EB4267CF4B43C45CC3F5F898DF6E47DF1E3BCDFA32C
-6354FF10AF2AFA95ACC0C87FD5649A4C311FFB7CF17AEDF22186A6927A08CCA4
-DF4A339412E323B07EC6A29532AF771E3CE5C39BD173B82207DF1F87E55B969E
-FFFD59A78695DFA711BC20DF71CA13955452854F8378808AD167BECB7470D5BD
-217212DCB886B5295FAD290139AA6559380056949AFE444F7C5DBE44E7804EB6
-A075697F7A69EA42147ACF1AB84084DE5EA5FFB355A927B77DC646970275A9FF
-05FB84C9B2D2F52AE30FE5B7E35832991F159A419528B2CA39BBCD8F215D54A8
-B8C5CD777CB7FAAF086A5C06D4FB8B157E72E42CA9C0E109BD2270CF91BA8678
-1C9BEF2E8E0F54EBE69E9DBD5D7C20BD9FCC22E782FC9D9EDC420DA1914A158A
-AB60234B944D4B534F57E11ABB32F481305CF2FCC696BD46F519C22C25A89DE6
-BC97294D816FC09276506BE4D69A89F99DC2DCE7CA9315FFD818BBCCFE39BBB6
-DB2E31FEA52729EA00495AE1EBFB32A737EB9127EF513F28869DA91E5779F90D
-C8342F9243D645DC86F28DDA99791BD54FE9CA2479446F2F25EB82A40F006F6C
-DBB7A98B407C16D196EE9B65351BE795693D86D234B38E2566CBF0263D9C13BD
-87EFD910F953AB4CDA2CA351B74B30FBE79AFB86BBEC212E0DB9661F24A8E3D0
-81CDCF04D8323B4FEF99FEF72FEDF9EF6C2F8022585CF6CEBED03C0BBF7A58D4
-0B4D72B27E15EC0A20C960A20D0D63606517BBE8D7D72D31A30F583F64B97226
-B0D0EB7EC9BD7E99FA18CDE8B37663AB5558924AFC8AE0A429E435B79A6CFAD7
-A51970C7DD68505BA2FF91F7B1EE86FAACDBD10A50B7F928ED31743FAF44624D
-D20FCA7D7FEB5A56D8DFD78D89AD89FA8D5D98F216CCB974A845545CD2276878
-0B5F184BDEF71ABAB21B71360448F6BA9B4C6F8A3B609DEA24675A11CCC78EDA
-E3D094540F18F1DADF7E311F774CD06893C0486C57E56462E1C7777C5D09F747
-6EDFD5EA99D1B7DF40D116A270DDAE87057CBF78E1F09144A20CB2F2DD5EA497
-8C2F38B0C013AC73FC48FD1EB6FA4E0FAD127EB8E9421F36F0DF10E71FB2E475
-FFE72569A67E84929378F4146E2EB7893667990CE96BB85B995F1181888D3325
-2B9287DB524600D8592F71F0F3B2BB792A041D0E9CA93D63871E2C6B2A4E1DB6
-B6E0E528C594A75BD3F51A41572E753F364EEDC58E6317DDABD4F1F53416D466
-EFBCB92A7E82CB34DC62643AB6928A7C0A6E54DC5730CC8DC6C70B53FA3DCEC2
-CB11D40721D7479D8C28C385D957BE8E3FFF199519FB11B22B54C2BB7AD40D9C
-214E22C93EEE97512014DE402097DF8D93579E91B995A24C89B2DB3FCDF2A2A2
-0799F032623EB41A74DAF015ADC00957421DFF0C8FE0A63435C22E8FA8A4E10A
-F536E242654948423E11AC20D90A1438F0AE8210996863C01D45507A0CFE3446
-65DE4EF3EE70260C581F499F89FCC79F0590AB0DF78FA693DBC7F577B061A058
-02E3D3893ED18F8CEA394D943AE99F4A551129D46CC80805E00B6AA7F138C08A
-1B111224F228C18966F0786716AE6F23C706AF10A364526105E290C4BB222220
-5D62147BD31BD973CE00B21FC890E405F6E05271FF249AB82E86715F5570D78F
-AE61E3098253D4703AA38201A0DC339FE12AF47B2886D6
+CDB7B017C5BF449CEF69EF7E7B143698D00B249BA50E98D198F29782A6B41D7B
+1657972CE1B773E8F6BDF2F38627E3E254C1AB4B1BAF1E96EAECC19CD5885CC3
+18BA21AC88B179CCD63EA17D817039FEFF575F828A888D366BCEA4F32B5E08B2
+88464C27C4064DE920F98B8B350E8909D4E911609C781479D656DE0403B7A396
+5037AFD507B87055E4C40B573D52B9DDA04D793623219B54DA3BB5E85FB9F38F
+17AAE45F7BAFDDA475C914C30C626E51B3AC52AC2BB692DA805202931C39904E
+C8DCFBF3A3816FD86144CFBAFFC5AED23CD770A772B3DE93AE3AA46D01B137F3
+079DFBCD31CB35CED7AA81B518B6EF7EBB9DAB59EFDFEBC0E649AAC792DF01C1
+F0DD981180E792CDD32DBCBAA0CE6897E0EAB4683038239A39BFFDC512570DC6
+321D9BBED278C72D31CA21BEC6911C36873310E2E7FB57D97F25697D76B76FC9
+E4D95B941ECDB8D0D9EF464325032DC37B344686C8F0CD35F07CBBC94A106148
+62810B1BE1C3A617510410749ED1EEF9357C0A9D7D9282027993205C1ACF05FA
+9E6147B29A5B864FE6EB6E4EE46EAE685CD7C64482CDAFAB9F8BAF6872DDA515
+09ED15B9733598C9AFF4AECC9D55391AA1AFFAADCCEEF4F66A0C4AA25B87C8C5
+FC9FE42F2DA51AC0AD6BB9F654F06EF095BE97E6B54DA5153F3CD25D637F4A6A
+420025CF63ADFA7F7AF70DCC98C19973444AEF1B142552216B51617F1EAD9246
+90B7C98B8EEA31C7F9CB2D674FF7E59810A33F935C83268ACD56BD0F30828FD5
+231419642A62358DF745778D5136AD5F7C792394A095791C035580A45F821C35
+22C1F9BA6581F5E6ED9C927831B044DD4B37C1ACE021244A7C9B27B779DB3805
+C265D3D206FE79B571D84DC6CC9963E3820340C705BC6BCFAEFFB3902CD0D5B3
+83E949A70EF1D3CC6F43DE4D4C353F6664F5C7AA76E2386FC870FBF675988DDA
+37EC2E2D5B885191FA6A86AB5FCCF76A6451663B6B06AAC022E419520CDEFB20
+459A5119EDE46B9E5B11095D514ED3C7E065068670CCB8492C0369E019A1E593
+E74012A86291DD86ABD697BE589ED20C7FBA7D932381FA2202E441F24AD6C794
+F2511FEFA77206A5AB961CCFA703A863091EF6134B394A33F698D61937EBD4AC
+4EDE750831AE6502E7CF167512733AE03921CC5E79ABB9436FC6864C728237B5
+207BAFAD710948E1DE008339EB0E74D210DB63177F83428C6642099254186EF3
+5D10815BF66C3D39F983DB8BBF1D1F75496CE08603D6D0FE7D4A5E889C0FF14A
+DDD66FFF11AA07760ABB80A1D97F5B2513CBC404E54E8E3B072343AB427E8547
+596CE54741408AC24D20428990F191BB7995F952F3EC7429769FEEF9E9B0268B
+7AFB6D1988672E75CBF43D07682C4500E5E590358976235A22385444AB887F87
+58D841E64AAA34FA390A30A96357FE4BC1604116196F810DE5833F6538AC691E
+394146C31B724E3C9F04D00A33D3D85570B2343AC21DB14B40732ECF9C9E1BC0
+D2B627D84FD673E47A693B00F8E610840CE3519F7B5E0500CF9D7AC00C46E519
+0C003743A733DDBC7C45504133B088C3D571168A1C8C9216759A86BE04C79B5F
+24CF56F3C329980932C84270166F1385355DFAE46FE1FF755B92A37983B5FD76
+949A8476FEF28ED491C38DD4B2A06798C710856EA01256BF3FC53D88551C3F11
+BF3241B0989BD2944F3AEB99DB98C8E7B13A6EFA23288EB24381B8717B851E70
+C4542F4879BFDE6E13F979C2ADE45FE4AA085F829BD6DDB6560362C050840B02
+C798DCD4C7832CFB9774ED70E691D86D8A86A2010D1A948EAE8977787C2CAA76
+02FBDA7F065632C681F5DAF2A33169C1DA952E530C87988A13740565CFA08AB2
+6ECCCA8E16A45E53FBAF970ED68E4499B7ED3EACE0F280F5D292DB4707032758
+3F97251D05DBDC7BF5FE4F6E71BA0EA3A2F3E324AB91828166EEA0C6EE595F14
+9AC72C8E8B7E09C5F543D7B05463F6EA56C7492C5200D4DF9DB562C6E0725E07
+3D7182AAC88C770F30129AE22AC5F7FCE82771459038E017E642A007BC31A09D
+4435B6D4E9F8F8065906A55D8ACC1DCB85F7A29F3F9D6C5BC8D474578E4061D7
+046F1DC5E005221FB7064AB74C801884A80358610F8BFDC093E109321CAD2550
+393308C3343596DE9D1EA17FA96D9E9977FBA13642D8454CBD431637F023B5CF
+8703EC37E0DC6297472BC9B43115222D6F15C143BC542B0A2A8F294D113BA00B
+5B87D2BA2EB5A0FC6390A0F9339C91F176C8466769E931418B9376404C501E7F
+10379A780E49D860FC6C8202491FBCFDE51FE3072D6183EA1084C39A2D3E018C
+5DD75689B89841C0A125869B34189E5E840EB6B6278382629F7BA224A22754A9
+649B44DE8CC27F09C15DEBB60BA7285E1CB9E1F0CD329281759581156CE88C3B
+FB04313662155185B07F24E537234276086739F635CB180C16F94038E9C88BA1
+1EB3A62AD61A1B4150610C91F62F9F64B4155E0619E10DA82D66C86C2FE3982A
+4DD67D12F20E634157E04F3D39B8F07FD28FF4089FA6F05179116CE4543A3FFC
+A91B41B80C259926962CA27EDAFAC6CFD0E58013FDCAE1295B61160D583F59F7
+3C00DB237704F2F564F5AF4028720A7F1DB2CC528D7D9B6BF5D8105B3B54C265
+929CFE89E57ED4B08FD41248EEF489F6C651A9AC76651B1275E1038E9B690652
+C1B406AF9778E97BC80DE3D93174C2B9B582E078B9F9BAAAEAF67AA32AEB71A7
+B673391D121D0E0D12760517916D459AFA9391702079E246407DC99D3D02CD51
+F655AA30FC9BBEA16DF8197953B881E04D677592D70D7A3E2AD408D9470E5D58
+E99EC5F2EAA2F28C658333A6956871F7F01A39D5802F52763C11178C4B6F9BF4
+2381391D41C045DACB4621F380171B9AB04A1E16FF35FDCEC2936AC830A4645E
+FBD7E8B702C39AF4BA6CD16AADB151FD42DBDF4E23A0365021F81B4774406242
+8E106DC131F170397C20387B30FC73E6858340A9DBE603AEF4FF7C82B5625D63
+F1C20BB5C80A17E98CBDD36B4C45A76D1713A5A3FB0400F64AD12A31CFCC1F96
+2F81957D1AF253990DA80A5D2CDE29B8D24F3508D3F90190600909BD363BCCD6
+9B69D8F6A9F2533B62A43CE479734AE4DDE7101187BBB0EA712F80A6AC31E7C6
+6CB9392FF86C6648BF7C7884DE5F2D755D5AA88813E3C8257AC3F6CFCB748A78
+403BCA49935A8BCC09C52459E92E4A908677CC48F780929FBAF8E4EB2B8472E1
+E8603A2CA2106264AC860B8EB85A91239BFD401B0171620A79EC3C6520DAE462
+5F0F69E99045D48DD92E1418FF4EF3CC338FEB2912C61FD39544E33D85B3F86E
+F6C9AEB273B10E3F5B429432CCCE7DDD9848EB13D98681E8E1F3CDCEE8269811
+A48EFA015E5EAB231C99AB6864C338DCAE61DB3EBF713D5B50DEE579D3907D8A
+B9F4A73A436E6B63CA2E5E8B67B167F0457F81D67DFD616B757D3EEADABB04B4
+10A309E404D3907CA96EE321E13600A57899231F5E277E716A0416927FD25711
+4359F3642E74D74123E0A2276EA0F3F1FCC75260F56E683E2C55ED8B8CBFCC2F
+D6DF2764591492F3065908A84BE711C5E3BA2329C775ADC9024945DE8C400FAE
+6CDE3C51FBA4A95569B3EF6CF35B6DAA5A7F5C73BC84F200B38ABF60013310DF
+960253DFA4379D5A3FC96A5C982D6D68A03603E920479402702AE888F682AB8B
+F3569F16B323D877A7ABDC905FEFB3DC0C1132B6F924E05ADB0506F5615EAA37
+83C066477D511C0F280EC5AA6AE297334B31D5B863279BE653B3F7F2405D3F10
+008C3C8EBF6FF798407568DE82BA8003DD36BF2CF810B337F21D5239219FBE5F
+2024F94BE1644D03C9A651CFCE355F9D49AA235C8847087F10C4F625FDAA6FF9
+E56CFBAE5CCE73905AD829B351A49EFFA1F863C22CDF59DD2EF1A39802D907F2
+53B22E02FEE6A2A98C23E1F212C536A59F22150E9BD7B02BDE693A3F09893836
+607552A6B44915433B683881882ACCBEA20A21BDAA1CCA358E29E3BB13A44835
+D95509EADB6FD4B14B400916E9A1374639B85DCCC938A35E64D3D5BB4F6813D9
+0D63316ED052BB7D5C733A5FEF0F18D193E5C9854C0199B66AEB89D8E620E093
+D5CB4DE6E00312B0DC5995DF91167A89BBB8410C4AE494004D67902101714EE8
+8EE7B4EF096A14A1D5189C41260A7D163DA79328FD997250020E6DED6435B934
+17DDBB6A4D6F5E3F1D315BB5AFBB320538CF3BCD60D9FA7BE2BB0FFECF889E2B
+2CB825224EBB436BA04560AD1F3CCECDAECC1766577BFDCC0B6AFDC6129D3540
+F98173E907574C582D757FAB72555864D18E3EE045A6D47B73C5714A4372345F
+786825BE53684D1FA6479D89906563BE44A3552A94163DD7AF5D672F24A0D73E
+AF0DF1DDFEF513C73EB0DF2524132B99820AFF80B3EE999CDA07C6A8D50D0BA6
+FF8E302984628FA5D8500F8F2F6E4472CC4A439F19781EF0CA63738F5B1AFD3F
+72EF6418D46673AB5B922119A1355F7FB0834E82E0C0C045CE524345E00B9FAE
+17048D638D92B9550519290CE93CD789FCD57CDD38E95AB31FCC13F1ADD83A9E
+460603BB7F82032008E72E0FC8B22DB3195E011D7CC67F24BB2095E125F815FE
+07773BAAB462AF86BA31A80AED3944ACB38565FF5D029A94ADE79B6D5277A5B9
+EE6B13D6B293AA37F8C604338B62CBB53D0EF7B1534DBA09A96285F6DA40C5D3
+F075C44383350D81D0DBF0B712B71A810E818B5CD0E5F10F73839EF211266A1F
+D44FA728BDB371491B412CB86467AC653B68CB2BE823A842EDDC390A27153540
+69C2F61167AD196FF7437CAA9C35501700A1269C881CE6E6299D72FDBC478083
+6AC84423A2F21836713E70804B897976F5E1B09FBD5F03BF67A973AE009817F6
+7123D220B24FF1AF52684A775BB3087AE505A26B1932CB613D185F1D01EF69BA
+10B9E4797BC341CA9ACB2FD2BCB4220293B5196BFA78EBA63648BC2EEC584C9C
+E967E52D100C5F5441FC0C9F5D56D4FF03EB1277AD9BA2D2B7D1442C5C87D46E
+B7D024CB9A3BDD65B8B010EB343BA8A76EF8E5EC6811692EB1DC0B6195B624E0
+E416296B97F77AEBCAFBB8571B0A208881611F613E48BF2408500D27DF7EFCD6
+0C8976CD9E4FF44288B8C06E6A615413D04D33CD2510B752FCF88CFD6C99A447
+3268D81DC35DC48E342B9B900C6AB9269E563A7E91FFD4B77DED7C252D36F2F9
+713C4B51524A7DBCF224929EAFD95627D4A5504A3DA8B34F427BE75CD03C5810
+A72DDEEF62A1137C79841C159FC7D743DC046FD31A4199A63158B62C7C1022AF
+5D07E4CC28E67CD3BFC91C48A11760263B4C309320DA8560C9A43DDD7EEE4532
+96C2FDF054AE919DCA1A00402549E56A55CBBB5E0A1DCFD01D25ED33600471FA
+05FD4371FD2FB1AA9D2C98B4D7BD59A01F85B4C7F3452797C8F118DC831AD655
+06042662135431C2310DE546D2BEF1B2831215E7C8517D63B87EA71D3202938E
+A1C98658C5366297A80BE635DAACAC441B212D592AEE3C608C460054D3992C86
+EB6301AFBB4D0C9655C07D7402A96A20946F0DFD6CF6CCF0E28EA03747AD27EE
+9CC964B2F3103C81D7FB5D93756FF05C6C5F5488A68A5A66D2ED24CF72FAA7D3
+250111E99821015336B7694912A035849A35A5880DAC8B7CA0936F35470E4CF7
+D007A045286FF0FC932B51AA00C3B7979E0A0C9BD8080CAA104119963606C7E2
+63216E24F42AA45205D454F5479A90A85D38C51316DC51FAE4C4D9780719F0DD
+513D6C3192BE8007E9819A364AF38BD27CB82FA02FEA92FE360A8A019BABAC29
+88A7D867C6C4D83AD4B447F3641C004132E53963ACD7AEE574332CA6584F8F62
+6F9C806CB698C8B3611AC29DD173285C8EE05AE4D2623BC1A102E81A20A2E086
+B0FE38CCF8B771EA46C6DD9EB64CA70308E75F9870F45B769CAEA0C79F2242C0
+0C084C059EA10A8B19D73A6D32F18B751C1777E1C045182FB0F55AAA3C512AA8
+3A94927B2E15EB3A8E02FBCBA7BB91C7B86193D02B2236CF5E897EF78C910DFA
+448245519BAB629D5AB46695E89B45A6D3FF7F31B36014BCCF2829C3807993E3
+0AA0FC58E323E37E762A16DCD9942432B40B5E7F86C2C5FCB800BEEF48F4876F
+936EA3EE6625E82A3444AF512C2C2A79F01B8445B6B6B50789FF111D66ABA715
+2AD0145891E33883A8198168F6EAD23455BD413A89AC440EB9ED9E2FD063B616
+AF9DA0254C823915295B41F11B51BB3D6FD3AE3A786A765F406CC8E8DC3A3A77
+84724AC6B99D4C3FDAE00A9BA466A1A9483EDB52CF4A497CF7B976706C9047ED
+98904C9C9E2C180704558B251B962231E1FA26AF69E7A76CA9A9F75493122C1F
+721E1E9E66777F734BB45425A451CEDC82C01D53902F79511D8E3E09CFCED53C
+44B0625DD281E8E7C710DE0AB402083BA08FEBFDA0DD92D561047C7C7C886901
+C19F97E680318A95A1FD8FAA45867E2F137B884EAC35331710FA7B4E8C88A04D
+033AC9B1D19A1BD20A8EDB1C15EA7CE40CBE18CF3433DA37E0ECC411DF9E6E4E
+0ED790336EBB2B81ED312685E85896A0C93F1698B650A4C80D2A97B3CDBB60C8
+76E29F5D8E37A9A8CB648E423D087742B4073C94E4DEC3F0B65B90FC1B53781C
+31C8118273678B29A5DD532A194EB18710F63E7AAF3A386BE497E60CD89497C7
+D989EBD8D32A0B61134DE00A4B35062DE5ABE3921FF7C6E1DAA3F8E417C5CEFC
+2BE6583641E0F8EA3E0C303A9DCD86F3BCC6E77AE8DA8BC0472D63059D1DAC0B
+D711C4BE91D8189BBFA27B9DB9953F8512B97B7856059E2E724C33D27A7B96E3
+60459092030EA07693C0C090D79207DFA9C321151F34860636F053F0DB5DDACB
+E50A3D629784358C331376EED92121B58B15EAE5B7176CCBCF9FE9883FD7575C
+452A0AA8AF20BBC0857A772E0552E59A0D885DCDCFC868AC570FF4E754974680
+0204D378AF1818B2A06D5B846EC14DFA99FA45F047B36067E4CAC3A9CF24A100
+6099295C6D93465294871CC83F474885F29C5F0BDFDEE54040E6E7AE97EC2FA4
+E523E7CB217FF45E09D271F90E17EC023822B4EECB4297983D5BB2C05CC730EF
+DC5180D8E160B9EECE8F5FB7B0A08D7865220115DB00EFA49EFB7D06E10A55B6
+D10C85ED53531FE410EB3DBA0F67A47A8E27F2F25EABE9CB427FDC0223A0D92D
+654064A4545708964F4633BD883B9B4905005DA01AC337A2DC968FA04BEC1717
+D79C7B1BE11C224F9F5A8A2AF3C6738AB69458DC5C3427287BBB2736F0CC2BEB
+5AF4AB990EE0C2AC844A0F4053E5B12E6B03B5FF21DDF0C973C4E2A417A93D48
+361ED01895B8885273D9177DA92382C068C796C3C22A253A905A35F149A5217A
+DCA982F1E98B99DB8A5456980930A76198FADB5A1724719DF7F289E14BAEFFFF
+6821D9A629B6C0E1FE485A95EB3E1697725D02BFF48397E5B3718113DF345F32
+F418E64EB0EDB69645A652BA9AEB3BDF4C875D3EEAA434C337751E4606AAE20D
+6236E52CD645DA4A408EAF6CD0A1386D62D01D34CA441EDB0D1B7A861B145B6B
+8B62FC7809BB5EAB15D744FE018743AF377E7B7C0FE12BDCF629855849D15479
+22B405ADBF5F683BA7F6959EC8D5BEEA9224ED14B2F681A2C340967E4735C4F1
+E0577EE6A50B68BF714D82894B89D667E94037182FFF78C090AAE4E5DFD92B9D
+D5C99728CAE567E59849EF1EC3D652978E955DD3B3905CCEF7CCBF908F2F0738
+203E4AFB7BC0F833C5AB1D939F3982AF794751D17AB6FCF9A460492E881D51AE
+3BBD943C57D3F167D8E62A8B5222F8F554EADD8BA9F293EBA46B7111491121BD
+B93F08D5FC1A9C38C7F2F535797E7FAD32A979D0BF0A6FA6F6DA7A3BDE7A507C
+DB27A3537B77AA489493D15FE9FB543B5821FE3AF90E784FFFCF2B2134CB5086
+E9E285610AB07AEEAC8829B558F179BAE83B2A4F2B9A835021EA40BC624ED541
+45C4D4119AD32FE631AF21A3929B6C0581DEB93DD2EA2D9444998955A2E78849
+4644CE06B89A8C882A39E608851FB10C8865654A5DB5C832DC647824727CAA5F
+552AB9E387C454EDAB0F06C60EA75DB83E95BF412AAD817BC4ECB94627EC8B7E
+E7E83DD5C4402EAF5F48CBEF96BFE9C1629D9BA86088EF30DAFB3F10BDB5FB37
+29EC542C85079817BFF82C2B8CEE595400B56CA9FA8F1242DB812F2501344A96
+3EA9DE4997D7B05C1919FE89057FBA2EF9D1264593A3D0ED202BBFAF14821673
+B01DE184BA7BBE138D9BBAE94F906D8C71B020B4C737FD57D2CB6A121F4FE5C7
+3DC7CC35C8455982782C2017BB85E1B52433AFE0DAB3FF42D977DCEFDDB2AAC2
+8576718D4F5979761147777F85FC7870863B90E14345E8456435E1CEB74DEEBC
+06F4EBCD0E6ADE8A80F7D0B219E7D7FFC3688CE3400943D647AD5672C096277C
+F132F95800C0EB9872431644356F881B90F149FED4F23CAF54B2D52D100851BD
+A8EE01FFDC060E2174ABBBF719E36D56F0FA306CE21779CF44409A4BFD48A8E1
+9EBE632AA6ACFFEE6E18D914677B33E666AF5302A413B841E52107F784968E9C
+64AAA89D53017D64A13ACD0E3A2ED7267772DF8D631F2CFEFA9C879838EADC7D
+50E31E1E0ABE6EE4CA4FCAE3EE5542884D6EAA6D86621031D5148615F5DB2AD1
+795E709A6EB9137A7346822D152D1FC457ED0B978167575BFC038B0141473837
+AEC0544592322B0E773E433A1D6A044F419EE83F817EDE767BBA12FC8512E505
+ADB660FF5A02434CB5A0C933FA42229228D964358AE95F0427517D4AF162C2FF
+4A2428DB0F6D71CCCCEAD9418C37D72C6E23F44FB374535A8FB6030BA4B0B826
+0D4B4B4832908D6544C8ED4FA682BE1B9E0D737A647B480E0675AD1545D6B310
+AF496A4A5E933BC31477DA4CDE9E7FF3AA0ADF2803B9EC2C7DA6E0C82D5EBBCE
+5A08531FD871A4E9735C05DA3C63E4716558F194C1E4B93607FBB8FFAB07BA80
+47FAB24472D762C775332E9E03F8B751CFEC9B4514BB8B2CD222CB0D66118945
+E0EFB15A99D9F141BACFAD9B7EE2090C510C21049815DD51ECE2A5B5EEF03494
+107DC5190CF64BDCFFA0DCDDA01E6C96C8D204B8BA0EBAB88285E7FD86DDD4A3
+55165DC5344FD15D033B67C052CC34D4151CB059FA36C3BB9CE4610124760684
+5826EE3D0439F43501E3C45DA83D72C4C8CE66C23C7326D4F9B24FE3CF5836E6
+C08A52BB0535B5AF1C177873397D12A681DF891DBD737B2C1F11C9065E8363F5
+36CDB1AFDC2C52CE8D979DAA304B354AD0192532C958AB74EC56C4C68E402D82
+CDDDAF61F1E70015C29B5A14999878E56CEAB7B24F9C8B0C1CE14298B210AC26
+8B481737EC2546944F1FDA561BA9D27758DDB065F1AF690E188EDAFB2F6B7F28
+0C9161AFEBE9952FC317EA1549BB3485B9B920B86F2593C506596D42616643E5
+C899EB5D0FCBA6834ACE98FA02A06AE617B67C2E60B2973722673ED65436A364
+BF380C17F1A7A7794B5E04EACB7BD14A28C971ABF824AA01036741D714FC499F
+875D28A0342D4FFE2EEAEEC06B190514428857047099828F3AD34E3F92122699
+7346785297D037E7C7C083143904778B2C80B6BB8BFD1CB6AEBF5700C8384E59
+669DE1B2CC069A6314C039BEBECFCF589F805316723C0E0438915CF4560F434B
+AE973C2569F1B09A80B36CE737E34B030C87964F0FC9F55B66C495D7998206F2
+4A51B1984E8AE3437AADC0D998BB002B4CF7C245219D0DDA9C57A053383A7290
+B35BC0513DD72B30FC8B89BB4EAF23C8432A12577DAAF9BD440743501D414D95
+5EF815165AA2B6DBE8E73770FB37EFBF42D3539E950A56C61611517D09746942
+E1DB3B6B9691B39C3B3019ECB5A34ABE7707A181DAA1F9711EF9935B690F4DC9
+C030D1E61F62BC95DD60047F9AA7911C147DE7D45BA72269923B3DCE74742B8A
+DBAD222EF43A7FF4B662075D70374080309F0699F58A670DEFF1865273D4CE23
+E64AD57C823DCD1719F698E86636007102678F106AE91420B98839585FEDBD73
+AFA186BADF28E1BC6048620D032F04008E811A6720D5092EF4B2E631DA92BABB
+ECAF0270C5D5035D54705BF1255F8824C127349FB1960764C835882ACE8BB80C
+AADA8C07535487CD6B3E4E298D94B7F01FB66CD4A738C4A7B4DED0EFDC5376E4
+B685CB25470D1DBA78CA3C24774601D58589AD6CD6ECB4506AAF054BF0A53C9F
+6D278253291501D876CDC7C74395C1D0DCA5097B3283933748B1ED58283D1EAB
+1CA5A1C2A3F20351DEDF7CB8D3D05F4245C6231A440A4195AAE18ED5B40DD5F3
+A4FEC08391BD7282D7EEAF7CF899C5C4919B892A3175ACE9605874F65BDD27BB
+71E59509005E8E7A042331C5455C39D2DDF8BCFF2EA60FACC5A036E682FC1012
+49C55467AA92C5E680D08E4479109D90040CF597FA613BABCA1FF1F880DD1E51
+DD285C9F88DACEBF2A16294DA824D8F0117D18EFB203DA81FBDCB95FB77E416F
+C90E482A11DC578B3C939A547C3F71D9FD8788D4D9392A555B2A022FC9858FB9
+951FD6B2DE4F57A307C09C01FA634ACB308AE7F23976237C97A4C234485E21D0
+E6D32ED82680FE5AA05224E4A38A5E5DEDCAF1464C10FE145A2C387B718B9A60
+1B9BFAB5F7B3BB0D2DC8EA4559B8E69F4200A4320AEA96398E56EF208AC093BB
+99088A4710309A8CBA96AC27708EC1B3FE4647FDC35126ED11A3F4EB4BFC8509
+3B5338D0A3F06FE04BFBEB7C03E35EA0750FB5FC159F8F4B10B993DF88CBC19D
+7C460825F70F88E92292D02C337AB051E8EE0165518BF7996E09172918EE9F6A
+EC1A0A7009AF5C05B28F885C9C4652AF6845386F349EF3F3ABC8FD78E21404E8
+D0BA47DE48097CEBBF69B19B81FE55E61DAC5F496104DAA997122936DA6714BF
+F273FA47B03EB3D32E06268DF938CE0FDED9A2C30EE605D662C5ABCA81A31379
+4A49CCD50259E173B7E4348B2C9CD498C5EE3487F9EB00F9411C88908AAF36B6
+5CAD710C5A37B156FCBC3BD7BC9963FABA229234D2E7C4E9046A5FC3A6235329
+78255D660B00D3F5AA4AE02BFB1C6293188189ED6610EF5D76578A28C375E9C2
+9B02A8DF4357F38DB47C101C5D2E949D054DAA24BBC6C9B84CA3B3179A3355A8
+17D4F0D36A8E3DEAD9E4C5AF6E364BD30B375A3962BED22FE7CFAF926A732016
+35FD036B7A331CD245970B6056D2EF69D76FC144ADD030538B2DE3C123817E38
+0076E4FC37CF42D9D7BB8E787FF1BD2F6777F590DB94586CD1D59E80B32DCE6D
+6420A8A6CEFECAF66067FDB979D6F20231D492FA636B040A8BF91C27DD53D096
+CC40A017126A50B1ECCC34E9C04804CB04B36B814DF1872EAE51C59A28B082D1
+7C1451E8603CA534B2F0677DC21A9AA54D7B6C6C8CD1C28615E3E963BB917061
+9FE57F47B1F1FCE60D6315D9873A3E7379EC5577A28EB61A180F1E341860B487
+86880B03C761A3AA013917C7B19D873A35CC4217439219CCBB1B215B03A65019
+1386A19F82072E5D62D7F053D68932783C6A7A9E13CABDCAF1BEB546F555D936
+A4DDBBED5C1B752DE424C1C2BD4493B37213414AF936FE2B68B7AE7E462D8FC0
+7F3B21B7C7225A662DBADA1D6694BC2C07EF3A9E1B363EBCE9DE5A1C273DF5B6
+4C853AF7738D868142C0DA8DD2FDC98678D883E78CE70F9D51ABFAF18516076F
+06322B0554C099C7AF185C8374C6BA6E5274555A66AD5D28A4F8E350EECF5C73
+2E0418422E11D2A40FDDE3CEB4992D161512B1F8A08436BE96C8318F9B404401
+B82C511CB0375FAD93AB6CF95CA8885229C21D8B63FCB0883011E8F699BF330D
+F7FD4AC95154576459A0BF71A9AA5649C1133BF47F9E74183A996391E332CC81
+6C3EB6FFE1A669258A161AC5864C26A441D70DAEDF0CE1140C1E4FB13C7B00CA
+62DB457152117737F05B8EC1DA3DE229A6CE29D70001C42CBFFF79012BF79086
+7A4B74241403D98CCF3628BD1F0F45D71E5F5C6DA6E4B75CB0D6A09DEDF57FA5
+32E3CBA461CCD32957E92E124727520FB36E70D8E89583831544711C4F592BBD
+02903896E53321F2B1E4EE4E11BEDA9D7DD2A87868E9E72BC225B0ABA41BA1AE
+82F67F42F5EB3E8BF28B62F72A2D5F6F7EF7D9D6492E9D84F6A1DAC2987FD343
+F3674B603F3EDFBE07910079DE0D0A7B849E94C7F24E5C8650145A5680963400
+C8EAAFB866F3B307E6FB7CF772CFFBA49BBD30691CFB6BEB6D7FB3AD4EDB51DD
+68857CAC2E130B9AE2D39F4F0EC51A56FF8FD5BAD6FC426281ECF47BDBA41F8F
+A0DA6EDCADA409419B3B083605AD8E507D8F2122BC93BAB30D100CA8DD5F375C
+E60C4911F19FAFCF1F84CAB08CE5446377AC2B83FAA3880D0A91A476477167EA
+525ED7EBCA27ED020D788646B59FB808985303E7273D3C4D91DDCAA8044FABD6
+B27F80C10AD00F78738719AB306946C235CE8693A395C2D56233E1253BC111CB
+ABED30182C02551FE3BDC78C0353F33C80C4C8F034B8585D648389961290DF78
+EA9DBAAC78DE16BDC2E03DF0F977EC4B16D12BAB0B180C57437A64B70A919799
+C47812F61406554A49E3ED806F0084F4F3E86F09DB272A7C00CF103535D32467
+A6691D88E7C4C69F40C03330E97C629F8F265B7E3E67FF3F195BF5E9221767AD
+A6546EB7CFC6552E4D4B887411BA6047BB487399314E5536B24561FDB58D7A13
+B4D778C56231C3E1FE9C11D5C57330101409A099971779AC99BAF87027D93528
+C2335A9BE780C005D904DD2F2BA0AAD0052466424E49C7DB87DD0DCC0CB7304C
+29BEBC57224E64D31D7D6691CAF4617EAFFEBEF01B086463EAB1FF176B33EA51
+47425F03BCB318CC289FBC9C2AB20AC5CE598056EFDECE8F0515AE916365D173
+AECA95DC64C8E04A8BC9996B3195D65A7598F68609B02AA0E60ABBA6F934C0E0
+11AD7127AB10B29E49E942F42C7EA2B283A0E16F0E14E21A1A82024BF91AD2FC
+6821AEE8A54C6D3499301150C5C817BFAF9456E90312AF13703D7435F7767D39
+86687858FC2F787E2420A784B5EBF899F6C9D8478DEC292B7C6ADB8E82D2219C
+EE2E5F23316EDE7FE048291515A7BDD0FD8B928E2EDA631B554ACF09330EFADD
+FCE138D89C24088FE5D6DF21C136C90EDA2D58AA2F6844696C103374A392FC2E
+7CE785FE52E2D405DBF0A3D1A4663593B0281C623638A601D70BDBDB5284E3F5
+862DF61900A6B43DC57BDA6E19DE422900563770A83DC4FA966A451E0B2EBD0C
+4F0FF1095F7D242A93204327C27B09F8FB74B7E91B941F1C234B97A5DA196BA0
+5FD287FFF11E35332161D09FDFF6F1EFD1BA50990C9B11FB9F9335F0F22DC8AA
+88C21AEE73AB8EE7532BD1D59E2C7FC3881B07EE879731F3786C2CFE72BF49EE
+CB820B4882CF73DC9F4D01454B9C2D38A3CC62053A46CF09B3CEF59690D1B22D
+AF4633FEF5F4FCD97CBA72139A783E82E1435525C67FD4FA258D660A6C7E7326
+699043AB0F76E1BE3FC72D765CB95E05140BC874A0414893570363B979BA0479
+816617C99ABB3B34CDE3E8CFB3E7813094F26E6F5EDCD2B415E498DDA03E8AA6
+43F74128CE5B2FDA0D2789CF98AC4097C3CDD68EBD42BB79373FC8A82D740CF9
+74C6C2CB86C9FE616C34962539749CA69D5B4BF0176CA88FBC4A35CFF9DC0816
+3A21DCB24CA986D07CAA99E3E60069A68CBF325C924A3A69162A93C225D0A6FF
+427B0753DF16BF95F7530D7403AD80FF9D7A49AB1493422EF7459D8812DBDA3D
+80482627BA2A128D9AB3600DF2B4BEE0380C6B8FEF27B9930D851ED92A63057F
+D3DE810452A287538D0C483B2219467C5C9FB30D7943677D72E1FC16418BC267
+08CA35E9B961A69D8F9E52D4EFA6F26C9121FDA7DEC06C734E1F5E7D20190079
+688FEA50B8C6357AB001E3ABE6222E9B5706F88EC69D2E456C8ED643DECBC8C0
+C09BF2426B872A23C43266FE8C90AABA28B3FE1E2C9B250FC1220498478850F7
+76D2ACA6A2B7793C0E06FCD72052E1AA87B86F0B7A918BE77ADCB424467E23C4
+A60D4556B256F6EDBCDDAC65AF54D25C3C7CE4462726E7BE8672600AF0A7B648
+8956FDC8BC9E1F56DD24C28AA1703A50ACE4EB81D083FE57C9665A1FD9111821
+1315042979FAA6F6953E30FF6085E62272CD0915168B39A9490F20DBF72563A9
+D3263948A5129F3E8CC8C3DC374D5EBDEBE63761F2690B9565B92320E5D8B405
+706406D55535E1383C8DBE9CB32B6663C12DBB38D9184346C055F435125FF7C6
+6FA84AAFC27D9502E04FB08A5243F331A512E1E024870ABA03901B1D54CD0F21
+1D1C736712388171EFE06BFB32076B68BABEB92A92291B5DD8A51216E4E735A8
+A1D2321E2B8FE59E1631D96EF4F38835628B03D1C82F3BDDFD1ADDA5FA78F449
+5832ACD7257D0CAAD4A60F5D236670C7A5F99E7408C0C5FEB321B771CBB3553D
+04B05959AF7F709542D68C52585E67906183CC48AC7D703A41CC9272B804312B
+4640CDC7DAD92A040404EF278B26E83265A6C6C3263D3B389EB4845E7F9F2A84
+D404CAE1F901E0111DE0B41DB6E2DED17A56E9CF875DC6092C5333391AE2EC2C
+0C76810412CFFE9F8BB820C3E73D7013C852657BA98DD0785D5678C65CF3FC0A
+9F8F32664EA880F297842558494D31C09CDE5E41B4BDDE39628D530EC7138753
+48B2A4B4B68805F5A6827FC2D46A74F9A5212EDFE7A3C7DEB342A5414F7BEEDE
+FB4CA90AF375B00B39E79E3077E85A474C5F8E12D8A450707F1C333703BFB751
+CDC84D322F81FB17574D87D41AC5D5852ABB2FF37364D39B8DCEC51AB98A48C8
+62294808419DE6BC29CD3172FAC041913E02
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
@@ -810,7 +860,7 @@ AE61E3098253D4703AA38201A0DC339FE12AF47B2886D6
 0000000000000000000000000000000000000000000000000000000000000000
 cleartomark
 %%EndResource
-/F10_0 /LTWFJF+OurCharSet 1 1
+/F9_0 /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
@@ -826,23 +876,23 @@ cleartomark
   /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/.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/.notdef
-  /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section
-  /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl
-  /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet
-  /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown
-  /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent
-  /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron
-  /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
-  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
-  /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef
-  /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef
-  /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef
-  /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef]
+  /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
@@ -850,6 +900,9 @@ pdfMakeFont
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -857,253 +910,297 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  README  Page 1) 19.866 Tj
-0 -3.92728 Td
-(xv6 is a re-implementation of Dennis Ritchie's and Ken Thompson's Unix) 42.14 Tj
-0 -5.23637 Td
-(Version 6 \(v6\).  xv6 loosely follows the structure and style of v6,) 40.334 Tj
-0 -6.54546 Td
-(but is implemented for a modern x86-based multiprocessor using ANSI C.) 42.14 Tj
-0 -9.16364 Td
-(ACKNOWLEDGEMENTS) 9.632 Tj
-0 -11.7818 Td
-(xv6 is inspired by John Lions' Commentary on UNIX 6th Edition \(Peer) 40.334 Tj
-0 -13.0909 Td
-(to Peer Communications; ISBN: 1-57398-013-7; 1st edition \(June 14,) 39.732 Tj
-0 -14.4 Td
-(2000\)\). See also http://pdos.csail.mit.edu/6.828/2006/v6.html, which) 40.936 Tj
-0 -15.7091 Td
-(provides pointers to on-line resources for v6.) 27.692 Tj
-0 -18.3273 Td
-(xv6 borrows code from the following sources:) 26.488 Tj
-2.40798 -19.6364 Td
-(JOS \(asm.h, elf.h, mmu.h, bootasm.S, ide.c, console.c, and others\)) 39.732 Tj
-2.40798 -20.9455 Td
-(Plan 9 \(bootother.S, mp.h, mp.c, ioapic.h, lapic.c\)) 30.702 Tj
-2.40798 -22.2546 Td
-(FreeBSD \(ioapic.c\)) 10.836 Tj
-2.40798 -23.5636 Td
-(NetBSD \(console.c\)) 10.836 Tj
-0 -26.1818 Td
-(The following people made contributions:) 24.08 Tj
-2.40798 -27.4909 Td
-(Russ Cox \(context switching, locking\)) 22.274 Tj
-2.40798 -28.8 Td
-(Cliff Frey \(MP\)) 9.03 Tj
-2.40798 -30.1091 Td
-(Xiao Yu \(MP\)) 7.224 Tj
-0 -32.7273 Td
-(The code in the files that constitute xv6 are ) 27.692 Tj
-0 -34.0364 Td
-(Copyright 2006 Frans Kaashoek, Robert Morris, and Russ Cox.) 35.518 Tj
-0 -36.6545 Td
-(ERROR REPORTS) 7.826 Tj
-0 -39.2727 Td
-(If you spot errors or have suggestions for improvement, please send) 40.334 Tj
-0 -40.5818 Td
-(email to Frans Kaashoek and Robert Morris) 24.682 Tj
-0 -41.8909 Td
-(\({kaashoek,rtm}@csail.mit.edu\).  This version is the very first one,) 40.936 Tj
-0 -43.2 Td
-(so don't be surprised if there are errors or the code is unclear.) 39.13 Tj
-0 -45.8182 Td
-(BUIDLING AND RUNNING XV6) 14.448 Tj
-0 -48.4364 Td
-(To build xv6 on an x86 ELF machine \(like Linux or FreeBSD\), run "make".) 42.742 Tj
-0 -49.7454 Td
-(On non-x86 or non-ELF machines \(like OS X, even on x86\), you will) 39.13 Tj
-0 -51.0545 Td
-(need to install a cross-compiler gcc suite capable of producing x86 ELF) 42.742 Tj
-0 -52.3636 Td
-(binaries.  See http://pdos.csail.mit.edu/6.828/2006/tools.html.) 37.926 Tj
-0 -53.6727 Td
-(Then run "make TOOLPREFIX=i386-jos-elf-".) 24.682 Tj
-0 -56.2909 Td
-(To run xv6, you can use Bochs or QEMU, both PC simulators.  Bochs makes) 42.742 Tj
-0 -57.6 Td
-(debugging easier, but QEMU is much faster. ) 25.886 Tj
-0 -58.9091 Td
-(To run in Bochs, run "make bochs" and then type "c" at the bochs prompt.) 43.344 Tj
-0 -60.2182 Td
-(To run in QEMU, run "make qemu".  Both log the xv6 screen output to ) 40.936 Tj
-0 -61.5272 Td
-(standard output.) 9.632 Tj
-0 -64.1454 Td
-(To create a typeset version of the code, run "make xv6.pdf".) 36.12 Tj
-0 -65.4545 Td
-(This requires the "mpage" text formatting utility.) 30.1 Tj
-0 -66.7636 Td
-(See http://www.mesa.nl/pub/mpage/.) 20.468 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  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.69 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.427 Td
+(2000\)\). See also http://pdos.csail.mit.edu/6.828/2007/v6.html\
+, which) 297.059 Tj
+0 -113.92 Td
+(provides pointers to on-line resources for v6.) 200.952 Tj
+0 -132.907 Td
+(xv6 borrows code from the following sources:) 192.215 Tj
+17.4609 -142.4 Td
+(JOS \(asm.h, elf.h, mmu.h, bootasm.S, ide.c, console.c, and oth\
+ers\)) 288.322 Tj
+17.4609 -151.893 Td
+(Plan 9 \(bootother.S, mp.h, mp.c, lapic.c\)) 179.109 Tj
+17.4609 -161.387 Td
+(FreeBSD \(ioapic.c\)) 78.6333 Tj
+17.4609 -170.88 Td
+(NetBSD \(console.c\)) 78.6333 Tj
+0 -189.867 Td
+(The following people made contributions:) 174.741 Tj
+17.4609 -199.36 Td
+(Russ Cox \(context switching, locking\)) 161.635 Tj
+17.4609 -208.853 Td
+(Cliff Frey \(MP\)) 65.5277 Tj
+17.4609 -218.347 Td
+(Xiao Yu \(MP\)) 52.4222 Tj
+0 -237.334 Td
+(The code in the files that constitute xv6 is) 192.215 Tj
+0 -246.827 Td
+(Copyright 2006-2007 Frans Kaashoek, Robert Morris, and Russ Cox\
+.) 279.585 Tj
+0 -265.813 Td
+(ERROR REPORTS) 56.7907 Tj
+0 -284.799 Td
+(If you spot errors or have suggestions for improvement, please \
+send) 292.69 Tj
+0 -294.293 Td
+(email to Frans Kaashoek and Robert Morris \(kaashoek,rtm@csail.\
+mit.edu\). ) 314.533 Tj
+0 -313.28 Td
+(BUILDING AND RUNNING XV6) 104.844 Tj
+0 -332.266 Td
+(To build xv6 on an x86 ELF machine \(like Linux or FreeBSD\), r\
+un "make".) 310.165 Tj
+0 -341.76 Td
+(On non-x86 or non-ELF machines \(like OS X, even on x86\), you \
+will) 283.953 Tj
+0 -351.253 Td
+(need to install a cross-compiler gcc suite capable of producing\
+ x86 ELF) 310.165 Tj
+0 -360.746 Td
+(binaries.  See http://pdos.csail.mit.edu/6.828/2007/tools.html.) 275.216 Tj
+0 -370.24 Td
+(Then run "make TOOLPREFIX=i386-jos-elf-".) 179.109 Tj
+0 -389.226 Td
+(To run xv6, you can use Bochs or QEMU, both PC simulators.) 253.374 Tj
+0 -398.72 Td
+(Bochs makes debugging easier, but QEMU is much faster. ) 240.268 Tj
+0 -408.213 Td
+(To run in Bochs, run "make bochs" and then type "c" at the boch\
+s prompt.) 314.533 Tj
+0 -417.706 Td
+(To run in QEMU, run "make qemu".  Both log the xv6 screen outpu\
+t to ) 297.059 Tj
+0 -427.2 Td
+(standard output.) 69.8962 Tj
+0 -446.187 Td
+(To create a typeset version of the code, run "make xv6.pdf".) 262.111 Tj
+0 -455.68 Td
+(This requires the "mpage" text formatting utility.) 218.426 Tj
+0 -465.173 Td
+(See http://www.mesa.nl/pub/mpage/.) 148.529 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  table of contents  Page 1) 26.488 Tj
-0 -3.92728 Td
-(The numbers to the left of the file names in the table are sheet numbers.) 43.946 Tj
-0 -5.23637 Td
-(The source code has been printed in a double column format with fifty) 41.538 Tj
-0 -6.54546 Td
-(lines per column, giving one hundred lines per sheet \(or page\).) 37.926 Tj
-0 -7.85455 Td
-(Thus there is a convenient relationship between line numbers and sheet numbers.) 47.558 Tj
-0 -13.0909 Td
-(# basic headers) 9.03 Tj
-14.4479 -13.0909 Td
-(# processes) 6.622 Tj
-28.8958 -13.0909 Td
-(35 fs.h) 4.214 Tj
--0.0001 -14.4 Td
-(01 types.h) 6.02 Tj
-14.4478 -14.4 Td
-(19 proc.h) 5.418 Tj
-28.8957 -14.4 Td
-(36 fsvar.h) 6.02 Tj
--0.0002 -15.7091 Td
-(01 param.h) 6.02 Tj
-14.4477 -15.7091 Td
-(20 proc.c) 5.418 Tj
-28.8956 -15.7091 Td
-(37 ide.c) 4.816 Tj
--0.0003 -17.0182 Td
-(02 defs.h) 5.418 Tj
-14.4476 -17.0182 Td
-(25 setjmp.S) 6.622 Tj
-28.8955 -17.0182 Td
-(39 bio.c) 4.816 Tj
--0.0004 -18.3273 Td
-(03 x86.h) 4.816 Tj
-14.4475 -18.3273 Td
-(25 kalloc.c) 6.622 Tj
-28.8954 -18.3273 Td
-(40 fs.c) 4.214 Tj
--0.0005 -19.6364 Td
-(05 asm.h) 4.816 Tj
-28.8954 -19.6364 Td
-(49 file.c) 5.418 Tj
--0.0005 -20.9455 Td
-(06 mmu.h) 4.816 Tj
-14.4474 -20.9455 Td
-(# system calls) 8.428 Tj
-28.8953 -20.9455 Td
-(51 sysfile.c) 7.224 Tj
--0.0006 -22.2545 Td
-(08 elf.h) 4.816 Tj
-14.4473 -22.2545 Td
-(27 syscall.h) 7.224 Tj
--0.0006 -23.5636 Td
-(08 mp.h) 4.214 Tj
-14.4473 -23.5636 Td
-(27 trapasm.S) 7.224 Tj
-28.8952 -23.5636 Td
-(# pipes) 4.214 Tj
-14.4473 -24.8727 Td
-(28 traps.h) 6.02 Tj
-28.8952 -24.8727 Td
-(56 pipe.c) 5.418 Tj
--0.0007 -26.1818 Td
-(# startup) 5.418 Tj
-14.4472 -26.1818 Td
-(28 trap.c) 5.418 Tj
--0.0007 -27.4909 Td
-(10 bootasm.S) 7.224 Tj
-14.4472 -27.4909 Td
-(29 vectors.pl) 7.826 Tj
-28.8951 -27.4909 Td
-(# string operations) 11.438 Tj
--0.0008 -28.8 Td
-(11 bootother.S) 8.428 Tj
-14.4471 -28.8 Td
-(30 syscall.c) 7.224 Tj
-28.895 -28.8 Td
-(57 string.c) 6.622 Tj
--0.0009 -30.1091 Td
-(12 main.c) 5.418 Tj
-14.447 -30.1091 Td
-(32 sysproc.c) 7.224 Tj
--0.0009 -31.4182 Td
-(14 mp.c) 4.214 Tj
-28.895 -31.4182 Td
-(# low-level PC) 8.428 Tj
--0.0009 -32.7273 Td
-(16 init.c) 5.418 Tj
-14.447 -32.7273 Td
-(# file system) 7.826 Tj
-28.8949 -32.7273 Td
-(58 ioapic.h) 6.622 Tj
-14.447 -34.0364 Td
-(33 buf.h) 4.816 Tj
-28.8949 -34.0364 Td
-(59 lapic.c) 6.02 Tj
--0.001 -35.3454 Td
-(# locks) 4.214 Tj
-14.4469 -35.3454 Td
-(33 dev.h) 4.816 Tj
-28.8948 -35.3454 Td
-(62 ioapic.c) 6.622 Tj
--0.0011 -36.6545 Td
-(17 spinlock.h) 7.826 Tj
-14.4468 -36.6545 Td
-(34 fcntl.h) 6.02 Tj
-28.8947 -36.6545 Td
-(63 picirq.c) 6.622 Tj
--0.0012 -37.9636 Td
-(17 spinlock.c) 7.826 Tj
-14.4467 -37.9636 Td
-(34 stat.h) 5.418 Tj
-28.8946 -37.9636 Td
-(64 console.c) 7.224 Tj
-14.4467 -39.2727 Td
-(35 file.h) 5.418 Tj
-28.8946 -39.2727 Td
-(68 8253pit.c) 7.224 Tj
--0.0013 -44.5091 Td
-(The source listing is preceded by a cross-reference that lists every defined ) 46.354 Tj
--0.0013 -45.8182 Td
-(constant, struct, global variable, and function in xv6.  Each entry gives,) 44.548 Tj
--0.0013 -47.1273 Td
-(on the same line as the name, the line number \(or, in a few cases, numbers\)) 45.15 Tj
--0.0013 -48.4363 Td
-(where the name is defined.  Successive lines in an entry list the line) 42.14 Tj
--0.0013 -49.7454 Td
-(numbers where the name is used.  For example, this entry:) 34.314 Tj
-2.40669 -52.3636 Td
-(namei 4610) 6.02 Tj
-4.81468 -53.6727 Td
-(0333 4610 4709 4758) 11.438 Tj
-4.81468 -54.9818 Td
-(4808 4857 4866 5264) 11.438 Tj
-4.81468 -56.2909 Td
-(5277 5362 5410 5490) 11.438 Tj
--0.0013 -58.9091 Td
-(indicates that namei is defined on line 4610 and is mentioned on twelve lines) 46.354 Tj
--0.0013 -60.2181 Td
-(on sheets 03, 46, 47, 48, 52, 53, and 54.) 24.682 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  table of contents  Page 1) 192.215 Tj
+0 -28.4801 Td
+(The numbers to the left of the file names in the table are shee\
+t numbers.) 318.902 Tj
+0 -37.9735 Td
+(The source code has been printed in a double column format with\
+ fifty) 301.427 Tj
+0 -47.4668 Td
+(lines per column, giving one hundred lines per sheet \(or page\)\
+.) 275.216 Tj
+0 -56.9602 Td
+(Thus there is a convenient relationship between line numbers an\
+d sheet numbers.) 345.113 Tj
+0 -85.4403 Td
+(# basic headers) 65.5277 Tj
+-4514.16 TJm
+(# system calls) 61.1592 Tj
+-5015.87 TJm
+(# pipes) 30.5796 Tj
+0 -94.9336 Td
+(01 types.h) 43.6851 Tj
+-7022.49 TJm
+(23 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.49 TJm
+(24 vectors.pl) 56.7907 Tj
+0 -113.92 Td
+(02 defs.h) 39.3166 Tj
+-7524.16 TJm
+(24 trapasm.S) 52.4222 Tj
+-6019.2 TJm
+(# string operations) 83.0018 Tj
+0 -123.414 Td
+(03 x86.h) 34.9481 Tj
+-8025.82 TJm
+(25 trap.c) 39.3166 Tj
+-7524.2 TJm
+(53 string.c) 48.0537 Tj
+0 -132.907 Td
+(05 asm.h) 34.9481 Tj
+-8025.82 TJm
+(26 syscall.h) 52.4222 Tj
+0 -142.4 Td
+(06 mmu.h) 34.9481 Tj
+-8025.82 TJm
+(26 syscall.c) 52.4222 Tj
+-6019.2 TJm
+(# low-level hardware) 87.3703 Tj
+0 -151.894 Td
+(08 elf.h) 34.9481 Tj
+-8025.82 TJm
+(28 sysproc.c) 52.4222 Tj
+-6019.2 TJm
+(54 mp.h) 30.5796 Tj
+209.535 -161.387 Td
+(55 mp.c) 30.5796 Tj
+0 -170.881 Td
+(# startup) 39.3166 Tj
+-7524.16 TJm
+(# file system) 56.7907 Tj
+-5517.54 TJm
+(56 lapic.c) 43.6851 Tj
+0 -180.374 Td
+(09 bootasm.S) 52.4222 Tj
+-6019.16 TJm
+(29 buf.h) 34.9481 Tj
+-8025.87 TJm
+(58 ioapic.c) 48.0537 Tj
+0 -189.867 Td
+(10 bootother.S) 61.1592 Tj
+-5015.82 TJm
+(29 dev.h) 34.9481 Tj
+-8025.87 TJm
+(59 picirq.c) 48.0537 Tj
+0 -199.361 Td
+(11 bootmain.c) 56.7907 Tj
+-5517.49 TJm
+(30 fcntl.h) 43.6851 Tj
+-7022.54 TJm
+(60 kbd.h) 34.9481 Tj
+0 -208.854 Td
+(12 main.c) 39.3166 Tj
+-7524.16 TJm
+(30 stat.h) 39.3166 Tj
+-7524.2 TJm
+(61 kbd.c) 34.9481 Tj
+104.767 -218.347 Td
+(31 file.h) 39.3166 Tj
+-7524.2 TJm
+(62 console.c) 52.4222 Tj
+0 -227.841 Td
+(# locks) 30.5796 Tj
+-8527.49 TJm
+(31 fs.h) 30.5796 Tj
+-8527.54 TJm
+(65 timer.c) 43.6851 Tj
+0 -237.334 Td
+(13 spinlock.h) 56.7907 Tj
+-5517.49 TJm
+(32 fsvar.h) 43.6851 Tj
+0 -246.827 Td
+(14 spinlock.c) 56.7907 Tj
+-5517.49 TJm
+(33 ide.c) 34.9481 Tj
+-8025.87 TJm
+(# user-level) 52.4222 Tj
+104.767 -256.321 Td
+(35 bio.c) 34.9481 Tj
+-8025.87 TJm
+(66 initcode.S) 56.7907 Tj
+0 -265.814 Td
+(# processes) 48.0537 Tj
+-6520.82 TJm
+(36 fs.c) 30.5796 Tj
+-8527.54 TJm
+(66 init.c) 39.3166 Tj
+0 -275.307 Td
+(15 proc.h) 39.3166 Tj
+-7524.16 TJm
+(44 file.c) 39.3166 Tj
+-7524.2 TJm
+(67 usys.S) 39.3166 Tj
+0 -284.8 Td
+(16 proc.c) 39.3166 Tj
+-7524.16 TJm
+(45 sysfile.c) 52.4222 Tj
+-6019.2 TJm
+(67 sh.c) 30.5796 Tj
+0 -294.294 Td
+(21 swtch.S) 43.6851 Tj
+-7022.49 TJm
+(50 exec.c) 39.3166 Tj
+0 -303.787 Td
+(22 kalloc.c) 48.0537 Tj
+0 -341.761 Td
+(The source listing is preceded by a cross-reference that lists \
+every defined ) 336.376 Tj
+0 -351.254 Td
+(constant, struct, global variable, and function in xv6.  Each e\
+ntry gives,) 323.27 Tj
+0 -360.747 Td
+(on the same line as the name, the line number \(or, in a few ca\
+ses, numbers\)) 327.639 Tj
+0 -370.241 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.005 Tj
+17.4609 -398.721 Td
+(swtch 2256) 43.6851 Tj
+34.9222 -408.214 Td
+(0311 1928 1962 2255) 83.0018 Tj
+34.9222 -417.707 Td
+(2256) 17.4741 Tj
+-7.10543e-15 -436.694 Td
+(indicates that swtch is defined on line 2256 and is mentioned o\
+n five lines) 327.639 Tj
+-7.10543e-15 -446.187 Td
+(on sheets 03, 19, and 22.) 109.213 Tj
 Q
 Q
 Q
@@ -1114,7 +1211,10 @@ pdfEndPage
 %%Page: 2 2
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -1122,437 +1222,449 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  cross-references  Page 1) 25.886 Tj
-0 -3.92728 Td
-(acquire 1805) 7.224 Tj
-24.0799 -3.92728 Td
-(4533) 2.408 Tj
-2.408 -5.23637 Td
-(0282 1805 1808 2111) 11.438 Tj
-21.6719 -5.23637 Td
-(B_BUSY 3308) 6.622 Tj
-2.408 -6.54546 Td
-(2215 2272 2313 2320) 11.438 Tj
-24.0799 -6.54546 Td
-(3308 3904 3905 3907) 11.438 Tj
-2.408 -7.85455 Td
-(2335 2355 2368 2403) 11.438 Tj
-24.0799 -7.85455 Td
-(3921 3923 3973 3978) 11.438 Tj
-2.408 -9.16364 Td
-(2431 2619 2667 3791) 11.438 Tj
-24.0799 -9.16364 Td
-(3981 3988 3989 4021) 11.438 Tj
-2.408 -10.4727 Td
-(3833 3969 4035 4190) 11.438 Tj
-24.0799 -10.4727 Td
-(4032 4044) 5.418 Tj
-2.408 -11.7818 Td
-(4327 4359 4442 4930) 11.438 Tj
-21.6719 -11.7818 Td
-(bfree 4152) 6.02 Tj
-2.408 -13.0909 Td
-(5004 5054 5663 5684) 11.438 Tj
-24.0799 -13.0909 Td
-(4152 4414 4420) 8.428 Tj
-2.408 -14.4 Td
-(5710 6509 6578 6747) 11.438 Tj
-21.6719 -14.4 Td
-(bget 3965) 5.418 Tj
-2.408 -15.7091 Td
-(6812) 2.408 Tj
-24.0799 -15.7091 Td
-(3908 3965 3996 4006) 11.438 Tj
-0 -17.0182 Td
-(allocproc 2080) 8.428 Tj
-21.6719 -17.0182 Td
-(binit 3944) 6.02 Tj
-2.408 -18.3273 Td
-(2080 2112) 5.418 Tj
-24.0799 -18.3273 Td
-(0316 1251 3944) 8.428 Tj
-7.10543e-15 -19.6364 Td
-(APBOOTCODE 1603) 9.03 Tj
-21.6719 -19.6364 Td
-(bmap 4369) 5.418 Tj
-2.408 -20.9455 Td
-(1603 1612 1621 1624) 11.438 Tj
-24.0799 -20.9455 Td
-(4369 4376 4380 4383) 11.438 Tj
-2.408 -22.2545 Td
-(1627) 2.408 Tj
-24.0799 -22.2545 Td
-(4389 4495 4572 4574) 11.438 Tj
-1.42109e-14 -23.5636 Td
-(APIC_ID_CLUSTER 5856) 12.04 Tj
-24.0799 -23.5636 Td
-(4664) 2.408 Tj
-2.408 -24.8727 Td
-(5856) 2.408 Tj
-21.6719 -24.8727 Td
-(bread 4002) 6.02 Tj
-7.10543e-15 -26.1818 Td
-(APIC_ID_CLUSTER_ID 5857) 13.846 Tj
-24.0799 -26.1818 Td
-(0319 3913 4002 4112) 11.438 Tj
-2.408 -27.4909 Td
-(5857) 2.408 Tj
-24.0799 -27.4909 Td
-(4120 4160 4165 4170) 11.438 Tj
-7.10543e-15 -28.8 Td
-(APIC_ID_CLUSTER_SHIFT 5860) 15.652 Tj
-24.0799 -28.8 Td
-(4223 4258 4282 4288) 11.438 Tj
-2.408 -30.1091 Td
-(5860) 2.408 Tj
-24.0799 -30.1091 Td
-(4384 4410 4495 4530) 11.438 Tj
-7.10543e-15 -31.4182 Td
-(APIC_ID_MASK 5854) 10.234 Tj
-24.0799 -31.4182 Td
-(4572 4664) 5.418 Tj
-2.408 -32.7273 Td
-(5854 5898) 5.418 Tj
-21.6719 -32.7273 Td
-(brelse 4030) 6.622 Tj
-0 -34.0364 Td
-(APIC_ID_SHIFT 5855) 10.836 Tj
-24.0799 -34.0364 Td
-(0321 3920 3924 4030) 11.438 Tj
-2.408 -35.3454 Td
-(5855 6245 6282) 8.428 Tj
-24.0799 -35.3454 Td
-(4033 4119 4133 4163) 11.438 Tj
-0 -36.6545 Td
-(APIC_MAX_CLUSTER 5858) 12.642 Tj
-24.0799 -36.6545 Td
-(4168 4175 4231 4267) 11.438 Tj
-2.408 -37.9636 Td
-(5858) 2.408 Tj
-24.0799 -37.9636 Td
-(4285 4293 4303 4387) 11.438 Tj
-0 -39.2727 Td
-(APIC_MAX_INTRACLUSTER_ID 5859) 17.458 Tj
-24.0799 -39.2727 Td
-(4418 4502 4539 4575) 11.438 Tj
-2.408 -40.5818 Td
-(5859) 2.408 Tj
-24.0799 -40.5818 Td
-(4675 4680) 5.418 Tj
-0 -41.8909 Td
-(APIC_VER_MAXLVT 5864) 12.04 Tj
-21.6719 -41.8909 Td
-(BSIZE 3557) 6.02 Tj
-2.408 -43.2 Td
-(5864) 2.408 Tj
-24.0799 -43.2 Td
-(3557 3569 3587 3593) 11.438 Tj
-7.10543e-15 -44.5091 Td
-(APIC_VER_VERSION 5863) 12.642 Tj
-24.0799 -44.5091 Td
-(4166 4495 4497 4498) 11.438 Tj
-2.408 -45.8182 Td
-(5863) 2.408 Tj
-24.0799 -45.8182 Td
-(4564 4571 4573 4582) 11.438 Tj
-7.10543e-15 -47.1272 Td
-(argfd 5120) 6.02 Tj
-24.0799 -47.1272 Td
-(4663 4664 4666) 8.428 Tj
-2.408 -48.4363 Td
-(5120 5207 5219 5230) 11.438 Tj
-21.6719 -48.4363 Td
-(buf 3300) 4.816 Tj
-2.408 -49.7454 Td
-(5445 5456) 5.418 Tj
-24.0799 -49.7454 Td
-(0317 0318 0319 0320) 11.438 Tj
-7.10543e-15 -51.0545 Td
-(argint 3052) 6.622 Tj
-24.0799 -51.0545 Td
-(0321 3010 3210 3300) 11.438 Tj
-2.408 -52.3636 Td
-(0246 3052 3068 3084) 11.438 Tj
-24.0799 -52.3636 Td
-(3304 3305 3902 3904) 11.438 Tj
-2.408 -53.6727 Td
-(3246 3263 5126 5207) 11.438 Tj
-24.0799 -53.6727 Td
-(3906 3907 3913 3916) 11.438 Tj
-2.408 -54.9818 Td
-(5219 5260 5326 5327) 11.438 Tj
-24.0799 -54.9818 Td
-(3924 3933 3935 3941) 11.438 Tj
-2.408 -56.2909 Td
-(5487) 2.408 Tj
-24.0799 -56.2909 Td
-(3946 3953 3964 3967) 11.438 Tj
-7.10543e-15 -57.6 Td
-(argptr 3063) 6.622 Tj
-24.0799 -57.6 Td
-(3979 4000 4001 4004) 11.438 Tj
-2.408 -58.9091 Td
-(0247 3063 5174 5207) 11.438 Tj
-24.0799 -58.9091 Td
-(4016 4019 4028 4030) 11.438 Tj
-2.408 -60.2181 Td
-(5219 5445) 5.418 Tj
-24.0799 -60.2181 Td
-(4045 4058 4105 4154) 11.438 Tj
-7.10543e-15 -61.5272 Td
-(argstr 3081) 6.622 Tj
-24.0799 -61.5272 Td
-(4188 4255 4280 4373) 11.438 Tj
-2.408 -62.8363 Td
-(0248 3081 5260 5326) 11.438 Tj
-24.0799 -62.8363 Td
-(4405 4486 4512 4559) 11.438 Tj
-2.408 -64.1454 Td
-(5359 5407 5434 5469) 11.438 Tj
-24.0799 -64.1454 Td
-(4617 5110 6475 6488) 11.438 Tj
-2.408 -65.4545 Td
-(5487) 2.408 Tj
-24.0799 -65.4545 Td
-(6491 6494 6574 6581) 11.438 Tj
-7.10543e-15 -66.7636 Td
-(balloc 4102) 6.622 Tj
-21.6719 -66.7636 Td
-(bufhead 3941) 7.224 Tj
-2.408 -68.0727 Td
-(4102 4129 4518 4525) 11.438 Tj
-24.0799 -68.0727 Td
-(3939 3940 3941 3951) 11.438 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  cross-references  Page 1) 187.846 Tj
+0 -28.4801 Td
+(acquire 1425) 52.4222 Tj
+-14045.3 TJm
+(2911 3387 3414 3419) 83.0018 Tj
+17.4609 -37.9735 Td
+(0314 1425 1428 1633) 83.0018 Tj
+-8527.18 TJm
+(3460 3479 3618) 61.1592 Tj
+17.4609 -47.4668 Td
+(1815 1869 1918 1933) 83.0018 Tj
+-6520.6 TJm
+(bfree 3730) 43.6851 Tj
+17.4609 -56.9602 Td
+(1967 1980 2023 2058) 83.0018 Tj
+-8527.18 TJm
+(3730 4060 4070) 61.1592 Tj
+17.4609 -66.4535 Td
+(2265 2312 2553 2871) 83.0018 Tj
+-6520.6 TJm
+(bget 3565) 39.3166 Tj
+17.4609 -75.9469 Td
+(3406 3465 3569 3629) 83.0018 Tj
+-8527.18 TJm
+(3565 3596 3606) 61.1592 Tj
+17.4609 -85.4403 Td
+(3807 3840 3860 3889) 83.0018 Tj
+-6520.6 TJm
+(binit 3538) 43.6851 Tj
+17.4609 -94.9336 Td
+(3904 3914 4423 4440) 83.0018 Tj
+-8527.18 TJm
+(0210 1235 3538) 61.1592 Tj
+17.4609 -104.427 Td
+(4456 5217 5255 5278) 83.0018 Tj
+-6520.6 TJm
+(bmap 4010) 39.3166 Tj
+17.4609 -113.92 Td
+(6335 6390 6416 6458) 83.0018 Tj
+-8527.18 TJm
+(4010 4047 4119 4169) 83.0018 Tj
+0 -123.413 Td
+(allocproc 1628) 61.1592 Tj
+-13042 TJm
+(4222) 17.4741 Tj
+17.4609 -132.907 Td
+(1628 1710) 39.3166 Tj
+-11537.3 TJm
+(bootmain 1117) 56.7907 Tj
+0 -142.4 Td
+(alltraps 2456) 56.7907 Tj
+-13543.7 TJm
+(0975 1117) 39.3166 Tj
+17.4609 -151.893 Td
+(2410 2418 2432 2437) 83.0018 Tj
+-6520.6 TJm
+(bootothers 1276) 65.5277 Tj
+17.4609 -161.387 Td
+(2455 2456) 39.3166 Tj
+-13543.8 TJm
+(1207 1246 1276) 61.1592 Tj
+0 -170.88 Td
+(ALT 6010) 34.9481 Tj
+-14045.4 TJm
+(BPB 3193) 34.9481 Tj
+17.4609 -180.373 Td
+(6010 6038 6040) 61.1592 Tj
+-11035.5 TJm
+(3193 3196 3712 3714) 83.0018 Tj
+0 -189.867 Td
+(argfd 4564) 43.6851 Tj
+-15048.7 TJm
+(3740) 17.4741 Tj
+17.4609 -199.36 Td
+(4564 4607 4619 4630) 83.0018 Tj
+-6520.6 TJm
+(bread 3602) 43.6851 Tj
+17.4609 -208.854 Td
+(4644 4656) 39.3166 Tj
+-13543.8 TJm
+(0211 3602 3683 3694) 83.0018 Tj
+0 -218.347 Td
+(argint 2694) 48.0537 Tj
+-14547 TJm
+(3713 3739 3867 3961) 83.0018 Tj
+17.4609 -227.84 Td
+(0330 2694 2708 2724) 83.0018 Tj
+-8527.18 TJm
+(3982 4032 4066 4119) 83.0018 Tj
+17.4609 -237.334 Td
+(2835 2856 2869 4569) 83.0018 Tj
+-8527.18 TJm
+(4169 4222) 39.3166 Tj
+17.4609 -246.827 Td
+(4607 4619 4858 4909) 83.0018 Tj
+-6520.6 TJm
+(brelse 3624) 48.0537 Tj
+17.4609 -256.32 Td
+(4910 4957) 39.3166 Tj
+-13543.8 TJm
+(0212 3624 3627 3685) 83.0018 Tj
+0 -265.813 Td
+(argptr 2704) 48.0537 Tj
+-14547 TJm
+(3697 3719 3723 3746) 83.0018 Tj
+17.4609 -275.307 Td
+(0331 2704 4607 4619) 83.0018 Tj
+-8527.18 TJm
+(3875 3967 3970 3991) 83.0018 Tj
+17.4609 -284.8 Td
+(4656 4982) 39.3166 Tj
+-13543.8 TJm
+(4037 4043 4072 4122) 83.0018 Tj
+0 -294.293 Td
+(argstr 2721) 48.0537 Tj
+-14547 TJm
+(4173 4233 4237) 61.1592 Tj
+17.4609 -303.787 Td
+(0332 2721 4668 4758) 83.0018 Tj
+-6520.6 TJm
+(BSIZE 3157) 43.6851 Tj
+17.4609 -313.28 Td
+(4858 4908 4923 4935) 83.0018 Tj
+-8527.18 TJm
+(3157 3169 3187 3193) 83.0018 Tj
+17.4609 -322.773 Td
+(4957) 17.4741 Tj
+-16052.2 TJm
+(3695 4119 4120 4121) 83.0018 Tj
+0 -332.267 Td
+(BACK 6761) 39.3166 Tj
+-15550.3 TJm
+(4165 4166 4169 4170) 83.0018 Tj
+17.4609 -341.76 Td
+(6761 6874 7020 7289) 83.0018 Tj
+-8527.18 TJm
+(4171 4221 4222 4224) 83.0018 Tj
+0 -351.254 Td
+(backcmd 6796 7014) 74.2647 Tj
+-9530.43 TJm
+(buf 2900) 34.9481 Tj
+17.4609 -360.747 Td
+(6796 6809 6875 7014) 83.0018 Tj
+-8527.18 TJm
+(0200 0211 0212 0213) 83.0018 Tj
+17.4609 -370.24 Td
+(7016 7142 7255 7290) 83.0018 Tj
+-8527.18 TJm
+(0253 2900 2904 2905) 83.0018 Tj
+0 -379.734 Td
+(BACKSPACE 6216) 61.1592 Tj
+-13042 TJm
+(2906 3310 3325 3375) 83.0018 Tj
+17.4609 -389.227 Td
+(6216 6234 6263 6426) 83.0018 Tj
+-8527.18 TJm
+(3404 3454 3456 3459) 83.0018 Tj
+17.4609 -398.72 Td
+(6432) 17.4741 Tj
+-16052.2 TJm
+(3527 3529 3535 3540) 83.0018 Tj
+0 -408.213 Td
+(balloc 3704) 48.0537 Tj
+-14547 TJm
+(3553 3564 3567 3577) 83.0018 Tj
+17.4609 -417.707 Td
+(3704 3725 4019 4030) 83.0018 Tj
+-8527.18 TJm
+(3601 3604 3614 3624) 83.0018 Tj
+17.4609 -427.2 Td
+(4040) 17.4741 Tj
+-16052.2 TJm
+(3639 3669 3681 3692) 83.0018 Tj
+0 -436.693 Td
+(BBLOCK 3196) 48.0537 Tj
+-14547 TJm
+(3707 3732 3854 3955) 83.0018 Tj
+17.4609 -446.187 Td
+(3196 3713 3739) 61.1592 Tj
+-11035.5 TJm
+(3979 4013 4055 4105) 83.0018 Tj
+0 -455.68 Td
+(B_BUSY 2909) 48.0537 Tj
+-14547 TJm
+(4155 4215 6304 6316) 83.0018 Tj
+17.4609 -465.173 Td
+(2909 3458 3574 3576) 83.0018 Tj
+-8527.18 TJm
+(6319 6322 6385 6392) 83.0018 Tj
+17.4609 -474.667 Td
+(3580 3588 3589 3616) 83.0018 Tj
+-8527.18 TJm
+(6403 6424 6437 6468) 83.0018 Tj
+17.4609 -484.16 Td
+(3626 3638) 39.3166 Tj
+-13543.8 TJm
+(6884 6887 6888 6889) 83.0018 Tj
+0 -493.654 Td
+(B_DIRTY 2911) 52.4222 Tj
+-14045.3 TJm
+(6903 6915 6917) 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  cross-references  Page 2) 25.886 Tj
-2.40799 -3.92728 Td
-(3952 3954 3955 3956) 11.438 Tj
-24.0799 -3.92728 Td
-(1850 1854 1962 1972) 11.438 Tj
-2.40799 -5.23637 Td
-(3957 3972 3977 3987) 11.438 Tj
-24.0799 -5.23637 Td
-(2030 2061 2227 2229) 11.438 Tj
-2.40799 -6.54546 Td
-(4039 4040 4041 4042) 11.438 Tj
-24.0799 -6.54546 Td
-(2234 2251 2255 2259) 11.438 Tj
--1e-05 -7.85455 Td
-(buf_table_lock 3936) 11.438 Tj
-24.0799 -7.85455 Td
-(2263 2270 2287 2305) 11.438 Tj
-2.40799 -9.16364 Td
-(3936 3948 3969 3979) 11.438 Tj
-24.0799 -9.16364 Td
-(2390 2428 2883 2902) 11.438 Tj
-2.40799 -10.4727 Td
-(3983 3992 4035 4047) 11.438 Tj
-24.0799 -10.4727 Td
-(2907 2932 2936 2938) 11.438 Tj
--1e-05 -11.7818 Td
-(B_VALID 3309) 7.224 Tj
-24.0799 -11.7818 Td
-(2939 2944 2948 3054) 11.438 Tj
-2.40799 -13.0909 Td
-(3309 3904 3910 3912) 11.438 Tj
-24.0799 -13.0909 Td
-(3066 3086 3123 3222) 11.438 Tj
-2.40799 -14.4 Td
-(3973 3982 4007 4011) 11.438 Tj
-24.0799 -14.4 Td
-(3253 3261 4614 5124) 11.438 Tj
-2.40799 -15.7091 Td
-(4025) 2.408 Tj
-24.0799 -15.7091 Td
-(5156 5172 5232 5403) 11.438 Tj
--1e-05 -17.0182 Td
-(bwrite 4019) 6.622 Tj
-24.0799 -17.0182 Td
-(5477 6151 6562) 8.428 Tj
-2.40799 -18.3273 Td
-(0320 3916 4019 4022) 11.438 Tj
-21.6719 -18.3273 Td
-(cpuid 0451) 6.02 Tj
-2.40799 -19.6364 Td
-(4132 4167 4174 4266) 11.438 Tj
-24.0799 -19.6364 Td
-(0451 0454 1315 1819) 11.438 Tj
-2.40799 -20.9455 Td
-(4302 4537 4574) 8.428 Tj
-24.0799 -20.9455 Td
-(1841) 2.408 Tj
--1e-05 -22.2545 Td
-(cli 0479) 4.816 Tj
-21.6719 -22.2545 Td
-(devsw 3350) 6.02 Tj
-2.40799 -23.5636 Td
-(0479 0481 1022 1067) 11.438 Tj
-24.0799 -23.5636 Td
-(3350 3355 4489 4491) 11.438 Tj
-2.40799 -24.8727 Td
-(1122 1811 6436 6560) 11.438 Tj
-24.0799 -24.8727 Td
-(4555 4557 4914 6839) 11.438 Tj
--1e-05 -26.1818 Td
-(cmpxchg 0468) 7.224 Tj
-24.0799 -26.1818 Td
-(6840) 2.408 Tj
-2.40799 -27.4909 Td
-(0468 1814) 5.418 Tj
-21.6719 -27.4909 Td
-(dinode 3573) 6.622 Tj
--1e-05 -28.8 Td
-(CONSOLE 3357) 7.224 Tj
-24.0799 -28.8 Td
-(3573 3587 4187 4224) 11.438 Tj
-2.40799 -30.1091 Td
-(3357 6839 6840) 8.428 Tj
-24.0799 -30.1091 Td
-(4256 4259 4276 4289) 11.438 Tj
--1e-05 -31.4182 Td
-(console_init 6834) 10.234 Tj
-21.6719 -31.4182 Td
-(dirent 3603) 6.622 Tj
-2.40799 -32.7273 Td
-(0206 1273 6834) 8.428 Tj
-24.0799 -32.7273 Td
-(3600 3603 4607 4618) 11.438 Tj
--1e-05 -34.0364 Td
-(console_lock 6409) 10.234 Tj
-24.0799 -34.0364 Td
-(4665 4666 4719 4805) 11.438 Tj
-2.40799 -35.3454 Td
-(6409 6509 6551 6578) 11.438 Tj
-24.0799 -35.3454 Td
-(5356) 2.408 Tj
-2.40799 -36.6545 Td
-(6584 6836) 5.418 Tj
-21.6719 -36.6545 Td
-(DIRSIZ 3601) 6.622 Tj
--1e-05 -37.9636 Td
-(console_read 6808) 10.234 Tj
-24.0799 -37.9636 Td
-(3601 3605 4660 4661) 11.438 Tj
-2.40799 -39.2727 Td
-(6808 6840) 5.418 Tj
-24.0799 -39.2727 Td
-(4671 4730 4732 5330) 11.438 Tj
--1e-05 -40.5818 Td
-(console_write 6574) 10.836 Tj
-24.0799 -40.5818 Td
-(5375) 2.408 Tj
-2.40799 -41.8909 Td
-(6574 6839) 5.418 Tj
-21.6719 -41.8909 Td
-(disk_1_present 3737) 11.438 Tj
--1e-05 -43.2 Td
-(cons_putc 6429) 8.428 Tj
-24.0799 -43.2 Td
-(3737 3762 3830) 8.428 Tj
-2.40799 -44.5091 Td
-(6429 6494 6518 6531) 11.438 Tj
-21.6719 -44.5091 Td
-(disk_queue 3738) 9.03 Tj
-2.40799 -45.8182 Td
-(6534 6539 6542 6543) 11.438 Tj
-24.0799 -45.8182 Td
-(3738 3837 3861) 8.428 Tj
-2.40799 -47.1272 Td
-(6581 6820) 5.418 Tj
-21.6719 -47.1272 Td
-(elfhdr 0805) 6.622 Tj
--1e-05 -48.4363 Td
-(copyproc 2105) 7.826 Tj
-24.0799 -48.4363 Td
-(0805 1367 1370 5481) 11.438 Tj
-2.40799 -49.7454 Td
-(0215 1339 1345 1354) 11.438 Tj
-21.6719 -49.7454 Td
-(ELF_MAGIC 0802) 8.428 Tj
-2.40799 -51.0545 Td
-(2105 3222) 5.418 Tj
-24.0799 -51.0545 Td
-(0802 0806 1371 5497) 11.438 Tj
--1e-05 -52.3636 Td
-(cprintf 6502) 7.224 Tj
-21.6719 -52.3636 Td
-(ELF_PROG_FLAG_EXEC 0839) 13.846 Tj
-2.40799 -53.6727 Td
-(0207 1244 1304 1573) 11.438 Tj
-24.0799 -53.6727 Td
-(0839) 2.408 Tj
-2.40799 -54.9818 Td
-(1575 2479 2588 2686) 11.438 Tj
-21.6719 -54.9818 Td
-(ELF_PROG_FLAG_READ 0841) 13.846 Tj
-2.40799 -56.2909 Td
-(2932 2938 2944 3186) 11.438 Tj
-24.0799 -56.2909 Td
-(0841) 2.408 Tj
-2.40799 -57.6 Td
-(4568 6247 6502 6562) 11.438 Tj
-21.6719 -57.6 Td
-(ELF_PROG_FLAG_WRITE 0840) 14.448 Tj
-2.40799 -58.9091 Td
-(6563 6564 6567 6786) 11.438 Tj
-24.0799 -58.9091 Td
-(0840) 2.408 Tj
--1e-05 -60.2181 Td
-(cpu 1962 6151) 7.826 Tj
-21.6719 -60.2181 Td
-(ELF_PROG_LOAD 0836) 10.836 Tj
-2.40799 -61.5272 Td
-(0272 0277 1244 1289) 11.438 Tj
-24.0799 -61.5272 Td
-(0836 1379 5505 5572) 11.438 Tj
-2.40799 -62.8363 Td
-(1304 1306 1307 1308) 11.438 Tj
-21.6719 -62.8363 Td
-(fdalloc 5153) 7.224 Tj
-2.40799 -64.1454 Td
-(1316 1319 1431 1436) 11.438 Tj
-24.0799 -64.1454 Td
-(5153 5179 5290 5458) 11.438 Tj
-2.40799 -65.4545 Td
-(1616 1617 1629 1706) 11.438 Tj
-21.6719 -65.4545 Td
-(fetchint 3025) 7.826 Tj
-2.40799 -66.7636 Td
-(1767 1810 1812 1823) 11.438 Tj
-24.0799 -66.7636 Td
-(0244 3025 3056 5523) 11.438 Tj
-2.40799 -68.0727 Td
-(1824 1825 1837 1844) 11.438 Tj
-24.0799 -68.0727 Td
-(5553) 2.408 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  cross-references  Page 2) 187.846 Tj
+0 -28.4801 Td
+(bufhead 3535) 52.4222 Tj
+-14045.3 TJm
+(7158 7160 7163 7164) 83.0018 Tj
+17.4609 -37.9735 Td
+(3535 3551 3552 3554) 83.0018 Tj
+-8527.18 TJm
+(7175 7178 7181 7185) 83.0018 Tj
+17.4609 -47.4668 Td
+(3555 3556 3557 3573) 83.0018 Tj
+-8527.18 TJm
+(7200 7203 7208 7212) 83.0018 Tj
+17.4609 -56.9602 Td
+(3587 3633 3634 3635) 83.0018 Tj
+-8527.18 TJm
+(7213 7216 7221 7222) 83.0018 Tj
+17.4609 -66.4535 Td
+(3636) 17.4741 Tj
+-16052.2 TJm
+(7228 7237 7238 7244) 83.0018 Tj
+0 -75.9469 Td
+(buf_table_lock 3530) 83.0018 Tj
+-10533.7 TJm
+(7245 7251 7252 7261) 83.0018 Tj
+17.4609 -85.4403 Td
+(3530 3542 3569 3577) 83.0018 Tj
+-8527.18 TJm
+(7264 7266 7272 7273) 83.0018 Tj
+17.4609 -94.9336 Td
+(3581 3592 3629 3641) 83.0018 Tj
+-8527.18 TJm
+(7278 7284 7290 7291) 83.0018 Tj
+0 -104.427 Td
+(B_VALID 2910) 52.4222 Tj
+-14045.3 TJm
+(7294) 17.4741 Tj
+17.4609 -113.92 Td
+(2910 3418 3460 3479) 83.0018 Tj
+-6520.6 TJm
+(cmpxchg 0469) 52.4222 Tj
+17.4609 -123.414 Td
+(3574 3607) 39.3166 Tj
+-13543.9 TJm
+(0469 1434) 39.3166 Tj
+0 -132.907 Td
+(bwrite 3614) 48.0537 Tj
+-12540.4 TJm
+(CONSOLE 2957) 52.4222 Tj
+17.4609 -142.4 Td
+(0213 3614 3617 3696) 83.0018 Tj
+-8527.18 TJm
+(2957 6506 6507) 61.1592 Tj
+17.4609 -151.894 Td
+(3718 3745 3966 3990) 83.0018 Tj
+-6520.6 TJm
+(console_init 6501) 74.2647 Tj
+17.4609 -161.387 Td
+(4041 4172) 39.3166 Tj
+-13543.9 TJm
+(0216 1244 6501) 61.1592 Tj
+0 -170.88 Td
+(bzero 3690) 43.6851 Tj
+-13042.1 TJm
+(console_intr 6412) 74.2647 Tj
+17.4609 -180.374 Td
+(3690 3736) 39.3166 Tj
+-13543.9 TJm
+(0218 6198 6412) 61.1592 Tj
+0 -189.867 Td
+(C 6031 6409) 48.0537 Tj
+-12540.4 TJm
+(console_lock 6220) 74.2647 Tj
+17.4609 -199.361 Td
+(6031 6079 6104 6105) 83.0018 Tj
+-8527.18 TJm
+(6220 6335 6381 6390) 83.0018 Tj
+17.4609 -208.854 Td
+(6106 6107 6108 6110) 83.0018 Tj
+-8527.18 TJm
+(6393 6503) 39.3166 Tj
+17.4609 -218.347 Td
+(6409 6419 6422 6429) 83.0018 Tj
+-6520.6 TJm
+(console_read 6451) 74.2647 Tj
+17.4609 -227.841 Td
+(6439 6469) 39.3166 Tj
+-13543.9 TJm
+(6451 6507) 39.3166 Tj
+0 -237.334 Td
+(CAPSLOCK 6012) 56.7907 Tj
+-11537.1 TJm
+(console_write 6385) 78.6333 Tj
+17.4609 -246.827 Td
+(6012 6045 6186) 61.1592 Tj
+-11035.5 TJm
+(6385 6506) 39.3166 Tj
+0 -256.321 Td
+(cga_putc 6251) 56.7907 Tj
+-11537.1 TJm
+(cons_putc 6283) 61.1592 Tj
+17.4609 -265.814 Td
+(6251 6292) 39.3166 Tj
+-13543.9 TJm
+(6283 6322 6346 6364) 83.0018 Tj
+0 -275.307 Td
+(cli 0482) 34.9481 Tj
+-16052 TJm
+(6367 6371 6372 6392) 83.0018 Tj
+17.4609 -284.8 Td
+(0482 0484 0914 1027) 83.0018 Tj
+-8527.18 TJm
+(6426 6432 6438) 61.1592 Tj
+17.4609 -294.294 Td
+(1431 6286 6520) 61.1592 Tj
+-9028.94 TJm
+(context 1515) 52.4222 Tj
+0 -303.787 Td
+(cmd 6765) 34.9481 Tj
+-16052 TJm
+(0201 0311 1515 1540) 83.0018 Tj
+17.4609 -313.281 Td
+(6765 6777 6786 6787) 83.0018 Tj
+-8527.18 TJm
+(1568 1740 1741 1742) 83.0018 Tj
+17.4609 -322.774 Td
+(6792 6793 6798 6802) 83.0018 Tj
+-8527.18 TJm
+(1828 1862 2129) 61.1592 Tj
+17.4609 -332.267 Td
+(6806 6815 6818 6823) 83.0018 Tj
+-6520.6 TJm
+(copyproc 1704) 56.7907 Tj
+17.4609 -341.761 Td
+(6831 6837 6841 6851) 83.0018 Tj
+-8527.18 TJm
+(0296 1704 1757 2811) 83.0018 Tj
+17.4609 -351.254 Td
+(6875 6877 6952 6955) 83.0018 Tj
+-6520.6 TJm
+(cp 1560) 30.5796 Tj
+17.4609 -360.747 Td
+(6957 6958 6959 6960) 83.0018 Tj
+-8527.18 TJm
+(1560 1657 1660 1661) 83.0018 Tj
+17.4609 -370.241 Td
+(6963 6964 6966 6968) 83.0018 Tj
+-8527.18 TJm
+(1662 1663 1664 1665) 83.0018 Tj
+17.4609 -379.734 Td
+(6969 6970 6971 6972) 83.0018 Tj
+-8527.18 TJm
+(1666 1825 1832 1855) 83.0018 Tj
+17.4609 -389.227 Td
+(6973 6974 6975 6976) 83.0018 Tj
+-8527.18 TJm
+(1862 1870 1884 1905) 83.0018 Tj
+17.4609 -398.721 Td
+(6979 6980 6982 6984) 83.0018 Tj
+-8527.18 TJm
+(1923 1924 1928 2009) 83.0018 Tj
+17.4609 -408.214 Td
+(6985 6986 6987 6988) 83.0018 Tj
+-8527.18 TJm
+(2014 2015 2016 2020) 83.0018 Tj
+17.4609 -417.707 Td
+(6989 7000 7001 7003) 83.0018 Tj
+-8527.18 TJm
+(2021 2026 2030 2038) 83.0018 Tj
+17.4609 -427.201 Td
+(7005 7006 7007 7008) 83.0018 Tj
+-8527.18 TJm
+(2039 2066 2084 2090) 83.0018 Tj
+17.4609 -436.694 Td
+(7009 7010 7013 7014) 83.0018 Tj
+-8527.18 TJm
+(2537 2539 2541 2574) 83.0018 Tj
+17.4609 -446.188 Td
+(7016 7018 7019 7020) 83.0018 Tj
+-8527.18 TJm
+(2582 2583 2590 2595) 83.0018 Tj
+17.4609 -455.681 Td
+(7021 7022 7112 7113) 83.0018 Tj
+-8527.18 TJm
+(2696 2710 2712 2726) 83.0018 Tj
+17.4609 -465.174 Td
+(7114 7115 7117 7121) 83.0018 Tj
+-8527.18 TJm
+(2778 2780 2783 2784) 83.0018 Tj
+17.4609 -474.668 Td
+(7124 7130 7131 7134) 83.0018 Tj
+-8527.18 TJm
+(2811 2843 2860 2874) 83.0018 Tj
+17.4609 -484.161 Td
+(7137 7139 7142 7146) 83.0018 Tj
+-8527.18 TJm
+(4361 4571 4588 4589) 83.0018 Tj
+17.4609 -493.654 Td
+(7148 7150 7153 7155) 83.0018 Tj
+-8527.18 TJm
+(4605 4607 4609 4617) 83.0018 Tj
 Q
 Q
 Q
@@ -1564,6 +1676,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -1571,437 +1686,449 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  cross-references  Page 3) 25.886 Tj
-0 -3.92728 Td
-(fetchstr 3037) 7.826 Tj
-24.0799 -3.92728 Td
-(0611) 2.408 Tj
-2.408 -5.23637 Td
-(0245 3037 3086 5527) 11.438 Tj
-21.6719 -5.23637 Td
-(FL_ID 0624) 6.02 Tj
-2.408 -6.54546 Td
-(5554) 2.408 Tj
-24.0799 -6.54546 Td
-(0624) 2.408 Tj
-0 -7.85455 Td
-(file 3500) 5.418 Tj
-21.6719 -7.85455 Td
-(FL_IF 0610) 6.02 Tj
-2.408 -9.16364 Td
-(0292 0293 0300 0303) 11.438 Tj
-24.0799 -9.16364 Td
-(0610 0752 1351) 8.428 Tj
-2.408 -10.4727 Td
-(0304 0305 0306 0307) 11.438 Tj
-21.6719 -10.4727 Td
-(FL_IOPL_0 0614) 8.428 Tj
-2.408 -11.7818 Td
-(0308 0600 0800 1938) 11.438 Tj
-24.0799 -11.7818 Td
-(0614) 2.408 Tj
-2.408 -13.0909 Td
-(2004 2150 3014 3214) 11.438 Tj
-21.6719 -13.0909 Td
-(FL_IOPL_1 0615) 8.428 Tj
-2.408 -14.4 Td
-(3453 3454 3455 3500) 11.438 Tj
-24.0799 -14.4 Td
-(0615) 2.408 Tj
-2.408 -15.7091 Td
-(3550 3561 3577 3578) 11.438 Tj
-21.6719 -15.7091 Td
-(FL_IOPL_2 0616) 8.428 Tj
-2.408 -17.0182 Td
-(3600 3608 3650 4271) 11.438 Tj
-24.0799 -17.0182 Td
-(0616) 2.408 Tj
-2.408 -18.3273 Td
-(4308 4604 4907 4916) 11.438 Tj
-21.6719 -18.3273 Td
-(FL_IOPL_3 0617) 8.428 Tj
-2.408 -19.6364 Td
-(4924 4925 4932 4933) 11.438 Tj
-24.0799 -19.6364 Td
-(0617) 2.408 Tj
-2.408 -20.9455 Td
-(4934 4936 4950 4952) 11.438 Tj
-21.6719 -20.9455 Td
-(FL_IOPL_MASK 0613) 10.234 Tj
-2.408 -22.2545 Td
-(4972 4974 5000 5002) 11.438 Tj
-24.0799 -22.2545 Td
-(0613) 2.408 Tj
-2.408 -23.5636 Td
-(5010 5028 5030 5050) 11.438 Tj
-21.6719 -23.5636 Td
-(FL_NT 0618) 6.02 Tj
-2.408 -24.8727 Td
-(5052 5114 5117 5118) 11.438 Tj
-24.0799 -24.8727 Td
-(0618) 2.408 Tj
-2.408 -26.1818 Td
-(5120 5123 5150 5151) 11.438 Tj
-21.6719 -26.1818 Td
-(FL_OF 0612) 6.02 Tj
-2.408 -27.4909 Td
-(5153 5170 5203 5215) 11.438 Tj
-24.0799 -27.4909 Td
-(0612) 2.408 Tj
-2.408 -28.8 Td
-(5228 5257 5442 5453) 11.438 Tj
-21.6719 -28.8 Td
-(FL_PF 0605) 6.02 Tj
-2.408 -30.1091 Td
-(5606 5621 6415) 8.428 Tj
-24.0799 -30.1091 Td
-(0605) 2.408 Tj
-7.10543e-15 -31.4182 Td
-(filealloc 4926) 8.428 Tj
-21.6719 -31.4182 Td
-(FL_RF 0619) 6.02 Tj
-2.408 -32.7273 Td
-(0303 4926 5286 5626) 11.438 Tj
-24.0799 -32.7273 Td
-(0619) 2.408 Tj
-2.408 -34.0364 Td
-(5628) 2.408 Tj
-21.6719 -34.0364 Td
-(FL_SF 0608) 6.02 Tj
-7.10543e-15 -35.3454 Td
-(fileclose 5002) 8.428 Tj
-24.0799 -35.3454 Td
-(0608) 2.408 Tj
-2.408 -36.6545 Td
-(0304 2396 5002 5007) 11.438 Tj
-21.6719 -36.6545 Td
-(FL_TF 0609) 6.02 Tj
-2.408 -37.9636 Td
-(5021 5182 5183 5233) 11.438 Tj
-24.0799 -37.9636 Td
-(0609) 2.408 Tj
-2.408 -39.2727 Td
-(5292 5651 5655) 8.428 Tj
-21.6719 -39.2727 Td
-(FL_VIF 0622) 6.622 Tj
-0 -40.5818 Td
-(fileincref 5052) 9.03 Tj
-24.0799 -40.5818 Td
-(0622) 2.408 Tj
-2.408 -41.8909 Td
-(0308 2154 5052 5056) 11.438 Tj
-21.6719 -41.8909 Td
-(FL_VIP 0623) 6.622 Tj
-2.408 -43.2 Td
-(5460) 2.408 Tj
-24.0799 -43.2 Td
-(0623) 2.408 Tj
-0 -44.5091 Td
-(fileinit 4919) 7.826 Tj
-21.6719 -44.5091 Td
-(FL_VM 0620) 6.02 Tj
-2.408 -45.8182 Td
-(0302 1257 4919) 8.428 Tj
-24.0799 -45.8182 Td
-(0620) 2.408 Tj
-7.10543e-15 -47.1272 Td
-(fileread 4974) 7.826 Tj
-21.6719 -47.1272 Td
-(FL_ZF 0607) 6.02 Tj
-2.408 -48.4363 Td
-(0305 4974 4988 5221) 11.438 Tj
-24.0799 -48.4363 Td
-(0607) 2.408 Tj
-1.42109e-14 -49.7454 Td
-(filestat 5030) 7.826 Tj
-21.6719 -49.7454 Td
-(forkret 2281) 7.224 Tj
-2.408 -51.0545 Td
-(0307 5030 5447) 8.428 Tj
-24.0799 -51.0545 Td
-(2014 2145 2147 2281) 11.438 Tj
-2.13163e-14 -52.3636 Td
-(file_table_lock 4913) 12.04 Tj
-21.6719 -52.3636 Td
-(gatedesc 0728) 7.826 Tj
-2.408 -53.6727 Td
-(4913 4921 4930 4935) 11.438 Tj
-24.0799 -53.6727 Td
-(0414 0417 0728 2860) 11.438 Tj
-2.408 -54.9818 Td
-(4939 5004 5014 5024) 11.438 Tj
-21.6719 -54.9818 Td
-(getcallerpcs 1772) 10.234 Tj
-2.408 -56.2909 Td
-(5054 5058) 5.418 Tj
-24.0799 -56.2909 Td
-(0285 1772 1826 6565) 11.438 Tj
-2.84217e-14 -57.6 Td
-(filewrite 4952) 8.428 Tj
-21.6719 -57.6 Td
-(growproc 2059) 7.826 Tj
-2.408 -58.9091 Td
-(0306 4952 4967 5209) 11.438 Tj
-24.0799 -58.9091 Td
-(0217 2059 3265) 8.428 Tj
-3.55271e-14 -60.2181 Td
-(FL_AC 0621) 6.02 Tj
-21.6719 -60.2181 Td
-(holding 1852) 7.224 Tj
-2.408 -61.5272 Td
-(0621) 2.408 Tj
-24.0799 -61.5272 Td
-(0284 1706 1803 1807) 11.438 Tj
-4.26326e-14 -62.8363 Td
-(FL_AF 0606) 6.02 Tj
-24.0799 -62.8363 Td
-(1824 1833 1850 1852) 11.438 Tj
-2.408 -64.1454 Td
-(0606) 2.408 Tj
-24.0799 -64.1454 Td
-(2257 2283 3903) 8.428 Tj
-4.26326e-14 -65.4545 Td
-(FL_CF 0604) 6.02 Tj
-21.6719 -65.4545 Td
-(ialloc 4273) 6.622 Tj
-2.408 -66.7636 Td
-(0604) 2.408 Tj
-24.0799 -66.7636 Td
-(4273 4297 4776) 8.428 Tj
-4.9738e-14 -68.0727 Td
-(FL_DF 0611) 6.02 Tj
-21.6719 -68.0727 Td
-(IDE_BSY 3711) 7.224 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  cross-references  Page 3) 187.846 Tj
+17.4609 -28.4801 Td
+(4619 4621 4646 4943) 83.0018 Tj
+-6520.6 TJm
+(DIRSIZ 3201) 48.0537 Tj
+17.4609 -37.9735 Td
+(4944 4963 4969 4989) 83.0018 Tj
+-8527.18 TJm
+(3201 3205 4205 4272) 83.0018 Tj
+17.4609 -47.4668 Td
+(5097 5101 5102 5103) 83.0018 Tj
+-8527.18 TJm
+(4327 4328 4391 4665) 83.0018 Tj
+17.4609 -56.9602 Td
+(5104 5105 5106 5258) 83.0018 Tj
+-8527.18 TJm
+(4755 4805) 39.3166 Tj
+17.4609 -66.4535 Td
+(5280 6461) 39.3166 Tj
+-11537.3 TJm
+(disk_1_present 3327) 83.0018 Tj
+0 -75.9469 Td
+(cprintf 6327) 52.4222 Tj
+-14045.3 TJm
+(3327 3364 3462) 61.1592 Tj
+17.4609 -85.4403 Td
+(0217 1232 1261 2127) 83.0018 Tj
+-6520.6 TJm
+(DPL_USER 0664) 56.7907 Tj
+17.4609 -94.9336 Td
+(2131 2133 2235 2328) 83.0018 Tj
+-8527.18 TJm
+(0664 1689 1690 1762) 83.0018 Tj
+17.4609 -104.427 Td
+(2569 2576 2581 2782) 83.0018 Tj
+-8527.18 TJm
+(1763 2522 2590) 61.1592 Tj
+17.4609 -113.92 Td
+(3408 5637 5862 6327) 83.0018 Tj
+-6520.6 TJm
+(E0ESC 6016) 43.6851 Tj
+17.4609 -123.414 Td
+(6522 6523 6524 6527) 83.0018 Tj
+-8527.18 TJm
+(6016 6170 6174 6175) 83.0018 Tj
+0 -132.907 Td
+(cpu 1566 5751) 56.7907 Tj
+-13543.7 TJm
+(6177 6180) 39.3166 Tj
+17.4609 -142.4 Td
+(0256 0269 1232 1251) 83.0018 Tj
+-6520.6 TJm
+(elfhdr 0805) 48.0537 Tj
+17.4609 -151.894 Td
+(1261 1263 1266 1269) 83.0018 Tj
+-8527.18 TJm
+(0805 1119 1123 5014) 83.0018 Tj
+17.4609 -161.387 Td
+(1280 1287 1306 1417) 83.0018 Tj
+-6520.6 TJm
+(ELF_MAGIC 0802) 61.1592 Tj
+17.4609 -170.88 Td
+(1430 1432 1445 1458) 83.0018 Tj
+-8527.18 TJm
+(0802 1129 5029) 61.1592 Tj
+17.4609 -180.374 Td
+(1465 1491 1560 1566) 83.0018 Tj
+-6520.6 TJm
+(ELF_PROG_LOAD 0836) 78.6333 Tj
+17.4609 -189.867 Td
+(1576 1674 1676 1828) 83.0018 Tj
+-8527.18 TJm
+(0836 5034 5061) 61.1592 Tj
+17.4609 -199.361 Td
+(1859 1862 2548 2552) 83.0018 Tj
+-6520.6 TJm
+(EOI 5660) 34.9481 Tj
+17.4609 -208.854 Td
+(2569 2576 2577 2581) 83.0018 Tj
+-8527.18 TJm
+(5660 5737 5763) 61.1592 Tj
+17.4609 -218.347 Td
+(2582 2585 5512 5513) 83.0018 Tj
+-6520.6 TJm
+(ERROR 5678) 43.6851 Tj
+17.4609 -227.841 Td
+(5751 6522) 39.3166 Tj
+-13543.8 TJm
+(5678 5730) 39.3166 Tj
+0 -237.334 Td
+(cpuid 0451) 43.6851 Tj
+-13042.1 TJm
+(ESR 5663) 34.9481 Tj
+17.4609 -246.827 Td
+(0451 0455 1265 1439) 83.0018 Tj
+-8527.18 TJm
+(5663 5733 5734) 61.1592 Tj
+17.4609 -256.321 Td
+(1462) 17.4741 Tj
+-14045.6 TJm
+(EXEC 6757) 39.3166 Tj
+0 -265.814 Td
+(create 4801) 48.0537 Tj
+-14547 TJm
+(6757 6822 6959 7265) 83.0018 Tj
+17.4609 -275.307 Td
+(4801 4843 4862 4911) 83.0018 Tj
+-6520.6 TJm
+(execcmd 6769 6953) 74.2647 Tj
+17.4609 -284.8 Td
+(4923) 17.4741 Tj
+-16052.2 TJm
+(6769 6810 6823 6953) 83.0018 Tj
+0 -294.294 Td
+(CRTPORT 6214) 52.4222 Tj
+-14045.3 TJm
+(6955 7221 7227 7228) 83.0018 Tj
+17.4609 -303.787 Td
+(6214 6256 6257 6258) 83.0018 Tj
+-8527.18 TJm
+(7256 7266) 39.3166 Tj
+17.4609 -313.281 Td
+(6259 6275 6276 6277) 83.0018 Tj
+-6520.6 TJm
+(exit 2004) 39.3166 Tj
+17.4609 -322.774 Td
+(6278) 17.4741 Tj
+-16052.2 TJm
+(0297 2004 2041 2538) 83.0018 Tj
+0 -332.267 Td
+(CTL 6009) 34.9481 Tj
+-16052 TJm
+(2542 2591 2820 6615) 83.0018 Tj
+17.4609 -341.761 Td
+(6009 6035 6039 6185) 83.0018 Tj
+-8527.18 TJm
+(6618 6676 6681 6711) 83.0018 Tj
+0 -351.254 Td
+(devsw 2950) 43.6851 Tj
+-15048.7 TJm
+(6816 6825 6835 6880) 83.0018 Tj
+17.4609 -360.747 Td
+(2950 2955 4108 4110) 83.0018 Tj
+-8527.18 TJm
+(6920 6927) 39.3166 Tj
+17.4609 -370.241 Td
+(4158 4160 4407 6506) 83.0018 Tj
+-6520.6 TJm
+(fdalloc 4583) 52.4222 Tj
+17.4609 -379.734 Td
+(6507) 17.4741 Tj
+-16052.2 TJm
+(4583 4632 4874 4987) 83.0018 Tj
+0 -389.227 Td
+(dinode 3173) 48.0537 Tj
+-12540.4 TJm
+(fetchint 2666) 56.7907 Tj
+17.4609 -398.721 Td
+(3173 3187 3855 3868) 83.0018 Tj
+-8527.18 TJm
+(0333 2666 2696 4963) 83.0018 Tj
+17.4609 -408.214 Td
+(3956 3962 3980 3983) 83.0018 Tj
+-6520.6 TJm
+(fetchstr 2678) 56.7907 Tj
+0 -417.707 Td
+(dirent 3203) 48.0537 Tj
+-14547 TJm
+(0334 2678 2726 4969) 83.0018 Tj
+17.4609 -427.201 Td
+(3203 4216 4223 4224) 83.0018 Tj
+-6520.6 TJm
+(file 3100) 39.3166 Tj
+17.4609 -436.694 Td
+(4255 4705 4754) 61.1592 Tj
+-11035.5 TJm
+(0202 0225 0226 0227) 83.0018 Tj
+0 -446.188 Td
+(dirlink 4252) 52.4222 Tj
+-14045.3 TJm
+(0229 0230 0231 0290) 83.0018 Tj
+17.4609 -455.681 Td
+(0234 4252 4267 4275) 83.0018 Tj
+-8527.18 TJm
+(1538 3100 4403 4409) 83.0018 Tj
+17.4609 -465.174 Td
+(4684 4831 4842) 61.1592 Tj
+-11035.5 TJm
+(4418 4425 4426 4427) 83.0018 Tj
+0 -474.668 Td
+(dirlookup 4212) 61.1592 Tj
+-13042 TJm
+(4429 4437 4438 4452) 83.0018 Tj
+17.4609 -484.161 Td
+(0235 4212 4219 4259) 83.0018 Tj
+-8527.18 TJm
+(4454 4478 4502 4522) 83.0018 Tj
+17.4609 -493.654 Td
+(4374 4770 4811) 61.1592 Tj
+-11035.5 TJm
+(4558 4564 4567 4583) 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  cross-references  Page 4) 25.886 Tj
-2.40799 -3.92728 Td
-(3711 3748) 5.418 Tj
-24.0799 -3.92728 Td
-(1585 3748 3778 6421) 11.438 Tj
--1e-05 -5.23637 Td
-(IDE_CMD_READ 3716) 10.234 Tj
-24.0799 -5.23637 Td
-(6445 6447 6750 6753) 11.438 Tj
-2.40799 -6.54546 Td
-(3716 3816) 5.418 Tj
-21.6719 -6.54546 Td
-(INDIRECT 3568) 7.826 Tj
--1e-05 -7.85455 Td
-(IDE_CMD_WRITE 3717) 10.836 Tj
-24.0799 -7.85455 Td
-(3568 4382 4384 4409) 11.438 Tj
-2.40799 -9.16364 Td
-(3717 3818) 5.418 Tj
-24.0799 -9.16364 Td
-(4410 4524 4528 4530) 11.438 Tj
--1e-05 -10.4727 Td
-(idecref 4453) 7.224 Tj
-24.0799 -10.4727 Td
-(4537) 2.408 Tj
-2.40799 -11.7818 Td
-(0330 2400 4453 4867) 11.438 Tj
-21.6719 -11.7818 Td
-(initlock 1763) 7.826 Tj
-2.40799 -13.0909 Td
-(4871 5019 5423) 8.428 Tj
-24.0799 -13.0909 Td
-(0281 1763 2020 2584) 11.438 Tj
--1e-05 -14.4 Td
-(IDE_DF 3713) 6.622 Tj
-24.0799 -14.4 Td
-(3758 3948 4086 4921) 11.438 Tj
-2.40799 -15.7091 Td
-(3713 3750) 5.418 Tj
-24.0799 -15.7091 Td
-(5636 6836 6837) 8.428 Tj
--1e-05 -17.0182 Td
-(IDE_DRDY 3712) 7.826 Tj
-21.6719 -17.0182 Td
-(inode 3652) 6.02 Tj
-2.40799 -18.3273 Td
-(3712 3748) 5.418 Tj
-24.0799 -18.3273 Td
-(0326 0327 0328 0329) 11.438 Tj
--1e-05 -19.6364 Td
-(IDE_ERR 3714) 7.224 Tj
-24.0799 -19.6364 Td
-(0330 0331 0332 0333) 11.438 Tj
-2.40799 -20.9455 Td
-(3714 3750) 5.418 Tj
-24.0799 -20.9455 Td
-(0334 0335 0336 0337) 11.438 Tj
--1e-05 -22.2545 Td
-(ide_init 3756) 7.826 Tj
-24.0799 -22.2545 Td
-(0338 0340 1939 3506) 11.438 Tj
-2.40799 -23.5636 Td
-(0311 1274 3756) 8.428 Tj
-24.0799 -23.5636 Td
-(3572 3577 3589 3652) 11.438 Tj
--1e-05 -24.8727 Td
-(ide_intr 3789) 7.826 Tj
-24.0799 -24.8727 Td
-(3656 3658 4063 4064) 11.438 Tj
-2.40799 -26.1818 Td
-(0312 2922 3789) 8.428 Tj
-24.0799 -26.1818 Td
-(4066 4068 4072 4074) 11.438 Tj
--1e-05 -27.4909 Td
-(ide_lock 3735) 7.826 Tj
-24.0799 -27.4909 Td
-(4076 4078 4178 4179) 11.438 Tj
-2.40799 -28.8 Td
-(3723 3735 3758 3791) 11.438 Tj
-24.0799 -28.8 Td
-(4181 4183 4186 4194) 11.438 Tj
-2.40799 -30.1091 Td
-(3793 3833 3837 3851) 11.438 Tj
-24.0799 -30.1091 Td
-(4199 4200 4250 4253) 11.438 Tj
-2.40799 -31.4182 Td
-(3867) 2.408 Tj
-24.0799 -31.4182 Td
-(4270 4272 4275 4287) 11.438 Tj
--1e-05 -32.7273 Td
-(ide_probe_disk1 3767) 12.04 Tj
-24.0799 -32.7273 Td
-(4290 4308 4310 4316) 11.438 Tj
-2.40799 -34.0364 Td
-(3740 3762 3767) 8.428 Tj
-24.0799 -34.0364 Td
-(4322 4354 4367 4369) 11.438 Tj
--1e-05 -35.3454 Td
-(ide_request 3725) 9.632 Tj
-24.0799 -35.3454 Td
-(4400 4402 4432 4453) 11.438 Tj
-2.40799 -36.6545 Td
-(3725 3733 3804 3828) 11.438 Tj
-24.0799 -36.6545 Td
-(4461 4468 4470 4481) 11.438 Tj
--1e-05 -37.9636 Td
-(ide_rw 3826) 6.622 Tj
-24.0799 -37.9636 Td
-(4483 4508 4510 4550) 11.438 Tj
-2.40799 -39.2727 Td
-(0313 3826 4010 4024) 11.438 Tj
-24.0799 -39.2727 Td
-(4552 4601 4602 4607) 11.438 Tj
--1e-05 -40.5818 Td
-(ide_wait_ready 3744) 11.438 Tj
-24.0799 -40.5818 Td
-(4609 4611 4613 4716) 11.438 Tj
-2.40799 -41.8909 Td
-(3744 3761 3772 3808) 11.438 Tj
-24.0799 -41.8909 Td
-(4750 4752 4755 4768) 11.438 Tj
-2.40799 -43.2 Td
-(3855 3879 3889) 8.428 Tj
-24.0799 -43.2 Td
-(4769 4771 4772 4774) 11.438 Tj
--1e-05 -44.5091 Td
-(ide_write 3872) 8.428 Tj
-24.0799 -44.5091 Td
-(4784 4800 4804 4850) 11.438 Tj
-2.40799 -45.8182 Td
-(3872 3877) 5.418 Tj
-24.0799 -45.8182 Td
-(4854 5253 5321 5353) 11.438 Tj
--1e-05 -47.1272 Td
-(idtinit 2874) 7.224 Tj
-24.0799 -47.1272 Td
-(5354 5404 5480) 8.428 Tj
-2.40799 -48.4363 Td
-(0234 1256 1305 2874) 11.438 Tj
-21.6719 -48.4363 Td
-(inode_table_lock 4079) 12.642 Tj
--1e-05 -49.7454 Td
-(ifree 4310) 6.02 Tj
-24.0799 -49.7454 Td
-(4079 4086 4190 4197) 11.438 Tj
-2.40799 -51.0545 Td
-(4310 4439) 5.418 Tj
-24.0799 -51.0545 Td
-(4198 4206 4221 4327) 11.438 Tj
--1e-05 -52.3636 Td
-(iget 4184) 5.418 Tj
-24.0799 -52.3636 Td
-(4330 4333 4359 4364) 11.438 Tj
-2.40799 -53.6727 Td
-(0326 1336 4077 4184) 11.438 Tj
-24.0799 -53.6727 Td
-(4442 4448) 5.418 Tj
-2.40799 -54.9818 Td
-(4304 4630 4707 4826) 11.438 Tj
-21.6719 -54.9818 Td
-(insl 0362) 5.418 Tj
--1e-05 -56.2909 Td
-(iincref 4461) 7.224 Tj
-24.0799 -56.2909 Td
-(0362 3856) 5.418 Tj
-2.40799 -57.6 Td
-(0331 2158 4461 4633) 11.438 Tj
-21.6719 -57.6 Td
-(ioapic 6207) 6.622 Tj
--1e-05 -58.9091 Td
-(iinit 4084) 6.02 Tj
-24.0799 -58.9091 Td
-(0274 1523 1564 1565) 11.438 Tj
-2.40799 -60.2181 Td
-(0325 1258 4084) 8.428 Tj
-24.0799 -60.2181 Td
-(6205 6207 6217 6224) 11.438 Tj
--1e-05 -61.5272 Td
-(ilock 4322) 6.02 Tj
-24.0799 -61.5272 Td
-(6233 6242 6271 6276) 11.438 Tj
-2.40799 -62.8363 Td
-(0327 4322 4325 4455) 11.438 Tj
-21.6719 -62.8363 Td
-(IOAPIC_ARB 5870) 9.03 Tj
-2.40799 -64.1454 Td
-(4463 4634 4876 4959) 11.438 Tj
-24.0799 -64.1454 Td
-(5870) 2.408 Tj
-2.40799 -65.4545 Td
-(4981 5033) 5.418 Tj
-21.6719 -65.4545 Td
-(IO_APIC_BASE 5850) 10.234 Tj
--1e-05 -66.7636 Td
-(inb 0354) 4.816 Tj
-24.0799 -66.7636 Td
-(5850 6242 6276) 8.428 Tj
-2.40799 -68.0727 Td
-(0354 0357 1043 1051) 11.438 Tj
-21.6719 -68.0727 Td
-(ioapic_id 1434) 8.428 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  cross-references  Page 4) 187.846 Tj
+17.4609 -28.4801 Td
+(4603 4615 4627 4642) 83.0018 Tj
+-6520.6 TJm
+(ialloc 3952) 48.0537 Tj
+17.4609 -37.9735 Td
+(4653 4855 4979 5155) 83.0018 Tj
+-8527.18 TJm
+(0236 3952 3972 4821) 83.0018 Tj
+17.4609 -47.4668 Td
+(5170 6778 6833 6834) 83.0018 Tj
+-6520.6 TJm
+(IBLOCK 3190) 48.0537 Tj
+17.4609 -56.9602 Td
+(6964 6972 7172) 61.1592 Tj
+-11035.5 TJm
+(3190 3867 3961 3982) 83.0018 Tj
+0 -66.4535 Td
+(filealloc 4419) 61.1592 Tj
+-11035.4 TJm
+(I_BUSY 3266) 48.0537 Tj
+17.4609 -75.9469 Td
+(0225 4419 4874 5176) 83.0018 Tj
+-8527.18 TJm
+(3266 3861 3863 3886) 83.0018 Tj
+0 -85.4403 Td
+(fileclose 4452) 61.1592 Tj
+-13042 TJm
+(3890 3907 3909 3915) 83.0018 Tj
+17.4609 -94.9336 Td
+(0226 2015 4452 4458) 83.0018 Tj
+-6520.6 TJm
+(ICRHI 5671) 43.6851 Tj
+17.4609 -104.427 Td
+(4473 4647 4876 4990) 83.0018 Tj
+-8527.18 TJm
+(5671 5740 5786 5792) 83.0018 Tj
+17.4609 -113.92 Td
+(4991 5205 5209) 61.1592 Tj
+-9028.94 TJm
+(ICRLO 5664) 43.6851 Tj
+0 -123.413 Td
+(filedup 4438) 52.4222 Tj
+-14045.3 TJm
+(5664 5741 5742 5787) 83.0018 Tj
+17.4609 -132.907 Td
+(0227 1735 4438 4442) 83.0018 Tj
+-8527.18 TJm
+(5793) 17.4741 Tj
+17.4609 -142.4 Td
+(4634) 17.4741 Tj
+-14045.6 TJm
+(ID 5657) 30.5796 Tj
+0 -151.893 Td
+(fileinit 4412) 56.7907 Tj
+-13543.7 TJm
+(5657 5754) 39.3166 Tj
+17.4609 -161.387 Td
+(0228 1241 4412) 61.1592 Tj
+-9028.94 TJm
+(IDE_BSY 3312) 52.4222 Tj
+0 -170.88 Td
+(fileread 4502) 56.7907 Tj
+-13543.7 TJm
+(3312 3336) 39.3166 Tj
+17.4609 -180.373 Td
+(0229 4502 4517 4609) 83.0018 Tj
+-6520.6 TJm
+(IDE_CMD_READ 3317) 74.2647 Tj
+0 -189.867 Td
+(filestat 4478) 56.7907 Tj
+-13543.7 TJm
+(3317 3391) 39.3166 Tj
+17.4609 -199.36 Td
+(0230 4478 4658) 61.1592 Tj
+-9028.94 TJm
+(IDE_CMD_WRITE 3318) 78.6333 Tj
+0 -208.854 Td
+(file_table_lock 4408) 87.3703 Tj
+-10032 TJm
+(3318 3388) 39.3166 Tj
+17.4609 -218.347 Td
+(4408 4414 4423 4428) 83.0018 Tj
+-6520.6 TJm
+(IDE_DF 3314) 48.0537 Tj
+17.4609 -227.84 Td
+(4432 4440 4444 4456) 83.0018 Tj
+-8527.18 TJm
+(3314 3338) 39.3166 Tj
+17.4609 -237.334 Td
+(4460 4466) 39.3166 Tj
+-11537.3 TJm
+(IDE_DRDY 3313) 56.7907 Tj
+0 -246.827 Td
+(filewrite 4522) 61.1592 Tj
+-13042 TJm
+(3313 3336) 39.3166 Tj
+17.4609 -256.32 Td
+(0231 4522 4537 4621) 83.0018 Tj
+-6520.6 TJm
+(IDE_ERR 3315) 52.4222 Tj
+0 -265.813 Td
+(FL_IF 0610) 43.6851 Tj
+-15048.7 TJm
+(3315 3338) 39.3166 Tj
+17.4609 -275.307 Td
+(0610 1766) 39.3166 Tj
+-11537.3 TJm
+(ide_init 3351) 56.7907 Tj
+0 -284.8 Td
+(fork1 6931) 43.6851 Tj
+-15048.7 TJm
+(0251 1245 3351) 61.1592 Tj
+17.4609 -294.293 Td
+(6800 6842 6854 6861) 83.0018 Tj
+-6520.6 TJm
+(ide_intr 3402) 56.7907 Tj
+17.4609 -303.787 Td
+(6876 6916 6931) 61.1592 Tj
+-11035.5 TJm
+(0252 2561 3402) 61.1592 Tj
+0 -313.28 Td
+(forkret 1878) 52.4222 Tj
+-12038.8 TJm
+(ide_lock 3324) 56.7907 Tj
+17.4609 -322.773 Td
+(1615 1741 1878) 61.1592 Tj
+-11035.5 TJm
+(3324 3355 3406 3409) 83.0018 Tj
+0 -332.267 Td
+(forkret1 2484) 56.7907 Tj
+-13543.7 TJm
+(3426 3465 3480 3482) 83.0018 Tj
+17.4609 -341.76 Td
+(1616 1884 2483 2484) 83.0018 Tj
+-6520.6 TJm
+(ide_rw 3454) 48.0537 Tj
+0 -351.254 Td
+(gatedesc 0751) 56.7907 Tj
+-13543.7 TJm
+(0253 3454 3459 3461) 83.0018 Tj
+17.4609 -360.747 Td
+(0414 0417 0751 2510) 83.0018 Tj
+-8527.18 TJm
+(3608 3619) 39.3166 Tj
+0 -370.24 Td
+(getcallerpcs 1471) 74.2647 Tj
+-9530.42 TJm
+(ide_start_request 3375) 96.1073 Tj
+17.4609 -379.734 Td
+(0315 1446 1471 2129) 83.0018 Tj
+-8527.18 TJm
+(3328 3375 3378 3424) 83.0018 Tj
+17.4609 -389.227 Td
+(6525) 17.4741 Tj
+-16052.2 TJm
+(3475) 17.4741 Tj
+0 -398.72 Td
+(getcmd 6884) 48.0537 Tj
+-12540.4 TJm
+(ide_wait_ready 3332) 83.0018 Tj
+17.4609 -408.213 Td
+(6884 6915) 39.3166 Tj
+-13543.9 TJm
+(3332 3358 3380 3414) 83.0018 Tj
+0 -417.707 Td
+(gettoken 7056) 56.7907 Tj
+-11537.1 TJm
+(idtinit 2528) 52.4222 Tj
+17.4609 -427.2 Td
+(7056 7141 7145 7157) 83.0018 Tj
+-8527.18 TJm
+(0341 1240 1262 2528) 83.0018 Tj
+17.4609 -436.693 Td
+(7170 7171 7207 7211) 83.0018 Tj
+-6520.6 TJm
+(idup 3838) 39.3166 Tj
+17.4609 -446.187 Td
+(7233) 17.4741 Tj
+-16052.2 TJm
+(0237 1736 3838 4361) 83.0018 Tj
+0 -455.68 Td
+(growproc 1653) 56.7907 Tj
+-11537.1 TJm
+(iget 3803) 39.3166 Tj
+17.4609 -465.173 Td
+(0298 1653 2858) 61.1592 Tj
+-11035.5 TJm
+(3803 3823 3968 4234) 83.0018 Tj
+0 -474.667 Td
+(holding 1489) 52.4222 Tj
+-14045.3 TJm
+(4359) 17.4741 Tj
+17.4609 -484.16 Td
+(0316 1427 1454 1489) 83.0018 Tj
+-6520.6 TJm
+(iinit 3789) 43.6851 Tj
+17.4609 -493.654 Td
+(1857) 17.4741 Tj
+-16052.2 TJm
+(0238 1242 3789) 61.1592 Tj
 Q
 Q
 Q
@@ -2012,7 +2139,10 @@ pdfEndPage
 %%Page: 4 4
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -2020,437 +2150,449 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  cross-references  Page 5) 25.886 Tj
-2.40798 -3.92728 Td
-(0275 1434 1565 6246) 11.438 Tj
-21.6719 -3.92728 Td
-(IOART_DESTPHY 5919) 10.836 Tj
-2.40798 -5.23637 Td
-(6247) 2.408 Tj
-24.0799 -5.23637 Td
-(5919) 2.408 Tj
--2e-05 -6.54546 Td
-(ioapic_init 6231) 9.632 Tj
-21.6719 -6.54546 Td
-(IOART_INTAHI 5913) 10.234 Tj
-2.40798 -7.85455 Td
-(0276 1253 6231 6247) 11.438 Tj
-24.0799 -7.85455 Td
-(5913) 2.408 Tj
--2e-05 -9.16364 Td
-(ioapic_read 6217) 9.632 Tj
-21.6719 -9.16364 Td
-(IOART_INTALO 5914) 10.234 Tj
-2.40798 -10.4727 Td
-(6217 6243 6245 6252) 11.438 Tj
-24.0799 -10.4727 Td
-(5914) 2.408 Tj
-2.40798 -11.7818 Td
-(6261 6277 6280) 8.428 Tj
-21.6719 -11.7818 Td
-(IOART_INTMASK 5902) 10.836 Tj
--2e-05 -13.0909 Td
-(IOAPIC_REDTBL 5871) 10.836 Tj
-24.0799 -13.0909 Td
-(5902 6253 6278) 8.428 Tj
-2.40798 -14.4 Td
-(5871 5872 5873 5874) 11.438 Tj
-21.6719 -14.4 Td
-(IOART_INTMCLR 5903) 10.836 Tj
-2.40798 -15.7091 Td
-(5875 5876 5877 5878) 11.438 Tj
-24.0799 -15.7091 Td
-(5903) 2.408 Tj
-2.40798 -17.0182 Td
-(5879 5880 5881 5882) 11.438 Tj
-21.6719 -17.0182 Td
-(IOART_INTMSET 5904) 10.836 Tj
-2.40798 -18.3273 Td
-(5883 5884 5885 5886) 11.438 Tj
-24.0799 -18.3273 Td
-(5904 6254) 5.418 Tj
-2.40798 -19.6364 Td
-(5887 5888 5889 5890) 11.438 Tj
-21.6719 -19.6364 Td
-(IOART_INTPOL 5912) 10.234 Tj
-2.40798 -20.9455 Td
-(5891 5892 5893 5894) 11.438 Tj
-24.0799 -20.9455 Td
-(5912 6255) 5.418 Tj
-2.40798 -22.2545 Td
-(5895 6213) 5.418 Tj
-21.6719 -22.2545 Td
-(IOART_INTVEC 5932) 10.234 Tj
--2e-05 -23.5636 Td
-(IOAPIC_REDTBL0 5872) 11.438 Tj
-24.0799 -23.5636 Td
-(5932) 2.408 Tj
-2.40798 -24.8727 Td
-(5872) 2.408 Tj
-21.6719 -24.8727 Td
-(IOART_REM_IRR 5910) 10.836 Tj
--2e-05 -26.1818 Td
-(IOAPIC_VER 5869) 9.03 Tj
-24.0799 -26.1818 Td
-(5910) 2.408 Tj
-2.40798 -27.4909 Td
-(5869 6243) 5.418 Tj
-21.6719 -27.4909 Td
-(IOART_RESV 5900) 9.03 Tj
--2e-05 -28.8 Td
-(IOAPIC_WINDOW 5851) 10.836 Tj
-24.0799 -28.8 Td
-(5900) 2.408 Tj
-2.40798 -30.1091 Td
-(5851) 2.408 Tj
-21.6719 -30.1091 Td
-(IOART_TRGREDG 5907) 10.836 Tj
--2e-05 -31.4182 Td
-(ioapic_write 6224) 10.234 Tj
-24.0799 -31.4182 Td
-(5907) 2.408 Tj
-2.40798 -32.7273 Td
-(6224 6260 6263 6279) 11.438 Tj
-21.6719 -32.7273 Td
-(IOART_TRGRLVL 5908) 10.836 Tj
-2.40798 -34.0364 Td
-(6283) 2.408 Tj
-24.0799 -34.0364 Td
-(5908) 2.408 Tj
--2e-05 -35.3454 Td
-(IOART_DELEXINT 5930) 11.438 Tj
-21.6719 -35.3454 Td
-(IOART_TRGRMOD 5906) 10.836 Tj
-2.40798 -36.6545 Td
-(5930) 2.408 Tj
-24.0799 -36.6545 Td
-(5906 6256) 5.418 Tj
--2e-05 -37.9636 Td
-(IOART_DELFIXED 5923) 11.438 Tj
-21.6719 -37.9636 Td
-(IOART_VER_MAXREDIR 5936) 13.846 Tj
-2.40798 -39.2727 Td
-(5923) 2.408 Tj
-24.0799 -39.2727 Td
-(5936 6244) 5.418 Tj
--2e-05 -40.5818 Td
-(IOART_DELINIT 5928) 10.836 Tj
-21.6719 -40.5818 Td
-(IOART_VER_VERSION 5935) 13.244 Tj
-2.40798 -41.8909 Td
-(5928) 2.408 Tj
-24.0799 -41.8909 Td
-(5935) 2.408 Tj
--2e-05 -43.2 Td
-(IOART_DELIVS 5916) 10.234 Tj
-21.6719 -43.2 Td
-(IO_PIC1 6306) 7.224 Tj
-2.40798 -44.5091 Td
-(5916) 2.408 Tj
-24.0799 -44.5091 Td
-(6306 6320 6335 6344) 11.438 Tj
--2e-05 -45.8182 Td
-(IOART_DELLOPRI 5924) 11.438 Tj
-24.0799 -45.8182 Td
-(6347 6352 6362 6376) 11.438 Tj
-2.40798 -47.1272 Td
-(5924) 2.408 Tj
-24.0799 -47.1272 Td
-(6377) 2.408 Tj
--2e-05 -48.4363 Td
-(IOART_DELMOD 5922) 10.234 Tj
-21.6719 -48.4363 Td
-(IO_PIC2 6307) 7.224 Tj
-2.40798 -49.7454 Td
-(5922 6257) 5.418 Tj
-24.0799 -49.7454 Td
-(6307 6321 6336 6365) 11.438 Tj
--2e-05 -51.0545 Td
-(IOART_DELNMI 5927) 10.234 Tj
-24.0799 -51.0545 Td
-(6366 6367 6370 6379) 11.438 Tj
-2.40798 -52.3636 Td
-(5927) 2.408 Tj
-24.0799 -52.3636 Td
-(6380) 2.408 Tj
--2e-05 -53.6727 Td
-(IOART_DELRSV1 5926) 10.836 Tj
-21.6719 -53.6727 Td
-(IO_TIMER1 6858) 8.428 Tj
-2.40798 -54.9818 Td
-(5926) 2.408 Tj
-24.0799 -54.9818 Td
-(6858 6867 6868 6869) 11.438 Tj
--2e-05 -56.2909 Td
-(IOART_DELRSV2 5929) 10.836 Tj
-24.0799 -56.2909 Td
-(6870 6891 6892) 8.428 Tj
-2.40798 -57.6 Td
-(5929) 2.408 Tj
-21.6719 -57.6 Td
-(IO_TIMER2 6859) 8.428 Tj
--2e-05 -58.9091 Td
-(IOART_DELSMI 5925) 10.234 Tj
-24.0799 -58.9091 Td
-(6859) 2.408 Tj
-2.40798 -60.2181 Td
-(5925) 2.408 Tj
-21.6719 -60.2181 Td
-(iput 4432) 5.418 Tj
--2e-05 -61.5272 Td
-(IOART_DEST 5898) 9.03 Tj
-24.0799 -61.5272 Td
-(0332 4182 4432 4435) 11.438 Tj
-2.40798 -62.8363 Td
-(5898 6262 6281) 8.428 Tj
-24.0799 -62.8363 Td
-(4456 4648 4653 4688) 11.438 Tj
--2e-05 -64.1454 Td
-(IOART_DESTLOG 5920) 10.836 Tj
-24.0799 -64.1454 Td
-(4695 4706 4763 4824) 11.438 Tj
-2.40798 -65.4545 Td
-(5920) 2.408 Tj
-24.0799 -65.4545 Td
-(4834 4860 4872 4881) 11.438 Tj
--2e-05 -66.7636 Td
-(IOART_DESTMOD 5918) 10.836 Tj
-24.0799 -66.7636 Td
-(4882 5267 5273 5282) 11.438 Tj
-2.40798 -68.0727 Td
-(5918 6258) 5.418 Tj
-24.0799 -68.0727 Td
-(5287 5291 5335 5368) 11.438 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  cross-references  Page 5) 187.846 Tj
+0 -28.4801 Td
+(ilock 3852) 43.6851 Tj
+-13042.1 TJm
+(ioapic_read 5834) 69.8962 Tj
+17.4609 -37.9735 Td
+(0239 3852 3858 3878) 83.0018 Tj
+-8527.18 TJm
+(5834 5859 5860) 61.1592 Tj
+17.4609 -47.4668 Td
+(4364 4481 4511 4531) 83.0018 Tj
+-6520.6 TJm
+(ioapic_write 5841) 74.2647 Tj
+17.4609 -56.9602 Td
+(4672 4683 4693 4762) 83.0018 Tj
+-8527.18 TJm
+(5841 5867 5868 5881) 83.0018 Tj
+17.4609 -66.4535 Td
+(4774 4809 4813 4825) 83.0018 Tj
+-8527.18 TJm
+(5882) 17.4741 Tj
+17.4609 -75.9469 Td
+(4867 4937 5020 6394) 83.0018 Tj
+-6520.6 TJm
+(IO_PIC1 5907) 52.4222 Tj
+17.4609 -85.4403 Td
+(6463 6485) 39.3166 Tj
+-13543.8 TJm
+(5907 5920 5935 5944) 83.0018 Tj
+0 -94.9336 Td
+(inb 0354) 34.9481 Tj
+-16052 TJm
+(5947 5952 5962 5976) 83.0018 Tj
+17.4609 -104.427 Td
+(0354 0928 0936 1154) 83.0018 Tj
+-8527.18 TJm
+(5977) 17.4741 Tj
+17.4609 -113.92 Td
+(3336 3363 5646 6164) 83.0018 Tj
+-6520.6 TJm
+(IO_PIC2 5908) 52.4222 Tj
+17.4609 -123.414 Td
+(6167 6232 6257 6259) 83.0018 Tj
+-8527.18 TJm
+(5908 5921 5936 5965) 83.0018 Tj
+0 -132.907 Td
+(INDIRECT 3168) 56.7907 Tj
+-13543.7 TJm
+(5966 5967 5970 5979) 83.0018 Tj
+17.4609 -142.4 Td
+(3168 4027 4030 4065) 83.0018 Tj
+-8527.18 TJm
+(5980) 17.4741 Tj
+17.4609 -151.894 Td
+(4066 4073) 39.3166 Tj
+-11537.3 TJm
+(IO_TIMER1 6559) 61.1592 Tj
+0 -161.387 Td
+(initlock 1413) 56.7907 Tj
+-13543.7 TJm
+(6559 6568 6578 6579) 83.0018 Tj
+17.4609 -170.88 Td
+(0317 1413 1621 2231) 83.0018 Tj
+-6520.6 TJm
+(IPB 3187) 34.9481 Tj
+17.4609 -180.374 Td
+(2524 3355 3542 3791) 83.0018 Tj
+-8527.18 TJm
+(3187 3190 3196 3868) 83.0018 Tj
+17.4609 -189.867 Td
+(4414 5184 6503 6504) 83.0018 Tj
+-8527.18 TJm
+(3962 3983) 39.3166 Tj
+0 -199.361 Td
+(inode 3252) 43.6851 Tj
+-13042.1 TJm
+(iput 3902) 39.3166 Tj
+17.4609 -208.854 Td
+(0203 0234 0235 0236) 83.0018 Tj
+-8527.18 TJm
+(0240 2020 3902 3908) 83.0018 Tj
+17.4609 -218.347 Td
+(0237 0239 0240 0241) 83.0018 Tj
+-8527.18 TJm
+(3927 4260 4382 4471) 83.0018 Tj
+17.4609 -227.841 Td
+(0242 0243 0245 0246) 83.0018 Tj
+-8527.18 TJm
+(4687 4943) 39.3166 Tj
+17.4609 -237.334 Td
+(0247 0248 0249 1539) 83.0018 Tj
+-6520.6 TJm
+(IRQ_ERROR 2384) 61.1592 Tj
+17.4609 -246.827 Td
+(2951 2952 3106 3252) 83.0018 Tj
+-8527.18 TJm
+(2384 5730) 39.3166 Tj
+17.4609 -256.321 Td
+(3675 3785 3802 3805) 83.0018 Tj
+-6520.6 TJm
+(IRQ_IDE 2383) 52.4222 Tj
+17.4609 -265.814 Td
+(3811 3837 3838 3852) 83.0018 Tj
+-8527.18 TJm
+(2383 2560 3356 3357) 83.0018 Tj
+17.4609 -275.307 Td
+(3884 3902 3924 3951) 83.0018 Tj
+-6520.6 TJm
+(IRQ_KBD 2382) 52.4222 Tj
+17.4609 -284.801 Td
+(3977 4010 4052 4082) 83.0018 Tj
+-8527.18 TJm
+(2382 2564 6510 6511) 83.0018 Tj
+17.4609 -294.294 Td
+(4102 4152 4211 4212) 83.0018 Tj
+-6520.6 TJm
+(IRQ_OFFSET 2379) 65.5277 Tj
+17.4609 -303.788 Td
+(4252 4256 4353 4356) 83.0018 Tj
+-8527.18 TJm
+(2379 2551 2560 2564) 83.0018 Tj
+17.4609 -313.281 Td
+(4388 4395 4666 4702) 83.0018 Tj
+-8527.18 TJm
+(2568 2595 5707 5718) 83.0018 Tj
+17.4609 -322.774 Td
+(4753 4800 4804 4856) 83.0018 Tj
+-8527.18 TJm
+(5730 5867 5881 5947) 83.0018 Tj
+17.4609 -332.268 Td
+(4903 4921 4933 5015) 83.0018 Tj
+-8527.18 TJm
+(5966) 17.4741 Tj
+17.4609 -341.761 Td
+(6385 6451) 39.3166 Tj
+-11537.3 TJm
+(IRQ_SLAVE 5910) 61.1592 Tj
+0 -351.254 Td
+(INPUT_BUF 6400) 61.1592 Tj
+-13042 TJm
+(5910 5914 5952 5967) 83.0018 Tj
+17.4609 -360.748 Td
+(6400 6403 6424 6436) 83.0018 Tj
+-6520.6 TJm
+(IRQ_SPURIOUS 2385) 74.2647 Tj
+17.4609 -370.241 Td
+(6439 6481) 39.3166 Tj
+-13543.8 TJm
+(2385 2568 5707) 61.1592 Tj
+0 -379.734 Td
+(insl 0363) 39.3166 Tj
+-13543.8 TJm
+(IRQ_TIMER 2381) 61.1592 Tj
+17.4609 -389.228 Td
+(0363 1173 3415) 61.1592 Tj
+-11035.5 TJm
+(2381 2551 2595 5718) 83.0018 Tj
+0 -398.721 Td
+(INT_DISABLED 5819) 74.2647 Tj
+-11537 TJm
+(6580) 17.4741 Tj
+17.4609 -408.214 Td
+(5819 5867) 39.3166 Tj
+-11537.3 TJm
+(isdirempty 4702) 65.5277 Tj
+0 -417.707 Td
+(IOAPIC 5808) 48.0537 Tj
+-14547 TJm
+(4702 4709 4778) 61.1592 Tj
+17.4609 -427.201 Td
+(5808 5858) 39.3166 Tj
+-11537.3 TJm
+(ismp 5514) 39.3166 Tj
+0 -436.694 Td
+(ioapic_enable 5873) 78.6333 Tj
+-11035.3 TJm
+(0280 1247 5514 5613) 83.0018 Tj
+17.4609 -446.188 Td
+(0256 3357 5873 6511) 83.0018 Tj
+-8527.18 TJm
+(5855 5875) 39.3166 Tj
+0 -455.681 Td
+(ioapic_id 5516) 61.1592 Tj
+-11035.4 TJm
+(itrunc 4052) 48.0537 Tj
+17.4609 -465.174 Td
+(0257 5516 5628 5861) 83.0018 Tj
+-8527.18 TJm
+(3675 3911 4052) 61.1592 Tj
+17.4609 -474.668 Td
+(5862) 17.4741 Tj
+-14045.6 TJm
+(iunlock 3884) 52.4222 Tj
+0 -484.161 Td
+(ioapic_init 5851) 69.8962 Tj
+-12038.7 TJm
+(0241 3884 3887 3926) 83.0018 Tj
+17.4609 -493.654 Td
+(0258 1237 5851 5862) 83.0018 Tj
+-8527.18 TJm
+(4371 4483 4514 4534) 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  cross-references  Page 6) 25.886 Tj
-2.40799 -3.92728 Td
-(5384 5385 5414 5419) 11.438 Tj
-21.6719 -3.92728 Td
-(KBDATAP 6602) 7.224 Tj
-2.40799 -5.23637 Td
-(5581 5592 5596) 8.428 Tj
-24.0799 -5.23637 Td
-(6602 6753) 5.418 Tj
--1e-05 -6.54546 Td
-(irq_enable 6325) 9.03 Tj
-21.6719 -6.54546 Td
-(KBD_BUF 6735) 7.224 Tj
-2.40799 -7.85455 Td
-(0252 3759 6325 6842) 11.438 Tj
-24.0799 -7.85455 Td
-(6735 6736 6794 6796) 11.438 Tj
-2.40799 -9.16364 Td
-(6893) 2.408 Tj
-24.0799 -9.16364 Td
-(6824) 2.408 Tj
--1e-05 -10.4727 Td
-(IRQ_ERROR 2834) 8.428 Tj
-21.6719 -10.4727 Td
-(kbd_intr 6743) 7.826 Tj
-2.40799 -11.7818 Td
-(2834 6109) 5.418 Tj
-24.0799 -11.7818 Td
-(0209 2927 6743) 8.428 Tj
--1e-05 -13.0909 Td
-(IRQ_IDE 2833) 7.224 Tj
-21.6719 -13.0909 Td
-(kbd_lock 6739) 7.826 Tj
-2.40799 -14.4 Td
-(2833 2921 3759 3760) 11.438 Tj
-24.0799 -14.4 Td
-(6739 6747 6804 6812) 11.438 Tj
--1e-05 -15.7091 Td
-(IRQ_KBD 2832) 7.224 Tj
-24.0799 -15.7091 Td
-(6815 6828 6837) 8.428 Tj
-2.40799 -17.0182 Td
-(2832 2926 6842 6843) 11.438 Tj
-21.6719 -17.0182 Td
-(kbd_r 6737) 6.02 Tj
--1e-05 -18.3273 Td
-(IRQ_OFFSET 2829) 9.03 Tj
-24.0799 -18.3273 Td
-(6737 6794 6798 6814) 11.438 Tj
-2.40799 -19.6364 Td
-(2829 2905 2921 2926) 11.438 Tj
-24.0799 -19.6364 Td
-(6815 6818 6819 6823) 11.438 Tj
-2.40799 -20.9455 Td
-(2931 6073 6099 6109) 11.438 Tj
-24.0799 -20.9455 Td
-(6824 6825) 5.418 Tj
-2.40799 -22.2545 Td
-(6259 6347 6366) 8.428 Tj
-21.6719 -22.2545 Td
-(kbd_w 6738) 6.02 Tj
--1e-05 -23.5636 Td
-(irq_setmask_8259A 6316) 13.244 Tj
-24.0799 -23.5636 Td
-(6738 6794 6795 6796) 11.438 Tj
-2.40799 -24.8727 Td
-(6316 6327 6383) 8.428 Tj
-24.0799 -24.8727 Td
-(6797 6814 6818) 8.428 Tj
--1e-05 -26.1818 Td
-(IRQ_SLAVE 6309) 8.428 Tj
-21.6719 -26.1818 Td
-(KBS_DIB 6601) 7.224 Tj
-2.40799 -27.4909 Td
-(6309 6313 6352 6367) 11.438 Tj
-24.0799 -27.4909 Td
-(6601 6751) 5.418 Tj
--1e-05 -28.8 Td
-(IRQ_SPURIOUS 2835) 10.234 Tj
-21.6719 -28.8 Td
-(KBSTATP 6600) 7.224 Tj
-2.40799 -30.1091 Td
-(2835 2931 6099) 8.428 Tj
-24.0799 -30.1091 Td
-(6600 6750) 5.418 Tj
--1e-05 -31.4182 Td
-(IRQ_TIMER 2831) 8.428 Tj
-21.6719 -31.4182 Td
-(KEY_DEL 6626) 7.224 Tj
-2.40799 -32.7273 Td
-(2831 2905 6073 6893) 11.438 Tj
-24.0799 -32.7273 Td
-(6626 6674 6701 6725) 11.438 Tj
--1e-05 -34.0364 Td
-(ismp 1432) 5.418 Tj
-21.6719 -34.0364 Td
-(KEY_DN 6620) 6.622 Tj
-2.40799 -35.3454 Td
-(0258 1280 1432 1533) 11.438 Tj
-24.0799 -35.3454 Td
-(6620 6671 6698 6722) 11.438 Tj
-2.40799 -36.6545 Td
-(1595 6239 6273) 8.428 Tj
-21.6719 -36.6545 Td
-(KEY_END 6618) 7.224 Tj
--1e-05 -37.9636 Td
-(itrunc 4402) 6.622 Tj
-24.0799 -37.9636 Td
-(6618 6670 6697 6721) 11.438 Tj
-2.40799 -39.2727 Td
-(0329 4402 4438) 8.428 Tj
-21.6719 -39.2727 Td
-(KEY_HOME 6617) 7.826 Tj
--1e-05 -40.5818 Td
-(iunlock 4354) 7.224 Tj
-24.0799 -40.5818 Td
-(6617 6663 6690 6715) 11.438 Tj
-2.40799 -41.8909 Td
-(0328 1337 4354 4357) 11.438 Tj
-21.6719 -41.8909 Td
-(KEY_INS 6625) 7.224 Tj
-2.40799 -43.2 Td
-(4465 4864 4964 4985) 11.438 Tj
-24.0799 -43.2 Td
-(6625 6673 6700 6724) 11.438 Tj
-2.40799 -44.5091 Td
-(5035 5300 5425) 8.428 Tj
-21.6719 -44.5091 Td
-(KEY_LF 6621) 6.622 Tj
--1e-05 -45.8182 Td
-(iupdate 4253) 7.224 Tj
-24.0799 -45.8182 Td
-(6621 6668 6695 6719) 11.438 Tj
-2.40799 -47.1272 Td
-(0340 4253 4313 4425) 11.438 Tj
-21.6719 -47.1272 Td
-(KEY_PGDN 6624) 7.826 Tj
-2.40799 -48.4363 Td
-(4586 4784 4823 4833) 11.438 Tj
-24.0799 -48.4363 Td
-(6624 6672 6699 6723) 11.438 Tj
-2.40799 -49.7454 Td
-(4878 5373) 5.418 Tj
-21.6719 -49.7454 Td
-(KEY_PGUP 6623) 7.826 Tj
--1e-05 -51.0545 Td
-(jmpbuf 1915) 6.622 Tj
-24.0799 -51.0545 Td
-(6623 6667 6694 6718) 11.438 Tj
-2.40799 -52.3636 Td
-(0228 0229 0230 1266) 11.438 Tj
-21.6719 -52.3636 Td
-(KEY_RT 6622) 6.622 Tj
-2.40799 -53.6727 Td
-(1267 1914 1915 1940) 11.438 Tj
-24.0799 -53.6727 Td
-(6622 6669 6696 6720) 11.438 Tj
-2.40799 -54.9818 Td
-(1964 2145 2146 2147) 11.438 Tj
-21.6719 -54.9818 Td
-(KEY_UP 6619) 6.622 Tj
-2.40799 -56.2909 Td
-(2148 2229 2230 2262) 11.438 Tj
-24.0799 -56.2909 Td
-(6619 6666 6693 6717) 11.438 Tj
-2.40799 -57.6 Td
-(2263 2500 2501) 8.428 Tj
-21.6719 -57.6 Td
-(kfree 2605) 6.02 Tj
--1e-05 -58.9091 Td
-(kalloc 2660) 6.622 Tj
-24.0799 -58.9091 Td
-(0202 2071 2132 2442) 11.438 Tj
-2.40799 -60.2181 Td
-(0200 0201 1263 1342) 11.438 Tj
-24.0799 -60.2181 Td
-(2443 2589 2605 2613) 11.438 Tj
-2.40799 -61.5272 Td
-(2064 2122 2130 2584) 11.438 Tj
-24.0799 -61.5272 Td
-(5563 5591 5648 5676) 11.438 Tj
-2.40799 -62.8363 Td
-(2602 2660 2665 2686) 11.438 Tj
-21.6719 -62.8363 Td
-(kinit 2578) 6.02 Tj
-2.40799 -64.1454 Td
-(5515 5630) 5.418 Tj
-24.0799 -64.1454 Td
-(0203 1254 2578 2603) 11.438 Tj
--1e-05 -65.4545 Td
-(kalloc_lock 2565) 9.632 Tj
-21.6719 -65.4545 Td
-(KSTACKSIZE 0152) 9.03 Tj
-2.40799 -66.7636 Td
-(2565 2584 2619 2653) 11.438 Tj
-24.0799 -66.7636 Td
-(0152 1263 1267 2034) 11.438 Tj
-2.40799 -68.0727 Td
-(2667 2674 2680 2685) 11.438 Tj
-24.0799 -68.0727 Td
-(2130 2139 2443) 8.428 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  cross-references  Page 6) 187.846 Tj
+17.4609 -28.4801 Td
+(4679 4880 4942 6389) 83.0018 Tj
+-8527.18 TJm
+(6024 6067 6089 6113) 83.0018 Tj
+17.4609 -37.9735 Td
+(6456) 17.4741 Tj
+-14045.6 TJm
+(KEY_UP 6021) 48.0537 Tj
+0 -47.4668 Td
+(iunlockput 3924) 65.5277 Tj
+-12540.3 TJm
+(6021 6065 6087 6111) 83.0018 Tj
+17.4609 -56.9602 Td
+(0242 3924 4366 4375) 83.0018 Tj
+-6520.6 TJm
+(kfree 2255) 43.6851 Tj
+17.4609 -66.4535 Td
+(4378 4674 4686 4692) 83.0018 Tj
+-8527.18 TJm
+(0262 1664 1726 2069) 83.0018 Tj
+17.4609 -75.9469 Td
+(4696 4766 4771 4779) 83.0018 Tj
+-8527.18 TJm
+(2070 2236 2255 2260) 83.0018 Tj
+17.4609 -85.4403 Td
+(4780 4787 4791 4812) 83.0018 Tj
+-8527.18 TJm
+(5101 5111 5202 5228) 83.0018 Tj
+17.4609 -94.9336 Td
+(4815 4822 4833 4834) 83.0018 Tj
+-6520.6 TJm
+(kill 1976) 39.3166 Tj
+17.4609 -104.427 Td
+(4845 4869 4877 4913) 83.0018 Tj
+-8527.18 TJm
+(0299 1976 2581 2837) 83.0018 Tj
+17.4609 -113.92 Td
+(4925 4939 5069 5112) 83.0018 Tj
+-8527.18 TJm
+(6717) 17.4741 Tj
+0 -123.413 Td
+(iupdate 3977) 52.4222 Tj
+-12038.8 TJm
+(kinit 2225) 43.6851 Tj
+17.4609 -132.907 Td
+(0243 3913 3977 4077) 83.0018 Tj
+-8527.18 TJm
+(0263 1238 2225) 61.1592 Tj
+17.4609 -142.4 Td
+(4178 4678 4695 4790) 83.0018 Tj
+-6520.6 TJm
+(KSTACKSIZE 0152) 65.5277 Tj
+17.4609 -151.893 Td
+(4829 4840) 39.3166 Tj
+-13543.9 TJm
+(0152 1679 1714 1718) 83.0018 Tj
+0 -161.387 Td
+(I_VALID 3267) 52.4222 Tj
+-14045.3 TJm
+(1726 2070) 39.3166 Tj
+17.4609 -170.88 Td
+(3267 3866 3876 3905) 83.0018 Tj
+-6520.6 TJm
+(lapic_eoi 5760) 61.1592 Tj
+0 -180.373 Td
+(kalloc 2304) 48.0537 Tj
+-14547 TJm
+(0273 2558 2562 2566) 83.0018 Tj
+17.4609 -189.867 Td
+(0261 1657 1714 1725) 83.0018 Tj
+-8527.18 TJm
+(2570 5760) 39.3166 Tj
+17.4609 -199.36 Td
+(1759 2231 2304 2310) 83.0018 Tj
+-6520.6 TJm
+(lapic_init 5701) 65.5277 Tj
+17.4609 -208.854 Td
+(2328 5052 5178) 61.1592 Tj
+-11035.5 TJm
+(0274 1231 1263 5701) 83.0018 Tj
+0 -218.347 Td
+(kalloc_lock 2212) 69.8962 Tj
+-10032.1 TJm
+(lapic_startap 5780) 78.6333 Tj
+17.4609 -227.84 Td
+(2212 2231 2265 2293) 83.0018 Tj
+-8527.18 TJm
+(0275 1293 5780) 61.1592 Tj
+17.4609 -237.334 Td
+(2312 2316 2322 2326) 83.0018 Tj
+-6520.6 TJm
+(lgdt 0403) 39.3166 Tj
+0 -246.827 Td
+(KBDATAP 6004) 52.4222 Tj
+-14045.3 TJm
+(0403 0411 0954 1054) 83.0018 Tj
+17.4609 -256.32 Td
+(6004 6167) 39.3166 Tj
+-13543.9 TJm
+(1696) 17.4741 Tj
+0 -265.813 Td
+(kbd_getc 6156) 56.7907 Tj
+-11537.1 TJm
+(lidt 0417) 39.3166 Tj
+17.4609 -275.307 Td
+(6156 6198) 39.3166 Tj
+-13543.9 TJm
+(0417 0425 2530) 61.1592 Tj
+0 -284.8 Td
+(kbd_intr 6196) 56.7907 Tj
+-11537.1 TJm
+(LINT0 5676) 43.6851 Tj
+17.4609 -294.293 Td
+(0266 2565 6196) 61.1592 Tj
+-11035.5 TJm
+(5676 5721) 39.3166 Tj
+0 -303.787 Td
+(KBS_DIB 6003) 52.4222 Tj
+-12038.8 TJm
+(LINT1 5677) 43.6851 Tj
+17.4609 -313.28 Td
+(6003 6165) 39.3166 Tj
+-13543.9 TJm
+(5677 5722) 39.3166 Tj
+0 -322.773 Td
+(KBSTATP 6002) 52.4222 Tj
+-12038.8 TJm
+(LIST 6760) 39.3166 Tj
+17.4609 -332.267 Td
+(6002 6164) 39.3166 Tj
+-13543.9 TJm
+(6760 6840 7007 7283) 83.0018 Tj
+0 -341.76 Td
+(KEY_DEL 6028) 52.4222 Tj
+-12038.8 TJm
+(listcmd 6790 7001) 74.2647 Tj
+17.4609 -351.254 Td
+(6028 6069 6091 6115) 83.0018 Tj
+-8527.18 TJm
+(6790 6811 6841 7001) 83.0018 Tj
+0 -360.747 Td
+(KEY_DN 6022) 48.0537 Tj
+-14547 TJm
+(7003 7146 7257 7284) 83.0018 Tj
+17.4609 -370.24 Td
+(6022 6065 6087 6111) 83.0018 Tj
+-6520.6 TJm
+(LPTPORT 6215) 52.4222 Tj
+0 -379.734 Td
+(KEY_END 6020) 52.4222 Tj
+-14045.3 TJm
+(6215 6232 6236 6237) 83.0018 Tj
+17.4609 -389.227 Td
+(6020 6068 6090 6114) 83.0018 Tj
+-8527.18 TJm
+(6238) 17.4741 Tj
+0 -398.72 Td
+(KEY_HOME 6019) 56.7907 Tj
+-11537.1 TJm
+(lpt_putc 6228) 56.7907 Tj
+17.4609 -408.213 Td
+(6019 6068 6090 6114) 83.0018 Tj
+-8527.18 TJm
+(6228 6291) 39.3166 Tj
+0 -417.707 Td
+(KEY_INS 6027) 52.4222 Tj
+-12038.8 TJm
+(ltr 0429) 34.9481 Tj
+17.4609 -427.2 Td
+(6027 6069 6091 6115) 83.0018 Tj
+-8527.18 TJm
+(0429 0431 1697) 61.1592 Tj
+0 -436.693 Td
+(KEY_LF 6023) 48.0537 Tj
+-12540.4 TJm
+(MAXARGS 6763) 52.4222 Tj
+17.4609 -446.187 Td
+(6023 6067 6089 6113) 83.0018 Tj
+-8527.18 TJm
+(6763 6771 6772 7240) 83.0018 Tj
+0 -455.68 Td
+(KEY_PGDN 6026) 56.7907 Tj
+-11537.1 TJm
+(MAXFILE 3170) 52.4222 Tj
+17.4609 -465.173 Td
+(6026 6066 6088 6112) 83.0018 Tj
+-8527.18 TJm
+(3170 4165 4166) 61.1592 Tj
+0 -474.667 Td
+(KEY_PGUP 6025) 56.7907 Tj
+-11537.1 TJm
+(memcmp 5315) 48.0537 Tj
+17.4609 -484.16 Td
+(6025 6066 6088 6112) 83.0018 Tj
+-8527.18 TJm
+(0321 5315 5543 5588) 83.0018 Tj
+0 -493.654 Td
+(KEY_RT 6024) 48.0537 Tj
+-12540.4 TJm
+(memmove 5331) 52.4222 Tj
 Q
 Q
 Q
@@ -2462,6 +2604,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -2469,437 +2614,449 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  cross-references  Page 7) 25.886 Tj
-0 -3.92728 Td
-(lapic_disableintr 6129) 13.244 Tj
-24.0799 -3.92728 Td
-(0239 1387 1612 2067) 11.438 Tj
-2.408 -5.23637 Td
-(0270 6129) 5.418 Tj
-24.0799 -5.23637 Td
-(2127 2140 4230 4265) 11.438 Tj
-0 -6.54546 Td
-(lapic_enableintr 6122) 12.642 Tj
-24.0799 -6.54546 Td
-(4498 4573 5555 5780) 11.438 Tj
-2.408 -7.85455 Td
-(0269 1286 1310 6122) 11.438 Tj
-24.0799 -7.85455 Td
-(6461) 2.408 Tj
-0 -9.16364 Td
-(lapic_eoi 6136) 8.428 Tj
-21.6719 -9.16364 Td
-(memset 5754) 6.622 Tj
-2.408 -10.4727 Td
-(0271 2923 2928 6136) 11.438 Tj
-24.0799 -10.4727 Td
-(0237 1229 1348 1388) 11.438 Tj
-7.10543e-15 -11.7818 Td
-(lapic_init 6086) 9.03 Tj
-24.0799 -11.7818 Td
-(2068 2146 4166 4300) 11.438 Tj
-2.408 -13.0909 Td
-(0265 1242 1308 6086) 11.438 Tj
-24.0799 -13.0909 Td
-(4819 5375 5518 5578) 11.438 Tj
-7.10543e-15 -14.4 Td
-(lapic_read 6053) 9.03 Tj
-24.0799 -14.4 Td
-(5754 6463) 5.418 Tj
-2.408 -15.7091 Td
-(6053 6094 6106 6111) 11.438 Tj
-21.6719 -15.7091 Td
-(mknod 4753) 6.02 Tj
-2.408 -17.0182 Td
-(6117 6155) 5.418 Tj
-24.0799 -17.0182 Td
-(0337 1666 4753 5333) 11.438 Tj
-7.10543e-15 -18.3273 Td
-(lapic_startap 6162) 10.836 Tj
-21.6719 -18.3273 Td
-(mknod1 4772) 6.622 Tj
-2.408 -19.6364 Td
-(0266 1627 6162) 8.428 Tj
-24.0799 -19.6364 Td
-(0338 4761 4772 5266) 11.438 Tj
-1.42109e-14 -20.9455 Td
-(lapic_timerinit 6066) 12.04 Tj
-24.0799 -20.9455 Td
-(5366) 2.408 Tj
-2.408 -22.2545 Td
-(0267 1281 1309 6066) 11.438 Tj
-21.6719 -22.2545 Td
-(mp 0852) 4.214 Tj
-7.10543e-15 -23.5636 Td
-(lapic_timerintr 6079) 12.04 Tj
-24.0799 -23.5636 Td
-(0257 0852 1111 1112) 11.438 Tj
-2.408 -24.8727 Td
-(0268 2906 6079) 8.428 Tj
-24.0799 -24.8727 Td
-(1401 1437 1439 1446) 11.438 Tj
-7.10543e-15 -26.1818 Td
-(lapic_write 6059) 9.632 Tj
-24.0799 -26.1818 Td
-(1450 1453 1463 1468) 11.438 Tj
-2.408 -27.4909 Td
-(6059 6071 6072 6074) 11.438 Tj
-24.0799 -27.4909 Td
-(1472 1473 1477 1478) 11.438 Tj
-2.408 -28.8 Td
-(6075 6082 6093 6095) 11.438 Tj
-24.0799 -28.8 Td
-(1495 1500 1539 1582) 11.438 Tj
-2.408 -30.1091 Td
-(6096 6099 6101 6102) 11.438 Tj
-24.0799 -30.1091 Td
-(5951 6201) 5.418 Tj
-2.408 -31.4182 Td
-(6104 6108 6109 6110) 11.438 Tj
-21.6719 -31.4182 Td
-(mp_bcpu 1593) 7.224 Tj
-2.408 -32.7273 Td
-(6114 6115 6125 6132) 11.438 Tj
-24.0799 -32.7273 Td
-(0261 1236 1593) 8.428 Tj
-2.408 -34.0364 Td
-(6139 6168 6169 6173) 11.438 Tj
-21.6719 -34.0364 Td
-(mpbe 0888) 5.418 Tj
-2.408 -35.3454 Td
-(6180 6181) 5.418 Tj
-24.0799 -35.3454 Td
-(0888 1522 1556 1561) 11.438 Tj
-7.10543e-15 -36.6545 Td
-(lgdt 0403) 5.418 Tj
-21.6719 -36.6545 Td
-(mpctb 0863) 6.02 Tj
-2.408 -37.9636 Td
-(0403 0411 1068 1144) 11.438 Tj
-24.0799 -37.9636 Td
-(0863 1491 1500 1520) 11.438 Tj
-2.408 -39.2727 Td
-(2052) 2.408 Tj
-24.0799 -39.2727 Td
-(1539 1540 1541 1542) 11.438 Tj
-1.42109e-14 -40.5818 Td
-(lidt 0417) 5.418 Tj
-21.6719 -40.5818 Td
-(mp_detect 1489) 8.428 Tj
-2.408 -41.8909 Td
-(0417 0425 2876) 8.428 Tj
-24.0799 -41.8909 Td
-(1489 1529) 5.418 Tj
-2.13163e-14 -43.2 Td
-(link 4852) 5.418 Tj
-21.6719 -43.2 Td
-(mpie 0908) 5.418 Tj
-2.408 -44.5091 Td
-(0341 0688 4850 4852) 11.438 Tj
-24.0799 -44.5091 Td
-(0908 1524 1569 1570) 11.438 Tj
-2.408 -45.8182 Td
-(5471) 2.408 Tj
-21.6719 -45.8182 Td
-(mp_init 1516) 7.224 Tj
-2.13163e-14 -47.1272 Td
-(load_icode 1364) 9.03 Tj
-24.0799 -47.1272 Td
-(0259 1235 1516 1573) 11.438 Tj
-2.408 -48.4363 Td
-(0288 1356 1364 1372) 11.438 Tj
-21.6719 -48.4363 Td
-(mpioapic 0900) 7.826 Tj
-2.408 -49.7454 Td
-(1382 1384) 5.418 Tj
-24.0799 -49.7454 Td
-(0900 1523 1564 1566) 11.438 Tj
-2.13163e-14 -51.0545 Td
-(lpt_putc 6417) 7.826 Tj
-21.6719 -51.0545 Td
-(mpmain 1302) 6.622 Tj
-2.408 -52.3636 Td
-(6417 6441) 5.418 Tj
-24.0799 -52.3636 Td
-(1302 1307 1600 1624) 11.438 Tj
-2.84217e-14 -53.6727 Td
-(ltr 0429) 4.816 Tj
-21.6719 -53.6727 Td
-(mppe 0878) 5.418 Tj
-2.408 -54.9818 Td
-(0429 0431 2053) 8.428 Tj
-24.0799 -54.9818 Td
-(0878 1521 1547 1553) 11.438 Tj
-3.55271e-14 -56.2909 Td
-(main0 1222) 6.02 Tj
-21.6719 -56.2909 Td
-(mp_scan 1440) 7.224 Tj
-2.408 -57.6 Td
-(1218 1222) 5.418 Tj
-24.0799 -57.6 Td
-(1440 1472 1477 1480) 11.438 Tj
-4.26326e-14 -58.9091 Td
-(MAXLVTSHIFT 5865) 9.632 Tj
-21.6719 -58.9091 Td
-(mp_search 1464) 8.428 Tj
-2.408 -60.2181 Td
-(5865) 2.408 Tj
-24.0799 -60.2181 Td
-(1464 1495) 5.418 Tj
-4.9738e-14 -61.5272 Td
-(MAXREDIRSHIFT 5937) 10.836 Tj
-21.6719 -61.5272 Td
-(MPSTACK 1959) 7.224 Tj
-2.408 -62.8363 Td
-(5937 6244) 5.418 Tj
-24.0799 -62.8363 Td
-(1239 1240 1621 1959) 11.438 Tj
-5.68434e-14 -64.1454 Td
-(memcmp 5765) 6.622 Tj
-24.0799 -64.1454 Td
-(1967) 2.408 Tj
-2.408 -65.4545 Td
-(0238 1447 1501 4670) 11.438 Tj
-21.6719 -65.4545 Td
-(mp_startthem 1606) 10.234 Tj
-2.408 -66.7636 Td
-(5765) 2.408 Tj
-24.0799 -66.7636 Td
-(0260 1277 1606) 8.428 Tj
-5.68434e-14 -68.0727 Td
-(memmove 5780) 7.224 Tj
-21.6719 -68.0727 Td
-(namei 4610) 6.02 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  cross-references  Page 7) 187.846 Tj
+17.4609 -28.4801 Td
+(0322 1284 1660 1722) 83.0018 Tj
+-8527.18 TJm
+(3166 3179 3263) 61.1592 Tj
+17.4609 -37.9735 Td
+(1731 1775 3684 3874) 83.0018 Tj
+-6520.6 TJm
+(namecmp 4203) 52.4222 Tj
+17.4609 -47.4668 Td
+(3989 4121 4171 4328) 83.0018 Tj
+-8527.18 TJm
+(0244 4203 4228 4765) 83.0018 Tj
+17.4609 -56.9602 Td
+(4330 5080 5331 6270) 83.0018 Tj
+-6520.6 TJm
+(namei 4389) 43.6851 Tj
+0 -66.4535 Td
+(memset 5303) 48.0537 Tj
+-14547 TJm
+(0245 1760 4389 4670) 83.0018 Tj
+17.4609 -75.9469 Td
+(0323 1218 1661 1740) 83.0018 Tj
+-8527.18 TJm
+(4865 4935 5018) 61.1592 Tj
+17.4609 -85.4403 Td
+(1761 2263 3695 3964) 83.0018 Tj
+-6520.6 TJm
+(_namei 4354) 48.0537 Tj
+17.4609 -94.9336 Td
+(4784 4959 5055 5067) 83.0018 Tj
+-8527.18 TJm
+(4354 4392 4398) 61.1592 Tj
+17.4609 -104.427 Td
+(5303 6272 6887 6958) 83.0018 Tj
+-6520.6 TJm
+(nameiparent 4396) 69.8962 Tj
+17.4609 -113.92 Td
+(6969 6985 7006 7019) 83.0018 Tj
+-8527.18 TJm
+(0246 4396 4681 4760) 83.0018 Tj
+0 -123.413 Td
+(microdelay 5769) 65.5277 Tj
+-12540.3 TJm
+(4807) 17.4741 Tj
+17.4609 -132.907 Td
+(5769 5788) 39.3166 Tj
+-11537.3 TJm
+(NBUF 0156) 39.3166 Tj
+0 -142.4 Td
+(min 3674) 34.9481 Tj
+-16052 TJm
+(0156 3529 3553) 61.1592 Tj
+17.4609 -151.893 Td
+(3674 4120 4170) 61.1592 Tj
+-9028.94 TJm
+(NCPU 0153) 39.3166 Tj
+0 -161.387 Td
+(mp 5402) 30.5796 Tj
+174.613 -161.387 Td
+(0153 1221 1559 1576) 83.0018 Tj
+17.461 -170.88 Td
+(5402 5507 5536 5542) 83.0018 Tj
+-8527.18 TJm
+(1611 5512) 39.3166 Tj
+17.461 -180.373 Td
+(5543 5544 5555 5560) 83.0018 Tj
+-6520.6 TJm
+(NDEV 0158) 39.3166 Tj
+17.461 -189.867 Td
+(5564 5565 5568 5569) 83.0018 Tj
+-8527.18 TJm
+(0158 4108 4158 4407) 83.0018 Tj
+17.461 -199.36 Td
+(5580 5583 5585 5587) 83.0018 Tj
+-6520.6 TJm
+(NDIRECT 3167) 52.4222 Tj
+17.461 -208.854 Td
+(5594 5604 5610 5642) 83.0018 Tj
+-8527.18 TJm
+(3166 3167 3170 4015) 83.0018 Tj
+1e-04 -218.347 Td
+(mp_bcpu 5519) 52.4222 Tj
+-14045.3 TJm
+(4023 4058) 39.3166 Tj
+17.461 -227.84 Td
+(0281 1225 5519) 61.1592 Tj
+-9028.94 TJm
+(NELEM 0347) 43.6851 Tj
+1e-04 -237.334 Td
+(MPBUS 5452) 43.6851 Tj
+-15048.7 TJm
+(0347 2123 2779 4961) 83.0018 Tj
+17.461 -246.827 Td
+(5452 5631) 39.3166 Tj
+-11537.3 TJm
+(NFILE 0155) 43.6851 Tj
+1e-04 -256.32 Td
+(mpconf 5413) 48.0537 Tj
+-14547 TJm
+(0155 4409 4424) 61.1592 Tj
+17.461 -265.813 Td
+(5413 5579 5582 5587) 83.0018 Tj
+-6520.6 TJm
+(NINDIRECT 3169) 61.1592 Tj
+17.461 -275.307 Td
+(5605) 17.4741 Tj
+-16052.2 TJm
+(3169 3170 4025 4068) 83.0018 Tj
+1e-04 -284.8 Td
+(mp_config 5580) 61.1592 Tj
+-11035.4 TJm
+(NINODE 0157) 48.0537 Tj
+17.461 -294.293 Td
+(5580 5610) 39.3166 Tj
+-13543.8 TJm
+(0157 3785 3811) 61.1592 Tj
+1e-04 -303.787 Td
+(mp_init 5601) 52.4222 Tj
+-12038.8 TJm
+(NO 6006) 30.5796 Tj
+17.461 -313.28 Td
+(0282 1224 5601 5637) 83.0018 Tj
+-8527.18 TJm
+(6006 6052 6055 6057) 83.0018 Tj
+17.461 -322.773 Td
+(5638) 17.4741 Tj
+-16052.2 TJm
+(6058 6059 6060 6062) 83.0018 Tj
+1e-04 -332.267 Td
+(mpioapic 5439) 56.7907 Tj
+-13543.7 TJm
+(6074 6077 6079 6080) 83.0018 Tj
+17.461 -341.76 Td
+(5439 5607 5627 5629) 83.0018 Tj
+-8527.18 TJm
+(6081 6082 6084 6102) 83.0018 Tj
+1e-04 -351.254 Td
+(MPIOINTR 5454) 56.7907 Tj
+-13543.7 TJm
+(6103 6105 6106 6107) 83.0018 Tj
+17.461 -360.747 Td
+(5454 5632) 39.3166 Tj
+-13543.8 TJm
+(6108) 17.4741 Tj
+1e-04 -370.24 Td
+(MPLINTR 5455) 52.4222 Tj
+-12038.8 TJm
+(NOFILE 0154) 48.0537 Tj
+17.461 -379.734 Td
+(5455 5633) 39.3166 Tj
+-13543.8 TJm
+(0154 1538 1733 2013) 83.0018 Tj
+1e-04 -389.227 Td
+(mpmain 1259) 48.0537 Tj
+-14547 TJm
+(4571 4587) 39.3166 Tj
+17.461 -398.72 Td
+(1259 1292) 39.3166 Tj
+-11537.3 TJm
+(NPROC 0150) 43.6851 Tj
+1e-04 -408.213 Td
+(mpproc 5428) 48.0537 Tj
+-14547 TJm
+(0150 1610 1634 1817) 83.0018 Tj
+17.461 -417.707 Td
+(5428 5606 5619 5624) 83.0018 Tj
+-8527.18 TJm
+(1957 1981 2029 2062) 83.0018 Tj
+1e-04 -427.2 Td
+(mp_search 5556) 61.1592 Tj
+-13042 TJm
+(2119) 17.4741 Tj
+17.461 -436.693 Td
+(5556 5585) 39.3166 Tj
+-11537.3 TJm
+(NSEGS 1506) 43.6851 Tj
+1e-04 -446.187 Td
+(mp_search1 5537) 65.5277 Tj
+-12540.3 TJm
+(1506 1570) 39.3166 Tj
+17.461 -455.68 Td
+(5537 5564 5568 5571) 83.0018 Tj
+-6520.6 TJm
+(nulterminate 7252) 74.2647 Tj
+1e-04 -465.173 Td
+(MPSTACK 1563) 52.4222 Tj
+-14045.3 TJm
+(7115 7130 7252 7273) 83.0018 Tj
+17.461 -474.667 Td
+(1228 1229 1291 1563) 83.0018 Tj
+-8527.18 TJm
+(7279 7280 7285 7286) 83.0018 Tj
+17.461 -484.16 Td
+(1571) 17.4741 Tj
+-16052.2 TJm
+(7291) 17.4741 Tj
+1e-04 -493.654 Td
+(NADDRS 3166) 48.0537 Tj
+-12540.4 TJm
+(NUMLOCK 6013) 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  cross-references  Page 8) 25.886 Tj
-2.40799 -3.92728 Td
-(0333 4610 4709 4758) 11.438 Tj
-21.6719 -3.92728 Td
-(O_RDWR 3403) 6.622 Tj
-2.40799 -5.23637 Td
-(4808 4857 4866 5264) 11.438 Tj
-24.0799 -5.23637 Td
-(1665 1667 3403 5281) 11.438 Tj
-2.40799 -6.54546 Td
-(5277 5362 5410 5490) 11.438 Tj
-24.0799 -6.54546 Td
-(5302) 2.408 Tj
--1e-05 -7.85455 Td
-(NAMEI_CREATE 3669) 10.234 Tj
-21.6719 -7.85455 Td
-(outb 0371) 5.418 Tj
-2.40799 -9.16364 Td
-(3669 4602 4644 4686) 11.438 Tj
-24.0799 -9.16364 Td
-(0371 0373 1047 1055) 11.438 Tj
-2.40799 -10.4727 Td
-(4758 4866 5264 5362) 11.438 Tj
-24.0799 -10.4727 Td
-(1584 1587 3775 3782) 11.438 Tj
--1e-05 -11.7818 Td
-(NAMEI_DELETE 3670) 10.234 Tj
-24.0799 -11.7818 Td
-(3809 3810 3811 3812) 11.438 Tj
-2.40799 -13.0909 Td
-(3670 4607 4701 4808) 11.438 Tj
-24.0799 -13.0909 Td
-(3813 3814 3816 3818) 11.438 Tj
--1e-05 -14.4 Td
-(NAMEI_LOOKUP 3668) 10.234 Tj
-24.0799 -14.4 Td
-(3881 3882 3883 3884) 11.438 Tj
-2.40799 -15.7091 Td
-(3668 4601 4642 4857) 11.438 Tj
-24.0799 -15.7091 Td
-(3885 3886 6320 6321) 11.438 Tj
-2.40799 -17.0182 Td
-(5277 5410 5490) 8.428 Tj
-24.0799 -17.0182 Td
-(6335 6336 6344 6347) 11.438 Tj
--1e-05 -18.3273 Td
-(NBUF 0157) 5.418 Tj
-24.0799 -18.3273 Td
-(6352 6362 6365 6366) 11.438 Tj
-2.40799 -19.6364 Td
-(0157 3935 3953) 8.428 Tj
-24.0799 -19.6364 Td
-(6367 6370 6376 6377) 11.438 Tj
--1e-05 -20.9455 Td
-(NCPU 0153) 5.418 Tj
-24.0799 -20.9455 Td
-(6379 6380 6423 6424) 11.438 Tj
-2.40799 -22.2545 Td
-(0153 1232 1431 1957) 11.438 Tj
-24.0799 -22.2545 Td
-(6425 6444 6446 6466) 11.438 Tj
-2.40799 -23.5636 Td
-(1972 2012) 5.418 Tj
-24.0799 -23.5636 Td
-(6467 6468 6469 6890) 11.438 Tj
--1e-05 -24.8727 Td
-(NDEV 0159) 5.418 Tj
-24.0799 -24.8727 Td
-(6891 6892) 5.418 Tj
-2.40799 -26.1818 Td
-(0159 4489 4555 4914) 11.438 Tj
-21.6719 -26.1818 Td
-(outsl 0383) 6.02 Tj
--1e-05 -27.4909 Td
-(NDIRECT 3567) 7.224 Tj
-24.0799 -27.4909 Td
-(0383 3819 3891) 8.428 Tj
-2.40799 -28.8 Td
-(3566 3567 3570 4377) 11.438 Tj
-21.6719 -28.8 Td
-(outw 0377) 5.418 Tj
-2.40799 -30.1091 Td
-(4386 4516 4532 4536) 11.438 Tj
-24.0799 -30.1091 Td
-(0377 0379) 5.418 Tj
--1e-05 -31.4182 Td
-(newblock 4510) 7.826 Tj
-21.6719 -31.4182 Td
-(O_WRONLY 3402) 7.826 Tj
-2.40799 -32.7273 Td
-(4510 4567 4568) 8.428 Tj
-24.0799 -32.7273 Td
-(3402 5281 5305) 8.428 Tj
--1e-05 -34.0364 Td
-(NFILE 0155) 6.02 Tj
-21.6719 -34.0364 Td
-(PAGE 0151) 5.418 Tj
-2.40799 -35.3454 Td
-(0155 4916 4931) 8.428 Tj
-24.0799 -35.3454 Td
-(0151 0152 1341 2586) 11.438 Tj
--1e-05 -36.6545 Td
-(NINODE 0158) 6.622 Tj
-24.0799 -36.6545 Td
-(2588 2589 2612 2664) 11.438 Tj
-2.40799 -37.9636 Td
-(0158 4078 4194) 8.428 Tj
-24.0799 -37.9636 Td
-(5630 5648 5676) 8.428 Tj
--1e-05 -39.2727 Td
-(NO 6604) 4.214 Tj
-21.6719 -39.2727 Td
-(panic 6555) 6.02 Tj
-2.40799 -40.5818 Td
-(6604 6652 6655 6657) 11.438 Tj
-24.0799 -40.5818 Td
-(0208 1307 1360 1372) 11.438 Tj
-2.40799 -41.8909 Td
-(6658 6659 6660 6662) 11.438 Tj
-24.0799 -41.8909 Td
-(1382 1384 1808 1834) 11.438 Tj
-2.40799 -43.2 Td
-(6679 6682 6684 6685) 11.438 Tj
-24.0799 -43.2 Td
-(2258 2260 2308 2311) 11.438 Tj
-2.40799 -44.5091 Td
-(6686 6687 6689 6708) 11.438 Tj
-24.0799 -44.5091 Td
-(2419 2613 2625 2665) 11.438 Tj
-2.40799 -45.8182 Td
-(6709 6711 6712 6713) 11.438 Tj
-24.0799 -45.8182 Td
-(2945 3831 3877 3996) 11.438 Tj
-2.40799 -47.1272 Td
-(6714) 2.408 Tj
-24.0799 -47.1272 Td
-(4022 4033 4129 4214) 11.438 Tj
--1e-05 -48.4363 Td
-(NOFILE 0154) 6.622 Tj
-24.0799 -48.4363 Td
-(4297 4325 4357 4376) 11.438 Tj
-2.40799 -49.7454 Td
-(0154 1938 2151 2394) 11.438 Tj
-24.0799 -49.7454 Td
-(4380 4383 4389 4435) 11.438 Tj
-2.40799 -51.0545 Td
-(5128 5157) 5.418 Tj
-24.0799 -51.0545 Td
-(4590 4709 4724 4736) 11.438 Tj
--1e-05 -52.3636 Td
-(NPROC 0150) 6.02 Tj
-24.0799 -52.3636 Td
-(4815 4821 4829 4967) 11.438 Tj
-2.40799 -53.6727 Td
-(0150 2011 2085 2217) 11.438 Tj
-24.0799 -53.6727 Td
-(4988 5007 5021 5056) 11.438 Tj
-2.40799 -54.9818 Td
-(2346 2369 2406 2411) 11.438 Tj
-24.0799 -54.9818 Td
-(6555 6562) 5.418 Tj
-2.40799 -56.2909 Td
-(2435 2475) 5.418 Tj
-21.6719 -56.2909 Td
-(pic_init 6332) 7.826 Tj
--1e-05 -57.6 Td
-(NREQUEST 0156) 7.826 Tj
-24.0799 -57.6 Td
-(0251 1252 6332) 8.428 Tj
-2.40799 -58.9091 Td
-(0156 3733 3836 3845) 11.438 Tj
-21.6719 -58.9091 Td
-(pinit 2018) 6.02 Tj
-2.40799 -60.2181 Td
-(3860 3862) 5.418 Tj
-24.0799 -60.2181 Td
-(0212 1250 2018) 8.428 Tj
--1e-05 -61.5272 Td
-(NSEGS 1906) 6.02 Tj
-21.6719 -61.5272 Td
-(pipe 5611) 5.418 Tj
-2.40799 -62.8363 Td
-(1906 1966) 5.418 Tj
-24.0799 -62.8363 Td
-(0290 0291 0294 0295) 11.438 Tj
--1e-05 -64.1454 Td
-(O_CREATE 3400) 7.826 Tj
-24.0799 -64.1454 Td
-(0296 3505 4957 4979) 11.438 Tj
-2.40799 -65.4545 Td
-(3400 5263) 5.418 Tj
-24.0799 -65.4545 Td
-(5017 5611 5624 5630) 11.438 Tj
--1e-05 -66.7636 Td
-(O_RDONLY 3401) 7.826 Tj
-24.0799 -66.7636 Td
-(5636 5640 5644 5661) 11.438 Tj
-2.40799 -68.0727 Td
-(3401) 2.408 Tj
-24.0799 -68.0727 Td
-(5680 5706) 5.418 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  cross-references  Page 8) 187.846 Tj
+17.4609 -28.4801 Td
+(6013 6046) 39.3166 Tj
+-13543.9 TJm
+(7201 7206 7225) 61.1592 Tj
+0 -37.9735 Td
+(O_CREATE 3003) 56.7907 Tj
+-11537.1 TJm
+(parsecmd 7118) 56.7907 Tj
+17.4609 -47.4668 Td
+(3003 4861 7178 7181) 83.0018 Tj
+-8527.18 TJm
+(6802 6917 7118) 61.1592 Tj
+0 -56.9602 Td
+(O_RDONLY 3000) 56.7907 Tj
+-11537.1 TJm
+(parseexec 7217) 61.1592 Tj
+17.4609 -66.4535 Td
+(3000 7175) 39.3166 Tj
+-13543.9 TJm
+(7114 7155 7217) 61.1592 Tj
+0 -75.9469 Td
+(O_RDWR 3002) 48.0537 Tj
+-12540.4 TJm
+(parseline 7135) 61.1592 Tj
+17.4609 -85.4403 Td
+(3002 4868 4886 6664) 83.0018 Tj
+-8527.18 TJm
+(7112 7124 7135 7146) 83.0018 Tj
+17.4609 -94.9336 Td
+(6666 6907) 39.3166 Tj
+-13543.9 TJm
+(7208) 17.4741 Tj
+0 -104.427 Td
+(outb 0372) 39.3166 Tj
+-13543.8 TJm
+(parsepipe 7151) 61.1592 Tj
+17.4609 -113.92 Td
+(0372 0933 0941 1164) 83.0018 Tj
+-8527.18 TJm
+(7113 7139 7151 7158) 83.0018 Tj
+17.4609 -123.414 Td
+(1165 1166 1167 1168) 83.0018 Tj
+-6520.6 TJm
+(parseredirs 7164) 69.8962 Tj
+17.4609 -132.907 Td
+(1169 3361 3370 3381) 83.0018 Tj
+-8527.18 TJm
+(7164 7212 7231 7242) 83.0018 Tj
+17.4609 -142.4 Td
+(3382 3383 3384 3385) 83.0018 Tj
+-6520.6 TJm
+(PCINT 5675) 43.6851 Tj
+17.4609 -151.894 Td
+(3386 3388 3391 5645) 83.0018 Tj
+-8527.18 TJm
+(5675 5727) 39.3166 Tj
+17.4609 -161.387 Td
+(5646 5920 5921 5935) 83.0018 Tj
+-6520.6 TJm
+(peek 7101) 39.3166 Tj
+17.4609 -170.88 Td
+(5936 5944 5947 5952) 83.0018 Tj
+-8527.18 TJm
+(7101 7125 7140 7144) 83.0018 Tj
+17.4609 -180.374 Td
+(5962 5965 5966 5967) 83.0018 Tj
+-8527.18 TJm
+(7156 7169 7205 7209) 83.0018 Tj
+17.4609 -189.867 Td
+(5970 5976 5977 5979) 83.0018 Tj
+-8527.18 TJm
+(7224 7232) 39.3166 Tj
+17.4609 -199.361 Td
+(5980 6236 6237 6238) 83.0018 Tj
+-6520.6 TJm
+(pic_enable 5925) 65.5277 Tj
+17.4609 -208.854 Td
+(6256 6258 6275 6276) 83.0018 Tj
+-8527.18 TJm
+(0286 3356 5925 6510) 83.0018 Tj
+17.4609 -218.347 Td
+(6277 6278 6577 6578) 83.0018 Tj
+-8527.18 TJm
+(6580) 17.4741 Tj
+17.4609 -227.841 Td
+(6579) 17.4741 Tj
+-14045.6 TJm
+(pic_init 5932) 56.7907 Tj
+0 -237.334 Td
+(outsl 0384) 43.6851 Tj
+-15048.7 TJm
+(0287 1236 5932) 61.1592 Tj
+17.4609 -246.827 Td
+(0384 3389) 39.3166 Tj
+-11537.3 TJm
+(pic_setmask 5917) 69.8962 Tj
+0 -256.321 Td
+(outw 0378) 39.3166 Tj
+-15550.3 TJm
+(5917 5927 5983) 61.1592 Tj
+17.4609 -265.814 Td
+(0378 1144 1145) 61.1592 Tj
+-9028.94 TJm
+(pinit 1619) 43.6851 Tj
+0 -275.307 Td
+(O_WRONLY 3001) 56.7907 Tj
+-13543.7 TJm
+(0300 1234 1619) 61.1592 Tj
+17.4609 -284.8 Td
+(3001 4868 4885 4886) 83.0018 Tj
+-6520.6 TJm
+(pipe 5160) 39.3166 Tj
+17.4609 -294.294 Td
+(7178 7181) 39.3166 Tj
+-13543.9 TJm
+(0204 0291 0292 0293) 83.0018 Tj
+0 -303.787 Td
+(PAGE 0151) 39.3166 Tj
+-15550.3 TJm
+(3105 4469 4509 4529) 83.0018 Tj
+17.4609 -313.281 Td
+(0151 0152 1758 2233) 83.0018 Tj
+-8527.18 TJm
+(5160 5172 5178 5184) 83.0018 Tj
+17.4609 -322.774 Td
+(2235 2236 2259 2309) 83.0018 Tj
+-8527.18 TJm
+(5188 5192 5215 5251) 83.0018 Tj
+17.4609 -332.267 Td
+(5049 5051 5178 5202) 83.0018 Tj
+-8527.18 TJm
+(5274 6713 6852 6853) 83.0018 Tj
+17.4609 -341.761 Td
+(5228) 17.4741 Tj
+-14045.6 TJm
+(pipealloc 5170) 61.1592 Tj
+0 -351.254 Td
+(panic 6515 6924) 65.5277 Tj
+-12540.3 TJm
+(0290 4984 5170) 61.1592 Tj
+17.4609 -360.747 Td
+(0219 1428 1455 1856) 83.0018 Tj
+-6520.6 TJm
+(pipeclose 5215) 61.1592 Tj
+17.4609 -370.241 Td
+(1858 1860 1906 1909) 83.0018 Tj
+-8527.18 TJm
+(0291 4469 5215) 61.1592 Tj
+17.4609 -379.734 Td
+(2010 2041 2260 2271) 83.0018 Tj
+-6520.6 TJm
+(pipecmd 6784 6980) 74.2647 Tj
+17.4609 -389.227 Td
+(2310 2578 3378 3459) 83.0018 Tj
+-8527.18 TJm
+(6784 6812 6851 6980) 83.0018 Tj
+17.4609 -398.721 Td
+(3461 3463 3596 3617) 83.0018 Tj
+-8527.18 TJm
+(6982 7158 7258 7278) 83.0018 Tj
+17.4609 -408.214 Td
+(3627 3725 3743 3823) 83.0018 Tj
+-6520.6 TJm
+(piperead 5274) 56.7907 Tj
+17.4609 -417.707 Td
+(3858 3878 3887 3908) 83.0018 Tj
+-8527.18 TJm
+(0292 4509 5274) 61.1592 Tj
+17.4609 -427.201 Td
+(3972 4047 4219 4267) 83.0018 Tj
+-6520.6 TJm
+(PIPESIZE 5158) 56.7907 Tj
+17.4609 -436.694 Td
+(4275 4442 4458 4473) 83.0018 Tj
+-8527.18 TJm
+(5158 5166 5257 5266) 83.0018 Tj
+17.4609 -446.188 Td
+(4517 4537 4709 4777) 83.0018 Tj
+-8527.18 TJm
+(5290) 17.4741 Tj
+17.4609 -455.681 Td
+(4786 4843 5638 6515) 83.0018 Tj
+-6520.6 TJm
+(pipewrite 5251) 61.1592 Tj
+17.4609 -465.174 Td
+(6522 6801 6820 6853) 83.0018 Tj
+-8527.18 TJm
+(0293 4529 5251) 61.1592 Tj
+17.4609 -474.668 Td
+(6924 6937 7128 7172) 83.0018 Tj
+-6520.6 TJm
+(printint 6301) 56.7907 Tj
+17.4609 -484.161 Td
+(7206 7210 7236 7241) 83.0018 Tj
+-8527.18 TJm
+(6301 6353 6357) 61.1592 Tj
+0 -493.654 Td
+(parseblock 7201) 65.5277 Tj
+-10533.8 TJm
+(proc 1529) 39.3166 Tj
 Q
 Q
 Q
@@ -2910,7 +3067,10 @@ pdfEndPage
 %%Page: 6 6
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -2918,437 +3078,449 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  cross-references  Page 9) 25.886 Tj
-0 -3.92728 Td
-(pipe_alloc 5621) 9.03 Tj
-24.0799 -3.92728 Td
-(2223 2239 2250 2257) 11.438 Tj
-2.408 -5.23637 Td
-(0293 5176 5621) 8.428 Tj
-24.0799 -5.23637 Td
-(2272 2275 2283 2284) 11.438 Tj
-0 -6.54546 Td
-(pipe_close 5661) 9.03 Tj
-24.0799 -6.54546 Td
-(2313 2315 2317 2319) 11.438 Tj
-2.408 -7.85455 Td
-(0294 5017 5661) 8.428 Tj
-24.0799 -7.85455 Td
-(2320 2333 2334 2355) 11.438 Tj
-0 -9.16364 Td
-(pipe_read 5706) 8.428 Tj
-24.0799 -9.16364 Td
-(2357 2368 2375 2379) 11.438 Tj
-2.408 -10.4727 Td
-(0296 4979 5706) 8.428 Tj
-24.0799 -10.4727 Td
-(2403 2431 2448 2457) 11.438 Tj
-0 -11.7818 Td
-(PIPESIZE 5609) 7.826 Tj
-24.0799 -11.7818 Td
-(2462) 2.408 Tj
-2.408 -13.0909 Td
-(5609 5617 5687 5696) 11.438 Tj
-21.6719 -13.0909 Td
-(proc_wait 2425) 8.428 Tj
-2.408 -14.4 Td
-(5724) 2.408 Tj
-24.0799 -14.4 Td
-(0223 1359 2425 3238) 11.438 Tj
-0 -15.7091 Td
-(pipe_write 5680) 9.03 Tj
-21.6719 -15.7091 Td
-(proghdr 0824) 7.224 Tj
-2.408 -17.0182 Td
-(0295 4957 5680) 8.428 Tj
-24.0799 -17.0182 Td
-(0824 1368 1377 1382) 11.438 Tj
-7.10543e-15 -18.3273 Td
-(pit8253_timerinit 6887) 13.244 Tj
-24.0799 -18.3273 Td
-(5482) 2.408 Tj
-2.408 -19.6364 Td
-(0255 1283 6887) 8.428 Tj
-21.6719 -19.6364 Td
-(read_eflags 0435) 9.632 Tj
-0 -20.9455 Td
-(printint 6473) 7.826 Tj
-24.0799 -20.9455 Td
-(0435) 2.408 Tj
-2.408 -22.2545 Td
-(6473 6522 6525) 8.428 Tj
-21.6719 -22.2545 Td
-(readi 4483) 6.02 Tj
--7.10543e-15 -23.5636 Td
-(proc 1929) 5.418 Tj
-24.0799 -23.5636 Td
-(0335 4483 4723 4814) 11.438 Tj
-2.408 -24.8727 Td
-(0211 0213 0214 0215) 11.438 Tj
-24.0799 -24.8727 Td
-(4982 5494 5502 5569) 11.438 Tj
-2.408 -26.1818 Td
-(0244 0245 0288 1203) 11.438 Tj
-24.0799 -26.1818 Td
-(5576) 2.408 Tj
-2.408 -27.4909 Td
-(1226 1261 1265 1325) 11.438 Tj
-21.6719 -27.4909 Td
-(release 1831) 7.224 Tj
-2.408 -28.8 Td
-(1329 1330 1364 1407) 11.438 Tj
-24.0799 -28.8 Td
-(0283 1231 1334 1831) 11.438 Tj
-2.408 -30.1091 Td
-(1521 1547 1548 1549) 11.438 Tj
-24.0799 -30.1091 Td
-(1834 2113 2118 2223) 11.438 Tj
-2.408 -31.4182 Td
-(1757 1900 1929 1956) 11.438 Tj
-24.0799 -31.4182 Td
-(2239 2275 2284 2300) 11.438 Tj
-2.408 -32.7273 Td
-(1957 2005 2011 2012) 11.438 Tj
-24.0799 -32.7273 Td
-(2318 2321 2334 2357) 11.438 Tj
-2.408 -34.0364 Td
-(2028 2061 2076 2079) 11.438 Tj
-24.0799 -34.0364 Td
-(2375 2379 2448 2457) 11.438 Tj
-2.408 -35.3454 Td
-(2083 2086 2104 2105) 11.438 Tj
-24.0799 -35.3454 Td
-(2653 2674 2680 2685) 11.438 Tj
-2.408 -36.6545 Td
-(2108 2210 2218 2255) 11.438 Tj
-24.0799 -36.6545 Td
-(3793 3867 3920 3983) 11.438 Tj
-2.408 -37.9636 Td
-(2270 2305 2344 2346) 11.438 Tj
-24.0799 -37.9636 Td
-(3992 4047 4206 4221) 11.438 Tj
-2.408 -39.2727 Td
-(2366 2369 2389 2390) 11.438 Tj
-24.0799 -39.2727 Td
-(4333 4364 4448 4935) 11.438 Tj
-2.408 -40.5818 Td
-(2406 2411 2427 2428) 11.438 Tj
-24.0799 -40.5818 Td
-(4939 5014 5024 5058) 11.438 Tj
-2.408 -41.8909 Td
-(2436 2473 2476 2562) 11.438 Tj
-24.0799 -41.8909 Td
-(5673 5689 5700 5714) 11.438 Tj
-2.408 -43.2 Td
-(2853 2883 2938 3004) 11.438 Tj
-24.0799 -43.2 Td
-(5727 6551 6584 6804) 11.438 Tj
-2.408 -44.5091 Td
-(3025 3037 3054 3066) 11.438 Tj
-24.0799 -44.5091 Td
-(6828) 2.408 Tj
-2.408 -45.8182 Td
-(3123 3204 3220 3261) 11.438 Tj
-21.6719 -45.8182 Td
-(run 2567) 4.816 Tj
-2.408 -47.1272 Td
-(3705 3930 4055 4614) 11.438 Tj
-24.0799 -47.1272 Td
-(1583 1940 2103 2203) 11.438 Tj
-2.408 -48.4363 Td
-(4905 5104 5124 5156) 11.438 Tj
-24.0799 -48.4363 Td
-(2214 2567 2568 2571) 11.438 Tj
-2.408 -49.7454 Td
-(5172 5403 5477 5604) 11.438 Tj
-24.0799 -49.7454 Td
-(2607 2608 2609 2623) 11.438 Tj
-2.408 -51.0545 Td
-(5957) 2.408 Tj
-24.0799 -51.0545 Td
-(2662 2671 2915) 8.428 Tj
--7.10543e-15 -52.3636 Td
-(procdump 2470) 7.826 Tj
-21.6719 -52.3636 Td
-(RUNNING 1926) 7.224 Tj
-2.408 -53.6727 Td
-(0225 2470 6790) 8.428 Tj
-24.0799 -53.6727 Td
-(1926 2228 2916) 8.428 Tj
-0 -54.9818 Td
-(process0 1327) 7.826 Tj
-21.6719 -54.9818 Td
-(sched 2253) 6.02 Tj
-2.408 -56.2909 Td
-(1215 1265 1266 1327) 11.438 Tj
-24.0799 -56.2909 Td
-(2253 2258 2260 2274) 11.438 Tj
-7.10543e-15 -57.6 Td
-(proc_exit 2387) 8.428 Tj
-24.0799 -57.6 Td
-(2314 2327 2418) 8.428 Tj
-2.408 -58.9091 Td
-(0221 2387 2461 2887) 11.438 Tj
-21.6719 -58.9091 Td
-(scheduler 2208) 8.428 Tj
-2.408 -60.2181 Td
-(2891 2913 2940 3231) 11.438 Tj
-24.0799 -60.2181 Td
-(0220 1292 1322 1325) 11.438 Tj
-2.408 -61.5272 Td
-(5597) 2.408 Tj
-24.0799 -61.5272 Td
-(1964 2025 2200 2201) 11.438 Tj
-7.10543e-15 -62.8363 Td
-(proc_kill 2364) 8.428 Tj
-24.0799 -62.8363 Td
-(2206 2208 2250 2278) 11.438 Tj
-2.408 -64.1454 Td
-(0222 2364 3248) 8.428 Tj
-24.0799 -64.1454 Td
-(2283 2415) 5.418 Tj
-7.10543e-15 -65.4545 Td
-(proc_table_lock 2009) 12.04 Tj
-21.6719 -65.4545 Td
-(segdesc 0627) 7.224 Tj
-2.408 -66.7636 Td
-(1331 1334 2009 2020) 11.438 Tj
-24.0799 -66.7636 Td
-(0400 0403 0627 0651) 11.438 Tj
-2.408 -68.0727 Td
-(2111 2113 2118 2215) 11.438 Tj
-24.0799 -68.0727 Td
-(0654 0659 1966) 8.428 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  cross-references  Page 9) 187.846 Tj
+17.4609 -28.4801 Td
+(0205 0296 0303 0333) 83.0018 Tj
+-8527.18 TJm
+(1643 1836 1872 1881) 83.0018 Tj
+17.4609 -37.9735 Td
+(0334 1204 1407 1529) 83.0018 Tj
+-8527.18 TJm
+(1919 1932 1969 1987) 83.0018 Tj
+17.4609 -47.4668 Td
+(1535 1559 1605 1610) 83.0018 Tj
+-8527.18 TJm
+(1991 2076 2085 2293) 83.0018 Tj
+17.4609 -56.9602 Td
+(1611 1612 1627 1631) 83.0018 Tj
+-8527.18 TJm
+(2316 2322 2326 2556) 83.0018 Tj
+17.4609 -66.4535 Td
+(1635 1672 1703 1704) 83.0018 Tj
+-8527.18 TJm
+(2875 2880 3409 3426) 83.0018 Tj
+17.4609 -75.9469 Td
+(1707 1754 1810 1818) 83.0018 Tj
+-8527.18 TJm
+(3482 3581 3592 3641) 83.0018 Tj
+17.4609 -85.4403 Td
+(1955 1957 1978 1981) 83.0018 Tj
+-8527.18 TJm
+(3814 3830 3842 3864) 83.0018 Tj
+17.4609 -94.9336 Td
+(2006 2029 2055 2063) 83.0018 Tj
+-8527.18 TJm
+(3892 3910 3919 4428) 83.0018 Tj
+17.4609 -104.427 Td
+(2115 2120 2504 2581) 83.0018 Tj
+-8527.18 TJm
+(4432 4444 4460 4466) 83.0018 Tj
+17.4609 -113.92 Td
+(2654 2666 2678 2804) 83.0018 Tj
+-8527.18 TJm
+(5225 5259 5269 5281) 83.0018 Tj
+17.4609 -123.414 Td
+(2809 3306 3667 4555) 83.0018 Tj
+-8527.18 TJm
+(5293 6381 6393 6447) 83.0018 Tj
+17.4609 -132.907 Td
+(5003 5154 5510 5606) 83.0018 Tj
+-8527.18 TJm
+(6462 6484) 39.3166 Tj
+17.4609 -142.4 Td
+(5619 5620 5621 6211) 83.0018 Tj
+-6520.6 TJm
+(ROOTDEV 0159) 52.4222 Tj
+0 -151.894 Td
+(procdump 2104) 56.7907 Tj
+-13543.7 TJm
+(0159 4359) 39.3166 Tj
+17.4609 -161.387 Td
+(0301 2104 6420) 61.1592 Tj
+-9028.94 TJm
+(run 2214) 34.9481 Tj
+0 -170.88 Td
+(proc_table_lock 1608) 87.3703 Tj
+-10032 TJm
+(2111 2214 2215 2218) 83.0018 Tj
+17.4609 -180.374 Td
+(1608 1621 1633 1639) 83.0018 Tj
+-8527.18 TJm
+(2257 2266 2267 2269) 83.0018 Tj
+17.4609 -189.867 Td
+(1643 1815 1836 1857) 83.0018 Tj
+-8527.18 TJm
+(2307) 17.4741 Tj
+17.4609 -199.361 Td
+(1858 1869 1872 1881) 83.0018 Tj
+-6520.6 TJm
+(runcmd 6806) 48.0537 Tj
+17.4609 -208.854 Td
+(1917 1918 1931 1932) 83.0018 Tj
+-8527.18 TJm
+(6806 6820 6837 6843) 83.0018 Tj
+17.4609 -218.347 Td
+(1967 1969 1980 1987) 83.0018 Tj
+-8527.18 TJm
+(6845 6859 6866 6877) 83.0018 Tj
+17.4609 -227.841 Td
+(1991 2023 2058 2076) 83.0018 Tj
+-8527.18 TJm
+(6917) 17.4741 Tj
+17.4609 -237.334 Td
+(2085 2090) 39.3166 Tj
+-11537.3 TJm
+(RUNNING 1526) 52.4222 Tj
+0 -246.827 Td
+(proghdr 0824) 52.4222 Tj
+-14045.3 TJm
+(1526 1827 1855 2111) 83.0018 Tj
+17.4609 -256.321 Td
+(0824 1120 1133 5016) 83.0018 Tj
+-8527.18 TJm
+(2595) 17.4741 Tj
+0 -265.814 Td
+(readi 4102) 43.6851 Tj
+-13042.1 TJm
+(safestrcpy 5375) 65.5277 Tj
+17.4609 -275.307 Td
+(0247 4102 4266 4512) 83.0018 Tj
+-8527.18 TJm
+(0324 1776 5097 5375) 83.0018 Tj
+17.4609 -284.8 Td
+(4708 4709 5027 5032) 83.0018 Tj
+-6520.6 TJm
+(sched 1853) 43.6851 Tj
+17.4609 -294.294 Td
+(5059 5065) 39.3166 Tj
+-13543.8 TJm
+(1853 1856 1858 1860) 83.0018 Tj
+0 -303.787 Td
+(readsb 3679) 48.0537 Tj
+-14547 TJm
+(1871 1925 2040) 61.1592 Tj
+17.4609 -313.281 Td
+(3679 3711 3738 3959) 83.0018 Tj
+-6520.6 TJm
+(scheduler 1808) 61.1592 Tj
+0 -322.774 Td
+(readsect 1160) 56.7907 Tj
+-13543.7 TJm
+(0302 1254 1272 1808) 83.0018 Tj
+17.4609 -332.267 Td
+(1160 1196) 39.3166 Tj
+-11537.3 TJm
+(SCROLLLOCK 6014) 65.5277 Tj
+0 -341.761 Td
+(readseg 1179) 52.4222 Tj
+-14045.3 TJm
+(6014 6047) 39.3166 Tj
+17.4609 -351.254 Td
+(1114 1126 1136 1179) 83.0018 Tj
+-6520.6 TJm
+(SECTSIZE 1112) 56.7907 Tj
+0 -360.747 Td
+(REDIR 6758) 43.6851 Tj
+-15048.7 TJm
+(1112 1126 1173 1187) 83.0018 Tj
+17.4609 -370.241 Td
+(6758 6830 6970 7271) 83.0018 Tj
+-8527.18 TJm
+(1190 1195) 39.3166 Tj
+0 -379.734 Td
+(redircmd 6775 6964) 78.6333 Tj
+-9028.76 TJm
+(SEG 0654) 34.9481 Tj
+17.4609 -389.227 Td
+(6775 6813 6831 6964) 83.0018 Tj
+-8527.18 TJm
+(0654 1684 1685 1689) 83.0018 Tj
+17.4609 -398.721 Td
+(6966 7175 7178 7181) 83.0018 Tj
+-8527.18 TJm
+(1690) 17.4741 Tj
+17.4609 -408.214 Td
+(7259 7272) 39.3166 Tj
+-11537.3 TJm
+(SEG16 0659) 43.6851 Tj
+0 -417.707 Td
+(REG_ID 5810) 48.0537 Tj
+-14547 TJm
+(0659 1686) 39.3166 Tj
+17.4609 -427.201 Td
+(5810 5860) 39.3166 Tj
+-11537.3 TJm
+(SEG_ASM 0558) 52.4222 Tj
+0 -436.694 Td
+(REG_TABLE 5812) 61.1592 Tj
+-13042 TJm
+(0558 0985 0986 1081) 83.0018 Tj
+17.4609 -446.188 Td
+(5812 5867 5868 5881) 83.0018 Tj
+-8527.18 TJm
+(1082) 17.4741 Tj
+17.4609 -455.681 Td
+(5882) 17.4741 Tj
+-14045.6 TJm
+(segdesc 0627) 52.4222 Tj
+0 -465.174 Td
+(REG_VER 5811) 52.4222 Tj
+-14045.3 TJm
+(0400 0403 0627 0651) 83.0018 Tj
+17.4609 -474.668 Td
+(5811 5859) 39.3166 Tj
+-13543.8 TJm
+(0654 0659 1570) 61.1592 Tj
+0 -484.161 Td
+(release 1452) 52.4222 Tj
+-12038.8 TJm
+(SEG_KCODE 1501) 61.1592 Tj
+17.4609 -493.654 Td
+(0318 1452 1455 1639) 83.0018 Tj
+-8527.18 TJm
+(1501 1684 2521 2522) 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  cross-references  Page 10) 26.488 Tj
-0 -3.92728 Td
-(SEG_KCODE 1901) 8.428 Tj
-21.6719 -3.92728 Td
-(stati 4470) 6.02 Tj
-2.408 -5.23637 Td
-(1901 2040 2869 2870) 11.438 Tj
-24.0799 -5.23637 Td
-(0334 4470 5034) 8.428 Tj
-7.10543e-15 -6.54546 Td
-(SEG_KDATA 1902) 8.428 Tj
-21.6719 -6.54546 Td
-(STA_W 0566 0668) 9.03 Tj
-2.408 -7.85455 Td
-(1902 2032 2041 2760) 11.438 Tj
-24.0799 -7.85455 Td
-(0566 0668 1096 1174) 11.438 Tj
-1.42109e-14 -9.16364 Td
-(SEG_NULLASM 0554) 9.632 Tj
-24.0799 -9.16364 Td
-(2041 2046) 5.418 Tj
-2.408 -10.4727 Td
-(0554 1094 1172) 8.428 Tj
-21.6719 -10.4727 Td
-(STA_X 0563 0665) 9.03 Tj
-7.10543e-15 -11.7818 Td
-(SEG_TSS 1905) 7.224 Tj
-24.0799 -11.7818 Td
-(0563 0665 1095 1173) 11.438 Tj
-2.408 -13.0909 Td
-(1905 2042 2043 2053) 11.438 Tj
-24.0799 -13.0909 Td
-(2040 2045) 5.418 Tj
-7.10543e-15 -14.4 Td
-(SEG_UCODE 1903) 8.428 Tj
-21.6719 -14.4 Td
-(sti 0485) 4.816 Tj
-2.408 -15.7091 Td
-(1350 1903 2045 2048) 11.438 Tj
-24.0799 -15.7091 Td
-(0485 0487 1290 1320) 11.438 Tj
-1.42109e-14 -17.0182 Td
-(SEG_UDATA 1904) 8.428 Tj
-24.0799 -17.0182 Td
-(1845) 2.408 Tj
-2.408 -18.3273 Td
-(1349 1904 2046 2049) 11.438 Tj
-21.6719 -18.3273 Td
-(strncmp 5801) 7.224 Tj
-7.10543e-15 -19.6364 Td
-(setupsegs 2028) 8.428 Tj
-24.0799 -19.6364 Td
-(0240 1558 5801) 8.428 Tj
-2.408 -20.9455 Td
-(0214 1270 1313 2028) 11.438 Tj
-21.6719 -20.9455 Td
-(STS_CG16 0676) 7.826 Tj
-2.408 -22.2545 Td
-(2226 2236 3267 5585) 11.438 Tj
-24.0799 -22.2545 Td
-(0676) 2.408 Tj
-7.10543e-15 -23.5636 Td
-(shift 6740) 6.02 Tj
-21.6719 -23.5636 Td
-(STS_CG32 0682) 7.826 Tj
-2.408 -24.8727 Td
-(6740 6756 6760 6761) 11.438 Tj
-24.0799 -24.8727 Td
-(0682) 2.408 Tj
-2.408 -26.1818 Td
-(6763 6766 6769 6770) 11.438 Tj
-21.6719 -26.1818 Td
-(STS_IG16 0678) 7.826 Tj
-2.408 -27.4909 Td
-(6772 6773) 5.418 Tj
-24.0799 -27.4909 Td
-(0678) 2.408 Tj
-1.42109e-14 -28.8 Td
-(sleep 2303) 6.02 Tj
-21.6719 -28.8 Td
-(STS_IG32 0683) 7.826 Tj
-2.408 -30.1091 Td
-(0218 1803 2300 2303) 11.438 Tj
-24.0799 -30.1091 Td
-(0683 0764) 5.418 Tj
-2.408 -31.4182 Td
-(2308 2311 2324 2372) 11.438 Tj
-21.6719 -31.4182 Td
-(STS_LDT 0674) 7.224 Tj
-2.408 -32.7273 Td
-(2462 3837 3851 3907) 11.438 Tj
-24.0799 -32.7273 Td
-(0674) 2.408 Tj
-2.408 -34.0364 Td
-(3979 4076 4197 4330) 11.438 Tj
-21.6719 -34.0364 Td
-(STS_T16A 0673) 7.826 Tj
-2.408 -35.3454 Td
-(5693 5717 6815) 8.428 Tj
-24.0799 -35.3454 Td
-(0673) 2.408 Tj
-2.13163e-14 -36.6545 Td
-(spinlock 1701) 7.826 Tj
-21.6719 -36.6545 Td
-(STS_T16B 0675) 7.826 Tj
-2.408 -37.9636 Td
-(0216 0218 0279 0280) 11.438 Tj
-24.0799 -37.9636 Td
-(0675) 2.408 Tj
-2.408 -39.2727 Td
-(0281 0282 0283 0284) 11.438 Tj
-21.6719 -39.2727 Td
-(STS_T32A 0680) 7.826 Tj
-2.408 -40.5818 Td
-(1210 1331 1701 1758) 11.438 Tj
-24.0799 -40.5818 Td
-(0680 2042) 5.418 Tj
-2.408 -41.8909 Td
-(1763 1805 1831 1852) 11.438 Tj
-21.6719 -41.8909 Td
-(STS_T32B 0681) 7.826 Tj
-2.408 -43.2 Td
-(2007 2009 2303 2563) 11.438 Tj
-24.0799 -43.2 Td
-(0681) 2.408 Tj
-2.408 -44.5091 Td
-(2565 3009 3209 3709) 11.438 Tj
-21.6719 -44.5091 Td
-(STS_TG 0677) 6.622 Tj
-2.408 -45.8182 Td
-(3735 3932 3936 4057) 11.438 Tj
-24.0799 -45.8182 Td
-(0677) 2.408 Tj
-2.408 -47.1272 Td
-(4079 4908 4913 5109) 11.438 Tj
-21.6719 -47.1272 Td
-(STS_TG16 0679) 7.826 Tj
-2.408 -48.4363 Td
-(5607 5616 6404 6409) 11.438 Tj
-24.0799 -48.4363 Td
-(0679) 2.408 Tj
-2.408 -49.7454 Td
-(6739) 2.408 Tj
-21.6719 -49.7454 Td
-(STS_TG32 0684) 7.826 Tj
-2.13163e-14 -51.0545 Td
-(STA_A 0568 0670) 9.03 Tj
-24.0799 -51.0545 Td
-(0684 0764) 5.418 Tj
-2.408 -52.3636 Td
-(0568 0670) 5.418 Tj
-21.6719 -52.3636 Td
-(superblock 3560) 9.03 Tj
-1.42109e-14 -53.6727 Td
-(STA_C 0565 0667) 9.03 Tj
-24.0799 -53.6727 Td
-(3560 4106 4113 4155) 11.438 Tj
-2.408 -54.9818 Td
-(0565 0667) 5.418 Tj
-24.0799 -54.9818 Td
-(4161 4277 4283) 8.428 Tj
-1.42109e-14 -56.2909 Td
-(STA_E 0564 0666) 9.03 Tj
-21.6719 -56.2909 Td
-(syscall 3121) 7.224 Tj
-2.408 -57.6 Td
-(0564 0666) 5.418 Tj
-24.0799 -57.6 Td
-(0242 0243 1207 2857) 11.438 Tj
-2.13163e-14 -58.9091 Td
-(STA_R 0567 0669) 9.03 Tj
-24.0799 -58.9091 Td
-(2889 3008 3121 3208) 11.438 Tj
-2.408 -60.2181 Td
-(0567 0669 1095 1173) 11.438 Tj
-24.0799 -60.2181 Td
-(5108) 2.408 Tj
-2.408 -61.5272 Td
-(2040 2045) 5.418 Tj
-21.6719 -61.5272 Td
-(SYS_chdir 2716) 8.428 Tj
-1.42109e-14 -62.8363 Td
-(stat 3450) 5.418 Tj
-24.0799 -62.8363 Td
-(2716 3173) 5.418 Tj
-2.408 -64.1454 Td
-(0301 0307 0334 1651) 11.438 Tj
-21.6719 -64.1454 Td
-(SYS_close 2707) 8.428 Tj
-2.408 -65.4545 Td
-(3001 3201 3450 4051) 11.438 Tj
-24.0799 -65.4545 Td
-(2707 3146) 5.418 Tj
-2.408 -66.7636 Td
-(4468 4470 4901 5030) 11.438 Tj
-21.6719 -66.7636 Td
-(SYS_dup 2717) 7.224 Tj
-2.408 -68.0727 Td
-(5101 5443) 5.418 Tj
-24.0799 -68.0727 Td
-(2717 3176) 5.418 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  cross-references  Page 10) 192.215 Tj
+0 -28.4801 Td
+(SEG_KDATA 1502) 61.1592 Tj
+-11035.4 TJm
+(STA_W 0566 0670) 65.5277 Tj
+17.4609 -37.9735 Td
+(1502 1677 1685) 61.1592 Tj
+-11035.5 TJm
+(0566 0670 0986 1082) 83.0018 Tj
+0 -47.4668 Td
+(SEG_NULL 0651) 56.7907 Tj
+-13543.7 TJm
+(1685 1690) 39.3166 Tj
+17.4609 -56.9602 Td
+(0651 1683 1692 1693) 83.0018 Tj
+-6520.6 TJm
+(STA_X 0563 0667) 65.5277 Tj
+0 -66.4535 Td
+(SEG_NULLASM 0554) 69.8962 Tj
+-12038.7 TJm
+(0563 0667 0985 1081) 83.0018 Tj
+17.4609 -75.9469 Td
+(0554 0984 1080) 61.1592 Tj
+-11035.5 TJm
+(1684 1689) 39.3166 Tj
+0 -85.4403 Td
+(SEG_TSS 1505) 52.4222 Tj
+-12038.8 TJm
+(sti 0488) 34.9481 Tj
+17.4609 -94.9336 Td
+(1505 1686 1687 1697) 83.0018 Tj
+-8527.18 TJm
+(0488 0490 1252 1270) 83.0018 Tj
+0 -104.427 Td
+(SEG_UCODE 1503) 61.1592 Tj
+-13042 TJm
+(1466) 17.4741 Tj
+17.4609 -113.92 Td
+(1503 1689 1692 1762) 83.0018 Tj
+-6520.6 TJm
+(strlen 5389) 48.0537 Tj
+0 -123.413 Td
+(SEG_UDATA 1504) 61.1592 Tj
+-13042 TJm
+(0325 5044 5078 5389) 83.0018 Tj
+17.4609 -132.907 Td
+(1504 1690 1693 1763) 83.0018 Tj
+-8527.18 TJm
+(7123) 17.4741 Tj
+0 -142.4 Td
+(SETGATE 0771) 52.4222 Tj
+-12038.8 TJm
+(strncmp 5351) 52.4222 Tj
+17.4609 -151.893 Td
+(0771 2521 2522) 61.1592 Tj
+-11035.5 TJm
+(0326 4205 5351) 61.1592 Tj
+0 -161.387 Td
+(setupsegs 1672) 61.1592 Tj
+-11035.4 TJm
+(strncpy 5361) 52.4222 Tj
+17.4609 -170.88 Td
+(0303 1243 1264 1672) 83.0018 Tj
+-8527.18 TJm
+(0327 4272 5361) 61.1592 Tj
+17.4609 -180.373 Td
+(1826 1833 2860 5106) 83.0018 Tj
+-6520.6 TJm
+(STS_IG32 0685) 56.7907 Tj
+0 -189.867 Td
+(SHIFT 6008) 43.6851 Tj
+-15048.7 TJm
+(0685 0777) 39.3166 Tj
+17.4609 -199.36 Td
+(6008 6036 6037 6185) 83.0018 Tj
+-6520.6 TJm
+(STS_T32A 0682) 56.7907 Tj
+0 -208.854 Td
+(skipelem 4314) 56.7907 Tj
+-13543.7 TJm
+(0682 1686) 39.3166 Tj
+17.4609 -218.347 Td
+(4314 4363) 39.3166 Tj
+-11537.3 TJm
+(STS_TG32 0686) 56.7907 Tj
+0 -227.84 Td
+(sleep 1903) 43.6851 Tj
+-15048.7 TJm
+(0686 0777) 39.3166 Tj
+17.4609 -237.334 Td
+(0304 1903 1906 1909) 83.0018 Tj
+-6520.6 TJm
+(STUB 6703 6710 6711 6712 6713 6714) 148.529 Tj
+17.4609 -246.827 Td
+(2090 2109 2878 3480) 83.0018 Tj
+-8527.18 TJm
+(6710 6711 6712 6713) 83.0018 Tj
+17.4609 -256.32 Td
+(3577 3862 5263 5284) 83.0018 Tj
+-8527.18 TJm
+(6714 6715 6716 6717) 83.0018 Tj
+17.4609 -265.814 Td
+(6466 6729) 39.3166 Tj
+-13543.9 TJm
+(6718 6719 6720 6721) 83.0018 Tj
+0 -275.307 Td
+(spinlock 1301) 56.7907 Tj
+-13543.7 TJm
+(6722 6723 6724 6725) 83.0018 Tj
+17.4609 -284.8 Td
+(0206 0304 0314 0316) 83.0018 Tj
+-8527.18 TJm
+(6726 6727 6728 6729) 83.0018 Tj
+17.4609 -294.294 Td
+(0317 0318 0344 1301) 83.0018 Tj
+-6520.6 TJm
+(sum 5525) 34.9481 Tj
+17.4609 -303.787 Td
+(1408 1413 1425 1452) 83.0018 Tj
+-8527.18 TJm
+(5525 5527 5529 5531) 83.0018 Tj
+17.4609 -313.281 Td
+(1489 1606 1608 1903) 83.0018 Tj
+-8527.18 TJm
+(5532 5543 5592) 61.1592 Tj
+17.4609 -322.774 Td
+(2210 2212 2507 2512) 83.0018 Tj
+-6520.6 TJm
+(superblock 3160) 65.5277 Tj
+17.4609 -332.267 Td
+(3309 3324 3526 3530) 83.0018 Tj
+-8527.18 TJm
+(3160 3679 3708 3733) 83.0018 Tj
+17.4609 -341.761 Td
+(3668 3784 4404 4408) 83.0018 Tj
+-8527.18 TJm
+(3957) 17.4741 Tj
+17.4609 -351.254 Td
+(5156 5165 6208 6220) 83.0018 Tj
+-6520.6 TJm
+(SVR 5661) 34.9481 Tj
+17.4609 -360.747 Td
+(6402) 17.4741 Tj
+-16052.2 TJm
+(5661 5707) 39.3166 Tj
+0 -370.241 Td
+(STA_R 0567 0671) 65.5277 Tj
+-10533.8 TJm
+(swtch 2156) 43.6851 Tj
+17.4609 -379.734 Td
+(0567 0671 0985 1081) 83.0018 Tj
+-8527.18 TJm
+(0311 1828 1862 2155) 83.0018 Tj
+17.4609 -389.227 Td
+(1684 1689) 39.3166 Tj
+-13543.9 TJm
+(2156) 17.4741 Tj
+0 -398.721 Td
+(start 0912 1025 6607) 87.3703 Tj
+-8025.43 TJm
+(syscall 2774) 52.4222 Tj
+17.4609 -408.214 Td
+(0911 0912 0974 1024) 83.0018 Tj
+-8527.18 TJm
+(0335 2540 2656 2774) 83.0018 Tj
+17.4609 -417.707 Td
+(1025 1073 1074 2229) 83.0018 Tj
+-6520.6 TJm
+(SYS_chdir 2616) 61.1592 Tj
+17.4609 -427.2 Td
+(2232 2233 2236 6606) 83.0018 Tj
+-8527.18 TJm
+(2616 2751) 39.3166 Tj
+17.4609 -436.694 Td
+(6607) 17.4741 Tj
+-14045.6 TJm
+(SYS_close 2607) 61.1592 Tj
+0 -446.187 Td
+(stat 3050) 39.3166 Tj
+-15550.3 TJm
+(2607 2752) 39.3166 Tj
+17.4609 -455.681 Td
+(0207 0230 0248 3050) 83.0018 Tj
+-6520.6 TJm
+(SYS_dup 2617) 52.4222 Tj
+17.4609 -465.174 Td
+(3665 4082 4478 4553) 83.0018 Tj
+-8527.18 TJm
+(2617 2753) 39.3166 Tj
+17.4609 -474.667 Td
+(4654 6653) 39.3166 Tj
+-11537.3 TJm
+(SYS_exec 2609) 56.7907 Tj
+0 -484.161 Td
+(stati 4082) 43.6851 Tj
+-15048.7 TJm
+(2609 2754 6611) 61.1592 Tj
+17.4609 -493.654 Td
+(0248 4082 4482) 61.1592 Tj
+-9028.94 TJm
+(SYS_exit 2602) 56.7907 Tj
 Q
 Q
 Q
@@ -3360,6 +3532,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -3367,337 +3542,263 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  cross-references  Page 11) 26.488 Tj
-0 -3.92728 Td
-(SYS_exec 2709) 7.826 Tj
-21.6719 -3.92728 Td
-(T_DEV 3584) 6.02 Tj
-2.408 -5.23637 Td
-(2709 3152) 5.418 Tj
-24.0799 -5.23637 Td
-(1666 3575 3576 3584) 11.438 Tj
-7.10543e-15 -6.54546 Td
-(SYS_exit 2702) 7.826 Tj
-24.0799 -6.54546 Td
-(4488 4554) 5.418 Tj
-2.408 -7.85455 Td
-(2702 3131) 5.418 Tj
-21.6719 -7.85455 Td
-(T_DEVICE 2810) 7.826 Tj
-0 -9.16364 Td
-(SYS_fork 2701) 7.826 Tj
-24.0799 -9.16364 Td
-(2810) 2.408 Tj
-2.408 -10.4727 Td
-(2701 3128) 5.418 Tj
-21.6719 -10.4727 Td
-(T_DIR 3582) 6.02 Tj
--7.10543e-15 -11.7818 Td
-(SYS_fstat 2713) 8.428 Tj
-24.0799 -11.7818 Td
-(3582 4558 4581 4652) 11.438 Tj
-2.408 -13.0909 Td
-(2713 3164) 5.418 Tj
-24.0799 -13.0909 Td
-(4859 5272 5281 5366) 11.438 Tj
--7.10543e-15 -14.4 Td
-(SYS_getpid 2718) 9.03 Tj
-24.0799 -14.4 Td
-(5418) 2.408 Tj
-2.408 -15.7091 Td
-(2718 3179) 5.418 Tj
-21.6719 -15.7091 Td
-(T_DIVIDE 2803) 7.826 Tj
--1.42109e-14 -17.0182 Td
-(SYS_kill 2708) 7.826 Tj
-24.0799 -17.0182 Td
-(2803) 2.408 Tj
-2.408 -18.3273 Td
-(2708 3149) 5.418 Tj
-21.6719 -18.3273 Td
-(T_FILE 3583) 6.622 Tj
--2.13163e-14 -19.6364 Td
-(SYS_link 2714) 7.826 Tj
-24.0799 -19.6364 Td
-(3583 4558 5266) 8.428 Tj
-2.408 -20.9455 Td
-(2714 3167) 5.418 Tj
-21.6719 -20.9455 Td
-(T_FPERR 2819) 7.224 Tj
--2.84217e-14 -22.2545 Td
-(SYS_mkdir 2715) 8.428 Tj
-24.0799 -22.2545 Td
-(2819) 2.408 Tj
-2.408 -23.5636 Td
-(2715 3170) 5.418 Tj
-21.6719 -23.5636 Td
-(T_GPFLT 2816) 7.224 Tj
--3.55271e-14 -24.8727 Td
-(SYS_mknod 2711) 8.428 Tj
-24.0799 -24.8727 Td
-(2816) 2.408 Tj
-2.408 -26.1818 Td
-(2711 3158) 5.418 Tj
-21.6719 -26.1818 Td
-(T_ILLOP 2809) 7.224 Tj
--4.26326e-14 -27.4909 Td
-(SYS_open 2710) 7.826 Tj
-24.0799 -27.4909 Td
-(2809) 2.408 Tj
-2.408 -28.8 Td
-(2710 3155) 5.418 Tj
-21.6719 -28.8 Td
-(TIMER_16BIT 6883) 9.632 Tj
--4.9738e-14 -30.1091 Td
-(SYS_pipe 2704) 7.826 Tj
-24.0799 -30.1091 Td
-(6883 6890) 5.418 Tj
-2.408 -31.4182 Td
-(2704 3137) 5.418 Tj
-21.6719 -31.4182 Td
-(TIMER_BCD 6884) 8.428 Tj
--5.68434e-14 -32.7273 Td
-(SYS_read 2706) 7.826 Tj
-24.0799 -32.7273 Td
-(6884) 2.408 Tj
-2.408 -34.0364 Td
-(2706 3143) 5.418 Tj
-21.6719 -34.0364 Td
-(TIMER_FREQ 6864) 9.03 Tj
--6.39488e-14 -35.3454 Td
-(SYS_sbrk 2719) 7.826 Tj
-24.0799 -35.3454 Td
-(6861 6864 6865) 8.428 Tj
-2.408 -36.6545 Td
-(2719 3182) 5.418 Tj
-21.6719 -36.6545 Td
-(TIMER_HWSTROBE 6879) 11.438 Tj
--7.10543e-14 -37.9636 Td
-(SYS_unlink 2712) 9.03 Tj
-24.0799 -37.9636 Td
-(6879) 2.408 Tj
-2.408 -39.2727 Td
-(2712 3161) 5.418 Tj
-21.6719 -39.2727 Td
-(TIMER_INTTC 6874) 9.632 Tj
--7.81597e-14 -40.5818 Td
-(SYS_wait 2703) 7.826 Tj
-24.0799 -40.5818 Td
-(6874) 2.408 Tj
-2.408 -41.8909 Td
-(2703 3134) 5.418 Tj
-21.6719 -41.8909 Td
-(TIMER_LATCH 6880) 9.632 Tj
--8.52651e-14 -43.2 Td
-(SYS_write 2705) 8.428 Tj
-24.0799 -43.2 Td
-(6880) 2.408 Tj
-2.408 -44.5091 Td
-(2705 3140) 5.418 Tj
-21.6719 -44.5091 Td
-(TIMER_LSB 6881) 8.428 Tj
--9.23706e-14 -45.8182 Td
-(tail 3734) 5.418 Tj
-24.0799 -45.8182 Td
-(6881) 2.408 Tj
-2.408 -47.1272 Td
-(3722 3734 3792 3806) 11.438 Tj
-21.6719 -47.1272 Td
-(TIMER_MSB 6882) 8.428 Tj
-2.408 -48.4363 Td
-(3807 3836 3860 3862) 11.438 Tj
-24.0799 -48.4363 Td
-(6882) 2.408 Tj
-2.408 -49.7454 Td
-(3940) 2.408 Tj
-21.6719 -49.7454 Td
-(TIMER_ONESHOT 6875) 10.836 Tj
--9.9476e-14 -51.0545 Td
-(T_ALIGN 2820) 7.224 Tj
-24.0799 -51.0545 Td
-(6875) 2.408 Tj
-2.408 -52.3636 Td
-(2820) 2.408 Tj
-21.6719 -52.3636 Td
-(TIMER_RATEGEN 6876) 10.836 Tj
--1.06581e-13 -53.6727 Td
-(taskstate 0687) 8.428 Tj
-24.0799 -53.6727 Td
-(6876 6890) 5.418 Tj
-2.408 -54.9818 Td
-(0687 1965) 5.418 Tj
-21.6719 -54.9818 Td
-(TIMER_SEL0 6871) 9.03 Tj
--1.13687e-13 -56.2909 Td
-(T_BOUND 2808) 7.224 Tj
-24.0799 -56.2909 Td
-(6871 6890) 5.418 Tj
-2.408 -57.6 Td
-(2808) 2.408 Tj
-21.6719 -57.6 Td
-(TIMER_SEL1 6872) 9.03 Tj
--1.20792e-13 -58.9091 Td
-(T_BRKPT 2806) 7.224 Tj
-24.0799 -58.9091 Td
-(6872) 2.408 Tj
-2.408 -60.2181 Td
-(2806) 2.408 Tj
-21.6719 -60.2181 Td
-(TIMER_SEL2 6873) 9.03 Tj
--1.27898e-13 -61.5272 Td
-(T_DBLFLT 2811) 7.826 Tj
-24.0799 -61.5272 Td
-(6873) 2.408 Tj
-2.408 -62.8363 Td
-(2811) 2.408 Tj
-21.6719 -62.8363 Td
-(TIMER_SQWAVE 6877) 10.234 Tj
--1.35003e-13 -64.1454 Td
-(T_DEBUG 2804) 7.224 Tj
-24.0799 -64.1454 Td
-(6877) 2.408 Tj
-2.408 -65.4545 Td
-(2804) 2.408 Tj
-21.6719 -65.4545 Td
-(TIMER_SWSTROBE 6878) 11.438 Tj
--1.42109e-13 -66.7636 Td
-(T_DEFAULT 2827) 8.428 Tj
-24.0799 -66.7636 Td
-(6878) 2.408 Tj
-2.408 -68.0727 Td
-(2827) 2.408 Tj
-21.6719 -68.0727 Td
-(T_MCHK 2821) 6.622 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  cross-references  Page 11) 192.215 Tj
+17.4609 -28.4801 Td
+(2602 2755 6616) 61.1592 Tj
+-11035.5 TJm
+(2556 2871 2875 2878) 83.0018 Tj
+0 -37.9735 Td
+(SYS_fork 2601) 56.7907 Tj
+-13543.7 TJm
+(2880) 17.4741 Tj
+17.4609 -47.4668 Td
+(2601 2756) 39.3166 Tj
+-11537.3 TJm
+(TICR 5680) 39.3166 Tj
+0 -56.9602 Td
+(SYS_fstat 2613) 61.1592 Tj
+-13042 TJm
+(5680 5716) 39.3166 Tj
+17.4609 -66.4535 Td
+(2613 2757) 39.3166 Tj
+-11537.3 TJm
+(TIMER 5672) 43.6851 Tj
+0 -75.9469 Td
+(SYS_getpid 2618) 65.5277 Tj
+-12540.3 TJm
+(5672 5718) 39.3166 Tj
+17.4609 -85.4403 Td
+(2618 2758) 39.3166 Tj
+-11537.3 TJm
+(TIMER_16BIT 6571) 69.8962 Tj
+0 -94.9336 Td
+(SYS_kill 2608) 56.7907 Tj
+-13543.7 TJm
+(6571 6577) 39.3166 Tj
+17.4609 -104.427 Td
+(2608 2759) 39.3166 Tj
+-11537.3 TJm
+(TIMER_DIV 6566) 61.1592 Tj
+0 -113.92 Td
+(SYS_link 2614) 56.7907 Tj
+-13543.7 TJm
+(6566 6578 6579) 61.1592 Tj
+17.4609 -123.413 Td
+(2614 2760) 39.3166 Tj
+-11537.3 TJm
+(TIMER_FREQ 6565) 65.5277 Tj
+0 -132.907 Td
+(SYS_mkdir 2615) 61.1592 Tj
+-13042 TJm
+(6565 6566) 39.3166 Tj
+17.4609 -142.4 Td
+(2615 2761) 39.3166 Tj
+-11537.3 TJm
+(timer_init 6574) 65.5277 Tj
+0 -151.893 Td
+(SYS_mknod 2611) 61.1592 Tj
+-13042 TJm
+(0338 1248 6574) 61.1592 Tj
+17.4609 -161.387 Td
+(2611 2762) 39.3166 Tj
+-11537.3 TJm
+(TIMER_MODE 6568) 65.5277 Tj
+0 -170.88 Td
+(SYS_open 2610) 56.7907 Tj
+-13543.7 TJm
+(6568 6577) 39.3166 Tj
+17.4609 -180.373 Td
+(2610 2763) 39.3166 Tj
+-11537.3 TJm
+(TIMER_RATEGEN 6570) 78.6333 Tj
+0 -189.867 Td
+(SYS_pipe 2604) 56.7907 Tj
+-13543.7 TJm
+(6570 6577) 39.3166 Tj
+17.4609 -199.36 Td
+(2604 2764) 39.3166 Tj
+-11537.3 TJm
+(TIMER_SEL0 6569) 65.5277 Tj
+0 -208.854 Td
+(SYS_read 2606) 56.7907 Tj
+-13543.7 TJm
+(6569 6577) 39.3166 Tj
+17.4609 -218.347 Td
+(2606 2765) 39.3166 Tj
+-11537.3 TJm
+(TPR 5659) 34.9481 Tj
+0 -227.84 Td
+(SYS_sbrk 2619) 56.7907 Tj
+-13543.7 TJm
+(5659 5746) 39.3166 Tj
+17.4609 -237.334 Td
+(2619 2766) 39.3166 Tj
+-11537.3 TJm
+(trap 2534) 39.3166 Tj
+0 -246.827 Td
+(SYS_sleep 2620) 61.1592 Tj
+-13042 TJm
+(2402 2404 2469 2534) 83.0018 Tj
+17.4609 -256.32 Td
+(2620 2767) 39.3166 Tj
+-13543.8 TJm
+(2576 2578 2581) 61.1592 Tj
+0 -265.813 Td
+(SYS_unlink 2612) 65.5277 Tj
+-10533.8 TJm
+(trapframe 0501) 61.1592 Tj
+17.4609 -275.307 Td
+(2612 2768) 39.3166 Tj
+-13543.8 TJm
+(0501 1541 1616 1718) 83.0018 Tj
+0 -284.8 Td
+(SYS_wait 2603) 56.7907 Tj
+-13543.7 TJm
+(2534) 17.4741 Tj
+17.4609 -294.293 Td
+(2603 2769) 39.3166 Tj
+-11537.3 TJm
+(trapret 2474) 52.4222 Tj
+0 -303.787 Td
+(SYS_write 2605) 61.1592 Tj
+-13042 TJm
+(2473 2474 2486) 61.1592 Tj
+17.4609 -313.28 Td
+(2605 2770) 39.3166 Tj
+-11537.3 TJm
+(T_SYSCALL 2376) 61.1592 Tj
+0 -322.773 Td
+(taskstate 0701) 61.1592 Tj
+-13042 TJm
+(2376 2522 2536 6612) 83.0018 Tj
+17.4609 -332.267 Td
+(0701 1569) 39.3166 Tj
+-13543.8 TJm
+(6617 6707) 39.3166 Tj
+0 -341.76 Td
+(TCCR 5681) 39.3166 Tj
+-13543.8 TJm
+(tvinit 2516) 48.0537 Tj
+17.4609 -351.254 Td
+(5681 5717) 39.3166 Tj
+-13543.8 TJm
+(0343 1239 2516) 61.1592 Tj
+0 -360.747 Td
+(TDCR 5682) 39.3166 Tj
+-13543.8 TJm
+(userinit 1752) 56.7907 Tj
+17.4609 -370.24 Td
+(5682 5715) 39.3166 Tj
+-13543.8 TJm
+(0305 1249 1752) 61.1592 Tj
+0 -379.734 Td
+(T_DEV 3184) 43.6851 Tj
+-13042.1 TJm
+(VER 5658) 34.9481 Tj
+17.4609 -389.227 Td
+(3184 4107 4157 4911) 83.0018 Tj
+-8527.18 TJm
+(5658 5726) 39.3166 Tj
+0 -398.72 Td
+(T_DIR 3182) 43.6851 Tj
+-13042.1 TJm
+(wait 2053) 39.3166 Tj
+17.4609 -408.213 Td
+(3182 4218 4365 4673) 83.0018 Tj
+-8527.18 TJm
+(0306 2053 2827 6683) 83.0018 Tj
+17.4609 -417.707 Td
+(4778 4838 4868 4923) 83.0018 Tj
+-8527.18 TJm
+(6712 6844 6870 6871) 83.0018 Tj
+17.4609 -427.2 Td
+(4938) 17.4741 Tj
+-16052.2 TJm
+(6918) 17.4741 Tj
+0 -436.693 Td
+(T_FILE 3183) 48.0537 Tj
+-12540.4 TJm
+(waitdisk 1151) 56.7907 Tj
+17.4609 -446.187 Td
+(3183 4862) 39.3166 Tj
+-13543.8 TJm
+(1151 1163 1172) 61.1592 Tj
+0 -455.68 Td
+(ticks 2513) 43.6851 Tj
+-13042.1 TJm
+(wakeup 1965) 48.0537 Tj
+17.4609 -465.173 Td
+(0342 2513 2554 2555) 83.0018 Tj
+-8527.18 TJm
+(0307 1965 2555 3420) 83.0018 Tj
+17.4609 -474.667 Td
+(2872 2873 2878) 61.1592 Tj
+-11035.5 TJm
+(3639 3891 3916 5220) 83.0018 Tj
+0 -484.16 Td
+(tickslock 2512) 61.1592 Tj
+-13042 TJm
+(5223 5262 5268 5292) 83.0018 Tj
+17.4609 -493.654 Td
+(0344 2512 2524 2553) 83.0018 Tj
+-8527.18 TJm
+(6441) 17.4741 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  cross-references  Page 12) 26.488 Tj
-2.40799 -3.92728 Td
-(2821) 2.408 Tj
-24.0799 -3.92728 Td
-(2826 2870 2885 3017) 11.438 Tj
--1e-05 -5.23637 Td
-(T_NMI 2805) 6.02 Tj
-21.6719 -5.23637 Td
-(T_TSS 2813) 6.02 Tj
-2.40799 -6.54546 Td
-(2805) 2.408 Tj
-24.0799 -6.54546 Td
-(2813) 2.408 Tj
--1e-05 -7.85455 Td
-(T_OFLOW 2807) 7.224 Tj
-21.6719 -7.85455 Td
-(tvinit 2864) 6.622 Tj
-2.40799 -9.16364 Td
-(2807) 2.408 Tj
-24.0799 -9.16364 Td
-(0233 1255 2864) 8.428 Tj
--1e-05 -10.4727 Td
-(T_PGFLT 2817) 7.224 Tj
-21.6719 -10.4727 Td
-(unlink 4802) 6.622 Tj
-2.40799 -11.7818 Td
-(2817) 2.408 Tj
-24.0799 -11.7818 Td
-(0339 4802 4815 4821) 11.438 Tj
--1e-05 -13.0909 Td
-(trap 2880) 5.418 Tj
-24.0799 -13.0909 Td
-(4829 5436) 5.418 Tj
-2.40799 -14.4 Td
-(0232 0500 0512 0731) 11.438 Tj
-21.6719 -14.4 Td
-(wakeup 2353) 6.622 Tj
-2.40799 -15.7091 Td
-(0750 0751 0752 0753) 11.438 Tj
-24.0799 -15.7091 Td
-(0219 2316 2317 2353) 11.438 Tj
-2.40799 -17.0182 Td
-(0754 0757 1255 1344) 11.438 Tj
-24.0799 -17.0182 Td
-(3792 3861 4045 4362) 11.438 Tj
-2.40799 -18.3273 Td
-(2362 2751 2758 2764) 11.438 Tj
-24.0799 -18.3273 Td
-(4446 5667 5670 5692) 11.438 Tj
-2.40799 -19.6364 Td
-(2800 2880 2938 2944) 11.438 Tj
-24.0799 -19.6364 Td
-(5701 5728 6798) 8.428 Tj
-2.40799 -20.9455 Td
-(2945 2952 2954) 8.428 Tj
-21.6719 -20.9455 Td
-(wakeup1 2342) 7.224 Tj
--1e-05 -22.2545 Td
-(trapframe 0501) 8.428 Tj
-24.0799 -22.2545 Td
-(2342 2356 2408 2461) 11.438 Tj
-2.40799 -23.5636 Td
-(0501 1332 1348 1941) 11.438 Tj
-21.6719 -23.5636 Td
-(wdir 4716) 5.418 Tj
-2.40799 -24.8727 Td
-(2015 2138 2139 2763) 11.438 Tj
-24.0799 -24.8727 Td
-(4716 4724 4736 4786) 11.438 Tj
-2.40799 -26.1818 Td
-(2880) 2.408 Tj
-24.0799 -26.1818 Td
-(4880) 2.408 Tj
--1e-05 -27.4909 Td
-(T_SEGNP 2814) 7.224 Tj
-21.6719 -27.4909 Td
-(write_eflags 0443) 10.234 Tj
-2.40799 -28.8 Td
-(2814) 2.408 Tj
-24.0799 -28.8 Td
-(0443) 2.408 Tj
--1e-05 -30.1091 Td
-(T_SIMDERR 2822) 8.428 Tj
-21.6719 -30.1091 Td
-(writei 4552) 6.622 Tj
-2.40799 -31.4182 Td
-(2822) 2.408 Tj
-24.0799 -31.4182 Td
-(0336 4552 4590 4735) 11.438 Tj
--1e-05 -32.7273 Td
-(T_STACK 2815) 7.224 Tj
-24.0799 -32.7273 Td
-(4820 4960 5378 5382) 11.438 Tj
-2.40799 -34.0364 Td
-(2815) 2.408 Tj
-21.6719 -34.0364 Td
-(yield 2268) 6.02 Tj
--1e-05 -35.3454 Td
-(T_SYSCALL 2826) 8.428 Tj
-24.0799 -35.3454 Td
-(0224 2268 2917) 8.428 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  cross-references  Page 12) 192.215 Tj
+0 -28.4801 Td
+(wakeup1 1953) 52.4222 Tj
+-14045.3 TJm
+(4785 4786) 39.3166 Tj
+17.4609 -37.9735 Td
+(1953 1968 2026 2033) 83.0018 Tj
+-6520.6 TJm
+(yield 1867) 43.6851 Tj
+0 -47.4668 Td
+(writei 4152) 48.0537 Tj
+-14547 TJm
+(0308 1867 2596) 61.1592 Tj
+17.4609 -56.9602 Td
+(0249 4152 4274 4532) 83.0018 Tj
 Q
 Q
 Q
@@ -3708,7 +3809,10 @@ pdfEndPage
 %%Page: 8 8
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -3716,241 +3820,257 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/types.h  Page 1) 22.876 Tj
-0 -3.92728 Td
-(0100 typedef unsigned int uint;) 18.662 Tj
-0 -5.23637 Td
-(0101 typedef unsigned short ushort;) 21.07 Tj
-0 -6.54546 Td
-(0102 typedef unsigned char uchar;) 19.866 Tj
-0 -7.85455 Td
-(0103 ) 3.01 Tj
-0 -9.16364 Td
-(0104 ) 3.01 Tj
-0 -10.4727 Td
-(0105 ) 3.01 Tj
-0 -11.7818 Td
-(0106 ) 3.01 Tj
-0 -13.0909 Td
-(0107 ) 3.01 Tj
-0 -14.4 Td
-(0108 ) 3.01 Tj
-0 -15.7091 Td
-(0109 ) 3.01 Tj
-0 -17.0182 Td
-(0110 ) 3.01 Tj
-0 -18.3273 Td
-(0111 ) 3.01 Tj
-0 -19.6364 Td
-(0112 ) 3.01 Tj
-0 -20.9455 Td
-(0113 ) 3.01 Tj
-0 -22.2545 Td
-(0114 ) 3.01 Tj
-0 -23.5636 Td
-(0115 ) 3.01 Tj
-0 -24.8727 Td
-(0116 ) 3.01 Tj
-0 -26.1818 Td
-(0117 ) 3.01 Tj
-0 -27.4909 Td
-(0118 ) 3.01 Tj
-0 -28.8 Td
-(0119 ) 3.01 Tj
-0 -30.1091 Td
-(0120 ) 3.01 Tj
-0 -31.4182 Td
-(0121 ) 3.01 Tj
-0 -32.7273 Td
-(0122 ) 3.01 Tj
-0 -34.0364 Td
-(0123 ) 3.01 Tj
-0 -35.3454 Td
-(0124 ) 3.01 Tj
-0 -36.6545 Td
-(0125 ) 3.01 Tj
-0 -37.9636 Td
-(0126 ) 3.01 Tj
-0 -39.2727 Td
-(0127 ) 3.01 Tj
-0 -40.5818 Td
-(0128 ) 3.01 Tj
-0 -41.8909 Td
-(0129 ) 3.01 Tj
-0 -43.2 Td
-(0130 ) 3.01 Tj
-0 -44.5091 Td
-(0131 ) 3.01 Tj
-0 -45.8182 Td
-(0132 ) 3.01 Tj
-0 -47.1272 Td
-(0133 ) 3.01 Tj
-0 -48.4363 Td
-(0134 ) 3.01 Tj
-0 -49.7454 Td
-(0135 ) 3.01 Tj
-0 -51.0545 Td
-(0136 ) 3.01 Tj
-0 -52.3636 Td
-(0137 ) 3.01 Tj
-0 -53.6727 Td
-(0138 ) 3.01 Tj
-0 -54.9818 Td
-(0139 ) 3.01 Tj
-0 -56.2909 Td
-(0140 ) 3.01 Tj
-0 -57.6 Td
-(0141 ) 3.01 Tj
-0 -58.9091 Td
-(0142 ) 3.01 Tj
-0 -60.2181 Td
-(0143 ) 3.01 Tj
-0 -61.5272 Td
-(0144 ) 3.01 Tj
-0 -62.8363 Td
-(0145 ) 3.01 Tj
-0 -64.1454 Td
-(0146 ) 3.01 Tj
-0 -65.4545 Td
-(0147 ) 3.01 Tj
-0 -66.7636 Td
-(0148 ) 3.01 Tj
-0 -68.0727 Td
-(0149 ) 3.01 Tj
-0 -72 Td
-(Sheet 01) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/types.h  Page 1) 166.004 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.529 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.92 Td
+(0109 ) 21.8426 Tj
+0 -123.414 Td
+(0110 ) 21.8426 Tj
+0 -132.907 Td
+(0111 ) 21.8426 Tj
+0 -142.4 Td
+(0112 ) 21.8426 Tj
+0 -151.894 Td
+(0113 ) 21.8426 Tj
+0 -161.387 Td
+(0114 ) 21.8426 Tj
+0 -170.88 Td
+(0115 ) 21.8426 Tj
+0 -180.374 Td
+(0116 ) 21.8426 Tj
+0 -189.867 Td
+(0117 ) 21.8426 Tj
+0 -199.361 Td
+(0118 ) 21.8426 Tj
+0 -208.854 Td
+(0119 ) 21.8426 Tj
+0 -218.347 Td
+(0120 ) 21.8426 Tj
+0 -227.841 Td
+(0121 ) 21.8426 Tj
+0 -237.334 Td
+(0122 ) 21.8426 Tj
+0 -246.827 Td
+(0123 ) 21.8426 Tj
+0 -256.321 Td
+(0124 ) 21.8426 Tj
+0 -265.814 Td
+(0125 ) 21.8426 Tj
+0 -275.307 Td
+(0126 ) 21.8426 Tj
+0 -284.801 Td
+(0127 ) 21.8426 Tj
+0 -294.294 Td
+(0128 ) 21.8426 Tj
+0 -303.788 Td
+(0129 ) 21.8426 Tj
+0 -313.281 Td
+(0130 ) 21.8426 Tj
+0 -322.774 Td
+(0131 ) 21.8426 Tj
+0 -332.268 Td
+(0132 ) 21.8426 Tj
+0 -341.761 Td
+(0133 ) 21.8426 Tj
+0 -351.254 Td
+(0134 ) 21.8426 Tj
+0 -360.748 Td
+(0135 ) 21.8426 Tj
+0 -370.241 Td
+(0136 ) 21.8426 Tj
+0 -379.734 Td
+(0137 ) 21.8426 Tj
+0 -389.228 Td
+(0138 ) 21.8426 Tj
+0 -398.721 Td
+(0139 ) 21.8426 Tj
+0 -408.214 Td
+(0140 ) 21.8426 Tj
+0 -417.708 Td
+(0141 ) 21.8426 Tj
+0 -427.201 Td
+(0142 ) 21.8426 Tj
+0 -436.695 Td
+(0143 ) 21.8426 Tj
+0 -446.188 Td
+(0144 ) 21.8426 Tj
+0 -455.681 Td
+(0145 ) 21.8426 Tj
+0 -465.175 Td
+(0146 ) 21.8426 Tj
+0 -474.668 Td
+(0147 ) 21.8426 Tj
+0 -484.161 Td
+(0148 ) 21.8426 Tj
+0 -493.655 Td
+(0149 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/param.h  Page 1) 22.876 Tj
-0 -3.92728 Td
-(0150 #define NPROC        64  // maximum number of processes) 36.12 Tj
-0 -5.23637 Td
-(0151 #define PAGE       4096  // granularity of user-space memory allocation) 45.752 Tj
-0 -6.54546 Td
-(0152 #define KSTACKSIZE PAGE  // size of per-process kernel stack) 39.13 Tj
-0 -7.85455 Td
-(0153 #define NCPU          8  // maximum number of CPUs) 33.11 Tj
-0 -9.16364 Td
-(0154 #define NOFILE       16  // open files per process) 33.11 Tj
-0 -10.4727 Td
-(0155 #define NFILE       100  // open files per system) 32.508 Tj
-0 -11.7818 Td
-(0156 #define NREQUEST    100  // outstanding disk requests) 34.916 Tj
-0 -13.0909 Td
-(0157 #define NBUF         10  // size of disk block cache) 34.314 Tj
-0 -14.4 Td
-(0158 #define NINODE      100  // maximum number of active i-nodes) 39.13 Tj
-0 -15.7091 Td
-(0159 #define NDEV         10  // maximum major device number) 36.12 Tj
-0 -17.0182 Td
-(0160 ) 3.01 Tj
-0 -18.3273 Td
-(0161 ) 3.01 Tj
-0 -19.6364 Td
-(0162 ) 3.01 Tj
-0 -20.9455 Td
-(0163 ) 3.01 Tj
-0 -22.2545 Td
-(0164 ) 3.01 Tj
-0 -23.5636 Td
-(0165 ) 3.01 Tj
-0 -24.8727 Td
-(0166 ) 3.01 Tj
-0 -26.1818 Td
-(0167 ) 3.01 Tj
-0 -27.4909 Td
-(0168 ) 3.01 Tj
-0 -28.8 Td
-(0169 ) 3.01 Tj
-0 -30.1091 Td
-(0170 ) 3.01 Tj
-0 -31.4182 Td
-(0171 ) 3.01 Tj
-0 -32.7273 Td
-(0172 ) 3.01 Tj
-0 -34.0364 Td
-(0173 ) 3.01 Tj
-0 -35.3454 Td
-(0174 ) 3.01 Tj
-0 -36.6545 Td
-(0175 ) 3.01 Tj
-0 -37.9636 Td
-(0176 ) 3.01 Tj
-0 -39.2727 Td
-(0177 ) 3.01 Tj
-0 -40.5818 Td
-(0178 ) 3.01 Tj
-0 -41.8909 Td
-(0179 ) 3.01 Tj
-0 -43.2 Td
-(0180 ) 3.01 Tj
-0 -44.5091 Td
-(0181 ) 3.01 Tj
-0 -45.8182 Td
-(0182 ) 3.01 Tj
-0 -47.1272 Td
-(0183 ) 3.01 Tj
-0 -48.4363 Td
-(0184 ) 3.01 Tj
-0 -49.7454 Td
-(0185 ) 3.01 Tj
-0 -51.0545 Td
-(0186 ) 3.01 Tj
-0 -52.3636 Td
-(0187 ) 3.01 Tj
-0 -53.6727 Td
-(0188 ) 3.01 Tj
-0 -54.9818 Td
-(0189 ) 3.01 Tj
-0 -56.2909 Td
-(0190 ) 3.01 Tj
-0 -57.6 Td
-(0191 ) 3.01 Tj
-0 -58.9091 Td
-(0192 ) 3.01 Tj
-0 -60.2181 Td
-(0193 ) 3.01 Tj
-0 -61.5272 Td
-(0194 ) 3.01 Tj
-0 -62.8363 Td
-(0195 ) 3.01 Tj
-0 -64.1454 Td
-(0196 ) 3.01 Tj
-0 -65.4545 Td
-(0197 ) 3.01 Tj
-0 -66.7636 Td
-(0198 ) 3.01 Tj
-0 -68.0727 Td
-(0199 ) 3.01 Tj
-0 -72 Td
-(Sheet 01) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/param.h  Page 1) 166.004 Tj
+0 -28.4801 Td
+(0150 #define NPROC        64  // maximum number of processes) 262.111 Tj
+0 -37.9735 Td
+(0151 #define PAGE       4096  // granularity of user-space memo\
+ry allocation) 332.007 Tj
+0 -47.4668 Td
+(0152 #define KSTACKSIZE PAGE  // size of per-process kernel sta\
+ck) 283.953 Tj
+0 -56.9602 Td
+(0153 #define NCPU          8  // maximum number of CPUs) 240.268 Tj
+0 -66.4535 Td
+(0154 #define NOFILE       16  // open files per process) 240.268 Tj
+0 -75.9469 Td
+(0155 #define NFILE       100  // open files per system) 235.9 Tj
+0 -85.4403 Td
+(0156 #define NBUF         10  // size of disk block cache) 249.005 Tj
+0 -94.9336 Td
+(0157 #define NINODE       50  // maximum number of active i-nod\
+es) 283.953 Tj
+0 -104.427 Td
+(0158 #define NDEV         10  // maximum major device number) 262.111 Tj
+0 -113.92 Td
+(0159 #define ROOTDEV       1  // device number of file system r\
+oot disk) 310.165 Tj
+0 -123.414 Td
+(0160 ) 21.8426 Tj
+0 -132.907 Td
+(0161 ) 21.8426 Tj
+0 -142.4 Td
+(0162 ) 21.8426 Tj
+0 -151.894 Td
+(0163 ) 21.8426 Tj
+0 -161.387 Td
+(0164 ) 21.8426 Tj
+0 -170.88 Td
+(0165 ) 21.8426 Tj
+0 -180.374 Td
+(0166 ) 21.8426 Tj
+0 -189.867 Td
+(0167 ) 21.8426 Tj
+0 -199.361 Td
+(0168 ) 21.8426 Tj
+0 -208.854 Td
+(0169 ) 21.8426 Tj
+0 -218.347 Td
+(0170 ) 21.8426 Tj
+0 -227.841 Td
+(0171 ) 21.8426 Tj
+0 -237.334 Td
+(0172 ) 21.8426 Tj
+0 -246.827 Td
+(0173 ) 21.8426 Tj
+0 -256.321 Td
+(0174 ) 21.8426 Tj
+0 -265.814 Td
+(0175 ) 21.8426 Tj
+0 -275.307 Td
+(0176 ) 21.8426 Tj
+0 -284.801 Td
+(0177 ) 21.8426 Tj
+0 -294.294 Td
+(0178 ) 21.8426 Tj
+0 -303.788 Td
+(0179 ) 21.8426 Tj
+0 -313.281 Td
+(0180 ) 21.8426 Tj
+0 -322.774 Td
+(0181 ) 21.8426 Tj
+0 -332.268 Td
+(0182 ) 21.8426 Tj
+0 -341.761 Td
+(0183 ) 21.8426 Tj
+0 -351.254 Td
+(0184 ) 21.8426 Tj
+0 -360.748 Td
+(0185 ) 21.8426 Tj
+0 -370.241 Td
+(0186 ) 21.8426 Tj
+0 -379.734 Td
+(0187 ) 21.8426 Tj
+0 -389.228 Td
+(0188 ) 21.8426 Tj
+0 -398.721 Td
+(0189 ) 21.8426 Tj
+0 -408.214 Td
+(0190 ) 21.8426 Tj
+0 -417.708 Td
+(0191 ) 21.8426 Tj
+0 -427.201 Td
+(0192 ) 21.8426 Tj
+0 -436.695 Td
+(0193 ) 21.8426 Tj
+0 -446.188 Td
+(0194 ) 21.8426 Tj
+0 -455.681 Td
+(0195 ) 21.8426 Tj
+0 -465.175 Td
+(0196 ) 21.8426 Tj
+0 -474.668 Td
+(0197 ) 21.8426 Tj
+0 -484.161 Td
+(0198 ) 21.8426 Tj
+0 -493.655 Td
+(0199 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 01) 34.9481 Tj
 Q
 Q
 Q
@@ -3962,6 +4082,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -3969,241 +4092,255 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/defs.h  Page 1) 22.274 Tj
-0 -3.92728 Td
-(0200 // kalloc.c) 9.632 Tj
-0 -5.23637 Td
-(0201 char* kalloc\(int\);) 13.846 Tj
-0 -6.54546 Td
-(0202 void kfree\(char*, int\);) 16.856 Tj
-0 -7.85455 Td
-(0203 void kinit\(void\);) 13.244 Tj
-0 -9.16364 Td
-(0204 ) 3.01 Tj
-0 -10.4727 Td
-(0205 // console.c) 10.234 Tj
-0 -11.7818 Td
-(0206 void console_init\(void\);) 17.458 Tj
-0 -13.0909 Td
-(0207 void cprintf\(char*, ...\);) 18.06 Tj
-0 -14.4 Td
-(0208 void panic\(char*\);) 13.846 Tj
-0 -15.7091 Td
-(0209 void kbd_intr\(void\);) 15.05 Tj
-0 -17.0182 Td
-(0210 ) 3.01 Tj
-0 -18.3273 Td
-(0211 // proc.c) 8.428 Tj
-0 -19.6364 Td
-(0212 void pinit\(void\);) 13.244 Tj
-0 -20.9455 Td
-(0213 struct proc;) 10.234 Tj
-0 -22.2545 Td
-(0214 void setupsegs\(struct proc*\);) 20.468 Tj
-0 -23.5636 Td
-(0215 struct proc* copyproc\(struct proc*\);) 24.682 Tj
-0 -24.8727 Td
-(0216 struct spinlock;) 12.642 Tj
-0 -26.1818 Td
-(0217 int growproc\(int\);) 13.846 Tj
-0 -27.4909 Td
-(0218 void sleep\(void*, struct spinlock*\);) 24.682 Tj
-0 -28.8 Td
-(0219 void wakeup\(void*\);) 14.448 Tj
-0 -30.1091 Td
-(0220 void scheduler\(void\);) 15.652 Tj
-0 -31.4182 Td
-(0221 void proc_exit\(void\);) 15.652 Tj
-0 -32.7273 Td
-(0222 int proc_kill\(int\);) 14.448 Tj
-0 -34.0364 Td
-(0223 int proc_wait\(void\);) 15.05 Tj
-0 -35.3454 Td
-(0224 void yield\(void\);) 13.244 Tj
-0 -36.6545 Td
-(0225 void procdump\(void\);) 15.05 Tj
-0 -37.9636 Td
-(0226 ) 3.01 Tj
-0 -39.2727 Td
-(0227 // setjmp.S) 9.632 Tj
-0 -40.5818 Td
-(0228 struct jmpbuf;) 11.438 Tj
-0 -41.8909 Td
-(0229 int setjmp\(struct jmpbuf*\);) 19.264 Tj
-0 -43.2 Td
-(0230 void longjmp\(struct jmpbuf*\);) 20.468 Tj
-0 -44.5091 Td
-(0231 ) 3.01 Tj
-0 -45.8182 Td
-(0232 // trap.c) 8.428 Tj
-0 -47.1272 Td
-(0233 void tvinit\(void\);) 13.846 Tj
-0 -48.4363 Td
-(0234 void idtinit\(void\);) 14.448 Tj
-0 -49.7454 Td
-(0235 ) 3.01 Tj
-0 -51.0545 Td
-(0236 // string.c) 9.632 Tj
-0 -52.3636 Td
-(0237 void* memset\(void*, int, uint\);) 21.672 Tj
-0 -53.6727 Td
-(0238 int memcmp\(const void*, const void*, uint\);) 28.896 Tj
-0 -54.9818 Td
-(0239 void* memmove\(void*, const void*, uint\);) 27.09 Tj
-0 -56.2909 Td
-(0240 int strncmp\(const char*, const char*, uint\);) 29.498 Tj
-0 -57.6 Td
-(0241 ) 3.01 Tj
-0 -58.9091 Td
-(0242 // syscall.c) 10.234 Tj
-0 -60.2181 Td
-(0243 void syscall\(void\);) 14.448 Tj
-0 -61.5272 Td
-(0244 int fetchint\(struct proc*, uint, int*\);) 26.488 Tj
-0 -62.8363 Td
-(0245 int fetchstr\(struct proc*, uint, char**\);) 27.692 Tj
-0 -64.1454 Td
-(0246 int argint\(int, int*\);) 16.254 Tj
-0 -65.4545 Td
-(0247 int argptr\(int, char**, int\);) 20.468 Tj
-0 -66.7636 Td
-(0248 int argstr\(int, char**\);) 17.458 Tj
-0 -68.0727 Td
-(0249 ) 3.01 Tj
-0 -72 Td
-(Sheet 02) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  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.92 Td
+(0209 // bio.c) 56.7907 Tj
+0 -123.414 Td
+(0210 void            binit\(void\);) 144.161 Tj
+0 -132.907 Td
+(0211 struct buf*     bread\(uint, uint\);) 170.372 Tj
+0 -142.4 Td
+(0212 void            brelse\(struct buf*\);) 179.109 Tj
+0 -151.894 Td
+(0213 void            bwrite\(struct buf*\);) 179.109 Tj
+0 -161.387 Td
+(0214 ) 21.8426 Tj
+0 -170.88 Td
+(0215 // console.c) 74.2647 Tj
+0 -180.374 Td
+(0216 void            console_init\(void\);) 174.741 Tj
+0 -189.867 Td
+(0217 void            cprintf\(char*, ...\);) 179.109 Tj
+0 -199.361 Td
+(0218 void            console_intr\(int\(*\)\(void\)\);) 209.689 Tj
+0 -208.854 Td
+(0219 void            panic\(char*\) __attribute__\(\(noreturn\)\
+\);) 262.111 Tj
+0 -218.347 Td
+(0220 ) 21.8426 Tj
+0 -227.841 Td
+(0221 // exec.c) 61.1592 Tj
+0 -237.334 Td
+(0222 int             exec\(char*, char**\);) 179.109 Tj
+0 -246.827 Td
+(0223 ) 21.8426 Tj
+0 -256.321 Td
+(0224 // file.c) 61.1592 Tj
+0 -265.814 Td
+(0225 struct file*    filealloc\(void\);) 161.635 Tj
+0 -275.307 Td
+(0226 void            fileclose\(struct file*\);) 196.583 Tj
+0 -284.801 Td
+(0227 struct file*    filedup\(struct file*\);) 187.846 Tj
+0 -294.294 Td
+(0228 void            fileinit\(void\);) 157.267 Tj
+0 -303.788 Td
+(0229 int             fileread\(struct file*, char*, int n\);) 253.374 Tj
+0 -313.281 Td
+(0230 int             filestat\(struct file*, struct stat*\);) 253.374 Tj
+0 -322.774 Td
+(0231 int             filewrite\(struct file*, char*, int n\);) 257.742 Tj
+0 -332.268 Td
+(0232 ) 21.8426 Tj
+0 -341.761 Td
+(0233 // fs.c) 52.4222 Tj
+0 -351.254 Td
+(0234 int             dirlink\(struct inode*, char*, uint\);) 249.005 Tj
+0 -360.748 Td
+(0235 struct inode*   dirlookup\(struct inode*, char*, uint*\);) 262.111 Tj
+0 -370.241 Td
+(0236 struct inode*   ialloc\(uint, short\);) 179.109 Tj
+0 -379.734 Td
+(0237 struct inode*   idup\(struct inode*\);) 179.109 Tj
+0 -389.228 Td
+(0238 void            iinit\(void\);) 144.161 Tj
+0 -398.721 Td
+(0239 void            ilock\(struct inode*\);) 183.478 Tj
+0 -408.214 Td
+(0240 void            iput\(struct inode*\);) 179.109 Tj
+0 -417.708 Td
+(0241 void            iunlock\(struct inode*\);) 192.215 Tj
+0 -427.201 Td
+(0242 void            iunlockput\(struct inode*\);) 205.32 Tj
+0 -436.695 Td
+(0243 void            iupdate\(struct inode*\);) 192.215 Tj
+0 -446.188 Td
+(0244 int             namecmp\(const char*, const char*\);) 240.268 Tj
+0 -455.681 Td
+(0245 struct inode*   namei\(char*\);) 148.529 Tj
+0 -465.175 Td
+(0246 struct inode*   nameiparent\(char*, char*\);) 205.32 Tj
+0 -474.668 Td
+(0247 int             readi\(struct inode*, char*, uint, uint\);) 266.479 Tj
+0 -484.161 Td
+(0248 void            stati\(struct inode*, struct stat*\);) 244.637 Tj
+0 -493.655 Td
+(0249 int             writei\(struct inode*, char*, uint, uint\)\
+;) 270.848 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/defs.h  Page 2) 22.274 Tj
-0 -3.92728 Td
-(0250 // picirq.c) 9.632 Tj
-0 -5.23637 Td
-(0251 void pic_init\(void\);) 15.05 Tj
-0 -6.54546 Td
-(0252 void irq_enable\(int\);) 15.652 Tj
-0 -7.85455 Td
-(0253 ) 3.01 Tj
-0 -9.16364 Td
-(0254 // 8253pit.c) 10.234 Tj
-0 -10.4727 Td
-(0255 void pit8253_timerinit\(void\);) 20.468 Tj
-0 -11.7818 Td
-(0256 ) 3.01 Tj
-0 -13.0909 Td
-(0257 // mp.c) 7.224 Tj
-0 -14.4 Td
-(0258 extern int ismp;) 12.642 Tj
-0 -15.7091 Td
-(0259 void mp_init\(void\);) 14.448 Tj
-0 -17.0182 Td
-(0260 void mp_startthem\(void\);) 17.458 Tj
-0 -18.3273 Td
-(0261 int mp_bcpu\(void\);) 13.846 Tj
-0 -19.6364 Td
-(0262 ) 3.01 Tj
-0 -20.9455 Td
-(0263 // lapic.c) 9.03 Tj
-0 -22.2545 Td
-(0264 extern uint *lapicaddr;) 16.856 Tj
-0 -23.5636 Td
-(0265 void lapic_init\(int\);) 15.652 Tj
-0 -24.8727 Td
-(0266 void lapic_startap\(uchar, int\);) 21.672 Tj
-0 -26.1818 Td
-(0267 void lapic_timerinit\(void\);) 19.264 Tj
-0 -27.4909 Td
-(0268 void lapic_timerintr\(void\);) 19.264 Tj
-0 -28.8 Td
-(0269 void lapic_enableintr\(void\);) 19.866 Tj
-0 -30.1091 Td
-(0270 void lapic_disableintr\(void\);) 20.468 Tj
-0 -31.4182 Td
-(0271 void lapic_eoi\(void\);) 15.652 Tj
-0 -32.7273 Td
-(0272 int cpu\(void\);) 11.438 Tj
-0 -34.0364 Td
-(0273 ) 3.01 Tj
-0 -35.3454 Td
-(0274 // ioapic.c) 9.632 Tj
-0 -36.6545 Td
-(0275 extern uchar ioapic_id;) 16.856 Tj
-0 -37.9636 Td
-(0276 void ioapic_init\(void\);) 16.856 Tj
-0 -39.2727 Td
-(0277 void ioapic_enable\(int irq, int cpu\);) 25.284 Tj
-0 -40.5818 Td
-(0278 ) 3.01 Tj
-0 -41.8909 Td
-(0279 // spinlock.c) 10.836 Tj
-0 -43.2 Td
-(0280 struct spinlock;) 12.642 Tj
-0 -44.5091 Td
-(0281 void initlock\(struct spinlock*, char*\);) 26.488 Tj
-0 -45.8182 Td
-(0282 void acquire\(struct spinlock*\);) 21.672 Tj
-0 -47.1272 Td
-(0283 void release\(struct spinlock*\);) 21.672 Tj
-0 -48.4363 Td
-(0284 int holding\(struct spinlock*\);) 21.07 Tj
-0 -49.7454 Td
-(0285 void getcallerpcs\(void*, uint*\);) 22.274 Tj
-0 -51.0545 Td
-(0286 ) 3.01 Tj
-0 -52.3636 Td
-(0287 // main.c) 8.428 Tj
-0 -53.6727 Td
-(0288 void load_icode\(struct proc*, uchar*, uint\);) 29.498 Tj
-0 -54.9818 Td
-(0289 ) 3.01 Tj
-0 -56.2909 Td
-(0290 // pipe.c) 8.428 Tj
-0 -57.6 Td
-(0291 struct pipe;) 10.234 Tj
-0 -58.9091 Td
-(0292 struct file;) 10.234 Tj
-0 -60.2181 Td
-(0293 int pipe_alloc\(struct file**, struct file**\);) 30.1 Tj
-0 -61.5272 Td
-(0294 void pipe_close\(struct pipe*, int\);) 24.08 Tj
-0 -62.8363 Td
-(0295 int pipe_write\(struct pipe*, char*, int\);) 27.692 Tj
-0 -64.1454 Td
-(0296 int pipe_read\(struct pipe*, char*, int\);) 27.09 Tj
-0 -65.4545 Td
-(0297 ) 3.01 Tj
-0 -66.7636 Td
-(0298 ) 3.01 Tj
-0 -68.0727 Td
-(0299 ) 3.01 Tj
-0 -72 Td
-(Sheet 02) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/defs.h  Page 2) 161.635 Tj
+0 -28.4801 Td
+(0250 // ide.c) 56.7907 Tj
+0 -37.9735 Td
+(0251 void            ide_init\(void\);) 157.267 Tj
+0 -47.4668 Td
+(0252 void            ide_intr\(void\);) 157.267 Tj
+0 -56.9602 Td
+(0253 void            ide_rw\(struct buf *\);) 183.478 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            ioapic_enable\(int irq, int cpu\);) 231.531 Tj
+0 -94.9336 Td
+(0257 extern uchar    ioapic_id;) 135.424 Tj
+0 -104.427 Td
+(0258 void            ioapic_init\(void\);) 170.372 Tj
+0 -113.92 Td
+(0259 ) 21.8426 Tj
+0 -123.414 Td
+(0260 // kalloc.c) 69.8962 Tj
+0 -132.907 Td
+(0261 char*           kalloc\(int\);) 144.161 Tj
+0 -142.4 Td
+(0262 void            kfree\(char*, int\);) 170.372 Tj
+0 -151.894 Td
+(0263 void            kinit\(void\);) 144.161 Tj
+0 -161.387 Td
+(0264 ) 21.8426 Tj
+0 -170.88 Td
+(0265 // kbd.c) 56.7907 Tj
+0 -180.374 Td
+(0266 void            kbd_intr\(void\);) 157.267 Tj
+0 -189.867 Td
+(0267 ) 21.8426 Tj
+0 -199.361 Td
+(0268 // lapic.c) 65.5277 Tj
+0 -208.854 Td
+(0269 int             cpu\(void\);) 135.424 Tj
+0 -218.347 Td
+(0270 extern volatile uint*    lapic;) 157.267 Tj
+0 -227.841 Td
+(0271 void            lapic_disableintr\(void\);) 196.583 Tj
+0 -237.334 Td
+(0272 void            lapic_enableintr\(void\);) 192.215 Tj
+0 -246.827 Td
+(0273 void            lapic_eoi\(void\);) 161.635 Tj
+0 -256.321 Td
+(0274 void            lapic_init\(int\);) 161.635 Tj
+0 -265.814 Td
+(0275 void            lapic_startap\(uchar, uint\);) 209.689 Tj
+0 -275.307 Td
+(0276 void            lapic_timerinit\(void\);) 187.846 Tj
+0 -284.801 Td
+(0277 void            lapic_timerintr\(void\);) 187.846 Tj
+0 -294.294 Td
+(0278 ) 21.8426 Tj
+0 -303.788 Td
+(0279 // mp.c) 52.4222 Tj
+0 -313.281 Td
+(0280 extern int      ismp;) 113.581 Tj
+0 -322.774 Td
+(0281 int             mp_bcpu\(void\);) 152.898 Tj
+0 -332.268 Td
+(0282 void            mp_init\(void\);) 152.898 Tj
+0 -341.761 Td
+(0283 void            mp_startthem\(void\);) 174.741 Tj
+0 -351.254 Td
+(0284 ) 21.8426 Tj
+0 -360.748 Td
+(0285 // picirq.c) 69.8962 Tj
+0 -370.241 Td
+(0286 void            pic_enable\(int\);) 161.635 Tj
+0 -379.734 Td
+(0287 void            pic_init\(void\);) 157.267 Tj
+0 -389.228 Td
+(0288 ) 21.8426 Tj
+0 -398.721 Td
+(0289 // pipe.c) 61.1592 Tj
+0 -408.214 Td
+(0290 int             pipealloc\(struct file**, struct file**\);) 266.479 Tj
+0 -417.708 Td
+(0291 void            pipeclose\(struct pipe*, int\);) 218.426 Tj
+0 -427.201 Td
+(0292 int             piperead\(struct pipe*, char*, int\);) 244.637 Tj
+0 -436.695 Td
+(0293 int             pipewrite\(struct pipe*, char*, int\);) 249.005 Tj
+0 -446.188 Td
+(0294 ) 21.8426 Tj
+0 -455.681 Td
+(0295 // proc.c) 61.1592 Tj
+0 -465.175 Td
+(0296 struct proc*    copyproc\(struct proc*\);) 192.215 Tj
+0 -474.668 Td
+(0297 void            exit\(void\);) 139.792 Tj
+0 -484.161 Td
+(0298 int             growproc\(int\);) 152.898 Tj
+0 -493.655 Td
+(0299 int             kill\(int\);) 135.424 Tj
+0 -522.135 Td
+(Sheet 02) 34.9481 Tj
 Q
 Q
 Q
@@ -4214,7 +4351,10 @@ pdfEndPage
 %%Page: 10 10
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -4222,241 +4362,259 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/defs.h  Page 3) 22.274 Tj
-0 -3.92728 Td
-(0300 // file.c) 8.428 Tj
-0 -5.23637 Td
-(0301 struct stat;) 10.234 Tj
-0 -6.54546 Td
-(0302 void fileinit\(void\);) 15.05 Tj
-0 -7.85455 Td
-(0303 struct file* filealloc\(void\);) 20.468 Tj
-0 -9.16364 Td
-(0304 void fileclose\(struct file*\);) 20.468 Tj
-0 -10.4727 Td
-(0305 int fileread\(struct file*, char*, int n\);) 27.692 Tj
-0 -11.7818 Td
-(0306 int filewrite\(struct file*, char*, int n\);) 28.294 Tj
-0 -13.0909 Td
-(0307 int filestat\(struct file*, struct stat*\);) 27.692 Tj
-0 -14.4 Td
-(0308 void fileincref\(struct file*\);) 21.07 Tj
-0 -15.7091 Td
-(0309 ) 3.01 Tj
-0 -17.0182 Td
-(0310 // ide.c) 7.826 Tj
-0 -18.3273 Td
-(0311 void ide_init\(void\);) 15.05 Tj
-0 -19.6364 Td
-(0312 void ide_intr\(void\);) 15.05 Tj
-0 -20.9455 Td
-(0313 void ide_rw\(int, uint, void*, uint, int\);) 27.692 Tj
-0 -22.2545 Td
-(0314 ) 3.01 Tj
-0 -23.5636 Td
-(0315 // bio.c) 7.826 Tj
-0 -24.8727 Td
-(0316 void binit\(void\);) 13.244 Tj
-0 -26.1818 Td
-(0317 struct buf;) 9.632 Tj
-0 -27.4909 Td
-(0318 struct buf* getblk\(uint dev, uint sector\);) 28.294 Tj
-0 -28.8 Td
-(0319 struct buf* bread\(uint, uint\);) 21.07 Tj
-0 -30.1091 Td
-(0320 void bwrite\(struct buf*, uint\);) 21.672 Tj
-0 -31.4182 Td
-(0321 void brelse\(struct buf*\);) 18.06 Tj
-0 -32.7273 Td
-(0322 ) 3.01 Tj
-0 -34.0364 Td
-(0323 // fs.c) 7.224 Tj
-0 -35.3454 Td
-(0324 extern uint rootdev;) 15.05 Tj
-0 -36.6545 Td
-(0325 void iinit\(void\);) 13.244 Tj
-0 -37.9636 Td
-(0326 struct inode* iget\(uint, uint\);) 21.672 Tj
-0 -39.2727 Td
-(0327 void ilock\(struct inode*\);) 18.662 Tj
-0 -40.5818 Td
-(0328 void iunlock\(struct inode*\);) 19.866 Tj
-0 -41.8909 Td
-(0329 void itrunc\(struct inode*\);) 19.264 Tj
-0 -43.2 Td
-(0330 void idecref\(struct inode*\);) 19.866 Tj
-0 -44.5091 Td
-(0331 void iincref\(struct inode*\);) 19.866 Tj
-0 -45.8182 Td
-(0332 void iput\(struct inode*\);) 18.06 Tj
-0 -47.1272 Td
-(0333 struct inode* namei\(char*, int, uint*, char**, struct inode**\);) 40.936 Tj
-0 -48.4363 Td
-(0334 void stati\(struct inode*, struct stat*\);) 27.09 Tj
-0 -49.7454 Td
-(0335 int readi\(struct inode*, char*, uint, uint\);) 29.498 Tj
-0 -51.0545 Td
-(0336 int writei\(struct inode*, char*, uint, uint\);) 30.1 Tj
-0 -52.3636 Td
-(0337 struct inode* mknod\(char*, short, short, short\);) 31.906 Tj
-0 -53.6727 Td
-(0338 struct inode* mknod1\(struct inode*, char*, short, short, short\);) 41.538 Tj
-0 -54.9818 Td
-(0339 int unlink\(char*\);) 13.846 Tj
-0 -56.2909 Td
-(0340 void iupdate\(struct inode*\);) 19.866 Tj
-0 -57.6 Td
-(0341 int link\(char*, char*\);) 16.856 Tj
-0 -58.9091 Td
-(0342 ) 3.01 Tj
-0 -60.2181 Td
-(0343 ) 3.01 Tj
-0 -61.5272 Td
-(0344 ) 3.01 Tj
-0 -62.8363 Td
-(0345 ) 3.01 Tj
-0 -64.1454 Td
-(0346 ) 3.01 Tj
-0 -65.4545 Td
-(0347 ) 3.01 Tj
-0 -66.7636 Td
-(0348 ) 3.01 Tj
-0 -68.0727 Td
-(0349 ) 3.01 Tj
-0 -72 Td
-(Sheet 03) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/defs.h  Page 3) 161.635 Tj
+0 -28.4801 Td
+(0300 void            pinit\(void\);) 144.161 Tj
+0 -37.9735 Td
+(0301 void            procdump\(void\);) 157.267 Tj
+0 -47.4668 Td
+(0302 void            scheduler\(void\) __attribute__\(\(noretur\
+n\)\);) 275.216 Tj
+0 -56.9602 Td
+(0303 void            setupsegs\(struct proc*\);) 196.583 Tj
+0 -66.4535 Td
+(0304 void            sleep\(void*, struct spinlock*\);) 227.163 Tj
+0 -75.9469 Td
+(0305 void            userinit\(void\);) 157.267 Tj
+0 -85.4403 Td
+(0306 int             wait\(void\);) 139.792 Tj
+0 -94.9336 Td
+(0307 void            wakeup\(void*\);) 152.898 Tj
+0 -104.427 Td
+(0308 void            yield\(void\);) 144.161 Tj
+0 -113.92 Td
+(0309 ) 21.8426 Tj
+0 -123.414 Td
+(0310 // swtch.S) 65.5277 Tj
+0 -132.907 Td
+(0311 void            swtch\(struct context*, struct context*\);) 266.479 Tj
+0 -142.4 Td
+(0312 ) 21.8426 Tj
+0 -151.894 Td
+(0313 // spinlock.c) 78.6333 Tj
+0 -161.387 Td
+(0314 void            acquire\(struct spinlock*\);) 205.32 Tj
+0 -170.88 Td
+(0315 void            getcallerpcs\(void*, uint*\);) 209.689 Tj
+0 -180.374 Td
+(0316 int             holding\(struct spinlock*\);) 205.32 Tj
+0 -189.867 Td
+(0317 void            initlock\(struct spinlock*, char*\);) 240.268 Tj
+0 -199.361 Td
+(0318 void            release\(struct spinlock*\);) 205.32 Tj
+0 -208.854 Td
+(0319 ) 21.8426 Tj
+0 -218.347 Td
+(0320 // string.c) 69.8962 Tj
+0 -227.841 Td
+(0321 int             memcmp\(const void*, const void*, uint\);) 262.111 Tj
+0 -237.334 Td
+(0322 void*           memmove\(void*, const void*, uint\);) 240.268 Tj
+0 -246.827 Td
+(0323 void*           memset\(void*, int, uint\);) 200.952 Tj
+0 -256.321 Td
+(0324 char*           safestrcpy\(char*, const char*, int\);) 249.005 Tj
+0 -265.814 Td
+(0325 int             strlen\(const char*\);) 179.109 Tj
+0 -275.307 Td
+(0326 int             strncmp\(const char*, const char*, uint\);) 266.479 Tj
+0 -284.801 Td
+(0327 char*           strncpy\(char*, const char*, int\);) 235.9 Tj
+0 -294.294 Td
+(0328 ) 21.8426 Tj
+0 -303.788 Td
+(0329 // syscall.c) 74.2647 Tj
+0 -313.281 Td
+(0330 int             argint\(int, int*\);) 170.372 Tj
+0 -322.774 Td
+(0331 int             argptr\(int, char**, int\);) 200.952 Tj
+0 -332.268 Td
+(0332 int             argstr\(int, char**\);) 179.109 Tj
+0 -341.761 Td
+(0333 int             fetchint\(struct proc*, uint, int*\);) 244.637 Tj
+0 -351.254 Td
+(0334 int             fetchstr\(struct proc*, uint, char**\);) 253.374 Tj
+0 -360.748 Td
+(0335 void            syscall\(void\);) 152.898 Tj
+0 -370.241 Td
+(0336 ) 21.8426 Tj
+0 -379.734 Td
+(0337 // timer.c) 65.5277 Tj
+0 -389.228 Td
+(0338 void            timer_init\(void\);) 166.004 Tj
+0 -398.721 Td
+(0339 ) 21.8426 Tj
+0 -408.214 Td
+(0340 // trap.c) 61.1592 Tj
+0 -417.708 Td
+(0341 void            idtinit\(void\);) 152.898 Tj
+0 -427.201 Td
+(0342 extern int      ticks;) 117.95 Tj
+0 -436.695 Td
+(0343 void            tvinit\(void\);) 148.529 Tj
+0 -446.188 Td
+(0344 extern struct spinlock tickslock;) 166.004 Tj
+0 -455.681 Td
+(0345 ) 21.8426 Tj
+0 -465.175 Td
+(0346 // number of elements in fixed-size array) 200.952 Tj
+0 -474.668 Td
+(0347 #define NELEM\(x\) \(sizeof\(x\)/sizeof\(\(x\)[0]\)\)) 209.689 Tj
+0 -484.161 Td
+(0348 ) 21.8426 Tj
+0 -493.655 Td
+(0349 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/x86.h  Page 1) 21.672 Tj
-0 -3.92728 Td
-(0350 // Special assembly routines to access x86-specific) 33.712 Tj
-0 -5.23637 Td
-(0351 // hardware instructions.) 18.06 Tj
-0 -6.54546 Td
-(0352 ) 3.01 Tj
-0 -7.85455 Td
-(0353 static __inline uchar) 15.652 Tj
-0 -9.16364 Td
-(0354 inb\(int port\)) 10.836 Tj
-0 -10.4727 Td
-(0355 {) 3.612 Tj
-0 -11.7818 Td
-(0356   uchar data;) 10.836 Tj
-0 -13.0909 Td
-(0357   __asm __volatile\("inb %w1,%0" : "=a" \(data\) : "d" \(port\)\);) 39.13 Tj
-0 -14.4 Td
-(0358   return data;) 11.438 Tj
-0 -15.7091 Td
-(0359 }) 3.612 Tj
-0 -17.0182 Td
-(0360 ) 3.01 Tj
-0 -18.3273 Td
-(0361 static __inline void) 15.05 Tj
-0 -19.6364 Td
-(0362 insl\(int port, void *addr, int cnt\)) 24.08 Tj
-0 -20.9455 Td
-(0363 {) 3.612 Tj
-0 -22.2545 Td
-(0364   __asm __volatile\("cld\\n\\trepne\\n\\tinsl"     :) 31.304 Tj
-0 -23.5636 Td
-(0365                    "=D" \(addr\), "=c" \(cnt\)    :) 31.304 Tj
-0 -24.8727 Td
-(0366                    "d" \(port\), "0" \(addr\), "1" \(cnt\)  :) 36.12 Tj
-0 -26.1818 Td
-(0367                    "memory", "cc"\);) 24.08 Tj
-0 -27.4909 Td
-(0368 }) 3.612 Tj
-0 -28.8 Td
-(0369 ) 3.01 Tj
-0 -30.1091 Td
-(0370 static __inline void) 15.05 Tj
-0 -31.4182 Td
-(0371 outb\(int port, uchar data\)) 18.662 Tj
-0 -32.7273 Td
-(0372 {) 3.612 Tj
-0 -34.0364 Td
-(0373   __asm __volatile\("outb %0,%w1" : : "a" \(data\), "d" \(port\)\);) 39.732 Tj
-0 -35.3454 Td
-(0374 }) 3.612 Tj
-0 -36.6545 Td
-(0375 ) 3.01 Tj
-0 -37.9636 Td
-(0376 static __inline void) 15.05 Tj
-0 -39.2727 Td
-(0377 outw\(int port, ushort data\)) 19.264 Tj
-0 -40.5818 Td
-(0378 {) 3.612 Tj
-0 -41.8909 Td
-(0379   __asm __volatile\("outw %0,%w1" : : "a" \(data\), "d" \(port\)\);) 39.732 Tj
-0 -43.2 Td
-(0380 }) 3.612 Tj
-0 -44.5091 Td
-(0381 ) 3.01 Tj
-0 -45.8182 Td
-(0382 static __inline void) 15.05 Tj
-0 -47.1272 Td
-(0383 outsl\(int port, const void *addr, int cnt\)) 28.294 Tj
-0 -48.4363 Td
-(0384 {) 3.612 Tj
-0 -49.7454 Td
-(0385   __asm __volatile\("cld\\n\\trepne\\n\\toutsl"    :) 31.304 Tj
-0 -51.0545 Td
-(0386                    "=S" \(addr\), "=c" \(cnt\)    :) 31.304 Tj
-0 -52.3636 Td
-(0387                    "d" \(port\), "0" \(addr\), "1" \(cnt\)  :) 36.12 Tj
-0 -53.6727 Td
-(0388                    "cc"\);) 18.06 Tj
-0 -54.9818 Td
-(0389 }) 3.612 Tj
-0 -56.2909 Td
-(0390 ) 3.01 Tj
-0 -57.6 Td
-(0391 ) 3.01 Tj
-0 -58.9091 Td
-(0392 ) 3.01 Tj
-0 -60.2181 Td
-(0393 ) 3.01 Tj
-0 -61.5272 Td
-(0394 ) 3.01 Tj
-0 -62.8363 Td
-(0395 ) 3.01 Tj
-0 -64.1454 Td
-(0396 ) 3.01 Tj
-0 -65.4545 Td
-(0397 ) 3.01 Tj
-0 -66.7636 Td
-(0398 ) 3.01 Tj
-0 -68.0727 Td
-(0399 ) 3.01 Tj
-0 -72 Td
-(Sheet 03) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/x86.h  Page 1) 157.267 Tj
+0 -28.4801 Td
+(0350 // Special assembly routines to access x86-specific) 244.637 Tj
+0 -37.9735 Td
+(0351 // hardware instructions.) 131.055 Tj
+0 -47.4668 Td
+(0352 ) 21.8426 Tj
+0 -56.9602 Td
+(0353 static inline uchar) 104.844 Tj
+0 -66.4535 Td
+(0354 inb\(ushort port\)) 91.7388 Tj
+0 -75.9469 Td
+(0355 {) 26.2111 Tj
+0 -85.4403 Td
+(0356   uchar data;) 78.6333 Tj
+0 -94.9336 Td
+(0357 ) 21.8426 Tj
+0 -104.427 Td
+(0358   asm volatile\("in %1,%0" : "=a" \(data\) : "d" \(port\)\)\
+;) 257.742 Tj
+0 -113.92 Td
+(0359   return data;) 83.0018 Tj
+0 -123.414 Td
+(0360 }) 26.2111 Tj
+0 -132.907 Td
+(0361 ) 21.8426 Tj
+0 -142.4 Td
+(0362 static inline void) 100.476 Tj
+0 -151.894 Td
+(0363 insl\(int port, void *addr, int cnt\)) 174.741 Tj
+0 -161.387 Td
+(0364 {) 26.2111 Tj
+0 -170.88 Td
+(0365   asm volatile\("cld\\n\\trepne\\n\\tinsl"     :) 209.689 Tj
+0 -180.374 Td
+(0366                    "=D" \(addr\), "=c" \(cnt\)    :) 227.163 Tj
+0 -189.867 Td
+(0367                    "d" \(port\), "0" \(addr\), "1" \(cnt\)\
+  :) 262.111 Tj
+0 -199.361 Td
+(0368                    "memory", "cc"\);) 174.741 Tj
+0 -208.854 Td
+(0369 }) 26.2111 Tj
+0 -218.347 Td
+(0370 ) 21.8426 Tj
+0 -227.841 Td
+(0371 static inline void) 100.476 Tj
+0 -237.334 Td
+(0372 outb\(ushort port, uchar data\)) 148.529 Tj
+0 -246.827 Td
+(0373 {) 26.2111 Tj
+0 -256.321 Td
+(0374   asm volatile\("out %0,%1" : : "a" \(data\), "d" \(port\)\
+\);) 262.111 Tj
+0 -265.814 Td
+(0375 }) 26.2111 Tj
+0 -275.307 Td
+(0376 ) 21.8426 Tj
+0 -284.801 Td
+(0377 static inline void) 100.476 Tj
+0 -294.294 Td
+(0378 outw\(ushort port, ushort data\)) 152.898 Tj
+0 -303.788 Td
+(0379 {) 26.2111 Tj
+0 -313.281 Td
+(0380   asm volatile\("out %0,%1" : : "a" \(data\), "d" \(port\)\
+\);) 262.111 Tj
+0 -322.774 Td
+(0381 }) 26.2111 Tj
+0 -332.268 Td
+(0382 ) 21.8426 Tj
+0 -341.761 Td
+(0383 static inline void) 100.476 Tj
+0 -351.254 Td
+(0384 outsl\(int port, const void *addr, int cnt\)) 205.32 Tj
+0 -360.748 Td
+(0385 {) 26.2111 Tj
+0 -370.241 Td
+(0386   asm volatile\("cld\\n\\trepne\\n\\toutsl"    :) 209.689 Tj
+0 -379.734 Td
+(0387                    "=S" \(addr\), "=c" \(cnt\)    :) 227.163 Tj
+0 -389.228 Td
+(0388                    "d" \(port\), "0" \(addr\), "1" \(cnt\)\
+  :) 262.111 Tj
+0 -398.721 Td
+(0389                    "cc"\);) 131.055 Tj
+0 -408.214 Td
+(0390 }) 26.2111 Tj
+0 -417.708 Td
+(0391 ) 21.8426 Tj
+0 -427.201 Td
+(0392 ) 21.8426 Tj
+0 -436.695 Td
+(0393 ) 21.8426 Tj
+0 -446.188 Td
+(0394 ) 21.8426 Tj
+0 -455.681 Td
+(0395 ) 21.8426 Tj
+0 -465.175 Td
+(0396 ) 21.8426 Tj
+0 -474.668 Td
+(0397 ) 21.8426 Tj
+0 -484.161 Td
+(0398 ) 21.8426 Tj
+0 -493.655 Td
+(0399 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 03) 34.9481 Tj
 Q
 Q
 Q
@@ -4468,6 +4626,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -4475,241 +4636,257 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/x86.h  Page 2) 21.672 Tj
-0 -3.92728 Td
-(0400 struct segdesc;) 12.04 Tj
-0 -5.23637 Td
-(0401 ) 3.01 Tj
-0 -6.54546 Td
-(0402 static __inline void) 15.05 Tj
-0 -7.85455 Td
-(0403 lgdt\(struct segdesc *p, int size\)) 22.876 Tj
-0 -9.16364 Td
-(0404 {) 3.612 Tj
-0 -10.4727 Td
-(0405   volatile ushort pd[3];) 17.458 Tj
-0 -11.7818 Td
-(0406 ) 3.01 Tj
-0 -13.0909 Td
-(0407   pd[0] = size-1;) 13.244 Tj
-0 -14.4 Td
-(0408   pd[1] = \(uint\)p;) 13.846 Tj
-0 -15.7091 Td
-(0409   pd[2] = \(uint\)p >> 16;) 17.458 Tj
-0 -17.0182 Td
-(0410 ) 3.01 Tj
-0 -18.3273 Td
-(0411   asm volatile\("lgdt \(%0\)" : : "g" \(pd\)\);) 27.692 Tj
-0 -19.6364 Td
-(0412 }) 3.612 Tj
-0 -20.9455 Td
-(0413 ) 3.01 Tj
-0 -22.2545 Td
-(0414 struct gatedesc;) 12.642 Tj
-0 -23.5636 Td
-(0415 ) 3.01 Tj
-0 -24.8727 Td
-(0416 static __inline void) 15.05 Tj
-0 -26.1818 Td
-(0417 lidt\(struct gatedesc *p, int size\)) 23.478 Tj
-0 -27.4909 Td
-(0418 {) 3.612 Tj
-0 -28.8 Td
-(0419   volatile ushort pd[3];) 17.458 Tj
-0 -30.1091 Td
-(0420 ) 3.01 Tj
-0 -31.4182 Td
-(0421   pd[0] = size-1;) 13.244 Tj
-0 -32.7273 Td
-(0422   pd[1] = \(uint\)p;) 13.846 Tj
-0 -34.0364 Td
-(0423   pd[2] = \(uint\)p >> 16;) 17.458 Tj
-0 -35.3454 Td
-(0424 ) 3.01 Tj
-0 -36.6545 Td
-(0425   asm volatile\("lidt \(%0\)" : : "g" \(pd\)\);) 27.692 Tj
-0 -37.9636 Td
-(0426 }) 3.612 Tj
-0 -39.2727 Td
-(0427 ) 3.01 Tj
-0 -40.5818 Td
-(0428 static __inline void) 15.05 Tj
-0 -41.8909 Td
-(0429 ltr\(ushort sel\)) 12.04 Tj
-0 -43.2 Td
-(0430 {) 3.612 Tj
-0 -44.5091 Td
-(0431   __asm __volatile\("ltr %0" : : "r" \(sel\)\);) 28.896 Tj
-0 -45.8182 Td
-(0432 }) 3.612 Tj
-0 -47.1272 Td
-(0433 ) 3.01 Tj
-0 -48.4363 Td
-(0434 static __inline uint) 15.05 Tj
-0 -49.7454 Td
-(0435 read_eflags\(void\)) 13.244 Tj
-0 -51.0545 Td
-(0436 {) 3.612 Tj
-0 -52.3636 Td
-(0437   uint eflags;) 11.438 Tj
-0 -53.6727 Td
-(0438   __asm __volatile\("pushfl; popl %0" : "=r" \(eflags\)\);) 35.518 Tj
-0 -54.9818 Td
-(0439   return eflags;) 12.642 Tj
-0 -56.2909 Td
-(0440 }) 3.612 Tj
-0 -57.6 Td
-(0441 ) 3.01 Tj
-0 -58.9091 Td
-(0442 static __inline void) 15.05 Tj
-0 -60.2181 Td
-(0443 write_eflags\(uint eflags\)) 18.06 Tj
-0 -61.5272 Td
-(0444 {) 3.612 Tj
-0 -62.8363 Td
-(0445   __asm __volatile\("pushl %0; popfl" : : "r" \(eflags\)\);) 36.12 Tj
-0 -64.1454 Td
-(0446 }) 3.612 Tj
-0 -65.4545 Td
-(0447 ) 3.01 Tj
-0 -66.7636 Td
-(0448 ) 3.01 Tj
-0 -68.0727 Td
-(0449 ) 3.01 Tj
-0 -72 Td
-(Sheet 04) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/x86.h  Page 2) 157.267 Tj
+0 -28.4801 Td
+(0400 struct segdesc;) 87.3703 Tj
+0 -37.9735 Td
+(0401 ) 21.8426 Tj
+0 -47.4668 Td
+(0402 static inline void) 100.476 Tj
+0 -56.9602 Td
+(0403 lgdt\(struct segdesc *p, int size\)) 166.004 Tj
+0 -66.4535 Td
+(0404 {) 26.2111 Tj
+0 -75.9469 Td
+(0405   volatile ushort pd[3];) 126.687 Tj
+0 -85.4403 Td
+(0406 ) 21.8426 Tj
+0 -94.9336 Td
+(0407   pd[0] = size-1;) 96.1073 Tj
+0 -104.427 Td
+(0408   pd[1] = \(uint\)p;) 100.476 Tj
+0 -113.92 Td
+(0409   pd[2] = \(uint\)p >> 16;) 126.687 Tj
+0 -123.414 Td
+(0410 ) 21.8426 Tj
+0 -132.907 Td
+(0411   asm volatile\("lgdt \(%0\)" : : "r" \(pd\)\);) 200.952 Tj
+0 -142.4 Td
+(0412 }) 26.2111 Tj
+0 -151.894 Td
+(0413 ) 21.8426 Tj
+0 -161.387 Td
+(0414 struct gatedesc;) 91.7388 Tj
+0 -170.88 Td
+(0415 ) 21.8426 Tj
+0 -180.374 Td
+(0416 static inline void) 100.476 Tj
+0 -189.867 Td
+(0417 lidt\(struct gatedesc *p, int size\)) 170.372 Tj
+0 -199.361 Td
+(0418 {) 26.2111 Tj
+0 -208.854 Td
+(0419   volatile ushort pd[3];) 126.687 Tj
+0 -218.347 Td
+(0420 ) 21.8426 Tj
+0 -227.841 Td
+(0421   pd[0] = size-1;) 96.1073 Tj
+0 -237.334 Td
+(0422   pd[1] = \(uint\)p;) 100.476 Tj
+0 -246.827 Td
+(0423   pd[2] = \(uint\)p >> 16;) 126.687 Tj
+0 -256.321 Td
+(0424 ) 21.8426 Tj
+0 -265.814 Td
+(0425   asm volatile\("lidt \(%0\)" : : "r" \(pd\)\);) 200.952 Tj
+0 -275.307 Td
+(0426 }) 26.2111 Tj
+0 -284.801 Td
+(0427 ) 21.8426 Tj
+0 -294.294 Td
+(0428 static inline void) 100.476 Tj
+0 -303.788 Td
+(0429 ltr\(ushort sel\)) 87.3703 Tj
+0 -313.281 Td
+(0430 {) 26.2111 Tj
+0 -322.774 Td
+(0431   asm volatile\("ltr %0" : : "r" \(sel\)\);) 192.215 Tj
+0 -332.268 Td
+(0432 }) 26.2111 Tj
+0 -341.761 Td
+(0433 ) 21.8426 Tj
+0 -351.254 Td
+(0434 static inline uint) 100.476 Tj
+0 -360.748 Td
+(0435 read_eflags\(void\)) 96.1073 Tj
+0 -370.241 Td
+(0436 {) 26.2111 Tj
+0 -379.734 Td
+(0437   uint eflags;) 83.0018 Tj
+0 -389.228 Td
+(0438   asm volatile\("pushfl; popl %0" : "=r" \(eflags\)\);) 240.268 Tj
+0 -398.721 Td
+(0439   return eflags;) 91.7388 Tj
+0 -408.214 Td
+(0440 }) 26.2111 Tj
+0 -417.708 Td
+(0441 ) 21.8426 Tj
+0 -427.201 Td
+(0442 static inline void) 100.476 Tj
+0 -436.695 Td
+(0443 write_eflags\(uint eflags\)) 131.055 Tj
+0 -446.188 Td
+(0444 {) 26.2111 Tj
+0 -455.681 Td
+(0445   asm volatile\("pushl %0; popfl" : : "r" \(eflags\)\);) 244.637 Tj
+0 -465.175 Td
+(0446 }) 26.2111 Tj
+0 -474.668 Td
+(0447 ) 21.8426 Tj
+0 -484.161 Td
+(0448 ) 21.8426 Tj
+0 -493.655 Td
+(0449 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/x86.h  Page 3) 21.672 Tj
-0 -3.92728 Td
-(0450 static __inline void) 15.05 Tj
-0 -5.23637 Td
-(0451 cpuid\(uint info, uint *eaxp, uint *ebxp, uint *ecxp, uint *edxp\)) 41.538 Tj
-0 -6.54546 Td
-(0452 {) 3.612 Tj
-0 -7.85455 Td
-(0453   uint eax, ebx, ecx, edx;) 18.662 Tj
-0 -9.16364 Td
-(0454   asm volatile\("cpuid" :) 17.458 Tj
-0 -10.4727 Td
-(0455                "=a" \(eax\), "=b" \(ebx\), "=c" \(ecx\), "=d" \(edx\) :) 40.936 Tj
-0 -11.7818 Td
-(0456                "a" \(info\)\);) 19.264 Tj
-0 -13.0909 Td
-(0457   if\(eaxp\)) 9.03 Tj
-0 -14.4 Td
-(0458     *eaxp = eax;) 12.642 Tj
-0 -15.7091 Td
-(0459   if\(ebxp\)) 9.03 Tj
-0 -17.0182 Td
-(0460     *ebxp = ebx;) 12.642 Tj
-0 -18.3273 Td
-(0461   if\(ecxp\)) 9.03 Tj
-0 -19.6364 Td
-(0462     *ecxp = ecx;) 12.642 Tj
-0 -20.9455 Td
-(0463   if\(edxp\)) 9.03 Tj
-0 -22.2545 Td
-(0464     *edxp = edx;) 12.642 Tj
-0 -23.5636 Td
-(0465 }) 3.612 Tj
-0 -24.8727 Td
-(0466 ) 3.01 Tj
-0 -26.1818 Td
-(0467 static __inline uint) 15.05 Tj
-0 -27.4909 Td
-(0468 cmpxchg\(uint oldval, uint newval, volatile uint* lock_addr\)) 38.528 Tj
-0 -28.8 Td
-(0469 {) 3.612 Tj
-0 -30.1091 Td
-(0470   uint result;) 11.438 Tj
-0 -31.4182 Td
-(0471   __asm__ __volatile__\("lock; cmpxchgl %2, %0" :) 31.906 Tj
-0 -32.7273 Td
-(0472                        "+m" \(*lock_addr\), "=a" \(result\) :) 37.324 Tj
-0 -34.0364 Td
-(0473                        "r"\(newval\), "1"\(oldval\) :) 32.508 Tj
-0 -35.3454 Td
-(0474                        "cc"\);) 20.468 Tj
-0 -36.6545 Td
-(0475   return result;) 12.642 Tj
-0 -37.9636 Td
-(0476 }) 3.612 Tj
-0 -39.2727 Td
-(0477 ) 3.01 Tj
-0 -40.5818 Td
-(0478 static __inline void) 15.05 Tj
-0 -41.8909 Td
-(0479 cli\(void\)) 8.428 Tj
-0 -43.2 Td
-(0480 {) 3.612 Tj
-0 -44.5091 Td
-(0481   __asm__ volatile\("cli"\);) 18.662 Tj
-0 -45.8182 Td
-(0482 }) 3.612 Tj
-0 -47.1272 Td
-(0483 ) 3.01 Tj
-0 -48.4363 Td
-(0484 static __inline void) 15.05 Tj
-0 -49.7454 Td
-(0485 sti\(void\)) 8.428 Tj
-0 -51.0545 Td
-(0486 {) 3.612 Tj
-0 -52.3636 Td
-(0487   __asm__ volatile\("sti"\);) 18.662 Tj
-0 -53.6727 Td
-(0488 }) 3.612 Tj
-0 -54.9818 Td
-(0489 ) 3.01 Tj
-0 -56.2909 Td
-(0490 ) 3.01 Tj
-0 -57.6 Td
-(0491 ) 3.01 Tj
-0 -58.9091 Td
-(0492 ) 3.01 Tj
-0 -60.2181 Td
-(0493 ) 3.01 Tj
-0 -61.5272 Td
-(0494 ) 3.01 Tj
-0 -62.8363 Td
-(0495 ) 3.01 Tj
-0 -64.1454 Td
-(0496 ) 3.01 Tj
-0 -65.4545 Td
-(0497 ) 3.01 Tj
-0 -66.7636 Td
-(0498 ) 3.01 Tj
-0 -68.0727 Td
-(0499 ) 3.01 Tj
-0 -72 Td
-(Sheet 04) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/x86.h  Page 3) 157.267 Tj
+0 -28.4801 Td
+(0450 static inline void) 100.476 Tj
+0 -37.9735 Td
+(0451 cpuid\(uint info, uint *eaxp, uint *ebxp, uint *ecxp, uint\
+ *edxp\)) 301.427 Tj
+0 -47.4668 Td
+(0452 {) 26.2111 Tj
+0 -56.9602 Td
+(0453   uint eax, ebx, ecx, edx;) 135.424 Tj
+0 -66.4535 Td
+(0454 ) 21.8426 Tj
+0 -75.9469 Td
+(0455   asm volatile\("cpuid" :) 126.687 Tj
+0 -85.4403 Td
+(0456                "=a" \(eax\), "=b" \(ebx\), "=c" \(ecx\), "\
+=d" \(edx\) :) 297.059 Tj
+0 -94.9336 Td
+(0457                "a" \(info\)\);) 139.792 Tj
+0 -104.427 Td
+(0458   if\(eaxp\)) 65.5277 Tj
+0 -113.92 Td
+(0459     *eaxp = eax;) 91.7388 Tj
+0 -123.414 Td
+(0460   if\(ebxp\)) 65.5277 Tj
+0 -132.907 Td
+(0461     *ebxp = ebx;) 91.7388 Tj
+0 -142.4 Td
+(0462   if\(ecxp\)) 65.5277 Tj
+0 -151.894 Td
+(0463     *ecxp = ecx;) 91.7388 Tj
+0 -161.387 Td
+(0464   if\(edxp\)) 65.5277 Tj
+0 -170.88 Td
+(0465     *edxp = edx;) 91.7388 Tj
+0 -180.374 Td
+(0466 }) 26.2111 Tj
+0 -189.867 Td
+(0467 ) 21.8426 Tj
+0 -199.361 Td
+(0468 static inline uint) 100.476 Tj
+0 -208.854 Td
+(0469 cmpxchg\(uint oldval, uint newval, volatile uint* lock_add\
+r\)) 279.585 Tj
+0 -218.347 Td
+(0470 {) 26.2111 Tj
+0 -227.841 Td
+(0471   uint result;) 83.0018 Tj
+0 -237.334 Td
+(0472 ) 21.8426 Tj
+0 -246.827 Td
+(0473   // The + in "+m" denotes a read-modify-write operand.) 262.111 Tj
+0 -256.321 Td
+(0474   asm volatile\("lock; cmpxchgl %2, %0" :) 196.583 Tj
+0 -265.814 Td
+(0475                        "+m" \(*lock_addr\), "=a" \(result\)\
+ :) 270.848 Tj
+0 -275.307 Td
+(0476                        "r"\(newval\), "1"\(oldval\) :) 235.9 Tj
+0 -284.801 Td
+(0477                        "cc"\);) 148.529 Tj
+0 -294.294 Td
+(0478   return result;) 91.7388 Tj
+0 -303.788 Td
+(0479 }) 26.2111 Tj
+0 -313.281 Td
+(0480 ) 21.8426 Tj
+0 -322.774 Td
+(0481 static inline void) 100.476 Tj
+0 -332.268 Td
+(0482 cli\(void\)) 61.1592 Tj
+0 -341.761 Td
+(0483 {) 26.2111 Tj
+0 -351.254 Td
+(0484   asm volatile\("cli"\);) 117.95 Tj
+0 -360.748 Td
+(0485 }) 26.2111 Tj
+0 -370.241 Td
+(0486 ) 21.8426 Tj
+0 -379.734 Td
+(0487 static inline void) 100.476 Tj
+0 -389.228 Td
+(0488 sti\(void\)) 61.1592 Tj
+0 -398.721 Td
+(0489 {) 26.2111 Tj
+0 -408.214 Td
+(0490   asm volatile\("sti"\);) 117.95 Tj
+0 -417.708 Td
+(0491 }) 26.2111 Tj
+0 -427.201 Td
+(0492 ) 21.8426 Tj
+0 -436.695 Td
+(0493 ) 21.8426 Tj
+0 -446.188 Td
+(0494 ) 21.8426 Tj
+0 -455.681 Td
+(0495 ) 21.8426 Tj
+0 -465.175 Td
+(0496 ) 21.8426 Tj
+0 -474.668 Td
+(0497 ) 21.8426 Tj
+0 -484.161 Td
+(0498 ) 21.8426 Tj
+0 -493.655 Td
+(0499 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 04) 34.9481 Tj
 Q
 Q
 Q
@@ -4720,7 +4897,10 @@ pdfEndPage
 %%Page: 12 12
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -4728,241 +4908,265 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/x86.h  Page 4) 21.672 Tj
-0 -3.92728 Td
-(0500 // Layout of the trap frame on the stack upon entry to trap.) 39.13 Tj
-0 -5.23637 Td
-(0501 struct trapframe {) 13.846 Tj
-0 -6.54546 Td
-(0502   // registers as pushed by pusha) 22.876 Tj
-0 -7.85455 Td
-(0503   uint edi;) 9.632 Tj
-0 -9.16364 Td
-(0504   uint esi;) 9.632 Tj
-0 -10.4727 Td
-(0505   uint ebp;) 9.632 Tj
-0 -11.7818 Td
-(0506   uint oesp;      // useless & ignored) 25.886 Tj
-0 -13.0909 Td
-(0507   uint ebx;) 9.632 Tj
-0 -14.4 Td
-(0508   uint edx;) 9.632 Tj
-0 -15.7091 Td
-(0509   uint ecx;) 9.632 Tj
-0 -17.0182 Td
-(0510   uint eax;) 9.632 Tj
-0 -18.3273 Td
-(0511 ) 3.01 Tj
-0 -19.6364 Td
-(0512   // rest of trap frame) 16.856 Tj
-0 -20.9455 Td
-(0513   ushort es;) 10.234 Tj
-0 -22.2545 Td
-(0514   ushort padding1;) 13.846 Tj
-0 -23.5636 Td
-(0515   ushort ds;) 10.234 Tj
-0 -24.8727 Td
-(0516   ushort padding2;) 13.846 Tj
-0 -26.1818 Td
-(0517   uint trapno;) 11.438 Tj
-0 -27.4909 Td
-(0518 ) 3.01 Tj
-0 -28.8 Td
-(0519   // below here defined by x86 hardware) 26.488 Tj
-0 -30.1091 Td
-(0520   uint err;) 9.632 Tj
-0 -31.4182 Td
-(0521   uint eip;) 9.632 Tj
-0 -32.7273 Td
-(0522   ushort cs;) 10.234 Tj
-0 -34.0364 Td
-(0523   ushort padding3;) 13.846 Tj
-0 -35.3454 Td
-(0524   uint eflags;) 11.438 Tj
-0 -36.6545 Td
-(0525 ) 3.01 Tj
-0 -37.9636 Td
-(0526   // below here only when crossing rings, such as from user to kernel) 44.548 Tj
-0 -39.2727 Td
-(0527   uint esp;) 9.632 Tj
-0 -40.5818 Td
-(0528   ushort ss;) 10.234 Tj
-0 -41.8909 Td
-(0529   ushort padding4;) 13.846 Tj
-0 -43.2 Td
-(0530 };) 4.214 Tj
-0 -44.5091 Td
-(0531 ) 3.01 Tj
-0 -45.8182 Td
-(0532 ) 3.01 Tj
-0 -47.1272 Td
-(0533 ) 3.01 Tj
-0 -48.4363 Td
-(0534 ) 3.01 Tj
-0 -49.7454 Td
-(0535 ) 3.01 Tj
-0 -51.0545 Td
-(0536 ) 3.01 Tj
-0 -52.3636 Td
-(0537 ) 3.01 Tj
-0 -53.6727 Td
-(0538 ) 3.01 Tj
-0 -54.9818 Td
-(0539 ) 3.01 Tj
-0 -56.2909 Td
-(0540 ) 3.01 Tj
-0 -57.6 Td
-(0541 ) 3.01 Tj
-0 -58.9091 Td
-(0542 ) 3.01 Tj
-0 -60.2181 Td
-(0543 ) 3.01 Tj
-0 -61.5272 Td
-(0544 ) 3.01 Tj
-0 -62.8363 Td
-(0545 ) 3.01 Tj
-0 -64.1454 Td
-(0546 ) 3.01 Tj
-0 -65.4545 Td
-(0547 ) 3.01 Tj
-0 -66.7636 Td
-(0548 ) 3.01 Tj
-0 -68.0727 Td
-(0549 ) 3.01 Tj
-0 -72 Td
-(Sheet 05) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/x86.h  Page 4) 157.267 Tj
+0 -28.4801 Td
+(0500 // Layout of the trap frame on the stack upon entry to tra\
+p.) 283.953 Tj
+0 -37.9735 Td
+(0501 struct trapframe {) 100.476 Tj
+0 -47.4668 Td
+(0502   // registers as pushed by pusha) 166.004 Tj
+0 -56.9602 Td
+(0503   uint edi;) 69.8962 Tj
+0 -66.4535 Td
+(0504   uint esi;) 69.8962 Tj
+0 -75.9469 Td
+(0505   uint ebp;) 69.8962 Tj
+0 -85.4403 Td
+(0506   uint oesp;      // useless & ignored) 187.846 Tj
+0 -94.9336 Td
+(0507   uint ebx;) 69.8962 Tj
+0 -104.427 Td
+(0508   uint edx;) 69.8962 Tj
+0 -113.92 Td
+(0509   uint ecx;) 69.8962 Tj
+0 -123.414 Td
+(0510   uint eax;) 69.8962 Tj
+0 -132.907 Td
+(0511 ) 21.8426 Tj
+0 -142.4 Td
+(0512   // rest of trap frame) 122.318 Tj
+0 -151.894 Td
+(0513   ushort es;) 74.2647 Tj
+0 -161.387 Td
+(0514   ushort padding1;) 100.476 Tj
+0 -170.88 Td
+(0515   ushort ds;) 74.2647 Tj
+0 -180.374 Td
+(0516   ushort padding2;) 100.476 Tj
+0 -189.867 Td
+(0517   uint trapno;) 83.0018 Tj
+0 -199.361 Td
+(0518 ) 21.8426 Tj
+0 -208.854 Td
+(0519   // below here defined by x86 hardware) 192.215 Tj
+0 -218.347 Td
+(0520   uint err;) 69.8962 Tj
+0 -227.841 Td
+(0521   uint eip;) 69.8962 Tj
+0 -237.334 Td
+(0522   ushort cs;) 74.2647 Tj
+0 -246.827 Td
+(0523   ushort padding3;) 100.476 Tj
+0 -256.321 Td
+(0524   uint eflags;) 83.0018 Tj
+0 -265.814 Td
+(0525 ) 21.8426 Tj
+0 -275.307 Td
+(0526   // below here only when crossing rings, such as from use\
+r to kernel) 323.27 Tj
+0 -284.801 Td
+(0527   uint esp;) 69.8962 Tj
+0 -294.294 Td
+(0528   ushort ss;) 74.2647 Tj
+0 -303.788 Td
+(0529   ushort padding4;) 100.476 Tj
+0 -313.281 Td
+(0530 };) 30.5796 Tj
+0 -322.774 Td
+(0531 ) 21.8426 Tj
+0 -332.268 Td
+(0532 ) 21.8426 Tj
+0 -341.761 Td
+(0533 ) 21.8426 Tj
+0 -351.254 Td
+(0534 ) 21.8426 Tj
+0 -360.748 Td
+(0535 ) 21.8426 Tj
+0 -370.241 Td
+(0536 ) 21.8426 Tj
+0 -379.734 Td
+(0537 ) 21.8426 Tj
+0 -389.228 Td
+(0538 ) 21.8426 Tj
+0 -398.721 Td
+(0539 ) 21.8426 Tj
+0 -408.214 Td
+(0540 ) 21.8426 Tj
+0 -417.708 Td
+(0541 ) 21.8426 Tj
+0 -427.201 Td
+(0542 ) 21.8426 Tj
+0 -436.695 Td
+(0543 ) 21.8426 Tj
+0 -446.188 Td
+(0544 ) 21.8426 Tj
+0 -455.681 Td
+(0545 ) 21.8426 Tj
+0 -465.175 Td
+(0546 ) 21.8426 Tj
+0 -474.668 Td
+(0547 ) 21.8426 Tj
+0 -484.161 Td
+(0548 ) 21.8426 Tj
+0 -493.655 Td
+(0549 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/asm.h  Page 1) 21.672 Tj
-0 -3.92728 Td
-(0550 //) 4.214 Tj
-0 -5.23637 Td
-(0551 // macros to create x86 segments from assembler) 31.304 Tj
-0 -6.54546 Td
-(0552 //) 4.214 Tj
-0 -7.85455 Td
-(0553 ) 3.01 Tj
-0 -9.16364 Td
-(0554 #define SEG_NULLASM                                             \\) 42.14 Tj
-0 -10.4727 Td
-(0555         .word 0, 0;                                             \\) 42.14 Tj
-0 -11.7818 Td
-(0556         .byte 0, 0, 0, 0) 17.458 Tj
-0 -13.0909 Td
-(0557 ) 3.01 Tj
-0 -14.4 Td
-(0558 #define SEG_ASM\(type,base,lim\)                                  \\) 42.14 Tj
-0 -15.7091 Td
-(0559         .word \(\(\(lim\) >> 12\) & 0xffff\), \(\(base\) & 0xffff\);      \\) 42.14 Tj
-0 -17.0182 Td
-(0560         .byte \(\(\(base\) >> 16\) & 0xff\), \(0x90 | \(type\)\),         \\) 42.14 Tj
-0 -18.3273 Td
-(0561                 \(0xC0 | \(\(\(lim\) >> 28\) & 0xf\)\), \(\(\(base\) >> 24\) & 0xff\)) 45.752 Tj
-0 -19.6364 Td
-(0562 ) 3.01 Tj
-0 -20.9455 Td
-(0563 #define STA_X     0x8       // Executable segment) 32.508 Tj
-0 -22.2545 Td
-(0564 #define STA_E     0x4       // Expand down \(non-executable segments\)) 43.946 Tj
-0 -23.5636 Td
-(0565 #define STA_C     0x4       // Conforming code segment \(executable only\)) 46.354 Tj
-0 -24.8727 Td
-(0566 #define STA_W     0x2       // Writeable \(non-executable segments\)) 42.742 Tj
-0 -26.1818 Td
-(0567 #define STA_R     0x2       // Readable \(executable segments\)) 39.732 Tj
-0 -27.4909 Td
-(0568 #define STA_A     0x1       // Accessed) 26.488 Tj
-0 -28.8 Td
-(0569 ) 3.01 Tj
-0 -30.1091 Td
-(0570 ) 3.01 Tj
-0 -31.4182 Td
-(0571 ) 3.01 Tj
-0 -32.7273 Td
-(0572 ) 3.01 Tj
-0 -34.0364 Td
-(0573 ) 3.01 Tj
-0 -35.3454 Td
-(0574 ) 3.01 Tj
-0 -36.6545 Td
-(0575 ) 3.01 Tj
-0 -37.9636 Td
-(0576 ) 3.01 Tj
-0 -39.2727 Td
-(0577 ) 3.01 Tj
-0 -40.5818 Td
-(0578 ) 3.01 Tj
-0 -41.8909 Td
-(0579 ) 3.01 Tj
-0 -43.2 Td
-(0580 ) 3.01 Tj
-0 -44.5091 Td
-(0581 ) 3.01 Tj
-0 -45.8182 Td
-(0582 ) 3.01 Tj
-0 -47.1272 Td
-(0583 ) 3.01 Tj
-0 -48.4363 Td
-(0584 ) 3.01 Tj
-0 -49.7454 Td
-(0585 ) 3.01 Tj
-0 -51.0545 Td
-(0586 ) 3.01 Tj
-0 -52.3636 Td
-(0587 ) 3.01 Tj
-0 -53.6727 Td
-(0588 ) 3.01 Tj
-0 -54.9818 Td
-(0589 ) 3.01 Tj
-0 -56.2909 Td
-(0590 ) 3.01 Tj
-0 -57.6 Td
-(0591 ) 3.01 Tj
-0 -58.9091 Td
-(0592 ) 3.01 Tj
-0 -60.2181 Td
-(0593 ) 3.01 Tj
-0 -61.5272 Td
-(0594 ) 3.01 Tj
-0 -62.8363 Td
-(0595 ) 3.01 Tj
-0 -64.1454 Td
-(0596 ) 3.01 Tj
-0 -65.4545 Td
-(0597 ) 3.01 Tj
-0 -66.7636 Td
-(0598 ) 3.01 Tj
-0 -68.0727 Td
-(0599 ) 3.01 Tj
-0 -72 Td
-(Sheet 05) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/asm.h  Page 1) 157.267 Tj
+0 -28.4801 Td
+(0550 //) 30.5796 Tj
+0 -37.9735 Td
+(0551 // macros to create x86 segments from assembler) 227.163 Tj
+0 -47.4668 Td
+(0552 //) 30.5796 Tj
+0 -56.9602 Td
+(0553 ) 21.8426 Tj
+0 -66.4535 Td
+(0554 #define SEG_NULLASM                                       \
+      \\) 305.796 Tj
+0 -75.9469 Td
+(0555         .word 0, 0;                                       \
+      \\) 305.796 Tj
+0 -85.4403 Td
+(0556         .byte 0, 0, 0, 0) 126.687 Tj
+0 -94.9336 Td
+(0557 ) 21.8426 Tj
+0 -104.427 Td
+(0558 #define SEG_ASM\(type,base,lim\)                          \
+        \\) 305.796 Tj
+0 -113.92 Td
+(0559         .word \(\(\(lim\) >> 12\) & 0xffff\), \(\(base\) &\
+ 0xffff\);      \\) 305.796 Tj
+0 -123.414 Td
+(0560         .byte \(\(\(base\) >> 16\) & 0xff\), \(0x90 | \(ty\
+pe\)\),         \\) 305.796 Tj
+0 -132.907 Td
+(0561                 \(0xC0 | \(\(\(lim\) >> 28\) & 0xf\)\), \(\
+\(\(base\) >> 24\) & 0xff\)) 332.007 Tj
+0 -142.4 Td
+(0562 ) 21.8426 Tj
+0 -151.894 Td
+(0563 #define STA_X     0x8       // Executable segment) 235.9 Tj
+0 -161.387 Td
+(0564 #define STA_E     0x4       // Expand down \(non-executabl\
+e segments\)) 318.902 Tj
+0 -170.88 Td
+(0565 #define STA_C     0x4       // Conforming code segment \(e\
+xecutable only\)) 336.376 Tj
+0 -180.374 Td
+(0566 #define STA_W     0x2       // Writeable \(non-executable \
+segments\)) 310.165 Tj
+0 -189.867 Td
+(0567 #define STA_R     0x2       // Readable \(executable segme\
+nts\)) 288.322 Tj
+0 -199.361 Td
+(0568 #define STA_A     0x1       // Accessed) 192.215 Tj
+0 -208.854 Td
+(0569 ) 21.8426 Tj
+0 -218.347 Td
+(0570 ) 21.8426 Tj
+0 -227.841 Td
+(0571 ) 21.8426 Tj
+0 -237.334 Td
+(0572 ) 21.8426 Tj
+0 -246.827 Td
+(0573 ) 21.8426 Tj
+0 -256.321 Td
+(0574 ) 21.8426 Tj
+0 -265.814 Td
+(0575 ) 21.8426 Tj
+0 -275.307 Td
+(0576 ) 21.8426 Tj
+0 -284.801 Td
+(0577 ) 21.8426 Tj
+0 -294.294 Td
+(0578 ) 21.8426 Tj
+0 -303.788 Td
+(0579 ) 21.8426 Tj
+0 -313.281 Td
+(0580 ) 21.8426 Tj
+0 -322.774 Td
+(0581 ) 21.8426 Tj
+0 -332.268 Td
+(0582 ) 21.8426 Tj
+0 -341.761 Td
+(0583 ) 21.8426 Tj
+0 -351.254 Td
+(0584 ) 21.8426 Tj
+0 -360.748 Td
+(0585 ) 21.8426 Tj
+0 -370.241 Td
+(0586 ) 21.8426 Tj
+0 -379.734 Td
+(0587 ) 21.8426 Tj
+0 -389.228 Td
+(0588 ) 21.8426 Tj
+0 -398.721 Td
+(0589 ) 21.8426 Tj
+0 -408.214 Td
+(0590 ) 21.8426 Tj
+0 -417.708 Td
+(0591 ) 21.8426 Tj
+0 -427.201 Td
+(0592 ) 21.8426 Tj
+0 -436.695 Td
+(0593 ) 21.8426 Tj
+0 -446.188 Td
+(0594 ) 21.8426 Tj
+0 -455.681 Td
+(0595 ) 21.8426 Tj
+0 -465.175 Td
+(0596 ) 21.8426 Tj
+0 -474.668 Td
+(0597 ) 21.8426 Tj
+0 -484.161 Td
+(0598 ) 21.8426 Tj
+0 -493.655 Td
+(0599 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 05) 34.9481 Tj
 Q
 Q
 Q
@@ -4974,6 +5178,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -4981,241 +5188,277 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/mmu.h  Page 1) 21.672 Tj
-0 -3.92728 Td
-(0600 // This file contains definitions for the) 27.692 Tj
-0 -5.23637 Td
-(0601 // x86 memory management unit \(MMU\).) 24.682 Tj
-0 -6.54546 Td
-(0602 ) 3.01 Tj
-0 -7.85455 Td
-(0603 // Eflags register) 13.846 Tj
-0 -9.16364 Td
-(0604 #define FL_CF           0x00000001      // Carry Flag) 34.916 Tj
-0 -10.4727 Td
-(0605 #define FL_PF           0x00000004      // Parity Flag) 35.518 Tj
-0 -11.7818 Td
-(0606 #define FL_AF           0x00000010      // Auxiliary carry Flag) 40.936 Tj
-0 -13.0909 Td
-(0607 #define FL_ZF           0x00000040      // Zero Flag) 34.314 Tj
-0 -14.4 Td
-(0608 #define FL_SF           0x00000080      // Sign Flag) 34.314 Tj
-0 -15.7091 Td
-(0609 #define FL_TF           0x00000100      // Trap Flag) 34.314 Tj
-0 -17.0182 Td
-(0610 #define FL_IF           0x00000200      // Interrupt Enable) 38.528 Tj
-0 -18.3273 Td
-(0611 #define FL_DF           0x00000400      // Direction Flag) 37.324 Tj
-0 -19.6364 Td
-(0612 #define FL_OF           0x00000800      // Overflow Flag) 36.722 Tj
-0 -20.9455 Td
-(0613 #define FL_IOPL_MASK    0x00003000      // I/O Privilege Level bitmask) 45.15 Tj
-0 -22.2545 Td
-(0614 #define FL_IOPL_0       0x00000000      //   IOPL == 0) 35.518 Tj
-0 -23.5636 Td
-(0615 #define FL_IOPL_1       0x00001000      //   IOPL == 1) 35.518 Tj
-0 -24.8727 Td
-(0616 #define FL_IOPL_2       0x00002000      //   IOPL == 2) 35.518 Tj
-0 -26.1818 Td
-(0617 #define FL_IOPL_3       0x00003000      //   IOPL == 3) 35.518 Tj
-0 -27.4909 Td
-(0618 #define FL_NT           0x00004000      // Nested Task) 35.518 Tj
-0 -28.8 Td
-(0619 #define FL_RF           0x00010000      // Resume Flag) 35.518 Tj
-0 -30.1091 Td
-(0620 #define FL_VM           0x00020000      // Virtual 8086 mode) 39.13 Tj
-0 -31.4182 Td
-(0621 #define FL_AC           0x00040000      // Alignment Check) 37.926 Tj
-0 -32.7273 Td
-(0622 #define FL_VIF          0x00080000      // Virtual Interrupt Flag) 42.14 Tj
-0 -34.0364 Td
-(0623 #define FL_VIP          0x00100000      // Virtual Interrupt Pending) 43.946 Tj
-0 -35.3454 Td
-(0624 #define FL_ID           0x00200000      // ID flag) 33.11 Tj
-0 -36.6545 Td
-(0625 ) 3.01 Tj
-0 -37.9636 Td
-(0626 // Segment Descriptor) 15.652 Tj
-0 -39.2727 Td
-(0627 struct segdesc {) 12.642 Tj
-0 -40.5818 Td
-(0628   uint lim_15_0 : 16;  // Low bits of segment limit) 33.712 Tj
-0 -41.8909 Td
-(0629   uint base_15_0 : 16; // Low bits of segment base address) 37.926 Tj
-0 -43.2 Td
-(0630   uint base_23_16 : 8; // Middle bits of segment base address) 39.732 Tj
-0 -44.5091 Td
-(0631   uint type : 4;       // Segment type \(see STS_ constants\)) 38.528 Tj
-0 -45.8182 Td
-(0632   uint s : 1;          // 0 = system, 1 = application) 34.916 Tj
-0 -47.1272 Td
-(0633   uint dpl : 2;        // Descriptor Privilege Level) 34.314 Tj
-0 -48.4363 Td
-(0634   uint p : 1;          // Present) 22.876 Tj
-0 -49.7454 Td
-(0635   uint lim_19_16 : 4;  // High bits of segment limit) 34.314 Tj
-0 -51.0545 Td
-(0636   uint avl : 1;        // Unused \(available for software use\)) 39.732 Tj
-0 -52.3636 Td
-(0637   uint rsv1 : 1;       // Reserved) 23.478 Tj
-0 -53.6727 Td
-(0638   uint db : 1;         // 0 = 16-bit segment, 1 = 32-bit segment) 41.538 Tj
-0 -54.9818 Td
-(0639   uint g : 1;          // Granularity: limit scaled by 4K when set) 42.742 Tj
-0 -56.2909 Td
-(0640   uint base_31_24 : 8; // High bits of segment base address) 38.528 Tj
-0 -57.6 Td
-(0641 };) 4.214 Tj
-0 -58.9091 Td
-(0642 ) 3.01 Tj
-0 -60.2181 Td
-(0643 ) 3.01 Tj
-0 -61.5272 Td
-(0644 ) 3.01 Tj
-0 -62.8363 Td
-(0645 ) 3.01 Tj
-0 -64.1454 Td
-(0646 ) 3.01 Tj
-0 -65.4545 Td
-(0647 ) 3.01 Tj
-0 -66.7636 Td
-(0648 ) 3.01 Tj
-0 -68.0727 Td
-(0649 ) 3.01 Tj
-0 -72 Td
-(Sheet 06) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/mmu.h  Page 1) 157.267 Tj
+0 -28.4801 Td
+(0600 // This file contains definitions for the) 200.952 Tj
+0 -37.9735 Td
+(0601 // x86 memory management unit \(MMU\).) 179.109 Tj
+0 -47.4668 Td
+(0602 ) 21.8426 Tj
+0 -56.9602 Td
+(0603 // Eflags register) 100.476 Tj
+0 -66.4535 Td
+(0604 #define FL_CF           0x00000001      // Carry Flag) 253.374 Tj
+0 -75.9469 Td
+(0605 #define FL_PF           0x00000004      // Parity Flag) 257.742 Tj
+0 -85.4403 Td
+(0606 #define FL_AF           0x00000010      // Auxiliary carry\
+ Flag) 297.059 Tj
+0 -94.9336 Td
+(0607 #define FL_ZF           0x00000040      // Zero Flag) 249.005 Tj
+0 -104.427 Td
+(0608 #define FL_SF           0x00000080      // Sign Flag) 249.005 Tj
+0 -113.92 Td
+(0609 #define FL_TF           0x00000100      // Trap Flag) 249.005 Tj
+0 -123.414 Td
+(0610 #define FL_IF           0x00000200      // Interrupt Enabl\
+e) 279.585 Tj
+0 -132.907 Td
+(0611 #define FL_DF           0x00000400      // Direction Flag) 270.848 Tj
+0 -142.4 Td
+(0612 #define FL_OF           0x00000800      // Overflow Flag) 266.479 Tj
+0 -151.894 Td
+(0613 #define FL_IOPL_MASK    0x00003000      // I/O Privilege L\
+evel bitmask) 327.639 Tj
+0 -161.387 Td
+(0614 #define FL_IOPL_0       0x00000000      //   IOPL == 0) 257.742 Tj
+0 -170.88 Td
+(0615 #define FL_IOPL_1       0x00001000      //   IOPL == 1) 257.742 Tj
+0 -180.374 Td
+(0616 #define FL_IOPL_2       0x00002000      //   IOPL == 2) 257.742 Tj
+0 -189.867 Td
+(0617 #define FL_IOPL_3       0x00003000      //   IOPL == 3) 257.742 Tj
+0 -199.361 Td
+(0618 #define FL_NT           0x00004000      // Nested Task) 257.742 Tj
+0 -208.854 Td
+(0619 #define FL_RF           0x00010000      // Resume Flag) 257.742 Tj
+0 -218.347 Td
+(0620 #define FL_VM           0x00020000      // Virtual 8086 mo\
+de) 283.953 Tj
+0 -227.841 Td
+(0621 #define FL_AC           0x00040000      // Alignment Check) 275.216 Tj
+0 -237.334 Td
+(0622 #define FL_VIF          0x00080000      // Virtual Interru\
+pt Flag) 305.796 Tj
+0 -246.827 Td
+(0623 #define FL_VIP          0x00100000      // Virtual Interru\
+pt Pending) 318.902 Tj
+0 -256.321 Td
+(0624 #define FL_ID           0x00200000      // ID flag) 240.268 Tj
+0 -265.814 Td
+(0625 ) 21.8426 Tj
+0 -275.307 Td
+(0626 // Segment Descriptor) 113.581 Tj
+0 -284.801 Td
+(0627 struct segdesc {) 91.7388 Tj
+0 -294.294 Td
+(0628   uint lim_15_0 : 16;  // Low bits of segment limit) 244.637 Tj
+0 -303.788 Td
+(0629   uint base_15_0 : 16; // Low bits of segment base address) 275.216 Tj
+0 -313.281 Td
+(0630   uint base_23_16 : 8; // Middle bits of segment base addr\
+ess) 288.322 Tj
+0 -322.774 Td
+(0631   uint type : 4;       // Segment type \(see STS_ constant\
+s\)) 279.585 Tj
+0 -332.268 Td
+(0632   uint s : 1;          // 0 = system, 1 = application) 253.374 Tj
+0 -341.761 Td
+(0633   uint dpl : 2;        // Descriptor Privilege Level) 249.005 Tj
+0 -351.254 Td
+(0634   uint p : 1;          // Present) 166.004 Tj
+0 -360.748 Td
+(0635   uint lim_19_16 : 4;  // High bits of segment limit) 249.005 Tj
+0 -370.241 Td
+(0636   uint avl : 1;        // Unused \(available for software \
+use\)) 288.322 Tj
+0 -379.734 Td
+(0637   uint rsv1 : 1;       // Reserved) 170.372 Tj
+0 -389.228 Td
+(0638   uint db : 1;         // 0 = 16-bit segment, 1 = 32-bit s\
+egment) 301.427 Tj
+0 -398.721 Td
+(0639   uint g : 1;          // Granularity: limit scaled by 4K \
+when set) 310.165 Tj
+0 -408.214 Td
+(0640   uint base_31_24 : 8; // High bits of segment base addres\
+s) 279.585 Tj
+0 -417.708 Td
+(0641 };) 30.5796 Tj
+0 -427.201 Td
+(0642 ) 21.8426 Tj
+0 -436.695 Td
+(0643 ) 21.8426 Tj
+0 -446.188 Td
+(0644 ) 21.8426 Tj
+0 -455.681 Td
+(0645 ) 21.8426 Tj
+0 -465.175 Td
+(0646 ) 21.8426 Tj
+0 -474.668 Td
+(0647 ) 21.8426 Tj
+0 -484.161 Td
+(0648 ) 21.8426 Tj
+0 -493.655 Td
+(0649 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/mmu.h  Page 2) 21.672 Tj
-0 -3.92728 Td
-(0650 // Null segment) 12.04 Tj
-0 -5.23637 Td
-(0651 #define SEG_NULL        \(struct segdesc\){ 0,0,0,0,0,0,0,0,0,0,0,0,0 }) 44.548 Tj
-0 -6.54546 Td
-(0652 ) 3.01 Tj
-0 -7.85455 Td
-(0653 // Normal segment) 13.244 Tj
-0 -9.16364 Td
-(0654 #define SEG\(type, base, lim, dpl\) \(struct segdesc\)                      \\) 46.956 Tj
-0 -10.4727 Td
-(0655 { \(\(lim\) >> 12\) & 0xffff, \(base\) & 0xffff, \(\(base\) >> 16\) & 0xff,       \\) 46.956 Tj
-0 -11.7818 Td
-(0656     type, 1, dpl, 1, \(uint\) \(lim\) >> 28, 0, 0, 1, 1,            \\) 42.14 Tj
-0 -13.0909 Td
-(0657     \(uint\) \(base\) >> 24 }) 18.06 Tj
-0 -14.4 Td
-(0658 ) 3.01 Tj
-0 -15.7091 Td
-(0659 #define SEG16\(type, base, lim, dpl\) \(struct segdesc\)                    \\) 46.956 Tj
-0 -17.0182 Td
-(0660 { \(lim\) & 0xffff, \(base\) & 0xffff, \(\(base\) >> 16\) & 0xff,               \\) 46.956 Tj
-0 -18.3273 Td
-(0661     type, 1, dpl, 1, \(uint\) \(lim\) >> 16, 0, 0, 1, 0,            \\) 42.14 Tj
-0 -19.6364 Td
-(0662     \(uint\) \(base\) >> 24 }) 18.06 Tj
-0 -20.9455 Td
-(0663 ) 3.01 Tj
-0 -22.2545 Td
-(0664 // Application segment type bits) 22.274 Tj
-0 -23.5636 Td
-(0665 #define STA_X       0x8     // Executable segment) 32.508 Tj
-0 -24.8727 Td
-(0666 #define STA_E       0x4     // Expand down \(non-executable segments\)) 43.946 Tj
-0 -26.1818 Td
-(0667 #define STA_C       0x4     // Conforming code segment \(executable only\)) 46.354 Tj
-0 -27.4909 Td
-(0668 #define STA_W       0x2     // Writeable \(non-executable segments\)) 42.742 Tj
-0 -28.8 Td
-(0669 #define STA_R       0x2     // Readable \(executable segments\)) 39.732 Tj
-0 -30.1091 Td
-(0670 #define STA_A       0x1     // Accessed) 26.488 Tj
-0 -31.4182 Td
-(0671 ) 3.01 Tj
-0 -32.7273 Td
-(0672 // System segment type bits) 19.264 Tj
-0 -34.0364 Td
-(0673 #define STS_T16A    0x1     // Available 16-bit TSS) 33.712 Tj
-0 -35.3454 Td
-(0674 #define STS_LDT     0x2     // Local Descriptor Table) 34.916 Tj
-0 -36.6545 Td
-(0675 #define STS_T16B    0x3     // Busy 16-bit TSS) 30.702 Tj
-0 -37.9636 Td
-(0676 #define STS_CG16    0x4     // 16-bit Call Gate) 31.304 Tj
-0 -39.2727 Td
-(0677 #define STS_TG      0x5     // Task Gate / Coum Transmitions) 39.13 Tj
-0 -40.5818 Td
-(0678 #define STS_IG16    0x6     // 16-bit Interrupt Gate) 34.314 Tj
-0 -41.8909 Td
-(0679 #define STS_TG16    0x7     // 16-bit Trap Gate) 31.304 Tj
-0 -43.2 Td
-(0680 #define STS_T32A    0x9     // Available 32-bit TSS) 33.712 Tj
-0 -44.5091 Td
-(0681 #define STS_T32B    0xB     // Busy 32-bit TSS) 30.702 Tj
-0 -45.8182 Td
-(0682 #define STS_CG32    0xC     // 32-bit Call Gate) 31.304 Tj
-0 -47.1272 Td
-(0683 #define STS_IG32    0xE     // 32-bit Interrupt Gate) 34.314 Tj
-0 -48.4363 Td
-(0684 #define STS_TG32    0xF     // 32-bit Trap Gate) 31.304 Tj
-0 -49.7454 Td
-(0685 ) 3.01 Tj
-0 -51.0545 Td
-(0686 // Task state segment format) 19.866 Tj
-0 -52.3636 Td
-(0687 struct taskstate {) 13.846 Tj
-0 -53.6727 Td
-(0688   uint link;      // Old ts selector) 24.682 Tj
-0 -54.9818 Td
-(0689   uint esp0;      // Stack pointers and segment selectors) 37.324 Tj
-0 -56.2909 Td
-(0690   ushort ss0;     //   after an increase in privilege level) 38.528 Tj
-0 -57.6 Td
-(0691   ushort padding1;) 13.846 Tj
-0 -58.9091 Td
-(0692   uint *esp1;) 10.836 Tj
-0 -60.2181 Td
-(0693   ushort ss1;) 10.836 Tj
-0 -61.5272 Td
-(0694   ushort padding2;) 13.846 Tj
-0 -62.8363 Td
-(0695   uint *esp2;) 10.836 Tj
-0 -64.1454 Td
-(0696   ushort ss2;) 10.836 Tj
-0 -65.4545 Td
-(0697   ushort padding3;) 13.846 Tj
-0 -66.7636 Td
-(0698   void *cr3;     // Page directory base) 26.488 Tj
-0 -68.0727 Td
-(0699   uint *eip;     // Saved state from last task switch) 34.916 Tj
-0 -72 Td
-(Sheet 06) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/mmu.h  Page 2) 157.267 Tj
+0 -28.4801 Td
+(0650 // Null segment) 87.3703 Tj
+0 -37.9735 Td
+(0651 #define SEG_NULL        \(struct segdesc\){ 0,0,0,0,0,0,0,\
+0,0,0,0,0,0 }) 323.27 Tj
+0 -47.4668 Td
+(0652 ) 21.8426 Tj
+0 -56.9602 Td
+(0653 // Normal segment) 96.1073 Tj
+0 -66.4535 Td
+(0654 #define SEG\(type, base, lim, dpl\) \(struct segdesc\)    \
+                  \\) 340.744 Tj
+0 -75.9469 Td
+(0655 { \(\(lim\) >> 12\) & 0xffff, \(base\) & 0xffff, \(\(base\)\
+ >> 16\) & 0xff,       \\) 340.744 Tj
+0 -85.4403 Td
+(0656     type, 1, dpl, 1, \(uint\) \(lim\) >> 28, 0, 0, 1, 1,  \
+                  \\) 340.744 Tj
+0 -94.9336 Td
+(0657     \(uint\) \(base\) >> 24 }) 131.055 Tj
+0 -104.427 Td
+(0658 ) 21.8426 Tj
+0 -113.92 Td
+(0659 #define SEG16\(type, base, lim, dpl\) \(struct segdesc\)  \
+                  \\) 340.744 Tj
+0 -123.414 Td
+(0660 { \(lim\) & 0xffff, \(base\) & 0xffff, \(\(base\) >> 16\) \
+& 0xff,               \\) 340.744 Tj
+0 -132.907 Td
+(0661     type, 1, dpl, 1, \(uint\) \(lim\) >> 16, 0, 0, 1, 0,  \
+                  \\) 340.744 Tj
+0 -142.4 Td
+(0662     \(uint\) \(base\) >> 24 }) 131.055 Tj
+0 -151.894 Td
+(0663 ) 21.8426 Tj
+0 -161.387 Td
+(0664 #define DPL_USER    0x3     // User DPL) 192.215 Tj
+0 -170.88 Td
+(0665 ) 21.8426 Tj
+0 -180.374 Td
+(0666 // Application segment type bits) 161.635 Tj
+0 -189.867 Td
+(0667 #define STA_X       0x8     // Executable segment) 235.9 Tj
+0 -199.361 Td
+(0668 #define STA_E       0x4     // Expand down \(non-executabl\
+e segments\)) 318.902 Tj
+0 -208.854 Td
+(0669 #define STA_C       0x4     // Conforming code segment \(e\
+xecutable only\)) 336.376 Tj
+0 -218.347 Td
+(0670 #define STA_W       0x2     // Writeable \(non-executable \
+segments\)) 310.165 Tj
+0 -227.841 Td
+(0671 #define STA_R       0x2     // Readable \(executable segme\
+nts\)) 288.322 Tj
+0 -237.334 Td
+(0672 #define STA_A       0x1     // Accessed) 192.215 Tj
+0 -246.827 Td
+(0673 ) 21.8426 Tj
+0 -256.321 Td
+(0674 // System segment type bits) 139.792 Tj
+0 -265.814 Td
+(0675 #define STS_T16A    0x1     // Available 16-bit TSS) 244.637 Tj
+0 -275.307 Td
+(0676 #define STS_LDT     0x2     // Local Descriptor Table) 253.374 Tj
+0 -284.801 Td
+(0677 #define STS_T16B    0x3     // Busy 16-bit TSS) 222.794 Tj
+0 -294.294 Td
+(0678 #define STS_CG16    0x4     // 16-bit Call Gate) 227.163 Tj
+0 -303.788 Td
+(0679 #define STS_TG      0x5     // Task Gate / Coum Transmitio\
+ns) 283.953 Tj
+0 -313.281 Td
+(0680 #define STS_IG16    0x6     // 16-bit Interrupt Gate) 249.005 Tj
+0 -322.774 Td
+(0681 #define STS_TG16    0x7     // 16-bit Trap Gate) 227.163 Tj
+0 -332.268 Td
+(0682 #define STS_T32A    0x9     // Available 32-bit TSS) 244.637 Tj
+0 -341.761 Td
+(0683 #define STS_T32B    0xB     // Busy 32-bit TSS) 222.794 Tj
+0 -351.254 Td
+(0684 #define STS_CG32    0xC     // 32-bit Call Gate) 227.163 Tj
+0 -360.748 Td
+(0685 #define STS_IG32    0xE     // 32-bit Interrupt Gate) 249.005 Tj
+0 -370.241 Td
+(0686 #define STS_TG32    0xF     // 32-bit Trap Gate) 227.163 Tj
+0 -379.734 Td
+(0687 ) 21.8426 Tj
+0 -389.228 Td
+(0688 ) 21.8426 Tj
+0 -398.721 Td
+(0689 ) 21.8426 Tj
+0 -408.214 Td
+(0690 ) 21.8426 Tj
+0 -417.708 Td
+(0691 ) 21.8426 Tj
+0 -427.201 Td
+(0692 ) 21.8426 Tj
+0 -436.695 Td
+(0693 ) 21.8426 Tj
+0 -446.188 Td
+(0694 ) 21.8426 Tj
+0 -455.681 Td
+(0695 ) 21.8426 Tj
+0 -465.175 Td
+(0696 ) 21.8426 Tj
+0 -474.668 Td
+(0697 ) 21.8426 Tj
+0 -484.161 Td
+(0698 ) 21.8426 Tj
+0 -493.655 Td
+(0699 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 06) 34.9481 Tj
 Q
 Q
 Q
@@ -5226,7 +5469,10 @@ pdfEndPage
 %%Page: 14 14
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -5234,241 +5480,276 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/mmu.h  Page 3) 21.672 Tj
-0 -3.92728 Td
-(0700   uint eflags;) 11.438 Tj
-0 -5.23637 Td
-(0701   uint eax;       // More saved state \(registers\)) 32.508 Tj
-0 -6.54546 Td
-(0702   uint ecx;) 9.632 Tj
-0 -7.85455 Td
-(0703   uint edx;) 9.632 Tj
-0 -9.16364 Td
-(0704   uint ebx;) 9.632 Tj
-0 -10.4727 Td
-(0705   uint *esp;) 10.234 Tj
-0 -11.7818 Td
-(0706   uint *ebp;) 10.234 Tj
-0 -13.0909 Td
-(0707   uint esi;) 9.632 Tj
-0 -14.4 Td
-(0708   uint edi;) 9.632 Tj
-0 -15.7091 Td
-(0709   ushort es;              // Even more saved state \(segment selectors\)) 45.15 Tj
-0 -17.0182 Td
-(0710   ushort padding4;) 13.846 Tj
-0 -18.3273 Td
-(0711   ushort cs;) 10.234 Tj
-0 -19.6364 Td
-(0712   ushort padding5;) 13.846 Tj
-0 -20.9455 Td
-(0713   ushort ss;) 10.234 Tj
-0 -22.2545 Td
-(0714   ushort padding6;) 13.846 Tj
-0 -23.5636 Td
-(0715   ushort ds;) 10.234 Tj
-0 -24.8727 Td
-(0716   ushort padding7;) 13.846 Tj
-0 -26.1818 Td
-(0717   ushort fs;) 10.234 Tj
-0 -27.4909 Td
-(0718   ushort padding8;) 13.846 Tj
-0 -28.8 Td
-(0719   ushort gs;) 10.234 Tj
-0 -30.1091 Td
-(0720   ushort padding9;) 13.846 Tj
-0 -31.4182 Td
-(0721   ushort ldt;) 10.836 Tj
-0 -32.7273 Td
-(0722   ushort padding10;) 14.448 Tj
-0 -34.0364 Td
-(0723   ushort t;               // Trap on task switch) 31.906 Tj
-0 -35.3454 Td
-(0724   ushort iomb;    // I/O map base address) 27.692 Tj
-0 -36.6545 Td
-(0725 };) 4.214 Tj
-0 -37.9636 Td
-(0726 ) 3.01 Tj
-0 -39.2727 Td
-(0727 // Gate descriptors for interrupts and traps) 29.498 Tj
-0 -40.5818 Td
-(0728 struct gatedesc {) 13.244 Tj
-0 -41.8909 Td
-(0729   uint off_15_0 : 16;   // low 16 bits of offset in segment) 38.528 Tj
-0 -43.2 Td
-(0730   uint ss : 16;         // segment selector) 28.896 Tj
-0 -44.5091 Td
-(0731   uint args : 5;        // # args, 0 for interrupt/trap gates) 39.732 Tj
-0 -45.8182 Td
-(0732   uint rsv1 : 3;        // reserved\(should be zero I guess\)) 38.528 Tj
-0 -47.1272 Td
-(0733   uint type : 4;        // type\(STS_{TG,IG32,TG32}\)) 33.712 Tj
-0 -48.4363 Td
-(0734   uint s : 1;           // must be 0 \(system\)) 30.1 Tj
-0 -49.7454 Td
-(0735   uint dpl : 2;         // descriptor\(meaning new\) privilege level) 42.742 Tj
-0 -51.0545 Td
-(0736   uint p : 1;           // Present) 23.478 Tj
-0 -52.3636 Td
-(0737   uint off_31_16 : 16;  // high bits of offset in segment) 37.324 Tj
-0 -53.6727 Td
-(0738 };) 4.214 Tj
-0 -54.9818 Td
-(0739 ) 3.01 Tj
-0 -56.2909 Td
-(0740 ) 3.01 Tj
-0 -57.6 Td
-(0741 ) 3.01 Tj
-0 -58.9091 Td
-(0742 ) 3.01 Tj
-0 -60.2181 Td
-(0743 ) 3.01 Tj
-0 -61.5272 Td
-(0744 ) 3.01 Tj
-0 -62.8363 Td
-(0745 ) 3.01 Tj
-0 -64.1454 Td
-(0746 ) 3.01 Tj
-0 -65.4545 Td
-(0747 ) 3.01 Tj
-0 -66.7636 Td
-(0748 ) 3.01 Tj
-0 -68.0727 Td
-(0749 ) 3.01 Tj
-0 -72 Td
-(Sheet 07) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/mmu.h  Page 3) 157.267 Tj
+0 -28.4801 Td
+(0700 // Task state segment format) 144.161 Tj
+0 -37.9735 Td
+(0701 struct taskstate {) 100.476 Tj
+0 -47.4668 Td
+(0702   uint link;         // Old ts selector) 192.215 Tj
+0 -56.9602 Td
+(0703   uint esp0;         // Stack pointers and segment selecto\
+rs) 283.953 Tj
+0 -66.4535 Td
+(0704   ushort ss0;        //   after an increase in privilege l\
+evel) 292.69 Tj
+0 -75.9469 Td
+(0705   ushort padding1;) 100.476 Tj
+0 -85.4403 Td
+(0706   uint *esp1;) 78.6333 Tj
+0 -94.9336 Td
+(0707   ushort ss1;) 78.6333 Tj
+0 -104.427 Td
+(0708   ushort padding2;) 100.476 Tj
+0 -113.92 Td
+(0709   uint *esp2;) 78.6333 Tj
+0 -123.414 Td
+(0710   ushort ss2;) 78.6333 Tj
+0 -132.907 Td
+(0711   ushort padding3;) 100.476 Tj
+0 -142.4 Td
+(0712   void *cr3;         // Page directory base) 209.689 Tj
+0 -151.894 Td
+(0713   uint *eip;         // Saved state from last task switch) 270.848 Tj
+0 -161.387 Td
+(0714   uint eflags;) 83.0018 Tj
+0 -170.88 Td
+(0715   uint eax;          // More saved state \(registers\)) 249.005 Tj
+0 -180.374 Td
+(0716   uint ecx;) 69.8962 Tj
+0 -189.867 Td
+(0717   uint edx;) 69.8962 Tj
+0 -199.361 Td
+(0718   uint ebx;) 69.8962 Tj
+0 -208.854 Td
+(0719   uint *esp;) 74.2647 Tj
+0 -218.347 Td
+(0720   uint *ebp;) 74.2647 Tj
+0 -227.841 Td
+(0721   uint esi;) 69.8962 Tj
+0 -237.334 Td
+(0722   uint edi;) 69.8962 Tj
+0 -246.827 Td
+(0723   ushort es;         // Even more saved state \(segment se\
+lectors\)) 305.796 Tj
+0 -256.321 Td
+(0724   ushort padding4;) 100.476 Tj
+0 -265.814 Td
+(0725   ushort cs;) 74.2647 Tj
+0 -275.307 Td
+(0726   ushort padding5;) 100.476 Tj
+0 -284.801 Td
+(0727   ushort ss;) 74.2647 Tj
+0 -294.294 Td
+(0728   ushort padding6;) 100.476 Tj
+0 -303.788 Td
+(0729   ushort ds;) 74.2647 Tj
+0 -313.281 Td
+(0730   ushort padding7;) 100.476 Tj
+0 -322.774 Td
+(0731   ushort fs;) 74.2647 Tj
+0 -332.268 Td
+(0732   ushort padding8;) 100.476 Tj
+0 -341.761 Td
+(0733   ushort gs;) 74.2647 Tj
+0 -351.254 Td
+(0734   ushort padding9;) 100.476 Tj
+0 -360.748 Td
+(0735   ushort ldt;) 78.6333 Tj
+0 -370.241 Td
+(0736   ushort padding10;) 104.844 Tj
+0 -379.734 Td
+(0737   ushort t;          // Trap on task switch) 209.689 Tj
+0 -389.228 Td
+(0738   ushort iomb;       // I/O map base address) 214.057 Tj
+0 -398.721 Td
+(0739 };) 30.5796 Tj
+0 -408.214 Td
+(0740 ) 21.8426 Tj
+0 -417.708 Td
+(0741 ) 21.8426 Tj
+0 -427.201 Td
+(0742 ) 21.8426 Tj
+0 -436.695 Td
+(0743 ) 21.8426 Tj
+0 -446.188 Td
+(0744 ) 21.8426 Tj
+0 -455.681 Td
+(0745 ) 21.8426 Tj
+0 -465.175 Td
+(0746 ) 21.8426 Tj
+0 -474.668 Td
+(0747 ) 21.8426 Tj
+0 -484.161 Td
+(0748 ) 21.8426 Tj
+0 -493.655 Td
+(0749 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/mmu.h  Page 4) 21.672 Tj
-0 -3.92728 Td
-(0750 // Set up a normal interrupt/trap gate descriptor.) 33.11 Tj
-0 -5.23637 Td
-(0751 // - istrap: 1 for a trap \(= exception\) gate, 0 for an interrupt gate.) 45.15 Tj
-0 -6.54546 Td
-(0752 //   interrupt gate clears FL_IF, trap gate leaves FL_IF alone) 40.334 Tj
-0 -7.85455 Td
-(0753 // - sel: Code segment selector for interrupt/trap handler) 37.926 Tj
-0 -9.16364 Td
-(0754 // - off: Offset in code segment for interrupt/trap handler) 38.528 Tj
-0 -10.4727 Td
-(0755 // - dpl: Descriptor Privilege Level -) 25.886 Tj
-0 -11.7818 Td
-(0756 //        the privilege level required for software to invoke) 39.732 Tj
-0 -13.0909 Td
-(0757 //        this interrupt/trap gate explicitly using an int instruction.) 45.752 Tj
-0 -14.4 Td
-(0758 #define SETGATE\(gate, istrap, sel, off, d\)                      \\) 42.14 Tj
-0 -15.7091 Td
-(0759 {                                                               \\) 42.14 Tj
-0 -17.0182 Td
-(0760   \(gate\).off_15_0 = \(uint\) \(off\) & 0xffff;                \\) 38.528 Tj
-0 -18.3273 Td
-(0761   \(gate\).ss = \(sel\);                                      \\) 38.528 Tj
-0 -19.6364 Td
-(0762   \(gate\).args = 0;                                        \\) 38.528 Tj
-0 -20.9455 Td
-(0763   \(gate\).rsv1 = 0;                                        \\) 38.528 Tj
-0 -22.2545 Td
-(0764   \(gate\).type = \(istrap\) ? STS_TG32 : STS_IG32;   \\) 33.712 Tj
-0 -23.5636 Td
-(0765   \(gate\).s = 0;                                   \\) 33.712 Tj
-0 -24.8727 Td
-(0766   \(gate\).dpl = \(d\);                                       \\) 38.528 Tj
-0 -26.1818 Td
-(0767   \(gate\).p = 1;                                   \\) 33.712 Tj
-0 -27.4909 Td
-(0768   \(gate\).off_31_16 = \(uint\) \(off\) >> 16;          \\) 33.712 Tj
-0 -28.8 Td
-(0769 }) 3.612 Tj
-0 -30.1091 Td
-(0770 ) 3.01 Tj
-0 -31.4182 Td
-(0771 ) 3.01 Tj
-0 -32.7273 Td
-(0772 ) 3.01 Tj
-0 -34.0364 Td
-(0773 ) 3.01 Tj
-0 -35.3454 Td
-(0774 ) 3.01 Tj
-0 -36.6545 Td
-(0775 ) 3.01 Tj
-0 -37.9636 Td
-(0776 ) 3.01 Tj
-0 -39.2727 Td
-(0777 ) 3.01 Tj
-0 -40.5818 Td
-(0778 ) 3.01 Tj
-0 -41.8909 Td
-(0779 ) 3.01 Tj
-0 -43.2 Td
-(0780 ) 3.01 Tj
-0 -44.5091 Td
-(0781 ) 3.01 Tj
-0 -45.8182 Td
-(0782 ) 3.01 Tj
-0 -47.1272 Td
-(0783 ) 3.01 Tj
-0 -48.4363 Td
-(0784 ) 3.01 Tj
-0 -49.7454 Td
-(0785 ) 3.01 Tj
-0 -51.0545 Td
-(0786 ) 3.01 Tj
-0 -52.3636 Td
-(0787 ) 3.01 Tj
-0 -53.6727 Td
-(0788 ) 3.01 Tj
-0 -54.9818 Td
-(0789 ) 3.01 Tj
-0 -56.2909 Td
-(0790 ) 3.01 Tj
-0 -57.6 Td
-(0791 ) 3.01 Tj
-0 -58.9091 Td
-(0792 ) 3.01 Tj
-0 -60.2181 Td
-(0793 ) 3.01 Tj
-0 -61.5272 Td
-(0794 ) 3.01 Tj
-0 -62.8363 Td
-(0795 ) 3.01 Tj
-0 -64.1454 Td
-(0796 ) 3.01 Tj
-0 -65.4545 Td
-(0797 ) 3.01 Tj
-0 -66.7636 Td
-(0798 ) 3.01 Tj
-0 -68.0727 Td
-(0799 ) 3.01 Tj
-0 -72 Td
-(Sheet 07) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/mmu.h  Page 4) 157.267 Tj
+0 -28.4801 Td
+(0750 // Gate descriptors for interrupts and traps) 214.057 Tj
+0 -37.9735 Td
+(0751 struct gatedesc {) 96.1073 Tj
+0 -47.4668 Td
+(0752   uint off_15_0 : 16;   // low 16 bits of offset in segmen\
+t) 279.585 Tj
+0 -56.9602 Td
+(0753   uint ss : 16;         // segment selector) 209.689 Tj
+0 -66.4535 Td
+(0754   uint args : 5;        // # args, 0 for interrupt/trap ga\
+tes) 288.322 Tj
+0 -75.9469 Td
+(0755   uint rsv1 : 3;        // reserved\(should be zero I gues\
+s\)) 279.585 Tj
+0 -85.4403 Td
+(0756   uint type : 4;        // type\(STS_{TG,IG32,TG32}\)) 244.637 Tj
+0 -94.9336 Td
+(0757   uint s : 1;           // must be 0 \(system\)) 218.426 Tj
+0 -104.427 Td
+(0758   uint dpl : 2;         // descriptor\(meaning new\) privi\
+lege level) 310.165 Tj
+0 -113.92 Td
+(0759   uint p : 1;           // Present) 170.372 Tj
+0 -123.414 Td
+(0760   uint off_31_16 : 16;  // high bits of offset in segment) 270.848 Tj
+0 -132.907 Td
+(0761 };) 30.5796 Tj
+0 -142.4 Td
+(0762 ) 21.8426 Tj
+0 -151.894 Td
+(0763 // Set up a normal interrupt/trap gate descriptor.) 240.268 Tj
+0 -161.387 Td
+(0764 // - istrap: 1 for a trap \(= exception\) gate, 0 for an i\
+nterrupt gate.) 327.639 Tj
+0 -170.88 Td
+(0765 //   interrupt gate clears FL_IF, trap gate leaves FL_IF a\
+lone) 292.69 Tj
+0 -180.374 Td
+(0766 // - sel: Code segment selector for interrupt/trap handler) 275.216 Tj
+0 -189.867 Td
+(0767 // - off: Offset in code segment for interrupt/trap handle\
+r) 279.585 Tj
+0 -199.361 Td
+(0768 // - dpl: Descriptor Privilege Level -) 187.846 Tj
+0 -208.854 Td
+(0769 //        the privilege level required for software to inv\
+oke) 288.322 Tj
+0 -218.347 Td
+(0770 //        this interrupt/trap gate explicitly using an int\
+ instruction.) 332.007 Tj
+0 -227.841 Td
+(0771 #define SETGATE\(gate, istrap, sel, off, d\)              \
+  \\) 279.585 Tj
+0 -237.334 Td
+(0772 {                                                         \
+\\) 279.585 Tj
+0 -246.827 Td
+(0773   \(gate\).off_15_0 = \(uint\) \(off\) & 0xffff;          \
+      \\) 279.585 Tj
+0 -256.321 Td
+(0774   \(gate\).ss = \(sel\);                                  \
+    \\) 279.585 Tj
+0 -265.814 Td
+(0775   \(gate\).args = 0;                                      \
+  \\) 279.585 Tj
+0 -275.307 Td
+(0776   \(gate\).rsv1 = 0;                                      \
+  \\) 279.585 Tj
+0 -284.801 Td
+(0777   \(gate\).type = \(istrap\) ? STS_TG32 : STS_IG32;       \
+    \\) 279.585 Tj
+0 -294.294 Td
+(0778   \(gate\).s = 0;                                         \
+  \\) 279.585 Tj
+0 -303.788 Td
+(0779   \(gate\).dpl = \(d\);                                   \
+    \\) 279.585 Tj
+0 -313.281 Td
+(0780   \(gate\).p = 1;                                         \
+  \\) 279.585 Tj
+0 -322.774 Td
+(0781   \(gate\).off_31_16 = \(uint\) \(off\) >> 16;            \
+      \\) 279.585 Tj
+0 -332.268 Td
+(0782 }) 26.2111 Tj
+0 -341.761 Td
+(0783 ) 21.8426 Tj
+0 -351.254 Td
+(0784 ) 21.8426 Tj
+0 -360.748 Td
+(0785 ) 21.8426 Tj
+0 -370.241 Td
+(0786 ) 21.8426 Tj
+0 -379.734 Td
+(0787 ) 21.8426 Tj
+0 -389.228 Td
+(0788 ) 21.8426 Tj
+0 -398.721 Td
+(0789 ) 21.8426 Tj
+0 -408.214 Td
+(0790 ) 21.8426 Tj
+0 -417.708 Td
+(0791 ) 21.8426 Tj
+0 -427.201 Td
+(0792 ) 21.8426 Tj
+0 -436.695 Td
+(0793 ) 21.8426 Tj
+0 -446.188 Td
+(0794 ) 21.8426 Tj
+0 -455.681 Td
+(0795 ) 21.8426 Tj
+0 -465.175 Td
+(0796 ) 21.8426 Tj
+0 -474.668 Td
+(0797 ) 21.8426 Tj
+0 -484.161 Td
+(0798 ) 21.8426 Tj
+0 -493.655 Td
+(0799 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 07) 34.9481 Tj
 Q
 Q
 Q
@@ -5480,6 +5761,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -5487,241 +5771,254 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/elf.h  Page 1) 21.672 Tj
-0 -3.92728 Td
-(0800 // Format of an ELF executable file) 24.08 Tj
-0 -5.23637 Td
-(0801 ) 3.01 Tj
-0 -6.54546 Td
-(0802 #define ELF_MAGIC 0x464C457FU  // "\\x7FELF" in little endian) 39.13 Tj
-0 -7.85455 Td
-(0803 ) 3.01 Tj
-0 -9.16364 Td
-(0804 // File header) 11.438 Tj
-0 -10.4727 Td
-(0805 struct elfhdr {) 12.04 Tj
-0 -11.7818 Td
-(0806   uint magic;  // must equal ELF_MAGIC) 25.886 Tj
-0 -13.0909 Td
-(0807   uchar elf[12];) 12.642 Tj
-0 -14.4 Td
-(0808   ushort type;) 11.438 Tj
-0 -15.7091 Td
-(0809   ushort machine;) 13.244 Tj
-0 -17.0182 Td
-(0810   uint version;) 12.04 Tj
-0 -18.3273 Td
-(0811   uint entry;) 10.836 Tj
-0 -19.6364 Td
-(0812   uint phoff;) 10.836 Tj
-0 -20.9455 Td
-(0813   uint shoff;) 10.836 Tj
-0 -22.2545 Td
-(0814   uint flags;) 10.836 Tj
-0 -23.5636 Td
-(0815   ushort ehsize;) 12.642 Tj
-0 -24.8727 Td
-(0816   ushort phentsize;) 14.448 Tj
-0 -26.1818 Td
-(0817   ushort phnum;) 12.04 Tj
-0 -27.4909 Td
-(0818   ushort shentsize;) 14.448 Tj
-0 -28.8 Td
-(0819   ushort shnum;) 12.04 Tj
-0 -30.1091 Td
-(0820   ushort shstrndx;) 13.846 Tj
-0 -31.4182 Td
-(0821 };) 4.214 Tj
-0 -32.7273 Td
-(0822 ) 3.01 Tj
-0 -34.0364 Td
-(0823 // Program section header) 18.06 Tj
-0 -35.3454 Td
-(0824 struct proghdr {) 12.642 Tj
-0 -36.6545 Td
-(0825   uint type;) 10.234 Tj
-0 -37.9636 Td
-(0826   uint offset;) 11.438 Tj
-0 -39.2727 Td
-(0827   uint va;) 9.03 Tj
-0 -40.5818 Td
-(0828   uint pa;) 9.03 Tj
-0 -41.8909 Td
-(0829   uint filesz;) 11.438 Tj
-0 -43.2 Td
-(0830   uint memsz;) 10.836 Tj
-0 -44.5091 Td
-(0831   uint flags;) 10.836 Tj
-0 -45.8182 Td
-(0832   uint align;) 10.836 Tj
-0 -47.1272 Td
-(0833 };) 4.214 Tj
-0 -48.4363 Td
-(0834 ) 3.01 Tj
-0 -49.7454 Td
-(0835 // Values for Proghdr type) 18.662 Tj
-0 -51.0545 Td
-(0836 #define ELF_PROG_LOAD           1) 22.876 Tj
-0 -52.3636 Td
-(0837 ) 3.01 Tj
-0 -53.6727 Td
-(0838 // Flag bits for Proghdr flags) 21.07 Tj
-0 -54.9818 Td
-(0839 #define ELF_PROG_FLAG_EXEC      1) 22.876 Tj
-0 -56.2909 Td
-(0840 #define ELF_PROG_FLAG_WRITE     2) 22.876 Tj
-0 -57.6 Td
-(0841 #define ELF_PROG_FLAG_READ      4) 22.876 Tj
-0 -58.9091 Td
-(0842 ) 3.01 Tj
-0 -60.2181 Td
-(0843 ) 3.01 Tj
-0 -61.5272 Td
-(0844 ) 3.01 Tj
-0 -62.8363 Td
-(0845 ) 3.01 Tj
-0 -64.1454 Td
-(0846 ) 3.01 Tj
-0 -65.4545 Td
-(0847 ) 3.01 Tj
-0 -66.7636 Td
-(0848 ) 3.01 Tj
-0 -68.0727 Td
-(0849 ) 3.01 Tj
-0 -72 Td
-(Sheet 08) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/elf.h  Page 1) 157.267 Tj
+0 -28.4801 Td
+(0800 // Format of an ELF executable file) 174.741 Tj
+0 -37.9735 Td
+(0801 ) 21.8426 Tj
+0 -47.4668 Td
+(0802 #define ELF_MAGIC 0x464C457FU  // "\\x7FELF" in little end\
+ian) 283.953 Tj
+0 -56.9602 Td
+(0803 ) 21.8426 Tj
+0 -66.4535 Td
+(0804 // File header) 83.0018 Tj
+0 -75.9469 Td
+(0805 struct elfhdr {) 87.3703 Tj
+0 -85.4403 Td
+(0806   uint magic;  // must equal ELF_MAGIC) 187.846 Tj
+0 -94.9336 Td
+(0807   uchar elf[12];) 91.7388 Tj
+0 -104.427 Td
+(0808   ushort type;) 83.0018 Tj
+0 -113.92 Td
+(0809   ushort machine;) 96.1073 Tj
+0 -123.414 Td
+(0810   uint version;) 87.3703 Tj
+0 -132.907 Td
+(0811   uint entry;) 78.6333 Tj
+0 -142.4 Td
+(0812   uint phoff;) 78.6333 Tj
+0 -151.894 Td
+(0813   uint shoff;) 78.6333 Tj
+0 -161.387 Td
+(0814   uint flags;) 78.6333 Tj
+0 -170.88 Td
+(0815   ushort ehsize;) 91.7388 Tj
+0 -180.374 Td
+(0816   ushort phentsize;) 104.844 Tj
+0 -189.867 Td
+(0817   ushort phnum;) 87.3703 Tj
+0 -199.361 Td
+(0818   ushort shentsize;) 104.844 Tj
+0 -208.854 Td
+(0819   ushort shnum;) 87.3703 Tj
+0 -218.347 Td
+(0820   ushort shstrndx;) 100.476 Tj
+0 -227.841 Td
+(0821 };) 30.5796 Tj
+0 -237.334 Td
+(0822 ) 21.8426 Tj
+0 -246.827 Td
+(0823 // Program section header) 131.055 Tj
+0 -256.321 Td
+(0824 struct proghdr {) 91.7388 Tj
+0 -265.814 Td
+(0825   uint type;) 74.2647 Tj
+0 -275.307 Td
+(0826   uint offset;) 83.0018 Tj
+0 -284.801 Td
+(0827   uint va;) 65.5277 Tj
+0 -294.294 Td
+(0828   uint pa;) 65.5277 Tj
+0 -303.788 Td
+(0829   uint filesz;) 83.0018 Tj
+0 -313.281 Td
+(0830   uint memsz;) 78.6333 Tj
+0 -322.774 Td
+(0831   uint flags;) 78.6333 Tj
+0 -332.268 Td
+(0832   uint align;) 78.6333 Tj
+0 -341.761 Td
+(0833 };) 30.5796 Tj
+0 -351.254 Td
+(0834 ) 21.8426 Tj
+0 -360.748 Td
+(0835 // Values for Proghdr type) 135.424 Tj
+0 -370.241 Td
+(0836 #define ELF_PROG_LOAD           1) 166.004 Tj
+0 -379.734 Td
+(0837 ) 21.8426 Tj
+0 -389.228 Td
+(0838 // Flag bits for Proghdr flags) 152.898 Tj
+0 -398.721 Td
+(0839 #define ELF_PROG_FLAG_EXEC      1) 166.004 Tj
+0 -408.214 Td
+(0840 #define ELF_PROG_FLAG_WRITE     2) 166.004 Tj
+0 -417.708 Td
+(0841 #define ELF_PROG_FLAG_READ      4) 166.004 Tj
+0 -427.201 Td
+(0842 ) 21.8426 Tj
+0 -436.695 Td
+(0843 ) 21.8426 Tj
+0 -446.188 Td
+(0844 ) 21.8426 Tj
+0 -455.681 Td
+(0845 ) 21.8426 Tj
+0 -465.175 Td
+(0846 ) 21.8426 Tj
+0 -474.668 Td
+(0847 ) 21.8426 Tj
+0 -484.161 Td
+(0848 ) 21.8426 Tj
+0 -493.655 Td
+(0849 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/mp.h  Page 1) 21.07 Tj
-0 -3.92728 Td
-(0850 // See MultiProcessor Specification Version 1.[14].) 33.712 Tj
-0 -5.23637 Td
-(0851 ) 3.01 Tj
-0 -6.54546 Td
-(0852 struct mp {             // floating pointer) 28.896 Tj
-0 -7.85455 Td
-(0853   uchar signature[4];           // "_MP_") 27.692 Tj
-0 -9.16364 Td
-(0854   void *physaddr;               // phys addr of MP config table) 40.936 Tj
-0 -10.4727 Td
-(0855   uchar length;                 // 1) 24.682 Tj
-0 -11.7818 Td
-(0856   uchar specrev;                // [14]) 26.488 Tj
-0 -13.0909 Td
-(0857   uchar checksum;               // all bytes must add up to 0) 39.732 Tj
-0 -14.4 Td
-(0858   uchar type;                   // MP system config type) 36.722 Tj
-0 -15.7091 Td
-(0859   uchar imcrp;) 11.438 Tj
-0 -17.0182 Td
-(0860   uchar reserved[3];) 15.05 Tj
-0 -18.3273 Td
-(0861 };) 4.214 Tj
-0 -19.6364 Td
-(0862 ) 3.01 Tj
-0 -20.9455 Td
-(0863 struct mpctb {          // configuration table header) 34.916 Tj
-0 -22.2545 Td
-(0864   uchar signature[4];           // "PCMP") 27.692 Tj
-0 -23.5636 Td
-(0865   ushort length;                // total table length) 34.916 Tj
-0 -24.8727 Td
-(0866   uchar version;                // [14]) 26.488 Tj
-0 -26.1818 Td
-(0867   uchar checksum;               // all bytes must add up to 0) 39.732 Tj
-0 -27.4909 Td
-(0868   uchar product[20];            // product id) 30.1 Tj
-0 -28.8 Td
-(0869   uint *oemtable;               // OEM table pointer) 34.314 Tj
-0 -30.1091 Td
-(0870   ushort oemlength;             // OEM table length) 33.712 Tj
-0 -31.4182 Td
-(0871   ushort entry;                 // entry count) 30.702 Tj
-0 -32.7273 Td
-(0872   uint *lapicaddr;              // address of local APIC) 36.722 Tj
-0 -34.0364 Td
-(0873   ushort xlength;               // extended table length) 36.722 Tj
-0 -35.3454 Td
-(0874   uchar xchecksum;              // extended table checksum) 37.926 Tj
-0 -36.6545 Td
-(0875   uchar reserved;) 13.244 Tj
-0 -37.9636 Td
-(0876 };) 4.214 Tj
-0 -39.2727 Td
-(0877 ) 3.01 Tj
-0 -40.5818 Td
-(0878 struct mppe {           // processor table entry) 31.906 Tj
-0 -41.8909 Td
-(0879   uchar type;                   // entry type \(0\)) 32.508 Tj
-0 -43.2 Td
-(0880   uchar apicid;                 // local APIC id) 31.906 Tj
-0 -44.5091 Td
-(0881   uchar version;                // local APIC verison) 34.916 Tj
-0 -45.8182 Td
-(0882   uchar flags;                  // CPU flags) 29.498 Tj
-0 -47.1272 Td
-(0883   uchar signature[4];           // CPU signature) 31.906 Tj
-0 -48.4363 Td
-(0884   uint feature;                 // feature flags from CPUID instruction) 45.752 Tj
-0 -49.7454 Td
-(0885   uchar reserved[8];) 15.05 Tj
-0 -51.0545 Td
-(0886 };) 4.214 Tj
-0 -52.3636 Td
-(0887 ) 3.01 Tj
-0 -53.6727 Td
-(0888 struct mpbe {           // bus table entry) 28.294 Tj
-0 -54.9818 Td
-(0889   uchar type;                   // entry type \(1\)) 32.508 Tj
-0 -56.2909 Td
-(0890   uchar busno;                  // bus id) 27.692 Tj
-0 -57.6 Td
-(0891   char string[6];               // bus type string) 33.11 Tj
-0 -58.9091 Td
-(0892 };) 4.214 Tj
-0 -60.2181 Td
-(0893 ) 3.01 Tj
-0 -61.5272 Td
-(0894 ) 3.01 Tj
-0 -62.8363 Td
-(0895 ) 3.01 Tj
-0 -64.1454 Td
-(0896 ) 3.01 Tj
-0 -65.4545 Td
-(0897 ) 3.01 Tj
-0 -66.7636 Td
-(0898 ) 3.01 Tj
-0 -68.0727 Td
-(0899 ) 3.01 Tj
-0 -72 Td
-(Sheet 08) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/elf.h  Page 2) 157.267 Tj
+0 -28.4801 Td
+(0850 // Blank page.) 83.0018 Tj
+0 -37.9735 Td
+(0851 ) 21.8426 Tj
+0 -47.4668 Td
+(0852 ) 21.8426 Tj
+0 -56.9602 Td
+(0853 ) 21.8426 Tj
+0 -66.4535 Td
+(0854 ) 21.8426 Tj
+0 -75.9469 Td
+(0855 ) 21.8426 Tj
+0 -85.4403 Td
+(0856 ) 21.8426 Tj
+0 -94.9336 Td
+(0857 ) 21.8426 Tj
+0 -104.427 Td
+(0858 ) 21.8426 Tj
+0 -113.92 Td
+(0859 ) 21.8426 Tj
+0 -123.414 Td
+(0860 ) 21.8426 Tj
+0 -132.907 Td
+(0861 ) 21.8426 Tj
+0 -142.4 Td
+(0862 ) 21.8426 Tj
+0 -151.894 Td
+(0863 ) 21.8426 Tj
+0 -161.387 Td
+(0864 ) 21.8426 Tj
+0 -170.88 Td
+(0865 ) 21.8426 Tj
+0 -180.374 Td
+(0866 ) 21.8426 Tj
+0 -189.867 Td
+(0867 ) 21.8426 Tj
+0 -199.361 Td
+(0868 ) 21.8426 Tj
+0 -208.854 Td
+(0869 ) 21.8426 Tj
+0 -218.347 Td
+(0870 ) 21.8426 Tj
+0 -227.841 Td
+(0871 ) 21.8426 Tj
+0 -237.334 Td
+(0872 ) 21.8426 Tj
+0 -246.827 Td
+(0873 ) 21.8426 Tj
+0 -256.321 Td
+(0874 ) 21.8426 Tj
+0 -265.814 Td
+(0875 ) 21.8426 Tj
+0 -275.307 Td
+(0876 ) 21.8426 Tj
+0 -284.801 Td
+(0877 ) 21.8426 Tj
+0 -294.294 Td
+(0878 ) 21.8426 Tj
+0 -303.788 Td
+(0879 ) 21.8426 Tj
+0 -313.281 Td
+(0880 ) 21.8426 Tj
+0 -322.774 Td
+(0881 ) 21.8426 Tj
+0 -332.268 Td
+(0882 ) 21.8426 Tj
+0 -341.761 Td
+(0883 ) 21.8426 Tj
+0 -351.254 Td
+(0884 ) 21.8426 Tj
+0 -360.748 Td
+(0885 ) 21.8426 Tj
+0 -370.241 Td
+(0886 ) 21.8426 Tj
+0 -379.734 Td
+(0887 ) 21.8426 Tj
+0 -389.228 Td
+(0888 ) 21.8426 Tj
+0 -398.721 Td
+(0889 ) 21.8426 Tj
+0 -408.214 Td
+(0890 ) 21.8426 Tj
+0 -417.708 Td
+(0891 ) 21.8426 Tj
+0 -427.201 Td
+(0892 ) 21.8426 Tj
+0 -436.695 Td
+(0893 ) 21.8426 Tj
+0 -446.188 Td
+(0894 ) 21.8426 Tj
+0 -455.681 Td
+(0895 ) 21.8426 Tj
+0 -465.175 Td
+(0896 ) 21.8426 Tj
+0 -474.668 Td
+(0897 ) 21.8426 Tj
+0 -484.161 Td
+(0898 ) 21.8426 Tj
+0 -493.655 Td
+(0899 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 08) 34.9481 Tj
 Q
 Q
 Q
@@ -5732,7 +6029,10 @@ pdfEndPage
 %%Page: 16 16
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -5740,241 +6040,269 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/mp.h  Page 2) 21.07 Tj
-0 -3.92728 Td
-(0900 struct mpioapic {       // I/O APIC table entry) 31.304 Tj
-0 -5.23637 Td
-(0901   uchar type;                   // entry type \(2\)) 32.508 Tj
-0 -6.54546 Td
-(0902   uchar apicno;                 // I/O APIC id) 30.702 Tj
-0 -7.85455 Td
-(0903   uchar version;                // I/O APIC version) 33.712 Tj
-0 -9.16364 Td
-(0904   uchar flags;                  // I/O APIC flags) 32.508 Tj
-0 -10.4727 Td
-(0905   uint *addr;                  // I/O APIC address) 33.11 Tj
-0 -11.7818 Td
-(0906 };) 4.214 Tj
-0 -13.0909 Td
-(0907 ) 3.01 Tj
-0 -14.4 Td
-(0908 struct mpie {           // interrupt table entry) 31.906 Tj
-0 -15.7091 Td
-(0909   uchar type;                   // entry type \([34]\)) 34.314 Tj
-0 -17.0182 Td
-(0910   uchar intr;                   // interrupt type) 32.508 Tj
-0 -18.3273 Td
-(0911   ushort flags;                 // interrupt flag) 32.508 Tj
-0 -19.6364 Td
-(0912   uchar busno;                  // source bus id) 31.906 Tj
-0 -20.9455 Td
-(0913   uchar irq;                    // source bus irq) 32.508 Tj
-0 -22.2545 Td
-(0914   uchar apicno;                 // destination APIC id) 35.518 Tj
-0 -23.5636 Td
-(0915   uchar intin;                  // destination APIC [L]INTIN#) 39.732 Tj
-0 -24.8727 Td
-(0916 };) 4.214 Tj
-0 -26.1818 Td
-(0917 ) 3.01 Tj
-0 -27.4909 Td
-(0918 enum {                  // table entry types) 29.498 Tj
-0 -28.8 Td
-(0919   MPPROCESSOR   = 0x00,         // one entry per processor) 37.926 Tj
-0 -30.1091 Td
-(0920   MPBUS = 0x01,                 // one entry per bus) 34.314 Tj
-0 -31.4182 Td
-(0921   MPIOAPIC = 0x02,              // one entry per I/O APIC) 37.324 Tj
-0 -32.7273 Td
-(0922   MPIOINTR = 0x03,              // one entry per bus interrupt source) 44.548 Tj
-0 -34.0364 Td
-(0923   MPLINTR = 0x04,               // one entry per system interrupt source) 46.354 Tj
-0 -35.3454 Td
-(0924 ) 3.01 Tj
-0 -36.6545 Td
-(0925   MPSASM = 0x80,) 12.642 Tj
-0 -37.9636 Td
-(0926   MPHIERARCHY   = 0x81,) 16.856 Tj
-0 -39.2727 Td
-(0927   MPCBASM = 0x82,) 13.244 Tj
-0 -40.5818 Td
-(0928 ) 3.01 Tj
-0 -41.8909 Td
-(0929                         // PCMPprocessor and PCMPioapic flags) 39.732 Tj
-0 -43.2 Td
-(0930   MPEN = 0x01,                  // enabled) 28.294 Tj
-0 -44.5091 Td
-(0931   MPBP = 0x02,                  // bootstrap processor) 35.518 Tj
-0 -45.8182 Td
-(0932 ) 3.01 Tj
-0 -47.1272 Td
-(0933                         // PCMPiointr and PCMPlintr flags) 37.324 Tj
-0 -48.4363 Td
-(0934   MPPOMASK = 0x03,              // polarity conforms to bus specs) 42.14 Tj
-0 -49.7454 Td
-(0935   MPHIGH = 0x01,                // active high) 30.702 Tj
-0 -51.0545 Td
-(0936   MPLOW = 0x03,                 // active low) 30.1 Tj
-0 -52.3636 Td
-(0937   MPELMASK = 0x0C,              // trigger mode of APIC input signals) 44.548 Tj
-0 -53.6727 Td
-(0938   MPEDGE = 0x04,                // edge-triggered) 32.508 Tj
-0 -54.9818 Td
-(0939   MPLEVEL = 0x0C,               // level-triggered) 33.11 Tj
-0 -56.2909 Td
-(0940 ) 3.01 Tj
-0 -57.6 Td
-(0941                         // PCMPiointr and PCMPlintr interrupt type) 42.742 Tj
-0 -58.9091 Td
-(0942   MPINT = 0x00,                 // vectored interrupt from APIC Rdt) 43.344 Tj
-0 -60.2181 Td
-(0943   MPNMI = 0x01,                 // non-maskable interrupt) 37.324 Tj
-0 -61.5272 Td
-(0944   MPSMI = 0x02,                 // system management interrupt) 40.334 Tj
-0 -62.8363 Td
-(0945   MPExtINT = 0x03,              // vectored interrupt from external PIC) 45.752 Tj
-0 -64.1454 Td
-(0946 };) 4.214 Tj
-0 -65.4545 Td
-(0947 ) 3.01 Tj
-0 -66.7636 Td
-(0948 ) 3.01 Tj
-0 -68.0727 Td
-(0949 ) 3.01 Tj
-0 -72 Td
-(Sheet 09) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/bootasm.S  Page 1) 174.741 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.902 Tj
+0 -56.9602 Td
+(0903 # The BIOS loads this code from the first sector of the ha\
+rd disk into) 327.639 Tj
+0 -66.4535 Td
+(0904 # memory at physical address 0x7c00 and starts executing i\
+n real mode) 323.27 Tj
+0 -75.9469 Td
+(0905 # with %cs=0 %ip=7c00.) 117.95 Tj
+0 -85.4403 Td
+(0906 ) 21.8426 Tj
+0 -94.9336 Td
+(0907 .set PROT_MODE_CSEG, 0x8         # kernel code segment sel\
+ector) 297.059 Tj
+0 -104.427 Td
+(0908 .set PROT_MODE_DSEG, 0x10        # kernel data segment sel\
+ector) 297.059 Tj
+0 -113.92 Td
+(0909 .set CR0_PE_ON,      0x1         # protected mode enable f\
+lag) 288.322 Tj
+0 -123.414 Td
+(0910 ) 21.8426 Tj
+0 -132.907 Td
+(0911 .globl start) 74.2647 Tj
+0 -142.4 Td
+(0912 start:) 48.0537 Tj
+0 -151.894 Td
+(0913   .code16                     # Assemble for 16-bit mode) 266.479 Tj
+0 -161.387 Td
+(0914   cli                         # Disable interrupts) 240.268 Tj
+0 -170.88 Td
+(0915   cld                         # String operations incremen\
+t) 279.585 Tj
+0 -180.374 Td
+(0916 ) 21.8426 Tj
+0 -189.867 Td
+(0917   # Set up the important data segment registers \(DS, ES, \
+SS\).) 288.322 Tj
+0 -199.361 Td
+(0918   xorw    %ax,%ax             # Segment number zero) 244.637 Tj
+0 -208.854 Td
+(0919   movw    %ax,%ds             # -> Data Segment) 227.163 Tj
+0 -218.347 Td
+(0920   movw    %ax,%es             # -> Extra Segment) 231.531 Tj
+0 -227.841 Td
+(0921   movw    %ax,%ss             # -> Stack Segment) 231.531 Tj
+0 -237.334 Td
+(0922 ) 21.8426 Tj
+0 -246.827 Td
+(0923   # Enable A20:) 87.3703 Tj
+0 -256.321 Td
+(0924   #   For backwards compatibility with the earliest PCs, p\
+hysical) 305.796 Tj
+0 -265.814 Td
+(0925   #   address line 20 is tied low, so that addresses highe\
+r than) 301.427 Tj
+0 -275.307 Td
+(0926   #   1MB wrap around to zero by default.  This code undoe\
+s this.) 305.796 Tj
+0 -284.801 Td
+(0927 seta20.1:) 61.1592 Tj
+0 -294.294 Td
+(0928   inb     $0x64,%al               # Wait for not busy) 253.374 Tj
+0 -303.788 Td
+(0929   testb   $0x2,%al) 100.476 Tj
+0 -313.281 Td
+(0930   jnz     seta20.1) 100.476 Tj
+0 -322.774 Td
+(0931 ) 21.8426 Tj
+0 -332.268 Td
+(0932   movb    $0xd1,%al               # 0xd1 -> port 0x64) 253.374 Tj
+0 -341.761 Td
+(0933   outb    %al,$0x64) 104.844 Tj
+0 -351.254 Td
+(0934 ) 21.8426 Tj
+0 -360.748 Td
+(0935 seta20.2:) 61.1592 Tj
+0 -370.241 Td
+(0936   inb     $0x64,%al               # Wait for not busy) 253.374 Tj
+0 -379.734 Td
+(0937   testb   $0x2,%al) 100.476 Tj
+0 -389.228 Td
+(0938   jnz     seta20.2) 100.476 Tj
+0 -398.721 Td
+(0939 ) 21.8426 Tj
+0 -408.214 Td
+(0940   movb    $0xdf,%al               # 0xdf -> port 0x60) 253.374 Tj
+0 -417.708 Td
+(0941   outb    %al,$0x60) 104.844 Tj
+0 -427.201 Td
+(0942 ) 21.8426 Tj
+0 -436.695 Td
+(0943 ) 21.8426 Tj
+0 -446.188 Td
+(0944 ) 21.8426 Tj
+0 -455.681 Td
+(0945 ) 21.8426 Tj
+0 -465.175 Td
+(0946 ) 21.8426 Tj
+0 -474.668 Td
+(0947 ) 21.8426 Tj
+0 -484.161 Td
+(0948 ) 21.8426 Tj
+0 -493.655 Td
+(0949 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/mp.h  Page 3) 21.07 Tj
-0 -3.92728 Td
-(0950 // Common bits for) 13.846 Tj
-0 -5.23637 Td
-(0951 //      I/O APIC Redirection Table Entry;) 27.692 Tj
-0 -6.54546 Td
-(0952 //      Local APIC Local Interrupt Vector Table;) 31.906 Tj
-0 -7.85455 Td
-(0953 //      Local APIC Inter-Processor Interrupt;) 30.1 Tj
-0 -9.16364 Td
-(0954 //      Local APIC Timer Vector Table.) 25.886 Tj
-0 -10.4727 Td
-(0955 enum {) 6.622 Tj
-0 -11.7818 Td
-(0956   APIC_FIXED     = 0x00000000,  // [10:8] Delivery Mode) 36.12 Tj
-0 -13.0909 Td
-(0957   APIC_LOWEST    = 0x00000100,  // Lowest priority) 33.11 Tj
-0 -14.4 Td
-(0958   APIC_SMI       = 0x00000200,  // System Management Interrupt) 40.334 Tj
-0 -15.7091 Td
-(0959   APIC_RR        = 0x00000300,  // Remote Read) 30.702 Tj
-0 -17.0182 Td
-(0960   APIC_NMI       = 0x00000400,) 21.07 Tj
-0 -18.3273 Td
-(0961   APIC_INIT      = 0x00000500,  // INIT/RESET) 30.1 Tj
-0 -19.6364 Td
-(0962   APIC_STARTUP   = 0x00000600,  // Startup IPI) 30.702 Tj
-0 -20.9455 Td
-(0963   APIC_EXTINT    = 0x00000700,) 21.07 Tj
-0 -22.2545 Td
-(0964 ) 3.01 Tj
-0 -23.5636 Td
-(0965   APIC_PHYSICAL  = 0x00000000,  // [11] Destination Mode \(RW\)) 39.732 Tj
-0 -24.8727 Td
-(0966   APIC_LOGICAL   = 0x00000800,) 21.07 Tj
-0 -26.1818 Td
-(0967 ) 3.01 Tj
-0 -27.4909 Td
-(0968   APIC_DELIVS    = 0x00001000,  // [12] Delivery Status \(RO\)) 39.13 Tj
-0 -28.8 Td
-(0969   APIC_HIGH      = 0x00000000,  // [13] Interrupt Input Pin Polarity \(RW\)) 46.956 Tj
-0 -30.1091 Td
-(0970   APIC_LOW       = 0x00002000,) 21.07 Tj
-0 -31.4182 Td
-(0971   APIC_REMOTEIRR = 0x00004000,  // [14] Remote IRR \(RO\)) 36.12 Tj
-0 -32.7273 Td
-(0972   APIC_EDGE      = 0x00000000,  // [15] Trigger Mode \(RW\)) 37.324 Tj
-0 -34.0364 Td
-(0973   APIC_LEVEL     = 0x00008000,) 21.07 Tj
-0 -35.3454 Td
-(0974   APIC_IMASK     = 0x00010000,  // [16] Interrupt Mask) 35.518 Tj
-0 -36.6545 Td
-(0975 };) 4.214 Tj
-0 -37.9636 Td
-(0976 ) 3.01 Tj
-0 -39.2727 Td
-(0977 ) 3.01 Tj
-0 -40.5818 Td
-(0978 ) 3.01 Tj
-0 -41.8909 Td
-(0979 ) 3.01 Tj
-0 -43.2 Td
-(0980 ) 3.01 Tj
-0 -44.5091 Td
-(0981 ) 3.01 Tj
-0 -45.8182 Td
-(0982 ) 3.01 Tj
-0 -47.1272 Td
-(0983 ) 3.01 Tj
-0 -48.4363 Td
-(0984 ) 3.01 Tj
-0 -49.7454 Td
-(0985 ) 3.01 Tj
-0 -51.0545 Td
-(0986 ) 3.01 Tj
-0 -52.3636 Td
-(0987 ) 3.01 Tj
-0 -53.6727 Td
-(0988 ) 3.01 Tj
-0 -54.9818 Td
-(0989 ) 3.01 Tj
-0 -56.2909 Td
-(0990 ) 3.01 Tj
-0 -57.6 Td
-(0991 ) 3.01 Tj
-0 -58.9091 Td
-(0992 ) 3.01 Tj
-0 -60.2181 Td
-(0993 ) 3.01 Tj
-0 -61.5272 Td
-(0994 ) 3.01 Tj
-0 -62.8363 Td
-(0995 ) 3.01 Tj
-0 -64.1454 Td
-(0996 ) 3.01 Tj
-0 -65.4545 Td
-(0997 ) 3.01 Tj
-0 -66.7636 Td
-(0998 ) 3.01 Tj
-0 -68.0727 Td
-(0999 ) 3.01 Tj
-0 -72 Td
-(Sheet 09) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/bootasm.S  Page 2) 174.741 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.479 Tj
+0 -47.4668 Td
+(0952   # identical to their physical addresses, so that the) 257.742 Tj
+0 -56.9602 Td
+(0953   # effective memory map does not change during the switch\
+.) 279.585 Tj
+0 -66.4535 Td
+(0954   lgdt    gdtdesc) 96.1073 Tj
+0 -75.9469 Td
+(0955   movl    %cr0, %eax) 109.213 Tj
+0 -85.4403 Td
+(0956   orl     $CR0_PE_ON, %eax) 135.424 Tj
+0 -94.9336 Td
+(0957   movl    %eax, %cr0) 109.213 Tj
+0 -104.427 Td
+(0958 ) 21.8426 Tj
+0 -113.92 Td
+(0959   # Jump to next instruction, but in 32-bit code segment.) 270.848 Tj
+0 -123.414 Td
+(0960   # Switches processor into 32-bit mode.) 196.583 Tj
+0 -132.907 Td
+(0961   ljmp    $PROT_MODE_CSEG, $protcseg) 179.109 Tj
+0 -142.4 Td
+(0962 ) 21.8426 Tj
+0 -151.894 Td
+(0963   .code32                     # Assemble for 32-bit mode) 266.479 Tj
+0 -161.387 Td
+(0964 protcseg:) 61.1592 Tj
+0 -170.88 Td
+(0965   # Set up the protected-mode data segment registers) 249.005 Tj
+0 -180.374 Td
+(0966   movw    $PROT_MODE_DSEG, %ax    # Our data segment selec\
+tor) 288.322 Tj
+0 -189.867 Td
+(0967   movw    %ax, %ds                # -> DS: Data Segment) 262.111 Tj
+0 -199.361 Td
+(0968   movw    %ax, %es                # -> ES: Extra Segment) 266.479 Tj
+0 -208.854 Td
+(0969   movw    %ax, %fs                # -> FS) 200.952 Tj
+0 -218.347 Td
+(0970   movw    %ax, %gs                # -> GS) 200.952 Tj
+0 -227.841 Td
+(0971   movw    %ax, %ss                # -> SS: Stack Segment) 266.479 Tj
+0 -237.334 Td
+(0972 ) 21.8426 Tj
+0 -246.827 Td
+(0973   # Set up the stack pointer and call into C.) 218.426 Tj
+0 -256.321 Td
+(0974   movl    $start, %esp) 117.95 Tj
+0 -265.814 Td
+(0975   call    bootmain) 100.476 Tj
+0 -275.307 Td
+(0976 ) 21.8426 Tj
+0 -284.801 Td
+(0977   # If bootmain returns \(it shouldn't\), loop.) 218.426 Tj
+0 -294.294 Td
+(0978 spin:) 43.6851 Tj
+0 -303.788 Td
+(0979   jmp     spin) 83.0018 Tj
+0 -313.281 Td
+(0980 ) 21.8426 Tj
+0 -322.774 Td
+(0981 # Bootstrap GDT) 87.3703 Tj
+0 -332.268 Td
+(0982 .p2align 2                                # force 4 byte a\
+lignment) 310.165 Tj
+0 -341.761 Td
+(0983 gdt:) 39.3166 Tj
+0 -351.254 Td
+(0984   SEG_NULLASM                             # null seg) 249.005 Tj
+0 -360.748 Td
+(0985   SEG_ASM\(STA_X|STA_R, 0x0, 0xffffffff\)   # code seg) 249.005 Tj
+0 -370.241 Td
+(0986   SEG_ASM\(STA_W, 0x0, 0xffffffff\)         # data seg) 249.005 Tj
+0 -379.734 Td
+(0987 ) 21.8426 Tj
+0 -389.228 Td
+(0988 gdtdesc:) 56.7907 Tj
+0 -398.721 Td
+(0989   .word   0x17                            # sizeof\(gdt\) \
+- 1) 279.585 Tj
+0 -408.214 Td
+(0990   .long   gdt                             # address gdt) 262.111 Tj
+0 -417.708 Td
+(0991 ) 21.8426 Tj
+0 -427.201 Td
+(0992 ) 21.8426 Tj
+0 -436.695 Td
+(0993 ) 21.8426 Tj
+0 -446.188 Td
+(0994 ) 21.8426 Tj
+0 -455.681 Td
+(0995 ) 21.8426 Tj
+0 -465.175 Td
+(0996 ) 21.8426 Tj
+0 -474.668 Td
+(0997 ) 21.8426 Tj
+0 -484.161 Td
+(0998 ) 21.8426 Tj
+0 -493.655 Td
+(0999 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 09) 34.9481 Tj
 Q
 Q
 Q
@@ -5986,6 +6314,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -5993,241 +6324,268 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/bootasm.S  Page 1) 24.08 Tj
-0 -3.92728 Td
-(1000 #include "asm.h") 12.642 Tj
-0 -5.23637 Td
-(1001 ) 3.01 Tj
-0 -6.54546 Td
-(1002 .set PROT_MODE_CSEG,0x8         # code segment selector) 36.12 Tj
-0 -7.85455 Td
-(1003 .set PROT_MODE_DSEG,0x10        # data segment selector) 36.12 Tj
-0 -9.16364 Td
-(1004 .set CR0_PE_ON,0x1              # protected mode enable flag) 39.13 Tj
-0 -10.4727 Td
-(1005 ) 3.01 Tj
-0 -11.7818 Td
-(1006 #########################################################################) 46.956 Tj
-0 -13.0909 Td
-(1007 # ENTRY POINT for the bootstrap processor) 27.692 Tj
-0 -14.4 Td
-(1008 #   This code should be stored in the first sector of the hard disk.) 43.946 Tj
-0 -15.7091 Td
-(1009 #   After the BIOS initializes the hardware on startup or system reset,) 45.752 Tj
-0 -17.0182 Td
-(1010 #   it loads this code at physical address 0x7c00 - 0x7d00 \(512 bytes\).) 45.752 Tj
-0 -18.3273 Td
-(1011 #   Then the BIOS jumps to the beginning of it, address 0x7c00,) 40.936 Tj
-0 -19.6364 Td
-(1012 #   while running in 16-bit real-mode \(8086 compatibility mode\).) 41.538 Tj
-0 -20.9455 Td
-(1013 #   The Code Segment register \(CS\) is initially zero on entry.) 40.334 Tj
-0 -22.2545 Td
-(1014 #) 3.612 Tj
-0 -23.5636 Td
-(1015 # This code switches into 32-bit protected mode so that all of) 40.334 Tj
-0 -24.8727 Td
-(1016 # memory can accessed, then calls into C.) 27.692 Tj
-0 -26.1818 Td
-(1017 #########################################################################) 46.956 Tj
-0 -27.4909 Td
-(1018 ) 3.01 Tj
-0 -28.8 Td
-(1019 .globl start                      # Entry point) 31.304 Tj
-0 -30.1091 Td
-(1020 start:) 6.622 Tj
-0 -31.4182 Td
-(1021 .code16                           # This runs in real mode) 37.926 Tj
-0 -32.7273 Td
-(1022   cli                             # Disable interrupts) 35.518 Tj
-0 -34.0364 Td
-(1023   cld                             # String operations increment) 40.936 Tj
-0 -35.3454 Td
-(1024 ) 3.01 Tj
-0 -36.6545 Td
-(1025   # Set up the important data segment registers \(DS, ES, SS\).) 39.732 Tj
-0 -37.9636 Td
-(1026   xorw    %ax,%ax                 # Segment number zero) 36.12 Tj
-0 -39.2727 Td
-(1027   movw    %ax,%ds                 # -> Data Segment) 33.712 Tj
-0 -40.5818 Td
-(1028   movw    %ax,%es                 # -> Extra Segment) 34.314 Tj
-0 -41.8909 Td
-(1029   movw    %ax,%ss                 # -> Stack Segment) 34.314 Tj
-0 -43.2 Td
-(1030 ) 3.01 Tj
-0 -44.5091 Td
-(1031   # Set up the stack pointer, growing downward from 0x7c00.) 38.528 Tj
-0 -45.8182 Td
-(1032   movw    $start,%sp              # Stack Pointer) 32.508 Tj
-0 -47.1272 Td
-(1033 ) 3.01 Tj
-0 -48.4363 Td
-(1034   # Enable A20:) 12.04 Tj
-0 -49.7454 Td
-(1035   #   For fascinating historical reasons \(related to the fact that) 42.742 Tj
-0 -51.0545 Td
-(1036   #   the earliest 8086-based PCs could only address 1MB of physical) 43.946 Tj
-0 -52.3636 Td
-(1037   #   memory and subsequent 80286-based PCs wanted to retain maximum) 43.946 Tj
-0 -53.6727 Td
-(1038   #   compatibility\), physical address line 20 is tied to low when the) 45.15 Tj
-0 -54.9818 Td
-(1039   #   machine boots.  Obviously this a bit of a drag for us, especially) 45.752 Tj
-0 -56.2909 Td
-(1040   #   when trying to address memory above 1MB.  This code undoes this.) 45.15 Tj
-0 -57.6 Td
-(1041 ) 3.01 Tj
-0 -58.9091 Td
-(1042 seta20.1:) 8.428 Tj
-0 -60.2181 Td
-(1043   inb     $0x64,%al               # Get status) 30.702 Tj
-0 -61.5272 Td
-(1044   testb   $0x2,%al                # Busy?) 27.692 Tj
-0 -62.8363 Td
-(1045   jnz     seta20.1                # Yes) 26.488 Tj
-0 -64.1454 Td
-(1046   movb    $0xd1,%al               # Command: Write) 33.11 Tj
-0 -65.4545 Td
-(1047   outb    %al,$0x64               #  output port) 31.906 Tj
-0 -66.7636 Td
-(1048 ) 3.01 Tj
-0 -68.0727 Td
-(1049 ) 3.01 Tj
-0 -72 Td
-(Sheet 10) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/bootother.S  Page 1) 183.478 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 # Start an Application Processor. This must be placed on a\
+ 4KB boundary) 332.007 Tj
+0 -56.9602 Td
+(1003 # somewhere in the 1st MB of conventional memory \(APBOOTS\
+TRAP\). However,) 336.376 Tj
+0 -66.4535 Td
+(1004 # due to some shortcuts below it's restricted further to w\
+ithin the 1st) 332.007 Tj
+0 -75.9469 Td
+(1005 # 64KB. The AP starts in real-mode, with) 196.583 Tj
+0 -85.4403 Td
+(1006 #   CS selector set to the startup memory address/16;) 253.374 Tj
+0 -94.9336 Td
+(1007 #   CS base set to startup memory address;) 205.32 Tj
+0 -104.427 Td
+(1008 #   CS limit set to 64KB;) 131.055 Tj
+0 -113.92 Td
+(1009 #   CPL and IP set to 0.) 126.687 Tj
+0 -123.414 Td
+(1010 #) 26.2111 Tj
+0 -132.907 Td
+(1011 # Bootothers \(in main.c\) starts each non-boot CPU in tur\
+n.) 275.216 Tj
+0 -142.4 Td
+(1012 # It puts the correct %esp in start-4,) 187.846 Tj
+0 -151.894 Td
+(1013 # and the place to jump to in start-8.) 187.846 Tj
+0 -161.387 Td
+(1014 #) 26.2111 Tj
+0 -170.88 Td
+(1015 # This code is identical to bootasm.S except:) 218.426 Tj
+0 -180.374 Td
+(1016 #   - it does not need to enable A20) 179.109 Tj
+0 -189.867 Td
+(1017 #   - it uses the address at start-4 for the %esp) 235.9 Tj
+0 -199.361 Td
+(1018 #   - it jumps to the address at start-8 instead of callin\
+g bootmain) 318.902 Tj
+0 -208.854 Td
+(1019 ) 21.8426 Tj
+0 -218.347 Td
+(1020 .set PROT_MODE_CSEG, 0x8         # kernel code segment sel\
+ector) 297.059 Tj
+0 -227.841 Td
+(1021 .set PROT_MODE_DSEG, 0x10        # kernel data segment sel\
+ector) 297.059 Tj
+0 -237.334 Td
+(1022 .set CR0_PE_ON,      0x1         # protected mode enable f\
+lag) 288.322 Tj
+0 -246.827 Td
+(1023 ) 21.8426 Tj
+0 -256.321 Td
+(1024 .globl start) 74.2647 Tj
+0 -265.814 Td
+(1025 start:) 48.0537 Tj
+0 -275.307 Td
+(1026   .code16                     # Assemble for 16-bit mode) 266.479 Tj
+0 -284.801 Td
+(1027   cli                         # Disable interrupts) 240.268 Tj
+0 -294.294 Td
+(1028   cld                         # String operations incremen\
+t) 279.585 Tj
+0 -303.788 Td
+(1029 ) 21.8426 Tj
+0 -313.281 Td
+(1030   # Set up the important data segment registers \(DS, ES, \
+SS\).) 288.322 Tj
+0 -322.774 Td
+(1031   xorw    %ax,%ax             # Segment number zero) 244.637 Tj
+0 -332.268 Td
+(1032   movw    %ax,%ds             # -> Data Segment) 227.163 Tj
+0 -341.761 Td
+(1033   movw    %ax,%es             # -> Extra Segment) 231.531 Tj
+0 -351.254 Td
+(1034   movw    %ax,%ss             # -> Stack Segment) 231.531 Tj
+0 -360.748 Td
+(1035 ) 21.8426 Tj
+0 -370.241 Td
+(1036 ) 21.8426 Tj
+0 -379.734 Td
+(1037 ) 21.8426 Tj
+0 -389.228 Td
+(1038 ) 21.8426 Tj
+0 -398.721 Td
+(1039 ) 21.8426 Tj
+0 -408.214 Td
+(1040 ) 21.8426 Tj
+0 -417.708 Td
+(1041 ) 21.8426 Tj
+0 -427.201 Td
+(1042 ) 21.8426 Tj
+0 -436.695 Td
+(1043 ) 21.8426 Tj
+0 -446.188 Td
+(1044 ) 21.8426 Tj
+0 -455.681 Td
+(1045 ) 21.8426 Tj
+0 -465.175 Td
+(1046 ) 21.8426 Tj
+0 -474.668 Td
+(1047 ) 21.8426 Tj
+0 -484.161 Td
+(1048 ) 21.8426 Tj
+0 -493.655 Td
+(1049 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/bootasm.S  Page 2) 24.08 Tj
-0 -3.92728 Td
-(1050 seta20.2:) 8.428 Tj
-0 -5.23637 Td
-(1051   inb     $0x64,%al               # Get status) 30.702 Tj
-0 -6.54546 Td
-(1052   testb   $0x2,%al                # Busy?) 27.692 Tj
-0 -7.85455 Td
-(1053   jnz     seta20.2                # Yes) 26.488 Tj
-0 -9.16364 Td
-(1054   movb    $0xdf,%al               # Enable) 28.294 Tj
-0 -10.4727 Td
-(1055   outb    %al,$0x60               #  A20) 27.09 Tj
-0 -11.7818 Td
-(1056 ) 3.01 Tj
-0 -13.0909 Td
-(1057 # Switch from real to protected mode) 24.682 Tj
-0 -14.4 Td
-(1058 #  The descriptors in our GDT allow all physical memory to be accessed.) 45.752 Tj
-0 -15.7091 Td
-(1059 #  Furthermore, the descriptors have base addresses of 0, so that the) 44.548 Tj
-0 -17.0182 Td
-(1060 #  segment translation is a NOP, ie. virtual addresses are identical to) 45.752 Tj
-0 -18.3273 Td
-(1061 #  their physical addresses.  With this setup, immediately after) 41.538 Tj
-0 -19.6364 Td
-(1062 #  enabling protected mode it will still appear to this code) 39.13 Tj
-0 -20.9455 Td
-(1063 #  that it is running directly on physical memory with no translation.) 45.15 Tj
-0 -22.2545 Td
-(1064 #  This initial NOP-translation setup is required by the processor) 42.742 Tj
-0 -23.5636 Td
-(1065 #  to ensure that the transition to protected mode occurs smoothly.) 43.344 Tj
-0 -24.8727 Td
-(1066 real_to_prot:) 10.836 Tj
-0 -26.1818 Td
-(1067   cli                         # Mandatory since we dont set up an IDT) 44.548 Tj
-0 -27.4909 Td
-(1068   lgdt    gdtdesc             # load GDT -- mandatory in protected mode) 45.752 Tj
-0 -28.8 Td
-(1069   movl    %cr0, %eax          # turn on protected mode) 35.518 Tj
-0 -30.1091 Td
-(1070   orl     $CR0_PE_ON, %eax    #) 21.672 Tj
-0 -31.4182 Td
-(1071   movl    %eax, %cr0          #) 21.672 Tj
-0 -32.7273 Td
-(1072   ### CPU magic: jump to relocation, flush prefetch queue, and reload %cs) 46.956 Tj
-0 -34.0364 Td
-(1073   ### Has the effect of just jmp to the next instruction, but simultaneous) 47.558 Tj
-0 -35.3454 Td
-(1074   ### loads CS with $PROT_MODE_CSEG.) 24.682 Tj
-0 -36.6545 Td
-(1075   ljmp    $PROT_MODE_CSEG, $protcseg) 24.682 Tj
-0 -37.9636 Td
-(1076 ) 3.01 Tj
-0 -39.2727 Td
-(1077 #### we are in 32-bit protected mode \(hence the .code32\)) 36.722 Tj
-0 -40.5818 Td
-(1078 .code32) 7.224 Tj
-0 -41.8909 Td
-(1079 protcseg:) 8.428 Tj
-0 -43.2 Td
-(1080   # Set up the protected-mode data segment registers) 34.314 Tj
-0 -44.5091 Td
-(1081   movw    $PROT_MODE_DSEG, %ax    # Our data segment selector) 39.732 Tj
-0 -45.8182 Td
-(1082   movw    %ax, %ds                # -> DS: Data Segment) 36.12 Tj
-0 -47.1272 Td
-(1083   movw    %ax, %es                # -> ES: Extra Segment) 36.722 Tj
-0 -48.4363 Td
-(1084   movw    %ax, %fs                # -> FS) 27.692 Tj
-0 -49.7454 Td
-(1085   movw    %ax, %gs                # -> GS) 27.692 Tj
-0 -51.0545 Td
-(1086   movw    %ax, %ss                # -> SS: Stack Segment) 36.722 Tj
-0 -52.3636 Td
-(1087   call cmain                      # finish the boot load from C.) 41.538 Tj
-0 -53.6727 Td
-(1088                                   # cmain\(\) should not return) 39.732 Tj
-0 -54.9818 Td
-(1089 spin:) 6.02 Tj
-0 -56.2909 Td
-(1090   jmp spin                        # ..but in case it does, spin) 40.936 Tj
-0 -57.6 Td
-(1091 ) 3.01 Tj
-0 -58.9091 Td
-(1092 .p2align 2                                # force 4 byte alignment) 42.742 Tj
-0 -60.2181 Td
-(1093 gdt:) 5.418 Tj
-0 -61.5272 Td
-(1094   SEG_NULLASM                             # null seg) 34.314 Tj
-0 -62.8363 Td
-(1095   SEG_ASM\(STA_X|STA_R, 0x0, 0xffffffff\)   # code seg) 34.314 Tj
-0 -64.1454 Td
-(1096   SEG_ASM\(STA_W, 0x0, 0xffffffff\)         # data seg) 34.314 Tj
-0 -65.4545 Td
-(1097 gdtdesc:) 7.826 Tj
-0 -66.7636 Td
-(1098   .word   0x17                            # sizeof\(gdt\) - 1) 38.528 Tj
-0 -68.0727 Td
-(1099   .long   gdt                             # address gdt) 36.12 Tj
-0 -72 Td
-(Sheet 10) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/bootother.S  Page 2) 183.478 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.479 Tj
+0 -47.4668 Td
+(1052   # identical to their physical addresses, so that the) 257.742 Tj
+0 -56.9602 Td
+(1053   # effective memory map does not change during the switch\
+.) 279.585 Tj
+0 -66.4535 Td
+(1054   lgdt    gdtdesc) 96.1073 Tj
+0 -75.9469 Td
+(1055   movl    %cr0, %eax) 109.213 Tj
+0 -85.4403 Td
+(1056   orl     $CR0_PE_ON, %eax) 135.424 Tj
+0 -94.9336 Td
+(1057   movl    %eax, %cr0) 109.213 Tj
+0 -104.427 Td
+(1058 ) 21.8426 Tj
+0 -113.92 Td
+(1059   # Jump to next instruction, but in 32-bit code segment.) 270.848 Tj
+0 -123.414 Td
+(1060   # Switches processor into 32-bit mode.) 196.583 Tj
+0 -132.907 Td
+(1061   ljmp    $PROT_MODE_CSEG, $protcseg) 179.109 Tj
+0 -142.4 Td
+(1062 ) 21.8426 Tj
+0 -151.894 Td
+(1063   .code32                     # Assemble for 32-bit mode) 266.479 Tj
+0 -161.387 Td
+(1064 protcseg:) 61.1592 Tj
+0 -170.88 Td
+(1065   # Set up the protected-mode data segment registers) 249.005 Tj
+0 -180.374 Td
+(1066   movw    $PROT_MODE_DSEG, %ax    # Our data segment selec\
+tor) 288.322 Tj
+0 -189.867 Td
+(1067   movw    %ax, %ds                # -> DS: Data Segment) 262.111 Tj
+0 -199.361 Td
+(1068   movw    %ax, %es                # -> ES: Extra Segment) 266.479 Tj
+0 -208.854 Td
+(1069   movw    %ax, %fs                # -> FS) 200.952 Tj
+0 -218.347 Td
+(1070   movw    %ax, %gs                # -> GS) 200.952 Tj
+0 -227.841 Td
+(1071   movw    %ax, %ss                # -> SS: Stack Segment) 266.479 Tj
+0 -237.334 Td
+(1072 ) 21.8426 Tj
+0 -246.827 Td
+(1073   movl    start-4, %esp) 122.318 Tj
+0 -256.321 Td
+(1074   movl    start-8, %eax) 122.318 Tj
+0 -265.814 Td
+(1075   jmp     *%eax) 87.3703 Tj
+0 -275.307 Td
+(1076 ) 21.8426 Tj
+0 -284.801 Td
+(1077 # Bootstrap GDT) 87.3703 Tj
+0 -294.294 Td
+(1078 .p2align 2                                # force 4 byte a\
+lignment) 310.165 Tj
+0 -303.788 Td
+(1079 gdt:) 39.3166 Tj
+0 -313.281 Td
+(1080   SEG_NULLASM                             # null seg) 249.005 Tj
+0 -322.774 Td
+(1081   SEG_ASM\(STA_X|STA_R, 0x0, 0xffffffff\)   # code seg) 249.005 Tj
+0 -332.268 Td
+(1082   SEG_ASM\(STA_W, 0x0, 0xffffffff\)         # data seg) 249.005 Tj
+0 -341.761 Td
+(1083 ) 21.8426 Tj
+0 -351.254 Td
+(1084 gdtdesc:) 56.7907 Tj
+0 -360.748 Td
+(1085   .word   0x17                            # sizeof\(gdt\) \
+- 1) 279.585 Tj
+0 -370.241 Td
+(1086   .long   gdt                             # address gdt) 262.111 Tj
+0 -379.734 Td
+(1087 ) 21.8426 Tj
+0 -389.228 Td
+(1088 ) 21.8426 Tj
+0 -398.721 Td
+(1089 ) 21.8426 Tj
+0 -408.214 Td
+(1090 ) 21.8426 Tj
+0 -417.708 Td
+(1091 ) 21.8426 Tj
+0 -427.201 Td
+(1092 ) 21.8426 Tj
+0 -436.695 Td
+(1093 ) 21.8426 Tj
+0 -446.188 Td
+(1094 ) 21.8426 Tj
+0 -455.681 Td
+(1095 ) 21.8426 Tj
+0 -465.175 Td
+(1096 ) 21.8426 Tj
+0 -474.668 Td
+(1097 ) 21.8426 Tj
+0 -484.161 Td
+(1098 ) 21.8426 Tj
+0 -493.655 Td
+(1099 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 10) 34.9481 Tj
 Q
 Q
 Q
@@ -6238,7 +6596,10 @@ pdfEndPage
 %%Page: 18 18
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -6246,241 +6607,261 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/bootother.S  Page 1) 25.284 Tj
-0 -3.92728 Td
-(1100 #include "asm.h") 12.642 Tj
-0 -5.23637 Td
-(1101 ) 3.01 Tj
-0 -6.54546 Td
-(1102 # Start an Application Processor. This must be placed on a 4KB boundary) 45.752 Tj
-0 -7.85455 Td
-(1103 # somewhere in the 1st MB of conventional memory \(APBOOTSTRAP\). However,) 46.354 Tj
-0 -9.16364 Td
-(1104 # due to some shortcuts below it's restricted further to within the 1st) 45.752 Tj
-0 -10.4727 Td
-(1105 # 64KB. The AP starts in real-mode, with) 27.09 Tj
-0 -11.7818 Td
-(1106 #   CS selector set to the startup memory address/16;) 34.916 Tj
-0 -13.0909 Td
-(1107 #   CS base set to startup memory address;) 28.294 Tj
-0 -14.4 Td
-(1108 #   CS limit set to 64KB;) 18.06 Tj
-0 -15.7091 Td
-(1109 #   CPL and IP set to 0.) 17.458 Tj
-0 -17.0182 Td
-(1110 #) 3.612 Tj
-0 -18.3273 Td
-(1111 # mp.c causes each non-boot CPU in turn to jump to start.) 37.324 Tj
-0 -19.6364 Td
-(1112 # mp.c puts the correct %esp in start-4, and the place to jump) 40.334 Tj
-0 -20.9455 Td
-(1113 # to in start-8.) 12.642 Tj
-0 -22.2545 Td
-(1114 ) 3.01 Tj
-0 -23.5636 Td
-(1115 .set PROT_MODE_CSEG,0x8         # code segment selector) 36.12 Tj
-0 -24.8727 Td
-(1116 .set PROT_MODE_DSEG,0x10        # data segment selector) 36.12 Tj
-0 -26.1818 Td
-(1117 .set CR0_PE_ON,0x1              # protected mode enable flag) 39.13 Tj
-0 -27.4909 Td
-(1118 ) 3.01 Tj
-0 -28.8 Td
-(1119 .globl start) 10.234 Tj
-0 -30.1091 Td
-(1120 start:) 6.622 Tj
-0 -31.4182 Td
-(1121   .code16                     # This runs in real mode) 35.518 Tj
-0 -32.7273 Td
-(1122   cli                         # Disable interrupts) 33.11 Tj
-0 -34.0364 Td
-(1123   cld                         # String operations increment) 38.528 Tj
-0 -35.3454 Td
-(1124 ) 3.01 Tj
-0 -36.6545 Td
-(1125   # Set up the important data segment registers \(DS, ES, SS\).) 39.732 Tj
-0 -37.9636 Td
-(1126   xorw    %ax,%ax             # Segment number zero) 33.712 Tj
-0 -39.2727 Td
-(1127   movw    %ax,%ds             # -> Data Segment) 31.304 Tj
-0 -40.5818 Td
-(1128   movw    %ax,%es             # -> Extra Segment) 31.906 Tj
-0 -41.8909 Td
-(1129   movw    %ax,%ss             # -> Stack Segment) 31.906 Tj
-0 -43.2 Td
-(1130 ) 3.01 Tj
-0 -44.5091 Td
-(1131   # Set up the stack pointer, growing downward from 0x7000-8.) 39.732 Tj
-0 -45.8182 Td
-(1132   movw    $start-8,%sp        # Stack Pointer) 30.1 Tj
-0 -47.1272 Td
-(1133 ) 3.01 Tj
-0 -48.4363 Td
-(1134   # Switch from real to protected mode) 25.886 Tj
-0 -49.7454 Td
-(1135   #  The descriptors in our GDT allow all physical memory to be accessed.) 46.956 Tj
-0 -51.0545 Td
-(1136   #  Furthermore, the descriptors have base addresses of 0, so that the) 45.752 Tj
-0 -52.3636 Td
-(1137   #  segment translation is a NOP, ie. virtual addresses are identical to) 46.956 Tj
-0 -53.6727 Td
-(1138   #  their physical addresses.  With this setup, immediately after) 42.742 Tj
-0 -54.9818 Td
-(1139   #  enabling protected mode it will still appear to this code) 40.334 Tj
-0 -56.2909 Td
-(1140   #  that it is running directly on physical memory with no translation.) 46.354 Tj
-0 -57.6 Td
-(1141   #  This initial NOP-translation setup is required by the processor) 43.946 Tj
-0 -58.9091 Td
-(1142   #  to ensure that the transition to protected mode occurs smoothly.) 44.548 Tj
-0 -60.2181 Td
-(1143 ) 3.01 Tj
-0 -61.5272 Td
-(1144   lgdt    gdtdesc             # load GDT -- mandatory in protected mode) 45.752 Tj
-0 -62.8363 Td
-(1145   movl    %cr0, %eax          # turn on protected mode) 35.518 Tj
-0 -64.1454 Td
-(1146   orl     $CR0_PE_ON, %eax    #) 21.672 Tj
-0 -65.4545 Td
-(1147   movl    %eax, %cr0          #) 21.672 Tj
-0 -66.7636 Td
-(1148 ) 3.01 Tj
-0 -68.0727 Td
-(1149 ) 3.01 Tj
-0 -72 Td
-(Sheet 11) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/bootmain.c  Page 1) 179.109 Tj
+0 -28.4801 Td
+(1100 // Boot loader.) 87.3703 Tj
+0 -37.9735 Td
+(1101 //) 30.5796 Tj
+0 -47.4668 Td
+(1102 // The BIOS loads boot sector \(bootasm.S\) from sector 0 \
+of the disk) 314.533 Tj
+0 -56.9602 Td
+(1103 // into memory and executes it.  The boot sector puts the \
+processor) 314.533 Tj
+0 -66.4535 Td
+(1104 // in 32-bit mode and calls bootmain below, which loads an\
+ ELF kernel) 323.27 Tj
+0 -75.9469 Td
+(1105 // image from the disk starting at sector 1 and then jumps\
+ to the) 305.796 Tj
+0 -85.4403 Td
+(1106 // kernel entry routine.) 126.687 Tj
+0 -94.9336 Td
+(1107 ) 21.8426 Tj
+0 -104.427 Td
+(1108 #include "types.h") 100.476 Tj
+0 -113.92 Td
+(1109 #include "elf.h") 91.7388 Tj
+0 -123.414 Td
+(1110 #include "x86.h") 91.7388 Tj
+0 -132.907 Td
+(1111 ) 21.8426 Tj
+0 -142.4 Td
+(1112 #define SECTSIZE  512) 113.581 Tj
+0 -151.894 Td
+(1113 ) 21.8426 Tj
+0 -161.387 Td
+(1114 void readseg\(uint, uint, uint\);) 157.267 Tj
+0 -170.88 Td
+(1115 ) 21.8426 Tj
+0 -180.374 Td
+(1116 void) 39.3166 Tj
+0 -189.867 Td
+(1117 bootmain\(void\)) 83.0018 Tj
+0 -199.361 Td
+(1118 {) 26.2111 Tj
+0 -208.854 Td
+(1119   struct elfhdr *elf;) 113.581 Tj
+0 -218.347 Td
+(1120   struct proghdr *ph, *eph;) 139.792 Tj
+0 -227.841 Td
+(1121   void \(*entry\)\(void\);) 117.95 Tj
+0 -237.334 Td
+(1122 ) 21.8426 Tj
+0 -246.827 Td
+(1123   elf = \(struct elfhdr*\)0x10000;  // scratch space) 240.268 Tj
+0 -256.321 Td
+(1124 ) 21.8426 Tj
+0 -265.814 Td
+(1125   // Read 1st page off disk) 139.792 Tj
+0 -275.307 Td
+(1126   readseg\(\(uint\)elf, SECTSIZE*8, 0\);) 179.109 Tj
+0 -284.801 Td
+(1127 ) 21.8426 Tj
+0 -294.294 Td
+(1128   // Is this an ELF executable?) 157.267 Tj
+0 -303.788 Td
+(1129   if\(elf->magic != ELF_MAGIC\)) 148.529 Tj
+0 -313.281 Td
+(1130     goto bad;) 78.6333 Tj
+0 -322.774 Td
+(1131 ) 21.8426 Tj
+0 -332.268 Td
+(1132   // Load each program segment \(ignores ph flags\).) 240.268 Tj
+0 -341.761 Td
+(1133   ph = \(struct proghdr*\)\(\(uchar*\)elf + elf->phoff\);) 244.637 Tj
+0 -351.254 Td
+(1134   eph = ph + elf->phnum;) 126.687 Tj
+0 -360.748 Td
+(1135   for\(; ph < eph; ph++\)) 122.318 Tj
+0 -370.241 Td
+(1136     readseg\(ph->va, ph->memsz, ph->offset\);) 209.689 Tj
+0 -379.734 Td
+(1137 ) 21.8426 Tj
+0 -389.228 Td
+(1138   // Call the entry point from the ELF header.) 222.794 Tj
+0 -398.721 Td
+(1139   // Does not return!) 113.581 Tj
+0 -408.214 Td
+(1140   entry = \(void\(*\)\(void\)\)\(elf->entry & 0xFFFFFF\);) 235.9 Tj
+0 -417.708 Td
+(1141   entry\(\);) 65.5277 Tj
+0 -427.201 Td
+(1142 ) 21.8426 Tj
+0 -436.695 Td
+(1143 bad:) 39.3166 Tj
+0 -446.188 Td
+(1144   outw\(0x8A00, 0x8A00\);) 122.318 Tj
+0 -455.681 Td
+(1145   outw\(0x8A00, 0x8E00\);) 122.318 Tj
+0 -465.175 Td
+(1146   for\(;;\)) 61.1592 Tj
+0 -474.668 Td
+(1147     ;) 43.6851 Tj
+0 -484.161 Td
+(1148 }) 26.2111 Tj
+0 -493.655 Td
+(1149 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/bootother.S  Page 2) 25.284 Tj
-0 -3.92728 Td
-(1150   # CPU magic: jump to relocation, flush prefetch queue, and reload %cs) 45.752 Tj
-0 -5.23637 Td
-(1151   # Has the effect of just jmp to the next instruction, but simultaneous) 46.354 Tj
-0 -6.54546 Td
-(1152   # loads CS with $PROT_MODE_CSEG.) 23.478 Tj
-0 -7.85455 Td
-(1153   ljmp    $PROT_MODE_CSEG, $protcseg) 24.682 Tj
-0 -9.16364 Td
-(1154 ) 3.01 Tj
-0 -10.4727 Td
-(1155 # We are now in 32-bit protected mode \(hence the .code32\)) 37.324 Tj
-0 -11.7818 Td
-(1156 .code32) 7.224 Tj
-0 -13.0909 Td
-(1157 protcseg:) 8.428 Tj
-0 -14.4 Td
-(1158   # Set up the protected-mode data segment registers) 34.314 Tj
-0 -15.7091 Td
-(1159   movw    $PROT_MODE_DSEG, %ax    # Our data segment selector) 39.732 Tj
-0 -17.0182 Td
-(1160   movw    %ax, %ds                # -> DS: Data Segment) 36.12 Tj
-0 -18.3273 Td
-(1161   movw    %ax, %es                # -> ES: Extra Segment) 36.722 Tj
-0 -19.6364 Td
-(1162   movw    %ax, %fs                # -> FS) 27.692 Tj
-0 -20.9455 Td
-(1163   movw    %ax, %gs                # -> GS) 27.692 Tj
-0 -22.2545 Td
-(1164   movw    %ax, %ss                # -> SS: Stack Segment) 36.722 Tj
-0 -23.5636 Td
-(1165 ) 3.01 Tj
-0 -24.8727 Td
-(1166   movl    start-8, %eax) 16.856 Tj
-0 -26.1818 Td
-(1167   movl    start-4, %esp) 16.856 Tj
-0 -27.4909 Td
-(1168   jmp     *%eax) 12.04 Tj
-0 -28.8 Td
-(1169 ) 3.01 Tj
-0 -30.1091 Td
-(1170 .p2align 2                                # force 4 byte alignment) 42.742 Tj
-0 -31.4182 Td
-(1171 gdt:) 5.418 Tj
-0 -32.7273 Td
-(1172   SEG_NULLASM                             # null seg) 34.314 Tj
-0 -34.0364 Td
-(1173   SEG_ASM\(STA_X|STA_R, 0x0, 0xffffffff\)   # code seg) 34.314 Tj
-0 -35.3454 Td
-(1174   SEG_ASM\(STA_W, 0x0, 0xffffffff\)         # data seg) 34.314 Tj
-0 -36.6545 Td
-(1175 ) 3.01 Tj
-0 -37.9636 Td
-(1176 gdtdesc:) 7.826 Tj
-0 -39.2727 Td
-(1177   .word   0x17                            # sizeof\(gdt\) - 1) 38.528 Tj
-0 -40.5818 Td
-(1178   .long   gdt                             # address gdt) 36.12 Tj
-0 -41.8909 Td
-(1179 ) 3.01 Tj
-0 -43.2 Td
-(1180 ) 3.01 Tj
-0 -44.5091 Td
-(1181 ) 3.01 Tj
-0 -45.8182 Td
-(1182 ) 3.01 Tj
-0 -47.1272 Td
-(1183 ) 3.01 Tj
-0 -48.4363 Td
-(1184 ) 3.01 Tj
-0 -49.7454 Td
-(1185 ) 3.01 Tj
-0 -51.0545 Td
-(1186 ) 3.01 Tj
-0 -52.3636 Td
-(1187 ) 3.01 Tj
-0 -53.6727 Td
-(1188 ) 3.01 Tj
-0 -54.9818 Td
-(1189 ) 3.01 Tj
-0 -56.2909 Td
-(1190 ) 3.01 Tj
-0 -57.6 Td
-(1191 ) 3.01 Tj
-0 -58.9091 Td
-(1192 ) 3.01 Tj
-0 -60.2181 Td
-(1193 ) 3.01 Tj
-0 -61.5272 Td
-(1194 ) 3.01 Tj
-0 -62.8363 Td
-(1195 ) 3.01 Tj
-0 -64.1454 Td
-(1196 ) 3.01 Tj
-0 -65.4545 Td
-(1197 ) 3.01 Tj
-0 -66.7636 Td
-(1198 ) 3.01 Tj
-0 -68.0727 Td
-(1199 ) 3.01 Tj
-0 -72 Td
-(Sheet 11) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/bootmain.c  Page 2) 179.109 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.055 Tj
+0 -66.4535 Td
+(1154   while\(\(inb\(0x1F7\) & 0xC0\) != 0x40\)) 179.109 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.689 Tj
+0 -113.92 Td
+(1159 void) 39.3166 Tj
+0 -123.414 Td
+(1160 readsect\(void *dst, uint offset\)) 161.635 Tj
+0 -132.907 Td
+(1161 {) 26.2111 Tj
+0 -142.4 Td
+(1162   // Issue command.) 104.844 Tj
+0 -151.894 Td
+(1163   waitdisk\(\);) 78.6333 Tj
+0 -161.387 Td
+(1164   outb\(0x1F2, 1\);   // count = 1) 161.635 Tj
+0 -170.88 Td
+(1165   outb\(0x1F3, offset\);) 117.95 Tj
+0 -180.374 Td
+(1166   outb\(0x1F4, offset >> 8\);) 139.792 Tj
+0 -189.867 Td
+(1167   outb\(0x1F5, offset >> 16\);) 144.161 Tj
+0 -199.361 Td
+(1168   outb\(0x1F6, \(offset >> 24\) | 0xE0\);) 183.478 Tj
+0 -208.854 Td
+(1169   outb\(0x1F7, 0x20\);  // cmd 0x20 - read sectors) 231.531 Tj
+0 -218.347 Td
+(1170 ) 21.8426 Tj
+0 -227.841 Td
+(1171   // Read data.) 87.3703 Tj
+0 -237.334 Td
+(1172   waitdisk\(\);) 78.6333 Tj
+0 -246.827 Td
+(1173   insl\(0x1F0, dst, SECTSIZE/4\);) 157.267 Tj
+0 -256.321 Td
+(1174 }) 26.2111 Tj
+0 -265.814 Td
+(1175 ) 21.8426 Tj
+0 -275.307 Td
+(1176 // Read 'count' bytes at 'offset' from kernel into virtual\
+ address 'va'.) 336.376 Tj
+0 -284.801 Td
+(1177 // Might copy more than asked.) 152.898 Tj
+0 -294.294 Td
+(1178 void) 39.3166 Tj
+0 -303.788 Td
+(1179 readseg\(uint va, uint count, uint offset\)) 200.952 Tj
+0 -313.281 Td
+(1180 {) 26.2111 Tj
+0 -322.774 Td
+(1181   uint eva;) 69.8962 Tj
+0 -332.268 Td
+(1182 ) 21.8426 Tj
+0 -341.761 Td
+(1183   va &= 0xFFFFFF;) 96.1073 Tj
+0 -351.254 Td
+(1184   eva = va + count;) 104.844 Tj
+0 -360.748 Td
+(1185 ) 21.8426 Tj
+0 -370.241 Td
+(1186   // Round down to sector boundary.) 174.741 Tj
+0 -379.734 Td
+(1187   va &= ~\(SECTSIZE - 1\);) 126.687 Tj
+0 -389.228 Td
+(1188 ) 21.8426 Tj
+0 -398.721 Td
+(1189   // Translate from bytes to sectors; kernel starts at sec\
+tor 1.) 301.427 Tj
+0 -408.214 Td
+(1190   offset = \(offset / SECTSIZE\) + 1;) 174.741 Tj
+0 -417.708 Td
+(1191 ) 21.8426 Tj
+0 -427.201 Td
+(1192   // If this is too slow, we could read lots of sectors at\
+ a time.) 310.165 Tj
+0 -436.695 Td
+(1193   // We'd write more to memory than asked, but it doesn't \
+matter --) 314.533 Tj
+0 -446.188 Td
+(1194   // we load in increasing order.) 166.004 Tj
+0 -455.681 Td
+(1195   for\(; va < eva; va += SECTSIZE, offset++\)) 209.689 Tj
+0 -465.175 Td
+(1196     readsect\(\(uchar*\)va, offset\);) 166.004 Tj
+0 -474.668 Td
+(1197 }) 26.2111 Tj
+0 -484.161 Td
+(1198 ) 21.8426 Tj
+0 -493.655 Td
+(1199 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 11) 34.9481 Tj
 Q
 Q
 Q
@@ -6492,6 +6873,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -6499,241 +6883,257 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/main.c  Page 1) 22.274 Tj
-0 -3.92728 Td
-(1200 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(1201 #include "param.h") 13.846 Tj
-0 -6.54546 Td
-(1202 #include "mmu.h") 12.642 Tj
-0 -7.85455 Td
-(1203 #include "proc.h") 13.244 Tj
-0 -9.16364 Td
-(1204 #include "defs.h") 13.244 Tj
-0 -10.4727 Td
-(1205 #include "x86.h") 12.642 Tj
-0 -11.7818 Td
-(1206 #include "traps.h") 13.846 Tj
-0 -13.0909 Td
-(1207 #include "syscall.h") 15.05 Tj
-0 -14.4 Td
-(1208 #include "elf.h") 12.642 Tj
-0 -15.7091 Td
-(1209 #include "param.h") 13.846 Tj
-0 -17.0182 Td
-(1210 #include "spinlock.h") 15.652 Tj
-0 -18.3273 Td
-(1211 ) 3.01 Tj
-0 -19.6364 Td
-(1212 extern char edata[], end[];) 19.264 Tj
-0 -20.9455 Td
-(1213 extern uchar _binary__init_start[], _binary__init_size[];) 37.324 Tj
-0 -22.2545 Td
-(1214 ) 3.01 Tj
-0 -23.5636 Td
-(1215 void process0\(\);) 12.642 Tj
-0 -24.8727 Td
-(1216 ) 3.01 Tj
-0 -26.1818 Td
-(1217 // Bootstrap processor starts running C code here.) 33.11 Tj
-0 -27.4909 Td
-(1218 // This is called main0 not main so that it can have) 34.314 Tj
-0 -28.8 Td
-(1219 // a void return type.  Gcc can't handle functions named) 36.722 Tj
-0 -30.1091 Td
-(1220 // main that don't return int.  Really.) 26.488 Tj
-0 -31.4182 Td
-(1221 void) 5.418 Tj
-0 -32.7273 Td
-(1222 main0\(void\)) 9.632 Tj
-0 -34.0364 Td
-(1223 {) 3.612 Tj
-0 -35.3454 Td
-(1224   int i;) 7.826 Tj
-0 -36.6545 Td
-(1225   int bcpu;) 9.632 Tj
-0 -37.9636 Td
-(1226   struct proc *p;) 13.244 Tj
-0 -39.2727 Td
-(1227 ) 3.01 Tj
-0 -40.5818 Td
-(1228   // clear BSS) 11.438 Tj
-0 -41.8909 Td
-(1229   memset\(edata, 0, end - edata\);) 22.274 Tj
-0 -43.2 Td
-(1230 ) 3.01 Tj
-0 -44.5091 Td
-(1231   // Prevent release\(\) from enabling interrupts.) 31.906 Tj
-0 -45.8182 Td
-(1232   for\(i=0; i<NCPU; i++\)) 16.856 Tj
-0 -47.1272 Td
-(1233     cpus[i].nlock = 1;) 16.254 Tj
-0 -48.4363 Td
-(1234 ) 3.01 Tj
-0 -49.7454 Td
-(1235   mp_init\(\); // collect info about this machine) 31.304 Tj
-0 -51.0545 Td
-(1236   bcpu = mp_bcpu\(\);) 14.448 Tj
-0 -52.3636 Td
-(1237 ) 3.01 Tj
-0 -53.6727 Td
-(1238   // switch to bootstrap processor's stack) 28.294 Tj
-0 -54.9818 Td
-(1239   asm volatile\("movl %0, %%esp" : : "r" \(cpus[0].mpstack + MPSTACK - 32\)\);) 47.558 Tj
-0 -56.2909 Td
-(1240   asm volatile\("movl %0, %%ebp" : : "r" \(cpus[0].mpstack + MPSTACK\)\);) 44.548 Tj
-0 -57.6 Td
-(1241 ) 3.01 Tj
-0 -58.9091 Td
-(1242   lapic_init\(bcpu\);) 14.448 Tj
-0 -60.2181 Td
-(1243 ) 3.01 Tj
-0 -61.5272 Td
-(1244   cprintf\("\\ncpu%d: starting xv6\\n\\n", cpu\(\)\);) 30.702 Tj
-0 -62.8363 Td
-(1245 ) 3.01 Tj
-0 -64.1454 Td
-(1246 ) 3.01 Tj
-0 -65.4545 Td
-(1247 ) 3.01 Tj
-0 -66.7636 Td
-(1248 ) 3.01 Tj
-0 -68.0727 Td
-(1249 ) 3.01 Tj
-0 -72 Td
-(Sheet 12) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/main.c  Page 1) 161.635 Tj
+0 -28.4801 Td
+(1200 #include "types.h") 100.476 Tj
+0 -37.9735 Td
+(1201 #include "defs.h") 96.1073 Tj
+0 -47.4668 Td
+(1202 #include "param.h") 100.476 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.529 Tj
+0 -104.427 Td
+(1208 ) 21.8426 Tj
+0 -113.92 Td
+(1209 // Bootstrap processor starts running C code here.) 240.268 Tj
+0 -123.414 Td
+(1210 int) 34.9481 Tj
+0 -132.907 Td
+(1211 main\(void\)) 65.5277 Tj
+0 -142.4 Td
+(1212 {) 26.2111 Tj
+0 -151.894 Td
+(1213   int i;) 56.7907 Tj
+0 -161.387 Td
+(1214   static volatile int bcpu;  // cannot be on stack) 240.268 Tj
+0 -170.88 Td
+(1215   extern char edata[], end[];) 148.529 Tj
+0 -180.374 Td
+(1216 ) 21.8426 Tj
+0 -189.867 Td
+(1217   // clear BSS) 83.0018 Tj
+0 -199.361 Td
+(1218   memset\(edata, 0, end - edata\);) 161.635 Tj
+0 -208.854 Td
+(1219 ) 21.8426 Tj
+0 -218.347 Td
+(1220   // Prevent release\(\) from enabling interrupts.) 231.531 Tj
+0 -227.841 Td
+(1221   for\(i=0; i<NCPU; i++\)) 122.318 Tj
+0 -237.334 Td
+(1222     cpus[i].nlock = 1;) 117.95 Tj
+0 -246.827 Td
+(1223 ) 21.8426 Tj
+0 -256.321 Td
+(1224   mp_init\(\); // collect info about this machine) 227.163 Tj
+0 -265.814 Td
+(1225   bcpu = mp_bcpu\(\);) 104.844 Tj
+0 -275.307 Td
+(1226 ) 21.8426 Tj
+0 -284.801 Td
+(1227   // Switch to bootstrap processor's stack) 205.32 Tj
+0 -294.294 Td
+(1228   asm volatile\("movl %0, %%esp" : : "r" \(cpus[bcpu].mpst\
+ack+MPSTACK-32\)\);) 340.744 Tj
+0 -303.788 Td
+(1229   asm volatile\("movl %0, %%ebp" : : "r" \(cpus[bcpu].mpst\
+ack+MPSTACK\)\);) 327.639 Tj
+0 -313.281 Td
+(1230 ) 21.8426 Tj
+0 -322.774 Td
+(1231   lapic_init\(bcpu\);) 104.844 Tj
+0 -332.268 Td
+(1232   cprintf\("\\ncpu%d: starting xv6\\n\\n", cpu\(\)\);) 222.794 Tj
+0 -341.761 Td
+(1233 ) 21.8426 Tj
+0 -351.254 Td
+(1234   pinit\(\);         // process table) 174.741 Tj
+0 -360.748 Td
+(1235   binit\(\);         // buffer cache) 170.372 Tj
+0 -370.241 Td
+(1236   pic_init\(\);      // interrupt controller) 205.32 Tj
+0 -379.734 Td
+(1237   ioapic_init\(\);   // another interrupt controller) 240.268 Tj
+0 -389.228 Td
+(1238   kinit\(\);         // physical memory allocator) 227.163 Tj
+0 -398.721 Td
+(1239   tvinit\(\);        // trap vectors) 170.372 Tj
+0 -408.214 Td
+(1240   idtinit\(\);       // interrupt descriptor table) 231.531 Tj
+0 -417.708 Td
+(1241   fileinit\(\);      // file table) 161.635 Tj
+0 -427.201 Td
+(1242   iinit\(\);         // inode cache) 166.004 Tj
+0 -436.695 Td
+(1243   setupsegs\(0\);    // segments & TSS) 179.109 Tj
+0 -446.188 Td
+(1244   console_init\(\);  // I/O devices & their interrupts) 249.005 Tj
+0 -455.681 Td
+(1245   ide_init\(\);      // disk) 135.424 Tj
+0 -465.175 Td
+(1246   bootothers\(\);    // boot other CPUs) 183.478 Tj
+0 -474.668 Td
+(1247   if\(!ismp\)) 69.8962 Tj
+0 -484.161 Td
+(1248     timer_init\(\); // uniprocessor timer) 192.215 Tj
+0 -493.655 Td
+(1249   userinit\(\);      // first user process) 196.583 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/main.c  Page 2) 22.274 Tj
-0 -3.92728 Td
-(1250   pinit\(\); // process table) 19.264 Tj
-0 -5.23637 Td
-(1251   binit\(\); // buffer cache) 18.662 Tj
-0 -6.54546 Td
-(1252   pic_init\(\);) 10.836 Tj
-0 -7.85455 Td
-(1253   ioapic_init\(\);) 12.642 Tj
-0 -9.16364 Td
-(1254   kinit\(\); // physical memory allocator) 26.488 Tj
-0 -10.4727 Td
-(1255   tvinit\(\); // trap vectors) 19.264 Tj
-0 -11.7818 Td
-(1256   idtinit\(\); // this CPU's interrupt descriptor table) 34.916 Tj
-0 -13.0909 Td
-(1257   fileinit\(\);) 10.836 Tj
-0 -14.4 Td
-(1258   iinit\(\); // i-node table) 18.662 Tj
-0 -15.7091 Td
-(1259 ) 3.01 Tj
-0 -17.0182 Td
-(1260   // initialize process 0) 18.06 Tj
-0 -18.3273 Td
-(1261   p = &proc[0];) 12.04 Tj
-0 -19.6364 Td
-(1262   p->state = RUNNABLE;) 16.254 Tj
-0 -20.9455 Td
-(1263   p->kstack = kalloc\(KSTACKSIZE\);) 22.876 Tj
-0 -22.2545 Td
-(1264 ) 3.01 Tj
-0 -23.5636 Td
-(1265   // cause proc[0] to start in kernel at process0) 32.508 Tj
-0 -24.8727 Td
-(1266   p->jmpbuf.eip = \(uint\) process0;) 23.478 Tj
-0 -26.1818 Td
-(1267   p->jmpbuf.esp = \(uint\) \(p->kstack + KSTACKSIZE - 4\);) 35.518 Tj
-0 -27.4909 Td
-(1268 ) 3.01 Tj
-0 -28.8 Td
-(1269   // make sure there's a TSS) 19.866 Tj
-0 -30.1091 Td
-(1270   setupsegs\(0\);) 12.04 Tj
-0 -31.4182 Td
-(1271 ) 3.01 Tj
-0 -32.7273 Td
-(1272   // initialize I/O devices, let them enable interrupts) 36.12 Tj
-0 -34.0364 Td
-(1273   console_init\(\);) 13.244 Tj
-0 -35.3454 Td
-(1274   ide_init\(\);) 10.836 Tj
-0 -36.6545 Td
-(1275 ) 3.01 Tj
-0 -37.9636 Td
-(1276   // start other CPUs) 15.652 Tj
-0 -39.2727 Td
-(1277   mp_startthem\(\);) 13.244 Tj
-0 -40.5818 Td
-(1278 ) 3.01 Tj
-0 -41.8909 Td
-(1279   // turn on timer) 13.846 Tj
-0 -43.2 Td
-(1280   if\(ismp\)) 9.03 Tj
-0 -44.5091 Td
-(1281     lapic_timerinit\(\);) 16.254 Tj
-0 -45.8182 Td
-(1282   else) 6.622 Tj
-0 -47.1272 Td
-(1283     pit8253_timerinit\(\);) 17.458 Tj
-0 -48.4363 Td
-(1284 ) 3.01 Tj
-0 -49.7454 Td
-(1285   // enable interrupts on the local APIC) 27.09 Tj
-0 -51.0545 Td
-(1286   lapic_enableintr\(\);) 15.652 Tj
-0 -52.3636 Td
-(1287 ) 3.01 Tj
-0 -53.6727 Td
-(1288   // enable interrupts on this processor.) 27.692 Tj
-0 -54.9818 Td
-(1289   cpus[cpu\(\)].nlock--;) 16.254 Tj
-0 -56.2909 Td
-(1290   sti\(\);) 7.826 Tj
-0 -57.6 Td
-(1291 ) 3.01 Tj
-0 -58.9091 Td
-(1292   scheduler\(\);) 11.438 Tj
-0 -60.2181 Td
-(1293 }) 3.612 Tj
-0 -61.5272 Td
-(1294 ) 3.01 Tj
-0 -62.8363 Td
-(1295 ) 3.01 Tj
-0 -64.1454 Td
-(1296 ) 3.01 Tj
-0 -65.4545 Td
-(1297 ) 3.01 Tj
-0 -66.7636 Td
-(1298 ) 3.01 Tj
-0 -68.0727 Td
-(1299 ) 3.01 Tj
-0 -72 Td
-(Sheet 12) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/main.c  Page 2) 161.635 Tj
+0 -28.4801 Td
+(1250   // enable interrupts on this processor.) 200.952 Tj
+0 -37.9735 Td
+(1251   cpus[cpu\(\)].nlock--;) 117.95 Tj
+0 -47.4668 Td
+(1252   sti\(\);) 56.7907 Tj
+0 -56.9602 Td
+(1253 ) 21.8426 Tj
+0 -66.4535 Td
+(1254   scheduler\(\);) 83.0018 Tj
+0 -75.9469 Td
+(1255 }) 26.2111 Tj
+0 -85.4403 Td
+(1256 ) 21.8426 Tj
+0 -94.9336 Td
+(1257 // Additional processors start here.) 179.109 Tj
+0 -104.427 Td
+(1258 static void) 69.8962 Tj
+0 -113.92 Td
+(1259 mpmain\(void\)) 74.2647 Tj
+0 -123.414 Td
+(1260 {) 26.2111 Tj
+0 -132.907 Td
+(1261   cprintf\("cpu%d: starting\\n", cpu\(\)\);) 187.846 Tj
+0 -142.4 Td
+(1262   idtinit\(\);) 74.2647 Tj
+0 -151.894 Td
+(1263   lapic_init\(cpu\(\)\);) 109.213 Tj
+0 -161.387 Td
+(1264   setupsegs\(0\);) 87.3703 Tj
+0 -170.88 Td
+(1265   cpuid\(0, 0, 0, 0, 0\);  // memory barrier) 205.32 Tj
+0 -180.374 Td
+(1266   cpus[cpu\(\)].booted = 1;) 131.055 Tj
+0 -189.867 Td
+(1267 ) 21.8426 Tj
+0 -199.361 Td
+(1268   // Enable interrupts on this processor.) 200.952 Tj
+0 -208.854 Td
+(1269   cpus[cpu\(\)].nlock--;) 117.95 Tj
+0 -218.347 Td
+(1270   sti\(\);) 56.7907 Tj
+0 -227.841 Td
+(1271 ) 21.8426 Tj
+0 -237.334 Td
+(1272   scheduler\(\);) 83.0018 Tj
+0 -246.827 Td
+(1273 }) 26.2111 Tj
+0 -256.321 Td
+(1274 ) 21.8426 Tj
+0 -265.814 Td
+(1275 static void) 69.8962 Tj
+0 -275.307 Td
+(1276 bootothers\(void\)) 91.7388 Tj
+0 -284.801 Td
+(1277 {) 26.2111 Tj
+0 -294.294 Td
+(1278   extern uchar _binary_bootother_start[], _binary_bootothe\
+r_size[];) 314.533 Tj
+0 -303.788 Td
+(1279   uchar *code;) 83.0018 Tj
+0 -313.281 Td
+(1280   struct cpu *c;) 91.7388 Tj
+0 -322.774 Td
+(1281 ) 21.8426 Tj
+0 -332.268 Td
+(1282   // Write bootstrap code to unused memory at 0x7000.) 253.374 Tj
+0 -341.761 Td
+(1283   code = \(uchar*\)0x7000;) 126.687 Tj
+0 -351.254 Td
+(1284   memmove\(code, _binary_bootother_start, \(uint\)_binary_\
+bootother_size\);) 332.007 Tj
+0 -360.748 Td
+(1285 ) 21.8426 Tj
+0 -370.241 Td
+(1286   for\(c = cpus; c < cpus+ncpu; c++\){) 179.109 Tj
+0 -379.734 Td
+(1287     if\(c == cpus+cpu\(\)\)  // We've started already.) 240.268 Tj
+0 -389.228 Td
+(1288       continue;) 87.3703 Tj
+0 -398.721 Td
+(1289 ) 21.8426 Tj
+0 -408.214 Td
+(1290     // Fill in %esp, %eip and start code on cpu.) 231.531 Tj
+0 -417.708 Td
+(1291     *\(void**\)\(code-4\) = c->mpstack + MPSTACK;) 218.426 Tj
+0 -427.201 Td
+(1292     *\(void**\)\(code-8\) = mpmain;) 157.267 Tj
+0 -436.695 Td
+(1293     lapic_startap\(c->apicid, \(uint\)code\);) 200.952 Tj
+0 -446.188 Td
+(1294 ) 21.8426 Tj
+0 -455.681 Td
+(1295     // Wait for cpu to get through bootstrap.) 218.426 Tj
+0 -465.175 Td
+(1296     while\(c->booted == 0\)) 131.055 Tj
+0 -474.668 Td
+(1297       ;) 52.4222 Tj
+0 -484.161 Td
+(1298   }) 34.9481 Tj
+0 -493.655 Td
+(1299 }) 26.2111 Tj
+0 -522.135 Td
+(Sheet 12) 34.9481 Tj
 Q
 Q
 Q
@@ -6744,7 +7144,10 @@ pdfEndPage
 %%Page: 20 20
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -6752,241 +7155,255 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/main.c  Page 3) 22.274 Tj
-0 -3.92728 Td
-(1300 // Additional processors start here.) 24.682 Tj
-0 -5.23637 Td
-(1301 void) 5.418 Tj
-0 -6.54546 Td
-(1302 mpmain\(void\)) 10.234 Tj
-0 -7.85455 Td
-(1303 {) 3.612 Tj
-0 -9.16364 Td
-(1304   cprintf\("cpu%d: starting\\n", cpu\(\)\);) 25.886 Tj
-0 -10.4727 Td
-(1305   idtinit\(\); // CPU's idt) 18.06 Tj
-0 -11.7818 Td
-(1306   if\(cpu\(\) == 0\)) 12.642 Tj
-0 -13.0909 Td
-(1307     panic\("mpmain on cpu 0"\);) 20.468 Tj
-0 -14.4 Td
-(1308   lapic_init\(cpu\(\)\);) 15.05 Tj
-0 -15.7091 Td
-(1309   lapic_timerinit\(\);) 15.05 Tj
-0 -17.0182 Td
-(1310   lapic_enableintr\(\);) 15.652 Tj
-0 -18.3273 Td
-(1311 ) 3.01 Tj
-0 -19.6364 Td
-(1312   // make sure there's a TSS) 19.866 Tj
-0 -20.9455 Td
-(1313   setupsegs\(0\);) 12.04 Tj
-0 -22.2545 Td
-(1314 ) 3.01 Tj
-0 -23.5636 Td
-(1315   cpuid\(0, 0, 0, 0, 0\);  // memory barrier) 28.294 Tj
-0 -24.8727 Td
-(1316   cpus[cpu\(\)].booted = 1;) 18.06 Tj
-0 -26.1818 Td
-(1317 ) 3.01 Tj
-0 -27.4909 Td
-(1318   // Enable interrupts on this processor.) 27.692 Tj
-0 -28.8 Td
-(1319   cpus[cpu\(\)].nlock--;) 16.254 Tj
-0 -30.1091 Td
-(1320   sti\(\);) 7.826 Tj
-0 -31.4182 Td
-(1321 ) 3.01 Tj
-0 -32.7273 Td
-(1322   scheduler\(\);) 11.438 Tj
-0 -34.0364 Td
-(1323 }) 3.612 Tj
-0 -35.3454 Td
-(1324 ) 3.01 Tj
-0 -36.6545 Td
-(1325 // proc[0] starts here, called by scheduler\(\) in the ordinary way.) 42.742 Tj
-0 -37.9636 Td
-(1326 void) 5.418 Tj
-0 -39.2727 Td
-(1327 process0\(\)) 9.03 Tj
-0 -40.5818 Td
-(1328 {) 3.612 Tj
-0 -41.8909 Td
-(1329   struct proc *p0 = &proc[0];) 20.468 Tj
-0 -43.2 Td
-(1330   struct proc *p1;) 13.846 Tj
-0 -44.5091 Td
-(1331   extern struct spinlock proc_table_lock;) 27.692 Tj
-0 -45.8182 Td
-(1332   struct trapframe tf;) 16.254 Tj
-0 -47.1272 Td
-(1333 ) 3.01 Tj
-0 -48.4363 Td
-(1334   release\(&proc_table_lock\);) 19.866 Tj
-0 -49.7454 Td
-(1335 ) 3.01 Tj
-0 -51.0545 Td
-(1336   p0->cwd = iget\(rootdev, 1\);) 20.468 Tj
-0 -52.3636 Td
-(1337   iunlock\(p0->cwd\);) 14.448 Tj
-0 -53.6727 Td
-(1338 ) 3.01 Tj
-0 -54.9818 Td
-(1339   // dummy user memory to make copyproc\(\) happy.) 31.906 Tj
-0 -56.2909 Td
-(1340   // must be big enough to hold the init binary.) 31.906 Tj
-0 -57.6 Td
-(1341   p0->sz = PAGE;) 12.642 Tj
-0 -58.9091 Td
-(1342   p0->mem = kalloc\(p0->sz\);) 19.264 Tj
-0 -60.2181 Td
-(1343 ) 3.01 Tj
-0 -61.5272 Td
-(1344   // fake a trap frame as if a user process had made a system) 39.732 Tj
-0 -62.8363 Td
-(1345   // call, so that copyproc will have a place for the new) 37.324 Tj
-0 -64.1454 Td
-(1346   // process to return to.) 18.662 Tj
-0 -65.4545 Td
-(1347   p0->tf = &tf;) 12.04 Tj
-0 -66.7636 Td
-(1348   memset\(p0->tf, 0, sizeof\(struct trapframe\)\);) 30.702 Tj
-0 -68.0727 Td
-(1349   p0->tf->es = p0->tf->ds = p0->tf->ss = \(SEG_UDATA << 3\) | 3;) 40.334 Tj
-0 -72 Td
-(Sheet 13) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/spinlock.h  Page 1) 179.109 Tj
+0 -28.4801 Td
+(1300 // Mutual exclusion lock.) 131.055 Tj
+0 -37.9735 Td
+(1301 struct spinlock {) 96.1073 Tj
+0 -47.4668 Td
+(1302   uint locked;   // Is the lock held?) 183.478 Tj
+0 -56.9602 Td
+(1303 ) 21.8426 Tj
+0 -66.4535 Td
+(1304   // For debugging:) 104.844 Tj
+0 -75.9469 Td
+(1305   char *name;    // Name of lock.) 166.004 Tj
+0 -85.4403 Td
+(1306   int  cpu;      // The number of the cpu holding the lock\
+.) 279.585 Tj
+0 -94.9336 Td
+(1307   uint pcs[10];  // The call stack \(an array of program c\
+ounters\)) 305.796 Tj
+0 -104.427 Td
+(1308                  // that locked the lock.) 200.952 Tj
+0 -113.92 Td
+(1309 };) 30.5796 Tj
+0 -123.414 Td
+(1310 ) 21.8426 Tj
+0 -132.907 Td
+(1311 ) 21.8426 Tj
+0 -142.4 Td
+(1312 ) 21.8426 Tj
+0 -151.894 Td
+(1313 ) 21.8426 Tj
+0 -161.387 Td
+(1314 ) 21.8426 Tj
+0 -170.88 Td
+(1315 ) 21.8426 Tj
+0 -180.374 Td
+(1316 ) 21.8426 Tj
+0 -189.867 Td
+(1317 ) 21.8426 Tj
+0 -199.361 Td
+(1318 ) 21.8426 Tj
+0 -208.854 Td
+(1319 ) 21.8426 Tj
+0 -218.347 Td
+(1320 ) 21.8426 Tj
+0 -227.841 Td
+(1321 ) 21.8426 Tj
+0 -237.334 Td
+(1322 ) 21.8426 Tj
+0 -246.827 Td
+(1323 ) 21.8426 Tj
+0 -256.321 Td
+(1324 ) 21.8426 Tj
+0 -265.814 Td
+(1325 ) 21.8426 Tj
+0 -275.307 Td
+(1326 ) 21.8426 Tj
+0 -284.801 Td
+(1327 ) 21.8426 Tj
+0 -294.294 Td
+(1328 ) 21.8426 Tj
+0 -303.788 Td
+(1329 ) 21.8426 Tj
+0 -313.281 Td
+(1330 ) 21.8426 Tj
+0 -322.774 Td
+(1331 ) 21.8426 Tj
+0 -332.268 Td
+(1332 ) 21.8426 Tj
+0 -341.761 Td
+(1333 ) 21.8426 Tj
+0 -351.254 Td
+(1334 ) 21.8426 Tj
+0 -360.748 Td
+(1335 ) 21.8426 Tj
+0 -370.241 Td
+(1336 ) 21.8426 Tj
+0 -379.734 Td
+(1337 ) 21.8426 Tj
+0 -389.228 Td
+(1338 ) 21.8426 Tj
+0 -398.721 Td
+(1339 ) 21.8426 Tj
+0 -408.214 Td
+(1340 ) 21.8426 Tj
+0 -417.708 Td
+(1341 ) 21.8426 Tj
+0 -427.201 Td
+(1342 ) 21.8426 Tj
+0 -436.695 Td
+(1343 ) 21.8426 Tj
+0 -446.188 Td
+(1344 ) 21.8426 Tj
+0 -455.681 Td
+(1345 ) 21.8426 Tj
+0 -465.175 Td
+(1346 ) 21.8426 Tj
+0 -474.668 Td
+(1347 ) 21.8426 Tj
+0 -484.161 Td
+(1348 ) 21.8426 Tj
+0 -493.655 Td
+(1349 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/main.c  Page 4) 22.274 Tj
-0 -3.92728 Td
-(1350   p0->tf->cs = \(SEG_UCODE << 3\) | 3;) 24.682 Tj
-0 -5.23637 Td
-(1351   p0->tf->eflags = FL_IF;) 18.06 Tj
-0 -6.54546 Td
-(1352   p0->tf->esp = p0->sz;) 16.856 Tj
-0 -7.85455 Td
-(1353 ) 3.01 Tj
-0 -9.16364 Td
-(1354   p1 = copyproc\(p0\);) 15.05 Tj
-0 -10.4727 Td
-(1355 ) 3.01 Tj
-0 -11.7818 Td
-(1356   load_icode\(p1, _binary__init_start, \(uint\) _binary__init_size\);) 42.14 Tj
-0 -13.0909 Td
-(1357   p1->state = RUNNABLE;) 16.856 Tj
-0 -14.4 Td
-(1358 ) 3.01 Tj
-0 -15.7091 Td
-(1359   proc_wait\(\);) 11.438 Tj
-0 -17.0182 Td
-(1360   panic\("init exited"\);) 16.856 Tj
-0 -18.3273 Td
-(1361 }) 3.612 Tj
-0 -19.6364 Td
-(1362 ) 3.01 Tj
-0 -20.9455 Td
-(1363 void) 5.418 Tj
-0 -22.2545 Td
-(1364 load_icode\(struct proc *p, uchar *binary, uint size\)) 34.314 Tj
-0 -23.5636 Td
-(1365 {) 3.612 Tj
-0 -24.8727 Td
-(1366   int i;) 7.826 Tj
-0 -26.1818 Td
-(1367   struct elfhdr *elf;) 15.652 Tj
-0 -27.4909 Td
-(1368   struct proghdr *ph;) 15.652 Tj
-0 -28.8 Td
-(1369 ) 3.01 Tj
-0 -30.1091 Td
-(1370   elf = \(struct elfhdr*\) binary;) 22.274 Tj
-0 -31.4182 Td
-(1371   if\(elf->magic != ELF_MAGIC\)) 20.468 Tj
-0 -32.7273 Td
-(1372     panic\("load_icode: not an ELF binary"\);) 28.896 Tj
-0 -34.0364 Td
-(1373 ) 3.01 Tj
-0 -35.3454 Td
-(1374   p->tf->eip = elf->entry;) 18.662 Tj
-0 -36.6545 Td
-(1375 ) 3.01 Tj
-0 -37.9636 Td
-(1376   // Map and load segments as directed.) 26.488 Tj
-0 -39.2727 Td
-(1377   ph = \(struct proghdr*\) \(binary + elf->phoff\);) 31.304 Tj
-0 -40.5818 Td
-(1378   for\(i = 0; i < elf->phnum; i++, ph++\) {) 27.692 Tj
-0 -41.8909 Td
-(1379     if\(ph->type != ELF_PROG_LOAD\)) 22.876 Tj
-0 -43.2 Td
-(1380       continue;) 12.04 Tj
-0 -44.5091 Td
-(1381     if\(ph->va + ph->memsz < ph->va\)) 24.08 Tj
-0 -45.8182 Td
-(1382       panic\("load_icode: overflow in proghdr"\);) 31.304 Tj
-0 -47.1272 Td
-(1383     if\(ph->va + ph->memsz >= p->sz\)) 24.08 Tj
-0 -48.4363 Td
-(1384       panic\("load_icode: icode too large"\);) 28.896 Tj
-0 -49.7454 Td
-(1385 ) 3.01 Tj
-0 -51.0545 Td
-(1386     // Load/clear the segment) 20.468 Tj
-0 -52.3636 Td
-(1387     memmove\(p->mem + ph->va, binary + ph->offset, ph->filesz\);) 40.334 Tj
-0 -53.6727 Td
-(1388     memset\(p->mem + ph->va + ph->filesz, 0, ph->memsz - ph->filesz\);) 43.946 Tj
-0 -54.9818 Td
-(1389   }) 4.816 Tj
-0 -56.2909 Td
-(1390 }) 3.612 Tj
-0 -57.6 Td
-(1391 ) 3.01 Tj
-0 -58.9091 Td
-(1392 ) 3.01 Tj
-0 -60.2181 Td
-(1393 ) 3.01 Tj
-0 -61.5272 Td
-(1394 ) 3.01 Tj
-0 -62.8363 Td
-(1395 ) 3.01 Tj
-0 -64.1454 Td
-(1396 ) 3.01 Tj
-0 -65.4545 Td
-(1397 ) 3.01 Tj
-0 -66.7636 Td
-(1398 ) 3.01 Tj
-0 -68.0727 Td
-(1399 ) 3.01 Tj
-0 -72 Td
-(Sheet 13) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/spinlock.h  Page 2) 179.109 Tj
+0 -28.4801 Td
+(1350 // Blank page.) 83.0018 Tj
+0 -37.9735 Td
+(1351 ) 21.8426 Tj
+0 -47.4668 Td
+(1352 ) 21.8426 Tj
+0 -56.9602 Td
+(1353 ) 21.8426 Tj
+0 -66.4535 Td
+(1354 ) 21.8426 Tj
+0 -75.9469 Td
+(1355 ) 21.8426 Tj
+0 -85.4403 Td
+(1356 ) 21.8426 Tj
+0 -94.9336 Td
+(1357 ) 21.8426 Tj
+0 -104.427 Td
+(1358 ) 21.8426 Tj
+0 -113.92 Td
+(1359 ) 21.8426 Tj
+0 -123.414 Td
+(1360 ) 21.8426 Tj
+0 -132.907 Td
+(1361 ) 21.8426 Tj
+0 -142.4 Td
+(1362 ) 21.8426 Tj
+0 -151.894 Td
+(1363 ) 21.8426 Tj
+0 -161.387 Td
+(1364 ) 21.8426 Tj
+0 -170.88 Td
+(1365 ) 21.8426 Tj
+0 -180.374 Td
+(1366 ) 21.8426 Tj
+0 -189.867 Td
+(1367 ) 21.8426 Tj
+0 -199.361 Td
+(1368 ) 21.8426 Tj
+0 -208.854 Td
+(1369 ) 21.8426 Tj
+0 -218.347 Td
+(1370 ) 21.8426 Tj
+0 -227.841 Td
+(1371 ) 21.8426 Tj
+0 -237.334 Td
+(1372 ) 21.8426 Tj
+0 -246.827 Td
+(1373 ) 21.8426 Tj
+0 -256.321 Td
+(1374 ) 21.8426 Tj
+0 -265.814 Td
+(1375 ) 21.8426 Tj
+0 -275.307 Td
+(1376 ) 21.8426 Tj
+0 -284.801 Td
+(1377 ) 21.8426 Tj
+0 -294.294 Td
+(1378 ) 21.8426 Tj
+0 -303.788 Td
+(1379 ) 21.8426 Tj
+0 -313.281 Td
+(1380 ) 21.8426 Tj
+0 -322.774 Td
+(1381 ) 21.8426 Tj
+0 -332.268 Td
+(1382 ) 21.8426 Tj
+0 -341.761 Td
+(1383 ) 21.8426 Tj
+0 -351.254 Td
+(1384 ) 21.8426 Tj
+0 -360.748 Td
+(1385 ) 21.8426 Tj
+0 -370.241 Td
+(1386 ) 21.8426 Tj
+0 -379.734 Td
+(1387 ) 21.8426 Tj
+0 -389.228 Td
+(1388 ) 21.8426 Tj
+0 -398.721 Td
+(1389 ) 21.8426 Tj
+0 -408.214 Td
+(1390 ) 21.8426 Tj
+0 -417.708 Td
+(1391 ) 21.8426 Tj
+0 -427.201 Td
+(1392 ) 21.8426 Tj
+0 -436.695 Td
+(1393 ) 21.8426 Tj
+0 -446.188 Td
+(1394 ) 21.8426 Tj
+0 -455.681 Td
+(1395 ) 21.8426 Tj
+0 -465.175 Td
+(1396 ) 21.8426 Tj
+0 -474.668 Td
+(1397 ) 21.8426 Tj
+0 -484.161 Td
+(1398 ) 21.8426 Tj
+0 -493.655 Td
+(1399 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 13) 34.9481 Tj
 Q
 Q
 Q
@@ -6998,6 +7415,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -7005,241 +7425,259 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/mp.c  Page 1) 21.07 Tj
-0 -3.92728 Td
-(1400 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(1401 #include "mp.h") 12.04 Tj
-0 -6.54546 Td
-(1402 #include "defs.h") 13.244 Tj
-0 -7.85455 Td
-(1403 #include "param.h") 13.846 Tj
-0 -9.16364 Td
-(1404 #include "x86.h") 12.642 Tj
-0 -10.4727 Td
-(1405 #include "traps.h") 13.846 Tj
-0 -11.7818 Td
-(1406 #include "mmu.h") 12.642 Tj
-0 -13.0909 Td
-(1407 #include "proc.h") 13.244 Tj
-0 -14.4 Td
-(1408 ) 3.01 Tj
-0 -15.7091 Td
-(1409 static char *buses[] = {) 17.458 Tj
-0 -17.0182 Td
-(1410   "CBUSI ",) 9.632 Tj
-0 -18.3273 Td
-(1411   "CBUSII",) 9.632 Tj
-0 -19.6364 Td
-(1412   "EISA  ",) 9.632 Tj
-0 -20.9455 Td
-(1413   "FUTURE",) 9.632 Tj
-0 -22.2545 Td
-(1414   "INTERN",) 9.632 Tj
-0 -23.5636 Td
-(1415   "ISA   ",) 9.632 Tj
-0 -24.8727 Td
-(1416   "MBI   ",) 9.632 Tj
-0 -26.1818 Td
-(1417   "MBII  ",) 9.632 Tj
-0 -27.4909 Td
-(1418   "MCA   ",) 9.632 Tj
-0 -28.8 Td
-(1419   "MPI   ",) 9.632 Tj
-0 -30.1091 Td
-(1420   "MPSA  ",) 9.632 Tj
-0 -31.4182 Td
-(1421   "NUBUS ",) 9.632 Tj
-0 -32.7273 Td
-(1422   "PCI   ",) 9.632 Tj
-0 -34.0364 Td
-(1423   "PCMCIA",) 9.632 Tj
-0 -35.3454 Td
-(1424   "TC    ",) 9.632 Tj
-0 -36.6545 Td
-(1425   "VL    ",) 9.632 Tj
-0 -37.9636 Td
-(1426   "VME   ",) 9.632 Tj
-0 -39.2727 Td
-(1427   "XPRESS",) 9.632 Tj
-0 -40.5818 Td
-(1428   0,) 5.418 Tj
-0 -41.8909 Td
-(1429 };) 4.214 Tj
-0 -43.2 Td
-(1430 ) 3.01 Tj
-0 -44.5091 Td
-(1431 struct cpu cpus[NCPU];) 16.254 Tj
-0 -45.8182 Td
-(1432 int ismp;) 8.428 Tj
-0 -47.1272 Td
-(1433 int ncpu;) 8.428 Tj
-0 -48.4363 Td
-(1434 uchar ioapic_id;) 12.642 Tj
-0 -49.7454 Td
-(1435 ) 3.01 Tj
-0 -51.0545 Td
-(1436 static struct cpu *bcpu;) 17.458 Tj
-0 -52.3636 Td
-(1437 static struct mp *mp;  // The MP floating point structure) 37.324 Tj
-0 -53.6727 Td
-(1438 ) 3.01 Tj
-0 -54.9818 Td
-(1439 static struct mp*) 13.244 Tj
-0 -56.2909 Td
-(1440 mp_scan\(uchar *addr, int len\)) 20.468 Tj
-0 -57.6 Td
-(1441 {) 3.612 Tj
-0 -58.9091 Td
-(1442   uchar *e, *p, sum;) 15.05 Tj
-0 -60.2181 Td
-(1443   int i;) 7.826 Tj
-0 -61.5272 Td
-(1444 ) 3.01 Tj
-0 -62.8363 Td
-(1445   e = addr+len;) 12.04 Tj
-0 -64.1454 Td
-(1446   for\(p = addr; p < e; p += sizeof\(struct mp\)\){) 31.304 Tj
-0 -65.4545 Td
-(1447     if\(memcmp\(p, "_MP_", 4\)\)) 19.866 Tj
-0 -66.7636 Td
-(1448       continue;) 12.04 Tj
-0 -68.0727 Td
-(1449     sum = 0;) 10.234 Tj
-0 -72 Td
-(Sheet 14) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/spinlock.c  Page 1) 179.109 Tj
+0 -28.4801 Td
+(1400 // Mutual exclusion spin locks.) 157.267 Tj
+0 -37.9735 Td
+(1401 ) 21.8426 Tj
+0 -47.4668 Td
+(1402 #include "types.h") 100.476 Tj
+0 -56.9602 Td
+(1403 #include "defs.h") 96.1073 Tj
+0 -66.4535 Td
+(1404 #include "param.h") 100.476 Tj
+0 -75.9469 Td
+(1405 #include "x86.h") 91.7388 Tj
+0 -85.4403 Td
+(1406 #include "mmu.h") 91.7388 Tj
+0 -94.9336 Td
+(1407 #include "proc.h") 96.1073 Tj
+0 -104.427 Td
+(1408 #include "spinlock.h") 113.581 Tj
+0 -113.92 Td
+(1409 ) 21.8426 Tj
+0 -123.414 Td
+(1410 extern int use_console_lock;) 144.161 Tj
+0 -132.907 Td
+(1411 ) 21.8426 Tj
+0 -142.4 Td
+(1412 void) 39.3166 Tj
+0 -151.894 Td
+(1413 initlock\(struct spinlock *lock, char *name\)) 209.689 Tj
+0 -161.387 Td
+(1414 {) 26.2111 Tj
+0 -170.88 Td
+(1415   lock->name = name;) 109.213 Tj
+0 -180.374 Td
+(1416   lock->locked = 0;) 104.844 Tj
+0 -189.867 Td
+(1417   lock->cpu = 0xffffffff;) 131.055 Tj
+0 -199.361 Td
+(1418 }) 26.2111 Tj
+0 -208.854 Td
+(1419 ) 21.8426 Tj
+0 -218.347 Td
+(1420 // Acquire the lock.) 109.213 Tj
+0 -227.841 Td
+(1421 // Loops \(spins\) until the lock is acquired.) 214.057 Tj
+0 -237.334 Td
+(1422 // \(Because contention is handled by spinning,) 222.794 Tj
+0 -246.827 Td
+(1423 // must not go to sleep holding any locks.\)) 209.689 Tj
+0 -256.321 Td
+(1424 void) 39.3166 Tj
+0 -265.814 Td
+(1425 acquire\(struct spinlock *lock\)) 152.898 Tj
+0 -275.307 Td
+(1426 {) 26.2111 Tj
+0 -284.801 Td
+(1427   if\(holding\(lock\)\)) 104.844 Tj
+0 -294.294 Td
+(1428     panic\("acquire"\);) 113.581 Tj
+0 -303.788 Td
+(1429 ) 21.8426 Tj
+0 -313.281 Td
+(1430   if\(cpus[cpu\(\)].nlock == 0\)) 144.161 Tj
+0 -322.774 Td
+(1431     cli\(\);) 65.5277 Tj
+0 -332.268 Td
+(1432   cpus[cpu\(\)].nlock++;) 117.95 Tj
+0 -341.761 Td
+(1433 ) 21.8426 Tj
+0 -351.254 Td
+(1434   while\(cmpxchg\(0, 1, &lock->locked\) == 1\)) 205.32 Tj
+0 -360.748 Td
+(1435     ;) 43.6851 Tj
+0 -370.241 Td
+(1436 ) 21.8426 Tj
+0 -379.734 Td
+(1437   // Serialize instructions: now that lock is acquired, ma\
+ke sure) 305.796 Tj
+0 -389.228 Td
+(1438   // we wait for all pending writes from other processors.) 275.216 Tj
+0 -398.721 Td
+(1439   cpuid\(0, 0, 0, 0, 0\);  // memory barrier \(see Ch 7, I\
+A-32 manual vol 3\)) 340.744 Tj
+0 -408.214 Td
+(1440 ) 21.8426 Tj
+0 -417.708 Td
+(1441   // Record info about lock acquisition for debugging.) 257.742 Tj
+0 -427.201 Td
+(1442   // The +10 is only so that we can tell the difference) 262.111 Tj
+0 -436.695 Td
+(1443   // between forgetting to initialize lock->cpu) 227.163 Tj
+0 -446.188 Td
+(1444   // and holding a lock on cpu 0.) 166.004 Tj
+0 -455.681 Td
+(1445   lock->cpu = cpu\(\) + 10;) 131.055 Tj
+0 -465.175 Td
+(1446   getcallerpcs\(&lock, lock->pcs\);) 166.004 Tj
+0 -474.668 Td
+(1447 }) 26.2111 Tj
+0 -484.161 Td
+(1448 ) 21.8426 Tj
+0 -493.655 Td
+(1449 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/mp.c  Page 2) 21.07 Tj
-0 -3.92728 Td
-(1450     for\(i = 0; i < sizeof\(struct mp\); i++\)) 28.294 Tj
-0 -5.23637 Td
-(1451       sum += p[i];) 13.846 Tj
-0 -6.54546 Td
-(1452     if\(sum == 0\)) 12.642 Tj
-0 -7.85455 Td
-(1453       return \(struct mp*\)p;) 19.264 Tj
-0 -9.16364 Td
-(1454   }) 4.816 Tj
-0 -10.4727 Td
-(1455   return 0;) 9.632 Tj
-0 -11.7818 Td
-(1456 }) 3.612 Tj
-0 -13.0909 Td
-(1457 ) 3.01 Tj
-0 -14.4 Td
-(1458 // Search for the MP Floating Pointer Structure, which according to the) 45.752 Tj
-0 -15.7091 Td
-(1459 // spec is in one of the following three locations:) 33.712 Tj
-0 -17.0182 Td
-(1460 // 1\) in the first KB of the EBDA;) 23.478 Tj
-0 -18.3273 Td
-(1461 // 2\) in the last KB of system base memory;) 28.896 Tj
-0 -19.6364 Td
-(1462 // 3\) in the BIOS ROM between 0xE0000 and 0xFFFFF.) 33.11 Tj
-0 -20.9455 Td
-(1463 static struct mp*) 13.244 Tj
-0 -22.2545 Td
-(1464 mp_search\(void\)) 12.04 Tj
-0 -23.5636 Td
-(1465 {) 3.612 Tj
-0 -24.8727 Td
-(1466   uchar *bda;) 10.836 Tj
-0 -26.1818 Td
-(1467   uint p;) 8.428 Tj
-0 -27.4909 Td
-(1468   struct mp *mp;) 12.642 Tj
-0 -28.8 Td
-(1469 ) 3.01 Tj
-0 -30.1091 Td
-(1470   bda = \(uchar*\) 0x400;) 16.856 Tj
-0 -31.4182 Td
-(1471   if\(\(p = \(bda[0x0F]<<8\)|bda[0x0E]\)\){) 25.284 Tj
-0 -32.7273 Td
-(1472     if\(\(mp = mp_scan\(\(uchar*\) p, 1024\)\)\)) 27.09 Tj
-0 -34.0364 Td
-(1473       return mp;) 12.642 Tj
-0 -35.3454 Td
-(1474   }) 4.816 Tj
-0 -36.6545 Td
-(1475   else{) 7.224 Tj
-0 -37.9636 Td
-(1476     p = \(\(bda[0x14]<<8\)|bda[0x13]\)*1024;) 27.09 Tj
-0 -39.2727 Td
-(1477     if\(\(mp = mp_scan\(\(uchar*\)p-1024, 1024\)\)\)) 29.498 Tj
-0 -40.5818 Td
-(1478       return mp;) 12.642 Tj
-0 -41.8909 Td
-(1479   }) 4.816 Tj
-0 -43.2 Td
-(1480   return mp_scan\(\(uchar*\)0xF0000, 0x10000\);) 28.896 Tj
-0 -44.5091 Td
-(1481 }) 3.612 Tj
-0 -45.8182 Td
-(1482 ) 3.01 Tj
-0 -47.1272 Td
-(1483 // Search for an MP configuration table. For now,) 32.508 Tj
-0 -48.4363 Td
-(1484 // don't accept the default configurations \(physaddr == 0\).) 38.528 Tj
-0 -49.7454 Td
-(1485 // Check for correct signature, calculate the checksum and,) 38.528 Tj
-0 -51.0545 Td
-(1486 // if correct, check the version.) 22.876 Tj
-0 -52.3636 Td
-(1487 // To do: check extended table checksum.) 27.09 Tj
-0 -53.6727 Td
-(1488 static int) 9.03 Tj
-0 -54.9818 Td
-(1489 mp_detect\(void\)) 12.04 Tj
-0 -56.2909 Td
-(1490 {) 3.612 Tj
-0 -57.6 Td
-(1491   struct mpctb *pcmp;) 15.652 Tj
-0 -58.9091 Td
-(1492   uchar *p, sum;) 12.642 Tj
-0 -60.2181 Td
-(1493   uint length;) 11.438 Tj
-0 -61.5272 Td
-(1494 ) 3.01 Tj
-0 -62.8363 Td
-(1495   if\(\(mp = mp_search\(\)\) == 0 || mp->physaddr == 0\)) 33.11 Tj
-0 -64.1454 Td
-(1496     return 1;) 10.836 Tj
-0 -65.4545 Td
-(1497 ) 3.01 Tj
-0 -66.7636 Td
-(1498 ) 3.01 Tj
-0 -68.0727 Td
-(1499 ) 3.01 Tj
-0 -72 Td
-(Sheet 14) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/spinlock.c  Page 2) 179.109 Tj
+0 -28.4801 Td
+(1450 // Release the lock.) 109.213 Tj
+0 -37.9735 Td
+(1451 void) 39.3166 Tj
+0 -47.4668 Td
+(1452 release\(struct spinlock *lock\)) 152.898 Tj
+0 -56.9602 Td
+(1453 {) 26.2111 Tj
+0 -66.4535 Td
+(1454   if\(!holding\(lock\)\)) 109.213 Tj
+0 -75.9469 Td
+(1455     panic\("release"\);) 113.581 Tj
+0 -85.4403 Td
+(1456 ) 21.8426 Tj
+0 -94.9336 Td
+(1457   lock->pcs[0] = 0;) 104.844 Tj
+0 -104.427 Td
+(1458   lock->cpu = 0xffffffff;) 131.055 Tj
+0 -113.92 Td
+(1459 ) 21.8426 Tj
+0 -123.414 Td
+(1460   // Serialize instructions: before unlocking the lock, ma\
+ke sure) 305.796 Tj
+0 -132.907 Td
+(1461   // to flush any pending memory writes from this processo\
+r.) 283.953 Tj
+0 -142.4 Td
+(1462   cpuid\(0, 0, 0, 0, 0\);  // memory barrier \(see Ch 7, I\
+A-32 manual vol 3\)) 340.744 Tj
+0 -151.894 Td
+(1463 ) 21.8426 Tj
+0 -161.387 Td
+(1464   lock->locked = 0;) 104.844 Tj
+0 -170.88 Td
+(1465   if\(--cpus[cpu\(\)].nlock == 0\)) 152.898 Tj
+0 -180.374 Td
+(1466     sti\(\);) 65.5277 Tj
+0 -189.867 Td
+(1467 }) 26.2111 Tj
+0 -199.361 Td
+(1468 ) 21.8426 Tj
+0 -208.854 Td
+(1469 // Record the current call stack in pcs[] by following the\
+ %ebp chain.) 327.639 Tj
+0 -218.347 Td
+(1470 void) 39.3166 Tj
+0 -227.841 Td
+(1471 getcallerpcs\(void *v, uint pcs[]\)) 166.004 Tj
+0 -237.334 Td
+(1472 {) 26.2111 Tj
+0 -246.827 Td
+(1473   uint *ebp;) 74.2647 Tj
+0 -256.321 Td
+(1474   int i;) 56.7907 Tj
+0 -265.814 Td
+(1475 ) 21.8426 Tj
+0 -275.307 Td
+(1476   ebp = \(uint*\)v - 2;) 113.581 Tj
+0 -284.801 Td
+(1477   for\(i = 0; i < 10; i++\){) 135.424 Tj
+0 -294.294 Td
+(1478     if\(ebp == 0 || ebp == \(uint*\)0xffffffff\)) 214.057 Tj
+0 -303.788 Td
+(1479       break;) 74.2647 Tj
+0 -313.281 Td
+(1480     pcs[i] = ebp[1];     // saved %eip) 187.846 Tj
+0 -322.774 Td
+(1481     ebp = \(uint*\)ebp[0]; // saved %ebp) 187.846 Tj
+0 -332.268 Td
+(1482   }) 34.9481 Tj
+0 -341.761 Td
+(1483   for\(; i < 10; i++\)) 109.213 Tj
+0 -351.254 Td
+(1484     pcs[i] = 0;) 87.3703 Tj
+0 -360.748 Td
+(1485 }) 26.2111 Tj
+0 -370.241 Td
+(1486 ) 21.8426 Tj
+0 -379.734 Td
+(1487 // Check whether this cpu is holding the lock.) 222.794 Tj
+0 -389.228 Td
+(1488 int) 34.9481 Tj
+0 -398.721 Td
+(1489 holding\(struct spinlock *lock\)) 152.898 Tj
+0 -408.214 Td
+(1490 {) 26.2111 Tj
+0 -417.708 Td
+(1491   return lock->locked && lock->cpu == cpu\(\) + 10;) 235.9 Tj
+0 -427.201 Td
+(1492 }) 26.2111 Tj
+0 -436.695 Td
+(1493 ) 21.8426 Tj
+0 -446.188 Td
+(1494 ) 21.8426 Tj
+0 -455.681 Td
+(1495 ) 21.8426 Tj
+0 -465.175 Td
+(1496 ) 21.8426 Tj
+0 -474.668 Td
+(1497 ) 21.8426 Tj
+0 -484.161 Td
+(1498 ) 21.8426 Tj
+0 -493.655 Td
+(1499 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 14) 34.9481 Tj
 Q
 Q
 Q
@@ -7250,7 +7688,10 @@ pdfEndPage
 %%Page: 22 22
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -7258,241 +7699,268 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/mp.c  Page 3) 21.07 Tj
-0 -3.92728 Td
-(1500   pcmp = \(struct mpctb*\) mp->physaddr;) 25.886 Tj
-0 -5.23637 Td
-(1501   if\(memcmp\(pcmp, "PCMP", 4\)\)) 20.468 Tj
-0 -6.54546 Td
-(1502     return 2;) 10.836 Tj
-0 -7.85455 Td
-(1503 ) 3.01 Tj
-0 -9.16364 Td
-(1504   length = pcmp->length;) 17.458 Tj
-0 -10.4727 Td
-(1505   sum = 0;) 9.03 Tj
-0 -11.7818 Td
-(1506   for\(p = \(uchar*\)pcmp; length; length--\)) 27.692 Tj
-0 -13.0909 Td
-(1507     sum += *p++;) 12.642 Tj
-0 -14.4 Td
-(1508 ) 3.01 Tj
-0 -15.7091 Td
-(1509   if\(sum || \(pcmp->version != 1 && pcmp->version != 4\)\)) 36.12 Tj
-0 -17.0182 Td
-(1510     return 3;) 10.836 Tj
-0 -18.3273 Td
-(1511 ) 3.01 Tj
-0 -19.6364 Td
-(1512   return 0;) 9.632 Tj
-0 -20.9455 Td
-(1513 }) 3.612 Tj
-0 -22.2545 Td
-(1514 ) 3.01 Tj
-0 -23.5636 Td
-(1515 void) 5.418 Tj
-0 -24.8727 Td
-(1516 mp_init\(void\)) 10.836 Tj
-0 -26.1818 Td
-(1517 {) 3.612 Tj
-0 -27.4909 Td
-(1518   int r;) 7.826 Tj
-0 -28.8 Td
-(1519   uchar *p, *e;) 12.04 Tj
-0 -30.1091 Td
-(1520   struct mpctb *mpctb;) 16.254 Tj
-0 -31.4182 Td
-(1521   struct mppe *proc;) 15.05 Tj
-0 -32.7273 Td
-(1522   struct mpbe *bus;) 14.448 Tj
-0 -34.0364 Td
-(1523   struct mpioapic *ioapic;) 18.662 Tj
-0 -35.3454 Td
-(1524   struct mpie *intr;) 15.05 Tj
-0 -36.6545 Td
-(1525   int i;) 7.826 Tj
-0 -37.9636 Td
-(1526   uchar byte;) 10.836 Tj
-0 -39.2727 Td
-(1527 ) 3.01 Tj
-0 -40.5818 Td
-(1528   ncpu = 0;) 9.632 Tj
-0 -41.8909 Td
-(1529   if\(\(r = mp_detect\(\)\) != 0\) {) 21.07 Tj
-0 -43.2 Td
-(1530     return;) 9.632 Tj
-0 -44.5091 Td
-(1531   }) 4.816 Tj
-0 -45.8182 Td
-(1532 ) 3.01 Tj
-0 -47.1272 Td
-(1533   ismp = 1;) 9.632 Tj
-0 -48.4363 Td
-(1534 ) 3.01 Tj
-0 -49.7454 Td
-(1535   // Run through the table saving information needed for starting) 42.14 Tj
-0 -51.0545 Td
-(1536   // application processors and initialising any I/O APICs. The table) 44.548 Tj
-0 -52.3636 Td
-(1537   // is guaranteed to be in order such that only one pass is necessary.) 45.752 Tj
-0 -53.6727 Td
-(1538 ) 3.01 Tj
-0 -54.9818 Td
-(1539   mpctb = \(struct mpctb*\) mp->physaddr;) 26.488 Tj
-0 -56.2909 Td
-(1540   lapicaddr = \(uint*\) mpctb->lapicaddr;) 26.488 Tj
-0 -57.6 Td
-(1541   p = \(\(uchar*\)mpctb\)+sizeof\(struct mpctb\);) 28.896 Tj
-0 -58.9091 Td
-(1542   e = \(\(uchar*\)mpctb\)+mpctb->length;) 24.682 Tj
-0 -60.2181 Td
-(1543 ) 3.01 Tj
-0 -61.5272 Td
-(1544   while\(p < e\) {) 12.642 Tj
-0 -62.8363 Td
-(1545     switch\(*p\){) 12.04 Tj
-0 -64.1454 Td
-(1546     case MPPROCESSOR:) 15.652 Tj
-0 -65.4545 Td
-(1547       proc = \(struct mppe*\) p;) 21.07 Tj
-0 -66.7636 Td
-(1548       cpus[ncpu].apicid = proc->apicid;) 26.488 Tj
-0 -68.0727 Td
-(1549       if\(proc->flags & MPBP\) {) 21.07 Tj
-0 -72 Td
-(Sheet 15) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/proc.h  Page 1) 161.635 Tj
+0 -28.4801 Td
+(1500 // Segments in proc->gdt) 126.687 Tj
+0 -37.9735 Td
+(1501 #define SEG_KCODE 1  // kernel code) 174.741 Tj
+0 -47.4668 Td
+(1502 #define SEG_KDATA 2  // kernel data+stack) 200.952 Tj
+0 -56.9602 Td
+(1503 #define SEG_UCODE 3) 104.844 Tj
+0 -66.4535 Td
+(1504 #define SEG_UDATA 4) 104.844 Tj
+0 -75.9469 Td
+(1505 #define SEG_TSS   5  // this process's task state) 235.9 Tj
+0 -85.4403 Td
+(1506 #define NSEGS     6) 104.844 Tj
+0 -94.9336 Td
+(1507 ) 21.8426 Tj
+0 -104.427 Td
+(1508 // Saved registers for kernel context switches.) 227.163 Tj
+0 -113.92 Td
+(1509 // Don't need to save all the %fs etc. segment registers,) 270.848 Tj
+0 -123.414 Td
+(1510 // because they are constant across kernel contexts.) 249.005 Tj
+0 -132.907 Td
+(1511 // Save all the regular registers so we don't need to care) 275.216 Tj
+0 -142.4 Td
+(1512 // which are caller save, but not the return register %eax\
+.) 279.585 Tj
+0 -151.894 Td
+(1513 // \(Not saving %eax just simplifies the switching code.\)) 266.479 Tj
+0 -161.387 Td
+(1514 // The layout of context must match code in swtch.S.) 249.005 Tj
+0 -170.88 Td
+(1515 struct context {) 91.7388 Tj
+0 -180.374 Td
+(1516   int eip;) 65.5277 Tj
+0 -189.867 Td
+(1517   int esp;) 65.5277 Tj
+0 -199.361 Td
+(1518   int ebx;) 65.5277 Tj
+0 -208.854 Td
+(1519   int ecx;) 65.5277 Tj
+0 -218.347 Td
+(1520   int edx;) 65.5277 Tj
+0 -227.841 Td
+(1521   int esi;) 65.5277 Tj
+0 -237.334 Td
+(1522   int edi;) 65.5277 Tj
+0 -246.827 Td
+(1523   int ebp;) 65.5277 Tj
+0 -256.321 Td
+(1524 };) 30.5796 Tj
+0 -265.814 Td
+(1525 ) 21.8426 Tj
+0 -275.307 Td
+(1526 enum proc_state { UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNN\
+ING, ZOMBIE };) 336.376 Tj
+0 -284.801 Td
+(1527 ) 21.8426 Tj
+0 -294.294 Td
+(1528 // Per-process state) 109.213 Tj
+0 -303.788 Td
+(1529 struct proc {) 78.6333 Tj
+0 -313.281 Td
+(1530   char *mem;                // Start of process memory \(k\
+ernel address\)) 332.007 Tj
+0 -322.774 Td
+(1531   uint sz;                  // Size of process memory \(by\
+tes\)) 288.322 Tj
+0 -332.268 Td
+(1532   char *kstack;             // Bottom of kernel stack for \
+this process) 327.639 Tj
+0 -341.761 Td
+(1533   enum proc_state state;    // Process state) 214.057 Tj
+0 -351.254 Td
+(1534   int pid;                  // Process ID) 200.952 Tj
+0 -360.748 Td
+(1535   struct proc *parent;      // Parent process) 218.426 Tj
+0 -370.241 Td
+(1536   void *chan;               // If non-zero, sleeping on ch\
+an) 283.953 Tj
+0 -379.734 Td
+(1537   int killed;               // If non-zero, have been kill\
+ed) 283.953 Tj
+0 -389.228 Td
+(1538   struct file *ofile[NOFILE];  // Open files) 214.057 Tj
+0 -398.721 Td
+(1539   struct inode *cwd;        // Current directory) 231.531 Tj
+0 -408.214 Td
+(1540   struct context context;   // Switch here to run process) 270.848 Tj
+0 -417.708 Td
+(1541   struct trapframe *tf;     // Trap frame for current inte\
+rrupt) 297.059 Tj
+0 -427.201 Td
+(1542   char name[16];            // Process name \(debugging\)) 262.111 Tj
+0 -436.695 Td
+(1543 };) 30.5796 Tj
+0 -446.188 Td
+(1544 ) 21.8426 Tj
+0 -455.681 Td
+(1545 ) 21.8426 Tj
+0 -465.175 Td
+(1546 ) 21.8426 Tj
+0 -474.668 Td
+(1547 ) 21.8426 Tj
+0 -484.161 Td
+(1548 ) 21.8426 Tj
+0 -493.655 Td
+(1549 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/mp.c  Page 4) 21.07 Tj
-0 -3.92728 Td
-(1550         bcpu = &cpus[ncpu];) 19.264 Tj
-0 -5.23637 Td
-(1551       }) 7.224 Tj
-0 -6.54546 Td
-(1552       ncpu++;) 10.836 Tj
-0 -7.85455 Td
-(1553       p += sizeof\(struct mppe\);) 21.672 Tj
-0 -9.16364 Td
-(1554       continue;) 12.04 Tj
-0 -10.4727 Td
-(1555     case MPBUS:) 12.04 Tj
-0 -11.7818 Td
-(1556       bus = \(struct mpbe*\) p;) 20.468 Tj
-0 -13.0909 Td
-(1557       for\(i = 0; buses[i]; i++\){) 22.274 Tj
-0 -14.4 Td
-(1558         if\(strncmp\(buses[i], bus->string, sizeof\(bus->string\)\) == 0\)) 43.946 Tj
-0 -15.7091 Td
-(1559           break;) 12.642 Tj
-0 -17.0182 Td
-(1560       }) 7.224 Tj
-0 -18.3273 Td
-(1561       p += sizeof\(struct mpbe\);) 21.672 Tj
-0 -19.6364 Td
-(1562       continue;) 12.04 Tj
-0 -20.9455 Td
-(1563     case MPIOAPIC:) 13.846 Tj
-0 -22.2545 Td
-(1564       ioapic = \(struct mpioapic*\) p;) 24.682 Tj
-0 -23.5636 Td
-(1565       ioapic_id = ioapic->apicno;) 22.876 Tj
-0 -24.8727 Td
-(1566       p += sizeof\(struct mpioapic\);) 24.08 Tj
-0 -26.1818 Td
-(1567       continue;) 12.04 Tj
-0 -27.4909 Td
-(1568     case MPIOINTR:) 13.846 Tj
-0 -28.8 Td
-(1569       intr = \(struct mpie*\) p;) 21.07 Tj
-0 -30.1091 Td
-(1570       p += sizeof\(struct mpie\);) 21.672 Tj
-0 -31.4182 Td
-(1571       continue;) 12.04 Tj
-0 -32.7273 Td
-(1572     default:) 10.234 Tj
-0 -34.0364 Td
-(1573       cprintf\("mp_init: unknown PCMP type 0x%x \(e-p 0x%x\)\\n", *p, e-p\);) 45.752 Tj
-0 -35.3454 Td
-(1574       while\(p < e\){) 14.448 Tj
-0 -36.6545 Td
-(1575         cprintf\("%uX ", *p\);) 19.866 Tj
-0 -37.9636 Td
-(1576         p++;) 10.234 Tj
-0 -39.2727 Td
-(1577       }) 7.224 Tj
-0 -40.5818 Td
-(1578       break;) 10.234 Tj
-0 -41.8909 Td
-(1579     }) 6.02 Tj
-0 -43.2 Td
-(1580   }) 4.816 Tj
-0 -44.5091 Td
-(1581 ) 3.01 Tj
-0 -45.8182 Td
-(1582   if\(mp->imcrp\) {) 13.244 Tj
-0 -47.1272 Td
-(1583     // It appears that Bochs doesn't support IMCR, so code won't run.) 44.548 Tj
-0 -48.4363 Td
-(1584     outb\(0x22, 0x70\);   // Select IMCR) 25.886 Tj
-0 -49.7454 Td
-(1585     byte = inb\(0x23\);   // Current contents) 28.896 Tj
-0 -51.0545 Td
-(1586     byte |= 0x01;       // Mask external INTR) 30.1 Tj
-0 -52.3636 Td
-(1587     outb\(0x23, byte\);   // Disconnect 8259s/NMI) 31.304 Tj
-0 -53.6727 Td
-(1588   }) 4.816 Tj
-0 -54.9818 Td
-(1589 }) 3.612 Tj
-0 -56.2909 Td
-(1590 ) 3.01 Tj
-0 -57.6 Td
-(1591 ) 3.01 Tj
-0 -58.9091 Td
-(1592 int) 4.816 Tj
-0 -60.2181 Td
-(1593 mp_bcpu\(void\)) 10.836 Tj
-0 -61.5272 Td
-(1594 {) 3.612 Tj
-0 -62.8363 Td
-(1595   if\(ismp\)) 9.03 Tj
-0 -64.1454 Td
-(1596     return bcpu-cpus;) 15.652 Tj
-0 -65.4545 Td
-(1597   return 0;) 9.632 Tj
-0 -66.7636 Td
-(1598 }) 3.612 Tj
-0 -68.0727 Td
-(1599 ) 3.01 Tj
-0 -72 Td
-(Sheet 15) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/proc.h  Page 2) 161.635 Tj
+0 -28.4801 Td
+(1550 // Process memory is laid out contiguously, low addresses \
+first:) 301.427 Tj
+0 -37.9735 Td
+(1551 //   text) 61.1592 Tj
+0 -47.4668 Td
+(1552 //   original data and bss) 135.424 Tj
+0 -56.9602 Td
+(1553 //   fixed-size stack) 113.581 Tj
+0 -66.4535 Td
+(1554 //   expandable heap) 109.213 Tj
+0 -75.9469 Td
+(1555 ) 21.8426 Tj
+0 -85.4403 Td
+(1556 // Arrange that cp point to the struct proc that this) 253.374 Tj
+0 -94.9336 Td
+(1557 // CPU is currently running.  Such preprocessor) 227.163 Tj
+0 -104.427 Td
+(1558 // subterfuge can be confusing, but saves a lot of typing.) 275.216 Tj
+0 -113.92 Td
+(1559 extern struct proc *curproc[NCPU];  // Current \(running\)\
+ process per CPU) 336.376 Tj
+0 -123.414 Td
+(1560 #define cp \(curproc[cpu\(\)]\)  // Current process on thi\
+s CPU) 279.585 Tj
+0 -132.907 Td
+(1561 ) 21.8426 Tj
+0 -142.4 Td
+(1562 ) 21.8426 Tj
+0 -151.894 Td
+(1563 #define MPSTACK 512) 104.844 Tj
+0 -161.387 Td
+(1564 ) 21.8426 Tj
+0 -170.88 Td
+(1565 // Per-CPU state) 91.7388 Tj
+0 -180.374 Td
+(1566 struct cpu {) 74.2647 Tj
+0 -189.867 Td
+(1567   uchar apicid;               // Local APIC ID) 222.794 Tj
+0 -199.361 Td
+(1568   struct context context;     // Switch here to enter sche\
+duler) 297.059 Tj
+0 -208.854 Td
+(1569   struct taskstate ts;        // Used by x86 to find stack\
+ for interrupt) 336.376 Tj
+0 -218.347 Td
+(1570   struct segdesc gdt[NSEGS];  // x86 global descriptor tab\
+le) 283.953 Tj
+0 -227.841 Td
+(1571   char mpstack[MPSTACK];      // Per-CPU startup stack) 257.742 Tj
+0 -237.334 Td
+(1572   volatile int booted;        // Has the CPU started?) 253.374 Tj
+0 -246.827 Td
+(1573   int nlock;                  // Number of locks currently\
+ held) 297.059 Tj
+0 -256.321 Td
+(1574 };) 30.5796 Tj
+0 -265.814 Td
+(1575 ) 21.8426 Tj
+0 -275.307 Td
+(1576 extern struct cpu cpus[NCPU];) 148.529 Tj
+0 -284.801 Td
+(1577 extern int ncpu;) 91.7388 Tj
+0 -294.294 Td
+(1578 ) 21.8426 Tj
+0 -303.788 Td
+(1579 ) 21.8426 Tj
+0 -313.281 Td
+(1580 ) 21.8426 Tj
+0 -322.774 Td
+(1581 ) 21.8426 Tj
+0 -332.268 Td
+(1582 ) 21.8426 Tj
+0 -341.761 Td
+(1583 ) 21.8426 Tj
+0 -351.254 Td
+(1584 ) 21.8426 Tj
+0 -360.748 Td
+(1585 ) 21.8426 Tj
+0 -370.241 Td
+(1586 ) 21.8426 Tj
+0 -379.734 Td
+(1587 ) 21.8426 Tj
+0 -389.228 Td
+(1588 ) 21.8426 Tj
+0 -398.721 Td
+(1589 ) 21.8426 Tj
+0 -408.214 Td
+(1590 ) 21.8426 Tj
+0 -417.708 Td
+(1591 ) 21.8426 Tj
+0 -427.201 Td
+(1592 ) 21.8426 Tj
+0 -436.695 Td
+(1593 ) 21.8426 Tj
+0 -446.188 Td
+(1594 ) 21.8426 Tj
+0 -455.681 Td
+(1595 ) 21.8426 Tj
+0 -465.175 Td
+(1596 ) 21.8426 Tj
+0 -474.668 Td
+(1597 ) 21.8426 Tj
+0 -484.161 Td
+(1598 ) 21.8426 Tj
+0 -493.655 Td
+(1599 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 15) 34.9481 Tj
 Q
 Q
 Q
@@ -7504,6 +7972,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -7511,241 +7982,259 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/mp.c  Page 5) 21.07 Tj
-0 -3.92728 Td
-(1600 extern void mpmain\(void\);) 18.06 Tj
-0 -5.23637 Td
-(1601 ) 3.01 Tj
-0 -6.54546 Td
-(1602 // Write bootstrap code to unused memory at 0x7000.) 33.712 Tj
-0 -7.85455 Td
-(1603 #define APBOOTCODE 0x7000) 18.06 Tj
-0 -9.16364 Td
-(1604 ) 3.01 Tj
-0 -10.4727 Td
-(1605 void) 5.418 Tj
-0 -11.7818 Td
-(1606 mp_startthem\(void\)) 13.846 Tj
-0 -13.0909 Td
-(1607 {) 3.612 Tj
-0 -14.4 Td
-(1608   extern uchar _binary_bootother_start[], _binary_bootother_size[];) 43.344 Tj
-0 -15.7091 Td
-(1609   extern int main\(\);) 15.05 Tj
-0 -17.0182 Td
-(1610   int c;) 7.826 Tj
-0 -18.3273 Td
-(1611 ) 3.01 Tj
-0 -19.6364 Td
-(1612   memmove\(\(void*\) APBOOTCODE,_binary_bootother_start,) 34.916 Tj
-0 -20.9455 Td
-(1613           \(uint\) _binary_bootother_size\);) 27.692 Tj
-0 -22.2545 Td
-(1614 ) 3.01 Tj
-0 -23.5636 Td
-(1615   for\(c = 0; c < ncpu; c++\){) 19.866 Tj
-0 -24.8727 Td
-(1616     // Our current cpu has already started.) 28.896 Tj
-0 -26.1818 Td
-(1617     if\(c == cpu\(\)\)) 13.846 Tj
-0 -27.4909 Td
-(1618       continue;) 12.04 Tj
-0 -28.8 Td
-(1619 ) 3.01 Tj
-0 -30.1091 Td
-(1620     // Set target %esp) 16.254 Tj
-0 -31.4182 Td
-(1621     *\(uint*\)\(APBOOTCODE-4\) = \(uint\) \(cpus[c].mpstack\) + MPSTACK;) 41.538 Tj
-0 -32.7273 Td
-(1622 ) 3.01 Tj
-0 -34.0364 Td
-(1623     // Set target %eip) 16.254 Tj
-0 -35.3454 Td
-(1624     *\(uint*\)\(APBOOTCODE-8\) = \(uint\)mpmain;) 28.294 Tj
-0 -36.6545 Td
-(1625 ) 3.01 Tj
-0 -37.9636 Td
-(1626     // Go!) 9.03 Tj
-0 -39.2727 Td
-(1627     lapic_startap\(cpus[c].apicid, \(uint\) APBOOTCODE\);) 34.916 Tj
-0 -40.5818 Td
-(1628 ) 3.01 Tj
-0 -41.8909 Td
-(1629     // Wait for cpu to get through bootstrap.) 30.1 Tj
-0 -43.2 Td
-(1630     while\(cpus[c].booted == 0\)) 21.07 Tj
-0 -44.5091 Td
-(1631       ;) 7.224 Tj
-0 -45.8182 Td
-(1632   }) 4.816 Tj
-0 -47.1272 Td
-(1633 }) 3.612 Tj
-0 -48.4363 Td
-(1634 ) 3.01 Tj
-0 -49.7454 Td
-(1635 ) 3.01 Tj
-0 -51.0545 Td
-(1636 ) 3.01 Tj
-0 -52.3636 Td
-(1637 ) 3.01 Tj
-0 -53.6727 Td
-(1638 ) 3.01 Tj
-0 -54.9818 Td
-(1639 ) 3.01 Tj
-0 -56.2909 Td
-(1640 ) 3.01 Tj
-0 -57.6 Td
-(1641 ) 3.01 Tj
-0 -58.9091 Td
-(1642 ) 3.01 Tj
-0 -60.2181 Td
-(1643 ) 3.01 Tj
-0 -61.5272 Td
-(1644 ) 3.01 Tj
-0 -62.8363 Td
-(1645 ) 3.01 Tj
-0 -64.1454 Td
-(1646 ) 3.01 Tj
-0 -65.4545 Td
-(1647 ) 3.01 Tj
-0 -66.7636 Td
-(1648 ) 3.01 Tj
-0 -68.0727 Td
-(1649 ) 3.01 Tj
-0 -72 Td
-(Sheet 16) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/proc.c  Page 1) 161.635 Tj
+0 -28.4801 Td
+(1600 #include "types.h") 100.476 Tj
+0 -37.9735 Td
+(1601 #include "defs.h") 96.1073 Tj
+0 -47.4668 Td
+(1602 #include "param.h") 100.476 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.581 Tj
+0 -94.9336 Td
+(1607 ) 21.8426 Tj
+0 -104.427 Td
+(1608 struct spinlock proc_table_lock;) 161.635 Tj
+0 -113.92 Td
+(1609 ) 21.8426 Tj
+0 -123.414 Td
+(1610 struct proc proc[NPROC];) 126.687 Tj
+0 -132.907 Td
+(1611 struct proc *curproc[NCPU];) 139.792 Tj
+0 -142.4 Td
+(1612 static struct proc *initproc;) 148.529 Tj
+0 -151.894 Td
+(1613 ) 21.8426 Tj
+0 -161.387 Td
+(1614 int nextpid = 1;) 91.7388 Tj
+0 -170.88 Td
+(1615 extern void forkret\(void\);) 135.424 Tj
+0 -180.374 Td
+(1616 extern void forkret1\(struct trapframe*\);) 196.583 Tj
+0 -189.867 Td
+(1617 ) 21.8426 Tj
+0 -199.361 Td
+(1618 void) 39.3166 Tj
+0 -208.854 Td
+(1619 pinit\(void\)) 69.8962 Tj
+0 -218.347 Td
+(1620 {) 26.2111 Tj
+0 -227.841 Td
+(1621   initlock\(&proc_table_lock, "proc_table"\);) 209.689 Tj
+0 -237.334 Td
+(1622 }) 26.2111 Tj
+0 -246.827 Td
+(1623 ) 21.8426 Tj
+0 -256.321 Td
+(1624 // Look in the process table for an UNUSED proc.) 231.531 Tj
+0 -265.814 Td
+(1625 // If found, change state to EMBRYO and return it.) 240.268 Tj
+0 -275.307 Td
+(1626 // Otherwise return 0.) 117.95 Tj
+0 -284.801 Td
+(1627 static struct proc*) 104.844 Tj
+0 -294.294 Td
+(1628 allocproc\(void\)) 87.3703 Tj
+0 -303.788 Td
+(1629 {) 26.2111 Tj
+0 -313.281 Td
+(1630   int i;) 56.7907 Tj
+0 -322.774 Td
+(1631   struct proc *p;) 96.1073 Tj
+0 -332.268 Td
+(1632 ) 21.8426 Tj
+0 -341.761 Td
+(1633   acquire\(&proc_table_lock\);) 144.161 Tj
+0 -351.254 Td
+(1634   for\(i = 0; i < NPROC; i++\){) 148.529 Tj
+0 -360.748 Td
+(1635     p = &proc[i];) 96.1073 Tj
+0 -370.241 Td
+(1636     if\(p->state == UNUSED\){) 139.792 Tj
+0 -379.734 Td
+(1637       p->state = EMBRYO;) 126.687 Tj
+0 -389.228 Td
+(1638       p->pid = nextpid++;) 131.055 Tj
+0 -398.721 Td
+(1639       release\(&proc_table_lock\);) 161.635 Tj
+0 -408.214 Td
+(1640       return p;) 87.3703 Tj
+0 -417.708 Td
+(1641     }) 43.6851 Tj
+0 -427.201 Td
+(1642   }) 34.9481 Tj
+0 -436.695 Td
+(1643   release\(&proc_table_lock\);) 144.161 Tj
+0 -446.188 Td
+(1644   return 0;) 69.8962 Tj
+0 -455.681 Td
+(1645 }) 26.2111 Tj
+0 -465.175 Td
+(1646 ) 21.8426 Tj
+0 -474.668 Td
+(1647 ) 21.8426 Tj
+0 -484.161 Td
+(1648 ) 21.8426 Tj
+0 -493.655 Td
+(1649 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/init.c  Page 1) 22.274 Tj
-0 -3.92728 Td
-(1650 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(1651 #include "stat.h") 13.244 Tj
-0 -6.54546 Td
-(1652 #include "user.h") 13.244 Tj
-0 -7.85455 Td
-(1653 #include "fs.h") 12.04 Tj
-0 -9.16364 Td
-(1654 #include "fcntl.h") 13.846 Tj
-0 -10.4727 Td
-(1655 ) 3.01 Tj
-0 -11.7818 Td
-(1656 // init: The initial user-level program) 26.488 Tj
-0 -13.0909 Td
-(1657 ) 3.01 Tj
-0 -14.4 Td
-(1658 char *sh_args[] = { "sh", 0 };) 21.07 Tj
-0 -15.7091 Td
-(1659 ) 3.01 Tj
-0 -17.0182 Td
-(1660 int) 4.816 Tj
-0 -18.3273 Td
-(1661 main\(void\)) 9.03 Tj
-0 -19.6364 Td
-(1662 {) 3.612 Tj
-0 -20.9455 Td
-(1663   int pid;) 9.03 Tj
-0 -22.2545 Td
-(1664 ) 3.01 Tj
-0 -23.5636 Td
-(1665   if\(open\("console", O_RDWR\) < 0\){) 23.478 Tj
-0 -24.8727 Td
-(1666     mknod\("console", T_DEV, 1, 1\);) 23.478 Tj
-0 -26.1818 Td
-(1667     open\("console", O_RDWR\);) 19.866 Tj
-0 -27.4909 Td
-(1668   }) 4.816 Tj
-0 -28.8 Td
-(1669   dup\(0\);  // stdout) 15.05 Tj
-0 -30.1091 Td
-(1670   dup\(0\);  // stderr) 15.05 Tj
-0 -31.4182 Td
-(1671 ) 3.01 Tj
-0 -32.7273 Td
-(1672   for\(;;\){) 9.03 Tj
-0 -34.0364 Td
-(1673     pid = fork\(\);) 13.244 Tj
-0 -35.3454 Td
-(1674     if\(pid < 0\){) 12.642 Tj
-0 -36.6545 Td
-(1675       puts\("init: fork failed\\n"\);) 23.478 Tj
-0 -37.9636 Td
-(1676       exit\(\);) 10.836 Tj
-0 -39.2727 Td
-(1677     }) 6.02 Tj
-0 -40.5818 Td
-(1678     if\(pid == 0\){) 13.244 Tj
-0 -41.8909 Td
-(1679       exec\("sh", sh_args\);) 18.662 Tj
-0 -43.2 Td
-(1680       puts\("init: exec sh failed\\n"\);) 25.284 Tj
-0 -44.5091 Td
-(1681       exit\(\);) 10.836 Tj
-0 -45.8182 Td
-(1682     } else {) 10.234 Tj
-0 -47.1272 Td
-(1683       wait\(\);) 10.836 Tj
-0 -48.4363 Td
-(1684     }) 6.02 Tj
-0 -49.7454 Td
-(1685   }) 4.816 Tj
-0 -51.0545 Td
-(1686 }) 3.612 Tj
-0 -52.3636 Td
-(1687 ) 3.01 Tj
-0 -53.6727 Td
-(1688 ) 3.01 Tj
-0 -54.9818 Td
-(1689 ) 3.01 Tj
-0 -56.2909 Td
-(1690 ) 3.01 Tj
-0 -57.6 Td
-(1691 ) 3.01 Tj
-0 -58.9091 Td
-(1692 ) 3.01 Tj
-0 -60.2181 Td
-(1693 ) 3.01 Tj
-0 -61.5272 Td
-(1694 ) 3.01 Tj
-0 -62.8363 Td
-(1695 ) 3.01 Tj
-0 -64.1454 Td
-(1696 ) 3.01 Tj
-0 -65.4545 Td
-(1697 ) 3.01 Tj
-0 -66.7636 Td
-(1698 ) 3.01 Tj
-0 -68.0727 Td
-(1699 ) 3.01 Tj
-0 -72 Td
-(Sheet 16) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/proc.c  Page 2) 161.635 Tj
+0 -28.4801 Td
+(1650 // Grow current process's memory by n bytes.) 214.057 Tj
+0 -37.9735 Td
+(1651 // Return old size on success, -1 on failure.) 218.426 Tj
+0 -47.4668 Td
+(1652 int) 34.9481 Tj
+0 -56.9602 Td
+(1653 growproc\(int n\)) 87.3703 Tj
+0 -66.4535 Td
+(1654 {) 26.2111 Tj
+0 -75.9469 Td
+(1655   char *newmem, *oldmem;) 126.687 Tj
+0 -85.4403 Td
+(1656 ) 21.8426 Tj
+0 -94.9336 Td
+(1657   newmem = kalloc\(cp->sz + n\);) 152.898 Tj
+0 -104.427 Td
+(1658   if\(newmem == 0\)) 96.1073 Tj
+0 -113.92 Td
+(1659     return -1;) 83.0018 Tj
+0 -123.414 Td
+(1660   memmove\(newmem, cp->mem, cp->sz\);) 174.741 Tj
+0 -132.907 Td
+(1661   memset\(newmem + cp->sz, 0, n\);) 161.635 Tj
+0 -142.4 Td
+(1662   oldmem = cp->mem;) 104.844 Tj
+0 -151.894 Td
+(1663   cp->mem = newmem;) 104.844 Tj
+0 -161.387 Td
+(1664   kfree\(oldmem, cp->sz\);) 126.687 Tj
+0 -170.88 Td
+(1665   cp->sz += n;) 83.0018 Tj
+0 -180.374 Td
+(1666   return cp->sz - n;) 109.213 Tj
+0 -189.867 Td
+(1667 }) 26.2111 Tj
+0 -199.361 Td
+(1668 ) 21.8426 Tj
+0 -208.854 Td
+(1669 // Set up CPU's segment descriptors and task state for a g\
+iven process.) 332.007 Tj
+0 -218.347 Td
+(1670 // If p==0, set up for "idle" state for when scheduler\(\)\
+ is running.) 318.902 Tj
+0 -227.841 Td
+(1671 void) 39.3166 Tj
+0 -237.334 Td
+(1672 setupsegs\(struct proc *p\)) 131.055 Tj
+0 -246.827 Td
+(1673 {) 26.2111 Tj
+0 -256.321 Td
+(1674   struct cpu *c;) 91.7388 Tj
+0 -265.814 Td
+(1675 ) 21.8426 Tj
+0 -275.307 Td
+(1676   c = &cpus[cpu\(\)];) 104.844 Tj
+0 -284.801 Td
+(1677   c->ts.ss0 = SEG_KDATA << 3;) 148.529 Tj
+0 -294.294 Td
+(1678   if\(p\)) 52.4222 Tj
+0 -303.788 Td
+(1679     c->ts.esp0 = \(uint\)\(p->kstack + KSTACKSIZE\);) 231.531 Tj
+0 -313.281 Td
+(1680   else) 48.0537 Tj
+0 -322.774 Td
+(1681     c->ts.esp0 = 0xffffffff;) 144.161 Tj
+0 -332.268 Td
+(1682 ) 21.8426 Tj
+0 -341.761 Td
+(1683   c->gdt[0] = SEG_NULL;) 122.318 Tj
+0 -351.254 Td
+(1684   c->gdt[SEG_KCODE] = SEG\(STA_X|STA_R, 0, 0x100000 + 64*1\
+024-1, 0\);) 314.533 Tj
+0 -360.748 Td
+(1685   c->gdt[SEG_KDATA] = SEG\(STA_W, 0, 0xffffffff, 0\);) 244.637 Tj
+0 -370.241 Td
+(1686   c->gdt[SEG_TSS] = SEG16\(STS_T32A, \(uint\)&c->ts, sizeo\
+f\(c->ts\)-1, 0\);) 327.639 Tj
+0 -379.734 Td
+(1687   c->gdt[SEG_TSS].s = 0;) 126.687 Tj
+0 -389.228 Td
+(1688   if\(p\){) 56.7907 Tj
+0 -398.721 Td
+(1689     c->gdt[SEG_UCODE] = SEG\(STA_X|STA_R, \(uint\)p->mem, \
+p->sz-1, DPL_USER\);) 345.113 Tj
+0 -408.214 Td
+(1690     c->gdt[SEG_UDATA] = SEG\(STA_W, \(uint\)p->mem, p->sz-\
+1, DPL_USER\);) 318.902 Tj
+0 -417.708 Td
+(1691   } else {) 65.5277 Tj
+0 -427.201 Td
+(1692     c->gdt[SEG_UCODE] = SEG_NULL;) 166.004 Tj
+0 -436.695 Td
+(1693     c->gdt[SEG_UDATA] = SEG_NULL;) 166.004 Tj
+0 -446.188 Td
+(1694   }) 34.9481 Tj
+0 -455.681 Td
+(1695 ) 21.8426 Tj
+0 -465.175 Td
+(1696   lgdt\(c->gdt, sizeof\(c->gdt\)\);) 157.267 Tj
+0 -474.668 Td
+(1697   ltr\(SEG_TSS << 3\);) 109.213 Tj
+0 -484.161 Td
+(1698 }) 26.2111 Tj
+0 -493.655 Td
+(1699 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 16) 34.9481 Tj
 Q
 Q
 Q
@@ -7756,7 +8245,10 @@ pdfEndPage
 %%Page: 24 24
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -7764,241 +8256,259 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/spinlock.h  Page 1) 24.682 Tj
-0 -3.92728 Td
-(1700 // Mutual exclusion lock.) 18.06 Tj
-0 -5.23637 Td
-(1701 struct spinlock {) 13.244 Tj
-0 -6.54546 Td
-(1702   uint locked;   // Is the lock held?) 25.284 Tj
-0 -7.85455 Td
-(1703 ) 3.01 Tj
-0 -9.16364 Td
-(1704   // For debugging:) 14.448 Tj
-0 -10.4727 Td
-(1705   char *name;    // Name of lock.) 22.876 Tj
-0 -11.7818 Td
-(1706   int  cpu;      // The number of the cpu holding the lock.) 38.528 Tj
-0 -13.0909 Td
-(1707   uint pcs[10];  // The call stack \(an array of program counters\)) 42.14 Tj
-0 -14.4 Td
-(1708                  // that locked the lock.) 27.692 Tj
-0 -15.7091 Td
-(1709 };) 4.214 Tj
-0 -17.0182 Td
-(1710 ) 3.01 Tj
-0 -18.3273 Td
-(1711 ) 3.01 Tj
-0 -19.6364 Td
-(1712 ) 3.01 Tj
-0 -20.9455 Td
-(1713 ) 3.01 Tj
-0 -22.2545 Td
-(1714 ) 3.01 Tj
-0 -23.5636 Td
-(1715 ) 3.01 Tj
-0 -24.8727 Td
-(1716 ) 3.01 Tj
-0 -26.1818 Td
-(1717 ) 3.01 Tj
-0 -27.4909 Td
-(1718 ) 3.01 Tj
-0 -28.8 Td
-(1719 ) 3.01 Tj
-0 -30.1091 Td
-(1720 ) 3.01 Tj
-0 -31.4182 Td
-(1721 ) 3.01 Tj
-0 -32.7273 Td
-(1722 ) 3.01 Tj
-0 -34.0364 Td
-(1723 ) 3.01 Tj
-0 -35.3454 Td
-(1724 ) 3.01 Tj
-0 -36.6545 Td
-(1725 ) 3.01 Tj
-0 -37.9636 Td
-(1726 ) 3.01 Tj
-0 -39.2727 Td
-(1727 ) 3.01 Tj
-0 -40.5818 Td
-(1728 ) 3.01 Tj
-0 -41.8909 Td
-(1729 ) 3.01 Tj
-0 -43.2 Td
-(1730 ) 3.01 Tj
-0 -44.5091 Td
-(1731 ) 3.01 Tj
-0 -45.8182 Td
-(1732 ) 3.01 Tj
-0 -47.1272 Td
-(1733 ) 3.01 Tj
-0 -48.4363 Td
-(1734 ) 3.01 Tj
-0 -49.7454 Td
-(1735 ) 3.01 Tj
-0 -51.0545 Td
-(1736 ) 3.01 Tj
-0 -52.3636 Td
-(1737 ) 3.01 Tj
-0 -53.6727 Td
-(1738 ) 3.01 Tj
-0 -54.9818 Td
-(1739 ) 3.01 Tj
-0 -56.2909 Td
-(1740 ) 3.01 Tj
-0 -57.6 Td
-(1741 ) 3.01 Tj
-0 -58.9091 Td
-(1742 ) 3.01 Tj
-0 -60.2181 Td
-(1743 ) 3.01 Tj
-0 -61.5272 Td
-(1744 ) 3.01 Tj
-0 -62.8363 Td
-(1745 ) 3.01 Tj
-0 -64.1454 Td
-(1746 ) 3.01 Tj
-0 -65.4545 Td
-(1747 ) 3.01 Tj
-0 -66.7636 Td
-(1748 ) 3.01 Tj
-0 -68.0727 Td
-(1749 ) 3.01 Tj
-0 -72 Td
-(Sheet 17) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/proc.c  Page 3) 161.635 Tj
+0 -28.4801 Td
+(1700 // Create a new process copying p as the parent.) 231.531 Tj
+0 -37.9735 Td
+(1701 // Sets up stack to return as if from system call.) 240.268 Tj
+0 -47.4668 Td
+(1702 // Caller must set state of returned proc to RUNNABLE.) 257.742 Tj
+0 -56.9602 Td
+(1703 struct proc*) 74.2647 Tj
+0 -66.4535 Td
+(1704 copyproc\(struct proc *p\)) 126.687 Tj
+0 -75.9469 Td
+(1705 {) 26.2111 Tj
+0 -85.4403 Td
+(1706   int i;) 56.7907 Tj
+0 -94.9336 Td
+(1707   struct proc *np;) 100.476 Tj
+0 -104.427 Td
+(1708 ) 21.8426 Tj
+0 -113.92 Td
+(1709   // Allocate process.) 117.95 Tj
+0 -123.414 Td
+(1710   if\(\(np = allocproc\(\)\) == 0\)) 148.529 Tj
+0 -132.907 Td
+(1711     return 0;) 78.6333 Tj
+0 -142.4 Td
+(1712 ) 21.8426 Tj
+0 -151.894 Td
+(1713   // Allocate kernel stack.) 139.792 Tj
+0 -161.387 Td
+(1714   if\(\(np->kstack = kalloc\(KSTACKSIZE\)\) == 0\){) 218.426 Tj
+0 -170.88 Td
+(1715     np->state = UNUSED;) 122.318 Tj
+0 -180.374 Td
+(1716     return 0;) 78.6333 Tj
+0 -189.867 Td
+(1717   }) 34.9481 Tj
+0 -199.361 Td
+(1718   np->tf = \(struct trapframe*\)\(np->kstack + KSTACKSIZE\)\
+ - 1;) 283.953 Tj
+0 -208.854 Td
+(1719 ) 21.8426 Tj
+0 -218.347 Td
+(1720   if\(p\){  // Copy process state from p.) 192.215 Tj
+0 -227.841 Td
+(1721     np->parent = p;) 104.844 Tj
+0 -237.334 Td
+(1722     memmove\(np->tf, p->tf, sizeof\(*np->tf\)\);) 214.057 Tj
+0 -246.827 Td
+(1723 ) 21.8426 Tj
+0 -256.321 Td
+(1724     np->sz = p->sz;) 104.844 Tj
+0 -265.814 Td
+(1725     if\(\(np->mem = kalloc\(np->sz\)\) == 0\){) 196.583 Tj
+0 -275.307 Td
+(1726       kfree\(np->kstack, KSTACKSIZE\);) 179.109 Tj
+0 -284.801 Td
+(1727       np->kstack = 0;) 113.581 Tj
+0 -294.294 Td
+(1728       np->state = UNUSED;) 131.055 Tj
+0 -303.788 Td
+(1729       return 0;) 87.3703 Tj
+0 -313.281 Td
+(1730     }) 43.6851 Tj
+0 -322.774 Td
+(1731     memmove\(np->mem, p->mem, np->sz\);) 183.478 Tj
+0 -332.268 Td
+(1732 ) 21.8426 Tj
+0 -341.761 Td
+(1733     for\(i = 0; i < NOFILE; i++\)) 157.267 Tj
+0 -351.254 Td
+(1734       if\(p->ofile[i]\)) 113.581 Tj
+0 -360.748 Td
+(1735         np->ofile[i] = filedup\(p->ofile[i]\);) 214.057 Tj
+0 -370.241 Td
+(1736     np->cwd = idup\(p->cwd\);) 139.792 Tj
+0 -379.734 Td
+(1737   }) 34.9481 Tj
+0 -389.228 Td
+(1738 ) 21.8426 Tj
+0 -398.721 Td
+(1739   // Set up new context to start executing at forkret \(se\
+e below\).) 310.165 Tj
+0 -408.214 Td
+(1740   memset\(&np->context, 0, sizeof\(np->context\)\);) 227.163 Tj
+0 -417.708 Td
+(1741   np->context.eip = \(uint\)forkret;) 170.372 Tj
+0 -427.201 Td
+(1742   np->context.esp = \(uint\)np->tf;) 166.004 Tj
+0 -436.695 Td
+(1743 ) 21.8426 Tj
+0 -446.188 Td
+(1744   // Clear %eax so that fork system call returns 0 in chil\
+d.) 283.953 Tj
+0 -455.681 Td
+(1745   np->tf->eax = 0;) 100.476 Tj
+0 -465.175 Td
+(1746   return np;) 74.2647 Tj
+0 -474.668 Td
+(1747 }) 26.2111 Tj
+0 -484.161 Td
+(1748 ) 21.8426 Tj
+0 -493.655 Td
+(1749 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/spinlock.c  Page 1) 24.682 Tj
-0 -3.92728 Td
-(1750 // Mutual exclusion spin locks.) 21.672 Tj
-0 -5.23637 Td
-(1751 ) 3.01 Tj
-0 -6.54546 Td
-(1752 #include "types.h") 13.846 Tj
-0 -7.85455 Td
-(1753 #include "defs.h") 13.244 Tj
-0 -9.16364 Td
-(1754 #include "x86.h") 12.642 Tj
-0 -10.4727 Td
-(1755 #include "mmu.h") 12.642 Tj
-0 -11.7818 Td
-(1756 #include "param.h") 13.846 Tj
-0 -13.0909 Td
-(1757 #include "proc.h") 13.244 Tj
-0 -14.4 Td
-(1758 #include "spinlock.h") 15.652 Tj
-0 -15.7091 Td
-(1759 ) 3.01 Tj
-0 -17.0182 Td
-(1760 extern int use_console_lock;) 19.866 Tj
-0 -18.3273 Td
-(1761 ) 3.01 Tj
-0 -19.6364 Td
-(1762 void) 5.418 Tj
-0 -20.9455 Td
-(1763 initlock\(struct spinlock *lock, char *name\)) 28.896 Tj
-0 -22.2545 Td
-(1764 {) 3.612 Tj
-0 -23.5636 Td
-(1765   lock->name = name;) 15.05 Tj
-0 -24.8727 Td
-(1766   lock->locked = 0;) 14.448 Tj
-0 -26.1818 Td
-(1767   lock->cpu = 0xffffffff;) 18.06 Tj
-0 -27.4909 Td
-(1768 }) 3.612 Tj
-0 -28.8 Td
-(1769 ) 3.01 Tj
-0 -30.1091 Td
-(1770 // Record the current call stack in pcs[] by following the %ebp chain.) 45.15 Tj
-0 -31.4182 Td
-(1771 void) 5.418 Tj
-0 -32.7273 Td
-(1772 getcallerpcs\(void *v, uint pcs[]\)) 22.876 Tj
-0 -34.0364 Td
-(1773 {) 3.612 Tj
-0 -35.3454 Td
-(1774   uint *ebp = \(uint*\)v - 2;) 19.264 Tj
-0 -36.6545 Td
-(1775   int i;) 7.826 Tj
-0 -37.9636 Td
-(1776   for\(i = 0; i < 10; i++\){) 18.662 Tj
-0 -39.2727 Td
-(1777     if\(ebp == 0 || ebp == \(uint*\)0xffffffff\)) 29.498 Tj
-0 -40.5818 Td
-(1778       break;) 10.234 Tj
-0 -41.8909 Td
-(1779     pcs[i] = ebp[1];     // saved %eip) 25.886 Tj
-0 -43.2 Td
-(1780     ebp = \(uint*\)ebp[0]; // saved %ebp) 25.886 Tj
-0 -44.5091 Td
-(1781   }) 4.816 Tj
-0 -45.8182 Td
-(1782   for\(; i < 10; i++\)) 15.05 Tj
-0 -47.1272 Td
-(1783     pcs[i] = 0;) 12.04 Tj
-0 -48.4363 Td
-(1784 }) 3.612 Tj
-0 -49.7454 Td
-(1785 ) 3.01 Tj
-0 -51.0545 Td
-(1786 ) 3.01 Tj
-0 -52.3636 Td
-(1787 ) 3.01 Tj
-0 -53.6727 Td
-(1788 ) 3.01 Tj
-0 -54.9818 Td
-(1789 ) 3.01 Tj
-0 -56.2909 Td
-(1790 ) 3.01 Tj
-0 -57.6 Td
-(1791 ) 3.01 Tj
-0 -58.9091 Td
-(1792 ) 3.01 Tj
-0 -60.2181 Td
-(1793 ) 3.01 Tj
-0 -61.5272 Td
-(1794 ) 3.01 Tj
-0 -62.8363 Td
-(1795 ) 3.01 Tj
-0 -64.1454 Td
-(1796 ) 3.01 Tj
-0 -65.4545 Td
-(1797 ) 3.01 Tj
-0 -66.7636 Td
-(1798 ) 3.01 Tj
-0 -68.0727 Td
-(1799 ) 3.01 Tj
-0 -72 Td
-(Sheet 17) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/proc.c  Page 4) 161.635 Tj
+0 -28.4801 Td
+(1750 // Set up first user process.) 148.529 Tj
+0 -37.9735 Td
+(1751 void) 39.3166 Tj
+0 -47.4668 Td
+(1752 userinit\(void\)) 83.0018 Tj
+0 -56.9602 Td
+(1753 {) 26.2111 Tj
+0 -66.4535 Td
+(1754   struct proc *p;) 96.1073 Tj
+0 -75.9469 Td
+(1755   extern uchar _binary_initcode_start[], _binary_initcode_\
+size[];) 305.796 Tj
+0 -85.4403 Td
+(1756 ) 21.8426 Tj
+0 -94.9336 Td
+(1757   p = copyproc\(0\);) 100.476 Tj
+0 -104.427 Td
+(1758   p->sz = PAGE;) 87.3703 Tj
+0 -113.92 Td
+(1759   p->mem = kalloc\(p->sz\);) 131.055 Tj
+0 -123.414 Td
+(1760   p->cwd = namei\("/"\);) 117.95 Tj
+0 -132.907 Td
+(1761   memset\(p->tf, 0, sizeof\(*p->tf\)\);) 174.741 Tj
+0 -142.4 Td
+(1762   p->tf->cs = \(SEG_UCODE << 3\) | DPL_USER;) 205.32 Tj
+0 -151.894 Td
+(1763   p->tf->ds = \(SEG_UDATA << 3\) | DPL_USER;) 205.32 Tj
+0 -161.387 Td
+(1764   p->tf->es = p->tf->ds;) 126.687 Tj
+0 -170.88 Td
+(1765   p->tf->ss = p->tf->ds;) 126.687 Tj
+0 -180.374 Td
+(1766   p->tf->eflags = FL_IF;) 126.687 Tj
+0 -189.867 Td
+(1767   p->tf->esp = p->sz;) 113.581 Tj
+0 -199.361 Td
+(1768 ) 21.8426 Tj
+0 -208.854 Td
+(1769   // Make return address readable; needed for some gcc.) 262.111 Tj
+0 -218.347 Td
+(1770   p->tf->esp -= 4;) 100.476 Tj
+0 -227.841 Td
+(1771   *\(uint*\)\(p->mem + p->tf->esp\) = 0xefefefef;) 218.426 Tj
+0 -237.334 Td
+(1772 ) 21.8426 Tj
+0 -246.827 Td
+(1773   // On entry to user space, start executing at beginning \
+of initcode.S.) 336.376 Tj
+0 -256.321 Td
+(1774   p->tf->eip = 0;) 96.1073 Tj
+0 -265.814 Td
+(1775   memmove\(p->mem, _binary_initcode_start, \(int\)_binary_\
+initcode_size\);) 327.639 Tj
+0 -275.307 Td
+(1776   safestrcpy\(p->name, "initcode", sizeof\(p->name\)\);) 244.637 Tj
+0 -284.801 Td
+(1777   p->state = RUNNABLE;) 117.95 Tj
+0 -294.294 Td
+(1778 ) 21.8426 Tj
+0 -303.788 Td
+(1779   initproc = p;) 87.3703 Tj
+0 -313.281 Td
+(1780 }) 26.2111 Tj
+0 -322.774 Td
+(1781 ) 21.8426 Tj
+0 -332.268 Td
+(1782 ) 21.8426 Tj
+0 -341.761 Td
+(1783 ) 21.8426 Tj
+0 -351.254 Td
+(1784 ) 21.8426 Tj
+0 -360.748 Td
+(1785 ) 21.8426 Tj
+0 -370.241 Td
+(1786 ) 21.8426 Tj
+0 -379.734 Td
+(1787 ) 21.8426 Tj
+0 -389.228 Td
+(1788 ) 21.8426 Tj
+0 -398.721 Td
+(1789 ) 21.8426 Tj
+0 -408.214 Td
+(1790 ) 21.8426 Tj
+0 -417.708 Td
+(1791 ) 21.8426 Tj
+0 -427.201 Td
+(1792 ) 21.8426 Tj
+0 -436.695 Td
+(1793 ) 21.8426 Tj
+0 -446.188 Td
+(1794 ) 21.8426 Tj
+0 -455.681 Td
+(1795 ) 21.8426 Tj
+0 -465.175 Td
+(1796 ) 21.8426 Tj
+0 -474.668 Td
+(1797 ) 21.8426 Tj
+0 -484.161 Td
+(1798 ) 21.8426 Tj
+0 -493.655 Td
+(1799 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 17) 34.9481 Tj
 Q
 Q
 Q
@@ -8010,6 +8520,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -8017,241 +8530,255 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/spinlock.c  Page 2) 24.682 Tj
-0 -3.92728 Td
-(1800 // Acquire the lock.) 15.05 Tj
-0 -5.23637 Td
-(1801 // Loops \(spins\) until the lock is acquired.) 29.498 Tj
-0 -6.54546 Td
-(1802 // \(Because contention is handled by spinning, must not) 36.12 Tj
-0 -7.85455 Td
-(1803 // go to sleep holding any locks.\)) 23.478 Tj
-0 -9.16364 Td
-(1804 void) 5.418 Tj
-0 -10.4727 Td
-(1805 acquire\(struct spinlock *lock\)) 21.07 Tj
-0 -11.7818 Td
-(1806 {) 3.612 Tj
-0 -13.0909 Td
-(1807   if\(holding\(lock\)\)) 14.448 Tj
-0 -14.4 Td
-(1808     panic\("acquire"\);) 15.652 Tj
-0 -15.7091 Td
-(1809 ) 3.01 Tj
-0 -17.0182 Td
-(1810   if\(cpus[cpu\(\)].nlock == 0\)) 19.866 Tj
-0 -18.3273 Td
-(1811     cli\(\);) 9.03 Tj
-0 -19.6364 Td
-(1812   cpus[cpu\(\)].nlock++;) 16.254 Tj
-0 -20.9455 Td
-(1813 ) 3.01 Tj
-0 -22.2545 Td
-(1814   while\(cmpxchg\(0, 1, &lock->locked\) == 1\)) 28.294 Tj
-0 -23.5636 Td
-(1815     ;) 6.02 Tj
-0 -24.8727 Td
-(1816 ) 3.01 Tj
-0 -26.1818 Td
-(1817   // Serialize instructions: now that lock is acquired, make sure) 42.14 Tj
-0 -27.4909 Td
-(1818   // we wait for all pending writes from other processors.) 37.926 Tj
-0 -28.8 Td
-(1819   cpuid\(0, 0, 0, 0, 0\);  // memory barrier \(see Ch 7, IA-32 manual vol 3\)) 46.956 Tj
-0 -30.1091 Td
-(1820 ) 3.01 Tj
-0 -31.4182 Td
-(1821   // Record info about lock acquisition for debugging.) 35.518 Tj
-0 -32.7273 Td
-(1822   // The +10 is only so that we can tell the difference) 36.12 Tj
-0 -34.0364 Td
-(1823   // between forgetting to initialize lock->cpu) 31.304 Tj
-0 -35.3454 Td
-(1824   // and holding a lock on cpu 0.) 22.876 Tj
-0 -36.6545 Td
-(1825   lock->cpu = cpu\(\) + 10;) 18.06 Tj
-0 -37.9636 Td
-(1826   getcallerpcs\(&lock, lock->pcs\);) 22.876 Tj
-0 -39.2727 Td
-(1827 }) 3.612 Tj
-0 -40.5818 Td
-(1828 ) 3.01 Tj
-0 -41.8909 Td
-(1829 // Release the lock.) 15.05 Tj
-0 -43.2 Td
-(1830 void) 5.418 Tj
-0 -44.5091 Td
-(1831 release\(struct spinlock *lock\)) 21.07 Tj
-0 -45.8182 Td
-(1832 {) 3.612 Tj
-0 -47.1272 Td
-(1833   if\(!holding\(lock\)\)) 15.05 Tj
-0 -48.4363 Td
-(1834     panic\("release"\);) 15.652 Tj
-0 -49.7454 Td
-(1835 ) 3.01 Tj
-0 -51.0545 Td
-(1836   lock->pcs[0] = 0;) 14.448 Tj
-0 -52.3636 Td
-(1837   lock->cpu = 0xffffffff;) 18.06 Tj
-0 -53.6727 Td
-(1838 ) 3.01 Tj
-0 -54.9818 Td
-(1839   // Serialize instructions: before unlocking the lock, make sure) 42.14 Tj
-0 -56.2909 Td
-(1840   // to flush any pending memory writes from this processor.) 39.13 Tj
-0 -57.6 Td
-(1841   cpuid\(0, 0, 0, 0, 0\);  // memory barrier \(see Ch 7, IA-32 manual vol 3\)) 46.956 Tj
-0 -58.9091 Td
-(1842 ) 3.01 Tj
-0 -60.2181 Td
-(1843   lock->locked = 0;) 14.448 Tj
-0 -61.5272 Td
-(1844   if\(--cpus[cpu\(\)].nlock == 0\)) 21.07 Tj
-0 -62.8363 Td
-(1845     sti\(\);) 9.03 Tj
-0 -64.1454 Td
-(1846 }) 3.612 Tj
-0 -65.4545 Td
-(1847 ) 3.01 Tj
-0 -66.7636 Td
-(1848 ) 3.01 Tj
-0 -68.0727 Td
-(1849 ) 3.01 Tj
-0 -72 Td
-(Sheet 18) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/proc.c  Page 5) 161.635 Tj
+0 -28.4801 Td
+(1800 // Per-CPU process scheduler.) 148.529 Tj
+0 -37.9735 Td
+(1801 // Each CPU calls scheduler\(\) after setting itself up.) 257.742 Tj
+0 -47.4668 Td
+(1802 // Scheduler never returns.  It loops, doing:) 218.426 Tj
+0 -56.9602 Td
+(1803 //  - choose a process to run) 148.529 Tj
+0 -66.4535 Td
+(1804 //  - longjmp to start running that process) 209.689 Tj
+0 -75.9469 Td
+(1805 //  - eventually that process transfers control back) 249.005 Tj
+0 -85.4403 Td
+(1806 //      via longjmp back to the scheduler.) 205.32 Tj
+0 -94.9336 Td
+(1807 void) 39.3166 Tj
+0 -104.427 Td
+(1808 scheduler\(void\)) 87.3703 Tj
+0 -113.92 Td
+(1809 {) 26.2111 Tj
+0 -123.414 Td
+(1810   struct proc *p;) 96.1073 Tj
+0 -132.907 Td
+(1811   int i;) 56.7907 Tj
+0 -142.4 Td
+(1812 ) 21.8426 Tj
+0 -151.894 Td
+(1813   for\(;;\){) 65.5277 Tj
+0 -161.387 Td
+(1814     // Loop over process table looking for process to run.) 275.216 Tj
+0 -170.88 Td
+(1815     acquire\(&proc_table_lock\);) 152.898 Tj
+0 -180.374 Td
+(1816 ) 21.8426 Tj
+0 -189.867 Td
+(1817     for\(i = 0; i < NPROC; i++\){) 157.267 Tj
+0 -199.361 Td
+(1818       p = &proc[i];) 104.844 Tj
+0 -208.854 Td
+(1819       if\(p->state != RUNNABLE\)) 152.898 Tj
+0 -218.347 Td
+(1820         continue;) 96.1073 Tj
+0 -227.841 Td
+(1821 ) 21.8426 Tj
+0 -237.334 Td
+(1822       // Switch to chosen process.  It is the process's jo\
+b) 279.585 Tj
+0 -246.827 Td
+(1823       // to release proc_table_lock and then reacquire it) 270.848 Tj
+0 -256.321 Td
+(1824       // before jumping back to us.) 174.741 Tj
+0 -265.814 Td
+(1825       cp = p;) 78.6333 Tj
+0 -275.307 Td
+(1826       setupsegs\(p\);) 104.844 Tj
+0 -284.801 Td
+(1827       p->state = RUNNING;) 131.055 Tj
+0 -294.294 Td
+(1828       swtch\(&cpus[cpu\(\)].context, &p->context\);) 227.163 Tj
+0 -303.788 Td
+(1829 ) 21.8426 Tj
+0 -313.281 Td
+(1830       // Process is done running for now.) 200.952 Tj
+0 -322.774 Td
+(1831       // It should have changed its p->state before coming\
+ back.) 301.427 Tj
+0 -332.268 Td
+(1832       cp = 0;) 78.6333 Tj
+0 -341.761 Td
+(1833       setupsegs\(0\);) 104.844 Tj
+0 -351.254 Td
+(1834     }) 43.6851 Tj
+0 -360.748 Td
+(1835 ) 21.8426 Tj
+0 -370.241 Td
+(1836     release\(&proc_table_lock\);) 152.898 Tj
+0 -379.734 Td
+(1837   }) 34.9481 Tj
+0 -389.228 Td
+(1838 }) 26.2111 Tj
+0 -398.721 Td
+(1839 ) 21.8426 Tj
+0 -408.214 Td
+(1840 ) 21.8426 Tj
+0 -417.708 Td
+(1841 ) 21.8426 Tj
+0 -427.201 Td
+(1842 ) 21.8426 Tj
+0 -436.695 Td
+(1843 ) 21.8426 Tj
+0 -446.188 Td
+(1844 ) 21.8426 Tj
+0 -455.681 Td
+(1845 ) 21.8426 Tj
+0 -465.175 Td
+(1846 ) 21.8426 Tj
+0 -474.668 Td
+(1847 ) 21.8426 Tj
+0 -484.161 Td
+(1848 ) 21.8426 Tj
+0 -493.655 Td
+(1849 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/spinlock.c  Page 3) 24.682 Tj
-0 -3.92728 Td
-(1850 // Check whether this cpu is holding the lock.) 30.702 Tj
-0 -5.23637 Td
-(1851 int) 4.816 Tj
-0 -6.54546 Td
-(1852 holding\(struct spinlock *lock\)) 21.07 Tj
-0 -7.85455 Td
-(1853 {) 3.612 Tj
-0 -9.16364 Td
-(1854   return lock->locked && lock->cpu == cpu\(\) + 10;) 32.508 Tj
-0 -10.4727 Td
-(1855 }) 3.612 Tj
-0 -11.7818 Td
-(1856 ) 3.01 Tj
-0 -13.0909 Td
-(1857 ) 3.01 Tj
-0 -14.4 Td
-(1858 ) 3.01 Tj
-0 -15.7091 Td
-(1859 ) 3.01 Tj
-0 -17.0182 Td
-(1860 ) 3.01 Tj
-0 -18.3273 Td
-(1861 ) 3.01 Tj
-0 -19.6364 Td
-(1862 ) 3.01 Tj
-0 -20.9455 Td
-(1863 ) 3.01 Tj
-0 -22.2545 Td
-(1864 ) 3.01 Tj
-0 -23.5636 Td
-(1865 ) 3.01 Tj
-0 -24.8727 Td
-(1866 ) 3.01 Tj
-0 -26.1818 Td
-(1867 ) 3.01 Tj
-0 -27.4909 Td
-(1868 ) 3.01 Tj
-0 -28.8 Td
-(1869 ) 3.01 Tj
-0 -30.1091 Td
-(1870 ) 3.01 Tj
-0 -31.4182 Td
-(1871 ) 3.01 Tj
-0 -32.7273 Td
-(1872 ) 3.01 Tj
-0 -34.0364 Td
-(1873 ) 3.01 Tj
-0 -35.3454 Td
-(1874 ) 3.01 Tj
-0 -36.6545 Td
-(1875 ) 3.01 Tj
-0 -37.9636 Td
-(1876 ) 3.01 Tj
-0 -39.2727 Td
-(1877 ) 3.01 Tj
-0 -40.5818 Td
-(1878 ) 3.01 Tj
-0 -41.8909 Td
-(1879 ) 3.01 Tj
-0 -43.2 Td
-(1880 ) 3.01 Tj
-0 -44.5091 Td
-(1881 ) 3.01 Tj
-0 -45.8182 Td
-(1882 ) 3.01 Tj
-0 -47.1272 Td
-(1883 ) 3.01 Tj
-0 -48.4363 Td
-(1884 ) 3.01 Tj
-0 -49.7454 Td
-(1885 ) 3.01 Tj
-0 -51.0545 Td
-(1886 ) 3.01 Tj
-0 -52.3636 Td
-(1887 ) 3.01 Tj
-0 -53.6727 Td
-(1888 ) 3.01 Tj
-0 -54.9818 Td
-(1889 ) 3.01 Tj
-0 -56.2909 Td
-(1890 ) 3.01 Tj
-0 -57.6 Td
-(1891 ) 3.01 Tj
-0 -58.9091 Td
-(1892 ) 3.01 Tj
-0 -60.2181 Td
-(1893 ) 3.01 Tj
-0 -61.5272 Td
-(1894 ) 3.01 Tj
-0 -62.8363 Td
-(1895 ) 3.01 Tj
-0 -64.1454 Td
-(1896 ) 3.01 Tj
-0 -65.4545 Td
-(1897 ) 3.01 Tj
-0 -66.7636 Td
-(1898 ) 3.01 Tj
-0 -68.0727 Td
-(1899 ) 3.01 Tj
-0 -72 Td
-(Sheet 18) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/proc.c  Page 6) 161.635 Tj
+0 -28.4801 Td
+(1850 // Enter scheduler.  Must already hold proc_table_lock) 257.742 Tj
+0 -37.9735 Td
+(1851 // and have changed curproc[cpu\(\)]->state.) 205.32 Tj
+0 -47.4668 Td
+(1852 void) 39.3166 Tj
+0 -56.9602 Td
+(1853 sched\(void\)) 69.8962 Tj
+0 -66.4535 Td
+(1854 {) 26.2111 Tj
+0 -75.9469 Td
+(1855   if\(cp->state == RUNNING\)) 135.424 Tj
+0 -85.4403 Td
+(1856     panic\("sched running"\);) 139.792 Tj
+0 -94.9336 Td
+(1857   if\(!holding\(&proc_table_lock\)\)) 161.635 Tj
+0 -104.427 Td
+(1858     panic\("sched proc_table_lock"\);) 174.741 Tj
+0 -113.92 Td
+(1859   if\(cpus[cpu\(\)].nlock != 1\)) 144.161 Tj
+0 -123.414 Td
+(1860     panic\("sched locks"\);) 131.055 Tj
+0 -132.907 Td
+(1861 ) 21.8426 Tj
+0 -142.4 Td
+(1862   swtch\(&cp->context, &cpus[cpu\(\)].context\);) 214.057 Tj
+0 -151.894 Td
+(1863 }) 26.2111 Tj
+0 -161.387 Td
+(1864 ) 21.8426 Tj
+0 -170.88 Td
+(1865 // Give up the CPU for one scheduling round.) 214.057 Tj
+0 -180.374 Td
+(1866 void) 39.3166 Tj
+0 -189.867 Td
+(1867 yield\(void\)) 69.8962 Tj
+0 -199.361 Td
+(1868 {) 26.2111 Tj
+0 -208.854 Td
+(1869   acquire\(&proc_table_lock\);) 144.161 Tj
+0 -218.347 Td
+(1870   cp->state = RUNNABLE;) 122.318 Tj
+0 -227.841 Td
+(1871   sched\(\);) 65.5277 Tj
+0 -237.334 Td
+(1872   release\(&proc_table_lock\);) 144.161 Tj
+0 -246.827 Td
+(1873 }) 26.2111 Tj
+0 -256.321 Td
+(1874 ) 21.8426 Tj
+0 -265.814 Td
+(1875 // A fork child's very first scheduling by scheduler\(\)) 257.742 Tj
+0 -275.307 Td
+(1876 // will longjmp here.  "Return" to user space.) 222.794 Tj
+0 -284.801 Td
+(1877 void) 39.3166 Tj
+0 -294.294 Td
+(1878 forkret\(void\)) 78.6333 Tj
+0 -303.788 Td
+(1879 {) 26.2111 Tj
+0 -313.281 Td
+(1880   // Still holding proc_table_lock from scheduler.) 240.268 Tj
+0 -322.774 Td
+(1881   release\(&proc_table_lock\);) 144.161 Tj
+0 -332.268 Td
+(1882 ) 21.8426 Tj
+0 -341.761 Td
+(1883   // Jump into assembly, never to return.) 200.952 Tj
+0 -351.254 Td
+(1884   forkret1\(cp->tf\);) 104.844 Tj
+0 -360.748 Td
+(1885 }) 26.2111 Tj
+0 -370.241 Td
+(1886 ) 21.8426 Tj
+0 -379.734 Td
+(1887 ) 21.8426 Tj
+0 -389.228 Td
+(1888 ) 21.8426 Tj
+0 -398.721 Td
+(1889 ) 21.8426 Tj
+0 -408.214 Td
+(1890 ) 21.8426 Tj
+0 -417.708 Td
+(1891 ) 21.8426 Tj
+0 -427.201 Td
+(1892 ) 21.8426 Tj
+0 -436.695 Td
+(1893 ) 21.8426 Tj
+0 -446.188 Td
+(1894 ) 21.8426 Tj
+0 -455.681 Td
+(1895 ) 21.8426 Tj
+0 -465.175 Td
+(1896 ) 21.8426 Tj
+0 -474.668 Td
+(1897 ) 21.8426 Tj
+0 -484.161 Td
+(1898 ) 21.8426 Tj
+0 -493.655 Td
+(1899 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 18) 34.9481 Tj
 Q
 Q
 Q
@@ -8262,7 +8789,10 @@ pdfEndPage
 %%Page: 26 26
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -8270,241 +8800,253 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/proc.h  Page 1) 22.274 Tj
-0 -3.92728 Td
-(1900 // Segments in proc->gdt) 17.458 Tj
-0 -5.23637 Td
-(1901 #define SEG_KCODE 1  // kernel code) 24.08 Tj
-0 -6.54546 Td
-(1902 #define SEG_KDATA 2  // kernel data+stack) 27.692 Tj
-0 -7.85455 Td
-(1903 #define SEG_UCODE 3) 14.448 Tj
-0 -9.16364 Td
-(1904 #define SEG_UDATA 4) 14.448 Tj
-0 -10.4727 Td
-(1905 #define SEG_TSS   5  // this process's task state) 32.508 Tj
-0 -11.7818 Td
-(1906 #define NSEGS     6) 14.448 Tj
-0 -13.0909 Td
-(1907 ) 3.01 Tj
-0 -14.4 Td
-(1908 // Saved registers for kernel context switches.) 31.304 Tj
-0 -15.7091 Td
-(1909 // Don't need to save all the %fs etc. segment registers,) 37.324 Tj
-0 -17.0182 Td
-(1910 // because they are constant across kernel contexts.) 34.314 Tj
-0 -18.3273 Td
-(1911 // Save all the regular registers so we don't need to care) 37.926 Tj
-0 -19.6364 Td
-(1912 // which are caller save.) 18.06 Tj
-0 -20.9455 Td
-(1913 // Don't save %eax, because that's the return register.) 36.12 Tj
-0 -22.2545 Td
-(1914 // The layout of jmpbuf is known to setjmp.S.) 30.1 Tj
-0 -23.5636 Td
-(1915 struct jmpbuf {) 12.04 Tj
-0 -24.8727 Td
-(1916   int ebx;) 9.03 Tj
-0 -26.1818 Td
-(1917   int ecx;) 9.03 Tj
-0 -27.4909 Td
-(1918   int edx;) 9.03 Tj
-0 -28.8 Td
-(1919   int esi;) 9.03 Tj
-0 -30.1091 Td
-(1920   int edi;) 9.03 Tj
-0 -31.4182 Td
-(1921   int esp;) 9.03 Tj
-0 -32.7273 Td
-(1922   int ebp;) 9.03 Tj
-0 -34.0364 Td
-(1923   int eip;) 9.03 Tj
-0 -35.3454 Td
-(1924 };) 4.214 Tj
-0 -36.6545 Td
-(1925 ) 3.01 Tj
-0 -37.9636 Td
-(1926 enum proc_state { UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE };) 46.354 Tj
-0 -39.2727 Td
-(1927 ) 3.01 Tj
-0 -40.5818 Td
-(1928 // Per-process state) 15.05 Tj
-0 -41.8909 Td
-(1929 struct proc {) 10.836 Tj
-0 -43.2 Td
-(1930   char *mem;                // Start of process memory \(kernel address\)) 45.752 Tj
-0 -44.5091 Td
-(1931   uint sz;                  // Size of process memory \(bytes\)) 39.732 Tj
-0 -45.8182 Td
-(1932   char *kstack;             // Bottom of kernel stack for this process) 45.15 Tj
-0 -47.1272 Td
-(1933   enum proc_state state;    // Process state) 29.498 Tj
-0 -48.4363 Td
-(1934   int pid;                  // Process ID) 27.692 Tj
-0 -49.7454 Td
-(1935   int ppid;                 // Parent pid) 27.692 Tj
-0 -51.0545 Td
-(1936   void *chan;               // If non-zero, sleeping on chan) 39.13 Tj
-0 -52.3636 Td
-(1937   int killed;               // If non-zero, have been killed) 39.13 Tj
-0 -53.6727 Td
-(1938   struct file *ofile[NOFILE];  // Open files) 29.498 Tj
-0 -54.9818 Td
-(1939   struct inode *cwd;        // Current directory) 31.906 Tj
-0 -56.2909 Td
-(1940   struct jmpbuf jmpbuf;     // Jump here to run process) 36.12 Tj
-0 -57.6 Td
-(1941   struct trapframe *tf;     // Trap frame for current interrupt) 40.936 Tj
-0 -58.9091 Td
-(1942 };) 4.214 Tj
-0 -60.2181 Td
-(1943 ) 3.01 Tj
-0 -61.5272 Td
-(1944 ) 3.01 Tj
-0 -62.8363 Td
-(1945 ) 3.01 Tj
-0 -64.1454 Td
-(1946 ) 3.01 Tj
-0 -65.4545 Td
-(1947 ) 3.01 Tj
-0 -66.7636 Td
-(1948 ) 3.01 Tj
-0 -68.0727 Td
-(1949 ) 3.01 Tj
-0 -72 Td
-(Sheet 19) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/proc.c  Page 7) 161.635 Tj
+0 -28.4801 Td
+(1900 // Atomically release lock and sleep on chan.) 218.426 Tj
+0 -37.9735 Td
+(1901 // Reacquires lock when reawakened.) 174.741 Tj
+0 -47.4668 Td
+(1902 void) 39.3166 Tj
+0 -56.9602 Td
+(1903 sleep\(void *chan, struct spinlock *lk\)) 187.846 Tj
+0 -66.4535 Td
+(1904 {) 26.2111 Tj
+0 -75.9469 Td
+(1905   if\(cp == 0\)) 78.6333 Tj
+0 -85.4403 Td
+(1906     panic\("sleep"\);) 104.844 Tj
+0 -94.9336 Td
+(1907 ) 21.8426 Tj
+0 -104.427 Td
+(1908   if\(lk == 0\)) 78.6333 Tj
+0 -113.92 Td
+(1909     panic\("sleep without lk"\);) 152.898 Tj
+0 -123.414 Td
+(1910 ) 21.8426 Tj
+0 -132.907 Td
+(1911   // Must acquire proc_table_lock in order to) 218.426 Tj
+0 -142.4 Td
+(1912   // change p->state and then call sched.) 200.952 Tj
+0 -151.894 Td
+(1913   // Once we hold proc_table_lock, we can be) 214.057 Tj
+0 -161.387 Td
+(1914   // guaranteed that we won't miss any wakeup) 218.426 Tj
+0 -170.88 Td
+(1915   // \(wakeup runs with proc_table_lock locked\),) 227.163 Tj
+0 -180.374 Td
+(1916   // so it's okay to release lk.) 161.635 Tj
+0 -189.867 Td
+(1917   if\(lk != &proc_table_lock\){) 148.529 Tj
+0 -199.361 Td
+(1918     acquire\(&proc_table_lock\);) 152.898 Tj
+0 -208.854 Td
+(1919     release\(lk\);) 91.7388 Tj
+0 -218.347 Td
+(1920   }) 34.9481 Tj
+0 -227.841 Td
+(1921 ) 21.8426 Tj
+0 -237.334 Td
+(1922   // Go to sleep.) 96.1073 Tj
+0 -246.827 Td
+(1923   cp->chan = chan;) 100.476 Tj
+0 -256.321 Td
+(1924   cp->state = SLEEPING;) 122.318 Tj
+0 -265.814 Td
+(1925   sched\(\);) 65.5277 Tj
+0 -275.307 Td
+(1926 ) 21.8426 Tj
+0 -284.801 Td
+(1927   // Tidy up.) 78.6333 Tj
+0 -294.294 Td
+(1928   cp->chan = 0;) 87.3703 Tj
+0 -303.788 Td
+(1929 ) 21.8426 Tj
+0 -313.281 Td
+(1930   // Reacquire original lock.) 148.529 Tj
+0 -322.774 Td
+(1931   if\(lk != &proc_table_lock\){) 148.529 Tj
+0 -332.268 Td
+(1932     release\(&proc_table_lock\);) 152.898 Tj
+0 -341.761 Td
+(1933     acquire\(lk\);) 91.7388 Tj
+0 -351.254 Td
+(1934   }) 34.9481 Tj
+0 -360.748 Td
+(1935 }) 26.2111 Tj
+0 -370.241 Td
+(1936 ) 21.8426 Tj
+0 -379.734 Td
+(1937 ) 21.8426 Tj
+0 -389.228 Td
+(1938 ) 21.8426 Tj
+0 -398.721 Td
+(1939 ) 21.8426 Tj
+0 -408.214 Td
+(1940 ) 21.8426 Tj
+0 -417.708 Td
+(1941 ) 21.8426 Tj
+0 -427.201 Td
+(1942 ) 21.8426 Tj
+0 -436.695 Td
+(1943 ) 21.8426 Tj
+0 -446.188 Td
+(1944 ) 21.8426 Tj
+0 -455.681 Td
+(1945 ) 21.8426 Tj
+0 -465.175 Td
+(1946 ) 21.8426 Tj
+0 -474.668 Td
+(1947 ) 21.8426 Tj
+0 -484.161 Td
+(1948 ) 21.8426 Tj
+0 -493.655 Td
+(1949 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/proc.h  Page 2) 22.274 Tj
-0 -3.92728 Td
-(1950 // Process memory is laid out contiguously:) 28.896 Tj
-0 -5.23637 Td
-(1951 //   text) 8.428 Tj
-0 -6.54546 Td
-(1952 //   original data and bss) 18.662 Tj
-0 -7.85455 Td
-(1953 //   fixed-size stack) 15.652 Tj
-0 -9.16364 Td
-(1954 //   expandable heap) 15.05 Tj
-0 -10.4727 Td
-(1955 ) 3.01 Tj
-0 -11.7818 Td
-(1956 extern struct proc proc[];) 18.662 Tj
-0 -13.0909 Td
-(1957 extern struct proc *curproc[NCPU];  // Current \(running\) process per CPU) 46.354 Tj
-0 -14.4 Td
-(1958 ) 3.01 Tj
-0 -15.7091 Td
-(1959 #define MPSTACK 512) 14.448 Tj
-0 -17.0182 Td
-(1960 ) 3.01 Tj
-0 -18.3273 Td
-(1961 // Per-CPU state) 12.642 Tj
-0 -19.6364 Td
-(1962 struct cpu {) 10.234 Tj
-0 -20.9455 Td
-(1963   uchar apicid;               // Local APIC ID) 30.702 Tj
-0 -22.2545 Td
-(1964   struct jmpbuf jmpbuf;       // Jump here to enter scheduler) 39.732 Tj
-0 -23.5636 Td
-(1965   struct taskstate ts;        // Used by x86 to find stack for interrupt) 46.354 Tj
-0 -24.8727 Td
-(1966   struct segdesc gdt[NSEGS];  // x86 global descriptor table) 39.13 Tj
-0 -26.1818 Td
-(1967   char mpstack[MPSTACK];      // Per-CPU startup stack) 35.518 Tj
-0 -27.4909 Td
-(1968   volatile int booted;        // Has the CPU started?) 34.916 Tj
-0 -28.8 Td
-(1969   int nlock;                  // Number of locks currently held) 40.936 Tj
-0 -30.1091 Td
-(1970 };) 4.214 Tj
-0 -31.4182 Td
-(1971 ) 3.01 Tj
-0 -32.7273 Td
-(1972 extern struct cpu cpus[NCPU];) 20.468 Tj
-0 -34.0364 Td
-(1973 extern int ncpu;) 12.642 Tj
-0 -35.3454 Td
-(1974 ) 3.01 Tj
-0 -36.6545 Td
-(1975 ) 3.01 Tj
-0 -37.9636 Td
-(1976 ) 3.01 Tj
-0 -39.2727 Td
-(1977 ) 3.01 Tj
-0 -40.5818 Td
-(1978 ) 3.01 Tj
-0 -41.8909 Td
-(1979 ) 3.01 Tj
-0 -43.2 Td
-(1980 ) 3.01 Tj
-0 -44.5091 Td
-(1981 ) 3.01 Tj
-0 -45.8182 Td
-(1982 ) 3.01 Tj
-0 -47.1272 Td
-(1983 ) 3.01 Tj
-0 -48.4363 Td
-(1984 ) 3.01 Tj
-0 -49.7454 Td
-(1985 ) 3.01 Tj
-0 -51.0545 Td
-(1986 ) 3.01 Tj
-0 -52.3636 Td
-(1987 ) 3.01 Tj
-0 -53.6727 Td
-(1988 ) 3.01 Tj
-0 -54.9818 Td
-(1989 ) 3.01 Tj
-0 -56.2909 Td
-(1990 ) 3.01 Tj
-0 -57.6 Td
-(1991 ) 3.01 Tj
-0 -58.9091 Td
-(1992 ) 3.01 Tj
-0 -60.2181 Td
-(1993 ) 3.01 Tj
-0 -61.5272 Td
-(1994 ) 3.01 Tj
-0 -62.8363 Td
-(1995 ) 3.01 Tj
-0 -64.1454 Td
-(1996 ) 3.01 Tj
-0 -65.4545 Td
-(1997 ) 3.01 Tj
-0 -66.7636 Td
-(1998 ) 3.01 Tj
-0 -68.0727 Td
-(1999 ) 3.01 Tj
-0 -72 Td
-(Sheet 19) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/proc.c  Page 8) 161.635 Tj
+0 -28.4801 Td
+(1950 // Wake up all processes sleeping on chan.) 205.32 Tj
+0 -37.9735 Td
+(1951 // Proc_table_lock must be held.) 161.635 Tj
+0 -47.4668 Td
+(1952 static void) 69.8962 Tj
+0 -56.9602 Td
+(1953 wakeup1\(void *chan\)) 104.844 Tj
+0 -66.4535 Td
+(1954 {) 26.2111 Tj
+0 -75.9469 Td
+(1955   struct proc *p;) 96.1073 Tj
+0 -85.4403 Td
+(1956 ) 21.8426 Tj
+0 -94.9336 Td
+(1957   for\(p = proc; p < &proc[NPROC]; p++\)) 187.846 Tj
+0 -104.427 Td
+(1958     if\(p->state == SLEEPING && p->chan == chan\)) 227.163 Tj
+0 -113.92 Td
+(1959       p->state = RUNNABLE;) 135.424 Tj
+0 -123.414 Td
+(1960 }) 26.2111 Tj
+0 -132.907 Td
+(1961 ) 21.8426 Tj
+0 -142.4 Td
+(1962 // Wake up all processes sleeping on chan.) 205.32 Tj
+0 -151.894 Td
+(1963 // Proc_table_lock is acquired and released.) 214.057 Tj
+0 -161.387 Td
+(1964 void) 39.3166 Tj
+0 -170.88 Td
+(1965 wakeup\(void *chan\)) 100.476 Tj
+0 -180.374 Td
+(1966 {) 26.2111 Tj
+0 -189.867 Td
+(1967   acquire\(&proc_table_lock\);) 144.161 Tj
+0 -199.361 Td
+(1968   wakeup1\(chan\);) 91.7388 Tj
+0 -208.854 Td
+(1969   release\(&proc_table_lock\);) 144.161 Tj
+0 -218.347 Td
+(1970 }) 26.2111 Tj
+0 -227.841 Td
+(1971 ) 21.8426 Tj
+0 -237.334 Td
+(1972 // Kill the process with the given pid.) 192.215 Tj
+0 -246.827 Td
+(1973 // Process won't actually exit until it returns) 227.163 Tj
+0 -256.321 Td
+(1974 // to user space \(see trap in trap.c\).) 187.846 Tj
+0 -265.814 Td
+(1975 int) 34.9481 Tj
+0 -275.307 Td
+(1976 kill\(int pid\)) 78.6333 Tj
+0 -284.801 Td
+(1977 {) 26.2111 Tj
+0 -294.294 Td
+(1978   struct proc *p;) 96.1073 Tj
+0 -303.788 Td
+(1979 ) 21.8426 Tj
+0 -313.281 Td
+(1980   acquire\(&proc_table_lock\);) 144.161 Tj
+0 -322.774 Td
+(1981   for\(p = proc; p < &proc[NPROC]; p++\){) 192.215 Tj
+0 -332.268 Td
+(1982     if\(p->pid == pid\){) 117.95 Tj
+0 -341.761 Td
+(1983       p->killed = 1;) 109.213 Tj
+0 -351.254 Td
+(1984       // Wake process from sleep if necessary.) 222.794 Tj
+0 -360.748 Td
+(1985       if\(p->state == SLEEPING\)) 152.898 Tj
+0 -370.241 Td
+(1986         p->state = RUNNABLE;) 144.161 Tj
+0 -379.734 Td
+(1987       release\(&proc_table_lock\);) 161.635 Tj
+0 -389.228 Td
+(1988       return 0;) 87.3703 Tj
+0 -398.721 Td
+(1989     }) 43.6851 Tj
+0 -408.214 Td
+(1990   }) 34.9481 Tj
+0 -417.708 Td
+(1991   release\(&proc_table_lock\);) 144.161 Tj
+0 -427.201 Td
+(1992   return -1;) 74.2647 Tj
+0 -436.695 Td
+(1993 }) 26.2111 Tj
+0 -446.188 Td
+(1994 ) 21.8426 Tj
+0 -455.681 Td
+(1995 ) 21.8426 Tj
+0 -465.175 Td
+(1996 ) 21.8426 Tj
+0 -474.668 Td
+(1997 ) 21.8426 Tj
+0 -484.161 Td
+(1998 ) 21.8426 Tj
+0 -493.655 Td
+(1999 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 19) 34.9481 Tj
 Q
 Q
 Q
@@ -8516,6 +9058,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -8523,241 +9068,255 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/proc.c  Page 1) 22.274 Tj
-0 -3.92728 Td
-(2000 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(2001 #include "mmu.h") 12.642 Tj
-0 -6.54546 Td
-(2002 #include "x86.h") 12.642 Tj
-0 -7.85455 Td
-(2003 #include "param.h") 13.846 Tj
-0 -9.16364 Td
-(2004 #include "file.h") 13.244 Tj
-0 -10.4727 Td
-(2005 #include "proc.h") 13.244 Tj
-0 -11.7818 Td
-(2006 #include "defs.h") 13.244 Tj
-0 -13.0909 Td
-(2007 #include "spinlock.h") 15.652 Tj
-0 -14.4 Td
-(2008 ) 3.01 Tj
-0 -15.7091 Td
-(2009 struct spinlock proc_table_lock;) 22.274 Tj
-0 -17.0182 Td
-(2010 ) 3.01 Tj
-0 -18.3273 Td
-(2011 struct proc proc[NPROC];) 17.458 Tj
-0 -19.6364 Td
-(2012 struct proc *curproc[NCPU];) 19.264 Tj
-0 -20.9455 Td
-(2013 int next_pid = 1;) 13.244 Tj
-0 -22.2545 Td
-(2014 extern void forkret\(void\);) 18.662 Tj
-0 -23.5636 Td
-(2015 extern void forkret1\(struct trapframe*\);) 27.09 Tj
-0 -24.8727 Td
-(2016 ) 3.01 Tj
-0 -26.1818 Td
-(2017 void) 5.418 Tj
-0 -27.4909 Td
-(2018 pinit\(void\)) 9.632 Tj
-0 -28.8 Td
-(2019 {) 3.612 Tj
-0 -30.1091 Td
-(2020   initlock\(&proc_table_lock, "proc_table"\);) 28.896 Tj
-0 -31.4182 Td
-(2021 }) 3.612 Tj
-0 -32.7273 Td
-(2022 ) 3.01 Tj
-0 -34.0364 Td
-(2023 // Set up CPU's segment descriptors and task state for a) 36.722 Tj
-0 -35.3454 Td
-(2024 // given process.) 13.244 Tj
-0 -36.6545 Td
-(2025 // If p==0, set up for "idle" state for when scheduler\(\)) 36.722 Tj
-0 -37.9636 Td
-(2026 // is idling, not running any process.) 25.886 Tj
-0 -39.2727 Td
-(2027 void) 5.418 Tj
-0 -40.5818 Td
-(2028 setupsegs\(struct proc *p\)) 18.06 Tj
-0 -41.8909 Td
-(2029 {) 3.612 Tj
-0 -43.2 Td
-(2030   struct cpu *c = &cpus[cpu\(\)];) 21.672 Tj
-0 -44.5091 Td
-(2031 ) 3.01 Tj
-0 -45.8182 Td
-(2032   c->ts.ss0 = SEG_KDATA << 3;) 20.468 Tj
-0 -47.1272 Td
-(2033   if\(p\){) 7.826 Tj
-0 -48.4363 Td
-(2034     c->ts.esp0 = \(uint\)\(p->kstack + KSTACKSIZE\);) 31.906 Tj
-0 -49.7454 Td
-(2035   } else {) 9.03 Tj
-0 -51.0545 Td
-(2036     c->ts.esp0 = 0xffffffff;) 19.866 Tj
-0 -52.3636 Td
-(2037   }) 4.816 Tj
-0 -53.6727 Td
-(2038 ) 3.01 Tj
-0 -54.9818 Td
-(2039   c->gdt[0] = SEG_NULL;) 16.856 Tj
-0 -56.2909 Td
-(2040   c->gdt[SEG_KCODE] = SEG\(STA_X|STA_R, 0, 0x100000 + 64*1024, 0\);) 42.14 Tj
-0 -57.6 Td
-(2041   c->gdt[SEG_KDATA] = SEG\(STA_W, 0, 0xffffffff, 0\);) 33.712 Tj
-0 -58.9091 Td
-(2042   c->gdt[SEG_TSS] = SEG16\(STS_T32A, \(uint\) &c->ts, sizeof\(c->ts\), 0\);) 44.548 Tj
-0 -60.2181 Td
-(2043   c->gdt[SEG_TSS].s = 0;) 17.458 Tj
-0 -61.5272 Td
-(2044   if\(p\){) 7.826 Tj
-0 -62.8363 Td
-(2045     c->gdt[SEG_UCODE] = SEG\(STA_X|STA_R, \(uint\)p->mem, p->sz, 3\);) 42.14 Tj
-0 -64.1454 Td
-(2046     c->gdt[SEG_UDATA] = SEG\(STA_W, \(uint\)p->mem, p->sz, 3\);) 38.528 Tj
-0 -65.4545 Td
-(2047   } else {) 9.03 Tj
-0 -66.7636 Td
-(2048     c->gdt[SEG_UCODE] = SEG_NULL;) 22.876 Tj
-0 -68.0727 Td
-(2049     c->gdt[SEG_UDATA] = SEG_NULL;) 22.876 Tj
-0 -72 Td
-(Sheet 20) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/proc.c  Page 9) 161.635 Tj
+0 -28.4801 Td
+(2000 // Exit the current process.  Does not return.) 222.794 Tj
+0 -37.9735 Td
+(2001 // Exited processes remain in the zombie state) 222.794 Tj
+0 -47.4668 Td
+(2002 // until their parent calls wait\(\) to find out they exit\
+ed.) 279.585 Tj
+0 -56.9602 Td
+(2003 void) 39.3166 Tj
+0 -66.4535 Td
+(2004 exit\(void\)) 65.5277 Tj
+0 -75.9469 Td
+(2005 {) 26.2111 Tj
+0 -85.4403 Td
+(2006   struct proc *p;) 96.1073 Tj
+0 -94.9336 Td
+(2007   int fd;) 61.1592 Tj
+0 -104.427 Td
+(2008 ) 21.8426 Tj
+0 -113.92 Td
+(2009   if\(cp == initproc\)) 109.213 Tj
+0 -123.414 Td
+(2010     panic\("init exiting"\);) 135.424 Tj
+0 -132.907 Td
+(2011 ) 21.8426 Tj
+0 -142.4 Td
+(2012   // Close all open files.) 135.424 Tj
+0 -151.894 Td
+(2013   for\(fd = 0; fd < NOFILE; fd++\){) 166.004 Tj
+0 -161.387 Td
+(2014     if\(cp->ofile[fd]\){) 117.95 Tj
+0 -170.88 Td
+(2015       fileclose\(cp->ofile[fd]\);) 157.267 Tj
+0 -180.374 Td
+(2016       cp->ofile[fd] = 0;) 126.687 Tj
+0 -189.867 Td
+(2017     }) 43.6851 Tj
+0 -199.361 Td
+(2018   }) 34.9481 Tj
+0 -208.854 Td
+(2019 ) 21.8426 Tj
+0 -218.347 Td
+(2020   iput\(cp->cwd\);) 91.7388 Tj
+0 -227.841 Td
+(2021   cp->cwd = 0;) 83.0018 Tj
+0 -237.334 Td
+(2022 ) 21.8426 Tj
+0 -246.827 Td
+(2023   acquire\(&proc_table_lock\);) 144.161 Tj
+0 -256.321 Td
+(2024 ) 21.8426 Tj
+0 -265.814 Td
+(2025   // Parent might be sleeping in proc_wait.) 209.689 Tj
+0 -275.307 Td
+(2026   wakeup1\(cp->parent\);) 117.95 Tj
+0 -284.801 Td
+(2027 ) 21.8426 Tj
+0 -294.294 Td
+(2028   // Pass abandoned children to init.) 183.478 Tj
+0 -303.788 Td
+(2029   for\(p = proc; p < &proc[NPROC]; p++\){) 192.215 Tj
+0 -313.281 Td
+(2030     if\(p->parent == cp\){) 126.687 Tj
+0 -322.774 Td
+(2031       p->parent = initproc;) 139.792 Tj
+0 -332.268 Td
+(2032       if\(p->state == ZOMBIE\)) 144.161 Tj
+0 -341.761 Td
+(2033         wakeup1\(initproc\);) 135.424 Tj
+0 -351.254 Td
+(2034     }) 43.6851 Tj
+0 -360.748 Td
+(2035   }) 34.9481 Tj
+0 -370.241 Td
+(2036 ) 21.8426 Tj
+0 -379.734 Td
+(2037   // Jump into the scheduler, never to return.) 222.794 Tj
+0 -389.228 Td
+(2038   cp->killed = 0;) 96.1073 Tj
+0 -398.721 Td
+(2039   cp->state = ZOMBIE;) 113.581 Tj
+0 -408.214 Td
+(2040   sched\(\);) 65.5277 Tj
+0 -417.708 Td
+(2041   panic\("zombie exit"\);) 122.318 Tj
+0 -427.201 Td
+(2042 }) 26.2111 Tj
+0 -436.695 Td
+(2043 ) 21.8426 Tj
+0 -446.188 Td
+(2044 ) 21.8426 Tj
+0 -455.681 Td
+(2045 ) 21.8426 Tj
+0 -465.175 Td
+(2046 ) 21.8426 Tj
+0 -474.668 Td
+(2047 ) 21.8426 Tj
+0 -484.161 Td
+(2048 ) 21.8426 Tj
+0 -493.655 Td
+(2049 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/proc.c  Page 2) 22.274 Tj
-0 -3.92728 Td
-(2050   }) 4.816 Tj
-0 -5.23637 Td
-(2051 ) 3.01 Tj
-0 -6.54546 Td
-(2052   lgdt\(c->gdt, sizeof c->gdt\);) 21.07 Tj
-0 -7.85455 Td
-(2053   ltr\(SEG_TSS << 3\);) 15.05 Tj
-0 -9.16364 Td
-(2054 }) 3.612 Tj
-0 -10.4727 Td
-(2055 ) 3.01 Tj
-0 -11.7818 Td
-(2056 // Grow current process's memory by n bytes.) 29.498 Tj
-0 -13.0909 Td
-(2057 // Return old size on success, -1 on failure.) 30.1 Tj
-0 -14.4 Td
-(2058 int) 4.816 Tj
-0 -15.7091 Td
-(2059 growproc\(int n\)) 12.04 Tj
-0 -17.0182 Td
-(2060 {) 3.612 Tj
-0 -18.3273 Td
-(2061   struct proc *cp = curproc[cpu\(\)];) 24.08 Tj
-0 -19.6364 Td
-(2062   char *newmem, *oldmem;) 17.458 Tj
-0 -20.9455 Td
-(2063 ) 3.01 Tj
-0 -22.2545 Td
-(2064   newmem = kalloc\(cp->sz + n\);) 21.07 Tj
-0 -23.5636 Td
-(2065   if\(newmem == 0\)) 13.244 Tj
-0 -24.8727 Td
-(2066     return 0xffffffff;) 16.254 Tj
-0 -26.1818 Td
-(2067   memmove\(newmem, cp->mem, cp->sz\);) 24.08 Tj
-0 -27.4909 Td
-(2068   memset\(newmem + cp->sz, 0, n\);) 22.274 Tj
-0 -28.8 Td
-(2069   oldmem = cp->mem;) 14.448 Tj
-0 -30.1091 Td
-(2070   cp->mem = newmem;) 14.448 Tj
-0 -31.4182 Td
-(2071   kfree\(oldmem, cp->sz\);) 17.458 Tj
-0 -32.7273 Td
-(2072   cp->sz += n;) 11.438 Tj
-0 -34.0364 Td
-(2073   return cp->sz - n;) 15.05 Tj
-0 -35.3454 Td
-(2074 }) 3.612 Tj
-0 -36.6545 Td
-(2075 ) 3.01 Tj
-0 -37.9636 Td
-(2076 // Look in the process table for an UNUSED proc.) 31.906 Tj
-0 -39.2727 Td
-(2077 // If found, change state to EMBRYO and return it.) 33.11 Tj
-0 -40.5818 Td
-(2078 // Otherwise return 0.) 16.254 Tj
-0 -41.8909 Td
-(2079 struct proc*) 10.234 Tj
-0 -43.2 Td
-(2080 allocproc\(void\)) 12.04 Tj
-0 -44.5091 Td
-(2081 {) 3.612 Tj
-0 -45.8182 Td
-(2082   int i;) 7.826 Tj
-0 -47.1272 Td
-(2083   struct proc *p;) 13.244 Tj
-0 -48.4363 Td
-(2084 ) 3.01 Tj
-0 -49.7454 Td
-(2085   for\(i = 0; i < NPROC; i++\){) 20.468 Tj
-0 -51.0545 Td
-(2086     p = &proc[i];) 13.244 Tj
-0 -52.3636 Td
-(2087     if\(p->state == UNUSED\){) 19.264 Tj
-0 -53.6727 Td
-(2088       p->state = EMBRYO;) 17.458 Tj
-0 -54.9818 Td
-(2089       return p;) 12.04 Tj
-0 -56.2909 Td
-(2090     }) 6.02 Tj
-0 -57.6 Td
-(2091   }) 4.816 Tj
-0 -58.9091 Td
-(2092   return 0;) 9.632 Tj
-0 -60.2181 Td
-(2093 }) 3.612 Tj
-0 -61.5272 Td
-(2094 ) 3.01 Tj
-0 -62.8363 Td
-(2095 ) 3.01 Tj
-0 -64.1454 Td
-(2096 ) 3.01 Tj
-0 -65.4545 Td
-(2097 ) 3.01 Tj
-0 -66.7636 Td
-(2098 ) 3.01 Tj
-0 -68.0727 Td
-(2099 ) 3.01 Tj
-0 -72 Td
-(Sheet 20) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/proc.c  Page 10) 166.004 Tj
+0 -28.4801 Td
+(2050 // Wait for a child process to exit and return its pid.) 262.111 Tj
+0 -37.9735 Td
+(2051 // Return -1 if this process has no children.) 218.426 Tj
+0 -47.4668 Td
+(2052 int) 34.9481 Tj
+0 -56.9602 Td
+(2053 wait\(void\)) 65.5277 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   int i, havekids, pid;) 122.318 Tj
+0 -94.9336 Td
+(2057 ) 21.8426 Tj
+0 -104.427 Td
+(2058   acquire\(&proc_table_lock\);) 144.161 Tj
+0 -113.92 Td
+(2059   for\(;;\){) 65.5277 Tj
+0 -123.414 Td
+(2060     // Scan through table looking for zombie children.) 257.742 Tj
+0 -132.907 Td
+(2061     havekids = 0;) 96.1073 Tj
+0 -142.4 Td
+(2062     for\(i = 0; i < NPROC; i++\){) 157.267 Tj
+0 -151.894 Td
+(2063       p = &proc[i];) 104.844 Tj
+0 -161.387 Td
+(2064       if\(p->state == UNUSED\)) 144.161 Tj
+0 -170.88 Td
+(2065         continue;) 96.1073 Tj
+0 -180.374 Td
+(2066       if\(p->parent == cp\){) 135.424 Tj
+0 -189.867 Td
+(2067         if\(p->state == ZOMBIE\){) 157.267 Tj
+0 -199.361 Td
+(2068           // Found one.) 122.318 Tj
+0 -208.854 Td
+(2069           kfree\(p->mem, p->sz\);) 157.267 Tj
+0 -218.347 Td
+(2070           kfree\(p->kstack, KSTACKSIZE\);) 192.215 Tj
+0 -227.841 Td
+(2071           pid = p->pid;) 122.318 Tj
+0 -237.334 Td
+(2072           p->state = UNUSED;) 144.161 Tj
+0 -246.827 Td
+(2073           p->pid = 0;) 113.581 Tj
+0 -256.321 Td
+(2074           p->parent = 0;) 126.687 Tj
+0 -265.814 Td
+(2075           p->name[0] = 0;) 131.055 Tj
+0 -275.307 Td
+(2076           release\(&proc_table_lock\);) 179.109 Tj
+0 -284.801 Td
+(2077           return pid;) 113.581 Tj
+0 -294.294 Td
+(2078         }) 61.1592 Tj
+0 -303.788 Td
+(2079         havekids = 1;) 113.581 Tj
+0 -313.281 Td
+(2080       }) 52.4222 Tj
+0 -322.774 Td
+(2081     }) 43.6851 Tj
+0 -332.268 Td
+(2082 ) 21.8426 Tj
+0 -341.761 Td
+(2083     // No point waiting if we don't have any children.) 257.742 Tj
+0 -351.254 Td
+(2084     if\(!havekids || cp->killed\){) 161.635 Tj
+0 -360.748 Td
+(2085       release\(&proc_table_lock\);) 161.635 Tj
+0 -370.241 Td
+(2086       return -1;) 91.7388 Tj
+0 -379.734 Td
+(2087     }) 43.6851 Tj
+0 -389.228 Td
+(2088 ) 21.8426 Tj
+0 -398.721 Td
+(2089     // Wait for children to exit.  \(See wakeup1 call in p\
+roc_exit.\)) 314.533 Tj
+0 -408.214 Td
+(2090     sleep\(cp, &proc_table_lock\);) 161.635 Tj
+0 -417.708 Td
+(2091   }) 34.9481 Tj
+0 -427.201 Td
+(2092 }) 26.2111 Tj
+0 -436.695 Td
+(2093 ) 21.8426 Tj
+0 -446.188 Td
+(2094 ) 21.8426 Tj
+0 -455.681 Td
+(2095 ) 21.8426 Tj
+0 -465.175 Td
+(2096 ) 21.8426 Tj
+0 -474.668 Td
+(2097 ) 21.8426 Tj
+0 -484.161 Td
+(2098 ) 21.8426 Tj
+0 -493.655 Td
+(2099 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 20) 34.9481 Tj
 Q
 Q
 Q
@@ -8768,7 +9327,10 @@ pdfEndPage
 %%Page: 28 28
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -8776,241 +9338,256 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/proc.c  Page 3) 22.274 Tj
-0 -3.92728 Td
-(2100 // Create a new process copying p as the parent.) 31.906 Tj
-0 -5.23637 Td
-(2101 // Does not copy the kernel stack.) 23.478 Tj
-0 -6.54546 Td
-(2102 // Instead, sets up stack to return as if from system call.) 38.528 Tj
-0 -7.85455 Td
-(2103 // Caller must arrange for process to run \(set state to RUNNABLE\).) 42.742 Tj
-0 -9.16364 Td
-(2104 struct proc*) 10.234 Tj
-0 -10.4727 Td
-(2105 copyproc\(struct proc *p\)) 17.458 Tj
-0 -11.7818 Td
-(2106 {) 3.612 Tj
-0 -13.0909 Td
-(2107   int i;) 7.826 Tj
-0 -14.4 Td
-(2108   struct proc *np;) 13.846 Tj
-0 -15.7091 Td
-(2109 ) 3.01 Tj
-0 -17.0182 Td
-(2110   // Allocate process.) 16.254 Tj
-0 -18.3273 Td
-(2111   acquire\(&proc_table_lock\);) 19.866 Tj
-0 -19.6364 Td
-(2112   if\(\(np = allocproc\(\)\) == 0\){) 21.07 Tj
-0 -20.9455 Td
-(2113     release\(&proc_table_lock\);) 21.07 Tj
-0 -22.2545 Td
-(2114     return 0;) 10.836 Tj
-0 -23.5636 Td
-(2115   }) 4.816 Tj
-0 -24.8727 Td
-(2116   np->pid = next_pid++;) 16.856 Tj
-0 -26.1818 Td
-(2117   np->ppid = p->pid;) 15.05 Tj
-0 -27.4909 Td
-(2118   release\(&proc_table_lock\);) 19.866 Tj
-0 -28.8 Td
-(2119 ) 3.01 Tj
-0 -30.1091 Td
-(2120   // Copy user memory.) 16.254 Tj
-0 -31.4182 Td
-(2121   np->sz = p->sz;) 13.244 Tj
-0 -32.7273 Td
-(2122   np->mem = kalloc\(np->sz\);) 19.264 Tj
-0 -34.0364 Td
-(2123   if\(np->mem == 0\){) 14.448 Tj
-0 -35.3454 Td
-(2124     np->state = UNUSED;) 16.856 Tj
-0 -36.6545 Td
-(2125     return 0;) 10.836 Tj
-0 -37.9636 Td
-(2126   }) 4.816 Tj
-0 -39.2727 Td
-(2127   memmove\(np->mem, p->mem, np->sz\);) 24.08 Tj
-0 -40.5818 Td
-(2128 ) 3.01 Tj
-0 -41.8909 Td
-(2129   // Allocate kernel stack.) 19.264 Tj
-0 -43.2 Td
-(2130   np->kstack = kalloc\(KSTACKSIZE\);) 23.478 Tj
-0 -44.5091 Td
-(2131   if\(np->kstack == 0\){) 16.254 Tj
-0 -45.8182 Td
-(2132     kfree\(np->mem, np->sz\);) 19.264 Tj
-0 -47.1272 Td
-(2133     np->mem = 0;) 12.642 Tj
-0 -48.4363 Td
-(2134     np->state = UNUSED;) 16.856 Tj
-0 -49.7454 Td
-(2135     return 0;) 10.836 Tj
-0 -51.0545 Td
-(2136   }) 4.816 Tj
-0 -52.3636 Td
-(2137 ) 3.01 Tj
-0 -53.6727 Td
-(2138   // Copy trapframe registers from parent.) 28.294 Tj
-0 -54.9818 Td
-(2139   np->tf = \(struct trapframe*\)\(np->kstack + KSTACKSIZE\) - 1;) 39.13 Tj
-0 -56.2909 Td
-(2140   memmove\(np->tf, p->tf, sizeof\(*np->tf\)\);) 28.294 Tj
-0 -57.6 Td
-(2141 ) 3.01 Tj
-0 -58.9091 Td
-(2142   // Clear %eax so that fork system call returns 0 in child.) 39.13 Tj
-0 -60.2181 Td
-(2143   np->tf->eax = 0;) 13.846 Tj
-0 -61.5272 Td
-(2144 ) 3.01 Tj
-0 -62.8363 Td
-(2145   // Set up new jmpbuf to start executing at forkret \(see below\).) 42.14 Tj
-0 -64.1454 Td
-(2146   memset\(&np->jmpbuf, 0, sizeof np->jmpbuf\);) 29.498 Tj
-0 -65.4545 Td
-(2147   np->jmpbuf.eip = \(uint\)forkret;) 22.876 Tj
-0 -66.7636 Td
-(2148   np->jmpbuf.esp = \(uint\)np->tf - 4;) 24.682 Tj
-0 -68.0727 Td
-(2149 ) 3.01 Tj
-0 -72 Td
-(Sheet 21) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/proc.c  Page 11) 166.004 Tj
+0 -28.4801 Td
+(2100 // Print a process listing to console.  For debugging.) 257.742 Tj
+0 -37.9735 Td
+(2101 // Runs when user types ^P on console.) 187.846 Tj
+0 -47.4668 Td
+(2102 // No lock to avoid wedging a stuck machine further.) 249.005 Tj
+0 -56.9602 Td
+(2103 void) 39.3166 Tj
+0 -66.4535 Td
+(2104 procdump\(void\)) 83.0018 Tj
+0 -75.9469 Td
+(2105 {) 26.2111 Tj
+0 -85.4403 Td
+(2106   static char *states[] = {) 139.792 Tj
+0 -94.9336 Td
+(2107   [UNUSED]    "unused",) 122.318 Tj
+0 -104.427 Td
+(2108   [EMBRYO]    "embryo",) 122.318 Tj
+0 -113.92 Td
+(2109   [SLEEPING]  "sleep ",) 122.318 Tj
+0 -123.414 Td
+(2110   [RUNNABLE]  "runble",) 122.318 Tj
+0 -132.907 Td
+(2111   [RUNNING]   "run   ",) 122.318 Tj
+0 -142.4 Td
+(2112   [ZOMBIE]    "zombie") 117.95 Tj
+0 -151.894 Td
+(2113   };) 39.3166 Tj
+0 -161.387 Td
+(2114   int i, j;) 69.8962 Tj
+0 -170.88 Td
+(2115   struct proc *p;) 96.1073 Tj
+0 -180.374 Td
+(2116   char *state;) 83.0018 Tj
+0 -189.867 Td
+(2117   uint pc[10];) 83.0018 Tj
+0 -199.361 Td
+(2118 ) 21.8426 Tj
+0 -208.854 Td
+(2119   for\(i = 0; i < NPROC; i++\){) 148.529 Tj
+0 -218.347 Td
+(2120     p = &proc[i];) 96.1073 Tj
+0 -227.841 Td
+(2121     if\(p->state == UNUSED\)) 135.424 Tj
+0 -237.334 Td
+(2122       continue;) 87.3703 Tj
+0 -246.827 Td
+(2123     if\(p->state >= 0 && p->state < NELEM\(states\) && sta\
+tes[p->state]\)) 323.27 Tj
+0 -256.321 Td
+(2124       state = states[p->state];) 157.267 Tj
+0 -265.814 Td
+(2125     else) 56.7907 Tj
+0 -275.307 Td
+(2126       state = "???";) 109.213 Tj
+0 -284.801 Td
+(2127     cprintf\("%d %s %s", p->pid, state, p->name\);) 231.531 Tj
+0 -294.294 Td
+(2128     if\(p->state == SLEEPING\){) 148.529 Tj
+0 -303.788 Td
+(2129       getcallerpcs\(\(uint*\)p->context.ebp+2, pc\);) 231.531 Tj
+0 -313.281 Td
+(2130       for\(j=0; j<10 && pc[j] != 0; j++\)) 192.215 Tj
+0 -322.774 Td
+(2131         cprintf\(" %p", pc[j]\);) 152.898 Tj
+0 -332.268 Td
+(2132     }) 43.6851 Tj
+0 -341.761 Td
+(2133     cprintf\("\\n"\);) 100.476 Tj
+0 -351.254 Td
+(2134   }) 34.9481 Tj
+0 -360.748 Td
+(2135 }) 26.2111 Tj
+0 -370.241 Td
+(2136 ) 21.8426 Tj
+0 -379.734 Td
+(2137 ) 21.8426 Tj
+0 -389.228 Td
+(2138 ) 21.8426 Tj
+0 -398.721 Td
+(2139 ) 21.8426 Tj
+0 -408.214 Td
+(2140 ) 21.8426 Tj
+0 -417.708 Td
+(2141 ) 21.8426 Tj
+0 -427.201 Td
+(2142 ) 21.8426 Tj
+0 -436.695 Td
+(2143 ) 21.8426 Tj
+0 -446.188 Td
+(2144 ) 21.8426 Tj
+0 -455.681 Td
+(2145 ) 21.8426 Tj
+0 -465.175 Td
+(2146 ) 21.8426 Tj
+0 -474.668 Td
+(2147 ) 21.8426 Tj
+0 -484.161 Td
+(2148 ) 21.8426 Tj
+0 -493.655 Td
+(2149 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/proc.c  Page 4) 22.274 Tj
-0 -3.92728 Td
-(2150   // Copy file descriptors) 18.662 Tj
-0 -5.23637 Td
-(2151   for\(i = 0; i < NOFILE; i++\){) 21.07 Tj
-0 -6.54546 Td
-(2152     np->ofile[i] = p->ofile[i];) 21.672 Tj
-0 -7.85455 Td
-(2153     if\(np->ofile[i]\)) 15.05 Tj
-0 -9.16364 Td
-(2154       fileincref\(np->ofile[i]\);) 21.672 Tj
-0 -10.4727 Td
-(2155   }) 4.816 Tj
-0 -11.7818 Td
-(2156 ) 3.01 Tj
-0 -13.0909 Td
-(2157   np->cwd = p->cwd;) 14.448 Tj
-0 -14.4 Td
-(2158   iincref\(p->cwd\);) 13.846 Tj
-0 -15.7091 Td
-(2159 ) 3.01 Tj
-0 -17.0182 Td
-(2160   return np;) 10.234 Tj
-0 -18.3273 Td
-(2161 }) 3.612 Tj
-0 -19.6364 Td
-(2162 ) 3.01 Tj
-0 -20.9455 Td
-(2163 ) 3.01 Tj
-0 -22.2545 Td
-(2164 ) 3.01 Tj
-0 -23.5636 Td
-(2165 ) 3.01 Tj
-0 -24.8727 Td
-(2166 ) 3.01 Tj
-0 -26.1818 Td
-(2167 ) 3.01 Tj
-0 -27.4909 Td
-(2168 ) 3.01 Tj
-0 -28.8 Td
-(2169 ) 3.01 Tj
-0 -30.1091 Td
-(2170 ) 3.01 Tj
-0 -31.4182 Td
-(2171 ) 3.01 Tj
-0 -32.7273 Td
-(2172 ) 3.01 Tj
-0 -34.0364 Td
-(2173 ) 3.01 Tj
-0 -35.3454 Td
-(2174 ) 3.01 Tj
-0 -36.6545 Td
-(2175 ) 3.01 Tj
-0 -37.9636 Td
-(2176 ) 3.01 Tj
-0 -39.2727 Td
-(2177 ) 3.01 Tj
-0 -40.5818 Td
-(2178 ) 3.01 Tj
-0 -41.8909 Td
-(2179 ) 3.01 Tj
-0 -43.2 Td
-(2180 ) 3.01 Tj
-0 -44.5091 Td
-(2181 ) 3.01 Tj
-0 -45.8182 Td
-(2182 ) 3.01 Tj
-0 -47.1272 Td
-(2183 ) 3.01 Tj
-0 -48.4363 Td
-(2184 ) 3.01 Tj
-0 -49.7454 Td
-(2185 ) 3.01 Tj
-0 -51.0545 Td
-(2186 ) 3.01 Tj
-0 -52.3636 Td
-(2187 ) 3.01 Tj
-0 -53.6727 Td
-(2188 ) 3.01 Tj
-0 -54.9818 Td
-(2189 ) 3.01 Tj
-0 -56.2909 Td
-(2190 ) 3.01 Tj
-0 -57.6 Td
-(2191 ) 3.01 Tj
-0 -58.9091 Td
-(2192 ) 3.01 Tj
-0 -60.2181 Td
-(2193 ) 3.01 Tj
-0 -61.5272 Td
-(2194 ) 3.01 Tj
-0 -62.8363 Td
-(2195 ) 3.01 Tj
-0 -64.1454 Td
-(2196 ) 3.01 Tj
-0 -65.4545 Td
-(2197 ) 3.01 Tj
-0 -66.7636 Td
-(2198 ) 3.01 Tj
-0 -68.0727 Td
-(2199 ) 3.01 Tj
-0 -72 Td
-(Sheet 21) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/swtch.S  Page 1) 166.004 Tj
+0 -28.4801 Td
+(2150 #   void swtch\(struct context *old, struct context *new\)\
+;) 270.848 Tj
+0 -37.9735 Td
+(2151 #) 26.2111 Tj
+0 -47.4668 Td
+(2152 # Save current register context in old) 187.846 Tj
+0 -56.9602 Td
+(2153 # and then load register context from new.) 205.32 Tj
+0 -66.4535 Td
+(2154 ) 21.8426 Tj
+0 -75.9469 Td
+(2155 .globl swtch) 74.2647 Tj
+0 -85.4403 Td
+(2156 swtch:) 48.0537 Tj
+0 -94.9336 Td
+(2157   # Save old registers) 117.95 Tj
+0 -104.427 Td
+(2158   movl 4\(%esp\), %eax) 109.213 Tj
+0 -113.92 Td
+(2159 ) 21.8426 Tj
+0 -123.414 Td
+(2160   popl 0\(%eax\)  # %eip) 117.95 Tj
+0 -132.907 Td
+(2161   movl %esp, 4\(%eax\)) 109.213 Tj
+0 -142.4 Td
+(2162   movl %ebx, 8\(%eax\)) 109.213 Tj
+0 -151.894 Td
+(2163   movl %ecx, 12\(%eax\)) 113.581 Tj
+0 -161.387 Td
+(2164   movl %edx, 16\(%eax\)) 113.581 Tj
+0 -170.88 Td
+(2165   movl %esi, 20\(%eax\)) 113.581 Tj
+0 -180.374 Td
+(2166   movl %edi, 24\(%eax\)) 113.581 Tj
+0 -189.867 Td
+(2167   movl %ebp, 28\(%eax\)) 113.581 Tj
+0 -199.361 Td
+(2168 ) 21.8426 Tj
+0 -208.854 Td
+(2169   # Load new registers) 117.95 Tj
+0 -218.347 Td
+(2170   movl 4\(%esp\), %eax  # not 8\(%esp\) - popped return ad\
+dress above) 305.796 Tj
+0 -227.841 Td
+(2171 ) 21.8426 Tj
+0 -237.334 Td
+(2172   movl 28\(%eax\), %ebp) 113.581 Tj
+0 -246.827 Td
+(2173   movl 24\(%eax\), %edi) 113.581 Tj
+0 -256.321 Td
+(2174   movl 20\(%eax\), %esi) 113.581 Tj
+0 -265.814 Td
+(2175   movl 16\(%eax\), %edx) 113.581 Tj
+0 -275.307 Td
+(2176   movl 12\(%eax\), %ecx) 113.581 Tj
+0 -284.801 Td
+(2177   movl 8\(%eax\), %ebx) 109.213 Tj
+0 -294.294 Td
+(2178   movl 4\(%eax\), %esp) 109.213 Tj
+0 -303.788 Td
+(2179   pushl 0\(%eax\)  # %eip) 122.318 Tj
+0 -313.281 Td
+(2180 ) 21.8426 Tj
+0 -322.774 Td
+(2181   ret) 43.6851 Tj
+0 -332.268 Td
+(2182 ) 21.8426 Tj
+0 -341.761 Td
+(2183 ) 21.8426 Tj
+0 -351.254 Td
+(2184 ) 21.8426 Tj
+0 -360.748 Td
+(2185 ) 21.8426 Tj
+0 -370.241 Td
+(2186 ) 21.8426 Tj
+0 -379.734 Td
+(2187 ) 21.8426 Tj
+0 -389.228 Td
+(2188 ) 21.8426 Tj
+0 -398.721 Td
+(2189 ) 21.8426 Tj
+0 -408.214 Td
+(2190 ) 21.8426 Tj
+0 -417.708 Td
+(2191 ) 21.8426 Tj
+0 -427.201 Td
+(2192 ) 21.8426 Tj
+0 -436.695 Td
+(2193 ) 21.8426 Tj
+0 -446.188 Td
+(2194 ) 21.8426 Tj
+0 -455.681 Td
+(2195 ) 21.8426 Tj
+0 -465.175 Td
+(2196 ) 21.8426 Tj
+0 -474.668 Td
+(2197 ) 21.8426 Tj
+0 -484.161 Td
+(2198 ) 21.8426 Tj
+0 -493.655 Td
+(2199 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 21) 34.9481 Tj
 Q
 Q
 Q
@@ -9022,6 +9599,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -9029,241 +9609,260 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/proc.c  Page 5) 22.274 Tj
-0 -3.92728 Td
-(2200 // Per-CPU process scheduler.) 20.468 Tj
-0 -5.23637 Td
-(2201 // Each CPU calls scheduler\(\) after setting itself up.) 35.518 Tj
-0 -6.54546 Td
-(2202 // Scheduler never returns.  It loops, doing:) 30.1 Tj
-0 -7.85455 Td
-(2203 //  - choose a process to run) 20.468 Tj
-0 -9.16364 Td
-(2204 //  - longjmp to start running that process) 28.896 Tj
-0 -10.4727 Td
-(2205 //  - eventually that process transfers control back) 34.314 Tj
-0 -11.7818 Td
-(2206 //      via longjmp back to the top of scheduler.) 32.508 Tj
-0 -13.0909 Td
-(2207 void) 5.418 Tj
-0 -14.4 Td
-(2208 scheduler\(void\)) 12.04 Tj
-0 -15.7091 Td
-(2209 {) 3.612 Tj
-0 -17.0182 Td
-(2210   struct proc *p;) 13.244 Tj
-0 -18.3273 Td
-(2211   int i;) 7.826 Tj
-0 -19.6364 Td
-(2212 ) 3.01 Tj
-0 -20.9455 Td
-(2213   for\(;;\){) 9.03 Tj
-0 -22.2545 Td
-(2214     // Loop over process table looking for process to run.) 37.926 Tj
-0 -23.5636 Td
-(2215     acquire\(&proc_table_lock\);) 21.07 Tj
-0 -24.8727 Td
-(2216 ) 3.01 Tj
-0 -26.1818 Td
-(2217     for\(i = 0; i < NPROC; i++\){) 21.672 Tj
-0 -27.4909 Td
-(2218       p = &proc[i];) 14.448 Tj
-0 -28.8 Td
-(2219       if\(p->state != RUNNABLE\)) 21.07 Tj
-0 -30.1091 Td
-(2220         continue;) 13.244 Tj
-0 -31.4182 Td
-(2221 ) 3.01 Tj
-0 -32.7273 Td
-(2222       // Switch to chosen process.  It is the process's job) 38.528 Tj
-0 -34.0364 Td
-(2223       // to release proc_table_lock and then reacquire it) 37.324 Tj
-0 -35.3454 Td
-(2224       // before jumping back to us.) 24.08 Tj
-0 -36.6545 Td
-(2225 ) 3.01 Tj
-0 -37.9636 Td
-(2226       setupsegs\(p\);) 14.448 Tj
-0 -39.2727 Td
-(2227       curproc[cpu\(\)] = p;) 18.06 Tj
-0 -40.5818 Td
-(2228       p->state = RUNNING;) 18.06 Tj
-0 -41.8909 Td
-(2229       if\(setjmp\(&cpus[cpu\(\)].jmpbuf\) == 0\)) 28.294 Tj
-0 -43.2 Td
-(2230         longjmp\(&p->jmpbuf\);) 19.866 Tj
-0 -44.5091 Td
-(2231 ) 3.01 Tj
-0 -45.8182 Td
-(2232       // Process is done running for now.) 27.692 Tj
-0 -47.1272 Td
-(2233       // It should have changed its p->state before coming back.) 41.538 Tj
-0 -48.4363 Td
-(2234       curproc[cpu\(\)] = 0;) 18.06 Tj
-0 -49.7454 Td
-(2235 ) 3.01 Tj
-0 -51.0545 Td
-(2236       setupsegs\(0\);) 14.448 Tj
-0 -52.3636 Td
-(2237     }) 6.02 Tj
-0 -53.6727 Td
-(2238 ) 3.01 Tj
-0 -54.9818 Td
-(2239     release\(&proc_table_lock\);) 21.07 Tj
-0 -56.2909 Td
-(2240   }) 4.816 Tj
-0 -57.6 Td
-(2241 }) 3.612 Tj
-0 -58.9091 Td
-(2242 ) 3.01 Tj
-0 -60.2181 Td
-(2243 ) 3.01 Tj
-0 -61.5272 Td
-(2244 ) 3.01 Tj
-0 -62.8363 Td
-(2245 ) 3.01 Tj
-0 -64.1454 Td
-(2246 ) 3.01 Tj
-0 -65.4545 Td
-(2247 ) 3.01 Tj
-0 -66.7636 Td
-(2248 ) 3.01 Tj
-0 -68.0727 Td
-(2249 ) 3.01 Tj
-0 -72 Td
-(Sheet 22) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/kalloc.c  Page 1) 170.372 Tj
+0 -28.4801 Td
+(2200 // Physical memory allocator, intended to allocate) 240.268 Tj
+0 -37.9735 Td
+(2201 // memory for user processes. Allocates in 4096-byte "page\
+s".) 288.322 Tj
+0 -47.4668 Td
+(2202 // Free list is kept sorted and combines adjacent pages in\
+to) 283.953 Tj
+0 -56.9602 Td
+(2203 // long runs, to make it easier to allocate big segments.) 270.848 Tj
+0 -66.4535 Td
+(2204 // One reason the page size is 4k is that the x86 segment \
+size) 292.69 Tj
+0 -75.9469 Td
+(2205 // granularity is 4k.) 113.581 Tj
+0 -85.4403 Td
+(2206 ) 21.8426 Tj
+0 -94.9336 Td
+(2207 #include "types.h") 100.476 Tj
+0 -104.427 Td
+(2208 #include "defs.h") 96.1073 Tj
+0 -113.92 Td
+(2209 #include "param.h") 100.476 Tj
+0 -123.414 Td
+(2210 #include "spinlock.h") 113.581 Tj
+0 -132.907 Td
+(2211 ) 21.8426 Tj
+0 -142.4 Td
+(2212 struct spinlock kalloc_lock;) 144.161 Tj
+0 -151.894 Td
+(2213 ) 21.8426 Tj
+0 -161.387 Td
+(2214 struct run {) 74.2647 Tj
+0 -170.88 Td
+(2215   struct run *next;) 104.844 Tj
+0 -180.374 Td
+(2216   int len; // bytes) 104.844 Tj
+0 -189.867 Td
+(2217 };) 30.5796 Tj
+0 -199.361 Td
+(2218 struct run *freelist;) 113.581 Tj
+0 -208.854 Td
+(2219 ) 21.8426 Tj
+0 -218.347 Td
+(2220 // Initialize free list of physical pages.) 205.32 Tj
+0 -227.841 Td
+(2221 // This code cheats by just considering one megabyte of) 262.111 Tj
+0 -237.334 Td
+(2222 // pages after _end.  Real systems would determine the) 257.742 Tj
+0 -246.827 Td
+(2223 // amount of memory available in the system and use it all\
+.) 279.585 Tj
+0 -256.321 Td
+(2224 void) 39.3166 Tj
+0 -265.814 Td
+(2225 kinit\(void\)) 69.8962 Tj
+0 -275.307 Td
+(2226 {) 26.2111 Tj
+0 -284.801 Td
+(2227   extern int end;) 96.1073 Tj
+0 -294.294 Td
+(2228   uint mem;) 69.8962 Tj
+0 -303.788 Td
+(2229   char *start;) 83.0018 Tj
+0 -313.281 Td
+(2230 ) 21.8426 Tj
+0 -322.774 Td
+(2231   initlock\(&kalloc_lock, "kalloc"\);) 174.741 Tj
+0 -332.268 Td
+(2232   start = \(char*\) &end;) 122.318 Tj
+0 -341.761 Td
+(2233   start = \(char*\) \(\(\(uint\)start + PAGE\) & ~\(PAGE-1\
+\)\);) 253.374 Tj
+0 -351.254 Td
+(2234   mem = 256; // assume computer has 256 pages of RAM) 249.005 Tj
+0 -360.748 Td
+(2235   cprintf\("mem = %d\\n", mem * PAGE\);) 179.109 Tj
+0 -370.241 Td
+(2236   kfree\(start, mem * PAGE\);) 139.792 Tj
+0 -379.734 Td
+(2237 }) 26.2111 Tj
+0 -389.228 Td
+(2238 ) 21.8426 Tj
+0 -398.721 Td
+(2239 ) 21.8426 Tj
+0 -408.214 Td
+(2240 ) 21.8426 Tj
+0 -417.708 Td
+(2241 ) 21.8426 Tj
+0 -427.201 Td
+(2242 ) 21.8426 Tj
+0 -436.695 Td
+(2243 ) 21.8426 Tj
+0 -446.188 Td
+(2244 ) 21.8426 Tj
+0 -455.681 Td
+(2245 ) 21.8426 Tj
+0 -465.175 Td
+(2246 ) 21.8426 Tj
+0 -474.668 Td
+(2247 ) 21.8426 Tj
+0 -484.161 Td
+(2248 ) 21.8426 Tj
+0 -493.655 Td
+(2249 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/proc.c  Page 6) 22.274 Tj
-0 -3.92728 Td
-(2250 // Enter scheduler.  Must already hold proc_table_lock) 35.518 Tj
-0 -5.23637 Td
-(2251 // and have changed curproc[cpu\(\)]->state.) 28.294 Tj
-0 -6.54546 Td
-(2252 void) 5.418 Tj
-0 -7.85455 Td
-(2253 sched\(void\)) 9.632 Tj
-0 -9.16364 Td
-(2254 {) 3.612 Tj
-0 -10.4727 Td
-(2255   struct proc *p = curproc[cpu\(\)];) 23.478 Tj
-0 -11.7818 Td
-(2256 ) 3.01 Tj
-0 -13.0909 Td
-(2257   if\(!holding\(&proc_table_lock\)\)) 22.274 Tj
-0 -14.4 Td
-(2258     panic\("sched"\);) 14.448 Tj
-0 -15.7091 Td
-(2259   if\(cpus[cpu\(\)].nlock != 1\)) 19.866 Tj
-0 -17.0182 Td
-(2260     panic\("sched locks"\);) 18.06 Tj
-0 -18.3273 Td
-(2261 ) 3.01 Tj
-0 -19.6364 Td
-(2262   if\(setjmp\(&p->jmpbuf\) == 0\)) 20.468 Tj
-0 -20.9455 Td
-(2263     longjmp\(&cpus[cpu\(\)].jmpbuf\);) 22.876 Tj
-0 -22.2545 Td
-(2264 }) 3.612 Tj
-0 -23.5636 Td
-(2265 ) 3.01 Tj
-0 -24.8727 Td
-(2266 // Give up the CPU for one scheduling round.) 29.498 Tj
-0 -26.1818 Td
-(2267 void) 5.418 Tj
-0 -27.4909 Td
-(2268 yield\(void\)) 9.632 Tj
-0 -28.8 Td
-(2269 {) 3.612 Tj
-0 -30.1091 Td
-(2270   struct proc *p = curproc[cpu\(\)];) 23.478 Tj
-0 -31.4182 Td
-(2271 ) 3.01 Tj
-0 -32.7273 Td
-(2272   acquire\(&proc_table_lock\);) 19.866 Tj
-0 -34.0364 Td
-(2273   p->state = RUNNABLE;) 16.254 Tj
-0 -35.3454 Td
-(2274   sched\(\);) 9.03 Tj
-0 -36.6545 Td
-(2275   release\(&proc_table_lock\);) 19.866 Tj
-0 -37.9636 Td
-(2276 }) 3.612 Tj
-0 -39.2727 Td
-(2277 ) 3.01 Tj
-0 -40.5818 Td
-(2278 // A fork child's very first scheduling by scheduler\(\)) 35.518 Tj
-0 -41.8909 Td
-(2279 // will longjmp here. "return" to user space.) 30.1 Tj
-0 -43.2 Td
-(2280 void) 5.418 Tj
-0 -44.5091 Td
-(2281 forkret\(void\)) 10.836 Tj
-0 -45.8182 Td
-(2282 {) 3.612 Tj
-0 -47.1272 Td
-(2283   // Still holding proc_table_lock from scheduler.) 33.11 Tj
-0 -48.4363 Td
-(2284   release\(&proc_table_lock\);) 19.866 Tj
-0 -49.7454 Td
-(2285 ) 3.01 Tj
-0 -51.0545 Td
-(2286   // Jump into assembly, never to return.) 27.692 Tj
-0 -52.3636 Td
-(2287   forkret1\(curproc[cpu\(\)]->tf\);) 21.672 Tj
-0 -53.6727 Td
-(2288 }) 3.612 Tj
-0 -54.9818 Td
-(2289 ) 3.01 Tj
-0 -56.2909 Td
-(2290 ) 3.01 Tj
-0 -57.6 Td
-(2291 ) 3.01 Tj
-0 -58.9091 Td
-(2292 ) 3.01 Tj
-0 -60.2181 Td
-(2293 ) 3.01 Tj
-0 -61.5272 Td
-(2294 ) 3.01 Tj
-0 -62.8363 Td
-(2295 ) 3.01 Tj
-0 -64.1454 Td
-(2296 ) 3.01 Tj
-0 -65.4545 Td
-(2297 ) 3.01 Tj
-0 -66.7636 Td
-(2298 ) 3.01 Tj
-0 -68.0727 Td
-(2299 ) 3.01 Tj
-0 -72 Td
-(Sheet 22) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/kalloc.c  Page 2) 170.372 Tj
+0 -28.4801 Td
+(2250 // Free the len bytes of memory pointed at by v,) 231.531 Tj
+0 -37.9735 Td
+(2251 // which normally should have been returned by a) 231.531 Tj
+0 -47.4668 Td
+(2252 // call to kalloc\(len\).  \(The exception is when) 227.163 Tj
+0 -56.9602 Td
+(2253 // initializing the allocator; see kinit above.\)) 231.531 Tj
+0 -66.4535 Td
+(2254 void) 39.3166 Tj
+0 -75.9469 Td
+(2255 kfree\(char *v, int len\)) 122.318 Tj
+0 -85.4403 Td
+(2256 {) 26.2111 Tj
+0 -94.9336 Td
+(2257   struct run *r, *rend, **rp, *p, *pend;) 196.583 Tj
+0 -104.427 Td
+(2258 ) 21.8426 Tj
+0 -113.92 Td
+(2259   if\(len <= 0 || len % PAGE\)) 144.161 Tj
+0 -123.414 Td
+(2260     panic\("kfree"\);) 104.844 Tj
+0 -132.907 Td
+(2261 ) 21.8426 Tj
+0 -142.4 Td
+(2262   // Fill with junk to catch dangling refs.) 209.689 Tj
+0 -151.894 Td
+(2263   memset\(v, 1, len\);) 109.213 Tj
+0 -161.387 Td
+(2264 ) 21.8426 Tj
+0 -170.88 Td
+(2265   acquire\(&kalloc_lock\);) 126.687 Tj
+0 -180.374 Td
+(2266   p = \(struct run*\)v;) 113.581 Tj
+0 -189.867 Td
+(2267   pend = \(struct run*\)\(v + len\);) 161.635 Tj
+0 -199.361 Td
+(2268   for\(rp=&freelist; \(r=*rp\) != 0 && r <= pend; rp=&r->n\
+ext\){) 283.953 Tj
+0 -208.854 Td
+(2269     rend = \(struct run*\)\(\(char*\)r + r->len\);) 214.057 Tj
+0 -218.347 Td
+(2270     if\(r <= p && p < rend\)) 135.424 Tj
+0 -227.841 Td
+(2271       panic\("freeing free page"\);) 166.004 Tj
+0 -237.334 Td
+(2272     if\(pend == r\){  // p next to r: replace r with p) 249.005 Tj
+0 -246.827 Td
+(2273       p->len = len + r->len;) 144.161 Tj
+0 -256.321 Td
+(2274       p->next = r->next;) 126.687 Tj
+0 -265.814 Td
+(2275       *rp = p;) 83.0018 Tj
+0 -275.307 Td
+(2276       goto out;) 87.3703 Tj
+0 -284.801 Td
+(2277     }) 43.6851 Tj
+0 -294.294 Td
+(2278     if\(rend == p\){  // r next to p: replace p with r) 249.005 Tj
+0 -303.788 Td
+(2279       r->len += len;) 109.213 Tj
+0 -313.281 Td
+(2280       if\(r->next && r->next == pend\){  // r now next to \
+r->next?) 301.427 Tj
+0 -322.774 Td
+(2281         r->len += r->next->len;) 157.267 Tj
+0 -332.268 Td
+(2282         r->next = r->next->next;) 161.635 Tj
+0 -341.761 Td
+(2283       }) 52.4222 Tj
+0 -351.254 Td
+(2284       goto out;) 87.3703 Tj
+0 -360.748 Td
+(2285     }) 43.6851 Tj
+0 -370.241 Td
+(2286   }) 34.9481 Tj
+0 -379.734 Td
+(2287   // Insert p before r in list.) 157.267 Tj
+0 -389.228 Td
+(2288   p->len = len;) 87.3703 Tj
+0 -398.721 Td
+(2289   p->next = r;) 83.0018 Tj
+0 -408.214 Td
+(2290   *rp = p;) 65.5277 Tj
+0 -417.708 Td
+(2291 ) 21.8426 Tj
+0 -427.201 Td
+(2292  out:) 43.6851 Tj
+0 -436.695 Td
+(2293   release\(&kalloc_lock\);) 126.687 Tj
+0 -446.188 Td
+(2294 }) 26.2111 Tj
+0 -455.681 Td
+(2295 ) 21.8426 Tj
+0 -465.175 Td
+(2296 ) 21.8426 Tj
+0 -474.668 Td
+(2297 ) 21.8426 Tj
+0 -484.161 Td
+(2298 ) 21.8426 Tj
+0 -493.655 Td
+(2299 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 22) 34.9481 Tj
 Q
 Q
 Q
@@ -9274,7 +9873,10 @@ pdfEndPage
 %%Page: 30 30
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -9282,241 +9884,259 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/proc.c  Page 7) 22.274 Tj
-0 -3.92728 Td
-(2300 // Atomically release lock and sleep on chan.) 30.1 Tj
-0 -5.23637 Td
-(2301 // Reacquires lock when reawakened.) 24.08 Tj
-0 -6.54546 Td
-(2302 void) 5.418 Tj
-0 -7.85455 Td
-(2303 sleep\(void *chan, struct spinlock *lk\)) 25.886 Tj
-0 -9.16364 Td
-(2304 {) 3.612 Tj
-0 -10.4727 Td
-(2305   struct proc *p = curproc[cpu\(\)];) 23.478 Tj
-0 -11.7818 Td
-(2306 ) 3.01 Tj
-0 -13.0909 Td
-(2307   if\(p == 0\)) 10.234 Tj
-0 -14.4 Td
-(2308     panic\("sleep"\);) 14.448 Tj
-0 -15.7091 Td
-(2309 ) 3.01 Tj
-0 -17.0182 Td
-(2310   if\(lk == 0\)) 10.836 Tj
-0 -18.3273 Td
-(2311     panic\("sleep without lk"\);) 21.07 Tj
-0 -19.6364 Td
-(2312 ) 3.01 Tj
-0 -20.9455 Td
-(2313   // Must acquire proc_table_lock in order to) 30.1 Tj
-0 -22.2545 Td
-(2314   // change p->state and then call sched.) 27.692 Tj
-0 -23.5636 Td
-(2315   // Once we hold proc_table_lock, we can be) 29.498 Tj
-0 -24.8727 Td
-(2316   // guaranteed that we won't miss any wakeup) 30.1 Tj
-0 -26.1818 Td
-(2317   // \(wakeup runs with proc_table_lock locked\),) 31.304 Tj
-0 -27.4909 Td
-(2318   // so it's okay to release lk.) 22.274 Tj
-0 -28.8 Td
-(2319   if\(lk != &proc_table_lock\){) 20.468 Tj
-0 -30.1091 Td
-(2320     acquire\(&proc_table_lock\);) 21.07 Tj
-0 -31.4182 Td
-(2321     release\(lk\);) 12.642 Tj
-0 -32.7273 Td
-(2322   }) 4.816 Tj
-0 -34.0364 Td
-(2323 ) 3.01 Tj
-0 -35.3454 Td
-(2324   // Go to sleep.) 13.244 Tj
-0 -36.6545 Td
-(2325   p->chan = chan;) 13.244 Tj
-0 -37.9636 Td
-(2326   p->state = SLEEPING;) 16.254 Tj
-0 -39.2727 Td
-(2327   sched\(\);) 9.03 Tj
-0 -40.5818 Td
-(2328 ) 3.01 Tj
-0 -41.8909 Td
-(2329   // Tidy up.) 10.836 Tj
-0 -43.2 Td
-(2330   p->chan = 0;) 11.438 Tj
-0 -44.5091 Td
-(2331 ) 3.01 Tj
-0 -45.8182 Td
-(2332   // Reacquire original lock.) 20.468 Tj
-0 -47.1272 Td
-(2333   if\(lk != &proc_table_lock\){) 20.468 Tj
-0 -48.4363 Td
-(2334     release\(&proc_table_lock\);) 21.07 Tj
-0 -49.7454 Td
-(2335     acquire\(lk\);) 12.642 Tj
-0 -51.0545 Td
-(2336   }) 4.816 Tj
-0 -52.3636 Td
-(2337 }) 3.612 Tj
-0 -53.6727 Td
-(2338 ) 3.01 Tj
-0 -54.9818 Td
-(2339 // Wake up all processes sleeping on chan.) 28.294 Tj
-0 -56.2909 Td
-(2340 // Proc_table_lock must be held.) 22.274 Tj
-0 -57.6 Td
-(2341 void) 5.418 Tj
-0 -58.9091 Td
-(2342 wakeup1\(void *chan\)) 14.448 Tj
-0 -60.2181 Td
-(2343 {) 3.612 Tj
-0 -61.5272 Td
-(2344   struct proc *p;) 13.244 Tj
-0 -62.8363 Td
-(2345 ) 3.01 Tj
-0 -64.1454 Td
-(2346   for\(p = proc; p < &proc[NPROC]; p++\)) 25.886 Tj
-0 -65.4545 Td
-(2347     if\(p->state == SLEEPING && p->chan == chan\)) 31.304 Tj
-0 -66.7636 Td
-(2348       p->state = RUNNABLE;) 18.662 Tj
-0 -68.0727 Td
-(2349 }) 3.612 Tj
-0 -72 Td
-(Sheet 23) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/kalloc.c  Page 3) 170.372 Tj
+0 -28.4801 Td
+(2300 // Allocate n bytes of physical memory.) 192.215 Tj
+0 -37.9735 Td
+(2301 // Returns a kernel-segment pointer.) 179.109 Tj
+0 -47.4668 Td
+(2302 // Returns 0 if the memory cannot be allocated.) 227.163 Tj
+0 -56.9602 Td
+(2303 char*) 43.6851 Tj
+0 -66.4535 Td
+(2304 kalloc\(int n\)) 78.6333 Tj
+0 -75.9469 Td
+(2305 {) 26.2111 Tj
+0 -85.4403 Td
+(2306   char *p;) 65.5277 Tj
+0 -94.9336 Td
+(2307   struct run *r, **rp;) 117.95 Tj
+0 -104.427 Td
+(2308 ) 21.8426 Tj
+0 -113.92 Td
+(2309   if\(n % PAGE || n <= 0\)) 126.687 Tj
+0 -123.414 Td
+(2310     panic\("kalloc"\);) 109.213 Tj
+0 -132.907 Td
+(2311 ) 21.8426 Tj
+0 -142.4 Td
+(2312   acquire\(&kalloc_lock\);) 126.687 Tj
+0 -151.894 Td
+(2313   for\(rp=&freelist; \(r=*rp\) != 0; rp=&r->next\){) 227.163 Tj
+0 -161.387 Td
+(2314     if\(r->len == n\){) 109.213 Tj
+0 -170.88 Td
+(2315       *rp = r->next;) 109.213 Tj
+0 -180.374 Td
+(2316       release\(&kalloc_lock\);) 144.161 Tj
+0 -189.867 Td
+(2317       return \(char*\)r;) 117.95 Tj
+0 -199.361 Td
+(2318     }) 43.6851 Tj
+0 -208.854 Td
+(2319     if\(r->len > n\){) 104.844 Tj
+0 -218.347 Td
+(2320       r->len -= n;) 100.476 Tj
+0 -227.841 Td
+(2321       p = \(char*\)r + r->len;) 144.161 Tj
+0 -237.334 Td
+(2322       release\(&kalloc_lock\);) 144.161 Tj
+0 -246.827 Td
+(2323       return p;) 87.3703 Tj
+0 -256.321 Td
+(2324     }) 43.6851 Tj
+0 -265.814 Td
+(2325   }) 34.9481 Tj
+0 -275.307 Td
+(2326   release\(&kalloc_lock\);) 126.687 Tj
+0 -284.801 Td
+(2327 ) 21.8426 Tj
+0 -294.294 Td
+(2328   cprintf\("kalloc: out of memory\\n"\);) 183.478 Tj
+0 -303.788 Td
+(2329   return 0;) 69.8962 Tj
+0 -313.281 Td
+(2330 }) 26.2111 Tj
+0 -322.774 Td
+(2331 ) 21.8426 Tj
+0 -332.268 Td
+(2332 ) 21.8426 Tj
+0 -341.761 Td
+(2333 ) 21.8426 Tj
+0 -351.254 Td
+(2334 ) 21.8426 Tj
+0 -360.748 Td
+(2335 ) 21.8426 Tj
+0 -370.241 Td
+(2336 ) 21.8426 Tj
+0 -379.734 Td
+(2337 ) 21.8426 Tj
+0 -389.228 Td
+(2338 ) 21.8426 Tj
+0 -398.721 Td
+(2339 ) 21.8426 Tj
+0 -408.214 Td
+(2340 ) 21.8426 Tj
+0 -417.708 Td
+(2341 ) 21.8426 Tj
+0 -427.201 Td
+(2342 ) 21.8426 Tj
+0 -436.695 Td
+(2343 ) 21.8426 Tj
+0 -446.188 Td
+(2344 ) 21.8426 Tj
+0 -455.681 Td
+(2345 ) 21.8426 Tj
+0 -465.175 Td
+(2346 ) 21.8426 Tj
+0 -474.668 Td
+(2347 ) 21.8426 Tj
+0 -484.161 Td
+(2348 ) 21.8426 Tj
+0 -493.655 Td
+(2349 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/proc.c  Page 8) 22.274 Tj
-0 -3.92728 Td
-(2350 // Wake up all processes sleeping on chan.) 28.294 Tj
-0 -5.23637 Td
-(2351 // Proc_table_lock is acquired and released.) 29.498 Tj
-0 -6.54546 Td
-(2352 void) 5.418 Tj
-0 -7.85455 Td
-(2353 wakeup\(void *chan\)) 13.846 Tj
-0 -9.16364 Td
-(2354 {) 3.612 Tj
-0 -10.4727 Td
-(2355   acquire\(&proc_table_lock\);) 19.866 Tj
-0 -11.7818 Td
-(2356   wakeup1\(chan\);) 12.642 Tj
-0 -13.0909 Td
-(2357   release\(&proc_table_lock\);) 19.866 Tj
-0 -14.4 Td
-(2358 }) 3.612 Tj
-0 -15.7091 Td
-(2359 ) 3.01 Tj
-0 -17.0182 Td
-(2360 // Kill the process with the given pid.) 26.488 Tj
-0 -18.3273 Td
-(2361 // Process won't actually exit until it returns) 31.304 Tj
-0 -19.6364 Td
-(2362 // to user space \(see trap in trap.c\).) 25.886 Tj
-0 -20.9455 Td
-(2363 int) 4.816 Tj
-0 -22.2545 Td
-(2364 proc_kill\(int pid\)) 13.846 Tj
-0 -23.5636 Td
-(2365 {) 3.612 Tj
-0 -24.8727 Td
-(2366   struct proc *p;) 13.244 Tj
-0 -26.1818 Td
-(2367 ) 3.01 Tj
-0 -27.4909 Td
-(2368   acquire\(&proc_table_lock\);) 19.866 Tj
-0 -28.8 Td
-(2369   for\(p = proc; p < &proc[NPROC]; p++\){) 26.488 Tj
-0 -30.1091 Td
-(2370     if\(p->pid == pid\){) 16.254 Tj
-0 -31.4182 Td
-(2371       p->killed = 1;) 15.05 Tj
-0 -32.7273 Td
-(2372       // Wake process from sleep if necessary.) 30.702 Tj
-0 -34.0364 Td
-(2373       if\(p->state == SLEEPING\)) 21.07 Tj
-0 -35.3454 Td
-(2374         p->state = RUNNABLE;) 19.866 Tj
-0 -36.6545 Td
-(2375       release\(&proc_table_lock\);) 22.274 Tj
-0 -37.9636 Td
-(2376       return 0;) 12.04 Tj
-0 -39.2727 Td
-(2377     }) 6.02 Tj
-0 -40.5818 Td
-(2378   }) 4.816 Tj
-0 -41.8909 Td
-(2379   release\(&proc_table_lock\);) 19.866 Tj
-0 -43.2 Td
-(2380   return -1;) 10.234 Tj
-0 -44.5091 Td
-(2381 }) 3.612 Tj
-0 -45.8182 Td
-(2382 ) 3.01 Tj
-0 -47.1272 Td
-(2383 // Exit the current process.  Does not return.) 30.702 Tj
-0 -48.4363 Td
-(2384 // Exited processes remain in the zombie state) 30.702 Tj
-0 -49.7454 Td
-(2385 // until their parent calls wait\(\) to find out they exited.) 38.528 Tj
-0 -51.0545 Td
-(2386 void) 5.418 Tj
-0 -52.3636 Td
-(2387 proc_exit\(void\)) 12.04 Tj
-0 -53.6727 Td
-(2388 {) 3.612 Tj
-0 -54.9818 Td
-(2389   struct proc *p;) 13.244 Tj
-0 -56.2909 Td
-(2390   struct proc *cp = curproc[cpu\(\)];) 24.08 Tj
-0 -57.6 Td
-(2391   int fd;) 8.428 Tj
-0 -58.9091 Td
-(2392 ) 3.01 Tj
-0 -60.2181 Td
-(2393   // Close all open files.) 18.662 Tj
-0 -61.5272 Td
-(2394   for\(fd = 0; fd < NOFILE; fd++\){) 22.876 Tj
-0 -62.8363 Td
-(2395     if\(cp->ofile[fd]\){) 16.254 Tj
-0 -64.1454 Td
-(2396       fileclose\(cp->ofile[fd]\);) 21.672 Tj
-0 -65.4545 Td
-(2397       cp->ofile[fd] = 0;) 17.458 Tj
-0 -66.7636 Td
-(2398     }) 6.02 Tj
-0 -68.0727 Td
-(2399   }) 4.816 Tj
-0 -72 Td
-(Sheet 23) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/traps.h  Page 1) 166.004 Tj
+0 -28.4801 Td
+(2350 // x86 trap and interrupt constants.) 179.109 Tj
+0 -37.9735 Td
+(2351 ) 21.8426 Tj
+0 -47.4668 Td
+(2352 // Processor-defined:) 113.581 Tj
+0 -56.9602 Td
+(2353 #define T_DIVIDE         0      // divide error) 227.163 Tj
+0 -66.4535 Td
+(2354 #define T_DEBUG          1      // debug exception) 240.268 Tj
+0 -75.9469 Td
+(2355 #define T_NMI            2      // non-maskable interrupt) 270.848 Tj
+0 -85.4403 Td
+(2356 #define T_BRKPT          3      // breakpoint) 218.426 Tj
+0 -94.9336 Td
+(2357 #define T_OFLOW          4      // overflow) 209.689 Tj
+0 -104.427 Td
+(2358 #define T_BOUND          5      // bounds check) 227.163 Tj
+0 -113.92 Td
+(2359 #define T_ILLOP          6      // illegal opcode) 235.9 Tj
+0 -123.414 Td
+(2360 #define T_DEVICE         7      // device not available) 262.111 Tj
+0 -132.907 Td
+(2361 #define T_DBLFLT         8      // double fault) 227.163 Tj
+0 -142.4 Td
+(2362 // #define T_COPROC      9      // reserved \(not used sin\
+ce 486\)) 301.427 Tj
+0 -151.894 Td
+(2363 #define T_TSS           10      // invalid task switch seg\
+ment) 292.69 Tj
+0 -161.387 Td
+(2364 #define T_SEGNP         11      // segment not present) 257.742 Tj
+0 -170.88 Td
+(2365 #define T_STACK         12      // stack exception) 240.268 Tj
+0 -180.374 Td
+(2366 #define T_GPFLT         13      // general protection faul\
+t) 279.585 Tj
+0 -189.867 Td
+(2367 #define T_PGFLT         14      // page fault) 218.426 Tj
+0 -199.361 Td
+(2368 // #define T_RES        15      // reserved) 209.689 Tj
+0 -208.854 Td
+(2369 #define T_FPERR         16      // floating point error) 262.111 Tj
+0 -218.347 Td
+(2370 #define T_ALIGN         17      // aligment check) 235.9 Tj
+0 -227.841 Td
+(2371 #define T_MCHK          18      // machine check) 231.531 Tj
+0 -237.334 Td
+(2372 #define T_SIMDERR       19      // SIMD floating point err\
+or) 283.953 Tj
+0 -246.827 Td
+(2373 ) 21.8426 Tj
+0 -256.321 Td
+(2374 // These are arbitrarily chosen, but with care not to over\
+lap) 288.322 Tj
+0 -265.814 Td
+(2375 // processor defined exceptions or interrupt vectors.) 253.374 Tj
+0 -275.307 Td
+(2376 #define T_SYSCALL       48      // system call) 222.794 Tj
+0 -284.801 Td
+(2377 #define T_DEFAULT      500      // catchall) 209.689 Tj
+0 -294.294 Td
+(2378 ) 21.8426 Tj
+0 -303.788 Td
+(2379 #define IRQ_OFFSET      32      // IRQ 0 corresponds to in\
+t IRQ_OFFSET) 327.639 Tj
+0 -313.281 Td
+(2380 ) 21.8426 Tj
+0 -322.774 Td
+(2381 #define IRQ_TIMER        0) 135.424 Tj
+0 -332.268 Td
+(2382 #define IRQ_KBD          1) 135.424 Tj
+0 -341.761 Td
+(2383 #define IRQ_IDE         14) 135.424 Tj
+0 -351.254 Td
+(2384 #define IRQ_ERROR       19) 135.424 Tj
+0 -360.748 Td
+(2385 #define IRQ_SPURIOUS    31) 135.424 Tj
+0 -370.241 Td
+(2386 ) 21.8426 Tj
+0 -379.734 Td
+(2387 ) 21.8426 Tj
+0 -389.228 Td
+(2388 ) 21.8426 Tj
+0 -398.721 Td
+(2389 ) 21.8426 Tj
+0 -408.214 Td
+(2390 ) 21.8426 Tj
+0 -417.708 Td
+(2391 ) 21.8426 Tj
+0 -427.201 Td
+(2392 ) 21.8426 Tj
+0 -436.695 Td
+(2393 ) 21.8426 Tj
+0 -446.188 Td
+(2394 ) 21.8426 Tj
+0 -455.681 Td
+(2395 ) 21.8426 Tj
+0 -465.175 Td
+(2396 ) 21.8426 Tj
+0 -474.668 Td
+(2397 ) 21.8426 Tj
+0 -484.161 Td
+(2398 ) 21.8426 Tj
+0 -493.655 Td
+(2399 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 23) 34.9481 Tj
 Q
 Q
 Q
@@ -9528,6 +10148,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -9535,241 +10158,253 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/proc.c  Page 9) 22.274 Tj
-0 -3.92728 Td
-(2400   idecref\(cp->cwd\);) 14.448 Tj
-0 -5.23637 Td
-(2401   cp->cwd = 0;) 11.438 Tj
-0 -6.54546 Td
-(2402 ) 3.01 Tj
-0 -7.85455 Td
-(2403   acquire\(&proc_table_lock\);) 19.866 Tj
-0 -9.16364 Td
-(2404 ) 3.01 Tj
-0 -10.4727 Td
-(2405   // Wake up our parent.) 17.458 Tj
-0 -11.7818 Td
-(2406   for\(p = proc; p < &proc[NPROC]; p++\)) 25.886 Tj
-0 -13.0909 Td
-(2407     if\(p->pid == cp->ppid\)) 18.662 Tj
-0 -14.4 Td
-(2408       wakeup1\(p\);) 13.244 Tj
-0 -15.7091 Td
-(2409 ) 3.01 Tj
-0 -17.0182 Td
-(2410   // Reparent our children to process 1.) 27.09 Tj
-0 -18.3273 Td
-(2411   for\(p = proc; p < &proc[NPROC]; p++\)) 25.886 Tj
-0 -19.6364 Td
-(2412     if\(p->ppid == cp->pid\)) 18.662 Tj
-0 -20.9455 Td
-(2413       p->ppid = 1;) 13.846 Tj
-0 -22.2545 Td
-(2414 ) 3.01 Tj
-0 -23.5636 Td
-(2415   // Jump into the scheduler, never to return.) 30.702 Tj
-0 -24.8727 Td
-(2416   cp->killed = 0;) 13.244 Tj
-0 -26.1818 Td
-(2417   cp->state = ZOMBIE;) 15.652 Tj
-0 -27.4909 Td
-(2418   sched\(\);) 9.03 Tj
-0 -28.8 Td
-(2419   panic\("zombie exit"\);) 16.856 Tj
-0 -30.1091 Td
-(2420 }) 3.612 Tj
-0 -31.4182 Td
-(2421 ) 3.01 Tj
-0 -32.7273 Td
-(2422 // Wait for a child process to exit and return its pid.) 36.12 Tj
-0 -34.0364 Td
-(2423 // Return -1 if this process has no children.) 30.1 Tj
-0 -35.3454 Td
-(2424 int) 4.816 Tj
-0 -36.6545 Td
-(2425 proc_wait\(void\)) 12.04 Tj
-0 -37.9636 Td
-(2426 {) 3.612 Tj
-0 -39.2727 Td
-(2427   struct proc *p;) 13.244 Tj
-0 -40.5818 Td
-(2428   struct proc *cp = curproc[cpu\(\)];) 24.08 Tj
-0 -41.8909 Td
-(2429   int i, havekids, pid;) 16.856 Tj
-0 -43.2 Td
-(2430 ) 3.01 Tj
-0 -44.5091 Td
-(2431   acquire\(&proc_table_lock\);) 19.866 Tj
-0 -45.8182 Td
-(2432   for\(;;\){) 9.03 Tj
-0 -47.1272 Td
-(2433     // Scan through table looking for zombie children.) 35.518 Tj
-0 -48.4363 Td
-(2434     havekids = 0;) 13.244 Tj
-0 -49.7454 Td
-(2435     for\(i = 0; i < NPROC; i++\){) 21.672 Tj
-0 -51.0545 Td
-(2436       p = &proc[i];) 14.448 Tj
-0 -52.3636 Td
-(2437       if\(p->state == UNUSED\)) 19.866 Tj
-0 -53.6727 Td
-(2438         continue;) 13.244 Tj
-0 -54.9818 Td
-(2439       if\(p->ppid == cp->pid\){) 20.468 Tj
-0 -56.2909 Td
-(2440         if\(p->state == ZOMBIE\){) 21.672 Tj
-0 -57.6 Td
-(2441           // Found one.) 16.856 Tj
-0 -58.9091 Td
-(2442           kfree\(p->mem, p->sz\);) 21.672 Tj
-0 -60.2181 Td
-(2443           kfree\(p->kstack, KSTACKSIZE\);) 26.488 Tj
-0 -61.5272 Td
-(2444           pid = p->pid;) 16.856 Tj
-0 -62.8363 Td
-(2445           p->state = UNUSED;) 19.866 Tj
-0 -64.1454 Td
-(2446           p->pid = 0;) 15.652 Tj
-0 -65.4545 Td
-(2447           p->ppid = 0;) 16.254 Tj
-0 -66.7636 Td
-(2448           release\(&proc_table_lock\);) 24.682 Tj
-0 -68.0727 Td
-(2449           return pid;) 15.652 Tj
-0 -72 Td
-(Sheet 24) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/vectors.pl  Page 1) 179.109 Tj
+0 -28.4801 Td
+(2400 #!/usr/bin/perl -w) 100.476 Tj
+0 -37.9735 Td
+(2401 ) 21.8426 Tj
+0 -47.4668 Td
+(2402 # Generate vectors.S, the trap/interrupt entry points.) 257.742 Tj
+0 -56.9602 Td
+(2403 # There has to be one entry point per interrupt number) 257.742 Tj
+0 -66.4535 Td
+(2404 # since otherwise there's no way for trap\(\) to discover) 262.111 Tj
+0 -75.9469 Td
+(2405 # the interrupt number.) 122.318 Tj
+0 -85.4403 Td
+(2406 ) 21.8426 Tj
+0 -94.9336 Td
+(2407 print "# generated by vectors.pl - do not edit\\n";) 240.268 Tj
+0 -104.427 Td
+(2408 print "# handlers\\n";) 113.581 Tj
+0 -113.92 Td
+(2409 print ".text\\n";) 91.7388 Tj
+0 -123.414 Td
+(2410 print ".globl alltraps\\n";) 135.424 Tj
+0 -132.907 Td
+(2411 for\(my $i = 0; $i < 256; $i++\){) 157.267 Tj
+0 -142.4 Td
+(2412     print ".globl vector$i\\n";) 152.898 Tj
+0 -151.894 Td
+(2413     print "vector$i:\\n";) 126.687 Tj
+0 -161.387 Td
+(2414     if\(\($i < 8 || $i > 14\) && $i != 17\){) 196.583 Tj
+0 -170.88 Td
+(2415         print "  pushl \\$0\\n";) 152.898 Tj
+0 -180.374 Td
+(2416     }) 43.6851 Tj
+0 -189.867 Td
+(2417     print "  pushl \\$$i\\n";) 139.792 Tj
+0 -199.361 Td
+(2418     print "  jmp alltraps\\n";) 148.529 Tj
+0 -208.854 Td
+(2419 }) 26.2111 Tj
+0 -218.347 Td
+(2420 ) 21.8426 Tj
+0 -227.841 Td
+(2421 print "\\n# vector table\\n";) 139.792 Tj
+0 -237.334 Td
+(2422 print ".data\\n";) 91.7388 Tj
+0 -246.827 Td
+(2423 print ".globl vectors\\n";) 131.055 Tj
+0 -256.321 Td
+(2424 print "vectors:\\n";) 104.844 Tj
+0 -265.814 Td
+(2425 for\(my $i = 0; $i < 256; $i++\){) 157.267 Tj
+0 -275.307 Td
+(2426     print "  .long vector$i\\n";) 157.267 Tj
+0 -284.801 Td
+(2427 }) 26.2111 Tj
+0 -294.294 Td
+(2428 ) 21.8426 Tj
+0 -303.788 Td
+(2429 # sample output:) 91.7388 Tj
+0 -313.281 Td
+(2430 #   # handlers) 83.0018 Tj
+0 -322.774 Td
+(2431 #   .text) 61.1592 Tj
+0 -332.268 Td
+(2432 #   .globl alltraps) 104.844 Tj
+0 -341.761 Td
+(2433 #   .globl vector0) 100.476 Tj
+0 -351.254 Td
+(2434 #   vector0:) 74.2647 Tj
+0 -360.748 Td
+(2435 #     pushl $0) 83.0018 Tj
+0 -370.241 Td
+(2436 #     pushl $0) 83.0018 Tj
+0 -379.734 Td
+(2437 #     jmp alltraps) 100.476 Tj
+0 -389.228 Td
+(2438 #   ...) 52.4222 Tj
+0 -398.721 Td
+(2439 #) 26.2111 Tj
+0 -408.214 Td
+(2440 #   # vector table) 100.476 Tj
+0 -417.708 Td
+(2441 #   .data) 61.1592 Tj
+0 -427.201 Td
+(2442 #   .globl vectors) 100.476 Tj
+0 -436.695 Td
+(2443 #   vectors:) 74.2647 Tj
+0 -446.188 Td
+(2444 #     .long vector0) 104.844 Tj
+0 -455.681 Td
+(2445 #     .long vector1) 104.844 Tj
+0 -465.175 Td
+(2446 #     .long vector2) 104.844 Tj
+0 -474.668 Td
+(2447 #   ...) 52.4222 Tj
+0 -484.161 Td
+(2448 ) 21.8426 Tj
+0 -493.655 Td
+(2449 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/proc.c  Page 10) 22.876 Tj
-0 -3.92728 Td
-(2450         }) 8.428 Tj
-0 -5.23637 Td
-(2451         havekids = 1;) 15.652 Tj
-0 -6.54546 Td
-(2452       }) 7.224 Tj
-0 -7.85455 Td
-(2453     }) 6.02 Tj
-0 -9.16364 Td
-(2454 ) 3.01 Tj
-0 -10.4727 Td
-(2455     // No point waiting if we don't have any children.) 35.518 Tj
-0 -11.7818 Td
-(2456     if\(!havekids\){) 13.846 Tj
-0 -13.0909 Td
-(2457       release\(&proc_table_lock\);) 22.274 Tj
-0 -14.4 Td
-(2458       return -1;) 12.642 Tj
-0 -15.7091 Td
-(2459     }) 6.02 Tj
-0 -17.0182 Td
-(2460 ) 3.01 Tj
-0 -18.3273 Td
-(2461     // Wait for children to exit.  \(See wakeup1 call in proc_exit.\)) 43.344 Tj
-0 -19.6364 Td
-(2462     sleep\(cp, &proc_table_lock\);) 22.274 Tj
-0 -20.9455 Td
-(2463   }) 4.816 Tj
-0 -22.2545 Td
-(2464 }) 3.612 Tj
-0 -23.5636 Td
-(2465 ) 3.01 Tj
-0 -24.8727 Td
-(2466 // Print a process listing to console.  For debugging.) 35.518 Tj
-0 -26.1818 Td
-(2467 // Runs when user types ^P on console.) 25.886 Tj
-0 -27.4909 Td
-(2468 // No lock to avoid wedging a stuck machine further.) 34.314 Tj
-0 -28.8 Td
-(2469 void) 5.418 Tj
-0 -30.1091 Td
-(2470 procdump\(void\)) 11.438 Tj
-0 -31.4182 Td
-(2471 {) 3.612 Tj
-0 -32.7273 Td
-(2472   int i;) 7.826 Tj
-0 -34.0364 Td
-(2473   struct proc *p;) 13.244 Tj
-0 -35.3454 Td
-(2474 ) 3.01 Tj
-0 -36.6545 Td
-(2475   for\(i = 0; i < NPROC; i++\) {) 21.07 Tj
-0 -37.9636 Td
-(2476     p = &proc[i];) 13.244 Tj
-0 -39.2727 Td
-(2477     if\(p->state == UNUSED\)) 18.662 Tj
-0 -40.5818 Td
-(2478       continue;) 12.04 Tj
-0 -41.8909 Td
-(2479     cprintf\("%d %d %p\\n", p->pid, p->state\);) 29.498 Tj
-0 -43.2 Td
-(2480   }) 4.816 Tj
-0 -44.5091 Td
-(2481 }) 3.612 Tj
-0 -45.8182 Td
-(2482 ) 3.01 Tj
-0 -47.1272 Td
-(2483 ) 3.01 Tj
-0 -48.4363 Td
-(2484 ) 3.01 Tj
-0 -49.7454 Td
-(2485 ) 3.01 Tj
-0 -51.0545 Td
-(2486 ) 3.01 Tj
-0 -52.3636 Td
-(2487 ) 3.01 Tj
-0 -53.6727 Td
-(2488 ) 3.01 Tj
-0 -54.9818 Td
-(2489 ) 3.01 Tj
-0 -56.2909 Td
-(2490 ) 3.01 Tj
-0 -57.6 Td
-(2491 ) 3.01 Tj
-0 -58.9091 Td
-(2492 ) 3.01 Tj
-0 -60.2181 Td
-(2493 ) 3.01 Tj
-0 -61.5272 Td
-(2494 ) 3.01 Tj
-0 -62.8363 Td
-(2495 ) 3.01 Tj
-0 -64.1454 Td
-(2496 ) 3.01 Tj
-0 -65.4545 Td
-(2497 ) 3.01 Tj
-0 -66.7636 Td
-(2498 ) 3.01 Tj
-0 -68.0727 Td
-(2499 ) 3.01 Tj
-0 -72 Td
-(Sheet 24) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/trapasm.S  Page 1) 174.741 Tj
+0 -28.4801 Td
+(2450 .text) 43.6851 Tj
+0 -37.9735 Td
+(2451 ) 21.8426 Tj
+0 -47.4668 Td
+(2452 .set SEG_KDATA_SEL, 0x10   # selector for SEG_KDATA) 244.637 Tj
+0 -56.9602 Td
+(2453 ) 21.8426 Tj
+0 -66.4535 Td
+(2454   # vectors.S sends all traps here.) 174.741 Tj
+0 -75.9469 Td
+(2455 .globl alltraps) 87.3703 Tj
+0 -85.4403 Td
+(2456 alltraps:) 61.1592 Tj
+0 -94.9336 Td
+(2457   # Build trap frame.) 113.581 Tj
+0 -104.427 Td
+(2458   pushl %ds) 69.8962 Tj
+0 -113.92 Td
+(2459   pushl %es) 69.8962 Tj
+0 -123.414 Td
+(2460   pushal) 56.7907 Tj
+0 -132.907 Td
+(2461 ) 21.8426 Tj
+0 -142.4 Td
+(2462   # Set up data segments.) 131.055 Tj
+0 -151.894 Td
+(2463   movl $SEG_KDATA_SEL, %eax) 139.792 Tj
+0 -161.387 Td
+(2464   movw %ax,%ds) 83.0018 Tj
+0 -170.88 Td
+(2465   movw %ax,%es) 83.0018 Tj
+0 -180.374 Td
+(2466 ) 21.8426 Tj
+0 -189.867 Td
+(2467   # Call trap\(tf\), where tf=%esp) 161.635 Tj
+0 -199.361 Td
+(2468   pushl %esp) 74.2647 Tj
+0 -208.854 Td
+(2469   call trap) 69.8962 Tj
+0 -218.347 Td
+(2470   addl $4, %esp) 87.3703 Tj
+0 -227.841 Td
+(2471 ) 21.8426 Tj
+0 -237.334 Td
+(2472   # Return falls through to trapret...) 187.846 Tj
+0 -246.827 Td
+(2473 .globl trapret) 83.0018 Tj
+0 -256.321 Td
+(2474 trapret:) 56.7907 Tj
+0 -265.814 Td
+(2475   popal) 52.4222 Tj
+0 -275.307 Td
+(2476   popl %es) 65.5277 Tj
+0 -284.801 Td
+(2477   popl %ds) 65.5277 Tj
+0 -294.294 Td
+(2478   addl $0x8, %esp  # trapno and errcode) 192.215 Tj
+0 -303.788 Td
+(2479   iret) 48.0537 Tj
+0 -313.281 Td
+(2480 ) 21.8426 Tj
+0 -322.774 Td
+(2481   # A forked process switches to user mode by calling) 253.374 Tj
+0 -332.268 Td
+(2482   # forkret1\(tf\), where tf is the trap frame to use.) 249.005 Tj
+0 -341.761 Td
+(2483 .globl forkret1) 87.3703 Tj
+0 -351.254 Td
+(2484 forkret1:) 61.1592 Tj
+0 -360.748 Td
+(2485   movl 4\(%esp\), %esp) 109.213 Tj
+0 -370.241 Td
+(2486   jmp trapret) 78.6333 Tj
+0 -379.734 Td
+(2487 ) 21.8426 Tj
+0 -389.228 Td
+(2488 ) 21.8426 Tj
+0 -398.721 Td
+(2489 ) 21.8426 Tj
+0 -408.214 Td
+(2490 ) 21.8426 Tj
+0 -417.708 Td
+(2491 ) 21.8426 Tj
+0 -427.201 Td
+(2492 ) 21.8426 Tj
+0 -436.695 Td
+(2493 ) 21.8426 Tj
+0 -446.188 Td
+(2494 ) 21.8426 Tj
+0 -455.681 Td
+(2495 ) 21.8426 Tj
+0 -465.175 Td
+(2496 ) 21.8426 Tj
+0 -474.668 Td
+(2497 ) 21.8426 Tj
+0 -484.161 Td
+(2498 ) 21.8426 Tj
+0 -493.655 Td
+(2499 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 24) 34.9481 Tj
 Q
 Q
 Q
@@ -9780,7 +10415,10 @@ pdfEndPage
 %%Page: 32 32
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -9788,241 +10426,264 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/setjmp.S  Page 1) 23.478 Tj
-0 -3.92728 Td
-(2500 #   int  setjmp\(struct jmpbuf *jmp\);) 24.682 Tj
-0 -5.23637 Td
-(2501 #   void longjmp\(struct jmpbuf *jmp\);) 25.284 Tj
-0 -6.54546 Td
-(2502 #) 3.612 Tj
-0 -7.85455 Td
-(2503 # Setjmp saves its stack environment in jmp for later use by longjmp.) 44.548 Tj
-0 -9.16364 Td
-(2504 # It returns 0.) 12.04 Tj
-0 -10.4727 Td
-(2505 #) 3.612 Tj
-0 -11.7818 Td
-(2506 # Longjmp restores the environment saved by the last call of setjmp.) 43.946 Tj
-0 -13.0909 Td
-(2507 # It then causes execution to continue as if the call of setjmp) 40.936 Tj
-0 -14.4 Td
-(2508 # had just returned 1.) 16.254 Tj
-0 -15.7091 Td
-(2509 #) 3.612 Tj
-0 -17.0182 Td
-(2510 # The caller of setjmp must not itself have returned in the interim.) 43.946 Tj
-0 -18.3273 Td
-(2511 # All accessible data have values as of the time longjmp was called.) 43.946 Tj
-0 -19.6364 Td
-(2512 #) 3.612 Tj
-0 -20.9455 Td
-(2513 #    [Description, but not code, borrowed from Plan 9.]) 36.12 Tj
-0 -22.2545 Td
-(2514 ) 3.01 Tj
-0 -23.5636 Td
-(2515 .globl setjmp) 10.836 Tj
-0 -24.8727 Td
-(2516 setjmp:) 7.224 Tj
-0 -26.1818 Td
-(2517   movl 4\(%esp\), %eax) 15.05 Tj
-0 -27.4909 Td
-(2518 ) 3.01 Tj
-0 -28.8 Td
-(2519   movl %ebx, 0\(%eax\)) 15.05 Tj
-0 -30.1091 Td
-(2520   movl %ecx, 4\(%eax\)) 15.05 Tj
-0 -31.4182 Td
-(2521   movl %edx, 8\(%eax\)) 15.05 Tj
-0 -32.7273 Td
-(2522   movl %esi, 12\(%eax\)) 15.652 Tj
-0 -34.0364 Td
-(2523   movl %edi, 16\(%eax\)) 15.652 Tj
-0 -35.3454 Td
-(2524   movl %esp, 20\(%eax\)) 15.652 Tj
-0 -36.6545 Td
-(2525   movl %ebp, 24\(%eax\)) 15.652 Tj
-0 -37.9636 Td
-(2526   pushl 0\(%esp\)   # %eip) 17.458 Tj
-0 -39.2727 Td
-(2527   popl 28\(%eax\)) 12.04 Tj
-0 -40.5818 Td
-(2528 ) 3.01 Tj
-0 -41.8909 Td
-(2529   movl $0, %eax   # return value) 22.274 Tj
-0 -43.2 Td
-(2530   ret) 6.02 Tj
-0 -44.5091 Td
-(2531 ) 3.01 Tj
-0 -45.8182 Td
-(2532 .globl longjmp) 11.438 Tj
-0 -47.1272 Td
-(2533 longjmp:) 7.826 Tj
-0 -48.4363 Td
-(2534   movl 4\(%esp\), %eax) 15.05 Tj
-0 -49.7454 Td
-(2535 ) 3.01 Tj
-0 -51.0545 Td
-(2536   movl 0\(%eax\), %ebx) 15.05 Tj
-0 -52.3636 Td
-(2537   movl 4\(%eax\), %ecx) 15.05 Tj
-0 -53.6727 Td
-(2538   movl 8\(%eax\), %edx) 15.05 Tj
-0 -54.9818 Td
-(2539   movl 12\(%eax\), %esi) 15.652 Tj
-0 -56.2909 Td
-(2540   movl 16\(%eax\), %edi) 15.652 Tj
-0 -57.6 Td
-(2541   movl 20\(%eax\), %esp) 15.652 Tj
-0 -58.9091 Td
-(2542   movl 24\(%eax\), %ebp) 15.652 Tj
-0 -60.2181 Td
-(2543 ) 3.01 Tj
-0 -61.5272 Td
-(2544   addl $4, %esp   # pop and discard %eip) 27.09 Tj
-0 -62.8363 Td
-(2545   pushl 28\(%eax\)  # push new %eip) 22.876 Tj
-0 -64.1454 Td
-(2546 ) 3.01 Tj
-0 -65.4545 Td
-(2547   movl $1, %eax   # return value \(appears to come from setjmp!\)) 40.936 Tj
-0 -66.7636 Td
-(2548   ret) 6.02 Tj
-0 -68.0727 Td
-(2549 ) 3.01 Tj
-0 -72 Td
-(Sheet 25) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/trap.c  Page 1) 161.635 Tj
+0 -28.4801 Td
+(2500 #include "types.h") 100.476 Tj
+0 -37.9735 Td
+(2501 #include "defs.h") 96.1073 Tj
+0 -47.4668 Td
+(2502 #include "param.h") 100.476 Tj
+0 -56.9602 Td
+(2503 #include "mmu.h") 91.7388 Tj
+0 -66.4535 Td
+(2504 #include "proc.h") 96.1073 Tj
+0 -75.9469 Td
+(2505 #include "x86.h") 91.7388 Tj
+0 -85.4403 Td
+(2506 #include "traps.h") 100.476 Tj
+0 -94.9336 Td
+(2507 #include "spinlock.h") 113.581 Tj
+0 -104.427 Td
+(2508 ) 21.8426 Tj
+0 -113.92 Td
+(2509 // Interrupt descriptor table \(shared by all CPUs\).) 244.637 Tj
+0 -123.414 Td
+(2510 struct gatedesc idt[256];) 131.055 Tj
+0 -132.907 Td
+(2511 extern uint vectors[];  // in vectors.S: array of 256 entr\
+y pointers) 318.902 Tj
+0 -142.4 Td
+(2512 struct spinlock tickslock;) 135.424 Tj
+0 -151.894 Td
+(2513 int ticks;) 65.5277 Tj
+0 -161.387 Td
+(2514 ) 21.8426 Tj
+0 -170.88 Td
+(2515 void) 39.3166 Tj
+0 -180.374 Td
+(2516 tvinit\(void\)) 74.2647 Tj
+0 -189.867 Td
+(2517 {) 26.2111 Tj
+0 -199.361 Td
+(2518   int i;) 56.7907 Tj
+0 -208.854 Td
+(2519 ) 21.8426 Tj
+0 -218.347 Td
+(2520   for\(i = 0; i < 256; i++\)) 135.424 Tj
+0 -227.841 Td
+(2521     SETGATE\(idt[i], 0, SEG_KCODE<<3, vectors[i], 0\);) 249.005 Tj
+0 -237.334 Td
+(2522   SETGATE\(idt[T_SYSCALL], 0, SEG_KCODE<<3, vectors[T_SYSC\
+ALL], DPL_USER\);) 340.744 Tj
+0 -246.827 Td
+(2523 ) 21.8426 Tj
+0 -256.321 Td
+(2524   initlock\(&tickslock, "time"\);) 157.267 Tj
+0 -265.814 Td
+(2525 }) 26.2111 Tj
+0 -275.307 Td
+(2526 ) 21.8426 Tj
+0 -284.801 Td
+(2527 void) 39.3166 Tj
+0 -294.294 Td
+(2528 idtinit\(void\)) 78.6333 Tj
+0 -303.788 Td
+(2529 {) 26.2111 Tj
+0 -313.281 Td
+(2530   lidt\(idt, sizeof\(idt\)\);) 131.055 Tj
+0 -322.774 Td
+(2531 }) 26.2111 Tj
+0 -332.268 Td
+(2532 ) 21.8426 Tj
+0 -341.761 Td
+(2533 void) 39.3166 Tj
+0 -351.254 Td
+(2534 trap\(struct trapframe *tf\)) 135.424 Tj
+0 -360.748 Td
+(2535 {) 26.2111 Tj
+0 -370.241 Td
+(2536   if\(tf->trapno == T_SYSCALL\){) 152.898 Tj
+0 -379.734 Td
+(2537     if\(cp->killed\)) 100.476 Tj
+0 -389.228 Td
+(2538       exit\(\);) 78.6333 Tj
+0 -398.721 Td
+(2539     cp->tf = tf;) 91.7388 Tj
+0 -408.214 Td
+(2540     syscall\(\);) 83.0018 Tj
+0 -417.708 Td
+(2541     if\(cp->killed\)) 100.476 Tj
+0 -427.201 Td
+(2542       exit\(\);) 78.6333 Tj
+0 -436.695 Td
+(2543     return;) 69.8962 Tj
+0 -446.188 Td
+(2544   }) 34.9481 Tj
+0 -455.681 Td
+(2545 ) 21.8426 Tj
+0 -465.175 Td
+(2546   // Increment nlock to make sure interrupts stay off) 253.374 Tj
+0 -474.668 Td
+(2547   // during interrupt handler.  Decrement before returning\
+.) 279.585 Tj
+0 -484.161 Td
+(2548   cpus[cpu\(\)].nlock++;) 117.95 Tj
+0 -493.655 Td
+(2549 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/kalloc.c  Page 1) 23.478 Tj
-0 -3.92728 Td
-(2550 // Physical memory allocator, intended to allocate) 33.11 Tj
-0 -5.23637 Td
-(2551 // memory for user processes. Allocates in 4096-byte "pages".) 39.732 Tj
-0 -6.54546 Td
-(2552 // Free list is kept sorted and combines adjacent pages into) 39.13 Tj
-0 -7.85455 Td
-(2553 // long runs, to make it easier to allocate big segments.) 37.324 Tj
-0 -9.16364 Td
-(2554 // One reason the page size is 4k is that the x86 segment size) 40.334 Tj
-0 -10.4727 Td
-(2555 // granularity is 4k.) 15.652 Tj
-0 -11.7818 Td
-(2556 ) 3.01 Tj
-0 -13.0909 Td
-(2557 #include "param.h") 13.846 Tj
-0 -14.4 Td
-(2558 #include "types.h") 13.846 Tj
-0 -15.7091 Td
-(2559 #include "defs.h") 13.244 Tj
-0 -17.0182 Td
-(2560 #include "param.h") 13.846 Tj
-0 -18.3273 Td
-(2561 #include "mmu.h") 12.642 Tj
-0 -19.6364 Td
-(2562 #include "proc.h") 13.244 Tj
-0 -20.9455 Td
-(2563 #include "spinlock.h") 15.652 Tj
-0 -22.2545 Td
-(2564 ) 3.01 Tj
-0 -23.5636 Td
-(2565 struct spinlock kalloc_lock;) 19.866 Tj
-0 -24.8727 Td
-(2566 ) 3.01 Tj
-0 -26.1818 Td
-(2567 struct run {) 10.234 Tj
-0 -27.4909 Td
-(2568   struct run *next;) 14.448 Tj
-0 -28.8 Td
-(2569   int len; // bytes) 14.448 Tj
-0 -30.1091 Td
-(2570 };) 4.214 Tj
-0 -31.4182 Td
-(2571 struct run *freelist;) 15.652 Tj
-0 -32.7273 Td
-(2572 ) 3.01 Tj
-0 -34.0364 Td
-(2573 // Initialize free list of physical pages.) 28.294 Tj
-0 -35.3454 Td
-(2574 // This code cheats by just considering one megabyte of) 36.12 Tj
-0 -36.6545 Td
-(2575 // pages after _end.  Real systems would determine the) 35.518 Tj
-0 -37.9636 Td
-(2576 // amount of memory available in the system and use it all.) 38.528 Tj
-0 -39.2727 Td
-(2577 void) 5.418 Tj
-0 -40.5818 Td
-(2578 kinit\(void\)) 9.632 Tj
-0 -41.8909 Td
-(2579 {) 3.612 Tj
-0 -43.2 Td
-(2580   extern int end;) 13.244 Tj
-0 -44.5091 Td
-(2581   uint mem;) 9.632 Tj
-0 -45.8182 Td
-(2582   char *start;) 11.438 Tj
-0 -47.1272 Td
-(2583 ) 3.01 Tj
-0 -48.4363 Td
-(2584   initlock\(&kalloc_lock, "kalloc"\);) 24.08 Tj
-0 -49.7454 Td
-(2585   start = \(char*\) &end;) 16.856 Tj
-0 -51.0545 Td
-(2586   start = \(char*\) \(\(\(uint\)start + PAGE\) & ~\(PAGE-1\)\);) 34.916 Tj
-0 -52.3636 Td
-(2587   mem = 256; // assume computer has 256 pages of RAM) 34.314 Tj
-0 -53.6727 Td
-(2588   cprintf\("mem = %d\\n", mem * PAGE\);) 24.682 Tj
-0 -54.9818 Td
-(2589   kfree\(start, mem * PAGE\);) 19.264 Tj
-0 -56.2909 Td
-(2590 }) 3.612 Tj
-0 -57.6 Td
-(2591 ) 3.01 Tj
-0 -58.9091 Td
-(2592 ) 3.01 Tj
-0 -60.2181 Td
-(2593 ) 3.01 Tj
-0 -61.5272 Td
-(2594 ) 3.01 Tj
-0 -62.8363 Td
-(2595 ) 3.01 Tj
-0 -64.1454 Td
-(2596 ) 3.01 Tj
-0 -65.4545 Td
-(2597 ) 3.01 Tj
-0 -66.7636 Td
-(2598 ) 3.01 Tj
-0 -68.0727 Td
-(2599 ) 3.01 Tj
-0 -72 Td
-(Sheet 25) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/trap.c  Page 2) 161.635 Tj
+0 -28.4801 Td
+(2550   switch\(tf->trapno\){) 113.581 Tj
+0 -37.9735 Td
+(2551   case IRQ_OFFSET + IRQ_TIMER:) 152.898 Tj
+0 -47.4668 Td
+(2552     if\(cpu\(\) == 0\){) 104.844 Tj
+0 -56.9602 Td
+(2553       acquire\(&tickslock\);) 135.424 Tj
+0 -66.4535 Td
+(2554       ticks++;) 83.0018 Tj
+0 -75.9469 Td
+(2555       wakeup\(&ticks\);) 113.581 Tj
+0 -85.4403 Td
+(2556       release\(&tickslock\);) 135.424 Tj
+0 -94.9336 Td
+(2557     }) 43.6851 Tj
+0 -104.427 Td
+(2558     lapic_eoi\(\);) 91.7388 Tj
+0 -113.92 Td
+(2559     break;) 65.5277 Tj
+0 -123.414 Td
+(2560   case IRQ_OFFSET + IRQ_IDE:) 144.161 Tj
+0 -132.907 Td
+(2561     ide_intr\(\);) 87.3703 Tj
+0 -142.4 Td
+(2562     lapic_eoi\(\);) 91.7388 Tj
+0 -151.894 Td
+(2563     break;) 65.5277 Tj
+0 -161.387 Td
+(2564   case IRQ_OFFSET + IRQ_KBD:) 144.161 Tj
+0 -170.88 Td
+(2565     kbd_intr\(\);) 87.3703 Tj
+0 -180.374 Td
+(2566     lapic_eoi\(\);) 91.7388 Tj
+0 -189.867 Td
+(2567     break;) 65.5277 Tj
+0 -199.361 Td
+(2568   case IRQ_OFFSET + IRQ_SPURIOUS:) 166.004 Tj
+0 -208.854 Td
+(2569     cprintf\("spurious interrupt from cpu %d eip %x\\n", c\
+pu\(\), tf->eip\);) 332.007 Tj
+0 -218.347 Td
+(2570     lapic_eoi\(\);) 91.7388 Tj
+0 -227.841 Td
+(2571     break;) 65.5277 Tj
+0 -237.334 Td
+(2572 ) 21.8426 Tj
+0 -246.827 Td
+(2573   default:) 65.5277 Tj
+0 -256.321 Td
+(2574     if\(cp == 0\){) 91.7388 Tj
+0 -265.814 Td
+(2575       // Otherwise it's our mistake.) 179.109 Tj
+0 -275.307 Td
+(2576       cprintf\("unexpected trap %d from cpu %d eip %x\\n",) 266.479 Tj
+0 -284.801 Td
+(2577               tf->trapno, cpu\(\), tf->eip\);) 205.32 Tj
+0 -294.294 Td
+(2578       panic\("trap"\);) 109.213 Tj
+0 -303.788 Td
+(2579     }) 43.6851 Tj
+0 -313.281 Td
+(2580     // Assume process divided by zero or dereferenced null\
+, etc.) 301.427 Tj
+0 -322.774 Td
+(2581     cprintf\("pid %d %s: trap %d err %d on cpu %d eip %x -\
+- kill proc\\n",) 336.376 Tj
+0 -332.268 Td
+(2582             cp->pid, cp->name, tf->trapno, tf->err, cpu\(\)\
+, tf->eip\);) 318.902 Tj
+0 -341.761 Td
+(2583     cp->killed = 1;) 104.844 Tj
+0 -351.254 Td
+(2584   }) 34.9481 Tj
+0 -360.748 Td
+(2585   cpus[cpu\(\)].nlock--;) 117.95 Tj
+0 -370.241 Td
+(2586 ) 21.8426 Tj
+0 -379.734 Td
+(2587   // Force process exit if it has been killed and is in us\
+er space.) 314.533 Tj
+0 -389.228 Td
+(2588   // \(If it is still executing in the kernel, let it keep\
+ running) 305.796 Tj
+0 -398.721 Td
+(2589   // until it gets to the regular system call return.\)) 257.742 Tj
+0 -408.214 Td
+(2590   if\(cp && cp->killed && \(tf->cs&3\) == DPL_USER\)) 231.531 Tj
+0 -417.708 Td
+(2591     exit\(\);) 69.8962 Tj
+0 -427.201 Td
+(2592 ) 21.8426 Tj
+0 -436.695 Td
+(2593   // Force process to give up CPU on clock tick.) 231.531 Tj
+0 -446.188 Td
+(2594   // If interrupts were on while locks held, would need to\
+ check nlock.) 332.007 Tj
+0 -455.681 Td
+(2595   if\(cp && cp->state == RUNNING && tf->trapno == IRQ_OFFS\
+ET+IRQ_TIMER\)) 327.639 Tj
+0 -465.175 Td
+(2596     yield\(\);) 74.2647 Tj
+0 -474.668 Td
+(2597 }) 26.2111 Tj
+0 -484.161 Td
+(2598 ) 21.8426 Tj
+0 -493.655 Td
+(2599 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 25) 34.9481 Tj
 Q
 Q
 Q
@@ -10034,6 +10695,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -10041,241 +10705,256 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/kalloc.c  Page 2) 23.478 Tj
-0 -3.92728 Td
-(2600 // Free the len bytes of memory pointed at by cp,) 32.508 Tj
-0 -5.23637 Td
-(2601 // which normally should have been returned by a) 31.906 Tj
-0 -6.54546 Td
-(2602 // call to kalloc\(cp\).  \(The exception is when) 30.702 Tj
-0 -7.85455 Td
-(2603 // initializing the allocator; see kinit above.\)) 31.906 Tj
-0 -9.16364 Td
-(2604 void) 5.418 Tj
-0 -10.4727 Td
-(2605 kfree\(char *cp, int len\)) 17.458 Tj
-0 -11.7818 Td
-(2606 {) 3.612 Tj
-0 -13.0909 Td
-(2607   struct run **rr;) 13.846 Tj
-0 -14.4 Td
-(2608   struct run *p = \(struct run*\) cp;) 24.08 Tj
-0 -15.7091 Td
-(2609   struct run *pend = \(struct run*\) \(cp + len\);) 30.702 Tj
-0 -17.0182 Td
-(2610   int i;) 7.826 Tj
-0 -18.3273 Td
-(2611 ) 3.01 Tj
-0 -19.6364 Td
-(2612   if\(len % PAGE\)) 12.642 Tj
-0 -20.9455 Td
-(2613     panic\("kfree"\);) 14.448 Tj
-0 -22.2545 Td
-(2614 ) 3.01 Tj
-0 -23.5636 Td
-(2615   // Fill with junk to catch dangling refs.) 28.896 Tj
-0 -24.8727 Td
-(2616   for\(i = 0; i < len; i++\)) 18.662 Tj
-0 -26.1818 Td
-(2617     cp[i] = 1;) 11.438 Tj
-0 -27.4909 Td
-(2618 ) 3.01 Tj
-0 -28.8 Td
-(2619   acquire\(&kalloc_lock\);) 17.458 Tj
-0 -30.1091 Td
-(2620 ) 3.01 Tj
-0 -31.4182 Td
-(2621   rr = &freelist;) 13.244 Tj
-0 -32.7273 Td
-(2622   while\(*rr\){) 10.836 Tj
-0 -34.0364 Td
-(2623     struct run *rend = \(struct run*\) \(\(char*\)\(*rr\) + \(*rr\)->len\);) 42.14 Tj
-0 -35.3454 Td
-(2624     if\(p >= *rr && p < rend\)) 19.866 Tj
-0 -36.6545 Td
-(2625       panic\("freeing free page"\);) 22.876 Tj
-0 -37.9636 Td
-(2626     if\(pend == *rr\){) 15.05 Tj
-0 -39.2727 Td
-(2627       p->len = len + \(*rr\)->len;) 22.274 Tj
-0 -40.5818 Td
-(2628       p->next = \(*rr\)->next;) 19.866 Tj
-0 -41.8909 Td
-(2629       *rr = p;) 11.438 Tj
-0 -43.2 Td
-(2630       goto out;) 12.04 Tj
-0 -44.5091 Td
-(2631     }) 6.02 Tj
-0 -45.8182 Td
-(2632     if\(pend < *rr\){) 14.448 Tj
-0 -47.1272 Td
-(2633       p->len = len;) 14.448 Tj
-0 -48.4363 Td
-(2634       p->next = *rr;) 15.05 Tj
-0 -49.7454 Td
-(2635       *rr = p;) 11.438 Tj
-0 -51.0545 Td
-(2636       goto out;) 12.04 Tj
-0 -52.3636 Td
-(2637     }) 6.02 Tj
-0 -53.6727 Td
-(2638     if\(p == rend\){) 13.846 Tj
-0 -54.9818 Td
-(2639       \(*rr\)->len += len;) 17.458 Tj
-0 -56.2909 Td
-(2640       if\(\(*rr\)->next && \(*rr\)->next == pend\){) 30.1 Tj
-0 -57.6 Td
-(2641         \(*rr\)->len += \(*rr\)->next->len;) 26.488 Tj
-0 -58.9091 Td
-(2642         \(*rr\)->next = \(*rr\)->next->next;) 27.09 Tj
-0 -60.2181 Td
-(2643       }) 7.224 Tj
-0 -61.5272 Td
-(2644       goto out;) 12.04 Tj
-0 -62.8363 Td
-(2645     }) 6.02 Tj
-0 -64.1454 Td
-(2646     rr = &\(\(*rr\)->next\);) 17.458 Tj
-0 -65.4545 Td
-(2647   }) 4.816 Tj
-0 -66.7636 Td
-(2648   p->len = len;) 12.04 Tj
-0 -68.0727 Td
-(2649   p->next = 0;) 11.438 Tj
-0 -72 Td
-(Sheet 26) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/syscall.h  Page 1) 174.741 Tj
+0 -28.4801 Td
+(2600 // System call numbers) 117.95 Tj
+0 -37.9735 Td
+(2601 #define SYS_fork    1) 113.581 Tj
+0 -47.4668 Td
+(2602 #define SYS_exit    2) 113.581 Tj
+0 -56.9602 Td
+(2603 #define SYS_wait    3) 113.581 Tj
+0 -66.4535 Td
+(2604 #define SYS_pipe    4) 113.581 Tj
+0 -75.9469 Td
+(2605 #define SYS_write   5) 113.581 Tj
+0 -85.4403 Td
+(2606 #define SYS_read    6) 113.581 Tj
+0 -94.9336 Td
+(2607 #define SYS_close   7) 113.581 Tj
+0 -104.427 Td
+(2608 #define SYS_kill    8) 113.581 Tj
+0 -113.92 Td
+(2609 #define SYS_exec    9) 113.581 Tj
+0 -123.414 Td
+(2610 #define SYS_open   10) 113.581 Tj
+0 -132.907 Td
+(2611 #define SYS_mknod  11) 113.581 Tj
+0 -142.4 Td
+(2612 #define SYS_unlink 12) 113.581 Tj
+0 -151.894 Td
+(2613 #define SYS_fstat  13) 113.581 Tj
+0 -161.387 Td
+(2614 #define SYS_link   14) 113.581 Tj
+0 -170.88 Td
+(2615 #define SYS_mkdir  15) 113.581 Tj
+0 -180.374 Td
+(2616 #define SYS_chdir  16) 113.581 Tj
+0 -189.867 Td
+(2617 #define SYS_dup    17) 113.581 Tj
+0 -199.361 Td
+(2618 #define SYS_getpid 18) 113.581 Tj
+0 -208.854 Td
+(2619 #define SYS_sbrk   19) 113.581 Tj
+0 -218.347 Td
+(2620 #define SYS_sleep  20) 113.581 Tj
+0 -227.841 Td
+(2621 ) 21.8426 Tj
+0 -237.334 Td
+(2622 ) 21.8426 Tj
+0 -246.827 Td
+(2623 ) 21.8426 Tj
+0 -256.321 Td
+(2624 ) 21.8426 Tj
+0 -265.814 Td
+(2625 ) 21.8426 Tj
+0 -275.307 Td
+(2626 ) 21.8426 Tj
+0 -284.801 Td
+(2627 ) 21.8426 Tj
+0 -294.294 Td
+(2628 ) 21.8426 Tj
+0 -303.788 Td
+(2629 ) 21.8426 Tj
+0 -313.281 Td
+(2630 ) 21.8426 Tj
+0 -322.774 Td
+(2631 ) 21.8426 Tj
+0 -332.268 Td
+(2632 ) 21.8426 Tj
+0 -341.761 Td
+(2633 ) 21.8426 Tj
+0 -351.254 Td
+(2634 ) 21.8426 Tj
+0 -360.748 Td
+(2635 ) 21.8426 Tj
+0 -370.241 Td
+(2636 ) 21.8426 Tj
+0 -379.734 Td
+(2637 ) 21.8426 Tj
+0 -389.228 Td
+(2638 ) 21.8426 Tj
+0 -398.721 Td
+(2639 ) 21.8426 Tj
+0 -408.214 Td
+(2640 ) 21.8426 Tj
+0 -417.708 Td
+(2641 ) 21.8426 Tj
+0 -427.201 Td
+(2642 ) 21.8426 Tj
+0 -436.695 Td
+(2643 ) 21.8426 Tj
+0 -446.188 Td
+(2644 ) 21.8426 Tj
+0 -455.681 Td
+(2645 ) 21.8426 Tj
+0 -465.175 Td
+(2646 ) 21.8426 Tj
+0 -474.668 Td
+(2647 ) 21.8426 Tj
+0 -484.161 Td
+(2648 ) 21.8426 Tj
+0 -493.655 Td
+(2649 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/kalloc.c  Page 3) 23.478 Tj
-0 -3.92728 Td
-(2650   *rr = p;) 9.03 Tj
-0 -5.23637 Td
-(2651 ) 3.01 Tj
-0 -6.54546 Td
-(2652  out:) 6.02 Tj
-0 -7.85455 Td
-(2653   release\(&kalloc_lock\);) 17.458 Tj
-0 -9.16364 Td
-(2654 }) 3.612 Tj
-0 -10.4727 Td
-(2655 ) 3.01 Tj
-0 -11.7818 Td
-(2656 // Allocate n bytes of physical memory.) 26.488 Tj
-0 -13.0909 Td
-(2657 // Returns a kernel-segment pointer.) 24.682 Tj
-0 -14.4 Td
-(2658 // Returns 0 if the memory cannot be allocated.) 31.304 Tj
-0 -15.7091 Td
-(2659 char*) 6.02 Tj
-0 -17.0182 Td
-(2660 kalloc\(int n\)) 10.836 Tj
-0 -18.3273 Td
-(2661 {) 3.612 Tj
-0 -19.6364 Td
-(2662   struct run **rr;) 13.846 Tj
-0 -20.9455 Td
-(2663 ) 3.01 Tj
-0 -22.2545 Td
-(2664   if\(n % PAGE\)) 11.438 Tj
-0 -23.5636 Td
-(2665     panic\("kalloc"\);) 15.05 Tj
-0 -24.8727 Td
-(2666 ) 3.01 Tj
-0 -26.1818 Td
-(2667   acquire\(&kalloc_lock\);) 17.458 Tj
-0 -27.4909 Td
-(2668 ) 3.01 Tj
-0 -28.8 Td
-(2669   rr = &freelist;) 13.244 Tj
-0 -30.1091 Td
-(2670   while\(*rr\){) 10.836 Tj
-0 -31.4182 Td
-(2671     struct run *r = *rr;) 17.458 Tj
-0 -32.7273 Td
-(2672     if\(r->len == n\){) 15.05 Tj
-0 -34.0364 Td
-(2673       *rr = r->next;) 15.05 Tj
-0 -35.3454 Td
-(2674       release\(&kalloc_lock\);) 19.866 Tj
-0 -36.6545 Td
-(2675       return \(char*\) r;) 16.856 Tj
-0 -37.9636 Td
-(2676     }) 6.02 Tj
-0 -39.2727 Td
-(2677     if\(r->len > n\){) 14.448 Tj
-0 -40.5818 Td
-(2678       char *p = \(char*\)r + \(r->len - n\);) 27.09 Tj
-0 -41.8909 Td
-(2679       r->len -= n;) 13.846 Tj
-0 -43.2 Td
-(2680       release\(&kalloc_lock\);) 19.866 Tj
-0 -44.5091 Td
-(2681       return p;) 12.04 Tj
-0 -45.8182 Td
-(2682     }) 6.02 Tj
-0 -47.1272 Td
-(2683     rr = &\(*rr\)->next;) 16.254 Tj
-0 -48.4363 Td
-(2684   }) 4.816 Tj
-0 -49.7454 Td
-(2685   release\(&kalloc_lock\);) 17.458 Tj
-0 -51.0545 Td
-(2686   cprintf\("kalloc: out of memory\\n"\);) 25.284 Tj
-0 -52.3636 Td
-(2687   return 0;) 9.632 Tj
-0 -53.6727 Td
-(2688 }) 3.612 Tj
-0 -54.9818 Td
-(2689 ) 3.01 Tj
-0 -56.2909 Td
-(2690 ) 3.01 Tj
-0 -57.6 Td
-(2691 ) 3.01 Tj
-0 -58.9091 Td
-(2692 ) 3.01 Tj
-0 -60.2181 Td
-(2693 ) 3.01 Tj
-0 -61.5272 Td
-(2694 ) 3.01 Tj
-0 -62.8363 Td
-(2695 ) 3.01 Tj
-0 -64.1454 Td
-(2696 ) 3.01 Tj
-0 -65.4545 Td
-(2697 ) 3.01 Tj
-0 -66.7636 Td
-(2698 ) 3.01 Tj
-0 -68.0727 Td
-(2699 ) 3.01 Tj
-0 -72 Td
-(Sheet 26) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/syscall.c  Page 1) 174.741 Tj
+0 -28.4801 Td
+(2650 #include "types.h") 100.476 Tj
+0 -37.9735 Td
+(2651 #include "defs.h") 96.1073 Tj
+0 -47.4668 Td
+(2652 #include "param.h") 100.476 Tj
+0 -56.9602 Td
+(2653 #include "mmu.h") 91.7388 Tj
+0 -66.4535 Td
+(2654 #include "proc.h") 96.1073 Tj
+0 -75.9469 Td
+(2655 #include "x86.h") 91.7388 Tj
+0 -85.4403 Td
+(2656 #include "syscall.h") 109.213 Tj
+0 -94.9336 Td
+(2657 ) 21.8426 Tj
+0 -104.427 Td
+(2658 // User code makes a system call with INT T_SYSCALL.) 249.005 Tj
+0 -113.92 Td
+(2659 // System call number in %eax.) 152.898 Tj
+0 -123.414 Td
+(2660 // Arguments on the stack, from the user call to the C) 257.742 Tj
+0 -132.907 Td
+(2661 // library system call function. The saved user %esp point\
+s) 279.585 Tj
+0 -142.4 Td
+(2662 // to a saved program counter, and then the first argument\
+.) 279.585 Tj
+0 -151.894 Td
+(2663 ) 21.8426 Tj
+0 -161.387 Td
+(2664 // Fetch the int at addr from process p.) 196.583 Tj
+0 -170.88 Td
+(2665 int) 34.9481 Tj
+0 -180.374 Td
+(2666 fetchint\(struct proc *p, uint addr, int *ip\)) 214.057 Tj
+0 -189.867 Td
+(2667 {) 26.2111 Tj
+0 -199.361 Td
+(2668   if\(addr >= p->sz || addr+4 > p->sz\)) 183.478 Tj
+0 -208.854 Td
+(2669     return -1;) 83.0018 Tj
+0 -218.347 Td
+(2670   *ip = *\(int*\)\(p->mem + addr\);) 157.267 Tj
+0 -227.841 Td
+(2671   return 0;) 69.8962 Tj
+0 -237.334 Td
+(2672 }) 26.2111 Tj
+0 -246.827 Td
+(2673 ) 21.8426 Tj
+0 -256.321 Td
+(2674 // Fetch the nul-terminated string at addr from process p.) 275.216 Tj
+0 -265.814 Td
+(2675 // Doesn't actually copy the string - just sets *pp to poi\
+nt at it.) 314.533 Tj
+0 -275.307 Td
+(2676 // Returns length of string, not including nul.) 227.163 Tj
+0 -284.801 Td
+(2677 int) 34.9481 Tj
+0 -294.294 Td
+(2678 fetchstr\(struct proc *p, uint addr, char **pp\)) 222.794 Tj
+0 -303.788 Td
+(2679 {) 26.2111 Tj
+0 -313.281 Td
+(2680   char *s, *ep;) 87.3703 Tj
+0 -322.774 Td
+(2681 ) 21.8426 Tj
+0 -332.268 Td
+(2682   if\(addr >= p->sz\)) 104.844 Tj
+0 -341.761 Td
+(2683     return -1;) 83.0018 Tj
+0 -351.254 Td
+(2684   *pp = p->mem + addr;) 117.95 Tj
+0 -360.748 Td
+(2685   ep = p->mem + p->sz;) 117.95 Tj
+0 -370.241 Td
+(2686   for\(s = *pp; s < ep; s++\)) 139.792 Tj
+0 -379.734 Td
+(2687     if\(*s == 0\)) 87.3703 Tj
+0 -389.228 Td
+(2688       return s - *pp;) 113.581 Tj
+0 -398.721 Td
+(2689   return -1;) 74.2647 Tj
+0 -408.214 Td
+(2690 }) 26.2111 Tj
+0 -417.708 Td
+(2691 ) 21.8426 Tj
+0 -427.201 Td
+(2692 // Fetch the nth 32-bit system call argument.) 218.426 Tj
+0 -436.695 Td
+(2693 int) 34.9481 Tj
+0 -446.188 Td
+(2694 argint\(int n, int *ip\)) 117.95 Tj
+0 -455.681 Td
+(2695 {) 26.2111 Tj
+0 -465.175 Td
+(2696   return fetchint\(cp, cp->tf->esp + 4 + 4*n, ip\);) 235.9 Tj
+0 -474.668 Td
+(2697 }) 26.2111 Tj
+0 -484.161 Td
+(2698 ) 21.8426 Tj
+0 -493.655 Td
+(2699 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 26) 34.9481 Tj
 Q
 Q
 Q
@@ -10286,7 +10965,10 @@ pdfEndPage
 %%Page: 34 34
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -10294,241 +10976,259 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/syscall.h  Page 1) 24.08 Tj
-0 -3.92728 Td
-(2700 // System call numbers) 16.254 Tj
-0 -5.23637 Td
-(2701 #define SYS_fork    1) 15.652 Tj
-0 -6.54546 Td
-(2702 #define SYS_exit    2) 15.652 Tj
-0 -7.85455 Td
-(2703 #define SYS_wait    3) 15.652 Tj
-0 -9.16364 Td
-(2704 #define SYS_pipe    4) 15.652 Tj
-0 -10.4727 Td
-(2705 #define SYS_write   5) 15.652 Tj
-0 -11.7818 Td
-(2706 #define SYS_read    6) 15.652 Tj
-0 -13.0909 Td
-(2707 #define SYS_close   7) 15.652 Tj
-0 -14.4 Td
-(2708 #define SYS_kill    8) 15.652 Tj
-0 -15.7091 Td
-(2709 #define SYS_exec    9) 15.652 Tj
-0 -17.0182 Td
-(2710 #define SYS_open   10) 15.652 Tj
-0 -18.3273 Td
-(2711 #define SYS_mknod  11) 15.652 Tj
-0 -19.6364 Td
-(2712 #define SYS_unlink 12) 15.652 Tj
-0 -20.9455 Td
-(2713 #define SYS_fstat  13) 15.652 Tj
-0 -22.2545 Td
-(2714 #define SYS_link   14) 15.652 Tj
-0 -23.5636 Td
-(2715 #define SYS_mkdir  15) 15.652 Tj
-0 -24.8727 Td
-(2716 #define SYS_chdir  16) 15.652 Tj
-0 -26.1818 Td
-(2717 #define SYS_dup    17) 15.652 Tj
-0 -27.4909 Td
-(2718 #define SYS_getpid 18) 15.652 Tj
-0 -28.8 Td
-(2719 #define SYS_sbrk   19) 15.652 Tj
-0 -30.1091 Td
-(2720 ) 3.01 Tj
-0 -31.4182 Td
-(2721 ) 3.01 Tj
-0 -32.7273 Td
-(2722 ) 3.01 Tj
-0 -34.0364 Td
-(2723 ) 3.01 Tj
-0 -35.3454 Td
-(2724 ) 3.01 Tj
-0 -36.6545 Td
-(2725 ) 3.01 Tj
-0 -37.9636 Td
-(2726 ) 3.01 Tj
-0 -39.2727 Td
-(2727 ) 3.01 Tj
-0 -40.5818 Td
-(2728 ) 3.01 Tj
-0 -41.8909 Td
-(2729 ) 3.01 Tj
-0 -43.2 Td
-(2730 ) 3.01 Tj
-0 -44.5091 Td
-(2731 ) 3.01 Tj
-0 -45.8182 Td
-(2732 ) 3.01 Tj
-0 -47.1272 Td
-(2733 ) 3.01 Tj
-0 -48.4363 Td
-(2734 ) 3.01 Tj
-0 -49.7454 Td
-(2735 ) 3.01 Tj
-0 -51.0545 Td
-(2736 ) 3.01 Tj
-0 -52.3636 Td
-(2737 ) 3.01 Tj
-0 -53.6727 Td
-(2738 ) 3.01 Tj
-0 -54.9818 Td
-(2739 ) 3.01 Tj
-0 -56.2909 Td
-(2740 ) 3.01 Tj
-0 -57.6 Td
-(2741 ) 3.01 Tj
-0 -58.9091 Td
-(2742 ) 3.01 Tj
-0 -60.2181 Td
-(2743 ) 3.01 Tj
-0 -61.5272 Td
-(2744 ) 3.01 Tj
-0 -62.8363 Td
-(2745 ) 3.01 Tj
-0 -64.1454 Td
-(2746 ) 3.01 Tj
-0 -65.4545 Td
-(2747 ) 3.01 Tj
-0 -66.7636 Td
-(2748 ) 3.01 Tj
-0 -68.0727 Td
-(2749 ) 3.01 Tj
-0 -72 Td
-(Sheet 27) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/syscall.c  Page 2) 174.741 Tj
+0 -28.4801 Td
+(2700 // Fetch the nth word-sized system call argument as a poin\
+ter) 288.322 Tj
+0 -37.9735 Td
+(2701 // to a block of memory of size n bytes.  Check that the p\
+ointer) 301.427 Tj
+0 -47.4668 Td
+(2702 // lies within the process address space.) 200.952 Tj
+0 -56.9602 Td
+(2703 int) 34.9481 Tj
+0 -66.4535 Td
+(2704 argptr\(int n, char **pp, int size\)) 170.372 Tj
+0 -75.9469 Td
+(2705 {) 26.2111 Tj
+0 -85.4403 Td
+(2706   int i;) 56.7907 Tj
+0 -94.9336 Td
+(2707 ) 21.8426 Tj
+0 -104.427 Td
+(2708   if\(argint\(n, &i\) < 0\)) 122.318 Tj
+0 -113.92 Td
+(2709     return -1;) 83.0018 Tj
+0 -123.414 Td
+(2710   if\(\(uint\)i >= cp->sz || \(uint\)i+size >= cp->sz\)) 235.9 Tj
+0 -132.907 Td
+(2711     return -1;) 83.0018 Tj
+0 -142.4 Td
+(2712   *pp = cp->mem + i;) 109.213 Tj
+0 -151.894 Td
+(2713   return 0;) 69.8962 Tj
+0 -161.387 Td
+(2714 }) 26.2111 Tj
+0 -170.88 Td
+(2715 ) 21.8426 Tj
+0 -180.374 Td
+(2716 // Fetch the nth word-sized system call argument as a stri\
+ng pointer.) 323.27 Tj
+0 -189.867 Td
+(2717 // Check that the pointer is valid and the string is nul-t\
+erminated.) 318.902 Tj
+0 -199.361 Td
+(2718 // \(There is no shared writable memory, so the string can\
+'t change) 310.165 Tj
+0 -208.854 Td
+(2719 // between this check and being used by the kernel.\)) 249.005 Tj
+0 -218.347 Td
+(2720 int) 34.9481 Tj
+0 -227.841 Td
+(2721 argstr\(int n, char **pp\)) 126.687 Tj
+0 -237.334 Td
+(2722 {) 26.2111 Tj
+0 -246.827 Td
+(2723   int addr;) 69.8962 Tj
+0 -256.321 Td
+(2724   if\(argint\(n, &addr\) < 0\)) 135.424 Tj
+0 -265.814 Td
+(2725     return -1;) 83.0018 Tj
+0 -275.307 Td
+(2726   return fetchstr\(cp, addr, pp\);) 161.635 Tj
+0 -284.801 Td
+(2727 }) 26.2111 Tj
+0 -294.294 Td
+(2728 ) 21.8426 Tj
+0 -303.788 Td
+(2729 extern int sys_chdir\(void\);) 139.792 Tj
+0 -313.281 Td
+(2730 extern int sys_close\(void\);) 139.792 Tj
+0 -322.774 Td
+(2731 extern int sys_dup\(void\);) 131.055 Tj
+0 -332.268 Td
+(2732 extern int sys_exec\(void\);) 135.424 Tj
+0 -341.761 Td
+(2733 extern int sys_exit\(void\);) 135.424 Tj
+0 -351.254 Td
+(2734 extern int sys_fork\(void\);) 135.424 Tj
+0 -360.748 Td
+(2735 extern int sys_fstat\(void\);) 139.792 Tj
+0 -370.241 Td
+(2736 extern int sys_getpid\(void\);) 144.161 Tj
+0 -379.734 Td
+(2737 extern int sys_kill\(void\);) 135.424 Tj
+0 -389.228 Td
+(2738 extern int sys_link\(void\);) 135.424 Tj
+0 -398.721 Td
+(2739 extern int sys_mkdir\(void\);) 139.792 Tj
+0 -408.214 Td
+(2740 extern int sys_mknod\(void\);) 139.792 Tj
+0 -417.708 Td
+(2741 extern int sys_open\(void\);) 135.424 Tj
+0 -427.201 Td
+(2742 extern int sys_pipe\(void\);) 135.424 Tj
+0 -436.695 Td
+(2743 extern int sys_read\(void\);) 135.424 Tj
+0 -446.188 Td
+(2744 extern int sys_sbrk\(void\);) 135.424 Tj
+0 -455.681 Td
+(2745 extern int sys_sleep\(void\);) 139.792 Tj
+0 -465.175 Td
+(2746 extern int sys_unlink\(void\);) 144.161 Tj
+0 -474.668 Td
+(2747 extern int sys_wait\(void\);) 135.424 Tj
+0 -484.161 Td
+(2748 extern int sys_write\(void\);) 139.792 Tj
+0 -493.655 Td
+(2749 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/trapasm.S  Page 1) 24.08 Tj
-0 -3.92728 Td
-(2750 .text) 6.02 Tj
-0 -5.23637 Td
-(2751 .globl trap) 9.632 Tj
-0 -6.54546 Td
-(2752 .globl trapret1) 12.04 Tj
-0 -7.85455 Td
-(2753 ) 3.01 Tj
-0 -9.16364 Td
-(2754 .globl alltraps) 12.04 Tj
-0 -10.4727 Td
-(2755 alltraps:) 8.428 Tj
-0 -11.7818 Td
-(2756   /* vectors.S sends all traps here */) 25.886 Tj
-0 -13.0909 Td
-(2757   pushl   %ds      # build) 18.662 Tj
-0 -14.4 Td
-(2758   pushl   %es      #  trap) 18.662 Tj
-0 -15.7091 Td
-(2759   pushal           #  frame) 19.264 Tj
-0 -17.0182 Td
-(2760   movl $16,%eax    # SEG_KDATA << 3) 24.08 Tj
-0 -18.3273 Td
-(2761   movw %ax,%ds     #  kernel) 19.866 Tj
-0 -19.6364 Td
-(2762   movw %ax,%es     #  segments) 21.07 Tj
-0 -20.9455 Td
-(2763   pushl %esp       # pass pointer to this trapframe) 33.712 Tj
-0 -22.2545 Td
-(2764   call    trap     #  and call trap\(\)) 25.284 Tj
-0 -23.5636 Td
-(2765   addl $4, %esp) 12.04 Tj
-0 -24.8727 Td
-(2766   # return falls through to trapret...) 25.886 Tj
-0 -26.1818 Td
-(2767 ) 3.01 Tj
-0 -27.4909 Td
-(2768   /*) 5.418 Tj
-0 -28.8 Td
-(2769    * a forked process RETs here) 21.672 Tj
-0 -30.1091 Td
-(2770    * expects ESP to point to a Trapframe) 27.09 Tj
-0 -31.4182 Td
-(2771    */) 6.02 Tj
-0 -32.7273 Td
-(2772 .globl trapret) 11.438 Tj
-0 -34.0364 Td
-(2773 trapret:) 7.826 Tj
-0 -35.3454 Td
-(2774   popal) 7.224 Tj
-0 -36.6545 Td
-(2775   popl %es) 9.03 Tj
-0 -37.9636 Td
-(2776   popl %ds) 9.03 Tj
-0 -39.2727 Td
-(2777   addl $0x8, %esp /* trapno and errcode */) 28.294 Tj
-0 -40.5818 Td
-(2778   iret) 6.622 Tj
-0 -41.8909 Td
-(2779 ) 3.01 Tj
-0 -43.2 Td
-(2780 .globl forkret1) 12.04 Tj
-0 -44.5091 Td
-(2781 forkret1:) 8.428 Tj
-0 -45.8182 Td
-(2782   movl 4\(%esp\), %esp) 15.05 Tj
-0 -47.1272 Td
-(2783   jmp trapret) 10.836 Tj
-0 -48.4363 Td
-(2784 ) 3.01 Tj
-0 -49.7454 Td
-(2785 .globl  acpu) 10.234 Tj
-0 -51.0545 Td
-(2786 acpu:) 6.02 Tj
-0 -52.3636 Td
-(2787   .long 0) 8.428 Tj
-0 -53.6727 Td
-(2788 ) 3.01 Tj
-0 -54.9818 Td
-(2789 ) 3.01 Tj
-0 -56.2909 Td
-(2790 ) 3.01 Tj
-0 -57.6 Td
-(2791 ) 3.01 Tj
-0 -58.9091 Td
-(2792 ) 3.01 Tj
-0 -60.2181 Td
-(2793 ) 3.01 Tj
-0 -61.5272 Td
-(2794 ) 3.01 Tj
-0 -62.8363 Td
-(2795 ) 3.01 Tj
-0 -64.1454 Td
-(2796 ) 3.01 Tj
-0 -65.4545 Td
-(2797 ) 3.01 Tj
-0 -66.7636 Td
-(2798 ) 3.01 Tj
-0 -68.0727 Td
-(2799 ) 3.01 Tj
-0 -72 Td
-(Sheet 27) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/syscall.c  Page 3) 174.741 Tj
+0 -28.4801 Td
+(2750 static int \(*syscalls[]\)\(void\) = {) 170.372 Tj
+0 -37.9735 Td
+(2751 [SYS_chdir]   sys_chdir,) 126.687 Tj
+0 -47.4668 Td
+(2752 [SYS_close]   sys_close,) 126.687 Tj
+0 -56.9602 Td
+(2753 [SYS_dup]     sys_dup,) 117.95 Tj
+0 -66.4535 Td
+(2754 [SYS_exec]    sys_exec,) 122.318 Tj
+0 -75.9469 Td
+(2755 [SYS_exit]    sys_exit,) 122.318 Tj
+0 -85.4403 Td
+(2756 [SYS_fork]    sys_fork,) 122.318 Tj
+0 -94.9336 Td
+(2757 [SYS_fstat]   sys_fstat,) 126.687 Tj
+0 -104.427 Td
+(2758 [SYS_getpid]  sys_getpid,) 131.055 Tj
+0 -113.92 Td
+(2759 [SYS_kill]    sys_kill,) 122.318 Tj
+0 -123.414 Td
+(2760 [SYS_link]    sys_link,) 122.318 Tj
+0 -132.907 Td
+(2761 [SYS_mkdir]   sys_mkdir,) 126.687 Tj
+0 -142.4 Td
+(2762 [SYS_mknod]   sys_mknod,) 126.687 Tj
+0 -151.894 Td
+(2763 [SYS_open]    sys_open,) 122.318 Tj
+0 -161.387 Td
+(2764 [SYS_pipe]    sys_pipe,) 122.318 Tj
+0 -170.88 Td
+(2765 [SYS_read]    sys_read,) 122.318 Tj
+0 -180.374 Td
+(2766 [SYS_sbrk]    sys_sbrk,) 122.318 Tj
+0 -189.867 Td
+(2767 [SYS_sleep]   sys_sleep,) 126.687 Tj
+0 -199.361 Td
+(2768 [SYS_unlink]  sys_unlink,) 131.055 Tj
+0 -208.854 Td
+(2769 [SYS_wait]    sys_wait,) 122.318 Tj
+0 -218.347 Td
+(2770 [SYS_write]   sys_write,) 126.687 Tj
+0 -227.841 Td
+(2771 };) 30.5796 Tj
+0 -237.334 Td
+(2772 ) 21.8426 Tj
+0 -246.827 Td
+(2773 void) 39.3166 Tj
+0 -256.321 Td
+(2774 syscall\(void\)) 78.6333 Tj
+0 -265.814 Td
+(2775 {) 26.2111 Tj
+0 -275.307 Td
+(2776   int num;) 65.5277 Tj
+0 -284.801 Td
+(2777 ) 21.8426 Tj
+0 -294.294 Td
+(2778   num = cp->tf->eax;) 109.213 Tj
+0 -303.788 Td
+(2779   if\(num >= 0 && num < NELEM\(syscalls\) && syscalls[num]\
+\)) 266.479 Tj
+0 -313.281 Td
+(2780     cp->tf->eax = syscalls[num]\(\);) 170.372 Tj
+0 -322.774 Td
+(2781   else {) 56.7907 Tj
+0 -332.268 Td
+(2782     cprintf\("%d %s: unknown sys call %d\\n",) 209.689 Tj
+0 -341.761 Td
+(2783             cp->pid, cp->name, num\);) 179.109 Tj
+0 -351.254 Td
+(2784     cp->tf->eax = -1;) 113.581 Tj
+0 -360.748 Td
+(2785   }) 34.9481 Tj
+0 -370.241 Td
+(2786 }) 26.2111 Tj
+0 -379.734 Td
+(2787 ) 21.8426 Tj
+0 -389.228 Td
+(2788 ) 21.8426 Tj
+0 -398.721 Td
+(2789 ) 21.8426 Tj
+0 -408.214 Td
+(2790 ) 21.8426 Tj
+0 -417.708 Td
+(2791 ) 21.8426 Tj
+0 -427.201 Td
+(2792 ) 21.8426 Tj
+0 -436.695 Td
+(2793 ) 21.8426 Tj
+0 -446.188 Td
+(2794 ) 21.8426 Tj
+0 -455.681 Td
+(2795 ) 21.8426 Tj
+0 -465.175 Td
+(2796 ) 21.8426 Tj
+0 -474.668 Td
+(2797 ) 21.8426 Tj
+0 -484.161 Td
+(2798 ) 21.8426 Tj
+0 -493.655 Td
+(2799 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 27) 34.9481 Tj
 Q
 Q
 Q
@@ -10540,6 +11240,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -10547,241 +11250,253 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/traps.h  Page 1) 22.876 Tj
-0 -3.92728 Td
-(2800 // x86 trap and interrupt constants.) 24.682 Tj
-0 -5.23637 Td
-(2801 ) 3.01 Tj
-0 -6.54546 Td
-(2802 // Processor-defined:) 15.652 Tj
-0 -7.85455 Td
-(2803 #define T_DIVIDE         0      // divide error) 31.304 Tj
-0 -9.16364 Td
-(2804 #define T_DEBUG          1      // debug exception) 33.11 Tj
-0 -10.4727 Td
-(2805 #define T_NMI            2      // non-maskable interrupt) 37.324 Tj
-0 -11.7818 Td
-(2806 #define T_BRKPT          3      // breakpoint) 30.1 Tj
-0 -13.0909 Td
-(2807 #define T_OFLOW          4      // overflow) 28.896 Tj
-0 -14.4 Td
-(2808 #define T_BOUND          5      // bounds check) 31.304 Tj
-0 -15.7091 Td
-(2809 #define T_ILLOP          6      // illegal opcode) 32.508 Tj
-0 -17.0182 Td
-(2810 #define T_DEVICE         7      // device not available) 36.12 Tj
-0 -18.3273 Td
-(2811 #define T_DBLFLT         8      // double fault) 31.304 Tj
-0 -19.6364 Td
-(2812 // #define T_COPROC      9      // reserved \(not used since 486\)) 41.538 Tj
-0 -20.9455 Td
-(2813 #define T_TSS           10      // invalid task switch segment) 40.334 Tj
-0 -22.2545 Td
-(2814 #define T_SEGNP         11      // segment not present) 35.518 Tj
-0 -23.5636 Td
-(2815 #define T_STACK         12      // stack exception) 33.11 Tj
-0 -24.8727 Td
-(2816 #define T_GPFLT         13      // genernal protection fault) 39.13 Tj
-0 -26.1818 Td
-(2817 #define T_PGFLT         14      // page fault) 30.1 Tj
-0 -27.4909 Td
-(2818 // #define T_RES        15      // reserved) 28.896 Tj
-0 -28.8 Td
-(2819 #define T_FPERR         16      // floating point error) 36.12 Tj
-0 -30.1091 Td
-(2820 #define T_ALIGN         17      // aligment check) 32.508 Tj
-0 -31.4182 Td
-(2821 #define T_MCHK          18      // machine check) 31.906 Tj
-0 -32.7273 Td
-(2822 #define T_SIMDERR       19      // SIMD floating point error) 39.13 Tj
-0 -34.0364 Td
-(2823 ) 3.01 Tj
-0 -35.3454 Td
-(2824 // These are arbitrarily chosen, but with care not to overlap) 39.732 Tj
-0 -36.6545 Td
-(2825 // processor defined exceptions or interrupt vectors.) 34.916 Tj
-0 -37.9636 Td
-(2826 #define T_SYSCALL       48      // system call) 30.702 Tj
-0 -39.2727 Td
-(2827 #define T_DEFAULT      500      // catchall) 28.896 Tj
-0 -40.5818 Td
-(2828 ) 3.01 Tj
-0 -41.8909 Td
-(2829 #define IRQ_OFFSET      32      // IRQ 0 corresponds to int IRQ_OFFSET) 45.15 Tj
-0 -43.2 Td
-(2830 ) 3.01 Tj
-0 -44.5091 Td
-(2831 #define IRQ_TIMER        0) 18.662 Tj
-0 -45.8182 Td
-(2832 #define IRQ_KBD          1) 18.662 Tj
-0 -47.1272 Td
-(2833 #define IRQ_IDE         14) 18.662 Tj
-0 -48.4363 Td
-(2834 #define IRQ_ERROR       19) 18.662 Tj
-0 -49.7454 Td
-(2835 #define IRQ_SPURIOUS    31) 18.662 Tj
-0 -51.0545 Td
-(2836 ) 3.01 Tj
-0 -52.3636 Td
-(2837 ) 3.01 Tj
-0 -53.6727 Td
-(2838 ) 3.01 Tj
-0 -54.9818 Td
-(2839 ) 3.01 Tj
-0 -56.2909 Td
-(2840 ) 3.01 Tj
-0 -57.6 Td
-(2841 ) 3.01 Tj
-0 -58.9091 Td
-(2842 ) 3.01 Tj
-0 -60.2181 Td
-(2843 ) 3.01 Tj
-0 -61.5272 Td
-(2844 ) 3.01 Tj
-0 -62.8363 Td
-(2845 ) 3.01 Tj
-0 -64.1454 Td
-(2846 ) 3.01 Tj
-0 -65.4545 Td
-(2847 ) 3.01 Tj
-0 -66.7636 Td
-(2848 ) 3.01 Tj
-0 -68.0727 Td
-(2849 ) 3.01 Tj
-0 -72 Td
-(Sheet 28) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sysproc.c  Page 1) 174.741 Tj
+0 -28.4801 Td
+(2800 #include "types.h") 100.476 Tj
+0 -37.9735 Td
+(2801 #include "defs.h") 96.1073 Tj
+0 -47.4668 Td
+(2802 #include "param.h") 100.476 Tj
+0 -56.9602 Td
+(2803 #include "mmu.h") 91.7388 Tj
+0 -66.4535 Td
+(2804 #include "proc.h") 96.1073 Tj
+0 -75.9469 Td
+(2805 ) 21.8426 Tj
+0 -85.4403 Td
+(2806 int) 34.9481 Tj
+0 -94.9336 Td
+(2807 sys_fork\(void\)) 83.0018 Tj
+0 -104.427 Td
+(2808 {) 26.2111 Tj
+0 -113.92 Td
+(2809   struct proc *np;) 100.476 Tj
+0 -123.414 Td
+(2810 ) 21.8426 Tj
+0 -132.907 Td
+(2811   if\(\(np = copyproc\(cp\)\) == 0\)) 152.898 Tj
+0 -142.4 Td
+(2812     return -1;) 83.0018 Tj
+0 -151.894 Td
+(2813   np->state = RUNNABLE;) 122.318 Tj
+0 -161.387 Td
+(2814   return np->pid;) 96.1073 Tj
+0 -170.88 Td
+(2815 }) 26.2111 Tj
+0 -180.374 Td
+(2816 ) 21.8426 Tj
+0 -189.867 Td
+(2817 int) 34.9481 Tj
+0 -199.361 Td
+(2818 sys_exit\(void\)) 83.0018 Tj
+0 -208.854 Td
+(2819 {) 26.2111 Tj
+0 -218.347 Td
+(2820   exit\(\);) 61.1592 Tj
+0 -227.841 Td
+(2821   return 0;  // not reached) 139.792 Tj
+0 -237.334 Td
+(2822 }) 26.2111 Tj
+0 -246.827 Td
+(2823 ) 21.8426 Tj
+0 -256.321 Td
+(2824 int) 34.9481 Tj
+0 -265.814 Td
+(2825 sys_wait\(void\)) 83.0018 Tj
+0 -275.307 Td
+(2826 {) 26.2111 Tj
+0 -284.801 Td
+(2827   return wait\(\);) 91.7388 Tj
+0 -294.294 Td
+(2828 }) 26.2111 Tj
+0 -303.788 Td
+(2829 ) 21.8426 Tj
+0 -313.281 Td
+(2830 int) 34.9481 Tj
+0 -322.774 Td
+(2831 sys_kill\(void\)) 83.0018 Tj
+0 -332.268 Td
+(2832 {) 26.2111 Tj
+0 -341.761 Td
+(2833   int pid;) 65.5277 Tj
+0 -351.254 Td
+(2834 ) 21.8426 Tj
+0 -360.748 Td
+(2835   if\(argint\(0, &pid\) < 0\)) 131.055 Tj
+0 -370.241 Td
+(2836     return -1;) 83.0018 Tj
+0 -379.734 Td
+(2837   return kill\(pid\);) 104.844 Tj
+0 -389.228 Td
+(2838 }) 26.2111 Tj
+0 -398.721 Td
+(2839 ) 21.8426 Tj
+0 -408.214 Td
+(2840 int) 34.9481 Tj
+0 -417.708 Td
+(2841 sys_getpid\(void\)) 91.7388 Tj
+0 -427.201 Td
+(2842 {) 26.2111 Tj
+0 -436.695 Td
+(2843   return cp->pid;) 96.1073 Tj
+0 -446.188 Td
+(2844 }) 26.2111 Tj
+0 -455.681 Td
+(2845 ) 21.8426 Tj
+0 -465.175 Td
+(2846 ) 21.8426 Tj
+0 -474.668 Td
+(2847 ) 21.8426 Tj
+0 -484.161 Td
+(2848 ) 21.8426 Tj
+0 -493.655 Td
+(2849 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/trap.c  Page 1) 22.274 Tj
-0 -3.92728 Td
-(2850 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(2851 #include "param.h") 13.846 Tj
-0 -6.54546 Td
-(2852 #include "mmu.h") 12.642 Tj
-0 -7.85455 Td
-(2853 #include "proc.h") 13.244 Tj
-0 -9.16364 Td
-(2854 #include "defs.h") 13.244 Tj
-0 -10.4727 Td
-(2855 #include "x86.h") 12.642 Tj
-0 -11.7818 Td
-(2856 #include "traps.h") 13.846 Tj
-0 -13.0909 Td
-(2857 #include "syscall.h") 15.05 Tj
-0 -14.4 Td
-(2858 ) 3.01 Tj
-0 -15.7091 Td
-(2859 // Interrupt descriptor table \(shared by all CPUs\).) 33.712 Tj
-0 -17.0182 Td
-(2860 struct gatedesc idt[256];) 18.06 Tj
-0 -18.3273 Td
-(2861 extern uint vectors[];  // in vectors.S: array of 256 entry pointers) 43.946 Tj
-0 -19.6364 Td
-(2862 ) 3.01 Tj
-0 -20.9455 Td
-(2863 void) 5.418 Tj
-0 -22.2545 Td
-(2864 tvinit\(void\)) 10.234 Tj
-0 -23.5636 Td
-(2865 {) 3.612 Tj
-0 -24.8727 Td
-(2866   int i;) 7.826 Tj
-0 -26.1818 Td
-(2867 ) 3.01 Tj
-0 -27.4909 Td
-(2868   for\(i = 0; i < 256; i++\)) 18.662 Tj
-0 -28.8 Td
-(2869     SETGATE\(idt[i], 0, SEG_KCODE << 3, vectors[i], 0\);) 35.518 Tj
-0 -30.1091 Td
-(2870   SETGATE\(idt[T_SYSCALL], 0, SEG_KCODE << 3, vectors[T_SYSCALL], 3\);) 43.946 Tj
-0 -31.4182 Td
-(2871 }) 3.612 Tj
-0 -32.7273 Td
-(2872 ) 3.01 Tj
-0 -34.0364 Td
-(2873 void) 5.418 Tj
-0 -35.3454 Td
-(2874 idtinit\(void\)) 10.836 Tj
-0 -36.6545 Td
-(2875 {) 3.612 Tj
-0 -37.9636 Td
-(2876   lidt\(idt, sizeof idt\);) 17.458 Tj
-0 -39.2727 Td
-(2877 }) 3.612 Tj
-0 -40.5818 Td
-(2878 ) 3.01 Tj
-0 -41.8909 Td
-(2879 void) 5.418 Tj
-0 -43.2 Td
-(2880 trap\(struct trapframe *tf\)) 18.662 Tj
-0 -44.5091 Td
-(2881 {) 3.612 Tj
-0 -45.8182 Td
-(2882   int v = tf->trapno;) 15.652 Tj
-0 -47.1272 Td
-(2883   struct proc *cp = curproc[cpu\(\)];) 24.08 Tj
-0 -48.4363 Td
-(2884 ) 3.01 Tj
-0 -49.7454 Td
-(2885   if\(v == T_SYSCALL\){) 15.652 Tj
-0 -51.0545 Td
-(2886     if\(cp->killed\)) 13.846 Tj
-0 -52.3636 Td
-(2887       proc_exit\(\);) 13.846 Tj
-0 -53.6727 Td
-(2888     cp->tf = tf;) 12.642 Tj
-0 -54.9818 Td
-(2889     syscall\(\);) 11.438 Tj
-0 -56.2909 Td
-(2890     if\(cp->killed\)) 13.846 Tj
-0 -57.6 Td
-(2891       proc_exit\(\);) 13.846 Tj
-0 -58.9091 Td
-(2892     return;) 9.632 Tj
-0 -60.2181 Td
-(2893   }) 4.816 Tj
-0 -61.5272 Td
-(2894 ) 3.01 Tj
-0 -62.8363 Td
-(2895 ) 3.01 Tj
-0 -64.1454 Td
-(2896 ) 3.01 Tj
-0 -65.4545 Td
-(2897 ) 3.01 Tj
-0 -66.7636 Td
-(2898 ) 3.01 Tj
-0 -68.0727 Td
-(2899 ) 3.01 Tj
-0 -72 Td
-(Sheet 28) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sysproc.c  Page 2) 174.741 Tj
+0 -28.4801 Td
+(2850 int) 34.9481 Tj
+0 -37.9735 Td
+(2851 sys_sbrk\(void\)) 83.0018 Tj
+0 -47.4668 Td
+(2852 {) 26.2111 Tj
+0 -56.9602 Td
+(2853   int addr;) 69.8962 Tj
+0 -66.4535 Td
+(2854   int n;) 56.7907 Tj
+0 -75.9469 Td
+(2855 ) 21.8426 Tj
+0 -85.4403 Td
+(2856   if\(argint\(0, &n\) < 0\)) 122.318 Tj
+0 -94.9336 Td
+(2857     return -1;) 83.0018 Tj
+0 -104.427 Td
+(2858   if\(\(addr = growproc\(n\)\) < 0\)) 152.898 Tj
+0 -113.92 Td
+(2859     return -1;) 83.0018 Tj
+0 -123.414 Td
+(2860   setupsegs\(cp\);) 91.7388 Tj
+0 -132.907 Td
+(2861   return addr;) 83.0018 Tj
+0 -142.4 Td
+(2862 }) 26.2111 Tj
+0 -151.894 Td
+(2863 ) 21.8426 Tj
+0 -161.387 Td
+(2864 int) 34.9481 Tj
+0 -170.88 Td
+(2865 sys_sleep\(void\)) 87.3703 Tj
+0 -180.374 Td
+(2866 {) 26.2111 Tj
+0 -189.867 Td
+(2867   int n, ticks0;) 91.7388 Tj
+0 -199.361 Td
+(2868 ) 21.8426 Tj
+0 -208.854 Td
+(2869   if\(argint\(0, &n\) < 0\)) 122.318 Tj
+0 -218.347 Td
+(2870     return -1;) 83.0018 Tj
+0 -227.841 Td
+(2871   acquire\(&tickslock\);) 117.95 Tj
+0 -237.334 Td
+(2872   ticks0 = ticks;) 96.1073 Tj
+0 -246.827 Td
+(2873   while\(ticks - ticks0 < n\){) 144.161 Tj
+0 -256.321 Td
+(2874     if\(cp->killed\){) 104.844 Tj
+0 -265.814 Td
+(2875       release\(&tickslock\);) 135.424 Tj
+0 -275.307 Td
+(2876       return -1;) 91.7388 Tj
+0 -284.801 Td
+(2877     }) 43.6851 Tj
+0 -294.294 Td
+(2878     sleep\(&ticks, &tickslock\);) 152.898 Tj
+0 -303.788 Td
+(2879   }) 34.9481 Tj
+0 -313.281 Td
+(2880   release\(&tickslock\);) 117.95 Tj
+0 -322.774 Td
+(2881   return 0;) 69.8962 Tj
+0 -332.268 Td
+(2882 }) 26.2111 Tj
+0 -341.761 Td
+(2883 ) 21.8426 Tj
+0 -351.254 Td
+(2884 ) 21.8426 Tj
+0 -360.748 Td
+(2885 ) 21.8426 Tj
+0 -370.241 Td
+(2886 ) 21.8426 Tj
+0 -379.734 Td
+(2887 ) 21.8426 Tj
+0 -389.228 Td
+(2888 ) 21.8426 Tj
+0 -398.721 Td
+(2889 ) 21.8426 Tj
+0 -408.214 Td
+(2890 ) 21.8426 Tj
+0 -417.708 Td
+(2891 ) 21.8426 Tj
+0 -427.201 Td
+(2892 ) 21.8426 Tj
+0 -436.695 Td
+(2893 ) 21.8426 Tj
+0 -446.188 Td
+(2894 ) 21.8426 Tj
+0 -455.681 Td
+(2895 ) 21.8426 Tj
+0 -465.175 Td
+(2896 ) 21.8426 Tj
+0 -474.668 Td
+(2897 ) 21.8426 Tj
+0 -484.161 Td
+(2898 ) 21.8426 Tj
+0 -493.655 Td
+(2899 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 28) 34.9481 Tj
 Q
 Q
 Q
@@ -10792,7 +11507,10 @@ pdfEndPage
 %%Page: 36 36
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -10800,241 +11518,253 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/trap.c  Page 2) 22.274 Tj
-0 -3.92728 Td
-(2900   // Increment nlock to make sure interrupts stay off) 34.916 Tj
-0 -5.23637 Td
-(2901   // during interrupt handler.  Decrement before returning.) 38.528 Tj
-0 -6.54546 Td
-(2902   cpus[cpu\(\)].nlock++;) 16.254 Tj
-0 -7.85455 Td
-(2903 ) 3.01 Tj
-0 -9.16364 Td
-(2904   switch\(v\){) 10.234 Tj
-0 -10.4727 Td
-(2905   case IRQ_OFFSET + IRQ_TIMER:) 21.07 Tj
-0 -11.7818 Td
-(2906     lapic_timerintr\(\);) 16.254 Tj
-0 -13.0909 Td
-(2907     cpus[cpu\(\)].nlock--;) 17.458 Tj
-0 -14.4 Td
-(2908     if\(cp\){) 9.632 Tj
-0 -15.7091 Td
-(2909       // Force process exit if it has been killed and is in user space.) 45.752 Tj
-0 -17.0182 Td
-(2910       // \(If it is still executing in the kernel, let it keep running) 44.548 Tj
-0 -18.3273 Td
-(2911       // until it gets to the regular system call return.\)) 37.926 Tj
-0 -19.6364 Td
-(2912       if\(\(tf->cs&3\) == 3 && cp->killed\)) 26.488 Tj
-0 -20.9455 Td
-(2913         proc_exit\(\);) 15.05 Tj
-0 -22.2545 Td
-(2914 ) 3.01 Tj
-0 -23.5636 Td
-(2915       // Force process to give up CPU and let others run.) 37.324 Tj
-0 -24.8727 Td
-(2916       if\(cp->state == RUNNING\)) 21.07 Tj
-0 -26.1818 Td
-(2917         yield\(\);) 12.642 Tj
-0 -27.4909 Td
-(2918     }) 6.02 Tj
-0 -28.8 Td
-(2919     return;) 9.632 Tj
-0 -30.1091 Td
-(2920 ) 3.01 Tj
-0 -31.4182 Td
-(2921   case IRQ_OFFSET + IRQ_IDE:) 19.866 Tj
-0 -32.7273 Td
-(2922     ide_intr\(\);) 12.04 Tj
-0 -34.0364 Td
-(2923     lapic_eoi\(\);) 12.642 Tj
-0 -35.3454 Td
-(2924     break;) 9.03 Tj
-0 -36.6545 Td
-(2925 ) 3.01 Tj
-0 -37.9636 Td
-(2926   case IRQ_OFFSET + IRQ_KBD:) 19.866 Tj
-0 -39.2727 Td
-(2927     kbd_intr\(\);) 12.04 Tj
-0 -40.5818 Td
-(2928     lapic_eoi\(\);) 12.642 Tj
-0 -41.8909 Td
-(2929     break;) 9.03 Tj
-0 -43.2 Td
-(2930 ) 3.01 Tj
-0 -44.5091 Td
-(2931   case IRQ_OFFSET + IRQ_SPURIOUS:) 22.876 Tj
-0 -45.8182 Td
-(2932     cprintf\("spurious interrupt from cpu %d eip %x\\n", cpu\(\), tf->eip\);) 45.752 Tj
-0 -47.1272 Td
-(2933     break;) 9.03 Tj
-0 -48.4363 Td
-(2934 ) 3.01 Tj
-0 -49.7454 Td
-(2935   default:) 9.03 Tj
-0 -51.0545 Td
-(2936     if\(curproc[cpu\(\)]\) {) 17.458 Tj
-0 -52.3636 Td
-(2937       // Assume process divided by zero or dereferenced null, etc.) 42.742 Tj
-0 -53.6727 Td
-(2938       cprintf\("pid %d: unhandled trap %d on cpu %d eip %x -- kill proc\\n",) 47.558 Tj
-0 -54.9818 Td
-(2939               curproc[cpu\(\)]->pid, v, cpu\(\), tf->eip\);) 35.518 Tj
-0 -56.2909 Td
-(2940       proc_exit\(\);) 13.846 Tj
-0 -57.6 Td
-(2941     }) 6.02 Tj
-0 -58.9091 Td
-(2942 ) 3.01 Tj
-0 -60.2181 Td
-(2943     // Otherwise it's our mistake.) 23.478 Tj
-0 -61.5272 Td
-(2944     cprintf\("unexpected trap %d from cpu %d eip %x\\n", v, cpu\(\), tf->eip\);) 47.558 Tj
-0 -62.8363 Td
-(2945     panic\("trap"\);) 13.846 Tj
-0 -64.1454 Td
-(2946   }) 4.816 Tj
-0 -65.4545 Td
-(2947 ) 3.01 Tj
-0 -66.7636 Td
-(2948   cpus[cpu\(\)].nlock--;) 16.254 Tj
-0 -68.0727 Td
-(2949 }) 3.612 Tj
-0 -72 Td
-(Sheet 29) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/buf.h  Page 1) 157.267 Tj
+0 -28.4801 Td
+(2900 struct buf {) 74.2647 Tj
+0 -37.9735 Td
+(2901   int flags;) 74.2647 Tj
+0 -47.4668 Td
+(2902   uint dev;) 69.8962 Tj
+0 -56.9602 Td
+(2903   uint sector;) 83.0018 Tj
+0 -66.4535 Td
+(2904   struct buf *prev; // LRU cache list) 183.478 Tj
+0 -75.9469 Td
+(2905   struct buf *next;) 104.844 Tj
+0 -85.4403 Td
+(2906   struct buf *qnext; // disk queue) 170.372 Tj
+0 -94.9336 Td
+(2907   uchar data[512];) 100.476 Tj
+0 -104.427 Td
+(2908 };) 30.5796 Tj
+0 -113.92 Td
+(2909 #define B_BUSY  0x1  // buffer is locked by some process) 266.479 Tj
+0 -123.414 Td
+(2910 #define B_VALID 0x2  // buffer has been read from disk) 257.742 Tj
+0 -132.907 Td
+(2911 #define B_DIRTY 0x4  // buffer needs to be written to disk) 275.216 Tj
+0 -142.4 Td
+(2912 ) 21.8426 Tj
+0 -151.894 Td
+(2913 ) 21.8426 Tj
+0 -161.387 Td
+(2914 ) 21.8426 Tj
+0 -170.88 Td
+(2915 ) 21.8426 Tj
+0 -180.374 Td
+(2916 ) 21.8426 Tj
+0 -189.867 Td
+(2917 ) 21.8426 Tj
+0 -199.361 Td
+(2918 ) 21.8426 Tj
+0 -208.854 Td
+(2919 ) 21.8426 Tj
+0 -218.347 Td
+(2920 ) 21.8426 Tj
+0 -227.841 Td
+(2921 ) 21.8426 Tj
+0 -237.334 Td
+(2922 ) 21.8426 Tj
+0 -246.827 Td
+(2923 ) 21.8426 Tj
+0 -256.321 Td
+(2924 ) 21.8426 Tj
+0 -265.814 Td
+(2925 ) 21.8426 Tj
+0 -275.307 Td
+(2926 ) 21.8426 Tj
+0 -284.801 Td
+(2927 ) 21.8426 Tj
+0 -294.294 Td
+(2928 ) 21.8426 Tj
+0 -303.788 Td
+(2929 ) 21.8426 Tj
+0 -313.281 Td
+(2930 ) 21.8426 Tj
+0 -322.774 Td
+(2931 ) 21.8426 Tj
+0 -332.268 Td
+(2932 ) 21.8426 Tj
+0 -341.761 Td
+(2933 ) 21.8426 Tj
+0 -351.254 Td
+(2934 ) 21.8426 Tj
+0 -360.748 Td
+(2935 ) 21.8426 Tj
+0 -370.241 Td
+(2936 ) 21.8426 Tj
+0 -379.734 Td
+(2937 ) 21.8426 Tj
+0 -389.228 Td
+(2938 ) 21.8426 Tj
+0 -398.721 Td
+(2939 ) 21.8426 Tj
+0 -408.214 Td
+(2940 ) 21.8426 Tj
+0 -417.708 Td
+(2941 ) 21.8426 Tj
+0 -427.201 Td
+(2942 ) 21.8426 Tj
+0 -436.695 Td
+(2943 ) 21.8426 Tj
+0 -446.188 Td
+(2944 ) 21.8426 Tj
+0 -455.681 Td
+(2945 ) 21.8426 Tj
+0 -465.175 Td
+(2946 ) 21.8426 Tj
+0 -474.668 Td
+(2947 ) 21.8426 Tj
+0 -484.161 Td
+(2948 ) 21.8426 Tj
+0 -493.655 Td
+(2949 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/vectors.pl  Page 1) 24.682 Tj
-0 -3.92728 Td
-(2950 #!/usr/bin/perl -w) 13.846 Tj
-0 -5.23637 Td
-(2951 ) 3.01 Tj
-0 -6.54546 Td
-(2952 # Generate vectors.S, the trap/interrupt entry points.) 35.518 Tj
-0 -7.85455 Td
-(2953 # There has to be one entry point per interrupt number) 35.518 Tj
-0 -9.16364 Td
-(2954 # since otherwise there's no way for trap\(\) to discover) 36.12 Tj
-0 -10.4727 Td
-(2955 # the interrupt number.) 16.856 Tj
-0 -11.7818 Td
-(2956 ) 3.01 Tj
-0 -13.0909 Td
-(2957 print "# generated by vectors.pl - do not edit\\n";) 33.11 Tj
-0 -14.4 Td
-(2958 print "# handlers\\n";) 15.652 Tj
-0 -15.7091 Td
-(2959 print ".text\\n";) 12.642 Tj
-0 -17.0182 Td
-(2960 print ".globl alltraps\\n";) 18.662 Tj
-0 -18.3273 Td
-(2961 for\(my $i = 0; $i < 256; $i++\){) 21.672 Tj
-0 -19.6364 Td
-(2962     print ".globl vector$i\\n";) 21.07 Tj
-0 -20.9455 Td
-(2963     print "vector$i:\\n";) 17.458 Tj
-0 -22.2545 Td
-(2964     if\(\($i < 8 || $i > 14\) && $i != 17\){) 27.09 Tj
-0 -23.5636 Td
-(2965         print "  pushl \\$0\\n";) 21.07 Tj
-0 -24.8727 Td
-(2966     }) 6.02 Tj
-0 -26.1818 Td
-(2967     print "  pushl \\$$i\\n";) 19.264 Tj
-0 -27.4909 Td
-(2968     print "  jmp alltraps\\n";) 20.468 Tj
-0 -28.8 Td
-(2969 }) 3.612 Tj
-0 -30.1091 Td
-(2970 ) 3.01 Tj
-0 -31.4182 Td
-(2971 print "\\n# vector table\\n";) 19.264 Tj
-0 -32.7273 Td
-(2972 print ".data\\n";) 12.642 Tj
-0 -34.0364 Td
-(2973 print ".globl vectors\\n";) 18.06 Tj
-0 -35.3454 Td
-(2974 print "vectors:\\n";) 14.448 Tj
-0 -36.6545 Td
-(2975 for\(my $i = 0; $i < 256; $i++\){) 21.672 Tj
-0 -37.9636 Td
-(2976     print "  .long vector$i\\n";) 21.672 Tj
-0 -39.2727 Td
-(2977 }) 3.612 Tj
-0 -40.5818 Td
-(2978 ) 3.01 Tj
-0 -41.8909 Td
-(2979 ) 3.01 Tj
-0 -43.2 Td
-(2980 ) 3.01 Tj
-0 -44.5091 Td
-(2981 ) 3.01 Tj
-0 -45.8182 Td
-(2982 ) 3.01 Tj
-0 -47.1272 Td
-(2983 ) 3.01 Tj
-0 -48.4363 Td
-(2984 ) 3.01 Tj
-0 -49.7454 Td
-(2985 ) 3.01 Tj
-0 -51.0545 Td
-(2986 ) 3.01 Tj
-0 -52.3636 Td
-(2987 ) 3.01 Tj
-0 -53.6727 Td
-(2988 ) 3.01 Tj
-0 -54.9818 Td
-(2989 ) 3.01 Tj
-0 -56.2909 Td
-(2990 ) 3.01 Tj
-0 -57.6 Td
-(2991 ) 3.01 Tj
-0 -58.9091 Td
-(2992 ) 3.01 Tj
-0 -60.2181 Td
-(2993 ) 3.01 Tj
-0 -61.5272 Td
-(2994 ) 3.01 Tj
-0 -62.8363 Td
-(2995 ) 3.01 Tj
-0 -64.1454 Td
-(2996 ) 3.01 Tj
-0 -65.4545 Td
-(2997 ) 3.01 Tj
-0 -66.7636 Td
-(2998 ) 3.01 Tj
-0 -68.0727 Td
-(2999 ) 3.01 Tj
-0 -72 Td
-(Sheet 29) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/dev.h  Page 1) 157.267 Tj
+0 -28.4801 Td
+(2950 struct devsw {) 83.0018 Tj
+0 -37.9735 Td
+(2951   int \(*read\)\(struct inode*, char*, int\);) 200.952 Tj
+0 -47.4668 Td
+(2952   int \(*write\)\(struct inode*, char*, int\);) 205.32 Tj
+0 -56.9602 Td
+(2953 };) 30.5796 Tj
+0 -66.4535 Td
+(2954 ) 21.8426 Tj
+0 -75.9469 Td
+(2955 extern struct devsw devsw[];) 144.161 Tj
+0 -85.4403 Td
+(2956 ) 21.8426 Tj
+0 -94.9336 Td
+(2957 #define CONSOLE 1) 96.1073 Tj
+0 -104.427 Td
+(2958 ) 21.8426 Tj
+0 -113.92 Td
+(2959 ) 21.8426 Tj
+0 -123.414 Td
+(2960 ) 21.8426 Tj
+0 -132.907 Td
+(2961 ) 21.8426 Tj
+0 -142.4 Td
+(2962 ) 21.8426 Tj
+0 -151.894 Td
+(2963 ) 21.8426 Tj
+0 -161.387 Td
+(2964 ) 21.8426 Tj
+0 -170.88 Td
+(2965 ) 21.8426 Tj
+0 -180.374 Td
+(2966 ) 21.8426 Tj
+0 -189.867 Td
+(2967 ) 21.8426 Tj
+0 -199.361 Td
+(2968 ) 21.8426 Tj
+0 -208.854 Td
+(2969 ) 21.8426 Tj
+0 -218.347 Td
+(2970 ) 21.8426 Tj
+0 -227.841 Td
+(2971 ) 21.8426 Tj
+0 -237.334 Td
+(2972 ) 21.8426 Tj
+0 -246.827 Td
+(2973 ) 21.8426 Tj
+0 -256.321 Td
+(2974 ) 21.8426 Tj
+0 -265.814 Td
+(2975 ) 21.8426 Tj
+0 -275.307 Td
+(2976 ) 21.8426 Tj
+0 -284.801 Td
+(2977 ) 21.8426 Tj
+0 -294.294 Td
+(2978 ) 21.8426 Tj
+0 -303.788 Td
+(2979 ) 21.8426 Tj
+0 -313.281 Td
+(2980 ) 21.8426 Tj
+0 -322.774 Td
+(2981 ) 21.8426 Tj
+0 -332.268 Td
+(2982 ) 21.8426 Tj
+0 -341.761 Td
+(2983 ) 21.8426 Tj
+0 -351.254 Td
+(2984 ) 21.8426 Tj
+0 -360.748 Td
+(2985 ) 21.8426 Tj
+0 -370.241 Td
+(2986 ) 21.8426 Tj
+0 -379.734 Td
+(2987 ) 21.8426 Tj
+0 -389.228 Td
+(2988 ) 21.8426 Tj
+0 -398.721 Td
+(2989 ) 21.8426 Tj
+0 -408.214 Td
+(2990 ) 21.8426 Tj
+0 -417.708 Td
+(2991 ) 21.8426 Tj
+0 -427.201 Td
+(2992 ) 21.8426 Tj
+0 -436.695 Td
+(2993 ) 21.8426 Tj
+0 -446.188 Td
+(2994 ) 21.8426 Tj
+0 -455.681 Td
+(2995 ) 21.8426 Tj
+0 -465.175 Td
+(2996 ) 21.8426 Tj
+0 -474.668 Td
+(2997 ) 21.8426 Tj
+0 -484.161 Td
+(2998 ) 21.8426 Tj
+0 -493.655 Td
+(2999 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 29) 34.9481 Tj
 Q
 Q
 Q
@@ -11046,6 +11776,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -11053,241 +11786,253 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/syscall.c  Page 1) 24.08 Tj
-0 -3.92728 Td
-(3000 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(3001 #include "stat.h") 13.244 Tj
-0 -6.54546 Td
-(3002 #include "param.h") 13.846 Tj
-0 -7.85455 Td
-(3003 #include "mmu.h") 12.642 Tj
-0 -9.16364 Td
-(3004 #include "proc.h") 13.244 Tj
-0 -10.4727 Td
-(3005 #include "defs.h") 13.244 Tj
-0 -11.7818 Td
-(3006 #include "x86.h") 12.642 Tj
-0 -13.0909 Td
-(3007 #include "traps.h") 13.846 Tj
-0 -14.4 Td
-(3008 #include "syscall.h") 15.05 Tj
-0 -15.7091 Td
-(3009 #include "spinlock.h") 15.652 Tj
-0 -17.0182 Td
-(3010 #include "buf.h") 12.642 Tj
-0 -18.3273 Td
-(3011 #include "fs.h") 12.04 Tj
-0 -19.6364 Td
-(3012 #include "fsvar.h") 13.846 Tj
-0 -20.9455 Td
-(3013 #include "elf.h") 12.642 Tj
-0 -22.2545 Td
-(3014 #include "file.h") 13.244 Tj
-0 -23.5636 Td
-(3015 #include "fcntl.h") 13.846 Tj
-0 -24.8727 Td
-(3016 ) 3.01 Tj
-0 -26.1818 Td
-(3017 // User code makes a system call with INT T_SYSCALL.) 34.314 Tj
-0 -27.4909 Td
-(3018 // System call number in %eax.) 21.07 Tj
-0 -28.8 Td
-(3019 // Arguments on the stack, from the user call to the C) 35.518 Tj
-0 -30.1091 Td
-(3020 // library system call function. The saved user %esp points) 38.528 Tj
-0 -31.4182 Td
-(3021 // to a saved program counter, and then the first argument.) 38.528 Tj
-0 -32.7273 Td
-(3022 ) 3.01 Tj
-0 -34.0364 Td
-(3023 // Fetch the int at addr from process p.) 27.09 Tj
-0 -35.3454 Td
-(3024 int) 4.816 Tj
-0 -36.6545 Td
-(3025 fetchint\(struct proc *p, uint addr, int *ip\)) 29.498 Tj
-0 -37.9636 Td
-(3026 {) 3.612 Tj
-0 -39.2727 Td
-(3027   if\(addr >= p->sz || addr+4 > p->sz\)) 25.284 Tj
-0 -40.5818 Td
-(3028     return -1;) 11.438 Tj
-0 -41.8909 Td
-(3029   *ip = *\(int*\)\(p->mem + addr\);) 21.672 Tj
-0 -43.2 Td
-(3030   return 0;) 9.632 Tj
-0 -44.5091 Td
-(3031 }) 3.612 Tj
-0 -45.8182 Td
-(3032 ) 3.01 Tj
-0 -47.1272 Td
-(3033 // Fetch the nul-terminated string at addr from process p.) 37.926 Tj
-0 -48.4363 Td
-(3034 // Doesn't actually copy the string - just sets *pp to point at it.) 43.344 Tj
-0 -49.7454 Td
-(3035 // Returns length of string, not including nul.) 31.304 Tj
-0 -51.0545 Td
-(3036 int) 4.816 Tj
-0 -52.3636 Td
-(3037 fetchstr\(struct proc *p, uint addr, char **pp\)) 30.702 Tj
-0 -53.6727 Td
-(3038 {) 3.612 Tj
-0 -54.9818 Td
-(3039   char *cp, *ep;) 12.642 Tj
-0 -56.2909 Td
-(3040 ) 3.01 Tj
-0 -57.6 Td
-(3041   if\(addr >= p->sz\)) 14.448 Tj
-0 -58.9091 Td
-(3042     return -1;) 11.438 Tj
-0 -60.2181 Td
-(3043   *pp = p->mem + addr;) 16.254 Tj
-0 -61.5272 Td
-(3044   ep = p->mem + p->sz;) 16.254 Tj
-0 -62.8363 Td
-(3045   for\(cp = *pp; cp < ep; cp++\)) 21.07 Tj
-0 -64.1454 Td
-(3046     if\(*cp == 0\)) 12.642 Tj
-0 -65.4545 Td
-(3047       return cp - *pp;) 16.254 Tj
-0 -66.7636 Td
-(3048   return -1;) 10.234 Tj
-0 -68.0727 Td
-(3049 }) 3.612 Tj
-0 -72 Td
-(Sheet 30) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/fcntl.h  Page 1) 166.004 Tj
+0 -28.4801 Td
+(3000 #define O_RDONLY  0x000) 122.318 Tj
+0 -37.9735 Td
+(3001 #define O_WRONLY  0x001) 122.318 Tj
+0 -47.4668 Td
+(3002 #define O_RDWR    0x002) 122.318 Tj
+0 -56.9602 Td
+(3003 #define O_CREATE  0x200) 122.318 Tj
+0 -66.4535 Td
+(3004 ) 21.8426 Tj
+0 -75.9469 Td
+(3005 ) 21.8426 Tj
+0 -85.4403 Td
+(3006 ) 21.8426 Tj
+0 -94.9336 Td
+(3007 ) 21.8426 Tj
+0 -104.427 Td
+(3008 ) 21.8426 Tj
+0 -113.92 Td
+(3009 ) 21.8426 Tj
+0 -123.414 Td
+(3010 ) 21.8426 Tj
+0 -132.907 Td
+(3011 ) 21.8426 Tj
+0 -142.4 Td
+(3012 ) 21.8426 Tj
+0 -151.894 Td
+(3013 ) 21.8426 Tj
+0 -161.387 Td
+(3014 ) 21.8426 Tj
+0 -170.88 Td
+(3015 ) 21.8426 Tj
+0 -180.374 Td
+(3016 ) 21.8426 Tj
+0 -189.867 Td
+(3017 ) 21.8426 Tj
+0 -199.361 Td
+(3018 ) 21.8426 Tj
+0 -208.854 Td
+(3019 ) 21.8426 Tj
+0 -218.347 Td
+(3020 ) 21.8426 Tj
+0 -227.841 Td
+(3021 ) 21.8426 Tj
+0 -237.334 Td
+(3022 ) 21.8426 Tj
+0 -246.827 Td
+(3023 ) 21.8426 Tj
+0 -256.321 Td
+(3024 ) 21.8426 Tj
+0 -265.814 Td
+(3025 ) 21.8426 Tj
+0 -275.307 Td
+(3026 ) 21.8426 Tj
+0 -284.801 Td
+(3027 ) 21.8426 Tj
+0 -294.294 Td
+(3028 ) 21.8426 Tj
+0 -303.788 Td
+(3029 ) 21.8426 Tj
+0 -313.281 Td
+(3030 ) 21.8426 Tj
+0 -322.774 Td
+(3031 ) 21.8426 Tj
+0 -332.268 Td
+(3032 ) 21.8426 Tj
+0 -341.761 Td
+(3033 ) 21.8426 Tj
+0 -351.254 Td
+(3034 ) 21.8426 Tj
+0 -360.748 Td
+(3035 ) 21.8426 Tj
+0 -370.241 Td
+(3036 ) 21.8426 Tj
+0 -379.734 Td
+(3037 ) 21.8426 Tj
+0 -389.228 Td
+(3038 ) 21.8426 Tj
+0 -398.721 Td
+(3039 ) 21.8426 Tj
+0 -408.214 Td
+(3040 ) 21.8426 Tj
+0 -417.708 Td
+(3041 ) 21.8426 Tj
+0 -427.201 Td
+(3042 ) 21.8426 Tj
+0 -436.695 Td
+(3043 ) 21.8426 Tj
+0 -446.188 Td
+(3044 ) 21.8426 Tj
+0 -455.681 Td
+(3045 ) 21.8426 Tj
+0 -465.175 Td
+(3046 ) 21.8426 Tj
+0 -474.668 Td
+(3047 ) 21.8426 Tj
+0 -484.161 Td
+(3048 ) 21.8426 Tj
+0 -493.655 Td
+(3049 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/syscall.c  Page 2) 24.08 Tj
-0 -3.92728 Td
-(3050 // Fetch the argno'th word-sized system call argument as an integer.) 43.946 Tj
-0 -5.23637 Td
-(3051 int) 4.816 Tj
-0 -6.54546 Td
-(3052 argint\(int argno, int *ip\)) 18.662 Tj
-0 -7.85455 Td
-(3053 {) 3.612 Tj
-0 -9.16364 Td
-(3054   struct proc *p = curproc[cpu\(\)];) 23.478 Tj
-0 -10.4727 Td
-(3055 ) 3.01 Tj
-0 -11.7818 Td
-(3056   return fetchint\(p, p->tf->esp + 4 + 4*argno, ip\);) 33.712 Tj
-0 -13.0909 Td
-(3057 }) 3.612 Tj
-0 -14.4 Td
-(3058 ) 3.01 Tj
-0 -15.7091 Td
-(3059 // Fetch the nth word-sized system call argument as a pointer) 39.732 Tj
-0 -17.0182 Td
-(3060 // to a block of memory of size n bytes.  Check that the pointer) 41.538 Tj
-0 -18.3273 Td
-(3061 // lies within the process address space.) 27.692 Tj
-0 -19.6364 Td
-(3062 int) 4.816 Tj
-0 -20.9455 Td
-(3063 argptr\(int argno, char **pp, int size\)) 25.886 Tj
-0 -22.2545 Td
-(3064 {) 3.612 Tj
-0 -23.5636 Td
-(3065   int i;) 7.826 Tj
-0 -24.8727 Td
-(3066   struct proc *p = curproc[cpu\(\)];) 23.478 Tj
-0 -26.1818 Td
-(3067 ) 3.01 Tj
-0 -27.4909 Td
-(3068   if\(argint\(argno, &i\) < 0\)) 19.264 Tj
-0 -28.8 Td
-(3069     return -1;) 11.438 Tj
-0 -30.1091 Td
-(3070   if\(\(uint\)i >= p->sz || \(uint\)i+size >= p->sz\)) 31.304 Tj
-0 -31.4182 Td
-(3071     return -1;) 11.438 Tj
-0 -32.7273 Td
-(3072   *pp = p->mem + i;) 14.448 Tj
-0 -34.0364 Td
-(3073   return 0;) 9.632 Tj
-0 -35.3454 Td
-(3074 }) 3.612 Tj
-0 -36.6545 Td
-(3075 ) 3.01 Tj
-0 -37.9636 Td
-(3076 // Fetch the nth word-sized system call argument as a string pointer.) 44.548 Tj
-0 -39.2727 Td
-(3077 // Check that the pointer is valid and the string is nul-terminated.) 43.946 Tj
-0 -40.5818 Td
-(3078 // \(There is no shared writable memory, so the string can't change) 42.742 Tj
-0 -41.8909 Td
-(3079 // between this check and being used by the kernel.\)) 34.314 Tj
-0 -43.2 Td
-(3080 int) 4.816 Tj
-0 -44.5091 Td
-(3081 argstr\(int argno, char **pp\)) 19.866 Tj
-0 -45.8182 Td
-(3082 {) 3.612 Tj
-0 -47.1272 Td
-(3083   int addr;) 9.632 Tj
-0 -48.4363 Td
-(3084   if\(argint\(argno, &addr\) < 0\)) 21.07 Tj
-0 -49.7454 Td
-(3085     return -1;) 11.438 Tj
-0 -51.0545 Td
-(3086   return fetchstr\(curproc[cpu\(\)], addr, pp\);) 29.498 Tj
-0 -52.3636 Td
-(3087 }) 3.612 Tj
-0 -53.6727 Td
-(3088 ) 3.01 Tj
-0 -54.9818 Td
-(3089 ) 3.01 Tj
-0 -56.2909 Td
-(3090 ) 3.01 Tj
-0 -57.6 Td
-(3091 ) 3.01 Tj
-0 -58.9091 Td
-(3092 ) 3.01 Tj
-0 -60.2181 Td
-(3093 ) 3.01 Tj
-0 -61.5272 Td
-(3094 ) 3.01 Tj
-0 -62.8363 Td
-(3095 ) 3.01 Tj
-0 -64.1454 Td
-(3096 ) 3.01 Tj
-0 -65.4545 Td
-(3097 ) 3.01 Tj
-0 -66.7636 Td
-(3098 ) 3.01 Tj
-0 -68.0727 Td
-(3099 ) 3.01 Tj
-0 -72 Td
-(Sheet 30) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/stat.h  Page 1) 161.635 Tj
+0 -28.4801 Td
+(3050 struct stat {) 78.6333 Tj
+0 -37.9735 Td
+(3051   int dev;     // Device number) 157.267 Tj
+0 -47.4668 Td
+(3052   uint ino;    // Inode number on device) 196.583 Tj
+0 -56.9602 Td
+(3053   short type;  // Type of file) 152.898 Tj
+0 -66.4535 Td
+(3054   short nlink; // Number of links to file) 200.952 Tj
+0 -75.9469 Td
+(3055   uint size;   // Size of file in bytes) 192.215 Tj
+0 -85.4403 Td
+(3056 };) 30.5796 Tj
+0 -94.9336 Td
+(3057 ) 21.8426 Tj
+0 -104.427 Td
+(3058 ) 21.8426 Tj
+0 -113.92 Td
+(3059 ) 21.8426 Tj
+0 -123.414 Td
+(3060 ) 21.8426 Tj
+0 -132.907 Td
+(3061 ) 21.8426 Tj
+0 -142.4 Td
+(3062 ) 21.8426 Tj
+0 -151.894 Td
+(3063 ) 21.8426 Tj
+0 -161.387 Td
+(3064 ) 21.8426 Tj
+0 -170.88 Td
+(3065 ) 21.8426 Tj
+0 -180.374 Td
+(3066 ) 21.8426 Tj
+0 -189.867 Td
+(3067 ) 21.8426 Tj
+0 -199.361 Td
+(3068 ) 21.8426 Tj
+0 -208.854 Td
+(3069 ) 21.8426 Tj
+0 -218.347 Td
+(3070 ) 21.8426 Tj
+0 -227.841 Td
+(3071 ) 21.8426 Tj
+0 -237.334 Td
+(3072 ) 21.8426 Tj
+0 -246.827 Td
+(3073 ) 21.8426 Tj
+0 -256.321 Td
+(3074 ) 21.8426 Tj
+0 -265.814 Td
+(3075 ) 21.8426 Tj
+0 -275.307 Td
+(3076 ) 21.8426 Tj
+0 -284.801 Td
+(3077 ) 21.8426 Tj
+0 -294.294 Td
+(3078 ) 21.8426 Tj
+0 -303.788 Td
+(3079 ) 21.8426 Tj
+0 -313.281 Td
+(3080 ) 21.8426 Tj
+0 -322.774 Td
+(3081 ) 21.8426 Tj
+0 -332.268 Td
+(3082 ) 21.8426 Tj
+0 -341.761 Td
+(3083 ) 21.8426 Tj
+0 -351.254 Td
+(3084 ) 21.8426 Tj
+0 -360.748 Td
+(3085 ) 21.8426 Tj
+0 -370.241 Td
+(3086 ) 21.8426 Tj
+0 -379.734 Td
+(3087 ) 21.8426 Tj
+0 -389.228 Td
+(3088 ) 21.8426 Tj
+0 -398.721 Td
+(3089 ) 21.8426 Tj
+0 -408.214 Td
+(3090 ) 21.8426 Tj
+0 -417.708 Td
+(3091 ) 21.8426 Tj
+0 -427.201 Td
+(3092 ) 21.8426 Tj
+0 -436.695 Td
+(3093 ) 21.8426 Tj
+0 -446.188 Td
+(3094 ) 21.8426 Tj
+0 -455.681 Td
+(3095 ) 21.8426 Tj
+0 -465.175 Td
+(3096 ) 21.8426 Tj
+0 -474.668 Td
+(3097 ) 21.8426 Tj
+0 -484.161 Td
+(3098 ) 21.8426 Tj
+0 -493.655 Td
+(3099 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 30) 34.9481 Tj
 Q
 Q
 Q
@@ -11298,7 +12043,10 @@ pdfEndPage
 %%Page: 38 38
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -11306,241 +12054,258 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/syscall.c  Page 3) 24.08 Tj
-0 -3.92728 Td
-(3100 extern int sys_chdir\(void\);) 19.264 Tj
-0 -5.23637 Td
-(3101 extern int sys_close\(void\);) 19.264 Tj
-0 -6.54546 Td
-(3102 extern int sys_dup\(void\);) 18.06 Tj
-0 -7.85455 Td
-(3103 extern int sys_exec\(void\);) 18.662 Tj
-0 -9.16364 Td
-(3104 extern int sys_exit\(void\);) 18.662 Tj
-0 -10.4727 Td
-(3105 extern int sys_fork\(void\);) 18.662 Tj
-0 -11.7818 Td
-(3106 extern int sys_fstat\(void\);) 19.264 Tj
-0 -13.0909 Td
-(3107 extern int sys_getpid\(void\);) 19.866 Tj
-0 -14.4 Td
-(3108 extern int sys_kill\(void\);) 18.662 Tj
-0 -15.7091 Td
-(3109 extern int sys_link\(void\);) 18.662 Tj
-0 -17.0182 Td
-(3110 extern int sys_mkdir\(void\);) 19.264 Tj
-0 -18.3273 Td
-(3111 extern int sys_mknod\(void\);) 19.264 Tj
-0 -19.6364 Td
-(3112 extern int sys_open\(void\);) 18.662 Tj
-0 -20.9455 Td
-(3113 extern int sys_pipe\(void\);) 18.662 Tj
-0 -22.2545 Td
-(3114 extern int sys_read\(void\);) 18.662 Tj
-0 -23.5636 Td
-(3115 extern int sys_sbrk\(void\);) 18.662 Tj
-0 -24.8727 Td
-(3116 extern int sys_unlink\(void\);) 19.866 Tj
-0 -26.1818 Td
-(3117 extern int sys_wait\(void\);) 18.662 Tj
-0 -27.4909 Td
-(3118 extern int sys_write\(void\);) 19.264 Tj
-0 -28.8 Td
-(3119 ) 3.01 Tj
-0 -30.1091 Td
-(3120 void) 5.418 Tj
-0 -31.4182 Td
-(3121 syscall\(void\)) 10.836 Tj
-0 -32.7273 Td
-(3122 {) 3.612 Tj
-0 -34.0364 Td
-(3123   struct proc *cp = curproc[cpu\(\)];) 24.08 Tj
-0 -35.3454 Td
-(3124   int num = cp->tf->eax;) 17.458 Tj
-0 -36.6545 Td
-(3125   int ret = -1;) 12.04 Tj
-0 -37.9636 Td
-(3126 ) 3.01 Tj
-0 -39.2727 Td
-(3127   switch\(num\){) 11.438 Tj
-0 -40.5818 Td
-(3128   case SYS_fork:) 12.642 Tj
-0 -41.8909 Td
-(3129     ret = sys_fork\(\);) 15.652 Tj
-0 -43.2 Td
-(3130     break;) 9.03 Tj
-0 -44.5091 Td
-(3131   case SYS_exit:) 12.642 Tj
-0 -45.8182 Td
-(3132     ret = sys_exit\(\);) 15.652 Tj
-0 -47.1272 Td
-(3133     break;) 9.03 Tj
-0 -48.4363 Td
-(3134   case SYS_wait:) 12.642 Tj
-0 -49.7454 Td
-(3135     ret = sys_wait\(\);) 15.652 Tj
-0 -51.0545 Td
-(3136     break;) 9.03 Tj
-0 -52.3636 Td
-(3137   case SYS_pipe:) 12.642 Tj
-0 -53.6727 Td
-(3138     ret = sys_pipe\(\);) 15.652 Tj
-0 -54.9818 Td
-(3139     break;) 9.03 Tj
-0 -56.2909 Td
-(3140   case SYS_write:) 13.244 Tj
-0 -57.6 Td
-(3141     ret = sys_write\(\);) 16.254 Tj
-0 -58.9091 Td
-(3142     break;) 9.03 Tj
-0 -60.2181 Td
-(3143   case SYS_read:) 12.642 Tj
-0 -61.5272 Td
-(3144     ret = sys_read\(\);) 15.652 Tj
-0 -62.8363 Td
-(3145     break;) 9.03 Tj
-0 -64.1454 Td
-(3146   case SYS_close:) 13.244 Tj
-0 -65.4545 Td
-(3147     ret = sys_close\(\);) 16.254 Tj
-0 -66.7636 Td
-(3148     break;) 9.03 Tj
-0 -68.0727 Td
-(3149   case SYS_kill:) 12.642 Tj
-0 -72 Td
-(Sheet 31) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/file.h  Page 1) 161.635 Tj
+0 -28.4801 Td
+(3100 struct file {) 78.6333 Tj
+0 -37.9735 Td
+(3101   enum { FD_CLOSED, FD_NONE, FD_PIPE, FD_INODE } type;) 257.742 Tj
+0 -47.4668 Td
+(3102   int ref; // reference count) 148.529 Tj
+0 -56.9602 Td
+(3103   char readable;) 91.7388 Tj
+0 -66.4535 Td
+(3104   char writable;) 91.7388 Tj
+0 -75.9469 Td
+(3105   struct pipe *pipe;) 109.213 Tj
+0 -85.4403 Td
+(3106   struct inode *ip;) 104.844 Tj
+0 -94.9336 Td
+(3107   uint off;) 69.8962 Tj
+0 -104.427 Td
+(3108 };) 30.5796 Tj
+0 -113.92 Td
+(3109 ) 21.8426 Tj
+0 -123.414 Td
+(3110 ) 21.8426 Tj
+0 -132.907 Td
+(3111 ) 21.8426 Tj
+0 -142.4 Td
+(3112 ) 21.8426 Tj
+0 -151.894 Td
+(3113 ) 21.8426 Tj
+0 -161.387 Td
+(3114 ) 21.8426 Tj
+0 -170.88 Td
+(3115 ) 21.8426 Tj
+0 -180.374 Td
+(3116 ) 21.8426 Tj
+0 -189.867 Td
+(3117 ) 21.8426 Tj
+0 -199.361 Td
+(3118 ) 21.8426 Tj
+0 -208.854 Td
+(3119 ) 21.8426 Tj
+0 -218.347 Td
+(3120 ) 21.8426 Tj
+0 -227.841 Td
+(3121 ) 21.8426 Tj
+0 -237.334 Td
+(3122 ) 21.8426 Tj
+0 -246.827 Td
+(3123 ) 21.8426 Tj
+0 -256.321 Td
+(3124 ) 21.8426 Tj
+0 -265.814 Td
+(3125 ) 21.8426 Tj
+0 -275.307 Td
+(3126 ) 21.8426 Tj
+0 -284.801 Td
+(3127 ) 21.8426 Tj
+0 -294.294 Td
+(3128 ) 21.8426 Tj
+0 -303.788 Td
+(3129 ) 21.8426 Tj
+0 -313.281 Td
+(3130 ) 21.8426 Tj
+0 -322.774 Td
+(3131 ) 21.8426 Tj
+0 -332.268 Td
+(3132 ) 21.8426 Tj
+0 -341.761 Td
+(3133 ) 21.8426 Tj
+0 -351.254 Td
+(3134 ) 21.8426 Tj
+0 -360.748 Td
+(3135 ) 21.8426 Tj
+0 -370.241 Td
+(3136 ) 21.8426 Tj
+0 -379.734 Td
+(3137 ) 21.8426 Tj
+0 -389.228 Td
+(3138 ) 21.8426 Tj
+0 -398.721 Td
+(3139 ) 21.8426 Tj
+0 -408.214 Td
+(3140 ) 21.8426 Tj
+0 -417.708 Td
+(3141 ) 21.8426 Tj
+0 -427.201 Td
+(3142 ) 21.8426 Tj
+0 -436.695 Td
+(3143 ) 21.8426 Tj
+0 -446.188 Td
+(3144 ) 21.8426 Tj
+0 -455.681 Td
+(3145 ) 21.8426 Tj
+0 -465.175 Td
+(3146 ) 21.8426 Tj
+0 -474.668 Td
+(3147 ) 21.8426 Tj
+0 -484.161 Td
+(3148 ) 21.8426 Tj
+0 -493.655 Td
+(3149 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/syscall.c  Page 4) 24.08 Tj
-0 -3.92728 Td
-(3150     ret = sys_kill\(\);) 15.652 Tj
-0 -5.23637 Td
-(3151     break;) 9.03 Tj
-0 -6.54546 Td
-(3152   case SYS_exec:) 12.642 Tj
-0 -7.85455 Td
-(3153     ret = sys_exec\(\);) 15.652 Tj
-0 -9.16364 Td
-(3154     break;) 9.03 Tj
-0 -10.4727 Td
-(3155   case SYS_open:) 12.642 Tj
-0 -11.7818 Td
-(3156     ret = sys_open\(\);) 15.652 Tj
-0 -13.0909 Td
-(3157     break;) 9.03 Tj
-0 -14.4 Td
-(3158   case SYS_mknod:) 13.244 Tj
-0 -15.7091 Td
-(3159     ret = sys_mknod\(\);) 16.254 Tj
-0 -17.0182 Td
-(3160     break;) 9.03 Tj
-0 -18.3273 Td
-(3161   case SYS_unlink:) 13.846 Tj
-0 -19.6364 Td
-(3162     ret = sys_unlink\(\);) 16.856 Tj
-0 -20.9455 Td
-(3163     break;) 9.03 Tj
-0 -22.2545 Td
-(3164   case SYS_fstat:) 13.244 Tj
-0 -23.5636 Td
-(3165     ret = sys_fstat\(\);) 16.254 Tj
-0 -24.8727 Td
-(3166     break;) 9.03 Tj
-0 -26.1818 Td
-(3167   case SYS_link:) 12.642 Tj
-0 -27.4909 Td
-(3168     ret = sys_link\(\);) 15.652 Tj
-0 -28.8 Td
-(3169     break;) 9.03 Tj
-0 -30.1091 Td
-(3170   case SYS_mkdir:) 13.244 Tj
-0 -31.4182 Td
-(3171     ret = sys_mkdir\(\);) 16.254 Tj
-0 -32.7273 Td
-(3172     break;) 9.03 Tj
-0 -34.0364 Td
-(3173   case SYS_chdir:) 13.244 Tj
-0 -35.3454 Td
-(3174     ret = sys_chdir\(\);) 16.254 Tj
-0 -36.6545 Td
-(3175     break;) 9.03 Tj
-0 -37.9636 Td
-(3176   case SYS_dup:) 12.04 Tj
-0 -39.2727 Td
-(3177     ret = sys_dup\(\);) 15.05 Tj
-0 -40.5818 Td
-(3178     break;) 9.03 Tj
-0 -41.8909 Td
-(3179   case SYS_getpid:) 13.846 Tj
-0 -43.2 Td
-(3180     ret = sys_getpid\(\);) 16.856 Tj
-0 -44.5091 Td
-(3181     break;) 9.03 Tj
-0 -45.8182 Td
-(3182   case SYS_sbrk:) 12.642 Tj
-0 -47.1272 Td
-(3183     ret = sys_sbrk\(\);) 15.652 Tj
-0 -48.4363 Td
-(3184     break;) 9.03 Tj
-0 -49.7454 Td
-(3185   default:) 9.03 Tj
-0 -51.0545 Td
-(3186     cprintf\("unknown sys call %d\\n", num\);) 28.294 Tj
-0 -52.3636 Td
-(3187     // Maybe kill the process?) 21.07 Tj
-0 -53.6727 Td
-(3188     break;) 9.03 Tj
-0 -54.9818 Td
-(3189   }) 4.816 Tj
-0 -56.2909 Td
-(3190   cp->tf->eax = ret;) 15.05 Tj
-0 -57.6 Td
-(3191 }) 3.612 Tj
-0 -58.9091 Td
-(3192 ) 3.01 Tj
-0 -60.2181 Td
-(3193 ) 3.01 Tj
-0 -61.5272 Td
-(3194 ) 3.01 Tj
-0 -62.8363 Td
-(3195 ) 3.01 Tj
-0 -64.1454 Td
-(3196 ) 3.01 Tj
-0 -65.4545 Td
-(3197 ) 3.01 Tj
-0 -66.7636 Td
-(3198 ) 3.01 Tj
-0 -68.0727 Td
-(3199 ) 3.01 Tj
-0 -72 Td
-(Sheet 31) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  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.216 Tj
+0 -47.4668 Td
+(3152 ) 21.8426 Tj
+0 -56.9602 Td
+(3153 // Block 0 is unused.) 113.581 Tj
+0 -66.4535 Td
+(3154 // Block 1 is super block.) 135.424 Tj
+0 -75.9469 Td
+(3155 // Inodes start at block 2.) 139.792 Tj
+0 -85.4403 Td
+(3156 ) 21.8426 Tj
+0 -94.9336 Td
+(3157 #define BSIZE 512  // block size) 161.635 Tj
+0 -104.427 Td
+(3158 ) 21.8426 Tj
+0 -113.92 Td
+(3159 // File system super block) 135.424 Tj
+0 -123.414 Td
+(3160 struct superblock {) 104.844 Tj
+0 -132.907 Td
+(3161   uint size;         // Size of file system image \(blocks\
+\)) 275.216 Tj
+0 -142.4 Td
+(3162   uint nblocks;      // Number of data blocks) 218.426 Tj
+0 -151.894 Td
+(3163   uint ninodes;      // Number of inodes.) 200.952 Tj
+0 -161.387 Td
+(3164 };) 30.5796 Tj
+0 -170.88 Td
+(3165 ) 21.8426 Tj
+0 -180.374 Td
+(3166 #define NADDRS \(NDIRECT+1\)) 135.424 Tj
+0 -189.867 Td
+(3167 #define NDIRECT 12) 100.476 Tj
+0 -199.361 Td
+(3168 #define INDIRECT 12) 104.844 Tj
+0 -208.854 Td
+(3169 #define NINDIRECT \(BSIZE / sizeof\(uint\)\)) 196.583 Tj
+0 -218.347 Td
+(3170 #define MAXFILE \(NDIRECT  + NINDIRECT\)) 187.846 Tj
+0 -227.841 Td
+(3171 ) 21.8426 Tj
+0 -237.334 Td
+(3172 // On-disk inode structure) 135.424 Tj
+0 -246.827 Td
+(3173 struct dinode {) 87.3703 Tj
+0 -256.321 Td
+(3174   short type;           // File type) 179.109 Tj
+0 -265.814 Td
+(3175   short major;          // Major device number \(T_DEV onl\
+y\)) 279.585 Tj
+0 -275.307 Td
+(3176   short minor;          // Minor device number \(T_DEV onl\
+y\)) 279.585 Tj
+0 -284.801 Td
+(3177   short nlink;          // Number of links to inode in fil\
+e system) 310.165 Tj
+0 -294.294 Td
+(3178   uint size;            // Size of file \(bytes\)) 227.163 Tj
+0 -303.788 Td
+(3179   uint addrs[NADDRS];   // Data block addresses) 227.163 Tj
+0 -313.281 Td
+(3180 };) 30.5796 Tj
+0 -322.774 Td
+(3181 ) 21.8426 Tj
+0 -332.268 Td
+(3182 #define T_DIR  1   // Directory) 157.267 Tj
+0 -341.761 Td
+(3183 #define T_FILE 2   // File) 135.424 Tj
+0 -351.254 Td
+(3184 #define T_DEV  3   // Special device) 179.109 Tj
+0 -360.748 Td
+(3185 ) 21.8426 Tj
+0 -370.241 Td
+(3186 // Inodes per block.) 109.213 Tj
+0 -379.734 Td
+(3187 #define IPB           \(BSIZE / sizeof\(struct dinode\)\)) 253.374 Tj
+0 -389.228 Td
+(3188 ) 21.8426 Tj
+0 -398.721 Td
+(3189 // Block containing inode i) 139.792 Tj
+0 -408.214 Td
+(3190 #define IBLOCK\(i\)     \(\(i\) / IPB + 2\)) 183.478 Tj
+0 -417.708 Td
+(3191 ) 21.8426 Tj
+0 -427.201 Td
+(3192 // Bitmap bits per block) 126.687 Tj
+0 -436.695 Td
+(3193 #define BPB           \(BSIZE*8\)) 157.267 Tj
+0 -446.188 Td
+(3194 ) 21.8426 Tj
+0 -455.681 Td
+(3195 // Block containing bit for block b) 174.741 Tj
+0 -465.175 Td
+(3196 #define BBLOCK\(b, ninodes\) \(b/BPB + \(ninodes\)/IPB + 3\
+\)) 257.742 Tj
+0 -474.668 Td
+(3197 ) 21.8426 Tj
+0 -484.161 Td
+(3198 ) 21.8426 Tj
+0 -493.655 Td
+(3199 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 31) 34.9481 Tj
 Q
 Q
 Q
@@ -11552,6 +12317,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -11559,241 +12327,254 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/sysproc.c  Page 1) 24.08 Tj
-0 -3.92728 Td
-(3200 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(3201 #include "stat.h") 13.244 Tj
-0 -6.54546 Td
-(3202 #include "param.h") 13.846 Tj
-0 -7.85455 Td
-(3203 #include "mmu.h") 12.642 Tj
-0 -9.16364 Td
-(3204 #include "proc.h") 13.244 Tj
-0 -10.4727 Td
-(3205 #include "defs.h") 13.244 Tj
-0 -11.7818 Td
-(3206 #include "x86.h") 12.642 Tj
-0 -13.0909 Td
-(3207 #include "traps.h") 13.846 Tj
-0 -14.4 Td
-(3208 #include "syscall.h") 15.05 Tj
-0 -15.7091 Td
-(3209 #include "spinlock.h") 15.652 Tj
-0 -17.0182 Td
-(3210 #include "buf.h") 12.642 Tj
-0 -18.3273 Td
-(3211 #include "fs.h") 12.04 Tj
-0 -19.6364 Td
-(3212 #include "fsvar.h") 13.846 Tj
-0 -20.9455 Td
-(3213 #include "elf.h") 12.642 Tj
-0 -22.2545 Td
-(3214 #include "file.h") 13.244 Tj
-0 -23.5636 Td
-(3215 #include "fcntl.h") 13.846 Tj
-0 -24.8727 Td
-(3216 ) 3.01 Tj
-0 -26.1818 Td
-(3217 int) 4.816 Tj
-0 -27.4909 Td
-(3218 sys_fork\(void\)) 11.438 Tj
-0 -28.8 Td
-(3219 {) 3.612 Tj
-0 -30.1091 Td
-(3220   struct proc *np;) 13.846 Tj
-0 -31.4182 Td
-(3221 ) 3.01 Tj
-0 -32.7273 Td
-(3222   if\(\(np = copyproc\(curproc[cpu\(\)]\)\) == 0\)) 28.294 Tj
-0 -34.0364 Td
-(3223     return -1;) 11.438 Tj
-0 -35.3454 Td
-(3224   np->state = RUNNABLE;) 16.856 Tj
-0 -36.6545 Td
-(3225   return np->pid;) 13.244 Tj
-0 -37.9636 Td
-(3226 }) 3.612 Tj
-0 -39.2727 Td
-(3227 ) 3.01 Tj
-0 -40.5818 Td
-(3228 int) 4.816 Tj
-0 -41.8909 Td
-(3229 sys_exit\(void\)) 11.438 Tj
-0 -43.2 Td
-(3230 {) 3.612 Tj
-0 -44.5091 Td
-(3231   proc_exit\(\);) 11.438 Tj
-0 -45.8182 Td
-(3232   return 0;  // not reached) 19.264 Tj
-0 -47.1272 Td
-(3233 }) 3.612 Tj
-0 -48.4363 Td
-(3234 ) 3.01 Tj
-0 -49.7454 Td
-(3235 int) 4.816 Tj
-0 -51.0545 Td
-(3236 sys_wait\(void\)) 11.438 Tj
-0 -52.3636 Td
-(3237 {) 3.612 Tj
-0 -53.6727 Td
-(3238   return proc_wait\(\);) 15.652 Tj
-0 -54.9818 Td
-(3239 }) 3.612 Tj
-0 -56.2909 Td
-(3240 ) 3.01 Tj
-0 -57.6 Td
-(3241 int) 4.816 Tj
-0 -58.9091 Td
-(3242 sys_kill\(void\)) 11.438 Tj
-0 -60.2181 Td
-(3243 {) 3.612 Tj
-0 -61.5272 Td
-(3244   int pid;) 9.03 Tj
-0 -62.8363 Td
-(3245 ) 3.01 Tj
-0 -64.1454 Td
-(3246   if\(argint\(0, &pid\) < 0\)) 18.06 Tj
-0 -65.4545 Td
-(3247     return -1;) 11.438 Tj
-0 -66.7636 Td
-(3248   return proc_kill\(pid\);) 17.458 Tj
-0 -68.0727 Td
-(3249 }) 3.612 Tj
-0 -72 Td
-(Sheet 32) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  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.165 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.213 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.92 Td
+(3209 ) 21.8426 Tj
+0 -123.414 Td
+(3210 ) 21.8426 Tj
+0 -132.907 Td
+(3211 ) 21.8426 Tj
+0 -142.4 Td
+(3212 ) 21.8426 Tj
+0 -151.894 Td
+(3213 ) 21.8426 Tj
+0 -161.387 Td
+(3214 ) 21.8426 Tj
+0 -170.88 Td
+(3215 ) 21.8426 Tj
+0 -180.374 Td
+(3216 ) 21.8426 Tj
+0 -189.867 Td
+(3217 ) 21.8426 Tj
+0 -199.361 Td
+(3218 ) 21.8426 Tj
+0 -208.854 Td
+(3219 ) 21.8426 Tj
+0 -218.347 Td
+(3220 ) 21.8426 Tj
+0 -227.841 Td
+(3221 ) 21.8426 Tj
+0 -237.334 Td
+(3222 ) 21.8426 Tj
+0 -246.827 Td
+(3223 ) 21.8426 Tj
+0 -256.321 Td
+(3224 ) 21.8426 Tj
+0 -265.814 Td
+(3225 ) 21.8426 Tj
+0 -275.307 Td
+(3226 ) 21.8426 Tj
+0 -284.801 Td
+(3227 ) 21.8426 Tj
+0 -294.294 Td
+(3228 ) 21.8426 Tj
+0 -303.788 Td
+(3229 ) 21.8426 Tj
+0 -313.281 Td
+(3230 ) 21.8426 Tj
+0 -322.774 Td
+(3231 ) 21.8426 Tj
+0 -332.268 Td
+(3232 ) 21.8426 Tj
+0 -341.761 Td
+(3233 ) 21.8426 Tj
+0 -351.254 Td
+(3234 ) 21.8426 Tj
+0 -360.748 Td
+(3235 ) 21.8426 Tj
+0 -370.241 Td
+(3236 ) 21.8426 Tj
+0 -379.734 Td
+(3237 ) 21.8426 Tj
+0 -389.228 Td
+(3238 ) 21.8426 Tj
+0 -398.721 Td
+(3239 ) 21.8426 Tj
+0 -408.214 Td
+(3240 ) 21.8426 Tj
+0 -417.708 Td
+(3241 ) 21.8426 Tj
+0 -427.201 Td
+(3242 ) 21.8426 Tj
+0 -436.695 Td
+(3243 ) 21.8426 Tj
+0 -446.188 Td
+(3244 ) 21.8426 Tj
+0 -455.681 Td
+(3245 ) 21.8426 Tj
+0 -465.175 Td
+(3246 ) 21.8426 Tj
+0 -474.668 Td
+(3247 ) 21.8426 Tj
+0 -484.161 Td
+(3248 ) 21.8426 Tj
+0 -493.655 Td
+(3249 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/sysproc.c  Page 2) 24.08 Tj
-0 -3.92728 Td
-(3250 int) 4.816 Tj
-0 -5.23637 Td
-(3251 sys_getpid\(void\)) 12.642 Tj
-0 -6.54546 Td
-(3252 {) 3.612 Tj
-0 -7.85455 Td
-(3253   return curproc[cpu\(\)]->pid;) 20.468 Tj
-0 -9.16364 Td
-(3254 }) 3.612 Tj
-0 -10.4727 Td
-(3255 ) 3.01 Tj
-0 -11.7818 Td
-(3256 int) 4.816 Tj
-0 -13.0909 Td
-(3257 sys_sbrk\(void\)) 11.438 Tj
-0 -14.4 Td
-(3258 {) 3.612 Tj
-0 -15.7091 Td
-(3259   int addr;) 9.632 Tj
-0 -17.0182 Td
-(3260   int n;) 7.826 Tj
-0 -18.3273 Td
-(3261   struct proc *cp = curproc[cpu\(\)];) 24.08 Tj
-0 -19.6364 Td
-(3262 ) 3.01 Tj
-0 -20.9455 Td
-(3263   if\(argint\(0, &n\) < 0\)) 16.856 Tj
-0 -22.2545 Td
-(3264     return -1;) 11.438 Tj
-0 -23.5636 Td
-(3265   if\(\(addr = growproc\(n\)\) < 0\)) 21.07 Tj
-0 -24.8727 Td
-(3266     return -1;) 11.438 Tj
-0 -26.1818 Td
-(3267   setupsegs\(cp\);) 12.642 Tj
-0 -27.4909 Td
-(3268   return addr;) 11.438 Tj
-0 -28.8 Td
-(3269 }) 3.612 Tj
-0 -30.1091 Td
-(3270 ) 3.01 Tj
-0 -31.4182 Td
-(3271 ) 3.01 Tj
-0 -32.7273 Td
-(3272 ) 3.01 Tj
-0 -34.0364 Td
-(3273 ) 3.01 Tj
-0 -35.3454 Td
-(3274 ) 3.01 Tj
-0 -36.6545 Td
-(3275 ) 3.01 Tj
-0 -37.9636 Td
-(3276 ) 3.01 Tj
-0 -39.2727 Td
-(3277 ) 3.01 Tj
-0 -40.5818 Td
-(3278 ) 3.01 Tj
-0 -41.8909 Td
-(3279 ) 3.01 Tj
-0 -43.2 Td
-(3280 ) 3.01 Tj
-0 -44.5091 Td
-(3281 ) 3.01 Tj
-0 -45.8182 Td
-(3282 ) 3.01 Tj
-0 -47.1272 Td
-(3283 ) 3.01 Tj
-0 -48.4363 Td
-(3284 ) 3.01 Tj
-0 -49.7454 Td
-(3285 ) 3.01 Tj
-0 -51.0545 Td
-(3286 ) 3.01 Tj
-0 -52.3636 Td
-(3287 ) 3.01 Tj
-0 -53.6727 Td
-(3288 ) 3.01 Tj
-0 -54.9818 Td
-(3289 ) 3.01 Tj
-0 -56.2909 Td
-(3290 ) 3.01 Tj
-0 -57.6 Td
-(3291 ) 3.01 Tj
-0 -58.9091 Td
-(3292 ) 3.01 Tj
-0 -60.2181 Td
-(3293 ) 3.01 Tj
-0 -61.5272 Td
-(3294 ) 3.01 Tj
-0 -62.8363 Td
-(3295 ) 3.01 Tj
-0 -64.1454 Td
-(3296 ) 3.01 Tj
-0 -65.4545 Td
-(3297 ) 3.01 Tj
-0 -66.7636 Td
-(3298 ) 3.01 Tj
-0 -68.0727 Td
-(3299 ) 3.01 Tj
-0 -72 Td
-(Sheet 32) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/fsvar.h  Page 1) 166.004 Tj
+0 -28.4801 Td
+(3250 // in-core file system types) 144.161 Tj
+0 -37.9735 Td
+(3251 ) 21.8426 Tj
+0 -47.4668 Td
+(3252 struct inode {) 83.0018 Tj
+0 -56.9602 Td
+(3253   uint dev;           // Device number) 187.846 Tj
+0 -66.4535 Td
+(3254   uint inum;          // Inode number) 183.478 Tj
+0 -75.9469 Td
+(3255   int ref;            // Reference count) 196.583 Tj
+0 -85.4403 Td
+(3256   int flags;          // I_BUSY, I_VALID) 196.583 Tj
+0 -94.9336 Td
+(3257 ) 21.8426 Tj
+0 -104.427 Td
+(3258   short type;         // copy of disk inode) 209.689 Tj
+0 -113.92 Td
+(3259   short major;) 83.0018 Tj
+0 -123.414 Td
+(3260   short minor;) 83.0018 Tj
+0 -132.907 Td
+(3261   short nlink;) 83.0018 Tj
+0 -142.4 Td
+(3262   uint size;) 74.2647 Tj
+0 -151.894 Td
+(3263   uint addrs[NADDRS];) 113.581 Tj
+0 -161.387 Td
+(3264 };) 30.5796 Tj
+0 -170.88 Td
+(3265 ) 21.8426 Tj
+0 -180.374 Td
+(3266 #define I_BUSY 0x1) 100.476 Tj
+0 -189.867 Td
+(3267 #define I_VALID 0x2) 104.844 Tj
+0 -199.361 Td
+(3268 ) 21.8426 Tj
+0 -208.854 Td
+(3269 ) 21.8426 Tj
+0 -218.347 Td
+(3270 ) 21.8426 Tj
+0 -227.841 Td
+(3271 ) 21.8426 Tj
+0 -237.334 Td
+(3272 ) 21.8426 Tj
+0 -246.827 Td
+(3273 ) 21.8426 Tj
+0 -256.321 Td
+(3274 ) 21.8426 Tj
+0 -265.814 Td
+(3275 ) 21.8426 Tj
+0 -275.307 Td
+(3276 ) 21.8426 Tj
+0 -284.801 Td
+(3277 ) 21.8426 Tj
+0 -294.294 Td
+(3278 ) 21.8426 Tj
+0 -303.788 Td
+(3279 ) 21.8426 Tj
+0 -313.281 Td
+(3280 ) 21.8426 Tj
+0 -322.774 Td
+(3281 ) 21.8426 Tj
+0 -332.268 Td
+(3282 ) 21.8426 Tj
+0 -341.761 Td
+(3283 ) 21.8426 Tj
+0 -351.254 Td
+(3284 ) 21.8426 Tj
+0 -360.748 Td
+(3285 ) 21.8426 Tj
+0 -370.241 Td
+(3286 ) 21.8426 Tj
+0 -379.734 Td
+(3287 ) 21.8426 Tj
+0 -389.228 Td
+(3288 ) 21.8426 Tj
+0 -398.721 Td
+(3289 ) 21.8426 Tj
+0 -408.214 Td
+(3290 ) 21.8426 Tj
+0 -417.708 Td
+(3291 ) 21.8426 Tj
+0 -427.201 Td
+(3292 ) 21.8426 Tj
+0 -436.695 Td
+(3293 ) 21.8426 Tj
+0 -446.188 Td
+(3294 ) 21.8426 Tj
+0 -455.681 Td
+(3295 ) 21.8426 Tj
+0 -465.175 Td
+(3296 ) 21.8426 Tj
+0 -474.668 Td
+(3297 ) 21.8426 Tj
+0 -484.161 Td
+(3298 ) 21.8426 Tj
+0 -493.655 Td
+(3299 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 32) 34.9481 Tj
 Q
 Q
 Q
@@ -11804,7 +12585,10 @@ pdfEndPage
 %%Page: 40 40
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -11812,241 +12596,257 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/buf.h  Page 1) 21.672 Tj
-0 -3.92728 Td
-(3300 struct buf {) 10.234 Tj
-0 -5.23637 Td
-(3301   int flags;) 10.234 Tj
-0 -6.54546 Td
-(3302   uint dev;) 9.632 Tj
-0 -7.85455 Td
-(3303   uint sector;) 11.438 Tj
-0 -9.16364 Td
-(3304   struct buf *prev;) 14.448 Tj
-0 -10.4727 Td
-(3305   struct buf *next;) 14.448 Tj
-0 -11.7818 Td
-(3306   uchar data[512];) 13.846 Tj
-0 -13.0909 Td
-(3307 };) 4.214 Tj
-0 -14.4 Td
-(3308 #define B_BUSY 0x1  // buffer is locked by some process) 36.12 Tj
-0 -15.7091 Td
-(3309 #define B_VALID 0x2 // buffer contains the data of the sector) 39.732 Tj
-0 -17.0182 Td
-(3310 ) 3.01 Tj
-0 -18.3273 Td
-(3311 ) 3.01 Tj
-0 -19.6364 Td
-(3312 ) 3.01 Tj
-0 -20.9455 Td
-(3313 ) 3.01 Tj
-0 -22.2545 Td
-(3314 ) 3.01 Tj
-0 -23.5636 Td
-(3315 ) 3.01 Tj
-0 -24.8727 Td
-(3316 ) 3.01 Tj
-0 -26.1818 Td
-(3317 ) 3.01 Tj
-0 -27.4909 Td
-(3318 ) 3.01 Tj
-0 -28.8 Td
-(3319 ) 3.01 Tj
-0 -30.1091 Td
-(3320 ) 3.01 Tj
-0 -31.4182 Td
-(3321 ) 3.01 Tj
-0 -32.7273 Td
-(3322 ) 3.01 Tj
-0 -34.0364 Td
-(3323 ) 3.01 Tj
-0 -35.3454 Td
-(3324 ) 3.01 Tj
-0 -36.6545 Td
-(3325 ) 3.01 Tj
-0 -37.9636 Td
-(3326 ) 3.01 Tj
-0 -39.2727 Td
-(3327 ) 3.01 Tj
-0 -40.5818 Td
-(3328 ) 3.01 Tj
-0 -41.8909 Td
-(3329 ) 3.01 Tj
-0 -43.2 Td
-(3330 ) 3.01 Tj
-0 -44.5091 Td
-(3331 ) 3.01 Tj
-0 -45.8182 Td
-(3332 ) 3.01 Tj
-0 -47.1272 Td
-(3333 ) 3.01 Tj
-0 -48.4363 Td
-(3334 ) 3.01 Tj
-0 -49.7454 Td
-(3335 ) 3.01 Tj
-0 -51.0545 Td
-(3336 ) 3.01 Tj
-0 -52.3636 Td
-(3337 ) 3.01 Tj
-0 -53.6727 Td
-(3338 ) 3.01 Tj
-0 -54.9818 Td
-(3339 ) 3.01 Tj
-0 -56.2909 Td
-(3340 ) 3.01 Tj
-0 -57.6 Td
-(3341 ) 3.01 Tj
-0 -58.9091 Td
-(3342 ) 3.01 Tj
-0 -60.2181 Td
-(3343 ) 3.01 Tj
-0 -61.5272 Td
-(3344 ) 3.01 Tj
-0 -62.8363 Td
-(3345 ) 3.01 Tj
-0 -64.1454 Td
-(3346 ) 3.01 Tj
-0 -65.4545 Td
-(3347 ) 3.01 Tj
-0 -66.7636 Td
-(3348 ) 3.01 Tj
-0 -68.0727 Td
-(3349 ) 3.01 Tj
-0 -72 Td
-(Sheet 33) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/ide.c  Page 1) 157.267 Tj
+0 -28.4801 Td
+(3300 // Simple PIO-based \(non-DMA\) IDE driver code.) 222.794 Tj
+0 -37.9735 Td
+(3301 ) 21.8426 Tj
+0 -47.4668 Td
+(3302 #include "types.h") 100.476 Tj
+0 -56.9602 Td
+(3303 #include "defs.h") 96.1073 Tj
+0 -66.4535 Td
+(3304 #include "param.h") 100.476 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.476 Tj
+0 -113.92 Td
+(3309 #include "spinlock.h") 113.581 Tj
+0 -123.414 Td
+(3310 #include "buf.h") 91.7388 Tj
+0 -132.907 Td
+(3311 ) 21.8426 Tj
+0 -142.4 Td
+(3312 #define IDE_BSY       0x80) 135.424 Tj
+0 -151.894 Td
+(3313 #define IDE_DRDY      0x40) 135.424 Tj
+0 -161.387 Td
+(3314 #define IDE_DF        0x20) 135.424 Tj
+0 -170.88 Td
+(3315 #define IDE_ERR       0x01) 135.424 Tj
+0 -180.374 Td
+(3316 ) 21.8426 Tj
+0 -189.867 Td
+(3317 #define IDE_CMD_READ  0x20) 135.424 Tj
+0 -199.361 Td
+(3318 #define IDE_CMD_WRITE 0x30) 135.424 Tj
+0 -208.854 Td
+(3319 ) 21.8426 Tj
+0 -218.347 Td
+(3320 // ide_queue points to the buf now being read/written to t\
+he disk.) 310.165 Tj
+0 -227.841 Td
+(3321 // ide_queue->qnext points to the next buf to be processed\
+.) 279.585 Tj
+0 -237.334 Td
+(3322 // You must hold ide_lock while manipulating queue.) 244.637 Tj
+0 -246.827 Td
+(3323 ) 21.8426 Tj
+0 -256.321 Td
+(3324 static struct spinlock ide_lock;) 161.635 Tj
+0 -265.814 Td
+(3325 static struct buf *ide_queue;) 148.529 Tj
+0 -275.307 Td
+(3326 ) 21.8426 Tj
+0 -284.801 Td
+(3327 static int disk_1_present;) 135.424 Tj
+0 -294.294 Td
+(3328 static void ide_start_request\(\);) 161.635 Tj
+0 -303.788 Td
+(3329 ) 21.8426 Tj
+0 -313.281 Td
+(3330 // Wait for IDE disk to become ready.) 183.478 Tj
+0 -322.774 Td
+(3331 static int) 65.5277 Tj
+0 -332.268 Td
+(3332 ide_wait_ready\(int check_error\)) 157.267 Tj
+0 -341.761 Td
+(3333 {) 26.2111 Tj
+0 -351.254 Td
+(3334   int r;) 56.7907 Tj
+0 -360.748 Td
+(3335 ) 21.8426 Tj
+0 -370.241 Td
+(3336   while\(\(\(r = inb\(0x1f7\)\) & IDE_BSY\) || !\(r & IDE_\
+DRDY\)\)) 266.479 Tj
+0 -379.734 Td
+(3337     ;) 43.6851 Tj
+0 -389.228 Td
+(3338   if\(check_error && \(r & \(IDE_DF|IDE_ERR\)\) != 0\)) 231.531 Tj
+0 -398.721 Td
+(3339     return -1;) 83.0018 Tj
+0 -408.214 Td
+(3340   return 0;) 69.8962 Tj
+0 -417.708 Td
+(3341 }) 26.2111 Tj
+0 -427.201 Td
+(3342 ) 21.8426 Tj
+0 -436.695 Td
+(3343 ) 21.8426 Tj
+0 -446.188 Td
+(3344 ) 21.8426 Tj
+0 -455.681 Td
+(3345 ) 21.8426 Tj
+0 -465.175 Td
+(3346 ) 21.8426 Tj
+0 -474.668 Td
+(3347 ) 21.8426 Tj
+0 -484.161 Td
+(3348 ) 21.8426 Tj
+0 -493.655 Td
+(3349 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/dev.h  Page 1) 21.672 Tj
-0 -3.92728 Td
-(3350 struct devsw {) 11.438 Tj
-0 -5.23637 Td
-(3351   int \(*read\)\(int, char*, int\);) 21.672 Tj
-0 -6.54546 Td
-(3352   int \(*write\)\(int, char*, int\);) 22.274 Tj
-0 -7.85455 Td
-(3353 };) 4.214 Tj
-0 -9.16364 Td
-(3354 ) 3.01 Tj
-0 -10.4727 Td
-(3355 extern struct devsw devsw[];) 19.866 Tj
-0 -11.7818 Td
-(3356 ) 3.01 Tj
-0 -13.0909 Td
-(3357 #define CONSOLE 1) 13.244 Tj
-0 -14.4 Td
-(3358 ) 3.01 Tj
-0 -15.7091 Td
-(3359 ) 3.01 Tj
-0 -17.0182 Td
-(3360 ) 3.01 Tj
-0 -18.3273 Td
-(3361 ) 3.01 Tj
-0 -19.6364 Td
-(3362 ) 3.01 Tj
-0 -20.9455 Td
-(3363 ) 3.01 Tj
-0 -22.2545 Td
-(3364 ) 3.01 Tj
-0 -23.5636 Td
-(3365 ) 3.01 Tj
-0 -24.8727 Td
-(3366 ) 3.01 Tj
-0 -26.1818 Td
-(3367 ) 3.01 Tj
-0 -27.4909 Td
-(3368 ) 3.01 Tj
-0 -28.8 Td
-(3369 ) 3.01 Tj
-0 -30.1091 Td
-(3370 ) 3.01 Tj
-0 -31.4182 Td
-(3371 ) 3.01 Tj
-0 -32.7273 Td
-(3372 ) 3.01 Tj
-0 -34.0364 Td
-(3373 ) 3.01 Tj
-0 -35.3454 Td
-(3374 ) 3.01 Tj
-0 -36.6545 Td
-(3375 ) 3.01 Tj
-0 -37.9636 Td
-(3376 ) 3.01 Tj
-0 -39.2727 Td
-(3377 ) 3.01 Tj
-0 -40.5818 Td
-(3378 ) 3.01 Tj
-0 -41.8909 Td
-(3379 ) 3.01 Tj
-0 -43.2 Td
-(3380 ) 3.01 Tj
-0 -44.5091 Td
-(3381 ) 3.01 Tj
-0 -45.8182 Td
-(3382 ) 3.01 Tj
-0 -47.1272 Td
-(3383 ) 3.01 Tj
-0 -48.4363 Td
-(3384 ) 3.01 Tj
-0 -49.7454 Td
-(3385 ) 3.01 Tj
-0 -51.0545 Td
-(3386 ) 3.01 Tj
-0 -52.3636 Td
-(3387 ) 3.01 Tj
-0 -53.6727 Td
-(3388 ) 3.01 Tj
-0 -54.9818 Td
-(3389 ) 3.01 Tj
-0 -56.2909 Td
-(3390 ) 3.01 Tj
-0 -57.6 Td
-(3391 ) 3.01 Tj
-0 -58.9091 Td
-(3392 ) 3.01 Tj
-0 -60.2181 Td
-(3393 ) 3.01 Tj
-0 -61.5272 Td
-(3394 ) 3.01 Tj
-0 -62.8363 Td
-(3395 ) 3.01 Tj
-0 -64.1454 Td
-(3396 ) 3.01 Tj
-0 -65.4545 Td
-(3397 ) 3.01 Tj
-0 -66.7636 Td
-(3398 ) 3.01 Tj
-0 -68.0727 Td
-(3399 ) 3.01 Tj
-0 -72 Td
-(Sheet 33) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/ide.c  Page 2) 157.267 Tj
+0 -28.4801 Td
+(3350 void) 39.3166 Tj
+0 -37.9735 Td
+(3351 ide_init\(void\)) 83.0018 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\(&ide_lock, "ide"\);) 148.529 Tj
+0 -85.4403 Td
+(3356   pic_enable\(IRQ_IDE\);) 117.95 Tj
+0 -94.9336 Td
+(3357   ioapic_enable\(IRQ_IDE, ncpu - 1\);) 174.741 Tj
+0 -104.427 Td
+(3358   ide_wait_ready\(0\);) 109.213 Tj
+0 -113.92 Td
+(3359 ) 21.8426 Tj
+0 -123.414 Td
+(3360   // Check if disk 1 is present) 157.267 Tj
+0 -132.907 Td
+(3361   outb\(0x1f6, 0xe0 | \(1<<4\)\);) 148.529 Tj
+0 -142.4 Td
+(3362   for\(i=0; i<1000; i++\){) 126.687 Tj
+0 -151.894 Td
+(3363     if\(inb\(0x1f7\) != 0\){) 126.687 Tj
+0 -161.387 Td
+(3364       disk_1_present = 1;) 131.055 Tj
+0 -170.88 Td
+(3365       break;) 74.2647 Tj
+0 -180.374 Td
+(3366     }) 43.6851 Tj
+0 -189.867 Td
+(3367   }) 34.9481 Tj
+0 -199.361 Td
+(3368 ) 21.8426 Tj
+0 -208.854 Td
+(3369   // Switch back to disk 0.) 139.792 Tj
+0 -218.347 Td
+(3370   outb\(0x1f6, 0xe0 | \(0<<4\)\);) 148.529 Tj
+0 -227.841 Td
+(3371 }) 26.2111 Tj
+0 -237.334 Td
+(3372 ) 21.8426 Tj
+0 -246.827 Td
+(3373 // Start the request for b.  Caller must hold ide_lock.) 262.111 Tj
+0 -256.321 Td
+(3374 static void) 69.8962 Tj
+0 -265.814 Td
+(3375 ide_start_request\(struct buf *b\)) 161.635 Tj
+0 -275.307 Td
+(3376 {) 26.2111 Tj
+0 -284.801 Td
+(3377   if\(b == 0\)) 74.2647 Tj
+0 -294.294 Td
+(3378     panic\("ide_start_request"\);) 157.267 Tj
+0 -303.788 Td
+(3379 ) 21.8426 Tj
+0 -313.281 Td
+(3380   ide_wait_ready\(0\);) 109.213 Tj
+0 -322.774 Td
+(3381   outb\(0x3f6, 0\);  // generate interrupt) 196.583 Tj
+0 -332.268 Td
+(3382   outb\(0x1f2, 1\);  // number of sectors) 192.215 Tj
+0 -341.761 Td
+(3383   outb\(0x1f3, b->sector & 0xff\);) 161.635 Tj
+0 -351.254 Td
+(3384   outb\(0x1f4, \(b->sector >> 8\) & 0xff\);) 192.215 Tj
+0 -360.748 Td
+(3385   outb\(0x1f5, \(b->sector >> 16\) & 0xff\);) 196.583 Tj
+0 -370.241 Td
+(3386   outb\(0x1f6, 0xe0 | \(\(b->dev&1\)<<4\) | \(\(b->sector>\
+>24\)&0x0f\)\);) 297.059 Tj
+0 -379.734 Td
+(3387   if\(b->flags & B_DIRTY\){) 131.055 Tj
+0 -389.228 Td
+(3388     outb\(0x1f7, IDE_CMD_WRITE\);) 157.267 Tj
+0 -398.721 Td
+(3389     outsl\(0x1f0, b->data, 512/4\);) 166.004 Tj
+0 -408.214 Td
+(3390   } else {) 65.5277 Tj
+0 -417.708 Td
+(3391     outb\(0x1f7, IDE_CMD_READ\);) 152.898 Tj
+0 -427.201 Td
+(3392   }) 34.9481 Tj
+0 -436.695 Td
+(3393 }) 26.2111 Tj
+0 -446.188 Td
+(3394 ) 21.8426 Tj
+0 -455.681 Td
+(3395 ) 21.8426 Tj
+0 -465.175 Td
+(3396 ) 21.8426 Tj
+0 -474.668 Td
+(3397 ) 21.8426 Tj
+0 -484.161 Td
+(3398 ) 21.8426 Tj
+0 -493.655 Td
+(3399 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 33) 34.9481 Tj
 Q
 Q
 Q
@@ -12058,6 +12858,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -12065,241 +12868,255 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fcntl.h  Page 1) 22.876 Tj
-0 -3.92728 Td
-(3400 #define O_CREATE  0x200) 16.856 Tj
-0 -5.23637 Td
-(3401 #define O_RDONLY  0x000) 16.856 Tj
-0 -6.54546 Td
-(3402 #define O_WRONLY  0x001) 16.856 Tj
-0 -7.85455 Td
-(3403 #define O_RDWR    0x002) 16.856 Tj
-0 -9.16364 Td
-(3404 ) 3.01 Tj
-0 -10.4727 Td
-(3405 ) 3.01 Tj
-0 -11.7818 Td
-(3406 ) 3.01 Tj
-0 -13.0909 Td
-(3407 ) 3.01 Tj
-0 -14.4 Td
-(3408 ) 3.01 Tj
-0 -15.7091 Td
-(3409 ) 3.01 Tj
-0 -17.0182 Td
-(3410 ) 3.01 Tj
-0 -18.3273 Td
-(3411 ) 3.01 Tj
-0 -19.6364 Td
-(3412 ) 3.01 Tj
-0 -20.9455 Td
-(3413 ) 3.01 Tj
-0 -22.2545 Td
-(3414 ) 3.01 Tj
-0 -23.5636 Td
-(3415 ) 3.01 Tj
-0 -24.8727 Td
-(3416 ) 3.01 Tj
-0 -26.1818 Td
-(3417 ) 3.01 Tj
-0 -27.4909 Td
-(3418 ) 3.01 Tj
-0 -28.8 Td
-(3419 ) 3.01 Tj
-0 -30.1091 Td
-(3420 ) 3.01 Tj
-0 -31.4182 Td
-(3421 ) 3.01 Tj
-0 -32.7273 Td
-(3422 ) 3.01 Tj
-0 -34.0364 Td
-(3423 ) 3.01 Tj
-0 -35.3454 Td
-(3424 ) 3.01 Tj
-0 -36.6545 Td
-(3425 ) 3.01 Tj
-0 -37.9636 Td
-(3426 ) 3.01 Tj
-0 -39.2727 Td
-(3427 ) 3.01 Tj
-0 -40.5818 Td
-(3428 ) 3.01 Tj
-0 -41.8909 Td
-(3429 ) 3.01 Tj
-0 -43.2 Td
-(3430 ) 3.01 Tj
-0 -44.5091 Td
-(3431 ) 3.01 Tj
-0 -45.8182 Td
-(3432 ) 3.01 Tj
-0 -47.1272 Td
-(3433 ) 3.01 Tj
-0 -48.4363 Td
-(3434 ) 3.01 Tj
-0 -49.7454 Td
-(3435 ) 3.01 Tj
-0 -51.0545 Td
-(3436 ) 3.01 Tj
-0 -52.3636 Td
-(3437 ) 3.01 Tj
-0 -53.6727 Td
-(3438 ) 3.01 Tj
-0 -54.9818 Td
-(3439 ) 3.01 Tj
-0 -56.2909 Td
-(3440 ) 3.01 Tj
-0 -57.6 Td
-(3441 ) 3.01 Tj
-0 -58.9091 Td
-(3442 ) 3.01 Tj
-0 -60.2181 Td
-(3443 ) 3.01 Tj
-0 -61.5272 Td
-(3444 ) 3.01 Tj
-0 -62.8363 Td
-(3445 ) 3.01 Tj
-0 -64.1454 Td
-(3446 ) 3.01 Tj
-0 -65.4545 Td
-(3447 ) 3.01 Tj
-0 -66.7636 Td
-(3448 ) 3.01 Tj
-0 -68.0727 Td
-(3449 ) 3.01 Tj
-0 -72 Td
-(Sheet 34) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/ide.c  Page 3) 157.267 Tj
+0 -28.4801 Td
+(3400 // Interrupt handler.) 113.581 Tj
+0 -37.9735 Td
+(3401 void) 39.3166 Tj
+0 -47.4668 Td
+(3402 ide_intr\(void\)) 83.0018 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   acquire\(&ide_lock\);) 113.581 Tj
+0 -94.9336 Td
+(3407   if\(\(b = ide_queue\) == 0\){) 139.792 Tj
+0 -104.427 Td
+(3408     cprintf\("stray ide interrupt\\n"\);) 183.478 Tj
+0 -113.92 Td
+(3409     release\(&ide_lock\);) 122.318 Tj
+0 -123.414 Td
+(3410     return;) 69.8962 Tj
+0 -132.907 Td
+(3411   }) 34.9481 Tj
+0 -142.4 Td
+(3412 ) 21.8426 Tj
+0 -151.894 Td
+(3413   // Read data if needed.) 131.055 Tj
+0 -161.387 Td
+(3414   if\(!\(b->flags & B_DIRTY\) && ide_wait_ready\(1\) >= 0\)) 253.374 Tj
+0 -170.88 Td
+(3415     insl\(0x1f0, b->data, 512/4\);) 161.635 Tj
+0 -180.374 Td
+(3416 ) 21.8426 Tj
+0 -189.867 Td
+(3417   // Wake process waiting for this buf.) 192.215 Tj
+0 -199.361 Td
+(3418   b->flags |= B_VALID;) 117.95 Tj
+0 -208.854 Td
+(3419   b->flags &= ~B_DIRTY;) 122.318 Tj
+0 -218.347 Td
+(3420   wakeup\(b\);) 74.2647 Tj
+0 -227.841 Td
+(3421 ) 21.8426 Tj
+0 -237.334 Td
+(3422   // Start disk on next buf in queue.) 183.478 Tj
+0 -246.827 Td
+(3423   if\(\(ide_queue = b->qnext\) != 0\)) 166.004 Tj
+0 -256.321 Td
+(3424     ide_start_request\(ide_queue\);) 166.004 Tj
+0 -265.814 Td
+(3425 ) 21.8426 Tj
+0 -275.307 Td
+(3426   release\(&ide_lock\);) 113.581 Tj
+0 -284.801 Td
+(3427 }) 26.2111 Tj
+0 -294.294 Td
+(3428 ) 21.8426 Tj
+0 -303.788 Td
+(3429 ) 21.8426 Tj
+0 -313.281 Td
+(3430 ) 21.8426 Tj
+0 -322.774 Td
+(3431 ) 21.8426 Tj
+0 -332.268 Td
+(3432 ) 21.8426 Tj
+0 -341.761 Td
+(3433 ) 21.8426 Tj
+0 -351.254 Td
+(3434 ) 21.8426 Tj
+0 -360.748 Td
+(3435 ) 21.8426 Tj
+0 -370.241 Td
+(3436 ) 21.8426 Tj
+0 -379.734 Td
+(3437 ) 21.8426 Tj
+0 -389.228 Td
+(3438 ) 21.8426 Tj
+0 -398.721 Td
+(3439 ) 21.8426 Tj
+0 -408.214 Td
+(3440 ) 21.8426 Tj
+0 -417.708 Td
+(3441 ) 21.8426 Tj
+0 -427.201 Td
+(3442 ) 21.8426 Tj
+0 -436.695 Td
+(3443 ) 21.8426 Tj
+0 -446.188 Td
+(3444 ) 21.8426 Tj
+0 -455.681 Td
+(3445 ) 21.8426 Tj
+0 -465.175 Td
+(3446 ) 21.8426 Tj
+0 -474.668 Td
+(3447 ) 21.8426 Tj
+0 -484.161 Td
+(3448 ) 21.8426 Tj
+0 -493.655 Td
+(3449 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/stat.h  Page 1) 22.274 Tj
-0 -3.92728 Td
-(3450 struct stat {) 10.836 Tj
-0 -5.23637 Td
-(3451   int dev;     // Device number) 21.672 Tj
-0 -6.54546 Td
-(3452   uint ino;    // Inode number on device) 27.09 Tj
-0 -7.85455 Td
-(3453   short type;  // Type of file) 21.07 Tj
-0 -9.16364 Td
-(3454   short nlink; // Number of links to file) 27.692 Tj
-0 -10.4727 Td
-(3455   uint size;   // Size of file in bytes) 26.488 Tj
-0 -11.7818 Td
-(3456 };) 4.214 Tj
-0 -13.0909 Td
-(3457 ) 3.01 Tj
-0 -14.4 Td
-(3458 ) 3.01 Tj
-0 -15.7091 Td
-(3459 ) 3.01 Tj
-0 -17.0182 Td
-(3460 ) 3.01 Tj
-0 -18.3273 Td
-(3461 ) 3.01 Tj
-0 -19.6364 Td
-(3462 ) 3.01 Tj
-0 -20.9455 Td
-(3463 ) 3.01 Tj
-0 -22.2545 Td
-(3464 ) 3.01 Tj
-0 -23.5636 Td
-(3465 ) 3.01 Tj
-0 -24.8727 Td
-(3466 ) 3.01 Tj
-0 -26.1818 Td
-(3467 ) 3.01 Tj
-0 -27.4909 Td
-(3468 ) 3.01 Tj
-0 -28.8 Td
-(3469 ) 3.01 Tj
-0 -30.1091 Td
-(3470 ) 3.01 Tj
-0 -31.4182 Td
-(3471 ) 3.01 Tj
-0 -32.7273 Td
-(3472 ) 3.01 Tj
-0 -34.0364 Td
-(3473 ) 3.01 Tj
-0 -35.3454 Td
-(3474 ) 3.01 Tj
-0 -36.6545 Td
-(3475 ) 3.01 Tj
-0 -37.9636 Td
-(3476 ) 3.01 Tj
-0 -39.2727 Td
-(3477 ) 3.01 Tj
-0 -40.5818 Td
-(3478 ) 3.01 Tj
-0 -41.8909 Td
-(3479 ) 3.01 Tj
-0 -43.2 Td
-(3480 ) 3.01 Tj
-0 -44.5091 Td
-(3481 ) 3.01 Tj
-0 -45.8182 Td
-(3482 ) 3.01 Tj
-0 -47.1272 Td
-(3483 ) 3.01 Tj
-0 -48.4363 Td
-(3484 ) 3.01 Tj
-0 -49.7454 Td
-(3485 ) 3.01 Tj
-0 -51.0545 Td
-(3486 ) 3.01 Tj
-0 -52.3636 Td
-(3487 ) 3.01 Tj
-0 -53.6727 Td
-(3488 ) 3.01 Tj
-0 -54.9818 Td
-(3489 ) 3.01 Tj
-0 -56.2909 Td
-(3490 ) 3.01 Tj
-0 -57.6 Td
-(3491 ) 3.01 Tj
-0 -58.9091 Td
-(3492 ) 3.01 Tj
-0 -60.2181 Td
-(3493 ) 3.01 Tj
-0 -61.5272 Td
-(3494 ) 3.01 Tj
-0 -62.8363 Td
-(3495 ) 3.01 Tj
-0 -64.1454 Td
-(3496 ) 3.01 Tj
-0 -65.4545 Td
-(3497 ) 3.01 Tj
-0 -66.7636 Td
-(3498 ) 3.01 Tj
-0 -68.0727 Td
-(3499 ) 3.01 Tj
-0 -72 Td
-(Sheet 34) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/ide.c  Page 4) 157.267 Tj
+0 -28.4801 Td
+(3450 // Sync buf with disk.) 117.95 Tj
+0 -37.9735 Td
+(3451 // If B_DIRTY is set, write buf to disk, clear B_DIRTY, se\
+t B_VALID.) 318.902 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 ide_rw\(struct buf *b\)) 113.581 Tj
+0 -75.9469 Td
+(3455 {) 26.2111 Tj
+0 -85.4403 Td
+(3456   struct buf **pp;) 100.476 Tj
+0 -94.9336 Td
+(3457 ) 21.8426 Tj
+0 -104.427 Td
+(3458   if\(!\(b->flags & B_BUSY\)\)) 135.424 Tj
+0 -113.92 Td
+(3459     panic\("ide_rw: buf not busy"\);) 170.372 Tj
+0 -123.414 Td
+(3460   if\(\(b->flags & \(B_VALID|B_DIRTY\)\) == B_VALID\)) 227.163 Tj
+0 -132.907 Td
+(3461     panic\("ide_rw: nothing to do"\);) 174.741 Tj
+0 -142.4 Td
+(3462   if\(b->dev != 0 && !disk_1_present\)) 179.109 Tj
+0 -151.894 Td
+(3463     panic\("ide disk 1 not present"\);) 179.109 Tj
+0 -161.387 Td
+(3464 ) 21.8426 Tj
+0 -170.88 Td
+(3465   acquire\(&ide_lock\);) 113.581 Tj
+0 -180.374 Td
+(3466 ) 21.8426 Tj
+0 -189.867 Td
+(3467   // Append b to ide_queue.) 139.792 Tj
+0 -199.361 Td
+(3468   b->qnext = 0;) 87.3703 Tj
+0 -208.854 Td
+(3469   for\(pp=&ide_queue; *pp; pp=&\(*pp\)->qnext\)) 209.689 Tj
+0 -218.347 Td
+(3470     ;) 43.6851 Tj
+0 -227.841 Td
+(3471   *pp = b;) 65.5277 Tj
+0 -237.334 Td
+(3472 ) 21.8426 Tj
+0 -246.827 Td
+(3473   // Start disk if necessary.) 148.529 Tj
+0 -256.321 Td
+(3474   if\(ide_queue == b\)) 109.213 Tj
+0 -265.814 Td
+(3475     ide_start_request\(b\);) 131.055 Tj
+0 -275.307 Td
+(3476 ) 21.8426 Tj
+0 -284.801 Td
+(3477   // Wait for request to finish.) 161.635 Tj
+0 -294.294 Td
+(3478   // Assuming will not sleep too long: ignore cp->killed.) 270.848 Tj
+0 -303.788 Td
+(3479   while\(\(b->flags & \(B_VALID|B_DIRTY\)\) != B_VALID\)) 240.268 Tj
+0 -313.281 Td
+(3480     sleep\(b, &ide_lock\);) 126.687 Tj
+0 -322.774 Td
+(3481 ) 21.8426 Tj
+0 -332.268 Td
+(3482   release\(&ide_lock\);) 113.581 Tj
+0 -341.761 Td
+(3483 }) 26.2111 Tj
+0 -351.254 Td
+(3484 ) 21.8426 Tj
+0 -360.748 Td
+(3485 ) 21.8426 Tj
+0 -370.241 Td
+(3486 ) 21.8426 Tj
+0 -379.734 Td
+(3487 ) 21.8426 Tj
+0 -389.228 Td
+(3488 ) 21.8426 Tj
+0 -398.721 Td
+(3489 ) 21.8426 Tj
+0 -408.214 Td
+(3490 ) 21.8426 Tj
+0 -417.708 Td
+(3491 ) 21.8426 Tj
+0 -427.201 Td
+(3492 ) 21.8426 Tj
+0 -436.695 Td
+(3493 ) 21.8426 Tj
+0 -446.188 Td
+(3494 ) 21.8426 Tj
+0 -455.681 Td
+(3495 ) 21.8426 Tj
+0 -465.175 Td
+(3496 ) 21.8426 Tj
+0 -474.668 Td
+(3497 ) 21.8426 Tj
+0 -484.161 Td
+(3498 ) 21.8426 Tj
+0 -493.655 Td
+(3499 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 34) 34.9481 Tj
 Q
 Q
 Q
@@ -12310,7 +13127,10 @@ pdfEndPage
 %%Page: 42 42
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -12318,241 +13138,259 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/file.h  Page 1) 22.274 Tj
-0 -3.92728 Td
-(3500 struct file {) 10.836 Tj
-0 -5.23637 Td
-(3501   enum { FD_CLOSED, FD_NONE, FD_PIPE, FD_FILE } type;) 34.916 Tj
-0 -6.54546 Td
-(3502   int ref; // reference count) 20.468 Tj
-0 -7.85455 Td
-(3503   char readable;) 12.642 Tj
-0 -9.16364 Td
-(3504   char writable;) 12.642 Tj
-0 -10.4727 Td
-(3505   struct pipe *pipe;) 15.05 Tj
-0 -11.7818 Td
-(3506   struct inode *ip;) 14.448 Tj
-0 -13.0909 Td
-(3507   uint off;) 9.632 Tj
-0 -14.4 Td
-(3508 };) 4.214 Tj
-0 -15.7091 Td
-(3509 ) 3.01 Tj
-0 -17.0182 Td
-(3510 ) 3.01 Tj
-0 -18.3273 Td
-(3511 ) 3.01 Tj
-0 -19.6364 Td
-(3512 ) 3.01 Tj
-0 -20.9455 Td
-(3513 ) 3.01 Tj
-0 -22.2545 Td
-(3514 ) 3.01 Tj
-0 -23.5636 Td
-(3515 ) 3.01 Tj
-0 -24.8727 Td
-(3516 ) 3.01 Tj
-0 -26.1818 Td
-(3517 ) 3.01 Tj
-0 -27.4909 Td
-(3518 ) 3.01 Tj
-0 -28.8 Td
-(3519 ) 3.01 Tj
-0 -30.1091 Td
-(3520 ) 3.01 Tj
-0 -31.4182 Td
-(3521 ) 3.01 Tj
-0 -32.7273 Td
-(3522 ) 3.01 Tj
-0 -34.0364 Td
-(3523 ) 3.01 Tj
-0 -35.3454 Td
-(3524 ) 3.01 Tj
-0 -36.6545 Td
-(3525 ) 3.01 Tj
-0 -37.9636 Td
-(3526 ) 3.01 Tj
-0 -39.2727 Td
-(3527 ) 3.01 Tj
-0 -40.5818 Td
-(3528 ) 3.01 Tj
-0 -41.8909 Td
-(3529 ) 3.01 Tj
-0 -43.2 Td
-(3530 ) 3.01 Tj
-0 -44.5091 Td
-(3531 ) 3.01 Tj
-0 -45.8182 Td
-(3532 ) 3.01 Tj
-0 -47.1272 Td
-(3533 ) 3.01 Tj
-0 -48.4363 Td
-(3534 ) 3.01 Tj
-0 -49.7454 Td
-(3535 ) 3.01 Tj
-0 -51.0545 Td
-(3536 ) 3.01 Tj
-0 -52.3636 Td
-(3537 ) 3.01 Tj
-0 -53.6727 Td
-(3538 ) 3.01 Tj
-0 -54.9818 Td
-(3539 ) 3.01 Tj
-0 -56.2909 Td
-(3540 ) 3.01 Tj
-0 -57.6 Td
-(3541 ) 3.01 Tj
-0 -58.9091 Td
-(3542 ) 3.01 Tj
-0 -60.2181 Td
-(3543 ) 3.01 Tj
-0 -61.5272 Td
-(3544 ) 3.01 Tj
-0 -62.8363 Td
-(3545 ) 3.01 Tj
-0 -64.1454 Td
-(3546 ) 3.01 Tj
-0 -65.4545 Td
-(3547 ) 3.01 Tj
-0 -66.7636 Td
-(3548 ) 3.01 Tj
-0 -68.0727 Td
-(3549 ) 3.01 Tj
-0 -72 Td
-(Sheet 35) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/bio.c  Page 1) 157.267 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.69 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.639 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.92 Td
+(3509 // * After changing buffer data, call bwrite to flush it t\
+o disk.) 305.796 Tj
+0 -123.414 Td
+(3510 // * When done with the buffer, call brelse.) 214.057 Tj
+0 -132.907 Td
+(3511 // * Do not use the buffer after calling brelse.) 231.531 Tj
+0 -142.4 Td
+(3512 // * Only one process at a time can use a buffer,) 235.9 Tj
+0 -151.894 Td
+(3513 //     so do not keep them longer than necessary.) 235.9 Tj
+0 -161.387 Td
+(3514 //) 30.5796 Tj
+0 -170.88 Td
+(3515 // The implementation uses three state flags internally:) 266.479 Tj
+0 -180.374 Td
+(3516 // * B_BUSY: the block has been returned from bread) 244.637 Tj
+0 -189.867 Td
+(3517 //     and has not been passed back to brelse.) 222.794 Tj
+0 -199.361 Td
+(3518 // * B_VALID: the buffer data has been initialized) 240.268 Tj
+0 -208.854 Td
+(3519 //     with the associated disk block contents.) 227.163 Tj
+0 -218.347 Td
+(3520 // * B_DIRTY: the buffer data has been modified) 227.163 Tj
+0 -227.841 Td
+(3521 //     and needs to be written to disk.) 192.215 Tj
+0 -237.334 Td
+(3522 ) 21.8426 Tj
+0 -246.827 Td
+(3523 #include "types.h") 100.476 Tj
+0 -256.321 Td
+(3524 #include "defs.h") 96.1073 Tj
+0 -265.814 Td
+(3525 #include "param.h") 100.476 Tj
+0 -275.307 Td
+(3526 #include "spinlock.h") 113.581 Tj
+0 -284.801 Td
+(3527 #include "buf.h") 91.7388 Tj
+0 -294.294 Td
+(3528 ) 21.8426 Tj
+0 -303.788 Td
+(3529 struct buf buf[NBUF];) 113.581 Tj
+0 -313.281 Td
+(3530 struct spinlock buf_table_lock;) 157.267 Tj
+0 -322.774 Td
+(3531 ) 21.8426 Tj
+0 -332.268 Td
+(3532 // Linked list of all buffers, through prev/next.) 235.9 Tj
+0 -341.761 Td
+(3533 // bufhead->next is most recently used.) 192.215 Tj
+0 -351.254 Td
+(3534 // bufhead->tail is least recently used.) 196.583 Tj
+0 -360.748 Td
+(3535 struct buf bufhead;) 104.844 Tj
+0 -370.241 Td
+(3536 ) 21.8426 Tj
+0 -379.734 Td
+(3537 void) 39.3166 Tj
+0 -389.228 Td
+(3538 binit\(void\)) 69.8962 Tj
+0 -398.721 Td
+(3539 {) 26.2111 Tj
+0 -408.214 Td
+(3540   struct buf *b;) 91.7388 Tj
+0 -417.708 Td
+(3541 ) 21.8426 Tj
+0 -427.201 Td
+(3542   initlock\(&buf_table_lock, "buf_table"\);) 200.952 Tj
+0 -436.695 Td
+(3543 ) 21.8426 Tj
+0 -446.188 Td
+(3544 ) 21.8426 Tj
+0 -455.681 Td
+(3545 ) 21.8426 Tj
+0 -465.175 Td
+(3546 ) 21.8426 Tj
+0 -474.668 Td
+(3547 ) 21.8426 Tj
+0 -484.161 Td
+(3548 ) 21.8426 Tj
+0 -493.655 Td
+(3549 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.h  Page 1) 21.07 Tj
-0 -3.92728 Td
-(3550 // On-disk file system format.) 21.07 Tj
-0 -5.23637 Td
-(3551 // This header is shared between kernel and user space.) 36.12 Tj
-0 -6.54546 Td
-(3552 ) 3.01 Tj
-0 -7.85455 Td
-(3553 // Block 0 is unused.) 15.652 Tj
-0 -9.16364 Td
-(3554 // Block 1 is super block.) 18.662 Tj
-0 -10.4727 Td
-(3555 // Inodes start at block 2.) 19.264 Tj
-0 -11.7818 Td
-(3556 ) 3.01 Tj
-0 -13.0909 Td
-(3557 #define BSIZE 512  // block size) 22.274 Tj
-0 -14.4 Td
-(3558 ) 3.01 Tj
-0 -15.7091 Td
-(3559 // File system super block) 18.662 Tj
-0 -17.0182 Td
-(3560 struct superblock {) 14.448 Tj
-0 -18.3273 Td
-(3561   uint size;         // Size of file system image \(blocks\)) 37.926 Tj
-0 -19.6364 Td
-(3562   uint nblocks;      // Number of data blocks) 30.1 Tj
-0 -20.9455 Td
-(3563   uint ninodes;      // Number of inodes.) 27.692 Tj
-0 -22.2545 Td
-(3564 };) 4.214 Tj
-0 -23.5636 Td
-(3565 ) 3.01 Tj
-0 -24.8727 Td
-(3566 #define NADDRS \(NDIRECT+1\)) 18.662 Tj
-0 -26.1818 Td
-(3567 #define NDIRECT 12) 13.846 Tj
-0 -27.4909 Td
-(3568 #define INDIRECT 12) 14.448 Tj
-0 -28.8 Td
-(3569 #define NINDIRECT \(BSIZE / sizeof\(uint\)\)) 27.09 Tj
-0 -30.1091 Td
-(3570 #define MAXFILE \(NDIRECT  + NINDIRECT\)) 25.886 Tj
-0 -31.4182 Td
-(3571 ) 3.01 Tj
-0 -32.7273 Td
-(3572 // On-disk inode structure) 18.662 Tj
-0 -34.0364 Td
-(3573 struct dinode {) 12.04 Tj
-0 -35.3454 Td
-(3574   short type;           // File type) 24.682 Tj
-0 -36.6545 Td
-(3575   short major;          // Major device number \(T_DEV only\)) 38.528 Tj
-0 -37.9636 Td
-(3576   short minor;          // Minor device number \(T_DEV only\)) 38.528 Tj
-0 -39.2727 Td
-(3577   short nlink;          // Number of links to inode in file system) 42.742 Tj
-0 -40.5818 Td
-(3578   uint size;            // Size of file \(bytes\)) 31.304 Tj
-0 -41.8909 Td
-(3579   uint addrs[NADDRS];   // Data block addresses) 31.304 Tj
-0 -43.2 Td
-(3580 };) 4.214 Tj
-0 -44.5091 Td
-(3581 ) 3.01 Tj
-0 -45.8182 Td
-(3582 #define T_DIR  1   // Directory) 21.672 Tj
-0 -47.1272 Td
-(3583 #define T_FILE 2   // File) 18.662 Tj
-0 -48.4363 Td
-(3584 #define T_DEV  3   // Special device) 24.682 Tj
-0 -49.7454 Td
-(3585 ) 3.01 Tj
-0 -51.0545 Td
-(3586 // Inodes per block.) 15.05 Tj
-0 -52.3636 Td
-(3587 #define IPB           \(BSIZE / sizeof\(struct dinode\)\)) 34.916 Tj
-0 -53.6727 Td
-(3588 ) 3.01 Tj
-0 -54.9818 Td
-(3589 // Block containing inode i) 19.264 Tj
-0 -56.2909 Td
-(3590 #define IBLOCK\(i\)     \(\(i\) / IPB + 2\)) 25.284 Tj
-0 -57.6 Td
-(3591 ) 3.01 Tj
-0 -58.9091 Td
-(3592 // Bitmap bits per block) 17.458 Tj
-0 -60.2181 Td
-(3593 #define BPB           \(BSIZE*8\)) 21.672 Tj
-0 -61.5272 Td
-(3594 ) 3.01 Tj
-0 -62.8363 Td
-(3595 // Block containing bit for block b) 24.08 Tj
-0 -64.1454 Td
-(3596 #define BBLOCK\(b, ninodes\) \(b/BPB + \(ninodes\)/IPB + 3\)) 35.518 Tj
-0 -65.4545 Td
-(3597 ) 3.01 Tj
-0 -66.7636 Td
-(3598 ) 3.01 Tj
-0 -68.0727 Td
-(3599 ) 3.01 Tj
-0 -72 Td
-(Sheet 35) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/bio.c  Page 2) 157.267 Tj
+0 -28.4801 Td
+(3550   // Create linked list of buffers) 170.372 Tj
+0 -37.9735 Td
+(3551   bufhead.prev = &bufhead;) 135.424 Tj
+0 -47.4668 Td
+(3552   bufhead.next = &bufhead;) 135.424 Tj
+0 -56.9602 Td
+(3553   for\(b = buf; b < buf+NBUF; b++\){) 170.372 Tj
+0 -66.4535 Td
+(3554     b->next = bufhead.next;) 139.792 Tj
+0 -75.9469 Td
+(3555     b->prev = &bufhead;) 122.318 Tj
+0 -85.4403 Td
+(3556     bufhead.next->prev = b;) 139.792 Tj
+0 -94.9336 Td
+(3557     bufhead.next = b;) 113.581 Tj
+0 -104.427 Td
+(3558   }) 34.9481 Tj
+0 -113.92 Td
+(3559 }) 26.2111 Tj
+0 -123.414 Td
+(3560 ) 21.8426 Tj
+0 -132.907 Td
+(3561 // Look through buffer cache for sector on device dev.) 257.742 Tj
+0 -142.4 Td
+(3562 // If not found, allocate fresh block.) 187.846 Tj
+0 -151.894 Td
+(3563 // In either case, return locked buffer.) 196.583 Tj
+0 -161.387 Td
+(3564 static struct buf*) 100.476 Tj
+0 -170.88 Td
+(3565 bget\(uint dev, uint sector\)) 139.792 Tj
+0 -180.374 Td
+(3566 {) 26.2111 Tj
+0 -189.867 Td
+(3567   struct buf *b;) 91.7388 Tj
+0 -199.361 Td
+(3568 ) 21.8426 Tj
+0 -208.854 Td
+(3569   acquire\(&buf_table_lock\);) 139.792 Tj
+0 -218.347 Td
+(3570 ) 21.8426 Tj
+0 -227.841 Td
+(3571  loop:) 48.0537 Tj
+0 -237.334 Td
+(3572   // Try for cached block.) 135.424 Tj
+0 -246.827 Td
+(3573   for\(b = bufhead.next; b != &bufhead; b = b->next\){) 249.005 Tj
+0 -256.321 Td
+(3574     if\(\(b->flags & \(B_BUSY|B_VALID\)\) &&) 192.215 Tj
+0 -265.814 Td
+(3575        b->dev == dev && b->sector == sector\){) 218.426 Tj
+0 -275.307 Td
+(3576       if\(b->flags & B_BUSY\){) 144.161 Tj
+0 -284.801 Td
+(3577         sleep\(buf, &buf_table_lock\);) 179.109 Tj
+0 -294.294 Td
+(3578         goto loop;) 100.476 Tj
+0 -303.788 Td
+(3579       }) 52.4222 Tj
+0 -313.281 Td
+(3580       b->flags |= B_BUSY;) 131.055 Tj
+0 -322.774 Td
+(3581       release\(&buf_table_lock\);) 157.267 Tj
+0 -332.268 Td
+(3582       return b;) 87.3703 Tj
+0 -341.761 Td
+(3583     }) 43.6851 Tj
+0 -351.254 Td
+(3584   }) 34.9481 Tj
+0 -360.748 Td
+(3585 ) 21.8426 Tj
+0 -370.241 Td
+(3586   // Allocate fresh block.) 135.424 Tj
+0 -379.734 Td
+(3587   for\(b = bufhead.prev; b != &bufhead; b = b->prev\){) 249.005 Tj
+0 -389.228 Td
+(3588     if\(\(b->flags & B_BUSY\) == 0\){) 166.004 Tj
+0 -398.721 Td
+(3589       b->flags = B_BUSY;) 126.687 Tj
+0 -408.214 Td
+(3590       b->dev = dev;) 104.844 Tj
+0 -417.708 Td
+(3591       b->sector = sector;) 131.055 Tj
+0 -427.201 Td
+(3592       release\(&buf_table_lock\);) 157.267 Tj
+0 -436.695 Td
+(3593       return b;) 87.3703 Tj
+0 -446.188 Td
+(3594     }) 43.6851 Tj
+0 -455.681 Td
+(3595   }) 34.9481 Tj
+0 -465.175 Td
+(3596   panic\("bget: no buffers"\);) 144.161 Tj
+0 -474.668 Td
+(3597 }) 26.2111 Tj
+0 -484.161 Td
+(3598 ) 21.8426 Tj
+0 -493.655 Td
+(3599 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 35) 34.9481 Tj
 Q
 Q
 Q
@@ -12564,6 +13402,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -12571,241 +13412,259 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.h  Page 2) 21.07 Tj
-0 -3.92728 Td
-(3600 // Directory is a file containing a sequence of dirent structures.) 42.742 Tj
-0 -5.23637 Td
-(3601 #define DIRSIZ 14) 13.244 Tj
-0 -6.54546 Td
-(3602 ) 3.01 Tj
-0 -7.85455 Td
-(3603 struct dirent {) 12.04 Tj
-0 -9.16364 Td
-(3604   ushort inum;) 11.438 Tj
-0 -10.4727 Td
-(3605   char name[DIRSIZ];) 15.05 Tj
-0 -11.7818 Td
-(3606 };) 4.214 Tj
-0 -13.0909 Td
-(3607 ) 3.01 Tj
-0 -14.4 Td
-(3608 extern uint rootdev;  // Device number of root file system) 37.926 Tj
-0 -15.7091 Td
-(3609 ) 3.01 Tj
-0 -17.0182 Td
-(3610 ) 3.01 Tj
-0 -18.3273 Td
-(3611 ) 3.01 Tj
-0 -19.6364 Td
-(3612 ) 3.01 Tj
-0 -20.9455 Td
-(3613 ) 3.01 Tj
-0 -22.2545 Td
-(3614 ) 3.01 Tj
-0 -23.5636 Td
-(3615 ) 3.01 Tj
-0 -24.8727 Td
-(3616 ) 3.01 Tj
-0 -26.1818 Td
-(3617 ) 3.01 Tj
-0 -27.4909 Td
-(3618 ) 3.01 Tj
-0 -28.8 Td
-(3619 ) 3.01 Tj
-0 -30.1091 Td
-(3620 ) 3.01 Tj
-0 -31.4182 Td
-(3621 ) 3.01 Tj
-0 -32.7273 Td
-(3622 ) 3.01 Tj
-0 -34.0364 Td
-(3623 ) 3.01 Tj
-0 -35.3454 Td
-(3624 ) 3.01 Tj
-0 -36.6545 Td
-(3625 ) 3.01 Tj
-0 -37.9636 Td
-(3626 ) 3.01 Tj
-0 -39.2727 Td
-(3627 ) 3.01 Tj
-0 -40.5818 Td
-(3628 ) 3.01 Tj
-0 -41.8909 Td
-(3629 ) 3.01 Tj
-0 -43.2 Td
-(3630 ) 3.01 Tj
-0 -44.5091 Td
-(3631 ) 3.01 Tj
-0 -45.8182 Td
-(3632 ) 3.01 Tj
-0 -47.1272 Td
-(3633 ) 3.01 Tj
-0 -48.4363 Td
-(3634 ) 3.01 Tj
-0 -49.7454 Td
-(3635 ) 3.01 Tj
-0 -51.0545 Td
-(3636 ) 3.01 Tj
-0 -52.3636 Td
-(3637 ) 3.01 Tj
-0 -53.6727 Td
-(3638 ) 3.01 Tj
-0 -54.9818 Td
-(3639 ) 3.01 Tj
-0 -56.2909 Td
-(3640 ) 3.01 Tj
-0 -57.6 Td
-(3641 ) 3.01 Tj
-0 -58.9091 Td
-(3642 ) 3.01 Tj
-0 -60.2181 Td
-(3643 ) 3.01 Tj
-0 -61.5272 Td
-(3644 ) 3.01 Tj
-0 -62.8363 Td
-(3645 ) 3.01 Tj
-0 -64.1454 Td
-(3646 ) 3.01 Tj
-0 -65.4545 Td
-(3647 ) 3.01 Tj
-0 -66.7636 Td
-(3648 ) 3.01 Tj
-0 -68.0727 Td
-(3649 ) 3.01 Tj
-0 -72 Td
-(Sheet 36) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/bio.c  Page 3) 157.267 Tj
+0 -28.4801 Td
+(3600 // Return a B_BUSY buf with the contents of the indicated \
+disk sector.) 327.639 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.687 Tj
+0 -94.9336 Td
+(3607   if\(!\(b->flags & B_VALID\)\)) 139.792 Tj
+0 -104.427 Td
+(3608     ide_rw\(b\);) 83.0018 Tj
+0 -113.92 Td
+(3609   return b;) 69.8962 Tj
+0 -123.414 Td
+(3610 }) 26.2111 Tj
+0 -132.907 Td
+(3611 ) 21.8426 Tj
+0 -142.4 Td
+(3612 // Write buf's contents to disk.  Must be locked.) 235.9 Tj
+0 -151.894 Td
+(3613 void) 39.3166 Tj
+0 -161.387 Td
+(3614 bwrite\(struct buf *b\)) 113.581 Tj
+0 -170.88 Td
+(3615 {) 26.2111 Tj
+0 -180.374 Td
+(3616   if\(\(b->flags & B_BUSY\) == 0\)) 152.898 Tj
+0 -189.867 Td
+(3617     panic\("bwrite"\);) 109.213 Tj
+0 -199.361 Td
+(3618   b->flags |= B_DIRTY;) 117.95 Tj
+0 -208.854 Td
+(3619   ide_rw\(b\);) 74.2647 Tj
+0 -218.347 Td
+(3620 }) 26.2111 Tj
+0 -227.841 Td
+(3621 ) 21.8426 Tj
+0 -237.334 Td
+(3622 // Release the buffer buf.) 135.424 Tj
+0 -246.827 Td
+(3623 void) 39.3166 Tj
+0 -256.321 Td
+(3624 brelse\(struct buf *b\)) 113.581 Tj
+0 -265.814 Td
+(3625 {) 26.2111 Tj
+0 -275.307 Td
+(3626   if\(\(b->flags & B_BUSY\) == 0\)) 152.898 Tj
+0 -284.801 Td
+(3627     panic\("brelse"\);) 109.213 Tj
+0 -294.294 Td
+(3628 ) 21.8426 Tj
+0 -303.788 Td
+(3629   acquire\(&buf_table_lock\);) 139.792 Tj
+0 -313.281 Td
+(3630 ) 21.8426 Tj
+0 -322.774 Td
+(3631   b->next->prev = b->prev;) 135.424 Tj
+0 -332.268 Td
+(3632   b->prev->next = b->next;) 135.424 Tj
+0 -341.761 Td
+(3633   b->next = bufhead.next;) 131.055 Tj
+0 -351.254 Td
+(3634   b->prev = &bufhead;) 113.581 Tj
+0 -360.748 Td
+(3635   bufhead.next->prev = b;) 131.055 Tj
+0 -370.241 Td
+(3636   bufhead.next = b;) 104.844 Tj
+0 -379.734 Td
+(3637 ) 21.8426 Tj
+0 -389.228 Td
+(3638   b->flags &= ~B_BUSY;) 117.95 Tj
+0 -398.721 Td
+(3639   wakeup\(buf\);) 83.0018 Tj
+0 -408.214 Td
+(3640 ) 21.8426 Tj
+0 -417.708 Td
+(3641   release\(&buf_table_lock\);) 139.792 Tj
+0 -427.201 Td
+(3642 }) 26.2111 Tj
+0 -436.695 Td
+(3643 ) 21.8426 Tj
+0 -446.188 Td
+(3644 ) 21.8426 Tj
+0 -455.681 Td
+(3645 ) 21.8426 Tj
+0 -465.175 Td
+(3646 ) 21.8426 Tj
+0 -474.668 Td
+(3647 ) 21.8426 Tj
+0 -484.161 Td
+(3648 ) 21.8426 Tj
+0 -493.655 Td
+(3649 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fsvar.h  Page 1) 22.876 Tj
-0 -3.92728 Td
-(3650 // in-core file system types) 19.866 Tj
-0 -5.23637 Td
-(3651 ) 3.01 Tj
-0 -6.54546 Td
-(3652 struct inode {) 11.438 Tj
-0 -7.85455 Td
-(3653   uint dev;           // Device number) 25.886 Tj
-0 -9.16364 Td
-(3654   uint inum;          // Inode number) 25.284 Tj
-0 -10.4727 Td
-(3655   int ref;            // Reference count) 27.09 Tj
-0 -11.7818 Td
-(3656   int busy;           // Is the inode "locked"?) 31.304 Tj
-0 -13.0909 Td
-(3657 ) 3.01 Tj
-0 -14.4 Td
-(3658   short type;         // copy of disk inode) 28.896 Tj
-0 -15.7091 Td
-(3659   short major;) 11.438 Tj
-0 -17.0182 Td
-(3660   short minor;) 11.438 Tj
-0 -18.3273 Td
-(3661   short nlink;) 11.438 Tj
-0 -19.6364 Td
-(3662   uint size;) 10.234 Tj
-0 -20.9455 Td
-(3663   uint addrs[NADDRS];) 15.652 Tj
-0 -22.2545 Td
-(3664 };) 4.214 Tj
-0 -23.5636 Td
-(3665 ) 3.01 Tj
-0 -24.8727 Td
-(3666 extern uint rootdev;) 15.05 Tj
-0 -26.1818 Td
-(3667 ) 3.01 Tj
-0 -27.4909 Td
-(3668 #define NAMEI_LOOKUP 1) 16.254 Tj
-0 -28.8 Td
-(3669 #define NAMEI_CREATE 2) 16.254 Tj
-0 -30.1091 Td
-(3670 #define NAMEI_DELETE 3) 16.254 Tj
-0 -31.4182 Td
-(3671 ) 3.01 Tj
-0 -32.7273 Td
-(3672 ) 3.01 Tj
-0 -34.0364 Td
-(3673 ) 3.01 Tj
-0 -35.3454 Td
-(3674 ) 3.01 Tj
-0 -36.6545 Td
-(3675 ) 3.01 Tj
-0 -37.9636 Td
-(3676 ) 3.01 Tj
-0 -39.2727 Td
-(3677 ) 3.01 Tj
-0 -40.5818 Td
-(3678 ) 3.01 Tj
-0 -41.8909 Td
-(3679 ) 3.01 Tj
-0 -43.2 Td
-(3680 ) 3.01 Tj
-0 -44.5091 Td
-(3681 ) 3.01 Tj
-0 -45.8182 Td
-(3682 ) 3.01 Tj
-0 -47.1272 Td
-(3683 ) 3.01 Tj
-0 -48.4363 Td
-(3684 ) 3.01 Tj
-0 -49.7454 Td
-(3685 ) 3.01 Tj
-0 -51.0545 Td
-(3686 ) 3.01 Tj
-0 -52.3636 Td
-(3687 ) 3.01 Tj
-0 -53.6727 Td
-(3688 ) 3.01 Tj
-0 -54.9818 Td
-(3689 ) 3.01 Tj
-0 -56.2909 Td
-(3690 ) 3.01 Tj
-0 -57.6 Td
-(3691 ) 3.01 Tj
-0 -58.9091 Td
-(3692 ) 3.01 Tj
-0 -60.2181 Td
-(3693 ) 3.01 Tj
-0 -61.5272 Td
-(3694 ) 3.01 Tj
-0 -62.8363 Td
-(3695 ) 3.01 Tj
-0 -64.1454 Td
-(3696 ) 3.01 Tj
-0 -65.4545 Td
-(3697 ) 3.01 Tj
-0 -66.7636 Td
-(3698 ) 3.01 Tj
-0 -68.0727 Td
-(3699 ) 3.01 Tj
-0 -72 Td
-(Sheet 36) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/fs.c  Page 1) 152.898 Tj
+0 -28.4801 Td
+(3650 // File system implementation.  Four layers:) 214.057 Tj
+0 -37.9735 Td
+(3651 //   + Blocks: allocator for raw disk blocks.) 218.426 Tj
+0 -47.4668 Td
+(3652 //   + Files: inode allocator, reading, writing, metadata.) 275.216 Tj
+0 -56.9602 Td
+(3653 //   + Directories: inode with special contents \(list of \
+other inodes!\)) 332.007 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.376 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.953 Tj
+0 -113.92 Td
+(3659 // routines.  The \(higher-level\) system call implementat\
+ions) 283.953 Tj
+0 -123.414 Td
+(3660 // are in sysfile.c.) 109.213 Tj
+0 -132.907 Td
+(3661 ) 21.8426 Tj
+0 -142.4 Td
+(3662 #include "types.h") 100.476 Tj
+0 -151.894 Td
+(3663 #include "defs.h") 96.1073 Tj
+0 -161.387 Td
+(3664 #include "param.h") 100.476 Tj
+0 -170.88 Td
+(3665 #include "stat.h") 96.1073 Tj
+0 -180.374 Td
+(3666 #include "mmu.h") 91.7388 Tj
+0 -189.867 Td
+(3667 #include "proc.h") 96.1073 Tj
+0 -199.361 Td
+(3668 #include "spinlock.h") 113.581 Tj
+0 -208.854 Td
+(3669 #include "buf.h") 91.7388 Tj
+0 -218.347 Td
+(3670 #include "fs.h") 87.3703 Tj
+0 -227.841 Td
+(3671 #include "fsvar.h") 100.476 Tj
+0 -237.334 Td
+(3672 #include "dev.h") 91.7388 Tj
+0 -246.827 Td
+(3673 ) 21.8426 Tj
+0 -256.321 Td
+(3674 #define min\(a, b\) \(\(a\) < \(b\) ? \(a\) : \(b\)\)) 200.952 Tj
+0 -265.814 Td
+(3675 static void itrunc\(struct inode*\);) 170.372 Tj
+0 -275.307 Td
+(3676 ) 21.8426 Tj
+0 -284.801 Td
+(3677 // Read the super block.) 126.687 Tj
+0 -294.294 Td
+(3678 static void) 69.8962 Tj
+0 -303.788 Td
+(3679 readsb\(int dev, struct superblock *sb\)) 187.846 Tj
+0 -313.281 Td
+(3680 {) 26.2111 Tj
+0 -322.774 Td
+(3681   struct buf *bp;) 96.1073 Tj
+0 -332.268 Td
+(3682 ) 21.8426 Tj
+0 -341.761 Td
+(3683   bp = bread\(dev, 1\);) 113.581 Tj
+0 -351.254 Td
+(3684   memmove\(sb, bp->data, sizeof\(*sb\)\);) 183.478 Tj
+0 -360.748 Td
+(3685   brelse\(bp\);) 78.6333 Tj
+0 -370.241 Td
+(3686 }) 26.2111 Tj
+0 -379.734 Td
+(3687 ) 21.8426 Tj
+0 -389.228 Td
+(3688 // Zero a block.) 91.7388 Tj
+0 -398.721 Td
+(3689 static void) 69.8962 Tj
+0 -408.214 Td
+(3690 bzero\(int dev, int bno\)) 122.318 Tj
+0 -417.708 Td
+(3691 {) 26.2111 Tj
+0 -427.201 Td
+(3692   struct buf *bp;) 96.1073 Tj
+0 -436.695 Td
+(3693 ) 21.8426 Tj
+0 -446.188 Td
+(3694   bp = bread\(dev, bno\);) 122.318 Tj
+0 -455.681 Td
+(3695   memset\(bp->data, 0, BSIZE\);) 148.529 Tj
+0 -465.175 Td
+(3696   bwrite\(bp\);) 78.6333 Tj
+0 -474.668 Td
+(3697   brelse\(bp\);) 78.6333 Tj
+0 -484.161 Td
+(3698 }) 26.2111 Tj
+0 -493.655 Td
+(3699 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 36) 34.9481 Tj
 Q
 Q
 Q
@@ -12816,7 +13675,10 @@ pdfEndPage
 %%Page: 44 44
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -12824,241 +13686,267 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/ide.c  Page 1) 21.672 Tj
-0 -3.92728 Td
-(3700 // Simple PIO-based \(non-DMA\) IDE driver code.) 30.702 Tj
-0 -5.23637 Td
-(3701 ) 3.01 Tj
-0 -6.54546 Td
-(3702 #include "types.h") 13.846 Tj
-0 -7.85455 Td
-(3703 #include "param.h") 13.846 Tj
-0 -9.16364 Td
-(3704 #include "mmu.h") 12.642 Tj
-0 -10.4727 Td
-(3705 #include "proc.h") 13.244 Tj
-0 -11.7818 Td
-(3706 #include "defs.h") 13.244 Tj
-0 -13.0909 Td
-(3707 #include "x86.h") 12.642 Tj
-0 -14.4 Td
-(3708 #include "traps.h") 13.846 Tj
-0 -15.7091 Td
-(3709 #include "spinlock.h") 15.652 Tj
-0 -17.0182 Td
-(3710 ) 3.01 Tj
-0 -18.3273 Td
-(3711 #define IDE_BSY       0x80) 18.662 Tj
-0 -19.6364 Td
-(3712 #define IDE_DRDY      0x40) 18.662 Tj
-0 -20.9455 Td
-(3713 #define IDE_DF        0x20) 18.662 Tj
-0 -22.2545 Td
-(3714 #define IDE_ERR       0x01) 18.662 Tj
-0 -23.5636 Td
-(3715 ) 3.01 Tj
-0 -24.8727 Td
-(3716 #define IDE_CMD_READ  0x20) 18.662 Tj
-0 -26.1818 Td
-(3717 #define IDE_CMD_WRITE 0x30) 18.662 Tj
-0 -27.4909 Td
-(3718 ) 3.01 Tj
-0 -28.8 Td
-(3719 // IDE request queue.) 15.652 Tj
-0 -30.1091 Td
-(3720 // The next request will be stored in request[head],) 34.314 Tj
-0 -31.4182 Td
-(3721 // and the request currently being served by the disk) 34.916 Tj
-0 -32.7273 Td
-(3722 // is request[tail].) 15.05 Tj
-0 -34.0364 Td
-(3723 // Must hold ide_lock while manipulating queue.) 31.304 Tj
-0 -35.3454 Td
-(3724 ) 3.01 Tj
-0 -36.6545 Td
-(3725 struct ide_request {) 15.05 Tj
-0 -37.9636 Td
-(3726   int diskno;) 10.836 Tj
-0 -39.2727 Td
-(3727   uint secno;) 10.836 Tj
-0 -40.5818 Td
-(3728   void *addr;) 10.836 Tj
-0 -41.8909 Td
-(3729   uint nsecs;) 10.836 Tj
-0 -43.2 Td
-(3730   uint read;) 10.234 Tj
-0 -44.5091 Td
-(3731 };) 4.214 Tj
-0 -45.8182 Td
-(3732 ) 3.01 Tj
-0 -47.1272 Td
-(3733 static struct ide_request request[NREQUEST];) 29.498 Tj
-0 -48.4363 Td
-(3734 static int head, tail;) 16.254 Tj
-0 -49.7454 Td
-(3735 static struct spinlock ide_lock;) 22.274 Tj
-0 -51.0545 Td
-(3736 ) 3.01 Tj
-0 -52.3636 Td
-(3737 static int disk_1_present;) 18.662 Tj
-0 -53.6727 Td
-(3738 static int disk_queue;) 16.254 Tj
-0 -54.9818 Td
-(3739 ) 3.01 Tj
-0 -56.2909 Td
-(3740 static int ide_probe_disk1\(void\);) 22.876 Tj
-0 -57.6 Td
-(3741 ) 3.01 Tj
-0 -58.9091 Td
-(3742 // Wait for IDE disk to become ready.) 25.284 Tj
-0 -60.2181 Td
-(3743 static int) 9.03 Tj
-0 -61.5272 Td
-(3744 ide_wait_ready\(int check_error\)) 21.672 Tj
-0 -62.8363 Td
-(3745 {) 3.612 Tj
-0 -64.1454 Td
-(3746   int r;) 7.826 Tj
-0 -65.4545 Td
-(3747 ) 3.01 Tj
-0 -66.7636 Td
-(3748   while\(\(\(r = inb\(0x1F7\)\) & \(IDE_BSY|IDE_DRDY\)\) != IDE_DRDY\)) 39.13 Tj
-0 -68.0727 Td
-(3749     ;) 6.02 Tj
-0 -72 Td
-(Sheet 37) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  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.055 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.318 Tj
+0 -113.92 Td
+(3709 ) 21.8426 Tj
+0 -123.414 Td
+(3710   bp = 0;) 61.1592 Tj
+0 -132.907 Td
+(3711   readsb\(dev, &sb\);) 104.844 Tj
+0 -142.4 Td
+(3712   for\(b = 0; b < sb.size; b += BPB\){) 179.109 Tj
+0 -151.894 Td
+(3713     bp = bread\(dev, BBLOCK\(b, sb.ninodes\)\);) 209.689 Tj
+0 -161.387 Td
+(3714     for\(bi = 0; bi < BPB; bi++\){) 161.635 Tj
+0 -170.88 Td
+(3715       m = 1 << \(bi % 8\);) 126.687 Tj
+0 -180.374 Td
+(3716       if\(\(bp->data[bi/8] & m\) == 0\){  // Is block free\
+?) 262.111 Tj
+0 -189.867 Td
+(3717         bp->data[bi/8] |= m;  // Mark block in use on disk\
+.) 279.585 Tj
+0 -199.361 Td
+(3718         bwrite\(bp\);) 104.844 Tj
+0 -208.854 Td
+(3719         brelse\(bp\);) 104.844 Tj
+0 -218.347 Td
+(3720         return b + bi;) 117.95 Tj
+0 -227.841 Td
+(3721       }) 52.4222 Tj
+0 -237.334 Td
+(3722     }) 43.6851 Tj
+0 -246.827 Td
+(3723     brelse\(bp\);) 87.3703 Tj
+0 -256.321 Td
+(3724   }) 34.9481 Tj
+0 -265.814 Td
+(3725   panic\("balloc: out of blocks"\);) 166.004 Tj
+0 -275.307 Td
+(3726 }) 26.2111 Tj
+0 -284.801 Td
+(3727 ) 21.8426 Tj
+0 -294.294 Td
+(3728 // Free a disk block.) 113.581 Tj
+0 -303.788 Td
+(3729 static void) 69.8962 Tj
+0 -313.281 Td
+(3730 bfree\(int dev, uint b\)) 117.95 Tj
+0 -322.774 Td
+(3731 {) 26.2111 Tj
+0 -332.268 Td
+(3732   struct buf *bp;) 96.1073 Tj
+0 -341.761 Td
+(3733   struct superblock sb;) 122.318 Tj
+0 -351.254 Td
+(3734   int bi, m;) 74.2647 Tj
+0 -360.748 Td
+(3735 ) 21.8426 Tj
+0 -370.241 Td
+(3736   bzero\(dev, b\);) 91.7388 Tj
+0 -379.734 Td
+(3737 ) 21.8426 Tj
+0 -389.228 Td
+(3738   readsb\(dev, &sb\);) 104.844 Tj
+0 -398.721 Td
+(3739   bp = bread\(dev, BBLOCK\(b, sb.ninodes\)\);) 200.952 Tj
+0 -408.214 Td
+(3740   bi = b % BPB;) 87.3703 Tj
+0 -417.708 Td
+(3741   m = 1 << \(bi % 8\);) 109.213 Tj
+0 -427.201 Td
+(3742   if\(\(bp->data[bi/8] & m\) == 0\)) 157.267 Tj
+0 -436.695 Td
+(3743     panic\("freeing free block"\);) 161.635 Tj
+0 -446.188 Td
+(3744   bp->data[bi/8] &= ~m;  // Mark block free on disk.) 249.005 Tj
+0 -455.681 Td
+(3745   bwrite\(bp\);) 78.6333 Tj
+0 -465.175 Td
+(3746   brelse\(bp\);) 78.6333 Tj
+0 -474.668 Td
+(3747 }) 26.2111 Tj
+0 -484.161 Td
+(3748 ) 21.8426 Tj
+0 -493.655 Td
+(3749 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/ide.c  Page 2) 21.672 Tj
-0 -3.92728 Td
-(3750   if\(check_error && \(r & \(IDE_DF|IDE_ERR\)\) != 0\)) 31.906 Tj
-0 -5.23637 Td
-(3751     return -1;) 11.438 Tj
-0 -6.54546 Td
-(3752   return 0;) 9.632 Tj
-0 -7.85455 Td
-(3753 }) 3.612 Tj
-0 -9.16364 Td
-(3754 ) 3.01 Tj
-0 -10.4727 Td
-(3755 void) 5.418 Tj
-0 -11.7818 Td
-(3756 ide_init\(void\)) 11.438 Tj
-0 -13.0909 Td
-(3757 {) 3.612 Tj
-0 -14.4 Td
-(3758   initlock\(&ide_lock, "ide"\);) 20.468 Tj
-0 -15.7091 Td
-(3759   irq_enable\(IRQ_IDE\);) 16.254 Tj
-0 -17.0182 Td
-(3760   ioapic_enable\(IRQ_IDE, ncpu - 1\);) 24.08 Tj
-0 -18.3273 Td
-(3761   ide_wait_ready\(0\);) 15.05 Tj
-0 -19.6364 Td
-(3762   disk_1_present = ide_probe_disk1\(\);) 25.284 Tj
-0 -20.9455 Td
-(3763 }) 3.612 Tj
-0 -22.2545 Td
-(3764 ) 3.01 Tj
-0 -23.5636 Td
-(3765 // Probe to see if disk 1 exists \(we assume disk 0 exists\).) 38.528 Tj
-0 -24.8727 Td
-(3766 static int) 9.03 Tj
-0 -26.1818 Td
-(3767 ide_probe_disk1\(void\)) 15.652 Tj
-0 -27.4909 Td
-(3768 {) 3.612 Tj
-0 -28.8 Td
-(3769   int r, x;) 9.632 Tj
-0 -30.1091 Td
-(3770 ) 3.01 Tj
-0 -31.4182 Td
-(3771   // wait for Device 0 to be ready) 23.478 Tj
-0 -32.7273 Td
-(3772   ide_wait_ready\(0\);) 15.05 Tj
-0 -34.0364 Td
-(3773 ) 3.01 Tj
-0 -35.3454 Td
-(3774   // switch to Device 1) 16.856 Tj
-0 -36.6545 Td
-(3775   outb\(0x1F6, 0xE0 | \(1<<4\)\);) 20.468 Tj
-0 -37.9636 Td
-(3776 ) 3.01 Tj
-0 -39.2727 Td
-(3777   // check for Device 1 to be ready for a while) 31.304 Tj
-0 -40.5818 Td
-(3778   for\(x = 0; x < 1000 && \(r = inb\(0x1F7\)\) == 0; x++\)) 34.314 Tj
-0 -41.8909 Td
-(3779     ;) 6.02 Tj
-0 -43.2 Td
-(3780 ) 3.01 Tj
-0 -44.5091 Td
-(3781   // switch back to Device 0) 19.866 Tj
-0 -45.8182 Td
-(3782   outb\(0x1F6, 0xE0 | \(0<<4\)\);) 20.468 Tj
-0 -47.1272 Td
-(3783 ) 3.01 Tj
-0 -48.4363 Td
-(3784   return x < 1000;) 13.846 Tj
-0 -49.7454 Td
-(3785 }) 3.612 Tj
-0 -51.0545 Td
-(3786 ) 3.01 Tj
-0 -52.3636 Td
-(3787 // Interrupt handler - wake up the request that just finished.) 40.334 Tj
-0 -53.6727 Td
-(3788 void) 5.418 Tj
-0 -54.9818 Td
-(3789 ide_intr\(void\)) 11.438 Tj
-0 -56.2909 Td
-(3790 {) 3.612 Tj
-0 -57.6 Td
-(3791   acquire\(&ide_lock\);) 15.652 Tj
-0 -58.9091 Td
-(3792   wakeup\(&request[tail]\);) 18.06 Tj
-0 -60.2181 Td
-(3793   release\(&ide_lock\);) 15.652 Tj
-0 -61.5272 Td
-(3794 }) 3.612 Tj
-0 -62.8363 Td
-(3795 ) 3.01 Tj
-0 -64.1454 Td
-(3796 ) 3.01 Tj
-0 -65.4545 Td
-(3797 ) 3.01 Tj
-0 -66.7636 Td
-(3798 ) 3.01 Tj
-0 -68.0727 Td
-(3799 ) 3.01 Tj
-0 -72 Td
-(Sheet 37) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  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.848 Tj
+0 -56.9602 Td
+(3753 // The inode disk structure holds metadata \(the type, dev\
+ice numbers,) 323.27 Tj
+0 -66.4535 Td
+(3754 // and data size\) along with a list of blocks where the a\
+ssociated) 310.165 Tj
+0 -75.9469 Td
+(3755 // data can be found.) 113.581 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.216 Tj
+0 -113.92 Td
+(3759 // on-disk structures to provide a place for synchronizing\
+ access) 305.796 Tj
+0 -123.414 Td
+(3760 // to inodes shared between multiple processes.) 227.163 Tj
+0 -132.907 Td
+(3761 //) 30.5796 Tj
+0 -142.4 Td
+(3762 // ip->ref counts the number of pointer references to this\
+ cached) 305.796 Tj
+0 -151.894 Td
+(3763 // inode; references are typically kept in struct file and\
+ in cp->cwd.) 327.639 Tj
+0 -161.387 Td
+(3764 // When ip->ref falls to zero, the inode is no longer cach\
+ed.) 288.322 Tj
+0 -170.88 Td
+(3765 // It is an error to use an inode without holding a refere\
+nce to it.) 318.902 Tj
+0 -180.374 Td
+(3766 //) 30.5796 Tj
+0 -189.867 Td
+(3767 // Processes are only allowed to read and write inode) 253.374 Tj
+0 -199.361 Td
+(3768 // metadata and contents when holding the inode's lock,) 262.111 Tj
+0 -208.854 Td
+(3769 // represented by the I_BUSY flag in the in-memory copy.) 266.479 Tj
+0 -218.347 Td
+(3770 // Because inode locks are held during disk accesses,) 253.374 Tj
+0 -227.841 Td
+(3771 // they are implemented using a flag rather than with) 253.374 Tj
+0 -237.334 Td
+(3772 // spin locks.  Callers are responsible for locking) 244.637 Tj
+0 -246.827 Td
+(3773 // inodes before passing them to routines in this file; le\
+aving) 297.059 Tj
+0 -256.321 Td
+(3774 // this responsibility with the caller makes it possible f\
+or them) 305.796 Tj
+0 -265.814 Td
+(3775 // to create arbitrarily-sized atomic operations.) 235.9 Tj
+0 -275.307 Td
+(3776 //) 30.5796 Tj
+0 -284.801 Td
+(3777 // To give maximum control over locking to the callers,) 262.111 Tj
+0 -294.294 Td
+(3778 // the routines in this file that return inode pointers) 262.111 Tj
+0 -303.788 Td
+(3779 // return pointers to *unlocked* inodes.  It is the caller\
+s') 283.953 Tj
+0 -313.281 Td
+(3780 // responsibility to lock them before using them.  A non-z\
+ero) 288.322 Tj
+0 -322.774 Td
+(3781 // ip->ref keeps these unlocked inodes in the cache.) 249.005 Tj
+0 -332.268 Td
+(3782 ) 21.8426 Tj
+0 -341.761 Td
+(3783 struct {) 56.7907 Tj
+0 -351.254 Td
+(3784   struct spinlock lock;) 122.318 Tj
+0 -360.748 Td
+(3785   struct inode inode[NINODE];) 148.529 Tj
+0 -370.241 Td
+(3786 } icache;) 61.1592 Tj
+0 -379.734 Td
+(3787 ) 21.8426 Tj
+0 -389.228 Td
+(3788 void) 39.3166 Tj
+0 -398.721 Td
+(3789 iinit\(void\)) 69.8962 Tj
+0 -408.214 Td
+(3790 {) 26.2111 Tj
+0 -417.708 Td
+(3791   initlock\(&icache.lock, "icache.lock"\);) 196.583 Tj
+0 -427.201 Td
+(3792 }) 26.2111 Tj
+0 -436.695 Td
+(3793 ) 21.8426 Tj
+0 -446.188 Td
+(3794 ) 21.8426 Tj
+0 -455.681 Td
+(3795 ) 21.8426 Tj
+0 -465.175 Td
+(3796 ) 21.8426 Tj
+0 -474.668 Td
+(3797 ) 21.8426 Tj
+0 -484.161 Td
+(3798 ) 21.8426 Tj
+0 -493.655 Td
+(3799 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 37) 34.9481 Tj
 Q
 Q
 Q
@@ -13070,6 +13958,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -13077,241 +13968,256 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/ide.c  Page 3) 21.672 Tj
-0 -3.92728 Td
-(3800 // Start the next request in the queue.) 26.488 Tj
-0 -5.23637 Td
-(3801 static void) 9.632 Tj
-0 -6.54546 Td
-(3802 ide_start_request \(void\)) 17.458 Tj
-0 -7.85455 Td
-(3803 {) 3.612 Tj
-0 -9.16364 Td
-(3804   struct ide_request *r;) 17.458 Tj
-0 -10.4727 Td
-(3805 ) 3.01 Tj
-0 -11.7818 Td
-(3806   if\(head != tail\) {) 15.05 Tj
-0 -13.0909 Td
-(3807     r = &request[tail];) 16.856 Tj
-0 -14.4 Td
-(3808     ide_wait_ready\(0\);) 16.254 Tj
-0 -15.7091 Td
-(3809     outb\(0x3f6, 0\);  // generate interrupt) 28.294 Tj
-0 -17.0182 Td
-(3810     outb\(0x1F2, r->nsecs\);) 18.662 Tj
-0 -18.3273 Td
-(3811     outb\(0x1F3, r->secno & 0xFF\);) 22.876 Tj
-0 -19.6364 Td
-(3812     outb\(0x1F4, \(r->secno >> 8\) & 0xFF\);) 27.09 Tj
-0 -20.9455 Td
-(3813     outb\(0x1F5, \(r->secno >> 16\) & 0xFF\);) 27.692 Tj
-0 -22.2545 Td
-(3814     outb\(0x1F6, 0xE0 | \(\(r->diskno&1\)<<4\) | \(\(r->secno>>24\)&0x0F\)\);) 43.344 Tj
-0 -23.5636 Td
-(3815     if\(r->read\)) 12.04 Tj
-0 -24.8727 Td
-(3816       outb\(0x1F7, IDE_CMD_READ\);) 22.274 Tj
-0 -26.1818 Td
-(3817     else {) 9.03 Tj
-0 -27.4909 Td
-(3818       outb\(0x1F7, IDE_CMD_WRITE\);) 22.876 Tj
-0 -28.8 Td
-(3819       outsl\(0x1F0, r->addr, 512/4\);) 24.08 Tj
-0 -30.1091 Td
-(3820     }) 6.02 Tj
-0 -31.4182 Td
-(3821   }) 4.816 Tj
-0 -32.7273 Td
-(3822 }) 3.612 Tj
-0 -34.0364 Td
-(3823 ) 3.01 Tj
-0 -35.3454 Td
-(3824 // Run an entire disk operation.) 22.274 Tj
-0 -36.6545 Td
-(3825 void) 5.418 Tj
-0 -37.9636 Td
-(3826 ide_rw\(int diskno, uint secno, void *addr, uint nsecs, int read\)) 41.538 Tj
-0 -39.2727 Td
-(3827 {) 3.612 Tj
-0 -40.5818 Td
-(3828   struct ide_request *r;) 17.458 Tj
-0 -41.8909 Td
-(3829 ) 3.01 Tj
-0 -43.2 Td
-(3830   if\(diskno && !disk_1_present\)) 21.672 Tj
-0 -44.5091 Td
-(3831     panic\("ide disk 1 not present"\);) 24.682 Tj
-0 -45.8182 Td
-(3832 ) 3.01 Tj
-0 -47.1272 Td
-(3833   acquire\(&ide_lock\);) 15.652 Tj
-0 -48.4363 Td
-(3834 ) 3.01 Tj
-0 -49.7454 Td
-(3835   // Add request to queue.) 18.662 Tj
-0 -51.0545 Td
-(3836   while\(\(head + 1\) % NREQUEST == tail\)) 25.886 Tj
-0 -52.3636 Td
-(3837     sleep\(&disk_queue, &ide_lock\);) 23.478 Tj
-0 -53.6727 Td
-(3838 ) 3.01 Tj
-0 -54.9818 Td
-(3839   r = &request[head];) 15.652 Tj
-0 -56.2909 Td
-(3840   r->secno = secno;) 14.448 Tj
-0 -57.6 Td
-(3841   r->addr = addr;) 13.244 Tj
-0 -58.9091 Td
-(3842   r->nsecs = nsecs;) 14.448 Tj
-0 -60.2181 Td
-(3843   r->diskno = diskno;) 15.652 Tj
-0 -61.5272 Td
-(3844   r->read = read;) 13.244 Tj
-0 -62.8363 Td
-(3845   head = \(head + 1\) % NREQUEST;) 21.672 Tj
-0 -64.1454 Td
-(3846 ) 3.01 Tj
-0 -65.4545 Td
-(3847   // Start request if necessary.) 22.274 Tj
-0 -66.7636 Td
-(3848   ide_start_request\(\);) 16.254 Tj
-0 -68.0727 Td
-(3849 ) 3.01 Tj
-0 -72 Td
-(Sheet 38) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/fs.c  Page 4) 152.898 Tj
+0 -28.4801 Td
+(3800 // Find the inode with number inum on device dev) 231.531 Tj
+0 -37.9735 Td
+(3801 // and return the in-memory copy.) 166.004 Tj
+0 -47.4668 Td
+(3802 static struct inode*) 109.213 Tj
+0 -56.9602 Td
+(3803 iget\(uint dev, uint inum\)) 131.055 Tj
+0 -66.4535 Td
+(3804 {) 26.2111 Tj
+0 -75.9469 Td
+(3805   struct inode *ip, *empty;) 139.792 Tj
+0 -85.4403 Td
+(3806 ) 21.8426 Tj
+0 -94.9336 Td
+(3807   acquire\(&icache.lock\);) 126.687 Tj
+0 -104.427 Td
+(3808 ) 21.8426 Tj
+0 -113.92 Td
+(3809   // Try for cached inode.) 135.424 Tj
+0 -123.414 Td
+(3810   empty = 0;) 74.2647 Tj
+0 -132.907 Td
+(3811   for\(ip = &icache.inode[0]; ip < &icache.inode[NINODE]; \
+ip++\){) 297.059 Tj
+0 -142.4 Td
+(3812     if\(ip->ref > 0 && ip->dev == dev && ip->inum == inum\)\
+{) 275.216 Tj
+0 -151.894 Td
+(3813       ip->ref++;) 91.7388 Tj
+0 -161.387 Td
+(3814       release\(&icache.lock\);) 144.161 Tj
+0 -170.88 Td
+(3815       return ip;) 91.7388 Tj
+0 -180.374 Td
+(3816     }) 43.6851 Tj
+0 -189.867 Td
+(3817     if\(empty == 0 && ip->ref == 0\)    // Remember empty \
+slot.) 288.322 Tj
+0 -199.361 Td
+(3818       empty = ip;) 96.1073 Tj
+0 -208.854 Td
+(3819   }) 34.9481 Tj
+0 -218.347 Td
+(3820 ) 21.8426 Tj
+0 -227.841 Td
+(3821   // Allocate fresh inode.) 135.424 Tj
+0 -237.334 Td
+(3822   if\(empty == 0\)) 91.7388 Tj
+0 -246.827 Td
+(3823     panic\("iget: no inodes"\);) 148.529 Tj
+0 -256.321 Td
+(3824 ) 21.8426 Tj
+0 -265.814 Td
+(3825   ip = empty;) 78.6333 Tj
+0 -275.307 Td
+(3826   ip->dev = dev;) 91.7388 Tj
+0 -284.801 Td
+(3827   ip->inum = inum;) 100.476 Tj
+0 -294.294 Td
+(3828   ip->ref = 1;) 83.0018 Tj
+0 -303.788 Td
+(3829   ip->flags = 0;) 91.7388 Tj
+0 -313.281 Td
+(3830   release\(&icache.lock\);) 126.687 Tj
+0 -322.774 Td
+(3831 ) 21.8426 Tj
+0 -332.268 Td
+(3832   return ip;) 74.2647 Tj
+0 -341.761 Td
+(3833 }) 26.2111 Tj
+0 -351.254 Td
+(3834 ) 21.8426 Tj
+0 -360.748 Td
+(3835 // Increment reference count for ip.) 179.109 Tj
+0 -370.241 Td
+(3836 // Returns ip to enable ip = idup\(ip1\) idiom.) 218.426 Tj
+0 -379.734 Td
+(3837 struct inode*) 78.6333 Tj
+0 -389.228 Td
+(3838 idup\(struct inode *ip\)) 117.95 Tj
+0 -398.721 Td
+(3839 {) 26.2111 Tj
+0 -408.214 Td
+(3840   acquire\(&icache.lock\);) 126.687 Tj
+0 -417.708 Td
+(3841   ip->ref++;) 74.2647 Tj
+0 -427.201 Td
+(3842   release\(&icache.lock\);) 126.687 Tj
+0 -436.695 Td
+(3843   return ip;) 74.2647 Tj
+0 -446.188 Td
+(3844 }) 26.2111 Tj
+0 -455.681 Td
+(3845 ) 21.8426 Tj
+0 -465.175 Td
+(3846 ) 21.8426 Tj
+0 -474.668 Td
+(3847 ) 21.8426 Tj
+0 -484.161 Td
+(3848 ) 21.8426 Tj
+0 -493.655 Td
+(3849 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/ide.c  Page 4) 21.672 Tj
-0 -3.92728 Td
-(3850   // Wait for request to finish.) 22.274 Tj
-0 -5.23637 Td
-(3851   sleep\(r, &ide_lock\);) 16.254 Tj
-0 -6.54546 Td
-(3852 ) 3.01 Tj
-0 -7.85455 Td
-(3853   // Finish request.) 15.05 Tj
-0 -9.16364 Td
-(3854   if\(read\){) 9.632 Tj
-0 -10.4727 Td
-(3855     if\(ide_wait_ready\(1\) >= 0\)) 21.07 Tj
-0 -11.7818 Td
-(3856       insl\(0x1F0, addr, 512/4\);) 21.672 Tj
-0 -13.0909 Td
-(3857   }) 4.816 Tj
-0 -14.4 Td
-(3858 ) 3.01 Tj
-0 -15.7091 Td
-(3859   // Remove request from queue.) 21.672 Tj
-0 -17.0182 Td
-(3860   if\(\(head + 1\) % NREQUEST == tail\)) 24.08 Tj
-0 -18.3273 Td
-(3861     wakeup\(&disk_queue\);) 17.458 Tj
-0 -19.6364 Td
-(3862   tail = \(tail + 1\) % NREQUEST;) 21.672 Tj
-0 -20.9455 Td
-(3863 ) 3.01 Tj
-0 -22.2545 Td
-(3864   // Start next request in queue, if any.) 27.692 Tj
-0 -23.5636 Td
-(3865   ide_start_request\(\);) 16.254 Tj
-0 -24.8727 Td
-(3866 ) 3.01 Tj
-0 -26.1818 Td
-(3867   release\(&ide_lock\);) 15.652 Tj
-0 -27.4909 Td
-(3868 }) 3.612 Tj
-0 -28.8 Td
-(3869 ) 3.01 Tj
-0 -30.1091 Td
-(3870 // Synchronous disk write.) 18.662 Tj
-0 -31.4182 Td
-(3871 int) 4.816 Tj
-0 -32.7273 Td
-(3872 ide_write\(int diskno, uint secno, const void *src, uint nsecs\)) 40.334 Tj
-0 -34.0364 Td
-(3873 {) 3.612 Tj
-0 -35.3454 Td
-(3874   int r;) 7.826 Tj
-0 -36.6545 Td
-(3875 ) 3.01 Tj
-0 -37.9636 Td
-(3876   if\(nsecs > 256\)) 13.244 Tj
-0 -39.2727 Td
-(3877     panic\("ide_write"\);) 16.856 Tj
-0 -40.5818 Td
-(3878 ) 3.01 Tj
-0 -41.8909 Td
-(3879   ide_wait_ready\(0\);) 15.05 Tj
-0 -43.2 Td
-(3880 ) 3.01 Tj
-0 -44.5091 Td
-(3881   outb\(0x1F2, nsecs\);) 15.652 Tj
-0 -45.8182 Td
-(3882   outb\(0x1F3, secno & 0xFF\);) 19.866 Tj
-0 -47.1272 Td
-(3883   outb\(0x1F4, \(secno >> 8\) & 0xFF\);) 24.08 Tj
-0 -48.4363 Td
-(3884   outb\(0x1F5, \(secno >> 16\) & 0xFF\);) 24.682 Tj
-0 -49.7454 Td
-(3885   outb\(0x1F6, 0xE0 | \(\(diskno&1\)<<4\) | \(\(secno>>24\)&0x0F\)\);) 38.528 Tj
-0 -51.0545 Td
-(3886   outb\(0x1F7, 0x30\);    // CMD 0x30 means write sector) 35.518 Tj
-0 -52.3636 Td
-(3887 ) 3.01 Tj
-0 -53.6727 Td
-(3888   for\(; nsecs > 0; nsecs--, src += 512\) {) 27.692 Tj
-0 -54.9818 Td
-(3889     if\(\(r = ide_wait_ready\(1\)\) < 0\)) 24.08 Tj
-0 -56.2909 Td
-(3890       return r;) 12.04 Tj
-0 -57.6 Td
-(3891     outsl\(0x1F0, src, 512/4\);) 20.468 Tj
-0 -58.9091 Td
-(3892   }) 4.816 Tj
-0 -60.2181 Td
-(3893 ) 3.01 Tj
-0 -61.5272 Td
-(3894   return 0;) 9.632 Tj
-0 -62.8363 Td
-(3895 }) 3.612 Tj
-0 -64.1454 Td
-(3896 ) 3.01 Tj
-0 -65.4545 Td
-(3897 ) 3.01 Tj
-0 -66.7636 Td
-(3898 ) 3.01 Tj
-0 -68.0727 Td
-(3899 ) 3.01 Tj
-0 -72 Td
-(Sheet 38) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/fs.c  Page 5) 152.898 Tj
+0 -28.4801 Td
+(3850 // Lock the given inode.) 126.687 Tj
+0 -37.9735 Td
+(3851 void) 39.3166 Tj
+0 -47.4668 Td
+(3852 ilock\(struct inode *ip\)) 122.318 Tj
+0 -56.9602 Td
+(3853 {) 26.2111 Tj
+0 -66.4535 Td
+(3854   struct buf *bp;) 96.1073 Tj
+0 -75.9469 Td
+(3855   struct dinode *dip;) 113.581 Tj
+0 -85.4403 Td
+(3856 ) 21.8426 Tj
+0 -94.9336 Td
+(3857   if\(ip == 0 || ip->ref < 1\)) 144.161 Tj
+0 -104.427 Td
+(3858     panic\("ilock"\);) 104.844 Tj
+0 -113.92 Td
+(3859 ) 21.8426 Tj
+0 -123.414 Td
+(3860   acquire\(&icache.lock\);) 126.687 Tj
+0 -132.907 Td
+(3861   while\(ip->flags & I_BUSY\)) 139.792 Tj
+0 -142.4 Td
+(3862     sleep\(ip, &icache.lock\);) 144.161 Tj
+0 -151.894 Td
+(3863   ip->flags |= I_BUSY;) 117.95 Tj
+0 -161.387 Td
+(3864   release\(&icache.lock\);) 126.687 Tj
+0 -170.88 Td
+(3865 ) 21.8426 Tj
+0 -180.374 Td
+(3866   if\(!\(ip->flags & I_VALID\)\){) 148.529 Tj
+0 -189.867 Td
+(3867     bp = bread\(ip->dev, IBLOCK\(ip->inum\)\);) 205.32 Tj
+0 -199.361 Td
+(3868     dip = \(struct dinode*\)bp->data + ip->inum%IPB;) 240.268 Tj
+0 -208.854 Td
+(3869     ip->type = dip->type;) 131.055 Tj
+0 -218.347 Td
+(3870     ip->major = dip->major;) 139.792 Tj
+0 -227.841 Td
+(3871     ip->minor = dip->minor;) 139.792 Tj
+0 -237.334 Td
+(3872     ip->nlink = dip->nlink;) 139.792 Tj
+0 -246.827 Td
+(3873     ip->size = dip->size;) 131.055 Tj
+0 -256.321 Td
+(3874     memmove\(ip->addrs, dip->addrs, sizeof\(ip->addrs\)\);) 257.742 Tj
+0 -265.814 Td
+(3875     brelse\(bp\);) 87.3703 Tj
+0 -275.307 Td
+(3876     ip->flags |= I_VALID;) 131.055 Tj
+0 -284.801 Td
+(3877     if\(ip->type == 0\)) 113.581 Tj
+0 -294.294 Td
+(3878       panic\("ilock: no type"\);) 152.898 Tj
+0 -303.788 Td
+(3879   }) 34.9481 Tj
+0 -313.281 Td
+(3880 }) 26.2111 Tj
+0 -322.774 Td
+(3881 ) 21.8426 Tj
+0 -332.268 Td
+(3882 // Unlock the given inode.) 135.424 Tj
+0 -341.761 Td
+(3883 void) 39.3166 Tj
+0 -351.254 Td
+(3884 iunlock\(struct inode *ip\)) 131.055 Tj
+0 -360.748 Td
+(3885 {) 26.2111 Tj
+0 -370.241 Td
+(3886   if\(ip == 0 || !\(ip->flags & I_BUSY\) || ip->ref < 1\)) 253.374 Tj
+0 -379.734 Td
+(3887     panic\("iunlock"\);) 113.581 Tj
+0 -389.228 Td
+(3888 ) 21.8426 Tj
+0 -398.721 Td
+(3889   acquire\(&icache.lock\);) 126.687 Tj
+0 -408.214 Td
+(3890   ip->flags &= ~I_BUSY;) 122.318 Tj
+0 -417.708 Td
+(3891   wakeup\(ip\);) 78.6333 Tj
+0 -427.201 Td
+(3892   release\(&icache.lock\);) 126.687 Tj
+0 -436.695 Td
+(3893 }) 26.2111 Tj
+0 -446.188 Td
+(3894 ) 21.8426 Tj
+0 -455.681 Td
+(3895 ) 21.8426 Tj
+0 -465.175 Td
+(3896 ) 21.8426 Tj
+0 -474.668 Td
+(3897 ) 21.8426 Tj
+0 -484.161 Td
+(3898 ) 21.8426 Tj
+0 -493.655 Td
+(3899 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 38) 34.9481 Tj
 Q
 Q
 Q
@@ -13322,7 +14228,10 @@ pdfEndPage
 %%Page: 46 46
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -13330,241 +14239,255 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/bio.c  Page 1) 21.672 Tj
-0 -3.92728 Td
-(3900 // Buffer cache.) 12.642 Tj
-0 -5.23637 Td
-(3901 //) 4.214 Tj
-0 -6.54546 Td
-(3902 // The buffer cache is a linked list of buf structures) 35.518 Tj
-0 -7.85455 Td
-(3903 // holding cached copies of disk block contents.) 31.906 Tj
-0 -9.16364 Td
-(3904 // Each buf has two state bits B_BUSY and B_VALID.) 33.11 Tj
-0 -10.4727 Td
-(3905 // If B_BUSY is set, it means that some code is currently) 37.324 Tj
-0 -11.7818 Td
-(3906 // editing buf, so other code is not allowed to look at it.) 38.528 Tj
-0 -13.0909 Td
-(3907 // To wait for a buffer that is B_BUSY, sleep on buf.) 34.916 Tj
-0 -14.4 Td
-(3908 // \(See bget below.\)) 15.05 Tj
-0 -15.7091 Td
-(3909 //) 4.214 Tj
-0 -17.0182 Td
-(3910 // If B_VALID is set, it means that the memory contents) 36.12 Tj
-0 -18.3273 Td
-(3911 // have been initialized by reading them off the disk.) 35.518 Tj
-0 -19.6364 Td
-(3912 // \(Conversely, if B_VALID is not set, the memory contents) 37.926 Tj
-0 -20.9455 Td
-(3913 // of buf must be initialized, often by calling bread,) 35.518 Tj
-0 -22.2545 Td
-(3914 // before being used.\)) 16.254 Tj
-0 -23.5636 Td
-(3915 //) 4.214 Tj
-0 -24.8727 Td
-(3916 // After making changes to a buf's memory, call bwrite to flush) 40.936 Tj
-0 -26.1818 Td
-(3917 // the changes out to disk, to keep the disk and memory copies) 40.334 Tj
-0 -27.4909 Td
-(3918 // in sync.) 9.632 Tj
-0 -28.8 Td
-(3919 //) 4.214 Tj
-0 -30.1091 Td
-(3920 // When finished with a buffer, call brelse to release the buffer) 42.14 Tj
-0 -31.4182 Td
-(3921 // \(i.e., clear B_BUSY\), so that others can access it.) 35.518 Tj
-0 -32.7273 Td
-(3922 //) 4.214 Tj
-0 -34.0364 Td
-(3923 // Bufs that are not B_BUSY are fair game for reuse for other) 39.732 Tj
-0 -35.3454 Td
-(3924 // disk blocks.  It is not allowed to use a buf after calling brelse.) 44.548 Tj
-0 -36.6545 Td
-(3925 ) 3.01 Tj
-0 -37.9636 Td
-(3926 #include "types.h") 13.846 Tj
-0 -39.2727 Td
-(3927 #include "param.h") 13.846 Tj
-0 -40.5818 Td
-(3928 #include "x86.h") 12.642 Tj
-0 -41.8909 Td
-(3929 #include "mmu.h") 12.642 Tj
-0 -43.2 Td
-(3930 #include "proc.h") 13.244 Tj
-0 -44.5091 Td
-(3931 #include "defs.h") 13.244 Tj
-0 -45.8182 Td
-(3932 #include "spinlock.h") 15.652 Tj
-0 -47.1272 Td
-(3933 #include "buf.h") 12.642 Tj
-0 -48.4363 Td
-(3934 ) 3.01 Tj
-0 -49.7454 Td
-(3935 struct buf buf[NBUF];) 15.652 Tj
-0 -51.0545 Td
-(3936 struct spinlock buf_table_lock;) 21.672 Tj
-0 -52.3636 Td
-(3937 ) 3.01 Tj
-0 -53.6727 Td
-(3938 // Linked list of all buffers, through prev/next.) 32.508 Tj
-0 -54.9818 Td
-(3939 // bufhead->next is most recently used.) 26.488 Tj
-0 -56.2909 Td
-(3940 // bufhead->tail is least recently used.) 27.09 Tj
-0 -57.6 Td
-(3941 struct buf bufhead;) 14.448 Tj
-0 -58.9091 Td
-(3942 ) 3.01 Tj
-0 -60.2181 Td
-(3943 void) 5.418 Tj
-0 -61.5272 Td
-(3944 binit\(void\)) 9.632 Tj
-0 -62.8363 Td
-(3945 {) 3.612 Tj
-0 -64.1454 Td
-(3946   struct buf *b;) 12.642 Tj
-0 -65.4545 Td
-(3947 ) 3.01 Tj
-0 -66.7636 Td
-(3948   initlock\(&buf_table_lock, "buf_table"\);) 27.692 Tj
-0 -68.0727 Td
-(3949 ) 3.01 Tj
-0 -72 Td
-(Sheet 39) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/fs.c  Page 6) 152.898 Tj
+0 -28.4801 Td
+(3900 // Caller holds reference to unlocked ip.  Drop reference.) 275.216 Tj
+0 -37.9735 Td
+(3901 void) 39.3166 Tj
+0 -47.4668 Td
+(3902 iput\(struct inode *ip\)) 117.95 Tj
+0 -56.9602 Td
+(3903 {) 26.2111 Tj
+0 -66.4535 Td
+(3904   acquire\(&icache.lock\);) 126.687 Tj
+0 -75.9469 Td
+(3905   if\(ip->ref == 1 && \(ip->flags & I_VALID\) && ip->nlink\
+ == 0\){) 292.69 Tj
+0 -85.4403 Td
+(3906     // inode is no longer used: truncate and free inode.) 266.479 Tj
+0 -94.9336 Td
+(3907     if\(ip->flags & I_BUSY\)) 135.424 Tj
+0 -104.427 Td
+(3908       panic\("iput busy"\);) 131.055 Tj
+0 -113.92 Td
+(3909     ip->flags |= I_BUSY;) 126.687 Tj
+0 -123.414 Td
+(3910     release\(&icache.lock\);) 135.424 Tj
+0 -132.907 Td
+(3911     itrunc\(ip\);) 87.3703 Tj
+0 -142.4 Td
+(3912     ip->type = 0;) 96.1073 Tj
+0 -151.894 Td
+(3913     iupdate\(ip\);) 91.7388 Tj
+0 -161.387 Td
+(3914     acquire\(&icache.lock\);) 135.424 Tj
+0 -170.88 Td
+(3915     ip->flags &= ~I_BUSY;) 131.055 Tj
+0 -180.374 Td
+(3916     wakeup\(ip\);) 87.3703 Tj
+0 -189.867 Td
+(3917   }) 34.9481 Tj
+0 -199.361 Td
+(3918   ip->ref--;) 74.2647 Tj
+0 -208.854 Td
+(3919   release\(&icache.lock\);) 126.687 Tj
+0 -218.347 Td
+(3920 }) 26.2111 Tj
+0 -227.841 Td
+(3921 ) 21.8426 Tj
+0 -237.334 Td
+(3922 // Common idiom: unlock, then put.) 170.372 Tj
+0 -246.827 Td
+(3923 void) 39.3166 Tj
+0 -256.321 Td
+(3924 iunlockput\(struct inode *ip\)) 144.161 Tj
+0 -265.814 Td
+(3925 {) 26.2111 Tj
+0 -275.307 Td
+(3926   iunlock\(ip\);) 83.0018 Tj
+0 -284.801 Td
+(3927   iput\(ip\);) 69.8962 Tj
+0 -294.294 Td
+(3928 }) 26.2111 Tj
+0 -303.788 Td
+(3929 ) 21.8426 Tj
+0 -313.281 Td
+(3930 ) 21.8426 Tj
+0 -322.774 Td
+(3931 ) 21.8426 Tj
+0 -332.268 Td
+(3932 ) 21.8426 Tj
+0 -341.761 Td
+(3933 ) 21.8426 Tj
+0 -351.254 Td
+(3934 ) 21.8426 Tj
+0 -360.748 Td
+(3935 ) 21.8426 Tj
+0 -370.241 Td
+(3936 ) 21.8426 Tj
+0 -379.734 Td
+(3937 ) 21.8426 Tj
+0 -389.228 Td
+(3938 ) 21.8426 Tj
+0 -398.721 Td
+(3939 ) 21.8426 Tj
+0 -408.214 Td
+(3940 ) 21.8426 Tj
+0 -417.708 Td
+(3941 ) 21.8426 Tj
+0 -427.201 Td
+(3942 ) 21.8426 Tj
+0 -436.695 Td
+(3943 ) 21.8426 Tj
+0 -446.188 Td
+(3944 ) 21.8426 Tj
+0 -455.681 Td
+(3945 ) 21.8426 Tj
+0 -465.175 Td
+(3946 ) 21.8426 Tj
+0 -474.668 Td
+(3947 ) 21.8426 Tj
+0 -484.161 Td
+(3948 ) 21.8426 Tj
+0 -493.655 Td
+(3949 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/bio.c  Page 2) 21.672 Tj
-0 -3.92728 Td
-(3950   // Create linked list of buffers) 23.478 Tj
-0 -5.23637 Td
-(3951   bufhead.prev = &bufhead;) 18.662 Tj
-0 -6.54546 Td
-(3952   bufhead.next = &bufhead;) 18.662 Tj
-0 -7.85455 Td
-(3953   for\(b = buf; b < buf+NBUF; b++\){) 23.478 Tj
-0 -9.16364 Td
-(3954     b->next = bufhead.next;) 19.264 Tj
-0 -10.4727 Td
-(3955     b->prev = &bufhead;) 16.856 Tj
-0 -11.7818 Td
-(3956     bufhead.next->prev = b;) 19.264 Tj
-0 -13.0909 Td
-(3957     bufhead.next = b;) 15.652 Tj
-0 -14.4 Td
-(3958   }) 4.816 Tj
-0 -15.7091 Td
-(3959 }) 3.612 Tj
-0 -17.0182 Td
-(3960 ) 3.01 Tj
-0 -18.3273 Td
-(3961 // Look through buffer cache for block n on device dev.) 36.12 Tj
-0 -19.6364 Td
-(3962 // If not found, allocate fresh block.) 25.886 Tj
-0 -20.9455 Td
-(3963 // In either case, return locked buffer.) 27.09 Tj
-0 -22.2545 Td
-(3964 static struct buf*) 13.846 Tj
-0 -23.5636 Td
-(3965 bget\(uint dev, uint sector\)) 19.264 Tj
-0 -24.8727 Td
-(3966 {) 3.612 Tj
-0 -26.1818 Td
-(3967   struct buf *b;) 12.642 Tj
-0 -27.4909 Td
-(3968 ) 3.01 Tj
-0 -28.8 Td
-(3969   acquire\(&buf_table_lock\);) 19.264 Tj
-0 -30.1091 Td
-(3970 ) 3.01 Tj
-0 -31.4182 Td
-(3971   for\(;;\){) 9.03 Tj
-0 -32.7273 Td
-(3972     for\(b = bufhead.next; b != &bufhead; b = b->next\)) 34.916 Tj
-0 -34.0364 Td
-(3973       if\(\(b->flags & \(B_BUSY|B_VALID\)\) &&) 27.692 Tj
-0 -35.3454 Td
-(3974          b->dev == dev && b->sector == sector\)) 30.702 Tj
-0 -36.6545 Td
-(3975         break;) 11.438 Tj
-0 -37.9636 Td
-(3976 ) 3.01 Tj
-0 -39.2727 Td
-(3977     if\(b != &bufhead\){) 16.254 Tj
-0 -40.5818 Td
-(3978       if\(b->flags & B_BUSY\){) 19.866 Tj
-0 -41.8909 Td
-(3979         sleep\(buf, &buf_table_lock\);) 24.682 Tj
-0 -43.2 Td
-(3980       } else {) 11.438 Tj
-0 -44.5091 Td
-(3981         b->flags |= B_BUSY;) 19.264 Tj
-0 -45.8182 Td
-(3982         // b->flags &= ~B_VALID; // Force reread from disk) 37.926 Tj
-0 -47.1272 Td
-(3983         release\(&buf_table_lock\);) 22.876 Tj
-0 -48.4363 Td
-(3984         return b;) 13.244 Tj
-0 -49.7454 Td
-(3985       }) 7.224 Tj
-0 -51.0545 Td
-(3986     } else {) 10.234 Tj
-0 -52.3636 Td
-(3987       for\(b = bufhead.prev; b != &bufhead; b = b->prev\){) 36.722 Tj
-0 -53.6727 Td
-(3988         if\(\(b->flags & B_BUSY\) == 0\){) 25.284 Tj
-0 -54.9818 Td
-(3989           b->flags = B_BUSY;) 19.866 Tj
-0 -56.2909 Td
-(3990           b->dev = dev;) 16.856 Tj
-0 -57.6 Td
-(3991           b->sector = sector;) 20.468 Tj
-0 -58.9091 Td
-(3992           release\(&buf_table_lock\);) 24.08 Tj
-0 -60.2181 Td
-(3993           return b;) 14.448 Tj
-0 -61.5272 Td
-(3994         }) 8.428 Tj
-0 -62.8363 Td
-(3995       }) 7.224 Tj
-0 -64.1454 Td
-(3996       panic\("bget: no buffers"\);) 22.274 Tj
-0 -65.4545 Td
-(3997     }) 6.02 Tj
-0 -66.7636 Td
-(3998   }) 4.816 Tj
-0 -68.0727 Td
-(3999 }) 3.612 Tj
-0 -72 Td
-(Sheet 39) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/fs.c  Page 7) 152.898 Tj
+0 -28.4801 Td
+(3950 // Allocate a new inode with the given type on device dev.) 275.216 Tj
+0 -37.9735 Td
+(3951 struct inode*) 78.6333 Tj
+0 -47.4668 Td
+(3952 ialloc\(uint dev, short type\)) 144.161 Tj
+0 -56.9602 Td
+(3953 {) 26.2111 Tj
+0 -66.4535 Td
+(3954   int inum;) 69.8962 Tj
+0 -75.9469 Td
+(3955   struct buf *bp;) 96.1073 Tj
+0 -85.4403 Td
+(3956   struct dinode *dip;) 113.581 Tj
+0 -94.9336 Td
+(3957   struct superblock sb;) 122.318 Tj
+0 -104.427 Td
+(3958 ) 21.8426 Tj
+0 -113.92 Td
+(3959   readsb\(dev, &sb\);) 104.844 Tj
+0 -123.414 Td
+(3960   for\(inum = 1; inum < sb.ninodes; inum++\){  // loop ove\
+r inode blocks) 327.639 Tj
+0 -132.907 Td
+(3961     bp = bread\(dev, IBLOCK\(inum\)\);) 170.372 Tj
+0 -142.4 Td
+(3962     dip = \(struct dinode*\)bp->data + inum%IPB;) 222.794 Tj
+0 -151.894 Td
+(3963     if\(dip->type == 0\){  // a free inode) 196.583 Tj
+0 -161.387 Td
+(3964       memset\(dip, 0, sizeof\(*dip\)\);) 174.741 Tj
+0 -170.88 Td
+(3965       dip->type = type;) 122.318 Tj
+0 -180.374 Td
+(3966       bwrite\(bp\);   // mark it allocated on the disk) 249.005 Tj
+0 -189.867 Td
+(3967       brelse\(bp\);) 96.1073 Tj
+0 -199.361 Td
+(3968       return iget\(dev, inum\);) 148.529 Tj
+0 -208.854 Td
+(3969     }) 43.6851 Tj
+0 -218.347 Td
+(3970     brelse\(bp\);) 87.3703 Tj
+0 -227.841 Td
+(3971   }) 34.9481 Tj
+0 -237.334 Td
+(3972   panic\("ialloc: no inodes"\);) 148.529 Tj
+0 -246.827 Td
+(3973 }) 26.2111 Tj
+0 -256.321 Td
+(3974 ) 21.8426 Tj
+0 -265.814 Td
+(3975 // Copy inode, which has changed, from memory to disk.) 257.742 Tj
+0 -275.307 Td
+(3976 void) 39.3166 Tj
+0 -284.801 Td
+(3977 iupdate\(struct inode *ip\)) 131.055 Tj
+0 -294.294 Td
+(3978 {) 26.2111 Tj
+0 -303.788 Td
+(3979   struct buf *bp;) 96.1073 Tj
+0 -313.281 Td
+(3980   struct dinode *dip;) 113.581 Tj
+0 -322.774 Td
+(3981 ) 21.8426 Tj
+0 -332.268 Td
+(3982   bp = bread\(ip->dev, IBLOCK\(ip->inum\)\);) 196.583 Tj
+0 -341.761 Td
+(3983   dip = \(struct dinode*\)bp->data + ip->inum%IPB;) 231.531 Tj
+0 -351.254 Td
+(3984   dip->type = ip->type;) 122.318 Tj
+0 -360.748 Td
+(3985   dip->major = ip->major;) 131.055 Tj
+0 -370.241 Td
+(3986   dip->minor = ip->minor;) 131.055 Tj
+0 -379.734 Td
+(3987   dip->nlink = ip->nlink;) 131.055 Tj
+0 -389.228 Td
+(3988   dip->size = ip->size;) 122.318 Tj
+0 -398.721 Td
+(3989   memmove\(dip->addrs, ip->addrs, sizeof\(ip->addrs\)\);) 249.005 Tj
+0 -408.214 Td
+(3990   bwrite\(bp\);) 78.6333 Tj
+0 -417.708 Td
+(3991   brelse\(bp\);) 78.6333 Tj
+0 -427.201 Td
+(3992 }) 26.2111 Tj
+0 -436.695 Td
+(3993 ) 21.8426 Tj
+0 -446.188 Td
+(3994 ) 21.8426 Tj
+0 -455.681 Td
+(3995 ) 21.8426 Tj
+0 -465.175 Td
+(3996 ) 21.8426 Tj
+0 -474.668 Td
+(3997 ) 21.8426 Tj
+0 -484.161 Td
+(3998 ) 21.8426 Tj
+0 -493.655 Td
+(3999 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 39) 34.9481 Tj
 Q
 Q
 Q
@@ -13576,6 +14499,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -13583,241 +14509,258 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/bio.c  Page 3) 21.672 Tj
-0 -3.92728 Td
-(4000 // Read buf's contents from disk.) 22.876 Tj
-0 -5.23637 Td
-(4001 struct buf*) 9.632 Tj
-0 -6.54546 Td
-(4002 bread\(uint dev, uint sector\)) 19.866 Tj
-0 -7.85455 Td
-(4003 {) 3.612 Tj
-0 -9.16364 Td
-(4004   struct buf *b;) 12.642 Tj
-0 -10.4727 Td
-(4005 ) 3.01 Tj
-0 -11.7818 Td
-(4006   b = bget\(dev, sector\);) 17.458 Tj
-0 -13.0909 Td
-(4007   if\(b->flags & B_VALID\)) 17.458 Tj
-0 -14.4 Td
-(4008     return b;) 10.836 Tj
-0 -15.7091 Td
-(4009 ) 3.01 Tj
-0 -17.0182 Td
-(4010   ide_rw\(dev & 0xff, sector, b->data, 1, 1\);) 29.498 Tj
-0 -18.3273 Td
-(4011   b->flags |= B_VALID;) 16.254 Tj
-0 -19.6364 Td
-(4012 ) 3.01 Tj
-0 -20.9455 Td
-(4013   return b;) 9.632 Tj
-0 -22.2545 Td
-(4014 }) 3.612 Tj
-0 -23.5636 Td
-(4015 ) 3.01 Tj
-0 -24.8727 Td
-(4016 // Write buf's contents to disk.) 22.274 Tj
-0 -26.1818 Td
-(4017 // Must be locked.) 13.846 Tj
-0 -27.4909 Td
-(4018 void) 5.418 Tj
-0 -28.8 Td
-(4019 bwrite\(struct buf *b, uint sector\)) 23.478 Tj
-0 -30.1091 Td
-(4020 {) 3.612 Tj
-0 -31.4182 Td
-(4021   if\(\(b->flags & B_BUSY\) == 0\)) 21.07 Tj
-0 -32.7273 Td
-(4022     panic\("bwrite"\);) 15.05 Tj
-0 -34.0364 Td
-(4023 ) 3.01 Tj
-0 -35.3454 Td
-(4024   ide_rw\(b->dev & 0xff, sector, b->data, 1, 0\);) 31.304 Tj
-0 -36.6545 Td
-(4025   b->flags |= B_VALID;) 16.254 Tj
-0 -37.9636 Td
-(4026 }) 3.612 Tj
-0 -39.2727 Td
-(4027 ) 3.01 Tj
-0 -40.5818 Td
-(4028 // Release the buffer buf.) 18.662 Tj
-0 -41.8909 Td
-(4029 void) 5.418 Tj
-0 -43.2 Td
-(4030 brelse\(struct buf *b\)) 15.652 Tj
-0 -44.5091 Td
-(4031 {) 3.612 Tj
-0 -45.8182 Td
-(4032   if\(\(b->flags & B_BUSY\) == 0\)) 21.07 Tj
-0 -47.1272 Td
-(4033     panic\("brelse"\);) 15.05 Tj
-0 -48.4363 Td
-(4034 ) 3.01 Tj
-0 -49.7454 Td
-(4035   acquire\(&buf_table_lock\);) 19.264 Tj
-0 -51.0545 Td
-(4036 ) 3.01 Tj
-0 -52.3636 Td
-(4037   b->next->prev = b->prev;) 18.662 Tj
-0 -53.6727 Td
-(4038   b->prev->next = b->next;) 18.662 Tj
-0 -54.9818 Td
-(4039   b->next = bufhead.next;) 18.06 Tj
-0 -56.2909 Td
-(4040   b->prev = &bufhead;) 15.652 Tj
-0 -57.6 Td
-(4041   bufhead.next->prev = b;) 18.06 Tj
-0 -58.9091 Td
-(4042   bufhead.next = b;) 14.448 Tj
-0 -60.2181 Td
-(4043 ) 3.01 Tj
-0 -61.5272 Td
-(4044   b->flags &= ~B_BUSY;) 16.254 Tj
-0 -62.8363 Td
-(4045   wakeup\(buf\);) 11.438 Tj
-0 -64.1454 Td
-(4046 ) 3.01 Tj
-0 -65.4545 Td
-(4047   release\(&buf_table_lock\);) 19.264 Tj
-0 -66.7636 Td
-(4048 }) 3.612 Tj
-0 -68.0727 Td
-(4049 ) 3.01 Tj
-0 -72 Td
-(Sheet 40) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  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.585 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.953 Tj
+0 -75.9469 Td
+(4005 // listed in the block ip->addrs[INDIRECT].) 209.689 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.69 Tj
+0 -104.427 Td
+(4008 // If there is no such block, alloc controls whether one i\
+s allocated.) 327.639 Tj
+0 -113.92 Td
+(4009 static uint) 69.8962 Tj
+0 -123.414 Td
+(4010 bmap\(struct inode *ip, uint bn, int alloc\)) 205.32 Tj
+0 -132.907 Td
+(4011 {) 26.2111 Tj
+0 -142.4 Td
+(4012   uint addr, *a;) 91.7388 Tj
+0 -151.894 Td
+(4013   struct buf *bp;) 96.1073 Tj
+0 -161.387 Td
+(4014 ) 21.8426 Tj
+0 -170.88 Td
+(4015   if\(bn < NDIRECT\){) 104.844 Tj
+0 -180.374 Td
+(4016     if\(\(addr = ip->addrs[bn]\) == 0\){) 179.109 Tj
+0 -189.867 Td
+(4017       if\(!alloc\)) 91.7388 Tj
+0 -199.361 Td
+(4018         return -1;) 100.476 Tj
+0 -208.854 Td
+(4019       ip->addrs[bn] = addr = balloc\(ip->dev\);) 218.426 Tj
+0 -218.347 Td
+(4020     }) 43.6851 Tj
+0 -227.841 Td
+(4021     return addr;) 91.7388 Tj
+0 -237.334 Td
+(4022   }) 34.9481 Tj
+0 -246.827 Td
+(4023   bn -= NDIRECT;) 91.7388 Tj
+0 -256.321 Td
+(4024 ) 21.8426 Tj
+0 -265.814 Td
+(4025   if\(bn < NINDIRECT\){) 113.581 Tj
+0 -275.307 Td
+(4026     // Load indirect block, allocating if necessary.) 249.005 Tj
+0 -284.801 Td
+(4027     if\(\(addr = ip->addrs[INDIRECT]\) == 0\){) 205.32 Tj
+0 -294.294 Td
+(4028       if\(!alloc\)) 91.7388 Tj
+0 -303.788 Td
+(4029         return -1;) 100.476 Tj
+0 -313.281 Td
+(4030       ip->addrs[INDIRECT] = addr = balloc\(ip->dev\);) 244.637 Tj
+0 -322.774 Td
+(4031     }) 43.6851 Tj
+0 -332.268 Td
+(4032     bp = bread\(ip->dev, addr\);) 152.898 Tj
+0 -341.761 Td
+(4033     a = \(uint*\)bp->data;) 126.687 Tj
+0 -351.254 Td
+(4034 ) 21.8426 Tj
+0 -360.748 Td
+(4035     if\(\(addr = a[bn]\) == 0\){) 144.161 Tj
+0 -370.241 Td
+(4036       if\(!alloc\){) 96.1073 Tj
+0 -379.734 Td
+(4037         brelse\(bp\);) 104.844 Tj
+0 -389.228 Td
+(4038         return -1;) 100.476 Tj
+0 -398.721 Td
+(4039       }) 52.4222 Tj
+0 -408.214 Td
+(4040       a[bn] = addr = balloc\(ip->dev\);) 183.478 Tj
+0 -417.708 Td
+(4041       bwrite\(bp\);) 96.1073 Tj
+0 -427.201 Td
+(4042     }) 43.6851 Tj
+0 -436.695 Td
+(4043     brelse\(bp\);) 87.3703 Tj
+0 -446.188 Td
+(4044     return addr;) 91.7388 Tj
+0 -455.681 Td
+(4045   }) 34.9481 Tj
+0 -465.175 Td
+(4046 ) 21.8426 Tj
+0 -474.668 Td
+(4047   panic\("bmap: out of range"\);) 152.898 Tj
+0 -484.161 Td
+(4048 }) 26.2111 Tj
+0 -493.655 Td
+(4049 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 1) 21.07 Tj
-0 -3.92728 Td
-(4050 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(4051 #include "stat.h") 13.244 Tj
-0 -6.54546 Td
-(4052 #include "param.h") 13.846 Tj
-0 -7.85455 Td
-(4053 #include "x86.h") 12.642 Tj
-0 -9.16364 Td
-(4054 #include "mmu.h") 12.642 Tj
-0 -10.4727 Td
-(4055 #include "proc.h") 13.244 Tj
-0 -11.7818 Td
-(4056 #include "defs.h") 13.244 Tj
-0 -13.0909 Td
-(4057 #include "spinlock.h") 15.652 Tj
-0 -14.4 Td
-(4058 #include "buf.h") 12.642 Tj
-0 -15.7091 Td
-(4059 #include "fs.h") 12.04 Tj
-0 -17.0182 Td
-(4060 #include "fsvar.h") 13.846 Tj
-0 -18.3273 Td
-(4061 #include "dev.h") 12.642 Tj
-0 -19.6364 Td
-(4062 ) 3.01 Tj
-0 -20.9455 Td
-(4063 // Inode table.  The inode table is an in-memory cache of the) 39.732 Tj
-0 -22.2545 Td
-(4064 // on-disk inode structures.  If an inode in the table has a non-zero) 44.548 Tj
-0 -23.5636 Td
-(4065 // reference count, then some open files refer to it and it must stay) 44.548 Tj
-0 -24.8727 Td
-(4066 // in memory.  If an inode has a zero reference count, it is only in) 43.946 Tj
-0 -26.1818 Td
-(4067 // memory as a cache in hopes of being used again \(avoiding a disk read\).) 46.956 Tj
-0 -27.4909 Td
-(4068 // Any inode with reference count zero can be evicted from the table.) 44.548 Tj
-0 -28.8 Td
-(4069 //) 4.214 Tj
-0 -30.1091 Td
-(4070 // In addition to having a reference count, inodes can be marked busy) 44.548 Tj
-0 -31.4182 Td
-(4071 // \(just like bufs\), meaning that some code has logically locked the) 43.946 Tj
-0 -32.7273 Td
-(4072 // inode, and others are not allowed to look at it.) 33.712 Tj
-0 -34.0364 Td
-(4073 // This locking can last for a long) 24.08 Tj
-0 -35.3454 Td
-(4074 // time \(for example, if the inode is busy during a disk access\),) 42.14 Tj
-0 -36.6545 Td
-(4075 // so we don't use spin locks.  Instead, if a process wants to use) 42.742 Tj
-0 -37.9636 Td
-(4076 // a particular inode, it must sleep\(ip\) to wait for it to be not busy.) 45.752 Tj
-0 -39.2727 Td
-(4077 // See iget below.) 13.846 Tj
-0 -40.5818 Td
-(4078 struct inode inode[NINODE];) 19.264 Tj
-0 -41.8909 Td
-(4079 struct spinlock inode_table_lock;) 22.876 Tj
-0 -43.2 Td
-(4080 ) 3.01 Tj
-0 -44.5091 Td
-(4081 uint rootdev = 1;) 13.244 Tj
-0 -45.8182 Td
-(4082 ) 3.01 Tj
-0 -47.1272 Td
-(4083 void) 5.418 Tj
-0 -48.4363 Td
-(4084 iinit\(void\)) 9.632 Tj
-0 -49.7454 Td
-(4085 {) 3.612 Tj
-0 -51.0545 Td
-(4086   initlock\(&inode_table_lock, "inode_table"\);) 30.1 Tj
-0 -52.3636 Td
-(4087 }) 3.612 Tj
-0 -53.6727 Td
-(4088 ) 3.01 Tj
-0 -54.9818 Td
-(4089 ) 3.01 Tj
-0 -56.2909 Td
-(4090 ) 3.01 Tj
-0 -57.6 Td
-(4091 ) 3.01 Tj
-0 -58.9091 Td
-(4092 ) 3.01 Tj
-0 -60.2181 Td
-(4093 ) 3.01 Tj
-0 -61.5272 Td
-(4094 ) 3.01 Tj
-0 -62.8363 Td
-(4095 ) 3.01 Tj
-0 -64.1454 Td
-(4096 ) 3.01 Tj
-0 -65.4545 Td
-(4097 ) 3.01 Tj
-0 -66.7636 Td
-(4098 ) 3.01 Tj
-0 -68.0727 Td
-(4099 ) 3.01 Tj
-0 -72 Td
-(Sheet 40) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/fs.c  Page 9) 152.898 Tj
+0 -28.4801 Td
+(4050 // Truncate inode \(discard contents\).) 183.478 Tj
+0 -37.9735 Td
+(4051 static void) 69.8962 Tj
+0 -47.4668 Td
+(4052 itrunc\(struct inode *ip\)) 126.687 Tj
+0 -56.9602 Td
+(4053 {) 26.2111 Tj
+0 -66.4535 Td
+(4054   int i, j;) 69.8962 Tj
+0 -75.9469 Td
+(4055   struct buf *bp;) 96.1073 Tj
+0 -85.4403 Td
+(4056   uint *a;) 65.5277 Tj
+0 -94.9336 Td
+(4057 ) 21.8426 Tj
+0 -104.427 Td
+(4058   for\(i = 0; i < NDIRECT; i++\){) 157.267 Tj
+0 -113.92 Td
+(4059     if\(ip->addrs[i]\){) 113.581 Tj
+0 -123.414 Td
+(4060       bfree\(ip->dev, ip->addrs[i]\);) 174.741 Tj
+0 -132.907 Td
+(4061       ip->addrs[i] = 0;) 122.318 Tj
+0 -142.4 Td
+(4062     }) 43.6851 Tj
+0 -151.894 Td
+(4063   }) 34.9481 Tj
+0 -161.387 Td
+(4064 ) 21.8426 Tj
+0 -170.88 Td
+(4065   if\(ip->addrs[INDIRECT]\){) 135.424 Tj
+0 -180.374 Td
+(4066     bp = bread\(ip->dev, ip->addrs[INDIRECT]\);) 218.426 Tj
+0 -189.867 Td
+(4067     a = \(uint*\)bp->data;) 126.687 Tj
+0 -199.361 Td
+(4068     for\(j = 0; j < NINDIRECT; j++\){) 174.741 Tj
+0 -208.854 Td
+(4069       if\(a[j]\)) 83.0018 Tj
+0 -218.347 Td
+(4070         bfree\(ip->dev, a[j]\);) 148.529 Tj
+0 -227.841 Td
+(4071     }) 43.6851 Tj
+0 -237.334 Td
+(4072     brelse\(bp\);) 87.3703 Tj
+0 -246.827 Td
+(4073     ip->addrs[INDIRECT] = 0;) 144.161 Tj
+0 -256.321 Td
+(4074   }) 34.9481 Tj
+0 -265.814 Td
+(4075 ) 21.8426 Tj
+0 -275.307 Td
+(4076   ip->size = 0;) 87.3703 Tj
+0 -284.801 Td
+(4077   iupdate\(ip\);) 83.0018 Tj
+0 -294.294 Td
+(4078 }) 26.2111 Tj
+0 -303.788 Td
+(4079 ) 21.8426 Tj
+0 -313.281 Td
+(4080 // Copy stat information from inode.) 179.109 Tj
+0 -322.774 Td
+(4081 void) 39.3166 Tj
+0 -332.268 Td
+(4082 stati\(struct inode *ip, struct stat *st\)) 196.583 Tj
+0 -341.761 Td
+(4083 {) 26.2111 Tj
+0 -351.254 Td
+(4084   st->dev = ip->dev;) 109.213 Tj
+0 -360.748 Td
+(4085   st->ino = ip->inum;) 113.581 Tj
+0 -370.241 Td
+(4086   st->type = ip->type;) 117.95 Tj
+0 -379.734 Td
+(4087   st->nlink = ip->nlink;) 126.687 Tj
+0 -389.228 Td
+(4088   st->size = ip->size;) 117.95 Tj
+0 -398.721 Td
+(4089 }) 26.2111 Tj
+0 -408.214 Td
+(4090 ) 21.8426 Tj
+0 -417.708 Td
+(4091 ) 21.8426 Tj
+0 -427.201 Td
+(4092 ) 21.8426 Tj
+0 -436.695 Td
+(4093 ) 21.8426 Tj
+0 -446.188 Td
+(4094 ) 21.8426 Tj
+0 -455.681 Td
+(4095 ) 21.8426 Tj
+0 -465.175 Td
+(4096 ) 21.8426 Tj
+0 -474.668 Td
+(4097 ) 21.8426 Tj
+0 -484.161 Td
+(4098 ) 21.8426 Tj
+0 -493.655 Td
+(4099 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 40) 34.9481 Tj
 Q
 Q
 Q
@@ -13828,7 +14771,10 @@ pdfEndPage
 %%Page: 48 48
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -13836,241 +14782,255 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 2) 21.07 Tj
-0 -3.92728 Td
-(4100 // Allocate a disk block.) 18.06 Tj
-0 -5.23637 Td
-(4101 static uint) 9.632 Tj
-0 -6.54546 Td
-(4102 balloc\(uint dev\)) 12.642 Tj
-0 -7.85455 Td
-(4103 {) 3.612 Tj
-0 -9.16364 Td
-(4104   int b;) 7.826 Tj
-0 -10.4727 Td
-(4105   struct buf *bp;) 13.244 Tj
-0 -11.7818 Td
-(4106   struct superblock *sb;) 17.458 Tj
-0 -13.0909 Td
-(4107   int bi = 0;) 10.836 Tj
-0 -14.4 Td
-(4108   int size;) 9.632 Tj
-0 -15.7091 Td
-(4109   int ninodes;) 11.438 Tj
-0 -17.0182 Td
-(4110   uchar m;) 9.03 Tj
-0 -18.3273 Td
-(4111 ) 3.01 Tj
-0 -19.6364 Td
-(4112   bp = bread\(dev, 1\);) 15.652 Tj
-0 -20.9455 Td
-(4113   sb = \(struct superblock*\) bp->data;) 25.284 Tj
-0 -22.2545 Td
-(4114   size = sb->size;) 13.846 Tj
-0 -23.5636 Td
-(4115   ninodes = sb->ninodes;) 17.458 Tj
-0 -24.8727 Td
-(4116 ) 3.01 Tj
-0 -26.1818 Td
-(4117   for\(b = 0; b < size; b++\) {) 20.468 Tj
-0 -27.4909 Td
-(4118     if\(b % BPB == 0\) {) 16.254 Tj
-0 -28.8 Td
-(4119       brelse\(bp\);) 13.244 Tj
-0 -30.1091 Td
-(4120       bp = bread\(dev, BBLOCK\(b, ninodes\)\);) 28.294 Tj
-0 -31.4182 Td
-(4121     }) 6.02 Tj
-0 -32.7273 Td
-(4122     bi = b % BPB;) 13.244 Tj
-0 -34.0364 Td
-(4123     m = 0x1 << \(bi % 8\);) 17.458 Tj
-0 -35.3454 Td
-(4124     if\(\(bp->data[bi/8] & m\) == 0\) {  // is block free?) 35.518 Tj
-0 -36.6545 Td
-(4125       break;) 10.234 Tj
-0 -37.9636 Td
-(4126     }) 6.02 Tj
-0 -39.2727 Td
-(4127   }) 4.816 Tj
-0 -40.5818 Td
-(4128   if\(b >= size\)) 12.04 Tj
-0 -41.8909 Td
-(4129     panic\("balloc: out of blocks"\);) 24.08 Tj
-0 -43.2 Td
-(4130 ) 3.01 Tj
-0 -44.5091 Td
-(4131   bp->data[bi/8] |= 0x1 << \(bi % 8\);) 24.682 Tj
-0 -45.8182 Td
-(4132   bwrite\(bp, BBLOCK\(b, ninodes\)\);  // mark it allocated on disk) 40.936 Tj
-0 -47.1272 Td
-(4133   brelse\(bp\);) 10.836 Tj
-0 -48.4363 Td
-(4134   return b;) 9.632 Tj
-0 -49.7454 Td
-(4135 }) 3.612 Tj
-0 -51.0545 Td
-(4136 ) 3.01 Tj
-0 -52.3636 Td
-(4137 ) 3.01 Tj
-0 -53.6727 Td
-(4138 ) 3.01 Tj
-0 -54.9818 Td
-(4139 ) 3.01 Tj
-0 -56.2909 Td
-(4140 ) 3.01 Tj
-0 -57.6 Td
-(4141 ) 3.01 Tj
-0 -58.9091 Td
-(4142 ) 3.01 Tj
-0 -60.2181 Td
-(4143 ) 3.01 Tj
-0 -61.5272 Td
-(4144 ) 3.01 Tj
-0 -62.8363 Td
-(4145 ) 3.01 Tj
-0 -64.1454 Td
-(4146 ) 3.01 Tj
-0 -65.4545 Td
-(4147 ) 3.01 Tj
-0 -66.7636 Td
-(4148 ) 3.01 Tj
-0 -68.0727 Td
-(4149 ) 3.01 Tj
-0 -72 Td
-(Sheet 41) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/fs.c  Page 10) 157.267 Tj
+0 -28.4801 Td
+(4100 // Read data from inode.) 126.687 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.005 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.687 Tj
+0 -104.427 Td
+(4108     if\(ip->major < 0 || ip->major >= NDEV || !devsw[ip->m\
+ajor].read\)) 318.902 Tj
+0 -113.92 Td
+(4109       return -1;) 91.7388 Tj
+0 -123.414 Td
+(4110     return devsw[ip->major].read\(ip, dst, n\);) 218.426 Tj
+0 -132.907 Td
+(4111   }) 34.9481 Tj
+0 -142.4 Td
+(4112 ) 21.8426 Tj
+0 -151.894 Td
+(4113   if\(off > ip->size || off + n < off\)) 183.478 Tj
+0 -161.387 Td
+(4114     return -1;) 83.0018 Tj
+0 -170.88 Td
+(4115   if\(off + n > ip->size\)) 126.687 Tj
+0 -180.374 Td
+(4116     n = ip->size - off;) 122.318 Tj
+0 -189.867 Td
+(4117 ) 21.8426 Tj
+0 -199.361 Td
+(4118   for\(tot=0; tot<n; tot+=m, off+=m, dst+=m\){) 214.057 Tj
+0 -208.854 Td
+(4119     bp = bread\(ip->dev, bmap\(ip, off/BSIZE, 0\)\);) 231.531 Tj
+0 -218.347 Td
+(4120     m = min\(n - tot, BSIZE - off%BSIZE\);) 196.583 Tj
+0 -227.841 Td
+(4121     memmove\(dst, bp->data + off%BSIZE, m\);) 205.32 Tj
+0 -237.334 Td
+(4122     brelse\(bp\);) 87.3703 Tj
+0 -246.827 Td
+(4123   }) 34.9481 Tj
+0 -256.321 Td
+(4124   return n;) 69.8962 Tj
+0 -265.814 Td
+(4125 }) 26.2111 Tj
+0 -275.307 Td
+(4126 ) 21.8426 Tj
+0 -284.801 Td
+(4127 ) 21.8426 Tj
+0 -294.294 Td
+(4128 ) 21.8426 Tj
+0 -303.788 Td
+(4129 ) 21.8426 Tj
+0 -313.281 Td
+(4130 ) 21.8426 Tj
+0 -322.774 Td
+(4131 ) 21.8426 Tj
+0 -332.268 Td
+(4132 ) 21.8426 Tj
+0 -341.761 Td
+(4133 ) 21.8426 Tj
+0 -351.254 Td
+(4134 ) 21.8426 Tj
+0 -360.748 Td
+(4135 ) 21.8426 Tj
+0 -370.241 Td
+(4136 ) 21.8426 Tj
+0 -379.734 Td
+(4137 ) 21.8426 Tj
+0 -389.228 Td
+(4138 ) 21.8426 Tj
+0 -398.721 Td
+(4139 ) 21.8426 Tj
+0 -408.214 Td
+(4140 ) 21.8426 Tj
+0 -417.708 Td
+(4141 ) 21.8426 Tj
+0 -427.201 Td
+(4142 ) 21.8426 Tj
+0 -436.695 Td
+(4143 ) 21.8426 Tj
+0 -446.188 Td
+(4144 ) 21.8426 Tj
+0 -455.681 Td
+(4145 ) 21.8426 Tj
+0 -465.175 Td
+(4146 ) 21.8426 Tj
+0 -474.668 Td
+(4147 ) 21.8426 Tj
+0 -484.161 Td
+(4148 ) 21.8426 Tj
+0 -493.655 Td
+(4149 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 3) 21.07 Tj
-0 -3.92728 Td
-(4150 // Free a disk block.) 15.652 Tj
-0 -5.23637 Td
-(4151 static void) 9.632 Tj
-0 -6.54546 Td
-(4152 bfree\(int dev, uint b\)) 16.254 Tj
-0 -7.85455 Td
-(4153 {) 3.612 Tj
-0 -9.16364 Td
-(4154   struct buf *bp;) 13.244 Tj
-0 -10.4727 Td
-(4155   struct superblock *sb;) 17.458 Tj
-0 -11.7818 Td
-(4156   int bi;) 8.428 Tj
-0 -13.0909 Td
-(4157   int ninodes;) 11.438 Tj
-0 -14.4 Td
-(4158   uchar m;) 9.03 Tj
-0 -15.7091 Td
-(4159 ) 3.01 Tj
-0 -17.0182 Td
-(4160   bp = bread\(dev, 1\);) 15.652 Tj
-0 -18.3273 Td
-(4161   sb = \(struct superblock*\) bp->data;) 25.284 Tj
-0 -19.6364 Td
-(4162   ninodes = sb->ninodes;) 17.458 Tj
-0 -20.9455 Td
-(4163   brelse\(bp\);) 10.836 Tj
-0 -22.2545 Td
-(4164 ) 3.01 Tj
-0 -23.5636 Td
-(4165   bp = bread\(dev, b\);) 15.652 Tj
-0 -24.8727 Td
-(4166   memset\(bp->data, 0, BSIZE\);) 20.468 Tj
-0 -26.1818 Td
-(4167   bwrite\(bp, b\);) 12.642 Tj
-0 -27.4909 Td
-(4168   brelse\(bp\);) 10.836 Tj
-0 -28.8 Td
-(4169 ) 3.01 Tj
-0 -30.1091 Td
-(4170   bp = bread\(dev, BBLOCK\(b, ninodes\)\);) 25.886 Tj
-0 -31.4182 Td
-(4171   bi = b % BPB;) 12.04 Tj
-0 -32.7273 Td
-(4172   m = ~\(0x1 << \(bi %8\)\);) 17.458 Tj
-0 -34.0364 Td
-(4173   bp->data[bi/8] &= m;) 16.254 Tj
-0 -35.3454 Td
-(4174   bwrite\(bp, BBLOCK\(b, ninodes\)\);  // mark it free on disk) 37.926 Tj
-0 -36.6545 Td
-(4175   brelse\(bp\);) 10.836 Tj
-0 -37.9636 Td
-(4176 }) 3.612 Tj
-0 -39.2727 Td
-(4177 ) 3.01 Tj
-0 -40.5818 Td
-(4178 // Find the inode with number inum on device dev) 31.906 Tj
-0 -41.8909 Td
-(4179 // and return an in-memory copy.  Loads the inode) 32.508 Tj
-0 -43.2 Td
-(4180 // from disk into the in-core table if necessary.) 32.508 Tj
-0 -44.5091 Td
-(4181 // The returned inode has busy set and has its ref count incremented.) 44.548 Tj
-0 -45.8182 Td
-(4182 // Caller must iput the return value when done with it.) 36.12 Tj
-0 -47.1272 Td
-(4183 struct inode*) 10.836 Tj
-0 -48.4363 Td
-(4184 iget\(uint dev, uint inum\)) 18.06 Tj
-0 -49.7454 Td
-(4185 {) 3.612 Tj
-0 -51.0545 Td
-(4186   struct inode *ip, *nip;) 18.06 Tj
-0 -52.3636 Td
-(4187   struct dinode *dip;) 15.652 Tj
-0 -53.6727 Td
-(4188   struct buf *bp;) 13.244 Tj
-0 -54.9818 Td
-(4189 ) 3.01 Tj
-0 -56.2909 Td
-(4190   acquire\(&inode_table_lock\);) 20.468 Tj
-0 -57.6 Td
-(4191 ) 3.01 Tj
-0 -58.9091 Td
-(4192  loop:) 6.622 Tj
-0 -60.2181 Td
-(4193   nip = 0;) 9.03 Tj
-0 -61.5272 Td
-(4194   for\(ip = &inode[0]; ip < &inode[NINODE]; ip++\){) 32.508 Tj
-0 -62.8363 Td
-(4195     if\(ip->ref > 0 && ip->dev == dev && ip->inum == inum\){) 37.926 Tj
-0 -64.1454 Td
-(4196       if\(ip->busy\){) 14.448 Tj
-0 -65.4545 Td
-(4197         sleep\(ip, &inode_table_lock\);) 25.284 Tj
-0 -66.7636 Td
-(4198         // Since we droped inode_table_lock, ip might have been reused) 45.15 Tj
-0 -68.0727 Td
-(4199         // for some other inode entirely.  Must start the scan over,) 43.946 Tj
-0 -72 Td
-(Sheet 41) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/fs.c  Page 11) 157.267 Tj
+0 -28.4801 Td
+(4150 // Write data to inode.) 122.318 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.374 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.687 Tj
+0 -104.427 Td
+(4158     if\(ip->major < 0 || ip->major >= NDEV || !devsw[ip->m\
+ajor].write\)) 323.27 Tj
+0 -113.92 Td
+(4159       return -1;) 91.7388 Tj
+0 -123.414 Td
+(4160     return devsw[ip->major].write\(ip, src, n\);) 222.794 Tj
+0 -132.907 Td
+(4161   }) 34.9481 Tj
+0 -142.4 Td
+(4162 ) 21.8426 Tj
+0 -151.894 Td
+(4163   if\(off + n < off\)) 104.844 Tj
+0 -161.387 Td
+(4164     return -1;) 83.0018 Tj
+0 -170.88 Td
+(4165   if\(off + n > MAXFILE*BSIZE\)) 148.529 Tj
+0 -180.374 Td
+(4166     n = MAXFILE*BSIZE - off;) 144.161 Tj
+0 -189.867 Td
+(4167 ) 21.8426 Tj
+0 -199.361 Td
+(4168   for\(tot=0; tot<n; tot+=m, off+=m, src+=m\){) 214.057 Tj
+0 -208.854 Td
+(4169     bp = bread\(ip->dev, bmap\(ip, off/BSIZE, 1\)\);) 231.531 Tj
+0 -218.347 Td
+(4170     m = min\(n - tot, BSIZE - off%BSIZE\);) 196.583 Tj
+0 -227.841 Td
+(4171     memmove\(bp->data + off%BSIZE, src, m\);) 205.32 Tj
+0 -237.334 Td
+(4172     bwrite\(bp\);) 87.3703 Tj
+0 -246.827 Td
+(4173     brelse\(bp\);) 87.3703 Tj
+0 -256.321 Td
+(4174   }) 34.9481 Tj
+0 -265.814 Td
+(4175 ) 21.8426 Tj
+0 -275.307 Td
+(4176   if\(n > 0 && off > ip->size\){) 152.898 Tj
+0 -284.801 Td
+(4177     ip->size = off;) 104.844 Tj
+0 -294.294 Td
+(4178     iupdate\(ip\);) 91.7388 Tj
+0 -303.788 Td
+(4179   }) 34.9481 Tj
+0 -313.281 Td
+(4180   return n;) 69.8962 Tj
+0 -322.774 Td
+(4181 }) 26.2111 Tj
+0 -332.268 Td
+(4182 ) 21.8426 Tj
+0 -341.761 Td
+(4183 ) 21.8426 Tj
+0 -351.254 Td
+(4184 ) 21.8426 Tj
+0 -360.748 Td
+(4185 ) 21.8426 Tj
+0 -370.241 Td
+(4186 ) 21.8426 Tj
+0 -379.734 Td
+(4187 ) 21.8426 Tj
+0 -389.228 Td
+(4188 ) 21.8426 Tj
+0 -398.721 Td
+(4189 ) 21.8426 Tj
+0 -408.214 Td
+(4190 ) 21.8426 Tj
+0 -417.708 Td
+(4191 ) 21.8426 Tj
+0 -427.201 Td
+(4192 ) 21.8426 Tj
+0 -436.695 Td
+(4193 ) 21.8426 Tj
+0 -446.188 Td
+(4194 ) 21.8426 Tj
+0 -455.681 Td
+(4195 ) 21.8426 Tj
+0 -465.175 Td
+(4196 ) 21.8426 Tj
+0 -474.668 Td
+(4197 ) 21.8426 Tj
+0 -484.161 Td
+(4198 ) 21.8426 Tj
+0 -493.655 Td
+(4199 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 41) 34.9481 Tj
 Q
 Q
 Q
@@ -14082,6 +15042,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -14089,241 +15052,256 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 4) 21.07 Tj
-0 -3.92728 Td
-(4200         // and hopefully this time we will find the inode we want) 42.14 Tj
-0 -5.23637 Td
-(4201         // and it will not be busy.) 24.08 Tj
-0 -6.54546 Td
-(4202         goto loop;) 13.846 Tj
-0 -7.85455 Td
-(4203       }) 7.224 Tj
-0 -9.16364 Td
-(4204       ip->ref++;) 12.642 Tj
-0 -10.4727 Td
-(4205       ip->busy = 1;) 14.448 Tj
-0 -11.7818 Td
-(4206       release\(&inode_table_lock\);) 22.876 Tj
-0 -13.0909 Td
-(4207       return ip;) 12.642 Tj
-0 -14.4 Td
-(4208     }) 6.02 Tj
-0 -15.7091 Td
-(4209     if\(nip == 0 && ip->ref == 0\)) 22.274 Tj
-0 -17.0182 Td
-(4210       nip = ip;) 12.04 Tj
-0 -18.3273 Td
-(4211   }) 4.816 Tj
-0 -19.6364 Td
-(4212 ) 3.01 Tj
-0 -20.9455 Td
-(4213   if\(nip == 0\)) 11.438 Tj
-0 -22.2545 Td
-(4214     panic\("out of inodes"\);) 19.264 Tj
-0 -23.5636 Td
-(4215 ) 3.01 Tj
-0 -24.8727 Td
-(4216   nip->dev = dev;) 13.244 Tj
-0 -26.1818 Td
-(4217   nip->inum = inum;) 14.448 Tj
-0 -27.4909 Td
-(4218   nip->ref = 1;) 12.04 Tj
-0 -28.8 Td
-(4219   nip->busy = 1;) 12.642 Tj
-0 -30.1091 Td
-(4220 ) 3.01 Tj
-0 -31.4182 Td
-(4221   release\(&inode_table_lock\);) 20.468 Tj
-0 -32.7273 Td
-(4222 ) 3.01 Tj
-0 -34.0364 Td
-(4223   bp = bread\(dev, IBLOCK\(inum\)\);) 22.274 Tj
-0 -35.3454 Td
-(4224   dip = &\(\(struct dinode*\)\(bp->data\)\)[inum % IPB];) 33.11 Tj
-0 -36.6545 Td
-(4225   nip->type = dip->type;) 17.458 Tj
-0 -37.9636 Td
-(4226   nip->major = dip->major;) 18.662 Tj
-0 -39.2727 Td
-(4227   nip->minor = dip->minor;) 18.662 Tj
-0 -40.5818 Td
-(4228   nip->nlink = dip->nlink;) 18.662 Tj
-0 -41.8909 Td
-(4229   nip->size = dip->size;) 17.458 Tj
-0 -43.2 Td
-(4230   memmove\(nip->addrs, dip->addrs, sizeof\(nip->addrs\)\);) 35.518 Tj
-0 -44.5091 Td
-(4231   brelse\(bp\);) 10.836 Tj
-0 -45.8182 Td
-(4232 ) 3.01 Tj
-0 -47.1272 Td
-(4233   return nip;) 10.836 Tj
-0 -48.4363 Td
-(4234 }) 3.612 Tj
-0 -49.7454 Td
-(4235 ) 3.01 Tj
-0 -51.0545 Td
-(4236 ) 3.01 Tj
-0 -52.3636 Td
-(4237 ) 3.01 Tj
-0 -53.6727 Td
-(4238 ) 3.01 Tj
-0 -54.9818 Td
-(4239 ) 3.01 Tj
-0 -56.2909 Td
-(4240 ) 3.01 Tj
-0 -57.6 Td
-(4241 ) 3.01 Tj
-0 -58.9091 Td
-(4242 ) 3.01 Tj
-0 -60.2181 Td
-(4243 ) 3.01 Tj
-0 -61.5272 Td
-(4244 ) 3.01 Tj
-0 -62.8363 Td
-(4245 ) 3.01 Tj
-0 -64.1454 Td
-(4246 ) 3.01 Tj
-0 -65.4545 Td
-(4247 ) 3.01 Tj
-0 -66.7636 Td
-(4248 ) 3.01 Tj
-0 -68.0727 Td
-(4249 ) 3.01 Tj
-0 -72 Td
-(Sheet 42) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/fs.c  Page 12) 157.267 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.478 Tj
+0 -66.4535 Td
+(4204 {) 26.2111 Tj
+0 -75.9469 Td
+(4205   return strncmp\(s, t, DIRSIZ\);) 157.267 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.426 Tj
+0 -113.92 Td
+(4209 // If found, set *poff to byte offset of entry.) 227.163 Tj
+0 -123.414 Td
+(4210 // Caller must have already locked dp.) 187.846 Tj
+0 -132.907 Td
+(4211 struct inode*) 78.6333 Tj
+0 -142.4 Td
+(4212 dirlookup\(struct inode *dp, char *name, uint *poff\)) 244.637 Tj
+0 -151.894 Td
+(4213 {) 26.2111 Tj
+0 -161.387 Td
+(4214   uint off, inum;) 96.1073 Tj
+0 -170.88 Td
+(4215   struct buf *bp;) 96.1073 Tj
+0 -180.374 Td
+(4216   struct dirent *de;) 109.213 Tj
+0 -189.867 Td
+(4217 ) 21.8426 Tj
+0 -199.361 Td
+(4218   if\(dp->type != T_DIR\)) 122.318 Tj
+0 -208.854 Td
+(4219     panic\("dirlookup not DIR"\);) 157.267 Tj
+0 -218.347 Td
+(4220 ) 21.8426 Tj
+0 -227.841 Td
+(4221   for\(off = 0; off < dp->size; off += BSIZE\){) 218.426 Tj
+0 -237.334 Td
+(4222     bp = bread\(dp->dev, bmap\(dp, off / BSIZE, 0\)\);) 240.268 Tj
+0 -246.827 Td
+(4223     for\(de = \(struct dirent*\)bp->data;) 187.846 Tj
+0 -256.321 Td
+(4224         de < \(struct dirent*\)\(bp->data + BSIZE\);) 231.531 Tj
+0 -265.814 Td
+(4225         de++\){) 83.0018 Tj
+0 -275.307 Td
+(4226       if\(de->inum == 0\)) 122.318 Tj
+0 -284.801 Td
+(4227         continue;) 96.1073 Tj
+0 -294.294 Td
+(4228       if\(namecmp\(name, de->name\) == 0\){) 192.215 Tj
+0 -303.788 Td
+(4229         // entry matches path element) 183.478 Tj
+0 -313.281 Td
+(4230         if\(poff\)) 91.7388 Tj
+0 -322.774 Td
+(4231           *poff = off + \(uchar*\)de - bp->data;) 222.794 Tj
+0 -332.268 Td
+(4232         inum = de->inum;) 126.687 Tj
+0 -341.761 Td
+(4233         brelse\(bp\);) 104.844 Tj
+0 -351.254 Td
+(4234         return iget\(dp->dev, inum\);) 174.741 Tj
+0 -360.748 Td
+(4235       }) 52.4222 Tj
+0 -370.241 Td
+(4236     }) 43.6851 Tj
+0 -379.734 Td
+(4237     brelse\(bp\);) 87.3703 Tj
+0 -389.228 Td
+(4238   }) 34.9481 Tj
+0 -398.721 Td
+(4239   return 0;) 69.8962 Tj
+0 -408.214 Td
+(4240 }) 26.2111 Tj
+0 -417.708 Td
+(4241 ) 21.8426 Tj
+0 -427.201 Td
+(4242 ) 21.8426 Tj
+0 -436.695 Td
+(4243 ) 21.8426 Tj
+0 -446.188 Td
+(4244 ) 21.8426 Tj
+0 -455.681 Td
+(4245 ) 21.8426 Tj
+0 -465.175 Td
+(4246 ) 21.8426 Tj
+0 -474.668 Td
+(4247 ) 21.8426 Tj
+0 -484.161 Td
+(4248 ) 21.8426 Tj
+0 -493.655 Td
+(4249 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 5) 21.07 Tj
-0 -3.92728 Td
-(4250 // Copy inode in memory, which has changed, to disk.) 34.314 Tj
-0 -5.23637 Td
-(4251 // Caller must have locked ip.) 21.07 Tj
-0 -6.54546 Td
-(4252 void) 5.418 Tj
-0 -7.85455 Td
-(4253 iupdate\(struct inode *ip\)) 18.06 Tj
-0 -9.16364 Td
-(4254 {) 3.612 Tj
-0 -10.4727 Td
-(4255   struct buf *bp;) 13.244 Tj
-0 -11.7818 Td
-(4256   struct dinode *dip;) 15.652 Tj
-0 -13.0909 Td
-(4257 ) 3.01 Tj
-0 -14.4 Td
-(4258   bp = bread\(ip->dev, IBLOCK\(ip->inum\)\);) 27.09 Tj
-0 -15.7091 Td
-(4259   dip = &\(\(struct dinode*\)\(bp->data\)\)[ip->inum % IPB];) 35.518 Tj
-0 -17.0182 Td
-(4260   dip->type = ip->type;) 16.856 Tj
-0 -18.3273 Td
-(4261   dip->major = ip->major;) 18.06 Tj
-0 -19.6364 Td
-(4262   dip->minor = ip->minor;) 18.06 Tj
-0 -20.9455 Td
-(4263   dip->nlink = ip->nlink;) 18.06 Tj
-0 -22.2545 Td
-(4264   dip->size = ip->size;) 16.856 Tj
-0 -23.5636 Td
-(4265   memmove\(dip->addrs, ip->addrs, sizeof\(ip->addrs\)\);) 34.314 Tj
-0 -24.8727 Td
-(4266   bwrite\(bp, IBLOCK\(ip->inum\)\);   // mark it allocated on the disk) 42.742 Tj
-0 -26.1818 Td
-(4267   brelse\(bp\);) 10.836 Tj
-0 -27.4909 Td
-(4268 }) 3.612 Tj
-0 -28.8 Td
-(4269 ) 3.01 Tj
-0 -30.1091 Td
-(4270 // Allocate a new inode with the given type) 28.896 Tj
-0 -31.4182 Td
-(4271 // from the file system on device dev.) 25.886 Tj
-0 -32.7273 Td
-(4272 struct inode*) 10.836 Tj
-0 -34.0364 Td
-(4273 ialloc\(uint dev, short type\)) 19.866 Tj
-0 -35.3454 Td
-(4274 {) 3.612 Tj
-0 -36.6545 Td
-(4275   struct inode *ip;) 14.448 Tj
-0 -37.9636 Td
-(4276   struct dinode *dip = 0;) 18.06 Tj
-0 -39.2727 Td
-(4277   struct superblock *sb;) 17.458 Tj
-0 -40.5818 Td
-(4278   int ninodes;) 11.438 Tj
-0 -41.8909 Td
-(4279   int inum;) 9.632 Tj
-0 -43.2 Td
-(4280   struct buf *bp;) 13.244 Tj
-0 -44.5091 Td
-(4281 ) 3.01 Tj
-0 -45.8182 Td
-(4282   bp = bread\(dev, 1\);) 15.652 Tj
-0 -47.1272 Td
-(4283   sb = \(struct superblock*\) bp->data;) 25.284 Tj
-0 -48.4363 Td
-(4284   ninodes = sb->ninodes;) 17.458 Tj
-0 -49.7454 Td
-(4285   brelse\(bp\);) 10.836 Tj
-0 -51.0545 Td
-(4286 ) 3.01 Tj
-0 -52.3636 Td
-(4287   for\(inum = 1; inum < ninodes; inum++\) {  // loop over inode blocks) 43.946 Tj
-0 -53.6727 Td
-(4288     bp = bread\(dev, IBLOCK\(inum\)\);) 23.478 Tj
-0 -54.9818 Td
-(4289     dip = &\(\(struct dinode*\)\(bp->data\)\)[inum % IPB];) 34.314 Tj
-0 -56.2909 Td
-(4290     if\(dip->type == 0\) {  // a free inode) 27.692 Tj
-0 -57.6 Td
-(4291       break;) 10.234 Tj
-0 -58.9091 Td
-(4292     }) 6.02 Tj
-0 -60.2181 Td
-(4293     brelse\(bp\);) 12.04 Tj
-0 -61.5272 Td
-(4294   }) 4.816 Tj
-0 -62.8363 Td
-(4295 ) 3.01 Tj
-0 -64.1454 Td
-(4296   if\(inum >= ninodes\)) 15.652 Tj
-0 -65.4545 Td
-(4297     panic\("ialloc: no inodes left"\);) 24.682 Tj
-0 -66.7636 Td
-(4298 ) 3.01 Tj
-0 -68.0727 Td
-(4299 ) 3.01 Tj
-0 -72 Td
-(Sheet 42) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/fs.c  Page 13) 157.267 Tj
+0 -28.4801 Td
+(4250 // Write a new directory entry \(name, ino\) into the dire\
+ctory dp.) 305.796 Tj
+0 -37.9735 Td
+(4251 int) 34.9481 Tj
+0 -47.4668 Td
+(4252 dirlink\(struct inode *dp, char *name, uint ino\)) 227.163 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.844 Tj
+0 -85.4403 Td
+(4256   struct inode *ip;) 104.844 Tj
+0 -94.9336 Td
+(4257 ) 21.8426 Tj
+0 -104.427 Td
+(4258   // Check that name is not present.) 179.109 Tj
+0 -113.92 Td
+(4259   if\(\(ip = dirlookup\(dp, name, 0\)\) != 0\){) 200.952 Tj
+0 -123.414 Td
+(4260     iput\(ip\);) 78.6333 Tj
+0 -132.907 Td
+(4261     return -1;) 83.0018 Tj
+0 -142.4 Td
+(4262   }) 34.9481 Tj
+0 -151.894 Td
+(4263 ) 21.8426 Tj
+0 -161.387 Td
+(4264   // Look for an empty dirent.) 152.898 Tj
+0 -170.88 Td
+(4265   for\(off = 0; off < dp->size; off += sizeof\(de\)\){) 240.268 Tj
+0 -180.374 Td
+(4266     if\(readi\(dp, \(char*\)&de, off, sizeof\(de\)\) != si\
+zeof\(de\)\)) 283.953 Tj
+0 -189.867 Td
+(4267       panic\("dirlink read"\);) 144.161 Tj
+0 -199.361 Td
+(4268     if\(de.inum == 0\)) 109.213 Tj
+0 -208.854 Td
+(4269       break;) 74.2647 Tj
+0 -218.347 Td
+(4270   }) 34.9481 Tj
+0 -227.841 Td
+(4271 ) 21.8426 Tj
+0 -237.334 Td
+(4272   strncpy\(de.name, name, DIRSIZ\);) 166.004 Tj
+0 -246.827 Td
+(4273   de.inum = ino;) 91.7388 Tj
+0 -256.321 Td
+(4274   if\(writei\(dp, \(char*\)&de, off, sizeof\(de\)\) != siz\
+eof\(de\)\)) 279.585 Tj
+0 -265.814 Td
+(4275     panic\("dirlink"\);) 113.581 Tj
+0 -275.307 Td
+(4276 ) 21.8426 Tj
+0 -284.801 Td
+(4277   return 0;) 69.8962 Tj
+0 -294.294 Td
+(4278 }) 26.2111 Tj
+0 -303.788 Td
+(4279 ) 21.8426 Tj
+0 -313.281 Td
+(4280 ) 21.8426 Tj
+0 -322.774 Td
+(4281 ) 21.8426 Tj
+0 -332.268 Td
+(4282 ) 21.8426 Tj
+0 -341.761 Td
+(4283 ) 21.8426 Tj
+0 -351.254 Td
+(4284 ) 21.8426 Tj
+0 -360.748 Td
+(4285 ) 21.8426 Tj
+0 -370.241 Td
+(4286 ) 21.8426 Tj
+0 -379.734 Td
+(4287 ) 21.8426 Tj
+0 -389.228 Td
+(4288 ) 21.8426 Tj
+0 -398.721 Td
+(4289 ) 21.8426 Tj
+0 -408.214 Td
+(4290 ) 21.8426 Tj
+0 -417.708 Td
+(4291 ) 21.8426 Tj
+0 -427.201 Td
+(4292 ) 21.8426 Tj
+0 -436.695 Td
+(4293 ) 21.8426 Tj
+0 -446.188 Td
+(4294 ) 21.8426 Tj
+0 -455.681 Td
+(4295 ) 21.8426 Tj
+0 -465.175 Td
+(4296 ) 21.8426 Tj
+0 -474.668 Td
+(4297 ) 21.8426 Tj
+0 -484.161 Td
+(4298 ) 21.8426 Tj
+0 -493.655 Td
+(4299 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 42) 34.9481 Tj
 Q
 Q
 Q
@@ -14334,7 +15312,10 @@ pdfEndPage
 %%Page: 50 50
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -14342,241 +15323,259 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 6) 21.07 Tj
-0 -3.92728 Td
-(4300   memset\(dip, 0, sizeof\(*dip\)\);) 21.672 Tj
-0 -5.23637 Td
-(4301   dip->type = type;) 14.448 Tj
-0 -6.54546 Td
-(4302   bwrite\(bp, IBLOCK\(inum\)\);   // mark it allocated on the disk) 40.334 Tj
-0 -7.85455 Td
-(4303   brelse\(bp\);) 10.836 Tj
-0 -9.16364 Td
-(4304   ip = iget\(dev, inum\);) 16.856 Tj
-0 -10.4727 Td
-(4305   return ip;) 10.234 Tj
-0 -11.7818 Td
-(4306 }) 3.612 Tj
-0 -13.0909 Td
-(4307 ) 3.01 Tj
-0 -14.4 Td
-(4308 // Free the given inode from its file system.) 30.1 Tj
-0 -15.7091 Td
-(4309 static void) 9.632 Tj
-0 -17.0182 Td
-(4310 ifree\(struct inode *ip\)) 16.856 Tj
-0 -18.3273 Td
-(4311 {) 3.612 Tj
-0 -19.6364 Td
-(4312   ip->type = 0;) 12.04 Tj
-0 -20.9455 Td
-(4313   iupdate\(ip\);) 11.438 Tj
-0 -22.2545 Td
-(4314 }) 3.612 Tj
-0 -23.5636 Td
-(4315 ) 3.01 Tj
-0 -24.8727 Td
-(4316 // Lock the given inode \(wait for it to be not busy,) 34.314 Tj
-0 -26.1818 Td
-(4317 // and then ip->busy\).) 16.254 Tj
-0 -27.4909 Td
-(4318 // Caller must already hold a reference to ip.) 30.702 Tj
-0 -28.8 Td
-(4319 // Otherwise, if all the references to ip go away,) 33.11 Tj
-0 -30.1091 Td
-(4320 // it might be reused underfoot.) 22.274 Tj
-0 -31.4182 Td
-(4321 void) 5.418 Tj
-0 -32.7273 Td
-(4322 ilock\(struct inode *ip\)) 16.856 Tj
-0 -34.0364 Td
-(4323 {) 3.612 Tj
-0 -35.3454 Td
-(4324   if\(ip->ref < 1\)) 13.244 Tj
-0 -36.6545 Td
-(4325     panic\("ilock"\);) 14.448 Tj
-0 -37.9636 Td
-(4326 ) 3.01 Tj
-0 -39.2727 Td
-(4327   acquire\(&inode_table_lock\);) 20.468 Tj
-0 -40.5818 Td
-(4328 ) 3.01 Tj
-0 -41.8909 Td
-(4329   while\(ip->busy\)) 13.244 Tj
-0 -43.2 Td
-(4330     sleep\(ip, &inode_table_lock\);) 22.876 Tj
-0 -44.5091 Td
-(4331   ip->busy = 1;) 12.04 Tj
-0 -45.8182 Td
-(4332 ) 3.01 Tj
-0 -47.1272 Td
-(4333   release\(&inode_table_lock\);) 20.468 Tj
-0 -48.4363 Td
-(4334 }) 3.612 Tj
-0 -49.7454 Td
-(4335 ) 3.01 Tj
-0 -51.0545 Td
-(4336 ) 3.01 Tj
-0 -52.3636 Td
-(4337 ) 3.01 Tj
-0 -53.6727 Td
-(4338 ) 3.01 Tj
-0 -54.9818 Td
-(4339 ) 3.01 Tj
-0 -56.2909 Td
-(4340 ) 3.01 Tj
-0 -57.6 Td
-(4341 ) 3.01 Tj
-0 -58.9091 Td
-(4342 ) 3.01 Tj
-0 -60.2181 Td
-(4343 ) 3.01 Tj
-0 -61.5272 Td
-(4344 ) 3.01 Tj
-0 -62.8363 Td
-(4345 ) 3.01 Tj
-0 -64.1454 Td
-(4346 ) 3.01 Tj
-0 -65.4545 Td
-(4347 ) 3.01 Tj
-0 -66.7636 Td
-(4348 ) 3.01 Tj
-0 -68.0727 Td
-(4349 ) 3.01 Tj
-0 -72 Td
-(Sheet 43) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/fs.c  Page 14) 157.267 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.268 Tj
+0 -56.9602 Td
+(4303 // Return a pointer to the element following the copied on\
+e.) 283.953 Tj
+0 -66.4535 Td
+(4304 // The returned path has no leading slashes,) 214.057 Tj
+0 -75.9469 Td
+(4305 // so the caller can check *path=='\\0' to see if the name\
+ is the last one.) 345.113 Tj
+0 -85.4403 Td
+(4306 // If no name to remove, return 0.) 170.372 Tj
+0 -94.9336 Td
+(4307 //) 30.5796 Tj
+0 -104.427 Td
+(4308 // Examples:) 74.2647 Tj
+0 -113.92 Td
+(4309 //   skipelem\("a/bb/c", name\) = "bb/c", setting name = "\
+a") 275.216 Tj
+0 -123.414 Td
+(4310 //   skipelem\("///a//bb", name\) = "bb", setting name = "\
+a") 275.216 Tj
+0 -132.907 Td
+(4311 //   skipelem\("", name\) = skipelem\("////", name\) = 0) 249.005 Tj
+0 -142.4 Td
+(4312 //) 30.5796 Tj
+0 -151.894 Td
+(4313 static char*) 74.2647 Tj
+0 -161.387 Td
+(4314 skipelem\(char *path, char *name\)) 161.635 Tj
+0 -170.88 Td
+(4315 {) 26.2111 Tj
+0 -180.374 Td
+(4316   char *s;) 65.5277 Tj
+0 -189.867 Td
+(4317   int len;) 65.5277 Tj
+0 -199.361 Td
+(4318 ) 21.8426 Tj
+0 -208.854 Td
+(4319   while\(*path == '/'\)) 113.581 Tj
+0 -218.347 Td
+(4320     path++;) 69.8962 Tj
+0 -227.841 Td
+(4321   if\(*path == 0\)) 91.7388 Tj
+0 -237.334 Td
+(4322     return 0;) 78.6333 Tj
+0 -246.827 Td
+(4323   s = path;) 69.8962 Tj
+0 -256.321 Td
+(4324   while\(*path != '/' && *path != 0\)) 174.741 Tj
+0 -265.814 Td
+(4325     path++;) 69.8962 Tj
+0 -275.307 Td
+(4326   len = path - s;) 96.1073 Tj
+0 -284.801 Td
+(4327   if\(len >= DIRSIZ\)) 104.844 Tj
+0 -294.294 Td
+(4328     memmove\(name, s, DIRSIZ\);) 148.529 Tj
+0 -303.788 Td
+(4329   else {) 56.7907 Tj
+0 -313.281 Td
+(4330     memmove\(name, s, len\);) 135.424 Tj
+0 -322.774 Td
+(4331     name[len] = 0;) 100.476 Tj
+0 -332.268 Td
+(4332   }) 34.9481 Tj
+0 -341.761 Td
+(4333   while\(*path == '/'\)) 113.581 Tj
+0 -351.254 Td
+(4334     path++;) 69.8962 Tj
+0 -360.748 Td
+(4335   return path;) 83.0018 Tj
+0 -370.241 Td
+(4336 }) 26.2111 Tj
+0 -379.734 Td
+(4337 ) 21.8426 Tj
+0 -389.228 Td
+(4338 ) 21.8426 Tj
+0 -398.721 Td
+(4339 ) 21.8426 Tj
+0 -408.214 Td
+(4340 ) 21.8426 Tj
+0 -417.708 Td
+(4341 ) 21.8426 Tj
+0 -427.201 Td
+(4342 ) 21.8426 Tj
+0 -436.695 Td
+(4343 ) 21.8426 Tj
+0 -446.188 Td
+(4344 ) 21.8426 Tj
+0 -455.681 Td
+(4345 ) 21.8426 Tj
+0 -465.175 Td
+(4346 ) 21.8426 Tj
+0 -474.668 Td
+(4347 ) 21.8426 Tj
+0 -484.161 Td
+(4348 ) 21.8426 Tj
+0 -493.655 Td
+(4349 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 7) 21.07 Tj
-0 -3.92728 Td
-(4350 // Caller holds reference to ip and has locked it.) 33.11 Tj
-0 -5.23637 Td
-(4351 // Caller no longer needs to examine / change it.) 32.508 Tj
-0 -6.54546 Td
-(4352 // Unlock it, but keep the reference.) 25.284 Tj
-0 -7.85455 Td
-(4353 void) 5.418 Tj
-0 -9.16364 Td
-(4354 iunlock\(struct inode *ip\)) 18.06 Tj
-0 -10.4727 Td
-(4355 {) 3.612 Tj
-0 -11.7818 Td
-(4356   if\(ip->busy != 1 || ip->ref < 1\)) 23.478 Tj
-0 -13.0909 Td
-(4357     panic\("iunlock"\);) 15.652 Tj
-0 -14.4 Td
-(4358 ) 3.01 Tj
-0 -15.7091 Td
-(4359   acquire\(&inode_table_lock\);) 20.468 Tj
-0 -17.0182 Td
-(4360 ) 3.01 Tj
-0 -18.3273 Td
-(4361   ip->busy = 0;) 12.04 Tj
-0 -19.6364 Td
-(4362   wakeup\(ip\);) 10.836 Tj
-0 -20.9455 Td
-(4363 ) 3.01 Tj
-0 -22.2545 Td
-(4364   release\(&inode_table_lock\);) 20.468 Tj
-0 -23.5636 Td
-(4365 }) 3.612 Tj
-0 -24.8727 Td
-(4366 ) 3.01 Tj
-0 -26.1818 Td
-(4367 // Return the disk block address of the nth block in inode ip.) 40.334 Tj
-0 -27.4909 Td
-(4368 uint) 5.418 Tj
-0 -28.8 Td
-(4369 bmap\(struct inode *ip, uint bn\)) 21.672 Tj
-0 -30.1091 Td
-(4370 {) 3.612 Tj
-0 -31.4182 Td
-(4371   unsigned x;) 10.836 Tj
-0 -32.7273 Td
-(4372   uint *a;) 9.03 Tj
-0 -34.0364 Td
-(4373   struct buf *inbp;) 14.448 Tj
-0 -35.3454 Td
-(4374 ) 3.01 Tj
-0 -36.6545 Td
-(4375   if\(bn >= MAXFILE\)) 14.448 Tj
-0 -37.9636 Td
-(4376     panic\("bmap 1"\);) 15.05 Tj
-0 -39.2727 Td
-(4377   if\(bn < NDIRECT\) {) 15.05 Tj
-0 -40.5818 Td
-(4378     x = ip->addrs[bn];) 16.254 Tj
-0 -41.8909 Td
-(4379     if\(x == 0\)) 11.438 Tj
-0 -43.2 Td
-(4380       panic\("bmap 2"\);) 16.254 Tj
-0 -44.5091 Td
-(4381   } else {) 9.03 Tj
-0 -45.8182 Td
-(4382     if\(ip->addrs[INDIRECT] == 0\)) 22.274 Tj
-0 -47.1272 Td
-(4383       panic\("bmap 3"\);) 16.254 Tj
-0 -48.4363 Td
-(4384     inbp = bread\(ip->dev, ip->addrs[INDIRECT]\);) 31.304 Tj
-0 -49.7454 Td
-(4385     a = \(uint*\) inbp->data;) 19.264 Tj
-0 -51.0545 Td
-(4386     x = a[bn - NDIRECT];) 17.458 Tj
-0 -52.3636 Td
-(4387     brelse\(inbp\);) 13.244 Tj
-0 -53.6727 Td
-(4388     if\(x == 0\)) 11.438 Tj
-0 -54.9818 Td
-(4389       panic\("bmap 4"\);) 16.254 Tj
-0 -56.2909 Td
-(4390   }) 4.816 Tj
-0 -57.6 Td
-(4391   return x;) 9.632 Tj
-0 -58.9091 Td
-(4392 }) 3.612 Tj
-0 -60.2181 Td
-(4393 ) 3.01 Tj
-0 -61.5272 Td
-(4394 ) 3.01 Tj
-0 -62.8363 Td
-(4395 ) 3.01 Tj
-0 -64.1454 Td
-(4396 ) 3.01 Tj
-0 -65.4545 Td
-(4397 ) 3.01 Tj
-0 -66.7636 Td
-(4398 ) 3.01 Tj
-0 -68.0727 Td
-(4399 ) 3.01 Tj
-0 -72 Td
-(Sheet 43) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/fs.c  Page 15) 157.267 Tj
+0 -28.4801 Td
+(4350 // Look up and return the inode for a path name.) 231.531 Tj
+0 -37.9735 Td
+(4351 // If parent != 0, return the inode for the parent and cop\
+y the final) 323.27 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.213 Tj
+0 -66.4535 Td
+(4354 _namei\(char *path, int parent, char *name\)) 205.32 Tj
+0 -75.9469 Td
+(4355 {) 26.2111 Tj
+0 -85.4403 Td
+(4356   struct inode *ip, *next;) 135.424 Tj
+0 -94.9336 Td
+(4357 ) 21.8426 Tj
+0 -104.427 Td
+(4358   if\(*path == '/'\)) 100.476 Tj
+0 -113.92 Td
+(4359     ip = iget\(ROOTDEV, 1\);) 135.424 Tj
+0 -123.414 Td
+(4360   else) 48.0537 Tj
+0 -132.907 Td
+(4361     ip = idup\(cp->cwd\);) 122.318 Tj
+0 -142.4 Td
+(4362 ) 21.8426 Tj
+0 -151.894 Td
+(4363   while\(\(path = skipelem\(path, name\)\) != 0\){) 214.057 Tj
+0 -161.387 Td
+(4364     ilock\(ip\);) 83.0018 Tj
+0 -170.88 Td
+(4365     if\(ip->type != T_DIR\){) 135.424 Tj
+0 -180.374 Td
+(4366       iunlockput\(ip\);) 113.581 Tj
+0 -189.867 Td
+(4367       return 0;) 87.3703 Tj
+0 -199.361 Td
+(4368     }) 43.6851 Tj
+0 -208.854 Td
+(4369     if\(parent && *path == '\\0'\){) 161.635 Tj
+0 -218.347 Td
+(4370       // Stop one level early.) 152.898 Tj
+0 -227.841 Td
+(4371       iunlock\(ip\);) 100.476 Tj
+0 -237.334 Td
+(4372       return ip;) 91.7388 Tj
+0 -246.827 Td
+(4373     }) 43.6851 Tj
+0 -256.321 Td
+(4374     if\(\(next = dirlookup\(ip, name, 0\)\) == 0\){) 218.426 Tj
+0 -265.814 Td
+(4375       iunlockput\(ip\);) 113.581 Tj
+0 -275.307 Td
+(4376       return 0;) 87.3703 Tj
+0 -284.801 Td
+(4377     }) 43.6851 Tj
+0 -294.294 Td
+(4378     iunlockput\(ip\);) 104.844 Tj
+0 -303.788 Td
+(4379     ip = next;) 83.0018 Tj
+0 -313.281 Td
+(4380   }) 34.9481 Tj
+0 -322.774 Td
+(4381   if\(parent\){) 78.6333 Tj
+0 -332.268 Td
+(4382     iput\(ip\);) 78.6333 Tj
+0 -341.761 Td
+(4383     return 0;) 78.6333 Tj
+0 -351.254 Td
+(4384   }) 34.9481 Tj
+0 -360.748 Td
+(4385   return ip;) 74.2647 Tj
+0 -370.241 Td
+(4386 }) 26.2111 Tj
+0 -379.734 Td
+(4387 ) 21.8426 Tj
+0 -389.228 Td
+(4388 struct inode*) 78.6333 Tj
+0 -398.721 Td
+(4389 namei\(char *path\)) 96.1073 Tj
+0 -408.214 Td
+(4390 {) 26.2111 Tj
+0 -417.708 Td
+(4391   char name[DIRSIZ];) 109.213 Tj
+0 -427.201 Td
+(4392   return _namei\(path, 0, name\);) 157.267 Tj
+0 -436.695 Td
+(4393 }) 26.2111 Tj
+0 -446.188 Td
+(4394 ) 21.8426 Tj
+0 -455.681 Td
+(4395 struct inode*) 78.6333 Tj
+0 -465.175 Td
+(4396 nameiparent\(char *path, char *name\)) 174.741 Tj
+0 -474.668 Td
+(4397 {) 26.2111 Tj
+0 -484.161 Td
+(4398   return _namei\(path, 1, name\);) 157.267 Tj
+0 -493.655 Td
+(4399 }) 26.2111 Tj
+0 -522.135 Td
+(Sheet 43) 34.9481 Tj
 Q
 Q
 Q
@@ -14588,6 +15587,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -14595,241 +15597,254 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 8) 21.07 Tj
-0 -3.92728 Td
-(4400 // Truncate the inode ip, discarding all its data blocks.) 37.324 Tj
-0 -5.23637 Td
-(4401 void) 5.418 Tj
-0 -6.54546 Td
-(4402 itrunc\(struct inode *ip\)) 17.458 Tj
-0 -7.85455 Td
-(4403 {) 3.612 Tj
-0 -9.16364 Td
-(4404   int i, j;) 9.632 Tj
-0 -10.4727 Td
-(4405   struct buf *inbp;) 14.448 Tj
-0 -11.7818 Td
-(4406 ) 3.01 Tj
-0 -13.0909 Td
-(4407   for\(i = 0; i < NADDRS; i++\) {) 21.672 Tj
-0 -14.4 Td
-(4408     if\(ip->addrs[i] != 0\) {) 19.264 Tj
-0 -15.7091 Td
-(4409       if\(i == INDIRECT\) {) 18.06 Tj
-0 -17.0182 Td
-(4410         inbp = bread\(ip->dev, ip->addrs[INDIRECT]\);) 33.712 Tj
-0 -18.3273 Td
-(4411         uint *a = \(uint*\) inbp->data;) 25.284 Tj
-0 -19.6364 Td
-(4412         for\(j = 0; j < NINDIRECT; j++\) {) 27.09 Tj
-0 -20.9455 Td
-(4413           if\(a[j] != 0\) {) 18.06 Tj
-0 -22.2545 Td
-(4414             bfree\(ip->dev, a[j]\);) 22.876 Tj
-0 -23.5636 Td
-(4415             a[j] = 0;) 15.652 Tj
-0 -24.8727 Td
-(4416           }) 9.632 Tj
-0 -26.1818 Td
-(4417         }) 8.428 Tj
-0 -27.4909 Td
-(4418         brelse\(inbp\);) 15.652 Tj
-0 -28.8 Td
-(4419       }) 7.224 Tj
-0 -30.1091 Td
-(4420       bfree\(ip->dev, ip->addrs[i]\);) 24.08 Tj
-0 -31.4182 Td
-(4421       ip->addrs[i] = 0;) 16.856 Tj
-0 -32.7273 Td
-(4422     }) 6.02 Tj
-0 -34.0364 Td
-(4423   }) 4.816 Tj
-0 -35.3454 Td
-(4424   ip->size = 0;) 12.04 Tj
-0 -36.6545 Td
-(4425   iupdate\(ip\);) 11.438 Tj
-0 -37.9636 Td
-(4426 }) 3.612 Tj
-0 -39.2727 Td
-(4427 ) 3.01 Tj
-0 -40.5818 Td
-(4428 // Caller holds reference to ip and has locked it,) 33.11 Tj
-0 -41.8909 Td
-(4429 // possibly editing it.) 16.856 Tj
-0 -43.2 Td
-(4430 // Release lock and drop the reference.) 26.488 Tj
-0 -44.5091 Td
-(4431 void) 5.418 Tj
-0 -45.8182 Td
-(4432 iput\(struct inode *ip\)) 16.254 Tj
-0 -47.1272 Td
-(4433 {) 3.612 Tj
-0 -48.4363 Td
-(4434   if\(ip->ref < 1 || ip->busy != 1\)) 23.478 Tj
-0 -49.7454 Td
-(4435     panic\("iput"\);) 13.846 Tj
-0 -51.0545 Td
-(4436 ) 3.01 Tj
-0 -52.3636 Td
-(4437   if\(\(ip->ref == 1\) && \(ip->nlink == 0\)\) {) 28.294 Tj
-0 -53.6727 Td
-(4438     itrunc\(ip\);) 12.04 Tj
-0 -54.9818 Td
-(4439     ifree\(ip\);) 11.438 Tj
-0 -56.2909 Td
-(4440   }) 4.816 Tj
-0 -57.6 Td
-(4441 ) 3.01 Tj
-0 -58.9091 Td
-(4442   acquire\(&inode_table_lock\);) 20.468 Tj
-0 -60.2181 Td
-(4443 ) 3.01 Tj
-0 -61.5272 Td
-(4444   ip->ref -= 1;) 12.04 Tj
-0 -62.8363 Td
-(4445   ip->busy = 0;) 12.04 Tj
-0 -64.1454 Td
-(4446   wakeup\(ip\);) 10.836 Tj
-0 -65.4545 Td
-(4447 ) 3.01 Tj
-0 -66.7636 Td
-(4448   release\(&inode_table_lock\);) 20.468 Tj
-0 -68.0727 Td
-(4449 }) 3.612 Tj
-0 -72 Td
-(Sheet 44) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/file.c  Page 1) 161.635 Tj
+0 -28.4801 Td
+(4400 #include "types.h") 100.476 Tj
+0 -37.9735 Td
+(4401 #include "defs.h") 96.1073 Tj
+0 -47.4668 Td
+(4402 #include "param.h") 100.476 Tj
+0 -56.9602 Td
+(4403 #include "file.h") 96.1073 Tj
+0 -66.4535 Td
+(4404 #include "spinlock.h") 113.581 Tj
+0 -75.9469 Td
+(4405 #include "dev.h") 91.7388 Tj
+0 -85.4403 Td
+(4406 ) 21.8426 Tj
+0 -94.9336 Td
+(4407 struct devsw devsw[NDEV];) 131.055 Tj
+0 -104.427 Td
+(4408 struct spinlock file_table_lock;) 161.635 Tj
+0 -113.92 Td
+(4409 struct file file[NFILE];) 126.687 Tj
+0 -123.414 Td
+(4410 ) 21.8426 Tj
+0 -132.907 Td
+(4411 void) 39.3166 Tj
+0 -142.4 Td
+(4412 fileinit\(void\)) 83.0018 Tj
+0 -151.894 Td
+(4413 {) 26.2111 Tj
+0 -161.387 Td
+(4414   initlock\(&file_table_lock, "file_table"\);) 209.689 Tj
+0 -170.88 Td
+(4415 }) 26.2111 Tj
+0 -180.374 Td
+(4416 ) 21.8426 Tj
+0 -189.867 Td
+(4417 // Allocate a file structure.) 148.529 Tj
+0 -199.361 Td
+(4418 struct file*) 74.2647 Tj
+0 -208.854 Td
+(4419 filealloc\(void\)) 87.3703 Tj
+0 -218.347 Td
+(4420 {) 26.2111 Tj
+0 -227.841 Td
+(4421   int i;) 56.7907 Tj
+0 -237.334 Td
+(4422 ) 21.8426 Tj
+0 -246.827 Td
+(4423   acquire\(&file_table_lock\);) 144.161 Tj
+0 -256.321 Td
+(4424   for\(i = 0; i < NFILE; i++\){) 148.529 Tj
+0 -265.814 Td
+(4425     if\(file[i].type == FD_CLOSED\){) 170.372 Tj
+0 -275.307 Td
+(4426       file[i].type = FD_NONE;) 148.529 Tj
+0 -284.801 Td
+(4427       file[i].ref = 1;) 117.95 Tj
+0 -294.294 Td
+(4428       release\(&file_table_lock\);) 161.635 Tj
+0 -303.788 Td
+(4429       return file + i;) 117.95 Tj
+0 -313.281 Td
+(4430     }) 43.6851 Tj
+0 -322.774 Td
+(4431   }) 34.9481 Tj
+0 -332.268 Td
+(4432   release\(&file_table_lock\);) 144.161 Tj
+0 -341.761 Td
+(4433   return 0;) 69.8962 Tj
+0 -351.254 Td
+(4434 }) 26.2111 Tj
+0 -360.748 Td
+(4435 ) 21.8426 Tj
+0 -370.241 Td
+(4436 // Increment ref count for file f.) 170.372 Tj
+0 -379.734 Td
+(4437 struct file*) 74.2647 Tj
+0 -389.228 Td
+(4438 filedup\(struct file *f\)) 122.318 Tj
+0 -398.721 Td
+(4439 {) 26.2111 Tj
+0 -408.214 Td
+(4440   acquire\(&file_table_lock\);) 144.161 Tj
+0 -417.708 Td
+(4441   if\(f->ref < 1 || f->type == FD_CLOSED\)) 196.583 Tj
+0 -427.201 Td
+(4442     panic\("filedup"\);) 113.581 Tj
+0 -436.695 Td
+(4443   f->ref++;) 69.8962 Tj
+0 -446.188 Td
+(4444   release\(&file_table_lock\);) 144.161 Tj
+0 -455.681 Td
+(4445   return f;) 69.8962 Tj
+0 -465.175 Td
+(4446 }) 26.2111 Tj
+0 -474.668 Td
+(4447 ) 21.8426 Tj
+0 -484.161 Td
+(4448 ) 21.8426 Tj
+0 -493.655 Td
+(4449 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 9) 21.07 Tj
-0 -3.92728 Td
-(4450 // Caller holds reference to ip but not lock.) 30.1 Tj
-0 -5.23637 Td
-(4451 // Drop reference.) 13.846 Tj
-0 -6.54546 Td
-(4452 void) 5.418 Tj
-0 -7.85455 Td
-(4453 idecref\(struct inode *ip\)) 18.06 Tj
-0 -9.16364 Td
-(4454 {) 3.612 Tj
-0 -10.4727 Td
-(4455   ilock\(ip\);) 10.234 Tj
-0 -11.7818 Td
-(4456   iput\(ip\);) 9.632 Tj
-0 -13.0909 Td
-(4457 }) 3.612 Tj
-0 -14.4 Td
-(4458 ) 3.01 Tj
-0 -15.7091 Td
-(4459 // Increment reference count for ip.) 24.682 Tj
-0 -17.0182 Td
-(4460 void) 5.418 Tj
-0 -18.3273 Td
-(4461 iincref\(struct inode *ip\)) 18.06 Tj
-0 -19.6364 Td
-(4462 {) 3.612 Tj
-0 -20.9455 Td
-(4463   ilock\(ip\);) 10.234 Tj
-0 -22.2545 Td
-(4464   ip->ref++;) 10.234 Tj
-0 -23.5636 Td
-(4465   iunlock\(ip\);) 11.438 Tj
-0 -24.8727 Td
-(4466 }) 3.612 Tj
-0 -26.1818 Td
-(4467 ) 3.01 Tj
-0 -27.4909 Td
-(4468 // Copy stat information from inode.) 24.682 Tj
-0 -28.8 Td
-(4469 void) 5.418 Tj
-0 -30.1091 Td
-(4470 stati\(struct inode *ip, struct stat *st\)) 27.09 Tj
-0 -31.4182 Td
-(4471 {) 3.612 Tj
-0 -32.7273 Td
-(4472   st->dev = ip->dev;) 15.05 Tj
-0 -34.0364 Td
-(4473   st->ino = ip->inum;) 15.652 Tj
-0 -35.3454 Td
-(4474   st->type = ip->type;) 16.254 Tj
-0 -36.6545 Td
-(4475   st->nlink = ip->nlink;) 17.458 Tj
-0 -37.9636 Td
-(4476   st->size = ip->size;) 16.254 Tj
-0 -39.2727 Td
-(4477 }) 3.612 Tj
-0 -40.5818 Td
-(4478 ) 3.01 Tj
-0 -41.8909 Td
-(4479 #define min\(a, b\) \(\(a\) < \(b\) ? \(a\) : \(b\)\)) 27.692 Tj
-0 -43.2 Td
-(4480 ) 3.01 Tj
-0 -44.5091 Td
-(4481 // Read data from inode.) 17.458 Tj
-0 -45.8182 Td
-(4482 int) 4.816 Tj
-0 -47.1272 Td
-(4483 readi\(struct inode *ip, char *dst, uint off, uint n\)) 34.314 Tj
-0 -48.4363 Td
-(4484 {) 3.612 Tj
-0 -49.7454 Td
-(4485   uint target = n, n1;) 16.254 Tj
-0 -51.0545 Td
-(4486   struct buf *bp;) 13.244 Tj
-0 -52.3636 Td
-(4487 ) 3.01 Tj
-0 -53.6727 Td
-(4488   if\(ip->type == T_DEV\) {) 18.06 Tj
-0 -54.9818 Td
-(4489     if\(ip->major < 0 || ip->major >= NDEV || !devsw[ip->major].read\)) 43.946 Tj
-0 -56.2909 Td
-(4490       return -1;) 12.642 Tj
-0 -57.6 Td
-(4491     return devsw[ip->major].read\(ip->minor, dst, n\);) 34.314 Tj
-0 -58.9091 Td
-(4492   }) 4.816 Tj
-0 -60.2181 Td
-(4493 ) 3.01 Tj
-0 -61.5272 Td
-(4494   while\(n > 0 && off < ip->size\){) 22.876 Tj
-0 -62.8363 Td
-(4495     bp = bread\(ip->dev, bmap\(ip, off / BSIZE\)\);) 31.304 Tj
-0 -64.1454 Td
-(4496     n1 = min\(n, ip->size - off\);) 22.274 Tj
-0 -65.4545 Td
-(4497     n1 = min\(n1, BSIZE - \(off % BSIZE\)\);) 27.09 Tj
-0 -66.7636 Td
-(4498     memmove\(dst, bp->data + \(off % BSIZE\), n1\);) 31.304 Tj
-0 -68.0727 Td
-(4499     n -= n1;) 10.234 Tj
-0 -72 Td
-(Sheet 44) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  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.69 Tj
+0 -37.9735 Td
+(4451 void) 39.3166 Tj
+0 -47.4668 Td
+(4452 fileclose\(struct file *f\)) 131.055 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\(&file_table_lock\);) 144.161 Tj
+0 -94.9336 Td
+(4457   if\(f->ref < 1 || f->type == FD_CLOSED\)) 196.583 Tj
+0 -104.427 Td
+(4458     panic\("fileclose"\);) 122.318 Tj
+0 -113.92 Td
+(4459   if\(--f->ref > 0\){) 104.844 Tj
+0 -123.414 Td
+(4460     release\(&file_table_lock\);) 152.898 Tj
+0 -132.907 Td
+(4461     return;) 69.8962 Tj
+0 -142.4 Td
+(4462   }) 34.9481 Tj
+0 -151.894 Td
+(4463   ff = *f;) 65.5277 Tj
+0 -161.387 Td
+(4464   f->ref = 0;) 78.6333 Tj
+0 -170.88 Td
+(4465   f->type = FD_CLOSED;) 117.95 Tj
+0 -180.374 Td
+(4466   release\(&file_table_lock\);) 144.161 Tj
+0 -189.867 Td
+(4467 ) 21.8426 Tj
+0 -199.361 Td
+(4468   if\(ff.type == FD_PIPE\)) 126.687 Tj
+0 -208.854 Td
+(4469     pipeclose\(ff.pipe, ff.writable\);) 179.109 Tj
+0 -218.347 Td
+(4470   else if\(ff.type == FD_INODE\)) 152.898 Tj
+0 -227.841 Td
+(4471     iput\(ff.ip\);) 91.7388 Tj
+0 -237.334 Td
+(4472   else) 48.0537 Tj
+0 -246.827 Td
+(4473     panic\("fileclose"\);) 122.318 Tj
+0 -256.321 Td
+(4474 }) 26.2111 Tj
+0 -265.814 Td
+(4475 ) 21.8426 Tj
+0 -275.307 Td
+(4476 // Get metadata about file f.) 148.529 Tj
+0 -284.801 Td
+(4477 int) 34.9481 Tj
+0 -294.294 Td
+(4478 filestat\(struct file *f, struct stat *st\)) 200.952 Tj
+0 -303.788 Td
+(4479 {) 26.2111 Tj
+0 -313.281 Td
+(4480   if\(f->type == FD_INODE\){) 135.424 Tj
+0 -322.774 Td
+(4481     ilock\(f->ip\);) 96.1073 Tj
+0 -332.268 Td
+(4482     stati\(f->ip, st\);) 113.581 Tj
+0 -341.761 Td
+(4483     iunlock\(f->ip\);) 104.844 Tj
+0 -351.254 Td
+(4484     return 0;) 78.6333 Tj
+0 -360.748 Td
+(4485   }) 34.9481 Tj
+0 -370.241 Td
+(4486   return -1;) 74.2647 Tj
+0 -379.734 Td
+(4487 }) 26.2111 Tj
+0 -389.228 Td
+(4488 ) 21.8426 Tj
+0 -398.721 Td
+(4489 ) 21.8426 Tj
+0 -408.214 Td
+(4490 ) 21.8426 Tj
+0 -417.708 Td
+(4491 ) 21.8426 Tj
+0 -427.201 Td
+(4492 ) 21.8426 Tj
+0 -436.695 Td
+(4493 ) 21.8426 Tj
+0 -446.188 Td
+(4494 ) 21.8426 Tj
+0 -455.681 Td
+(4495 ) 21.8426 Tj
+0 -465.175 Td
+(4496 ) 21.8426 Tj
+0 -474.668 Td
+(4497 ) 21.8426 Tj
+0 -484.161 Td
+(4498 ) 21.8426 Tj
+0 -493.655 Td
+(4499 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 44) 34.9481 Tj
 Q
 Q
 Q
@@ -14840,7 +15855,10 @@ pdfEndPage
 %%Page: 52 52
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -14848,241 +15866,255 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 10) 21.672 Tj
-0 -3.92728 Td
-(4500     off += n1;) 11.438 Tj
-0 -5.23637 Td
-(4501     dst += n1;) 11.438 Tj
-0 -6.54546 Td
-(4502     brelse\(bp\);) 12.04 Tj
-0 -7.85455 Td
-(4503   }) 4.816 Tj
-0 -9.16364 Td
-(4504 ) 3.01 Tj
-0 -10.4727 Td
-(4505   return target - n;) 15.05 Tj
-0 -11.7818 Td
-(4506 }) 3.612 Tj
-0 -13.0909 Td
-(4507 ) 3.01 Tj
-0 -14.4 Td
-(4508 // Allocate the nth block in inode ip if necessary.) 33.712 Tj
-0 -15.7091 Td
-(4509 static int) 9.03 Tj
-0 -17.0182 Td
-(4510 newblock\(struct inode *ip, uint lbn\)) 24.682 Tj
-0 -18.3273 Td
-(4511 {) 3.612 Tj
-0 -19.6364 Td
-(4512   struct buf *inbp;) 14.448 Tj
-0 -20.9455 Td
-(4513   uint *inaddrs;) 12.642 Tj
-0 -22.2545 Td
-(4514   uint b;) 8.428 Tj
-0 -23.5636 Td
-(4515 ) 3.01 Tj
-0 -24.8727 Td
-(4516   if\(lbn < NDIRECT\) {) 15.652 Tj
-0 -26.1818 Td
-(4517     if\(ip->addrs[lbn] == 0\) {) 20.468 Tj
-0 -27.4909 Td
-(4518       b = balloc\(ip->dev\);) 18.662 Tj
-0 -28.8 Td
-(4519       if\(b <= 0\)) 12.642 Tj
-0 -30.1091 Td
-(4520         return -1;) 13.846 Tj
-0 -31.4182 Td
-(4521       ip->addrs[lbn] = b;) 18.06 Tj
-0 -32.7273 Td
-(4522     }) 6.02 Tj
-0 -34.0364 Td
-(4523   } else {) 9.03 Tj
-0 -35.3454 Td
-(4524     if\(ip->addrs[INDIRECT] == 0\) {) 23.478 Tj
-0 -36.6545 Td
-(4525       b = balloc\(ip->dev\);) 18.662 Tj
-0 -37.9636 Td
-(4526       if\(b <= 0\)) 12.642 Tj
-0 -39.2727 Td
-(4527         return -1;) 13.846 Tj
-0 -40.5818 Td
-(4528       ip->addrs[INDIRECT] = b;) 21.07 Tj
-0 -41.8909 Td
-(4529     }) 6.02 Tj
-0 -43.2 Td
-(4530     inbp = bread\(ip->dev, ip->addrs[INDIRECT]\);) 31.304 Tj
-0 -44.5091 Td
-(4531     inaddrs = \(uint*\) inbp->data;) 22.876 Tj
-0 -45.8182 Td
-(4532     if\(inaddrs[lbn - NDIRECT] == 0\) {) 25.284 Tj
-0 -47.1272 Td
-(4533       b = balloc\(ip->dev\);) 18.662 Tj
-0 -48.4363 Td
-(4534       if\(b <= 0\)) 12.642 Tj
-0 -49.7454 Td
-(4535         return -1;) 13.846 Tj
-0 -51.0545 Td
-(4536       inaddrs[lbn - NDIRECT] = b;) 22.876 Tj
-0 -52.3636 Td
-(4537       bwrite\(inbp, ip->addrs[INDIRECT]\);) 27.09 Tj
-0 -53.6727 Td
-(4538     }) 6.02 Tj
-0 -54.9818 Td
-(4539     brelse\(inbp\);) 13.244 Tj
-0 -56.2909 Td
-(4540   }) 4.816 Tj
-0 -57.6 Td
-(4541   return 0;) 9.632 Tj
-0 -58.9091 Td
-(4542 }) 3.612 Tj
-0 -60.2181 Td
-(4543 ) 3.01 Tj
-0 -61.5272 Td
-(4544 ) 3.01 Tj
-0 -62.8363 Td
-(4545 ) 3.01 Tj
-0 -64.1454 Td
-(4546 ) 3.01 Tj
-0 -65.4545 Td
-(4547 ) 3.01 Tj
-0 -66.7636 Td
-(4548 ) 3.01 Tj
-0 -68.0727 Td
-(4549 ) 3.01 Tj
-0 -72 Td
-(Sheet 45) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/file.c  Page 3) 161.635 Tj
+0 -28.4801 Td
+(4500 // Read from file f.  Addr is kernel address.) 218.426 Tj
+0 -37.9735 Td
+(4501 int) 34.9481 Tj
+0 -47.4668 Td
+(4502 fileread\(struct file *f, char *addr, int n\)) 209.689 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.95 Tj
+0 -94.9336 Td
+(4507     return -1;) 83.0018 Tj
+0 -104.427 Td
+(4508   if\(f->type == FD_PIPE\)) 126.687 Tj
+0 -113.92 Td
+(4509     return piperead\(f->pipe, addr, n\);) 187.846 Tj
+0 -123.414 Td
+(4510   if\(f->type == FD_INODE\){) 135.424 Tj
+0 -132.907 Td
+(4511     ilock\(f->ip\);) 96.1073 Tj
+0 -142.4 Td
+(4512     if\(\(r = readi\(f->ip, addr, f->off, n\)\) > 0\)) 227.163 Tj
+0 -151.894 Td
+(4513       f->off += r;) 100.476 Tj
+0 -161.387 Td
+(4514     iunlock\(f->ip\);) 104.844 Tj
+0 -170.88 Td
+(4515     return r;) 78.6333 Tj
+0 -180.374 Td
+(4516   }) 34.9481 Tj
+0 -189.867 Td
+(4517   panic\("fileread"\);) 109.213 Tj
+0 -199.361 Td
+(4518 }) 26.2111 Tj
+0 -208.854 Td
+(4519 ) 21.8426 Tj
+0 -218.347 Td
+(4520 // Write to file f.  Addr is kernel address.) 214.057 Tj
+0 -227.841 Td
+(4521 int) 34.9481 Tj
+0 -237.334 Td
+(4522 filewrite\(struct file *f, char *addr, int n\)) 214.057 Tj
+0 -246.827 Td
+(4523 {) 26.2111 Tj
+0 -256.321 Td
+(4524   int r;) 56.7907 Tj
+0 -265.814 Td
+(4525 ) 21.8426 Tj
+0 -275.307 Td
+(4526   if\(f->writable == 0\)) 117.95 Tj
+0 -284.801 Td
+(4527     return -1;) 83.0018 Tj
+0 -294.294 Td
+(4528   if\(f->type == FD_PIPE\)) 126.687 Tj
+0 -303.788 Td
+(4529     return pipewrite\(f->pipe, addr, n\);) 192.215 Tj
+0 -313.281 Td
+(4530   if\(f->type == FD_INODE\){) 135.424 Tj
+0 -322.774 Td
+(4531     ilock\(f->ip\);) 96.1073 Tj
+0 -332.268 Td
+(4532     if\(\(r = writei\(f->ip, addr, f->off, n\)\) > 0\)) 231.531 Tj
+0 -341.761 Td
+(4533       f->off += r;) 100.476 Tj
+0 -351.254 Td
+(4534     iunlock\(f->ip\);) 104.844 Tj
+0 -360.748 Td
+(4535     return r;) 78.6333 Tj
+0 -370.241 Td
+(4536   }) 34.9481 Tj
+0 -379.734 Td
+(4537   panic\("filewrite"\);) 113.581 Tj
+0 -389.228 Td
+(4538 }) 26.2111 Tj
+0 -398.721 Td
+(4539 ) 21.8426 Tj
+0 -408.214 Td
+(4540 ) 21.8426 Tj
+0 -417.708 Td
+(4541 ) 21.8426 Tj
+0 -427.201 Td
+(4542 ) 21.8426 Tj
+0 -436.695 Td
+(4543 ) 21.8426 Tj
+0 -446.188 Td
+(4544 ) 21.8426 Tj
+0 -455.681 Td
+(4545 ) 21.8426 Tj
+0 -465.175 Td
+(4546 ) 21.8426 Tj
+0 -474.668 Td
+(4547 ) 21.8426 Tj
+0 -484.161 Td
+(4548 ) 21.8426 Tj
+0 -493.655 Td
+(4549 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 11) 21.672 Tj
-0 -3.92728 Td
-(4550 // Write data to inode.) 16.856 Tj
-0 -5.23637 Td
-(4551 int) 4.816 Tj
-0 -6.54546 Td
-(4552 writei\(struct inode *ip, char *addr, uint off, uint n\)) 35.518 Tj
-0 -7.85455 Td
-(4553 {) 3.612 Tj
-0 -9.16364 Td
-(4554   if\(ip->type == T_DEV\) {) 18.06 Tj
-0 -10.4727 Td
-(4555     if\(ip->major < 0 || ip->major >= NDEV || !devsw[ip->major].write\)) 44.548 Tj
-0 -11.7818 Td
-(4556       return -1;) 12.642 Tj
-0 -13.0909 Td
-(4557     return devsw[ip->major].write\(ip->minor, addr, n\);) 35.518 Tj
-0 -14.4 Td
-(4558   } else if\(ip->type == T_FILE || ip->type == T_DIR\) {) 35.518 Tj
-0 -15.7091 Td
-(4559     struct buf *bp;) 14.448 Tj
-0 -17.0182 Td
-(4560     int r = 0;) 11.438 Tj
-0 -18.3273 Td
-(4561     int m;) 9.03 Tj
-0 -19.6364 Td
-(4562     int lbn;) 10.234 Tj
-0 -20.9455 Td
-(4563     while\(r < n\) {) 13.846 Tj
-0 -22.2545 Td
-(4564       lbn = off / BSIZE;) 17.458 Tj
-0 -23.5636 Td
-(4565       if\(lbn >= MAXFILE\)) 17.458 Tj
-0 -24.8727 Td
-(4566         return r;) 13.244 Tj
-0 -26.1818 Td
-(4567       if\(newblock\(ip, lbn\) < 0\) {) 22.876 Tj
-0 -27.4909 Td
-(4568         cprintf\("newblock failed\\n"\);) 25.284 Tj
-0 -28.8 Td
-(4569         return r;) 13.244 Tj
-0 -30.1091 Td
-(4570       }) 7.224 Tj
-0 -31.4182 Td
-(4571       m = min\(BSIZE - off % BSIZE, n-r\);) 27.09 Tj
-0 -32.7273 Td
-(4572       bp = bread\(ip->dev, bmap\(ip, lbn\)\);) 27.692 Tj
-0 -34.0364 Td
-(4573       memmove\(bp->data + off % BSIZE, addr, m\);) 31.304 Tj
-0 -35.3454 Td
-(4574       bwrite\(bp, bmap\(ip, lbn\)\);) 22.274 Tj
-0 -36.6545 Td
-(4575       brelse\(bp\);) 13.244 Tj
-0 -37.9636 Td
-(4576       r += m;) 10.836 Tj
-0 -39.2727 Td
-(4577       off += m;) 12.04 Tj
-0 -40.5818 Td
-(4578     }) 6.02 Tj
-0 -41.8909 Td
-(4579     if\(r > 0\) {) 12.04 Tj
-0 -43.2 Td
-(4580       if\(off > ip->size\) {) 18.662 Tj
-0 -44.5091 Td
-(4581         if\(ip->type == T_DIR\)) 20.468 Tj
-0 -45.8182 Td
-(4582           ip->size = \(\(off / BSIZE\) + 1\) * BSIZE;) 32.508 Tj
-0 -47.1272 Td
-(4583         else) 10.234 Tj
-0 -48.4363 Td
-(4584           ip->size = off;) 18.06 Tj
-0 -49.7454 Td
-(4585       }) 7.224 Tj
-0 -51.0545 Td
-(4586       iupdate\(ip\);) 13.846 Tj
-0 -52.3636 Td
-(4587     }) 6.02 Tj
-0 -53.6727 Td
-(4588     return r;) 10.836 Tj
-0 -54.9818 Td
-(4589   } else {) 9.03 Tj
-0 -56.2909 Td
-(4590     panic\("writei: unknown type"\);) 23.478 Tj
-0 -57.6 Td
-(4591     return 0;) 10.836 Tj
-0 -58.9091 Td
-(4592   }) 4.816 Tj
-0 -60.2181 Td
-(4593 }) 3.612 Tj
-0 -61.5272 Td
-(4594 ) 3.01 Tj
-0 -62.8363 Td
-(4595 ) 3.01 Tj
-0 -64.1454 Td
-(4596 ) 3.01 Tj
-0 -65.4545 Td
-(4597 ) 3.01 Tj
-0 -66.7636 Td
-(4598 ) 3.01 Tj
-0 -68.0727 Td
-(4599 ) 3.01 Tj
-0 -72 Td
-(Sheet 45) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sysfile.c  Page 1) 174.741 Tj
+0 -28.4801 Td
+(4550 #include "types.h") 100.476 Tj
+0 -37.9735 Td
+(4551 #include "defs.h") 96.1073 Tj
+0 -47.4668 Td
+(4552 #include "param.h") 100.476 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 "fsvar.h") 100.476 Tj
+0 -104.427 Td
+(4558 #include "file.h") 96.1073 Tj
+0 -113.92 Td
+(4559 #include "fcntl.h") 100.476 Tj
+0 -123.414 Td
+(4560 ) 21.8426 Tj
+0 -132.907 Td
+(4561 // Fetch the nth word-sized system call argument as a file\
+ descriptor) 323.27 Tj
+0 -142.4 Td
+(4562 // and return both the descriptor and the corresponding st\
+ruct file.) 318.902 Tj
+0 -151.894 Td
+(4563 static int) 65.5277 Tj
+0 -161.387 Td
+(4564 argfd\(int n, int *pfd, struct file **pf\)) 196.583 Tj
+0 -170.88 Td
+(4565 {) 26.2111 Tj
+0 -180.374 Td
+(4566   int fd;) 61.1592 Tj
+0 -189.867 Td
+(4567   struct file *f;) 96.1073 Tj
+0 -199.361 Td
+(4568 ) 21.8426 Tj
+0 -208.854 Td
+(4569   if\(argint\(n, &fd\) < 0\)) 126.687 Tj
+0 -218.347 Td
+(4570     return -1;) 83.0018 Tj
+0 -227.841 Td
+(4571   if\(fd < 0 || fd >= NOFILE || \(f=cp->ofile[fd]\) == 0\)) 257.742 Tj
+0 -237.334 Td
+(4572     return -1;) 83.0018 Tj
+0 -246.827 Td
+(4573   if\(pfd\)) 61.1592 Tj
+0 -256.321 Td
+(4574     *pfd = fd;) 83.0018 Tj
+0 -265.814 Td
+(4575   if\(pf\)) 56.7907 Tj
+0 -275.307 Td
+(4576     *pf = f;) 74.2647 Tj
+0 -284.801 Td
+(4577   return 0;) 69.8962 Tj
+0 -294.294 Td
+(4578 }) 26.2111 Tj
+0 -303.788 Td
+(4579 ) 21.8426 Tj
+0 -313.281 Td
+(4580 // Allocate a file descriptor for the given file.) 235.9 Tj
+0 -322.774 Td
+(4581 // Takes over file reference from caller on success.) 249.005 Tj
+0 -332.268 Td
+(4582 static int) 65.5277 Tj
+0 -341.761 Td
+(4583 fdalloc\(struct file *f\)) 122.318 Tj
+0 -351.254 Td
+(4584 {) 26.2111 Tj
+0 -360.748 Td
+(4585   int fd;) 61.1592 Tj
+0 -370.241 Td
+(4586 ) 21.8426 Tj
+0 -379.734 Td
+(4587   for\(fd = 0; fd < NOFILE; fd++\){) 166.004 Tj
+0 -389.228 Td
+(4588     if\(cp->ofile[fd] == 0\){) 139.792 Tj
+0 -398.721 Td
+(4589       cp->ofile[fd] = f;) 126.687 Tj
+0 -408.214 Td
+(4590       return fd;) 91.7388 Tj
+0 -417.708 Td
+(4591     }) 43.6851 Tj
+0 -427.201 Td
+(4592   }) 34.9481 Tj
+0 -436.695 Td
+(4593   return -1;) 74.2647 Tj
+0 -446.188 Td
+(4594 }) 26.2111 Tj
+0 -455.681 Td
+(4595 ) 21.8426 Tj
+0 -465.175 Td
+(4596 ) 21.8426 Tj
+0 -474.668 Td
+(4597 ) 21.8426 Tj
+0 -484.161 Td
+(4598 ) 21.8426 Tj
+0 -493.655 Td
+(4599 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 45) 34.9481 Tj
 Q
 Q
 Q
@@ -15094,6 +16126,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -15101,241 +16136,257 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 12) 21.672 Tj
-0 -3.92728 Td
-(4600 // look up a path name, in one of three modes.) 30.702 Tj
-0 -5.23637 Td
-(4601 // NAMEI_LOOKUP: return locked target inode.) 29.498 Tj
-0 -6.54546 Td
-(4602 // NAMEI_CREATE: return locked parent inode.) 29.498 Tj
-0 -7.85455 Td
-(4603 //   return 0 if name does exist.) 22.876 Tj
-0 -9.16364 Td
-(4604 //   *ret_last points to last path component \(i.e. new file name\).) 42.742 Tj
-0 -10.4727 Td
-(4605 //   *ret_ip points to the the name that did exist, if it did.) 40.334 Tj
-0 -11.7818 Td
-(4606 //   *ret_ip and *ret_last may be zero even if return value is zero.) 43.946 Tj
-0 -13.0909 Td
-(4607 // NAMEI_DELETE: return locked parent inode, offset of dirent in *ret_off.) 47.558 Tj
-0 -14.4 Td
-(4608 //   return 0 if name doesn't exist.) 24.682 Tj
-0 -15.7091 Td
-(4609 struct inode*) 10.836 Tj
-0 -17.0182 Td
-(4610 namei\(char *path, int mode, uint *ret_off,) 28.294 Tj
-0 -18.3273 Td
-(4611       char **ret_last, struct inode **ret_ip\)) 30.1 Tj
-0 -19.6364 Td
-(4612 {) 3.612 Tj
-0 -20.9455 Td
-(4613   struct inode *dp;) 14.448 Tj
-0 -22.2545 Td
-(4614   struct proc *p = curproc[cpu\(\)];) 23.478 Tj
-0 -23.5636 Td
-(4615   char *cp = path, *cp1;) 17.458 Tj
-0 -24.8727 Td
-(4616   uint off, dev;) 12.642 Tj
-0 -26.1818 Td
-(4617   struct buf *bp;) 13.244 Tj
-0 -27.4909 Td
-(4618   struct dirent *ep;) 15.05 Tj
-0 -28.8 Td
-(4619   int i, l, atend;) 13.846 Tj
-0 -30.1091 Td
-(4620   uint ninum;) 10.836 Tj
-0 -31.4182 Td
-(4621 ) 3.01 Tj
-0 -32.7273 Td
-(4622   if\(ret_off\)) 10.836 Tj
-0 -34.0364 Td
-(4623     *ret_off = 0xffffffff;) 18.662 Tj
-0 -35.3454 Td
-(4624   if\(ret_last\)) 11.438 Tj
-0 -36.6545 Td
-(4625     *ret_last = 0;) 13.846 Tj
-0 -37.9636 Td
-(4626   if\(ret_ip\)) 10.234 Tj
-0 -39.2727 Td
-(4627     *ret_ip = 0;) 12.642 Tj
-0 -40.5818 Td
-(4628 ) 3.01 Tj
-0 -41.8909 Td
-(4629   if\(*cp == '/'\)) 12.642 Tj
-0 -43.2 Td
-(4630     dp = iget\(rootdev, 1\);) 18.662 Tj
-0 -44.5091 Td
-(4631   else {) 7.826 Tj
-0 -45.8182 Td
-(4632     dp = p->cwd;) 12.642 Tj
-0 -47.1272 Td
-(4633     iincref\(dp\);) 12.642 Tj
-0 -48.4363 Td
-(4634     ilock\(dp\);) 11.438 Tj
-0 -49.7454 Td
-(4635   }) 4.816 Tj
-0 -51.0545 Td
-(4636 ) 3.01 Tj
-0 -52.3636 Td
-(4637   for\(;;\){) 9.03 Tj
-0 -53.6727 Td
-(4638     while\(*cp == '/'\)) 15.652 Tj
-0 -54.9818 Td
-(4639       cp++;) 9.632 Tj
-0 -56.2909 Td
-(4640 ) 3.01 Tj
-0 -57.6 Td
-(4641     if\(*cp == '\\0'\){) 15.05 Tj
-0 -58.9091 Td
-(4642       if\(mode == NAMEI_LOOKUP\)) 21.07 Tj
-0 -60.2181 Td
-(4643         return dp;) 13.846 Tj
-0 -61.5272 Td
-(4644       if\(mode == NAMEI_CREATE && ret_ip\){) 27.692 Tj
-0 -62.8363 Td
-(4645         *ret_ip = dp;) 15.652 Tj
-0 -64.1454 Td
-(4646         return 0;) 13.244 Tj
-0 -65.4545 Td
-(4647       }) 7.224 Tj
-0 -66.7636 Td
-(4648       iput\(dp\);) 12.04 Tj
-0 -68.0727 Td
-(4649       return 0;) 12.04 Tj
-0 -72 Td
-(Sheet 46) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sysfile.c  Page 2) 174.741 Tj
+0 -28.4801 Td
+(4600 int) 34.9481 Tj
+0 -37.9735 Td
+(4601 sys_read\(void\)) 83.0018 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 n;) 56.7907 Tj
+0 -75.9469 Td
+(4605   char *cp;) 69.8962 Tj
+0 -85.4403 Td
+(4606 ) 21.8426 Tj
+0 -94.9336 Td
+(4607   if\(argfd\(0, 0, &f\) < 0 || argint\(2, &n\) < 0 || argp\
+tr\(1, &cp, n\) < 0\)) 332.007 Tj
+0 -104.427 Td
+(4608     return -1;) 83.0018 Tj
+0 -113.92 Td
+(4609   return fileread\(f, cp, n\);) 144.161 Tj
+0 -123.414 Td
+(4610 }) 26.2111 Tj
+0 -132.907 Td
+(4611 ) 21.8426 Tj
+0 -142.4 Td
+(4612 int) 34.9481 Tj
+0 -151.894 Td
+(4613 sys_write\(void\)) 87.3703 Tj
+0 -161.387 Td
+(4614 {) 26.2111 Tj
+0 -170.88 Td
+(4615   struct file *f;) 96.1073 Tj
+0 -180.374 Td
+(4616   int n;) 56.7907 Tj
+0 -189.867 Td
+(4617   char *cp;) 69.8962 Tj
+0 -199.361 Td
+(4618 ) 21.8426 Tj
+0 -208.854 Td
+(4619   if\(argfd\(0, 0, &f\) < 0 || argint\(2, &n\) < 0 || argp\
+tr\(1, &cp, n\) < 0\)) 332.007 Tj
+0 -218.347 Td
+(4620     return -1;) 83.0018 Tj
+0 -227.841 Td
+(4621   return filewrite\(f, cp, n\);) 148.529 Tj
+0 -237.334 Td
+(4622 }) 26.2111 Tj
+0 -246.827 Td
+(4623 ) 21.8426 Tj
+0 -256.321 Td
+(4624 int) 34.9481 Tj
+0 -265.814 Td
+(4625 sys_dup\(void\)) 78.6333 Tj
+0 -275.307 Td
+(4626 {) 26.2111 Tj
+0 -284.801 Td
+(4627   struct file *f;) 96.1073 Tj
+0 -294.294 Td
+(4628   int fd;) 61.1592 Tj
+0 -303.788 Td
+(4629 ) 21.8426 Tj
+0 -313.281 Td
+(4630   if\(argfd\(0, 0, &f\) < 0\)) 131.055 Tj
+0 -322.774 Td
+(4631     return -1;) 83.0018 Tj
+0 -332.268 Td
+(4632   if\(\(fd=fdalloc\(f\)\) < 0\)) 131.055 Tj
+0 -341.761 Td
+(4633     return -1;) 83.0018 Tj
+0 -351.254 Td
+(4634   filedup\(f\);) 78.6333 Tj
+0 -360.748 Td
+(4635   return fd;) 74.2647 Tj
+0 -370.241 Td
+(4636 }) 26.2111 Tj
+0 -379.734 Td
+(4637 ) 21.8426 Tj
+0 -389.228 Td
+(4638 int) 34.9481 Tj
+0 -398.721 Td
+(4639 sys_close\(void\)) 87.3703 Tj
+0 -408.214 Td
+(4640 {) 26.2111 Tj
+0 -417.708 Td
+(4641   int fd;) 61.1592 Tj
+0 -427.201 Td
+(4642   struct file *f;) 96.1073 Tj
+0 -436.695 Td
+(4643 ) 21.8426 Tj
+0 -446.188 Td
+(4644   if\(argfd\(0, &fd, &f\) < 0\)) 139.792 Tj
+0 -455.681 Td
+(4645     return -1;) 83.0018 Tj
+0 -465.175 Td
+(4646   cp->ofile[fd] = 0;) 109.213 Tj
+0 -474.668 Td
+(4647   fileclose\(f\);) 87.3703 Tj
+0 -484.161 Td
+(4648   return 0;) 69.8962 Tj
+0 -493.655 Td
+(4649 }) 26.2111 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 13) 21.672 Tj
-0 -3.92728 Td
-(4650     }) 6.02 Tj
-0 -5.23637 Td
-(4651 ) 3.01 Tj
-0 -6.54546 Td
-(4652     if\(dp->type != T_DIR\){) 18.662 Tj
-0 -7.85455 Td
-(4653       iput\(dp\);) 12.04 Tj
-0 -9.16364 Td
-(4654       return 0;) 12.04 Tj
-0 -10.4727 Td
-(4655     }) 6.02 Tj
-0 -11.7818 Td
-(4656 ) 3.01 Tj
-0 -13.0909 Td
-(4657     for\(i = 0; cp[i] != 0 && cp[i] != '/'; i++\)) 31.304 Tj
-0 -14.4 Td
-(4658       ;) 7.224 Tj
-0 -15.7091 Td
-(4659     l = i;) 9.03 Tj
-0 -17.0182 Td
-(4660     if\(i > DIRSIZ\)) 13.846 Tj
-0 -18.3273 Td
-(4661       l = DIRSIZ;) 13.244 Tj
-0 -19.6364 Td
-(4662 ) 3.01 Tj
-0 -20.9455 Td
-(4663     for\(off = 0; off < dp->size; off += BSIZE\){) 31.304 Tj
-0 -22.2545 Td
-(4664       bp = bread\(dp->dev, bmap\(dp, off / BSIZE\)\);) 32.508 Tj
-0 -23.5636 Td
-(4665       for\(ep = \(struct dirent*\) bp->data;) 27.692 Tj
-0 -24.8727 Td
-(4666           ep < \(struct dirent*\) \(bp->data + BSIZE\);) 33.712 Tj
-0 -26.1818 Td
-(4667           ep++\){) 12.642 Tj
-0 -27.4909 Td
-(4668         if\(ep->inum == 0\)) 18.06 Tj
-0 -28.8 Td
-(4669           continue;) 14.448 Tj
-0 -30.1091 Td
-(4670         if\(memcmp\(cp, ep->name, l\) == 0 &&) 28.294 Tj
-0 -31.4182 Td
-(4671            \(l == DIRSIZ || ep->name[l]== 0\)\){) 30.1 Tj
-0 -32.7273 Td
-(4672           // entry matches path element) 26.488 Tj
-0 -34.0364 Td
-(4673           off += \(uchar*\)ep - bp->data;) 26.488 Tj
-0 -35.3454 Td
-(4674           ninum = ep->inum;) 19.264 Tj
-0 -36.6545 Td
-(4675           brelse\(bp\);) 15.652 Tj
-0 -37.9636 Td
-(4676           cp += i;) 13.846 Tj
-0 -39.2727 Td
-(4677           goto found;) 15.652 Tj
-0 -40.5818 Td
-(4678         }) 8.428 Tj
-0 -41.8909 Td
-(4679       }) 7.224 Tj
-0 -43.2 Td
-(4680       brelse\(bp\);) 13.244 Tj
-0 -44.5091 Td
-(4681     }) 6.02 Tj
-0 -45.8182 Td
-(4682     atend = 1;) 11.438 Tj
-0 -47.1272 Td
-(4683     for\(cp1 = cp; *cp1; cp1++\)) 21.07 Tj
-0 -48.4363 Td
-(4684       if\(*cp1 == '/'\)) 15.652 Tj
-0 -49.7454 Td
-(4685         atend = 0;) 13.846 Tj
-0 -51.0545 Td
-(4686     if\(mode == NAMEI_CREATE && atend\){) 25.886 Tj
-0 -52.3636 Td
-(4687       if\(*cp == '\\0'\){) 16.254 Tj
-0 -53.6727 Td
-(4688         iput\(dp\);) 13.244 Tj
-0 -54.9818 Td
-(4689         return 0;) 13.244 Tj
-0 -56.2909 Td
-(4690       }) 7.224 Tj
-0 -57.6 Td
-(4691       *ret_last = cp;) 15.652 Tj
-0 -58.9091 Td
-(4692       return dp;) 12.642 Tj
-0 -60.2181 Td
-(4693     }) 6.02 Tj
-0 -61.5272 Td
-(4694 ) 3.01 Tj
-0 -62.8363 Td
-(4695     iput\(dp\);) 10.836 Tj
-0 -64.1454 Td
-(4696     return 0;) 10.836 Tj
-0 -65.4545 Td
-(4697 ) 3.01 Tj
-0 -66.7636 Td
-(4698 ) 3.01 Tj
-0 -68.0727 Td
-(4699 ) 3.01 Tj
-0 -72 Td
-(Sheet 46) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sysfile.c  Page 3) 174.741 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.476 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.055 Tj
+0 -113.92 Td
+(4659 }) 26.2111 Tj
+0 -123.414 Td
+(4660 ) 21.8426 Tj
+0 -132.907 Td
+(4661 // Create the path new as a link to the same inode as old.) 275.216 Tj
+0 -142.4 Td
+(4662 int) 34.9481 Tj
+0 -151.894 Td
+(4663 sys_link\(void\)) 83.0018 Tj
+0 -161.387 Td
+(4664 {) 26.2111 Tj
+0 -170.88 Td
+(4665   char name[DIRSIZ], *new, *old;) 161.635 Tj
+0 -180.374 Td
+(4666   struct inode *dp, *ip;) 126.687 Tj
+0 -189.867 Td
+(4667 ) 21.8426 Tj
+0 -199.361 Td
+(4668   if\(argstr\(0, &old\) < 0 || argstr\(1, &new\) < 0\)) 231.531 Tj
+0 -208.854 Td
+(4669     return -1;) 83.0018 Tj
+0 -218.347 Td
+(4670   if\(\(ip = namei\(old\)\) == 0\)) 144.161 Tj
+0 -227.841 Td
+(4671     return -1;) 83.0018 Tj
+0 -237.334 Td
+(4672   ilock\(ip\);) 74.2647 Tj
+0 -246.827 Td
+(4673   if\(ip->type == T_DIR\){) 126.687 Tj
+0 -256.321 Td
+(4674     iunlockput\(ip\);) 104.844 Tj
+0 -265.814 Td
+(4675     return -1;) 83.0018 Tj
+0 -275.307 Td
+(4676   }) 34.9481 Tj
+0 -284.801 Td
+(4677   ip->nlink++;) 83.0018 Tj
+0 -294.294 Td
+(4678   iupdate\(ip\);) 83.0018 Tj
+0 -303.788 Td
+(4679   iunlock\(ip\);) 83.0018 Tj
+0 -313.281 Td
+(4680 ) 21.8426 Tj
+0 -322.774 Td
+(4681   if\(\(dp = nameiparent\(new, name\)\) == 0\)) 196.583 Tj
+0 -332.268 Td
+(4682     goto  bad;) 83.0018 Tj
+0 -341.761 Td
+(4683   ilock\(dp\);) 74.2647 Tj
+0 -351.254 Td
+(4684   if\(dp->dev != ip->dev || dirlink\(dp, name, ip->inum\) \
+< 0\)) 279.585 Tj
+0 -360.748 Td
+(4685     goto bad;) 78.6333 Tj
+0 -370.241 Td
+(4686   iunlockput\(dp\);) 96.1073 Tj
+0 -379.734 Td
+(4687   iput\(ip\);) 69.8962 Tj
+0 -389.228 Td
+(4688   return 0;) 69.8962 Tj
+0 -398.721 Td
+(4689 ) 21.8426 Tj
+0 -408.214 Td
+(4690 bad:) 39.3166 Tj
+0 -417.708 Td
+(4691   if\(dp\)) 56.7907 Tj
+0 -427.201 Td
+(4692     iunlockput\(dp\);) 104.844 Tj
+0 -436.695 Td
+(4693   ilock\(ip\);) 74.2647 Tj
+0 -446.188 Td
+(4694   ip->nlink--;) 83.0018 Tj
+0 -455.681 Td
+(4695   iupdate\(ip\);) 83.0018 Tj
+0 -465.175 Td
+(4696   iunlockput\(ip\);) 96.1073 Tj
+0 -474.668 Td
+(4697   return -1;) 74.2647 Tj
+0 -484.161 Td
+(4698 }) 26.2111 Tj
+0 -493.655 Td
+(4699 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 46) 34.9481 Tj
 Q
 Q
 Q
@@ -15346,7 +16397,10 @@ pdfEndPage
 %%Page: 54 54
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -15354,241 +16408,257 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 14) 21.672 Tj
-0 -3.92728 Td
-(4700   found:) 7.826 Tj
-0 -5.23637 Td
-(4701     if\(mode == NAMEI_DELETE && *cp == '\\0'\){) 29.498 Tj
-0 -6.54546 Td
-(4702       *ret_off = off;) 15.652 Tj
-0 -7.85455 Td
-(4703       return dp;) 12.642 Tj
-0 -9.16364 Td
-(4704     }) 6.02 Tj
-0 -10.4727 Td
-(4705     dev = dp->dev;) 13.846 Tj
-0 -11.7818 Td
-(4706     iput\(dp\);) 10.836 Tj
-0 -13.0909 Td
-(4707     dp = iget\(dev, ninum\);) 18.662 Tj
-0 -14.4 Td
-(4708     if\(dp->type == 0 || dp->nlink < 1\)) 25.886 Tj
-0 -15.7091 Td
-(4709       panic\("namei"\);) 15.652 Tj
-0 -17.0182 Td
-(4710   }) 4.816 Tj
-0 -18.3273 Td
-(4711 }) 3.612 Tj
-0 -19.6364 Td
-(4712 ) 3.01 Tj
-0 -20.9455 Td
-(4713 // Write a new directory entry \(name, ino\) into the directory dp.) 42.14 Tj
-0 -22.2545 Td
-(4714 // Caller must have locked dp.) 21.07 Tj
-0 -23.5636 Td
-(4715 void) 5.418 Tj
-0 -24.8727 Td
-(4716 wdir\(struct inode *dp, char *name, uint ino\)) 29.498 Tj
-0 -26.1818 Td
-(4717 {) 3.612 Tj
-0 -27.4909 Td
-(4718   uint off;) 9.632 Tj
-0 -28.8 Td
-(4719   struct dirent de;) 14.448 Tj
-0 -30.1091 Td
-(4720   int i;) 7.826 Tj
-0 -31.4182 Td
-(4721 ) 3.01 Tj
-0 -32.7273 Td
-(4722   for\(off = 0; off < dp->size; off += sizeof\(de\)\){) 33.11 Tj
-0 -34.0364 Td
-(4723     if\(readi\(dp, \(char*\) &de, off, sizeof\(de\)\) != sizeof\(de\)\)) 39.732 Tj
-0 -35.3454 Td
-(4724       panic\("wdir read"\);) 18.06 Tj
-0 -36.6545 Td
-(4725     if\(de.inum == 0\)) 15.05 Tj
-0 -37.9636 Td
-(4726       break;) 10.234 Tj
-0 -39.2727 Td
-(4727   }) 4.816 Tj
-0 -40.5818 Td
-(4728 ) 3.01 Tj
-0 -41.8909 Td
-(4729   de.inum = ino;) 12.642 Tj
-0 -43.2 Td
-(4730   for\(i = 0; i < DIRSIZ && name[i]; i++\)) 27.09 Tj
-0 -44.5091 Td
-(4731     de.name[i] = name[i];) 18.06 Tj
-0 -45.8182 Td
-(4732   for\( ; i < DIRSIZ; i++\)) 18.06 Tj
-0 -47.1272 Td
-(4733     de.name[i] = '\\0';) 16.254 Tj
-0 -48.4363 Td
-(4734 ) 3.01 Tj
-0 -49.7454 Td
-(4735   if\(writei\(dp, \(char*\) &de, off, sizeof\(de\)\) != sizeof\(de\)\)) 39.13 Tj
-0 -51.0545 Td
-(4736     panic\("wdir write"\);) 17.458 Tj
-0 -52.3636 Td
-(4737 }) 3.612 Tj
-0 -53.6727 Td
-(4738 ) 3.01 Tj
-0 -54.9818 Td
-(4739 ) 3.01 Tj
-0 -56.2909 Td
-(4740 ) 3.01 Tj
-0 -57.6 Td
-(4741 ) 3.01 Tj
-0 -58.9091 Td
-(4742 ) 3.01 Tj
-0 -60.2181 Td
-(4743 ) 3.01 Tj
-0 -61.5272 Td
-(4744 ) 3.01 Tj
-0 -62.8363 Td
-(4745 ) 3.01 Tj
-0 -64.1454 Td
-(4746 ) 3.01 Tj
-0 -65.4545 Td
-(4747 ) 3.01 Tj
-0 -66.7636 Td
-(4748 ) 3.01 Tj
-0 -68.0727 Td
-(4749 ) 3.01 Tj
-0 -72 Td
-(Sheet 47) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sysfile.c  Page 4) 174.741 Tj
+0 -28.4801 Td
+(4700 // Is the directory dp empty except for "." and ".." ?) 257.742 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.844 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.111 Tj
+0 -104.427 Td
+(4708     if\(readi\(dp, \(char*\)&de, off, sizeof\(de\)\) != si\
+zeof\(de\)\)) 283.953 Tj
+0 -113.92 Td
+(4709       panic\("isdirempty: readi"\);) 166.004 Tj
+0 -123.414 Td
+(4710     if\(de.inum != 0\)) 109.213 Tj
+0 -132.907 Td
+(4711       return 0;) 87.3703 Tj
+0 -142.4 Td
+(4712   }) 34.9481 Tj
+0 -151.894 Td
+(4713   return 1;) 69.8962 Tj
+0 -161.387 Td
+(4714 }) 26.2111 Tj
+0 -170.88 Td
+(4715 ) 21.8426 Tj
+0 -180.374 Td
+(4716 ) 21.8426 Tj
+0 -189.867 Td
+(4717 ) 21.8426 Tj
+0 -199.361 Td
+(4718 ) 21.8426 Tj
+0 -208.854 Td
+(4719 ) 21.8426 Tj
+0 -218.347 Td
+(4720 ) 21.8426 Tj
+0 -227.841 Td
+(4721 ) 21.8426 Tj
+0 -237.334 Td
+(4722 ) 21.8426 Tj
+0 -246.827 Td
+(4723 ) 21.8426 Tj
+0 -256.321 Td
+(4724 ) 21.8426 Tj
+0 -265.814 Td
+(4725 ) 21.8426 Tj
+0 -275.307 Td
+(4726 ) 21.8426 Tj
+0 -284.801 Td
+(4727 ) 21.8426 Tj
+0 -294.294 Td
+(4728 ) 21.8426 Tj
+0 -303.788 Td
+(4729 ) 21.8426 Tj
+0 -313.281 Td
+(4730 ) 21.8426 Tj
+0 -322.774 Td
+(4731 ) 21.8426 Tj
+0 -332.268 Td
+(4732 ) 21.8426 Tj
+0 -341.761 Td
+(4733 ) 21.8426 Tj
+0 -351.254 Td
+(4734 ) 21.8426 Tj
+0 -360.748 Td
+(4735 ) 21.8426 Tj
+0 -370.241 Td
+(4736 ) 21.8426 Tj
+0 -379.734 Td
+(4737 ) 21.8426 Tj
+0 -389.228 Td
+(4738 ) 21.8426 Tj
+0 -398.721 Td
+(4739 ) 21.8426 Tj
+0 -408.214 Td
+(4740 ) 21.8426 Tj
+0 -417.708 Td
+(4741 ) 21.8426 Tj
+0 -427.201 Td
+(4742 ) 21.8426 Tj
+0 -436.695 Td
+(4743 ) 21.8426 Tj
+0 -446.188 Td
+(4744 ) 21.8426 Tj
+0 -455.681 Td
+(4745 ) 21.8426 Tj
+0 -465.175 Td
+(4746 ) 21.8426 Tj
+0 -474.668 Td
+(4747 ) 21.8426 Tj
+0 -484.161 Td
+(4748 ) 21.8426 Tj
+0 -493.655 Td
+(4749 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 15) 21.672 Tj
-0 -3.92728 Td
-(4750 // Create the path cp and return its locked inode structure.) 39.13 Tj
-0 -5.23637 Td
-(4751 // If cp already exists, return 0.) 23.478 Tj
-0 -6.54546 Td
-(4752 struct inode*) 10.836 Tj
-0 -7.85455 Td
-(4753 mknod\(char *cp, short type, short major, short minor\)) 34.916 Tj
-0 -9.16364 Td
-(4754 {) 3.612 Tj
-0 -10.4727 Td
-(4755   struct inode *ip, *dp;) 17.458 Tj
-0 -11.7818 Td
-(4756   char *last;) 10.836 Tj
-0 -13.0909 Td
-(4757 ) 3.01 Tj
-0 -14.4 Td
-(4758   if\(\(dp = namei\(cp, NAMEI_CREATE, 0, &last, 0\)\) == 0\)) 35.518 Tj
-0 -15.7091 Td
-(4759     return 0;) 10.836 Tj
-0 -17.0182 Td
-(4760 ) 3.01 Tj
-0 -18.3273 Td
-(4761   ip = mknod1\(dp, last, type, major, minor\);) 29.498 Tj
-0 -19.6364 Td
-(4762 ) 3.01 Tj
-0 -20.9455 Td
-(4763   iput\(dp\);) 9.632 Tj
-0 -22.2545 Td
-(4764 ) 3.01 Tj
-0 -23.5636 Td
-(4765   return ip;) 10.234 Tj
-0 -24.8727 Td
-(4766 }) 3.612 Tj
-0 -26.1818 Td
-(4767 ) 3.01 Tj
-0 -27.4909 Td
-(4768 // Create a new inode named name inside dp) 28.294 Tj
-0 -28.8 Td
-(4769 // and return its locked inode structure.) 27.692 Tj
-0 -30.1091 Td
-(4770 // If name already exists, return 0.) 24.682 Tj
-0 -31.4182 Td
-(4771 struct inode*) 10.836 Tj
-0 -32.7273 Td
-(4772 mknod1\(struct inode *dp, char *name, short type, short major, short minor\)) 47.558 Tj
-0 -34.0364 Td
-(4773 {) 3.612 Tj
-0 -35.3454 Td
-(4774   struct inode *ip;) 14.448 Tj
-0 -36.6545 Td
-(4775 ) 3.01 Tj
-0 -37.9636 Td
-(4776   ip = ialloc\(dp->dev, type\);) 20.468 Tj
-0 -39.2727 Td
-(4777   if\(ip == 0\)) 10.836 Tj
-0 -40.5818 Td
-(4778     return 0;) 10.836 Tj
-0 -41.8909 Td
-(4779   ip->major = major;) 15.05 Tj
-0 -43.2 Td
-(4780   ip->minor = minor;) 15.05 Tj
-0 -44.5091 Td
-(4781   ip->size = 0;) 12.04 Tj
-0 -45.8182 Td
-(4782   ip->nlink = 1;) 12.642 Tj
-0 -47.1272 Td
-(4783 ) 3.01 Tj
-0 -48.4363 Td
-(4784   iupdate\(ip\);  // write new inode to disk) 28.294 Tj
-0 -49.7454 Td
-(4785 ) 3.01 Tj
-0 -51.0545 Td
-(4786   wdir\(dp, name, ip->inum\);) 19.264 Tj
-0 -52.3636 Td
-(4787 ) 3.01 Tj
-0 -53.6727 Td
-(4788   return ip;) 10.234 Tj
-0 -54.9818 Td
-(4789 }) 3.612 Tj
-0 -56.2909 Td
-(4790 ) 3.01 Tj
-0 -57.6 Td
-(4791 ) 3.01 Tj
-0 -58.9091 Td
-(4792 ) 3.01 Tj
-0 -60.2181 Td
-(4793 ) 3.01 Tj
-0 -61.5272 Td
-(4794 ) 3.01 Tj
-0 -62.8363 Td
-(4795 ) 3.01 Tj
-0 -64.1454 Td
-(4796 ) 3.01 Tj
-0 -65.4545 Td
-(4797 ) 3.01 Tj
-0 -66.7636 Td
-(4798 ) 3.01 Tj
-0 -68.0727 Td
-(4799 ) 3.01 Tj
-0 -72 Td
-(Sheet 47) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sysfile.c  Page 5) 174.741 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.687 Tj
+0 -66.4535 Td
+(4754   struct dirent de;) 104.844 Tj
+0 -75.9469 Td
+(4755   char name[DIRSIZ], *path;) 139.792 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.424 Tj
+0 -113.92 Td
+(4759     return -1;) 83.0018 Tj
+0 -123.414 Td
+(4760   if\(\(dp = nameiparent\(path, name\)\) == 0\)) 200.952 Tj
+0 -132.907 Td
+(4761     return -1;) 83.0018 Tj
+0 -142.4 Td
+(4762   ilock\(dp\);) 74.2647 Tj
+0 -151.894 Td
+(4763 ) 21.8426 Tj
+0 -161.387 Td
+(4764   // Cannot unlink "." or "..".) 157.267 Tj
+0 -170.88 Td
+(4765   if\(namecmp\(name, "."\) == 0 || namecmp\(name, ".."\) =\
+= 0\){) 275.216 Tj
+0 -180.374 Td
+(4766     iunlockput\(dp\);) 104.844 Tj
+0 -189.867 Td
+(4767     return -1;) 83.0018 Tj
+0 -199.361 Td
+(4768   }) 34.9481 Tj
+0 -208.854 Td
+(4769 ) 21.8426 Tj
+0 -218.347 Td
+(4770   if\(\(ip = dirlookup\(dp, name, &off\)\) == 0\){) 214.057 Tj
+0 -227.841 Td
+(4771     iunlockput\(dp\);) 104.844 Tj
+0 -237.334 Td
+(4772     return -1;) 83.0018 Tj
+0 -246.827 Td
+(4773   }) 34.9481 Tj
+0 -256.321 Td
+(4774   ilock\(ip\);) 74.2647 Tj
+0 -265.814 Td
+(4775 ) 21.8426 Tj
+0 -275.307 Td
+(4776   if\(ip->nlink < 1\)) 104.844 Tj
+0 -284.801 Td
+(4777     panic\("unlink: nlink < 1"\);) 157.267 Tj
+0 -294.294 Td
+(4778   if\(ip->type == T_DIR && !isdirempty\(ip\)\){) 209.689 Tj
+0 -303.788 Td
+(4779     iunlockput\(ip\);) 104.844 Tj
+0 -313.281 Td
+(4780     iunlockput\(dp\);) 104.844 Tj
+0 -322.774 Td
+(4781     return -1;) 83.0018 Tj
+0 -332.268 Td
+(4782   }) 34.9481 Tj
+0 -341.761 Td
+(4783 ) 21.8426 Tj
+0 -351.254 Td
+(4784   memset\(&de, 0, sizeof\(de\)\);) 148.529 Tj
+0 -360.748 Td
+(4785   if\(writei\(dp, \(char*\)&de, off, sizeof\(de\)\) != siz\
+eof\(de\)\)) 279.585 Tj
+0 -370.241 Td
+(4786     panic\("unlink: writei"\);) 144.161 Tj
+0 -379.734 Td
+(4787   iunlockput\(dp\);) 96.1073 Tj
+0 -389.228 Td
+(4788 ) 21.8426 Tj
+0 -398.721 Td
+(4789   ip->nlink--;) 83.0018 Tj
+0 -408.214 Td
+(4790   iupdate\(ip\);) 83.0018 Tj
+0 -417.708 Td
+(4791   iunlockput\(ip\);) 96.1073 Tj
+0 -427.201 Td
+(4792   return 0;) 69.8962 Tj
+0 -436.695 Td
+(4793 }) 26.2111 Tj
+0 -446.188 Td
+(4794 ) 21.8426 Tj
+0 -455.681 Td
+(4795 ) 21.8426 Tj
+0 -465.175 Td
+(4796 ) 21.8426 Tj
+0 -474.668 Td
+(4797 ) 21.8426 Tj
+0 -484.161 Td
+(4798 ) 21.8426 Tj
+0 -493.655 Td
+(4799 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 47) 34.9481 Tj
 Q
 Q
 Q
@@ -15600,6 +16670,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -15607,241 +16680,260 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 16) 21.672 Tj
-0 -3.92728 Td
-(4800 // Unlink the inode named cp.) 20.468 Tj
-0 -5.23637 Td
-(4801 int) 4.816 Tj
-0 -6.54546 Td
-(4802 unlink\(char *cp\)) 12.642 Tj
-0 -7.85455 Td
-(4803 {) 3.612 Tj
-0 -9.16364 Td
-(4804   struct inode *ip, *dp;) 17.458 Tj
-0 -10.4727 Td
-(4805   struct dirent de;) 14.448 Tj
-0 -11.7818 Td
-(4806   uint off, inum, dev;) 16.254 Tj
-0 -13.0909 Td
-(4807 ) 3.01 Tj
-0 -14.4 Td
-(4808   dp = namei\(cp, NAMEI_DELETE, &off, 0, 0\);) 28.896 Tj
-0 -15.7091 Td
-(4809   if\(dp == 0\)) 10.836 Tj
-0 -17.0182 Td
-(4810     return -1;) 11.438 Tj
-0 -18.3273 Td
-(4811 ) 3.01 Tj
-0 -19.6364 Td
-(4812   dev = dp->dev;) 12.642 Tj
-0 -20.9455 Td
-(4813 ) 3.01 Tj
-0 -22.2545 Td
-(4814   if\(readi\(dp, \(char*\)&de, off, sizeof\(de\)\) != sizeof\(de\) || de.inum == 0\)) 47.558 Tj
-0 -23.5636 Td
-(4815     panic\("unlink no entry"\);) 20.468 Tj
-0 -24.8727 Td
-(4816 ) 3.01 Tj
-0 -26.1818 Td
-(4817   inum = de.inum;) 13.244 Tj
-0 -27.4909 Td
-(4818 ) 3.01 Tj
-0 -28.8 Td
-(4819   memset\(&de, 0, sizeof\(de\)\);) 20.468 Tj
-0 -30.1091 Td
-(4820   if\(writei\(dp, \(char*\)&de, off, sizeof\(de\)\) != sizeof\(de\)\)) 38.528 Tj
-0 -31.4182 Td
-(4821     panic\("unlink dir write"\);) 21.07 Tj
-0 -32.7273 Td
-(4822 ) 3.01 Tj
-0 -34.0364 Td
-(4823   iupdate\(dp\);) 11.438 Tj
-0 -35.3454 Td
-(4824   iput\(dp\);) 9.632 Tj
-0 -36.6545 Td
-(4825 ) 3.01 Tj
-0 -37.9636 Td
-(4826   ip = iget\(dev, inum\);) 16.856 Tj
-0 -39.2727 Td
-(4827 ) 3.01 Tj
-0 -40.5818 Td
-(4828   if\(ip->nlink < 1\)) 14.448 Tj
-0 -41.8909 Td
-(4829     panic\("unlink nlink < 1"\);) 21.07 Tj
-0 -43.2 Td
-(4830 ) 3.01 Tj
-0 -44.5091 Td
-(4831   ip->nlink--;) 11.438 Tj
-0 -45.8182 Td
-(4832 ) 3.01 Tj
-0 -47.1272 Td
-(4833   iupdate\(ip\);) 11.438 Tj
-0 -48.4363 Td
-(4834   iput\(ip\);) 9.632 Tj
-0 -49.7454 Td
-(4835 ) 3.01 Tj
-0 -51.0545 Td
-(4836   return 0;) 9.632 Tj
-0 -52.3636 Td
-(4837 }) 3.612 Tj
-0 -53.6727 Td
-(4838 ) 3.01 Tj
-0 -54.9818 Td
-(4839 ) 3.01 Tj
-0 -56.2909 Td
-(4840 ) 3.01 Tj
-0 -57.6 Td
-(4841 ) 3.01 Tj
-0 -58.9091 Td
-(4842 ) 3.01 Tj
-0 -60.2181 Td
-(4843 ) 3.01 Tj
-0 -61.5272 Td
-(4844 ) 3.01 Tj
-0 -62.8363 Td
-(4845 ) 3.01 Tj
-0 -64.1454 Td
-(4846 ) 3.01 Tj
-0 -65.4545 Td
-(4847 ) 3.01 Tj
-0 -66.7636 Td
-(4848 ) 3.01 Tj
-0 -68.0727 Td
-(4849 ) 3.01 Tj
-0 -72 Td
-(Sheet 48) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sysfile.c  Page 6) 174.741 Tj
+0 -28.4801 Td
+(4800 static struct inode*) 109.213 Tj
+0 -37.9735 Td
+(4801 create\(char *path, int canexist, short type, short major,\
+ short minor\)) 327.639 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.687 Tj
+0 -75.9469 Td
+(4805   char name[DIRSIZ];) 109.213 Tj
+0 -85.4403 Td
+(4806 ) 21.8426 Tj
+0 -94.9336 Td
+(4807   if\(\(dp = nameiparent\(path, name\)\) == 0\)) 200.952 Tj
+0 -104.427 Td
+(4808     return 0;) 78.6333 Tj
+0 -113.92 Td
+(4809   ilock\(dp\);) 74.2647 Tj
+0 -123.414 Td
+(4810 ) 21.8426 Tj
+0 -132.907 Td
+(4811   if\(canexist && \(ip = dirlookup\(dp, name, &off\)\) != \
+0\){) 266.479 Tj
+0 -142.4 Td
+(4812     iunlockput\(dp\);) 104.844 Tj
+0 -151.894 Td
+(4813     ilock\(ip\);) 83.0018 Tj
+0 -161.387 Td
+(4814     if\(ip->type != type || ip->major != major || ip->mino\
+r != minor\){) 323.27 Tj
+0 -170.88 Td
+(4815       iunlockput\(ip\);) 113.581 Tj
+0 -180.374 Td
+(4816       return 0;) 87.3703 Tj
+0 -189.867 Td
+(4817     }) 43.6851 Tj
+0 -199.361 Td
+(4818     return ip;) 83.0018 Tj
+0 -208.854 Td
+(4819   }) 34.9481 Tj
+0 -218.347 Td
+(4820 ) 21.8426 Tj
+0 -227.841 Td
+(4821   if\(\(ip = ialloc\(dp->dev, type\)\) == 0\){) 196.583 Tj
+0 -237.334 Td
+(4822     iunlockput\(dp\);) 104.844 Tj
+0 -246.827 Td
+(4823     return 0;) 78.6333 Tj
+0 -256.321 Td
+(4824   }) 34.9481 Tj
+0 -265.814 Td
+(4825   ilock\(ip\);) 74.2647 Tj
+0 -275.307 Td
+(4826   ip->major = major;) 109.213 Tj
+0 -284.801 Td
+(4827   ip->minor = minor;) 109.213 Tj
+0 -294.294 Td
+(4828   ip->nlink = 1;) 91.7388 Tj
+0 -303.788 Td
+(4829   iupdate\(ip\);) 83.0018 Tj
+0 -313.281 Td
+(4830 ) 21.8426 Tj
+0 -322.774 Td
+(4831   if\(dirlink\(dp, name, ip->inum\) < 0\){) 187.846 Tj
+0 -332.268 Td
+(4832     ip->nlink = 0;) 100.476 Tj
+0 -341.761 Td
+(4833     iunlockput\(ip\);) 104.844 Tj
+0 -351.254 Td
+(4834     iunlockput\(dp\);) 104.844 Tj
+0 -360.748 Td
+(4835     return 0;) 78.6333 Tj
+0 -370.241 Td
+(4836   }) 34.9481 Tj
+0 -379.734 Td
+(4837 ) 21.8426 Tj
+0 -389.228 Td
+(4838   if\(type == T_DIR\){  // Create . and .. entries.) 235.9 Tj
+0 -398.721 Td
+(4839     dp->nlink++;  // for "..") 148.529 Tj
+0 -408.214 Td
+(4840     iupdate\(dp\);) 91.7388 Tj
+0 -417.708 Td
+(4841     // No ip->nlink++ for ".": avoid cyclic ref count.) 257.742 Tj
+0 -427.201 Td
+(4842     if\(dirlink\(ip, ".", ip->inum\) < 0 || dirlink\(ip, "\
+..", dp->inum\) < 0\)) 340.744 Tj
+0 -436.695 Td
+(4843       panic\("create dots"\);) 139.792 Tj
+0 -446.188 Td
+(4844   }) 34.9481 Tj
+0 -455.681 Td
+(4845   iunlockput\(dp\);) 96.1073 Tj
+0 -465.175 Td
+(4846   return ip;) 74.2647 Tj
+0 -474.668 Td
+(4847 }) 26.2111 Tj
+0 -484.161 Td
+(4848 ) 21.8426 Tj
+0 -493.655 Td
+(4849 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/fs.c  Page 17) 21.672 Tj
-0 -3.92728 Td
-(4850 // Create the path new as a link to the same inode as old.) 37.926 Tj
-0 -5.23637 Td
-(4851 int) 4.816 Tj
-0 -6.54546 Td
-(4852 link\(char *name1, char *name2\)) 21.07 Tj
-0 -7.85455 Td
-(4853 {) 3.612 Tj
-0 -9.16364 Td
-(4854   struct inode *ip, *dp;) 17.458 Tj
-0 -10.4727 Td
-(4855   char *last;) 10.836 Tj
-0 -11.7818 Td
-(4856 ) 3.01 Tj
-0 -13.0909 Td
-(4857   if\(\(ip = namei\(name1, NAMEI_LOOKUP, 0, 0, 0\)\) == 0\)) 34.916 Tj
-0 -14.4 Td
-(4858     return -1;) 11.438 Tj
-0 -15.7091 Td
-(4859   if\(ip->type == T_DIR\){) 17.458 Tj
-0 -17.0182 Td
-(4860     iput\(ip\);) 10.836 Tj
-0 -18.3273 Td
-(4861     return -1;) 11.438 Tj
-0 -19.6364 Td
-(4862   }) 4.816 Tj
-0 -20.9455 Td
-(4863 ) 3.01 Tj
-0 -22.2545 Td
-(4864   iunlock\(ip\);) 11.438 Tj
-0 -23.5636 Td
-(4865 ) 3.01 Tj
-0 -24.8727 Td
-(4866   if\(\(dp = namei\(name2, NAMEI_CREATE, 0, &last, 0\)\) == 0\) {) 38.528 Tj
-0 -26.1818 Td
-(4867     idecref\(ip\);) 12.642 Tj
-0 -27.4909 Td
-(4868     return -1;) 11.438 Tj
-0 -28.8 Td
-(4869   }) 4.816 Tj
-0 -30.1091 Td
-(4870   if\(dp->dev != ip->dev\){) 18.06 Tj
-0 -31.4182 Td
-(4871     idecref\(ip\);) 12.642 Tj
-0 -32.7273 Td
-(4872     iput\(dp\);) 10.836 Tj
-0 -34.0364 Td
-(4873     return -1;) 11.438 Tj
-0 -35.3454 Td
-(4874   }) 4.816 Tj
-0 -36.6545 Td
-(4875 ) 3.01 Tj
-0 -37.9636 Td
-(4876   ilock\(ip\);) 10.234 Tj
-0 -39.2727 Td
-(4877   ip->nlink++;) 11.438 Tj
-0 -40.5818 Td
-(4878   iupdate\(ip\);) 11.438 Tj
-0 -41.8909 Td
-(4879 ) 3.01 Tj
-0 -43.2 Td
-(4880   wdir\(dp, last, ip->inum\);) 19.264 Tj
-0 -44.5091 Td
-(4881   iput\(dp\);) 9.632 Tj
-0 -45.8182 Td
-(4882   iput\(ip\);) 9.632 Tj
-0 -47.1272 Td
-(4883 ) 3.01 Tj
-0 -48.4363 Td
-(4884   return 0;) 9.632 Tj
-0 -49.7454 Td
-(4885 }) 3.612 Tj
-0 -51.0545 Td
-(4886 ) 3.01 Tj
-0 -52.3636 Td
-(4887 ) 3.01 Tj
-0 -53.6727 Td
-(4888 ) 3.01 Tj
-0 -54.9818 Td
-(4889 ) 3.01 Tj
-0 -56.2909 Td
-(4890 ) 3.01 Tj
-0 -57.6 Td
-(4891 ) 3.01 Tj
-0 -58.9091 Td
-(4892 ) 3.01 Tj
-0 -60.2181 Td
-(4893 ) 3.01 Tj
-0 -61.5272 Td
-(4894 ) 3.01 Tj
-0 -62.8363 Td
-(4895 ) 3.01 Tj
-0 -64.1454 Td
-(4896 ) 3.01 Tj
-0 -65.4545 Td
-(4897 ) 3.01 Tj
-0 -66.7636 Td
-(4898 ) 3.01 Tj
-0 -68.0727 Td
-(4899 ) 3.01 Tj
-0 -72 Td
-(Sheet 48) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sysfile.c  Page 7) 174.741 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.844 Tj
+0 -94.9336 Td
+(4857 ) 21.8426 Tj
+0 -104.427 Td
+(4858   if\(argstr\(0, &path\) < 0 || argint\(1, &omode\) < 0\)) 244.637 Tj
+0 -113.92 Td
+(4859     return -1;) 83.0018 Tj
+0 -123.414 Td
+(4860 ) 21.8426 Tj
+0 -132.907 Td
+(4861   if\(omode & O_CREATE\){) 122.318 Tj
+0 -142.4 Td
+(4862     if\(\(ip = create\(path, 1, T_FILE, 0, 0\)\) == 0\)) 235.9 Tj
+0 -151.894 Td
+(4863       return -1;) 91.7388 Tj
+0 -161.387 Td
+(4864   } else {) 65.5277 Tj
+0 -170.88 Td
+(4865     if\(\(ip = namei\(path\)\) == 0\)) 157.267 Tj
+0 -180.374 Td
+(4866       return -1;) 91.7388 Tj
+0 -189.867 Td
+(4867     ilock\(ip\);) 83.0018 Tj
+0 -199.361 Td
+(4868     if\(ip->type == T_DIR && \(omode & \(O_RDWR|O_WRONLY\)\
+\)\){) 270.848 Tj
+0 -208.854 Td
+(4869       iunlockput\(ip\);) 113.581 Tj
+0 -218.347 Td
+(4870       return -1;) 91.7388 Tj
+0 -227.841 Td
+(4871     }) 43.6851 Tj
+0 -237.334 Td
+(4872   }) 34.9481 Tj
+0 -246.827 Td
+(4873 ) 21.8426 Tj
+0 -256.321 Td
+(4874   if\(\(f = filealloc\(\)\) == 0 || \(fd = fdalloc\(f\)\) \
+< 0\){) 257.742 Tj
+0 -265.814 Td
+(4875     if\(f\)) 61.1592 Tj
+0 -275.307 Td
+(4876       fileclose\(f\);) 104.844 Tj
+0 -284.801 Td
+(4877     iunlockput\(ip\);) 104.844 Tj
+0 -294.294 Td
+(4878     return -1;) 83.0018 Tj
+0 -303.788 Td
+(4879   }) 34.9481 Tj
+0 -313.281 Td
+(4880   iunlock\(ip\);) 83.0018 Tj
+0 -322.774 Td
+(4881 ) 21.8426 Tj
+0 -332.268 Td
+(4882   f->type = FD_INODE;) 113.581 Tj
+0 -341.761 Td
+(4883   f->ip = ip;) 78.6333 Tj
+0 -351.254 Td
+(4884   f->off = 0;) 78.6333 Tj
+0 -360.748 Td
+(4885   f->readable = !\(omode & O_WRONLY\);) 179.109 Tj
+0 -370.241 Td
+(4886   f->writable = \(omode & O_WRONLY\) || \(omode & O_RDWR\)\
+;) 262.111 Tj
+0 -379.734 Td
+(4887 ) 21.8426 Tj
+0 -389.228 Td
+(4888   return fd;) 74.2647 Tj
+0 -398.721 Td
+(4889 }) 26.2111 Tj
+0 -408.214 Td
+(4890 ) 21.8426 Tj
+0 -417.708 Td
+(4891 ) 21.8426 Tj
+0 -427.201 Td
+(4892 ) 21.8426 Tj
+0 -436.695 Td
+(4893 ) 21.8426 Tj
+0 -446.188 Td
+(4894 ) 21.8426 Tj
+0 -455.681 Td
+(4895 ) 21.8426 Tj
+0 -465.175 Td
+(4896 ) 21.8426 Tj
+0 -474.668 Td
+(4897 ) 21.8426 Tj
+0 -484.161 Td
+(4898 ) 21.8426 Tj
+0 -493.655 Td
+(4899 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 48) 34.9481 Tj
 Q
 Q
 Q
@@ -15852,7 +16944,10 @@ pdfEndPage
 %%Page: 56 56
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -15860,241 +16955,257 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/file.c  Page 1) 22.274 Tj
-0 -3.92728 Td
-(4900 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(4901 #include "stat.h") 13.244 Tj
-0 -6.54546 Td
-(4902 #include "param.h") 13.846 Tj
-0 -7.85455 Td
-(4903 #include "x86.h") 12.642 Tj
-0 -9.16364 Td
-(4904 #include "mmu.h") 12.642 Tj
-0 -10.4727 Td
-(4905 #include "proc.h") 13.244 Tj
-0 -11.7818 Td
-(4906 #include "defs.h") 13.244 Tj
-0 -13.0909 Td
-(4907 #include "file.h") 13.244 Tj
-0 -14.4 Td
-(4908 #include "spinlock.h") 15.652 Tj
-0 -15.7091 Td
-(4909 #include "dev.h") 12.642 Tj
-0 -17.0182 Td
-(4910 #include "fs.h") 12.04 Tj
-0 -18.3273 Td
-(4911 #include "fsvar.h") 13.846 Tj
-0 -19.6364 Td
-(4912 ) 3.01 Tj
-0 -20.9455 Td
-(4913 struct spinlock file_table_lock;) 22.274 Tj
-0 -22.2545 Td
-(4914 struct devsw devsw[NDEV];) 18.06 Tj
-0 -23.5636 Td
-(4915 ) 3.01 Tj
-0 -24.8727 Td
-(4916 struct file file[NFILE];) 17.458 Tj
-0 -26.1818 Td
-(4917 ) 3.01 Tj
-0 -27.4909 Td
-(4918 void) 5.418 Tj
-0 -28.8 Td
-(4919 fileinit\(void\)) 11.438 Tj
-0 -30.1091 Td
-(4920 {) 3.612 Tj
-0 -31.4182 Td
-(4921   initlock\(&file_table_lock, "file_table"\);) 28.896 Tj
-0 -32.7273 Td
-(4922 }) 3.612 Tj
-0 -34.0364 Td
-(4923 ) 3.01 Tj
-0 -35.3454 Td
-(4924 // Allocate a file structure) 19.866 Tj
-0 -36.6545 Td
-(4925 struct file*) 10.234 Tj
-0 -37.9636 Td
-(4926 filealloc\(void\)) 12.04 Tj
-0 -39.2727 Td
-(4927 {) 3.612 Tj
-0 -40.5818 Td
-(4928   int i;) 7.826 Tj
-0 -41.8909 Td
-(4929 ) 3.01 Tj
-0 -43.2 Td
-(4930   acquire\(&file_table_lock\);) 19.866 Tj
-0 -44.5091 Td
-(4931   for\(i = 0; i < NFILE; i++\){) 20.468 Tj
-0 -45.8182 Td
-(4932     if\(file[i].type == FD_CLOSED\){) 23.478 Tj
-0 -47.1272 Td
-(4933       file[i].type = FD_NONE;) 20.468 Tj
-0 -48.4363 Td
-(4934       file[i].ref = 1;) 16.254 Tj
-0 -49.7454 Td
-(4935       release\(&file_table_lock\);) 22.274 Tj
-0 -51.0545 Td
-(4936       return file + i;) 16.254 Tj
-0 -52.3636 Td
-(4937     }) 6.02 Tj
-0 -53.6727 Td
-(4938   }) 4.816 Tj
-0 -54.9818 Td
-(4939   release\(&file_table_lock\);) 19.866 Tj
-0 -56.2909 Td
-(4940   return 0;) 9.632 Tj
-0 -57.6 Td
-(4941 }) 3.612 Tj
-0 -58.9091 Td
-(4942 ) 3.01 Tj
-0 -60.2181 Td
-(4943 ) 3.01 Tj
-0 -61.5272 Td
-(4944 ) 3.01 Tj
-0 -62.8363 Td
-(4945 ) 3.01 Tj
-0 -64.1454 Td
-(4946 ) 3.01 Tj
-0 -65.4545 Td
-(4947 ) 3.01 Tj
-0 -66.7636 Td
-(4948 ) 3.01 Tj
-0 -68.0727 Td
-(4949 ) 3.01 Tj
-0 -72 Td
-(Sheet 49) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sysfile.c  Page 8) 174.741 Tj
+0 -28.4801 Td
+(4900 int) 34.9481 Tj
+0 -37.9735 Td
+(4901 sys_mknod\(void\)) 87.3703 Tj
+0 -47.4668 Td
+(4902 {) 26.2111 Tj
+0 -56.9602 Td
+(4903   struct inode *ip;) 104.844 Tj
+0 -66.4535 Td
+(4904   char *path;) 78.6333 Tj
+0 -75.9469 Td
+(4905   int len;) 65.5277 Tj
+0 -85.4403 Td
+(4906   int major, minor;) 104.844 Tj
+0 -94.9336 Td
+(4907 ) 21.8426 Tj
+0 -104.427 Td
+(4908   if\(\(len=argstr\(0, &path\)\) < 0 ||) 170.372 Tj
+0 -113.92 Td
+(4909      argint\(1, &major\) < 0 ||) 148.529 Tj
+0 -123.414 Td
+(4910      argint\(2, &minor\) < 0 ||) 148.529 Tj
+0 -132.907 Td
+(4911      \(ip = create\(path, 0, T_DEV, major, minor\)\) == 0\)) 257.742 Tj
+0 -142.4 Td
+(4912     return -1;) 83.0018 Tj
+0 -151.894 Td
+(4913   iunlockput\(ip\);) 96.1073 Tj
+0 -161.387 Td
+(4914   return 0;) 69.8962 Tj
+0 -170.88 Td
+(4915 }) 26.2111 Tj
+0 -180.374 Td
+(4916 ) 21.8426 Tj
+0 -189.867 Td
+(4917 int) 34.9481 Tj
+0 -199.361 Td
+(4918 sys_mkdir\(void\)) 87.3703 Tj
+0 -208.854 Td
+(4919 {) 26.2111 Tj
+0 -218.347 Td
+(4920   char *path;) 78.6333 Tj
+0 -227.841 Td
+(4921   struct inode *ip;) 104.844 Tj
+0 -237.334 Td
+(4922 ) 21.8426 Tj
+0 -246.827 Td
+(4923   if\(argstr\(0, &path\) < 0 || \(ip = create\(path, 0, T_\
+DIR, 0, 0\)\) == 0\)) 327.639 Tj
+0 -256.321 Td
+(4924     return -1;) 83.0018 Tj
+0 -265.814 Td
+(4925   iunlockput\(ip\);) 96.1073 Tj
+0 -275.307 Td
+(4926   return 0;) 69.8962 Tj
+0 -284.801 Td
+(4927 }) 26.2111 Tj
+0 -294.294 Td
+(4928 ) 21.8426 Tj
+0 -303.788 Td
+(4929 int) 34.9481 Tj
+0 -313.281 Td
+(4930 sys_chdir\(void\)) 87.3703 Tj
+0 -322.774 Td
+(4931 {) 26.2111 Tj
+0 -332.268 Td
+(4932   char *path;) 78.6333 Tj
+0 -341.761 Td
+(4933   struct inode *ip;) 104.844 Tj
+0 -351.254 Td
+(4934 ) 21.8426 Tj
+0 -360.748 Td
+(4935   if\(argstr\(0, &path\) < 0 || \(ip = namei\(path\)\) == \
+0\)) 253.374 Tj
+0 -370.241 Td
+(4936     return -1;) 83.0018 Tj
+0 -379.734 Td
+(4937   ilock\(ip\);) 74.2647 Tj
+0 -389.228 Td
+(4938   if\(ip->type != T_DIR\){) 126.687 Tj
+0 -398.721 Td
+(4939     iunlockput\(ip\);) 104.844 Tj
+0 -408.214 Td
+(4940     return -1;) 83.0018 Tj
+0 -417.708 Td
+(4941   }) 34.9481 Tj
+0 -427.201 Td
+(4942   iunlock\(ip\);) 83.0018 Tj
+0 -436.695 Td
+(4943   iput\(cp->cwd\);) 91.7388 Tj
+0 -446.188 Td
+(4944   cp->cwd = ip;) 87.3703 Tj
+0 -455.681 Td
+(4945   return 0;) 69.8962 Tj
+0 -465.175 Td
+(4946 }) 26.2111 Tj
+0 -474.668 Td
+(4947 ) 21.8426 Tj
+0 -484.161 Td
+(4948 ) 21.8426 Tj
+0 -493.655 Td
+(4949 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/file.c  Page 2) 22.274 Tj
-0 -3.92728 Td
-(4950 // Write to file f.  Addr is kernel address.) 29.498 Tj
-0 -5.23637 Td
-(4951 int) 4.816 Tj
-0 -6.54546 Td
-(4952 filewrite\(struct file *f, char *addr, int n\)) 29.498 Tj
-0 -7.85455 Td
-(4953 {) 3.612 Tj
-0 -9.16364 Td
-(4954   if\(f->writable == 0\)) 16.254 Tj
-0 -10.4727 Td
-(4955     return -1;) 11.438 Tj
-0 -11.7818 Td
-(4956   if\(f->type == FD_PIPE\){) 18.06 Tj
-0 -13.0909 Td
-(4957     return pipe_write\(f->pipe, addr, n\);) 27.09 Tj
-0 -14.4 Td
-(4958   } else if\(f->type == FD_FILE\) {) 22.876 Tj
-0 -15.7091 Td
-(4959     ilock\(f->ip\);) 13.244 Tj
-0 -17.0182 Td
-(4960     int r = writei\(f->ip, addr, f->off, n\);) 28.896 Tj
-0 -18.3273 Td
-(4961     if\(r > 0\) {) 12.04 Tj
-0 -19.6364 Td
-(4962       f->off += r;) 13.846 Tj
-0 -20.9455 Td
-(4963     }) 6.02 Tj
-0 -22.2545 Td
-(4964     iunlock\(f->ip\);) 14.448 Tj
-0 -23.5636 Td
-(4965     return r;) 10.836 Tj
-0 -24.8727 Td
-(4966   } else {) 9.03 Tj
-0 -26.1818 Td
-(4967     panic\("filewrite"\);) 16.856 Tj
-0 -27.4909 Td
-(4968     return -1;) 11.438 Tj
-0 -28.8 Td
-(4969   }) 4.816 Tj
-0 -30.1091 Td
-(4970 }) 3.612 Tj
-0 -31.4182 Td
-(4971 ) 3.01 Tj
-0 -32.7273 Td
-(4972 // Read from file f.  Addr is kernel address.) 30.1 Tj
-0 -34.0364 Td
-(4973 int) 4.816 Tj
-0 -35.3454 Td
-(4974 fileread\(struct file *f, char *addr, int n\)) 28.896 Tj
-0 -36.6545 Td
-(4975 {) 3.612 Tj
-0 -37.9636 Td
-(4976   if\(f->readable == 0\)) 16.254 Tj
-0 -39.2727 Td
-(4977     return -1;) 11.438 Tj
-0 -40.5818 Td
-(4978   if\(f->type == FD_PIPE\){) 18.06 Tj
-0 -41.8909 Td
-(4979     return pipe_read\(f->pipe, addr, n\);) 26.488 Tj
-0 -43.2 Td
-(4980   } else if\(f->type == FD_FILE\){) 22.274 Tj
-0 -44.5091 Td
-(4981     ilock\(f->ip\);) 13.244 Tj
-0 -45.8182 Td
-(4982     int cc = readi\(f->ip, addr, f->off, n\);) 28.896 Tj
-0 -47.1272 Td
-(4983     if\(cc > 0\)) 11.438 Tj
-0 -48.4363 Td
-(4984       f->off += cc;) 14.448 Tj
-0 -49.7454 Td
-(4985     iunlock\(f->ip\);) 14.448 Tj
-0 -51.0545 Td
-(4986     return cc;) 11.438 Tj
-0 -52.3636 Td
-(4987   } else {) 9.03 Tj
-0 -53.6727 Td
-(4988     panic\("fileread"\);) 16.254 Tj
-0 -54.9818 Td
-(4989     return -1;) 11.438 Tj
-0 -56.2909 Td
-(4990   }) 4.816 Tj
-0 -57.6 Td
-(4991 }) 3.612 Tj
-0 -58.9091 Td
-(4992 ) 3.01 Tj
-0 -60.2181 Td
-(4993 ) 3.01 Tj
-0 -61.5272 Td
-(4994 ) 3.01 Tj
-0 -62.8363 Td
-(4995 ) 3.01 Tj
-0 -64.1454 Td
-(4996 ) 3.01 Tj
-0 -65.4545 Td
-(4997 ) 3.01 Tj
-0 -66.7636 Td
-(4998 ) 3.01 Tj
-0 -68.0727 Td
-(4999 ) 3.01 Tj
-0 -72 Td
-(Sheet 49) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sysfile.c  Page 9) 174.741 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.687 Tj
+0 -66.4535 Td
+(4954   int i;) 56.7907 Tj
+0 -75.9469 Td
+(4955   uint uargv, uarg;) 104.844 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.848 Tj
+0 -104.427 Td
+(4958     return -1;) 83.0018 Tj
+0 -113.92 Td
+(4959   memset\(argv, 0, sizeof\(argv\)\);) 161.635 Tj
+0 -123.414 Td
+(4960   for\(i=0;; i++\){) 96.1073 Tj
+0 -132.907 Td
+(4961     if\(i >= NELEM\(argv\)\)) 126.687 Tj
+0 -142.4 Td
+(4962       return -1;) 91.7388 Tj
+0 -151.894 Td
+(4963     if\(fetchint\(cp, uargv+4*i, \(int*\)&uarg\) < 0\)) 231.531 Tj
+0 -161.387 Td
+(4964       return -1;) 91.7388 Tj
+0 -170.88 Td
+(4965     if\(uarg == 0\){) 100.476 Tj
+0 -180.374 Td
+(4966       argv[i] = 0;) 100.476 Tj
+0 -189.867 Td
+(4967       break;) 74.2647 Tj
+0 -199.361 Td
+(4968     }) 43.6851 Tj
+0 -208.854 Td
+(4969     if\(fetchstr\(cp, uarg, &argv[i]\) < 0\)) 196.583 Tj
+0 -218.347 Td
+(4970       return -1;) 91.7388 Tj
+0 -227.841 Td
+(4971   }) 34.9481 Tj
+0 -237.334 Td
+(4972   return exec\(path, argv\);) 135.424 Tj
+0 -246.827 Td
+(4973 }) 26.2111 Tj
+0 -256.321 Td
+(4974 ) 21.8426 Tj
+0 -265.814 Td
+(4975 int) 34.9481 Tj
+0 -275.307 Td
+(4976 sys_pipe\(void\)) 83.0018 Tj
+0 -284.801 Td
+(4977 {) 26.2111 Tj
+0 -294.294 Td
+(4978   int *fd;) 65.5277 Tj
+0 -303.788 Td
+(4979   struct file *rf, *wf;) 122.318 Tj
+0 -313.281 Td
+(4980   int fd0, fd1;) 87.3703 Tj
+0 -322.774 Td
+(4981 ) 21.8426 Tj
+0 -332.268 Td
+(4982   if\(argptr\(0, \(void*\)&fd, 2*sizeof\(fd[0]\)\) < 0\)) 231.531 Tj
+0 -341.761 Td
+(4983     return -1;) 83.0018 Tj
+0 -351.254 Td
+(4984   if\(pipealloc\(&rf, &wf\) < 0\)) 148.529 Tj
+0 -360.748 Td
+(4985     return -1;) 83.0018 Tj
+0 -370.241 Td
+(4986   fd0 = -1;) 69.8962 Tj
+0 -379.734 Td
+(4987   if\(\(fd0 = fdalloc\(rf\)\) < 0 || \(fd1 = fdalloc\(wf\)\
+\) < 0\){) 270.848 Tj
+0 -389.228 Td
+(4988     if\(fd0 >= 0\)) 91.7388 Tj
+0 -398.721 Td
+(4989       cp->ofile[fd0] = 0;) 131.055 Tj
+0 -408.214 Td
+(4990     fileclose\(rf\);) 100.476 Tj
+0 -417.708 Td
+(4991     fileclose\(wf\);) 100.476 Tj
+0 -427.201 Td
+(4992     return -1;) 83.0018 Tj
+0 -436.695 Td
+(4993   }) 34.9481 Tj
+0 -446.188 Td
+(4994   fd[0] = fd0;) 83.0018 Tj
+0 -455.681 Td
+(4995   fd[1] = fd1;) 83.0018 Tj
+0 -465.175 Td
+(4996   return 0;) 69.8962 Tj
+0 -474.668 Td
+(4997 }) 26.2111 Tj
+0 -484.161 Td
+(4998 ) 21.8426 Tj
+0 -493.655 Td
+(4999 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 49) 34.9481 Tj
 Q
 Q
 Q
@@ -16106,6 +17217,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -16113,241 +17227,260 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/file.c  Page 3) 22.274 Tj
-0 -3.92728 Td
-(5000 // Close file f.  \(Decrement ref count, close when reaches 0.\)) 40.334 Tj
-0 -5.23637 Td
-(5001 void) 5.418 Tj
-0 -6.54546 Td
-(5002 fileclose\(struct file *f\)) 18.06 Tj
-0 -7.85455 Td
-(5003 {) 3.612 Tj
-0 -9.16364 Td
-(5004   acquire\(&file_table_lock\);) 19.866 Tj
-0 -10.4727 Td
-(5005 ) 3.01 Tj
-0 -11.7818 Td
-(5006   if\(f->ref < 1 || f->type == FD_CLOSED\)) 27.09 Tj
-0 -13.0909 Td
-(5007     panic\("fileclose"\);) 16.856 Tj
-0 -14.4 Td
-(5008 ) 3.01 Tj
-0 -15.7091 Td
-(5009   if\(--f->ref == 0\){) 15.05 Tj
-0 -17.0182 Td
-(5010     struct file dummy = *f;) 19.264 Tj
-0 -18.3273 Td
-(5011 ) 3.01 Tj
-0 -19.6364 Td
-(5012     f->ref = 0;) 12.04 Tj
-0 -20.9455 Td
-(5013     f->type = FD_CLOSED;) 17.458 Tj
-0 -22.2545 Td
-(5014     release\(&file_table_lock\);) 21.07 Tj
-0 -23.5636 Td
-(5015 ) 3.01 Tj
-0 -24.8727 Td
-(5016     if\(dummy.type == FD_PIPE\){) 21.07 Tj
-0 -26.1818 Td
-(5017       pipe_close\(dummy.pipe, dummy.writable\);) 30.1 Tj
-0 -27.4909 Td
-(5018     } else if\(dummy.type == FD_FILE\){) 25.284 Tj
-0 -28.8 Td
-(5019       idecref\(dummy.ip\);) 17.458 Tj
-0 -30.1091 Td
-(5020     } else {) 10.234 Tj
-0 -31.4182 Td
-(5021       panic\("fileclose"\);) 18.06 Tj
-0 -32.7273 Td
-(5022     }) 6.02 Tj
-0 -34.0364 Td
-(5023   } else {) 9.03 Tj
-0 -35.3454 Td
-(5024     release\(&file_table_lock\);) 21.07 Tj
-0 -36.6545 Td
-(5025   }) 4.816 Tj
-0 -37.9636 Td
-(5026 }) 3.612 Tj
-0 -39.2727 Td
-(5027 ) 3.01 Tj
-0 -40.5818 Td
-(5028 // Get metadata about file f.) 20.468 Tj
-0 -41.8909 Td
-(5029 int) 4.816 Tj
-0 -43.2 Td
-(5030 filestat\(struct file *f, struct stat *st\)) 27.692 Tj
-0 -44.5091 Td
-(5031 {) 3.612 Tj
-0 -45.8182 Td
-(5032   if\(f->type == FD_FILE\){) 18.06 Tj
-0 -47.1272 Td
-(5033     ilock\(f->ip\);) 13.244 Tj
-0 -48.4363 Td
-(5034     stati\(f->ip, st\);) 15.652 Tj
-0 -49.7454 Td
-(5035     iunlock\(f->ip\);) 14.448 Tj
-0 -51.0545 Td
-(5036     return 0;) 10.836 Tj
-0 -52.3636 Td
-(5037   } else) 7.826 Tj
-0 -53.6727 Td
-(5038     return -1;) 11.438 Tj
-0 -54.9818 Td
-(5039 }) 3.612 Tj
-0 -56.2909 Td
-(5040 ) 3.01 Tj
-0 -57.6 Td
-(5041 ) 3.01 Tj
-0 -58.9091 Td
-(5042 ) 3.01 Tj
-0 -60.2181 Td
-(5043 ) 3.01 Tj
-0 -61.5272 Td
-(5044 ) 3.01 Tj
-0 -62.8363 Td
-(5045 ) 3.01 Tj
-0 -64.1454 Td
-(5046 ) 3.01 Tj
-0 -65.4545 Td
-(5047 ) 3.01 Tj
-0 -66.7636 Td
-(5048 ) 3.01 Tj
-0 -68.0727 Td
-(5049 ) 3.01 Tj
-0 -72 Td
-(Sheet 50) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/exec.c  Page 1) 161.635 Tj
+0 -28.4801 Td
+(5000 #include "types.h") 100.476 Tj
+0 -37.9735 Td
+(5001 #include "param.h") 100.476 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.92 Td
+(5009 exec\(char *path, char **argv\)) 148.529 Tj
+0 -123.414 Td
+(5010 {) 26.2111 Tj
+0 -132.907 Td
+(5011   char *mem, *s, *last;) 122.318 Tj
+0 -142.4 Td
+(5012   int i, argc, arglen, len, off;) 161.635 Tj
+0 -151.894 Td
+(5013   uint sz, sp, argp;) 109.213 Tj
+0 -161.387 Td
+(5014   struct elfhdr elf;) 109.213 Tj
+0 -170.88 Td
+(5015   struct inode *ip;) 104.844 Tj
+0 -180.374 Td
+(5016   struct proghdr ph;) 109.213 Tj
+0 -189.867 Td
+(5017 ) 21.8426 Tj
+0 -199.361 Td
+(5018   if\(\(ip = namei\(path\)\) == 0\)) 148.529 Tj
+0 -208.854 Td
+(5019     return -1;) 83.0018 Tj
+0 -218.347 Td
+(5020   ilock\(ip\);) 74.2647 Tj
+0 -227.841 Td
+(5021 ) 21.8426 Tj
+0 -237.334 Td
+(5022   // Compute memory size of new process.) 196.583 Tj
+0 -246.827 Td
+(5023   mem = 0;) 65.5277 Tj
+0 -256.321 Td
+(5024   sz = 0;) 61.1592 Tj
+0 -265.814 Td
+(5025 ) 21.8426 Tj
+0 -275.307 Td
+(5026   // Program segments.) 117.95 Tj
+0 -284.801 Td
+(5027   if\(readi\(ip, \(char*\)&elf, 0, sizeof\(elf\)\) < sizeo\
+f\(elf\)\)) 275.216 Tj
+0 -294.294 Td
+(5028     goto bad;) 78.6333 Tj
+0 -303.788 Td
+(5029   if\(elf.magic != ELF_MAGIC\)) 144.161 Tj
+0 -313.281 Td
+(5030     goto bad;) 78.6333 Tj
+0 -322.774 Td
+(5031   for\(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof\(\
+ph\)\){) 288.322 Tj
+0 -332.268 Td
+(5032     if\(readi\(ip, \(char*\)&ph, off, sizeof\(ph\)\) != si\
+zeof\(ph\)\)) 283.953 Tj
+0 -341.761 Td
+(5033       goto bad;) 87.3703 Tj
+0 -351.254 Td
+(5034     if\(ph.type != ELF_PROG_LOAD\)) 161.635 Tj
+0 -360.748 Td
+(5035       continue;) 87.3703 Tj
+0 -370.241 Td
+(5036     if\(ph.memsz < ph.filesz\)) 144.161 Tj
+0 -379.734 Td
+(5037       goto bad;) 87.3703 Tj
+0 -389.228 Td
+(5038     sz += ph.memsz;) 104.844 Tj
+0 -398.721 Td
+(5039   }) 34.9481 Tj
+0 -408.214 Td
+(5040 ) 21.8426 Tj
+0 -417.708 Td
+(5041   // Arguments.) 87.3703 Tj
+0 -427.201 Td
+(5042   arglen = 0;) 78.6333 Tj
+0 -436.695 Td
+(5043   for\(argc=0; argv[argc]; argc++\)) 166.004 Tj
+0 -446.188 Td
+(5044     arglen += strlen\(argv[i]\) + 1;) 170.372 Tj
+0 -455.681 Td
+(5045   arglen = \(arglen+3\) & ~3;) 139.792 Tj
+0 -465.175 Td
+(5046   sz += arglen + 4*\(argc+1\);) 144.161 Tj
+0 -474.668 Td
+(5047 ) 21.8426 Tj
+0 -484.161 Td
+(5048   // Stack.) 69.8962 Tj
+0 -493.655 Td
+(5049   sz += PAGE;) 78.6333 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/file.c  Page 4) 22.274 Tj
-0 -3.92728 Td
-(5050 // Increment ref count for file f.) 23.478 Tj
-0 -5.23637 Td
-(5051 void) 5.418 Tj
-0 -6.54546 Td
-(5052 fileincref\(struct file *f\)) 18.662 Tj
-0 -7.85455 Td
-(5053 {) 3.612 Tj
-0 -9.16364 Td
-(5054   acquire\(&file_table_lock\);) 19.866 Tj
-0 -10.4727 Td
-(5055   if\(f->ref < 1 || f->type == FD_CLOSED\)) 27.09 Tj
-0 -11.7818 Td
-(5056     panic\("fileincref"\);) 17.458 Tj
-0 -13.0909 Td
-(5057   f->ref++;) 9.632 Tj
-0 -14.4 Td
-(5058   release\(&file_table_lock\);) 19.866 Tj
-0 -15.7091 Td
-(5059 }) 3.612 Tj
-0 -17.0182 Td
-(5060 ) 3.01 Tj
-0 -18.3273 Td
-(5061 ) 3.01 Tj
-0 -19.6364 Td
-(5062 ) 3.01 Tj
-0 -20.9455 Td
-(5063 ) 3.01 Tj
-0 -22.2545 Td
-(5064 ) 3.01 Tj
-0 -23.5636 Td
-(5065 ) 3.01 Tj
-0 -24.8727 Td
-(5066 ) 3.01 Tj
-0 -26.1818 Td
-(5067 ) 3.01 Tj
-0 -27.4909 Td
-(5068 ) 3.01 Tj
-0 -28.8 Td
-(5069 ) 3.01 Tj
-0 -30.1091 Td
-(5070 ) 3.01 Tj
-0 -31.4182 Td
-(5071 ) 3.01 Tj
-0 -32.7273 Td
-(5072 ) 3.01 Tj
-0 -34.0364 Td
-(5073 ) 3.01 Tj
-0 -35.3454 Td
-(5074 ) 3.01 Tj
-0 -36.6545 Td
-(5075 ) 3.01 Tj
-0 -37.9636 Td
-(5076 ) 3.01 Tj
-0 -39.2727 Td
-(5077 ) 3.01 Tj
-0 -40.5818 Td
-(5078 ) 3.01 Tj
-0 -41.8909 Td
-(5079 ) 3.01 Tj
-0 -43.2 Td
-(5080 ) 3.01 Tj
-0 -44.5091 Td
-(5081 ) 3.01 Tj
-0 -45.8182 Td
-(5082 ) 3.01 Tj
-0 -47.1272 Td
-(5083 ) 3.01 Tj
-0 -48.4363 Td
-(5084 ) 3.01 Tj
-0 -49.7454 Td
-(5085 ) 3.01 Tj
-0 -51.0545 Td
-(5086 ) 3.01 Tj
-0 -52.3636 Td
-(5087 ) 3.01 Tj
-0 -53.6727 Td
-(5088 ) 3.01 Tj
-0 -54.9818 Td
-(5089 ) 3.01 Tj
-0 -56.2909 Td
-(5090 ) 3.01 Tj
-0 -57.6 Td
-(5091 ) 3.01 Tj
-0 -58.9091 Td
-(5092 ) 3.01 Tj
-0 -60.2181 Td
-(5093 ) 3.01 Tj
-0 -61.5272 Td
-(5094 ) 3.01 Tj
-0 -62.8363 Td
-(5095 ) 3.01 Tj
-0 -64.1454 Td
-(5096 ) 3.01 Tj
-0 -65.4545 Td
-(5097 ) 3.01 Tj
-0 -66.7636 Td
-(5098 ) 3.01 Tj
-0 -68.0727 Td
-(5099 ) 3.01 Tj
-0 -72 Td
-(Sheet 50) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/exec.c  Page 2) 161.635 Tj
+0 -28.4801 Td
+(5050   // Allocate program memory.) 148.529 Tj
+0 -37.9735 Td
+(5051   sz = \(sz+PAGE-1\) & ~\(PAGE-1\);) 157.267 Tj
+0 -47.4668 Td
+(5052   mem = kalloc\(sz\);) 104.844 Tj
+0 -56.9602 Td
+(5053   if\(mem == 0\)) 83.0018 Tj
+0 -66.4535 Td
+(5054     goto bad;) 78.6333 Tj
+0 -75.9469 Td
+(5055   memset\(mem, 0, sz\);) 113.581 Tj
+0 -85.4403 Td
+(5056 ) 21.8426 Tj
+0 -94.9336 Td
+(5057   // Load program into memory.) 152.898 Tj
+0 -104.427 Td
+(5058   for\(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof\(\
+ph\)\){) 288.322 Tj
+0 -113.92 Td
+(5059     if\(readi\(ip, \(char*\)&ph, off, sizeof\(ph\)\) != si\
+zeof\(ph\)\)) 283.953 Tj
+0 -123.414 Td
+(5060       goto bad;) 87.3703 Tj
+0 -132.907 Td
+(5061     if\(ph.type != ELF_PROG_LOAD\)) 161.635 Tj
+0 -142.4 Td
+(5062       continue;) 87.3703 Tj
+0 -151.894 Td
+(5063     if\(ph.va + ph.memsz > sz\)) 148.529 Tj
+0 -161.387 Td
+(5064       goto bad;) 87.3703 Tj
+0 -170.88 Td
+(5065     if\(readi\(ip, mem + ph.va, ph.offset, ph.filesz\) != \
+ph.filesz\)) 305.796 Tj
+0 -180.374 Td
+(5066       goto bad;) 87.3703 Tj
+0 -189.867 Td
+(5067     memset\(mem + ph.va + ph.filesz, 0, ph.memsz - ph.file\
+sz\);) 288.322 Tj
+0 -199.361 Td
+(5068   }) 34.9481 Tj
+0 -208.854 Td
+(5069   iunlockput\(ip\);) 96.1073 Tj
+0 -218.347 Td
+(5070 ) 21.8426 Tj
+0 -227.841 Td
+(5071   // Initialize stack.) 117.95 Tj
+0 -237.334 Td
+(5072   sp = sz;) 65.5277 Tj
+0 -246.827 Td
+(5073   argp = sz - arglen - 4*\(argc+1\);) 170.372 Tj
+0 -256.321 Td
+(5074 ) 21.8426 Tj
+0 -265.814 Td
+(5075   // Copy argv strings and pointers to stack.) 218.426 Tj
+0 -275.307 Td
+(5076   *\(uint*\)\(mem+argp + 4*argc\) = 0;  // argv[argc]) 235.9 Tj
+0 -284.801 Td
+(5077   for\(i=argc-1; i>=0; i--\){) 139.792 Tj
+0 -294.294 Td
+(5078     len = strlen\(argv[i]\) + 1;) 152.898 Tj
+0 -303.788 Td
+(5079     sp -= len;) 83.0018 Tj
+0 -313.281 Td
+(5080     memmove\(mem+sp, argv[i], len\);) 170.372 Tj
+0 -322.774 Td
+(5081     *\(uint*\)\(mem+argp + 4*i\) = sp;  // argv[i]) 222.794 Tj
+0 -332.268 Td
+(5082   }) 34.9481 Tj
+0 -341.761 Td
+(5083 ) 21.8426 Tj
+0 -351.254 Td
+(5084   // Stack frame for main\(argc, argv\), below arguments.) 262.111 Tj
+0 -360.748 Td
+(5085   sp = argp;) 74.2647 Tj
+0 -370.241 Td
+(5086   sp -= 4;) 65.5277 Tj
+0 -379.734 Td
+(5087   *\(uint*\)\(mem+sp\) = argp;) 135.424 Tj
+0 -389.228 Td
+(5088   sp -= 4;) 65.5277 Tj
+0 -398.721 Td
+(5089   *\(uint*\)\(mem+sp\) = argc;) 135.424 Tj
+0 -408.214 Td
+(5090   sp -= 4;) 65.5277 Tj
+0 -417.708 Td
+(5091   *\(uint*\)\(mem+sp\) = 0xffffffff;   // fake return pc) 249.005 Tj
+0 -427.201 Td
+(5092 ) 21.8426 Tj
+0 -436.695 Td
+(5093   // Save program name for debugging.) 183.478 Tj
+0 -446.188 Td
+(5094   for\(last=s=path; *s; s++\)) 139.792 Tj
+0 -455.681 Td
+(5095     if\(*s == '/'\)) 96.1073 Tj
+0 -465.175 Td
+(5096       last = s+1;) 96.1073 Tj
+0 -474.668 Td
+(5097   safestrcpy\(cp->name, last, sizeof\(cp->name\)\);) 227.163 Tj
+0 -484.161 Td
+(5098 ) 21.8426 Tj
+0 -493.655 Td
+(5099 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 50) 34.9481 Tj
 Q
 Q
 Q
@@ -16358,7 +17491,10 @@ pdfEndPage
 %%Page: 58 58
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -16366,241 +17502,254 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/sysfile.c  Page 1) 24.08 Tj
-0 -3.92728 Td
-(5100 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(5101 #include "stat.h") 13.244 Tj
-0 -6.54546 Td
-(5102 #include "param.h") 13.846 Tj
-0 -7.85455 Td
-(5103 #include "mmu.h") 12.642 Tj
-0 -9.16364 Td
-(5104 #include "proc.h") 13.244 Tj
-0 -10.4727 Td
-(5105 #include "defs.h") 13.244 Tj
-0 -11.7818 Td
-(5106 #include "x86.h") 12.642 Tj
-0 -13.0909 Td
-(5107 #include "traps.h") 13.846 Tj
-0 -14.4 Td
-(5108 #include "syscall.h") 15.05 Tj
-0 -15.7091 Td
-(5109 #include "spinlock.h") 15.652 Tj
-0 -17.0182 Td
-(5110 #include "buf.h") 12.642 Tj
-0 -18.3273 Td
-(5111 #include "fs.h") 12.04 Tj
-0 -19.6364 Td
-(5112 #include "fsvar.h") 13.846 Tj
-0 -20.9455 Td
-(5113 #include "elf.h") 12.642 Tj
-0 -22.2545 Td
-(5114 #include "file.h") 13.244 Tj
-0 -23.5636 Td
-(5115 #include "fcntl.h") 13.846 Tj
-0 -24.8727 Td
-(5116 ) 3.01 Tj
-0 -26.1818 Td
-(5117 // Fetch the nth word-sized system call argument as a file descriptor) 44.548 Tj
-0 -27.4909 Td
-(5118 // and return both the descriptor and the corresponding struct file.) 43.946 Tj
-0 -28.8 Td
-(5119 static int) 9.03 Tj
-0 -30.1091 Td
-(5120 argfd\(int argno, int *pfd, struct file **pf\)) 29.498 Tj
-0 -31.4182 Td
-(5121 {) 3.612 Tj
-0 -32.7273 Td
-(5122   int fd;) 8.428 Tj
-0 -34.0364 Td
-(5123   struct file *f;) 13.244 Tj
-0 -35.3454 Td
-(5124   struct proc *p = curproc[cpu\(\)];) 23.478 Tj
-0 -36.6545 Td
-(5125 ) 3.01 Tj
-0 -37.9636 Td
-(5126   if\(argint\(argno, &fd\) < 0\)) 19.866 Tj
-0 -39.2727 Td
-(5127     return -1;) 11.438 Tj
-0 -40.5818 Td
-(5128   if\(fd < 0 || fd >= NOFILE || \(f=p->ofile[fd]\) == 0\)) 34.916 Tj
-0 -41.8909 Td
-(5129     return -1;) 11.438 Tj
-0 -43.2 Td
-(5130   if\(pfd\)) 8.428 Tj
-0 -44.5091 Td
-(5131     *pfd = fd;) 11.438 Tj
-0 -45.8182 Td
-(5132   if\(pf\)) 7.826 Tj
-0 -47.1272 Td
-(5133     *pf = f;) 10.234 Tj
-0 -48.4363 Td
-(5134   return 0;) 9.632 Tj
-0 -49.7454 Td
-(5135 }) 3.612 Tj
-0 -51.0545 Td
-(5136 ) 3.01 Tj
-0 -52.3636 Td
-(5137 ) 3.01 Tj
-0 -53.6727 Td
-(5138 ) 3.01 Tj
-0 -54.9818 Td
-(5139 ) 3.01 Tj
-0 -56.2909 Td
-(5140 ) 3.01 Tj
-0 -57.6 Td
-(5141 ) 3.01 Tj
-0 -58.9091 Td
-(5142 ) 3.01 Tj
-0 -60.2181 Td
-(5143 ) 3.01 Tj
-0 -61.5272 Td
-(5144 ) 3.01 Tj
-0 -62.8363 Td
-(5145 ) 3.01 Tj
-0 -64.1454 Td
-(5146 ) 3.01 Tj
-0 -65.4545 Td
-(5147 ) 3.01 Tj
-0 -66.7636 Td
-(5148 ) 3.01 Tj
-0 -68.0727 Td
-(5149 ) 3.01 Tj
-0 -72 Td
-(Sheet 51) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/exec.c  Page 3) 161.635 Tj
+0 -28.4801 Td
+(5100   // Commit to the new image.) 148.529 Tj
+0 -37.9735 Td
+(5101   kfree\(cp->mem, cp->sz\);) 131.055 Tj
+0 -47.4668 Td
+(5102   cp->mem = mem;) 91.7388 Tj
+0 -56.9602 Td
+(5103   cp->sz = sz;) 83.0018 Tj
+0 -66.4535 Td
+(5104   cp->tf->eip = elf.entry;  // main) 174.741 Tj
+0 -75.9469 Td
+(5105   cp->tf->esp = sp;) 104.844 Tj
+0 -85.4403 Td
+(5106   setupsegs\(cp\);) 91.7388 Tj
+0 -94.9336 Td
+(5107   return 0;) 69.8962 Tj
+0 -104.427 Td
+(5108 ) 21.8426 Tj
+0 -113.92 Td
+(5109  bad:) 43.6851 Tj
+0 -123.414 Td
+(5110   if\(mem\)) 61.1592 Tj
+0 -132.907 Td
+(5111     kfree\(mem, sz\);) 104.844 Tj
+0 -142.4 Td
+(5112   iunlockput\(ip\);) 96.1073 Tj
+0 -151.894 Td
+(5113   return -1;) 74.2647 Tj
+0 -161.387 Td
+(5114 }) 26.2111 Tj
+0 -170.88 Td
+(5115 ) 21.8426 Tj
+0 -180.374 Td
+(5116 ) 21.8426 Tj
+0 -189.867 Td
+(5117 ) 21.8426 Tj
+0 -199.361 Td
+(5118 ) 21.8426 Tj
+0 -208.854 Td
+(5119 ) 21.8426 Tj
+0 -218.347 Td
+(5120 ) 21.8426 Tj
+0 -227.841 Td
+(5121 ) 21.8426 Tj
+0 -237.334 Td
+(5122 ) 21.8426 Tj
+0 -246.827 Td
+(5123 ) 21.8426 Tj
+0 -256.321 Td
+(5124 ) 21.8426 Tj
+0 -265.814 Td
+(5125 ) 21.8426 Tj
+0 -275.307 Td
+(5126 ) 21.8426 Tj
+0 -284.801 Td
+(5127 ) 21.8426 Tj
+0 -294.294 Td
+(5128 ) 21.8426 Tj
+0 -303.788 Td
+(5129 ) 21.8426 Tj
+0 -313.281 Td
+(5130 ) 21.8426 Tj
+0 -322.774 Td
+(5131 ) 21.8426 Tj
+0 -332.268 Td
+(5132 ) 21.8426 Tj
+0 -341.761 Td
+(5133 ) 21.8426 Tj
+0 -351.254 Td
+(5134 ) 21.8426 Tj
+0 -360.748 Td
+(5135 ) 21.8426 Tj
+0 -370.241 Td
+(5136 ) 21.8426 Tj
+0 -379.734 Td
+(5137 ) 21.8426 Tj
+0 -389.228 Td
+(5138 ) 21.8426 Tj
+0 -398.721 Td
+(5139 ) 21.8426 Tj
+0 -408.214 Td
+(5140 ) 21.8426 Tj
+0 -417.708 Td
+(5141 ) 21.8426 Tj
+0 -427.201 Td
+(5142 ) 21.8426 Tj
+0 -436.695 Td
+(5143 ) 21.8426 Tj
+0 -446.188 Td
+(5144 ) 21.8426 Tj
+0 -455.681 Td
+(5145 ) 21.8426 Tj
+0 -465.175 Td
+(5146 ) 21.8426 Tj
+0 -474.668 Td
+(5147 ) 21.8426 Tj
+0 -484.161 Td
+(5148 ) 21.8426 Tj
+0 -493.655 Td
+(5149 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/sysfile.c  Page 2) 24.08 Tj
-0 -3.92728 Td
-(5150 // Allocate a file descriptor for the given file.) 32.508 Tj
-0 -5.23637 Td
-(5151 // Takes over file reference from caller on success.) 34.314 Tj
-0 -6.54546 Td
-(5152 static int) 9.03 Tj
-0 -7.85455 Td
-(5153 fdalloc\(struct file *f\)) 16.856 Tj
-0 -9.16364 Td
-(5154 {) 3.612 Tj
-0 -10.4727 Td
-(5155   int fd;) 8.428 Tj
-0 -11.7818 Td
-(5156   struct proc *p = curproc[cpu\(\)];) 23.478 Tj
-0 -13.0909 Td
-(5157   for\(fd = 0; fd < NOFILE; fd++\){) 22.876 Tj
-0 -14.4 Td
-(5158     if\(p->ofile[fd] == 0\){) 18.662 Tj
-0 -15.7091 Td
-(5159       p->ofile[fd] = f;) 16.856 Tj
-0 -17.0182 Td
-(5160       return fd;) 12.642 Tj
-0 -18.3273 Td
-(5161     }) 6.02 Tj
-0 -19.6364 Td
-(5162   }) 4.816 Tj
-0 -20.9455 Td
-(5163   return -1;) 10.234 Tj
-0 -22.2545 Td
-(5164 }) 3.612 Tj
-0 -23.5636 Td
-(5165 ) 3.01 Tj
-0 -24.8727 Td
-(5166 int) 4.816 Tj
-0 -26.1818 Td
-(5167 sys_pipe\(void\)) 11.438 Tj
-0 -27.4909 Td
-(5168 {) 3.612 Tj
-0 -28.8 Td
-(5169   int *fd;) 9.03 Tj
-0 -30.1091 Td
-(5170   struct file *rf = 0, *wf = 0;) 21.672 Tj
-0 -31.4182 Td
-(5171   int fd0, fd1;) 12.04 Tj
-0 -32.7273 Td
-(5172   struct proc *p = curproc[cpu\(\)];) 23.478 Tj
-0 -34.0364 Td
-(5173 ) 3.01 Tj
-0 -35.3454 Td
-(5174   if\(argptr\(0, \(void*\)&fd, 2*sizeof fd[0]\) < 0\)) 31.304 Tj
-0 -36.6545 Td
-(5175     return -1;) 11.438 Tj
-0 -37.9636 Td
-(5176   if\(pipe_alloc\(&rf, &wf\) < 0\)) 21.07 Tj
-0 -39.2727 Td
-(5177     return -1;) 11.438 Tj
-0 -40.5818 Td
-(5178   fd0 = -1;) 9.632 Tj
-0 -41.8909 Td
-(5179   if\(\(fd0 = fdalloc\(rf\)\) < 0 || \(fd1 = fdalloc\(wf\)\) < 0\){) 37.324 Tj
-0 -43.2 Td
-(5180     if\(fd0 >= 0\)) 12.642 Tj
-0 -44.5091 Td
-(5181       p->ofile[fd0] = 0;) 17.458 Tj
-0 -45.8182 Td
-(5182     fileclose\(rf\);) 13.846 Tj
-0 -47.1272 Td
-(5183     fileclose\(wf\);) 13.846 Tj
-0 -48.4363 Td
-(5184     return -1;) 11.438 Tj
-0 -49.7454 Td
-(5185   }) 4.816 Tj
-0 -51.0545 Td
-(5186   fd[0] = fd0;) 11.438 Tj
-0 -52.3636 Td
-(5187   fd[1] = fd1;) 11.438 Tj
-0 -53.6727 Td
-(5188   return 0;) 9.632 Tj
-0 -54.9818 Td
-(5189 }) 3.612 Tj
-0 -56.2909 Td
-(5190 ) 3.01 Tj
-0 -57.6 Td
-(5191 ) 3.01 Tj
-0 -58.9091 Td
-(5192 ) 3.01 Tj
-0 -60.2181 Td
-(5193 ) 3.01 Tj
-0 -61.5272 Td
-(5194 ) 3.01 Tj
-0 -62.8363 Td
-(5195 ) 3.01 Tj
-0 -64.1454 Td
-(5196 ) 3.01 Tj
-0 -65.4545 Td
-(5197 ) 3.01 Tj
-0 -66.7636 Td
-(5198 ) 3.01 Tj
-0 -68.0727 Td
-(5199 ) 3.01 Tj
-0 -72 Td
-(Sheet 51) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/pipe.c  Page 1) 161.635 Tj
+0 -28.4801 Td
+(5150 #include "types.h") 100.476 Tj
+0 -37.9735 Td
+(5151 #include "defs.h") 96.1073 Tj
+0 -47.4668 Td
+(5152 #include "param.h") 100.476 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 "file.h") 96.1073 Tj
+0 -85.4403 Td
+(5156 #include "spinlock.h") 113.581 Tj
+0 -94.9336 Td
+(5157 ) 21.8426 Tj
+0 -104.427 Td
+(5158 #define PIPESIZE 512) 109.213 Tj
+0 -113.92 Td
+(5159 ) 21.8426 Tj
+0 -123.414 Td
+(5160 struct pipe {) 78.6333 Tj
+0 -132.907 Td
+(5161   int readopen;   // read fd is still open) 205.32 Tj
+0 -142.4 Td
+(5162   int writeopen;  // write fd is still open) 209.689 Tj
+0 -151.894 Td
+(5163   int writep;     // next index to write) 196.583 Tj
+0 -161.387 Td
+(5164   int readp;      // next index to read) 192.215 Tj
+0 -170.88 Td
+(5165   struct spinlock lock;) 122.318 Tj
+0 -180.374 Td
+(5166   char data[PIPESIZE];) 117.95 Tj
+0 -189.867 Td
+(5167 };) 30.5796 Tj
+0 -199.361 Td
+(5168 ) 21.8426 Tj
+0 -208.854 Td
+(5169 int) 34.9481 Tj
+0 -218.347 Td
+(5170 pipealloc\(struct file **f0, struct file **f1\)) 218.426 Tj
+0 -227.841 Td
+(5171 {) 26.2111 Tj
+0 -237.334 Td
+(5172   struct pipe *p;) 96.1073 Tj
+0 -246.827 Td
+(5173 ) 21.8426 Tj
+0 -256.321 Td
+(5174   p = 0;) 56.7907 Tj
+0 -265.814 Td
+(5175   *f0 = *f1 = 0;) 91.7388 Tj
+0 -275.307 Td
+(5176   if\(\(*f0 = filealloc\(\)\) == 0 || \(*f1 = filealloc\(\)\
+\) == 0\)) 275.216 Tj
+0 -284.801 Td
+(5177     goto bad;) 78.6333 Tj
+0 -294.294 Td
+(5178   if\(\(p = \(struct pipe*\)kalloc\(PAGE\)\) == 0\)) 209.689 Tj
+0 -303.788 Td
+(5179     goto bad;) 78.6333 Tj
+0 -313.281 Td
+(5180   p->readopen = 1;) 100.476 Tj
+0 -322.774 Td
+(5181   p->writeopen = 1;) 104.844 Tj
+0 -332.268 Td
+(5182   p->writep = 0;) 91.7388 Tj
+0 -341.761 Td
+(5183   p->readp = 0;) 87.3703 Tj
+0 -351.254 Td
+(5184   initlock\(&p->lock, "pipe"\);) 148.529 Tj
+0 -360.748 Td
+(5185   \(*f0\)->type = FD_PIPE;) 126.687 Tj
+0 -370.241 Td
+(5186   \(*f0\)->readable = 1;) 117.95 Tj
+0 -379.734 Td
+(5187   \(*f0\)->writable = 0;) 117.95 Tj
+0 -389.228 Td
+(5188   \(*f0\)->pipe = p;) 100.476 Tj
+0 -398.721 Td
+(5189   \(*f1\)->type = FD_PIPE;) 126.687 Tj
+0 -408.214 Td
+(5190   \(*f1\)->readable = 0;) 117.95 Tj
+0 -417.708 Td
+(5191   \(*f1\)->writable = 1;) 117.95 Tj
+0 -427.201 Td
+(5192   \(*f1\)->pipe = p;) 100.476 Tj
+0 -436.695 Td
+(5193   return 0;) 69.8962 Tj
+0 -446.188 Td
+(5194 ) 21.8426 Tj
+0 -455.681 Td
+(5195 ) 21.8426 Tj
+0 -465.175 Td
+(5196 ) 21.8426 Tj
+0 -474.668 Td
+(5197 ) 21.8426 Tj
+0 -484.161 Td
+(5198 ) 21.8426 Tj
+0 -493.655 Td
+(5199 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 51) 34.9481 Tj
 Q
 Q
 Q
@@ -16612,6 +17761,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -16619,241 +17771,253 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/sysfile.c  Page 3) 24.08 Tj
-0 -3.92728 Td
-(5200 int) 4.816 Tj
-0 -5.23637 Td
-(5201 sys_write\(void\)) 12.04 Tj
-0 -6.54546 Td
-(5202 {) 3.612 Tj
-0 -7.85455 Td
-(5203   struct file *f;) 13.244 Tj
-0 -9.16364 Td
-(5204   int n;) 7.826 Tj
-0 -10.4727 Td
-(5205   char *cp;) 9.632 Tj
-0 -11.7818 Td
-(5206 ) 3.01 Tj
-0 -13.0909 Td
-(5207   if\(argfd\(0, 0, &f\) < 0 || argint\(2, &n\) < 0 || argptr\(1, &cp, n\) < 0\)) 45.752 Tj
-0 -14.4 Td
-(5208     return -1;) 11.438 Tj
-0 -15.7091 Td
-(5209   return filewrite\(f, cp, n\);) 20.468 Tj
-0 -17.0182 Td
-(5210 }) 3.612 Tj
-0 -18.3273 Td
-(5211 ) 3.01 Tj
-0 -19.6364 Td
-(5212 int) 4.816 Tj
-0 -20.9455 Td
-(5213 sys_read\(void\)) 11.438 Tj
-0 -22.2545 Td
-(5214 {) 3.612 Tj
-0 -23.5636 Td
-(5215   struct file *f;) 13.244 Tj
-0 -24.8727 Td
-(5216   int n;) 7.826 Tj
-0 -26.1818 Td
-(5217   char *cp;) 9.632 Tj
-0 -27.4909 Td
-(5218 ) 3.01 Tj
-0 -28.8 Td
-(5219   if\(argfd\(0, 0, &f\) < 0 || argint\(2, &n\) < 0 || argptr\(1, &cp, n\) < 0\)) 45.752 Tj
-0 -30.1091 Td
-(5220     return -1;) 11.438 Tj
-0 -31.4182 Td
-(5221   return fileread\(f, cp, n\);) 19.866 Tj
-0 -32.7273 Td
-(5222 }) 3.612 Tj
-0 -34.0364 Td
-(5223 ) 3.01 Tj
-0 -35.3454 Td
-(5224 int) 4.816 Tj
-0 -36.6545 Td
-(5225 sys_close\(void\)) 12.04 Tj
-0 -37.9636 Td
-(5226 {) 3.612 Tj
-0 -39.2727 Td
-(5227   int fd;) 8.428 Tj
-0 -40.5818 Td
-(5228   struct file *f;) 13.244 Tj
-0 -41.8909 Td
-(5229 ) 3.01 Tj
-0 -43.2 Td
-(5230   if\(argfd\(0, &fd, &f\) < 0\)) 19.264 Tj
-0 -44.5091 Td
-(5231     return -1;) 11.438 Tj
-0 -45.8182 Td
-(5232   curproc[cpu\(\)]->ofile[fd] = 0;) 22.274 Tj
-0 -47.1272 Td
-(5233   fileclose\(f\);) 12.04 Tj
-0 -48.4363 Td
-(5234   return 0;) 9.632 Tj
-0 -49.7454 Td
-(5235 }) 3.612 Tj
-0 -51.0545 Td
-(5236 ) 3.01 Tj
-0 -52.3636 Td
-(5237 ) 3.01 Tj
-0 -53.6727 Td
-(5238 ) 3.01 Tj
-0 -54.9818 Td
-(5239 ) 3.01 Tj
-0 -56.2909 Td
-(5240 ) 3.01 Tj
-0 -57.6 Td
-(5241 ) 3.01 Tj
-0 -58.9091 Td
-(5242 ) 3.01 Tj
-0 -60.2181 Td
-(5243 ) 3.01 Tj
-0 -61.5272 Td
-(5244 ) 3.01 Tj
-0 -62.8363 Td
-(5245 ) 3.01 Tj
-0 -64.1454 Td
-(5246 ) 3.01 Tj
-0 -65.4545 Td
-(5247 ) 3.01 Tj
-0 -66.7636 Td
-(5248 ) 3.01 Tj
-0 -68.0727 Td
-(5249 ) 3.01 Tj
-0 -72 Td
-(Sheet 52) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  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.424 Tj
+0 -56.9602 Td
+(5203   if\(*f0\){) 65.5277 Tj
+0 -66.4535 Td
+(5204     \(*f0\)->type = FD_NONE;) 135.424 Tj
+0 -75.9469 Td
+(5205     fileclose\(*f0\);) 104.844 Tj
+0 -85.4403 Td
+(5206   }) 34.9481 Tj
+0 -94.9336 Td
+(5207   if\(*f1\){) 65.5277 Tj
+0 -104.427 Td
+(5208     \(*f1\)->type = FD_NONE;) 135.424 Tj
+0 -113.92 Td
+(5209     fileclose\(*f1\);) 104.844 Tj
+0 -123.414 Td
+(5210   }) 34.9481 Tj
+0 -132.907 Td
+(5211   return -1;) 74.2647 Tj
+0 -142.4 Td
+(5212 }) 26.2111 Tj
+0 -151.894 Td
+(5213 ) 21.8426 Tj
+0 -161.387 Td
+(5214 void) 39.3166 Tj
+0 -170.88 Td
+(5215 pipeclose\(struct pipe *p, int writable\)) 192.215 Tj
+0 -180.374 Td
+(5216 {) 26.2111 Tj
+0 -189.867 Td
+(5217   acquire\(&p->lock\);) 109.213 Tj
+0 -199.361 Td
+(5218   if\(writable\){) 87.3703 Tj
+0 -208.854 Td
+(5219     p->writeopen = 0;) 113.581 Tj
+0 -218.347 Td
+(5220     wakeup\(&p->readp\);) 117.95 Tj
+0 -227.841 Td
+(5221   } else {) 65.5277 Tj
+0 -237.334 Td
+(5222     p->readopen = 0;) 109.213 Tj
+0 -246.827 Td
+(5223     wakeup\(&p->writep\);) 122.318 Tj
+0 -256.321 Td
+(5224   }) 34.9481 Tj
+0 -265.814 Td
+(5225   release\(&p->lock\);) 109.213 Tj
+0 -275.307 Td
+(5226 ) 21.8426 Tj
+0 -284.801 Td
+(5227   if\(p->readopen == 0 && p->writeopen == 0\)) 209.689 Tj
+0 -294.294 Td
+(5228     kfree\(\(char*\)p, PAGE\);) 135.424 Tj
+0 -303.788 Td
+(5229 }) 26.2111 Tj
+0 -313.281 Td
+(5230 ) 21.8426 Tj
+0 -322.774 Td
+(5231 ) 21.8426 Tj
+0 -332.268 Td
+(5232 ) 21.8426 Tj
+0 -341.761 Td
+(5233 ) 21.8426 Tj
+0 -351.254 Td
+(5234 ) 21.8426 Tj
+0 -360.748 Td
+(5235 ) 21.8426 Tj
+0 -370.241 Td
+(5236 ) 21.8426 Tj
+0 -379.734 Td
+(5237 ) 21.8426 Tj
+0 -389.228 Td
+(5238 ) 21.8426 Tj
+0 -398.721 Td
+(5239 ) 21.8426 Tj
+0 -408.214 Td
+(5240 ) 21.8426 Tj
+0 -417.708 Td
+(5241 ) 21.8426 Tj
+0 -427.201 Td
+(5242 ) 21.8426 Tj
+0 -436.695 Td
+(5243 ) 21.8426 Tj
+0 -446.188 Td
+(5244 ) 21.8426 Tj
+0 -455.681 Td
+(5245 ) 21.8426 Tj
+0 -465.175 Td
+(5246 ) 21.8426 Tj
+0 -474.668 Td
+(5247 ) 21.8426 Tj
+0 -484.161 Td
+(5248 ) 21.8426 Tj
+0 -493.655 Td
+(5249 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/sysfile.c  Page 4) 24.08 Tj
-0 -3.92728 Td
-(5250 int) 4.816 Tj
-0 -5.23637 Td
-(5251 sys_open\(void\)) 11.438 Tj
-0 -6.54546 Td
-(5252 {) 3.612 Tj
-0 -7.85455 Td
-(5253   struct inode *ip, *dp;) 17.458 Tj
-0 -9.16364 Td
-(5254   char *path;) 10.836 Tj
-0 -10.4727 Td
-(5255   int omode;) 10.234 Tj
-0 -11.7818 Td
-(5256   int fd;) 8.428 Tj
-0 -13.0909 Td
-(5257   struct file *f;) 13.244 Tj
-0 -14.4 Td
-(5258   char *last;) 10.836 Tj
-0 -15.7091 Td
-(5259 ) 3.01 Tj
-0 -17.0182 Td
-(5260   if\(argstr\(0, &path\) < 0 || argint\(1, &omode\) < 0\)) 33.712 Tj
-0 -18.3273 Td
-(5261     return -1;) 11.438 Tj
-0 -19.6364 Td
-(5262 ) 3.01 Tj
-0 -20.9455 Td
-(5263   if\(omode & O_CREATE\){) 16.856 Tj
-0 -22.2545 Td
-(5264     dp = namei\(path, NAMEI_CREATE, 0, &last, &ip\);) 33.11 Tj
-0 -23.5636 Td
-(5265     if\(dp\){) 9.632 Tj
-0 -24.8727 Td
-(5266       ip = mknod1\(dp, last, T_FILE, 0, 0\);) 28.294 Tj
-0 -26.1818 Td
-(5267       iput\(dp\);) 12.04 Tj
-0 -27.4909 Td
-(5268       if\(ip == 0\)) 13.244 Tj
-0 -28.8 Td
-(5269         return -1;) 13.846 Tj
-0 -30.1091 Td
-(5270     } else if\(ip == 0\){) 16.856 Tj
-0 -31.4182 Td
-(5271       return -1;) 12.642 Tj
-0 -32.7273 Td
-(5272     } else if\(ip->type == T_DIR\){) 22.876 Tj
-0 -34.0364 Td
-(5273       iput\(ip\);) 12.04 Tj
-0 -35.3454 Td
-(5274       return -1;) 12.642 Tj
-0 -36.6545 Td
-(5275     }) 6.02 Tj
-0 -37.9636 Td
-(5276   } else {) 9.03 Tj
-0 -39.2727 Td
-(5277     ip = namei\(path, NAMEI_LOOKUP, 0, 0, 0\);) 29.498 Tj
-0 -40.5818 Td
-(5278     if\(ip == 0\)) 12.04 Tj
-0 -41.8909 Td
-(5279       return -1;) 12.642 Tj
-0 -43.2 Td
-(5280   }) 4.816 Tj
-0 -44.5091 Td
-(5281   if\(ip->type == T_DIR && \(\(omode & O_RDWR\) || \(omode & O_WRONLY\)\)\){) 43.946 Tj
-0 -45.8182 Td
-(5282     iput\(ip\);) 10.836 Tj
-0 -47.1272 Td
-(5283     return -1;) 11.438 Tj
-0 -48.4363 Td
-(5284   }) 4.816 Tj
-0 -49.7454 Td
-(5285 ) 3.01 Tj
-0 -51.0545 Td
-(5286   if\(\(f = filealloc\(\)\) == 0\){) 20.468 Tj
-0 -52.3636 Td
-(5287     iput\(ip\);) 10.836 Tj
-0 -53.6727 Td
-(5288     return -1;) 11.438 Tj
-0 -54.9818 Td
-(5289   }) 4.816 Tj
-0 -56.2909 Td
-(5290   if\(\(fd = fdalloc\(f\)\) < 0\){) 19.866 Tj
-0 -57.6 Td
-(5291     iput\(ip\);) 10.836 Tj
-0 -58.9091 Td
-(5292     fileclose\(f\);) 13.244 Tj
-0 -60.2181 Td
-(5293     return -1;) 11.438 Tj
-0 -61.5272 Td
-(5294   }) 4.816 Tj
-0 -62.8363 Td
-(5295 ) 3.01 Tj
-0 -64.1454 Td
-(5296 ) 3.01 Tj
-0 -65.4545 Td
-(5297 ) 3.01 Tj
-0 -66.7636 Td
-(5298 ) 3.01 Tj
-0 -68.0727 Td
-(5299 ) 3.01 Tj
-0 -72 Td
-(Sheet 52) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/pipe.c  Page 3) 161.635 Tj
+0 -28.4801 Td
+(5250 int) 34.9481 Tj
+0 -37.9735 Td
+(5251 pipewrite\(struct pipe *p, char *addr, int n\)) 214.057 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.213 Tj
+0 -85.4403 Td
+(5256   for\(i = 0; i < n; i++\){) 131.055 Tj
+0 -94.9336 Td
+(5257     while\(\(\(p->writep + 1\) % PIPESIZE\) == p->readp\){) 249.005 Tj
+0 -104.427 Td
+(5258       if\(p->readopen == 0 || cp->killed\){) 200.952 Tj
+0 -113.92 Td
+(5259         release\(&p->lock\);) 135.424 Tj
+0 -123.414 Td
+(5260         return -1;) 100.476 Tj
+0 -132.907 Td
+(5261       }) 52.4222 Tj
+0 -142.4 Td
+(5262       wakeup\(&p->readp\);) 126.687 Tj
+0 -151.894 Td
+(5263       sleep\(&p->writep, &p->lock\);) 170.372 Tj
+0 -161.387 Td
+(5264     }) 43.6851 Tj
+0 -170.88 Td
+(5265     p->data[p->writep] = addr[i];) 166.004 Tj
+0 -180.374 Td
+(5266     p->writep = \(p->writep + 1\) % PIPESIZE;) 209.689 Tj
+0 -189.867 Td
+(5267   }) 34.9481 Tj
+0 -199.361 Td
+(5268   wakeup\(&p->readp\);) 109.213 Tj
+0 -208.854 Td
+(5269   release\(&p->lock\);) 109.213 Tj
+0 -218.347 Td
+(5270   return i;) 69.8962 Tj
+0 -227.841 Td
+(5271 }) 26.2111 Tj
+0 -237.334 Td
+(5272 ) 21.8426 Tj
+0 -246.827 Td
+(5273 int) 34.9481 Tj
+0 -256.321 Td
+(5274 piperead\(struct pipe *p, char *addr, int n\)) 209.689 Tj
+0 -265.814 Td
+(5275 {) 26.2111 Tj
+0 -275.307 Td
+(5276   int i;) 56.7907 Tj
+0 -284.801 Td
+(5277 ) 21.8426 Tj
+0 -294.294 Td
+(5278   acquire\(&p->lock\);) 109.213 Tj
+0 -303.788 Td
+(5279   while\(p->readp == p->writep && p->writeopen\){) 227.163 Tj
+0 -313.281 Td
+(5280     if\(cp->killed\){) 104.844 Tj
+0 -322.774 Td
+(5281       release\(&p->lock\);) 126.687 Tj
+0 -332.268 Td
+(5282       return -1;) 91.7388 Tj
+0 -341.761 Td
+(5283     }) 43.6851 Tj
+0 -351.254 Td
+(5284     sleep\(&p->readp, &p->lock\);) 157.267 Tj
+0 -360.748 Td
+(5285   }) 34.9481 Tj
+0 -370.241 Td
+(5286   for\(i = 0; i < n; i++\){) 131.055 Tj
+0 -379.734 Td
+(5287     if\(p->readp == p->writep\)) 148.529 Tj
+0 -389.228 Td
+(5288       break;) 74.2647 Tj
+0 -398.721 Td
+(5289     addr[i] = p->data[p->readp];) 161.635 Tj
+0 -408.214 Td
+(5290     p->readp = \(p->readp + 1\) % PIPESIZE;) 200.952 Tj
+0 -417.708 Td
+(5291   }) 34.9481 Tj
+0 -427.201 Td
+(5292   wakeup\(&p->writep\);) 113.581 Tj
+0 -436.695 Td
+(5293   release\(&p->lock\);) 109.213 Tj
+0 -446.188 Td
+(5294   return i;) 69.8962 Tj
+0 -455.681 Td
+(5295 }) 26.2111 Tj
+0 -465.175 Td
+(5296 ) 21.8426 Tj
+0 -474.668 Td
+(5297 ) 21.8426 Tj
+0 -484.161 Td
+(5298 ) 21.8426 Tj
+0 -493.655 Td
+(5299 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 52) 34.9481 Tj
 Q
 Q
 Q
@@ -16864,7 +18028,10 @@ pdfEndPage
 %%Page: 60 60
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -16872,241 +18039,253 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/sysfile.c  Page 5) 24.08 Tj
-0 -3.92728 Td
-(5300   iunlock\(ip\);) 11.438 Tj
-0 -5.23637 Td
-(5301   f->type = FD_FILE;) 15.05 Tj
-0 -6.54546 Td
-(5302   if\(omode & O_RDWR\) {) 16.254 Tj
-0 -7.85455 Td
-(5303     f->readable = 1;) 15.05 Tj
-0 -9.16364 Td
-(5304     f->writable = 1;) 15.05 Tj
-0 -10.4727 Td
-(5305   } else if\(omode & O_WRONLY\) {) 21.672 Tj
-0 -11.7818 Td
-(5306     f->readable = 0;) 15.05 Tj
-0 -13.0909 Td
-(5307     f->writable = 1;) 15.05 Tj
-0 -14.4 Td
-(5308   } else {) 9.03 Tj
-0 -15.7091 Td
-(5309     f->readable = 1;) 15.05 Tj
-0 -17.0182 Td
-(5310     f->writable = 0;) 15.05 Tj
-0 -18.3273 Td
-(5311   }) 4.816 Tj
-0 -19.6364 Td
-(5312   f->ip = ip;) 10.836 Tj
-0 -20.9455 Td
-(5313   f->off = 0;) 10.836 Tj
-0 -22.2545 Td
-(5314 ) 3.01 Tj
-0 -23.5636 Td
-(5315   return fd;) 10.234 Tj
-0 -24.8727 Td
-(5316 }) 3.612 Tj
-0 -26.1818 Td
-(5317 ) 3.01 Tj
-0 -27.4909 Td
-(5318 int) 4.816 Tj
-0 -28.8 Td
-(5319 sys_mknod\(void\)) 12.04 Tj
-0 -30.1091 Td
-(5320 {) 3.612 Tj
-0 -31.4182 Td
-(5321   struct inode *nip;) 15.05 Tj
-0 -32.7273 Td
-(5322   char *path;) 10.836 Tj
-0 -34.0364 Td
-(5323   int len;) 9.03 Tj
-0 -35.3454 Td
-(5324   int type, major, minor;) 18.06 Tj
-0 -36.6545 Td
-(5325 ) 3.01 Tj
-0 -37.9636 Td
-(5326   if\(\(len=argstr\(0, &path\)\) < 0 || argint\(1, &type\) < 0 ||) 37.926 Tj
-0 -39.2727 Td
-(5327      argint\(2, &major\) < 0 || argint\(3, &minor\) < 0\)) 34.314 Tj
-0 -40.5818 Td
-(5328     return -1;) 11.438 Tj
-0 -41.8909 Td
-(5329 ) 3.01 Tj
-0 -43.2 Td
-(5330   if\(len >= DIRSIZ\)) 14.448 Tj
-0 -44.5091 Td
-(5331     return -1;) 11.438 Tj
-0 -45.8182 Td
-(5332 ) 3.01 Tj
-0 -47.1272 Td
-(5333   if\(\(nip = mknod\(path, type, major, minor\)\) == 0\)) 33.11 Tj
-0 -48.4363 Td
-(5334     return -1;) 11.438 Tj
-0 -49.7454 Td
-(5335   iput\(nip\);) 10.234 Tj
-0 -51.0545 Td
-(5336   return 0;) 9.632 Tj
-0 -52.3636 Td
-(5337 }) 3.612 Tj
-0 -53.6727 Td
-(5338 ) 3.01 Tj
-0 -54.9818 Td
-(5339 ) 3.01 Tj
-0 -56.2909 Td
-(5340 ) 3.01 Tj
-0 -57.6 Td
-(5341 ) 3.01 Tj
-0 -58.9091 Td
-(5342 ) 3.01 Tj
-0 -60.2181 Td
-(5343 ) 3.01 Tj
-0 -61.5272 Td
-(5344 ) 3.01 Tj
-0 -62.8363 Td
-(5345 ) 3.01 Tj
-0 -64.1454 Td
-(5346 ) 3.01 Tj
-0 -65.4545 Td
-(5347 ) 3.01 Tj
-0 -66.7636 Td
-(5348 ) 3.01 Tj
-0 -68.0727 Td
-(5349 ) 3.01 Tj
-0 -72 Td
-(Sheet 53) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/string.c  Page 1) 170.372 Tj
+0 -28.4801 Td
+(5300 #include "types.h") 100.476 Tj
+0 -37.9735 Td
+(5301 ) 21.8426 Tj
+0 -47.4668 Td
+(5302 void*) 43.6851 Tj
+0 -56.9602 Td
+(5303 memset\(void *dst, int c, uint n\)) 161.635 Tj
+0 -66.4535 Td
+(5304 {) 26.2111 Tj
+0 -75.9469 Td
+(5305   char *d;) 65.5277 Tj
+0 -85.4403 Td
+(5306 ) 21.8426 Tj
+0 -94.9336 Td
+(5307   d = \(char*\)dst;) 96.1073 Tj
+0 -104.427 Td
+(5308   while\(n-- > 0\)) 91.7388 Tj
+0 -113.92 Td
+(5309     *d++ = c;) 78.6333 Tj
+0 -123.414 Td
+(5310 ) 21.8426 Tj
+0 -132.907 Td
+(5311   return dst;) 78.6333 Tj
+0 -142.4 Td
+(5312 }) 26.2111 Tj
+0 -151.894 Td
+(5313 ) 21.8426 Tj
+0 -161.387 Td
+(5314 int) 34.9481 Tj
+0 -170.88 Td
+(5315 memcmp\(const void *v1, const void *v2, uint n\)) 222.794 Tj
+0 -180.374 Td
+(5316 {) 26.2111 Tj
+0 -189.867 Td
+(5317   const uchar *s1, *s2;) 122.318 Tj
+0 -199.361 Td
+(5318 ) 21.8426 Tj
+0 -208.854 Td
+(5319   s1 = v1;) 65.5277 Tj
+0 -218.347 Td
+(5320   s2 = v2;) 65.5277 Tj
+0 -227.841 Td
+(5321   while\(n-- > 0\){) 96.1073 Tj
+0 -237.334 Td
+(5322     if\(*s1 != *s2\)) 100.476 Tj
+0 -246.827 Td
+(5323       return *s1 - *s2;) 122.318 Tj
+0 -256.321 Td
+(5324     s1++, s2++;) 87.3703 Tj
+0 -265.814 Td
+(5325   }) 34.9481 Tj
+0 -275.307 Td
+(5326 ) 21.8426 Tj
+0 -284.801 Td
+(5327   return 0;) 69.8962 Tj
+0 -294.294 Td
+(5328 }) 26.2111 Tj
+0 -303.788 Td
+(5329 ) 21.8426 Tj
+0 -313.281 Td
+(5330 void*) 43.6851 Tj
+0 -322.774 Td
+(5331 memmove\(void *dst, const void *src, uint n\)) 209.689 Tj
+0 -332.268 Td
+(5332 {) 26.2111 Tj
+0 -341.761 Td
+(5333   const char *s;) 91.7388 Tj
+0 -351.254 Td
+(5334   char *d;) 65.5277 Tj
+0 -360.748 Td
+(5335 ) 21.8426 Tj
+0 -370.241 Td
+(5336   s = src;) 65.5277 Tj
+0 -379.734 Td
+(5337   d = dst;) 65.5277 Tj
+0 -389.228 Td
+(5338   if\(s < d && s + n > d\){) 131.055 Tj
+0 -398.721 Td
+(5339     s += n;) 69.8962 Tj
+0 -408.214 Td
+(5340     d += n;) 69.8962 Tj
+0 -417.708 Td
+(5341     while\(n-- > 0\)) 100.476 Tj
+0 -427.201 Td
+(5342       *--d = *--s;) 100.476 Tj
+0 -436.695 Td
+(5343   } else) 56.7907 Tj
+0 -446.188 Td
+(5344     while\(n-- > 0\)) 100.476 Tj
+0 -455.681 Td
+(5345       *d++ = *s++;) 100.476 Tj
+0 -465.175 Td
+(5346 ) 21.8426 Tj
+0 -474.668 Td
+(5347   return dst;) 78.6333 Tj
+0 -484.161 Td
+(5348 }) 26.2111 Tj
+0 -493.655 Td
+(5349 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/sysfile.c  Page 6) 24.08 Tj
-0 -3.92728 Td
-(5350 int) 4.816 Tj
-0 -5.23637 Td
-(5351 sys_mkdir\(void\)) 12.04 Tj
-0 -6.54546 Td
-(5352 {) 3.612 Tj
-0 -7.85455 Td
-(5353   struct inode *nip;) 15.05 Tj
-0 -9.16364 Td
-(5354   struct inode *dp;) 14.448 Tj
-0 -10.4727 Td
-(5355   char *path;) 10.836 Tj
-0 -11.7818 Td
-(5356   struct dirent de;) 14.448 Tj
-0 -13.0909 Td
-(5357   char *last;) 10.836 Tj
-0 -14.4 Td
-(5358 ) 3.01 Tj
-0 -15.7091 Td
-(5359   if\(argstr\(0, &path\) < 0\)) 18.662 Tj
-0 -17.0182 Td
-(5360     return -1;) 11.438 Tj
-0 -18.3273 Td
-(5361 ) 3.01 Tj
-0 -19.6364 Td
-(5362   dp = namei\(path, NAMEI_CREATE, 0, &last, 0\);) 30.702 Tj
-0 -20.9455 Td
-(5363   if\(dp == 0\)) 10.836 Tj
-0 -22.2545 Td
-(5364     return -1;) 11.438 Tj
-0 -23.5636 Td
-(5365 ) 3.01 Tj
-0 -24.8727 Td
-(5366   nip = mknod1\(dp, last, T_DIR, 0, 0\);) 25.886 Tj
-0 -26.1818 Td
-(5367   if\(nip == 0\){) 12.04 Tj
-0 -27.4909 Td
-(5368     iput\(dp\);) 10.836 Tj
-0 -28.8 Td
-(5369     return -1;) 11.438 Tj
-0 -30.1091 Td
-(5370   }) 4.816 Tj
-0 -31.4182 Td
-(5371 ) 3.01 Tj
-0 -32.7273 Td
-(5372   dp->nlink++;) 11.438 Tj
-0 -34.0364 Td
-(5373   iupdate\(dp\);) 11.438 Tj
-0 -35.3454 Td
-(5374 ) 3.01 Tj
-0 -36.6545 Td
-(5375   memset\(de.name, '\\0', DIRSIZ\);) 22.274 Tj
-0 -37.9636 Td
-(5376   de.name[0] = '.';) 14.448 Tj
-0 -39.2727 Td
-(5377   de.inum = nip->inum;) 16.254 Tj
-0 -40.5818 Td
-(5378   writei\(nip, \(char*\) &de, 0, sizeof\(de\)\);) 28.294 Tj
-0 -41.8909 Td
-(5379 ) 3.01 Tj
-0 -43.2 Td
-(5380   de.inum = dp->inum;) 15.652 Tj
-0 -44.5091 Td
-(5381   de.name[1] = '.';) 14.448 Tj
-0 -45.8182 Td
-(5382   writei\(nip, \(char*\) &de, sizeof\(de\), sizeof\(de\)\);) 33.712 Tj
-0 -47.1272 Td
-(5383 ) 3.01 Tj
-0 -48.4363 Td
-(5384   iput\(dp\);) 9.632 Tj
-0 -49.7454 Td
-(5385   iput\(nip\);) 10.234 Tj
-0 -51.0545 Td
-(5386 ) 3.01 Tj
-0 -52.3636 Td
-(5387   return 0;) 9.632 Tj
-0 -53.6727 Td
-(5388 }) 3.612 Tj
-0 -54.9818 Td
-(5389 ) 3.01 Tj
-0 -56.2909 Td
-(5390 ) 3.01 Tj
-0 -57.6 Td
-(5391 ) 3.01 Tj
-0 -58.9091 Td
-(5392 ) 3.01 Tj
-0 -60.2181 Td
-(5393 ) 3.01 Tj
-0 -61.5272 Td
-(5394 ) 3.01 Tj
-0 -62.8363 Td
-(5395 ) 3.01 Tj
-0 -64.1454 Td
-(5396 ) 3.01 Tj
-0 -65.4545 Td
-(5397 ) 3.01 Tj
-0 -66.7636 Td
-(5398 ) 3.01 Tj
-0 -68.0727 Td
-(5399 ) 3.01 Tj
-0 -72 Td
-(Sheet 53) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/string.c  Page 2) 170.372 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.426 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.476 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.267 Tj
+0 -104.427 Td
+(5358 }) 26.2111 Tj
+0 -113.92 Td
+(5359 ) 21.8426 Tj
+0 -123.414 Td
+(5360 char*) 43.6851 Tj
+0 -132.907 Td
+(5361 strncpy\(char *s, const char *t, int n\)) 187.846 Tj
+0 -142.4 Td
+(5362 {) 26.2111 Tj
+0 -151.894 Td
+(5363   char *os;) 69.8962 Tj
+0 -161.387 Td
+(5364 ) 21.8426 Tj
+0 -170.88 Td
+(5365   os = s;) 61.1592 Tj
+0 -180.374 Td
+(5366   while\(n-- > 0 && \(*s++ = *t++\) != 0\)) 187.846 Tj
+0 -189.867 Td
+(5367     ;) 43.6851 Tj
+0 -199.361 Td
+(5368   while\(n-- > 0\)) 91.7388 Tj
+0 -208.854 Td
+(5369     *s++ = 0;) 78.6333 Tj
+0 -218.347 Td
+(5370   return os;) 74.2647 Tj
+0 -227.841 Td
+(5371 }) 26.2111 Tj
+0 -237.334 Td
+(5372 ) 21.8426 Tj
+0 -246.827 Td
+(5373 // Like strncpy but guaranteed to NUL-terminate.) 231.531 Tj
+0 -256.321 Td
+(5374 char*) 43.6851 Tj
+0 -265.814 Td
+(5375 safestrcpy\(char *s, const char *t, int n\)) 200.952 Tj
+0 -275.307 Td
+(5376 {) 26.2111 Tj
+0 -284.801 Td
+(5377   char *os;) 69.8962 Tj
+0 -294.294 Td
+(5378 ) 21.8426 Tj
+0 -303.788 Td
+(5379   os = s;) 61.1592 Tj
+0 -313.281 Td
+(5380   if\(n <= 0\)) 74.2647 Tj
+0 -322.774 Td
+(5381     return os;) 83.0018 Tj
+0 -332.268 Td
+(5382   while\(--n > 0 && \(*s++ = *t++\) != 0\)) 187.846 Tj
+0 -341.761 Td
+(5383     ;) 43.6851 Tj
+0 -351.254 Td
+(5384   *s = 0;) 61.1592 Tj
+0 -360.748 Td
+(5385   return os;) 74.2647 Tj
+0 -370.241 Td
+(5386 }) 26.2111 Tj
+0 -379.734 Td
+(5387 ) 21.8426 Tj
+0 -389.228 Td
+(5388 int) 34.9481 Tj
+0 -398.721 Td
+(5389 strlen\(const char *s\)) 113.581 Tj
+0 -408.214 Td
+(5390 {) 26.2111 Tj
+0 -417.708 Td
+(5391   int n;) 56.7907 Tj
+0 -427.201 Td
+(5392 ) 21.8426 Tj
+0 -436.695 Td
+(5393   for\(n = 0; s[n]; n++\)) 122.318 Tj
+0 -446.188 Td
+(5394     ;) 43.6851 Tj
+0 -455.681 Td
+(5395   return n;) 69.8962 Tj
+0 -465.175 Td
+(5396 }) 26.2111 Tj
+0 -474.668 Td
+(5397 ) 21.8426 Tj
+0 -484.161 Td
+(5398 ) 21.8426 Tj
+0 -493.655 Td
+(5399 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 53) 34.9481 Tj
 Q
 Q
 Q
@@ -17118,6 +18297,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -17125,241 +18307,258 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/sysfile.c  Page 7) 24.08 Tj
-0 -3.92728 Td
-(5400 int) 4.816 Tj
-0 -5.23637 Td
-(5401 sys_chdir\(void\)) 12.04 Tj
-0 -6.54546 Td
-(5402 {) 3.612 Tj
-0 -7.85455 Td
-(5403   struct proc *p = curproc[cpu\(\)];) 23.478 Tj
-0 -9.16364 Td
-(5404   struct inode *ip;) 14.448 Tj
-0 -10.4727 Td
-(5405   char *path;) 10.836 Tj
-0 -11.7818 Td
-(5406 ) 3.01 Tj
-0 -13.0909 Td
-(5407   if\(argstr\(0, &path\) < 0\)) 18.662 Tj
-0 -14.4 Td
-(5408     return -1;) 11.438 Tj
-0 -15.7091 Td
-(5409 ) 3.01 Tj
-0 -17.0182 Td
-(5410   if\(\(ip = namei\(path, NAMEI_LOOKUP, 0, 0, 0\)\) == 0\)) 34.314 Tj
-0 -18.3273 Td
-(5411     return -1;) 11.438 Tj
-0 -19.6364 Td
-(5412 ) 3.01 Tj
-0 -20.9455 Td
-(5413   if\(ip == p->cwd\) {) 15.05 Tj
-0 -22.2545 Td
-(5414     iput\(ip\);) 10.836 Tj
-0 -23.5636 Td
-(5415     return 0;) 10.836 Tj
-0 -24.8727 Td
-(5416   }) 4.816 Tj
-0 -26.1818 Td
-(5417 ) 3.01 Tj
-0 -27.4909 Td
-(5418   if\(ip->type != T_DIR\) {) 18.06 Tj
-0 -28.8 Td
-(5419     iput\(ip\);) 10.836 Tj
-0 -30.1091 Td
-(5420     return -1;) 11.438 Tj
-0 -31.4182 Td
-(5421   }) 4.816 Tj
-0 -32.7273 Td
-(5422 ) 3.01 Tj
-0 -34.0364 Td
-(5423   idecref\(p->cwd\);) 13.846 Tj
-0 -35.3454 Td
-(5424   p->cwd = ip;) 11.438 Tj
-0 -36.6545 Td
-(5425   iunlock\(p->cwd\);) 13.846 Tj
-0 -37.9636 Td
-(5426   return 0;) 9.632 Tj
-0 -39.2727 Td
-(5427 }) 3.612 Tj
-0 -40.5818 Td
-(5428 ) 3.01 Tj
-0 -41.8909 Td
-(5429 int) 4.816 Tj
-0 -43.2 Td
-(5430 sys_unlink\(void\)) 12.642 Tj
-0 -44.5091 Td
-(5431 {) 3.612 Tj
-0 -45.8182 Td
-(5432   char *path;) 10.836 Tj
-0 -47.1272 Td
-(5433 ) 3.01 Tj
-0 -48.4363 Td
-(5434   if\(argstr\(0, &path\) < 0\)) 18.662 Tj
-0 -49.7454 Td
-(5435     return -1;) 11.438 Tj
-0 -51.0545 Td
-(5436   return unlink\(path\);) 16.254 Tj
-0 -52.3636 Td
-(5437 }) 3.612 Tj
-0 -53.6727 Td
-(5438 ) 3.01 Tj
-0 -54.9818 Td
-(5439 int) 4.816 Tj
-0 -56.2909 Td
-(5440 sys_fstat\(void\)) 12.04 Tj
-0 -57.6 Td
-(5441 {) 3.612 Tj
-0 -58.9091 Td
-(5442   struct file *f;) 13.244 Tj
-0 -60.2181 Td
-(5443   struct stat *st;) 13.846 Tj
-0 -61.5272 Td
-(5444 ) 3.01 Tj
-0 -62.8363 Td
-(5445   if\(argfd\(0, 0, &f\) < 0 || argptr\(1, \(void*\)&st, sizeof *st\) < 0\)) 42.742 Tj
-0 -64.1454 Td
-(5446     return -1;) 11.438 Tj
-0 -65.4545 Td
-(5447   return filestat\(f, st\);) 18.06 Tj
-0 -66.7636 Td
-(5448 }) 3.612 Tj
-0 -68.0727 Td
-(5449 ) 3.01 Tj
-0 -72 Td
-(Sheet 54) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/mp.h  Page 1) 152.898 Tj
+0 -28.4801 Td
+(5400 // See MultiProcessor Specification Version 1.[14]) 240.268 Tj
+0 -37.9735 Td
+(5401 ) 21.8426 Tj
+0 -47.4668 Td
+(5402 struct mp {             // floating pointer) 209.689 Tj
+0 -56.9602 Td
+(5403   uchar signature[4];           // "_MP_") 200.952 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.109 Tj
+0 -85.4403 Td
+(5406   uchar specrev;                // [14]) 192.215 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.479 Tj
+0 -113.92 Td
+(5409   uchar imcrp;) 83.0018 Tj
+0 -123.414 Td
+(5410   uchar reserved[3];) 109.213 Tj
+0 -132.907 Td
+(5411 };) 30.5796 Tj
+0 -142.4 Td
+(5412 ) 21.8426 Tj
+0 -151.894 Td
+(5413 struct mpconf {         // configuration table header) 253.374 Tj
+0 -161.387 Td
+(5414   uchar signature[4];           // "PCMP") 200.952 Tj
+0 -170.88 Td
+(5415   ushort length;                // total table length) 253.374 Tj
+0 -180.374 Td
+(5416   uchar version;                // [14]) 192.215 Tj
+0 -189.867 Td
+(5417   uchar checksum;               // all bytes must add up t\
+o 0) 288.322 Tj
+0 -199.361 Td
+(5418   uchar product[20];            // product id) 218.426 Tj
+0 -208.854 Td
+(5419   uint *oemtable;               // OEM table pointer) 249.005 Tj
+0 -218.347 Td
+(5420   ushort oemlength;             // OEM table length) 244.637 Tj
+0 -227.841 Td
+(5421   ushort entry;                 // entry count) 222.794 Tj
+0 -237.334 Td
+(5422   uint *lapicaddr;              // address of local APIC) 266.479 Tj
+0 -246.827 Td
+(5423   ushort xlength;               // extended table length) 266.479 Tj
+0 -256.321 Td
+(5424   uchar xchecksum;              // extended table checksum) 275.216 Tj
+0 -265.814 Td
+(5425   uchar reserved;) 96.1073 Tj
+0 -275.307 Td
+(5426 };) 30.5796 Tj
+0 -284.801 Td
+(5427 ) 21.8426 Tj
+0 -294.294 Td
+(5428 struct mpproc {         // processor table entry) 231.531 Tj
+0 -303.788 Td
+(5429   uchar type;                   // entry type \(0\)) 235.9 Tj
+0 -313.281 Td
+(5430   uchar apicid;                 // local APIC id) 231.531 Tj
+0 -322.774 Td
+(5431   uchar version;                // local APIC verison) 253.374 Tj
+0 -332.268 Td
+(5432   uchar flags;                  // CPU flags) 214.057 Tj
+0 -341.761 Td
+(5433     #define MPBOOT 0x02           // This proc is the boot\
+strap processor.) 345.113 Tj
+0 -351.254 Td
+(5434   uchar signature[4];           // CPU signature) 231.531 Tj
+0 -360.748 Td
+(5435   uint feature;                 // feature flags from CPUI\
+D instruction) 332.007 Tj
+0 -370.241 Td
+(5436   uchar reserved[8];) 109.213 Tj
+0 -379.734 Td
+(5437 };) 30.5796 Tj
+0 -389.228 Td
+(5438 ) 21.8426 Tj
+0 -398.721 Td
+(5439 struct mpioapic {       // I/O APIC table entry) 227.163 Tj
+0 -408.214 Td
+(5440   uchar type;                   // entry type \(2\)) 235.9 Tj
+0 -417.708 Td
+(5441   uchar apicno;                 // I/O APIC id) 222.794 Tj
+0 -427.201 Td
+(5442   uchar version;                // I/O APIC version) 244.637 Tj
+0 -436.695 Td
+(5443   uchar flags;                  // I/O APIC flags) 235.9 Tj
+0 -446.188 Td
+(5444   uint *addr;                  // I/O APIC address) 240.268 Tj
+0 -455.681 Td
+(5445 };) 30.5796 Tj
+0 -465.175 Td
+(5446 ) 21.8426 Tj
+0 -474.668 Td
+(5447 ) 21.8426 Tj
+0 -484.161 Td
+(5448 ) 21.8426 Tj
+0 -493.655 Td
+(5449 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/sysfile.c  Page 8) 24.08 Tj
-0 -3.92728 Td
-(5450 int) 4.816 Tj
-0 -5.23637 Td
-(5451 sys_dup\(void\)) 10.836 Tj
-0 -6.54546 Td
-(5452 {) 3.612 Tj
-0 -7.85455 Td
-(5453   struct file *f;) 13.244 Tj
-0 -9.16364 Td
-(5454   int fd;) 8.428 Tj
-0 -10.4727 Td
-(5455 ) 3.01 Tj
-0 -11.7818 Td
-(5456   if\(argfd\(0, 0, &f\) < 0\)) 18.06 Tj
-0 -13.0909 Td
-(5457     return -1;) 11.438 Tj
-0 -14.4 Td
-(5458   if\(\(fd=fdalloc\(f\)\) < 0\)) 18.06 Tj
-0 -15.7091 Td
-(5459     return -1;) 11.438 Tj
-0 -17.0182 Td
-(5460   fileincref\(f\);) 12.642 Tj
-0 -18.3273 Td
-(5461   return fd;) 10.234 Tj
-0 -19.6364 Td
-(5462 }) 3.612 Tj
-0 -20.9455 Td
-(5463 ) 3.01 Tj
-0 -22.2545 Td
-(5464 int) 4.816 Tj
-0 -23.5636 Td
-(5465 sys_link\(void\)) 11.438 Tj
-0 -24.8727 Td
-(5466 {) 3.612 Tj
-0 -26.1818 Td
-(5467   char *old, *new;) 13.846 Tj
-0 -27.4909 Td
-(5468 ) 3.01 Tj
-0 -28.8 Td
-(5469   if\(argstr\(0, &old\) < 0 || argstr\(1, &new\) < 0\)) 31.906 Tj
-0 -30.1091 Td
-(5470     return -1;) 11.438 Tj
-0 -31.4182 Td
-(5471   return link\(old, new\);) 17.458 Tj
-0 -32.7273 Td
-(5472 }) 3.612 Tj
-0 -34.0364 Td
-(5473 ) 3.01 Tj
-0 -35.3454 Td
-(5474 int) 4.816 Tj
-0 -36.6545 Td
-(5475 sys_exec\(void\)) 11.438 Tj
-0 -37.9636 Td
-(5476 {) 3.612 Tj
-0 -39.2727 Td
-(5477   struct proc *cp = curproc[cpu\(\)];) 24.08 Tj
-0 -40.5818 Td
-(5478   uint sz=0, ap, sp, p1, p2;) 19.866 Tj
-0 -41.8909 Td
-(5479   int i, nargs, argbytes, len;) 21.07 Tj
-0 -43.2 Td
-(5480   struct inode *ip;) 14.448 Tj
-0 -44.5091 Td
-(5481   struct elfhdr elf;) 15.05 Tj
-0 -45.8182 Td
-(5482   struct proghdr ph;) 15.05 Tj
-0 -47.1272 Td
-(5483   char *mem = 0;) 12.642 Tj
-0 -48.4363 Td
-(5484   char *path, *s;) 13.244 Tj
-0 -49.7454 Td
-(5485   uint argv;) 10.234 Tj
-0 -51.0545 Td
-(5486 ) 3.01 Tj
-0 -52.3636 Td
-(5487   if\(argstr\(0, &path\) < 0 || argint\(1, \(int*\)&argv\) < 0\)) 36.722 Tj
-0 -53.6727 Td
-(5488     return -1;) 11.438 Tj
-0 -54.9818 Td
-(5489 ) 3.01 Tj
-0 -56.2909 Td
-(5490   ip = namei\(path, NAMEI_LOOKUP, 0, 0, 0\);) 28.294 Tj
-0 -57.6 Td
-(5491   if\(ip == 0\)) 10.836 Tj
-0 -58.9091 Td
-(5492     return -1;) 11.438 Tj
-0 -60.2181 Td
-(5493 ) 3.01 Tj
-0 -61.5272 Td
-(5494   if\(readi\(ip, \(char*\)&elf, 0, sizeof\(elf\)\) < sizeof\(elf\)\)) 37.926 Tj
-0 -62.8363 Td
-(5495     goto bad;) 10.836 Tj
-0 -64.1454 Td
-(5496 ) 3.01 Tj
-0 -65.4545 Td
-(5497   if\(elf.magic != ELF_MAGIC\)) 19.866 Tj
-0 -66.7636 Td
-(5498     goto bad;) 10.836 Tj
-0 -68.0727 Td
-(5499 ) 3.01 Tj
-0 -72 Td
-(Sheet 54) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/mp.h  Page 2) 152.898 Tj
+0 -28.4801 Td
+(5450 // Table entry types) 109.213 Tj
+0 -37.9735 Td
+(5451 #define MPPROC    0x00  // One per processor) 214.057 Tj
+0 -47.4668 Td
+(5452 #define MPBUS     0x01  // One per bus) 187.846 Tj
+0 -56.9602 Td
+(5453 #define MPIOAPIC  0x02  // One per I/O APIC) 209.689 Tj
+0 -66.4535 Td
+(5454 #define MPIOINTR  0x03  // One per bus interrupt source) 262.111 Tj
+0 -75.9469 Td
+(5455 #define MPLINTR   0x04  // One per system interrupt source) 275.216 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.92 Td
+(5459 ) 21.8426 Tj
+0 -123.414 Td
+(5460 ) 21.8426 Tj
+0 -132.907 Td
+(5461 ) 21.8426 Tj
+0 -142.4 Td
+(5462 ) 21.8426 Tj
+0 -151.894 Td
+(5463 ) 21.8426 Tj
+0 -161.387 Td
+(5464 ) 21.8426 Tj
+0 -170.88 Td
+(5465 ) 21.8426 Tj
+0 -180.374 Td
+(5466 ) 21.8426 Tj
+0 -189.867 Td
+(5467 ) 21.8426 Tj
+0 -199.361 Td
+(5468 ) 21.8426 Tj
+0 -208.854 Td
+(5469 ) 21.8426 Tj
+0 -218.347 Td
+(5470 ) 21.8426 Tj
+0 -227.841 Td
+(5471 ) 21.8426 Tj
+0 -237.334 Td
+(5472 ) 21.8426 Tj
+0 -246.827 Td
+(5473 ) 21.8426 Tj
+0 -256.321 Td
+(5474 ) 21.8426 Tj
+0 -265.814 Td
+(5475 ) 21.8426 Tj
+0 -275.307 Td
+(5476 ) 21.8426 Tj
+0 -284.801 Td
+(5477 ) 21.8426 Tj
+0 -294.294 Td
+(5478 ) 21.8426 Tj
+0 -303.788 Td
+(5479 ) 21.8426 Tj
+0 -313.281 Td
+(5480 ) 21.8426 Tj
+0 -322.774 Td
+(5481 ) 21.8426 Tj
+0 -332.268 Td
+(5482 ) 21.8426 Tj
+0 -341.761 Td
+(5483 ) 21.8426 Tj
+0 -351.254 Td
+(5484 ) 21.8426 Tj
+0 -360.748 Td
+(5485 ) 21.8426 Tj
+0 -370.241 Td
+(5486 ) 21.8426 Tj
+0 -379.734 Td
+(5487 ) 21.8426 Tj
+0 -389.228 Td
+(5488 ) 21.8426 Tj
+0 -398.721 Td
+(5489 ) 21.8426 Tj
+0 -408.214 Td
+(5490 ) 21.8426 Tj
+0 -417.708 Td
+(5491 ) 21.8426 Tj
+0 -427.201 Td
+(5492 ) 21.8426 Tj
+0 -436.695 Td
+(5493 ) 21.8426 Tj
+0 -446.188 Td
+(5494 ) 21.8426 Tj
+0 -455.681 Td
+(5495 ) 21.8426 Tj
+0 -465.175 Td
+(5496 ) 21.8426 Tj
+0 -474.668 Td
+(5497 ) 21.8426 Tj
+0 -484.161 Td
+(5498 ) 21.8426 Tj
+0 -493.655 Td
+(5499 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 54) 34.9481 Tj
 Q
 Q
 Q
@@ -17370,7 +18569,10 @@ pdfEndPage
 %%Page: 62 62
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -17378,241 +18580,258 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/sysfile.c  Page 9) 24.08 Tj
-0 -3.92728 Td
-(5500   sz = 0;) 8.428 Tj
-0 -5.23637 Td
-(5501   for\(i = 0; i < elf.phnum; i++\){) 22.876 Tj
-0 -6.54546 Td
-(5502     if\(readi\(ip, \(char*\)&ph, elf.phoff + i * sizeof\(ph\),) 36.722 Tj
-0 -7.85455 Td
-(5503              sizeof\(ph\)\) != sizeof\(ph\)\)) 26.488 Tj
-0 -9.16364 Td
-(5504       goto bad;) 12.04 Tj
-0 -10.4727 Td
-(5505     if\(ph.type != ELF_PROG_LOAD\)) 22.274 Tj
-0 -11.7818 Td
-(5506       continue;) 12.04 Tj
-0 -13.0909 Td
-(5507     if\(ph.memsz < ph.filesz\)) 19.866 Tj
-0 -14.4 Td
-(5508       goto bad;) 12.04 Tj
-0 -15.7091 Td
-(5509     sz += ph.memsz;) 14.448 Tj
-0 -17.0182 Td
-(5510   }) 4.816 Tj
-0 -18.3273 Td
-(5511 ) 3.01 Tj
-0 -19.6364 Td
-(5512   sz += 4096 - \(sz % 4096\);) 19.264 Tj
-0 -20.9455 Td
-(5513   sz += 4096;) 10.836 Tj
-0 -22.2545 Td
-(5514 ) 3.01 Tj
-0 -23.5636 Td
-(5515   mem = kalloc\(sz\);) 14.448 Tj
-0 -24.8727 Td
-(5516   if\(mem == 0\)) 11.438 Tj
-0 -26.1818 Td
-(5517     goto bad;) 10.836 Tj
-0 -27.4909 Td
-(5518   memset\(mem, 0, sz\);) 15.652 Tj
-0 -28.8 Td
-(5519 ) 3.01 Tj
-0 -30.1091 Td
-(5520   nargs = 0;) 10.234 Tj
-0 -31.4182 Td
-(5521   argbytes = 0;) 12.04 Tj
-0 -32.7273 Td
-(5522   for\(i = 0;; i++\){) 14.448 Tj
-0 -34.0364 Td
-(5523     if\(fetchint\(cp, argv + 4*i, \(int*\)&ap\) < 0\)) 31.304 Tj
-0 -35.3454 Td
-(5524       goto bad;) 12.04 Tj
-0 -36.6545 Td
-(5525     if\(ap == 0\)) 12.04 Tj
-0 -37.9636 Td
-(5526       break;) 10.234 Tj
-0 -39.2727 Td
-(5527     len = fetchstr\(cp, ap, &s\);) 21.672 Tj
-0 -40.5818 Td
-(5528     if\(len < 0\)) 12.04 Tj
-0 -41.8909 Td
-(5529       goto bad;) 12.04 Tj
-0 -43.2 Td
-(5530     nargs++;) 10.234 Tj
-0 -44.5091 Td
-(5531     argbytes += len + 1;) 17.458 Tj
-0 -45.8182 Td
-(5532   }) 4.816 Tj
-0 -47.1272 Td
-(5533 ) 3.01 Tj
-0 -48.4363 Td
-(5534   // argn\\0) 9.632 Tj
-0 -49.7454 Td
-(5535   // ...) 7.826 Tj
-0 -51.0545 Td
-(5536   // arg0\\0) 9.632 Tj
-0 -52.3636 Td
-(5537   // 0) 6.622 Tj
-0 -53.6727 Td
-(5538   // ptr to argn) 12.642 Tj
-0 -54.9818 Td
-(5539   // ...) 7.826 Tj
-0 -56.2909 Td
-(5540   // 12: ptr to arg0) 15.05 Tj
-0 -57.6 Td
-(5541   //  8: argv \(points to ptr to arg0\)) 25.284 Tj
-0 -58.9091 Td
-(5542   //  4: argc) 10.836 Tj
-0 -60.2181 Td
-(5543   //  0: fake return pc) 16.856 Tj
-0 -61.5272 Td
-(5544   sp = sz - argbytes - \(nargs+1\)*4 - 4 - 4 - 4;) 31.304 Tj
-0 -62.8363 Td
-(5545   *\(uint*\)\(mem + sp\) = 0xffffffff;) 23.478 Tj
-0 -64.1454 Td
-(5546   *\(uint*\)\(mem + sp + 4\) = nargs;) 22.876 Tj
-0 -65.4545 Td
-(5547   *\(uint*\)\(mem + sp + 8\) = \(uint\)\(sp + 12\);) 28.896 Tj
-0 -66.7636 Td
-(5548 ) 3.01 Tj
-0 -68.0727 Td
-(5549 ) 3.01 Tj
-0 -72 Td
-(Sheet 55) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  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.163 Tj
+0 -47.4668 Td
+(5502 // http://developer.intel.com/design/pentium/datashts/2420\
+1606.pdf) 310.165 Tj
+0 -56.9602 Td
+(5503 ) 21.8426 Tj
+0 -66.4535 Td
+(5504 #include "types.h") 100.476 Tj
+0 -75.9469 Td
+(5505 #include "defs.h") 96.1073 Tj
+0 -85.4403 Td
+(5506 #include "param.h") 100.476 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.92 Td
+(5509 #include "mmu.h") 91.7388 Tj
+0 -123.414 Td
+(5510 #include "proc.h") 96.1073 Tj
+0 -132.907 Td
+(5511 ) 21.8426 Tj
+0 -142.4 Td
+(5512 struct cpu cpus[NCPU];) 117.95 Tj
+0 -151.894 Td
+(5513 static struct cpu *bcpu;) 126.687 Tj
+0 -161.387 Td
+(5514 int ismp;) 61.1592 Tj
+0 -170.88 Td
+(5515 int ncpu;) 61.1592 Tj
+0 -180.374 Td
+(5516 uchar ioapic_id;) 91.7388 Tj
+0 -189.867 Td
+(5517 ) 21.8426 Tj
+0 -199.361 Td
+(5518 int) 34.9481 Tj
+0 -208.854 Td
+(5519 mp_bcpu\(void\)) 78.6333 Tj
+0 -218.347 Td
+(5520 {) 26.2111 Tj
+0 -227.841 Td
+(5521   return bcpu-cpus;) 104.844 Tj
+0 -237.334 Td
+(5522 }) 26.2111 Tj
+0 -246.827 Td
+(5523 ) 21.8426 Tj
+0 -256.321 Td
+(5524 static uchar) 74.2647 Tj
+0 -265.814 Td
+(5525 sum\(uchar *addr, int len\)) 131.055 Tj
+0 -275.307 Td
+(5526 {) 26.2111 Tj
+0 -284.801 Td
+(5527   int i, sum;) 78.6333 Tj
+0 -294.294 Td
+(5528 ) 21.8426 Tj
+0 -303.788 Td
+(5529   sum = 0;) 65.5277 Tj
+0 -313.281 Td
+(5530   for\(i=0; i<len; i++\)) 117.95 Tj
+0 -322.774 Td
+(5531     sum += addr[i];) 104.844 Tj
+0 -332.268 Td
+(5532   return sum;) 78.6333 Tj
+0 -341.761 Td
+(5533 }) 26.2111 Tj
+0 -351.254 Td
+(5534 ) 21.8426 Tj
+0 -360.748 Td
+(5535 // Look for an MP structure in the len bytes at addr.) 253.374 Tj
+0 -370.241 Td
+(5536 static struct mp*) 96.1073 Tj
+0 -379.734 Td
+(5537 mp_search1\(uchar *addr, int len\)) 161.635 Tj
+0 -389.228 Td
+(5538 {) 26.2111 Tj
+0 -398.721 Td
+(5539   uchar *e, *p;) 87.3703 Tj
+0 -408.214 Td
+(5540 ) 21.8426 Tj
+0 -417.708 Td
+(5541   e = addr+len;) 87.3703 Tj
+0 -427.201 Td
+(5542   for\(p = addr; p < e; p += sizeof\(struct mp\)\)) 222.794 Tj
+0 -436.695 Td
+(5543     if\(memcmp\(p, "_MP_", 4\) == 0 && sum\(p, sizeof\(str\
+uct mp\)\) == 0\)) 314.533 Tj
+0 -446.188 Td
+(5544       return \(struct mp*\)p;) 139.792 Tj
+0 -455.681 Td
+(5545   return 0;) 69.8962 Tj
+0 -465.175 Td
+(5546 }) 26.2111 Tj
+0 -474.668 Td
+(5547 ) 21.8426 Tj
+0 -484.161 Td
+(5548 ) 21.8426 Tj
+0 -493.655 Td
+(5549 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/sysfile.c  Page 10) 24.682 Tj
-0 -3.92728 Td
-(5550   p1 = sp + 12;) 12.04 Tj
-0 -5.23637 Td
-(5551   p2 = sp + 12 + \(nargs + 1\) * 4;) 22.876 Tj
-0 -6.54546 Td
-(5552   for\(i = 0; i < nargs; i++\){) 20.468 Tj
-0 -7.85455 Td
-(5553     fetchint\(cp, argv + 4*i, \(int*\)&ap\);) 27.09 Tj
-0 -9.16364 Td
-(5554     len = fetchstr\(cp, ap, &s\);) 21.672 Tj
-0 -10.4727 Td
-(5555     memmove\(mem + p2, s, len + 1\);) 23.478 Tj
-0 -11.7818 Td
-(5556     *\(uint*\)\(mem + p1\) = p2;) 19.866 Tj
-0 -13.0909 Td
-(5557     p1 += 4;) 10.234 Tj
-0 -14.4 Td
-(5558     p2 += len + 1;) 13.846 Tj
-0 -15.7091 Td
-(5559   }) 4.816 Tj
-0 -17.0182 Td
-(5560   *\(uint*\)\(mem + p1\) = 0;) 18.06 Tj
-0 -18.3273 Td
-(5561 ) 3.01 Tj
-0 -19.6364 Td
-(5562   // commit to the new image.) 20.468 Tj
-0 -20.9455 Td
-(5563   kfree\(cp->mem, cp->sz\);) 18.06 Tj
-0 -22.2545 Td
-(5564   cp->sz = sz;) 11.438 Tj
-0 -23.5636 Td
-(5565   cp->mem = mem;) 12.642 Tj
-0 -24.8727 Td
-(5566   mem = 0;) 9.03 Tj
-0 -26.1818 Td
-(5567 ) 3.01 Tj
-0 -27.4909 Td
-(5568   for\(i = 0; i < elf.phnum; i++\){) 22.876 Tj
-0 -28.8 Td
-(5569     if\(readi\(ip, \(char*\)&ph, elf.phoff + i * sizeof\(ph\),) 36.722 Tj
-0 -30.1091 Td
-(5570              sizeof\(ph\)\) != sizeof\(ph\)\)) 26.488 Tj
-0 -31.4182 Td
-(5571       goto bad2;) 12.642 Tj
-0 -32.7273 Td
-(5572     if\(ph.type != ELF_PROG_LOAD\)) 22.274 Tj
-0 -34.0364 Td
-(5573       continue;) 12.04 Tj
-0 -35.3454 Td
-(5574     if\(ph.va + ph.memsz > sz\)) 20.468 Tj
-0 -36.6545 Td
-(5575       goto bad2;) 12.642 Tj
-0 -37.9636 Td
-(5576     if\(readi\(ip, cp->mem + ph.va, ph.offset, ph.filesz\) != ph.filesz\)) 44.548 Tj
-0 -39.2727 Td
-(5577       goto bad2;) 12.642 Tj
-0 -40.5818 Td
-(5578     memset\(cp->mem + ph.va + ph.filesz, 0, ph.memsz - ph.filesz\);) 42.14 Tj
-0 -41.8909 Td
-(5579   }) 4.816 Tj
-0 -43.2 Td
-(5580 ) 3.01 Tj
-0 -44.5091 Td
-(5581   iput\(ip\);) 9.632 Tj
-0 -45.8182 Td
-(5582 ) 3.01 Tj
-0 -47.1272 Td
-(5583   cp->tf->eip = elf.entry;) 18.662 Tj
-0 -48.4363 Td
-(5584   cp->tf->esp = sp;) 14.448 Tj
-0 -49.7454 Td
-(5585   setupsegs\(cp\);) 12.642 Tj
-0 -51.0545 Td
-(5586 ) 3.01 Tj
-0 -52.3636 Td
-(5587   return 0;) 9.632 Tj
-0 -53.6727 Td
-(5588 ) 3.01 Tj
-0 -54.9818 Td
-(5589  bad:) 6.02 Tj
-0 -56.2909 Td
-(5590   if\(mem\)) 8.428 Tj
-0 -57.6 Td
-(5591     kfree\(mem, sz\);) 14.448 Tj
-0 -58.9091 Td
-(5592   iput\(ip\);) 9.632 Tj
-0 -60.2181 Td
-(5593   return -1;) 10.234 Tj
-0 -61.5272 Td
-(5594 ) 3.01 Tj
-0 -62.8363 Td
-(5595  bad2:) 6.622 Tj
-0 -64.1454 Td
-(5596   iput\(ip\);) 9.632 Tj
-0 -65.4545 Td
-(5597   proc_exit\(\);) 11.438 Tj
-0 -66.7636 Td
-(5598   return 0;) 9.632 Tj
-0 -68.0727 Td
-(5599 }) 3.612 Tj
-0 -72 Td
-(Sheet 55) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  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.007 Tj
+0 -37.9735 Td
+(5551 // spec is in one of the following three locations:) 244.637 Tj
+0 -47.4668 Td
+(5552 // 1\) in the first KB of the EBDA;) 170.372 Tj
+0 -56.9602 Td
+(5553 // 2\) in the last KB of system base memory;) 209.689 Tj
+0 -66.4535 Td
+(5554 // 3\) in the BIOS ROM between 0xE0000 and 0xFFFFF.) 240.268 Tj
+0 -75.9469 Td
+(5555 static struct mp*) 96.1073 Tj
+0 -85.4403 Td
+(5556 mp_search\(void\)) 87.3703 Tj
+0 -94.9336 Td
+(5557 {) 26.2111 Tj
+0 -104.427 Td
+(5558   uchar *bda;) 78.6333 Tj
+0 -113.92 Td
+(5559   uint p;) 61.1592 Tj
+0 -123.414 Td
+(5560   struct mp *mp;) 91.7388 Tj
+0 -132.907 Td
+(5561 ) 21.8426 Tj
+0 -142.4 Td
+(5562   bda = \(uchar*\)0x400;) 117.95 Tj
+0 -151.894 Td
+(5563   if\(\(p = \(bda[0x0F]<<8\)|bda[0x0E]\)\){) 183.478 Tj
+0 -161.387 Td
+(5564     if\(\(mp = mp_search1\(\(uchar*\)p, 1024\)\)\)) 205.32 Tj
+0 -170.88 Td
+(5565       return mp;) 91.7388 Tj
+0 -180.374 Td
+(5566   } else {) 65.5277 Tj
+0 -189.867 Td
+(5567     p = \(\(bda[0x14]<<8\)|bda[0x13]\)*1024;) 196.583 Tj
+0 -199.361 Td
+(5568     if\(\(mp = mp_search1\(\(uchar*\)p-1024, 1024\)\)\)) 227.163 Tj
+0 -208.854 Td
+(5569       return mp;) 91.7388 Tj
+0 -218.347 Td
+(5570   }) 34.9481 Tj
+0 -227.841 Td
+(5571   return mp_search1\(\(uchar*\)0xF0000, 0x10000\);) 222.794 Tj
+0 -237.334 Td
+(5572 }) 26.2111 Tj
+0 -246.827 Td
+(5573 ) 21.8426 Tj
+0 -256.321 Td
+(5574 // Search for an MP configuration table.  For now,) 240.268 Tj
+0 -265.814 Td
+(5575 // don't accept the default configurations \(physaddr == 0\
+\).) 279.585 Tj
+0 -275.307 Td
+(5576 // Check for correct signature, calculate the checksum and\
+,) 279.585 Tj
+0 -284.801 Td
+(5577 // if correct, check the version.) 166.004 Tj
+0 -294.294 Td
+(5578 // To do: check extended table checksum.) 196.583 Tj
+0 -303.788 Td
+(5579 static struct mpconf*) 113.581 Tj
+0 -313.281 Td
+(5580 mp_config\(struct mp **pmp\)) 135.424 Tj
+0 -322.774 Td
+(5581 {) 26.2111 Tj
+0 -332.268 Td
+(5582   struct mpconf *conf;) 117.95 Tj
+0 -341.761 Td
+(5583   struct mp *mp;) 91.7388 Tj
+0 -351.254 Td
+(5584 ) 21.8426 Tj
+0 -360.748 Td
+(5585   if\(\(mp = mp_search\(\)\) == 0 || mp->physaddr == 0\)) 240.268 Tj
+0 -370.241 Td
+(5586     return 0;) 78.6333 Tj
+0 -379.734 Td
+(5587   conf = \(struct mpconf*\)mp->physaddr;) 187.846 Tj
+0 -389.228 Td
+(5588   if\(memcmp\(conf, "PCMP", 4\) != 0\)) 170.372 Tj
+0 -398.721 Td
+(5589     return 0;) 78.6333 Tj
+0 -408.214 Td
+(5590   if\(conf->version != 1 && conf->version != 4\)) 222.794 Tj
+0 -417.708 Td
+(5591     return 0;) 78.6333 Tj
+0 -427.201 Td
+(5592   if\(sum\(\(uchar*\)conf, conf->length\) != 0\)) 205.32 Tj
+0 -436.695 Td
+(5593     return 0;) 78.6333 Tj
+0 -446.188 Td
+(5594   *pmp = mp;) 74.2647 Tj
+0 -455.681 Td
+(5595   return conf;) 83.0018 Tj
+0 -465.175 Td
+(5596 }) 26.2111 Tj
+0 -474.668 Td
+(5597 ) 21.8426 Tj
+0 -484.161 Td
+(5598 ) 21.8426 Tj
+0 -493.655 Td
+(5599 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 55) 34.9481 Tj
 Q
 Q
 Q
@@ -17624,6 +18843,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -17631,241 +18853,267 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/pipe.c  Page 1) 22.274 Tj
-0 -3.92728 Td
-(5600 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(5601 #include "param.h") 13.846 Tj
-0 -6.54546 Td
-(5602 #include "x86.h") 12.642 Tj
-0 -7.85455 Td
-(5603 #include "mmu.h") 12.642 Tj
-0 -9.16364 Td
-(5604 #include "proc.h") 13.244 Tj
-0 -10.4727 Td
-(5605 #include "defs.h") 13.244 Tj
-0 -11.7818 Td
-(5606 #include "file.h") 13.244 Tj
-0 -13.0909 Td
-(5607 #include "spinlock.h") 15.652 Tj
-0 -14.4 Td
-(5608 ) 3.01 Tj
-0 -15.7091 Td
-(5609 #define PIPESIZE 512) 15.05 Tj
-0 -17.0182 Td
-(5610 ) 3.01 Tj
-0 -18.3273 Td
-(5611 struct pipe {) 10.836 Tj
-0 -19.6364 Td
-(5612   int readopen; // read fd is still open) 27.09 Tj
-0 -20.9455 Td
-(5613   int writeopen; // write fd is still open) 28.294 Tj
-0 -22.2545 Td
-(5614   int writep; // next index to write) 24.682 Tj
-0 -23.5636 Td
-(5615   int readp;  // next index to read) 24.08 Tj
-0 -24.8727 Td
-(5616   struct spinlock lock;) 16.856 Tj
-0 -26.1818 Td
-(5617   char data[PIPESIZE];) 16.254 Tj
-0 -27.4909 Td
-(5618 };) 4.214 Tj
-0 -28.8 Td
-(5619 ) 3.01 Tj
-0 -30.1091 Td
-(5620 int) 4.816 Tj
-0 -31.4182 Td
-(5621 pipe_alloc\(struct file **f0, struct file **f1\)) 30.702 Tj
-0 -32.7273 Td
-(5622 {) 3.612 Tj
-0 -34.0364 Td
-(5623   *f0 = *f1 = 0;) 12.642 Tj
-0 -35.3454 Td
-(5624   struct pipe *p = 0;) 15.652 Tj
-0 -36.6545 Td
-(5625 ) 3.01 Tj
-0 -37.9636 Td
-(5626   if\(\(*f0 = filealloc\(\)\) == 0\)) 21.07 Tj
-0 -39.2727 Td
-(5627     goto oops;) 11.438 Tj
-0 -40.5818 Td
-(5628   if\(\(*f1 = filealloc\(\)\) == 0\)) 21.07 Tj
-0 -41.8909 Td
-(5629     goto oops;) 11.438 Tj
-0 -43.2 Td
-(5630   if\(\(p = \(struct pipe*\) kalloc\(PAGE\)\) == 0\)) 29.498 Tj
-0 -44.5091 Td
-(5631     goto oops;) 11.438 Tj
-0 -45.8182 Td
-(5632   p->readopen = 1;) 13.846 Tj
-0 -47.1272 Td
-(5633   p->writeopen = 1;) 14.448 Tj
-0 -48.4363 Td
-(5634   p->writep = 0;) 12.642 Tj
-0 -49.7454 Td
-(5635   p->readp = 0;) 12.04 Tj
-0 -51.0545 Td
-(5636   initlock\(&p->lock, "pipe"\);) 20.468 Tj
-0 -52.3636 Td
-(5637   \(*f0\)->type = FD_PIPE;) 17.458 Tj
-0 -53.6727 Td
-(5638   \(*f0\)->readable = 1;) 16.254 Tj
-0 -54.9818 Td
-(5639   \(*f0\)->writable = 0;) 16.254 Tj
-0 -56.2909 Td
-(5640   \(*f0\)->pipe = p;) 13.846 Tj
-0 -57.6 Td
-(5641   \(*f1\)->type = FD_PIPE;) 17.458 Tj
-0 -58.9091 Td
-(5642   \(*f1\)->readable = 0;) 16.254 Tj
-0 -60.2181 Td
-(5643   \(*f1\)->writable = 1;) 16.254 Tj
-0 -61.5272 Td
-(5644   \(*f1\)->pipe = p;) 13.846 Tj
-0 -62.8363 Td
-(5645   return 0;) 9.632 Tj
-0 -64.1454 Td
-(5646  oops:) 6.622 Tj
-0 -65.4545 Td
-(5647   if\(p\)) 7.224 Tj
-0 -66.7636 Td
-(5648     kfree\(\(char*\) p, PAGE\);) 19.264 Tj
-0 -68.0727 Td
-(5649   if\(*f0\){) 9.03 Tj
-0 -72 Td
-(Sheet 56) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/mp.c  Page 3) 152.898 Tj
+0 -28.4801 Td
+(5600 void) 39.3166 Tj
+0 -37.9735 Td
+(5601 mp_init\(void\)) 78.6333 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.95 Tj
+0 -85.4403 Td
+(5606   struct mpproc *proc;) 117.95 Tj
+0 -94.9336 Td
+(5607   struct mpioapic *ioapic;) 135.424 Tj
+0 -104.427 Td
+(5608 ) 21.8426 Tj
+0 -113.92 Td
+(5609   bcpu = &cpus[ncpu];) 113.581 Tj
+0 -123.414 Td
+(5610   if\(\(conf = mp_config\(&mp\)\) == 0\)) 170.372 Tj
+0 -132.907 Td
+(5611     return;) 69.8962 Tj
+0 -142.4 Td
+(5612 ) 21.8426 Tj
+0 -151.894 Td
+(5613   ismp = 1;) 69.8962 Tj
+0 -161.387 Td
+(5614   lapic = \(uint*\)conf->lapicaddr;) 166.004 Tj
+0 -170.88 Td
+(5615 ) 21.8426 Tj
+0 -180.374 Td
+(5616   for\(p=\(uchar*\)\(conf+1\), e=\(uchar*\)conf+conf->leng\
+th; p<e; \){) 292.69 Tj
+0 -189.867 Td
+(5617     switch\(*p\){) 87.3703 Tj
+0 -199.361 Td
+(5618     case MPPROC:) 91.7388 Tj
+0 -208.854 Td
+(5619       proc = \(struct mpproc*\)p;) 157.267 Tj
+0 -218.347 Td
+(5620       cpus[ncpu].apicid = proc->apicid;) 192.215 Tj
+0 -227.841 Td
+(5621       if\(proc->flags & MPBOOT\)) 152.898 Tj
+0 -237.334 Td
+(5622         bcpu = &cpus[ncpu];) 139.792 Tj
+0 -246.827 Td
+(5623       ncpu++;) 78.6333 Tj
+0 -256.321 Td
+(5624       p += sizeof\(struct mpproc\);) 166.004 Tj
+0 -265.814 Td
+(5625       continue;) 87.3703 Tj
+0 -275.307 Td
+(5626     case MPIOAPIC:) 100.476 Tj
+0 -284.801 Td
+(5627       ioapic = \(struct mpioapic*\)p;) 174.741 Tj
+0 -294.294 Td
+(5628       ioapic_id = ioapic->apicno;) 166.004 Tj
+0 -303.788 Td
+(5629       p += sizeof\(struct mpioapic\);) 174.741 Tj
+0 -313.281 Td
+(5630       continue;) 87.3703 Tj
+0 -322.774 Td
+(5631     case MPBUS:) 87.3703 Tj
+0 -332.268 Td
+(5632     case MPIOINTR:) 100.476 Tj
+0 -341.761 Td
+(5633     case MPLINTR:) 96.1073 Tj
+0 -351.254 Td
+(5634       p += 8;) 78.6333 Tj
+0 -360.748 Td
+(5635       continue;) 87.3703 Tj
+0 -370.241 Td
+(5636     default:) 74.2647 Tj
+0 -379.734 Td
+(5637       cprintf\("mp_init: unknown config type %x\\n", *p\);) 262.111 Tj
+0 -389.228 Td
+(5638       panic\("mp_init"\);) 122.318 Tj
+0 -398.721 Td
+(5639     }) 43.6851 Tj
+0 -408.214 Td
+(5640   }) 34.9481 Tj
+0 -417.708 Td
+(5641 ) 21.8426 Tj
+0 -427.201 Td
+(5642   if\(mp->imcrp\){) 91.7388 Tj
+0 -436.695 Td
+(5643     // Bochs doesn't support IMCR, so this doesn't run on \
+Bochs.) 301.427 Tj
+0 -446.188 Td
+(5644     // But it would on real hardware.) 183.478 Tj
+0 -455.681 Td
+(5645     outb\(0x22, 0x70\);   // Select IMCR) 187.846 Tj
+0 -465.175 Td
+(5646     outb\(0x23, inb\(0x23\) | 1\);  // Mask external inter\
+rupts.) 283.953 Tj
+0 -474.668 Td
+(5647   }) 34.9481 Tj
+0 -484.161 Td
+(5648 }) 26.2111 Tj
+0 -493.655 Td
+(5649 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/pipe.c  Page 2) 22.274 Tj
-0 -3.92728 Td
-(5650     \(*f0\)->type = FD_NONE;) 18.662 Tj
-0 -5.23637 Td
-(5651     fileclose\(*f0\);) 14.448 Tj
-0 -6.54546 Td
-(5652   }) 4.816 Tj
-0 -7.85455 Td
-(5653   if\(*f1\){) 9.03 Tj
-0 -9.16364 Td
-(5654     \(*f1\)->type = FD_NONE;) 18.662 Tj
-0 -10.4727 Td
-(5655     fileclose\(*f1\);) 14.448 Tj
-0 -11.7818 Td
-(5656   }) 4.816 Tj
-0 -13.0909 Td
-(5657   return -1;) 10.234 Tj
-0 -14.4 Td
-(5658 }) 3.612 Tj
-0 -15.7091 Td
-(5659 ) 3.01 Tj
-0 -17.0182 Td
-(5660 void) 5.418 Tj
-0 -18.3273 Td
-(5661 pipe_close\(struct pipe *p, int writable\)) 27.09 Tj
-0 -19.6364 Td
-(5662 {) 3.612 Tj
-0 -20.9455 Td
-(5663   acquire\(&p->lock\);) 15.05 Tj
-0 -22.2545 Td
-(5664 ) 3.01 Tj
-0 -23.5636 Td
-(5665   if\(writable\){) 12.04 Tj
-0 -24.8727 Td
-(5666     p->writeopen = 0;) 15.652 Tj
-0 -26.1818 Td
-(5667     wakeup\(&p->readp\);) 16.254 Tj
-0 -27.4909 Td
-(5668   } else {) 9.03 Tj
-0 -28.8 Td
-(5669     p->readopen = 0;) 15.05 Tj
-0 -30.1091 Td
-(5670     wakeup\(&p->writep\);) 16.856 Tj
-0 -31.4182 Td
-(5671   }) 4.816 Tj
-0 -32.7273 Td
-(5672 ) 3.01 Tj
-0 -34.0364 Td
-(5673   release\(&p->lock\);) 15.05 Tj
-0 -35.3454 Td
-(5674 ) 3.01 Tj
-0 -36.6545 Td
-(5675   if\(p->readopen == 0 && p->writeopen == 0\)) 28.896 Tj
-0 -37.9636 Td
-(5676     kfree\(\(char*\) p, PAGE\);) 19.264 Tj
-0 -39.2727 Td
-(5677 }) 3.612 Tj
-0 -40.5818 Td
-(5678 ) 3.01 Tj
-0 -41.8909 Td
-(5679 int) 4.816 Tj
-0 -43.2 Td
-(5680 pipe_write\(struct pipe *p, char *addr, int n\)) 30.1 Tj
-0 -44.5091 Td
-(5681 {) 3.612 Tj
-0 -45.8182 Td
-(5682   int i;) 7.826 Tj
-0 -47.1272 Td
-(5683 ) 3.01 Tj
-0 -48.4363 Td
-(5684   acquire\(&p->lock\);) 15.05 Tj
-0 -49.7454 Td
-(5685 ) 3.01 Tj
-0 -51.0545 Td
-(5686   for\(i = 0; i < n; i++\){) 18.06 Tj
-0 -52.3636 Td
-(5687     while\(\(\(p->writep + 1\) % PIPESIZE\) == p->readp\){) 34.314 Tj
-0 -53.6727 Td
-(5688       if\(p->readopen == 0\){) 19.264 Tj
-0 -54.9818 Td
-(5689         release\(&p->lock\);) 18.662 Tj
-0 -56.2909 Td
-(5690         return -1;) 13.846 Tj
-0 -57.6 Td
-(5691       }) 7.224 Tj
-0 -58.9091 Td
-(5692       wakeup\(&p->readp\);) 17.458 Tj
-0 -60.2181 Td
-(5693       sleep\(&p->writep, &p->lock\);) 23.478 Tj
-0 -61.5272 Td
-(5694     }) 6.02 Tj
-0 -62.8363 Td
-(5695     p->data[p->writep] = addr[i];) 22.876 Tj
-0 -64.1454 Td
-(5696     p->writep = \(p->writep + 1\) % PIPESIZE;) 28.896 Tj
-0 -65.4545 Td
-(5697   }) 4.816 Tj
-0 -66.7636 Td
-(5698 ) 3.01 Tj
-0 -68.0727 Td
-(5699 ) 3.01 Tj
-0 -72 Td
-(Sheet 56) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/lapic.c  Page 1) 166.004 Tj
+0 -28.4801 Td
+(5650 // The local APIC manages internal \(non-I/O\) interrupts.) 266.479 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.476 Tj
+0 -66.4535 Td
+(5654 #include "traps.h") 100.476 Tj
+0 -75.9469 Td
+(5655 ) 21.8426 Tj
+0 -85.4403 Td
+(5656 // Local APIC registers, divided by 4 for use as uint[] in\
+dices.) 301.427 Tj
+0 -94.9336 Td
+(5657 #define ID      \(0x0020/4\)   // ID) 170.372 Tj
+0 -104.427 Td
+(5658 #define VER     \(0x0030/4\)   // Version) 192.215 Tj
+0 -113.92 Td
+(5659 #define TPR     \(0x0080/4\)   // Task Priority) 218.426 Tj
+0 -123.414 Td
+(5660 #define EOI     \(0x00B0/4\)   // EOI) 174.741 Tj
+0 -132.907 Td
+(5661 #define SVR     \(0x00F0/4\)   // Spurious Interrupt Vecto\
+r) 270.848 Tj
+0 -142.4 Td
+(5662   #define ENABLE     0x00000100   // Unit Enable) 231.531 Tj
+0 -151.894 Td
+(5663 #define ESR     \(0x0280/4\)   // Error Status) 214.057 Tj
+0 -161.387 Td
+(5664 #define ICRLO   \(0x0300/4\)   // Interrupt Command) 235.9 Tj
+0 -170.88 Td
+(5665   #define INIT       0x00000500   // INIT/RESET) 227.163 Tj
+0 -180.374 Td
+(5666   #define STARTUP    0x00000600   // Startup IPI) 231.531 Tj
+0 -189.867 Td
+(5667   #define DELIVS     0x00001000   // Delivery status) 249.005 Tj
+0 -199.361 Td
+(5668   #define ASSERT     0x00004000   // Assert interrupt \(vs\
+ deassert\)) 314.533 Tj
+0 -208.854 Td
+(5669   #define LEVEL      0x00008000   // Level triggered) 249.005 Tj
+0 -218.347 Td
+(5670   #define BCAST      0x00080000   // Send to all APICs, in\
+cluding self.) 332.007 Tj
+0 -227.841 Td
+(5671 #define ICRHI   \(0x0310/4\)   // Interrupt Command [63:32\
+]) 270.848 Tj
+0 -237.334 Td
+(5672 #define TIMER   \(0x0320/4\)   // Local Vector Table 0 \(T\
+IMER\)) 283.953 Tj
+0 -246.827 Td
+(5673   #define X1         0x0000000B   // divide counts by 1) 262.111 Tj
+0 -256.321 Td
+(5674   #define PERIODIC   0x00020000   // Periodic) 218.426 Tj
+0 -265.814 Td
+(5675 #define PCINT   \(0x0340/4\)   // Performance Counter LVT) 262.111 Tj
+0 -275.307 Td
+(5676 #define LINT0   \(0x0350/4\)   // Local Vector Table 1 \(L\
+INT0\)) 283.953 Tj
+0 -284.801 Td
+(5677 #define LINT1   \(0x0360/4\)   // Local Vector Table 2 \(L\
+INT1\)) 283.953 Tj
+0 -294.294 Td
+(5678 #define ERROR   \(0x0370/4\)   // Local Vector Table 3 \(E\
+RROR\)) 283.953 Tj
+0 -303.788 Td
+(5679   #define MASKED     0x00010000   // Interrupt masked) 253.374 Tj
+0 -313.281 Td
+(5680 #define TICR    \(0x0380/4\)   // Timer Initial Count) 244.637 Tj
+0 -322.774 Td
+(5681 #define TCCR    \(0x0390/4\)   // Timer Current Count) 244.637 Tj
+0 -332.268 Td
+(5682 #define TDCR    \(0x03E0/4\)   // Timer Divide Configurati\
+on) 275.216 Tj
+0 -341.761 Td
+(5683 ) 21.8426 Tj
+0 -351.254 Td
+(5684 volatile uint *lapic;  // Initialized in mp.c) 218.426 Tj
+0 -360.748 Td
+(5685 ) 21.8426 Tj
+0 -370.241 Td
+(5686 ) 21.8426 Tj
+0 -379.734 Td
+(5687 ) 21.8426 Tj
+0 -389.228 Td
+(5688 ) 21.8426 Tj
+0 -398.721 Td
+(5689 ) 21.8426 Tj
+0 -408.214 Td
+(5690 ) 21.8426 Tj
+0 -417.708 Td
+(5691 ) 21.8426 Tj
+0 -427.201 Td
+(5692 ) 21.8426 Tj
+0 -436.695 Td
+(5693 ) 21.8426 Tj
+0 -446.188 Td
+(5694 ) 21.8426 Tj
+0 -455.681 Td
+(5695 ) 21.8426 Tj
+0 -465.175 Td
+(5696 ) 21.8426 Tj
+0 -474.668 Td
+(5697 ) 21.8426 Tj
+0 -484.161 Td
+(5698 ) 21.8426 Tj
+0 -493.655 Td
+(5699 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 56) 34.9481 Tj
 Q
 Q
 Q
@@ -17876,7 +19124,10 @@ pdfEndPage
 %%Page: 64 64
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -17884,241 +19135,257 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/pipe.c  Page 3) 22.274 Tj
-0 -3.92728 Td
-(5700   release\(&p->lock\);) 15.05 Tj
-0 -5.23637 Td
-(5701   wakeup\(&p->readp\);) 15.05 Tj
-0 -6.54546 Td
-(5702   return i;) 9.632 Tj
-0 -7.85455 Td
-(5703 }) 3.612 Tj
-0 -9.16364 Td
-(5704 ) 3.01 Tj
-0 -10.4727 Td
-(5705 int) 4.816 Tj
-0 -11.7818 Td
-(5706 pipe_read\(struct pipe *p, char *addr, int n\)) 29.498 Tj
-0 -13.0909 Td
-(5707 {) 3.612 Tj
-0 -14.4 Td
-(5708   int i;) 7.826 Tj
-0 -15.7091 Td
-(5709 ) 3.01 Tj
-0 -17.0182 Td
-(5710   acquire\(&p->lock\);) 15.05 Tj
-0 -18.3273 Td
-(5711 ) 3.01 Tj
-0 -19.6364 Td
-(5712   while\(p->readp == p->writep\){) 21.672 Tj
-0 -20.9455 Td
-(5713     if\(p->writeopen == 0\){) 18.662 Tj
-0 -22.2545 Td
-(5714       release\(&p->lock\);) 17.458 Tj
-0 -23.5636 Td
-(5715       return 0;) 12.04 Tj
-0 -24.8727 Td
-(5716     }) 6.02 Tj
-0 -26.1818 Td
-(5717     sleep\(&p->readp, &p->lock\);) 21.672 Tj
-0 -27.4909 Td
-(5718   }) 4.816 Tj
-0 -28.8 Td
-(5719 ) 3.01 Tj
-0 -30.1091 Td
-(5720   for\(i = 0; i < n; i++\){) 18.06 Tj
-0 -31.4182 Td
-(5721     if\(p->readp == p->writep\)) 20.468 Tj
-0 -32.7273 Td
-(5722       break;) 10.234 Tj
-0 -34.0364 Td
-(5723     addr[i] = p->data[p->readp];) 22.274 Tj
-0 -35.3454 Td
-(5724     p->readp = \(p->readp + 1\) % PIPESIZE;) 27.692 Tj
-0 -36.6545 Td
-(5725   }) 4.816 Tj
-0 -37.9636 Td
-(5726 ) 3.01 Tj
-0 -39.2727 Td
-(5727   release\(&p->lock\);) 15.05 Tj
-0 -40.5818 Td
-(5728   wakeup\(&p->writep\);) 15.652 Tj
-0 -41.8909 Td
-(5729   return i;) 9.632 Tj
-0 -43.2 Td
-(5730 }) 3.612 Tj
-0 -44.5091 Td
-(5731 ) 3.01 Tj
-0 -45.8182 Td
-(5732 ) 3.01 Tj
-0 -47.1272 Td
-(5733 ) 3.01 Tj
-0 -48.4363 Td
-(5734 ) 3.01 Tj
-0 -49.7454 Td
-(5735 ) 3.01 Tj
-0 -51.0545 Td
-(5736 ) 3.01 Tj
-0 -52.3636 Td
-(5737 ) 3.01 Tj
-0 -53.6727 Td
-(5738 ) 3.01 Tj
-0 -54.9818 Td
-(5739 ) 3.01 Tj
-0 -56.2909 Td
-(5740 ) 3.01 Tj
-0 -57.6 Td
-(5741 ) 3.01 Tj
-0 -58.9091 Td
-(5742 ) 3.01 Tj
-0 -60.2181 Td
-(5743 ) 3.01 Tj
-0 -61.5272 Td
-(5744 ) 3.01 Tj
-0 -62.8363 Td
-(5745 ) 3.01 Tj
-0 -64.1454 Td
-(5746 ) 3.01 Tj
-0 -65.4545 Td
-(5747 ) 3.01 Tj
-0 -66.7636 Td
-(5748 ) 3.01 Tj
-0 -68.0727 Td
-(5749 ) 3.01 Tj
-0 -72 Td
-(Sheet 57) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/lapic.c  Page 2) 166.004 Tj
+0 -28.4801 Td
+(5700 void) 39.3166 Tj
+0 -37.9735 Td
+(5701 lapic_init\(int c\)) 96.1073 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.742 Tj
+0 -94.9336 Td
+(5707   lapic[SVR] = ENABLE | \(IRQ_OFFSET+IRQ_SPURIOUS\);) 240.268 Tj
+0 -104.427 Td
+(5708 ) 21.8426 Tj
+0 -113.92 Td
+(5709   // The timer repeatedly counts down at bus frequency) 257.742 Tj
+0 -123.414 Td
+(5710   // from lapic[TICR] and then issues an interrupt.) 244.637 Tj
+0 -132.907 Td
+(5711   // Lapic[TCCR] is the current counter value.) 222.794 Tj
+0 -142.4 Td
+(5712   // If xv6 cared more about precise timekeeping, the) 253.374 Tj
+0 -151.894 Td
+(5713   // values of TICR and TCCR would be calibrated using) 257.742 Tj
+0 -161.387 Td
+(5714   // an external time source.) 148.529 Tj
+0 -170.88 Td
+(5715   lapic[TDCR] = X1;) 104.844 Tj
+0 -180.374 Td
+(5716   lapic[TICR] = 10000000;) 131.055 Tj
+0 -189.867 Td
+(5717   lapic[TCCR] = 10000000;) 131.055 Tj
+0 -199.361 Td
+(5718   lapic[TIMER] = PERIODIC | \(IRQ_OFFSET + IRQ_TIMER\);) 253.374 Tj
+0 -208.854 Td
+(5719 ) 21.8426 Tj
+0 -218.347 Td
+(5720   // Disable logical interrupt lines.) 183.478 Tj
+0 -227.841 Td
+(5721   lapic[LINT0] = MASKED;) 126.687 Tj
+0 -237.334 Td
+(5722   lapic[LINT1] = MASKED;) 126.687 Tj
+0 -246.827 Td
+(5723 ) 21.8426 Tj
+0 -256.321 Td
+(5724   // Disable performance counter overflow interrupts) 249.005 Tj
+0 -265.814 Td
+(5725   // on machines that provide that interrupt entry.) 244.637 Tj
+0 -275.307 Td
+(5726   if\(\(\(lapic[VER]>>16\) & 0xFF\) >= 4\)) 179.109 Tj
+0 -284.801 Td
+(5727     lapic[PCINT] = MASKED;) 135.424 Tj
+0 -294.294 Td
+(5728 ) 21.8426 Tj
+0 -303.788 Td
+(5729   // Map error interrupt to IRQ_ERROR.) 187.846 Tj
+0 -313.281 Td
+(5730   lapic[ERROR] = IRQ_OFFSET+IRQ_ERROR;) 187.846 Tj
+0 -322.774 Td
+(5731 ) 21.8426 Tj
+0 -332.268 Td
+(5732   // Clear error status register \(requires back-to-back w\
+rites\).) 301.427 Tj
+0 -341.761 Td
+(5733   lapic[ESR] = 0;) 96.1073 Tj
+0 -351.254 Td
+(5734   lapic[ESR] = 0;) 96.1073 Tj
+0 -360.748 Td
+(5735 ) 21.8426 Tj
+0 -370.241 Td
+(5736   // Ack any outstanding interrupts.) 179.109 Tj
+0 -379.734 Td
+(5737   lapic[EOI] = 0;) 96.1073 Tj
+0 -389.228 Td
+(5738 ) 21.8426 Tj
+0 -398.721 Td
+(5739   // Send an Init Level De-Assert to synchronise arbitrati\
+on ID's.) 310.165 Tj
+0 -408.214 Td
+(5740   lapic[ICRHI] = 0;) 104.844 Tj
+0 -417.708 Td
+(5741   lapic[ICRLO] = BCAST | INIT | LEVEL;) 187.846 Tj
+0 -427.201 Td
+(5742   while\(lapic[ICRLO] & DELIVS\)) 152.898 Tj
+0 -436.695 Td
+(5743     ;) 43.6851 Tj
+0 -446.188 Td
+(5744 ) 21.8426 Tj
+0 -455.681 Td
+(5745   // Enable interrupts on the APIC \(but not on the proces\
+sor\).) 292.69 Tj
+0 -465.175 Td
+(5746   lapic[TPR] = 0;) 96.1073 Tj
+0 -474.668 Td
+(5747 }) 26.2111 Tj
+0 -484.161 Td
+(5748 ) 21.8426 Tj
+0 -493.655 Td
+(5749 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/string.c  Page 1) 23.478 Tj
-0 -3.92728 Td
-(5750 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(5751 #include "defs.h") 13.244 Tj
-0 -6.54546 Td
-(5752 ) 3.01 Tj
-0 -7.85455 Td
-(5753 void*) 6.02 Tj
-0 -9.16364 Td
-(5754 memset\(void *dst, int c, uint n\)) 22.274 Tj
-0 -10.4727 Td
-(5755 {) 3.612 Tj
-0 -11.7818 Td
-(5756   char *d = \(char*\) dst;) 17.458 Tj
-0 -13.0909 Td
-(5757 ) 3.01 Tj
-0 -14.4 Td
-(5758   while\(n-- > 0\)) 12.642 Tj
-0 -15.7091 Td
-(5759     *d++ = c;) 10.836 Tj
-0 -17.0182 Td
-(5760 ) 3.01 Tj
-0 -18.3273 Td
-(5761   return dst;) 10.836 Tj
-0 -19.6364 Td
-(5762 }) 3.612 Tj
-0 -20.9455 Td
-(5763 ) 3.01 Tj
-0 -22.2545 Td
-(5764 int) 4.816 Tj
-0 -23.5636 Td
-(5765 memcmp\(const void *v1, const void *v2, uint n\)) 30.702 Tj
-0 -24.8727 Td
-(5766 {) 3.612 Tj
-0 -26.1818 Td
-(5767   const uchar *s1 = \(const uchar*\) v1;) 25.886 Tj
-0 -27.4909 Td
-(5768   const uchar *s2 = \(const uchar*\) v2;) 25.886 Tj
-0 -28.8 Td
-(5769 ) 3.01 Tj
-0 -30.1091 Td
-(5770   while\(n-- > 0\) {) 13.846 Tj
-0 -31.4182 Td
-(5771     if\(*s1 != *s2\)) 13.846 Tj
-0 -32.7273 Td
-(5772       return \(int\) *s1 - \(int\) *s2;) 24.08 Tj
-0 -34.0364 Td
-(5773     s1++, s2++;) 12.04 Tj
-0 -35.3454 Td
-(5774   }) 4.816 Tj
-0 -36.6545 Td
-(5775 ) 3.01 Tj
-0 -37.9636 Td
-(5776   return 0;) 9.632 Tj
-0 -39.2727 Td
-(5777 }) 3.612 Tj
-0 -40.5818 Td
-(5778 ) 3.01 Tj
-0 -41.8909 Td
-(5779 void*) 6.02 Tj
-0 -43.2 Td
-(5780 memmove\(void *dst, const void *src, uint n\)) 28.896 Tj
-0 -44.5091 Td
-(5781 {) 3.612 Tj
-0 -45.8182 Td
-(5782   const char *s;) 12.642 Tj
-0 -47.1272 Td
-(5783   char *d;) 9.03 Tj
-0 -48.4363 Td
-(5784 ) 3.01 Tj
-0 -49.7454 Td
-(5785   s = src;) 9.03 Tj
-0 -51.0545 Td
-(5786   d = dst;) 9.03 Tj
-0 -52.3636 Td
-(5787   if\(s < d && s + n > d\) {) 18.662 Tj
-0 -53.6727 Td
-(5788     s += n;) 9.632 Tj
-0 -54.9818 Td
-(5789     d += n;) 9.632 Tj
-0 -56.2909 Td
-(5790     while\(n-- > 0\)) 13.846 Tj
-0 -57.6 Td
-(5791       *--d = *--s;) 13.846 Tj
-0 -58.9091 Td
-(5792   } else) 7.826 Tj
-0 -60.2181 Td
-(5793     while\(n-- > 0\)) 13.846 Tj
-0 -61.5272 Td
-(5794       *d++ = *s++;) 13.846 Tj
-0 -62.8363 Td
-(5795 ) 3.01 Tj
-0 -64.1454 Td
-(5796   return dst;) 10.836 Tj
-0 -65.4545 Td
-(5797 }) 3.612 Tj
-0 -66.7636 Td
-(5798 ) 3.01 Tj
-0 -68.0727 Td
-(5799 ) 3.01 Tj
-0 -72 Td
-(Sheet 57) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/lapic.c  Page 3) 166.004 Tj
+0 -28.4801 Td
+(5750 int) 34.9481 Tj
+0 -37.9735 Td
+(5751 cpu\(void\)) 61.1592 Tj
+0 -47.4668 Td
+(5752 {) 26.2111 Tj
+0 -56.9602 Td
+(5753   if\(lapic\)) 69.8962 Tj
+0 -66.4535 Td
+(5754     return lapic[ID]>>24;) 131.055 Tj
+0 -75.9469 Td
+(5755   return 0;) 69.8962 Tj
+0 -85.4403 Td
+(5756 }) 26.2111 Tj
+0 -94.9336 Td
+(5757 ) 21.8426 Tj
+0 -104.427 Td
+(5758 // Acknowledge interrupt.) 131.055 Tj
+0 -113.92 Td
+(5759 void) 39.3166 Tj
+0 -123.414 Td
+(5760 lapic_eoi\(void\)) 87.3703 Tj
+0 -132.907 Td
+(5761 {) 26.2111 Tj
+0 -142.4 Td
+(5762   if\(lapic\)) 69.8962 Tj
+0 -151.894 Td
+(5763     lapic[EOI] = 0;) 104.844 Tj
+0 -161.387 Td
+(5764 }) 26.2111 Tj
+0 -170.88 Td
+(5765 ) 21.8426 Tj
+0 -180.374 Td
+(5766 // Spin for a given number of microseconds.) 209.689 Tj
+0 -189.867 Td
+(5767 // On real hardware would want to tune this dynamically.) 266.479 Tj
+0 -199.361 Td
+(5768 static void) 69.8962 Tj
+0 -208.854 Td
+(5769 microdelay\(int us\)) 100.476 Tj
+0 -218.347 Td
+(5770 {) 26.2111 Tj
+0 -227.841 Td
+(5771   volatile int j = 0;) 113.581 Tj
+0 -237.334 Td
+(5772 ) 21.8426 Tj
+0 -246.827 Td
+(5773   while\(us-- > 0\)) 96.1073 Tj
+0 -256.321 Td
+(5774     for\(j=0; j<10000; j++\);) 139.792 Tj
+0 -265.814 Td
+(5775 }) 26.2111 Tj
+0 -275.307 Td
+(5776 ) 21.8426 Tj
+0 -284.801 Td
+(5777 // Start additional processor running bootstrap code at ad\
+dr.) 288.322 Tj
+0 -294.294 Td
+(5778 // See Appendix B of MultiProcessor Specification.) 240.268 Tj
+0 -303.788 Td
+(5779 void) 39.3166 Tj
+0 -313.281 Td
+(5780 lapic_startap\(uchar apicid, uint addr\)) 187.846 Tj
+0 -322.774 Td
+(5781 {) 26.2111 Tj
+0 -332.268 Td
+(5782   int i;) 56.7907 Tj
+0 -341.761 Td
+(5783   volatile int j = 0;) 113.581 Tj
+0 -351.254 Td
+(5784 ) 21.8426 Tj
+0 -360.748 Td
+(5785   // Send INIT interrupt to reset other CPU.) 214.057 Tj
+0 -370.241 Td
+(5786   lapic[ICRHI] = apicid<<24;) 144.161 Tj
+0 -379.734 Td
+(5787   lapic[ICRLO] = INIT | LEVEL;) 152.898 Tj
+0 -389.228 Td
+(5788   microdelay\(10\);) 96.1073 Tj
+0 -398.721 Td
+(5789 ) 21.8426 Tj
+0 -408.214 Td
+(5790   // Send startup IPI \(twice!\) to enter bootstrap code.) 262.111 Tj
+0 -417.708 Td
+(5791   for\(i = 0; i < 2; i++\){) 131.055 Tj
+0 -427.201 Td
+(5792     lapic[ICRHI] = apicid<<24;) 152.898 Tj
+0 -436.695 Td
+(5793     lapic[ICRLO] = STARTUP | \(addr>>12\);) 196.583 Tj
+0 -446.188 Td
+(5794     for\(j=0; j<10000; j++\);  // 200us) 183.478 Tj
+0 -455.681 Td
+(5795   }) 34.9481 Tj
+0 -465.175 Td
+(5796 }) 26.2111 Tj
+0 -474.668 Td
+(5797 ) 21.8426 Tj
+0 -484.161 Td
+(5798 ) 21.8426 Tj
+0 -493.655 Td
+(5799 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 57) 34.9481 Tj
 Q
 Q
 Q
@@ -18130,6 +19397,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -18137,241 +19407,265 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/string.c  Page 2) 23.478 Tj
-0 -3.92728 Td
-(5800 int) 4.816 Tj
-0 -5.23637 Td
-(5801 strncmp\(const char *p, const char *q, uint n\)) 30.1 Tj
-0 -6.54546 Td
-(5802 {) 3.612 Tj
-0 -7.85455 Td
-(5803   while\(n > 0 && *p && *p == *q\)) 22.274 Tj
-0 -9.16364 Td
-(5804     n--, p++, q++;) 13.846 Tj
-0 -10.4727 Td
-(5805   if\(n == 0\)) 10.234 Tj
-0 -11.7818 Td
-(5806     return 0;) 10.836 Tj
-0 -13.0909 Td
-(5807   else) 6.622 Tj
-0 -14.4 Td
-(5808     return \(int\) \(\(uchar\) *p - \(uchar\) *q\);) 28.896 Tj
-0 -15.7091 Td
-(5809 }) 3.612 Tj
-0 -17.0182 Td
-(5810 ) 3.01 Tj
-0 -18.3273 Td
-(5811 ) 3.01 Tj
-0 -19.6364 Td
-(5812 ) 3.01 Tj
-0 -20.9455 Td
-(5813 ) 3.01 Tj
-0 -22.2545 Td
-(5814 ) 3.01 Tj
-0 -23.5636 Td
-(5815 ) 3.01 Tj
-0 -24.8727 Td
-(5816 ) 3.01 Tj
-0 -26.1818 Td
-(5817 ) 3.01 Tj
-0 -27.4909 Td
-(5818 ) 3.01 Tj
-0 -28.8 Td
-(5819 ) 3.01 Tj
-0 -30.1091 Td
-(5820 ) 3.01 Tj
-0 -31.4182 Td
-(5821 ) 3.01 Tj
-0 -32.7273 Td
-(5822 ) 3.01 Tj
-0 -34.0364 Td
-(5823 ) 3.01 Tj
-0 -35.3454 Td
-(5824 ) 3.01 Tj
-0 -36.6545 Td
-(5825 ) 3.01 Tj
-0 -37.9636 Td
-(5826 ) 3.01 Tj
-0 -39.2727 Td
-(5827 ) 3.01 Tj
-0 -40.5818 Td
-(5828 ) 3.01 Tj
-0 -41.8909 Td
-(5829 ) 3.01 Tj
-0 -43.2 Td
-(5830 ) 3.01 Tj
-0 -44.5091 Td
-(5831 ) 3.01 Tj
-0 -45.8182 Td
-(5832 ) 3.01 Tj
-0 -47.1272 Td
-(5833 ) 3.01 Tj
-0 -48.4363 Td
-(5834 ) 3.01 Tj
-0 -49.7454 Td
-(5835 ) 3.01 Tj
-0 -51.0545 Td
-(5836 ) 3.01 Tj
-0 -52.3636 Td
-(5837 ) 3.01 Tj
-0 -53.6727 Td
-(5838 ) 3.01 Tj
-0 -54.9818 Td
-(5839 ) 3.01 Tj
-0 -56.2909 Td
-(5840 ) 3.01 Tj
-0 -57.6 Td
-(5841 ) 3.01 Tj
-0 -58.9091 Td
-(5842 ) 3.01 Tj
-0 -60.2181 Td
-(5843 ) 3.01 Tj
-0 -61.5272 Td
-(5844 ) 3.01 Tj
-0 -62.8363 Td
-(5845 ) 3.01 Tj
-0 -64.1454 Td
-(5846 ) 3.01 Tj
-0 -65.4545 Td
-(5847 ) 3.01 Tj
-0 -66.7636 Td
-(5848 ) 3.01 Tj
-0 -68.0727 Td
-(5849 ) 3.01 Tj
-0 -72 Td
-(Sheet 58) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/ioapic.c  Page 1) 170.372 Tj
+0 -28.4801 Td
+(5800 // The I/O APIC manages hardware interrupts for an SMP sys\
+tem.) 292.69 Tj
+0 -37.9735 Td
+(5801 // http://www.intel.com/design/chipsets/datashts/29056601.\
+pdf) 288.322 Tj
+0 -47.4668 Td
+(5802 // See also picirq.c.) 113.581 Tj
+0 -56.9602 Td
+(5803 ) 21.8426 Tj
+0 -66.4535 Td
+(5804 #include "types.h") 100.476 Tj
+0 -75.9469 Td
+(5805 #include "defs.h") 96.1073 Tj
+0 -85.4403 Td
+(5806 #include "traps.h") 100.476 Tj
+0 -94.9336 Td
+(5807 ) 21.8426 Tj
+0 -104.427 Td
+(5808 #define IOAPIC  0xFEC00000   // Default physical address o\
+f IO APIC) 314.533 Tj
+0 -113.92 Td
+(5809 ) 21.8426 Tj
+0 -123.414 Td
+(5810 #define REG_ID     0x00  // Register index: ID) 222.794 Tj
+0 -132.907 Td
+(5811 #define REG_VER    0x01  // Register index: version) 244.637 Tj
+0 -142.4 Td
+(5812 #define REG_TABLE  0x10  // Redirection table base) 240.268 Tj
+0 -151.894 Td
+(5813 ) 21.8426 Tj
+0 -161.387 Td
+(5814 // The redirection table starts at REG_TABLE and uses) 253.374 Tj
+0 -170.88 Td
+(5815 // two registers to configure each interrupt.) 218.426 Tj
+0 -180.374 Td
+(5816 // The first \(low\) register in a pair contains configura\
+tion bits.) 310.165 Tj
+0 -189.867 Td
+(5817 // The second \(high\) register contains a bitmask telling\
+ which) 292.69 Tj
+0 -199.361 Td
+(5818 // CPUs can serve that interrupt.) 166.004 Tj
+0 -208.854 Td
+(5819 #define INT_DISABLED   0x00100000  // Interrupt disabled) 266.479 Tj
+0 -218.347 Td
+(5820 #define INT_LEVEL      0x00008000  // Level-triggered \(vs\
+ edge-\)) 301.427 Tj
+0 -227.841 Td
+(5821 #define INT_ACTIVELOW  0x00002000  // Active low \(vs high\
+\)) 275.216 Tj
+0 -237.334 Td
+(5822 #define INT_LOGICAL    0x00000800  // Destination is CPU i\
+d \(vs APIC ID\)) 336.376 Tj
+0 -246.827 Td
+(5823 ) 21.8426 Tj
+0 -256.321 Td
+(5824 volatile struct ioapic *ioapic;) 157.267 Tj
+0 -265.814 Td
+(5825 ) 21.8426 Tj
+0 -275.307 Td
+(5826 // IO APIC MMIO structure: write reg, then read or write d\
+ata.) 292.69 Tj
+0 -284.801 Td
+(5827 struct ioapic {) 87.3703 Tj
+0 -294.294 Td
+(5828   uint reg;) 69.8962 Tj
+0 -303.788 Td
+(5829   uint pad[3];) 83.0018 Tj
+0 -313.281 Td
+(5830   uint data;) 74.2647 Tj
+0 -322.774 Td
+(5831 };) 30.5796 Tj
+0 -332.268 Td
+(5832 ) 21.8426 Tj
+0 -341.761 Td
+(5833 static uint) 69.8962 Tj
+0 -351.254 Td
+(5834 ioapic_read\(int reg\)) 109.213 Tj
+0 -360.748 Td
+(5835 {) 26.2111 Tj
+0 -370.241 Td
+(5836   ioapic->reg = reg;) 109.213 Tj
+0 -379.734 Td
+(5837   return ioapic->data;) 117.95 Tj
+0 -389.228 Td
+(5838 }) 26.2111 Tj
+0 -398.721 Td
+(5839 ) 21.8426 Tj
+0 -408.214 Td
+(5840 static void) 69.8962 Tj
+0 -417.708 Td
+(5841 ioapic_write\(int reg, uint data\)) 161.635 Tj
+0 -427.201 Td
+(5842 {) 26.2111 Tj
+0 -436.695 Td
+(5843   ioapic->reg = reg;) 109.213 Tj
+0 -446.188 Td
+(5844   ioapic->data = data;) 117.95 Tj
+0 -455.681 Td
+(5845 }) 26.2111 Tj
+0 -465.175 Td
+(5846 ) 21.8426 Tj
+0 -474.668 Td
+(5847 ) 21.8426 Tj
+0 -484.161 Td
+(5848 ) 21.8426 Tj
+0 -493.655 Td
+(5849 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/ioapic.h  Page 1) 23.478 Tj
-0 -3.92728 Td
-(5850 #define IO_APIC_BASE   0xFEC00000   // Default phys addr of IO APIC) 43.344 Tj
-0 -5.23637 Td
-(5851 #define IOAPIC_WINDOW        0x10   // Window register offset) 39.732 Tj
-0 -6.54546 Td
-(5852 ) 3.01 Tj
-0 -7.85455 Td
-(5853 // Constants relating to APIC ID registers) 28.294 Tj
-0 -9.16364 Td
-(5854 #define APIC_ID_MASK            0xff000000) 28.294 Tj
-0 -10.4727 Td
-(5855 #define APIC_ID_SHIFT           24) 23.478 Tj
-0 -11.7818 Td
-(5856 #define APIC_ID_CLUSTER         0xf0) 24.682 Tj
-0 -13.0909 Td
-(5857 #define APIC_ID_CLUSTER_ID      0x0f) 24.682 Tj
-0 -14.4 Td
-(5858 #define APIC_MAX_CLUSTER        0xe) 24.08 Tj
-0 -15.7091 Td
-(5859 #define APIC_MAX_INTRACLUSTER_ID 3) 23.478 Tj
-0 -17.0182 Td
-(5860 #define APIC_ID_CLUSTER_SHIFT   4) 22.876 Tj
-0 -18.3273 Td
-(5861 ) 3.01 Tj
-0 -19.6364 Td
-(5862 // Fields in VER) 12.642 Tj
-0 -20.9455 Td
-(5863 #define APIC_VER_VERSION        0x000000ff) 28.294 Tj
-0 -22.2545 Td
-(5864 #define APIC_VER_MAXLVT         0x00ff0000) 28.294 Tj
-0 -23.5636 Td
-(5865 #define MAXLVTSHIFT             16) 23.478 Tj
-0 -24.8727 Td
-(5866 ) 3.01 Tj
-0 -26.1818 Td
-(5867 // Indexes into IO APIC) 16.856 Tj
-0 -27.4909 Td
-(5868 #define IOAPIC_ID               0x00) 24.682 Tj
-0 -28.8 Td
-(5869 #define IOAPIC_VER              0x01) 24.682 Tj
-0 -30.1091 Td
-(5870 #define IOAPIC_ARB              0x02) 24.682 Tj
-0 -31.4182 Td
-(5871 #define IOAPIC_REDTBL           0x10) 24.682 Tj
-0 -32.7273 Td
-(5872 #define IOAPIC_REDTBL0          IOAPIC_REDTBL) 30.1 Tj
-0 -34.0364 Td
-(5873 #define IOAPIC_REDTBL1          \(IOAPIC_REDTBL+0x02\)) 34.314 Tj
-0 -35.3454 Td
-(5874 #define IOAPIC_REDTBL2          \(IOAPIC_REDTBL+0x04\)) 34.314 Tj
-0 -36.6545 Td
-(5875 #define IOAPIC_REDTBL3          \(IOAPIC_REDTBL+0x06\)) 34.314 Tj
-0 -37.9636 Td
-(5876 #define IOAPIC_REDTBL4          \(IOAPIC_REDTBL+0x08\)) 34.314 Tj
-0 -39.2727 Td
-(5877 #define IOAPIC_REDTBL5          \(IOAPIC_REDTBL+0x0a\)) 34.314 Tj
-0 -40.5818 Td
-(5878 #define IOAPIC_REDTBL6          \(IOAPIC_REDTBL+0x0c\)) 34.314 Tj
-0 -41.8909 Td
-(5879 #define IOAPIC_REDTBL7          \(IOAPIC_REDTBL+0x0e\)) 34.314 Tj
-0 -43.2 Td
-(5880 #define IOAPIC_REDTBL8          \(IOAPIC_REDTBL+0x10\)) 34.314 Tj
-0 -44.5091 Td
-(5881 #define IOAPIC_REDTBL9          \(IOAPIC_REDTBL+0x12\)) 34.314 Tj
-0 -45.8182 Td
-(5882 #define IOAPIC_REDTBL10         \(IOAPIC_REDTBL+0x14\)) 34.314 Tj
-0 -47.1272 Td
-(5883 #define IOAPIC_REDTBL11         \(IOAPIC_REDTBL+0x16\)) 34.314 Tj
-0 -48.4363 Td
-(5884 #define IOAPIC_REDTBL12         \(IOAPIC_REDTBL+0x18\)) 34.314 Tj
-0 -49.7454 Td
-(5885 #define IOAPIC_REDTBL13         \(IOAPIC_REDTBL+0x1a\)) 34.314 Tj
-0 -51.0545 Td
-(5886 #define IOAPIC_REDTBL14         \(IOAPIC_REDTBL+0x1c\)) 34.314 Tj
-0 -52.3636 Td
-(5887 #define IOAPIC_REDTBL15         \(IOAPIC_REDTBL+0x1e\)) 34.314 Tj
-0 -53.6727 Td
-(5888 #define IOAPIC_REDTBL16         \(IOAPIC_REDTBL+0x20\)) 34.314 Tj
-0 -54.9818 Td
-(5889 #define IOAPIC_REDTBL17         \(IOAPIC_REDTBL+0x22\)) 34.314 Tj
-0 -56.2909 Td
-(5890 #define IOAPIC_REDTBL18         \(IOAPIC_REDTBL+0x24\)) 34.314 Tj
-0 -57.6 Td
-(5891 #define IOAPIC_REDTBL19         \(IOAPIC_REDTBL+0x26\)) 34.314 Tj
-0 -58.9091 Td
-(5892 #define IOAPIC_REDTBL20         \(IOAPIC_REDTBL+0x28\)) 34.314 Tj
-0 -60.2181 Td
-(5893 #define IOAPIC_REDTBL21         \(IOAPIC_REDTBL+0x2a\)) 34.314 Tj
-0 -61.5272 Td
-(5894 #define IOAPIC_REDTBL22         \(IOAPIC_REDTBL+0x2c\)) 34.314 Tj
-0 -62.8363 Td
-(5895 #define IOAPIC_REDTBL23         \(IOAPIC_REDTBL+0x2e\)) 34.314 Tj
-0 -64.1454 Td
-(5896 ) 3.01 Tj
-0 -65.4545 Td
-(5897 // Fields in the IO APIC's redirection table entries) 34.314 Tj
-0 -66.7636 Td
-(5898 #define IOART_DEST      APIC_ID_MASK    // broadcast addr: all APICs) 43.946 Tj
-0 -68.0727 Td
-(5899 ) 3.01 Tj
-0 -72 Td
-(Sheet 58) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/ioapic.c  Page 2) 170.372 Tj
+0 -28.4801 Td
+(5850 void) 39.3166 Tj
+0 -37.9735 Td
+(5851 ioapic_init\(void\)) 96.1073 Tj
+0 -47.4668 Td
+(5852 {) 26.2111 Tj
+0 -56.9602 Td
+(5853   int i, id, maxintr;) 113.581 Tj
+0 -66.4535 Td
+(5854 ) 21.8426 Tj
+0 -75.9469 Td
+(5855   if\(!ismp\)) 69.8962 Tj
+0 -85.4403 Td
+(5856     return;) 69.8962 Tj
+0 -94.9336 Td
+(5857 ) 21.8426 Tj
+0 -104.427 Td
+(5858   ioapic = \(volatile struct ioapic*\)IOAPIC;) 209.689 Tj
+0 -113.92 Td
+(5859   maxintr = \(ioapic_read\(REG_VER\) >> 16\) & 0xFF;) 231.531 Tj
+0 -123.414 Td
+(5860   id = ioapic_read\(REG_ID\) >> 24;) 166.004 Tj
+0 -132.907 Td
+(5861   if\(id != ioapic_id\)) 113.581 Tj
+0 -142.4 Td
+(5862     cprintf\("ioapic_init: id isn't equal to ioapic_id; no\
+t a MP\\n"\);) 318.902 Tj
+0 -151.894 Td
+(5863 ) 21.8426 Tj
+0 -161.387 Td
+(5864   // Mark all interrupts edge-triggered, active high, disa\
+bled,) 297.059 Tj
+0 -170.88 Td
+(5865   // and not routed to any CPUs.) 161.635 Tj
+0 -180.374 Td
+(5866   for\(i = 0; i <= maxintr; i++\){) 161.635 Tj
+0 -189.867 Td
+(5867     ioapic_write\(REG_TABLE+2*i, INT_DISABLED | \(IRQ_OFFS\
+ET + i\)\);) 305.796 Tj
+0 -199.361 Td
+(5868     ioapic_write\(REG_TABLE+2*i+1, 0\);) 183.478 Tj
+0 -208.854 Td
+(5869   }) 34.9481 Tj
+0 -218.347 Td
+(5870 }) 26.2111 Tj
+0 -227.841 Td
+(5871 ) 21.8426 Tj
+0 -237.334 Td
+(5872 void) 39.3166 Tj
+0 -246.827 Td
+(5873 ioapic_enable\(int irq, int cpunum\)) 170.372 Tj
+0 -256.321 Td
+(5874 {) 26.2111 Tj
+0 -265.814 Td
+(5875   if\(!ismp\)) 69.8962 Tj
+0 -275.307 Td
+(5876     return;) 69.8962 Tj
+0 -284.801 Td
+(5877 ) 21.8426 Tj
+0 -294.294 Td
+(5878   // Mark interrupt edge-triggered, active high,) 231.531 Tj
+0 -303.788 Td
+(5879   // enabled, and routed to the given cpunum,) 218.426 Tj
+0 -313.281 Td
+(5880   // which happens to be that cpu's APIC ID.) 214.057 Tj
+0 -322.774 Td
+(5881   ioapic_write\(REG_TABLE+2*irq, IRQ_OFFSET + irq\);) 240.268 Tj
+0 -332.268 Td
+(5882   ioapic_write\(REG_TABLE+2*irq+1, cpunum << 24\);) 231.531 Tj
+0 -341.761 Td
+(5883 }) 26.2111 Tj
+0 -351.254 Td
+(5884 ) 21.8426 Tj
+0 -360.748 Td
+(5885 ) 21.8426 Tj
+0 -370.241 Td
+(5886 ) 21.8426 Tj
+0 -379.734 Td
+(5887 ) 21.8426 Tj
+0 -389.228 Td
+(5888 ) 21.8426 Tj
+0 -398.721 Td
+(5889 ) 21.8426 Tj
+0 -408.214 Td
+(5890 ) 21.8426 Tj
+0 -417.708 Td
+(5891 ) 21.8426 Tj
+0 -427.201 Td
+(5892 ) 21.8426 Tj
+0 -436.695 Td
+(5893 ) 21.8426 Tj
+0 -446.188 Td
+(5894 ) 21.8426 Tj
+0 -455.681 Td
+(5895 ) 21.8426 Tj
+0 -465.175 Td
+(5896 ) 21.8426 Tj
+0 -474.668 Td
+(5897 ) 21.8426 Tj
+0 -484.161 Td
+(5898 ) 21.8426 Tj
+0 -493.655 Td
+(5899 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 58) 34.9481 Tj
 Q
 Q
 Q
@@ -18382,7 +19676,10 @@ pdfEndPage
 %%Page: 66 66
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -18390,241 +19687,262 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/ioapic.h  Page 2) 23.478 Tj
-0 -3.92728 Td
-(5900 #define IOART_RESV      0x00fe0000      // reserved) 33.712 Tj
-0 -5.23637 Td
-(5901 ) 3.01 Tj
-0 -6.54546 Td
-(5902 #define IOART_INTMASK   0x00010000      // R/W: INTerrupt mask) 40.334 Tj
-0 -7.85455 Td
-(5903 #define IOART_INTMCLR   0x00000000      //       clear, allow INTs) 42.742 Tj
-0 -9.16364 Td
-(5904 #define IOART_INTMSET   0x00010000      //       set, inhibit INTs) 42.742 Tj
-0 -10.4727 Td
-(5905 ) 3.01 Tj
-0 -11.7818 Td
-(5906 #define IOART_TRGRMOD   0x00008000      // R/W: trigger mode) 39.13 Tj
-0 -13.0909 Td
-(5907 #define IOART_TRGREDG   0x00000000      //       edge) 34.916 Tj
-0 -14.4 Td
-(5908 #define IOART_TRGRLVL   0x00008000      //       level) 35.518 Tj
-0 -15.7091 Td
-(5909 ) 3.01 Tj
-0 -17.0182 Td
-(5910 #define IOART_REM_IRR   0x00004000      // RO: remote IRR) 37.324 Tj
-0 -18.3273 Td
-(5911 ) 3.01 Tj
-0 -19.6364 Td
-(5912 #define IOART_INTPOL    0x00002000      // R/W: INT input pin polarity) 45.15 Tj
-0 -20.9455 Td
-(5913 #define IOART_INTAHI    0x00000000      //      active high) 38.528 Tj
-0 -22.2545 Td
-(5914 #define IOART_INTALO    0x00002000      //      active low) 37.926 Tj
-0 -23.5636 Td
-(5915 ) 3.01 Tj
-0 -24.8727 Td
-(5916 #define IOART_DELIVS    0x00001000      // RO: delivery status) 40.334 Tj
-0 -26.1818 Td
-(5917 ) 3.01 Tj
-0 -27.4909 Td
-(5918 #define IOART_DESTMOD   0x00000800      // R/W: destination mode) 41.538 Tj
-0 -28.8 Td
-(5919 #define IOART_DESTPHY   0x00000000      //      physical) 36.722 Tj
-0 -30.1091 Td
-(5920 #define IOART_DESTLOG   0x00000800      //      logical) 36.12 Tj
-0 -31.4182 Td
-(5921 ) 3.01 Tj
-0 -32.7273 Td
-(5922 #define IOART_DELMOD    0x00000700      // R/W: delivery mode) 39.732 Tj
-0 -34.0364 Td
-(5923 #define IOART_DELFIXED  0x00000000      //       fixed) 35.518 Tj
-0 -35.3454 Td
-(5924 #define IOART_DELLOPRI  0x00000100      //       lowest priority) 41.538 Tj
-0 -36.6545 Td
-(5925 #define IOART_DELSMI    0x00000200      //       System Management INT) 45.15 Tj
-0 -37.9636 Td
-(5926 #define IOART_DELRSV1   0x00000300      //       reserved) 37.324 Tj
-0 -39.2727 Td
-(5927 #define IOART_DELNMI    0x00000400      //       NMI signal) 38.528 Tj
-0 -40.5818 Td
-(5928 #define IOART_DELINIT   0x00000500      //       INIT signal) 39.13 Tj
-0 -41.8909 Td
-(5929 #define IOART_DELRSV2   0x00000600      //       reserved) 37.324 Tj
-0 -43.2 Td
-(5930 #define IOART_DELEXINT  0x00000700      //       External INTerrupt) 43.344 Tj
-0 -44.5091 Td
-(5931 ) 3.01 Tj
-0 -45.8182 Td
-(5932 #define IOART_INTVEC    0x000000ff      // R/W: INTerrupt vector field) 45.15 Tj
-0 -47.1272 Td
-(5933 ) 3.01 Tj
-0 -48.4363 Td
-(5934 // Fields in VER) 12.642 Tj
-0 -49.7454 Td
-(5935 #define IOART_VER_VERSION       0x000000ff) 28.294 Tj
-0 -51.0545 Td
-(5936 #define IOART_VER_MAXREDIR      0x00ff0000) 28.294 Tj
-0 -52.3636 Td
-(5937 #define MAXREDIRSHIFT           16) 23.478 Tj
-0 -53.6727 Td
-(5938 ) 3.01 Tj
-0 -54.9818 Td
-(5939 ) 3.01 Tj
-0 -56.2909 Td
-(5940 ) 3.01 Tj
-0 -57.6 Td
-(5941 ) 3.01 Tj
-0 -58.9091 Td
-(5942 ) 3.01 Tj
-0 -60.2181 Td
-(5943 ) 3.01 Tj
-0 -61.5272 Td
-(5944 ) 3.01 Tj
-0 -62.8363 Td
-(5945 ) 3.01 Tj
-0 -64.1454 Td
-(5946 ) 3.01 Tj
-0 -65.4545 Td
-(5947 ) 3.01 Tj
-0 -66.7636 Td
-(5948 ) 3.01 Tj
-0 -68.0727 Td
-(5949 ) 3.01 Tj
-0 -72 Td
-(Sheet 59) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/picirq.c  Page 1) 170.372 Tj
+0 -28.4801 Td
+(5900 // Intel 8259A programmable interrupt controllers.) 240.268 Tj
+0 -37.9735 Td
+(5901 ) 21.8426 Tj
+0 -47.4668 Td
+(5902 #include "types.h") 100.476 Tj
+0 -56.9602 Td
+(5903 #include "x86.h") 91.7388 Tj
+0 -66.4535 Td
+(5904 #include "traps.h") 100.476 Tj
+0 -75.9469 Td
+(5905 ) 21.8426 Tj
+0 -85.4403 Td
+(5906 // I/O Addresses of the two programmable interrupt control\
+lers) 292.69 Tj
+0 -94.9336 Td
+(5907 #define IO_PIC1         0x20    // Master \(IRQs 0-7\)) 249.005 Tj
+0 -104.427 Td
+(5908 #define IO_PIC2         0xA0    // Slave \(IRQs 8-15\)) 249.005 Tj
+0 -113.92 Td
+(5909 ) 21.8426 Tj
+0 -123.414 Td
+(5910 #define IRQ_SLAVE       2       // IRQ at which slave conn\
+ects to master) 336.376 Tj
+0 -132.907 Td
+(5911 ) 21.8426 Tj
+0 -142.4 Td
+(5912 // Current IRQ mask.) 109.213 Tj
+0 -151.894 Td
+(5913 // Initial IRQ mask has interrupt 2 enabled \(for slave 82\
+59A\).) 292.69 Tj
+0 -161.387 Td
+(5914 static ushort irqmask = 0xFFFF & ~\(1<<IRQ_SLAVE\);) 235.9 Tj
+0 -170.88 Td
+(5915 ) 21.8426 Tj
+0 -180.374 Td
+(5916 static void) 69.8962 Tj
+0 -189.867 Td
+(5917 pic_setmask\(ushort mask\)) 126.687 Tj
+0 -199.361 Td
+(5918 {) 26.2111 Tj
+0 -208.854 Td
+(5919   irqmask = mask;) 96.1073 Tj
+0 -218.347 Td
+(5920   outb\(IO_PIC1+1, mask\);) 126.687 Tj
+0 -227.841 Td
+(5921   outb\(IO_PIC2+1, mask >> 8\);) 148.529 Tj
+0 -237.334 Td
+(5922 }) 26.2111 Tj
+0 -246.827 Td
+(5923 ) 21.8426 Tj
+0 -256.321 Td
+(5924 void) 39.3166 Tj
+0 -265.814 Td
+(5925 pic_enable\(int irq\)) 104.844 Tj
+0 -275.307 Td
+(5926 {) 26.2111 Tj
+0 -284.801 Td
+(5927   pic_setmask\(irqmask & ~\(1<<irq\)\);) 174.741 Tj
+0 -294.294 Td
+(5928 }) 26.2111 Tj
+0 -303.788 Td
+(5929 ) 21.8426 Tj
+0 -313.281 Td
+(5930 // Initialize the 8259A interrupt controllers.) 222.794 Tj
+0 -322.774 Td
+(5931 void) 39.3166 Tj
+0 -332.268 Td
+(5932 pic_init\(void\)) 83.0018 Tj
+0 -341.761 Td
+(5933 {) 26.2111 Tj
+0 -351.254 Td
+(5934   // mask all interrupts) 126.687 Tj
+0 -360.748 Td
+(5935   outb\(IO_PIC1+1, 0xFF\);) 126.687 Tj
+0 -370.241 Td
+(5936   outb\(IO_PIC2+1, 0xFF\);) 126.687 Tj
+0 -379.734 Td
+(5937 ) 21.8426 Tj
+0 -389.228 Td
+(5938   // Set up master \(8259A-1\)) 144.161 Tj
+0 -398.721 Td
+(5939 ) 21.8426 Tj
+0 -408.214 Td
+(5940   // ICW1:  0001g0hi) 109.213 Tj
+0 -417.708 Td
+(5941   //    g:  0 = edge triggering, 1 = level triggering) 253.374 Tj
+0 -427.201 Td
+(5942   //    h:  0 = cascaded PICs, 1 = master only) 222.794 Tj
+0 -436.695 Td
+(5943   //    i:  0 = no ICW4, 1 = ICW4 required) 205.32 Tj
+0 -446.188 Td
+(5944   outb\(IO_PIC1, 0x11\);) 117.95 Tj
+0 -455.681 Td
+(5945 ) 21.8426 Tj
+0 -465.175 Td
+(5946   // ICW2:  Vector offset) 131.055 Tj
+0 -474.668 Td
+(5947   outb\(IO_PIC1+1, IRQ_OFFSET\);) 152.898 Tj
+0 -484.161 Td
+(5948 ) 21.8426 Tj
+0 -493.655 Td
+(5949 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/lapic.c  Page 1) 22.876 Tj
-0 -3.92728 Td
-(5950 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(5951 #include "mp.h") 12.04 Tj
-0 -6.54546 Td
-(5952 #include "defs.h") 13.244 Tj
-0 -7.85455 Td
-(5953 #include "param.h") 13.846 Tj
-0 -9.16364 Td
-(5954 #include "x86.h") 12.642 Tj
-0 -10.4727 Td
-(5955 #include "traps.h") 13.846 Tj
-0 -11.7818 Td
-(5956 #include "mmu.h") 12.642 Tj
-0 -13.0909 Td
-(5957 #include "proc.h") 13.244 Tj
-0 -14.4 Td
-(5958 ) 3.01 Tj
-0 -15.7091 Td
-(5959 enum {  // Local APIC registers) 21.672 Tj
-0 -17.0182 Td
-(5960   LAPIC_ID  = 0x0020,   // ID) 20.468 Tj
-0 -18.3273 Td
-(5961   LAPIC_VER = 0x0030,   // Version) 23.478 Tj
-0 -19.6364 Td
-(5962   LAPIC_TPR = 0x0080,   // Task Priority) 27.09 Tj
-0 -20.9455 Td
-(5963   LAPIC_APR = 0x0090,   // Arbitration Priority) 31.304 Tj
-0 -22.2545 Td
-(5964   LAPIC_PPR = 0x00A0,   // Processor Priority) 30.1 Tj
-0 -23.5636 Td
-(5965   LAPIC_EOI = 0x00B0,   // EOI) 21.07 Tj
-0 -24.8727 Td
-(5966   LAPIC_LDR = 0x00D0,   // Logical Destination) 30.702 Tj
-0 -26.1818 Td
-(5967   LAPIC_DFR = 0x00E0,   // Destination Format) 30.1 Tj
-0 -27.4909 Td
-(5968   LAPIC_SVR = 0x00F0,   // Spurious Interrupt Vector) 34.314 Tj
-0 -28.8 Td
-(5969   LAPIC_ISR = 0x0100,   // Interrupt Status \(8 registers\)) 37.324 Tj
-0 -30.1091 Td
-(5970   LAPIC_TMR = 0x0180,   // Trigger Mode \(8 registers\)) 34.916 Tj
-0 -31.4182 Td
-(5971   LAPIC_IRR = 0x0200,   // Interrupt Request \(8 registers\)) 37.926 Tj
-0 -32.7273 Td
-(5972   LAPIC_ESR = 0x0280,   // Error Status) 26.488 Tj
-0 -34.0364 Td
-(5973   LAPIC_ICRLO = 0x0300, // Interrupt Command) 29.498 Tj
-0 -35.3454 Td
-(5974   LAPIC_ICRHI = 0x0310, // Interrupt Command [63:32]) 34.314 Tj
-0 -36.6545 Td
-(5975   LAPIC_TIMER = 0x0320, // Local Vector Table 0 \(TIMER\)) 36.12 Tj
-0 -37.9636 Td
-(5976   LAPIC_PCINT = 0x0340, // Performance Counter LVT) 33.11 Tj
-0 -39.2727 Td
-(5977   LAPIC_LINT0 = 0x0350, // Local Vector Table 1 \(LINT0\)) 36.12 Tj
-0 -40.5818 Td
-(5978   LAPIC_LINT1 = 0x0360, // Local Vector Table 2 \(LINT1\)) 36.12 Tj
-0 -41.8909 Td
-(5979   LAPIC_ERROR = 0x0370, // Local Vector Table 3 \(ERROR\)) 36.12 Tj
-0 -43.2 Td
-(5980   LAPIC_TICR = 0x0380,  // Timer Initial Count) 30.702 Tj
-0 -44.5091 Td
-(5981   LAPIC_TCCR = 0x0390,  // Timer Current Count) 30.702 Tj
-0 -45.8182 Td
-(5982   LAPIC_TDCR = 0x03E0,  // Timer Divide Configuration) 34.916 Tj
-0 -47.1272 Td
-(5983 };) 4.214 Tj
-0 -48.4363 Td
-(5984 ) 3.01 Tj
-0 -49.7454 Td
-(5985 enum {  // LAPIC_SVR) 15.05 Tj
-0 -51.0545 Td
-(5986   LAPIC_ENABLE  = 0x00000100,   // Unit Enable) 30.702 Tj
-0 -52.3636 Td
-(5987   LAPIC_FOCUS   = 0x00000200,   // Focus Processor Checking Disable) 43.344 Tj
-0 -53.6727 Td
-(5988 };) 4.214 Tj
-0 -54.9818 Td
-(5989 ) 3.01 Tj
-0 -56.2909 Td
-(5990 ) 3.01 Tj
-0 -57.6 Td
-(5991 ) 3.01 Tj
-0 -58.9091 Td
-(5992 ) 3.01 Tj
-0 -60.2181 Td
-(5993 ) 3.01 Tj
-0 -61.5272 Td
-(5994 ) 3.01 Tj
-0 -62.8363 Td
-(5995 ) 3.01 Tj
-0 -64.1454 Td
-(5996 ) 3.01 Tj
-0 -65.4545 Td
-(5997 ) 3.01 Tj
-0 -66.7636 Td
-(5998 ) 3.01 Tj
-0 -68.0727 Td
-(5999 ) 3.01 Tj
-0 -72 Td
-(Sheet 59) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/picirq.c  Page 2) 170.372 Tj
+0 -28.4801 Td
+(5950   // ICW3:  \(master PIC\) bit mask of IR lines connected \
+to slaves) 305.796 Tj
+0 -37.9735 Td
+(5951   //        \(slave PIC\) 3-bit # of slave's connection to\
+ master) 297.059 Tj
+0 -47.4668 Td
+(5952   outb\(IO_PIC1+1, 1<<IRQ_SLAVE\);) 161.635 Tj
+0 -56.9602 Td
+(5953 ) 21.8426 Tj
+0 -66.4535 Td
+(5954   // ICW4:  000nbmap) 109.213 Tj
+0 -75.9469 Td
+(5955   //    n:  1 = special fully nested mode) 200.952 Tj
+0 -85.4403 Td
+(5956   //    b:  1 = buffered mode) 148.529 Tj
+0 -94.9336 Td
+(5957   //    m:  0 = slave PIC, 1 = master PIC) 200.952 Tj
+0 -104.427 Td
+(5958   //      \(ignored when b is 0, as the master/slave role) 266.479 Tj
+0 -113.92 Td
+(5959   //      can be hardwired\).) 144.161 Tj
+0 -123.414 Td
+(5960   //    a:  1 = Automatic EOI mode) 170.372 Tj
+0 -132.907 Td
+(5961   //    p:  0 = MCS-80/85 mode, 1 = intel x86 mode) 240.268 Tj
+0 -142.4 Td
+(5962   outb\(IO_PIC1+1, 0x3\);) 122.318 Tj
+0 -151.894 Td
+(5963 ) 21.8426 Tj
+0 -161.387 Td
+(5964   // Set up slave \(8259A-2\)) 139.792 Tj
+0 -170.88 Td
+(5965   outb\(IO_PIC2, 0x11\);                  // ICW1) 227.163 Tj
+0 -180.374 Td
+(5966   outb\(IO_PIC2+1, IRQ_OFFSET + 8\);      // ICW2) 227.163 Tj
+0 -189.867 Td
+(5967   outb\(IO_PIC2+1, IRQ_SLAVE\);           // ICW3) 227.163 Tj
+0 -199.361 Td
+(5968   // NB Automatic EOI mode doesn't tend to work on the sla\
+ve.) 288.322 Tj
+0 -208.854 Td
+(5969   // Linux source code says it's "to be investigated".) 257.742 Tj
+0 -218.347 Td
+(5970   outb\(IO_PIC2+1, 0x3\);                 // ICW4) 227.163 Tj
+0 -227.841 Td
+(5971 ) 21.8426 Tj
+0 -237.334 Td
+(5972   // OCW3:  0ef01prs) 109.213 Tj
+0 -246.827 Td
+(5973   //   ef:  0x = NOP, 10 = clear specific mask, 11 = set s\
+pecific mask) 327.639 Tj
+0 -256.321 Td
+(5974   //    p:  0 = no polling, 1 = polling mode) 214.057 Tj
+0 -265.814 Td
+(5975   //   rs:  0x = NOP, 10 = read IRR, 11 = read ISR) 240.268 Tj
+0 -275.307 Td
+(5976   outb\(IO_PIC1, 0x68\);             // clear specific mas\
+k) 270.848 Tj
+0 -284.801 Td
+(5977   outb\(IO_PIC1, 0x0a\);             // read IRR by defaul\
+t) 270.848 Tj
+0 -294.294 Td
+(5978 ) 21.8426 Tj
+0 -303.788 Td
+(5979   outb\(IO_PIC2, 0x68\);             // OCW3) 205.32 Tj
+0 -313.281 Td
+(5980   outb\(IO_PIC2, 0x0a\);             // OCW3) 205.32 Tj
+0 -322.774 Td
+(5981 ) 21.8426 Tj
+0 -332.268 Td
+(5982   if\(irqmask != 0xFFFF\)) 122.318 Tj
+0 -341.761 Td
+(5983     pic_setmask\(irqmask\);) 131.055 Tj
+0 -351.254 Td
+(5984 }) 26.2111 Tj
+0 -360.748 Td
+(5985 ) 21.8426 Tj
+0 -370.241 Td
+(5986 ) 21.8426 Tj
+0 -379.734 Td
+(5987 ) 21.8426 Tj
+0 -389.228 Td
+(5988 ) 21.8426 Tj
+0 -398.721 Td
+(5989 ) 21.8426 Tj
+0 -408.214 Td
+(5990 ) 21.8426 Tj
+0 -417.708 Td
+(5991 ) 21.8426 Tj
+0 -427.201 Td
+(5992 ) 21.8426 Tj
+0 -436.695 Td
+(5993 ) 21.8426 Tj
+0 -446.188 Td
+(5994 ) 21.8426 Tj
+0 -455.681 Td
+(5995 ) 21.8426 Tj
+0 -465.175 Td
+(5996 ) 21.8426 Tj
+0 -474.668 Td
+(5997 ) 21.8426 Tj
+0 -484.161 Td
+(5998 ) 21.8426 Tj
+0 -493.655 Td
+(5999 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 59) 34.9481 Tj
 Q
 Q
 Q
@@ -18636,6 +19954,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -18643,243 +19964,254 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/lapic.c  Page 2) 22.876 Tj
-0 -3.92728 Td
-(6000 enum {  // LAPIC_ICRLO) 16.254 Tj
-0 -5.23637 Td
-(6001   // [14] IPI Trigger Mode Level \(RW\)) 25.284 Tj
-0 -6.54546 Td
-(6002   LAPIC_DEASSERT = 0x00000000,  // Deassert level-sensitive interrupt) 44.548 Tj
-0 -7.85455 Td
-(6003   LAPIC_ASSERT  = 0x00004000,   // Assert level-sensitive interrupt) 43.344 Tj
-0 -9.16364 Td
-(6004 ) 3.01 Tj
-0 -10.4727 Td
-(6005   // [17:16] Remote Read Status) 21.672 Tj
-0 -11.7818 Td
-(6006   LAPIC_INVALID = 0x00000000,   // Invalid) 28.294 Tj
-0 -13.0909 Td
-(6007   LAPIC_WAIT    = 0x00010000,   // In-Progress) 30.702 Tj
-0 -14.4 Td
-(6008   LAPIC_VALID   = 0x00020000,   // Valid) 27.09 Tj
-0 -15.7091 Td
-(6009 ) 3.01 Tj
-0 -17.0182 Td
-(6010   // [19:18] Destination Shorthand) 23.478 Tj
-0 -18.3273 Td
-(6011   LAPIC_FIELD   = 0x00000000,   // No shorthand) 31.304 Tj
-0 -19.6364 Td
-(6012   LAPIC_SELF    = 0x00040000,   // Self is single destination) 39.732 Tj
-0 -20.9455 Td
-(6013   LAPIC_ALLINC  = 0x00080000,   // All including self) 34.916 Tj
-0 -22.2545 Td
-(6014   LAPIC_ALLEXC  = 0x000C0000,   // All Excluding self) 34.916 Tj
-0 -23.5636 Td
-(6015 };) 4.214 Tj
-0 -24.8727 Td
-(6016 ) 3.01 Tj
-0 -26.1818 Td
-(6017 enum {  // LAPIC_ESR) 15.05 Tj
-0 -27.4909 Td
-(6018   LAPIC_SENDCS  = 0x00000001,     // Send CS Error) 33.11 Tj
-0 -28.8 Td
-(6019   LAPIC_RCVCS   = 0x00000002,     // Receive CS Error) 34.916 Tj
-0 -30.1091 Td
-(6020   LAPIC_SENDACCEPT = 0x00000004,  // Send Accept Error) 35.518 Tj
-0 -31.4182 Td
-(6021   LAPIC_RCVACCEPT = 0x00000008,   // Receive Accept Error) 37.324 Tj
-0 -32.7273 Td
-(6022   LAPIC_SENDVECTOR = 0x00000020,  // Send Illegal Vector) 36.722 Tj
-0 -34.0364 Td
-(6023   LAPIC_RCVVECTOR = 0x00000040,   // Receive Illegal Vector) 38.528 Tj
-0 -35.3454 Td
-(6024   LAPIC_REGISTER = 0x00000080,    // Illegal Register Address) 39.732 Tj
-0 -36.6545 Td
-(6025 };) 4.214 Tj
-0 -37.9636 Td
-(6026 ) 3.01 Tj
-0 -39.2727 Td
-(6027 enum {  // LAPIC_TIMER) 16.254 Tj
-0 -40.5818 Td
-(6028   // [17] Timer Mode \(RW\)) 18.06 Tj
-0 -41.8909 Td
-(6029   LAPIC_ONESHOT = 0x00000000,   // One-shot) 28.896 Tj
-0 -43.2 Td
-(6030   LAPIC_PERIODIC = 0x00020000,  // Periodic) 28.896 Tj
-0 -44.5091 Td
-(6031 ) 3.01 Tj
-0 -45.8182 Td
-(6032   // [19:18] Timer Base \(RW\)) 19.866 Tj
-0 -47.1272 Td
-(6033   LAPIC_CLKIN   = 0x00000000,   // use CLKIN as input) 34.916 Tj
-0 -48.4363 Td
-(6034   LAPIC_TMBASE  = 0x00040000,   // use TMBASE) 30.1 Tj
-0 -49.7454 Td
-(6035   LAPIC_DIVIDER = 0x00080000,   // use output of the divider) 39.13 Tj
-0 -51.0545 Td
-(6036 };) 4.214 Tj
-0 -52.3636 Td
-(6037 ) 3.01 Tj
-0 -53.6727 Td
-(6038 enum {  // LAPIC_TDCR) 15.652 Tj
-0 -54.9818 Td
-(6039   LAPIC_X2 = 0x00000000,        // divide by 2) 30.702 Tj
-0 -56.2909 Td
-(6040   LAPIC_X4 = 0x00000001,        // divide by 4) 30.702 Tj
-0 -57.6 Td
-(6041   LAPIC_X8 = 0x00000002,        // divide by 8) 30.702 Tj
-0 -58.9091 Td
-(6042   LAPIC_X16 = 0x00000003,       // divide by 16) 31.304 Tj
-0 -60.2181 Td
-(6043   LAPIC_X32 = 0x00000008,       // divide by 32) 31.304 Tj
-0 -61.5272 Td
-(6044   LAPIC_X64 = 0x00000009,       // divide by 64) 31.304 Tj
-0 -62.8363 Td
-(6045   LAPIC_X128 = 0x0000000A,      // divide by 128) 31.906 Tj
-0 -64.1454 Td
-(6046   LAPIC_X1 = 0x0000000B,        // divide by 1) 30.702 Tj
-0 -65.4545 Td
-(6047 };) 4.214 Tj
-0 -66.7636 Td
-(6048 ) 3.01 Tj
-0 -68.0727 Td
-(6049 ) 3.01 Tj
-0 -72 Td
-(Sheet 60) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/kbd.h  Page 1) 157.267 Tj
+0 -28.4801 Td
+(6000 // PC keyboard interface constants) 170.372 Tj
+0 -37.9735 Td
+(6001 ) 21.8426 Tj
+0 -47.4668 Td
+(6002 #define KBSTATP         0x64    // kbd controller status p\
+ort\(I\)) 301.427 Tj
+0 -56.9602 Td
+(6003 #define KBS_DIB         0x01    // kbd data in buffer) 253.374 Tj
+0 -66.4535 Td
+(6004 #define KBDATAP         0x60    // kbd data port\(I\)) 244.637 Tj
+0 -75.9469 Td
+(6005 ) 21.8426 Tj
+0 -85.4403 Td
+(6006 #define NO              0) 131.055 Tj
+0 -94.9336 Td
+(6007 ) 21.8426 Tj
+0 -104.427 Td
+(6008 #define SHIFT           \(1<<0\)) 152.898 Tj
+0 -113.92 Td
+(6009 #define CTL             \(1<<1\)) 152.898 Tj
+0 -123.414 Td
+(6010 #define ALT             \(1<<2\)) 152.898 Tj
+0 -132.907 Td
+(6011 ) 21.8426 Tj
+0 -142.4 Td
+(6012 #define CAPSLOCK        \(1<<3\)) 152.898 Tj
+0 -151.894 Td
+(6013 #define NUMLOCK         \(1<<4\)) 152.898 Tj
+0 -161.387 Td
+(6014 #define SCROLLLOCK      \(1<<5\)) 152.898 Tj
+0 -170.88 Td
+(6015 ) 21.8426 Tj
+0 -180.374 Td
+(6016 #define E0ESC           \(1<<6\)) 152.898 Tj
+0 -189.867 Td
+(6017 ) 21.8426 Tj
+0 -199.361 Td
+(6018 // Special keycodes) 104.844 Tj
+0 -208.854 Td
+(6019 #define KEY_HOME        0xE0) 144.161 Tj
+0 -218.347 Td
+(6020 #define KEY_END         0xE1) 144.161 Tj
+0 -227.841 Td
+(6021 #define KEY_UP          0xE2) 144.161 Tj
+0 -237.334 Td
+(6022 #define KEY_DN          0xE3) 144.161 Tj
+0 -246.827 Td
+(6023 #define KEY_LF          0xE4) 144.161 Tj
+0 -256.321 Td
+(6024 #define KEY_RT          0xE5) 144.161 Tj
+0 -265.814 Td
+(6025 #define KEY_PGUP        0xE6) 144.161 Tj
+0 -275.307 Td
+(6026 #define KEY_PGDN        0xE7) 144.161 Tj
+0 -284.801 Td
+(6027 #define KEY_INS         0xE8) 144.161 Tj
+0 -294.294 Td
+(6028 #define KEY_DEL         0xE9) 144.161 Tj
+0 -303.788 Td
+(6029 ) 21.8426 Tj
+0 -313.281 Td
+(6030 // C\('A'\) == Control-A) 117.95 Tj
+0 -322.774 Td
+(6031 #define C\(x\) \(x - '@'\)) 117.95 Tj
+0 -332.268 Td
+(6032 ) 21.8426 Tj
+0 -341.761 Td
+(6033 static uchar shiftcode[256] =) 148.529 Tj
+0 -351.254 Td
+(6034 {) 26.2111 Tj
+0 -360.748 Td
+(6035   [0x1D] CTL,) 78.6333 Tj
+0 -370.241 Td
+(6036   [0x2A] SHIFT,) 87.3703 Tj
+0 -379.734 Td
+(6037   [0x36] SHIFT,) 87.3703 Tj
+0 -389.228 Td
+(6038   [0x38] ALT,) 78.6333 Tj
+0 -398.721 Td
+(6039   [0x9D] CTL,) 78.6333 Tj
+0 -408.214 Td
+(6040   [0xB8] ALT) 74.2647 Tj
+0 -417.708 Td
+(6041 };) 30.5796 Tj
+0 -427.201 Td
+(6042 ) 21.8426 Tj
+0 -436.695 Td
+(6043 static uchar togglecode[256] =) 152.898 Tj
+0 -446.188 Td
+(6044 {) 26.2111 Tj
+0 -455.681 Td
+(6045   [0x3A] CAPSLOCK,) 100.476 Tj
+0 -465.175 Td
+(6046   [0x45] NUMLOCK,) 96.1073 Tj
+0 -474.668 Td
+(6047   [0x46] SCROLLLOCK) 104.844 Tj
+0 -484.161 Td
+(6048 };) 30.5796 Tj
+0 -493.655 Td
+(6049 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/lapic.c  Page 3) 22.876 Tj
-0 -3.92728 Td
-(6050 uint *lapicaddr;) 12.642 Tj
-0 -5.23637 Td
-(6051 ) 3.01 Tj
-0 -6.54546 Td
-(6052 static int) 9.03 Tj
-0 -7.85455 Td
-(6053 lapic_read\(int r\)) 13.244 Tj
-0 -9.16364 Td
-(6054 {) 3.612 Tj
-0 -10.4727 Td
-(6055   return *\(lapicaddr+\(r/sizeof\(*lapicaddr\)\)\);) 30.1 Tj
-0 -11.7818 Td
-(6056 }) 3.612 Tj
-0 -13.0909 Td
-(6057 ) 3.01 Tj
-0 -14.4 Td
-(6058 static void) 9.632 Tj
-0 -15.7091 Td
-(6059 lapic_write\(int r, int data\)) 19.866 Tj
-0 -17.0182 Td
-(6060 {) 3.612 Tj
-0 -18.3273 Td
-(6061   *\(lapicaddr+\(r/sizeof\(*lapicaddr\)\)\) = data;) 30.1 Tj
-0 -19.6364 Td
-(6062 }) 3.612 Tj
-0 -20.9455 Td
-(6063 ) 3.01 Tj
-0 -22.2545 Td
-(6064 ) 3.01 Tj
-0 -23.5636 Td
-(6065 void) 5.418 Tj
-0 -24.8727 Td
-(6066 lapic_timerinit\(void\)) 15.652 Tj
-0 -26.1818 Td
-(6067 {) 3.612 Tj
-0 -27.4909 Td
-(6068   if\(!lapicaddr\)) 12.642 Tj
-0 -28.8 Td
-(6069     return;) 9.632 Tj
-0 -30.1091 Td
-(6070 ) 3.01 Tj
-0 -31.4182 Td
-(6071   lapic_write\(LAPIC_TDCR, LAPIC_X1\);) 24.682 Tj
-0 -32.7273 Td
-(6072   lapic_write\(LAPIC_TIMER, LAPIC_CLKIN | LAPIC_PERIODIC |) 37.324 Tj
-0 -34.0364 Td
-(6073 ) 3.01 Tj
-8.42796 -34.0364 Td
-(\(IRQ_OFFSET + IRQ_TIMER\)\);) 15.652 Tj
-0 -35.3454 Td
-(6074   lapic_write\(LAPIC_TCCR, 10000000\);) 24.682 Tj
-0 -36.6545 Td
-(6075   lapic_write\(LAPIC_TICR, 10000000\);) 24.682 Tj
-0 -37.9636 Td
-(6076 }) 3.612 Tj
-0 -39.2727 Td
-(6077 ) 3.01 Tj
-0 -40.5818 Td
-(6078 void) 5.418 Tj
-0 -41.8909 Td
-(6079 lapic_timerintr\(void\)) 15.652 Tj
-0 -43.2 Td
-(6080 {) 3.612 Tj
-0 -44.5091 Td
-(6081   if\(lapicaddr\)) 12.04 Tj
-0 -45.8182 Td
-(6082     lapic_write\(LAPIC_EOI, 0\);) 21.07 Tj
-0 -47.1272 Td
-(6083 }) 3.612 Tj
-0 -48.4363 Td
-(6084 ) 3.01 Tj
-0 -49.7454 Td
-(6085 void) 5.418 Tj
-0 -51.0545 Td
-(6086 lapic_init\(int c\)) 13.244 Tj
-0 -52.3636 Td
-(6087 {) 3.612 Tj
-0 -53.6727 Td
-(6088   uint r, lvt;) 11.438 Tj
-0 -54.9818 Td
-(6089 ) 3.01 Tj
-0 -56.2909 Td
-(6090   if\(!lapicaddr\)) 12.642 Tj
-0 -57.6 Td
-(6091     return;) 9.632 Tj
-0 -58.9091 Td
-(6092 ) 3.01 Tj
-0 -60.2181 Td
-(6093   lapic_write\(LAPIC_DFR, 0xFFFFFFFF\);    // Set dst format register) 43.344 Tj
-0 -61.5272 Td
-(6094   r = \(lapic_read\(LAPIC_ID\)>>24\) & 0xFF; // Read APIC ID) 36.722 Tj
-0 -62.8363 Td
-(6095   lapic_write\(LAPIC_LDR, \(1<<r\)<<24\);    // Set logical dst register to r) 46.956 Tj
-0 -64.1454 Td
-(6096   lapic_write\(LAPIC_TPR, 0xFF\);          // No interrupts for now) 42.14 Tj
-0 -65.4545 Td
-(6097 ) 3.01 Tj
-0 -66.7636 Td
-(6098   // Enable APIC) 12.642 Tj
-0 -68.0727 Td
-(6099   lapic_write\(LAPIC_SVR, LAPIC_ENABLE|\(IRQ_OFFSET+IRQ_SPURIOUS\)\);) 42.14 Tj
-0 -72 Td
-(Sheet 60) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/kbd.h  Page 2) 157.267 Tj
+0 -28.4801 Td
+(6050 static uchar normalmap[256] =) 148.529 Tj
+0 -37.9735 Td
+(6051 {) 26.2111 Tj
+0 -47.4668 Td
+(6052   NO,   0x1B, '1',  '2',  '3',  '4',  '5',  '6',  // 0x00) 270.848 Tj
+0 -56.9602 Td
+(6053   '7',  '8',  '9',  '0',  '-',  '=',  '\\b', '\\t',) 235.9 Tj
+0 -66.4535 Td
+(6054   'q',  'w',  'e',  'r',  't',  'y',  'u',  'i',  // 0x10) 270.848 Tj
+0 -75.9469 Td
+(6055   'o',  'p',  '[',  ']',  '\\n', NO,   'a',  's',) 231.531 Tj
+0 -85.4403 Td
+(6056   'd',  'f',  'g',  'h',  'j',  'k',  'l',  ';',  // 0x20) 270.848 Tj
+0 -94.9336 Td
+(6057   '\\'', '`',  NO,   '\\\\', 'z',  'x',  'c',  'v',) 231.531 Tj
+0 -104.427 Td
+(6058   'b',  'n',  'm',  ',',  '.',  '/',  NO,   '*',  // 0x30) 270.848 Tj
+0 -113.92 Td
+(6059   NO,   ' ',  NO,   NO,   NO,   NO,   NO,   NO,) 227.163 Tj
+0 -123.414 Td
+(6060   NO,   NO,   NO,   NO,   NO,   NO,   NO,   '7',  // 0x40) 270.848 Tj
+0 -132.907 Td
+(6061   '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',) 231.531 Tj
+0 -142.4 Td
+(6062   '2',  '3',  '0',  '.',  NO,   NO,   NO,   NO,   // 0x50) 270.848 Tj
+0 -151.894 Td
+(6063   [0x9C] '\\n',      // KP_Enter) 157.267 Tj
+0 -161.387 Td
+(6064   [0xB5] '/',       // KP_Div) 148.529 Tj
+0 -170.88 Td
+(6065   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.372 Tj
+0 -180.374 Td
+(6066   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.109 Tj
+0 -189.867 Td
+(6067   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.372 Tj
+0 -199.361 Td
+(6068   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.741 Tj
+0 -208.854 Td
+(6069   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.372 Tj
+0 -218.347 Td
+(6070 };) 30.5796 Tj
+0 -227.841 Td
+(6071 ) 21.8426 Tj
+0 -237.334 Td
+(6072 static uchar shiftmap[256] =) 144.161 Tj
+0 -246.827 Td
+(6073 {) 26.2111 Tj
+0 -256.321 Td
+(6074   NO,   033,  '!',  '@',  '#',  '$',  '%',  '^',  // 0x00) 270.848 Tj
+0 -265.814 Td
+(6075   '&',  '*',  '\(',  '\)',  '_',  '+',  '\\b', '\\t',) 235.9 Tj
+0 -275.307 Td
+(6076   'Q',  'W',  'E',  'R',  'T',  'Y',  'U',  'I',  // 0x10) 270.848 Tj
+0 -284.801 Td
+(6077   'O',  'P',  '{',  '}',  '\\n', NO,   'A',  'S',) 231.531 Tj
+0 -294.294 Td
+(6078   'D',  'F',  'G',  'H',  'J',  'K',  'L',  ':',  // 0x20) 270.848 Tj
+0 -303.788 Td
+(6079   '"',  '~',  NO,   '|',  'Z',  'X',  'C',  'V',) 231.531 Tj
+0 -313.281 Td
+(6080   'B',  'N',  'M',  '<',  '>',  '?',  NO,   '*',  // 0x30) 270.848 Tj
+0 -322.774 Td
+(6081   NO,   ' ',  NO,   NO,   NO,   NO,   NO,   NO,) 227.163 Tj
+0 -332.268 Td
+(6082   NO,   NO,   NO,   NO,   NO,   NO,   NO,   '7',  // 0x40) 270.848 Tj
+0 -341.761 Td
+(6083   '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',) 231.531 Tj
+0 -351.254 Td
+(6084   '2',  '3',  '0',  '.',  NO,   NO,   NO,   NO,   // 0x50) 270.848 Tj
+0 -360.748 Td
+(6085   [0x9C] '\\n',      // KP_Enter) 157.267 Tj
+0 -370.241 Td
+(6086   [0xB5] '/',       // KP_Div) 148.529 Tj
+0 -379.734 Td
+(6087   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.372 Tj
+0 -389.228 Td
+(6088   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.109 Tj
+0 -398.721 Td
+(6089   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.372 Tj
+0 -408.214 Td
+(6090   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.741 Tj
+0 -417.708 Td
+(6091   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.372 Tj
+0 -427.201 Td
+(6092 };) 30.5796 Tj
+0 -436.695 Td
+(6093 ) 21.8426 Tj
+0 -446.188 Td
+(6094 ) 21.8426 Tj
+0 -455.681 Td
+(6095 ) 21.8426 Tj
+0 -465.175 Td
+(6096 ) 21.8426 Tj
+0 -474.668 Td
+(6097 ) 21.8426 Tj
+0 -484.161 Td
+(6098 ) 21.8426 Tj
+0 -493.655 Td
+(6099 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 60) 34.9481 Tj
 Q
 Q
 Q
@@ -18890,7 +20222,10 @@ pdfEndPage
 %%Page: 68 68
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -18898,241 +20233,260 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/lapic.c  Page 4) 22.876 Tj
-0 -3.92728 Td
-(6100   // In virtual wire mode, set up the LINT0 and LINT1 as follows:) 42.14 Tj
-0 -5.23637 Td
-(6101   lapic_write\(LAPIC_LINT0, APIC_IMASK | APIC_EXTINT\);) 34.916 Tj
-0 -6.54546 Td
-(6102   lapic_write\(LAPIC_LINT1, APIC_IMASK | APIC_NMI\);) 33.11 Tj
-0 -7.85455 Td
-(6103 ) 3.01 Tj
-0 -9.16364 Td
-(6104   lapic_write\(LAPIC_EOI, 0\); // Ack any outstanding interrupts.) 40.936 Tj
-0 -10.4727 Td
-(6105 ) 3.01 Tj
-0 -11.7818 Td
-(6106   lvt = \(lapic_read\(LAPIC_VER\)>>16\) & 0xFF;) 28.896 Tj
-0 -13.0909 Td
-(6107   if\(lvt >= 4\)) 11.438 Tj
-0 -14.4 Td
-(6108     lapic_write\(LAPIC_PCINT, APIC_IMASK\);) 27.692 Tj
-0 -15.7091 Td
-(6109   lapic_write\(LAPIC_ERROR, IRQ_OFFSET+IRQ_ERROR\);) 32.508 Tj
-0 -17.0182 Td
-(6110   lapic_write\(LAPIC_ESR, 0\);) 19.866 Tj
-0 -18.3273 Td
-(6111   lapic_read\(LAPIC_ESR\);) 17.458 Tj
-0 -19.6364 Td
-(6112 ) 3.01 Tj
-0 -20.9455 Td
-(6113   // Issue an INIT Level De-Assert to synchronise arbitration ID's.) 43.344 Tj
-0 -22.2545 Td
-(6114   lapic_write\(LAPIC_ICRHI, 0\);) 21.07 Tj
-0 -23.5636 Td
-(6115   lapic_write\(LAPIC_ICRLO, LAPIC_ALLINC|APIC_LEVEL|) 33.712 Tj
-0 -24.8727 Td
-(6116                            LAPIC_DEASSERT|APIC_INIT\);) 34.916 Tj
-0 -26.1818 Td
-(6117   while\(lapic_read\(LAPIC_ICRLO\) & APIC_DELIVS\)) 30.702 Tj
-0 -27.4909 Td
-(6118     ;) 6.02 Tj
-0 -28.8 Td
-(6119 }) 3.612 Tj
-0 -30.1091 Td
-(6120 ) 3.01 Tj
-0 -31.4182 Td
-(6121 void) 5.418 Tj
-0 -32.7273 Td
-(6122 lapic_enableintr\(void\)) 16.254 Tj
-0 -34.0364 Td
-(6123 {) 3.612 Tj
-0 -35.3454 Td
-(6124   if\(lapicaddr\)) 12.04 Tj
-0 -36.6545 Td
-(6125     lapic_write\(LAPIC_TPR, 0\);) 21.07 Tj
-0 -37.9636 Td
-(6126 }) 3.612 Tj
-0 -39.2727 Td
-(6127 ) 3.01 Tj
-0 -40.5818 Td
-(6128 void) 5.418 Tj
-0 -41.8909 Td
-(6129 lapic_disableintr\(void\)) 16.856 Tj
-0 -43.2 Td
-(6130 {) 3.612 Tj
-0 -44.5091 Td
-(6131   if\(lapicaddr\)) 12.04 Tj
-0 -45.8182 Td
-(6132     lapic_write\(LAPIC_TPR, 0xFF\);) 22.876 Tj
-0 -47.1272 Td
-(6133 }) 3.612 Tj
-0 -48.4363 Td
-(6134 ) 3.01 Tj
-0 -49.7454 Td
-(6135 void) 5.418 Tj
-0 -51.0545 Td
-(6136 lapic_eoi\(void\)) 12.04 Tj
-0 -52.3636 Td
-(6137 {) 3.612 Tj
-0 -53.6727 Td
-(6138   if\(lapicaddr\)) 12.04 Tj
-0 -54.9818 Td
-(6139     lapic_write\(LAPIC_EOI, 0\);) 21.07 Tj
-0 -56.2909 Td
-(6140 }) 3.612 Tj
-0 -57.6 Td
-(6141 ) 3.01 Tj
-0 -58.9091 Td
-(6142 ) 3.01 Tj
-0 -60.2181 Td
-(6143 ) 3.01 Tj
-0 -61.5272 Td
-(6144 ) 3.01 Tj
-0 -62.8363 Td
-(6145 ) 3.01 Tj
-0 -64.1454 Td
-(6146 ) 3.01 Tj
-0 -65.4545 Td
-(6147 ) 3.01 Tj
-0 -66.7636 Td
-(6148 ) 3.01 Tj
-0 -68.0727 Td
-(6149 ) 3.01 Tj
-0 -72 Td
-(Sheet 61) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/kbd.h  Page 3) 157.267 Tj
+0 -28.4801 Td
+(6100 static uchar ctlmap[256] =) 135.424 Tj
+0 -37.9735 Td
+(6101 {) 26.2111 Tj
+0 -47.4668 Td
+(6102   NO,      NO,      NO,      NO,      NO,      NO,      NO\
+,      NO,) 318.902 Tj
+0 -56.9602 Td
+(6103   NO,      NO,      NO,      NO,      NO,      NO,      NO\
+,      NO,) 318.902 Tj
+0 -66.4535 Td
+(6104   C\('Q'\),  C\('W'\),  C\('E'\),  C\('R'\),  C\('T'\),  C\
+\('Y'\),  C\('U'\),  C\('I'\),) 336.376 Tj
+0 -75.9469 Td
+(6105   C\('O'\),  C\('P'\),  NO,      NO,      '\\r',    NO,   \
+   C\('A'\),  C\('S'\),) 336.376 Tj
+0 -85.4403 Td
+(6106   C\('D'\),  C\('F'\),  C\('G'\),  C\('H'\),  C\('J'\),  C\
+\('K'\),  C\('L'\),  NO,) 318.902 Tj
+0 -94.9336 Td
+(6107   NO,      NO,      NO,      C\('\\\\'\), C\('Z'\),  C\('X\
+'\),  C\('C'\),  C\('V'\),) 336.376 Tj
+0 -104.427 Td
+(6108   C\('B'\),  C\('N'\),  C\('M'\),  NO,      NO,      C\('/\
+'\),  NO,      NO,) 318.902 Tj
+0 -113.92 Td
+(6109   [0x9C] '\\r',      // KP_Enter) 157.267 Tj
+0 -123.414 Td
+(6110   [0xB5] C\('/'\),    // KP_Div) 148.529 Tj
+0 -132.907 Td
+(6111   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.372 Tj
+0 -142.4 Td
+(6112   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.109 Tj
+0 -151.894 Td
+(6113   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.372 Tj
+0 -161.387 Td
+(6114   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.741 Tj
+0 -170.88 Td
+(6115   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.372 Tj
+0 -180.374 Td
+(6116 };) 30.5796 Tj
+0 -189.867 Td
+(6117 ) 21.8426 Tj
+0 -199.361 Td
+(6118 ) 21.8426 Tj
+0 -208.854 Td
+(6119 ) 21.8426 Tj
+0 -218.347 Td
+(6120 ) 21.8426 Tj
+0 -227.841 Td
+(6121 ) 21.8426 Tj
+0 -237.334 Td
+(6122 ) 21.8426 Tj
+0 -246.827 Td
+(6123 ) 21.8426 Tj
+0 -256.321 Td
+(6124 ) 21.8426 Tj
+0 -265.814 Td
+(6125 ) 21.8426 Tj
+0 -275.307 Td
+(6126 ) 21.8426 Tj
+0 -284.801 Td
+(6127 ) 21.8426 Tj
+0 -294.294 Td
+(6128 ) 21.8426 Tj
+0 -303.788 Td
+(6129 ) 21.8426 Tj
+0 -313.281 Td
+(6130 ) 21.8426 Tj
+0 -322.774 Td
+(6131 ) 21.8426 Tj
+0 -332.268 Td
+(6132 ) 21.8426 Tj
+0 -341.761 Td
+(6133 ) 21.8426 Tj
+0 -351.254 Td
+(6134 ) 21.8426 Tj
+0 -360.748 Td
+(6135 ) 21.8426 Tj
+0 -370.241 Td
+(6136 ) 21.8426 Tj
+0 -379.734 Td
+(6137 ) 21.8426 Tj
+0 -389.228 Td
+(6138 ) 21.8426 Tj
+0 -398.721 Td
+(6139 ) 21.8426 Tj
+0 -408.214 Td
+(6140 ) 21.8426 Tj
+0 -417.708 Td
+(6141 ) 21.8426 Tj
+0 -427.201 Td
+(6142 ) 21.8426 Tj
+0 -436.695 Td
+(6143 ) 21.8426 Tj
+0 -446.188 Td
+(6144 ) 21.8426 Tj
+0 -455.681 Td
+(6145 ) 21.8426 Tj
+0 -465.175 Td
+(6146 ) 21.8426 Tj
+0 -474.668 Td
+(6147 ) 21.8426 Tj
+0 -484.161 Td
+(6148 ) 21.8426 Tj
+0 -493.655 Td
+(6149 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/lapic.c  Page 5) 22.876 Tj
-0 -3.92728 Td
-(6150 int) 4.816 Tj
-0 -5.23637 Td
-(6151 cpu\(void\)) 8.428 Tj
-0 -6.54546 Td
-(6152 {) 3.612 Tj
-0 -7.85455 Td
-(6153   int x;) 7.826 Tj
-0 -9.16364 Td
-(6154   if\(lapicaddr\)) 12.04 Tj
-0 -10.4727 Td
-(6155     x = \(lapic_read\(LAPIC_ID\)>>24\) & 0xFF;) 28.294 Tj
-0 -11.7818 Td
-(6156   else) 6.622 Tj
-0 -13.0909 Td
-(6157     x = 0;) 9.03 Tj
-0 -14.4 Td
-(6158   return x;) 9.632 Tj
-0 -15.7091 Td
-(6159 }) 3.612 Tj
-0 -17.0182 Td
-(6160 ) 3.01 Tj
-0 -18.3273 Td
-(6161 void) 5.418 Tj
-0 -19.6364 Td
-(6162 lapic_startap\(uchar apicid, int v\)) 23.478 Tj
-0 -20.9455 Td
-(6163 {) 3.612 Tj
-0 -22.2545 Td
-(6164   int crhi, i;) 11.438 Tj
-0 -23.5636 Td
-(6165   volatile int j = 0;) 15.652 Tj
-0 -24.8727 Td
-(6166 ) 3.01 Tj
-0 -26.1818 Td
-(6167   crhi = apicid<<24;) 15.05 Tj
-0 -27.4909 Td
-(6168   lapic_write\(LAPIC_ICRHI, crhi\);) 22.876 Tj
-0 -28.8 Td
-(6169   lapic_write\(LAPIC_ICRLO, LAPIC_FIELD|APIC_LEVEL|) 33.11 Tj
-0 -30.1091 Td
-(6170                            LAPIC_ASSERT|APIC_INIT\);) 33.712 Tj
-0 -31.4182 Td
-(6171 ) 3.01 Tj
-0 -32.7273 Td
-(6172   while\(j++ < 10000\) {;}) 17.458 Tj
-0 -34.0364 Td
-(6173   lapic_write\(LAPIC_ICRLO, LAPIC_FIELD|APIC_LEVEL|) 33.11 Tj
-0 -35.3454 Td
-(6174                            LAPIC_DEASSERT|APIC_INIT\);) 34.916 Tj
-0 -36.6545 Td
-(6175 ) 3.01 Tj
-0 -37.9636 Td
-(6176   while\(j++ < 1000000\) {;}) 18.662 Tj
-0 -39.2727 Td
-(6177 ) 3.01 Tj
-0 -40.5818 Td
-(6178   // in p9 code, this was i < 2, which is what the spec says on page B-3) 46.354 Tj
-0 -41.8909 Td
-(6179   for\(i = 0; i < 1; i++\){) 18.06 Tj
-0 -43.2 Td
-(6180     lapic_write\(LAPIC_ICRHI, crhi\);) 24.08 Tj
-0 -44.5091 Td
-(6181     lapic_write\(LAPIC_ICRLO, LAPIC_FIELD|APIC_EDGE|APIC_STARTUP|\(v/4096\)\);) 47.558 Tj
-0 -45.8182 Td
-(6182     while\(j++ < 100000\) {;}) 19.264 Tj
-0 -47.1272 Td
-(6183   }) 4.816 Tj
-0 -48.4363 Td
-(6184 }) 3.612 Tj
-0 -49.7454 Td
-(6185 ) 3.01 Tj
-0 -51.0545 Td
-(6186 ) 3.01 Tj
-0 -52.3636 Td
-(6187 ) 3.01 Tj
-0 -53.6727 Td
-(6188 ) 3.01 Tj
-0 -54.9818 Td
-(6189 ) 3.01 Tj
-0 -56.2909 Td
-(6190 ) 3.01 Tj
-0 -57.6 Td
-(6191 ) 3.01 Tj
-0 -58.9091 Td
-(6192 ) 3.01 Tj
-0 -60.2181 Td
-(6193 ) 3.01 Tj
-0 -61.5272 Td
-(6194 ) 3.01 Tj
-0 -62.8363 Td
-(6195 ) 3.01 Tj
-0 -64.1454 Td
-(6196 ) 3.01 Tj
-0 -65.4545 Td
-(6197 ) 3.01 Tj
-0 -66.7636 Td
-(6198 ) 3.01 Tj
-0 -68.0727 Td
-(6199 ) 3.01 Tj
-0 -72 Td
-(Sheet 61) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/kbd.c  Page 1) 157.267 Tj
+0 -28.4801 Td
+(6150 #include "types.h") 100.476 Tj
+0 -37.9735 Td
+(6151 #include "x86.h") 91.7388 Tj
+0 -47.4668 Td
+(6152 #include "defs.h") 96.1073 Tj
+0 -56.9602 Td
+(6153 #include "kbd.h") 91.7388 Tj
+0 -66.4535 Td
+(6154 ) 21.8426 Tj
+0 -75.9469 Td
+(6155 int) 34.9481 Tj
+0 -85.4403 Td
+(6156 kbd_getc\(void\)) 83.0018 Tj
+0 -94.9336 Td
+(6157 {) 26.2111 Tj
+0 -104.427 Td
+(6158   static uint shift;) 109.213 Tj
+0 -113.92 Td
+(6159   static uchar *charcode[4] = {) 157.267 Tj
+0 -123.414 Td
+(6160     normalmap, shiftmap, ctlmap, ctlmap) 192.215 Tj
+0 -132.907 Td
+(6161   };) 39.3166 Tj
+0 -142.4 Td
+(6162   uint st, data, c;) 104.844 Tj
+0 -151.894 Td
+(6163 ) 21.8426 Tj
+0 -161.387 Td
+(6164   st = inb\(KBSTATP\);) 109.213 Tj
+0 -170.88 Td
+(6165   if\(\(st & KBS_DIB\) == 0\)) 131.055 Tj
+0 -180.374 Td
+(6166     return -1;) 83.0018 Tj
+0 -189.867 Td
+(6167   data = inb\(KBDATAP\);) 117.95 Tj
+0 -199.361 Td
+(6168 ) 21.8426 Tj
+0 -208.854 Td
+(6169   if\(data == 0xE0\){) 104.844 Tj
+0 -218.347 Td
+(6170     shift |= E0ESC;) 104.844 Tj
+0 -227.841 Td
+(6171     return 0;) 78.6333 Tj
+0 -237.334 Td
+(6172   } else if\(data & 0x80\){) 131.055 Tj
+0 -246.827 Td
+(6173     // Key released) 104.844 Tj
+0 -256.321 Td
+(6174     data = \(shift & E0ESC ? data : data & 0x7F\);) 231.531 Tj
+0 -265.814 Td
+(6175     shift &= ~\(shiftcode[data] | E0ESC\);) 196.583 Tj
+0 -275.307 Td
+(6176     return 0;) 78.6333 Tj
+0 -284.801 Td
+(6177   } else if\(shift & E0ESC\){) 139.792 Tj
+0 -294.294 Td
+(6178     // Last character was an E0 escape; or with 0x80) 249.005 Tj
+0 -303.788 Td
+(6179     data |= 0x80;) 96.1073 Tj
+0 -313.281 Td
+(6180     shift &= ~E0ESC;) 109.213 Tj
+0 -322.774 Td
+(6181   }) 34.9481 Tj
+0 -332.268 Td
+(6182 ) 21.8426 Tj
+0 -341.761 Td
+(6183   shift |= shiftcode[data];) 139.792 Tj
+0 -351.254 Td
+(6184   shift ^= togglecode[data];) 144.161 Tj
+0 -360.748 Td
+(6185   c = charcode[shift & \(CTL | SHIFT\)][data];) 214.057 Tj
+0 -370.241 Td
+(6186   if\(shift & CAPSLOCK\){) 122.318 Tj
+0 -379.734 Td
+(6187     if\('a' <= c && c <= 'z'\)) 144.161 Tj
+0 -389.228 Td
+(6188       c += 'A' - 'a';) 113.581 Tj
+0 -398.721 Td
+(6189     else if\('A' <= c && c <= 'Z'\)) 166.004 Tj
+0 -408.214 Td
+(6190       c += 'a' - 'A';) 113.581 Tj
+0 -417.708 Td
+(6191   }) 34.9481 Tj
+0 -427.201 Td
+(6192   return c;) 69.8962 Tj
+0 -436.695 Td
+(6193 }) 26.2111 Tj
+0 -446.188 Td
+(6194 ) 21.8426 Tj
+0 -455.681 Td
+(6195 void) 39.3166 Tj
+0 -465.175 Td
+(6196 kbd_intr\(void\)) 83.0018 Tj
+0 -474.668 Td
+(6197 {) 26.2111 Tj
+0 -484.161 Td
+(6198   console_intr\(kbd_getc\);) 131.055 Tj
+0 -493.655 Td
+(6199 }) 26.2111 Tj
+0 -522.135 Td
+(Sheet 61) 34.9481 Tj
 Q
 Q
 Q
@@ -19144,6 +20498,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -19151,241 +20508,256 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/ioapic.c  Page 1) 23.478 Tj
-0 -3.92728 Td
-(6200 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(6201 #include "mp.h") 12.04 Tj
-0 -6.54546 Td
-(6202 #include "defs.h") 13.244 Tj
-0 -7.85455 Td
-(6203 #include "x86.h") 12.642 Tj
-0 -9.16364 Td
-(6204 #include "traps.h") 13.846 Tj
-0 -10.4727 Td
-(6205 #include "ioapic.h") 14.448 Tj
-0 -11.7818 Td
-(6206 ) 3.01 Tj
-0 -13.0909 Td
-(6207 struct ioapic {) 12.04 Tj
-0 -14.4 Td
-(6208   uint ioregsel;  uint p01; uint p02; uint p03;) 31.304 Tj
-0 -15.7091 Td
-(6209   uint iowin;     uint p11; uint p12; uint p13;) 31.304 Tj
-0 -17.0182 Td
-(6210 };) 4.214 Tj
-0 -18.3273 Td
-(6211 ) 3.01 Tj
-0 -19.6364 Td
-(6212 ) 3.01 Tj
-0 -20.9455 Td
-(6213 #define IOAPIC_REDTBL_LO\(i\)  \(IOAPIC_REDTBL + \(i\) * 2\)) 35.518 Tj
-0 -22.2545 Td
-(6214 #define IOAPIC_REDTBL_HI\(i\)  \(IOAPIC_REDTBL_LO\(i\) + 1\)) 35.518 Tj
-0 -23.5636 Td
-(6215 ) 3.01 Tj
-0 -24.8727 Td
-(6216 static uint) 9.632 Tj
-0 -26.1818 Td
-(6217 ioapic_read\(struct ioapic *io, int reg\)) 26.488 Tj
-0 -27.4909 Td
-(6218 {) 3.612 Tj
-0 -28.8 Td
-(6219   io->ioregsel = reg;) 15.652 Tj
-0 -30.1091 Td
-(6220   return io->iowin;) 14.448 Tj
-0 -31.4182 Td
-(6221 }) 3.612 Tj
-0 -32.7273 Td
-(6222 ) 3.01 Tj
-0 -34.0364 Td
-(6223 static void) 9.632 Tj
-0 -35.3454 Td
-(6224 ioapic_write\(struct ioapic *io, int reg, uint val\)) 33.11 Tj
-0 -36.6545 Td
-(6225 {) 3.612 Tj
-0 -37.9636 Td
-(6226   io->ioregsel = reg;) 15.652 Tj
-0 -39.2727 Td
-(6227   io->iowin = val;) 13.846 Tj
-0 -40.5818 Td
-(6228 }) 3.612 Tj
-0 -41.8909 Td
-(6229 ) 3.01 Tj
-0 -43.2 Td
-(6230 void) 5.418 Tj
-0 -44.5091 Td
-(6231 ioapic_init\(void\)) 13.244 Tj
-0 -45.8182 Td
-(6232 {) 3.612 Tj
-0 -47.1272 Td
-(6233   struct ioapic *io;) 15.05 Tj
-0 -48.4363 Td
-(6234   uint l, h;) 10.234 Tj
-0 -49.7454 Td
-(6235   int nintr;) 10.234 Tj
-0 -51.0545 Td
-(6236   uchar id;) 9.632 Tj
-0 -52.3636 Td
-(6237   int i;) 7.826 Tj
-0 -53.6727 Td
-(6238 ) 3.01 Tj
-0 -54.9818 Td
-(6239   if\(!ismp\)) 9.632 Tj
-0 -56.2909 Td
-(6240     return;) 9.632 Tj
-0 -57.6 Td
-(6241 ) 3.01 Tj
-0 -58.9091 Td
-(6242   io = \(struct ioapic*\) IO_APIC_BASE;) 25.284 Tj
-0 -60.2181 Td
-(6243   l = ioapic_read\(io, IOAPIC_VER\);) 23.478 Tj
-0 -61.5272 Td
-(6244   nintr =  \(\(l & IOART_VER_MAXREDIR\) >> MAXREDIRSHIFT\) + 1;) 38.528 Tj
-0 -62.8363 Td
-(6245   id = ioapic_read\(io, IOAPIC_ID\) >> APIC_ID_SHIFT;) 33.712 Tj
-0 -64.1454 Td
-(6246   if\(id != ioapic_id\)) 15.652 Tj
-0 -65.4545 Td
-(6247     cprintf\("ioapic_init: id isn't equal to ioapic_id; not a MP\\n"\);) 43.946 Tj
-0 -66.7636 Td
-(6248   for\(i = 0; i < nintr; i++\) {) 21.07 Tj
-0 -68.0727 Td
-(6249     // active-hi and edge-triggered for ISA interrupts) 35.518 Tj
-0 -72 Td
-(Sheet 62) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/console.c  Page 1) 174.741 Tj
+0 -28.4801 Td
+(6200 // Console input and output.) 144.161 Tj
+0 -37.9735 Td
+(6201 // Input is from the keyboard only.) 174.741 Tj
+0 -47.4668 Td
+(6202 // Output is written to the screen and the printer port.) 266.479 Tj
+0 -56.9602 Td
+(6203 ) 21.8426 Tj
+0 -66.4535 Td
+(6204 #include "types.h") 100.476 Tj
+0 -75.9469 Td
+(6205 #include "defs.h") 96.1073 Tj
+0 -85.4403 Td
+(6206 #include "param.h") 100.476 Tj
+0 -94.9336 Td
+(6207 #include "traps.h") 100.476 Tj
+0 -104.427 Td
+(6208 #include "spinlock.h") 113.581 Tj
+0 -113.92 Td
+(6209 #include "dev.h") 91.7388 Tj
+0 -123.414 Td
+(6210 #include "mmu.h") 91.7388 Tj
+0 -132.907 Td
+(6211 #include "proc.h") 96.1073 Tj
+0 -142.4 Td
+(6212 #include "x86.h") 91.7388 Tj
+0 -151.894 Td
+(6213 ) 21.8426 Tj
+0 -161.387 Td
+(6214 #define CRTPORT 0x3d4) 113.581 Tj
+0 -170.88 Td
+(6215 #define LPTPORT 0x378) 113.581 Tj
+0 -180.374 Td
+(6216 #define BACKSPACE 0x100) 122.318 Tj
+0 -189.867 Td
+(6217 ) 21.8426 Tj
+0 -199.361 Td
+(6218 static ushort *crt = \(ushort*\)0xb8000;  // CGA memory) 253.374 Tj
+0 -208.854 Td
+(6219 ) 21.8426 Tj
+0 -218.347 Td
+(6220 static struct spinlock console_lock;) 179.109 Tj
+0 -227.841 Td
+(6221 int panicked = 0;) 96.1073 Tj
+0 -237.334 Td
+(6222 int use_console_lock = 0;) 131.055 Tj
+0 -246.827 Td
+(6223 ) 21.8426 Tj
+0 -256.321 Td
+(6224 // Copy console output to parallel port, which you can tel\
+l) 279.585 Tj
+0 -265.814 Td
+(6225 // .bochsrc to copy to the stdout:) 170.372 Tj
+0 -275.307 Td
+(6226 //   parport1: enabled=1, file="/dev/stdout") 214.057 Tj
+0 -284.801 Td
+(6227 static void) 69.8962 Tj
+0 -294.294 Td
+(6228 lpt_putc\(int c\)) 87.3703 Tj
+0 -303.788 Td
+(6229 {) 26.2111 Tj
+0 -313.281 Td
+(6230   int i;) 56.7907 Tj
+0 -322.774 Td
+(6231 ) 21.8426 Tj
+0 -332.268 Td
+(6232   for\(i = 0; !\(inb\(LPTPORT+1\) & 0x80\) && i < 12800; i\
+++\)) 266.479 Tj
+0 -341.761 Td
+(6233     ;) 43.6851 Tj
+0 -351.254 Td
+(6234   if\(c == BACKSPACE\)) 109.213 Tj
+0 -360.748 Td
+(6235     c = '\\b';) 78.6333 Tj
+0 -370.241 Td
+(6236   outb\(LPTPORT+0, c\);) 113.581 Tj
+0 -379.734 Td
+(6237   outb\(LPTPORT+2, 0x08|0x04|0x01\);) 170.372 Tj
+0 -389.228 Td
+(6238   outb\(LPTPORT+2, 0x08\);) 126.687 Tj
+0 -398.721 Td
+(6239 }) 26.2111 Tj
+0 -408.214 Td
+(6240 ) 21.8426 Tj
+0 -417.708 Td
+(6241 ) 21.8426 Tj
+0 -427.201 Td
+(6242 ) 21.8426 Tj
+0 -436.695 Td
+(6243 ) 21.8426 Tj
+0 -446.188 Td
+(6244 ) 21.8426 Tj
+0 -455.681 Td
+(6245 ) 21.8426 Tj
+0 -465.175 Td
+(6246 ) 21.8426 Tj
+0 -474.668 Td
+(6247 ) 21.8426 Tj
+0 -484.161 Td
+(6248 ) 21.8426 Tj
+0 -493.655 Td
+(6249 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/ioapic.c  Page 2) 23.478 Tj
-0 -3.92728 Td
-(6250     // Assume that pin 0 on the first I/O APIC is an ExtINT pin.) 41.538 Tj
-0 -5.23637 Td
-(6251     // Assume that pins 1-15 are ISA interrupts) 31.304 Tj
-0 -6.54546 Td
-(6252     l = ioapic_read\(io, IOAPIC_REDTBL_LO\(i\)\);) 30.1 Tj
-0 -7.85455 Td
-(6253     l = l & ~IOART_INTMASK;  // allow INTs) 28.294 Tj
-0 -9.16364 Td
-(6254     l |= IOART_INTMSET;) 16.856 Tj
-0 -10.4727 Td
-(6255     l = l & ~IOART_INTPOL;   // active hi) 27.692 Tj
-0 -11.7818 Td
-(6256     l = l & ~IOART_TRGRMOD;  // edgee triggered) 31.304 Tj
-0 -13.0909 Td
-(6257     l = l & ~IOART_DELMOD;   // fixed) 25.284 Tj
-0 -14.4 Td
-(6258     l = l & ~IOART_DESTMOD;  // physical mode) 30.1 Tj
-0 -15.7091 Td
-(6259     l = l | \(IRQ_OFFSET + i\); // vector) 26.488 Tj
-0 -17.0182 Td
-(6260     ioapic_write\(io, IOAPIC_REDTBL_LO\(i\), l\);) 30.1 Tj
-0 -18.3273 Td
-(6261     h = ioapic_read\(io, IOAPIC_REDTBL_HI\(i\)\);) 30.1 Tj
-0 -19.6364 Td
-(6262     h &= ~IOART_DEST;) 15.652 Tj
-0 -20.9455 Td
-(6263     ioapic_write\(io, IOAPIC_REDTBL_HI\(i\), h\);) 30.1 Tj
-0 -22.2545 Td
-(6264   }) 4.816 Tj
-0 -23.5636 Td
-(6265 }) 3.612 Tj
-0 -24.8727 Td
-(6266 ) 3.01 Tj
-0 -26.1818 Td
-(6267 void) 5.418 Tj
-0 -27.4909 Td
-(6268 ioapic_enable \(int irq, int cpunum\)) 24.08 Tj
-0 -28.8 Td
-(6269 {) 3.612 Tj
-0 -30.1091 Td
-(6270   uint l, h;) 10.234 Tj
-0 -31.4182 Td
-(6271   struct ioapic *io;) 15.05 Tj
-0 -32.7273 Td
-(6272 ) 3.01 Tj
-0 -34.0364 Td
-(6273   if\(!ismp\)) 9.632 Tj
-0 -35.3454 Td
-(6274     return;) 9.632 Tj
-0 -36.6545 Td
-(6275 ) 3.01 Tj
-0 -37.9636 Td
-(6276   io = \(struct ioapic*\) IO_APIC_BASE;) 25.284 Tj
-0 -39.2727 Td
-(6277   l = ioapic_read\(io, IOAPIC_REDTBL_LO\(irq\)\);) 30.1 Tj
-0 -40.5818 Td
-(6278   l = l & ~IOART_INTMASK;  // allow INTs) 27.09 Tj
-0 -41.8909 Td
-(6279   ioapic_write\(io, IOAPIC_REDTBL_LO\(irq\), l\);) 30.1 Tj
-0 -43.2 Td
-(6280   h = ioapic_read\(io, IOAPIC_REDTBL_HI\(irq\)\);) 30.1 Tj
-0 -44.5091 Td
-(6281   h &= ~IOART_DEST;) 14.448 Tj
-0 -45.8182 Td
-(6282   h |= \(cpunum << APIC_ID_SHIFT\);) 22.876 Tj
-0 -47.1272 Td
-(6283   ioapic_write\(io, IOAPIC_REDTBL_HI\(irq\), h\);) 30.1 Tj
-0 -48.4363 Td
-(6284 }) 3.612 Tj
-0 -49.7454 Td
-(6285 ) 3.01 Tj
-0 -51.0545 Td
-(6286 ) 3.01 Tj
-0 -52.3636 Td
-(6287 ) 3.01 Tj
-0 -53.6727 Td
-(6288 ) 3.01 Tj
-0 -54.9818 Td
-(6289 ) 3.01 Tj
-0 -56.2909 Td
-(6290 ) 3.01 Tj
-0 -57.6 Td
-(6291 ) 3.01 Tj
-0 -58.9091 Td
-(6292 ) 3.01 Tj
-0 -60.2181 Td
-(6293 ) 3.01 Tj
-0 -61.5272 Td
-(6294 ) 3.01 Tj
-0 -62.8363 Td
-(6295 ) 3.01 Tj
-0 -64.1454 Td
-(6296 ) 3.01 Tj
-0 -65.4545 Td
-(6297 ) 3.01 Tj
-0 -66.7636 Td
-(6298 ) 3.01 Tj
-0 -68.0727 Td
-(6299 ) 3.01 Tj
-0 -72 Td
-(Sheet 62) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/console.c  Page 2) 174.741 Tj
+0 -28.4801 Td
+(6250 static void) 69.8962 Tj
+0 -37.9735 Td
+(6251 cga_putc\(int c\)) 87.3703 Tj
+0 -47.4668 Td
+(6252 {) 26.2111 Tj
+0 -56.9602 Td
+(6253   int pos;) 65.5277 Tj
+0 -66.4535 Td
+(6254 ) 21.8426 Tj
+0 -75.9469 Td
+(6255   // Cursor position: col + 80*row.) 174.741 Tj
+0 -85.4403 Td
+(6256   outb\(CRTPORT, 14\);) 109.213 Tj
+0 -94.9336 Td
+(6257   pos = inb\(CRTPORT+1\) << 8;) 144.161 Tj
+0 -104.427 Td
+(6258   outb\(CRTPORT, 15\);) 109.213 Tj
+0 -113.92 Td
+(6259   pos |= inb\(CRTPORT+1\);) 126.687 Tj
+0 -123.414 Td
+(6260 ) 21.8426 Tj
+0 -132.907 Td
+(6261   if\(c == '\\n'\)) 87.3703 Tj
+0 -142.4 Td
+(6262     pos += 80 - pos%80;) 122.318 Tj
+0 -151.894 Td
+(6263   else if\(c == BACKSPACE\){) 135.424 Tj
+0 -161.387 Td
+(6264     if\(pos > 0\)) 87.3703 Tj
+0 -170.88 Td
+(6265       crt[--pos] = ' ' | 0x0700;) 161.635 Tj
+0 -180.374 Td
+(6266   } else) 56.7907 Tj
+0 -189.867 Td
+(6267     crt[pos++] = \(c&0xff\) | 0x0700;  // black on white) 257.742 Tj
+0 -199.361 Td
+(6268 ) 21.8426 Tj
+0 -208.854 Td
+(6269   if\(\(pos/80\) >= 24\){  // Scroll up.) 179.109 Tj
+0 -218.347 Td
+(6270     memmove\(crt, crt+80, sizeof\(crt[0]\)*23*80\);) 227.163 Tj
+0 -227.841 Td
+(6271     pos -= 80;) 83.0018 Tj
+0 -237.334 Td
+(6272     memset\(crt+pos, 0, sizeof\(crt[0]\)*\(24*80 - pos\)\)\
+;) 253.374 Tj
+0 -246.827 Td
+(6273   }) 34.9481 Tj
+0 -256.321 Td
+(6274 ) 21.8426 Tj
+0 -265.814 Td
+(6275   outb\(CRTPORT, 14\);) 109.213 Tj
+0 -275.307 Td
+(6276   outb\(CRTPORT+1, pos>>8\);) 135.424 Tj
+0 -284.801 Td
+(6277   outb\(CRTPORT, 15\);) 109.213 Tj
+0 -294.294 Td
+(6278   outb\(CRTPORT+1, pos\);) 122.318 Tj
+0 -303.788 Td
+(6279   crt[pos] = ' ' | 0x0700;) 135.424 Tj
+0 -313.281 Td
+(6280 }) 26.2111 Tj
+0 -322.774 Td
+(6281 ) 21.8426 Tj
+0 -332.268 Td
+(6282 static void) 69.8962 Tj
+0 -341.761 Td
+(6283 cons_putc\(int c\)) 91.7388 Tj
+0 -351.254 Td
+(6284 {) 26.2111 Tj
+0 -360.748 Td
+(6285   if\(panicked\){) 87.3703 Tj
+0 -370.241 Td
+(6286     cli\(\);) 65.5277 Tj
+0 -379.734 Td
+(6287     for\(;;\)) 69.8962 Tj
+0 -389.228 Td
+(6288       ;) 52.4222 Tj
+0 -398.721 Td
+(6289   }) 34.9481 Tj
+0 -408.214 Td
+(6290 ) 21.8426 Tj
+0 -417.708 Td
+(6291   lpt_putc\(c\);) 83.0018 Tj
+0 -427.201 Td
+(6292   cga_putc\(c\);) 83.0018 Tj
+0 -436.695 Td
+(6293 }) 26.2111 Tj
+0 -446.188 Td
+(6294 ) 21.8426 Tj
+0 -455.681 Td
+(6295 ) 21.8426 Tj
+0 -465.175 Td
+(6296 ) 21.8426 Tj
+0 -474.668 Td
+(6297 ) 21.8426 Tj
+0 -484.161 Td
+(6298 ) 21.8426 Tj
+0 -493.655 Td
+(6299 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 62) 34.9481 Tj
 Q
 Q
 Q
@@ -19396,7 +20768,10 @@ pdfEndPage
 %%Page: 70 70
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -19404,241 +20779,253 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/picirq.c  Page 1) 23.478 Tj
-0 -3.92728 Td
-(6300 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(6301 #include "x86.h") 12.642 Tj
-0 -6.54546 Td
-(6302 #include "traps.h") 13.846 Tj
-0 -7.85455 Td
-(6303 #include "defs.h") 13.244 Tj
-0 -9.16364 Td
-(6304 ) 3.01 Tj
-0 -10.4727 Td
-(6305 // I/O Addresses of the two 8259A programmable interrupt controllers) 43.946 Tj
-0 -11.7818 Td
-(6306 #define IO_PIC1         0x20    // Master \(IRQs 0-7\)) 34.314 Tj
-0 -13.0909 Td
-(6307 #define IO_PIC2         0xA0    // Slave \(IRQs 8-15\)) 34.314 Tj
-0 -14.4 Td
-(6308 ) 3.01 Tj
-0 -15.7091 Td
-(6309 #define IRQ_SLAVE       2       // IRQ at which slave connects to master) 46.354 Tj
-0 -17.0182 Td
-(6310 ) 3.01 Tj
-0 -18.3273 Td
-(6311 // Current IRQ mask.) 15.05 Tj
-0 -19.6364 Td
-(6312 // Initial IRQ mask has interrupt 2 enabled \(for slave 8259A\).) 40.334 Tj
-0 -20.9455 Td
-(6313 static ushort irq_mask_8259A = 0xFFFF & ~\(1<<IRQ_SLAVE\);) 36.722 Tj
-0 -22.2545 Td
-(6314 ) 3.01 Tj
-0 -23.5636 Td
-(6315 static void) 9.632 Tj
-0 -24.8727 Td
-(6316 irq_setmask_8259A\(ushort mask\)) 21.07 Tj
-0 -26.1818 Td
-(6317 {) 3.612 Tj
-0 -27.4909 Td
-(6318   irq_mask_8259A = mask;) 17.458 Tj
-0 -28.8 Td
-(6319 ) 3.01 Tj
-0 -30.1091 Td
-(6320   outb\(IO_PIC1+1, \(char\)mask\);) 21.07 Tj
-0 -31.4182 Td
-(6321   outb\(IO_PIC2+1, \(char\)\(mask >> 8\)\);) 25.284 Tj
-0 -32.7273 Td
-(6322 }) 3.612 Tj
-0 -34.0364 Td
-(6323 ) 3.01 Tj
-0 -35.3454 Td
-(6324 void) 5.418 Tj
-0 -36.6545 Td
-(6325 irq_enable\(int irq\)) 14.448 Tj
-0 -37.9636 Td
-(6326 {) 3.612 Tj
-0 -39.2727 Td
-(6327   irq_setmask_8259A\(irq_mask_8259A & ~\(1<<irq\)\);) 31.906 Tj
-0 -40.5818 Td
-(6328 }) 3.612 Tj
-0 -41.8909 Td
-(6329 ) 3.01 Tj
-0 -43.2 Td
-(6330 // Initialize the 8259A interrupt controllers.) 30.702 Tj
-0 -44.5091 Td
-(6331 void) 5.418 Tj
-0 -45.8182 Td
-(6332 pic_init\(void\)) 11.438 Tj
-0 -47.1272 Td
-(6333 {) 3.612 Tj
-0 -48.4363 Td
-(6334   // mask all interrupts) 17.458 Tj
-0 -49.7454 Td
-(6335   outb\(IO_PIC1+1, 0xFF\);) 17.458 Tj
-0 -51.0545 Td
-(6336   outb\(IO_PIC2+1, 0xFF\);) 17.458 Tj
-0 -52.3636 Td
-(6337 ) 3.01 Tj
-0 -53.6727 Td
-(6338   // Set up master \(8259A-1\)) 19.866 Tj
-0 -54.9818 Td
-(6339 ) 3.01 Tj
-0 -56.2909 Td
-(6340   // ICW1:  0001g0hi) 15.05 Tj
-0 -57.6 Td
-(6341   //    g:  0 = edge triggering, 1 = level triggering) 34.916 Tj
-0 -58.9091 Td
-(6342   //    h:  0 = cascaded PICs, 1 = master only) 30.702 Tj
-0 -60.2181 Td
-(6343   //    i:  0 = no ICW4, 1 = ICW4 required) 28.294 Tj
-0 -61.5272 Td
-(6344   outb\(IO_PIC1, 0x11\);) 16.254 Tj
-0 -62.8363 Td
-(6345 ) 3.01 Tj
-0 -64.1454 Td
-(6346   // ICW2:  Vector offset) 18.06 Tj
-0 -65.4545 Td
-(6347   outb\(IO_PIC1+1, IRQ_OFFSET\);) 21.07 Tj
-0 -66.7636 Td
-(6348 ) 3.01 Tj
-0 -68.0727 Td
-(6349 ) 3.01 Tj
-0 -72 Td
-(Sheet 63) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/console.c  Page 3) 174.741 Tj
+0 -28.4801 Td
+(6300 void) 39.3166 Tj
+0 -37.9735 Td
+(6301 printint\(int xx, int base, int sgn\)) 174.741 Tj
+0 -47.4668 Td
+(6302 {) 26.2111 Tj
+0 -56.9602 Td
+(6303   static char digits[] = "0123456789ABCDEF";) 214.057 Tj
+0 -66.4535 Td
+(6304   char buf[16];) 87.3703 Tj
+0 -75.9469 Td
+(6305   int i = 0, neg = 0;) 113.581 Tj
+0 -85.4403 Td
+(6306   uint x;) 61.1592 Tj
+0 -94.9336 Td
+(6307 ) 21.8426 Tj
+0 -104.427 Td
+(6308   if\(sgn && xx < 0\){) 109.213 Tj
+0 -113.92 Td
+(6309     neg = 1;) 74.2647 Tj
+0 -123.414 Td
+(6310     x = 0 - xx;) 87.3703 Tj
+0 -132.907 Td
+(6311   } else {) 65.5277 Tj
+0 -142.4 Td
+(6312     x = xx;) 69.8962 Tj
+0 -151.894 Td
+(6313   }) 34.9481 Tj
+0 -161.387 Td
+(6314 ) 21.8426 Tj
+0 -170.88 Td
+(6315   do{) 43.6851 Tj
+0 -180.374 Td
+(6316     buf[i++] = digits[x % base];) 161.635 Tj
+0 -189.867 Td
+(6317   }while\(\(x /= base\) != 0\);) 139.792 Tj
+0 -199.361 Td
+(6318   if\(neg\)) 61.1592 Tj
+0 -208.854 Td
+(6319     buf[i++] = '-';) 104.844 Tj
+0 -218.347 Td
+(6320 ) 21.8426 Tj
+0 -227.841 Td
+(6321   while\(--i >= 0\)) 96.1073 Tj
+0 -237.334 Td
+(6322     cons_putc\(buf[i]\);) 117.95 Tj
+0 -246.827 Td
+(6323 }) 26.2111 Tj
+0 -256.321 Td
+(6324 ) 21.8426 Tj
+0 -265.814 Td
+(6325 // Print to the console. only understands %d, %x, %p, %s.) 270.848 Tj
+0 -275.307 Td
+(6326 void) 39.3166 Tj
+0 -284.801 Td
+(6327 cprintf\(char *fmt, ...\)) 122.318 Tj
+0 -294.294 Td
+(6328 {) 26.2111 Tj
+0 -303.788 Td
+(6329   int i, c, state, locking;) 139.792 Tj
+0 -313.281 Td
+(6330   uint *argp;) 78.6333 Tj
+0 -322.774 Td
+(6331   char *s;) 65.5277 Tj
+0 -332.268 Td
+(6332 ) 21.8426 Tj
+0 -341.761 Td
+(6333   locking = use_console_lock;) 148.529 Tj
+0 -351.254 Td
+(6334   if\(locking\)) 78.6333 Tj
+0 -360.748 Td
+(6335     acquire\(&console_lock\);) 139.792 Tj
+0 -370.241 Td
+(6336 ) 21.8426 Tj
+0 -379.734 Td
+(6337   argp = \(uint*\)\(void*\)&fmt + 1;) 161.635 Tj
+0 -389.228 Td
+(6338   state = 0;) 74.2647 Tj
+0 -398.721 Td
+(6339   for\(i = 0; fmt[i]; i++\){) 135.424 Tj
+0 -408.214 Td
+(6340     c = fmt[i] & 0xff;) 117.95 Tj
+0 -417.708 Td
+(6341     switch\(state\){) 100.476 Tj
+0 -427.201 Td
+(6342     case 0:) 69.8962 Tj
+0 -436.695 Td
+(6343       if\(c == '%'\)) 100.476 Tj
+0 -446.188 Td
+(6344         state = '%';) 109.213 Tj
+0 -455.681 Td
+(6345       else) 65.5277 Tj
+0 -465.175 Td
+(6346         cons_putc\(c\);) 113.581 Tj
+0 -474.668 Td
+(6347       break;) 74.2647 Tj
+0 -484.161 Td
+(6348 ) 21.8426 Tj
+0 -493.655 Td
+(6349 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/picirq.c  Page 2) 23.478 Tj
-0 -3.92728 Td
-(6350   // ICW3:  \(master PIC\) bit mask of IR lines connected to slaves) 42.14 Tj
-0 -5.23637 Td
-(6351   //        \(slave PIC\) 3-bit # of slave's connection to master) 40.936 Tj
-0 -6.54546 Td
-(6352   outb\(IO_PIC1+1, 1<<IRQ_SLAVE\);) 22.274 Tj
-0 -7.85455 Td
-(6353 ) 3.01 Tj
-0 -9.16364 Td
-(6354   // ICW4:  000nbmap) 15.05 Tj
-0 -10.4727 Td
-(6355   //    n:  1 = special fully nested mode) 27.692 Tj
-0 -11.7818 Td
-(6356   //    b:  1 = buffered mode) 20.468 Tj
-0 -13.0909 Td
-(6357   //    m:  0 = slave PIC, 1 = master PIC) 27.692 Tj
-0 -14.4 Td
-(6358   //      \(ignored when b is 0, as the master/slave role) 36.722 Tj
-0 -15.7091 Td
-(6359   //      can be hardwired\).) 19.866 Tj
-0 -17.0182 Td
-(6360   //    a:  1 = Automatic EOI mode) 23.478 Tj
-0 -18.3273 Td
-(6361   //    p:  0 = MCS-80/85 mode, 1 = intel x86 mode) 33.11 Tj
-0 -19.6364 Td
-(6362   outb\(IO_PIC1+1, 0x3\);) 16.856 Tj
-0 -20.9455 Td
-(6363 ) 3.01 Tj
-0 -22.2545 Td
-(6364   // Set up slave \(8259A-2\)) 19.264 Tj
-0 -23.5636 Td
-(6365   outb\(IO_PIC2, 0x11\);                  // ICW1) 31.304 Tj
-0 -24.8727 Td
-(6366   outb\(IO_PIC2+1, IRQ_OFFSET + 8\);      // ICW2) 31.304 Tj
-0 -26.1818 Td
-(6367   outb\(IO_PIC2+1, IRQ_SLAVE\);           // ICW3) 31.304 Tj
-0 -27.4909 Td
-(6368   // NB Automatic EOI mode doesn't tend to work on the slave.) 39.732 Tj
-0 -28.8 Td
-(6369   // Linux source code says it's "to be investigated".) 35.518 Tj
-0 -30.1091 Td
-(6370   outb\(IO_PIC2+1, 0x3\);                 // ICW4) 31.304 Tj
-0 -31.4182 Td
-(6371 ) 3.01 Tj
-0 -32.7273 Td
-(6372   // OCW3:  0ef01prs) 15.05 Tj
-0 -34.0364 Td
-(6373   //   ef:  0x = NOP, 10 = clear specific mask, 11 = set specific mask) 45.15 Tj
-0 -35.3454 Td
-(6374   //    p:  0 = no polling, 1 = polling mode) 29.498 Tj
-0 -36.6545 Td
-(6375   //   rs:  0x = NOP, 10 = read IRR, 11 = read ISR) 33.11 Tj
-0 -37.9636 Td
-(6376   outb\(IO_PIC1, 0x68\);             // clear specific mask) 37.324 Tj
-0 -39.2727 Td
-(6377   outb\(IO_PIC1, 0x0a\);             // read IRR by default) 37.324 Tj
-0 -40.5818 Td
-(6378 ) 3.01 Tj
-0 -41.8909 Td
-(6379   outb\(IO_PIC2, 0x68\);             // OCW3) 28.294 Tj
-0 -43.2 Td
-(6380   outb\(IO_PIC2, 0x0a\);             // OCW3) 28.294 Tj
-0 -44.5091 Td
-(6381 ) 3.01 Tj
-0 -45.8182 Td
-(6382   if\(irq_mask_8259A != 0xFFFF\)) 21.07 Tj
-0 -47.1272 Td
-(6383     irq_setmask_8259A\(irq_mask_8259A\);) 25.886 Tj
-0 -48.4363 Td
-(6384 }) 3.612 Tj
-0 -49.7454 Td
-(6385 ) 3.01 Tj
-0 -51.0545 Td
-(6386 ) 3.01 Tj
-0 -52.3636 Td
-(6387 ) 3.01 Tj
-0 -53.6727 Td
-(6388 ) 3.01 Tj
-0 -54.9818 Td
-(6389 ) 3.01 Tj
-0 -56.2909 Td
-(6390 ) 3.01 Tj
-0 -57.6 Td
-(6391 ) 3.01 Tj
-0 -58.9091 Td
-(6392 ) 3.01 Tj
-0 -60.2181 Td
-(6393 ) 3.01 Tj
-0 -61.5272 Td
-(6394 ) 3.01 Tj
-0 -62.8363 Td
-(6395 ) 3.01 Tj
-0 -64.1454 Td
-(6396 ) 3.01 Tj
-0 -65.4545 Td
-(6397 ) 3.01 Tj
-0 -66.7636 Td
-(6398 ) 3.01 Tj
-0 -68.0727 Td
-(6399 ) 3.01 Tj
-0 -72 Td
-(Sheet 63) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/console.c  Page 4) 174.741 Tj
+0 -28.4801 Td
+(6350     case '%':) 78.6333 Tj
+0 -37.9735 Td
+(6351       switch\(c\){) 91.7388 Tj
+0 -47.4668 Td
+(6352       case 'd':) 87.3703 Tj
+0 -56.9602 Td
+(6353         printint\(*argp++, 10, 1\);) 166.004 Tj
+0 -66.4535 Td
+(6354         break;) 83.0018 Tj
+0 -75.9469 Td
+(6355       case 'x':) 87.3703 Tj
+0 -85.4403 Td
+(6356       case 'p':) 87.3703 Tj
+0 -94.9336 Td
+(6357         printint\(*argp++, 16, 0\);) 166.004 Tj
+0 -104.427 Td
+(6358         break;) 83.0018 Tj
+0 -113.92 Td
+(6359       case 's':) 87.3703 Tj
+0 -123.414 Td
+(6360         s = \(char*\)*argp++;) 139.792 Tj
+0 -132.907 Td
+(6361         if\(s == 0\)) 100.476 Tj
+0 -142.4 Td
+(6362           s = "\(null\)";) 122.318 Tj
+0 -151.894 Td
+(6363         for\(; *s; s++\)) 117.95 Tj
+0 -161.387 Td
+(6364           cons_putc\(*s\);) 126.687 Tj
+0 -170.88 Td
+(6365         break;) 83.0018 Tj
+0 -180.374 Td
+(6366       case '%':) 87.3703 Tj
+0 -189.867 Td
+(6367         cons_putc\('%'\);) 122.318 Tj
+0 -199.361 Td
+(6368         break;) 83.0018 Tj
+0 -208.854 Td
+(6369       default:) 83.0018 Tj
+0 -218.347 Td
+(6370         // Print unknown % sequence to draw attention.) 257.742 Tj
+0 -227.841 Td
+(6371         cons_putc\('%'\);) 122.318 Tj
+0 -237.334 Td
+(6372         cons_putc\(c\);) 113.581 Tj
+0 -246.827 Td
+(6373         break;) 83.0018 Tj
+0 -256.321 Td
+(6374       }) 52.4222 Tj
+0 -265.814 Td
+(6375       state = 0;) 91.7388 Tj
+0 -275.307 Td
+(6376       break;) 74.2647 Tj
+0 -284.801 Td
+(6377     }) 43.6851 Tj
+0 -294.294 Td
+(6378   }) 34.9481 Tj
+0 -303.788 Td
+(6379 ) 21.8426 Tj
+0 -313.281 Td
+(6380   if\(locking\)) 78.6333 Tj
+0 -322.774 Td
+(6381     release\(&console_lock\);) 139.792 Tj
+0 -332.268 Td
+(6382 }) 26.2111 Tj
+0 -341.761 Td
+(6383 ) 21.8426 Tj
+0 -351.254 Td
+(6384 int) 34.9481 Tj
+0 -360.748 Td
+(6385 console_write\(struct inode *ip, char *buf, int n\)) 235.9 Tj
+0 -370.241 Td
+(6386 {) 26.2111 Tj
+0 -379.734 Td
+(6387   int i;) 56.7907 Tj
+0 -389.228 Td
+(6388 ) 21.8426 Tj
+0 -398.721 Td
+(6389   iunlock\(ip\);) 83.0018 Tj
+0 -408.214 Td
+(6390   acquire\(&console_lock\);) 131.055 Tj
+0 -417.708 Td
+(6391   for\(i = 0; i < n; i++\)) 126.687 Tj
+0 -427.201 Td
+(6392     cons_putc\(buf[i] & 0xff\);) 148.529 Tj
+0 -436.695 Td
+(6393   release\(&console_lock\);) 131.055 Tj
+0 -446.188 Td
+(6394   ilock\(ip\);) 74.2647 Tj
+0 -455.681 Td
+(6395 ) 21.8426 Tj
+0 -465.175 Td
+(6396   return n;) 69.8962 Tj
+0 -474.668 Td
+(6397 }) 26.2111 Tj
+0 -484.161 Td
+(6398 ) 21.8426 Tj
+0 -493.655 Td
+(6399 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 63) 34.9481 Tj
 Q
 Q
 Q
@@ -19650,6 +21037,9 @@ pdfEndPage
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -19657,241 +21047,255 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
 q
-Q
-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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/console.c  Page 1) 24.08 Tj
-0 -3.92728 Td
-(6400 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(6401 #include "x86.h") 12.642 Tj
-0 -6.54546 Td
-(6402 #include "traps.h") 13.846 Tj
-0 -7.85455 Td
-(6403 #include "defs.h") 13.244 Tj
-0 -9.16364 Td
-(6404 #include "spinlock.h") 15.652 Tj
-0 -10.4727 Td
-(6405 #include "dev.h") 12.642 Tj
-0 -11.7818 Td
-(6406 #include "param.h") 13.846 Tj
-0 -13.0909 Td
-(6407 #include "mmu.h") 12.642 Tj
-0 -14.4 Td
-(6408 ) 3.01 Tj
-0 -15.7091 Td
-(6409 struct spinlock console_lock;) 20.468 Tj
-0 -17.0182 Td
-(6410 int panicked = 0;) 13.244 Tj
-0 -18.3273 Td
-(6411 int use_console_lock = 0;) 18.06 Tj
-0 -19.6364 Td
-(6412 ) 3.01 Tj
-0 -20.9455 Td
-(6413 // Copy console output to parallel port, which you can tell) 38.528 Tj
-0 -22.2545 Td
-(6414 // .bochsrc to copy to the stdout:) 23.478 Tj
-0 -23.5636 Td
-(6415 //   parport1: enabled=1, file="/dev/stdout") 29.498 Tj
-0 -24.8727 Td
-(6416 static void) 9.632 Tj
-0 -26.1818 Td
-(6417 lpt_putc\(int c\)) 12.04 Tj
-0 -27.4909 Td
-(6418 {) 3.612 Tj
-0 -28.8 Td
-(6419   int i;) 7.826 Tj
-0 -30.1091 Td
-(6420 ) 3.01 Tj
-0 -31.4182 Td
-(6421   for\(i = 0; !\(inb\(0x378+1\) & 0x80\) && i < 12800; i++\)) 35.518 Tj
-0 -32.7273 Td
-(6422     ;) 6.02 Tj
-0 -34.0364 Td
-(6423   outb\(0x378+0, c\);) 14.448 Tj
-0 -35.3454 Td
-(6424   outb\(0x378+2, 0x08|0x04|0x01\);) 22.274 Tj
-0 -36.6545 Td
-(6425   outb\(0x378+2, 0x08\);) 16.254 Tj
-0 -37.9636 Td
-(6426 }) 3.612 Tj
-0 -39.2727 Td
-(6427 ) 3.01 Tj
-0 -40.5818 Td
-(6428 static void) 9.632 Tj
-0 -41.8909 Td
-(6429 cons_putc\(int c\)) 12.642 Tj
-0 -43.2 Td
-(6430 {) 3.612 Tj
-0 -44.5091 Td
-(6431   int crtport = 0x3d4; // io port of CGA) 27.09 Tj
-0 -45.8182 Td
-(6432   ushort *crt = \(ushort*\) 0xB8000; // base of CGA memory) 36.722 Tj
-0 -47.1272 Td
-(6433   int ind;) 9.03 Tj
-0 -48.4363 Td
-(6434 ) 3.01 Tj
-0 -49.7454 Td
-(6435   if\(panicked\){) 12.04 Tj
-0 -51.0545 Td
-(6436     cli\(\);) 9.03 Tj
-0 -52.3636 Td
-(6437     for\(;;\)) 9.632 Tj
-0 -53.6727 Td
-(6438       ;) 7.224 Tj
-0 -54.9818 Td
-(6439   }) 4.816 Tj
-0 -56.2909 Td
-(6440 ) 3.01 Tj
-0 -57.6 Td
-(6441   lpt_putc\(c\);) 11.438 Tj
-0 -58.9091 Td
-(6442 ) 3.01 Tj
-0 -60.2181 Td
-(6443   // cursor position, 16 bits, col + 80*row) 28.896 Tj
-0 -61.5272 Td
-(6444   outb\(crtport, 14\);) 15.05 Tj
-0 -62.8363 Td
-(6445   ind = inb\(crtport + 1\) << 8;) 21.07 Tj
-0 -64.1454 Td
-(6446   outb\(crtport, 15\);) 15.05 Tj
-0 -65.4545 Td
-(6447   ind |= inb\(crtport + 1\);) 18.662 Tj
-0 -66.7636 Td
-(6448 ) 3.01 Tj
-0 -68.0727 Td
-(6449   c &= 0xff;) 10.234 Tj
-0 -72 Td
-(Sheet 64) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/console.c  Page 5) 174.741 Tj
+0 -28.4801 Td
+(6400 #define INPUT_BUF 128) 113.581 Tj
+0 -37.9735 Td
+(6401 struct {) 56.7907 Tj
+0 -47.4668 Td
+(6402   struct spinlock lock;) 122.318 Tj
+0 -56.9602 Td
+(6403   char buf[INPUT_BUF];) 117.95 Tj
+0 -66.4535 Td
+(6404   int r;  // Read index) 122.318 Tj
+0 -75.9469 Td
+(6405   int w;  // Write index) 126.687 Tj
+0 -85.4403 Td
+(6406   int e;  // Edit index) 122.318 Tj
+0 -94.9336 Td
+(6407 } input;) 56.7907 Tj
+0 -104.427 Td
+(6408 ) 21.8426 Tj
+0 -113.92 Td
+(6409 #define C\(x\)  \(\(x\)-'@'\)  // Control-x) 183.478 Tj
+0 -123.414 Td
+(6410 ) 21.8426 Tj
+0 -132.907 Td
+(6411 void) 39.3166 Tj
+0 -142.4 Td
+(6412 console_intr\(int \(*getc\)\(void\)\)) 157.267 Tj
+0 -151.894 Td
+(6413 {) 26.2111 Tj
+0 -161.387 Td
+(6414   int c;) 56.7907 Tj
+0 -170.88 Td
+(6415 ) 21.8426 Tj
+0 -180.374 Td
+(6416   acquire\(&input.lock\);) 122.318 Tj
+0 -189.867 Td
+(6417   while\(\(c = getc\(\)\) >= 0\){) 139.792 Tj
+0 -199.361 Td
+(6418     switch\(c\){) 83.0018 Tj
+0 -208.854 Td
+(6419     case C\('P'\):  // Process listing.) 183.478 Tj
+0 -218.347 Td
+(6420       procdump\(\);) 96.1073 Tj
+0 -227.841 Td
+(6421       break;) 74.2647 Tj
+0 -237.334 Td
+(6422     case C\('U'\):  // Kill line.) 157.267 Tj
+0 -246.827 Td
+(6423       while\(input.e > input.w &&) 161.635 Tj
+0 -256.321 Td
+(6424             input.buf[\(input.e-1\) % INPUT_BUF] != '\\n'\)\
+{) 266.479 Tj
+0 -265.814 Td
+(6425         input.e--;) 100.476 Tj
+0 -275.307 Td
+(6426         cons_putc\(BACKSPACE\);) 148.529 Tj
+0 -284.801 Td
+(6427       }) 52.4222 Tj
+0 -294.294 Td
+(6428       break;) 74.2647 Tj
+0 -303.788 Td
+(6429     case C\('H'\):  // Backspace) 152.898 Tj
+0 -313.281 Td
+(6430       if\(input.e > input.w\){) 144.161 Tj
+0 -322.774 Td
+(6431         input.e--;) 100.476 Tj
+0 -332.268 Td
+(6432         cons_putc\(BACKSPACE\);) 148.529 Tj
+0 -341.761 Td
+(6433       }) 52.4222 Tj
+0 -351.254 Td
+(6434       break;) 74.2647 Tj
+0 -360.748 Td
+(6435     default:) 74.2647 Tj
+0 -370.241 Td
+(6436       if\(c != 0 && input.e < input.r+INPUT_BUF\){) 231.531 Tj
+0 -379.734 Td
+(6437         input.buf[input.e++] = c;) 166.004 Tj
+0 -389.228 Td
+(6438         cons_putc\(c\);) 113.581 Tj
+0 -398.721 Td
+(6439         if\(c == '\\n' || c == C\('D'\) || input.e == inpu\
+t.r+INPUT_BUF\){) 323.27 Tj
+0 -408.214 Td
+(6440           input.w = input.e;) 144.161 Tj
+0 -417.708 Td
+(6441           wakeup\(&input.r\);) 139.792 Tj
+0 -427.201 Td
+(6442         }) 61.1592 Tj
+0 -436.695 Td
+(6443       }) 52.4222 Tj
+0 -446.188 Td
+(6444       break;) 74.2647 Tj
+0 -455.681 Td
+(6445     }) 43.6851 Tj
+0 -465.175 Td
+(6446   }) 34.9481 Tj
+0 -474.668 Td
+(6447   release\(&input.lock\);) 122.318 Tj
+0 -484.161 Td
+(6448 }) 26.2111 Tj
+0 -493.655 Td
+(6449 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/console.c  Page 2) 24.08 Tj
-0 -3.92728 Td
-(6450   if\(c == '\\n'\){) 12.642 Tj
-0 -5.23637 Td
-(6451     ind -= \(ind % 80\);) 16.254 Tj
-0 -6.54546 Td
-(6452     ind += 80;) 11.438 Tj
-0 -7.85455 Td
-(6453   } else {) 9.03 Tj
-0 -9.16364 Td
-(6454     c |= 0x0700; // black on white) 23.478 Tj
-0 -10.4727 Td
-(6455     crt[ind] = c;) 13.244 Tj
-0 -11.7818 Td
-(6456     ind++;) 9.03 Tj
-0 -13.0909 Td
-(6457   }) 4.816 Tj
-0 -14.4 Td
-(6458 ) 3.01 Tj
-0 -15.7091 Td
-(6459   if\(\(ind / 80\) >= 24\){) 16.856 Tj
-0 -17.0182 Td
-(6460     // scroll up) 12.642 Tj
-0 -18.3273 Td
-(6461     memmove\(crt, crt + 80, sizeof\(crt[0]\) * \(23 * 80\)\);) 36.12 Tj
-0 -19.6364 Td
-(6462     ind -= 80;) 11.438 Tj
-0 -20.9455 Td
-(6463     memset\(crt + ind, 0, sizeof\(crt[0]\) * \(\(24 * 80\) - ind\)\);) 39.732 Tj
-0 -22.2545 Td
-(6464   }) 4.816 Tj
-0 -23.5636 Td
-(6465 ) 3.01 Tj
-0 -24.8727 Td
-(6466   outb\(crtport, 14\);) 15.05 Tj
-0 -26.1818 Td
-(6467   outb\(crtport + 1, ind >> 8\);) 21.07 Tj
-0 -27.4909 Td
-(6468   outb\(crtport, 15\);) 15.05 Tj
-0 -28.8 Td
-(6469   outb\(crtport + 1, ind\);) 18.06 Tj
-0 -30.1091 Td
-(6470 }) 3.612 Tj
-0 -31.4182 Td
-(6471 ) 3.01 Tj
-0 -32.7273 Td
-(6472 void) 5.418 Tj
-0 -34.0364 Td
-(6473 printint\(int xx, int base, int sgn\)) 24.08 Tj
-0 -35.3454 Td
-(6474 {) 3.612 Tj
-0 -36.6545 Td
-(6475   char buf[16];) 12.04 Tj
-0 -37.9636 Td
-(6476   char digits[] = "0123456789ABCDEF";) 25.284 Tj
-0 -39.2727 Td
-(6477   int i = 0, neg = 0;) 15.652 Tj
-0 -40.5818 Td
-(6478   uint x;) 8.428 Tj
-0 -41.8909 Td
-(6479 ) 3.01 Tj
-0 -43.2 Td
-(6480   if\(sgn && xx < 0\){) 15.05 Tj
-0 -44.5091 Td
-(6481     neg = 1;) 10.234 Tj
-0 -45.8182 Td
-(6482     x = 0 - xx;) 12.04 Tj
-0 -47.1272 Td
-(6483   } else {) 9.03 Tj
-0 -48.4363 Td
-(6484     x = xx;) 9.632 Tj
-0 -49.7454 Td
-(6485   }) 4.816 Tj
-0 -51.0545 Td
-(6486 ) 3.01 Tj
-0 -52.3636 Td
-(6487   do {) 6.622 Tj
-0 -53.6727 Td
-(6488     buf[i++] = digits[x % base];) 22.274 Tj
-0 -54.9818 Td
-(6489   } while\(\(x /= base\) != 0\);) 19.866 Tj
-0 -56.2909 Td
-(6490   if\(neg\)) 8.428 Tj
-0 -57.6 Td
-(6491     buf[i++] = '-';) 14.448 Tj
-0 -58.9091 Td
-(6492 ) 3.01 Tj
-0 -60.2181 Td
-(6493   while\(--i >= 0\)) 13.244 Tj
-0 -61.5272 Td
-(6494     cons_putc\(buf[i]\);) 16.254 Tj
-0 -62.8363 Td
-(6495 }) 3.612 Tj
-0 -64.1454 Td
-(6496 ) 3.01 Tj
-0 -65.4545 Td
-(6497 ) 3.01 Tj
-0 -66.7636 Td
-(6498 ) 3.01 Tj
-0 -68.0727 Td
-(6499 ) 3.01 Tj
-0 -72 Td
-(Sheet 64) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/console.c  Page 6) 174.741 Tj
+0 -28.4801 Td
+(6450 int) 34.9481 Tj
+0 -37.9735 Td
+(6451 console_read\(struct inode *ip, char *dst, int n\)) 231.531 Tj
+0 -47.4668 Td
+(6452 {) 26.2111 Tj
+0 -56.9602 Td
+(6453   uint target;) 83.0018 Tj
+0 -66.4535 Td
+(6454   int c;) 56.7907 Tj
+0 -75.9469 Td
+(6455 ) 21.8426 Tj
+0 -85.4403 Td
+(6456   iunlock\(ip\);) 83.0018 Tj
+0 -94.9336 Td
+(6457   target = n;) 78.6333 Tj
+0 -104.427 Td
+(6458   acquire\(&input.lock\);) 122.318 Tj
+0 -113.92 Td
+(6459   while\(n > 0\){) 87.3703 Tj
+0 -123.414 Td
+(6460     while\(input.r == input.w\){) 152.898 Tj
+0 -132.907 Td
+(6461       if\(cp->killed\){) 113.581 Tj
+0 -142.4 Td
+(6462         release\(&input.lock\);) 148.529 Tj
+0 -151.894 Td
+(6463         ilock\(ip\);) 100.476 Tj
+0 -161.387 Td
+(6464         return -1;) 100.476 Tj
+0 -170.88 Td
+(6465       }) 52.4222 Tj
+0 -180.374 Td
+(6466       sleep\(&input.r, &input.lock\);) 174.741 Tj
+0 -189.867 Td
+(6467     }) 43.6851 Tj
+0 -199.361 Td
+(6468     c = input.buf[input.r++];) 148.529 Tj
+0 -208.854 Td
+(6469     if\(c == C\('D'\)\){  // EOF) 144.161 Tj
+0 -218.347 Td
+(6470       if\(n < target\){) 113.581 Tj
+0 -227.841 Td
+(6471         // Save ^D for next time, to make sure) 222.794 Tj
+0 -237.334 Td
+(6472         // caller gets a 0-byte result.) 192.215 Tj
+0 -246.827 Td
+(6473         input.r--;) 100.476 Tj
+0 -256.321 Td
+(6474       }) 52.4222 Tj
+0 -265.814 Td
+(6475       break;) 74.2647 Tj
+0 -275.307 Td
+(6476     }) 43.6851 Tj
+0 -284.801 Td
+(6477     *dst++ = c;) 87.3703 Tj
+0 -294.294 Td
+(6478     --n;) 56.7907 Tj
+0 -303.788 Td
+(6479     if\(c == '\\n'\)) 96.1073 Tj
+0 -313.281 Td
+(6480       break;) 74.2647 Tj
+0 -322.774 Td
+(6481     if\(input.r >= INPUT_BUF\)) 144.161 Tj
+0 -332.268 Td
+(6482       input.r = 0;) 100.476 Tj
+0 -341.761 Td
+(6483   }) 34.9481 Tj
+0 -351.254 Td
+(6484   release\(&input.lock\);) 122.318 Tj
+0 -360.748 Td
+(6485   ilock\(ip\);) 74.2647 Tj
+0 -370.241 Td
+(6486 ) 21.8426 Tj
+0 -379.734 Td
+(6487   return target - n;) 109.213 Tj
+0 -389.228 Td
+(6488 }) 26.2111 Tj
+0 -398.721 Td
+(6489 ) 21.8426 Tj
+0 -408.214 Td
+(6490 ) 21.8426 Tj
+0 -417.708 Td
+(6491 ) 21.8426 Tj
+0 -427.201 Td
+(6492 ) 21.8426 Tj
+0 -436.695 Td
+(6493 ) 21.8426 Tj
+0 -446.188 Td
+(6494 ) 21.8426 Tj
+0 -455.681 Td
+(6495 ) 21.8426 Tj
+0 -465.175 Td
+(6496 ) 21.8426 Tj
+0 -474.668 Td
+(6497 ) 21.8426 Tj
+0 -484.161 Td
+(6498 ) 21.8426 Tj
+0 -493.655 Td
+(6499 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 64) 34.9481 Tj
 Q
 Q
 Q
@@ -19902,7 +21306,10 @@ pdfEndPage
 %%Page: 72 72
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -19910,241 +21317,525 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+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.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/console.c  Page 7) 174.741 Tj
+0 -28.4801 Td
+(6500 void) 39.3166 Tj
+0 -37.9735 Td
+(6501 console_init\(void\)) 100.476 Tj
+0 -47.4668 Td
+(6502 {) 26.2111 Tj
+0 -56.9602 Td
+(6503   initlock\(&console_lock, "console"\);) 183.478 Tj
+0 -66.4535 Td
+(6504   initlock\(&input.lock, "console input"\);) 200.952 Tj
+0 -75.9469 Td
+(6505 ) 21.8426 Tj
+0 -85.4403 Td
+(6506   devsw[CONSOLE].write = console_write;) 192.215 Tj
+0 -94.9336 Td
+(6507   devsw[CONSOLE].read = console_read;) 183.478 Tj
+0 -104.427 Td
+(6508   //use_console_lock = 1;) 131.055 Tj
+0 -113.92 Td
+(6509 ) 21.8426 Tj
+0 -123.414 Td
+(6510   pic_enable\(IRQ_KBD\);) 117.95 Tj
+0 -132.907 Td
+(6511   ioapic_enable\(IRQ_KBD, 0\);) 144.161 Tj
+0 -142.4 Td
+(6512 }) 26.2111 Tj
+0 -151.894 Td
+(6513 ) 21.8426 Tj
+0 -161.387 Td
+(6514 void) 39.3166 Tj
+0 -170.88 Td
+(6515 panic\(char *s\)) 83.0018 Tj
+0 -180.374 Td
+(6516 {) 26.2111 Tj
+0 -189.867 Td
+(6517   int i;) 56.7907 Tj
+0 -199.361 Td
+(6518   uint pcs[10];) 87.3703 Tj
+0 -208.854 Td
+(6519 ) 21.8426 Tj
+0 -218.347 Td
+(6520   __asm __volatile\("cli"\);) 135.424 Tj
+0 -227.841 Td
+(6521   use_console_lock = 0;) 122.318 Tj
+0 -237.334 Td
+(6522   cprintf\("panic \(%d\): ", cpu\(\)\);) 166.004 Tj
+0 -246.827 Td
+(6523   cprintf\(s, 0\);) 91.7388 Tj
+0 -256.321 Td
+(6524   cprintf\("\\n", 0\);) 104.844 Tj
+0 -265.814 Td
+(6525   getcallerpcs\(&s, pcs\);) 126.687 Tj
+0 -275.307 Td
+(6526   for\(i=0; i<10; i++\)) 113.581 Tj
+0 -284.801 Td
+(6527     cprintf\(" %p", pcs[i]\);) 139.792 Tj
+0 -294.294 Td
+(6528   panicked = 1; // freeze other CPU) 174.741 Tj
+0 -303.788 Td
+(6529   for\(;;\)) 61.1592 Tj
+0 -313.281 Td
+(6530     ;) 43.6851 Tj
+0 -322.774 Td
+(6531 }) 26.2111 Tj
+0 -332.268 Td
+(6532 ) 21.8426 Tj
+0 -341.761 Td
+(6533 ) 21.8426 Tj
+0 -351.254 Td
+(6534 ) 21.8426 Tj
+0 -360.748 Td
+(6535 ) 21.8426 Tj
+0 -370.241 Td
+(6536 ) 21.8426 Tj
+0 -379.734 Td
+(6537 ) 21.8426 Tj
+0 -389.228 Td
+(6538 ) 21.8426 Tj
+0 -398.721 Td
+(6539 ) 21.8426 Tj
+0 -408.214 Td
+(6540 ) 21.8426 Tj
+0 -417.708 Td
+(6541 ) 21.8426 Tj
+0 -427.201 Td
+(6542 ) 21.8426 Tj
+0 -436.695 Td
+(6543 ) 21.8426 Tj
+0 -446.188 Td
+(6544 ) 21.8426 Tj
+0 -455.681 Td
+(6545 ) 21.8426 Tj
+0 -465.175 Td
+(6546 ) 21.8426 Tj
+0 -474.668 Td
+(6547 ) 21.8426 Tj
+0 -484.161 Td
+(6548 ) 21.8426 Tj
+0 -493.655 Td
+(6549 ) 21.8426 Tj
+0 -522.135 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.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/timer.c  Page 1) 166.004 Tj
+0 -28.4801 Td
+(6550 // Intel 8253/8254/82C54 Programmable Interval Timer \(PIT\
+\).) 279.585 Tj
+0 -37.9735 Td
+(6551 // Only used on uniprocessors;) 152.898 Tj
+0 -47.4668 Td
+(6552 // SMP machines use the local APIC timer.) 200.952 Tj
+0 -56.9602 Td
+(6553 ) 21.8426 Tj
+0 -66.4535 Td
+(6554 #include "types.h") 100.476 Tj
+0 -75.9469 Td
+(6555 #include "defs.h") 96.1073 Tj
+0 -85.4403 Td
+(6556 #include "traps.h") 100.476 Tj
+0 -94.9336 Td
+(6557 #include "x86.h") 91.7388 Tj
+0 -104.427 Td
+(6558 ) 21.8426 Tj
+0 -113.92 Td
+(6559 #define IO_TIMER1       0x040           // 8253 Timer #1) 266.479 Tj
+0 -123.414 Td
+(6560 ) 21.8426 Tj
+0 -132.907 Td
+(6561 // Frequency of all three count-down timers;) 214.057 Tj
+0 -142.4 Td
+(6562 // \(TIMER_FREQ/freq\) is the appropriate count) 218.426 Tj
+0 -151.894 Td
+(6563 // to generate a frequency of freq Hz.) 187.846 Tj
+0 -161.387 Td
+(6564 ) 21.8426 Tj
+0 -170.88 Td
+(6565 #define TIMER_FREQ      1193182) 157.267 Tj
+0 -180.374 Td
+(6566 #define TIMER_DIV\(x\)    \(\(TIMER_FREQ+\(x\)/2\)/\(x\)\)) 231.531 Tj
+0 -189.867 Td
+(6567 ) 21.8426 Tj
+0 -199.361 Td
+(6568 #define TIMER_MODE      \(IO_TIMER1 + 3\) // timer mode po\
+rt) 275.216 Tj
+0 -208.854 Td
+(6569 #define TIMER_SEL0      0x00    // select counter 0) 244.637 Tj
+0 -218.347 Td
+(6570 #define TIMER_RATEGEN   0x04    // mode 2, rate generator) 270.848 Tj
+0 -227.841 Td
+(6571 #define TIMER_16BIT     0x30    // r/w counter 16 bits, LS\
+B first) 305.796 Tj
+0 -237.334 Td
+(6572 ) 21.8426 Tj
+0 -246.827 Td
+(6573 void) 39.3166 Tj
+0 -256.321 Td
+(6574 timer_init\(void\)) 91.7388 Tj
+0 -265.814 Td
+(6575 {) 26.2111 Tj
+0 -275.307 Td
+(6576   // Interrupt 100 times/sec.) 148.529 Tj
+0 -284.801 Td
+(6577   outb\(TIMER_MODE, TIMER_SEL0 | TIMER_RATEGEN | TIMER_16B\
+IT\);) 288.322 Tj
+0 -294.294 Td
+(6578   outb\(IO_TIMER1, TIMER_DIV\(100\) % 256\);) 196.583 Tj
+0 -303.788 Td
+(6579   outb\(IO_TIMER1, TIMER_DIV\(100\) / 256\);) 196.583 Tj
+0 -313.281 Td
+(6580   pic_enable\(IRQ_TIMER\);) 126.687 Tj
+0 -322.774 Td
+(6581 }) 26.2111 Tj
+0 -332.268 Td
+(6582 ) 21.8426 Tj
+0 -341.761 Td
+(6583 ) 21.8426 Tj
+0 -351.254 Td
+(6584 ) 21.8426 Tj
+0 -360.748 Td
+(6585 ) 21.8426 Tj
+0 -370.241 Td
+(6586 ) 21.8426 Tj
+0 -379.734 Td
+(6587 ) 21.8426 Tj
+0 -389.228 Td
+(6588 ) 21.8426 Tj
+0 -398.721 Td
+(6589 ) 21.8426 Tj
+0 -408.214 Td
+(6590 ) 21.8426 Tj
+0 -417.708 Td
+(6591 ) 21.8426 Tj
+0 -427.201 Td
+(6592 ) 21.8426 Tj
+0 -436.695 Td
+(6593 ) 21.8426 Tj
+0 -446.188 Td
+(6594 ) 21.8426 Tj
+0 -455.681 Td
+(6595 ) 21.8426 Tj
+0 -465.175 Td
+(6596 ) 21.8426 Tj
+0 -474.668 Td
+(6597 ) 21.8426 Tj
+0 -484.161 Td
+(6598 ) 21.8426 Tj
+0 -493.655 Td
+(6599 ) 21.8426 Tj
+0 -522.135 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
+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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/console.c  Page 3) 24.08 Tj
-0 -3.92728 Td
-(6500 // Print to the console. only understands %d, %x, %p, %s.) 37.324 Tj
-0 -5.23637 Td
-(6501 void) 5.418 Tj
-0 -6.54546 Td
-(6502 cprintf\(char *fmt, ...\)) 16.856 Tj
-0 -7.85455 Td
-(6503 {) 3.612 Tj
-0 -9.16364 Td
-(6504   int i, state = 0, c, locking = 0;) 24.08 Tj
-0 -10.4727 Td
-(6505   uint *ap = \(uint*\)\(void*\)&fmt + 1;) 24.682 Tj
-0 -11.7818 Td
-(6506 ) 3.01 Tj
-0 -13.0909 Td
-(6507   if\(use_console_lock\){) 16.856 Tj
-0 -14.4 Td
-(6508     locking = 1;) 12.642 Tj
-0 -15.7091 Td
-(6509     acquire\(&console_lock\);) 19.264 Tj
-0 -17.0182 Td
-(6510   }) 4.816 Tj
-0 -18.3273 Td
-(6511 ) 3.01 Tj
-0 -19.6364 Td
-(6512   for\(i = 0; fmt[i]; i++\){) 18.662 Tj
-0 -20.9455 Td
-(6513     c = fmt[i] & 0xff;) 16.254 Tj
-0 -22.2545 Td
-(6514     if\(state == 0\){) 14.448 Tj
-0 -23.5636 Td
-(6515       if\(c == '%'\){) 14.448 Tj
-0 -24.8727 Td
-(6516         state = '%';) 15.05 Tj
-0 -26.1818 Td
-(6517       } else {) 11.438 Tj
-0 -27.4909 Td
-(6518         cons_putc\(c\);) 15.652 Tj
-0 -28.8 Td
-(6519       }) 7.224 Tj
-0 -30.1091 Td
-(6520     } else if\(state == '%'\){) 19.866 Tj
-0 -31.4182 Td
-(6521       if\(c == 'd'\){) 14.448 Tj
-0 -32.7273 Td
-(6522         printint\(*ap, 10, 1\);) 20.468 Tj
-0 -34.0364 Td
-(6523         ap++;) 10.836 Tj
-0 -35.3454 Td
-(6524       } else if\(c == 'x' || c == 'p'\){) 25.886 Tj
-0 -36.6545 Td
-(6525         printint\(*ap, 16, 0\);) 20.468 Tj
-0 -37.9636 Td
-(6526         ap++;) 10.836 Tj
-0 -39.2727 Td
-(6527       } else if\(c == 's'\){) 18.662 Tj
-0 -40.5818 Td
-(6528         char *s = \(char*\)*ap;) 20.468 Tj
-0 -41.8909 Td
-(6529         ap++;) 10.836 Tj
-0 -43.2 Td
-(6530         if\(s == 0\){) 14.448 Tj
-0 -44.5091 Td
-(6531           cons_putc\('0'\);) 18.06 Tj
-0 -45.8182 Td
-(6532         }else{) 11.438 Tj
-0 -47.1272 Td
-(6533           while\(*s != 0\){) 18.06 Tj
-0 -48.4363 Td
-(6534             cons_putc\(*s\);) 18.662 Tj
-0 -49.7454 Td
-(6535             s++;) 12.642 Tj
-0 -51.0545 Td
-(6536           }) 9.632 Tj
-0 -52.3636 Td
-(6537         }) 8.428 Tj
-0 -53.6727 Td
-(6538       } else if\(c == '%'\){) 18.662 Tj
-0 -54.9818 Td
-(6539         cons_putc\(c\);) 15.652 Tj
-0 -56.2909 Td
-(6540       } else {) 11.438 Tj
-0 -57.6 Td
-(6541         // Unknown % sequence.  Print it to draw attention.) 38.528 Tj
-0 -58.9091 Td
-(6542         cons_putc\('%'\);) 16.856 Tj
-0 -60.2181 Td
-(6543         cons_putc\(c\);) 15.652 Tj
-0 -61.5272 Td
-(6544       }) 7.224 Tj
-0 -62.8363 Td
-(6545       state = 0;) 12.642 Tj
-0 -64.1454 Td
-(6546     }) 6.02 Tj
-0 -65.4545 Td
-(6547   }) 4.816 Tj
-0 -66.7636 Td
-(6548 ) 3.01 Tj
-0 -68.0727 Td
-(6549 ) 3.01 Tj
-0 -72 Td
-(Sheet 65) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/initcode.S  Page 1) 179.109 Tj
+0 -28.4801 Td
+(6600 # Initial process execs /init.) 152.898 Tj
+0 -37.9735 Td
+(6601 ) 21.8426 Tj
+0 -47.4668 Td
+(6602 #include "syscall.h") 109.213 Tj
+0 -56.9602 Td
+(6603 #include "traps.h") 100.476 Tj
+0 -66.4535 Td
+(6604 ) 21.8426 Tj
+0 -75.9469 Td
+(6605 # exec\(init, argv\)) 100.476 Tj
+0 -85.4403 Td
+(6606 .globl start) 74.2647 Tj
+0 -94.9336 Td
+(6607 start:) 48.0537 Tj
+0 -104.427 Td
+(6608   pushl $argv) 78.6333 Tj
+0 -113.92 Td
+(6609   pushl $init) 78.6333 Tj
+0 -123.414 Td
+(6610   pushl $0) 65.5277 Tj
+0 -132.907 Td
+(6611   movl $SYS_exec, %eax) 117.95 Tj
+0 -142.4 Td
+(6612   int $T_SYSCALL) 91.7388 Tj
+0 -151.894 Td
+(6613 ) 21.8426 Tj
+0 -161.387 Td
+(6614 # for\(;;\) exit\(\);) 96.1073 Tj
+0 -170.88 Td
+(6615 exit:) 43.6851 Tj
+0 -180.374 Td
+(6616   movl $SYS_exit, %eax) 117.95 Tj
+0 -189.867 Td
+(6617   int $T_SYSCALL) 91.7388 Tj
+0 -199.361 Td
+(6618   jmp exit) 65.5277 Tj
+0 -208.854 Td
+(6619 ) 21.8426 Tj
+0 -218.347 Td
+(6620 # char init[] = "/init\\0";) 135.424 Tj
+0 -227.841 Td
+(6621 init:) 43.6851 Tj
+0 -237.334 Td
+(6622   .string "/init\\0") 104.844 Tj
+0 -246.827 Td
+(6623 ) 21.8426 Tj
+0 -256.321 Td
+(6624 # char *argv[] = { init, 0 };) 148.529 Tj
+0 -265.814 Td
+(6625 .p2align 2) 65.5277 Tj
+0 -275.307 Td
+(6626 argv:) 43.6851 Tj
+0 -284.801 Td
+(6627   .long init) 74.2647 Tj
+0 -294.294 Td
+(6628   .long 0) 61.1592 Tj
+0 -303.788 Td
+(6629 ) 21.8426 Tj
+0 -313.281 Td
+(6630 ) 21.8426 Tj
+0 -322.774 Td
+(6631 ) 21.8426 Tj
+0 -332.268 Td
+(6632 ) 21.8426 Tj
+0 -341.761 Td
+(6633 ) 21.8426 Tj
+0 -351.254 Td
+(6634 ) 21.8426 Tj
+0 -360.748 Td
+(6635 ) 21.8426 Tj
+0 -370.241 Td
+(6636 ) 21.8426 Tj
+0 -379.734 Td
+(6637 ) 21.8426 Tj
+0 -389.228 Td
+(6638 ) 21.8426 Tj
+0 -398.721 Td
+(6639 ) 21.8426 Tj
+0 -408.214 Td
+(6640 ) 21.8426 Tj
+0 -417.708 Td
+(6641 ) 21.8426 Tj
+0 -427.201 Td
+(6642 ) 21.8426 Tj
+0 -436.695 Td
+(6643 ) 21.8426 Tj
+0 -446.188 Td
+(6644 ) 21.8426 Tj
+0 -455.681 Td
+(6645 ) 21.8426 Tj
+0 -465.175 Td
+(6646 ) 21.8426 Tj
+0 -474.668 Td
+(6647 ) 21.8426 Tj
+0 -484.161 Td
+(6648 ) 21.8426 Tj
+0 -493.655 Td
+(6649 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/console.c  Page 4) 24.08 Tj
-0 -3.92728 Td
-(6550   if\(locking\)) 10.836 Tj
-0 -5.23637 Td
-(6551     release\(&console_lock\);) 19.264 Tj
-0 -6.54546 Td
-(6552 }) 3.612 Tj
-0 -7.85455 Td
-(6553 ) 3.01 Tj
-0 -9.16364 Td
-(6554 void) 5.418 Tj
-0 -10.4727 Td
-(6555 panic\(char *s\)) 11.438 Tj
-0 -11.7818 Td
-(6556 {) 3.612 Tj
-0 -13.0909 Td
-(6557   int i;) 7.826 Tj
-0 -14.4 Td
-(6558   uint pcs[10];) 12.04 Tj
-0 -15.7091 Td
-(6559 ) 3.01 Tj
-0 -17.0182 Td
-(6560   __asm __volatile\("cli"\);) 18.662 Tj
-0 -18.3273 Td
-(6561   use_console_lock = 0;) 16.856 Tj
-0 -19.6364 Td
-(6562   cprintf\("panic \(%d\): ", cpu\(\)\);) 22.876 Tj
-0 -20.9455 Td
-(6563   cprintf\(s, 0\);) 12.642 Tj
-0 -22.2545 Td
-(6564   cprintf\("\\n", 0\);) 14.448 Tj
-0 -23.5636 Td
-(6565   getcallerpcs\(&s, pcs\);) 17.458 Tj
-0 -24.8727 Td
-(6566   for\(i=0; i<10; i++\)) 15.652 Tj
-0 -26.1818 Td
-(6567     cprintf\(" %p", pcs[i]\);) 19.264 Tj
-0 -27.4909 Td
-(6568   panicked = 1; // freeze other CPU) 24.08 Tj
-0 -28.8 Td
-(6569   for\(;;\)) 8.428 Tj
-0 -30.1091 Td
-(6570     ;) 6.02 Tj
-0 -31.4182 Td
-(6571 }) 3.612 Tj
-0 -32.7273 Td
-(6572 ) 3.01 Tj
-0 -34.0364 Td
-(6573 int) 4.816 Tj
-0 -35.3454 Td
-(6574 console_write\(int minor, char *buf, int n\)) 28.294 Tj
-0 -36.6545 Td
-(6575 {) 3.612 Tj
-0 -37.9636 Td
-(6576   int i;) 7.826 Tj
-0 -39.2727 Td
-(6577 ) 3.01 Tj
-0 -40.5818 Td
-(6578   acquire\(&console_lock\);) 18.06 Tj
-0 -41.8909 Td
-(6579 ) 3.01 Tj
-0 -43.2 Td
-(6580   for\(i = 0; i < n; i++\) {) 18.662 Tj
-0 -44.5091 Td
-(6581     cons_putc\(buf[i] & 0xff\);) 20.468 Tj
-0 -45.8182 Td
-(6582   }) 4.816 Tj
-0 -47.1272 Td
-(6583 ) 3.01 Tj
-0 -48.4363 Td
-(6584   release\(&console_lock\);) 18.06 Tj
-0 -49.7454 Td
-(6585 ) 3.01 Tj
-0 -51.0545 Td
-(6586   return n;) 9.632 Tj
-0 -52.3636 Td
-(6587 }) 3.612 Tj
-0 -53.6727 Td
-(6588 ) 3.01 Tj
-0 -54.9818 Td
-(6589 ) 3.01 Tj
-0 -56.2909 Td
-(6590 ) 3.01 Tj
-0 -57.6 Td
-(6591 ) 3.01 Tj
-0 -58.9091 Td
-(6592 ) 3.01 Tj
-0 -60.2181 Td
-(6593 ) 3.01 Tj
-0 -61.5272 Td
-(6594 ) 3.01 Tj
-0 -62.8363 Td
-(6595 ) 3.01 Tj
-0 -64.1454 Td
-(6596 ) 3.01 Tj
-0 -65.4545 Td
-(6597 ) 3.01 Tj
-0 -66.7636 Td
-(6598 ) 3.01 Tj
-0 -68.0727 Td
-(6599 ) 3.01 Tj
-0 -72 Td
-(Sheet 65) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/init.c  Page 1) 161.635 Tj
+0 -28.4801 Td
+(6650 // init: The initial user-level program) 192.215 Tj
+0 -37.9735 Td
+(6651 ) 21.8426 Tj
+0 -47.4668 Td
+(6652 #include "types.h") 100.476 Tj
+0 -56.9602 Td
+(6653 #include "stat.h") 96.1073 Tj
+0 -66.4535 Td
+(6654 #include "user.h") 96.1073 Tj
+0 -75.9469 Td
+(6655 #include "fcntl.h") 100.476 Tj
+0 -85.4403 Td
+(6656 ) 21.8426 Tj
+0 -94.9336 Td
+(6657 char *sh_args[] = { "sh", 0 };) 152.898 Tj
+0 -104.427 Td
+(6658 ) 21.8426 Tj
+0 -113.92 Td
+(6659 int) 34.9481 Tj
+0 -123.414 Td
+(6660 main\(void\)) 65.5277 Tj
+0 -132.907 Td
+(6661 {) 26.2111 Tj
+0 -142.4 Td
+(6662   int pid, wpid;) 91.7388 Tj
+0 -151.894 Td
+(6663 ) 21.8426 Tj
+0 -161.387 Td
+(6664   if\(open\("console", O_RDWR\) < 0\){) 170.372 Tj
+0 -170.88 Td
+(6665     mknod\("console", 1, 1\);) 139.792 Tj
+0 -180.374 Td
+(6666     open\("console", O_RDWR\);) 144.161 Tj
+0 -189.867 Td
+(6667   }) 34.9481 Tj
+0 -199.361 Td
+(6668   dup\(0\);  // stdout) 109.213 Tj
+0 -208.854 Td
+(6669   dup\(0\);  // stderr) 109.213 Tj
+0 -218.347 Td
+(6670 ) 21.8426 Tj
+0 -227.841 Td
+(6671   for\(;;\){) 65.5277 Tj
+0 -237.334 Td
+(6672     printf\(1, "init: starting sh\\n"\);) 183.478 Tj
+0 -246.827 Td
+(6673     pid = fork\(\);) 96.1073 Tj
+0 -256.321 Td
+(6674     if\(pid < 0\){) 91.7388 Tj
+0 -265.814 Td
+(6675       printf\(1, "init: fork failed\\n"\);) 192.215 Tj
+0 -275.307 Td
+(6676       exit\(\);) 78.6333 Tj
+0 -284.801 Td
+(6677     }) 43.6851 Tj
+0 -294.294 Td
+(6678     if\(pid == 0\){) 96.1073 Tj
+0 -303.788 Td
+(6679       exec\("sh", sh_args\);) 135.424 Tj
+0 -313.281 Td
+(6680       printf\(1, "init: exec sh failed\\n"\);) 205.32 Tj
+0 -322.774 Td
+(6681       exit\(\);) 78.6333 Tj
+0 -332.268 Td
+(6682     }) 43.6851 Tj
+0 -341.761 Td
+(6683     while\(\(wpid=wait\(\)\) >= 0 && wpid != pid\)) 214.057 Tj
+0 -351.254 Td
+(6684       printf\(1, "zombie!\\n"\);) 148.529 Tj
+0 -360.748 Td
+(6685   }) 34.9481 Tj
+0 -370.241 Td
+(6686 }) 26.2111 Tj
+0 -379.734 Td
+(6687 ) 21.8426 Tj
+0 -389.228 Td
+(6688 ) 21.8426 Tj
+0 -398.721 Td
+(6689 ) 21.8426 Tj
+0 -408.214 Td
+(6690 ) 21.8426 Tj
+0 -417.708 Td
+(6691 ) 21.8426 Tj
+0 -427.201 Td
+(6692 ) 21.8426 Tj
+0 -436.695 Td
+(6693 ) 21.8426 Tj
+0 -446.188 Td
+(6694 ) 21.8426 Tj
+0 -455.681 Td
+(6695 ) 21.8426 Tj
+0 -465.175 Td
+(6696 ) 21.8426 Tj
+0 -474.668 Td
+(6697 ) 21.8426 Tj
+0 -484.161 Td
+(6698 ) 21.8426 Tj
+0 -493.655 Td
+(6699 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 66) 34.9481 Tj
 Q
 Q
 Q
 showpage
 %%PageTrailer
 pdfEndPage
-%%Page: 73 73
+%%Page: 74 74
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -20163,241 +21857,521 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+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.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/usys.S  Page 1) 161.635 Tj
+0 -28.4801 Td
+(6700 #include "syscall.h") 109.213 Tj
+0 -37.9735 Td
+(6701 #include "traps.h") 100.476 Tj
+0 -47.4668 Td
+(6702 ) 21.8426 Tj
+0 -56.9602 Td
+(6703 #define STUB\(name\) \\) 109.213 Tj
+0 -66.4535 Td
+(6704   .globl name; \\) 91.7388 Tj
+0 -75.9469 Td
+(6705   name: \\) 61.1592 Tj
+0 -85.4403 Td
+(6706     movl $SYS_ ## name, %eax; \\) 157.267 Tj
+0 -94.9336 Td
+(6707     int $T_SYSCALL; \\) 113.581 Tj
+0 -104.427 Td
+(6708     ret) 52.4222 Tj
+0 -113.92 Td
+(6709 ) 21.8426 Tj
+0 -123.414 Td
+(6710 STUB\(fork\)) 65.5277 Tj
+0 -132.907 Td
+(6711 STUB\(exit\)) 65.5277 Tj
+0 -142.4 Td
+(6712 STUB\(wait\)) 65.5277 Tj
+0 -151.894 Td
+(6713 STUB\(pipe\)) 65.5277 Tj
+0 -161.387 Td
+(6714 STUB\(read\)) 65.5277 Tj
+0 -170.88 Td
+(6715 STUB\(write\)) 69.8962 Tj
+0 -180.374 Td
+(6716 STUB\(close\)) 69.8962 Tj
+0 -189.867 Td
+(6717 STUB\(kill\)) 65.5277 Tj
+0 -199.361 Td
+(6718 STUB\(exec\)) 65.5277 Tj
+0 -208.854 Td
+(6719 STUB\(open\)) 65.5277 Tj
+0 -218.347 Td
+(6720 STUB\(mknod\)) 69.8962 Tj
+0 -227.841 Td
+(6721 STUB\(unlink\)) 74.2647 Tj
+0 -237.334 Td
+(6722 STUB\(fstat\)) 69.8962 Tj
+0 -246.827 Td
+(6723 STUB\(link\)) 65.5277 Tj
+0 -256.321 Td
+(6724 STUB\(mkdir\)) 69.8962 Tj
+0 -265.814 Td
+(6725 STUB\(chdir\)) 69.8962 Tj
+0 -275.307 Td
+(6726 STUB\(dup\)) 61.1592 Tj
+0 -284.801 Td
+(6727 STUB\(getpid\)) 74.2647 Tj
+0 -294.294 Td
+(6728 STUB\(sbrk\)) 65.5277 Tj
+0 -303.788 Td
+(6729 STUB\(sleep\)) 69.8962 Tj
+0 -313.281 Td
+(6730 ) 21.8426 Tj
+0 -322.774 Td
+(6731 ) 21.8426 Tj
+0 -332.268 Td
+(6732 ) 21.8426 Tj
+0 -341.761 Td
+(6733 ) 21.8426 Tj
+0 -351.254 Td
+(6734 ) 21.8426 Tj
+0 -360.748 Td
+(6735 ) 21.8426 Tj
+0 -370.241 Td
+(6736 ) 21.8426 Tj
+0 -379.734 Td
+(6737 ) 21.8426 Tj
+0 -389.228 Td
+(6738 ) 21.8426 Tj
+0 -398.721 Td
+(6739 ) 21.8426 Tj
+0 -408.214 Td
+(6740 ) 21.8426 Tj
+0 -417.708 Td
+(6741 ) 21.8426 Tj
+0 -427.201 Td
+(6742 ) 21.8426 Tj
+0 -436.695 Td
+(6743 ) 21.8426 Tj
+0 -446.188 Td
+(6744 ) 21.8426 Tj
+0 -455.681 Td
+(6745 ) 21.8426 Tj
+0 -465.175 Td
+(6746 ) 21.8426 Tj
+0 -474.668 Td
+(6747 ) 21.8426 Tj
+0 -484.161 Td
+(6748 ) 21.8426 Tj
+0 -493.655 Td
+(6749 ) 21.8426 Tj
+0 -522.135 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.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sh.c  Page 1) 152.898 Tj
+0 -28.4801 Td
+(6750 // Shell.) 61.1592 Tj
+0 -37.9735 Td
+(6751 ) 21.8426 Tj
+0 -47.4668 Td
+(6752 #include "types.h") 100.476 Tj
+0 -56.9602 Td
+(6753 #include "user.h") 96.1073 Tj
+0 -66.4535 Td
+(6754 #include "fcntl.h") 100.476 Tj
+0 -75.9469 Td
+(6755 ) 21.8426 Tj
+0 -85.4403 Td
+(6756 // Parsed command representation) 161.635 Tj
+0 -94.9336 Td
+(6757 #define EXEC  1) 87.3703 Tj
+0 -104.427 Td
+(6758 #define REDIR 2) 87.3703 Tj
+0 -113.92 Td
+(6759 #define PIPE  3) 87.3703 Tj
+0 -123.414 Td
+(6760 #define LIST  4) 87.3703 Tj
+0 -132.907 Td
+(6761 #define BACK  5) 87.3703 Tj
+0 -142.4 Td
+(6762 ) 21.8426 Tj
+0 -151.894 Td
+(6763 #define MAXARGS 10) 100.476 Tj
+0 -161.387 Td
+(6764 ) 21.8426 Tj
+0 -170.88 Td
+(6765 struct cmd {) 74.2647 Tj
+0 -180.374 Td
+(6766   int type;) 69.8962 Tj
+0 -189.867 Td
+(6767 };) 30.5796 Tj
+0 -199.361 Td
+(6768 ) 21.8426 Tj
+0 -208.854 Td
+(6769 struct execcmd {) 91.7388 Tj
+0 -218.347 Td
+(6770   int type;) 69.8962 Tj
+0 -227.841 Td
+(6771   char *argv[MAXARGS];) 117.95 Tj
+0 -237.334 Td
+(6772   char *eargv[MAXARGS];) 122.318 Tj
+0 -246.827 Td
+(6773 };) 30.5796 Tj
+0 -256.321 Td
+(6774 ) 21.8426 Tj
+0 -265.814 Td
+(6775 struct redircmd {) 96.1073 Tj
+0 -275.307 Td
+(6776   int type;) 69.8962 Tj
+0 -284.801 Td
+(6777   struct cmd *cmd;) 100.476 Tj
+0 -294.294 Td
+(6778   char *file;) 78.6333 Tj
+0 -303.788 Td
+(6779   char *efile;) 83.0018 Tj
+0 -313.281 Td
+(6780   int mode;) 69.8962 Tj
+0 -322.774 Td
+(6781   int fd;) 61.1592 Tj
+0 -332.268 Td
+(6782 };) 30.5796 Tj
+0 -341.761 Td
+(6783 ) 21.8426 Tj
+0 -351.254 Td
+(6784 struct pipecmd {) 91.7388 Tj
+0 -360.748 Td
+(6785   int type;) 69.8962 Tj
+0 -370.241 Td
+(6786   struct cmd *left;) 104.844 Tj
+0 -379.734 Td
+(6787   struct cmd *right;) 109.213 Tj
+0 -389.228 Td
+(6788 };) 30.5796 Tj
+0 -398.721 Td
+(6789 ) 21.8426 Tj
+0 -408.214 Td
+(6790 struct listcmd {) 91.7388 Tj
+0 -417.708 Td
+(6791   int type;) 69.8962 Tj
+0 -427.201 Td
+(6792   struct cmd *left;) 104.844 Tj
+0 -436.695 Td
+(6793   struct cmd *right;) 109.213 Tj
+0 -446.188 Td
+(6794 };) 30.5796 Tj
+0 -455.681 Td
+(6795 ) 21.8426 Tj
+0 -465.175 Td
+(6796 struct backcmd {) 91.7388 Tj
+0 -474.668 Td
+(6797   int type;) 69.8962 Tj
+0 -484.161 Td
+(6798   struct cmd *cmd;) 100.476 Tj
+0 -493.655 Td
+(6799 };) 30.5796 Tj
+0 -522.135 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
+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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/console.c  Page 5) 24.08 Tj
-0 -3.92728 Td
-(6600 #define KBSTATP         0x64    // kbd controller status port\(I\)) 41.538 Tj
-0 -5.23637 Td
-(6601 #define KBS_DIB         0x01    // kbd data in buffer) 34.916 Tj
-0 -6.54546 Td
-(6602 #define KBDATAP         0x60    // kbd data port\(I\)) 33.712 Tj
-0 -7.85455 Td
-(6603 ) 3.01 Tj
-0 -9.16364 Td
-(6604 #define NO              0) 18.06 Tj
-0 -10.4727 Td
-(6605 ) 3.01 Tj
-0 -11.7818 Td
-(6606 #define SHIFT           \(1<<0\)) 21.07 Tj
-0 -13.0909 Td
-(6607 #define CTL             \(1<<1\)) 21.07 Tj
-0 -14.4 Td
-(6608 #define ALT             \(1<<2\)) 21.07 Tj
-0 -15.7091 Td
-(6609 ) 3.01 Tj
-0 -17.0182 Td
-(6610 #define CAPSLOCK        \(1<<3\)) 21.07 Tj
-0 -18.3273 Td
-(6611 #define NUMLOCK         \(1<<4\)) 21.07 Tj
-0 -19.6364 Td
-(6612 #define SCROLLLOCK      \(1<<5\)) 21.07 Tj
-0 -20.9455 Td
-(6613 ) 3.01 Tj
-0 -22.2545 Td
-(6614 #define E0ESC           \(1<<6\)) 21.07 Tj
-0 -23.5636 Td
-(6615 ) 3.01 Tj
-0 -24.8727 Td
-(6616 // Special keycodes) 14.448 Tj
-0 -26.1818 Td
-(6617 #define KEY_HOME        0xE0) 19.866 Tj
-0 -27.4909 Td
-(6618 #define KEY_END         0xE1) 19.866 Tj
-0 -28.8 Td
-(6619 #define KEY_UP          0xE2) 19.866 Tj
-0 -30.1091 Td
-(6620 #define KEY_DN          0xE3) 19.866 Tj
-0 -31.4182 Td
-(6621 #define KEY_LF          0xE4) 19.866 Tj
-0 -32.7273 Td
-(6622 #define KEY_RT          0xE5) 19.866 Tj
-0 -34.0364 Td
-(6623 #define KEY_PGUP        0xE6) 19.866 Tj
-0 -35.3454 Td
-(6624 #define KEY_PGDN        0xE7) 19.866 Tj
-0 -36.6545 Td
-(6625 #define KEY_INS         0xE8) 19.866 Tj
-0 -37.9636 Td
-(6626 #define KEY_DEL         0xE9) 19.866 Tj
-0 -39.2727 Td
-(6627 ) 3.01 Tj
-0 -40.5818 Td
-(6628 static uchar shiftcode[256] =) 20.468 Tj
-0 -41.8909 Td
-(6629 {) 3.612 Tj
-0 -43.2 Td
-(6630   [0x1D] CTL,) 10.836 Tj
-0 -44.5091 Td
-(6631   [0x2A] SHIFT,) 12.04 Tj
-0 -45.8182 Td
-(6632   [0x36] SHIFT,) 12.04 Tj
-0 -47.1272 Td
-(6633   [0x38] ALT,) 10.836 Tj
-0 -48.4363 Td
-(6634   [0x9D] CTL,) 10.836 Tj
-0 -49.7454 Td
-(6635   [0xB8] ALT) 10.234 Tj
-0 -51.0545 Td
-(6636 };) 4.214 Tj
-0 -52.3636 Td
-(6637 ) 3.01 Tj
-0 -53.6727 Td
-(6638 static uchar togglecode[256] =) 21.07 Tj
-0 -54.9818 Td
-(6639 {) 3.612 Tj
-0 -56.2909 Td
-(6640   [0x3A] CAPSLOCK,) 13.846 Tj
-0 -57.6 Td
-(6641   [0x45] NUMLOCK,) 13.244 Tj
-0 -58.9091 Td
-(6642   [0x46] SCROLLLOCK) 14.448 Tj
-0 -60.2181 Td
-(6643 };) 4.214 Tj
-0 -61.5272 Td
-(6644 ) 3.01 Tj
-0 -62.8363 Td
-(6645 ) 3.01 Tj
-0 -64.1454 Td
-(6646 ) 3.01 Tj
-0 -65.4545 Td
-(6647 ) 3.01 Tj
-0 -66.7636 Td
-(6648 ) 3.01 Tj
-0 -68.0727 Td
-(6649 ) 3.01 Tj
-0 -72 Td
-(Sheet 66) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sh.c  Page 2) 152.898 Tj
+0 -28.4801 Td
+(6800 int fork1\(void\);  // Fork but panics on failure.) 231.531 Tj
+0 -37.9735 Td
+(6801 void panic\(char*\);) 100.476 Tj
+0 -47.4668 Td
+(6802 struct cmd *parsecmd\(char*\);) 144.161 Tj
+0 -56.9602 Td
+(6803 ) 21.8426 Tj
+0 -66.4535 Td
+(6804 // Execute cmd.  Never returns.) 157.267 Tj
+0 -75.9469 Td
+(6805 void) 39.3166 Tj
+0 -85.4403 Td
+(6806 runcmd\(struct cmd *cmd\)) 122.318 Tj
+0 -94.9336 Td
+(6807 {) 26.2111 Tj
+0 -104.427 Td
+(6808   int p[2];) 69.8962 Tj
+0 -113.92 Td
+(6809   struct backcmd *bcmd;) 122.318 Tj
+0 -123.414 Td
+(6810   struct execcmd *ecmd;) 122.318 Tj
+0 -132.907 Td
+(6811   struct listcmd *lcmd;) 122.318 Tj
+0 -142.4 Td
+(6812   struct pipecmd *pcmd;) 122.318 Tj
+0 -151.894 Td
+(6813   struct redircmd *rcmd;) 126.687 Tj
+0 -161.387 Td
+(6814 ) 21.8426 Tj
+0 -170.88 Td
+(6815   if\(cmd == 0\)) 83.0018 Tj
+0 -180.374 Td
+(6816     exit\(\);) 69.8962 Tj
+0 -189.867 Td
+(6817 ) 21.8426 Tj
+0 -199.361 Td
+(6818   switch\(cmd->type\){) 109.213 Tj
+0 -208.854 Td
+(6819   default:) 65.5277 Tj
+0 -218.347 Td
+(6820     panic\("runcmd"\);) 109.213 Tj
+0 -227.841 Td
+(6821 ) 21.8426 Tj
+0 -237.334 Td
+(6822   case EXEC:) 74.2647 Tj
+0 -246.827 Td
+(6823     ecmd = \(struct execcmd*\)cmd;) 161.635 Tj
+0 -256.321 Td
+(6824     if\(ecmd->argv[0] == 0\)) 135.424 Tj
+0 -265.814 Td
+(6825       exit\(\);) 78.6333 Tj
+0 -275.307 Td
+(6826     exec\(ecmd->argv[0], ecmd->argv\);) 179.109 Tj
+0 -284.801 Td
+(6827     printf\(2, "exec %s failed\\n", ecmd->argv[0]\);) 235.9 Tj
+0 -294.294 Td
+(6828     break;) 65.5277 Tj
+0 -303.788 Td
+(6829 ) 21.8426 Tj
+0 -313.281 Td
+(6830   case REDIR:) 78.6333 Tj
+0 -322.774 Td
+(6831     rcmd = \(struct redircmd*\)cmd;) 166.004 Tj
+0 -332.268 Td
+(6832     close\(rcmd->fd\);) 109.213 Tj
+0 -341.761 Td
+(6833     if\(open\(rcmd->file, rcmd->mode\) < 0\){) 200.952 Tj
+0 -351.254 Td
+(6834       printf\(2, "open %s failed\\n", rcmd->file\);) 231.531 Tj
+0 -360.748 Td
+(6835       exit\(\);) 78.6333 Tj
+0 -370.241 Td
+(6836     }) 43.6851 Tj
+0 -379.734 Td
+(6837     runcmd\(rcmd->cmd\);) 117.95 Tj
+0 -389.228 Td
+(6838     break;) 65.5277 Tj
+0 -398.721 Td
+(6839 ) 21.8426 Tj
+0 -408.214 Td
+(6840   case LIST:) 74.2647 Tj
+0 -417.708 Td
+(6841     lcmd = \(struct listcmd*\)cmd;) 161.635 Tj
+0 -427.201 Td
+(6842     if\(fork1\(\) == 0\)) 109.213 Tj
+0 -436.695 Td
+(6843       runcmd\(lcmd->left\);) 131.055 Tj
+0 -446.188 Td
+(6844     wait\(\);) 69.8962 Tj
+0 -455.681 Td
+(6845     runcmd\(lcmd->right\);) 126.687 Tj
+0 -465.175 Td
+(6846     break;) 65.5277 Tj
+0 -474.668 Td
+(6847 ) 21.8426 Tj
+0 -484.161 Td
+(6848 ) 21.8426 Tj
+0 -493.655 Td
+(6849 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/console.c  Page 6) 24.08 Tj
-0 -3.92728 Td
-(6650 static uchar normalmap[256] =) 20.468 Tj
-0 -5.23637 Td
-(6651 {) 3.612 Tj
-0 -6.54546 Td
-(6652   NO,   0x1B, '1',  '2',  '3',  '4',  '5',  '6',  // 0x00) 37.324 Tj
-0 -7.85455 Td
-(6653   '7',  '8',  '9',  '0',  '-',  '=',  '\\b', '\\t',) 32.508 Tj
-0 -9.16364 Td
-(6654   'q',  'w',  'e',  'r',  't',  'y',  'u',  'i',  // 0x10) 37.324 Tj
-0 -10.4727 Td
-(6655   'o',  'p',  '[',  ']',  '\\n', NO,   'a',  's',) 31.906 Tj
-0 -11.7818 Td
-(6656   'd',  'f',  'g',  'h',  'j',  'k',  'l',  ';',  // 0x20) 37.324 Tj
-0 -13.0909 Td
-(6657   '\\'', '`',  NO,   '\\\\', 'z',  'x',  'c',  'v',) 31.906 Tj
-0 -14.4 Td
-(6658   'b',  'n',  'm',  ',',  '.',  '/',  NO,   '*',  // 0x30) 37.324 Tj
-0 -15.7091 Td
-(6659   NO,   ' ',  NO,   NO,   NO,   NO,   NO,   NO,) 31.304 Tj
-0 -17.0182 Td
-(6660   NO,   NO,   NO,   NO,   NO,   NO,   NO,   '7',  // 0x40) 37.324 Tj
-0 -18.3273 Td
-(6661   '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',) 31.906 Tj
-0 -19.6364 Td
-(6662   '2',  '3',  '0',  '.',  NO,   NO,   NO,   NO,   // 0x50) 37.324 Tj
-0 -20.9455 Td
-(6663   [0x97] KEY_HOME,) 13.846 Tj
-0 -22.2545 Td
-(6664   [0x9C] '\\n',      // KP_Enter) 21.672 Tj
-0 -23.5636 Td
-(6665   [0xB5] '/',       // KP_Div) 20.468 Tj
-0 -24.8727 Td
-(6666   [0xC8] KEY_UP,) 12.642 Tj
-0 -26.1818 Td
-(6667   [0xC9] KEY_PGUP,) 13.846 Tj
-0 -27.4909 Td
-(6668   [0xCB] KEY_LF,) 12.642 Tj
-0 -28.8 Td
-(6669   [0xCD] KEY_RT,) 12.642 Tj
-0 -30.1091 Td
-(6670   [0xCF] KEY_END,) 13.244 Tj
-0 -31.4182 Td
-(6671   [0xD0] KEY_DN,) 12.642 Tj
-0 -32.7273 Td
-(6672   [0xD1] KEY_PGDN,) 13.846 Tj
-0 -34.0364 Td
-(6673   [0xD2] KEY_INS,) 13.244 Tj
-0 -35.3454 Td
-(6674   [0xD3] KEY_DEL) 12.642 Tj
-0 -36.6545 Td
-(6675 };) 4.214 Tj
-0 -37.9636 Td
-(6676 ) 3.01 Tj
-0 -39.2727 Td
-(6677 static uchar shiftmap[256] =) 19.866 Tj
-0 -40.5818 Td
-(6678 {) 3.612 Tj
-0 -41.8909 Td
-(6679   NO,   033,  '!',  '@',  '#',  '$',  '%',  '^',  // 0x00) 37.324 Tj
-0 -43.2 Td
-(6680   '&',  '*',  '\(',  '\)',  '_',  '+',  '\\b', '\\t',) 32.508 Tj
-0 -44.5091 Td
-(6681   'Q',  'W',  'E',  'R',  'T',  'Y',  'U',  'I',  // 0x10) 37.324 Tj
-0 -45.8182 Td
-(6682   'O',  'P',  '{',  '}',  '\\n', NO,   'A',  'S',) 31.906 Tj
-0 -47.1272 Td
-(6683   'D',  'F',  'G',  'H',  'J',  'K',  'L',  ':',  // 0x20) 37.324 Tj
-0 -48.4363 Td
-(6684   '"',  '~',  NO,   '|',  'Z',  'X',  'C',  'V',) 31.906 Tj
-0 -49.7454 Td
-(6685   'B',  'N',  'M',  '<',  '>',  '?',  NO,   '*',  // 0x30) 37.324 Tj
-0 -51.0545 Td
-(6686   NO,   ' ',  NO,   NO,   NO,   NO,   NO,   NO,) 31.304 Tj
-0 -52.3636 Td
-(6687   NO,   NO,   NO,   NO,   NO,   NO,   NO,   '7',  // 0x40) 37.324 Tj
-0 -53.6727 Td
-(6688   '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',) 31.906 Tj
-0 -54.9818 Td
-(6689   '2',  '3',  '0',  '.',  NO,   NO,   NO,   NO,   // 0x50) 37.324 Tj
-0 -56.2909 Td
-(6690   [0x97] KEY_HOME,) 13.846 Tj
-0 -57.6 Td
-(6691   [0x9C] '\\n',      // KP_Enter) 21.672 Tj
-0 -58.9091 Td
-(6692   [0xB5] '/',       // KP_Div) 20.468 Tj
-0 -60.2181 Td
-(6693   [0xC8] KEY_UP,) 12.642 Tj
-0 -61.5272 Td
-(6694   [0xC9] KEY_PGUP,) 13.846 Tj
-0 -62.8363 Td
-(6695   [0xCB] KEY_LF,) 12.642 Tj
-0 -64.1454 Td
-(6696   [0xCD] KEY_RT,) 12.642 Tj
-0 -65.4545 Td
-(6697   [0xCF] KEY_END,) 13.244 Tj
-0 -66.7636 Td
-(6698   [0xD0] KEY_DN,) 12.642 Tj
-0 -68.0727 Td
-(6699   [0xD1] KEY_PGDN,) 13.846 Tj
-0 -72 Td
-(Sheet 66) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sh.c  Page 3) 152.898 Tj
+0 -28.4801 Td
+(6850   case PIPE:) 74.2647 Tj
+0 -37.9735 Td
+(6851     pcmd = \(struct pipecmd*\)cmd;) 161.635 Tj
+0 -47.4668 Td
+(6852     if\(pipe\(p\) < 0\)) 104.844 Tj
+0 -56.9602 Td
+(6853       panic\("pipe"\);) 109.213 Tj
+0 -66.4535 Td
+(6854     if\(fork1\(\) == 0\){) 113.581 Tj
+0 -75.9469 Td
+(6855       close\(1\);) 87.3703 Tj
+0 -85.4403 Td
+(6856       dup\(p[1]\);) 91.7388 Tj
+0 -94.9336 Td
+(6857       close\(p[0]\);) 100.476 Tj
+0 -104.427 Td
+(6858       close\(p[1]\);) 100.476 Tj
+0 -113.92 Td
+(6859       runcmd\(pcmd->left\);) 131.055 Tj
+0 -123.414 Td
+(6860     }) 43.6851 Tj
+0 -132.907 Td
+(6861     if\(fork1\(\) == 0\){) 113.581 Tj
+0 -142.4 Td
+(6862       close\(0\);) 87.3703 Tj
+0 -151.894 Td
+(6863       dup\(p[0]\);) 91.7388 Tj
+0 -161.387 Td
+(6864       close\(p[0]\);) 100.476 Tj
+0 -170.88 Td
+(6865       close\(p[1]\);) 100.476 Tj
+0 -180.374 Td
+(6866       runcmd\(pcmd->right\);) 135.424 Tj
+0 -189.867 Td
+(6867     }) 43.6851 Tj
+0 -199.361 Td
+(6868     close\(p[0]\);) 91.7388 Tj
+0 -208.854 Td
+(6869     close\(p[1]\);) 91.7388 Tj
+0 -218.347 Td
+(6870     wait\(\);) 69.8962 Tj
+0 -227.841 Td
+(6871     wait\(\);) 69.8962 Tj
+0 -237.334 Td
+(6872     break;) 65.5277 Tj
+0 -246.827 Td
+(6873 ) 21.8426 Tj
+0 -256.321 Td
+(6874   case BACK:) 74.2647 Tj
+0 -265.814 Td
+(6875     bcmd = \(struct backcmd*\)cmd;) 161.635 Tj
+0 -275.307 Td
+(6876     if\(fork1\(\) == 0\)) 109.213 Tj
+0 -284.801 Td
+(6877       runcmd\(bcmd->cmd\);) 126.687 Tj
+0 -294.294 Td
+(6878     break;) 65.5277 Tj
+0 -303.788 Td
+(6879   }) 34.9481 Tj
+0 -313.281 Td
+(6880   exit\(\);) 61.1592 Tj
+0 -322.774 Td
+(6881 }) 26.2111 Tj
+0 -332.268 Td
+(6882 ) 21.8426 Tj
+0 -341.761 Td
+(6883 int) 34.9481 Tj
+0 -351.254 Td
+(6884 getcmd\(char *buf, int nbuf\)) 139.792 Tj
+0 -360.748 Td
+(6885 {) 26.2111 Tj
+0 -370.241 Td
+(6886   printf\(2, "$ "\);) 100.476 Tj
+0 -379.734 Td
+(6887   memset\(buf, 0, nbuf\);) 122.318 Tj
+0 -389.228 Td
+(6888   gets\(buf, nbuf\);) 100.476 Tj
+0 -398.721 Td
+(6889   if\(buf[0] == 0\) // EOF) 126.687 Tj
+0 -408.214 Td
+(6890     return -1;) 83.0018 Tj
+0 -417.708 Td
+(6891   return 0;) 69.8962 Tj
+0 -427.201 Td
+(6892 }) 26.2111 Tj
+0 -436.695 Td
+(6893 ) 21.8426 Tj
+0 -446.188 Td
+(6894 ) 21.8426 Tj
+0 -455.681 Td
+(6895 ) 21.8426 Tj
+0 -465.175 Td
+(6896 ) 21.8426 Tj
+0 -474.668 Td
+(6897 ) 21.8426 Tj
+0 -484.161 Td
+(6898 ) 21.8426 Tj
+0 -493.655 Td
+(6899 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 68) 34.9481 Tj
 Q
 Q
 Q
 showpage
 %%PageTrailer
 pdfEndPage
-%%Page: 74 74
+%%Page: 76 76
 %%BeginPageSetup
 %%PageOrientation: Landscape
-__tumble pdfStartPage
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -20416,241 +22393,523 @@ __tumble pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+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.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sh.c  Page 4) 152.898 Tj
+0 -28.4801 Td
+(6900 int) 34.9481 Tj
+0 -37.9735 Td
+(6901 main\(void\)) 65.5277 Tj
+0 -47.4668 Td
+(6902 {) 26.2111 Tj
+0 -56.9602 Td
+(6903   static char buf[100];) 122.318 Tj
+0 -66.4535 Td
+(6904   int fd;) 61.1592 Tj
+0 -75.9469 Td
+(6905 ) 21.8426 Tj
+0 -85.4403 Td
+(6906   // Assumes three file descriptors open.) 200.952 Tj
+0 -94.9336 Td
+(6907   while\(\(fd = open\("console", O_RDWR\)\) >= 0\){) 218.426 Tj
+0 -104.427 Td
+(6908     if\(fd >= 3\){) 91.7388 Tj
+0 -113.92 Td
+(6909       close\(fd\);) 91.7388 Tj
+0 -123.414 Td
+(6910       break;) 74.2647 Tj
+0 -132.907 Td
+(6911     }) 43.6851 Tj
+0 -142.4 Td
+(6912   }) 34.9481 Tj
+0 -151.894 Td
+(6913 ) 21.8426 Tj
+0 -161.387 Td
+(6914   // Read and run input commands.) 166.004 Tj
+0 -170.88 Td
+(6915   while\(getcmd\(buf, sizeof\(buf\)\) >= 0\){) 192.215 Tj
+0 -180.374 Td
+(6916     if\(fork1\(\) == 0\)) 109.213 Tj
+0 -189.867 Td
+(6917       runcmd\(parsecmd\(buf\)\);) 144.161 Tj
+0 -199.361 Td
+(6918     wait\(\);) 69.8962 Tj
+0 -208.854 Td
+(6919   }) 34.9481 Tj
+0 -218.347 Td
+(6920   exit\(\);) 61.1592 Tj
+0 -227.841 Td
+(6921 }) 26.2111 Tj
+0 -237.334 Td
+(6922 ) 21.8426 Tj
+0 -246.827 Td
+(6923 void) 39.3166 Tj
+0 -256.321 Td
+(6924 panic\(char *s\)) 83.0018 Tj
+0 -265.814 Td
+(6925 {) 26.2111 Tj
+0 -275.307 Td
+(6926   printf\(2, "%s\\n", s\);) 122.318 Tj
+0 -284.801 Td
+(6927   exit\(\);) 61.1592 Tj
+0 -294.294 Td
+(6928 }) 26.2111 Tj
+0 -303.788 Td
+(6929 ) 21.8426 Tj
+0 -313.281 Td
+(6930 int) 34.9481 Tj
+0 -322.774 Td
+(6931 fork1\(void\)) 69.8962 Tj
+0 -332.268 Td
+(6932 {) 26.2111 Tj
+0 -341.761 Td
+(6933   int pid;) 65.5277 Tj
+0 -351.254 Td
+(6934 ) 21.8426 Tj
+0 -360.748 Td
+(6935   pid = fork\(\);) 87.3703 Tj
+0 -370.241 Td
+(6936   if\(pid == -1\)) 87.3703 Tj
+0 -379.734 Td
+(6937     panic\("fork"\);) 100.476 Tj
+0 -389.228 Td
+(6938   return pid;) 78.6333 Tj
+0 -398.721 Td
+(6939 }) 26.2111 Tj
+0 -408.214 Td
+(6940 ) 21.8426 Tj
+0 -417.708 Td
+(6941 ) 21.8426 Tj
+0 -427.201 Td
+(6942 ) 21.8426 Tj
+0 -436.695 Td
+(6943 ) 21.8426 Tj
+0 -446.188 Td
+(6944 ) 21.8426 Tj
+0 -455.681 Td
+(6945 ) 21.8426 Tj
+0 -465.175 Td
+(6946 ) 21.8426 Tj
+0 -474.668 Td
+(6947 ) 21.8426 Tj
+0 -484.161 Td
+(6948 ) 21.8426 Tj
+0 -493.655 Td
+(6949 ) 21.8426 Tj
+0 -522.135 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.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sh.c  Page 5) 152.898 Tj
+0 -28.4801 Td
+(6950 // Constructors) 87.3703 Tj
+0 -37.9735 Td
+(6951 ) 21.8426 Tj
+0 -47.4668 Td
+(6952 struct cmd*) 69.8962 Tj
+0 -56.9602 Td
+(6953 execcmd\(void\)) 78.6333 Tj
+0 -66.4535 Td
+(6954 {) 26.2111 Tj
+0 -75.9469 Td
+(6955   struct execcmd *cmd;) 117.95 Tj
+0 -85.4403 Td
+(6956 ) 21.8426 Tj
+0 -94.9336 Td
+(6957   cmd = malloc\(sizeof\(*cmd\)\);) 148.529 Tj
+0 -104.427 Td
+(6958   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.267 Tj
+0 -113.92 Td
+(6959   cmd->type = EXEC;) 104.844 Tj
+0 -123.414 Td
+(6960   return \(struct cmd*\)cmd;) 135.424 Tj
+0 -132.907 Td
+(6961 }) 26.2111 Tj
+0 -142.4 Td
+(6962 ) 21.8426 Tj
+0 -151.894 Td
+(6963 struct cmd*) 69.8962 Tj
+0 -161.387 Td
+(6964 redircmd\(struct cmd *subcmd, char *file, char *efile, int\
+ mode, int fd\)) 332.007 Tj
+0 -170.88 Td
+(6965 {) 26.2111 Tj
+0 -180.374 Td
+(6966   struct redircmd *cmd;) 122.318 Tj
+0 -189.867 Td
+(6967 ) 21.8426 Tj
+0 -199.361 Td
+(6968   cmd = malloc\(sizeof\(*cmd\)\);) 148.529 Tj
+0 -208.854 Td
+(6969   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.267 Tj
+0 -218.347 Td
+(6970   cmd->type = REDIR;) 109.213 Tj
+0 -227.841 Td
+(6971   cmd->cmd = subcmd;) 109.213 Tj
+0 -237.334 Td
+(6972   cmd->file = file;) 104.844 Tj
+0 -246.827 Td
+(6973   cmd->efile = efile;) 113.581 Tj
+0 -256.321 Td
+(6974   cmd->mode = mode;) 104.844 Tj
+0 -265.814 Td
+(6975   cmd->fd = fd;) 87.3703 Tj
+0 -275.307 Td
+(6976   return \(struct cmd*\)cmd;) 135.424 Tj
+0 -284.801 Td
+(6977 }) 26.2111 Tj
+0 -294.294 Td
+(6978 ) 21.8426 Tj
+0 -303.788 Td
+(6979 struct cmd*) 69.8962 Tj
+0 -313.281 Td
+(6980 pipecmd\(struct cmd *left, struct cmd *right\)) 214.057 Tj
+0 -322.774 Td
+(6981 {) 26.2111 Tj
+0 -332.268 Td
+(6982   struct pipecmd *cmd;) 117.95 Tj
+0 -341.761 Td
+(6983 ) 21.8426 Tj
+0 -351.254 Td
+(6984   cmd = malloc\(sizeof\(*cmd\)\);) 148.529 Tj
+0 -360.748 Td
+(6985   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.267 Tj
+0 -370.241 Td
+(6986   cmd->type = PIPE;) 104.844 Tj
+0 -379.734 Td
+(6987   cmd->left = left;) 104.844 Tj
+0 -389.228 Td
+(6988   cmd->right = right;) 113.581 Tj
+0 -398.721 Td
+(6989   return \(struct cmd*\)cmd;) 135.424 Tj
+0 -408.214 Td
+(6990 }) 26.2111 Tj
+0 -417.708 Td
+(6991 ) 21.8426 Tj
+0 -427.201 Td
+(6992 ) 21.8426 Tj
+0 -436.695 Td
+(6993 ) 21.8426 Tj
+0 -446.188 Td
+(6994 ) 21.8426 Tj
+0 -455.681 Td
+(6995 ) 21.8426 Tj
+0 -465.175 Td
+(6996 ) 21.8426 Tj
+0 -474.668 Td
+(6997 ) 21.8426 Tj
+0 -484.161 Td
+(6998 ) 21.8426 Tj
+0 -493.655 Td
+(6999 ) 21.8426 Tj
+0 -522.135 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
+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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/console.c  Page 7) 24.08 Tj
-0 -3.92728 Td
-(6700   [0xD2] KEY_INS,) 13.244 Tj
-0 -5.23637 Td
-(6701   [0xD3] KEY_DEL) 12.642 Tj
-0 -6.54546 Td
-(6702 };) 4.214 Tj
-0 -7.85455 Td
-(6703 ) 3.01 Tj
-0 -9.16364 Td
-(6704 #define C\(x\) \(x - '@'\)) 16.254 Tj
-0 -10.4727 Td
-(6705 ) 3.01 Tj
-0 -11.7818 Td
-(6706 static uchar ctlmap[256] =) 18.662 Tj
-0 -13.0909 Td
-(6707 {) 3.612 Tj
-0 -14.4 Td
-(6708   NO,      NO,      NO,      NO,      NO,      NO,      NO,      NO,) 43.946 Tj
-0 -15.7091 Td
-(6709   NO,      NO,      NO,      NO,      NO,      NO,      NO,      NO,) 43.946 Tj
-0 -17.0182 Td
-(6710   C\('Q'\),  C\('W'\),  C\('E'\),  C\('R'\),  C\('T'\),  C\('Y'\),  C\('U'\),  C\('I'\),) 46.354 Tj
-0 -18.3273 Td
-(6711   C\('O'\),  C\('P'\),  NO,      NO,      '\\r',    NO,      C\('A'\),  C\('S'\),) 46.354 Tj
-0 -19.6364 Td
-(6712   C\('D'\),  C\('F'\),  C\('G'\),  C\('H'\),  C\('J'\),  C\('K'\),  C\('L'\),  NO,) 43.946 Tj
-0 -20.9455 Td
-(6713   NO,      NO,      NO,      C\('\\\\'\), C\('Z'\),  C\('X'\),  C\('C'\),  C\('V'\),) 46.354 Tj
-0 -22.2545 Td
-(6714   C\('B'\),  C\('N'\),  C\('M'\),  NO,      NO,      C\('/'\),  NO,      NO,) 43.946 Tj
-0 -23.5636 Td
-(6715   [0x97] KEY_HOME,) 13.846 Tj
-0 -24.8727 Td
-(6716   [0xB5] C\('/'\),    // KP_Div) 20.468 Tj
-0 -26.1818 Td
-(6717   [0xC8] KEY_UP,) 12.642 Tj
-0 -27.4909 Td
-(6718   [0xC9] KEY_PGUP,) 13.846 Tj
-0 -28.8 Td
-(6719   [0xCB] KEY_LF,) 12.642 Tj
-0 -30.1091 Td
-(6720   [0xCD] KEY_RT,) 12.642 Tj
-0 -31.4182 Td
-(6721   [0xCF] KEY_END,) 13.244 Tj
-0 -32.7273 Td
-(6722   [0xD0] KEY_DN,) 12.642 Tj
-0 -34.0364 Td
-(6723   [0xD1] KEY_PGDN,) 13.846 Tj
-0 -35.3454 Td
-(6724   [0xD2] KEY_INS,) 13.244 Tj
-0 -36.6545 Td
-(6725   [0xD3] KEY_DEL) 12.642 Tj
-0 -37.9636 Td
-(6726 };) 4.214 Tj
-0 -39.2727 Td
-(6727 ) 3.01 Tj
-0 -40.5818 Td
-(6728 static uchar *charcode[4] = {) 20.468 Tj
-0 -41.8909 Td
-(6729   normalmap,) 10.234 Tj
-0 -43.2 Td
-(6730   shiftmap,) 9.632 Tj
-0 -44.5091 Td
-(6731   ctlmap,) 8.428 Tj
-0 -45.8182 Td
-(6732   ctlmap) 7.826 Tj
-0 -47.1272 Td
-(6733 };) 4.214 Tj
-0 -48.4363 Td
-(6734 ) 3.01 Tj
-0 -49.7454 Td
-(6735 #define KBD_BUF 64) 13.846 Tj
-0 -51.0545 Td
-(6736 char kbd_buf[KBD_BUF];) 16.254 Tj
-0 -52.3636 Td
-(6737 int kbd_r;) 9.03 Tj
-0 -53.6727 Td
-(6738 int kbd_w;) 9.03 Tj
-0 -54.9818 Td
-(6739 struct spinlock kbd_lock;) 18.06 Tj
-0 -56.2909 Td
-(6740 static uint shift;) 13.846 Tj
-0 -57.6 Td
-(6741 ) 3.01 Tj
-0 -58.9091 Td
-(6742 void) 5.418 Tj
-0 -60.2181 Td
-(6743 kbd_intr\(\)) 9.03 Tj
-0 -61.5272 Td
-(6744 {) 3.612 Tj
-0 -62.8363 Td
-(6745   uint st, data, c;) 14.448 Tj
-0 -64.1454 Td
-(6746 ) 3.01 Tj
-0 -65.4545 Td
-(6747   acquire\(&kbd_lock\);) 15.652 Tj
-0 -66.7636 Td
-(6748 ) 3.01 Tj
-0 -68.0727 Td
-(6749 ) 3.01 Tj
-0 -72 Td
-(Sheet 67) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sh.c  Page 6) 152.898 Tj
+0 -28.4801 Td
+(7000 struct cmd*) 69.8962 Tj
+0 -37.9735 Td
+(7001 listcmd\(struct cmd *left, struct cmd *right\)) 214.057 Tj
+0 -47.4668 Td
+(7002 {) 26.2111 Tj
+0 -56.9602 Td
+(7003   struct listcmd *cmd;) 117.95 Tj
+0 -66.4535 Td
+(7004 ) 21.8426 Tj
+0 -75.9469 Td
+(7005   cmd = malloc\(sizeof\(*cmd\)\);) 148.529 Tj
+0 -85.4403 Td
+(7006   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.267 Tj
+0 -94.9336 Td
+(7007   cmd->type = LIST;) 104.844 Tj
+0 -104.427 Td
+(7008   cmd->left = left;) 104.844 Tj
+0 -113.92 Td
+(7009   cmd->right = right;) 113.581 Tj
+0 -123.414 Td
+(7010   return \(struct cmd*\)cmd;) 135.424 Tj
+0 -132.907 Td
+(7011 }) 26.2111 Tj
+0 -142.4 Td
+(7012 ) 21.8426 Tj
+0 -151.894 Td
+(7013 struct cmd*) 69.8962 Tj
+0 -161.387 Td
+(7014 backcmd\(struct cmd *subcmd\)) 139.792 Tj
+0 -170.88 Td
+(7015 {) 26.2111 Tj
+0 -180.374 Td
+(7016   struct backcmd *cmd;) 117.95 Tj
+0 -189.867 Td
+(7017 ) 21.8426 Tj
+0 -199.361 Td
+(7018   cmd = malloc\(sizeof\(*cmd\)\);) 148.529 Tj
+0 -208.854 Td
+(7019   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.267 Tj
+0 -218.347 Td
+(7020   cmd->type = BACK;) 104.844 Tj
+0 -227.841 Td
+(7021   cmd->cmd = subcmd;) 109.213 Tj
+0 -237.334 Td
+(7022   return \(struct cmd*\)cmd;) 135.424 Tj
+0 -246.827 Td
+(7023 }) 26.2111 Tj
+0 -256.321 Td
+(7024 ) 21.8426 Tj
+0 -265.814 Td
+(7025 ) 21.8426 Tj
+0 -275.307 Td
+(7026 ) 21.8426 Tj
+0 -284.801 Td
+(7027 ) 21.8426 Tj
+0 -294.294 Td
+(7028 ) 21.8426 Tj
+0 -303.788 Td
+(7029 ) 21.8426 Tj
+0 -313.281 Td
+(7030 ) 21.8426 Tj
+0 -322.774 Td
+(7031 ) 21.8426 Tj
+0 -332.268 Td
+(7032 ) 21.8426 Tj
+0 -341.761 Td
+(7033 ) 21.8426 Tj
+0 -351.254 Td
+(7034 ) 21.8426 Tj
+0 -360.748 Td
+(7035 ) 21.8426 Tj
+0 -370.241 Td
+(7036 ) 21.8426 Tj
+0 -379.734 Td
+(7037 ) 21.8426 Tj
+0 -389.228 Td
+(7038 ) 21.8426 Tj
+0 -398.721 Td
+(7039 ) 21.8426 Tj
+0 -408.214 Td
+(7040 ) 21.8426 Tj
+0 -417.708 Td
+(7041 ) 21.8426 Tj
+0 -427.201 Td
+(7042 ) 21.8426 Tj
+0 -436.695 Td
+(7043 ) 21.8426 Tj
+0 -446.188 Td
+(7044 ) 21.8426 Tj
+0 -455.681 Td
+(7045 ) 21.8426 Tj
+0 -465.175 Td
+(7046 ) 21.8426 Tj
+0 -474.668 Td
+(7047 ) 21.8426 Tj
+0 -484.161 Td
+(7048 ) 21.8426 Tj
+0 -493.655 Td
+(7049 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/console.c  Page 8) 24.08 Tj
-0 -3.92728 Td
-(6750   st = inb\(KBSTATP\);) 15.05 Tj
-0 -5.23637 Td
-(6751   if\(\(st & KBS_DIB\) == 0\)) 18.06 Tj
-0 -6.54546 Td
-(6752     goto out;) 10.836 Tj
-0 -7.85455 Td
-(6753   data = inb\(KBDATAP\);) 16.254 Tj
-0 -9.16364 Td
-(6754 ) 3.01 Tj
-0 -10.4727 Td
-(6755   if\(data == 0xE0\) {) 15.05 Tj
-0 -11.7818 Td
-(6756     shift |= E0ESC;) 14.448 Tj
-0 -13.0909 Td
-(6757     goto out;) 10.836 Tj
-0 -14.4 Td
-(6758   } else if\(data & 0x80\) {) 18.662 Tj
-0 -15.7091 Td
-(6759     // Key released) 14.448 Tj
-0 -17.0182 Td
-(6760     data = \(shift & E0ESC ? data : data & 0x7F\);) 31.906 Tj
-0 -18.3273 Td
-(6761     shift &= ~\(shiftcode[data] | E0ESC\);) 27.09 Tj
-0 -19.6364 Td
-(6762     goto out;) 10.836 Tj
-0 -20.9455 Td
-(6763   } else if\(shift & E0ESC\) {) 19.866 Tj
-0 -22.2545 Td
-(6764     // Last character was an E0 escape; or with 0x80) 34.314 Tj
-0 -23.5636 Td
-(6765     data |= 0x80;) 13.244 Tj
-0 -24.8727 Td
-(6766     shift &= ~E0ESC;) 15.05 Tj
-0 -26.1818 Td
-(6767   }) 4.816 Tj
-0 -27.4909 Td
-(6768 ) 3.01 Tj
-0 -28.8 Td
-(6769   shift |= shiftcode[data];) 19.264 Tj
-0 -30.1091 Td
-(6770   shift ^= togglecode[data];) 19.866 Tj
-0 -31.4182 Td
-(6771 ) 3.01 Tj
-0 -32.7273 Td
-(6772   c = charcode[shift & \(CTL | SHIFT\)][data];) 29.498 Tj
-0 -34.0364 Td
-(6773   if\(shift & CAPSLOCK\) {) 17.458 Tj
-0 -35.3454 Td
-(6774     if\('a' <= c && c <= 'z'\)) 19.866 Tj
-0 -36.6545 Td
-(6775       c += 'A' - 'a';) 15.652 Tj
-0 -37.9636 Td
-(6776     else if\('A' <= c && c <= 'Z'\)) 22.876 Tj
-0 -39.2727 Td
-(6777       c += 'a' - 'A';) 15.652 Tj
-0 -40.5818 Td
-(6778   }) 4.816 Tj
-0 -41.8909 Td
-(6779 ) 3.01 Tj
-0 -43.2 Td
-(6780   switch\(c\){) 10.234 Tj
-0 -44.5091 Td
-(6781   case 0:) 8.428 Tj
-0 -45.8182 Td
-(6782     // Ignore unknown keystrokes.) 22.876 Tj
-0 -47.1272 Td
-(6783     break;) 9.03 Tj
-0 -48.4363 Td
-(6784 ) 3.01 Tj
-0 -49.7454 Td
-(6785   case C\('T'\):) 11.438 Tj
-0 -51.0545 Td
-(6786     cprintf\("#"\);  // Let user know we're still alive.) 35.518 Tj
-0 -52.3636 Td
-(6787     break;) 9.03 Tj
-0 -53.6727 Td
-(6788 ) 3.01 Tj
-0 -54.9818 Td
-(6789   case C\('P'\):) 11.438 Tj
-0 -56.2909 Td
-(6790     procdump\(\);) 12.04 Tj
-0 -57.6 Td
-(6791     break;) 9.03 Tj
-0 -58.9091 Td
-(6792 ) 3.01 Tj
-0 -60.2181 Td
-(6793   default:) 9.03 Tj
-0 -61.5272 Td
-(6794     if\(\(\(kbd_w + 1\) % KBD_BUF\) != kbd_r\){) 27.692 Tj
-0 -62.8363 Td
-(6795       kbd_buf[kbd_w++] = c;) 19.264 Tj
-0 -64.1454 Td
-(6796       if\(kbd_w >= KBD_BUF\)) 18.662 Tj
-0 -65.4545 Td
-(6797         kbd_w = 0;) 13.846 Tj
-0 -66.7636 Td
-(6798       wakeup\(&kbd_r\);) 15.652 Tj
-0 -68.0727 Td
-(6799     }) 6.02 Tj
-0 -72 Td
-(Sheet 67) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sh.c  Page 7) 152.898 Tj
+0 -28.4801 Td
+(7050 // Parsing) 65.5277 Tj
+0 -37.9735 Td
+(7051 ) 21.8426 Tj
+0 -47.4668 Td
+(7052 char whitespace[] = " \\t\\r\\n\\v";) 161.635 Tj
+0 -56.9602 Td
+(7053 char symbols[] = "<|>&;\(\)";) 139.792 Tj
+0 -66.4535 Td
+(7054 ) 21.8426 Tj
+0 -75.9469 Td
+(7055 int) 34.9481 Tj
+0 -85.4403 Td
+(7056 gettoken\(char **ps, char *es, char **q, char **eq\)) 240.268 Tj
+0 -94.9336 Td
+(7057 {) 26.2111 Tj
+0 -104.427 Td
+(7058   char *s;) 65.5277 Tj
+0 -113.92 Td
+(7059   int ret;) 65.5277 Tj
+0 -123.414 Td
+(7060 ) 21.8426 Tj
+0 -132.907 Td
+(7061   s = *ps;) 65.5277 Tj
+0 -142.4 Td
+(7062   while\(s < es && strchr\(whitespace, *s\)\)) 200.952 Tj
+0 -151.894 Td
+(7063     s++;) 56.7907 Tj
+0 -161.387 Td
+(7064   if\(q\)) 52.4222 Tj
+0 -170.88 Td
+(7065     *q = s;) 69.8962 Tj
+0 -180.374 Td
+(7066   ret = *s;) 69.8962 Tj
+0 -189.867 Td
+(7067   switch\(*s\){) 78.6333 Tj
+0 -199.361 Td
+(7068   case 0:) 61.1592 Tj
+0 -208.854 Td
+(7069     break;) 65.5277 Tj
+0 -218.347 Td
+(7070   case '|':) 69.8962 Tj
+0 -227.841 Td
+(7071   case '\(':) 69.8962 Tj
+0 -237.334 Td
+(7072   case '\)':) 69.8962 Tj
+0 -246.827 Td
+(7073   case ';':) 69.8962 Tj
+0 -256.321 Td
+(7074   case '&':) 69.8962 Tj
+0 -265.814 Td
+(7075   case '<':) 69.8962 Tj
+0 -275.307 Td
+(7076     s++;) 56.7907 Tj
+0 -284.801 Td
+(7077     break;) 65.5277 Tj
+0 -294.294 Td
+(7078   case '>':) 69.8962 Tj
+0 -303.788 Td
+(7079     s++;) 56.7907 Tj
+0 -313.281 Td
+(7080     if\(*s == '>'\){) 100.476 Tj
+0 -322.774 Td
+(7081       ret = '+';) 91.7388 Tj
+0 -332.268 Td
+(7082       s++;) 65.5277 Tj
+0 -341.761 Td
+(7083     }) 43.6851 Tj
+0 -351.254 Td
+(7084     break;) 65.5277 Tj
+0 -360.748 Td
+(7085   default:) 65.5277 Tj
+0 -370.241 Td
+(7086     ret = 'a';) 83.0018 Tj
+0 -379.734 Td
+(7087     while\(s < es && !strchr\(whitespace, *s\) && !strchr\(\
+symbols, *s\)\)) 318.902 Tj
+0 -389.228 Td
+(7088       s++;) 65.5277 Tj
+0 -398.721 Td
+(7089     break;) 65.5277 Tj
+0 -408.214 Td
+(7090   }) 34.9481 Tj
+0 -417.708 Td
+(7091   if\(eq\)) 56.7907 Tj
+0 -427.201 Td
+(7092     *eq = s;) 74.2647 Tj
+0 -436.695 Td
+(7093 ) 21.8426 Tj
+0 -446.188 Td
+(7094   while\(s < es && strchr\(whitespace, *s\)\)) 200.952 Tj
+0 -455.681 Td
+(7095     s++;) 56.7907 Tj
+0 -465.175 Td
+(7096   *ps = s;) 65.5277 Tj
+0 -474.668 Td
+(7097   return ret;) 78.6333 Tj
+0 -484.161 Td
+(7098 }) 26.2111 Tj
+0 -493.655 Td
+(7099 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 70) 34.9481 Tj
 Q
 Q
 Q
 showpage
 %%PageTrailer
 pdfEndPage
-%%Page: 75 75
+%%Page: 78 78
 %%BeginPageSetup
 %%PageOrientation: Landscape
 pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
 %%EndPageSetup
 [] 0 d
 1 i
@@ -20669,241 +22931,521 @@ pdfStartPage
 0 J
 10 M
 1 w
-0 g
-0 G
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+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.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sh.c  Page 8) 152.898 Tj
+0 -28.4801 Td
+(7100 int) 34.9481 Tj
+0 -37.9735 Td
+(7101 peek\(char **ps, char *es, char *toks\)) 183.478 Tj
+0 -47.4668 Td
+(7102 {) 26.2111 Tj
+0 -56.9602 Td
+(7103   char *s;) 65.5277 Tj
+0 -66.4535 Td
+(7104 ) 21.8426 Tj
+0 -75.9469 Td
+(7105   s = *ps;) 65.5277 Tj
+0 -85.4403 Td
+(7106   while\(s < es && strchr\(whitespace, *s\)\)) 200.952 Tj
+0 -94.9336 Td
+(7107     s++;) 56.7907 Tj
+0 -104.427 Td
+(7108   *ps = s;) 65.5277 Tj
+0 -113.92 Td
+(7109   return *s && strchr\(toks, *s\);) 161.635 Tj
+0 -123.414 Td
+(7110 }) 26.2111 Tj
+0 -132.907 Td
+(7111 ) 21.8426 Tj
+0 -142.4 Td
+(7112 struct cmd *parseline\(char**, char*\);) 183.478 Tj
+0 -151.894 Td
+(7113 struct cmd *parsepipe\(char**, char*\);) 183.478 Tj
+0 -161.387 Td
+(7114 struct cmd *parseexec\(char**, char*\);) 183.478 Tj
+0 -170.88 Td
+(7115 struct cmd *nulterminate\(struct cmd*\);) 187.846 Tj
+0 -180.374 Td
+(7116 ) 21.8426 Tj
+0 -189.867 Td
+(7117 struct cmd*) 69.8962 Tj
+0 -199.361 Td
+(7118 parsecmd\(char *s\)) 96.1073 Tj
+0 -208.854 Td
+(7119 {) 26.2111 Tj
+0 -218.347 Td
+(7120   char *es;) 69.8962 Tj
+0 -227.841 Td
+(7121   struct cmd *cmd;) 100.476 Tj
+0 -237.334 Td
+(7122 ) 21.8426 Tj
+0 -246.827 Td
+(7123   es = s + strlen\(s\);) 113.581 Tj
+0 -256.321 Td
+(7124   cmd = parseline\(&s, es\);) 135.424 Tj
+0 -265.814 Td
+(7125   peek\(&s, es, ""\);) 104.844 Tj
+0 -275.307 Td
+(7126   if\(s != es\){) 83.0018 Tj
+0 -284.801 Td
+(7127     printf\(2, "leftovers: %s\\n", s\);) 179.109 Tj
+0 -294.294 Td
+(7128     panic\("syntax"\);) 109.213 Tj
+0 -303.788 Td
+(7129   }) 34.9481 Tj
+0 -313.281 Td
+(7130   nulterminate\(cmd\);) 109.213 Tj
+0 -322.774 Td
+(7131   return cmd;) 78.6333 Tj
+0 -332.268 Td
+(7132 }) 26.2111 Tj
+0 -341.761 Td
+(7133 ) 21.8426 Tj
+0 -351.254 Td
+(7134 struct cmd*) 69.8962 Tj
+0 -360.748 Td
+(7135 parseline\(char **ps, char *es\)) 152.898 Tj
+0 -370.241 Td
+(7136 {) 26.2111 Tj
+0 -379.734 Td
+(7137   struct cmd *cmd;) 100.476 Tj
+0 -389.228 Td
+(7138 ) 21.8426 Tj
+0 -398.721 Td
+(7139   cmd = parsepipe\(ps, es\);) 135.424 Tj
+0 -408.214 Td
+(7140   while\(peek\(ps, es, "&"\)\){) 139.792 Tj
+0 -417.708 Td
+(7141     gettoken\(ps, es, 0, 0\);) 139.792 Tj
+0 -427.201 Td
+(7142     cmd = backcmd\(cmd\);) 122.318 Tj
+0 -436.695 Td
+(7143   }) 34.9481 Tj
+0 -446.188 Td
+(7144   if\(peek\(ps, es, ";"\)\){) 126.687 Tj
+0 -455.681 Td
+(7145     gettoken\(ps, es, 0, 0\);) 139.792 Tj
+0 -465.175 Td
+(7146     cmd = listcmd\(cmd, parseline\(ps, es\)\);) 205.32 Tj
+0 -474.668 Td
+(7147   }) 34.9481 Tj
+0 -484.161 Td
+(7148   return cmd;) 78.6333 Tj
+0 -493.655 Td
+(7149 }) 26.2111 Tj
+0 -522.135 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.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sh.c  Page 9) 152.898 Tj
+0 -28.4801 Td
+(7150 struct cmd*) 69.8962 Tj
+0 -37.9735 Td
+(7151 parsepipe\(char **ps, char *es\)) 152.898 Tj
+0 -47.4668 Td
+(7152 {) 26.2111 Tj
+0 -56.9602 Td
+(7153   struct cmd *cmd;) 100.476 Tj
+0 -66.4535 Td
+(7154 ) 21.8426 Tj
+0 -75.9469 Td
+(7155   cmd = parseexec\(ps, es\);) 135.424 Tj
+0 -85.4403 Td
+(7156   if\(peek\(ps, es, "|"\)\){) 126.687 Tj
+0 -94.9336 Td
+(7157     gettoken\(ps, es, 0, 0\);) 139.792 Tj
+0 -104.427 Td
+(7158     cmd = pipecmd\(cmd, parsepipe\(ps, es\)\);) 205.32 Tj
+0 -113.92 Td
+(7159   }) 34.9481 Tj
+0 -123.414 Td
+(7160   return cmd;) 78.6333 Tj
+0 -132.907 Td
+(7161 }) 26.2111 Tj
+0 -142.4 Td
+(7162 ) 21.8426 Tj
+0 -151.894 Td
+(7163 struct cmd*) 69.8962 Tj
+0 -161.387 Td
+(7164 parseredirs\(struct cmd *cmd, char **ps, char *es\)) 235.9 Tj
+0 -170.88 Td
+(7165 {) 26.2111 Tj
+0 -180.374 Td
+(7166   int tok;) 65.5277 Tj
+0 -189.867 Td
+(7167   char *q, *eq;) 87.3703 Tj
+0 -199.361 Td
+(7168 ) 21.8426 Tj
+0 -208.854 Td
+(7169   while\(peek\(ps, es, "<>"\)\){) 144.161 Tj
+0 -218.347 Td
+(7170     tok = gettoken\(ps, es, 0, 0\);) 166.004 Tj
+0 -227.841 Td
+(7171     if\(gettoken\(ps, es, &q, &eq\) != 'a'\)) 196.583 Tj
+0 -237.334 Td
+(7172       panic\("missing file for redirection"\);) 214.057 Tj
+0 -246.827 Td
+(7173     switch\(tok\){) 91.7388 Tj
+0 -256.321 Td
+(7174     case '<':) 78.6333 Tj
+0 -265.814 Td
+(7175       cmd = redircmd\(cmd, q, eq, O_RDONLY, 0\);) 222.794 Tj
+0 -275.307 Td
+(7176       break;) 74.2647 Tj
+0 -284.801 Td
+(7177     case '>':) 78.6333 Tj
+0 -294.294 Td
+(7178       cmd = redircmd\(cmd, q, eq, O_WRONLY|O_CREATE, 1\);) 262.111 Tj
+0 -303.788 Td
+(7179       break;) 74.2647 Tj
+0 -313.281 Td
+(7180     case '+':  // >>) 109.213 Tj
+0 -322.774 Td
+(7181       cmd = redircmd\(cmd, q, eq, O_WRONLY|O_CREATE, 1\);) 262.111 Tj
+0 -332.268 Td
+(7182       break;) 74.2647 Tj
+0 -341.761 Td
+(7183     }) 43.6851 Tj
+0 -351.254 Td
+(7184   }) 34.9481 Tj
+0 -360.748 Td
+(7185   return cmd;) 78.6333 Tj
+0 -370.241 Td
+(7186 }) 26.2111 Tj
+0 -379.734 Td
+(7187 ) 21.8426 Tj
+0 -389.228 Td
+(7188 ) 21.8426 Tj
+0 -398.721 Td
+(7189 ) 21.8426 Tj
+0 -408.214 Td
+(7190 ) 21.8426 Tj
+0 -417.708 Td
+(7191 ) 21.8426 Tj
+0 -427.201 Td
+(7192 ) 21.8426 Tj
+0 -436.695 Td
+(7193 ) 21.8426 Tj
+0 -446.188 Td
+(7194 ) 21.8426 Tj
+0 -455.681 Td
+(7195 ) 21.8426 Tj
+0 -465.175 Td
+(7196 ) 21.8426 Tj
+0 -474.668 Td
+(7197 ) 21.8426 Tj
+0 -484.161 Td
+(7198 ) 21.8426 Tj
+0 -493.655 Td
+(7199 ) 21.8426 Tj
+0 -522.135 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
+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 -7.0183 7.25185 0 564.72 738.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/console.c  Page 9) 24.08 Tj
-0 -3.92728 Td
-(6800     break;) 9.03 Tj
-0 -5.23637 Td
-(6801   }) 4.816 Tj
-0 -6.54546 Td
-(6802 ) 3.01 Tj
-0 -7.85455 Td
-(6803 out:) 5.418 Tj
-0 -9.16364 Td
-(6804   release\(&kbd_lock\);) 15.652 Tj
-0 -10.4727 Td
-(6805 }) 3.612 Tj
-0 -11.7818 Td
-(6806 ) 3.01 Tj
-0 -13.0909 Td
-(6807 int) 4.816 Tj
-0 -14.4 Td
-(6808 console_read\(int minor, char *dst, int n\)) 27.692 Tj
-0 -15.7091 Td
-(6809 {) 3.612 Tj
-0 -17.0182 Td
-(6810   uint target = n;) 13.846 Tj
-0 -18.3273 Td
-(6811 ) 3.01 Tj
-0 -19.6364 Td
-(6812   acquire\(&kbd_lock\);) 15.652 Tj
-0 -20.9455 Td
-(6813 ) 3.01 Tj
-0 -22.2545 Td
-(6814   while\(kbd_w == kbd_r\) {) 18.06 Tj
-0 -23.5636 Td
-(6815     sleep\(&kbd_r, &kbd_lock\);) 20.468 Tj
-0 -24.8727 Td
-(6816   }) 4.816 Tj
-0 -26.1818 Td
-(6817 ) 3.01 Tj
-0 -27.4909 Td
-(6818   while\(n > 0 && kbd_w != kbd_r\){) 22.876 Tj
-0 -28.8 Td
-(6819     *dst = \(kbd_buf[kbd_r]\) & 0xff;) 24.08 Tj
-0 -30.1091 Td
-(6820     cons_putc\(*dst & 0xff\);) 19.264 Tj
-0 -31.4182 Td
-(6821     dst++;) 9.03 Tj
-0 -32.7273 Td
-(6822     --n;) 7.826 Tj
-0 -34.0364 Td
-(6823     kbd_r++;) 10.234 Tj
-0 -35.3454 Td
-(6824     if\(kbd_r >= KBD_BUF\)) 17.458 Tj
-0 -36.6545 Td
-(6825       kbd_r = 0;) 12.642 Tj
-0 -37.9636 Td
-(6826   }) 4.816 Tj
-0 -39.2727 Td
-(6827 ) 3.01 Tj
-0 -40.5818 Td
-(6828   release\(&kbd_lock\);) 15.652 Tj
-0 -41.8909 Td
-(6829 ) 3.01 Tj
-0 -43.2 Td
-(6830   return target - n;) 15.05 Tj
-0 -44.5091 Td
-(6831 }) 3.612 Tj
-0 -45.8182 Td
-(6832 ) 3.01 Tj
-0 -47.1272 Td
-(6833 void) 5.418 Tj
-0 -48.4363 Td
-(6834 console_init\(\)) 11.438 Tj
-0 -49.7454 Td
-(6835 {) 3.612 Tj
-0 -51.0545 Td
-(6836   initlock\(&console_lock, "console"\);) 25.284 Tj
-0 -52.3636 Td
-(6837   initlock\(&kbd_lock, "kbd"\);) 20.468 Tj
-0 -53.6727 Td
-(6838 ) 3.01 Tj
-0 -54.9818 Td
-(6839   devsw[CONSOLE].write = console_write;) 26.488 Tj
-0 -56.2909 Td
-(6840   devsw[CONSOLE].read = console_read;) 25.284 Tj
-0 -57.6 Td
-(6841 ) 3.01 Tj
-0 -58.9091 Td
-(6842   irq_enable\(IRQ_KBD\);) 16.254 Tj
-0 -60.2181 Td
-(6843   ioapic_enable\(IRQ_KBD, 0\);) 19.866 Tj
-0 -61.5272 Td
-(6844 ) 3.01 Tj
-0 -62.8363 Td
-(6845   use_console_lock = 1;) 16.856 Tj
-0 -64.1454 Td
-(6846 }) 3.612 Tj
-0 -65.4545 Td
-(6847 ) 3.01 Tj
-0 -66.7636 Td
-(6848 ) 3.01 Tj
-0 -68.0727 Td
-(6849 ) 3.01 Tj
-0 -72 Td
-(Sheet 68) 4.816 Tj
+[0 -0.967854 1 0 564.72 738.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sh.c  Page 10) 157.267 Tj
+0 -28.4801 Td
+(7200 struct cmd*) 69.8962 Tj
+0 -37.9735 Td
+(7201 parseblock\(char **ps, char *es\)) 157.267 Tj
+0 -47.4668 Td
+(7202 {) 26.2111 Tj
+0 -56.9602 Td
+(7203   struct cmd *cmd;) 100.476 Tj
+0 -66.4535 Td
+(7204 ) 21.8426 Tj
+0 -75.9469 Td
+(7205   if\(!peek\(ps, es, "\("\)\)) 126.687 Tj
+0 -85.4403 Td
+(7206     panic\("parseblock"\);) 126.687 Tj
+0 -94.9336 Td
+(7207   gettoken\(ps, es, 0, 0\);) 131.055 Tj
+0 -104.427 Td
+(7208   cmd = parseline\(ps, es\);) 135.424 Tj
+0 -113.92 Td
+(7209   if\(!peek\(ps, es, "\)"\)\)) 126.687 Tj
+0 -123.414 Td
+(7210     panic\("syntax - missing \)"\);) 161.635 Tj
+0 -132.907 Td
+(7211   gettoken\(ps, es, 0, 0\);) 131.055 Tj
+0 -142.4 Td
+(7212   cmd = parseredirs\(cmd, ps, es\);) 166.004 Tj
+0 -151.894 Td
+(7213   return cmd;) 78.6333 Tj
+0 -161.387 Td
+(7214 }) 26.2111 Tj
+0 -170.88 Td
+(7215 ) 21.8426 Tj
+0 -180.374 Td
+(7216 struct cmd*) 69.8962 Tj
+0 -189.867 Td
+(7217 parseexec\(char **ps, char *es\)) 152.898 Tj
+0 -199.361 Td
+(7218 {) 26.2111 Tj
+0 -208.854 Td
+(7219   char *q, *eq;) 87.3703 Tj
+0 -218.347 Td
+(7220   int tok, argc;) 91.7388 Tj
+0 -227.841 Td
+(7221   struct execcmd *cmd;) 117.95 Tj
+0 -237.334 Td
+(7222   struct cmd *ret;) 100.476 Tj
+0 -246.827 Td
+(7223 ) 21.8426 Tj
+0 -256.321 Td
+(7224   if\(peek\(ps, es, "\("\)\)) 122.318 Tj
+0 -265.814 Td
+(7225     return parseblock\(ps, es\);) 152.898 Tj
+0 -275.307 Td
+(7226 ) 21.8426 Tj
+0 -284.801 Td
+(7227   ret = execcmd\(\);) 100.476 Tj
+0 -294.294 Td
+(7228   cmd = \(struct execcmd*\)ret;) 148.529 Tj
+0 -303.788 Td
+(7229 ) 21.8426 Tj
+0 -313.281 Td
+(7230   argc = 0;) 69.8962 Tj
+0 -322.774 Td
+(7231   ret = parseredirs\(ret, ps, es\);) 166.004 Tj
+0 -332.268 Td
+(7232   while\(!peek\(ps, es, "|\)&;"\)\){) 157.267 Tj
+0 -341.761 Td
+(7233     if\(\(tok=gettoken\(ps, es, &q, &eq\)\) == 0\)) 214.057 Tj
+0 -351.254 Td
+(7234       break;) 74.2647 Tj
+0 -360.748 Td
+(7235     if\(tok != 'a'\)) 100.476 Tj
+0 -370.241 Td
+(7236       panic\("syntax"\);) 117.95 Tj
+0 -379.734 Td
+(7237     cmd->argv[argc] = q;) 126.687 Tj
+0 -389.228 Td
+(7238     cmd->eargv[argc] = eq;) 135.424 Tj
+0 -398.721 Td
+(7239     argc++;) 69.8962 Tj
+0 -408.214 Td
+(7240     if\(argc >= MAXARGS\)) 122.318 Tj
+0 -417.708 Td
+(7241       panic\("too many args"\);) 148.529 Tj
+0 -427.201 Td
+(7242     ret = parseredirs\(ret, ps, es\);) 174.741 Tj
+0 -436.695 Td
+(7243   }) 34.9481 Tj
+0 -446.188 Td
+(7244   cmd->argv[argc] = 0;) 117.95 Tj
+0 -455.681 Td
+(7245   cmd->eargv[argc] = 0;) 122.318 Tj
+0 -465.175 Td
+(7246   return ret;) 78.6333 Tj
+0 -474.668 Td
+(7247 }) 26.2111 Tj
+0 -484.161 Td
+(7248 ) 21.8426 Tj
+0 -493.655 Td
+(7249 ) 21.8426 Tj
+0 -522.135 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 -7.0183 7.25185 0 564.72 392.865] Tm
-0 0 Td
-/F10_0 1 Tf
-(Sep  8 11:37 2006  xv6/8253pit.c  Page 1) 24.08 Tj
-0 -3.92728 Td
-(6850 #include "types.h") 13.846 Tj
-0 -5.23637 Td
-(6851 #include "x86.h") 12.642 Tj
-0 -6.54546 Td
-(6852 #include "defs.h") 13.244 Tj
-0 -7.85455 Td
-(6853 #include "traps.h") 13.846 Tj
-0 -9.16364 Td
-(6854 ) 3.01 Tj
-0 -10.4727 Td
-(6855 // Register definitions for the Intel) 25.284 Tj
-0 -11.7818 Td
-(6856 // 8253/8254/82C54 Programmable Interval Timer \(PIT\).) 34.916 Tj
-0 -13.0909 Td
-(6857 ) 3.01 Tj
-0 -14.4 Td
-(6858 #define IO_TIMER1       0x040           // 8253 Timer #1) 36.722 Tj
-0 -15.7091 Td
-(6859 #define IO_TIMER2       0x048           // 8253 Timer #2 \(EISA only\)) 43.946 Tj
-0 -17.0182 Td
-(6860 ) 3.01 Tj
-0 -18.3273 Td
-(6861 // Frequency of all three count-down timers; \(TIMER_FREQ/freq\) is the) 44.548 Tj
-0 -19.6364 Td
-(6862 // appropriate count to generate a frequency of freq hz.) 36.722 Tj
-0 -20.9455 Td
-(6863 ) 3.01 Tj
-0 -22.2545 Td
-(6864 #define TIMER_FREQ      1193182) 21.672 Tj
-0 -23.5636 Td
-(6865 #define TIMER_DIV\(x\)    \(\(TIMER_FREQ+\(x\)/2\)/\(x\)\)) 31.906 Tj
-0 -24.8727 Td
-(6866 ) 3.01 Tj
-0 -26.1818 Td
-(6867 #define TIMER_CNTR0     \(IO_TIMER1 + 0\) // timer 0 counter port) 40.936 Tj
-0 -27.4909 Td
-(6868 #define TIMER_CNTR1     \(IO_TIMER1 + 1\) // timer 1 counter port) 40.936 Tj
-0 -28.8 Td
-(6869 #define TIMER_CNTR2     \(IO_TIMER1 + 2\) // timer 2 counter port) 40.936 Tj
-0 -30.1091 Td
-(6870 #define TIMER_MODE      \(IO_TIMER1 + 3\) // timer mode port) 37.926 Tj
-0 -31.4182 Td
-(6871 #define TIMER_SEL0      0x00    // select counter 0) 33.712 Tj
-0 -32.7273 Td
-(6872 #define TIMER_SEL1      0x40    // select counter 1) 33.712 Tj
-0 -34.0364 Td
-(6873 #define TIMER_SEL2      0x80    // select counter 2) 33.712 Tj
-0 -35.3454 Td
-(6874 #define TIMER_INTTC     0x00    // mode 0, intr on terminal cnt) 40.936 Tj
-0 -36.6545 Td
-(6875 #define TIMER_ONESHOT   0x02    // mode 1, one shot) 33.712 Tj
-0 -37.9636 Td
-(6876 #define TIMER_RATEGEN   0x04    // mode 2, rate generator) 37.324 Tj
-0 -39.2727 Td
-(6877 #define TIMER_SQWAVE    0x06    // mode 3, square wave) 35.518 Tj
-0 -40.5818 Td
-(6878 #define TIMER_SWSTROBE  0x08    // mode 4, s/w triggered strobe) 40.936 Tj
-0 -41.8909 Td
-(6879 #define TIMER_HWSTROBE  0x0a    // mode 5, h/w triggered strobe) 40.936 Tj
-0 -43.2 Td
-(6880 #define TIMER_LATCH     0x00    // latch counter for reading) 39.13 Tj
-0 -44.5091 Td
-(6881 #define TIMER_LSB       0x10    // r/w counter LSB) 33.11 Tj
-0 -45.8182 Td
-(6882 #define TIMER_MSB       0x20    // r/w counter MSB) 33.11 Tj
-0 -47.1272 Td
-(6883 #define TIMER_16BIT     0x30    // r/w counter 16 bits, LSB first) 42.14 Tj
-0 -48.4363 Td
-(6884 #define TIMER_BCD       0x01    // count in BCD) 31.304 Tj
-0 -49.7454 Td
-(6885 ) 3.01 Tj
-0 -51.0545 Td
-(6886 void) 5.418 Tj
-0 -52.3636 Td
-(6887 pit8253_timerinit\(void\)) 16.856 Tj
-0 -53.6727 Td
-(6888 {) 3.612 Tj
-0 -54.9818 Td
-(6889   // initialize 8253 clock to interrupt 100 times/sec) 34.916 Tj
-0 -56.2909 Td
-(6890   outb\(TIMER_MODE, TIMER_SEL0 | TIMER_RATEGEN | TIMER_16BIT\);) 39.732 Tj
-0 -57.6 Td
-(6891   outb\(IO_TIMER1, TIMER_DIV\(100\) % 256\);) 27.09 Tj
-0 -58.9091 Td
-(6892   outb\(IO_TIMER1, TIMER_DIV\(100\) / 256\);) 27.09 Tj
-0 -60.2181 Td
-(6893   irq_enable\(IRQ_TIMER\);) 17.458 Tj
-0 -61.5272 Td
-(6894 }) 3.612 Tj
-0 -62.8363 Td
-(6895 ) 3.01 Tj
-0 -64.1454 Td
-(6896 ) 3.01 Tj
-0 -65.4545 Td
-(6897 ) 3.01 Tj
-0 -66.7636 Td
-(6898 ) 3.01 Tj
-0 -68.0727 Td
-(6899 ) 3.01 Tj
-0 -72 Td
-(Sheet 68) 4.816 Tj
+[0 -0.967854 1 0 564.72 392.864] Tm
+0 0 Td
+/F9_0 8.70222 Tf
+(Aug 30 10:08 2007  xv6/sh.c  Page 11) 157.267 Tj
+0 -28.4801 Td
+(7250 // NUL-terminate all the counted strings.) 200.952 Tj
+0 -37.9735 Td
+(7251 struct cmd*) 69.8962 Tj
+0 -47.4668 Td
+(7252 nulterminate\(struct cmd *cmd\)) 148.529 Tj
+0 -56.9602 Td
+(7253 {) 26.2111 Tj
+0 -66.4535 Td
+(7254   int i;) 56.7907 Tj
+0 -75.9469 Td
+(7255   struct backcmd *bcmd;) 122.318 Tj
+0 -85.4403 Td
+(7256   struct execcmd *ecmd;) 122.318 Tj
+0 -94.9336 Td
+(7257   struct listcmd *lcmd;) 122.318 Tj
+0 -104.427 Td
+(7258   struct pipecmd *pcmd;) 122.318 Tj
+0 -113.92 Td
+(7259   struct redircmd *rcmd;) 126.687 Tj
+0 -123.414 Td
+(7260 ) 21.8426 Tj
+0 -132.907 Td
+(7261   if\(cmd == 0\)) 83.0018 Tj
+0 -142.4 Td
+(7262     return 0;) 78.6333 Tj
+0 -151.894 Td
+(7263 ) 21.8426 Tj
+0 -161.387 Td
+(7264   switch\(cmd->type\){) 109.213 Tj
+0 -170.88 Td
+(7265   case EXEC:) 74.2647 Tj
+0 -180.374 Td
+(7266     ecmd = \(struct execcmd*\)cmd;) 161.635 Tj
+0 -189.867 Td
+(7267     for\(i=0; ecmd->argv[i]; i++\)) 161.635 Tj
+0 -199.361 Td
+(7268       *ecmd->eargv[i] = 0;) 135.424 Tj
+0 -208.854 Td
+(7269     break;) 65.5277 Tj
+0 -218.347 Td
+(7270 ) 21.8426 Tj
+0 -227.841 Td
+(7271   case REDIR:) 78.6333 Tj
+0 -237.334 Td
+(7272     rcmd = \(struct redircmd*\)cmd;) 166.004 Tj
+0 -246.827 Td
+(7273     nulterminate\(rcmd->cmd\);) 144.161 Tj
+0 -256.321 Td
+(7274     *rcmd->efile = 0;) 113.581 Tj
+0 -265.814 Td
+(7275     break;) 65.5277 Tj
+0 -275.307 Td
+(7276 ) 21.8426 Tj
+0 -284.801 Td
+(7277   case PIPE:) 74.2647 Tj
+0 -294.294 Td
+(7278     pcmd = \(struct pipecmd*\)cmd;) 161.635 Tj
+0 -303.788 Td
+(7279     nulterminate\(pcmd->left\);) 148.529 Tj
+0 -313.281 Td
+(7280     nulterminate\(pcmd->right\);) 152.898 Tj
+0 -322.774 Td
+(7281     break;) 65.5277 Tj
+0 -332.268 Td
+(7282 ) 21.8426 Tj
+0 -341.761 Td
+(7283   case LIST:) 74.2647 Tj
+0 -351.254 Td
+(7284     lcmd = \(struct listcmd*\)cmd;) 161.635 Tj
+0 -360.748 Td
+(7285     nulterminate\(lcmd->left\);) 148.529 Tj
+0 -370.241 Td
+(7286     nulterminate\(lcmd->right\);) 152.898 Tj
+0 -379.734 Td
+(7287     break;) 65.5277 Tj
+0 -389.228 Td
+(7288 ) 21.8426 Tj
+0 -398.721 Td
+(7289   case BACK:) 74.2647 Tj
+0 -408.214 Td
+(7290     bcmd = \(struct backcmd*\)cmd;) 161.635 Tj
+0 -417.708 Td
+(7291     nulterminate\(bcmd->cmd\);) 144.161 Tj
+0 -427.201 Td
+(7292     break;) 65.5277 Tj
+0 -436.695 Td
+(7293   }) 34.9481 Tj
+0 -446.188 Td
+(7294   return cmd;) 78.6333 Tj
+0 -455.681 Td
+(7295 }) 26.2111 Tj
+0 -465.175 Td
+(7296 ) 21.8426 Tj
+0 -474.668 Td
+(7297 ) 21.8426 Tj
+0 -484.161 Td
+(7298 ) 21.8426 Tj
+0 -493.655 Td
+(7299 ) 21.8426 Tj
+0 -522.135 Td
+(Sheet 72) 34.9481 Tj
 Q
 Q
 Q
@@ -20914,5 +23456,5 @@ pdfEndPage
 %%Trailer
 end
 %%DocumentSuppliedResources:
-%%+ font LTWFJF+OurCharSet
+%%+ font LucidaSans-Typewriter83
 %%EOF