- •1.Элементы пвэм. 2. Узлы и блоки пэвм.
- •3.Память статического типа
- •4.Память динамического типа
- •8. Интерфейс rs-232с
- •9. Передача данных по usb
- •10. Линии питания и данных usb
- •11. Архитектура usb
- •12. Пакеты usb
- •13.Память эвм
- •Назначение и виды памяти.
- •Современные микросхемы озу бывают двух видов - статические и динамические.
- •Организация внутренней памяти
- •14.Виртуальная модель памяти
- •1.2. Критерии эффективности работы сети
- •1.2.1. Время реакции
- •1.2.2. Пропускная способность
- •1.2.3. Показатели надежности и отказоустойчивости
- •21 Операцио́нная систе́ма
- •22.Ос реального времени.
- •26.Сетевое взаимодействие ос и клиентских приложений.
- •27. Выделение памяти для приложения.
- •28. Синхронизация
- •29. Тупики
- •30.Семафоры Дейкстры
- •32. Организация памяти
- •33. Файловые системы
- •36. Сравнение файловых систем
- •Объектно-ориентированные особенности языка
- •Модульность программного кода
- •Основные понятия
- •Определение ооп и его основные концепции
- •43. Указатель
- •44.Умный указатель
- •Владеющие указатели
- •Указатели с подсчётом ссылок
- •Реализации
- •Проблема циклических ссылок
28. Синхронизация
Синхронизация (от др.-греч. σύγχρονος — одновременный) в информатике обозначает одно из двух: синхронизацию процессов, либо синхронизацию данных.
Синхронизация процессов — приведение двух или нескольких процессов к такому их протеканию, когда определённые стадии разных процессов совершаются в определённом порядке, либо одновременно.
Синхронизация необходима в любых случаях, когда параллельно протекающим процессам необходимо взаимодействовать. Для её организации используются средства межпроцессного взаимодействия. Среди наиболее часто используемых средств — сигналы и сообщения, семафоры и мьютексы, каналы (англ. pipe), совместно используемая память.
Синхронизация данных — ликвидация различий между двумя копиями данных. Предполагается, что ранее эти копии были одинаковы, а затем одна из них, либо обе были независимо изменены.
Способ синхронизации данных зависит от делаемых дополнительных предположений. Главной проблемой тут является то, что независимо сделанные изменения могут быть несовместимы друг с другом (так называемый «конфликт правок»), и даже теоретически не существует общего способа разрешения подобных ситуаций.
Тем не менее, есть ряд частных способов, применимых в тех или иных случаях:
Наиболее простой способ: предполагают, что изменения вносились лишь в одну из копий — «рабочую» — и другая копия просто перезаписывается её содержимым. Этот способ реализуют большинство приложений синхронизации; в силу необратимости делаемых изменений пользователю даётся выбор, какую копию считать «главной».
Если данные представляют собой набор независимых записей (то есть любое сочетание записей является корректным — это, напр., телефонная книга), то можно просто объединить множества записей. Это ликвидирует риск потери информации, но чтобы удалить запись из набора, этот способ приходится сочетать с первым.
Если наборы синхронизируются неоднократно, можно автоматически вводить в них дополнительную служебную информацию: дата и время последнего изменения записи, пометки об удалённых записях (стираются после следующей синхронизации или через достаточно большое время) и пр. . Этот подход используется, например, в Outlook.
Обрабатывать конфликты правок: автоматически (если возможно), иначе — вручную. Этот, наиболее общий способ применяется только если указанные выше упрощённые недопустимы — например, в системах контроля версий. Так, CVS при обнаружении двух независимых изменений объявляет о «конфликте» и либо (в простых случаях) разрешает его автоматически, либо предоставляет пользователю разрешить его вручную. В этих случаях конфликтов стараются просто избегать — например, распределением областей компетенции.
29. Тупики
Ситуация, когда каждый из параллельных процессов ожидает освобождения ресурса, занятого другим процессом из данного множества, называется взаимоблокировкой, или тупиком. Для использования ресурса выполняется следующая последова-тельность действий: запрос, использование, освобождение. Один из способов разграничения доступа – использование сема-форов, присоединенных к каждому из ресурсов. Для запроса используется вызов down(), а для освобождения up(). Рассмот-рим случай, когда процессу необходимо 2 или больше ресурсов:
typedef int semaphore
semaphore rc1, rc2;
void process_A(void) void process_B(void) void process_C(void)
{down(&rc1); {down(&rc1); {down(&rc2);
down(&rc2); down(&rc2); down(&rc1);
use_2_resources(); use_2_resources(); use_2_resources();
up(&rc2); up(&rc2); up(&rc1);
up(&rc1);} up(&rc1);} up(&rc2);}
Пусть пока в системе только 2 процесса А и В. В этом случае никакая взаимоблокировка невозможна. Действительно, если процесс А получит доступ к ресурсу 1, процесс В будет заблокирован на получении доступа. Процесс 1 блокирует второй ресурс, использует ресурсы, и освобождает их, после чего доступ получает второй процесс. В случае, если это процессы А и С возможна следующая ситуация: процесс А захватил ресурс 1, диспетчер переключил процессы, процесс С получил управ-ление и захватил ресурс 2. Теперь процесс А ожидает освобождение ресурса 2, а процесс С – ресурса 1. Произошла взаимо-блокировка. Т.о., на взаимоблокировки существенное влияние может оказывать код программы. Однако в системе, в которой существует несколько самых разных видов ресурсов, и за доступ к которым конкурируют несколько процессов предусмот-реть корректное написание последовательности запросов не представляется возможным.
Коффман доказал, что для возникновения взаимоблокировки необходимо выполнение следующих 4 условий:
- условие взаимного исключения. Каждый ресурс в данный момент времени или отдан ровно одному процессу, или дос-тупен
- Условие удержания и ожидания. Процессы, в данный момент удерживающие полученные ранее ресурсы, могут запра-шивать новые ресурсы
- условие отсутствия принудительной выгрузки ресурса. У процесса нельзя принудительным образом забрать ранее по-лученные ресурсы. Процесс-владелец должен сам освободить их.
- условие циклического ожидания. Должна существовать круговая последовательность из двух и более процессов, каждый из которых ждет доступа к ресурсу, удерживаемому следующим членом последовательности.
Для моделирования взаимоблокировок используют графы:
Ребро, направленное от ресурса к процессу, означает, что ресурс ранее был запрошен процессом, получен и в данный момент используется процессом. Ребро, направленное от процесса к ресурсу. означает, что процесс в данный момент блокирован и находится в состоянии ожидания доступа к этому ресурсу. Далее показана ситуация взаимоблокировки: Процесс А ожидает ресурс, который захвачен процессом В, а процесс В ожидает ресурс, который захвачен процессом А. В обозначении ресурса может быть указано число доступных единиц ресурса. Число ребер, исходя-щих из ресурса, не может превышать числа единиц этого ресурса. Модель, представленную таким графом, называют моде-лью повторно используемых ресурсов Холта.
Возможны 4 стратегии при решении проблемы тупиковых ситуаций:
- пренебрежение проблемой.
- Обнаружение и восстановление: позволить взаимоблокировке произойти, обнаружить ее и предпринять какие-либо дей-ствия.
- предотвращение тупиковой ситуации с помощью структурного опровержения одного из четырех условий, необходимых для взаимоблокировки
- избегание тупиковых ситуаций с помощью аккуратного распределения ресурсов
Фактически тупиковые ситуации возможны не только при борьбе за ресурсы устройств ввода-вывода. Например, в системе всегда ограничивается максимальное число открытых файлов. Пусть это 100. В системе существует 10 процессов, каждый из которых требует открытия 12 файлов. Возможна ситуация, когда каждый из этих процессов откроет ровно 10 файлов, полно-стью исчерпав ресурс таблицы. Ни один из процессов не сможет продолжить работу. Большинство ОС игнорируют такую проблему.