Я не маю великих знань про внутрішні розробки операційної системи, тож чому ми маємо обмеження на максимальну кількість відкритих файлів та запущених процесів в Linux?
Буду вдячний, якби хто-небудь міг допомогти мені зрозуміти.
Я не маю великих знань про внутрішні розробки операційної системи, тож чому ми маємо обмеження на максимальну кількість відкритих файлів та запущених процесів в Linux?
Буду вдячний, якби хто-небудь міг допомогти мені зрозуміти.
Відповіді:
Це в основному з історичних причин. У старих мейнфреймах Linux багато користувачів з'єднували б і використовували ресурси мейнфрейму. Звичайно, потрібно було обмежити, і оскільки такі операції, як ручки файлів і процеси були вбудовані в ядро, воно там було обмежене. Це також допомагає обмежувати атаки, як бомба з вилкою . Захист проти форми бомби з використанням меж процесу показана тут .
Це також допомагає контролювати складні сервіси та демони, не дозволяючи розбіжним розгортанням та відкриттям файлів, як це робить вилка бомба.
Також слід зазначити такі речі, як кількість доступної оперативної пам’яті та процесора, а також той факт, що 32-розрядний лічильник може посилатись лише стільки (лише 4294967296 записів, які можна перерахувати 32-бітовим лічильником), але такі обмеження є далеко вище тих, які зазвичай встановлюють програмісти та системні адміністратори. У будь-якому разі, задовго до того, як у вас виникнуть 4294967296 процесів, ваша машина, ймовірно, перезавантажилася, як саме було заплановано, або як вона почала замикатися через голодування іншого ресурсу.
Якщо ви не запустите Titan з його пам'яттю 584 TiB (ви цього не зробите, оскільки 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, вам знадобиться краще ядро та багато оперативної пам’яті, щоб мати змогу утримувати будь-яку програму, кинуту на вас .
Як і мій ноутбук, коли я працював у Windows 7, я міг грати на Battlefield, але це зайняло 80% моєї оперативної пам’яті, тож якщо я спробував грати в «Need For Speed», це займає 60%. Незмінно я можу відкрити і те, і тоді вся моя система сповільнився, оскільки я запускаю 2 важких програми, вони обидва борються за оперативну пам’ять (пам'ять випадкового доступу)
Коротше кажучи, звичайний комп'ютер не може запускати багато програм одночасно Музика, Блокнот, Браузер, Електронна пошта, Гра, Ви думаєте, що це багато на комп’ютері, але це просто, така гра, як World of Warcraft займає багато більше оперативної пам’яті та робить ваш комп'ютер боротьбою (якщо у вас немає 8-16 ГБ оперативної пам’яті, як це роблять дорогі ноутбуки!)