Tại sao lưu trữ các liên kết tự và cha mẹ (. Và ..) trong một mục nhập thư mục?


11

Hãy xem xét một hệ thống tệp được nhắm mục tiêu vào một số thiết bị nhúng không chỉ lưu trữ các tệp trong cấu trúc thư mục phân cấp. Hệ thống tệp này thiếu nhiều thao tác bạn có thể sử dụng trong các hệ thống như unix và Windows (ví dụ: quyền truy cập của nó hoàn toàn khác nhau và không bị ràng buộc với siêu dữ liệu được lưu trữ trong các thư mục). Hệ thống tệp này không cho phép bất kỳ loại liên kết cứng hoặc liên kết mềm nào, vì vậy mỗi tệp có một tên duy nhất trong cấu trúc cây nghiêm ngặt.

Có bất kỳ lợi ích nào khi lưu trữ một liên kết đến chính thư mục và đến cha mẹ của nó trong cấu trúc dữ liệu trên đĩa đại diện cho một thư mục không?

Hầu hết các hệ thống tập tin unix có ...các mục trên đĩa. Tôi tự hỏi tại sao họ không xử lý những người ở lớp VFS (trình điều khiển hệ thống tập tin chung). Đây có phải là một cổ vật lịch sử? Có một lý do chính đáng, và nếu vậy, chính xác, vì vậy tôi có thể xác định liệu nó có liên quan đến hệ thống nhúng của mình không?


Tôi luôn luôn nghĩ rằng họ chỉ ở đó hầu như để các chương trình có thể dễ dàng truy cập thư mục hiện tại và thư mục gốc. Câu hỏi thú vị, nhưng nó thuộc về đây?
Raphael

@Raphael Tôi có thể hiểu nếu bạn cho rằng câu hỏi của tôi quá rộng (→ không phải là một câu hỏi thực sự), hoặc có lẽ là không mang tính xây dựng, bởi vì nó có phần mở. Nhưng tôi không đồng ý rằng nó lạc đề: đó là về thiết kế hệ thống tập tin, làm thế nào mà nó không được áp dụng khoa học máy tính? Nếu bạn nghĩ nó lạc đề, vui lòng giải thích lý do của bạn về meta.
Gilles 'SO- ngừng trở nên xấu xa'

@Raphael Tôi đã chỉnh sửa câu hỏi của mình, hy vọng rằng rõ ràng quan điểm của tôi là của một nhà thiết kế hệ điều hành nhúng. Cảm ơn ý kiến ​​của bạn.
Gilles 'SO- ngừng trở thành ác quỷ'

Câu trả lời:


2

Có liên kết đến thư mục cha mẹ có ý nghĩa tốt với tôi. Nếu bạn không có chúng, bạn sẽ luôn cần phải làm việc với toàn bộ danh sách các thư mục. Vì vậy, ví dụ, /home/svick/Documents/sẽ phải được đại diện là { /, /home/, /home/svick/, /home/svick/Documents }. Nếu bạn không làm điều đó, bạn sẽ không thể tìm thấy thư mục mẹ (hoặc nó sẽ rất tốn kém). Điều này không chỉ không hiệu quả, mà còn nguy hiểm. Nếu bạn có hai danh sách trùng nhau như vậy, chúng có thể dễ dàng đồng bộ hóa nếu bạn di chuyển một số thư mục.

Mặt khác, nếu bạn có một tham chiếu đến thư mục mẹ, nó sẽ hiệu quả và an toàn hơn.

Tôi không thấy bất kỳ lý do để thực sự có một liên kết đến thư mục hiện tại. Nếu bạn có một cấu trúc đại diện cho một số thư mục và bạn muốn truy cập vào thư mục đó, việc sử dụng .luôn hoàn toàn không cần thiết. Do đó, tôi hy vọng rằng .liên kết không thực sự tồn tại trong cấu trúc hệ thống tập tin và chỉ là ảo.


2
Nhận xét giống nhau: tại sao làm điều đó trong mỗi hệ thống tập tin chứ không phải trong lớp VFS? Hầu hết các hệ thống tập tin Linux đều có ...các mục.
Gilles 'SO- ngừng trở thành ác quỷ'

Như tôi đã nói, tôi nghĩ nó hiệu quả hơn. Bạn có thể làm việc chỉ với thư mục hiện tại và chỉ truy cập cha mẹ của nó khi bạn cần. Nếu bạn không có liên kết cha, bạn sẽ luôn cần giữ tất cả các thư mục trong toàn bộ đường dẫn từ gốc trong bộ nhớ. Và bạn sẽ cần điều đó cho mỗi mục bạn sử dụng.
Svick

1
@svick: Gilles không so sánh việc có liên kết cha mẹ với việc không có liên kết cha mẹ. Anh ta so sánh việc có chúng trong hệ thống tệp thực tế với việc chúng được mô phỏng bởi một lớp mã trung gian (vfs) giữa hệ thống tệp thực tế và không gian người dùng.
quay lại

2

Bạn nhận được ít trường hợp đặc biệt. Trong nhiều tình huống, VFS có thể xử lý ".." vì nó xử lý bất kỳ tên thư mục nào khác.


3
Nếu các thư mục là ảo, chương trình (usermode tôi đoán) vẫn có thể xử lý nó như bất kỳ thư mục nào khác. Bạn không thực sự cần các liên kết để trình bày ở cấp độ lưu trữ.
Aryabhata

1
Có, nhưng tại sao không xử lý điều đó ở lớp VFS? Tại sao sẽ có bất kỳ lưu trữ liên quan?
Gilles 'SO- ngừng trở thành ác quỷ'

Tại sao mọi người thực hiện các danh sách được liên kết với một sentinel thay vì quan tâm đến trường hợp danh sách trống trong các chức năng thêm / xóa?
rgrig

@rgrig: Điều này chỉ xảy ra khi giao diện với việc thực hiện danh sách được liên kết được xem xét được viết bằng ngôn ngữ đặc biệt tệ trong việc xử lý các cấu trúc dữ liệu quy nạp (C, Java, v.v.). Ở đây vấn đề này không liên quan vì lớp VFS không thể truy cập trực tiếp từ quan điểm người dùng.
Stéphane Gimenez

@ StéphaneGimenez: Vấn đề này có liên quan, bởi vì VFS được viết bằng C.
rgrig

2

Lý do duy nhất tôi có thể tưởng tượng là kịch bản sau đây:

  1. Một triển khai ban đầu của một hệ thống tệp tồn tại với cùng định dạng thư mục nhưng các khái niệm về đường dẫn tệp và thư mục con không được xem xét tại thời điểm đó (Xem Hệ thống tệp PDP-7 Unix ).

  2. Sau đó mọi người nghĩ rằng giải pháp đường dẫn và thư mục con sẽ hữu ích!

  3. Để giữ một số lượng tương thích ngược với các triển khai cũ hơn, người ta đã quyết định rằng ...sẽ được lưu trữ trên đĩa giống như bất kỳ thư mục nào khác.

Vì vậy, có lẽ chúng ta còn lại với những đồ tạo tác vô dụng đó, chỉ vì khả năng tương thích ngược với phần mềm 40 năm tuổi? Kịch bản đáng tin cậy?


Lưu ý: Ngoài ra, việc thêm các mục này vào danh sách thư mục không phải là hoàn toàn ngu ngốc, vì dù sao bạn cũng cần lưu trữ số inode của thư mục cha mẹ thực sự của mình (hãy nhớ rằng các liên kết cứng trên thư mục được cho phép) và tham chiếu đến số inode riêng có thể là một kiểm tra vệ sinh tốt.


1

Tôi không thấy một lý do để thực hiện ...ở cả hai cấp độ hơn là ở cấp độ khác. Tuy nhiên, nếu bạn nhắm mục tiêu các hệ thống nhúng, bất kỳ lớp nào bạn có thể tiết kiệm có thể kiếm được bằng đô la, do đó, có thể có ý nghĩa khi thử và triển khai mọi thứ ở mức thấp nhất có thể.

Đối với nhu cầu chung của ..., làm thế nào bạn thể hiện các đường dẫn tương đối mà không có chúng? Ít nhất ..là không thể thiếu cho các đường dẫn rời khỏi cây con hiện tại. Nếu bạn không cần các đường dẫn như vậy (có thể cây là một cách nguyên thủy để mã hóa các đặc quyền truy cập?) Thì bạn không cần ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.