Không rõ ràng nếu không có ngữ cảnh để xác định xem Stalling đang nói về bảng inode trong bộ nhớ hay các bảng có trong hệ thống tệp. Tôi cho ai đó mượn một ấn bản sách sớm hơn nhiều, nhưng không bao giờ lấy lại được; vì vậy tôi không thể tự tìm kiếm bối cảnh.
Có ba "bảng tệp", nhưng bảng được thảo luận ở đây thường được gọi là " bảng inode trong bộ nhớ "; cái thứ hai thường được gọi là " bảng tệp mở " và tồn tại trên mỗi quy trình. Cả hai bảng đều nằm trong bộ nhớ kernel và không thể truy cập vào chương trình. "Bảng" thứ ba thực sự là hai bộ bảng trong hệ thống tệp (trên đĩa), đầu tiên là bảng inode trên đĩa và thứ hai là các khối dữ liệu (lưu ý: thảo luận này liên quan đến quản lý hệ thống tệp UNIX truyền thống, các hệ thống mới hơn có thể có tổ chức khác nhau). Các mục trong bảng inode có các chuỗi tham chiếu vào các khối dữ liệu có chứa các khối tham chiếu gián tiếp hoặc dữ liệu thực tế. Chìa khóa của một tập tintrên hệ thống tập tin là inode, không phải chính khối dữ liệu. Khi Stalling đang nói về một bảng "tệp trên đĩa", nó thường sẽ là bảng "nhỏ hơn" trên đĩa biểu thị các tệp, chẳng hạn như bảng inode hoặc bảng định nghĩa khối trong các hệ thống FAT.
Đối với bảng inode trong bộ nhớ, inode được tải từ hệ thống tệp, giá trị st_nlink của nó được tăng lên và sau đó được truy cập vào phần còn lại của hệ thống, khi dữ liệu inode được ghi vào đĩa, st_ctime được cập nhật. Nếu inode không còn cần thiết trong bộ nhớ, giá trị st_nlink sẽ bị giảm và mục nhập trong bảng được đánh dấu là miễn phí. Mỗi quá trình sẽ bắt đầu với tham chiếu đến khoảng ba hoặc năm ghi vào trong bộ nhớ bảng inode: các inodes của stdin
, stdout
, stderr
- đây là những thường là một tập tin thiết bị (tty) - và sau đó tham chiếu đến thư mục hiện hành và thư mục gốc. Một inode sẽ chỉ nằm trong bảng một lần, do đó có thể có nhiều tham chiếu đến một inode duy nhất trong bảng.
Bảng tệp mở được giữ cho mỗi quy trình và chứa các tham chiếu vào bảng inode trong bộ nhớ cũng như các con trỏ tới bộ đệm và thông tin trạng thái (như fseek(2)
giá trị và cờ từ open(2)
. Bộ mô tả tệp theo nghĩa đen là một chỉ mục vào bảng tệp mở; mọi người đề cập đến mục trong bảng tệp mở khi nói về "mô tả tệp".
Khi một tệp được mở bằng cách sử dụng open(2)
, một mục có sẵn trong bảng tệp mở được tìm thấy, inode của tham chiếu tệp theo tên đường dẫn được xác định, inode đó được tải vào bảng inode trong bộ nhớ, nếu chưa được tải, số st_nlink sẽ được tính được tăng lên và mục nhập inode được tham chiếu trong bộ mô tả tệp, cờ được đặt và bộ đệm được phân bổ. Khi đóng cửa, điều ngược lại xảy ra.
Các thường trình trong kernel được gọi là " hệ thống quản lý tệp " và " hệ thống tệp " là tổ chức trên đĩa. Ngày nay, có một số mô-đun 'có thể cắm' có thể được tải ( modprobe(8)
) vào hệ thống quản lý tệp cho các tổ chức khác nhau trên đĩa. Ví dụ, có các loại hệ thống tệp ext2 / ext3 / ext4 và mỗi loại có một mô-đun khác nhau trong hệ thống quản lý tệp của kernel; tương tự với ntfs, sbfs, nfs, vfat, jfs, v.v.
Đây là một chút dài dòng hơn tôi dự định ban đầu, vì vậy tôi sẽ dừng ở đây.