Scheduling a large number of high performance computing applications on a cluster-computing environment is a complex task. This becomes more critical in real time systems. Efficient scheduling strategies are critically important to achieving good performance. A cluster scheduler without enough knowledge of the state of the cluster and the scheduled tasks cannot adequately manage the cluster resources. Accordingly, the available processing power of the participating nodes may experience uncontrolled fragmentation. Thus, some of the submitted applications may be rejected due to tasks missing their deadlines. The literature on scheduling real-time task graphs is much less extensive, especially for providing timing guarantees while maximizing the processing power utilization. In this paper, we present a framework for allocating and scheduling real-time applications represented as parallel task graphs on a cluster. We utilize the available processing power on each processor to accommodate as many tasks as possible while satisfying the required deadline of each task. The algorithm also reduces the communication cost among tasks and the possibility of processing power fragmentation.