인터럽트는 CPU 가 특정 기능을 수행하는 도중 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능이다.
CPU 가 프로그램을 실행하고 있을 때, 입출력 H/W 등의 장치에 예외사항이 발생해 처리가 필요할 경우 CPU 에게 알려 처리할 수 있도록 하는 것을 말한다. | 출처 : 위키피디아
PCB
에 저장하고, ISR(Interrupt Sevice Routine)
을 수행한다. 인터럽트 처리를 마친 후 CPU 는 이전에 처리하던 작업으로 돌아간다.인터럽트 라인
을 세팅해 인터럽트를 발생시킨다. 인터럽트 라인
이 세팅되어 있는지를 검사한다.OS의 관심(attention)이 필요한 H/W 장치에 의해서 만들어진다.
OS의 수행이 필요한 요청이 있을 때 프로그램들에 의해 만들어진다.
System Call
이나 Exception
은 사용자 프로세스로부터 CPU의 제어권이 OS에게 이양되어 처리된다.
Process A
실행 중 디스크에서 어떤 데이터를 읽어 오라는 명령을 받았다고 가정해보자.
Process A
는 System Call
을 통해 인터럽트를 발생시킨다.CPU
는 현재 진행중인 기계어 코드를 완료한다.Process
의 PCB
에 저장한다.PC
에 다음에 실행할 명령의 주소를 저장한다.인터럽트 벡터
를 읽고 ISR
주소 값을 얻어 ISR
로 점프해 루틴을 실행한다.ISR
의 끝에 IRET
명령어에 의해서 인터럽트가 해제된다.IRET
명령어가 실행되면 대피시킨 PC
값을 복원해서 이전 실행 위치로 복원한다.여러가지 인터럽트에 대해 해당 인터럽트를 발생 시 처리해야 할 루틴의 주소를 보관하고 있는 테이블
실제 인터럽트를 처리하기 위한 루틴으로 인터럽트 서비스 루틴(ISR, Interrupt Service Routine)이라고도 한다.
입터럽트 서비스 루틴
혹은 인터럽트 핸들러
라고 한다.인터럽트 벡터
를 통해 해당 인터럽트 발생 시 처리해야 할 루틴의 주소를 알아낸다.CPU 가 수행하는 명령에는 특권 명령
과 일반 명령
이 있다.
일반 명령
: 메모리에서 자료를 읽어 오고, CPU 에서 계산을 하는 등의 명령이고 모든 프로그램이 수행할 수 있는 명령이다.특권 명령
: 보안이 필요한 명령으로, 입출력 장치나 타이머 등의 장치에 접근하는 명령이다. 항상 운영체제
만이 수행할 수 있다.OS 는 kenel mode
과 user mode
로 나뉘어 구동된다.
kenel mode
: 운영체제
가 CPU 제어권을 가지고 명령을 수행하는 모드로, 일반 명령
과 특권 명령
을 모두 수행할 수 있다.user mode
: 일반 사용자 프로그램이 CPU 의 제어권을 가지고 명령을 수행하는 모드이다.위의 Process A 가 프로그램 명령 수행 중 디스크 입출력 명령을 읽은 경우를 생각해보자.
사용자 프로그램은 입출력 장치에 접근하는 명령을 수행할 수 없다. user mode
에서 특권 명령
을 수행할 수 없기 때문이다.
이런 경우, 사용자 프로그램은 OS 에게 시스템 콜
을 통해 특권 명령
을 대신 수행해달라고 요청한다. 시스템 콜
은 주소 공간 자체가 다른 곳으로 이동해야 하므로 프로그램이 인터럽트 라인에 인터럽트를 세팅하는 명령을 통해 이루어진다.
시스템 콜은 커널 영역의 기능을 사용자 모드가 사용 가능하게 한다. 즉, 프로세스가 H/W 에 직접 접근해 필요한 기능을 수행할 수 있게 해준다.
참고