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

Контекст процесса

(Постоянно изменяющееся) состояние исполняемой программы в любой момент времени.

Контекст планирования – наиболее важная часть контекста процесса; это информация, которую использует планировщик для приостановки и запуска процесса.

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

Таблица файлов – это вектор указателей на системные файловые структуры. При выполнении системных вызовов для ввода-вывода процессы ссылаются на эти структуры с помощью индексов в таблице файлов.

21

Контекст процесса

В то время как таблица файлов содержит список открытых файлов, контекст файловой системы применяется для запросов об открытии новых файлов. Здесь хранятся ссылки на текущую корневую (root) директорию и рабочую (default) директорию для поиска файлов.

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

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

22

Процессы и потоки

• Linux использует одно и то же внутреннее представление для процессов и потоков; поток – это новый процесс, который использует общее адресное пространство с процессомродителем.

• Различие проявляется только в случае, когда новый поток создается системным вызовом clone.

– fork создает новый процесс со своим полностью новым контекстом

– clone создает новый процесс со своим новым идентификатором личности, но такой, которому разрешено совместно использовать структуры данных со своим родителем

• Использование clone дает процессам возможность явного контроля над тем, какие ресурсы совместно используются

потоками.

23

Планирование

Распределение операционной системой процессорного времени между различными задачами.

В то время как обычно под планированием понимается запуск и приостановка процессов, в Linux планирование также включает выполнение различных задач ядра.

Выполнение задач ядра включает как задания, запрошенные данным процессом, так и задания, исполняемые в процессе работы драйверов.

24

Синхронизация в ядре

Запрос на исполнение в режиме ядра может возникнуть

вдвух случаях:

Исполняемая программа может запросить сервис ОС, как явно с помощью системного вызова, так и неявно, например, при отказе страницы.

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

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

25

Синхронизация в ядре

Linux использует два метода для защиты критических секций:

1.Обычный код ядра - не прерываемый

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

2.Второй метод применяется к критическим секциям ядра, которые исполняются в сервисах обработки прерываний.

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

26

Синхронизация в ядре

Во избежание потери производительности, ядро Linux использует архитектуру синхронизации, которая позволяет большим критическим секциям исполняться без необходимости отключения прерываний на все время исполнения критической секции.

Службы обработки прерываний делятся на верхнюю половину (top half)

инижнюю половину (bottom half).

Верхняя половина – это обычная процедура обработки прерываний, исполняемая с отключением рекурсивных прерываний.

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

Эта архитектура дополняется механизмом для выбора нижних половинок при исполнении обычного кода ядра.

27

Уровни защиты прерываний

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

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

28

Планирование процессов

Linux использует два алгоритма планирования процессов:

Алгоритм разделения времени для равноправного планирования с прерываниями между различными процессами

Алгоритм реального времени для случая, когда абсолютные приоритеты более важны, чем равноправность

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

Для процессов с разделением времени Linux использует алгоритм на основе доверия с приоритетами.

Правило учитывает как историю процесса, так и его приоритет.

Эта система автоматически определяет приоритеты интерактивных процессов или исполняющих ввод-вывод.

credits credits : priority

2

29

Планирование процессов

Linux реализует классы планирования: FIFO и round-robin;

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

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

FIFO – процессы исполняются до их завершения или блокировки

round-robin – процесс будет прерван через некоторое время и помещен в конец очереди планирования, так что RR-процессы одинакового приоритета автоматически разделяют время между собой.

30

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