[OS] 인터럽트(Interrupt)

seheo·2022년 8월 20일
0

OperatingSystem

목록 보기
1/3

하드웨어를 관리하는 2가지 방법

폴링(Poling) : 상태를 주기적으로 검사하여 조건을 만족하면 처리

while(1)
{
	if(키보드눌리면)
    	출력;
    다른 작업1;
    다른 작업2;
    다른 작업3;
}

인터럽트(Interrupt) : main문 실행 도중 외부 인터럽트 핀에 신호가 온다면 즉각적으로 하는 동작을 멈추가 입력받은 명령을 수행한다.

Interrupt


컴퓨터에서 인터럽트란 축구·농구·럭비 등의 경기에서, 상대편의 패스를 중간에서 가로채는 인트셉트와 유사하게 CPU의 정상적인 프로그램 실행을 가로채고 다른 프로세스를 실행한다는 의미이다.

인터럽트를 발생 시키는 요인은 다양하게 있는데 크게 내부와 외부로 구분한다.

내부 인터럽트

예상된 시기에 어떤 기능을 발휘하도록 내부에서 발생하는 인터럽트
1. 프로그램이 커널 함수를 호출하는 경우(system call)
2. 잘못된 명령이나 데이터를 사용하는 경우

  • 내부 인터럽트
  • 0으로 나누기
  • Overflow/Underflow
  • 커널 영역 접근

외부 인터럽트

예상할 수 없는 시기에 프로세서 외부인 주변 장체에서 처리를 요청하는 인터럽트

  • I/O 인터럽트: 입출력 장치로 인한 인터럽트
  • 정전 인터럽트: 전원 이상으로 인터럽트 발생
  • 타이머 요청: 정해진 시간이 지났을 때 발생시키는 인터럽트

인터럽트 벡터

인터럽트 벡터는 인터럽트가 발생했을 때, 그 인터럽트를 처리할 수 있는 서비스 루틴들의 주소를 가지고 있는 공간이다.
인터럽트 번호는 운영체제가 결정한다.

리눅스에서 인터럽트 번호
0 ~ 31: 예외상황 인터럽트
32 ~ 47: 하드웨어 인터럽트
128: 시스템콜

인터럽트 서비스 루틴 (ISR)

인터럽트 서비스 루틴 = 인터럽트 핸들러

인터럽트 접수에 의해 발생되는 인터럽트에 대응하여 특정 기능을 처리하는 기계어 코드 루틴이다.


인터럽트가 발생하면 이전에 하던 작업들을 저장하고 다시 불러오는 과정(Context Switch)이 발생한다.
ISR 수행 과정

시스템 콜에 의하여 발생하는 인터럽트

Open이라는 시스템 콜 함수를 사용했을때의 인터럽트 수행 과정

  1. 인터럽트 벡터 테이블: 인터럽트 벡터 테이블과 비교하여 실행 가능한 인터럽트인지 확인한다.
    실행 가능한 인터럽가 아니라면 무시, 가능하다면 인터럽트 요청을 제어장치로 전달
  2. 인터럽트 금지: 인터럽트 처리 루틴 진입 후 상호 배제(Lock)
  3. 프로세서상태 저장: 현재 실행 중인 프로그램의 위치를 PC에 저장하고, 레지스터 상태를 스택에 저장한다.
  4. 인터럽트 처리: 커널 모드로 진입하여 인터럽트 디스크립터 테이블에 맞는 ISR의 주소를 찾는다. Open 함수에 맞는 ISR을 실행한다.
  5. 프로세서상태 복구: 아까 저장해둔 중지된 프로그램을 다시 CPU에 올림
  6. 인터럽트 허용: 상호배재 자원 반납 (Unlock), 인터럽트 루틴 종료
  7. Open()의 결과는 파일 디스크립터를 프로그램에 반환한다.

시스템 콜은 사용자가 직접 사용하기 불편하기 때문에 시스템 콜 API를 통해 호출한다.
ex)라이브러리 함수( printf = write, malloc = brk 등)

참고자료

[운영체제] 시스템 콜과 인터럽트
충북대학교 소프트웨어학부 인터럽트서비스루틴
인터럽트 (Interrupt) - 도리의 디지털라이프

0개의 댓글