El almacenamiento de un solo nivel ( SLS ) o memoria de un solo nivel es un término de almacenamiento informático que ha tenido dos significados. Los dos significados están relacionados en que, en ambos casos, las páginas de memoria pueden estar en el almacenamiento primario ( RAM ) o en el almacenamiento secundario (disco), y que la ubicación física de una página no es importante para un proceso.
El término originalmente se refería a lo que ahora se suele llamar memoria virtual , que fue introducida en 1962 por el sistema Atlas en la Universidad de Manchester . [1]
En el uso moderno, el término suele referirse a la organización de un sistema informático en el que no hay archivos , sino solo objetos persistentes (a veces llamados segmentos ), que se asignan a los espacios de direcciones de los procesos (que consisten enteramente en una colección de objetos asignados). Se considera que todo el almacenamiento de la computadora es un único plano bidimensional de direcciones (segmento y dirección dentro del segmento).
El concepto de objeto persistente fue introducido por primera vez por Multics a mediados de la década de 1960, en un proyecto compartido por el MIT , General Electric y Bell Labs . [2] También se implementó como memoria virtual, con la implementación física real que incluía varios niveles de tipos de almacenamiento. (Multics, por ejemplo, originalmente tenía tres niveles: memoria principal, un tambor de alta velocidad y discos).
IBM posee patentes para el almacenamiento de un solo nivel tal como se implementó en el sistema operativo IBM i en IBM Power Systems y sus predecesores desde el System/38 que se lanzó en 1978. [3] [4]
En los primeros sistemas, existía una clara distinción entre la memoria principal y cualquier almacenamiento secundario. Para procesar datos, los programas utilizaban código explícito para leer datos del almacenamiento secundario y colocarlos en la memoria principal, manipularlos en la memoria principal y luego utilizar más código para volver a escribirlos en el almacenamiento secundario. Esta distinción se mantiene hasta el día de hoy en la mayoría de los sistemas operativos (OS).
En la década de 1960, se introdujeron el tiempo compartido y la multiprogramación . En estos sistemas, más de un programa podía estar ejecutándose al mismo tiempo y cada uno deseaba tener su propia memoria con la que trabajar. Esto dio lugar a sistemas a veces complejos en los que los programas describían las cantidades mínimas y deseadas de memoria que necesitaban para funcionar, y el sistema operativo dividía la memoria principal en bloques, normalmente conocidos como segmentos . Como ahora había potencialmente muchos programas ejecutándose al mismo tiempo, cada programa individual podía tener menos memoria con la que trabajar de la que deseaba.
Los intentos de solucionar este problema llevaron al desarrollo de la memoria virtual (VM). Los sistemas VM dividen la memoria principal en una serie de segmentos de tamaño fijo, o "páginas", y los asignan a los programas según la demanda. Los programas no saben que existe el sistema VM, simplemente piden memoria y se les concede o se les niega, como antes. La diferencia es que cada programa no estaría limitado a una fracción de la memoria principal reservada para él, sino que se le concedería acceso a toda la memoria, una memoria principal "virtual" fija que normalmente era mucho más grande que la memoria física real. A medida que los programas utilizaban la memoria física, y esta finalmente se agotaba, el sistema VM examinaba las páginas en busca de datos que no se necesitaban en ese momento y los escribía en un almacenamiento secundario. Esto se conocía como "paginación". Cuando un programa intentaba acceder a valores en la memoria que habían sido paginados, el sistema VM intervenía una vez más, escribía otra página de memoria y cargaba de nuevo la solicitada. Esto es invisible para el programa, para él, parece que hay una única memoria grande y sus datos siempre están disponibles. Los programas escritos en un sistema de VM son similares a los de las máquinas anteriores. Para almacenar datos de forma permanente, el programa aún tenía que tener código para leer y escribir datos hacia y desde un almacenamiento secundario, normalmente un sistema de archivos , pero a veces también un motor de base de datos .
Un almacenamiento de un solo nivel cambia este modelo al ampliar la gestión de VM, que pasa de un simple archivo de paginación a un nuevo concepto en el que la "memoria principal" es todo el sistema de almacenamiento secundario. En este modelo no es necesario un sistema de archivos separado de la memoria; los programas simplemente asignan memoria de forma normal y esa memoria se escribe de forma invisible en el almacenamiento y se recupera según sea necesario. El programa ya no necesita código para mover datos hacia y desde el almacenamiento secundario. El programa puede, por ejemplo, producir una serie de tarjetas de visita en la memoria, que se escribirán de forma invisible. Cuando el programa se vuelva a cargar en el futuro, esos datos reaparecerán inmediatamente en su memoria. Y como los programas también forman parte de esta misma memoria unificada, reiniciar una máquina o iniciar sesión como usuario hace que todos esos programas y sus datos reaparezcan.
El sistema operativo asume la responsabilidad de localizar páginas y ponerlas a disposición para su procesamiento. Si una página está en el almacenamiento primario, está disponible inmediatamente. Si una página está en el disco, se produce un fallo de página y el sistema operativo la lleva al almacenamiento primario. Los procesos no realizan ninguna operación de E/S explícita en el almacenamiento secundario: en su lugar, las lecturas del almacenamiento secundario se realizan como resultado de los fallos de página; las escrituras en el almacenamiento secundario se realizan cuando las páginas que se han modificado desde que se leyeron del almacenamiento secundario al almacenamiento primario se vuelven a escribir en su ubicación en el almacenamiento secundario.
El diseño de IBM del almacenamiento de un solo nivel fue concebido y desarrollado originalmente por Frank Soltis y Glenn Henry a fines de la década de 1970 como una forma de construir una implementación de transición hacia computadoras con memoria de estado sólido al 100% . La idea en ese momento era que las unidades de disco se volverían obsoletas y serían reemplazadas por completo con alguna forma de memoria de estado sólido. System/38 fue diseñado para ser independiente del tipo de memoria de hardware utilizada para el almacenamiento secundario. Sin embargo, esto no ha sucedido porque, si bien la memoria de estado sólido se ha vuelto exponencialmente más barata, las unidades de disco también se han vuelto igualmente más baratas; por lo tanto, la relación de precios a favor de las unidades de disco continúa: capacidades mucho mayores que la memoria de estado sólido, mucho más lento de acceder y mucho menos costoso.
En System/38 e IBM i, a todos los datos almacenados se les asigna una dirección, a la que se puede acceder mediante instrucciones del procesador, en la memoria virtual , y se hace referencia a ellos mediante esa dirección, independientemente de si se encuentran en la memoria física o no. Si los datos a los que hace referencia esa dirección no se encuentran en la memoria física, se produce un error de página . El error de página es manejado por un software de bajo nivel que lee la página en un marco de página disponible en el almacenamiento primario. [5] [6]
Con la implementación del almacenamiento de un solo nivel en IBM i, los errores de página se dividen en dos categorías: errores de base de datos y errores que no son de base de datos. Los errores de base de datos ocurren cuando una página asociada con un objeto de base de datos relacional, como una tabla, una vista o un índice, no se encuentra actualmente en el almacenamiento primario. Los errores que no son de base de datos ocurren cuando cualquier otro tipo de objeto no se encuentra actualmente en el almacenamiento primario.