【内核资料】stackoverflow上关于内核为何偏爱kmalloc(),而很少用vmalloc()的讨论

el/2023/12/2 12:18:39

1. 问题

What is the difference between vmalloc and kmalloc?

2. 大致观点

  • 涉及到DMA的话,需要物理上连续的内存;
  • 内核之所以偏好分配物理上连续内存,并不是必须的,
    而主要是考虑性能:
    • kmalloc()比vmalloc()效率高,想也知道,vmalloc()需要逐页把离散的物理空间重新映射到连续的虚拟空间上;
    • kmalloc()对TLB更友好;
  • 内核的页不会被swapped,而是常驻内存中,无论kmalloc()分配还是vmalloc()分配;

http://www.ngui.cc/el/4104843.html

相关文章

【INT的内核笔记】Linux信号递达过程详解

1. 什么时候执行信号递达 书上是叫递达的,但我个人比较喜欢叫信号处理吧,毕竟明明就是信号的接收进程处理信号的过程╮(╯▽╰)╭,所以文中可能会多处出现信号处理。 一般在从中断或系统调用返回到用户态前,会执行一段逻辑检查T…

【INT的内核笔记】tcp接收端相关实现

1. file_operations 在epoll_ctl(add)中有这样的调用链: 主要涉及了file->f_op和private_data中的socket结构 tfile->f_op->poll(tfile, &epq.pt)|->sock_poll|->sock->ops->poll|->tcp_poll(应该也是类似sk->sk_prot->recvmsg?…

关于char数组的输入与输出

cin一个char数组: 遇到空白符号(空格,tab制表符,回车)时读取停止,空白符号并不会被读入,但是碰到这些空白符号后,字符串末尾会放一个’\0‘ tip:空白字符的读入可以靠getchar() cout…

平衡三进制——Roj_1016

这道题目其实回顾的时候觉得还是挺容易的,但是做的时候还是忍不住看了题解。 这道题给我的主观层面的反思要远远大于客观上的,不要惧怕题目!不要惧怕题目!不要惧怕题目!!!重要的事情说三遍 *注意…

平衡三进制Ⅱ——Roj_1018

前提 平衡三进制Ⅱ就是1016的反过来计算,本来可能想转换的方法可能是这道题目的难点,但是题目直接给出了转换的方法,所以这道题的难点就转移到了如何用代码实现它所提供的方法(没有数学上的难度的 要点 1.最主要的问题&#xff1a…

字串排序——Roj_1020

这道题光看题目好像没有什么难度,但是操作起来发现了如下问题 1.输入这一串数组的方式,我刚开始采取的是多次get()到‘\n’结束,后来发现可能还是一个一个读入比较方便,因为还要考虑数组中是否存在数字(cge…

i-1进制——Roj_1014

思考过程 这道题刚开始搞得时候,毫无头绪,因为一直把abi看成了一个整体,没有想着把a和b分开运算,然后思维上的难度就比较大。然后某大佬给了示范 (刚开始我还没有想到用&1的办法搞成二进制,我刚开始是…

-1+i进制——Roj_1017

1017是1014反过来进行计算 但比较麻烦的点在于要考虑读入的各种情况: 1.是否有实部 2.是否有虚部 3.实部的正负 3.虚部的正负 4.虚部是否为/- 1 5.不是个位数的数字要进行进行运算 综合考虑各种情况,然后进行分类讨论 计算过程中可以拿aib/-1i找出统一的…

八进制小数——Roj_1005

难点: 1.这题最主要的问题就是big num,long long 无法存下这么大的数,因此要考虑将这个数放在一个数组里,将整数的运算转换成数组各个位置上的运算。 2.其次就是考虑将其放在结构体中,用operator重新定义各种运算后。 …

P1088 [NOIP2004 普及组] 火星人

思路: 1.一开始我是想着把所有的结果全部存下来,然后就tle了(n的n次) ->改为把从给出的顺序开始全存下来,依旧不行 ->最后改成如果遇到题目给出的顺序做个标记,然后开始cnt (如果数据小一点&#xff…