この項 xiàng 目 mù では、データ処 chŭ 理 lĭ 方 fāng 式 shì について説 shuō 明 míng しています。
enqueue (エンキュー) および dequeue (デキュー) による、FIFO (queue) のイメージ
FIFO (ファイフォ、フィフォ、フィーフォー)は、F irst I n, F irst O ut を表 biaŏ す頭 toú 字 zì 語 yŭ である。先 xiān 入 rù れ先 xiān 出 chū し と訳 yì されることがある。
この言 yán 葉 xié はキュー の動 dòng 作 zuò 原 yuán 理 lĭ を表 biaŏ すものであり、キューに入 rù っているどんな要 yaò 素 sù の組 zŭ に対 duì しても、先 xiān に入 rù ったものを先 xiān に処 chŭ 理 lĭ して出 chū し、後 hoù に入 rù ってきたものは先 xiān に入 rù ったものより後 hoù から処 chŭ 理 lĭ して出 chū す、というように、出 chū 入 rù りにおいて順 shùn 序 xù が保 baŏ 存 cún されることを意 yì 味 weì している(厳 yán 密 mì には出 chū 入 rù りのみを定 dìng 義 yì しており、処 chŭ 理 lĭ 順 shùn ではない)。日 rì 本 běn 語 yŭ の俗 sú な慣 guàn 用 yòng 表 biaŏ 現 xiàn では「ところてん 式 shì 」も同 tóng じものを指 zhĭ す。
たとえば優 yoū 先 xiān 度 dù 付 fù きキュー はキューの一 yī 種 zhŏng であるが、FIFOではない。優 yoū 先 xiān 順 shùn 位 weì によって順 shùn 序 xù が入 rù れ替 tì わるからである。待 daì ち行 xíng 列 liè 理 lĭ 論 lùn における、FIFOキューについての厳 yán 密 mì な定 dìng 義 yì もある。
FIFO は、いくつかの異 yì なる文 wén 脈 mò で用 yòng いられる。すなわち一 yī 般 bān 概 gaì 念 niàn のこともあれば、特 tè 定 dìng の実 shí 装 zhuāng のこともある。以 yĭ 下 xià ではそれぞれを解 jiě 説 shuō するが、これが全 quán てではない。たとえばもっとくだけた感 găn じで、同 tóng 時 shí 通 tōng 訳 yì のような情 qíng 報 baò の処 chŭ 理 lĭ 方 fāng 法 fă をFIFOと呼 hū ぶこともある。
FIFO (queue) のキューのイメージ
キューに格 gé 納 nà されたデータの処 chŭ 理 lĭ 方 fāng 法 fă のひとつである。キュー上 shàng の各 gè 要 yaò 素 sù はキューのデータ構 goù 造 zaò 内 neì に格 gé 納 nà される。FIFOのキューでは、最 zuì 初 chū に格 gé 納 nà されたデータが、(後 hoù で)最 zuì 初 chū に取 qŭ 出 chū されると同 tóng 時 shí に削 xuē 除 chú される。入 rù 出 chū 力 lì (格 gé 納 nà と取 qŭ 出 chū し)は常 cháng にその順 shùn 番 fān で行 xíng われる。同 tóng 義 yì 語 yŭ としてLILO(Last In Last Out)がある。これはキューの一 yī 般 bān 的 de な動 dòng 作 zuò である。これの対 duì 称 chēng として、先 xiān 入 rù れ後 hoù 出 chū し(後 hoù 入 rù れ先 xiān 出 chū し)の順 shùn 序 xù があり、スタック またはLIFO を参 cān 照 zhaò されたい。
典 diăn 型 xíng 的 de なデータ構 goù 造 zaò は次 cì のようになる。
struct fifo_node {
fifo_node *next;
value_type value;
};
class fifo
{
fifo_node *front;
fifo_node *back;
fifo_node dequeue(void)
{
fifo_node *tmp = front;
front = front->next;
return tmp;
}
queue(value)
{
fifo_node *tempNode = new fifo_node;
tempNode->value = value;
back->next = tempNode;
back = tempNode;
}
}
この例 lì では、queue(value) で value がキューに格 gé 納 nà され、dequeue() でキューの先 xiān 頭 toú のデータを取 qŭ り出 chū すようになっている。
一 yī 般 bān に、いわゆる「パイプ 」の動 dòng 作 zuò はFIFOだが、特 tè にファイルシステム名 míng 前 qián 空 kōng 間 jiān に名 míng 前 qián が作 zuò られる「名 míng 前 qián 付 fù きパイプ 」は、ファイルシステム中 zhōng での種 zhŏng 別 bié (通 tōng 常 cháng ファイル、ディレクトリ、デバイスファイル、etc)として「FIFO」と呼 hū ばれている。
論 lùn 理 lĭ 回 huí 路 lù では、データの流 liú れる方 fāng 向 xiàng が一 yī 方 fāng 向 xiàng であるという特 tè 性 xìng のある記 jì 憶 yì 装 zhuāng 置 zhì として、バッファリングに使 shĭ われる。実 shí 現 xiàn 方 fāng 法 fă としては、シフトレジスタ のようにデータ全 quán 体 tĭ が一 yī 方 fāng 向 xiàng に動 dòng くという方 fāng 法 fă と、アドレス付 fù けされたメモリと書 shū 込み・読 dú 出 chū しの各 gè ポインタ、制 zhì 御 yù ロジックを組 zŭ み合 hé わせる方 fāng 法 fă がある。
重 zhòng 要 yaò な役 yì 割 gē を果 guŏ たしているFIFOとしては、デュアルポートSRAMがある。一 yī 方 fāng のポートがライトに使 shĭ われ、もう一 yī 方 fāng がリードに使 shĭ われる。
同 tóng 期 qī 型 xíng FIFOはリードとライトに同 tóng じクロックを使 shĭ 用 yòng するものである。非 feī 同 tóng 期 qī 型 xíng FIFOは異 yì なったクロックを使 shĭ 用 yòng する。非 feī 同 tóng 期 qī 型 xíng FIFOは準 zhŭn 安 ān 定 dìng 性 xìng 問 wèn 題 tí をはらんでいる。非 feī 同 tóng 期 qī 型 xíng FIFOでは書 shū 込み・読 dú 出 chū しのポインタの番 fān 地 dì 変 biàn 化 huà にインクリメントではなくグレイコード を使 shĭ い、安 ān 定 dìng した信 xìn 号 haò 生 shēng 成 chéng ができるようにする。
FIFOにはいくつかのフラグが付 fù 属 shŭ する。フラグはFIFOの状 zhuàng 態 taì を表 biaŏ し、いっぱいになっているとか、もうすぐいっぱいになるとか、ほとんど空 kōng だとかいうことを示 shì す。空 kōng きが設 shè 定 dìng した容 róng 量 liàng 以 yĭ 下 xià ・以 yĭ 上 shàng になったら割 gē 込み を起 qĭ こすよう設 shè 定 dìng できるものも多 duō い。