2012-01-24 9 views
5

Друзья, я пытаюсь отслеживать полное выполнение операционной системы, включая процессы, выполняющиеся поверх нее. Для этого я хочу, чтобы инструкции выполнялись каждым процессом и его трассировкой выполнения, и я хочу сделать это без необходимости запускать objdump каждого процесса.pid текущего процесса

Мои цели таковы:
1) Адрес адресного пространства каждого pid.
2) Отслеживание выполнения каждого pid.

Для выполнения вышеуказанных целей, я запускаю операционную систему на основе Linux на эмуляторе Qemu.

Когда qemu встречает инструкцию в первый раз, я проверю pid процесса, выполняющего эту инструкцию, используя io-port или известный физический адрес памяти в гостевой системе. Затем я могу использовать эту информацию, чтобы делать то, что я хочу.

Моя проблема: где в ядре/sched.c можно узнать pid процесса, который будет запущен следующим образом. Значит, я не могу вычислить вызов функции вроде -> launch_process (pid). Если кто-то, пожалуйста, укажите мне это место в ядре. Или есть известное место в системе, где мы можем отслеживать адресное пространство. Один из них - CR3, но я действительно не могу ему доверять.

Для некоторых парней это может показаться тривиальным указателем на это место, но я не могу найти это место самостоятельно.

ответ

3

Каждый процесс имеет соответствующий struct task_struct. Вы можете использовать функции find_task_by_*(), чтобы найти struct task_struct от PID или task_pid_*(), чтобы получить PID данной задачи. См. Также «Что такое struct pid?» раздел в include/linux/pid.h.

Выполнение задач в режиме ожидания каждого процессора: см. struct rq определение в kernel/sched.c.

Функции try_to_wake_up(), wake_up_process(), wake_up_new_task(), context_switch() и другие также связаны с вашей задачей.

+0

@droid thanks ... context_switch - это функция, в которой pid процесса, выполняющего изменения. Здесь я намереваюсь поместить код с помощью task_struct next. Есть ли другая точка входа для изменения pid ?? Будет ли этот метод работать и для системы smp? –

+0

Я не так хорошо знаком с ядром, чтобы точно ответить на другие подобные точки входа. Что касается SMP - я думаю, все должно быть в порядке. –

Смежные вопросы