Existem várias abordagens para esse problema.
Agendadores de multitarefa cooperativos
Um programador cooperativo é invocado toda vez que um programa o invoca ou o rende controle a ele. coopera com o sistema operacional e outros programas em execução. Um programa que nunca cede, e. g. um processo "suspenso", nunca deixará o estado de execução em uma máquina com uma única CPU.
Agendador de Multitarefa Preemptiva
Um agendador preemptivo muito simples é invocado periodicamente por uma interrupção de CPU cronometrada. Um programa não pode evitar isso (sem privilégios no nível do sistema) e deixará o estado em execução porque a CPU reposiciona o ponteiro de instrução durante as interrupções.
Sugiro que leia o artigo da Wikipedia sobre multitarefa .