LINUX.ORG.RU

Порядок взаимодействия процесса с ядром и драйвером устройства.

 


0

3

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

А обратные действия, допустим, подтверждение записи, если оно требуется, выполняется в контексте softirq?...



Последнее исправление: Mirmik (всего исправлений: 2)

Ответ на: комментарий от anonymous

А наверняка возникает когда-нибудь такая ситуация, когда файловой системе требуется время для выполнения своих каких-то внутренних нужд. Бывает такое?

Mirmik
() автор топика

А вот еще вопрос.

А планировщик в каком контексте отрабатывает. Он переключается на какой-то свой стек или работает поверх процесса?

Mirmik
() автор топика
Ответ на: комментарий от Mirmik

ну да, она может выполнить это заодно с каким-то запросом процесса, или иметь на этот случай тред уровня ядра, который будет периодически просыпаться и делать что надо

anonymous
()
Ответ на: комментарий от Mirmik

не понял вопрос; планировщик работает в режиме ядра, а у него свой стек, никак не связанный со стеками процессов

anonymous
()
Ответ на: комментарий от anonymous

То есть, при наступлении прерывания от системного таймера мы переходим в специальный поток, в котором выполняется планировщик. Ага...

И, конечно, softirq и планировщик разнесены по разным потокам? Ну, это безопастность...

А тасклеты где исполняются?

А кто зовет softirq? Вот у меня случилось irq и оно сказало, что оно хочет перенести обработку в softirq. Оно само как-то переключится на softirq, или сперва позовёт планировщик?

Mirmik
() автор топика
Ответ на: комментарий от Mirmik

у планировщика нет своего потока, это просто функция, которая может быть вызвана в любом контексте из двух: контекст процесса (когда процесс вызывает сискол) и контекст прерывания, когда возникает аппаратное прерывание и есть его обработчик

softirq обрабатываются в специальных ядерных тредах ksoftirqd/N, которых по одному на каждое ядро процессоров

если требуется выполнение «нижней половины», то когда прерывание завершается, ядро вызывает планировщик, который ставит на выполнение соответствующий тред; когда он выполнит свою задачу, то скажет ядру перестать выполнять себя, и тут ядро вызовет планировщик, который выберет очередной процесс для работы

anonymous
()
Ответ на: комментарий от Mirmik

в режиме ядра один единственный стек на все, ну кроме своих собственных стеков у ядерных нитей

anonymous
()
Ответ на: комментарий от anonymous

Под ядром тут понимается специальный ядерный поток?

Хм... А как устроен переход в ядро после вызова прерывания? Ведь по сути после прерывания мы должны вернуться в процесс, который был прерван.

Mirmik
() автор топика

И, кстати, а в каком стеке работает irq? В стеке прерванного процесса или в каком-то своем?

Mirmik
() автор топика

А может быть какая-нибудь книжка есть, в которой описано, что и как куда переключается, и как диспетчеризация. Именно вот на таком логистически-поведенческом уровне. А то все книжки по ядру, которые я смотрел как-то по коду всё больше пройтись намереваются, или же какую-то отдельную систему рассматривают, так что общую картину как-то сложить не получается.

Mirmik
() автор топика
Ответ на: комментарий от anonymous

да да да... Книжку мне надо... Или лекции какие-то.

Mirmik
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.