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

Красивые рольшторы - roll-service.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-а это два объекта - файл и процесс). Ядро в своем теле размещает необходимые таблицы данных. Ядро считается некоторой неразделяемой частью ОС. Оно обычно работает в режиме супервизора, все остальные функции ОС могут работать и в других режимах.


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

Следственный осмотр
СОСТАВ САПР
Демонстрационная программа графических функций языка С++
Экспертные системы
Аналого-цифровые вычислительные машины (АЦВМ)
История Браузера Opera
Особенности машин ЕС ЭВМ
Стримеры
Защита вновь создаваемых программ
Определение формата таблицы FAT
ТИПЫ ЛКС
Области в которых используются компьютерные системы на базе CompactPCI
Получение изображений со сканера или цифровой камеры
Алее Софтвер Приглашает На Docflow 2008!
Обмен данными через файл-фрагмент
Завершены работы по настройке нового продукта Алее Архив 3 для работы с СУБД
WordPad: Выделение текста кеглем шрифта
Отличие ЭС от других программных продуктов
Новый вид Windows Vista
Все О Шрифтах - Использование Type1 И Truetype
Методическая сущность деловой игры
Проблема предотвращения формирования общества потребления
Темп развития CompactPCI
WordPad: Автоматический перенос слов
Друкувальні пристрої, графобудівники
ВСТАВКА ТАБЛИЦ
ЭВМ в магазинах самообслуживания
Типы Java программ
Черный Баннер - История его обнаружения
Открытие документа из командной консоли
Сетевой аудит в NetWare 4.x
Американские проекты создания информационной супермагистрали
Настройка Главного меню Microsoft Windows XP
Соединение микропроцессоров
Программный код в среде Visual Basic
Математические основы функционирования квантовых компьютеров
Будущие модули CompactPCI- которые будут производится в ближайшее время
Операционные системы реального времени для CompactPCI- компьютеров
Спрячьте ваши важные документы компьютера в секундах
WordPad: Внедрение специальных объектов
Пример разработки экспертной системы
Установка охранных систем - актуальность возросла!
Передача файлов (ftp)
Планирование в операционной системе UNIX
Корпоративные Информационные Системы (Crm, Erp, Системы Мобильной Торговли)
COSMOS/M интерфейсы
Программные оболочки MS DOS, Norton Commander
ОС Windows Vista повысит популярность планшетных компьютеров
Команды для контроллера НГМД
WordPad: Изменение настроек редактора
ЗАЩИТА СУЩЕСТВУЮЩИХ ЕХЕ-ФАЙЛОВ
Политика конфиденциальности Microsoft Internet Explorer
Проект СКС
ИСПОЛЬЗОВАНИЕ СУБД ACCESS 7.0
Зао «Лайт Коммуникейшн» Сообщает О Начале Производства Устройств Netping Pwr-220 V2 И Netping 2/Pwr-220 V2