computing device a digital camera a mobile phone or any other suitable host system that stores data host 24 sends data for storage to device 20 and retrieves data that is stored in the storage device storage device 20 comprises a memory 28 in the present example comprising a flash memory device in alternative embodiments however memory 28 may comprise any other suitable type of volatile or non volatile memory device 20 comprises a controller 30 which manages and controls the operation of the storage device in particular controller 30 receives data for storage from host 24 processes the data and stores it in memory 28 in the opposite direction the controller reads data from memory 28 processes the data and forwards it to host 24 controller 30 comprises a central processing unit cpu 44 which runs program code that is cached in a random access memory ram 48 the program code is sometimes referred to as firmware or software and all of these terms are used interchangeably herein the program code run by cpu 44 is stored in memory 28 when the controller initializes the cpu boots from memory 28 i e retrieves the desired code from memory 28 and executes it typically the controller comprises a relatively small boot kernel stored in read only memory rom which carries out the retrieval process whereas the vast majority of the program code is stored in memory 28 in some embodiments the controller reads program code from memory 28 at run time as well in these embodiments the overall size of the program code used by cpu 44 and the size of memory 28 is much larger than the size of ram 48 at any given moment.