Một số thuật toán làm việc với inode(khối chỉ mục)

Một phần của tài liệu Cấu trúc, nguyên lý, phân tích mã nguồn CentOS (Trang 34)

3.1.4.1 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 igetcấ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

Thuật toán igetnhậ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ế.

Một phần của tài liệu Cấu trúc, nguyên lý, phân tích mã nguồn CentOS (Trang 34)