Chương VI Kiến trúc bộ nhớ
2. Vấn đề quản lý bộ nhớ
2.1. Chiến lược phân trang (Paging)
Chương trình muốn thực hiện bao giờ cũng được nạp vào bộ nhớ trong của máy tính. Các không gian miền địa chỉ không khả dụng phải được truy xuất thông qua địa chỉ bộ nhớ thực tế. Việc này thực hiện được nhờ phương thức ánh xạ bộ nhớ từ các địa chỉ của không gian địa chỉ vào các vị trí nhớ thực như trong hình vẽ sau:
Có thể suy diễn như sau: Vào bất kỳ thời điểm nào, các ô nhớ trong khoảng 4Kbytes đều có thể được truy nhập trực tiếp, nhưng không phải tương ứng với các địa chỉ từ 0000 đến 07FF. Thí dụ từ một thời điểm nhất
0800 0000 07FF Bộ nhớ chính Main Memory Không gian địa chỉ 64K Địa chỉ Address 0000 07FF 0FFF Vùng nhớ chương trình Ánh xạ vào bộ nhớ chính
định, mỗi khi truy nhập ô nhớ 0800 thì từ nhớ ở ô 0000 của bộ nhớ chính
được truy nhập, đáng lẽ truy nhập ô nhớ 0801 thì sẽ sử dụng ô nhớ 0001 v.v…Nói cách khác, ta định nghĩa một sự ánh xạ từ không gian địa chỉ vào các địa chỉ bộ nhớ thực, như minh hoạ trên hình vẽ.
Bằng phuơng thức này, nếu không có bộ nhớ ảo (Virtual Memory), một máy với 4Kbytes chỉ có một ánh xạ cố định từ địa chỉ 0000 đến 07FF vào 4096 từ nhớ. Vấn đề xẩy ra là trong trường hợp có một lệnh nhảy tới địa chỉ vượt quá 4Kbytes này, ví dụ tới địa chỉ trong vùng từ 0800 tới 0FFF. Đối với máy có bộ nhớ ảo, các bước sau sẽ được thực hiện:
Nội dung bộ nhớ chính được cất vào bộ nhớ phụ
Các nội dung trong vùng 0800 đến 0FFF đang ở trong bộ nhớ phụ
được nạp vào bộ nhớ chính.
Ánh xạ địa chỉ sẽ thay đổi để ánh xạ các địa chỉ từ 0800 tới 0FFF
vào các vị trí nhớ thừ 0000 đến 07FF.
Chương trình được tiếp tục .
Kỹ thuật thực hiện tự động các việc trên được gọi là kỹ thuật 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. Miền địa chỉ mà chương trình có thể truy cập là
không gian địa chỉ ảo (Virtual Address Space), còn các địa chỉ bộ nhớ thực,
được gọi là không gian địa chỉ vật lý (Physical Address Space).
Nguyễn Trung Đồng – Tel 0983 410 866
Từ thực tế trên, thấy rằng kỹ thuật phân trang khác hẳn với phương thức quản lý bộ nhớ theo phân đoạn (Segmentation) đã trình bày ở chương trước. Lập trình viên luôn luôn quan tâm đến các đoạn trong bộ nhớ (mức lập trình Assembler) nhưng không hề có ý thức về sự tồn tại của bộ nhớ ảo. Lập trình viên thực hiện công việc của mình mà không hề quan tâm dung lượng thực tế của bộ nhớ trong máy tính, mặc dù chúng nhỏ hơn rất nhiều so với không gian nhớ mà CPU có thể quản lý được.
Bộ nhớ ảo đòi hỏi sự tồn tại của bộ nhớ phụ có khả năng lưu được toàn bộ chương trình. Nếu coi bản sao của chương trình trong bộ nhớ phụ là bản gốc, còn các phần của chương trình được tải vào bộ nhớ chính là bản sao, ta dễ dàng nắm bắt được những khái niệm về thực hiện phân trang. Điều quan trọng ở đây là những thay đổi xẩy ra với bản sao phải được cập nhật vào bản gốc.
Không gian bộ nhớ ảo được chia thành các trang có kích thước bằng nhau ( thông thường là trong khoảng 512 bytes đến 4096 bytes (luỹ thừa của 2).Tương tự, không gian địa chỉ vật lý cũng được chia thành các mảnh, mỗi mảnh có kích thước bằng kích thước một trang. Các mảnh của bộ nhớ chính
mà các trang sẽ được chuyển vào gọi là khung trang – page frame. Bộ nhớ
Ví dụ bộ nhớ ảo 64KB được chia thành 16 trang, mỗi trang 4KB và bộ nhớ thực có dung lượng lầ 32KB được chia thành 8 trang như trên hình sau (Hình…….). Ta cần một bảng phân trang – page table gồm 16 từ (word). Như vậy, địa chỉ ảo sẽ được tạo từ 16 bit như sau:
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0 0 1 1 0 0 0 0 0 0 1 0 1 1 0 0
Địa chỉ trang của bộ nhớ ảo Địa chỉ 12 bit cho trang ảo đã chọn
Với các giá trị như trên, ta tính được địa chỉ ô nhớ đó là 02CH của trang 3, tương ứng là ô nhớ có địa chỉ là 302CH. Với lập luận này, ta có bảng phân trang có 3 trường như sau:
Địa chỉ ảo bộ nhớ thực Địa chỉ
0 ÷ 4095 Page 0 4KB 0 ÷ 4095 Page Frame 0
4096 ÷ 8191 Page 1 4096 ÷ 8191 Page Frame 1
8192 ÷ 12287 Page 2 8192 ÷ 12287 Page Frame 2
12288 ÷ 16383 Page 3 12288 ÷ 16383 Page Frame 3
16384 ÷ 20479 Page 4 16384 ÷ 20479 Page Frame 4
20480 ÷ 24575 Page 5 20480 ÷ 24575 Page Frame 5
24576 ÷ 28671 Page 6 24576 ÷ 28671 Page Frame 6
28672 ÷ 32767 Page 7 28672 ÷ 32767 Page Frame 7
32768 ÷ 36863 Page 8
36864 ÷ 40959 Page 9 Không gian địa chỉ vật
lý 32KB được chia thành 8 trang, mỗi trang 4KB
40960 ÷ 45055 Page 10
45056 ÷ 49151 Page 11 Không gian địa chỉ ảo 64KB được chia thành 16 trang, mõi trang là 4KB
49152 ÷ 53247 Page 12 53248 ÷ 57343 Page 13 57344 ÷ 61439 Page 14 61440 ÷ 65355 Page 15
a) Bit cao nhất là “0” hoặc “1” để xác định trang đó có tồn tại trong bộ
nhớ chính hay không,
b) Nội dung của 12 bit tiếp theo là địa chỉ của ô nhớ phụ, c) 3 bit trẻ nhất là số khung trang.
B15 B14 B13 B12 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0
1 0 0 0 0 0 0 1 0 1 1 0 0 1 1 0
Nguyễn Trung Đồng – Tel 0983 410 866
Địa chỉ của bộ nhớ chính sẽ được tạo ra từ địa chỉ ảo như sau:
Giả sử trang ảo nằm trông bộ nhớ chính, trường khung tang 3 bit sẽ chỉ cho ta trang đó nằm ở đâu. Nội dung của 3 bit này sẽ được nạp vào 3 bit cao nhất cuẩ thanh ghi địa chỉ của ô nhớ nằm trong vùng 32KB, 12 bit còn lại sẽ là nội dung 12 bit địa chỉ trong trang ảo, tạo thành một địa chỉ mới gồm 15 bit. Cách tạo ra địa chỉ được mô tả tronh Hình III…
0 0 1 1 0 0 0 0 0 0 1 0 1 1 0 0
Địa chỉ trang của bộ nhớ ảo Địa chỉ 12 bit cho trang ảo đã chọn
1 1 0 0 0 0 0 0 0 1 0 1 1 0 0