Buenas, no me quedó del todo claro tu pregunta, pero intento responder algo
Primero recordar que todo proceso tiene un hilo de ejecución, que es visto como un CPU virtual. Un hilo es una unidad básica de utilización de la CPU.
Dicho esto, P1 tiene su hilo principal (nombrado p1h1) que es quién ejecuta fork() y crea otro proceso con su hilo principal de ejecución p2h1. Si mirás la definición de fork y como se hace para, en un mismo código, diferenciar que ejecuta cada proceso, vas a ver que depende del retorno.
Por lo tanto, el proceso que encuentre la variable pid = 0 (proceso hijo P2h1), va a ejecutar lo de adentro del if y el p1h1 lo del else. Dentro del else, p1h1 va a ejecutar dos operaciones que crean hilos. Cada hilo creado (p1h2 y p1h3) ejecuta el mismo código (el definido en proc1).
Por último, el modelo Mx1 lo que refleja es como son vistos los hilos de los procesos a nivel del SO. En este caso, el planificador a nivel de SO va a ver un proceso P1 (un hilo de kernel) y otro P2 (un hilo de kernel). Lo que pase a nivel de los hilos, pasa a nivel de usuario. En este caso se define otro planificador, que va a planificar los hilos de cada proceso y va a tener efecto cuando ese proceso tenga asignada la CPU.
Saludos,
Leonardo