srez пишет:Кста, а расскажите, как программы для мультипроцессорных систем делают?
Примерно так.
Пишут функции, которые могут работать параллельно. Например, для обработки какой-то здоровенной матрицы.
Потом процесс создает потомков при помощи системной функции fork (в юниксах) или запускается несколько нитей (threads) процесса, причем каждая на своем процессоре. В качестве параметра дочерним процессам или нитям передается область матрицы, которую нужно обработать.
Вот функции и начинают обрабатывать матрицу одновременно с разных сторон. 
Функции могут общаться по-разному: через общую область памяти, через сокеты или там семафоры какие-нибудь.
Технически все не так сложно. Трудности заключаются в самом распараллеливании задачи.