b'\n_START_ARTICLE_\nMemoria virtual\n_START_PARAGRAPH_\nEn inform\xc3\xa1tica, la memoria virtual es una t\xc3\xa9cnica de gesti\xc3\xb3n de la memoria que se encarga de que el sistema operativo disponga, tanto para el software de usuario como para s\xc3\xad mismo, de mayor cantidad de memoria que est\xc3\xa9 disponible f\xc3\xadsicamente. La mayor\xc3\xada de los ordenadores tienen cuatro tipos de memoria: registros en la CPU, la memoria cach\xc3\xa9 (tanto dentro como fuera del CPU), la memoria RAM y el disco duro. En ese orden, van de menor capacidad y mayor velocidad a mayor capacidad y menor velocidad._NEWLINE_Muchas aplicaciones requieren acceso a m\xc3\xa1s informaci\xc3\xb3n (c\xc3\xb3digo y datos) que la que se puede mantener en memoria f\xc3\xadsica. Esto es as\xc3\xad sobre todo cuando el sistema operativo permite m\xc3\xbaltiples procesos y aplicaciones ejecut\xc3\xa1ndose simult\xc3\xa1neamente. Una soluci\xc3\xb3n al problema de necesitar mayor cantidad de memoria de la que se posee consiste en que las aplicaciones mantengan parte de su informaci\xc3\xb3n en disco, movi\xc3\xa9ndola a la memoria principal cuando sea necesario. Hay varias formas de hacer esto._NEWLINE_Una opci\xc3\xb3n es que la aplicaci\xc3\xb3n misma sea responsable de decidir qu\xc3\xa9 informaci\xc3\xb3n ser\xc3\xa1 guardada en cada sitio (segmentaci\xc3\xb3n), y de traerla y llevarla. La desventaja de esto, adem\xc3\xa1s de la dificultad en el dise\xc3\xb1o e implementaci\xc3\xb3n del programa, es que es muy probable que los intereses sobre la memoria de dos o varios programas generen conflictos entre s\xc3\xad: cada programador podr\xc3\xada realizar su dise\xc3\xb1o teniendo en cuenta que es el \xc3\xbanico programa ejecut\xc3\xa1ndose en el sistema._NEWLINE_La alternativa es usar memoria virtual, donde la combinaci\xc3\xb3n entre hardware especial y el sistema operativo hace uso de la memoria principal y la secundaria para hacer parecer que el ordenador tiene mucha m\xc3\xa1s memoria principal (RAM) que la que realmente posee. Este m\xc3\xa9todo es invisible a los procesos._NEWLINE_La cantidad de memoria m\xc3\xa1xima que se puede hacer ver que hay tiene que ver con las caracter\xc3\xadsticas del procesador. Por ejemplo, en un sistema de 32 bits, el m\xc3\xa1ximo es 2\xc2\xb3\xc2\xb2, lo que da 4096 Megabytes (4 Gigabytes)._NEWLINE_Todo esto hace el trabajo del programador de aplicaciones mucho m\xc3\xa1s f\xc3\xa1cil, al poder ignorar completamente la necesidad de mover datos entre los distintos espacios de memoria._NEWLINE_Aunque la memoria virtual podr\xc3\xada estar implementada por el software del sistema operativo, en la pr\xc3\xa1ctica casi siempre se usa una combinaci\xc3\xb3n de hardware y software, dado el esfuerzo extra que implicar\xc3\xada para el procesador.\n_START_SECTION_\nDetalles\n_START_PARAGRAPH_\nLa traducci\xc3\xb3n de las direcciones virtuales a reales es implementada por una Unidad de Manejo de Memoria (MMU)._NEWLINE_El sistema operativo es el responsable de decidir qu\xc3\xa9 partes de la memoria del programa es mantenida en memoria f\xc3\xadsica. Adem\xc3\xa1s mantiene las tablas de traducci\xc3\xb3n de direcciones (si se usa paginaci\xc3\xb3n la tabla se denomina tabla de paginaci\xc3\xb3n), que proveen las relaciones entre direcciones virtuales y f\xc3\xadsicas, para uso de la MMU. Finalmente, cuando una excepci\xc3\xb3n de memoria virtual ocurre, el sistema operativo es responsable de ubicar un \xc3\xa1rea de memoria f\xc3\xadsica para guardar la informaci\xc3\xb3n faltante, trayendo la informaci\xc3\xb3n desde el disco, actualizando las tablas de traducci\xc3\xb3n y finalmente continuando la ejecuci\xc3\xb3n del programa que dio la excepci\xc3\xb3n de memoria virtual desde la instrucci\xc3\xb3n que caus\xc3\xb3 el fallo._NEWLINE_En la mayor\xc3\xada de las computadoras, las tablas de traducci\xc3\xb3n de direcciones de memoria se encuentran en memoria f\xc3\xadsica. Esto implica que una referencia a una direcci\xc3\xb3n virtual de memoria necesitar\xc3\xa1 una o dos referencias para encontrar la entrada en la tabla de traducci\xc3\xb3n, y una m\xc3\xa1s para completar el acceso a esa direcci\xc3\xb3n._NEWLINE_Para acelerar el desempe\xc3\xb1o de este sistema, la mayor\xc3\xada de las Unidades Centrales de Proceso (CPU) incluyen una MMU en el mismo chip, y mantienen una tabla de las traducciones de direcciones virtuales a reales usadas recientemente, llamada Translation Lookaside Buffer (TLB). El uso de este buffer hace que no se requieran referencias de memoria adicionales, por lo que se ahorra tiempo al traducir. _NEWLINE_En algunos procesadores, esto es realizado enteramente por el hardware. En otros, se necesita de la asistencia del sistema operativo: se levanta una excepci\xc3\xb3n, y en ella el sistema operativo reemplaza una de las entradas del TLB con una entrada de la tabla de traducci\xc3\xb3n, y la instrucci\xc3\xb3n que hizo la referencia original a memoria es reejecutada._NEWLINE_El hardware que tiene soporte para memoria virtual, la mayor\xc3\xada de la veces tambi\xc3\xa9n permite protecci\xc3\xb3n de memoria. La MMU puede tener la habilidad de variar su forma de operaci\xc3\xb3n de acuerdo al tipo de referencia a memoria (para leer, escribir, o ejecutar), as\xc3\xad como el modo en que se encontraba el CPU en el momento de hacer la referencia a memoria. Esto permite al sistema operativo proteger su propio c\xc3\xb3digo y datos (como las tablas de traducci\xc3\xb3n usadas para memoria virtual) de corromperse por una aplicaci\xc3\xb3n, y de proteger a las aplicaciones que podr\xc3\xadan causar problemas entre s\xc3\xad.\n_START_SECTION_\nPaginaci\xc3\xb3n y memoria virtual\n_START_PARAGRAPH_\nLa memoria virtual usualmente (pero no necesariamente) es implementada usando paginaci\xc3\xb3n. En paginaci\xc3\xb3n, los bits menos significativos de la direcci\xc3\xb3n de memoria virtual son preservados y usados directamente como los bits de orden menos significativos de la direcci\xc3\xb3n de memoria f\xc3\xadsica. Los bits m\xc3\xa1s significativos son usados como una clave en una o m\xc3\xa1s tablas de traducci\xc3\xb3n de direcciones (llamadas tablas de paginaci\xc3\xb3n), para encontrar la parte restante de la direcci\xc3\xb3n f\xc3\xadsica buscada.'