Проблема тупиков и способы борьбы с ней

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

Способы борьбы с взаимоблокировками

  • Игнорирование проблемы в целом
  • Предотвращение тупиков
  • Обнаружение тупиков
  • Восстановление после тупиков

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

Гармонически взаимодействующие процессы

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

По его мнению «Гармоническое взаимодействие» - это когда процессы:

- либо не взаимодействуют

- либо взаимодействуют в строго определенных точках кода программ

Эта концепция состоит в следующем:

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

· Процессы не имеют разделяемых данных.

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

· Синхронизация, не сопровождающаяся передачей данных, просто лишена смысла - процессы, не имеющие разделяемых структур данных, совершенно независимы.

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

Механизмы межзадачного взаимодействия

Труба(Pipe) – универсальный инструмент передачи информации между процессами.

Это при условии, что в современных ОС программы изолированы друг от друга.

Pipe – временный файл, позволяющий общаться программам.

Pipe бывают двух видов:

· безымянные (односторонние, только чтение и запись, строго последовательные)

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

Итак, труба – это основной механизм общения программ.

Кроме труб, существует ещё один вид взаимодействия: «почтовые ящики» (Unix – mailbox, Windows - mailslot)

«Почтовый ящик» – область ОП (32-64 Кб), поэтому быстрая, но маленькая. Используется, если нужно послать сообщение сразу многим. Если ящик полон, то при новом письме выталкиваем самое старое

Отличия:

- труба, доставка с гарантией

- почтовый ящик, без гарантий

Классификация внешних устройств

1) Классификация по значению

a) - ввода

b) - вывода

c) - устройства внешней памяти

§ Магнитные накопители (ленты, магнитные и жесткие диски)

§ Оптические накопители (лазером, CD, DVD)

§ Флэш-устройства (минерализация – представляет собой кристалл, который поляризуется)

d) – связные устройства (сетевые карты, модемы)

2) По передаче данных

a) - символьные

b) – блочные

3) По доступу

a) – произвольное

b) - последовательное

Драйверы внешних устройств.

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

Если устройство включено в список совместимого оборудования, то драйвер такого устройства обычно входит в состав Windows.

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

Plug and Play – техника холодного подключения (автоматически ищет драйвера для подключённого устройства) . Идея: воткнуть новое устройство, во время загрузки обнаруживается, ищется драйвер, загружается и все работает.

Горячее подключение – USB.

Большинство ОС запрещают пользовательским программам непосредственный доступ к аппаратуре. Это делается для повышения надежности и обеспечения безопасности в многопользовательских системах.

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

- могут повредить работе ядра

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

Это значит, уменьшение безопасности.

Наши рекомендации