Проблема тупиков и способы борьбы с ней
Предположим, что несколько процессов конкурируют за обладание конечным числом ресурсов. Если запрашиваемый процессом ресурс недоступен, ОС переводит данный процесс в состояние ожидания. В случае, когда требуемый ресурс удерживается другим ожидающим процессом, первый процесс не сможет сменить свое состояние. Такая ситуация называется тупиком. Говорят, что процесс находится в состоянии тупика, если он ожидает события, которое никогда не произойдет. Иногда подобные ситуации называют взаимоблокировками. В общем случае проблема тупиков эффективного решения не имеет.
Способы борьбы с взаимоблокировками
- Игнорирование проблемы в целом
- Предотвращение тупиков
- Обнаружение тупиков
- Восстановление после тупиков
Можно избежать взаимоблокировки, например используя алгоритм банкира. Идея основана на том, что всегда есть резерв. Алгоритм базируется на так называемых безопасных или надежных состояниях. Безопасное состояние – это такое состояние, для которого имеется, по крайней мере, одна последовательность событий, которая не приведет к взаимоблокировке.
Гармонически взаимодействующие процессы
Статью с таким названием написал Дейкстра, чтобы облегчить жизнь программистам.
По его мнению «Гармоническое взаимодействие» - это когда процессы:
- либо не взаимодействуют
- либо взаимодействуют в строго определенных точках кода программ
Эта концепция состоит в следующем:
· Каждый процесс представляет собой независимый программный модуль, для которого создается иллюзия чисто последовательного исполнения.
· Процессы не имеют разделяемых данных.
· Все обмены данными, и вообще взаимодействие, происходят в выделенных точках процессов. В этих точках процесс, передающий данные, останавливается и ждет, пока его партнер будет готов эти данные принять. Аналогично, процесс, принимающий данные, ожидает, пока ему передадут данные.
· Синхронизация, не сопровождающаяся передачей данных, просто лишена смысла - процессы, не имеющие разделяемых структур данных, совершенно независимы.
Концепция гармонически взаимодействующих процессов очень привлекательна с теоретической точки зрения и позволяет легко писать правильные программы. Однако часто по соображениям производительности оказывается невозможно отказаться от разделяемой памяти.
Механизмы межзадачного взаимодействия
Труба(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.
Большинство ОС запрещают пользовательским программам непосредственный доступ к аппаратуре. Это делается для повышения надежности и обеспечения безопасности в многопользовательских системах.
Чаще всего драйверы являются частью ядра системы, исполняются в высшем кольце защиты и имеют доступ на запись к сегментам данных пользовательских программ, а часто и к данным самого ядра, т.е. драйверы всегда работают в режиме ядра. Отсюда следующие опасности:
- могут повредить работе ядра
- их установка позволяет нам влезть внутрь ядра
Это значит, уменьшение безопасности.