CHƯƠNG 4 : HỆ THỐNG FILE
4.3. CÁC THAO TÁC VỚI FILE
Như đã nói ở trên, file là một kiểu dữ liệu lơ gic, là nơi có thể lưu trữ và truy cập thông tin. Hệ điều hành cũng quy định ra các thao tác mà người dùng và ứng dụng có thể thực hiện với file. Các thao tác này được hệ điều hành thực hiện khi chương trình ứng dụng gọi lời gọi hệ thống tương ứng. Những thao tác với file thường gặp trong các hệ điều hành bao gồm: Tạo file. Một file trống chưa có dữ liệu được tạo ra. File được dành một chỗ trong thư
mục kèm theo một số thuộc tính như thời gian tạo file, tên file, người tạo file.v.v. Xoá file. Thao tác xố file bao gồm giải phóng khơng gian mà file chiếm trên đĩa, sau
đó giải phóng chỗ của file trong thư mục. Việc giải phóng khơng gian có thể đơn thuần là đánh dấu khơng gian đó như khơng gian tự do.
Mở file. Thao tác mở file được tiến hành trước khi đọc hoặc ghi file. Hệ điều hành căn
cứ vào tên file cần mở để tìm kiếm thông tin về file chứa trong thư mục. Thực chất của việc mở file là đọc các thuộc tính của file và vị trí file trên đĩa vào bộ nhớ để tăng tốc độ cho các thao tác đọc ghi tiếp theo.
Hệ điều hành sẽ lưu trữ một bảng chứa thông tin liên quan tới các file đang được mở trong bộ nhớ. Mỗi khi cần đọc ghi các file đang mở, hệ điều hành sẽ lấy thông tin cần thiết (chẳng hạn vị trí file trên đĩa) từ bảng này chứ khơng phải tìm kiếm trong thư mục nữa. Lệnh mở file thường trả về con trỏ tới mục chứa thông tin về file trong bảng các file đang mở. Con trỏ này sẽ được sử dụng làm thông số cho các thao tác tiếp theo với file.
Đóng file. Sau khi hồn thành tất cả các thao tác đọc ghi file, file cần được đóng, có
nghĩa là các thơng tin về file chứa trong bảng nói trên bị xố để nhường chỗ cho các file sắp mở. Rất nhiều hệ điều hành hạn chế số lượng file có thể mở cùng một lúc, do đó, việc đóng các file đã truy cập xong là rất quan trọng.
Ghi vào file. Vị trí của file trên đĩa được xác định từ thơng tin ghi trong thuộc tính của
file. Thơng thường, thơng tin này đã đọc vào bộ nhớ khi tiến hành thao tác mở file. Dữ liệu được ghi vào vị trí hiện thời (xem phần phương pháp truy cập file). Nếu vị trí hiện thời là cuối file, thơng tin sẽ được thêm vào và kích thước file tăng lên. Nếu vị trí này
Tên n Số thứ tự bản ghi An Bắc Giang File dữ liệu . . . 3 PTIT
không phải cuối file, thơng tin ở vị trí đó sẽ bị ghi đè lên. Lệnh ghi file cần cung cấp thông tin cần ghi.
Đọc file. Thơng tin ở vị trí hiện thời sẽ được đọc. Lệnh đọc file cần cung cấp thông tin
về số lượng byte hoặc bản ghi cần đọc và nơi chứa dữ liệu được đọc từ file (ví dụ vị trí bộ đệm).
Định vị (seek). Đối với file truy cập trực tiếp, thao tác định vị cho phép xác định vị trí
hiện thời để tiến hành đọc hoặc ghi.
Đọc thuộc tính của file. Một số chương trình trong quá trình làm việc cần đọc các
thuộc tính của file. Ví dụ thơng tin về những người có quyền truy cập file rất cần cho hệ thống bảo mật.
Thay đổi thuộc tính của file. Một số thuộc tính của file có thể được đặt lại giá trị.
Thông tin về quyền truy cập file là một ví dụ thuộc tính loại này. Hệ điều hành cung cấp lời gọi hệ thống cho phép xác lập hoặc thay đổi giá trị thuộc tính đó.
Cần nói thêm về thao tác mở file. Đây là thao tác khơng mang tính bắt buộc khi thiết kế hệ thống file của hệ điều hành nhưng thường được thêm vào do nó giúp tăng hiệu quả thao tác vào ra với file.
Giả sử file không được mở trước khi đọc ghi. Để thực hiện mỗi thao tác đọc ghi khi đó hệ điều hành sẽ phải tìm kiếm file trong thư mục, đọc các thuộc tính của file, xác định vị trí của file trên đĩa (được lưu như một thuộc tính của file trong thư mục) sau đó mới thực hiện thao tác đọc ghi. Để tránh lặp đi lặp lại các công đoạn này, file được mở trước khi truy cập. Thao tác mở file bao gồm tìm file (theo tên file) trong thư mục, sau đó đọc một phần thơng tin từ khoản mục của file vào một bảng trong bộ nhớ gọi là bảng các file đang mở (Hình ??). Các
thông tin thường được đọc là tên file, quyền truy cập, chủ sở hữu file và vị trí các khối chứa nội dung file trên đĩa.
Chỉ số Tên file Chủ sở hữu file Quyền truy cập Vị trí các khối trên đĩa 0 1 .. n Mail.txt myprog.c ... r rwx ... Hình 4.2: Một ví dụ bảng các file đang mở
Sau khi đã đọc khoản mục vào bảng các file mở, thao tác mở file trả về chỉ số ứng với file trong bảng đó. Chỉ số có thể là số thứ tự của file trong bảng hoặc con trỏ tới dịng chứa thơng tin về file. Chỉ số này được sử dụng làm thông số cho các thao tác đọc ghi về sau. Các hệ điều hành khác nhau gọi chỉ số bằng những tên khác nhau. Trong MS-DOS chỉ số được gọi là khối quản lý file (file control block) hoặc file handle, trong Windows NT, chỉ số cũng được gọi là file handle, trong khi đó UNIX sử dụng thuật ngữ khối mô tả file (file descriptor) cho
thông số này.
Với các hệ điều hành cho phép nhiều người dùng cùng sử dụng, thao tác mở file phức tạp hơn do có thể xẩy ra trường hợp nhiều người cùng yêu cầu mở file một lúc. Trong trường hợp đó, hệ điều hành sẽ xây dựng một bảng lưu trữ các thông tin chung về file như tên, vị
trí.v.v. và xây dựng riêng cho mỗi tiến trình một bảng chứa thơng tin riêng liên quan đến việc sử dụng file của tiến trình đó như vị trí hiện thời ở trong file.
Nhìn chung, mỗi file đang mở thường có các thơng tin sau đi kèm:
- Con trỏ tới vị trí hiện thời trong file: dùng xác định vị trí đọc, ghi hiện thời trong file.
Thông tin này đặc thù cho mỗi phiên làm việc với file và do vậy không thể lưu trữ cùng các thuộc tính khác trên đĩa.
- Vị trí file trên đĩa: giúp cho việc đọc ghi ra đĩa thực hiện nhanh hơn.
- Số tiến trình mở file. Một file có thể được nhiều tiến trình mở, số lượng tiến trình đang
mở file tăng lên khi có tiến trình mới mở file và giảm khi đóng file. Khi số lượng này giảm tới khơng, hệ điều hành sẽ xóa thơng tin về file khỏi bảng các file đang mở.
- Quyền truy cập. Mỗi file được gắn một danh sách người dùng và quyền truy cập của người dùng đó. Thơng tin về quyền truy cập được sử dụng để xác định xem một yêu cầu truy cập với file có được phép hay khơng.
Khóa file (lock). Trong trường hợp nhiều tiến trình đồng thời thay đổi nội dung một file, việc
thay đổi có thể dẫn tới kết quả khơng mong đợi. Để khơng xẩy ra tình huống này, một số hệ điều hành cho phép khóa file. Khi một tiến trình mở file, tiến trình đó có thể u cầu khóa file, tức là khơng cho các tiến trình khác truy cập. Chế độ khóa file có thể xác định với từng loại thao tác cụ thể, chẳng hạn tiến trình khác có thể đọc file bị khóa nhưng khơng thể ghi vào file đó.