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

Một phần của tài liệu Chương III QUẢN lý bộ NHỚ (Trang 45 - 48)

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:

1. Định vị bộ nhớ vật lý để được sử dụng.

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.

Một phần của tài liệu Chương III QUẢN lý bộ NHỚ (Trang 45 - 48)