当前位置: 技术问答>linux和unix
linux内核缓冲区与进程缓冲区。
来源: 互联网 发布时间:2016-08-13
本文导语: 在看《unix网络编程》这本书,但对里面的一些概念还是不理解,比如经常提到进程缓冲区和内核缓冲区, 它们都有什么作用?在google上没有找到我想要的,希望这里的朋友能帮助我。 | 所谓...
在看《unix网络编程》这本书,但对里面的一些概念还是不理解,比如经常提到进程缓冲区和内核缓冲区,
它们都有什么作用?在google上没有找到我想要的,希望这里的朋友能帮助我。
它们都有什么作用?在google上没有找到我想要的,希望这里的朋友能帮助我。
|
所谓进程缓冲区,其实就是进程在进行上下文切换时,把需要挂起的进程的资源暂存到一个缓冲区中
例如,一个数据块已经到达了网线,当硬件中断内核时,内核就简单地将数据标志为已到来,然后将接受数据的进程挂起,将此进程所需的资源(如堆,栈等,以及待接受的数据块)放入一个缓冲区,转而做中断来的任务。当接收数据进程被唤醒后,内核回头来从缓冲区中取出接收数据进程的相关资源继续执行。
至于内核缓冲区,不知道LZ说得到底是什么,你是指IO过程中的页高速缓存PageCache?抑或是CPU与RAM之间的硬件高速缓存?
例如,一个数据块已经到达了网线,当硬件中断内核时,内核就简单地将数据标志为已到来,然后将接受数据的进程挂起,将此进程所需的资源(如堆,栈等,以及待接受的数据块)放入一个缓冲区,转而做中断来的任务。当接收数据进程被唤醒后,内核回头来从缓冲区中取出接收数据进程的相关资源继续执行。
至于内核缓冲区,不知道LZ说得到底是什么,你是指IO过程中的页高速缓存PageCache?抑或是CPU与RAM之间的硬件高速缓存?
|
进程缓冲区属于CPP和编译器的缓冲
内核缓冲区属于编译器和内核的缓冲
通常malloc()分配的就是进程缓冲
brk()申请的是内核缓冲,申请的大小为4K的倍数,一般由编译器完成
内核缓冲区属于编译器和内核的缓冲
通常malloc()分配的就是进程缓冲
brk()申请的是内核缓冲,申请的大小为4K的倍数,一般由编译器完成
|
不管是进程缓冲还是内核缓冲,都是为了提高程序效率,进程缓冲为了避免多次潜入内核,内核缓冲一般是为了块对齐,提高I/O效率
|
学习了,缓冲是为了等待有足够多的数据系统才进行操作,提高效率。