CHƯƠNG 3 : QUẢN LÝ BỘ NHỚ
3.6. BỘ NHỚ ẢO
3.6.1. Khái niệm bộ nhớ ảo
Qua các nội dung trình bày ở phần trên: phân trang, phân đoạn, trao đổi bộ nhớ-đĩa, có thể rút ra một số nhận xét như sau:
- Tiến trình có thể bị chia thành những phần nhỏ (trang hoặc đoạn) và được xếp nằm rải rác trong bộ nhớ. Các phần nhỏ này có thể bị trao đổi ra đĩa hoặc từ đĩa vào trong quá trình thực hiện.
- Các phép truy cập địa chỉ trong tiến trình đếu sử dụng địa chỉ lơgic, địa chỉ này sau đó được ánh xạ thành địa chỉ vật lý nhờ các cơ chế phần cứng. Việc ánh xạ được thực hiện trong thời gian thực hiện, với tiến trình cũng như người dùng khơng nhìn thấy và khơng cần biết đến việc ánh xạ này.
Phân tích việc thực hiện các tiến trình cũng cho thấy khơng phải tiến trình nào khi chạy cũng sử dụng tất cả các lệnh và dữ liệu của mình với tần suất như nhau. Ví dụ các đoạn lệnh xử lý lỗi có thể rất ít khi được gọi.
Các nhận xét này cho phép rút ra một kết luận rất quan trọng: khơng nhất thiết tồn bộ các trang hoặc đoạn của một tiến trình phải có mặt đồng thời trong bộ nhớ khi tiến trình chạy. Các trang hoặc đoạn có thể được trao đổi từ đĩa vào bộ nhớ khi có nhu cầu truy cập tới. Việc thực hiện các tiến trình chỉ nằm một phần trong bộ nhớ có một số ưu điểm sau:
- Số lượng tiến trình được chứa đồng thời trong bộ nhớ tăng lên do mỗi tiến trình chiếm ít chỗ hơn. Càng nhiều tiến trình trong bộ nhớ thì CPU càng được sử dụng triệt để hơn.
- Kích thước tiến trình có thể lớn hơn kích thước thực của bộ nhớ. Người lập trình có thể viết những chương trình lớn mà không cần quan tâm tới hạn chế của bộ nhớ thực. Điều này cho phép giải quyết một trong những vấn đề cơ bản của lập trình: giới hạn kích thước chương trình. Hệ điều hành sẽ tự phân chia chương trình, tải vào để thực hiện khi cần, người lập trình khơng cần quan tâm tới các vấn đề này.
Tới đây ta có thể đưa ra khái niệm bộ nhớ ảo. Trước hết, nhắc lại khái niệm bộ nhớ thực. Bộ nhớ thực là bộ nhớ vật lý của máy tính, lệnh và dữ liệu chỉ được xử lý khi nằm trong bộ nhớ thực. Bộ nhớ ảo là bộ nhớ lơgic theo cách nhìn của người lập trình và tiến trình và khơng bị hạn chế bởi bộ nhớ thực. Bộ nhớ ảo có thể lớn hơn bộ nhớ thực rất nhiều và bao
gồm cả không gian trên đĩa.
Bộ nhớ ảo là một phương pháp tổ chức bộ nhớ quan trọng được sử dụng trong hầu hết các hệ điều hành hiện đại. Nó đơn giản hoá rất nhiều nhiệm vụ của người lập trình và cho phép sử dụng khơng gian nhớ lớn hơn không gian nhớ thực.
Bộ nhớ ảo thường được xây dựng dựa trên phương pháp phân trang trong đó các trang là đơn vị để nạp từ đĩa vào khi cần. Trong phương pháp kết hợp phân đoạn với phân trang, trang cũng được sử dụng như đơn vị để xây dựng bộ nhớ ảo. Phương pháp phân đoạn tương đối ít được sử dụng làm cơ sở cho bộ nhớ ảo do các thuật toán đổi đoạn phức tạp hơn đổi trang. Nguyên nhân chính của sự phức tạp là do kích thước đoạn khơng cố định. Trong các phần sau, tổ chức bộ nhớ ảo trên cơ sở phân đoạn không được đề cập tới.