Tổ chức bảng phân trang

Một phần của tài liệu Giáo trình môn Hệ Điều Hành PTIT (Trang 107)

Việc lưu trữ và tổ chức bảng trang có ảnh hưởng nhiều tới hiệu năng toàn hệ thống. Trong phần này ta sẽ xem xét một số kỹ thuật liên quan tới việc tổ chức và truy cập bảng trang.

Tốc độ truy cập bảng phân trang

Mỗi thao tác truy cập bộ nhớ đều đòi hỏi thực hiện ánh xạ giữa địa chỉ lôgic và địa chỉvật lý, tức là đòi hỏi truy cập bảng phân trang. Tốc độ truy cập bảng phân trang do đó ảnh hưởng rất lớn tới tốc độ truy cập bộ nhớ của toàn hệ thống. Vậy phải lưu trữ bảng phân trang sao cho tốc độ truy cập là cao nhất.

Lưu bảng trang trong các thanh ghi. Cách nhanh nhất là sử dụng một tập hợp các thanh ghi dành riêng để lưu bảng trang. Các thanh ghi này được thiết kế riêng cho việc chứa dữ liệu bảng trang và ánh xạ địa chỉ. Việc truy cập các thanh ghi này được phân quyền, sao cho chỉ có hệ điều hành chạy trong chế độ nhân mới có thể truy cập được. Tốc độ truy cập bảng phân trang khi đó rất cao nhưng kích thước và số lượng bảng phân trang sẽ bị hạn chế do số lượng thanh ghi của CPU không nhiều lắm. Trong một số máy tính trước đây sử dụng kỹ thuật này, số lượng ô trong bảng trang không vượt quá 256.

Lưu bảng trang trong bộ nhớ trong. Các máy tính hiện đại đều có bộ nhớ lớn và do đó cũng cần bảng phân trang lớn tương ứng. Số lượng ô trong bảng trang có thể lên tới hàng triệu. Phương pháp dùng thanh ghi, do đó, không áp dụng được.

Các bảng phân trang khi đó được giữ trong bộ nhớ. Vị trí của mỗi bảng sẽ được trỏ tới bởi một thanh ghi gọi là thanh ghi cơ sở của bảng trang (PTBR-Page-Table Base Register). Như vậy mỗi thao tác truy cập bộ nhớ trong đòi hỏi hai thao tác truy cập bộ nhớ, một để đọc ô nhớ tương ứng trong bảng trang, và một để thực hiện truy cập cần thiết. Do tốc độ bộ nhớ tương đối chậm nên đòi hỏi nhiều thời gian cho việc truy cập bảng.

Sử dụng bộ nhớ cache. Do việc đọc bảng trang trong bộ nhớ chính có tốc độ chậm nên giải pháp thông dụng để tăng tốc độ truy cập bảng trang trong phần cứng hiện nay, bao gồm cả họ CPU x86, là sử dụng bộ nhớ cache tốc độ cao chuyên dụng gọi là đệm dịch địa chỉ

(nguyên bản tiếng Anh: Translation Look-aside Buffer - TLB). Mỗi phần tử của TLB chứa một khóa và giá trị tương ứng với khóa đó. Khóa ở đây là số thứ tự trang, giá trị là số thứ tự khung tương ứng. Khi đưa vào một số thứ tự trang, tức là một khóa, khóa sẽ được so sánh đống thời với tất cả các khóa trong TLB, nếu có khóa cần tìm, bộ đệm sẽ trả lại số thứ tự của khung tương ứng. Quá trình tìm kiếm khóa và giá trị khung tương ứng này diễn ra rất nhanh, hầu như không làm tăng thêm thời gian thực hiện chu trình xử lý lệnh của CPU.

Sơ đồ kết hợp đệm dịch địa chỉ TLB với bảng trang trong bộ nhớ được thể hiện trên hình 3.11. Thông thường, TLB chứa từ vài chục tới 1024 địa chỉ trang và số thứ tự khung tương ứng. Khi CPU sinh ra địa chỉ logic, phần số thứ tự trang p được gửi cho TLB, số này được so sánh đồng thời với tất cả các khóa (số thứ tự trang) trong TLB. Lúc này có hai khả năng:

- Nếu tìm được số thứ tự trang trong TBL, số thứ tự khung sẽ được trả về để tạo thành địa chỉ vật lý gần như tức thì.

- Ngược lại, nếu số thứ tự trang không nằm trong TLB, hệ thống sẽ truy cập bảng trang từ bộ nhớ trong để tìm số khung. Tùy từng hệ thống, việc truy cập bảng trang

có thể do phần cứng (CPU) hay hệ điều hành thực hiện. Sau khi truy cập bảng trang, thông tin này được dùng để tạo địa chỉ vật lý, đồng thời số thứ tự trang và khung vừa tìm được cũng được thêm vào TLB. Như vậy, nếu các lần truy cập tiếp theo sử dụng cùng trang này, số thứ tự trang đã được lưu trong TLB và do vậy không cần truy cập bảng trang nữa.

Trong trường hợp tất cả các ô trong TLB đã được điền đủ, hệ thống sẽ giải phóng một ô để chứa cặp giá trị mới được đọc vào. Để lựa chọn ô bị giải phóng có thể sử dụng một trong các thuật toán như LRU, quay vòng, hay thậm chí chọn ngẫu nhiên. Ngoài ra, hệ thống có thể giữ thường xuyên một số cặp số thứ tự trang – khung thường xuyên trong TLB, không bị đẩy ra ngoài. Đây thường là số thứ tự các trang chứa phần nhân của hệ điều hành, là các phần quan trọng, hay được truy cập.

CPU p o f o

f

p

Địa chỉ logic Địa chỉ vật lý

Bảng trang Bộ nhớ vật lý Số thứ tự trang tự khungSố thứ TLB Có trong TLB Không có trong TLB

Hình 3.11. Kết hợp đệm dịch địa chỉ (TLB) với bảng trang nằm trong bộ nhớ trong Độ hiệu quả của TLB được đánh giá như độ hiệu quả của bộ nhớ cache thông thường, tức là bằng tỷ lệ truy cập thành công tới TLB (hit ratio). Ví dụ, nếu tỷ lệ này là 90% thì trung bình trong 100 lần truy cập bộ nhớ, chỉ có 10 lần cần truy cập bảng trang và 90 lần còn lại có thể tìm được số thứ tự trang trong TLB. Các CPU hiện nay thường sử dụng TLB nhiều mức để tăng hiệu quả trong khi vẫn giữ được giá thành thấp.

Bảng trang nhiều mức

Các hệ thống tính toán hiện đại cho phép sử dụng không gian địa chỉ lôgic rất lớn (232 đến 264). Kích thước bảng phân trang do đó cũng tăng theo. Lấy ví dụ bảng trang trong Windows 32 với không gian địa chỉ lôgic là 232 B, kích thước trang nhớ là 4KB=212. Số lượng khoản mục cần có trong bảng phân trang sẽ là 232/212=220. Nếu mỗi khoản mục có kích thước 4 byte, kích thước bảng phân trang sẽ là 222=4MB. Mỗi tiến trình cần có một bảng phân trang riêng như vậy.

Do bảng trang có kích thước lớn, cần chia bảng trang thành các phần nhỏ hơn sao cho các phần có thể được lưu trong bộ nhớ độc lập với nhau. Có hai lợi ích chính của việc chia bảng trang thành các phần nhỏ như vậy. Thứ nhất, việc cấp phát các vùng nhớ nhỏ để chứa bảng trang đơn giản hơn so với cả bảng trang. Thứ hai, mặc dù bảng trang lớn nhưng đa số tiến trình có kích thước nhỏ hơn kích thước tối đa cho phép và do vậy chỉ một phần của bảng trang được sử dụng. Việc chia nhỏ bảng trang cho phép lưu một phần bảng trang trong bộ nhớ, là phần bảng trang thực sự được sử dụng. P1 P2 o Địa chỉ logic Bảng trang ngoài  Trang của bảng trang   P1 P2 o

Hình 3.12. Bảng phân trang hai mức

Việc chia nhỏ được thực hiện bằng cách tổ chức bảng phân trang nhiều mức. Mỗi khoản mục của bảng mức trên không chỉ tới một trang mà chỉ tới một bảng phân trang khác. Ta lấy ví dụ bảng hai mức như trong Windows 32. Địa chỉ 32 bit khi đó được chia thành 3 phần. Phần thứ nhất p1 kích thước 10 bit cho phép định vị khoản mục trong bảng mức trên. Từ đây ta tìm được bảng mức dưới tương ứng. Phần p2 cho phép định vị khoản mục trong bảng mức dưới. Khoản mục này chứa địa chỉ của khung tương ứng. Phần còn lại o kích thước 12 bit chứa độ dịch trong trang.

Bảng trang ngược (Inverted page table)

Trong các phần trước, ta đã xem xét cách tổ chức trong đó mỗi tiến trình có một bảng trang riêng, mỗi khoản mục của bảng ứng với một trang của tiến trình và chứa số thứ tự của khung cấp cho tiến trình đó. Do không gian địa chỉ logic lớn nên số lượng khoản mục trong mỗi bảng rất lớn, chẳng hạn trong Windows 32 là 220 khoản mục. Nếu đồng thời có nhiều tiến trình thì tổng số khoản mục của các bảng trang sẽ được nhân lên. Một kỹ thuật cho phép tránh việc có nhiều bảng trang như vậy gọi là bảng trang ngược (inverted page table), trong đó toàn bộ hệ thống chỉ có một bảng trang ngược, mỗi ô của bảng tương ứng với một khung nhớ vật lý, thay vì ứng với một trang nhớ logic như cách thông thường. Như vậy, kích thước của bảng trang ngược được xác định bới kích thước bộ nhớ thực của máy tính và không phụ thuộc vào số lượng tiến trình.

Mỗi khoản mục trong bảng trang ngược tương ứng với một khung và chứa hai thông tin: số thứ tự của trang nằm trong khung đó, và số định danh của tiến trình sở hữu trang này. Nếu khung chưa được cấp phát, thì khoản mục tương ứng trong bảng được để trống hoặc chứa một giá trị đặc biệt. Địa chỉ logic do CPU sinh ra gồm 3 phần:

< số định danh tiến trình pid, số thứ tự trang p, độ dịch trong trang o> Việc ánh xạ địa chỉ được thực hiện như sau (hình 3.13). Phần (pid, p) được so sánh với nội dung các khoản mục của bảng trang ngược để tìm ra ô có cùng pid và số thứ tự trang p như vậy. Số thứ tự của khoản mục tìm được chính là số thứ tự của khung. Số này được ghép với phần độ dịch o để tạo ra địa chỉ vật lý.

CPU pid o f o

f

Địa chỉ logic Địa chỉ vật lý

Bảng trang Bộ nhớ vật lý

p

Hàm

băm pid p

Hình 3.13. Bảng trang ngược Có hai cách để tìm ra khoản mục có chứa (pid, p) cần tìm.

- Cách thứ nhất là tìm kiếm tuần tự: (pid, p) được lần lượt so với nội dung từng ô trong bảng cho đến khi tìm được ô có pid và p tương ứng hoặc cho đến khi không tìm được ô như vậy. Do các ô trong bảng trang ngược không được sắp xếp theo thứ tự của pid và được sắp xếp theo số thứ tự khung nên chỉ có thể duyệt lần lượt để tìm được ô tương ứng. Cách này có tốc độ chậm, đặc biệt nếu bộ nhớ gồm nhiều khung. - Cách thứ hai sử dụng hàm băm để tìm tăng tốc độ tìm kiếm. Hệ thống sử dụng một

bảng băm cho phép ánh xạ (pid, p) vào khoản mục cần tìm như minh họa trên hình 3.13. Cách này có tốc độ nhanh hơn nhiều so với duyệt tuần tự. Cần lưu ý rằng việc truy cập hàm băm và bảng băm đòi hỏi thêm một lần truy cập bộ nhớ nữa. Như vậy thao tác ánh xạ địa chỉ dẫn tới hai lần truy cập bộ nhớ: một lần để truy cập bảng băm và một lần để truy cập bảng trang.

Bảng trang ngược được sử dụng với một số dòng CPU như PowerPC (do Apple-IBM- Motorola thiết kế và trước đây được sử dụng trong máy Macintosh của Apple), và IA-64 của Intel.

Một phần của tài liệu Giáo trình môn Hệ Điều Hành PTIT (Trang 107)