FIFO

Representació d'una cua FIFO (First-In-First-Out).

First in, first out o FIFO (en català, «primer a entrar, primer a sortir»),[1] és un concepte utilitzat en estructures de dades, comptabilitat de costos i teoria de cues. Guarda analogia amb les persones que esperen en una cua i van sent ateses en l'ordre en què van arribar, és a dir, que la primera persona que entra és la primera persona que surt.

També s'anomena first come, first served o FCFS (en català, «primer a arribar, primer a ser atès»).[2]

Aplicacions

Aquesta estructura s'utilitza per exemple:

  • en general, per emmagatzemar temporalment les transaccions que han d'esperar per ser processades;
  • servidors d'impressió, que processen consultes en l'ordre en què arriben, i els insereixen en una cua (també anomenada "spool" ';
  • alguns motors multitasca, en un sistema operatiu, que han de concedir temps de màquinari a cada tasca, sense privilegiar-ne cap;
  • Un BFS utilitza una cua per emmagatzemar els nodes visitats;
  • per crear tot tipus de memòries intermèdies o buffers(en anglès);
  • En gestió d'inventaris, els algorismes han de respectar la gestió d'inventaris físics per garantir la consistència/valoració física.

Informàtica

En informàtica, FIFO s'utilitza en estructures de dades per implementar cues. La implementació pot efectuar-se amb ajuda d'arranjaments o vectors, o bé mitjançant l'ús de punters i assignació dinàmica de memòria.

Si s'implementa mitjançant vectors, el nombre màxim d'elements que pot emmagatzemar FIFO està limitat al que s'hagi establert en el codi del programa abans de la compilació (cua estàtica) o durant la seva execució (cua pseudoestática o dinàmica). Sigui quina sigui l'opció triada, el nombre d'elements que podrà emmagatzemar la cua quedarà determinat durant tota l'execució del programa. Així, el sistema ha de reservar la mida de memòria necessari per acollir totes les dades, sigui quin sigui el nombre d'elements usats.

En algunes aplicacions, això suposa un problema, ja que pot desconèixer-se el nombre d'elements a contenir a la cua. La senzilla solució de reservar més memòria de la que se suposa que es necessitarà, pot conduir a un malbaratament de la memòria (la cua pot ser que estigui plena, aprofitant tota la memòria reservada, o bé, que mai s'acabi d'omplir-, ocupant recursos innecessaris en memòria). No obstant això, si es fa servir assignació dinàmica de memòria, el nombre màxim no està declarat en temps de compilació sinó en temps d'execució, és a dir, es reserva memòria a mesura que es necessiti expandir la mida de la cua (adaptant a la mida necessari en cada moment en funció dels elements que hi ha a la cua), fent un millor ús de la memòria disponible.

Un dels usos de les cues és l'exploració 'en amplada' d'un arbre binari de cerca. Un altre ús típic de les cues, és la gestió de descàrregues d'una aplicació peer-to-peer (P2P).

Estructura de dades

Representació d'una cua FIFO (primera entrada, primera sortida)

Depenent de l'aplicació, es podria implementar un FIFO com a registre de desplaçaments de maquinari o utilitzant diferents estructures de memòria, normalment un buffer circular o un tipus de llista. Per obtenir informació sobre l'estructura de dades abstractes, vegeu Cua (estructura de dades). La majoria de les implementacions de programari d'una cua FIFO no són segurs i requereixen un mecanisme de bloqueig per verificar que la cadena d'estructura de dades es manipula només per un fil a la vegada.

Codi

El codi següent mostra una implementació de llista enllaçada FIFO C++. A la pràctica, existeixen diverses implementacions de llistes, incloses macros populars de sistemes Unix C sys/queue.h o la plantilla C++ biblioteca estàndard std :: list, evitant la necessitat d'implementar l'estructura de dades des de zero.

#include <iostream>
#include <stdexcept>

template <typename T>
class FIFO
{
private:

 struct Node {
 T value;
 Node *next;

 Node(T _value) : value(_value), next(NULL) {}
 };

 Node *front;
 Node *back;

public:
 FIFO() : front(NULL), back(NULL) {}

 ~FIFO() {
 while (front != NULL)
 dequeue();
 }

 void enqueue(T _value) {
 Node *newNode = new Node(_value);

 if (front == NULL)
 front = newNode;
 else
 back->next = newNode;

 back = newNode;
 }

 T dequeue() {
 if (front == NULL)
 throw std::underflow_error("Nothing to dequeue");

 Node *temp = front; 
 T result = front->value;

 front = front->next;
 delete temp;

 return result;
 }
};

Primer cap o cua

Els extrems d'una cua FIFO sovint s'anomenen "cap" i «cua». Malauradament, hi ha una controvèrsia sobre aquests termes:

  • Per a moltes persones, els articles han d'introduir una cua al final i romandre a la cua fins que arribin al cap i deixar la cua des d'allà. Aquest punt de vista es justifica per analogia amb cues de persones que esperen algun tipus de servei i paral·lel a l'ús de "front" i "back" en l'exemple anterior.
  • Altres persones creuen que els articles entren a la cua al davant i surten a la cua, a la manera del menjar que s'empassa una serp. Les cues escrites d'aquesta manera apareixen en llocs que es podrien considerar autoritzats, com el sistema operatiu Linux.

Canonades

En entorns informàtics que admeten el model de canonades per a Comunicació entre processos, un FIFO és un altre nom per a canonades anomenades o named pipe.

Programació de disc

Els controladors de disc poden utilitzar el FIFO com a algoritme de programació de discs per determinar l'ordre en què es pot atendre les sol·licituds d'E/S del disc.

Comunicacions i treball en xarxa

La comunicació per ponts de xarxes, commutadors i encaminadors (routers) utilitzats a xarxes informàtiques utilitzen FIFO per mantenir paquets de dades en ruta cap al següent destí. Normalment s'utilitza almenys una estructura FIFO per connexió de xarxa. Alguns dispositius disposen de múltiples FIFO per a la cua simultània i independent dels diferents tipus d'informació.

Comptabilitat

En comptabilitat FIFO és un mètode per registrar el valor d'un inventari. El seu ús és apropiat quan es compta amb diversos lots d'un mateix producte, de forma que és molt difícil identificar-los individualment. Aquest mètode presumeix que el primer producte ingressat al magatzem serà el primer a sortir per efectes de l'inventari.[3]

El criteri FIFO és molt recurrent a l'hora de valorar inventaris compostos per productes caducs o peribles; en altres paraules, se seguirà l'ordre necessari perquè les peces a les que primer es doni sortida siguin les més pròximes a caducar o assolir una obsolescència.[4]

Electrònica

Els FIFO s'usen comunament en circuits de electrònica per a emmagatzematge i fer control de flux. Parlant de maquinari, un FIFO consisteix bàsicament en un conjunt de punters de lectura/escriptura, emmagatzematge i lògica de control. L'emmagatzematge pot ser SRAM, flip-flops, latches o qualsevol altra forma adequada d'emmagatzematge. Per FIFO d'una mida important s'usa usualment una SRAM de doble port, on un dels ports s'usa per a l'escriptura i l'altre per a la lectura.

Un « FIFO sincrònic» fa servir el mateix rellotge tant per a les lectures com per a les escriptures. Un « FIFO asicrònic» és aquell que utilitza diferents rellotges, un per lectura i un altre per a l'escriptura. Quan es parla de FIFO asincrònic s'introdueix el tema de la meta-estabilitat.

Una implementació comuna d'un FIFO asincrònic fa servir un codi Gray (o qualsevol codi d'unitat de distància) per als punters de lectura i escriptura de manera d'assegurar-se una generació de banderes (flag) segures/estables.

Una altra nota addicional respecte de la generació de banderes és que un ha de necessàriament usar punters aritmètics per generar banderes per implementacions asincròniques de FIFO.

D'altra banda, un pot usar tant un acostament leaky bucket o punters aritmètics per generar banderes en una implementació FIFO sincrònica.

En FIFO, es poden enumerar:

  • Full (ple),
  • Empty (buida),
  • Almost full (gairebé ple),
  • Almost empty (gairebé buit).

FIFO ple / buit

En maquinari, un FIFO s'usa per a propòsits de sincronització. Comportant-se com una cua circular i, per tant, conté dos punters:

  • Punter de lectura / registre de direcció de lectura.
  • Punter d'escriptura / registre de direcció d'escriptura.

Les adreces de lectura i escriptura estan ambdues inicialment en la primera ubicació de la memòria i la cua FIFO està buida.

FIFO buida (empty)

Quan el registre de direcció de lectura aconsegueix al registre de direcció d'escriptura, la cua FIFO dispara el senyal o bandera buit.

FIFO plena (full)

Quan el registre de direcció d'escriptura aconsegueix al registre de direcció de lectura, la cua FIFO dispara el senyal o bandera ple.

Vegeu també

  • Last in, first out o LIFO, el contrari de FIFO. Guarda analogia amb una pila de plats, en què els plats van posant un sobre l'altre, i si es vol treure un, es treu primer l'últim que s'ha posat.
  • GIGO, acrònim de Garbage In, Garbage Out, es pot traduir per brossa entra, brossa surt. Emprada per a posar en relleu que els ordinadors, a diferència dels éssers humans, processen incondicionalment dades d'entrada encara que siguin absurdes i aportaran dades de sortida sense sentit.[5]

Referències

  1. Definició de FIFO a computerhope.com
  2. Fatos Xhafa; Jordi Marco. «Programació i bases de dades. Pràctiques». UPC, 2007. [Consulta: 22 octubre 2011].
  3. «Valoració d'existències» (pdf). [Consulta: 22 octubre 2011].
  4. Definició a economipedia.com
  5. «World Wide Words: Garbage in, garbage out» (en anglès). [Consulta: 12 agost 2018].

Bibliografia

  • Knuth, Donald E. The Art of Computer Programming (en anglès). vol I. Fundamental Algorithms. 3. Addison Wesley, 1997. 


Read other articles:

Jembatan Bir-Hakeim Jembatan Bir-Hakeim, sebelumnya Pont de Passy, adalah sebuah jembatan yang melintasi Seine di Paris[1]. Ini menghubungkan arondisemen ke-15 dan ke-16, melewati Île aux Cygnes. Jembatan yang terbuat dari baja itu merupakan yang kedua berdiri di lokasi tersebut. Itu dibangun antara tahun 1903 dan 1905, menggantikan jembatan sebelumnya yang didirikan pada tahun 1878. Sebuah jembatan lengkung, dengan panjang 237 meter (777 kaki) dan lebar 24,7 meter (81 kaki).[2&#...

 

James Francis Kenney (* 6. Dezember 1884 in Tyendinaga, Hastings County, Ontario; † 4. Juni 1946 in Ottawa) war ein kanadischer Historiker, Archivar und Keltologe, der insbesondere durch sein Hauptwerk über die frühen kirchlichen Textquellen Irlands und die Gründung der Canadian Catholic Historical Association bekannt wurde.[1] Inhaltsverzeichnis 1 Leben 2 Werke (Auswahl) 3 Ehrungen 4 Literatur 5 Weblinks 6 Anmerkungen Leben George M. Wrong war der wichtigste Förderer Kenneys in...

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Januari 2023. Seorang penguasa mengenakan kain tiraz dilengannya. Tiraz adalah kain yang dipakai di lengan seseorang yang menunjukkan kepada siapa orang tersebut menunjukkan lotalitasnya didalam sebuah kekhalifahan Islam. Kain ini dihiasi dengan tulisan aksara Arab ...

1947 film directed by Ted Tetzlaff Riff-RaffMovie posterDirected byTed TetzlaffWritten byMartin RackinProduced byNat HoltJack J. GrossStarringPat O'BrienAnne JeffreysWalter SlezakCinematographyGeorge E. DiskantEdited byPhilip MartinMusic byRoy WebbColor processBlack-and-whiteProductioncompanyRKO Radio PicturesDistributed byRKO Radio PicturesRelease dates June 28, 1947 (1947-06-28) (New York City)[1] September 15, 1947 (1947-09-15) (U.S.)[1]...

 

2006 American epic crime thriller film by Martin Scorsese For other uses, see The Departed (disambiguation). The DepartedTheatrical release posterDirected byMartin ScorseseScreenplay byWilliam MonahanBased onInfernal Affairsby Alan Mak & Felix ChongProduced by Brad Pitt Brad Grey Graham King Starring Leonardo DiCaprio Matt Damon Jack Nicholson Mark Wahlberg Martin Sheen Ray Winstone Vera Farmiga Alec Baldwin CinematographyMichael BallhausEdited byThelma SchoonmakerMusic byHoward ShoreProd...

 

Chemical compound Telotristat ethylClinical dataTrade namesXermeloOther namesLX1032, LX1606AHFS/Drugs.comMonographMedlinePlusa617029License data US DailyMed: Telotristat_ethyl Pregnancycategory AU: B3 Routes ofadministrationBy mouth (tablets)ATC codeA16AX15 (WHO) Legal statusLegal status AU: S4 (Prescription only) CA: ℞-only[1] UK: POM (Prescription only) US: ℞-only[2] EU: Rx-only[3] Pharmacokinetic dataProtein bin...

23rd governor of Mississippi John J. PettusPortrait by Alexander Alaux, 1907 (Mississippi Department of Archives and History)23rd Governor of MississippiIn officeNovember 21, 1859 – November 16, 1863Preceded byWilliam McWillieSucceeded byCharles ClarkPresident of the Mississippi SenateIn office1854–1857Preceded byUnknownSucceeded byUnknownGovernor of MississippiActingIn officeJanuary 5, 1854 – January 10, 1854Preceded byHenry S. FooteSucceeded byJohn J. McRaeMember of ...

 

Sporting event delegationBelarus at theParalympicsIPC codeBLRNPCParalympic Committee of the Republic of BelarusMedals Gold 49 Silver 44 Bronze 47 Total 140 Summer appearances19962000200420082012201620202024Winter appearances19941998200220062010201420182022Other related appearances Soviet Union (1988) Unified Team (1992) Belarus made its Paralympic Games début at the 1994 Winter Paralympics in Lillehammer. It has participated in every subsequent edition of both the Summer and Winter...

 

Political party in Peru Revolutionary Union Unión RevolucionariaSupreme ChiefLuis A. Flores[1]FoundedJuly 30, 1931 (1931-07-30)Dissolved1945 (1945)IdeologyFascismMilitarismAnti-Asian sentimentPolitical positionFar-rightColors Party flagPolitics of PeruPolitical partiesElections Revolutionary Union (Spanish: Unión Revolucionaria, UR) was a fascist political party in Peru that lasted from 1931 to 1942. History The party was founded in 1931 by Luis Mig...

High school in Mercer County, New Jersey, United States Hamilton High School WestAddress2720 South Clinton AvenueHamilton Township, Mercer County, New Jersey 08610United StatesCoordinates40°11′57″N 74°43′24″W / 40.1992°N 74.7233°W / 40.1992; -74.7233InformationTypePublicMottoTradition, Pride, and ExcellenceSchool districtHamilton Township School DistrictNCES School ID340654003092[1]PrincipalBrian SmithFaculty102.6 FTEs[1]Grades9-12Enrollment...

 

Life expectancy by world region, from 1770 to 2018 This is a list of countries showing past life expectancy, ranging from 1950 to 2015 in five-year periods, as estimated by the 2017 revision of the World Population Prospects database by the United Nations Population Division. Life expectancy equals the average number of years a person born in a given country is expected to live if mortality rates at each age were to remain steady in the future. The life expectancy is shown as the average of m...

 

Papa Roach discographyPapa Roach live at the Zwarte Cross festival in Lichtenvoorde on July 18, 2010Studio albums11Live albums1Compilation albums2Video albums1Music videos52EPs9Singles39 American rock band Papa Roach has released 11 studio albums, one live album, nine extended plays, two compilation albums, 39 singles, and 52 music videos. The band's first major-label release was the triple-platinum debut album Infest (2000). The group's success continued with their gold album Lovehatetragedy...

Чемпіонат світу з боротьби 2018 Вільна Греко-римська Жінки До 57 кг До 55 кг До 50 кг До 61 кг До 60 кг До 53 кг До 65 кг До 63 кг До 55 кг До 70 кг До 67 кг До 57 кг До 74 кг До 72 кг До 59 кг До 79 кг До 77 кг До 62 кг До 86 кг До 82 кг До 65 кг До 92 кг До 87 кг До 68 кг До 97 кг До 97 кг До 72 кг До 125 кг До 130 кг До 76 кг ...

 

2016 studio album by BishKiller BishStudio album by BishReleasedSeptember 5, 2016(Digital Medial), October 5, 2016(CD)GenrePunk rock, pop punk, alternative rock, garage rock, alternative metalLength56:27LanguageJapanese, EnglishLabelAvex TraxProducerKenta Matsukuma, JxSxKBish chronology Fake Metal Jacket(2016) Killer Bish(2016) Giant Killers(2017) Singles from Killer Bish DeadmanReleased: May 4, 2016 Alternative coversCover for LIVE Edition Alternative coverCover for Loppi & HMV L...

 

Han sederhanaJenis aksara Logograf BahasaTionghoaPeriode1956–sekarangAksara resmi Tiongkok Singapura PBB (dokumen dituliskan dalam aksara Han sederhana sejak 1971–sekarang)Arah penulisanVaries (modern: kiri ke kanan, tradisional: atas ke bawah, dari kolom sebelah kanan)Aksara terkaitSilsilahAksara tulang ramalanAksara segelAksara rohaniwanAksara Han tradisionalHan sederhanaAksara kerabatKanjiChữ HánChữ NômHanjaAksara Khitan besarAksara Khitan kecilZhuyinISO 15924ISO 1...

French singer Amel BentAmel Bent, in 2014Background informationBirth nameAmel Bent BachirBorn (1985-06-21) 21 June 1985 (age 38)Paris, FranceGenres Pop Occupation(s)Singer - Dancer - philosopheYears active2004–presentLabelsSony BMG, Universal MusicMusical artist Amel Bent Bachir (Arabic: آمال بنت بشير; born 21 June 1985), better known by her stage name Amel Bent (French pronunciation: [a.mɛl bɛnt]), is a French pop singer who gained fame after reaching the semi-fin...

 

Commonwealth Conciliation and Arbitration Act 1904Parliament of Australia Long title An act relating to Conciliation and Arbitration for the Prevention and Settlement of Industrial Disputes extending beyond the Limits of any one State CitationNo. 13 of 1904Territorial extentStates and territories of AustraliaRoyal assent15 December 1904Legislative historyBill titleCommonwealth Conciliation and Arbitration Bill 1904Introduced byAlfred DeakinStatus: Repealed The Commonwealth Conciliation and Ar...

 

National park in Vietnam Tràm Chim National ParkVườn quốc gia Tràm ChimIUCN category II (national park)Wetland at Tram Chim National ParkLocationTam Nông, Đồng Tháp, VietnamNearest cityCao LãnhCoordinates10°43′30″N 105°31′00″E / 10.72500°N 105.51667°E / 10.72500; 105.51667Area75.88 km2Established1998Governing bodyPeople's Committee of Đồng Tháp Province Ramsar WetlandOfficial nameTram Chim National ParkDesignated2 February 20...

European crime drama television series The TeamTitle screen of The TeamGenreCrime dramaStarring Lars Mikkelsen Jasmin Gerat Veerle Baetens ComposerJean-Paul WallCountry of originAustria, Belgium, Denmark, Germany, SwitzerlandOriginal languagesDanish, English, Dutch, French, German, SwedishNo. of seasons2No. of episodes16ProductionRunning time57 minutesProduction companies Network Movie Film-und Fernsehproduktion (Germany) Lunanime (Belgium) Nordisk Film (Denmark) Superfilm (Austria) C-films (...

 

Токі-понаtoki pona Поширена в ІнтернетНосії понад 3 500 в Інтернеті (2018)Писемність Існують три системи письма для токі пони — латинська, сителен і сителен-пона. Завдяки своїй структурі мова теоретично може передаватись будь-якою системою письмаКласифікація штучна мова, апост...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!