Chào mừng bạn đến với Vimentor!

Hỏi đáp
Đăng ký

Giới thiệu về cách mapping giữa virtual address với physical address trong cơ chế virtual memory

Cùng Nhau Học Linux Kernel
Cùng Nhau Học Linux Kernel
24 bài viết — 24 Người theo dõi |
0
0

Tác giả: Võ Hải

****Không gian ảo và không gian vật lý:
Trong hầu hết các trường hợp, một không gian địa chỉ ảo thường lớn hơn số RAM vật lý có sẵn của hệ thống. Với việc mỗi process lại có bộ nhớ ảo của riêng mình, kernel và CPU phải cân nhắc làm thế nào để có thể ánh xạ giữa bộ nhớ vật lý và bộ nhớ ảo.
Cách thức ưa chuộng là dùng page table để cấp phát địa chỉ ảo cho địa chỉ vật lý. 
Process A và Process B có page table của riêng mình. Được chia thành các phần có kích thước bằng nhau bởi kernel, các phần này được gọi là page. Bộ nhớ vật lý cũng chia thành các page với cùng kích thước.
Cùng xét ví dụ (ảnh 1 :)))), vitual page 1 của process A ánh xạ đến physical page 4 trong khi đó vitual page 1 của process B ánh xạ đến physical page 5 của physical page. Điều này giúp cho với góc độ từ process chúng vẫn sở hữu bộ nhớ liên tục, nhưng thực tế không phải vậy.
Physical page thường được gọi là page frame. Khác với page trong bộ nhớ ảo.
Việc ánh xạ giữa bộ nhớ vật lý và bộ nhớ ảo cũng cho phép sự tách biệt nghiêm ngặt bộ nhớ giữa các process bị gỡ bỏ. Như trên ví dụ page 5 của process A và page 1 của process B cùng trỏ đến page frame 5. Điều này là có thể vì lối vào của cả 2 địa chỉ ảo trên 2 process cùng trỏ dến 1 page frame. 
Ta cũng thấy được không phải tất cả các page đều được link đến một page frame. Rõ ràng là như vậy vì page có thể ko được sử dụng hay dữ liệu vẫn chưa được tải vào bộ nhớ. Nó có thể được swap vào ổ cứng và swap lại khi cần.
Page Tables
Cấu trúc dữ liệu dùng để ánh xạ địa chỉ ảo đến địa chỉ vật lý được gọi là page tables. Cách làm dễ nhất là tạo ra một mảng chứa toàn bộ đầu vào của mỗi page trong địa chỉ ảo. Các đầu vào này sẽ chỉ đến các page frame được liên kết. Nhưng có một vấn đề, trong kiến trúc IA-32, 1 page có kích thước 4KiB, bộ nhớ ảo có kích thước 4GiB. Điều này sẽ tạo ra một mảng có hàng triệu phần tử. Trong kiến trúc 64 bit, tình hình còn tồi tệ hơn. Bởi vì mỗi process sẽ cần một page tables cho riêng mình. Cách tiếp cận này không khả thi vì toàn bộ RAM cần chỉ để giữ toàn bộ các page tables.
Vì hầu như toàn bộ vùng địa chỉ ảo không được sử dụng (sử dụng rất ít so với 4GiB ảo mà process được cấp) và do đó nó không có sự liên kết với các page frames, một mô hình giúp tốn ít bộ nhớ hơn được đưa ra: Phân trang nhiều cấp (multilevel paging)
---------------------------------------------------------------------------------
Để giảm kích thước của các page tables và cho phép các phần không cần thiết bị lờ đi, các kiến trúc được xây dựng để chia bộ nhớ ảo thành nhiều phần (ảnh 2)
Trong ví dụ này, địa chỉ ảo được chia thành 4 phần, trong đó có 3 phần thuộc page tables được gọi là bảng trang 3 cấp hay three-level page table. Sự phân chia này phụ thuộc vào người làm kiến trúc. Linux sử dụng bảng trang 4 cấp (four-level page table).
Phần đầu tiên của địa chỉ ảo được tham chiếu như một trang thư mục chung (page global directory) gọi tắt là PGD. Nó được dùng như một chỉ mục của một mảng mà mỗi process chỉ có duy nhất một phần tử. Các phần tử là những con trỏ đến các mảng tiếp theo gọi là trang thư mục trung gian (page middle directories) hay PMD
PMD là một mảng con trỏ khác đến một mảng tiếp theo gọi là page table hay page directories.
Phần PTE (page table entry) của địa chỉ ảo được sử dụng như chỉ mục cho page table. Việc lập bản đồ từ vitual page đến page frame được thực hiện vì các mục trong bảng trang trỏ đến các khung trang.
Phần cuối cùng của địa chỉ ảo là offset. Được sử dụng để xác định vị trí byte trong trang. Sau tất cả mỗi địa chỉ trỏ đến một byte được xác định duy nhất trong không gian địa chỉ.
Như đã nói một tính năng cụ thể của page table là không có page middel hay page table cần cho các vùng địa chỉ ảo không cần thiết, điều này giúp tiết kiệm bộ nhớ RAM đáng kể so với mảng đơn.
Về nhược điểm, mỗi khi bộ nhớ được truy cập nó cần chạy qua toàn bộ các vùng (PGD, PMD, PTE) để lấy được địa chỉ vật lý từ địa chỉ ảo. Để cải thiện hiệu suất các CPU tăng tốc theo 2 cách:
1. Một phần đặc biệt của CPU là memory management unit (MMU) được tối ưu hóa để tham chiếu.
2. Các địa chỉ xuất hiện thường xuyên sẽ được lưu trữ trong bộ nhớ fast CPU cache gọi là Translation Lookaside Buffer (TLB). Tốc độ được cải thiện vì dữ liệu địa chỉ có sẵn trong cache ngay lập tức sẵn sàng mà không cần truy cập đến page table do đó có sẵn trong RAM.
---------------------------------------------------------------------------------
Link bài trước: https://www.facebook.com/groups/259967441230713/permalink/305952936632163/

Không có văn bản thay thế tự động nào.

Không có văn bản thay thế tự động nào.

** Nếu bạn muốn viết các nội dung đặt biệt thì hãy làm theo hướng dẫn sau

Xem thêm 10 bình luận
Viết blog mới của bạn
Báo lỗi trang
Đang tải