2013-09-21 35 views
7

Tôi đang làm việc trên một hạt nhân x86 nhỏ. Tôi đang truy cập và cố đọc bản đồ bộ nhớ mà GRUB cung cấp trong tiêu đề multiboot. Tôi có một CPU Intel i3 và 4 GiB RAM. Trong khi chạy trên máy tính này, tôi đang đọc bản đồ sau bộ nhớ:Bản đồ bộ nhớ hiển thị nhiều RAM hơn so với vật lý có sẵn

--Base Address--   --Length--  --Type-- 

0x0000000000000000  0x000000000009d000  0x1 
0x000000000009d000  0x0000000000003000  0x2 
0x00000000000e0000  0x0000000000020000  0x2 
0x0000000000100000  0x00000000bb53f000  0x1 
0x00000000bb63f000  0x0000000000080000  0x2 
0x00000000bb6bf000  0x0000000000100000  0x4 
0x00000000bb7bf000  0x0000000000040000  0x3 
0x00000000bb7ff000  0x0000000000001000  0x1 
0x00000000bb800000  0x0000000004800000  0x2 
0x00000000e0000000  0x0000000010000000  0x2 
0x00000000feb00000  0x0000000000004000  0x2 
0x00000000fec00000  0x0000000000001000  0x2 
0x00000000fed10000  0x0000000000004000  0x2 
0x00000000fed18000  0x0000000000002000  0x2 
0x00000000fed1b000  0x0000000000005000  0x2 
0x00000000fee00000  0x0000000000001000  0x2 
0x00000000ffe80000  0x0000000000180000  0x2 
0x0000000100000000  0x0000000038000000  0x1 

Khi tôi tổng lên các vùng bộ nhớ có sẵn, tôi nhận được ...

0x1 (Có)-3.893,8 MiB

Điều này có vẻ đúng, để lại MiB 200 năm trước dành riêng cho các thiết bị khác. Vấn đề duy nhất là tổng của các loại bộ nhớ khác:

0x2, 0x3, 0x4-331,5 MiB

Đưa tổng số tiền của tôi RAM tại 4225,3 MiB hoặc một ít hơn 4.1 GiB, mà dẫn tôi đến các câu hỏi của tôi:

  1. Tại sao tôi tổng cộng hơn 4GiB RAM khi tôi chỉ cài đặt 4GiB?

  2. Tại sao địa chỉ cơ sở cuối cùng trong bản đồ bộ nhớ 0x0000000100000000? Chỉ với 4GiB RAM, 32 bit phải là kích thước địa chỉ tối đa cần thiết để giải quyết tất cả. Tôi có hiểu nhầm điều gì đó ở đây không?

+0

Nhiều dãy địa chỉ không nhất thiết phải nhớ thực sự, họ có thể lập bản đồ để DMA/hiển thị/etc. –

+0

Đúng, nhưng điều đó có tạo ra nhu cầu .875 GB ở bên ngoài phạm vi 32 bit không? – Joel

Trả lời

2

Vài suy nghĩ:

  • Địa chỉ không gian = vật lý kích thước bộ nhớ.
  • Một i3 hỗ trợ không gian địa chỉ ảo ở chế độ 64 bit hoặc 32 bit với 36 bit PAE (tùy chọn, với hỗ trợ hạt nhân). Nếu bạn thực sự có 4GiB RAM có sẵn trong hệ thống 32 bit được khởi động, phải bật PAE. Cách kiểm tra: https://serverfault.com/q/247080
  • AFAIR, các phạm vi đó có thể trùng lặp và xuất hiện theo bất kỳ thứ tự nào, do đó việc đặt hàng và nhập lại vào loại chia tách hoặc dải ô bị hạn chế nhất là bắt buộc.
  • Địa chỉ cơ sở cuối cùng 0x0000000100000000 là> = 2^32. Điều này thường được thực hiện, bởi vì phần cứng, hình ảnh ROM và các phạm vi đặc biệt khác được phân bổ dưới 2^32 trong (tất cả?) PC. Do đó, PAE hoặc chế độ dài được yêu cầu để truy cập vào phạm vi bộ nhớ chính bắt đầu từ hoặc cao hơn 2^32.

Edit:

Nhìn vào đây để biết thêm chi tiết: http://wiki.osdev.org/Detecting_Memory_%28x86%29

Chỉnh sửa 2:

Hôm nay, tôi stumbled khi một công cụ Sysinternals, trong đó cho thấy sau bản đồ phạm vi vật lý cho hệ thống EFI của tôi, mà không có bất kỳ cài đặt liên quan nào bị thay đổi. Như người ta có thể thấy, tất cả các bộ nhớ chính 64GiB được ánh xạ tại 0x100000000, ngay tại 2^32:

Sysinternals RamMap on Win 7/ASUS EFI BIOS

+0

Tôi không bật PAE; Tôi cần sử dụng địa chỉ 64 bit để tiếp cận phần cuối của bộ nhớ. Vì vậy, các phạm vi thấp hơn được ánh xạ ở nơi khác gây ra sự cần thiết cho các địa chỉ trên 4GiB? – Joel

+0

Chính xác, các phạm vi có loại 0x2,0x3,0x4 đang gây ra điều này. Chính xác ánh xạ được tạo ra như thế nào phụ thuộc vào phần mềm hệ thống. Thông thường, cũng có 'lỗ hổng bộ nhớ', điều này giải thích, tại sao nhiều bộ nhớ hơn dự kiến ​​được ánh xạ trên 4G. – Sam

+0

Vâng tôi đã tự hỏi về điều đó, vì có gần 900MiB ánh xạ trên 4GiB .. Có thể nó thực sự chiếm nhiều? – Joel

Các vấn đề liên quan