Добавил:
Я и кто? Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

срв колок / 20-21

.docx
Скачиваний:
6
Добавлен:
10.09.2023
Размер:
25.44 Кб
Скачать
  1. Опишите организацию многозадачности

Если в операционной системе могут одновременно существовать не­сколько процессов или/и задач, находящихся в состоянии «выполняется», то говорят, что это многозадачная система, а эти процессы называют парал­лельными.

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

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

Система поддерживает мультипрограммирование и старается эффек­тивно использовать ресурсы путем организации к ним очередей запросов, составляемых тем или иным способом. Это требование достигается поддер­жанием в памяти более одного процесса, ожидающего процессор, и более одного процесса, готового использовать другие ресурсы, как только послед­ние станут доступными. Общая схема выделения ресурсов такова. При необ­ходимости использовать какой-либо ресурс (оперативную память, устройст­во ввода/вывода, массив данных и т.п.), задача обращается к супервизору операционной системы – ее центральному управляющему модулю, который может состоять из нескольких модулей, например: супервизор ввода/вывода, супервизор прерываний, супервизор программ, диспетчер задач и т.д. – по­средством специальных вызовов (команд, директив) и сообщает о своем тре­бовании. При этом указывается вид ресурса и, если надо, его объем. Дирек­тива обращения к операционной системе передает ей управление, переводя процессор в привилегированный режим работы, который обязательно суще­ствует в СРВ.

Ресурс может быть выделен задаче, обратившейся к супервизору с со­ответствующим запросом, если:

- он свободен и в системе нет запросов от задач более высокого при­оритета к этому же ресурсу;

- текущий запрос и ранее выданные запросы допускают совместное использование ресурсов;

- ресурс используется задачей низшего приоритета и может быть вре­менно отобран (разделяемые ресурсы).

Получив запрос, система либо удовлетворяет его и возвращает управ­ление задаче, выдавшей данный запрос, либо, если ресурс занят, ставит зада­чу в очередь к ресурсу, переводя ее в состояние ожидания (блокируя).

После окончания работы с ресурсом задача опять с помощью специ­ального вызова супервизора сообщает операционной системе об отказе от ресурса, или операционная система забирает ресурс сама, если управление возвращается супервизору после выполнения какой-либо системной функ­ции. Супервизор операционной системы, получив управление по этому об­ращению, освобождает ресурс и проверяет, имеется ли очередь к освобо­дившемуся ресурсу. Если очередь есть – в зависимости от принятой дисцип­лины обслуживания и приоритетов заявок он выводит из состояния ожида­ния задачу, ждущую ресурс, и переводит ее в состояние готовности к выпол­нению. После этого управление либо передается данной задаче, либо воз­вращается той, которая только что освободила ресурс.

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

  1. Опишите механизм синхронизации задач в ОС и алгоритмы его реализации

Механизмы синхронизации и взаимодействия процессов

1. Синхронизация процессов в системах реального времени.

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

3. Семафоры.

4. События.

1. Синхронизация процессов в системах реального времени Организация некоторого порядка исполнения процессов называется синхронизацией (synchronization). Синхронизация процессов является ос­новной функцией многозадачных операционных систем и используется для защиты ресурсов - с помощью механизма синхронизации упорядочивается доступ к ресурсу.

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

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

Важным понятием синхронизации потоков является понятие «критиче­ской секции» программы. Критическая секция - это часть программы, ре­зультат выполнения которой может непредсказуемо меняться, если перемен­ные, относящиеся к этой части программы, изменяются другими потоками в то время, когда выполнение этой части еще не завершено. Критическая секция всегда определяется по отношению к определенным критическим данным, при несогласованном изменении которых могут возникнуть нежела­тельные эффекты.

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

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

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

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

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

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

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

3. Семафоры

Семафоры (semaphore) - это основной метод синхронизации. Он, в сущности, является наиболее общим методом синхронизации процессов.

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

Семафоры, которые могут принимать лишь значения 0 и 1, называются двоичными. Над семафо­рами определены две операции - signal и wait. Операция signal увеличивает значение семафора на 1, а вызвавший ее процесс продолжает свою работу. Операция wait приводит к различным результатам, в зависимости от текуще­го значения семафора. Если его значение больше 0, оно уменьшается на 1, и процесс, вызвавший операцию wait, может продолжаться. Если семафор имеет значение 0, то процесс, вызвавший операцию wait, приостанавливается (ставится в очередь к семафору) до тех пор, пока значение соответствующего семафора не увеличится другим процессом с помощью операции signal. Только после этого операция wait приостановленного процесса завершается (с уменьшением значения семафора), а приостановленный процесс продол­жается.

В зависимости от реализации процессы могут ждать в очереди, упоря­доченной либо по принципу FIFO (Firstln, FirstOut - первым вошел, первым вышел), либо в соответствии с приоритетами, или выбираться случайным об­разом.

Для защиты критических секций, в которые по определению в любой момент времени может входить только один процесс, используются двоич­ные семафоры, также называемые mutex (от mutual exclusion - взаимное ис­ключение). В этом случае нельзя использовать обычные семафоры, так как их значение может превышать 1 и, следовательно, несколько программ могут получить доступ к ресурсу, уменьшая значения семафора.

Компилятор не имеет возможности проверить, правильно ли использу­ются семафоры

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

4. События

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

введена новая переменная синхрони­зации event (событие), с которой связаны операции await (ждать) и cause (вызвать). Процесс, выполнивший операцию await (event), остается в состоя­нии ожидания, пока значение переменной event не изменится. Это изменение контролируется с помощью операции cause. При наступлении события, то есть выполнении операции cause (event), освобождаются все ожидающие его процессы, в то время как в случае семафора освобождается лишь один про­цесс. Операции с событиями можно реализовать либо с помощью двоичной переменной, либо с помощью счетчика, при этом основные принципы оста­ются одинаковыми.

Важный тип события в системах реального времени связан с внешними прерываниями. Программа обработки - обработчик прерываний - ждет пре­рывания. Когда оно происходит, исполнение обработчика возобновляется.

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