Hoje, a maioria dos sistemas de gerenciamento de banco de dados (por exemplo , PostGreSQL , MongoDB , etc ...) mantém internamente seus dados nos arquivos do sistema operacional (no passado, alguns DBMSs usavam partições de disco bruto diretamente).
Em computadores recentes que ainda usam discos rígidos giratórios , o disco é tão lento - em relação à CPU ou à RAM - que adicionar algumas camadas de software não é relevante. A tecnologia SSD pode mudar um pouco isso, e alguns sistemas de arquivos são otimizados para SSDs.
Os arquivos estão presentes na maioria dos sistemas operacionais em geral por razões históricas e sociais (em particular, compiladores C e a maioria das ferramentas - editores, vinculadores - desejam arquivos, para que haja um problema de galinha e ovo) e porque há muitos arquivos muito bons implementações de sistema .
BTW, algumas instalações essenciais do sistema podem usar bancos de dados. Por exemplo, no Linux, o PAM pode ser configurado para usar informações nos bancos de dados (mas isso raramente é feito na prática). Além disso, alguns servidores de correio podem armazenar alguns ou a maioria de seus dados em bancos de dados (por exemplo, Exim ).
Os arquivos são abstrações ligeiramente mais baixas que os bancos de dados, para que possam ser mais fáceis de implementar (como os sistemas de arquivos e a camada VFS no kernel do Linux) e mais rápidos de usar. Em particular, as operações nos arquivos são muito mais restritas que as nos bancos de dados. De fato, você pode ver arquivos ou sistemas de arquivos como alguns bancos de dados muito restritos!
Você pode projetar um sistema operacional sem arquivos , mas com algum outro mecanismo de persistência ortogonal (por exemplo, tendo todos os processos persistentes, você não se importa muito explicitamente com o armazenamento, pois o sistema operacional está gerenciando recursos persistentes). Isso foi feito em vários sistemas operacionais acadêmicos (1) (e também nas máquinas Smalltalk e Lisp da década de 1980, de alguma forma no IBM System i , também conhecido como AS / 400 , e em alguns projetos de brinquedos vinculados pelo osdev), mas quando você projeta seu sistema operacional dessa maneira, não pode aproveitar muitas ferramentas existentes (por exemplo, você também precisa criar seu compilador e sua interface com o usuário do zero, e isso é muito trabalhoso).
Observe que os sistemas operacionais de microkernel podem não precisar de arquivos fornecidos pelas camadas do kernel, pois os sistemas de arquivos são apenas servidores de aplicativos (por exemplo, tradutores Hurd em execução na terra do usuário). Veja também a unikernel abordagem de hoje MirageOS
O Linux (e provavelmente o Windows, que se inspirou mais no VMS e no Unix ) precisam de arquivos para funcionar. No mínimo, o programa init (o primeiro programa iniciado pelo kernel) deve ser um executável armazenado em um arquivo (geralmente /sbin/init
, mas atualmente pode ser systemd ), e (quase) todos os outros programas são iniciados com execve (2). ) syscall, portanto, deve ser armazenado em um arquivo No entanto, o FUSE permite que você dê semânticas semelhantes a arquivos para coisas que não são arquivos.
Observe também que no Linux (e talvez até no Windows, que eu não conheço e nunca usei), o sqlite é uma biblioteca que gerencia alguns bancos de dados SQL em arquivos e fornece uma API para isso. É sabido que o Android (uma variante do Linux) usa muitos arquivos sqlite (mas ainda possui um sistema de arquivos semelhante ao POSIX).
Leia também sobre o ponto de verificação do aplicativo (que, em muitos sistemas operacionais atuais, é implementado para gravar o estado do processo nos arquivos). Levada ao extremo, essa abordagem não precisa gravar manualmente os arquivos do aplicativo (mas apenas para persistir todo o estado do processo usando o mecanismo de ponto de verificação).
Na verdade, a pergunta interessante é por que os sistemas operacionais atuais ainda usam arquivos, e a resposta é legada e por razões econômicas e culturais (infelizmente, a maioria das linguagens e bibliotecas de programação atuais ainda deseja arquivos).
Nota 1: sistemas operacionais acadêmicos persistentes incluem Lisaac & Grasshopper , mas esses projetos acadêmicos parecem estar inativos. Veja também http://tunes.org/ ; é inativo, mas teve muitas discussões sobre esses tópicos.
Nota 2: a noção de arquivo mudou bastante ao longo do tempo (veja esta resposta sobre minhas primeiras experiências de programação): o primeiro MSDOS nos PCs IBM dos anos 80 (sem diretórios!), O VMS - no Vaxen de 1978 - (ambos tinham registro fixo arquivos e arquivos seqüenciais, com um sistema de versão primitivo), os mainframes da década de 1970 ( IBM / 370 com OS / VS2 MVS ) tinham uma noção muito diferente de arquivos e sistemas de arquivos (em particular porque, na época, a proporção do tempo de acesso ao disco rígido para o tempo de acesso à memória principal era de alguns milhares - então, o disco era relativamente mais rápido do que hoje, mesmo que os discos de hoje sejam absolutamentemais rápido que no século anterior, hoje a taxa de velocidade de CPU / disco é de cerca de um milhão; mas agora temos SSDs). Além disso, os arquivos são menos (ou até não) úteis quando a memória é persistente (como no tambor magnético CAB500 , década de 1960; ou futuros computadores usando MRAM )