From 35a6cf84ec5ee903d2c06726f89a7816fd39d267 Mon Sep 17 00:00:00 2001 From: kolya Date: Wed, 3 Sep 2008 14:05:52 +0000 Subject: [PATCH] make pdf, ps, tarball --- xv6-rev2.tar.gz | Bin 68356 -> 724370 bytes xv6.pdf | Bin 146682 -> 146568 bytes xv6.ps | 25213 +++++++++++++++++++++++----------------------- 3 files changed, 12728 insertions(+), 12485 deletions(-) diff --git a/xv6-rev2.tar.gz b/xv6-rev2.tar.gz index f535652bff6c13cbaabc8c561ae4400494704a8a..f2826af0c5135ab56ef7fa14b756a1dbe303e8b9 100644 GIT binary patch literal 724370 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�Y!mk~mly7;qLVCK(1`3d+-GdqL-V3GUW&J#3> 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%0Aka^ly~`y7#l+EOw5@~g8WU1y>t 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 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; impstack + 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; totdev, 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; totdev, 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; totdev, 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; totdev, 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\); offsize; 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 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; iphysaddr == 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; papicid;) 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<> 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<> 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<', '?', 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

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