Non ho molte conoscenze sul funzionamento interno del sistema operativo, quindi perché abbiamo limiti per il numero massimo di file aperti e processi in esecuzione in Linux?
Gradirei se qualcuno potesse aiutarmi a capire.
Non ho molte conoscenze sul funzionamento interno del sistema operativo, quindi perché abbiamo limiti per il numero massimo di file aperti e processi in esecuzione in Linux?
Gradirei se qualcuno potesse aiutarmi a capire.
Risposte:
Ciò è principalmente per motivi storici. Sui mainframe Linux meno recenti, molti utenti si connettono e utilizzano le risorse del mainframe. Certo, era necessario limitare, e poiché tali operazioni come handle di file e processi erano integrati nel kernel, lì era limitato. Aiuta anche a limitare gli attacchi come la bomba a forcella . Una difesa contro i limiti del processo forma bomba utilizzando è mostrato qui .
Aiuta anche a tenere sotto controllo servizi e demoni complessi, impedendo il bombardamento in fuga e l'apertura dei file, in modo simile a quello che la bomba a forchetta tenta di fare.
Va anche notato cose come la quantità di RAM e CPU disponibili e il fatto che un contatore a 32 bit può fare solo riferimento così tanto (solo 4294967296 voci che possono essere contate da un contatore a 32 bit), ma tali limiti sono lontani sopra quelli normalmente impostati da programmatori e amministratori di sistema. Ad ogni modo, molto prima che avessi 4294967296 processi, la tua macchina sarebbe stata probabilmente riavviata, o esattamente come previsto, o quando ha iniziato a bloccarsi a causa della fame di un'altra risorsa.
A meno che non eseguiate Titan con i suoi 584 TiB di memoria (non lo farete, poiché Linux non può essere eseguito come un'istanza su un supercomputer), probabilmente non raggiungerete questo limite di processo in qualunque momento presto. Anche in questo caso, il processo medio avrebbe solo circa 146 KB di memoria, supponendo che non vi fosse memoria condivisa.
Ci sono limiti a quasi tutto, sia nella vita che in Linux. A volte i limiti sono molto alti e non vale la pena preoccuparsi, e talvolta sono troppo bassi, impostati arbitrariamente da un programmatore pigro o impostati da limiti all'hardware.
Limiti arbitrari si verificano quando un programmatore prende una decisione come il numero massimo di caratteri consentiti in un campo, come un indirizzo. È molto più semplice impostare un limite arbitrario che allocare dinamicamente la memoria secondo necessità. Non si desidera allocare tutta la memoria disponibile in un semplice campo di input, ma non si desidera consentire all'input di sovrascrivere altra memoria che potrebbe essere importante. Per file e processi aperti, potrebbe esserci un limite arbitrario oppure potrebbe essere limitato dalla memoria disponibile. In quest'ultimo caso, cominceranno ad accadere cose brutte man mano che ti avvicini al limite e il sistema potrebbe bloccarsi, quindi spesso è bene avere un limite che entra in gioco prima che ciò accada. A volte, i limiti arbitrari possono essere determinati all'avvio a seconda della memoria o dello spazio su disco e di solito sono abbastanza intelligenti,
Quindi ci sono limiti impostati dall'hardware, come la dimensione di un numero intero o di un carattere. Se hai un sistema a 32 bit, allora ci sono limiti impostati dalla dimensione massima di un numero intero (4.294.967.295 se non firmato, o metà che se firmato).
Per i processi, / proc / sys / kernel / pid_max è il pid massimo consentito, quindi questo è il limite massimo del numero di processi che possono essere eseguiti in qualsiasi momento. Tuttavia, i limiti di memoria normalmente entrano in gioco molto prima.
Per il limite superiore di file aperti sull'intera macchina, / proc / sys / fs / file-max è il limite massimo; questo si basa sulla quantità di memoria nella macchina, quindi varierà. Il kernel lo imposta come:
n = (mempages * (PAGE_SIZE / 1024)) / 10;
files_stat.max_files = max_t(unsigned long, n, NR_FILE);
che risulta essere di circa 100 per ogni 1 MB di RAM.
I limiti per processo sono diversi. ulimit li definirà.
Abbiamo un limite perché i computer hanno limiti, ho 4 GB di RAM, quindi non posso eseguire 15 giochi ora posso?
Molto probabilmente posso eseguirlo con un certo ritardo ma non sarebbe umano, è il limite sul tuo PC e Kernal di Linux, Avresti bisogno di un kernal migliore e un sacco di RAM per essere in grado di contenere qualsiasi programma che ti viene lanciato .
Come il mio laptop quando eseguivo Windows 7, potevo giocare a Battlefield, ma ci voleva l'80% della mia RAM, quindi se provassi a giocare a "Need For Speed", che richiede normalmente il 60%, posso aprire entrambi ma poi tutto il mio sistema è rallentato da quando sto eseguendo 2 programmi pesanti, entrambi combattono per la RAM (Random Access Memory)
In parole povere, un normale computer non può eseguire molti programmi contemporaneamente Musica, Blocco note, Browser, E-mail, Gioco, pensi che sia molto su un computer ma è semplice, Un gioco come World of Warcraft richiede molta più RAM e rende difficile il tuo computer (a meno che tu non abbia 8-16 GB di RAM come fanno i costosi laptop!)