현재 PID가 변경 될 때마다 (즉, 새 프로세스가 전환 될 때마다) 일부 진단 코드가 실행되도록 Linux 커널을 변경하려고합니다 (호기심이있는 경우 자세한 설명이 아래에 나와 있습니다). 나는 약간 파고 들었고, 스케쥴러가 새로운 프로세스를 선택할 때마다 함수 context_switch()
이 호출되었다. 이것은 의미가있다. (이것은 단지 sched.c/schedule()
의 간단한 분석에서 나온 것임).커널/sched.c/context_switch()는 프로세스가 전환 될 때마다 호출되도록 보장됩니까?
문제는 Linux 스케쥴러가 기본적으로 나에게 마법의 마법이된다는 것입니다. 그래서 전제가 맞는지 알고 싶습니다. 새로운 프로세스가 CPU에서 시간을 갖기 위해 선택 될 때마다 context_switch() 함수가 호출됩니다. 아니면 다른 상황에서 스케줄링을 처리 할 수있는 커널 소스의 다른 장소가 있습니까? (아니면이 모든 것을 완전히 오해하고 있습니까?)
MARSS x86 시뮬레이터를 사용하여 특정 프로그램의 계측 및 측정을 시도하고 있습니다. 문제는 데이터를 잘못 해석하는 것을 피하기 위해 특정 계측기가 특정 코드 이벤트가 실행되는 프로세스를 파악해야한다는 것입니다. 아이디어는 MARSS에 내장 된 메시지 전달 시스템을 사용하여 모든 컨텍스트 전환에 대해 새 프로세스의 PID를 전달하므로 현재 실행중인 PID를 항상 알고 있습니다. 누구나 쉽게 달성 할 수있는 간단한 방법을 생각할 수 있다면 크게 도움이 될 것입니다.