[OS] 3. 인터럽트(interrupt) & 시스템콜(system call)

mingreen·2021년 5월 3일
1

Operating System

목록 보기
3/3

인터럽트(Interrupt)

인터럽트 정의

프로그램 실행 중에 예기치 않은 상황이 발생한 경우 현재 실행 중인 작업을 즉시 중단하고, 우선 처리한 후 실행 중이던 작업으로 복귀하여 계속 처리하는 것

인터럽트 당한 시점의 레지스터와 PC(program counter)를 저장한 후, CPU의 제어를 인터럽트 처리 루틴에 넘긴다.

  • 하드웨어 인터럽트
    - 하드웨어가 발생시킨 인터럽트로 입출력 장치, 전원 등 외부적인 요인으로 발생한다.
    ex) keyboard 입력, timer 종료

  • 소프트웨어 인터럽트(Trap)
    - 프로그램이 커널 함수를 호출하는 경우(system call), 잘못된 명령이나 데이터를 사용할 때(exception)
    ex) 0으로 나눔, 오버플로우

인터럽트 관련 용어

  • 인터럽트 벡터
    - 해당 인터럽트의 처리 루틴 주소를 가지고 있음
  • 인터럽트 처리 루틴(interrupt service routine, interrupt handler)
    - 해당 인터럽트를 처리하는 커널 함수, 실제 코드

시스템콜(System Call)

사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
해당 인터럽트 처리를 위해 OS로 CPU 제어권이 넘어가고 OS영역의 코드가 실행된다.

인터럽트 라인을 읽어서 커널 함수가 실행되는 것이지, 사용자 프로그램에서 직접 OS 영역의 호출을 하지는 않는다.

입출력(I/O)의 수행

모든 입출력 명령은 운영체제가 할 수 있는(커널모드에서 가능한) 특권 명령이다.

사용자 프로그램의 I/O 과정
1. 사용자 프로그램이 운영체제에게 I/O를 요청하는 시스템콜을 한다.
2. Trap(소프트웨어 인터럽트)를 통해 인터럽트 벡터의 위치로 이동한다.
3. 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동한다.
4. 올바른 I/O 작업인지 확인 후, 실제 I/O를 수행한다.
5. I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮긴다.

profile
주니어 백엔드 개발자의 기록하는 습관 만들기🧑‍💻

0개의 댓글