Oggi, la maggior parte dei sistemi di gestione dei database (ad esempio PostGreSQL , MongoDB , ecc ...) conserva internamente i propri dati all'interno dei file del sistema operativo (in passato alcuni DBMS utilizzavano direttamente le partizioni del disco non elaborato).
Sui computer recenti che utilizzano ancora dischi rigidi in rotazione , il disco è così lento - rispetto alla CPU o alla RAM - che l'aggiunta di alcuni livelli software non è rilevante. La tecnologia SSD potrebbe cambiare un po 'questo e alcuni file system sono ottimizzati per gli SSD.
I file sono presenti nella maggior parte dei sistemi operativi in generale per motivi storici e sociali (in particolare, compilatori C e la maggior parte degli strumenti - editor, linker - vogliono file, quindi c'è un problema di pollo e uovo) e perché ci sono molti file molto buoni implementazioni di sistema .
A proposito, alcune strutture di sistema essenziali possono utilizzare database. Ad esempio su Linux PAM può essere configurato per utilizzare le informazioni nei database (ma ciò avviene raramente in pratica). Inoltre, alcuni server di posta possono archiviare alcuni o la maggior parte dei loro dati in database (ad esempio Exim ).
I file sono astrazioni leggermente inferiori rispetto ai database, quindi possono essere più facili da implementare (come i file system e il livello VFS nel kernel Linux) e più veloci da usare. In particolare, le operazioni sui file sono molto più limitate di quelle sui database. In effetti, potresti vedere file o file system come alcuni database molto limitati!
Potresti progettare un sistema operativo senza alcun file , ma con qualche altro macchinario di persistenza ortogonale (ad es. Avere ogni processo persistente, quindi non ti preoccupi molto esplicitamente della memorizzazione, poiché il sistema operativo gestisce risorse persistenti). Ciò è stato fatto in diversi sistemi operativi accademici (1) (e anche nelle macchine Smalltalk e Lisp degli anni '80, in qualche modo nell'IBM System i , noto anche come AS / 400 , e in alcuni progetti giocattolo collegati da osdev), ma quando si progetta il sistema operativo in questo modo, non è possibile sfruttare molti strumenti esistenti (ad esempio, è necessario anche rendere il compilatore e l'interfaccia utente da zero, e questo richiede molto lavoro).
Si noti che i sistemi operativi microkernel potrebbero non aver bisogno di file forniti dai livelli del kernel poiché i file system sono solo server delle applicazioni (ad esempio traduttori Hurd in esecuzione nell'area utente). Guarda anche l' approccio unikernel nell'attuale MirageOS
Linux (e probabilmente Windows, che ha preso la maggior parte della sua ispirazione da VMS e Unix ) ha bisogno dei file per funzionare. Per lo meno, il programma init (il primo programma avviato dal kernel) deve essere un eseguibile memorizzato in un file (spesso /sbin/init
, ma potrebbe essere systemd in questi giorni), e (quasi) tutti gli altri programmi vengono avviati con execve (2 ) syscall quindi deve essere archiviato in un file. Tuttavia, FUSE ti consente di fornire una semantica simile a un file a cose non file.
Si noti inoltre che su Linux (e forse anche su Windows, che non conosco e non ho mai usato) sqlite è una libreria che gestisce alcuni database SQL in un file e fornisce un'API per questo. È risaputo che Android (una variante Linux) utilizza molti file sqlite (ma ha ancora un file system simile a POSIX).
Leggi anche sul checkpoint dell'applicazione (che, su molti sistemi operativi attuali, è implementato per scrivere lo stato del processo in file). Spinto all'estremo, tale approccio non ha bisogno di scrivere manualmente i file dell'applicazione (ma solo di mantenere l'intero stato del processo utilizzando il macchinario di checkpoint).
In realtà, la domanda interessante è perché gli attuali sistemi operativi usano ancora i file, e la risposta è legacy e ragioni economiche e culturali (purtroppo, la maggior parte dei linguaggi di programmazione e delle biblioteche oggi vogliono ancora i file).
Nota 1: i sistemi operativi accademici persistenti includono Lisaac e Grasshopper , ma questi progetti accademici sembrano essere inattivi. Guarda anche su http://tunes.org/ ; è inattivo, ma ha avuto molte discussioni su tali argomenti.
Nota 2: la nozione di file è cambiata ampiamente nel tempo (guarda questa risposta sulle mie prime esperienze di programmazione): il primo MSDOS su PC IBM degli anni '80 (nessuna directory!), Il VMS -su Vaxen del 1978 - (aveva entrambi record fissi file e file sequenziali, con un sistema di versioning primitivo), i mainframe degli anni '70 ( IBM / 370 con OS / VS2 MVS ) avevano una nozione molto diversa di file e file system (in particolare perché a loro tempo il rapporto tra tempo di accesso al disco rigido e il tempo di accesso alla memoria core era di qualche migliaio, quindi a quel tempo il disco era relativamente più veloce di oggi, anche se i dischi di oggi lo sono assolutamentepiù veloce rispetto al secolo precedente, oggi il rapporto velocità CPU / disco è di circa un milione; ma ora abbiamo SSD). Inoltre, i file sono meno (o addirittura non utili) quando la memoria è persistente (come nel caso del tamburo magnetico CAB500 , anni '60; o dei computer futuri che utilizzano MRAM )