Una página , página de memoria o página virtual es un bloque contiguo de memoria virtual de longitud fija , descrito por una sola entrada en la tabla de páginas . Es la unidad de datos más pequeña para la gestión de memoria en un sistema operativo de memoria virtual . De manera similar, un marco de página es el bloque contiguo de memoria física de longitud fija más pequeño en el que el sistema operativo asigna las páginas de memoria. [1] [2] [3]
Una transferencia de páginas entre la memoria principal y un almacén auxiliar, como una unidad de disco duro , se denomina paginación o intercambio. [4]
Compensación de tamaño de página
El tamaño de la página suele estar determinado por la arquitectura del procesador. Tradicionalmente, las páginas de un sistema tenían un tamaño uniforme, como 4096 bytes . Sin embargo, los diseños de procesadores a menudo permiten dos o más tamaños de página, a veces simultáneos, debido a sus ventajas. Hay varios puntos que pueden influir en la elección del mejor tamaño de página. [5]
Tamaño de la tabla de páginas
Un sistema con un tamaño de página más pequeño utiliza más páginas, lo que requiere una tabla de páginas que ocupe más espacio. Por ejemplo, si un 2 32 espacio de direcciones virtuales se asigna a 4 KB (2 12 bytes) páginas, el número de páginas virtuales es de 2 20 = (2 32 /2 12 ). Sin embargo, si el tamaño de la página aumenta a 32 KB (2 15 bytes), solo se requieren 2 17 páginas. Un algoritmo de paginación de varios niveles puede disminuir el costo de memoria de asignar una tabla de página grande para cada proceso al dividir aún más la tabla de página en tablas más pequeñas, paginando efectivamente la tabla de página.
Uso de TLB
Dado que cada acceso a la memoria debe asignarse desde la dirección virtual a la física, leer la tabla de páginas cada vez puede resultar bastante costoso. Por lo tanto, a menudo se usa un tipo de caché muy rápido, el búfer de búsqueda de traducción (TLB). El TLB tiene un tamaño limitado, y cuando no puede satisfacer una solicitud determinada (un TLB perdido ), las tablas de páginas deben buscarse manualmente (ya sea en hardware o software, según la arquitectura) para obtener el mapeo correcto. Los tamaños de página más grandes significan que una caché de TLB del mismo tamaño puede realizar un seguimiento de grandes cantidades de memoria, lo que evita las costosas pérdidas de TLB.
Fragmentación interna
Rara vez los procesos requieren el uso de un número exacto de páginas. Como resultado, la última página probablemente solo estará parcialmente llena, desperdiciando cierta cantidad de memoria. Los tamaños de página más grandes dan lugar a una gran cantidad de memoria desperdiciada, ya que se cargan en la memoria principal más porciones de memoria potencialmente no utilizadas. Los tamaños de página más pequeños aseguran una coincidencia más cercana a la cantidad real de memoria requerida en una asignación.
Como ejemplo, suponga que el tamaño de la página es de 1024 KB. Si un proceso asigna 1025 KB, se deben usar dos páginas, lo que da como resultado 1023 KB de espacio no utilizado (donde una página consume 1024 KB y la otra solo 1 KB).
Acceso al disco
Cuando se transfiere desde un disco giratorio, gran parte del retraso se debe al tiempo de búsqueda, el tiempo que se tarda en colocar correctamente los cabezales de lectura / escritura sobre los platos del disco. Debido a esto, las transferencias secuenciales grandes son más eficientes que varias transferencias más pequeñas. La transferencia de la misma cantidad de datos del disco a la memoria a menudo requiere menos tiempo con páginas más grandes que con páginas más pequeñas.
Obtener el tamaño de la página mediante programación
La mayoría de los sistemas operativos permiten que los programas descubran el tamaño de la página en tiempo de ejecución . Esto permite que los programas utilicen la memoria de manera más eficiente al alinear las asignaciones a este tamaño y reducir la fragmentación interna general de las páginas.
Sistemas operativos basados en Unix y POSIX
Los sistemas basados en Unix y POSIX pueden usar la función del sistema sysconf()
, [6] [7] [8] [9] [10] como se ilustra en el siguiente ejemplo escrito en el lenguaje de programación C.
#include #include / * sysconf (3) * /int main ( void ) { printf ( "El tamaño de página para este sistema es% ld bytes. \ n " , sysconf ( _SC_PAGESIZE )); / * _SC_PAGE_SIZE también está bien. * /return 0 ; }
En muchos sistemas Unix, getconf
se puede utilizar la utilidad de línea de comandos . [11] [12] [13] Por ejemplo, getconf PAGESIZE
devolverá el tamaño de la página en bytes.
Sistemas operativos basados en Windows
Los sistemas operativos basados en Win32 , como los de las familias Windows 9x y Windows NT , pueden utilizar la función del sistema GetSystemInfo()
[14] [15] de kernel32.dll
.
#include #include int main ( vacío ) { SYSTEM_INFO si ; GetSystemInfo ( & si );printf ( "El tamaño de página para este sistema es% u bytes. \ n " , si . dwPageSize );return 0 ; }
Varios tamaños de página
Algunas arquitecturas de conjuntos de instrucciones pueden admitir varios tamaños de página, incluidas páginas significativamente más grandes que el tamaño de página estándar. Los tamaños de página disponibles dependen de la arquitectura del conjunto de instrucciones, el tipo de procesador y el modo operativo (direccionamiento). El sistema operativo selecciona uno o más tamaños de los tamaños admitidos por la arquitectura. Tenga en cuenta que no todos los procesadores implementan todos los tamaños de página más grandes definidos. Este soporte para páginas más grandes (conocidas como "páginas enormes" en Linux , "superpáginas" en FreeBSD y "páginas grandes" en terminología de Microsoft Windows e IBM AIX ) permite "lo mejor de ambos mundos", reduciendo la presión sobre el TLB. caché (que a veces aumenta la velocidad hasta en un 15%) para asignaciones grandes y, al mismo tiempo, mantiene el uso de la memoria a un nivel razonable para asignaciones pequeñas.
Arquitectura | Tamaño de página más pequeño | Tamaños de página más grandes |
---|---|---|
X86 de 32 bits [17] | 4 KB | 4 MB en modo PSE , 2 MB en modo PAE [18] |
x86-64 [17] | 4 KB | 2 MB, 1 GB (solo cuando la CPU tiene PDPE1GB bandera) |
IA-64 ( Itanium ) [19] | 4 KB | 8 KB, 64 KB, 256 KB, 1 MB, 4 MB, 16 MB, 256 MB [18] |
Energía ISA [20] | 4 KB | 64 KB, 16 MB, 16 GB |
SPARC v8 con MMU de referencia SPARC [21] | 4 KB | 256 KB, 16 MB |
Arquitectura UltraSPARC 2007 [22] | 8 KB | 64 KB, 512 KB (opcional), 4 MB, 32 MB (opcional), 256 MB (opcional), 2 GB (opcional), 16 GB (opcional) |
ARMv7 [23] | 4 KB | 64 KB, 1 MB ("sección"), 16 MB ("supersección") (definido por una implementación particular) |
Comenzando con Pentium Pro y AMD Athlon , los procesadores x86 admiten páginas de 4 MB (llamadas Extensión de tamaño de página ) (páginas de 2 MB si se usa PAE ) además de sus páginas estándar de 4 KB; nuevas x86-64 procesadores, tales como AMD 'procesadores AMD64 nuevas s y Intel ' s Westmere [24] y más tarde Xeon procesadores pueden utilizar 1 páginas GB en modo largo . IA-64 admite hasta ocho tamaños de página diferentes, desde 4 KB hasta 256 MB, y algunas otras arquitecturas tienen características similares. [ especificar ]
Las páginas más grandes, a pesar de estar disponibles en los procesadores utilizados en la mayoría de las computadoras personales contemporáneas , no son de uso común excepto en aplicaciones a gran escala, las aplicaciones que se encuentran típicamente en grandes servidores y en clústeres computacionales , y en el sistema operativo mismo. Comúnmente, su uso requiere privilegios elevados, cooperación de la aplicación que realiza la gran asignación (generalmente colocando una bandera para solicitar al sistema operativo páginas grandes) o configuración manual del administrador; Los sistemas operativos comúnmente, a veces por diseño, no pueden paginarlos en el disco.
Sin embargo, SGI IRIX tiene soporte de propósito general para múltiples tamaños de página. Cada proceso individual puede proporcionar sugerencias y el sistema operativo utilizará automáticamente el tamaño de página más grande posible para una región determinada del espacio de direcciones. [25] Un trabajo posterior propuso un soporte transparente del sistema operativo para usar una combinación de tamaños de página para aplicaciones no modificadas a través de reservas preferentes, promociones oportunistas, degradaciones especulativas y control de fragmentación. [26]
Linux ha soportado páginas enormes en varias arquitecturas desde la serie 2.6 a través del hugetlbfs
sistema de archivos [27] y sin él hugetlbfs
desde 2.6.38. [28] Windows Server 2003 (SP1 y más reciente), Windows Vista y Windows Server 2008 admiten páginas grandes con el nombre de páginas grandes. [29] Windows 2000 y Windows XP admiten páginas grandes internamente, pero no las exponen a aplicaciones. [30] A partir de la versión 9, Solaris admite páginas grandes en SPARC y x86. [31] [32] FreeBSD 7.2-RELEASE presenta superpáginas. [33] Tenga en cuenta que hasta hace poco en Linux, las aplicaciones debían modificarse para poder utilizar páginas enormes. El kernel 2.6.38 introdujo soporte para el uso transparente de páginas enormes. [28] En los kernels de Linux que admiten páginas enormes transparentes, así como FreeBSD y Solaris , las aplicaciones aprovechan las páginas grandes automáticamente, sin necesidad de modificaciones. [33]
Ver también
- Fallo de página
- Tabla de páginas
- Paginación
- Memoria virtual
- Página cero (propiedad del procesador) : un área de memoria (a menudo de 256 bytes [34] [35] ) al comienzo de la sala de direcciones de un procesador
- Página cero (CP / M) : una estructura de datos [35] de 256 bytes al inicio de un programa
Referencias
- ↑ Christopher Kruegel (3 de diciembre de 2012). "Sistemas operativos (curso CS170-08)" (PDF) . cs.ucsb.edu . Archivado desde el original (PDF) el 10 de agosto de 2016 . Consultado el 13 de junio de 2016 .
- ^ Martin C. Rinard (22 de agosto de 1998). "Notas de la conferencia de sistemas operativos, lección 9. Introducción a la paginación" . people.csail.mit.edu . Archivado desde el original el 1 de junio de 2016 . Consultado el 13 de junio de 2016 .
- ^ "Memoria virtual: páginas y marcos de página" . cs.miami.edu . 2012-10-31. Archivado desde el original el 11 de junio de 2016 . Consultado el 13 de junio de 2016 .
- ^ Belzer, Jack; Holzman, Albert G .; Kent, Allen, eds. (1981), "Sistemas de memoria virtual", Enciclopedia de informática y tecnología , 14 , CRC Press, p. 32, ISBN 0-8247-2214-0
- ^ "El uso de un tamaño de página de 4 KB para la memoria virtual es obsoleto". IEEE. 2009-08-10. CiteSeerX 10.1.1.154.2023 . Cite journal requiere
|journal=
( ayuda ) - ^ - Referencia de definiciones de base, la especificación única de UNIX , número 7 de The Open Group
- ^ - Referencia de interfaces del sistema, la especificación única de UNIX , número 7 de The Open Group
- ^ - Manual de funciones de la biblioteca de Linux
- ^ - Manual de funciones de la biblioteca de Darwin y macOS
- ^ - Manual de referencia de las funciones básicas de la biblioteca de Solaris 10
- ^ - Referencia de comandos y utilidades, la especificación única de UNIX , número 7 de The Open Group
- ^ - Manual de comandos de usuario de Linux
- ^ - Manual de comandos generales de Darwin y macOS
- ^ "Función GetSystemInfo" . Microsoft.
- ^ "Estructura SYSTEM_INFO" . Microsoft.
- ^ "Páginas gigantes - Wiki de Debian" . Wiki.debian.org. 2011-06-21 . Consultado el 6 de febrero de 2014 .
- ^ a b "Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32 Volumen 3 (3A, 3B, 3C y 3D): Guía de programación del sistema" (PDF) . Diciembre de 2016. p. 4-2.
- ^ a b "Documentación / vm / hugetlbpage.txt" . Documentación del kernel de Linux . kernel.org . Consultado el 6 de febrero de 2014 .
- ^ "Manual del desarrollador de software de la arquitectura Intel Itanium Volumen 2: Arquitectura del sistema" (PDF) . Mayo de 2010. p. 2:58.
- ^ IBM Power Systems Performance Guide: implementación y optimización . IBM Redbooks. Febrero de 2013. ISBN 9780738437668. Consultado el 17 de marzo de 2014 .
- ^ "El Manual de Arquitectura SPARC, Versión 8" . 1992. p. 249.
- ^ "Arquitectura UltraSPARC 2007" (PDF) . 2010-09-27. pag. 427.
- ^ "Manual de referencia de arquitectura ARM ARMv7-A y edición ARMv7-R" . 2014-05-20. pag. B3-1324.
- ^ "El Intel Xeon 5670: seis núcleos mejorados" . AnandTech . Consultado el 3 de noviembre de 2012 .
- ^ "Soporte de sistema operativo de propósito general para varios tamaños de página" (PDF) . static.usenix.org . Consultado el 2 de noviembre de 2012 .
- ^ Navarro, Juan; Iyer, Sitararn; Druschel, Peter; Cox, Alan (diciembre de 2002). Soporte de sistema operativo práctico y transparente para superpáginas (PDF) . V Simposio Usenix sobre Diseño e Implementación de Sistemas Operativos.
- ^ "Páginas - dankwiki, la wiki de nick black" . Dank.qemfd.net . Consultado el 3 de noviembre de 2012 .
- ^ a b Corbet, Jonathan. "Grandes páginas transparentes en 2.6.38" . LWN . Consultado el 2 de marzo de 2011 .
- ^ "Soporte de página grande" . Microsoft Docs . 2018-05-08.
- ^ "El programa AGP puede bloquearse cuando se usa la extensión de tamaño de página en el procesador Athlon" . Support.microsoft.com. 2007-01-27 . Consultado el 3 de noviembre de 2012 .
- ^ "Compatibilidad con varios tamaños de página en el sistema operativo Solaris" (PDF) . Sun BluePrints en línea . Sun Microsystems . Consultado el 19 de enero de 2008 .
- ^ "Compatibilidad con varios tamaños de página en el apéndice del sistema operativo Solaris" (PDF) . Sun BluePrints en línea . Sun Microsystems . Consultado el 19 de enero de 2008 .
- ^ a b "Notas de la versión de FreeBSD 7.2-RELEASE" . Fundación FreeBSD . Consultado el 3 de mayo de 2009 .
- ^ "2.3.1 Memoria de sólo lectura / 2.3.2 Programa de memoria de acceso aleatorio". Manual de programación en lenguaje ensamblador MCS-4 - Manual de programación del sistema de microcomputadoras INTELLEC 4 (PDF) (Edición preliminar). Santa Clara, California, Estados Unidos: Intel Corporation . Diciembre de 1973. págs. 2-3–2-4. MCS-030-1273-1. Archivado (PDF) desde el original el 1 de marzo de 2020 . Consultado el 2 de marzo de 2020 .
[…] La ROM se divide en páginas, cada una de las cuales contiene 256 bytes. Por tanto, las ubicaciones 0 a 255 comprenden la página 0 de la ROM, las ubicaciones 256 a 511 comprenden la página 1 y así sucesivamente. […] La memoria de acceso aleatorio (RAM) del programa está organizada exactamente como la ROM. […]
- ^ a b "1. Introducción: Alineación de segmentos". Utilidades de la familia 8086: Guía del usuario para sistemas de desarrollo basados en 8080/8085 (PDF) . Revisión E (A620 / 5821 6K DD ed.). Santa Clara, California, Estados Unidos: Intel Corporation . Mayo de 1982 [1980, 1978]. pag. 1-6. Número de pedido: 9800639-04. Archivado (PDF) desde el original el 29 de febrero de 2020 . Consultado el 29 de febrero de 2020 .
Otras lecturas
- Dandamudi, Sivarama P. (2003). Fundamentos de Organización y Diseño de Computadores (1ª ed.). Springer . págs. 740–741. ISBN 0-387-95211-X.