Я пытаюсь завершить изображение того, как ПК и ОС взаимодействуют друг с другом. И я нахожусь в точке, где я немного недооцениваю, когда речь идет о драйверах устройств.Драйверы устройств и Windows
Пожалуйста, не пишите такие вещи, как слишком сложные, или вам не нужно знать, когда используете высокопрограммные функции laguage и winapi. Я хочу знать, это для учебных целей.
Итак, самая простая структура того, как ОС и ПК (на ПК я имею в виду, конечно, HW), - это то, что я вижу, что все, кроме прямых команд ЦП, которые могут делать CPU сами по себе (арифметическая операция, ее регистры доступ и доступ к памяти) должны проходить через ОС. В основном из уровня 3 кольца вы не можете использовать входы и выходы, которые используются для сращивания других HW. Я знаю, что есть MMIO, но он должен быть установлен с помощью связи порта.
Это было не так все время. Даже я немного молод, чтобы помнить MSDOS, я знаю, что вы можете напрямую обращаться к HW, потому что там нет ограничений, нет режима звонка. Таким образом, вы можете написать строку для использования Diplay функцией DOS или напрямую использовать память видеокарты и написать ее самостоятельно.
Но по мере развития ОС этой возможности больше не существует. Но это прекрасно, поскольку ОС теперь обрабатывает всю коммуникацию HW, и, откровенно говоря, она более удобна и безопаснее (я бы сказал, единственный вариант) в многозадачной среде. Итак, теперь вы вместо того, чтобы использовать инструкции int для использования функции отображения BIOS или функции DOS, вы вызываете dll, которая внутренне обрабатывает все, о чем вам не нужно знать.
Я понимаю это. Я также понимаю, что драйверы устройств являются частью кода, который работает в кольцевом уровне 0, поэтому он может выполнять все взаимодействия HW. Но я не понимаю, есть ли связь между OS и драйвером устройства. Давайте возьмем пример - я хочу, чтобы звуковая карта издавала звук. Поэтому я вызываю Windows API для доступа к звуковой карте, но что происходит? Записывают ли Windows драйверы устройств?
Но если он вызывает драйвер устройства, означает ли это, что все драйверы устройств, которые могут быть вызваны функцией winAPI, должны иметь подпрограммы, названные определенным образом? Я имею в виду, когда у меня появилась новая звуковая карта, должны ли ее драйверы функционировать так же, как и старые? Так что Windows может фактически называть ту же функцию с ее точки зрения? Но если Windows имеет предопределенные наборы функций, исправленных драйверами устройств, то он не может использовать новые драйверы, которые существовали до выхода последней версии ОС.
Пожалуйста, помогите мне понять этот беспорядок. Я действительно злюсь. Благодарю.
Спасибо, хороший ответ. Могу ли я получить еще один? Если я правильно понимаю, для устройств, «известных» ОС, существует предопределенный набор имен функций и поэтому ОС может вызывать, например, функцию «get_sector()» независимо от того, какой контроллер используется для доступа к жесткому диску (SCSI, SATA, ATA. ..). Но если у меня есть новое устройство, с какой ОС не удается манипулировать с помощью WinAPI, могу ли я писать драйверы для него, а не называть их из своей программы? Благодарю. –
@ b-gen-jack-o-neill - Да: приложения Windows могут использовать функцию [DeviceIoControl] (http://msdn.microsoft.com/en-us/library/aa363216.aspx) для отправки/получения произвольных данных к драйверу устройства. – ChrisW