NAND flash memory (hereafter, flash memory) has been intensively employed in a wide spectrum of computing systems from mobile devices like smartphones to personal computers to enterprise servers due to its high performance, low power consumption, and shock resistance. However, the further deployment of flash memory is impeded because it also possesses several inherent disadvantages such as limited programming/erase cycles and asymmetrical I/O performance. Besides, the existing frameworks for storage systems are originally designed for block devices (e.g., hard disk drives), which have totally different characteristics from flash memory. In order to utilize flash memory in current storage systems, an extra software layer between a traditional storage system interface and flash memory is needed to mimic the behavior of a block device. Unfortunately, using a flash-based storage system as a traditional HDD noticeably neutralizes the benefits of flash memory. In this dissertation, we holistically examine current flash-based storage systems in different computing platforms ranging from embedded systems to enterprise servers. Firstly, we empirically characterize a representative collection of flash memory devices and then model their raw I/O performance and reliability. Our results demonstrate that flash memory performance and reliability are correlated to programmed data patterns. Further, we propose multiple approaches to improving the performance and reliability of flash-based storage systems at device level. Secondly, we study flash translation layer (FTL) in flash-based solid-state drives (SSDs) for desktops. A plane-centric FTL and a workload-aware MLC/SLC (multi-level cell/single-level cell) partitioning scheme are implemented to boost the performance of a single SSD. Thirdly, the employment of SSD arrays in enterprise servers is investigated. We propose a load-balancing scheme at disk array level to prolong the lifetime of SSD arrays for server applications like OLTP (online transaction processing). Finally, and MTD (memory technology device) array based storage framework will be developed to meet the performance and reliability requirements demanded by emerging and future data-intensive and mission-critical mobile applications.