Tải bản đầy đủ (.pdf) (83 trang)

Bài giảng Hệ thống file unix

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.29 MB, 83 trang )

1
Linux operating system - Nguyen Tri Thanh
Hệ ñiều hành UNIX-Linux
Chương 3. Hệ thống File
2
Linux operating system - Nguyen Tri Thanh
Khái niệm cơ bản
 Một ñối tượng ñiển hình trong các hệ ñiều hành ñó là file
 File là một tập hợp dữ liệu có tổ chức ñược hệ ñiều hành quản

 Cách tổ chức dữ liệu trong file thuộc về người ñã tạo ra file
 File có thể là:
 một văn bản (trường hợp ñặc biệt là chương trình nguồn
trên C, PASCAL, shell script )
 một chương trình ngôn ngữ máy,
 Hệ ñiều hành tổ chức việc lưu trữ nội dung file trên các thiết
bị nhớ lâu dài và ñảm bảo các thao tác lên file.
3
Linux operating system - Nguyen Tri Thanh
Khái niệm cơ bản
 Hệ ñiều hành ñảm bảo các chức năng liên quan ñến file nên
người dùng không cần biết file của mình lưu ở vùng nào trên
ñĩa từ, bằng từ cách nào ñọc/ghi lên các vùng của ñĩa từ mà
vẫn thực hiện ñược yêu cầu tìm kiếm, xử lý lên các file
 Hệ ñiều hành quản lý file theo tên gọi của file (tên file) và
một số thuộc tính liên quan ñến file
 Hệ ñiều hành không chỉ quản lý nội dung file mà còn phải
quản lý các thông tin liên quan ñến các file.
 Thư mục (directory) là ñối tượng ñược dùng ñể chứa
thông tin về các file
 Các thư mục cũng ñược hệ ñiều hành quản lý trên vật dẫn


ngoài và vì vậy thư mục cũng ñược coi là file
4
Linux operating system - Nguyen Tri Thanh
File trong Linux - UNIX
 Tên file trong Linux có thể dài > 256 ký tự
 Nên chỉ gồm các chữ cái, chữ số, dấu gạch nối, gạch chân,
dấu chấm
 Tên thư mục/file trong Linux có thể có nhiều hơn một dấu
chấm: This_is.a.VERY_long.filename
 Xâu con của tên file từ dấu chấm cuối cùng ñược gọi là phần
mở rộng của tên file
 Phần mở rộng ở ñây không mang ý nghĩa như một số hệ ñiều
hành khác (chẳng hạn như MS-DOS)
 Phân biệt chữ hoa và chữ thường ñối với tên thư mục/file
 Nếu trong tên thư mục/file có chứa khoảng trống, ñặt tên vào
trong cặp dấu nháy kép: # mkdir “My document”
 Một số ký tự không ñược sử dụng trong tên thư mục/file: !, *,
$, &, #
5
Linux operating system - Nguyen Tri Thanh
Cách tổ chức file
 Trên ñĩa hệ thống file là dãy tuần tự các khối lôgic mỗi khối
chứa hoặc 512B hoặc 1024B hoặc bội của 512B
 Các khối dữ liệu ñược ñịa chỉ hóa bằng cách ñánh chỉ số liên
tiếp, mỗi ñịa chỉ ñược chứa trong 4 byte (32 bit)
 Cấu trúc nội tại gồm 4 thành phần kế tiếp nhau: Boot block
(dùng ñể khởi ñộng hệ thống), Siêu khối (Super block), Danh
sách inode và Vùng dữ liệu.
6
Linux operating system - Nguyen Tri Thanh

Siêu khối
Chứa thông tin liên quan ñến trạng thái của hệ thống file
 Kích thước của danh sách inode
 Kích thước của hệ thống file.
 Danh sách chỉ số các khối rỗi
 Chỉ số các khối rỗi thường trực trên siêu khối
 Chỉ số của khối rỗi tiếp theo trong danh sách các khối rỗi
 Một danh sách các inode rỗi
 Danh sách này chứa chỉ số các inode rỗi ñược dùng ñể phân phối
ngay ñược cho một file mới ñược khởi tạo
 Cờ chỉ dẫn rằng hệ thống file chỉ có thể ñọc (cấm ghi)
 Số lượng tổng cộng các khối rỗi trong hệ thống file
 Số lượng tổng cộng các inode rỗi trong hệ thống file
 Thông tin về thiết bị
 Kích thước khối của hệ thống file
7
Linux operating system - Nguyen Tri Thanh
Cấu trúc thư mục
8
Linux operating system - Nguyen Tri Thanh
Kiến trúc hệ thống file
9
Linux operating system - Nguyen Tri Thanh
Hình ảnh các khối bộ nhớ
10
Linux operating system - Nguyen Tri Thanh
Thông tin một file entry
Inode No File name File name length Entry length
320 a.txt 5 7
Cấu trúc thư mục

 Nội dung của một thư mục là một danh sách các file entry
 Mỗi một file entry gồm
 Số hiệu inode quản lý file này
 Tên file
 ðộ dài của tên file
 ðộ dài của entry
11
Linux operating system - Nguyen Tri Thanh
Trạng thái của thư mục
Cấu trúc thư mục
 Khi một file bị xóa thì trường entry length của file ñứng trước sẽ ñược
tăng ñộ dài
 Khi chèn thêm một file entry, nó sẽ tính toán ñộ dài của entry ñể quyết
ñịnh là chèn vào một entry bị xóa nào ñó hay cuối danh sách
12
Linux operating system - Nguyen Tri Thanh
Inode
 Khi tạo một file mới, hệ thống sẽ cấp một inode chưa sử dụng
 inode cho ta biết các khối dữ liệu của file và các thông tin về file
 Tổ hợp gồm inode + tập các khối dữ liệu = file vật lý
 Các inode có chỉ số: số thứ tự của inode trong danh sách inode
 Hệ thống dùng 2 bytes ñể lưu trữ chỉ số của inode
 Một file chỉ có một inode + một hoặc một số tên file
 Người dùng tác ñộng thông qua tên file và tên file lại tham chiếu
ñến inode
Linux dùng một vùng bộ nhớ chứa danh sách các inode: in-core
inode
13
Linux operating system - Nguyen Tri Thanh
Cấu trúc Inode

 Kiểu file (file thông thường, thư mục, ñặc tả kí tự, ñặc tả khối,
ống dẫn)
 Kiểu file có giá trị 0 tương ứng ñó là inode chưa ñược sử dụng
 Quyền truy nhập file: có 3 mức quyền truy nhập
 chủ của file
 nhóm người dùng của chủ nhân của file
 người dùng khác
 Quyền truy nhập là ñọc (r), ghi (w), thực hiện (x) hoặc một tổ
hợp nào ñó từ nhóm gồm 3 quyền trên
 Quyền thực hiện ñối với một thư mục tương ứng với việc cho
phép tìm một tên file có trong thư mục ñó
14
Linux operating system - Nguyen Tri Thanh
Cấu trúc Inode (tiếp)
 Số lượng liên kết ñối với inode (số lượng các tên file)
 ðịnh danh chủ nhân của inode
 ðịnh danh nhóm chủ nhân
 ðộ dài của file tính theo byte
 Thời gian truy nhập file
 thời gian file ñược sửa ñổi muộn nhất
 thời gian file ñược truy nhập muộn nhất
 thời gian file ñược khởi tạo
13 phần tử ñịa chỉ
 10 phần tử trực tiếp
 1 phần tử gián tiếp bậc 1
 1 phần tử gián tiếp bậc 2
 1 phần tử gián tiếp bậc 3
15
Linux operating system - Nguyen Tri Thanh
Các con trỏ dữ liệu

16
Linux operating system - Nguyen Tri Thanh
Nội dung của một Inode
 type regular
 perms rwxr-xr-x
 links 2
 owner 41CT
 group 41CNTT
 size 5703 bytes
 accessed Sep 14 1999 7:30 AM
 modified Sep 10 1999 1:30 PM
 inode Aug 1 1995 10:15 AM
 Các phần tử ñịa chỉ dữ liệu
17
Linux operating system - Nguyen Tri Thanh
Truy cập ñến một file
18
Linux operating system - Nguyen Tri Thanh
19
Linux operating system - Nguyen Tri Thanh
Thuật toán truy nhập tới inode (iget)
Tình huống ñòi hỏi thuật toán iget: mở / tạo một file mới …
iget cấp phát một bản in-core inode ñối với một số hiệu inode
Nếu chưa có bản sao in-core inode thì ñể có nội dung của nó cần
phải ñọc ñược nội dung của inode
Nếu 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.
20
Linux operating system - Nguyen Tri Thanh

Thuật toán iget
Vào: hệ thống file, số hiệu inode
Ra: inode ñược khóa hoặc mã lỗi
while (not done){
if (inode trong vùng ñệm các inode){ /*có quá trình ñang làm việc với inode*/
if (inode ñã bị khóa) {
sleep (cho ñến khi inode ñược mở khóa);
continue; /* quay về while */
}
if (inode tồn tại trong danh sách các inode rỗi)
Loại bỏ nó khỏi danh sách các inode rỗi;
Tăng giá trị trường số file tích cực trong in-core inode;
return (inode)
}
if (danh sách các inode rỗi rỗng) return (mã lỗi)
Loại bỏ một inode mới từ danh sách các inode rỗi;
ðặt lại số lượng inode rỗi vào hệ thống file;
Loại bỏ inode ñó trên hàng ñợi cũ và ñặt nó lên hàng ñợi mới;
ðọc inode từ ñĩa vào in-core inode;
Khởi tạo inode;
return (inode)
}
21
Linux operating system - Nguyen Tri Thanh
Thuật toán iput
Vào: con trỏ tới in-core inode
Ra: không có
{
if (inode chưa bị khóa) Khóa inode;
Giảm trường số lượng file tích cực ñi một ñơn vị;

if (số lượng file tích cực ==0)
{
if (số liên kết của inode ==0) {
Giải phóng các khối ñĩa của file tương ứng với inode;
ðặt giá trị trường "file type" của inode là 0;
Giải phóng inode;
}
if (file ñã truy cập hoặc inode bị thay ñổi hoặc file ñã thay ñổi)
Cập nhật inode trên ñĩa;
ðặt inode vào danh sách các inode rỗi;
}
Tháo khóa của inode;
}
22
Linux operating system - Nguyen Tri Thanh
Thuật toán iname
if (path_name bắt ñầu từ th
ư
mục gốc)
working_inode = inode của th
ư
mục gốc; /* thuật toán
iget */
else
working_inode = inode của th
ư
mục hiện tại; /* thuật toán iget */
while (thành phần ñã xử lý ch
ư
a là thành phần cuối cùng của path_name) {

ñọc thành phần tiếp theo của path_name từ dòng vào;
xác minh quyền truy cập của quá trình ñối với working_inode là ñúng ñắn;
if (working_inode là gốc và thành phần tiếp theo là "/")
continue; /* quay lại while */
ñọc từ ñĩa nội dung th
ư
mục working_inode;
/* nhờ các thuật toán nh
ư
bmap, bread và brelse */
if (thành phần trùng với một ñiểm vào của th
ư
mục working_inode)
{
nhận số hiệu inode từ thành phần ñã gặp;
giải phóng working_inode; /* nhờ iput */
working_inode = inode của thành phần ñã gặp; /* thuật toán iget*/
}
else /*không có thành phần ở th
ư
mục*/
return (không có inode);
}
return (working_inode);
23
Linux operating system - Nguyen Tri Thanh
Thuật toán ialloc
while (true)
{
if (super block của hệthống file bị khóa){

sleep (cho tới khi super block không bị khóa); continue;
}
if (nếu danh sách các inode rỗi trên super block ñã rỗng){
Khóa super block;
Lấy inode nhớ trên super block;
Tìm kiếm các inode ch
ư
a sử dụng trên ñĩa lên super block cho ñến khi ñầy;
Mở khóa super block;
wakeup (cho tới khi super block rỗi);
if (không có inode trên ñĩa) return (không có inode);
ðặt inode nhớ là inode tiếp theo tìm ñ
ư
ợc cuối cùng;
}
Lấy số hiệu của inode từ danh sách các inode trên super block;
Lấy inode;
if (tất cả inode không rỗi) {
Ghi inode lênñĩa; Loại bỏ inode;continue;
}
Thiết lập các giá trị cho inode;
Ghi inode lên ñĩa;
Giảm tổng số các inode rỗi trên hệ thống file;
return (inode);
}
24
Linux operating system - Nguyen Tri Thanh
Thuật toán ialloc – trường hợp danh sách không rỗng
Trước khi gán: 48 là số hiệu inode tiếp theo
Sau khi gán: 48 ñã ñược cung cấp cho nhu cầu, vì vậy 83 trở thành

chỉ số tiếp
25
Linux operating system - Nguyen Tri Thanh
Thuật toán ialloc – trường hợp danh sách rỗng
Trước khi gán: danh sách inode rỗi trên super block là rỗng, do 470
là chỉ số tiếp nên tìm từ số hiệu 471 trở ñi
Sau khi tìm kiếm có ñược danh sách rỗi và 471 là số hiệu inode
cần gán; lúc này, 535 trở thành chỉ số inode tiếp theo

×