Over the past few decades, electronic devices and computing systems have evolved from being rigid, complex and inflexible, to becoming highly dynamic, and responsive. While these properties have the potential to make them user friendly and human centric, they also bring about inherent drawbacks, such as user interruptions caused by a variery of system generated events. In general, interruptions cannot be eliminated and hence need to be handled since they are essential for activities such as interaction, event notification, automation, and so on. This paper discusses the fundamentals of system generated interruption and presents a comprehensive taxonomy that incorporates past and current works on interruption handling techniques and solutions. The paper also proposes a methodology and design process for the developing of interruption aware systems that are based on the use of knowledge gathered from users' preferences, surroundings and situations via information elicitation. These incorporate user based design techniques, learning mechanisms, and preference elicitation methods in order to develop models that accurately take context, user's preferences/profiles and situations into account while designing for interruption awareness.