인터럽트 중단

인터럽트 중단

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

답변1

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

모든 경우에 우리가 하는 일:

  • 무조건 저장 모드, 모드를 감독자 모드로 설정 (하드웨어에 의해 수행됨. 인터럽트에 의해 트리거됨)
  • 무조건 상태를 저장하고 스택을 전환합니다.
  • 인터럽트 코드 실행
  • 무조건 스택을 다시 전환하고 상태를 복원하고 모드를 복원합니다.

"모드를 감독자 모드로 설정"이라는 문구는 다음 중 하나로 읽을 수 있습니다.

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

인터럽트 중단

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

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

스택

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

커널에는 각 인터럽트 우선 순위 수준에 대한 스택도 있습니다. 인터럽트 중단에 대한 섹션을 참조하세요.

관련 정보