Hace unos días, simplemente pasé por el "Entendimiento de la gestión de la memoria del kernel de Linux". El texto es muy corto y no es fácil de leer. Es un libro que se lee con frecuencia.趁 La impresión aún es buena para tomar nota primero, el contenido es más personal, no hay nada que entender, perdóneme: p
『Administración de memoria』 es en realidad una palabra muy amplia, administración de páginas físicas, administración de tablas de páginas, administración de espacios de direcciones , asignación de memoria, etc., cada una de cada pieza puede llamarse "gestión de memoria", pero la diferencia entre ellas es enorme, con una palabra para cubrir el pasado, es como una persiana, no ver el bosque. Para entender su cuadro completo, es mejor discutirlo por separado. Si puedes descubrir cada parte, no verás la imagen completa.
Inicialización del sistema y diseño de memoria
En la fase de inicio (setup.o), el kernel asignará primero dos tablas de páginas temporales a las dos primeras entradas del directorio de páginas swapper_pg_dir ^ 1, que será de 0 a 8 m. La dirección virtual de 3g ~ 3g + 8m se asigna a la dirección física de 0 ~ 8m al mismo tiempo.
La inicialización de la tabla de páginas del kernel se encuentra en la función kernel_physical_mapping_init () en la fase de inicialización del kernel. Si es posible, use PSE para configurar páginas grandes, use PGE para configurar la página global, arregle el mapa de memoria en el TLB y no necesita actualizar nuevamente cuando cambie el espacio de direcciones.
Linux corrige el espacio de direcciones del kernel de mapeo. En las máquinas x86, la memoria física se divide en 3 zonas: ◦ZONE_DMA: 0 ~ 16m◦ZONE_NORMAL: 16m ~ 896m◦ZONE_HIGHMEM: 896m ~
donde ZONE_DMA y ZONE_NORMAL se asignan de forma fija a 0xc000000, el resto El espacio de direcciones de 128 MB se usa para asignar páginas físicas en ZONE_HIGHMEM o FIXMAP.
En x64, el espacio de direcciones es suficiente para asignar toda la memoria física, ZONE_HIGHMEM está vacío.
kmap
Para usar la memoria en ZONE_HIGHMEM en el kernel, primero debe asignarla al espacio de direcciones del kernel a través de kmap ().
Pero kmap () puede irse a dormir, y debes usar kmap_atomic () en el contexto de interrupción.
Buddy Allocator y administración de página física
En Linux, Buddy Allocator se utiliza como asignador de memoria a nivel de página para páginas físicas contiguas de 2 potencias. Actúa como un asignador de memoria del kernel y un backend para la caché de página.
La rutina relacionada es alloc_pages (gfp_t gfp_mask, sin firma int), que devuelve una lista enlazada de estructuras de página.
Cómo hacer un buffer de rebote de recursos limitados: la memoria DMA es limitada, espacio para el ciclo de vida; ◦kmap_atomic (): los elementos de la tabla de páginas reservadas están limitados, tan pronto como sea posible, lo más pronto posible.
NUMA y Nodo
En los sistemas SMP, cuando las CPU aumentan, el acceso indiscriminado a la memoria se convierte en un cuello de botella que afecta la escalabilidad ^ 2. La solución para esto es proporcionar una pieza de memoria separada para cada procesador. En principio, el procesador solo accede a la memoria cerca de sí mismo, lo que aumenta la escalabilidad del acceso a la memoria. Esto es NUMA (acceso de memoria no uniforme), donde cada procesador y memoria se denominan colectivamente Nodo.
Y lo que el kernel debe hacer es asignar solo la memoria en este nodo cuando la CPU asigna memoria. En Linux, la estructura del nodo es pg_data_t.
Asignación de memoria de losa y kernel
Para usar la memoria en el kernel, use Slab. Utiliza el asignador de amigos como extremo posterior, y la aplicación para bloques grandes de memoria se divide en bloques pequeños, cada uno de los cuales es un bloque de memoria grande. ◦kmem_cache_alloc () y kmem_cache_free (), un asignador de memoria dedicado para asignar estructuras comúnmente utilizadas en el kernel. ◦kmalloc () y kfree (), un asignador de memoria genérico. Detrás hay un conjunto de losas de diferentes tamaños.
Si la asignación /liberación de estructuras no es particularmente frecuente, generalmente es suficiente usar solo kmalloc ().
Administración de la tabla de páginas
La tabla de páginas de tres niveles de x86 linux está realmente preparada para PAE. Si tiene una máquina de 64 bits, debe tener cuatro niveles.
notas misceláneas◦struct address_space El nombre es engañoso. De hecho, la estructura que describe el espacio de direcciones del usuario en el kernel es struct mm_struct. La estructura struct address_space es más como una descripción de la caché de página. ◦GFP es una abreviatura de Get Free Page.
Hoy en día, Apple Mac OS y Microsoft Windows son compatibles con la tecnología multitáctil, la comun
En RHEL /CentOS, es muy conveniente utilizar la herramienta de configuración de configuración para
Cuando se trata de problemas de Oracle en el entorno de producción real, a veces se necesita una i
Windows, el sistema Linux admite el tema de la interfaz, puede cambiar fácilmente su cara y no es di
Linux shell script para eliminar comentarios de origen
Cómo usar rdesktop para lograr el uso simultáneo de Linux y Windows
Detallado comando de cierre de Linux
Espacio de disco de Linux vista de ocupación
Cómo arreglar el archivo de arranque de Linux
Deje que Linux arranque automáticamente NUMLOCK
Usar el comando de historial en Linux para mejorar la eficiencia
problemas de procesamiento temporizador servidor Linux a tener en cuenta
Funciones de marca de tiempo de Unix en diferentes idiomas
Escribe dispositivo de bloque de acuerdo con el sector de Linux
Inicio de sesión remoto en el escritorio de Windows XP bajo el sistema operativo Linux
El azulejo del calendario de la computadora del sistema Win10 muestra el método lunar chino
Conozca los siguientes puntos importantes para hacer que XP sea más seguro
La instalación y restauración completa del controlador Win8 Raiders
Centro multimedia Win7 que no conoces
Las patentes de Microsoft convertirán las aplicaciones de Android IOS en programas WP
El sistema Win10 MMC no puede crear una solución de unidad de administración
¿Cómo agregar la opción "Cerrar Windows 10" al menú de clic derecho de Win10?
El súper "Snow Leopard" de dos semanas de Windows 7 comparte tres meses