시스템 호출이 실제로 하드웨어 인터럽트처럼 CPU를 "중단"합니까?

시스템 호출이 실제로 하드웨어 인터럽트처럼 CPU를 "중단"합니까?

나는 시스템 호출과 하드웨어 인터럽트가 어떻게 구현되는지 더 깊이 이해하려고 노력하고 있지만, 나를 계속 혼란스럽게 만드는 것은 처리 방법이 어떻게 다른지입니다. 예를 들어, (적어도 과거에는) 시스템 호출을 시작하는 한 가지 방법이 x86 INT 0x80명령어를 통해서였다는 것을 알고 있습니다.

  1. 프로세서는 하드웨어 주변 장치가 CPU를 인터럽트하는 것과 정확히 동일한 방식으로 이를 처리합니까? 그렇지 않다면 어떤 점에서 차이가 나는 걸까요? 내 이해는 둘 다 IDT를 색인화하고 벡터의 색인만 다르다는 것입니다.

  2. 같은 의미에서 처리의 "하위 절반"을 처리한다는 아이디어가 있다고 이해 softirq하지만 물리적 하드웨어 인터럽트 대기열을 통해 실행되는 것을 말하는 이러한 형태의 "소프트웨어 인터럽트"만 보았습니다. 시스템 호출 "소프트웨어 인터럽트"도 softirq처리를 위해 트리거됩니까? 사람들이 시스템 호출을 "소프트웨어 인터럽트"라고 부르기도 하지만 softirq"소프트웨어 인터럽트"라고도 부르기 도 하기 때문에 이 용어는 나를 약간 혼란스럽게 합니다 .

답변1

INT 0x80h커널 서비스(시스템 기능)를 호출하는 오래된 방법입니다. 현재 syscalls이러한 서비스는 인터럽트 호출보다 빠르기 때문에 호출하는 데 사용됩니다. 이것을 확인할 수 있습니다매핑커널의 인터럽트 설명자 테이블에서idt.c그리고 50번째 줄에irq_Vectors.h문서.

귀하의 질문에 대답하는 중요한 점은 인터럽트 요청(IRQ)이 어떻게 구성되어 있는지 확인할 수 있는 마지막 파일의 헤더라고 생각합니다.

 This is the general layout of the IDT entries: 
   Vectors   0 ...  31 : system traps and exceptions - hardcoded events
   Vectors  32 ... 127 : device interrupts
   Vector  128         : legacy int80 syscall interface
   Vectors 129 ... INVALIDATE_TLB_VECTOR_START-1 except 204 : device interrupts
   Vectors INVALIDATE_TLB_VECTOR_START ... 255 : special interrupts

전기적이든 소프트웨어적이든 상관없습니다. 인터럽트가 트리거될 때마다 커널은 IDT에서 해당 ID를 조회하고 관련 인터럽트를 커널 모드에서 실행합니다.인터럽트 핸들러. 매우 빨라야 하기 때문에 일반적으로 나중에 softirqa 또는 a에서 처리할 일부 정보를 설정합니다 tasklet. 2장 읽기(빠른 읽기...)신뢰할 수 없는 Linux 커널 크래킹 가이드

stackoverflow에 대한 매우 훌륭하고 철저한 답변도 읽어 보시기 바랍니다.Intel x86 및 x64 시스템 호출질문, 어디에 INT 0x80h, sysenter그리고 syscall맥락에 넣어…

나는 나만의 (아주 겸손하고 아직 준비 중인) 자율 학습 페이지를 작성했습니다.인터럽트와 신호신호와 트랩이 인터럽트와 어떻게 관련되는지 이해하도록 도와주세요(예: SIGFPE - 0으로 나누기).

관련 정보