根据Documentation/x86/x86_64/mm.txt,在64位linux中内核空间的布局应该是这样的:
6 0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm
7 hole caused by [48:63] sign extension
8 ffff800000000000 - ffff80ffffffffff (=40 bits) guard hole
9 ffff880000000000 - ffffc7ffffffffff (=64 TB) direct m
当我在linux cat /boot/System.map-$(uname -r)中这样做时,它会返回内存片段,但是在phys_startup_64上有一个很大的差距:
00000000000228c0 D softnet_data
0000000000022a80 d rt_uncached_list
0000000000022ac0 d rt6_uncached_list
0000000000023000 d kvm_apic_eoi
0000000000023040 d steal_time
0000000000023080 d apf_reason
0000000000024000 D
我知道,如果我试图打印一个数组元素的地址,它将是一个来自虚拟内存的地址,而不是来自真实内存(物理内存),即DRAM的地址。
printf ("Address of A[5] and A[6] are %u and %u", &A[5], &A[6]);
我发现地址是连续的(假设元素是字符)。实际上,它们可能不是连续的,至少在DRAM中不是。我想知道真正的地址。我该怎么做呢?
无论是Windows还是Linux,我都需要知道这一点。
问题:
SERVER:~ # systemctl start kdump.service
Job for kdump.service failed because the control process exited with error code. See "systemctl status kdump.service" and "journalctl -xe" for details.
SERVER:~ # systemctl status kdump.service
● kdump.service - Load kdump kernel on startu
我开始学习如何在linux中使用Crypto。它提供了使用散列表结构将明文传输到分组密码功能。Scatterlist句柄通过在内存页面上存储明文的位置来处理明文。结构散射列表的简化定义是:
struct scatterlist {
unsigned long page_link; //number of virtual page in kernel space where data buffer is stored
unsigned int offset; //offset from page start address to dat