เลเยอร์การแปลแฟลชแบบง่าย ๆ ที่ถ่ายทอดร่องรอยที่มีที่อยู่บล็อกและการดำเนินการอ่าน/เขียน
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 ได้รับการอัปเดตเพื่อสะท้อนหน้าที่อัปเดต บล็อกของบล็อกเก่าและใหม่ได้รับการอัปเดตเพื่อสะท้อนจำนวนหน้าเว็บที่ไม่ถูกต้องใหม่
ระดับบล็อก FTL
บล็อกลอจิคัลทั้งหมดถูกแมปกับบล็อกทางกายภาพ หากการเขียนทับไปยังหมายเลขหน้าแบบลอจิคัลเกิดขึ้นบล็อกทั้งหมดจะไม่ถูกต้องรายการทั้งหมดในบล็อกเก่าจะถูกคัดลอกไปยังบล็อกใหม่ MAP มีเพียงการแมปบล็อกทางกายภาพเท่านั้น
FTL ระดับไฮบริด
จัดเก็บค่า LBN ถึง PBN แต่บนการเขียนทับไปยังหมายเลขหน้าแบบลอจิคัลบล็อกฟิสิคัลใหม่จะถูกค้นหาในรายการฟรีถัดไปของตำแหน่งบล็อกเดียวกัน การแมปหมายเลขบล็อกแบบลอจิคัลไปยังฟิสิคัลจะถูกเก็บไว้ในแต่ละ blockstat การทำให้เป็นโมฆะของบล็อกทั้งหมดจะทำเมื่อไม่มีพื้นที่อีกต่อไปในการเขียนบล็อกเพิ่มเติมใด ๆ ในบล็อก
getNextPhysicalPage()map(lbn, pbn)getFreeBlock()getTargetBlock()GC(X)รหัสดังต่อไปนี้นโยบายการรวบรวมขยะ โลภ
การรวบรวมขยะจะทำโดยค่าเริ่มต้นหลังจากใช้ GC_Count% ของบล็อกทางกายภาพในระบบไฟล์ การรวบรวมขยะเกี่ยวข้องกับการเลือกบล็อกที่มีจำนวนหน้าเว็บที่ไม่ถูกต้องมากที่สุดเลือกบล็อกปลายทาง / บล็อกสระน้ำฟรีการถ่ายโอนหน้าเว็บที่ถูกต้องจากบล็อกต้นทางไปยังบล็อกปลายทาง หน้าทางกายภาพในบล็อกต้นทางสามารถนำกลับมาใช้ใหม่ได้ในระหว่างการทำแผนที่
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