Hãy để tôi giải quyết phần "tại sao".
Một trong những lý do cho một hệ điều hành hiện đại là cho phép nhiều chương trình (quy trình) chạy cùng lúc trên một hệ thống. Nếu bạn muốn làm điều này một cách an toàn, những điều sau đây cần phải xảy ra:
Bạn có thể (trừ khi bạn có nhu cầu đặc biệt) không muốn tiết kiệm RAM trong hệ thống theo cách cố định - ví dụ: 256 MB cố định cho mỗi quy trình - giới hạn bạn 8 quy trình trong hệ thống 2GB. Bạn muốn mỗi quá trình có thể "yêu cầu" bộ nhớ và trả lại khi hoàn thành.
Bạn cũng không muốn phân chia các thiết bị I / O theo kiểu cố định giữa các thiết bị. Thông thường, bạn muốn một số hoặc tất cả phần cứng, như bộ nhớ là tài nguyên được chia sẻ hoặc ít nhất chỉ tạm thời độc quyền cho các quy trình cụ thể tại các thời điểm cụ thể. Điều này đòi hỏi tất cả các quy trình không cố gắng tự thực hiện I / O, nhưng "trải qua" một cái gì đó để lên lịch và điều phối I / O. Việc lập lịch trình rất quan trọng vì hầu hết I / O chậm hơn CPU rất nhiều, vì vậy bạn có thể để CPU thực hiện các công việc khác trong khi nó đang chờ I / O ngay cả trên hệ thống lõi đơn.
Để thực hiện quyền trên, người ta cần tận dụng một số tính năng phần cứng của CPU. Một trong số đó là MMU, cái còn lại là chế độ được bảo vệ. Hai hệ điều hành có thể chia sẻ các tính năng phần cứng này hợp tác để chạy hai hoặc nhiều hệ điều hành không?
Chắc chắn, nhưng không có gì trong phần cứng có thể ngăn chặn một hệ điều hành dậm chân trên tất cả các bộ nhớ hệ điều hành khác. Nếu CPU ở chế độ kernel (nó chỉ có một chế độ kernel), bất kỳ mã nào cũng có thể làm bất cứ điều gì. 100% mã có thể chạy từ một HĐH để chạy mã hoặc dữ liệu của HĐH kia. Và chúng tôi biết các hệ điều hành đã có lỗ hổng trong quá khứ và sẽ có nhiều hơn trong tương lai. Vì vậy, nó rất tệ cho an ninh.
Bây giờ, sẽ không hay sao nếu bạn có thể đặt một "lớp" khác lên trên lớp này và có hỗ trợ phần cứng cần thiết cho nhiều hệ điều hành không? Đó chính xác là những gì các tính năng ảo hóa phần cứng làm, chúng đặt một rào cản phần cứng giữa nhiều hệ điều hành đang chạy và có một "giao diện" cấp cao nhất cho chúng được gọi là hypanneror. Bạn chỉ có thể có một hypanneror. Và đúng vậy, các tiến trình chạy trong một trong hai HĐH phải trải qua ba lớp để thực hiện I / O (tiến trình - kernel cục bộ - hypanneror)