본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Interrupt
프로그램을 실행 중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 다시 실행중인 작업으로 복귀하는 작업


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

외부 인터럽트

편집 원본 편집
  • 전원 이상 인터럽트(Power fail interrupt): 정전, 파워 이상 등
  • 기계 착오 인터럽트(Machine check interrupt): CPU의 기능적인 오류
  • 외부 인터럽트(External interrupt)
    • 자원이 할당된 시간이 다 끝난 경우
    • 키보드로 인터럽트 키를 누른 경우(대표적으로 Control + Alt + Delete)
    • 외부장치로부터 인터럽트 요청이 있는 경우
  • 재시작 인터럽트(Restart interrupt)
    • 운영자가 콘솔의 재시작 버튼을 누르거나 다른 프로세서가 재시작 신호를 보낸 경우
  • 입출력 인터럽트(I/O Interrupt)
    • 입출력장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 할 경우
    • 입출력 데이터에 이상이 있는 경우

내부 인터럽트

편집 원본 편집
  • 잘못된 명령이나 잘못된 데이터를 사용할때 발생,,
  • 프로그램 검사 인터럽트(Program check interrupt)
    • Division by zero
    • Overflow/Underflow
    • 기타 프로그램 Exception

소프트웨어 인터럽트

편집 원본 편집
  • 프로그램 처리 중 명령의 요청에 의해서 발생
  • 대표적인 형태는 프로그램에서 감시 프로그램(SVC) 호출
  • SVC(SuperVisor Call)
    • 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우
    • 복잡한 입출력 처리를 하는 경우

인터럽트가 아닌 것

편집 원본 편집

CPU 가 실행 흐름을 끊고 인터럽트 처리 루틴으로 넘어가는 원인과, 운영체제가 그냥 처리해 주는 일을 구분한다.

상황 인터럽트인가 종류
프로세스에게 주어진 시간 할당량(time slice)이 끝났다 그렇다 타이머가 거는 외부 인터럽트. 이어서 문맥 교환이 일어난다(라운드 로빈)
하드웨어에 오류가 생겼다 그렇다 기계 착오 인터럽트(외부)
프로세스가 입출력을 위해 시스템 호출을 했다 그렇다 SVC 명령에 의한 소프트웨어 인터럽트 → 시스템 호출
입출력 장치가 전송을 끝냈다 그렇다 입출력 인터럽트(외부)
0 으로 나누기, 오버플로 같은 잘못된 연산 그렇다 프로그램 검사 인터럽트(내부)
프로세스가 시스템 안의 다른 프로세스로부터 메시지를 받았다 아니다 프로세스 간 통신(메시지 큐, 파이프, 소켓 등)이다. 운영체제가 메시지를 받아 두었다가 받는 프로세스가 읽을 때 넘겨준다
  • 상태 전이 인터럽트라는 종류는 없다. 상태 전이는 프로세스 상태(준비·실행·대기)가 바뀌는 것이며, 인터럽트는 그 원인이 될 뿐이다

인터럽트 동작 순서

편집 원본 편집
  1. 인터럽트 요청
  2. 프로그램 실행 중단: 현재 실행중이던 Micro operation 까지 수행한다.
  3. 현재의 프로그램 상태 보존: PCB(Process Control Block), PC(Program Counter) 등
  4. 인터럽트 처리루틴 실행: 인터럽트를 요청한 장치를 식별한다.
  5. 인터럽트 서비스 루틴 실행
    • 인터럽트 원인을 파악하고 실질적인 작업을 수행한다. 처리기 레지스터 상태를 보존한다.
    • 서비스루틴 수행 중 우선순위가 더 높은 인터럽트가 발생하면 또 재귀적으로 1~5를 수행한다.
    • 인터럽트 서비스 루틴을 실행할 때 인터럽트 플래그(IF)를 0으로 하면 인터럽트 발생을 방지할 수 있다.
  6. 상태복구 : 인터럽트 발생 시 저장해둔 PC(Program counter)를 다시 복구한다.
  7. 중단된 프로그램 실행 재개: PCB의 값을 이용하여 이전에 수행중이던 프로그램을 재개한다.

인터럽트 우선순위

편집 원본 편집
여러 장치에서 인터럽트가 동시에 발생하거나 인터럽트 서비스 루틴 수행 중 인터럽트가 발생한 경우 우선순위 판별 필요
  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 register에 bit를 설정한다.
    • Mask register상 우선순위가 높은 서비스 루틴 수행중 우선순위가 낮은 bit들을 비활성화 시킬 수 있다.
    • 반대로 우선순위가 높은 인터럽트는 낮은 인터럽트 수행 중에도 우선 처리된다.