본문 바로가기

[OS] 인터럽트와 시스템 콜

by mugglim 2022. 7. 22.

사용자 영역과 커널 영역

운영체제는 크게 사용자 영역과 커널 영역으로 구분된다. 여기서 커널이란 메모리(주기억 장치)에 상주하여 HW, SW 자원을 관리하는 주체이다. 커널 영역이 별도로 분리되어 있는 이유는 시스템의 자원을 보호하고, 효율적으로 관리하기 위함이다.

인터럽트와 시스템 콜

인터럽트(Interrupt)는 "방해하다, 중단시키다" 정도의 의미를 가지고 있다. OS에서 인터럽트는 CPU가 현재 실행 중인 작업을 중단하고, 발생한 상황을 처리하는 기능이라고 할 수 있다.

인터럽트는 하드웨어와 소프트웨어에서 모두 발생할 수 있다. 만약 현재 사용중인 노트북의 전원에 문제가 생긴 경우는 하드웨어에 의해 발생한 인터럽트이다. 만약 JavaScript로 파일 READ/WRITE 프로그램을 작성하면 소프트웨어에 의한 인터럽트이다.

간단히 정리하면 시스템 콜은 사용자 영역에서 커널이 제공하는 인터페이스를 호출하는 행위이다. 모든 시스템 콜은 인터럽트에 해당한다. 하지만 모든 인터럽트가 시스템 콜인 것은 아니다.

인터럽트의 동작 원리

인터럽트의 동작 원리는 아래의 과정을 거친다.

  1. CPU에서 프로그램이 실행 중.
  2. 인터럽트 발생
  3. 현재 실행 중인 프로세스를 중단하고, 상태를 PCB에 저장한다.
  4. 인터럽트를 처리한다.
    4.1. 인터럽트가 발생한 장치를 식별한다.
    4.2. 인터럽트를 처리할지 결정한다. 만약 처리하지 않으면 5번 과정으로 넘어간다.
    4.3. 인터럽트 벡터 테이블에서 인터럽트 발생 원인에 따른 서비스 루틴을 실행한다. (벡터 테이블은 서비스 루틴의 시작 주소를 포인터로 가지고 있다)
  5. 중단된 프로세스가 실행된다. (단, 중단된 프로세스가 우선순위에 밀려 다른 프로세스가 실행될 수 있다.)

간단히 예를 들어보자. 현재 JavaScript로 텍스트 파일을 읽는 프로그램을 실행한다고 가정해보자. 프로그램은 사용자 영역에서 동작한다. 반대로 텍스트 파일은 HW 자원이기 때문에 커널 영역에 접근해야 한다. 인터럽트 처리 과정을 표로 정리하면 아래와 같다.

Step 설명 프로세스 상태 영역
1 프로세스 실행 중 running 사용자
2 파일 I/O 호출 running 사용자
3 프로세스 중단 runing -> waitng 커널
4 인터럽트 처리 waiting 커널
5 프로세스 복구 waiting -> running 커널
6 프로세스 재실행 running 사용자

Ref.

본 글은 한국기술교육대 김덕수 교수님의 운영체제 강의를 참고하여 작성하였습니다. 잘못된 내용이 있으면 자유롭게 댓글로 달아주시길 바랍니다.

댓글