Hệ thống tập tin của Unix :
Một tập tin được mở với lời gọi hệ thống OPEN, với tham số đầu tiên cho biết đường dẫn và tên tập tin , tham số thứ hai cho biết tập tin được mở để đọc, ghi hay vừa đọc vừa ghi. Hệ thống kiểm tra xem tập tin có tồn tại không. Nếu có, nó kiểm tra bit quyền để xem có được quyền truy cập không, nếu có hệ thống sẽ trả về một số dương nhỏ gọi là biến mô tả tập tin cho nơi gọi. Nếu không nó sẽ trả về –1.
Khi một tiến trình bắt đầu, nó luôn có ba giá trị của biến mô tả tập tin : 0 cho nhập chuẩn, 1 cho xuất chuẩn và 2 cho lỗi chuẩn. Tập tin được mở đầu tiên sẽ có giá trị là 3 và sau đó là 4 … Khi tập tin đóng, biến mô tả tập tin cũng được giải phóng.
Có hai cách mô tả tên tập tin trong UNIX. Cách thứ nhất là dùng đường dẫn tuyệt đối, tập tin được truy cập từ thư mục gốc. Thứ hai là dùng khái niệm thư mục làm việc hay thư mục hiện hành trong đường dẫn tương đối.
UNIX cung cấp đặc tính LINK, cho phép nhiều người sử dụng cùng dùng chung một tập tin, hay còn gọi là chia xẻ tập tin. Ví dụ như hình sau, fred và lisa cùng làm việc trong cùng một đề án, họ cần truy cập tập tin lẫn nhau. Giả sử fred cần truy cập tập tin x của lisa, anh ta sẽ tạo một entry mới trong thư mục của anh ta và sau đó có thể dùng x với nghĩa là /usr/lisa/x.

Ngoài ra UNIX cho phép một đĩa có thể được mount thành một thành phần của hệ thống cây thư mục của một đĩa khác.
Một đặc tính thú vị khác của hệ thống tập tin của UNIX là khóa (locking). Trong một số ứng dụng, một số tiến trình có thể sử dụng cùng một tập tin cùng lúc. Có hai loại khóa là chia xẻ hay loại trừ. Nếu tập tin đã chứa khóa chia xẻ thì có thể đặt thêm một khóa chia xẻ nữa, nhưng không thể đặt một khoá loại trừ nhưng nếu đã được đặt khóa loại trừ thì không thể đặt thêm khóa nữa. Vùng khóa có thể được ghi chồng.
Cài đặt hệ thống tập tin của Unix
Hệ thống tập tin của UNIX thông thường được cài đặt trên đĩa như ở hình sau :

Khối 0 thường chứa mã khởi động của hệ thống.
Khối 1 gọi là khối đặc biệt (super block), nó lưu giữ các thông tin quan trọng về toàn bộ hệ thống tập tin, bao gồm:
Kích thước của toàn bộ hệ thống tập tin.
Địa chỉ của khối dữ liệu đầu tiên.
Số lượng và danh sách các khối còn trống.
Số lượng và danh sách các I-node còn trống.
Ngày super block được cập nhật cuối cùng.
Tên của hệ thống tập tin.
Nếu khối này bị hỏng, hệ thống tập tin sẽ không truy cập được. Có rất nhiều trình ứng dụng sử dụng thông tin lưu trữ trong super block. Vì vậy một bản sao super block của hệ thống tập tin gốc được đặt trong RAM để tăng tốc độ truy xuất đĩa. Việc cập nhật super block sẽ được thực hiện ngay trong RAM và sau đó mới ghi xuống đĩa.
Sau khối đặc biệt là các I-node, được đánh số từ một cho tới tối đa. Mỗi I-node có độ dài là 64 byte và mô tả cho một tập tin duy nhất (chứa thuộc tính và địa chỉ khối lưu trữ trên đĩa của tập tin).
Sau phần I-node là các khối dữ liệu. Tất cả tập tin và thư mục đều được lưu trữ ở đây.
Một entry của directory có 16 byte, trong đó 14 byte là tên của tập tin và 2 byte là địa chỉ của I-node. Để mở một tập tin trong thư mục làm việc, hệ thống chỉ đọc thư mục, so sánh tên được tìm thấy trong mỗi entry cho đến khi tìm được, từ đó xác định được chỉ số I-node và đưa vào bộ nhớ để truy xuất.
Tập tin được tạo hay tăng kích thước bằng cách sử dụng thêm các khối từ danh sách các khối còn trống. Ngược lại, khối được giải phóng sẽ trả về danh sách khối trống khi xóa tập tin. Super block sẽ chứa địa chỉ của 50 khối trống. Trong đó địa chỉ cuối cùng chứa địa chỉ của một khối chứa địa chỉ của 50 khối trống kế tiếp và cứ tiếp tục như thế. Unix sử dụng khối trống trong super block trước. Khi khối trống cuối cùng trong super block được sử dụng, 50 khối trống kế tiếp sẽ được đọc vào trong super block. Ngược lại, khi một khối được giải phóng, địa chỉ của nó sẽ được thêm vào danh sách của super block. Khi đã đủ 50 địa chỉ trong super block, khối trống kế tiếp sẽ được dùng để lưu trữ 50 địa chỉ khối trống đang đặt trong super block thay cho super block.
Bài tập
Bài 1 :
Cho dãy byte của FAT12 như sau (bắt đầu từ đầu):

Cho biết những phần tử nào của FAT có giá trị đặc biệt, ý nghĩa của phần tử đó.
Nếu sửa lại phần tử 5 là FF0 thì dãy byte của FAT12 này có nội dung như thế nào ?
Bài 2 :
Biết giá trị(dưới dạng thập phân) trong một buffer (mỗi phần tử 1 byte) lưu nội dung của FAT12 như sau (bắt đầu từ phần tử 0):

Cho biết giá trị của từng phần tử trong FAT (dưới dạng số thập phân)
Bài 3 :
Chép 1 tập tin kích thước là 3220 bytes lên một đĩa 1.44Mb còn trống nhưng bị hỏng ở sector logic 33. Cho biết giá trị từng byte của Fat (thập phân) từ byte 0 đến byte 14 .
Bài 4 :
Giả sử một đĩa mềm có 2 side, mỗi side có 128 track, mỗi track có 18 sector. Thư mục gốc của đĩa có tối đa là 251 tập tin (hoặc thư mục). Một cluster = 2 sector. Đĩa sử dụng Fat 12. Hỏi muốn truy xuất cluster 10 thì phải đọc những sector nào ?
Bài 5 :
Hiện trạng của FAT12 và RDET (mỗi entry chỉ gồm tên tập tin và cluster đầu tiên)của một đĩa như sau :

Cho biết hiện trạng của FAT12 và RDET sau khi xoá tập tin vd.txt và chép vào tập tin bt.cpp có kích thước 1025 bytes ( giả sử 1 cluster = 1 sector)
Bài 6 :
Một tập tin được lưu trên đĩa tại những khối theo thứ tự sau :
20, 32, 34, 39, 52, 63, 75, 29, 37, 38, 47, 49, 56, 68, 79, 81, 92, 106, 157, 159, 160, 162, 163, 267, 269, 271, 277, 278, 279, 380, 381, 482, 489, 490, 499.
Vẽ I_node của tập tin này, giả sử mỗi khối chỉ chứa được 3 phần tử.