Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие_Unix.doc
Скачиваний:
4
Добавлен:
26.11.2019
Размер:
2.41 Mб
Скачать

3.5.5 Особенности планирования в Linux

Потоки в Linux реализованы в ядре. Поэтому планирование основано на потоках, а не на процессах. Планировщик различает три класса потоков:

  1. потоки реального времени, обслуживаемые по алгоритму FIFO

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

  3. потоки разделения времени

1 – имеют наивысший приоритет и не могут прерываться другими потоками, за исключением таких же.

2 – то же, что и 1, но с тем отличием, что они могут прерываться таймером, после чего поток перемещается в конец своей очереди.

Каждый поток имеет приоритет. С каждым процессом связан квант времени, т.е. количество тиков таймера, в течение которых процесс может выполняться. По умолчанию каждый тик равен 10мс. Этот интервал в Linux называют «джиффи».

Планировщик использует квант и приоритет для определения текущего приоритета.

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

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

  • квант потока уменьшился до 0

  • поток блокируется на операции ввода-вывода

  • в состояние готовности пришел ранее заблокированный поток с более высоким приоритетом.

Т.о. потоки, связанные с в/в получают преимущество при планировании.

Другое свойство этого алгоритма заключается в том, что когда потоки соревнуются за право использовать ЦП, поток с большим приоритетом получает большую долю процессорного времени.

3.6 Взаимодействие между процессами (Interprocess Communication, ipc)

3.6.1 Введение

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

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

Процессы могут взаимодействовать:

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

2) Совместно используя данные. Можно не копировать информацию, а использовать ее совместно, при этом изменения, сделанные одним процессом, должны быть сразу видны другому. Взаимодействовать могут несколько процессов. При совместном использовании данных процессам нужен протокол взаимодействия, который позволит:

  • сохранить целостность данных;

  • и исключить конфликты при доступе данным.

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

Поэтому процессам надо предоставить возможность общаться и разделять между собой общие ресурсы и данные. Можно решать эту задачу средствами самих процессов, но это неэффективно, а в многозадачной системы еще и опасно. ОС должна предоставлять средства межпроцессного взаимодействия (InterProcess Communication, IPC).

Средства межпроцессного взаимодействия, присутствующие во всех версиях UNIX, это:

  • сигналы

  • каналы

  • FIFO (именованные каналы)

  • сообщения (очереди сообщений)

  • семафоры

  • разделяемая память

  • сокеты.