Nie mam zbyt dużej wiedzy na temat wewnętrznego działania systemu operacyjnego, więc dlaczego mamy limity maksymalnej liczby otwartych plików i uruchomionych procesów w systemie Linux?
Byłbym wdzięczny, gdyby ktokolwiek mógł mi pomóc zrozumieć.
Nie mam zbyt dużej wiedzy na temat wewnętrznego działania systemu operacyjnego, więc dlaczego mamy limity maksymalnej liczby otwartych plików i uruchomionych procesów w systemie Linux?
Byłbym wdzięczny, gdyby ktokolwiek mógł mi pomóc zrozumieć.
Odpowiedzi:
Wynika to głównie z przyczyn historycznych. Na starszych komputerach mainframe Linux wielu użytkowników łączyłoby się i korzystało z zasobów komputera mainframe. Oczywiście konieczne było ograniczenie, a ponieważ takie operacje, jak uchwyty plików i procesy były wbudowane w jądro, było tam ograniczone. Pomaga także ograniczyć ataki, takie jak bomba widełkowa . Pokazano tutaj obronę przed bombą formową przy użyciu limitów procesowych .
Pomaga także utrzymać kontrolę nad złożonymi usługami i demonami, nie pozwalając na uciekające rozwidlenia i otwieranie plików, podobnie jak w przypadku bomby widelcowej.
Należy również zauważyć, takie jak ilość dostępnej pamięci RAM i procesora oraz fakt, że 32-bitowy licznik może odwoływać się tylko tyle (tylko 4294967296 wpisów, które można zliczyć przez 32-bitowy licznik), ale takie ograniczenia są daleko powyżej tych zwykle ustawianych przez programistów i administratorów systemu. W każdym razie, na długo zanim będziesz mieć 4294967296 procesów, twój komputer prawdopodobnie zostałby zrestartowany, tak jak zaplanowano, lub gdy zaczął się blokować z powodu głodu innego zasobu.
O ile nie uruchomisz Titana z 584 TiB pamięci (nie zrobisz tego, ponieważ Linux nie może być uruchomiony jako jedna instancja na superkomputerze), prawdopodobnie nie osiągniesz tego limitu w najbliższym czasie. Nawet wtedy przeciętny proces miałby tylko około 146 KB pamięci, przy założeniu braku pamięci współdzielonej.
Większość wszystkiego jest ograniczona, zarówno w życiu, jak i w Linuksie. Czasami limity są bardzo wysokie i nie warto się o nie martwić, a czasem są zbyt niskie, ustalane arbitralnie przez leniwego programistę lub limity sprzętowe.
Arbitralne ograniczenia pojawiają się, gdy programista podejmuje decyzję, na przykład maksymalną liczbę znaków dozwoloną w polu, na przykład adres. O wiele łatwiej jest ustawić dowolny limit niż dynamicznie przydzielać pamięć w razie potrzeby. Nie chcesz przydzielać całej dostępnej pamięci do prostego pola wprowadzania, ale nie chcesz też, aby dane wejściowe zastępowały inną pamięć, która może być ważna. W przypadku otwartych plików i procesów może istnieć dowolny limit lub może być on ograniczony dostępną pamięcią. Jeśli to drugie, złe rzeczy zaczną się dziać w miarę zbliżania się do limitu, a system może się zawiesić, więc często dobrze jest mieć limit, który wchodzi w grę, zanim to nastąpi. Czasami arbitralne limity mogą zostać określone przy uruchomieniu w zależności od pamięci lub miejsca na dysku i są zwykle dość inteligentne,
Następnie istnieją ograniczenia ustalane przez sprzęt, takie jak wielkość liczby całkowitej lub znaku. Jeśli masz system 32-bitowy, istnieją limity określone przez maksymalny rozmiar liczby całkowitej (4 294 967 295, jeśli nie podpisano, lub połowę, jeśli podpisano).
W przypadku procesów / proc / sys / kernel / pid_max jest maksymalnym dozwolonym pid, więc jest to twardy limit liczby procesów, które można uruchomić w dowolnym momencie. Jednak limity pamięci zwykle wchodzą w grę znacznie wcześniej.
Dla górnego limitu otwartych plików na całym komputerze, twardym limitem jest / proc / sys / fs / file-max; zależy to od ilości pamięci w urządzeniu, więc będzie się różnić. Jądro ustawia to na:
n = (mempages * (PAGE_SIZE / 1024)) / 10;
files_stat.max_files = max_t(unsigned long, n, NR_FILE);
co daje około 100 na każdy 1 MB pamięci RAM.
Limity dla poszczególnych procesów są różne. ulimit je zdefiniuje.
Mamy limit, ponieważ komputery mają ograniczenia, mam 4 GB pamięci RAM, więc nie mogę teraz uruchomić 15 gier, prawda?
Najprawdopodobniej mogę uruchomić go z pewnym opóźnieniem, ale nie byłby to człowiek, To jest limit na twoim komputerze i jądrze Linuksa, Potrzebowałbyś lepszego kernala i dużo pamięci RAM, aby móc utrzymać dowolny program, który zostanie ci rzucony .
Podobnie jak mój laptop, gdy korzystałem z systemu Windows 7, mogłem grać w Battlefield, ale zajęło mi to 80% pamięci RAM, więc jeśli spróbuję zagrać w „Need For Speed”, to zajmuje 60%. Zwykle mogę otworzyć oba, ale wtedy cały mój system jest zwolniłem, ponieważ uruchamiam 2 programy Heavy Duty, oba walczą o pamięć RAM (pamięć o dostępie swobodnym)
Krótko mówiąc, normalny komputer nie może uruchamiać jednocześnie wielu programów Muzyka, Notatnik, Przeglądarka, E-mail, Gra, Myślisz, że jest dużo na komputerze, ale to tylko zwykłe, Gra taka jak World of Warcraft wymaga dużo więcej pamięci RAM i sprawia, że komputer ma problemy (chyba że masz 8-16 GB pamięci RAM, tak jak robią to drogie laptopy!)