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

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

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

main(argc,argv)

int argc;

char *argv[];

{

 execl(argv[0], argv[0], 0);

}

Рисунок 7.36


21. ΠŸΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec являСтся имя (послСдняя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡƒΡ‚ΠΈ поиска) исполняСмого процСссом Ρ„Π°ΠΉΠ»Π°. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½Π° РисункС 7.37? Каков Π±ΡƒΠ΄Π΅Ρ‚ эффСкт, Ссли Π² качСствС Ρ„Π°ΠΉΠ»Π° "a.out" выступит Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ трансляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½Π° РисункС 7.36?


main() {

 if (fork() == 0) {

  execl("a.out", 0);

  printf("Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec\n");

 }

}

Рисунок 7.37


22. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² языкС Π‘ΠΈ поддСрТиваСтся Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… "read-only" (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния), ΠΏΡ€ΠΈΡ‡Π΅ΠΌ процСсс, ΠΏΡ‹Ρ‚Π°ΡŽΡ‰ΠΈΠΉΡΡ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΏΠΎΠ»Π΅ с этим Ρ‚ΠΈΠΏΠΎΠΌ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΠ°Π· систСмы Π·Π°Ρ‰ΠΈΡ‚Ρ‹. ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°. (НамСк: сравнитС это понятиС с понятиСм "раздСляСмая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄".) Π’ ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ядра потрСбуСтся внСсти измСнСния? КакиС Π΅Ρ‰Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ с ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ?

23. ΠšΠ°ΠΊΠΈΠ΅ измСнСния ΠΈΠΌΠ΅ΡŽΡ‚ мСсто Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… open, chmod, unlink ΠΈ unmount ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… установлСн Ρ€Π΅ΠΆΠΈΠΌ "sticky-bit"? КакиС дСйствия, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, слСдуСт ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ядру, ΠΊΠΎΠ³Π΄Π° с Ρ„Π°ΠΉΠ»ΠΎΠΌ разрываСтся связь?

24. Π‘ΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ являСтся СдинствСнным ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ ΠΏΡ€Π°Π²ΠΎ Π½Π° запись Π² Ρ„Π°ΠΉΠ» ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ "/etc/passwd", благодаря Ρ‡Π΅ΠΌΡƒ содСрТимоС Ρ„Π°ΠΉΠ»Π° прСдохраняСтся ΠΎΡ‚ ΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ случайной ΠΏΠΎΡ€Ρ‡ΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° passwd Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ свой собствСнный ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, защищая ΠΎΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ‡ΡƒΠΆΠΈΠ΅ записи. Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?

*25. ΠŸΠΎΡΡΠ½ΠΈΡ‚Π΅, какая ΡƒΠ³Ρ€ΠΎΠ·Π° бСзопасности хранСния Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, Ссли setuid-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π° ΠΎΡ‚ записи.

26. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ "a.out" β€” имя исполняСмого Ρ„Π°ΠΉΠ»Π°:


chmod 4777 a.out

chown root a.out


Команда chmod "Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚" Π±ΠΈΡ‚ setuid (4 Π² 4777); ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ "root" Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ являСтся ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния этой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ?

27. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, прСдставлСнной Π½Π° РисункС 7.38? ΠŸΠΎΡΡΠ½ΠΈΡ‚Π΅ свой ΠΎΡ‚Π²Π΅Ρ‚.


main() {

 char *endpt;

 char *sbrk();

 int brk();

 endpt = sbrk(0);

 printf("endpt = %ud послС sbrk\n", (int) endpt);

 while (endpt--) {

  if (brk(endpt) == -1) {

   printf("brk с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ %ud Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ\n", endpt);

   exit();

  }

 }

}

Рисунок 7.38

28. Π‘иблиотСчная ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° malloc ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… процСсса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ brk, Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° free освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ malloc. Бинтаксис Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ:


ptr = malloc(size);

free(ptr);


Π³Π΄Π΅ size β€” Ρ†Π΅Π»ΠΎΠ΅ число Π±Π΅Π· Π·Π½Π°ΠΊΠ°, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅Π΅ количСство выдСляСмых Π±Π°ΠΉΡ‚ памяти, Π° ptr β€” символьная ссылка Π½Π° вновь Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ пространство. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ free, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ptr Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ malloc. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ эти ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

29. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, прСдставлСнной Π½Π° РисункС 7.39? Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ, прСдусмотрСнными Π² систСмном описании.


main() {

 int i;

 char *cp;

 extern char *sbrk();

 cp = sbrk(10);

 for (i = 0; i β€Ή 10; i++) *cp++ = 'a' + i;

 sbrk(-10);

 cp = sbrk(10);

 for (i = 0; i β€Ή 10; i++) printf("char %d = %c\n", i, *cp++);

}

Рисунок 7.39. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ sbrk

30. ΠšΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ процСссор shell ΡƒΠ·Π½Π°Π΅Ρ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» исполняСмый, ΠΊΠΎΠ³Π΄Π° для выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ создаСт Π½ΠΎΠ²Ρ‹ΠΉ процСсс? Если Ρ„Π°ΠΉΠ» исполняСмый, Ρ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ, создан Π»ΠΈ ΠΎΠ½ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ трансляции исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ ΠΆΠ΅ прСдставляСт собой Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄ языка shell? Π’ ΠΊΠ°ΠΊΠΎΠΌ порядкС слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… условий?

31. Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΌ языкС shell символы "β€Ίβ€Ί" ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для направлСния Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ» с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ спСцификациСй, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΌΠ°Π½Π΄Π°: run β€Ίβ€Ίoutfile ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ "outfile" (Π° Π² случаС отсутствия Ρ„Π°ΠΉΠ»Π° с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ создаСт Π΅Π³ΠΎ) ΠΈ записываСт Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ эта ΠΊΠΎΠΌΠ°Π½Π΄Π°.


main() { exit(0); }

Рисунок 7.40

32. ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ языка shell провСряСт ΠΊΠΎΠ΄, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ exit, воспринимая Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ "истину", Π° любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ "лоТь" (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ с языком Π‘ΠΈ). ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ», ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° РисункС 7.40, ΠΈΠΌΠ΅Π΅Ρ‚ имя "truth". ΠŸΠΎΡΡΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° shell Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄:


while truth

do

truth&

done


33. Π’опрос ΠΏΠΎ Рисунку 7.29: Π’ связи с Ρ‡Π΅ΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² создании процСссов для ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π²ΡƒΡ…ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ порядкС?

34. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ основного Ρ†ΠΈΠΊΠ»Π° процСссора shell Π² части ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ². Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ случайноС число ΠΊΠ°Π½Π°Π»ΠΎΠ², ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС.

35. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ срСды PATH описываСт порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ shell'Ρƒ слСдуСт ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ Π² поисках исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ². Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… функциях execlp ΠΈ execvp пСрСчислСнныС Π² PATH ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ ΠΊ ΠΈΠΌΠ΅Π½Π°ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с символа "/". Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

*36. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ shell Π² поисках исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π΅ обращался ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ, ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ срСды PATH. Какая ΡƒΠ³Ρ€ΠΎΠ·Π° бСзопасности хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ, Ссли shell попытаСтся ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°?

37. ΠšΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ shell ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ cd (ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³)? КакиС дСйствия ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ shell Π² процСссС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки: cd pathname&?

38. ΠšΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° клавиши "delete" ΠΈΠ»ΠΈ "break", всСм процСссам, входящим Π² Π³Ρ€ΡƒΠΏΠΏΡƒ рСгистрационного shell'Π°, Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ посылаСт сигнал ΠΎ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС процСссы, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Π΅ shell'ΠΎΠΌ, Π±Π΅Π· Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· систСмы. КакиС ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡ Π² связи с этим слСдуСт произвСсти Π² Ρ‚Π΅Π»Π΅ основного Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ shell (Рисунок 7.28)?

39. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ nohup command_line ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ дСйствиС сигналов ΠΎ "зависании" ΠΈ ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ (quit) Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ процСссов, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку (command_line). Как эта ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² основном Ρ†ΠΈΠΊΠ»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ shell?

40. Π Π°ΡΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄ языка shell:


nroff -mm bigfile1 β€Ί big1out&

nroff -mm bigfile2 β€Ί big2out


ΠΈ вновь обратимся ΠΊ основному Ρ†ΠΈΠΊΠ»Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ shell (Рисунок 7.28). Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ nroff Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Ρ€Π°Π½ΡŒΡˆΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ? КакиС измСнСния слСдуСт внСсти Π² основной Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ shell Π½Π° этот случай?

41. Π§Π°ΡΡ‚ΠΎ Π²ΠΎ врСмя выполнСния ΠΈΠ· shell'Π° Π½Π΅ протСстированных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ появляСтся сообщСниС ΠΎΠ± ошибкС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π°: "Bus error β€” core dumped" (Ошибка Π² магистрали β€” содСрТимоС памяти ΡΠ±Ρ€ΠΎΡˆΠ΅Π½ΠΎ Π½Π° внСшний Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒ). ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ нСдопустимыС дСйствия; ΠΎΡ‚ΠΊΡƒΠ΄Π° shell ΡƒΠ·Π½Π°Π΅Ρ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ вывСсти сообщСниС ΠΎΠ± ошибкС?

42. ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΠΌ 1 Π² систСмС ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ процСсс init. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, запустив процСсс init, администратор систСмы ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π΅ΠΌ самым ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ состояниС систСмы. НапримСр, ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ систСма ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠΉΡ‚ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π² систСмС Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π». Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрСвСсти процСсс init Π² состояниС 2 (ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ), администратор систСмы Π²Π²ΠΎΠ΄ΠΈΡ‚ с консоли ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ init 2. ΠšΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ shell ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ своС ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ запускаСт init. Π§Ρ‚ΠΎ ΠΈΠΌΠ΅Π»ΠΎ Π±Ρ‹ мСсто Π² систСмС Π² Ρ‚ΠΎΠΌ случаС, Ссли Π±Ρ‹ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Π±Ρ‹Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ процСсс init?

43. Π€ΠΎΡ€ΠΌΠ°Ρ‚ записСй Π² Ρ„Π°ΠΉΠ»Π΅ "/etc/inittab" допускаСт Π·Π°Π΄Π°Π½ΠΈΠ΅ дСйствия, связанного с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅ΠΌΡ‹ΠΌ процСссом. НапримСр, с getty-процСссом связано дСйствиС "respawn" (Π²ΠΎΠ·Ρ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅), ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅Π΅, Ρ‡Ρ‚ΠΎ процСсс init Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Ρ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ getty-процСсс, Ссли послСдний ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ сущСствованиС. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· систСмы процСсс init ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ getty-процСсс, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π±Π΅Π·Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ. Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ это Π΄Π΅Π»Π°Π΅Ρ‚ процСсс init?

44. ΠΠ΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ядра ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽΡ‚ ΠΊ просмотру Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ процСссов. ВрСмя поиска Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π°: родитСля процСсса, любого ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ², Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ родитСля. ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ всСх своих ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ², слСдуя сначала Π·Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° любого ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ², Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ процСссы, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ родитСля (Ρ†ΠΈΠΊΠ»Ρ‹ нСдопустимы). КакиС ΠΈΠ· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π²Ρ‹ΠΈΠ³Ρ€Π°ΡŽΡ‚ ΠΎΡ‚ этого? КакиС ΠΈΠ· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ?