Курсовая работа: Особенности операционной системы UNIX
{
int count;
while ((count = read(old,buffer,sizeof(buffer))) > 0)
write(new,buffer,count);
}
Рисунок 1.3. Программакопированияфайла
copy /dev/tty terminalread
читает символы, вводимые с терминала (файл /dev/tty соответствует терминалу
пользователя), и копирует их в файл terminalread, завершая работу только в
том случае, если пользователь нажмет<CTRL d>. Похожая форма запуска программы:
copy /dev/tty /dev/tty
вызывает чтение символов с терминала и их копирование обратно на терминал.
3.2 Среда выполнения процессов
Программой называется исполняемый файл, а процессом называется последовательность операций программы или часть программы при ее выполнении. В системе UNIX может одновременно выполняться множество процессов (эту особенность иногда называют мультипрограммированием или многозадачным режимом),
при чем их число логически не ограничивается, и множество частей программы
(такой как copy) может одновременно находиться в системе. Различные системные операции позволяют процессам порождать новые процессы, завершают процессы, синхронизируют выполнение этапов процесса и управляют реакцией на наступле-ние различных событий. Благодаря различным обращениям к операционной
системе, процессы выполняются независимо друг от друга.
Например, процесс, выполняющийся в программе, приведенной на Рисунке
1.4, запускает операцию fork, чтобы породить новый процесс. Новый процесс,
именуемый порожденным процессом, получает значение кода завершения операции
fork, равное 0, и активизирует операцию execl, которая выполняет программу
copy (Рисунок 1.3). Операция execl загружает файл "copy", который предполо-жительно находится в текущем каталоге, в адресное пространство порожденного
процесса и запускает программу с параметрами, полученными от пользователя. В
случае успешного выполнения операции execl управление в вызвавший ее процесс
не возвращается, поскольку процесс выполняется в новом адресном пространстве. Тем временем, процесс, запустивший операцию fork (родительский процесс), получает ненулевое значение кода завершения операции, вызывает операцию wait, которая приостанавливает его выполнение до тех пор, пока не закончится выполнение программы copy, и завершается (каждая программа имеет выход в конце главной процедуры, после которой располагаются программы стандартных библиотек Си, подключаемые в процессе компиляции). Например, если исполняемая программа называется run, пользователь запускает ее следующим образом:
main(argc,argv)
int argc;
char *argv[];
{