Abstract: Flash-memory storage systems play an important role in embedded systems and are widely adopted in various application domains such as consumer electronics, robotics, and aviation. In recent years, the flash-based solid-state drive (SSD) has become a popular candidate for the replacement of hard disk drives. Enterprises are also designing new storage systems with flash memory as the cache system or main-storage system to reduce the energy consumption and improve the performance/reliability of their data centers. However, due to the advances of manufacturing technologies, reliability and performance have become critical issues of flash-based storage systems. In this talk, we will talk about how to solve these issues in different layers of the software stack. For the performance issue, a driver-layer caching algorithm and a file-system-aware flash-translation-layer design will be introduced to show how to improve the performance of flash-memory storage systems. For the reliability issue, we will talk about how to improve the endurance of flash memory with a static wear leveling design. Meanwhile, a commitment-based management strategy will be presented to manage low-cost flash-memory chips with the considerations of the scalability and bad block issues.