hành phải kiểm soát chặt chẽ các trường hợp này. Để tránh hiện tượng này hệ điều
hành phải tạo một cơ chế thích hợp để loại trừ lẫn nhau trong thao tác đọc/ghi file
giữa các file đồng thời.
Để thực hiện loại trừ lẫn nhau này hệ điều hành đưa thêm hai trường vào các
entry trong bảng danh mục người sử dụng: Trường thứ nhất, Bítghi, = 1 đang có
một tiến trình ghi vào file, = 0 không có tiến trình nào ghi vào file. Trường thứ hai,
Bộ đếm, = <số các tiến trình đang mở file để đọc>. Theo đó một tiến trình chỉ có
thể mở file để đọc khi Bít ghi = 0, mở file để ghi khi Bít ghi = 0 và Bộ đếm = 0.
Như vậy, ngay sau khi chấp nhận yêu cầu mở file để ghi từ một tiến trình thì hệ
điều hành phải gán Bít ghi = 1, ngay sau khi chấp nhận yêu cầu mở file để đọc từ
một tiến trình thì hệ điều hành phải tăng Bộ đếm lên 1 đơn vị, Bộ đếm = bộ đếm +
1. Khi một tiến trình đọc file đóng file thì Bộ đếm = bộ đếm + 1, khi một tiến trình
ghi file đóng file thì Bít ghi được gán = 1. Rõ ràng kỹ thuật này có thể dẫn đến lỗi
khi hệ thống không giám sát tốt việc thay đổi giá trị trên các trường Bítghi và Bộ
đếm, điều này chúng ta đã thấy trong chương Quản lý tiến trình của tài liệu này.
IV.1.6. Hiệu suất hệ thống file
Như đã biết, tốc độ truy xuất dữ liệu trên đĩa chậm hơn rất nhiều so với tốc độ truy
xuất dữ liệu trên bộ nhớ, tốc độ truy xuất dữ liệu trên đĩa tính bằng đơn vị
milliseconds, trong khi đó tốc độ truy xuất dữ liệu trên bộ nhớ chỉ tính bằng đơn vị
nanoseconds. Do đó, để tạo ra sự đồng bộ trong việc trao đổi dữ liệu trên bộ nhớ và
trên đĩa, cũng như tăng tốc độ truy xuất dữ liệu trên bộ nhớ, các hệ điều hành phải
thiết kế hệ thống file của nó sao cho tốc độ đọc dữ liệu là nhanh nhất và giảm số
lần truy cập đĩa mỗi khi truy xuất file xuống mức thấp nhất.
Một trong những kỹ thuật được hệ điều hành sử dụng ở đây là tạo ra các
block cache hoặc buffer cache. Trong ngữ cảnh này, cache là một tập các block
logic trên đĩa, nhưng được tạo ra và được giữ trong bộ nhớ chỉ để phục vụ cho mục
đích cải thiện hiệu suất của hệ thống.
Có nhiều thuật toán khác nhau được sử dụng để quản lý cache, nhưng tất cả
đều hướng tới mục đích của việc sử dụng cache và nguyên lý hoạt động của cache:
Khi nhận được một yêu cầu đọc dữ liệu từ tiến trình của người sử dụng thì bộ phận
quản lý cache sẽ kiểm tra block dữ liệu cần đọc đã có trong cache hay chưa, nếu có
trong cache thì đọc trực tiếp trong cache mà không cần truy cập đĩa, nếu không có
trong cache thì dữ liệu cần đọc sẽ được đọc và ghi vào trong cache trước rồi sau đó
được chép đến bất cứ nơi nào cần thiết. Việc ghi vào cache này nhằm chuẩn bị cho
các lần đọc dữ liệu sau này. Tức là, nếu sau này có một yêu cầu đọc cùng một
block dữ liệu như trên thì nó sẽ được đọc trực tiếp từ cache mà không cần truy cập
đĩa.
Khi cache bị đầy các block thì một vài block
trong đó phải bị xoá hoặc bị xoá và ghi trở lại về
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
đĩa nếu block này có sự thay đổi kể từ khi nó được
mang vào bộ nhớ kể từ lần được mang vào gần đây
nhất. Trong trường hợp này hệ điều hành cũng sử dụng
các thuật toán thay trang trong quản lý bộ nhớ như
FIFO, LRU, … để chọn một block trong cache để đưa ra
đĩa. Tuy nhiên cache được truy xuất ít thường xuyên
hơn, nên hệ điều hành có thể tổ chức một danh sách
liên kết để theo dõi việc truy xuất các block trong
cache, danh sách liên kết này được sử dụng cho thuật
toán thay block: LRU.
Một số khái niệm dùng trong quản lý đĩa
Track (từ đạo): Là các vòng tròn đồng tâm được tạo ra trên bề mặt đĩa,
đây sẽ là nơi chứa dữ liệu sau này. Các track được đánh số bắt đầu từ 0. Số
track trên mỗi mặt đĩa phụ thuộc vào từng loại đĩa.
Sector (cung từ): Các track được chia thành các khối có kích thước cố
định bằng nhau và được đánh địa chỉ, các khối này được gọi là các sector. Các
sector được đánh địa chỉ bắt đầu từ 1 trên mỗi track, như vậy trên đĩa sẽ tồn
tại nhiều sector có cùng số hiệu địa chỉ, cách đánh địa chỉ này gây khó khăn
nhiều người lập trình.
Kích thước của sector, số byte dữ liệu có thể chứa trên một sector, phụ
thuộc vào phần cứng. Trên các họ processor x86, kích thước sector trên đĩa
cứng thường là 512 byte, kích thước sector trên đĩa CD_ROM thường là 2048
byte.
Các sector được đánh địa chỉ theo kiểu trên được gọi là sector vật lý.
Trong thực tế lập trình các hệ điều hành chỉ sử dụng sector logic, theo đó thì
địa chỉ các sector được đánh bắt đầu từ 0 kể từ track 0 của mặt 0 trên đĩa thứ
nhất. Như vậy trên đĩa không có các sector có cùng số hiệu địa chỉ. Bảng sau
đây cho thấy sự tương ứng giữa các sector vật lý với sector logic trên một đĩa
mềm:
Mặt đĩa Trac
k
Sector
Sector
logic
Thông tin lưu
trữ
0 0 1 0
Boot
record
0 0 2 - 5 1 - 4 FAT
0 0 6 - 9 5 - 8 Thư mục gốc
1 0 1 - 3 9 - 11 Thư mục gốc
1 0 4 - 9 12 - 17 Dữ liệu
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
0 1 1 - 9 18 - 26 Dữ liệu
Bảng 4.1: Tương ứng giữa sector vật lý và sector logic trên đĩa mềm
Trên bề mặt đĩa tồn tại các sector mà hệ điều hành không thể ghi dữ liệu
vào đó hoặc không thể đọc dữ liệu từ đó. Các sector này được gọi là bad
sector. Trong quá trình định dạng đĩa hệ điều hành đánh dấu loại bỏ các bad
sector này.
Cluster (liên cung): Một nhóm gồm 2, 4 hoặc 6 sector liên tiếp nhau tạo
thành một cluster. Kích thước của cluster thường là bội số kích thước của một
sector. Các cluster được đánh địa chỉ bắt đầu từ 0. Số sector trên một cluster
phụ thuộc vào từng loại đĩa. Một số hệ điều hành cho phép người sử dụng quy
định số sector trên một cluster. Các hệ điều hành thường tổ chức lưu trữ dữ
liệu, nội dung các tập tin, trên đĩa theo từng cluster. Trên bề mặt đĩa cũng tồn
tại các bad cluster, đó là các cluster có chứa bad sector.
Một số hệ điều hành có thể khôi phục lại được dữ liệu chứa trên các bad-
sector hay bad cluster và ghi nó vào lại một cluster mới. Hệ điều hành có thể chỉ
khôi phục và thay thế dữ liệu tại sector bị bad hoặc phải khôi phục và thay thế toàn
bộ dữ liệu trên cluster có chứa bad-sector.
Hệ thống file NTFS của windowsNT/2000 tham chiếu đến các vị trí vật lý
trên đĩa bằng số hiệu cluster logic (LCNs: logical cluster numbers). LCN là kết quả
của việc đánh số tất cả các cluster trên volume từ vị trí bắt đầu volume đến kết thúc
volume. Để chuyển một LCN thành địa chỉ vật lý trên đĩa, NTFS nhân LCN với
thừa số cluster (số sector trên một cluster) để có được byte offset vật lý trên
volume. NTFS tham chiếu đến dữ liệu trong phạm vi một file bằng số hiệu cluster
ảo (VCNs: Virtual cluster numbers), VCN đánh số các cluster dựa vào một file cụ
thể và đánh số từ 0 đến m. Các VCN không cần phải liên tục về mặt vật lý, tuy
nhiên nó có thể ánh xạ đến bất kỳ một LCN nào trên volume.
Cylinder (từ trụ): Các track có cùng số hiệu trên các mặt đĩa khác nhau
của một hệ thống đĩa tạo thành một cylinder. Như vậy mặt đĩa có bao nhiêu
track thì đĩa có bấy nhiêu cylinder. Cylinder chỉ có trên các ổ đĩa cứng.
Partition (phân khu): Partition là một tập các sector liền kề trên một đĩa.
Mỗi partition có một bảng partition hoặc một cơ sở dữ liệu quản lý đĩa riêng,
dùng để lưu trữ sector đầu tiên, kích thước và các đặc tính khác của partition.
Volume: Một volume tương tự một partition logic trên một đĩa, và nó
được tạo khi ta định dạng một đĩa hoặc một phần của đĩa theo hệ thống file
NTFS. Trong hệ điều hành windowsNT/2000 ta có thể tạo ra một volume trãi
dài trên nhiều đĩa vật lý khác nhau. Một đĩa có thể có một hoặc nhiều volume.
NTFS điều khiển mỗi volume sao cho không phụ thuộc vào các volume khác.
Một volume bao gồm một tập các file cùng với bất kỳ một không gian
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
chưa được cấp phát nào còn lại trên partition đĩa. Trong hệ thống file FAT,
một volume cũng chứa các vùng đặc biệt được định dạng cho việc sử dụng của
hệ thống file. Trong các volume NTFS thì ngược lại nó lưu trũ tất cả dữ liệu
của hệ thống file, như là bitmap, directory và cả system bootstrap, trên các
file.
Simple volume: là các đối tượng đại diện cho các sector từ một
partition đơn, mà các trình điều khiển hệ thống file, quản lý nó như một
đơn vị đơn.
Multipartition volume: là các đối tượng đại diện cho các sector từ
nhiều partition khác nhau, mà các trình điều khiển hệ thống file quản lý
nó như một đơn vị đơn. Các multipartition volume có các đặc tính mà
các simple volume không có được như: hiệu suất cao, độ tin cậy cao và
khả năng mở rộng kích thước.
Metadata: là một dạng dữ liệu đặc biệt, được lưu trữ trên đĩa, nó hỗ trợ
cho các thành phần quản lý các dạng thức hệ thống file khác nhau, dữ liệu của
nó có thể là vị trí của các tập tin/ thư mục trên các ổ đĩa. Metadata không
được sử dụng trong các ứng dụng.
File system (hệ thống file): Các dạng thức hệ thống file định nghĩa cách
mà dữ liệu file được lưu trữ trên thiết bị lưu trữ và sự tác động của hệ thống
file đến các file. Một dạng thức hệ thống file cũng có thể đưa ra các giới hạn về
kích thước của các file và các thiết bị lưu trữ mà hệ thống file hỗ trợ. Một vài
hệ thống file hỗ trợ cho cả các file lớn hoặc nhỏ, hoặc cả các đĩa lớn và nhỏ.
Một hệ thống file thường bao gồm các thành phần: Sector khởi động
(Boot sector), bảng định vị file (FAT: File Allocation Table), bảng thư mục gốc
(Root Directory), một tập các file các thư mục và các công cụ quản lý các thành
phần này. Các thành phần này có thể có cấu trúc hoặc phương thức tổ chức
khác nhau trên các dạng thức hệ thống file khác nhau. Người ta thường dùng
tên của FAT trong hệ thống file để gọi tên của hệ thống file đó.
Hệ điều hành MS_DOS sử dụng hệ thống file FAT12 và FAT16, hệ điều
hành Windows9x sử dụng hệ thống file FAT32 và CDFS, hệ điều hành
Windows NT và Windows 2000 sử dụng các hệ thống file FAT12, FAT16,
FAT32, CDFS (CD_ROM File System, UDF (Universal Disk Format) và NTFS
(New Technology File System).
Các điều khiển hệ thống tập tin
Các điều khiển hệ thống tập tin (FSD: File system driver) quản lý các dạng
thức hệ thống file khác nhau. FSD chính thức xuất hiện từ windowsNT/2000.
Trong windows 2000 có 2 loại FSD: Local FSD và Network/ Remote FSD.
Local FSD: quản lý các volume được nối trực tiếp với máy tính. Network/
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Remote FSD: cho phép người sử dụng và chương trình của người sử dụng
truy cập dữ liệu trên các volume được nối với một máy tính ở xa.
Local FSD (FSD cục bộ): Các Local FSD bao gồm các tập tin: Ntfs.sys,
Fastfat.sys, Cdfs.sys và Raw FSD (được tích hợp trong Ntoskrnl.exe). Hình
sau đây cho thấy cách local FSD tương tác với quản lý I/O và các thiết bị lưu
trữ. Các local FSD chịu trách nhiệm đăng ký với bộ phận quản lý I/O, khi
FSD đã đăng ký thì bộ phận quản lý I/O có thể gọi nó để thực hiện việc xác
nhận volume khi các ứng dụng hoặc các hệ thống khởi tạo truy cập đến
volume.
Việc xác nhận volume bao hàm việc kiểm tra boot sector của volume và các
thông tin hệ thống khác. Sector đầu tiên của mọi dạng thức hệ thống file được hỗ
trợ bởi windows 2000 đều được dành riêng cho boot sector của volume. Boot
sector chứa đầy đủ thông tin cần thiết để local FSD vừa nhận biết mà sector trên đó
đang chứa một dạng thức mà FSD quản lý và tìm kiếm bất kỳ một metadata khác
được lưu trữ trên đĩa.
Để cải tiến hiệu suất, các local FSD thường sử dụng hệ thống quản lý cache để
cache dữ liệu của hệ thống file bao gồm cả metadata.
Các Network/Remote FSD (FSD mạng/từ xa): Các Remote FSD bao gồm 2
thành phần: Một Client và một Server. Các client remote FSD cho phép các
ứng dụng truy cập đến các file và các thư mục ở xa.
Client FSD chấp nhận các yêu cầu I/O từ các ứng dụng và chuyển nó thành
các lệnh trong các giao thức về hệ thống file của mạng để thông qua mạng nó được
Applicat
Applicat
I/O manager
File system
Sto
rage device
Logical
volume
(partition)
User mode
Kernel mode
Hình 4.7.a: FSD cục bộ
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m