Сегодня большинство систем управления базами данных (например, PostGreSQL , MongoDB и т. Д.) Внутренне хранят свои данные в файлах ОС (в прошлом некоторые СУБД использовали непосредственные разделы сырых дисков).
На недавних компьютерах, все еще использующих вращающиеся жесткие диски , диск настолько медленный - относительно ЦП или ОЗУ - что добавление нескольких слоев программного обеспечения не имеет значения. Технология SSD может немного изменить это, и некоторые файловые системы оптимизированы для SSD.
Файлы присутствуют в большинстве операционных систем в целом по историческим и социальным причинам (в частности, компиляторы C и большинство инструментов - редакторы, компоновщики - хотят файлы, поэтому возникает проблема с курицей и яйцами), а также потому, что существует множество очень хороших файлов. системные реализации.
Кстати, некоторые важные системные средства могут использовать базы данных. Например, в Linux PAM можно настроить на использование информации в базах данных (но на практике это редко делается). Кроме того, некоторые почтовые серверы могут хранить некоторые или большую часть своих данных в базах данных (например, Exim ).
Файлы представляют собой несколько более низкие абстракции, чем базы данных, поэтому их проще реализовать (как файловые системы и уровень VFS в ядре Linux) и быстрее использовать. В частности, операции с файлами гораздо более ограничены, чем с базами данных. Фактически, вы могли видеть файлы или файловые системы как некоторые очень ограниченные базы данных!
Вы можете разработать операционную систему без каких - либо файлов , но с каким - либо другим ортогональной инерционностью механизмом (например , имеющей каждый процесс быть стойким, то вы все равно много явно о хранении, так как операционная система управляют постоянными ресурсами). Это было сделано в нескольких академических операционных системах (1) (а также на машинах Smalltalk и Lisp 1980-х годов, как-то в IBM System i , также называемой AS / 400 , и в некоторых игрушечных проектах, связанных с osdev), но когда вы разрабатываете свою ОС таким способом, вы не можете использовать многие существующие инструменты (например, вам также нужно создать компилятор и пользовательский интерфейс с нуля, а это много работы).
Обратите внимание, что операционным системам микроядра могут не понадобиться файлы, предоставляемые уровнями ядра, поскольку файловые системы являются просто серверами приложений (например, трансляторы Hurd, работающие в пользовательской среде). Посмотрите также на подход unikernel в современном MirageOS
Linux (и, вероятно, Windows, которая получила большую часть своего вдохновения от VMS и Unix ) нужны файлы для работы. По крайней мере, инициализация программа (первая программа запускается ядро) должна быть исполняемой хранится в файл (часто /sbin/init
, но это может быть Systemd в эти дни), и (почти) все остальные программы запускаются с execve (2 ) поэтому syscall должен храниться в файле. Однако FUSE позволяет вам придавать файловую семантику не-файловым вещам.
Также обратите внимание, что в Linux (и, возможно, даже в Windows, которую я не знаю и никогда не использовал) sqlite - это библиотека, управляющая некоторой базой данных SQL в файлах и предоставляющая API для этого. Широко известно, что Android (вариант Linux) использует много файлов sqlite (но у него все еще есть POSIX-подобная файловая система).
Читайте также о контрольных точках приложения (которые во многих современных ОС реализованы для записи состояния процесса в файлы). Поднявшись до крайности, этот подход не требует ручной записи файлов приложения (но только для сохранения всего состояния процесса с использованием механизма контрольных точек).
На самом деле, интересный вопрос заключается в том, почему современные операционные системы по-прежнему используют файлы, и ответ на этот вопрос унаследован, и по экономическим и культурным причинам (к сожалению, большинство языков программирования и библиотек сегодня все еще хотят файлы).
Примечание 1: постоянные академические ОС включают Lisaac & Grasshopper , но эти академические проекты, похоже, неактивны. Посмотрите также на http://tunes.org/ ; он неактивен, но получил много дискуссий по таким темам.
Примечание 2: понятие файла с течением времени сильно изменилось (посмотрите на этот ответ о моем первом опыте программирования): первая MSDOS на компьютерах IBM 1980-х годов (без каталогов!), VMS - на Vaxen 1978 года - (имел обе записи с фиксированной записью) файлы и последовательные файлы, с примитивной системой управления версиями), мейнфреймы 1970-х годов ( IBM / 370 с OS / VS2 MVS ) имели совершенно другое представление о файлах и файловых системах (в частности, потому что в то время отношение времени доступа к жесткому диску к время доступа к основной памяти составляло несколько тысяч, поэтому в то время диск работал относительно быстрее, чем сегодня, даже если современные диски абсолютнобыстрее, чем в прошлом веке, сегодня соотношение скорости процессора и диска составляет около миллиона; но теперь у нас есть твердотельные накопители). Кроме того, файлы менее полезны (или даже бесполезны), когда память постоянна (как на магнитном барабане CAB500 , 1960-е годы или будущие компьютеры, использующие MRAM ).