Smile 笑容

什么是 FIFO FIFOs

FIFO(First In First Out) 先进先出队列,一种缓存、或一种管道、设备、接口。

工控中的FIFO:

FIFO即先入先出存储器,用于A/D转换过程中的数据缓存,可以理解成板子上带的一小块内存,目的是防止采集数据来不及传输而造成的丢点现象,实际上是硬件寄存器;double buffer是一种软件上实现数据连续传输的方法,是在内存中设置一个环行buffer,分成两部分,倒着传数,保证数据不间断。

交换机中的FIFO:

一种特殊的缓存。这种缓存是一种先进先出的FIFO(First In First Out),比特从一端进入然后再以同样的顺序从另一端出来。当帧被接收时,它被保存在FIFO中。如果帧以小于512比特的长度结束,那么FIFO中的内容(残帧)就会被丢弃。因此,不存在普通直通转发交换机存在的残帧转发问题,是一个非常好的解决方案。数据包在转发之前将被缓存保存下来,从而确保碰撞碎片不通过网络传播,能够在很大程度上提高网络传输效率。

通常我们说的FIFO多是指Unix和Linux中的FIFO,他们可能会被翻译成 有名管道,而我则更倾向于翻译成 先进先出缓存、或先进先出管道

有名管道是一个能在互不相关进程之间传送数据的特殊文件。一个或多个进程向内写入数据,在另一端由一个进程负责读出。有名管道是在文件系统中可见的,也就是说ls可以直接看到。(有名管道又称FIFO,也就是先入先出。)

有名管道可以将无关的进程联系起来,而无名的普通管道一般只能将父子进程联系起来——除非你很努力地去尝试——当然也能联系两个无关进程。有名管道是严格单向的,尽管在一些系统中无名管道是双向的。

在shell下交互地建立一个有名管道,你可以用mknod或mkfifo命令。在有些系统中,mknod产生的文件可能在/etc目录下,也就是说,可能不在你的目录下出现,所以请查看你系统中的man手册。[译者注:在Linux下,可以看一下fifo(4)]

参考

UNIX Programming FAQ 中文版 v0.1.0

Chapter 2. 一般文件操作(包括管道和套接字)

http://www.linuxforum.net/books/upfaq/x395.htm