La "memoria disponible" que un sistema operativo le dice a los procesos secundarios

La "memoria disponible" que un sistema operativo le dice a los procesos secundarios

Me pregunto cómo los sistemas operativos permiten que los procesos secundarios sepan cuánta memoria disponible hay.

Digamos que toda la computadora tiene 1 GB de memoria RAM incorporada. El sistema operativo se ejecuta y usa 100 MB (no tengo idea de cuánto usa realmente un sistema operativo). Entonces quedan 900 MB.

Luego ejecutas 10 programas. Cada programa crea 10 procesos secundarios. La pregunta es qué ven estos procesos padre e hijo como la memoria total disponible para ellos.

Como segunda parte de la pregunta para hacerla un poco más compleja, digamos que las aplicaciones han estado ejecutándose por un tiempo y ahora hay 500 MB disponibles en la computadora (digamos que el sistema operativo usó 100 MB más y las aplicaciones usaron 300 MB más, para llegar a este nivel (quedan 500 MB). La pregunta ahora es qué ven estos procesos padre e hijo como memoria disponible en este momento. Si es igual que antes, o diferente, y en qué se diferencia.

El motivo de la pregunta es porque he leído sobreMemoria virtualQue estados:

memoria virtual[es una] técnica que proporciona una "abstracción idealizada de los recursos de almacenamiento que realmente están disponibles en una máquina determinada" que "crea la ilusión para los usuarios de una memoria (principal) muy grande".

Básicamente, parece que a cada proceso en el caso (1) se le dirá "tiene 1 GB de memoria disponible" o "tiene 900 MB de memoria disponible". No estoy seguro de lo que diría realmente, si dice eltotalen toda la computadora, o en total: el uso del sistema operativo.

Luego, para el caso (2), se leerá "1 GB disponible", "900 MB disponibles", "600 MB disponibles" o "500 MB disponibles". La misma situación, no estoy seguro de lo que diría.

También podría ser diferente de esos valores. El sistema operativo podría de alguna manera aproximarse a la memoria disponible para cada uno de los 100 procesos secundarios, dividiéndola quizás en partes iguales. Entonces, si quedan 500 MB en la computadora, eso significaría que a cada proceso se le diría "tienes 500/100 == 5 MB de espacio disponible". Pero entonces, si este es el caso, si un proceso usó 5 MB y aún quedaban 495 MB, me pregunto si se le permitiría comenzar a usar esto y recibir información sobre un nuevo número de lo que está disponible. Es por eso que no creo que sea así como se hace normalmente, sino que parece que el sistema operativo lo diría.probablementelo que está disponible en la computadoracomo un todo(entonces 1 GB).

Además, la razón por la que creo que siempre diría "1 GB" es porque no estoy seguro de si hay una manera de determinar cuánta memoria está usando un solo proceso (o si el sistema operativo sabe cuánta memoria está usando). Si el sistema operativohacesabe cuánto está usando, entonces parece que informaría 900 MB.

Otra parte de la confusión es que, si el uso de la memoria cambia constantemente y el sistema operativo le dice a cada proceso cuál es la memoria total (la memoria utilizada), entonces tendría que verificar constantemente cuánta memoria hay disponible si intentara acceder más memoria. Es decir, no se puede almacenar en caché el uso de la memoria cuando se inicia el programa. Podría ser que el programa, que permanece inactivo durante unas horas, comience con 100 MB de memoria "en la computadora", pero luego, mientras vuelve a comprobarlo, encontrará "oh, espera, solo hay 5 MB disponibles". Por alguna razón, parece un comportamiento indeseable, pero no estoy seguro.

Sería útil cualquier ayuda para comprender en general cómo un sistema operativo le dice al niño que procesa cuánta memoria disponible hay en diferentes momentos. Gracias.

Respuesta1

El sistema operativo no "le dice" nada al programa sobre la memoria libre.

Cada programa opera en su propia área de memoria virtual donde tiene acceso a (lo que ve) todo elpotencialespacio de direcciones de memoria permitido. Para un proceso de 32 bits, lo que se conoce como "la memoria" son los 4 GB completos de memoria direccionable, para un proceso de 64 bits el espacio es mucho mayor. El proceso puede asignar memoria de esa área, lo que luego le dice al sistema operativo que necesita respaldar áreas de ese espacio de direcciones con memoria física para que se pueda leer y escribir, pero el programa tiene (en teoría) tanta memoria como quiere.

En un sistema con sólo 1 GB de RAM, esto significa que cuando la memoria física está llena, el sistema operativo comienza a enviar datos al archivo o partición de intercambio. Esto se hace sin la participación del proceso real cuya memoria se está paginando. Si el proceso intenta acceder a la memoria paginada, el sistema operativo detiene el proceso, recupera los datos del disco y reanuda el proceso.

Un programa puedeconsultacuánta RAM física está libre, de modo que pueden limitarse en situaciones de poca memoria, pero el sistema operativo no los limita artificialmente a menos que se quede sin RAM física y espacio de intercambio, en cuyo caso el programa simplemente obtendrá un error al intentarlo. para asignar memoria.

Respuesta2

Una de las mejores ventajas de ejecutar un sistema operativo moderno es que las aplicaciones no necesitan saber cuánta RAM hay en el sistema o cuánta está disponible. De hecho, la mayoría de las aplicaciones ignoran por completo los detalles de la RAM, cuántos núcleos tiene la CPU, el tamaño y la cantidad de unidades físicas, si la computadora está conectada a una red o a Internet, y mucho más. Esto es como debería ser. El sistema operativo fue diseñado para usarse de esta manera.

El sistema operativo proporciona a las aplicaciones un entorno virtualizado estándar que es independiente del hardware. En lugar de acceder directamente a la RAM, las aplicaciones acceden sólo a un espacio de direcciones virtuales que es independiente del tamaño de la RAM. Para una aplicación, eso es la memoria. La RAM es solo una optimización del rendimiento (la tecnología actual es necesaria) y un detalle de implementación. Partes del código y los datos de la aplicación estarán en la RAM, el archivo de paginación o en los archivos originales. Esto puede cambiar según las necesidades de la aplicación y la disponibilidad de recursos. Estos detalles son administrados por el sistema operativo y son invisibles para la aplicación, que no podría descubrirlos aunque quisiera.

Para las aplicaciones que necesitan esta información, se pueden solicitar detalles del hardware desde el sistema operativo, pero pocas lo hacen. En la mayoría de los casos, sólo las utilidades del sistema necesitan esta información. La mayoría de las aplicaciones tienen tan poca necesidad de esto como el conductor promedio necesita saber sobre el tiempo de encendido o las mezclas de combustible.

Todo esto es para bien. Significa que los desarrolladores de aplicaciones pueden dedicar su tiempo a los requisitos de la aplicación sin tener que lidiar con los complicados detalles del hardware en el que se ejecuta. Para eso está el sistema operativo. Significa que una aplicación escrita correctamente y diseñada para Windows 95 con 4 MB de RAM puede ejecutarse en un sistema Windows 10 moderno con muchos GB de RAM. Y la aplicación funciona igual y no se da cuenta de la diferencia. No todas las aplicaciones están tan bien escritas. Por supuesto, el sistema moderno funcionará mejor y proporcionará muchas más capacidades al usuario, pero la aplicación no sabe nada de eso.

Esto significa una gran cantidad de trabajo para los diseñadores y desarrolladores de sistemas operativos, pero muchos millones de usuarios se benefician.

información relacionada