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

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

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

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

ПослС копирования ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec Π² ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ядро отсоСдиняСт области, Ρ€Π°Π½Π΅Π΅ присоСдинСнныС ΠΊ процСссу, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ detachreg. НСсколько ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΡ‹ Π΅Ρ‰Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… дСйствиях, выполняСмых Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ областСй ΠΊΠΎΠΌΠ°Π½Π΄. К рассматриваСмому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ процСсс ΡƒΠΆΠ΅ лишСн ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ контСкста ΠΈ поэтому Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π² дальнСйшСм любой ошибки Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ процСсса ΠΏΠΎ сигналу. Π’Π°ΠΊΠΈΠΌΠΈ ошибками ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ пространству, Π½Π΅ описанному Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ областСй ядра, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ нСдопустимо большой Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ области с ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΠΌΠΈΡΡ адрСсами, ΠΈ Π΄Ρ€. Π―Π΄Ρ€ΠΎ выдСляСт ΠΈ присоСдиняСт ΠΊ процСссу области ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ содСрТимоС исполняСмого Ρ„Π°ΠΉΠ»Π° (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ allocreg, attachreg ΠΈ loadreg, соотвСтствСнно). ΠžΠ±Π»Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… процСсса ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° Π½Π° Π΄Π²Π΅ части: Π΄Π°Π½Π½Ρ‹Π΅, инициализация ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π²ΠΎ врСмя компиляции, ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ компилятором (Β«bssΒ»). ΠžΠ±Π»Π°ΡΡ‚ΡŒ памяти ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ выдСляСтся для ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π—Π°Ρ‚Π΅ΠΌ ядро ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ области Π΄Π°Π½Π½Ρ‹Ρ… для размСщСния Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° Β«bssΒ» (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ growreg) ΠΈ обнуляСт ΠΈΡ… значСния. НапослСдок ядро выдСляСт ΠΈ присоСдиняСт ΠΊ процСссу ΠΎΠ±Π»Π°ΡΡ‚ΡŒ стСка ΠΈ ΠΎΡ‚Π²ΠΎΠ΄ΠΈΡ‚ пространство памяти для хранСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π½Π° страницах, Ρ‚Π΅ ΠΆΠ΅ страницы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎΠ΄ стСк. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² стСкС Π·Π°Π΄Π°Ρ‡ΠΈ.

Π’ пространствС процСсса ядро стираСт адрСса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ контСкстС ΠΎΠ½ΠΈ Ρ‚Π΅Ρ€ΡΡŽΡ‚ своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Однако ΠΈ Π² Π½ΠΎΠ²ΠΎΠΌ контСкстС Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… сигналов ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² силС. Π―Π΄Ρ€ΠΎ устанавливаСт Π² рСгистрах для Ρ€Π΅ΠΆΠΈΠΌΠ° Π·Π°Π΄Π°Ρ‡ΠΈ значСния ΠΈΠ· сохранСнного рСгистрового контСкста, Π² частности ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка (sp) ΠΈ счСтчика ΠΊΠΎΠΌΠ°Π½Π΄ (pc): ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика ΠΊΠΎΠΌΠ°Π½Π΄ Π±Ρ‹Π»ΠΎ занСсСно Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠΌ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„Π°ΠΉΠ»Π°. Для setuid-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ для трассировки процСсса ядро ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ особыС дСйствия, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Π΅Ρ‰Π΅ остановимся Π²ΠΎ врСмя рассмотрСния Π³Π»Π°Π² 8 ΠΈ 11, соотвСтствСнно. НаконСц, ядро запускаСт Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ iput, освобоТдая индСкс, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ namei Π² самом Π½Π°Ρ‡Π°Π»Π΅ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec. Алгоритмы namei ΠΈ iput Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ€ΠΎΠ»ΡŒ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ Ρ‚ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°; состояниС Ρ„Π°ΠΉΠ»Π° Π²ΠΎ врСмя выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° состояниС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Ссли Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ отсутствиС записи ΠΎ Ρ„Π°ΠΉΠ»Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ². По Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ процСсс исполняСт тСкст Π½ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, процСсс остаСтся Ρ‚Π΅ΠΌ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π΄ΠΎ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ; Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π΅ измСнился, ΠΊΠ°ΠΊ Π½Π΅ измСнилось ΠΈ Π΅Π³ΠΎ мСсто Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ процСссов. ИзмСнСнию подвСргся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ контСкст процСсса.


main() {

 int status;

 if (fork() == 0) execl("/bin/date", "date", 0);

 wait(&status);

}

Рисунок 7.21. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec


Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ привСсти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (Рисунок 7.21), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ создаСтся процСсс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ exec. Π‘Ρ€Π°Π·Ρƒ ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fork процСсс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ процСсс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° ΠΊΠΎΠΏΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. К ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π²Ρ‹Π·ΠΎΠ²Π° процСссом-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec Π² Π΅Π³ΠΎ области ΠΊΠΎΠΌΠ°Π½Π΄ находятся инструкции этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² области Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ строки Β«/bin/dateΒ» ΠΈ Β«dateΒ», Π° Π² стСкС β€” записи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Ρ‹ ΠΏΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· exec. Π―Π΄Ρ€ΠΎ ΠΈΡ‰Π΅Ρ‚ Ρ„Π°ΠΉΠ» Β«/bin/dateΒ» Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ² Π΅Π³ΠΎ, ΡƒΠ·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ любой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ прСдставляСт собой Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ для исполнСния. По ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΌ Π² список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² argv, являСтся имя исполняСмого Ρ„Π°ΠΉΠ»Π° (послСдняя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡƒΡ‚ΠΈ поиска Ρ„Π°ΠΉΠ»Π°). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, процСсс ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅, Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ[23]. Π—Π°Ρ‚Π΅ΠΌ ядро ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ строки Β«/bin/dateΒ» ΠΈ Β«dateΒ» Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ структуру хранСния ΠΈ освобоТдаСт области ΠΊΠΎΠΌΠ°Π½Π΄, Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ стСка, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹Π΅ процСссом. ΠŸΡ€ΠΎΡ†Π΅ΡΡΡƒ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ области ΠΊΠΎΠΌΠ°Π½Π΄, Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ стСка, Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ пСрСписываСтся командная сСкция Ρ„Π°ΠΉΠ»Π° Β«/bin/dateΒ», Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… β€” сСкция Π΄Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°. Π―Π΄Ρ€ΠΎ восстанавливаСт ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС это строка символов Β«dateΒ») ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ стСка. Π’Ρ‹Π·Π²Π°Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ exec, процСсс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ старой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Β«dateΒ»; ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Β«dateΒ» Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, процСсс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΉ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exit.

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


#include β€Ήsignal.hβ€Ί

main() {

 int i, *ip;

 extern f(), sigcatch();

 ip = (int *)f; /* присвоСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ip значСния адрСса Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f */

 for (i = 0; i β€Ή 20; i++) signal(i, sigcatch);

 *ip = 1; /* ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π·Π°Ρ‚Π΅Ρ€Π΅Ρ‚ΡŒ адрСс Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f */

 printf("послС присвоСния значСния ip\n");

 f();

}

f() {}

sigcatch(n)

int n;

{

 printf("принят сигнал %d\n", n);

 exit(1);

}

Рисунок 7.22. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Π΅Π΄ΡƒΡ‰Π΅ΠΉ запись Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄


Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ привСсти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (Рисунок 7.22), которая присваиваСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ip Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ адрСса Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π΄Π΅Π»Π°Π΅Ρ‚ распоряТСниС ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ всС сигналы. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° скомпилирована Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… областях, процСсс, ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎ адрСсу Π² ip встрСтит ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ систСмой Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ΠΊΠ°Π·, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π° ΠΎΡ‚ записи. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ AT&T 3B20 ядро посылаСт процСссу сигнал SIGBUS, Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… систСмах Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° посылка Π΄Ρ€ΡƒΠ³ΠΈΡ… сигналов. ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ сигнал ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, Π½Π΅ дойдя Π΄ΠΎ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ main. Однако, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° скомпилирована Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ области (Π² области Π΄Π°Π½Π½Ρ‹Ρ…), ядро Π½Π΅ ΠΏΠΎΠΉΠΌΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ процСсс пытаСтся Π·Π°Ρ‚Π΅Ρ€Π΅Ρ‚ΡŒ адрСс Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f. АдрСс f станСт Ρ€Π°Π²Π½Ρ‹ΠΌ 1. ΠŸΡ€ΠΎΡ†Π΅ΡΡ исполнит ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ main, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° запустит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ f, ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ошибка, связанная с ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΎΠΉ выполнСния Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π―Π΄Ρ€ΠΎ ΠΏΠΎΡˆΠ»Π΅Ρ‚ процСссу сигнал SIGILL ΠΈ процСсс Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ.

РасполоТСниС ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π°Π·Π½Ρ‹Ρ… областях ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ поиск ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ошибок адрСсации. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² Ρ€Π°Π½Π½ΠΈΡ… вСрсиях систСмы UNIX ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π»ΠΎΡΡŒ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ области, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… PDP Ρ€Π°Π·ΠΌΠ΅Ρ€ процСсса Π±Ρ‹Π» сильно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠΌΠ΅Π»ΠΈ мСньший Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ сущСствСнно ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, Ссли ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ. Π’ послСдних вСрсиях систСмы Ρ‚Π°ΠΊΠΈΡ… строгих ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ процСсса Π½Π΅Ρ‚ ΠΈ Π² дальнСйшСм Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠ΄Π½Ρƒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ компиляторами Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ.

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ прСимущСство Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ хранСния ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… состоит Π² возмоТности совмСстного использования областСй процСссами. Если процСсс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ вСсти запись Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ процСсса Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Ρ€ΠΏΠ΅Π²Π°ΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠ°ΠΊ ядро Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΎ ΠΈΡ… Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ сСкции исполняСмого Ρ„Π°ΠΉΠ»Π°. Если ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„Π°ΠΉΠ» исполняСтся нСсколькими процСссами, Π² цСлях экономии памяти ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° всСх. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ядро ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec ΠΎΡ‚Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ процСсса, ΠΎΠ½ΠΎ провСряСт, имССтся Π»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ совмСстного использования процСссами ΠΊΠΎΠΌΠ°Π½Π΄ исполняСмого Ρ„Π°ΠΉΠ»Π°, Ρ‡Ρ‚ΠΎ опрСдСляСтся «магичСским числом» Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Ρ„Π°ΠΉΠ»Π°. Если Π΄Π°, Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° xalloc ядро ΠΈΡ‰Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ с ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ Π² случаС Π΅Π΅ отсутствия (см. Рисунок 7.23).