인터럽트

gang_shik·2022년 3월 15일
0

인터럽트(Interrupt)

  • CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요한 경우에 CPU에게 알려 처리할 수 있도록 하는 것

  • 그리고 발생된 상황을 처리한 후 다시 실행중인 작업으로 복귀

  • 인터럽트는 외부 인터럽트, 내부 인터럽트, 소프트웨어 인터럽트로 분류함


외부 인터럽트

  • 주로 하드웨어적인 부분에서 발생시키는 인터럽트임, 외부적인 요인으로써 발생된 것으로 이를 CPU가 처리하게끔 인터럽트를 발생시킴

  • 아래와 같은 다양한 외부요인에 의해서 발생함

전원 이상 인터럽트(Power fail Interrupt)

  • 정전, 파워 이상 등 요인으로 인터럽트를 발생시킴

기계 착오 인터럽트(Machine check Interrupt)

  • CPU의 기능적인 오류로 인한 인터럽트

외부 인터럽트(External Interrupt)

  • 자원이 할당된 시간이 다 끝난 경우

  • 키보드로 인터럽트 키를 누른 경우

  • 외부장치로부터 인터럽트 요청이 있는 경우

  • 위의 해당하는 경우 인터럽트를 일으킴

입출력 인터럽트(I/O Interrupt)

  • 입출력장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 할 경우

  • 입출력 데이터에 이상이 있는 경우

  • 위의 해당하는 경우 인터럽트를 일으킴


내부 인터럽트

  • 잘못된 명령이나 잘못된 데이터를 사용할 때 발생, Trap이라고도 함

프로그램 검사 인터럽트

  • Division by zero : 나누기 0을 하는 경우 명령어 실행 오류로 나타남

  • Overflow, Underflow : 흔히 알고 있는 오버플로우, 언더플로우 같은 상황에서

  • 기타 프로그램 Exception


소프트웨어 인터럽트

  • 프로그램 처리 중 명령의 요청에 의해서 발생

  • 대표적인 형태는 프로그램에서 감시 프로그램(SVC) 호출

SVC(SuperVisor Call)

  • 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우

  • 복잡한 입출력 처리를 하는 경우

SVC?

SVC는 소프트웨어 인터럽트의 대표적인 형태 중 하나임

이 SVC는 OS 자체로부터 서비스 요청을 함 이는 낮은 수준의 시스템 프로세스에 접근하는데 있어서 그러한 서비스를 요청하는 것과 연관됨

즉, OS와 시스템 프로세스를 매개하는 역할을 제공한다고 볼 수 있음, 유저 수준의 프로세스에서는 접근이 허용되지 않은 경우가 꽤 있기 때문에

그래서 위와 같이 프로그램엣 SVC를 호출하여서 처리한다고 볼 수 있음


인터럽트 동작 순서

  1. 인터럽트 요청

  2. 프로그램 실행 중단 : 현재 실행중이던 Micro Operation까지 수행함(CPU가 현재 진행 중인 기계어 코드를 완료함)

  3. 현재의 프로그램 상태 보존 : PCB(Process Control Block), PC(Program Counter)등

    • PCB 즉, 해당 process의 수행중이던 memory 주소, 레지스터 값, 하드웨어 상태 등을 저장함
    • PC에 다음에 실행할 명령의 주소를 저장함
  4. 인터럽트 처리루틴 실행 : 인터럽트를 요청한 장치를 식별

    • 인터럽트 벡터를 읽고 ISR(Interrupt Service Routine) 주소값을 얻어 ISR로 점프하여 루틴 실행함
  5. 인터럽트 서비스 루틴 실행(ISR : Interrupt Service Routine)

    • 인터럽트 원인을 파악하고 실질적인 작업을 수행함, 처리기 레지스터 상태를 보존함(Processor)
    • 서비스 루틴 수행 중 우선순위가 더 높은 인터럽트가 발생하면 또 재귀적으로 1 ~ 5를 수행함
    • 인터럽트 서비스 루틴을 실행할 때 인터럽트 플래그(IF)를 0으로 하면 인터럽트 발생을 방지할 수 있음
  6. 상태 복구 : 인터럽트 발생 시 저장해둔 PC(Program Counter)를 다시 복구함

    • ISR 끝에 IRET 명령어에 의해 인터럽트가 해제되면서 PC 값을 복원하는 것
  7. 중단된 프로그램 실행 재개 : PCB의 값을 이용하여 이전에 수행중이던 프로그램을 재개함

인터럽트 벡터? 인터럽트 서비스 루틴? 인터럽트 플래그?

인터럽트 벡터

인터럽트 벡터를 읽고 인터럽트 서비스 루틴 주소값을 얻어서 실행하였다고 하였는데 즉, 인터럽트 벡터는 인터럽트가 발생했을 때, 그 인터럽트를 처리할 수 있는 서비스 루틴들의 주소를 가지고 있는 공간임

인터럽트 서비스 루틴

인터럽트 서비스 루틴은 인터럽트 핸들러라고도 함, 이는 인터럽트 접수에 의해 발생되는 인터럽트에 대응하여 특정 기능을 처리하는 것임

이미 인터럽트 별로 원인에 따라 각각 존재하고 마치는 시간도 다양하게 존재함, 그래서 인터럽트 동작 순서에서 인터럽트 벡터를 읽고 ISR 주소를 얻어서 실행한다는 것이, 인터럽트에 대해서 파악을 하고 그에 맞게 처리를 하기 때문임, 이렇게 파악하고 처리하게끔 인터럽트 서비스 루틴이 실행되서 처리함

인터럽트 플래그

인터럽트 플래그는 CPU의 플래그 레지스터에 있는 플래그 비트로 CPU가 인터럽트의 즉각적으로 반응할 것인가 말 것인가를 결정함, 그래서 이를 0으로 설정해서 인터럽트 발생을 방지할 수 있다고 한 것

IRET 명령어?

일종의 Return을 의미함, 이는 재귀에서 Return을 해서 돌아가듯이 인터럽트 동작 순서에서 마지막 즈음에 상태 복구를 하고 실행 재개를 하는데 이 상태로 돌아갈 수 있도록 처리하는 명령어임


인터럽트 우선 순위

  • 여러 장치에서 인터럽트가 동시에 발생하거나 인터럽트 서비스 루틴 수행 중 인터럽트가 발생한 경우 우선순위 판별 필요

  • 우선 순위

    1. 전원 이상(Power fail)
    2. 기계 착오(Machine Check)
    3. 외부 신호(External)
    4. 입출력(I/O)
    5. 명령어 잘못
    6. 프로그램 검사(Program Check)
    7. SVC(SuperVisor Call)
  • 일반적으로 하드웨어 인터럽트소프트웨어 인터럽트보다 우선순위가 높고, 내부 인터럽트보다 외부 인터럽트우선 순위가 높다


우선순위 판별 방법

  • 이러한 인터럽트의 경우 이런 우선순위를 소프트웨어, 하드웨어적으로 판별이 가능

소프트웨어적인 방법(Polling)

  • 인터럽트 요청 플래그를 차례로 비교하여 우선순위가 높은 인터럽트 자원을 찾고, 이에 해당하는 인터럽트 서비스 루틴을 수행함

  • 속도가 빠른 장치에 높은 등급을 부여함

  • 우선순위 변경이 쉬움

  • 많은 인터럽트가 있을 경우 하드웨어적인 방법에 비해서 우선순위 판단 속도가 느림

  • 회로가 간단하고 융통성이 있으며, 별도의 하드웨어가 필요 없음

  • Polling의 주기가 짧으면 Server 성능에 부담이 생기며, 주기가 길어지면 실시간성이 떨어짐

하드웨어적인 방법

Vectored Interrupt
  • 인터럽트를 요청할 수 있는 장치와 CPU 사이에 장치번호를 식별할 수 있는 버스를 직렬/병렬로 연결

  • 인터럽트는 벡터는 인터럽트를 발생한 장치가 분기할 곳에 대한 정보임

  • 소프트웨어적인 방법에 비해 비경제적임

  • 회로가 복잡하고 융통성이 없으나, 별도의 소프트웨어가 필요없이 하드웨어로 처리되므로 속도가 빠름

  • 크게 2가지 방법으로 알아볼 수 있음

Daisy Chain
  • 인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결함

  • 우선순위가 높은 장치를 상위에 두고 우선순위 차례대로 배치함

병렬(Parallel) 우선순위 부여 방식
  • 인터럽트가 발생하는 각 장치를 개별적인 회선으로 연결함

  • 각 장치별 우선순위를 판별하기 위한 Mask Registerbit을 설정

  • Mask Register상 우선순위가 높은 서비스 루틴 수행 중 우선순위가 낮은 bit들을 비활성화 시킬 수 있음

  • 반대로 우선순위가 높은 인터럽트는 낮은 인터럽트 수행 중에도 우선 처리됨

profile
측정할 수 없으면 관리할 수 없고, 관리할 수 없으면 개선시킬 수도 없다

0개의 댓글