18/09/2018, 13:47

Không gian địa chỉ ảo trong lập trình hệ thống

Trong bài trước tôi đã giới thiệu với các bạn những kiến thức cơ bản về các hai chế độ User Mode và Kernel Mode của Windows OS. Bạn có thể tham khảo trước tại đây. Trong bài này, tôi xin trình bày về một khái niệm được nhắc tới nhiều ở bài trước là không gian địa chỉ ảo (Virtual Address Space). ...

Trong bài trước tôi đã giới thiệu với các bạn những kiến thức cơ bản về các hai chế độ User Mode và Kernel Mode của Windows OS. Bạn có thể tham khảo trước tại đây. Trong bài này, tôi xin trình bày về một khái niệm được nhắc tới nhiều ở bài trước là không gian địa chỉ ảo (Virtual Address Space).

Virtual Address Space 

Không gian địa chỉ ảo ứng với một chương trình là một miền không gian bộ nhớ ảo được đánh địa chỉ mà tiến trình đó có thể sử dụng. Không gian địa chỉ này cho mỗi process là riêng biệt và không thể được sử dụng bởi một chương trình khác trừ khi nó được chia sẻ.

Một địa chỉ ảo không diễn tả một địa chỉ vật lý thật của đối tượng ở trên vùng nhớ. Thay vào đó, hệ thống sẽ duy trì một bảng được gọi là page table cho mỗi chương trình. Bảng này cho phép ta chuyển địa chỉ ảo sang một địa chỉ vật lý thật. Mỗi khi một tiến trình con của một chương trình tham chiếu tới một địa chỉ, thì hệ thống sẽ tự động chuyển từ địa chỉ ảo sang địa chỉ thật để xử lý.

Không gian địa chỉ ảo trong lập trình hệ thống

Hình trên mô tả quá trình truyền địa chỉ ảo của một chương trình khi được tham chiếu tới sang địa chỉ vật lý thật, quá trình này được thực hiện tự động bởi hệ điều hành.

Chế độ không gian địa chỉ ảo trong Windows OS – 32 bit.

Không gian địa chỉ ảo trong lập trình hệ thống

Đối với một chương trình chạy trên Windows OS – 32 bit, không gian địa chỉ ảo thường là 2GB trong khoảng từ địa chỉ 0x00000000 tới 0x7FFFFFFF. Trong vùng nhớ này được chia thành nhiều page, mỗi page có độ lớn thường là 1000H bytes tương ứng với 4 kilobytes về kích thước vùng nhớ. Trong Windows OS 32 bit, tổng không gian địa chỉ ảo là 4 gigabytes. Thông thường thì 2 gigabytes địa chỉ thấp được sử dụng cho chương trình, còn lại 2 gigabytes địa chỉ cao được sử dụng cho hệ thống.

Ngoài ra, trong Windows OS 32 bit có một tùy chọn ( option ) cho phép tăng kích thước không gian địa chỉ lên cho chương trình sử dụng đó là increaseuserva – boot entry option. Chế độ này được gọi là chế độ 4GT-( 4-gigabyte Tuning ) của hệ điều hành. Khi đó, không gian địa chỉ ảo dành cho chương trình sẽ được tăng lên tối đa là 3 gigabytes.

Chế độ không gian địa chỉ ảo trong Windows OS – 64 bit

Trong Windows OS 64 bit, về lý thuyết chúng ta sẽ có một trong gian địa chỉ ảo là 2^64 bytes tương ứng với 16 exabytes, nhưng thực chất chỉ có một lượng nhỏ địa chỉ trong số 16 exabytes này được sử dụng.

Không gian địa chỉ ảo trong lập trình hệ thống

Ngoài ra chúng ta cần chú ý tới một điều là những đoạn mã được viết ở User Mode chỉ có thể xử lý địa chỉ trong không gian của User Mode mà không được quyền xử lý tới những địa chỉ ở Kernel Mode. Hạn chế này nhằm bảo vệ user-mode code xử lý đọc hoặc ghi nhầm vào những cấu trúc dữ liệu của hệ thống. Trong khi đó, kernel-mode code có thể xử lý được những địa chỉ trong User Mode lẫn trong Kernel Mode.

Ở phần này, tôi xin phép được nói về khái niêm cơ bản về không gian địa chỉ ảo ( Virtual Address Space ) ở cả hai chế độ User Mode và Kernel Mode trong Windows OS 32 bit và 64 bit. Trong bài sau, tôi sẽ đi vào trình bày chi tiết một số khái niệm liên quan đến lập trình Windows Driver.

Anh Le
Anh Le
http://securitydaily.net/author/anhle
Thạc sỹ chuyên ngành Kỹ thuật Máy tính, ĐHBK HN. Lĩnh vực nghiên cứu chính: Fuzzing, Security Analytics và Big Data. Chuyên gia bảo mật đầu tiên của Việt Nam phát hiện lỗ hổng trong Google Chrome
0