4
6
Chúng ta xem xét một số thuật toán làm việc với inode.
Thuật toán truy nhập tới inode (iget)
Nhiều tình huống đòi hỏi thuật toán iget, chẳng hạn như, một quá trình mở một file mới
hoặc tạo một file mới v.v.. Thuật toán iget cấp phát một bản in-core inode đối với một số
hiệu inode. Tuy nhiên, trong trường hợp chưa có bản sao in-core inode thì dể có nội dung
của nó cần phải đọc được nội dung của inode đó và cần định vị khối dữ liệu chứa inode đã
cho. Công thức liên quan đến khối đĩa từ chứa inode để có thể đọc vào bộ nhớ trong như
sau:
Chỉ số khối chứa inode = (số hiệu inode - 1) / (số lượng inode trong một khối nhớ)
+ chỉ số khối nhớ đầu tiên chứa danh sách inode trên đĩa.
Sau khi đã đọc khối đĩa chứa inode vào bộ nhớ trong, để xác định chính xác vị trí của
inode, chúng ta có công thức sau:
Byte vị trí đầu tiên = ((số hiệu inode - 1) mod (số lượng inode trong một khối
nhớ))*độ dài một inode
Ví dụ, nếu như mỗi inode đĩa chiếm 64 bytes, mỗi khối đĩa chứa 8 inode đĩa thì inode
số 8 sẽ bắt đầu từ byte thứ 448 trên khối đĩa đầu tiên trong vùng danh sách các inode.
Để ý rằng, khi làm việc với một hệ thống file thì super block của nó luôn có mặt trong bộ
nhớ trong để hệ thống có những thông tin làm việc. Chú ý rằng, trong super block có một
danh sách các inode rỗi (trên nó) và một danh sách các khối rỗi.
Thuật toán iget nhận một inode để cho nó tích cực và điều đó tùy thuộc vào một số tình
huống sau đây:
- Nếu inode không tồn tại trong vùng đệm mà lại không thuộc danh sách các
inode rỗi trên super block thì hệ thống phải thông báo một lỗi đã đưọc gặp.
Lỗi này xảy ra do yêu cầu một inode không còn đủ vùng đệm làm việc với file
nữa (tương ứng với trường hợp trong MS-DOS thông báo: too many files
opened),
- inode đã có trong vùng đệm các inode trên hệ thống file (đã có in-core inode).
Trong trường hợp này xử lý theo hai bước:
+
inode tương ứng đã bị khóa bởi một quá trình khác: lúc đó phải đợi cho
đến khi quá trình trước đây không khóa inode nữa. Sau khi được tháo
khóa inode có thể trở thành tích cực hoặc rỗi,
+
Nếu inode ở danh sách các inode rỗi thì loại bỏ nó khỏi danh sách này
bằng cách đặt inode sang tích cực.
- inode không tồn tại trên vùng đệm tuy nhiên danh sách các inode rỗi khác
rỗng. Khi danh sách các inode này khác rỗng, có nghĩa là có những inode
không có giá trị: loại bỏ nó và đặt inode mới vào thay thế.
Thuật toán iput loại bỏ inode
Thuật toán iput có chức năng đối ngẫu với thuật toán iget: cần tháo bớt sự xuất hiện của
một inode, chẳng hạn khi chương trình thực hiện thao tác đóng file.
Khác với trường hợp thuật toán iget, thuật toán iput không nảy sinh tình huống sai sót.
Trong thuật toán này, khi một quá trình không làm việc với một file được liên kết với
một inode nữa thì một số tình huống xẩy ra:
- Hệ thống giảm số lượng file tích cực đi 1,
- Nếu số lượng file tích cực là 0 thì: