Hoy en día, la mayoría de los sistemas de administración de bases de datos (por ejemplo , PostGreSQL , MongoDB , etc.) mantienen internamente sus datos dentro de los archivos del sistema operativo (en el pasado, algunos DBMS usaban particiones de disco sin formato directamente).
En las computadoras recientes que todavía usan discos duros giratorios , el disco es tan lento, en relación con la CPU o la RAM, que agregar algunas capas de software no es relevante. La tecnología SSD puede cambiar eso un poco, y algunos sistemas de archivos están optimizados para SSD.
Los archivos están presentes en la mayoría de los sistemas operativos en general por razones históricas y sociales (en particular, los compiladores de C y la mayoría de las herramientas - editores, enlazadores - quieren archivos, por lo que hay un problema de gallina y huevo), y porque hay muchos archivos muy buenos implementaciones de sistemas .
Por cierto, algunas instalaciones esenciales del sistema pueden usar bases de datos. Por ejemplo, en Linux, PAM se puede configurar para usar información en bases de datos (pero esto rara vez se hace en la práctica). Además, algunos servidores de correo pueden almacenar algunos o la mayoría de sus datos en bases de datos (por ejemplo, Exim ).
Los archivos son abstracciones ligeramente más bajas que las bases de datos, por lo que pueden ser más fáciles de implementar (como los sistemas de archivos y la capa VFS en el kernel de Linux) y más rápidos de usar. En particular, las operaciones en los archivos son mucho más restringidas que las de las bases de datos. De hecho, ¡podría ver archivos o sistemas de archivos como algunas bases de datos muy restringidas!
Puede diseñar un sistema operativo sin ningún archivo , pero con alguna otra maquinaria de persistencia ortogonal (por ejemplo, que todos los procesos sean persistentes, entonces no le importa mucho el almacenamiento, ya que el sistema operativo está administrando recursos persistentes). Esto se ha hecho en varios sistemas operativos académicos (1) (y también en las máquinas Smalltalk y Lisp de la década de 1980, de alguna manera en el IBM System i , también conocido como AS / 400 , y en algunos proyectos de juguetes vinculados desde osdev), pero cuando diseña su sistema operativo de esta manera no puede aprovechar muchas herramientas existentes (por ejemplo, también necesita hacer su compilador y su interfaz de usuario desde cero, y eso es mucho trabajo).
Tenga en cuenta que los sistemas operativos de microkernel pueden no necesitar los archivos proporcionados por las capas del kernel, ya que los sistemas de archivos son solo servidores de aplicaciones (por ejemplo, los traductores Hurd que se ejecutan en el país de usuario). Ver también el unikernel enfoque de hoy en MirageOS
Linux (y probablemente Windows, que se inspiró principalmente en VMS y Unix ) necesitan archivos para funcionar. Como mínimo, el programa init (el primer programa iniciado por el kernel) debe ser un ejecutable almacenado en un archivo (a menudo /sbin/init
, pero podría ser systemd actualmente), y (casi) todos los demás programas se inician con execve (2 ) syscall por lo que debe almacenarse en un archivo. Sin embargo, FUSE le permite dar una semántica similar a un archivo a cosas que no son de archivo.
Tenga en cuenta también que en Linux (y tal vez incluso en Windows, que no conozco y nunca utilicé) sqlite es una biblioteca que administra algunas bases de datos SQL en archivos y proporciona una API para eso. Es ampliamente conocido que Android (una variante de Linux) usa muchos archivos sqlite (pero todavía tiene un sistema de archivos similar a POSIX).
Lea también sobre los puntos de verificación de la aplicación (que, en muchos sistemas operativos actuales, se implementa para escribir el estado del proceso en archivos). Llevado al extremo, ese enfoque no necesita escribir manualmente archivos de aplicación (sino solo para persistir todo el estado del proceso utilizando la maquinaria de verificación).
En realidad, la pregunta interesante es por qué los sistemas operativos actuales todavía usan archivos, y la respuesta es heredada, y razones económicas y culturales (lamentablemente, la mayoría de los lenguajes de programación y bibliotecas de hoy todavía quieren archivos).
Nota 1: los sistemas operativos académicos persistentes incluyen Lisaac y Grasshopper , pero estos proyectos académicos parecen estar inactivos. Mire también en http://tunes.org/ ; está inactivo, pero ha tenido muchas discusiones sobre estos temas.
Nota 2: la noción de archivo ha cambiado ampliamente con el tiempo (mire esta respuesta sobre mis primeras experiencias de programación): el primer MSDOS en las PC de IBM de la década de 1980 (¡sin directorios!), El VMS -en 1978 Vaxen- (tenía ambos registros fijos archivos y archivos secuenciales, con un sistema de versiones primitivo), los mainframes de la década de 1970 ( IBM / 370 con OS / VS2 MVS ) tenían una noción muy diferente de archivos y sistemas de archivos (en particular porque en ese momento la proporción de tiempo de acceso al disco duro a el tiempo de acceso a la memoria central fue de unos pocos miles, por lo que en ese momento el disco funcionaba relativamente más rápido que hoy, incluso si los discos de hoy son absolutamentemás rápido que en el siglo anterior, hoy la relación CPU / velocidad de disco es de aproximadamente un millón; pero ahora tenemos SSD). Además, los archivos son menos (o incluso no) útiles cuando la memoria es persistente (como en el tambor magnético CAB500 , 1960; o en futuras computadoras que usan MRAM )