2012-06-18 19 views
8

Quiero modificar el kernel de Linux para que cada vez que el PID actual cambie, es decir, se inicie un nuevo proceso, se ejecute algún código de diagnóstico (explicación detallada a continuación, si es curioso). Investigué un poco, y parece que cada vez que el planificador elige un nuevo proceso, se llama a la función context_switch(), lo que tiene sentido (esto es solo un análisis superficial de sched.c/schedule()).¿Se garantiza que invocar kernel/sched.c/context_switch() cada vez que se conecta un proceso?

El problema es que el programador de Linux es básicamente magia negra para mí en este momento, por lo que me gustaría saber si esa suposición es correcta. ¿Está garantizado que, cada vez que se selecciona un nuevo proceso para tener algo de tiempo en la CPU, se llama a la función context_switch()? ¿O hay otros lugares en la fuente del núcleo donde la programación podría ser manejada en otras situaciones? (¿O estoy totalmente mal entendiendo todo esto?)

Para dar un poco de contexto, estoy trabajando con el simulador MARSS x86 tratando de hacer algo de instrumentación y medición de ciertos programas. El problema es que mi instrumentación necesita saber a qué proceso de ejecución corresponden ciertos eventos de código, para evitar malinterpretar los datos. La idea es usar algunos sistemas integrados de paso de mensajes en MARSS para pasar el PID del nuevo proceso en cada cambio de contexto, para que siempre sepa qué PID está actualmente en ejecución. Si alguien puede pensar en una forma más sencilla de lograr eso, también sería muy apreciado.

Respuesta

4

Sí, tiene razón.

El schedule() llamará al context_switch() que es responsable de cambiar de una tarea a otra cuando el nuevo proceso ha sido seleccionado por schedule().

context_switch() básicamente hace dos cosas. Llama a switch_mm() y switch_to().

switch_mm() - interruptor a la asignación de memoria virtual para el nuevo proceso

switch_to() - cambiar el estado del procesador del proceso anterior al nuevo proceso (guardar/restaurar los registros, pila de información y otra arquitectura cosas específicas)

En cuanto a su enfoque, creo que está bien. Es importante mantener las cosas limpias y agradables cuando trabaje con el núcleo, y tratar de mantenerlo relativamente fácil hasta que obtenga más conocimiento.

Cuestiones relacionadas