stringtranslate.com

Memoria virtual

La memoria virtual combina RAM activa y memoria inactiva en DASD [a] para formar una amplia gama de direcciones contiguas.

En informática , memoria virtual o almacenamiento virtual , [b] es una técnica de gestión de memoria que proporciona una "abstracción idealizada de los recursos de almacenamiento que están realmente disponibles en una máquina determinada" [3] que "crea la ilusión para los usuarios de una máquina muy gran memoria (principal)". [4]

El sistema operativo de la computadora , utilizando una combinación de hardware y software, asigna direcciones de memoria utilizadas por un programa, llamadas direcciones virtuales , en direcciones físicas en la memoria de la computadora . El almacenamiento principal , visto por un proceso o tarea, aparece como un espacio de direcciones contiguo o una colección de segmentos contiguos . El sistema operativo gestiona los espacios de direcciones virtuales y la asignación de memoria real a la memoria virtual. [5] El hardware de traducción de direcciones en la CPU, a menudo denominado unidad de administración de memoria (MMU), traduce automáticamente direcciones virtuales a direcciones físicas. El software dentro del sistema operativo puede ampliar estas capacidades, utilizando, por ejemplo, almacenamiento en disco , para proporcionar un espacio de direcciones virtuales que puede exceder la capacidad de la memoria real y, por lo tanto, hacer referencia a más memoria de la que está físicamente presente en la computadora.

Los principales beneficios de la memoria virtual incluyen liberar a las aplicaciones de tener que administrar un espacio de memoria compartido, la capacidad de compartir la memoria utilizada por las bibliotecas entre procesos, una mayor seguridad debido al aislamiento de la memoria y la posibilidad de usar conceptualmente más memoria de la que podría estar físicamente disponible, usando la técnica de paginación o segmentación.

Propiedades

La memoria virtual facilita la programación de aplicaciones al ocultar la fragmentación de la memoria física; delegando al núcleo la carga de gestionar la jerarquía de la memoria (eliminando la necesidad de que el programa maneje superposiciones explícitamente); y, cuando cada proceso se ejecuta en su propio espacio de direcciones dedicado, obviando la necesidad de reubicar el código del programa o acceder a la memoria con direccionamiento relativo .

La virtualización de la memoria puede considerarse una generalización del concepto de memoria virtual.

Uso

La memoria virtual es una parte integral de la arquitectura informática moderna ; Las implementaciones generalmente requieren soporte de hardware, generalmente en forma de una unidad de administración de memoria integrada en la CPU . Si bien no es necesario, los emuladores y las máquinas virtuales pueden emplear soporte de hardware para aumentar el rendimiento de sus implementaciones de memoria virtual. [6] Los sistemas operativos más antiguos, como los de los mainframes de la década de 1960 y los de las computadoras personales de principios y mediados de la década de 1980 (por ejemplo, DOS ), [7] generalmente no tienen funcionalidad de memoria virtual, [ dudoso ] aunque las excepciones notables para las computadoras centrales de la década de 1960 incluyen:

Durante la década de 1960 y principios de la de 1970, la memoria de las computadoras era muy cara. La introducción de la memoria virtual brindó la capacidad de que los sistemas de software con grandes demandas de memoria se ejecutaran en computadoras con menos memoria real. Los ahorros resultantes de esto proporcionaron un fuerte incentivo para cambiar a la memoria virtual para todos los sistemas. La capacidad adicional de proporcionar espacios de direcciones virtuales agregó otro nivel de seguridad y confiabilidad, haciendo así que la memoria virtual sea aún más atractiva para el mercado.

La mayoría de los sistemas operativos modernos que admiten memoria virtual también ejecutan cada proceso en su propio espacio de direcciones dedicado . Por tanto, cada programa parece tener acceso exclusivo a la memoria virtual. Sin embargo, algunos sistemas operativos más antiguos (como OS/VS1 y OS/VS2 SVS ) e incluso los modernos (como IBM i ) son sistemas operativos de espacio de direcciones único que ejecutan todos los procesos en un espacio de direcciones único compuesto de memoria virtualizada.

Los sistemas integrados y otros sistemas informáticos de propósito especial que requieren tiempos de respuesta muy rápidos y/o muy consistentes pueden optar por no utilizar memoria virtual debido a un menor determinismo ; Los sistemas de memoria virtual desencadenan trampas impredecibles que pueden producir retrasos no deseados e impredecibles en respuesta a la entrada, especialmente si la trampa requiere que los datos se lean en la memoria principal desde la memoria secundaria. El hardware para traducir direcciones virtuales a direcciones físicas generalmente requiere un área de chip significativa para su implementación, y no todos los chips utilizados en sistemas integrados incluyen ese hardware, lo cual es otra razón por la que algunos de esos sistemas no usan memoria virtual.

Historia

En la década de 1950, todos los programas más grandes tenían que contener lógica para administrar el almacenamiento primario y secundario, como la superposición . Por lo tanto, la memoria virtual se introdujo no sólo para ampliar la memoria primaria, sino también para hacer que dicha extensión fuera lo más fácil de usar posible para los programadores. [8] Para permitir la multiprogramación y la multitarea , muchos de los primeros sistemas dividían la memoria entre múltiples programas sin memoria virtual, como los primeros modelos del PDP-10 mediante registros .

Una afirmación de que el concepto de memoria virtual fue desarrollado por primera vez por el físico alemán Fritz-Rudolf Güntsch en la Technische Universität Berlin en 1956 en su tesis doctoral, Diseño lógico de una computadora digital con múltiples tambores giratorios asíncronos y operación automática de memoria de alta velocidad [9] [10] no resiste un escrutinio cuidadoso. La computadora propuesta por Güntsch (pero nunca construida) tenía un espacio de direcciones de 10 5 palabras que correspondían exactamente a las 10 5 palabras de los tambores, es decir , las direcciones eran direcciones reales y no había ningún tipo de mapeo indirecto, una característica clave de la computadora virtual. memoria. Lo que sí inventó Güntsch fue una forma de memoria caché , ya que su memoria de alta velocidad estaba destinada a contener una copia de algunos bloques de código o datos extraídos de los tambores. De hecho, escribió (como se cita en la traducción [11] ): "El programador no necesita respetar la existencia de la memoria primaria (ni siquiera necesita saber que existe), porque sólo hay un tipo de direcciones ( sic ) mediante las cuales se puede programar como si solo hubiera un almacenamiento." Esta es exactamente la situación en las computadoras con memoria caché, uno de los primeros ejemplos comerciales de la cual fue el IBM System/360 Modelo 85. [12] En el Modelo 85 todas las direcciones eran direcciones reales que se referían al almacén central principal. Un almacén de caché de semiconductores, invisible para el usuario, contenía el contenido de partes del almacén principal que utilizaba el programa que se estaba ejecutando actualmente. Esto es exactamente análogo al sistema de Güntsch, diseñado como un medio para mejorar el rendimiento, en lugar de resolver los problemas involucrados en la multiprogramación.

La computadora Atlas de la Universidad de Manchester fue la primera computadora que contó con una verdadera memoria virtual.

El primer sistema de memoria virtual verdadero fue el implementado en la Universidad de Manchester para crear un sistema de almacenamiento de un nivel [13] como parte de Atlas Computer . Utilizó un mecanismo de paginación para asignar las direcciones virtuales disponibles para el programador en la memoria real que constaba de 16.384 palabras de memoria central primaria con 98.304 palabras adicionales de memoria secundaria de tambor . [14] La adición de memoria virtual al Atlas también eliminó un problema de programación inminente: planificar y programar transferencias de datos entre la memoria principal y secundaria y recompilar programas para cada cambio de tamaño de la memoria principal. [15] El primer Atlas se encargó en 1962, pero en 1959 se habían desarrollado prototipos funcionales de paginación. [8] : 2  [16] [17] En 1961, Burroughs Corporation lanzó de forma independiente la primera computadora comercial con memoria virtual, la B5000 . , con segmentación en lugar de paginación. [18] [19]

IBM desarrolló [c] el concepto de hipervisores en sus CP-40 y CP-67 , y en 1972 lo proporcionó para el S/370 como Virtual Machine Facility/370. [21] IBM introdujo la instrucción Iniciar ejecución interpretativa ( SIE ) como parte de 370-XA en el 3081 y las versiones VM/XA de VM para explotarla.

Antes de que se pudiera implementar la memoria virtual en los sistemas operativos convencionales, era necesario abordar muchos problemas. La traducción dinámica de direcciones requería hardware especializado costoso y difícil de construir; Las implementaciones iniciales ralentizaron ligeramente el acceso a la memoria. [8] Existía la preocupación de que los nuevos algoritmos para todo el sistema que utilizaban almacenamiento secundario fueran menos efectivos que los algoritmos específicos de aplicaciones utilizados anteriormente. En 1969, el debate sobre la memoria virtual para computadoras comerciales había terminado; [8] un equipo de investigación de IBM dirigido por David Sayre demostró que su sistema de superposición de memoria virtual funcionaba consistentemente mejor que los mejores sistemas controlados manualmente. [22] A lo largo de la década de 1970, la serie IBM 370 que ejecutaba sus sistemas operativos basados ​​en almacenamiento virtual proporcionó un medio para que los usuarios empresariales migraran múltiples sistemas antiguos a menos mainframes, más potentes, que habían mejorado la relación precio/rendimiento. La primera minicomputadora que introdujo la memoria virtual fue la noruega NORD-1 ; Durante la década de 1970, otras minicomputadoras implementaron memoria virtual, en particular los modelos VAX que ejecutaban VMS .

La memoria virtual se introdujo en la arquitectura x86 con el modo protegido del procesador Intel 80286 , pero su técnica de intercambio de segmentos no amplió bien a tamaños de segmentos más grandes. Intel 80386 introdujo soporte de paginación debajo de la capa de segmentación existente , lo que permite que la excepción de error de página se encadene con otras excepciones sin doble error . Sin embargo, cargar descriptores de segmento era una operación costosa, lo que hacía que los diseñadores de sistemas operativos dependieran estrictamente de la paginación en lugar de una combinación de paginación y segmentación. [ cita necesaria ]

Memoria virtual paginada

Casi todas las implementaciones actuales de memoria virtual dividen un espacio de direcciones virtuales en páginas , bloques de direcciones de memoria virtual contiguas. Las páginas de los sistemas [d] contemporáneos suelen tener un tamaño de al menos 4 kilobytes ; Los sistemas con grandes rangos de direcciones virtuales o cantidades de memoria real generalmente utilizan tamaños de página más grandes. [23]

Tablas de páginas

Las tablas de páginas se utilizan para traducir las direcciones virtuales vistas por la aplicación en direcciones físicas utilizadas por el hardware para procesar instrucciones; [24] El hardware que maneja esta traducción específica a menudo se conoce como unidad de administración de memoria . Cada entrada en la tabla de páginas contiene una bandera que indica si la página correspondiente está en la memoria real o no. Si está en la memoria real, la entrada de la tabla de páginas contendrá la dirección de la memoria real en la que está almacenada la página. Cuando el hardware hace una referencia a una página, si la entrada de la tabla de páginas para la página indica que no está actualmente en la memoria real, el hardware genera una excepción de falla de página , invocando el componente supervisor de paginación del sistema operativo .

Los sistemas pueden tener, por ejemplo, una tabla de páginas para todo el sistema, tablas de páginas separadas para cada espacio de direcciones o proceso, tablas de páginas separadas para cada segmento; de manera similar, los sistemas pueden tener, por ejemplo, ninguna tabla de segmentos, una tabla de segmentos para todo el sistema, tablas de segmentos separadas para cada espacio de direcciones o proceso, tablas de segmentos separadas para cada región en un árbol [e] de tablas de regiones para cada espacio de direcciones o proceso. Si solo hay una tabla de páginas, diferentes aplicaciones que se ejecutan al mismo tiempo utilizan diferentes partes de un único rango de direcciones virtuales. Si hay varias tablas de páginas o segmentos, hay múltiples espacios de direcciones virtuales y aplicaciones simultáneas con tablas de páginas separadas redirigen a diferentes direcciones reales.

Algunos sistemas anteriores con tamaños de memoria real más pequeños, como el SDS 940 , usaban registros de páginas en lugar de tablas de páginas en la memoria para la traducción de direcciones.

supervisor de paginación

Esta parte del sistema operativo crea y administra tablas de páginas y listas de marcos de páginas libres. Para garantizar que habrá suficientes marcos de página libres para resolver rápidamente los errores de página, el sistema puede robar periódicamente los marcos de página asignados, utilizando un algoritmo de reemplazo de página , por ejemplo, un algoritmo menos utilizado recientemente (LRU). Los marcos de página robados que se han modificado se vuelven a escribir en el almacenamiento auxiliar antes de agregarlos a la cola libre. En algunos sistemas, el supervisor de paginación también es responsable de administrar los registros de traducción que no se cargan automáticamente desde las tablas de páginas.

Normalmente, un error de página que no se puede resolver provoca una finalización anormal de la aplicación. Sin embargo, algunos sistemas permiten que la aplicación tenga controladores de excepciones para dichos errores. El supervisor de búsqueda puede manejar una excepción de error de página de varias maneras diferentes, dependiendo de los detalles:

En la mayoría de los casos, habrá una actualización de la tabla de páginas, posiblemente seguida de una purga del búfer de búsqueda de traducción (TLB), y el sistema reinicia la instrucción que causa la excepción.

Si la cola de marcos de página libres está vacía, entonces el supervisor de paginación debe liberar un marco de página utilizando el mismo algoritmo de reemplazo de páginas para el robo de páginas.

Páginas fijadas

Los sistemas operativos tienen áreas de memoria fijadas (nunca intercambiadas al almacenamiento secundario). Otros términos utilizados son páginas bloqueadas , fijas o cableadas . Por ejemplo, los mecanismos de interrupción se basan en una serie de punteros a sus controladores, como la finalización de E/S y el error de página . Si las páginas que contienen estos punteros o el código que invocan fueran paginables, el manejo de interrupciones sería mucho más complejo y consumiría mucho más tiempo, particularmente en el caso de interrupciones por fallas de página. Por lo tanto, alguna parte de las estructuras de la tabla de páginas no es paginable.

Algunas páginas pueden estar fijadas por períodos cortos de tiempo, otras pueden estar fijadas durante largos períodos de tiempo y otras pueden necesitar ser fijadas permanentemente. Por ejemplo:

En los sistemas operativos de IBM para System/370 y sistemas sucesores, el término es "fijo" y dichas páginas pueden ser fijas a largo plazo, a corto plazo o no fijas (es decir, paginables). Las estructuras de control del sistema son a menudo fijas a largo plazo (medidas en tiempo de reloj de pared, es decir, tiempo medido en segundos, en lugar de tiempo medido en fracciones de segundo), mientras que los buffers de E/S suelen ser fijos a corto plazo (generalmente medidos en significativamente). menos que el tiempo del reloj de pared, posiblemente durante decenas de milisegundos). De hecho, el sistema operativo tiene una función especial para "reparar rápidamente" estos buffers de datos fijos a corto plazo (la reparación se realiza sin recurrir a una instrucción de llamada de supervisor que requiere mucho tiempo ).

Multics utilizó el término "cableado". OpenVMS y Windows se refieren a las páginas temporalmente no paginables (como en el caso de los buffers de E/S) como "bloqueadas" y simplemente "no paginables" para aquellas que nunca son paginables. La especificación única de UNIX también utiliza el término "bloqueado" en la especificación para , al igual que las páginas de manual en muchos sistemas similares a Unix .mlock()mlock()

Operación virtual-real

En OS/VS1 y sistemas operativos similares, algunas partes de la memoria del sistema se administran en modo "virtual-real", llamado "V=R". En este modo cada dirección virtual corresponde a la misma dirección real. Este modo se utiliza para mecanismos de interrupción , para el supervisor de paginación y tablas de páginas en sistemas más antiguos, y para programas de aplicación que utilizan administración de E/S no estándar. Por ejemplo, z/OS de IBM tiene 3 modos (virtual-virtual, virtual-real y virtual-fijo). [ cita necesaria ]

Paliza

Cuando se utilizan paginación y robo de páginas , puede ocurrir un problema llamado " thrashing ", en el que la computadora pasa una cantidad excesiva de tiempo transfiriendo páginas hacia y desde un almacén de respaldo, lo que ralentiza el trabajo útil. El conjunto de trabajo de una tarea es el conjunto mínimo de páginas que deben estar en la memoria para que pueda realizar un progreso útil. La paliza ocurre cuando no hay suficiente memoria disponible para almacenar los conjuntos de trabajo de todos los programas activos. Agregar memoria real es la respuesta más sencilla, pero mejorar el diseño de las aplicaciones, la programación y el uso de la memoria puede ayudar. Otra solución es reducir la cantidad de tareas activas en el sistema. Esto reduce la demanda de memoria real al intercambiar todo el conjunto de trabajo de uno o más procesos.

Una caída del sistema suele ser el resultado de un aumento repentino en la demanda de páginas de un pequeño número de programas en ejecución. Swap-token [26] es un mecanismo de protección contra golpes ligero y dinámico. La idea básica es establecer un token en el sistema, que se entrega aleatoriamente a un proceso que tiene fallas de página cuando ocurre la paliza. El proceso que tiene el token tiene el privilegio de asignar más páginas de memoria física para construir su conjunto de trabajo, que se espera que finalice rápidamente su ejecución y libere las páginas de memoria a otros procesos. Se utiliza una marca de tiempo para entregar el token uno por uno. La primera versión del token de intercambio se implementó en Linux 2.6. [27] La ​​segunda versión se llama token de intercambio preferente y también está en Linux 2.6. [27] En esta implementación actualizada de token de intercambio, se establece un contador de prioridad para cada proceso para rastrear el número de páginas de intercambio. El token siempre se otorga al proceso con alta prioridad, que tiene una gran cantidad de páginas de intercambio. La duración de la marca de tiempo no es constante, sino que está determinada por la prioridad: cuanto mayor sea el número de páginas de intercambio de un proceso, más larga será la marca de tiempo.

Memoria virtual segmentada

Algunos sistemas, como el Burroughs B5500, [28] utilizan segmentación en lugar de paginación, dividiendo espacios de direcciones virtuales en segmentos de longitud variable. Una dirección virtual aquí consta de un número de segmento y un desplazamiento dentro del segmento. El Intel 80286 admite un esquema de segmentación similar como opción, pero rara vez se utiliza. La segmentación y la paginación se pueden utilizar juntas dividiendo cada segmento en páginas; Los sistemas con esta estructura de memoria, como Multics e IBM System/38 , suelen tener predominancia de paginación y la segmentación proporciona protección de la memoria. [29] [30] [31]

En los procesadores Intel 80386 y posteriores IA-32 , los segmentos residen en un espacio de direcciones paginado lineal de 32 bits . Los segmentos se pueden mover dentro y fuera de ese espacio; las páginas pueden "paginarse" dentro y fuera de la memoria principal, proporcionando dos niveles de memoria virtual; pocos sistemas operativos, si es que hay alguno, lo hacen y en su lugar utilizan únicamente paginación. Las primeras soluciones de virtualización x86 sin hardware combinaban paginación y segmentación porque la paginación x86 ofrece sólo dos dominios de protección, mientras que un VMM, un sistema operativo invitado o una pila de aplicaciones invitadas necesitan tres. [32] : 22  La diferencia entre los sistemas de paginación y de segmentación no se trata solo de la división de la memoria; la segmentación es visible para los procesos del usuario, como parte de la semántica del modelo de memoria. Por lo tanto, en lugar de que la memoria parezca un único espacio grande, está estructurada en múltiples espacios.

Esta diferencia tiene importantes consecuencias; un segmento no es una página con longitud variable o una forma sencilla de alargar el espacio de direcciones. La segmentación que puede proporcionar un modelo de memoria de un solo nivel en el que no hay diferenciación entre la memoria del proceso y el sistema de archivos consiste únicamente en una lista de segmentos (archivos) asignados al espacio de direcciones potencial del proceso. [33]

Esto no es lo mismo que los mecanismos proporcionados por llamadas como mmap y MapViewOfFile de Win32 , porque los punteros entre archivos no funcionan cuando se asignan archivos a lugares semiarbitrarios. En Multics, un archivo (o un segmento de un archivo de múltiples segmentos) se asigna a un segmento en el espacio de direcciones, por lo que los archivos siempre se asignan en un límite de segmento. La sección de enlace de un archivo puede contener punteros para los cuales un intento de cargar el puntero en un registro o hacer una referencia indirecta a través de él provoca una trampa. El puntero no resuelto contiene una indicación del nombre del segmento al que hace referencia el puntero y un desplazamiento dentro del segmento; el controlador de la trampa asigna el segmento al espacio de direcciones, coloca el número del segmento en el puntero, cambia el campo de etiqueta en el puntero para que ya no cause una trampa y regresa al código donde ocurrió la trampa, volviendo a ejecutar la instrucción que causó la trampa. [34] Esto elimina completamente la necesidad de un vinculador [8] y funciona cuando diferentes procesos asignan el mismo archivo a diferentes lugares en sus espacios de direcciones privados. [35]

Intercambio de espacio de direcciones

Algunos sistemas operativos permiten intercambiar espacios de direcciones completos , además de las funciones que tienen para paginación y segmentación. Cuando esto ocurre, el sistema operativo escribe esas páginas y segmentos actualmente en la memoria real para intercambiar archivos. En un intercambio, el sistema operativo vuelve a leer los datos de los archivos de intercambio, pero no lee automáticamente las páginas que se habían paginado en el momento de la operación de intercambio.

MVS de IBM , desde OS/VS2 versión 2 hasta z/OS , permite marcar un espacio de direcciones como no intercambiable; Al hacerlo, no se fija ninguna página en el espacio de direcciones. Esto se puede hacer durante la duración de un trabajo ingresando el nombre de un programa principal [36] elegible en la tabla de propiedades del programa con una bandera no intercambiable. Además, el código privilegiado puede hacer temporalmente que un espacio de direcciones no sea intercambiable mediante una instrucción de llamada de supervisor (SVC) SYSEVENT; ciertos cambios [37] en las propiedades del espacio de direcciones requieren que el sistema operativo lo intercambie y luego lo vuelva a ingresar, utilizando SYSEVENT TRANSWAP. [38]

El intercambio no requiere necesariamente hardware de administración de memoria si, por ejemplo, se intercambian varios trabajos dentro y fuera de la misma área de almacenamiento.

Ver también

Notas

  1. ^ Los primeros sistemas utilizaban tambores ; Los sistemas contemporáneos utilizan discos o memoria de estado sólido.
  2. ^ IBM utiliza el término almacenamiento virtual en sistemas operativos de mainframe. Este uso se ejecuta desde TSS [1] en 360/67 hasta z/OS [2] en z/Architecture .
  3. ^ IBM había utilizado anteriormente el término hipervisor para 360/65 , [20] pero eso no involucraba memoria virtual.
  4. ^ IBM DOS/VS , OS/VS1 y DOS/VS solo admitían páginas de 2 KB.
  5. ^ En IBM Z [25] hay un árbol de regiones de 3 niveles para cada espacio de direcciones.

Referencias

  1. ^ "COMPONENTES DEL SISTEMA: Reubicación dinámica" (PDF) . Resumen técnico preliminar del sistema de tiempo compartido System/360 modelo 67 (PDF) . IBM. 1966. pág. 21. C20-1647-0.
  2. ^ "BCP (Programa de control de base)" (PDF) . z/OS Versión 2 Versión 4 Guía de introducción y lanzamiento de z/OS (PDF) . IBM. 22 de septiembre de 2020. p. 3. GA32-0887-40.
  3. ^ Bhattacharjee, Abhishek; Lustig, Daniel (2017). Soporte arquitectónico y de sistema operativo para memoria virtual. Editores Morgan y Claypool. pag. 1.ISBN _ 9781627056021. Consultado el 16 de octubre de 2017 .
  4. ^ Haldar, Sibsankar; Aravind, Alex Alagarsamy (2010). Sistemas operativos. Educación Pearson India. pag. 269.ISBN _ 978-8131730225. Consultado el 16 de octubre de 2017 .
  5. ^ Zhou, Xiangrong; Petrov, Peter (1 de diciembre de 2008). "Traducción directa de direcciones para memoria virtual en sistemas integrados energéticamente eficientes". Transacciones ACM en sistemas informáticos integrados . 8 (1): 1–31. doi :10.1145/1457246.1457251. ISSN  1539-9087. S2CID  18156695.
  6. ^ "Paginación anidada AMD-V ™" (PDF) . AMD . Consultado el 28 de abril de 2015 .
  7. ^ "Historial de versiones de Windows". Microsoft. 23 de septiembre de 2011. Archivado desde el original el 8 de enero de 2015 . Consultado el 9 de marzo de 2015 .
  8. ^ ABCDE Denning, Peter (1997). "Antes de que la memoria fuera virtual" (PDF) . Al principio: recuerdos de los pioneros del software .
  9. ^ Jessen, Elke (2004). "Origen del concepto de memoria virtual". Anales IEEE de la historia de la informática . 26 (4): 71–72.
  10. ^ Jessen, E. (1996). "Die Entwicklung des Virtullen Speichers". Informatik-Spektrum (en alemán). 19 (4): 216–219. doi :10.1007/s002870050034. ISSN  0170-6012. S2CID  11514875.
  11. ^ Jessen (2004).
  12. ^ Liptay, JS (1968), "Aspectos estructurales del sistema/360 modelo 85: el caché", IBM Systems Journal , 7 : 15–21, doi :10.1147/sj.71.0015
  13. ^ Kilburn, T.; Edwards, DBG; Lanigan, MJ; Sumner, FH (1962), "Sistema de almacenamiento de un nivel", IRE Trans EC-11 (2): 223–235, doi :10.1109/TEC.1962.5219356
  14. ^ "Ferranti Atlas 1 y 2 - Arquitectura de sistemas" (PDF) . 12 de noviembre de 2009.
  15. ^ Denning, Peter J. (1 de enero de 2003). "Memoria virtual". Enciclopedia de Ciencias de la Computación . John Wiley e hijos. págs. 1832-1835. ISBN 978-0-470-86412-8. Consultado el 10 de enero de 2023 .
  16. ^ Creasy, RJ (septiembre de 1981). "El origen del sistema de tiempo compartido VM/370" (PDF) . Revista IBM de investigación y desarrollo . 25 (5): 486. doi :10.1147/rd.255.0483.
  17. ^ "El Atlas". Archivado desde el original el 6 de octubre de 2014.{{cite web}}: Mantenimiento CS1: URL no apta ( enlace )
  18. ^ Joyner, Ian. "Burroughs". Archivado desde el original el 10 de mayo de 2017.
  19. ^ Cragón, Harvey G. (1996). Sistemas de memoria y procesadores canalizados. Editores Jones y Bartlett. pag. 113.ISBN _ 978-0-86720-474-2.
  20. ^ Gary R. Allred (mayo de 1971). Emulación integrada System/370 bajo OS y DOS (PDF) . Conferencia conjunta de informática de primavera de 1971 . vol. 38. Prensa AFIPS. pag. 164. doi : 10.1109/AFIPS.1971.58 . Consultado el 12 de junio de 2022 .
  21. ^ z/VM basado en IBM Virtualization Technology Información general Versión 4 Versión 3.0 (PDF) . 12 de abril de 2002. GC24-5991-04.
  22. ^ Sayre, D. (1969). "¿Es el" plegado "automático de programas lo suficientemente eficiente como para desplazar al manual?". Comunicaciones de la ACM . 12 (12): 656–660. doi :10.1145/363626.363629. S2CID  15655353.
  23. ^ Quintero, Dino; et al. (1 de mayo de 2013). Guía de rendimiento de IBM Power Systems: implementación y optimización. Corporación IBM. pag. 138.ISBN _ 978-0738437668. Consultado el 18 de julio de 2017 .
  24. ^ Sharma, DP (2009). Fundación de los Sistemas Operativos. Libros de Excel India. pag. 62.ISBN _ 978-81-7446-626-6. Consultado el 18 de julio de 2017 .
  25. ^ "Tablas de traducción" (PDF) . z/Arquitectura - Principios de funcionamiento (PDF) (Decimocuarta ed.). IBM . Mayo de 2022. págs. 3-46–3-53. SA22-7832-13 . Consultado el 18 de enero de 2023 .
  26. ^ Canción Jiang; Xiao Dong Zhang (2005). "LRU ordenado por token: una política eficaz de reemplazo de páginas y su implementación en sistemas Linux". Evaluación del desempeño . 60 (1–4): 5–29. doi :10.1016/j.peva.2004.10.002. ISSN  0166-5316.
  27. ^ ab "Swap Token minimiza eficazmente los efectos del sistema y se adopta en los núcleos del sistema operativo".
  28. ^ Burroughs (1964). Manual de referencia del sistema de procesamiento de información Burroughs B5500 (PDF) . Corporación Burroughs . 1021326 . Consultado el 28 de noviembre de 2013 .
  29. ^ Manual del sistema GE-645 (PDF) . Enero de 1968. págs. 21–30 . Consultado el 25 de febrero de 2022 .
  30. ^ Corbató, FJ ; Vyssotsky, VA "Introducción y descripción general del sistema Multics" . Consultado el 13 de noviembre de 2007 .
  31. ^ Glaser, Edward L.; Couleur, John F. & Oliver, GA "Diseño de sistema de una computadora para aplicaciones de tiempo compartido".
  32. ^ Smith, JE; Uhlig, R. (14 de agosto de 2005). «Máquinas Virtuales: Arquitecturas, Implementaciones y Aplicaciones, HOTCHIPS 17, Tutorial 1, parte 2» (PDF) .
  33. ^ Bensoussan, André; Clingen, Charles T.; Daley, Robert C. (mayo de 1972). "La Memoria Virtual Multics: Conceptos y Diseño". Comunicaciones de la ACM . 15 (5): 308–318. CiteSeerX 10.1.1.10.6731 . doi :10.1145/355602.361306. S2CID  6434322. 
  34. ^ "Entorno de ejecución multics". Multicians.org . Consultado el 9 de octubre de 2016 .
  35. ^ Organick, Elliott I. (1972). El sistema Multics: un examen de su estructura . Prensa del MIT. ISBN 978-0-262-15012-5.
  36. ^ El requisito más importante es que el programa esté autorizado por la APF.
  37. ^ por ejemplo, solicitar el uso de la memoria preferida
  38. ^ "Intercambio de controles (DONTSWAP, OKSWAP, TRANSWAP)". Centro de conocimiento de IBM . Programación z/OS MVS: Referencia de servicios de ensamblador autorizado SET-WTO SA23-1375-00. 1990–2014 . Consultado el 9 de octubre de 2016 .

Otras lecturas

enlaces externos