Eu estou querendo saber como os sistemas operacionais permitem que os processos filhos saibam quanta memória disponível existe.
Digamos que o computador inteiro tenha 1GB de memória RAM embutida. A operação é executada e usa 100MB (não tenho idéia do quanto um sistema operacional realmente usa). Então restam 900MB.
Em seguida, você executa 10 programas. Cada programa cria 10 processos filhos. A questão é, o que esses processos pai e filho vêem como a memória total disponível para eles.
Como uma segunda parte da pergunta para torná-la um pouco mais complexa, diga que os aplicativos estão em execução há algum tempo e agora há 500MB disponíveis no computador (digamos, o sistema operacional usou 100MB a mais e os aplicativos usados 300MB a mais, para chegar a este nível de 500MB à esquerda). A questão agora é o que esses processos pai e filho vêem como a memória disponível neste momento. Se é o mesmo de antes, ou diferente, e como é diferente.
O motivo da pergunta é porque eu li sobre a Memória Virtual que diz:
virtual memory [is a] technique that provides an "idealized abstraction of the storage resources that are actually available on a given machine" which "creates the illusion to users of a very large (main) memory."
Então, basicamente, parece que cada processo no caso (1) será informado "você tem 1 GB de memória disponível" ou "você tem 900 MB de memória disponível". Eu não tenho certeza do que ele realmente diria, se diz o total em todo o computador, ou o total - o uso do sistema operacional.
Então, para o caso (2), seria lido "1GB disponível", "900MB disponível", "600MB disponível" ou "500MB disponível". Mesma situação, não sei o que diria.
Também pode ser diferente desses valores. O sistema operacional poderia, de alguma maneira, aproximar a memória disponível para cada um dos 100 processos filhos, dividindo-os talvez de maneira uniforme. Portanto, se houver 500 MB no computador, isso significaria que cada processo seria informado "você tem 500/100 == 5 MB de espaço disponível". Mas então, se este for o caso, se um processo consumisse 5MB e ainda houvesse 495MB, perguntando se seria permitido começar a usá-lo e receber um novo número do que está disponível. É por isso que eu não acho que isso é como normalmente é feito, e parece que o sistema operacional diria provavelmente o que está disponível no computador como um todo (então 1GB ).
Além disso, a razão pela qual eu acho que sempre diria "1GB" é porque não tenho certeza se há uma maneira de determinar quanta memória um único processo está usando (ou se o sistema operacional sabe quanta memória é usando). Se o SO sabe o quanto ele está usando, então parece que ele reportaria 900MB.
Outra parte da confusão é que, se o uso da memória está mudando constantemente, e o SO informa a cada processo qual é a memória total - a memória usada, então você teria que verificar constantemente a quantidade de memória disponível se estivesse para tentar acessar mais memória. Ou seja, você não pode armazenar em cache o uso de memória quando o programa é iniciado. Pode ser que o programa, ocioso por algumas horas, comece com 100MB de memória "no computador", mas depois disso, enquanto ele verifica novamente para encontrar "oh wait there is only 5MB available". Por alguma razão, isso parece um comportamento indesejável, mas não tenho certeza.
Qualquer ajuda na compreensão geral de como um sistema operacional informa a criança sobre a quantidade de memória disponível em diferentes momentos seria útil. Obrigado.