طبقة ترجمة فلاش بسيطة تقوم بإعادة تتبع يحتوي على عناوين كتلة وعملية قراءة/كتابة.
5188 READ
5208 READ
6164 READ
5236 READ
5276 READ
1024 WRITE
16 WRITE
16384 WRITE
إذا لم يتم تحديد العملية (قراءة/كتابة) ، فإن عملية الكتابة الافتراضية هي عملية الكتابة.
primary_logical_block recovery_logical_block degree_of_loss
مثال - بالنسبة لـ Ext4 ، يمكن أن تكون الكتلة الأساسية عبارة عن inode مكتوبة على القرص. ستكون الكتلة الثانوية هي المجلة المكتوبة إليها التي يتم استرداد الكتلة الأولية منها في حالة الفشل.
هناك ثلاثة أنواع من طبقات FTL التي يمكن محاكاة:
مستوى الصفحة FTL
يرسم مستوى الصفحة FTL صفحة منطقية مباشرة إلى صفحة فعلية. في حالة حدوث كتابة فوق رقم صفحة منطقية ، يتم تمييز الصفحة الفعلية القديمة. يتم توفير صفحة فعلية جديدة إلى رقم الصفحة المنطقية. يتم تحديث LTOPMAP لتعكس الصفحة المحدثة. يتم تحديث blockstat من الكتلة القديمة والجديدة لتعكس عدد الصفحات غير الصالحة الجديدة.
كتلة مستوى FTL
يتم تعيين كتلة منطقية كاملة إلى كتلة مادية. في حالة حدوث كتاب فوق رقم صفحة منطقية ، يتم إبطال الكتلة بأكملها ، يتم نسخ جميع الإدخالات في الكتلة القديمة إلى كتلة جديدة. الخريطة تحتوي فقط على رسم الخرائط المنطقية إلى الكتلة المادية.
مستوى الهجين FTL
تخزين LBN إلى قيم PBN ، ولكن في الكتابة فوق رقم صفحة منطقية ، يتم النظر إلى الكتلة الفعلية الجديدة في الإدخال المجاني التالي لموقع الكتلة نفسه. يتم تخزين رسم خرائط رقم الكتلة المنطقي إلى كل blockstat. يتم إبطال الكتلة بأكملها عندما لا يكون هناك مساحة إضافية لكتابة أي كتل إضافية على الكتلة.
getNextPhysicalPage()map(lbn, pbn)getFreeBlock()getTargetBlock()GC(X)يتبع الرمز سياسة جمع القمامة الجشع .
تتم مجموعة القمامة افتراضيًا بعد استخدام GC_COUNT ٪ من الكتل المادية في نظام الملفات. يتضمن مجموعة Garbage اختيار الكتلة التي تحتوي على أكبر عدد من الصفحات غير الصالحة ، واختيار كتلة الوجهة / كتلة تجمع مجانية ، ونقل صفحات صالحة من كتلة المصدر إلى كتلة الوجهة. يمكن الآن إعادة استخدام الصفحات المادية في كتلة المصدر أثناء التعيين.
Invoke GC
Choose Victim block (blk.gc_count < curr_gc_count)
if not found; exit
Choose empty block (blk.gc_count < curr_gc_count)
if not found; check for Merge Block (explained below)
Move valid from Victim -> Empty
Mark Empty -> Valid
Mark Victim -> Empty
Update GC count of both blocks to curr_gc_count.
Continue.
كتلة الدمج عبارة عن كتلة ليست فارغة تمامًا ، ولكن لديها مساحة للحفاظ على جميع إدخالات الكتلة القذرة. في حالة عدم العثور على كتلة فارغة ، نختار كتلة دمج ، وإبطال كل دخولها ثم إعادة كتابة القيم مرة أخرى في الكتلة ، إلى جانب جميع إدخالات الكتلة القذرة .
./ftl.py 1 8 512 128 traces/page_GC and traces/block_GC
يجب أن ينشئ هذا جهازًا من 6 كتل و 8 صفحات وتشغيل تتبع سيكون له في النهاية 11-17 كتل في رقم الكتلة 0.
./ftl.py 2 4 512 128 traces/block_GC
./ftl.py 1 8 512 128 traces/block_map