Archive for August, 2009

Explanation of a Flash chip’s storage management routine

Saturday, August 8th, 2009

Hats off to Louis Gerbarg on his excellent write-up of how a Flash chip manages reads, writes, and most interestingly – deletes.  I have a relatively comprehensive understanding of how file systems work from classes back at CMU.  But back when I was taking those classes, Flash storage was basically non-existent in a file system context.  This post is definitely eye-opening and if you’re at all interested in how this stuff works, I highly recommend checking it out.  Here’s a quote that’ll get you interested in this stuff:

Okay, so lets assume for a second we have a 1MB flash device with 2 512KB blocks. This would be sold to the consumer as a 512KB flash drive, because some amount of the internal storage needs to be used for bookkeeping as we shall see.

And another quote:

Flash is a relatively complicated storage medium, and has its own view of the world. It works in terms of pages and blocks. Usually a page is the smallest amount of space you can reasonably read or write to a a flash chip (for our discussion, 4K), and a block is the smallest chunk of space you can erase at a time (for our discussion 128 blocks). With a fresh (unwritten block) all the bits are set to “1″, and during a write they can only be transition to “0.” That means in order to rewrite a page you must erase it first. This is a super important point, you can’t just go and erase a page of the flash, you need to erase the 128 contiguous pages contained in a whole block at a the same time.

And I thought tuning a filesystem to provide the best contiguous access to large files was interesting.  By comparison Flash garbage collection and bookkeeping algorithms must be fascinating.  In any case, I guess I’m just a little nostalgic reminiscing about CMU’s 15-412 Operating Systems course.