Набор (пар) операций:
- одноразовые:
    - создание -- завершение
- многоразовые:
    - запуск -- приостановка
    - блокирование -- разблокирование
    - изменение приоритета процесса

=== Process Control Block и контекст процесса

Process Control Block --- структура (или набор структур) с информацией о
процессе; хранит:
- Регистровый контекст:
    - Программный счетчик
    - Содержимое регистров
- Системный контекст:
    - Состояние процесса
    - Данные для планирования использования процессора и управления памятью
    - Учетная информация

PCB хранится в адресном пространстве ОС

Код и данные в адресном пространстве --- пользовательский контекст

Контекст процесса --- совокупность всех трех контекстов

=== Одноразовые операции

Медленные тк:
- Выполняют много действий
- Выделяют/ освобождают ресурсы
- Меняют число процессов

Первые несколько процессов создаются "хитро"

Всякий новый процесс рождается от другого процесса $->$ процессы образуют
генеологическое дерево (или лес)

=== Создание процесса

+ Присваивание PID
+ Создание PCB с состоянием "рождение"
+ Выделение ресурсов.

    Подходы:
    + из ресурсов родителя
    + из ресурсов ОС (более частый вариант)

+ Занесение кода в адресное пространство и установка программного счетчика.

    Подходы:
    + Клонирование родителя (в UNIX)

        Есть системный вызов, который создает клона

        Есть системный вызов, который полностью заменяет пользовательский
        контекст

    + Из файла (в Windows)

+ Окончательное заполнение PCB
+ Изменение состояния на "готовность"

=== Завершение процесса

Состояние "закончил исполнение" нужно, чтобы возможно было узнать причину
завершения

+ Изменение состояния на "закончил исполнение"
+ Освобождение ресурсов
+ Очистка элементов PCB
+ Сохранение в PCB информации о причинах завершения

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

Если родитель умер раньше ребенка, `PID=1` усыновляет ребенка

Zombie-процесс --- процесс в состоянии "закончил исполнение"

=== Запуск процесса

- Изменение состояние на "исполнение"
- Обеспечение наличия в оперативной памяти необходимой информации
- Восстановление значения регистров
- Передача управления по адресу программного счетчика

=== Приостановка процесса

- Автоматическое сохранение програмного счетчика и части
  регистров (работа hardware)
- Передача управления по специальному адресу (работа hardware)
- Сохранение динамическойчасти 
- Обработка прерывания
- Перевод процесса в состояние "Готовность"

=== Блокирование процесса

- Сохранение контекста процесса в PCB
- Обработка системного вызова
- Перевод процесса в состояние "ожидание"

=== Разблокирование процесса

- Уточнение, какое событие произошло
- Проверка наличия процесса, ожидавшего события
- Перевод ожидающего процесса в состояние "готовность"
- Обработка произошедшего события

=== Пример цепочки операций

// TODO: картинка

= Кооперация процессов

Кооперативные (взаимодействующие) процессы --- процессы, которые влияют на
поведения друг друга путем обмена информацией

Основные причины кооперации:
- Повышение скорости решения задач (для многоядерной системы)
- Совместное использование данных
- Модульная конструкция какой-то системы
- Для удобства работы пользователя

Взаимодействие между процессами происходят через ОС

== Категории средств взаимодействия

- Сигнальные: передача бита
- Канальные: логический канал
- Разделяемая память: общее адресное пространство

== Как устанавливается связь

- Нужна ли инициация?
    - Обычно нужна для канальной и разделяемой памяти и не нужна для сигнальной

- Способы адресации:
    - Прямая
        - Симметричная: и отправитель, и получатель указывают ID друг друга
        - Асимметричная: только отправитель указывает ID получателя
    - Косвенная: есть вспомогательный объект для передачи

== Информационная валентность процессов и средств связи

- Сколько процессов может одновременно ассоциировать с конкретным видом связи?
  --- "It depends".

- Сколько идентичных средств связи может быть задействовано между двумя
  процессами? --- "It depends".

- Направленность связи:
    - Симплексная связь: односторонняя
    - Полудуплексная связь: как в рации
    - Дуплексная связь: двусторонняя
