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:
Tại sao tôi tổng cộng hơn 4GiB RAM khi tôi chỉ cài đặt 4GiB?
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?
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. –
Đú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