Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «АрхитСктура ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы UNIX (Π›ΠŸ)Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 25

Автор Π‘Π°Ρ… ΠœΠΎΡ€ΠΈΡ Π”ΠΆ.

Β  ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡƒΡ‚ΠΈ поиска;

Β Β ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ соотвСтствиС Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ индСкса ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ ΠΈ ΠΏΡ€Π°Π²Π° доступа;

Β Β if (Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс соотвСтствуСт ΠΊΠΎΡ€Π½ΡŽ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠΌΠ΅Π½ΠΈ Β«..Β»)
continue; /* Ρ†ΠΈΠΊΠ» с условиСм продолТСния */

Β Β ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ (Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс), повторяя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ bmap, bread ΠΈ brelse;

Β Β if (ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° соотвСтствуСт записи Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ (Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ индСксС)) {

Β Β  ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ индСкса для совпавшСй ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹;

Β  Β ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ iput);

Β  Β Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс = индСксу совпавшСй ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ iget);

Β  }

Β Β else /* ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° отсутствуСт Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ */
Β return (Π½Π΅Ρ‚ индСкса);

Β }

Β return (Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс);

}

Рисунок 4.11. Алгоритм прСвращСния ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡƒΡ‚ΠΈ поиска Π² индСкс

Алгоритм namei ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ составного ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡƒΡ‚ΠΈ поиска ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ индСксы; Π½Π°Π·ΠΎΠ²Π΅ΠΌ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ индСксами. ИндСкс ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΎΡ‚ΠΊΡƒΠ΄Π° поиск Π±Π΅Ρ€Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ, являСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ индСксом. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ядро провСряСт совпадСниС Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ индСкса с индСксом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, Π½Π°Ρ€ΡƒΡˆΠΈΠ»ΠΎΡΡŒ Π±Ρ‹ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ»Ρ‹, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΡΡ‚ΡŒΡΠΌΠΈ Π΄Π΅Ρ€Π΅Π²Π° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ поиск Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ (Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ нСдостаточно). Код ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ для процСсса Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄Ρƒ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠ³ΠΎ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° Ρ„Π°ΠΉΠ»Π° ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ прСдоставлСно ΠΏΡ€Π°Π²ΠΎ исполнСния, Π»ΠΈΠ±ΠΎ поиск Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ всСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, поиск Π½Π΅ получится.

Π―Π΄Ρ€ΠΎ выполняСт Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск Ρ„Π°ΠΉΠ»Π° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ассоциированном с Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ индСксом, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ Π½Π°ΠΉΡ‚ΠΈ для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡƒΡ‚ΠΈ поиска ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ запись Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· адрСса смСщСния Π² Π±Π°ΠΉΡ‚Π°Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° (начиная с 0), ΠΎΠ½ΠΎ опрСдСляСт мСстополоТСниС дискового Π±Π»ΠΎΠΊΠ° Π² соотвСтствии с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ bmap ΠΈ считываСт этот Π±Π»ΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ bread. По ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ядро ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π² Π±Π»ΠΎΠΊΠ΅ поиск, прСдставляя содСрТимоС Π±Π»ΠΎΠΊΠ° ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ записСй ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. ΠŸΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ совпадСния ядро пСрСписываСт Π½ΠΎΠΌΠ΅Ρ€ индСкса ΠΈΠ· Π΄Π°Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π°, освобоТдаСт Π±Π»ΠΎΠΊ (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ brelse) ΠΈ старый Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ iput), ΠΈ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ индСкс Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ iget). Новый индСкс становится Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ индСксом. Если ядро Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π±Π»ΠΎΠΊΠ΅ подходящСго ΠΈΠΌΠ΅Π½ΠΈ, ΠΎΠ½ΠΎ освобоТдаСт Π±Π»ΠΎΠΊ, прибавляСт ΠΊ адрСсу смСщСния число Π±Π°ΠΉΡ‚ΠΎΠ² Π² Π±Π»ΠΎΠΊΠ΅, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ адрСс смСщСния Π² Π½ΠΎΠΌΠ΅Ρ€ дискового Π±Π»ΠΎΠΊΠ° (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ bmap) ΠΈ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ. Π―Π΄Ρ€ΠΎ повторяСт эту ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° имя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΡƒΡ‚ΠΈ поиска Π½Π΅ совпадСт с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π»ΠΈΠ±ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут ΠΊΠΎΠ½Π΅Ρ† ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ процСссу Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Β«/etc/passwdΒ». Когда ядро Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ имя Ρ„Π°ΠΉΠ»Π°, ΠΎΠ½ΠΎ наталкиваСтся Π½Π° Π½Π°ΠΊΠ»ΠΎΠ½Π½ΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ (Β«/Β») ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ индСкс корня систСмы. Π‘Π΄Π΅Π»Π°Π² ΠΊΠΎΡ€Π΅Π½ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ индСксом, ядро наталкиваСтся Π½Π° строку Β«etcΒ». ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ² соотвСтствиС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ индСкса ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ (Β«/Β») ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρƒ процСсса ΠΏΡ€Π°Π²Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ поиск Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ядро ΠΈΡ‰Π΅Ρ‚ Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ Β«etcΒ». Оно просматриваСт ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π±Π»ΠΎΠΊ Π·Π° Π±Π»ΠΎΠΊΠΎΠΌ ΠΈ исслСдуСт ΠΊΠ°ΠΆΠ΄ΡƒΡŽ запись Π² Π±Π»ΠΎΠΊΠ΅, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° для Ρ„Π°ΠΉΠ»Π° Β«etcΒ». Найдя эту Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π°, ядро освобоТдаСт индСкс, ΠΎΡ‚Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ для корня (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ iput), ΠΈ выдСляСт индСкс Ρ„Π°ΠΉΠ»Ρƒ Β«etcΒ» (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ iget) Π² соотвСтствии с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ индСкса Π² ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΉ записи. Π£Π΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΠ²ΡˆΠΈΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Β«etcΒ» являСтся ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΡ€Π°Π²Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ поиск, ядро просматриваСт ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Β«etcΒ» Π±Π»ΠΎΠΊ Π·Π° Π±Π»ΠΎΠΊΠΎΠΌ Π² поисках записи, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ„Π°ΠΉΠ»Ρƒ Β«passwdΒ». Если ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Рисунок 4.10, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ запись ΠΎ Ρ„Π°ΠΉΠ»Π΅ Β«passwdΒ» являСтся дСвятой записью Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ² Π΅Π΅, ядро освобоТдаСт индСкс, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»Ρƒ Β«etcΒ», ΠΈ выдСляСт индСкс Ρ„Π°ΠΉΠ»Ρƒ Β«passwdΒ», послС Ρ‡Π΅Π³ΠΎ β€” ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ имя ΠΏΡƒΡ‚ΠΈ поиска исчСрпано β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ этот индСкс процСссу.

ЕстСствСнно Π·Π°Π΄Π°Ρ‚ΡŒ вопрос ΠΎΠ± эффСктивности Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ поиска Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ записи, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡƒΡ‚ΠΈ поиска. Π ΠΈΡ‡ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ (см. [Ritchie 78b], стр.1968), Ρ‡Ρ‚ΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск эффСктивСн, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ€Π°Π½Π½ΠΈΠ΅ вСрсии систСмы UNIX Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π΅Ρ‰Π΅ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… с большим объСмом памяти, поэтому Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΏΠΎΡ€ Π±Ρ‹Π» сдСлан Π½Π° простыС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ поиска. Π‘ΠΎΠ»Π΅Π΅ слоТныС схСмы поиска ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈ Π±Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΉ, Π±ΠΎΠ»Π΅Π΅ слоТной, структуры ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π±Ρ‹ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π΄Π°ΠΆΠ΅ Π² Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ… ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со схСмой Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ поиска.

4.5 Π‘Π£ΠŸΠ•Π Π‘Π›ΠžΠš

Π”ΠΎ сих ΠΏΠΎΡ€ Π² этой Π³Π»Π°Π²Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°Π»Π°ΡΡŒ структура Ρ„Π°ΠΉΠ»Π°, ΠΏΡ€ΠΈ этом ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ индСкс ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ связывался с Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΈ Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ дисковыС Π±Π»ΠΎΠΊΠΈ, содСрТащиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… описываСтся, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ядро Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ индСксы ΠΈ дисковыС Π±Π»ΠΎΠΊΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ эти Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, рассмотрим структуру супСрблока.

Π‘ΡƒΠΏΠ΅Ρ€Π±Π»ΠΎΠΊ состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ:

β€’ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы,

β€’ количСство свободных Π±Π»ΠΎΠΊΠΎΠ² Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС,

β€’ список свободных Π±Π»ΠΎΠΊΠΎΠ², ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС,

β€’ индСкс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ свободного Π±Π»ΠΎΠΊΠ° Π² спискС свободных Π±Π»ΠΎΠΊΠΎΠ²,

β€’ Ρ€Π°Π·ΠΌΠ΅Ρ€ списка индСксов,

β€’ количСство свободных индСксов Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС,

β€’ список свободных индСксов Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС,

β€’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ свободный индСкс Π² спискС свободных индСксов,

β€’ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ поля для списка свободных Π±Π»ΠΎΠΊΠΎΠ² ΠΈ свободных индСксов,

β€’ Ρ„Π»Π°Π³, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π² супСрблок Π±Ρ‹Π»ΠΈ внСсСны измСнСния.

Π’ ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части Π³Π»Π°Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ объяснСно, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ массивами, указатСлями ΠΈ Π·Π°ΠΌΠΊΠ°ΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π―Π΄Ρ€ΠΎ пСриодичСски пСрСписываСт супСрблок Π½Π° диск, Ссли Π² супСрблок Π±Ρ‹Π»ΠΈ внСсСны измСнСния, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π»Π°ΡΡŒ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, хранящимися Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС.

4.6 ΠΠΠ—ΠΠΠ§Π•ΠΠ˜Π• Π˜ΠΠ”Π•ΠšΠ‘Π ΠΠžΠ’ΠžΠœΠ£ ЀАЙЛУ

Для выдСлСния извСстного индСкса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ индСкса, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ собствСнный Π½ΠΎΠΌΠ΅Ρ€ (ΠΈ Π½ΠΎΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы), ядро ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ iget. Π’ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ namei, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ядро опрСдСляСт Π½ΠΎΠΌΠ΅Ρ€ индСкса, устанавливая соотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΉ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡƒΡ‚ΠΈ поиска ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π”Ρ€ΡƒΠ³ΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ialloc, выполняСт Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ дискового индСкса вновь создаваСмому Ρ„Π°ΠΉΠ»Ρƒ.

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π² Π³Π»Π°Π²Π΅ 2, Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС имССтся Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ список индСксов. ИндСкс считаСтся свободным, Ссли ΠΏΠΎΠ»Π΅ Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° Ρ…Ρ€Π°Π½ΠΈΡ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если процСссу понадобился Π½ΠΎΠ²Ρ‹ΠΉ индСкс, ядро тСорСтичСски ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ произвСсти поиск свободного индСкса Π² спискС индСксов. Однако, Ρ‚Π°ΠΊΠΎΠΉ поиск обошСлся Π±Ρ‹ Π΄ΠΎΡ€ΠΎΠ³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π» Π±Ρ‹ ΠΏΠΎ мСньшСй ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄Π½Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ чтСния (допустим, с диска) Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ индСкс. Для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² супСрблокС Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы хранится массив Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² свободных индСксов Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС.

Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ialloc /* Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ индСкса */

входная информация: файловая систСма

выходная информация: Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ индСкс

{

Β doΒ 
{