/proc 파일 시스템과 같은 다른 인터페이스가 있습니까?
답변1
Linux 커널 시스템 호출 API는 기본 API이며(libc 아래 숨겨져 있고 프로그래머가 직접 사용하는 경우는 거의 없음) 대부분의 표준 IPC 메커니즘은 Linux 커널 시스템 호출 API에 크게 편향되어 있습니다.모든 것이 파일이다궁극적으로 읽기/쓰기(및 그 이상) 호출이 필요하므로 여기서는 제거합니다.
그러나 대부분의 플랫폼에는(모든 시스템 호출을 제외하는 경우) 다음과 같은 방법이 있습니다.VDSO. 이는 커널이 하나 이상의 약간 마법적인 페이지를 각 프로세스에 매핑하는 메커니즘입니다(일반적으로 ELF .so 형식). or 와 유사 linux-vdso.so
하다고 생각하시면 됩니다 . 이는 커널과 사용자 프로세스 간의 효과적인 메모리 매핑 IPC입니다(현재 구현에서는 단방향이지만).ldd
/proc/PID/maps
시스템 호출 속도를 높이는 데 자주 사용되며 원래 구현되었습니다(linux-gate.so
) x86 성능 문제를 해결하기 위해 사용되었지만 커널 데이터 및 액세스 기능이 포함될 수도 있습니다. 이와 같은 호출은 getcpu()
대신 gettimeofday()
다음을 사용하여 할 수 있습니다 .실제시스템 호출 및 커널 컨텍스트 스위치. 이러한 최적화 호출의 가용성은 glibc 시작 코드에 의해 감지되고 활성화됩니다(플랫폼 가용성에 따라 다름). 현재 구현에는 직접 읽을 수 있는 "VVAR" 페이지라고 하는 공유 커널 변수의 (읽기 전용) 페이지가 포함되어 있습니다.
명령의 출력을 확인하여 명령이 작동 중인 VDSO를 사용하여 수행하지 않는 시스템 호출을 수행하는지 strace -e trace=clock_gettime date
확인할 수 있습니다 . 시간은 VDSO 페이지의 함수에 의해 VVARS 페이지에서 읽혀집니다.date
clock_gettime()
arch/x86/vdso/vclock_gettime.c
).
다음은 유용한 기술 요약입니다.http://blog.tinola.com/?e=5더 자세한 튜토리얼:http://www.linuxjournal.com/content/creating-vdso-colonels-other-chicken및 매뉴얼 페이지:http://man7.org/linux/man-pages/man7/vdso.7.html
답변2
아니요.
간단한 카운터 예는 커널과 상호 작용합니다.
int main() {
volatile char *silly = 0;
*silly = 'a';
}
SIGSEGV
그러면 커널의 페이지 오류 핸들러가 호출되어 궁극적으로 프로세스가 컴파일되고 -O0
)