2012-03-22 28 views
18

Sự hiểu biết của tôi là các bảng trang bóng sẽ loại bỏ sự cần thiết phải mô phỏng bộ nhớ vật lý bên trong VM.Những bảng trang bóng (cho VMM) chính xác làm gì?

tức là.

thay vì: os khách -> VMM + bộ nhớ vật lý ảo -> OS host -> phần cứng máy chủ

nó chỉ: khách os -> VMM -> OS host -> phần cứng máy chủ

Các bảng trang bóng chỉ cho phép quá trình truy cập bộ nhớ của phần cứng máy chủ đúng cách. Tôi cũng không hiểu làm thế nào lỗi trang sẽ làm việc (hoặc kể từ khi tất cả bộ nhớ vật lý được xử lý bởi máy chủ lưu trữ, máy chủ lưu trữ sẽ chăm sóc các lỗi trang, trao đổi, vv).

(bằng bài tập về nhà, ý tôi là tôi đang nghiên cứu bài kiểm tra và chúng tôi cần hiểu khái niệm này).

Trả lời

51

Bảng trang bóng được sử dụng bởi trình siêu giám sát để theo dõi trạng thái trong đó khách "nghĩ" các bảng trang của nó nên là. Khách không thể được phép truy cập vào các bảng trang phần cứng bởi vì sau đó nó về cơ bản sẽ có quyền kiểm soát của máy. Vì vậy, hypervisor giữ ánh xạ "thực" (khách ảo -> host vật lý) trong phần cứng khi khách có liên quan đang thực thi và giữ một biểu diễn các bảng trang mà khách cho rằng nó đang sử dụng "trong bóng tối" hoặc tại ít nhất đó là cách tôi thích nghĩ về nó.

Lưu ý rằng điều này tránh bước dịch GVA-> GPA.

Theo như lỗi trang, không có gì thay đổi từ góc nhìn phần cứng của của phần cứng (hãy nhớ, hypervisor làm cho nó để các bảng trang được sử dụng bởi phần cứng chứa ánh xạ GVA-> HPA), lỗi trang sẽ đơn giản tạo một ngoại lệ và chuyển hướng đến trình xử lý ngoại lệ thích hợp. Tuy nhiên, khi một lỗi trang xảy ra trong khi máy ảo đang chạy, ngoại lệ này có thể được "chuyển tiếp" tới hypervisor, sau đó có thể xử lý nó một cách thích hợp.

Trình siêu giám sát phải xây dựng các bảng trang bóng này khi thấy lỗi trang do khách tạo. Khi khách viết một ánh xạ vào một trong các bảng trang của nó, hypervisor sẽ không biết ngay lập tức, vì vậy các bảng trang bóng sẽ không ngay lập tức "được đồng bộ" với những gì khách dự định. Vì vậy, các hypervisor sẽ xây dựng các bảng trang bóng trong, ví dụ, theo cách sau:

  • Khách viết một bản đồ cho VA 0xdeadbeef vào các bảng trang của nó (một vị trí trong bộ nhớ), nhưng hãy nhớ, lập bản đồ này không phải là đang được phần cứng sử dụng.
  • Khách truy cập 0xdeadbeef, gây ra một lỗi trang vì các bảng trang thực sự chưa được cập nhật thêm các bản đồ
  • trang lỗi được chuyển tiếp đến hypervisor
  • Hypervisor nhìn vào bảng trang của khách và thông báo họ khác nhau từ bảng trang bóng, nói "này, tôi chưa tạo bản đồ thực cho 0xdeadbeef"
  • Vì vậy, nó sẽ cập nhật bảng trang bóng của nó và tạo một bản đồ tương ứng 0xdeadbeef -> HPA để sử dụng phần cứng.

Trường hợp trước được gọi là lỗi lỗi trang bóng vì bị gây ra bởi sự ra đời của ảo hóa bộ nhớ. Vì vậy, việc xử lý các lỗi trang sẽ dừng lại ở hypervisor và hệ điều hành khách sẽ không có ý tưởng rằng nó thậm chí xảy ra.Lưu ý rằng khách cũng có thể tạo ra lỗi trang chính hãng do ánh xạ mà nó chưa cố tạo, và trình siêu giám sát sẽ chuyển tiếp các bản sao lưu này vào khách. Cũng nhận ra rằng toàn bộ quá trình này ngụ ý rằng mỗi lỗi trang xảy ra trong khi khách đang thực hiện phải gây ra một lối thoát cho VMM để bảng trang bóng tối có thể được giữ tươi. Điều này là tốn kém, và một trong những lý do tại sao hỗ trợ phần cứng đã được giới thiệu cho ảo hóa bộ nhớ. (here là một giới thiệu nhanh chóng để lồng nhau, hoặc bảng trang mở rộng)

Một tài liệu tham khảo tốt cho việc này là this book

+2

Tôi đã không nhận ra cho đến khi ngay bây giờ mà '0xdeadbeef' một điều ngoài lớp OS của tôi là. – DIMMSum

2

Khi vị khách viết một ánh xạ vào một trong những bảng trang của nó, hypervisor sẽ không biết ngay lập tức, vì vậy các bảng trang bóng sẽ không ngay lập tức "được đồng bộ" với những gì khách dự định.

Không chính xác. Bảng trang khách là chỉ đọc. Bất cứ khi nào có một bản cập nhật (ví dụ, một ánh xạ mới được thêm vào) trong bảng trang khách, nó bẫy vào hypervisor và hypervisor cập nhật bảng trang bóng theo đó được "đồng bộ" với khách.

Tài liệu tham khảo:

Các vấn đề liên quan