2016-05-24 16 views

Trả lời

8

Sàn là tập hợp các đối tượng có cùng kích thước. Nó tránh phân mảnh bằng cách phân bổ một khối bộ nhớ khá lớn và chia nó thành các phần có kích thước bằng nhau. Số lượng các mảnh thường lớn hơn nhiều so với hai, nói 128 hoặc hơn.

Có hai cách bạn có thể sử dụng bảng. Đầu tiên, bạn có thể có một tấm chỉ cho một kích thước mà bạn phân bổ rất thường xuyên. Ví dụ, một hạt nhân có thể có một bản inode. Nhưng bạn cũng có thể có một số phiến ở các kích thước tiến bộ, như một tấm 128-byte, một tấm 192-byte, một tấm 256-byte, và vân vân. Sau đó, bạn có thể phân bổ một đối tượng có kích thước bất kỳ từ kích thước bản in tiếp theo. Lưu ý rằng trong cả hai trường hợp, không sử dụng bộ nhớ tái sử dụng phiến cho một đối tượng có kích thước khác trừ khi toàn bộ bản được giải phóng trở lại bộ cấp phát "khối lớn" toàn cục.

Hệ thống bạn thân là phương pháp không liên quan trong đó mỗi đối tượng có đối tượng "bạn thân" được đối chiếu khi nó được giải phóng. Các khối được chia làm đôi khi cần các khối nhỏ hơn. Lưu ý rằng trong hệ thống bạn bè, các khối được chia và kết hợp thành các khối lớn hơn làm phương tiện phân bổ chính và trả lại để sử dụng lại. Điều này rất khác với cách làm việc của tấm.

Hoặc để đặt nó đơn giản hơn:

hệ thống Buddy: khối với kích thước khác nhau được chia khi phân bổ và coalesced khi giải phóng để chia một cách hiệu quả một khối lớn thành các khối nhỏ hơn kích cỡ khác nhau khi cần thiết.

Sàn: Các khối rất lớn được phân bổ và chia thành các khối có kích thước bằng nhau. Không có sự phân chia hoặc kết hợp nào khác diễn ra và các khối được giải phóng chỉ được giữ trong một danh sách được gán cho các phân bổ tiếp theo.

Trình phân bổ lõi của hạt nhân Linux là người cấp phát hệ thống bạn bè linh hoạt. Bộ cấp phát này cung cấp các tấm cho các tấm phủ sàn khác nhau.

+0

Cũng sẽ khá đẹp nếu bạn có thể giải thích kết nối giữa cấp phát buddy và bảng phân bổ bản đồ trong câu trả lời của bạn (ví dụ như [this] (http://image.slidesharecdn.com/mm-121212232739-phpapp02/95/linux- memory-management-11-638.jpg? cb = 1355354903), nhưng có lẽ với nhiều chi tiết hơn). Cảm ơn. –

2

Trong bảng phân bổ bản đồ chung là danh sách các bản có kích thước cố định phù hợp để đặt các phần tử kích thước được xác định trước. Vì tất cả các đối tượng trong cùng một kích thước không có phân mảnh.

Trình phân bổ bạn bè chia bộ nhớ thành các khối có kích thước gấp đôi. Ví dụ nếu min chunk là 1k, tiếp theo sẽ là 2K, sau đó 4K vv Vì vậy, nếu chúng ta sẽ yêu cầu phân bổ 100b, sau đó đoạn với kích thước 1k sẽ được chọn. Điều gì dẫn đến phân mảnh nhưng cho phép phân bổ các đối tượng kích thước tùy ý (vì vậy nó rất phù hợp với phân bổ bộ nhớ người dùng, nơi kích thước đối tượng chính xác có thể có kích thước bất kỳ).

Xem thêm:

Ngoài ra tồi tệ hơn kiểm tra bài thuyết trình này: http://events.linuxfoundation.org/images/stories/pdf/klf2012_kim.pdf Slides từ trang 22 tiết lộ bản tóm tắt của differencies.

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