Quản lý bộ nhớ

Quản lý bộ nhớ (tiếng Anh: "memory management") là việc điều hành bộ nhớ máy tính ở cấp bậc hệ thống. Mục đích quan trọng của việc quản lý bộ nhớ là cung cấp những cách thức để cấp phát động các ô nhớ cho chương trình khi được yêu cầu và giải phóng các ô nhớ đó khi không cần dùng nữa. Đây là việc rất quan trọng đối với bất kỳ hệ thống máy tính cao cấp nào vì sẽ có nhiều công việc được tiến hành ở mọi thời điểm.

Nhiều phương pháp đã được tìm ra để gia tăng hiệu quả của việc quản lý bộ nhớ. Những hệ thống bộ nhớ ảo giúp tách những địa chỉ ô nhớ đang được dùng ra khỏi những địa chỉ thực, từ đó cho phép chia sẻ công việc và gia tăng lượng RAM một cách hiệu quả nhờ đánh dấu địa chỉ hoặc chuyển đến vùng lưu trữ thứ hai. Chất lượng của việc quản lý bộ nhớ ảo có thể có tác dụng lớn đến hiệu năng làm việc của hệ thống nói chung.

== Cấp phát bộ nhớ động ==
=== Chi tiết ===
Việc thực hiện một yêu cầu cấp phát bao gồm việc định vị một ô nhớ chưa được sử dụng với kích thước đủ lớn. Yêu cầu này được hoàn thành bằng việc cấp phát một phần từ nguồn chứa lớn của bộ nhớ được gọi là heap(khối xếp) hay free store. Vào bất cứ thời điểm nào, một vài phần của heap đang được sử dụng, còn một vài phần khác thì không do đó có thể được dùng để cấp phát.

Một vài vấn đề có thể làm phức tạp quá trình thực thi, ví dụ như phân mảnh ngoại, xảy ra khi có những khoảng trống nhỏ giữa những ô nhớ đã được cấp phát, điều này sẽ làm những ô nhớ này không khả dụng cho một yêu cầu cấp phát. Siêu dữ liệu của bộ cấp phát cũng có thể thổi phồng kích thước (riêng biệt) của những cấp phát nhỏ. Việc này thường được xử lý bằng quá trình chunking.Hệ thống quản lý bộ nhớ phải theo dõi những cấp phát quá hạn để đảm bảo không xảy ra tràn bộ nhớ.

=== Hiệu năng ===
Thuật toán cấp phát bộ nhớ động đặc biệt có ảnh hưởng lớn đến hiệu năng của hệ thống. Một nghiên cứu được Tập đoàn Digital Equipment thực hiện vào năm 1994 đã cho thấy những chi phí vận hành cho một loạt các bộ cấp phát. Độ dài instruction trung bình ngắn nhất để cấp phát một ô nhớ đơn là 52.

=== Thực hiện ===
Vì không biết được địa điểm chính xác của việc cấp phát, bộ nhớ được truy cập một cách gián tiếp, thường là thông qua con trỏ tham số. Thuật toán đặc biệt mà được dùng để tổ chức vùng nhớ, cấp phát và giải phóng chunks thì được liên kết với nhân và có thể sử dụng một số phương pháp sau.

==== Cấp phát ô nhớ kích thước cố định ====
Cấp phát ô nhớ kích thước cố định, còn được gọi là cấp phát nguồn nhớ, dùng 1 danh sách tự do gồm các ô nhớ có kích thước cố định (thường có cùng kích thước). Cách này hoạt động rất tốt đối với những hệ thống nhúng đơn giản khi không xảy ra việc cấp phát những vật có kích thước quá lớn, nhưng lại thiệt hại vì sự phân mảng, đặc biệt là với những địa chỉ dài. Tuy nhiên do chi phí giảm đáng kể nên phương pháp này có thể tăng cao hiệu suất của một số chương trình thường xuyên cần cấp phát và thu hồi bộ nhớ và thường được sử dụng trong Game

==== Ô nhớ bạn ====
Trong hệ thống này, ô nhớ được cấp phát vào nhiếu nguồn nhớ chứ không phải 1, mỗi nguồn nhớ đại diện cho một ô nhớ có kích thước thường là cấp số nhân của 2. Tất cả ô nhớ được giữ trong 1 danh sách liên kết hay cây dữ liệu và các ô nhớ mới được cấp phát được thêm tuần tự vào các nguồn nhớ để sử dụng sau đó. Nếu kích thước yêu cầu quá nhỏ, ô nhớ nhỏ nhất được chọn và chia đôi, một trong 2 mảng chia đôi đó được chọn để tiếp tục cho đến khi nào đạt được kích thước yêu cầu. Khi một ô nhớ được cấp phát, bộ cấp phát sẽ bắt đầu với những ô nhớ lớn vừa đủ để tránh tách ô nhớ không cần thiết. Khi một ô nhớ được giải phóng, nó được so sánh với ô nhớ bạn. Nếu cả hai đều được giải phóng, chúng được gộp lại và đặt trong danh sách ô nhớ lớn kế tiếp

== Hệ thống với bộ nhớ ảo ==
Bộ nhớ ảo là một phương pháp tách việc quản lý bộ nhớ khỏi phần cứng vật lý. Các ứng dụng xử lý bộ nhớ thông qua các địa chỉ ảo. Mỗi lần thử truy xuất dữ liệu lưu trữ, các địa chỉ ảo được dịch sang địa chỉ vật lý. Bằng cách này, việc có thêm bộ nhớ ảo giúp người dùng có được quyền hành chi tiết hơn đối với hệ thống bộ nhớ và các phương thức truy cập

Trong các hệ thống bộ nhớ ảo, hệ điều hành hạn chế cách các tiến trình truy xuất bộ nhớ. Chức năng bảo vệ bộ nhớ này có thể không cho phép một tiến trình đọc hoặc ghi lên vùng nhớ không được cấp phát cho nó, ngăn các phần mềm độc hại hoặc các đoạn mã lỗi trong chương trình can thiệp vào quá trình xử lý của một chương trình khác.

Mặc dù vùng nhớ được cấp phát cho một tiến trình nhất định thường được cô lập, các tiến trình đôi khi cần được chia sẻ thông tin. Chia sẻ vùng nhớ là một trong các kỹ thuật nhanh nhất cho sự giao tiếp giữa các tiến trình với nhau.

Bộ nhớ thường được phân loại - theo tốc độ truy xuất - thành bộ nhớ trong và bộ nhớ ngoài. Hệ thống quán lý bộ nhớ, cùng với các hoạt động khác, cũng xử lý việc chuyển thông tin giữa 2 cấp độ bộ nhớ này.