본문으로 바로가기

[OS] 1. 인터럽트 (Interrupt)

category CS/Operating System 2019. 3. 4. 17:53
1_인터럽트

1. 인터럽트(Interrupt)

  1. 인터럽트의 개념
  2. 인터럽트의 종류
  3. 인터럽트 동작순서
  4. 인터럽트 우선순위

 

1. 인터럽트의 개념

1.1. 인터럽트 (Interrupt)

OS는 서로 다른 일을 하는 수많은 하드웨어를 사용한다. 이런 장치들은 동기적으로 구동되는데, 이는 각각 동작이 완료될 때 까지 기다려야하므로 "아무것도 하지 않으면서 바쁜 상태"로 많은 시간을 소비하게된다. 이 때, 인터럽트를 사용하여 한번에 하나의 명령만 수행할 수 있는 CPU의 한계성을 보완할 수 있다.

  • 사전적인 의미로는 방해하다, 중단시키다 라는 뜻을 가진다
  • OS적으로는 CPU의 정상적인 프로그램 실행을 방해했다 는 의미를 가진다
  • 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우, 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후, 다시 실행중인 작업으로 복귀하는 것

 

 

2. 인터럽트의 종류

2.1. 외부 인터럽트

CPU 코어 외부에서 어떤 일이 발생한 것을 전기적인 신호로 CPU에게 통지하는 경우

  • 정전•전원이상 인터럽트 : 정전 또는 전원공급의 이상으로 인한 인터럽트
  • 기계고장 인터럽트 : CPU 및 기타 하드웨어의 오류로 인한 인터럽트
  • 외부 인터럽트 : Timer 나 Operator 로 인한 인터럽트
  • 입출력 인터럽트 : 입출력의 종료나 입출력의 오류로 인한 인터럽트

 

2.2. 내부 인터럽트

CPU 코어 외부에서 인터럽트를 거는 경우가 일반적이지만, CPU 내부에서 실행하면서 인터럽트에 걸리는 경우

  • 프로그램 검사 인터럽트 : Divide by Zero , Overflow/underflow 등

 

2.3. 소프트웨어 인터럽트 (= Trap)

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

  • SVC(SuperVisor Call) : OS 를 호출하는 동작을 수행하는 경우

 

 

3. 인터럽트 동작순서

3.1. 인터럽트 처리 과정

  • 요청중단보관처리재개

  • 처리 과정

    1. 인터럽트 요청

    2. 프로그램 실행 중단

      • 현재 실행중이던 Micro Operation 까지 수행
    3. 현재 실행중인 프로그램 상태 보관

      • Interrupt Vector 를 읽어 ISR 주소값을 얻음
      • ISR 로 점프 (이 때, PC 값은 자동 대피 저장됨)
      • 현재 진행중인 프로그램의 레지스터를 대피함
    4. 인터럽트 서비스 루틴 처리

      • 인터럽트 원인을 파악하고 실질적인 작업 수행
      • 서비스 루틴 수행 중, 우선순위가 더 높은 인터럽트가 발생하면 재귀적으로 1~5 과정 수행
    5. 상태 복구

      • 해당 작업을 다 처리하면, 대피시킨 레지스터를 복원한다
      • ISR 끝에 RETI 명령어에 의해 인터럽트 해제
      • 명령어가 실행되면, PC 값을 복원하여 이전 실행 위치로 복원

 

3.2. 인터럽트 핸들러 (Interrupt Handler)

CPU 에서 인터럽트가 접수되면, 해당 인터럽트 핸들러 의 코드의 위치를 찾고 실행에 옮긴다. 실행 중이던 레지스터PC 를 보관함으로써 CPU의 상태를 보존한다. 인터럽트가 핸들링이 완료되면 이전의 상태로 복귀된다.

 

3.3. 인터럽트 벡터 (Interrupt Vector)

인터럽트 요청이 발생했을 때, CPU는 인터럽트 소스가 무엇이며, 해당 인터럽트 ISR이 어디에 적재되어있는지를 확인해야한다. 이 때, CPU는 인터럽트 벡터 를 활용한다.

  • 여러 종류의 인터럽트에 대한 ISR의 시작 주소
  • 인터럽트 벡터 테이블 : 주기억장치의 특정 영역에 여러 개의 인터럽트에 대한 인터럽트 벡터를 모아놓은 영역

 

3.4. PC (Program Counter)

CPU 내부에 있는 레지스터 중의 하나로서, 다음에 실행될 명령어의 주소를 가지고 있어 실행할 기계어 코드의 위치를 지정한다. 때문에 명령어 포인터라고도 불린다.

 

3.5. 사용자 프로그램이 I/O 를 하는 과정

  • Mode bit

    • 유저 모드(1) : 사용자 프로그램 수행
    • 커널 모드(0) : OS 코드 수행
  • 처리 과정

    1. SVC - 사용자 프로그램은 운영체제에게 I/O 요청
    2. Trap 을 사용하여 인터럽트 벡터의 특정 위치로 이동
    3. 제어권이 인터럽트 벡터가 가리키는 ISR 로 이동
    4. 올바른 I/O 인치 확인 후, 실행
    5. I/O 완료 시, 제어권을 SVC 다음 명령으로 이동
  • 인터럽트와 트랩의 차이점

    인터럽트는 하드웨어적인 흐름의 변화이고, 트랩은 소프트웨어적이라 할 수 있다.

    인터럽트는 프로그램 외부 상황에 따라서 발생 시점이 일정하지 않기 때문에 비동기적 이다. 반면에 트랩은 발생 시점이 프로그램의 일정한 지점이라는 점에서 동기적 이다.

 

 

4. 인터럽트 우선순위

4.1. 인터럽트 우선순위

정전•전원이상 인터럽트 > 기계고장 인터럽트 > 외부 인터럽트 > 입출력 인터럽트 > 프로그램 검사 인터럽트 > SVC(SuperVisor Call)

 

4.2. 우선순위 판별 방법

  • 폴링 (Polling)

    가장 높은 인터럽트로 부터 요청 플래그를 검사하여 ISR 을 수행하는 소프트웨어적인 방법 이다. 인터럽트를 조사하는 비용이 들어 반응시간이 느리지만, 하드웨어를 추가할 필요가 없어 회로가 간단하다는 장점을 지니고 있다.

  • 데이지 체인 (Daisy Chain)

    어디에 인터럽트가 발생하는지 확인하는 회로를 직렬로 연결하는 하드웨어적인 방법 이다

 

 

 


참고자료