Что именно делает kernel_task?


30

Я просто хотел бы знать, за что отвечает kernel_task. Кроме того, каково допустимое максимальное использование ОЗУ и ЦП для него?


Лучше всего измерить использование ОЗУ и ЦП после безопасной загрузки, чтобы определить, на какой скорости работает ваша система в режиме ожидания.
bmike

1
По словам Тайлера, это «представление самого микроядра». Если вам нужен более конкретный ответ, он говорит, что «это, кажется, базовый (виртуальный) диспетчер памяти для Mac OS X поверх Mach». Вам будет трудно найти точный ответ, если вы не поговорите с высокопоставленным инженером Apple. Общественность только объединила этот процесс. Источник: bleepsoft.com/tyler/index.php?itemid=43

Ответы:


28

Задача ядра является особенной, так как это целая операционная система / микроядро, основанное на Mach 3.0 . Он абстрагирует большую часть основного оборудования, синхронизации, передачи сообщений и обработки памяти.

Большинство людей замечают в Activity Monitor то, что kernel_taskнакапливают все процессорное время для задержек обработки вычислений ввода / вывода (I / O) и вычислений, а также планирования накладных расходов процессов и потоков. Аналогично - он накапливает все выделения памяти, которые не находятся в пользовательском пространстве. На компьютерах Mac 2014 года и новее эта задача существует для регулирования ЦП - когда температура в процессоре слишком высокая, задаче ядра назначается «нет работы», и он показывает высокую загрузку ЦП, чтобы процессор не работал и не перегревал компьютер. Это особенно заметно на портативной линейке, особенно на MacBook без какого-либо вентилятора или вентилятора для охлаждения процессора. Apple предупреждает об этом потенциальных программистов ядра в разделе «Почему вы должны избегать программирования в ядре» что отключение охлаждения приведет к необратимому повреждению оборудования.

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

Если вы посмотрите его после перезагрузки, вы увидите, что он запускается с минимальными потребностями в ОЗУ и ЦП и вместо этого растет только тогда, когда другие программы запускаются и нуждаются в системных службах.

Чтобы уменьшить его, отключите ненужные порты (WiFi, Bluetooth и т. Д.), А также незанятые / неиспользуемые программы. Если что-то не успокаивается, подумайте о перезагрузке, чтобы убедиться, что ни одна из задач не застряла или не происходит утечка памяти. Если у вас есть программы, выполняющие реальную работу, они заставят ядро ​​использовать как память, так и время процессора - просто посмотрите, как вы начинаете, чтобы увидеть, какие другие программы вызывают такое поведение. Это редко проблема с ядром - даже с плохо работающими программами - которая не может быть решена выходом из системы и повторным входом. Ядро kernel_task хорошо очищается и обычно использует только ресурсы, необходимые рабочей нагрузке.


Благодарность! Вы сказали бы, что 700-750 МБ ОЗУ приемлемы для этого? У меня есть много свободного, но я хотел бы знать, если я все равно должен что-то сделать.
Тимоти Мюллер-Хардер

Не обязательно. На моем главном MacBook Pro он может увеличиться до 2 ГБ, когда я действительно запускаю много задействованных программ. Даже тогда мне не часто приходится перезагружаться, но раз в месяц или около того. (2,66 Core 2 Duo / 8 ГБ ОЗУ)
bmike

14

Mac OS X Internals: системный подход - Амит Сингх - Google Книги :

ядро использует абстракции задач и потоков для разделения своей функциональности на различные потоки выполнения. Ядро использует одну задачу - задачу ядра - с несколькими потоками, которые выполняют операции ядра, такие как планирование, переработка потоков, управление вызовами, разбиение на страницы и обработка исключений Unix. Таким образом, xnu - это монолитное ядро, содержащее заметно разные компоненты, такие как Mach, BSD и I / O Kit, и все они выполняются как группы потоков в одной задаче в одном и том же адресном пространстве.

http://lists.apple.com/archives/darwin-kernel/2010/Sep/msg00014.html :

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


1

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

В этом случае вы можете отсортировать процессы по памяти и завершить некоторые из них, которые потребляют много, чтобы уменьшить нагрузку. (например, убить некоторые процессы Google Chrome Helper)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.