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

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

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

copy copy.c newcopy.c

copy copy newcopy

ΡΠ²Π»ΡΡŽΡ‚ΡΡ допустимыми. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ. НапримСр, ΠΏΠΎ Π²Ρ‹Π·ΠΎΠ²Ρƒ:

copy . dircontents

копируСтся содСрТимоС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ символом ".", Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Β«dircontentsΒ»; информация Π² Π½ΠΎΠ²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ совпадаСт, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π°, с содСрТимым ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этот Ρ„Π°ΠΉΠ» ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° опСрация mknod). НаконСц, любой ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠΌ устройства. НапримСр, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, вызванная ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

copy /dev/tty terminalread

Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ символы, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° (Ρ„Π°ΠΉΠ» /dev/tty соотвСтствуСт Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ), ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… Π² Ρ„Π°ΠΉΠ» terminalread, Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΌΠ΅Ρ‚ β€ΉCtrl/dβ€Ί. ΠŸΠΎΡ…ΠΎΠΆΠ°Ρ Ρ„ΠΎΡ€ΠΌΠ° запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

copy /dev/tty /dev/tty

Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ символов с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΈ ΠΈΡ… ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π».

#include <fcntl.h>

char buffer[2048];

int version = 1; /* Π±ΡƒΠ΄Π΅Ρ‚ объяснСно Π² Π³Π»Π°Π²Π΅ 2 */

main(argc, argv)

int argc;

char *argv[];

{

Β int fdold, fdnew;

Β if (argc!= 3)Β 
Β {

Β  printf("need 2 arguments for copy program\n");

Β  exit(1);

Β }

Β fdold = open(argv[1], O_RDONLY); /* ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ исходный Ρ„Π°ΠΉΠ» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния */

Β if (fdold == -1) {

Β Β printf("cannot open file %s\n", argv[1]);

Β  exit(1);

Β }

Β fdnew = creat(argv[2], 0666); /* ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ чтСния ΠΈ записи для всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ */

Β if (fdnew == -1)Β 
Β {

Β  printf("cannot create file %s\n", argv[2]);

Β Β exit(1);

Β }

Β copy(fdold, fdnew);

Β exit(0);

}

copy(old, new)

int old, new;

{

Β int count;

Β while ((count = read(old, buffer, sizeof(buffer))) > 0)
Β write(new, buffer, count);

}

Рисунок 1.3. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° копирования Ρ„Π°ΠΉΠ»Π°

1.3.2 Π‘Ρ€Π΅Π΄Π° выполнСния процСссов

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

НапримСр, процСсс, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½Π° РисункС 1.4, запускаСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ fork, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ процСсс. Новый процСсс, ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΌ процСссом, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ fork, Ρ€Π°Π²Π½ΠΎΠ΅ 0, ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ execl, которая выполняСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ copy (Рисунок 1.3). ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ execl Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Ρ„Π°ΠΉΠ» β€žcopyβ€œ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ находится Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π² адрСсноС пространство ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ процСсса ΠΈ запускаСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ execl ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ Π΅Π΅ процСсс Π½Π΅ возвращаСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ процСсс выполняСтся Π² Π½ΠΎΠ²ΠΎΠΌ адрСсном пространствС (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом Π² Π³Π»Π°Π²Π΅ 7). Π’Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, процСсс, Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ²ΡˆΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ fork (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс), ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ wait, которая приостанавливаСт Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ закончится Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ copy, ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ (каТдая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄ Π² ΠΊΠΎΠ½Ρ†Π΅ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ стандартных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π‘ΠΈ, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Π² процСссС компиляции). НапримСр, Ссли исполняСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° называСтся run, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ запускаСт Π΅Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

run oldfile newfile

ΠŸΡ€ΠΎΡ†Π΅ΡΡ выполняСт ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ β€žoldfileβ€œ Π² Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ β€žnewfileβ€œ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС. Π₯отя данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠ°Π»ΠΎ Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π° ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ β€žcopyβ€œ, Π² Π½Π΅ΠΉ появились Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ основных обращСния ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ процСссов: fork, exec, wait ΠΈ exit.

main(argc, argv)

int argc;

char *argv[];

{ /* прСдусмотрСно 2 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: исходный Ρ„Π°ΠΉΠ» ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» */

Β if (fork()Β == 0) execl("copy", "copy", argv[1], argv[2], 0);

Β wait((int *)0);

Β printf("copy done\n");

}

Рисунок 1.4. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° пороТдСния Π½ΠΎΠ²ΠΎΠ³ΠΎ процСсса, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²

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

Shell ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‚Ρ€Π΅Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ имя исполняСмого Ρ„Π°ΠΉΠ»Π° Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции исходного тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Π‘ΠΈ). Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ имя ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, содСрТащСго Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… строк, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… shell'ΠΎΠΌ. НаконСц, ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ языка shell (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ исполняСмого Ρ„Π°ΠΉΠ»Π°). НаличиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ Π΄Π΅Π»Π°Π΅Ρ‚ shell языком программирования Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ функциям ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ процСссора; ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ язык shell Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² (for-in-do-done ΠΈ while-do-done), ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ выполнСния ΠΏΠΎ условиям (if-then-else-fi), ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π±ΠΎΡ€Π°, ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ измСнСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ для процСсса ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° (cd) ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Бинтаксис shell'Π° допускаСт сравнСниС с ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½Π΅Ρ‚ нСобходимости Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.