2015-07-12 3 views
2

Я знаю, что пользовательские приложения могут работать только в пользовательском режиме, который предназначен для обеспечения безопасности системы. Напротив, большинство драйверов запускаются в режиме ядра, для доступа к устройствам ввода-вывода. Тем не менее некоторые драйверы запускаются в пользовательском режиме, но им разрешен доступ к устройствам ввода-вывода. Поэтому у меня есть следующий вопрос. В чем основное различие между драйверами и пользовательскими приложениями? Не разрешено ли пользовательскому приложению получать доступ к устройствам ввода-вывода, как это делают некоторые драйверы?В чем основное отличие между драйверами и пользовательскими приложениями?

Спасибо.

ответ

2

Прежде всего, some preview from this link: -

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

При запуске приложения в режиме пользователя Windows (/ любая ОС) создает процесс для приложения . Процесс предоставляет приложение с приватным виртуальным адресным пространством и отдельной таблицей дескрипторов. Поскольку виртуальное адресное пространство приложения является приватным, одно приложение не может изменять данные, принадлежащие другому приложению.

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

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

Также from this link

Программные драйверы

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

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


Какова главная разница между драйверами и приложениями пользователя?

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

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

Невозможно ли использовать пользовательское приложение для доступа к устройствам ввода-вывода, например, к некоторым драйверам?

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

Приложения подключаются к устройствам ввода-вывода через интерфейсы API/интерфейсы, представленные драйверами устройств (скорее, ОС). ОС управляет большинством взаимодействия с аппаратным/программным обеспечением. Поставщики оборудования пишут «плагины/модули/драйверы», которые позволяют ОС контролировать свое конкретное оборудование. Таким образом, используя интерфейсы, предоставляемые ОС, вы можете написать приложение для доступа к устройствам ввода-вывода.

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

Также check this answer, чтобы узнать больше о адресном пространстве драйверов для различных ОС.

+0

Да, операционная система вызывает функцию, реализованную в драйвере. Но я имею в виду, что кто-то написал этот драйвер (который мог напрямую подключаться к устройствам ввода/вывода), а затем он был добавлен в операционную систему. Так не может ли писатель этого драйвера написать приложение пользователя, которое может напрямую подключаться к устройствам ввода-вывода и повреждать систему? – user1289

+0

@ GrigorApoyan-Пользовательское приложение не может напрямую обращаться к оборудованию, если у него нет разрешения на это. Пользовательские приложения вынуждены запускаться в пространстве пользователя (чтобы предотвратить повреждение критических данных). *** Если устройство-драйвер создает приложение, которое обеспечивает доступ к низкоуровневому доступу, оно должно запускаться в пространстве ядра для доступа к оборудованию (IO-устройство в вашем случае), и поэтому оно может быть названо драйвером устройства , а не пользовательское приложение, которое не может работать в режиме ядра. *** –

Смежные вопросы