powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Все драйвера в Linux работает в одном и том же контексте или в разных?
12 сообщений из 12, страница 1 из 1
Все драйвера в Linux работает в одном и том же контексте или в разных?
    #38474328
Все драйвера в Linux работает в одном и том же контексте (адресном пространстве kernel-space), или в разных (по аналогии как в разных работают процессы в user-space)?
...
Рейтинг: 0 / 0
Все драйвера в Linux работает в одном и том же контексте или в разных?
    #38474411
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начнём с того, что драйвера в линукс бывают двух типов: user=space и уровня ядра...
Значит, уже не в одном.
...
Рейтинг: 0 / 0
Все драйвера в Linux работает в одном и том же контексте или в разных?
    #38474424
MasterZivНачнём с того, что драйвера в линукс бывают двух типов: user=space и уровня ядра...
Значит, уже не в одном.
Ну для этого и было сделано уточнение: по типу как и процессы, т.е. каждый драйвер уровня ядра в своем отдельном адресном пространстве?
...
Рейтинг: 0 / 0
Все драйвера в Linux работает в одном и том же контексте или в разных?
    #38475072
valkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в одном и том же контексте,

мне нравится идея что ядро не имеет своего а.п. Вместо этого, оно помещает себя численно в один и тот же диапазон всех а.п. Эта картина намного яснее и не порождает путаницы подобной вопросу темы. Любой поток пользовательского процесса может уйти в ядро. Не переключаются же при этом а.п? Нет! А прерывания, ими драйверы как раз и занимаются. Кто же в обработчике апаратного прерывания будет переключать контекст на другой процесс? Хотя может в линуксе так делают. У них же и планировщик - отдельный процесс. В Виндовсе, планировщик это отложенный вызов процедуры (dpc), помещаемый в очередь процедурой обработки прерывания (isr) таймера, и по сути все они работают в а.п. процесса, поток к-го прервали, как и все остальные isr'ы и dpc.
А.п. - это атрибут процесса и в каждом таком а.п. есть область для ядра и доступная только ему, в том числе и простым юзерским потокам, когда они переходят в режим ядра. Система может создать какой-то процесс вроде system, напр. чтобы в него помещать созданные в том числе и драйверами потоки работающие только в диапазоне ядра, но всеравно у этого процесса будет свое а.п. с адресами от 0 до FFFFFFFF в 32-битной системе, т.е. и с юзерспейсной областью.
Так что по идее и драйверы в тч, должны работать в а.п. любого пользовательского процесса. Какого, зависит от того, что за событие привело к коду драйвера. Но как в линуксе, я не знаю. :D
...
Рейтинг: 0 / 0
Все драйвера в Linux работает в одном и том же контексте или в разных?
    #38475080
valkotА.п. - это атрибут процесса и в каждом таком а.п. есть область для ядра и доступная только ему, в том числе и простым юзерским потокам, когда они переходят в режим ядра.
А что нужно, чтобы "перейти в режим ядра", перейти в ring0, и это будет значить, что мы можем писать/читать по адресам 0-1GB (в x86_32)?

valkotСистема может создать какой-то процесс вроде system, напр. чтобы в него помещать созданные в том числе и драйверами потоки работающие только в диапазоне ядра, но всеравно у этого процесса будет свое а.п. с адресами от 0 до FFFFFFFF в 32-битной системе, т.е. и с юзерспейсной областью.
Т.е. если процесс system начнет выделять память через kmalloc/vmalloc, то оно будет выделятся в некоторой юзерспейсной области, а не в kernel-space: 0-1GB (в x86_32)?

valkotТак что по идее и драйверы в тч, должны работать в а.п. любого пользовательского процесса. Какого, зависит от того, что за событие привело к коду драйвера. Но как в линуксе, я не знаю. :D
А если это событие - аппаратное прерывание, то в а.п. какого процесса будет это прерывание, ведь оно не вызвано никаким процессом?
...
Рейтинг: 0 / 0
Все драйвера в Linux работает в одном и том же контексте или в разных?
    #38475083
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в одном и том же контексте,

Почему бы вам не направить силы на разработку собственной ОС?
MenuetOS, etc...

Или заняться Фортом?
...
Рейтинг: 0 / 0
Все драйвера в Linux работает в одном и том же контексте или в разных?
    #38475092
valkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в одном и том же контекстеА что нужно, чтобы "перейти в режим ядра", перейти в ring0, и это будет значить, что мы можем писать/читать по адресам 0-1GB (в x86_32)?

с помощью системных вызовов. А те, используют или спец команды, или генерируют прерывание для этого рассчитанное. Типа int 80h. В режиме ядра доступно всё а.п.
Т.е. если процесс system начнет выделять память через kmalloc/vmalloc, то оно будет выделятся в некоторой юзерспейсной области, а не в kernel-space: 0-1GB (в x86_32)?

дело не в каком процессе это происходит, а при каком уровне привелегий. Для этого в системе есть соотв. апи, с помощью одного процесс выделяет себе пользовательскую память находясь в реж.польз., с помощью другого - в ядре. Тоесть чтобы выделить в ядре, нужно быть в режиме ядра и вызывать нужные ф-ции. И наоборот. Хотя в конечном счете все выделения заканчиваются в реж.ядра.
А если это событие - аппаратное прерывание, то в а.п. какого процесса будет это прерывание, ведь оно не вызвано никаким процессом?

я уже писал, как раз для прерываний это видно очень хорошо, - это очень нерационально, в обработчике апп. прерывания переключаться на какой-то другой процесс. Прерывания - сами по себе, они отдельные единицы работы процессора, но когда они выполняются, они "видят" а.п. процесса, работу к-го прервали. Поскольку это не проблема. Они работают в обл.ядра, а если обработка прерывания подразумевает попадание данных в а.п. другого процесса, это не проблема - они будут скопированы, отображены в нужный момент в цепочке доставки данных конечному пользователю.
...
Рейтинг: 0 / 0
Все драйвера в Linux работает в одном и том же контексте или в разных?
    #38475094
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нахрена? Нахрена приложению знать тонкости контекста ?
Кто-нибудь может мне пояснить вероятность такого события (некошерные проги отбрасываем)?
...
Рейтинг: 0 / 0
Все драйвера в Linux работает в одном и том же контексте или в разных?
    #38475097
valkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMА нахрена? Нахрена приложению знать тонкости контекста ?
Кто-нибудь может мне пояснить вероятность такого события (некошерные проги отбрасываем)?
а оно и не знает, переключениями между а.п. занимается диспетчер ОС. Напр. во время работы какого-то потока какого-то процесса какой-то польз.программы возникает прерывание от таймера, управление уходит на обработчик этого прерывания, а.п. остается того же процесса, но работа уже идет в режиме ядра; обработчик уменьшает счетчик для текущего потока, видит, что хватит ему выполняться, ставит в очередь dpc планировщика и, на выходе, понижает IRQL, когда доходит до IRQL=DISPATCH_LEVEL, выполняются dpc, в т.ч. - dpc планировщика, тот выбирает новый поток из списка очередей, и если тот из другого процесса чем текущий, - переключает контекст, изменяется указатель на каталог таблиц страниц, сливается tlb и тд, вот уже и другое а.п. Это делается ОС, прозрачно для програмы, в рамках многоуровневой обработки прерывания, но, как видно, для этого не нужно какого-то третьего процесса со своим а.п. Также и драйверы обрабатывают свои прерывания на своих DIRQL'ях. Но это на виндовс.
...
Рейтинг: 0 / 0
Все драйвера в Linux работает в одном и том же контексте или в разных?
    #38475100
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valkotвозникает прерывание от таймера, управление уходит на обработчикАга... Вот именно в этот момент - приложение уже не контролирует обработку. Мимо...
...
Рейтинг: 0 / 0
Все драйвера в Linux работает в одном и том же контексте или в разных?
    #38475102
valkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMvalkotвозникает прерывание от таймера, управление уходит на обработчикАга... Вот именно в этот момент - приложение уже не контролирует обработку. Мимо...
ну естесственно, такова природа прерываний, даже если его обработка была бы возложена на приложение, его возникновение - независимый вобщем процесс. это не вызов ф-ции. Это еще один независимый механизм, о котором впрочем приложениям ничего неизвестно.
...
Рейтинг: 0 / 0
Все драйвера в Linux работает в одном и том же контексте или в разных?
    #38475104
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valkotну естесственно, такова природа прерываний,И я о том же... А ТС, видимо, не любитель RTFM :))
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Все драйвера в Linux работает в одном и том же контексте или в разных?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]