Зачем пользовательской программе путаться с пространством ядра?

9

Я даже не уверен, в чем проблема, но я говорю об атаке ядра, описанной здесь . Внизу этого списка комментариев кто-то спрашивал об аренде процесса. Уловка не улучшила ситуацию (машина все еще работает очень вяло), и ответный комментарий говорит кое-что о пространстве ядра против пространства пользователя.

Прежде всего, правильный ответ на комментарий? Если так, то почему renice работает для вещей в пространстве пользователя, а не для вещей в пространстве ядра? Кроме того, согласно тому, что я прочитал , все программы, которые пользователь запускает самостоятельно, должны быть в пространстве пользователя, что я пропустил?

Если это неверно, то почему бы не улучшить ситуацию?

phunehehe
источник

Ответы:

9

Существуют сервисы, которые ядро ​​предоставляет пользовательскому пространству (например, открытие сокетов). Существует четко определенный интерфейс (API), через который программы пользовательского пространства могут взаимодействовать с ядром.

В этом случае программа пользовательского пространства многократно открывает сокеты и отправляет через них дескрипторы файлов, а затем закрывает сокеты. Эти действия выполняются ядром. Он будет хранить дескриптор файла в буфере, пока другой конец сокета не прочитает его. Конкретная ошибка заключается в том, что сборщик мусора должен в конечном итоге освободить файловый дескриптор, но это не так - утечка fd. Утечка FDS складывается и сидит там, потребляя ресурсы. Убийство программы не освобождает ресурсы, потому что они не принадлежат программе.

Шон Дж. Гофф
источник
6
И причина, по которой renice не помогает, заключается в том, что она влияет только на то, насколько большую долю пользовательского ЦП занимает процесс. Время, проведенное в режиме ядра, не учитывается для этой цели. Вообще говоря, nice влияет только на программы, связанные с процессором, а не на программы, связанные с IO. Здесь неуправляемый процесс - это чистый ввод-вывод, и он даже не выполняет столько системных вызовов, поскольку ошибка заключается в том, что каждый системный вызов занимает слишком много времени.
Жиль "ТАК - перестать быть злым"
1
@ Жиль Извините, что затронул такую ​​старую проблему, но она выглядит очень интересно! Правильно ли я понимаю, что что-то подобное ioniceпринесет больше пользы?
rozcietrzewiacz
@rozcietrzewiacz Я не думаю, что Ионис тоже поможет, но я не уверен. Из-за ошибки процесс тратит все свое время на один системный вызов, и Ionice не помешает этому (я думаю).
Жиль "ТАК - перестань быть злым"