As disk arrays become widely used, tools for modeling and analyzing the performance of disk arrays become increasingly important. In particular, accurate performance models and systematic analysis techniques, combined with a thorough understanding of the expected workload, are invaluable in both configuring and designing disk arrays. Unfortunately, disk arrays, like many parallel systems, are difficult to model and analyze because of queueing and fork-join synchronization. In this dissertation, we present an analytic performance model for non-redundant disk arrays and a new technique based on utilization profiles for analyzing the performance of redundant disk arrays. In both cases, we provide applications of our work. We use the analytic model to derive an equation for the optimal size of data striping in disk arrays, and we apply utilization profiles to analyze the performance of RAID-II, our second disk array prototype. The results of the analysis are used to answer several performance related questions about RAID-II and to compare the performance of RAID-II to RAID-I, our first disk array prototype.