Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Hệ Điều Hành – V1.0
HỆ THỐNG TẬP TIN
I Mục đích
Sau khi học xong chương này, người học nắm được những kiến thức sau:
• Hiểu các khía cạnh khác nhau của tập tin và cấu trúc thư mục
• Hiểu các cơ chế quản lý, kiểm soát, bảo vệ tập tin khi có nhiều người cùng
truy xuất
• Hiểu cách chia sẻ tập tin giữa nhiều quá trình, người dùng và máy tính
II Giới thiệu
Đối với hầu hết người dùng, hệ thống tập tin là diện mạo dễ nhìn thấy nhất của
hệ điều hành. Nó cung cấp cơ chế cho việc lưu trữ trực tuyến và truy xuất dữ liệu,
chương trình của hệ điều hành và tất cả người dùng của hệ thống máy tính. Hệ thống
tập tin chứa hai phần riêng biệt: tập hợp các tập tin (files), mỗi tập tin lưu trữ dữ liệu
có liên quan và cấu trúc thư mục (directory structure) mà nó tổ chức và cung cấp
thông tin về tất cả tập tin trong hệ thống. Một số hệ thống tập tin còn có thêm phần
thứ ba , các phân khu (partitions) mà nó được dùng để tách rời tập hợp các thư mục
lớn luận lý và vật lý.
Trong chương này chúng ta xét các khía cạnh khác nhau của tập tin và cấu trúc
thư mục. Chúng ta cũng thảo luận các cách để quản lý việc bảo vệ tập tin (file
protection), cần thiết khi nhiều người dùng truy xuất các tập tin và chúng ta muốn
kiểm soát ai và cách gì truy xuất tập tin. Cuối cùng, chúng ta thảo luận việc chia sẻ
giữa nhiều quá trình, người dùng, và máy tính.
III Khái niệm tập tin
Các máy tính lưu trữ thông tin trên nhiều phương tiện lưu trữ khác nhau, như
đĩa từ, băng từ, đĩa quang. Để hệ thống máy tính tiện dụng, hệ điều hành cung cấp
một tầm nhìn luận lý không đổi của việc lưu trữ thông tin. Hệ điều hành trừu tượng từ
các thuộc tính vật lý của các thiết bị lưu trữ của nó đến định nghĩa một đơn vị lưu trữ
luận lý là tập tin (file). Tập tin được ánh xạ bởi hệ điều hành trên các thiết bị vật lý.
Các thiết bị lưu trữ được dùng thường ổn định vì thế nội dung không bị mất khi mất
điện hay khởi động lại hệ thống.
Một tập tin là một tập thông tin có liên quan được ghi trên thiết bị lưu trữ phụ.
Từ quan điểm người dùng, một tập tin là phần nhỏ nhất của thiết bị lưu trữ phụ luận
lý; nghĩa là dữ liệu không thể được viết tới thiết bị lưu trữ phụ trừ khi chúng ở trong
một tập tin. Các tập tin dữ liệu có thể là số, chữ, ký tự số hay nhị phân. Các tập tin có
thể có dạng bất kỳ như tập tin văn bản, hay có thể được định dạng không đổi. Thông
thường, một tập tin là một chuỗi các bits, bytes, dòng hay mẫu tin, được định nghĩa
bởi người tạo ra nó. Do đó, khái niệm tập tin là cực kỳ tổng quát.
Thông tin trong một tập tin được định nghĩa bởi người tạo. Nhiều loại thông tin
khác nhau có thể được lưu trữ trong một tập tin-chương trình nguồn, chương trình đối
tượng, chương trình thực thi, dữ liệu số, văn bản, mẫu tin, hình ảnh đồ hoạ, âm
thanh, Một tập tin có một cấu trúc được định nghĩa cụ thể dựa theo loại của nó. Một
tập tin văn bản là một chuỗi các ký tự được tổ chức thành những dòng. Một tập tin
Biên soạn: Th.s Nguyễn Phú Trường - 09/2005 Trang
200
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Hệ Điều Hành – V1.0
nguồn là một chuỗi các thủ tục và hàm, được tổ chức khi khai báo được theo sau bởi
các câu lệnh có thể thực thi. Một tập tin đối tượng là một chuỗi các bytes được tổ
chức thành các khối có thể hiểu được bởi bộ liên kết của hệ thống. Một tập tin có thể
thực thi là một chuỗi các phần mã mà bộ nạp có thể mang vào bộ nhớ và thực thi.
III.1 Thuộc tính tập tin
Để tiện cho người dùng, một tập tin được đặt tên và được tham khảo bởi tên
của nó. Một tên thường là một chuỗi các ký tự, thí dụ: example.c. Một số hệ thống có
sự phân biệt giữa ký tự hoa và thường trong tên, ngược lại các hệ thống khác xem hai
trường hợp đó là tương đương. Khi một tập tin được đặt tên, nó trở nên độc lập với
quá trình, người dùng, và thậm chí với hệ thống tạo ra nó. Thí dụ, một người dùng có
thể tạo tập tin example.c, ngược lại người dùng khác có thể sửa tập tin đó bằng cách
xác định tên của nó. Người sở hữu tập tin có thể ghi tập tin tới đĩa mềm, gởi nó vào
email hay chép nó qua mạng và có thể vẫn được gọi example.c trên hệ thống đích.
Một tập tin có một số thuộc tính khác mà chúng rất khác nhau từ một hệ điều
hành này tới một hệ điều hành khác, nhưng điển hình chúng gồm:
• Tên (name): tên tập tin chỉ là thông tin được lưu ở dạng mà người dùng có thể
đọc
• Định danh (identifier): là thẻ duy nhất, thường là số, xác định tập tin trong hệ
thống tập tin; nó là tên mà người dùng không thể đọc
• Kiểu (type): thông tin này được yêu cầu cho hệ thống hỗ trợ các kiểu khác
nhau
• Vị trí (location): thông tin này là một con trỏ chỉ tới một thiết bị và tới vị trí
tập tin trên thiết bị đó.
• Kích thước (size): kích thước hiện hành của tập tin (tính bằng byte, word hay
khối) và kích thước cho phép tối đa chứa trong thuộc tính này.
• Giờ (time), ngày (date) và định danh người dùng (user identification): thông
tin này có thể được lưu cho việc tạo, sửa đổi gần nhất, dùng gần nhất. Dữ liệu
này có ích cho việc bảo vệ, bảo mật, và kiểm soát việc dùng.
Thông tin về tất cả tập tin được giữ trong cấu trúc thư mục (directory) nằm
trong thiết bị lưu trữ phụ. Điển hình, mục từ thư mục chứa tên tập tin và định danh
duy nhất của nó. Định danh lần lượt xác định thuộc tính tập tin khác. Trong hệ thống
có nhiều tập tin, kích thước của chính thư mục có thể là Mbyte. Bởi vì thư mục giống
tập tin, phải bền, chúng phải được lưu trữ trên thiết bị và mang vào bộ nhớ khi cần.
III.2 Thao tác tập tin
Tập tin là kiểu dữ liệu trừu tượng. Để định nghĩa một tập tin hợp lý, chúng ta
cần xem xét các thao tác có thể được thực hiện trên các tập tin. Hệ điều hành cung cấp
lời gọi hệ thống để thực hiện các thao tác này
• Tạo tập tin: hai bước cần thiết để tạo một tập tin. Thứ nhất, không gian
trong hệ thống tập tin phải được tìm cho tập tin. Thứ hai, một mục từ cho
tập tin mới phải được tạo trong thư mục. Mục từ thư mục ghi tên tập tin và
vị trí trong hệ thống tập tin, và các thông tin khác.
• Mở: trước khi mở tập tin, quá trình phải mở nó. Mục tiêu của việc mở là
cho phép hệ thống thiết lập một số thuộc tính và địa chỉ đĩa trong bộ nhớ
để tăng tốc độ truy xuất.
Biên soạn: Th.s Nguyễn Phú Trường - 09/2005 Trang
201
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Hệ Điều Hành – V1.0
• Đóng: khi chấm dứt truy xuất, thuộc tính và địa chỉ trên đĩa không còn
dùng nữa, tập tin được đóng lại để giải phóng vùng nhớ.
• Ghi: để ghi một tập tin, chúng ta thực hiện lời gọi hệ thống xác định tên
tập tin và thông tin được ghi tới tập tin. Với tên tập tin, hệ thống tìm thư
mục để xác định vị trí của tập tin. Hệ thống phải giữ một con trỏ viết tới vị
trí trong tập tin nơi mà thao tác viết tiếp theo sẽ xảy ra. Con trỏ viết phải
được cập nhật bất cứ khi nào thao tác viết xảy ra.
• Chèn cuối: giống thao tác ghi nhưng dữ liệu luôn được ghi vào cuối tập
tin
• Đọc: để đọc từ một tập tin, chúng ta dùng lời gọi hệ thống xác định tên tập
tin và nơi (trong bộ nhớ) mà khối tiếp theo của tập tin được đặt. Thư mục
được tìm mục từ tương ứng và hệ thống cần giữ con trỏ đọc tới vị trí trong
tập tin nơi thao tác đọc tiếp theo xảy ra.
• Xoá: để xoá một tập tin, chúng ta tìm kiếm thư mục với tên tập tin được
cho. Tìm mục từ tương ứng, giải phóng không gian tập tin để không gian
này có thể dùng lại bởi tập tin khác và xoá mục từ thư mục.
• Tìm: thư mục được tìm mục từ tương ứng và vị trí con trỏ hiện hành được
đặt tới giá trị được cho
• Lấy thuộc tính: lấy thuộc tính tập tin cho quá trình
• Đổi tên: thay đổi tên tập tin đã tồn tại
III.3 Các kiểu tập tin
Khi thiết kế một hệ thống tập tin, chúng ta luôn luôn xem xét hệ điều hành nên
tổ chức và hỗ trợ các kiểu tập tin nào. Nếu hệ điều hành nhận biết kiểu của một tập
tin, nó có thể thao tác trên tập tin đó trong các cách phù hợp.
Một kỹ thuật chung cho việc cài đặt các kiểu tập tin là chứa kiểu đó như một
phần của tên tập tin. Tên tập tin được chia làm hai phần-tên và phần mở rộng, thường
được ngăn cách bởi dấu chấm. Trong trường hợp này, người dùng và hệ điều hành có
thể biết kiểu tập tin là gì từ tên.
Các hệ điều hành thường hỗ trợ các kiểu tập tin sau:
• Tập tin thường: là tập tin văn bản hay tập tin nhị phân chứa thông tin của
người sử dụng
• Thư mục: là những tập tin hệ thống dùng để lưu giữ cấu trúc của hệ thống
tập tin
• Tập tin có ký tự đặc biệt: liên quan đến nhập/xuất thông qua các thiết bị
nhập/xuất tuần tự như màn hình, máy in,
• Tập tin khối: dùng để truy xuất trên thiết bị đĩa
III.4 Cấu trúc tập tin
Các kiểu tập tin cũng có thể được dùng để hiển thị cấu trúc bên trong của một
tập tin. Ngoài ra, các tập tin cụ thể phải phù hợp cấu trúc được yêu cầu để hệ điều
hành có thể hiểu. Một số hệ điều hành mở rộng ý tưởng này thành tập hợp các cấu
trúc tập tin được hỗ trợ hệ thống, với những tập hợp thao tác đặc biệt cho việc thao
tác các tập tin với những cấu trúc đó.
Các hệ điều hành thường hỗ trợ ba cấu trúc tập tin thông dụng là:
• Không có cấu trúc: tập tin là một dãy tuần tự các byte
• Có cấu trúc: tập tin là một dãy các mẫu tin có kích thước cố định
Biên soạn: Th.s Nguyễn Phú Trường - 09/2005 Trang
202
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Hệ Điều Hành – V1.0
• Cấu trúc cây: tập tin gồm một cây của những mẫu tin không cần thiết có
cùng chiều dài, mỗi mẫu tin có một trường khoá giúp việc tìm kiếm nhanh
hơn
IV Các phương pháp truy xuất
Các tập tin lưu trữ thông tin. Khi nó được dùng, thông tin này phải được truy
xuất và đọc vào bộ nhớ máy tính. Thông tin trong tập tin có thể được truy xuất trong
nhiều cách.
IV.1 Truy xuất tuần tự
Một phương pháp đơn giản nhất là truy xuất tuần tự. Thông tin trong tập tin
được xử lý có thứ tự, một mẫu tin này sau mẫu tin kia. Chế độ truy xuất này là thông
dụng nhất. Thí dụ, bộ soạn thảo và biên dịch thường truy xuất các tập tin trong cách
thức này.
Nhóm các thao tác trên một tập tin là đọc và viết. Một thao tác đọc đọc phần
tiếp theo của tập tin và tự động chuyển con trỏ tập tin để ghi vết vị trí nhập/xuất.
Tương tự, một thao tác viết chèn vào cuối tập tin và chuyển tới vị trí cuối của tài liệu
vừa được viết (cuối tập tin mới). Trên một vài hệ thống, một tập tin như thế có thể
được đặt lại tới vị trí bắt đầu và một chương trình có thể nhảy tới hay lùi n mẫu tin.
Truy xuất tuần tự được mô tả như hình IX-1.
Hình 0-1 Truy xuất tập tin tuần tự
IV.2 Truy xuất trực tiếp
Một phương pháp khác là truy xuất trực tiếp (hay truy xuất tương đối). Một
tập tin được hình thành từ các mẫu tin luận lý có chiều dài không đổi. Các mẫu tin này
cho phép người lập trình đọc và viết các mẫu tin nhanh chóng không theo thứ tự.
Phương pháp truy xuất trực tiếp dựa trên mô hình đĩa của tập tin, vì đĩa cho phép truy
xuất ngẫu nhiên tới bất cứ khối tập tin. Để truy xuất trực tiếp, tập tin được hiển thị
như một chuỗi các khối hay mẫu tin được đánh số. Tập tin truy xuất trực tiếp cho
phép các khối bất kỳ được đọc hay viết. Do đó, chúng ta có thể đọc khối 14, sau đó
đọc khối 53 và sau đó viết khối 7. Không có bất kỳ sự hạn chế nào trên thứ tự đọc hay
viết cho một tập tin truy xuất trực tiếp
Các tập tin truy xuất trực tiếp được dùng nhiều cho truy xuất tức thời tới một
lượng lớn thông tin. Cơ sở dữ liệu thường là loại này. Khi một truy vấn tập trung một
chủ đề cụ thể, chúng ta tính khối nào chứa câu trả lời và sau đó đọc khối đó trực tiếp
để cung cấp thông tin mong muốn.
Không phải tất cả hệ điều hành đều hỗ trợ cả hai truy xuất tuần tự và trực tiếp
cho tập tin. Một số hệ thống cho phép chỉ truy xuất tập tin tuần tự; một số khác cho
Biên soạn: Th.s Nguyễn Phú Trường - 09/2005 Trang
203
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Hệ Điều Hành – V1.0
phép chỉ truy xuất trực tiếp. Một số hệ điều hành yêu cầu một tập tin được định nghĩa
như tuần tự hay trực tiếp khi nó được tạo ra; như tập tin có thể được truy xuất chỉ
trong một cách không đổi với khai báo của nó. Tuy nhiên, chúng ta dễ dàng mô phỏng
truy xuất tuần tự trên tập tin truy xuất trực tiếp. Nếu chúng ta giữ một biến cp để xác
định vị trí hiện tại thì chúng ta có thể mô phỏng các thao tác tập tin tuần tự như được
hiển thị trong hình IX-2. Mặc dù, không đủ và không gọn để mô phỏng một tập tin
truy xuất trực tiếp trên một tập tin truy xuất tuần tự.
Hình 0-2 Mô phỏng truy xuất tuần tự trên truy xuất trực tiếp
IV.3 Các phương pháp truy xuất khác
Các phương pháp truy xuất khác có thể được xây dựng trên cơ sở của phương
pháp truy xuất trực tiếp. Các phương pháp khác thường liên quan đến việc xây dựng
chỉ mục cho tập tin. Chỉ mục chứa các con trỏ chỉ tới các khối khác. Để tìm một mẫu
tin trong tập tin, trước hết chúng ta tìm chỉ mục và sau đó dùng con trỏ để truy xuất
tập tin trực tiếp và tìm mẫu tin mong muốn.
Với những tập tin lớn, chỉ mục tập tin có thể trở nên quá lớn để giữ trong bộ
nhớ. Một giải pháp là tạo chỉ mục cho tập tin chỉ mục. Tập tin chỉ mục chính chứa các
con trỏ chỉ tới các tập tin chỉ mục thứ cấp mà nó chỉ tới các thành phần dữ liệu thật sự.
Hình 0-3 Thí dụ về chỉ mục và các tập tin liên quan
Biên soạn: Th.s Nguyễn Phú Trường - 09/2005 Trang
204
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Hệ Điều Hành – V1.0
V Cấu trúc thư mục
Các hệ thống tập tin của máy tính có thể rất lớn về số lượng. Một số hệ thống
lưu trữ hàng triệu tập tin trên các terabytes đĩa. Để quản lý tất cả dữ liệu này, chúng ta
cần tổ chức lại chúng. Việc tổ chức này thường được thực hiện hai phần.
Thứ nhất, đĩa được chia thành một hay nhiều phân khu (partition) hay phân
vùng (volumes). Điển hình, mỗi đĩa trên hệ thống chứa ít nhất một phân khu. Phân
khu này là cấu trúc cấp thấp mà các tập tin và thư mục định vị. Thỉnh thoảng các phân
khu được dùng để cung cấp nhiều vùng riêng rẻ trong một đĩa, mỗi phân khu được
xem như một thiết bị lưu trữ riêng, trái lại các hệ thống khác cho phép các phân khu
có dung lượng lớn hơn một đĩa để nhóm các đĩa vào một cấu trúc luận lý và cấu trúc
tập tin, và có thể bỏ qua hoàn toàn những vấn đề cấp phát không gian vật lý cho các
tập tin. Cho lý do này, các phân khu có thể được xem như các đĩa ảo. Các phân khu
cũng có thể lưu trữ nhiều hệ điều hành, cho phép hệ thống khởi động và chạy nhiều
hơn một hệ điều hành.
Thứ hai, mỗi phân khu chứa thông tin về các tập tin trong nó. Thông tin này giữ
trong những mục từ trong một thư mục thiết bị hay bảng mục lục phân vùng (volume
table of contents). Thư mục thiết bị (được gọi đơn giản là thư mục) ghi thông tin-như
tên, vị trí, kích thước và kiểu-đối với tất cả tập tin trên phân khu (như hình IX-4).
Hình 0-4 tổ chức hệ thống tập tin điển hình
Thư mục có thể được hiển thị như một bảng danh biểu dịch tên tập tin thành
các mục từ thư mục. Các thư mục có thể được tổ chức trong nhiều cách. Chúng ta
muốn có thể chèn mục từ, xoá mục từ, tìm kiếm một mục từ và liệt kê tất cả mục từ
trong thư mục. Trong phần này, chúng ta xem xét nhiều cơ chế định nghĩa cấu trúc
luận lý của hệ thống thư mục. Khi xem xét một cấu trúc thư mục cụ thể, chúng ta cần
nhớ các thao tác được thực hiện trên một thư mục.
Biên soạn: Th.s Nguyễn Phú Trường - 09/2005 Trang
205
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Hệ Điều Hành – V1.0
• Tìm kiếm tập tin: chúng ta cần tìm trên cấu trúc thư mục để xác định mục
từ cho một tập tin cụ thể.
• Tạo tập tin: một tập tin mới cần được tạo và được thêm tới thư mục.
• Xoá tập tin: khi một tập tin không còn cần, chúng ta muốn xoá nó ra khỏi
thư mục.
• Liệt kê thư mục: chúng ta có thể liệt kê các tập tin trong thư mục và nội
dung của mục từ thư mục cho mỗi tập tin trong danh sách.
• Đổi tên tập tin: vì tên tập tin biểu diễn nội dung của nó đối với người
dùng, tên có thể thay đổi khi nội dung hay việc sử dụng tập tin thay đổi.
Đổi tên tập tin có thể cho phép vị trí của nó trong cấu trúc thư mục được
thay đổi.
• Duyệt hệ thống tập tin: chúng ta muốn truy xuất mỗi thư mục và mỗi tập
tin trong cấu trúc thư mục.
Chúng ta sẽ mô tả các cơ chế thông dụng nhất để định nghĩa cấu trúc luận lý
của một thư mục.
V.1 Cấu trúc thư mục dạng đơn cấp
Cấu trúc thư mục đơn giản nhất là thư mục đơn cấp. Tất cả tập tin được chứa
trong cùng thư mục như được hiển thị trong hình IX-5 dưới đây:
Hình 0-5 Thư mục đơn cấp
Tuy nhiên, thư mục đơn cấp có nhiều hạn chế khi số lượng tập tin tăng hay khi
hệ thống có nhiều hơn một người dùng. Vì tất cả tập tin được chứa trong cùng thư
mục, chúng phải có tên khác nhau. Nếu hai người dùng đặt tên tập tin dữ liệu của họ
là test thì qui tắc tên duy nhất bị xung đột. Mặc dù các tên tập tin thường được chọn
để phản ánh nội dung của tập tin, chúng thường bị giới hạn chiều dài. Hệ điều hành
MS-DOS cho phép chỉ 11 ký tự cho tên; UNIX cho phép 255 ký tự.
Người dùng trên thư mục đơn cấp có thể gặp phải khó khăn để nhớ tên của tất
cả tập tin, khi số tập tin tăng. Nếu trên một hệ thống máy tính có hàng trăm tập tin thì
việc ghi lại vết của quá nhiều tập tin là một tác vụ nặng nề.
V.2 Cấu trúc thư mục dạng hai cấp
Một thư mục đơn cấp dẫn đến sự lẫn lộn giữa tên các tập tin của nhiều người
dùng khác nhau. Giải pháp chuẩn là tạo một thư mục riêng cho mỗi người dùng.
Trong cấu trúc thư mục hai cấp, mỗi người dùng có thư mục tập tin riêng cho
họ (user file directory-UFD). Mỗi UFD có một cấu trúc tương tự nhưng các danh sách
chứa các tập tin của một người dùng. Khi công việc của người dùng bắt đầu hay
người dùng đăng nhập, thư mục tập tin chính của hệ thống (master file directory)
được tìm kiếm. MFD được lập chỉ mục bởi tên người dùng hay số tài khoản và mỗi
mục từ chỉ tới UFD cho người dùng đó (như hình IX-6)
Biên soạn: Th.s Nguyễn Phú Trường - 09/2005 Trang
206
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Hệ Điều Hành – V1.0
Hình 0-6 thư mục hai cấp
Khi người dùng tham khảo tới một tập tin cụ thể, chỉ UFD của chính người
dùng đó được tìm kiếm. Do đó, các người dùng khác nhau có thể có các tập tin với
cùng một tên, với điều kiện là tất cả tên tập tin trong mỗi UFD là duy nhất.
Để tạo một tập tin cho một người dùng, hệ điều hành chỉ tìm UFD của người
dùng đó để xác định một tập tin khác cùng tên có tồn tại hay không. Để xóa một tập
tin, hệ điều hành giữ lại việc tìm kiếm của nó tới UFD cục bộ; do đó, nó không thể
xóa nhằm tập tin của người dùng khác có cùng tên.
Các thư mục người dùng phải được tạo và xóa khi cần thiết. Một chương trình
hệ thống đặc biệt được chạy với tên người dùng hợp lý và thông tin tài khoản.
Chương trình này tạo một UFD mới và thêm một mục từ cho nó tới MFD. Việc thực
thi chương trình này có thể bị giới hạn bởi người quản trị hệ thống.
Mặc dù cấu trúc thư mục hai cấp giải quyết vấn đề xung đột tên nhưng nó
cũng có những bất lợi. Cấu trúc này cô lập một người dùng từ người dùng khác. Việc
cô lập này là lợi điểm khi các người dùng hoàn toàn độc lập nhau nhưng sẽ bất lợi khi
các người dùng muốn hợp tác trên một số công việc và để truy xuất các tập tin của
người dùng khác. Một số hệ thống đơn giản không cho phép tập tin người dùng cục
bộ được truy xuất bởi người dùng khác.
Nếu truy xuất được cho phép, một người dùng phải có khả năng đặt tên một
tập tin trong một thư mục của người dùng khác. Để đặt tên một tập tin xác định duy
nhất trong thư mục hai cấp, chúng ta phải cho cả hai tên người dùng và tên tập tin.
Một thư mục hai cấp có thể được xem như một cây hay ít nhất một cây đảo ngược hay
có chiều cao bằng 2. Gốc của cây là UFD. Hậu duệ trực tiếp của nó là MFD. Hậu duệ
của UFD là các tập tin. Các tập tin này là lá của cây. Xác định tên người dùng và tên
tập tin định nghĩa đường dẫn trong cây từ gốc (MFD) tới một lá (tập tin xác định). Do
đó, tên người dùng và tên tập tin định nghĩa tên đường dẫn. Mọi tập tin trong hệ thống
có một đường dẫn. Để đặt tên một tập tin duy nhất người dùng phải biết tên đường
dẫn của tập tin mong muốn.
Trường hợp đặc biệt xảy ra cho các tập tin hệ thống. Các chương trình này
cung cấp một phần hệ thống như: bộ nạp, bộ hợp ngữ, bộ biên dịch, các thủ
tục, thường được định nghĩa như các tập tin. Khi các lệnh tương ứng được gọi tới hệ
điều hành, các tập tin này được đọc bởi bộ nạp và được thực thi. Một số bộ thông dịch
lệnh hoạt động bằng cách xem lệnh như là tên tập để nạp và thực thi. Với hệ thống thư
mục được định nghĩa hiện tại, tên tập tin này được tìm kiếm trong UFD hiện hành.
Một giải pháp cho vấn đề này là chép các tập tin hệ thống vào mỗi UFD. Tuy nhiên,
chép tất cả tập tin hệ thống sẽ lãng phí lượng lớn không gian.
Giải pháp chuẩn là làm phức tạp thủ tục tìm kiếm một chút. Một thư mục
người dùng đặc biệt được định nghĩa để chứa các tập tin hệ thống (thí dụ, user0). Bất
cứ khi nào một tên tập tin được cho để được nạp, trước tiên hệ điều hành tự tìm thư
mục người dùng cục bộ. Nếu không tìm thấy, hệ điều hành tự tìm trong thư mục
Biên soạn: Th.s Nguyễn Phú Trường - 09/2005 Trang
207
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Hệ Điều Hành – V1.0
người dùng đặc biệt này. Một chuỗi các thư mục được tìm khi một tập tin được đặt tên
là đường dẫn tìm kiếm. Ý tưởng này có thể được mở rộng, đường dẫn tìm kiếm chứa
danh sách các thư mục không giới hạn để tìm khi tên một lệnh được cho. Phương
pháp này được dùng nhiều nhất trong UNIX và MS-DOS.
V.3 Cấu trúc thư mục dạng cây
Thư mục cấu trúc cây là trường hợp tổng quát của thư mục hai cấp. Sự tổng
quát này cho phép người dùng tạo thư mục con và tổ chức các tập tin của họ. Thí dụ,
hệ thống MS-DOS có cấu trúc cây. Thật vậy, một cây là cấu trúc thư mục phổ biến
nhất. Cây có thư mục gốc. Mỗi tập tin trong hệ thống có tên đường dẫn duy nhất. Tên
đường dẫn là đường dẫn từ gốc xuống tất cả thư mục con tới tập tin xác định.
Một thư mục (hay thư mục con) chứa tập hợp các tập tin hay thư mục con.
Một thư mục đơn giản là tập tin nhưng nó được đối xử trong một cách đặc biệt. Tất cả
thư mục có cùng định dạng bên trong. Một bit trong mỗi mục từ thư mục định nghĩa
mục từ như một tập tin (0) hay như một thư mục con (1). Các lời gọi hệ thống đặc biệt
được dùng để tạo và xoá thư mục.
Thường thì mỗi người dùng có thư mục hiện hành. Thư mục hiện hành chứa
hầu hết các tập tin người dùng hiện đang quan tâm. Khi tham khảo được thực hiện tới
tập tin, thư mục hiện hành được tìm. Nếu một tập tin được yêu cầu mà nó không có
trong thư mục hiện hành thì người dùng phải xác định tên đường dẫn hay chuyển thư
mục hiện hành tới thư mục quản lý tập tin đó. Để thay đổi thư mục, một lời gọi hệ
thống được cung cấp kèm theo tên thư mục như là tham số và dùng nó để định nghĩa
lại thư mục hiện hành. Do đó, người dùng có thể thay đổi thư mục hiện hành bất cứ
khi nào người dùng muốn.
Thư mục hiện hành khởi đầu của người dùng được gán khi công việc người
dùng bắt đầu hay người dùng đăng nhập vào hệ thống. Hệ điều hành tìm tập tin tính
toán để xác định mục từ cho người dùng này. Trong tập tin tính toán là con trỏ chỉ tới
thư mục khởi đầu của người dùng. Con trỏ này được chép tới một biến cục bộ cho
người dùng xác định thư mục hiện hành khởi đầu.
Tên đường dẫn có hai kiểu: tên đường dẫn tuyệt đối và tên đường dẫn tương
đối. Một đường dẫn tuyệt đối bắt đầu từ gốc và theo sau là đường dẫn xuống tới tập
tin xác định, cho tên các thư mục trên đường dẫn. Tên đường dẫn tương đối định
nghĩa một đường dẫn từ thư mục hiện hành. Thí dụ, trong hệ thống tập tin có cấu trúc
cây như hình IX-7, nếu thư mục hiện hành là root/spell/mail thì tên đường dẫn tương
đối prt/first tham chiếu tới cùng tập tin nhưng tên đường dẫn tuyệt đối
root/spell/mail/prt/first.
Quyết định một chính sách trong cấu trúc thư mục cây là cách để quản lý việc
xoá một thư mục. Nếu một thư mục rỗng, mục từ của nó trong thư mục chứa bị xoá.
Tuy nhiên, giả sử thư mục bị xoá không rỗng, nhưng chứa nhiều tập tin và thư mục
con; một trong hai tiếp cận có thể được thực hiện. Một số hệ thống như MS-DOS sẽ
không xoá một thư mục nếu nó không rỗng. Do đó, để xoá một thư mục, người dùng
trước hết phải xoá tất cả tập tin trong thư mục đó. Nếu bất cứ thư mục con tồn tại, thủ
tục này phải được áp dụng đệ qui tới chúng để mà chúng có thể bị xoá. Tiếp cận này
dẫn đến lượng công việc lớn.
Biên soạn: Th.s Nguyễn Phú Trường - 09/2005 Trang
208
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Hệ Điều Hành – V1.0
Hình 0-7 cấu trúc thư mục dạng cây
Một tiếp cận khác được thực hiện bởi lệnh rm của UNIX cung cấp tuỳ chọn
mà khi một yêu cầu được thực hiện để xoá một thư mục, tất cả tập tin và thư mục con
của thư mục đó cũng bị xoá. Tiếp cận này tương đối đơn giản để cài đặt; chọn lựa này
là một chính sách. Chính sách sau đó tiện dụng hơn nhưng nguy hiểm hơn vì toàn bộ
cấu trúc thư mục có thể bị xoá với một lệnh. Nếu lệnh đó được cấp phát bị lỗi, một số
lượng lớn tập tin và thư mục cần được phục hồi từ các băng từ sao lưu.
Với một hệ thống thư mục cấu trúc cây, người dùng có thể truy xuất tới các
tập tin của họ và các tập tin của người dùng khác. Thí dụ, người dùng B có thể truy
xuất các tập tin của người dùng A bằng cách xác định tên đường dẫn của chúng.
Người dùng B có thể xác định tên đường dẫn tương đối hay tuyệt đối. Người dùng B
có thể chuyển thư mục hiện hành tới thư mục của người dùng A và truy xuất các tập
tin bằng tên của chúng. Một số hệ thống cũng cho phép người dùng định nghĩa đường
dẫn tìm kiếm của chính họ. Trong trường hợp này, người dùng B có thể định nghĩa
đường dẫn tìm kiếm của mình là (1) thư mục cục bộ của mình, (2) thư mục tập tin hệ
thống và (3) thư mục của người dùng A, theo thứ tự đó. Tập tin có thể được tham
khảo đơn giản bằng tên với điều kiện tên tập tin của người dùng A không xung đột
với tên của một tập tin cục bộ hay tập tin hệ thống.
V.4 Cấu trúc thư mục dạng đồ thị không chứa chu trình
Xét hai người lập trình đang làm việc trên một dự án chung. Các tập tin gắn
với dự án đó có thể được lưu trong thư mục con, tách rời chúng từ các dự án khác và
các tập tin của hai người lập trình. Nhưng vì cả hai người lập trình có trách nhiệm
ngang nhau trong dự án, cả hai muốn thư mục con ở trong các thư mục của chính họ.
Thư mục con nên được chia sẻ. Một thư mục hay tập tin sẽ tồn tại trong hệ thống tập
tin trong hai (hay nhiều hơn) nơi tại một thời điểm.
Cấu trúc cây ngăn cản việc chia sẻ các tập tin và thư mục. Một đồ thị không
chứa chu trình (acyclic graph) cho phép thư mục chia sẻ thư mục con và tập tin (hình
Biên soạn: Th.s Nguyễn Phú Trường - 09/2005 Trang
209
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Hệ Điều Hành – V1.0
IX-8). Cùng tập tin và thư mục con có thể ở trong hai thư mục khác nhau. Một đồ thị
không chứa chu trình là trường hợp tổng quát của cơ chế thư mục có cấu trúc cây.
Một tập tin (hay thư mục) được chia sẻ không giống như hai bản sao của một
tập tin. Với hai bản sao, mỗi người lập trình có thể thích hiển thị bản sao hơn bản gốc,
nhưng nếu một người lập trình thay đổi nội dung tập tin, những thay đổi sẽ không
xuất hiện trong bản sao của người còn lại. Với một tập tin được chia sẻ, chỉ một tập
tin thực sự tồn tại vì thế bất cứ sự thay đổi được thực hiện bởi một người này lập tức
nhìn thấy bởi người dùng khác. Việc chia sẻ là rất quan trọng cho các thư mục con;
một tập tin mới được tạo bởi người này sẽ tự động xuất hiện trong tất cả thư mục con
được chia sẻ.
Khi nhiều người đang làm việc như một nhóm, tất cả tập tin họ muốn chia sẻ có
thể đặt vào một thư mục. Các UFD của tất cả thành viên trong nhóm chứa thư mục
của tập tin được chia sẻ như một thư mục con. Ngay cả khi có một người dùng, tổ
chức tập tin của người dùng này yêu cầu rằng một số tập tin được đặt vào các thư mục
con khác nhau. Thí dụ, một chương trình được viết cho một dự án nên đặt trong thư
mục của tất cả chương trình và trong thư mục cho dự án đó.
Hình 0-8 cấu trúc đồ thị không chứa chu trình
Các tập tin và thư mục con được chia sẻ có thể được cài đặt trong nhiều cách.
Cách thông dụng nhất được UNIX dùng là tạo một mục từ thư mục được gọi là liên
kết. Một liên kết là một con trỏ chỉ tới một tập tin hay thư mục con khác. Thí dụ, một
liên kết có thể được cài đặt như tên đường dẫn tuyệt đối hay tương đối. Khi một tham
chiếu tới tập tin được thực hiện, chúng ta tìm kiếm thư mục. Nếu mục từ thư mục
được đánh dấu như một liên kết thì tên tập tin thật sự (hay thư mục) được cho. Chúng
ta phân giải liên kết bằng cách sử dụng tên đường dẫn để định vị tập tin thật sự.
Những liên kết được xác định dễ dàng bởi định dạng trong mục từ thư mục và được
định rõ bằng các con trỏ gián tiếp. Hệ điều hành bỏ qua các liên kết này khi duyệt qua
cây thư mục để lưu giữ cấu trúc không chứa chu trình của hệ thống.
Biên soạn: Th.s Nguyễn Phú Trường - 09/2005 Trang
210
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Hệ Điều Hành – V1.0
Một tiếp cận khác để cài đặt các tập tin được chia sẻ là nhân bản tất cả thông
tin về chúng trong cả hai thư mục chia sẻ. Do đó, cả hai mục từ là giống hệt nhau.
Một liên kết rất khác từ mục từ thư mục gốc. Tuy nhiên, nhân bản mục từ thư mục
làm cho bản gốc và bản sao không khác nhau. Một vấn đề chính với nhân bản mục từ
thư mục là duy trì tính không đổi nếu tập tin bị sửa đổi.
Một cấu trúc thư mục đồ thị không chứa chu trình linh hoạt hơn cấu trúc cây
đơn giản nhưng nó cũng phức tạp hơn. Một số vấn đề phải được xem xét cẩn thận.
Một tập tin có nhiều tên đường dẫn tuyệt đối. Do đó, các tên tập tin khác nhau có thể
tham chiếu tới cùng một tập tin. Trường hợp này là tương tự như vấn đề bí danh cho
các ngôn ngữ lập trình. Nếu chúng ta đang cố gắng duyệt toàn bộ hệ thống tập tin-để
tìm một tập tin, để tập hợp các thông tin thống kê trên tất cả tập tin, hay chép tất cả
tập tin tới thiết bị lưu dự phòng-vấn đề này trở nên lớn vì chúng ta không muốn duyệt
các cấu được chia sẻ nhiều hơn một lần.
Một vấn đề khác liên quan đến việc xoá. Không gian được cấp phát tới tập tin
được chia sẻ bị thu hồi và sử dụng lại khi nào? một khả năng là xoá bỏ tập tin bất cứ
khi nào người dùng xoá nó, nhưng hoạt động này để lại con trỏ chỉ tới một tập tin
không tồn tại. Trong trường hợp xấu hơn, nếu các con trỏ tập tin còn lại chứa địa chỉ
đĩa thật sự và không gian được dùng lại sau đó cho các tập tin khác, các con trỏ này
có thể chỉ vào phần giữa của tập tin khác.
Trong một hệ thống mà việc chia sẻ được cài đặt bởi liên kết biểu tượng,
trường hợp này dễ dàng quản lý hơn. Việc xoá một liên kết không cần tác động tập tin
nguồn, chỉ liên kết bị xoá. Nếu chính tập tin bị xoá, không gian cho tập tin này được
thu hồi, để lại các liên kết chơi vơi. Chúng ta có thể tìm các liên kết này và xoá chúng,
nhưng nếu không có danh sách các liên kết được nối kết, việc tìm kiếm này sẽ tốn rất
nhiều chi phí. Một cách khác, chúng ta có thể để lại các liên kết này cho đến khi nó
được truy xuất. Tại thời điểm đó, chúng ta xác định rằng tập tin của tên được cho bởi
liên kết không tồn tại và có thể bị lỗi để phục hồi tên liên kết; truy xuất này được đối
xử như bất cứ tên tập tin không hợp lệ khác. Trong trường hợp UNIX, các liên kết
biểu tượng được để lại khi một tập tin bị xoá và nó cho người dùng nhận thấy rằng tập
tin nguồn đã mất hay bị thay thế. Microsoft Windows (tất cả ấn bản) dùng cùng tiếp
cận.
Một tiếp cận khác đối với việc xoá là giữ lại tập tin cho tới khi tất cả tham
chiếu tới nó bị xoá. Để cài đặt tiếp cận này, chúng ta phải có một số cơ chế để xác
định rằng tham chiếu cuối cùng tới tập tin bị xoá. Chúng ta giữ danh sách của tất cả
tham chiếu tới một tập tin (các mục từ thư mục hay các liên kết biểu tượng). Khi một
liên kết hay bản sao của mục từ thư mục được thiết lập, một mục từ mới được thêm
tới danh sách tham chiếu tập tin. Khi một mục từ thư mục hay liên kết bị xoá, chúng
ta gỡ bỏ mục từ của nó trên danh sách. Tập tin này bị xoá khi danh sách tham chiếu
tập tin của nó là rỗng.
Trở ngại với tiếp cận này là kích thước của danh sách tham chiếu thay đổi và
có thể rất lớn. Tuy nhiên, chúng ta thật sự không cần giữ toàn bộ danh sách-chúng ta
chỉ cần giữ số đếm của số tham chiếu. Một liên kết mới hay mục từ thư mục mới sẽ
tăng số đếm tham chiếu; xoá một liên kết hay mục từ sẽ giảm số đếm. Khi số đếm là
0, tập tin có thể được xoá; không còn tham chiếu nào tới nó. Hệ điều hành UNIX
dùng tiếp cận này cho các liên kết không biểu tượng (hay liên kết cứng), giữ một số
đếm tham chiếu trong khối thông tin tập tin (hay inode). Bằng cách ngăn cản hiệu quả
nhiều tham chiếu tới các thư mục, chúng ta duy trì cấu trúc đồ thị không chứa chu
trình.
Biên soạn: Th.s Nguyễn Phú Trường - 09/2005 Trang
211
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Hệ Điều Hành – V1.0
Để tránh vấn đề này, một số hệ thống không cho phép thư mục hay liên kết
được chia sẻ. Thí dụ, trong MS-DOS, cấu trúc thư mục là một cấu trúc cây hơn là đồ
thị không chứa chu trình.
V.5 Cấu trúc thư mục dạng đồ thị tổng quát
Một vấn đề lớn trong việc dùng cấu trúc đồ thị không chứa chu trình là đảm bảo
rằng không có chu trình trong đồ thị. Nếu chúng ta bắt đầu với thư mục hai cấp và cho
phép người dùng tạo thư mục con, một thư mục có cấu trúc cây tạo ra. Dễ thấy rằng
thêm các tập tin và thư mục con mới tới một thư mục có cấu trúc cây đã có vẫn bảo
đảm tính tự nhiên của cấu trúc cây. Tuy nhiên, khi chúng ta liên kết một thư mục cấu
trúc cây đã có, cấu trúc cây bị phá vỡ hình thành một đồ thị đơn giản (như hình IX-9).
Hình 0-9 thư mục đồ thị tổng quát
Một lợi điểm chính của đồ thị không chứa chu trình là tương đối đơn giản
trong giải thuật duyệt đồ thị và xác định khi không có tham chiếu nữa tới tập tin.
Chúng ta muốn tránh duyệt các phần được chia sẻ của đồ thị không chứa chu trình hai
lần để tăng năng lực. Nếu chúng ta chỉ tìm một thư mục con được chia sẻ cho một tập
tin xác định, chúng ta muốn tránh việc tìm kiếm thư mục con đó một lần nữa; tìm
kiếm lần hai sẽ lãng phí thời gian.
Nếu các chu trình được cho phép tồn tại trong thư mục, chúng ta muốn tránh
tìm kiếm bất cứ thành phần nào hai lần vì tính đúng đắn cũng như năng lực. Một giải
thuật được thiết kế nghèo nàn dẫn tới vòng lặp vô tận trên các chu trình. Một giải
pháp là giới hạn số lượng thư mục sẽ được truy xuất trong quá trình tìm kiếm.
Một vấn đề tương tự tồn tại khi chúng ta cố gắng xác định khi nào một tập tin
có thể bị xoá. Như với cấu trúc thư mục đồ thị không chứa chu trình, một giá trị 0
trong số đếm tham chiếu có nghĩa là không còn tham chiếu nữa tới tập tin hay thư
mục và tập tin có thể bị xoá. Tuy nhiên, khi có chu trình tồn tại, số đếm tham chiếu
khác 0 ngay cả khi không còn tham chiếu tới thư mục hay tập tin. Sai sót này dẫn tới
khả năng tham chiếu chính nó (hay chu trình) trong cấu trúc thư mục. Trong trường
hợp này, chúng ta cần dùng cơ chế thu dọn rác (garbage colection) để xác định khi
tham chiếu cuối cùng bị xoá và không gian đĩa có thể được cấp phát lại. Thu dọn rác
Biên soạn: Th.s Nguyễn Phú Trường - 09/2005 Trang
212
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Hệ Điều Hành – V1.0
liên quan đến việc duyệt toàn bộ hệ thống tập tin, đánh dấu mọi thứ có thể được truy
xuất. Sau đó, duyệt lần hai tập hợp mọi thứ không được đánh dấu trên danh sách
không gian trống. Tuy nhiên, thu dọn rác cho một đĩa dựa trên hệ thống tập tin rất mất
thời gian và do đó hiếm khi được thực hiện.
Thu dọn rác cần thiết chỉ vì có chu trình trong đồ thị. Do đó, cấu trúc đồ thị
không chứa chu trình dễ hơn nhiều. Khó khăn là tránh chu trình khi các liên kết mới
được thêm vào cấu trúc. Chúng ta biết như thế nào và khi nào một liên kết mới sẽ
hình thành chu trình? Có nhiều giải thuật phát hiện các chu trình trong đồ thị; tuy
nhiên chi phí tính toán cao, đặc biệt khi đồ thị ở trên đĩa lưu trữ. Một giải thuật đơn
giản hơn trong trường hợp đặc biệt của thư mục và liên kết là bỏ qua liên kết khi
duyệt qua thư mục. Chu trình có thể tránh được và không có chi phí thêm xảy ra.
VI Gắn hệ thống tập tin
Giống như một tập tin phải được mở trước khi nó được dùng, một hệ thống tập
tin phải được gắn vào (mounted) trước khi nó có thể sẳn dùng cho các quá trình trên
hệ thống. Đặc biệt hơn, cấu trúc thư mục có thể được xây dựng trên nhiều phân khu,
mà phải được gắn vào để làm cho chúng sẳn dùng trong không gian tên hệ thống tập
tin.
Thủ tục gắn vào không phức tạp. Hệ điều hành được cho tên của thiết bị và vị
trí trong cấu trúc tập tin tại nơi nó được gán vào hệ thống tập tin (điểm gắn-mount
point). Điển hình, một điểm gắn thường là thư mục rỗng nơi hệ thống tập tin sẽ được
gắn vào. Thí dụ, trên hệ thống UNIX, một hệ thống tập tin chứa các thư mục dành
riêng cho người dùng (home directory) có thể được gắn vào như /home; sau đó để truy
xuất tới cấu trúc tập tin trong hệ thống tập tin đó, người dùng có thể đến trước các tên
thư mục /home, như trong /home/jane. Gắn vào hệ thống tập tin đó dưới /users sẽ dẫn
tới tên đường dẫn /users/jane để đạt cùng thư mục.
Tiếp theo, hệ điều hành kiểm tra thiết bị chứa một hệ thống tập tin hợp lệ
không. Nó thực hiện như thế bằng cách yêu cầu trình điều khiển thiết bị đọc thư mục
thiết bị và kiểm tra thư mục có định dạng như mong muốn. Cuối cùng, hệ điều hành
ghi nhận trong cấu trúc thư mục của nó rằng hệ thống tập tin được gắn vào tại điểm
gắn xác định. Cơ chế này cho phép hệ điều hành duyệt cấu trúc thư mục của nó,
chuyển qua lại giữa các hệ thống tập tin một cách hợp lý.
Để hiển thị việc gắn tập tin, xem xét hệ thống tập tin được mô tả như hình IX-10, ở
đây hình này hình tam giác hiển thị cây con của các thư mục đang quan tâm. Trong
hình (a) hiển thị hệ thống tập tin đã có, trong hình (b) hiển thị một phân khu chưa
được gắn vào /device/dsk. Tại điểm này, chỉ các tập tin trên hệ thống tập tin đã tồn tại
mới có thể được truy xuất. Trong hình IX-11, hiển thị các ảnh hưởng của việc gắn vào
phân khu này trên /device/dsk qua /users. Nếu phân khu này chưa được gắn, hệ thống
tập tin được phục hồi tới trường hợp được mô tả như hình IX-10.
Biên soạn: Th.s Nguyễn Phú Trường - 09/2005 Trang
213
Không có nhận xét nào:
Đăng nhận xét