Выполнение процессов
Процесс может выполняться в одном из двух
состояний:
-
пользовательском. Процесс выполняет пользовательскую
программу и имеет доступ к пользовательскому сегменту данных;
-
системном. Процесс выполняет программы ядра и имеет
доступ к системному сегменту данных.
Когда пользовательскому процессу требуется
выполнить системную функцию, он создает системный вызов. Фактически происходит
вызов ядра системы как подпрограммы. С момента появления системного вызова
процесс считается системным. Пользовательский и системный процессы являются
двумя фазами одного и того же процесса, но они никогда не пересекаются между
собой. Каждая фаза пользуется своим собственным стеком. Стек задачи содержит:
-
аргументы;
-
локальные переменные;
-
другую информацию относительно функций, выполняемых в
режиме задачи.
Диспетчерский процесс не имеет
пользовательской фазы.
В ОС UNIX используется разделение
времени, каждому процессу выделяется квант времени:
-
процесс завершается сам до истечения отведенного ему
кванта времени;
-
процесс откладывается по истечении кванта времени.
Пользовательским процессам устанавливаются
приоритеты в зависимости от количества получаемого ими процессорного времени:
-
процессам, которые получили больше процессорного
времени, назначаются более низкие приоритеты;
-
процессам, которые получили небольшое количество
процессорного времени, приоритет повышают.
Такой метод диспетчеризации обеспечивает
хорошее время реакции для всех пользователей системы.
Все системные процессы имеют более высокие
приоритеты по сравнению с пользовательскими и поэтому всегда обслуживаются в
первую очередь.
Подсистема ввода/вывода
В ОС UNIX команды ввода/вывода,
применяемые к файлам и физическим устройствам, одни и те же. Физические
устройства представлены специальными файлами в единой структуре файловой
системы. Пользователь не может написать зависящую от устройства программу. Стандартные файлы ввода и вывода,
приписываемые пользовательскому терминалу, открывать не требуется.
Система ввода/вывода ОС UNIX, в отличие от
большинства систем, ориентирована на работу с потоками, а не с записями. Поток – последовательность байтов,
заканчивающаяся разделителем. Понятие потока позволяет проще добиться
независимости от устройств и унификации файлов с физическими устройствами и
конвейерами.
Перенаправление ввода/вывода
Механизм перенаправления ввода/вывода является одним
из наиболее элегантных, мощных и одновременно простых механизмов в ОС UNIX. Для того чтобы обеспечить более гибкое
использование программ ввода и вывода, желательно обеспечить им ввод из файла
или из вывода других программ и направить их вывод в файл или на ввод других
программ.
Реализация этого механизма основана на следующих
свойствах ОС UNIX:
-
любой ввод/вывод трактуется как ввод из некоторого
файла и вывод в некоторый файл. Клавиатура и монитор тоже интерпретируются как
файлы;
-
доступ к любому файлу производится через его
дескриптор:
o
файл с дескриптором 0 называется файлом
стандартного ввода (stdin);
o
файл с дескриптором 1 называется файлом
стандартного вывода (stdout);
o
файл с дескриптором 2 называется файлом
стандартного вывода диагностических
сообщений (stderr);
-
программа, запущенная в некотором процессе, наследует
от породившего процесса все дескрипторы открытых файлов.
Файл стандартного ввода – клавиатура, файлы
стандартного вывода и вывода диагностических сообщений – экран терминала.
При запуске любой команды можно сообщить
интерпретатору:
-
какой файл или вывод какой программы должен служить
файлом стандартного ввода для запускаемой программы:
-
какой файл или ввод какой программы должен служить файлом
стандартного вывода;
-
какой файл или ввод какой программы должен служить
файлом вывода диагностических сообщений.
Все, что требуется для нормального функционирования
механизма перенаправления ввода/вывода, - придерживаться соглашения об
использовании дескрипторов stdin,
stdout и stderr.
|