El scheduler es parte del sistema operativo por lo que normalmente adquiere la cpu luego de una interrupción. Este cambio de contexto entre el proceso que está corriendo y el manejador de interrupciones lo hace el hardware.
Tampoco es cierto que toda ejecución del scheduler termine en un cambio de contexto. Un caso obvio es si hay un solo proceso en el sistema.