Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kratko.docx
Скачиваний:
57
Добавлен:
01.04.2022
Размер:
2.04 Mб
Скачать

21. Алгоритмы планирования Linux: о(1), cfs.

В ОС LINUX поддерживается 3 класса потоков:

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

реального времени (обслуживаются по FIFO)(First in First Out — первым прибыл, первым обслужен),

разделения времени.

140 уровней приоритета. Чем меньше число, тем выше приоритет. Потоки реального времени: приоритет 0 – 99. 0 – наивысший. Обычный поток: 100 – 139. У каждого уровня потоков свое значение кванта времени. Linux связывает с потоком значение nice, оно определяет статический приоритет каждого потока. По умолчанию =0, изменяется с помощью системного вызова nice (value), value от -20 до +19.

В планировщике O(1) максимальное увеличение приоритета равно -5, максимальное снижение приоритета равно +5. Планировщик поддерживает связанную с каждой задачей переменную sleep_avg (следит за тем, спит процесс или нет).

(Completely Fair Scheduler (CFS))

CFS (Completely Fair Scheduler (CFS)) имеет структуру дерева. задача значения vruntime состоит в сравнении времени, затраченного на выполнение. Большее идет в правую ветку, меньшее - в левую.

22. Синхронизация процессов и потоков: цели и средства синхронизации.

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

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

Для синхронизации потоков :

  • Собственные средства и приемы синхронизации

  • Средства операционной системы.(Более эффективный из за системных вызовов)

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

Средства синхронизации - системные вызовы

23. Ситуация состязаний (гонки). Способы предотвращения.

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

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

Чтобы исключить эффект гонок по отношению к критическим данным, необходимо обеспечить, чтобы в каждый момент времени в критической секции, связанной с этими данными, находился только один поток, не важно, активный он или приостановлен. Этот прием называют взаимным исключением. Некоторые способы пригодны для взаимного исключения при вхождении в критическую секцию только потоков одного процесса, в то время как другие могут обеспечить взаимное исключение и для потоков разных процессов.

24. Способы реализации взаимных исключений: блокирующие переменные, критические секции, семафоры.

Блокирующая переменная это не мьютекс а то что ручками пишешь сам(Как и мьютекс)

Рисунок 5. Реализация критической секции с использованием блокирующих переменных

Каждому набору критических данных ставится в соответствие двоичная переменная, которой поток присваивает значение 0, когда он входит в критическую секцию, и значение 1, когда он ее покидает.

Нельзя прерывать поток между выполнением операций проверки и установки блокирующей переменной. Во избежание таких ситуаций в системе команд многих компьютеров предусмотрена единая, неделимая команда анализа и присвоения значения логической переменной (например, команды ВТС, BTR и ВТ5 процессора Pentium).

Критические секции

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

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

Семафоры

Обобщением блокирующих переменных являются так называемые семафоры Дийкстры. Вместо двоичных переменных Дийкстра предложил использовать переменные, которые могут принимать целые неотрицательные значения. Такие переменные, используемые для синхронизации вычислительных процессов, получили название семафоров. То есть доступ к ресурсу может иметь столько потоков, сколько мы сообщаем семафору. Некая переменная заданная в семафор работает так: поток входит в семафор (X-1) , поток выходит из семафор (X+1) , поток не может войти в семафор и получить доступ к ресурсам (X=0)

В частном случае, когда семафор S может принимать только значения 0 и 1, он превращается в блокирующую переменную, которую по этой причине часто называют двоичным семафором (он же наш любимый мьютекс).

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