stringtranslate.com

Página (memoria de 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 única entrada en una tabla de páginas . Es la unidad de datos más pequeña para la gestión de 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 páginas de memoria. [1] [2] [3]

La transferencia de páginas entre la memoria principal y un almacenamiento auxiliar, como una unidad de disco duro , se denomina paginación o intercambio. [4]

Explicación

La memoria de la computadora está dividida 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 5000 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ía determinar en qué página aparece la palabra número 5000 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 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 en la elección del 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 dirección virtual de 2 32 se asigna a páginas de 4  KiB (2 12 bytes), la cantidad de páginas virtuales es 2 20  = (2 32  / 2 12 ). Sin embargo, si el tamaño de página se incrementa a 32 KiB (2 15 bytes), solo se requieren 2 17 páginas. Un algoritmo de paginación de varios niveles puede reducir 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, lo que pagina efectivamente la tabla de páginas.

Uso de TLB

Dado que cada acceso a la memoria debe asignarse de 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 traducción de búsqueda lateral (TLB). El TLB tiene un tamaño limitado y, cuando no puede satisfacer una solicitud determinada (un error de TLB ), se deben buscar las tablas de páginas 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 un caché TLB del mismo tamaño puede realizar un seguimiento de mayores cantidades de memoria, lo que evita los costosos errores de TLB.

Fragmentación interna

En raras ocasiones, los procesos requieren el uso de una cantidad exacta de páginas. Como resultado, es probable que la última página solo esté parcialmente llena, lo que desperdiciará cierta cantidad de memoria. Los tamaños de página más grandes generan una gran cantidad de memoria desperdiciada, ya que se cargan más porciones de memoria potencialmente no utilizadas en la memoria principal. Los tamaños de página más pequeños garantizan una coincidencia más cercana con la cantidad real de memoria requerida en una asignación.

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

Acceso al disco

Al transferir desde un disco giratorio, gran parte del retraso se debe al tiempo de búsqueda, el tiempo que lleva posicionar correctamente los cabezales de lectura/escritura sobre los platos del disco. Por este motivo, las transferencias secuenciales de gran tamaño son más eficientes que varias transferencias más pequeñas. Transferir la misma cantidad de datos desde el disco a la memoria suele requerir menos tiempo con páginas más grandes que con páginas más pequeñas.

Obtención del tamaño de 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. */  devuelve 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.

#include <stdio.h> #include <windows.h>  int main ( void ) { SYSTEM_INFO si ; GetSystemInfo ( & si );  printf ( "El tamaño de página para este sistema es %u bytes. \n " , si . dwPageSize ); devuelve 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. Esta compatibilidad con 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 la caché TLB (a veces aumentando la velocidad hasta en un 15 %) para asignaciones grandes mientras se mantiene el uso de memoria a un nivel razonable para asignaciones pequeñas.

A partir del Pentium Pro y el AMD Athlon , los procesadores x86 admiten páginas de 4 MiB (llamadas Page Size Extension ) (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] y Xeon posteriores de Intel pueden usar 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 que se utilizan 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 servidores grandes y en clústeres 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 un indicador 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 paginarlas al 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 usará automáticamente el tamaño de página más grande posible para una región dada del espacio de direcciones. [28] Trabajos posteriores propusieron soporte transparente del sistema operativo para usar una mezcla de tamaños de página para aplicaciones no modificadas a través de reservas preemptivas, 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 la versión 2.6.38. [31] Windows Server 2003 (SP1 y posteriores), Windows Vista y Windows Server 2008 soportan páginas enormes bajo el nombre de páginas grandes. [32] Windows 2000 y Windows XP soportan páginas grandes internamente, pero no las exponen a las aplicaciones. [33] A partir de la versión 9, Solaris soporta páginas grandes en SPARC y x86. [34] [35] FreeBSD 7.2-RELEASE cuenta con superpáginas. [36] Nótese que hasta hace poco en Linux, las aplicaciones necesitaban ser modificadas para poder usar páginas enormes. El kernel 2.6.38 introdujo soporte para el uso transparente de páginas enormes. [31] En los kernels Linux que soportan páginas enormes transparentes, así como FreeBSD y Solaris , las aplicaciones aprovechan las páginas enormes automáticamente, sin necesidad de modificación. [36]

Véase 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. ^ Martin C. Rinard (22 de agosto de 1998). "Operating Systems Lecture Notes, Lecture 9. Introduction to Paging" (Apuntes de la clase sobre 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 .
  3. ^ "Virtual Memory: pages and page frames" (Memoria virtual: páginas y marcos de página). cs.miami.edu . 2012-10-31. Archivado desde el original el 2016-06-11 . Consultado el 2016-06-13 .
  4. ^ Belzer, Jack; Holzman, Albert G.; Kent, Allen, eds. (1981), "Sistemas de memoria virtual", Enciclopedia de informática y tecnología, vol. 14, CRC Press, 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 es obsoleto . Conferencia internacional IEEE de 2009 sobre reutilización e integración de la información. CiteSeerX 10.1.1.154.2023 . doi :10.1109/IRI.2009.5211562. 
  7. ^ limits.h  – Referencia de definiciones básicas, La especificación única de UNIX , versión 4 de The Open Group
  8. ^ sysconf  – Referencia de interfaces del sistema, La 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 biblioteca de 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. 13 de octubre de 2021.
  16. ^ "Estructura SYSTEM_INFO". Microsoft. 23 de septiembre de 2022.
  17. ^ "Hugepages - Wiki de Debian". Wiki.debian.org. 2011-06-21 . Consultado el 2014-02-06 .
  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ág. 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. IBM Redbooks. Febrero de 2013. ISBN 978-0-7384-3766-8. Recuperado el 17 de marzo de 2014 .
  22. ^ "El Manual de Arquitectura SPARC, Versión 8". 1992. pág. 249.
  23. ^ "Arquitectura UltraSPARC 2007" (PDF) . 27 de septiembre de 2010. pág. 427.
  24. ^ "Manual de referencia de arquitectura ARM, edición ARMv7-A y ARMv7-R". Arm . 2014-05-20. p. B3-1324.
  25. ^ "Gránulo de traducción". Conozca la arquitectura: gestión de memoria AArch64 . Arm . Consultado el 19 de agosto de 2022 .
  26. ^ ab Waterman, Andrew; Asanović, Krste ; Hauser, John (2021). Manual del conjunto de instrucciones RISC-V Volumen II: Arquitectura privilegiada (PDF) . págs. 79–87.
  27. ^ "El Intel Xeon 5670: seis núcleos mejorados". AnandTech . Consultado el 3 de noviembre de 2012 .
  28. ^ "Compatibilidad de sistemas operativos de propósito general con varios tamaños de página" (PDF) . static.usenix.org . Consultado el 2 de noviembre de 2012 .
  29. ^ Navarro, Juan; Iyer, Sitararn; Druschel, Peter; Cox, Alan (diciembre de 2002). Soporte práctico y transparente de sistemas operativos para superpáginas (PDF) . 5.º Simposio de Usenix sobre diseño e implementación de sistemas operativos.
  30. ^ "Páginas - dankwiki, la wiki de nick black" . Consultado el 17 de junio de 2023 .
  31. ^ ab Corbet, Jonathan. "Páginas enormes transparentes en 2.6.38". LWN . Consultado el 2 de marzo de 2011 .
  32. ^ "Compatibilidad con páginas grandes". Microsoft Docs . 8 de mayo de 2018.
  33. ^ "El programa AGP puede bloquearse al utilizar la extensión de tamaño de página en el procesador Athlon". Support.microsoft.com. 2007-01-27 . Consultado el 2012-11-03 .
  34. ^ "Compatibilidad con varios tamaños de página en el sistema operativo Solaris" (PDF) . Sun BluePrints Online . Sun Microsystems. Archivado desde el original (PDF) el 2006-03-12 . Consultado el 2008-01-19 .
  35. ^ "Apéndice sobre compatibilidad con varios tamaños de página en el sistema operativo Solaris" (PDF) . Sun BluePrints Online . Sun Microsystems. Archivado desde el original (PDF) el 2007-01-01 . Consultado el 2008-01-19 .
  36. ^ ab "Notas de la versión de FreeBSD 7.2-RELEASE". FreeBSD Foundation . Consultado el 3 de mayo de 2009 .
  37. ^ "2.3.1 Memoria de solo lectura / 2.3.2 Memoria de acceso aleatorio de programa". 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, EE. UU.: Intel Corporation . Diciembre de 1973. págs. 2-3–2-4. MCS-030-1273-1. Archivado (PDF) desde el original el 2020-03-01 . Consultado el 2020-03-02 . […] La ROM se divide 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 de programa (RAM) está organizada exactamente como la ROM. […]
  38. ^ ab "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, EE. UU.: Intel Corporation . Mayo de 1982 [1980, 1978]. pág. 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 .

Lectura adicional