Giới thiệu về Buddy system dùng để cấp phát memory dưới kernel-space

Cùng Nhau Học Linux Kernel
Cùng Nhau Học Linux Kernel
24 bài viết — 36 Người theo dõi |
0
0

Tác giả: Võ Hải

****Buddy system
Có nhiều yêu cầu cần kernel cấp phát một bộ nhớ liên tiếp. Để nhanh chóng tìm kiếm vùng bộ nhớ có thể sử dụng được thỏa mãn yêu cầu, kernel sử dụng kỹ thuật: Buddy system
Các free block trong hệ thống luôn được nhóm thành một cặp như 2 người bạn. Những người bạn này có thể được cấp phát không phụ thuộc lẫn nhau nhưng nếu chúng cùng không được sử dụng cùng một thời điểm. Kernel gộp chúng lại thành một khối to hơn như một người bạn khác ở cấp độ tiếp theo. 
(Hình)
Ví dụ trên là 1 cặp bạn = 2 khối 8 page (2^4 = 16) được gộp lại bởi kernel trong một danh sách đặc biệt.
Thực chất là sự kết hợp giữa các cặp bạn nhỏ hơn (1,2,4,…).
Giải sử hệ thống yêu cầu cấp phát 8 page frame, ngay lập thức 16 page frame được chia thành 2 người bạn riêng rẽ. một phần sẽ được chuyển cho process yêu cầu, phần còn lại được đặt trong danh sách dành cho 8 page frame. 
Nếu yêu cần tiếp sau đó chỉ cần 2 page frame, khối 8 page frame được chi thành 2 khối 4 page frame và sau đó một khối 4 page frame được chia nhỏ thành 2 khối 2 page frame. Một khối được trả về cho buddy system, khối còn lại được đưa cho process.
Khi bộ nhớ được trả lại cho hệ thống, kernel dễ dàng tham chiếu đến các địa chỉ của một cặp bạn thân để trả về buddy list. Giúp tăng khả năng có sẵn của các khối bộ nhớ liên tiếp.
Khi hệ thống chạy với thời gian lớn, một vấn đề với việc quản lý bộ nhớ xuất hiện, hiện tượng phân mảnh (fragmentation). Sự cấp phát và giải phóng liên tục của các page frame có thể dẫn đến tình trạng tồn tại các page frame vẫn free nhưng lại rải rác, không liên tục trong bộ nhớ vật lý hay nói cách khác, không có các khối page frame liên tiếp lớn hơn mong muốn. Hiệu ứng này được giảm thiểu bởi buddy system nhưng không loại bỏ được hoàn toàn.
****The Slab
Thường thì kernel chỉ cần những memory block nhỏ (ví dụ như kiểu int 4byte) không cần thiết đến một page frame. Nhưng kernel không thể dùng các thư viện chuẩn nên nó phải tự định nghĩa các function cho chính nó. Kỹ thuật slab sẽ giữ lại những bộ nhớ được cấp phát có chứa dữ liệu của một đối tượng nhất định để thực hiện tái phân bổ trong những lần tiếp theo với các đối tượng cùng loại. Điều này giúp hạn chế sự phân mảnh trong. Về cơ bản thì là như vậy =)))

****Swapping and Page Reclaim
Swapping cho phép lượng RAM có thể sử dụng được mở rộng bằng cách sử dụng disk space làm bộ nhớ mở rộng. Các page được sử dụng không thường xuyên có thể được ghi vào hard disk khi kernel cần thêm RAM. Khi mà dữ liệu thật sự cần thiết, kernel sẽ swap lại vào bộ nhớ. Các trang được swap được xác định bằng một mục đặc biệt trong page table. Khi một process cố gắng truy cập vào một page dạng này, CPU sẽ tạo ra một page fault và bị chặn lại bởi kernel. Kernel sau đó có cơ hội trao đổi lại dữ liệu trên đĩa vào RAM. User process sau đó tiếp tục vì nó không biết về page fault. Việc swap in và swap out là vô hình với process.
Page reclaim (writing back data)được sử dụng để đồng bộ hóa ánh xạ sửa đổi với các block device cơ bản. Khi dữ liệu được xóa, page frame có thể được kernel sử dụng cho mục đích khác. 
------------------------------------------------------------------
Link bài trước:https://www.facebook.com/groups/259967441230713/permalink/309601956267261/

Top comment hay:

1. Phú Xấu Xa. Mình chia sẻ một chút về thằng slab allocator nhé. Do đặc thù dưới kernel phải cấp phát bộ nhớ rất nhanh, ko thể sleep rồi chờ đợi như trên user-space nên họ phát minh ra 1 bộ slab allocator. Idea của bộ cấp phát này là sẽ cấp phát bộ nhớ theo những size nhất định và nhóm những bộ nhớ cùng size vào 1 danh sách liên kết. Mỗi khi cần cấp phát cho thằng nào thì sẽ lấy từ trong danh sách ra, dùng xong thì lại trả về vị trí cũ trong danh sách. Làm như vậy thì sẽ tăng tốc độ cấp phát lên và còn giảm phân mảnh bộ nhớ nữa. Nhưng nhược điểm là sẽ tốn bộ nhớ hơn so với bộ cấp phát động trên tầng user-space

** Nếu bạn muốn viết các nội dung đặt biệt thì hãy làm theo hướng dẫn sau

Xem thêm 10 bình luận
Viết blog mới của bạn
Báo lỗi trang
Đang tải