Quản lý trang trong nhân hệ điều hành


7

Tôi đã xem một số sách lý thuyết hệ điều hành cũ của tôi và nhận thấy rằng một thiếu sót rõ ràng trong tất cả các sách HĐH này là làm thế nào để thực sự theo dõi các trang vật lý miễn phí (tức là thuật toán để thực hiện danh sách miễn phí). Tôi biết khá rõ cách thức phân bổ bộ nhớ người dùng hoạt động, nhưng một điểm khác biệt lớn với phân bổ trang vật lý là sự phân mảnh của các trang vật lý không phải là vấn đề, vì bảng trang chỉ có thể chọn và chọn các trang vật lý mà không cần phải quan tâm đến việc liệu chúng có quan tâm hay không có tiếp giáp hay không. Vì việc tránh phân mảnh là một trong những mối quan tâm chính của người phân bổ người dùng, nên có vẻ như phân bổ trang vật lý về cơ bản là một vấn đề khác. Tôi đoán rằng điều này không hoàn toàn chính xác nếu một người muốn hỗ trợ các siêu trang để giảm áp lực lên TLB.

Câu hỏi của tôi: các kỹ thuật được sử dụng trong hạt nhân hiệu suất cao hiện đại cho vấn đề này là gì? Ngoài ra, vấn đề này có trở nên phức tạp hơn đáng kể trong các hệ thống NUMA không?

Câu trả lời:


5

Quản lý khung trang là khái niệm rất đơn giản; tất cả những gì bạn thực sự cần là một danh sách liên kết. Tuy nhiên, có hai yếu tố chính làm phức tạp mọi thứ:

  • DMA. DMA là một trong số ít những thứ có thể cần một bộ đệm vật lý có kích thước lớn hơn một trang. Ngoài ra, có những thiết bị kế thừa để tranh đấu; trên x86, ví dụ, các thiết bị 32 bit chỉ có thể thực hiện DMA từ các địa chỉ vật lý dưới giới hạn 4G. Đối với ISA, nó thậm chí còn tệ hơn.
  • Cache màu , đó là một tối ưu hóa cực kỳ quan trọng.

Hầu hết các hệ điều hành sử dụng các kỹ thuật đơn giản đáng ngạc nhiên.

Windows, ví dụ, chỉ sử dụng một loạt các danh sách được liên kết (hoặc ít nhất là nó đã làm, lần trước có ai nói bất cứ điều gì về nó). Thật khó để nói vì chúng tôi không thể xem mã nguồn, nhưng có thể có các danh sách được liên kết với N * M trong đó N là số trạng thái có thể có của một trang (ví dụ: đang sử dụng, miễn phí, đang chờ để được phân trang) và M là số lượng màu.

Linux nổi tiếng sử dụng một công cụ cấp phát bạn bè để quản lý các trang vật lý, điều này chỉ phức tạp hơn một chút so với một loạt các danh sách được liên kết khi bạn nghĩ về nó.

Có lẽ kế hoạch quản lý tinh vi nhất đã được ghi nhận rộng rãi là của Solaris. Xem Bonwick & Adams, Tạp chí và Vmem: Mở rộng Bộ phân bổ bản mỏng cho nhiều CPU và Tài nguyên tùy ý , USENIX 2001. Ngoài ra còn có một cuộc thảo luận mở rộng trong cuốn sách Solaris Internals . Bộ cấp phát phiến Solaris gặp rất nhiều rắc rối để tránh tranh chấp khóa, đập bộ nhớ cache và tương tự, và cũng có thể điều chỉnh việc thực hiện nó cho các loại dữ liệu khác nhau khi cần.

Điều thú vị là Solaris sử dụng cùng một bộ cấp phát bộ nhớ để xử lý các khung trang mà nó sử dụng để xử lý các đối tượng kernel, bằng cách lồng các bộ cấp phát bản mỏng bên trong các bộ cấp phát bản. Bài viết chắc chắn là đáng đọc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.