стопка ядра для процесса Linux

Это сложно. Я пробовал Xcode и Eclipse с автономным приложением C ++, но было очень трудно заставить работать все заголовки и библиотеки. Кроме того, код RcppExport вызывает вашу настоящую функцию R через указатель, который, кажется, действительно запутывает Xcode, и я не мог войти в свою функцию.

Я закончил с (gdb или lldb): В R: R -d lldb В отладчике установите точку останова: b functionName run В R: .Call(etc) # or just call your R code which invokes compiled C/C++ code Затем, когда произойдет разрыв, вернитесь в отладчик, вы можете шагать, исследовать кадры и т. Д. .

Этот краткий справочник по команде lldb / gdb очень помог.

Забудьте о попытке сделать это в графическом интерфейсе. Надеюсь, Rstudio это сделает.

22
задан suresh 20 May 2009 в 14:46
поделиться

3 ответа

Имеется только одна общая память ядра. В нем у каждого процесса есть свой task_struct + стек ядра (по умолчанию 8K).

При переключении контекста где-то сохраняется старый указатель стека, а фактический указатель стека заставляется указывать на верх стека (или низ в зависимости от архитектуры оборудования) нового процесса, который будет запущен.

19
ответ дан 29 November 2019 в 05:07
поделиться

В этой старой статье говорится, что каждый процесс имеет свой собственный стек ядра. См. Комментарии к тому, почему это кажется очень хорошим дизайном.

Я попытался прочитать текущий исходный код , чтобы убедиться, но поскольку стек ядра «неявный», он не отображается в task_struct . Об этом упоминается в статье.

Этот ответ был отредактирован, чтобы учесть мудрость из комментариев. Спасибо.

12
ответ дан 29 November 2019 в 05:07
поделиться

В книге Роберта Лава «Разработка ядра Linux» есть хорошее объяснение стека ядра процесса.

И да, каждый процесс имеет свой собственный стек ядра, и, если я не ошибаюсь, его указатель хранится в структуре thread_info. Но я не совсем уверен в этом, а struct task_struct хранится в начале или в конце стека ядра процесса, в зависимости от архитектуры процессора.

Ура. Карлос Майолино

2
ответ дан 29 November 2019 в 05:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: