我想问一个关于vmalloc()的问题。

根据 kernel.org 的文档,它说:

分配足够的页面以覆盖页面级分配器的大小,并将它们映射到连续的内核虚拟空间。

这是否意味着vmalloc()返回的(起始)地址将是 PAGE_SIZE 的倍数?

以下是我的想法:

我试图调用vmalloc()并以十六进制打印出地址。 最后三位都是零,我的系统上 PAGE_SIZE 的值为 4096,这证明了我的假设。 此外,在mmap()

void *mmap(void *addr, size_t length, int prot, int flags,
                  int fd, off_t offset);

手册页还说,

如果 addr 为 NULL,则内核选择(页面对齐的)地址来创建映射; 这是创建新映射最便携的方法。 如果 addr 不为 NULL,则内核将其作为关于放置映射位置的提示; 在 Linux 上,内核将选择附近的页面边界(但始终高于或等于 /proc/sys/vm/mmap_min_addr 指定的值)并尝试在那里创建映射。

偏移量必须是页面大小的倍数

文件以页面大小的倍数进行映射。

以上似乎证明了我的假设,但我不太确定。 任何想法将不胜感激。

===============>>#1 票数:0

vmalloc分配页面并返回分配内存的起始地址。 每个页面都必须页面对齐。 因此起始地址是页面大小的倍数。

  ask by Ethan L. translate from so

未解决问题?本站智能推荐:

1回复

无限调用sbrk(PAGE_SIZE)的结果

I am using linux2.6.38-8-generic with PAGE_SIZE 4 kb. 我正在使用linux2.6.38-8-generic和PAGE_SIZE 4 kb。 I am trying the following code: 我正在尝试以下代码: #define
1回复

为什么vmalloc返回的地址无法转换为物理地址

I am trying to understand the memory management in Linux. 我正在尝试了解Linux中的内存管理。 In case of vmalloc I found this 如果是vmalloc我发现了这个 Addresses returned c
1回复

使用alloc_page返回值

I want to know the use of the return value of alloc_page , it allocates page and returns an instance of struct page to represent the start of the rese
1回复

PAGE_ALIGN和unsignedint有什么作用?它不应该有地址吗?

In some framebuffer configuration code I had seen these lines: 在一些帧缓冲区配置代码中,我看到了以下几行: static unsigned int max_size = 0;max_size = max(max_size, 8*(mi
1回复

Linux:如何确定与ioremap返回的内容相对应的DMA地址

Say I have some physical address (this is the bus location of my DMA source peripheral): 假设我有一些物理地址(这是我的DMA源外围设备的总线位置): phys_addr = 0xffff0000; and I
3回复

linux内核函数page_address()

I'm confused with the function:我对函数感到困惑:void * page_address(struct page *page) which (1) "convert a given page to its logical address" according to "L