Bộ nhớ ảo / tiện ích phân trang cho phép kernel "ảo hóa" bộ nhớ cho các quá trình không gian người dùng. Nhân có thể lấy các trang từ bộ nhớ vật lý và sắp xếp chúng thông qua phân trang để chúng xuất hiện liền kề với quy trình không gian người dùng.
Một giới hạn có thể được đặt trên bộ nhớ của quy trình không gian người dùng và nếu quá trình vượt quá "lỗi trang" xảy ra, điều này gây ra ngoại lệ CPU bị trả về kernel. Điều này ngăn chương trình không gian người dùng làm rối với bộ nhớ được cấp phát cho kernel hoặc các chương trình khác mà không có sự cho phép của kernel.
Thông thường các chương trình không gian người dùng yêu cầu kernel mở rộng giới hạn này thông qua các giao diện được xác định rõ (được gọi bởi các hàm C malloc()
và free()
ví dụ.). Hạt nhân chịu trách nhiệm theo dõi số lượng và bộ nhớ mà chương trình được phân bổ.
Cơ chế "lỗi trang" này cũng có thể cho phép nhân trao đổi trang mà quá trình đang cố truy cập với một từ đĩa, nếu hạt nhân có thể cung cấp quá nhiều bộ nhớ (và cả Windows và Linux đều hỗ trợ điều này) do đó nó được gọi là trao đổi. Nếu quyền truy cập bộ nhớ thực sự không hợp lệ (nghĩa là quá trình đang cố truy cập vào bộ nhớ thì trước tiên nó không yêu cầu), thông thường quy trình sẽ bị hủy bằng SIGSEGV.
Vì vậy, "tráo đổi" là một tính năng bổ sung (trong Linux, bạn thực sự có thể vô hiệu hóa nó hoàn toàn nếu bạn muốn) phụ thuộc vào bộ nhớ / phân trang ảo, nhưng không bắt buộc chỉ vì CPU có bộ nhớ / phân trang ảo. Các khái niệm không giống nhau nhưng hoán đổi phụ thuộc vào phân trang / bộ nhớ ảo để tồn tại.
Ngoài ra, sau khi đọc kỹ câu hỏi của bạn, "phân trang" đôi khi được sử dụng như một từ đồng nghĩa với "hoán đổi" - nhưng tôi chưa bao giờ nghe nói về "hoán đổi" có nghĩa là toàn bộ bộ nhớ của quá trình bị tráo đổi so với "phân trang" chỉ là một phần của nó được hoán đổi
Nhưng tại sao linux cần một phân vùng trao đổi sau đó? Nếu bộ nhớ vật lý
đã đầy, một số quy trình sẽ được gia công cho ổ cứng và một quy trình mới
quá trình sẽ được ánh xạ từ bộ nhớ ảo sang bộ nhớ vật lý.
"Bộ nhớ ảo" Là bộ nhớ vật lý, chỉ "ánh xạ lại." Phần cứng MMU không thể ánh xạ trực tiếp tới bất kỳ thiết bị lưu trữ nào. MMU có thể đưa ra một lỗi báo cho kernel một tiến trình đã cố truy cập vào bộ nhớ mà nó không nên có - và kernel có thể sử dụng cơ chế này để thấy rằng một tiến trình muốn lấy lại thứ gì đó từ đĩa mà nó nghĩ là trong bộ nhớ và sau đó thực hiện " hoán đổi ". Vấn đề là hệ điều hành quyết định lưu các trang vào đĩa để nó có thể sử dụng các trang đó cho các quy trình khác chứ không phải phần cứng.