نظام FIFO (الحوسبة والإلكترونيات)

تمثيل طابور FIFO
تمثيل طابور FIFO مع عمليات الإضافة والإزالة
جدول FIFO

في مجال الحوسبة ونظرية الأنظمة ، فإن طريقة "الأول في الأول خارج" (الأول في الأول هو الأول خارج)، والتي تُختصر إلى FIFO ، هي طريقة لتنظيم معالجة بنية البيانات (غالبًا، على وجه التحديد مخزن مؤقت للبيانات ) حيث تتم معالجة أقدم إدخال (أول إدخال)، أو "رأس" قائمة الانتظار ، أولاً.

تُستخدم مخازن البيانات ذات البادئات المحدودة (FIFOs) في مجموعة واسعة من التطبيقات. وبحسب التطبيق، يمكن تنفيذ مخزن البيانات ذي البادئات المحدودة في الأجهزة كدائرة منطقية إلكترونية، أو في البرمجيات.

التطبيقات

تُستخدم مخازن البيانات ذات الأولوية (FIFO) على نطاق واسع في تطبيقات متنوعة. على سبيل المثال، تستخدم وحدات التحكم بالأقراص FIFO كخوارزمية جدولة لتحديد ترتيب معالجة طلبات الإدخال /الإخراج . [ 1 ] كما تستخدم جسور شبكات الاتصالات والمحولات والموجهات المستخدمة في شبكات الحاسوب FIFO لتخزين حزم البيانات أثناء انتقالها إلى وجهتها التالية؛ وعادةً ما يُستخدم مخزن بيانات واحد على الأقل لكل اتصال شبكي. [ 2 ] وتُستخدم FIFO في جدولة أنظمة التشغيل لمنح كل عملية وقتًا لوحدة المعالجة المركزية (CPU) بالترتيب المطلوب. [ 1 ] وتُستخدم FIFO أيضًا لتخزين تدفقات الفيديو والصوت الرقمية مؤقتًا، لتسهيل تبادل بيانات التدفق بين البرامج أو الأجهزة (أو كليهما) التي قد تكون معدلات نقل البيانات فيها غير متوافقة.

برنامج FIFO

تعتمد برمجيات FIFO عادةً على بنية مخزن مؤقت دائري أو قائمة . معظم تطبيقات البرمجيات غير آمنة للاستخدام المتزامن ، وتتطلب آلية تأمين لضمان معالجة سلسلة البيانات بواسطة خيط واحد فقط في كل مرة.

في بيئات الحوسبة التي تدعم نموذج الأنابيب والمرشحات للاتصال بين العمليات ، يعتبر FIFO اسمًا آخر للأنبوب المسمى .

مثال على لغة C++

يوضح الكود التالي تطبيقًا لقائمة مرتبطة باستخدام FIFO في لغة C++ . عمليًا، توجد عدة تطبيقات للقوائم، بما في ذلك وحدات الماكرو sys/queue.h الشائعة في أنظمة Unix، أو قالب std::list في مكتبة C++ القياسية ، مما يُغني عن الحاجة إلى إنشاء بنية البيانات من الصفر.

#include <memory> #include <stdexcept>باستخدام مساحة الاسم std ؛template < typename T > class FIFO { struct Node { T value ; shared_ptr < Node > next = nullptr ;Node ( T _value ) : value ( _value ) {} };shared_ptr <Node> front = nullptr ; shared_ptr <Node> back = nullptr ;public : void enqueue ( T _value ) { if ( front == nullptr ) { front = make_shared <Node> ( _value ) ; back = front ; } else { back- > next = make_shared <Node> ( _value ) ; back = back- > next ; } }T dequeue () { if ( front == nullptr ) throw underflow_error ( "لا يوجد شيء لإخراجه من قائمة الانتظار" );قيمة T = القيمة الأمامية -> القيمة ؛ الأمام = تحريك ( الأمامي -> التالي إرجاع القيمة ؛ } };

نظام إلكتروني FIFO

دائرة متكاملة، 5048 كلمة × 8 بت FIFO ( NEC D485505g-25)

تُستخدم وحدات FIFO الإلكترونية بشكل شائع للتخزين المؤقت والتحكم في التدفق بين الأجهزة المادية أو بين البرامج والأجهزة المادية التي تعمل، على فترات زمنية محدودة، بمعدلات بيانات مختلفة.

تتكون وحدة FIFO من عدادين يعملان كمسجلات عناوين للقراءة والكتابة في الذاكرة، ومصفوفة ذاكرة، ومنطق للتحكم في الحالة. عادةً ما تكون الذاكرة ثنائية المنافذ للسماح بعمليات قراءة وكتابة متزامنة لوحدة FIFO، وتتكون من ملف سجلات أو ذاكرة وصول عشوائي ( RAM) ثنائية المنافذ .

انظر أيضاً

مراجع

  1. 1 2 أندرو س. تانينباوم؛ هربرت بوس (2015). أنظمة التشغيل الحديثة . بيرسون. ISBN 978-0-13-359162-0.
  2. جيمس ف. كوروز؛ كيث و. روس (يوليو 2006). شبكات الحاسوب: منهج من أعلى إلى أسفل . أديسون-ويسلي. ISBN 978-0-321-41849-4.