Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
360.98 Кб
Скачать

7, 6. Процессы и потоки в ос. Понятие процесса. Жизненный цикл процесса. Различные состояния процесса.

Состояния процесса:

1. Готовый к работе. 2. Ожидающий (#: не может работать пока, не случится к.-л. событие). 3. Активный. 4. Завершенный (выполнен, но еще жив как процесс).

Жизненный цикл процесса:

# ожидания: ожидание ввода данных.

[+ вопрос № 6.]

8. Процессы и потоки в ос. Понятие нити (thread). Основные отличия нити от процесса.

Нить (поток, поток выполнения, thread) — наименьшая единица обработки, исполнение которой может быть назначено ядром. Реализация нитей и процессов в разных ОСях отличается, но обычно нити находятся внутри процесса. * Здесь: нить = поток.

Любая нить состоит из 2 компонентов:

  • объекта ядра, через который ОС управляет нитью. Там же хранится статистическая информация о нити (доп. нити тоже создаются ядром);

  • стека нити, содержащего параметры всех функций и локальные переменные, необходимые нити для выполнения кода.

Процесс состоит хотя бы из одной нити. В ОС каждому процессу соответствует адресное пространство и одна управляющая нить.

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

Концепция нитей добавляет к модели процесса возможность одновременного выполнения в одной и той же среде процесса нескольких программ.

Главное отличие процессов от нитей состоит в том, что процессы изолированы друг от друга (используют разные адресные пространства), а нити могут использовать одно пространство (внутри процесса), не мешая при этом друг другу.

Итог:

  • Нить определяет последовательность исполнения кода в процессе.

  • Процесс ничего не исполняет, он просто служит контейнером потоков.

  • Нити всегда создаются в контексте какого-либо процесса, и вся их жизнь проходит только в его границах.

  • Нити могут исполнять один код, манипулировать одними данными, совместно использовать описатели объектов ядра (таблица описателей создается в процессах).

  • Нити расходуют меньше ресурсов, чем процессы.

9, 11, 12. Процессы и потоки в ос. Необходимость синхронизации при работе с общими ресурсами. Способы синхронизации.

В многопоточной среде часто возникают проблемы, связанные с использованием потоками одних данных или устройств. #: передача информации между процессами, контроль над деятельностью процессов (не пересекутся в критической ситуации, #: когда попытаются завладеть последним МБ памяти), согласование действий процессов. Для решения подобных проблем используются методы синхронизации потоков: [+ вопрос № 11.]

Мьютекс (взаимоисключение, mutex) — объект синхронизации, который устанавливается в особое сигнальное состояние, когда не занят потоком. Только один поток владеет этим объектом в любой момент времени, одновременный доступ к общему ресурсу исключается. После всех необходимых действий мьютекс освобождается, предоставляя другим потокам доступ к общему ресурсу. Состояние описывается: владельцем и кратностью (целое ). Операции: Lock(), Unlock(). Достоинства: автоматическое освобождение (если владелец «помер»), быстрее семафора.

Семафоры — доступные ресурсы, которые могут быть приобретены несколькими потоками в одно и то же время, пока «фонд» ресурсов не опустеет. Остальные потоки будут ждать, пока требуемое количество ресурсов не будет доступно. Семафоры очень эффективны, поскольку они позволяют одновременный доступ к ресурсам. Операции: dec, inc. Если семафор=0 и нужно dec, ставится в очередь и ожидается inc. Поставщик: while(true) { s1.dec(); putdata(); s2.inc(); }. Покупатель: while(true) {s2.dec(); getdata(); s1.inc(); }.

Событие — сообщение, возникающее в различных точках исполняемого кода при выполнении определённых условий.

Для решения поставленной задачи создаются обработчики событий: как только программа попадает в заданное состояние, происходит событие, посылается сообщение, а обработчик перехватывает это сообщение. В обработчик либо ничего не передаётся, либо передаётся ссылка на объект, породивший событие. В особых случаях в обработчик передаются значения некоторых переменных или ссылки на другие объекты, чтобы обработка данного события могла учесть контекст возникновения события.

Самое простое событие — сообщающее о начале или завершении к.-л. процедуры. Наиболее наглядно события представлены в пользовательском интерфейсе, когда каждое действие пользователя порождает цепочку событий, которые затем обрабатываются в приложении.

Событие — переход объекта из одного состояния в другое. Взаимодействие объектов осуществляется с помощью событий: изменение состояния одного объекта приводит к изменению состояния другого объекта, а событие оказывается средством связи между ними.

Активно используются в MS Windows (режимы пользователя и ядра), нет в UNIX (вместо них используются семафоры). Состояния: true / false, up / down. Операции: set() — установить в состояние true, reset() — сбросить, wait(), pulse() — делает up, пропускает очередь и затем сразу down.

Критическая секция — объект, контролируемый ОСью, находящийся внутри процесса. В Windows: критическая секция доступна в пределах процесса в отличие от мьютекса.

Состояния: занят / свободен. Операции: enter / leave. Вход / выход занимает меньше времени, чем у мьютекса (нет необходимости обращаться к ядру).

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

Критическая секция помогает выделить участок кода, где нить получает доступ к разделяемому ресурсу, и предотвратить одновременное использование ресурса.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]