Ban đầu, bạn không thể để HĐH khách sử dụng phần cứng thực sự vì bạn không có cách nào để kiểm soát nó. Nếu bạn đã cố chạy nó trên CPU thực, bạn không có gì đảm bảo rằng nó sẽ điều khiển trở lại hệ điều hành máy chủ.
Ảo hóa như bạn mô tả, nó được triển khai trong phần cứng bằng cách cho phép các quy tắc và hạn chế nhất định được áp dụng ở cấp độ phần cứng, có thể được quản lý bởi hệ điều hành máy chủ. Điều này cho phép hệ điều hành máy chủ thiết lập các quy tắc về những gì khách có thể và không thể làm, sau đó thực sự chạy khách trên phần cứng thực. Nếu khách cố gắng làm điều gì đó với phần cứng thực sự vi phạm các quy tắc (chẳng hạn như cố gắng truy cập thiết bị đĩa), phần cứng sẽ tạm dừng khách và gửi máy chủ ngắt, cho phép chủ nhà cung cấp phản hồi (như trả lại dữ liệu từ một thiết bị đĩa mô phỏng), và sau đó tiếp tục khách.
Đây là một ví dụ đơn giản về quy trình:
Hệ điều hành máy chủ: Này CPU, tôi cần bạn chạy mã này. Gọi cho tôi nếu nó muốn làm một cái gì đó không chỉ là thực hiện các hướng dẫn.
CPU chủ: Bạn hiểu rồi!
CPU máy chủ lưu tất cả các thanh ghi và trạng thái máy chủ, sau đó bắt đầu thực thi mã hệ điều hành khách
Hệ điều hành khách: Tôi còn sống! Này CPU, bạn có thể lấy cho tôi tập tin này không?
CPU chủ: Uh ... chắc chắn. Một Lat.
CPU máy chủ lưu tất cả các thanh ghi và trạng thái của khách, sau đó khôi phục tất cả các thanh ghi máy chủ và trạng thái
CPU máy chủ: Này Hệ điều hành máy chủ, Khách muốn tệp này!
Hệ điều hành máy chủ: Ồ, hãy cung cấp cho họ cái này: Tệp từ ổ cứng ảo
CPU chủ: Bạn hiểu rồi!
CPU máy chủ lưu tất cả các thanh ghi và trạng thái máy chủ, khôi phục các thanh ghi và trạng thái của khách, sau đó bắt đầu thực thi mã hệ điều hành khách
CPU CPU: Đây là tệp!
Hệ điều hành khách: Ngọt ngào, cảm ơn!
Sự khác biệt chính ở đây là trong một trình giả lập, hệ điều hành khách không bao giờ thực sự chạy trên phần cứng. Với ảo hóa, hệ điều hành máy chủ cấu hình các giới hạn vào CPU và sau đó thực sự chạy mã khách trên CPU vật lý. Ví dụ trên cực kỳ đơn giản, nhưng bộ nhớ, ổ đĩa và thậm chí cả mạng có thể được kiểm soát trên bộ xử lý mới nhất hiện nay, cho phép chúng được giao tiếp an toàn mà không phải làm phiền hệ điều hành máy chủ mỗi lần. Miễn là khách không cố gắng vượt ra ngoài ranh giới ảo hóa, thì Hệ điều hành máy chủ có thể không có bất kỳ mã nào đang chạy nếu không có gì để làm tại một thời điểm nhất định.
Để thêm một chút phối cảnh, đây chỉ là một bước nữa trong lịch sử lâu dài của ảo hóa và kiểm soát. (Không đảm bảo rằng đây là theo đúng thứ tự hoặc là toàn diện, nhưng nên cung cấp một cái nhìn tổng quan bắt đầu tốt)
Ban đầu, không có ảo hóa. Tất cả các quy trình đều chia sẻ cùng một không gian bộ nhớ, tất cả đều có quyền truy cập đầy đủ vào phần cứng và khả năng đa tác vụ hoàn toàn phụ thuộc vào một quy trình tự dừng lại và trao quyền kiểm soát cho quy trình tiếp theo. Nếu HĐH muốn có bất kỳ loại điều khiển nào đối với một tiến trình, thì nó phải chạy tiến trình đó trong một trình giả lập (không ai làm thế, vì nó quá chậm một cách đau đớn).
Đầu tiên là Bộ nhớ đặc quyền : một số hành động nhất định chỉ có thể được thực hiện bởi các vùng bộ nhớ đặc biệt. Các vùng này được chiếm bởi HĐH, cho phép nó hoạt động như một cửa ngõ cho các hành động đặc quyền này. Một ví dụ là khả năng đọc / ghi dữ liệu vào phần cứng. Điều này ngăn các quá trình đọc / ghi trực tiếp vào ổ cứng và thay vào đó buộc chúng phải yêu cầu HĐH đọc / ghi cho chúng. Điều này có nghĩa là HĐH có thể kiểm tra xem quy trình có được phép hay không trước khi thực hiện hành động.
Tiếp đến là "thời gian" ảo hóa. HĐH có thể cấu hình CPU để làm gián đoạn quá trình hoạt động theo các khoảng thời gian đã đặt, cho phép nó kiểm soát lịch trình và chuyển đổi giữa các quy trình. Hệ điều hành hiện có thể chạy các quy trình trực tiếp trên phần cứng và vẫn ngăn chúng sử dụng sai thời gian của CPU. Điều này đã được cung cấp bởi một bộ đếm thời gian phần cứng .
Tiếp đến là bộ nhớ ảo : Vấn đề với bộ nhớ dùng chung là mọi quá trình đều có thể đọc bộ nhớ của bất kỳ quá trình nào khác. Điều gì xảy ra khi chương trình của Mary đọc mật khẩu của Bob từ trình duyệt web của anh ấy? Bộ nhớ ảo cho phép HĐH ánh xạ bộ nhớ mà một quá trình nhìn thấy vào các phần khác nhau của bộ nhớ vật lý hoặc thậm chí di chuyển chúng ra khỏi bộ nhớ vật lý hoàn toàn (vào tệp trang). Bất cứ khi nào một quá trình cố gắng đọc hoặc ghi vào bộ nhớ, VMMU (đơn vị quản lý bộ nhớ ảo) của CPU sẽ tìm kiếm nơi nó được ánh xạ tới trong bộ nhớ vật lý và thực hiện hành động ở đó. Nếu nó được ánh xạ ra khỏi bộ nhớ, thì CPU sẽ gọi HĐH để lấy trang vào bộ nhớ từ tệp trang.
Được rồi, vì vậy tại thời điểm này, chúng tôi đã đạt được sự khởi đầu của bộ xử lý X86, nơi chúng tôi có thể chạy các quy trình một cách an toàn và có thể chủ động ngăn chặn chúng tiếp quản hệ thống trừ khi HĐH đặc biệt cho phép chúng làm như vậy. Tại thời điểm này, các quy trình được "ảo hóa" một cách hiệu quả. Sự hỗ trợ này đã có từ lâu , vì vậy bạn không thực sự nghe thấy mọi người nói về các quy trình ảo hóa, vì nó chỉ giả định rằng tất cả các quy trình đều được ảo hóa ngay bây giờ.
Tại sao hệ điều hành ảo hóa đặc biệt, mặc dù? Tại sao chúng ta không thể bắt đầu một quá trình và để nó tự làm điều đó? Vấn đề là, với tư cách là một HĐH, hệ thống khách dự kiến có thể truy cập và sử dụng các điều khiển tương tự mà máy chủ sử dụng để kiểm soát các quy trình - về cơ bản, HĐH này sẽ là người cai trị tối cao của máy tính và họ chỉ đơn giản là không ' T làm việc nếu đó không phải là trường hợp. Các tiện ích mở rộng "Ảo hóa phần cứng" (AMD-V cho AMD và VT-x cho Intel) cho phép Hệ điều hành máy chủ cung cấp một bộ điều khiển ảo hóa ảo (bộ nhớ đặc quyền ảo, bộ định thời phần cứng ảo, bộ nhớ ảo).