Acerca de la gestión de memoria Linux El conocimiento detallado de los principios de

  

Linux gestión de memoria se divide en dos partes: la asignación de dirección física, la gestión de la asignación de memoria del núcleo de la dirección virtual (basado principalmente en la losa). 1, el concepto de la dirección física (dirección física) para los medios de memoria direccionables a nivel de chip, acoplado al bus del procesador y la CPU dirección, respectivamente. &Mdash; — un Este concepto se entenderá mejor por estos conceptos, vale la pena mencionar que, si bien la dirección física se puede insertar directamente en la máquina de apreciar que la memoria misma Flanagan, de la memoria como un 0 hasta un importe máximo de byte por byte matrices grandes vacíos de números, a continuación, esta matriz se llama una dirección física, pero en realidad, esto sólo está disponible a un software de abstracción de hardware, el direccionamiento de memoria no es el caso. Por lo tanto, es y " correspondiente al bus de direcciones y ", están palabra preferido, pero aparte consideración de la memoria física modos de direccionamiento, directamente a direcciones de memoria física y la correspondencia física, también es aceptable. Tal vez lo más propicio para el entendimiento erróneo de la abstracción metafísica. La memoria virtual (memoria virtual), que es toda la memoria (no en la máquina e inserte la pieza en el número) se describe en el resumen. Es con respecto a la memoria física se refiere, se entiende directamente como y " no recta falsa y ", " falsa y " memoria, por ejemplo, un 0 y los tiempos; dirección de memoria 08000000, no es para las matrices grandes en una dirección física en en 0 y los tiempos; 08000000 – 1 que se ocupan de los elementos; la razón es, porque es moderna abstracción del sistema operativo
ofrece un tipo de gestión de memoria, la memoria a saber virtual (memoria virtual). Proceso utiliza direcciones de memoria virtual, el sistema operativo
hardware relacionado con la asistencia, IT " la conversión y " en una dirección física real. El " ", la conversión es la clave de todos los temas tratados. Con esta abstracción, un programa que se puede utilizar es mucho más grande que la dirección física real del espacio de direcciones.
(La demolición de la pared este, el Muro Occidental, el banco también como este para hacer), o incluso los procesos múltiples puede utilizar la misma dirección. No es de extrañar, ya que la dirección física no es lo mismo después de la conversión. Después de que el programa puede conectarse a descompilar una mirada y se encontró el conector para el programa se ha asignado una dirección, por ejemplo, para llamar a una función A, el código no es una llamada A, pero llamar a 0 y los tiempos; 0811111111, es decir, la función A dirección ha estado en calma. Sin tal a " ", ningún concepto de la conversión de la dirección virtual, esto simplemente no es factible. En pausa, este problema dice nada, se shoubu Zhu. dirección lógica (dirección lógica) de Intel para la compatibilidad, la gestión de memoria será escenario de la antigüedad retenidas. La dirección lógica es las instrucciones en lenguaje máquina, un operando especifica una dirección o una instrucción. casos anteriores, nos dicen que el conector se asigna un 0 y tiempos; 08111111 Esta dirección es la dirección lógica. &Mdash; — lo siento, pero, por ejemplo, como si estuvieran en contra de la gestión de Intel segmento, requisitos de direcciones lógicas, y " una dirección lógica mediante la adición de un identificador de segmento de desplazamiento dentro de una dirección relativa segmento especificado , expresada como [identificador de segmento: el desplazamiento fragmento], es decir, en el ejemplo que 0 &veces; 08111111, se representa como [un identificador de segmento de código es: 0x08111111], de esta manera, un número de full " dirección lineal (dirección lineal) o también conocida como dirección virtual (dirección virtual) con dirección lógica similares, es una dirección falsa, si la dirección lógica es la dirección del segmento de gestión de plataforma de hardware correspondiente antes de la conversión, a continuación, la dirección lineal correspondiente a la página de hardware memoria de direcciones antes convertida. El espacio de memoria de la CPU de una dirección virtual a una dirección física, requiere dos pasos: primero, dada una dirección lógica (de hecho, el segmento de offset, esto debe entenderse que !!!), con su CPU para segmentar una unidad de gestión de memoria, para la primera dirección en una dirección lógica de un hilo, y luego usar su unidad de gestión de memoria paginada, se convierte a la dirección física final. Si lo hace, dos conversiones, es de hecho muy engorroso e innecesario, ya que la dirección lineal directa puede ser abstracto al proceso. La razón de esta redundancia, Intel es completamente sólo por compatibilidad. 2, la etapa de gestión de memoria de la CPU, cómo convertir una dirección lógica en una dirección lineal de direcciones lógicas consta de dos partes, un identificador de segmento: desplazamiento dentro del segmento. identificador de segmento es un campos de longitud de 16 bits, que se refiere como un selector de segmento. En el que los primeros 13 bits son un número de índice. 3 contiene algunos detalles de hardware posteriores como: los dos últimos se relaciona comprobaciones de permisos, no se incluye esta pasta. Un número de índice, o directamente interpretado como un subíndice de matriz y mdash; — que responda en todo momento a una serie de ella, es qué cosas que el índice? Este material es y " descriptor (descriptor de segmento) y ", Oh, el descriptor de segmento describe un segmento de la dirección específica (" la sección y " la palabra comprender, creo en ella como, tomó una cuchillo, la memoria virtual, cortado en una pluralidad de truncado — — segmento). Por lo tanto, un número de descriptor de segmento, el grupo a una matriz, llamada y " ", esta tabla de descriptores, pueden encontrar directamente un descriptor específico en la tabla de descriptores 13 por el identificador de segmento frontal este descriptor para describir un segmento, tengo a la sección resumen no es exacto, porque el descriptor para ver lo que hay dentro cosas y mdash; — así es exactamente como se describe, es entender cómo los segmentos Qué cosas, y cada descriptor de segmento consta de 8 bytes, como se muestra a continuación: el personal es muy complicado, aunque se puede utilizar una estructura de datos para definirlo, pero sólo se preocupan por el mismo como en este caso, es el campo Base, que describe dirección lineal de la posición de inicio de un segmento. Intel diseñó la intención es que algunos descriptor del segmento global, se puso en " descriptor tabla global (GDT) y ", algunos locales, como cada proceso por ellos mismos, que ponen la llamada y " la sección local tabla de descriptores (LDT) y " de. Eso exactamente cuándo utilizar GDT, LDT cuándo usarlo? Esto está representado por el campo selector segmento T1, = 0, representado por la GDT, = 1 está representado por LDT. la dirección y el tamaño de la GDT almacenan en la memoria en el registro de control de la CPU GDTR, y luego LDTR registro LDT. Una gran cantidad de conceptos tales como trabalenguas misma. Esto parece ser la figura más intuitivo: En primer lugar, dada una dirección lógica completa [selector segmento: la dirección de desplazamiento del segmento], 1, ver el selector segmento de T1 = 0 o 1, que se conoce para ser convertido en el GDT segmento o segmento de la LDT, a continuación, de acuerdo con los registros correspondientes, para obtener su dirección y tamaño. Tenemos una gran variedad de. 2, 13 fuera del selector segmento frontal puede estar en la matriz, se encuentra el descriptor de segmento correspondiente, de manera que la base, es decir saber la dirección base. 3, la Base + offset, es convertir la dirección lineal. En pocas palabras, para el software se refiere, es necesario convertir la información de hardware necesario está listo, en principio, puede hacer que el hardware para completar la conversión. OK, echar un vistazo a cómo hacer Linux. 3, dirección de escena de Intel Linux requiere dos conversiones, por lo que a pesar de que es compatible, pero es muy redundante, Oh, de ninguna manera, el hardware necesario para hacerlo, el software sólo puede hacerlo, llegar al mismo formalismo . Por otro lado, algunas otras plataformas de hardware, no existe el concepto de conversión secundaria, Linux también es necesario para proporcionar un alto nivel de abstracción para proporcionar una interfaz unificada. Por lo tanto, la gestión de la etapa de Linux, de hecho, sólo en " truco y " único hardware poco. De acuerdo con la intención de Intel, con GDT global, cada una con su propio proceso de LDT y mdash; — pero el Linux para todos los procesos utilizan el mismo segmento de abordar para instrucciones y datos. Es decir, el segmento de usuarios de datos, los segmentos de código de usuario, correspondiente al núcleo y la sección de datos kernel de segmentos de código kernel. Si lo hace, no es de extrañar, que siempre ha sido pro forma Bien, mientras escribimos resumen de fin de año de la misma. include /asm-i386 /segment.h #define GDT_ENTRY_DEFAULT_USER_CS 14 #define __USER_CS (GDT_ENTRY_DEFAULT_USER_CS * 8 + 3) #define GDT_ENTRY_DEFAULT_USER_DS 15 #define __USER_DS (GDT_ENTRY_DEFAULT_USER_DS * 8 + 3) #define GDT_ENTRY_KERNEL_BASE 12 #define GDT_ENTRY_KERNEL_CS (GDT_ENTRY_KERNEL_BASE + 0) # definir __KERNEL_CS (GDT_ENTRY_KERNEL_CS * 8) #define GDT_ENTRY_KERNEL_DS (GDT_ENTRY_KERNEL_BASE + 1) #define __KERNEL_DS (GDT_ENTRY_KERNEL_DS * 8) en el que la sustitución de macro a valores numéricos, era: #define __USER_CS 115 [00000000 1110 0 11] #define __USER_DS 123 [00000000 1111 0 11] #define __KERNEL_CS 96 [00000000 1100 0 00] #define __KERNEL_DS 104 [00000000 1101 0 00] soportes traseros están cuatro sistema selector segmento de 16 bits representadas por dos, su campo de índice de los valores T1 y también se puede calcular el índice __USER_CS = 14 T1 = 0 __USER_DS de índice = 15 T1 = 0 __KERNEL_CS de índice = 12 T1 = 0 __KERNEL_DS index = 13 T1 = 0 T1 son 0, a continuación, utilizar el GDT y, a continuación, ver el contenido de la GDT se inicializa artículos correspondiente 12-15 (arch /i386 /head.S): .quad 0x00cf9a000000ffff /* 0 &veces; 60 kernel código de 4 GB a 0 y los tiempos; 00000000 * /.quad 0x00cf92000000ffff /* 0 &veces; 68 datos del núcleo de 4 GB a 0 y los tiempos; 00000000 * /.quad 0x00cffa000000ffff /* 0 &veces; 73 código de usuario de 4 GB a 0 y los tiempos; 00000000 * /.quad 0x00cff2000000ffff /* 0X7B usuario 4GB datos a 0 y los tiempos; 00000000 * /como se ha descrito previamente en la tabla de descriptores, que puede ser expandido y encontraron a los bits 16-31 son todos 0, es decir, la dirección base de cuatro segmento son todos 0. Por lo tanto, una dirección de desplazamiento dada dentro de un segmento, de acuerdo con la fórmula de conversión anterior, 0 + compensada dentro del segmento, convertido a una dirección lineal, importante conclusión se puede extraer, y " en Linux, la dirección lógica a la dirección lineal es siempre el mismo ( que es lo mismo, por no decir algo de la misma), es decir, el valor de la dirección de desplazamiento del campo lineal de la dirección lógica es siempre la misma. ! ! ! Y " ignorando demasiados detalles, como el período de comprobación de permisos. Jeje Linux, la gran mayoría de los casos el proceso no utiliza LDT, a menos que el vino, la simulación Windows
tiempo del programa.

Copyright © Conocimiento de Windows All Rights Reserved