III.8 Một số vấn đề về quản lý bộ nhớ của Windows

Một phần của tài liệu Chương III Quản lý bộ nhớ (Trang 50 - 62)

III.8.1. Nhiệm vụ quản lý bộ nhớ của Windows 2000

Thành phần quản lý bộ nhớ của Windows 2000 thực hiện hai nhiệm vụ chớnh sau đõy:

• Chuyển đổi, hay ỏnh xạ, khụng gian địa chỉ ảo của một tiến trỡnh vào bộ nhớ vật lý để khi một tiểu trỡnh thực thi trong một ngữ cảnh của tiến trỡnh đú, đọc hay ghi vào khụng gian địa chỉ ảo thỡ địa chỉ vật lý chớnh xỏc sẽ được tham chiếu.

• Phõn trang một vài nội dung bộ nhớ ra đĩa (swap out) khi nú trở nờn vượt quỏ sự đỏp ứng bộ nhớ của hệ thống. Cú nghĩa là, khi việc thực thi cỏc tiểu trỡnh hay mó hệ thống cố gắng sử dụng nhiều bộ nhớ vật lý hơn khả năng hiện thời – và mang nội dụng trở lại vào bộ nhớ vật lý (swap in) khi cần.

Hệ điều hành Windows 2000 Professional và Server hỗ trợ lờn đến 4GB bộ nhớ vật lý, Windows 2000 Advanced Server thỡ hỗ trợ lờn đến 8 GB, và Windows 2000 Datacenter Server thỡ lờn đến 64 GB. Thực tế bộ nhớ lớn nhất cho Windows 2000 Datacenter Server phụ thuộc vào khả năng phần cứng. Bởi vỡ Windows 2000 là một hệ điều hành 32-bit, nờn cỏc tiến trỡnh người sử dụng cú một khụng gian địa chỉ ảo 32-bit, 4GB bộ nhớ phẳng.

Ngoài việc cung cấp sự quản lý bộ nhớ ảo, trỡnh quản lý bộ nhớ cung cấp một tập lừi cỏc dịch vụ mà trong đú cỏc hệ thống con mụi trường Windows 2000 khỏc nhau được xõy dựng. Cỏc dịch vụ này bao gồm cỏc tập tin ỏnh xạ bộ nhớ, bộ nhớ copy-on-write, và hỗ trợ cho cỏc ứng dụng sử dụng cỏc khụng gian địa chỉ lớn, khụng liờn tiếp.

Cũng như tất cả cỏc thành phần của windows 2000 executive, trỡnh quản lý bộ nhớ hỗ trợ sự thực thi đồng thời trờn cỏc hệ thống đa xử lý. Nú cho phộp hai tiểu trỡnh thu được cỏc tài nguyờn theo cỏch mà sau này chỳng khụng làm cho hỏng dữ liệu của mỗi tiến trỡnh khỏc. Để đạt được mục tiờu này, trỡnh quản lý bộ nhớ sử dụng một vài cơ chế đồng bộ nội tại khỏc nhau để điều khiển sự truy xuất vào cỏc

cấu trỳc dữ liệu nội tại của riờng nú.

III.8.2. Cỏc dịch vụ trỡnh quản lý bộ nhớ cung cấp

Trỡnh quản lý bộ nhớ cung cấp một tập cỏc dịch vụ hệ thống để định vị và giải phúng bộ nhớ ảo, chia sẻ bộ nhớ giữa cỏc tiến trỡnh, ỏnh xạ cỏc tập tin vào bộ nhớ, flush cỏc trang ảo vào đĩa, truy lục thụng tin về một vựng cỏc trang ảo, thay đổi sự bảo vệ của cỏc trang ảo, và khoỏ cỏc trang ảo vào bộ nhớ.

Trỡnh quản lý bộ nhớ cũng cung cấp một lượng cỏc dịch vụ, như định vị và bỏ định vị bộ nhớ vật lý và khoỏ cỏc trang trong bộ nhớ vật lý cho cỏc trao đổi truy xuất bộ nhớ trực tiếp (DMA), đến cỏc thành phần chế độ kernel khỏc bờn trong Executive cũng như cỏc device driver. Cỏc hàm này bắt đầu với tiền tố Mm. Ngoài ra, mặc dự khụng hoàn toàn là một phần của trỡnh quản lý bộ nhớ, Executive hỗ trợ cỏc thường trỡnh bắt đầu với Ex mà nú được sử dụng để định vị và bỏ định vị từ cỏc heap hệ thống (vựng phõn trang và khụng phõn trang) cũng như để vận dụng cỏc danh sỏch look-aside.

Sau đõy chỳng ta sẽ xem xột một vài trong nhiều dịch vụ mà trỡnh quản lý bộ nhớ của Windows 2000 cung cấp:

Bảo vệ bộ nhớ

Windows 2000 cung cấp sự quản lý bộ nhớ để khụng một tiến trỡnh người sử dụng nào, cú thể khụng cố ý hay cố ý, làm hỏng khụng gian địa chỉ của cỏc tiến trỡnh khỏc hoặc của chớnh hệ điều hành. Windows 2000 cung cấp sự bảo vệ này theo bốn cỏch chớnh sau đõy:

• Thứ nhất, tất cả cỏc cấu trỳc dữ liệu và cỏc vựng bộ nhớ được sử dụng bởi cỏc thành phần hệ thống kernel-mode chỉ thể được truy xuất trong kernel-mode. Cỏc tiểu trỡnh user-mode khụng thể truy xuất cỏc page này. Nếu cỏc tiểu trỡnh này cố gắng thực hiện sự truy xuất này thỡ phần cứng phỏt sinh một lỗi, và trỡnh quản lý bộ nhớ sẽ gởi thụng bỏo vi phạm truy xuất đến cho tiểu trỡnh.

• Thứ hai, mỗi tiến trỡnh cú một khụng gian địa chỉ riờng, tỏch biệt, được bảo vệ khỏi bị truy xuất bởi bất kỳ tiểu trỡnh nào thuộc một tiến trỡnh khỏc. Chỉ cỏc ngoại lệ là nếu một tiến trỡnh đang chia sẻ cỏc trang với cỏc tiến trỡnh khỏc hay nếu một tiến trỡnh khỏc cú truy xuất đọc hay ghi bộ nhớ ảo vào đối tượng tiến trỡnh và do đú cú thể sử dụng cỏc hàm ReadProcessMemory hay

WriteProcessMemory. Mỗi khi một tiểu trỡnh tham chiếu một địa chỉ, phần cứng bộ nhớ ảo, phối hợp với trỡnh quản lý bộ nhớ, can thiệp và chuyển đổi địa chỉ ảo thành một địa chỉ vật lý. Bằng cỏch điều khiển cỏc địa chỉ ảo được chuyển đổi, Windows 2000 cú thể đảm bảo cỏc tiểu trỡnh đang thực thi trong một tiến trỡnh khụng truy xuất bất hợp lệ một trang thuộc một tiến trỡnh khỏc.

• Thứ ba, ngoài cỏc cung cấp sự bảo vệ mặc nhiờn cho việc chuyển đổi địa chỉ ảo thành đại chỉ vật lý, tất cả cỏc processor được hỗ trợ bởi Windows 2000 cung cấp một số hỡnh thức bảo vệ bộ nhớ được điều khiển bởi phần cứng (như đọc/ghi; chỉ đọc, …); chi tiết chớnh xỏc của sự bảo vệ như vậy thay đổi theo processor. Vớ dụ, cỏc page mó trong khụng gian địa chỉ của một tiến trỡnh được

đỏnh dấu chỉ đọc và do đú được bảo vệ khỏi sự sửa đổi bởi cỏc tiểu trỡnh người sử dụng. Cỏc page mó cho cỏc tiến trỡnh điều khiển thiết bị cũng được đỏnh dấu chỉ đọc như vậy.

• Và cuối cựng, cỏc section object bộ nhớ chia sẻ cú cỏc danh sỏch điều khiển truy xuất Windows 2000 chuẩn, mà nú được kiểm tra khi cỏc tiến trỡnh cố gắng mở chỳng, do đú việc giới hạn truy xuất của bộ nhớ chia sẻ đến cỏc tiến trỡnh này với cỏc quyền thớch hợp. Bảo mật cũng thừa hưởng cỏch hoạt động khi một tiểu trỡnh tạo một section để chứa một tập tin ỏnh xạ. Để tạo một section, tiểu trỡnh phải cú ớt nhất truy xuất đọc đến đối tượng tập tin cơ sở hay thao tỏc sẽ lỗi.

Copy-On-Write

Sự bảo vệ cỏc trang copy-on-write là một sự tối ưu trong việc quản lý bộ nhớ của Windows 2000. Để thấy được ý nghĩa của việc sử dụng cỏc trang copy-on-write chỳng ta hóy xem vớ dụ sau đõy: Cú hai tiến trỡnh đang chia sẻ ba trang (page1, page2, page3), mỗi trang được đỏnh dấu là copy-on-write, nhưng cả hai tiến trỡnh đều khụng sửa đổi bất kỳ dữ liệu nào trờn cỏc trang.

Hỡnh 3.20.a: “Trước” copy-on-write

Nếu một tiểu trỡnh của một trong hai tiến trỡnh này ghi vào một trang, một lỗi quản lý bộ nhớ được phỏt sinh. Trỡnh quản lý bộ nhớ xem việc ghi đú là vào trang copy-on-write, nờn thay vỡ bỏo lỗi như một vi phạm truy xuất, thỡ nú định vị một trang read/write mới trong bộ nhớ vật lý, sau đú sao chộp nội dung của trang ban đầu vào trang mới, cập nhật thụng tin bảng trang tương ứng của tiến trỡnh này để trỏ đến một vị trớ mới, và thao tỏc ghi ở trờn sẽ được hệ thống chuyển hướng để thực hiện ở trang mới này. Lần này, thao tỏc ghi hoàn thành, nhưng như trỡnh bày trong hỡnh sau, trang được sao chộp mới bõy giờ là sở hữa của tiến trỡnh thực hiện ghi và khụng thấy được từ cỏc tiến trỡnh khỏc, vẫn đang chia sẻ trang copy-on- write. Mỗi tiến trỡnh mới ghi vào cựng trang được chia sẻ này cũng sẽ nhận bản sao riờng của nú.

Hỡnh 3.20.b: ”Sau” copy-on-write

Một ứng dụng của copy-on-write là để cài đặt điểm ngắt hỗ trợ trong cỏc trỡnh gỡ rối. Vớ dụ, mặc định, cỏc trang mó bắt đầu chỉ thực thi. Tuy nhiờn, nếu một lập trỡnh viờn thiết đặt một điểm ngắt trong khi gỡ rối một chương trỡnh, thỡ trỡnh gỡ rối phải thờm một chỉ thi điểm ngắt vào mó. Nú thực hiện điều đú bằng cỏch đầu tiờn thay đổi sự bảo vệ trang thành PAGE_EXECUTE_READWRITE và sau đú thay đổi luồng chỉ thị. Bởi vỡ trang mó là một phần của một mapped section, nờn trỡnh quản lý bộ nhớ tạo một bảo sao riờng cho tiến trỡnh với tập điểm ngắt, trong khi cỏc tiến trỡnh khỏc tiếp tục sử dụng trang mó chưa sửa đổi.

Hệ thống con POSIX lợi dụng copy-on-write để cài đặt chức năng fork (phõn nhỏnh). Điển hỡnh, khi một ứng dụng UNIX gọi một hàm fork để tạo một tiến trỡnh khỏc, điều đầu tiờn mà tiến trỡnh mới thực hiện là gọi hàm exec để khởi tạo lại khụng gian địa chỉ với một ứng dụng cú thể thực thi. Thay vỡ sao chộp toàn bộ khụng gian địa chỉ trờn fork, tiến trỡnh mới chia sẻ cỏc trang trong tiến trỡnh cha bằng cỏch đỏnh dấu chỳng là copy-on-write. Nếu một tiến trỡnh con ghi lờn dữ liệu, một bản sao riờng tiến trỡnh được thực hiện. Nếu khụng, hai tiến trỡnh tiếp tục chia sẻ và khụng cú việc sao chộp nào được thực hiện. Một cỏch hay một cỏch khỏc, trỡnh quản lý bộ nhớ chỉ sao chộp cỏc trang tiến trỡnh cố gắng ghi thay vỡ sao chộp toàn bộ khụng gian địa chỉ.

AWE: Address Windowing

Extension

Mặc dự hệ điều hành Windows 2000 cú thể hỗ trợ trờn 64 GB bộ nhớ vật lý, nhưng mỗi tiến trỡnh người sử dụng 32-bit chỉ cú một khụng gian địa chỉ ảo 2 GB hoặc 3 GB. Để cho phộp một tiến trỡnh 32-bit định vị và truy xuất nhiều bộ nhớ vật lý hơn, cú thể được thể hiện trong khụng gian địa chỉ bị giới hạn của nú, Windows 2000 cung cấp một tập cỏc hàm được gọi là Address Windowig Extensions (AWE). Vớ dụ, trờn hệ thống Windows 2000 Advanced Server với 8 GB bộ nhớ vật lý, một ứng dụng cơ sở dữ liệu server cú thể sử dụng AWE để định vị và sử dụng gần 8 GB bộ nhớ như một cache cơ sở dữ liệu.

Việc định vị và sử dụng bộ nhớ thụng qua cỏc hàm AWE được thực hiện qua ba bước: (adsbygoogle = window.adsbygoogle || []).push({});

2. Tạo một vựng khụng gian địa chỉ ảo để hoạt động như một cửa sổ để ỏnh xạ cỏc khung nhỡn của bộ nhớ vật lý.

3. Ánh xạ cỏc khung nhỡn của bộ nhớ vật lý vào cửa sổ.

Hỡnh 3.21: Sử dụng AWE để ỏnh xạ bộ nhớ vật lý

Để định vị bộ nhớ vật lý, một ứng dụng gọi hàm Win32

AllocateUserPhysicalPages. Ứng dụng sau đú sử dụng hàm Win32 VirtualAlloc với cờ MEM_PHYSICAL để tạo một cửa sổ trong phần riờng của khụng gian địa chỉ của tiến trỡnh mà nú được ỏnh xạ đến một số hoặc tất cả bộ nhớ vật lý được định vị trước đõy. Bộ nhớ được AWE định vị cú thể sau đú với gần tất cả cỏc hàm Win32 API.

Nếu một ứng dụng tạo một cửa sổ 256Mb trong khụng gian địa chỉ của nú và định vị 4Gb bộ nhớ vật lý (trờn một hệ thống với hơn 4 GB bộ nhớ vật lý), ứng dụng cú thể sử dụng cỏc hàm Win32 MapUserPhysicalPages hay MapUserPhysicalPagesScatter để truy xuất bất kỳ phần nào của cửa sổ khụng gian địa chỉ ảo xỏc định lượng bộ nhớ vật lý mà ứng dụng cú thể truy xuất với một ỏnh xạ nhất định. Hỡnh 3.21 trờn đõy trỡnh bày một cửa sổ AWE trong một khụng gian địa chỉ ứng dụng phục vụ được ỏnh xạ đến một vựng bộ nhớ vật lý được định vị trước đú bằng AllocateUserPhysicalPages.

Cỏc hàm AWE tồn tại trờn tất cả cỏc ấn bản của Windows 2000 và cú thể được sử dụng bất chấp hệ thống cú bao nhiờu bộ nhớ vật lý. Tuy nhiờn, AWE hữu ớch nhất trờn cỏc hệ thống với nhiều hơn 2 GB bộ nhớ vật lý, bởi vỡ nú chỉ là cỏch cho tiến trỡnh 32-bit trực tiếp sử dụng nhiều hơn 2 GB bộ nhớ.

Cuối cựng, cú một số hạn chế trong việc định vị bộ nhớ và định xạ bằng cỏc hàm AWE:

• Cỏc trang khụng thể chia sẻ giữa cỏc tiến trỡnh.

• Cựng một trang vật lý khụng thể được ỏnh xạ nhiều hơn một địa chỉ ảo trong cựng tiến trỡnh.

• Sự bảo vệ trang chỉ giới hạn đến read/write. III.8.3. Address Space Layout

Theo mặc định, mỗi tiến trỡnh người sử dụng trờn phiờn bản 32-bit của Windows 2000 cú thể cú trờn 2Gb khụng gian địa chỉ riờng; hệ điều hành giữ 2Gb. Windows 2000 Advanced Server và Windows 2000 Datacenter Server hỗ trợ một tuỳ chọn tại thời điểm khởi động nú cho phộp khụng gian địa chỉ tiến trỡnh/chương trỡnh người sử dụng lờn đến 3Gb.

Tựy chọn khụng gian địa chỉ 3Gb mang lại cho cỏc tiến trỡnh một khụng gian địa chỉ 3Gb (dành 1Gb cho khụng gian hệ thống). Đặc tớnh này được thờm vào như một giải phỏp tỡnh thế để đỏp ứng sự cần thiết cho cỏc ứng dụng server cơ sở dữ liệu để giữ nhiều dữ liệu hơn trong bộ nhớ so với khi thực hiện với khụng gian địa chỉ 2Gb.

Khụng gian địa ảo của cỏc hệ điều hành windows trước được tổ chức khỏc hơn so với Windows 2000. Nú cũng cung cấp một khụng gian địa chỉ ảo 32 bớt 4Gb và cấp phỏt khụng gian địa chỉ 2Gb riờng cho mỗi tiến trỡnh người sử dụng, nhưng nú chia 2Gb cũn lại thành 2 phần, 1Gb cho khụng gian hệ thống, 1Gb dựng làm khụng gian chia sẻ cho tất cả cỏc tiến trỡnh người sử dụng.

Khụng gian địa chỉ hệ thống: Trong

cỏc kiến trỳc Intel x86, khụng gian địa chỉ 2Gb của hệ thống được phõn thành cỏc vựng khỏc nhau, được mụ tả ở hỡnh 3.22 sau:

Trong đú:

System code: Chứa chớnh hệ

điều hành, HAL và cỏc điều khiển thiết bị được sử dụng để boot hệ thống.

System mapped views: Sử

dụng để ỏnh xạ Win32k.Sys, cú thể nạp một phần của hệ thống con Win32 trong chế đọ kernel mode và cỏc điều khiển đồ hoạ.

Session space: Được sử dụng

để ỏnh xạ thụng tin đến một session người sử dụng cụ thể.

Process page tables and page

directory: Được dựng để chứa cỏc bảng trang tiến trỡnh và cỏc danh mục bảng trang.

Hyperspace: Đõy là một vựng

đặc biệt, được sử dụng để ỏnh xạ danh sỏch working set của tiến trỡnh và để ỏnh xạ tạm cỏc trang vật lý khỏc.

System working set list: Chứa

cỏc trỳc dữ liệu danh sỏch working set mà nú mụ tả working set của hệ thống.

System cache: Khụng gian địa chỉ ảo được sử dụng để ỏnh xạ cỏc file mở trong hệ thống cache. (adsbygoogle = window.adsbygoogle || []).push({});

Paged pool: Chứa cỏc pool

được phõn trang.

System page table entries

(PTEs): Pool của cỏc PTEs hệ thống được sử dụng để ỏnh xạ cỏc trang hệ thống như: khụng gian I/O, cỏc stack kernel và cỏc danh sỏch mụ tả bộ nhớ.

Nonpaged pool: Chứa cỏc pool

khụng được phõn trang.

Crash dump information:

Được dự trữ để ghi thụng tin về trạng thỏi của một hệ thống Crash.

HAL usage: Hệ thống bộ nhớ

dự trữ cho kiến trỳc HAL đặc biệt.

Hỡnh 3.22: Phõn lớp khụng gian địa chỉ trong x86

Chỳ ý: Khi khởi tạo hệ thống, trỡnh quản lý bộ nhớ tạo hai kiểu vựng nhớ pool định kớch thước tự động mà cỏc thành phần chế độ kernel sử dụng để định vị bộ nhớ hệ thống:

Vựng Pool khụng phõn trang:

lý tại tất cả cỏc thời điểm và do đú cú thể được truy xuất bất cứ khi nào mà khụng mắc phải một lỗi trang.

Vựng pool phõn trang: một

vựng bộ nhớ ảo trong khụng gian hệ thống cú thể được phõn trang trong và ngoài hệ thống. Cỏc trỡnh điều khiển thiết bị cú thể sử dụng vựng phõn trang này.

Cả hai vựng bộ nhớ đều được định vị trong phần hệ thống của khụng gian địa chỉ và được ỏnh xạ vào khụng gian địa chỉ ảo của mỗi tiến trỡnh. Trỡnh Excutive

cung cấp cỏc thường trỡnh để định vị và giải phúng từ cỏc vựng này. III.8.4. Chuyển đổi địa chỉ

Một phần của tài liệu Chương III Quản lý bộ nhớ (Trang 50 - 62)