فلش کنترلر به زبان ساده

فلش کنترلر یا کنترلر فلش مموری بخشی از فلش مموری حالت جامد است که با دستگاه میزبان ارتباط برقرار کرده و دایرکتوری فایل سیستم فلش را مدیریت میکند.

این کنترلر مسئول wear leveling ، تصحیح خطا و پاک کردن خانه های بلااستفاده حافظه در یک فایل است. در زمان انتخاب حافظه SSD با توجه به مصرفی که برای آن در نظر گرفته شده است ، سطح هوشمندی فلش مموری کنترلر یکی از عوامل تاثیر گذار در تصمیم گیری است.

بیشتر بخوانید : SSD چیست ؟

فلش کنترلر ssd

موارد استفاده از فلش کنترلر ها:

فلش کنترلر ها دیتای ذخیره شده روی NORو NAND flash memory را مدیریت می کنند و با کامپیوتر یا وسیله ی مورد نظر ارتباط  برقرار می کنند.

بعد از ساخته شدن یک فلش درایو، کنترلر، فلش مموری را فرمت میکند تا از درست کارکردن دستگاه مطمئن شود. همچنین سلول های فلش را بررسی میکند و تعیین میکند کدام cell های اضافی جایگزین cell های ناکارآمد شوند. بخشی از cell های اضافی نیز دارای نرم افزار دائمی برای کنترلر و دستگاه ذخیره سازی هستند.

وقتی یک دستگاه نیاز به خواندن یا نوشتن فلش دارد، فلش کنترلر وارد عمل می شود. در دستگاه های ساده مانند کارت های SD و USB flash drive ها تنها چند حافظه فلش (Die) می توانند در آن واحد متصل شوند، در نتیجه موجب کاهش سرعت می شود. در SSD های با کارآیی بالا و درجه ی تجاری امکان برقراری صدها ارتباط همزمان (Die) وجود دارد همین امر موجب می شود بارها سریعتر از فلش های معمولی عمل کنند.

SSD های consumer-grade به طور کلی از فلش کنترلرهای generic که  ارزان هستند و انتظار نمیرود چرخه های متناوب P/E) program/erase) را پشتیبانی کنند، ساخته شده اند. SSD های با درجه ی تجاری که باید اپلیکیشنهای write-intensive را پشتیبانی کنند، اغلب کنترلر های اختصاصی دارند که به صورت خاص برای افزایش دوام دستگاه و عملکرد بهترش طراحی شده اند. یک فلش کنترلر تجاری میتواند محدودیتهای NAND-flash را از طریق تکنیک های بسیار پیچیده ی wear-leveling و الگوریتم های پیشرفته ی تصحیح خطا جبران کند.

تعریف wear-leveling و block picking:

فلش میتواند تعداد محدودی از چرخه های write/erase را مدیریت کند. اگر فقط روی یکی از بلوک ها مکررا اصلاعات نوشته شده و پاک شود ( دیگر بلوک ها بدون استفاده باقی بمانند ) موجب می شود دستگاه به سرعت فرسوده شده و بسیار زودتر از زمان مورد انتظار از کار بیفند. برای جلوگیری از این مساله، فلش کنترلر ها به طور مساوی خواندن ها و نوشتن ها را در سراسر بلوک ها در پروسه ای به نام wear leveling توزیع میکنند.

بیشتر بخوانید : Wear Leveling چیست ؟

سه گزینه برای wear-leveling وجود دارد: dynamic، static or global یا بدون wear leveling .

در نوع dynamic wear leveling فلش کنترلر (logical block addressing (LBAs را در فلش فیزیکی شناسایی میکند. این یعنی هربار که یک بلوک بازنویسی می شود، یک آدرس فیزیکی جدید دریافت می کند. دیتا دوباره بازسازی شده و در نتیجه به طول عمر دستگاه اضافه می شود.

Static wear leveling هم مانند نوع داینامیک، LBAs را در محل های فیزیکی ترسیم کرده و دیتا را بازسازی می کند. اما فرقش این است که گاهی بلوک های بدون تغیر را حرکت می دهد و از این طریق آنها نیز مورد استفاده قرار می گیرند. 

سیستم فلش مموری NAND بدون wear leveling  طول عمر کوتاهی خواهد داشت. وقتی یک دستگاه wear leveling ندارد، کنترلرهای فلش مموری باید LBAs دائمی برای ادرسهای فیزیکی فراهم کنند پس هر بلوک برای نوشته شدن باید خوانده، پاک و دوباره نویسی شود. در این روش، بلوک هایی که مکررا نوشته می شوند، دچار مشکل خواهند شد درحالیکه بقیه ی آنها هرگز استفاده نشده اند. وقتی تعدادی از بلوک ها دچار مشکل شوند، کل دستگاه از بین می رود.

هدف FTL و mapping :

(Flash Transition Layer (FTL معمولا درفلش کنترلر ها وجود دارد. FTL لایه ای است که زیر فایل سیستم قرار گرفته و LBAs را به نسبت ادرس های فیزیکی ترسیم می کند.LBA ها میزان مدیریت فایل سیستم را تعیین می کنند و برای یک block ID, page ID و sector ID برنامه ریزی شده اند.

محل فیزیکی LBA میتواند گاهی به عنوان بخشی از wear leveling و تکنیکهای دیگر مدیریت فلش مانند مدیریت bad block و تنظیم فلش در Safe Mode تغییر کند. بخش های mapping از یک FTL نیز میتوانند تغییر کنند بنابراین LBA ها براساس page یا subpage ترسیم می شوند.

نقشه برداری دقیق میتواند میزان فرسوده شدن فلش را کاهش دهد و طول عمر فضای ذخیره سازی فلش را بیشتر کند.

وقتی هرکدام از بلوکهای یک SSD یکبار نوشته شده اند، فلش کنترلر باید بلوک های باقی مانده یا آنهایی که دیتای قدیمی دارند را در پروسه ای به نام garbage collection بازگرداند. تمام دستگاه های فلش دارای نوعی از garbage collection هستند اما سرعت آن بر اساس فلش کنترلر متفاوت است.