You are on page 1of 3

Nguyễn Ngọc Công Anh-KHMT-K16

Báo Cáo
Quản lý Không gian trống
I.Giả Định
1. Tập Trung vào Lịch Sử Bộ Phân Bổ:
• Cuộc thảo luận chủ yếu về lịch sử xuất sắc của các bộ phân bổ trong thư viện cấp phát bộ
nhớ ở cấp độ người dùng, với tham khảo đến cuộc khảo sát xuất sắc của Wilson [W+95].
2. Giao Diện Cơ Bản của malloc() và free():
• Mô tả giao diện cơ bản như được cung cấp bởi malloc() và free(). Hàm malloc(size_t size)
nhận vào kích thước cần yêu cầu và trả về con trỏ đến một vùng bộ nhớ có kích thước đó hoặc lớn
hơn. Hàm free(void *ptr) giải phóng vùng bộ nhớ tương ứng.
3. Quản Lý Không Gian Trống với Heap và Free List:
• Bộ nhớ được quản lý trước đây được gọi là heap, và cấu trúc dữ liệu chung để quản lý
không gian trống trong heap là một loại danh sách miễn phí. Cấu trúc này chứa tham chiếu đến tất
cả các phần không gian trống trong khu vực bộ nhớ được quản lý.
4. Phân Mảnh Bên Ngoài và Bên Trong:
• Tập trung chủ yếu vào vấn đề phân mảnh bên ngoài, khi không gian trống chia thành các
phần nhỏ khác nhau, làm mất tính liên tục. Nếu bộ phân bổ cung cấp không gian lớn hơn yêu cầu,
có thể xuất hiện phân mảnh bên trong.
5. Không Di Chuyển Bộ Nhớ Đã Cấp cho Khách Hàng:
• Giả định rằng sau khi bộ nhớ được cấp cho khách hàng, nó không thể di chuyển đến vị trí
khác trong bộ nhớ. Không thể thực hiện nén không gian trống để đối phó với phân mảnh.
6. Quản Lý Khu Vực Liên Tục và Khả Năng Mở Rộng:
• Giả định rằng bộ phân bổ quản lý một khu vực liên tục của byte và không yêu cầu mở
rộng. Trong một số trường hợp, bộ phân bổ có thể yêu cầu khu vực đó phát triển, nhưng vì sự đơn
giản, giả sử khu vực này có kích thước cố định suốt đời sống của nó.
II. Cơ chế cấp thấp
Cơ chế cấp phát và giải phóng bộ nhớ cấp thấp:
Chia Nhỏ và Gộp Nhóm:
Chia Nhỏ: Đề cập đến việc chia một khối bộ nhớ lớn thành các khối nhỏ hơn. Thường được thực
hiện khi người dùng yêu cầu một lượng bộ nhớ cụ thể và có sẵn một khối lớn.
Gộp Nhóm: Bao gồm việc hợp nhất các khối bộ nhớ trống liền kề thành một khối lớn. Điều này
giúp giảm thiểu sự phân mảnh và tối ưu hóa việc sử dụng bộ nhớ.
Theo Dõi Kích Thước Các Khu Vực Đã Cấp Phát:
Hệ thống cần có một cơ chế để theo dõi kích thước của các khu vực bộ nhớ đã được cấp phát.
Thông tin này quan trọng để quản lý bộ nhớ và giải phóng nó một cách hiệu quả.
Nhúng Một Danh Sách Miễn Phí:
Danh sách miễn phí là một cấu trúc dữ liệu duy trì danh sách các khối bộ nhớ trống (miễn phí).
Nhúng chỉ việc tích hợp danh sách này trực tiếp vào cấu trúc quản lý bộ nhớ, giúp theo dõi bộ nhớ
trống một cách hiệu quả.
Mở Rộng Heap:
Heap là không gian bộ nhớ được cấp phát động sử dụng bởi chương trình. Mở rộng heap liên quan
đến việc mở rộng kích thước của nó khi cần thiết. Điều này có thể được thực hiện thông qua các
cuộc gọi hệ thống hoặc cơ chế như sbrk trong các hệ thống giống Unix, cho phép chương trình yêu
cầu thêm bộ nhớ từ hệ điều hành.
Các cơ chế này là cơ bản trong việc triển khai quản lý bộ nhớ và giải phóng bộ nhớ trong lập trình
cấp thấp, đặc biệt là trong các hệ thống yêu cầu quản lý bộ nhớ thủ công. Chúng giúp giải quyết
các vấn đề như phân mảnh và tận dụng hiệu quả các nguồn tài nguyên bộ nhớ có sẵn.
III. Chiến lược cơ bản

Các Chiến lược Cơ Bản:


1. Best Fit (Chọn Tốt Nhất):
 Mô Tả: Chọn khối trống nhỏ nhất mà vừa đủ để chứa yêu cầu cấp phát.
 Ưu Điểm: Giảm thiểu phân mảnh bên ngoài.
 Nhược Điểm: Có thể tạo ra nhiều khối trống nhỏ, dẫn đến phân mảnh nội bộ.
2. Worst Fit (Chọn Tệ Nhất):
 Mô Tả: Chọn khối trống lớn nhất mà vừa đủ để chứa yêu cầu cấp phát.
 Ưu Điểm: Giảm thiểu khả năng tạo ra các khối trống nhỏ, giảm phân mảnh nội bộ.
 Nhược Điểm: Tăng cơ hội xuất hiện phân mảnh bên ngoài.
3. First Fit (Chọn Đầu Tiên):
 Mô Tả: Chọn khối trống đầu tiên mà đủ lớn để chứa yêu cầu cấp phát.
 Ưu Điểm: Dễ triển khai và thực hiện.
 Nhược Điểm: Có thể tạo ra nhiều khối trống nhỏ, tăng phân mảnh bên ngoài.
4. Next Fit (Chọn Kế Tiếp):
 Mô Tả: Tương tự như First Fit, nhưng bắt đầu tìm kiếm từ vị trí của lần cấp phát
trước đó.
 Ưu Điểm: Dễ triển khai, giảm khả năng tạo ra nhiều khối trống nhỏ.
 Nhược Điểm: Vẫn có khả năng tạo ra nhiều khối trống nhỏ và tăng phân mảnh bên
ngoài.
Ví Dụ:
 Giả sử có một không gian bộ nhớ với các khối trống có kích thước 100 bytes, và yêu cầu
cấp phát là 30 bytes.
 Dưới các chiến lược:
 Best Fit: Chọn khối trống 30 bytes.
 Worst Fit: Chọn khối trống 100 bytes.
 First Fit: Chọn khối trống đầu tiên có đủ kích thước.
 Next Fit: Tương tự như First Fit, nhưng bắt đầu tìm kiếm từ vị trí của lần cấp phát
trước đó.
IV.Các phương pháp tiếp cận khác
Các Phương Pháp Khác:
Danh Sách Phân Loại (Segregated Lists):

 Mô Tả: Phân tách các khối bộ nhớ thành các danh sách theo kích thước. Mỗi danh sách quản lý
các khối cùng kích thước hoặc khoảng kích thước, giúp giảm hiệu ứng phân mảnh bên ngoài.
 Ưu Điểm: Hiệu quả đối với phân mảnh bên ngoài, giảm khả năng xuất hiện các khối trống nhỏ.
 Nhược Điểm: Cần nhiều quản lý danh sách, và vẫn có khả năng phân mảnh nội bộ.
Phân Bố Bạn Bè (Buddy Allocation):

 Mô Tả: Chia bộ nhớ thành các khối có kích thước là 2^n, trong đó mỗi khối có "bạn bè" có kích
thước tương đương. Khi một khối được yêu cầu, nó được chia thành các khối nhỏ hơn nếu cần.
 Ưu Điểm: Hiệu quả với phân mảnh bên trong, ít tạo ra các khối trống nhỏ.
 Nhược Điểm: Gây lãng phí bộ nhớ nếu yêu cầu không phải là bội số của 2.
Ý Tưởng Khác:

 Pooling (Gom Nhóm): Tập trung các khối cùng kích thước lại với nhau để giảm phân mảnh và
tối ưu việc quản lý.
 Slab Allocation: Phân chia không gian bộ nhớ thành các "slab" có kích thước cố định, mỗi slab
chứa các đối tượng cùng loại.
 Hoarding: Giữ lại các khối bộ nhớ và tái sử dụng chúng khi cần thiết để giảm số lần cấp phát
mới.
Các phương pháp này mang lại những ưu điểm và nhược điểm khác nhau, tùy thuộc vào yêu cầu cụ
thể của ứng dụng và bối cảnh sử dụng. Sự lựa chọn giữa các phương pháp này thường phụ thuộc
vào hiệu suất mong đợi, chi phí quản lý và yêu cầu về bộ nhớ của hệ thống.

You might also like