Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛекцияОС.docx
Скачиваний:
5
Добавлен:
26.11.2019
Размер:
5.9 Mб
Скачать

Синхронизация потоков

Лекция № 5 111012

Описатели объектов ядра handle зависят от конкретного процесса. Существуют способы работы с одними и теми же объектами ядра из разных процессов:

  1. Наследование описателя.

  2. Дублирование описателя с помощью системной функции Duplicatehandle.

  3. Именование объекты ядра. При создании объекта ядра для синхронизации mutex, семафор и т.д. Можно задать ему уникальное имя в системе.

Для связи между процессами используются:

  1. Разделяемая память, включая возможность преобразования страниц ОС в страницы файлов на диске и наоборот.

  2. Анонимные каналы. Для двухстороннего обмена между дочерними и родительскими процессами. Или между 2 дочерними.

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

  4. Сокеты (дейтаграмм, потоков). Представляют собой абстрактный объект для обозначения одного из концов сетевого соединения.

  5. Сообщения.

Архитектура процессов Unix.

Unix (UnixAIX) многозадачная многопользовательская система, оперирующая 2 типами базовых объектов:

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

  2. Процессы.

Архитектура системы включает монолитное ядро, системные утилиты, резидентные программы (постоянно находящаяся в ОС - демоны), пользовательские программы.

Существует 2 уровня доступа: системный и пользовательский.

Рис. 1.

Доступ к структурам ядра осуществляется через файловый интерфейс.

Управление процессами.

Дескрипторы всех процессов описываются структурой proc и объединяются в список (таблица процессов), память для которой динамически выделяется в области ядра.

Контекст процесса описывается структурой user и хранится непосредственно примыкая к образу процесса, перемещаясь вместе с ним.

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

  • Фазы процесса: пользовательская и системная.

Контекст процесса включает его идентификатор PID(номер таблицы дескрипторов), идентификатор родительского процесса (PPID) и данные о состоянии. При завершении процесса его уникальный номер может быть передан другому. Все процессы образуют иерархию, корнем которой является процесс init. Для процессов характерно особое состояние (зомби). Процесс получает его, если завершился раньше, чем этого ожидал его родитель.

Рис. 2. Смена состояний процесса

Рис. 3. Планирование процессов на основе циклической очереди с приоритетом.

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

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

Все процессы с динамический приоритетом не ниже порогового значения участвуют в конкуренции за процессор.

Рис.4. Распределение номеров приоритетов.

Высокий 0

приоритеты 1

реального …

времени 38

39

Пользовательские 40

приоритеты 41

(по умолчанию) …

254

Низкий приоритет 255

(wait)

Приоритеты реального времени являются фиксированными и такие процессы могут быть запущены только root-пользователем. Приоритет потов вычисляется как:

Priority=x_nice+[([_nice+4)/64*(CPUpenalty)]

x_nice = значение nice + базовый приоритет

если p_nice >60

то x_nice = (p_nice*2)-60

иначе x_nice = p_nice

CPU penalty = CPU usage * R/32 / поумолчанию R = 16.

Каждый квант времени на выполнение CPUusage увеличивается на единицу.

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