2012-04-29 2 views
0

강사는 지난 주 Linux에서 인터럽트를 처리하는 데 대해 특히 do_IRQ 기능을 설명했습니다. 왜 do_IRQ 함수가 스택 대신 레지스터에서 매개 변수를 읽는 지 궁금했습니다. 그러나 강사는 또한이 이유를 알지 못했습니다. 이제 do_IRQ와 같은 커널 함수가 왜 스택 대신 레지스터에서 필요한 매개 변수를 읽는 지 궁금합니다. 나는 그것을 봤지만 단지 함수를 레지스터 또는 스택에서 자신의 매개 변수를 읽을 수 있지만 이유는 발견.스택에서가 아니라 레지스터에서 매개 변수를 읽는 것

+0

"호출 규칙"에 대해 Google이 있으십시오. – blueshift

+0

호출 규칙과 IRQ 함수에 대한 레지스터 스택 프레임의 가용성 사이에 혼란이있을 수 있습니까? – stsquad

답변

0

커널 2.6부터 모든 커널 함수는 스택이 아닌 레지스터를 사용하여 처음 세 개의 매개 변수 (x86_64에서 6)를 전달합니다.
고대 2.4 커널에서는 do_IRQ과 같이 몇 가지 성능에 중요한 기능 만이 작동합니다. 강사가 2.4 커널에 대해 가르쳐 줍니까?!

레지스터에 매개 변수를 전달하면 성능이 향상됩니다.
메모리에 비해 (L1 캐시에 있더라도) 레지스터를 읽고 쓰는 것이 훨씬 빠릅니다.

모든 경우에있어 호출자와 수신자가 매개 변수 전달 방법에 대해 매우 중요합니다.
함수가 비표준 메서드를 사용하면 컴파일러 특성으로 표시됩니다.
이 속성은 컴파일러에게 두 가지를 알려줍니다. 함수 자체를 컴파일 할 때 매개 변수가 예상되는 위치를 알고 있고 호출을 컴파일 할 때 매개 변수를 넣을 위치를 알고 있습니다.

관련 문제