본문 바로가기

CS스터디/운영체제

인터럽트

728x90

인터럽트(Interrupt)

  • 하드웨어 장치가 CPU에게 어떤 사실을 알려주거나 CPU의 서비스를 요청해야 할 경우, CPU 내에 있는 인터럽트 라인을 세팅하여 인터럽트를 발생시킨다. (프로그램이 명령을 수행하기 위해서는 CPU를 할당받아야 함)
  • CPU는 매번 프로그램 카운터가 가리고 있는 곳의 명령을 수행한 뒤, 다음 명령을 수행하기 직전에 인터럽트 라인이 세팅되었는지 체크한다.
  • 이를 통해 인터럽트가 발생했으면 CPU는 현재 수행 중이던 프로세스를 멈추고 운영 체제의 인터럽트 처리 루틴으로 이동하여 인터럽트 처리를 수행한다.

하드웨어 인터럽트가 발생하는 예

1.기계 착오 인터럽트(Machine check interrupt) - 프로그램을 실행하는 도중 갑작스런 정전이나 컴퓨터 자체 내에서 

   기계적인 문제가 발생한 경우

2. 외부 인터럽트(External interrupt)- 오퍼레이터나 타이머에 의해 의도적으로 프로그램이 중단된 경우

3. 입출력 인터럽트(I/O interrupt)  - 입출력의 종료나 입출력의 오류에 의해 CPU의 기능이 요청되는 경우

4. 프로그램검사 인터럽트 - 프로그램 실행 중 보호된 기억공간 내에 접근하거나 불법적인 

   명령 수행과 같은 프로그램의 문제가 발생한 경우하드웨어 인터럽트가 발생하는 예

 

내부 인터럽트 

CPU 내부에서 실행하면서 인터럽트에 걸리는 경우

프로그램의 오류에 의해 생기는 인터럽트.

1. 프로그램 검사 인터럽트(Program check interrupt)

- 0 으로 나누기

- OverFlow / UnderFlow 발생

- 프로그램에서 명령어를 잘 못 사용한 경우

- 부당한 기억장소의 참조

2. SVC(Supervisor Call : 감시프로그램 호출) 인터럽트 -> 소프트웨어 인터럽트라고도 함

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

- supervisor(= 운영체제) 에게 제어권을 넘겨서 해결하는 것.

- application에서 직접 내부에 접근하는 것을 막는다.

 

인터럽트 우선순위

여러 장치에서 인터럽트가 동시에 발생하거나 인터럽트 서비스 루틴 수행 중 인터럽트가 발생했을 경우 우선순위를 따져서 처리한다.

 

전원 이상(Power fail) > 기계 착오(Machine Check) > 외부 신호(External) > 입출력(I/O) > 명령어 잘못 > 프로그램 검사(Program Check) > SVC(SuperVisor Call)

 

인터럽트 과정

process A 실행 중 디스크에서 어떤 데이터를 읽어오라는 명령을 받았다고 가정해보자.

  • process A는 system call을 통해 인터럽트를 발생시킨다.
  • CPU는 현재 진행 중인 기계어 코드를 완료한다.
  • 현재까지 수행중이었던 상태를 해당 process의 PCB(Process Control Block)에 저장한다. (수행중이던 MEMORY주소, 레지스터 값, 하드웨어 상태 등...)
  • PC(Program Counter, IP)에 다음에 실행할 명령의 주소를 저장한다.
  • 인터럽트 벡터를 읽고 ISR 주소값을 얻어 ISR(Interrupt Service Routine)로 점프하여 루틴을 실행한다.
  • 해당 코드를 실행한다.
  • 해당 일을 다 처리하면, 대피시킨 레지스터를 복원한다.
  • ISR의 끝에 IRET 명령어에 의해 인터럽트가 해제 된다.
  • IRET 명령어가 실행되면, 대피시킨 PC 값을 복원하여 이전 실행 위치로 복원한다.

인터럽트 핸들러

실제 인터럽트를 처리하기 위한 루틴으로 인터럽트 서비스 루틴이라고도 한다.
운영체제의 코드 영역에는 인터럽트별로 처리해야할 내용이 이미 프로그램되어 있다.

인터럽트 벡터

인터럽드 발생시 처리해야 할 인터럽트 핸들러의 주소를 인터럽트 별로 보관하고 있는 테이블이다.



출처: https://raisonde.tistory.com/entry/인터럽트Interrupt의-개념과-종류 [지식잡식]

https://velog.io/@adam2/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8

 

'CS스터디 > 운영체제' 카테고리의 다른 글

PCB 와 Context Switch  (0) 2022.01.11
시스템 콜  (0) 2022.01.11
프로세스 주소 공간  (0) 2022.01.11
프로세스와 스레드  (0) 2022.01.07
CPU 스케줄러  (0) 2022.01.07