As a result of the rapidly increasing requirements for computing capability, multicore systems are more and more widely used. However, the performance of multicore systems does not always increase linearly with the number of processing cores. Many practical factors are limiting the speed of a multicore system, e.g. inter-core communication overhead and finite parallelism within applications. The scheduling of an application decides the parallel execution of the application on a multicore system, which significantly determines the performance of the application. Many multimedia applications and digital signal processing applications share the same property that these applications need to be executed iteratively to process a continuous input data stream. To describe the unique property of these applications, a dataflow model named synchronous dataflow graph (SDFG) is used. Different from commonly used models such as the well-known directed acyclic graph (DAG), the SDFG model is able to describe the inter-iteration dependencies and the multi-rate nature of streaming applications. Accordingly, SDFGs require dedicated scheduling approaches other than the well-developed scheduling approaches for DAGs. In this thesis, a memory-aware synchronous dataflow graph scheduling framework is presented, where two significant criteria, data processing speed and the size of memory usage, of streaming applications are optimized. Effective algorithms used in the three key steps of the framework are given, including buffer minimization algorithms, communication-aware scheduling algorithms, and code-size-aware mapping algorithms. Experimental results show that the proposed algorithms outperform existing algorithms in terms of throughput and memory usage in most cases.