Читайте также:
|
|
Все работы в системе UNIX представлены множеством конкурирующих процессов. Единицей управления и потребления ресурсов в системе служит процесс. В частности, ввод/вывод выполняется синхронно, и процесс приостанавливается до завершения ввода/вывода. Если требуется продолжить выполнение процесса параллельно с инициированием им ввода/вывода, нужно предварительно породить другой процесс для реализации ввода/вывода.
Процесс может быть создан единственным способом - функцией fork. При создании процесс получает уникальный ненулевой целочисленный идентификатор, по которому система отличает данный процесс от других. Процесс перестает существовать нормальным образом по собственной инициативе (функции exit) или аварийным образом, получив сигнал.
Каждый процесс работает в своем адресном пространстве. При создании процесса строится образ порожденного процесса, являющийся точной копией образа породившего процесса. После выполнения вызова fork оба процесса продолжают выполнение с одной и той же точки. Чтобы процесс мог опознать, является он отцом (порождающим процессом) или сыном (порожденным процессом), функция fork возвращает в качестве своего значения в породивший процесс идентификатор порожденного процесса, а в порожденный процесс - нуль.
Порожденный процесс наследует все файлы, открытые его отцом. Кроме того, сын будет иметь тот же, что и отец, текущий каталог, управляющий терминал и некоторые другие атрибуты.
Работа процесса заключается в выполнение некоторой программы - образа процесса. Функция семейства exec позволяет передать управление другой программе, заменив текущий образ процесса образом новой программы. В отличие от функции fork функция семейства exec не создает нового процесса; передача управления происходит в рамках процесса, сделавшего вызов. Возврат в старый образ невозможен, если только exec не отвергнут системой вследствие ошибки.
Породивший процесс может приостановить свое выполнение до завершения или остановки одного из своих сыновей с помощью функции wait или waitpid. В свою очередь, процесс может завершиться по собственной инициативе с помощью exit, возвращая отцу код завершения.
4.3 ПРОЦЕССЫ В OS/2
OS/2 реализует многозадачную обработку. Самой крупной системной единицей является сеанс. Он состоит из одного или нескольких процессов, которые, в свою очередь, состоят из одной или нескольких минизадач (задач Thread - нить).
Минимальной единицей служит минизадача. Именно минизадаче выделяется процессор. OS/2 может поддерживать до 255 одновременно управляемых минизадач. Только одна минизадача выполняется. Остальные находятся в состоянии ожидания или готовы к выполнению. При переключении ЦП между минизадачами OS/2 сохраняет следующую информацию:
- номер минизадачи (TID - Thread ID);
- приоритет минизадачи;
- состояние (ожидание, готова к выполнению);
- интервал оставшегося времени выполнения;
- указатель на команду, с которой надо начать выполнение;
- содержание регистров при переключении ЦП на другую минизадачу.
Последние две информации (контексты) запоминаются в TSS.
Процессу в отличие от минизадачи выделяются запрошенные ресурсы: файлы, устройства, память и т.д. Процесс может создать несколько минизадач, конкурирующих за владение ЦП. Поэтому минизадача владеет теми же ресурсами, что и создавший их процесс, включая и ОП. Это показывает, что дескрипторы, связанные с распределением памяти (LDT - локальная таблица дескрипторов), выделяются процессу, а не минизадаче.
Процесс может создать другой процесс - дочерний. Он наследует ресурсы родительного процесса. Кроме этого, он может затребовать еще дополнительные ресурсы. Когда выполнение данного процесса завершается, все выделенные ему ресурсы автоматически освобождаются.
Для каждого процесса создается PCB, требующий несколько Кбайт оперативной памяти. РСВ включает:
- номер процесса или PID (Process ID [prosess]);
- информацию о сброшенных на диск сегментов для свопинга;
- указатель на LDT;
- описание открытых или выделяемых процессу ресурсах (файлы, коммуникационные каналы, очереди, системные семафоры, периферийные устройства, память);
- порожденные сегменты.
Под сеансом в OS/2 понимают рабочую среду, состоящую из логического (виртуального) терминала: клавиатура, дисплей, мышь. Каждой прикладной программе соответствует свой сеанс. Этот сеанс включает хотя бы главный процесс. Каждому сеансу присваивается свой идентификатор, который становится известным главному процессу после его запуска. Есть сеансы системные, например, многооконный графический интерфейс (Presentation Manenger), который в пределах своего сеанса позволяет выполнять несколько других прикладных программ (несколько прикладных сеансов) в многооконном режиме.
Пользователь может специальной командой выбрать для общения некоторый сеанс. Этот сеанс выбирается управляющей программой на передний план. С этого момента физический терминал связан с виртуальным терминалом системного сеанса. Остальные сеансы находятся в фоновом плане. Они могут выполняться, пока выбранный сеанс ждет ввода с консоли или нажатия клавиши мыши.
Из всех процессов активного сеанса только один выполняется на переднем плане. Процессы, не ведущие диалога с пользователем (например, вывод на принтер), могут быть запущены параллельно в фоновом режиме.
Дата добавления: 2015-10-02; просмотров: 42 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Основные операции управления процессами | | | Префикс программного сегмента PSP |