Как ОС защищает от взаимодействия драйверов в многозадачности?

415
Vit

Я думал. Давайте рассмотрим этот пример: у нас на ПК работают 2 программы. Первый - это, например, интернет-браузер, а второй - какое-то программное обеспечение для сканирования WiFi. Теперь браузер хочет использовать подключение к Интернету через WiFi, но для сканера WiFi требуется, чтобы адаптер WiFi был переключен в режим сканирования ...

Итак, какая сторона в современной архитектуре ОС отвечает за обработку таких коллизий? Какой-то слой ОС, драйвер устройства или сама программа?

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

В принципе, я хочу знать, как решаются эти ситуации. Я много думал об этом, но я так и не понял этого. Потому что есть несколько вариантов:

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

Но вы можете написать свои собственные драйверы, не лежащие под каким-то тяжелым OS API. И тогда 2 приложения могут использовать этот драйвер для двух противоположных функций. Моя главная проблема в понимании этого - многозадачная среда. Потому что как процесс 2 может вызвать некоторую функцию драйвера, если процесс 1 вызвал ее раньше, и он переключился на процесс 2 до того, как запрос драйвера был завершен? Благодарю.

2

1 ответ на вопрос

3
Dr McKay

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

И более абстрактный ответ. В каждой здравомыслящей операционной системе есть HAL - Уровень аппаратной абстракции . Даже X-сервер и Windows-система управления окнами не вызывают драйвер видео / мыши / клавиатуры напрямую. Каждый запрос должен проходить через HAL (поэтому, например, файловой системе не нужно знать, является ли конкретное устройство последовательным, жестким диском или чем-то еще, это просто блочное устройство).

Я уверен, что HAL поддерживает какую-то очередь запросов, которые должны быть переданы конкретному драйверу. Таким образом, в основном только проблемы, вызванные многопоточностью, являются условиями гонки, так как эта очередь FIFO ( First In First Out ). Таким образом, в случае со сканером и браузером, если сканер является первым приложением / потоком для доступа к WiFi-карте, он выигрывает и обычное соединение теряется. Но, если браузер сначала сделает запрос, он сможет получать данные, а режим будет переключен чуть позже.

Я надеюсь, что это проясняет ситуацию.