địa chỉ ảo thành địa chỉ vật lý
Theo mặc định hệ điều hành Windows 2000 chạy trờn hệ thống x86 sử dụng cấu trỳc bảng trang 2 cấp (two-level) để chuyển đổi địa chỉ ảo thành địa chỉ vật lý. 32 bớt khụng gian địa chỉ ảo được chia thành 3 thành phần: 10 bớt cao nhất là Page Directory Index, 10 bớt tiếp theo là Page Table Index, 12 bớt thấp nhất là Byte Index ( Byte Index rộng 12 bớt vỡ trong x86 kớch thước 1 page là 4096 byte (212 = 4096)).
Hỡnh vẽ 3.23 sau đõy cho thấy ý nghĩa sử dụng của ba thành phần trờn và cỏch chuyển đổi từ địa chỉ ảo 32 bớt thành địa chỉ vật lý trờn hệ thống x86_Windows 2000 cú thể xem lại ở mục III.2.3.c ở trờn).
Hỡnh 3.23: Sơ đồ chuyển địa chỉ ảo thành vật lý trờn hệ thống x86 Sau đõy là là cỏc bước thực hiện việc chuyển đổi địa chỉ ảo theo sơ đồ ở trờn:
1. Bộ phận phần cứng quản lý bộ nhớ tỡm đến danh mục bảng trang (page directory) của tiến trỡnh hiện tại.
2. Thành phần Page Directory Index được sử dụng để chỉ mục vào page directory để tỡm một mục vào danh mục bảng trang (PDE: page directory entry), mà nú mụ tả vị trớ của bảng trang (page table) cần để ỏnh xạ địa chỉ ảo. PDE chứa số hiệu khung trang (PFN: page frame number) của bảng trang (nếu nú đang thường trỳ trong bộ nhớ. Vỡ cỏc bảng trang cú thể được phõn trang ra ngoài).
3. Thành phần Page Table Index được sử dụng để chỉ mục vào page table để tỡm một mục vào bảng trang (PTE: page table entry), mà nú mụ tả vị trớ vật lý của trang ảo trong địa chỉ ảo.
4. PTE được sử dụng để định vị trang. Nếu là trang hợp lệ, nú chứa PFN của trang trong bộ nhớ vật lý chứa trang ảo. Nếu PTE chỉ bỏo rằng trang là khụng hợp lệ, trỡnh quản lý bộ nhớ sẽ điều khiển lỗi trang và cố gắng làm cho nú trở thành hợp lệ.
5. Khi PTE trỏ đến một trang hợp lệ, Byte Index được sử dụng để tỡm đến địa chỉ chớnh xỏc của ụ nhớ trong phạm vị trang vật lý tương ứng với địa chỉ ảo 32 bớt ban đầu mà tiến trỡnh phỏt ra.
Sau đõy chỳng ta sẽ xem xột một cỏch chi tiết hơn về cấu trỳc của page directory, page table và page table entry để thấy được đặc thự của nú trong Windows 2000 so với những gỡ mà ta đó khảo sỏt một cỏch tổng quỏt về nú ở cỏc mục trước:
Danh mục bảng trang
(page directory)
Mỗi tiến trỡnh cú một cú một page directory đơn, trỡnh quản lý bộ nhớ dựng một trang để tạo bản đồ định vị của tất cả cỏc bảng trang của tiến trỡnh đú. Địa chỉ vật lý của page directory của tiến trỡnh được lưu trữ trong block KPROCESS.
Địa chỉ vật lý (cơ sở) của page directory được chỉ ra ở thanh ghi điều khiển CR3 trờn cỏc hệ thống x86. Mỗi khi cú một sự chuyển đổi ngữ cảnh xuất hiện với một tiểu trỡnh mằm trong tiến trỡnh khỏc tiến trỡnh hiện tại thỡ giỏ trị của thanh ghi CR3 này sẽ được nạp vào block KPROCESS của tiến trỡnh khỏc đú.Việc chuyển đổi ngữ cảnh giữa cỏc tiểu trỡnh trong cựng một tiến trỡnh sẽ khụng được nạp lại địa chỉ vật lý của page directory bởi vỡ tất cả cỏc tiểu trỡnh trong cựng một tiến trỡnh chia sẻ cựng một khụng gian địa chỉ tiến trỡnh.
Page directory bao gồm cỏc cỏc mục vào danh mục bảng trang (PDE: page Directory Entry). Mỗi entry dài 4 byte (8 byte trờn cỏc hệ thống chạy ở chế độ PAE), để mụ tả trạng thỏi và vị trớ của tất cả cỏc bảng trang của tiến trỡnh. Cỏc bớt trong PDE tương tự như cỏc bớt của PTE.
Trờn cỏc hệ thống x86, 1024 (2048 trờn hệ thống PAE) được yờu cầu để mụ tả đầy đủ 4Gb khụng gian địa chỉ ảo. Page directory tiến trỡnh ỏnh xạ đến cỏc bảng trang chứa 1024 PDE. Do đú, page directory index cần phải rộng 10 bớt (210 = 1024).
Bảng trang tiến trỡnh và
bảng trang hệ thống
Trước khi tham chiếu đến byte trong phạm vi trang bằng byte offset, đầu tiờn CPU cần phải tỡm đến trang mà nú chứa byte yờu cầu của dữ liệu. Để tỡm đến trang này, hệ điều hành xõy dựng một trang khỏc của bộ nhớ, trang này chứa cỏc thụng tin ỏnh xạ cần thiết để tỡm đến trang mong muốn chứa dữ liệu. Trang thụng tin ỏnh xạ này được gọi là page table. Vỡ Windows 2000 cung cấp một khụng gian địa chỉ riờng cho mỗi tiến trỡnh nờn mỗi tiến trỡnh sở hữu một tập cỏc bảng trang tiến trỡnh để ỏnh xạ đến khụng gian địa chỉ riờng đú, sự ỏnh xạ sẽ khỏc nhau ở mỗi tiến trỡnh.
Cỏc bảng trang mụ tả khụng gian hệ thống được chia sẻ cho tất cả cỏc tiến trỡnh. Khi một tiến trỡnh được tạo, cỏc PDE khụng gian hệ thống được khởi tạo để chỉ đến cỏc bảng trang hệ thống đang tồn tại. Nhưng khụng phải tất cả cỏc tiến trỡnh đều cú cựng điểm nhỡn của khụng gian hệ thống. Khi bảng trang hệ thống thay đổi đến vị trớ cấp phỏt mới thỡ bộ phận quản lý bộ nhớ khụng cập nhật tất cả cỏc page directory tiến trỡnh, trỡnh quản lý bộ nhớ chỉ cập nhật cỏc page directory tiến trỡnh khi cỏc tiến trỡnh tham chiếu đến địa chỉ ảo mới.
Hỡnh 3.26: Bảng trang hệ thống và bảng trang riờng của tiến trỡnh
Số lượng PTE được Windows 2000 tớnh toỏn dựa vào kớch thước của bộ nhớ. Ta cũng cú thể quy định số lượng này bằng cỏch thay đổi trong Registry, nhưng giỏ trị lớn nhất mà hệ thống x86 chấp nhận là 128.000 PTE.
Cỏc mục vào bảng
trang (PTE)
Một PTE dài 32 bớt, gồm 13 trường được mụ tả ở hỡnh dưới đõy:
Sau đõy chỳng ta sẽ mụ tả về cỏc bớt trạng thỏi và cỏc bớt bảo vệ trong PTE:
• Accesed: Trang đó được đọc.
• Cache disabled: Cấm cache trang này • Dirty: Trang đó được ghi đến
• Global: Sự chuyển đổi ỏp dụng đến tất cả cỏc tiến trỡnh.
• Large page: Chỉ bỏo rằng PDE ỏnh xạ đến trang 4Mb trờn hệ thống với 128Mb (hoặc hơn) bộ nhớ.
• Owner: Chỉ bỏo rằng cú hay khụng code user-mode cỏc thể truy cập trang hoặc cú hay khụng trang là được giới hạn chỉ truy cập ở kernel-mode.
• Valid: Chỉ bỏo cú hay khụng sự chuyển đổi ỏnh xạ đến trang trong bộ nhớ vật lý.
• Write through: Cấm cache cho việc ghi đến trang với mục địch sự thay đổi ngay lập tức được ghi đến đĩa.
• Write: Trờn cỏc hệ thống uniprocessor, đõy là chỉ bỏo cú hay khụng trang là read/write hoặc read-only. Trờn cỏc hệ thống multiprocessor, đõy là chỉ bỏo cú hay khụng trang là cú thể write. (bit Write được lưu trữ trong bit dự trữ trong PTE).
Trờn cỏc hệ thống x86, phần cứng PTE chứa một bớt Dirty và một bớt Accesed. Bớt Accessed bị xoỏ (= 0) nếu trang vật lý được trỡnh bày bởi một PTE khụng thể đọc hoặc ghi, Processor thiết lập bớt (= 1) này khi trang được đọc hoặc ghi lần đầu tiờn. Processor thiết lập bớt Dirty chỉ khi trang lần đầu tiờn được ghi. Kiến trỳc x86 cũng thờm vào bớt Write để cung cấp sự bảo vệ trang, khi bớt này bị xoỏ thỡ trang trở thành read-only, khi bớt này được thiết lập thỡ trang cú thể là write/read. Nếu một tiểu trỡnh cố gắng ghi đến một trang mà bớt Write = 0 thỡ trỡnh quản lý bộ nhớ sẽ phỏt sinh một ngoại lệ truy cập, và bộ phận điều khiển lỗi truy cập phải xỏc định cú hay khụng một tiểu trỡnh cú thể ghi đến trang (trong trường hợp copy-on-write) hoặc cú hay khụng một sự vi phạm truy cập phải được sinh ra.
Trờn nền phần cứng x86, cỏc PTE luụn luụn rộng 4 byte (32 bớt), 8 byte trờn cỏc hệ thống cho phộp chế độ PAE, vỡ thế mỗi bảng trang chứa 1024 PTE , 512 trờn cỏc hệ thống PAE (4096 byte trờn một page, 4 byte trờn một PTE) và vỡ thế cú thể ỏnh xạ 1024 trang (512 page PAE) cho tổng số 4Mb (2 Mb trờn PAE) của cỏc trang dữ liệu.
Trường page table index của địa chỉ ảo chỉ đến một PTE trong page table, để từ đú ỏnh xạ đến trang dữ liệu mà tiến trỡnh yờu cầu. Trờn cỏc hệ thống x86, page table index
rộng 10 bớt (9 bớt trờn PAE), cho phộp tham chiếu đến 1024 PTE (512 trờn PAE). Tuy nhiờn, vỡ windows 2000 cung cấp 4Gb khụng gian địa chỉ ảo riờng, nờn cần nhiều hơn một page table để ỏnh xạ toàn bộ khụng gian địa chỉ. Ta cú thể tớnh được số lượng page table được yờu cầu để ỏnh xạ toàn bộ khụng gian địa chỉ 4Gb của tiến trỡnh như sau: 4Gb/4Mb = 1024 page table, hoặc 2048 page table 4Gb/2Mb =1028 page table trờn PAE (mỗi bảng trang trờn hệ thống x86 ỏnh xạ 4Mb (2 Mb trờn PAE) của cỏc trang dữ liệu).
Byte trong phạm vi
trang (byte within page)
Mỗi khi trỡnh quản lý bộ nhớ tỡm thấy trang vật lý tương ứng với địa chỉ ảo mà tiến trỡnh đưa ra để truy xuất dữ liệu trờn bộ nhớ, nú phải tỡm đến đỳng dữ liệu được yờu cầu trong phạm vi trang này. Đõy là nơi thành phần Byte Index chỉ vào. Byte Index chỉ cho CPU biết byte dữ liệu trong trang mà tiến trỡnh muốn tham chiếu đến. Trờn hệ thống x86, byte index rộng 12 bớt, cho phộp tiến trỡnh tham chiếu đến 4096 byte dữ liệu (đõy cũng chớnh là kớch thước trang).
Mở rộng địa chỉ vật lý
Tất cả cỏc processor thuộc họ Intel x86 đều bao gồm một chế độ ỏnh xạ bộ nhớ được gọi là PAE (Physical Address Extension). Với một chipset thớch hợp chế độ PAE
cho phộp truy cập đến 64GB bộ nhớ vật lý. Khi thực thi x86 trong chế độ PAE, thành phần quản lý bộ nhớ (MMU) của processor chia địa chỉ ảo thành 4 thành phần. Trong trường hợp này hệ thống sử dụng bảng trang ba cấp (three-level) để thực hiện việc chuyển đổi địa chỉ.
Hỡnh 3.24: Ánh xạ trang với PAE
MMU vẫn cài đặt page directory và page table nhưng cấp thứ 3 là page directory pointer table. PAE cú thể đỏnh địa chỉ bộ nhớ nhiều hơn chế độ chuẩn khụng những là do mở rộng cấp bảng trang mà cũn do cỏc PDE và PTE rộng 64 bớt chứ khụng phải 32 bớt. Với địa chỉ vật lý bờn trong là 24 bớt, nờn x86 cú khả năng quản lý được 64Gb (224+12
byte) bộ nhớ.
Để chọn Windows 2000 hoạt đọng trong chế độ PAE ta phải chọn boot với tham số khoỏ chuyển /PAE trong Boot.ini. Chế độ này được hỗ trợ trong tập tin Ntkrpamp.exe.