Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Другие ОС » Взаимодействие между пользов. программой и устройством

Модерирует : lynx, dg

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Aq_UNDERSCOPE_0

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые спецы по архитектуре и ОСям!
 
Опишите популярно в двух словах, как примерно пользовательский процесс взаимодействует с устройством в UNIX-подобных и в любых других операционных системах.
 
Сначала, НЯП, процесс пытается открыть файл, в данном случае -- файл устройства. Система открывает файл и возвращает номер и режим доступа.
Затем процесс инициализирует устройство нужным образом, вызывая ioctl().
Этот самый ioctl() сообщает драйверу, какой режим работы требуется от устройства. Драйвер, получая управление, это или реализует, или выдаёт ошибку.
Теперь вопрос: когда пользовательский процесс пишет в файл устройства, он пишет непосредственно в устройство или в кусок памяти, указатель на который передаётся драйверу?
 
Извините, если вопрос тупой. Просто пытаюсь понять принципы работы вычислительных машин.
 
И ещё вопрос: а железо «знает», что в данный момент на процессоре выполняется именно программа-драйвер конкретного устройства, а не пользовательский процесс? А если процессу разрешено непосредственное управление устройством, он может ли напартачить и попробовать поуправлять не своим устройством? Как примерно реализована защита от этого безобразия?
 
Железо занимается каким-нибудь разграничением доступа для выполняемых процессов на процессоре?

Всего записей: 492 | Зарегистр. 16-12-2005 | Отправлено: 00:44 17-06-2008
vjunk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
когда пользовательский процесс пишет в файл устройства, он пишет непосредственно в устройство или в кусок памяти, указатель на который передаётся драйверу?

Пользовательский процесс передаёт системному вызову write указатель на свою область памяти, в которой находятся записываемые данные, ядро системы передаёт этот уазатель драйверу, драйвер берёт данные из памяти процесса и, как умеет, пересылает в устройство.

Цитата:
а железо «знает», что в данный момент на процессоре выполняется именно программа-драйвер

Железо ничего не знает о том, что выполняется на процессоре (под железом подразумевается переферийное устройство). Разграничением доступа занимается не устройство, а процессор.

Цитата:
А если процессу разрешено непосредственное управление устройством, он может ли напартачить и попробовать поуправлять не своим устройством?

Чтобы процесс мог непосредственно управлять устройством (минуя драйвер) он должен иметь права суперпользователя (в UNIX). Тогда он может пытаться управлять любым устройством.

Цитата:
Как примерно реализована защита от этого безобразия?

Против лома нет приёма.

Всего записей: 303 | Зарегистр. 23-02-2005 | Отправлено: 22:40 18-06-2008
Aq_UNDERSCOPE_0

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vjunk, аагромандейшее спасибо! Я понял несколько фундаментальных вещей.
 

Цитата:
Против лома нет приёма.

Я тут решил архитектуру свою напроектировать, в которой желаю реализовать свои идеи, и может эмулятор напишу Как по-хитрому перекрыть доступ "вражеским" драйверам к устройствам -- я уже придумал. Для этого нужен «умный» контроллер шины, который запомнит номера файлов, связанные с конкретным устройством, драйвер от ОС получает только номер(а), связанные с "его" устройством. Если какой-то модуль начинает сканировать диапазон номеров, то это будет видно как многочисленные обращения к несуществующим устройствам. Заметив это, контроллер шины должен вызвать специальное прерывание, тем самым сообщив ОС о наличии подозрительного модуля.
 
Ещё очень важный вопрос по поводу работы системы прерываний в многопроцессорных машинах.
 
Такая вещь как запрос на прерывание может иметь приоритет, или они все равнозначны? Если какое-то устройство желает, чтобы его немедленно обслужили, как APIC принимает решение, какой из процессоров лучше прервать для запуска обработчика прерывания? А в системах реального времени, когда процессы затребовали для себя быть выполнимыми не менее определённого количества наносекунд в секунду?

Всего записей: 492 | Зарегистр. 16-12-2005 | Отправлено: 20:08 21-06-2008
vjunk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
запомнит номера файлов, связанные с конкретным устройством

Такое ощущение, что ты путаешь дескрипторы файлов с номерами портов ввода-вывода.
Файл это понятие операционной системы, можно считать, что на уровне драйвера устройства такого понятия не существует.

Цитата:
Такая вещь как запрос на прерывание может иметь приоритет, или они все равнозначны?

Обычно, запросы прерывания имеют приоритет, и пока выполняется обработка прерывания, прерывания с более низким приоритетом чем обрабыатываемое запрещаются.

Всего записей: 303 | Зарегистр. 23-02-2005 | Отправлено: 21:38 22-06-2008
Aq_UNDERSCOPE_0

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Такое ощущение, что ты путаешь дескрипторы файлов с номерами портов ввода-вывода.  

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

Всего записей: 492 | Зарегистр. 16-12-2005 | Отправлено: 01:30 23-06-2008
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Операционные системы » Другие ОС » Взаимодействие между пользов. программой и устройством


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru