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

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

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

НапримСр, выполняя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²Ρ‹Π·Π²Π°Π½Π½ΡƒΡŽ ΠΊΠ°ΠΊ:

link("source", "/dir/target");

ядро ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ индСкс для Ρ„Π°ΠΉΠ»Π° Β«sourceΒ», ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π² Π½Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика связСй, Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ индСкса, скаТСм 74, ΠΈ снимаСт с индСкса Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ. Π―Π΄Ρ€ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ индСкс ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Β«dirΒ», ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ для Ρ„Π°ΠΉΠ»Π° Β«targetΒ», ΠΈΡ‰Π΅Ρ‚ свободноС мСсто Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Β«dirΒ» ΠΈ записываСт Π² Π½Π΅Π³ΠΎ имя Ρ„Π°ΠΉΠ»Π° Β«targetΒ» ΠΈ Π½ΠΎΠΌΠ΅Ρ€ индСкса 74. По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ этих дСйствий ΠΎΠ½ΠΎ освобоТдаСт индСкс Ρ„Π°ΠΉΠ»Π° Β«sourceΒ» ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ iput. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика связСй Ρ„Π°ΠΉΠ»Π° Β«sourceΒ» Ρ€Π°Π½ΡŒΡˆΠ΅ Π±Ρ‹Π»ΠΎ Ρ€Π°Π²Π½ΠΎ 1, Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ΠΎ Ρ€Π°Π²Π½ΠΎ 2.

Π‘Ρ‚ΠΎΠΈΡ‚ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ ΠΎ Π΄Π²ΡƒΡ… Ρ‚ΡƒΠΏΠΈΠΊΠΎΠ²Ρ‹Ρ… ситуациях, ΡΠ²ΠΈΠ²ΡˆΠΈΡ…ΡΡ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ процСсс снимаСт с индСкса исходного Ρ„Π°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ послС увСличСния значСния счСтчика связСй. Если Π±Ρ‹ ядро Π½Π΅ снимало с индСкса Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, Π΄Π²Π° процСсса, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

процСсс A: link("a/b/c/d", "e/f/g");

процСсс B: link("e/f", "a/b/c/d/ee");

зашли Π±Ρ‹ Π² Ρ‚ΡƒΠΏΠΈΠΊ (взаимная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°). ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ процСсс A ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» индСкс Ρ„Π°ΠΉΠ»Π° Β«a/b/c/dΒ» Π² Ρ‚ΠΎΡ‚ самый ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° процСсс B ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» индСкс Ρ„Π°ΠΉΠ»Π° Β«e/fΒ». Π€Ρ€Π°Π·Π° Β«Π² Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый ΠΌΠΎΠΌΠ΅Π½Ρ‚Β» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ систСмой достигнуто состояниС, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» искомый индСкс. (Рисунок 5.30 ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ стадии выполнСния процСссов.) Когда ΠΆΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ процСсс A попытаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ индСкс Ρ„Π°ΠΉΠ»Π° Β«e/fΒ», ΠΎΠ½ приостановит своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° индСкс Ρ„Π°ΠΉΠ»Π° Β«fΒ» Π½Π΅ освободится. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя процСсс B пытаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ индСкс ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Β«a/b/c/dΒ» ΠΈ приостанавливаСтся Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ освобоТдСния индСкса Ρ„Π°ΠΉΠ»Π° Β«dΒ». ΠŸΡ€ΠΎΡ†Π΅ΡΡ A Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ индСкс, Π½ΡƒΠΆΠ½Ρ‹ΠΉ процСссу B, Π° процСсс B, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ индСкс, Π½ΡƒΠΆΠ½Ρ‹ΠΉ процСссу A. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ этот классичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ядро освобоТдаСт индСкс исходного Ρ„Π°ΠΉΠ»Π° послС увСличСния значСния счСтчика связСй. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· рСсурсов (индСкс) свободСн ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ рСсурсу, взаимная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ происходит.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π΄Π²Π° процСсса ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΉΡ‚ΠΈ Π² Ρ‚ΡƒΠΏΠΈΠΊ, Ссли с индСкса Π½Π΅ Π±Ρ‹Π»Π° снята Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°. ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ самого сСбя. Если ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

link("a/b/c", "a/b/c/d");

Ρ‚ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ индСкс для Ρ„Π°ΠΉΠ»Π° Β«cΒ»; Ссли Π±Ρ‹ ядро Π½Π΅ снимало Π±Ρ‹ с индСкса Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, процСсс зашСл Π±Ρ‹ Π² Ρ‚ΡƒΠΏΠΈΠΊ, запросив индСкс Β«cΒ» ΠΏΡ€ΠΈ поискС Ρ„Π°ΠΉΠ»Π° Β«dΒ». Если Π±Ρ‹ Π΄Π²Π° процСсса, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ процСсс, Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·-Π·Π° Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ (ΠΈΠ»ΠΈ самоблокировки), Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π±Ρ‹ Π² систСмС? ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ индСксы ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌΠΈ рСсурсами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ систСмой Π·Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ врСмя, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сигнала Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ возобновлСния процСссом своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ (Π³Π»Π°Π²Π° 7). Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, систСма Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Ρ‚ΡƒΠΏΠΈΠΊΠ° Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Если ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ процСссами, Π½Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ со стороны Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов, взаимная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ процСссы Π² систСмС. Однако, Π»ΡŽΠ±Ρ‹Π΅ процСссы, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ²ΡˆΠΈΠ΅ΡΡ ΠΊ этим Ρ„Π°ΠΉΠ»Π°ΠΌ (ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ²ΡˆΠΈΠ΅ΡΡ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ Ρ‡Π΅Ρ€Π΅Π· Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³), Π½Π΅ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΉΠ΄ΡƒΡ‚ Π² Ρ‚ΡƒΠΏΠΈΠΊ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Ρ„Π°ΠΉΠ»Ρ‹ Β«/binΒ» ΠΈΠ»ΠΈ Β«/usr/binΒ» (ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΊΠΎΠΌΠ°Π½Π΄) ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ» Β«/bin/shΒ» (ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ процСссор shell), послСдствия для систСмы Π±ΡƒΠ΄ΡƒΡ‚ Π³ΠΈΠ±Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

5.16 UNLINК

БистСмная функция unlink удаляСт ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° для Ρ„Π°ΠΉΠ»Π°. Бинтаксис Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ unlink:

unlink(pathname);

Π³Π΄Π΅ pathname ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ имя Ρ„Π°ΠΉΠ»Π°, удаляСмоС ΠΈΠ· ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ². Если процСсс Ρ€Π°Π·Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π΄Π°Π½Π½ΡƒΡŽ связь Ρ„Π°ΠΉΠ»Π° с ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ unlink, ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π² Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ» Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ доступСн, ΠΏΠΎΠΊΠ° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π½Π΅ создана Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° запись с этим ΠΈΠΌΠ΅Π½Π΅ΠΌ. НапримСр, ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

unlink("myfile");

fd = open("myfile", O_RDONLY);

функция open Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π΅Π΅ выполнСния Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ„Π°ΠΉΠ»Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ myfile. Если удаляСмоС имя являСтся послСднСй связью Ρ„Π°ΠΉΠ»Π° с ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ, ядро Π² ΠΈΡ‚ΠΎΠ³Π΅ освобоТдаСт всС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ Ρ„Π°ΠΉΠ»Π°. Однако, Ссли Ρƒ Ρ„Π°ΠΉΠ»Π° Π±Ρ‹Π»ΠΎ нСсколько связСй, ΠΎΠ½ остаСтся всС Π΅Ρ‰Π΅ доступным ΠΏΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ.

АрхитСктура ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы UNIX (Π›ΠŸ) - pic_40.png

Рисунок 5.30. Взаимная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° процСссов ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ link

На РисункС 5.31 прСдставлСн Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ unlink. Π‘Π½Π°Ρ‡Π°Π»Π° для поиска Ρ„Π°ΠΉΠ»Π° с удаляСмой связью ядро ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° namei, которая вмСсто индСкса Ρ„Π°ΠΉΠ»Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π―Π΄Ρ€ΠΎ обращаСтся ΠΊ индСксу Ρ„Π°ΠΉΠ»Π° Π² памяти, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ iget. (ΠžΡΠΎΠ±Ρ‹ΠΉ случай, связанный с ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°Β».Β», Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π² ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΈ). ПослС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ отсутствия ошибок ΠΈ (для исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ²) удалСния ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ областСй записСй с Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ раздСляСмым тСкстом (Π³Π»Π°Π²Π° 7) ядро стираСт имя Ρ„Π°ΠΉΠ»Π° ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°: ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° индСкса Ρ€Π°Π²Π½Ρ‹ΠΌ 0 достаточно для очистки мСста, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π—Π°Ρ‚Π΅ΠΌ ядро ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ запись ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π½Π° диск, гарантируя Ρ‚Π΅ΠΌ самым, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ своим ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ» ΡƒΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ доступСн, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика связСй ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° iput освобоТдаСт Π² памяти индСксы Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈ Ρ„Π°ΠΉΠ»Π° с удаляСмой связью.

ΠŸΡ€ΠΈ освобоТдСнии Π² памяти ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ iput индСкса Ρ„Π°ΠΉΠ»Π° с удаляСмой связью, Ссли значСния счСтчика ссылок ΠΈ счСтчика связСй становятся Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ 0, ядро Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ дисковыС Π±Π»ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π». На этот индСкс большС Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΈΠΌΠ΅Π½ ΠΈ индСкс Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π΅Π½. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ дисковыС Π±Π»ΠΎΠΊΠΈ, ядро Π² Ρ†ΠΈΠΊΠ»Π΅ просматриваСт Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ содСрТимого индСкса, освобоТдая всС Π±Π»ΠΎΠΊΠΈ прямой адрСсации Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ (Π² соотвСтствии с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ free). Π§Ρ‚ΠΎ касаСтся Π±Π»ΠΎΠΊΠΎΠ² косвСнной адрСсации, ядро освобоТдаСт всС Π±Π»ΠΎΠΊΠΈ, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… уровнях косвСнности, рСкурсивно, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π±Π»ΠΎΠΊΠΈ с мСньшим ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ. Оно обнуляСт Π½ΠΎΠΌΠ΅Ρ€Π° Π±Π»ΠΎΠΊΠΎΠ² Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ содСрТимого индСкса ΠΈ устанавливаСт Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° Π² индСксС Ρ€Π°Π²Π½Ρ‹ΠΌ 0. Π—Π°Ρ‚Π΅ΠΌ ядро ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Π² индСксС ΠΏΠΎΠ»Π΅ Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»Π°, указывая Ρ‚Π΅ΠΌ самым, Ρ‡Ρ‚ΠΎ индСкс свободСн, ΠΈ освобоТдаСт индСкс ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ ifree. Π―Π΄Ρ€ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΡŽ Π½Π° дискС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ дисковая копия индСкса всС Π΅Ρ‰Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ индСкс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ; Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ индСкс свободСн для назначСния Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ.

Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ unlink

входная информация: имя Ρ„Π°ΠΉΠ»Π°

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

{

Β ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ индСкс для Ρ„Π°ΠΉΠ»Π° с удаляСмой связью (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ namei);

Β /* Ссли Π² качСствС Ρ„Π°ΠΉΠ»Π° выступаСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ каталог… */

Β if (послСднСй ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΉ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° являСтся ".")

Β Β  ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика ссылок Π² индСксС;

Β else
Β ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ индСкс для Ρ„Π°ΠΉΠ»Π° с удаляСмой связью (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ iget);

Β if (Ρ„Π°ΠΉΠ» являСтся ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ, Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ являСтся ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ)
Β {

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

Β Β return (ΠΎΡˆΠΈΠ±ΠΊΡƒ);

Β }

Β if (Ρ„Π°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ‚ раздСляСмый тСкст ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика связСй Ρ€Π°Π²Π½ΠΎ 1)