Có phải chip MMU (Bộ quản lý bộ nhớ) để bộ xử lý có hỗ trợ bộ nhớ ảo không?
Có thể mô phỏng chức năng MMU trong phần mềm không? (Tôi biết rằng nó có thể sẽ có tác động lớn đến hiệu suất).
Có phải chip MMU (Bộ quản lý bộ nhớ) để bộ xử lý có hỗ trợ bộ nhớ ảo không?
Có thể mô phỏng chức năng MMU trong phần mềm không? (Tôi biết rằng nó có thể sẽ có tác động lớn đến hiệu suất).
Câu trả lời:
Bất kỳ trình giả lập hệ thống nào mô phỏng hệ thống có chứa MMU đều mô phỏng MMU một cách hiệu quả trong phần mềm, vì vậy câu trả lời cho câu hỏi của bạn như đã nêu là ở bên phải. Tuy nhiên , bộ nhớ ảo yêu cầu một số cách để thực thi kiểm soát truy cập bộ nhớ hoặc ít nhất là dịch địa chỉ, do đó, nó cần mô phỏng phần mềm đầy đủ của CPU chạy phần mềm đang được kiểm soát hoặc cần hỗ trợ phần cứng.
Vì vậy, bạn có thể hình dung một cách có thể xây dựng một hệ thống không có MMU, cổng QEMU cho nó, thêm các phần còn thiếu để làm cho bộ nhớ ảo thực sự hữu ích ( ví dụ: thêm hỗ trợ trao đổi trên hệ thống máy chủ) và chạy hệ điều hành yêu cầu MMU trong QEMU, với tất cả sự bảo vệ mà bạn mong đợi trong hệ điều hành khách (loại bỏ các lỗi QEMU).
Một ví dụ thực tế và cũ, về một mô phỏng giả lập MMU không có MMU được sử dụng để cung cấp bộ nhớ ảo là máy Z , có khả năng phân trang và hoán đổi mã và dữ liệu của nó, trên các hệ thống 8 bit vào cuối những năm bảy mươi và đầu thập niên tám mươi . Điều này hoạt động bằng cách mô phỏng bộ xử lý ảo trên bộ xử lý thực bên dưới; bằng cách đó, trình thông dịch giữ toàn quyền kiểm soát bố cục bộ nhớ mà chương trình đang chạy mà nhìn thấy là.
Trong thực tế, người ta thường coi MMU là cần thiết để hỗ trợ bộ nhớ ảo, ít nhất là ở cấp hệ điều hành. Như chỉ định hạt nhân không có MMU? , có thể xây dựng nhân Linux để nó có thể chạy trên các hệ thống không có MMU, nhưng cấu hình kết quả rất bất thường và chỉ thích hợp cho các trường hợp sử dụng rất cụ thể (không có phần mềm thù địch cụ thể). Nó có thể không hỗ trợ nhiều kịch bản yêu cầu bộ nhớ ảo (hoán đổi, mmap
...).
Nó phụ thuộc vào chính xác những gì bạn gọi là bộ nhớ ảo. Một mô hình thú vị là mô hình Win16 cũ (được biết đến nhiều nhất từ Windows 3.x cũ, không phải Windows NT). Trong mô hình đó, bạn đã GlobalLock
và GlobalUnlock
, LocalLock
và các LocalUnlock
chức năng. Đây là một hình thức hợp tác, quản lý thủ công bộ nhớ ảo. Vì điều này đã được thực hiện trong phần mềm (ứng dụng), nên nó không yêu cầu MMU. Và bộ nhớ là ảo theo nghĩa là bộ nhớ đã mở khóa có thể được hoán đổi sang đĩa.
Tuy nhiên, trong mô hình Win16 không có sự bảo vệ giữa các quy trình khác nhau. Nếu một quá trình khác để lại dữ liệu trong bộ nhớ, bạn có thể ghi đè lên nó. Đây không phải là một hạn chế cơ bản. Với SSD nhanh hiện nay, bạn có thể loại bỏ hoàn toàn quá trình không chạy khỏi bộ nhớ và thực hiện trong thời gian hợp lý.
Không cần thiết phải có MMU phần cứng, nếu bạn có phần mềm có thể trao đổi các tiến trình đến và từ bộ nhớ vật lý.
Đây là phương thức hoạt động của các hệ điều hành đa tác vụ sớm. Chỉ có một tiến trình nằm trong bộ nhớ tại bất kỳ thời điểm nào, nó được hoán đổi toàn bộ khi hết thời gian của nó (bạn có thể thấy rằng điều này trở nên có vấn đề với các quy trình lớn). Nội dung bộ nhớ được xem bởi quy trình hiện đang chạy không giống với bất kỳ quy trình nào khác được xem và mỗi quy trình có chế độ xem riêng về không gian địa chỉ.
Một số hỗ trợ phần cứng rất hữu ích - một khái niệm về vùng nhớ "được bảo vệ" cho việc sử dụng riêng của HĐH (ví dụ: tất cả các địa chỉ có bộ MSB chỉ có thể truy cập trong chế độ giám sát) và giá trị "ngắt" cho biết địa chỉ cao nhất được sử dụng, nhưng quản lý bộ nhớ phần cứng không phải là một yêu cầu tuyệt đối cho bộ nhớ ảo; nó chỉ là một cách đặc biệt hiệu quả để đạt được nó.
Các máy thương mại ban đầu để làm VM không có MMU - chúng có VM được tích hợp trong bộ xử lý. Suy nghĩ hiện tại của tôi là MMU chỉ là một suy nghĩ để đưa VM lên trên các bộ xử lý không VM. VM được phát triển tại Đại học Manchester và các nhà thiết kế của Burroughs đã bị thuyết phục rằng họ nên đưa nó vào - mặc dù rất sáng tạo vào thời điểm đó.
Burveys B5000 (nay là máy Unisys MCP) đã sử dụng các bộ mô tả bộ nhớ thực thi các ranh giới bộ nhớ - đi ra ngoài một ranh giới và chương trình của bạn bị bỏ qua (tôn trọng các ranh giới là nền tảng của một xã hội tốt đẹp, nhưng một số lạm dụng đặc quyền, do đó các ranh giới phải được thi hành).
Bộ mô tả giữ địa chỉ bộ nhớ, chiều dài khối và loại dữ liệu, nhưng cũng là bit P hoặc bit hiện diện quan trọng. P-bit cho biết khối nằm trong bộ nhớ. P-bit bằng 0 có nghĩa là khối nằm trên bộ lưu trữ lớn và địa chỉ là địa chỉ lưu trữ, trong chương trình gốc (mã hoặc dữ liệu) hoặc trong VM (dữ liệu cuộn ra).
Những máy này thực hiện một mô hình bộ nhớ phân cấp. MMU dường như là để bù đắp cho sự thiếu hụt của bộ nhớ phẳng, cần ánh xạ các đối tượng người dùng vào bộ nhớ phẳng. JK Iliffe cũng thiết kế các máy ICL với mô hình này:
http://www.computerconservationsociety.org/resurrection/res74.htm#f
https://en.wikipedia.org/wiki/Burroughs_large_systems
Sự khác biệt giữa các máy này và hầu hết các máy hiện nay là chúng giải quyết kiến trúc hệ thống hoàn chỉnh, không chỉ là kiến trúc CPU.
Vì vậy, dường như không chỉ các MMU không cần thiết, mà các hệ thống sẽ tốt hơn nếu không có chúng.
Phần lớn các bộ xử lý máy tính để bàn, máy tính xách tay và máy chủ bao gồm một hoặc nhiều TLB trong phần cứng quản lý bộ nhớ và nó hầu như luôn có mặt trong bất kỳ bộ xử lý nào sử dụng bộ nhớ ảo phân trang hoặc phân đoạn .
Và sau đó, đọc về Bộ nhớ ảo và ý nghĩa thực sự của nó. Không gian địa chỉ ảo khổng lồ không phải là ý tưởng chính. Ý tưởng chính là bộ đệm / bộ đệm, trên nhiều cấp độ.
Nó không đơn giản lắm, nhưng bộ nhớ cache TLB này là một phần cứng quan trọng mà hệ thống con mm của hạt nhân xây dựng (nếu không VM sẽ chủ yếu là chi phí hoạt động).
VM =
bộ nhớ ảo HOẶC máy ảo. Rất khác biệt, rất kết nối.
Vì vậy, câu trả lời là không, một chip MMU (một đơn vị riêng biệt bên ngoài CPU, trên bo mạch chính) là không cần thiết.
Có, một số MMU phần cứng (trong CPU) là cần thiết để suy nghĩ về VM hữu ích. (Bắt đầu với phân đoạn 8086 này , dành cho nền tảng x86)