stringtranslate.com

Página (memoria de la computadora)

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 una tabla de páginas . Es la unidad de datos más pequeña para la gestión de la memoria en un sistema operativo que utiliza 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]

Explicación

La memoria de la computadora se divide en páginas para que la información se pueda encontrar más rápidamente.

El concepto recibe su nombre por analogía con las páginas de un libro impreso. Si un lector quisiera encontrar, por ejemplo, la palabra número 5.000 del libro, podría contar desde la primera palabra. Esto llevaría mucho tiempo. Sería mucho más rápido si el lector tuviera una lista de cuántas palabras hay en cada página. A partir de esta lista, podrían determinar en qué página aparece la palabra número 5.000 y cuántas palabras contar en esa página. Esta lista de palabras por página del libro es análoga a una tabla de páginas de un sistema de archivos de computadora . [5]

Tamaño de página

Compensación del 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 suelen permitir dos o más tamaños de página, a veces simultáneos, debido a sus ventajas. Hay varios puntos que pueden influir a la hora de elegir el mejor tamaño de página. [6]

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 espacio de direcciones virtuales de 2 32 se asigna a páginas de 4  KiB (2 12 bytes), el número de páginas virtuales es 2 20  = (2 32  / 2 12 ). Sin embargo, si el tamaño de la página se aumenta a 32 KiB (2 15 bytes), sólo se necesitarán 2 17 páginas. Un algoritmo de paginación de varios niveles puede disminuir el costo de memoria de asignar una tabla de páginas grande para cada proceso al dividir aún más la tabla de páginas en tablas más pequeñas, paginando efectivamente la tabla de páginas.

Uso de TLB

Dado que cada acceso a la memoria debe asignarse desde una dirección virtual a una física, leer la tabla de páginas cada vez puede resultar bastante costoso. Por lo tanto, a menudo se utiliza un tipo de caché muy rápido, el búfer de búsqueda de traducción (TLB). El TLB es de tamaño limitado y, cuando no puede satisfacer una solicitud determinada (un error de TLB ), se deben buscar manualmente las tablas de páginas (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é TLB del mismo tamaño puede realizar un seguimiento de mayores 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, es probable que la última página solo esté parcialmente llena, desperdiciando cierta cantidad de memoria. Los tamaños de página más grandes provocan 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 garantizan una mayor coincidencia con la cantidad real de memoria requerida en una asignación.

Como ejemplo, supongamos que el tamaño de la página es 1024 B. Si un proceso asigna 1025 B, se deben usar dos páginas, lo que da como resultado 1023 B de espacio no utilizado (donde una página consume completamente 1024 B y la otra solo 1 B).

Acceso al disco

Cuando se transfiere desde un disco giratorio, gran parte del retraso se debe al tiempo de búsqueda, el tiempo que lleva colocar correctamente los cabezales de lectura/escritura sobre los platos del disco. Por esta razón, las transferencias secuenciales grandes son más eficientes que varias transferencias más pequeñas. Transferir 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 utilizar la función del sistema sysconf(), [7] [8] [9] [10] [ 11] como se ilustra en el siguiente ejemplo escrito en el lenguaje de programación C.

#include <stdio.h> #include <unistd.h> /* 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. */  devolver 0 ; } 

getconfEn muchos sistemas Unix, se puede utilizar la utilidad de línea de comandos . [12] [13] [14] Por ejemplo, getconf PAGESIZEdevolverá 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()[15] [16] de kernel32.dll.

#incluir <stdio.h> #incluir <windows.h>  int principal ( vacío ) { INFO_SISTEMA si ; GetSystemInfo ( & si );  printf ( "El tamaño de página para este sistema es %u bytes. \n " , si . dwPageSize ); devolver 0 ; } 

Múltiples 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 la terminología de Microsoft Windows e IBM AIX ) permite "lo mejor de ambos mundos", reduciendo la presión sobre el TLB . caché (a veces aumenta la velocidad hasta en un 15%) para asignaciones grandes y al mismo tiempo mantiene el uso de memoria en un nivel razonable para asignaciones pequeñas.

Comenzando con Pentium Pro y AMD Athlon , los procesadores x86 admiten páginas de 4 MiB (llamadas extensión de tamaño de página ) (páginas de 2 MiB si se usa PAE ) además de sus páginas estándar de 4 KiB; Los procesadores x86-64 más nuevos , como los procesadores AMD64 más nuevos de AMD y los procesadores Westmere [27] de Intel y Xeon posteriores , pueden utilizar páginas de 1 GiB en modo largo . IA-64 admite hasta ocho tamaños de página diferentes, desde 4 KiB hasta 256 MiB, 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 normalmente se encuentran en grandes servidores y en clusters computacionales , y en el propio sistema operativo. Comúnmente, su uso requiere privilegios elevados, cooperación de la aplicación que realiza la asignación grande (generalmente estableciendo 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. [28] Un trabajo posterior propuso soporte transparente del sistema operativo para el uso de una combinación de tamaños de página para aplicaciones no modificadas a través de reservas preventivas, promociones oportunistas, degradaciones especulativas y control de fragmentación. [29]

Linux ha soportado páginas enormes en varias arquitecturas desde la serie 2.6 a través del hugetlbfssistema de archivos [30] y sin él hugetlbfsdesde 2.6.38. [31] Windows Server 2003 (SP1 y posteriores), Windows Vista y Windows Server 2008 admiten páginas grandes bajo el nombre de páginas grandes. [32] Windows 2000 y Windows XP admiten páginas grandes internamente, pero no las exponen a las aplicaciones. [33] A partir de la versión 9, Solaris admite páginas grandes en SPARC y x86. [34] [35] FreeBSD 7.2-RELEASE presenta superpáginas. [36] 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 grandes. [31] En los kernels de Linux que admiten páginas enormes transparentes, así como en FreeBSD y Solaris , las aplicaciones aprovechan las páginas enormes automáticamente, sin necesidad de modificaciones. [36]

Ver también

Referencias

  1. ^ Christopher Kruegel (3 de diciembre de 2012). «Sistemas Operativos (curso CS170-08)» (PDF) . cs.ucsb.edu . Archivado (PDF) desde el original el 10 de agosto de 2016 . Consultado el 13 de junio de 2016 .
  2. ^ Martín C. Rinard (22 de agosto de 1998). "Notas de la conferencia sobre sistemas operativos, lección 9. Introducción a la paginación". gente.csail.mit.edu . Archivado desde el original el 1 de junio de 2016 . Consultado el 13 de junio de 2016 .
  3. ^ "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 .
  4. ^ Belzer, Jack; Holzman, Albert G.; Kent, Allen, eds. (1981), "Sistemas de memoria virtual", Enciclopedia de informática y tecnología, vol. 14, Prensa CRC, pág. 32, ISBN 0-8247-2214-0
  5. ^ Kazemi, Darío (11 de enero de 2019). "RFC-11". 365 RFC .
  6. ^ Weisberg, P.; Wiseman, Y. (10 de agosto de 2009). El uso de un tamaño de página de 4 KB para la memoria virtual está obsoleto . Conferencia internacional IEEE 2009 sobre integración y reutilización de información. CiteSeerX 10.1.1.154.2023 . doi :10.1109/IRI.2009.5211562. 
  7. ^ limits.h  - Referencia de definiciones básicas, especificación única de UNIX , versión 4 de The Open Group
  8. ^ sysconf  - Referencia de interfaces del sistema, especificación única de UNIX , versión 4 de The Open Group
  9. ^ sysconf(3)  -  Manual de funciones de la biblioteca de Linux
  10. ^ sysconf(3)  -  Manual de funciones de la biblioteca Darwin y macOS
  11. ^ sysconf(3C)  -  Manual de referencia de funciones básicas de la biblioteca de Solaris 11.4
  12. ^ getconf  - Referencia de Shell y utilidades, la especificación única de UNIX , versión 4 de The Open Group
  13. ^ getconf(1)  -  Manual de comandos de usuario de Linux
  14. ^ getconf(1)  –  Manual de comandos generales de Darwin y macOS
  15. ^ "Función GetSystemInfo". Microsoft. 2021-10-13.
  16. ^ "Estructura SYSTEM_INFO". Microsoft. 2022-09-23.
  17. ^ "Páginas enormes - Debian Wiki". Wiki.debian.org. 2011-06-21 . Consultado el 6 de febrero de 2014 .
  18. ^ ab "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.
  19. ^ ab "Documentación/vm/hugetlbpage.txt". Documentación del núcleo de Linux . kernel.org . Consultado el 6 de febrero de 2014 .
  20. ^ "Manual del desarrollador de software de arquitectura Intel Itanium Volumen 2: Arquitectura del sistema" (PDF) . Mayo de 2010. pág. 2:58.
  21. ^ Guía de rendimiento de IBM Power Systems: implementación y optimización. Libros rojos de IBM. Febrero de 2013. ISBN 978-0-7384-3766-8. Consultado el 17 de marzo de 2014 .
  22. ^ "Manual de arquitectura SPARC, versión 8". 1992. pág. 249.
  23. ^ "Arquitectura UltraSPARC 2007" (PDF) . 2010-09-27. pag. 427.
  24. ^ "Manual de referencia de arquitectura ARM Edición ARMv7-A y ARMv7-R". Brazo . 2014-05-20. pag. B3-1324.
  25. ^ "Gránulo de traducción". Conozca la arquitectura: gestión de memoria AArch64 . Brazo . Consultado el 19 de agosto de 2022 .
  26. ^ ab Waterman, Andrés; Asanović, Krste; Hauser, John (2021). Manual del conjunto de instrucciones RISC-V Volumen II: Arquitectura privilegiada (PDF) . págs. 79–87.
  27. ^ "Intel Xeon 5670: seis núcleos mejorados". AnandTech . Consultado el 3 de noviembre de 2012 .
  28. ^ "Compatibilidad con sistemas operativos de uso general para varios tamaños de página" (PDF) . estático.usenix.org . Consultado el 2 de noviembre de 2012 .
  29. ^ Navarro, Juan; Iyer, Sitararn; Druschel, Peter; Cox, Alan (diciembre de 2002). Soporte de sistema operativo práctico y transparente para Superpages (PDF) . V Simposio Usenix sobre Diseño e Implementación de Sistemas Operativos.
  30. ^ "Pages - dankwiki, el wiki de nick black" . Consultado el 17 de junio de 2023 .
  31. ^ ab Corbet, Jonathan. "Páginas enormes y transparentes en 2.6.38". LWN . Consultado el 2 de marzo de 2011 .
  32. ^ "Soporte para páginas grandes". Documentos de Microsoft . 2018-05-08.
  33. ^ "El programa AGP puede bloquearse al utilizar la extensión de tamaño de página en el procesador Athlon". Soporte.microsoft.com. 2007-01-27 . Consultado el 3 de noviembre de 2012 .
  34. ^ "Compatibilidad con varios tamaños de página en el sistema operativo Solaris" (PDF) . Planos de Sun en línea . Microsistemas solares. Archivado desde el original (PDF) el 12 de marzo de 2006 . Consultado el 19 de enero de 2008 .
  35. ^ "Compatibilidad con varios tamaños de página en el apéndice del sistema operativo Solaris" (PDF) . Planos de Sun en línea . Microsistemas solares. Archivado desde el original (PDF) el 1 de enero de 2007 . Consultado el 19 de enero de 2008 .
  36. ^ ab "Notas de la versión de FreeBSD 7.2-RELEASE". Fundación FreeBSD . Consultado el 3 de mayo de 2009 .
  37. ^ "2.3.1 Memoria de sólo lectura / 2.3.2 Memoria de acceso aleatorio del programa". Manual de programación en lenguaje ensamblador MCS-4: manual de programación del sistema de microcomputadora 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 a su vez en páginas, cada una de las cuales contiene 256 bytes. Por lo 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. […]
  38. ^ ab "1. Introducción: alineación de segmentos". 8086 Family Utilities: 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