Obecnie większość systemów zarządzania bazami danych (np. PostGreSQL , MongoDB itp.) Wewnętrznie przechowują swoje dane w plikach systemu operacyjnego (w przeszłości niektóre DBMS korzystały bezpośrednio z surowych partycji dysku).
Na najnowszych komputerach wciąż korzystających z obracających się dysków twardych dysk jest tak wolny - w stosunku do procesora lub pamięci RAM - że dodanie kilku warstw oprogramowania nie ma znaczenia. Technologia SSD może to nieco zmienić, a niektóre systemy plików są zoptymalizowane pod kątem dysków SSD.
Pliki są obecne w większości systemów operacyjnych ogólnie ze względów historycznych i społecznych (w szczególności kompilatory C i większość narzędzi - edytorów, konsolidatorów - chcą plików, więc jest problem z kurczakiem i jajami), a ponieważ istnieje wiele bardzo dobrych plików wdrożenia systemu .
BTW, niektóre niezbędne urządzenia systemowe mogą korzystać z baz danych. Na przykład w systemie Linux PAM można skonfigurować tak, aby korzystał z informacji w bazach danych (ale w praktyce jest to rzadko wykonywane). Ponadto niektóre serwery pocztowe mogą przechowywać niektóre lub większość swoich danych w bazach danych (np. Exim ).
Pliki mają nieco niższe abstrakty niż bazy danych, więc mogą być łatwiejsze do wdrożenia (jako systemy plików i warstwa VFS w jądrze Linuksa) i szybsze w użyciu. W szczególności operacje na plikach są znacznie bardziej ograniczone niż operacje na bazach danych. W rzeczywistości możesz zobaczyć pliki lub systemy plików jako niektóre bardzo ograniczone bazy danych!
Możesz zaprojektować system operacyjny bez żadnych plików , ale z kilkoma innymi ortogonalnymi maszynami do utrzymywania trwałości (np. Jeśli każdy proces będzie trwały, wtedy nie dbasz wyraźnie o pamięć, ponieważ system operacyjny zarządza trwałymi zasobami). Dokonano tego w kilku akademickich systemach operacyjnych (1) (a także w maszynach Smalltalk i Lisp z lat 80., w jakiś sposób w IBM System i , znany również jako AS / 400 , oraz w niektórych projektach zabawek powiązanych z osdevem), ale kiedy projektujesz swój system operacyjny w ten sposób, nie możesz wykorzystać wielu istniejących narzędzi (np. musisz też zrobić kompilator i interfejs użytkownika od zera, a to dużo pracy).
Zauważ, że systemy operacyjne mikrojądra mogą nie potrzebować plików dostarczanych przez warstwy jądra, ponieważ systemy plików to tylko serwery aplikacji (np. Translatory Hurd działające w przestrzeni użytkownika). Spójrz także na unikernelowe podejście w dzisiejszym MirageOS
Linux (i prawdopodobnie Windows, który czerpał większość inspiracji z VMS i Unix ) potrzebuje plików do działania. Przynajmniej program inicjujący (pierwszy program uruchamiany przez jądro) musi być plikiem wykonywalnym przechowywanym w pliku (często /sbin/init
, ale może być systemowym w tych dniach), i (prawie) wszystkie inne programy są uruchamiane z execve (2) ) syscall, więc musi być przechowywany w pliku. Jednak FUSE pozwala nadać semantykę podobną do pliku rzeczom nieposiadającym pliku.
Zauważ też, że w Linuksie (a może nawet Windowsie, którego nie znam i nigdy nie użyłem) sqlite to biblioteka zarządzająca bazą danych SQL w plikach i zapewniająca API dla tego. Powszechnie wiadomo, że Android (wariant Linux) używa wielu plików sqlite (ale nadal ma system plików podobny do POSIX).
Przeczytaj także o punktach kontrolnych aplikacji (które w wielu obecnych systemach operacyjnych są zaimplementowane do zapisywania stanu procesu w plikach). Doprowadzone do skrajności, takie podejście nie musi ręcznie zapisywać plików aplikacji (a jedynie utrzymywać cały stan procesu za pomocą maszyny kontrolnej).
Właściwie interesujące pytanie brzmi: dlaczego obecne systemy operacyjne nadal używają plików, a odpowiedź jest starsza, a także z przyczyn ekonomicznych i kulturowych (niestety większość dzisiejszych języków programowania i bibliotek nadal chce plików).
Uwaga 1: trwałe systemy akademickie obejmują Lisaac i Grasshopper , ale te projekty akademickie wydają się być nieaktywne. Zajrzyj również na http://tunes.org/ ; jest nieaktywny, ale odbyło się wiele dyskusji na takie tematy.
Uwaga 2: pojęcie pliku zmieniło się z biegiem czasu (spójrz na tę odpowiedź na temat moich pierwszych doświadczeń programistycznych): pierwszy MSDOS na komputerach IBM z lat 80. (bez katalogów!), VMS - na Vaxen z 1978 r. - (miał oba stałe zapisy pliki i pliki sekwencyjne, z prymitywnym systemem wersjonowania), komputery mainframe z lat 70. ( IBM / 370 z OS / VS2 MVS ) miały zupełnie inne pojęcie plików i systemów plików (w szczególności dlatego, że w tym czasie stosunek czasu dostępu do dysku twardego do czas dostępu do pamięci rdzenia wynosił kilka tysięcy - więc w tym czasie dysk działał stosunkowo szybciej niż dzisiaj, nawet jeśli dzisiejsze dyski są absolutnieszybciej niż w poprzednim stuleciu, dziś współczynnik szybkości procesora / dysku wynosi około miliona; ale teraz mamy dyski SSD). Ponadto pliki są mniej (lub nawet nie) przydatne, gdy pamięć jest trwała (jak w bębnie magnetycznym CAB500 , lata 60. i przyszłe komputery korzystające z MRAM )