Часть1:
Для экспертов linux/unix, пожалуйста, помогите мне разобраться в драйверах устройств. Как я понял, драйвер представляет собой кусок кода, который напрямую взаимодействует с аппаратным обеспечением и предоставляет некоторый доступ для доступа к устройству. Мой вопрос в том, где выполняется эта часть кода, пространство пользователя или пространство ядра?
Я знаю, что код, который выполняется в пространстве ядра, имеет некоторые дополнительные привилегии, такие как доступ к любой ячейке памяти (правильно, если я ошибаюсь). Если мы установим сторонний драйвер, и если он будет работать в пространстве ядра, разве это не будет вредно для всей системы? Как любая ОС справляется с этим?
Ч .2:
Давайте возьмем пример устройства USB (камера, клавиатура..), Как система распознает эти устройства? как система знает, какой драйвер установить? Как драйвер знает адрес устройства для чтения и записи данных?
(если это слишком велико, чтобы ответить здесь, PLS предоставляет ссылки на какую-то хорошую документацию или учебники.., я пробовал и не мог найти ответы на них. Справка по PLS)