From 35a6cf84ec5ee903d2c06726f89a7816fd39d267 Mon Sep 17 00:00:00 2001
From: kolya <kolya>
Date: Wed, 3 Sep 2008 14:05:52 +0000
Subject: make pdf, ps, tarball

---
 xv6.ps | 25153 ++++++++++++++++++++++++++++++++-------------------------------
 1 file changed, 12698 insertions(+), 12455 deletions(-)

(limited to 'xv6.ps')

diff --git a/xv6.ps b/xv6.ps
index b73ae3e..4a90f7b 100644
--- a/xv6.ps
+++ b/xv6.ps
@@ -1,16 +1,16 @@
 %!PS-Adobe-3.0
-%%Creator: xpdf/pdftops 3.01
 %%LanguageLevel: 2
 %%DocumentSuppliedResources: (atend)
 %%DocumentMedia: plain 612 792 0 () ()
 %%BoundingBox: 0 0 612 792
-%%Pages: 79
+%%Pages: 80
 %%EndComments
 %%BeginDefaults
 %%PageMedia: plain
 %%EndDefaults
 %%BeginProlog
-%%BeginResource: procset xpdf 3.01 0
+%%BeginResource: procset xpdf 3.00 0
+%%Copyright: Copyright 1996-2004 Glyph & Cog, LLC
 /xpdf 75 dict def xpdf begin
 % PDF special state
 /pdfDictSize 15 def
@@ -135,6 +135,7 @@
 % clipping operators
 /W { clip newpath } def
 /W* { eoclip newpath } def
+/Ws { strokepath clip newpath } def
 % text state operators
 /Tc { /pdfCharSpacing exch def } def
 /Tf { dup /pdfFontSize exch def
@@ -257,6 +258,7 @@
     not { pop exit } if
     (%-EOD-) eq { exit } if } loop
 } def
+/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
 /pdfImClip {
   gsave
   0 2 4 index length 1 sub {
@@ -338,7 +340,8 @@
     dup 4 3 roll exch 4 index axialSH
     exch 3 2 roll axialSH
   } {
-    pop 2 copy add 0.5 mul axialCol sc
+    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 {
@@ -382,11 +385,24 @@
     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*
+    pop 2 copy add 0.5 mul dt mul t0 add
+    radialCol sc
+    encl {
+      exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
+      0 360 arc h
+      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
+      360 0 arcn h f
+    } {
+      2 copy
+      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
+      a1 a2 arcn
+      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
+      a2 a1 arcn h
+      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
+      a1 a2 arc
+      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
+      a2 a1 arc h f
+    } ifelse
   } ifelse
 } def
 end
@@ -394,8 +410,8 @@ end
 %%EndProlog
 %%BeginSetup
 xpdf begin
-%%BeginResource: font LucidaSans-Typewriter83
-%!FontType1-1.0: LucidaSans-Typewriter83
+%%BeginResource: font YLWBJI+LucidaSans-Typewriter83
+%!FontType1-1.0: YLWBJI+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
@@ -406,10 +422,10 @@ xpdf begin
 /UnderlinePosition 0 def
 /UnderlineThickness 0 def
 end readonly def
-/FontName /LucidaSans-Typewriter83 def
+/FontName /YLWBJI+LucidaSans-Typewriter83 def
 /PaintType 0 def
 /FontType 1 def
-/FontMatrix [0.000833333 0 0 0.000833333 0 0] readonly def
+/FontMatrix [0.00083333 0 0 0.00083333 0 0] readonly def
 /FontBBox [0 -205 602 783] readonly def
 /StrokeWidth 0 def
 /Encoding 256 array
@@ -521,335 +537,335 @@ BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97
 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF5
 C2A9054AD59AE4D5522D8745045620C9C40EAB675A6FE53511D83C04968F37DE
 389C3A7A551DC79580FF1B382205C5951A9F8E7B6CEF33E027D608C14A394033
-1E603A09B3061B66BB71AC1D2A232B5F2BC9481D7D44F334ACCBBF6538A439A3
-FE8DA1ABE05931A20F8FC365A0F90C9A22578FEBDD03E4201D2887923DD20ED9
-2F8F50AA500DE6414F5521ACCBBA45FBD55A4882C7485B52146BD36775948914
-F8D5FB4C38AFAA25CC8946C7A7DBA010B186D6B5B07DA514976B3CC03535B838
-7B3B0BE3D2A1813A3B406846433DF6235D79BA455E54E35184F42053C1FB0105
-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
+1E603A09B3061B66BB71AC1D2A232B5F2BC9481D7D44F334ACCBBF6537EF8BC7
+075D89E6422C4E0A415BF3A1B001A284566A4DF8C6877CB0C70D67F5E7FA25E1
+90435DC2AFD452D1184CEA4CBF9F81F8CD7BE3B6EBA8395A40925FDDEB186DE2
+AB0372CF67C17BEE733C73CA29E00C3909E960A0417FCACC7211EBF3DD7225F0
+6F4FB7DBA35BF59A21014E1066BF090958F991C2BFD22CCA4189376B0BBFE928
+8CE7E8D06A551258E5938EB0F85097E557F3C3BA2C163A2E572B4DF44E90CDF5
+0B39625CC6ACE15BC6517F8A12C1B93F074CC50585B9AB7EDD0B9C5C1A62B70D
+CD8DB8D38BE368A472453A6857C6BD02D53075513414D13BA1A24CE212F22191
+07B898A9017A3A99BDADF041BED9A114BD03BB18F7DE5A50740B185E422B8C48
+309D6D5FE5EA50CC3F908AFA26EE4DEC39EBC3D70FF3BB8B3A3A944A0DCC6146
+32AE70E4FAF468F45769385AA9CE3AEDE458C88F9FE607FF162B8F190654854A
+F7C4EF574ABFF28A9A3305771590FCC4ABD946870EB84C1936CA19FD940EE6AE
+640BC281178A404CC709C437E17C61CABA72E94D3B9BE9F187B807D43F883E55
+1AC39D4BE693E7341918F23D76809DFD06A103726057B354B409C08830817659
+428E7F09A6016535CA1C526AAE92B7D90B7AD619269EB3A6DEEE48BF53C6C228
+C705837B10C2402ED51A306E771911A1016D089DF42372D756E2346265E01962
+B0E784394FEA778F473FE994F2CB393B6C04DB967C8F585947A3F30329F66169
+59627B9268FDEF0DEDD35B31B7D0345E708C959739676FB4CE239AB72D834D51
+E679B4152852C1BA90E23BE472742369FAF00ED1E82BB6ECD8A09CF36B2E57D0
+AEAAB95A829A7E793F38C4D0E6A1355BB9C6AE4F0ADF76BBAE901546ECB36D1E
+7C5650A7999BAAFD6181C1CFECFEA39A2D51C26CA3CC2BAB6EBEB0D31D3532DD
+6A6A565A56A6A01E04ED68112910A0D608024AEEEC0D0F389B5441D0E126935E
+2063B9150A40657F1C88FC5F4BE2C06AE21167DA0F59E651CEDA2CB33349FBF4
+6F5642DE2B5DDFDCF0C0A172D0D1407FDC7C65FF3814709188F506A53C404A19
+02FE1637895E943792E22E22E5D4BCBD766D18D1088F2A11459139D370D4ADBB
+8BC75909D8A85C8E2E85948DEFB74401BF22A6DA4C14C09F1C8F0DF829F1970B
+AE6B468573DC729139A2971EB56517AA6D6525E46B5F9930108C7D4B951EB0C4
+707E410574E7195FA7297A29E6D8B5ABD78A15CD0135F3BD612AD12BB0D154CD
+86556BACB23743FFE1774040A1C435CF8E4409E75CEE0F028FD12BE41556CC6E
+6C850B9053E699C71557FD6B20D83F0BBF57D935CFEDA809B03FD14478C2A8C7
+6609217B9F289342990C415257D8CA8A5174589B50AC913FCE33A9F32CF42140
+F323ED26DD43970B21107F814F9F2CA21C6A88474BDF5EF924956086CB6BC729
+3FBDB874B7A414B14B6BAEACAE671F7944DCC75422E1630F78732131F85ED6BB
+3662518EB04A41F4938B1383CFBEDDEED4096C7615CF8D72101D311FCC95D874
+2C40F7FA4FB122EA1B1B0746E9D808AC671A21F04F7E76A6778E25FC3844078A
+A2A7B87206B299A27BAE8A89530B3D46579AAFCD5B03EAE3429E4B4BAC79F41E
+B68DFBF1ED48C121B7D38C7A51911898175E566ED5D1AF2DBF57EB473BFC8FEA
+44362C8E0CD77857D2FAFFEED06A98AE69E0A74B6B876069A460314E5B1847F8
+EE66F4931FA02F5E38D6857E8D0DD3550CB0B130B75EA89B02971280911B47D1
+A1E387581CF5565A4469BCCED698F1116AB57A4CAE6640E23021B10B62923A87
+1E145BDE3052FCB97EA36112168DA1B986E5A524CD3879E3B59550E8311A074E
+CF7A58F377F7CE22CB1270BA8E009C483D43E9B728D5AD5A124A0D6635F6E9CC
+53D52844E932EAC0CE58FF9A8B1A897C8DE57FC82F9C504FA222FA6BD83C7903
+8F09D475F15F5AAE7C8EE65F17E580D1A1D2979894C0EA1AAA00FAB3B9CBF68A
+67331607E61EADB2D9A24001B7B7E6ECADFC5BA3C8CB741413BA4D7C51A40447
+DBEAB6D524D72ADE296EB5E47F416CA680181035E41D14EC6532874F1DA7EAD3
+0B3A37E788CF39AF0CE722F67B2FADA9B926EBB32BA5F54651030871E19463EE
+3E82753DCB3915636A6851C48B94B7A77943A04BA972A534AF5D6B9CC41330CD
+6723F82581091C8121465769FA47055733456232B6DE1765EEF06223687656D5
+2170B0F8CE41590BB57C4F7B136A7BCA8A5BDAA982C420FB5749320521C180B7
+B8748A630DBD48884C55FCD2E7851E6BA6B81CFE27C7EBCB6D06CCC2E1BEB01D
+5D8AA1287BBB1EEF9E55852223A01E2E9A0757FFBF05DCDD6C045C5B322CD9C2
+51BDBE086B791721C47351C3D27057013C8600D9C229615DC859D530ED795B0C
+27AE86B4E6E7BE747201229D85A77EFD944DD59444C49684CCBF506661144236
+B8E38E0C1068600992ED230AF22B0CC5CA4D8BA1E3FF31F03CFC2BA540721674
+C3BD926730FBF88FCFD59474EA95D4774D133379355068CBFB5AA84306E52242
+467BF66E174CDEAB2CADB5D1B68F8253FDEBB6220A60668B1BCFA2C99B6B0F55
+2582D2ED3D88F3E47D51179A8E78B182E7AFD1E9D659DF8AC57747D2E74F5B39
+466B53A290657A325B6D6E952C5164AF7AE027914864D086BC0114F33B9D9E56
+A2B8A54A0464254F71AA9D975A20CB0AD1A6DCA4290378DDFD9A7118C6AE9ED7
+E050E9131C103B88CB27BE540AD84B655BCE04BE98C8B362703EC149B747CF6C
+45CE28C3690755EF00A86EA467E5D57954BD85CA993A736EFE0B18AFE53A2B2F
+8C7F0318388DFF640FE7D43A5803DBEB8AD80C59AE33EE163B4DBBD47C9EE083
+77B76A5E4ABA6DA587687C10984D8B34F6546E8D64468D228B4C2B16BB6370D6
+7D3F92714082450543341D53016172B4117C55FF506341215DD7726A6F8A217A
+E44F09BA273FEF22924706B0F50083C6E27B7AB6F5CE3C3EF4AFA9AE9DF17DDC
+53482B05A15A136AEDF71343061C0ECAA8C935E446A5F3CF3211C29CCE5C102C
+CEFAF415A5B6C411B3B7B01EC97954F0616F3C1AC4740A03C387E6214FCF78B4
+DD78208D75482CF9DB59A4B319A256935BE68E2E8351FEC06ED34F0CC6307571
+60992C344A45D7B208C9AE1F2880A7AB0366719B029D863A9B6015E29957A5D8
+3FC0A9548E25DBEBF728511CB3F4064CCDA0EAB5F7207C9816325A9932C5DC18
+7B1878F89994366AB65B02C9272B75E542E6A1AF85B677A74F674B4F1F6DB606
+FCF0D54594569ADBB8D98554461DEEA310182F8A42CCAAD24BA155CA17262F42
+A23CF3266C925A3B28C632419864E912F5D846F26B2BA8E41680E3E759C47AE6
+1F05DA9F88DD697109DE7F47AD90981E285C065CB239BBEAD6E351C936D778D5
+ED2F551008D997E8614BAFFA9292F5EC1737BFDDAA3AE5F76949A7CC7A5C9885
+9ED1B1FE17E56886B438B5D03198AEEA1483E261602E0ED3DE3476E2A74336B7
+4BD5F912224950284A62A476292E310C3623C3FC55642B1226078D8C98B8E258
+09BA085A3CBBDE128B69932DDD12C12BEFC96F698FB73C120C7E6C49196C063D
+AC8A0D23B3CC73770A99EF977EF93544099172992239AB7B6BF47E7EF8E0AA92
+1504B4FCC0C8447257BF63808C56467228A651714BB73C36D87F135A2365F9A4
+FDD65073CB982B77A2C8E583327B16681CDB8178502BF35600D063996718888A
+F3489512F4E33DC64E324FFCAD4396AB424A2FD8231D885379B0692386776FFE
+AC1242C735E7EE5CA55E3162044A430BBB5F1D5D23E8F09C883B38C653F81D3B
+48922522123301079AF07E412B0D8B1B388FEC2956DBFC267711619D1B58DFAC
+0D769E5551BE1D806EE8D98483F5F2B390D9B3835602EB2822C3E373016231B7
+C98C540796CFA5029769A9990A4AEE3EAF11C642E57DB4F8094AE067A8743538
+5D75E78C3DF3609A799195FABE087539BF9016802C8D9822E0DC3F054711DE70
+3422E701C6CB98FC04550D5F22C8729650313F56BF47919DE140861C50E71133
+937669C56BD769CF23003964C7364F6E2F18E3BD5E14191DD018785C13A3F687
+8CE0AC2577B5E66823F19F4F67799953E8C90E0B2A57C80C0EDA7F7BAD896039
+F8278D20AE307B9E6998FB1A20D8B35CC49BE10CDD1D8BCF23DB47DD4ABF0580
+34E7334431E4CF87DE972E4A007FDE2BFEE70D66CBC85D0D9574264659EFB7F8
+E02B5E5C655DCE6FFD54EDD844FDEFC4B39D072C188CB5A8F43CD6B2467BC9BE
+B44320B057A90B6A82EDCED67932DA29670662F1FE94E6D2EE1A562D19AD02B9
+D8E23529EAD2627260E56CAD7951B2C982E9CCBA68F9C8B95821E470ACB9C55B
+0A6C23D6E50A02F9E1D7B8C51CB20792638D0C24EEEF6F4BF271608B24A8AC96
+A7D536F1D40B0B85916E2B5325A1FC7000229C8E87ED5BF56D611BBD40A42C94
+4BE0B0CE264D65D2A47BB72E2B242F95157DC15A888CE0C15A8D12DC3EDCE489
+53059B5D2A04FFCC2D234CFF8A16D50E7EF7C95C808ADB52B3656392CFAA2892
+CEA1ADD997F67AF3526815CF1445F57856DEC918A3EF50D9634BDD22C007F0DB
+FEBA17DFDEFD9B60477142D7ABA06FBC976270EBD2FA9CDDA30C9994BC285FB8
+1B38EC16B08B7ABAF390FDDA2561B779A03D576A8C289784442A2A8E15BDB1B2
+2F26F1E0D9BD6DFF68E352D572978437DD65B882CB2720B27A782EE902A65B32
+C7DF2CCEC2C3D1AE1B62BB1E506C7C4CD6F09EBFE5FA1E3A42F9D2D40CC0EF66
+88D3C3BA56BD4E830FB4B096A342C82C97A13DA50908338989413607F7BD2E67
+52E219C6C3954C4737BC9026DBA18FEF07A79E1CDA6820465EDB5DF4366EE92B
+867E158B761270C04E3923B3DE5FCDD9D87832FF9482868A7A7EF14F4E626C5D
+A94903E4D8FCACBA2A8D65789D5425F3D3C77573DC2EDD7F98C9740B702A80CC
+F5408142674DD50707FAA48BFD1EF1DA182634E497B0D02ADA4031ECA6013E86
+1D56FEA51AD28D2A6CD5D39E7D89D1609DF2A5AC3DA3CD28E99E2CE638042213
+2E150804BF8190FE02A6695209C54185EE91F5FDD2DF9C71F6C8DDBA6D0A0EA6
+C8CAFA0CAEAF4385B08287FF18B02F1EC6507991832DE49B691B205D937D79F1
+6D1DC6C6261AFDED7539322A9F0D9A8C6DF31EF96E3D9A712ECB757E30AE7F15
+39F6747AC5CA8F284238E72F143EAF13413DB8FBFC3D41445B66BF6C4741CA91
+E37D58DCA65095B473EB7C726B0DCDB8E17D245BB551EE26B2DFD03F7CFA606B
+C14AE7CA384F7846DAE2FF9DA4C16C355BD03C40C89B162B21A4FFC8ECEE0992
+A7B283B43FE8F745161D079566B92500B33C4E13792666EFB12247F9F42DE42D
+C587786E1C20D501968A6DDFBF4CC6A9D1A589EDEDA93C54E82D355383963B42
+CD996AA920BC5956CFFD2DB72EA6BCD845A04CD09A31A9FFE1F35A68C47A157B
+6C12E69C4AE9AE4F5E68E6922A714A78210DC84570CAE10C507562D952DC5F78
+1A47C7ED427E8A66441F48E66DEA872F63FF179922A3AA0DD210932CE9D35A71
+955DC4C50A441A813F27958519DE45E46D4D3AAC80AD068E934C4CECEDC2AB39
+5B587CC0B2B80816173569E9EF949F0121DC6A34E8D221CD6A6B97355A226B45
+98416C68AC75C066DE8A8C1DB4D333F63F0C04CA10D17334BAE0A17E1668FA3B
+436F49D2DC0B432DBB8431CB2901894B2824D8FEBA7D2F9B451A1ED8F6C9336F
+3C09AEBD5868D4967E2BBB76E547A545F8D84956BB6CB1EA251E70147A44525D
+461BCDAD0EFCD4AE86B75D941517E5E0BD47AD461620C8468A45B50D42FD338B
+9383611A437DA474AACCEE3258F88508290E656F32D04A25509C4067982027C1
+1E1AEDE2DAFB02594436027791D0353FAEDB4E999C53A433E2659F339C4E8350
+3374648805CD7684E83BD6F870F50CD8C5C9460A85E271746B3928F7960C2A33
+45B45DABA86F0467201818F2747C2F2C1B1261DAC00A56CDB4C6607734C4BCDD
+75C51AACF65AE8681C20E74796ECB1275952CF50C0E2E44DF9B6CA7E617F4B16
+9D3796FCC53FD6AA4715E25904CDD9D99D39F3ACA8E0EE2CB32DBCD45E8DB835
+100F7AF3C6355E9D1794A16C53414073403A65500F157F8A2CAF72D76200B903
+A50F371BFBB8EBDCE0C3ACA4185BB2CBB90F0A2ECB48ADEDCB365FCC670B15DF
+2211A605908A650FF1ECF8327D0C02C44EEFA0CA2119ECC94D8AEB9F7A3DDBC0
+FFD77AB26C91753A83C9C6A199CD1522631FEFBEC1B7CD1879C234919E5065D1
+6EADEA7F2DF4EE627412145049488E1439840804248BACA669B34EBFB9A37C39
+8483F48CCF0D45874DB079767167FC78F690904527722737493E5A457B739D23
+8B667D7D6C62F74DE846CFD1D493428F93D0D77FD4F31B8E869FEDDF44812F7F
+7B2A8ABB8D6D009DE8673E9D6289B642520080E1ECD3212D74C9AEEFDAD6F03B
+3AD829DDA8B769F5516989E741861FF3D74909A734FA2AC954D761E0A49E4E54
+D2EAEF07200CBA1C4DBE1F07321D61D3895B3049BADC895B28E2E676F5714C6C
+4C1E3F18DB8C335E20E1C110F792338FCDFBBB31E66C71DBD8EE6AFE6A040AFE
+A36193635100707ABCE2396A5AF4AE02651F9E392F61CAC64F82E7BBF9AA0D41
+590B4D80CBCF01CB1C0D41AFB880B8F2A643BC14D4FF06395EB7DC8E2296BBB3
+D31DE0F896E4C76289808EB079D78234728A58B92706029590297F2FC8D8ACFC
+E2DB33BC6F51F7557CF8E90379A2CBB9F4C52E9E440E16B998C05E8B8A04E21C
+F92A2D7BA5279F8E439D52348E1BD36155FEBDDF2A0589D38E71CF550543873F
+DB3BD7E1C9EEB005E3555D1A8F4E160D40EF5AA2CDDF80E166AA987F5A7FA5CC
+73B806A3466D65A0E94CC58D23D1E5DFFDACF8EE27BCFF552B8AADAB5CB845A0
+4D2C22EC0C2D19F51156631FB0D030852DCB7F9E18BD6289677CCD792EAAE163
+79735AF1C25B78EDC53792BE2C2A9C77C59C9C0B255A59A204AA5EE07BD78B5A
+5C323322B23C6CC2C552EAA869F3EB4EA925953E7F296BB0D66C6ADDE6364B67
+9D52C3B2587DCE7173220D2CB724F4327E28CDE23C49069937E378480DF331F3
+7297CDEED6934BC0722B686E00741D6DD42C8625F7AEF1E32ECC9092F30B1686
+C3830F242FEB01E5D5B755826FFDE99AA0E64357C8CB46A496319698DE316CA7
+EAD6B7CE11ED36A842B277FE5084BE46ED6D00F5C85E2D35E37286A46F160684
+001428657F3218DC8787DE1057B453E3982F116F67945D95CF79E1306C85B1F2
+31C70F21F396BB88A3B05FDAD770B9E805C5C487418BEED6807577FDC12EA1C9
+05B318F199D1C5E7179870599468BFD878920A465686259E09A1E3FB37EBB3F8
+864F9EA6A798A95B97C564D49E74D62B9E7F44562AE0B1326FE6622E87683704
+7340422EEAC561024936949561885388C54D9B7E2F923CD3A293558F26DA3F55
+CF41450CE22E16C1DC1959D640448E9D9259090D4F96CC138AFB8F090782F383
+4D4280A45EDAEDBC77E1012D22976B790F1C2FB9D12A49D30A67025DD0D14200
+D662983D56E91429542BD121A844A47AE91BA21F797DABC1AB56825CEFA4EA47
+00ECC341886D69103F1C4D8799A9DFFDE99FD4FFF8F99D5B6ED3CBAFAEB2066B
+460E23885E34DE13B81B4C41B714AA2FC0BE165947C05B14C0E0B3139AF95380
+5A9CC7AFA523DE5635871D9D54557F13737AF20D5255819D47781E82F65E6AEE
+68839872B2E47951631A799A99731F8F274F1F2ADE086F4E1AC74BA387D7DEBB
+22415882BA7918008CC13877D1D1B4B25BC78A8B176D6E23B0C0CBF431361AF5
+1D4F56CBFFBCF4C7EE0DCB8362D9020F2A6A235D664938E2C8DBD19FAB7DE364
+AC43A835F59DFE26771E94F4659C0509D7B3EA4516544F348A70E4B7B397FD8B
+9EEA50A08C89E565C498F9A4943F71812DB77267C54AA8C10B675965AEE05F12
+5B695F7AA5881027F90D331DA8FCAD97EF697A6C31268BC16FF89CF6DD673F15
+FC1310CA106A37E48D75762611D0AE67496FD1FCB7C6172946A12A2F8B1AA55C
+250C84EE34937F21CC86922AF593B6BDFD56E729B89011F2955EB91644D81E6C
+96AE28F4EE38FE0E0A4B0AAFD38E87710E7F41FECB53B01A9A7100A701449A72
+AA865D3DE7BA1A73FC51FF314C5F5C66A1CA2F6DA71E013191D3299EB9BAEDD1
+A8FC1AAC9073E9C4688E79A433B455A2172398384B616578F730A7052AFF9682
+0BB5054358E6B86B59EE70F3F9C554598B761568A0A06B35035E25120DEB6CB2
+5510E48C460D6D16F535AAD19B5B0BFB1F0D2BE5A8B3DD363D6A62119A1492B1
+586C78570904F5D65490EB8B3DEB6D8EB0FCCBC6F64210107F713F4D8B34C169
+FB1D5BACFAE963A16D377A0CD1D92C3B9B2CD465AFAB34C6D3F76CAF715533AF
+45CB193201C3E13F37B13C1CAF9ED0D03F9D28A933D67ED22AFFA09D665A20A9
+6973D0E58F372C8E482AB45A87FEC96161C1555C87EA868E68C033EDF1113192
+081630EEEEFE87DDFCE00EF4C82EB623CA3E59675E178F741837B9A1129EFE02
+41BE0F26EABF3F36D6B74B470D64AB075A96F6771975767BBE4F106DD54219A3
+1998C6A9F83A50C429CD10A61F045EDE780CB8612E9B8C0C1F38B72EA72C6C4A
+085F168B91CB48E3774AAFCCC3FDF06EC61CF177D143CA5B0DAA83243F62B5A5
+EC7E2566C23548593BA6713281F6268754FBFC91E3439B3849138BB49C0250F2
+B30E9B84A473AF0AFC95B25771FB26A643EC68A382FC9EC7A0177FFAC3F14957
+39A81E48D79C93283561A6627CD0B4E2CF45C083E715C5F52FD634CC68BDC701
+174436C2BE178ED7868E2ACC190EAD2406BF320181FE634092B29056ECE846AF
+F336A067A7B451CB8A55B3B926B6CA7757E1CC945CF4A9EB8C136D5B3387FB08
+384521854B48B8FEFB033815F1DD7B7A598E944929EAD7764F1B1DB3AD44D8A8
+48038369F3B389C6144D25CF5FB0AF7F02DE65AC63636CA934B6E8483B8E68FD
+6B9342641BB38BD805A3ACEEA44C5DACC0A897D442D69D29EDFCC5C2CAD38A56
+213EEC8AD86B4B11090004A934D4E20E1AAB9B7BC8BE606973521A40D7851C1A
+1140D0686C707B65E3119EBC55E38F64BC747C55CED35B56E3A00080AAD828AB
+9210A55A338598291A97F9D79670E059AEBEA965875ED976E91335E2A8DEF713
+95EF33DBCA3056B2769201833AEADA1432628366A890222C37D95375DFEDCDD3
+B08B9AF49D44CD70BD34D860998C42A09B59B871866C04BCA813ED8C5ED37A57
+665390ADD192FEA179E6E521015FE24BFAE1CA89F35ED0B53B4DAAF495D9416C
+FEAFA696991DE7FC317756F0D10B701149AD55B83C9AAB8487E76804B5971E79
+034ECC1BBF32D4AF9DECEA1A54E466CFDE1DC58CA90812E980FF86F9FB7BD1E4
+B8F7C3EDBAF7C31FB6E460485A478136B8C609B676700EF13F6853EDD1769DAA
+485CACE85CBA98FB2AEB34A8B649B37C26A3450D79F1A4BBE346F9DC6E5A9EAE
+7FFD045428526DFF8D7BC5038288AF6AB80EC30EEA5C667F7089EA341981E030
+521FAA7605F39029A8B07A0795E203689BF8401D88E0B378DF54E62F91666563
+1975E1603CF51FDC3DED1325FBACB587B818CFDE077F47BCEA90EA96CA54E077
+A589A30D8E26A29683B978E7B7805C0A611578951FA17EBA1FAEDE4532FDB4F2
+8CBB70249E07C261E9C805A16C32D7B97273D44D7093AA7223F4AF8FF327CC05
+8B5D7352680BFDF70BC067B29749FD58595C4D855108B8AC91C39A46B94CCBF9
+BF5D421A6BBD1D2FCC90181DE02C3D9676E5761B244F36CD35154F5931BF4507
+018903F6D7AF6A82FACF9A00A9C59DF208CC717683B7D14B65F1BF37A652AAFD
+BDB1005ECAF203DDD78F5BA80C0C356521F085DE00CC9168EE261F76CBA3E2AD
+6F83DAC1827844C18784730E874B98D26A39AB76B4DE23BE7B30A88287ECABE2
+A054A8B240821FB70935C5A1626387F5FB7AD1280F99A09D0819A43E314E6CA1
+C541549D1EBEC7DE52AB56270B2EE2BB2797A2F042DFDB4EB3F7B307C4593480
+C107F5ADF09A7522C5F3F0B2C839E2BDD2991F61F563EA9CFCF449BE280DD6DE
+55CB2D6313A7328B8653D8D4A9A105278BC36C452D8DA31A9B834D6A65EEE6C8
+F4168DBF9C3E147A84EE59732AD16AB366381F0B00441999EE78AEDFDA0536E7
+C9A3B4BA7618441904F5DE8958BDA2E2ED9EF15270E3BDE83EED920BA2284CD5
+D5DFFF6820916C7345CE48E9EFDD6D268B4C1EDB957A0DB904EBFC13690A3B25
+2A5D46FC0878E2E58FD82D9ED0AA1406684CE709B24BD19AA0D4F0EE12BCC63D
+978A3F55E6DC9C578EAEDB9C0F4F29507472E2DAB275E7E02978DD8B9426810D
+297060B76959F88CF7725DAFE51CF079DE00B057398B0519BDDBE4EDA857BAA6
+42D18A19EC754F332592B2F6553B0B2BB6E03AB0F35D923430E46B09EF345931
+9C56818E650C6BC6CCC18A6F7BE90659EC2169A6C626D4397348268E8206B864
+19415C7FBA73C0F417A7A80F15584548C1E9241C45BCA2B10840123A3A223D40
+2A5471845853D355900420D36C6D7AD494BF4EB21E98970C835041A9667C4CC3
+FCC136FBFF820FFB5F598D5205CA910B6B30582D7621415CA0797C86D2ADB4B1
+9ADC12710EA65979C5735D2D933D1D8AE021D67F0712E0B4EB85A5026F03B7FF
+8ECCBAEED4F82C4D9F7CC47FC560BC70BE3CD8FE9E338DF601111A5E1E3C5189
+0EEBD61164E7190DB788E267A25E6070885E36FB7873747E82B5E7109C07DB09
+B65CD0B5549CAC0FD173F67061A8461700967DF9AB3A7A3552A4901D2E25A1DD
+115B6B6825219F33CEE41710FD4CED40D8FFC0BEBFE0BE3E21F61010B173408D
+7D62AC6247B95FC3E60B90088CD552D8204D3B8938A7452C0F7B90088F03492F
+BA1E74FDDE953CF9D99078261DCFFA4EF2A6405F9A6E0A3B4B40F839C3F023D3
+05F2E9F43A08D7A11FF9848784783293BB35E69382A34FA65618E3E387DC394D
+0A3945AEA9106CF74329A9059C5750C168C244099C075841FDE9EE67A860CC5B
+5F4C467790F9ACDAE23D9021C7170F679BB6650FBCBC1F2FC2FE12E0E812DAB4
+FA60AE6A0E20696CF707EEEA5A4F4D7317275B876FF709F01E162DD5B7E825A5
+CD42E805396A85D4A6262F5C948A319C9F55D0FF1BD365DB784ED0A3B612003B
+32FD02363DF3E34E9066E9BD587FECEB62E7A95FD4B3AB1C2CCE5A23B727EB0F
+0EDC41FFF1386FDFD8D7D266F176B9F8A772B3BD81605CF7CD1E5562F63C403A
+62153D6CB14214C999D48F8350338CDE3827BE088A4F8CBC0050D80E3F4FCBDD
+FE18FAEDA58E3B5004B8B5CC759E14F59832512506F2DB7EE702ADDDD81622D6
+4B559372245F0AACC6863CFCDBBB43C4BA2DA5E2A749C4FFE06884CA4EB8AEF9
+2C9605DCAD529946BEE9B8D916A509837F0DB35B56A9FEE6B950E65880C4D9E5
+5B2AEA822C3CD924271438683DCC71222A253AD16CEEF78ECFD41CCFCC4DAB19
+F698FDC2B9A0B50E9C91F278C6EF0A3AB894B88F9DF87BCE655105350DA0AE65
+8C18CB46B1B8CC4DD922E0E0A8880B4D9CA3AE96546166429948292E582C27C7
+58C8E7A1FAD01232EBFF57ABABC70A2D9B27983C0306F89FA693FA5D0D8E59CF
+C353E7262AC562858BD2ED80D2746537E5C6C848A6440F094235DC81D8E6AFF1
+C80E344A89B8339A9FC337740EEEA92A658F4322CFAFE1FE0238E865B813DA33
+F75DC912EE95AB560C6AC5EA4FE53A63ADD8CAFEA74E4CA92F13EED378ED5D51
+05B522074C605CECB84468AFF0D7AD57CFA4576EDFCE0F45709E03E724FF88B5
+A04BAA6AAE30B0A3CA0EF28342FC28945086D50A978BEF307A9EF787FE7F30C0
+6E7275227D01D5FBD055F7CFCC8A46AFE69F7B036751044829A3A8A23F0172D7
+D5F45E9E671287A93C2E13567669AAF409DAB427A68D3CF2184D76F95AE960AD
+7426D2C8A3D5B22D288F369CD3633318291A6470DD9C453A95BC281C79A26602
+C376BFB27C1B4C1A211FE252C615365883BC41163252920971A83D0A5E3BDBC7
+DA9161FD6846220B144D92F194D718E62A17074A3137382DBA54BE70C418946E
+FACB7B6F87BC1133F5AEABB4416A29A586971E0E0CE3A2523CF46A7233873EE5
+4701C9E0F40D70CE8782DBA7A30378D0CE3EC44905B94879EEF4A9B99173B2D5
+BD31ECF9A7D0F1641AC0CF5F3AD5A6B0E5364AC0596E349E99729EE93AF80E18
+6FCF51075083394DE6A7E5D9F8046FD09287AAFD06E93C844935D732914F7AFE
+1ECA0D3E09419DA3032BEDB9B77F802198121AF72DCBF718D33760AB5E795A36
+A6B141214195FF215E551F218D43FF7A31DE11DA6EDACA9DE896938B111D9950
+8CF881637E36C32AA229A6C92ED4C86D272EC85837373D1F2570506C7BFF633A
+87D399697BD741A8F11309130ED1914968DE74C66CCA509B332985B594454F3F
+819F43255D89D001FAD93C86BB79384BBABA6B113E3D48EEDCA3CC501A52C0C6
+7CF3FA3CB9FE0FD257D9F4DD1E346E2D7F6CE0CD45CEEB8739DA798F1B7DC021
+6E2B4F910E64EDB9DAFC17D177BD72C73983141BA943E0D1E5183B10B97FC3F3
+5891B4A975D2D5F4739010E24659530CDE1A21B4C5372F7C101CD93F2C4919D7
+345892778924FEAEEB9EA7EF9095D520832C4029B9439EC6F6EE9BBD2B09C3E3
+C4C116C52888BAE3B32757F2C5DFAEC1B385715D58106F6A858ABF0319C96A9E
+18FBEEEC6D10135CC392C8F6F40E458AEBFBE3C86AF26D20A67617BFA4F6C4D9
+71CA38DF06855457D01DFD9829E46442661616246B8F8C108FD3C0703D1FBD37
+683BF60059B4792AC240E437D9E94498A248F8E2CE05701632F6C0462C28676F
+E38EC5BEE0339540D387035DE9716D53790C3185EB64D180AE2A3C1209CA6A6B
+D2631D59A2FC3A339BE9F0486418B7970DF40FEB32DD043D51E09336AC63CAFC
+D1231EA3C77114E60FE2A3B1CEBE7630387F32A9C8C6B8AC0800F421FE95C3AB
+86DDE37060B43E12469A69E88EB98AAC80D95CB202A0806B1D47227814362AC5
+9C658B2C1D3CE3885D691F2F9CC3209155B45464234443ADC78430B1A98EEFD6
+E5070982520A877293BAEF958B03217E3CDF36BABFE7D1F225C1F621453CBCF8
+5D06089A6D09EDF4D4D2FC940F8FDEF1F78190A7B9C497E677E099EC8527C49D
+3F3D1C264878A32F1B92FD4B1F3AFF06AE36180F6893F6E9CD1DBA888A3FF6A4
+DD4DC730B7C3E100E84506CBCC1647C4D37657654F84D4FDFFC8014AF9F139DA
+442BF6E53DC92241CB5E8FF3FBC55057A31C78FE07EF09CDA8C5701FF65EEEBD
+AFFA2E8E24C0694A816A37CCF63AA0D515DF32149BC462EF16942EEF3F8CA2BB
+D2EEB9164D01F92D5597F0C1FFDE270565759AB2662482B99EB1CE8763BCB8D8
+D035E0085440443674BC0DB76BE317599E2E120F69E2BCF40C20F5F225D8336B
+CDA75789949C71580F54A229F96CDCFB0E5A4B5BF702F758D4FE9A5DB382EBCD
+DB77FC39DF9E900C29F84CC9CCACE86756AA03AAD2481F918858EF246554DEC9
+28868CA6C26E1DC96D5C6EC62615442F1FF35980D77091AE953488401A263E53
+0879E8AAA44555C4543E914543567340870FB4C408BB4F2133F1BC782D2E9E84
+B31494DC916E661DADE54E396001ABE568AAF549CC1977B312C646D84014F5BF
+40A48E53DFCD37AC9D6512F0FACB21A2563EC83244ACA4FA526FA8A851FBFBA0
+1EDE61C21238401113DCE80C8BFC413ACB05C380FBED416B4D12CA44995CE106
+08501BF288EFD93BDD2F77E959B32A196D59209E987DA55764F59EAE90E3D049
+4842862ABA2C852DEEA8D0145E67EAB9828292D895D2A44C408F0ED06B98E30A
+5857994DFEE2D36021268DFFDF92B482CFBDD79DF3B0AB7FE6E2AF33BFADAB8E
+D80B54A1A4E3A9CBF4EEAB86E1B68369C8E918601E061B8B76ACBCFC8EE83FD6
+BB9070B61205EA1F73041D9F7FEE1AEC1C17F89D1ED90B6E0AE33D2FE94157C3
+740E56C12BDD55CF274EE181FF17B8CC6C977C7A023AAA6DFACE7843592F0B77
+487660E3E9E18DF91AD9D4FBC487729F6707B4EF7E2AEE6B58BC9B5ACA16E24C
+C849EAFDCE7C2CFC29E9723FED876F6CB28A360F0D15D08E6E59E865486A14BA
+067424003AC7E4E26266AB48881662877C3B4A3CF66DC09BE0E5201E6366AF68
+16FCEB60875767EA6C41D785F76CEAA55BA4D5EE2EA89DEE68E78C4DB15DB077
+660AE121989032C6A9BE22B1245BCB6A909D4F128367D0C6F0C33AFFE8187A5A
+9838981235051BC3017F0511DFD89143FFAD0D845FAA300FF94B264B6AB61A54
+BDECDB15DFBBA0CB7CEDD533CDA9889C1EBBB0679610927ADA384B1A4008DA22
+E2CCE4B5427FD57BEC44124730CC8F956910EC035C3DFD599B5726043555B493
+FB00F363F20F322388001B06250CFA9BCD41D969C012F264A0A373A7E49A60B5
+D17A59AA21F6B5E00D9B1318E2A7DBE53895F59635D293A1F006955F9131A2C0
+54FD3CDDB9835031B443B60A18DBC2BDF1542E408C11E08433C5B83CE5C9EF08
+01758BEBDDA0C5C0A8A6C878D79423E8845D613230BE8DC2FCA1510DE9248087
+CF1ABE53C77F7364F2853012EE1C0B5DA7F4B3C52D474CEE1064B8DAE82073A9
+C3A32D04658D3317DD8CC3A2F4379DCD22783CE461860BB379841AF0FDC98694
+554015E6A246D822818C2D3F341DC3B892BFC715D14C16437F5FA4EB988D8EA1
+DD18F3D5D6ECE2EDB660D746396EDDE7C1A1A34439759E7AE592E6C126330260
+A8371F7EC8F634C729B39E4B1C30335E96E80E33C300097D7F3A044BCEBD053D
+02B99ABE2DE748B036CC9C8C4D5D183066983F026D5AECFBDCB6B911487ED20E
+40F8EAA86B8F73C36BF3E1C6DA2E60429DE261BC91061BB7939BC344CC642A04
+0C75DD191714BC52278A8E889952C6A3
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
@@ -860,7 +876,7 @@ CDC84D322F81FB17574D87D41AC5D5852ABB2FF37364D39B8DCEC51AB98A48C8
 0000000000000000000000000000000000000000000000000000000000000000
 cleartomark
 %%EndResource
-/F9_0 /LucidaSans-Typewriter83 1 1
+/F8_0 /YLWBJI+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
@@ -916,8 +932,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -932,16 +947,16 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  README  Page 1) 144.161 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  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
+of v6,) 292.6905 Tj
 0 -47.4668 Td
 (but is implemented for a modern x86-based multiprocessor using \
 ANSI C.) 305.796 Tj
@@ -953,76 +968,76 @@ ANSI C.) 305.796 Tj
 0 -94.9336 Td
 (to Peer Communications; ISBN: 1-57398-013-7; 1st edition \(June\
  14,) 288.322 Tj
-0 -104.427 Td
+0 -104.4269 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 -113.9203 Td
+(provides pointers to on-line resources for v6.) 200.9517 Tj
 0 -132.907 Td
-(xv6 borrows code from the following sources:) 192.215 Tj
-17.4609 -142.4 Td
+(xv6 borrows code from the following sources:) 192.2146 Tj
+17.4613 -142.4004 Td
 (JOS \(asm.h, elf.h, mmu.h, bootasm.S, ide.c, console.c, and oth\
 ers\)) 288.322 Tj
-17.4609 -151.893 Td
-(Plan 9 \(bootother.S, mp.h, mp.c, lapic.c\)) 179.109 Tj
-17.4609 -161.387 Td
+17.4613 -151.8937 Td
+(Plan 9 \(bootother.S, mp.h, mp.c, lapic.c\)) 179.1091 Tj
+17.4613 -161.3871 Td
 (FreeBSD \(ioapic.c\)) 78.6333 Tj
-17.4609 -170.88 Td
+17.4613 -170.8804 Td
 (NetBSD \(console.c\)) 78.6333 Tj
-0 -189.867 Td
-(The following people made contributions:) 174.741 Tj
-17.4609 -199.36 Td
+0 -189.8667 Td
+(The following people made contributions:) 174.7406 Tj
+17.4613 -199.3601 Td
 (Russ Cox \(context switching, locking\)) 161.635 Tj
-17.4609 -208.853 Td
+17.4613 -208.8535 Td
 (Cliff Frey \(MP\)) 65.5277 Tj
-17.4609 -218.347 Td
+17.4613 -218.3468 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
+0 -237.3335 Td
+(The code in the files that constitute xv6 is) 192.2146 Tj
+0 -246.8269 Td
 (Copyright 2006-2007 Frans Kaashoek, Robert Morris, and Russ Cox\
-.) 279.585 Tj
-0 -265.813 Td
+.) 279.5849 Tj
+0 -265.8136 Td
 (ERROR REPORTS) 56.7907 Tj
-0 -284.799 Td
+0 -284.8003 Td
 (If you spot errors or have suggestions for improvement, please \
-send) 292.69 Tj
-0 -294.293 Td
+send) 292.6905 Tj
+0 -294.2936 Td
 (email to Frans Kaashoek and Robert Morris \(kaashoek,rtm@csail.\
 mit.edu\). ) 314.533 Tj
-0 -313.28 Td
-(BUILDING AND RUNNING XV6) 104.844 Tj
-0 -332.266 Td
+0 -313.2803 Td
+(BUILDING AND RUNNING XV6) 104.8443 Tj
+0 -332.267 Td
 (To build xv6 on an x86 ELF machine \(like Linux or FreeBSD\), r\
-un "make".) 310.165 Tj
-0 -341.76 Td
+un "make".) 310.1645 Tj
+0 -341.7604 Td
 (On non-x86 or non-ELF machines \(like OS X, even on x86\), you \
-will) 283.953 Tj
-0 -351.253 Td
+will) 283.9534 Tj
+0 -351.2538 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
+ x86 ELF) 310.1645 Tj
+0 -360.7471 Td
+(binaries.  See http://pdos.csail.mit.edu/6.828/2007/tools.html.) 275.2164 Tj
+0 -370.2405 Td
+(Then run "make TOOLPREFIX=i386-jos-elf-".) 179.1091 Tj
+0 -389.2272 Td
+(To run xv6, you can use Bochs or QEMU, both PC simulators.) 253.3738 Tj
+0 -398.7205 Td
+(Bochs makes debugging easier, but QEMU is much faster. ) 240.2683 Tj
+0 -408.2139 Td
 (To run in Bochs, run "make bochs" and then type "c" at the boch\
 s prompt.) 314.533 Tj
-0 -417.706 Td
+0 -417.7073 Td
 (To run in QEMU, run "make qemu".  Both log the xv6 screen outpu\
 t to ) 297.059 Tj
-0 -427.2 Td
+0 -427.2006 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
+0 -446.1873 Td
+(To create a typeset version of the code, run "make xv6.pdf".) 262.1109 Tj
+0 -455.6807 Td
+(This requires the "mpage" text formatting utility.) 218.4257 Tj
+0 -465.174 Td
+(See http://www.mesa.nl/pub/mpage/.) 148.5295 Tj
 Q
 Q
 q
@@ -1036,171 +1051,171 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  table of contents  Page 1) 192.215 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  table of contents  Page 1) 192.2146 Tj
 0 -28.4801 Td
 (The numbers to the left of the file names in the table are shee\
-t numbers.) 318.902 Tj
+t numbers.) 318.9016 Tj
 0 -37.9735 Td
 (The source code has been printed in a double column format with\
- fifty) 301.427 Tj
+ fifty) 301.4275 Tj
 0 -47.4668 Td
 (lines per column, giving one hundred lines per sheet \(or page\)\
-.) 275.216 Tj
+.) 275.2164 Tj
 0 -56.9602 Td
 (Thus there is a convenient relationship between line numbers an\
-d sheet numbers.) 345.113 Tj
+d sheet numbers.) 345.1126 Tj
 0 -85.4403 Td
 (# basic headers) 65.5277 Tj
--4514.16 TJm
+-4514.2 TJm
 (# system calls) 61.1592 Tj
 -5015.87 TJm
 (# pipes) 30.5796 Tj
 0 -94.9336 Td
 (01 types.h) 43.6851 Tj
--7022.49 TJm
+-7022.54 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
+-7022.54 TJm
 (24 vectors.pl) 56.7907 Tj
-0 -113.92 Td
+0 -113.9204 Td
 (02 defs.h) 39.3166 Tj
--7524.16 TJm
+-7524.2 TJm
 (24 trapasm.S) 52.4222 Tj
 -6019.2 TJm
 (# string operations) 83.0018 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (03 x86.h) 34.9481 Tj
--8025.82 TJm
+-8025.87 TJm
 (25 trap.c) 39.3166 Tj
 -7524.2 TJm
 (53 string.c) 48.0537 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (05 asm.h) 34.9481 Tj
--8025.82 TJm
+-8025.87 TJm
 (26 syscall.h) 52.4222 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (06 mmu.h) 34.9481 Tj
--8025.82 TJm
+-8025.87 TJm
 (26 syscall.c) 52.4222 Tj
 -6019.2 TJm
 (# low-level hardware) 87.3703 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (08 elf.h) 34.9481 Tj
--8025.82 TJm
+-8025.87 TJm
 (28 sysproc.c) 52.4222 Tj
 -6019.2 TJm
 (54 mp.h) 30.5796 Tj
-209.535 -161.387 Td
+209.536 -161.3872 Td
 (55 mp.c) 30.5796 Tj
-0 -170.881 Td
+0 -170.8805 Td
 (# startup) 39.3166 Tj
--7524.16 TJm
+-7524.2 TJm
 (# file system) 56.7907 Tj
 -5517.54 TJm
 (56 lapic.c) 43.6851 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (09 bootasm.S) 52.4222 Tj
--6019.16 TJm
+-6019.2 TJm
 (29 buf.h) 34.9481 Tj
 -8025.87 TJm
 (58 ioapic.c) 48.0537 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (10 bootother.S) 61.1592 Tj
--5015.82 TJm
+-5015.87 TJm
 (29 dev.h) 34.9481 Tj
 -8025.87 TJm
 (59 picirq.c) 48.0537 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (11 bootmain.c) 56.7907 Tj
--5517.49 TJm
+-5517.54 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
+-7524.2 TJm
 (30 stat.h) 39.3166 Tj
 -7524.2 TJm
-(61 kbd.c) 34.9481 Tj
-104.767 -218.347 Td
+(62 kbd.c) 34.9481 Tj
+104.768 -218.3473 Td
 (31 file.h) 39.3166 Tj
 -7524.2 TJm
 (62 console.c) 52.4222 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (# locks) 30.5796 Tj
--8527.49 TJm
+-8527.54 TJm
 (31 fs.h) 30.5796 Tj
 -8527.54 TJm
-(65 timer.c) 43.6851 Tj
+(66 timer.c) 43.6851 Tj
 0 -237.334 Td
 (13 spinlock.h) 56.7907 Tj
--5517.49 TJm
+-5517.54 TJm
 (32 fsvar.h) 43.6851 Tj
-0 -246.827 Td
-(14 spinlock.c) 56.7907 Tj
--5517.49 TJm
+0 -246.8274 Td
+(13 spinlock.c) 56.7907 Tj
+-5517.54 TJm
 (33 ide.c) 34.9481 Tj
 -8025.87 TJm
 (# user-level) 52.4222 Tj
-104.767 -256.321 Td
+104.768 -256.3208 Td
 (35 bio.c) 34.9481 Tj
 -8025.87 TJm
-(66 initcode.S) 56.7907 Tj
-0 -265.814 Td
+(67 initcode.S) 56.7907 Tj
+0 -265.8141 Td
 (# processes) 48.0537 Tj
--6520.82 TJm
+-6520.87 TJm
 (36 fs.c) 30.5796 Tj
 -8527.54 TJm
-(66 init.c) 39.3166 Tj
-0 -275.307 Td
+(67 init.c) 39.3166 Tj
+0 -275.3075 Td
 (15 proc.h) 39.3166 Tj
--7524.16 TJm
+-7524.2 TJm
 (44 file.c) 39.3166 Tj
 -7524.2 TJm
-(67 usys.S) 39.3166 Tj
-0 -284.8 Td
+(68 usys.S) 39.3166 Tj
+0 -284.8008 Td
 (16 proc.c) 39.3166 Tj
--7524.16 TJm
+-7524.2 TJm
 (45 sysfile.c) 52.4222 Tj
 -6019.2 TJm
-(67 sh.c) 30.5796 Tj
-0 -294.294 Td
+(68 sh.c) 30.5796 Tj
+0 -294.2942 Td
 (21 swtch.S) 43.6851 Tj
--7022.49 TJm
+-7022.54 TJm
 (50 exec.c) 39.3166 Tj
-0 -303.787 Td
+0 -303.7876 Td
 (22 kalloc.c) 48.0537 Tj
-0 -341.761 Td
+0 -341.7606 Td
 (The source listing is preceded by a cross-reference that lists \
-every defined ) 336.376 Tj
-0 -351.254 Td
+every defined ) 336.3756 Tj
+0 -351.2539 Td
 (constant, struct, global variable, and function in xv6.  Each e\
-ntry gives,) 323.27 Tj
-0 -360.747 Td
+ntry gives,) 323.2701 Tj
+0 -360.7473 Td
 (on the same line as the name, the line number \(or, in a few ca\
-ses, numbers\)) 327.639 Tj
-0 -370.241 Td
+ses, numbers\)) 327.6386 Tj
+0 -370.2406 Td
 (where the name is defined.  Successive lines in an entry list t\
 he line) 305.796 Tj
 0 -379.734 Td
-(numbers where the name is used.  For example, this entry:) 249.005 Tj
-17.4609 -398.721 Td
+(numbers where the name is used.  For example, this entry:) 249.0053 Tj
+17.4613 -398.7207 Td
 (swtch 2256) 43.6851 Tj
-34.9222 -408.214 Td
+34.9226 -408.2141 Td
 (0311 1928 1962 2255) 83.0018 Tj
-34.9222 -417.707 Td
+34.9226 -417.7074 Td
 (2256) 17.4741 Tj
--7.10543e-15 -436.694 Td
+-0 -436.6941 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
+n five lines) 327.6386 Tj
+-0 -446.1875 Td
+(on sheets 03, 19, and 22.) 109.2129 Tj
 Q
 Q
 Q
@@ -1228,8 +1243,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -1244,210 +1258,210 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  cross-references  Page 1) 187.846 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  cross-references  Page 1) 187.8461 Tj
 0 -28.4801 Td
-(acquire 1425) 52.4222 Tj
+(acquire 1375) 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
+(0210 1224 3538) 61.1592 Tj
+17.4613 -37.9735 Td
+(0311 1375 1379 1632) 83.0018 Tj
 -6520.6 TJm
-(bfree 3730) 43.6851 Tj
-17.4609 -56.9602 Td
+(bmap 4010) 39.3166 Tj
+17.4613 -47.4664 Td
+(1820 1871 1918 1933) 83.0018 Tj
+-8527.14 TJm
+(4010 4047 4119 4169) 83.0018 Tj
+17.4613 -56.9594 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
+-8527.14 TJm
+(4222) 17.4741 Tj
+17.4613 -66.4524 Td
+(2265 2312 2549 2870) 83.0018 Tj
 -6520.6 TJm
-(bget 3565) 39.3166 Tj
-17.4609 -75.9469 Td
+(bootmain 1116) 56.7907 Tj
+17.4613 -75.9453 Td
 (3406 3465 3569 3629) 83.0018 Tj
--8527.18 TJm
-(3565 3596 3606) 61.1592 Tj
-17.4609 -85.4403 Td
+-8527.14 TJm
+(0975 1116) 39.3166 Tj
+17.4613 -85.4383 Td
 (3807 3840 3860 3889) 83.0018 Tj
 -6520.6 TJm
-(binit 3538) 43.6851 Tj
-17.4609 -94.9336 Td
+(bootothers 1267) 65.5277 Tj
+17.4613 -94.9313 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
+-8527.14 TJm
+(1207 1236 1267) 61.1592 Tj
+17.4613 -104.4243 Td
+(4456 5217 5255 5277) 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
+(BPB 3193) 34.9481 Tj
+17.4613 -113.9172 Td
+(6385 6440 6466 6508) 83.0018 Tj
+-8527.14 TJm
+(3193 3196 3712 3714) 83.0018 Tj
+0 -123.4106 Td
+(allocproc 1627) 61.1592 Tj
 -13042 TJm
-(4222) 17.4741 Tj
-17.4609 -132.907 Td
-(1628 1710) 39.3166 Tj
+(3740) 17.4741 Tj
+17.4613 -132.9039 Td
+(1627 1715) 39.3166 Tj
 -11537.3 TJm
-(bootmain 1117) 56.7907 Tj
-0 -142.4 Td
+(bread 3602) 43.6851 Tj
+0 -142.3973 Td
 (alltraps 2456) 56.7907 Tj
 -13543.7 TJm
-(0975 1117) 39.3166 Tj
-17.4609 -151.893 Td
+(0211 3602 3683 3694) 83.0018 Tj
+17.4613 -151.8907 Td
 (2410 2418 2432 2437) 83.0018 Tj
--6520.6 TJm
-(bootothers 1276) 65.5277 Tj
-17.4609 -161.387 Td
+-8527.14 TJm
+(3713 3739 3867 3961) 83.0018 Tj
+17.4613 -161.3836 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
+(3982 4032 4066 4119) 83.0018 Tj
+0 -170.877 Td
+(ALT 6060) 34.9481 Tj
+-16052 TJm
+(4169 4222) 39.3166 Tj
+17.4613 -180.3703 Td
+(6060 6088 6090) 61.1592 Tj
+-9028.94 TJm
+(brelse 3624) 48.0537 Tj
+0 -189.8633 Td
 (argfd 4564) 43.6851 Tj
 -15048.7 TJm
-(3740) 17.4741 Tj
-17.4609 -199.36 Td
+(0212 3624 3627 3685) 83.0018 Tj
+17.4613 -199.3567 Td
 (4564 4607 4619 4630) 83.0018 Tj
--6520.6 TJm
-(bread 3602) 43.6851 Tj
-17.4609 -208.854 Td
+-8527.14 TJm
+(3697 3719 3723 3746) 83.0018 Tj
+17.4613 -208.8497 Td
 (4644 4656) 39.3166 Tj
 -13543.8 TJm
-(0211 3602 3683 3694) 83.0018 Tj
-0 -218.347 Td
+(3875 3967 3970 3991) 83.0018 Tj
+0 -218.343 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
+17.4613 -227.8364 Td
+(0329 2694 2708 2724) 83.0018 Tj
+-8527.14 TJm
 (4173 4233 4237) 61.1592 Tj
-17.4609 -303.787 Td
-(0332 2721 4668 4758) 83.0018 Tj
+17.4613 -237.3293 Td
+(2837 2856 2868 4569) 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
+17.4613 -246.8223 Td
+(4607 4619 4858 4909) 83.0018 Tj
+-8527.14 TJm
 (3157 3169 3187 3193) 83.0018 Tj
-17.4609 -322.773 Td
-(4957) 17.4741 Tj
--16052.2 TJm
+17.4613 -256.3153 Td
+(4910 4957) 39.3166 Tj
+-13543.8 TJm
 (3695 4119 4120 4121) 83.0018 Tj
-0 -332.267 Td
-(BACK 6761) 39.3166 Tj
--15550.3 TJm
+0 -265.8086 Td
+(argptr 2704) 48.0537 Tj
+-14547 TJm
 (4165 4166 4169 4170) 83.0018 Tj
-17.4609 -341.76 Td
-(6761 6874 7020 7289) 83.0018 Tj
--8527.18 TJm
+17.4613 -275.302 Td
+(0330 2704 4607 4619) 83.0018 Tj
+-8527.14 TJm
 (4171 4221 4222 4224) 83.0018 Tj
-0 -351.254 Td
-(backcmd 6796 7014) 74.2647 Tj
--9530.43 TJm
+17.4613 -284.795 Td
+(4656 4982) 39.3166 Tj
+-11537.3 TJm
 (buf 2900) 34.9481 Tj
-17.4609 -360.747 Td
-(6796 6809 6875 7014) 83.0018 Tj
--8527.18 TJm
+0 -294.2883 Td
+(argstr 2721) 48.0537 Tj
+-14547 TJm
 (0200 0211 0212 0213) 83.0018 Tj
-17.4609 -370.24 Td
-(7016 7142 7255 7290) 83.0018 Tj
--8527.18 TJm
+17.4613 -303.7817 Td
+(0331 2721 4668 4758) 83.0018 Tj
+-8527.14 TJm
 (0253 2900 2904 2905) 83.0018 Tj
-0 -379.734 Td
-(BACKSPACE 6216) 61.1592 Tj
--13042 TJm
+17.4613 -313.2747 Td
+(4858 4908 4923 4935) 83.0018 Tj
+-8527.14 TJm
 (2906 3310 3325 3375) 83.0018 Tj
-17.4609 -389.227 Td
-(6216 6234 6263 6426) 83.0018 Tj
--8527.18 TJm
+17.4613 -322.7676 Td
+(4957) 17.4741 Tj
+-16052.1 TJm
 (3404 3454 3456 3459) 83.0018 Tj
-17.4609 -398.72 Td
-(6432) 17.4741 Tj
--16052.2 TJm
+0 -332.2606 Td
+(BACK 6861) 39.3166 Tj
+-15550.3 TJm
 (3527 3529 3535 3540) 83.0018 Tj
-0 -408.213 Td
+17.4613 -341.754 Td
+(6861 6974 7120 7389) 83.0018 Tj
+-8527.14 TJm
+(3553 3564 3567 3577) 83.0018 Tj
+0 -351.2473 Td
+(backcmd 6896 7114) 74.2647 Tj
+-11537 TJm
+(3601 3604 3614 3624) 83.0018 Tj
+17.4613 -360.7407 Td
+(6896 6909 6975 7114) 83.0018 Tj
+-8527.14 TJm
+(3639 3669 3681 3692) 83.0018 Tj
+17.4613 -370.2337 Td
+(7116 7242 7355 7390) 83.0018 Tj
+-8527.14 TJm
+(3707 3732 3854 3955) 83.0018 Tj
+0 -379.727 Td
+(BACKSPACE 6266) 61.1592 Tj
+-13042 TJm
+(3979 4013 4055 4105) 83.0018 Tj
+17.4613 -389.2204 Td
+(6266 6284 6313 6476) 83.0018 Tj
+-8527.14 TJm
+(4155 4215 6354 6366) 83.0018 Tj
+17.4613 -398.7133 Td
+(6482) 17.4741 Tj
+-16052.1 TJm
+(6369 6372 6435 6442) 83.0018 Tj
+0 -408.2067 Td
 (balloc 3704) 48.0537 Tj
 -14547 TJm
-(3553 3564 3567 3577) 83.0018 Tj
-17.4609 -417.707 Td
+(6453 6474 6487 6518) 83.0018 Tj
+17.4613 -417.7001 Td
 (3704 3725 4019 4030) 83.0018 Tj
--8527.18 TJm
-(3601 3604 3614 3624) 83.0018 Tj
-17.4609 -427.2 Td
+-8527.14 TJm
+(6984 6987 6988 6989) 83.0018 Tj
+17.4613 -427.193 Td
 (4040) 17.4741 Tj
--16052.2 TJm
-(3639 3669 3681 3692) 83.0018 Tj
-0 -436.693 Td
+-16052.1 TJm
+(7003 7015 7016 7019) 83.0018 Tj
+0 -436.6864 Td
 (BBLOCK 3196) 48.0537 Tj
 -14547 TJm
-(3707 3732 3854 3955) 83.0018 Tj
-17.4609 -446.187 Td
+(7020 7021 7025) 61.1592 Tj
+17.4613 -446.1798 Td
 (3196 3713 3739) 61.1592 Tj
+-9028.94 TJm
+(bufhead 3535) 52.4222 Tj
+0 -455.6731 Td
+(bfree 3730) 43.6851 Tj
+-15048.7 TJm
+(3535 3551 3552 3554) 83.0018 Tj
+17.4613 -465.1665 Td
+(3730 4060 4070) 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
+(3555 3556 3557 3573) 83.0018 Tj
+0 -474.6594 Td
+(bget 3565) 39.3166 Tj
+-15550.3 TJm
+(3587 3633 3634 3635) 83.0018 Tj
+17.4613 -484.1528 Td
+(3565 3596 3606) 61.1592 Tj
+-11035.5 TJm
+(3636) 17.4741 Tj
+0 -493.6462 Td
+(binit 3538) 43.6851 Tj
+-13042.1 TJm
+(buf_table_lock 3530) 83.0018 Tj
 Q
 Q
 q
@@ -1461,210 +1475,210 @@ 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.9679 1 0 564.72 392.865] 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
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  cross-references  Page 2) 187.8461 Tj
+17.4613 -28.4801 Td
 (3530 3542 3569 3577) 83.0018 Tj
--8527.18 TJm
-(7264 7266 7272 7273) 83.0018 Tj
-17.4609 -94.9336 Td
+-8527.14 TJm
+(7248 7250 7253 7255) 83.0018 Tj
+17.4613 -37.9735 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
+-8527.14 TJm
+(7258 7260 7263 7264) 83.0018 Tj
+0 -47.4664 Td
 (bwrite 3614) 48.0537 Tj
--12540.4 TJm
-(CONSOLE 2957) 52.4222 Tj
-17.4609 -142.4 Td
+-14547 TJm
+(7275 7278 7281 7285) 83.0018 Tj
+17.4613 -56.9598 Td
 (0213 3614 3617 3696) 83.0018 Tj
--8527.18 TJm
-(2957 6506 6507) 61.1592 Tj
-17.4609 -151.894 Td
+-8527.14 TJm
+(7300 7303 7308 7312) 83.0018 Tj
+17.4613 -66.4531 Td
 (3718 3745 3966 3990) 83.0018 Tj
--6520.6 TJm
-(console_init 6501) 74.2647 Tj
-17.4609 -161.387 Td
+-8527.14 TJm
+(7313 7316 7321 7322) 83.0018 Tj
+17.4613 -75.9465 Td
 (4041 4172) 39.3166 Tj
--13543.9 TJm
-(0216 1244 6501) 61.1592 Tj
-0 -170.88 Td
+-13543.8 TJm
+(7328 7337 7338 7344) 83.0018 Tj
+0 -85.4399 Td
 (bzero 3690) 43.6851 Tj
--13042.1 TJm
-(console_intr 6412) 74.2647 Tj
-17.4609 -180.374 Td
+-15048.7 TJm
+(7345 7351 7352 7361) 83.0018 Tj
+17.4613 -94.9332 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
+-13543.8 TJm
+(7364 7366 7372 7373) 83.0018 Tj
+0 -104.4266 Td
+(B_BUSY 2909) 48.0537 Tj
+-14547 TJm
+(7378 7384 7390 7391) 83.0018 Tj
+17.4613 -113.9199 Td
+(2909 3458 3574 3576) 83.0018 Tj
+-8527.14 TJm
+(7394) 17.4741 Tj
+17.4613 -123.4133 Td
+(3580 3588 3589 3616) 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
+(CONSOLE 2957) 52.4222 Tj
+17.4613 -132.9067 Td
+(3626 3638) 39.3166 Tj
+-13543.8 TJm
+(2957 6556 6557) 61.1592 Tj
+0 -142.4 Td
+(B_DIRTY 2911) 52.4222 Tj
+-12038.8 TJm
+(console_init 6551) 74.2647 Tj
+17.4613 -151.8934 Td
+(2911 3387 3413 3418) 83.0018 Tj
+-8527.14 TJm
+(0216 1231 6551) 61.1592 Tj
+17.4613 -161.3867 Td
+(3460 3479 3618) 61.1592 Tj
+-9028.94 TJm
+(console_intr 6462) 74.2647 Tj
+0 -170.8801 Td
+(B_VALID 2910) 52.4222 Tj
+-14045.3 TJm
+(0218 6248 6462) 61.1592 Tj
+17.4613 -180.3735 Td
+(2910 3417 3460 3479) 83.0018 Tj
+-6520.6 TJm
+(console_lock 6270) 74.2647 Tj
+17.4613 -189.8668 Td
+(3574 3607) 39.3166 Tj
+-13543.8 TJm
+(6270 6385 6431 6440) 83.0018 Tj
+0 -199.3602 Td
+(C 6081 6459) 48.0537 Tj
+-14547 TJm
+(6443 6553) 39.3166 Tj
+17.4613 -208.8535 Td
+(6081 6129 6154 6155) 83.0018 Tj
+-6520.6 TJm
+(console_read 6501) 74.2647 Tj
+17.4613 -218.3469 Td
+(6156 6157 6158 6160) 83.0018 Tj
+-8527.14 TJm
+(6501 6557) 39.3166 Tj
+17.4613 -227.8403 Td
+(6459 6469 6472 6479) 83.0018 Tj
+-6520.6 TJm
+(console_write 6435) 78.6333 Tj
+17.4613 -237.3336 Td
+(6489 6519) 39.3166 Tj
+-13543.8 TJm
+(6435 6556) 39.3166 Tj
+0 -246.827 Td
+(CAPSLOCK 6062) 56.7907 Tj
 -11537.1 TJm
-(console_write 6385) 78.6333 Tj
-17.4609 -246.827 Td
-(6012 6045 6186) 61.1592 Tj
+(cons_putc 6333) 61.1592 Tj
+17.4613 -256.3203 Td
+(6062 6095 6236) 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
+(6333 6372 6396 6414) 83.0018 Tj
+0 -265.8137 Td
+(cga_putc 6301) 56.7907 Tj
+-13543.7 TJm
+(6417 6421 6422 6442) 83.0018 Tj
+17.4613 -275.3071 Td
+(6301 6342) 39.3166 Tj
+-13543.8 TJm
+(6476 6482 6488) 61.1592 Tj
+0 -284.8004 Td
+(cli 0464) 34.9481 Tj
+-14045.5 TJm
 (context 1515) 52.4222 Tj
-0 -303.787 Td
-(cmd 6765) 34.9481 Tj
+17.4613 -294.2938 Td
+(0464 0466 0914 1028) 83.0018 Tj
+-8527.14 TJm
+(0201 0308 1515 1540) 83.0018 Tj
+17.4613 -303.7871 Td
+(1460 6336 6570) 61.1592 Tj
+-11035.5 TJm
+(1560 1746 1747 1748) 83.0018 Tj
+0 -313.2805 Td
+(cmd 6865) 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
+(1832 1864 2129) 61.1592 Tj
+17.4613 -322.7739 Td
+(6865 6877 6886 6887) 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
+(copyproc 1709) 56.7907 Tj
+17.4613 -332.2672 Td
+(6892 6893 6898 6902) 83.0018 Tj
+-8527.14 TJm
+(0292 1709 1762 2812) 83.0018 Tj
+17.4613 -341.7606 Td
+(6906 6915 6918 6923) 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
+(cp 1573) 30.5796 Tj
+17.4613 -351.2539 Td
+(6931 6937 6941 6951) 83.0018 Tj
+-8527.14 TJm
+(1573 1657 1660 1661) 83.0018 Tj
+17.4613 -360.7473 Td
+(6975 6977 7052 7055) 83.0018 Tj
+-8527.14 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
+17.4613 -370.2407 Td
+(7057 7058 7059 7060) 83.0018 Tj
+-8527.14 TJm
+(1666 1857 1864 1872) 83.0018 Tj
+17.4613 -379.734 Td
+(7063 7064 7066 7068) 83.0018 Tj
+-8527.14 TJm
+(1886 1905 1923 1924) 83.0018 Tj
+17.4613 -389.2274 Td
+(7069 7070 7071 7072) 83.0018 Tj
+-8527.14 TJm
+(1928 2009 2014 2015) 83.0018 Tj
+17.4613 -398.7207 Td
+(7073 7074 7075 7076) 83.0018 Tj
+-8527.14 TJm
+(2016 2020 2021 2026) 83.0018 Tj
+17.4613 -408.2141 Td
+(7079 7080 7082 7084) 83.0018 Tj
+-8527.14 TJm
+(2030 2038 2039 2066) 83.0018 Tj
+17.4613 -417.7075 Td
+(7085 7086 7087 7088) 83.0018 Tj
+-8527.14 TJm
+(2084 2090 2537 2539) 83.0018 Tj
+17.4613 -427.2008 Td
+(7089 7100 7101 7103) 83.0018 Tj
+-8527.14 TJm
+(2541 2571 2579 2580) 83.0018 Tj
+17.4613 -436.6942 Td
+(7105 7106 7107 7108) 83.0018 Tj
+-8527.14 TJm
+(2586 2591 2696 2710) 83.0018 Tj
+17.4613 -446.1875 Td
+(7109 7110 7113 7114) 83.0018 Tj
+-8527.14 TJm
+(2712 2726 2778 2780) 83.0018 Tj
+17.4613 -455.6809 Td
+(7116 7118 7119 7120) 83.0018 Tj
+-8527.14 TJm
+(2783 2784 2812 2845) 83.0018 Tj
+17.4613 -465.1743 Td
+(7121 7122 7212 7213) 83.0018 Tj
+-8527.14 TJm
+(2873 4361 4571 4588) 83.0018 Tj
+17.4613 -474.6676 Td
+(7214 7215 7217 7221) 83.0018 Tj
+-8527.14 TJm
+(4589 4646 4943 4944) 83.0018 Tj
+17.4613 -484.161 Td
+(7224 7230 7231 7234) 83.0018 Tj
+-8527.14 TJm
+(4963 4969 4989 5097) 83.0018 Tj
+17.4613 -493.6543 Td
+(7237 7239 7242 7246) 83.0018 Tj
+-8527.14 TJm
+(5101 5102 5103 5104) 83.0018 Tj
 Q
 Q
 Q
@@ -1692,8 +1706,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -1708,210 +1721,210 @@ 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.9679 1 0 564.72 738.865] 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
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  cross-references  Page 3) 187.8461 Tj
+17.4613 -28.4801 Td
+(5105 5106 5258 5279) 83.0018 Tj
+-8527.14 TJm
 (4327 4328 4391 4665) 83.0018 Tj
-17.4609 -56.9602 Td
-(5104 5105 5106 5258) 83.0018 Tj
--8527.18 TJm
+17.4613 -37.9735 Td
+(6511) 17.4741 Tj
+-16052.1 TJm
 (4755 4805) 39.3166 Tj
-17.4609 -66.4535 Td
-(5280 6461) 39.3166 Tj
--11537.3 TJm
+0 -47.4664 Td
+(cprintf 6377) 52.4222 Tj
+-12038.8 TJm
 (disk_1_present 3327) 83.0018 Tj
-0 -75.9469 Td
-(cprintf 6327) 52.4222 Tj
--14045.3 TJm
+17.4613 -56.9598 Td
+(0217 1221 1255 1262) 83.0018 Tj
+-8527.14 TJm
 (3327 3364 3462) 61.1592 Tj
-17.4609 -85.4403 Td
-(0217 1232 1261 2127) 83.0018 Tj
+17.4613 -66.4531 Td
+(2127 2131 2133 2235) 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
+17.4613 -75.9465 Td
+(2328 2565 2573 2578) 83.0018 Tj
+-8527.14 TJm
+(0664 1690 1691 1767) 83.0018 Tj
+17.4613 -85.4399 Td
+(2782 5637 5761 5912) 83.0018 Tj
+-8527.14 TJm
+(1768 2522 2586) 61.1592 Tj
+17.4613 -94.9332 Td
+(6377 6572 6573 6574) 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
+(E0ESC 6066) 43.6851 Tj
+17.4613 -104.4266 Td
+(6577) 17.4741 Tj
+-16052.1 TJm
+(6066 6220 6224 6225) 83.0018 Tj
+0 -113.9199 Td
+(cpu 1557 5751) 56.7907 Tj
 -13543.7 TJm
-(6177 6180) 39.3166 Tj
-17.4609 -142.4 Td
-(0256 0269 1232 1251) 83.0018 Tj
+(6227 6230) 39.3166 Tj
+17.4613 -123.4133 Td
+(0256 0269 1221 1255) 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
+17.4613 -132.9067 Td
+(1257 1258 1260 1262) 83.0018 Tj
+-8527.14 TJm
+(0805 1118 1122 5014) 83.0018 Tj
+17.4613 -142.4 Td
+(1271 1279 1306 1367) 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
+17.4613 -151.8934 Td
+(1391 1408 1442 1461) 83.0018 Tj
+-8527.14 TJm
+(0802 1128 5029) 61.1592 Tj
+17.4613 -161.3867 Td
+(1462 1470 1472 1557) 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
+17.4613 -170.8801 Td
+(1568 1674 1677 1794) 83.0018 Tj
+-8527.14 TJm
 (0836 5034 5061) 61.1592 Tj
-17.4609 -199.361 Td
-(1859 1862 2548 2552) 83.0018 Tj
+17.4613 -180.3735 Td
+(1811 1814 1861 1864) 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
+(EOI 5663) 34.9481 Tj
+17.4613 -189.8668 Td
+(2548 2565 2566 2573) 83.0018 Tj
+-8527.14 TJm
+(5663 5734 5775) 61.1592 Tj
+17.4613 -199.3602 Td
+(2574 2578 2579 5512) 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
+(ERROR 5681) 43.6851 Tj
+17.4613 -208.8535 Td
+(5513 5751 5761 6572) 83.0018 Tj
+-8527.14 TJm
+(5681 5727) 39.3166 Tj
+0 -218.3469 Td
 (create 4801) 48.0537 Tj
--14547 TJm
-(6757 6822 6959 7265) 83.0018 Tj
-17.4609 -275.307 Td
+-12540.5 TJm
+(ESR 5666) 34.9481 Tj
+17.4613 -227.8403 Td
 (4801 4843 4862 4911) 83.0018 Tj
--6520.6 TJm
-(execcmd 6769 6953) 74.2647 Tj
-17.4609 -284.8 Td
+-8527.14 TJm
+(5666 5730 5731) 61.1592 Tj
+17.4613 -237.3336 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.6 TJm
+(EXEC 6857) 39.3166 Tj
+0 -246.827 Td
+(CRTPORT 6264) 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
+(6857 6922 7059 7365) 83.0018 Tj
+17.4613 -256.3203 Td
+(6264 6306 6307 6308) 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
+(execcmd 6869 7053) 74.2647 Tj
+17.4613 -265.8137 Td
+(6309 6325 6326 6327) 83.0018 Tj
+-8527.14 TJm
+(6869 6910 6923 7053) 83.0018 Tj
+17.4613 -275.3071 Td
+(6328) 17.4741 Tj
+-16052.1 TJm
+(7055 7321 7327 7328) 83.0018 Tj
+0 -284.8004 Td
+(CTL 6059) 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
+(7356 7366) 39.3166 Tj
+17.4613 -294.2938 Td
+(6059 6085 6089 6235) 83.0018 Tj
+-6520.6 TJm
+(exit 2004) 39.3166 Tj
+0 -303.7871 Td
+(curproc 1789) 52.4222 Tj
+-14045.3 TJm
+(0294 2004 2041 2538) 83.0018 Tj
+17.4613 -313.2805 Td
+(0293 1559 1573 1789) 83.0018 Tj
+-8527.14 TJm
+(2542 2587 2822 6715) 83.0018 Tj
+17.4613 -322.7739 Td
+(1794 1829 1836) 61.1592 Tj
+-11035.5 TJm
+(6718 6776 6781 6811) 83.0018 Tj
+0 -332.2668 Td
 (devsw 2950) 43.6851 Tj
 -15048.7 TJm
-(6816 6825 6835 6880) 83.0018 Tj
-17.4609 -360.747 Td
+(6916 6925 6935 6980) 83.0018 Tj
+17.4613 -341.7602 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
+-8527.14 TJm
+(7028 7035) 39.3166 Tj
+17.4613 -351.2536 Td
+(4158 4160 4407 6556) 83.0018 Tj
 -6520.6 TJm
 (fdalloc 4583) 52.4222 Tj
-17.4609 -379.734 Td
-(6507) 17.4741 Tj
--16052.2 TJm
+17.4613 -360.7469 Td
+(6557) 17.4741 Tj
+-16052.1 TJm
 (4583 4632 4874 4987) 83.0018 Tj
-0 -389.227 Td
+0 -370.2403 Td
 (dinode 3173) 48.0537 Tj
--12540.4 TJm
+-12540.5 TJm
 (fetchint 2666) 56.7907 Tj
-17.4609 -398.721 Td
+17.4613 -379.7336 Td
 (3173 3187 3855 3868) 83.0018 Tj
--8527.18 TJm
-(0333 2666 2696 4963) 83.0018 Tj
-17.4609 -408.214 Td
+-8527.14 TJm
+(0332 2666 2696 4963) 83.0018 Tj
+17.4613 -389.227 Td
 (3956 3962 3980 3983) 83.0018 Tj
 -6520.6 TJm
 (fetchstr 2678) 56.7907 Tj
-0 -417.707 Td
+0 -398.7204 Td
 (dirent 3203) 48.0537 Tj
 -14547 TJm
-(0334 2678 2726 4969) 83.0018 Tj
-17.4609 -427.201 Td
+(0333 2678 2726 4969) 83.0018 Tj
+17.4613 -408.2137 Td
 (3203 4216 4223 4224) 83.0018 Tj
 -6520.6 TJm
 (file 3100) 39.3166 Tj
-17.4609 -436.694 Td
+17.4613 -417.7071 Td
 (4255 4705 4754) 61.1592 Tj
 -11035.5 TJm
 (0202 0225 0226 0227) 83.0018 Tj
-0 -446.188 Td
+0 -427.2004 Td
 (dirlink 4252) 52.4222 Tj
 -14045.3 TJm
-(0229 0230 0231 0290) 83.0018 Tj
-17.4609 -455.681 Td
+(0229 0230 0231 0286) 83.0018 Tj
+17.4613 -436.6938 Td
 (0234 4252 4267 4275) 83.0018 Tj
--8527.18 TJm
+-8527.14 TJm
 (1538 3100 4403 4409) 83.0018 Tj
-17.4609 -465.174 Td
+17.4613 -446.1872 Td
 (4684 4831 4842) 61.1592 Tj
 -11035.5 TJm
 (4418 4425 4426 4427) 83.0018 Tj
-0 -474.668 Td
+0 -455.6805 Td
 (dirlookup 4212) 61.1592 Tj
 -13042 TJm
 (4429 4437 4438 4452) 83.0018 Tj
-17.4609 -484.161 Td
+17.4613 -465.1739 Td
 (0235 4212 4219 4259) 83.0018 Tj
--8527.18 TJm
+-8527.14 TJm
 (4454 4478 4502 4522) 83.0018 Tj
-17.4609 -493.654 Td
+17.4613 -474.6672 Td
 (4374 4770 4811) 61.1592 Tj
 -11035.5 TJm
 (4558 4564 4567 4583) 83.0018 Tj
+0 -484.1606 Td
+(DIRSIZ 3201) 48.0537 Tj
+-14547 TJm
+(4603 4615 4627 4642) 83.0018 Tj
+17.4613 -493.654 Td
+(3201 3205 4205 4272) 83.0018 Tj
+-8527.14 TJm
+(4653 4855 4979 5155) 83.0018 Tj
 Q
 Q
 q
@@ -1925,210 +1938,210 @@ 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.9679 1 0 564.72 392.865] 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
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  cross-references  Page 4) 187.8461 Tj
+17.4613 -28.4801 Td
+(5170 6878 6933 6934) 83.0018 Tj
+-8527.14 TJm
 (0236 3952 3972 4821) 83.0018 Tj
-17.4609 -47.4668 Td
-(5170 6778 6833 6834) 83.0018 Tj
--6520.6 TJm
+17.4613 -37.9735 Td
+(7064 7072 7272) 61.1592 Tj
+-9028.94 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
+0 -47.4664 Td
 (filealloc 4419) 61.1592 Tj
--11035.4 TJm
-(I_BUSY 3266) 48.0537 Tj
-17.4609 -75.9469 Td
+-13042 TJm
+(3190 3867 3961 3982) 83.0018 Tj
+17.4613 -56.9598 Td
 (0225 4419 4874 5176) 83.0018 Tj
--8527.18 TJm
-(3266 3861 3863 3886) 83.0018 Tj
-0 -85.4403 Td
+-6520.6 TJm
+(ICRHI 5674) 43.6851 Tj
+0 -66.4531 Td
 (fileclose 4452) 61.1592 Tj
 -13042 TJm
-(3890 3907 3909 3915) 83.0018 Tj
-17.4609 -94.9336 Td
+(5674 5737 5821 5833) 83.0018 Tj
+17.4613 -75.9465 Td
 (0226 2015 4452 4458) 83.0018 Tj
 -6520.6 TJm
-(ICRHI 5671) 43.6851 Tj
-17.4609 -104.427 Td
+(ICRLO 5667) 43.6851 Tj
+17.4613 -85.4399 Td
 (4473 4647 4876 4990) 83.0018 Tj
--8527.18 TJm
-(5671 5740 5786 5792) 83.0018 Tj
-17.4609 -113.92 Td
+-8527.14 TJm
+(5667 5738 5739 5822) 83.0018 Tj
+17.4613 -94.9332 Td
 (4991 5205 5209) 61.1592 Tj
--9028.94 TJm
-(ICRLO 5664) 43.6851 Tj
-0 -123.413 Td
+-11035.5 TJm
+(5824 5834) 39.3166 Tj
+0 -104.4266 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
+-12038.8 TJm
+(ID 5660) 30.5796 Tj
+17.4613 -113.9199 Td
+(0227 1741 4438 4442) 83.0018 Tj
+-8527.14 TJm
+(5660 5693 5766) 61.1592 Tj
+17.4613 -123.4133 Td
 (4634) 17.4741 Tj
 -14045.6 TJm
-(ID 5657) 30.5796 Tj
-0 -151.893 Td
+(IDE_BSY 3312) 52.4222 Tj
+0 -132.9067 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
+(3312 3336) 39.3166 Tj
+17.4613 -142.4 Td
+(0228 1229 4412) 61.1592 Tj
 -9028.94 TJm
-(IDE_BSY 3312) 52.4222 Tj
-0 -170.88 Td
+(IDE_CMD_READ 3317) 74.2647 Tj
+0 -151.8934 Td
 (fileread 4502) 56.7907 Tj
 -13543.7 TJm
-(3312 3336) 39.3166 Tj
-17.4609 -180.373 Td
+(3317 3391) 39.3166 Tj
+17.4613 -161.3867 Td
 (0229 4502 4517 4609) 83.0018 Tj
 -6520.6 TJm
-(IDE_CMD_READ 3317) 74.2647 Tj
-0 -189.867 Td
+(IDE_CMD_WRITE 3318) 78.6333 Tj
+0 -170.8801 Td
 (filestat 4478) 56.7907 Tj
 -13543.7 TJm
-(3317 3391) 39.3166 Tj
-17.4609 -199.36 Td
+(3318 3388) 39.3166 Tj
+17.4613 -180.3735 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
+0 -189.8664 Td
 (filewrite 4522) 61.1592 Tj
 -13042 TJm
-(3313 3336) 39.3166 Tj
-17.4609 -256.32 Td
+(3314 3338) 39.3166 Tj
+17.4613 -199.3598 Td
 (0231 4522 4537 4621) 83.0018 Tj
 -6520.6 TJm
+(IDE_DRDY 3313) 56.7907 Tj
+0 -208.8532 Td
+(file_table_lock 4408) 87.3703 Tj
+-10032 TJm
+(3313 3336) 39.3166 Tj
+17.4613 -218.3465 Td
+(4408 4414 4423 4428) 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
+17.4613 -227.8399 Td
+(4432 4440 4444 4456) 83.0018 Tj
+-8527.14 TJm
 (3315 3338) 39.3166 Tj
-17.4609 -275.307 Td
-(0610 1766) 39.3166 Tj
+17.4613 -237.3332 Td
+(4460 4466) 39.3166 Tj
 -11537.3 TJm
 (ide_init 3351) 56.7907 Tj
-0 -284.8 Td
-(fork1 6931) 43.6851 Tj
+0 -246.8266 Td
+(FL_IF 0610) 43.6851 Tj
 -15048.7 TJm
-(0251 1245 3351) 61.1592 Tj
-17.4609 -294.293 Td
-(6800 6842 6854 6861) 83.0018 Tj
+(0251 1232 3351) 61.1592 Tj
+17.4613 -256.32 Td
+(0610 1462 1468 1771) 83.0018 Tj
 -6520.6 TJm
 (ide_intr 3402) 56.7907 Tj
-17.4609 -303.787 Td
-(6876 6916 6931) 61.1592 Tj
+17.4613 -265.8133 Td
+(1855 5758) 39.3166 Tj
+-13543.8 TJm
+(0252 2557 3402) 61.1592 Tj
+0 -275.3067 Td
+(fork1 7039) 43.6851 Tj
+-13042.1 TJm
+(ide_lock 3324) 56.7907 Tj
+17.4613 -284.8 Td
+(6900 6942 6954 6961) 83.0018 Tj
+-8527.14 TJm
+(3324 3355 3406 3408) 83.0018 Tj
+17.4613 -294.2934 Td
+(6976 7024 7039) 61.1592 Tj
 -11035.5 TJm
-(0252 2561 3402) 61.1592 Tj
-0 -313.28 Td
-(forkret 1878) 52.4222 Tj
+(3425 3465 3480 3482) 83.0018 Tj
+0 -303.7868 Td
+(forkret 1880) 52.4222 Tj
 -12038.8 TJm
-(ide_lock 3324) 56.7907 Tj
-17.4609 -322.773 Td
-(1615 1741 1878) 61.1592 Tj
+(ide_rw 3454) 48.0537 Tj
+17.4613 -313.2801 Td
+(1614 1747 1880) 61.1592 Tj
 -11035.5 TJm
-(3324 3355 3406 3409) 83.0018 Tj
-0 -332.267 Td
+(0253 3454 3459 3461) 83.0018 Tj
+0 -322.7735 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
+(3608 3619) 39.3166 Tj
+17.4613 -332.2664 Td
+(1615 1886 2483 2484) 83.0018 Tj
 -6520.6 TJm
-(ide_rw 3454) 48.0537 Tj
-0 -351.254 Td
+(ide_start_request 3375) 96.1073 Tj
+0 -341.7598 Td
 (gatedesc 0751) 56.7907 Tj
 -13543.7 TJm
-(0253 3454 3459 3461) 83.0018 Tj
-17.4609 -360.747 Td
+(3328 3375 3378 3423) 83.0018 Tj
+17.4613 -351.2532 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
+-8527.14 TJm
 (3475) 17.4741 Tj
-0 -398.72 Td
-(getcmd 6884) 48.0537 Tj
--12540.4 TJm
+0 -360.7465 Td
+(getcallerpcs 1422) 74.2647 Tj
+-9530.47 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
+17.4613 -370.2399 Td
+(0312 1392 1422 2129) 83.0018 Tj
+-8527.14 TJm
+(3332 3358 3380 3413) 83.0018 Tj
+17.4613 -379.7332 Td
+(6575) 17.4741 Tj
+-14045.6 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
+0 -389.2266 Td
+(getcmd 6984) 48.0537 Tj
+-14547 TJm
+(0340 1256 2528) 61.1592 Tj
+17.4613 -398.72 Td
+(6984 7015) 39.3166 Tj
+-11537.3 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
+0 -408.2133 Td
+(gettoken 7156) 56.7907 Tj
+-13543.7 TJm
+(0237 1742 3838 4361) 83.0018 Tj
+17.4613 -417.7067 Td
+(7156 7241 7245 7257) 83.0018 Tj
+-6520.6 TJm
 (iget 3803) 39.3166 Tj
-17.4609 -465.173 Td
-(0298 1653 2858) 61.1592 Tj
--11035.5 TJm
+17.4613 -427.2 Td
+(7270 7271 7307 7311) 83.0018 Tj
+-8527.14 TJm
 (3803 3823 3968 4234) 83.0018 Tj
-0 -474.667 Td
-(holding 1489) 52.4222 Tj
--14045.3 TJm
+17.4613 -436.6934 Td
+(7333) 17.4741 Tj
+-16052.1 TJm
 (4359) 17.4741 Tj
-17.4609 -484.16 Td
-(0316 1427 1454 1489) 83.0018 Tj
--6520.6 TJm
+0 -446.1868 Td
+(growproc 1653) 56.7907 Tj
+-11537.1 TJm
 (iinit 3789) 43.6851 Tj
-17.4609 -493.654 Td
-(1857) 17.4741 Tj
--16052.2 TJm
-(0238 1242 3789) 61.1592 Tj
+17.4613 -455.6801 Td
+(0295 1653 2858) 61.1592 Tj
+-11035.5 TJm
+(0238 1230 3789) 61.1592 Tj
+0 -465.1735 Td
+(holding 1440) 52.4222 Tj
+-12038.8 TJm
+(ilock 3852) 43.6851 Tj
+17.4613 -474.6665 Td
+(0313 1378 1404 1440) 83.0018 Tj
+-8527.14 TJm
+(0239 3852 3858 3878) 83.0018 Tj
+17.4613 -484.1598 Td
+(1859) 17.4741 Tj
+-16052.1 TJm
+(4364 4481 4511 4531) 83.0018 Tj
+0 -493.6532 Td
+(ialloc 3952) 48.0537 Tj
+-14547 TJm
+(4672 4683 4693 4762) 83.0018 Tj
 Q
 Q
 Q
@@ -2156,8 +2169,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -2172,210 +2184,210 @@ 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.9679 1 0 564.72 738.865] 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
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  cross-references  Page 5) 187.8461 Tj
+17.4613 -28.4801 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
+-8527.14 TJm
+(5932) 17.4741 Tj
+17.4613 -37.9735 Td
+(4867 4937 5020 6444) 83.0018 Tj
 -6520.6 TJm
-(IO_PIC1 5907) 52.4222 Tj
-17.4609 -85.4403 Td
-(6463 6485) 39.3166 Tj
+(IO_PIC1 5957) 52.4222 Tj
+17.4613 -47.4668 Td
+(6513 6533) 39.3166 Tj
 -13543.8 TJm
-(5907 5920 5935 5944) 83.0018 Tj
-0 -94.9336 Td
-(inb 0354) 34.9481 Tj
+(5957 5970 5985 5994) 83.0018 Tj
+0 -56.9602 Td
+(inb 0353) 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
+(5997 6002 6012 6026) 83.0018 Tj
+17.4613 -66.4535 Td
+(0353 0928 0936 1154) 83.0018 Tj
+-8527.14 TJm
+(6027) 17.4741 Tj
+17.4613 -75.9469 Td
+(3336 3363 5646 6214) 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
+(IO_PIC2 5958) 52.4222 Tj
+17.4613 -85.4403 Td
+(6217 6282 6307 6309) 83.0018 Tj
+-8527.14 TJm
+(5958 5971 5986 6015) 83.0018 Tj
+0 -94.9336 Td
 (INDIRECT 3168) 56.7907 Tj
 -13543.7 TJm
-(5966 5967 5970 5979) 83.0018 Tj
-17.4609 -142.4 Td
+(6016 6017 6020 6029) 83.0018 Tj
+17.4613 -104.427 Td
 (3168 4027 4030 4065) 83.0018 Tj
--8527.18 TJm
-(5980) 17.4741 Tj
-17.4609 -151.894 Td
+-8527.14 TJm
+(6030) 17.4741 Tj
+17.4613 -113.9203 Td
 (4066 4073) 39.3166 Tj
 -11537.3 TJm
-(IO_TIMER1 6559) 61.1592 Tj
-0 -161.387 Td
-(initlock 1413) 56.7907 Tj
+(IO_RTC 5800) 48.0537 Tj
+0 -123.4137 Td
+(initlock 1363) 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
+(5800 5813 5814) 61.1592 Tj
+17.4613 -132.9071 Td
+(0314 1363 1620 2231) 83.0018 Tj
 -6520.6 TJm
-(IPB 3187) 34.9481 Tj
-17.4609 -180.374 Td
+(IO_TIMER1 6609) 61.1592 Tj
+17.4613 -142.4004 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
+-8527.14 TJm
+(6609 6618 6628 6629) 83.0018 Tj
+17.4613 -151.8938 Td
+(4414 5184 6553 6554) 83.0018 Tj
+-6520.6 TJm
+(IPB 3187) 34.9481 Tj
+0 -161.3871 Td
 (inode 3252) 43.6851 Tj
--13042.1 TJm
-(iput 3902) 39.3166 Tj
-17.4609 -208.854 Td
+-15048.7 TJm
+(3187 3190 3196 3868) 83.0018 Tj
+17.4613 -170.8805 Td
 (0203 0234 0235 0236) 83.0018 Tj
--8527.18 TJm
-(0240 2020 3902 3908) 83.0018 Tj
-17.4609 -218.347 Td
+-8527.14 TJm
+(3962 3983) 39.3166 Tj
+17.4613 -180.3739 Td
 (0237 0239 0240 0241) 83.0018 Tj
--8527.18 TJm
-(3927 4260 4382 4471) 83.0018 Tj
-17.4609 -227.841 Td
+-6520.6 TJm
+(iput 3902) 39.3166 Tj
+17.4613 -189.8672 Td
 (0242 0243 0245 0246) 83.0018 Tj
--8527.18 TJm
-(4687 4943) 39.3166 Tj
-17.4609 -237.334 Td
+-8527.14 TJm
+(0240 2020 3902 3908) 83.0018 Tj
+17.4613 -199.3606 Td
 (0247 0248 0249 1539) 83.0018 Tj
--6520.6 TJm
-(IRQ_ERROR 2384) 61.1592 Tj
-17.4609 -246.827 Td
+-8527.14 TJm
+(3927 4260 4382 4471) 83.0018 Tj
+17.4613 -208.8539 Td
 (2951 2952 3106 3252) 83.0018 Tj
--8527.18 TJm
-(2384 5730) 39.3166 Tj
-17.4609 -256.321 Td
+-8527.14 TJm
+(4687 4943) 39.3166 Tj
+17.4613 -218.3473 Td
 (3675 3785 3802 3805) 83.0018 Tj
 -6520.6 TJm
-(IRQ_IDE 2383) 52.4222 Tj
-17.4609 -265.814 Td
+(IRQ_ERROR 2384) 61.1592 Tj
+17.4613 -227.8407 Td
 (3811 3837 3838 3852) 83.0018 Tj
--8527.18 TJm
-(2383 2560 3356 3357) 83.0018 Tj
-17.4609 -275.307 Td
+-8527.14 TJm
+(2384 5727) 39.3166 Tj
+17.4613 -237.334 Td
 (3884 3902 3924 3951) 83.0018 Tj
 -6520.6 TJm
-(IRQ_KBD 2382) 52.4222 Tj
-17.4609 -284.801 Td
+(IRQ_IDE 2383) 52.4222 Tj
+17.4613 -246.8274 Td
 (3977 4010 4052 4082) 83.0018 Tj
--8527.18 TJm
-(2382 2564 6510 6511) 83.0018 Tj
-17.4609 -294.294 Td
+-8527.14 TJm
+(2383 2556 3356 3357) 83.0018 Tj
+17.4613 -256.3207 Td
 (4102 4152 4211 4212) 83.0018 Tj
 -6520.6 TJm
-(IRQ_OFFSET 2379) 65.5277 Tj
-17.4609 -303.788 Td
+(IRQ_KBD 2382) 52.4222 Tj
+17.4613 -265.8141 Td
 (4252 4256 4353 4356) 83.0018 Tj
--8527.18 TJm
-(2379 2551 2560 2564) 83.0018 Tj
-17.4609 -313.281 Td
+-8527.14 TJm
+(2382 2560 6560 6561) 83.0018 Tj
+17.4613 -275.3075 Td
 (4388 4395 4666 4702) 83.0018 Tj
--8527.18 TJm
-(2568 2595 5707 5718) 83.0018 Tj
-17.4609 -322.774 Td
+-6520.6 TJm
+(IRQ_OFFSET 2379) 65.5277 Tj
+17.4613 -284.8008 Td
 (4753 4800 4804 4856) 83.0018 Tj
--8527.18 TJm
-(5730 5867 5881 5947) 83.0018 Tj
-17.4609 -332.268 Td
+-8527.14 TJm
+(2379 2547 2556 2560) 83.0018 Tj
+17.4613 -294.2942 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
+-8527.14 TJm
+(2564 2591 5707 5714) 83.0018 Tj
+17.4613 -303.7875 Td
+(6435 6501) 39.3166 Tj
+-13543.8 TJm
+(5727 5917 5931 5997) 83.0018 Tj
+0 -313.2809 Td
+(INPUT_BUF 6450) 61.1592 Tj
 -13042 TJm
-(5910 5914 5952 5967) 83.0018 Tj
-17.4609 -360.748 Td
-(6400 6403 6424 6436) 83.0018 Tj
+(6016) 17.4741 Tj
+17.4613 -322.7743 Td
+(6450 6453 6474 6486) 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
+(IRQ_SLAVE 5960) 61.1592 Tj
+17.4613 -332.2676 Td
+(6487 6489 6518) 61.1592 Tj
+-11035.5 TJm
+(5960 5964 6002 6017) 83.0018 Tj
+0 -341.761 Td
+(insl 0362) 39.3166 Tj
 -13543.8 TJm
-(IRQ_TIMER 2381) 61.1592 Tj
-17.4609 -389.228 Td
-(0363 1173 3415) 61.1592 Tj
+(IRQ_SPURIOUS 2385) 74.2647 Tj
+17.4613 -351.2543 Td
+(0362 1173 3414) 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
+(2385 2564 5707) 61.1592 Tj
+0 -360.7477 Td
+(INT_DISABLED 5869) 74.2647 Tj
+-9530.47 TJm
+(IRQ_TIMER 2381) 61.1592 Tj
+17.4613 -370.2411 Td
+(5869 5917) 39.3166 Tj
+-13543.8 TJm
+(2381 2547 2591 5714) 83.0018 Tj
+0 -379.7344 Td
+(IOAPIC 5858) 48.0537 Tj
+-14547 TJm
+(6630) 17.4741 Tj
+17.4613 -389.2278 Td
+(5858 5908) 39.3166 Tj
 -11537.3 TJm
 (isdirempty 4702) 65.5277 Tj
-0 -417.707 Td
-(IOAPIC 5808) 48.0537 Tj
--14547 TJm
+0 -398.7211 Td
+(ioapic_enable 5923) 78.6333 Tj
+-11035.3 TJm
 (4702 4709 4778) 61.1592 Tj
-17.4609 -427.201 Td
-(5808 5858) 39.3166 Tj
--11537.3 TJm
+17.4613 -408.2145 Td
+(0256 3357 5923 6561) 83.0018 Tj
+-6520.6 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
+0 -417.7079 Td
 (ioapic_id 5516) 61.1592 Tj
--11035.4 TJm
+-13042 TJm
+(0276 1233 5514 5613) 83.0018 Tj
+17.4613 -427.2012 Td
+(0257 5516 5628 5911) 83.0018 Tj
+-8527.14 TJm
+(5905 5925) 39.3166 Tj
+17.4613 -436.6946 Td
+(5912) 17.4741 Tj
+-14045.6 TJm
 (itrunc 4052) 48.0537 Tj
-17.4609 -465.174 Td
-(0257 5516 5628 5861) 83.0018 Tj
--8527.18 TJm
+0 -446.1879 Td
+(ioapic_init 5901) 69.8962 Tj
+-12038.7 TJm
 (3675 3911 4052) 61.1592 Tj
-17.4609 -474.668 Td
-(5862) 17.4741 Tj
--14045.6 TJm
+17.4613 -455.6813 Td
+(0258 1226 5901 5912) 83.0018 Tj
+-6520.6 TJm
 (iunlock 3884) 52.4222 Tj
-0 -484.161 Td
-(ioapic_init 5851) 69.8962 Tj
+0 -465.1747 Td
+(ioapic_read 5884) 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
+17.4613 -474.6676 Td
+(5884 5909 5910) 61.1592 Tj
+-11035.5 TJm
 (4371 4483 4514 4534) 83.0018 Tj
+0 -484.161 Td
+(ioapic_write 5891) 74.2647 Tj
+-11537 TJm
+(4679 4880 4942 6439) 83.0018 Tj
+17.4613 -493.6543 Td
+(5891 5917 5918 5931) 83.0018 Tj
+-8527.14 TJm
+(6506) 17.4741 Tj
 Q
 Q
 q
@@ -2389,210 +2401,210 @@ 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.9679 1 0 564.72 392.865] 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
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  cross-references  Page 6) 187.8461 Tj
+0 -28.4801 Td
 (iunlockput 3924) 65.5277 Tj
--12540.3 TJm
-(6021 6065 6087 6111) 83.0018 Tj
-17.4609 -56.9602 Td
+-10533.8 TJm
+(KEY_RT 6074) 48.0537 Tj
+17.4613 -37.9735 Td
 (0242 3924 4366 4375) 83.0018 Tj
--6520.6 TJm
-(kfree 2255) 43.6851 Tj
-17.4609 -66.4535 Td
+-8527.14 TJm
+(6074 6117 6139 6163) 83.0018 Tj
+17.4613 -47.4664 Td
 (4378 4674 4686 4692) 83.0018 Tj
--8527.18 TJm
-(0262 1664 1726 2069) 83.0018 Tj
-17.4609 -75.9469 Td
+-6520.6 TJm
+(KEY_UP 6071) 48.0537 Tj
+17.4613 -56.9594 Td
 (4696 4766 4771 4779) 83.0018 Tj
--8527.18 TJm
-(2070 2236 2255 2260) 83.0018 Tj
-17.4609 -85.4403 Td
+-8527.14 TJm
+(6071 6115 6137 6161) 83.0018 Tj
+17.4613 -66.4524 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
+(kfree 2255) 43.6851 Tj
+17.4613 -75.9453 Td
+(4815 4822 4833 4834) 83.0018 Tj
+-8527.14 TJm
+(0262 1662 1731 2069) 83.0018 Tj
+17.4613 -85.4383 Td
 (4845 4869 4877 4913) 83.0018 Tj
--8527.18 TJm
-(0299 1976 2581 2837) 83.0018 Tj
-17.4609 -113.92 Td
+-8527.14 TJm
+(2070 2236 2255 2260) 83.0018 Tj
+17.4613 -94.9313 Td
 (4925 4939 5069 5112) 83.0018 Tj
--8527.18 TJm
-(6717) 17.4741 Tj
-0 -123.413 Td
+-8527.14 TJm
+(5101 5111 5202 5228) 83.0018 Tj
+0 -104.4246 Td
 (iupdate 3977) 52.4222 Tj
 -12038.8 TJm
-(kinit 2225) 43.6851 Tj
-17.4609 -132.907 Td
+(kill 1976) 39.3166 Tj
+17.4613 -113.918 Td
 (0243 3913 3977 4077) 83.0018 Tj
--8527.18 TJm
-(0263 1238 2225) 61.1592 Tj
-17.4609 -142.4 Td
+-8527.14 TJm
+(0296 1976 2578 2839) 83.0018 Tj
+17.4613 -123.411 Td
 (4178 4678 4695 4790) 83.0018 Tj
+-8527.14 TJm
+(6817) 17.4741 Tj
+17.4613 -132.9039 Td
+(4829 4840) 39.3166 Tj
+-11537.3 TJm
+(kinit 2225) 43.6851 Tj
+0 -142.3973 Td
+(I_BUSY 3266) 48.0537 Tj
+-14547 TJm
+(0263 1227 2225) 61.1592 Tj
+17.4613 -151.8907 Td
+(3266 3861 3863 3886) 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
+17.4613 -161.3836 Td
+(3890 3907 3909 3915) 83.0018 Tj
+-8527.14 TJm
+(0152 1283 1284 1680) 83.0018 Tj
+0 -170.877 Td
 (I_VALID 3267) 52.4222 Tj
 -14045.3 TJm
-(1726 2070) 39.3166 Tj
-17.4609 -170.88 Td
+(1719 1723 1731 2070) 83.0018 Tj
+17.4613 -180.3703 Td
 (3267 3866 3876 3905) 83.0018 Tj
 -6520.6 TJm
-(lapic_eoi 5760) 61.1592 Tj
-0 -180.373 Td
+(lapicw 5690) 48.0537 Tj
+0 -189.8633 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
+(5690 5707 5713 5714) 83.0018 Tj
+17.4613 -199.3567 Td
+(0261 1283 1657 1719) 83.0018 Tj
+-8527.14 TJm
+(5715 5718 5719 5724) 83.0018 Tj
+17.4613 -208.8497 Td
+(1730 1764 2231 2304) 83.0018 Tj
+-8527.14 TJm
+(5727 5730 5731 5734) 83.0018 Tj
+17.4613 -218.3426 Td
+(2310 2328 5052 5178) 83.0018 Tj
+-8527.14 TJm
+(5737 5738 5743 5775) 83.0018 Tj
+0 -227.836 Td
 (kalloc_lock 2212) 69.8962 Tj
--10032.1 TJm
-(lapic_startap 5780) 78.6333 Tj
-17.4609 -227.84 Td
+-12038.7 TJm
+(5821 5822 5824 5833) 83.0018 Tj
+17.4613 -237.3293 Td
 (2212 2231 2265 2293) 83.0018 Tj
--8527.18 TJm
-(0275 1293 5780) 61.1592 Tj
-17.4609 -237.334 Td
+-8527.14 TJm
+(5834) 17.4741 Tj
+17.4613 -246.8223 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
+(lapic_eoi 5772) 61.1592 Tj
+0 -256.3157 Td
+(KBDATAP 6054) 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
+(0271 2554 2558 2562) 83.0018 Tj
+17.4613 -265.809 Td
+(6054 6217) 39.3166 Tj
+-13543.8 TJm
+(2567 5772) 39.3166 Tj
+0 -275.3024 Td
+(kbd_getc 6206) 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
+(lapic_init 5701) 65.5277 Tj
+17.4613 -284.7958 Td
+(6206 6248) 39.3166 Tj
+-13543.8 TJm
+(0272 1220 1258 5701) 83.0018 Tj
+0 -294.2891 Td
+(kbd_intr 6246) 56.7907 Tj
 -11537.1 TJm
-(LINT0 5676) 43.6851 Tj
-17.4609 -294.293 Td
-(0266 2565 6196) 61.1592 Tj
+(lapic_startap 5805) 78.6333 Tj
+17.4613 -303.7825 Td
+(0266 2561 6246) 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
+(0273 1286 5805) 61.1592 Tj
+0 -313.2758 Td
+(KBSTATP 6052) 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
+(lgdt 0403) 39.3166 Tj
+17.4613 -322.7692 Td
+(6052 6214) 39.3166 Tj
+-13543.8 TJm
+(0403 0411 0954 1054) 83.0018 Tj
+0 -332.2622 Td
+(KBS_DIB 6053) 52.4222 Tj
+-14045.3 TJm
+(1700) 17.4741 Tj
+17.4613 -341.7555 Td
+(6053 6215) 39.3166 Tj
+-11537.3 TJm
+(lidt 0417) 39.3166 Tj
+0 -351.2489 Td
+(KEY_DEL 6078) 52.4222 Tj
+-14045.3 TJm
+(0417 0425 2530) 61.1592 Tj
+17.4613 -360.7422 Td
+(6078 6119 6141 6165) 83.0018 Tj
+-6520.6 TJm
+(LINT0 5679) 43.6851 Tj
+0 -370.2356 Td
+(KEY_DN 6072) 48.0537 Tj
 -14547 TJm
-(7003 7146 7257 7284) 83.0018 Tj
-17.4609 -370.24 Td
-(6022 6065 6087 6111) 83.0018 Tj
+(5679 5718) 39.3166 Tj
+17.4613 -379.729 Td
+(6072 6115 6137 6161) 83.0018 Tj
 -6520.6 TJm
-(LPTPORT 6215) 52.4222 Tj
-0 -379.734 Td
-(KEY_END 6020) 52.4222 Tj
+(LINT1 5680) 43.6851 Tj
+0 -389.2223 Td
+(KEY_END 6070) 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
+(5680 5719) 39.3166 Tj
+17.4613 -398.7157 Td
+(6070 6118 6140 6164) 83.0018 Tj
+-6520.6 TJm
+(LIST 6860) 39.3166 Tj
+0 -408.209 Td
+(KEY_HOME 6069) 56.7907 Tj
+-13543.7 TJm
+(6860 6940 7107 7383) 83.0018 Tj
+17.4613 -417.7024 Td
+(6069 6118 6140 6164) 83.0018 Tj
+-6520.6 TJm
+(listcmd 6890 7101) 74.2647 Tj
+0 -427.1958 Td
+(KEY_INS 6077) 52.4222 Tj
+-14045.3 TJm
+(6890 6911 6941 7101) 83.0018 Tj
+17.4613 -436.6891 Td
+(6077 6119 6141 6165) 83.0018 Tj
+-8527.14 TJm
+(7103 7246 7357 7384) 83.0018 Tj
+0 -446.1825 Td
+(KEY_LF 6073) 48.0537 Tj
+-12540.5 TJm
+(LPTPORT 6265) 52.4222 Tj
+17.4613 -455.6758 Td
+(6073 6117 6139 6163) 83.0018 Tj
+-8527.14 TJm
+(6265 6282 6286 6287) 83.0018 Tj
+0 -465.1692 Td
+(KEY_PGDN 6076) 56.7907 Tj
+-13543.7 TJm
+(6288) 17.4741 Tj
+17.4613 -474.6622 Td
+(6076 6116 6138 6162) 83.0018 Tj
+-6520.6 TJm
+(lpt_putc 6278) 56.7907 Tj
+0 -484.1555 Td
+(KEY_PGUP 6075) 56.7907 Tj
+-13543.7 TJm
+(6278 6341) 39.3166 Tj
+17.4613 -493.6489 Td
+(6075 6116 6138 6162) 83.0018 Tj
+-6520.6 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
@@ -2620,8 +2632,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -2636,210 +2647,210 @@ 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.9679 1 0 564.72 738.865] 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
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  cross-references  Page 7) 187.8461 Tj
+17.4613 -28.4801 Td
+(0429 0431 1701) 61.1592 Tj
+-11035.5 TJm
+(5638) 17.4741 Tj
+0 -37.9735 Td
+(MAXARGS 6863) 52.4222 Tj
+-12038.8 TJm
+(mp_search 5556) 61.1592 Tj
+17.4613 -47.4664 Td
+(6863 6871 6872 7340) 83.0018 Tj
+-8527.14 TJm
+(5556 5585) 39.3166 Tj
+0 -56.9598 Td
+(MAXFILE 3170) 52.4222 Tj
+-12038.8 TJm
+(mp_search1 5537) 65.5277 Tj
+17.4613 -66.4531 Td
+(3170 4165 4166) 61.1592 Tj
+-11035.5 TJm
+(5537 5564 5568 5571) 83.0018 Tj
+0 -75.9465 Td
+(memcmp 5315) 48.0537 Tj
+-12540.5 TJm
+(NADDRS 3166) 48.0537 Tj
+17.4613 -85.4399 Td
+(0320 5315 5543 5588) 83.0018 Tj
+-8527.14 TJm
 (3166 3179 3263) 61.1592 Tj
-17.4609 -37.9735 Td
-(1731 1775 3684 3874) 83.0018 Tj
--6520.6 TJm
+0 -94.9332 Td
+(memmove 5331) 52.4222 Tj
+-12038.8 TJm
 (namecmp 4203) 52.4222 Tj
-17.4609 -47.4668 Td
-(3989 4121 4171 4328) 83.0018 Tj
--8527.18 TJm
+17.4613 -104.4266 Td
+(0321 1276 1660 1727) 83.0018 Tj
+-8527.14 TJm
 (0244 4203 4228 4765) 83.0018 Tj
-17.4609 -56.9602 Td
-(4330 5080 5331 6270) 83.0018 Tj
+17.4613 -113.9199 Td
+(1737 1780 3684 3874) 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
+17.4613 -123.4133 Td
+(3989 4121 4171 4328) 83.0018 Tj
+-8527.14 TJm
+(0245 1765 4389 4670) 83.0018 Tj
+17.4613 -132.9067 Td
+(4330 5080 5331 6320) 83.0018 Tj
+-8527.14 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
+0 -142.4 Td
+(memset 5303) 48.0537 Tj
+-12540.5 TJm
 (nameiparent 4396) 69.8962 Tj
-17.4609 -113.92 Td
-(6969 6985 7006 7019) 83.0018 Tj
--8527.18 TJm
+17.4613 -151.8934 Td
+(0322 1217 1661 1746) 83.0018 Tj
+-8527.14 TJm
 (0246 4396 4681 4760) 83.0018 Tj
-0 -123.413 Td
-(microdelay 5769) 65.5277 Tj
--12540.3 TJm
+17.4613 -161.3867 Td
+(1766 2263 3695 3964) 83.0018 Tj
+-8527.14 TJm
 (4807) 17.4741 Tj
-17.4609 -132.907 Td
-(5769 5788) 39.3166 Tj
--11537.3 TJm
+17.4613 -170.8801 Td
+(4784 4959 5055 5067) 83.0018 Tj
+-6520.6 TJm
 (NBUF 0156) 39.3166 Tj
-0 -142.4 Td
+17.4613 -180.3735 Td
+(5303 6322 6987 7058) 83.0018 Tj
+-8527.14 TJm
+(0156 3529 3553) 61.1592 Tj
+17.4613 -189.8668 Td
+(7069 7085 7106 7119) 83.0018 Tj
+-6520.6 TJm
+(NCPU 0153) 39.3166 Tj
+0 -199.3602 Td
+(microdelay 5781) 65.5277 Tj
+-12540.3 TJm
+(0153 1568 5512) 61.1592 Tj
+17.4613 -208.8535 Td
+(5781 5823 5825 5835) 83.0018 Tj
+-6520.6 TJm
+(NDEV 0158) 39.3166 Tj
+0 -218.3469 Td
 (min 3674) 34.9481 Tj
 -16052 TJm
-(0156 3529 3553) 61.1592 Tj
-17.4609 -151.893 Td
+(0158 4108 4158 4407) 83.0018 Tj
+17.4613 -227.8403 Td
 (3674 4120 4170) 61.1592 Tj
 -9028.94 TJm
-(NCPU 0153) 39.3166 Tj
-0 -161.387 Td
+(NDIRECT 3167) 52.4222 Tj
+0 -237.3336 Td
 (mp 5402) 30.5796 Tj
-174.613 -161.387 Td
-(0153 1221 1559 1576) 83.0018 Tj
-17.461 -170.88 Td
+174.613 -237.3336 Td
+(3166 3167 3170 4015) 83.0018 Tj
+17.461 -246.827 Td
 (5402 5507 5536 5542) 83.0018 Tj
--8527.18 TJm
-(1611 5512) 39.3166 Tj
-17.461 -180.373 Td
+-8527.14 TJm
+(4023 4058) 39.3166 Tj
+17.461 -256.3203 Td
 (5543 5544 5555 5560) 83.0018 Tj
 -6520.6 TJm
-(NDEV 0158) 39.3166 Tj
-17.461 -189.867 Td
+(NELEM 0346) 43.6851 Tj
+17.461 -265.8137 Td
 (5564 5565 5568 5569) 83.0018 Tj
--8527.18 TJm
-(0158 4108 4158 4407) 83.0018 Tj
-17.461 -199.36 Td
+-8527.14 TJm
+(0346 2123 2779 4961) 83.0018 Tj
+17.461 -275.3071 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
+17.461 -284.8004 Td
+(5594 5604 5610 5642) 83.0018 Tj
+-8527.14 TJm
 (0155 4409 4424) 61.1592 Tj
-17.461 -265.813 Td
-(5413 5579 5582 5587) 83.0018 Tj
--6520.6 TJm
+-0.0003 -294.2938 Td
+(MPBUS 5452) 43.6851 Tj
+-13042.1 TJm
 (NINDIRECT 3169) 61.1592 Tj
-17.461 -275.307 Td
-(5605) 17.4741 Tj
--16052.2 TJm
+17.461 -303.7871 Td
+(5452 5631) 39.3166 Tj
+-13543.8 TJm
 (3169 3170 4025 4068) 83.0018 Tj
-1e-04 -284.8 Td
-(mp_config 5580) 61.1592 Tj
--11035.4 TJm
+-0.0003 -313.2805 Td
+(mpconf 5413) 48.0537 Tj
+-12540.5 TJm
 (NINODE 0157) 48.0537 Tj
-17.461 -294.293 Td
-(5580 5610) 39.3166 Tj
--13543.8 TJm
+17.461 -322.7739 Td
+(5413 5579 5582 5587) 83.0018 Tj
+-8527.14 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
+17.461 -332.2672 Td
+(5605) 17.4741 Tj
+-14045.6 TJm
+(NO 6056) 30.5796 Tj
+-0.0003 -341.7606 Td
 (mpioapic 5439) 56.7907 Tj
 -13543.7 TJm
-(6074 6077 6079 6080) 83.0018 Tj
-17.461 -341.76 Td
+(6056 6102 6105 6107) 83.0018 Tj
+17.461 -351.2539 Td
 (5439 5607 5627 5629) 83.0018 Tj
--8527.18 TJm
-(6081 6082 6084 6102) 83.0018 Tj
-1e-04 -351.254 Td
+-8527.14 TJm
+(6108 6109 6110 6112) 83.0018 Tj
+-0.0003 -360.7473 Td
 (MPIOINTR 5454) 56.7907 Tj
 -13543.7 TJm
-(6103 6105 6106 6107) 83.0018 Tj
-17.461 -360.747 Td
+(6124 6127 6129 6130) 83.0018 Tj
+17.461 -370.2407 Td
 (5454 5632) 39.3166 Tj
 -13543.8 TJm
-(6108) 17.4741 Tj
-1e-04 -370.24 Td
+(6131 6132 6134 6152) 83.0018 Tj
+-0.0003 -379.734 Td
 (MPLINTR 5455) 52.4222 Tj
--12038.8 TJm
-(NOFILE 0154) 48.0537 Tj
-17.461 -379.734 Td
+-14045.3 TJm
+(6153 6155 6156 6157) 83.0018 Tj
+17.461 -389.2274 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
+(6158) 17.4741 Tj
+-0.0003 -398.7207 Td
+(mpmain 1253) 48.0537 Tj
+-12540.5 TJm
+(NOFILE 0154) 48.0537 Tj
+17.461 -408.2141 Td
+(1208 1239 1253 1255) 83.0018 Tj
+-8527.14 TJm
+(0154 1538 1739 2013) 83.0018 Tj
+17.461 -417.7075 Td
+(1285) 17.4741 Tj
+-16052.1 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
+-0.0003 -427.2008 Td
 (mpproc 5428) 48.0537 Tj
--14547 TJm
-(0150 1610 1634 1817) 83.0018 Tj
-17.461 -417.707 Td
+-12540.5 TJm
+(NPROC 0150) 43.6851 Tj
+17.461 -436.6942 Td
 (5428 5606 5619 5624) 83.0018 Tj
--8527.18 TJm
+-8527.14 TJm
+(0150 1610 1633 1821) 83.0018 Tj
+-0.0003 -446.1875 Td
+(mp_bcpu 5519) 52.4222 Tj
+-14045.3 TJm
 (1957 1981 2029 2062) 83.0018 Tj
-1e-04 -427.2 Td
-(mp_search 5556) 61.1592 Tj
--13042 TJm
+17.461 -455.6809 Td
+(0277 1220 1257 5519) 83.0018 Tj
+-8527.14 TJm
 (2119) 17.4741 Tj
-17.461 -436.693 Td
-(5556 5585) 39.3166 Tj
--11537.3 TJm
+-0.0003 -465.1743 Td
+(mp_config 5580) 61.1592 Tj
+-11035.5 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
+17.461 -474.6672 Td
+(5580 5610) 39.3166 Tj
+-13543.8 TJm
+(1506 1562) 39.3166 Tj
+-0.0003 -484.1606 Td
+(mp_init 5601) 52.4222 Tj
+-12038.8 TJm
+(nulterminate 7352) 74.2647 Tj
+17.461 -493.654 Td
+(0278 1219 5601 5637) 83.0018 Tj
+-8527.14 TJm
+(7215 7230 7352 7373) 83.0018 Tj
 Q
 Q
 q
@@ -2853,210 +2864,210 @@ 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  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
+[0 -0.9679 1 0 564.72 392.865] Tm
+0 0 Td
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  cross-references  Page 8) 187.8461 Tj
+17.4613 -28.4801 Td
+(7379 7380 7385 7386) 83.0018 Tj
+-8527.14 TJm
+(6901 6920 6953 7032) 83.0018 Tj
+17.4613 -37.9735 Td
+(7391) 17.4741 Tj
+-16052.1 TJm
+(7045 7228 7272 7306) 83.0018 Tj
+0 -47.4664 Td
+(NUMLOCK 6063) 52.4222 Tj
+-14045.3 TJm
+(7310 7336 7341) 61.1592 Tj
+17.4613 -56.9598 Td
+(6063 6096) 39.3166 Tj
+-11537.3 TJm
+(parseblock 7301) 65.5277 Tj
+0 -66.4531 Td
+(outb 0371) 39.3166 Tj
+-15550.3 TJm
+(7301 7306 7325) 61.1592 Tj
+17.4613 -75.9465 Td
+(0371 0933 0941 1164) 83.0018 Tj
 -6520.6 TJm
-(parseredirs 7164) 69.8962 Tj
-17.4609 -132.907 Td
+(parsecmd 7218) 56.7907 Tj
+17.4613 -85.4399 Td
+(1165 1166 1167 1168) 83.0018 Tj
+-8527.14 TJm
+(6902 7025 7218) 61.1592 Tj
+17.4613 -94.9332 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
+(parseexec 7317) 61.1592 Tj
+17.4613 -104.4266 Td
+(3382 3383 3384 3385) 83.0018 Tj
+-8527.14 TJm
+(7214 7255 7317) 61.1592 Tj
+17.4613 -113.9199 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
+(parseline 7235) 61.1592 Tj
+17.4613 -123.4133 Td
+(5646 5813 5814 5970) 83.0018 Tj
+-8527.14 TJm
+(7212 7224 7235 7246) 83.0018 Tj
+17.4613 -132.9067 Td
+(5971 5985 5986 5994) 83.0018 Tj
+-8527.14 TJm
+(7308) 17.4741 Tj
+17.4613 -142.4 Td
+(5997 6002 6012 6015) 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
+(parsepipe 7251) 61.1592 Tj
+17.4613 -151.8934 Td
+(6016 6017 6020 6026) 83.0018 Tj
+-8527.14 TJm
+(7213 7239 7251 7258) 83.0018 Tj
+17.4613 -161.3867 Td
+(6027 6029 6030 6286) 83.0018 Tj
+-6520.6 TJm
+(parseredirs 7264) 69.8962 Tj
+17.4613 -170.8801 Td
+(6287 6288 6306 6308) 83.0018 Tj
+-8527.14 TJm
+(7264 7312 7331 7342) 83.0018 Tj
+17.4613 -180.3735 Td
+(6325 6326 6327 6328) 83.0018 Tj
+-6520.6 TJm
+(PCINT 5678) 43.6851 Tj
+17.4613 -189.8668 Td
+(6627 6628 6629) 61.1592 Tj
+-11035.5 TJm
+(5678 5724) 39.3166 Tj
+0 -199.3602 Td
+(outsl 0383) 43.6851 Tj
+-13042.1 TJm
+(peek 7201) 39.3166 Tj
+17.4613 -208.8535 Td
+(0383 3389) 39.3166 Tj
+-13543.8 TJm
+(7201 7225 7240 7244) 83.0018 Tj
+0 -218.3469 Td
+(outw 0377) 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
+(7256 7269 7305 7309) 83.0018 Tj
+17.4613 -227.8403 Td
+(0377 1143 1144) 61.1592 Tj
+-11035.5 TJm
+(7324 7332) 39.3166 Tj
+0 -237.3336 Td
+(O_CREATE 3003) 56.7907 Tj
+-11537.1 TJm
+(pic_enable 5975) 65.5277 Tj
+17.4613 -246.827 Td
+(3003 4861 7278 7281) 83.0018 Tj
+-8527.14 TJm
+(0282 3356 5975 6560) 83.0018 Tj
+0 -256.3203 Td
+(O_RDONLY 3000) 56.7907 Tj
 -13543.7 TJm
-(0300 1234 1619) 61.1592 Tj
-17.4609 -284.8 Td
-(3001 4868 4885 4886) 83.0018 Tj
+(6630) 17.4741 Tj
+17.4613 -265.8137 Td
+(3000 7275) 39.3166 Tj
+-11537.3 TJm
+(pic_init 5982) 56.7907 Tj
+0 -275.3071 Td
+(O_RDWR 3002) 48.0537 Tj
+-14547 TJm
+(0283 1225 5982) 61.1592 Tj
+17.4613 -284.8004 Td
+(3002 4868 4886 6764) 83.0018 Tj
 -6520.6 TJm
+(pic_setmask 5967) 69.8962 Tj
+17.4613 -294.2938 Td
+(6766 7007) 39.3166 Tj
+-13543.8 TJm
+(5967 5977 6033) 61.1592 Tj
+0 -303.7871 Td
+(O_WRONLY 3001) 56.7907 Tj
+-11537.1 TJm
+(pinit 1618) 43.6851 Tj
+17.4613 -313.2805 Td
+(3001 4868 4885 4886) 83.0018 Tj
+-8527.14 TJm
+(0297 1223 1618) 61.1592 Tj
+17.4613 -322.7739 Td
+(7278 7281) 39.3166 Tj
+-11537.3 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
+0 -332.2668 Td
 (PAGE 0151) 39.3166 Tj
 -15550.3 TJm
+(0204 0287 0288 0289) 83.0018 Tj
+17.4613 -341.7602 Td
+(0151 0152 1763 2233) 83.0018 Tj
+-8527.14 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
+17.4613 -351.2536 Td
 (2235 2236 2259 2309) 83.0018 Tj
--8527.18 TJm
-(5188 5192 5215 5251) 83.0018 Tj
-17.4609 -332.267 Td
+-8527.14 TJm
+(5160 5172 5178 5184) 83.0018 Tj
+17.4613 -360.7469 Td
 (5049 5051 5178 5202) 83.0018 Tj
--8527.18 TJm
-(5274 6713 6852 6853) 83.0018 Tj
-17.4609 -341.761 Td
+-8527.14 TJm
+(5188 5192 5215 5251) 83.0018 Tj
+17.4613 -370.2403 Td
 (5228) 17.4741 Tj
--14045.6 TJm
+-16052.1 TJm
+(5273 6813 6952 6953) 83.0018 Tj
+0 -379.7336 Td
+(panic 6565 7032) 65.5277 Tj
+-10533.8 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
+17.4613 -389.227 Td
+(0219 1379 1405 1469) 83.0018 Tj
+-8527.14 TJm
+(0286 4984 5170) 61.1592 Tj
+17.4613 -398.7204 Td
+(1471 1856 1858 1860) 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
+17.4613 -408.2137 Td
+(1862 1906 1909 2010) 83.0018 Tj
+-8527.14 TJm
+(0287 4469 5215) 61.1592 Tj
+17.4613 -417.7071 Td
+(2041 2260 2271 2310) 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
+(pipecmd 6884 7080) 74.2647 Tj
+17.4613 -427.2004 Td
+(2575 3378 3459 3461) 83.0018 Tj
+-8527.14 TJm
+(6884 6912 6951 7080) 83.0018 Tj
+17.4613 -436.6938 Td
+(3463 3596 3617 3627) 83.0018 Tj
+-8527.14 TJm
+(7082 7258 7358 7378) 83.0018 Tj
+17.4613 -446.1872 Td
+(3725 3743 3823 3858) 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
+(piperead 5273) 56.7907 Tj
+17.4613 -455.6805 Td
+(3878 3887 3908 3972) 83.0018 Tj
+-8527.14 TJm
+(0288 4509 5273) 61.1592 Tj
+17.4613 -465.1739 Td
+(4047 4219 4267 4275) 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
+17.4613 -474.6672 Td
+(4442 4458 4473 4517) 83.0018 Tj
+-8527.14 TJm
+(5158 5166 5257 5265) 83.0018 Tj
+17.4613 -484.1606 Td
+(4537 4709 4777 4786) 83.0018 Tj
+-8527.14 TJm
+(5288) 17.4741 Tj
+17.4613 -493.654 Td
+(4843 5638 6565 6572) 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
@@ -3084,8 +3095,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -3100,210 +3110,210 @@ 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  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
+[0 -0.9679 1 0 564.72 738.865] Tm
+0 0 Td
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  cross-references  Page 9) 187.8461 Tj
+17.4613 -28.4801 Td
+(0289 4529 5251) 61.1592 Tj
+-11035.5 TJm
+(5758) 17.4741 Tj
+0 -37.9735 Td
+(popcli 1466) 48.0537 Tj
+-12540.5 TJm
+(REDIR 6858) 43.6851 Tj
+17.4613 -47.4664 Td
+(0317 1417 1466 1469) 83.0018 Tj
+-8527.14 TJm
+(6858 6930 7070 7371) 83.0018 Tj
+17.4613 -56.9598 Td
+(1471 1702 1795) 61.1592 Tj
+-9028.94 TJm
+(redircmd 6875 7064) 78.6333 Tj
+0 -66.4531 Td
+(printint 6351) 56.7907 Tj
+-13543.7 TJm
+(6875 6913 6931 7064) 83.0018 Tj
+17.4613 -75.9465 Td
+(6351 6403 6407) 61.1592 Tj
+-11035.5 TJm
+(7066 7275 7278 7281) 83.0018 Tj
+0 -85.4399 Td
+(proc 1529) 39.3166 Tj
+-15550.3 TJm
+(7359 7372) 39.3166 Tj
+17.4613 -94.9332 Td
+(0205 0292 0293 0300) 83.0018 Tj
+-6520.6 TJm
+(REG_ID 5860) 48.0537 Tj
+17.4613 -104.4266 Td
+(0332 0333 1204 1357) 83.0018 Tj
+-8527.14 TJm
+(5860 5910) 39.3166 Tj
+17.4613 -113.9199 Td
+(1529 1535 1559 1605) 83.0018 Tj
+-6520.6 TJm
+(REG_TABLE 5862) 61.1592 Tj
+17.4613 -123.4133 Td
+(1610 1611 1626 1630) 83.0018 Tj
+-8527.14 TJm
+(5862 5917 5918 5931) 83.0018 Tj
+17.4613 -132.9067 Td
+(1634 1672 1708 1709) 83.0018 Tj
+-8527.14 TJm
+(5932) 17.4741 Tj
+17.4613 -142.4 Td
+(1712 1759 1788 1791) 83.0018 Tj
+-6520.6 TJm
+(REG_VER 5861) 52.4222 Tj
+17.4613 -151.8934 Td
+(1810 1822 1955 1957) 83.0018 Tj
+-8527.14 TJm
+(5861 5909) 39.3166 Tj
+17.4613 -161.3867 Td
+(1978 1981 2006 2029) 83.0018 Tj
+-6520.6 TJm
+(release 1402) 52.4222 Tj
+17.4613 -170.8801 Td
+(2055 2063 2115 2120) 83.0018 Tj
+-8527.14 TJm
+(0315 1402 1405 1638) 83.0018 Tj
+17.4613 -180.3735 Td
+(2504 2578 2654 2666) 83.0018 Tj
+-8527.14 TJm
+(1642 1839 1874 1883) 83.0018 Tj
+17.4613 -189.8668 Td
+(2678 2804 2810 3306) 83.0018 Tj
+-8527.14 TJm
 (1919 1932 1969 1987) 83.0018 Tj
-17.4609 -47.4668 Td
-(1535 1559 1605 1610) 83.0018 Tj
--8527.18 TJm
+17.4613 -199.3602 Td
+(3667 4555 5003 5154) 83.0018 Tj
+-8527.14 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
+17.4613 -208.8535 Td
+(5510 5606 5619 5620) 83.0018 Tj
+-8527.14 TJm
+(2316 2322 2326 2552) 83.0018 Tj
+17.4613 -218.3469 Td
+(5621 6261) 39.3166 Tj
+-13543.8 TJm
+(2874 2879 3408 3425) 83.0018 Tj
+0 -227.8403 Td
+(procdump 2104) 56.7907 Tj
+-13543.7 TJm
 (3482 3581 3592 3641) 83.0018 Tj
-17.4609 -85.4403 Td
-(1955 1957 1978 1981) 83.0018 Tj
--8527.18 TJm
+17.4613 -237.3336 Td
+(0298 2104 6470) 61.1592 Tj
+-11035.5 TJm
 (3814 3830 3842 3864) 83.0018 Tj
-17.4609 -94.9336 Td
-(2006 2029 2055 2063) 83.0018 Tj
--8527.18 TJm
+0 -246.827 Td
+(proc_table_lock 1608) 87.3703 Tj
+-10032 TJm
 (3892 3910 3919 4428) 83.0018 Tj
-17.4609 -104.427 Td
-(2115 2120 2504 2581) 83.0018 Tj
--8527.18 TJm
+17.4613 -256.3203 Td
+(1608 1620 1632 1638) 83.0018 Tj
+-8527.14 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
+17.4613 -265.8137 Td
+(1642 1820 1839 1859) 83.0018 Tj
+-8527.14 TJm
+(5225 5259 5268 5280) 83.0018 Tj
+17.4613 -275.3071 Td
+(1860 1871 1874 1883) 83.0018 Tj
+-8527.14 TJm
+(5291 6431 6443 6497) 83.0018 Tj
+17.4613 -284.8004 Td
+(1917 1918 1931 1932) 83.0018 Tj
+-8527.14 TJm
+(6512 6532) 39.3166 Tj
+17.4613 -294.2938 Td
+(1967 1969 1980 1987) 83.0018 Tj
 -6520.6 TJm
 (ROOTDEV 0159) 52.4222 Tj
-0 -151.894 Td
-(procdump 2104) 56.7907 Tj
--13543.7 TJm
+17.4613 -303.7871 Td
+(1991 2023 2058 2076) 83.0018 Tj
+-8527.14 TJm
 (0159 4359) 39.3166 Tj
-17.4609 -161.387 Td
-(0301 2104 6420) 61.1592 Tj
--9028.94 TJm
+17.4613 -313.2805 Td
+(2085 2090) 39.3166 Tj
+-11537.3 TJm
 (run 2214) 34.9481 Tj
-0 -170.88 Td
-(proc_table_lock 1608) 87.3703 Tj
--10032 TJm
+0 -322.7739 Td
+(proghdr 0824) 52.4222 Tj
+-14045.3 TJm
 (2111 2214 2215 2218) 83.0018 Tj
-17.4609 -180.374 Td
-(1608 1621 1633 1639) 83.0018 Tj
--8527.18 TJm
+17.4613 -332.2668 Td
+(0824 1119 1132 5016) 83.0018 Tj
+-8527.14 TJm
 (2257 2266 2267 2269) 83.0018 Tj
-17.4609 -189.867 Td
-(1643 1815 1836 1857) 83.0018 Tj
--8527.18 TJm
+0 -341.7602 Td
+(pushcli 1455) 52.4222 Tj
+-14045.3 TJm
 (2307) 17.4741 Tj
-17.4609 -199.361 Td
-(1858 1869 1872 1881) 83.0018 Tj
+17.4613 -351.2536 Td
+(0316 1377 1455 1676) 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
+(runcmd 6906) 48.0537 Tj
+17.4613 -360.7469 Td
+(1793) 17.4741 Tj
+-16052.1 TJm
+(6906 6920 6937 6943) 83.0018 Tj
+0 -370.2403 Td
+(readi 4102) 43.6851 Tj
+-15048.7 TJm
+(6945 6959 6966 6977) 83.0018 Tj
+17.4613 -379.7336 Td
 (0247 4102 4266 4512) 83.0018 Tj
--8527.18 TJm
-(0324 1776 5097 5375) 83.0018 Tj
-17.4609 -284.8 Td
+-8527.14 TJm
+(7025) 17.4741 Tj
+17.4613 -389.227 Td
 (4708 4709 5027 5032) 83.0018 Tj
 -6520.6 TJm
-(sched 1853) 43.6851 Tj
-17.4609 -294.294 Td
+(RUNNING 1526) 52.4222 Tj
+17.4613 -398.7204 Td
 (5059 5065) 39.3166 Tj
 -13543.8 TJm
-(1853 1856 1858 1860) 83.0018 Tj
-0 -303.787 Td
+(1526 1831 1857 2111) 83.0018 Tj
+0 -408.2137 Td
 (readsb 3679) 48.0537 Tj
 -14547 TJm
-(1871 1925 2040) 61.1592 Tj
-17.4609 -313.281 Td
+(2591) 17.4741 Tj
+17.4613 -417.7071 Td
 (3679 3711 3738 3959) 83.0018 Tj
 -6520.6 TJm
-(scheduler 1808) 61.1592 Tj
-0 -322.774 Td
+(safestrcpy 5375) 65.5277 Tj
+0 -427.2004 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
+(0323 1781 5097 5375) 83.0018 Tj
+17.4613 -436.6938 Td
+(1160 1195) 39.3166 Tj
 -11537.3 TJm
-(SCROLLLOCK 6014) 65.5277 Tj
-0 -341.761 Td
+(sched 1853) 43.6851 Tj
+0 -446.1872 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
+(1853 1856 1858 1860) 83.0018 Tj
+17.4613 -455.6805 Td
+(1113 1125 1135 1179) 83.0018 Tj
+-8527.14 TJm
+(1862 1873 1925 2040) 83.0018 Tj
+0 -465.1739 Td
+(read_ebp 0392) 56.7907 Tj
+-11537.1 TJm
+(scheduler 1808) 61.1592 Tj
+17.4613 -474.6668 Td
+(0392 5762) 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
+(0299 1263 1808) 61.1592 Tj
+0 -484.1602 Td
+(read_eflags 0435) 69.8962 Tj
+-10032.1 TJm
+(SCROLLLOCK 6064) 65.5277 Tj
+17.4613 -493.6536 Td
+(0435 1459 1468 1855) 83.0018 Tj
+-8527.14 TJm
+(6064 6097) 39.3166 Tj
 Q
 Q
 q
@@ -3317,210 +3327,210 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  cross-references  Page 10) 192.215 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  cross-references  Page 10) 192.2146 Tj
 0 -28.4801 Td
+(SECTSIZE 1111) 56.7907 Tj
+-13543.7 TJm
+(5156 5165 6258 6270) 83.0018 Tj
+17.4613 -37.9735 Td
+(1111 1125 1173 1186) 83.0018 Tj
+-8527.14 TJm
+(6452) 17.4741 Tj
+17.4613 -47.4664 Td
+(1189 1194) 39.3166 Tj
+-11537.3 TJm
+(start 0912 1026 6707) 87.3703 Tj
+0 -56.9598 Td
+(SEG 0654) 34.9481 Tj
+-16052 TJm
+(0911 0912 0974 1025) 83.0018 Tj
+17.4613 -66.4531 Td
+(0654 1685 1686 1690) 83.0018 Tj
+-8527.14 TJm
+(1026 1073 1074 2229) 83.0018 Tj
+17.4613 -75.9461 Td
+(1691) 17.4741 Tj
+-16052.1 TJm
+(2232 2233 2236 6706) 83.0018 Tj
+0 -85.4395 Td
+(SEG16 0659) 43.6851 Tj
+-15048.7 TJm
+(6707) 17.4741 Tj
+17.4613 -94.9328 Td
+(0659 1687) 39.3166 Tj
+-11537.3 TJm
+(stat 3050) 39.3166 Tj
+0 -104.4262 Td
+(segdesc 0627) 52.4222 Tj
+-14045.3 TJm
+(0207 0230 0248 3050) 83.0018 Tj
+17.4613 -113.9196 Td
+(0400 0403 0627 0651) 83.0018 Tj
+-8527.14 TJm
+(3665 4082 4478 4553) 83.0018 Tj
+17.4613 -123.4125 Td
+(0654 0659 1562) 61.1592 Tj
+-11035.5 TJm
+(4654 6753) 39.3166 Tj
+0 -132.9059 Td
+(SEG_ASM 0558) 52.4222 Tj
+-12038.8 TJm
+(stati 4082) 43.6851 Tj
+17.4613 -142.3992 Td
+(0558 0985 0986 1081) 83.0018 Tj
+-8527.14 TJm
+(0248 4082 4482) 61.1592 Tj
+17.4613 -151.8922 Td
+(1082) 17.4741 Tj
+-14045.6 TJm
+(STA_R 0567 0671) 65.5277 Tj
+0 -161.3856 Td
+(SEG_KCODE 1501) 61.1592 Tj
+-13042 TJm
+(0567 0671 0985 1081) 83.0018 Tj
+17.4613 -170.8789 Td
+(1501 1685 2521 2522) 83.0018 Tj
+-8527.14 TJm
+(1685 1690) 39.3166 Tj
+0 -180.3723 Td
 (SEG_KDATA 1502) 61.1592 Tj
--11035.4 TJm
+-11035.5 TJm
 (STA_W 0566 0670) 65.5277 Tj
-17.4609 -37.9735 Td
-(1502 1677 1685) 61.1592 Tj
+17.4613 -189.8653 Td
+(1502 1678 1686) 61.1592 Tj
 -11035.5 TJm
 (0566 0670 0986 1082) 83.0018 Tj
-0 -47.4668 Td
+0 -199.3586 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
+(1686 1691) 39.3166 Tj
+17.4613 -208.852 Td
+(0651 1684 1693 1694) 83.0018 Tj
 -6520.6 TJm
 (STA_X 0563 0667) 65.5277 Tj
-0 -66.4535 Td
+0 -218.3453 Td
 (SEG_NULLASM 0554) 69.8962 Tj
 -12038.7 TJm
 (0563 0667 0985 1081) 83.0018 Tj
-17.4609 -75.9469 Td
+17.4613 -227.8387 Td
 (0554 0984 1080) 61.1592 Tj
 -11035.5 TJm
-(1684 1689) 39.3166 Tj
-0 -85.4403 Td
+(1685 1690) 39.3166 Tj
+0 -237.3321 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
+(sti 0470) 34.9481 Tj
+17.4613 -246.8254 Td
+(1505 1687 1688 1701) 83.0018 Tj
+-8527.14 TJm
+(0470 0472 1473 1817) 83.0018 Tj
+0 -256.3188 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
+-11035.5 TJm
 (strlen 5389) 48.0537 Tj
-0 -123.413 Td
+17.4613 -265.8121 Td
+(1503 1690 1693 1767) 83.0018 Tj
+-8527.14 TJm
+(0324 5044 5078 5389) 83.0018 Tj
+0 -275.3055 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
+(7019 7223) 39.3166 Tj
+17.4613 -284.7989 Td
+(1504 1691 1694 1768) 83.0018 Tj
+-6520.6 TJm
 (strncmp 5351) 52.4222 Tj
-17.4609 -151.893 Td
+0 -294.2922 Td
+(SETGATE 0771) 52.4222 Tj
+-14045.3 TJm
+(0325 4205 5351) 61.1592 Tj
+17.4613 -303.7856 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
+-9028.94 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
+0 -313.2789 Td
+(setupsegs 1672) 61.1592 Tj
+-13042 TJm
+(0326 4272 5361) 61.1592 Tj
+17.4613 -322.7723 Td
+(0300 1259 1665 1672) 83.0018 Tj
 -6520.6 TJm
 (STS_IG32 0685) 56.7907 Tj
-0 -189.867 Td
-(SHIFT 6008) 43.6851 Tj
--15048.7 TJm
+17.4613 -332.2653 Td
+(1830 1837 5106) 61.1592 Tj
+-11035.5 TJm
 (0685 0777) 39.3166 Tj
-17.4609 -199.36 Td
-(6008 6036 6037 6185) 83.0018 Tj
--6520.6 TJm
+0 -341.7586 Td
+(SHIFT 6058) 43.6851 Tj
+-13042.1 TJm
 (STS_T32A 0682) 56.7907 Tj
-0 -208.854 Td
+17.4613 -351.252 Td
+(6058 6086 6087 6235) 83.0018 Tj
+-8527.14 TJm
+(0682 1687) 39.3166 Tj
+0 -360.7454 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
+-11537.1 TJm
 (STS_TG32 0686) 56.7907 Tj
-0 -227.84 Td
-(sleep 1903) 43.6851 Tj
--15048.7 TJm
+17.4613 -370.2387 Td
+(4314 4363) 39.3166 Tj
+-13543.8 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
+0 -379.7321 Td
+(sleep 1903) 43.6851 Tj
+-13042.1 TJm
+(STUB 6803 6810 6811 6812 6813 6814) 148.5295 Tj
+17.4613 -389.2254 Td
+(0301 1903 1906 1909) 83.0018 Tj
+-8527.14 TJm
+(6810 6811 6812 6813) 83.0018 Tj
+17.4613 -398.7184 Td
+(2090 2109 2877 3480) 83.0018 Tj
+-8527.14 TJm
+(6814 6815 6816 6817) 83.0018 Tj
+17.4613 -408.2114 Td
+(3577 3862 5263 5283) 83.0018 Tj
+-8527.14 TJm
+(6818 6819 6820 6821) 83.0018 Tj
+17.4613 -417.7043 Td
+(6516 6829) 39.3166 Tj
+-13543.8 TJm
+(6822 6823 6824 6825) 83.0018 Tj
+0 -427.1977 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
+(6826 6827 6828 6829) 83.0018 Tj
+17.4613 -436.6911 Td
+(0206 0301 0311 0313) 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
+17.4613 -446.184 Td
+(0314 0315 0343 1301) 83.0018 Tj
+-8527.14 TJm
 (5525 5527 5529 5531) 83.0018 Tj
-17.4609 -313.281 Td
-(1489 1606 1608 1903) 83.0018 Tj
--8527.18 TJm
+17.4613 -455.677 Td
+(1358 1363 1375 1402) 83.0018 Tj
+-8527.14 TJm
 (5532 5543 5592) 61.1592 Tj
-17.4609 -322.774 Td
-(2210 2212 2507 2512) 83.0018 Tj
+17.4613 -465.17 Td
+(1440 1606 1608 1903) 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
+17.4613 -474.663 Td
+(2210 2212 2507 2512) 83.0018 Tj
+-8527.14 TJm
 (3160 3679 3708 3733) 83.0018 Tj
-17.4609 -341.761 Td
-(3668 3784 4404 4408) 83.0018 Tj
--8527.18 TJm
+17.4613 -484.1559 Td
+(3309 3324 3526 3530) 83.0018 Tj
+-8527.14 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
+17.4613 -493.6489 Td
+(3668 3784 4404 4408) 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
+(SVR 5664) 34.9481 Tj
 Q
 Q
 Q
@@ -3548,8 +3558,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -3564,210 +3573,210 @@ 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.9679 1 0 564.72 738.865] 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
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  cross-references  Page 11) 192.2146 Tj
+17.4613 -28.4801 Td
+(5664 5707) 39.3166 Tj
+-11537.3 TJm
+(ticks 2513) 43.6851 Tj
 0 -37.9735 Td
+(swtch 2156) 43.6851 Tj
+-15048.7 TJm
+(0341 2513 2550 2551) 83.0018 Tj
+17.4613 -47.4664 Td
+(0308 1832 1864 2155) 83.0018 Tj
+-8527.14 TJm
+(2871 2872 2877) 61.1592 Tj
+17.4613 -56.9598 Td
+(2156) 17.4741 Tj
+-14045.6 TJm
+(tickslock 2512) 61.1592 Tj
+0 -66.4531 Td
+(syscall 2774) 52.4222 Tj
+-14045.3 TJm
+(0343 2512 2524 2549) 83.0018 Tj
+17.4613 -75.9465 Td
+(0334 2540 2656 2774) 83.0018 Tj
+-8527.14 TJm
+(2552 2870 2874 2877) 83.0018 Tj
+0 -85.4399 Td
+(SYS_chdir 2616) 61.1592 Tj
+-13042 TJm
+(2879) 17.4741 Tj
+17.4613 -94.9332 Td
+(2616 2751) 39.3166 Tj
+-11537.3 TJm
+(TICR 5683) 39.3166 Tj
+0 -104.4266 Td
+(SYS_close 2607) 61.1592 Tj
+-13042 TJm
+(5683 5715) 39.3166 Tj
+17.4613 -113.9199 Td
+(2607 2752) 39.3166 Tj
+-11537.3 TJm
+(TIMER 5675) 43.6851 Tj
+0 -123.4133 Td
+(SYS_dup 2617) 52.4222 Tj
+-14045.3 TJm
+(5675 5714) 39.3166 Tj
+17.4613 -132.9067 Td
+(2617 2753) 39.3166 Tj
+-11537.3 TJm
+(TIMER_16BIT 6621) 69.8962 Tj
+0 -142.4 Td
+(SYS_exec 2609) 56.7907 Tj
+-13543.7 TJm
+(6621 6627) 39.3166 Tj
+17.4613 -151.8934 Td
+(2609 2754 6711) 61.1592 Tj
+-9028.94 TJm
+(TIMER_DIV 6616) 61.1592 Tj
+0 -161.3867 Td
+(SYS_exit 2602) 56.7907 Tj
+-13543.7 TJm
+(6616 6628 6629) 61.1592 Tj
+17.4613 -170.8801 Td
+(2602 2755 6716) 61.1592 Tj
+-9028.94 TJm
+(TIMER_FREQ 6615) 65.5277 Tj
+0 -180.3735 Td
 (SYS_fork 2601) 56.7907 Tj
 -13543.7 TJm
-(2880) 17.4741 Tj
-17.4609 -47.4668 Td
+(6615 6616) 39.3166 Tj
+17.4613 -189.8664 Td
 (2601 2756) 39.3166 Tj
 -11537.3 TJm
-(TICR 5680) 39.3166 Tj
-0 -56.9602 Td
+(timer_init 6624) 65.5277 Tj
+0 -199.3598 Td
 (SYS_fstat 2613) 61.1592 Tj
 -13042 TJm
-(5680 5716) 39.3166 Tj
-17.4609 -66.4535 Td
+(0337 1234 6624) 61.1592 Tj
+17.4613 -208.8532 Td
 (2613 2757) 39.3166 Tj
 -11537.3 TJm
-(TIMER 5672) 43.6851 Tj
-0 -75.9469 Td
+(TIMER_MODE 6618) 65.5277 Tj
+0 -218.3465 Td
 (SYS_getpid 2618) 65.5277 Tj
 -12540.3 TJm
-(5672 5718) 39.3166 Tj
-17.4609 -85.4403 Td
+(6618 6627) 39.3166 Tj
+17.4613 -227.8399 Td
 (2618 2758) 39.3166 Tj
 -11537.3 TJm
-(TIMER_16BIT 6571) 69.8962 Tj
-0 -94.9336 Td
+(TIMER_RATEGEN 6620) 78.6333 Tj
+0 -237.3332 Td
 (SYS_kill 2608) 56.7907 Tj
 -13543.7 TJm
-(6571 6577) 39.3166 Tj
-17.4609 -104.427 Td
+(6620 6627) 39.3166 Tj
+17.4613 -246.8266 Td
 (2608 2759) 39.3166 Tj
 -11537.3 TJm
-(TIMER_DIV 6566) 61.1592 Tj
-0 -113.92 Td
+(TIMER_SEL0 6619) 65.5277 Tj
+0 -256.32 Td
 (SYS_link 2614) 56.7907 Tj
 -13543.7 TJm
-(6566 6578 6579) 61.1592 Tj
-17.4609 -123.413 Td
+(6619 6627) 39.3166 Tj
+17.4613 -265.8133 Td
 (2614 2760) 39.3166 Tj
 -11537.3 TJm
-(TIMER_FREQ 6565) 65.5277 Tj
-0 -132.907 Td
+(TPR 5662) 34.9481 Tj
+0 -275.3067 Td
 (SYS_mkdir 2615) 61.1592 Tj
 -13042 TJm
-(6565 6566) 39.3166 Tj
-17.4609 -142.4 Td
+(5662 5743) 39.3166 Tj
+17.4613 -284.8 Td
 (2615 2761) 39.3166 Tj
 -11537.3 TJm
-(timer_init 6574) 65.5277 Tj
-0 -151.893 Td
+(trap 2534) 39.3166 Tj
+0 -294.2934 Td
 (SYS_mknod 2611) 61.1592 Tj
 -13042 TJm
-(0338 1248 6574) 61.1592 Tj
-17.4609 -161.387 Td
+(2402 2404 2469 2534) 83.0018 Tj
+17.4613 -303.7868 Td
 (2611 2762) 39.3166 Tj
--11537.3 TJm
-(TIMER_MODE 6568) 65.5277 Tj
-0 -170.88 Td
+-13543.8 TJm
+(2573 2575 2578) 61.1592 Tj
+0 -313.2801 Td
 (SYS_open 2610) 56.7907 Tj
--13543.7 TJm
-(6568 6577) 39.3166 Tj
-17.4609 -180.373 Td
+-11537.1 TJm
+(trapframe 0477) 61.1592 Tj
+17.4613 -322.7735 Td
 (2610 2763) 39.3166 Tj
--11537.3 TJm
-(TIMER_RATEGEN 6570) 78.6333 Tj
-0 -189.867 Td
+-13543.8 TJm
+(0477 1541 1615 1723) 83.0018 Tj
+0 -332.2664 Td
 (SYS_pipe 2604) 56.7907 Tj
 -13543.7 TJm
-(6570 6577) 39.3166 Tj
-17.4609 -199.36 Td
+(2534) 17.4741 Tj
+17.4613 -341.7598 Td
 (2604 2764) 39.3166 Tj
 -11537.3 TJm
-(TIMER_SEL0 6569) 65.5277 Tj
-0 -208.854 Td
+(trapret 2474) 52.4222 Tj
+0 -351.2532 Td
 (SYS_read 2606) 56.7907 Tj
 -13543.7 TJm
-(6569 6577) 39.3166 Tj
-17.4609 -218.347 Td
+(2473 2474 2486) 61.1592 Tj
+17.4613 -360.7465 Td
 (2606 2765) 39.3166 Tj
 -11537.3 TJm
-(TPR 5659) 34.9481 Tj
-0 -227.84 Td
+(tvinit 2516) 48.0537 Tj
+0 -370.2399 Td
 (SYS_sbrk 2619) 56.7907 Tj
 -13543.7 TJm
-(5659 5746) 39.3166 Tj
-17.4609 -237.334 Td
+(0342 1228 2516) 61.1592 Tj
+17.4613 -379.7332 Td
 (2619 2766) 39.3166 Tj
 -11537.3 TJm
-(trap 2534) 39.3166 Tj
-0 -246.827 Td
+(T_DEV 3184) 43.6851 Tj
+0 -389.2266 Td
 (SYS_sleep 2620) 61.1592 Tj
 -13042 TJm
-(2402 2404 2469 2534) 83.0018 Tj
-17.4609 -256.32 Td
+(3184 4107 4157 4911) 83.0018 Tj
+17.4613 -398.72 Td
 (2620 2767) 39.3166 Tj
--13543.8 TJm
-(2576 2578 2581) 61.1592 Tj
-0 -265.813 Td
+-11537.3 TJm
+(T_DIR 3182) 43.6851 Tj
+0 -408.2133 Td
 (SYS_unlink 2612) 65.5277 Tj
--10533.8 TJm
-(trapframe 0501) 61.1592 Tj
-17.4609 -275.307 Td
+-12540.3 TJm
+(3182 4218 4365 4673) 83.0018 Tj
+17.4613 -417.7067 Td
 (2612 2768) 39.3166 Tj
 -13543.8 TJm
-(0501 1541 1616 1718) 83.0018 Tj
-0 -284.8 Td
+(4778 4838 4868 4923) 83.0018 Tj
+0 -427.2 Td
 (SYS_wait 2603) 56.7907 Tj
 -13543.7 TJm
-(2534) 17.4741 Tj
-17.4609 -294.293 Td
+(4938) 17.4741 Tj
+17.4613 -436.6934 Td
 (2603 2769) 39.3166 Tj
 -11537.3 TJm
-(trapret 2474) 52.4222 Tj
-0 -303.787 Td
+(T_FILE 3183) 48.0537 Tj
+0 -446.1868 Td
 (SYS_write 2605) 61.1592 Tj
 -13042 TJm
-(2473 2474 2486) 61.1592 Tj
-17.4609 -313.28 Td
+(3183 4862) 39.3166 Tj
+17.4613 -455.6801 Td
 (2605 2770) 39.3166 Tj
 -11537.3 TJm
 (T_SYSCALL 2376) 61.1592 Tj
-0 -322.773 Td
+0 -465.1735 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
+(2376 2522 2536 6712) 83.0018 Tj
+17.4613 -474.6665 Td
+(0701 1561) 39.3166 Tj
 -13543.8 TJm
-(userinit 1752) 56.7907 Tj
-17.4609 -370.24 Td
-(5682 5715) 39.3166 Tj
+(6717 6807) 39.3166 Tj
+0 -484.1598 Td
+(TDCR 5685) 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
+(userinit 1757) 56.7907 Tj
+17.4613 -493.6532 Td
+(5685 5713) 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
+(0302 1235 1757) 61.1592 Tj
 Q
 Q
 q
@@ -3781,24 +3790,58 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  cross-references  Page 12) 192.215 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  cross-references  Page 12) 192.2146 Tj
 0 -28.4801 Td
+(VER 5661) 34.9481 Tj
+-16052 TJm
+(6491) 17.4741 Tj
+17.4613 -37.9735 Td
+(5661 5723) 39.3166 Tj
+-11537.3 TJm
 (wakeup1 1953) 52.4222 Tj
--14045.3 TJm
-(4785 4786) 39.3166 Tj
-17.4609 -37.9735 Td
+0 -47.4664 Td
+(wait 2053) 39.3166 Tj
+-15550.3 TJm
 (1953 1968 2026 2033) 83.0018 Tj
+17.4613 -56.9598 Td
+(0303 2053 2829 6783) 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
+17.4613 -66.4531 Td
+(6812 6944 6970 6971) 83.0018 Tj
+-8527.14 TJm
 (0249 4152 4274 4532) 83.0018 Tj
+17.4613 -75.9465 Td
+(7026) 17.4741 Tj
+-16052.1 TJm
+(4785 4786) 39.3166 Tj
+0 -85.4399 Td
+(waitdisk 1151) 56.7907 Tj
+-11537.1 TJm
+(xchg 0451) 39.3166 Tj
+17.4613 -94.9332 Td
+(1151 1163 1172) 61.1592 Tj
+-11035.5 TJm
+(0451 1260 1384 1415) 83.0018 Tj
+0 -104.4266 Td
+(wakeup 1965) 48.0537 Tj
+-12540.5 TJm
+(yield 1869) 43.6851 Tj
+17.4613 -113.9199 Td
+(0304 1965 2551 3419) 83.0018 Tj
+-8527.14 TJm
+(0305 1869 2592) 61.1592 Tj
+17.4613 -123.4133 Td
+(3639 3891 3916 5220) 83.0018 Tj
+-6520.6 TJm
+(_namei 4354) 48.0537 Tj
+17.4613 -132.9067 Td
+(5223 5262 5267 5290) 83.0018 Tj
+-8527.14 TJm
+(4354 4392 4398) 61.1592 Tj
 Q
 Q
 Q
@@ -3826,8 +3869,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -3842,16 +3884,16 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/types.h  Page 1) 166.004 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/types.h  Page 1) 166.0035 Tj
 0 -28.4801 Td
 (0100 typedef unsigned int   uint;) 144.161 Tj
 0 -37.9735 Td
 (0101 typedef unsigned short ushort;) 152.898 Tj
 0 -47.4668 Td
-(0102 typedef unsigned char  uchar;) 148.529 Tj
+(0102 typedef unsigned char  uchar;) 148.5295 Tj
 0 -56.9602 Td
 (0103 ) 21.8426 Tj
 0 -66.4535 Td
@@ -3864,89 +3906,89 @@ q
 (0107 ) 21.8426 Tj
 0 -104.427 Td
 (0108 ) 21.8426 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (0109 ) 21.8426 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (0110 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (0111 ) 21.8426 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (0112 ) 21.8426 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (0113 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (0114 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (0115 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (0116 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (0117 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (0118 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (0119 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (0120 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (0121 ) 21.8426 Tj
 0 -237.334 Td
 (0122 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (0123 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (0124 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (0125 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (0126 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (0127 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (0128 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (0129 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (0130 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (0131 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (0132 ) 21.8426 Tj
 0 -341.761 Td
 (0133 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (0134 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (0135 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (0136 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (0137 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (0138 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (0139 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (0140 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (0141 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (0142 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (0143 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (0144 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (0145 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (0146 ) 21.8426 Tj
 0 -474.668 Td
 (0147 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (0148 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (0149 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 01) 34.9481 Tj
 Q
 Q
@@ -3961,115 +4003,115 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/param.h  Page 1) 166.004 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/param.h  Page 1) 166.0035 Tj
 0 -28.4801 Td
-(0150 #define NPROC        64  // maximum number of processes) 262.111 Tj
+(0150 #define NPROC        64  // maximum number of processes) 262.1109 Tj
 0 -37.9735 Td
 (0151 #define PAGE       4096  // granularity of user-space memo\
-ry allocation) 332.007 Tj
+ry allocation) 332.0071 Tj
 0 -47.4668 Td
 (0152 #define KSTACKSIZE PAGE  // size of per-process kernel sta\
-ck) 283.953 Tj
+ck) 283.9534 Tj
 0 -56.9602 Td
-(0153 #define NCPU          8  // maximum number of CPUs) 240.268 Tj
+(0153 #define NCPU          8  // maximum number of CPUs) 240.2683 Tj
 0 -66.4535 Td
-(0154 #define NOFILE       16  // open files per process) 240.268 Tj
+(0154 #define NOFILE       16  // open files per process) 240.2683 Tj
 0 -75.9469 Td
-(0155 #define NFILE       100  // open files per system) 235.9 Tj
+(0155 #define NFILE       100  // open files per system) 235.8998 Tj
 0 -85.4403 Td
-(0156 #define NBUF         10  // size of disk block cache) 249.005 Tj
+(0156 #define NBUF         10  // size of disk block cache) 249.0053 Tj
 0 -94.9336 Td
 (0157 #define NINODE       50  // maximum number of active i-nod\
-es) 283.953 Tj
+es) 283.9534 Tj
 0 -104.427 Td
-(0158 #define NDEV         10  // maximum major device number) 262.111 Tj
-0 -113.92 Td
+(0158 #define NDEV         10  // maximum major device number) 262.1109 Tj
+0 -113.9203 Td
 (0159 #define ROOTDEV       1  // device number of file system r\
-oot disk) 310.165 Tj
-0 -123.414 Td
+oot disk) 310.1645 Tj
+0 -123.4137 Td
 (0160 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (0161 ) 21.8426 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (0162 ) 21.8426 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (0163 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (0164 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (0165 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (0166 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (0167 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (0168 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (0169 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (0170 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (0171 ) 21.8426 Tj
 0 -237.334 Td
 (0172 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (0173 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (0174 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (0175 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (0176 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (0177 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (0178 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (0179 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (0180 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (0181 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (0182 ) 21.8426 Tj
 0 -341.761 Td
 (0183 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (0184 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (0185 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (0186 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (0187 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (0188 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (0189 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (0190 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (0191 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (0192 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (0193 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (0194 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (0195 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (0196 ) 21.8426 Tj
 0 -474.668 Td
 (0197 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (0198 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (0199 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 01) 34.9481 Tj
 Q
 Q
@@ -4098,8 +4140,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -4114,10 +4155,10 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/defs.h  Page 1) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/defs.h  Page 1) 161.635 Tj
 0 -28.4801 Td
 (0200 struct buf;) 69.8962 Tj
 0 -37.9735 Td
@@ -4136,91 +4177,91 @@ q
 (0207 struct stat;) 74.2647 Tj
 0 -104.427 Td
 (0208 ) 21.8426 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (0209 // bio.c) 56.7907 Tj
-0 -123.414 Td
+0 -123.4137 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
+0 -132.9071 Td
+(0211 struct buf*     bread\(uint, uint\);) 170.3721 Tj
+0 -142.4004 Td
+(0212 void            brelse\(struct buf*\);) 179.1091 Tj
+0 -151.8938 Td
+(0213 void            bwrite\(struct buf*\);) 179.1091 Tj
+0 -161.3871 Td
 (0214 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 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
+0 -180.3739 Td
+(0216 void            console_init\(void\);) 174.7406 Tj
+0 -189.8672 Td
+(0217 void            cprintf\(char*, ...\);) 179.1091 Tj
+0 -199.3606 Td
+(0218 void            console_intr\(int\(*\)\(void\)\);) 209.6887 Tj
+0 -208.8539 Td
 (0219 void            panic\(char*\) __attribute__\(\(noreturn\)\
-\);) 262.111 Tj
-0 -218.347 Td
+\);) 262.1109 Tj
+0 -218.3473 Td
 (0220 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (0221 // exec.c) 61.1592 Tj
 0 -237.334 Td
-(0222 int             exec\(char*, char**\);) 179.109 Tj
-0 -246.827 Td
+(0222 int             exec\(char*, char**\);) 179.1091 Tj
+0 -246.8274 Td
 (0223 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (0224 // file.c) 61.1592 Tj
-0 -265.814 Td
+0 -265.8141 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
+0 -275.3075 Td
+(0226 void            fileclose\(struct file*\);) 196.5831 Tj
+0 -284.8008 Td
+(0227 struct file*    filedup\(struct file*\);) 187.8461 Tj
+0 -294.2942 Td
+(0228 void            fileinit\(void\);) 157.2665 Tj
+0 -303.7875 Td
+(0229 int             fileread\(struct file*, char*, int n\);) 253.3738 Tj
+0 -313.2809 Td
+(0230 int             filestat\(struct file*, struct stat*\);) 253.3738 Tj
+0 -322.7743 Td
+(0231 int             filewrite\(struct file*, char*, int n\);) 257.7424 Tj
+0 -332.2676 Td
 (0232 ) 21.8426 Tj
 0 -341.761 Td
 (0233 // fs.c) 52.4222 Tj
-0 -351.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
+0 -351.2543 Td
+(0234 int             dirlink\(struct inode*, char*, uint\);) 249.0053 Tj
+0 -360.7477 Td
+(0235 struct inode*   dirlookup\(struct inode*, char*, uint*\);) 262.1109 Tj
+0 -370.2411 Td
+(0236 struct inode*   ialloc\(uint, short\);) 179.1091 Tj
+0 -379.7344 Td
+(0237 struct inode*   idup\(struct inode*\);) 179.1091 Tj
+0 -389.2278 Td
 (0238 void            iinit\(void\);) 144.161 Tj
-0 -398.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 -398.7211 Td
+(0239 void            ilock\(struct inode*\);) 183.4776 Tj
+0 -408.2145 Td
+(0240 void            iput\(struct inode*\);) 179.1091 Tj
+0 -417.7079 Td
+(0241 void            iunlock\(struct inode*\);) 192.2146 Tj
+0 -427.2012 Td
+(0242 void            iunlockput\(struct inode*\);) 205.3202 Tj
+0 -436.6946 Td
+(0243 void            iupdate\(struct inode*\);) 192.2146 Tj
+0 -446.1879 Td
+(0244 int             namecmp\(const char*, const char*\);) 240.2683 Tj
+0 -455.6813 Td
+(0245 struct inode*   namei\(char*\);) 148.5295 Tj
+0 -465.1747 Td
+(0246 struct inode*   nameiparent\(char*, char*\);) 205.3202 Tj
 0 -474.668 Td
-(0247 int             readi\(struct inode*, char*, uint, uint\);) 266.479 Tj
-0 -484.161 Td
-(0248 void            stati\(struct inode*, struct stat*\);) 244.637 Tj
-0 -493.655 Td
+(0247 int             readi\(struct inode*, char*, uint, uint\);) 266.4794 Tj
+0 -484.1614 Td
+(0248 void            stati\(struct inode*, struct stat*\);) 244.6368 Tj
+0 -493.6547 Td
 (0249 int             writei\(struct inode*, char*, uint, uint\)\
-;) 270.848 Tj
-0 -522.135 Td
+;) 270.8479 Tj
+0 -522.1348 Td
 (Sheet 02) 34.9481 Tj
 Q
 Q
@@ -4235,111 +4276,112 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/defs.h  Page 2) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  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
+(0251 void            ide_init\(void\);) 157.2665 Tj
 0 -47.4668 Td
-(0252 void            ide_intr\(void\);) 157.267 Tj
+(0252 void            ide_intr\(void\);) 157.2665 Tj
 0 -56.9602 Td
-(0253 void            ide_rw\(struct buf *\);) 183.478 Tj
+(0253 void            ide_rw\(struct buf *\);) 183.4776 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
+(0256 void            ioapic_enable\(int irq, int cpu\);) 231.5313 Tj
 0 -94.9336 Td
-(0257 extern uchar    ioapic_id;) 135.424 Tj
+(0257 extern uchar    ioapic_id;) 135.4239 Tj
 0 -104.427 Td
-(0258 void            ioapic_init\(void\);) 170.372 Tj
-0 -113.92 Td
+(0258 void            ioapic_init\(void\);) 170.3721 Tj
+0 -113.9203 Td
 (0259 ) 21.8426 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (0260 // kalloc.c) 69.8962 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (0261 char*           kalloc\(int\);) 144.161 Tj
-0 -142.4 Td
-(0262 void            kfree\(char*, int\);) 170.372 Tj
-0 -151.894 Td
+0 -142.4004 Td
+(0262 void            kfree\(char*, int\);) 170.3721 Tj
+0 -151.8938 Td
 (0263 void            kinit\(void\);) 144.161 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (0264 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (0265 // kbd.c) 56.7907 Tj
-0 -180.374 Td
-(0266 void            kbd_intr\(void\);) 157.267 Tj
-0 -189.867 Td
+0 -180.3739 Td
+(0266 void            kbd_intr\(void\);) 157.2665 Tj
+0 -189.8672 Td
 (0267 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 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 -208.8539 Td
+(0269 int             cpu\(void\);) 135.4239 Tj
+0 -218.3473 Td
+(0270 extern volatile uint*    lapic;) 157.2665 Tj
+0 -227.8407 Td
+(0271 void            lapic_eoi\(void\);) 161.635 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
+(0272 void            lapic_init\(int\);) 161.635 Tj
+0 -246.8274 Td
+(0273 void            lapic_startap\(uchar, uint\);) 209.6887 Tj
+0 -256.3207 Td
+(0274 ) 21.8426 Tj
+0 -265.8141 Td
+(0275 // mp.c) 52.4222 Tj
+0 -275.3075 Td
+(0276 extern int      ismp;) 113.5814 Tj
+0 -284.8008 Td
+(0277 int             mp_bcpu\(void\);) 152.898 Tj
+0 -294.2942 Td
+(0278 void            mp_init\(void\);) 152.898 Tj
+0 -303.7875 Td
+(0279 void            mp_startthem\(void\);) 174.7406 Tj
+0 -313.2809 Td
+(0280 ) 21.8426 Tj
+0 -322.7743 Td
+(0281 // picirq.c) 69.8962 Tj
+0 -332.2676 Td
+(0282 void            pic_enable\(int\);) 161.635 Tj
 0 -341.761 Td
-(0283 void            mp_startthem\(void\);) 174.741 Tj
-0 -351.254 Td
+(0283 void            pic_init\(void\);) 157.2665 Tj
+0 -351.2543 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 -360.7477 Td
+(0285 // pipe.c) 61.1592 Tj
+0 -370.2411 Td
+(0286 int             pipealloc\(struct file**, struct file**\);) 266.4794 Tj
+0 -379.7344 Td
+(0287 void            pipeclose\(struct pipe*, int\);) 218.4257 Tj
+0 -389.2278 Td
+(0288 int             piperead\(struct pipe*, char*, int\);) 244.6368 Tj
+0 -398.7211 Td
+(0289 int             pipewrite\(struct pipe*, char*, int\);) 249.0053 Tj
+0 -408.2145 Td
+(0290 ) 21.8426 Tj
+0 -417.7079 Td
+(0291 // proc.c) 61.1592 Tj
+0 -427.2012 Td
+(0292 struct proc*    copyproc\(struct proc*\);) 192.2146 Tj
+0 -436.6946 Td
+(0293 struct proc*    curproc\(void\);) 152.898 Tj
+0 -446.1879 Td
+(0294 void            exit\(void\);) 139.7925 Tj
+0 -455.6813 Td
+(0295 int             growproc\(int\);) 152.898 Tj
+0 -465.1747 Td
+(0296 int             kill\(int\);) 135.4239 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
+(0297 void            pinit\(void\);) 144.161 Tj
+0 -484.1614 Td
+(0298 void            procdump\(void\);) 157.2665 Tj
+0 -493.6547 Td
+(0299 void            scheduler\(void\) __attribute__\(\(noretur\
+n\)\);) 275.2164 Tj
+0 -522.1348 Td
 (Sheet 02) 34.9481 Tj
 Q
 Q
@@ -4368,8 +4410,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -4384,112 +4425,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/defs.h  Page 3) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/defs.h  Page 3) 161.635 Tj
 0 -28.4801 Td
-(0300 void            pinit\(void\);) 144.161 Tj
+(0300 void            setupsegs\(struct proc*\);) 196.5831 Tj
 0 -37.9735 Td
-(0301 void            procdump\(void\);) 157.267 Tj
+(0301 void            sleep\(void*, struct spinlock*\);) 227.1628 Tj
 0 -47.4668 Td
-(0302 void            scheduler\(void\) __attribute__\(\(noretur\
-n\)\);) 275.216 Tj
+(0302 void            userinit\(void\);) 157.2665 Tj
 0 -56.9602 Td
-(0303 void            setupsegs\(struct proc*\);) 196.583 Tj
+(0303 int             wait\(void\);) 139.7925 Tj
 0 -66.4535 Td
-(0304 void            sleep\(void*, struct spinlock*\);) 227.163 Tj
+(0304 void            wakeup\(void*\);) 152.898 Tj
 0 -75.9469 Td
-(0305 void            userinit\(void\);) 157.267 Tj
+(0305 void            yield\(void\);) 144.161 Tj
 0 -85.4403 Td
-(0306 int             wait\(void\);) 139.792 Tj
+(0306 ) 21.8426 Tj
 0 -94.9336 Td
-(0307 void            wakeup\(void*\);) 152.898 Tj
+(0307 // swtch.S) 65.5277 Tj
 0 -104.427 Td
-(0308 void            yield\(void\);) 144.161 Tj
-0 -113.92 Td
+(0308 void            swtch\(struct context*, struct context*\);) 266.4794 Tj
+0 -113.9203 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 -123.4137 Td
+(0310 // spinlock.c) 78.6333 Tj
+0 -132.9071 Td
+(0311 void            acquire\(struct spinlock*\);) 205.3202 Tj
+0 -142.4004 Td
+(0312 void            getcallerpcs\(void*, uint*\);) 209.6887 Tj
+0 -151.8938 Td
+(0313 int             holding\(struct spinlock*\);) 205.3202 Tj
+0 -161.3871 Td
+(0314 void            initlock\(struct spinlock*, char*\);) 240.2683 Tj
+0 -170.8805 Td
+(0315 void            release\(struct spinlock*\);) 205.3202 Tj
+0 -180.3739 Td
+(0316 void            pushcli\(\);) 135.4239 Tj
+0 -189.8672 Td
+(0317 void            popcli\(\);) 131.0554 Tj
+0 -199.3606 Td
+(0318 ) 21.8426 Tj
+0 -208.8539 Td
+(0319 // string.c) 69.8962 Tj
+0 -218.3473 Td
+(0320 int             memcmp\(const void*, const void*, uint\);) 262.1109 Tj
+0 -227.8407 Td
+(0321 void*           memmove\(void*, const void*, uint\);) 240.2683 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
+(0322 void*           memset\(void*, int, uint\);) 200.9517 Tj
+0 -246.8274 Td
+(0323 char*           safestrcpy\(char*, const char*, int\);) 249.0053 Tj
+0 -256.3207 Td
+(0324 int             strlen\(const char*\);) 179.1091 Tj
+0 -265.8141 Td
+(0325 int             strncmp\(const char*, const char*, uint\);) 266.4794 Tj
+0 -275.3075 Td
+(0326 char*           strncpy\(char*, const char*, int\);) 235.8998 Tj
+0 -284.8008 Td
+(0327 ) 21.8426 Tj
+0 -294.2942 Td
+(0328 // syscall.c) 74.2647 Tj
+0 -303.7875 Td
+(0329 int             argint\(int, int*\);) 170.3721 Tj
+0 -313.2809 Td
+(0330 int             argptr\(int, char**, int\);) 200.9517 Tj
+0 -322.7743 Td
+(0331 int             argstr\(int, char**\);) 179.1091 Tj
+0 -332.2676 Td
+(0332 int             fetchint\(struct proc*, uint, int*\);) 244.6368 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
+(0333 int             fetchstr\(struct proc*, uint, char**\);) 253.3738 Tj
+0 -351.2543 Td
+(0334 void            syscall\(void\);) 152.898 Tj
+0 -360.7477 Td
+(0335 ) 21.8426 Tj
+0 -370.2411 Td
+(0336 // timer.c) 65.5277 Tj
+0 -379.7344 Td
+(0337 void            timer_init\(void\);) 166.0035 Tj
+0 -389.2278 Td
+(0338 ) 21.8426 Tj
+0 -398.7211 Td
+(0339 // trap.c) 61.1592 Tj
+0 -408.2145 Td
+(0340 void            idtinit\(void\);) 152.898 Tj
+0 -417.7079 Td
+(0341 extern int      ticks;) 117.9499 Tj
+0 -427.2012 Td
+(0342 void            tvinit\(void\);) 148.5295 Tj
+0 -436.6946 Td
+(0343 extern struct spinlock tickslock;) 166.0035 Tj
+0 -446.1879 Td
+(0344 ) 21.8426 Tj
+0 -455.6813 Td
+(0345 // number of elements in fixed-size array) 200.9517 Tj
+0 -465.1747 Td
+(0346 #define NELEM\(x\) \(sizeof\(x\)/sizeof\(\(x\)[0]\)\)) 209.6887 Tj
 0 -474.668 Td
-(0347 #define NELEM\(x\) \(sizeof\(x\)/sizeof\(\(x\)[0]\)\)) 209.689 Tj
-0 -484.161 Td
+(0347 ) 21.8426 Tj
+0 -484.1614 Td
 (0348 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (0349 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 03) 34.9481 Tj
 Q
 Q
@@ -4504,116 +4544,116 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/x86.h  Page 1) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/x86.h  Page 1) 157.2665 Tj
 0 -28.4801 Td
-(0350 // Special assembly routines to access x86-specific) 244.637 Tj
+(0350 // Routines to let C code use special x86 instructions.) 262.1109 Tj
 0 -37.9735 Td
-(0351 // hardware instructions.) 131.055 Tj
+(0351 ) 21.8426 Tj
 0 -47.4668 Td
-(0352 ) 21.8426 Tj
+(0352 static inline uchar) 104.8443 Tj
 0 -56.9602 Td
-(0353 static inline uchar) 104.844 Tj
+(0353 inb\(ushort port\)) 91.7388 Tj
 0 -66.4535 Td
-(0354 inb\(ushort port\)) 91.7388 Tj
+(0354 {) 26.2111 Tj
 0 -75.9469 Td
-(0355 {) 26.2111 Tj
+(0355   uchar data;) 78.6333 Tj
 0 -85.4403 Td
-(0356   uchar data;) 78.6333 Tj
+(0356 ) 21.8426 Tj
 0 -94.9336 Td
-(0357 ) 21.8426 Tj
+(0357   asm volatile\("in %1,%0" : "=a" \(data\) : "d" \(port\)\)\
+;) 257.7424 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
+(0358   return data;) 83.0018 Tj
+0 -113.9203 Td
+(0359 }) 26.2111 Tj
+0 -123.4137 Td
+(0360 ) 21.8426 Tj
+0 -132.9071 Td
+(0361 static inline void) 100.4758 Tj
+0 -142.4004 Td
+(0362 insl\(int port, void *addr, int cnt\)) 174.7406 Tj
+0 -151.8938 Td
+(0363 {) 26.2111 Tj
+0 -161.3871 Td
+(0364   asm volatile\("cld\\n\\trepne\\n\\tinsl"     :) 209.6887 Tj
+0 -170.8805 Td
+(0365                    "=D" \(addr\), "=c" \(cnt\)    :) 227.1628 Tj
+0 -180.3739 Td
+(0366                    "d" \(port\), "0" \(addr\), "1" \(cnt\)\
+  :) 262.1109 Tj
+0 -189.8672 Td
+(0367                    "memory", "cc"\);) 174.7406 Tj
+0 -199.3606 Td
+(0368 }) 26.2111 Tj
+0 -208.8539 Td
+(0369 ) 21.8426 Tj
+0 -218.3473 Td
+(0370 static inline void) 100.4758 Tj
+0 -227.8407 Td
+(0371 outb\(ushort port, uchar data\)) 148.5295 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
+(0372 {) 26.2111 Tj
+0 -246.8274 Td
+(0373   asm volatile\("out %0,%1" : : "a" \(data\), "d" \(port\)\
+\);) 262.1109 Tj
+0 -256.3207 Td
+(0374 }) 26.2111 Tj
+0 -265.8141 Td
+(0375 ) 21.8426 Tj
+0 -275.3075 Td
+(0376 static inline void) 100.4758 Tj
+0 -284.8008 Td
+(0377 outw\(ushort port, ushort data\)) 152.898 Tj
+0 -294.2942 Td
+(0378 {) 26.2111 Tj
+0 -303.7875 Td
+(0379   asm volatile\("out %0,%1" : : "a" \(data\), "d" \(port\)\
+\);) 262.1109 Tj
+0 -313.2809 Td
+(0380 }) 26.2111 Tj
+0 -322.7743 Td
+(0381 ) 21.8426 Tj
+0 -332.2676 Td
+(0382 static inline void) 100.4758 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
+(0383 outsl\(int port, const void *addr, int cnt\)) 205.3202 Tj
+0 -351.2543 Td
+(0384 {) 26.2111 Tj
+0 -360.7477 Td
+(0385   asm volatile\("cld\\n\\trepne\\n\\toutsl"    :) 209.6887 Tj
+0 -370.2411 Td
+(0386                    "=S" \(addr\), "=c" \(cnt\)    :) 227.1628 Tj
+0 -379.7344 Td
+(0387                    "d" \(port\), "0" \(addr\), "1" \(cnt\)\
+  :) 262.1109 Tj
+0 -389.2278 Td
+(0388                    "cc"\);) 131.0554 Tj
+0 -398.7211 Td
+(0389 }) 26.2111 Tj
+0 -408.2145 Td
+(0390 ) 21.8426 Tj
+0 -417.7079 Td
+(0391 static inline uint) 100.4758 Tj
+0 -427.2012 Td
+(0392 read_ebp\(void\)) 83.0018 Tj
+0 -436.6946 Td
+(0393 {) 26.2111 Tj
+0 -446.1879 Td
+(0394   uint ebp;) 69.8962 Tj
+0 -455.6813 Td
 (0395 ) 21.8426 Tj
-0 -465.175 Td
-(0396 ) 21.8426 Tj
+0 -465.1747 Td
+(0396   asm volatile\("movl %%ebp, %0" : "=a" \(ebp\)\);) 222.7942 Tj
 0 -474.668 Td
-(0397 ) 21.8426 Tj
-0 -484.161 Td
-(0398 ) 21.8426 Tj
-0 -493.655 Td
+(0397   return ebp;) 78.6333 Tj
+0 -484.1614 Td
+(0398 }) 26.2111 Tj
+0 -493.6547 Td
 (0399 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 03) 34.9481 Tj
 Q
 Q
@@ -4642,8 +4682,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -4658,111 +4697,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/x86.h  Page 2) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/x86.h  Page 2) 157.2665 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
+(0402 static inline void) 100.4758 Tj
 0 -56.9602 Td
-(0403 lgdt\(struct segdesc *p, int size\)) 166.004 Tj
+(0403 lgdt\(struct segdesc *p, int size\)) 166.0035 Tj
 0 -66.4535 Td
 (0404 {) 26.2111 Tj
 0 -75.9469 Td
-(0405   volatile ushort pd[3];) 126.687 Tj
+(0405   volatile ushort pd[3];) 126.6869 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
+(0408   pd[1] = \(uint\)p;) 100.4758 Tj
+0 -113.9203 Td
+(0409   pd[2] = \(uint\)p >> 16;) 126.6869 Tj
+0 -123.4137 Td
 (0410 ) 21.8426 Tj
-0 -132.907 Td
-(0411   asm volatile\("lgdt \(%0\)" : : "r" \(pd\)\);) 200.952 Tj
-0 -142.4 Td
+0 -132.9071 Td
+(0411   asm volatile\("lgdt \(%0\)" : : "r" \(pd\)\);) 200.9517 Tj
+0 -142.4004 Td
 (0412 }) 26.2111 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (0413 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (0414 struct gatedesc;) 91.7388 Tj
-0 -170.88 Td
+0 -170.8805 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
+0 -180.3739 Td
+(0416 static inline void) 100.4758 Tj
+0 -189.8672 Td
+(0417 lidt\(struct gatedesc *p, int size\)) 170.3721 Tj
+0 -199.3606 Td
 (0418 {) 26.2111 Tj
-0 -208.854 Td
-(0419   volatile ushort pd[3];) 126.687 Tj
-0 -218.347 Td
+0 -208.8539 Td
+(0419   volatile ushort pd[3];) 126.6869 Tj
+0 -218.3473 Td
 (0420 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 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
+(0422   pd[1] = \(uint\)p;) 100.4758 Tj
+0 -246.8274 Td
+(0423   pd[2] = \(uint\)p >> 16;) 126.6869 Tj
+0 -256.3207 Td
 (0424 ) 21.8426 Tj
-0 -265.814 Td
-(0425   asm volatile\("lidt \(%0\)" : : "r" \(pd\)\);) 200.952 Tj
-0 -275.307 Td
+0 -265.8141 Td
+(0425   asm volatile\("lidt \(%0\)" : : "r" \(pd\)\);) 200.9517 Tj
+0 -275.3075 Td
 (0426 }) 26.2111 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (0427 ) 21.8426 Tj
-0 -294.294 Td
-(0428 static inline void) 100.476 Tj
-0 -303.788 Td
+0 -294.2942 Td
+(0428 static inline void) 100.4758 Tj
+0 -303.7875 Td
 (0429 ltr\(ushort sel\)) 87.3703 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (0430 {) 26.2111 Tj
-0 -322.774 Td
-(0431   asm volatile\("ltr %0" : : "r" \(sel\)\);) 192.215 Tj
-0 -332.268 Td
+0 -322.7743 Td
+(0431   asm volatile\("ltr %0" : : "r" \(sel\)\);) 192.2146 Tj
+0 -332.2676 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
+0 -351.2543 Td
+(0434 static inline uint) 100.4758 Tj
+0 -360.7477 Td
 (0435 read_eflags\(void\)) 96.1073 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (0436 {) 26.2111 Tj
-0 -379.734 Td
+0 -379.7344 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
+0 -389.2278 Td
+(0438   asm volatile\("pushfl; popl %0" : "=r" \(eflags\)\);) 240.2683 Tj
+0 -398.7211 Td
 (0439   return eflags;) 91.7388 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (0440 }) 26.2111 Tj
-0 -417.708 Td
+0 -417.7079 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
+0 -427.2012 Td
+(0442 static inline void) 100.4758 Tj
+0 -436.6946 Td
+(0443 write_eflags\(uint eflags\)) 131.0554 Tj
+0 -446.1879 Td
 (0444 {) 26.2111 Tj
-0 -455.681 Td
-(0445   asm volatile\("pushl %0; popfl" : : "r" \(eflags\)\);) 244.637 Tj
-0 -465.175 Td
+0 -455.6813 Td
+(0445   asm volatile\("pushl %0; popfl" : : "r" \(eflags\)\);) 244.6368 Tj
+0 -465.1747 Td
 (0446 }) 26.2111 Tj
 0 -474.668 Td
 (0447 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (0448 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (0449 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 04) 34.9481 Tj
 Q
 Q
@@ -4777,115 +4816,111 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/x86.h  Page 3) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/x86.h  Page 3) 157.2665 Tj
 0 -28.4801 Td
-(0450 static inline void) 100.476 Tj
+(0450 static inline uint) 100.4758 Tj
 0 -37.9735 Td
-(0451 cpuid\(uint info, uint *eaxp, uint *ebxp, uint *ecxp, uint\
- *edxp\)) 301.427 Tj
+(0451 xchg\(volatile uint *addr, uint newval\)) 187.8461 Tj
 0 -47.4668 Td
 (0452 {) 26.2111 Tj
 0 -56.9602 Td
-(0453   uint eax, ebx, ecx, edx;) 135.424 Tj
+(0453   uint result;) 83.0018 Tj
 0 -66.4535 Td
 (0454 ) 21.8426 Tj
 0 -75.9469 Td
-(0455   asm volatile\("cpuid" :) 126.687 Tj
+(0455   // The + in "+m" denotes a read-modify-write operand.) 262.1109 Tj
 0 -85.4403 Td
-(0456                "=a" \(eax\), "=b" \(ebx\), "=c" \(ecx\), "\
-=d" \(edx\) :) 297.059 Tj
+(0456   asm volatile\("lock; xchgl %0, %1" :) 183.4776 Tj
 0 -94.9336 Td
-(0457                "a" \(info\)\);) 139.792 Tj
+(0457                "+m" \(*addr\), "=a" \(result\) :) 214.0572 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
+(0458                "1" \(newval\) :) 148.5295 Tj
+0 -113.9203 Td
+(0459                "cc"\);) 113.5814 Tj
+0 -123.4137 Td
+(0460   return result;) 91.7388 Tj
+0 -132.9071 Td
+(0461 }) 26.2111 Tj
+0 -142.4004 Td
+(0462 ) 21.8426 Tj
+0 -151.8938 Td
+(0463 static inline void) 100.4758 Tj
+0 -161.3871 Td
+(0464 cli\(void\)) 61.1592 Tj
+0 -170.8805 Td
+(0465 {) 26.2111 Tj
+0 -180.3739 Td
+(0466   asm volatile\("cli"\);) 117.9499 Tj
+0 -189.8672 Td
+(0467 }) 26.2111 Tj
+0 -199.3606 Td
+(0468 ) 21.8426 Tj
+0 -208.8539 Td
+(0469 static inline void) 100.4758 Tj
+0 -218.3473 Td
+(0470 sti\(void\)) 61.1592 Tj
+0 -227.8407 Td
+(0471 {) 26.2111 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
+(0472   asm volatile\("sti"\);) 117.9499 Tj
+0 -246.8274 Td
+(0473 }) 26.2111 Tj
+0 -256.3207 Td
+(0474 ) 21.8426 Tj
+0 -265.8141 Td
+(0475 // Layout of the trap frame built on the stack by the) 253.3738 Tj
+0 -275.3075 Td
+(0476 // hardware and by trapasm.S, and passed to trap\(\).) 244.6368 Tj
+0 -284.8008 Td
+(0477 struct trapframe {) 100.4758 Tj
+0 -294.2942 Td
+(0478   // registers as pushed by pusha) 166.0035 Tj
+0 -303.7875 Td
+(0479   uint edi;) 69.8962 Tj
+0 -313.2809 Td
+(0480   uint esi;) 69.8962 Tj
+0 -322.7743 Td
+(0481   uint ebp;) 69.8962 Tj
+0 -332.2676 Td
+(0482   uint oesp;      // useless & ignored) 187.8461 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
+(0483   uint ebx;) 69.8962 Tj
+0 -351.2543 Td
+(0484   uint edx;) 69.8962 Tj
+0 -360.7477 Td
+(0485   uint ecx;) 69.8962 Tj
+0 -370.2411 Td
+(0486   uint eax;) 69.8962 Tj
+0 -379.7344 Td
+(0487 ) 21.8426 Tj
+0 -389.2278 Td
+(0488   // rest of trap frame) 122.3184 Tj
+0 -398.7211 Td
+(0489   ushort es;) 74.2647 Tj
+0 -408.2145 Td
+(0490   ushort padding1;) 100.4758 Tj
+0 -417.7079 Td
+(0491   ushort ds;) 74.2647 Tj
+0 -427.2012 Td
+(0492   ushort padding2;) 100.4758 Tj
+0 -436.6946 Td
+(0493   uint trapno;) 83.0018 Tj
+0 -446.1879 Td
 (0494 ) 21.8426 Tj
-0 -455.681 Td
-(0495 ) 21.8426 Tj
-0 -465.175 Td
-(0496 ) 21.8426 Tj
+0 -455.6813 Td
+(0495   // below here defined by x86 hardware) 192.2146 Tj
+0 -465.1747 Td
+(0496   uint err;) 69.8962 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
+(0497   uint eip;) 69.8962 Tj
+0 -484.1614 Td
+(0498   ushort cs;) 74.2647 Tj
+0 -493.6547 Td
+(0499   ushort padding3;) 100.4758 Tj
+0 -522.1348 Td
 (Sheet 04) 34.9481 Tj
 Q
 Q
@@ -4914,8 +4949,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -4930,113 +4964,112 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/x86.h  Page 4) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/x86.h  Page 4) 157.2665 Tj
 0 -28.4801 Td
-(0500 // Layout of the trap frame on the stack upon entry to tra\
-p.) 283.953 Tj
+(0500   uint eflags;) 83.0018 Tj
 0 -37.9735 Td
-(0501 struct trapframe {) 100.476 Tj
+(0501 ) 21.8426 Tj
 0 -47.4668 Td
-(0502   // registers as pushed by pusha) 166.004 Tj
+(0502   // below here only when crossing rings, such as from use\
+r to kernel) 323.2701 Tj
 0 -56.9602 Td
-(0503   uint edi;) 69.8962 Tj
+(0503   uint esp;) 69.8962 Tj
 0 -66.4535 Td
-(0504   uint esi;) 69.8962 Tj
+(0504   ushort ss;) 74.2647 Tj
 0 -75.9469 Td
-(0505   uint ebp;) 69.8962 Tj
+(0505   ushort padding4;) 100.4758 Tj
 0 -85.4403 Td
-(0506   uint oesp;      // useless & ignored) 187.846 Tj
+(0506 };) 30.5796 Tj
 0 -94.9336 Td
-(0507   uint ebx;) 69.8962 Tj
+(0507 ) 21.8426 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
+(0508 ) 21.8426 Tj
+0 -113.9203 Td
+(0509 ) 21.8426 Tj
+0 -123.4137 Td
+(0510 ) 21.8426 Tj
+0 -132.9071 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
+0 -142.4004 Td
+(0512 ) 21.8426 Tj
+0 -151.8938 Td
+(0513 ) 21.8426 Tj
+0 -161.3871 Td
+(0514 ) 21.8426 Tj
+0 -170.8805 Td
+(0515 ) 21.8426 Tj
+0 -180.3739 Td
+(0516 ) 21.8426 Tj
+0 -189.8672 Td
+(0517 ) 21.8426 Tj
+0 -199.3606 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 -208.8539 Td
+(0519 ) 21.8426 Tj
+0 -218.3473 Td
+(0520 ) 21.8426 Tj
+0 -227.8407 Td
+(0521 ) 21.8426 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
+(0522 ) 21.8426 Tj
+0 -246.8274 Td
+(0523 ) 21.8426 Tj
+0 -256.3207 Td
+(0524 ) 21.8426 Tj
+0 -265.8141 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
+0 -275.3075 Td
+(0526 ) 21.8426 Tj
+0 -284.8008 Td
+(0527 ) 21.8426 Tj
+0 -294.2942 Td
+(0528 ) 21.8426 Tj
+0 -303.7875 Td
+(0529 ) 21.8426 Tj
+0 -313.2809 Td
+(0530 ) 21.8426 Tj
+0 -322.7743 Td
 (0531 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (0532 ) 21.8426 Tj
 0 -341.761 Td
 (0533 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (0534 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (0535 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (0536 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (0537 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (0538 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (0539 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (0540 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (0541 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (0542 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (0543 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (0544 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (0545 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (0546 ) 21.8426 Tj
 0 -474.668 Td
 (0547 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (0548 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (0549 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 05) 34.9481 Tj
 Q
 Q
@@ -5051,14 +5084,14 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/asm.h  Page 1) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/asm.h  Page 1) 157.2665 Tj
 0 -28.4801 Td
 (0550 //) 30.5796 Tj
 0 -37.9735 Td
-(0551 // macros to create x86 segments from assembler) 227.163 Tj
+(0551 // assembler macros to create x86 segments) 205.3202 Tj
 0 -47.4668 Td
 (0552 //) 30.5796 Tj
 0 -56.9602 Td
@@ -5070,102 +5103,102 @@ q
 (0555         .word 0, 0;                                       \
       \\) 305.796 Tj
 0 -85.4403 Td
-(0556         .byte 0, 0, 0, 0) 126.687 Tj
+(0556         .byte 0, 0, 0, 0) 126.6869 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
+0 -113.9203 Td
 (0559         .word \(\(\(lim\) >> 12\) & 0xffff\), \(\(base\) &\
  0xffff\);      \\) 305.796 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (0560         .byte \(\(\(base\) >> 16\) & 0xff\), \(0x90 | \(ty\
 pe\)\),         \\) 305.796 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (0561                 \(0xC0 | \(\(\(lim\) >> 28\) & 0xf\)\), \(\
-\(\(base\) >> 24\) & 0xff\)) 332.007 Tj
-0 -142.4 Td
+\(\(base\) >> 24\) & 0xff\)) 332.0071 Tj
+0 -142.4004 Td
 (0562 ) 21.8426 Tj
-0 -151.894 Td
-(0563 #define STA_X     0x8       // Executable segment) 235.9 Tj
-0 -161.387 Td
+0 -151.8938 Td
+(0563 #define STA_X     0x8       // Executable segment) 235.8998 Tj
+0 -161.3871 Td
 (0564 #define STA_E     0x4       // Expand down \(non-executabl\
-e segments\)) 318.902 Tj
-0 -170.88 Td
+e segments\)) 318.9016 Tj
+0 -170.8805 Td
 (0565 #define STA_C     0x4       // Conforming code segment \(e\
-xecutable only\)) 336.376 Tj
-0 -180.374 Td
+xecutable only\)) 336.3756 Tj
+0 -180.3739 Td
 (0566 #define STA_W     0x2       // Writeable \(non-executable \
-segments\)) 310.165 Tj
-0 -189.867 Td
+segments\)) 310.1645 Tj
+0 -189.8672 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
+0 -199.3606 Td
+(0568 #define STA_A     0x1       // Accessed) 192.2146 Tj
+0 -208.8539 Td
 (0569 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (0570 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (0571 ) 21.8426 Tj
 0 -237.334 Td
 (0572 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (0573 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (0574 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (0575 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (0576 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (0577 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (0578 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (0579 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (0580 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (0581 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (0582 ) 21.8426 Tj
 0 -341.761 Td
 (0583 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (0584 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (0585 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (0586 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (0587 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (0588 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (0589 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (0590 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (0591 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (0592 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (0593 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (0594 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (0595 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (0596 ) 21.8426 Tj
 0 -474.668 Td
 (0597 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (0598 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (0599 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 05) 34.9481 Tj
 Q
 Q
@@ -5194,8 +5227,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -5210,123 +5242,123 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/mmu.h  Page 1) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/mmu.h  Page 1) 157.2665 Tj
 0 -28.4801 Td
-(0600 // This file contains definitions for the) 200.952 Tj
+(0600 // This file contains definitions for the) 200.9517 Tj
 0 -37.9735 Td
-(0601 // x86 memory management unit \(MMU\).) 179.109 Tj
+(0601 // x86 memory management unit \(MMU\).) 179.1091 Tj
 0 -47.4668 Td
 (0602 ) 21.8426 Tj
 0 -56.9602 Td
-(0603 // Eflags register) 100.476 Tj
+(0603 // Eflags register) 100.4758 Tj
 0 -66.4535 Td
-(0604 #define FL_CF           0x00000001      // Carry Flag) 253.374 Tj
+(0604 #define FL_CF           0x00000001      // Carry Flag) 253.3738 Tj
 0 -75.9469 Td
-(0605 #define FL_PF           0x00000004      // Parity Flag) 257.742 Tj
+(0605 #define FL_PF           0x00000004      // Parity Flag) 257.7424 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
+(0607 #define FL_ZF           0x00000040      // Zero Flag) 249.0053 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
+(0608 #define FL_SF           0x00000080      // Sign Flag) 249.0053 Tj
+0 -113.9203 Td
+(0609 #define FL_TF           0x00000100      // Trap Flag) 249.0053 Tj
+0 -123.4137 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
+e) 279.5849 Tj
+0 -132.9071 Td
+(0611 #define FL_DF           0x00000400      // Direction Flag) 270.8479 Tj
+0 -142.4004 Td
+(0612 #define FL_OF           0x00000800      // Overflow Flag) 266.4794 Tj
+0 -151.8938 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
+evel bitmask) 327.6386 Tj
+0 -161.3871 Td
+(0614 #define FL_IOPL_0       0x00000000      //   IOPL == 0) 257.7424 Tj
+0 -170.8805 Td
+(0615 #define FL_IOPL_1       0x00001000      //   IOPL == 1) 257.7424 Tj
+0 -180.3739 Td
+(0616 #define FL_IOPL_2       0x00002000      //   IOPL == 2) 257.7424 Tj
+0 -189.8672 Td
+(0617 #define FL_IOPL_3       0x00003000      //   IOPL == 3) 257.7424 Tj
+0 -199.3606 Td
+(0618 #define FL_NT           0x00004000      // Nested Task) 257.7424 Tj
+0 -208.8539 Td
+(0619 #define FL_RF           0x00010000      // Resume Flag) 257.7424 Tj
+0 -218.3473 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
+de) 283.9534 Tj
+0 -227.8407 Td
+(0621 #define FL_AC           0x00040000      // Alignment Check) 275.2164 Tj
 0 -237.334 Td
 (0622 #define FL_VIF          0x00080000      // Virtual Interru\
 pt Flag) 305.796 Tj
-0 -246.827 Td
+0 -246.8274 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
+pt Pending) 318.9016 Tj
+0 -256.3207 Td
+(0624 #define FL_ID           0x00200000      // ID flag) 240.2683 Tj
+0 -265.8141 Td
 (0625 ) 21.8426 Tj
-0 -275.307 Td
-(0626 // Segment Descriptor) 113.581 Tj
-0 -284.801 Td
+0 -275.3075 Td
+(0626 // Segment Descriptor) 113.5814 Tj
+0 -284.8008 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
+0 -294.2942 Td
+(0628   uint lim_15_0 : 16;  // Low bits of segment limit) 244.6368 Tj
+0 -303.7875 Td
+(0629   uint base_15_0 : 16; // Low bits of segment base address) 275.2164 Tj
+0 -313.2809 Td
 (0630   uint base_23_16 : 8; // Middle bits of segment base addr\
 ess) 288.322 Tj
-0 -322.774 Td
+0 -322.7743 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
+s\)) 279.5849 Tj
+0 -332.2676 Td
+(0632   uint s : 1;          // 0 = system, 1 = application) 253.3738 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
+(0633   uint dpl : 2;        // Descriptor Privilege Level) 249.0053 Tj
+0 -351.2543 Td
+(0634   uint p : 1;          // Present) 166.0035 Tj
+0 -360.7477 Td
+(0635   uint lim_19_16 : 4;  // High bits of segment limit) 249.0053 Tj
+0 -370.2411 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
+0 -379.7344 Td
+(0637   uint rsv1 : 1;       // Reserved) 170.3721 Tj
+0 -389.2278 Td
 (0638   uint db : 1;         // 0 = 16-bit segment, 1 = 32-bit s\
-egment) 301.427 Tj
-0 -398.721 Td
+egment) 301.4275 Tj
+0 -398.7211 Td
 (0639   uint g : 1;          // Granularity: limit scaled by 4K \
-when set) 310.165 Tj
-0 -408.214 Td
+when set) 310.1645 Tj
+0 -408.2145 Td
 (0640   uint base_31_24 : 8; // High bits of segment base addres\
-s) 279.585 Tj
-0 -417.708 Td
+s) 279.5849 Tj
+0 -417.7079 Td
 (0641 };) 30.5796 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (0642 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (0643 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (0644 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (0645 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (0646 ) 21.8426 Tj
 0 -474.668 Td
 (0647 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (0648 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (0649 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 06) 34.9481 Tj
 Q
 Q
@@ -5341,123 +5373,123 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/mmu.h  Page 2) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/mmu.h  Page 2) 157.2665 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,0,0,0,0,0 }) 323.2701 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
+                  \\) 340.7441 Tj
 0 -75.9469 Td
 (0655 { \(\(lim\) >> 12\) & 0xffff, \(base\) & 0xffff, \(\(base\)\
- >> 16\) & 0xff,       \\) 340.744 Tj
+ >> 16\) & 0xff,       \\) 340.7441 Tj
 0 -85.4403 Td
 (0656     type, 1, dpl, 1, \(uint\) \(lim\) >> 28, 0, 0, 1, 1,  \
-                  \\) 340.744 Tj
+                  \\) 340.7441 Tj
 0 -94.9336 Td
-(0657     \(uint\) \(base\) >> 24 }) 131.055 Tj
+(0657     \(uint\) \(base\) >> 24 }) 131.0554 Tj
 0 -104.427 Td
 (0658 ) 21.8426 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (0659 #define SEG16\(type, base, lim, dpl\) \(struct segdesc\)  \
-                  \\) 340.744 Tj
-0 -123.414 Td
+                  \\) 340.7441 Tj
+0 -123.4137 Td
 (0660 { \(lim\) & 0xffff, \(base\) & 0xffff, \(\(base\) >> 16\) \
-& 0xff,               \\) 340.744 Tj
-0 -132.907 Td
+& 0xff,               \\) 340.7441 Tj
+0 -132.9071 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
+                  \\) 340.7441 Tj
+0 -142.4004 Td
+(0662     \(uint\) \(base\) >> 24 }) 131.0554 Tj
+0 -151.8938 Td
 (0663 ) 21.8426 Tj
-0 -161.387 Td
-(0664 #define DPL_USER    0x3     // User DPL) 192.215 Tj
-0 -170.88 Td
+0 -161.3871 Td
+(0664 #define DPL_USER    0x3     // User DPL) 192.2146 Tj
+0 -170.8805 Td
 (0665 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 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
+0 -189.8672 Td
+(0667 #define STA_X       0x8     // Executable segment) 235.8998 Tj
+0 -199.3606 Td
 (0668 #define STA_E       0x4     // Expand down \(non-executabl\
-e segments\)) 318.902 Tj
-0 -208.854 Td
+e segments\)) 318.9016 Tj
+0 -208.8539 Td
 (0669 #define STA_C       0x4     // Conforming code segment \(e\
-xecutable only\)) 336.376 Tj
-0 -218.347 Td
+xecutable only\)) 336.3756 Tj
+0 -218.3473 Td
 (0670 #define STA_W       0x2     // Writeable \(non-executable \
-segments\)) 310.165 Tj
-0 -227.841 Td
+segments\)) 310.1645 Tj
+0 -227.8407 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
+(0672 #define STA_A       0x1     // Accessed) 192.2146 Tj
+0 -246.8274 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
+0 -256.3207 Td
+(0674 // System segment type bits) 139.7925 Tj
+0 -265.8141 Td
+(0675 #define STS_T16A    0x1     // Available 16-bit TSS) 244.6368 Tj
+0 -275.3075 Td
+(0676 #define STS_LDT     0x2     // Local Descriptor Table) 253.3738 Tj
+0 -284.8008 Td
+(0677 #define STS_T16B    0x3     // Busy 16-bit TSS) 222.7942 Tj
+0 -294.2942 Td
+(0678 #define STS_CG16    0x4     // 16-bit Call Gate) 227.1628 Tj
+0 -303.7875 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
+ns) 283.9534 Tj
+0 -313.2809 Td
+(0680 #define STS_IG16    0x6     // 16-bit Interrupt Gate) 249.0053 Tj
+0 -322.7743 Td
+(0681 #define STS_TG16    0x7     // 16-bit Trap Gate) 227.1628 Tj
+0 -332.2676 Td
+(0682 #define STS_T32A    0x9     // Available 32-bit TSS) 244.6368 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
+(0683 #define STS_T32B    0xB     // Busy 32-bit TSS) 222.7942 Tj
+0 -351.2543 Td
+(0684 #define STS_CG32    0xC     // 32-bit Call Gate) 227.1628 Tj
+0 -360.7477 Td
+(0685 #define STS_IG32    0xE     // 32-bit Interrupt Gate) 249.0053 Tj
+0 -370.2411 Td
+(0686 #define STS_TG32    0xF     // 32-bit Trap Gate) 227.1628 Tj
+0 -379.7344 Td
 (0687 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (0688 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (0689 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (0690 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (0691 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (0692 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (0693 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (0694 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (0695 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (0696 ) 21.8426 Tj
 0 -474.668 Td
 (0697 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (0698 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (0699 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 06) 34.9481 Tj
 Q
 Q
@@ -5486,8 +5518,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -5502,114 +5533,114 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/mmu.h  Page 3) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/mmu.h  Page 3) 157.2665 Tj
 0 -28.4801 Td
 (0700 // Task state segment format) 144.161 Tj
 0 -37.9735 Td
-(0701 struct taskstate {) 100.476 Tj
+(0701 struct taskstate {) 100.4758 Tj
 0 -47.4668 Td
-(0702   uint link;         // Old ts selector) 192.215 Tj
+(0702   uint link;         // Old ts selector) 192.2146 Tj
 0 -56.9602 Td
 (0703   uint esp0;         // Stack pointers and segment selecto\
-rs) 283.953 Tj
+rs) 283.9534 Tj
 0 -66.4535 Td
 (0704   ushort ss0;        //   after an increase in privilege l\
-evel) 292.69 Tj
+evel) 292.6905 Tj
 0 -75.9469 Td
-(0705   ushort padding1;) 100.476 Tj
+(0705   ushort padding1;) 100.4758 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
+(0708   ushort padding2;) 100.4758 Tj
+0 -113.9203 Td
 (0709   uint *esp2;) 78.6333 Tj
-0 -123.414 Td
+0 -123.4137 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
+0 -132.9071 Td
+(0711   ushort padding3;) 100.4758 Tj
+0 -142.4004 Td
+(0712   void *cr3;         // Page directory base) 209.6887 Tj
+0 -151.8938 Td
+(0713   uint *eip;         // Saved state from last task switch) 270.8479 Tj
+0 -161.3871 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
+0 -170.8805 Td
+(0715   uint eax;          // More saved state \(registers\)) 249.0053 Tj
+0 -180.3739 Td
 (0716   uint ecx;) 69.8962 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (0717   uint edx;) 69.8962 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (0718   uint ebx;) 69.8962 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (0719   uint *esp;) 74.2647 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (0720   uint *ebp;) 74.2647 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (0721   uint esi;) 69.8962 Tj
 0 -237.334 Td
 (0722   uint edi;) 69.8962 Tj
-0 -246.827 Td
+0 -246.8274 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
+0 -256.3207 Td
+(0724   ushort padding4;) 100.4758 Tj
+0 -265.8141 Td
 (0725   ushort cs;) 74.2647 Tj
-0 -275.307 Td
-(0726   ushort padding5;) 100.476 Tj
-0 -284.801 Td
+0 -275.3075 Td
+(0726   ushort padding5;) 100.4758 Tj
+0 -284.8008 Td
 (0727   ushort ss;) 74.2647 Tj
-0 -294.294 Td
-(0728   ushort padding6;) 100.476 Tj
-0 -303.788 Td
+0 -294.2942 Td
+(0728   ushort padding6;) 100.4758 Tj
+0 -303.7875 Td
 (0729   ushort ds;) 74.2647 Tj
-0 -313.281 Td
-(0730   ushort padding7;) 100.476 Tj
-0 -322.774 Td
+0 -313.2809 Td
+(0730   ushort padding7;) 100.4758 Tj
+0 -322.7743 Td
 (0731   ushort fs;) 74.2647 Tj
-0 -332.268 Td
-(0732   ushort padding8;) 100.476 Tj
+0 -332.2676 Td
+(0732   ushort padding8;) 100.4758 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
+0 -351.2543 Td
+(0734   ushort padding9;) 100.4758 Tj
+0 -360.7477 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
+0 -370.2411 Td
+(0736   ushort padding10;) 104.8443 Tj
+0 -379.7344 Td
+(0737   ushort t;          // Trap on task switch) 209.6887 Tj
+0 -389.2278 Td
+(0738   ushort iomb;       // I/O map base address) 214.0572 Tj
+0 -398.7211 Td
 (0739 };) 30.5796 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (0740 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (0741 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (0742 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (0743 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (0744 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (0745 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (0746 ) 21.8426 Tj
 0 -474.668 Td
 (0747 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (0748 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (0749 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 07) 34.9481 Tj
 Q
 Q
@@ -5624,131 +5655,131 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/mmu.h  Page 4) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/mmu.h  Page 4) 157.2665 Tj
 0 -28.4801 Td
-(0750 // Gate descriptors for interrupts and traps) 214.057 Tj
+(0750 // Gate descriptors for interrupts and traps) 214.0572 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
+t) 279.5849 Tj
 0 -56.9602 Td
-(0753   uint ss : 16;         // segment selector) 209.689 Tj
+(0753   uint cs : 16;         // code segment selector) 231.5313 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
+s\)) 279.5849 Tj
 0 -85.4403 Td
-(0756   uint type : 4;        // type\(STS_{TG,IG32,TG32}\)) 244.637 Tj
+(0756   uint type : 4;        // type\(STS_{TG,IG32,TG32}\)) 244.6368 Tj
 0 -94.9336 Td
-(0757   uint s : 1;           // must be 0 \(system\)) 218.426 Tj
+(0757   uint s : 1;           // must be 0 \(system\)) 218.4257 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
+lege level) 310.1645 Tj
+0 -113.9203 Td
+(0759   uint p : 1;           // Present) 170.3721 Tj
+0 -123.4137 Td
+(0760   uint off_31_16 : 16;  // high bits of offset in segment) 270.8479 Tj
+0 -132.9071 Td
 (0761 };) 30.5796 Tj
-0 -142.4 Td
+0 -142.4004 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
+0 -151.8938 Td
+(0763 // Set up a normal interrupt/trap gate descriptor.) 240.2683 Tj
+0 -161.3871 Td
 (0764 // - istrap: 1 for a trap \(= exception\) gate, 0 for an i\
-nterrupt gate.) 327.639 Tj
-0 -170.88 Td
+nterrupt gate.) 327.6386 Tj
+0 -170.8805 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
+lone) 292.6905 Tj
+0 -180.3739 Td
+(0766 // - sel: Code segment selector for interrupt/trap handler) 275.2164 Tj
+0 -189.8672 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
+r) 279.5849 Tj
+0 -199.3606 Td
+(0768 // - dpl: Descriptor Privilege Level -) 187.8461 Tj
+0 -208.8539 Td
 (0769 //        the privilege level required for software to inv\
 oke) 288.322 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (0770 //        this interrupt/trap gate explicitly using an int\
- instruction.) 332.007 Tj
-0 -227.841 Td
+ instruction.) 332.0071 Tj
+0 -227.8407 Td
 (0771 #define SETGATE\(gate, istrap, sel, off, d\)              \
-  \\) 279.585 Tj
+  \\) 279.5849 Tj
 0 -237.334 Td
 (0772 {                                                         \
-\\) 279.585 Tj
-0 -246.827 Td
+\\) 279.5849 Tj
+0 -246.8274 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
+      \\) 279.5849 Tj
+0 -256.3207 Td
+(0774   \(gate\).cs = \(sel\);                                  \
+    \\) 279.5849 Tj
+0 -265.8141 Td
 (0775   \(gate\).args = 0;                                      \
-  \\) 279.585 Tj
-0 -275.307 Td
+  \\) 279.5849 Tj
+0 -275.3075 Td
 (0776   \(gate\).rsv1 = 0;                                      \
-  \\) 279.585 Tj
-0 -284.801 Td
+  \\) 279.5849 Tj
+0 -284.8008 Td
 (0777   \(gate\).type = \(istrap\) ? STS_TG32 : STS_IG32;       \
-    \\) 279.585 Tj
-0 -294.294 Td
+    \\) 279.5849 Tj
+0 -294.2942 Td
 (0778   \(gate\).s = 0;                                         \
-  \\) 279.585 Tj
-0 -303.788 Td
+  \\) 279.5849 Tj
+0 -303.7875 Td
 (0779   \(gate\).dpl = \(d\);                                   \
-    \\) 279.585 Tj
-0 -313.281 Td
+    \\) 279.5849 Tj
+0 -313.2809 Td
 (0780   \(gate\).p = 1;                                         \
-  \\) 279.585 Tj
-0 -322.774 Td
+  \\) 279.5849 Tj
+0 -322.7743 Td
 (0781   \(gate\).off_31_16 = \(uint\) \(off\) >> 16;            \
-      \\) 279.585 Tj
-0 -332.268 Td
+      \\) 279.5849 Tj
+0 -332.2676 Td
 (0782 }) 26.2111 Tj
 0 -341.761 Td
 (0783 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (0784 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (0785 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (0786 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (0787 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (0788 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (0789 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (0790 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (0791 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (0792 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (0793 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (0794 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (0795 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (0796 ) 21.8426 Tj
 0 -474.668 Td
 (0797 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (0798 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (0799 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 07) 34.9481 Tj
 Q
 Q
@@ -5777,8 +5808,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -5793,17 +5823,17 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/elf.h  Page 1) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/elf.h  Page 1) 157.2665 Tj
 0 -28.4801 Td
-(0800 // Format of an ELF executable file) 174.741 Tj
+(0800 // Format of an ELF executable file) 174.7406 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
+ian) 283.9534 Tj
 0 -56.9602 Td
 (0803 ) 21.8426 Tj
 0 -66.4535 Td
@@ -5811,94 +5841,94 @@ ian) 283.953 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
+(0806   uint magic;  // must equal ELF_MAGIC) 187.8461 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
+0 -113.9203 Td
 (0809   ushort machine;) 96.1073 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (0810   uint version;) 87.3703 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (0811   uint entry;) 78.6333 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (0812   uint phoff;) 78.6333 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (0813   uint shoff;) 78.6333 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (0814   uint flags;) 78.6333 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (0815   ushort ehsize;) 91.7388 Tj
-0 -180.374 Td
-(0816   ushort phentsize;) 104.844 Tj
-0 -189.867 Td
+0 -180.3739 Td
+(0816   ushort phentsize;) 104.8443 Tj
+0 -189.8672 Td
 (0817   ushort phnum;) 87.3703 Tj
-0 -199.361 Td
-(0818   ushort shentsize;) 104.844 Tj
-0 -208.854 Td
+0 -199.3606 Td
+(0818   ushort shentsize;) 104.8443 Tj
+0 -208.8539 Td
 (0819   ushort shnum;) 87.3703 Tj
-0 -218.347 Td
-(0820   ushort shstrndx;) 100.476 Tj
-0 -227.841 Td
+0 -218.3473 Td
+(0820   ushort shstrndx;) 100.4758 Tj
+0 -227.8407 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
+0 -246.8274 Td
+(0823 // Program section header) 131.0554 Tj
+0 -256.3207 Td
 (0824 struct proghdr {) 91.7388 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (0825   uint type;) 74.2647 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (0826   uint offset;) 83.0018 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (0827   uint va;) 65.5277 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (0828   uint pa;) 65.5277 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (0829   uint filesz;) 83.0018 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (0830   uint memsz;) 78.6333 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (0831   uint flags;) 78.6333 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (0832   uint align;) 78.6333 Tj
 0 -341.761 Td
 (0833 };) 30.5796 Tj
-0 -351.254 Td
+0 -351.2543 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
+0 -360.7477 Td
+(0835 // Values for Proghdr type) 135.4239 Tj
+0 -370.2411 Td
+(0836 #define ELF_PROG_LOAD           1) 166.0035 Tj
+0 -379.7344 Td
 (0837 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 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
+0 -398.7211 Td
+(0839 #define ELF_PROG_FLAG_EXEC      1) 166.0035 Tj
+0 -408.2145 Td
+(0840 #define ELF_PROG_FLAG_WRITE     2) 166.0035 Tj
+0 -417.7079 Td
+(0841 #define ELF_PROG_FLAG_READ      4) 166.0035 Tj
+0 -427.2012 Td
 (0842 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (0843 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (0844 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (0845 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (0846 ) 21.8426 Tj
 0 -474.668 Td
 (0847 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (0848 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (0849 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 08) 34.9481 Tj
 Q
 Q
@@ -5913,10 +5943,10 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/elf.h  Page 2) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/elf.h  Page 2) 157.2665 Tj
 0 -28.4801 Td
 (0850 // Blank page.) 83.0018 Tj
 0 -37.9735 Td
@@ -5935,89 +5965,89 @@ q
 (0857 ) 21.8426 Tj
 0 -104.427 Td
 (0858 ) 21.8426 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (0859 ) 21.8426 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (0860 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (0861 ) 21.8426 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (0862 ) 21.8426 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (0863 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (0864 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (0865 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (0866 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (0867 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (0868 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (0869 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (0870 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (0871 ) 21.8426 Tj
 0 -237.334 Td
 (0872 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (0873 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (0874 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (0875 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (0876 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (0877 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (0878 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (0879 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (0880 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (0881 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (0882 ) 21.8426 Tj
 0 -341.761 Td
 (0883 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (0884 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (0885 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (0886 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (0887 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (0888 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (0889 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (0890 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (0891 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (0892 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (0893 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (0894 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (0895 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (0896 ) 21.8426 Tj
 0 -474.668 Td
 (0897 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (0898 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (0899 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 08) 34.9481 Tj
 Q
 Q
@@ -6046,8 +6076,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -6062,25 +6091,25 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/bootasm.S  Page 1) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/bootasm.S  Page 1) 174.7406 Tj
 0 -28.4801 Td
 (0900 #include "asm.h") 91.7388 Tj
 0 -37.9735 Td
 (0901 ) 21.8426 Tj
 0 -47.4668 Td
 (0902 # Start the first CPU: switch to 32-bit protected mode, ju\
-mp into C.) 318.902 Tj
+mp into C.) 318.9016 Tj
 0 -56.9602 Td
 (0903 # The BIOS loads this code from the first sector of the ha\
-rd disk into) 327.639 Tj
+rd disk into) 327.6386 Tj
 0 -66.4535 Td
 (0904 # memory at physical address 0x7c00 and starts executing i\
-n real mode) 323.27 Tj
+n real mode) 323.2701 Tj
 0 -75.9469 Td
-(0905 # with %cs=0 %ip=7c00.) 117.95 Tj
+(0905 # with %cs=0 %ip=7c00.) 117.9499 Tj
 0 -85.4403 Td
 (0906 ) 21.8426 Tj
 0 -94.9336 Td
@@ -6089,95 +6118,95 @@ 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
+0 -113.9203 Td
 (0909 .set CR0_PE_ON,      0x1         # protected mode enable f\
 lag) 288.322 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (0910 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (0911 .globl start) 74.2647 Tj
-0 -142.4 Td
+0 -142.4004 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
+0 -151.8938 Td
+(0913   .code16                     # Assemble for 16-bit mode) 266.4794 Tj
+0 -161.3871 Td
+(0914   cli                         # Disable interrupts) 240.2683 Tj
+0 -170.8805 Td
 (0915   cld                         # String operations incremen\
-t) 279.585 Tj
-0 -180.374 Td
+t) 279.5849 Tj
+0 -180.3739 Td
 (0916 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 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 -199.3606 Td
+(0918   xorw    %ax,%ax             # Segment number zero) 244.6368 Tj
+0 -208.8539 Td
+(0919   movw    %ax,%ds             # -> Data Segment) 227.1628 Tj
+0 -218.3473 Td
+(0920   movw    %ax,%es             # -> Extra Segment) 231.5313 Tj
+0 -227.8407 Td
+(0921   movw    %ax,%ss             # -> Stack Segment) 231.5313 Tj
 0 -237.334 Td
 (0922 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (0923   # Enable A20:) 87.3703 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (0924   #   For backwards compatibility with the earliest PCs, p\
 hysical) 305.796 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (0925   #   address line 20 is tied low, so that addresses highe\
-r than) 301.427 Tj
-0 -275.307 Td
+r than) 301.4275 Tj
+0 -275.3075 Td
 (0926   #   1MB wrap around to zero by default.  This code undoe\
 s this.) 305.796 Tj
-0 -284.801 Td
+0 -284.8008 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
+0 -294.2942 Td
+(0928   inb     $0x64,%al               # Wait for not busy) 253.3738 Tj
+0 -303.7875 Td
+(0929   testb   $0x2,%al) 100.4758 Tj
+0 -313.2809 Td
+(0930   jnz     seta20.1) 100.4758 Tj
+0 -322.7743 Td
 (0931 ) 21.8426 Tj
-0 -332.268 Td
-(0932   movb    $0xd1,%al               # 0xd1 -> port 0x64) 253.374 Tj
+0 -332.2676 Td
+(0932   movb    $0xd1,%al               # 0xd1 -> port 0x64) 253.3738 Tj
 0 -341.761 Td
-(0933   outb    %al,$0x64) 104.844 Tj
-0 -351.254 Td
+(0933   outb    %al,$0x64) 104.8443 Tj
+0 -351.2543 Td
 (0934 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 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
+0 -370.2411 Td
+(0936   inb     $0x64,%al               # Wait for not busy) 253.3738 Tj
+0 -379.7344 Td
+(0937   testb   $0x2,%al) 100.4758 Tj
+0 -389.2278 Td
+(0938   jnz     seta20.2) 100.4758 Tj
+0 -398.7211 Td
 (0939 ) 21.8426 Tj
-0 -408.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
+0 -408.2145 Td
+(0940   movb    $0xdf,%al               # 0xdf -> port 0x60) 253.3738 Tj
+0 -417.7079 Td
+(0941   outb    %al,$0x60) 104.8443 Tj
+0 -427.2012 Td
 (0942 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (0943 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (0944 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (0945 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (0946 ) 21.8426 Tj
 0 -474.668 Td
 (0947 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (0948 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (0949 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 09) 34.9481 Tj
 Q
 Q
@@ -6192,116 +6221,116 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/bootasm.S  Page 2) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/bootasm.S  Page 2) 174.7406 Tj
 0 -28.4801 Td
 (0950   # Switch from real to protected mode, using a bootstrap \
 GDT) 288.322 Tj
 0 -37.9735 Td
-(0951   # and segment translation that makes virtual addresses) 266.479 Tj
+(0951   # and segment translation that makes virtual addresses) 266.4794 Tj
 0 -47.4668 Td
-(0952   # identical to their physical addresses, so that the) 257.742 Tj
+(0952   # identical to physical addresses, so that the) 231.5313 Tj
 0 -56.9602 Td
 (0953   # effective memory map does not change during the switch\
-.) 279.585 Tj
+.) 279.5849 Tj
 0 -66.4535 Td
 (0954   lgdt    gdtdesc) 96.1073 Tj
 0 -75.9469 Td
-(0955   movl    %cr0, %eax) 109.213 Tj
+(0955   movl    %cr0, %eax) 109.2129 Tj
 0 -85.4403 Td
-(0956   orl     $CR0_PE_ON, %eax) 135.424 Tj
+(0956   orl     $CR0_PE_ON, %eax) 135.4239 Tj
 0 -94.9336 Td
-(0957   movl    %eax, %cr0) 109.213 Tj
+(0957   movl    %eax, %cr0) 109.2129 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
+0 -113.9203 Td
+(0959   # Jump to next instruction, but in 32-bit code segment.) 270.8479 Tj
+0 -123.4137 Td
+(0960   # Switches processor into 32-bit mode.) 196.5831 Tj
+0 -132.9071 Td
+(0961   ljmp    $PROT_MODE_CSEG, $protcseg) 179.1091 Tj
+0 -142.4004 Td
 (0962 ) 21.8426 Tj
-0 -151.894 Td
-(0963   .code32                     # Assemble for 32-bit mode) 266.479 Tj
-0 -161.387 Td
+0 -151.8938 Td
+(0963   .code32                     # Assemble for 32-bit mode) 266.4794 Tj
+0 -161.3871 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
+0 -170.8805 Td
+(0965   # Set up the protected-mode data segment registers) 249.0053 Tj
+0 -180.3739 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 -189.8672 Td
+(0967   movw    %ax, %ds                # -> DS: Data Segment) 262.1109 Tj
+0 -199.3606 Td
+(0968   movw    %ax, %es                # -> ES: Extra Segment) 266.4794 Tj
+0 -208.8539 Td
+(0969   movw    %ax, %fs                # -> FS) 200.9517 Tj
+0 -218.3473 Td
+(0970   movw    %ax, %gs                # -> GS) 200.9517 Tj
+0 -227.8407 Td
+(0971   movw    %ax, %ss                # -> SS: Stack Segment) 266.4794 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
+0 -246.8274 Td
+(0973   # Set up the stack pointer and call into C.) 218.4257 Tj
+0 -256.3207 Td
+(0974   movl    $start, %esp) 117.9499 Tj
+0 -265.8141 Td
+(0975   call    bootmain) 100.4758 Tj
+0 -275.3075 Td
 (0976 ) 21.8426 Tj
-0 -284.801 Td
-(0977   # If bootmain returns \(it shouldn't\), loop.) 218.426 Tj
-0 -294.294 Td
+0 -284.8008 Td
+(0977   # If bootmain returns \(it shouldn't\), loop.) 218.4257 Tj
+0 -294.2942 Td
 (0978 spin:) 43.6851 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (0979   jmp     spin) 83.0018 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (0980 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (0981 # Bootstrap GDT) 87.3703 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (0982 .p2align 2                                # force 4 byte a\
-lignment) 310.165 Tj
+lignment) 310.1645 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
+0 -351.2543 Td
+(0984   SEG_NULLASM                             # null seg) 249.0053 Tj
+0 -360.7477 Td
+(0985   SEG_ASM\(STA_X|STA_R, 0x0, 0xffffffff\)   # code seg) 249.0053 Tj
+0 -370.2411 Td
+(0986   SEG_ASM\(STA_W, 0x0, 0xffffffff\)         # data seg) 249.0053 Tj
+0 -379.7344 Td
 (0987 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (0988 gdtdesc:) 56.7907 Tj
-0 -398.721 Td
+0 -398.7211 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
+- 1) 279.5849 Tj
+0 -408.2145 Td
+(0990   .long   gdt                             # address gdt) 262.1109 Tj
+0 -417.7079 Td
 (0991 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (0992 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (0993 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (0994 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (0995 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (0996 ) 21.8426 Tj
 0 -474.668 Td
 (0997 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (0998 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (0999 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 09) 34.9481 Tj
 Q
 Q
@@ -6330,8 +6359,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -6346,121 +6374,123 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/bootother.S  Page 1) 183.478 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/bootother.S  Page 1) 183.4776 Tj
 0 -28.4801 Td
 (1000 #include "asm.h") 91.7388 Tj
 0 -37.9735 Td
 (1001 ) 21.8426 Tj
 0 -47.4668 Td
-(1002 # Start an Application Processor. This must be placed on a\
- 4KB boundary) 332.007 Tj
+(1002 # Each non-boot CPU \("AP"\) is started up in response to \
+a STARTUP) 305.796 Tj
 0 -56.9602 Td
-(1003 # somewhere in the 1st MB of conventional memory \(APBOOTS\
-TRAP\). However,) 336.376 Tj
+(1003 # IPI from the boot CPU.  Section B.4.2 of the Multi-Proce\
+ssor) 292.6905 Tj
 0 -66.4535 Td
-(1004 # due to some shortcuts below it's restricted further to w\
-ithin the 1st) 332.007 Tj
+(1004 # Specification says that the AP will start in real mode w\
+ith CS:IP) 314.533 Tj
 0 -75.9469 Td
-(1005 # 64KB. The AP starts in real-mode, with) 196.583 Tj
+(1005 # set to XY00:0000, where XY is an 8-bit value sent with t\
+he) 283.9534 Tj
 0 -85.4403 Td
-(1006 #   CS selector set to the startup memory address/16;) 253.374 Tj
+(1006 # STARTUP. Thus this code must start at a 4096-byte bounda\
+ry.) 288.322 Tj
 0 -94.9336 Td
-(1007 #   CS base set to startup memory address;) 205.32 Tj
+(1007 #) 26.2111 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
+(1008 # Because this code sets DS to zero, it must sit) 231.5313 Tj
+0 -113.9203 Td
+(1009 # at an address in the low 2^16 bytes.) 187.8461 Tj
+0 -123.4137 Td
 (1010 #) 26.2111 Tj
-0 -132.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\
+0 -132.9071 Td
+(1011 # Bootothers \(in main.c\) sends the STARTUPs, one at a ti\
+me.) 279.5849 Tj
+0 -142.4004 Td
+(1012 # It puts this code \(start\) at 0x7000.) 187.8461 Tj
+0 -151.8938 Td
+(1013 # It puts the correct %esp in start-4,) 187.8461 Tj
+0 -161.3871 Td
+(1014 # and the place to jump to in start-8.) 187.8461 Tj
+0 -170.8805 Td
+(1015 #) 26.2111 Tj
+0 -180.3739 Td
+(1016 # This code is identical to bootasm.S except:) 218.4257 Tj
+0 -189.8672 Td
+(1017 #   - it does not need to enable A20) 179.1091 Tj
+0 -199.3606 Td
+(1018 #   - it uses the address at start-4 for the %esp) 235.8998 Tj
+0 -208.8539 Td
+(1019 #   - it jumps to the address at start-8 instead of callin\
+g bootmain) 318.9016 Tj
+0 -218.3473 Td
+(1020 ) 21.8426 Tj
+0 -227.8407 Td
+(1021 .set PROT_MODE_CSEG, 0x8         # kernel code segment sel\
 ector) 297.059 Tj
 0 -237.334 Td
-(1022 .set CR0_PE_ON,      0x1         # protected mode enable f\
+(1022 .set PROT_MODE_DSEG, 0x10        # kernel data segment sel\
+ector) 297.059 Tj
+0 -246.8274 Td
+(1023 .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, \
+0 -256.3207 Td
+(1024 ) 21.8426 Tj
+0 -265.8141 Td
+(1025 .globl start) 74.2647 Tj
+0 -275.3075 Td
+(1026 start:) 48.0537 Tj
+0 -284.8008 Td
+(1027   .code16                     # Assemble for 16-bit mode) 266.4794 Tj
+0 -294.2942 Td
+(1028   cli                         # Disable interrupts) 240.2683 Tj
+0 -303.7875 Td
+(1029   cld                         # String operations incremen\
+t) 279.5849 Tj
+0 -313.2809 Td
+(1030 ) 21.8426 Tj
+0 -322.7743 Td
+(1031   # Set up the important data segment registers \(DS, ES, \
 SS\).) 288.322 Tj
-0 -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 -332.2676 Td
+(1032   xorw    %ax,%ax             # Segment number zero) 244.6368 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
+(1033   movw    %ax,%ds             # -> Data Segment) 227.1628 Tj
+0 -351.2543 Td
+(1034   movw    %ax,%es             # -> Extra Segment) 231.5313 Tj
+0 -360.7477 Td
+(1035   movw    %ax,%ss             # -> Stack Segment) 231.5313 Tj
+0 -370.2411 Td
 (1036 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (1037 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (1038 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (1039 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (1040 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (1041 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (1042 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (1043 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (1044 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (1045 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (1046 ) 21.8426 Tj
 0 -474.668 Td
 (1047 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (1048 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1049 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 10) 34.9481 Tj
 Q
 Q
@@ -6475,116 +6505,116 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/bootother.S  Page 2) 183.478 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/bootother.S  Page 2) 183.4776 Tj
 0 -28.4801 Td
 (1050   # Switch from real to protected mode, using a bootstrap \
 GDT) 288.322 Tj
 0 -37.9735 Td
-(1051   # and segment translation that makes virtual addresses) 266.479 Tj
+(1051   # and segment translation that makes virtual addresses) 266.4794 Tj
 0 -47.4668 Td
-(1052   # identical to their physical addresses, so that the) 257.742 Tj
+(1052   # identical to their physical addresses, so that the) 257.7424 Tj
 0 -56.9602 Td
 (1053   # effective memory map does not change during the switch\
-.) 279.585 Tj
+.) 279.5849 Tj
 0 -66.4535 Td
 (1054   lgdt    gdtdesc) 96.1073 Tj
 0 -75.9469 Td
-(1055   movl    %cr0, %eax) 109.213 Tj
+(1055   movl    %cr0, %eax) 109.2129 Tj
 0 -85.4403 Td
-(1056   orl     $CR0_PE_ON, %eax) 135.424 Tj
+(1056   orl     $CR0_PE_ON, %eax) 135.4239 Tj
 0 -94.9336 Td
-(1057   movl    %eax, %cr0) 109.213 Tj
+(1057   movl    %eax, %cr0) 109.2129 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
+0 -113.9203 Td
+(1059   # Jump to next instruction, but in 32-bit code segment.) 270.8479 Tj
+0 -123.4137 Td
+(1060   # Switches processor into 32-bit mode.) 196.5831 Tj
+0 -132.9071 Td
+(1061   ljmp    $PROT_MODE_CSEG, $protcseg) 179.1091 Tj
+0 -142.4004 Td
 (1062 ) 21.8426 Tj
-0 -151.894 Td
-(1063   .code32                     # Assemble for 32-bit mode) 266.479 Tj
-0 -161.387 Td
+0 -151.8938 Td
+(1063   .code32                     # Assemble for 32-bit mode) 266.4794 Tj
+0 -161.3871 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
+0 -170.8805 Td
+(1065   # Set up the protected-mode data segment registers) 249.0053 Tj
+0 -180.3739 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 -189.8672 Td
+(1067   movw    %ax, %ds                # -> DS: Data Segment) 262.1109 Tj
+0 -199.3606 Td
+(1068   movw    %ax, %es                # -> ES: Extra Segment) 266.4794 Tj
+0 -208.8539 Td
+(1069   movw    %ax, %fs                # -> FS) 200.9517 Tj
+0 -218.3473 Td
+(1070   movw    %ax, %gs                # -> GS) 200.9517 Tj
+0 -227.8407 Td
+(1071   movw    %ax, %ss                # -> SS: Stack Segment) 266.4794 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
+0 -246.8274 Td
+(1073   movl    start-4, %esp) 122.3184 Tj
+0 -256.3207 Td
+(1074   movl    start-8, %eax) 122.3184 Tj
+0 -265.8141 Td
 (1075   jmp     *%eax) 87.3703 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (1076 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (1077 # Bootstrap GDT) 87.3703 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (1078 .p2align 2                                # force 4 byte a\
-lignment) 310.165 Tj
-0 -303.788 Td
+lignment) 310.1645 Tj
+0 -303.7875 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 -313.2809 Td
+(1080   SEG_NULLASM                             # null seg) 249.0053 Tj
+0 -322.7743 Td
+(1081   SEG_ASM\(STA_X|STA_R, 0x0, 0xffffffff\)   # code seg) 249.0053 Tj
+0 -332.2676 Td
+(1082   SEG_ASM\(STA_W, 0x0, 0xffffffff\)         # data seg) 249.0053 Tj
 0 -341.761 Td
 (1083 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (1084 gdtdesc:) 56.7907 Tj
-0 -360.748 Td
+0 -360.7477 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
+- 1) 279.5849 Tj
+0 -370.2411 Td
+(1086   .long   gdt                             # address gdt) 262.1109 Tj
+0 -379.7344 Td
 (1087 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (1088 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (1089 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (1090 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (1091 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (1092 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (1093 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (1094 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (1095 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (1096 ) 21.8426 Tj
 0 -474.668 Td
 (1097 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (1098 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1099 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 10) 34.9481 Tj
 Q
 Q
@@ -6613,8 +6643,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -6629,115 +6658,114 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/bootmain.c  Page 1) 179.109 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/bootmain.c  Page 1) 179.1091 Tj
 0 -28.4801 Td
 (1100 // Boot loader.) 87.3703 Tj
 0 -37.9735 Td
 (1101 //) 30.5796 Tj
 0 -47.4668 Td
-(1102 // The BIOS loads boot sector \(bootasm.S\) from sector 0 \
-of the disk) 314.533 Tj
+(1102 // Part of the boot sector, along with bootasm.S, which ca\
+lls bootmain\(\).) 340.7441 Tj
 0 -56.9602 Td
-(1103 // into memory and executes it.  The boot sector puts the \
-processor) 314.533 Tj
+(1103 // bootasm.S has put the processor into protected 32-bit m\
+ode.) 292.6905 Tj
 0 -66.4535 Td
-(1104 // in 32-bit mode and calls bootmain below, which loads an\
- ELF kernel) 323.27 Tj
+(1104 // bootmain\(\) loads an ELF kernel image from the disk st\
+arting at) 305.796 Tj
 0 -75.9469 Td
-(1105 // image from the disk starting at sector 1 and then jumps\
- to the) 305.796 Tj
+(1105 // sector 1 and then jumps to the kernel entry routine.) 262.1109 Tj
 0 -85.4403 Td
-(1106 // kernel entry routine.) 126.687 Tj
+(1106 ) 21.8426 Tj
 0 -94.9336 Td
-(1107 ) 21.8426 Tj
+(1107 #include "types.h") 100.4758 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
+(1108 #include "elf.h") 91.7388 Tj
+0 -113.9203 Td
+(1109 #include "x86.h") 91.7388 Tj
+0 -123.4137 Td
+(1110 ) 21.8426 Tj
+0 -132.9071 Td
+(1111 #define SECTSIZE  512) 113.5814 Tj
+0 -142.4004 Td
+(1112 ) 21.8426 Tj
+0 -151.8938 Td
+(1113 void readseg\(uint, uint, uint\);) 157.2665 Tj
+0 -161.3871 Td
+(1114 ) 21.8426 Tj
+0 -170.8805 Td
+(1115 void) 39.3166 Tj
+0 -180.3739 Td
+(1116 bootmain\(void\)) 83.0018 Tj
+0 -189.8672 Td
+(1117 {) 26.2111 Tj
+0 -199.3606 Td
+(1118   struct elfhdr *elf;) 113.5814 Tj
+0 -208.8539 Td
+(1119   struct proghdr *ph, *eph;) 139.7925 Tj
+0 -218.3473 Td
+(1120   void \(*entry\)\(void\);) 117.9499 Tj
+0 -227.8407 Td
+(1121 ) 21.8426 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
+(1122   elf = \(struct elfhdr*\)0x10000;  // scratch space) 240.2683 Tj
+0 -246.8274 Td
+(1123 ) 21.8426 Tj
+0 -256.3207 Td
+(1124   // Read 1st page off disk) 139.7925 Tj
+0 -265.8141 Td
+(1125   readseg\(\(uint\)elf, SECTSIZE*8, 0\);) 179.1091 Tj
+0 -275.3075 Td
+(1126 ) 21.8426 Tj
+0 -284.8008 Td
+(1127   // Is this an ELF executable?) 157.2665 Tj
+0 -294.2942 Td
+(1128   if\(elf->magic != ELF_MAGIC\)) 148.5295 Tj
+0 -303.7875 Td
+(1129     goto bad;) 78.6333 Tj
+0 -313.2809 Td
+(1130 ) 21.8426 Tj
+0 -322.7743 Td
+(1131   // Load each program segment \(ignores ph flags\).) 240.2683 Tj
+0 -332.2676 Td
+(1132   ph = \(struct proghdr*\)\(\(uchar*\)elf + elf->phoff\);) 244.6368 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
+(1133   eph = ph + elf->phnum;) 126.6869 Tj
+0 -351.2543 Td
+(1134   for\(; ph < eph; ph++\)) 122.3184 Tj
+0 -360.7477 Td
+(1135     readseg\(ph->va & 0xFFFFFF, ph->memsz, ph->offset\);) 257.7424 Tj
+0 -370.2411 Td
+(1136 ) 21.8426 Tj
+0 -379.7344 Td
+(1137   // Call the entry point from the ELF header.) 222.7942 Tj
+0 -389.2278 Td
+(1138   // Does not return!) 113.5814 Tj
+0 -398.7211 Td
+(1139   entry = \(void\(*\)\(void\)\)\(elf->entry & 0xFFFFFF\);) 235.8998 Tj
+0 -408.2145 Td
+(1140   entry\(\);) 65.5277 Tj
+0 -417.7079 Td
+(1141 ) 21.8426 Tj
+0 -427.2012 Td
+(1142 bad:) 39.3166 Tj
+0 -436.6946 Td
+(1143   outw\(0x8A00, 0x8A00\);) 122.3184 Tj
+0 -446.1879 Td
+(1144   outw\(0x8A00, 0x8E00\);) 122.3184 Tj
+0 -455.6813 Td
+(1145   for\(;;\)) 61.1592 Tj
+0 -465.1747 Td
+(1146     ;) 43.6851 Tj
 0 -474.668 Td
-(1147     ;) 43.6851 Tj
-0 -484.161 Td
-(1148 }) 26.2111 Tj
-0 -493.655 Td
+(1147 }) 26.2111 Tj
+0 -484.1614 Td
+(1148 ) 21.8426 Tj
+0 -493.6547 Td
 (1149 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 11) 34.9481 Tj
 Q
 Q
@@ -6752,10 +6780,10 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/bootmain.c  Page 2) 179.109 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/bootmain.c  Page 2) 179.1091 Tj
 0 -28.4801 Td
 (1150 void) 39.3166 Tj
 0 -37.9735 Td
@@ -6763,9 +6791,9 @@ q
 0 -47.4668 Td
 (1152 {) 26.2111 Tj
 0 -56.9602 Td
-(1153   // Wait for disk ready.) 131.055 Tj
+(1153   // Wait for disk ready.) 131.0554 Tj
 0 -66.4535 Td
-(1154   while\(\(inb\(0x1F7\) & 0xC0\) != 0x40\)) 179.109 Tj
+(1154   while\(\(inb\(0x1F7\) & 0xC0\) != 0x40\)) 179.1091 Tj
 0 -75.9469 Td
 (1155     ;) 43.6851 Tj
 0 -85.4403 Td
@@ -6773,94 +6801,94 @@ q
 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
+(1158 // Read a single sector at offset into dst.) 209.6887 Tj
+0 -113.9203 Td
 (1159 void) 39.3166 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (1160 readsect\(void *dst, uint offset\)) 161.635 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (1161 {) 26.2111 Tj
-0 -142.4 Td
-(1162   // Issue command.) 104.844 Tj
-0 -151.894 Td
+0 -142.4004 Td
+(1162   // Issue command.) 104.8443 Tj
+0 -151.8938 Td
 (1163   waitdisk\(\);) 78.6333 Tj
-0 -161.387 Td
+0 -161.3871 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
+0 -170.8805 Td
+(1165   outb\(0x1F3, offset\);) 117.9499 Tj
+0 -180.3739 Td
+(1166   outb\(0x1F4, offset >> 8\);) 139.7925 Tj
+0 -189.8672 Td
 (1167   outb\(0x1F5, offset >> 16\);) 144.161 Tj
-0 -199.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
+0 -199.3606 Td
+(1168   outb\(0x1F6, \(offset >> 24\) | 0xE0\);) 183.4776 Tj
+0 -208.8539 Td
+(1169   outb\(0x1F7, 0x20\);  // cmd 0x20 - read sectors) 231.5313 Tj
+0 -218.3473 Td
 (1170 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 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
+0 -246.8274 Td
+(1173   insl\(0x1F0, dst, SECTSIZE/4\);) 157.2665 Tj
+0 -256.3207 Td
 (1174 }) 26.2111 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (1175 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (1176 // Read 'count' bytes at 'offset' from kernel into virtual\
- address 'va'.) 336.376 Tj
-0 -284.801 Td
+ address 'va'.) 336.3756 Tj
+0 -284.8008 Td
 (1177 // Might copy more than asked.) 152.898 Tj
-0 -294.294 Td
+0 -294.2942 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
+0 -303.7875 Td
+(1179 readseg\(uint va, uint count, uint offset\)) 200.9517 Tj
+0 -313.2809 Td
 (1180 {) 26.2111 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (1181   uint eva;) 69.8962 Tj
-0 -332.268 Td
+0 -332.2676 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 \
+(1183   eva = va + count;) 104.8443 Tj
+0 -351.2543 Td
+(1184 ) 21.8426 Tj
+0 -360.7477 Td
+(1185   // Round down to sector boundary.) 174.7406 Tj
+0 -370.2411 Td
+(1186   va &= ~\(SECTSIZE - 1\);) 126.6869 Tj
+0 -379.7344 Td
+(1187 ) 21.8426 Tj
+0 -389.2278 Td
+(1188   // Translate from bytes to sectors; kernel starts at sec\
+tor 1.) 301.4275 Tj
+0 -398.7211 Td
+(1189   offset = \(offset / SECTSIZE\) + 1;) 174.7406 Tj
+0 -408.2145 Td
+(1190 ) 21.8426 Tj
+0 -417.7079 Td
+(1191   // If this is too slow, we could read lots of sectors at\
+ a time.) 310.1645 Tj
+0 -427.2012 Td
+(1192   // We'd write more to memory than asked, but it doesn't \
 matter --) 314.533 Tj
-0 -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 -436.6946 Td
+(1193   // we load in increasing order.) 166.0035 Tj
+0 -446.1879 Td
+(1194   for\(; va < eva; va += SECTSIZE, offset++\)) 209.6887 Tj
+0 -455.6813 Td
+(1195     readsect\(\(uchar*\)va, offset\);) 166.0035 Tj
+0 -465.1747 Td
+(1196 }) 26.2111 Tj
 0 -474.668 Td
-(1197 }) 26.2111 Tj
-0 -484.161 Td
+(1197 ) 21.8426 Tj
+0 -484.1614 Td
 (1198 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1199 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 11) 34.9481 Tj
 Q
 Q
@@ -6889,8 +6917,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -6905,16 +6932,16 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/main.c  Page 1) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/main.c  Page 1) 161.635 Tj
 0 -28.4801 Td
-(1200 #include "types.h") 100.476 Tj
+(1200 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
 (1201 #include "defs.h") 96.1073 Tj
 0 -47.4668 Td
-(1202 #include "param.h") 100.476 Tj
+(1202 #include "param.h") 100.4758 Tj
 0 -56.9602 Td
 (1203 #include "mmu.h") 91.7388 Tj
 0 -66.4535 Td
@@ -6924,94 +6951,92 @@ q
 0 -85.4403 Td
 (1206 ) 21.8426 Tj
 0 -94.9336 Td
-(1207 static void bootothers\(void\);) 148.529 Tj
+(1207 static void bootothers\(void\);) 148.5295 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
+(1208 static void mpmain\(void\) __attribute__\(\(noreturn\)\);) 244.6368 Tj
+0 -113.9203 Td
+(1209 ) 21.8426 Tj
+0 -123.4137 Td
+(1210 // Bootstrap processor starts running C code here.) 240.2683 Tj
+0 -132.9071 Td
+(1211 int) 34.9481 Tj
+0 -142.4004 Td
+(1212 main\(void\)) 65.5277 Tj
+0 -151.8938 Td
+(1213 {) 26.2111 Tj
+0 -161.3871 Td
+(1214   extern char edata[], end[];) 148.5295 Tj
+0 -170.8805 Td
+(1215 ) 21.8426 Tj
+0 -180.3739 Td
+(1216   // clear BSS) 83.0018 Tj
+0 -189.8672 Td
+(1217   memset\(edata, 0, end - edata\);) 161.635 Tj
+0 -199.3606 Td
+(1218 ) 21.8426 Tj
+0 -208.8539 Td
+(1219   mp_init\(\); // collect info about this machine) 227.1628 Tj
+0 -218.3473 Td
+(1220   lapic_init\(mp_bcpu\(\)\);) 126.6869 Tj
+0 -227.8407 Td
+(1221   cprintf\("\\ncpu%d: starting xv6\\n\\n", cpu\(\)\);) 222.7942 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
+(1222 ) 21.8426 Tj
+0 -246.8274 Td
+(1223   pinit\(\);         // process table) 174.7406 Tj
+0 -256.3207 Td
+(1224   binit\(\);         // buffer cache) 170.3721 Tj
+0 -265.8141 Td
+(1225   pic_init\(\);      // interrupt controller) 205.3202 Tj
+0 -275.3075 Td
+(1226   ioapic_init\(\);   // another interrupt controller) 240.2683 Tj
+0 -284.8008 Td
+(1227   kinit\(\);         // physical memory allocator) 227.1628 Tj
+0 -294.2942 Td
+(1228   tvinit\(\);        // trap vectors) 170.3721 Tj
+0 -303.7875 Td
+(1229   fileinit\(\);      // file table) 161.635 Tj
+0 -313.2809 Td
+(1230   iinit\(\);         // inode cache) 166.0035 Tj
+0 -322.7743 Td
+(1231   console_init\(\);  // I/O devices & their interrupts) 249.0053 Tj
+0 -332.2676 Td
+(1232   ide_init\(\);      // disk) 135.4239 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
+(1233   if\(!ismp\)) 69.8962 Tj
+0 -351.2543 Td
+(1234     timer_init\(\);  // uniprocessor timer) 196.5831 Tj
+0 -360.7477 Td
+(1235   userinit\(\);      // first user process) 196.5831 Tj
+0 -370.2411 Td
+(1236   bootothers\(\);    // start other processors) 214.0572 Tj
+0 -379.7344 Td
+(1237 ) 21.8426 Tj
+0 -389.2278 Td
+(1238   // Finish setting up this processor in mpmain.) 231.5313 Tj
+0 -398.7211 Td
+(1239   mpmain\(\);) 69.8962 Tj
+0 -408.2145 Td
+(1240 }) 26.2111 Tj
+0 -417.7079 Td
+(1241 ) 21.8426 Tj
+0 -427.2012 Td
+(1242 ) 21.8426 Tj
+0 -436.6946 Td
+(1243 ) 21.8426 Tj
+0 -446.1879 Td
+(1244 ) 21.8426 Tj
+0 -455.6813 Td
+(1245 ) 21.8426 Tj
+0 -465.1747 Td
+(1246 ) 21.8426 Tj
 0 -474.668 Td
-(1247   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
+(1247 ) 21.8426 Tj
+0 -484.1614 Td
+(1248 ) 21.8426 Tj
+0 -493.6547 Td
+(1249 ) 21.8426 Tj
+0 -522.1348 Td
 (Sheet 12) 34.9481 Tj
 Q
 Q
@@ -7026,113 +7051,114 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/main.c  Page 2) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/main.c  Page 2) 161.635 Tj
 0 -28.4801 Td
-(1250   // enable interrupts on this processor.) 200.952 Tj
+(1250 // Bootstrap processor gets here after setting up the hard\
+ware.) 297.059 Tj
 0 -37.9735 Td
-(1251   cpus[cpu\(\)].nlock--;) 117.95 Tj
+(1251 // Additional processors start here.) 179.1091 Tj
 0 -47.4668 Td
-(1252   sti\(\);) 56.7907 Tj
+(1252 static void) 69.8962 Tj
 0 -56.9602 Td
-(1253 ) 21.8426 Tj
+(1253 mpmain\(void\)) 74.2647 Tj
 0 -66.4535 Td
-(1254   scheduler\(\);) 83.0018 Tj
+(1254 {) 26.2111 Tj
 0 -75.9469 Td
-(1255 }) 26.2111 Tj
+(1255   cprintf\("cpu%d: mpmain\\n", cpu\(\)\);) 179.1091 Tj
 0 -85.4403 Td
-(1256 ) 21.8426 Tj
+(1256   idtinit\(\);) 74.2647 Tj
 0 -94.9336 Td
-(1257 // Additional processors start here.) 179.109 Tj
+(1257   if\(cpu\(\) != mp_bcpu\(\)\)) 126.6869 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\
+(1258     lapic_init\(cpu\(\)\);) 117.9499 Tj
+0 -113.9203 Td
+(1259   setupsegs\(0\);) 87.3703 Tj
+0 -123.4137 Td
+(1260   xchg\(&cpus[cpu\(\)].booted, 1\);) 157.2665 Tj
+0 -132.9071 Td
+(1261 ) 21.8426 Tj
+0 -142.4004 Td
+(1262   cprintf\("cpu%d: scheduling\\n", cpu\(\)\);) 196.5831 Tj
+0 -151.8938 Td
+(1263   scheduler\(\);) 83.0018 Tj
+0 -161.3871 Td
+(1264 }) 26.2111 Tj
+0 -170.8805 Td
+(1265 ) 21.8426 Tj
+0 -180.3739 Td
+(1266 static void) 69.8962 Tj
+0 -189.8672 Td
+(1267 bootothers\(void\)) 91.7388 Tj
+0 -199.3606 Td
+(1268 {) 26.2111 Tj
+0 -208.8539 Td
+(1269   extern uchar _binary_bootother_start[], _binary_bootothe\
 r_size[];) 314.533 Tj
-0 -303.788 Td
-(1279   uchar *code;) 83.0018 Tj
-0 -313.281 Td
-(1280   struct cpu *c;) 91.7388 Tj
-0 -322.774 Td
+0 -218.3473 Td
+(1270   uchar *code;) 83.0018 Tj
+0 -227.8407 Td
+(1271   struct cpu *c;) 91.7388 Tj
+0 -237.334 Td
+(1272   char *stack;) 83.0018 Tj
+0 -246.8274 Td
+(1273 ) 21.8426 Tj
+0 -256.3207 Td
+(1274   // Write bootstrap code to unused memory at 0x7000.) 253.3738 Tj
+0 -265.8141 Td
+(1275   code = \(uchar*\)0x7000;) 126.6869 Tj
+0 -275.3075 Td
+(1276   memmove\(code, _binary_bootother_start, \(uint\)_binary_\
+bootother_size\);) 332.0071 Tj
+0 -284.8008 Td
+(1277 ) 21.8426 Tj
+0 -294.2942 Td
+(1278   for\(c = cpus; c < cpus+ncpu; c++\){) 179.1091 Tj
+0 -303.7875 Td
+(1279     if\(c == cpus+cpu\(\)\)  // We've started already.) 240.2683 Tj
+0 -313.2809 Td
+(1280       continue;) 87.3703 Tj
+0 -322.7743 Td
 (1281 ) 21.8426 Tj
-0 -332.268 Td
-(1282   // Write bootstrap code to unused memory at 0x7000.) 253.374 Tj
+0 -332.2676 Td
+(1282     // Fill in %esp, %eip and start code on cpu.) 231.5313 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
+(1283     stack = kalloc\(KSTACKSIZE\);) 157.2665 Tj
+0 -351.2543 Td
+(1284     *\(void**\)\(code-4\) = stack + KSTACKSIZE;) 209.6887 Tj
+0 -360.7477 Td
+(1285     *\(void**\)\(code-8\) = mpmain;) 157.2665 Tj
+0 -370.2411 Td
+(1286     lapic_startap\(c->apicid, \(uint\)code\);) 200.9517 Tj
+0 -379.7344 Td
+(1287 ) 21.8426 Tj
+0 -389.2278 Td
+(1288     // Wait for cpu to get through bootstrap.) 218.4257 Tj
+0 -398.7211 Td
+(1289     while\(c->booted == 0\)) 131.0554 Tj
+0 -408.2145 Td
+(1290       ;) 52.4222 Tj
+0 -417.7079 Td
+(1291   }) 34.9481 Tj
+0 -427.2012 Td
+(1292 }) 26.2111 Tj
+0 -436.6946 Td
+(1293 ) 21.8426 Tj
+0 -446.1879 Td
 (1294 ) 21.8426 Tj
-0 -455.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 -455.6813 Td
+(1295 ) 21.8426 Tj
+0 -465.1747 Td
+(1296 ) 21.8426 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
+(1297 ) 21.8426 Tj
+0 -484.1614 Td
+(1298 ) 21.8426 Tj
+0 -493.6547 Td
+(1299 ) 21.8426 Tj
+0 -522.1348 Td
 (Sheet 12) 34.9481 Tj
 Q
 Q
@@ -7161,8 +7187,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -7177,113 +7202,113 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/spinlock.h  Page 1) 179.109 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/spinlock.h  Page 1) 179.1091 Tj
 0 -28.4801 Td
-(1300 // Mutual exclusion lock.) 131.055 Tj
+(1300 // Mutual exclusion lock.) 131.0554 Tj
 0 -37.9735 Td
 (1301 struct spinlock {) 96.1073 Tj
 0 -47.4668 Td
-(1302   uint locked;   // Is the lock held?) 183.478 Tj
+(1302   uint locked;   // Is the lock held?) 183.4776 Tj
 0 -56.9602 Td
 (1303 ) 21.8426 Tj
 0 -66.4535 Td
-(1304   // For debugging:) 104.844 Tj
+(1304   // For debugging:) 104.8443 Tj
 0 -75.9469 Td
-(1305   char *name;    // Name of lock.) 166.004 Tj
+(1305   char *name;    // Name of lock.) 166.0035 Tj
 0 -85.4403 Td
 (1306   int  cpu;      // The number of the cpu holding the lock\
-.) 279.585 Tj
+.) 279.5849 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
+(1308                  // that locked the lock.) 200.9517 Tj
+0 -113.9203 Td
 (1309 };) 30.5796 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (1310 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (1311 ) 21.8426 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (1312 ) 21.8426 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (1313 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (1314 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (1315 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (1316 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (1317 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (1318 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (1319 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (1320 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (1321 ) 21.8426 Tj
 0 -237.334 Td
 (1322 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (1323 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (1324 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (1325 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (1326 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (1327 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (1328 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (1329 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (1330 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (1331 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (1332 ) 21.8426 Tj
 0 -341.761 Td
 (1333 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (1334 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (1335 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (1336 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (1337 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (1338 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (1339 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (1340 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (1341 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (1342 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (1343 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (1344 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (1345 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (1346 ) 21.8426 Tj
 0 -474.668 Td
 (1347 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (1348 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1349 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 13) 34.9481 Tj
 Q
 Q
@@ -7298,111 +7323,112 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/spinlock.h  Page 2) 179.109 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/spinlock.c  Page 1) 179.1091 Tj
 0 -28.4801 Td
-(1350 // Blank page.) 83.0018 Tj
+(1350 // Mutual exclusion spin locks.) 157.2665 Tj
 0 -37.9735 Td
 (1351 ) 21.8426 Tj
 0 -47.4668 Td
-(1352 ) 21.8426 Tj
+(1352 #include "types.h") 100.4758 Tj
 0 -56.9602 Td
-(1353 ) 21.8426 Tj
+(1353 #include "defs.h") 96.1073 Tj
 0 -66.4535 Td
-(1354 ) 21.8426 Tj
+(1354 #include "param.h") 100.4758 Tj
 0 -75.9469 Td
-(1355 ) 21.8426 Tj
+(1355 #include "x86.h") 91.7388 Tj
 0 -85.4403 Td
-(1356 ) 21.8426 Tj
+(1356 #include "mmu.h") 91.7388 Tj
 0 -94.9336 Td
-(1357 ) 21.8426 Tj
+(1357 #include "proc.h") 96.1073 Tj
 0 -104.427 Td
-(1358 ) 21.8426 Tj
-0 -113.92 Td
+(1358 #include "spinlock.h") 113.5814 Tj
+0 -113.9203 Td
 (1359 ) 21.8426 Tj
-0 -123.414 Td
-(1360 ) 21.8426 Tj
-0 -132.907 Td
+0 -123.4137 Td
+(1360 extern int use_console_lock;) 144.161 Tj
+0 -132.9071 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
+0 -142.4004 Td
+(1362 void) 39.3166 Tj
+0 -151.8938 Td
+(1363 initlock\(struct spinlock *lock, char *name\)) 209.6887 Tj
+0 -161.3871 Td
+(1364 {) 26.2111 Tj
+0 -170.8805 Td
+(1365   lock->name = name;) 109.2129 Tj
+0 -180.3739 Td
+(1366   lock->locked = 0;) 104.8443 Tj
+0 -189.8672 Td
+(1367   lock->cpu = 0xffffffff;) 131.0554 Tj
+0 -199.3606 Td
+(1368 }) 26.2111 Tj
+0 -208.8539 Td
 (1369 ) 21.8426 Tj
-0 -218.347 Td
-(1370 ) 21.8426 Tj
-0 -227.841 Td
-(1371 ) 21.8426 Tj
+0 -218.3473 Td
+(1370 // Acquire the lock.) 109.2129 Tj
+0 -227.8407 Td
+(1371 // Loops \(spins\) until the lock is acquired.) 214.0572 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
+(1372 // Holding a lock for a long time may cause) 209.6887 Tj
+0 -246.8274 Td
+(1373 // other CPUs to waste time spinning to acquire it.) 244.6368 Tj
+0 -256.3207 Td
+(1374 void) 39.3166 Tj
+0 -265.8141 Td
+(1375 acquire\(struct spinlock *lock\)) 152.898 Tj
+0 -275.3075 Td
+(1376 {) 26.2111 Tj
+0 -284.8008 Td
+(1377   pushcli\(\);) 74.2647 Tj
+0 -294.2942 Td
+(1378   if\(holding\(lock\)\)) 104.8443 Tj
+0 -303.7875 Td
+(1379     panic\("acquire"\);) 113.5814 Tj
+0 -313.2809 Td
 (1380 ) 21.8426 Tj
-0 -322.774 Td
-(1381 ) 21.8426 Tj
-0 -332.268 Td
-(1382 ) 21.8426 Tj
+0 -322.7743 Td
+(1381   // The xchg is atomic.) 126.6869 Tj
+0 -332.2676 Td
+(1382   // It also serializes, so that reads after acquire are n\
+ot) 283.9534 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
+(1383   // reordered before it.) 131.0554 Tj
+0 -351.2543 Td
+(1384   while\(xchg\(&lock->locked, 1\) == 1\)) 179.1091 Tj
+0 -360.7477 Td
+(1385     ;) 43.6851 Tj
+0 -370.2411 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
+0 -379.7344 Td
+(1387   // Record info about lock acquisition for debugging.) 257.7424 Tj
+0 -389.2278 Td
+(1388   // The +10 is only so that we can tell the difference) 262.1109 Tj
+0 -398.7211 Td
+(1389   // between forgetting to initialize lock->cpu) 227.1628 Tj
+0 -408.2145 Td
+(1390   // and holding a lock on cpu 0.) 166.0035 Tj
+0 -417.7079 Td
+(1391   lock->cpu = cpu\(\) + 10;) 131.0554 Tj
+0 -427.2012 Td
+(1392   getcallerpcs\(&lock, lock->pcs\);) 166.0035 Tj
+0 -436.6946 Td
+(1393 }) 26.2111 Tj
+0 -446.1879 Td
 (1394 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (1395 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (1396 ) 21.8426 Tj
 0 -474.668 Td
 (1397 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (1398 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1399 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 13) 34.9481 Tj
 Q
 Q
@@ -7431,8 +7457,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -7447,113 +7472,114 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/spinlock.c  Page 1) 179.109 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/spinlock.c  Page 2) 179.1091 Tj
 0 -28.4801 Td
-(1400 // Mutual exclusion spin locks.) 157.267 Tj
+(1400 // Release the lock.) 109.2129 Tj
 0 -37.9735 Td
-(1401 ) 21.8426 Tj
+(1401 void) 39.3166 Tj
 0 -47.4668 Td
-(1402 #include "types.h") 100.476 Tj
+(1402 release\(struct spinlock *lock\)) 152.898 Tj
 0 -56.9602 Td
-(1403 #include "defs.h") 96.1073 Tj
+(1403 {) 26.2111 Tj
 0 -66.4535 Td
-(1404 #include "param.h") 100.476 Tj
+(1404   if\(!holding\(lock\)\)) 109.2129 Tj
 0 -75.9469 Td
-(1405 #include "x86.h") 91.7388 Tj
+(1405     panic\("release"\);) 113.5814 Tj
 0 -85.4403 Td
-(1406 #include "mmu.h") 91.7388 Tj
+(1406 ) 21.8426 Tj
 0 -94.9336 Td
-(1407 #include "proc.h") 96.1073 Tj
+(1407   lock->pcs[0] = 0;) 104.8443 Tj
 0 -104.427 Td
-(1408 #include "spinlock.h") 113.581 Tj
-0 -113.92 Td
+(1408   lock->cpu = 0xffffffff;) 131.0554 Tj
+0 -113.9203 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
+0 -123.4137 Td
+(1410   // The xchg serializes, so that reads before release are) 275.2164 Tj
+0 -132.9071 Td
+(1411   // not reordered after it.  \(This reordering would be a\
+llowed) 297.059 Tj
+0 -142.4004 Td
+(1412   // by the Intel manuals, but does not happen on current) 270.8479 Tj
+0 -151.8938 Td
+(1413   // Intel processors.  The xchg being asm volatile also k\
+eeps) 292.6905 Tj
+0 -161.3871 Td
+(1414   // gcc from delaying the above assignments.\)) 222.7942 Tj
+0 -170.8805 Td
+(1415   xchg\(&lock->locked, 0\);) 131.0554 Tj
+0 -180.3739 Td
+(1416 ) 21.8426 Tj
+0 -189.8672 Td
+(1417   popcli\(\);) 69.8962 Tj
+0 -199.3606 Td
 (1418 }) 26.2111 Tj
-0 -208.854 Td
+0 -208.8539 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 -218.3473 Td
+(1420 // Record the current call stack in pcs[] by following the\
+ %ebp chain.) 327.6386 Tj
+0 -227.8407 Td
+(1421 void) 39.3166 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
+(1422 getcallerpcs\(void *v, uint pcs[]\)) 166.0035 Tj
+0 -246.8274 Td
+(1423 {) 26.2111 Tj
+0 -256.3207 Td
+(1424   uint *ebp;) 74.2647 Tj
+0 -265.8141 Td
+(1425   int i;) 56.7907 Tj
+0 -275.3075 Td
+(1426 ) 21.8426 Tj
+0 -284.8008 Td
+(1427   ebp = \(uint*\)v - 2;) 113.5814 Tj
+0 -294.2942 Td
+(1428   for\(i = 0; i < 10; i++\){) 135.4239 Tj
+0 -303.7875 Td
+(1429     if\(ebp == 0 || ebp == \(uint*\)0xffffffff\)) 214.0572 Tj
+0 -313.2809 Td
+(1430       break;) 74.2647 Tj
+0 -322.7743 Td
+(1431     pcs[i] = ebp[1];     // saved %eip) 187.8461 Tj
+0 -332.2676 Td
+(1432     ebp = \(uint*\)ebp[0]; // saved %ebp) 187.8461 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
+(1433   }) 34.9481 Tj
+0 -351.2543 Td
+(1434   for\(; i < 10; i++\)) 109.2129 Tj
+0 -360.7477 Td
+(1435     pcs[i] = 0;) 87.3703 Tj
+0 -370.2411 Td
+(1436 }) 26.2111 Tj
+0 -379.7344 Td
+(1437 ) 21.8426 Tj
+0 -389.2278 Td
+(1438 // Check whether this cpu is holding the lock.) 222.7942 Tj
+0 -398.7211 Td
+(1439 int) 34.9481 Tj
+0 -408.2145 Td
+(1440 holding\(struct spinlock *lock\)) 152.898 Tj
+0 -417.7079 Td
+(1441 {) 26.2111 Tj
+0 -427.2012 Td
+(1442   return lock->locked && lock->cpu == cpu\(\) + 10;) 235.8998 Tj
+0 -436.6946 Td
+(1443 }) 26.2111 Tj
+0 -446.1879 Td
+(1444 ) 21.8426 Tj
+0 -455.6813 Td
+(1445 ) 21.8426 Tj
+0 -465.1747 Td
+(1446 ) 21.8426 Tj
 0 -474.668 Td
-(1447 }) 26.2111 Tj
-0 -484.161 Td
+(1447 ) 21.8426 Tj
+0 -484.1614 Td
 (1448 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1449 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 14) 34.9481 Tj
 Q
 Q
@@ -7568,115 +7594,113 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/spinlock.c  Page 2) 179.109 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/spinlock.c  Page 3) 179.1091 Tj
 0 -28.4801 Td
-(1450 // Release the lock.) 109.213 Tj
+(1450 // Pushcli/popcli are like cli/sti except that they are ma\
+tched:) 301.4275 Tj
 0 -37.9735 Td
-(1451 void) 39.3166 Tj
+(1451 // it takes two popcli to undo two pushcli.  Also, if inte\
+rrupts) 301.4275 Tj
 0 -47.4668 Td
-(1452 release\(struct spinlock *lock\)) 152.898 Tj
+(1452 // are off, then pushcli, popcli leaves them off.) 235.8998 Tj
 0 -56.9602 Td
-(1453 {) 26.2111 Tj
+(1453 ) 21.8426 Tj
 0 -66.4535 Td
-(1454   if\(!holding\(lock\)\)) 109.213 Tj
+(1454 void) 39.3166 Tj
 0 -75.9469 Td
-(1455     panic\("release"\);) 113.581 Tj
+(1455 pushcli\(void\)) 78.6333 Tj
 0 -85.4403 Td
-(1456 ) 21.8426 Tj
+(1456 {) 26.2111 Tj
 0 -94.9336 Td
-(1457   lock->pcs[0] = 0;) 104.844 Tj
+(1457   int eflags;) 78.6333 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
+(1458 ) 21.8426 Tj
+0 -113.9203 Td
+(1459   eflags = read_eflags\(\);) 131.0554 Tj
+0 -123.4137 Td
+(1460   cli\(\);) 56.7907 Tj
+0 -132.9071 Td
+(1461   if\(cpus[cpu\(\)].ncli++ == 0\)) 148.5295 Tj
+0 -142.4004 Td
+(1462     cpus[cpu\(\)].intena = eflags & FL_IF;) 196.5831 Tj
+0 -151.8938 Td
+(1463 }) 26.2111 Tj
+0 -161.3871 Td
+(1464 ) 21.8426 Tj
+0 -170.8805 Td
+(1465 void) 39.3166 Tj
+0 -180.3739 Td
+(1466 popcli\(void\)) 74.2647 Tj
+0 -189.8672 Td
+(1467 {) 26.2111 Tj
+0 -199.3606 Td
+(1468   if\(read_eflags\(\)&FL_IF\)) 131.0554 Tj
+0 -208.8539 Td
+(1469     panic\("popcli - interruptible"\);) 179.1091 Tj
+0 -218.3473 Td
+(1470   if\(--cpus[cpu\(\)].ncli < 0\)) 144.161 Tj
+0 -227.8407 Td
+(1471     panic\("popcli"\);) 109.2129 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
+(1472   if\(cpus[cpu\(\)].ncli == 0 && cpus[cpu\(\)].intena\)) 235.8998 Tj
+0 -246.8274 Td
+(1473     sti\(\);) 65.5277 Tj
+0 -256.3207 Td
+(1474 }) 26.2111 Tj
+0 -265.8141 Td
 (1475 ) 21.8426 Tj
-0 -275.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 -275.3075 Td
+(1476 ) 21.8426 Tj
+0 -284.8008 Td
+(1477 ) 21.8426 Tj
+0 -294.2942 Td
+(1478 ) 21.8426 Tj
+0 -303.7875 Td
+(1479 ) 21.8426 Tj
+0 -313.2809 Td
+(1480 ) 21.8426 Tj
+0 -322.7743 Td
+(1481 ) 21.8426 Tj
+0 -332.2676 Td
+(1482 ) 21.8426 Tj
 0 -341.761 Td
-(1483   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
+(1483 ) 21.8426 Tj
+0 -351.2543 Td
+(1484 ) 21.8426 Tj
+0 -360.7477 Td
+(1485 ) 21.8426 Tj
+0 -370.2411 Td
 (1486 ) 21.8426 Tj
-0 -379.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
+0 -379.7344 Td
+(1487 ) 21.8426 Tj
+0 -389.2278 Td
+(1488 ) 21.8426 Tj
+0 -398.7211 Td
+(1489 ) 21.8426 Tj
+0 -408.2145 Td
+(1490 ) 21.8426 Tj
+0 -417.7079 Td
+(1491 ) 21.8426 Tj
+0 -427.2012 Td
+(1492 ) 21.8426 Tj
+0 -436.6946 Td
 (1493 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (1494 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (1495 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (1496 ) 21.8426 Tj
 0 -474.668 Td
 (1497 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (1498 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1499 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 14) 34.9481 Tj
 Q
 Q
@@ -7705,8 +7729,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -7721,119 +7744,119 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/proc.h  Page 1) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  xv6/proc.h  Page 1) 161.635 Tj
 0 -28.4801 Td
-(1500 // Segments in proc->gdt) 126.687 Tj
+(1500 // Segments in proc->gdt) 126.6869 Tj
 0 -37.9735 Td
-(1501 #define SEG_KCODE 1  // kernel code) 174.741 Tj
+(1501 #define SEG_KCODE 1  // kernel code) 174.7406 Tj
 0 -47.4668 Td
-(1502 #define SEG_KDATA 2  // kernel data+stack) 200.952 Tj
+(1502 #define SEG_KDATA 2  // kernel data+stack) 200.9517 Tj
 0 -56.9602 Td
-(1503 #define SEG_UCODE 3) 104.844 Tj
+(1503 #define SEG_UCODE 3) 104.8443 Tj
 0 -66.4535 Td
-(1504 #define SEG_UDATA 4) 104.844 Tj
+(1504 #define SEG_UDATA 4) 104.8443 Tj
 0 -75.9469 Td
-(1505 #define SEG_TSS   5  // this process's task state) 235.9 Tj
+(1505 #define SEG_TSS   5  // this process's task state) 235.8998 Tj
 0 -85.4403 Td
-(1506 #define NSEGS     6) 104.844 Tj
+(1506 #define NSEGS     6) 104.8443 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
+(1508 // Saved registers for kernel context switches.) 227.1628 Tj
+0 -113.9203 Td
+(1509 // Don't need to save all the %fs etc. segment registers,) 270.8479 Tj
+0 -123.4137 Td
+(1510 // because they are constant across kernel contexts.) 249.0053 Tj
+0 -132.9071 Td
+(1511 // Save all the regular registers so we don't need to care) 275.2164 Tj
+0 -142.4004 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
+.) 279.5849 Tj
+0 -151.8938 Td
+(1513 // \(Not saving %eax just simplifies the switching code.\)) 266.4794 Tj
+0 -161.3871 Td
+(1514 // The layout of context must match code in swtch.S.) 249.0053 Tj
+0 -170.8805 Td
 (1515 struct context {) 91.7388 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (1516   int eip;) 65.5277 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (1517   int esp;) 65.5277 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (1518   int ebx;) 65.5277 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (1519   int ecx;) 65.5277 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (1520   int edx;) 65.5277 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (1521   int esi;) 65.5277 Tj
 0 -237.334 Td
 (1522   int edi;) 65.5277 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (1523   int ebp;) 65.5277 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (1524 };) 30.5796 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (1525 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (1526 enum proc_state { UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNN\
-ING, ZOMBIE };) 336.376 Tj
-0 -284.801 Td
+ING, ZOMBIE };) 336.3756 Tj
+0 -284.8008 Td
 (1527 ) 21.8426 Tj
-0 -294.294 Td
-(1528 // Per-process state) 109.213 Tj
-0 -303.788 Td
+0 -294.2942 Td
+(1528 // Per-process state) 109.2129 Tj
+0 -303.7875 Td
 (1529 struct proc {) 78.6333 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (1530   char *mem;                // Start of process memory \(k\
-ernel address\)) 332.007 Tj
-0 -322.774 Td
+ernel address\)) 332.0071 Tj
+0 -322.7743 Td
 (1531   uint sz;                  // Size of process memory \(by\
 tes\)) 288.322 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (1532   char *kstack;             // Bottom of kernel stack for \
-this process) 327.639 Tj
+this process) 327.6386 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
+(1533   enum proc_state state;    // Process state) 214.0572 Tj
+0 -351.2543 Td
+(1534   int pid;                  // Process ID) 200.9517 Tj
+0 -360.7477 Td
+(1535   struct proc *parent;      // Parent process) 218.4257 Tj
+0 -370.2411 Td
 (1536   void *chan;               // If non-zero, sleeping on ch\
-an) 283.953 Tj
-0 -379.734 Td
+an) 283.9534 Tj
+0 -379.7344 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
+ed) 283.9534 Tj
+0 -389.2278 Td
+(1538   struct file *ofile[NOFILE];  // Open files) 214.0572 Tj
+0 -398.7211 Td
+(1539   struct inode *cwd;        // Current directory) 231.5313 Tj
+0 -408.2145 Td
+(1540   struct context context;   // Switch here to run process) 270.8479 Tj
+0 -417.7079 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
+0 -427.2012 Td
+(1542   char name[16];            // Process name \(debugging\)) 262.1109 Tj
+0 -436.6946 Td
 (1543 };) 30.5796 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (1544 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (1545 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (1546 ) 21.8426 Tj
 0 -474.668 Td
 (1547 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (1548 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1549 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 15) 34.9481 Tj
 Q
 Q
@@ -7848,118 +7871,117 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/proc.h  Page 2) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:04 2008  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
+first:) 301.4275 Tj
 0 -37.9735 Td
 (1551 //   text) 61.1592 Tj
 0 -47.4668 Td
-(1552 //   original data and bss) 135.424 Tj
+(1552 //   original data and bss) 135.4239 Tj
 0 -56.9602 Td
-(1553 //   fixed-size stack) 113.581 Tj
+(1553 //   fixed-size stack) 113.5814 Tj
 0 -66.4535 Td
-(1554 //   expandable heap) 109.213 Tj
+(1554 //   expandable heap) 109.2129 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
+(1556 // Per-CPU state) 91.7388 Tj
 0 -94.9336 Td
-(1557 // CPU is currently running.  Such preprocessor) 227.163 Tj
+(1557 struct cpu {) 74.2647 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\
+(1558   uchar apicid;               // Local APIC ID) 222.7942 Tj
+0 -113.9203 Td
+(1559   struct proc *curproc;       // Process currently running\
+.) 279.5849 Tj
+0 -123.4137 Td
+(1560   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 -132.9071 Td
+(1561   struct taskstate ts;        // Used by x86 to find stack\
+ for interrupt) 336.3756 Tj
+0 -142.4004 Td
+(1562   struct segdesc gdt[NSEGS];  // x86 global descriptor tab\
+le) 283.9534 Tj
+0 -151.8938 Td
+(1563   volatile uint booted;        // Has the CPU started?) 257.7424 Tj
+0 -161.3871 Td
+(1564   int ncli;                   // Depth of pushcli nesting.) 275.2164 Tj
+0 -170.8805 Td
+(1565   int intena;                 // Were interrupts enabled b\
+efore pushcli?) 336.3756 Tj
+0 -180.3739 Td
+(1566 };) 30.5796 Tj
+0 -189.8672 Td
+(1567 ) 21.8426 Tj
+0 -199.3606 Td
+(1568 extern struct cpu cpus[NCPU];) 148.5295 Tj
+0 -208.8539 Td
+(1569 extern int ncpu;) 91.7388 Tj
+0 -218.3473 Td
+(1570 ) 21.8426 Tj
+0 -227.8407 Td
+(1571 // "cp" is a short alias for curproc\(\).) 192.2146 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
+(1572 // It gets used enough to make this worthwhile.) 227.1628 Tj
+0 -246.8274 Td
+(1573 #define cp curproc\(\)) 109.2129 Tj
+0 -256.3207 Td
+(1574 ) 21.8426 Tj
+0 -265.8141 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
+0 -275.3075 Td
+(1576 ) 21.8426 Tj
+0 -284.8008 Td
+(1577 ) 21.8426 Tj
+0 -294.2942 Td
 (1578 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (1579 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (1580 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (1581 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (1582 ) 21.8426 Tj
 0 -341.761 Td
 (1583 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (1584 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (1585 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (1586 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (1587 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (1588 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (1589 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (1590 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (1591 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (1592 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (1593 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (1594 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (1595 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (1596 ) 21.8426 Tj
 0 -474.668 Td
 (1597 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (1598 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1599 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 15) 34.9481 Tj
 Q
 Q
@@ -7988,8 +8010,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -8004,16 +8025,16 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/proc.c  Page 1) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/proc.c  Page 1) 161.635 Tj
 0 -28.4801 Td
-(1600 #include "types.h") 100.476 Tj
+(1600 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
 (1601 #include "defs.h") 96.1073 Tj
 0 -47.4668 Td
-(1602 #include "param.h") 100.476 Tj
+(1602 #include "param.h") 100.4758 Tj
 0 -56.9602 Td
 (1603 #include "mmu.h") 91.7388 Tj
 0 -66.4535 Td
@@ -8021,94 +8042,94 @@ q
 0 -75.9469 Td
 (1605 #include "proc.h") 96.1073 Tj
 0 -85.4403 Td
-(1606 #include "spinlock.h") 113.581 Tj
+(1606 #include "spinlock.h") 113.5814 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
+0 -113.9203 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 -123.4137 Td
+(1610 struct proc proc[NPROC];) 126.6869 Tj
+0 -132.9071 Td
+(1611 static struct proc *initproc;) 148.5295 Tj
+0 -142.4004 Td
+(1612 ) 21.8426 Tj
+0 -151.8938 Td
+(1613 int nextpid = 1;) 91.7388 Tj
+0 -161.3871 Td
+(1614 extern void forkret\(void\);) 135.4239 Tj
+0 -170.8805 Td
+(1615 extern void forkret1\(struct trapframe*\);) 196.5831 Tj
+0 -180.3739 Td
+(1616 ) 21.8426 Tj
+0 -189.8672 Td
+(1617 void) 39.3166 Tj
+0 -199.3606 Td
+(1618 pinit\(void\)) 69.8962 Tj
+0 -208.8539 Td
+(1619 {) 26.2111 Tj
+0 -218.3473 Td
+(1620   initlock\(&proc_table_lock, "proc_table"\);) 209.6887 Tj
+0 -227.8407 Td
+(1621 }) 26.2111 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
+(1622 ) 21.8426 Tj
+0 -246.8274 Td
+(1623 // Look in the process table for an UNUSED proc.) 231.5313 Tj
+0 -256.3207 Td
+(1624 // If found, change state to EMBRYO and return it.) 240.2683 Tj
+0 -265.8141 Td
+(1625 // Otherwise return 0.) 117.9499 Tj
+0 -275.3075 Td
+(1626 static struct proc*) 104.8443 Tj
+0 -284.8008 Td
+(1627 allocproc\(void\)) 87.3703 Tj
+0 -294.2942 Td
+(1628 {) 26.2111 Tj
+0 -303.7875 Td
+(1629   int i;) 56.7907 Tj
+0 -313.2809 Td
+(1630   struct proc *p;) 96.1073 Tj
+0 -322.7743 Td
+(1631 ) 21.8426 Tj
+0 -332.2676 Td
+(1632   acquire\(&proc_table_lock\);) 144.161 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
+(1633   for\(i = 0; i < NPROC; i++\){) 148.5295 Tj
+0 -351.2543 Td
+(1634     p = &proc[i];) 96.1073 Tj
+0 -360.7477 Td
+(1635     if\(p->state == UNUSED\){) 139.7925 Tj
+0 -370.2411 Td
+(1636       p->state = EMBRYO;) 126.6869 Tj
+0 -379.7344 Td
+(1637       p->pid = nextpid++;) 131.0554 Tj
+0 -389.2278 Td
+(1638       release\(&proc_table_lock\);) 161.635 Tj
+0 -398.7211 Td
+(1639       return p;) 87.3703 Tj
+0 -408.2145 Td
+(1640     }) 43.6851 Tj
+0 -417.7079 Td
+(1641   }) 34.9481 Tj
+0 -427.2012 Td
+(1642   release\(&proc_table_lock\);) 144.161 Tj
+0 -436.6946 Td
+(1643   return 0;) 69.8962 Tj
+0 -446.1879 Td
+(1644 }) 26.2111 Tj
+0 -455.6813 Td
+(1645 ) 21.8426 Tj
+0 -465.1747 Td
 (1646 ) 21.8426 Tj
 0 -474.668 Td
 (1647 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (1648 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1649 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 16) 34.9481 Tj
 Q
 Q
@@ -8123,14 +8144,14 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/proc.c  Page 2) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/proc.c  Page 2) 161.635 Tj
 0 -28.4801 Td
-(1650 // Grow current process's memory by n bytes.) 214.057 Tj
+(1650 // Grow current process's memory by n bytes.) 214.0572 Tj
 0 -37.9735 Td
-(1651 // Return old size on success, -1 on failure.) 218.426 Tj
+(1651 // Return old size on success, -1 on failure.) 218.4257 Tj
 0 -47.4668 Td
 (1652 int) 34.9481 Tj
 0 -56.9602 Td
@@ -8138,102 +8159,102 @@ q
 0 -66.4535 Td
 (1654 {) 26.2111 Tj
 0 -75.9469 Td
-(1655   char *newmem, *oldmem;) 126.687 Tj
+(1655   char *newmem;) 87.3703 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
+0 -113.9203 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
+0 -123.4137 Td
+(1660   memmove\(newmem, cp->mem, cp->sz\);) 174.7406 Tj
+0 -132.9071 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
+0 -142.4004 Td
+(1662   kfree\(cp->mem, cp->sz\);) 131.0554 Tj
+0 -151.8938 Td
+(1663   cp->mem = newmem;) 104.8443 Tj
+0 -161.3871 Td
+(1664   cp->sz += n;) 83.0018 Tj
+0 -170.8805 Td
+(1665   setupsegs\(cp\);) 91.7388 Tj
+0 -180.3739 Td
+(1666   return cp->sz - n;) 109.2129 Tj
+0 -189.8672 Td
 (1667 }) 26.2111 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (1668 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (1669 // Set up CPU's segment descriptors and task state for a g\
-iven process.) 332.007 Tj
-0 -218.347 Td
+iven process.) 332.0071 Tj
+0 -218.3473 Td
 (1670 // If p==0, set up for "idle" state for when scheduler\(\)\
- is running.) 318.902 Tj
-0 -227.841 Td
+ is running.) 318.9016 Tj
+0 -227.8407 Td
 (1671 void) 39.3166 Tj
 0 -237.334 Td
-(1672 setupsegs\(struct proc *p\)) 131.055 Tj
-0 -246.827 Td
+(1672 setupsegs\(struct proc *p\)) 131.0554 Tj
+0 -246.8274 Td
 (1673 {) 26.2111 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (1674   struct cpu *c;) 91.7388 Tj
-0 -265.814 Td
+0 -265.8141 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 -275.3075 Td
+(1676   pushcli\(\);) 74.2647 Tj
+0 -284.8008 Td
+(1677   c = &cpus[cpu\(\)];) 104.8443 Tj
+0 -294.2942 Td
+(1678   c->ts.ss0 = SEG_KDATA << 3;) 148.5295 Tj
+0 -303.7875 Td
+(1679   if\(p\)) 52.4222 Tj
+0 -313.2809 Td
+(1680     c->ts.esp0 = \(uint\)\(p->kstack + KSTACKSIZE\);) 231.5313 Tj
+0 -322.7743 Td
+(1681   else) 48.0537 Tj
+0 -332.2676 Td
+(1682     c->ts.esp0 = 0xffffffff;) 144.161 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\
+(1683 ) 21.8426 Tj
+0 -351.2543 Td
+(1684   c->gdt[0] = SEG_NULL;) 122.3184 Tj
+0 -360.7477 Td
+(1685   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 -370.2411 Td
+(1686   c->gdt[SEG_KDATA] = SEG\(STA_W, 0, 0xffffffff, 0\);) 244.6368 Tj
+0 -379.7344 Td
+(1687   c->gdt[SEG_TSS] = SEG16\(STS_T32A, \(uint\)&c->ts, sizeo\
+f\(c->ts\)-1, 0\);) 327.6386 Tj
+0 -389.2278 Td
+(1688   c->gdt[SEG_TSS].s = 0;) 126.6869 Tj
+0 -398.7211 Td
+(1689   if\(p\){) 56.7907 Tj
+0 -408.2145 Td
+(1690     c->gdt[SEG_UCODE] = SEG\(STA_X|STA_R, \(uint\)p->mem, \
+p->sz-1, DPL_USER\);) 345.1126 Tj
+0 -417.7079 Td
+(1691     c->gdt[SEG_UDATA] = SEG\(STA_W, \(uint\)p->mem, p->sz-\
+1, DPL_USER\);) 318.9016 Tj
+0 -427.2012 Td
+(1692   } else {) 65.5277 Tj
+0 -436.6946 Td
+(1693     c->gdt[SEG_UCODE] = SEG_NULL;) 166.0035 Tj
+0 -446.1879 Td
+(1694     c->gdt[SEG_UDATA] = SEG_NULL;) 166.0035 Tj
+0 -455.6813 Td
+(1695   }) 34.9481 Tj
+0 -465.1747 Td
+(1696 ) 21.8426 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
+(1697 ) 21.8426 Tj
+0 -484.1614 Td
+(1698 ) 21.8426 Tj
+0 -493.6547 Td
 (1699 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 16) 34.9481 Tj
 Q
 Q
@@ -8262,8 +8283,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -8278,114 +8298,113 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/proc.c  Page 3) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+(1700   lgdt\(c->gdt, sizeof\(c->gdt\)\);) 157.2665 Tj
 0 -37.9735 Td
-(1701 // Sets up stack to return as if from system call.) 240.268 Tj
+(1701   ltr\(SEG_TSS << 3\);) 109.2129 Tj
 0 -47.4668 Td
-(1702 // Caller must set state of returned proc to RUNNABLE.) 257.742 Tj
+(1702   popcli\(\);) 69.8962 Tj
 0 -56.9602 Td
-(1703 struct proc*) 74.2647 Tj
+(1703 }) 26.2111 Tj
 0 -66.4535 Td
-(1704 copyproc\(struct proc *p\)) 126.687 Tj
+(1704 ) 21.8426 Tj
 0 -75.9469 Td
-(1705 {) 26.2111 Tj
+(1705 // Create a new process copying p as the parent.) 231.5313 Tj
 0 -85.4403 Td
-(1706   int i;) 56.7907 Tj
+(1706 // Sets up stack to return as if from system call.) 240.2683 Tj
 0 -94.9336 Td
-(1707   struct proc *np;) 100.476 Tj
+(1707 // Caller must set state of returned proc to RUNNABLE.) 257.7424 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
+(1708 struct proc*) 74.2647 Tj
+0 -113.9203 Td
+(1709 copyproc\(struct proc *p\)) 126.6869 Tj
+0 -123.4137 Td
+(1710 {) 26.2111 Tj
+0 -132.9071 Td
+(1711   int i;) 56.7907 Tj
+0 -142.4004 Td
+(1712   struct proc *np;) 100.4758 Tj
+0 -151.8938 Td
+(1713 ) 21.8426 Tj
+0 -161.3871 Td
+(1714   // Allocate process.) 117.9499 Tj
+0 -170.8805 Td
+(1715   if\(\(np = allocproc\(\)\) == 0\)) 148.5295 Tj
+0 -180.3739 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 -189.8672 Td
+(1717 ) 21.8426 Tj
+0 -199.3606 Td
+(1718   // Allocate kernel stack.) 139.7925 Tj
+0 -208.8539 Td
+(1719   if\(\(np->kstack = kalloc\(KSTACKSIZE\)\) == 0\){) 218.4257 Tj
+0 -218.3473 Td
+(1720     np->state = UNUSED;) 122.3184 Tj
+0 -227.8407 Td
+(1721     return 0;) 78.6333 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
+(1722   }) 34.9481 Tj
+0 -246.8274 Td
+(1723   np->tf = \(struct trapframe*\)\(np->kstack + KSTACKSIZE\)\
+ - 1;) 283.9534 Tj
+0 -256.3207 Td
+(1724 ) 21.8426 Tj
+0 -265.8141 Td
+(1725   if\(p\){  // Copy process state from p.) 192.2146 Tj
+0 -275.3075 Td
+(1726     np->parent = p;) 104.8443 Tj
+0 -284.8008 Td
+(1727     memmove\(np->tf, p->tf, sizeof\(*np->tf\)\);) 214.0572 Tj
+0 -294.2942 Td
+(1728 ) 21.8426 Tj
+0 -303.7875 Td
+(1729     np->sz = p->sz;) 104.8443 Tj
+0 -313.2809 Td
+(1730     if\(\(np->mem = kalloc\(np->sz\)\) == 0\){) 196.5831 Tj
+0 -322.7743 Td
+(1731       kfree\(np->kstack, KSTACKSIZE\);) 179.1091 Tj
+0 -332.2676 Td
+(1732       np->kstack = 0;) 113.5814 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
+(1733       np->state = UNUSED;) 131.0554 Tj
+0 -351.2543 Td
+(1734       np->parent = 0;) 113.5814 Tj
+0 -360.7477 Td
+(1735       return 0;) 87.3703 Tj
+0 -370.2411 Td
+(1736     }) 43.6851 Tj
+0 -379.7344 Td
+(1737     memmove\(np->mem, p->mem, np->sz\);) 183.4776 Tj
+0 -389.2278 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 -398.7211 Td
+(1739     for\(i = 0; i < NOFILE; i++\)) 157.2665 Tj
+0 -408.2145 Td
+(1740       if\(p->ofile[i]\)) 113.5814 Tj
+0 -417.7079 Td
+(1741         np->ofile[i] = filedup\(p->ofile[i]\);) 214.0572 Tj
+0 -427.2012 Td
+(1742     np->cwd = idup\(p->cwd\);) 139.7925 Tj
+0 -436.6946 Td
+(1743   }) 34.9481 Tj
+0 -446.1879 Td
+(1744 ) 21.8426 Tj
+0 -455.6813 Td
+(1745   // Set up new context to start executing at forkret \(se\
+e below\).) 310.1645 Tj
+0 -465.1747 Td
+(1746   memset\(&np->context, 0, sizeof\(np->context\)\);) 227.1628 Tj
 0 -474.668 Td
-(1747 }) 26.2111 Tj
-0 -484.161 Td
-(1748 ) 21.8426 Tj
-0 -493.655 Td
+(1747   np->context.eip = \(uint\)forkret;) 170.3721 Tj
+0 -484.1614 Td
+(1748   np->context.esp = \(uint\)np->tf;) 166.0035 Tj
+0 -493.6547 Td
 (1749 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 17) 34.9481 Tj
 Q
 Q
@@ -8400,114 +8419,115 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/proc.c  Page 4) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/proc.c  Page 4) 161.635 Tj
 0 -28.4801 Td
-(1750 // Set up first user process.) 148.529 Tj
+(1750   // Clear %eax so that fork system call returns 0 in chil\
+d.) 283.9534 Tj
 0 -37.9735 Td
-(1751 void) 39.3166 Tj
+(1751   np->tf->eax = 0;) 100.4758 Tj
 0 -47.4668 Td
-(1752 userinit\(void\)) 83.0018 Tj
+(1752   return np;) 74.2647 Tj
 0 -56.9602 Td
-(1753 {) 26.2111 Tj
+(1753 }) 26.2111 Tj
 0 -66.4535 Td
-(1754   struct proc *p;) 96.1073 Tj
+(1754 ) 21.8426 Tj
 0 -75.9469 Td
-(1755   extern uchar _binary_initcode_start[], _binary_initcode_\
-size[];) 305.796 Tj
+(1755 // Set up first user process.) 148.5295 Tj
 0 -85.4403 Td
-(1756 ) 21.8426 Tj
+(1756 void) 39.3166 Tj
 0 -94.9336 Td
-(1757   p = copyproc\(0\);) 100.476 Tj
+(1757 userinit\(void\)) 83.0018 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
+(1758 {) 26.2111 Tj
+0 -113.9203 Td
+(1759   struct proc *p;) 96.1073 Tj
+0 -123.4137 Td
+(1760   extern uchar _binary_initcode_start[], _binary_initcode_\
+size[];) 305.796 Tj
+0 -132.9071 Td
+(1761 ) 21.8426 Tj
+0 -142.4004 Td
+(1762   p = copyproc\(0\);) 100.4758 Tj
+0 -151.8938 Td
+(1763   p->sz = PAGE;) 87.3703 Tj
+0 -161.3871 Td
+(1764   p->mem = kalloc\(p->sz\);) 131.0554 Tj
+0 -170.8805 Td
+(1765   p->cwd = namei\("/"\);) 117.9499 Tj
+0 -180.3739 Td
+(1766   memset\(p->tf, 0, sizeof\(*p->tf\)\);) 174.7406 Tj
+0 -189.8672 Td
+(1767   p->tf->cs = \(SEG_UCODE << 3\) | DPL_USER;) 205.3202 Tj
+0 -199.3606 Td
+(1768   p->tf->ds = \(SEG_UDATA << 3\) | DPL_USER;) 205.3202 Tj
+0 -208.8539 Td
+(1769   p->tf->es = p->tf->ds;) 126.6869 Tj
+0 -218.3473 Td
+(1770   p->tf->ss = p->tf->ds;) 126.6869 Tj
+0 -227.8407 Td
+(1771   p->tf->eflags = FL_IF;) 126.6869 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
+(1772   p->tf->esp = p->sz;) 113.5814 Tj
+0 -246.8274 Td
+(1773 ) 21.8426 Tj
+0 -256.3207 Td
+(1774   // Make return address readable; needed for some gcc.) 262.1109 Tj
+0 -265.8141 Td
+(1775   p->tf->esp -= 4;) 100.4758 Tj
+0 -275.3075 Td
+(1776   *\(uint*\)\(p->mem + p->tf->esp\) = 0xefefefef;) 218.4257 Tj
+0 -284.8008 Td
+(1777 ) 21.8426 Tj
+0 -294.2942 Td
+(1778   // On entry to user space, start executing at beginning \
+of initcode.S.) 336.3756 Tj
+0 -303.7875 Td
+(1779   p->tf->eip = 0;) 96.1073 Tj
+0 -313.2809 Td
+(1780   memmove\(p->mem, _binary_initcode_start, \(int\)_binary_\
+initcode_size\);) 327.6386 Tj
+0 -322.7743 Td
+(1781   safestrcpy\(p->name, "initcode", sizeof\(p->name\)\);) 244.6368 Tj
+0 -332.2676 Td
+(1782   p->state = RUNNABLE;) 117.9499 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
+0 -351.2543 Td
+(1784   initproc = p;) 87.3703 Tj
+0 -360.7477 Td
+(1785 }) 26.2111 Tj
+0 -370.2411 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
+0 -379.7344 Td
+(1787 // Return currently running process.) 179.1091 Tj
+0 -389.2278 Td
+(1788 struct proc*) 74.2647 Tj
+0 -398.7211 Td
+(1789 curproc\(void\)) 78.6333 Tj
+0 -408.2145 Td
+(1790 {) 26.2111 Tj
+0 -417.7079 Td
+(1791   struct proc *p;) 96.1073 Tj
+0 -427.2012 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 -436.6946 Td
+(1793   pushcli\(\);) 74.2647 Tj
+0 -446.1879 Td
+(1794   p = cpus[cpu\(\)].curproc;) 135.4239 Tj
+0 -455.6813 Td
+(1795   popcli\(\);) 69.8962 Tj
+0 -465.1747 Td
+(1796   return p;) 69.8962 Tj
 0 -474.668 Td
-(1797 ) 21.8426 Tj
-0 -484.161 Td
+(1797 }) 26.2111 Tj
+0 -484.1614 Td
 (1798 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1799 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 17) 34.9481 Tj
 Q
 Q
@@ -8536,8 +8556,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -8552,113 +8571,113 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/proc.c  Page 5) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/proc.c  Page 5) 161.635 Tj
 0 -28.4801 Td
-(1800 // Per-CPU process scheduler.) 148.529 Tj
+(1800 // Per-CPU process scheduler.) 148.5295 Tj
 0 -37.9735 Td
-(1801 // Each CPU calls scheduler\(\) after setting itself up.) 257.742 Tj
+(1801 // Each CPU calls scheduler\(\) after setting itself up.) 257.7424 Tj
 0 -47.4668 Td
-(1802 // Scheduler never returns.  It loops, doing:) 218.426 Tj
+(1802 // Scheduler never returns.  It loops, doing:) 218.4257 Tj
 0 -56.9602 Td
-(1803 //  - choose a process to run) 148.529 Tj
+(1803 //  - choose a process to run) 148.5295 Tj
 0 -66.4535 Td
-(1804 //  - longjmp to start running that process) 209.689 Tj
+(1804 //  - swtch to start running that process) 200.9517 Tj
 0 -75.9469 Td
-(1805 //  - eventually that process transfers control back) 249.005 Tj
+(1805 //  - eventually that process transfers control) 227.1628 Tj
 0 -85.4403 Td
-(1806 //      via longjmp back to the scheduler.) 205.32 Tj
+(1806 //      via swtch back to the scheduler.) 196.5831 Tj
 0 -94.9336 Td
 (1807 void) 39.3166 Tj
 0 -104.427 Td
 (1808 scheduler\(void\)) 87.3703 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (1809 {) 26.2111 Tj
-0 -123.414 Td
+0 -123.4137 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 -132.9071 Td
+(1811   struct cpu *c;) 91.7388 Tj
+0 -142.4004 Td
+(1812   int i;) 56.7907 Tj
+0 -151.8938 Td
+(1813 ) 21.8426 Tj
+0 -161.3871 Td
+(1814   c = &cpus[cpu\(\)];) 104.8443 Tj
+0 -170.8805 Td
+(1815   for\(;;\){) 65.5277 Tj
+0 -180.3739 Td
+(1816     // Enable interrupts on this processor.) 209.6887 Tj
+0 -189.8672 Td
+(1817     sti\(\);) 65.5277 Tj
+0 -199.3606 Td
+(1818 ) 21.8426 Tj
+0 -208.8539 Td
+(1819     // Loop over process table looking for process to run.) 275.2164 Tj
+0 -218.3473 Td
+(1820     acquire\(&proc_table_lock\);) 152.898 Tj
+0 -227.8407 Td
+(1821     for\(i = 0; i < NPROC; i++\){) 157.2665 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
+(1822       p = &proc[i];) 104.8443 Tj
+0 -246.8274 Td
+(1823       if\(p->state != RUNNABLE\)) 152.898 Tj
+0 -256.3207 Td
+(1824         continue;) 96.1073 Tj
+0 -265.8141 Td
+(1825 ) 21.8426 Tj
+0 -275.3075 Td
+(1826       // Switch to chosen process.  It is the process's jo\
+b) 279.5849 Tj
+0 -284.8008 Td
+(1827       // to release proc_table_lock and then reacquire it) 270.8479 Tj
+0 -294.2942 Td
+(1828       // before jumping back to us.) 174.7406 Tj
+0 -303.7875 Td
+(1829       c->curproc = p;) 113.5814 Tj
+0 -313.2809 Td
+(1830       setupsegs\(p\);) 104.8443 Tj
+0 -322.7743 Td
+(1831       p->state = RUNNING;) 131.0554 Tj
+0 -332.2676 Td
+(1832       swtch\(&c->context, &p->context\);) 187.8461 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
+(1833 ) 21.8426 Tj
+0 -351.2543 Td
+(1834       // Process is done running for now.) 200.9517 Tj
+0 -360.7477 Td
+(1835       // It should have changed its p->state before coming\
+ back.) 301.4275 Tj
+0 -370.2411 Td
+(1836       c->curproc = 0;) 113.5814 Tj
+0 -379.7344 Td
+(1837       setupsegs\(0\);) 104.8443 Tj
+0 -389.2278 Td
+(1838     }) 43.6851 Tj
+0 -398.7211 Td
+(1839     release\(&proc_table_lock\);) 152.898 Tj
+0 -408.2145 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
+0 -417.7079 Td
+(1841   }) 34.9481 Tj
+0 -427.2012 Td
+(1842 }) 26.2111 Tj
+0 -436.6946 Td
 (1843 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (1844 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (1845 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (1846 ) 21.8426 Tj
 0 -474.668 Td
 (1847 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (1848 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1849 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 18) 34.9481 Tj
 Q
 Q
@@ -8673,14 +8692,14 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/proc.c  Page 6) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/proc.c  Page 6) 161.635 Tj
 0 -28.4801 Td
-(1850 // Enter scheduler.  Must already hold proc_table_lock) 257.742 Tj
+(1850 // Enter scheduler.  Must already hold proc_table_lock) 257.7424 Tj
 0 -37.9735 Td
-(1851 // and have changed curproc[cpu\(\)]->state.) 205.32 Tj
+(1851 // and have changed curproc[cpu\(\)]->state.) 205.3202 Tj
 0 -47.4668 Td
 (1852 void) 39.3166 Tj
 0 -56.9602 Td
@@ -8688,96 +8707,96 @@ q
 0 -66.4535 Td
 (1854 {) 26.2111 Tj
 0 -75.9469 Td
-(1855   if\(cp->state == RUNNING\)) 135.424 Tj
+(1855   if\(read_eflags\(\)&FL_IF\)) 131.0554 Tj
 0 -85.4403 Td
-(1856     panic\("sched running"\);) 139.792 Tj
+(1856     panic\("sched interruptible"\);) 166.0035 Tj
 0 -94.9336 Td
-(1857   if\(!holding\(&proc_table_lock\)\)) 161.635 Tj
+(1857   if\(cp->state == RUNNING\)) 135.4239 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
+(1858     panic\("sched running"\);) 139.7925 Tj
+0 -113.9203 Td
+(1859   if\(!holding\(&proc_table_lock\)\)) 161.635 Tj
+0 -123.4137 Td
+(1860     panic\("sched proc_table_lock"\);) 174.7406 Tj
+0 -132.9071 Td
+(1861   if\(cpus[cpu\(\)].ncli != 1\)) 139.7925 Tj
+0 -142.4004 Td
+(1862     panic\("sched locks"\);) 131.0554 Tj
+0 -151.8938 Td
+(1863 ) 21.8426 Tj
+0 -161.3871 Td
+(1864   swtch\(&cp->context, &cpus[cpu\(\)].context\);) 214.0572 Tj
+0 -170.8805 Td
+(1865 }) 26.2111 Tj
+0 -180.3739 Td
+(1866 ) 21.8426 Tj
+0 -189.8672 Td
+(1867 // Give up the CPU for one scheduling round.) 214.0572 Tj
+0 -199.3606 Td
+(1868 void) 39.3166 Tj
+0 -208.8539 Td
+(1869 yield\(void\)) 69.8962 Tj
+0 -218.3473 Td
+(1870 {) 26.2111 Tj
+0 -227.8407 Td
+(1871   acquire\(&proc_table_lock\);) 144.161 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
+(1872   cp->state = RUNNABLE;) 122.3184 Tj
+0 -246.8274 Td
+(1873   sched\(\);) 65.5277 Tj
+0 -256.3207 Td
+(1874   release\(&proc_table_lock\);) 144.161 Tj
+0 -265.8141 Td
+(1875 }) 26.2111 Tj
+0 -275.3075 Td
+(1876 ) 21.8426 Tj
+0 -284.8008 Td
+(1877 // A fork child's very first scheduling by scheduler\(\)) 257.7424 Tj
+0 -294.2942 Td
+(1878 // will swtch here.  "Return" to user space.) 214.0572 Tj
+0 -303.7875 Td
+(1879 void) 39.3166 Tj
+0 -313.2809 Td
+(1880 forkret\(void\)) 78.6333 Tj
+0 -322.7743 Td
+(1881 {) 26.2111 Tj
+0 -332.2676 Td
+(1882   // Still holding proc_table_lock from scheduler.) 240.2683 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
+(1883   release\(&proc_table_lock\);) 144.161 Tj
+0 -351.2543 Td
+(1884 ) 21.8426 Tj
+0 -360.7477 Td
+(1885   // Jump into assembly, never to return.) 200.9517 Tj
+0 -370.2411 Td
+(1886   forkret1\(cp->tf\);) 104.8443 Tj
+0 -379.7344 Td
+(1887 }) 26.2111 Tj
+0 -389.2278 Td
 (1888 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (1889 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (1890 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (1891 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (1892 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (1893 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (1894 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (1895 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (1896 ) 21.8426 Tj
 0 -474.668 Td
 (1897 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (1898 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1899 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 18) 34.9481 Tj
 Q
 Q
@@ -8806,8 +8825,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -8822,111 +8840,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/proc.c  Page 7) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/proc.c  Page 7) 161.635 Tj
 0 -28.4801 Td
-(1900 // Atomically release lock and sleep on chan.) 218.426 Tj
+(1900 // Atomically release lock and sleep on chan.) 218.4257 Tj
 0 -37.9735 Td
-(1901 // Reacquires lock when reawakened.) 174.741 Tj
+(1901 // Reacquires lock when reawakened.) 174.7406 Tj
 0 -47.4668 Td
 (1902 void) 39.3166 Tj
 0 -56.9602 Td
-(1903 sleep\(void *chan, struct spinlock *lk\)) 187.846 Tj
+(1903 sleep\(void *chan, struct spinlock *lk\)) 187.8461 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
+(1906     panic\("sleep"\);) 104.8443 Tj
 0 -94.9336 Td
 (1907 ) 21.8426 Tj
 0 -104.427 Td
 (1908   if\(lk == 0\)) 78.6333 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (1909     panic\("sleep without lk"\);) 152.898 Tj
-0 -123.414 Td
+0 -123.4137 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
+0 -132.9071 Td
+(1911   // Must acquire proc_table_lock in order to) 218.4257 Tj
+0 -142.4004 Td
+(1912   // change p->state and then call sched.) 200.9517 Tj
+0 -151.8938 Td
+(1913   // Once we hold proc_table_lock, we can be) 214.0572 Tj
+0 -161.3871 Td
+(1914   // guaranteed that we won't miss any wakeup) 218.4257 Tj
+0 -170.8805 Td
+(1915   // \(wakeup runs with proc_table_lock locked\),) 227.1628 Tj
+0 -180.3739 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
+0 -189.8672 Td
+(1917   if\(lk != &proc_table_lock\){) 148.5295 Tj
+0 -199.3606 Td
 (1918     acquire\(&proc_table_lock\);) 152.898 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (1919     release\(lk\);) 91.7388 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (1920   }) 34.9481 Tj
-0 -227.841 Td
+0 -227.8407 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
+0 -246.8274 Td
+(1923   cp->chan = chan;) 100.4758 Tj
+0 -256.3207 Td
+(1924   cp->state = SLEEPING;) 122.3184 Tj
+0 -265.8141 Td
 (1925   sched\(\);) 65.5277 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (1926 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (1927   // Tidy up.) 78.6333 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (1928   cp->chan = 0;) 87.3703 Tj
-0 -303.788 Td
+0 -303.7875 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
+0 -313.2809 Td
+(1930   // Reacquire original lock.) 148.5295 Tj
+0 -322.7743 Td
+(1931   if\(lk != &proc_table_lock\){) 148.5295 Tj
+0 -332.2676 Td
 (1932     release\(&proc_table_lock\);) 152.898 Tj
 0 -341.761 Td
 (1933     acquire\(lk\);) 91.7388 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (1934   }) 34.9481 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (1935 }) 26.2111 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (1936 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (1937 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (1938 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (1939 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (1940 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (1941 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (1942 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (1943 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (1944 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (1945 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (1946 ) 21.8426 Tj
 0 -474.668 Td
 (1947 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (1948 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1949 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 19) 34.9481 Tj
 Q
 Q
@@ -8941,18 +8959,18 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/proc.c  Page 8) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/proc.c  Page 8) 161.635 Tj
 0 -28.4801 Td
-(1950 // Wake up all processes sleeping on chan.) 205.32 Tj
+(1950 // Wake up all processes sleeping on chan.) 205.3202 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
+(1953 wakeup1\(void *chan\)) 104.8443 Tj
 0 -66.4535 Td
 (1954 {) 26.2111 Tj
 0 -75.9469 Td
@@ -8960,92 +8978,92 @@ q
 0 -85.4403 Td
 (1956 ) 21.8426 Tj
 0 -94.9336 Td
-(1957   for\(p = proc; p < &proc[NPROC]; p++\)) 187.846 Tj
+(1957   for\(p = proc; p < &proc[NPROC]; p++\)) 187.8461 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
+(1958     if\(p->state == SLEEPING && p->chan == chan\)) 227.1628 Tj
+0 -113.9203 Td
+(1959       p->state = RUNNABLE;) 135.4239 Tj
+0 -123.4137 Td
 (1960 }) 26.2111 Tj
-0 -132.907 Td
+0 -132.9071 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
+0 -142.4004 Td
+(1962 // Wake up all processes sleeping on chan.) 205.3202 Tj
+0 -151.8938 Td
+(1963 // Proc_table_lock is acquired and released.) 214.0572 Tj
+0 -161.3871 Td
 (1964 void) 39.3166 Tj
-0 -170.88 Td
-(1965 wakeup\(void *chan\)) 100.476 Tj
-0 -180.374 Td
+0 -170.8805 Td
+(1965 wakeup\(void *chan\)) 100.4758 Tj
+0 -180.3739 Td
 (1966 {) 26.2111 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (1967   acquire\(&proc_table_lock\);) 144.161 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (1968   wakeup1\(chan\);) 91.7388 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (1969   release\(&proc_table_lock\);) 144.161 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (1970 }) 26.2111 Tj
-0 -227.841 Td
+0 -227.8407 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
+(1972 // Kill the process with the given pid.) 192.2146 Tj
+0 -246.8274 Td
+(1973 // Process won't actually exit until it returns) 227.1628 Tj
+0 -256.3207 Td
+(1974 // to user space \(see trap in trap.c\).) 187.8461 Tj
+0 -265.8141 Td
 (1975 int) 34.9481 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (1976 kill\(int pid\)) 78.6333 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (1977 {) 26.2111 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (1978   struct proc *p;) 96.1073 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (1979 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 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 -322.7743 Td
+(1981   for\(p = proc; p < &proc[NPROC]; p++\){) 192.2146 Tj
+0 -332.2676 Td
+(1982     if\(p->pid == pid\){) 117.9499 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
+(1983       p->killed = 1;) 109.2129 Tj
+0 -351.2543 Td
+(1984       // Wake process from sleep if necessary.) 222.7942 Tj
+0 -360.7477 Td
 (1985       if\(p->state == SLEEPING\)) 152.898 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (1986         p->state = RUNNABLE;) 144.161 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (1987       release\(&proc_table_lock\);) 161.635 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (1988       return 0;) 87.3703 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (1989     }) 43.6851 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (1990   }) 34.9481 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (1991   release\(&proc_table_lock\);) 144.161 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (1992   return -1;) 74.2647 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (1993 }) 26.2111 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (1994 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (1995 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (1996 ) 21.8426 Tj
 0 -474.668 Td
 (1997 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (1998 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (1999 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 19) 34.9481 Tj
 Q
 Q
@@ -9074,8 +9092,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -9090,17 +9107,17 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/proc.c  Page 9) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/proc.c  Page 9) 161.635 Tj
 0 -28.4801 Td
-(2000 // Exit the current process.  Does not return.) 222.794 Tj
+(2000 // Exit the current process.  Does not return.) 222.7942 Tj
 0 -37.9735 Td
-(2001 // Exited processes remain in the zombie state) 222.794 Tj
+(2001 // Exited processes remain in the zombie state) 222.7942 Tj
 0 -47.4668 Td
 (2002 // until their parent calls wait\(\) to find out they exit\
-ed.) 279.585 Tj
+ed.) 279.5849 Tj
 0 -56.9602 Td
 (2003 void) 39.3166 Tj
 0 -66.4535 Td
@@ -9113,89 +9130,89 @@ ed.) 279.585 Tj
 (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
+0 -113.9203 Td
+(2009   if\(cp == initproc\)) 109.2129 Tj
+0 -123.4137 Td
+(2010     panic\("init exiting"\);) 135.4239 Tj
+0 -132.9071 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
+0 -142.4004 Td
+(2012   // Close all open files.) 135.4239 Tj
+0 -151.8938 Td
+(2013   for\(fd = 0; fd < NOFILE; fd++\){) 166.0035 Tj
+0 -161.3871 Td
+(2014     if\(cp->ofile[fd]\){) 117.9499 Tj
+0 -170.8805 Td
+(2015       fileclose\(cp->ofile[fd]\);) 157.2665 Tj
+0 -180.3739 Td
+(2016       cp->ofile[fd] = 0;) 126.6869 Tj
+0 -189.8672 Td
 (2017     }) 43.6851 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (2018   }) 34.9481 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (2019 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (2020   iput\(cp->cwd\);) 91.7388 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (2021   cp->cwd = 0;) 83.0018 Tj
 0 -237.334 Td
 (2022 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (2023   acquire\(&proc_table_lock\);) 144.161 Tj
-0 -256.321 Td
+0 -256.3207 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
+0 -265.8141 Td
+(2025   // Parent might be sleeping in wait\(\).) 196.5831 Tj
+0 -275.3075 Td
+(2026   wakeup1\(cp->parent\);) 117.9499 Tj
+0 -284.8008 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
+0 -294.2942 Td
+(2028   // Pass abandoned children to init.) 183.4776 Tj
+0 -303.7875 Td
+(2029   for\(p = proc; p < &proc[NPROC]; p++\){) 192.2146 Tj
+0 -313.2809 Td
+(2030     if\(p->parent == cp\){) 126.6869 Tj
+0 -322.7743 Td
+(2031       p->parent = initproc;) 139.7925 Tj
+0 -332.2676 Td
 (2032       if\(p->state == ZOMBIE\)) 144.161 Tj
 0 -341.761 Td
-(2033         wakeup1\(initproc\);) 135.424 Tj
-0 -351.254 Td
+(2033         wakeup1\(initproc\);) 135.4239 Tj
+0 -351.2543 Td
 (2034     }) 43.6851 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (2035   }) 34.9481 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (2036 ) 21.8426 Tj
-0 -379.734 Td
-(2037   // Jump into the scheduler, never to return.) 222.794 Tj
-0 -389.228 Td
+0 -379.7344 Td
+(2037   // Jump into the scheduler, never to return.) 222.7942 Tj
+0 -389.2278 Td
 (2038   cp->killed = 0;) 96.1073 Tj
-0 -398.721 Td
-(2039   cp->state = ZOMBIE;) 113.581 Tj
-0 -408.214 Td
+0 -398.7211 Td
+(2039   cp->state = ZOMBIE;) 113.5814 Tj
+0 -408.2145 Td
 (2040   sched\(\);) 65.5277 Tj
-0 -417.708 Td
-(2041   panic\("zombie exit"\);) 122.318 Tj
-0 -427.201 Td
+0 -417.7079 Td
+(2041   panic\("zombie exit"\);) 122.3184 Tj
+0 -427.2012 Td
 (2042 }) 26.2111 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (2043 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (2044 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2045 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (2046 ) 21.8426 Tj
 0 -474.668 Td
 (2047 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2048 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2049 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 20) 34.9481 Tj
 Q
 Q
@@ -9210,14 +9227,14 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/proc.c  Page 10) 166.004 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/proc.c  Page 10) 166.0035 Tj
 0 -28.4801 Td
-(2050 // Wait for a child process to exit and return its pid.) 262.111 Tj
+(2050 // Wait for a child process to exit and return its pid.) 262.1109 Tj
 0 -37.9735 Td
-(2051 // Return -1 if this process has no children.) 218.426 Tj
+(2051 // Return -1 if this process has no children.) 218.4257 Tj
 0 -47.4668 Td
 (2052 int) 34.9481 Tj
 0 -56.9602 Td
@@ -9227,95 +9244,95 @@ q
 0 -75.9469 Td
 (2055   struct proc *p;) 96.1073 Tj
 0 -85.4403 Td
-(2056   int i, havekids, pid;) 122.318 Tj
+(2056   int i, havekids, pid;) 122.3184 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
+0 -113.9203 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
+0 -123.4137 Td
+(2060     // Scan through table looking for zombie children.) 257.7424 Tj
+0 -132.9071 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
+0 -142.4004 Td
+(2062     for\(i = 0; i < NPROC; i++\){) 157.2665 Tj
+0 -151.8938 Td
+(2063       p = &proc[i];) 104.8443 Tj
+0 -161.3871 Td
 (2064       if\(p->state == UNUSED\)) 144.161 Tj
-0 -170.88 Td
+0 -170.8805 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 -180.3739 Td
+(2066       if\(p->parent == cp\){) 135.4239 Tj
+0 -189.8672 Td
+(2067         if\(p->state == ZOMBIE\){) 157.2665 Tj
+0 -199.3606 Td
+(2068           // Found one.) 122.3184 Tj
+0 -208.8539 Td
+(2069           kfree\(p->mem, p->sz\);) 157.2665 Tj
+0 -218.3473 Td
+(2070           kfree\(p->kstack, KSTACKSIZE\);) 192.2146 Tj
+0 -227.8407 Td
+(2071           pid = p->pid;) 122.3184 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
+0 -246.8274 Td
+(2073           p->pid = 0;) 113.5814 Tj
+0 -256.3207 Td
+(2074           p->parent = 0;) 126.6869 Tj
+0 -265.8141 Td
+(2075           p->name[0] = 0;) 131.0554 Tj
+0 -275.3075 Td
+(2076           release\(&proc_table_lock\);) 179.1091 Tj
+0 -284.8008 Td
+(2077           return pid;) 113.5814 Tj
+0 -294.2942 Td
 (2078         }) 61.1592 Tj
-0 -303.788 Td
-(2079         havekids = 1;) 113.581 Tj
-0 -313.281 Td
+0 -303.7875 Td
+(2079         havekids = 1;) 113.5814 Tj
+0 -313.2809 Td
 (2080       }) 52.4222 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (2081     }) 43.6851 Tj
-0 -332.268 Td
+0 -332.2676 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
+(2083     // No point waiting if we don't have any children.) 257.7424 Tj
+0 -351.2543 Td
 (2084     if\(!havekids || cp->killed\){) 161.635 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (2085       release\(&proc_table_lock\);) 161.635 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (2086       return -1;) 91.7388 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (2087     }) 43.6851 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (2088 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2089     // Wait for children to exit.  \(See wakeup1 call in p\
 roc_exit.\)) 314.533 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2090     sleep\(cp, &proc_table_lock\);) 161.635 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (2091   }) 34.9481 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (2092 }) 26.2111 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (2093 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (2094 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2095 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (2096 ) 21.8426 Tj
 0 -474.668 Td
 (2097 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2098 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2099 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 20) 34.9481 Tj
 Q
 Q
@@ -9344,8 +9361,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -9360,16 +9376,16 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/proc.c  Page 11) 166.004 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/proc.c  Page 11) 166.0035 Tj
 0 -28.4801 Td
-(2100 // Print a process listing to console.  For debugging.) 257.742 Tj
+(2100 // Print a process listing to console.  For debugging.) 257.7424 Tj
 0 -37.9735 Td
-(2101 // Runs when user types ^P on console.) 187.846 Tj
+(2101 // Runs when user types ^P on console.) 187.8461 Tj
 0 -47.4668 Td
-(2102 // No lock to avoid wedging a stuck machine further.) 249.005 Tj
+(2102 // No lock to avoid wedging a stuck machine further.) 249.0053 Tj
 0 -56.9602 Td
 (2103 void) 39.3166 Tj
 0 -66.4535 Td
@@ -9377,95 +9393,95 @@ q
 0 -75.9469 Td
 (2105 {) 26.2111 Tj
 0 -85.4403 Td
-(2106   static char *states[] = {) 139.792 Tj
+(2106   static char *states[] = {) 139.7925 Tj
 0 -94.9336 Td
-(2107   [UNUSED]    "unused",) 122.318 Tj
+(2107   [UNUSED]    "unused",) 122.3184 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
+(2108   [EMBRYO]    "embryo",) 122.3184 Tj
+0 -113.9203 Td
+(2109   [SLEEPING]  "sleep ",) 122.3184 Tj
+0 -123.4137 Td
+(2110   [RUNNABLE]  "runble",) 122.3184 Tj
+0 -132.9071 Td
+(2111   [RUNNING]   "run   ",) 122.3184 Tj
+0 -142.4004 Td
+(2112   [ZOMBIE]    "zombie") 117.9499 Tj
+0 -151.8938 Td
 (2113   };) 39.3166 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (2114   int i, j;) 69.8962 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (2115   struct proc *p;) 96.1073 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (2116   char *state;) 83.0018 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (2117   uint pc[10];) 83.0018 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (2118 ) 21.8426 Tj
-0 -208.854 Td
-(2119   for\(i = 0; i < NPROC; i++\){) 148.529 Tj
-0 -218.347 Td
+0 -208.8539 Td
+(2119   for\(i = 0; i < NPROC; i++\){) 148.5295 Tj
+0 -218.3473 Td
 (2120     p = &proc[i];) 96.1073 Tj
-0 -227.841 Td
-(2121     if\(p->state == UNUSED\)) 135.424 Tj
+0 -227.8407 Td
+(2121     if\(p->state == UNUSED\)) 135.4239 Tj
 0 -237.334 Td
 (2122       continue;) 87.3703 Tj
-0 -246.827 Td
+0 -246.8274 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
+tes[p->state]\)) 323.2701 Tj
+0 -256.3207 Td
+(2124       state = states[p->state];) 157.2665 Tj
+0 -265.8141 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
+0 -275.3075 Td
+(2126       state = "???";) 109.2129 Tj
+0 -284.8008 Td
+(2127     cprintf\("%d %s %s", p->pid, state, p->name\);) 231.5313 Tj
+0 -294.2942 Td
+(2128     if\(p->state == SLEEPING\){) 148.5295 Tj
+0 -303.7875 Td
+(2129       getcallerpcs\(\(uint*\)p->context.ebp+2, pc\);) 231.5313 Tj
+0 -313.2809 Td
+(2130       for\(j=0; j<10 && pc[j] != 0; j++\)) 192.2146 Tj
+0 -322.7743 Td
 (2131         cprintf\(" %p", pc[j]\);) 152.898 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (2132     }) 43.6851 Tj
 0 -341.761 Td
-(2133     cprintf\("\\n"\);) 100.476 Tj
-0 -351.254 Td
+(2133     cprintf\("\\n"\);) 100.4758 Tj
+0 -351.2543 Td
 (2134   }) 34.9481 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (2135 }) 26.2111 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (2136 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (2137 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (2138 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2139 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2140 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (2141 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (2142 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (2143 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (2144 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2145 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (2146 ) 21.8426 Tj
 0 -474.668 Td
 (2147 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2148 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2149 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 21) 34.9481 Tj
 Q
 Q
@@ -9480,19 +9496,19 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/swtch.S  Page 1) 166.004 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/swtch.S  Page 1) 166.0035 Tj
 0 -28.4801 Td
 (2150 #   void swtch\(struct context *old, struct context *new\)\
-;) 270.848 Tj
+;) 270.8479 Tj
 0 -37.9735 Td
 (2151 #) 26.2111 Tj
 0 -47.4668 Td
-(2152 # Save current register context in old) 187.846 Tj
+(2152 # Save current register context in old) 187.8461 Tj
 0 -56.9602 Td
-(2153 # and then load register context from new.) 205.32 Tj
+(2153 # and then load register context from new.) 205.3202 Tj
 0 -66.4535 Td
 (2154 ) 21.8426 Tj
 0 -75.9469 Td
@@ -9500,93 +9516,93 @@ q
 0 -85.4403 Td
 (2156 swtch:) 48.0537 Tj
 0 -94.9336 Td
-(2157   # Save old registers) 117.95 Tj
+(2157   # Save old registers) 117.9499 Tj
 0 -104.427 Td
-(2158   movl 4\(%esp\), %eax) 109.213 Tj
-0 -113.92 Td
+(2158   movl 4\(%esp\), %eax) 109.2129 Tj
+0 -113.9203 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
+0 -123.4137 Td
+(2160   popl 0\(%eax\)  # %eip) 117.9499 Tj
+0 -132.9071 Td
+(2161   movl %esp, 4\(%eax\)) 109.2129 Tj
+0 -142.4004 Td
+(2162   movl %ebx, 8\(%eax\)) 109.2129 Tj
+0 -151.8938 Td
+(2163   movl %ecx, 12\(%eax\)) 113.5814 Tj
+0 -161.3871 Td
+(2164   movl %edx, 16\(%eax\)) 113.5814 Tj
+0 -170.8805 Td
+(2165   movl %esi, 20\(%eax\)) 113.5814 Tj
+0 -180.3739 Td
+(2166   movl %edi, 24\(%eax\)) 113.5814 Tj
+0 -189.8672 Td
+(2167   movl %ebp, 28\(%eax\)) 113.5814 Tj
+0 -199.3606 Td
 (2168 ) 21.8426 Tj
-0 -208.854 Td
-(2169   # Load new registers) 117.95 Tj
-0 -218.347 Td
+0 -208.8539 Td
+(2169   # Load new registers) 117.9499 Tj
+0 -218.3473 Td
 (2170   movl 4\(%esp\), %eax  # not 8\(%esp\) - popped return ad\
 dress above) 305.796 Tj
-0 -227.841 Td
+0 -227.8407 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
+(2172   movl 28\(%eax\), %ebp) 113.5814 Tj
+0 -246.8274 Td
+(2173   movl 24\(%eax\), %edi) 113.5814 Tj
+0 -256.3207 Td
+(2174   movl 20\(%eax\), %esi) 113.5814 Tj
+0 -265.8141 Td
+(2175   movl 16\(%eax\), %edx) 113.5814 Tj
+0 -275.3075 Td
+(2176   movl 12\(%eax\), %ecx) 113.5814 Tj
+0 -284.8008 Td
+(2177   movl 8\(%eax\), %ebx) 109.2129 Tj
+0 -294.2942 Td
+(2178   movl 4\(%eax\), %esp) 109.2129 Tj
+0 -303.7875 Td
+(2179   pushl 0\(%eax\)  # %eip) 122.3184 Tj
+0 -313.2809 Td
 (2180 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (2181   ret) 43.6851 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (2182 ) 21.8426 Tj
 0 -341.761 Td
 (2183 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (2184 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (2185 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (2186 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (2187 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (2188 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2189 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2190 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (2191 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (2192 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (2193 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (2194 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2195 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (2196 ) 21.8426 Tj
 0 -474.668 Td
 (2197 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2198 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2199 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 21) 34.9481 Tj
 Q
 Q
@@ -9615,8 +9631,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -9631,116 +9646,116 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/kalloc.c  Page 1) 170.372 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/kalloc.c  Page 1) 170.3721 Tj
 0 -28.4801 Td
-(2200 // Physical memory allocator, intended to allocate) 240.268 Tj
+(2200 // Physical memory allocator, intended to allocate) 240.2683 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
+to) 283.9534 Tj
 0 -56.9602 Td
-(2203 // long runs, to make it easier to allocate big segments.) 270.848 Tj
+(2203 // long runs, to make it easier to allocate big segments.) 270.8479 Tj
 0 -66.4535 Td
 (2204 // One reason the page size is 4k is that the x86 segment \
-size) 292.69 Tj
+size) 292.6905 Tj
 0 -75.9469 Td
-(2205 // granularity is 4k.) 113.581 Tj
+(2205 // granularity is 4k.) 113.5814 Tj
 0 -85.4403 Td
 (2206 ) 21.8426 Tj
 0 -94.9336 Td
-(2207 #include "types.h") 100.476 Tj
+(2207 #include "types.h") 100.4758 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
+0 -113.9203 Td
+(2209 #include "param.h") 100.4758 Tj
+0 -123.4137 Td
+(2210 #include "spinlock.h") 113.5814 Tj
+0 -132.9071 Td
 (2211 ) 21.8426 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (2212 struct spinlock kalloc_lock;) 144.161 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (2213 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 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
+0 -170.8805 Td
+(2215   struct run *next;) 104.8443 Tj
+0 -180.3739 Td
+(2216   int len; // bytes) 104.8443 Tj
+0 -189.8672 Td
 (2217 };) 30.5796 Tj
-0 -199.361 Td
-(2218 struct run *freelist;) 113.581 Tj
-0 -208.854 Td
+0 -199.3606 Td
+(2218 struct run *freelist;) 113.5814 Tj
+0 -208.8539 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 -218.3473 Td
+(2220 // Initialize free list of physical pages.) 205.3202 Tj
+0 -227.8407 Td
+(2221 // This code cheats by just considering one megabyte of) 262.1109 Tj
 0 -237.334 Td
-(2222 // pages after _end.  Real systems would determine the) 257.742 Tj
-0 -246.827 Td
+(2222 // pages after _end.  Real systems would determine the) 257.7424 Tj
+0 -246.8274 Td
 (2223 // amount of memory available in the system and use it all\
-.) 279.585 Tj
-0 -256.321 Td
+.) 279.5849 Tj
+0 -256.3207 Td
 (2224 void) 39.3166 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (2225 kinit\(void\)) 69.8962 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (2226 {) 26.2111 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (2227   extern int end;) 96.1073 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (2228   uint mem;) 69.8962 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (2229   char *start;) 83.0018 Tj
-0 -313.281 Td
+0 -313.2809 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 -322.7743 Td
+(2231   initlock\(&kalloc_lock, "kalloc"\);) 174.7406 Tj
+0 -332.2676 Td
+(2232   start = \(char*\) &end;) 122.3184 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
+\)\);) 253.3738 Tj
+0 -351.2543 Td
+(2234   mem = 256; // assume computer has 256 pages of RAM) 249.0053 Tj
+0 -360.7477 Td
+(2235   cprintf\("mem = %d\\n", mem * PAGE\);) 179.1091 Tj
+0 -370.2411 Td
+(2236   kfree\(start, mem * PAGE\);) 139.7925 Tj
+0 -379.7344 Td
 (2237 }) 26.2111 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (2238 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2239 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2240 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (2241 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (2242 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (2243 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (2244 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2245 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (2246 ) 21.8426 Tj
 0 -474.668 Td
 (2247 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2248 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2249 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 22) 34.9481 Tj
 Q
 Q
@@ -9755,113 +9770,113 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/kalloc.c  Page 2) 170.372 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/kalloc.c  Page 2) 170.3721 Tj
 0 -28.4801 Td
-(2250 // Free the len bytes of memory pointed at by v,) 231.531 Tj
+(2250 // Free the len bytes of memory pointed at by v,) 231.5313 Tj
 0 -37.9735 Td
-(2251 // which normally should have been returned by a) 231.531 Tj
+(2251 // which normally should have been returned by a) 231.5313 Tj
 0 -47.4668 Td
-(2252 // call to kalloc\(len\).  \(The exception is when) 227.163 Tj
+(2252 // call to kalloc\(len\).  \(The exception is when) 227.1628 Tj
 0 -56.9602 Td
-(2253 // initializing the allocator; see kinit above.\)) 231.531 Tj
+(2253 // initializing the allocator; see kinit above.\)) 231.5313 Tj
 0 -66.4535 Td
 (2254 void) 39.3166 Tj
 0 -75.9469 Td
-(2255 kfree\(char *v, int len\)) 122.318 Tj
+(2255 kfree\(char *v, int len\)) 122.3184 Tj
 0 -85.4403 Td
 (2256 {) 26.2111 Tj
 0 -94.9336 Td
-(2257   struct run *r, *rend, **rp, *p, *pend;) 196.583 Tj
+(2257   struct run *r, *rend, **rp, *p, *pend;) 196.5831 Tj
 0 -104.427 Td
 (2258 ) 21.8426 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (2259   if\(len <= 0 || len % PAGE\)) 144.161 Tj
-0 -123.414 Td
-(2260     panic\("kfree"\);) 104.844 Tj
-0 -132.907 Td
+0 -123.4137 Td
+(2260     panic\("kfree"\);) 104.8443 Tj
+0 -132.9071 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
+0 -142.4004 Td
+(2262   // Fill with junk to catch dangling refs.) 209.6887 Tj
+0 -151.8938 Td
+(2263   memset\(v, 1, len\);) 109.2129 Tj
+0 -161.3871 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
+0 -170.8805 Td
+(2265   acquire\(&kalloc_lock\);) 126.6869 Tj
+0 -180.3739 Td
+(2266   p = \(struct run*\)v;) 113.5814 Tj
+0 -189.8672 Td
 (2267   pend = \(struct run*\)\(v + len\);) 161.635 Tj
-0 -199.361 Td
+0 -199.3606 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
+ext\){) 283.9534 Tj
+0 -208.8539 Td
+(2269     rend = \(struct run*\)\(\(char*\)r + r->len\);) 214.0572 Tj
+0 -218.3473 Td
+(2270     if\(r <= p && p < rend\)) 135.4239 Tj
+0 -227.8407 Td
+(2271       panic\("freeing free page"\);) 166.0035 Tj
 0 -237.334 Td
-(2272     if\(pend == r\){  // p next to r: replace r with p) 249.005 Tj
-0 -246.827 Td
+(2272     if\(pend == r\){  // p next to r: replace r with p) 249.0053 Tj
+0 -246.8274 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
+0 -256.3207 Td
+(2274       p->next = r->next;) 126.6869 Tj
+0 -265.8141 Td
 (2275       *rp = p;) 83.0018 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (2276       goto out;) 87.3703 Tj
-0 -284.801 Td
+0 -284.8008 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
+0 -294.2942 Td
+(2278     if\(rend == p\){  // r next to p: replace p with r) 249.0053 Tj
+0 -303.7875 Td
+(2279       r->len += len;) 109.2129 Tj
+0 -313.2809 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
+r->next?) 301.4275 Tj
+0 -322.7743 Td
+(2281         r->len += r->next->len;) 157.2665 Tj
+0 -332.2676 Td
 (2282         r->next = r->next->next;) 161.635 Tj
 0 -341.761 Td
 (2283       }) 52.4222 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (2284       goto out;) 87.3703 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (2285     }) 43.6851 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (2286   }) 34.9481 Tj
-0 -379.734 Td
-(2287   // Insert p before r in list.) 157.267 Tj
-0 -389.228 Td
+0 -379.7344 Td
+(2287   // Insert p before r in list.) 157.2665 Tj
+0 -389.2278 Td
 (2288   p->len = len;) 87.3703 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2289   p->next = r;) 83.0018 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2290   *rp = p;) 65.5277 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (2291 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (2292  out:) 43.6851 Tj
-0 -436.695 Td
-(2293   release\(&kalloc_lock\);) 126.687 Tj
-0 -446.188 Td
+0 -436.6946 Td
+(2293   release\(&kalloc_lock\);) 126.6869 Tj
+0 -446.1879 Td
 (2294 }) 26.2111 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2295 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (2296 ) 21.8426 Tj
 0 -474.668 Td
 (2297 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2298 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2299 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 22) 34.9481 Tj
 Q
 Q
@@ -9890,8 +9905,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -9906,16 +9920,16 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/kalloc.c  Page 3) 170.372 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/kalloc.c  Page 3) 170.3721 Tj
 0 -28.4801 Td
-(2300 // Allocate n bytes of physical memory.) 192.215 Tj
+(2300 // Allocate n bytes of physical memory.) 192.2146 Tj
 0 -37.9735 Td
-(2301 // Returns a kernel-segment pointer.) 179.109 Tj
+(2301 // Returns a kernel-segment pointer.) 179.1091 Tj
 0 -47.4668 Td
-(2302 // Returns 0 if the memory cannot be allocated.) 227.163 Tj
+(2302 // Returns 0 if the memory cannot be allocated.) 227.1628 Tj
 0 -56.9602 Td
 (2303 char*) 43.6851 Tj
 0 -66.4535 Td
@@ -9925,92 +9939,92 @@ q
 0 -85.4403 Td
 (2306   char *p;) 65.5277 Tj
 0 -94.9336 Td
-(2307   struct run *r, **rp;) 117.95 Tj
+(2307   struct run *r, **rp;) 117.9499 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
+0 -113.9203 Td
+(2309   if\(n % PAGE || n <= 0\)) 126.6869 Tj
+0 -123.4137 Td
+(2310     panic\("kalloc"\);) 109.2129 Tj
+0 -132.9071 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
+0 -142.4004 Td
+(2312   acquire\(&kalloc_lock\);) 126.6869 Tj
+0 -151.8938 Td
+(2313   for\(rp=&freelist; \(r=*rp\) != 0; rp=&r->next\){) 227.1628 Tj
+0 -161.3871 Td
+(2314     if\(r->len == n\){) 109.2129 Tj
+0 -170.8805 Td
+(2315       *rp = r->next;) 109.2129 Tj
+0 -180.3739 Td
 (2316       release\(&kalloc_lock\);) 144.161 Tj
-0 -189.867 Td
-(2317       return \(char*\)r;) 117.95 Tj
-0 -199.361 Td
+0 -189.8672 Td
+(2317       return \(char*\)r;) 117.9499 Tj
+0 -199.3606 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
+0 -208.8539 Td
+(2319     if\(r->len > n\){) 104.8443 Tj
+0 -218.3473 Td
+(2320       r->len -= n;) 100.4758 Tj
+0 -227.8407 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
+0 -246.8274 Td
 (2323       return p;) 87.3703 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (2324     }) 43.6851 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (2325   }) 34.9481 Tj
-0 -275.307 Td
-(2326   release\(&kalloc_lock\);) 126.687 Tj
-0 -284.801 Td
+0 -275.3075 Td
+(2326   release\(&kalloc_lock\);) 126.6869 Tj
+0 -284.8008 Td
 (2327 ) 21.8426 Tj
-0 -294.294 Td
-(2328   cprintf\("kalloc: out of memory\\n"\);) 183.478 Tj
-0 -303.788 Td
+0 -294.2942 Td
+(2328   cprintf\("kalloc: out of memory\\n"\);) 183.4776 Tj
+0 -303.7875 Td
 (2329   return 0;) 69.8962 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (2330 }) 26.2111 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (2331 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (2332 ) 21.8426 Tj
 0 -341.761 Td
 (2333 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (2334 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (2335 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (2336 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (2337 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (2338 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2339 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2340 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (2341 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (2342 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (2343 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (2344 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2345 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (2346 ) 21.8426 Tj
 0 -474.668 Td
 (2347 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2348 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2349 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 23) 34.9481 Tj
 Q
 Q
@@ -10025,117 +10039,117 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/traps.h  Page 1) 166.004 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/traps.h  Page 1) 166.0035 Tj
 0 -28.4801 Td
-(2350 // x86 trap and interrupt constants.) 179.109 Tj
+(2350 // x86 trap and interrupt constants.) 179.1091 Tj
 0 -37.9735 Td
 (2351 ) 21.8426 Tj
 0 -47.4668 Td
-(2352 // Processor-defined:) 113.581 Tj
+(2352 // Processor-defined:) 113.5814 Tj
 0 -56.9602 Td
-(2353 #define T_DIVIDE         0      // divide error) 227.163 Tj
+(2353 #define T_DIVIDE         0      // divide error) 227.1628 Tj
 0 -66.4535 Td
-(2354 #define T_DEBUG          1      // debug exception) 240.268 Tj
+(2354 #define T_DEBUG          1      // debug exception) 240.2683 Tj
 0 -75.9469 Td
-(2355 #define T_NMI            2      // non-maskable interrupt) 270.848 Tj
+(2355 #define T_NMI            2      // non-maskable interrupt) 270.8479 Tj
 0 -85.4403 Td
-(2356 #define T_BRKPT          3      // breakpoint) 218.426 Tj
+(2356 #define T_BRKPT          3      // breakpoint) 218.4257 Tj
 0 -94.9336 Td
-(2357 #define T_OFLOW          4      // overflow) 209.689 Tj
+(2357 #define T_OFLOW          4      // overflow) 209.6887 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
+(2358 #define T_BOUND          5      // bounds check) 227.1628 Tj
+0 -113.9203 Td
+(2359 #define T_ILLOP          6      // illegal opcode) 235.8998 Tj
+0 -123.4137 Td
+(2360 #define T_DEVICE         7      // device not available) 262.1109 Tj
+0 -132.9071 Td
+(2361 #define T_DBLFLT         8      // double fault) 227.1628 Tj
+0 -142.4004 Td
 (2362 // #define T_COPROC      9      // reserved \(not used sin\
-ce 486\)) 301.427 Tj
-0 -151.894 Td
+ce 486\)) 301.4275 Tj
+0 -151.8938 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
+ment) 292.6905 Tj
+0 -161.3871 Td
+(2364 #define T_SEGNP         11      // segment not present) 257.7424 Tj
+0 -170.8805 Td
+(2365 #define T_STACK         12      // stack exception) 240.2683 Tj
+0 -180.3739 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
+t) 279.5849 Tj
+0 -189.8672 Td
+(2367 #define T_PGFLT         14      // page fault) 218.4257 Tj
+0 -199.3606 Td
+(2368 // #define T_RES        15      // reserved) 209.6887 Tj
+0 -208.8539 Td
+(2369 #define T_FPERR         16      // floating point error) 262.1109 Tj
+0 -218.3473 Td
+(2370 #define T_ALIGN         17      // aligment check) 235.8998 Tj
+0 -227.8407 Td
+(2371 #define T_MCHK          18      // machine check) 231.5313 Tj
 0 -237.334 Td
 (2372 #define T_SIMDERR       19      // SIMD floating point err\
-or) 283.953 Tj
-0 -246.827 Td
+or) 283.9534 Tj
+0 -246.8274 Td
 (2373 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 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
+0 -265.8141 Td
+(2375 // processor defined exceptions or interrupt vectors.) 253.3738 Tj
+0 -275.3075 Td
+(2376 #define T_SYSCALL       48      // system call) 222.7942 Tj
+0 -284.8008 Td
+(2377 #define T_DEFAULT      500      // catchall) 209.6887 Tj
+0 -294.2942 Td
 (2378 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (2379 #define IRQ_OFFSET      32      // IRQ 0 corresponds to in\
-t IRQ_OFFSET) 327.639 Tj
-0 -313.281 Td
+t IRQ_OFFSET) 327.6386 Tj
+0 -313.2809 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 -322.7743 Td
+(2381 #define IRQ_TIMER        0) 135.4239 Tj
+0 -332.2676 Td
+(2382 #define IRQ_KBD          1) 135.4239 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
+(2383 #define IRQ_IDE         14) 135.4239 Tj
+0 -351.2543 Td
+(2384 #define IRQ_ERROR       19) 135.4239 Tj
+0 -360.7477 Td
+(2385 #define IRQ_SPURIOUS    31) 135.4239 Tj
+0 -370.2411 Td
 (2386 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (2387 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (2388 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2389 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2390 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (2391 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (2392 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (2393 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (2394 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2395 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (2396 ) 21.8426 Tj
 0 -474.668 Td
 (2397 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2398 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2399 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 23) 34.9481 Tj
 Q
 Q
@@ -10164,8 +10178,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -10180,111 +10193,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/vectors.pl  Page 1) 179.109 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/vectors.pl  Page 1) 179.1091 Tj
 0 -28.4801 Td
-(2400 #!/usr/bin/perl -w) 100.476 Tj
+(2400 #!/usr/bin/perl -w) 100.4758 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
+(2402 # Generate vectors.S, the trap/interrupt entry points.) 257.7424 Tj
 0 -56.9602 Td
-(2403 # There has to be one entry point per interrupt number) 257.742 Tj
+(2403 # There has to be one entry point per interrupt number) 257.7424 Tj
 0 -66.4535 Td
-(2404 # since otherwise there's no way for trap\(\) to discover) 262.111 Tj
+(2404 # since otherwise there's no way for trap\(\) to discover) 262.1109 Tj
 0 -75.9469 Td
-(2405 # the interrupt number.) 122.318 Tj
+(2405 # the interrupt number.) 122.3184 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
+(2407 print "# generated by vectors.pl - do not edit\\n";) 240.2683 Tj
 0 -104.427 Td
-(2408 print "# handlers\\n";) 113.581 Tj
-0 -113.92 Td
+(2408 print "# handlers\\n";) 113.5814 Tj
+0 -113.9203 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
+0 -123.4137 Td
+(2410 print ".globl alltraps\\n";) 135.4239 Tj
+0 -132.9071 Td
+(2411 for\(my $i = 0; $i < 256; $i++\){) 157.2665 Tj
+0 -142.4004 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
+0 -151.8938 Td
+(2413     print "vector$i:\\n";) 126.6869 Tj
+0 -161.3871 Td
+(2414     if\(\($i < 8 || $i > 14\) && $i != 17\){) 196.5831 Tj
+0 -170.8805 Td
 (2415         print "  pushl \\$0\\n";) 152.898 Tj
-0 -180.374 Td
+0 -180.3739 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
+0 -189.8672 Td
+(2417     print "  pushl \\$$i\\n";) 139.7925 Tj
+0 -199.3606 Td
+(2418     print "  jmp alltraps\\n";) 148.5295 Tj
+0 -208.8539 Td
 (2419 }) 26.2111 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (2420 ) 21.8426 Tj
-0 -227.841 Td
-(2421 print "\\n# vector table\\n";) 139.792 Tj
+0 -227.8407 Td
+(2421 print "\\n# vector table\\n";) 139.7925 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
+0 -246.8274 Td
+(2423 print ".globl vectors\\n";) 131.0554 Tj
+0 -256.3207 Td
+(2424 print "vectors:\\n";) 104.8443 Tj
+0 -265.8141 Td
+(2425 for\(my $i = 0; $i < 256; $i++\){) 157.2665 Tj
+0 -275.3075 Td
+(2426     print "  .long vector$i\\n";) 157.2665 Tj
+0 -284.8008 Td
 (2427 }) 26.2111 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (2428 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (2429 # sample output:) 91.7388 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (2430 #   # handlers) 83.0018 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (2431 #   .text) 61.1592 Tj
-0 -332.268 Td
-(2432 #   .globl alltraps) 104.844 Tj
+0 -332.2676 Td
+(2432 #   .globl alltraps) 104.8443 Tj
 0 -341.761 Td
-(2433 #   .globl vector0) 100.476 Tj
-0 -351.254 Td
+(2433 #   .globl vector0) 100.4758 Tj
+0 -351.2543 Td
 (2434 #   vector0:) 74.2647 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (2435 #     pushl $0) 83.0018 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (2436 #     pushl $0) 83.0018 Tj
-0 -379.734 Td
-(2437 #     jmp alltraps) 100.476 Tj
-0 -389.228 Td
+0 -379.7344 Td
+(2437 #     jmp alltraps) 100.4758 Tj
+0 -389.2278 Td
 (2438 #   ...) 52.4222 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2439 #) 26.2111 Tj
-0 -408.214 Td
-(2440 #   # vector table) 100.476 Tj
-0 -417.708 Td
+0 -408.2145 Td
+(2440 #   # vector table) 100.4758 Tj
+0 -417.7079 Td
 (2441 #   .data) 61.1592 Tj
-0 -427.201 Td
-(2442 #   .globl vectors) 100.476 Tj
-0 -436.695 Td
+0 -427.2012 Td
+(2442 #   .globl vectors) 100.4758 Tj
+0 -436.6946 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 -446.1879 Td
+(2444 #     .long vector0) 104.8443 Tj
+0 -455.6813 Td
+(2445 #     .long vector1) 104.8443 Tj
+0 -465.1747 Td
+(2446 #     .long vector2) 104.8443 Tj
 0 -474.668 Td
 (2447 #   ...) 52.4222 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2448 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2449 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 24) 34.9481 Tj
 Q
 Q
@@ -10299,111 +10312,111 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/trapasm.S  Page 1) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/trapasm.S  Page 1) 174.7406 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
+(2452 .set SEG_KDATA_SEL, 0x10   # selector for SEG_KDATA) 244.6368 Tj
 0 -56.9602 Td
 (2453 ) 21.8426 Tj
 0 -66.4535 Td
-(2454   # vectors.S sends all traps here.) 174.741 Tj
+(2454   # vectors.S sends all traps here.) 174.7406 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
+(2457   # Build trap frame.) 113.5814 Tj
 0 -104.427 Td
 (2458   pushl %ds) 69.8962 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (2459   pushl %es) 69.8962 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (2460   pushal) 56.7907 Tj
-0 -132.907 Td
+0 -132.9071 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
+0 -142.4004 Td
+(2462   # Set up data segments.) 131.0554 Tj
+0 -151.8938 Td
+(2463   movl $SEG_KDATA_SEL, %eax) 139.7925 Tj
+0 -161.3871 Td
 (2464   movw %ax,%ds) 83.0018 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (2465   movw %ax,%es) 83.0018 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (2466 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (2467   # Call trap\(tf\), where tf=%esp) 161.635 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (2468   pushl %esp) 74.2647 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (2469   call trap) 69.8962 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (2470   addl $4, %esp) 87.3703 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (2471 ) 21.8426 Tj
 0 -237.334 Td
-(2472   # Return falls through to trapret...) 187.846 Tj
-0 -246.827 Td
+(2472   # Return falls through to trapret...) 187.8461 Tj
+0 -246.8274 Td
 (2473 .globl trapret) 83.0018 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (2474 trapret:) 56.7907 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (2475   popal) 52.4222 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (2476   popl %es) 65.5277 Tj
-0 -284.801 Td
+0 -284.8008 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
+0 -294.2942 Td
+(2478   addl $0x8, %esp  # trapno and errcode) 192.2146 Tj
+0 -303.7875 Td
 (2479   iret) 48.0537 Tj
-0 -313.281 Td
+0 -313.2809 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 -322.7743 Td
+(2481   # A forked process switches to user mode by calling) 253.3738 Tj
+0 -332.2676 Td
+(2482   # forkret1\(tf\), where tf is the trap frame to use.) 249.0053 Tj
 0 -341.761 Td
 (2483 .globl forkret1) 87.3703 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (2484 forkret1:) 61.1592 Tj
-0 -360.748 Td
-(2485   movl 4\(%esp\), %esp) 109.213 Tj
-0 -370.241 Td
+0 -360.7477 Td
+(2485   movl 4\(%esp\), %esp) 109.2129 Tj
+0 -370.2411 Td
 (2486   jmp trapret) 78.6333 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (2487 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (2488 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2489 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2490 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (2491 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (2492 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (2493 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (2494 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2495 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (2496 ) 21.8426 Tj
 0 -474.668 Td
 (2497 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2498 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2499 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 24) 34.9481 Tj
 Q
 Q
@@ -10432,8 +10445,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -10448,16 +10460,16 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/trap.c  Page 1) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/trap.c  Page 1) 161.635 Tj
 0 -28.4801 Td
-(2500 #include "types.h") 100.476 Tj
+(2500 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
 (2501 #include "defs.h") 96.1073 Tj
 0 -47.4668 Td
-(2502 #include "param.h") 100.476 Tj
+(2502 #include "param.h") 100.4758 Tj
 0 -56.9602 Td
 (2503 #include "mmu.h") 91.7388 Tj
 0 -66.4535 Td
@@ -10465,97 +10477,96 @@ q
 0 -75.9469 Td
 (2505 #include "x86.h") 91.7388 Tj
 0 -85.4403 Td
-(2506 #include "traps.h") 100.476 Tj
+(2506 #include "traps.h") 100.4758 Tj
 0 -94.9336 Td
-(2507 #include "spinlock.h") 113.581 Tj
+(2507 #include "spinlock.h") 113.5814 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
+0 -113.9203 Td
+(2509 // Interrupt descriptor table \(shared by all CPUs\).) 244.6368 Tj
+0 -123.4137 Td
+(2510 struct gatedesc idt[256];) 131.0554 Tj
+0 -132.9071 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
+y pointers) 318.9016 Tj
+0 -142.4004 Td
+(2512 struct spinlock tickslock;) 135.4239 Tj
+0 -151.8938 Td
 (2513 int ticks;) 65.5277 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (2514 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (2515 void) 39.3166 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (2516 tvinit\(void\)) 74.2647 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (2517 {) 26.2111 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (2518   int i;) 56.7907 Tj
-0 -208.854 Td
+0 -208.8539 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 -218.3473 Td
+(2520   for\(i = 0; i < 256; i++\)) 135.4239 Tj
+0 -227.8407 Td
+(2521     SETGATE\(idt[i], 0, SEG_KCODE<<3, vectors[i], 0\);) 249.0053 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
+(2522   SETGATE\(idt[T_SYSCALL], 1, SEG_KCODE<<3, vectors[T_SYSC\
+ALL], DPL_USER\);) 340.7441 Tj
+0 -246.8274 Td
 (2523 ) 21.8426 Tj
-0 -256.321 Td
-(2524   initlock\(&tickslock, "time"\);) 157.267 Tj
-0 -265.814 Td
+0 -256.3207 Td
+(2524   initlock\(&tickslock, "time"\);) 157.2665 Tj
+0 -265.8141 Td
 (2525 }) 26.2111 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (2526 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (2527 void) 39.3166 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (2528 idtinit\(void\)) 78.6333 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (2529 {) 26.2111 Tj
-0 -313.281 Td
-(2530   lidt\(idt, sizeof\(idt\)\);) 131.055 Tj
-0 -322.774 Td
+0 -313.2809 Td
+(2530   lidt\(idt, sizeof\(idt\)\);) 131.0554 Tj
+0 -322.7743 Td
 (2531 }) 26.2111 Tj
-0 -332.268 Td
+0 -332.2676 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
+0 -351.2543 Td
+(2534 trap\(struct trapframe *tf\)) 135.4239 Tj
+0 -360.7477 Td
 (2535 {) 26.2111 Tj
-0 -370.241 Td
+0 -370.2411 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
+0 -379.7344 Td
+(2537     if\(cp->killed\)) 100.4758 Tj
+0 -389.2278 Td
 (2538       exit\(\);) 78.6333 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2539     cp->tf = tf;) 91.7388 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2540     syscall\(\);) 83.0018 Tj
-0 -417.708 Td
-(2541     if\(cp->killed\)) 100.476 Tj
-0 -427.201 Td
+0 -417.7079 Td
+(2541     if\(cp->killed\)) 100.4758 Tj
+0 -427.2012 Td
 (2542       exit\(\);) 78.6333 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (2543     return;) 69.8962 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (2544   }) 34.9481 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2545 ) 21.8426 Tj
-0 -465.175 Td
-(2546   // Increment nlock to make sure interrupts stay off) 253.374 Tj
+0 -465.1747 Td
+(2546   switch\(tf->trapno\){) 113.5814 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
+(2547   case IRQ_OFFSET + IRQ_TIMER:) 152.898 Tj
+0 -484.1614 Td
+(2548     if\(cpu\(\) == 0\){) 104.8443 Tj
+0 -493.6547 Td
+(2549       acquire\(&tickslock\);) 135.4239 Tj
+0 -522.1348 Td
 (Sheet 25) 34.9481 Tj
 Q
 Q
@@ -10570,119 +10581,117 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/trap.c  Page 2) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/trap.c  Page 2) 161.635 Tj
 0 -28.4801 Td
-(2550   switch\(tf->trapno\){) 113.581 Tj
+(2550       ticks++;) 83.0018 Tj
 0 -37.9735 Td
-(2551   case IRQ_OFFSET + IRQ_TIMER:) 152.898 Tj
+(2551       wakeup\(&ticks\);) 113.5814 Tj
 0 -47.4668 Td
-(2552     if\(cpu\(\) == 0\){) 104.844 Tj
+(2552       release\(&tickslock\);) 135.4239 Tj
 0 -56.9602 Td
-(2553       acquire\(&tickslock\);) 135.424 Tj
+(2553     }) 43.6851 Tj
 0 -66.4535 Td
-(2554       ticks++;) 83.0018 Tj
+(2554     lapic_eoi\(\);) 91.7388 Tj
 0 -75.9469 Td
-(2555       wakeup\(&ticks\);) 113.581 Tj
+(2555     break;) 65.5277 Tj
 0 -85.4403 Td
-(2556       release\(&tickslock\);) 135.424 Tj
+(2556   case IRQ_OFFSET + IRQ_IDE:) 144.161 Tj
 0 -94.9336 Td
-(2557     }) 43.6851 Tj
+(2557     ide_intr\(\);) 87.3703 Tj
 0 -104.427 Td
 (2558     lapic_eoi\(\);) 91.7388 Tj
-0 -113.92 Td
+0 -113.9203 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
+0 -123.4137 Td
+(2560   case IRQ_OFFSET + IRQ_KBD:) 144.161 Tj
+0 -132.9071 Td
+(2561     kbd_intr\(\);) 87.3703 Tj
+0 -142.4004 Td
 (2562     lapic_eoi\(\);) 91.7388 Tj
-0 -151.894 Td
+0 -151.8938 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 -161.3871 Td
+(2564   case IRQ_OFFSET + IRQ_SPURIOUS:) 166.0035 Tj
+0 -170.8805 Td
+(2565     cprintf\("cpu%d: spurious interrupt at %x:%x\\n",) 244.6368 Tj
+0 -180.3739 Td
+(2566             cpu\(\), tf->cs, tf->eip\);) 179.1091 Tj
+0 -189.8672 Td
+(2567     lapic_eoi\(\);) 91.7388 Tj
+0 -199.3606 Td
+(2568     break;) 65.5277 Tj
+0 -208.8539 Td
+(2569 ) 21.8426 Tj
+0 -218.3473 Td
+(2570   default:) 65.5277 Tj
+0 -227.8407 Td
+(2571     if\(cp == 0 || \(tf->cs&3\) == 0\){) 174.7406 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
+(2572       // In kernel, it must be our mistake.) 209.6887 Tj
+0 -246.8274 Td
+(2573       cprintf\("unexpected trap %d from cpu %d eip %x\\n",) 266.4794 Tj
+0 -256.3207 Td
+(2574               tf->trapno, cpu\(\), tf->eip\);) 205.3202 Tj
+0 -265.8141 Td
+(2575       panic\("trap"\);) 109.2129 Tj
+0 -275.3075 Td
+(2576     }) 43.6851 Tj
+0 -284.8008 Td
+(2577     // In user space, assume process misbehaved.) 231.5313 Tj
+0 -294.2942 Td
+(2578     cprintf\("pid %d %s: trap %d err %d on cpu %d eip %x -\
+- kill proc\\n",) 336.3756 Tj
+0 -303.7875 Td
+(2579             cp->pid, cp->name, tf->trapno, tf->err, cpu\(\)\
+, tf->eip\);) 318.9016 Tj
+0 -313.2809 Td
+(2580     cp->killed = 1;) 104.8443 Tj
+0 -322.7743 Td
+(2581   }) 34.9481 Tj
+0 -332.2676 Td
+(2582 ) 21.8426 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\
+(2583   // 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\
+0 -351.2543 Td
+(2584   // \(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 -360.7477 Td
+(2585   // until it gets to the regular system call return.\)) 257.7424 Tj
+0 -370.2411 Td
+(2586   if\(cp && cp->killed && \(tf->cs&3\) == DPL_USER\)) 231.5313 Tj
+0 -379.7344 Td
+(2587     exit\(\);) 69.8962 Tj
+0 -389.2278 Td
+(2588 ) 21.8426 Tj
+0 -398.7211 Td
+(2589   // Force process to give up CPU on clock tick.) 231.5313 Tj
+0 -408.2145 Td
+(2590   // If interrupts were on while locks held, would need to\
+ check nlock.) 332.0071 Tj
+0 -417.7079 Td
+(2591   if\(cp && cp->state == RUNNING && tf->trapno == IRQ_OFFS\
+ET+IRQ_TIMER\)) 327.6386 Tj
+0 -427.2012 Td
+(2592     yield\(\);) 74.2647 Tj
+0 -436.6946 Td
+(2593 }) 26.2111 Tj
+0 -446.1879 Td
+(2594 ) 21.8426 Tj
+0 -455.6813 Td
+(2595 ) 21.8426 Tj
+0 -465.1747 Td
+(2596 ) 21.8426 Tj
 0 -474.668 Td
-(2597 }) 26.2111 Tj
-0 -484.161 Td
+(2597 ) 21.8426 Tj
+0 -484.1614 Td
 (2598 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2599 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 25) 34.9481 Tj
 Q
 Q
@@ -10711,8 +10720,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -10727,111 +10735,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/syscall.h  Page 1) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/syscall.h  Page 1) 174.7406 Tj
 0 -28.4801 Td
-(2600 // System call numbers) 117.95 Tj
+(2600 // System call numbers) 117.9499 Tj
 0 -37.9735 Td
-(2601 #define SYS_fork    1) 113.581 Tj
+(2601 #define SYS_fork    1) 113.5814 Tj
 0 -47.4668 Td
-(2602 #define SYS_exit    2) 113.581 Tj
+(2602 #define SYS_exit    2) 113.5814 Tj
 0 -56.9602 Td
-(2603 #define SYS_wait    3) 113.581 Tj
+(2603 #define SYS_wait    3) 113.5814 Tj
 0 -66.4535 Td
-(2604 #define SYS_pipe    4) 113.581 Tj
+(2604 #define SYS_pipe    4) 113.5814 Tj
 0 -75.9469 Td
-(2605 #define SYS_write   5) 113.581 Tj
+(2605 #define SYS_write   5) 113.5814 Tj
 0 -85.4403 Td
-(2606 #define SYS_read    6) 113.581 Tj
+(2606 #define SYS_read    6) 113.5814 Tj
 0 -94.9336 Td
-(2607 #define SYS_close   7) 113.581 Tj
+(2607 #define SYS_close   7) 113.5814 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
+(2608 #define SYS_kill    8) 113.5814 Tj
+0 -113.9203 Td
+(2609 #define SYS_exec    9) 113.5814 Tj
+0 -123.4137 Td
+(2610 #define SYS_open   10) 113.5814 Tj
+0 -132.9071 Td
+(2611 #define SYS_mknod  11) 113.5814 Tj
+0 -142.4004 Td
+(2612 #define SYS_unlink 12) 113.5814 Tj
+0 -151.8938 Td
+(2613 #define SYS_fstat  13) 113.5814 Tj
+0 -161.3871 Td
+(2614 #define SYS_link   14) 113.5814 Tj
+0 -170.8805 Td
+(2615 #define SYS_mkdir  15) 113.5814 Tj
+0 -180.3739 Td
+(2616 #define SYS_chdir  16) 113.5814 Tj
+0 -189.8672 Td
+(2617 #define SYS_dup    17) 113.5814 Tj
+0 -199.3606 Td
+(2618 #define SYS_getpid 18) 113.5814 Tj
+0 -208.8539 Td
+(2619 #define SYS_sbrk   19) 113.5814 Tj
+0 -218.3473 Td
+(2620 #define SYS_sleep  20) 113.5814 Tj
+0 -227.8407 Td
 (2621 ) 21.8426 Tj
 0 -237.334 Td
 (2622 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (2623 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (2624 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (2625 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (2626 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (2627 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (2628 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (2629 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (2630 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (2631 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (2632 ) 21.8426 Tj
 0 -341.761 Td
 (2633 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (2634 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (2635 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (2636 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (2637 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (2638 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2639 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2640 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (2641 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (2642 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (2643 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (2644 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2645 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (2646 ) 21.8426 Tj
 0 -474.668 Td
 (2647 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2648 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2649 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 26) 34.9481 Tj
 Q
 Q
@@ -10846,16 +10854,16 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/syscall.c  Page 1) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/syscall.c  Page 1) 174.7406 Tj
 0 -28.4801 Td
-(2650 #include "types.h") 100.476 Tj
+(2650 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
 (2651 #include "defs.h") 96.1073 Tj
 0 -47.4668 Td
-(2652 #include "param.h") 100.476 Tj
+(2652 #include "param.h") 100.4758 Tj
 0 -56.9602 Td
 (2653 #include "mmu.h") 91.7388 Tj
 0 -66.4535 Td
@@ -10863,97 +10871,97 @@ q
 0 -75.9469 Td
 (2655 #include "x86.h") 91.7388 Tj
 0 -85.4403 Td
-(2656 #include "syscall.h") 109.213 Tj
+(2656 #include "syscall.h") 109.2129 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
+(2658 // User code makes a system call with INT T_SYSCALL.) 249.0053 Tj
+0 -113.9203 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
+0 -123.4137 Td
+(2660 // Arguments on the stack, from the user call to the C) 257.7424 Tj
+0 -132.9071 Td
 (2661 // library system call function. The saved user %esp point\
-s) 279.585 Tj
-0 -142.4 Td
+s) 279.5849 Tj
+0 -142.4004 Td
 (2662 // to a saved program counter, and then the first argument\
-.) 279.585 Tj
-0 -151.894 Td
+.) 279.5849 Tj
+0 -151.8938 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
+0 -161.3871 Td
+(2664 // Fetch the int at addr from process p.) 196.5831 Tj
+0 -170.8805 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
+0 -180.3739 Td
+(2666 fetchint\(struct proc *p, uint addr, int *ip\)) 214.0572 Tj
+0 -189.8672 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
+0 -199.3606 Td
+(2668   if\(addr >= p->sz || addr+4 > p->sz\)) 183.4776 Tj
+0 -208.8539 Td
 (2669     return -1;) 83.0018 Tj
-0 -218.347 Td
-(2670   *ip = *\(int*\)\(p->mem + addr\);) 157.267 Tj
-0 -227.841 Td
+0 -218.3473 Td
+(2670   *ip = *\(int*\)\(p->mem + addr\);) 157.2665 Tj
+0 -227.8407 Td
 (2671   return 0;) 69.8962 Tj
 0 -237.334 Td
 (2672 }) 26.2111 Tj
-0 -246.827 Td
+0 -246.8274 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
+0 -256.3207 Td
+(2674 // Fetch the nul-terminated string at addr from process p.) 275.2164 Tj
+0 -265.8141 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
+0 -275.3075 Td
+(2676 // Returns length of string, not including nul.) 227.1628 Tj
+0 -284.8008 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
+0 -294.2942 Td
+(2678 fetchstr\(struct proc *p, uint addr, char **pp\)) 222.7942 Tj
+0 -303.7875 Td
 (2679 {) 26.2111 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (2680   char *s, *ep;) 87.3703 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (2681 ) 21.8426 Tj
-0 -332.268 Td
-(2682   if\(addr >= p->sz\)) 104.844 Tj
+0 -332.2676 Td
+(2682   if\(addr >= p->sz\)) 104.8443 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
+0 -351.2543 Td
+(2684   *pp = p->mem + addr;) 117.9499 Tj
+0 -360.7477 Td
+(2685   ep = p->mem + p->sz;) 117.9499 Tj
+0 -370.2411 Td
+(2686   for\(s = *pp; s < ep; s++\)) 139.7925 Tj
+0 -379.7344 Td
 (2687     if\(*s == 0\)) 87.3703 Tj
-0 -389.228 Td
-(2688       return s - *pp;) 113.581 Tj
-0 -398.721 Td
+0 -389.2278 Td
+(2688       return s - *pp;) 113.5814 Tj
+0 -398.7211 Td
 (2689   return -1;) 74.2647 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2690 }) 26.2111 Tj
-0 -417.708 Td
+0 -417.7079 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
+0 -427.2012 Td
+(2692 // Fetch the nth 32-bit system call argument.) 218.4257 Tj
+0 -436.6946 Td
 (2693 int) 34.9481 Tj
-0 -446.188 Td
-(2694 argint\(int n, int *ip\)) 117.95 Tj
-0 -455.681 Td
+0 -446.1879 Td
+(2694 argint\(int n, int *ip\)) 117.9499 Tj
+0 -455.6813 Td
 (2695 {) 26.2111 Tj
-0 -465.175 Td
-(2696   return fetchint\(cp, cp->tf->esp + 4 + 4*n, ip\);) 235.9 Tj
+0 -465.1747 Td
+(2696   return fetchint\(cp, cp->tf->esp + 4 + 4*n, ip\);) 235.8998 Tj
 0 -474.668 Td
 (2697 }) 26.2111 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2698 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2699 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 26) 34.9481 Tj
 Q
 Q
@@ -10982,8 +10990,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -10998,22 +11005,22 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/syscall.c  Page 2) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/syscall.c  Page 2) 174.7406 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
+ointer) 301.4275 Tj
 0 -47.4668 Td
-(2702 // lies within the process address space.) 200.952 Tj
+(2702 // lies within the process address space.) 200.9517 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
+(2704 argptr\(int n, char **pp, int size\)) 170.3721 Tj
 0 -75.9469 Td
 (2705 {) 26.2111 Tj
 0 -85.4403 Td
@@ -11021,93 +11028,93 @@ ointer) 301.427 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
+(2708   if\(argint\(n, &i\) < 0\)) 122.3184 Tj
+0 -113.9203 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
+0 -123.4137 Td
+(2710   if\(\(uint\)i >= cp->sz || \(uint\)i+size >= cp->sz\)) 235.8998 Tj
+0 -132.9071 Td
 (2711     return -1;) 83.0018 Tj
-0 -142.4 Td
-(2712   *pp = cp->mem + i;) 109.213 Tj
-0 -151.894 Td
+0 -142.4004 Td
+(2712   *pp = cp->mem + i;) 109.2129 Tj
+0 -151.8938 Td
 (2713   return 0;) 69.8962 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (2714 }) 26.2111 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (2715 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (2716 // Fetch the nth word-sized system call argument as a stri\
-ng pointer.) 323.27 Tj
-0 -189.867 Td
+ng pointer.) 323.2701 Tj
+0 -189.8672 Td
 (2717 // Check that the pointer is valid and the string is nul-t\
-erminated.) 318.902 Tj
-0 -199.361 Td
+erminated.) 318.9016 Tj
+0 -199.3606 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
+'t change) 310.1645 Tj
+0 -208.8539 Td
+(2719 // between this check and being used by the kernel.\)) 249.0053 Tj
+0 -218.3473 Td
 (2720 int) 34.9481 Tj
-0 -227.841 Td
-(2721 argstr\(int n, char **pp\)) 126.687 Tj
+0 -227.8407 Td
+(2721 argstr\(int n, char **pp\)) 126.6869 Tj
 0 -237.334 Td
 (2722 {) 26.2111 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (2723   int addr;) 69.8962 Tj
-0 -256.321 Td
-(2724   if\(argint\(n, &addr\) < 0\)) 135.424 Tj
-0 -265.814 Td
+0 -256.3207 Td
+(2724   if\(argint\(n, &addr\) < 0\)) 135.4239 Tj
+0 -265.8141 Td
 (2725     return -1;) 83.0018 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (2726   return fetchstr\(cp, addr, pp\);) 161.635 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (2727 }) 26.2111 Tj
-0 -294.294 Td
+0 -294.2942 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 -303.7875 Td
+(2729 extern int sys_chdir\(void\);) 139.7925 Tj
+0 -313.2809 Td
+(2730 extern int sys_close\(void\);) 139.7925 Tj
+0 -322.7743 Td
+(2731 extern int sys_dup\(void\);) 131.0554 Tj
+0 -332.2676 Td
+(2732 extern int sys_exec\(void\);) 135.4239 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
+(2733 extern int sys_exit\(void\);) 135.4239 Tj
+0 -351.2543 Td
+(2734 extern int sys_fork\(void\);) 135.4239 Tj
+0 -360.7477 Td
+(2735 extern int sys_fstat\(void\);) 139.7925 Tj
+0 -370.2411 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
+0 -379.7344 Td
+(2737 extern int sys_kill\(void\);) 135.4239 Tj
+0 -389.2278 Td
+(2738 extern int sys_link\(void\);) 135.4239 Tj
+0 -398.7211 Td
+(2739 extern int sys_mkdir\(void\);) 139.7925 Tj
+0 -408.2145 Td
+(2740 extern int sys_mknod\(void\);) 139.7925 Tj
+0 -417.7079 Td
+(2741 extern int sys_open\(void\);) 135.4239 Tj
+0 -427.2012 Td
+(2742 extern int sys_pipe\(void\);) 135.4239 Tj
+0 -436.6946 Td
+(2743 extern int sys_read\(void\);) 135.4239 Tj
+0 -446.1879 Td
+(2744 extern int sys_sbrk\(void\);) 135.4239 Tj
+0 -455.6813 Td
+(2745 extern int sys_sleep\(void\);) 139.7925 Tj
+0 -465.1747 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
+(2747 extern int sys_wait\(void\);) 135.4239 Tj
+0 -484.1614 Td
+(2748 extern int sys_write\(void\);) 139.7925 Tj
+0 -493.6547 Td
 (2749 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 27) 34.9481 Tj
 Q
 Q
@@ -11122,112 +11129,112 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/syscall.c  Page 3) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/syscall.c  Page 3) 174.7406 Tj
 0 -28.4801 Td
-(2750 static int \(*syscalls[]\)\(void\) = {) 170.372 Tj
+(2750 static int \(*syscalls[]\)\(void\) = {) 170.3721 Tj
 0 -37.9735 Td
-(2751 [SYS_chdir]   sys_chdir,) 126.687 Tj
+(2751 [SYS_chdir]   sys_chdir,) 126.6869 Tj
 0 -47.4668 Td
-(2752 [SYS_close]   sys_close,) 126.687 Tj
+(2752 [SYS_close]   sys_close,) 126.6869 Tj
 0 -56.9602 Td
-(2753 [SYS_dup]     sys_dup,) 117.95 Tj
+(2753 [SYS_dup]     sys_dup,) 117.9499 Tj
 0 -66.4535 Td
-(2754 [SYS_exec]    sys_exec,) 122.318 Tj
+(2754 [SYS_exec]    sys_exec,) 122.3184 Tj
 0 -75.9469 Td
-(2755 [SYS_exit]    sys_exit,) 122.318 Tj
+(2755 [SYS_exit]    sys_exit,) 122.3184 Tj
 0 -85.4403 Td
-(2756 [SYS_fork]    sys_fork,) 122.318 Tj
+(2756 [SYS_fork]    sys_fork,) 122.3184 Tj
 0 -94.9336 Td
-(2757 [SYS_fstat]   sys_fstat,) 126.687 Tj
+(2757 [SYS_fstat]   sys_fstat,) 126.6869 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
+(2758 [SYS_getpid]  sys_getpid,) 131.0554 Tj
+0 -113.9203 Td
+(2759 [SYS_kill]    sys_kill,) 122.3184 Tj
+0 -123.4137 Td
+(2760 [SYS_link]    sys_link,) 122.3184 Tj
+0 -132.9071 Td
+(2761 [SYS_mkdir]   sys_mkdir,) 126.6869 Tj
+0 -142.4004 Td
+(2762 [SYS_mknod]   sys_mknod,) 126.6869 Tj
+0 -151.8938 Td
+(2763 [SYS_open]    sys_open,) 122.3184 Tj
+0 -161.3871 Td
+(2764 [SYS_pipe]    sys_pipe,) 122.3184 Tj
+0 -170.8805 Td
+(2765 [SYS_read]    sys_read,) 122.3184 Tj
+0 -180.3739 Td
+(2766 [SYS_sbrk]    sys_sbrk,) 122.3184 Tj
+0 -189.8672 Td
+(2767 [SYS_sleep]   sys_sleep,) 126.6869 Tj
+0 -199.3606 Td
+(2768 [SYS_unlink]  sys_unlink,) 131.0554 Tj
+0 -208.8539 Td
+(2769 [SYS_wait]    sys_wait,) 122.3184 Tj
+0 -218.3473 Td
+(2770 [SYS_write]   sys_write,) 126.6869 Tj
+0 -227.8407 Td
 (2771 };) 30.5796 Tj
 0 -237.334 Td
 (2772 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (2773 void) 39.3166 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (2774 syscall\(void\)) 78.6333 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (2775 {) 26.2111 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (2776   int num;) 65.5277 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (2777 ) 21.8426 Tj
-0 -294.294 Td
-(2778   num = cp->tf->eax;) 109.213 Tj
-0 -303.788 Td
+0 -294.2942 Td
+(2778   num = cp->tf->eax;) 109.2129 Tj
+0 -303.7875 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
+\)) 266.4794 Tj
+0 -313.2809 Td
+(2780     cp->tf->eax = syscalls[num]\(\);) 170.3721 Tj
+0 -322.7743 Td
 (2781   else {) 56.7907 Tj
-0 -332.268 Td
-(2782     cprintf\("%d %s: unknown sys call %d\\n",) 209.689 Tj
+0 -332.2676 Td
+(2782     cprintf\("%d %s: unknown sys call %d\\n",) 209.6887 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
+(2783             cp->pid, cp->name, num\);) 179.1091 Tj
+0 -351.2543 Td
+(2784     cp->tf->eax = -1;) 113.5814 Tj
+0 -360.7477 Td
 (2785   }) 34.9481 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (2786 }) 26.2111 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (2787 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (2788 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2789 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2790 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (2791 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (2792 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (2793 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (2794 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2795 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (2796 ) 21.8426 Tj
 0 -474.668 Td
 (2797 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2798 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2799 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 27) 34.9481 Tj
 Q
 Q
@@ -11256,8 +11263,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -11272,16 +11278,16 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sysproc.c  Page 1) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sysproc.c  Page 1) 174.7406 Tj
 0 -28.4801 Td
-(2800 #include "types.h") 100.476 Tj
+(2800 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
 (2801 #include "defs.h") 96.1073 Tj
 0 -47.4668 Td
-(2802 #include "param.h") 100.476 Tj
+(2802 #include "param.h") 100.4758 Tj
 0 -56.9602 Td
 (2803 #include "mmu.h") 91.7388 Tj
 0 -66.4535 Td
@@ -11294,89 +11300,89 @@ q
 (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 -113.9203 Td
+(2809   int pid;) 65.5277 Tj
+0 -123.4137 Td
+(2810   struct proc *np;) 100.4758 Tj
+0 -132.9071 Td
+(2811 ) 21.8426 Tj
+0 -142.4004 Td
+(2812   if\(\(np = copyproc\(cp\)\) == 0\)) 152.898 Tj
+0 -151.8938 Td
+(2813     return -1;) 83.0018 Tj
+0 -161.3871 Td
+(2814   pid = np->pid;) 91.7388 Tj
+0 -170.8805 Td
+(2815   np->state = RUNNABLE;) 122.3184 Tj
+0 -180.3739 Td
+(2816   return pid;) 78.6333 Tj
+0 -189.8672 Td
+(2817 }) 26.2111 Tj
+0 -199.3606 Td
+(2818 ) 21.8426 Tj
+0 -208.8539 Td
+(2819 int) 34.9481 Tj
+0 -218.3473 Td
+(2820 sys_exit\(void\)) 83.0018 Tj
+0 -227.8407 Td
+(2821 {) 26.2111 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
+(2822   exit\(\);) 61.1592 Tj
+0 -246.8274 Td
+(2823   return 0;  // not reached) 139.7925 Tj
+0 -256.3207 Td
+(2824 }) 26.2111 Tj
+0 -265.8141 Td
+(2825 ) 21.8426 Tj
+0 -275.3075 Td
+(2826 int) 34.9481 Tj
+0 -284.8008 Td
+(2827 sys_wait\(void\)) 83.0018 Tj
+0 -294.2942 Td
+(2828 {) 26.2111 Tj
+0 -303.7875 Td
+(2829   return wait\(\);) 91.7388 Tj
+0 -313.2809 Td
+(2830 }) 26.2111 Tj
+0 -322.7743 Td
+(2831 ) 21.8426 Tj
+0 -332.2676 Td
+(2832 int) 34.9481 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
+(2833 sys_kill\(void\)) 83.0018 Tj
+0 -351.2543 Td
+(2834 {) 26.2111 Tj
+0 -360.7477 Td
+(2835   int pid;) 65.5277 Tj
+0 -370.2411 Td
+(2836 ) 21.8426 Tj
+0 -379.7344 Td
+(2837   if\(argint\(0, &pid\) < 0\)) 131.0554 Tj
+0 -389.2278 Td
+(2838     return -1;) 83.0018 Tj
+0 -398.7211 Td
+(2839   return kill\(pid\);) 104.8443 Tj
+0 -408.2145 Td
+(2840 }) 26.2111 Tj
+0 -417.7079 Td
+(2841 ) 21.8426 Tj
+0 -427.2012 Td
+(2842 int) 34.9481 Tj
+0 -436.6946 Td
+(2843 sys_getpid\(void\)) 91.7388 Tj
+0 -446.1879 Td
+(2844 {) 26.2111 Tj
+0 -455.6813 Td
+(2845   return cp->pid;) 96.1073 Tj
+0 -465.1747 Td
+(2846 }) 26.2111 Tj
 0 -474.668 Td
 (2847 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2848 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2849 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 28) 34.9481 Tj
 Q
 Q
@@ -11391,10 +11397,10 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sysproc.c  Page 2) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sysproc.c  Page 2) 174.7406 Tj
 0 -28.4801 Td
 (2850 int) 34.9481 Tj
 0 -37.9735 Td
@@ -11408,94 +11414,94 @@ q
 0 -75.9469 Td
 (2855 ) 21.8426 Tj
 0 -85.4403 Td
-(2856   if\(argint\(0, &n\) < 0\)) 122.318 Tj
+(2856   if\(argint\(0, &n\) < 0\)) 122.3184 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
+0 -113.9203 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 -123.4137 Td
+(2860   return addr;) 83.0018 Tj
+0 -132.9071 Td
+(2861 }) 26.2111 Tj
+0 -142.4004 Td
+(2862 ) 21.8426 Tj
+0 -151.8938 Td
+(2863 int) 34.9481 Tj
+0 -161.3871 Td
+(2864 sys_sleep\(void\)) 87.3703 Tj
+0 -170.8805 Td
+(2865 {) 26.2111 Tj
+0 -180.3739 Td
+(2866   int n, ticks0;) 91.7388 Tj
+0 -189.8672 Td
+(2867 ) 21.8426 Tj
+0 -199.3606 Td
+(2868   if\(argint\(0, &n\) < 0\)) 122.3184 Tj
+0 -208.8539 Td
+(2869     return -1;) 83.0018 Tj
+0 -218.3473 Td
+(2870   acquire\(&tickslock\);) 117.9499 Tj
+0 -227.8407 Td
+(2871   ticks0 = ticks;) 96.1073 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
+(2872   while\(ticks - ticks0 < n\){) 144.161 Tj
+0 -246.8274 Td
+(2873     if\(cp->killed\){) 104.8443 Tj
+0 -256.3207 Td
+(2874       release\(&tickslock\);) 135.4239 Tj
+0 -265.8141 Td
+(2875       return -1;) 91.7388 Tj
+0 -275.3075 Td
+(2876     }) 43.6851 Tj
+0 -284.8008 Td
+(2877     sleep\(&ticks, &tickslock\);) 152.898 Tj
+0 -294.2942 Td
+(2878   }) 34.9481 Tj
+0 -303.7875 Td
+(2879   release\(&tickslock\);) 117.9499 Tj
+0 -313.2809 Td
+(2880   return 0;) 69.8962 Tj
+0 -322.7743 Td
+(2881 }) 26.2111 Tj
+0 -332.2676 Td
+(2882 ) 21.8426 Tj
 0 -341.761 Td
 (2883 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (2884 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (2885 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (2886 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (2887 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (2888 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2889 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2890 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (2891 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (2892 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (2893 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (2894 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2895 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (2896 ) 21.8426 Tj
 0 -474.668 Td
 (2897 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2898 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2899 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 28) 34.9481 Tj
 Q
 Q
@@ -11524,8 +11530,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -11540,10 +11545,10 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/buf.h  Page 1) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/buf.h  Page 1) 157.2665 Tj
 0 -28.4801 Td
 (2900 struct buf {) 74.2647 Tj
 0 -37.9735 Td
@@ -11553,98 +11558,98 @@ q
 0 -56.9602 Td
 (2903   uint sector;) 83.0018 Tj
 0 -66.4535 Td
-(2904   struct buf *prev; // LRU cache list) 183.478 Tj
+(2904   struct buf *prev; // LRU cache list) 183.4776 Tj
 0 -75.9469 Td
-(2905   struct buf *next;) 104.844 Tj
+(2905   struct buf *next;) 104.8443 Tj
 0 -85.4403 Td
-(2906   struct buf *qnext; // disk queue) 170.372 Tj
+(2906   struct buf *qnext; // disk queue) 170.3721 Tj
 0 -94.9336 Td
-(2907   uchar data[512];) 100.476 Tj
+(2907   uchar data[512];) 100.4758 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
+0 -113.9203 Td
+(2909 #define B_BUSY  0x1  // buffer is locked by some process) 266.4794 Tj
+0 -123.4137 Td
+(2910 #define B_VALID 0x2  // buffer has been read from disk) 257.7424 Tj
+0 -132.9071 Td
+(2911 #define B_DIRTY 0x4  // buffer needs to be written to disk) 275.2164 Tj
+0 -142.4004 Td
 (2912 ) 21.8426 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (2913 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (2914 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (2915 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (2916 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (2917 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (2918 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (2919 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (2920 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (2921 ) 21.8426 Tj
 0 -237.334 Td
 (2922 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (2923 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (2924 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (2925 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (2926 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (2927 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (2928 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (2929 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (2930 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (2931 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (2932 ) 21.8426 Tj
 0 -341.761 Td
 (2933 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (2934 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (2935 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (2936 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (2937 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (2938 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2939 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2940 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (2941 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (2942 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (2943 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (2944 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2945 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (2946 ) 21.8426 Tj
 0 -474.668 Td
 (2947 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2948 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2949 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 29) 34.9481 Tj
 Q
 Q
@@ -11659,16 +11664,16 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/dev.h  Page 1) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/dev.h  Page 1) 157.2665 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
+(2951   int \(*read\)\(struct inode*, char*, int\);) 200.9517 Tj
 0 -47.4668 Td
-(2952   int \(*write\)\(struct inode*, char*, int\);) 205.32 Tj
+(2952   int \(*write\)\(struct inode*, char*, int\);) 205.3202 Tj
 0 -56.9602 Td
 (2953 };) 30.5796 Tj
 0 -66.4535 Td
@@ -11681,89 +11686,89 @@ q
 (2957 #define CONSOLE 1) 96.1073 Tj
 0 -104.427 Td
 (2958 ) 21.8426 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (2959 ) 21.8426 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (2960 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (2961 ) 21.8426 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (2962 ) 21.8426 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (2963 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (2964 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (2965 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (2966 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (2967 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (2968 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (2969 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (2970 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (2971 ) 21.8426 Tj
 0 -237.334 Td
 (2972 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (2973 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (2974 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (2975 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (2976 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (2977 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (2978 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (2979 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (2980 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (2981 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (2982 ) 21.8426 Tj
 0 -341.761 Td
 (2983 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (2984 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (2985 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (2986 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (2987 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (2988 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (2989 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (2990 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (2991 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (2992 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (2993 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (2994 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (2995 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (2996 ) 21.8426 Tj
 0 -474.668 Td
 (2997 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (2998 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (2999 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 29) 34.9481 Tj
 Q
 Q
@@ -11792,8 +11797,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -11808,18 +11812,18 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fcntl.h  Page 1) 166.004 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/fcntl.h  Page 1) 166.0035 Tj
 0 -28.4801 Td
-(3000 #define O_RDONLY  0x000) 122.318 Tj
+(3000 #define O_RDONLY  0x000) 122.3184 Tj
 0 -37.9735 Td
-(3001 #define O_WRONLY  0x001) 122.318 Tj
+(3001 #define O_WRONLY  0x001) 122.3184 Tj
 0 -47.4668 Td
-(3002 #define O_RDWR    0x002) 122.318 Tj
+(3002 #define O_RDWR    0x002) 122.3184 Tj
 0 -56.9602 Td
-(3003 #define O_CREATE  0x200) 122.318 Tj
+(3003 #define O_CREATE  0x200) 122.3184 Tj
 0 -66.4535 Td
 (3004 ) 21.8426 Tj
 0 -75.9469 Td
@@ -11830,89 +11834,89 @@ q
 (3007 ) 21.8426 Tj
 0 -104.427 Td
 (3008 ) 21.8426 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (3009 ) 21.8426 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (3010 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (3011 ) 21.8426 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (3012 ) 21.8426 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (3013 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (3014 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (3015 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (3016 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (3017 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (3018 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (3019 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (3020 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (3021 ) 21.8426 Tj
 0 -237.334 Td
 (3022 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (3023 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (3024 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (3025 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (3026 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (3027 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (3028 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (3029 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (3030 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (3031 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (3032 ) 21.8426 Tj
 0 -341.761 Td
 (3033 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (3034 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (3035 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (3036 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (3037 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (3038 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (3039 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (3040 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (3041 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (3042 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (3043 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3044 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3045 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3046 ) 21.8426 Tj
 0 -474.668 Td
 (3047 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3048 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3049 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 30) 34.9481 Tj
 Q
 Q
@@ -11927,111 +11931,111 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/stat.h  Page 1) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+(3051   int dev;     // Device number) 157.2665 Tj
 0 -47.4668 Td
-(3052   uint ino;    // Inode number on device) 196.583 Tj
+(3052   uint ino;    // Inode number on device) 196.5831 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
+(3054   short nlink; // Number of links to file) 200.9517 Tj
 0 -75.9469 Td
-(3055   uint size;   // Size of file in bytes) 192.215 Tj
+(3055   uint size;   // Size of file in bytes) 192.2146 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
+0 -113.9203 Td
 (3059 ) 21.8426 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (3060 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (3061 ) 21.8426 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (3062 ) 21.8426 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (3063 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (3064 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (3065 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (3066 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (3067 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (3068 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (3069 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (3070 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (3071 ) 21.8426 Tj
 0 -237.334 Td
 (3072 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (3073 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (3074 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (3075 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (3076 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (3077 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (3078 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (3079 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (3080 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (3081 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (3082 ) 21.8426 Tj
 0 -341.761 Td
 (3083 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (3084 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (3085 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (3086 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (3087 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (3088 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (3089 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (3090 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (3091 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (3092 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (3093 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3094 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3095 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3096 ) 21.8426 Tj
 0 -474.668 Td
 (3097 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3098 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3099 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 30) 34.9481 Tj
 Q
 Q
@@ -12060,8 +12064,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -12076,111 +12079,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/file.h  Page 1) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+(3101   enum { FD_CLOSED, FD_NONE, FD_PIPE, FD_INODE } type;) 257.7424 Tj
 0 -47.4668 Td
-(3102   int ref; // reference count) 148.529 Tj
+(3102   int ref; // reference count) 148.5295 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
+(3105   struct pipe *pipe;) 109.2129 Tj
 0 -85.4403 Td
-(3106   struct inode *ip;) 104.844 Tj
+(3106   struct inode *ip;) 104.8443 Tj
 0 -94.9336 Td
 (3107   uint off;) 69.8962 Tj
 0 -104.427 Td
 (3108 };) 30.5796 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (3109 ) 21.8426 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (3110 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (3111 ) 21.8426 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (3112 ) 21.8426 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (3113 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (3114 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (3115 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (3116 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (3117 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (3118 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (3119 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (3120 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (3121 ) 21.8426 Tj
 0 -237.334 Td
 (3122 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (3123 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (3124 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (3125 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (3126 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (3127 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (3128 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (3129 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (3130 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (3131 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (3132 ) 21.8426 Tj
 0 -341.761 Td
 (3133 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (3134 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (3135 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (3136 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (3137 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (3138 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (3139 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (3140 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (3141 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (3142 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (3143 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3144 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3145 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3146 ) 21.8426 Tj
 0 -474.668 Td
 (3147 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3148 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3149 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 31) 34.9481 Tj
 Q
 Q
@@ -12195,116 +12198,116 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.h  Page 1) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+(3151 // Both the kernel and user programs use this header file.) 275.2164 Tj
 0 -47.4668 Td
 (3152 ) 21.8426 Tj
 0 -56.9602 Td
-(3153 // Block 0 is unused.) 113.581 Tj
+(3153 // Block 0 is unused.) 113.5814 Tj
 0 -66.4535 Td
-(3154 // Block 1 is super block.) 135.424 Tj
+(3154 // Block 1 is super block.) 135.4239 Tj
 0 -75.9469 Td
-(3155 // Inodes start at block 2.) 139.792 Tj
+(3155 // Inodes start at block 2.) 139.7925 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
+0 -113.9203 Td
+(3159 // File system super block) 135.4239 Tj
+0 -123.4137 Td
+(3160 struct superblock {) 104.8443 Tj
+0 -132.9071 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
+\)) 275.2164 Tj
+0 -142.4004 Td
+(3162   uint nblocks;      // Number of data blocks) 218.4257 Tj
+0 -151.8938 Td
+(3163   uint ninodes;      // Number of inodes.) 200.9517 Tj
+0 -161.3871 Td
 (3164 };) 30.5796 Tj
-0 -170.88 Td
+0 -170.8805 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
+0 -180.3739 Td
+(3166 #define NADDRS \(NDIRECT+1\)) 135.4239 Tj
+0 -189.8672 Td
+(3167 #define NDIRECT 12) 100.4758 Tj
+0 -199.3606 Td
+(3168 #define INDIRECT 12) 104.8443 Tj
+0 -208.8539 Td
+(3169 #define NINDIRECT \(BSIZE / sizeof\(uint\)\)) 196.5831 Tj
+0 -218.3473 Td
+(3170 #define MAXFILE \(NDIRECT  + NINDIRECT\)) 187.8461 Tj
+0 -227.8407 Td
 (3171 ) 21.8426 Tj
 0 -237.334 Td
-(3172 // On-disk inode structure) 135.424 Tj
-0 -246.827 Td
+(3172 // On-disk inode structure) 135.4239 Tj
+0 -246.8274 Td
 (3173 struct dinode {) 87.3703 Tj
-0 -256.321 Td
-(3174   short type;           // File type) 179.109 Tj
-0 -265.814 Td
+0 -256.3207 Td
+(3174   short type;           // File type) 179.1091 Tj
+0 -265.8141 Td
 (3175   short major;          // Major device number \(T_DEV onl\
-y\)) 279.585 Tj
-0 -275.307 Td
+y\)) 279.5849 Tj
+0 -275.3075 Td
 (3176   short minor;          // Minor device number \(T_DEV onl\
-y\)) 279.585 Tj
-0 -284.801 Td
+y\)) 279.5849 Tj
+0 -284.8008 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
+e system) 310.1645 Tj
+0 -294.2942 Td
+(3178   uint size;            // Size of file \(bytes\)) 227.1628 Tj
+0 -303.7875 Td
+(3179   uint addrs[NADDRS];   // Data block addresses) 227.1628 Tj
+0 -313.2809 Td
 (3180 };) 30.5796 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (3181 ) 21.8426 Tj
-0 -332.268 Td
-(3182 #define T_DIR  1   // Directory) 157.267 Tj
+0 -332.2676 Td
+(3182 #define T_DIR  1   // Directory) 157.2665 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
+(3183 #define T_FILE 2   // File) 135.4239 Tj
+0 -351.2543 Td
+(3184 #define T_DEV  3   // Special device) 179.1091 Tj
+0 -360.7477 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
+0 -370.2411 Td
+(3186 // Inodes per block.) 109.2129 Tj
+0 -379.7344 Td
+(3187 #define IPB           \(BSIZE / sizeof\(struct dinode\)\)) 253.3738 Tj
+0 -389.2278 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
+0 -398.7211 Td
+(3189 // Block containing inode i) 139.7925 Tj
+0 -408.2145 Td
+(3190 #define IBLOCK\(i\)     \(\(i\) / IPB + 2\)) 183.4776 Tj
+0 -417.7079 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
+0 -427.2012 Td
+(3192 // Bitmap bits per block) 126.6869 Tj
+0 -436.6946 Td
+(3193 #define BPB           \(BSIZE*8\)) 157.2665 Tj
+0 -446.1879 Td
 (3194 ) 21.8426 Tj
-0 -455.681 Td
-(3195 // Block containing bit for block b) 174.741 Tj
-0 -465.175 Td
+0 -455.6813 Td
+(3195 // Block containing bit for block b) 174.7406 Tj
+0 -465.1747 Td
 (3196 #define BBLOCK\(b, ninodes\) \(b/BPB + \(ninodes\)/IPB + 3\
-\)) 257.742 Tj
+\)) 257.7424 Tj
 0 -474.668 Td
 (3197 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3198 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3199 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 31) 34.9481 Tj
 Q
 Q
@@ -12333,8 +12336,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -12349,13 +12351,13 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.h  Page 2) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+uctures.) 310.1645 Tj
 0 -37.9735 Td
 (3201 #define DIRSIZ 14) 96.1073 Tj
 0 -47.4668 Td
@@ -12365,96 +12367,96 @@ uctures.) 310.165 Tj
 0 -66.4535 Td
 (3204   ushort inum;) 83.0018 Tj
 0 -75.9469 Td
-(3205   char name[DIRSIZ];) 109.213 Tj
+(3205   char name[DIRSIZ];) 109.2129 Tj
 0 -85.4403 Td
 (3206 };) 30.5796 Tj
 0 -94.9336 Td
 (3207 ) 21.8426 Tj
 0 -104.427 Td
 (3208 ) 21.8426 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (3209 ) 21.8426 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (3210 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (3211 ) 21.8426 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (3212 ) 21.8426 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (3213 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (3214 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (3215 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (3216 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (3217 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (3218 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (3219 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (3220 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (3221 ) 21.8426 Tj
 0 -237.334 Td
 (3222 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (3223 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (3224 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (3225 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (3226 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (3227 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (3228 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (3229 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (3230 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (3231 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (3232 ) 21.8426 Tj
 0 -341.761 Td
 (3233 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (3234 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (3235 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (3236 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (3237 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (3238 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (3239 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (3240 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (3241 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (3242 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (3243 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3244 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3245 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3246 ) 21.8426 Tj
 0 -474.668 Td
 (3247 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3248 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3249 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 32) 34.9481 Tj
 Q
 Q
@@ -12469,10 +12471,10 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fsvar.h  Page 1) 166.004 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/fsvar.h  Page 1) 166.0035 Tj
 0 -28.4801 Td
 (3250 // in-core file system types) 144.161 Tj
 0 -37.9735 Td
@@ -12480,100 +12482,100 @@ q
 0 -47.4668 Td
 (3252 struct inode {) 83.0018 Tj
 0 -56.9602 Td
-(3253   uint dev;           // Device number) 187.846 Tj
+(3253   uint dev;           // Device number) 187.8461 Tj
 0 -66.4535 Td
-(3254   uint inum;          // Inode number) 183.478 Tj
+(3254   uint inum;          // Inode number) 183.4776 Tj
 0 -75.9469 Td
-(3255   int ref;            // Reference count) 196.583 Tj
+(3255   int ref;            // Reference count) 196.5831 Tj
 0 -85.4403 Td
-(3256   int flags;          // I_BUSY, I_VALID) 196.583 Tj
+(3256   int flags;          // I_BUSY, I_VALID) 196.5831 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
+(3258   short type;         // copy of disk inode) 209.6887 Tj
+0 -113.9203 Td
 (3259   short major;) 83.0018 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (3260   short minor;) 83.0018 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (3261   short nlink;) 83.0018 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (3262   uint size;) 74.2647 Tj
-0 -151.894 Td
-(3263   uint addrs[NADDRS];) 113.581 Tj
-0 -161.387 Td
+0 -151.8938 Td
+(3263   uint addrs[NADDRS];) 113.5814 Tj
+0 -161.3871 Td
 (3264 };) 30.5796 Tj
-0 -170.88 Td
+0 -170.8805 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
+0 -180.3739 Td
+(3266 #define I_BUSY 0x1) 100.4758 Tj
+0 -189.8672 Td
+(3267 #define I_VALID 0x2) 104.8443 Tj
+0 -199.3606 Td
 (3268 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (3269 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (3270 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (3271 ) 21.8426 Tj
 0 -237.334 Td
 (3272 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (3273 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (3274 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (3275 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (3276 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (3277 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (3278 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (3279 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (3280 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (3281 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (3282 ) 21.8426 Tj
 0 -341.761 Td
 (3283 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (3284 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (3285 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (3286 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (3287 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (3288 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (3289 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (3290 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (3291 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (3292 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (3293 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3294 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3295 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3296 ) 21.8426 Tj
 0 -474.668 Td
 (3297 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3298 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3299 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 32) 34.9481 Tj
 Q
 Q
@@ -12602,8 +12604,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -12618,20 +12619,20 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/ide.c  Page 1) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/ide.c  Page 1) 157.2665 Tj
 0 -28.4801 Td
-(3300 // Simple PIO-based \(non-DMA\) IDE driver code.) 222.794 Tj
+(3300 // Simple PIO-based \(non-DMA\) IDE driver code.) 222.7942 Tj
 0 -37.9735 Td
 (3301 ) 21.8426 Tj
 0 -47.4668 Td
-(3302 #include "types.h") 100.476 Tj
+(3302 #include "types.h") 100.4758 Tj
 0 -56.9602 Td
 (3303 #include "defs.h") 96.1073 Tj
 0 -66.4535 Td
-(3304 #include "param.h") 100.476 Tj
+(3304 #include "param.h") 100.4758 Tj
 0 -75.9469 Td
 (3305 #include "mmu.h") 91.7388 Tj
 0 -85.4403 Td
@@ -12639,93 +12640,93 @@ q
 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
+(3308 #include "traps.h") 100.4758 Tj
+0 -113.9203 Td
+(3309 #include "spinlock.h") 113.5814 Tj
+0 -123.4137 Td
 (3310 #include "buf.h") 91.7388 Tj
-0 -132.907 Td
+0 -132.9071 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
+0 -142.4004 Td
+(3312 #define IDE_BSY       0x80) 135.4239 Tj
+0 -151.8938 Td
+(3313 #define IDE_DRDY      0x40) 135.4239 Tj
+0 -161.3871 Td
+(3314 #define IDE_DF        0x20) 135.4239 Tj
+0 -170.8805 Td
+(3315 #define IDE_ERR       0x01) 135.4239 Tj
+0 -180.3739 Td
 (3316 ) 21.8426 Tj
-0 -189.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
+0 -189.8672 Td
+(3317 #define IDE_CMD_READ  0x20) 135.4239 Tj
+0 -199.3606 Td
+(3318 #define IDE_CMD_WRITE 0x30) 135.4239 Tj
+0 -208.8539 Td
 (3319 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (3320 // ide_queue points to the buf now being read/written to t\
-he disk.) 310.165 Tj
-0 -227.841 Td
+he disk.) 310.1645 Tj
+0 -227.8407 Td
 (3321 // ide_queue->qnext points to the next buf to be processed\
-.) 279.585 Tj
+.) 279.5849 Tj
 0 -237.334 Td
-(3322 // You must hold ide_lock while manipulating queue.) 244.637 Tj
-0 -246.827 Td
+(3322 // You must hold ide_lock while manipulating queue.) 244.6368 Tj
+0 -246.8274 Td
 (3323 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 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
+0 -265.8141 Td
+(3325 static struct buf *ide_queue;) 148.5295 Tj
+0 -275.3075 Td
 (3326 ) 21.8426 Tj
-0 -284.801 Td
-(3327 static int disk_1_present;) 135.424 Tj
-0 -294.294 Td
+0 -284.8008 Td
+(3327 static int disk_1_present;) 135.4239 Tj
+0 -294.2942 Td
 (3328 static void ide_start_request\(\);) 161.635 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (3329 ) 21.8426 Tj
-0 -313.281 Td
-(3330 // Wait for IDE disk to become ready.) 183.478 Tj
-0 -322.774 Td
+0 -313.2809 Td
+(3330 // Wait for IDE disk to become ready.) 183.4776 Tj
+0 -322.7743 Td
 (3331 static int) 65.5277 Tj
-0 -332.268 Td
-(3332 ide_wait_ready\(int check_error\)) 157.267 Tj
+0 -332.2676 Td
+(3332 ide_wait_ready\(int check_error\)) 157.2665 Tj
 0 -341.761 Td
 (3333 {) 26.2111 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (3334   int r;) 56.7907 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (3335 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (3336   while\(\(\(r = inb\(0x1f7\)\) & IDE_BSY\) || !\(r & IDE_\
-DRDY\)\)) 266.479 Tj
-0 -379.734 Td
+DRDY\)\)) 266.4794 Tj
+0 -379.7344 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
+0 -389.2278 Td
+(3338   if\(check_error && \(r & \(IDE_DF|IDE_ERR\)\) != 0\)) 231.5313 Tj
+0 -398.7211 Td
 (3339     return -1;) 83.0018 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (3340   return 0;) 69.8962 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (3341 }) 26.2111 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (3342 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (3343 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3344 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3345 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3346 ) 21.8426 Tj
 0 -474.668 Td
 (3347 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3348 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3349 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 33) 34.9481 Tj
 Q
 Q
@@ -12740,10 +12741,10 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/ide.c  Page 2) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/ide.c  Page 2) 157.2665 Tj
 0 -28.4801 Td
 (3350 void) 39.3166 Tj
 0 -37.9735 Td
@@ -12755,97 +12756,97 @@ q
 0 -66.4535 Td
 (3354 ) 21.8426 Tj
 0 -75.9469 Td
-(3355   initlock\(&ide_lock, "ide"\);) 148.529 Tj
+(3355   initlock\(&ide_lock, "ide"\);) 148.5295 Tj
 0 -85.4403 Td
-(3356   pic_enable\(IRQ_IDE\);) 117.95 Tj
+(3356   pic_enable\(IRQ_IDE\);) 117.9499 Tj
 0 -94.9336 Td
-(3357   ioapic_enable\(IRQ_IDE, ncpu - 1\);) 174.741 Tj
+(3357   ioapic_enable\(IRQ_IDE, ncpu - 1\);) 174.7406 Tj
 0 -104.427 Td
-(3358   ide_wait_ready\(0\);) 109.213 Tj
-0 -113.92 Td
+(3358   ide_wait_ready\(0\);) 109.2129 Tj
+0 -113.9203 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
+0 -123.4137 Td
+(3360   // Check if disk 1 is present) 157.2665 Tj
+0 -132.9071 Td
+(3361   outb\(0x1f6, 0xe0 | \(1<<4\)\);) 148.5295 Tj
+0 -142.4004 Td
+(3362   for\(i=0; i<1000; i++\){) 126.6869 Tj
+0 -151.8938 Td
+(3363     if\(inb\(0x1f7\) != 0\){) 126.6869 Tj
+0 -161.3871 Td
+(3364       disk_1_present = 1;) 131.0554 Tj
+0 -170.8805 Td
 (3365       break;) 74.2647 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (3366     }) 43.6851 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (3367   }) 34.9481 Tj
-0 -199.361 Td
+0 -199.3606 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
+0 -208.8539 Td
+(3369   // Switch back to disk 0.) 139.7925 Tj
+0 -218.3473 Td
+(3370   outb\(0x1f6, 0xe0 | \(0<<4\)\);) 148.5295 Tj
+0 -227.8407 Td
 (3371 }) 26.2111 Tj
 0 -237.334 Td
 (3372 ) 21.8426 Tj
-0 -246.827 Td
-(3373 // Start the request for b.  Caller must hold ide_lock.) 262.111 Tj
-0 -256.321 Td
+0 -246.8274 Td
+(3373 // Start the request for b.  Caller must hold ide_lock.) 262.1109 Tj
+0 -256.3207 Td
 (3374 static void) 69.8962 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (3375 ide_start_request\(struct buf *b\)) 161.635 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (3376 {) 26.2111 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (3377   if\(b == 0\)) 74.2647 Tj
-0 -294.294 Td
-(3378     panic\("ide_start_request"\);) 157.267 Tj
-0 -303.788 Td
+0 -294.2942 Td
+(3378     panic\("ide_start_request"\);) 157.2665 Tj
+0 -303.7875 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 -313.2809 Td
+(3380   ide_wait_ready\(0\);) 109.2129 Tj
+0 -322.7743 Td
+(3381   outb\(0x3f6, 0\);  // generate interrupt) 196.5831 Tj
+0 -332.2676 Td
+(3382   outb\(0x1f2, 1\);  // number of sectors) 192.2146 Tj
 0 -341.761 Td
 (3383   outb\(0x1f3, b->sector & 0xff\);) 161.635 Tj
-0 -351.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
+0 -351.2543 Td
+(3384   outb\(0x1f4, \(b->sector >> 8\) & 0xff\);) 192.2146 Tj
+0 -360.7477 Td
+(3385   outb\(0x1f5, \(b->sector >> 16\) & 0xff\);) 196.5831 Tj
+0 -370.2411 Td
 (3386   outb\(0x1f6, 0xe0 | \(\(b->dev&1\)<<4\) | \(\(b->sector>\
 >24\)&0x0f\)\);) 297.059 Tj
-0 -379.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
+0 -379.7344 Td
+(3387   if\(b->flags & B_DIRTY\){) 131.0554 Tj
+0 -389.2278 Td
+(3388     outb\(0x1f7, IDE_CMD_WRITE\);) 157.2665 Tj
+0 -398.7211 Td
+(3389     outsl\(0x1f0, b->data, 512/4\);) 166.0035 Tj
+0 -408.2145 Td
 (3390   } else {) 65.5277 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (3391     outb\(0x1f7, IDE_CMD_READ\);) 152.898 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (3392   }) 34.9481 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (3393 }) 26.2111 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3394 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3395 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3396 ) 21.8426 Tj
 0 -474.668 Td
 (3397 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3398 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3399 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 33) 34.9481 Tj
 Q
 Q
@@ -12874,8 +12875,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -12890,12 +12890,12 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/ide.c  Page 3) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/ide.c  Page 3) 157.2665 Tj
 0 -28.4801 Td
-(3400 // Interrupt handler.) 113.581 Tj
+(3400 // Interrupt handler.) 113.5814 Tj
 0 -37.9735 Td
 (3401 void) 39.3166 Tj
 0 -47.4668 Td
@@ -12907,94 +12907,94 @@ q
 0 -75.9469 Td
 (3405 ) 21.8426 Tj
 0 -85.4403 Td
-(3406   acquire\(&ide_lock\);) 113.581 Tj
+(3406   acquire\(&ide_lock\);) 113.5814 Tj
 0 -94.9336 Td
-(3407   if\(\(b = ide_queue\) == 0\){) 139.792 Tj
+(3407   if\(\(b = ide_queue\) == 0\){) 139.7925 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
+(3408     release\(&ide_lock\);) 122.3184 Tj
+0 -113.9203 Td
+(3409     return;) 69.8962 Tj
+0 -123.4137 Td
+(3410   }) 34.9481 Tj
+0 -132.9071 Td
+(3411 ) 21.8426 Tj
+0 -142.4004 Td
+(3412   // Read data if needed.) 131.0554 Tj
+0 -151.8938 Td
+(3413   if\(!\(b->flags & B_DIRTY\) && ide_wait_ready\(1\) >= 0\)) 253.3738 Tj
+0 -161.3871 Td
+(3414     insl\(0x1f0, b->data, 512/4\);) 161.635 Tj
+0 -170.8805 Td
+(3415 ) 21.8426 Tj
+0 -180.3739 Td
+(3416   // Wake process waiting for this buf.) 192.2146 Tj
+0 -189.8672 Td
+(3417   b->flags |= B_VALID;) 117.9499 Tj
+0 -199.3606 Td
+(3418   b->flags &= ~B_DIRTY;) 122.3184 Tj
+0 -208.8539 Td
+(3419   wakeup\(b\);) 74.2647 Tj
+0 -218.3473 Td
+(3420 ) 21.8426 Tj
+0 -227.8407 Td
+(3421   // Start disk on next buf in queue.) 183.4776 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
+(3422   if\(\(ide_queue = b->qnext\) != 0\)) 166.0035 Tj
+0 -246.8274 Td
+(3423     ide_start_request\(ide_queue\);) 166.0035 Tj
+0 -256.3207 Td
+(3424 ) 21.8426 Tj
+0 -265.8141 Td
+(3425   release\(&ide_lock\);) 113.5814 Tj
+0 -275.3075 Td
+(3426 }) 26.2111 Tj
+0 -284.8008 Td
+(3427 ) 21.8426 Tj
+0 -294.2942 Td
 (3428 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (3429 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (3430 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (3431 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (3432 ) 21.8426 Tj
 0 -341.761 Td
 (3433 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (3434 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (3435 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (3436 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (3437 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (3438 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (3439 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (3440 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (3441 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (3442 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (3443 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3444 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3445 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3446 ) 21.8426 Tj
 0 -474.668 Td
 (3447 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3448 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3449 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 34) 34.9481 Tj
 Q
 Q
@@ -13009,113 +13009,113 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/ide.c  Page 4) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/ide.c  Page 4) 157.2665 Tj
 0 -28.4801 Td
-(3450 // Sync buf with disk.) 117.95 Tj
+(3450 // Sync buf with disk.) 117.9499 Tj
 0 -37.9735 Td
 (3451 // If B_DIRTY is set, write buf to disk, clear B_DIRTY, se\
-t B_VALID.) 318.902 Tj
+t B_VALID.) 318.9016 Tj
 0 -47.4668 Td
 (3452 // Else if B_VALID is not set, read buf from disk, set B_V\
 ALID.) 297.059 Tj
 0 -56.9602 Td
 (3453 void) 39.3166 Tj
 0 -66.4535 Td
-(3454 ide_rw\(struct buf *b\)) 113.581 Tj
+(3454 ide_rw\(struct buf *b\)) 113.5814 Tj
 0 -75.9469 Td
 (3455 {) 26.2111 Tj
 0 -85.4403 Td
-(3456   struct buf **pp;) 100.476 Tj
+(3456   struct buf **pp;) 100.4758 Tj
 0 -94.9336 Td
 (3457 ) 21.8426 Tj
 0 -104.427 Td
-(3458   if\(!\(b->flags & B_BUSY\)\)) 135.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
+(3458   if\(!\(b->flags & B_BUSY\)\)) 135.4239 Tj
+0 -113.9203 Td
+(3459     panic\("ide_rw: buf not busy"\);) 170.3721 Tj
+0 -123.4137 Td
+(3460   if\(\(b->flags & \(B_VALID|B_DIRTY\)\) == B_VALID\)) 227.1628 Tj
+0 -132.9071 Td
+(3461     panic\("ide_rw: nothing to do"\);) 174.7406 Tj
+0 -142.4004 Td
+(3462   if\(b->dev != 0 && !disk_1_present\)) 179.1091 Tj
+0 -151.8938 Td
+(3463     panic\("ide disk 1 not present"\);) 179.1091 Tj
+0 -161.3871 Td
 (3464 ) 21.8426 Tj
-0 -170.88 Td
-(3465   acquire\(&ide_lock\);) 113.581 Tj
-0 -180.374 Td
+0 -170.8805 Td
+(3465   acquire\(&ide_lock\);) 113.5814 Tj
+0 -180.3739 Td
 (3466 ) 21.8426 Tj
-0 -189.867 Td
-(3467   // Append b to ide_queue.) 139.792 Tj
-0 -199.361 Td
+0 -189.8672 Td
+(3467   // Append b to ide_queue.) 139.7925 Tj
+0 -199.3606 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
+0 -208.8539 Td
+(3469   for\(pp=&ide_queue; *pp; pp=&\(*pp\)->qnext\)) 209.6887 Tj
+0 -218.3473 Td
 (3470     ;) 43.6851 Tj
-0 -227.841 Td
+0 -227.8407 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
+0 -246.8274 Td
+(3473   // Start disk if necessary.) 148.5295 Tj
+0 -256.3207 Td
+(3474   if\(ide_queue == b\)) 109.2129 Tj
+0 -265.8141 Td
+(3475     ide_start_request\(b\);) 131.0554 Tj
+0 -275.3075 Td
 (3476 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 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
+0 -294.2942 Td
+(3478   // Assuming will not sleep too long: ignore cp->killed.) 270.8479 Tj
+0 -303.7875 Td
+(3479   while\(\(b->flags & \(B_VALID|B_DIRTY\)\) != B_VALID\)) 240.2683 Tj
+0 -313.2809 Td
+(3480     sleep\(b, &ide_lock\);) 126.6869 Tj
+0 -322.7743 Td
 (3481 ) 21.8426 Tj
-0 -332.268 Td
-(3482   release\(&ide_lock\);) 113.581 Tj
+0 -332.2676 Td
+(3482   release\(&ide_lock\);) 113.5814 Tj
 0 -341.761 Td
 (3483 }) 26.2111 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (3484 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (3485 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (3486 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (3487 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (3488 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (3489 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (3490 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (3491 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (3492 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (3493 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3494 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3495 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3496 ) 21.8426 Tj
 0 -474.668 Td
 (3497 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3498 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3499 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 34) 34.9481 Tj
 Q
 Q
@@ -13144,8 +13144,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -13160,17 +13159,17 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/bio.c  Page 1) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/bio.c  Page 1) 157.2665 Tj
 0 -28.4801 Td
 (3500 // Buffer cache.) 91.7388 Tj
 0 -37.9735 Td
 (3501 //) 30.5796 Tj
 0 -47.4668 Td
 (3502 // The buffer cache is a linked list of buf structures hol\
-ding) 292.69 Tj
+ding) 292.6905 Tj
 0 -56.9602 Td
 (3503 // cached copies of disk block contents.  Caching disk blo\
 cks) 288.322 Tj
@@ -13179,7 +13178,7 @@ cks) 288.322 Tj
 vides) 297.059 Tj
 0 -75.9469 Td
 (3505 // a synchronization point for disk blocks used by multipl\
-e processes.) 327.639 Tj
+e processes.) 327.6386 Tj
 0 -85.4403 Td
 (3506 //) 30.5796 Tj
 0 -94.9336 Td
@@ -13187,90 +13186,90 @@ e processes.) 327.639 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
+0 -113.9203 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
+0 -123.4137 Td
+(3510 // * When done with the buffer, call brelse.) 214.0572 Tj
+0 -132.9071 Td
+(3511 // * Do not use the buffer after calling brelse.) 231.5313 Tj
+0 -142.4004 Td
+(3512 // * Only one process at a time can use a buffer,) 235.8998 Tj
+0 -151.8938 Td
+(3513 //     so do not keep them longer than necessary.) 235.8998 Tj
+0 -161.3871 Td
 (3514 //) 30.5796 Tj
-0 -170.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 -170.8805 Td
+(3515 // The implementation uses three state flags internally:) 266.4794 Tj
+0 -180.3739 Td
+(3516 // * B_BUSY: the block has been returned from bread) 244.6368 Tj
+0 -189.8672 Td
+(3517 //     and has not been passed back to brelse.) 222.7942 Tj
+0 -199.3606 Td
+(3518 // * B_VALID: the buffer data has been initialized) 240.2683 Tj
+0 -208.8539 Td
+(3519 //     with the associated disk block contents.) 227.1628 Tj
+0 -218.3473 Td
+(3520 // * B_DIRTY: the buffer data has been modified) 227.1628 Tj
+0 -227.8407 Td
+(3521 //     and needs to be written to disk.) 192.2146 Tj
 0 -237.334 Td
 (3522 ) 21.8426 Tj
-0 -246.827 Td
-(3523 #include "types.h") 100.476 Tj
-0 -256.321 Td
+0 -246.8274 Td
+(3523 #include "types.h") 100.4758 Tj
+0 -256.3207 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
+0 -265.8141 Td
+(3525 #include "param.h") 100.4758 Tj
+0 -275.3075 Td
+(3526 #include "spinlock.h") 113.5814 Tj
+0 -284.8008 Td
 (3527 #include "buf.h") 91.7388 Tj
-0 -294.294 Td
+0 -294.2942 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
+0 -303.7875 Td
+(3529 struct buf buf[NBUF];) 113.5814 Tj
+0 -313.2809 Td
+(3530 struct spinlock buf_table_lock;) 157.2665 Tj
+0 -322.7743 Td
 (3531 ) 21.8426 Tj
-0 -332.268 Td
-(3532 // Linked list of all buffers, through prev/next.) 235.9 Tj
+0 -332.2676 Td
+(3532 // Linked list of all buffers, through prev/next.) 235.8998 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
+(3533 // bufhead->next is most recently used.) 192.2146 Tj
+0 -351.2543 Td
+(3534 // bufhead->tail is least recently used.) 196.5831 Tj
+0 -360.7477 Td
+(3535 struct buf bufhead;) 104.8443 Tj
+0 -370.2411 Td
 (3536 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (3537 void) 39.3166 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (3538 binit\(void\)) 69.8962 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (3539 {) 26.2111 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (3540   struct buf *b;) 91.7388 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (3541 ) 21.8426 Tj
-0 -427.201 Td
-(3542   initlock\(&buf_table_lock, "buf_table"\);) 200.952 Tj
-0 -436.695 Td
+0 -427.2012 Td
+(3542   initlock\(&buf_table_lock, "buf_table"\);) 200.9517 Tj
+0 -436.6946 Td
 (3543 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3544 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3545 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3546 ) 21.8426 Tj
 0 -474.668 Td
 (3547 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3548 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3549 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 35) 34.9481 Tj
 Q
 Q
@@ -13285,111 +13284,111 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/bio.c  Page 2) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/bio.c  Page 2) 157.2665 Tj
 0 -28.4801 Td
-(3550   // Create linked list of buffers) 170.372 Tj
+(3550   // Create linked list of buffers) 170.3721 Tj
 0 -37.9735 Td
-(3551   bufhead.prev = &bufhead;) 135.424 Tj
+(3551   bufhead.prev = &bufhead;) 135.4239 Tj
 0 -47.4668 Td
-(3552   bufhead.next = &bufhead;) 135.424 Tj
+(3552   bufhead.next = &bufhead;) 135.4239 Tj
 0 -56.9602 Td
-(3553   for\(b = buf; b < buf+NBUF; b++\){) 170.372 Tj
+(3553   for\(b = buf; b < buf+NBUF; b++\){) 170.3721 Tj
 0 -66.4535 Td
-(3554     b->next = bufhead.next;) 139.792 Tj
+(3554     b->next = bufhead.next;) 139.7925 Tj
 0 -75.9469 Td
-(3555     b->prev = &bufhead;) 122.318 Tj
+(3555     b->prev = &bufhead;) 122.3184 Tj
 0 -85.4403 Td
-(3556     bufhead.next->prev = b;) 139.792 Tj
+(3556     bufhead.next->prev = b;) 139.7925 Tj
 0 -94.9336 Td
-(3557     bufhead.next = b;) 113.581 Tj
+(3557     bufhead.next = b;) 113.5814 Tj
 0 -104.427 Td
 (3558   }) 34.9481 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (3559 }) 26.2111 Tj
-0 -123.414 Td
+0 -123.4137 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
+0 -132.9071 Td
+(3561 // Look through buffer cache for sector on device dev.) 257.7424 Tj
+0 -142.4004 Td
+(3562 // If not found, allocate fresh block.) 187.8461 Tj
+0 -151.8938 Td
+(3563 // In either case, return locked buffer.) 196.5831 Tj
+0 -161.3871 Td
+(3564 static struct buf*) 100.4758 Tj
+0 -170.8805 Td
+(3565 bget\(uint dev, uint sector\)) 139.7925 Tj
+0 -180.3739 Td
 (3566 {) 26.2111 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (3567   struct buf *b;) 91.7388 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (3568 ) 21.8426 Tj
-0 -208.854 Td
-(3569   acquire\(&buf_table_lock\);) 139.792 Tj
-0 -218.347 Td
+0 -208.8539 Td
+(3569   acquire\(&buf_table_lock\);) 139.7925 Tj
+0 -218.3473 Td
 (3570 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 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
+(3572   // Try for cached block.) 135.4239 Tj
+0 -246.8274 Td
+(3573   for\(b = bufhead.next; b != &bufhead; b = b->next\){) 249.0053 Tj
+0 -256.3207 Td
+(3574     if\(\(b->flags & \(B_BUSY|B_VALID\)\) &&) 192.2146 Tj
+0 -265.8141 Td
+(3575        b->dev == dev && b->sector == sector\){) 218.4257 Tj
+0 -275.3075 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
+0 -284.8008 Td
+(3577         sleep\(buf, &buf_table_lock\);) 179.1091 Tj
+0 -294.2942 Td
+(3578         goto loop;) 100.4758 Tj
+0 -303.7875 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
+0 -313.2809 Td
+(3580       b->flags |= B_BUSY;) 131.0554 Tj
+0 -322.7743 Td
+(3581       release\(&buf_table_lock\);) 157.2665 Tj
+0 -332.2676 Td
 (3582       return b;) 87.3703 Tj
 0 -341.761 Td
 (3583     }) 43.6851 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (3584   }) 34.9481 Tj
-0 -360.748 Td
+0 -360.7477 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
+0 -370.2411 Td
+(3586   // Allocate fresh block.) 135.4239 Tj
+0 -379.7344 Td
+(3587   for\(b = bufhead.prev; b != &bufhead; b = b->prev\){) 249.0053 Tj
+0 -389.2278 Td
+(3588     if\(\(b->flags & B_BUSY\) == 0\){) 166.0035 Tj
+0 -398.7211 Td
+(3589       b->flags = B_BUSY;) 126.6869 Tj
+0 -408.2145 Td
+(3590       b->dev = dev;) 104.8443 Tj
+0 -417.7079 Td
+(3591       b->sector = sector;) 131.0554 Tj
+0 -427.2012 Td
+(3592       release\(&buf_table_lock\);) 157.2665 Tj
+0 -436.6946 Td
 (3593       return b;) 87.3703 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3594     }) 43.6851 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3595   }) 34.9481 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3596   panic\("bget: no buffers"\);) 144.161 Tj
 0 -474.668 Td
 (3597 }) 26.2111 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3598 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3599 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 35) 34.9481 Tj
 Q
 Q
@@ -13418,8 +13417,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -13434,13 +13432,13 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/bio.c  Page 3) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/bio.c  Page 3) 157.2665 Tj
 0 -28.4801 Td
 (3600 // Return a B_BUSY buf with the contents of the indicated \
-disk sector.) 327.639 Tj
+disk sector.) 327.6386 Tj
 0 -37.9735 Td
 (3601 struct buf*) 69.8962 Tj
 0 -47.4668 Td
@@ -13452,94 +13450,94 @@ disk sector.) 327.639 Tj
 0 -75.9469 Td
 (3605 ) 21.8426 Tj
 0 -85.4403 Td
-(3606   b = bget\(dev, sector\);) 126.687 Tj
+(3606   b = bget\(dev, sector\);) 126.6869 Tj
 0 -94.9336 Td
-(3607   if\(!\(b->flags & B_VALID\)\)) 139.792 Tj
+(3607   if\(!\(b->flags & B_VALID\)\)) 139.7925 Tj
 0 -104.427 Td
 (3608     ide_rw\(b\);) 83.0018 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (3609   return b;) 69.8962 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (3610 }) 26.2111 Tj
-0 -132.907 Td
+0 -132.9071 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
+0 -142.4004 Td
+(3612 // Write buf's contents to disk.  Must be locked.) 235.8998 Tj
+0 -151.8938 Td
 (3613 void) 39.3166 Tj
-0 -161.387 Td
-(3614 bwrite\(struct buf *b\)) 113.581 Tj
-0 -170.88 Td
+0 -161.3871 Td
+(3614 bwrite\(struct buf *b\)) 113.5814 Tj
+0 -170.8805 Td
 (3615 {) 26.2111 Tj
-0 -180.374 Td
+0 -180.3739 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
+0 -189.8672 Td
+(3617     panic\("bwrite"\);) 109.2129 Tj
+0 -199.3606 Td
+(3618   b->flags |= B_DIRTY;) 117.9499 Tj
+0 -208.8539 Td
 (3619   ide_rw\(b\);) 74.2647 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (3620 }) 26.2111 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (3621 ) 21.8426 Tj
 0 -237.334 Td
-(3622 // Release the buffer buf.) 135.424 Tj
-0 -246.827 Td
+(3622 // Release the buffer buf.) 135.4239 Tj
+0 -246.8274 Td
 (3623 void) 39.3166 Tj
-0 -256.321 Td
-(3624 brelse\(struct buf *b\)) 113.581 Tj
-0 -265.814 Td
+0 -256.3207 Td
+(3624 brelse\(struct buf *b\)) 113.5814 Tj
+0 -265.8141 Td
 (3625 {) 26.2111 Tj
-0 -275.307 Td
+0 -275.3075 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
+0 -284.8008 Td
+(3627     panic\("brelse"\);) 109.2129 Tj
+0 -294.2942 Td
 (3628 ) 21.8426 Tj
-0 -303.788 Td
-(3629   acquire\(&buf_table_lock\);) 139.792 Tj
-0 -313.281 Td
+0 -303.7875 Td
+(3629   acquire\(&buf_table_lock\);) 139.7925 Tj
+0 -313.2809 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 -322.7743 Td
+(3631   b->next->prev = b->prev;) 135.4239 Tj
+0 -332.2676 Td
+(3632   b->prev->next = b->next;) 135.4239 Tj
 0 -341.761 Td
-(3633   b->next = 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
+(3633   b->next = bufhead.next;) 131.0554 Tj
+0 -351.2543 Td
+(3634   b->prev = &bufhead;) 113.5814 Tj
+0 -360.7477 Td
+(3635   bufhead.next->prev = b;) 131.0554 Tj
+0 -370.2411 Td
+(3636   bufhead.next = b;) 104.8443 Tj
+0 -379.7344 Td
 (3637 ) 21.8426 Tj
-0 -389.228 Td
-(3638   b->flags &= ~B_BUSY;) 117.95 Tj
-0 -398.721 Td
+0 -389.2278 Td
+(3638   b->flags &= ~B_BUSY;) 117.9499 Tj
+0 -398.7211 Td
 (3639   wakeup\(buf\);) 83.0018 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (3640 ) 21.8426 Tj
-0 -417.708 Td
-(3641   release\(&buf_table_lock\);) 139.792 Tj
-0 -427.201 Td
+0 -417.7079 Td
+(3641   release\(&buf_table_lock\);) 139.7925 Tj
+0 -427.2012 Td
 (3642 }) 26.2111 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (3643 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3644 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3645 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3646 ) 21.8426 Tj
 0 -474.668 Td
 (3647 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3648 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3649 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 36) 34.9481 Tj
 Q
 Q
@@ -13554,19 +13552,19 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 1) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/fs.c  Page 1) 152.898 Tj
 0 -28.4801 Td
-(3650 // File system implementation.  Four layers:) 214.057 Tj
+(3650 // File system implementation.  Four layers:) 214.0572 Tj
 0 -37.9735 Td
-(3651 //   + Blocks: allocator for raw disk blocks.) 218.426 Tj
+(3651 //   + Blocks: allocator for raw disk blocks.) 218.4257 Tj
 0 -47.4668 Td
-(3652 //   + Files: inode allocator, reading, writing, metadata.) 275.216 Tj
+(3652 //   + Files: inode allocator, reading, writing, metadata.) 275.2164 Tj
 0 -56.9602 Td
 (3653 //   + Directories: inode with special contents \(list of \
-other inodes!\)) 332.007 Tj
+other inodes!\)) 332.0071 Tj
 0 -66.4535 Td
 (3654 //   + Names: paths like /usr/rtm/xv6/fs.c for convenient \
 naming.) 305.796 Tj
@@ -13574,96 +13572,96 @@ naming.) 305.796 Tj
 (3655 //) 30.5796 Tj
 0 -85.4403 Td
 (3656 // Disk layout is: superblock, inodes, block in-use bitmap\
-, data blocks.) 336.376 Tj
+, data blocks.) 336.3756 Tj
 0 -94.9336 Td
 (3657 //) 30.5796 Tj
 0 -104.427 Td
 (3658 // This file contains the low-level file system manipulati\
-on) 283.953 Tj
-0 -113.92 Td
+on) 283.9534 Tj
+0 -113.9203 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
+ions) 283.9534 Tj
+0 -123.4137 Td
+(3660 // are in sysfile.c.) 109.2129 Tj
+0 -132.9071 Td
 (3661 ) 21.8426 Tj
-0 -142.4 Td
-(3662 #include "types.h") 100.476 Tj
-0 -151.894 Td
+0 -142.4004 Td
+(3662 #include "types.h") 100.4758 Tj
+0 -151.8938 Td
 (3663 #include "defs.h") 96.1073 Tj
-0 -161.387 Td
-(3664 #include "param.h") 100.476 Tj
-0 -170.88 Td
+0 -161.3871 Td
+(3664 #include "param.h") 100.4758 Tj
+0 -170.8805 Td
 (3665 #include "stat.h") 96.1073 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (3666 #include "mmu.h") 91.7388 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (3667 #include "proc.h") 96.1073 Tj
-0 -199.361 Td
-(3668 #include "spinlock.h") 113.581 Tj
-0 -208.854 Td
+0 -199.3606 Td
+(3668 #include "spinlock.h") 113.5814 Tj
+0 -208.8539 Td
 (3669 #include "buf.h") 91.7388 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (3670 #include "fs.h") 87.3703 Tj
-0 -227.841 Td
-(3671 #include "fsvar.h") 100.476 Tj
+0 -227.8407 Td
+(3671 #include "fsvar.h") 100.4758 Tj
 0 -237.334 Td
 (3672 #include "dev.h") 91.7388 Tj
-0 -246.827 Td
+0 -246.8274 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
+0 -256.3207 Td
+(3674 #define min\(a, b\) \(\(a\) < \(b\) ? \(a\) : \(b\)\)) 200.9517 Tj
+0 -265.8141 Td
+(3675 static void itrunc\(struct inode*\);) 170.3721 Tj
+0 -275.3075 Td
 (3676 ) 21.8426 Tj
-0 -284.801 Td
-(3677 // Read the super block.) 126.687 Tj
-0 -294.294 Td
+0 -284.8008 Td
+(3677 // Read the super block.) 126.6869 Tj
+0 -294.2942 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
+0 -303.7875 Td
+(3679 readsb\(int dev, struct superblock *sb\)) 187.8461 Tj
+0 -313.2809 Td
 (3680 {) 26.2111 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (3681   struct buf *bp;) 96.1073 Tj
-0 -332.268 Td
+0 -332.2676 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
+(3683   bp = bread\(dev, 1\);) 113.5814 Tj
+0 -351.2543 Td
+(3684   memmove\(sb, bp->data, sizeof\(*sb\)\);) 183.4776 Tj
+0 -360.7477 Td
 (3685   brelse\(bp\);) 78.6333 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (3686 }) 26.2111 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (3687 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (3688 // Zero a block.) 91.7388 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (3689 static void) 69.8962 Tj
-0 -408.214 Td
-(3690 bzero\(int dev, int bno\)) 122.318 Tj
-0 -417.708 Td
+0 -408.2145 Td
+(3690 bzero\(int dev, int bno\)) 122.3184 Tj
+0 -417.7079 Td
 (3691 {) 26.2111 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (3692   struct buf *bp;) 96.1073 Tj
-0 -436.695 Td
+0 -436.6946 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
+0 -446.1879 Td
+(3694   bp = bread\(dev, bno\);) 122.3184 Tj
+0 -455.6813 Td
+(3695   memset\(bp->data, 0, BSIZE\);) 148.5295 Tj
+0 -465.1747 Td
 (3696   bwrite\(bp\);) 78.6333 Tj
 0 -474.668 Td
 (3697   brelse\(bp\);) 78.6333 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3698 }) 26.2111 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3699 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 36) 34.9481 Tj
 Q
 Q
@@ -13692,8 +13690,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -13708,16 +13705,16 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 2) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+(3702 // Allocate a disk block.) 131.0554 Tj
 0 -56.9602 Td
 (3703 static uint) 69.8962 Tj
 0 -66.4535 Td
@@ -13729,92 +13726,92 @@ q
 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
+(3708   struct superblock sb;) 122.3184 Tj
+0 -113.9203 Td
 (3709 ) 21.8426 Tj
-0 -123.414 Td
+0 -123.4137 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
+0 -132.9071 Td
+(3711   readsb\(dev, &sb\);) 104.8443 Tj
+0 -142.4004 Td
+(3712   for\(b = 0; b < sb.size; b += BPB\){) 179.1091 Tj
+0 -151.8938 Td
+(3713     bp = bread\(dev, BBLOCK\(b, sb.ninodes\)\);) 209.6887 Tj
+0 -161.3871 Td
 (3714     for\(bi = 0; bi < BPB; bi++\){) 161.635 Tj
-0 -170.88 Td
-(3715       m = 1 << \(bi % 8\);) 126.687 Tj
-0 -180.374 Td
+0 -170.8805 Td
+(3715       m = 1 << \(bi % 8\);) 126.6869 Tj
+0 -180.3739 Td
 (3716       if\(\(bp->data[bi/8] & m\) == 0\){  // Is block free\
-?) 262.111 Tj
-0 -189.867 Td
+?) 262.1109 Tj
+0 -189.8672 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
+.) 279.5849 Tj
+0 -199.3606 Td
+(3718         bwrite\(bp\);) 104.8443 Tj
+0 -208.8539 Td
+(3719         brelse\(bp\);) 104.8443 Tj
+0 -218.3473 Td
+(3720         return b + bi;) 117.9499 Tj
+0 -227.8407 Td
 (3721       }) 52.4222 Tj
 0 -237.334 Td
 (3722     }) 43.6851 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (3723     brelse\(bp\);) 87.3703 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (3724   }) 34.9481 Tj
-0 -265.814 Td
-(3725   panic\("balloc: out of blocks"\);) 166.004 Tj
-0 -275.307 Td
+0 -265.8141 Td
+(3725   panic\("balloc: out of blocks"\);) 166.0035 Tj
+0 -275.3075 Td
 (3726 }) 26.2111 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (3727 ) 21.8426 Tj
-0 -294.294 Td
-(3728 // Free a disk block.) 113.581 Tj
-0 -303.788 Td
+0 -294.2942 Td
+(3728 // Free a disk block.) 113.5814 Tj
+0 -303.7875 Td
 (3729 static void) 69.8962 Tj
-0 -313.281 Td
-(3730 bfree\(int dev, uint b\)) 117.95 Tj
-0 -322.774 Td
+0 -313.2809 Td
+(3730 bfree\(int dev, uint b\)) 117.9499 Tj
+0 -322.7743 Td
 (3731 {) 26.2111 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (3732   struct buf *bp;) 96.1073 Tj
 0 -341.761 Td
-(3733   struct superblock sb;) 122.318 Tj
-0 -351.254 Td
+(3733   struct superblock sb;) 122.3184 Tj
+0 -351.2543 Td
 (3734   int bi, m;) 74.2647 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (3735 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (3736   bzero\(dev, b\);) 91.7388 Tj
-0 -379.734 Td
+0 -379.7344 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
+0 -389.2278 Td
+(3738   readsb\(dev, &sb\);) 104.8443 Tj
+0 -398.7211 Td
+(3739   bp = bread\(dev, BBLOCK\(b, sb.ninodes\)\);) 200.9517 Tj
+0 -408.2145 Td
 (3740   bi = b % BPB;) 87.3703 Tj
-0 -417.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
+0 -417.7079 Td
+(3741   m = 1 << \(bi % 8\);) 109.2129 Tj
+0 -427.2012 Td
+(3742   if\(\(bp->data[bi/8] & m\) == 0\)) 157.2665 Tj
+0 -436.6946 Td
 (3743     panic\("freeing free block"\);) 161.635 Tj
-0 -446.188 Td
-(3744   bp->data[bi/8] &= ~m;  // Mark block free on disk.) 249.005 Tj
-0 -455.681 Td
+0 -446.1879 Td
+(3744   bp->data[bi/8] &= ~m;  // Mark block free on disk.) 249.0053 Tj
+0 -455.6813 Td
 (3745   bwrite\(bp\);) 78.6333 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3746   brelse\(bp\);) 78.6333 Tj
 0 -474.668 Td
 (3747 }) 26.2111 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3748 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3749 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 37) 34.9481 Tj
 Q
 Q
@@ -13829,123 +13826,123 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 3) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+(3752 // An inode is a single, unnamed file in the file system.) 270.8479 Tj
 0 -56.9602 Td
 (3753 // The inode disk structure holds metadata \(the type, dev\
-ice numbers,) 323.27 Tj
+ice numbers,) 323.2701 Tj
 0 -66.4535 Td
 (3754 // and data size\) along with a list of blocks where the a\
-ssociated) 310.165 Tj
+ssociated) 310.1645 Tj
 0 -75.9469 Td
-(3755 // data can be found.) 113.581 Tj
+(3755 // data can be found.) 113.5814 Tj
 0 -85.4403 Td
 (3756 //) 30.5796 Tj
 0 -94.9336 Td
 (3757 // The inodes are laid out sequentially on disk immediatel\
 y after) 305.796 Tj
 0 -104.427 Td
-(3758 // the superblock.  The kernel keeps a cache of the in-use) 275.216 Tj
-0 -113.92 Td
+(3758 // the superblock.  The kernel keeps a cache of the in-use) 275.2164 Tj
+0 -113.9203 Td
 (3759 // on-disk structures to provide a place for synchronizing\
  access) 305.796 Tj
-0 -123.414 Td
-(3760 // to inodes shared between multiple processes.) 227.163 Tj
-0 -132.907 Td
+0 -123.4137 Td
+(3760 // to inodes shared between multiple processes.) 227.1628 Tj
+0 -132.9071 Td
 (3761 //) 30.5796 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (3762 // ip->ref counts the number of pointer references to this\
  cached) 305.796 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (3763 // inode; references are typically kept in struct file and\
- in cp->cwd.) 327.639 Tj
-0 -161.387 Td
+ in cp->cwd.) 327.6386 Tj
+0 -161.3871 Td
 (3764 // When ip->ref falls to zero, the inode is no longer cach\
 ed.) 288.322 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (3765 // It is an error to use an inode without holding a refere\
-nce to it.) 318.902 Tj
-0 -180.374 Td
+nce to it.) 318.9016 Tj
+0 -180.3739 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 -189.8672 Td
+(3767 // Processes are only allowed to read and write inode) 253.3738 Tj
+0 -199.3606 Td
+(3768 // metadata and contents when holding the inode's lock,) 262.1109 Tj
+0 -208.8539 Td
+(3769 // represented by the I_BUSY flag in the in-memory copy.) 266.4794 Tj
+0 -218.3473 Td
+(3770 // Because inode locks are held during disk accesses,) 253.3738 Tj
+0 -227.8407 Td
+(3771 // they are implemented using a flag rather than with) 253.3738 Tj
 0 -237.334 Td
-(3772 // spin locks.  Callers are responsible for locking) 244.637 Tj
-0 -246.827 Td
+(3772 // spin locks.  Callers are responsible for locking) 244.6368 Tj
+0 -246.8274 Td
 (3773 // inodes before passing them to routines in this file; le\
 aving) 297.059 Tj
-0 -256.321 Td
+0 -256.3207 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
+0 -265.8141 Td
+(3775 // to create arbitrarily-sized atomic operations.) 235.8998 Tj
+0 -275.3075 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
+0 -284.8008 Td
+(3777 // To give maximum control over locking to the callers,) 262.1109 Tj
+0 -294.2942 Td
+(3778 // the routines in this file that return inode pointers) 262.1109 Tj
+0 -303.7875 Td
 (3779 // return pointers to *unlocked* inodes.  It is the caller\
-s') 283.953 Tj
-0 -313.281 Td
+s') 283.9534 Tj
+0 -313.2809 Td
 (3780 // responsibility to lock them before using them.  A non-z\
 ero) 288.322 Tj
-0 -322.774 Td
-(3781 // ip->ref keeps these unlocked inodes in the cache.) 249.005 Tj
-0 -332.268 Td
+0 -322.7743 Td
+(3781 // ip->ref keeps these unlocked inodes in the cache.) 249.0053 Tj
+0 -332.2676 Td
 (3782 ) 21.8426 Tj
 0 -341.761 Td
 (3783 struct {) 56.7907 Tj
-0 -351.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
+0 -351.2543 Td
+(3784   struct spinlock lock;) 122.3184 Tj
+0 -360.7477 Td
+(3785   struct inode inode[NINODE];) 148.5295 Tj
+0 -370.2411 Td
 (3786 } icache;) 61.1592 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (3787 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (3788 void) 39.3166 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (3789 iinit\(void\)) 69.8962 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (3790 {) 26.2111 Tj
-0 -417.708 Td
-(3791   initlock\(&icache.lock, "icache.lock"\);) 196.583 Tj
-0 -427.201 Td
+0 -417.7079 Td
+(3791   initlock\(&icache.lock, "icache.lock"\);) 196.5831 Tj
+0 -427.2012 Td
 (3792 }) 26.2111 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (3793 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3794 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3795 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3796 ) 21.8426 Tj
 0 -474.668 Td
 (3797 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3798 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3799 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 37) 34.9481 Tj
 Q
 Q
@@ -13974,8 +13971,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -13990,114 +13986,114 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 4) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+(3800 // Find the inode with number inum on device dev) 231.5313 Tj
 0 -37.9735 Td
-(3801 // and return the in-memory copy.) 166.004 Tj
+(3801 // and return the in-memory copy.) 166.0035 Tj
 0 -47.4668 Td
-(3802 static struct inode*) 109.213 Tj
+(3802 static struct inode*) 109.2129 Tj
 0 -56.9602 Td
-(3803 iget\(uint dev, uint inum\)) 131.055 Tj
+(3803 iget\(uint dev, uint inum\)) 131.0554 Tj
 0 -66.4535 Td
 (3804 {) 26.2111 Tj
 0 -75.9469 Td
-(3805   struct inode *ip, *empty;) 139.792 Tj
+(3805   struct inode *ip, *empty;) 139.7925 Tj
 0 -85.4403 Td
 (3806 ) 21.8426 Tj
 0 -94.9336 Td
-(3807   acquire\(&icache.lock\);) 126.687 Tj
+(3807   acquire\(&icache.lock\);) 126.6869 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
+0 -113.9203 Td
+(3809   // Try for cached inode.) 135.4239 Tj
+0 -123.4137 Td
 (3810   empty = 0;) 74.2647 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (3811   for\(ip = &icache.inode[0]; ip < &icache.inode[NINODE]; \
 ip++\){) 297.059 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (3812     if\(ip->ref > 0 && ip->dev == dev && ip->inum == inum\)\
-{) 275.216 Tj
-0 -151.894 Td
+{) 275.2164 Tj
+0 -151.8938 Td
 (3813       ip->ref++;) 91.7388 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (3814       release\(&icache.lock\);) 144.161 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (3815       return ip;) 91.7388 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (3816     }) 43.6851 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (3817     if\(empty == 0 && ip->ref == 0\)    // Remember empty \
 slot.) 288.322 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (3818       empty = ip;) 96.1073 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (3819   }) 34.9481 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (3820 ) 21.8426 Tj
-0 -227.841 Td
-(3821   // Allocate fresh inode.) 135.424 Tj
+0 -227.8407 Td
+(3821   // Allocate fresh inode.) 135.4239 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
+0 -246.8274 Td
+(3823     panic\("iget: no inodes"\);) 148.5295 Tj
+0 -256.3207 Td
 (3824 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (3825   ip = empty;) 78.6333 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (3826   ip->dev = dev;) 91.7388 Tj
-0 -284.801 Td
-(3827   ip->inum = inum;) 100.476 Tj
-0 -294.294 Td
+0 -284.8008 Td
+(3827   ip->inum = inum;) 100.4758 Tj
+0 -294.2942 Td
 (3828   ip->ref = 1;) 83.0018 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (3829   ip->flags = 0;) 91.7388 Tj
-0 -313.281 Td
-(3830   release\(&icache.lock\);) 126.687 Tj
-0 -322.774 Td
+0 -313.2809 Td
+(3830   release\(&icache.lock\);) 126.6869 Tj
+0 -322.7743 Td
 (3831 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (3832   return ip;) 74.2647 Tj
 0 -341.761 Td
 (3833 }) 26.2111 Tj
-0 -351.254 Td
+0 -351.2543 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
+0 -360.7477 Td
+(3835 // Increment reference count for ip.) 179.1091 Tj
+0 -370.2411 Td
+(3836 // Returns ip to enable ip = idup\(ip1\) idiom.) 218.4257 Tj
+0 -379.7344 Td
 (3837 struct inode*) 78.6333 Tj
-0 -389.228 Td
-(3838 idup\(struct inode *ip\)) 117.95 Tj
-0 -398.721 Td
+0 -389.2278 Td
+(3838 idup\(struct inode *ip\)) 117.9499 Tj
+0 -398.7211 Td
 (3839 {) 26.2111 Tj
-0 -408.214 Td
-(3840   acquire\(&icache.lock\);) 126.687 Tj
-0 -417.708 Td
+0 -408.2145 Td
+(3840   acquire\(&icache.lock\);) 126.6869 Tj
+0 -417.7079 Td
 (3841   ip->ref++;) 74.2647 Tj
-0 -427.201 Td
-(3842   release\(&icache.lock\);) 126.687 Tj
-0 -436.695 Td
+0 -427.2012 Td
+(3842   release\(&icache.lock\);) 126.6869 Tj
+0 -436.6946 Td
 (3843   return ip;) 74.2647 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3844 }) 26.2111 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3845 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3846 ) 21.8426 Tj
 0 -474.668 Td
 (3847 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3848 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3849 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 38) 34.9481 Tj
 Q
 Q
@@ -14112,111 +14108,111 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 5) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/fs.c  Page 5) 152.898 Tj
 0 -28.4801 Td
-(3850 // Lock the given inode.) 126.687 Tj
+(3850 // Lock the given inode.) 126.6869 Tj
 0 -37.9735 Td
 (3851 void) 39.3166 Tj
 0 -47.4668 Td
-(3852 ilock\(struct inode *ip\)) 122.318 Tj
+(3852 ilock\(struct inode *ip\)) 122.3184 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
+(3855   struct dinode *dip;) 113.5814 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
+(3858     panic\("ilock"\);) 104.8443 Tj
+0 -113.9203 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
+0 -123.4137 Td
+(3860   acquire\(&icache.lock\);) 126.6869 Tj
+0 -132.9071 Td
+(3861   while\(ip->flags & I_BUSY\)) 139.7925 Tj
+0 -142.4004 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
+0 -151.8938 Td
+(3863   ip->flags |= I_BUSY;) 117.9499 Tj
+0 -161.3871 Td
+(3864   release\(&icache.lock\);) 126.6869 Tj
+0 -170.8805 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 -180.3739 Td
+(3866   if\(!\(ip->flags & I_VALID\)\){) 148.5295 Tj
+0 -189.8672 Td
+(3867     bp = bread\(ip->dev, IBLOCK\(ip->inum\)\);) 205.3202 Tj
+0 -199.3606 Td
+(3868     dip = \(struct dinode*\)bp->data + ip->inum%IPB;) 240.2683 Tj
+0 -208.8539 Td
+(3869     ip->type = dip->type;) 131.0554 Tj
+0 -218.3473 Td
+(3870     ip->major = dip->major;) 139.7925 Tj
+0 -227.8407 Td
+(3871     ip->minor = dip->minor;) 139.7925 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
+(3872     ip->nlink = dip->nlink;) 139.7925 Tj
+0 -246.8274 Td
+(3873     ip->size = dip->size;) 131.0554 Tj
+0 -256.3207 Td
+(3874     memmove\(ip->addrs, dip->addrs, sizeof\(ip->addrs\)\);) 257.7424 Tj
+0 -265.8141 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
+0 -275.3075 Td
+(3876     ip->flags |= I_VALID;) 131.0554 Tj
+0 -284.8008 Td
+(3877     if\(ip->type == 0\)) 113.5814 Tj
+0 -294.2942 Td
 (3878       panic\("ilock: no type"\);) 152.898 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (3879   }) 34.9481 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (3880 }) 26.2111 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (3881 ) 21.8426 Tj
-0 -332.268 Td
-(3882 // Unlock the given inode.) 135.424 Tj
+0 -332.2676 Td
+(3882 // Unlock the given inode.) 135.4239 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
+0 -351.2543 Td
+(3884 iunlock\(struct inode *ip\)) 131.0554 Tj
+0 -360.7477 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
+0 -370.2411 Td
+(3886   if\(ip == 0 || !\(ip->flags & I_BUSY\) || ip->ref < 1\)) 253.3738 Tj
+0 -379.7344 Td
+(3887     panic\("iunlock"\);) 113.5814 Tj
+0 -389.2278 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
+0 -398.7211 Td
+(3889   acquire\(&icache.lock\);) 126.6869 Tj
+0 -408.2145 Td
+(3890   ip->flags &= ~I_BUSY;) 122.3184 Tj
+0 -417.7079 Td
 (3891   wakeup\(ip\);) 78.6333 Tj
-0 -427.201 Td
-(3892   release\(&icache.lock\);) 126.687 Tj
-0 -436.695 Td
+0 -427.2012 Td
+(3892   release\(&icache.lock\);) 126.6869 Tj
+0 -436.6946 Td
 (3893 }) 26.2111 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3894 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3895 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3896 ) 21.8426 Tj
 0 -474.668 Td
 (3897 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3898 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3899 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 38) 34.9481 Tj
 Q
 Q
@@ -14245,8 +14241,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -14261,112 +14256,112 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 6) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/fs.c  Page 6) 152.898 Tj
 0 -28.4801 Td
-(3900 // Caller holds reference to unlocked ip.  Drop reference.) 275.216 Tj
+(3900 // Caller holds reference to unlocked ip.  Drop reference.) 275.2164 Tj
 0 -37.9735 Td
 (3901 void) 39.3166 Tj
 0 -47.4668 Td
-(3902 iput\(struct inode *ip\)) 117.95 Tj
+(3902 iput\(struct inode *ip\)) 117.9499 Tj
 0 -56.9602 Td
 (3903 {) 26.2111 Tj
 0 -66.4535 Td
-(3904   acquire\(&icache.lock\);) 126.687 Tj
+(3904   acquire\(&icache.lock\);) 126.6869 Tj
 0 -75.9469 Td
 (3905   if\(ip->ref == 1 && \(ip->flags & I_VALID\) && ip->nlink\
- == 0\){) 292.69 Tj
+ == 0\){) 292.6905 Tj
 0 -85.4403 Td
-(3906     // inode is no longer used: truncate and free inode.) 266.479 Tj
+(3906     // inode is no longer used: truncate and free inode.) 266.4794 Tj
 0 -94.9336 Td
-(3907     if\(ip->flags & I_BUSY\)) 135.424 Tj
+(3907     if\(ip->flags & I_BUSY\)) 135.4239 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
+(3908       panic\("iput busy"\);) 131.0554 Tj
+0 -113.9203 Td
+(3909     ip->flags |= I_BUSY;) 126.6869 Tj
+0 -123.4137 Td
+(3910     release\(&icache.lock\);) 135.4239 Tj
+0 -132.9071 Td
 (3911     itrunc\(ip\);) 87.3703 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (3912     ip->type = 0;) 96.1073 Tj
-0 -151.894 Td
+0 -151.8938 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
+0 -161.3871 Td
+(3914     acquire\(&icache.lock\);) 135.4239 Tj
+0 -170.8805 Td
+(3915     ip->flags &= ~I_BUSY;) 131.0554 Tj
+0 -180.3739 Td
 (3916     wakeup\(ip\);) 87.3703 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (3917   }) 34.9481 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (3918   ip->ref--;) 74.2647 Tj
-0 -208.854 Td
-(3919   release\(&icache.lock\);) 126.687 Tj
-0 -218.347 Td
+0 -208.8539 Td
+(3919   release\(&icache.lock\);) 126.6869 Tj
+0 -218.3473 Td
 (3920 }) 26.2111 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (3921 ) 21.8426 Tj
 0 -237.334 Td
-(3922 // Common idiom: unlock, then put.) 170.372 Tj
-0 -246.827 Td
+(3922 // Common idiom: unlock, then put.) 170.3721 Tj
+0 -246.8274 Td
 (3923 void) 39.3166 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (3924 iunlockput\(struct inode *ip\)) 144.161 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (3925 {) 26.2111 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (3926   iunlock\(ip\);) 83.0018 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (3927   iput\(ip\);) 69.8962 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (3928 }) 26.2111 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (3929 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (3930 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (3931 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (3932 ) 21.8426 Tj
 0 -341.761 Td
 (3933 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (3934 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (3935 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (3936 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (3937 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (3938 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (3939 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (3940 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (3941 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (3942 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (3943 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3944 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3945 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3946 ) 21.8426 Tj
 0 -474.668 Td
 (3947 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3948 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3949 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 39) 34.9481 Tj
 Q
 Q
@@ -14381,12 +14376,12 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 7) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+(3950 // Allocate a new inode with the given type on device dev.) 275.2164 Tj
 0 -37.9735 Td
 (3951 struct inode*) 78.6333 Tj
 0 -47.4668 Td
@@ -14398,95 +14393,95 @@ q
 0 -75.9469 Td
 (3955   struct buf *bp;) 96.1073 Tj
 0 -85.4403 Td
-(3956   struct dinode *dip;) 113.581 Tj
+(3956   struct dinode *dip;) 113.5814 Tj
 0 -94.9336 Td
-(3957   struct superblock sb;) 122.318 Tj
+(3957   struct superblock sb;) 122.3184 Tj
 0 -104.427 Td
 (3958 ) 21.8426 Tj
-0 -113.92 Td
-(3959   readsb\(dev, &sb\);) 104.844 Tj
-0 -123.414 Td
+0 -113.9203 Td
+(3959   readsb\(dev, &sb\);) 104.8443 Tj
+0 -123.4137 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
+r inode blocks) 327.6386 Tj
+0 -132.9071 Td
+(3961     bp = bread\(dev, IBLOCK\(inum\)\);) 170.3721 Tj
+0 -142.4004 Td
+(3962     dip = \(struct dinode*\)bp->data + inum%IPB;) 222.7942 Tj
+0 -151.8938 Td
+(3963     if\(dip->type == 0\){  // a free inode) 196.5831 Tj
+0 -161.3871 Td
+(3964       memset\(dip, 0, sizeof\(*dip\)\);) 174.7406 Tj
+0 -170.8805 Td
+(3965       dip->type = type;) 122.3184 Tj
+0 -180.3739 Td
+(3966       bwrite\(bp\);   // mark it allocated on the disk) 249.0053 Tj
+0 -189.8672 Td
 (3967       brelse\(bp\);) 96.1073 Tj
-0 -199.361 Td
-(3968       return iget\(dev, inum\);) 148.529 Tj
-0 -208.854 Td
+0 -199.3606 Td
+(3968       return iget\(dev, inum\);) 148.5295 Tj
+0 -208.8539 Td
 (3969     }) 43.6851 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (3970     brelse\(bp\);) 87.3703 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (3971   }) 34.9481 Tj
 0 -237.334 Td
-(3972   panic\("ialloc: no inodes"\);) 148.529 Tj
-0 -246.827 Td
+(3972   panic\("ialloc: no inodes"\);) 148.5295 Tj
+0 -246.8274 Td
 (3973 }) 26.2111 Tj
-0 -256.321 Td
+0 -256.3207 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
+0 -265.8141 Td
+(3975 // Copy inode, which has changed, from memory to disk.) 257.7424 Tj
+0 -275.3075 Td
 (3976 void) 39.3166 Tj
-0 -284.801 Td
-(3977 iupdate\(struct inode *ip\)) 131.055 Tj
-0 -294.294 Td
+0 -284.8008 Td
+(3977 iupdate\(struct inode *ip\)) 131.0554 Tj
+0 -294.2942 Td
 (3978 {) 26.2111 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (3979   struct buf *bp;) 96.1073 Tj
-0 -313.281 Td
-(3980   struct dinode *dip;) 113.581 Tj
-0 -322.774 Td
+0 -313.2809 Td
+(3980   struct dinode *dip;) 113.5814 Tj
+0 -322.7743 Td
 (3981 ) 21.8426 Tj
-0 -332.268 Td
-(3982   bp = bread\(ip->dev, IBLOCK\(ip->inum\)\);) 196.583 Tj
+0 -332.2676 Td
+(3982   bp = bread\(ip->dev, IBLOCK\(ip->inum\)\);) 196.5831 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
+(3983   dip = \(struct dinode*\)bp->data + ip->inum%IPB;) 231.5313 Tj
+0 -351.2543 Td
+(3984   dip->type = ip->type;) 122.3184 Tj
+0 -360.7477 Td
+(3985   dip->major = ip->major;) 131.0554 Tj
+0 -370.2411 Td
+(3986   dip->minor = ip->minor;) 131.0554 Tj
+0 -379.7344 Td
+(3987   dip->nlink = ip->nlink;) 131.0554 Tj
+0 -389.2278 Td
+(3988   dip->size = ip->size;) 122.3184 Tj
+0 -398.7211 Td
+(3989   memmove\(dip->addrs, ip->addrs, sizeof\(ip->addrs\)\);) 249.0053 Tj
+0 -408.2145 Td
 (3990   bwrite\(bp\);) 78.6333 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (3991   brelse\(bp\);) 78.6333 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (3992 }) 26.2111 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (3993 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (3994 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (3995 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (3996 ) 21.8426 Tj
 0 -474.668 Td
 (3997 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (3998 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (3999 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 39) 34.9481 Tj
 Q
 Q
@@ -14515,8 +14510,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -14531,116 +14525,116 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 8) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+red) 279.5849 Tj
 0 -56.9602 Td
 (4003 // in a sequence of blocks on the disk.  The first NDIRECT\
  blocks) 305.796 Tj
 0 -66.4535 Td
 (4004 // are listed in ip->addrs[].  The next NINDIRECT blocks a\
-re) 283.953 Tj
+re) 283.9534 Tj
 0 -75.9469 Td
-(4005 // listed in the block ip->addrs[INDIRECT].) 209.689 Tj
+(4005 // listed in the block ip->addrs[INDIRECT].) 209.6887 Tj
 0 -85.4403 Td
 (4006 ) 21.8426 Tj
 0 -94.9336 Td
 (4007 // Return the disk block address of the nth block in inode\
- ip.) 292.69 Tj
+ ip.) 292.6905 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
+s allocated.) 327.6386 Tj
+0 -113.9203 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
+0 -123.4137 Td
+(4010 bmap\(struct inode *ip, uint bn, int alloc\)) 205.3202 Tj
+0 -132.9071 Td
 (4011 {) 26.2111 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (4012   uint addr, *a;) 91.7388 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (4013   struct buf *bp;) 96.1073 Tj
-0 -161.387 Td
+0 -161.3871 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
+0 -170.8805 Td
+(4015   if\(bn < NDIRECT\){) 104.8443 Tj
+0 -180.3739 Td
+(4016     if\(\(addr = ip->addrs[bn]\) == 0\){) 179.1091 Tj
+0 -189.8672 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
+0 -199.3606 Td
+(4018         return -1;) 100.4758 Tj
+0 -208.8539 Td
+(4019       ip->addrs[bn] = addr = balloc\(ip->dev\);) 218.4257 Tj
+0 -218.3473 Td
 (4020     }) 43.6851 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (4021     return addr;) 91.7388 Tj
 0 -237.334 Td
 (4022   }) 34.9481 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (4023   bn -= NDIRECT;) 91.7388 Tj
-0 -256.321 Td
+0 -256.3207 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
+0 -265.8141 Td
+(4025   if\(bn < NINDIRECT\){) 113.5814 Tj
+0 -275.3075 Td
+(4026     // Load indirect block, allocating if necessary.) 249.0053 Tj
+0 -284.8008 Td
+(4027     if\(\(addr = ip->addrs[INDIRECT]\) == 0\){) 205.3202 Tj
+0 -294.2942 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
+0 -303.7875 Td
+(4029         return -1;) 100.4758 Tj
+0 -313.2809 Td
+(4030       ip->addrs[INDIRECT] = addr = balloc\(ip->dev\);) 244.6368 Tj
+0 -322.7743 Td
 (4031     }) 43.6851 Tj
-0 -332.268 Td
+0 -332.2676 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
+(4033     a = \(uint*\)bp->data;) 126.6869 Tj
+0 -351.2543 Td
 (4034 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (4035     if\(\(addr = a[bn]\) == 0\){) 144.161 Tj
-0 -370.241 Td
+0 -370.2411 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
+0 -379.7344 Td
+(4037         brelse\(bp\);) 104.8443 Tj
+0 -389.2278 Td
+(4038         return -1;) 100.4758 Tj
+0 -398.7211 Td
 (4039       }) 52.4222 Tj
-0 -408.214 Td
-(4040       a[bn] = addr = balloc\(ip->dev\);) 183.478 Tj
-0 -417.708 Td
+0 -408.2145 Td
+(4040       a[bn] = addr = balloc\(ip->dev\);) 183.4776 Tj
+0 -417.7079 Td
 (4041       bwrite\(bp\);) 96.1073 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4042     }) 43.6851 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4043     brelse\(bp\);) 87.3703 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4044     return addr;) 91.7388 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4045   }) 34.9481 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4046 ) 21.8426 Tj
 0 -474.668 Td
 (4047   panic\("bmap: out of range"\);) 152.898 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4048 }) 26.2111 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4049 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 40) 34.9481 Tj
 Q
 Q
@@ -14655,16 +14649,16 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 9) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/fs.c  Page 9) 152.898 Tj
 0 -28.4801 Td
-(4050 // Truncate inode \(discard contents\).) 183.478 Tj
+(4050 // Truncate inode \(discard contents\).) 183.4776 Tj
 0 -37.9735 Td
 (4051 static void) 69.8962 Tj
 0 -47.4668 Td
-(4052 itrunc\(struct inode *ip\)) 126.687 Tj
+(4052 itrunc\(struct inode *ip\)) 126.6869 Tj
 0 -56.9602 Td
 (4053 {) 26.2111 Tj
 0 -66.4535 Td
@@ -14676,90 +14670,90 @@ q
 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
+(4058   for\(i = 0; i < NDIRECT; i++\){) 157.2665 Tj
+0 -113.9203 Td
+(4059     if\(ip->addrs[i]\){) 113.5814 Tj
+0 -123.4137 Td
+(4060       bfree\(ip->dev, ip->addrs[i]\);) 174.7406 Tj
+0 -132.9071 Td
+(4061       ip->addrs[i] = 0;) 122.3184 Tj
+0 -142.4004 Td
 (4062     }) 43.6851 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (4063   }) 34.9481 Tj
-0 -161.387 Td
+0 -161.3871 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
+0 -170.8805 Td
+(4065   if\(ip->addrs[INDIRECT]\){) 135.4239 Tj
+0 -180.3739 Td
+(4066     bp = bread\(ip->dev, ip->addrs[INDIRECT]\);) 218.4257 Tj
+0 -189.8672 Td
+(4067     a = \(uint*\)bp->data;) 126.6869 Tj
+0 -199.3606 Td
+(4068     for\(j = 0; j < NINDIRECT; j++\){) 174.7406 Tj
+0 -208.8539 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
+0 -218.3473 Td
+(4070         bfree\(ip->dev, a[j]\);) 148.5295 Tj
+0 -227.8407 Td
 (4071     }) 43.6851 Tj
 0 -237.334 Td
 (4072     brelse\(bp\);) 87.3703 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (4073     ip->addrs[INDIRECT] = 0;) 144.161 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (4074   }) 34.9481 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (4075 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (4076   ip->size = 0;) 87.3703 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (4077   iupdate\(ip\);) 83.0018 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (4078 }) 26.2111 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (4079 ) 21.8426 Tj
-0 -313.281 Td
-(4080 // Copy stat information from inode.) 179.109 Tj
-0 -322.774 Td
+0 -313.2809 Td
+(4080 // Copy stat information from inode.) 179.1091 Tj
+0 -322.7743 Td
 (4081 void) 39.3166 Tj
-0 -332.268 Td
-(4082 stati\(struct inode *ip, struct stat *st\)) 196.583 Tj
+0 -332.2676 Td
+(4082 stati\(struct inode *ip, struct stat *st\)) 196.5831 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
+0 -351.2543 Td
+(4084   st->dev = ip->dev;) 109.2129 Tj
+0 -360.7477 Td
+(4085   st->ino = ip->inum;) 113.5814 Tj
+0 -370.2411 Td
+(4086   st->type = ip->type;) 117.9499 Tj
+0 -379.7344 Td
+(4087   st->nlink = ip->nlink;) 126.6869 Tj
+0 -389.2278 Td
+(4088   st->size = ip->size;) 117.9499 Tj
+0 -398.7211 Td
 (4089 }) 26.2111 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (4090 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4091 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4092 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4093 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4094 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4095 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4096 ) 21.8426 Tj
 0 -474.668 Td
 (4097 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4098 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4099 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 40) 34.9481 Tj
 Q
 Q
@@ -14788,8 +14782,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -14804,16 +14797,16 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 10) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/fs.c  Page 10) 157.2665 Tj
 0 -28.4801 Td
-(4100 // Read data from inode.) 126.687 Tj
+(4100 // Read data from inode.) 126.6869 Tj
 0 -37.9735 Td
 (4101 int) 34.9481 Tj
 0 -47.4668 Td
-(4102 readi\(struct inode *ip, char *dst, uint off, uint n\)) 249.005 Tj
+(4102 readi\(struct inode *ip, char *dst, uint off, uint n\)) 249.0053 Tj
 0 -56.9602 Td
 (4103 {) 26.2111 Tj
 0 -66.4535 Td
@@ -14823,93 +14816,93 @@ q
 0 -85.4403 Td
 (4106 ) 21.8426 Tj
 0 -94.9336 Td
-(4107   if\(ip->type == T_DEV\){) 126.687 Tj
+(4107   if\(ip->type == T_DEV\){) 126.6869 Tj
 0 -104.427 Td
 (4108     if\(ip->major < 0 || ip->major >= NDEV || !devsw[ip->m\
-ajor].read\)) 318.902 Tj
-0 -113.92 Td
+ajor].read\)) 318.9016 Tj
+0 -113.9203 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
+0 -123.4137 Td
+(4110     return devsw[ip->major].read\(ip, dst, n\);) 218.4257 Tj
+0 -132.9071 Td
 (4111   }) 34.9481 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (4112 ) 21.8426 Tj
-0 -151.894 Td
-(4113   if\(off > ip->size || off + n < off\)) 183.478 Tj
-0 -161.387 Td
+0 -151.8938 Td
+(4113   if\(off > ip->size || off + n < off\)) 183.4776 Tj
+0 -161.3871 Td
 (4114     return -1;) 83.0018 Tj
-0 -170.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
+0 -170.8805 Td
+(4115   if\(off + n > ip->size\)) 126.6869 Tj
+0 -180.3739 Td
+(4116     n = ip->size - off;) 122.3184 Tj
+0 -189.8672 Td
 (4117 ) 21.8426 Tj
-0 -199.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 -199.3606 Td
+(4118   for\(tot=0; tot<n; tot+=m, off+=m, dst+=m\){) 214.0572 Tj
+0 -208.8539 Td
+(4119     bp = bread\(ip->dev, bmap\(ip, off/BSIZE, 0\)\);) 231.5313 Tj
+0 -218.3473 Td
+(4120     m = min\(n - tot, BSIZE - off%BSIZE\);) 196.5831 Tj
+0 -227.8407 Td
+(4121     memmove\(dst, bp->data + off%BSIZE, m\);) 205.3202 Tj
 0 -237.334 Td
 (4122     brelse\(bp\);) 87.3703 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (4123   }) 34.9481 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (4124   return n;) 69.8962 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (4125 }) 26.2111 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (4126 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (4127 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (4128 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (4129 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (4130 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (4131 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (4132 ) 21.8426 Tj
 0 -341.761 Td
 (4133 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (4134 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (4135 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (4136 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (4137 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (4138 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (4139 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (4140 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4141 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4142 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4143 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4144 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4145 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4146 ) 21.8426 Tj
 0 -474.668 Td
 (4147 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4148 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4149 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 41) 34.9481 Tj
 Q
 Q
@@ -14924,16 +14917,16 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 11) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/fs.c  Page 11) 157.2665 Tj
 0 -28.4801 Td
-(4150 // Write data to inode.) 122.318 Tj
+(4150 // Write data to inode.) 122.3184 Tj
 0 -37.9735 Td
 (4151 int) 34.9481 Tj
 0 -47.4668 Td
-(4152 writei\(struct inode *ip, char *src, uint off, uint n\)) 253.374 Tj
+(4152 writei\(struct inode *ip, char *src, uint off, uint n\)) 253.3738 Tj
 0 -56.9602 Td
 (4153 {) 26.2111 Tj
 0 -66.4535 Td
@@ -14943,93 +14936,93 @@ q
 0 -85.4403 Td
 (4156 ) 21.8426 Tj
 0 -94.9336 Td
-(4157   if\(ip->type == T_DEV\){) 126.687 Tj
+(4157   if\(ip->type == T_DEV\){) 126.6869 Tj
 0 -104.427 Td
 (4158     if\(ip->major < 0 || ip->major >= NDEV || !devsw[ip->m\
-ajor].write\)) 323.27 Tj
-0 -113.92 Td
+ajor].write\)) 323.2701 Tj
+0 -113.9203 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
+0 -123.4137 Td
+(4160     return devsw[ip->major].write\(ip, src, n\);) 222.7942 Tj
+0 -132.9071 Td
 (4161   }) 34.9481 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (4162 ) 21.8426 Tj
-0 -151.894 Td
-(4163   if\(off + n < off\)) 104.844 Tj
-0 -161.387 Td
+0 -151.8938 Td
+(4163   if\(off + n < off\)) 104.8443 Tj
+0 -161.3871 Td
 (4164     return -1;) 83.0018 Tj
-0 -170.88 Td
-(4165   if\(off + n > MAXFILE*BSIZE\)) 148.529 Tj
-0 -180.374 Td
+0 -170.8805 Td
+(4165   if\(off + n > MAXFILE*BSIZE\)) 148.5295 Tj
+0 -180.3739 Td
 (4166     n = MAXFILE*BSIZE - off;) 144.161 Tj
-0 -189.867 Td
+0 -189.8672 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 -199.3606 Td
+(4168   for\(tot=0; tot<n; tot+=m, off+=m, src+=m\){) 214.0572 Tj
+0 -208.8539 Td
+(4169     bp = bread\(ip->dev, bmap\(ip, off/BSIZE, 1\)\);) 231.5313 Tj
+0 -218.3473 Td
+(4170     m = min\(n - tot, BSIZE - off%BSIZE\);) 196.5831 Tj
+0 -227.8407 Td
+(4171     memmove\(bp->data + off%BSIZE, src, m\);) 205.3202 Tj
 0 -237.334 Td
 (4172     bwrite\(bp\);) 87.3703 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (4173     brelse\(bp\);) 87.3703 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (4174   }) 34.9481 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (4175 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 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
+0 -284.8008 Td
+(4177     ip->size = off;) 104.8443 Tj
+0 -294.2942 Td
 (4178     iupdate\(ip\);) 91.7388 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (4179   }) 34.9481 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (4180   return n;) 69.8962 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (4181 }) 26.2111 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (4182 ) 21.8426 Tj
 0 -341.761 Td
 (4183 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (4184 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (4185 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (4186 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (4187 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (4188 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (4189 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (4190 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4191 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4192 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4193 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4194 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4195 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4196 ) 21.8426 Tj
 0 -474.668 Td
 (4197 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4198 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4199 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 41) 34.9481 Tj
 Q
 Q
@@ -15058,8 +15051,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -15074,10 +15066,10 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 12) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/fs.c  Page 12) 157.2665 Tj
 0 -28.4801 Td
 (4200 // Directories) 83.0018 Tj
 0 -37.9735 Td
@@ -15085,100 +15077,100 @@ q
 0 -47.4668 Td
 (4202 int) 34.9481 Tj
 0 -56.9602 Td
-(4203 namecmp\(const char *s, const char *t\)) 183.478 Tj
+(4203 namecmp\(const char *s, const char *t\)) 183.4776 Tj
 0 -66.4535 Td
 (4204 {) 26.2111 Tj
 0 -75.9469 Td
-(4205   return strncmp\(s, t, DIRSIZ\);) 157.267 Tj
+(4205   return strncmp\(s, t, DIRSIZ\);) 157.2665 Tj
 0 -85.4403 Td
 (4206 }) 26.2111 Tj
 0 -94.9336 Td
 (4207 ) 21.8426 Tj
 0 -104.427 Td
-(4208 // Look for a directory entry in a directory.) 218.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
+(4208 // Look for a directory entry in a directory.) 218.4257 Tj
+0 -113.9203 Td
+(4209 // If found, set *poff to byte offset of entry.) 227.1628 Tj
+0 -123.4137 Td
+(4210 // Caller must have already locked dp.) 187.8461 Tj
+0 -132.9071 Td
 (4211 struct inode*) 78.6333 Tj
-0 -142.4 Td
-(4212 dirlookup\(struct inode *dp, char *name, uint *poff\)) 244.637 Tj
-0 -151.894 Td
+0 -142.4004 Td
+(4212 dirlookup\(struct inode *dp, char *name, uint *poff\)) 244.6368 Tj
+0 -151.8938 Td
 (4213 {) 26.2111 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (4214   uint off, inum;) 96.1073 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (4215   struct buf *bp;) 96.1073 Tj
-0 -180.374 Td
-(4216   struct dirent *de;) 109.213 Tj
-0 -189.867 Td
+0 -180.3739 Td
+(4216   struct dirent *de;) 109.2129 Tj
+0 -189.8672 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
+0 -199.3606 Td
+(4218   if\(dp->type != T_DIR\)) 122.3184 Tj
+0 -208.8539 Td
+(4219     panic\("dirlookup not DIR"\);) 157.2665 Tj
+0 -218.3473 Td
 (4220 ) 21.8426 Tj
-0 -227.841 Td
-(4221   for\(off = 0; off < dp->size; off += BSIZE\){) 218.426 Tj
+0 -227.8407 Td
+(4221   for\(off = 0; off < dp->size; off += BSIZE\){) 218.4257 Tj
 0 -237.334 Td
-(4222     bp = bread\(dp->dev, bmap\(dp, off / BSIZE, 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
+(4222     bp = bread\(dp->dev, bmap\(dp, off / BSIZE, 0\)\);) 240.2683 Tj
+0 -246.8274 Td
+(4223     for\(de = \(struct dirent*\)bp->data;) 187.8461 Tj
+0 -256.3207 Td
+(4224         de < \(struct dirent*\)\(bp->data + BSIZE\);) 231.5313 Tj
+0 -265.8141 Td
 (4225         de++\){) 83.0018 Tj
-0 -275.307 Td
-(4226       if\(de->inum == 0\)) 122.318 Tj
-0 -284.801 Td
+0 -275.3075 Td
+(4226       if\(de->inum == 0\)) 122.3184 Tj
+0 -284.8008 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
+0 -294.2942 Td
+(4228       if\(namecmp\(name, de->name\) == 0\){) 192.2146 Tj
+0 -303.7875 Td
+(4229         // entry matches path element) 183.4776 Tj
+0 -313.2809 Td
 (4230         if\(poff\)) 91.7388 Tj
-0 -322.774 Td
-(4231           *poff = off + \(uchar*\)de - bp->data;) 222.794 Tj
-0 -332.268 Td
-(4232         inum = de->inum;) 126.687 Tj
+0 -322.7743 Td
+(4231           *poff = off + \(uchar*\)de - bp->data;) 222.7942 Tj
+0 -332.2676 Td
+(4232         inum = de->inum;) 126.6869 Tj
 0 -341.761 Td
-(4233         brelse\(bp\);) 104.844 Tj
-0 -351.254 Td
-(4234         return iget\(dp->dev, inum\);) 174.741 Tj
-0 -360.748 Td
+(4233         brelse\(bp\);) 104.8443 Tj
+0 -351.2543 Td
+(4234         return iget\(dp->dev, inum\);) 174.7406 Tj
+0 -360.7477 Td
 (4235       }) 52.4222 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (4236     }) 43.6851 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (4237     brelse\(bp\);) 87.3703 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (4238   }) 34.9481 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (4239   return 0;) 69.8962 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (4240 }) 26.2111 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4241 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4242 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4243 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4244 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4245 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4246 ) 21.8426 Tj
 0 -474.668 Td
 (4247 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4248 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4249 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 42) 34.9481 Tj
 Q
 Q
@@ -15193,114 +15185,114 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 13) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/fs.c  Page 13) 157.2665 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
+(4252 dirlink\(struct inode *dp, char *name, uint ino\)) 227.1628 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
+(4255   struct dirent de;) 104.8443 Tj
 0 -85.4403 Td
-(4256   struct inode *ip;) 104.844 Tj
+(4256   struct inode *ip;) 104.8443 Tj
 0 -94.9336 Td
 (4257 ) 21.8426 Tj
 0 -104.427 Td
-(4258   // Check that name is not present.) 179.109 Tj
-0 -113.92 Td
-(4259   if\(\(ip = dirlookup\(dp, name, 0\)\) != 0\){) 200.952 Tj
-0 -123.414 Td
+(4258   // Check that name is not present.) 179.1091 Tj
+0 -113.9203 Td
+(4259   if\(\(ip = dirlookup\(dp, name, 0\)\) != 0\){) 200.9517 Tj
+0 -123.4137 Td
 (4260     iput\(ip\);) 78.6333 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (4261     return -1;) 83.0018 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (4262   }) 34.9481 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (4263 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 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
+0 -170.8805 Td
+(4265   for\(off = 0; off < dp->size; off += sizeof\(de\)\){) 240.2683 Tj
+0 -180.3739 Td
 (4266     if\(readi\(dp, \(char*\)&de, off, sizeof\(de\)\) != si\
-zeof\(de\)\)) 283.953 Tj
-0 -189.867 Td
+zeof\(de\)\)) 283.9534 Tj
+0 -189.8672 Td
 (4267       panic\("dirlink read"\);) 144.161 Tj
-0 -199.361 Td
-(4268     if\(de.inum == 0\)) 109.213 Tj
-0 -208.854 Td
+0 -199.3606 Td
+(4268     if\(de.inum == 0\)) 109.2129 Tj
+0 -208.8539 Td
 (4269       break;) 74.2647 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (4270   }) 34.9481 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (4271 ) 21.8426 Tj
 0 -237.334 Td
-(4272   strncpy\(de.name, name, DIRSIZ\);) 166.004 Tj
-0 -246.827 Td
+(4272   strncpy\(de.name, name, DIRSIZ\);) 166.0035 Tj
+0 -246.8274 Td
 (4273   de.inum = ino;) 91.7388 Tj
-0 -256.321 Td
+0 -256.3207 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
+eof\(de\)\)) 279.5849 Tj
+0 -265.8141 Td
+(4275     panic\("dirlink"\);) 113.5814 Tj
+0 -275.3075 Td
 (4276 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (4277   return 0;) 69.8962 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (4278 }) 26.2111 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (4279 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (4280 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (4281 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (4282 ) 21.8426 Tj
 0 -341.761 Td
 (4283 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (4284 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (4285 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (4286 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (4287 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (4288 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (4289 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (4290 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4291 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4292 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4293 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4294 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4295 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4296 ) 21.8426 Tj
 0 -474.668 Td
 (4297 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4298 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4299 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 42) 34.9481 Tj
 Q
 Q
@@ -15329,8 +15321,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -15345,115 +15336,115 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 14) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/fs.c  Page 14) 157.2665 Tj
 0 -28.4801 Td
 (4300 // Paths) 56.7907 Tj
 0 -37.9735 Td
 (4301 ) 21.8426 Tj
 0 -47.4668 Td
-(4302 // Copy the next path element from path into name.) 240.268 Tj
+(4302 // Copy the next path element from path into name.) 240.2683 Tj
 0 -56.9602 Td
 (4303 // Return a pointer to the element following the copied on\
-e.) 283.953 Tj
+e.) 283.9534 Tj
 0 -66.4535 Td
-(4304 // The returned path has no leading slashes,) 214.057 Tj
+(4304 // The returned path has no leading slashes,) 214.0572 Tj
 0 -75.9469 Td
 (4305 // so the caller can check *path=='\\0' to see if the name\
- is the last one.) 345.113 Tj
+ is the last one.) 345.1126 Tj
 0 -85.4403 Td
-(4306 // If no name to remove, return 0.) 170.372 Tj
+(4306 // If no name to remove, return 0.) 170.3721 Tj
 0 -94.9336 Td
 (4307 //) 30.5796 Tj
 0 -104.427 Td
 (4308 // Examples:) 74.2647 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (4309 //   skipelem\("a/bb/c", name\) = "bb/c", setting name = "\
-a") 275.216 Tj
-0 -123.414 Td
+a") 275.2164 Tj
+0 -123.4137 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
+a") 275.2164 Tj
+0 -132.9071 Td
+(4311 //   skipelem\("", name\) = skipelem\("////", name\) = 0) 249.0053 Tj
+0 -142.4004 Td
 (4312 //) 30.5796 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (4313 static char*) 74.2647 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (4314 skipelem\(char *path, char *name\)) 161.635 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (4315 {) 26.2111 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (4316   char *s;) 65.5277 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (4317   int len;) 65.5277 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (4318 ) 21.8426 Tj
-0 -208.854 Td
-(4319   while\(*path == '/'\)) 113.581 Tj
-0 -218.347 Td
+0 -208.8539 Td
+(4319   while\(*path == '/'\)) 113.5814 Tj
+0 -218.3473 Td
 (4320     path++;) 69.8962 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (4321   if\(*path == 0\)) 91.7388 Tj
 0 -237.334 Td
 (4322     return 0;) 78.6333 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (4323   s = path;) 69.8962 Tj
-0 -256.321 Td
-(4324   while\(*path != '/' && *path != 0\)) 174.741 Tj
-0 -265.814 Td
+0 -256.3207 Td
+(4324   while\(*path != '/' && *path != 0\)) 174.7406 Tj
+0 -265.8141 Td
 (4325     path++;) 69.8962 Tj
-0 -275.307 Td
+0 -275.3075 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
+0 -284.8008 Td
+(4327   if\(len >= DIRSIZ\)) 104.8443 Tj
+0 -294.2942 Td
+(4328     memmove\(name, s, DIRSIZ\);) 148.5295 Tj
+0 -303.7875 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
+0 -313.2809 Td
+(4330     memmove\(name, s, len\);) 135.4239 Tj
+0 -322.7743 Td
+(4331     name[len] = 0;) 100.4758 Tj
+0 -332.2676 Td
 (4332   }) 34.9481 Tj
 0 -341.761 Td
-(4333   while\(*path == '/'\)) 113.581 Tj
-0 -351.254 Td
+(4333   while\(*path == '/'\)) 113.5814 Tj
+0 -351.2543 Td
 (4334     path++;) 69.8962 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (4335   return path;) 83.0018 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (4336 }) 26.2111 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (4337 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (4338 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (4339 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (4340 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4341 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4342 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4343 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4344 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4345 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4346 ) 21.8426 Tj
 0 -474.668 Td
 (4347 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4348 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4349 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 43) 34.9481 Tj
 Q
 Q
@@ -15468,113 +15459,113 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/fs.c  Page 15) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/fs.c  Page 15) 157.2665 Tj
 0 -28.4801 Td
-(4350 // Look up and return the inode for a path name.) 231.531 Tj
+(4350 // Look up and return the inode for a path name.) 231.5313 Tj
 0 -37.9735 Td
 (4351 // If parent != 0, return the inode for the parent and cop\
-y the final) 323.27 Tj
+y the final) 323.2701 Tj
 0 -47.4668 Td
 (4352 // path element into name, which must have room for DIRSIZ\
  bytes.) 305.796 Tj
 0 -56.9602 Td
-(4353 static struct inode*) 109.213 Tj
+(4353 static struct inode*) 109.2129 Tj
 0 -66.4535 Td
-(4354 _namei\(char *path, int parent, char *name\)) 205.32 Tj
+(4354 _namei\(char *path, int parent, char *name\)) 205.3202 Tj
 0 -75.9469 Td
 (4355 {) 26.2111 Tj
 0 -85.4403 Td
-(4356   struct inode *ip, *next;) 135.424 Tj
+(4356   struct inode *ip, *next;) 135.4239 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
+(4358   if\(*path == '/'\)) 100.4758 Tj
+0 -113.9203 Td
+(4359     ip = iget\(ROOTDEV, 1\);) 135.4239 Tj
+0 -123.4137 Td
 (4360   else) 48.0537 Tj
-0 -132.907 Td
-(4361     ip = idup\(cp->cwd\);) 122.318 Tj
-0 -142.4 Td
+0 -132.9071 Td
+(4361     ip = idup\(cp->cwd\);) 122.3184 Tj
+0 -142.4004 Td
 (4362 ) 21.8426 Tj
-0 -151.894 Td
-(4363   while\(\(path = skipelem\(path, name\)\) != 0\){) 214.057 Tj
-0 -161.387 Td
+0 -151.8938 Td
+(4363   while\(\(path = skipelem\(path, name\)\) != 0\){) 214.0572 Tj
+0 -161.3871 Td
 (4364     ilock\(ip\);) 83.0018 Tj
-0 -170.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
+0 -170.8805 Td
+(4365     if\(ip->type != T_DIR\){) 135.4239 Tj
+0 -180.3739 Td
+(4366       iunlockput\(ip\);) 113.5814 Tj
+0 -189.8672 Td
 (4367       return 0;) 87.3703 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (4368     }) 43.6851 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (4369     if\(parent && *path == '\\0'\){) 161.635 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (4370       // Stop one level early.) 152.898 Tj
-0 -227.841 Td
-(4371       iunlock\(ip\);) 100.476 Tj
+0 -227.8407 Td
+(4371       iunlock\(ip\);) 100.4758 Tj
 0 -237.334 Td
 (4372       return ip;) 91.7388 Tj
-0 -246.827 Td
+0 -246.8274 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
+0 -256.3207 Td
+(4374     if\(\(next = dirlookup\(ip, name, 0\)\) == 0\){) 218.4257 Tj
+0 -265.8141 Td
+(4375       iunlockput\(ip\);) 113.5814 Tj
+0 -275.3075 Td
 (4376       return 0;) 87.3703 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (4377     }) 43.6851 Tj
-0 -294.294 Td
-(4378     iunlockput\(ip\);) 104.844 Tj
-0 -303.788 Td
+0 -294.2942 Td
+(4378     iunlockput\(ip\);) 104.8443 Tj
+0 -303.7875 Td
 (4379     ip = next;) 83.0018 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (4380   }) 34.9481 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (4381   if\(parent\){) 78.6333 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (4382     iput\(ip\);) 78.6333 Tj
 0 -341.761 Td
 (4383     return 0;) 78.6333 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (4384   }) 34.9481 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (4385   return ip;) 74.2647 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (4386 }) 26.2111 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (4387 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (4388 struct inode*) 78.6333 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (4389 namei\(char *path\)) 96.1073 Tj
-0 -408.214 Td
+0 -408.2145 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
+0 -417.7079 Td
+(4391   char name[DIRSIZ];) 109.2129 Tj
+0 -427.2012 Td
+(4392   return _namei\(path, 0, name\);) 157.2665 Tj
+0 -436.6946 Td
 (4393 }) 26.2111 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4394 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4395 struct inode*) 78.6333 Tj
-0 -465.175 Td
-(4396 nameiparent\(char *path, char *name\)) 174.741 Tj
+0 -465.1747 Td
+(4396 nameiparent\(char *path, char *name\)) 174.7406 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
+0 -484.1614 Td
+(4398   return _namei\(path, 1, name\);) 157.2665 Tj
+0 -493.6547 Td
 (4399 }) 26.2111 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 43) 34.9481 Tj
 Q
 Q
@@ -15603,8 +15594,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -15619,111 +15609,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/file.c  Page 1) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/file.c  Page 1) 161.635 Tj
 0 -28.4801 Td
-(4400 #include "types.h") 100.476 Tj
+(4400 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
 (4401 #include "defs.h") 96.1073 Tj
 0 -47.4668 Td
-(4402 #include "param.h") 100.476 Tj
+(4402 #include "param.h") 100.4758 Tj
 0 -56.9602 Td
 (4403 #include "file.h") 96.1073 Tj
 0 -66.4535 Td
-(4404 #include "spinlock.h") 113.581 Tj
+(4404 #include "spinlock.h") 113.5814 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
+(4407 struct devsw devsw[NDEV];) 131.0554 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
+0 -113.9203 Td
+(4409 struct file file[NFILE];) 126.6869 Tj
+0 -123.4137 Td
 (4410 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (4411 void) 39.3166 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (4412 fileinit\(void\)) 83.0018 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (4413 {) 26.2111 Tj
-0 -161.387 Td
-(4414   initlock\(&file_table_lock, "file_table"\);) 209.689 Tj
-0 -170.88 Td
+0 -161.3871 Td
+(4414   initlock\(&file_table_lock, "file_table"\);) 209.6887 Tj
+0 -170.8805 Td
 (4415 }) 26.2111 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (4416 ) 21.8426 Tj
-0 -189.867 Td
-(4417 // Allocate a file structure.) 148.529 Tj
-0 -199.361 Td
+0 -189.8672 Td
+(4417 // Allocate a file structure.) 148.5295 Tj
+0 -199.3606 Td
 (4418 struct file*) 74.2647 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (4419 filealloc\(void\)) 87.3703 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (4420 {) 26.2111 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (4421   int i;) 56.7907 Tj
 0 -237.334 Td
 (4422 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 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
+0 -256.3207 Td
+(4424   for\(i = 0; i < NFILE; i++\){) 148.5295 Tj
+0 -265.8141 Td
+(4425     if\(file[i].type == FD_CLOSED\){) 170.3721 Tj
+0 -275.3075 Td
+(4426       file[i].type = FD_NONE;) 148.5295 Tj
+0 -284.8008 Td
+(4427       file[i].ref = 1;) 117.9499 Tj
+0 -294.2942 Td
 (4428       release\(&file_table_lock\);) 161.635 Tj
-0 -303.788 Td
-(4429       return file + i;) 117.95 Tj
-0 -313.281 Td
+0 -303.7875 Td
+(4429       return file + i;) 117.9499 Tj
+0 -313.2809 Td
 (4430     }) 43.6851 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (4431   }) 34.9481 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (4432   release\(&file_table_lock\);) 144.161 Tj
 0 -341.761 Td
 (4433   return 0;) 69.8962 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (4434 }) 26.2111 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (4435 ) 21.8426 Tj
-0 -370.241 Td
-(4436 // Increment ref count for file f.) 170.372 Tj
-0 -379.734 Td
+0 -370.2411 Td
+(4436 // Increment ref count for file f.) 170.3721 Tj
+0 -379.7344 Td
 (4437 struct file*) 74.2647 Tj
-0 -389.228 Td
-(4438 filedup\(struct file *f\)) 122.318 Tj
-0 -398.721 Td
+0 -389.2278 Td
+(4438 filedup\(struct file *f\)) 122.3184 Tj
+0 -398.7211 Td
 (4439 {) 26.2111 Tj
-0 -408.214 Td
+0 -408.2145 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
+0 -417.7079 Td
+(4441   if\(f->ref < 1 || f->type == FD_CLOSED\)) 196.5831 Tj
+0 -427.2012 Td
+(4442     panic\("filedup"\);) 113.5814 Tj
+0 -436.6946 Td
 (4443   f->ref++;) 69.8962 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4444   release\(&file_table_lock\);) 144.161 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4445   return f;) 69.8962 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4446 }) 26.2111 Tj
 0 -474.668 Td
 (4447 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4448 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4449 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 44) 34.9481 Tj
 Q
 Q
@@ -15738,17 +15728,17 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/file.c  Page 2) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+s 0.\)) 292.6905 Tj
 0 -37.9735 Td
 (4451 void) 39.3166 Tj
 0 -47.4668 Td
-(4452 fileclose\(struct file *f\)) 131.055 Tj
+(4452 fileclose\(struct file *f\)) 131.0554 Tj
 0 -56.9602 Td
 (4453 {) 26.2111 Tj
 0 -66.4535 Td
@@ -15758,92 +15748,92 @@ s 0.\)) 292.69 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
+(4457   if\(f->ref < 1 || f->type == FD_CLOSED\)) 196.5831 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
+(4458     panic\("fileclose"\);) 122.3184 Tj
+0 -113.9203 Td
+(4459   if\(--f->ref > 0\){) 104.8443 Tj
+0 -123.4137 Td
 (4460     release\(&file_table_lock\);) 152.898 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (4461     return;) 69.8962 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (4462   }) 34.9481 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (4463   ff = *f;) 65.5277 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (4464   f->ref = 0;) 78.6333 Tj
-0 -170.88 Td
-(4465   f->type = FD_CLOSED;) 117.95 Tj
-0 -180.374 Td
+0 -170.8805 Td
+(4465   f->type = FD_CLOSED;) 117.9499 Tj
+0 -180.3739 Td
 (4466   release\(&file_table_lock\);) 144.161 Tj
-0 -189.867 Td
+0 -189.8672 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
+0 -199.3606 Td
+(4468   if\(ff.type == FD_PIPE\)) 126.6869 Tj
+0 -208.8539 Td
+(4469     pipeclose\(ff.pipe, ff.writable\);) 179.1091 Tj
+0 -218.3473 Td
 (4470   else if\(ff.type == FD_INODE\)) 152.898 Tj
-0 -227.841 Td
+0 -227.8407 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
+0 -246.8274 Td
+(4473     panic\("fileclose"\);) 122.3184 Tj
+0 -256.3207 Td
 (4474 }) 26.2111 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (4475 ) 21.8426 Tj
-0 -275.307 Td
-(4476 // Get metadata about file f.) 148.529 Tj
-0 -284.801 Td
+0 -275.3075 Td
+(4476 // Get metadata about file f.) 148.5295 Tj
+0 -284.8008 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
+0 -294.2942 Td
+(4478 filestat\(struct file *f, struct stat *st\)) 200.9517 Tj
+0 -303.7875 Td
 (4479 {) 26.2111 Tj
-0 -313.281 Td
-(4480   if\(f->type == FD_INODE\){) 135.424 Tj
-0 -322.774 Td
+0 -313.2809 Td
+(4480   if\(f->type == FD_INODE\){) 135.4239 Tj
+0 -322.7743 Td
 (4481     ilock\(f->ip\);) 96.1073 Tj
-0 -332.268 Td
-(4482     stati\(f->ip, st\);) 113.581 Tj
+0 -332.2676 Td
+(4482     stati\(f->ip, st\);) 113.5814 Tj
 0 -341.761 Td
-(4483     iunlock\(f->ip\);) 104.844 Tj
-0 -351.254 Td
+(4483     iunlock\(f->ip\);) 104.8443 Tj
+0 -351.2543 Td
 (4484     return 0;) 78.6333 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (4485   }) 34.9481 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (4486   return -1;) 74.2647 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (4487 }) 26.2111 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (4488 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (4489 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (4490 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4491 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4492 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4493 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4494 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4495 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4496 ) 21.8426 Tj
 0 -474.668 Td
 (4497 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4498 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4499 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 44) 34.9481 Tj
 Q
 Q
@@ -15872,8 +15862,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -15888,16 +15877,16 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/file.c  Page 3) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/file.c  Page 3) 161.635 Tj
 0 -28.4801 Td
-(4500 // Read from file f.  Addr is kernel address.) 218.426 Tj
+(4500 // Read from file f.  Addr is kernel address.) 218.4257 Tj
 0 -37.9735 Td
 (4501 int) 34.9481 Tj
 0 -47.4668 Td
-(4502 fileread\(struct file *f, char *addr, int n\)) 209.689 Tj
+(4502 fileread\(struct file *f, char *addr, int n\)) 209.6887 Tj
 0 -56.9602 Td
 (4503 {) 26.2111 Tj
 0 -66.4535 Td
@@ -15905,94 +15894,94 @@ q
 0 -75.9469 Td
 (4505 ) 21.8426 Tj
 0 -85.4403 Td
-(4506   if\(f->readable == 0\)) 117.95 Tj
+(4506   if\(f->readable == 0\)) 117.9499 Tj
 0 -94.9336 Td
 (4507     return -1;) 83.0018 Tj
 0 -104.427 Td
-(4508   if\(f->type == FD_PIPE\)) 126.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
+(4508   if\(f->type == FD_PIPE\)) 126.6869 Tj
+0 -113.9203 Td
+(4509     return piperead\(f->pipe, addr, n\);) 187.8461 Tj
+0 -123.4137 Td
+(4510   if\(f->type == FD_INODE\){) 135.4239 Tj
+0 -132.9071 Td
 (4511     ilock\(f->ip\);) 96.1073 Tj
-0 -142.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
+0 -142.4004 Td
+(4512     if\(\(r = readi\(f->ip, addr, f->off, n\)\) > 0\)) 227.1628 Tj
+0 -151.8938 Td
+(4513       f->off += r;) 100.4758 Tj
+0 -161.3871 Td
+(4514     iunlock\(f->ip\);) 104.8443 Tj
+0 -170.8805 Td
 (4515     return r;) 78.6333 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (4516   }) 34.9481 Tj
-0 -189.867 Td
-(4517   panic\("fileread"\);) 109.213 Tj
-0 -199.361 Td
+0 -189.8672 Td
+(4517   panic\("fileread"\);) 109.2129 Tj
+0 -199.3606 Td
 (4518 }) 26.2111 Tj
-0 -208.854 Td
+0 -208.8539 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
+0 -218.3473 Td
+(4520 // Write to file f.  Addr is kernel address.) 214.0572 Tj
+0 -227.8407 Td
 (4521 int) 34.9481 Tj
 0 -237.334 Td
-(4522 filewrite\(struct file *f, char *addr, int n\)) 214.057 Tj
-0 -246.827 Td
+(4522 filewrite\(struct file *f, char *addr, int n\)) 214.0572 Tj
+0 -246.8274 Td
 (4523 {) 26.2111 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (4524   int r;) 56.7907 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (4525 ) 21.8426 Tj
-0 -275.307 Td
-(4526   if\(f->writable == 0\)) 117.95 Tj
-0 -284.801 Td
+0 -275.3075 Td
+(4526   if\(f->writable == 0\)) 117.9499 Tj
+0 -284.8008 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
+0 -294.2942 Td
+(4528   if\(f->type == FD_PIPE\)) 126.6869 Tj
+0 -303.7875 Td
+(4529     return pipewrite\(f->pipe, addr, n\);) 192.2146 Tj
+0 -313.2809 Td
+(4530   if\(f->type == FD_INODE\){) 135.4239 Tj
+0 -322.7743 Td
 (4531     ilock\(f->ip\);) 96.1073 Tj
-0 -332.268 Td
-(4532     if\(\(r = writei\(f->ip, addr, f->off, n\)\) > 0\)) 231.531 Tj
+0 -332.2676 Td
+(4532     if\(\(r = writei\(f->ip, addr, f->off, n\)\) > 0\)) 231.5313 Tj
 0 -341.761 Td
-(4533       f->off += r;) 100.476 Tj
-0 -351.254 Td
-(4534     iunlock\(f->ip\);) 104.844 Tj
-0 -360.748 Td
+(4533       f->off += r;) 100.4758 Tj
+0 -351.2543 Td
+(4534     iunlock\(f->ip\);) 104.8443 Tj
+0 -360.7477 Td
 (4535     return r;) 78.6333 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (4536   }) 34.9481 Tj
-0 -379.734 Td
-(4537   panic\("filewrite"\);) 113.581 Tj
-0 -389.228 Td
+0 -379.7344 Td
+(4537   panic\("filewrite"\);) 113.5814 Tj
+0 -389.2278 Td
 (4538 }) 26.2111 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (4539 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (4540 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4541 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4542 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4543 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4544 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4545 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4546 ) 21.8426 Tj
 0 -474.668 Td
 (4547 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4548 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4549 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 45) 34.9481 Tj
 Q
 Q
@@ -16007,16 +15996,16 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sysfile.c  Page 1) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sysfile.c  Page 1) 174.7406 Tj
 0 -28.4801 Td
-(4550 #include "types.h") 100.476 Tj
+(4550 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
 (4551 #include "defs.h") 96.1073 Tj
 0 -47.4668 Td
-(4552 #include "param.h") 100.476 Tj
+(4552 #include "param.h") 100.4758 Tj
 0 -56.9602 Td
 (4553 #include "stat.h") 96.1073 Tj
 0 -66.4535 Td
@@ -16026,94 +16015,94 @@ q
 0 -85.4403 Td
 (4556 #include "fs.h") 87.3703 Tj
 0 -94.9336 Td
-(4557 #include "fsvar.h") 100.476 Tj
+(4557 #include "fsvar.h") 100.4758 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
+0 -113.9203 Td
+(4559 #include "fcntl.h") 100.4758 Tj
+0 -123.4137 Td
 (4560 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (4561 // Fetch the nth word-sized system call argument as a file\
- descriptor) 323.27 Tj
-0 -142.4 Td
+ descriptor) 323.2701 Tj
+0 -142.4004 Td
 (4562 // and return both the descriptor and the corresponding st\
-ruct file.) 318.902 Tj
-0 -151.894 Td
+ruct file.) 318.9016 Tj
+0 -151.8938 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
+0 -161.3871 Td
+(4564 argfd\(int n, int *pfd, struct file **pf\)) 196.5831 Tj
+0 -170.8805 Td
 (4565 {) 26.2111 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (4566   int fd;) 61.1592 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (4567   struct file *f;) 96.1073 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (4568 ) 21.8426 Tj
-0 -208.854 Td
-(4569   if\(argint\(n, &fd\) < 0\)) 126.687 Tj
-0 -218.347 Td
+0 -208.8539 Td
+(4569   if\(argint\(n, &fd\) < 0\)) 126.6869 Tj
+0 -218.3473 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 -227.8407 Td
+(4571   if\(fd < 0 || fd >= NOFILE || \(f=cp->ofile[fd]\) == 0\)) 257.7424 Tj
 0 -237.334 Td
 (4572     return -1;) 83.0018 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (4573   if\(pfd\)) 61.1592 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (4574     *pfd = fd;) 83.0018 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (4575   if\(pf\)) 56.7907 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (4576     *pf = f;) 74.2647 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (4577   return 0;) 69.8962 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (4578 }) 26.2111 Tj
-0 -303.788 Td
+0 -303.7875 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
+0 -313.2809 Td
+(4580 // Allocate a file descriptor for the given file.) 235.8998 Tj
+0 -322.7743 Td
+(4581 // Takes over file reference from caller on success.) 249.0053 Tj
+0 -332.2676 Td
 (4582 static int) 65.5277 Tj
 0 -341.761 Td
-(4583 fdalloc\(struct file *f\)) 122.318 Tj
-0 -351.254 Td
+(4583 fdalloc\(struct file *f\)) 122.3184 Tj
+0 -351.2543 Td
 (4584 {) 26.2111 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (4585   int fd;) 61.1592 Tj
-0 -370.241 Td
+0 -370.2411 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
+0 -379.7344 Td
+(4587   for\(fd = 0; fd < NOFILE; fd++\){) 166.0035 Tj
+0 -389.2278 Td
+(4588     if\(cp->ofile[fd] == 0\){) 139.7925 Tj
+0 -398.7211 Td
+(4589       cp->ofile[fd] = f;) 126.6869 Tj
+0 -408.2145 Td
 (4590       return fd;) 91.7388 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4591     }) 43.6851 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4592   }) 34.9481 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4593   return -1;) 74.2647 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4594 }) 26.2111 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4595 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4596 ) 21.8426 Tj
 0 -474.668 Td
 (4597 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4598 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4599 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 45) 34.9481 Tj
 Q
 Q
@@ -16142,8 +16131,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -16158,10 +16146,10 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sysfile.c  Page 2) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sysfile.c  Page 2) 174.7406 Tj
 0 -28.4801 Td
 (4600 int) 34.9481 Tj
 0 -37.9735 Td
@@ -16173,98 +16161,98 @@ q
 0 -66.4535 Td
 (4604   int n;) 56.7907 Tj
 0 -75.9469 Td
-(4605   char *cp;) 69.8962 Tj
+(4605   char *p;) 65.5277 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
+tr\(1, &p, n\) < 0\)) 327.6386 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
+0 -113.9203 Td
+(4609   return fileread\(f, p, n\);) 139.7925 Tj
+0 -123.4137 Td
 (4610 }) 26.2111 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (4611 ) 21.8426 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (4612 int) 34.9481 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (4613 sys_write\(void\)) 87.3703 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (4614 {) 26.2111 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (4615   struct file *f;) 96.1073 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (4616   int n;) 56.7907 Tj
-0 -189.867 Td
-(4617   char *cp;) 69.8962 Tj
-0 -199.361 Td
+0 -189.8672 Td
+(4617   char *p;) 65.5277 Tj
+0 -199.3606 Td
 (4618 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 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
+tr\(1, &p, n\) < 0\)) 327.6386 Tj
+0 -218.3473 Td
 (4620     return -1;) 83.0018 Tj
-0 -227.841 Td
-(4621   return filewrite\(f, cp, n\);) 148.529 Tj
+0 -227.8407 Td
+(4621   return filewrite\(f, p, n\);) 144.161 Tj
 0 -237.334 Td
 (4622 }) 26.2111 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (4623 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (4624 int) 34.9481 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (4625 sys_dup\(void\)) 78.6333 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (4626 {) 26.2111 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (4627   struct file *f;) 96.1073 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (4628   int fd;) 61.1592 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (4629 ) 21.8426 Tj
-0 -313.281 Td
-(4630   if\(argfd\(0, 0, &f\) < 0\)) 131.055 Tj
-0 -322.774 Td
+0 -313.2809 Td
+(4630   if\(argfd\(0, 0, &f\) < 0\)) 131.0554 Tj
+0 -322.7743 Td
 (4631     return -1;) 83.0018 Tj
-0 -332.268 Td
-(4632   if\(\(fd=fdalloc\(f\)\) < 0\)) 131.055 Tj
+0 -332.2676 Td
+(4632   if\(\(fd=fdalloc\(f\)\) < 0\)) 131.0554 Tj
 0 -341.761 Td
 (4633     return -1;) 83.0018 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (4634   filedup\(f\);) 78.6333 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (4635   return fd;) 74.2647 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (4636 }) 26.2111 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (4637 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (4638 int) 34.9481 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (4639 sys_close\(void\)) 87.3703 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (4640 {) 26.2111 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4641   int fd;) 61.1592 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4642   struct file *f;) 96.1073 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4643 ) 21.8426 Tj
-0 -446.188 Td
-(4644   if\(argfd\(0, &fd, &f\) < 0\)) 139.792 Tj
-0 -455.681 Td
+0 -446.1879 Td
+(4644   if\(argfd\(0, &fd, &f\) < 0\)) 139.7925 Tj
+0 -455.6813 Td
 (4645     return -1;) 83.0018 Tj
-0 -465.175 Td
-(4646   cp->ofile[fd] = 0;) 109.213 Tj
+0 -465.1747 Td
+(4646   cp->ofile[fd] = 0;) 109.2129 Tj
 0 -474.668 Td
 (4647   fileclose\(f\);) 87.3703 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4648   return 0;) 69.8962 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4649 }) 26.2111 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 46) 34.9481 Tj
 Q
 Q
@@ -16279,10 +16267,10 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sysfile.c  Page 3) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sysfile.c  Page 3) 174.7406 Tj
 0 -28.4801 Td
 (4650 int) 34.9481 Tj
 0 -37.9735 Td
@@ -16292,7 +16280,7 @@ q
 0 -56.9602 Td
 (4653   struct file *f;) 96.1073 Tj
 0 -66.4535 Td
-(4654   struct stat *st;) 100.476 Tj
+(4654   struct stat *st;) 100.4758 Tj
 0 -75.9469 Td
 (4655 ) 21.8426 Tj
 0 -85.4403 Td
@@ -16301,91 +16289,91 @@ 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
+(4658   return filestat\(f, st\);) 131.0554 Tj
+0 -113.9203 Td
 (4659 }) 26.2111 Tj
-0 -123.414 Td
+0 -123.4137 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
+0 -132.9071 Td
+(4661 // Create the path new as a link to the same inode as old.) 275.2164 Tj
+0 -142.4004 Td
 (4662 int) 34.9481 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (4663 sys_link\(void\)) 83.0018 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (4664 {) 26.2111 Tj
-0 -170.88 Td
+0 -170.8805 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
+0 -180.3739 Td
+(4666   struct inode *dp, *ip;) 126.6869 Tj
+0 -189.8672 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
+0 -199.3606 Td
+(4668   if\(argstr\(0, &old\) < 0 || argstr\(1, &new\) < 0\)) 231.5313 Tj
+0 -208.8539 Td
 (4669     return -1;) 83.0018 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (4670   if\(\(ip = namei\(old\)\) == 0\)) 144.161 Tj
-0 -227.841 Td
+0 -227.8407 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
+0 -246.8274 Td
+(4673   if\(ip->type == T_DIR\){) 126.6869 Tj
+0 -256.3207 Td
+(4674     iunlockput\(ip\);) 104.8443 Tj
+0 -265.8141 Td
 (4675     return -1;) 83.0018 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (4676   }) 34.9481 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (4677   ip->nlink++;) 83.0018 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (4678   iupdate\(ip\);) 83.0018 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (4679   iunlock\(ip\);) 83.0018 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (4680 ) 21.8426 Tj
-0 -322.774 Td
-(4681   if\(\(dp = nameiparent\(new, name\)\) == 0\)) 196.583 Tj
-0 -332.268 Td
+0 -322.7743 Td
+(4681   if\(\(dp = nameiparent\(new, name\)\) == 0\)) 196.5831 Tj
+0 -332.2676 Td
 (4682     goto  bad;) 83.0018 Tj
 0 -341.761 Td
 (4683   ilock\(dp\);) 74.2647 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (4684   if\(dp->dev != ip->dev || dirlink\(dp, name, ip->inum\) \
-< 0\)) 279.585 Tj
-0 -360.748 Td
+< 0\)) 279.5849 Tj
+0 -360.7477 Td
 (4685     goto bad;) 78.6333 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (4686   iunlockput\(dp\);) 96.1073 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (4687   iput\(ip\);) 69.8962 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (4688   return 0;) 69.8962 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (4689 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (4690 bad:) 39.3166 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4691   if\(dp\)) 56.7907 Tj
-0 -427.201 Td
-(4692     iunlockput\(dp\);) 104.844 Tj
-0 -436.695 Td
+0 -427.2012 Td
+(4692     iunlockput\(dp\);) 104.8443 Tj
+0 -436.6946 Td
 (4693   ilock\(ip\);) 74.2647 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4694   ip->nlink--;) 83.0018 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4695   iupdate\(ip\);) 83.0018 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4696   iunlockput\(ip\);) 96.1073 Tj
 0 -474.668 Td
 (4697   return -1;) 74.2647 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4698 }) 26.2111 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4699 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 46) 34.9481 Tj
 Q
 Q
@@ -16414,8 +16402,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -16430,12 +16417,12 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sysfile.c  Page 4) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sysfile.c  Page 4) 174.7406 Tj
 0 -28.4801 Td
-(4700 // Is the directory dp empty except for "." and ".." ?) 257.742 Tj
+(4700 // Is the directory dp empty except for "." and ".." ?) 257.7424 Tj
 0 -37.9735 Td
 (4701 static int) 65.5277 Tj
 0 -47.4668 Td
@@ -16445,98 +16432,98 @@ q
 0 -66.4535 Td
 (4704   int off;) 65.5277 Tj
 0 -75.9469 Td
-(4705   struct dirent de;) 104.844 Tj
+(4705   struct dirent de;) 104.8443 Tj
 0 -85.4403 Td
 (4706 ) 21.8426 Tj
 0 -94.9336 Td
 (4707   for\(off=2*sizeof\(de\); off<dp->size; off+=sizeof\(de\)\
-\){) 262.111 Tj
+\){) 262.1109 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
+zeof\(de\)\)) 283.9534 Tj
+0 -113.9203 Td
+(4709       panic\("isdirempty: readi"\);) 166.0035 Tj
+0 -123.4137 Td
+(4710     if\(de.inum != 0\)) 109.2129 Tj
+0 -132.9071 Td
 (4711       return 0;) 87.3703 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (4712   }) 34.9481 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (4713   return 1;) 69.8962 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (4714 }) 26.2111 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (4715 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (4716 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (4717 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (4718 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (4719 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (4720 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (4721 ) 21.8426 Tj
 0 -237.334 Td
 (4722 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (4723 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (4724 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (4725 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (4726 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (4727 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (4728 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (4729 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (4730 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (4731 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (4732 ) 21.8426 Tj
 0 -341.761 Td
 (4733 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (4734 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (4735 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (4736 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (4737 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (4738 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (4739 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (4740 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4741 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4742 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4743 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4744 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4745 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4746 ) 21.8426 Tj
 0 -474.668 Td
 (4747 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4748 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4749 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 47) 34.9481 Tj
 Q
 Q
@@ -16551,10 +16538,10 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sysfile.c  Page 5) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sysfile.c  Page 5) 174.7406 Tj
 0 -28.4801 Td
 (4750 int) 34.9481 Tj
 0 -37.9735 Td
@@ -16562,102 +16549,102 @@ q
 0 -47.4668 Td
 (4752 {) 26.2111 Tj
 0 -56.9602 Td
-(4753   struct inode *ip, *dp;) 126.687 Tj
+(4753   struct inode *ip, *dp;) 126.6869 Tj
 0 -66.4535 Td
-(4754   struct dirent de;) 104.844 Tj
+(4754   struct dirent de;) 104.8443 Tj
 0 -75.9469 Td
-(4755   char name[DIRSIZ], *path;) 139.792 Tj
+(4755   char name[DIRSIZ], *path;) 139.7925 Tj
 0 -85.4403 Td
 (4756   uint off;) 69.8962 Tj
 0 -94.9336 Td
 (4757 ) 21.8426 Tj
 0 -104.427 Td
-(4758   if\(argstr\(0, &path\) < 0\)) 135.424 Tj
-0 -113.92 Td
+(4758   if\(argstr\(0, &path\) < 0\)) 135.4239 Tj
+0 -113.9203 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
+0 -123.4137 Td
+(4760   if\(\(dp = nameiparent\(path, name\)\) == 0\)) 200.9517 Tj
+0 -132.9071 Td
 (4761     return -1;) 83.0018 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (4762   ilock\(dp\);) 74.2647 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (4763 ) 21.8426 Tj
-0 -161.387 Td
-(4764   // Cannot unlink "." or "..".) 157.267 Tj
-0 -170.88 Td
+0 -161.3871 Td
+(4764   // Cannot unlink "." or "..".) 157.2665 Tj
+0 -170.8805 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
+= 0\){) 275.2164 Tj
+0 -180.3739 Td
+(4766     iunlockput\(dp\);) 104.8443 Tj
+0 -189.8672 Td
 (4767     return -1;) 83.0018 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (4768   }) 34.9481 Tj
-0 -208.854 Td
+0 -208.8539 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 -218.3473 Td
+(4770   if\(\(ip = dirlookup\(dp, name, &off\)\) == 0\){) 214.0572 Tj
+0 -227.8407 Td
+(4771     iunlockput\(dp\);) 104.8443 Tj
 0 -237.334 Td
 (4772     return -1;) 83.0018 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (4773   }) 34.9481 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (4774   ilock\(ip\);) 74.2647 Tj
-0 -265.814 Td
+0 -265.8141 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
+0 -275.3075 Td
+(4776   if\(ip->nlink < 1\)) 104.8443 Tj
+0 -284.8008 Td
+(4777     panic\("unlink: nlink < 1"\);) 157.2665 Tj
+0 -294.2942 Td
+(4778   if\(ip->type == T_DIR && !isdirempty\(ip\)\){) 209.6887 Tj
+0 -303.7875 Td
+(4779     iunlockput\(ip\);) 104.8443 Tj
+0 -313.2809 Td
+(4780     iunlockput\(dp\);) 104.8443 Tj
+0 -322.7743 Td
 (4781     return -1;) 83.0018 Tj
-0 -332.268 Td
+0 -332.2676 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
+0 -351.2543 Td
+(4784   memset\(&de, 0, sizeof\(de\)\);) 148.5295 Tj
+0 -360.7477 Td
 (4785   if\(writei\(dp, \(char*\)&de, off, sizeof\(de\)\) != siz\
-eof\(de\)\)) 279.585 Tj
-0 -370.241 Td
+eof\(de\)\)) 279.5849 Tj
+0 -370.2411 Td
 (4786     panic\("unlink: writei"\);) 144.161 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (4787   iunlockput\(dp\);) 96.1073 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (4788 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (4789   ip->nlink--;) 83.0018 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (4790   iupdate\(ip\);) 83.0018 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4791   iunlockput\(ip\);) 96.1073 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4792   return 0;) 69.8962 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4793 }) 26.2111 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4794 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4795 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4796 ) 21.8426 Tj
 0 -474.668 Td
 (4797 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4798 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4799 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 47) 34.9481 Tj
 Q
 Q
@@ -16686,8 +16673,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -16702,115 +16688,115 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sysfile.c  Page 6) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sysfile.c  Page 6) 174.7406 Tj
 0 -28.4801 Td
-(4800 static struct inode*) 109.213 Tj
+(4800 static struct inode*) 109.2129 Tj
 0 -37.9735 Td
 (4801 create\(char *path, int canexist, short type, short major,\
- short minor\)) 327.639 Tj
+ short minor\)) 327.6386 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
+(4804   struct inode *ip, *dp;) 126.6869 Tj
 0 -75.9469 Td
-(4805   char name[DIRSIZ];) 109.213 Tj
+(4805   char name[DIRSIZ];) 109.2129 Tj
 0 -85.4403 Td
 (4806 ) 21.8426 Tj
 0 -94.9336 Td
-(4807   if\(\(dp = nameiparent\(path, name\)\) == 0\)) 200.952 Tj
+(4807   if\(\(dp = nameiparent\(path, name\)\) == 0\)) 200.9517 Tj
 0 -104.427 Td
 (4808     return 0;) 78.6333 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (4809   ilock\(dp\);) 74.2647 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (4810 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 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
+0\){) 266.4794 Tj
+0 -142.4004 Td
+(4812     iunlockput\(dp\);) 104.8443 Tj
+0 -151.8938 Td
 (4813     ilock\(ip\);) 83.0018 Tj
-0 -161.387 Td
+0 -161.3871 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
+r != minor\){) 323.2701 Tj
+0 -170.8805 Td
+(4815       iunlockput\(ip\);) 113.5814 Tj
+0 -180.3739 Td
 (4816       return 0;) 87.3703 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (4817     }) 43.6851 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (4818     return ip;) 83.0018 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (4819   }) 34.9481 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (4820 ) 21.8426 Tj
-0 -227.841 Td
-(4821   if\(\(ip = ialloc\(dp->dev, type\)\) == 0\){) 196.583 Tj
+0 -227.8407 Td
+(4821   if\(\(ip = ialloc\(dp->dev, type\)\) == 0\){) 196.5831 Tj
 0 -237.334 Td
-(4822     iunlockput\(dp\);) 104.844 Tj
-0 -246.827 Td
+(4822     iunlockput\(dp\);) 104.8443 Tj
+0 -246.8274 Td
 (4823     return 0;) 78.6333 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (4824   }) 34.9481 Tj
-0 -265.814 Td
+0 -265.8141 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
+0 -275.3075 Td
+(4826   ip->major = major;) 109.2129 Tj
+0 -284.8008 Td
+(4827   ip->minor = minor;) 109.2129 Tj
+0 -294.2942 Td
 (4828   ip->nlink = 1;) 91.7388 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (4829   iupdate\(ip\);) 83.0018 Tj
-0 -313.281 Td
+0 -313.2809 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 -322.7743 Td
+(4831   if\(dirlink\(dp, name, ip->inum\) < 0\){) 187.8461 Tj
+0 -332.2676 Td
+(4832     ip->nlink = 0;) 100.4758 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
+(4833     iunlockput\(ip\);) 104.8443 Tj
+0 -351.2543 Td
+(4834     iunlockput\(dp\);) 104.8443 Tj
+0 -360.7477 Td
 (4835     return 0;) 78.6333 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (4836   }) 34.9481 Tj
-0 -379.734 Td
+0 -379.7344 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
+0 -389.2278 Td
+(4838   if\(type == T_DIR\){  // Create . and .. entries.) 235.8998 Tj
+0 -398.7211 Td
+(4839     dp->nlink++;  // for "..") 148.5295 Tj
+0 -408.2145 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
+0 -417.7079 Td
+(4841     // No ip->nlink++ for ".": avoid cyclic ref count.) 257.7424 Tj
+0 -427.2012 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
+..", dp->inum\) < 0\)) 340.7441 Tj
+0 -436.6946 Td
+(4843       panic\("create dots"\);) 139.7925 Tj
+0 -446.1879 Td
 (4844   }) 34.9481 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4845   iunlockput\(dp\);) 96.1073 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4846   return ip;) 74.2647 Tj
 0 -474.668 Td
 (4847 }) 26.2111 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4848 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4849 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 48) 34.9481 Tj
 Q
 Q
@@ -16825,10 +16811,10 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sysfile.c  Page 7) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sysfile.c  Page 7) 174.7406 Tj
 0 -28.4801 Td
 (4850 int) 34.9481 Tj
 0 -37.9735 Td
@@ -16842,97 +16828,97 @@ q
 0 -75.9469 Td
 (4855   struct file *f;) 96.1073 Tj
 0 -85.4403 Td
-(4856   struct inode *ip;) 104.844 Tj
+(4856   struct inode *ip;) 104.8443 Tj
 0 -94.9336 Td
 (4857 ) 21.8426 Tj
 0 -104.427 Td
-(4858   if\(argstr\(0, &path\) < 0 || argint\(1, &omode\) < 0\)) 244.637 Tj
-0 -113.92 Td
+(4858   if\(argstr\(0, &path\) < 0 || argint\(1, &omode\) < 0\)) 244.6368 Tj
+0 -113.9203 Td
 (4859     return -1;) 83.0018 Tj
-0 -123.414 Td
+0 -123.4137 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
+0 -132.9071 Td
+(4861   if\(omode & O_CREATE\){) 122.3184 Tj
+0 -142.4004 Td
+(4862     if\(\(ip = create\(path, 1, T_FILE, 0, 0\)\) == 0\)) 235.8998 Tj
+0 -151.8938 Td
 (4863       return -1;) 91.7388 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (4864   } else {) 65.5277 Tj
-0 -170.88 Td
-(4865     if\(\(ip = namei\(path\)\) == 0\)) 157.267 Tj
-0 -180.374 Td
+0 -170.8805 Td
+(4865     if\(\(ip = namei\(path\)\) == 0\)) 157.2665 Tj
+0 -180.3739 Td
 (4866       return -1;) 91.7388 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (4867     ilock\(ip\);) 83.0018 Tj
-0 -199.361 Td
+0 -199.3606 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
+\)\){) 270.8479 Tj
+0 -208.8539 Td
+(4869       iunlockput\(ip\);) 113.5814 Tj
+0 -218.3473 Td
 (4870       return -1;) 91.7388 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (4871     }) 43.6851 Tj
 0 -237.334 Td
 (4872   }) 34.9481 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (4873 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (4874   if\(\(f = filealloc\(\)\) == 0 || \(fd = fdalloc\(f\)\) \
-< 0\){) 257.742 Tj
-0 -265.814 Td
+< 0\){) 257.7424 Tj
+0 -265.8141 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
+0 -275.3075 Td
+(4876       fileclose\(f\);) 104.8443 Tj
+0 -284.8008 Td
+(4877     iunlockput\(ip\);) 104.8443 Tj
+0 -294.2942 Td
 (4878     return -1;) 83.0018 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (4879   }) 34.9481 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (4880   iunlock\(ip\);) 83.0018 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (4881 ) 21.8426 Tj
-0 -332.268 Td
-(4882   f->type = FD_INODE;) 113.581 Tj
+0 -332.2676 Td
+(4882   f->type = FD_INODE;) 113.5814 Tj
 0 -341.761 Td
 (4883   f->ip = ip;) 78.6333 Tj
-0 -351.254 Td
+0 -351.2543 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
+0 -360.7477 Td
+(4885   f->readable = !\(omode & O_WRONLY\);) 179.1091 Tj
+0 -370.2411 Td
 (4886   f->writable = \(omode & O_WRONLY\) || \(omode & O_RDWR\)\
-;) 262.111 Tj
-0 -379.734 Td
+;) 262.1109 Tj
+0 -379.7344 Td
 (4887 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (4888   return fd;) 74.2647 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (4889 }) 26.2111 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (4890 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4891 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4892 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4893 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4894 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4895 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4896 ) 21.8426 Tj
 0 -474.668 Td
 (4897 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4898 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4899 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 48) 34.9481 Tj
 Q
 Q
@@ -16961,8 +16947,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -16977,10 +16962,10 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sysfile.c  Page 8) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sysfile.c  Page 8) 174.7406 Tj
 0 -28.4801 Td
 (4900 int) 34.9481 Tj
 0 -37.9735 Td
@@ -16988,102 +16973,102 @@ q
 0 -47.4668 Td
 (4902 {) 26.2111 Tj
 0 -56.9602 Td
-(4903   struct inode *ip;) 104.844 Tj
+(4903   struct inode *ip;) 104.8443 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
+(4906   int major, minor;) 104.8443 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
+(4908   if\(\(len=argstr\(0, &path\)\) < 0 ||) 170.3721 Tj
+0 -113.9203 Td
+(4909      argint\(1, &major\) < 0 ||) 148.5295 Tj
+0 -123.4137 Td
+(4910      argint\(2, &minor\) < 0 ||) 148.5295 Tj
+0 -132.9071 Td
+(4911      \(ip = create\(path, 0, T_DEV, major, minor\)\) == 0\)) 257.7424 Tj
+0 -142.4004 Td
 (4912     return -1;) 83.0018 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (4913   iunlockput\(ip\);) 96.1073 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (4914   return 0;) 69.8962 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (4915 }) 26.2111 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (4916 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (4917 int) 34.9481 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (4918 sys_mkdir\(void\)) 87.3703 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (4919 {) 26.2111 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (4920   char *path;) 78.6333 Tj
-0 -227.841 Td
-(4921   struct inode *ip;) 104.844 Tj
+0 -227.8407 Td
+(4921   struct inode *ip;) 104.8443 Tj
 0 -237.334 Td
 (4922 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (4923   if\(argstr\(0, &path\) < 0 || \(ip = create\(path, 0, T_\
-DIR, 0, 0\)\) == 0\)) 327.639 Tj
-0 -256.321 Td
+DIR, 0, 0\)\) == 0\)) 327.6386 Tj
+0 -256.3207 Td
 (4924     return -1;) 83.0018 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (4925   iunlockput\(ip\);) 96.1073 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (4926   return 0;) 69.8962 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (4927 }) 26.2111 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (4928 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (4929 int) 34.9481 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (4930 sys_chdir\(void\)) 87.3703 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (4931 {) 26.2111 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (4932   char *path;) 78.6333 Tj
 0 -341.761 Td
-(4933   struct inode *ip;) 104.844 Tj
-0 -351.254 Td
+(4933   struct inode *ip;) 104.8443 Tj
+0 -351.2543 Td
 (4934 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (4935   if\(argstr\(0, &path\) < 0 || \(ip = namei\(path\)\) == \
-0\)) 253.374 Tj
-0 -370.241 Td
+0\)) 253.3738 Tj
+0 -370.2411 Td
 (4936     return -1;) 83.0018 Tj
-0 -379.734 Td
+0 -379.7344 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
+0 -389.2278 Td
+(4938   if\(ip->type != T_DIR\){) 126.6869 Tj
+0 -398.7211 Td
+(4939     iunlockput\(ip\);) 104.8443 Tj
+0 -408.2145 Td
 (4940     return -1;) 83.0018 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (4941   }) 34.9481 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (4942   iunlock\(ip\);) 83.0018 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4943   iput\(cp->cwd\);) 91.7388 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4944   cp->cwd = ip;) 87.3703 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4945   return 0;) 69.8962 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4946 }) 26.2111 Tj
 0 -474.668 Td
 (4947 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4948 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4949 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 49) 34.9481 Tj
 Q
 Q
@@ -17098,10 +17083,10 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sysfile.c  Page 9) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sysfile.c  Page 9) 174.7406 Tj
 0 -28.4801 Td
 (4950 int) 34.9481 Tj
 0 -37.9735 Td
@@ -17109,102 +17094,102 @@ q
 0 -47.4668 Td
 (4952 {) 26.2111 Tj
 0 -56.9602 Td
-(4953   char *path, *argv[20];) 126.687 Tj
+(4953   char *path, *argv[20];) 126.6869 Tj
 0 -66.4535 Td
 (4954   int i;) 56.7907 Tj
 0 -75.9469 Td
-(4955   uint uargv, uarg;) 104.844 Tj
+(4955   uint uargv, uarg;) 104.8443 Tj
 0 -85.4403 Td
 (4956 ) 21.8426 Tj
 0 -94.9336 Td
 (4957   if\(argstr\(0, &path\) < 0 || argint\(1, \(int*\)&uargv\)\
- < 0\)) 270.848 Tj
+ < 0\)) 270.8479 Tj
 0 -104.427 Td
 (4958     return -1;) 83.0018 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (4959   memset\(argv, 0, sizeof\(argv\)\);) 161.635 Tj
-0 -123.414 Td
+0 -123.4137 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
+0 -132.9071 Td
+(4961     if\(i >= NELEM\(argv\)\)) 126.6869 Tj
+0 -142.4004 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
+0 -151.8938 Td
+(4963     if\(fetchint\(cp, uargv+4*i, \(int*\)&uarg\) < 0\)) 231.5313 Tj
+0 -161.3871 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
+0 -170.8805 Td
+(4965     if\(uarg == 0\){) 100.4758 Tj
+0 -180.3739 Td
+(4966       argv[i] = 0;) 100.4758 Tj
+0 -189.8672 Td
 (4967       break;) 74.2647 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (4968     }) 43.6851 Tj
-0 -208.854 Td
-(4969     if\(fetchstr\(cp, uarg, &argv[i]\) < 0\)) 196.583 Tj
-0 -218.347 Td
+0 -208.8539 Td
+(4969     if\(fetchstr\(cp, uarg, &argv[i]\) < 0\)) 196.5831 Tj
+0 -218.3473 Td
 (4970       return -1;) 91.7388 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (4971   }) 34.9481 Tj
 0 -237.334 Td
-(4972   return exec\(path, argv\);) 135.424 Tj
-0 -246.827 Td
+(4972   return exec\(path, argv\);) 135.4239 Tj
+0 -246.8274 Td
 (4973 }) 26.2111 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (4974 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (4975 int) 34.9481 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (4976 sys_pipe\(void\)) 83.0018 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (4977 {) 26.2111 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (4978   int *fd;) 65.5277 Tj
-0 -303.788 Td
-(4979   struct file *rf, *wf;) 122.318 Tj
-0 -313.281 Td
+0 -303.7875 Td
+(4979   struct file *rf, *wf;) 122.3184 Tj
+0 -313.2809 Td
 (4980   int fd0, fd1;) 87.3703 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (4981 ) 21.8426 Tj
-0 -332.268 Td
-(4982   if\(argptr\(0, \(void*\)&fd, 2*sizeof\(fd[0]\)\) < 0\)) 231.531 Tj
+0 -332.2676 Td
+(4982   if\(argptr\(0, \(void*\)&fd, 2*sizeof\(fd[0]\)\) < 0\)) 231.5313 Tj
 0 -341.761 Td
 (4983     return -1;) 83.0018 Tj
-0 -351.254 Td
-(4984   if\(pipealloc\(&rf, &wf\) < 0\)) 148.529 Tj
-0 -360.748 Td
+0 -351.2543 Td
+(4984   if\(pipealloc\(&rf, &wf\) < 0\)) 148.5295 Tj
+0 -360.7477 Td
 (4985     return -1;) 83.0018 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (4986   fd0 = -1;) 69.8962 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (4987   if\(\(fd0 = fdalloc\(rf\)\) < 0 || \(fd1 = fdalloc\(wf\)\
-\) < 0\){) 270.848 Tj
-0 -389.228 Td
+\) < 0\){) 270.8479 Tj
+0 -389.2278 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
+0 -398.7211 Td
+(4989       cp->ofile[fd0] = 0;) 131.0554 Tj
+0 -408.2145 Td
+(4990     fileclose\(rf\);) 100.4758 Tj
+0 -417.7079 Td
+(4991     fileclose\(wf\);) 100.4758 Tj
+0 -427.2012 Td
 (4992     return -1;) 83.0018 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (4993   }) 34.9481 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (4994   fd[0] = fd0;) 83.0018 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (4995   fd[1] = fd1;) 83.0018 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (4996   return 0;) 69.8962 Tj
 0 -474.668 Td
 (4997 }) 26.2111 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (4998 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (4999 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 49) 34.9481 Tj
 Q
 Q
@@ -17233,8 +17218,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -17249,14 +17233,14 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/exec.c  Page 1) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/exec.c  Page 1) 161.635 Tj
 0 -28.4801 Td
-(5000 #include "types.h") 100.476 Tj
+(5000 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
-(5001 #include "param.h") 100.476 Tj
+(5001 #include "param.h") 100.4758 Tj
 0 -47.4668 Td
 (5002 #include "mmu.h") 91.7388 Tj
 0 -56.9602 Td
@@ -17271,92 +17255,92 @@ q
 (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
+0 -113.9203 Td
+(5009 exec\(char *path, char **argv\)) 148.5295 Tj
+0 -123.4137 Td
 (5010 {) 26.2111 Tj
-0 -132.907 Td
-(5011   char *mem, *s, *last;) 122.318 Tj
-0 -142.4 Td
+0 -132.9071 Td
+(5011   char *mem, *s, *last;) 122.3184 Tj
+0 -142.4004 Td
 (5012   int i, argc, arglen, len, off;) 161.635 Tj
-0 -151.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
+0 -151.8938 Td
+(5013   uint sz, sp, argp;) 109.2129 Tj
+0 -161.3871 Td
+(5014   struct elfhdr elf;) 109.2129 Tj
+0 -170.8805 Td
+(5015   struct inode *ip;) 104.8443 Tj
+0 -180.3739 Td
+(5016   struct proghdr ph;) 109.2129 Tj
+0 -189.8672 Td
 (5017 ) 21.8426 Tj
-0 -199.361 Td
-(5018   if\(\(ip = namei\(path\)\) == 0\)) 148.529 Tj
-0 -208.854 Td
+0 -199.3606 Td
+(5018   if\(\(ip = namei\(path\)\) == 0\)) 148.5295 Tj
+0 -208.8539 Td
 (5019     return -1;) 83.0018 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (5020   ilock\(ip\);) 74.2647 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (5021 ) 21.8426 Tj
 0 -237.334 Td
-(5022   // Compute memory size of new process.) 196.583 Tj
-0 -246.827 Td
+(5022   // Compute memory size of new process.) 196.5831 Tj
+0 -246.8274 Td
 (5023   mem = 0;) 65.5277 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (5024   sz = 0;) 61.1592 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (5025 ) 21.8426 Tj
-0 -275.307 Td
-(5026   // Program segments.) 117.95 Tj
-0 -284.801 Td
+0 -275.3075 Td
+(5026   // Program segments.) 117.9499 Tj
+0 -284.8008 Td
 (5027   if\(readi\(ip, \(char*\)&elf, 0, sizeof\(elf\)\) < sizeo\
-f\(elf\)\)) 275.216 Tj
-0 -294.294 Td
+f\(elf\)\)) 275.2164 Tj
+0 -294.2942 Td
 (5028     goto bad;) 78.6333 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (5029   if\(elf.magic != ELF_MAGIC\)) 144.161 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (5030     goto bad;) 78.6333 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (5031   for\(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof\(\
 ph\)\){) 288.322 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (5032     if\(readi\(ip, \(char*\)&ph, off, sizeof\(ph\)\) != si\
-zeof\(ph\)\)) 283.953 Tj
+zeof\(ph\)\)) 283.9534 Tj
 0 -341.761 Td
 (5033       goto bad;) 87.3703 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (5034     if\(ph.type != ELF_PROG_LOAD\)) 161.635 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (5035       continue;) 87.3703 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (5036     if\(ph.memsz < ph.filesz\)) 144.161 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (5037       goto bad;) 87.3703 Tj
-0 -389.228 Td
-(5038     sz += ph.memsz;) 104.844 Tj
-0 -398.721 Td
+0 -389.2278 Td
+(5038     sz += ph.memsz;) 104.8443 Tj
+0 -398.7211 Td
 (5039   }) 34.9481 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (5040 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (5041   // Arguments.) 87.3703 Tj
-0 -427.201 Td
+0 -427.2012 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
+0 -436.6946 Td
+(5043   for\(argc=0; argv[argc]; argc++\)) 166.0035 Tj
+0 -446.1879 Td
+(5044     arglen += strlen\(argv[argc]\) + 1;) 183.4776 Tj
+0 -455.6813 Td
+(5045   arglen = \(arglen+3\) & ~3;) 139.7925 Tj
+0 -465.1747 Td
 (5046   sz += arglen + 4*\(argc+1\);) 144.161 Tj
 0 -474.668 Td
 (5047 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5048   // Stack.) 69.8962 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5049   sz += PAGE;) 78.6333 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 50) 34.9481 Tj
 Q
 Q
@@ -17371,22 +17355,22 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/exec.c  Page 2) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/exec.c  Page 2) 161.635 Tj
 0 -28.4801 Td
-(5050   // Allocate program memory.) 148.529 Tj
+(5050   // Allocate program memory.) 148.5295 Tj
 0 -37.9735 Td
-(5051   sz = \(sz+PAGE-1\) & ~\(PAGE-1\);) 157.267 Tj
+(5051   sz = \(sz+PAGE-1\) & ~\(PAGE-1\);) 157.2665 Tj
 0 -47.4668 Td
-(5052   mem = kalloc\(sz\);) 104.844 Tj
+(5052   mem = kalloc\(sz\);) 104.8443 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
+(5055   memset\(mem, 0, sz\);) 113.5814 Tj
 0 -85.4403 Td
 (5056 ) 21.8426 Tj
 0 -94.9336 Td
@@ -17394,92 +17378,92 @@ q
 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
+0 -113.9203 Td
 (5059     if\(readi\(ip, \(char*\)&ph, off, sizeof\(ph\)\) != si\
-zeof\(ph\)\)) 283.953 Tj
-0 -123.414 Td
+zeof\(ph\)\)) 283.9534 Tj
+0 -123.4137 Td
 (5060       goto bad;) 87.3703 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (5061     if\(ph.type != ELF_PROG_LOAD\)) 161.635 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (5062       continue;) 87.3703 Tj
-0 -151.894 Td
-(5063     if\(ph.va + ph.memsz > sz\)) 148.529 Tj
-0 -161.387 Td
+0 -151.8938 Td
+(5063     if\(ph.va + ph.memsz > sz\)) 148.5295 Tj
+0 -161.3871 Td
 (5064       goto bad;) 87.3703 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (5065     if\(readi\(ip, mem + ph.va, ph.offset, ph.filesz\) != \
 ph.filesz\)) 305.796 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (5066       goto bad;) 87.3703 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (5067     memset\(mem + ph.va + ph.filesz, 0, ph.memsz - ph.file\
 sz\);) 288.322 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (5068   }) 34.9481 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (5069   iunlockput\(ip\);) 96.1073 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (5070 ) 21.8426 Tj
-0 -227.841 Td
-(5071   // Initialize stack.) 117.95 Tj
+0 -227.8407 Td
+(5071   // Initialize stack.) 117.9499 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
+0 -246.8274 Td
+(5073   argp = sz - arglen - 4*\(argc+1\);) 170.3721 Tj
+0 -256.3207 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
+0 -265.8141 Td
+(5075   // Copy argv strings and pointers to stack.) 218.4257 Tj
+0 -275.3075 Td
+(5076   *\(uint*\)\(mem+argp + 4*argc\) = 0;  // argv[argc]) 235.8998 Tj
+0 -284.8008 Td
+(5077   for\(i=argc-1; i>=0; i--\){) 139.7925 Tj
+0 -294.2942 Td
 (5078     len = strlen\(argv[i]\) + 1;) 152.898 Tj
-0 -303.788 Td
+0 -303.7875 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
+0 -313.2809 Td
+(5080     memmove\(mem+sp, argv[i], len\);) 170.3721 Tj
+0 -322.7743 Td
+(5081     *\(uint*\)\(mem+argp + 4*i\) = sp;  // argv[i]) 222.7942 Tj
+0 -332.2676 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
+0 -351.2543 Td
+(5084   // Stack frame for main\(argc, argv\), below arguments.) 262.1109 Tj
+0 -360.7477 Td
 (5085   sp = argp;) 74.2647 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (5086   sp -= 4;) 65.5277 Tj
-0 -379.734 Td
-(5087   *\(uint*\)\(mem+sp\) = argp;) 135.424 Tj
-0 -389.228 Td
+0 -379.7344 Td
+(5087   *\(uint*\)\(mem+sp\) = argp;) 135.4239 Tj
+0 -389.2278 Td
 (5088   sp -= 4;) 65.5277 Tj
-0 -398.721 Td
-(5089   *\(uint*\)\(mem+sp\) = argc;) 135.424 Tj
-0 -408.214 Td
+0 -398.7211 Td
+(5089   *\(uint*\)\(mem+sp\) = argc;) 135.4239 Tj
+0 -408.2145 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
+0 -417.7079 Td
+(5091   *\(uint*\)\(mem+sp\) = 0xffffffff;   // fake return pc) 249.0053 Tj
+0 -427.2012 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
+0 -436.6946 Td
+(5093   // Save program name for debugging.) 183.4776 Tj
+0 -446.1879 Td
+(5094   for\(last=s=path; *s; s++\)) 139.7925 Tj
+0 -455.6813 Td
 (5095     if\(*s == '/'\)) 96.1073 Tj
-0 -465.175 Td
+0 -465.1747 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
+(5097   safestrcpy\(cp->name, last, sizeof\(cp->name\)\);) 227.1628 Tj
+0 -484.1614 Td
 (5098 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5099 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 50) 34.9481 Tj
 Q
 Q
@@ -17508,8 +17492,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -17524,111 +17507,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/exec.c  Page 3) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/exec.c  Page 3) 161.635 Tj
 0 -28.4801 Td
-(5100   // Commit to the new image.) 148.529 Tj
+(5100   // Commit to the new image.) 148.5295 Tj
 0 -37.9735 Td
-(5101   kfree\(cp->mem, cp->sz\);) 131.055 Tj
+(5101   kfree\(cp->mem, cp->sz\);) 131.0554 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
+(5104   cp->tf->eip = elf.entry;  // main) 174.7406 Tj
 0 -75.9469 Td
-(5105   cp->tf->esp = sp;) 104.844 Tj
+(5105   cp->tf->esp = sp;) 104.8443 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
+0 -113.9203 Td
 (5109  bad:) 43.6851 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (5110   if\(mem\)) 61.1592 Tj
-0 -132.907 Td
-(5111     kfree\(mem, sz\);) 104.844 Tj
-0 -142.4 Td
+0 -132.9071 Td
+(5111     kfree\(mem, sz\);) 104.8443 Tj
+0 -142.4004 Td
 (5112   iunlockput\(ip\);) 96.1073 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (5113   return -1;) 74.2647 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (5114 }) 26.2111 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (5115 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (5116 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (5117 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (5118 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (5119 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (5120 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (5121 ) 21.8426 Tj
 0 -237.334 Td
 (5122 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (5123 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (5124 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (5125 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (5126 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (5127 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (5128 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (5129 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (5130 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (5131 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (5132 ) 21.8426 Tj
 0 -341.761 Td
 (5133 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (5134 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (5135 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (5136 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (5137 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (5138 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (5139 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (5140 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (5141 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (5142 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (5143 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (5144 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (5145 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (5146 ) 21.8426 Tj
 0 -474.668 Td
 (5147 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5148 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5149 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 51) 34.9481 Tj
 Q
 Q
@@ -17643,16 +17626,16 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/pipe.c  Page 1) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/pipe.c  Page 1) 161.635 Tj
 0 -28.4801 Td
-(5150 #include "types.h") 100.476 Tj
+(5150 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
 (5151 #include "defs.h") 96.1073 Tj
 0 -47.4668 Td
-(5152 #include "param.h") 100.476 Tj
+(5152 #include "param.h") 100.4758 Tj
 0 -56.9602 Td
 (5153 #include "mmu.h") 91.7388 Tj
 0 -66.4535 Td
@@ -17660,95 +17643,95 @@ q
 0 -75.9469 Td
 (5155 #include "file.h") 96.1073 Tj
 0 -85.4403 Td
-(5156 #include "spinlock.h") 113.581 Tj
+(5156 #include "spinlock.h") 113.5814 Tj
 0 -94.9336 Td
 (5157 ) 21.8426 Tj
 0 -104.427 Td
-(5158 #define PIPESIZE 512) 109.213 Tj
-0 -113.92 Td
+(5158 #define PIPESIZE 512) 109.2129 Tj
+0 -113.9203 Td
 (5159 ) 21.8426 Tj
-0 -123.414 Td
+0 -123.4137 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
+0 -132.9071 Td
+(5161   int readopen;   // read fd is still open) 205.3202 Tj
+0 -142.4004 Td
+(5162   int writeopen;  // write fd is still open) 209.6887 Tj
+0 -151.8938 Td
+(5163   uint writep;    // next index to write) 196.5831 Tj
+0 -161.3871 Td
+(5164   uint readp;     // next index to read) 192.2146 Tj
+0 -170.8805 Td
+(5165   struct spinlock lock;) 122.3184 Tj
+0 -180.3739 Td
+(5166   char data[PIPESIZE];) 117.9499 Tj
+0 -189.8672 Td
 (5167 };) 30.5796 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (5168 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 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
+0 -218.3473 Td
+(5170 pipealloc\(struct file **f0, struct file **f1\)) 218.4257 Tj
+0 -227.8407 Td
 (5171 {) 26.2111 Tj
 0 -237.334 Td
 (5172   struct pipe *p;) 96.1073 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (5173 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (5174   p = 0;) 56.7907 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (5175   *f0 = *f1 = 0;) 91.7388 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (5176   if\(\(*f0 = filealloc\(\)\) == 0 || \(*f1 = filealloc\(\)\
-\) == 0\)) 275.216 Tj
-0 -284.801 Td
+\) == 0\)) 275.2164 Tj
+0 -284.8008 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
+0 -294.2942 Td
+(5178   if\(\(p = \(struct pipe*\)kalloc\(PAGE\)\) == 0\)) 209.6887 Tj
+0 -303.7875 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
+0 -313.2809 Td
+(5180   p->readopen = 1;) 100.4758 Tj
+0 -322.7743 Td
+(5181   p->writeopen = 1;) 104.8443 Tj
+0 -332.2676 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
+0 -351.2543 Td
+(5184   initlock\(&p->lock, "pipe"\);) 148.5295 Tj
+0 -360.7477 Td
+(5185   \(*f0\)->type = FD_PIPE;) 126.6869 Tj
+0 -370.2411 Td
+(5186   \(*f0\)->readable = 1;) 117.9499 Tj
+0 -379.7344 Td
+(5187   \(*f0\)->writable = 0;) 117.9499 Tj
+0 -389.2278 Td
+(5188   \(*f0\)->pipe = p;) 100.4758 Tj
+0 -398.7211 Td
+(5189   \(*f1\)->type = FD_PIPE;) 126.6869 Tj
+0 -408.2145 Td
+(5190   \(*f1\)->readable = 0;) 117.9499 Tj
+0 -417.7079 Td
+(5191   \(*f1\)->writable = 1;) 117.9499 Tj
+0 -427.2012 Td
+(5192   \(*f1\)->pipe = p;) 100.4758 Tj
+0 -436.6946 Td
 (5193   return 0;) 69.8962 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (5194 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (5195 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (5196 ) 21.8426 Tj
 0 -474.668 Td
 (5197 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5198 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5199 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 51) 34.9481 Tj
 Q
 Q
@@ -17777,8 +17760,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -17793,111 +17775,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/pipe.c  Page 2) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+(5202     kfree\(\(char*\)p, PAGE\);) 135.4239 Tj
 0 -56.9602 Td
 (5203   if\(*f0\){) 65.5277 Tj
 0 -66.4535 Td
-(5204     \(*f0\)->type = FD_NONE;) 135.424 Tj
+(5204     \(*f0\)->type = FD_NONE;) 135.4239 Tj
 0 -75.9469 Td
-(5205     fileclose\(*f0\);) 104.844 Tj
+(5205     fileclose\(*f0\);) 104.8443 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
+(5208     \(*f1\)->type = FD_NONE;) 135.4239 Tj
+0 -113.9203 Td
+(5209     fileclose\(*f1\);) 104.8443 Tj
+0 -123.4137 Td
 (5210   }) 34.9481 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (5211   return -1;) 74.2647 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (5212 }) 26.2111 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (5213 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (5214 void) 39.3166 Tj
-0 -170.88 Td
-(5215 pipeclose\(struct pipe *p, int writable\)) 192.215 Tj
-0 -180.374 Td
+0 -170.8805 Td
+(5215 pipeclose\(struct pipe *p, int writable\)) 192.2146 Tj
+0 -180.3739 Td
 (5216 {) 26.2111 Tj
-0 -189.867 Td
-(5217   acquire\(&p->lock\);) 109.213 Tj
-0 -199.361 Td
+0 -189.8672 Td
+(5217   acquire\(&p->lock\);) 109.2129 Tj
+0 -199.3606 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
+0 -208.8539 Td
+(5219     p->writeopen = 0;) 113.5814 Tj
+0 -218.3473 Td
+(5220     wakeup\(&p->readp\);) 117.9499 Tj
+0 -227.8407 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
+(5222     p->readopen = 0;) 109.2129 Tj
+0 -246.8274 Td
+(5223     wakeup\(&p->writep\);) 122.3184 Tj
+0 -256.3207 Td
 (5224   }) 34.9481 Tj
-0 -265.814 Td
-(5225   release\(&p->lock\);) 109.213 Tj
-0 -275.307 Td
+0 -265.8141 Td
+(5225   release\(&p->lock\);) 109.2129 Tj
+0 -275.3075 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
+0 -284.8008 Td
+(5227   if\(p->readopen == 0 && p->writeopen == 0\)) 209.6887 Tj
+0 -294.2942 Td
+(5228     kfree\(\(char*\)p, PAGE\);) 135.4239 Tj
+0 -303.7875 Td
 (5229 }) 26.2111 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (5230 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (5231 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (5232 ) 21.8426 Tj
 0 -341.761 Td
 (5233 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (5234 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (5235 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (5236 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (5237 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (5238 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (5239 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (5240 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (5241 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (5242 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (5243 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (5244 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (5245 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (5246 ) 21.8426 Tj
 0 -474.668 Td
 (5247 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5248 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5249 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 52) 34.9481 Tj
 Q
 Q
@@ -17912,14 +17894,14 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/pipe.c  Page 3) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+(5251 pipewrite\(struct pipe *p, char *addr, int n\)) 214.0572 Tj
 0 -47.4668 Td
 (5252 {) 26.2111 Tj
 0 -56.9602 Td
@@ -17927,96 +17909,96 @@ q
 0 -66.4535 Td
 (5254 ) 21.8426 Tj
 0 -75.9469 Td
-(5255   acquire\(&p->lock\);) 109.213 Tj
+(5255   acquire\(&p->lock\);) 109.2129 Tj
 0 -85.4403 Td
-(5256   for\(i = 0; i < n; i++\){) 131.055 Tj
+(5256   for\(i = 0; i < n; i++\){) 131.0554 Tj
 0 -94.9336 Td
-(5257     while\(\(\(p->writep + 1\) % PIPESIZE\) == p->readp\){) 249.005 Tj
+(5257     while\(p->writep == p->readp + PIPESIZE\) {) 218.4257 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
+(5258       if\(p->readopen == 0 || cp->killed\){) 200.9517 Tj
+0 -113.9203 Td
+(5259         release\(&p->lock\);) 135.4239 Tj
+0 -123.4137 Td
+(5260         return -1;) 100.4758 Tj
+0 -132.9071 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
+0 -142.4004 Td
+(5262       wakeup\(&p->readp\);) 126.6869 Tj
+0 -151.8938 Td
+(5263       sleep\(&p->writep, &p->lock\);) 170.3721 Tj
+0 -161.3871 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 -170.8805 Td
+(5265     p->data[p->writep++ % PIPESIZE] = addr[i];) 222.7942 Tj
+0 -180.3739 Td
+(5266   }) 34.9481 Tj
+0 -189.8672 Td
+(5267   wakeup\(&p->readp\);) 109.2129 Tj
+0 -199.3606 Td
+(5268   release\(&p->lock\);) 109.2129 Tj
+0 -208.8539 Td
+(5269   return i;) 69.8962 Tj
+0 -218.3473 Td
+(5270 }) 26.2111 Tj
+0 -227.8407 Td
+(5271 ) 21.8426 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
+(5272 int) 34.9481 Tj
+0 -246.8274 Td
+(5273 piperead\(struct pipe *p, char *addr, int n\)) 209.6887 Tj
+0 -256.3207 Td
+(5274 {) 26.2111 Tj
+0 -265.8141 Td
+(5275   int i;) 56.7907 Tj
+0 -275.3075 Td
+(5276 ) 21.8426 Tj
+0 -284.8008 Td
+(5277   acquire\(&p->lock\);) 109.2129 Tj
+0 -294.2942 Td
+(5278   while\(p->readp == p->writep && p->writeopen\){) 227.1628 Tj
+0 -303.7875 Td
+(5279     if\(cp->killed\){) 104.8443 Tj
+0 -313.2809 Td
+(5280       release\(&p->lock\);) 126.6869 Tj
+0 -322.7743 Td
+(5281       return -1;) 91.7388 Tj
+0 -332.2676 Td
+(5282     }) 43.6851 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
+(5283     sleep\(&p->readp, &p->lock\);) 157.2665 Tj
+0 -351.2543 Td
+(5284   }) 34.9481 Tj
+0 -360.7477 Td
+(5285   for\(i = 0; i < n; i++\){) 131.0554 Tj
+0 -370.2411 Td
+(5286     if\(p->readp == p->writep\)) 148.5295 Tj
+0 -379.7344 Td
+(5287       break;) 74.2647 Tj
+0 -389.2278 Td
+(5288     addr[i] = p->data[p->readp++ % PIPESIZE];) 218.4257 Tj
+0 -398.7211 Td
+(5289   }) 34.9481 Tj
+0 -408.2145 Td
+(5290   wakeup\(&p->writep\);) 113.5814 Tj
+0 -417.7079 Td
+(5291   release\(&p->lock\);) 109.2129 Tj
+0 -427.2012 Td
+(5292   return i;) 69.8962 Tj
+0 -436.6946 Td
+(5293 }) 26.2111 Tj
+0 -446.1879 Td
+(5294 ) 21.8426 Tj
+0 -455.6813 Td
+(5295 ) 21.8426 Tj
+0 -465.1747 Td
 (5296 ) 21.8426 Tj
 0 -474.668 Td
 (5297 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5298 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5299 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 52) 34.9481 Tj
 Q
 Q
@@ -18045,8 +18027,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -18061,12 +18042,12 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/string.c  Page 1) 170.372 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/string.c  Page 1) 170.3721 Tj
 0 -28.4801 Td
-(5300 #include "types.h") 100.476 Tj
+(5300 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
 (5301 ) 21.8426 Tj
 0 -47.4668 Td
@@ -18083,89 +18064,89 @@ q
 (5307   d = \(char*\)dst;) 96.1073 Tj
 0 -104.427 Td
 (5308   while\(n-- > 0\)) 91.7388 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (5309     *d++ = c;) 78.6333 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (5310 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (5311   return dst;) 78.6333 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (5312 }) 26.2111 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (5313 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 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
+0 -170.8805 Td
+(5315 memcmp\(const void *v1, const void *v2, uint n\)) 222.7942 Tj
+0 -180.3739 Td
 (5316 {) 26.2111 Tj
-0 -189.867 Td
-(5317   const uchar *s1, *s2;) 122.318 Tj
-0 -199.361 Td
+0 -189.8672 Td
+(5317   const uchar *s1, *s2;) 122.3184 Tj
+0 -199.3606 Td
 (5318 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (5319   s1 = v1;) 65.5277 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (5320   s2 = v2;) 65.5277 Tj
-0 -227.841 Td
+0 -227.8407 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
+(5322     if\(*s1 != *s2\)) 100.4758 Tj
+0 -246.8274 Td
+(5323       return *s1 - *s2;) 122.3184 Tj
+0 -256.3207 Td
 (5324     s1++, s2++;) 87.3703 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (5325   }) 34.9481 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (5326 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (5327   return 0;) 69.8962 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (5328 }) 26.2111 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (5329 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 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
+0 -322.7743 Td
+(5331 memmove\(void *dst, const void *src, uint n\)) 209.6887 Tj
+0 -332.2676 Td
 (5332 {) 26.2111 Tj
 0 -341.761 Td
 (5333   const char *s;) 91.7388 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (5334   char *d;) 65.5277 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (5335 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (5336   s = src;) 65.5277 Tj
-0 -379.734 Td
+0 -379.7344 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
+0 -389.2278 Td
+(5338   if\(s < d && s + n > d\){) 131.0554 Tj
+0 -398.7211 Td
 (5339     s += n;) 69.8962 Tj
-0 -408.214 Td
+0 -408.2145 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
+0 -417.7079 Td
+(5341     while\(n-- > 0\)) 100.4758 Tj
+0 -427.2012 Td
+(5342       *--d = *--s;) 100.4758 Tj
+0 -436.6946 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
+0 -446.1879 Td
+(5344     while\(n-- > 0\)) 100.4758 Tj
+0 -455.6813 Td
+(5345       *d++ = *s++;) 100.4758 Tj
+0 -465.1747 Td
 (5346 ) 21.8426 Tj
 0 -474.668 Td
 (5347   return dst;) 78.6333 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5348 }) 26.2111 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5349 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 53) 34.9481 Tj
 Q
 Q
@@ -18180,111 +18161,111 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/string.c  Page 2) 170.372 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/string.c  Page 2) 170.3721 Tj
 0 -28.4801 Td
 (5350 int) 34.9481 Tj
 0 -37.9735 Td
-(5351 strncmp\(const char *p, const char *q, uint n\)) 218.426 Tj
+(5351 strncmp\(const char *p, const char *q, uint n\)) 218.4257 Tj
 0 -47.4668 Td
 (5352 {) 26.2111 Tj
 0 -56.9602 Td
 (5353   while\(n > 0 && *p && *p == *q\)) 161.635 Tj
 0 -66.4535 Td
-(5354     n--, p++, q++;) 100.476 Tj
+(5354     n--, p++, q++;) 100.4758 Tj
 0 -75.9469 Td
 (5355   if\(n == 0\)) 74.2647 Tj
 0 -85.4403 Td
 (5356     return 0;) 78.6333 Tj
 0 -94.9336 Td
-(5357   return \(uchar\)*p - \(uchar\)*q;) 157.267 Tj
+(5357   return \(uchar\)*p - \(uchar\)*q;) 157.2665 Tj
 0 -104.427 Td
 (5358 }) 26.2111 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (5359 ) 21.8426 Tj
-0 -123.414 Td
+0 -123.4137 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
+0 -132.9071 Td
+(5361 strncpy\(char *s, const char *t, int n\)) 187.8461 Tj
+0 -142.4004 Td
 (5362 {) 26.2111 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (5363   char *os;) 69.8962 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (5364 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 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
+0 -180.3739 Td
+(5366   while\(n-- > 0 && \(*s++ = *t++\) != 0\)) 187.8461 Tj
+0 -189.8672 Td
 (5367     ;) 43.6851 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (5368   while\(n-- > 0\)) 91.7388 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (5369     *s++ = 0;) 78.6333 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (5370   return os;) 74.2647 Tj
-0 -227.841 Td
+0 -227.8407 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
+0 -246.8274 Td
+(5373 // Like strncpy but guaranteed to NUL-terminate.) 231.5313 Tj
+0 -256.3207 Td
 (5374 char*) 43.6851 Tj
-0 -265.814 Td
-(5375 safestrcpy\(char *s, const char *t, int n\)) 200.952 Tj
-0 -275.307 Td
+0 -265.8141 Td
+(5375 safestrcpy\(char *s, const char *t, int n\)) 200.9517 Tj
+0 -275.3075 Td
 (5376 {) 26.2111 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (5377   char *os;) 69.8962 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (5378 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (5379   os = s;) 61.1592 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (5380   if\(n <= 0\)) 74.2647 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (5381     return os;) 83.0018 Tj
-0 -332.268 Td
-(5382   while\(--n > 0 && \(*s++ = *t++\) != 0\)) 187.846 Tj
+0 -332.2676 Td
+(5382   while\(--n > 0 && \(*s++ = *t++\) != 0\)) 187.8461 Tj
 0 -341.761 Td
 (5383     ;) 43.6851 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (5384   *s = 0;) 61.1592 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (5385   return os;) 74.2647 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (5386 }) 26.2111 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (5387 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (5388 int) 34.9481 Tj
-0 -398.721 Td
-(5389 strlen\(const char *s\)) 113.581 Tj
-0 -408.214 Td
+0 -398.7211 Td
+(5389 strlen\(const char *s\)) 113.5814 Tj
+0 -408.2145 Td
 (5390 {) 26.2111 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (5391   int n;) 56.7907 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (5392 ) 21.8426 Tj
-0 -436.695 Td
-(5393   for\(n = 0; s[n]; n++\)) 122.318 Tj
-0 -446.188 Td
+0 -436.6946 Td
+(5393   for\(n = 0; s[n]; n++\)) 122.3184 Tj
+0 -446.1879 Td
 (5394     ;) 43.6851 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (5395   return n;) 69.8962 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (5396 }) 26.2111 Tj
 0 -474.668 Td
 (5397 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5398 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5399 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 53) 34.9481 Tj
 Q
 Q
@@ -18313,8 +18294,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -18329,116 +18309,116 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/mp.h  Page 1) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/mp.h  Page 1) 152.898 Tj
 0 -28.4801 Td
-(5400 // See MultiProcessor Specification Version 1.[14]) 240.268 Tj
+(5400 // See MultiProcessor Specification Version 1.[14]) 240.2683 Tj
 0 -37.9735 Td
 (5401 ) 21.8426 Tj
 0 -47.4668 Td
-(5402 struct mp {             // floating pointer) 209.689 Tj
+(5402 struct mp {             // floating pointer) 209.6887 Tj
 0 -56.9602 Td
-(5403   uchar signature[4];           // "_MP_") 200.952 Tj
+(5403   uchar signature[4];           // "_MP_") 200.9517 Tj
 0 -66.4535 Td
 (5404   void *physaddr;               // phys addr of MP config \
 table) 297.059 Tj
 0 -75.9469 Td
-(5405   uchar length;                 // 1) 179.109 Tj
+(5405   uchar length;                 // 1) 179.1091 Tj
 0 -85.4403 Td
-(5406   uchar specrev;                // [14]) 192.215 Tj
+(5406   uchar specrev;                // [14]) 192.2146 Tj
 0 -94.9336 Td
 (5407   uchar checksum;               // all bytes must add up t\
 o 0) 288.322 Tj
 0 -104.427 Td
-(5408   uchar type;                   // MP system config type) 266.479 Tj
-0 -113.92 Td
+(5408   uchar type;                   // MP system config type) 266.4794 Tj
+0 -113.9203 Td
 (5409   uchar imcrp;) 83.0018 Tj
-0 -123.414 Td
-(5410   uchar reserved[3];) 109.213 Tj
-0 -132.907 Td
+0 -123.4137 Td
+(5410   uchar reserved[3];) 109.2129 Tj
+0 -132.9071 Td
 (5411 };) 30.5796 Tj
-0 -142.4 Td
+0 -142.4004 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
+0 -151.8938 Td
+(5413 struct mpconf {         // configuration table header) 253.3738 Tj
+0 -161.3871 Td
+(5414   uchar signature[4];           // "PCMP") 200.9517 Tj
+0 -170.8805 Td
+(5415   ushort length;                // total table length) 253.3738 Tj
+0 -180.3739 Td
+(5416   uchar version;                // [14]) 192.2146 Tj
+0 -189.8672 Td
 (5417   uchar checksum;               // all bytes must add up t\
 o 0) 288.322 Tj
-0 -199.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 -199.3606 Td
+(5418   uchar product[20];            // product id) 218.4257 Tj
+0 -208.8539 Td
+(5419   uint *oemtable;               // OEM table pointer) 249.0053 Tj
+0 -218.3473 Td
+(5420   ushort oemlength;             // OEM table length) 244.6368 Tj
+0 -227.8407 Td
+(5421   ushort entry;                 // entry count) 222.7942 Tj
 0 -237.334 Td
-(5422   uint *lapicaddr;              // address of local APIC) 266.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
+(5422   uint *lapicaddr;              // address of local APIC) 266.4794 Tj
+0 -246.8274 Td
+(5423   ushort xlength;               // extended table length) 266.4794 Tj
+0 -256.3207 Td
+(5424   uchar xchecksum;              // extended table checksum) 275.2164 Tj
+0 -265.8141 Td
 (5425   uchar reserved;) 96.1073 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (5426 };) 30.5796 Tj
-0 -284.801 Td
+0 -284.8008 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 -294.2942 Td
+(5428 struct mpproc {         // processor table entry) 231.5313 Tj
+0 -303.7875 Td
+(5429   uchar type;                   // entry type \(0\)) 235.8998 Tj
+0 -313.2809 Td
+(5430   uchar apicid;                 // local APIC id) 231.5313 Tj
+0 -322.7743 Td
+(5431   uchar version;                // local APIC verison) 253.3738 Tj
+0 -332.2676 Td
+(5432   uchar flags;                  // CPU flags) 214.0572 Tj
 0 -341.761 Td
 (5433     #define MPBOOT 0x02           // This proc is the boot\
-strap processor.) 345.113 Tj
-0 -351.254 Td
-(5434   uchar signature[4];           // CPU signature) 231.531 Tj
-0 -360.748 Td
+strap processor.) 345.1126 Tj
+0 -351.2543 Td
+(5434   uchar signature[4];           // CPU signature) 231.5313 Tj
+0 -360.7477 Td
 (5435   uint feature;                 // feature flags from CPUI\
-D instruction) 332.007 Tj
-0 -370.241 Td
-(5436   uchar reserved[8];) 109.213 Tj
-0 -379.734 Td
+D instruction) 332.0071 Tj
+0 -370.2411 Td
+(5436   uchar reserved[8];) 109.2129 Tj
+0 -379.7344 Td
 (5437 };) 30.5796 Tj
-0 -389.228 Td
+0 -389.2278 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
+0 -398.7211 Td
+(5439 struct mpioapic {       // I/O APIC table entry) 227.1628 Tj
+0 -408.2145 Td
+(5440   uchar type;                   // entry type \(2\)) 235.8998 Tj
+0 -417.7079 Td
+(5441   uchar apicno;                 // I/O APIC id) 222.7942 Tj
+0 -427.2012 Td
+(5442   uchar version;                // I/O APIC version) 244.6368 Tj
+0 -436.6946 Td
+(5443   uchar flags;                  // I/O APIC flags) 235.8998 Tj
+0 -446.1879 Td
+(5444   uint *addr;                  // I/O APIC address) 240.2683 Tj
+0 -455.6813 Td
 (5445 };) 30.5796 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (5446 ) 21.8426 Tj
 0 -474.668 Td
 (5447 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5448 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5449 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 54) 34.9481 Tj
 Q
 Q
@@ -18453,111 +18433,111 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/mp.h  Page 2) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/mp.h  Page 2) 152.898 Tj
 0 -28.4801 Td
-(5450 // Table entry types) 109.213 Tj
+(5450 // Table entry types) 109.2129 Tj
 0 -37.9735 Td
-(5451 #define MPPROC    0x00  // One per processor) 214.057 Tj
+(5451 #define MPPROC    0x00  // One per processor) 214.0572 Tj
 0 -47.4668 Td
-(5452 #define MPBUS     0x01  // One per bus) 187.846 Tj
+(5452 #define MPBUS     0x01  // One per bus) 187.8461 Tj
 0 -56.9602 Td
-(5453 #define MPIOAPIC  0x02  // One per I/O APIC) 209.689 Tj
+(5453 #define MPIOAPIC  0x02  // One per I/O APIC) 209.6887 Tj
 0 -66.4535 Td
-(5454 #define MPIOINTR  0x03  // One per bus interrupt source) 262.111 Tj
+(5454 #define MPIOINTR  0x03  // One per bus interrupt source) 262.1109 Tj
 0 -75.9469 Td
-(5455 #define MPLINTR   0x04  // One per system interrupt source) 275.216 Tj
+(5455 #define MPLINTR   0x04  // One per system interrupt source) 275.2164 Tj
 0 -85.4403 Td
 (5456 ) 21.8426 Tj
 0 -94.9336 Td
 (5457 ) 21.8426 Tj
 0 -104.427 Td
 (5458 ) 21.8426 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (5459 ) 21.8426 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (5460 ) 21.8426 Tj
-0 -132.907 Td
+0 -132.9071 Td
 (5461 ) 21.8426 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (5462 ) 21.8426 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (5463 ) 21.8426 Tj
-0 -161.387 Td
+0 -161.3871 Td
 (5464 ) 21.8426 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (5465 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (5466 ) 21.8426 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (5467 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (5468 ) 21.8426 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (5469 ) 21.8426 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (5470 ) 21.8426 Tj
-0 -227.841 Td
+0 -227.8407 Td
 (5471 ) 21.8426 Tj
 0 -237.334 Td
 (5472 ) 21.8426 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (5473 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (5474 ) 21.8426 Tj
-0 -265.814 Td
+0 -265.8141 Td
 (5475 ) 21.8426 Tj
-0 -275.307 Td
+0 -275.3075 Td
 (5476 ) 21.8426 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (5477 ) 21.8426 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (5478 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 Td
 (5479 ) 21.8426 Tj
-0 -313.281 Td
+0 -313.2809 Td
 (5480 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (5481 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (5482 ) 21.8426 Tj
 0 -341.761 Td
 (5483 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (5484 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (5485 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (5486 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (5487 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (5488 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (5489 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (5490 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (5491 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (5492 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (5493 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (5494 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (5495 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (5496 ) 21.8426 Tj
 0 -474.668 Td
 (5497 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5498 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5499 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 54) 34.9481 Tj
 Q
 Q
@@ -18586,8 +18566,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -18602,113 +18581,113 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/mp.c  Page 1) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+(5501 // Search memory for MP description structures.) 227.1628 Tj
 0 -47.4668 Td
 (5502 // http://developer.intel.com/design/pentium/datashts/2420\
-1606.pdf) 310.165 Tj
+1606.pdf) 310.1645 Tj
 0 -56.9602 Td
 (5503 ) 21.8426 Tj
 0 -66.4535 Td
-(5504 #include "types.h") 100.476 Tj
+(5504 #include "types.h") 100.4758 Tj
 0 -75.9469 Td
 (5505 #include "defs.h") 96.1073 Tj
 0 -85.4403 Td
-(5506 #include "param.h") 100.476 Tj
+(5506 #include "param.h") 100.4758 Tj
 0 -94.9336 Td
 (5507 #include "mp.h") 87.3703 Tj
 0 -104.427 Td
 (5508 #include "x86.h") 91.7388 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (5509 #include "mmu.h") 91.7388 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (5510 #include "proc.h") 96.1073 Tj
-0 -132.907 Td
+0 -132.9071 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
+0 -142.4004 Td
+(5512 struct cpu cpus[NCPU];) 117.9499 Tj
+0 -151.8938 Td
+(5513 static struct cpu *bcpu;) 126.6869 Tj
+0 -161.3871 Td
 (5514 int ismp;) 61.1592 Tj
-0 -170.88 Td
+0 -170.8805 Td
 (5515 int ncpu;) 61.1592 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (5516 uchar ioapic_id;) 91.7388 Tj
-0 -189.867 Td
+0 -189.8672 Td
 (5517 ) 21.8426 Tj
-0 -199.361 Td
+0 -199.3606 Td
 (5518 int) 34.9481 Tj
-0 -208.854 Td
+0 -208.8539 Td
 (5519 mp_bcpu\(void\)) 78.6333 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (5520 {) 26.2111 Tj
-0 -227.841 Td
-(5521   return bcpu-cpus;) 104.844 Tj
+0 -227.8407 Td
+(5521   return bcpu-cpus;) 104.8443 Tj
 0 -237.334 Td
 (5522 }) 26.2111 Tj
-0 -246.827 Td
+0 -246.8274 Td
 (5523 ) 21.8426 Tj
-0 -256.321 Td
+0 -256.3207 Td
 (5524 static uchar) 74.2647 Tj
-0 -265.814 Td
-(5525 sum\(uchar *addr, int len\)) 131.055 Tj
-0 -275.307 Td
+0 -265.8141 Td
+(5525 sum\(uchar *addr, int len\)) 131.0554 Tj
+0 -275.3075 Td
 (5526 {) 26.2111 Tj
-0 -284.801 Td
+0 -284.8008 Td
 (5527   int i, sum;) 78.6333 Tj
-0 -294.294 Td
+0 -294.2942 Td
 (5528 ) 21.8426 Tj
-0 -303.788 Td
+0 -303.7875 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
+0 -313.2809 Td
+(5530   for\(i=0; i<len; i++\)) 117.9499 Tj
+0 -322.7743 Td
+(5531     sum += addr[i];) 104.8443 Tj
+0 -332.2676 Td
 (5532   return sum;) 78.6333 Tj
 0 -341.761 Td
 (5533 }) 26.2111 Tj
-0 -351.254 Td
+0 -351.2543 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
+0 -360.7477 Td
+(5535 // Look for an MP structure in the len bytes at addr.) 253.3738 Tj
+0 -370.2411 Td
 (5536 static struct mp*) 96.1073 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (5537 mp_search1\(uchar *addr, int len\)) 161.635 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (5538 {) 26.2111 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (5539   uchar *e, *p;) 87.3703 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (5540 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 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
+0 -427.2012 Td
+(5542   for\(p = addr; p < e; p += sizeof\(struct mp\)\)) 222.7942 Tj
+0 -436.6946 Td
 (5543     if\(memcmp\(p, "_MP_", 4\) == 0 && sum\(p, sizeof\(str\
 uct mp\)\) == 0\)) 314.533 Tj
-0 -446.188 Td
-(5544       return \(struct mp*\)p;) 139.792 Tj
-0 -455.681 Td
+0 -446.1879 Td
+(5544       return \(struct mp*\)p;) 139.7925 Tj
+0 -455.6813 Td
 (5545   return 0;) 69.8962 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (5546 }) 26.2111 Tj
 0 -474.668 Td
 (5547 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5548 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5549 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 55) 34.9481 Tj
 Q
 Q
@@ -18723,21 +18702,21 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/mp.c  Page 2) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  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
+ording to the) 332.0071 Tj
 0 -37.9735 Td
-(5551 // spec is in one of the following three locations:) 244.637 Tj
+(5551 // spec is in one of the following three locations:) 244.6368 Tj
 0 -47.4668 Td
-(5552 // 1\) in the first KB of the EBDA;) 170.372 Tj
+(5552 // 1\) in the first KB of the EBDA;) 170.3721 Tj
 0 -56.9602 Td
-(5553 // 2\) in the last KB of system base memory;) 209.689 Tj
+(5553 // 2\) in the last KB of system base memory;) 209.6887 Tj
 0 -66.4535 Td
-(5554 // 3\) in the BIOS ROM between 0xE0000 and 0xFFFFF.) 240.268 Tj
+(5554 // 3\) in the BIOS ROM between 0xE0000 and 0xFFFFF.) 240.2683 Tj
 0 -75.9469 Td
 (5555 static struct mp*) 96.1073 Tj
 0 -85.4403 Td
@@ -18746,91 +18725,91 @@ ording to the) 332.007 Tj
 (5557 {) 26.2111 Tj
 0 -104.427 Td
 (5558   uchar *bda;) 78.6333 Tj
-0 -113.92 Td
+0 -113.9203 Td
 (5559   uint p;) 61.1592 Tj
-0 -123.414 Td
+0 -123.4137 Td
 (5560   struct mp *mp;) 91.7388 Tj
-0 -132.907 Td
+0 -132.9071 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
+0 -142.4004 Td
+(5562   bda = \(uchar*\)0x400;) 117.9499 Tj
+0 -151.8938 Td
+(5563   if\(\(p = \(\(bda[0x0F]<<8\)|bda[0x0E]\) << 4\)\){) 214.0572 Tj
+0 -161.3871 Td
+(5564     if\(\(mp = mp_search1\(\(uchar*\)p, 1024\)\)\)) 205.3202 Tj
+0 -170.8805 Td
 (5565       return mp;) 91.7388 Tj
-0 -180.374 Td
+0 -180.3739 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
+0 -189.8672 Td
+(5567     p = \(\(bda[0x14]<<8\)|bda[0x13]\)*1024;) 196.5831 Tj
+0 -199.3606 Td
+(5568     if\(\(mp = mp_search1\(\(uchar*\)p-1024, 1024\)\)\)) 227.1628 Tj
+0 -208.8539 Td
 (5569       return mp;) 91.7388 Tj
-0 -218.347 Td
+0 -218.3473 Td
 (5570   }) 34.9481 Tj
-0 -227.841 Td
-(5571   return mp_search1\(\(uchar*\)0xF0000, 0x10000\);) 222.794 Tj
+0 -227.8407 Td
+(5571   return mp_search1\(\(uchar*\)0xF0000, 0x10000\);) 222.7942 Tj
 0 -237.334 Td
 (5572 }) 26.2111 Tj
-0 -246.827 Td
+0 -246.8274 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
+0 -256.3207 Td
+(5574 // Search for an MP configuration table.  For now,) 240.2683 Tj
+0 -265.8141 Td
 (5575 // don't accept the default configurations \(physaddr == 0\
-\).) 279.585 Tj
-0 -275.307 Td
+\).) 279.5849 Tj
+0 -275.3075 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
+,) 279.5849 Tj
+0 -284.8008 Td
+(5577 // if correct, check the version.) 166.0035 Tj
+0 -294.2942 Td
+(5578 // To do: check extended table checksum.) 196.5831 Tj
+0 -303.7875 Td
+(5579 static struct mpconf*) 113.5814 Tj
+0 -313.2809 Td
+(5580 mp_config\(struct mp **pmp\)) 135.4239 Tj
+0 -322.7743 Td
 (5581 {) 26.2111 Tj
-0 -332.268 Td
-(5582   struct mpconf *conf;) 117.95 Tj
+0 -332.2676 Td
+(5582   struct mpconf *conf;) 117.9499 Tj
 0 -341.761 Td
 (5583   struct mp *mp;) 91.7388 Tj
-0 -351.254 Td
+0 -351.2543 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
+0 -360.7477 Td
+(5585   if\(\(mp = mp_search\(\)\) == 0 || mp->physaddr == 0\)) 240.2683 Tj
+0 -370.2411 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
+0 -379.7344 Td
+(5587   conf = \(struct mpconf*\)mp->physaddr;) 187.8461 Tj
+0 -389.2278 Td
+(5588   if\(memcmp\(conf, "PCMP", 4\) != 0\)) 170.3721 Tj
+0 -398.7211 Td
 (5589     return 0;) 78.6333 Tj
-0 -408.214 Td
-(5590   if\(conf->version != 1 && conf->version != 4\)) 222.794 Tj
-0 -417.708 Td
+0 -408.2145 Td
+(5590   if\(conf->version != 1 && conf->version != 4\)) 222.7942 Tj
+0 -417.7079 Td
 (5591     return 0;) 78.6333 Tj
-0 -427.201 Td
-(5592   if\(sum\(\(uchar*\)conf, conf->length\) != 0\)) 205.32 Tj
-0 -436.695 Td
+0 -427.2012 Td
+(5592   if\(sum\(\(uchar*\)conf, conf->length\) != 0\)) 205.3202 Tj
+0 -436.6946 Td
 (5593     return 0;) 78.6333 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (5594   *pmp = mp;) 74.2647 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (5595   return conf;) 83.0018 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (5596 }) 26.2111 Tj
 0 -474.668 Td
 (5597 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5598 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5599 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 55) 34.9481 Tj
 Q
 Q
@@ -18859,8 +18838,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -18875,10 +18853,10 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/mp.c  Page 3) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/mp.c  Page 3) 152.898 Tj
 0 -28.4801 Td
 (5600 void) 39.3166 Tj
 0 -37.9735 Td
@@ -18890,99 +18868,99 @@ q
 0 -66.4535 Td
 (5604   struct mp *mp;) 91.7388 Tj
 0 -75.9469 Td
-(5605   struct mpconf *conf;) 117.95 Tj
+(5605   struct mpconf *conf;) 117.9499 Tj
 0 -85.4403 Td
-(5606   struct mpproc *proc;) 117.95 Tj
+(5606   struct mpproc *proc;) 117.9499 Tj
 0 -94.9336 Td
-(5607   struct mpioapic *ioapic;) 135.424 Tj
+(5607   struct mpioapic *ioapic;) 135.4239 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
+0 -113.9203 Td
+(5609   bcpu = &cpus[ncpu];) 113.5814 Tj
+0 -123.4137 Td
+(5610   if\(\(conf = mp_config\(&mp\)\) == 0\)) 170.3721 Tj
+0 -132.9071 Td
 (5611     return;) 69.8962 Tj
-0 -142.4 Td
+0 -142.4004 Td
 (5612 ) 21.8426 Tj
-0 -151.894 Td
+0 -151.8938 Td
 (5613   ismp = 1;) 69.8962 Tj
-0 -161.387 Td
-(5614   lapic = \(uint*\)conf->lapicaddr;) 166.004 Tj
-0 -170.88 Td
+0 -161.3871 Td
+(5614   lapic = \(uint*\)conf->lapicaddr;) 166.0035 Tj
+0 -170.8805 Td
 (5615 ) 21.8426 Tj
-0 -180.374 Td
+0 -180.3739 Td
 (5616   for\(p=\(uchar*\)\(conf+1\), e=\(uchar*\)conf+conf->leng\
-th; p<e; \){) 292.69 Tj
-0 -189.867 Td
+th; p<e; \){) 292.6905 Tj
+0 -189.8672 Td
 (5617     switch\(*p\){) 87.3703 Tj
-0 -199.361 Td
+0 -199.3606 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
+0 -208.8539 Td
+(5619       proc = \(struct mpproc*\)p;) 157.2665 Tj
+0 -218.3473 Td
+(5620       cpus[ncpu].apicid = proc->apicid;) 192.2146 Tj
+0 -227.8407 Td
 (5621       if\(proc->flags & MPBOOT\)) 152.898 Tj
 0 -237.334 Td
-(5622         bcpu = &cpus[ncpu];) 139.792 Tj
-0 -246.827 Td
+(5622         bcpu = &cpus[ncpu];) 139.7925 Tj
+0 -246.8274 Td
 (5623       ncpu++;) 78.6333 Tj
-0 -256.321 Td
-(5624       p += sizeof\(struct mpproc\);) 166.004 Tj
-0 -265.814 Td
+0 -256.3207 Td
+(5624       p += sizeof\(struct mpproc\);) 166.0035 Tj
+0 -265.8141 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
+0 -275.3075 Td
+(5626     case MPIOAPIC:) 100.4758 Tj
+0 -284.8008 Td
+(5627       ioapic = \(struct mpioapic*\)p;) 174.7406 Tj
+0 -294.2942 Td
+(5628       ioapic_id = ioapic->apicno;) 166.0035 Tj
+0 -303.7875 Td
+(5629       p += sizeof\(struct mpioapic\);) 174.7406 Tj
+0 -313.2809 Td
 (5630       continue;) 87.3703 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (5631     case MPBUS:) 87.3703 Tj
-0 -332.268 Td
-(5632     case MPIOINTR:) 100.476 Tj
+0 -332.2676 Td
+(5632     case MPIOINTR:) 100.4758 Tj
 0 -341.761 Td
 (5633     case MPLINTR:) 96.1073 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (5634       p += 8;) 78.6333 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (5635       continue;) 87.3703 Tj
-0 -370.241 Td
+0 -370.2411 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
+0 -379.7344 Td
+(5637       cprintf\("mp_init: unknown config type %x\\n", *p\);) 262.1109 Tj
+0 -389.2278 Td
+(5638       panic\("mp_init"\);) 122.3184 Tj
+0 -398.7211 Td
 (5639     }) 43.6851 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (5640   }) 34.9481 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (5641 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (5642   if\(mp->imcrp\){) 91.7388 Tj
-0 -436.695 Td
+0 -436.6946 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
+Bochs.) 301.4275 Tj
+0 -446.1879 Td
+(5644     // But it would on real hardware.) 183.4776 Tj
+0 -455.6813 Td
+(5645     outb\(0x22, 0x70\);   // Select IMCR) 187.8461 Tj
+0 -465.1747 Td
 (5646     outb\(0x23, inb\(0x23\) | 1\);  // Mask external inter\
-rupts.) 283.953 Tj
+rupts.) 283.9534 Tj
 0 -474.668 Td
 (5647   }) 34.9481 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5648 }) 26.2111 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5649 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 56) 34.9481 Tj
 Q
 Q
@@ -18997,122 +18975,122 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/lapic.c  Page 1) 166.004 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/lapic.c  Page 1) 166.0035 Tj
 0 -28.4801 Td
-(5650 // The local APIC manages internal \(non-I/O\) interrupts.) 266.479 Tj
+(5650 // The local APIC manages internal \(non-I/O\) interrupts.) 266.4794 Tj
 0 -37.9735 Td
 (5651 // See Chapter 8 & Appendix C of Intel processor manual vo\
 lume 3.) 305.796 Tj
 0 -47.4668 Td
 (5652 ) 21.8426 Tj
 0 -56.9602 Td
-(5653 #include "types.h") 100.476 Tj
+(5653 #include "types.h") 100.4758 Tj
 0 -66.4535 Td
-(5654 #include "traps.h") 100.476 Tj
+(5654 #include "defs.h") 96.1073 Tj
 0 -75.9469 Td
-(5655 ) 21.8426 Tj
+(5655 #include "traps.h") 100.4758 Tj
 0 -85.4403 Td
-(5656 // Local APIC registers, divided by 4 for use as uint[] in\
-dices.) 301.427 Tj
+(5656 #include "mmu.h") 91.7388 Tj
 0 -94.9336 Td
-(5657 #define ID      \(0x0020/4\)   // ID) 170.372 Tj
+(5657 #include "x86.h") 91.7388 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\
+(5658 ) 21.8426 Tj
+0 -113.9203 Td
+(5659 // Local APIC registers, divided by 4 for use as uint[] in\
+dices.) 301.4275 Tj
+0 -123.4137 Td
+(5660 #define ID      \(0x0020/4\)   // ID) 170.3721 Tj
+0 -132.9071 Td
+(5661 #define VER     \(0x0030/4\)   // Version) 192.2146 Tj
+0 -142.4004 Td
+(5662 #define TPR     \(0x0080/4\)   // Task Priority) 218.4257 Tj
+0 -151.8938 Td
+(5663 #define EOI     \(0x00B0/4\)   // EOI) 174.7406 Tj
+0 -161.3871 Td
+(5664 #define SVR     \(0x00F0/4\)   // Spurious Interrupt Vecto\
+r) 270.8479 Tj
+0 -170.8805 Td
+(5665   #define ENABLE     0x00000100   // Unit Enable) 231.5313 Tj
+0 -180.3739 Td
+(5666 #define ESR     \(0x0280/4\)   // Error Status) 214.0572 Tj
+0 -189.8672 Td
+(5667 #define ICRLO   \(0x0300/4\)   // Interrupt Command) 235.8998 Tj
+0 -199.3606 Td
+(5668   #define INIT       0x00000500   // INIT/RESET) 227.1628 Tj
+0 -208.8539 Td
+(5669   #define STARTUP    0x00000600   // Startup IPI) 231.5313 Tj
+0 -218.3473 Td
+(5670   #define DELIVS     0x00001000   // Delivery status) 249.0053 Tj
+0 -227.8407 Td
+(5671   #define ASSERT     0x00004000   // Assert interrupt \(vs\
  deassert\)) 314.533 Tj
-0 -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
+(5672   #define LEVEL      0x00008000   // Level triggered) 249.0053 Tj
+0 -246.8274 Td
+(5673   #define BCAST      0x00080000   // Send to all APICs, in\
+cluding self.) 332.0071 Tj
+0 -256.3207 Td
+(5674 #define ICRHI   \(0x0310/4\)   // Interrupt Command [63:32\
+]) 270.8479 Tj
+0 -265.8141 Td
+(5675 #define TIMER   \(0x0320/4\)   // Local Vector Table 0 \(T\
+IMER\)) 283.9534 Tj
+0 -275.3075 Td
+(5676   #define X1         0x0000000B   // divide counts by 1) 262.1109 Tj
+0 -284.8008 Td
+(5677   #define PERIODIC   0x00020000   // Periodic) 218.4257 Tj
+0 -294.2942 Td
+(5678 #define PCINT   \(0x0340/4\)   // Performance Counter LVT) 262.1109 Tj
+0 -303.7875 Td
+(5679 #define LINT0   \(0x0350/4\)   // Local Vector Table 1 \(L\
+INT0\)) 283.9534 Tj
+0 -313.2809 Td
+(5680 #define LINT1   \(0x0360/4\)   // Local Vector Table 2 \(L\
+INT1\)) 283.9534 Tj
+0 -322.7743 Td
+(5681 #define ERROR   \(0x0370/4\)   // Local Vector Table 3 \(E\
+RROR\)) 283.9534 Tj
+0 -332.2676 Td
+(5682   #define MASKED     0x00010000   // Interrupt masked) 253.3738 Tj
 0 -341.761 Td
-(5683 ) 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
+(5683 #define TICR    \(0x0380/4\)   // Timer Initial Count) 244.6368 Tj
+0 -351.2543 Td
+(5684 #define TCCR    \(0x0390/4\)   // Timer Current Count) 244.6368 Tj
+0 -360.7477 Td
+(5685 #define TDCR    \(0x03E0/4\)   // Timer Divide Configurati\
+on) 275.2164 Tj
+0 -370.2411 Td
 (5686 ) 21.8426 Tj
-0 -379.734 Td
-(5687 ) 21.8426 Tj
-0 -389.228 Td
+0 -379.7344 Td
+(5687 volatile uint *lapic;  // Initialized in mp.c) 218.4257 Tj
+0 -389.2278 Td
 (5688 ) 21.8426 Tj
-0 -398.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
+0 -398.7211 Td
+(5689 static void) 69.8962 Tj
+0 -408.2145 Td
+(5690 lapicw\(int index, int value\)) 144.161 Tj
+0 -417.7079 Td
+(5691 {) 26.2111 Tj
+0 -427.2012 Td
+(5692   lapic[index] = value;) 122.3184 Tj
+0 -436.6946 Td
+(5693   lapic[ID];  // wait for write to finish, by reading) 253.3738 Tj
+0 -446.1879 Td
+(5694 }) 26.2111 Tj
+0 -455.6813 Td
 (5695 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (5696 ) 21.8426 Tj
 0 -474.668 Td
 (5697 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5698 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5699 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 56) 34.9481 Tj
 Q
 Q
@@ -19141,8 +19119,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -19157,10 +19134,10 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/lapic.c  Page 2) 166.004 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/lapic.c  Page 2) 166.0035 Tj
 0 -28.4801 Td
 (5700 void) 39.3166 Tj
 0 -37.9735 Td
@@ -19174,97 +19151,98 @@ q
 0 -75.9469 Td
 (5705 ) 21.8426 Tj
 0 -85.4403 Td
-(5706   // Enable local APIC; set spurious interrupt vector.) 257.742 Tj
+(5706   // Enable local APIC; set spurious interrupt vector.) 257.7424 Tj
 0 -94.9336 Td
-(5707   lapic[SVR] = ENABLE | \(IRQ_OFFSET+IRQ_SPURIOUS\);) 240.268 Tj
+(5707   lapicw\(SVR, ENABLE | \(IRQ_OFFSET+IRQ_SPURIOUS\)\);) 240.2683 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 -113.9203 Td
+(5709   // The timer repeatedly counts down at bus frequency) 257.7424 Tj
+0 -123.4137 Td
+(5710   // from lapic[TICR] and then issues an interrupt.) 244.6368 Tj
+0 -132.9071 Td
+(5711   // If xv6 cared more about precise timekeeping,) 235.8998 Tj
+0 -142.4004 Td
+(5712   // TICR would be calibrated using an external time sourc\
+e.) 283.9534 Tj
+0 -151.8938 Td
+(5713   lapicw\(TDCR, X1\);) 104.8443 Tj
+0 -161.3871 Td
+(5714   lapicw\(TIMER, PERIODIC | \(IRQ_OFFSET + IRQ_TIMER\)\);) 253.3738 Tj
+0 -170.8805 Td
+(5715   lapicw\(TICR, 10000000\);) 131.0554 Tj
+0 -180.3739 Td
+(5716 ) 21.8426 Tj
+0 -189.8672 Td
+(5717   // Disable logical interrupt lines.) 183.4776 Tj
+0 -199.3606 Td
+(5718   lapicw\(LINT0, MASKED\);) 126.6869 Tj
+0 -208.8539 Td
+(5719   lapicw\(LINT1, MASKED\);) 126.6869 Tj
+0 -218.3473 Td
+(5720 ) 21.8426 Tj
+0 -227.8407 Td
+(5721   // Disable performance counter overflow interrupts) 249.0053 Tj
 0 -237.334 Td
-(5722   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
+(5722   // on machines that provide that interrupt entry.) 244.6368 Tj
+0 -246.8274 Td
+(5723   if\(\(\(lapic[VER]>>16\) & 0xFF\) >= 4\)) 179.1091 Tj
+0 -256.3207 Td
+(5724     lapicw\(PCINT, MASKED\);) 135.4239 Tj
+0 -265.8141 Td
+(5725 ) 21.8426 Tj
+0 -275.3075 Td
+(5726   // Map error interrupt to IRQ_ERROR.) 187.8461 Tj
+0 -284.8008 Td
+(5727   lapicw\(ERROR, IRQ_OFFSET+IRQ_ERROR\);) 187.8461 Tj
+0 -294.2942 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 -303.7875 Td
+(5729   // Clear error status register \(requires back-to-back w\
+rites\).) 301.4275 Tj
+0 -313.2809 Td
+(5730   lapicw\(ESR, 0\);) 96.1073 Tj
+0 -322.7743 Td
+(5731   lapicw\(ESR, 0\);) 96.1073 Tj
+0 -332.2676 Td
+(5732 ) 21.8426 Tj
 0 -341.761 Td
-(5733   lapic[ESR] = 0;) 96.1073 Tj
-0 -351.254 Td
-(5734   lapic[ESR] = 0;) 96.1073 Tj
-0 -360.748 Td
+(5733   // Ack any outstanding interrupts.) 179.1091 Tj
+0 -351.2543 Td
+(5734   lapicw\(EOI, 0\);) 96.1073 Tj
+0 -360.7477 Td
 (5735 ) 21.8426 Tj
-0 -370.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 -370.2411 Td
+(5736   // Send an Init Level De-Assert to synchronise arbitrati\
+on ID's.) 310.1645 Tj
+0 -379.7344 Td
+(5737   lapicw\(ICRHI, 0\);) 104.8443 Tj
+0 -389.2278 Td
+(5738   lapicw\(ICRLO, BCAST | INIT | LEVEL\);) 187.8461 Tj
+0 -398.7211 Td
+(5739   while\(lapic[ICRLO] & DELIVS\)) 152.898 Tj
+0 -408.2145 Td
+(5740     ;) 43.6851 Tj
+0 -417.7079 Td
+(5741 ) 21.8426 Tj
+0 -427.2012 Td
+(5742   // Enable interrupts on the APIC \(but not on the proces\
+sor\).) 292.6905 Tj
+0 -436.6946 Td
+(5743   lapicw\(TPR, 0\);) 96.1073 Tj
+0 -446.1879 Td
+(5744 }) 26.2111 Tj
+0 -455.6813 Td
+(5745 ) 21.8426 Tj
+0 -465.1747 Td
+(5746 ) 21.8426 Tj
 0 -474.668 Td
-(5747 }) 26.2111 Tj
-0 -484.161 Td
+(5747 ) 21.8426 Tj
+0 -484.1614 Td
 (5748 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5749 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 57) 34.9481 Tj
 Q
 Q
@@ -19279,10 +19257,10 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/lapic.c  Page 3) 166.004 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/lapic.c  Page 3) 166.0035 Tj
 0 -28.4801 Td
 (5750 int) 34.9481 Tj
 0 -37.9735 Td
@@ -19290,101 +19268,103 @@ q
 0 -47.4668 Td
 (5752 {) 26.2111 Tj
 0 -56.9602 Td
-(5753   if\(lapic\)) 69.8962 Tj
+(5753   // Cannot call cpu when interrupts are enabled:) 235.8998 Tj
 0 -66.4535 Td
-(5754     return lapic[ID]>>24;) 131.055 Tj
+(5754   // result not guaranteed to last long enough to be used!) 275.2164 Tj
 0 -75.9469 Td
-(5755   return 0;) 69.8962 Tj
+(5755   // Would prefer to panic but even printing is chancy her\
+e:) 283.9534 Tj
 0 -85.4403 Td
-(5756 }) 26.2111 Tj
+(5756   // everything, including cprintf, calls cpu, at least in\
+directly) 310.1645 Tj
 0 -94.9336 Td
-(5757 ) 21.8426 Tj
+(5757   // through acquire and release.) 166.0035 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
+(5758   if\(read_eflags\(\)&FL_IF\){) 135.4239 Tj
+0 -113.9203 Td
+(5759     static int n;) 96.1073 Tj
+0 -123.4137 Td
+(5760     if\(n++ == 0\)) 91.7388 Tj
+0 -132.9071 Td
+(5761       cprintf\("cpu called from %x with interrupts enabled\
+\\n",) 288.322 Tj
+0 -142.4004 Td
+(5762         \(\(uint*\)read_ebp\(\)\)[1]\);) 161.635 Tj
+0 -151.8938 Td
+(5763   }) 34.9481 Tj
+0 -161.3871 Td
+(5764 ) 21.8426 Tj
+0 -170.8805 Td
+(5765   if\(lapic\)) 69.8962 Tj
+0 -180.3739 Td
+(5766     return lapic[ID]>>24;) 131.0554 Tj
+0 -189.8672 Td
+(5767   return 0;) 69.8962 Tj
+0 -199.3606 Td
+(5768 }) 26.2111 Tj
+0 -208.8539 Td
+(5769 ) 21.8426 Tj
+0 -218.3473 Td
+(5770 // Acknowledge interrupt.) 131.0554 Tj
+0 -227.8407 Td
+(5771 void) 39.3166 Tj
 0 -237.334 Td
-(5772 ) 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
+(5772 lapic_eoi\(void\)) 87.3703 Tj
+0 -246.8274 Td
+(5773 {) 26.2111 Tj
+0 -256.3207 Td
+(5774   if\(lapic\)) 69.8962 Tj
+0 -265.8141 Td
+(5775     lapicw\(EOI, 0\);) 104.8443 Tj
+0 -275.3075 Td
+(5776 }) 26.2111 Tj
+0 -284.8008 Td
+(5777 ) 21.8426 Tj
+0 -294.2942 Td
+(5778 // Spin for a given number of microseconds.) 209.6887 Tj
+0 -303.7875 Td
+(5779 // On real hardware would want to tune this dynamically.) 266.4794 Tj
+0 -313.2809 Td
+(5780 static void) 69.8962 Tj
+0 -322.7743 Td
+(5781 microdelay\(int us\)) 100.4758 Tj
+0 -332.2676 Td
+(5782 {) 26.2111 Tj
 0 -341.761 Td
-(5783   volatile int j = 0;) 113.581 Tj
-0 -351.254 Td
+(5783   volatile int j = 0;) 113.5814 Tj
+0 -351.2543 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
+0 -360.7477 Td
+(5785   while\(us-- > 0\)) 96.1073 Tj
+0 -370.2411 Td
+(5786     for\(j=0; j<10000; j++\);) 139.7925 Tj
+0 -379.7344 Td
+(5787 }) 26.2111 Tj
+0 -389.2278 Td
+(5788 ) 21.8426 Tj
+0 -398.7211 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 -408.2145 Td
+(5790 ) 21.8426 Tj
+0 -417.7079 Td
+(5791 ) 21.8426 Tj
+0 -427.2012 Td
+(5792 ) 21.8426 Tj
+0 -436.6946 Td
+(5793 ) 21.8426 Tj
+0 -446.1879 Td
+(5794 ) 21.8426 Tj
+0 -455.6813 Td
+(5795 ) 21.8426 Tj
+0 -465.1747 Td
+(5796 ) 21.8426 Tj
 0 -474.668 Td
 (5797 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5798 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5799 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 57) 34.9481 Tj
 Q
 Q
@@ -19413,8 +19393,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -19429,120 +19408,121 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/ioapic.c  Page 1) 170.372 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/lapic.c  Page 4) 166.0035 Tj
 0 -28.4801 Td
-(5800 // The I/O APIC manages hardware interrupts for an SMP sys\
-tem.) 292.69 Tj
+(5800 #define IO_RTC  0x70) 109.2129 Tj
 0 -37.9735 Td
-(5801 // http://www.intel.com/design/chipsets/datashts/29056601.\
-pdf) 288.322 Tj
+(5801 ) 21.8426 Tj
 0 -47.4668 Td
-(5802 // See also picirq.c.) 113.581 Tj
+(5802 // Start additional processor running bootstrap code at ad\
+dr.) 288.322 Tj
 0 -56.9602 Td
-(5803 ) 21.8426 Tj
+(5803 // See Appendix B of MultiProcessor Specification.) 240.2683 Tj
 0 -66.4535 Td
-(5804 #include "types.h") 100.476 Tj
+(5804 void) 39.3166 Tj
 0 -75.9469 Td
-(5805 #include "defs.h") 96.1073 Tj
+(5805 lapic_startap\(uchar apicid, uint addr\)) 187.8461 Tj
 0 -85.4403 Td
-(5806 #include "traps.h") 100.476 Tj
+(5806 {) 26.2111 Tj
 0 -94.9336 Td
-(5807 ) 21.8426 Tj
+(5807   int i;) 56.7907 Tj
 0 -104.427 Td
-(5808 #define IOAPIC  0xFEC00000   // Default physical address o\
-f IO APIC) 314.533 Tj
-0 -113.92 Td
+(5808   ushort *wrv;) 83.0018 Tj
+0 -113.9203 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 -123.4137 Td
+(5810   // "The BSP must initialize CMOS shutdown code to 0AH) 262.1109 Tj
+0 -132.9071 Td
+(5811   // and the warm reset vector \(DWORD based at 40:67\) to\
+ point at) 305.796 Tj
+0 -142.4004 Td
+(5812   // the AP startup code prior to the [universal startup a\
+lgorithm].") 323.2701 Tj
+0 -151.8938 Td
+(5813   outb\(IO_RTC, 0xF\);  // offset 0xF is shutdown code) 249.0053 Tj
+0 -161.3871 Td
+(5814   outb\(IO_RTC+1, 0x0A\);) 122.3184 Tj
+0 -170.8805 Td
+(5815   wrv = \(ushort*\)\(0x40<<4 | 0x67\);  // Warm reset vect\
+or) 266.4794 Tj
+0 -180.3739 Td
+(5816   wrv[0] = 0;) 78.6333 Tj
+0 -189.8672 Td
+(5817   wrv[1] = addr >> 4;) 113.5814 Tj
+0 -199.3606 Td
+(5818 ) 21.8426 Tj
+0 -208.8539 Td
+(5819   // "Universal startup algorithm.") 174.7406 Tj
+0 -218.3473 Td
+(5820   // Send INIT \(level-triggered\) interrupt to reset othe\
+r CPU.) 292.6905 Tj
+0 -227.8407 Td
+(5821   lapicw\(ICRHI, apicid<<24\);) 144.161 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
+(5822   lapicw\(ICRLO, INIT | LEVEL | ASSERT\);) 192.2146 Tj
+0 -246.8274 Td
+(5823   microdelay\(200\);) 100.4758 Tj
+0 -256.3207 Td
+(5824   lapicw\(ICRLO, INIT | LEVEL\);) 152.898 Tj
+0 -265.8141 Td
+(5825   microdelay\(100\);) 100.4758 Tj
+-500.868 TJm
+(// should be 10ms, but too slow in Bochs!) 179.1091 Tj
+0 -275.3075 Td
+(5826 ) 21.8426 Tj
+0 -284.8008 Td
+(5827   // Send startup IPI \(twice!\) to enter bootstrap code.) 262.1109 Tj
+0 -294.2942 Td
+(5828   // Regular hardware is supposed to only accept a STARTUP) 275.2164 Tj
+0 -303.7875 Td
+(5829   // when it is in the halted state due to an INIT.  So th\
+e second) 310.1645 Tj
+0 -313.2809 Td
+(5830   // should be ignored, but it is part of the official Int\
+el algorithm.) 332.0071 Tj
+0 -322.7743 Td
+(5831   // Bochs complains about the second one.  Too bad for Bo\
+chs.) 292.6905 Tj
+0 -332.2676 Td
+(5832   for\(i = 0; i < 2; i++\){) 131.0554 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
+(5833     lapicw\(ICRHI, apicid<<24\);) 152.898 Tj
+0 -351.2543 Td
+(5834     lapicw\(ICRLO, STARTUP | \(addr>>12\)\);) 196.5831 Tj
+0 -360.7477 Td
+(5835     microdelay\(200\);) 109.2129 Tj
+0 -370.2411 Td
+(5836   }) 34.9481 Tj
+0 -379.7344 Td
+(5837 }) 26.2111 Tj
+0 -389.2278 Td
+(5838 ) 21.8426 Tj
+0 -398.7211 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
+0 -408.2145 Td
+(5840 ) 21.8426 Tj
+0 -417.7079 Td
+(5841 ) 21.8426 Tj
+0 -427.2012 Td
+(5842 ) 21.8426 Tj
+0 -436.6946 Td
+(5843 ) 21.8426 Tj
+0 -446.1879 Td
+(5844 ) 21.8426 Tj
+0 -455.6813 Td
+(5845 ) 21.8426 Tj
+0 -465.1747 Td
 (5846 ) 21.8426 Tj
 0 -474.668 Td
 (5847 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5848 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5849 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 58) 34.9481 Tj
 Q
 Q
@@ -19557,114 +19537,120 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/ioapic.c  Page 2) 170.372 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/ioapic.c  Page 1) 170.3721 Tj
 0 -28.4801 Td
-(5850 void) 39.3166 Tj
+(5850 // The I/O APIC manages hardware interrupts for an SMP sys\
+tem.) 292.6905 Tj
 0 -37.9735 Td
-(5851 ioapic_init\(void\)) 96.1073 Tj
+(5851 // http://www.intel.com/design/chipsets/datashts/29056601.\
+pdf) 288.322 Tj
 0 -47.4668 Td
-(5852 {) 26.2111 Tj
+(5852 // See also picirq.c.) 113.5814 Tj
 0 -56.9602 Td
-(5853   int i, id, maxintr;) 113.581 Tj
+(5853 ) 21.8426 Tj
 0 -66.4535 Td
-(5854 ) 21.8426 Tj
+(5854 #include "types.h") 100.4758 Tj
 0 -75.9469 Td
-(5855   if\(!ismp\)) 69.8962 Tj
+(5855 #include "defs.h") 96.1073 Tj
 0 -85.4403 Td
-(5856     return;) 69.8962 Tj
+(5856 #include "traps.h") 100.4758 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
+(5858 #define IOAPIC  0xFEC00000   // Default physical address o\
+f IO APIC) 314.533 Tj
+0 -113.9203 Td
+(5859 ) 21.8426 Tj
+0 -123.4137 Td
+(5860 #define REG_ID     0x00  // Register index: ID) 222.7942 Tj
+0 -132.9071 Td
+(5861 #define REG_VER    0x01  // Register index: version) 244.6368 Tj
+0 -142.4004 Td
+(5862 #define REG_TABLE  0x10  // Redirection table base) 240.2683 Tj
+0 -151.8938 Td
 (5863 ) 21.8426 Tj
-0 -161.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 -161.3871 Td
+(5864 // The redirection table starts at REG_TABLE and uses) 253.3738 Tj
+0 -170.8805 Td
+(5865 // two registers to configure each interrupt.) 218.4257 Tj
+0 -180.3739 Td
+(5866 // The first \(low\) register in a pair contains configura\
+tion bits.) 310.1645 Tj
+0 -189.8672 Td
+(5867 // The second \(high\) register contains a bitmask telling\
+ which) 292.6905 Tj
+0 -199.3606 Td
+(5868 // CPUs can serve that interrupt.) 166.0035 Tj
+0 -208.8539 Td
+(5869 #define INT_DISABLED   0x00010000  // Interrupt disabled) 266.4794 Tj
+0 -218.3473 Td
+(5870 #define INT_LEVEL      0x00008000  // Level-triggered \(vs\
+ edge-\)) 301.4275 Tj
+0 -227.8407 Td
+(5871 #define INT_ACTIVELOW  0x00002000  // Active low \(vs high\
+\)) 275.2164 Tj
 0 -237.334 Td
-(5872 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
+(5872 #define INT_LOGICAL    0x00000800  // Destination is CPU i\
+d \(vs APIC ID\)) 336.3756 Tj
+0 -246.8274 Td
+(5873 ) 21.8426 Tj
+0 -256.3207 Td
+(5874 volatile struct ioapic *ioapic;) 157.2665 Tj
+0 -265.8141 Td
+(5875 ) 21.8426 Tj
+0 -275.3075 Td
+(5876 // IO APIC MMIO structure: write reg, then read or write d\
+ata.) 292.6905 Tj
+0 -284.8008 Td
+(5877 struct ioapic {) 87.3703 Tj
+0 -294.2942 Td
+(5878   uint reg;) 69.8962 Tj
+0 -303.7875 Td
+(5879   uint pad[3];) 83.0018 Tj
+0 -313.2809 Td
+(5880   uint data;) 74.2647 Tj
+0 -322.7743 Td
+(5881 };) 30.5796 Tj
+0 -332.2676 Td
+(5882 ) 21.8426 Tj
 0 -341.761 Td
-(5883 }) 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
+(5883 static uint) 69.8962 Tj
+0 -351.2543 Td
+(5884 ioapic_read\(int reg\)) 109.2129 Tj
+0 -360.7477 Td
+(5885 {) 26.2111 Tj
+0 -370.2411 Td
+(5886   ioapic->reg = reg;) 109.2129 Tj
+0 -379.7344 Td
+(5887   return ioapic->data;) 117.9499 Tj
+0 -389.2278 Td
+(5888 }) 26.2111 Tj
+0 -398.7211 Td
 (5889 ) 21.8426 Tj
-0 -408.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
+0 -408.2145 Td
+(5890 static void) 69.8962 Tj
+0 -417.7079 Td
+(5891 ioapic_write\(int reg, uint data\)) 161.635 Tj
+0 -427.2012 Td
+(5892 {) 26.2111 Tj
+0 -436.6946 Td
+(5893   ioapic->reg = reg;) 109.2129 Tj
+0 -446.1879 Td
+(5894   ioapic->data = data;) 117.9499 Tj
+0 -455.6813 Td
+(5895 }) 26.2111 Tj
+0 -465.1747 Td
 (5896 ) 21.8426 Tj
 0 -474.668 Td
 (5897 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (5898 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5899 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 58) 34.9481 Tj
 Q
 Q
@@ -19693,8 +19679,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -19709,114 +19694,114 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/picirq.c  Page 1) 170.372 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/ioapic.c  Page 2) 170.3721 Tj
 0 -28.4801 Td
-(5900 // Intel 8259A programmable interrupt controllers.) 240.268 Tj
+(5900 void) 39.3166 Tj
 0 -37.9735 Td
-(5901 ) 21.8426 Tj
+(5901 ioapic_init\(void\)) 96.1073 Tj
 0 -47.4668 Td
-(5902 #include "types.h") 100.476 Tj
+(5902 {) 26.2111 Tj
 0 -56.9602 Td
-(5903 #include "x86.h") 91.7388 Tj
+(5903   int i, id, maxintr;) 113.5814 Tj
 0 -66.4535 Td
-(5904 #include "traps.h") 100.476 Tj
+(5904 ) 21.8426 Tj
 0 -75.9469 Td
-(5905 ) 21.8426 Tj
+(5905   if\(!ismp\)) 69.8962 Tj
 0 -85.4403 Td
-(5906 // I/O Addresses of the two programmable interrupt control\
-lers) 292.69 Tj
+(5906     return;) 69.8962 Tj
 0 -94.9336 Td
-(5907 #define IO_PIC1         0x20    // Master \(IRQs 0-7\)) 249.005 Tj
+(5907 ) 21.8426 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
+(5908   ioapic = \(volatile struct ioapic*\)IOAPIC;) 209.6887 Tj
+0 -113.9203 Td
+(5909   maxintr = \(ioapic_read\(REG_VER\) >> 16\) & 0xFF;) 231.5313 Tj
+0 -123.4137 Td
+(5910   id = ioapic_read\(REG_ID\) >> 24;) 166.0035 Tj
+0 -132.9071 Td
+(5911   if\(id != ioapic_id\)) 113.5814 Tj
+0 -142.4004 Td
+(5912     cprintf\("ioapic_init: id isn't equal to ioapic_id; no\
+t a MP\\n"\);) 318.9016 Tj
+0 -151.8938 Td
+(5913 ) 21.8426 Tj
+0 -161.3871 Td
+(5914   // Mark all interrupts edge-triggered, active high, disa\
+bled,) 297.059 Tj
+0 -170.8805 Td
+(5915   // and not routed to any CPUs.) 161.635 Tj
+0 -180.3739 Td
+(5916   for\(i = 0; i <= maxintr; i++\){) 161.635 Tj
+0 -189.8672 Td
+(5917     ioapic_write\(REG_TABLE+2*i, INT_DISABLED | \(IRQ_OFFS\
+ET + i\)\);) 305.796 Tj
+0 -199.3606 Td
+(5918     ioapic_write\(REG_TABLE+2*i+1, 0\);) 183.4776 Tj
+0 -208.8539 Td
+(5919   }) 34.9481 Tj
+0 -218.3473 Td
+(5920 }) 26.2111 Tj
+0 -227.8407 Td
+(5921 ) 21.8426 Tj
 0 -237.334 Td
-(5922 }) 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
+(5922 void) 39.3166 Tj
+0 -246.8274 Td
+(5923 ioapic_enable\(int irq, int cpunum\)) 170.3721 Tj
+0 -256.3207 Td
+(5924 {) 26.2111 Tj
+0 -265.8141 Td
+(5925   if\(!ismp\)) 69.8962 Tj
+0 -275.3075 Td
+(5926     return;) 69.8962 Tj
+0 -284.8008 Td
+(5927 ) 21.8426 Tj
+0 -294.2942 Td
+(5928   // Mark interrupt edge-triggered, active high,) 231.5313 Tj
+0 -303.7875 Td
+(5929   // enabled, and routed to the given cpunum,) 218.4257 Tj
+0 -313.2809 Td
+(5930   // which happens to be that cpu's APIC ID.) 214.0572 Tj
+0 -322.7743 Td
+(5931   ioapic_write\(REG_TABLE+2*irq, IRQ_OFFSET + irq\);) 240.2683 Tj
+0 -332.2676 Td
+(5932   ioapic_write\(REG_TABLE+2*irq+1, cpunum << 24\);) 231.5313 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
+(5933 }) 26.2111 Tj
+0 -351.2543 Td
+(5934 ) 21.8426 Tj
+0 -360.7477 Td
+(5935 ) 21.8426 Tj
+0 -370.2411 Td
+(5936 ) 21.8426 Tj
+0 -379.7344 Td
 (5937 ) 21.8426 Tj
-0 -389.228 Td
-(5938   // Set up master \(8259A-1\)) 144.161 Tj
-0 -398.721 Td
+0 -389.2278 Td
+(5938 ) 21.8426 Tj
+0 -398.7211 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
+0 -408.2145 Td
+(5940 ) 21.8426 Tj
+0 -417.7079 Td
+(5941 ) 21.8426 Tj
+0 -427.2012 Td
+(5942 ) 21.8426 Tj
+0 -436.6946 Td
+(5943 ) 21.8426 Tj
+0 -446.1879 Td
+(5944 ) 21.8426 Tj
+0 -455.6813 Td
 (5945 ) 21.8426 Tj
-0 -465.175 Td
-(5946   // ICW2:  Vector offset) 131.055 Tj
+0 -465.1747 Td
+(5946 ) 21.8426 Tj
 0 -474.668 Td
-(5947   outb\(IO_PIC1+1, IRQ_OFFSET\);) 152.898 Tj
-0 -484.161 Td
+(5947 ) 21.8426 Tj
+0 -484.1614 Td
 (5948 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5949 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 59) 34.9481 Tj
 Q
 Q
@@ -19831,117 +19816,114 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/picirq.c  Page 2) 170.372 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/picirq.c  Page 1) 170.3721 Tj
 0 -28.4801 Td
-(5950   // ICW3:  \(master PIC\) bit mask of IR lines connected \
-to slaves) 305.796 Tj
+(5950 // Intel 8259A programmable interrupt controllers.) 240.2683 Tj
 0 -37.9735 Td
-(5951   //        \(slave PIC\) 3-bit # of slave's connection to\
- master) 297.059 Tj
+(5951 ) 21.8426 Tj
 0 -47.4668 Td
-(5952   outb\(IO_PIC1+1, 1<<IRQ_SLAVE\);) 161.635 Tj
+(5952 #include "types.h") 100.4758 Tj
 0 -56.9602 Td
-(5953 ) 21.8426 Tj
+(5953 #include "x86.h") 91.7388 Tj
 0 -66.4535 Td
-(5954   // ICW4:  000nbmap) 109.213 Tj
+(5954 #include "traps.h") 100.4758 Tj
 0 -75.9469 Td
-(5955   //    n:  1 = special fully nested mode) 200.952 Tj
+(5955 ) 21.8426 Tj
 0 -85.4403 Td
-(5956   //    b:  1 = buffered mode) 148.529 Tj
+(5956 // I/O Addresses of the two programmable interrupt control\
+lers) 292.6905 Tj
 0 -94.9336 Td
-(5957   //    m:  0 = slave PIC, 1 = master PIC) 200.952 Tj
+(5957 #define IO_PIC1         0x20    // Master \(IRQs 0-7\)) 249.0053 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
+(5958 #define IO_PIC2         0xA0    // Slave \(IRQs 8-15\)) 249.0053 Tj
+0 -113.9203 Td
+(5959 ) 21.8426 Tj
+0 -123.4137 Td
+(5960 #define IRQ_SLAVE       2       // IRQ at which slave conn\
+ects to master) 336.3756 Tj
+0 -132.9071 Td
+(5961 ) 21.8426 Tj
+0 -142.4004 Td
+(5962 // Current IRQ mask.) 109.2129 Tj
+0 -151.8938 Td
+(5963 // Initial IRQ mask has interrupt 2 enabled \(for slave 82\
+59A\).) 292.6905 Tj
+0 -161.3871 Td
+(5964 static ushort irqmask = 0xFFFF & ~\(1<<IRQ_SLAVE\);) 235.8998 Tj
+0 -170.8805 Td
+(5965 ) 21.8426 Tj
+0 -180.3739 Td
+(5966 static void) 69.8962 Tj
+0 -189.8672 Td
+(5967 pic_setmask\(ushort mask\)) 126.6869 Tj
+0 -199.3606 Td
+(5968 {) 26.2111 Tj
+0 -208.8539 Td
+(5969   irqmask = mask;) 96.1073 Tj
+0 -218.3473 Td
+(5970   outb\(IO_PIC1+1, mask\);) 126.6869 Tj
+0 -227.8407 Td
+(5971   outb\(IO_PIC2+1, mask >> 8\);) 148.5295 Tj
 0 -237.334 Td
-(5972   // 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
+(5972 }) 26.2111 Tj
+0 -246.8274 Td
+(5973 ) 21.8426 Tj
+0 -256.3207 Td
+(5974 void) 39.3166 Tj
+0 -265.8141 Td
+(5975 pic_enable\(int irq\)) 104.8443 Tj
+0 -275.3075 Td
+(5976 {) 26.2111 Tj
+0 -284.8008 Td
+(5977   pic_setmask\(irqmask & ~\(1<<irq\)\);) 174.7406 Tj
+0 -294.2942 Td
+(5978 }) 26.2111 Tj
+0 -303.7875 Td
+(5979 ) 21.8426 Tj
+0 -313.2809 Td
+(5980 // Initialize the 8259A interrupt controllers.) 222.7942 Tj
+0 -322.7743 Td
+(5981 void) 39.3166 Tj
+0 -332.2676 Td
+(5982 pic_init\(void\)) 83.0018 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
+(5983 {) 26.2111 Tj
+0 -351.2543 Td
+(5984   // mask all interrupts) 126.6869 Tj
+0 -360.7477 Td
+(5985   outb\(IO_PIC1+1, 0xFF\);) 126.6869 Tj
+0 -370.2411 Td
+(5986   outb\(IO_PIC2+1, 0xFF\);) 126.6869 Tj
+0 -379.7344 Td
 (5987 ) 21.8426 Tj
-0 -389.228 Td
-(5988 ) 21.8426 Tj
-0 -398.721 Td
+0 -389.2278 Td
+(5988   // Set up master \(8259A-1\)) 144.161 Tj
+0 -398.7211 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
+0 -408.2145 Td
+(5990   // ICW1:  0001g0hi) 109.2129 Tj
+0 -417.7079 Td
+(5991   //    g:  0 = edge triggering, 1 = level triggering) 253.3738 Tj
+0 -427.2012 Td
+(5992   //    h:  0 = cascaded PICs, 1 = master only) 222.7942 Tj
+0 -436.6946 Td
+(5993   //    i:  0 = no ICW4, 1 = ICW4 required) 205.3202 Tj
+0 -446.1879 Td
+(5994   outb\(IO_PIC1, 0x11\);) 117.9499 Tj
+0 -455.6813 Td
 (5995 ) 21.8426 Tj
-0 -465.175 Td
-(5996 ) 21.8426 Tj
+0 -465.1747 Td
+(5996   // ICW2:  Vector offset) 131.0554 Tj
 0 -474.668 Td
-(5997 ) 21.8426 Tj
-0 -484.161 Td
+(5997   outb\(IO_PIC1+1, IRQ_OFFSET\);) 152.898 Tj
+0 -484.1614 Td
 (5998 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (5999 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 59) 34.9481 Tj
 Q
 Q
@@ -19970,8 +19952,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -19986,112 +19967,117 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/kbd.h  Page 1) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/picirq.c  Page 2) 170.3721 Tj
 0 -28.4801 Td
-(6000 // PC keyboard interface constants) 170.372 Tj
+(6000   // ICW3:  \(master PIC\) bit mask of IR lines connected \
+to slaves) 305.796 Tj
 0 -37.9735 Td
-(6001 ) 21.8426 Tj
+(6001   //        \(slave PIC\) 3-bit # of slave's connection to\
+ master) 297.059 Tj
 0 -47.4668 Td
-(6002 #define KBSTATP         0x64    // kbd controller status p\
-ort\(I\)) 301.427 Tj
+(6002   outb\(IO_PIC1+1, 1<<IRQ_SLAVE\);) 161.635 Tj
 0 -56.9602 Td
-(6003 #define KBS_DIB         0x01    // kbd data in buffer) 253.374 Tj
+(6003 ) 21.8426 Tj
 0 -66.4535 Td
-(6004 #define KBDATAP         0x60    // kbd data port\(I\)) 244.637 Tj
+(6004   // ICW4:  000nbmap) 109.2129 Tj
 0 -75.9469 Td
-(6005 ) 21.8426 Tj
+(6005   //    n:  1 = special fully nested mode) 200.9517 Tj
 0 -85.4403 Td
-(6006 #define NO              0) 131.055 Tj
+(6006   //    b:  1 = buffered mode) 148.5295 Tj
 0 -94.9336 Td
-(6007 ) 21.8426 Tj
+(6007   //    m:  0 = slave PIC, 1 = master PIC) 200.9517 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
+(6008   //      \(ignored when b is 0, as the master/slave role) 266.4794 Tj
+0 -113.9203 Td
+(6009   //      can be hardwired\).) 144.161 Tj
+0 -123.4137 Td
+(6010   //    a:  1 = Automatic EOI mode) 170.3721 Tj
+0 -132.9071 Td
+(6011   //    p:  0 = MCS-80/85 mode, 1 = intel x86 mode) 240.2683 Tj
+0 -142.4004 Td
+(6012   outb\(IO_PIC1+1, 0x3\);) 122.3184 Tj
+0 -151.8938 Td
+(6013 ) 21.8426 Tj
+0 -161.3871 Td
+(6014   // Set up slave \(8259A-2\)) 139.7925 Tj
+0 -170.8805 Td
+(6015   outb\(IO_PIC2, 0x11\);                  // ICW1) 227.1628 Tj
+0 -180.3739 Td
+(6016   outb\(IO_PIC2+1, IRQ_OFFSET + 8\);      // ICW2) 227.1628 Tj
+0 -189.8672 Td
+(6017   outb\(IO_PIC2+1, IRQ_SLAVE\);           // ICW3) 227.1628 Tj
+0 -199.3606 Td
+(6018   // NB Automatic EOI mode doesn't tend to work on the sla\
+ve.) 288.322 Tj
+0 -208.8539 Td
+(6019   // Linux source code says it's "to be investigated".) 257.7424 Tj
+0 -218.3473 Td
+(6020   outb\(IO_PIC2+1, 0x3\);                 // ICW4) 227.1628 Tj
+0 -227.8407 Td
+(6021 ) 21.8426 Tj
 0 -237.334 Td
-(6022 #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
+(6022   // OCW3:  0ef01prs) 109.2129 Tj
+0 -246.8274 Td
+(6023   //   ef:  0x = NOP, 10 = clear specific mask, 11 = set s\
+pecific mask) 327.6386 Tj
+0 -256.3207 Td
+(6024   //    p:  0 = no polling, 1 = polling mode) 214.0572 Tj
+0 -265.8141 Td
+(6025   //   rs:  0x = NOP, 10 = read IRR, 11 = read ISR) 240.2683 Tj
+0 -275.3075 Td
+(6026   outb\(IO_PIC1, 0x68\);             // clear specific mas\
+k) 270.8479 Tj
+0 -284.8008 Td
+(6027   outb\(IO_PIC1, 0x0a\);             // read IRR by defaul\
+t) 270.8479 Tj
+0 -294.2942 Td
+(6028 ) 21.8426 Tj
+0 -303.7875 Td
+(6029   outb\(IO_PIC2, 0x68\);             // OCW3) 205.3202 Tj
+0 -313.2809 Td
+(6030   outb\(IO_PIC2, 0x0a\);             // OCW3) 205.3202 Tj
+0 -322.7743 Td
+(6031 ) 21.8426 Tj
+0 -332.2676 Td
+(6032   if\(irqmask != 0xFFFF\)) 122.3184 Tj
 0 -341.761 Td
-(6033 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
+(6033     pic_setmask\(irqmask\);) 131.0554 Tj
+0 -351.2543 Td
+(6034 }) 26.2111 Tj
+0 -360.7477 Td
+(6035 ) 21.8426 Tj
+0 -370.2411 Td
+(6036 ) 21.8426 Tj
+0 -379.7344 Td
+(6037 ) 21.8426 Tj
+0 -389.2278 Td
+(6038 ) 21.8426 Tj
+0 -398.7211 Td
+(6039 ) 21.8426 Tj
+0 -408.2145 Td
+(6040 ) 21.8426 Tj
+0 -417.7079 Td
+(6041 ) 21.8426 Tj
+0 -427.2012 Td
 (6042 ) 21.8426 Tj
-0 -436.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 -436.6946 Td
+(6043 ) 21.8426 Tj
+0 -446.1879 Td
+(6044 ) 21.8426 Tj
+0 -455.6813 Td
+(6045 ) 21.8426 Tj
+0 -465.1747 Td
+(6046 ) 21.8426 Tj
 0 -474.668 Td
-(6047   [0x46] SCROLLLOCK) 104.844 Tj
-0 -484.161 Td
-(6048 };) 30.5796 Tj
-0 -493.655 Td
+(6047 ) 21.8426 Tj
+0 -484.1614 Td
+(6048 ) 21.8426 Tj
+0 -493.6547 Td
 (6049 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 60) 34.9481 Tj
 Q
 Q
@@ -20106,111 +20092,112 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/kbd.h  Page 2) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/kbd.h  Page 1) 157.2665 Tj
 0 -28.4801 Td
-(6050 static uchar normalmap[256] =) 148.529 Tj
+(6050 // PC keyboard interface constants) 170.3721 Tj
 0 -37.9735 Td
-(6051 {) 26.2111 Tj
+(6051 ) 21.8426 Tj
 0 -47.4668 Td
-(6052   NO,   0x1B, '1',  '2',  '3',  '4',  '5',  '6',  // 0x00) 270.848 Tj
+(6052 #define KBSTATP         0x64    // kbd controller status p\
+ort\(I\)) 301.4275 Tj
 0 -56.9602 Td
-(6053   '7',  '8',  '9',  '0',  '-',  '=',  '\\b', '\\t',) 235.9 Tj
+(6053 #define KBS_DIB         0x01    // kbd data in buffer) 253.3738 Tj
 0 -66.4535 Td
-(6054   'q',  'w',  'e',  'r',  't',  'y',  'u',  'i',  // 0x10) 270.848 Tj
+(6054 #define KBDATAP         0x60    // kbd data port\(I\)) 244.6368 Tj
 0 -75.9469 Td
-(6055   'o',  'p',  '[',  ']',  '\\n', NO,   'a',  's',) 231.531 Tj
+(6055 ) 21.8426 Tj
 0 -85.4403 Td
-(6056   'd',  'f',  'g',  'h',  'j',  'k',  'l',  ';',  // 0x20) 270.848 Tj
+(6056 #define NO              0) 131.0554 Tj
 0 -94.9336 Td
-(6057   '\\'', '`',  NO,   '\\\\', 'z',  'x',  'c',  'v',) 231.531 Tj
+(6057 ) 21.8426 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
+(6058 #define SHIFT           \(1<<0\)) 152.898 Tj
+0 -113.9203 Td
+(6059 #define CTL             \(1<<1\)) 152.898 Tj
+0 -123.4137 Td
+(6060 #define ALT             \(1<<2\)) 152.898 Tj
+0 -132.9071 Td
+(6061 ) 21.8426 Tj
+0 -142.4004 Td
+(6062 #define CAPSLOCK        \(1<<3\)) 152.898 Tj
+0 -151.8938 Td
+(6063 #define NUMLOCK         \(1<<4\)) 152.898 Tj
+0 -161.3871 Td
+(6064 #define SCROLLLOCK      \(1<<5\)) 152.898 Tj
+0 -170.8805 Td
+(6065 ) 21.8426 Tj
+0 -180.3739 Td
+(6066 #define E0ESC           \(1<<6\)) 152.898 Tj
+0 -189.8672 Td
+(6067 ) 21.8426 Tj
+0 -199.3606 Td
+(6068 // Special keycodes) 104.8443 Tj
+0 -208.8539 Td
+(6069 #define KEY_HOME        0xE0) 144.161 Tj
+0 -218.3473 Td
+(6070 #define KEY_END         0xE1) 144.161 Tj
+0 -227.8407 Td
+(6071 #define KEY_UP          0xE2) 144.161 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
+(6072 #define KEY_DN          0xE3) 144.161 Tj
+0 -246.8274 Td
+(6073 #define KEY_LF          0xE4) 144.161 Tj
+0 -256.3207 Td
+(6074 #define KEY_RT          0xE5) 144.161 Tj
+0 -265.8141 Td
+(6075 #define KEY_PGUP        0xE6) 144.161 Tj
+0 -275.3075 Td
+(6076 #define KEY_PGDN        0xE7) 144.161 Tj
+0 -284.8008 Td
+(6077 #define KEY_INS         0xE8) 144.161 Tj
+0 -294.2942 Td
+(6078 #define KEY_DEL         0xE9) 144.161 Tj
+0 -303.7875 Td
+(6079 ) 21.8426 Tj
+0 -313.2809 Td
+(6080 // C\('A'\) == Control-A) 117.9499 Tj
+0 -322.7743 Td
+(6081 #define C\(x\) \(x - '@'\)) 117.9499 Tj
+0 -332.2676 Td
+(6082 ) 21.8426 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
+(6083 static uchar shiftcode[256] =) 148.5295 Tj
+0 -351.2543 Td
+(6084 {) 26.2111 Tj
+0 -360.7477 Td
+(6085   [0x1D] CTL,) 78.6333 Tj
+0 -370.2411 Td
+(6086   [0x2A] SHIFT,) 87.3703 Tj
+0 -379.7344 Td
+(6087   [0x36] SHIFT,) 87.3703 Tj
+0 -389.2278 Td
+(6088   [0x38] ALT,) 78.6333 Tj
+0 -398.7211 Td
+(6089   [0x9D] CTL,) 78.6333 Tj
+0 -408.2145 Td
+(6090   [0xB8] ALT) 74.2647 Tj
+0 -417.7079 Td
+(6091 };) 30.5796 Tj
+0 -427.2012 Td
+(6092 ) 21.8426 Tj
+0 -436.6946 Td
+(6093 static uchar togglecode[256] =) 152.898 Tj
+0 -446.1879 Td
+(6094 {) 26.2111 Tj
+0 -455.6813 Td
+(6095   [0x3A] CAPSLOCK,) 100.4758 Tj
+0 -465.1747 Td
+(6096   [0x45] NUMLOCK,) 96.1073 Tj
 0 -474.668 Td
-(6097 ) 21.8426 Tj
-0 -484.161 Td
-(6098 ) 21.8426 Tj
-0 -493.655 Td
+(6097   [0x46] SCROLLLOCK) 104.8443 Tj
+0 -484.1614 Td
+(6098 };) 30.5796 Tj
+0 -493.6547 Td
 (6099 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 60) 34.9481 Tj
 Q
 Q
@@ -20239,8 +20226,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -20255,118 +20241,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/kbd.h  Page 3) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/kbd.h  Page 2) 157.2665 Tj
 0 -28.4801 Td
-(6100 static uchar ctlmap[256] =) 135.424 Tj
+(6100 static uchar normalmap[256] =) 148.5295 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
+(6102   NO,   0x1B, '1',  '2',  '3',  '4',  '5',  '6',  // 0x00) 270.8479 Tj
 0 -56.9602 Td
-(6103   NO,      NO,      NO,      NO,      NO,      NO,      NO\
-,      NO,) 318.902 Tj
+(6103   '7',  '8',  '9',  '0',  '-',  '=',  '\\b', '\\t',) 235.8998 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
+(6104   'q',  'w',  'e',  'r',  't',  'y',  'u',  'i',  // 0x10) 270.8479 Tj
 0 -75.9469 Td
-(6105   C\('O'\),  C\('P'\),  NO,      NO,      '\\r',    NO,   \
-   C\('A'\),  C\('S'\),) 336.376 Tj
+(6105   'o',  'p',  '[',  ']',  '\\n', NO,   'a',  's',) 231.5313 Tj
 0 -85.4403 Td
-(6106   C\('D'\),  C\('F'\),  C\('G'\),  C\('H'\),  C\('J'\),  C\
-\('K'\),  C\('L'\),  NO,) 318.902 Tj
+(6106   'd',  'f',  'g',  'h',  'j',  'k',  'l',  ';',  // 0x20) 270.8479 Tj
 0 -94.9336 Td
-(6107   NO,      NO,      NO,      C\('\\\\'\), C\('Z'\),  C\('X\
-'\),  C\('C'\),  C\('V'\),) 336.376 Tj
+(6107   '\\'', '`',  NO,   '\\\\', 'z',  'x',  'c',  'v',) 231.5313 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
+(6108   'b',  'n',  'm',  ',',  '.',  '/',  NO,   '*',  // 0x30) 270.8479 Tj
+0 -113.9203 Td
+(6109   NO,   ' ',  NO,   NO,   NO,   NO,   NO,   NO,) 227.1628 Tj
+0 -123.4137 Td
+(6110   NO,   NO,   NO,   NO,   NO,   NO,   NO,   '7',  // 0x40) 270.8479 Tj
+0 -132.9071 Td
+(6111   '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',) 231.5313 Tj
+0 -142.4004 Td
+(6112   '2',  '3',  '0',  '.',  NO,   NO,   NO,   NO,   // 0x50) 270.8479 Tj
+0 -151.8938 Td
+(6113   [0x9C] '\\n',      // KP_Enter) 157.2665 Tj
+0 -161.3871 Td
+(6114   [0xB5] '/',       // KP_Div) 148.5295 Tj
+0 -170.8805 Td
+(6115   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.3721 Tj
+0 -180.3739 Td
+(6116   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.1091 Tj
+0 -189.8672 Td
+(6117   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.3721 Tj
+0 -199.3606 Td
+(6118   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.7406 Tj
+0 -208.8539 Td
+(6119   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.3721 Tj
+0 -218.3473 Td
+(6120 };) 30.5796 Tj
+0 -227.8407 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
+(6122 static uchar shiftmap[256] =) 144.161 Tj
+0 -246.8274 Td
+(6123 {) 26.2111 Tj
+0 -256.3207 Td
+(6124   NO,   033,  '!',  '@',  '#',  '$',  '%',  '^',  // 0x00) 270.8479 Tj
+0 -265.8141 Td
+(6125   '&',  '*',  '\(',  '\)',  '_',  '+',  '\\b', '\\t',) 235.8998 Tj
+0 -275.3075 Td
+(6126   'Q',  'W',  'E',  'R',  'T',  'Y',  'U',  'I',  // 0x10) 270.8479 Tj
+0 -284.8008 Td
+(6127   'O',  'P',  '{',  '}',  '\\n', NO,   'A',  'S',) 231.5313 Tj
+0 -294.2942 Td
+(6128   'D',  'F',  'G',  'H',  'J',  'K',  'L',  ':',  // 0x20) 270.8479 Tj
+0 -303.7875 Td
+(6129   '"',  '~',  NO,   '|',  'Z',  'X',  'C',  'V',) 231.5313 Tj
+0 -313.2809 Td
+(6130   'B',  'N',  'M',  '<',  '>',  '?',  NO,   '*',  // 0x30) 270.8479 Tj
+0 -322.7743 Td
+(6131   NO,   ' ',  NO,   NO,   NO,   NO,   NO,   NO,) 227.1628 Tj
+0 -332.2676 Td
+(6132   NO,   NO,   NO,   NO,   NO,   NO,   NO,   '7',  // 0x40) 270.8479 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
+(6133   '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',) 231.5313 Tj
+0 -351.2543 Td
+(6134   '2',  '3',  '0',  '.',  NO,   NO,   NO,   NO,   // 0x50) 270.8479 Tj
+0 -360.7477 Td
+(6135   [0x9C] '\\n',      // KP_Enter) 157.2665 Tj
+0 -370.2411 Td
+(6136   [0xB5] '/',       // KP_Div) 148.5295 Tj
+0 -379.7344 Td
+(6137   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.3721 Tj
+0 -389.2278 Td
+(6138   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.1091 Tj
+0 -398.7211 Td
+(6139   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.3721 Tj
+0 -408.2145 Td
+(6140   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.7406 Tj
+0 -417.7079 Td
+(6141   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.3721 Tj
+0 -427.2012 Td
+(6142 };) 30.5796 Tj
+0 -436.6946 Td
 (6143 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (6144 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (6145 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (6146 ) 21.8426 Tj
 0 -474.668 Td
 (6147 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (6148 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (6149 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 61) 34.9481 Tj
 Q
 Q
@@ -20381,111 +20360,118 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/kbd.c  Page 1) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/kbd.h  Page 3) 157.2665 Tj
 0 -28.4801 Td
-(6150 #include "types.h") 100.476 Tj
+(6150 static uchar ctlmap[256] =) 135.4239 Tj
 0 -37.9735 Td
-(6151 #include "x86.h") 91.7388 Tj
+(6151 {) 26.2111 Tj
 0 -47.4668 Td
-(6152 #include "defs.h") 96.1073 Tj
+(6152   NO,      NO,      NO,      NO,      NO,      NO,      NO\
+,      NO,) 318.9016 Tj
 0 -56.9602 Td
-(6153 #include "kbd.h") 91.7388 Tj
+(6153   NO,      NO,      NO,      NO,      NO,      NO,      NO\
+,      NO,) 318.9016 Tj
 0 -66.4535 Td
-(6154 ) 21.8426 Tj
+(6154   C\('Q'\),  C\('W'\),  C\('E'\),  C\('R'\),  C\('T'\),  C\
+\('Y'\),  C\('U'\),  C\('I'\),) 336.3756 Tj
 0 -75.9469 Td
-(6155 int) 34.9481 Tj
+(6155   C\('O'\),  C\('P'\),  NO,      NO,      '\\r',    NO,   \
+   C\('A'\),  C\('S'\),) 336.3756 Tj
 0 -85.4403 Td
-(6156 kbd_getc\(void\)) 83.0018 Tj
+(6156   C\('D'\),  C\('F'\),  C\('G'\),  C\('H'\),  C\('J'\),  C\
+\('K'\),  C\('L'\),  NO,) 318.9016 Tj
 0 -94.9336 Td
-(6157 {) 26.2111 Tj
+(6157   NO,      NO,      NO,      C\('\\\\'\), C\('Z'\),  C\('X\
+'\),  C\('C'\),  C\('V'\),) 336.3756 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
+(6158   C\('B'\),  C\('N'\),  C\('M'\),  NO,      NO,      C\('/\
+'\),  NO,      NO,) 318.9016 Tj
+0 -113.9203 Td
+(6159   [0x9C] '\\r',      // KP_Enter) 157.2665 Tj
+0 -123.4137 Td
+(6160   [0xB5] C\('/'\),    // KP_Div) 148.5295 Tj
+0 -132.9071 Td
+(6161   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.3721 Tj
+0 -142.4004 Td
+(6162   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.1091 Tj
+0 -151.8938 Td
+(6163   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.3721 Tj
+0 -161.3871 Td
+(6164   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.7406 Tj
+0 -170.8805 Td
+(6165   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.3721 Tj
+0 -180.3739 Td
+(6166 };) 30.5796 Tj
+0 -189.8672 Td
+(6167 ) 21.8426 Tj
+0 -199.3606 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 -208.8539 Td
+(6169 ) 21.8426 Tj
+0 -218.3473 Td
+(6170 ) 21.8426 Tj
+0 -227.8407 Td
+(6171 ) 21.8426 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
+(6172 ) 21.8426 Tj
+0 -246.8274 Td
+(6173 ) 21.8426 Tj
+0 -256.3207 Td
+(6174 ) 21.8426 Tj
+0 -265.8141 Td
+(6175 ) 21.8426 Tj
+0 -275.3075 Td
+(6176 ) 21.8426 Tj
+0 -284.8008 Td
+(6177 ) 21.8426 Tj
+0 -294.2942 Td
+(6178 ) 21.8426 Tj
+0 -303.7875 Td
+(6179 ) 21.8426 Tj
+0 -313.2809 Td
+(6180 ) 21.8426 Tj
+0 -322.7743 Td
+(6181 ) 21.8426 Tj
+0 -332.2676 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
+(6183 ) 21.8426 Tj
+0 -351.2543 Td
+(6184 ) 21.8426 Tj
+0 -360.7477 Td
+(6185 ) 21.8426 Tj
+0 -370.2411 Td
+(6186 ) 21.8426 Tj
+0 -379.7344 Td
+(6187 ) 21.8426 Tj
+0 -389.2278 Td
+(6188 ) 21.8426 Tj
+0 -398.7211 Td
+(6189 ) 21.8426 Tj
+0 -408.2145 Td
+(6190 ) 21.8426 Tj
+0 -417.7079 Td
+(6191 ) 21.8426 Tj
+0 -427.2012 Td
+(6192 ) 21.8426 Tj
+0 -436.6946 Td
+(6193 ) 21.8426 Tj
+0 -446.1879 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 -455.6813 Td
+(6195 ) 21.8426 Tj
+0 -465.1747 Td
+(6196 ) 21.8426 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
+(6197 ) 21.8426 Tj
+0 -484.1614 Td
+(6198 ) 21.8426 Tj
+0 -493.6547 Td
+(6199 ) 21.8426 Tj
+0 -522.1348 Td
 (Sheet 61) 34.9481 Tj
 Q
 Q
@@ -20514,8 +20500,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -20530,113 +20515,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/console.c  Page 1) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/kbd.c  Page 1) 157.2665 Tj
 0 -28.4801 Td
-(6200 // Console input and output.) 144.161 Tj
+(6200 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
-(6201 // Input is from the keyboard only.) 174.741 Tj
+(6201 #include "x86.h") 91.7388 Tj
 0 -47.4668 Td
-(6202 // Output is written to the screen and the printer port.) 266.479 Tj
+(6202 #include "defs.h") 96.1073 Tj
 0 -56.9602 Td
-(6203 ) 21.8426 Tj
+(6203 #include "kbd.h") 91.7388 Tj
 0 -66.4535 Td
-(6204 #include "types.h") 100.476 Tj
+(6204 ) 21.8426 Tj
 0 -75.9469 Td
-(6205 #include "defs.h") 96.1073 Tj
+(6205 int) 34.9481 Tj
 0 -85.4403 Td
-(6206 #include "param.h") 100.476 Tj
+(6206 kbd_getc\(void\)) 83.0018 Tj
 0 -94.9336 Td
-(6207 #include "traps.h") 100.476 Tj
+(6207 {) 26.2111 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
+(6208   static uint shift;) 109.2129 Tj
+0 -113.9203 Td
+(6209   static uchar *charcode[4] = {) 157.2665 Tj
+0 -123.4137 Td
+(6210     normalmap, shiftmap, ctlmap, ctlmap) 192.2146 Tj
+0 -132.9071 Td
+(6211   };) 39.3166 Tj
+0 -142.4004 Td
+(6212   uint st, data, c;) 104.8443 Tj
+0 -151.8938 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 -161.3871 Td
+(6214   st = inb\(KBSTATP\);) 109.2129 Tj
+0 -170.8805 Td
+(6215   if\(\(st & KBS_DIB\) == 0\)) 131.0554 Tj
+0 -180.3739 Td
+(6216     return -1;) 83.0018 Tj
+0 -189.8672 Td
+(6217   data = inb\(KBDATAP\);) 117.9499 Tj
+0 -199.3606 Td
+(6218 ) 21.8426 Tj
+0 -208.8539 Td
+(6219   if\(data == 0xE0\){) 104.8443 Tj
+0 -218.3473 Td
+(6220     shift |= E0ESC;) 104.8443 Tj
+0 -227.8407 Td
+(6221     return 0;) 78.6333 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
+(6222   } else if\(data & 0x80\){) 131.0554 Tj
+0 -246.8274 Td
+(6223     // Key released) 104.8443 Tj
+0 -256.3207 Td
+(6224     data = \(shift & E0ESC ? data : data & 0x7F\);) 231.5313 Tj
+0 -265.8141 Td
+(6225     shift &= ~\(shiftcode[data] | E0ESC\);) 196.5831 Tj
+0 -275.3075 Td
+(6226     return 0;) 78.6333 Tj
+0 -284.8008 Td
+(6227   } else if\(shift & E0ESC\){) 139.7925 Tj
+0 -294.2942 Td
+(6228     // Last character was an E0 escape; or with 0x80) 249.0053 Tj
+0 -303.7875 Td
+(6229     data |= 0x80;) 96.1073 Tj
+0 -313.2809 Td
+(6230     shift &= ~E0ESC;) 109.2129 Tj
+0 -322.7743 Td
+(6231   }) 34.9481 Tj
+0 -332.2676 Td
+(6232 ) 21.8426 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
+(6233   shift |= shiftcode[data];) 139.7925 Tj
+0 -351.2543 Td
+(6234   shift ^= togglecode[data];) 144.161 Tj
+0 -360.7477 Td
+(6235   c = charcode[shift & \(CTL | SHIFT\)][data];) 214.0572 Tj
+0 -370.2411 Td
+(6236   if\(shift & CAPSLOCK\){) 122.3184 Tj
+0 -379.7344 Td
+(6237     if\('a' <= c && c <= 'z'\)) 144.161 Tj
+0 -389.2278 Td
+(6238       c += 'A' - 'a';) 113.5814 Tj
+0 -398.7211 Td
+(6239     else if\('A' <= c && c <= 'Z'\)) 166.0035 Tj
+0 -408.2145 Td
+(6240       c += 'a' - 'A';) 113.5814 Tj
+0 -417.7079 Td
+(6241   }) 34.9481 Tj
+0 -427.2012 Td
+(6242   return c;) 69.8962 Tj
+0 -436.6946 Td
+(6243 }) 26.2111 Tj
+0 -446.1879 Td
 (6244 ) 21.8426 Tj
-0 -455.681 Td
-(6245 ) 21.8426 Tj
-0 -465.175 Td
-(6246 ) 21.8426 Tj
+0 -455.6813 Td
+(6245 void) 39.3166 Tj
+0 -465.1747 Td
+(6246 kbd_intr\(void\)) 83.0018 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
+(6247 {) 26.2111 Tj
+0 -484.1614 Td
+(6248   console_intr\(kbd_getc\);) 131.0554 Tj
+0 -493.6547 Td
+(6249 }) 26.2111 Tj
+0 -522.1348 Td
 (Sheet 62) 34.9481 Tj
 Q
 Q
@@ -20651,112 +20634,113 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/console.c  Page 2) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/console.c  Page 1) 174.7406 Tj
 0 -28.4801 Td
-(6250 static void) 69.8962 Tj
+(6250 // Console input and output.) 144.161 Tj
 0 -37.9735 Td
-(6251 cga_putc\(int c\)) 87.3703 Tj
+(6251 // Input is from the keyboard only.) 174.7406 Tj
 0 -47.4668 Td
-(6252 {) 26.2111 Tj
+(6252 // Output is written to the screen and the printer port.) 266.4794 Tj
 0 -56.9602 Td
-(6253   int pos;) 65.5277 Tj
+(6253 ) 21.8426 Tj
 0 -66.4535 Td
-(6254 ) 21.8426 Tj
+(6254 #include "types.h") 100.4758 Tj
 0 -75.9469 Td
-(6255   // Cursor position: col + 80*row.) 174.741 Tj
+(6255 #include "defs.h") 96.1073 Tj
 0 -85.4403 Td
-(6256   outb\(CRTPORT, 14\);) 109.213 Tj
+(6256 #include "param.h") 100.4758 Tj
 0 -94.9336 Td
-(6257   pos = inb\(CRTPORT+1\) << 8;) 144.161 Tj
+(6257 #include "traps.h") 100.4758 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
+(6258 #include "spinlock.h") 113.5814 Tj
+0 -113.9203 Td
+(6259 #include "dev.h") 91.7388 Tj
+0 -123.4137 Td
+(6260 #include "mmu.h") 91.7388 Tj
+0 -132.9071 Td
+(6261 #include "proc.h") 96.1073 Tj
+0 -142.4004 Td
+(6262 #include "x86.h") 91.7388 Tj
+0 -151.8938 Td
+(6263 ) 21.8426 Tj
+0 -161.3871 Td
+(6264 #define CRTPORT 0x3d4) 113.5814 Tj
+0 -170.8805 Td
+(6265 #define LPTPORT 0x378) 113.5814 Tj
+0 -180.3739 Td
+(6266 #define BACKSPACE 0x100) 122.3184 Tj
+0 -189.8672 Td
+(6267 ) 21.8426 Tj
+0 -199.3606 Td
+(6268 static ushort *crt = \(ushort*\)0xb8000;  // CGA memory) 253.3738 Tj
+0 -208.8539 Td
+(6269 ) 21.8426 Tj
+0 -218.3473 Td
+(6270 static struct spinlock console_lock;) 179.1091 Tj
+0 -227.8407 Td
+(6271 int panicked = 0;) 96.1073 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
+(6272 int use_console_lock = 0;) 131.0554 Tj
+0 -246.8274 Td
+(6273 ) 21.8426 Tj
+0 -256.3207 Td
+(6274 // Copy console output to parallel port, which you can tel\
+l) 279.5849 Tj
+0 -265.8141 Td
+(6275 // .bochsrc to copy to the stdout:) 170.3721 Tj
+0 -275.3075 Td
+(6276 //   parport1: enabled=1, file="/dev/stdout") 214.0572 Tj
+0 -284.8008 Td
+(6277 static void) 69.8962 Tj
+0 -294.2942 Td
+(6278 lpt_putc\(int c\)) 87.3703 Tj
+0 -303.7875 Td
+(6279 {) 26.2111 Tj
+0 -313.2809 Td
+(6280   int i;) 56.7907 Tj
+0 -322.7743 Td
 (6281 ) 21.8426 Tj
-0 -332.268 Td
-(6282 static void) 69.8962 Tj
+0 -332.2676 Td
+(6282   for\(i = 0; !\(inb\(LPTPORT+1\) & 0x80\) && i < 12800; i\
+++\)) 266.4794 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
+(6283     ;) 43.6851 Tj
+0 -351.2543 Td
+(6284   if\(c == BACKSPACE\)) 109.2129 Tj
+0 -360.7477 Td
+(6285     c = '\\b';) 78.6333 Tj
+0 -370.2411 Td
+(6286   outb\(LPTPORT+0, c\);) 113.5814 Tj
+0 -379.7344 Td
+(6287   outb\(LPTPORT+2, 0x08|0x04|0x01\);) 170.3721 Tj
+0 -389.2278 Td
+(6288   outb\(LPTPORT+2, 0x08\);) 126.6869 Tj
+0 -398.7211 Td
+(6289 }) 26.2111 Tj
+0 -408.2145 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
+0 -417.7079 Td
+(6291 ) 21.8426 Tj
+0 -427.2012 Td
+(6292 ) 21.8426 Tj
+0 -436.6946 Td
+(6293 ) 21.8426 Tj
+0 -446.1879 Td
 (6294 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (6295 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (6296 ) 21.8426 Tj
 0 -474.668 Td
 (6297 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (6298 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (6299 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 62) 34.9481 Tj
 Q
 Q
@@ -20785,8 +20769,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -20801,111 +20784,112 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/console.c  Page 3) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/console.c  Page 2) 174.7406 Tj
 0 -28.4801 Td
-(6300 void) 39.3166 Tj
+(6300 static void) 69.8962 Tj
 0 -37.9735 Td
-(6301 printint\(int xx, int base, int sgn\)) 174.741 Tj
+(6301 cga_putc\(int c\)) 87.3703 Tj
 0 -47.4668 Td
 (6302 {) 26.2111 Tj
 0 -56.9602 Td
-(6303   static char digits[] = "0123456789ABCDEF";) 214.057 Tj
+(6303   int pos;) 65.5277 Tj
 0 -66.4535 Td
-(6304   char buf[16];) 87.3703 Tj
+(6304 ) 21.8426 Tj
 0 -75.9469 Td
-(6305   int i = 0, neg = 0;) 113.581 Tj
+(6305   // Cursor position: col + 80*row.) 174.7406 Tj
 0 -85.4403 Td
-(6306   uint x;) 61.1592 Tj
+(6306   outb\(CRTPORT, 14\);) 109.2129 Tj
 0 -94.9336 Td
-(6307 ) 21.8426 Tj
+(6307   pos = inb\(CRTPORT+1\) << 8;) 144.161 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
+(6308   outb\(CRTPORT, 15\);) 109.2129 Tj
+0 -113.9203 Td
+(6309   pos |= inb\(CRTPORT+1\);) 126.6869 Tj
+0 -123.4137 Td
+(6310 ) 21.8426 Tj
+0 -132.9071 Td
+(6311   if\(c == '\\n'\)) 87.3703 Tj
+0 -142.4004 Td
+(6312     pos += 80 - pos%80;) 122.3184 Tj
+0 -151.8938 Td
+(6313   else if\(c == BACKSPACE\){) 135.4239 Tj
+0 -161.3871 Td
+(6314     if\(pos > 0\)) 87.3703 Tj
+0 -170.8805 Td
+(6315       crt[--pos] = ' ' | 0x0700;) 161.635 Tj
+0 -180.3739 Td
+(6316   } else) 56.7907 Tj
+0 -189.8672 Td
+(6317     crt[pos++] = \(c&0xff\) | 0x0700;  // black on white) 257.7424 Tj
+0 -199.3606 Td
+(6318 ) 21.8426 Tj
+0 -208.8539 Td
+(6319   if\(\(pos/80\) >= 24\){  // Scroll up.) 179.1091 Tj
+0 -218.3473 Td
+(6320     memmove\(crt, crt+80, sizeof\(crt[0]\)*23*80\);) 227.1628 Tj
+0 -227.8407 Td
+(6321     pos -= 80;) 83.0018 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
+(6322     memset\(crt+pos, 0, sizeof\(crt[0]\)*\(24*80 - pos\)\)\
+;) 253.3738 Tj
+0 -246.8274 Td
+(6323   }) 34.9481 Tj
+0 -256.3207 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 -265.8141 Td
+(6325   outb\(CRTPORT, 14\);) 109.2129 Tj
+0 -275.3075 Td
+(6326   outb\(CRTPORT+1, pos>>8\);) 135.4239 Tj
+0 -284.8008 Td
+(6327   outb\(CRTPORT, 15\);) 109.2129 Tj
+0 -294.2942 Td
+(6328   outb\(CRTPORT+1, pos\);) 122.3184 Tj
+0 -303.7875 Td
+(6329   crt[pos] = ' ' | 0x0700;) 135.4239 Tj
+0 -313.2809 Td
+(6330 }) 26.2111 Tj
+0 -322.7743 Td
+(6331 ) 21.8426 Tj
+0 -332.2676 Td
+(6332 void) 39.3166 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
+(6333 cons_putc\(int c\)) 91.7388 Tj
+0 -351.2543 Td
+(6334 {) 26.2111 Tj
+0 -360.7477 Td
+(6335   if\(panicked\){) 87.3703 Tj
+0 -370.2411 Td
+(6336     cli\(\);) 65.5277 Tj
+0 -379.7344 Td
+(6337     for\(;;\)) 69.8962 Tj
+0 -389.2278 Td
+(6338       ;) 52.4222 Tj
+0 -398.7211 Td
+(6339   }) 34.9481 Tj
+0 -408.2145 Td
+(6340 ) 21.8426 Tj
+0 -417.7079 Td
+(6341   lpt_putc\(c\);) 83.0018 Tj
+0 -427.2012 Td
+(6342   cga_putc\(c\);) 83.0018 Tj
+0 -436.6946 Td
+(6343 }) 26.2111 Tj
+0 -446.1879 Td
+(6344 ) 21.8426 Tj
+0 -455.6813 Td
+(6345 ) 21.8426 Tj
+0 -465.1747 Td
+(6346 ) 21.8426 Tj
 0 -474.668 Td
-(6347       break;) 74.2647 Tj
-0 -484.161 Td
+(6347 ) 21.8426 Tj
+0 -484.1614 Td
 (6348 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (6349 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 63) 34.9481 Tj
 Q
 Q
@@ -20920,111 +20904,111 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/console.c  Page 4) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/console.c  Page 3) 174.7406 Tj
 0 -28.4801 Td
-(6350     case '%':) 78.6333 Tj
+(6350 void) 39.3166 Tj
 0 -37.9735 Td
-(6351       switch\(c\){) 91.7388 Tj
+(6351 printint\(int xx, int base, int sgn\)) 174.7406 Tj
 0 -47.4668 Td
-(6352       case 'd':) 87.3703 Tj
+(6352 {) 26.2111 Tj
 0 -56.9602 Td
-(6353         printint\(*argp++, 10, 1\);) 166.004 Tj
+(6353   static char digits[] = "0123456789ABCDEF";) 214.0572 Tj
 0 -66.4535 Td
-(6354         break;) 83.0018 Tj
+(6354   char buf[16];) 87.3703 Tj
 0 -75.9469 Td
-(6355       case 'x':) 87.3703 Tj
+(6355   int i = 0, neg = 0;) 113.5814 Tj
 0 -85.4403 Td
-(6356       case 'p':) 87.3703 Tj
+(6356   uint x;) 61.1592 Tj
 0 -94.9336 Td
-(6357         printint\(*argp++, 16, 0\);) 166.004 Tj
+(6357 ) 21.8426 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
+(6358   if\(sgn && xx < 0\){) 109.2129 Tj
+0 -113.9203 Td
+(6359     neg = 1;) 74.2647 Tj
+0 -123.4137 Td
+(6360     x = 0 - xx;) 87.3703 Tj
+0 -132.9071 Td
+(6361   } else {) 65.5277 Tj
+0 -142.4004 Td
+(6362     x = xx;) 69.8962 Tj
+0 -151.8938 Td
+(6363   }) 34.9481 Tj
+0 -161.3871 Td
+(6364 ) 21.8426 Tj
+0 -170.8805 Td
+(6365   do{) 43.6851 Tj
+0 -180.3739 Td
+(6366     buf[i++] = digits[x % base];) 161.635 Tj
+0 -189.8672 Td
+(6367   }while\(\(x /= base\) != 0\);) 139.7925 Tj
+0 -199.3606 Td
+(6368   if\(neg\)) 61.1592 Tj
+0 -208.8539 Td
+(6369     buf[i++] = '-';) 104.8443 Tj
+0 -218.3473 Td
+(6370 ) 21.8426 Tj
+0 -227.8407 Td
+(6371   while\(--i >= 0\)) 96.1073 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
+(6372     cons_putc\(buf[i]\);) 117.9499 Tj
+0 -246.8274 Td
+(6373 }) 26.2111 Tj
+0 -256.3207 Td
+(6374 ) 21.8426 Tj
+0 -265.8141 Td
+(6375 // Print to the console. only understands %d, %x, %p, %s.) 270.8479 Tj
+0 -275.3075 Td
+(6376 void) 39.3166 Tj
+0 -284.8008 Td
+(6377 cprintf\(char *fmt, ...\)) 122.3184 Tj
+0 -294.2942 Td
+(6378 {) 26.2111 Tj
+0 -303.7875 Td
+(6379   int i, c, state, locking;) 139.7925 Tj
+0 -313.2809 Td
+(6380   uint *argp;) 78.6333 Tj
+0 -322.7743 Td
+(6381   char *s;) 65.5277 Tj
+0 -332.2676 Td
+(6382 ) 21.8426 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
+(6383   locking = use_console_lock;) 148.5295 Tj
+0 -351.2543 Td
+(6384   if\(locking\)) 78.6333 Tj
+0 -360.7477 Td
+(6385     acquire\(&console_lock\);) 139.7925 Tj
+0 -370.2411 Td
+(6386 ) 21.8426 Tj
+0 -379.7344 Td
+(6387   argp = \(uint*\)\(void*\)&fmt + 1;) 161.635 Tj
+0 -389.2278 Td
+(6388   state = 0;) 74.2647 Tj
+0 -398.7211 Td
+(6389   for\(i = 0; fmt[i]; i++\){) 135.4239 Tj
+0 -408.2145 Td
+(6390     c = fmt[i] & 0xff;) 117.9499 Tj
+0 -417.7079 Td
+(6391     switch\(state\){) 100.4758 Tj
+0 -427.2012 Td
+(6392     case 0:) 69.8962 Tj
+0 -436.6946 Td
+(6393       if\(c == '%'\)) 100.4758 Tj
+0 -446.1879 Td
+(6394         state = '%';) 109.2129 Tj
+0 -455.6813 Td
+(6395       else) 65.5277 Tj
+0 -465.1747 Td
+(6396         cons_putc\(c\);) 113.5814 Tj
 0 -474.668 Td
-(6397 }) 26.2111 Tj
-0 -484.161 Td
+(6397       break;) 74.2647 Tj
+0 -484.1614 Td
 (6398 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (6399 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 63) 34.9481 Tj
 Q
 Q
@@ -21053,8 +21037,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -21069,113 +21052,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/console.c  Page 5) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/console.c  Page 4) 174.7406 Tj
 0 -28.4801 Td
-(6400 #define INPUT_BUF 128) 113.581 Tj
+(6400     case '%':) 78.6333 Tj
 0 -37.9735 Td
-(6401 struct {) 56.7907 Tj
+(6401       switch\(c\){) 91.7388 Tj
 0 -47.4668 Td
-(6402   struct spinlock lock;) 122.318 Tj
+(6402       case 'd':) 87.3703 Tj
 0 -56.9602 Td
-(6403   char buf[INPUT_BUF];) 117.95 Tj
+(6403         printint\(*argp++, 10, 1\);) 166.0035 Tj
 0 -66.4535 Td
-(6404   int r;  // Read index) 122.318 Tj
+(6404         break;) 83.0018 Tj
 0 -75.9469 Td
-(6405   int w;  // Write index) 126.687 Tj
+(6405       case 'x':) 87.3703 Tj
 0 -85.4403 Td
-(6406   int e;  // Edit index) 122.318 Tj
+(6406       case 'p':) 87.3703 Tj
 0 -94.9336 Td
-(6407 } input;) 56.7907 Tj
+(6407         printint\(*argp++, 16, 0\);) 166.0035 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
+(6408         break;) 83.0018 Tj
+0 -113.9203 Td
+(6409       case 's':) 87.3703 Tj
+0 -123.4137 Td
+(6410         s = \(char*\)*argp++;) 139.7925 Tj
+0 -132.9071 Td
+(6411         if\(s == 0\)) 100.4758 Tj
+0 -142.4004 Td
+(6412           s = "\(null\)";) 122.3184 Tj
+0 -151.8938 Td
+(6413         for\(; *s; s++\)) 117.9499 Tj
+0 -161.3871 Td
+(6414           cons_putc\(*s\);) 126.6869 Tj
+0 -170.8805 Td
+(6415         break;) 83.0018 Tj
+0 -180.3739 Td
+(6416       case '%':) 87.3703 Tj
+0 -189.8672 Td
+(6417         cons_putc\('%'\);) 122.3184 Tj
+0 -199.3606 Td
+(6418         break;) 83.0018 Tj
+0 -208.8539 Td
+(6419       default:) 83.0018 Tj
+0 -218.3473 Td
+(6420         // Print unknown % sequence to draw attention.) 257.7424 Tj
+0 -227.8407 Td
+(6421         cons_putc\('%'\);) 122.3184 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
+(6422         cons_putc\(c\);) 113.5814 Tj
+0 -246.8274 Td
+(6423         break;) 83.0018 Tj
+0 -256.3207 Td
+(6424       }) 52.4222 Tj
+0 -265.8141 Td
+(6425       state = 0;) 91.7388 Tj
+0 -275.3075 Td
+(6426       break;) 74.2647 Tj
+0 -284.8008 Td
+(6427     }) 43.6851 Tj
+0 -294.2942 Td
+(6428   }) 34.9481 Tj
+0 -303.7875 Td
+(6429 ) 21.8426 Tj
+0 -313.2809 Td
+(6430   if\(locking\)) 78.6333 Tj
+0 -322.7743 Td
+(6431     release\(&console_lock\);) 139.7925 Tj
+0 -332.2676 Td
+(6432 }) 26.2111 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
+(6433 ) 21.8426 Tj
+0 -351.2543 Td
+(6434 int) 34.9481 Tj
+0 -360.7477 Td
+(6435 console_write\(struct inode *ip, char *buf, int n\)) 235.8998 Tj
+0 -370.2411 Td
+(6436 {) 26.2111 Tj
+0 -379.7344 Td
+(6437   int i;) 56.7907 Tj
+0 -389.2278 Td
+(6438 ) 21.8426 Tj
+0 -398.7211 Td
+(6439   iunlock\(ip\);) 83.0018 Tj
+0 -408.2145 Td
+(6440   acquire\(&console_lock\);) 131.0554 Tj
+0 -417.7079 Td
+(6441   for\(i = 0; i < n; i++\)) 126.6869 Tj
+0 -427.2012 Td
+(6442     cons_putc\(buf[i] & 0xff\);) 148.5295 Tj
+0 -436.6946 Td
+(6443   release\(&console_lock\);) 131.0554 Tj
+0 -446.1879 Td
+(6444   ilock\(ip\);) 74.2647 Tj
+0 -455.6813 Td
+(6445 ) 21.8426 Tj
+0 -465.1747 Td
+(6446   return n;) 69.8962 Tj
 0 -474.668 Td
-(6447   release\(&input.lock\);) 122.318 Tj
-0 -484.161 Td
-(6448 }) 26.2111 Tj
-0 -493.655 Td
+(6447 }) 26.2111 Tj
+0 -484.1614 Td
+(6448 ) 21.8426 Tj
+0 -493.6547 Td
 (6449 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 64) 34.9481 Tj
 Q
 Q
@@ -21190,111 +21171,113 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/console.c  Page 6) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/console.c  Page 5) 174.7406 Tj
 0 -28.4801 Td
-(6450 int) 34.9481 Tj
+(6450 #define INPUT_BUF 128) 113.5814 Tj
 0 -37.9735 Td
-(6451 console_read\(struct inode *ip, char *dst, int n\)) 231.531 Tj
+(6451 struct {) 56.7907 Tj
 0 -47.4668 Td
-(6452 {) 26.2111 Tj
+(6452   struct spinlock lock;) 122.3184 Tj
 0 -56.9602 Td
-(6453   uint target;) 83.0018 Tj
+(6453   char buf[INPUT_BUF];) 117.9499 Tj
 0 -66.4535 Td
-(6454   int c;) 56.7907 Tj
+(6454   uint r;  // Read index) 126.6869 Tj
 0 -75.9469 Td
-(6455 ) 21.8426 Tj
+(6455   uint w;  // Write index) 131.0554 Tj
 0 -85.4403 Td
-(6456   iunlock\(ip\);) 83.0018 Tj
+(6456   uint e;  // Edit index) 126.6869 Tj
 0 -94.9336 Td
-(6457   target = n;) 78.6333 Tj
+(6457 } input;) 56.7907 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
+(6458 ) 21.8426 Tj
+0 -113.9203 Td
+(6459 #define C\(x\)  \(\(x\)-'@'\)  // Control-x) 183.4776 Tj
+0 -123.4137 Td
+(6460 ) 21.8426 Tj
+0 -132.9071 Td
+(6461 void) 39.3166 Tj
+0 -142.4004 Td
+(6462 console_intr\(int \(*getc\)\(void\)\)) 157.2665 Tj
+0 -151.8938 Td
+(6463 {) 26.2111 Tj
+0 -161.3871 Td
+(6464   int c;) 56.7907 Tj
+0 -170.8805 Td
+(6465 ) 21.8426 Tj
+0 -180.3739 Td
+(6466   acquire\(&input.lock\);) 122.3184 Tj
+0 -189.8672 Td
+(6467   while\(\(c = getc\(\)\) >= 0\){) 139.7925 Tj
+0 -199.3606 Td
+(6468     switch\(c\){) 83.0018 Tj
+0 -208.8539 Td
+(6469     case C\('P'\):  // Process listing.) 183.4776 Tj
+0 -218.3473 Td
+(6470       procdump\(\);) 96.1073 Tj
+0 -227.8407 Td
+(6471       break;) 74.2647 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
+(6472     case C\('U'\):  // Kill line.) 157.2665 Tj
+0 -246.8274 Td
+(6473       while\(input.e != input.w &&) 166.0035 Tj
+0 -256.3207 Td
+(6474             input.buf[\(input.e-1\) % INPUT_BUF] != '\\n'\)\
+{) 266.4794 Tj
+0 -265.8141 Td
+(6475         input.e--;) 100.4758 Tj
+0 -275.3075 Td
+(6476         cons_putc\(BACKSPACE\);) 148.5295 Tj
+0 -284.8008 Td
+(6477       }) 52.4222 Tj
+0 -294.2942 Td
+(6478       break;) 74.2647 Tj
+0 -303.7875 Td
+(6479     case C\('H'\):  // Backspace) 152.898 Tj
+0 -313.2809 Td
+(6480       if\(input.e != input.w\){) 148.5295 Tj
+0 -322.7743 Td
+(6481         input.e--;) 100.4758 Tj
+0 -332.2676 Td
+(6482         cons_putc\(BACKSPACE\);) 148.5295 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
+(6483       }) 52.4222 Tj
+0 -351.2543 Td
+(6484       break;) 74.2647 Tj
+0 -360.7477 Td
+(6485     default:) 74.2647 Tj
+0 -370.2411 Td
+(6486       if\(c != 0 && input.e-input.r < INPUT_BUF\){) 231.5313 Tj
+0 -379.7344 Td
+(6487         input.buf[input.e++ % INPUT_BUF] = c;) 218.4257 Tj
+0 -389.2278 Td
+(6488         cons_putc\(c\);) 113.5814 Tj
+0 -398.7211 Td
+(6489         if\(c == '\\n' || c == C\('D'\) || input.e == inpu\
+t.r+INPUT_BUF\){) 323.2701 Tj
+0 -408.2145 Td
+(6490           input.w = input.e;) 144.161 Tj
+0 -417.7079 Td
+(6491           wakeup\(&input.r\);) 139.7925 Tj
+0 -427.2012 Td
+(6492         }) 61.1592 Tj
+0 -436.6946 Td
+(6493       }) 52.4222 Tj
+0 -446.1879 Td
+(6494       break;) 74.2647 Tj
+0 -455.6813 Td
+(6495     }) 43.6851 Tj
+0 -465.1747 Td
+(6496   }) 34.9481 Tj
 0 -474.668 Td
-(6497 ) 21.8426 Tj
-0 -484.161 Td
-(6498 ) 21.8426 Tj
-0 -493.655 Td
+(6497   release\(&input.lock\);) 122.3184 Tj
+0 -484.1614 Td
+(6498 }) 26.2111 Tj
+0 -493.6547 Td
 (6499 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 64) 34.9481 Tj
 Q
 Q
@@ -21323,8 +21306,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -21339,111 +21321,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/console.c  Page 7) 174.741 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/console.c  Page 6) 174.7406 Tj
 0 -28.4801 Td
-(6500 void) 39.3166 Tj
+(6500 int) 34.9481 Tj
 0 -37.9735 Td
-(6501 console_init\(void\)) 100.476 Tj
+(6501 console_read\(struct inode *ip, char *dst, int n\)) 231.5313 Tj
 0 -47.4668 Td
 (6502 {) 26.2111 Tj
 0 -56.9602 Td
-(6503   initlock\(&console_lock, "console"\);) 183.478 Tj
+(6503   uint target;) 83.0018 Tj
 0 -66.4535 Td
-(6504   initlock\(&input.lock, "console input"\);) 200.952 Tj
+(6504   int c;) 56.7907 Tj
 0 -75.9469 Td
 (6505 ) 21.8426 Tj
 0 -85.4403 Td
-(6506   devsw[CONSOLE].write = console_write;) 192.215 Tj
+(6506   iunlock\(ip\);) 83.0018 Tj
 0 -94.9336 Td
-(6507   devsw[CONSOLE].read = console_read;) 183.478 Tj
+(6507   target = n;) 78.6333 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
+(6508   acquire\(&input.lock\);) 122.3184 Tj
+0 -113.9203 Td
+(6509   while\(n > 0\){) 87.3703 Tj
+0 -123.4137 Td
+(6510     while\(input.r == input.w\){) 152.898 Tj
+0 -132.9071 Td
+(6511       if\(cp->killed\){) 113.5814 Tj
+0 -142.4004 Td
+(6512         release\(&input.lock\);) 148.5295 Tj
+0 -151.8938 Td
+(6513         ilock\(ip\);) 100.4758 Tj
+0 -161.3871 Td
+(6514         return -1;) 100.4758 Tj
+0 -170.8805 Td
+(6515       }) 52.4222 Tj
+0 -180.3739 Td
+(6516       sleep\(&input.r, &input.lock\);) 174.7406 Tj
+0 -189.8672 Td
+(6517     }) 43.6851 Tj
+0 -199.3606 Td
+(6518     c = input.buf[input.r++ % INPUT_BUF];) 200.9517 Tj
+0 -208.8539 Td
+(6519     if\(c == C\('D'\)\){  // EOF) 144.161 Tj
+0 -218.3473 Td
+(6520       if\(n < target\){) 113.5814 Tj
+0 -227.8407 Td
+(6521         // Save ^D for next time, to make sure) 222.7942 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
+(6522         // caller gets a 0-byte result.) 192.2146 Tj
+0 -246.8274 Td
+(6523         input.r--;) 100.4758 Tj
+0 -256.3207 Td
+(6524       }) 52.4222 Tj
+0 -265.8141 Td
+(6525       break;) 74.2647 Tj
+0 -275.3075 Td
+(6526     }) 43.6851 Tj
+0 -284.8008 Td
+(6527     *dst++ = c;) 87.3703 Tj
+0 -294.2942 Td
+(6528     --n;) 56.7907 Tj
+0 -303.7875 Td
+(6529     if\(c == '\\n'\)) 96.1073 Tj
+0 -313.2809 Td
+(6530       break;) 74.2647 Tj
+0 -322.7743 Td
+(6531   }) 34.9481 Tj
+0 -332.2676 Td
+(6532   release\(&input.lock\);) 122.3184 Tj
 0 -341.761 Td
-(6533 ) 21.8426 Tj
-0 -351.254 Td
+(6533   ilock\(ip\);) 74.2647 Tj
+0 -351.2543 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
+0 -360.7477 Td
+(6535   return target - n;) 109.2129 Tj
+0 -370.2411 Td
+(6536 }) 26.2111 Tj
+0 -379.7344 Td
 (6537 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (6538 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (6539 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (6540 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (6541 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (6542 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (6543 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (6544 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (6545 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (6546 ) 21.8426 Tj
 0 -474.668 Td
 (6547 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (6548 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (6549 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 65) 34.9481 Tj
 Q
 Q
@@ -21458,115 +21440,111 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/timer.c  Page 1) 166.004 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/console.c  Page 7) 174.7406 Tj
 0 -28.4801 Td
-(6550 // Intel 8253/8254/82C54 Programmable Interval Timer \(PIT\
-\).) 279.585 Tj
+(6550 void) 39.3166 Tj
 0 -37.9735 Td
-(6551 // Only used on uniprocessors;) 152.898 Tj
+(6551 console_init\(void\)) 100.4758 Tj
 0 -47.4668 Td
-(6552 // SMP machines use the local APIC timer.) 200.952 Tj
+(6552 {) 26.2111 Tj
 0 -56.9602 Td
-(6553 ) 21.8426 Tj
+(6553   initlock\(&console_lock, "console"\);) 183.4776 Tj
 0 -66.4535 Td
-(6554 #include "types.h") 100.476 Tj
+(6554   initlock\(&input.lock, "console input"\);) 200.9517 Tj
 0 -75.9469 Td
-(6555 #include "defs.h") 96.1073 Tj
+(6555 ) 21.8426 Tj
 0 -85.4403 Td
-(6556 #include "traps.h") 100.476 Tj
+(6556   devsw[CONSOLE].write = console_write;) 192.2146 Tj
 0 -94.9336 Td
-(6557 #include "x86.h") 91.7388 Tj
+(6557   devsw[CONSOLE].read = console_read;) 183.4776 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
+(6558   use_console_lock = 1;) 122.3184 Tj
+0 -113.9203 Td
+(6559 ) 21.8426 Tj
+0 -123.4137 Td
+(6560   pic_enable\(IRQ_KBD\);) 117.9499 Tj
+0 -132.9071 Td
+(6561   ioapic_enable\(IRQ_KBD, 0\);) 144.161 Tj
+0 -142.4004 Td
+(6562 }) 26.2111 Tj
+0 -151.8938 Td
+(6563 ) 21.8426 Tj
+0 -161.3871 Td
+(6564 void) 39.3166 Tj
+0 -170.8805 Td
+(6565 panic\(char *s\)) 83.0018 Tj
+0 -180.3739 Td
+(6566 {) 26.2111 Tj
+0 -189.8672 Td
+(6567   int i;) 56.7907 Tj
+0 -199.3606 Td
+(6568   uint pcs[10];) 87.3703 Tj
+0 -208.8539 Td
+(6569 ) 21.8426 Tj
+0 -218.3473 Td
+(6570   __asm __volatile\("cli"\);) 135.4239 Tj
+0 -227.8407 Td
+(6571   use_console_lock = 0;) 122.3184 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
+(6572   cprintf\("cpu%d: panic: ", cpu\(\)\);) 174.7406 Tj
+0 -246.8274 Td
+(6573   cprintf\(s\);) 78.6333 Tj
+0 -256.3207 Td
+(6574   cprintf\("\\n"\);) 91.7388 Tj
+0 -265.8141 Td
+(6575   getcallerpcs\(&s, pcs\);) 126.6869 Tj
+0 -275.3075 Td
+(6576   for\(i=0; i<10; i++\)) 113.5814 Tj
+0 -284.8008 Td
+(6577     cprintf\(" %p", pcs[i]\);) 139.7925 Tj
+0 -294.2942 Td
+(6578   panicked = 1; // freeze other CPU) 174.7406 Tj
+0 -303.7875 Td
+(6579   for\(;;\)) 61.1592 Tj
+0 -313.2809 Td
+(6580     ;) 43.6851 Tj
+0 -322.7743 Td
 (6581 }) 26.2111 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (6582 ) 21.8426 Tj
 0 -341.761 Td
 (6583 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (6584 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (6585 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (6586 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (6587 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (6588 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (6589 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (6590 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (6591 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (6592 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (6593 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (6594 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (6595 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (6596 ) 21.8426 Tj
 0 -474.668 Td
 (6597 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (6598 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (6599 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 65) 34.9481 Tj
 Q
 Q
@@ -21595,8 +21573,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -21611,111 +21588,115 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/initcode.S  Page 1) 179.109 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/timer.c  Page 1) 166.0035 Tj
 0 -28.4801 Td
-(6600 # Initial process execs /init.) 152.898 Tj
+(6600 // Intel 8253/8254/82C54 Programmable Interval Timer \(PIT\
+\).) 279.5849 Tj
 0 -37.9735 Td
-(6601 ) 21.8426 Tj
+(6601 // Only used on uniprocessors;) 152.898 Tj
 0 -47.4668 Td
-(6602 #include "syscall.h") 109.213 Tj
+(6602 // SMP machines use the local APIC timer.) 200.9517 Tj
 0 -56.9602 Td
-(6603 #include "traps.h") 100.476 Tj
+(6603 ) 21.8426 Tj
 0 -66.4535 Td
-(6604 ) 21.8426 Tj
+(6604 #include "types.h") 100.4758 Tj
 0 -75.9469 Td
-(6605 # exec\(init, argv\)) 100.476 Tj
+(6605 #include "defs.h") 96.1073 Tj
 0 -85.4403 Td
-(6606 .globl start) 74.2647 Tj
+(6606 #include "traps.h") 100.4758 Tj
 0 -94.9336 Td
-(6607 start:) 48.0537 Tj
+(6607 #include "x86.h") 91.7388 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
+(6608 ) 21.8426 Tj
+0 -113.9203 Td
+(6609 #define IO_TIMER1       0x040           // 8253 Timer #1) 266.4794 Tj
+0 -123.4137 Td
+(6610 ) 21.8426 Tj
+0 -132.9071 Td
+(6611 // Frequency of all three count-down timers;) 214.0572 Tj
+0 -142.4004 Td
+(6612 // \(TIMER_FREQ/freq\) is the appropriate count) 218.4257 Tj
+0 -151.8938 Td
+(6613 // to generate a frequency of freq Hz.) 187.8461 Tj
+0 -161.3871 Td
+(6614 ) 21.8426 Tj
+0 -170.8805 Td
+(6615 #define TIMER_FREQ      1193182) 157.2665 Tj
+0 -180.3739 Td
+(6616 #define TIMER_DIV\(x\)    \(\(TIMER_FREQ+\(x\)/2\)/\(x\)\)) 231.5313 Tj
+0 -189.8672 Td
+(6617 ) 21.8426 Tj
+0 -199.3606 Td
+(6618 #define TIMER_MODE      \(IO_TIMER1 + 3\) // timer mode po\
+rt) 275.2164 Tj
+0 -208.8539 Td
+(6619 #define TIMER_SEL0      0x00    // select counter 0) 244.6368 Tj
+0 -218.3473 Td
+(6620 #define TIMER_RATEGEN   0x04    // mode 2, rate generator) 270.8479 Tj
+0 -227.8407 Td
+(6621 #define TIMER_16BIT     0x30    // r/w counter 16 bits, LS\
+B first) 305.796 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
+(6622 ) 21.8426 Tj
+0 -246.8274 Td
+(6623 void) 39.3166 Tj
+0 -256.3207 Td
+(6624 timer_init\(void\)) 91.7388 Tj
+0 -265.8141 Td
+(6625 {) 26.2111 Tj
+0 -275.3075 Td
+(6626   // Interrupt 100 times/sec.) 148.5295 Tj
+0 -284.8008 Td
+(6627   outb\(TIMER_MODE, TIMER_SEL0 | TIMER_RATEGEN | TIMER_16B\
+IT\);) 288.322 Tj
+0 -294.2942 Td
+(6628   outb\(IO_TIMER1, TIMER_DIV\(100\) % 256\);) 196.5831 Tj
+0 -303.7875 Td
+(6629   outb\(IO_TIMER1, TIMER_DIV\(100\) / 256\);) 196.5831 Tj
+0 -313.2809 Td
+(6630   pic_enable\(IRQ_TIMER\);) 126.6869 Tj
+0 -322.7743 Td
+(6631 }) 26.2111 Tj
+0 -332.2676 Td
 (6632 ) 21.8426 Tj
 0 -341.761 Td
 (6633 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (6634 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (6635 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (6636 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (6637 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (6638 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (6639 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (6640 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (6641 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (6642 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (6643 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (6644 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (6645 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (6646 ) 21.8426 Tj
 0 -474.668 Td
 (6647 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (6648 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (6649 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 66) 34.9481 Tj
 Q
 Q
@@ -21730,111 +21711,111 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/init.c  Page 1) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/timer.c  Page 2) 166.0035 Tj
 0 -28.4801 Td
-(6650 // init: The initial user-level program) 192.215 Tj
+(6650 // Blank page) 78.6333 Tj
 0 -37.9735 Td
 (6651 ) 21.8426 Tj
 0 -47.4668 Td
-(6652 #include "types.h") 100.476 Tj
+(6652 ) 21.8426 Tj
 0 -56.9602 Td
-(6653 #include "stat.h") 96.1073 Tj
+(6653 ) 21.8426 Tj
 0 -66.4535 Td
-(6654 #include "user.h") 96.1073 Tj
+(6654 ) 21.8426 Tj
 0 -75.9469 Td
-(6655 #include "fcntl.h") 100.476 Tj
+(6655 ) 21.8426 Tj
 0 -85.4403 Td
 (6656 ) 21.8426 Tj
 0 -94.9336 Td
-(6657 char *sh_args[] = { "sh", 0 };) 152.898 Tj
+(6657 ) 21.8426 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
+0 -113.9203 Td
+(6659 ) 21.8426 Tj
+0 -123.4137 Td
+(6660 ) 21.8426 Tj
+0 -132.9071 Td
+(6661 ) 21.8426 Tj
+0 -142.4004 Td
+(6662 ) 21.8426 Tj
+0 -151.8938 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
+0 -161.3871 Td
+(6664 ) 21.8426 Tj
+0 -170.8805 Td
+(6665 ) 21.8426 Tj
+0 -180.3739 Td
+(6666 ) 21.8426 Tj
+0 -189.8672 Td
+(6667 ) 21.8426 Tj
+0 -199.3606 Td
+(6668 ) 21.8426 Tj
+0 -208.8539 Td
+(6669 ) 21.8426 Tj
+0 -218.3473 Td
 (6670 ) 21.8426 Tj
-0 -227.841 Td
-(6671   for\(;;\){) 65.5277 Tj
+0 -227.8407 Td
+(6671 ) 21.8426 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
+(6672 ) 21.8426 Tj
+0 -246.8274 Td
+(6673 ) 21.8426 Tj
+0 -256.3207 Td
+(6674 ) 21.8426 Tj
+0 -265.8141 Td
+(6675 ) 21.8426 Tj
+0 -275.3075 Td
+(6676 ) 21.8426 Tj
+0 -284.8008 Td
+(6677 ) 21.8426 Tj
+0 -294.2942 Td
+(6678 ) 21.8426 Tj
+0 -303.7875 Td
+(6679 ) 21.8426 Tj
+0 -313.2809 Td
+(6680 ) 21.8426 Tj
+0 -322.7743 Td
+(6681 ) 21.8426 Tj
+0 -332.2676 Td
+(6682 ) 21.8426 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
+(6683 ) 21.8426 Tj
+0 -351.2543 Td
+(6684 ) 21.8426 Tj
+0 -360.7477 Td
+(6685 ) 21.8426 Tj
+0 -370.2411 Td
+(6686 ) 21.8426 Tj
+0 -379.7344 Td
 (6687 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (6688 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (6689 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (6690 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (6691 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (6692 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (6693 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (6694 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (6695 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (6696 ) 21.8426 Tj
 0 -474.668 Td
 (6697 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (6698 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (6699 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 66) 34.9481 Tj
 Q
 Q
@@ -21863,8 +21844,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -21879,111 +21859,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/usys.S  Page 1) 161.635 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/initcode.S  Page 1) 179.1091 Tj
 0 -28.4801 Td
-(6700 #include "syscall.h") 109.213 Tj
+(6700 # Initial process execs /init.) 152.898 Tj
 0 -37.9735 Td
-(6701 #include "traps.h") 100.476 Tj
+(6701 ) 21.8426 Tj
 0 -47.4668 Td
-(6702 ) 21.8426 Tj
+(6702 #include "syscall.h") 109.2129 Tj
 0 -56.9602 Td
-(6703 #define STUB\(name\) \\) 109.213 Tj
+(6703 #include "traps.h") 100.4758 Tj
 0 -66.4535 Td
-(6704   .globl name; \\) 91.7388 Tj
+(6704 ) 21.8426 Tj
 0 -75.9469 Td
-(6705   name: \\) 61.1592 Tj
+(6705 # exec\(init, argv\)) 100.4758 Tj
 0 -85.4403 Td
-(6706     movl $SYS_ ## name, %eax; \\) 157.267 Tj
+(6706 .globl start) 74.2647 Tj
 0 -94.9336 Td
-(6707     int $T_SYSCALL; \\) 113.581 Tj
+(6707 start:) 48.0537 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
+(6708   pushl $argv) 78.6333 Tj
+0 -113.9203 Td
+(6709   pushl $init) 78.6333 Tj
+0 -123.4137 Td
+(6710   pushl $0) 65.5277 Tj
+0 -132.9071 Td
+(6711   movl $SYS_exec, %eax) 117.9499 Tj
+0 -142.4004 Td
+(6712   int $T_SYSCALL) 91.7388 Tj
+0 -151.8938 Td
+(6713 ) 21.8426 Tj
+0 -161.3871 Td
+(6714 # for\(;;\) exit\(\);) 96.1073 Tj
+0 -170.8805 Td
+(6715 exit:) 43.6851 Tj
+0 -180.3739 Td
+(6716   movl $SYS_exit, %eax) 117.9499 Tj
+0 -189.8672 Td
+(6717   int $T_SYSCALL) 91.7388 Tj
+0 -199.3606 Td
+(6718   jmp exit) 65.5277 Tj
+0 -208.8539 Td
+(6719 ) 21.8426 Tj
+0 -218.3473 Td
+(6720 # char init[] = "/init\\0";) 135.4239 Tj
+0 -227.8407 Td
+(6721 init:) 43.6851 Tj
 0 -237.334 Td
-(6722 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
+(6722   .string "/init\\0") 104.8443 Tj
+0 -246.8274 Td
+(6723 ) 21.8426 Tj
+0 -256.3207 Td
+(6724 # char *argv[] = { init, 0 };) 148.5295 Tj
+0 -265.8141 Td
+(6725 .p2align 2) 65.5277 Tj
+0 -275.3075 Td
+(6726 argv:) 43.6851 Tj
+0 -284.8008 Td
+(6727   .long init) 74.2647 Tj
+0 -294.2942 Td
+(6728   .long 0) 61.1592 Tj
+0 -303.7875 Td
+(6729 ) 21.8426 Tj
+0 -313.2809 Td
 (6730 ) 21.8426 Tj
-0 -322.774 Td
+0 -322.7743 Td
 (6731 ) 21.8426 Tj
-0 -332.268 Td
+0 -332.2676 Td
 (6732 ) 21.8426 Tj
 0 -341.761 Td
 (6733 ) 21.8426 Tj
-0 -351.254 Td
+0 -351.2543 Td
 (6734 ) 21.8426 Tj
-0 -360.748 Td
+0 -360.7477 Td
 (6735 ) 21.8426 Tj
-0 -370.241 Td
+0 -370.2411 Td
 (6736 ) 21.8426 Tj
-0 -379.734 Td
+0 -379.7344 Td
 (6737 ) 21.8426 Tj
-0 -389.228 Td
+0 -389.2278 Td
 (6738 ) 21.8426 Tj
-0 -398.721 Td
+0 -398.7211 Td
 (6739 ) 21.8426 Tj
-0 -408.214 Td
+0 -408.2145 Td
 (6740 ) 21.8426 Tj
-0 -417.708 Td
+0 -417.7079 Td
 (6741 ) 21.8426 Tj
-0 -427.201 Td
+0 -427.2012 Td
 (6742 ) 21.8426 Tj
-0 -436.695 Td
+0 -436.6946 Td
 (6743 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (6744 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (6745 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (6746 ) 21.8426 Tj
 0 -474.668 Td
 (6747 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (6748 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (6749 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 67) 34.9481 Tj
 Q
 Q
@@ -21998,111 +21978,111 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sh.c  Page 1) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/init.c  Page 1) 161.635 Tj
 0 -28.4801 Td
-(6750 // Shell.) 61.1592 Tj
+(6750 // init: The initial user-level program) 192.2146 Tj
 0 -37.9735 Td
 (6751 ) 21.8426 Tj
 0 -47.4668 Td
-(6752 #include "types.h") 100.476 Tj
+(6752 #include "types.h") 100.4758 Tj
 0 -56.9602 Td
-(6753 #include "user.h") 96.1073 Tj
+(6753 #include "stat.h") 96.1073 Tj
 0 -66.4535 Td
-(6754 #include "fcntl.h") 100.476 Tj
+(6754 #include "user.h") 96.1073 Tj
 0 -75.9469 Td
-(6755 ) 21.8426 Tj
+(6755 #include "fcntl.h") 100.4758 Tj
 0 -85.4403 Td
-(6756 // Parsed command representation) 161.635 Tj
+(6756 ) 21.8426 Tj
 0 -94.9336 Td
-(6757 #define EXEC  1) 87.3703 Tj
+(6757 char *sh_args[] = { "sh", 0 };) 152.898 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
+(6758 ) 21.8426 Tj
+0 -113.9203 Td
+(6759 int) 34.9481 Tj
+0 -123.4137 Td
+(6760 main\(void\)) 65.5277 Tj
+0 -132.9071 Td
+(6761 {) 26.2111 Tj
+0 -142.4004 Td
+(6762   int pid, wpid;) 91.7388 Tj
+0 -151.8938 Td
+(6763 ) 21.8426 Tj
+0 -161.3871 Td
+(6764   if\(open\("console", O_RDWR\) < 0\){) 170.3721 Tj
+0 -170.8805 Td
+(6765     mknod\("console", 1, 1\);) 139.7925 Tj
+0 -180.3739 Td
+(6766     open\("console", O_RDWR\);) 144.161 Tj
+0 -189.8672 Td
+(6767   }) 34.9481 Tj
+0 -199.3606 Td
+(6768   dup\(0\);  // stdout) 109.2129 Tj
+0 -208.8539 Td
+(6769   dup\(0\);  // stderr) 109.2129 Tj
+0 -218.3473 Td
+(6770 ) 21.8426 Tj
+0 -227.8407 Td
+(6771   for\(;;\){) 65.5277 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
+(6772     printf\(1, "init: starting sh\\n"\);) 183.4776 Tj
+0 -246.8274 Td
+(6773     pid = fork\(\);) 96.1073 Tj
+0 -256.3207 Td
+(6774     if\(pid < 0\){) 91.7388 Tj
+0 -265.8141 Td
+(6775       printf\(1, "init: fork failed\\n"\);) 192.2146 Tj
+0 -275.3075 Td
+(6776       exit\(\);) 78.6333 Tj
+0 -284.8008 Td
+(6777     }) 43.6851 Tj
+0 -294.2942 Td
+(6778     if\(pid == 0\){) 96.1073 Tj
+0 -303.7875 Td
+(6779       exec\("sh", sh_args\);) 135.4239 Tj
+0 -313.2809 Td
+(6780       printf\(1, "init: exec sh failed\\n"\);) 205.3202 Tj
+0 -322.7743 Td
+(6781       exit\(\);) 78.6333 Tj
+0 -332.2676 Td
+(6782     }) 43.6851 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
+(6783     while\(\(wpid=wait\(\)\) >= 0 && wpid != pid\)) 214.0572 Tj
+0 -351.2543 Td
+(6784       printf\(1, "zombie!\\n"\);) 148.5295 Tj
+0 -360.7477 Td
+(6785   }) 34.9481 Tj
+0 -370.2411 Td
+(6786 }) 26.2111 Tj
+0 -379.7344 Td
+(6787 ) 21.8426 Tj
+0 -389.2278 Td
+(6788 ) 21.8426 Tj
+0 -398.7211 Td
 (6789 ) 21.8426 Tj
-0 -408.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
+0 -408.2145 Td
+(6790 ) 21.8426 Tj
+0 -417.7079 Td
+(6791 ) 21.8426 Tj
+0 -427.2012 Td
+(6792 ) 21.8426 Tj
+0 -436.6946 Td
+(6793 ) 21.8426 Tj
+0 -446.1879 Td
+(6794 ) 21.8426 Tj
+0 -455.6813 Td
 (6795 ) 21.8426 Tj
-0 -465.175 Td
-(6796 struct backcmd {) 91.7388 Tj
+0 -465.1747 Td
+(6796 ) 21.8426 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
+(6797 ) 21.8426 Tj
+0 -484.1614 Td
+(6798 ) 21.8426 Tj
+0 -493.6547 Td
+(6799 ) 21.8426 Tj
+0 -522.1348 Td
 (Sheet 67) 34.9481 Tj
 Q
 Q
@@ -22131,8 +22111,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -22147,111 +22126,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sh.c  Page 2) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/usys.S  Page 1) 161.635 Tj
 0 -28.4801 Td
-(6800 int fork1\(void\);  // Fork but panics on failure.) 231.531 Tj
+(6800 #include "syscall.h") 109.2129 Tj
 0 -37.9735 Td
-(6801 void panic\(char*\);) 100.476 Tj
+(6801 #include "traps.h") 100.4758 Tj
 0 -47.4668 Td
-(6802 struct cmd *parsecmd\(char*\);) 144.161 Tj
+(6802 ) 21.8426 Tj
 0 -56.9602 Td
-(6803 ) 21.8426 Tj
+(6803 #define STUB\(name\) \\) 109.2129 Tj
 0 -66.4535 Td
-(6804 // Execute cmd.  Never returns.) 157.267 Tj
+(6804   .globl name; \\) 91.7388 Tj
 0 -75.9469 Td
-(6805 void) 39.3166 Tj
+(6805   name: \\) 61.1592 Tj
 0 -85.4403 Td
-(6806 runcmd\(struct cmd *cmd\)) 122.318 Tj
+(6806     movl $SYS_ ## name, %eax; \\) 157.2665 Tj
 0 -94.9336 Td
-(6807 {) 26.2111 Tj
+(6807     int $T_SYSCALL; \\) 113.5814 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
+(6808     ret) 52.4222 Tj
+0 -113.9203 Td
+(6809 ) 21.8426 Tj
+0 -123.4137 Td
+(6810 STUB\(fork\)) 65.5277 Tj
+0 -132.9071 Td
+(6811 STUB\(exit\)) 65.5277 Tj
+0 -142.4004 Td
+(6812 STUB\(wait\)) 65.5277 Tj
+0 -151.8938 Td
+(6813 STUB\(pipe\)) 65.5277 Tj
+0 -161.3871 Td
+(6814 STUB\(read\)) 65.5277 Tj
+0 -170.8805 Td
+(6815 STUB\(write\)) 69.8962 Tj
+0 -180.3739 Td
+(6816 STUB\(close\)) 69.8962 Tj
+0 -189.8672 Td
+(6817 STUB\(kill\)) 65.5277 Tj
+0 -199.3606 Td
+(6818 STUB\(exec\)) 65.5277 Tj
+0 -208.8539 Td
+(6819 STUB\(open\)) 65.5277 Tj
+0 -218.3473 Td
+(6820 STUB\(mknod\)) 69.8962 Tj
+0 -227.8407 Td
+(6821 STUB\(unlink\)) 74.2647 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
+(6822 STUB\(fstat\)) 69.8962 Tj
+0 -246.8274 Td
+(6823 STUB\(link\)) 65.5277 Tj
+0 -256.3207 Td
+(6824 STUB\(mkdir\)) 69.8962 Tj
+0 -265.8141 Td
+(6825 STUB\(chdir\)) 69.8962 Tj
+0 -275.3075 Td
+(6826 STUB\(dup\)) 61.1592 Tj
+0 -284.8008 Td
+(6827 STUB\(getpid\)) 74.2647 Tj
+0 -294.2942 Td
+(6828 STUB\(sbrk\)) 65.5277 Tj
+0 -303.7875 Td
+(6829 STUB\(sleep\)) 69.8962 Tj
+0 -313.2809 Td
+(6830 ) 21.8426 Tj
+0 -322.7743 Td
+(6831 ) 21.8426 Tj
+0 -332.2676 Td
+(6832 ) 21.8426 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
+(6833 ) 21.8426 Tj
+0 -351.2543 Td
+(6834 ) 21.8426 Tj
+0 -360.7477 Td
+(6835 ) 21.8426 Tj
+0 -370.2411 Td
+(6836 ) 21.8426 Tj
+0 -379.7344 Td
+(6837 ) 21.8426 Tj
+0 -389.2278 Td
+(6838 ) 21.8426 Tj
+0 -398.7211 Td
 (6839 ) 21.8426 Tj
-0 -408.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 -408.2145 Td
+(6840 ) 21.8426 Tj
+0 -417.7079 Td
+(6841 ) 21.8426 Tj
+0 -427.2012 Td
+(6842 ) 21.8426 Tj
+0 -436.6946 Td
+(6843 ) 21.8426 Tj
+0 -446.1879 Td
+(6844 ) 21.8426 Tj
+0 -455.6813 Td
+(6845 ) 21.8426 Tj
+0 -465.1747 Td
+(6846 ) 21.8426 Tj
 0 -474.668 Td
 (6847 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (6848 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (6849 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 68) 34.9481 Tj
 Q
 Q
@@ -22266,111 +22245,111 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sh.c  Page 3) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sh.c  Page 1) 152.898 Tj
 0 -28.4801 Td
-(6850   case PIPE:) 74.2647 Tj
+(6850 // Shell.) 61.1592 Tj
 0 -37.9735 Td
-(6851     pcmd = \(struct pipecmd*\)cmd;) 161.635 Tj
+(6851 ) 21.8426 Tj
 0 -47.4668 Td
-(6852     if\(pipe\(p\) < 0\)) 104.844 Tj
+(6852 #include "types.h") 100.4758 Tj
 0 -56.9602 Td
-(6853       panic\("pipe"\);) 109.213 Tj
+(6853 #include "user.h") 96.1073 Tj
 0 -66.4535 Td
-(6854     if\(fork1\(\) == 0\){) 113.581 Tj
+(6854 #include "fcntl.h") 100.4758 Tj
 0 -75.9469 Td
-(6855       close\(1\);) 87.3703 Tj
+(6855 ) 21.8426 Tj
 0 -85.4403 Td
-(6856       dup\(p[1]\);) 91.7388 Tj
+(6856 // Parsed command representation) 161.635 Tj
 0 -94.9336 Td
-(6857       close\(p[0]\);) 100.476 Tj
+(6857 #define EXEC  1) 87.3703 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
+(6858 #define REDIR 2) 87.3703 Tj
+0 -113.9203 Td
+(6859 #define PIPE  3) 87.3703 Tj
+0 -123.4137 Td
+(6860 #define LIST  4) 87.3703 Tj
+0 -132.9071 Td
+(6861 #define BACK  5) 87.3703 Tj
+0 -142.4004 Td
+(6862 ) 21.8426 Tj
+0 -151.8938 Td
+(6863 #define MAXARGS 10) 100.4758 Tj
+0 -161.3871 Td
+(6864 ) 21.8426 Tj
+0 -170.8805 Td
+(6865 struct cmd {) 74.2647 Tj
+0 -180.3739 Td
+(6866   int type;) 69.8962 Tj
+0 -189.8672 Td
+(6867 };) 30.5796 Tj
+0 -199.3606 Td
+(6868 ) 21.8426 Tj
+0 -208.8539 Td
+(6869 struct execcmd {) 91.7388 Tj
+0 -218.3473 Td
+(6870   int type;) 69.8962 Tj
+0 -227.8407 Td
+(6871   char *argv[MAXARGS];) 117.9499 Tj
 0 -237.334 Td
-(6872     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
+(6872   char *eargv[MAXARGS];) 122.3184 Tj
+0 -246.8274 Td
+(6873 };) 30.5796 Tj
+0 -256.3207 Td
+(6874 ) 21.8426 Tj
+0 -265.8141 Td
+(6875 struct redircmd {) 96.1073 Tj
+0 -275.3075 Td
+(6876   int type;) 69.8962 Tj
+0 -284.8008 Td
+(6877   struct cmd *cmd;) 100.4758 Tj
+0 -294.2942 Td
+(6878   char *file;) 78.6333 Tj
+0 -303.7875 Td
+(6879   char *efile;) 83.0018 Tj
+0 -313.2809 Td
+(6880   int mode;) 69.8962 Tj
+0 -322.7743 Td
+(6881   int fd;) 61.1592 Tj
+0 -332.2676 Td
+(6882 };) 30.5796 Tj
 0 -341.761 Td
-(6883 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
+(6883 ) 21.8426 Tj
+0 -351.2543 Td
+(6884 struct pipecmd {) 91.7388 Tj
+0 -360.7477 Td
+(6885   int type;) 69.8962 Tj
+0 -370.2411 Td
+(6886   struct cmd *left;) 104.8443 Tj
+0 -379.7344 Td
+(6887   struct cmd *right;) 109.2129 Tj
+0 -389.2278 Td
+(6888 };) 30.5796 Tj
+0 -398.7211 Td
+(6889 ) 21.8426 Tj
+0 -408.2145 Td
+(6890 struct listcmd {) 91.7388 Tj
+0 -417.7079 Td
+(6891   int type;) 69.8962 Tj
+0 -427.2012 Td
+(6892   struct cmd *left;) 104.8443 Tj
+0 -436.6946 Td
+(6893   struct cmd *right;) 109.2129 Tj
+0 -446.1879 Td
+(6894 };) 30.5796 Tj
+0 -455.6813 Td
 (6895 ) 21.8426 Tj
-0 -465.175 Td
-(6896 ) 21.8426 Tj
+0 -465.1747 Td
+(6896 struct backcmd {) 91.7388 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
+(6897   int type;) 69.8962 Tj
+0 -484.1614 Td
+(6898   struct cmd *cmd;) 100.4758 Tj
+0 -493.6547 Td
+(6899 };) 30.5796 Tj
+0 -522.1348 Td
 (Sheet 68) 34.9481 Tj
 Q
 Q
@@ -22399,8 +22378,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -22415,111 +22393,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sh.c  Page 4) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sh.c  Page 2) 152.898 Tj
 0 -28.4801 Td
-(6900 int) 34.9481 Tj
+(6900 int fork1\(void\);  // Fork but panics on failure.) 231.5313 Tj
 0 -37.9735 Td
-(6901 main\(void\)) 65.5277 Tj
+(6901 void panic\(char*\);) 100.4758 Tj
 0 -47.4668 Td
-(6902 {) 26.2111 Tj
+(6902 struct cmd *parsecmd\(char*\);) 144.161 Tj
 0 -56.9602 Td
-(6903   static char buf[100];) 122.318 Tj
+(6903 ) 21.8426 Tj
 0 -66.4535 Td
-(6904   int fd;) 61.1592 Tj
+(6904 // Execute cmd.  Never returns.) 157.2665 Tj
 0 -75.9469 Td
-(6905 ) 21.8426 Tj
+(6905 void) 39.3166 Tj
 0 -85.4403 Td
-(6906   // Assumes three file descriptors open.) 200.952 Tj
+(6906 runcmd\(struct cmd *cmd\)) 122.3184 Tj
 0 -94.9336 Td
-(6907   while\(\(fd = open\("console", O_RDWR\)\) >= 0\){) 218.426 Tj
+(6907 {) 26.2111 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
+(6908   int p[2];) 69.8962 Tj
+0 -113.9203 Td
+(6909   struct backcmd *bcmd;) 122.3184 Tj
+0 -123.4137 Td
+(6910   struct execcmd *ecmd;) 122.3184 Tj
+0 -132.9071 Td
+(6911   struct listcmd *lcmd;) 122.3184 Tj
+0 -142.4004 Td
+(6912   struct pipecmd *pcmd;) 122.3184 Tj
+0 -151.8938 Td
+(6913   struct redircmd *rcmd;) 126.6869 Tj
+0 -161.3871 Td
+(6914 ) 21.8426 Tj
+0 -170.8805 Td
+(6915   if\(cmd == 0\)) 83.0018 Tj
+0 -180.3739 Td
+(6916     exit\(\);) 69.8962 Tj
+0 -189.8672 Td
+(6917 ) 21.8426 Tj
+0 -199.3606 Td
+(6918   switch\(cmd->type\){) 109.2129 Tj
+0 -208.8539 Td
+(6919   default:) 65.5277 Tj
+0 -218.3473 Td
+(6920     panic\("runcmd"\);) 109.2129 Tj
+0 -227.8407 Td
+(6921 ) 21.8426 Tj
 0 -237.334 Td
-(6922 ) 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
+(6922   case EXEC:) 74.2647 Tj
+0 -246.8274 Td
+(6923     ecmd = \(struct execcmd*\)cmd;) 161.635 Tj
+0 -256.3207 Td
+(6924     if\(ecmd->argv[0] == 0\)) 135.4239 Tj
+0 -265.8141 Td
+(6925       exit\(\);) 78.6333 Tj
+0 -275.3075 Td
+(6926     exec\(ecmd->argv[0], ecmd->argv\);) 179.1091 Tj
+0 -284.8008 Td
+(6927     printf\(2, "exec %s failed\\n", ecmd->argv[0]\);) 235.8998 Tj
+0 -294.2942 Td
+(6928     break;) 65.5277 Tj
+0 -303.7875 Td
 (6929 ) 21.8426 Tj
-0 -313.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 -313.2809 Td
+(6930   case REDIR:) 78.6333 Tj
+0 -322.7743 Td
+(6931     rcmd = \(struct redircmd*\)cmd;) 166.0035 Tj
+0 -332.2676 Td
+(6932     close\(rcmd->fd\);) 109.2129 Tj
 0 -341.761 Td
-(6933   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
+(6933     if\(open\(rcmd->file, rcmd->mode\) < 0\){) 200.9517 Tj
+0 -351.2543 Td
+(6934       printf\(2, "open %s failed\\n", rcmd->file\);) 231.5313 Tj
+0 -360.7477 Td
+(6935       exit\(\);) 78.6333 Tj
+0 -370.2411 Td
+(6936     }) 43.6851 Tj
+0 -379.7344 Td
+(6937     runcmd\(rcmd->cmd\);) 117.9499 Tj
+0 -389.2278 Td
+(6938     break;) 65.5277 Tj
+0 -398.7211 Td
+(6939 ) 21.8426 Tj
+0 -408.2145 Td
+(6940   case LIST:) 74.2647 Tj
+0 -417.7079 Td
+(6941     lcmd = \(struct listcmd*\)cmd;) 161.635 Tj
+0 -427.2012 Td
+(6942     if\(fork1\(\) == 0\)) 109.2129 Tj
+0 -436.6946 Td
+(6943       runcmd\(lcmd->left\);) 131.0554 Tj
+0 -446.1879 Td
+(6944     wait\(\);) 69.8962 Tj
+0 -455.6813 Td
+(6945     runcmd\(lcmd->right\);) 126.6869 Tj
+0 -465.1747 Td
+(6946     break;) 65.5277 Tj
 0 -474.668 Td
 (6947 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (6948 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (6949 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 69) 34.9481 Tj
 Q
 Q
@@ -22534,112 +22512,111 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sh.c  Page 5) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sh.c  Page 3) 152.898 Tj
 0 -28.4801 Td
-(6950 // Constructors) 87.3703 Tj
+(6950   case PIPE:) 74.2647 Tj
 0 -37.9735 Td
-(6951 ) 21.8426 Tj
+(6951     pcmd = \(struct pipecmd*\)cmd;) 161.635 Tj
 0 -47.4668 Td
-(6952 struct cmd*) 69.8962 Tj
+(6952     if\(pipe\(p\) < 0\)) 104.8443 Tj
 0 -56.9602 Td
-(6953 execcmd\(void\)) 78.6333 Tj
+(6953       panic\("pipe"\);) 109.2129 Tj
 0 -66.4535 Td
-(6954 {) 26.2111 Tj
+(6954     if\(fork1\(\) == 0\){) 113.5814 Tj
 0 -75.9469 Td
-(6955   struct execcmd *cmd;) 117.95 Tj
+(6955       close\(1\);) 87.3703 Tj
 0 -85.4403 Td
-(6956 ) 21.8426 Tj
+(6956       dup\(p[1]\);) 91.7388 Tj
 0 -94.9336 Td
-(6957   cmd = malloc\(sizeof\(*cmd\)\);) 148.529 Tj
+(6957       close\(p[0]\);) 100.4758 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
+(6958       close\(p[1]\);) 100.4758 Tj
+0 -113.9203 Td
+(6959       runcmd\(pcmd->left\);) 131.0554 Tj
+0 -123.4137 Td
+(6960     }) 43.6851 Tj
+0 -132.9071 Td
+(6961     if\(fork1\(\) == 0\){) 113.5814 Tj
+0 -142.4004 Td
+(6962       close\(0\);) 87.3703 Tj
+0 -151.8938 Td
+(6963       dup\(p[0]\);) 91.7388 Tj
+0 -161.3871 Td
+(6964       close\(p[0]\);) 100.4758 Tj
+0 -170.8805 Td
+(6965       close\(p[1]\);) 100.4758 Tj
+0 -180.3739 Td
+(6966       runcmd\(pcmd->right\);) 135.4239 Tj
+0 -189.8672 Td
+(6967     }) 43.6851 Tj
+0 -199.3606 Td
+(6968     close\(p[0]\);) 91.7388 Tj
+0 -208.8539 Td
+(6969     close\(p[1]\);) 91.7388 Tj
+0 -218.3473 Td
+(6970     wait\(\);) 69.8962 Tj
+0 -227.8407 Td
+(6971     wait\(\);) 69.8962 Tj
 0 -237.334 Td
-(6972   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
+(6972     break;) 65.5277 Tj
+0 -246.8274 Td
+(6973 ) 21.8426 Tj
+0 -256.3207 Td
+(6974   case BACK:) 74.2647 Tj
+0 -265.8141 Td
+(6975     bcmd = \(struct backcmd*\)cmd;) 161.635 Tj
+0 -275.3075 Td
+(6976     if\(fork1\(\) == 0\)) 109.2129 Tj
+0 -284.8008 Td
+(6977       runcmd\(bcmd->cmd\);) 126.6869 Tj
+0 -294.2942 Td
+(6978     break;) 65.5277 Tj
+0 -303.7875 Td
+(6979   }) 34.9481 Tj
+0 -313.2809 Td
+(6980   exit\(\);) 61.1592 Tj
+0 -322.7743 Td
+(6981 }) 26.2111 Tj
+0 -332.2676 Td
+(6982 ) 21.8426 Tj
 0 -341.761 Td
-(6983 ) 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
+(6983 int) 34.9481 Tj
+0 -351.2543 Td
+(6984 getcmd\(char *buf, int nbuf\)) 139.7925 Tj
+0 -360.7477 Td
+(6985 {) 26.2111 Tj
+0 -370.2411 Td
+(6986   printf\(2, "$ "\);) 100.4758 Tj
+0 -379.7344 Td
+(6987   memset\(buf, 0, nbuf\);) 122.3184 Tj
+0 -389.2278 Td
+(6988   gets\(buf, nbuf\);) 100.4758 Tj
+0 -398.7211 Td
+(6989   if\(buf[0] == 0\) // EOF) 126.6869 Tj
+0 -408.2145 Td
+(6990     return -1;) 83.0018 Tj
+0 -417.7079 Td
+(6991   return 0;) 69.8962 Tj
+0 -427.2012 Td
+(6992 }) 26.2111 Tj
+0 -436.6946 Td
 (6993 ) 21.8426 Tj
-0 -446.188 Td
+0 -446.1879 Td
 (6994 ) 21.8426 Tj
-0 -455.681 Td
+0 -455.6813 Td
 (6995 ) 21.8426 Tj
-0 -465.175 Td
+0 -465.1747 Td
 (6996 ) 21.8426 Tj
 0 -474.668 Td
 (6997 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (6998 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (6999 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 69) 34.9481 Tj
 Q
 Q
@@ -22668,8 +22645,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -22684,111 +22660,112 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sh.c  Page 6) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sh.c  Page 4) 152.898 Tj
 0 -28.4801 Td
-(7000 struct cmd*) 69.8962 Tj
+(7000 int) 34.9481 Tj
 0 -37.9735 Td
-(7001 listcmd\(struct cmd *left, struct cmd *right\)) 214.057 Tj
+(7001 main\(void\)) 65.5277 Tj
 0 -47.4668 Td
 (7002 {) 26.2111 Tj
 0 -56.9602 Td
-(7003   struct listcmd *cmd;) 117.95 Tj
+(7003   static char buf[100];) 122.3184 Tj
 0 -66.4535 Td
-(7004 ) 21.8426 Tj
+(7004   int fd;) 61.1592 Tj
 0 -75.9469 Td
-(7005   cmd = malloc\(sizeof\(*cmd\)\);) 148.529 Tj
+(7005 ) 21.8426 Tj
 0 -85.4403 Td
-(7006   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.267 Tj
+(7006   // Assumes three file descriptors open.) 200.9517 Tj
 0 -94.9336 Td
-(7007   cmd->type = LIST;) 104.844 Tj
+(7007   while\(\(fd = open\("console", O_RDWR\)\) >= 0\){) 218.4257 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
+(7008     if\(fd >= 3\){) 91.7388 Tj
+0 -113.9203 Td
+(7009       close\(fd\);) 91.7388 Tj
+0 -123.4137 Td
+(7010       break;) 74.2647 Tj
+0 -132.9071 Td
+(7011     }) 43.6851 Tj
+0 -142.4004 Td
+(7012   }) 34.9481 Tj
+0 -151.8938 Td
+(7013 ) 21.8426 Tj
+0 -161.3871 Td
+(7014   // Read and run input commands.) 166.0035 Tj
+0 -170.8805 Td
+(7015   while\(getcmd\(buf, sizeof\(buf\)\) >= 0\){) 192.2146 Tj
+0 -180.3739 Td
+(7016     if\(buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' '\){) 266.4794 Tj
+0 -189.8672 Td
+(7017       // Clumsy but will have to do for now.) 214.0572 Tj
+0 -199.3606 Td
+(7018       // Chdir has no effect on the parent if run in the c\
+hild.) 297.059 Tj
+0 -208.8539 Td
+(7019       buf[strlen\(buf\)-1] = 0;  // chop \\n) 200.9517 Tj
+0 -218.3473 Td
+(7020       if\(chdir\(buf+3\) < 0\)) 135.4239 Tj
+0 -227.8407 Td
+(7021         printf\(2, "cannot cd %s\\n", buf+3\);) 209.6887 Tj
 0 -237.334 Td
-(7022   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
+(7022       continue;) 87.3703 Tj
+0 -246.8274 Td
+(7023     }) 43.6851 Tj
+0 -256.3207 Td
+(7024     if\(fork1\(\) == 0\)) 109.2129 Tj
+0 -265.8141 Td
+(7025       runcmd\(parsecmd\(buf\)\);) 144.161 Tj
+0 -275.3075 Td
+(7026     wait\(\);) 69.8962 Tj
+0 -284.8008 Td
+(7027   }) 34.9481 Tj
+0 -294.2942 Td
+(7028   exit\(\);) 61.1592 Tj
+0 -303.7875 Td
+(7029 }) 26.2111 Tj
+0 -313.2809 Td
 (7030 ) 21.8426 Tj
-0 -322.774 Td
-(7031 ) 21.8426 Tj
-0 -332.268 Td
-(7032 ) 21.8426 Tj
+0 -322.7743 Td
+(7031 void) 39.3166 Tj
+0 -332.2676 Td
+(7032 panic\(char *s\)) 83.0018 Tj
 0 -341.761 Td
-(7033 ) 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
+(7033 {) 26.2111 Tj
+0 -351.2543 Td
+(7034   printf\(2, "%s\\n", s\);) 122.3184 Tj
+0 -360.7477 Td
+(7035   exit\(\);) 61.1592 Tj
+0 -370.2411 Td
+(7036 }) 26.2111 Tj
+0 -379.7344 Td
 (7037 ) 21.8426 Tj
-0 -389.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
+0 -389.2278 Td
+(7038 int) 34.9481 Tj
+0 -398.7211 Td
+(7039 fork1\(void\)) 69.8962 Tj
+0 -408.2145 Td
+(7040 {) 26.2111 Tj
+0 -417.7079 Td
+(7041   int pid;) 65.5277 Tj
+0 -427.2012 Td
 (7042 ) 21.8426 Tj
-0 -436.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 -436.6946 Td
+(7043   pid = fork\(\);) 87.3703 Tj
+0 -446.1879 Td
+(7044   if\(pid == -1\)) 87.3703 Tj
+0 -455.6813 Td
+(7045     panic\("fork"\);) 100.4758 Tj
+0 -465.1747 Td
+(7046   return pid;) 78.6333 Tj
 0 -474.668 Td
-(7047 ) 21.8426 Tj
-0 -484.161 Td
+(7047 }) 26.2111 Tj
+0 -484.1614 Td
 (7048 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (7049 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 70) 34.9481 Tj
 Q
 Q
@@ -22803,112 +22780,112 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sh.c  Page 7) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sh.c  Page 5) 152.898 Tj
 0 -28.4801 Td
-(7050 // Parsing) 65.5277 Tj
+(7050 // Constructors) 87.3703 Tj
 0 -37.9735 Td
 (7051 ) 21.8426 Tj
 0 -47.4668 Td
-(7052 char whitespace[] = " \\t\\r\\n\\v";) 161.635 Tj
+(7052 struct cmd*) 69.8962 Tj
 0 -56.9602 Td
-(7053 char symbols[] = "<|>&;\(\)";) 139.792 Tj
+(7053 execcmd\(void\)) 78.6333 Tj
 0 -66.4535 Td
-(7054 ) 21.8426 Tj
+(7054 {) 26.2111 Tj
 0 -75.9469 Td
-(7055 int) 34.9481 Tj
+(7055   struct execcmd *cmd;) 117.9499 Tj
 0 -85.4403 Td
-(7056 gettoken\(char **ps, char *es, char **q, char **eq\)) 240.268 Tj
+(7056 ) 21.8426 Tj
 0 -94.9336 Td
-(7057 {) 26.2111 Tj
+(7057   cmd = malloc\(sizeof\(*cmd\)\);) 148.5295 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
+(7058   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.2665 Tj
+0 -113.9203 Td
+(7059   cmd->type = EXEC;) 104.8443 Tj
+0 -123.4137 Td
+(7060   return \(struct cmd*\)cmd;) 135.4239 Tj
+0 -132.9071 Td
+(7061 }) 26.2111 Tj
+0 -142.4004 Td
+(7062 ) 21.8426 Tj
+0 -151.8938 Td
+(7063 struct cmd*) 69.8962 Tj
+0 -161.3871 Td
+(7064 redircmd\(struct cmd *subcmd, char *file, char *efile, int\
+ mode, int fd\)) 332.0071 Tj
+0 -170.8805 Td
+(7065 {) 26.2111 Tj
+0 -180.3739 Td
+(7066   struct redircmd *cmd;) 122.3184 Tj
+0 -189.8672 Td
+(7067 ) 21.8426 Tj
+0 -199.3606 Td
+(7068   cmd = malloc\(sizeof\(*cmd\)\);) 148.5295 Tj
+0 -208.8539 Td
+(7069   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.2665 Tj
+0 -218.3473 Td
+(7070   cmd->type = REDIR;) 109.2129 Tj
+0 -227.8407 Td
+(7071   cmd->cmd = subcmd;) 109.2129 Tj
 0 -237.334 Td
-(7072   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
+(7072   cmd->file = file;) 104.8443 Tj
+0 -246.8274 Td
+(7073   cmd->efile = efile;) 113.5814 Tj
+0 -256.3207 Td
+(7074   cmd->mode = mode;) 104.8443 Tj
+0 -265.8141 Td
+(7075   cmd->fd = fd;) 87.3703 Tj
+0 -275.3075 Td
+(7076   return \(struct cmd*\)cmd;) 135.4239 Tj
+0 -284.8008 Td
+(7077 }) 26.2111 Tj
+0 -294.2942 Td
+(7078 ) 21.8426 Tj
+0 -303.7875 Td
+(7079 struct cmd*) 69.8962 Tj
+0 -313.2809 Td
+(7080 pipecmd\(struct cmd *left, struct cmd *right\)) 214.0572 Tj
+0 -322.7743 Td
+(7081 {) 26.2111 Tj
+0 -332.2676 Td
+(7082   struct pipecmd *cmd;) 117.9499 Tj
 0 -341.761 Td
-(7083     }) 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
+(7083 ) 21.8426 Tj
+0 -351.2543 Td
+(7084   cmd = malloc\(sizeof\(*cmd\)\);) 148.5295 Tj
+0 -360.7477 Td
+(7085   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.2665 Tj
+0 -370.2411 Td
+(7086   cmd->type = PIPE;) 104.8443 Tj
+0 -379.7344 Td
+(7087   cmd->left = left;) 104.8443 Tj
+0 -389.2278 Td
+(7088   cmd->right = right;) 113.5814 Tj
+0 -398.7211 Td
+(7089   return \(struct cmd*\)cmd;) 135.4239 Tj
+0 -408.2145 Td
+(7090 }) 26.2111 Tj
+0 -417.7079 Td
+(7091 ) 21.8426 Tj
+0 -427.2012 Td
+(7092 ) 21.8426 Tj
+0 -436.6946 Td
 (7093 ) 21.8426 Tj
-0 -446.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 -446.1879 Td
+(7094 ) 21.8426 Tj
+0 -455.6813 Td
+(7095 ) 21.8426 Tj
+0 -465.1747 Td
+(7096 ) 21.8426 Tj
 0 -474.668 Td
-(7097   return ret;) 78.6333 Tj
-0 -484.161 Td
-(7098 }) 26.2111 Tj
-0 -493.655 Td
+(7097 ) 21.8426 Tj
+0 -484.1614 Td
+(7098 ) 21.8426 Tj
+0 -493.6547 Td
 (7099 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 70) 34.9481 Tj
 Q
 Q
@@ -22937,8 +22914,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -22953,111 +22929,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sh.c  Page 8) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sh.c  Page 6) 152.898 Tj
 0 -28.4801 Td
-(7100 int) 34.9481 Tj
+(7100 struct cmd*) 69.8962 Tj
 0 -37.9735 Td
-(7101 peek\(char **ps, char *es, char *toks\)) 183.478 Tj
+(7101 listcmd\(struct cmd *left, struct cmd *right\)) 214.0572 Tj
 0 -47.4668 Td
 (7102 {) 26.2111 Tj
 0 -56.9602 Td
-(7103   char *s;) 65.5277 Tj
+(7103   struct listcmd *cmd;) 117.9499 Tj
 0 -66.4535 Td
 (7104 ) 21.8426 Tj
 0 -75.9469 Td
-(7105   s = *ps;) 65.5277 Tj
+(7105   cmd = malloc\(sizeof\(*cmd\)\);) 148.5295 Tj
 0 -85.4403 Td
-(7106   while\(s < es && strchr\(whitespace, *s\)\)) 200.952 Tj
+(7106   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.2665 Tj
 0 -94.9336 Td
-(7107     s++;) 56.7907 Tj
+(7107   cmd->type = LIST;) 104.8443 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
+(7108   cmd->left = left;) 104.8443 Tj
+0 -113.9203 Td
+(7109   cmd->right = right;) 113.5814 Tj
+0 -123.4137 Td
+(7110   return \(struct cmd*\)cmd;) 135.4239 Tj
+0 -132.9071 Td
+(7111 }) 26.2111 Tj
+0 -142.4004 Td
+(7112 ) 21.8426 Tj
+0 -151.8938 Td
+(7113 struct cmd*) 69.8962 Tj
+0 -161.3871 Td
+(7114 backcmd\(struct cmd *subcmd\)) 139.7925 Tj
+0 -170.8805 Td
+(7115 {) 26.2111 Tj
+0 -180.3739 Td
+(7116   struct backcmd *cmd;) 117.9499 Tj
+0 -189.8672 Td
+(7117 ) 21.8426 Tj
+0 -199.3606 Td
+(7118   cmd = malloc\(sizeof\(*cmd\)\);) 148.5295 Tj
+0 -208.8539 Td
+(7119   memset\(cmd, 0, sizeof\(*cmd\)\);) 157.2665 Tj
+0 -218.3473 Td
+(7120   cmd->type = BACK;) 104.8443 Tj
+0 -227.8407 Td
+(7121   cmd->cmd = subcmd;) 109.2129 Tj
 0 -237.334 Td
-(7122 ) 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
+(7122   return \(struct cmd*\)cmd;) 135.4239 Tj
+0 -246.8274 Td
+(7123 }) 26.2111 Tj
+0 -256.3207 Td
+(7124 ) 21.8426 Tj
+0 -265.8141 Td
+(7125 ) 21.8426 Tj
+0 -275.3075 Td
+(7126 ) 21.8426 Tj
+0 -284.8008 Td
+(7127 ) 21.8426 Tj
+0 -294.2942 Td
+(7128 ) 21.8426 Tj
+0 -303.7875 Td
+(7129 ) 21.8426 Tj
+0 -313.2809 Td
+(7130 ) 21.8426 Tj
+0 -322.7743 Td
+(7131 ) 21.8426 Tj
+0 -332.2676 Td
+(7132 ) 21.8426 Tj
 0 -341.761 Td
 (7133 ) 21.8426 Tj
-0 -351.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
+0 -351.2543 Td
+(7134 ) 21.8426 Tj
+0 -360.7477 Td
+(7135 ) 21.8426 Tj
+0 -370.2411 Td
+(7136 ) 21.8426 Tj
+0 -379.7344 Td
+(7137 ) 21.8426 Tj
+0 -389.2278 Td
 (7138 ) 21.8426 Tj
-0 -398.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 -398.7211 Td
+(7139 ) 21.8426 Tj
+0 -408.2145 Td
+(7140 ) 21.8426 Tj
+0 -417.7079 Td
+(7141 ) 21.8426 Tj
+0 -427.2012 Td
+(7142 ) 21.8426 Tj
+0 -436.6946 Td
+(7143 ) 21.8426 Tj
+0 -446.1879 Td
+(7144 ) 21.8426 Tj
+0 -455.6813 Td
+(7145 ) 21.8426 Tj
+0 -465.1747 Td
+(7146 ) 21.8426 Tj
 0 -474.668 Td
-(7147   }) 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
+(7147 ) 21.8426 Tj
+0 -484.1614 Td
+(7148 ) 21.8426 Tj
+0 -493.6547 Td
+(7149 ) 21.8426 Tj
+0 -522.1348 Td
 (Sheet 71) 34.9481 Tj
 Q
 Q
@@ -23072,111 +23048,112 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sh.c  Page 9) 152.898 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sh.c  Page 7) 152.898 Tj
 0 -28.4801 Td
-(7150 struct cmd*) 69.8962 Tj
+(7150 // Parsing) 65.5277 Tj
 0 -37.9735 Td
-(7151 parsepipe\(char **ps, char *es\)) 152.898 Tj
+(7151 ) 21.8426 Tj
 0 -47.4668 Td
-(7152 {) 26.2111 Tj
+(7152 char whitespace[] = " \\t\\r\\n\\v";) 161.635 Tj
 0 -56.9602 Td
-(7153   struct cmd *cmd;) 100.476 Tj
+(7153 char symbols[] = "<|>&;\(\)";) 139.7925 Tj
 0 -66.4535 Td
 (7154 ) 21.8426 Tj
 0 -75.9469 Td
-(7155   cmd = parseexec\(ps, es\);) 135.424 Tj
+(7155 int) 34.9481 Tj
 0 -85.4403 Td
-(7156   if\(peek\(ps, es, "|"\)\){) 126.687 Tj
+(7156 gettoken\(char **ps, char *es, char **q, char **eq\)) 240.2683 Tj
 0 -94.9336 Td
-(7157     gettoken\(ps, es, 0, 0\);) 139.792 Tj
+(7157 {) 26.2111 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
+(7158   char *s;) 65.5277 Tj
+0 -113.9203 Td
+(7159   int ret;) 65.5277 Tj
+0 -123.4137 Td
+(7160 ) 21.8426 Tj
+0 -132.9071 Td
+(7161   s = *ps;) 65.5277 Tj
+0 -142.4004 Td
+(7162   while\(s < es && strchr\(whitespace, *s\)\)) 200.9517 Tj
+0 -151.8938 Td
+(7163     s++;) 56.7907 Tj
+0 -161.3871 Td
+(7164   if\(q\)) 52.4222 Tj
+0 -170.8805 Td
+(7165     *q = s;) 69.8962 Tj
+0 -180.3739 Td
+(7166   ret = *s;) 69.8962 Tj
+0 -189.8672 Td
+(7167   switch\(*s\){) 78.6333 Tj
+0 -199.3606 Td
+(7168   case 0:) 61.1592 Tj
+0 -208.8539 Td
+(7169     break;) 65.5277 Tj
+0 -218.3473 Td
+(7170   case '|':) 69.8962 Tj
+0 -227.8407 Td
+(7171   case '\(':) 69.8962 Tj
 0 -237.334 Td
-(7172       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
+(7172   case '\)':) 69.8962 Tj
+0 -246.8274 Td
+(7173   case ';':) 69.8962 Tj
+0 -256.3207 Td
+(7174   case '&':) 69.8962 Tj
+0 -265.8141 Td
+(7175   case '<':) 69.8962 Tj
+0 -275.3075 Td
+(7176     s++;) 56.7907 Tj
+0 -284.8008 Td
+(7177     break;) 65.5277 Tj
+0 -294.2942 Td
+(7178   case '>':) 69.8962 Tj
+0 -303.7875 Td
+(7179     s++;) 56.7907 Tj
+0 -313.2809 Td
+(7180     if\(*s == '>'\){) 100.4758 Tj
+0 -322.7743 Td
+(7181       ret = '+';) 91.7388 Tj
+0 -332.2676 Td
+(7182       s++;) 65.5277 Tj
 0 -341.761 Td
 (7183     }) 43.6851 Tj
-0 -351.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
+0 -351.2543 Td
+(7184     break;) 65.5277 Tj
+0 -360.7477 Td
+(7185   default:) 65.5277 Tj
+0 -370.2411 Td
+(7186     ret = 'a';) 83.0018 Tj
+0 -379.7344 Td
+(7187     while\(s < es && !strchr\(whitespace, *s\) && !strchr\(\
+symbols, *s\)\)) 318.9016 Tj
+0 -389.2278 Td
+(7188       s++;) 65.5277 Tj
+0 -398.7211 Td
+(7189     break;) 65.5277 Tj
+0 -408.2145 Td
+(7190   }) 34.9481 Tj
+0 -417.7079 Td
+(7191   if\(eq\)) 56.7907 Tj
+0 -427.2012 Td
+(7192     *eq = s;) 74.2647 Tj
+0 -436.6946 Td
 (7193 ) 21.8426 Tj
-0 -446.188 Td
-(7194 ) 21.8426 Tj
-0 -455.681 Td
-(7195 ) 21.8426 Tj
-0 -465.175 Td
-(7196 ) 21.8426 Tj
+0 -446.1879 Td
+(7194   while\(s < es && strchr\(whitespace, *s\)\)) 200.9517 Tj
+0 -455.6813 Td
+(7195     s++;) 56.7907 Tj
+0 -465.1747 Td
+(7196   *ps = s;) 65.5277 Tj
 0 -474.668 Td
-(7197 ) 21.8426 Tj
-0 -484.161 Td
-(7198 ) 21.8426 Tj
-0 -493.655 Td
+(7197   return ret;) 78.6333 Tj
+0 -484.1614 Td
+(7198 }) 26.2111 Tj
+0 -493.6547 Td
 (7199 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 71) 34.9481 Tj
 Q
 Q
@@ -23205,8 +23182,7 @@ pdfStartPage
 [0] SC
 false op
 false OP
-0 0 612 792 re
-W
+{} settransfer
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -23221,111 +23197,111 @@ 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.9679 1 0 564.72 738.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sh.c  Page 10) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sh.c  Page 8) 152.898 Tj
 0 -28.4801 Td
-(7200 struct cmd*) 69.8962 Tj
+(7200 int) 34.9481 Tj
 0 -37.9735 Td
-(7201 parseblock\(char **ps, char *es\)) 157.267 Tj
+(7201 peek\(char **ps, char *es, char *toks\)) 183.4776 Tj
 0 -47.4668 Td
 (7202 {) 26.2111 Tj
 0 -56.9602 Td
-(7203   struct cmd *cmd;) 100.476 Tj
+(7203   char *s;) 65.5277 Tj
 0 -66.4535 Td
 (7204 ) 21.8426 Tj
 0 -75.9469 Td
-(7205   if\(!peek\(ps, es, "\("\)\)) 126.687 Tj
+(7205   s = *ps;) 65.5277 Tj
 0 -85.4403 Td
-(7206     panic\("parseblock"\);) 126.687 Tj
+(7206   while\(s < es && strchr\(whitespace, *s\)\)) 200.9517 Tj
 0 -94.9336 Td
-(7207   gettoken\(ps, es, 0, 0\);) 131.055 Tj
+(7207     s++;) 56.7907 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
+(7208   *ps = s;) 65.5277 Tj
+0 -113.9203 Td
+(7209   return *s && strchr\(toks, *s\);) 161.635 Tj
+0 -123.4137 Td
+(7210 }) 26.2111 Tj
+0 -132.9071 Td
+(7211 ) 21.8426 Tj
+0 -142.4004 Td
+(7212 struct cmd *parseline\(char**, char*\);) 183.4776 Tj
+0 -151.8938 Td
+(7213 struct cmd *parsepipe\(char**, char*\);) 183.4776 Tj
+0 -161.3871 Td
+(7214 struct cmd *parseexec\(char**, char*\);) 183.4776 Tj
+0 -170.8805 Td
+(7215 struct cmd *nulterminate\(struct cmd*\);) 187.8461 Tj
+0 -180.3739 Td
+(7216 ) 21.8426 Tj
+0 -189.8672 Td
+(7217 struct cmd*) 69.8962 Tj
+0 -199.3606 Td
+(7218 parsecmd\(char *s\)) 96.1073 Tj
+0 -208.8539 Td
+(7219 {) 26.2111 Tj
+0 -218.3473 Td
+(7220   char *es;) 69.8962 Tj
+0 -227.8407 Td
+(7221   struct cmd *cmd;) 100.4758 Tj
 0 -237.334 Td
-(7222   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
+(7222 ) 21.8426 Tj
+0 -246.8274 Td
+(7223   es = s + strlen\(s\);) 113.5814 Tj
+0 -256.3207 Td
+(7224   cmd = parseline\(&s, es\);) 135.4239 Tj
+0 -265.8141 Td
+(7225   peek\(&s, es, ""\);) 104.8443 Tj
+0 -275.3075 Td
+(7226   if\(s != es\){) 83.0018 Tj
+0 -284.8008 Td
+(7227     printf\(2, "leftovers: %s\\n", s\);) 179.1091 Tj
+0 -294.2942 Td
+(7228     panic\("syntax"\);) 109.2129 Tj
+0 -303.7875 Td
+(7229   }) 34.9481 Tj
+0 -313.2809 Td
+(7230   nulterminate\(cmd\);) 109.2129 Tj
+0 -322.7743 Td
+(7231   return cmd;) 78.6333 Tj
+0 -332.2676 Td
+(7232 }) 26.2111 Tj
 0 -341.761 Td
-(7233     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
+(7233 ) 21.8426 Tj
+0 -351.2543 Td
+(7234 struct cmd*) 69.8962 Tj
+0 -360.7477 Td
+(7235 parseline\(char **ps, char *es\)) 152.898 Tj
+0 -370.2411 Td
+(7236 {) 26.2111 Tj
+0 -379.7344 Td
+(7237   struct cmd *cmd;) 100.4758 Tj
+0 -389.2278 Td
+(7238 ) 21.8426 Tj
+0 -398.7211 Td
+(7239   cmd = parsepipe\(ps, es\);) 135.4239 Tj
+0 -408.2145 Td
+(7240   while\(peek\(ps, es, "&"\)\){) 139.7925 Tj
+0 -417.7079 Td
+(7241     gettoken\(ps, es, 0, 0\);) 139.7925 Tj
+0 -427.2012 Td
+(7242     cmd = backcmd\(cmd\);) 122.3184 Tj
+0 -436.6946 Td
 (7243   }) 34.9481 Tj
-0 -446.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 -446.1879 Td
+(7244   if\(peek\(ps, es, ";"\)\){) 126.6869 Tj
+0 -455.6813 Td
+(7245     gettoken\(ps, es, 0, 0\);) 139.7925 Tj
+0 -465.1747 Td
+(7246     cmd = listcmd\(cmd, parseline\(ps, es\)\);) 205.3202 Tj
 0 -474.668 Td
-(7247 }) 26.2111 Tj
-0 -484.161 Td
-(7248 ) 21.8426 Tj
-0 -493.655 Td
-(7249 ) 21.8426 Tj
-0 -522.135 Td
+(7247   }) 34.9481 Tj
+0 -484.1614 Td
+(7248   return cmd;) 78.6333 Tj
+0 -493.6547 Td
+(7249 }) 26.2111 Tj
+0 -522.1348 Td
 (Sheet 72) 34.9481 Tj
 Q
 Q
@@ -23340,111 +23316,111 @@ 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.9679 1 0 564.72 392.865] Tm
 0 0 Td
-/F9_0 8.70222 Tf
-(Aug 30 10:08 2007  xv6/sh.c  Page 11) 157.267 Tj
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sh.c  Page 9) 152.898 Tj
 0 -28.4801 Td
-(7250 // NUL-terminate all the counted strings.) 200.952 Tj
+(7250 struct cmd*) 69.8962 Tj
 0 -37.9735 Td
-(7251 struct cmd*) 69.8962 Tj
+(7251 parsepipe\(char **ps, char *es\)) 152.898 Tj
 0 -47.4668 Td
-(7252 nulterminate\(struct cmd *cmd\)) 148.529 Tj
+(7252 {) 26.2111 Tj
 0 -56.9602 Td
-(7253 {) 26.2111 Tj
+(7253   struct cmd *cmd;) 100.4758 Tj
 0 -66.4535 Td
-(7254   int i;) 56.7907 Tj
+(7254 ) 21.8426 Tj
 0 -75.9469 Td
-(7255   struct backcmd *bcmd;) 122.318 Tj
+(7255   cmd = parseexec\(ps, es\);) 135.4239 Tj
 0 -85.4403 Td
-(7256   struct execcmd *ecmd;) 122.318 Tj
+(7256   if\(peek\(ps, es, "|"\)\){) 126.6869 Tj
 0 -94.9336 Td
-(7257   struct listcmd *lcmd;) 122.318 Tj
+(7257     gettoken\(ps, es, 0, 0\);) 139.7925 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
+(7258     cmd = pipecmd\(cmd, parsepipe\(ps, es\)\);) 205.3202 Tj
+0 -113.9203 Td
+(7259   }) 34.9481 Tj
+0 -123.4137 Td
+(7260   return cmd;) 78.6333 Tj
+0 -132.9071 Td
+(7261 }) 26.2111 Tj
+0 -142.4004 Td
+(7262 ) 21.8426 Tj
+0 -151.8938 Td
+(7263 struct cmd*) 69.8962 Tj
+0 -161.3871 Td
+(7264 parseredirs\(struct cmd *cmd, char **ps, char *es\)) 235.8998 Tj
+0 -170.8805 Td
+(7265 {) 26.2111 Tj
+0 -180.3739 Td
+(7266   int tok;) 65.5277 Tj
+0 -189.8672 Td
+(7267   char *q, *eq;) 87.3703 Tj
+0 -199.3606 Td
+(7268 ) 21.8426 Tj
+0 -208.8539 Td
+(7269   while\(peek\(ps, es, "<>"\)\){) 144.161 Tj
+0 -218.3473 Td
+(7270     tok = gettoken\(ps, es, 0, 0\);) 166.0035 Tj
+0 -227.8407 Td
+(7271     if\(gettoken\(ps, es, &q, &eq\) != 'a'\)) 196.5831 Tj
 0 -237.334 Td
-(7272     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
+(7272       panic\("missing file for redirection"\);) 214.0572 Tj
+0 -246.8274 Td
+(7273     switch\(tok\){) 91.7388 Tj
+0 -256.3207 Td
+(7274     case '<':) 78.6333 Tj
+0 -265.8141 Td
+(7275       cmd = redircmd\(cmd, q, eq, O_RDONLY, 0\);) 222.7942 Tj
+0 -275.3075 Td
+(7276       break;) 74.2647 Tj
+0 -284.8008 Td
+(7277     case '>':) 78.6333 Tj
+0 -294.2942 Td
+(7278       cmd = redircmd\(cmd, q, eq, O_WRONLY|O_CREATE, 1\);) 262.1109 Tj
+0 -303.7875 Td
+(7279       break;) 74.2647 Tj
+0 -313.2809 Td
+(7280     case '+':  // >>) 109.2129 Tj
+0 -322.7743 Td
+(7281       cmd = redircmd\(cmd, q, eq, O_WRONLY|O_CREATE, 1\);) 262.1109 Tj
+0 -332.2676 Td
+(7282       break;) 74.2647 Tj
 0 -341.761 Td
-(7283   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
+(7283     }) 43.6851 Tj
+0 -351.2543 Td
+(7284   }) 34.9481 Tj
+0 -360.7477 Td
+(7285   return cmd;) 78.6333 Tj
+0 -370.2411 Td
+(7286 }) 26.2111 Tj
+0 -379.7344 Td
+(7287 ) 21.8426 Tj
+0 -389.2278 Td
 (7288 ) 21.8426 Tj
-0 -398.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
+0 -398.7211 Td
+(7289 ) 21.8426 Tj
+0 -408.2145 Td
+(7290 ) 21.8426 Tj
+0 -417.7079 Td
+(7291 ) 21.8426 Tj
+0 -427.2012 Td
+(7292 ) 21.8426 Tj
+0 -436.6946 Td
+(7293 ) 21.8426 Tj
+0 -446.1879 Td
+(7294 ) 21.8426 Tj
+0 -455.6813 Td
+(7295 ) 21.8426 Tj
+0 -465.1747 Td
 (7296 ) 21.8426 Tj
 0 -474.668 Td
 (7297 ) 21.8426 Tj
-0 -484.161 Td
+0 -484.1614 Td
 (7298 ) 21.8426 Tj
-0 -493.655 Td
+0 -493.6547 Td
 (7299 ) 21.8426 Tj
-0 -522.135 Td
+0 -522.1348 Td
 (Sheet 72) 34.9481 Tj
 Q
 Q
@@ -23453,8 +23429,275 @@ Q
 showpage
 %%PageTrailer
 pdfEndPage
+%%Page: 80 80
+%%BeginPageSetup
+%%PageOrientation: Landscape
+pdfStartPage
+180 rotate
+-612 -792 translate
+0 0 612 792 re W
+%%EndPageSetup
+[] 0 d
+1 i
+0 j
+0 J
+10 M
+1 w
+/DeviceGray {} cs
+[0] sc
+/DeviceGray {} CS
+[0] SC
+false op
+false OP
+{} settransfer
+q
+q
+[0.1 0 0 0.1 0 0] cm
+q
+180 3960 5760 3460 re
+W
+/DeviceGray {} CS
+[0] SC
+/DeviceGray {} cs
+[0] sc
+q
+[10 0 0 10 0 0] cm
+[1 0 0 1 0 0] Tm
+0 0 Td
+[0 -0.9679 1 0 564.72 738.865] Tm
+0 0 Td
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sh.c  Page 10) 157.2665 Tj
+0 -28.4801 Td
+(7300 struct cmd*) 69.8962 Tj
+0 -37.9735 Td
+(7301 parseblock\(char **ps, char *es\)) 157.2665 Tj
+0 -47.4668 Td
+(7302 {) 26.2111 Tj
+0 -56.9602 Td
+(7303   struct cmd *cmd;) 100.4758 Tj
+0 -66.4535 Td
+(7304 ) 21.8426 Tj
+0 -75.9469 Td
+(7305   if\(!peek\(ps, es, "\("\)\)) 126.6869 Tj
+0 -85.4403 Td
+(7306     panic\("parseblock"\);) 126.6869 Tj
+0 -94.9336 Td
+(7307   gettoken\(ps, es, 0, 0\);) 131.0554 Tj
+0 -104.427 Td
+(7308   cmd = parseline\(ps, es\);) 135.4239 Tj
+0 -113.9203 Td
+(7309   if\(!peek\(ps, es, "\)"\)\)) 126.6869 Tj
+0 -123.4137 Td
+(7310     panic\("syntax - missing \)"\);) 161.635 Tj
+0 -132.9071 Td
+(7311   gettoken\(ps, es, 0, 0\);) 131.0554 Tj
+0 -142.4004 Td
+(7312   cmd = parseredirs\(cmd, ps, es\);) 166.0035 Tj
+0 -151.8938 Td
+(7313   return cmd;) 78.6333 Tj
+0 -161.3871 Td
+(7314 }) 26.2111 Tj
+0 -170.8805 Td
+(7315 ) 21.8426 Tj
+0 -180.3739 Td
+(7316 struct cmd*) 69.8962 Tj
+0 -189.8672 Td
+(7317 parseexec\(char **ps, char *es\)) 152.898 Tj
+0 -199.3606 Td
+(7318 {) 26.2111 Tj
+0 -208.8539 Td
+(7319   char *q, *eq;) 87.3703 Tj
+0 -218.3473 Td
+(7320   int tok, argc;) 91.7388 Tj
+0 -227.8407 Td
+(7321   struct execcmd *cmd;) 117.9499 Tj
+0 -237.334 Td
+(7322   struct cmd *ret;) 100.4758 Tj
+0 -246.8274 Td
+(7323 ) 21.8426 Tj
+0 -256.3207 Td
+(7324   if\(peek\(ps, es, "\("\)\)) 122.3184 Tj
+0 -265.8141 Td
+(7325     return parseblock\(ps, es\);) 152.898 Tj
+0 -275.3075 Td
+(7326 ) 21.8426 Tj
+0 -284.8008 Td
+(7327   ret = execcmd\(\);) 100.4758 Tj
+0 -294.2942 Td
+(7328   cmd = \(struct execcmd*\)ret;) 148.5295 Tj
+0 -303.7875 Td
+(7329 ) 21.8426 Tj
+0 -313.2809 Td
+(7330   argc = 0;) 69.8962 Tj
+0 -322.7743 Td
+(7331   ret = parseredirs\(ret, ps, es\);) 166.0035 Tj
+0 -332.2676 Td
+(7332   while\(!peek\(ps, es, "|\)&;"\)\){) 157.2665 Tj
+0 -341.761 Td
+(7333     if\(\(tok=gettoken\(ps, es, &q, &eq\)\) == 0\)) 214.0572 Tj
+0 -351.2543 Td
+(7334       break;) 74.2647 Tj
+0 -360.7477 Td
+(7335     if\(tok != 'a'\)) 100.4758 Tj
+0 -370.2411 Td
+(7336       panic\("syntax"\);) 117.9499 Tj
+0 -379.7344 Td
+(7337     cmd->argv[argc] = q;) 126.6869 Tj
+0 -389.2278 Td
+(7338     cmd->eargv[argc] = eq;) 135.4239 Tj
+0 -398.7211 Td
+(7339     argc++;) 69.8962 Tj
+0 -408.2145 Td
+(7340     if\(argc >= MAXARGS\)) 122.3184 Tj
+0 -417.7079 Td
+(7341       panic\("too many args"\);) 148.5295 Tj
+0 -427.2012 Td
+(7342     ret = parseredirs\(ret, ps, es\);) 174.7406 Tj
+0 -436.6946 Td
+(7343   }) 34.9481 Tj
+0 -446.1879 Td
+(7344   cmd->argv[argc] = 0;) 117.9499 Tj
+0 -455.6813 Td
+(7345   cmd->eargv[argc] = 0;) 122.3184 Tj
+0 -465.1747 Td
+(7346   return ret;) 78.6333 Tj
+0 -474.668 Td
+(7347 }) 26.2111 Tj
+0 -484.1614 Td
+(7348 ) 21.8426 Tj
+0 -493.6547 Td
+(7349 ) 21.8426 Tj
+0 -522.1348 Td
+(Sheet 73) 34.9481 Tj
+Q
+Q
+q
+180 500 5760 3460 re
+W
+/DeviceGray {} CS
+[0] SC
+/DeviceGray {} cs
+[0] sc
+q
+[10 0 0 10 0 0] cm
+[1 0 0 1 0 0] Tm
+0 0 Td
+[0 -0.9679 1 0 564.72 392.865] Tm
+0 0 Td
+/F8_0 8.7022 Tf
+(Sep  3 10:05 2008  xv6/sh.c  Page 11) 157.2665 Tj
+0 -28.4801 Td
+(7350 // NUL-terminate all the counted strings.) 200.9517 Tj
+0 -37.9735 Td
+(7351 struct cmd*) 69.8962 Tj
+0 -47.4668 Td
+(7352 nulterminate\(struct cmd *cmd\)) 148.5295 Tj
+0 -56.9602 Td
+(7353 {) 26.2111 Tj
+0 -66.4535 Td
+(7354   int i;) 56.7907 Tj
+0 -75.9469 Td
+(7355   struct backcmd *bcmd;) 122.3184 Tj
+0 -85.4403 Td
+(7356   struct execcmd *ecmd;) 122.3184 Tj
+0 -94.9336 Td
+(7357   struct listcmd *lcmd;) 122.3184 Tj
+0 -104.427 Td
+(7358   struct pipecmd *pcmd;) 122.3184 Tj
+0 -113.9203 Td
+(7359   struct redircmd *rcmd;) 126.6869 Tj
+0 -123.4137 Td
+(7360 ) 21.8426 Tj
+0 -132.9071 Td
+(7361   if\(cmd == 0\)) 83.0018 Tj
+0 -142.4004 Td
+(7362     return 0;) 78.6333 Tj
+0 -151.8938 Td
+(7363 ) 21.8426 Tj
+0 -161.3871 Td
+(7364   switch\(cmd->type\){) 109.2129 Tj
+0 -170.8805 Td
+(7365   case EXEC:) 74.2647 Tj
+0 -180.3739 Td
+(7366     ecmd = \(struct execcmd*\)cmd;) 161.635 Tj
+0 -189.8672 Td
+(7367     for\(i=0; ecmd->argv[i]; i++\)) 161.635 Tj
+0 -199.3606 Td
+(7368       *ecmd->eargv[i] = 0;) 135.4239 Tj
+0 -208.8539 Td
+(7369     break;) 65.5277 Tj
+0 -218.3473 Td
+(7370 ) 21.8426 Tj
+0 -227.8407 Td
+(7371   case REDIR:) 78.6333 Tj
+0 -237.334 Td
+(7372     rcmd = \(struct redircmd*\)cmd;) 166.0035 Tj
+0 -246.8274 Td
+(7373     nulterminate\(rcmd->cmd\);) 144.161 Tj
+0 -256.3207 Td
+(7374     *rcmd->efile = 0;) 113.5814 Tj
+0 -265.8141 Td
+(7375     break;) 65.5277 Tj
+0 -275.3075 Td
+(7376 ) 21.8426 Tj
+0 -284.8008 Td
+(7377   case PIPE:) 74.2647 Tj
+0 -294.2942 Td
+(7378     pcmd = \(struct pipecmd*\)cmd;) 161.635 Tj
+0 -303.7875 Td
+(7379     nulterminate\(pcmd->left\);) 148.5295 Tj
+0 -313.2809 Td
+(7380     nulterminate\(pcmd->right\);) 152.898 Tj
+0 -322.7743 Td
+(7381     break;) 65.5277 Tj
+0 -332.2676 Td
+(7382 ) 21.8426 Tj
+0 -341.761 Td
+(7383   case LIST:) 74.2647 Tj
+0 -351.2543 Td
+(7384     lcmd = \(struct listcmd*\)cmd;) 161.635 Tj
+0 -360.7477 Td
+(7385     nulterminate\(lcmd->left\);) 148.5295 Tj
+0 -370.2411 Td
+(7386     nulterminate\(lcmd->right\);) 152.898 Tj
+0 -379.7344 Td
+(7387     break;) 65.5277 Tj
+0 -389.2278 Td
+(7388 ) 21.8426 Tj
+0 -398.7211 Td
+(7389   case BACK:) 74.2647 Tj
+0 -408.2145 Td
+(7390     bcmd = \(struct backcmd*\)cmd;) 161.635 Tj
+0 -417.7079 Td
+(7391     nulterminate\(bcmd->cmd\);) 144.161 Tj
+0 -427.2012 Td
+(7392     break;) 65.5277 Tj
+0 -436.6946 Td
+(7393   }) 34.9481 Tj
+0 -446.1879 Td
+(7394   return cmd;) 78.6333 Tj
+0 -455.6813 Td
+(7395 }) 26.2111 Tj
+0 -465.1747 Td
+(7396 ) 21.8426 Tj
+0 -474.668 Td
+(7397 ) 21.8426 Tj
+0 -484.1614 Td
+(7398 ) 21.8426 Tj
+0 -493.6547 Td
+(7399 ) 21.8426 Tj
+0 -522.1348 Td
+(Sheet 73) 34.9481 Tj
+Q
+Q
+Q
+Q
+showpage
+%%PageTrailer
+pdfEndPage
 %%Trailer
 end
 %%DocumentSuppliedResources:
-%%+ font LucidaSans-Typewriter83
+%%+ font YLWBJI+LucidaSans-Typewriter83
 %%EOF
-- 
cgit v1.2.3