Я не знаю наверняка, так как я не один из разработчиков выбора (), но я сказал бы, что это - оптимизация производительности. Функция вызова знает, сколько дескрипторов файлов она вставила чтение, запишите и кроме FDs, итак, почему ядро должно понять это снова?
Помните, что в начале 80-х, когда выбор () был представлен, у них не было multi-gigaghertz, многопроцессорные системы для работы с. VAX на 25 МГц был довольно черт побери быстр. Плюс, Вы хотели, чтобы выбор () работал быстро, если он мог: если некоторый ввод-вывод ожидал процесса, почему заставляют процесс ожидать?
Буферы и кэш динамично измерены. Если для процессов нужно больше пространства, то оно взято от буферов и кэша.
Ключ должен посмотреть на вторую строку (" - / + буферы/кэш").
Mem: 496 489 6 0 4 452
-/+ buffers/cache: 33 462
Заметьте, что свободной во второй строке (462) является сумма 6 (свободный), 4 (буферы) и 452 (кэшируемый). Это - реальное количество свободного пространства. Если бы это падает слишком низко, то система начала бы подкачивать процессы из памяти к области подкачки.
Так в действительности Вы используете 33 МБ памяти и имеете доступные 462 МБ - вероятно, немного меньше, так как Вам все еще были бы нужны некоторые буферы для i/o.
Кроме корректного объяснения Arcege, существует также два других неправильных представления, скрытые в Вашей интерпретации ps euf
.
Команда ps euf
не перечисляет все процессы - необходимо использовать ps axeuf
для этого.
Проценты используемой памяти для каждого процесса даны, как Вы видите, округленный к 0.1%
. Так складывание их даст ошибочные результаты - (примерно) все процессы используют некоторую память - даже если это меньше затем 0.1%
. Если существуют, например, 20 процессов то использование 0.05%
, они составили бы в целом 1%
, нет 0%
.