인터럽트 인터럽트

인터럽트 인터럽트

나는 인터럽트 처리가 어떻게 작동하는지 알고 있습니다(모드 전환, 레지스터 저장, 스택 변경...). 그런데 사용자 모드가 아닌 커널 모드에 있는 동안 인터럽트가 발생하면 어떻게 되는지 궁금합니다.

답변1

정확히 동일합니다. 그러나 인터럽트를 처리하는 경우 완료될 때까지 아무것도 없거나 아무것도 없을 수 있습니다.

모든 상황에서 우리가 하는 일:

  • 무조건 모드를 저장하고 모드를 관리 모드로 설정합니다. (하드웨어에 의해 수행됩니다. 인터럽트에 의해 트리거됨)
  • 무조건 상태 저장 및 스위치 스택
  • 인터럽트 코드 실행
  • 무조건 스택, 복구 상태, 복구 모드 전환

"모드를 관리자 모드로 설정"이라는 문구는 다음 중 하나로 해석될 수 있습니다.

  • 모드가 감독자 모드인지 확인하세요.
  • 상태 레지스터의 S 비트에 1을 씁니다.

인터럽트 인터럽트

여러 가지(그러나 제한적인) 인터럽트 우선 순위 수준이 있을 수 있습니다. 각 레벨에는 스택이 있습니다. 인터럽트는 우선순위가 더 높은 인터럽트에 의해서만 중단될 수 있습니다. 우선순위가 낮은 인터럽트는 우선순위가 높은 인터럽트에 의해 차단될 수 있습니다. 이렇게 하면 스택이 손상될 수 없다는 점을 제외한 대부분의 문제가 해결됩니다.

그러나 우선순위가 낮은 인터럽트는 차단될 수 있습니다(사용자 프로세스 포함. 이는 우선순위가 가장 낮은 인터럽트입니다). 따라서 특히 우선순위가 높은 인터럽트의 경우 인터럽트가 빠른지(코드가 많지 않음) 확인하는 것이 매우 중요합니다. 작업을 수행하고 종료하여 우선순위가 낮은 인터럽트(예: 사용자 프로세스)가 시간이 걸리는 작업을 수행하도록 합니다.

스택

프로세스가 커널을 호출하면 커널은 프로세스와 동일한 스택을 사용할 수 있습니다(동기 호출: 프로그램 코드에서 시스템 호출 사용).

커널은 또한 각 인터럽트 우선 순위 수준에 대한 스택을 제공합니다. 인터럽트 섹션을 참조하세요.

관련 정보