Files-11 es el sistema de archivos utilizado en los sistemas operativos RSX-11 y OpenVMS de Digital Equipment Corporation . Admite E/S orientada a registros , acceso remoto a la red y control de versiones de archivos . La capa ODS-1 original es un sistema de archivos plano ; la versión ODS-2 es un sistema de archivos jerárquico , con soporte para listas de control de acceso .
Files-11 es similar, pero significativamente más avanzado, que los sistemas de archivos utilizados en sistemas operativos anteriores de Digital Equipment Corporation, como TOPS-20 y RSTS/E .
El sistema de archivos nativo OpenVMS desciende de los antiguos sistemas operativos DEC y es similar en muchos aspectos, ya que ambos fueron diseñados por Dave Cutler . Una diferencia importante es la disposición de los directorios. Todos estos sistemas de archivos proporcionaban algún tipo de estructura de directorios no jerárquica rudimentaria, generalmente basada en la asignación de un directorio por cuenta de usuario. En RSTS/E, cada cuenta de usuario estaba representada por dos números, un par, y tenía un directorio asociado. Los archivos especiales del sistema, como los ejecutables de programas y el propio sistema operativo, se almacenaban en el directorio de una cuenta de sistema reservada.[project,programmer]
Si bien esto era adecuado para los sistemas PDP-11 , que poseían una capacidad de almacenamiento permanente limitada, los sistemas VAX con discos duros mucho más grandes requerían un método más flexible de almacenamiento de archivos: en particular el diseño jerárquico de directorios, la mejora más notable en ODS-2.
"Archivos-11" es el término general para cinco sistemas de archivos separados, conocidos como niveles de estructura en disco (ODS) 1 a 5.
ODS-1 es el sistema de archivos plano utilizado por el sistema operativo RSX-11, compatible con sistemas VMS más antiguos para compatibilidad con RSX, pero nunca utilizado para soportar VMS en sí; ha sido reemplazado en gran medida por ODS-2 y ODS-5.
ODS-2 es el sistema de archivos VMS original. En comparación con ODS-1, es un sistema de archivos jerárquico .
Aunque rara vez se hace referencia a ellos por sus designaciones de nivel ODS, ODS-3 y ODS-4 son el soporte de Files-11 para los sistemas de archivos CD-ROM ISO 9660 y High Sierra Format , respectivamente.
ODS-5 es una versión extendida de ODS-2 disponible en plataformas Alpha , IA-64 y x86-64 que agrega compatibilidad con nombres de archivo que conservan mayúsculas y minúsculas con caracteres que no sean ASCII y mejoras en la compatibilidad con directorios jerárquicos. Originalmente, estaba destinado a servir archivos a Microsoft Windows u otros sistemas que no fueran VMS como parte del proyecto "NT Affinity", pero también se utiliza en discos de usuario y servidores de Internet .
Todos los archivos y directorios de un sistema de archivos Files-11 están contenidos dentro de uno o más directorios principales y, eventualmente, bajo el directorio raíz, el directorio de archivos maestro (ver más abajo). Por lo tanto, el sistema de archivos está organizado en una estructura de gráfico acíclico dirigido ( DAG ).
En este ejemplo ( ver a la derecha ), File 2tiene una entrada de directorio tanto en Dir 2como Dir 3; está "en" ambos directorios simultáneamente. Incluso si se elimina de uno, seguirá existiendo en el otro directorio hasta que se elimine también de allí. Esto es similar al concepto de enlaces duros en UNIX , aunque se debe tener cuidado de que el archivo no se elimine realmente en discos que no estén configurados para enlaces duros (solo disponible en discos ODS-5, y solo si el disco tiene enlaces duros habilitados).
Un sistema VMS operativo tiene acceso a uno o más discos en línea, cada uno de los cuales contiene un sistema de archivos completo e independiente. Estos pueden ser almacenamiento local o, en el caso de un clúster, almacenamiento compartido con sistemas remotos.
En una configuración de clúster OpenVMS, los discos no privados se comparten entre todos los nodos del clúster (consulte la figura 1) . En esta configuración, los dos discos del sistema son accesibles para ambos nodos a través de la red, pero el disco privado no se comparte: se monta para que lo use solo un usuario o proceso en particular en esa máquina. El acceso a los archivos en un clúster lo administra OpenVMS Distributed Lock Manager, una parte integral del sistema de archivos.
Se pueden combinar varios discos para formar un único disco lógico grande o un conjunto de volúmenes . Los discos también se pueden replicar automáticamente en conjuntos de sombras para la seguridad de los datos o un rendimiento de lectura más rápido.
Un disco se identifica por su nombre físico o (más a menudo) por un nombre lógico definido por el usuario. Por ejemplo, el dispositivo de arranque (disco del sistema) puede tener el nombre físico $3$DKA100, pero generalmente se hace referencia a él por el nombre lógico SYS$SYSDEVICE.
Los sistemas de archivos de cada disco (con excepción de ODS-1) son jerárquicos. Un nombre de archivo completamente especificado consta de un nombre de nodo, un nombre de usuario y una contraseña, un nombre de dispositivo, un directorio, un nombre de archivo, un tipo de archivo y un número de versión, en el formato:
NODE "nombre de cuenta contraseña"::dispositivo:[directorio.subdirectorio]nombre de archivo.tipo;ver
Por ejemplo, [DIR1.DIR2.DIR3]FILE.EXTse refiere a la última versión de FILE.EXT, en el disco predeterminado actual, en el directorio [DIR1.DIR2.DIR3].
DIR1es un subdirectorio del directorio de archivos maestro (MFD), o directorio raíz , y DIR2es un subdirectorio de DIR1. El MFD de un disco se identifica mediante [000000].
La mayoría de las partes del nombre de archivo se pueden omitir, en cuyo caso se toman de la especificación de archivo predeterminada actual . La especificación de archivo predeterminada reemplaza el concepto de "directorio actual" en otros sistemas operativos al proporcionar un conjunto de valores predeterminados para el nodo, el nombre del dispositivo y el directorio. Todos los procesos tienen una especificación de archivo predeterminada que incluye el nombre del disco y el directorio, y la mayoría de las rutinas del sistema de archivos VMS aceptan una especificación de archivo predeterminada que también puede incluir el tipo de archivo; el TYPEcomando, por ejemplo, tiene como valor predeterminado " .LIS" como tipo de archivo, por lo que el comando TYPE F, sin extensión, intenta abrir el archivo F.LIS.
Cada archivo tiene un número de versión, que por defecto es 1 si no hay otras versiones del mismo nombre de archivo (de lo contrario, una versión mayor que la más reciente). Cada vez que se guarda un archivo, en lugar de sobrescribir la versión existente, se crea un nuevo archivo con el mismo nombre pero con un número de versión incrementado. Las versiones antiguas se pueden eliminar explícitamente, con el comando DELETEo el PURGEcomando, u opcionalmente, las versiones antiguas de un archivo se pueden eliminar automáticamente cuando se alcanza el límite de versión del archivo (establecido por SET FILE/VERSION_LIMIT). Por lo tanto, las versiones antiguas no se sobrescriben, sino que se mantienen en el disco y se pueden recuperar en cualquier momento. El límite arquitectónico de los números de versión es 32767. El comportamiento de control de versiones se puede anular fácilmente si no se desea. En particular, los archivos que se actualizan directamente, como las bases de datos, no crean nuevas versiones a menos que se programen explícitamente.
ODS-2 está limitado a ocho niveles de subdirectorios y sólo nombres alfanuméricos en mayúsculas (más el guión bajo, el guión y el signo de dólar) de hasta 39,39 caracteres (39 para el nombre del archivo y otros 39 para la extensión). ODS-5 amplía el conjunto de caracteres a letras minúsculas y la mayoría de los demás caracteres ASCII imprimibles, así como a caracteres ISO Latin-1 y Unicode , aumenta la longitud máxima del nombre de archivo y permite niveles ilimitados de subdirectorios. Al construir una ruta de acceso para un archivo ODS-5 que utiliza caracteres no permitidos en ODS-2, se utiliza una sintaxis especial "^" para preservar la compatibilidad con versiones anteriores; el archivo " file.tar.gz;1" en un disco ODS-5, por ejemplo, se denominaría " file^.tar.gz"; el nombre del archivo es " file.tar" y la extensión es " .gz".
La seguridad de los archivos VMS se define mediante dos mecanismos: el control de acceso basado en UIC y el control de acceso basado en ACL . El control de acceso de UIC se basa en el propietario del archivo y el UIC, o usuario, que accede al archivo. El acceso está determinado por cuatro grupos de permisos:
Y cuatro bits de permiso:
El acceso "sistema" se aplica a cualquier usuario cuyo código de grupo UIC sea menor o igual que el SYSGENparámetro MAXSYSGROUP(normalmente 8 o 10 octal ) (por ejemplo, el SYSTEMusuario); "propietario" y "grupo" se aplican al propietario del archivo y al grupo de usuarios de ese usuario, y "mundo" se aplica a cualquier otro usuario. También hay un quinto bit de permiso, "Control", que se utiliza para determinar el acceso para cambiar los metadatos del archivo, como la protección. Este grupo no se puede configurar de forma explícita; siempre se configura para Sistema y Propietario, y nunca para Grupo o Mundo.
El control de acceso basado en UIC también se ve afectado por cuatro privilegios del sistema, que permiten a los usuarios que los poseen anular los controles de acceso:
Las ACL permiten asignar privilegios adicionales a usuarios o grupos específicos; por ejemplo, se puede otorgar a la UIC de un servidor web acceso de lectura a todos los archivos de un directorio en particular. Las ACL se pueden marcar como heredadas , donde la ACL de un archivo de directorio se aplica a todos los archivos que se encuentran debajo de ella. Las ACL se modifican mediante el EDIT/ACLcomando y toman la forma de pares identificador/acceso. Por ejemplo, la entrada de la ACL
(IDENTIFICADOR=HTTP$SERVER,ACCESO=LECTURA+EJECUTAR)
Permitiría al usuario HTTP$SERVERleer y ejecutar el archivo.
Un nombre lógico es una variable del sistema que puede hacer referencia a un disco, directorio o archivo, o contener otra información específica del programa. Por ejemplo, el nombre lógico SYS$SYSDEVICEcontiene el dispositivo de arranque del sistema. Un nombre lógico normalmente hace referencia a un solo directorio o disco, por ejemplo, SYS$LOGIN: cuál es el directorio (o directorios) de inicio de sesión del usuario; estos nombres lógicos no se pueden utilizar como nombres de disco verdaderos; SYS$LOGIN:[DIR]FILEno es una especificación de archivo válida. Sin embargo, los nombres lógicos ocultos , definidos por DEFINE/TRANSLATION=CONCEALED, se pueden utilizar de esa manera; estos directorios raíz se definen con un "." final en la especificación del directorio, por lo tanto
$ DEFINE/TRANS=OCULTAR DISCO INICIAL$USERS:[ nombre de usuario .]
Permitiría HOME:[DIR]FILEsu uso. Más comunes son los comandos lógicos simples que apuntan a directorios específicos asociados con algún software de aplicación que puede estar ubicado en cualquier disco o directorio. Por lo tanto, el comando lógico ABC_EXE puede apuntar a un directorio de programas ejecutables para la aplicación ABC y ABC_TEMP puede apuntar a un directorio de archivos temporales para esa misma aplicación y este directorio puede estar en el mismo disco y en el mismo árbol de directorios que ABC_EXE o podría estar en algún lugar de otro disco (y en un árbol de directorios diferente).
De manera similar a Unix, VMS define varios canales de entrada y salida estándar a los que se accede a través de los nombres lógicos SYS$INPUT, SYS$OUTPUT, SYS$ERRORy SYS$COMMAND. [1]
Los nombres lógicos no tienen un equivalente cercano en los sistemas operativos POSIX. Se parecen a las variables de entorno de Unix , excepto que se expanden mediante el sistema de archivos, en lugar del shell de comandos o el programa de aplicación. Deben definirse antes de su uso, por lo que es común que muchos nombres lógicos se definan en el archivo de comandos de inicio del sistema, así como en los archivos de comandos de inicio de sesión del usuario. En VMS, los nombres lógicos pueden hacer referencia a otros nombres lógicos (hasta un límite de anidamiento predefinido de 10) y pueden contener listas de nombres para buscar un nombre de archivo existente. Algunos nombres lógicos a los que se hace referencia con frecuencia son:
El sistema operativo no DEC más cercano que admite el concepto de nombres lógicos es AmigaOS , a través del ASSIGNcomando. El sistema operativo de disco de AmigaOS, AmigaDOS , que es un puerto de TRIPOS , tiene cierta semejanza con los sistemas operativos DEC. Por ejemplo, los nombres de los dispositivos físicos siguen un patrón como DF0: para el primer disquete, CDROM2: para la tercera unidad de CD-ROM, etc. Sin embargo, dado que el sistema puede arrancar desde cualquier unidad conectada, el sistema operativo crea la asignación SYS: para hacer referencia automáticamente al dispositivo de arranque utilizado. También se realizan otras asignaciones, LIBS:, PREFS:, C:, S:, etc., que se referencian a partir de SYS:. Por supuesto, los usuarios también pueden crear y destruir sus propias asignaciones.
Record Management Services es la capa de E/S estructurada del sistema operativo VMS. RMS proporciona un soporte integral de programas para administrar archivos estructurados , como archivos de bases de datos indexados y basados en registros . El sistema de archivos VMS, junto con RMS, extiende el acceso a los archivos más allá de los simples flujos de bytes y permite el soporte a nivel de SO para una variedad de tipos de archivos enriquecidos. Cada archivo en el sistema de archivos VMS puede considerarse como una base de datos , que contiene una serie de registros , cada uno de los cuales tiene uno o más campos individuales. Un archivo de texto, por ejemplo, es una lista de registros (líneas) separados por un carácter de nueva línea. RMS es un ejemplo de un sistema de archivos orientado a registros .
Hay cuatro formatos de registro definidos por RMS:
Hay cuatro métodos de acceso a registros o métodos para recuperar registros existentes de los archivos:
A nivel de disco, ODS representa el sistema de archivos como una matriz de bloques , siendo un bloque 512 bytes contiguos en un disco físico ( volumen ). Los bloques de disco se asignan en clústeres (originalmente 3 bloques contiguos pero luego se aumentaron con tamaños de disco más grandes). Un archivo en el disco idealmente será completamente contiguo, es decir, los bloques que contienen el archivo serán secuenciales, pero la fragmentación del disco a veces requerirá que el archivo se ubique en clústeres discontinuos en cuyo caso los fragmentos se denominan extensiones . Los discos se pueden combinar con otros discos para formar un conjunto de volúmenes y los archivos se almacenan en cualquier lugar de ese conjunto de discos, pero los tamaños de disco más grandes han reducido el uso de conjuntos de volúmenes porque la administración de un solo disco físico es más simple.
Cada archivo en un disco Files-11 (o conjunto de volúmenes) tiene una identificación de archivo única (FID), compuesta por tres números: el número de archivo (NUM), el número de secuencia de archivo (SEQ) y el número de volumen relativo (RVN). El NUM indica en qué parte del INDEXF.SYSarchivo (ver a continuación) se encuentran los metadatos del archivo; el SEQ es un número de generación que se incrementa cuando se elimina el archivo y se crea otro archivo reutilizando la misma entrada INDEXF.SYS (de modo que cualquier referencia pendiente al archivo anterior no apunte accidentalmente al nuevo); y el RVN indica el número de volumen en el que se almacena el archivo cuando se utiliza un conjunto de volúmenes.
El soporte estructural de un volumen ODS lo proporciona un archivo de directorio , un archivo especial que contiene una lista de nombres de archivos, números de versión de archivos y sus FID asociados, similar a los catálogos VSAM en MVS y directorios en sistemas de archivos Unix y NTFS . En la raíz de la estructura de directorios se encuentra el directorio de archivos maestro (MFD), el directorio raíz que contiene (directa o indirectamente) todos los archivos del volumen.
Este diagrama muestra un directorio de ejemplo que contiene 3 archivos y la forma en que cada nombre de archivo se asigna a la INDEXF.SYSentrada (cada entrada INDEXF contiene más información; aquí solo se muestran los primeros elementos).
En el nivel superior de un sistema de archivos ODS se encuentra el directorio de archivos maestro (MFD), que contiene todos los archivos de directorio de nivel superior (incluido él mismo) y varios archivos de sistema utilizados para almacenar información del sistema de archivos. En los volúmenes ODS-1, se utiliza una estructura de directorio de dos niveles: cada código de identificación de usuario (UIC) tiene un directorio de archivos de usuario (UFD) asociado, con el formato [GROUP.USER]. En los volúmenes ODS-2 y posteriores, la disposición de los directorios bajo el MFD es de formato libre, sujeta a un límite en la anidación de directorios (8 niveles en ODS-2 e ilimitado en ODS-5). En conjuntos de varios volúmenes, el MFD siempre se almacena en el primer volumen y contiene los subdirectorios de todos los volúmenes.
Los siguientes archivos de sistema están presentes en el MFD ODS:
Tenga en cuenta que la implementación del sistema de archivos en sí no hace referencia a estos archivos por su nombre, sino por sus identificadores de archivo, que siempre tienen los mismos valores. Por lo tanto, INDEXF.SYS siempre es el archivo con NUM = 1 y SEQ = 1.
El archivo de índice contiene la información más básica sobre un conjunto de volúmenes Files-11.
Hay dos organizaciones de INDEXF.SYS, la organización tradicional y la organización utilizada en discos con GPT.SYS; con las estructuras de tabla de particiones GUID (GPT).
Con la organización tradicional, el bloque 1 es el bloque de arranque , que contiene la ubicación de la imagen de arranque principal , que se utiliza para cargar el sistema operativo VMS. Esta siempre se encuentra en el bloque lógico 0 del disco, de modo que el firmware del hardware pueda leerla. Este bloque siempre está presente, incluso en volúmenes que no son de sistema (no arrancables).
Después del bloque de arranque se encuentra el bloque de inicio principal . Este contiene el nombre del volumen , la ubicación de las extensiones que comprenden el resto del archivo de índice, el UIC del propietario del volumen y la información de protección del volumen . Normalmente, hay varias copias adicionales del bloque de inicio, conocidas como bloques de inicio secundarios , para permitir la recuperación del volumen si se pierde o se daña.
En los discos con GPT.SYS, GPT.SYS contiene el equivalente del bloque de arranque (conocido como Registro de arranque maestro (MBR)) y no hay un bloque de inicio principal. Todos los bloques de inicio presentes en un disco basado en GPT son bloques de inicio alternativos. Estas estructuras no están incluidas en INDEXF.SYS y los bloques del archivo INDEXF.SYS no se utilizan.
El resto del archivo de índice se compone de encabezados de archivo , que describen las extensiones asignadas a los archivos que residen en el volumen, y metadatos de archivo como el UIC del propietario, las ACL y la información de protección. Cada archivo se describe mediante uno o más encabezados de archivo; se puede requerir más de uno cuando un archivo tiene una gran cantidad de extensiones. El encabezado de archivo es un bloque de longitud fija, pero contiene secciones de longitud fija y variable:
Si es posible, las secciones de mapa y ACL del encabezado se incluyen completamente en el encabezado principal . Sin embargo, si la ACL es demasiado larga o el archivo contiene demasiadas extensiones, no habrá suficiente espacio en el encabezado principal para almacenarlas. En este caso, se asigna un encabezado de extensión para almacenar la información de desbordamiento.
Disposición del INDEXF.SYSencabezado.
El encabezado del archivo comienza con 4 desplazamientos ( IDOFFSET, MPOFFSET, ACOFFSETy ROFFSET). Dado que el tamaño de las áreas después del encabezado de longitud fija puede variar (como las áreas de mapa y ACL), los desplazamientos son necesarios para ubicar estas áreas adicionales. Cada desplazamiento es la cantidad de palabras de 16 bits desde el comienzo del encabezado del archivo hasta el comienzo de esa área.
Si el archivo requiere múltiples encabezados, el número de segmento de extensión ( SEGNUM) contiene el número de secuencia de este encabezado, comenzando en 0 en la primera entrada en INDEXF.SYS.
STRUCLEVcontiene el nivel de estructura actual (en el byte alto) y la versión (en el byte bajo) del sistema de archivos; ODS-2 es el nivel de estructura 2. Un aumento en el número de versión indica un cambio de compatibilidad con versiones anteriores que el software más antiguo puede ignorar; los cambios en el nivel de estructura en sí son incompatibles.
W_FID(que contiene tres valores: FID_NUM, FID_SEQy FID_RVN, correspondientes al archivo, secuencia y número de volumen relativo) contiene el ID de este archivo; EXT_FID(de nuevo compuesto por tres valores) contiene la ubicación del siguiente encabezado de extensión, si lo hay. En ambos valores, el RVN se especifica como 0 para representar el volumen "actual" (normalmente, 0 no es un RVN válido).
FILECHARcontiene varias banderas que afectan cómo se maneja u organiza el archivo:
ACCMODEdescribe el nivel de privilegio en el que debe ejecutarse un proceso para acceder al archivo. VMS define cuatro niveles de privilegio: usuario, supervisor, ejecutivo y kernel. Cada tipo de acceso (lectura, escritura, ejecución y eliminación) se codifica como un entero de 2 bits.
FILEPROTContiene la información de control de acceso discrecional para el archivo. Se divide en 4 grupos de 4 bits cada uno: sistema, propietario, grupo y mundo. El bit 0 corresponde al acceso de lectura, el 1 a la escritura, el 2 a la ejecución y el 3 a la eliminación. Al establecer un bit se niega un acceso particular a un grupo; al borrarlo se lo permite.
Si el encabezado del archivo es un encabezado de extensión, BACKLINKcontiene el ID del archivo del encabezado principal; de lo contrario, contiene el ID del archivo del directorio que contiene la entrada principal del archivo.