Ngày nay, hầu hết các hệ thống quản lý cơ sở dữ liệu (ví dụ PostGreSQL , MongoDB , v.v.) đều lưu giữ dữ liệu của họ bên trong các tệp HĐH (trước đây, một số DBMS sử dụng phân vùng đĩa thô trực tiếp).
Trên các máy tính gần đây vẫn sử dụng đĩa cứng quay , đĩa rất chậm - liên quan đến CPU hoặc RAM - việc thêm một vài lớp phần mềm không liên quan. Công nghệ SSD có thể thay đổi một chút và một số hệ thống tệp được tối ưu hóa cho SSD.
Các tệp có mặt trong hầu hết các hệ điều hành nói chung vì lý do lịch sử và xã hội (cụ thể là trình biên dịch C và hầu hết các công cụ - trình soạn thảo, trình liên kết - muốn có tệp, do đó có vấn đề về gà và trứng) và vì có rất nhiều tệp rất tốt triển khai hệ thống .
BTW, một số cơ sở hệ thống thiết yếu có thể sử dụng cơ sở dữ liệu. Ví dụ trên Linux PAM có thể được cấu hình để sử dụng thông tin trong cơ sở dữ liệu (nhưng điều này hiếm khi được thực hiện trong thực tế). Ngoài ra, một số máy chủ thư có thể lưu trữ một số hoặc hầu hết dữ liệu của họ trong cơ sở dữ liệu (ví dụ Exim ).
Các tệp có độ trừu tượng thấp hơn một chút so với cơ sở dữ liệu, vì vậy chúng có thể dễ thực hiện hơn (vì lớp hệ thống tệp & VFS trong nhân Linux) và sử dụng nhanh hơn. Cụ thể, các thao tác trên tệp bị hạn chế hơn nhiều so với thao tác trên cơ sở dữ liệu. Trong thực tế, bạn có thể xem các tệp hoặc hệ thống tệp như một số cơ sở dữ liệu rất hạn chế!
Bạn có thể thiết kế một hệ điều hành mà không cần bất kỳ tập tin , nhưng với một số trực giao khác kiên trì máy móc thiết bị (ví dụ như có mỗi quá trình kiên trì, sau đó bạn không quan tâm nhiều một cách rõ ràng về lưu trữ, kể từ khi hệ điều hành đang quản lý nguồn lực dai dẳng). Điều này đã được thực hiện trong một số hệ điều hành học thuật (1) (và cả trong các máy Smalltalk và Lisp của những năm 1980, bằng cách nào đó trong Hệ thống IBM i , còn gọi là AS / 400 , và trong một số dự án đồ chơi được liên kết từ osdev), nhưng khi bạn thiết kế HĐH theo cách này, bạn không thể tận dụng nhiều công cụ hiện có (ví dụ: bạn cũng cần phải tạo trình biên dịch và giao diện người dùng của mình từ đầu, và đó là rất nhiều công việc).
Lưu ý rằng các hệ điều hành microkernel có thể không cần các tệp được cung cấp bởi các lớp kernel vì các hệ thống tệp chỉ là các máy chủ ứng dụng (ví dụ: trình dịch Hurd chạy trong vùng người dùng). Cũng xem cách tiếp cận đơn nhân trong MirageOS ngày nay
Linux (và có lẽ là Windows, vốn lấy hầu hết cảm hứng từ VMS & Unix ) cần các tệp để hoạt động. Ít nhất, chương trình init (chương trình đầu tiên được khởi động bởi kernel) phải là một tệp thực thi được lưu trữ trong một tệp (thường /sbin/init
, nhưng nó có thể là systemd những ngày này) và (gần như) tất cả các chương trình khác được bắt đầu bằng execve (2 ) tòa nhà vì vậy phải được lưu trữ trong một tập tin. Tuy nhiên, FUSE cho phép bạn cung cấp ngữ nghĩa giống như tệp cho những thứ không phải tệp.
Cũng lưu ý rằng trên Linux (và có lẽ cả Windows, mà tôi không biết và chưa từng sử dụng) sqlite là một thư viện quản lý một số cơ sở dữ liệu SQL trong một tệp và cung cấp API cho điều đó. Người ta biết rằng Android (một biến thể của Linux) sử dụng rất nhiều tệp sqlite (nhưng nó vẫn có hệ thống tệp giống POSIX).
Đọc thêm về điểm kiểm tra ứng dụng (trong đó, trên nhiều hệ điều hành hiện tại, được triển khai để ghi trạng thái quá trình trong tệp). Bị đẩy đến mức cực đoan, cách tiếp cận đó không cần phải viết thủ công các tệp ứng dụng (mà chỉ để duy trì toàn bộ trạng thái quy trình bằng cách sử dụng máy móc kiểm tra).
Trên thực tế, câu hỏi thú vị là tại sao các hệ điều hành hiện tại vẫn sử dụng các tệp và câu trả lời là di sản, và lý do kinh tế và văn hóa (đáng buồn thay, hầu hết các ngôn ngữ lập trình và thư viện ngày nay vẫn muốn có tệp).
Lưu ý 1: Hệ điều hành học thuật bền bỉ bao gồm Lisaac & Grasshopper , nhưng các dự án học thuật này dường như không hoạt động. Nhìn vào http://tunes.org/ ; nó không hoạt động, nhưng đã nhận được rất nhiều cuộc thảo luận xung quanh các chủ đề như vậy.
Lưu ý 2: khái niệm về tệp đã thay đổi rộng rãi theo thời gian (xem câu trả lời này về trải nghiệm lập trình đầu tiên của tôi): MSDOS đầu tiên trên máy tính IBM của thập niên 1980 (không có thư mục!), VMS -on 1978 Vaxen - (có cả bản ghi cố định các tệp và tệp tuần tự, với hệ thống phiên bản nguyên thủy), các máy tính lớn của thập niên 1970 ( IBM / 370 với OS / VS2 MVS ) có một khái niệm rất khác nhau về các tệp và hệ thống tệp (đặc biệt là tại thời điểm chúng có tỷ lệ thời gian truy cập ổ cứng thời gian truy cập bộ nhớ lõi là vài nghìn - vì vậy vào thời điểm đó, đĩa chạy tương đối nhanh hơn ngày nay, ngay cả khi các đĩa ngày nay hoàn toànnhanh hơn so với thế kỷ trước, ngày nay tỷ lệ tốc độ CPU / đĩa là khoảng một triệu; nhưng bây giờ chúng tôi có SSD). Ngoài ra, các tệp ít hữu ích (hoặc thậm chí không) hữu ích khi bộ nhớ vẫn còn (như trên trống từ tính CAB500 , thập niên 1960; hoặc các máy tính trong tương lai sử dụng MRAM )