2

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

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

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

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

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

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

1 ответ1

3

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .