linux消息队列 Linux消息队列的作用
大家好,今日小天来为大家解答以上的问题。linux消息队列,Linux消息队列的作用很多人还不知道,现在让我们一起来看看吧!
linux消息队列 Linux消息队列的作用
linux消息队列 Linux消息队列的作用
1、功能性的错误检查,接着进行传统的DAC检查,并在即将访问内核的内部对象之Linux中传统的I/O作是一种缓存I/O,I/O过程中产生的数据传输通常需要在缓冲区中进行多次拷贝。
2、当应用程序需要访问某个数据(read()作)时,作系统会先判断这块数据是否在内核缓冲区中,如果在内核缓冲区中找不到这块数据,内核会先将这块数据从磁盘中读出来放到内核缓冲区中,应用程序再从缓冲区中读取。
3、当应用程序需要将数据输出(write())时,同样需要先将数据拷贝到输出堆栈相关的内核缓冲区,再从内核缓冲区拷贝到输出设备中。
4、以一次网络请求为例,如下图。
5、对于一次数据读取,用户应用程序只需要调用read()及write()两个系统调用就可以完成一次数据传输,但这个过程中数据经过了四次拷贝,且数据拷贝需要由CPU来调控。
6、在某些情况下,这些数据拷贝会极大地降低系统数据传输的性能,比如文件中,一个文件从磁盘读取后不加修改地回传给调用方,那么这占用CPU时间去处理这四次数据拷贝的性价比是极低的。
7、一次提供了一个通用的安全系统调用;处理网络调用的系统I/O的流程:以上可以发现,传统的Linux系统I/O 作要进行4次内核空间与应用程序空间的上下文切换,以及4次数据拷贝。
8、直接内存访问(Direct Memory Access,DMA)是计算机科学中的一种内存访问技术,允许某些电脑内部的硬件子系统地读取系统内存,而不需要处理器(CPU)的介入。
9、在同等程度的处理器负担下,DMA是一种快速的数据传送方式。
10、这类子系统包括硬盘、显卡、网卡和声卡。
11、在Linux系统中,当应用程序需要读取文件中的数据时,作系统先分配一些内存,将数据从存储设备读入到这些内存中,然后再将数据传递应用进程;当需要往文件中写数据时,作系统先分配内存接收用户数据,然后再将数据从内存写入磁盘。
12、文件cache管理就是对这些由作系统分配并用开存储文件数据的内存的管理。
13、在Linux系统中,文件cache分为两个层面,page cache 与 Buffer cache,每个page cache包含若干个buffer cache。
14、作系统中,磁盘文件都是由一系列的数据块(Block)组成,buffer cache也叫块缓存,是对磁盘一个数据块的缓存,目的是为了在程序多次访问同一个磁盘块时减少访问时间;而文件系统对数据的组织形式为页,page cache为页缓存,是由多个块缓存构成,其对应的缓存数据块在磁盘上不一定是连续的。
15、也就是说buffer cache缓存文件的具体内容--物理磁盘上的磁盘块,加速对磁盘的访问,而page cache缓存文件的逻辑内容,加速对文件内容的访问。
16、buffer cache的大小一般为1k,page cache在32位系统上一般为4k,在64位系统上一般为8k。
17、磁盘数据块、buffer cache、page cache及文件的关系如下图:文件cache的目的是加快对数据文件的访问,同时会有一个预读过程。
18、对于每个文件的次读请求,系统会读入所请求的页面并读入紧随其后的几个页面;对于第二次读请求,如果所读页面在cache中,则会直接返回,同时又一个异步预读的过程(将读取页面的下几页读入cache中),如果不在cache中,说明读请求不是顺序读,则会从磁盘中读取文件内容并刷新cache。
19、因此在顺序读取情况下,读取数据的性能近乎内存读取。
20、DMA允许硬件子系统直接将数据从磁盘读取到内核缓冲区,那么在一次数据传输中,磁盘与内核缓冲区,输出设备与内核缓冲区之间的两次数据拷贝就不需要CPU进行调度,CPU只需要进行缓冲区管理、以及创建和处理DMA。
21、而Page Cache/Buffer Cache的预读取机制则加快了数据的访问效率。
22、如下图所示,还是以文件请求为例,此时CPU负责的数据拷贝次数减少了两次,数据传输性能有了较大的提高。
23、使用DMA的系统I/O作要进行4次内核空间与应用程序空间的上下文切换,2次CPU数据拷贝及2次DMA数据拷贝。
24、Mmap内存映射与标准I/O作的区别在于当应用程序需要访问数据时,不需要进行内核缓冲区到应用程序缓冲区之间的数据拷贝。
25、Mmap使得应用程序和作系统共享内核缓冲区,应用程序直接对内核缓冲区进行读写作,不需要进行数据拷贝。
26、Linux系统中通过调用mmap()替代read()作。
本文到这结束,希望上面文章对大家有所帮助。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。