저는 인터럽트를 사용하는 "기존" 시스템 호출 메커니즘과 특정 프로세서 명령에 의존하는 현재 시스템 호출 메커니즘 간의 차이점을 이해하려고 노력하고 있습니다.
AFAIK 둘 다 C 프로그램 측면에서 동일한 방식으로 작동합니다. 커널 C 함수가 호출된 다음 올바른 시스템 호출 처리기로 전달됩니다. 그렇다면 "새로운" 시스템 호출 시스템을 더욱 효율적으로 만드는 것은 무엇일까요?
단지 더 효율적인 프로세서 명령어가 "인터럽트"보다 "시스템 호출"을 더 빠르게 호출하는 것일까요? 이 시간 차이는 시스템 호출 자체가 수행해야 하는 작업량(예: 파일 쓰기)에 비해 충분히 중요합니까?
답변1
훨씬 적은 작업을 수행해야 하고 메모리에서 읽을 필요가 없기 때문에 더 빠릅니다.
소프트웨어 인터럽트를 사용하여 시스템 호출을 발행하면 CPU는알다이것이 당신이 하고 있는 일입니다. 인터럽트 설명자 테이블에서 대상 CS 및 EIP 값을 읽어야 합니다. CS 값은 대상 권한 수준이 무엇인지 지정합니다. CPU가 이를 파악한 후에는 메모리에서 더 많은 데이터를 읽어야 하는 대상 상태를 결정해야 합니다.
SYSCALL
다른 쪽은 완전히 레지스터 기반입니다. 대상 권한 수준은 미리 알려져 있으며 대상 상태는 커널에 의해 설정된 MSR에 의해 지정됩니다.
일부 시스템 호출 시간에 비해 속도 차이는 작지만 빠른 시스템 호출이 많습니다. 물론 전체 KPTI 비즈니스는 모든 시스템 호출이 느리다는 것을 의미하지만 속도 향상은 SYSCALL
여전히 가치가 있습니다.