Tại Sao Hệ Thống Tệp Của Windows Lại Có Ký Tự Ổ Đĩa Và Sử Dụng Dấu Gạch Chéo Ngược Để Phân Chia Đường Dẫn
Tại sao hệ thống tệp Windows lại dùng ký tự ổ đĩa và dấu gạch chéo ngược?
Sáng nay, một đồng nghiệp chia sẻ bức ảnh hài hước trong nhóm công ty - màn hình hiển thị đến 30+ ổ đĩa từ C: đến Z:, thậm chí còn có CC: CD:… Kèm theo dòng chú thích đùa vui “Windows có thể quản lý tối đa bao nhiêu ổ đĩa?”.
Dĩ nhiên đây là ảnh chế, bởi ngoài ổ A và B dành cho ổ đĩa mềm đã lỗi thời, Windows chỉ hỗ trợ đến ổ Z. Khi kết nối thiết bị lưu trữ vượt quá giới hạn này, người dùng buộc phải gắn kết chúng vào các thư mục trống (tính năng mount point trên NTFS).
Câu hỏi thú vị được đặt ra: Tại sao Windows lại thiết kế theo kiểu kỳ lạ này? Nếu tuân thủ nguyên tắc “Occam’s razor” (đơn giản hóa mọi thứ), chỉ cần cấu trúc đường dẫn đầy đủ như hệ thống Unix là đủ. Các phân vùng vật lý hoàn toàn có thể ẩn phía sau hệ thống tệp ảo - điều mà Linux hay macOS đã làm từ lâu qua việc mount vào /mnt/c, /mnt/d… Thậm chí khi cài đặt môi trường MSYS/MINGW trên Windows, hệ thống cũng mô phỏng cách làm này.
Câu trả lời nằm ở lịch sử phát triển. Windows có nguồn gốc từ hệ điều hành MS-DOS của Microsoft. Tôi từng được tận mắt chứng kiến phiên bản MS-DOS cổ nhất trên chiếc IBM PC/XT cũ kỹ của bạn mình - cỗ máy với ổ cứng 10MB và chỉ 256KB RAM, chạy hệ điều hành PC-DOS 2.0.
Phiên bản DOS 2.0 này có cải tiến đột phá so với tiền thân 1.0: hỗ trợ ổ cứng và cấu trúc thư mục phân cấp. Trong cùng thời kỳ, Apple ][ với hệ điều hành Apple DOS vẫn còn giới hạn ở ổ đĩa mềm đơn giản, chỉ có thư mục gốc duy nhất. IBM PC không phải là máy tính cá nhân duy nhất thời bấy giờ - chiếc máy Z80 sản xuất tại Hồng Kông (Laser 310) của tôi cũng chạy hệ điều hành CP/M phổ biến lúc bấy giờ. Hệ thống này yêu cầu lập trình viên viết bằng hợp ngữ trên kiến trúc Z80/8080, thậm chí có cả “Z80 card” cắm mở rộng trên Apple ][ để chạy CP/M.
Khi Microsoft phát triển hệ điều hành cho IBM PC 8086, họ đã kế thừa nhiều ý tưởng từ CP/M, trong đó có khái niệm ký tự ổ đĩa. Thời kỳ đó, khi máy tính chưa có ổ cứng và RAM bé hơn dung lượng đĩa mềm, việc trang bị 2 ổ đĩa mềm A: và B: là tối ưu nhất để sao chép dữ liệu. Mỗi tệp tin được biểu diễn dưới dạng A:FILENAME.EXT - đây chính là nguồn gốc của ký tự ổ đĩa.
Đáng chú ý, IBM từng thất bại trong việc hợp tác với CP/M, buộc phải chọn MS-DOS. Về sau khi PC phổ biến, CP/M ngược lại phải tương thích ngược bằng cách phát triển DR-DOS chạy trên nền PC - nhiều người hẳn còn nhớ hệ điều hành này.
Khi MS-DOS phát triển đến phiên bản 2.0, với việc IBM PC/XT tích hợp ổ cứng 10MB, ký tự C: chính thức xuất hiện. Sự bùng nổ về không gian lưu trữ đòi hỏi cấu trúc thư mục phân cấp, nhưng tại sao Microsoft lại chọn dấu gạch chéo ngược “" thay vì “/” phổ biến trong hệ Unix?
Bí mật nằm ở di sản từ DEC. Các kỹ sư Microsoft thời đó có nền tảng từ hệ điều hành DEC vốn dùng “/” làm ký tự phân cách tham số dòng lệnh (khác với “-” trong Unix). Để tránh xung đột, hệ thống không thể dùng lại “/”. Trong khi DEC dùng dấu “.” làm phân cách thư mục, MS-DOS lại đã dùng “.” cho phần mở rộng tệp tin (kế thừa từ CP/M), dẫn đến việc chọn lựa bất đắc dĩ ký tự “" - quyết định khiến hàng triệu lập trình viên sau này “đau đầu”.
Đặc biệt trong các ngôn ngữ họ C, ký tự “" còn là ký tự thoát chuỗi, buộc phải viết là “\” trong mã nguồn - một rắc rối quen thuộc.
P/s: Nhân tiện kiểm tra thấy nhà cung cấp VPS Linode đang giảm giá gói dịch vụ xuống chỉ còn $5/tháng. Sau 7 năm sử dụng, tôi vẫn rất hài lòng với chất lượng ổn định của họ. Nếu bạn quan tâm đến dịch vụ VPS quốc tế, có thể đăng ký qua link giới thiệu này hoặc nhập mã giới thiệu: 538bab39bc1265a2ce54115d1f86e2bc81e4d133.