Cấp phỏt cỏc khối liờn tiế p

Một phần của tài liệu Bài giảng Hệ Điều Hành_HVCNBCVT_PGS.TS Từ Minh Phương (Trang 119 - 135)

Mỗi file ủược cấp một khoảng khụng gian gồm cỏc khối nằm liờn tiếp trờn ủĩa. Vị trớ file trờn ủĩa ủược xỏc ủịnh bởi vị trớ khối ủầu tiờn và ủộ dài hoặc số khối mà file ủú chiếm. Chẳng hạn, nếu file ủược cầp phỏt n khối bắt ủầu từ khối thứ s, khi ủú cỏc khối của file sẽ là s, s+1, s+2, ..., s+n-1. Khoản mục của file trong thư mục sẽ chứa ủịa chỉ khối ủầu tiờn và số khối mà file chiếm (Hỡnh 4.7)

Hỡnh 4.7: Cấp phỏt cho file cỏc khối liờn tục

Trong trường hợp cấp phỏt khối liờn tiếp, việc truy cập file cú thể thực hiện dễ dàng theo cả hai cỏch truy cập trực tiếp và truy cập tuần tự. để truy cập tuần tự, hệủiều hành ghi nhớủịa chỉ khối vừa ủược truy cập cuối cựng. Khối tiếp theo sẽủược ủọc khi cần thiết. Việc truy cập trực tiếp khối thứ i của một file bắt ủầu tại ủịa chỉ s ủược thực hiện bằng cỏch truy cập khối thứ s+i của ủĩa.

Ngoài việc hỗ trợ cả hai phương phỏp truy cập và dễ dàng lưu trữ vị trớ file trong thư

mục, phương phỏp cấp phỏt cho file cỏc khối liờn tiếp cũn cho phộp tiết kiệm thời gian di chuyển ủầu từ khi ủọc cỏc khối của file. đểủọc một khối trờn ủĩa, ủầu từ cần di chuyển tới vị

trớ khối ủú bằng cỏch di chuyển tới rónh tương ứng và chờ cho tới khi cung chứa khối quay

ủến nơi. Trong trường hợp cỏc khối của file nằm kề nhau cú thể ủọc liờn tiếp mà khụng thực hiện cỏc di chuyển núi trờn. Trong trường hợp cỏc khối nằm trờn cỏc rónh khỏc nhau (vớ dụ

fileC trờn hỡnh 4.7) thỡ ủầu từ cũng chỉ phải di chuyển sang rónh bờn cạnh. Do khụng phải di chuyển ủầu ủọc nờn tốc ủộ truy cập file sẽ tăng lờn.

3 Một số tài liệu gọi khối vật lý là cung va khối lụgic là liờn cung

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Thư mục Tờn file fileA fileB fileB Bắt ủầu 1 3 8 độ dài 2 3 5 fileA fileB fil

Ngoài cỏc ưu ủiểm núi trờn, việc cấp phỏt cho file cỏc khối liờn tiếp cú một số nhược

ủiểm lớn. Khú khăn ủầu tiờn liờn quan tới việc tỡm ra khoảng khụng gian trống ủủ lớn trờn ủĩa

ủể cấp phỏt cho file. Sau một thời gian sử dụng, cỏc khối ủược cấp phỏt khi tạo file và giải phúng khi xoỏ file sẽ tạo ra cỏc vựng trống trờn ủĩa. Khi cú yờu cầu cấp phỏt, hệ ủiều hành phải kiểm tra cỏc vựng trống ủể tỡm ra vựng cú kớch thước thớch hợp. Việc này ủũi hỏi một thời gian nhất ủịnh. Việc lựa chọn ụ trống ủể cấp phỏt cho file cú thể thực hiện theo một trong cỏc chiến lược cấp phỏt bộ nhớủộng ủó ủược trỡnh bầy trong phần phõn ủoạn bộ nhớ. Chiến lược thường ủược sử dụng là tỡm vựng trống ủầu tiờn thớch hợp (first fit) hoặc tỡm vựng trống thớch hợp nhất (best fit).

Tương tự như trong trường hợp cấp phỏt bộ nhớ ủộng, phương phỏp cấp phỏt khối liờn tiếp gõy ra lóng phớ khụng gian ủĩa do hiện tượng phõn mảnh ngoài (external fragmentation).

đú là hiện tượng cỏc vựng trống cũn lại trờn ủĩa cú kớch thước quỏ nhỏ và do vậy khụng thể

cấp phỏt cho file cú kớch thước lớn hơn. Vớ dụ, trờn hỡnh 4.7, vựng trống nằm trước fileA cú kớch thước 1 khối và khụng thể cấp phỏt cho file kớch thước lớn hơn. Những vựng trống như

vậy do ủú bị bỏ phớ. Tuỳ thuộc vào kớch thước ủĩa, ủộ dài khối và ủộ dài trung bỡnh của file, hiện tượng phõn mảnh ngoài sẽ gõy lóng phớ khụng gian nhiều hay ớt. Mặc dự hiện tượng này cú thể khắc phục bằng cỏch chuyển cỏc file lại gần nhau ủể tập trung tất cả vựng trống về cuối

ủĩa nhưng việc di chuyển file cần khỏ nhiều thời gian, ủặc biệt khi kớch thước ủĩa lớn, và do vậy khụng thể tiến hành thường xuyờn.

Một nhược ủiểm khỏc của phương phỏp này là cần phải biết kớch thước file khi tạo file. Trong một số trường hợp như khi chộp file từ nơi này sang nơi khỏc, ta biết trước kớch thước file cần tạo. Tuy nhiờn, trong ủa số trường hợp, kớch thước file khụng ủược biết trước mà chỉ

biết sau khi ghi thụng tin vào file. Mặt khỏc, kớch thước file luụn luụn thay ủổi. Sau khi file

ủó ủược tạo, việc tăng ủộ dài file cú thể gặp khú khăn nếu cỏc khối nằm sau vị trớ của file ủó bị file khỏc chiếm. Giải phỏp duy nhất ủể tăng kớch thước file là chuyển toàn bộ file sang vựng khụng gian trống lớn hơn.

4.5.2. Sử dụng danh sỏch kết nối

Cỏc phõn tớch ở phần trờn cho thấy, việc cấp phỏt khối liờn tiếp cú nhiều nhược ủiểm

ủỏng kể và do vậy ớt khi ủược sử dụng. Một phương phỏp cho phộp khắc phục những nhược

ủiểm này là sử dụng danh sỏch kết nối (linked list).

Trong phương phỏp này, cỏc khối thuộc về mỗi file ủược nối với nhau thành một danh sỏch múc nối. Trờn hỡnh 4.8 là vớ dụ một file bắt ủầu từ khối 1 và bao gồm cỏc khối 1,3, 8,17,6. Mỗi khối chứa con trỏ tới khối tiếp theo. để chứa con trỏ, hệủiều hành dành ra một số

byte ở ủầu mỗi khối. Chẳng hạn, với khối kớch thước là 512 byte, ta cú thể dành 508 byte chứa dữ liệu của file, cũn 4 byte chứa con trỏ tới khối tiếp theo. Khỏc với cỏch cấp phỏt khối

ở phần trước, cỏc khối thuộc về một file cú thể nằm bất cứ chỗ nào trờn ủĩa chứa khụng nhất thiết nằm liền kề nhau.

để xỏc ủịnh vị trớ file trờn ủĩa, khoản mục của thư mục sẽ chứa con trỏ tới khối ủầu tiờn của file. Khi mới tạo file, con trỏ này cú giỏ trị nil (dấu hiệu kết thỳc file và cú thể cú cỏc giỏ trị khỏc nhau tuỳ vào hệ thống cụ thể). Mỗi khi file ủược cấp thờm khối mới, khối vừa cấp

ủược thờm vào cuối danh sỏch. để truy cập file, hệ ủiều hành ủọc lần lượt từng khối và sử (adsbygoogle = window.adsbygoogle || []).push({});

dụng con trỏủể xỏc ủịnh khối tiếp theo.

Do cỏc khối thuộc về một file cú thể nằm bất cứ chỗ nào trờn ủĩa, khụng nhất thiết phải nằm cạnh nhau nờn phương phỏp cấp phỏt này cho phộp trỏnh ủược hiện tượng phõn mảnh ngoài. Khụng cú khối trống nào bị bỏ phớ. Phương phỏp cấp phỏt này cũng khụng yờu cầu biết trước kớch thước khi tạo file. Kớch thước file cú thể tăng dễ dàng sau khi ủó ủược tạo. để tăng kớch thước file, hệủiều hành chỉ việc thờm khối trống vào danh sỏch và sửa lại con trỏ ở khối cuối.

Mặc dự giải khắc phục ủược cỏc nhược ủiểm của phương phỏp cấp khối liờn tục, sử

dụng danh sỏch kết nối cũng cú một số nhược ủiểm. Nhược ủiểm lớn nhất là phương phỏp này chỉ hỗ trợ truy cập tuần tự mà khụngcho phộp truy cập file trực tiếp. đểủọc một khối nào ủú ta phải theo tất cả cỏc con trỏ từ khối ủầu tiờn cho tới khối cần ủọc. Do con trỏ nằm ngay trong cỏc khối và khối là ủơn vị nhỏ nhất cú thể tiến hành ủọc nờn ủể xỏc ủịnh con trỏ, ta phải

ủọc cả khối. Như vậy, đểủọc một khối, ta phải ủọc lần lượt tất cả cỏc khối nằm trước bắt ủầu từ khối ủầu tiờn.

Hỡnh 4.8: Cỏc khối của file ủược kết nối thành danh sỏch

Nhược ủiểm thứ hai liờn quan tới tốc ủộ truy cập file. Do cỏc khối thuộc về một file cú thể nằm rải rỏc ở nhiều nơi trờn ủĩa nờn ủầu từ của ủĩa phải thực hiện nhiều thao tỏc di chuyển mới truy cập ủược hết dữ liệu của file.

Việc liờn kết cỏc khối thuộc về một file bằng con trỏ cũng làm giảm ủộ tin cậy và tớnh toàn vẹn của hệ thống file. Trong trường hợp giỏ trị cỏc con trỏ bị thay ủổi khụng ủỳng do lỗi việc xỏc ủịnh khối nào thuộc file nào sẽ khụng chớnh xỏc. Chi tiết về tớnh toàn vẹn của hệ

thống file sẽủược trỡnh bầy trong một phần sau.

4.5.3. Sử dụng danh sỏch kết nối trờn bảng chỉ số

Vấn ủề khụng hỗ trợ truy cập trực tiếp của phương phỏp dựng danh sỏch kết nối cú thể

khắc phục bằng cỏch sử dụng danh sỏch kết nối trờn bảng chỉ số. Bảng chỉ số là một bảng trong ủú mỗi ụ ứng với một khối của ủĩa. Con trỏ tới khối tiếp theo của file khụng chứa ngay trong khối nữa mà ủược chứa trong ụ tương ứng của bảng này (hỡnh 4.9). Mỗi ủĩa lụgic cú

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Thư mục Tờn file fileA Bắt ủầu 1 fil 3 8 17 6 -1

một bảng chỉ số ủược lưu ở vị trớ xỏc ủịnh, thường ở phần ủầu ủĩa. để trỏnh trường hợp bảng này bị hỏng, gõy mất thụng tin về khối, nhiều hệủiều hành tạo ra cỏc bản sao của bảng. Bản sao ủược sử dụng trong trường hợp bảng chớnh bị hư hỏng.

Kớch thước mỗi ụ trong bảng phụ thuộc vào số lượng khối trờn ủĩa. Vớ dụ, ụ kớch thước 4 byte cho phộp chứa con trỏ tới một trong 232 khối. Việc sử dụng bảng chỉ số cho phộp tiếp hành truy cập file trực tiếp. Thay vỡ ủọc tất cả cỏc khối nằm trước khối cần truy cập, ta chỉ cần

ủi theo chuỗi con trỏ chứa trong bảng chỉ mục. để trỏnh phải ủọc bảng chỉ số nhiều lần, hệ ủiều hành cú thểủọc và cache cả bảng này trong bộ nhớ. Tuy nhiờn, việc ủọc toàn bộ bảng chỉ

mục vào bộ nhớủũi hỏi một lượng bộ nhớủỏng kể. Giả sử ủĩa cú 220 khối. Bảng chỉ mục sử

dụng 4 byte cho mỗi ụ. Kớch thước bảng khi ủú sẽ là 220*4B=4MB.

Một vớ dụ bảng chỉ số ủược sử dụng rất thành cụng là bảng FAT (file allocation table) của hệủiều hành MS-DOS, OS/2 và Windows (trừ cỏc bản Windows sử dụng NTFS). Bảng FAT và cỏc bản sao ủược lưu trữởủầu mỗi ủĩa lụgic sau sector khởi ủộng (BOOT). Tuỳ vào phiờn bản FAT 12, FAT 16 hay FAT 32, mỗi ụ của bảng FAT cú kớch thước 12, 16 hay 32 bit và cho phộp quản lý tối ủa 212, 216, 232 khối.

Hỡnh 4.9: Danh sỏch kết nối cỏc khối sử dụng bảng chỉ số

4.5.4. Sử dụng khối chỉ số

Khối chỉ số (Index block hay Index node Ờ I-node) là phương phỏp trong ủú tất cả con trỏ tới cỏc khối thuộc về một file ủược tập trung một chỗ cho tiện việc truy cập trực tiếp ủến từng khối của file.

Trong phương phỏp này, mỗi file cú một mảng riờng của mỡnh chứa trong một khối gọi là khối chỉ số (I-node). Mảng này chứa thuộc tớnh của file và vị trớ cỏc khối của file trờn ủĩa (xem hỡnh 4.10). ễ thứ i của mảng này chứa con trỏ tới khối thứ i của file. Việc ủọc khối thứ i của file do vậy ủược thực hiện theo ủịa chỉ chứa trong ụ thứ i của khối chỉ số. Khi mới tạo file, tất cả cỏc ụ này cú giỏ trị nil. để thờm khối mới vào file, khối ủược lấy từ danh sỏch cỏc khối trống, sau ủú ủịa chỉ khối ủược thờm vào ụ tương ứng trong chỉ số.

thư mục

Tờn file ... 6

0 1 2 3 4 5 6 7 8 9 10 Ầ

9 3 -1 Ầ

Hỡnh 4.10: Phương phỏp sử dụng khối chỉ số

để xỏc ủịnh khối chỉ sốứng với file, khoản mục của file trong thư mục chứa con trỏ tới khối chỉ số này. Sau khi xỏc ủịnh ủược khối chỉ số tương ứng, khối này cú thểủược ủọc vào và cache trong bộ nhớ (vớ dụ khi mở file) ủể giảm thời gian cho thao tỏc ủọc ghi file tiếp theo.

Việc sử dụng khối chỉ số cho phộp tiến hành truy cập trực tiếp cỏc khối trong file mà khụng phải ủọc cỏc khối trước ủú. Cỏc khối thuộc về một file cũng khụng cần phải nằm gần nhau do ủú khụng gõy ra hiện tượng phõn mảnh ngoài. (adsbygoogle = window.adsbygoogle || []).push({});

Một vấn ủề quan trọng ủặt ra là chọn kớch thước cho i-node. I-node càng nhỏ thỡ càng tiết kiệm khụng gian. Tuy nhiờn, i-node nhỏ khụng cho phộp chứa ủủ con trỏ tới cỏc khối nếu file lớn. Ngược lại nếu i-node lớn (cú hàng trăm ụ) trong khi file nhỏ chỉ chiếm 1 hoặc 2 ụ thỡ cỏc ụ cũn lại khụng ủược sử dụng và gõy lóng phớ bộ nhớ. Cú hai cỏch giải quyết vấn ủề này.

Cỏch 1: Cho phộp thay ủổi kớch thước i-node bằng cỏch sử dụng danh sỏch kết nối. Mỗi i-node sẽủược cấp phỏt một khối trờn ủĩa ủể lưu cỏc ụ của mỡnh. Nếu kớch thước i-node tăng lờn, hệ ủiều hành sẽ liờn kết cỏc i-node ủể tạo thành i-node cú kớch thước lớn hơn. Khi ủú, cỏc ụ phớa trờn của i-node chứa con trỏ tới cỏc khối của file trong khi ụ cuối cựng chứa con trỏ tới i-node tiếp theo.

Cỏch 2: Sử dụng i-node nhiều mức cú cấu trỳc như sau. I-node bao gồm một số ụ chứa

ủịa chỉ cỏc khối nhớ trờn ủĩa. Trong hệ thống file Ext2 của Linux và phiờn bản BSD UNIX i-node cú 15 ụ như vậy. 12 ụ ủầu tiờn của i-node trỏ trực tiếp tới khối nhớ chứa dữ liệu của file trờn ủĩa. Nếu kớch thước file lớn và số lượng cỏc ụ này khụng ủủ, 3 ụ cuối của i-node chứa con trỏ tới cỏc khối chỉ số giỏn tiếp. ễ dầu tiờn trong 3 ụ (ụ thứ

13) chứa ủịa chỉ một khối chỉ số khỏc gọi là chỉ số giỏn tiếp mức 1. Cỏc ụ của chỉ số

này khụng chứa dữ liệu mà con trỏ tới cỏc khối chứa dữ liệu của file. Trong trường hợp vẫn khụng ủủủịnh vị hết cỏc khối của file, ụ tiếp theo của i-node sẽủược sử dụng

ủể trỏ tới khối chỉ số giỏn tiếp mức 2. Cỏc ụ của khối này trỏ tới khối ủịa chỉ giỏn tiếp mức 1 khỏc. Nếu chỉ số giỏn tiếp mức 2 vẫn chưa ủủ, chỉ số giỏn tiếp mức 3 sẽủược

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Thư mục Tờn file fileA Khối chỉ số 19 3 9 11 6 22 -1 -1

sử dụng. Với khối chỉ số gian tiếp mức 3 như vậy, hệủiều hành cú thểủịnh vị cỏc file kớch thước ủủ lớn. Kớch thước tối ủa của file phụ thuộc vào số ụ của khối chỉ số giỏn tiếp và kớch thước khối chứa dữ liệu của file (hỡnh 4.11).

Phương phỏp sử dụng khối chỉ số cũng bị nhược ủiểm tương tự như sử dụng danh sỏch kết nối. đú là do cỏc khối thuộc về một file khụng nằm gần nhau, tốc ủộ truy cập file bị giảm vỡ phải di chuyển ủầu ủọc nhiều lần.

4.6.QUẢN Lắ KHễNG GIAN TRấN đĨA

Khụng gian trờn ủĩa ủược cấp phỏt theo từng khối khụng phõn chia. để quản lý hiệu quả

khụng gian trờn ủĩa, ngoài phương phỏp cấp phỏt khối nhớ cho file, cần chỳ ý tới hai vấn ủề: vấn ủề lựa chọn kớch thước cho khối, và cỏch quản lý những khối trống (hiện khụng cấp phỏt cho file nào).

4.6.1. Kớch thước khối

Khối là ủơn vị cấp phỏt nhỏ nhất của hệủiều hành, mỗi file bao gồm một số nguyờn cỏc

Một phần của tài liệu Bài giảng Hệ Điều Hành_HVCNBCVT_PGS.TS Từ Minh Phương (Trang 119 - 135)