Thứ Bảy, 1 tháng 6, 2013

Quản lý bộ nhớ x86

x86 processors quản lý bộ nhớ dựa theo các chế độ cơ bản của hoạt động.  Protected mode là mạnh mẽ và hiệu quả nhất, nhưng nó giới hạn các chương trình ứng dụng truy cập trực tiếp phần cứng hệ thống.

Trong chế độ địa chỉ thực (real address) , chỉ 1 MByte của bộ nhớ có thể được đánh địa chỉ, từ hexadecimal 00000 đến FFFFF. Processor chỉ có thể run một chương trình tại một thời điểm nhưng có thể ngắt trong chốc lát chương trình để xử lý các yêu cầu (được gọi là interrupts) từ các thiết bị ngoại vi. Các chương trình ứng dụng được phép truy nhập đến bất cứ vị trí bộ nhớ nào, bao gồm cả các địa chỉ được liên kết trực tiếp với phần cứng hệ thống. MS-DOS OS run trong real-address mode, và Windows 95 và 98 có thể được boot trong mode này.

Trong chế độ được bảo vệ (protected) , processor có thể run nhiều chương trình tại cùng một thời điểm. Nó phân cho mỗi process (chương trình đang chạy) tổng cộng 4GByte của bộ nhớ. Mỗi chương trình có thể được phân cho các vùng nhớ đã được dành riêng cho chúng và chương trình bị ngăn cấm đến code và data của các chương trình khác. MS-Windows và Linux run trong protected mode.

Trong chế độ virtual-8086 , máy tính run trong protected mode và tạo một máy ảo 8086 với chỉ 1-MByte không gian địa chỉ nó sở hữu để mô phỏng một máy tính 80x86 run trong real-address mode. Ví dụ, Windows NT và 2000, tạo một máy ảo 8086 khi bạn mở cửa sổ Command . Bạn có thể run nhiều cửa sổ như vậy tại cùng một thời điểm, mỗi cửa sổ được bảo vệ khỏi các hành động của các cửa sổ khác. Một vài chương trình MS-DOS tạo ra các tham chiếu trực tiếp đến phần cứng máy tính sẽ không run trong mode này dưới Windows NT, 2000 và XP.

Trong khuân khổ bài viết tôi xin trình bày chi tiết về Protected mode

Protected mode là một chế độ processor "bản địa" mạnh mẽ. Khi running trong protected mode, không gian địa chỉ tuyến tính của chương trình là 4GBytes, sử dụng số hexa đi từ 0 đến FFFFFFFF. Trong ngữ cảnh của Microsoft Assembler, mô hình phân chia phẳng (flat segmentation model ) là thích hợp cho lập trình protected mode. Mô hình phẳng là dễ sử dụng bởi vì nó yêu cầu chỉ một số nguyên 32-bit duy nhất để dữ địa chỉ của một lệnh hoặc biến. CPU thực hiện việc tính toán và dịch chuyển địa chỉ ở chế độ nền, tất cả chúng là trong suốt đối với người lập trình ứng dụng. Các thanh ghi phân đoạn (CS, DS, SS, ES, FS, GS) trỏ đến các bảng mô tả phân đoạn (segment descriptor tables), những bảng mà hệ điều hành sử dụng để theo dõi các vị trí của các phân đoạn riêng lẻ của chương trình. Một chương trình theo kiểu protected mode thường có 3 phân đoạn: code, data và stack, sử dụng các thanh ghi phân đoạn CS, DS SS:

  • CS tham chiếu bảng mô tả cho phân đoạn code
  • DS tham chiếu bảng mô tả cho phân đoạn dữ liệu
  • SS tham chiếu bảng mô tả cho phân đoạn stack
Mô hình phân đoạn phẳng

Trong mô hình phân đoạn phẳng, tất cả các phân đoạn được ánh xạ đến không gian địa chỉ vật lý 32-bit của máy tính. Có ít nhất hai phân đoạn được yêu cầu, một cho code và một cho data. Mỗi phân đoạn được định nghĩa bởi một mô tả phân đoạn (segment descriptor), một số nguyên 64-bit được lưu trong một bảng được biết đến như bảng mô tả toàn cục (global descriptor table (GDT)). Hình 1 hiển thị một mô tả phân đoạn có trường địa chỉ cơ sở (base address) trỏ đến vị trí biến đầu tiên trong bộ nhớ (00000000). Cũng trong hình này, giới hạn phân đoạn (segment limit) là 0040. Trường truy nhập (access) chứa các bits nhằm xác định cách segment được sử dụng. Tất cả các hệ điều hành hiện đại dựa trên kiến trúc x86 sử dụng mô hình phân đoạn phằng.


Không có nhận xét nào:

Đăng nhận xét