una que memoria manejo funcion caracteristicas administrar assembly operating-system linker loader

assembly - que - memoria virtual linux mint



¿Qué contiene la memoria virtual Kernel de cada proceso? (1)

  1. Cuando un sistema usa memoria virtual, el núcleo también usa memoria virtual. Windows utilizará los 2 GB superiores (o 1 GB si ha especificado el modificador / 3 GB en el gestor de arranque de Windows) para su propio uso. Esto incluye el código del kernel, los datos (o al menos los datos que están localizados, eso es correcto, Windows puede pasar partes del espacio de direcciones del kernel al disco duro) y las tablas de páginas.

  2. Cada proceso tiene su propio espacio de direcciones de VM. Cuando se produce un cambio de proceso, las tablas de página normalmente se intercambian con la tabla de páginas de otro proceso. Esto es simple de hacer en un procesador x86: bastará con cambiar la dirección base de la tabla de páginas en el registro de control CR3 . Todo el espacio de direcciones de 4 GB se reemplaza por tablas que reemplazan un espacio de direcciones de 4 GB completamente diferente. Habiendo dicho eso, típicamente habrá regiones de espacio de direcciones compartidas entre procesos. Esas regiones están marcadas en las tablas de páginas con indicadores especiales que indican al procesador que esas áreas no necesitan ser invalidadas en el buffer de traducción lookaside del procesador.

  3. Como mencioné anteriormente, el código del kernel, los datos y las tablas de páginas en sí deben ubicarse en algún lugar. Esta información se encuentra en el espacio de direcciones del kernel. Es posible que ciertas partes del código, los datos y las tablas de páginas del kernel puedan intercambiarse al disco según sea necesario. Algunas partes se consideran más críticas que otras y nunca se reemplazan.

  4. Ver (3)

  5. Depende. La memoria compartida en modo usuario se encuentra en el espacio de direcciones del modo de usuario. Partes del espacio de direcciones en modo núcleo también podrían compartirse entre procesos. Por ejemplo, no sería raro que el código del kernel se comparta entre todos los procesos en el sistema. Donde se encuentra esa memoria no es precisa. Estoy usando direcciones arbitrarias aquí, pero la memoria compartida ubicada en 0x100000 en un proceso puede estar ubicada en 0x101000 dentro de otro proceso. Dos páginas en espacios de direcciones diferentes, en direcciones completamente diferentes, pueden apuntar a la misma memoria física.

  6. No estoy seguro de lo que quieres decir aquí. Los identificadores de archivo abierto no son globales para todos los procesos. El sistema de archivos almacenado en el disco duro es global para todos los procesos. En Windows, los gestores de archivos son administrados por el kernel, y los objetos se almacenan en el espacio de direcciones del kernel y son administrados por el gestor de objetos kernel.

  7. Para sistemas basados ​​en Windows NT, recomendaría Windows Internals, 5ed por Mark Russinovich y David Solomon

Respuesta para comentar:

¿Y ahora este 3GB se comparte b / n en todos los procesos? o cada proceso tiene 4GB de espacio?

Depende del sistema operativo. Algunos núcleos (como el microkernel L4 ) usan la misma tabla de página para múltiples procesos y separan los espacios de direcciones usando la segmentación . En Windows, cada proceso obtiene sus propias tablas de página. Recuerde que aunque cada proceso tenga su propio espacio de direcciones virtuales , eso no significa que la memoria física siempre sea diferente. Por ejemplo, la imagen de kernel32.dll cargada en el proceso A se comparte con kernel32.dll en el proceso B. Gran parte del espacio de direcciones del kernel también se comparte entre procesos.

¿Por qué cada proceso tiene memoria virtual kernel?

La mejor manera de pensar en esto es preguntarse: "¿Cómo funcionaría un kernel si no se ejecutara usando memoria virtual?" En esta situación hipotética, cada vez que su programa causaba un cambio de contexto en el núcleo (digamos que realizó una llamada al sistema), la memoria virtual tenía que estar deshabilitada mientras la CPU se estaba ejecutando en el espacio del kernel. Hay un costo para hacer eso y hay un costo por volver a activarlo cuando vuelva al espacio del usuario.

Además, supongamos que el programa de usuario pasó un puntero a algunos datos para su llamada al sistema. Este puntero es una dirección virtual. Tiene la memoria virtual desactivada, por lo que el puntero debe traducirse a una dirección física antes de que el kernel pueda hacer algo con ella. Si tuvieras la memoria virtual encendida, la recibirías gratis gracias a la unidad de administración de memoria en la CPU. En cambio, tendrías que traducir manualmente las direcciones en el software. Hay todo tipo de ejemplos y escenarios que podría describir (algunos con hardware, algunos con mantenimiento de tablas de páginas, etc.) pero la esencia es que es mucho más fácil tener un esquema de administración de memoria homogéneo. Si el espacio de usuario usa memoria virtual, será más fácil escribir un kernel si mantiene ese esquema en el espacio del kernel. Al menos esa ha sido mi experiencia.

solo habrá una instalación de kernel OS ¿verdad? entonces, ¿por qué cada proceso tiene un espacio virtual de kernel separado?

Como mencioné anteriormente, bastante de ese espacio de direcciones se compartirá entre los procesos. Hay datos por proceso que se encuentran en el espacio del kernel que se intercambian durante un cambio de contexto entre procesos, pero se comparte mucho porque solo hay un kernel.

Cuando digamos que 3 programas (ejecutables) se cargan en la memoria, el diseño podría verse más o menos así:

texto alternativo http://img97.imageshack.us/img97/3460/processesm.jpg

Tengo las siguientes preguntas:

  1. ¿El concepto de memoria virtual está limitado a los procesos del usuario? Porque, me pregunto dónde vive el Kernel del sistema operativo, los controladores. ¿Cómo es su diseño de memoria? Quiero saber más sobre la memoria del kernel. Sé que su sistema operativo específico hace su elección (Windows / Linux).

  2. ¿Es el concepto de memoria virtual por proceso? Quiero decir que es correcto para mí decir 4GB de process1 + 4GB de process2 + 4GB de process3 = 12GB de memoria virtual (para todos los procesos). Esto no suena bien. O de un total de 4 GB de espacio, 1 GB está ocupado por kernel & rest 3 GB se comparte b / n en todos los procesos.

  3. Dicen, en una máquina de 32 bits en un espacio de direcciones de 4 GB. La mitad (o más recientemente 1GB) está ocupada por kernel. Puedo ver en este diagrama que "Kernel Virtual memory" está ocupando 0xc0000000 - 0xffffffff (= 1 GB). ¿Están hablando de esto? ¿O es otra cosa? Solo quiero confirmar

  4. ¿Qué contiene exactamente la Kernel Virtual Memory de cada uno de estos procesos? ¿Cuál es su diseño?

  5. Cuando hacemos IPC hablamos de memoria compartida. No veo ninguna memoria compartida entre estos procesos. ¿Dónde vive?

  6. Los recursos (archivos, registros en Windows) son globales para todos los procesos. Entonces, la tabla del manejador de recursos / archivos debe estar en algún espacio global. ¿En qué área estaría?

  7. ¿Dónde puedo saber más sobre este lado del kernel?