У меня мало знаний о внутренней работе операционной системы, так почему же у нас есть ограничения на максимальное количество открытых файлов и запущенных процессов в Linux?
Буду признателен, если кто-нибудь поможет мне понять.
У меня мало знаний о внутренней работе операционной системы, так почему же у нас есть ограничения на максимальное количество открытых файлов и запущенных процессов в Linux?
Буду признателен, если кто-нибудь поможет мне понять.
Ответы:
Это в основном по историческим причинам. На старых мэйнфреймах Linux многие пользователи подключались и использовали ресурсы мэйнфрейма. Конечно, это необходимо было ограничить, и поскольку такие операции, как файловые дескрипторы и процессы, были встроены в ядро, оно было ограничено. Это также помогает ограничить атаки, такие как вилочная бомба . Защита от формовой бомбы с использованием технологических ограничений показана здесь .
Это также помогает контролировать сложные сервисы и демоны, не позволяя разбегаться и открывать файлы, подобно тому, что пытается сделать вилочная бомба.
Также следует отметить такие вещи, как объем доступной ОЗУ и ЦП, а также тот факт, что 32-разрядный счетчик может ссылаться только на столько (только 4294967296 записей, которые могут быть подсчитаны 32-разрядным счетчиком), но такие ограничения далеко выше тех, которые обычно устанавливают программисты и системные администраторы. В любом случае, задолго до того, как у вас появилось 4294967296 процессов, ваша машина, вероятно, была бы перезагружена, либо так, как планировалось, либо когда она начала блокироваться из-за нехватки другого ресурса.
Если вы не запустите Titan с его 584 ТБ памяти (вы этого не сделаете, поскольку Linux не может быть запущен как один экземпляр на суперкомпьютере), вы, вероятно, не достигнете этого лимита процесса в ближайшее время. Даже в этом случае средний процесс имел бы только приблизительно 146 КБ памяти, при условии отсутствия общей памяти.
Есть ограничения для всего, как в жизни, так и в Linux. Иногда ограничения очень высоки, и о них не стоит беспокоиться, а иногда они слишком малы, произвольно устанавливаются ленивым программистом или устанавливаются аппаратно.
Произвольные ограничения возникают, когда программист принимает решение, например, максимальное количество символов, допустимое в поле, например, адрес. Намного проще установить произвольный предел, чем динамически распределять память по мере необходимости. Вы не хотите выделять всю доступную память для простого поля ввода, но не хотите, чтобы ввод перезаписывал другую память, которая также может быть важной. Для открытых файлов и процессов может быть произвольное ограничение или оно может быть ограничено доступной памятью. Если последнее, то плохие вещи начнут происходить, когда вы приблизитесь к пределу, и система может зависнуть, поэтому часто полезно иметь предел, который вступает в действие до того, как это произойдет. Иногда произвольные пределы могут быть определены при запуске в зависимости от памяти или дискового пространства, и, как правило, довольно интеллектуальные,
Затем существуют ограничения, устанавливаемые аппаратным обеспечением, например, размер целого числа или символа. Если у вас 32-битная система, то существуют ограничения, установленные максимальным размером целого числа (4 294 967 295, если не подписано, или половина, если подписано).
Для процессов / proc / sys / kernel / pid_max - это максимально допустимый pid, поэтому это жесткий предел количества процессов, которые могут выполняться в любой момент. Тем не менее, ограничения на память обычно вступают в игру задолго до этого.
Для верхнего предела открытых файлов на всей машине жестким ограничением является / proc / sys / fs / file-max; это зависит от объема памяти в машине, поэтому он будет варьироваться. Ядро устанавливает это так:
n = (mempages * (PAGE_SIZE / 1024)) / 10;
files_stat.max_files = max_t(unsigned long, n, NR_FILE);
что составляет около 100 на каждый 1 МБ оперативной памяти.
Пределы для процесса разные. Ulimit определит это.
У нас есть ограничение, потому что у компьютеров есть ограничения, у меня 4 ГБ ОЗУ, поэтому я не могу сейчас запустить 15 игр?
Я, скорее всего, могу запустить его с некоторой задержкой, но это не будет человеческим, это предел для вашего ПК и Linux Kernal. Вам понадобится лучший ядро и много оперативной памяти, чтобы можно было удерживать любую программу, которая вам брошена ,
Как и мой ноутбук, когда я работал под управлением Windows 7, я мог играть в Battlefield, но мне потребовалось 80% моей оперативной памяти, поэтому, если я попытался играть в «Need For Speed», это занимает 60%. Обычно я могу открыть оба, но тогда вся моя система замедлился из-за того, что я запускаю 2 программы Heavy Duty, обе они борются за оперативную память (Random Access Memory)
Одним словом, обычный компьютер не может одновременно запускать множество программ: Музыка, Блокнот, Браузер, Электронная почта, Игра. Вы думаете, что на компьютере много всего, но это просто. Игра вроде World of Warcraft требует больше оперативной памяти и заставляет ваш компьютер бороться (если у вас нет 8-16 ГБ оперативной памяти, как у дорогих ноутбуков!)