Xét một thí dụ: một máy tính trong đó các chỉ thị có trường địa chỉ 16 bit và có bộ nhớ 4096 word.
• Một chương trình chạy trên máy tính này có thể đánh địa chỉ 65536 word bộ nhớ, chứ không phải 4096.
• Khi còn chưa phát minh ra bộ nhớ ảo, phải phân biệt 2 miền địa chỉ: 0..4095: khả dụng
4096.. 65535: không khả dụng
Ý tưởng: làm tách biệt các khái niệm về không gian địa chỉ và các vị trí nhớ:
• Vào bất cứ thời điểm nào 4096 word bộ nhớ có thể được truy cập trực tiếp, nhưng chúng không nhất thiết phải tương ứng với các địa chỉ từ 0..4095. • Thí dụ chúng ta có thể “bảo”
ho máy tính rằng từ lúc này trở đi, mỗi khi truy cập địa chỉ:
• 4096: sử dụng word 0 • 4097: sử dụng word 1
• 8191: sử dụng word 4095 v.v.
• Nếu máy tính không có bộ nhớ ảo: chương trình này sẽ gây ra một bẫy lỗi, chẳng hạn “Nonexistent memory referenced” rồi bị dừng.
• Nếu máy tính có bộ nhớ ảo: một dãy các bước sau có thể sẽ lần lượt diễn ra:
1. Nội dung của bộ nhớ chính được cất vào bộ nhớ phụ.
2. Các word 8192..12287 đang nằm trong bộ nhớ phụ được nạp vào bộ nhớ chính.
3. Ánh xạ địa chỉ sẽ được thay đổi để ánh xạ các địa chỉ 8192..12287 vào các vị trí nhớ 0..4095.
4. Chương trình tiếp tục như không có điều gì bất thường xảy ra. Các khái niệm cần phân biệt:
0..4095: không gian địa chỉ vật lý
4096..: không gian địa chỉ ảo (virtual address space)
Kỹ thuật thực hiện overlay tự động được gọi là phân trang - paging, các đoạn chương trình được đọc vào bộ nhớ chính từ bộ nhớ phụ được gọi là các trang.
Cơ chế phân trang có thể coi là trong suốt đối với người lập trình. • Khi lập trình không cần phải biết đến sự tồn tại của bộ nhớ ảo.
• Có thể coi như đang lập trình cho một máy tính có một bộ nhớ chính rất lớn (ảo giác)
Paging so với segmentation: trong phương pháp Segmentation, người lập trình phải ý thức về sự tồn tại của các phân đoạn.