Соглашение | Публикация статей

Шторы - calon.by

Управление процессами
Категория: Статьи

Мы говорили о том, что вторым по значимости понятием в операционной системе (ОС) является понятие процесса. Процесс - сущность, которая определяется по-разному. Это может быть - “упорядоченный набор команд и принадлежащих ему ресурсов”. С точки зрения ОС UNIX, процесс - это объект, зарегистрированный в специальной таблице процессов. Структура этой таблицы следующая: она позиционна (как практически и все таблице в UNIX), то есть номер записи в таблице - есть идентификатор процесса “PID”. Формируются процессы с 0 до N-1, где N - предельное число процессов, которые система может одновременно обрабатывать. Это параметр настройки ОС.

Рассмотрим информативную нагрузку таблицы. В строке-записи таблицы находится ссылка на контекст процесса, там же находится ссылка на тело процесса. Телом процесса мы будем называть набор команд и данных, которыми оперирует процесс.
Контекст процесса - атрибут, который присутствует практически во всех ОС, в разных ОС он может называться по-разному. Контексты всех процессов размещаются в адресном пространстве ОС и содержат оперативную информацию о состоянии процесса и текущую информацию, связанную с процессом и его запуском.
Контекст содержит:
• номера пользователя и группы;
• указатель на индексный дескриптор текущего каталога;
• специфические условия работы процесса:
- обработка сигналов;

Рассмотрим это подробнее. В ОС UNIX каждый процесс может послать другому процессу некоторое воздействие, которое называют “сигнал”; соответственно, если процесс-отправитель имеет право передать сигнал процессу-получателю, то при выполнении передачи в последнем возникает событие, связанное с сигналом.
Это событие очень похоже на прерывание, возникающее в аппаратуре вычислительной системы. В ОС имеется набор сигналов, которые могут передавать друг другу процессы; перечень сигналов описан в файле “signal.h”. Отправитель может подать некоторым образом команду ОС, что он передает сигнал с заданным номером процессу-получателю, процесс-получатель может прореагировать на сигнал тремя способами: 1) прекращение выполнения, причиной которого является пришедший сигнал; 2) игнорирование сигнала (здесь следует отметить, что игнорировать можно далеко не все сигналы); 3) вызывается предопределенная процессом функция, которая может выполнить какие-то действия; возврат из этой функции осуществляется в точку прихода сигнала.
- информация об открытых в процессе файлах;
- информация о текущем состоянии процесса на случай его приостановки;
Останавливая выполнение процесса, ОС “упрятывает” в соответствующий контекст информацию, нужную для его продолжения: режимы программы в момент приостановки, состояние регистров, адрес точки прерывания.

Тело процесса, - как уже было сказано, можно представить в виде объединения сегмента текста (кода) и сегмента данных. Развитые ОС позволяют размещать сегменты текста и данных в различных, не зависящих друг от друга, местах оперативной памяти. Это хорошо, так как вместо одного большого куска памяти нам требуется два маленьких. Но еще лучше следующее - такая организация позволяет использовать сегмент кода повторно. В системе допускается существование еще одного процесса с собственным контекстом, сегментом данных, но у которого общий с другими процессами сегмент кода.


Если k пользователей вызывают один текстовой редактор, то в системе находится одна копия этого редактора и k копий сегмента данных и контекстов (копии, надо заметить, не идентичные). Это вещь полезная, так как отсюда сразу же можно увеличить “разум” планировщика откачки (он может, например, откачивать сегмент данных, а не сегмент текста).

Мы перечислили не все содержимое контекста, и в дальнейшем эта информация будет дополняться и уточняться.

Мы говорили, каким образом в UNIX-e можно создать копию текущего процесса, - это функция fork(), которая работает следующим образом:
fork( ): >0 PID сыновьего процесса (мы находимся в процессе-отце)
=0 (мы находимся в процессе-сыне)
=-1 произошла ошибка - невозможно создать новый процесс (остаемся в процессе-отце), эта ошибка может возникнуть при недостатке места в таблице процессов, при нехватке места в системных областях данных и т.п.
Система поддерживает родственные взаимоотношения между процессами, это означает, что существуют некоторые функции, характерные для работы с процессами, которые доступны только процессам, являющимся родственниками. При порождении сыновнего процесса с использованием fork() порожденный процесс наследует:
• Окружение - при формировании процесса ему передается некоторый набор параметров-переменных, используя которые, процесс может взаимодействовать с операционным окружением (интерпретатором команд и т.д.);
• Файлы, открытые в процессе-отце, за исключением тех, которым было запрещено передаваться специальным параметром при открытии;
• Способы обработки сигналов;
• Разрешение переустановки действующего идентификатора пользователя (это то, что связано с s-bit’ом)*
• Óñòàíîâëåííûé ðåæèì îòëàäêè - в ОС имеется возможность системными вызовами осуществлять отладку (профилирование) программы, в процессе может быть указано - разрешено или нет профилирование;
• Все присоединенные разделяемые сегменты памяти - у нас есть механизм управления разделяемыми ресурсами, и в качестве одного из разделяемых ресурсов может выступать оперативная память, в ней может быть выделен сегмент, к которому одновременно имеют доступ несколько процессов. При формировании сыновнего процесса эта часть памяти также будет унаследована;
• Текущий рабочий каталог и корневой каталог;

Не наследуется при создании нового процесса идентификатор процесса (почему - очевидно).
Возвращаясь к функции fork(), следует заметить, что она сама по себе бессмысленна, ибо применение такому созданию точной копии процесса найти весьма сложно. Поэтому функция fork() используется совместно с группой функций exec(...). Эта группа объединяет в себе функции, которые частью своего имени имеют слово “exec” è выполняют приблизительно одинаковые действия, îòëè÷àþùèåñÿ ëèøü äåòàëями (набором или интерпретацией параметров).
Суть функций exec() - в следующем: при обращении к ней происходит замена тела текущего процесса, оно заменяется в соответствии с именем исполняемого файла, указанного одним из параметров функции. Функция возвращает «-1», если действие не выполнено, и код, отличный от «-1», если операция прошла успешно. Здесь следует отметить следующий факт - в UNIX-е при работе с системными вызовами иногда возникают диагностические сообщения в виде кода ответа, которые невозможно разделить на конкретные причины, вызвавшие возвращение этого кода. Примером этого являются коды “-1” для fork() и exec(...). Для того чтобы обойти это неудобство, следует включить в программу файл “errno.h”, и после этого при возникновении отказов в выполнении системных вызовов в переменной “errno” будет код конкретной причины отказа выполнения заказа. Всевозможные коды отказа описаны в самом “errno.h”.
Давайте приведем небольшой пример. Мы напишем программу, которая будет запускать файлы, имена которых перечислены при вызове.

main(argc, argv)
int argc;
char *argv;
{ int i, pid;
for (i=1; i<argc; i++) {
if (pid=fork()) continue; /* отец */
execlp(argv[i], argv[i], (char *) 0);
}
}

Здесь, если pid=0, мы замещаем тело процесса-сына процессом, имя файла которого нам передается в качестве параметра. Если же pid>0, то есть мы находимся в процессе-отце, то продолжаем создавать сыновние процессы, пока есть аргументы.

В качестве иллюстрации работы fork() можно привести следующую картинку:


Здесь процесс с PID=105 создается процессом с PID=101.
Также следует отметить, что если убивается процесс-отец, то новым отцом становится 1-ый процесс ОС.
Связка fork/exec по своей мощности сильнее, чем, если бы была единая функция, которая сразу бы создавала новый процесс и замещала бы его содержимое. Fork/exec позволяют вставить между ними еще некоторую программу, которая будет содержать какие-то полезные действия.

Мы начали рассматривать организацию процессов. Мы на пальцах показали, как размещается информация в ОС. В принципе, вся информация, которая отражает оперативное состояние ОС, а также программы ОС, которые управляют этой информацией и наиболее важными устройствами, составляют ядро ОС.
Ядро ОС - программа, функцией которой является управление базовыми объектами системы (для UNIX-а это два объекта - файл и процесс). Ядро в своем теле размещает необходимые таблицы данных. Ядро считается некоторой неразделяемой частью ОС. Оно обычно работает в режиме супервизора, все остальные функции ОС могут работать и в других режимах.


Статьи по теме:

Общие признаки преступлений в сфере компьютерной информации
Физические аспекты работы с дисками
Виртуальная память
ЦИКЛ ФУНКЦИОНИРОВАНИЯ ВИРУСОВ
Ада и Си
Тематические ресурсы Internet
Проблема предотвращения формирования общества потребления
Бесплатный Софт, Быть Или Не Быть
Вход в систему с полномочиями администратора
Проверка и исправление сжатых дисков
Следственный осмотр
TCO '99
Google о вредоносных программах Интернета
Блокнот: Автоматическая вставка даты и времени
Импорт изображений из файла
Netpromoter: Новые Возможности Профессиональной Интернет-Статистики
Функции BIOS для работы с дисками
Internet
Допрос свидетеля и потерпевшего
Развитие и стандартизация структурированных кабельных систем
Международный стандарт ISO/IEC 11801
Access
Типизация
Элементарная теория процесса обучения нейросетей
VISA-2000. Виртуальный продавец компьютерной оргтехники
Технический аспект социальных условий и предпосылок
Поддержка драйвера сжатых дисков в MS DOS
МОНТАЖ ЖГУТОВ В АППАРАТУРЕ
Устройство и общие принципы работы компьютерного томографа
Заливка области рисунка
Где Купить Картридж С Доставкой В Офис
ЭВМ V поколения
Обмен данными через буфер обмена
Описание переменных
Языки описания сценариев на подъеме
Физическая среда передачи в локальных сетях
Управление СКС
СРАВНЕНИЕ ИСКУССТВЕННОГО И ЕСТЕСТВЕННОГО ИНТЕЛЛЕКТОВ
Преимущества структурированных кабельных систем
Шина EISA
Проблемы создания квантовых компьютеров
Размер шрифта и кодировка
Дополнительные настройки Microsoft Internet Explorer
Стандарты электронных расчетов
Стримеры
Настройка интерфейса редактора Paint
ВОПРОС ДОВЕРИЯ К РЕЗУЛЬТАТАМ ДЕЯТЕЛЬНОСТИ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА
Возможности INTERNET
Экспертные Системы
Открытие документа двойным щелчком
Работа с дисками по средствам MS-DOS
Маркировка + контроль вскрытия с этикетками В-367
Классификация локальной компьютерной сети (ЛКС)
Системный блок
Защита Информации. Пароли На Rar Архивы