Форум русскоязычного сообщества Ubuntu


Автор Тема: О работе модулей  (Прочитано 426 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн cupper

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
О работе модулей
« : 06 Январь 2010, 19:38:42 »
Разговор пойдет о модулях, но не о их внутренностях и их работе, а о том как с ними работает ядро. Модули состоят из двух логических частей, init и самого выполняемого тела модуля. Как в целом механизм работает мне известно, функции, что где происходит где запускается на выполение init часть, тут все ясно. А не ясно мне где и как начинает выполняться вторая "core" часть. Мне даже неважно в какой момент она начинает выполнятся, важно именно как это происходит ? По этому поводу мне вообще ничего неизвестно, хотя есть малость предположение что они запускаются через одну из функций создания процессов, потому что в функции copy_process(...)(которая используется в функции do_fork (которая создает процессы)) есть место где идет проверка что запускаемый процесс это модуль и если да то увеличивается счетчик его обращение. Но этого очень мало, нужно больше инфы, может кто подскажет по этому поводу.

PS. все выше описанное следует понимать в конексте ядра linux.

Оффлайн cupper

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: О работе модулей
« Ответ #1 : 09 Январь 2010, 19:17:25 »
UP

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: О работе модулей
« Ответ #2 : 10 Январь 2010, 07:39:06 »
1) прочитай книжку по архитектуре i386. написано очень много и очень доступно. когда поймешь как устроен и как работает микропроцессор читай следующую книжку
2) А. Таненбаум, Операционные системы. Эта книга целиком посвящена операционной системе Minix (учебный микроядерный Юникс). Собственно Торвальдс тоже не с чистого листа начинал. Он догадался почитать эту книжку, ну или её первоначльные варианты. В книге Таненбаума все отлично расписано. что как и зачем работает. все опирается на i386 архитектуру. так что первую книжку очень надо прочитать чтобы не хлопать глазами в главах где описано взаимодействие ПО и аппаратного обеспечения.
3) если после этой книжки останутся вопросы тогда прочитай еще одну книжку по архитектуре i386, SPARC, PowerPC, Alpha, amd64 и снова книжку Таненбаума от корки до корки
4) если еще останутся вопросы тогда задавай

Пользователь решил продолжить мысль 10 Январь 2010, 07:56:54:
Вообще класически выполнение кода ядра начинается когда ему загрузчик передает управление. Ядро инициализируется и запускает многозадачность. Потом управление передается специальному процессу с наименьшим приоритетом что-то типо while (1) do_idle(); такой цикл стоит в конце кода первого процесса init. В винде все знают про "Бездействие системы". Это оно самое.
Как же работают все программы и драйвера??? О_о
Все осчень просто. Процессор от этого бездействия постоянно отвлекают прерывания: или от программ системные вызовы или аппаратные претывания от устройств. Когда возникает прерывание процессор начинает его обрабатывать с привелегиями ядра. И соответсвующий код драйверов вызывается из обработчиков этих прерываний. Это работает вне контекста многозадачности. на время обработки прерывания все процессы приостанавливаются. после обработки все возвраещается на свои места.

в виде потоков ядра оформлены только некоторые части кода. посмотреть на эту потоки можно набрав в командной строке ps ax | less. Процессы будут в начале списка заключенные в квадратные скобки. потоки сделаны много для чего. например для ускорения обрабаотки прерывания. В классическом варианте обработчик прерывания должен был целиком отработать код драйвера и только потом веруть управление. в это время блокированы не только все процессы но и другие обработчики прерываний. что не есть хорошо. поэтому сейчас в ядре обработчики прерываний только хватают данные, ставят в очередь соответсвующим диспетчерам (тем самым ядерным процессам) и тут же завершаются. а диспетчер уже выполняет обработку данных и вызывает нужные драйвера.
« Последнее редактирование: 10 Январь 2010, 07:56:54 от Yurror »

Оффлайн cupper

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: О работе модулей
« Ответ #3 : 10 Январь 2010, 11:32:54 »
спасибо

 

Страница сгенерирована за 0.055 секунд. Запросов: 24.