- | - P() | - = -1 | - | () | !! v 12.10. wakeup - V , 0; , , CP. , , " ". - , , , - ; , " ", - . 12.13. A/ A B/ B +----------------------------------------------------------- | P( SA); - | - - | - - | - - | - P( SB); | - - | - - | - - | - P( SA); | - | - | P( SB); | | v !! 12.11. - 373 0, CP "". , . 12.3.3  , . , wait - , - , , , , . 12.3.3.1  getblk, 3. - : , - . - . , 200 , , ; P, , , , V. - , . - -- A/ A B/ B +----------------------------------------------------------- | P( SA); - | - - | - P( SB); | - - | - - | - (! CP( SA)) | - { | - V( SB); | - - | - | - } | P( SB); | v 12.12. P , , - () . , , , -- ; - 374 . - . 12.14 getblk, . , P - , -. - , , , , , V. -, . , -. ( A) , - P , , - - , . A , - CP; , - . A , , CP, , , , - P, . , - . | | P(); | ( 0) | | | | CP() --- | | | . | | . | | ( ) v 12.13. , CP - - , , , . A - , -, , - P . P - , , CP . - A . , - - , A - (*). - --------------------------------------- (*) - - , V, - , - . 375 ( , ) , CP. - , , - . , +------------------------------------------------------------+ | getblk /* */ | | : | | | | : , | | | | { | | ( ) | | { | | P( -); | | ( -) | | { | | ( CP( ) - | | ) /* */ | | { | | V( -); | | P( ); /* -| | * | | */ | | ( CP( -) -| | ) | | { | | V( ); | | ; /* "" | | */ | | } | | ( | | ) | | { | | V( ); | | V( -); | | } | | } | | ( CP( -| | ) ) | | ; /* " " */ | | ; | | ; | | V( ); | | V( -); | | ; | | } | | /* - | | * | | */ | | /* -| | * | | */ | | } | | } | +------------------------------------------------------------+ 12.14. 376 , , , - . A, - , , , , ; - , . - , A . +------------------------------------------------------------+ | wait | | { | | (;;) /* */ | | { | | -: | | ( " | | ") | | ; | | P(zombie_semaphore); /* - 0 */| | } | | } | +------------------------------------------------------------+ 12.15. wait . 12.3.3.2 Wait 7 , wait . wait , exit; , , , - wait, , - . - , zombie_semaphore - . wait/exit ( 12.15). , V, - , wait. , wait, - , . - exit wait , - exit , , V, - , - . - . 12.3.3.3  - AT&T 3B20 - , P V (. [Bach 84]). 10 , , - , ( - 377 20). : P( ); (); V( ); , - , . , . , - , . , , , , - , . - , , ; - . 3B20A - , . , : , . , . 3B20A - , . 12.3.3.4  , , (. 6). , , - , . - , . - , . , , , A, . , , , A. B, - . A - , A , . , ( , ) (, , ) . ; , - , . ; . , . 378 12.4 TUNIS Tunis - UNIX, , Concurrent Euclid, , . Tunis , , , , . , . , , . - , , -, - ( P V - ), -, . , , , (. [Holt 83], .190). Tunis UNIX . 12.5  - UNIX: , - , () , , . , , , . , -, , . -, , - , - ; , , . - , , : , . , - - (., , [Beck 85]), , - . 12.6  1. - , - , . , (- ) . , ? ? 379 2. , - , ( 12.6). P-V . - ? 3. CP ( P), P. 4. , P V ( 12.8 12.9) - . ? 5. " " : while (! CP()); P ? ( : , P ?) 6. getblk, 3. - , - . *7. , , - . - . *8. , , - 0 - - . , , . - , P V. . , - , ? *9. , . ? , , - ? 10. ( 8). . ? 380