2014-09-24 20 views
6

Tôi có câu hỏi về mối quan hệ giữa hạt nhân Linux và MMU. Tôi bây giờ có một điểm mà hạt nhân Linux quản lý bảng trang giữa các địa chỉ bộ nhớ ảo và địa chỉ bộ nhớ vật lý. Đồng thời có MMU trong kiến ​​trúc x86 quản lý bảng trang giữa các địa chỉ bộ nhớ ảo và địa chỉ bộ nhớ vật lý. Nếu MMU trình bày gần CPU, hạt nhân vẫn cần phải chăm sóc bảng trang?Quản lý bảng trang Linux và MMU

Câu hỏi này có thể là ngu ngốc, nhưng câu hỏi khác là, nếu MMU chăm sóc không gian bộ nhớ, người quản lý bộ nhớ cao và bộ nhớ thấp? Tôi tin rằng hạt nhân sẽ nhận được kích thước của bộ nhớ ảo từ MMU (4GB trong 32bit) sau đó hạt nhân sẽ phân biệt giữa không gian người dùng và không gian hạt nhân trong địa chỉ ảo. Tôi có đúng không? hoặc hoàn toàn sai?

Cảm ơn rất nhiều trước!

+0

Linux có thể chạy trên phần cứng không có MMU, vì vậy hạt nhân phải biết, làm thế nào để làm cho dịch, nhưng trên x86, tôi tin rằng, nó chỉ sử dụng MMU cho nó. –

+0

Tôi nhận xét thứ hai của Gennadi. Trên kiến ​​trúc x86, MMU quản lý dịch các địa chỉ ảo thành các địa chỉ vật lý, nhưng hạt nhân sẽ vẫn theo dõi những trang thuộc về nhân và những trang nào thuộc về các tiến trình người dùng. Tôi tin [this] (http://www.tldp.org/LDP/tlk/mm/memory.html) có thể giúp đưa ra ánh sáng cho mọi thứ hoạt động như thế nào. –

Trả lời

5

Trách nhiệm quản lý trang của OS và MMU là 2 mặt của cùng một cơ chế, sống trên ranh giới giữa kiến ​​trúc và kiến ​​trúc vi mô.

Mặt đầu tiên xác định "hợp đồng" giữa phần cứng và phần mềm chạy trên phần cứng (trong trường hợp này - HĐH) - nếu bạn muốn sử dụng bộ nhớ ảo, bạn cần xây dựng và duy trì bảng trang như được mô tả trong hợp đồng đó. Mặt khác, mặt MMU là đơn vị phần cứng chịu trách nhiệm thực hiện các nhiệm vụ HW của bản dịch địa chỉ. Điều này có thể hoặc không bao gồm tối ưu hóa phần cứng, chúng thường bị ẩn và có thể được thực hiện theo nhiều cách khác nhau để chạy dưới mui xe, miễn là nó duy trì phần cứng của hợp đồng.

Về lý thuyết, MMU có thể quyết định phát hành một bộ truy cập bộ nhớ cho mỗi bản dịch (một trang đi bộ), để đạt được hành vi bắt buộc. Tuy nhiên, vì nó là một yếu tố quan trọng, hầu hết các MMU tối ưu hóa điều này bằng cách lưu vào bộ nhớ cache các kết quả của các trang trước đó bên trong TLB, giống như một bộ nhớ cache lưu trữ các kết quả của các truy cập trước đó (trên thực tế, trên một số triển khai, bộ nhớ cache cũng có thể lưu trữ một số truy cập vào bảng trang vì nó thường nằm trong bộ nhớ có thể lưu trữ). MMU có thể quản lý nhiều TLB (hầu hết các triển khai tách riêng các dữ liệu và các trang mã, và một số có TLB cấp 2), và cung cấp bản dịch từ đó mà bạn không nhận thấy rằng ngoại trừ thời gian truy cập nhanh hơn. Cũng cần lưu ý rằng phần cứng phải bảo vệ chống lại nhiều trường hợp góc có thể gây tổn hại đến sự kết hợp của "bộ nhớ đệm" như vậy của các bản dịch trước đó, ví dụ như trang bí danh hoặc các lần remaps trong quá trình sử dụng. Quay lại đầu trang | Trên một số máy, các trường hợp nastier thậm chí yêu cầu một dòng chảy tuôn ra lớn gọi là TLB shootdown.

+1

Cụ thể hơn là giải quyết một phần câu hỏi về việc tách biệt hạt nhân và không gian người dùng có vẻ phù hợp. (Tôi nghĩ * Linux sử dụng các địa chỉ tiêu cực (toàn cầu) cho không gian hạt nhân và cho x86 điều này yêu cầu một trang ở đầu bảng trang phân cấp (mỗi vùng địa chỉ) nửa trên (tiêu cực) trong đó ánh xạ các phần tử kernel. hỗ trợ một bảng trang toàn cầu riêng biệt, có lẽ được sử dụng bởi hạt nhân Linux Bảng băm nhỏ của Power không được Linux sử dụng cho bảng chính, hệ thống bộ nhớ đệm mục nhập mới hơn không phù hợp với định dạng bảng chính của Linux. –

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