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

Вы могли открыть терминал и выбрать список процессов с ps -Af или pstree -alp, где pstree также показывает родительско-дочерние отношения между процессами. Это - общий ответ на, "что X выполняет прямо сейчас", по крайней мере, если он работает дольше, чем часть секунды.

Мое предположение - то, что это обновляет списки пакета, которые это должно сделать, чтобы смочь сказать, существуют ли какие-либо обновления вообще и показывают Вам количество доступных обновлений. Это не означает, что устанавливает их автоматически, просто показав Вам, что необходимо проверить, сделать ли это вручную.

Это показало бы "обновления, доступные", когда после проверки там на самом деле были доступные обновления, и не показывают его, когда не было никого доступного. Если это не это, мне интересно также :)

7
06.03.2014, 01:14
3 ответа
[1122848]Открытые файлы управляются структурой в памяти кернела, которая обрабатывает ссылку in-memory на inode.[1123324]. Они также отслеживают режим открытия файла, расположение в файле, а также кэш.

AFAIK в большинстве UNIX/Linux систем, эта структура не может быть заменена, а так как размер хранилища обычно больше на порядок или два, чем память, то практически невозможно иметь значительное количество файлов в хранилище одновременно.[1123325]. Кроме того, не все платформы имеют активный деамон синхронизации, поэтому записанная информация может иногда храниться [1123326] только [1123327] в кэше до тех пор, пока не будет выполнена синхронизация или закрытие.

Кроме того, существует множество файловых дескрипторов, о которых вы, как разработчик, не знаете, например, динамически загружаемые библиотеки и двоичные файлы программ/интерпретаторов.[1122853].

3
27.01.2020, 20:18
[1122142]Некоторые из них просто [1122508], потому что[1122509], как вы сказали, это "просто число" -- и если вы хотите иметь возможность оккационально использовать большее число, чем то, что вы можете поместить в (допустим) целочисленный тип данных, то вы должны использовать больший тип данных для [1122510]всех[1122511] дескрипторов. например, 2 байта на идентификатор дескриптора, а не только 1 байт -- и удвоение размера всех ваших дескрипторов вскоре приведет к утечке памяти, которая может быть лучше использована для приложений, а не только для операционной системы. [12144] Существует также много другой информации, связанной с дескрипторами, а также необходимость ведения списков, которые используются и которые свободны - существуют ограничения на то, насколько большим может быть размер этих структур данных, чтобы оставаться эффективным.[1122145].
2
27.01.2020, 20:18
[1122146] Согласно [1122512] данному учебнику [1122513], максимальное количество обработчиков открытых файлов можно получить при вызове [1122514]cat /proc/sys/fs/file-max[1122515]. В моей системе я получаю значение 797736, которое довольно большое. Быстрая [1122516]ps -e|wc -l[1122517] говорит мне, что у меня запущено около 200 процессов, а это значит, что любая программа может открыть около 4000 файловых дескрипторов.[12145] Однако, это глобальное значение - его можно получить более точно, используя ulimit. [1122518]ulimit -a[1122519] сообщает, что я могу открыть максимум 1024 файловых дескрипторов, что все равно довольно большое число, хотя ничего по сравнению с абсолютным максимумом. Но оно может быть увеличено, если нужно, и на самом деле это не [1122520]жесткий [1122521] предел.[12146] Итак, мой вывод? Ручки файлов не являются дефицитным ресурсом. Учебники просто хотят убедиться, что вы открываете файлы только тогда, когда они вам нужны, потому что если вы оставите открытыми дескрипторы файлов, они могут мешать другим процессам, которые также могут пытаться работать с файлами, особенно если вы блокируете их, когда вы их открываете.[1122151].
2
27.01.2020, 20:18

Теги

Похожие вопросы