Является ядром/sched.c/context_switch() гарантированно будет вызываться каждый раз при включении процесса?

Я хочу изменить ядро ​​Linux, чтобы каждый раз при изменении текущего PID, т. е. при включении нового процесса, выполнялся некоторый диагностический код (подробное объяснение ниже, если любопытно). Я немного покопался, и кажется, что каждый раз, когда планировщик выбирает новый процесс, вызывается функция context_switch() , что имеет смысл (это только из беглого анализа sched. c/расписание()).

Проблема в том, что планировщик Linux сейчас для меня практически черная магия, поэтому я хотел бы знать, верно ли это предположение. Гарантируется ли, что каждый раз, когда выбирается новый процесс, чтобы получить некоторое время на ЦП, вызывается функция context_switch()? Или есть другие места в исходниках ядра, где планирование могло бы обрабатываться в других ситуациях? (Или я все это неправильно понимаю?)

Чтобы дать некоторый контекст, я работаю с симулятором MARSS x86, пытаясь провести некоторые измерения и измерения некоторых программ. Проблема в том, что мой инструментарий должен знать, какому процессу выполнения соответствуют определенные события кода, чтобы избежать неправильной интерпретации данных.Идея состоит в том, чтобы использовать некоторые встроенные в MARSS системы передачи сообщений для передачи PID нового процесса при каждом переключении контекста, чтобы он всегда знал, какой PID выполняется в данный момент. Если кто-то может придумать более простой способ сделать это, это также будет очень признательно.

9
задан Kevin Bedell 17 June 2012 в 20:59
поделиться