Como não tenho muito conhecimento sobre o funcionamento interno do sistema operacional, por que temos limites para o número máximo de arquivos abertos e processos em execução no Linux?
Eu apreciaria se alguém pudesse me ajudar a entender.
fonte
Como não tenho muito conhecimento sobre o funcionamento interno do sistema operacional, por que temos limites para o número máximo de arquivos abertos e processos em execução no Linux?
Eu apreciaria se alguém pudesse me ajudar a entender.
Isto é principalmente por razões históricas. Nos mainframes antigos do Linux, muitos usuários se conectavam e usavam os recursos do mainframe. Obviamente, era necessário limitar e, como operações como identificadores de arquivo e processos foram incorporados ao kernel, ficou limitado por lá. Também ajuda a limitar ataques como a bomba dos garfos . Uma defesa contra a bomba de forma usando limites de processo é mostrada aqui .
Ele também ajuda a manter serviços complexos e daemons em cheque, não permitindo a retirada de garfos e abertura de arquivos, semelhante ao que a bomba de forquilha tenta fazer.
Também devem ser observados itens como a quantidade de RAM e CPU disponíveis e o fato de que um contador de 32 bits pode apenas fazer referência a tanta coisa (apenas 4294967296 entradas que podem ser contadas por um contador de 32 bits), mas esses limites estão longe acima daqueles geralmente definidos por programadores e administradores de sistema. De qualquer forma, muito antes de você ter processos 4294967296, sua máquina provavelmente teria sido reinicializada, conforme planejado ou quando começou a travar devido à falta de outro recurso.
A menos que você execute o Titan com seus 584 TiB de memória (não, como o Linux não pode ser executado como uma instância em um supercomputador), você provavelmente não atingirá esse limite de processo tão cedo. Mesmo assim, o processo médio teria apenas 146 KB de memória, assumindo que não havia memória compartilhada.
Existem limites para quase tudo, tanto na vida quanto no Linux. Às vezes, os limites são muito altos e não vale a pena se preocupar, e às vezes são muito baixos, definidos arbitrariamente por um programador preguiçoso ou definidos por limites para o hardware.
Limites arbitrários surgem quando um programador toma uma decisão como o número máximo de caracteres permitido em um campo, como um endereço. É muito mais fácil definir um limite arbitrário do que alocar memória dinamicamente, conforme necessário. Você não deseja alocar toda a memória disponível para um campo de entrada simples, mas também não deseja permitir que a entrada substitua outra memória que possa ser importante. Para arquivos e processos abertos, pode haver um limite arbitrário ou pode ser limitado pela memória disponível. Nesse último caso, coisas ruins começarão a acontecer à medida que você se aproximar do limite, e o sistema pode travar, por isso é bom ter um limite que entra em jogo antes que isso aconteça. Às vezes, os limites arbitrários podem ser determinados na inicialização, dependendo da memória ou do espaço em disco, e geralmente são bastante inteligentes,
Depois, há limites definidos pelo hardware, como o tamanho de um número inteiro ou caractere. Se você possui um sistema de 32 bits, há limites definidos pelo tamanho máximo de um número inteiro (4.294.967.295 se não tiver assinado ou metade desse valor se estiver assinado).
fonte
Para processos, / proc / sys / kernel / pid_max é o pid máximo permitido, portanto esse é o limite rígido do número de processos que podem ser executados a qualquer instante. No entanto, os limites de memória normalmente entram em jogo bem antes disso.
Para o limite superior de arquivos abertos em toda a máquina, / proc / sys / fs / file-max é o limite máximo; isso é baseado na quantidade de memória na máquina, portanto varia. O kernel define isso para:
o que resulta em cerca de 100 para cada 1 MB de RAM.
Os limites por processo são diferentes. ulimit irá defini-los.
fonte
Temos um limite porque os computadores têm limites, tenho 4 GB de RAM, então não posso rodar 15 jogos agora, posso?
Provavelmente, posso executá-lo com algum atraso, mas não seria humano. É o limite para o seu PC e o Kernal do Linux. Você precisaria de um kernal melhor e muita memória RAM para poder executar qualquer programa lançado em você. .
Como meu laptop quando eu rodava o Windows 7, eu podia jogar o Battlefield, mas era preciso 80% da minha RAM, então, se eu tentasse jogar o "Need For Speed", isso leva 60% do habitual, eu posso abrir os dois, mas todo o meu sistema é abrandou desde que eu estou executando 2 programas pesados, ambos estão lutando pela RAM (Random Access Memory)
Em poucas palavras, um computador normal não pode executar muitos programas ao mesmo tempo Música, Bloco de Notas, Navegador, E-mail, Jogo, você acha que está muito no computador, mas isso é mero. Um jogo como o World of Warcraft ocupa muito mais memória RAM e faz com que seu computador sofra (a menos que você tenha 8 a 16 GB de RAM, como os laptops caros!)
fonte