인터럽트

신명철·2022년 2월 3일
0

OS

목록 보기
7/27

인터럽트

인터럽트는 CPU 가 특정 기능을 수행하는 도중 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능이다.

정의

CPU 가 프로그램을 실행하고 있을 때, 입출력 H/W 등의 장치에 예외사항이 발생해 처리가 필요할 경우 CPU 에게 알려 처리할 수 있도록 하는 것을 말한다. | 출처 : 위키피디아

  • CPU 의 정상적인 프로그램 실행을 방해했다는 의미이다.
  • 예를 들어, 키보드 키의 입력을 받으면 CPU 는 처리하던 작업에 대한 정보를 수집하여 PCB에 저장하고, ISR(Interrupt Sevice Routine)을 수행한다. 인터럽트 처리를 마친 후 CPU 는 이전에 처리하던 작업으로 돌아간다.
  • 인터럽트를 발생시키기 위해서 S/W, H/W 는 CPU 내에 있는 인터럽트 라인을 세팅해 인터럽트를 발생시킨다.
  • CPU 는 매번 명령을 실행하기 전에 인터럽트 라인이 세팅되어 있는지를 검사한다.

하드웨어 인터럽트

OS의 관심(attention)이 필요한 H/W 장치에 의해서 만들어진다.

  • I/O 장치나 타이밍 장치, 전원 H/W 요인에 의해 발생한다.
  • 전원 이상 인터럽트(전원에 이상 발생), 기계 착오 인터럽트(CPU의 기능적 오류 동작 발생), I/O 인터럽트(입출력의 종료 등의 이유로 CPU 수행 요청) 가 있다.

소프트웨어 인터럽트

OS의 수행이 필요한 요청이 있을 때 프로그램들에 의해 만들어진다.

  • 잘못된 명령이나 데이터를 사용할 때 발생한다.
  • 인터럽트를 발생시키는 주체가 H/W 가 아닌 S/W 이기 때문에 S/W 인터럽트라고 부른다.
  • Exception(0으로 나누거나 주소 공간을 넘어가는 연산, Overflow, 등등 ..), System Call(OS의 서비스를 요청하기 위해 커널의 함수를 호출하는 것) 이 있다.
  • System Call이나 Exception은 사용자 프로세스로부터 CPU의 제어권이 OS에게 이양되어 처리된다.

인터럽트 처리 과정


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

  1. Process ASystem Call 을 통해 인터럽트를 발생시킨다.
  2. CPU 는 현재 진행중인 기계어 코드를 완료한다.
  3. 현재까지 수행 중이던 상태를 ProcessPCB에 저장한다.
  4. PC 에 다음에 실행할 명령의 주소를 저장한다.
  5. 인터럽트 벡터를 읽고 ISR 주소 값을 얻어 ISR 로 점프해 루틴을 실행한다.
  6. 해당 코드를 실행한다.
  7. 해당 일을 다 처리하면 대피시킨 레지스터를 복원한다.
  8. ISR 의 끝에 IRET 명령어에 의해서 인터럽트가 해제된다.
  9. IRET 명령어가 실행되면 대피시킨 PC 값을 복원해서 이전 실행 위치로 복원한다.

인터럽트 벡터

여러가지 인터럽트에 대해 해당 인터럽트를 발생 시 처리해야 할 루틴의 주소를 보관하고 있는 테이블

  • 일종의 함수를 가리키는 포인터이다.

인터럽트 핸들러

실제 인터럽트를 처리하기 위한 루틴으로 인터럽트 서비스 루틴(ISR, Interrupt Service Routine)이라고도 한다.

  • 운영체제 코드 부분엔 각종 인터럽트 별로 처리해야 할 내용이 이미 프로그램되어 있고, 이 부분을 입터럽트 서비스 루틴 혹은 인터럽트 핸들러라고 한다.
  • I/O 관련 인터럽트가 발생하면, CPU 는 인터럽트 라인을 통해 발생한 인터럽트를 확인한다.
  • 그 후, 인터럽트 벡터를 통해 해당 인터럽트 발생 시 처리해야 할 루틴의 주소를 알아낸다.
  • 주소를 통해 실제 수행되어야 하는 코드가 담겨있는 루틴을 찾아가서 상황에 맞는 처리를 진행한다.

인터럽트와 특권 명령

명령어의 종류

CPU 가 수행하는 명령에는 특권 명령일반 명령이 있다.

  • 일반 명령 : 메모리에서 자료를 읽어 오고, CPU 에서 계산을 하는 등의 명령이고 모든 프로그램이 수행할 수 있는 명령이다.
  • 특권 명령 : 보안이 필요한 명령으로, 입출력 장치나 타이머 등의 장치에 접근하는 명령이다. 항상 운영체제만이 수행할 수 있다.

kernel mode vs user mode

OS 는 kenel modeuser mode 로 나뉘어 구동된다.

  • kenel mode : 운영체제 가 CPU 제어권을 가지고 명령을 수행하는 모드로, 일반 명령특권 명령을 모두 수행할 수 있다.
  • user mode : 일반 사용자 프로그램이 CPU 의 제어권을 가지고 명령을 수행하는 모드이다.

예시

위의 Process A 가 프로그램 명령 수행 중 디스크 입출력 명령을 읽은 경우를 생각해보자.
사용자 프로그램은 입출력 장치에 접근하는 명령을 수행할 수 없다. user mode 에서 특권 명령을 수행할 수 없기 때문이다.
이런 경우, 사용자 프로그램은 OS 에게 시스템 콜을 통해 특권 명령을 대신 수행해달라고 요청한다. 시스템 콜은 주소 공간 자체가 다른 곳으로 이동해야 하므로 프로그램이 인터럽트 라인에 인터럽트를 세팅하는 명령을 통해 이루어진다.

시스템 콜은 커널 영역의 기능을 사용자 모드가 사용 가능하게 한다. 즉, 프로세스가 H/W 에 직접 접근해 필요한 기능을 수행할 수 있게 해준다.


참고

profile
내 머릿속 지우개

0개의 댓글