Ядро не является приоритетным ..... Как? - PullRequest
0 голосов
/ 07 марта 2011

Процесс, который выполняется в режиме ядра, не может быть прерван.

Как это возможно?

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

Например, как процесс отреагирует на прерывание по таймеру (если он выполняется в режиме ядра)?Или как бы это отреагировало на прерывание отключения при высокой температуре.

Пожалуйста, если кто-нибудь сможет рассеять мои сомнения

Ответы [ 2 ]

4 голосов
/ 07 марта 2011

Перво-наперво, ваши предположения неверны: ядро ​​Linux предоставляет ограниченную возможность прерывания в режиме ядра, если заданы параметры конфигурации CONFIG_PREEMPT_VOLUNTARY или CONFIG_PREEMPT.

При включенном вытеснении задачи выиграныне выгружается, если они держат замки;разработчики ядра очень внимательно следят за тем, как долго процессы удерживают блокировки, и стараются сократить время, в течение которого блокировки удерживаются.(Частично для упреждающих, частично потому, что удерживаются более длинные блокировки, тем менее параллельной может быть система, если несколько процессоров борются за одну и ту же блокировку. Если блокировки удерживаются в течение коротких периодов времени, возникает меньше конфликтов и потенциально более высокая пропускная способность.)

Кроме того, разработчики ядра стараются ограничить время, которое процесс может проводить в режиме ядра.В конце концов, время, проведенное в ядре, - это время, которое не потрачено на приложение, а делает то, что делает приложение.

Если стандартное ядро ​​Linux не может обеспечить вас достаточно хорошимПри резкой обработке прерываний производительности в режиме реального времени вы, конечно, можете использовать такую ​​систему, как RTLinux , для которой доступна коммерческая поддержка .

0 голосов
/ 05 апреля 2012

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

...