Cấu trúc hệ thống thư mục

Một phần của tài liệu Giáo trình môn Hệ Điều Hành PTIT (Trang 143 - 147)

CHƯƠNG 4 : HỆ THỐNG FILE

4.4. THƯ MỤC

4.4.3. Cấu trúc hệ thống thư mục

Như đã nói ở trên, thư mục chứa các khoản mục biểu diễn cho file. Khi số lượng file trong hệ thống tăng lên, kích thước của thư mục cũng tăng, việc tìm được file trong thư mục đó trở nên khó khăn. Các vấn đề khác cũng nảy sinh. Chẳng hạn hệ thống có nhiều người dùng và những người dùng khác nhau có thể chọn tên file trùng nhau. Để giải quyết các vấn đề tương tự, nhiều cách tổ chức khác nhau của hệ thống thư mục đã được sử dụng. Trong phần này, ta sẽ xem xét một số cấu trúc thông dụng nhất.

a. Thư mục một mức và hai mức

Thư mục một mức là kiểu tổ chức thư mục đơn giản nhất hay nói chính xác hơn là khơng có cấu trúc gì cả. Hệ thống chỉ có một thư mục duy nhất và tất cả các file được giữ trong thư mục này. Thư mục một mức được minh hoạ trên hình 4.4.a.

Cách tổ chức thư mục một mức có một số nhược điểm lớn. Do các file được sắp xếp trong một thư mục duy nhất nên để có thể phân biệt, tên file không được phép trùng nhau. Khi số lượng file tăng, việc tìm các tên khác nhau cho file là không dễ dàng. Đặc biệt, khi có nhiều người cùng sử dụng hệ thống rất dễ xẩy ra khả năng nhiều người chọn tên file giống nhau. Một ví dụ dễ thấy khi tất cả sinh viên một lớp cùng lập trình một bài tập và lưu chương trình của mình trong thư mục duy nhất. Ngoài ra, trong trường hợp độ dài file bị hạn chế tương đối ngắn, số tổ hợp tên file có thể cũng khơng cho phép chọn nhiều tên file vừa có nghĩa vừa khác nhau.

H×nh 4.4: Tỉ chøc th- môc (a) Mét møc. (b) Hai møc

= Thư mục = File A B C Thư mục người dùng Thư mục gốc (b ) (a) PTIT

Một nhược điểm nữa của thư mục một mức là số lượng file trong thư mục rất lớn, do vậy việc tìm được file trong thư mục sẽ tốn nhiều thời gian.

Để tránh tình trạng nhiều người sử dụng chọn cùng tên file, một giải pháp đơn giản là phân cho mỗi người một thư mục riêng chỉ chứa các file do người đó tạo. Mặc dù tất cả các file vẫn được chứa trên cùng một đĩa, chúng được chia thành các nhóm lơgic theo từng người dùng. Hệ thống vẫn duy trì một thư mục gọi là thư mục gốc. Các khoản mục ứng với thư mục người dùng được chứa trong thư mục gốc này. Đây là phương pháp tổ chức thư mục hai mức (Hình 4.4.b).

Mỗi khi người dùng truy cập file, file sẽ được tìm kiếm trong thư mục ứng với tên người đó (tên đăng nhập). Do vậy, những người dùng khác nhau có thể đặt tên file trùng nhau mà không sợ lẫn lộn. Tên file chỉ cần khác nhau trong từng thư mục.

Các thư mục người dùng có thể được tạo ra và xố đi nếu cần. Thơng thường việc tạo và xoá thư mục người dùng sẽ được giao cho quản trị mạng. Đây là người dùng có các quyền đặc biệt, trong đó có các quyền liên quan tới quản lý hệ thống thư mục.

Sau khi đã chia thư mục thành hai mức, mỗi người dùng sẽ làm việc với tập hợp các file trong thư mục của mình. Cách phân chia file độc lập như vậy rất thuận tiện khi người sử dụng làm việc độc lập với nhau. Tuy nhiên trong q trình làm việc, có thể xuất hiện nhu cầu sử dụng chung file. Một số hệ thống cho phép người dùng truy cập thư mục người dùng khác nếu được cấp quyền. Một số hệ thống hạn chế người dùng trong thư mục của mình.

Nếu việc truy cập thư mục của người khác được cho phép thì ngồi tên file, người dùng phải chỉ rõ file cần truy cập nằm trong thư mục nào. Nói cách khác, người dùng phải cung cấp đường dẫn tới file. Chi tiết về đường dẫn sẽ được trình bầy trong phần sau.

Ngoài các file do người dùng tạo ra, trong hệ thống còn tồn tại một loạt những file thường được nhiều người dùng truy cập tới như file hệ thống, những tiện ích.v.v.. Để sử dụng được các chương trình như vậy có thể chép chúng vào từng thư mục của từng người dùng. Cách này rõ ràng gây lãng phí khơng gian nhớ vì phải lưu nhiều bản sao của chương trình.

Một cách giải quyết tốt hơn và được nhiều hệ điều hành sử dụng là lưu các chương trình dùng chung vào một thư mục đặc biệt. Thư mục này có thể tạo ra như dành cho một người dùng đặc biệt nào đó. Khi người chạy một chương trình. Chương trình đó trước tiên được tìm trong thư mục của người dùng. Nếu khơng tìm thấy, hệ điều hành sẽ chuyển sang tìm kiếm trong thư mục đặc biệt. Hệ điều hành UNIX (và tất nhiên là Linux) cũng sử dụng kỹ thuật tương tự.

b. Thư mục cấu trúc cây

Cấu trúc cây là phát triển ý tưởng của cấu trúc hai mức. Thay chỉ chứa các file, mỗi thư mục con lại có thể chứa các thư mục con khác và các file. Thư mục con được nhóm một cách lôgic theo một tiêu chí nào đó, chẳng hạn thư mục con chứa các file của cùng một người dùng, thư mục con chứa các chương trình và dữ liệu liên quan tới một ứng dụng.v.v. Hệ thống thư mục khi đó có thể biểu diễn phân cấp như một cây. Các cành là thư mục, còn lá là các file. Dễ dàng nhận thấy, thư mục hai mức là trường hợp riêng của cấu trúc cây này.

Hình 4.5: Thư mục dạng cây

Mỗi thư mục hoặc thư mục con khi đó sẽ chứa tập hợp các file và các thư mục con mức dưới. Để phân biệt khoản mục của file với khoản mục chỉ tới thư mục con mức dưới, người ta thường sử dụng một bit đặc biệt chứa trong khoản mục. Nếu bit này bằng 1, thì đó là khoản mục của thư mục mức dưới, nếu bằng 0, đó là khoản mục của file.

Bản thân thư mục (hoặc thư mục con) cũng được lưu trữ trên đĩa như một file song được hệ điều hành sử dụng khác với các file thông thường. Để tạo và xoá thư mục con, hệ điều hành định nghĩa những lời gọi hệ thống riêng, khác với lời gọi hệ thống dành việc tạo và xoá file.

Trong trường hợp thư mục có chứa thư mục mức dưới hoặc file, việc xoá thư mục sẽ ảnh hưởng tới các thư mục mức dưới và file đó. Nói chung có hai cách giải quyết trong trường hợp này. Một số hệ điều hành như MS-DOS khơng cho phép xố thư mục khi thư mục khơng rỗng. Người dùng phải xố hết các file và thư mục mức dưới của một thư mục trước khi xố thư mục đó. Ngược lại, một số hệ điều hành như UNIX, Linux cho phép xố các thư mục khơng rỗng. Khi một thư mục bị xoá (bằng lệnh rm), tất cả các các file và thư mục mức dưới chứa trong đó cũng bị xố theo. Cách này rất tiện lợi, cho phép tiết kiệm thời gian và cơng sức khi cần xố số lượng thư mục. Tuy nhiên việc cho phép xố thư mục khơng rỗng có thể gây mất mát nhiều file và thư mục con do một lệnh xố vơ ý có thể xố cả một nhánh lớn của cây thư mục. Người dùng phải hết sức cẩn thận khi sử dụng nhãng lệnh xoá như vậy.

Tại mỗi thời điểm, người dùng làm việc với một thư mục gọi là thư mục hiện thời hay thư mục làm việc. Trong q trình làm việc, người dùng có thể di chuyển sang thư mục khác tức là thay đổi thư mục hiện thời. Việc thay đổi thư mục được thực hiện bằng lời gọi hệ thống tương ứng. Nếu người dùng gõ lệnh đổi thư mục từ bộ dịch lệnh (shell) thì bộ dịch lệnh sẽ gọi lời gọi hệ thống này. Trong trường hợp người dùng truy cập một file mà không thông báo cụ thể thư mục chứa file đó thì file được tìm kiếm trước tiên trong thư mục hiện thời sau đó mở

Thư mục gốc

= Thư mục = File

rộng sang các thư mục được quy định trong đường tìm kiếm (search path) như mô tả trong phần thư mục hai mức.

Một số hệ điều hành như Linux, Windows NT cho phép quy định thư mục hiện thời khi người dùng mới đăng nhập vào hệ thống. Thư mục này thường chứa phần lớn các file mà người dùng sẽ sử dụng và cịn được gọi là thư mục theo mặc định. Thơng tin về thư mục mặc định được ghi trong tài khoản người dùng cùng với các thông tin bảo mật khác và được hệ điều hành đọc khi người dùng đăng nhập.

* Tổ chức cây thư mục cho từng đĩa: Trong một số hệ thống file như FAT của DOS cây thư mục được xây dựng cho từng đĩa. Hệ thống thư mục sẽ được được coi như “rừng” trong đó mỗi cây “mọc” trên một đĩa. Muốn tới được một cây thư mục, trước tiên ta phải chỉ ra đĩa tương ứng. Trong các hệ điều hành khác như Linux, toàn hệ thống chỉ gồm một cây thư mục to, các đĩa sẽ là các cành mọc ra từ cây này. Thực chất, mỗi đĩa là một hệ thống file và được gắn (mount) vào hệ thống thư mục chung. Rõ ràng cách tổ chức sau mang tính trừu tượng hố cao hơn cách đầu. Người dùng thậm chí khơng cần quan tâm tới việc hệ thống có bao nhiêu đĩa và file đang được lưu trữ trên đĩa nào.

c. Thư mục cấu trúc đồ thị khơng tuần hồn

Ta hãy xét ví dụ sau. Hai người cùng cần sử dụng một số file, chẳng hạn khi cả hai cùng làm việc với một dự án nào đó. Những file này có thể được cất vào một thư mục con dành riêng cho dự án. Tuy nhiên, để thuận tiện cho công việc, cần phải làm sao để thư mục con này có mặt trong cả hai thư mục riêng của hai người. Đồng thời, đó phải là bản chính của thư mục chứ không phải các bản sao. Việc tạo bản sao có thể gây mất đồng bộ dữ liệu - khi người này sửa đổi, người khác không thấy ngay được sửa đổi đó và vẫn làm việc với bản cũ. Để hai (hoặc nhiều) người có thể sử dụng chung file và thư mục, cần chia sẻ file và thư mục đó sao cho chúng có thể xuất hiện ở nhiều thư mục riêng khác nhau. Cấu trúc cây trình bầy ở phần trước không cho phép thực hiện chia sẻ kiểu này.

Hình 4.6: Thư mục cấu trúc đồ thị khơng tuần hồn

Thư mục gốc PTIT

Một cấu trúc thư mục cho phép file hoặc thư mục con xuất hiện trong nhiều thư mục khác nhau được gọi là cấu trúc graph khơng tuần hồn (acyclic graph). Đây là một cấu trúc graph khơng chứa vịng (Hình 4.6). Dễ dàng nhận thấy, cấu trúc graph khơng tuần hồn là dạng mở rộng của cấu trúc cây, trong đó lá và cành có thể đồng thời thuộc về những cành khác nhau.

Cách thuận tiện nhất để triển khai graph khơng tuần hồn - được sử dụng trong Linux - là sử dụng liên kết (link). Liên kết thực chất là con trỏ tới thư mục hoặc file khác. Trong ví dụ nói trên, hai thư mục của hai người dùng sẽ khơng chứa thư mục con có các chương trình dùng chung mà chỉ chứa các liên kết (con trỏ) tới thư mục con này. Liên kết có thể được sử dụng dưới dạng đường dẫn tuyệt đối hoặc tương đối tới thư mục cần liên kết. Khi một khoản mục của thư mục được đánh dấu là liên kết, thay vì tìm file trong thư mục đó, đường dẫn tới file sẽ được sử dụng để truy cập.

Một cách khác cũng cho phép tạo cấu trúc kiểu này là tạo ra các bản sao của các file và thư mục cần chia sẻ rồi chứa vào những thư mục khác nhau. Hệ điều hành sau đó phải theo dõi để đảm bảo tính đồng bộ và nhất quán cho các bản sao đó. Khi một bản sao bị thay đổi, hệ điều hành phải chép thay đổi này sang các bản sao khác.

Mặc dù thư mục cấu trúc graph khơng tuần hồn cho phép quản lý hệ thống thư mục mềm dẻo hơn cấu trúc cây song cũng phức tạp hơn cấu trúc cây rất nhiều. Do file và thư mục có mặt ở nhiều nơi khác nhau trong hệ thống thư mục, trong quá trình sao lưu và thống kê, chẳng hạn khi ta cần đếm số lượng file, phải tính tới các liên kết để tránh sao lưu hoặc thống kê cùng một file nhiều lần.

Một vấn đề cần quan tâm nữa liên quan tới việc xoá file. Việc xoá file đã được chia sẻ phải bao gồm xố các liên kết trỏ tới file đó. Trong các trường hợp liên kết khơng bị xố, các liên kết này tiếp tục trỏ tới một file đã không tồn tại hoặc vào vùng không gian đĩa đã được giải phóng. Các thao tác truy cập tiếp theo thữc hiện với liên kết sẽ sinh ra lỗi. Thông thường vấn đề này được giải quyết bằng cách tìm và xố tất cả các liên kết đến file sau khi đã xoá file.

Một phần của tài liệu Giáo trình môn Hệ Điều Hành PTIT (Trang 143 - 147)