Добавил:
Developerrnrn Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС Нижний.pdf
Скачиваний:
34
Добавлен:
25.03.2023
Размер:
2.75 Mб
Скачать

Лабораторный практикум по курсу "Операционные системы"

При наличии у процесса соответствующих привилегий, его потоки могут выполнять системные вызовы, завершающие другие процессы. В UNIX для этого может использоваться системный вызов kill(), в Windows – функция Win32 TerminateProcess().

При завершении процесса операционная система выполняет следующие действия:

-завершает выполнение всех потоков процесса;

-сохраняет статистические данные процесса и код возврата в его дескрипторе;

-переводит все ресурсы, принадлежащие процессу в непротиворечивое и стабильное состояние (например, закрывает все файлы);

-освобождает все ресурсы, принадлежавшие или использовавшиеся процессом;

-освобождает виртуальное адресное пространство процесса и уничтожает его;

-оповещает подсистемы, принимающие участие в управлении процессами, о завершении процесса с целью корректировки ими его дескриптора;

-состояние процесса устанавливает в значение «завершен».

В результате перечисленных действий от процесса остается только дескриптор в таблице дескрипторов ядра. Время его уничтожения в различных операционных системах определяется по-разному. В UNIX уничтожение дескриптора обычно производит родитель процесса с помощью системного вызова семейства wait() (при завершении любого процесса UNIX для его потомков родительским назначается всегда существующий процесс init). В Windows дескриптор процесса удаляется автоматически, когда счетчик его пользователей достигнет нуля.

Операции над потоками

1. Создание потока

Мы будем рассматривать случай, когда потоки поддерживаются непосредственно ядро операционной системы. При создании потока ядро должно выполнить следующие действия;

-создать дескриптор потока и поместить его в таблицу потоков;

-создать информационные структуры, необходимые для функционирования потока в данной аппаратной архитектуре (например, стек потока);

-проинициализировать значения полей общего назначения дескриптора потока исходя из параметров вызова или принятых значений по умолчанию;

-инициализировать поле дескриптора «аппаратный контекст выполнения потока» на основании параметров вызова или в соответствии со значениями по умолчанию (например, установить указатель стека на верхнюю границу стека, а указатель команд – на входную точку потока);

-оповестить подсистемы, принимающие участие в управлении потоками, о создании нового потока с целью завершения инициализации его дескриптора;

-перевести поток в состояние «готов к выполнению».

В UNIX для создания потока может использоваться системный вызов thr_create() (однако, будьте осторожны, в одних UNIX-системах поддерживается многопоточность на уровне ядра, в других - нет); в Windows – функции Win32 CreateThread(), CreateThreadEx().

22 Учебно-исследовательская лаборатория «Информационные технологии»

Соседние файлы в предмете Современные операционные системы