4.  2, UNIX - . , , , , , , - . , - , . , . UNIX, , . 4.1 , 4.2 - - , . 4.3 - , - , 4.4 . 4.5 , 4.6 4.7 - . , 4.8 , . , , - , ( 4.1). iget , , iput . bmap , . namei - , iget, iput +--------------------+------------------+-----------------+ | namei | | | +--------------------+ alloc free | ialloc ifree | | iget iput bmap | | | +--------------------+------------------+-----------------+ +---------------------------------------------------------+ | | +---------------------------------------------------------+ | getblk brelse bread breada bwrite | +---------------------------------------------------------+ 4.1. bmap. alloc free - , ialloc ifree . 4.1  4.1.1  59 , . : * . - "" , . . * . , , , - , ( , " - "). * . : , ; , , - . , - - . * , : , , . * , , . - 5. * , . , . - , , . * . - , , 0, 1 . , - 1 1000 , 1001 . - , . +---------------------------------------+ | mjb | | os | | - | | rwxr-xr-x | | 23 1984 13:45 | | 22 1984 10:30 | | 23 1984 13:30 | | 6030 | | | +---------------------------------------+ 4.2. 4.2 . , - "mjb" - 6030 . "mjb" , ; "os" - , . - 23 1984 13:45, 22 1984 10:30. 23 1984 13:30, . . - 60 . , - . , , . , . , , : * , - , - - , - , - , - (. 5.15). * , . * . (. 2.2.1), - . . * . -- , - - - . - . , - -, . * , (, ). , , - , . , - ; , , , . - . , - . - , - . , , - , . , - 0, , . - , - . , - , . , ; , . 4.1.2  . iget ( 4.3); getblk . - - . , 61 +------------------------------------------------------------+ | iget | | : | | : | | { | | | | { | | ( ) | | { | | ( ) | | { | | ( ); | | ; /* */ | | } | | /* | | ( 5) */ | | ( ) | | ; | | ; | | (); | | } | | /* */ | | ( ) | | (); | | ; | | ; | | -, ;| | ( bread); | | (, | | 1); | | (); | | } | | } | +------------------------------------------------------------+ 4.3. . , . , , , - . = (( - 1) / ) + + . , , 2 - 8 , 8 2, 9 - 3. 16 , - 8 9 2, 17 3. , , bread ( 2), - : (( - 1) ( )) * * 62 , 64 8 , 8 448 . - , - 1. - , , , . . - , - - ( - ). : - . - . , 5.1 , - , . , , , . , - . , ; , . , . - open , 5. iget, , - , . , , , . - open close , . , , - , . - , "" . , . - , , , - . , , . , - (A) - , (B). , A , , . B , "" - ( A), . A , , - . , 0, , - : . - . , , iget , . , 1 , . . 63 , , . 5 - . +------------------------------------------------------------+ | iput /* */| | : | | : | | { | | ; | | 1 ; | | ( == 0) | | { | | ( == 0) | | { | | ( | | free, 4.7); | | 0; | | ( ifree, 4.6); | | } | | ( | | ) | | ; | | ; | | } | | ; | | } | +------------------------------------------------------------+ 4.4. 4.1.3  , ( iput, 4.4), . 0, , . , - , - . - , , . - , 0. 4.2  , . , . ( ), . , . , - - 64 , . -------------+----------+----------+----------+------------- ---------- | A | B | C | ----------- -------------+----------+----------+----------+------------- 40 50 60 70 -------------+----------+----------+----------+---------+--- ---------- | A | | C | B | -- -------------+----------+----------+----------+---------+--- 40 50 60 70 81 4.5. , , , A, B C, 10 , . 5 , B, B , 15 . - , B, , 10 ( 4.5). , , , - . , . - . - , , , . 1 , , - 10 , 10 , , - 100 , 100 . , . , - , , 4.6. V UNIX 13 , - . , " " , , - . , " ", , . , , , - , . , " - ", , , " ", - . , - , , . - , 1 32 (4 ). 256 - . ( 4.7), 65 16 , 10 1 , 1 1 . , " " - 32 , 4 (2 - 32). , . , - , . : - , . - , , - - +-------------+ +-----+ | . +----------------------------------->| | | 0| | | +-------------+ +-----+ | . +-----------------+ +-----+ | 1| +----------------->| | +-------------+ | | | . +-----------------+ +-----+ | 2| | +-----+ +-------------+ +----------------->| | | . +-----------------+ | | | 3| | +-----+ +-------------+ | +-----+ | . | +----------------->| | | 4| | | +-------------+ +-----+ | . | - | 5| - +-------------+ - | . | - | 6| - +-------------+ +-----+ | . | +----------------->| | | 7| | | | +-------------+ +--------------+ +-----+ | . | | +-----+ | 8| | +----------------->| | +-------------+ | | | | | . +--+ +------+ | +-----+ | 9| +------+----+ +-----+ +-------------+ +->+------+ +------>| | | +--+ +------+ | | | | | +------+ | +-----+ +-------------+ +->+------+ +->+------+ | +-----+ | +--+ +------+ | +------+ | +->| | | | +------+ | +------+ | | | | +-------------+ +------+-+ +------+---+ | +-----+ | +--+ +------+ +------+ +---+ | | +->+------+ +->+------+ +>+------+-+ +-------------+ +------+ | +------+ | +------+ +------+-+ +------+ | +------+ +------+ +------+-+ +------+ +------+ +------+ +------+ 4.6. 66 +----------------------------------------------------------+ | 10 1 = 10 | | 1 256 | | = 256 | | 1 256 | | = 64 | | 1 256 | | = 16 | +----------------------------------------------------------+ 4.7. 1 +------------------------------------------------------------+ | bmap /* | | | | */ | | : (1) | | (2) | | : (1) | | (2) | | (3) - | | (4) | | { | | | | ; | | - | | ; /* 2 */ | | - | | ; /* 3 */ | | , | | ; /* 4 */ | | ; | | ( ) | | { | | | | | | ; | | | | ; | | , - | | | | ( brelse); | | ( ) | | ( ); | | (- | | bread); | | | | ; | | } | | } | +------------------------------------------------------------+ 4.8. 67 . 4.8 bmap . ( 4.9) , - 1024 . , - , 9000, , 8 ( 0). 367; 808- ( 0) 9000- . - , 350000 , , - 9156. 256 , , - +-------------+ | 4096 | +-------------+ | 228 | +-------------+ | 45423 | +-------------+ | 0 | +-------------+ | 0 | +-------------+ +----------->+------+ | 11111 | | | | +-------------+ | | | | 0 | | | | +-------------+ | +------+ | 101 | | 367 +-------------+ | - | 367 +----------------------+ +-------------+ | 0 | +->+------+ +-------------+ +---->+------+ | | | +-->+------+ | 428 | | | 331 +--+ | | | | | +-------------+ | 0+------+ 75+------+ | | | | 9156 +--+ | | | 3333 +--+ | | +-------------+ +------+ +------+ +------+ | 824 | 9156 | | 3333 +-------------+ +------+ - 331 4.9. , 272384 (256 + 10); , 350000 - 77616. - 256 , 350000 - , 331. 1 , 77616 75- , 3333. , 350000 3333 816. 68 4.9 , 0 , - . , . . - , lseek write (. ). , - read, . , - , , - . , - , . ? , , , , , , . , [Mullender 84], UNIX , - 10 1 ! (*) 10 , , , . , . - . BSD 4.2 [McKusick 84] , , , . , BSD - 4 8 . , , - . , 8 , 12 1 . - (4 ) ; - . , , - , , ; - 4 45% [McKusick 84]. BSD () - . , . - 5. - (. [Mullender 84]). - , , - , - . , , . --------------------------------------- (*) 19978 , - 85% 8 48% - 1 . , , UNIX . 69