본문 바로가기

인터럽트와 시스템 콜: 키보드 입력과 프로그램 요청을 OS가 처리하는 방법

📑 목차

    왜 “인터럽트”와 “시스템 콜”을 알아야 하는가

    컴퓨터를 쓰다 보면 키보드를 누르자마자 글자가 입력되고, 마우스를 클릭하면 프로그램이 즉시 반응한다. 또 프로그램은 파일을 저장하고, 인터넷에 접속하고, 화면에 그림을 그리는 등 운영체제의 기능을 당연한 듯 사용한다. 하지만 이 모든 동작은 CPU와 운영체제(OS)가 역할을 나누어 처리하는 정교한 규칙 위에서 돌아간다.

    이 글에서는 인터럽트와 시스템 콜이라는 두 개념을 통해 “외부 입력(키보드, 마우스)”과 “프로그램의 요청(파일 열기, 네트워크 전송)”이 운영체제에서 어떻게 처리되는지 전체 흐름을 정리한다. 핵심은 CPU가 아무 때나 멈추고 바꾸어 달릴 수 없기 때문에, 운영체제가 안전하고 예측 가능한 방식으로 개입하는 통로를 만든다는 점이다.

    이 글의 핵심 키워드는 인터럽트, 시스템 콜, 커널 모드, 사용자 모드, 디바이스 드라이버이다.

    개념 정의, 기본 원리, 관련 용어 정리

    1) 인터럽트란 무엇인가

    인터럽트는 “지금 하던 일을 잠깐 멈추고, 먼저 처리해야 할 일이 생겼다”라는 신호이다. CPU는 원래 프로그램의 명령을 순서대로 실행한다. 그런데 키보드 입력, 네트워크 패킷 도착, 디스크 작업 완료 같은 사건은 프로그램의 실행 흐름과 무관하게 갑자기 발생한다. 이때 하드웨어가 CPU에게 알리는 방식이 인터럽트이다.

    인터럽트가 없다고 가정하면, CPU는 “키보드에 입력이 왔는지”를 계속 확인해야 한다. 이런 방식은 불필요한 확인 작업이 많아 CPU 시간을 낭비한다. 인터럽트는 이 낭비를 줄여준다. “필요할 때만 알림을 받고 처리”하기 때문이다.

    2) 시스템 콜이란 무엇인가

    시스템 콜은 “프로그램이 운영체제에게 공식적으로 요청하는 통로”이다. 예를 들어 프로그램이 다음을 하고 싶다고 하자.

    • 파일을 열고 저장한다.
    • 인터넷으로 데이터를 보낸다.
    • 새로운 프로세스를 만든다.
    • 현재 시간을 읽는다.
    • 화면이나 장치에 접근한다.

    이런 작업은 운영체제가 관리하는 자원(파일 시스템, 네트워크, 메모리, 장치)에 접근해야 하므로, 아무 프로그램이나 마음대로 하면 보안과 안정성이 무너진다. 그래서 운영체제는 시스템 콜이라는 문을 만들어 “요청 형식과 권한을 확인한 뒤 처리”한다.

    3) 사용자 모드와 커널 모드

    인터럽트와 시스템 콜을 이해하려면 CPU의 실행 모드 개념이 필요하다.

    • 사용자 모드: 일반 프로그램이 실행되는 모드이다. 하드웨어 제어 같은 위험한 작업을 직접 할 수 없다.
    • 커널 모드: 운영체제 핵심(커널)이 실행되는 모드이다. 메모리, 장치, CPU 제어 등 모든 권한을 가진다.

    프로그램은 사용자 모드에서 실행된다. 하지만 파일 저장 같은 작업을 하려면 커널 모드의 기능이 필요하다. 이때 시스템 콜을 통해 잠깐 커널 모드로 넘어가 운영체제가 대신 처리한다.

    4) 디바이스 드라이버와 인터럽트 핸들러

    키보드, 마우스, 디스크, 네트워크 카드 같은 장치는 각자 동작 방식이 다르다. 운영체제는 이 장치들을 직접 다루기 위해 디바이스 드라이버라는 소프트웨어를 사용한다.

    • 디바이스 드라이버: 특정 장치를 제어하고, 운영체제와 장치 사이를 연결하는 프로그램이다.
    • 인터럽트 핸들러: 인터럽트가 발생했을 때 실행되는 코드이다. “무슨 일이 발생했는지 확인하고 필요한 최소 처리”를 한다.

    중요한 점은 인터럽트가 오면 무조건 길게 처리하는 것이 아니라, 빠르게 핵심만 처리하고 나머지는 나중에 이어서 처리하는 방식이 흔하다는 점이다. 그래야 시스템 전체가 멈추지 않는다.

     

    인터럽트와 시스템 콜: 키보드 입력과 프로그램 요청을 OS가 처리하는 방법
    인터럽트 기반 입력 처리 흐름 – 키보드 입력이 OS로 전달되는 과정

    실제 사례, 응용 예시, 문제 해결 방법, 주의할 점

    1) 키보드 입력은 실제로 어떻게 처리되는가

    사용자가 키보드를 누르면 “키가 눌렸다”라는 전기 신호가 키보드 컨트롤러에 전달된다. 이후 과정은 다음처럼 진행된다.

    1단계. 키보드 장치가 입력 이벤트를 감지한다.
    2단계. 키보드 컨트롤러가 CPU에 인터럽트를 보낸다.
    3단계. CPU는 현재 실행 중이던 프로그램을 잠깐 멈춘다.
    4단계. 운영체제의 인터럽트 핸들러가 실행되어 입력 정보를 읽는다.
    5단계. 입력 정보는 드라이버와 입력 버퍼를 통해 운영체제 내부에 저장된다.
    6단계. 필요하면 운영체제가 “키 입력을 기다리던 프로그램”을 깨워서 입력을 전달한다.
    7단계. CPU는 중단했던 프로그램 실행으로 복귀한다.

    여기서 핵심은 “입력은 언제 들어올지 모르므로 인터럽트로 처리하고”, “운영체제가 버퍼에 쌓아 두었다가 프로그램에 전달”한다는 점이다. 프로그램은 하드웨어를 직접 만지지 않고도 입력을 받을 수 있다.

    2) 시스템 콜은 언제 등장하는가

    프로그램이 키 입력을 읽는 행위를 생각해 보자. 프로그램은 보통 운영체제가 제공하는 라이브러리 함수(예: 표준 입력 함수)를 호출한다. 이 함수는 내부적으로 시스템 콜을 사용해 커널에 요청을 보낸다.

    흐름은 다음과 같다.

    1단계. 프로그램이 “입력 읽기” 함수를 호출한다.
    2단계. 라이브러리가 시스템 콜을 호출한다.
    3단계. CPU가 사용자 모드에서 커널 모드로 전환한다.
    4단계. 커널이 입력 버퍼를 확인한다.
    5단계. 버퍼에 입력이 있으면 프로그램에게 복사해 준다. 없으면 “입력 올 때까지 대기” 상태로 만든다.
    6단계. 처리가 끝나면 커널 모드에서 사용자 모드로 돌아간다.

    즉, 입력 자체는 인터럽트로 들어오고, 프로그램이 입력을 가져가는 동작은 시스템 콜로 이루어지는 구조가 일반적이다. 둘은 역할이 다르지만 함께 동작한다.

     

    프로그램이 시스템 콜을 호출하면 사용자 모드에서 커널 모드로 전환되어 운영체제가 작업을 처리한 뒤 다시 복귀하는 과정 다이어그램
    시스템 콜 흐름 – 사용자 모드에서 커널 모드로 넘어가는 과정

    3) 실제 사용 상황에서 보이는 증상과 연결하기

    인터럽트와 시스템 콜은 눈에 보이지 않지만, 다음 같은 상황에서 흔적이 나타난다.

    • 키보드 입력이 끊기거나 지연된다: 장치 드라이버 문제, 시스템 과부하, 입력 처리 지연이 원인이 될 수 있다.
    • 디스크 사용률이 100%로 치솟고 컴퓨터가 멈춘다: 프로그램이 파일 입출력 시스템 콜을 과도하게 호출하거나, 스와핑이 발생해 디스크 작업이 폭증한 상태일 수 있다.
    • 네트워크가 느리고 프로그램이 멈춘 것처럼 보인다: 네트워크 관련 시스템 콜이 응답을 기다리며 대기 상태에 들어갔거나, 인터럽트 처리 부담이 커진 상황일 수 있다.

    이런 증상은 “컴퓨터가 그냥 느리다”로 끝나지 않는다. 운영체제가 어떤 자원을 처리하느라 바쁜지, 인터럽트와 시스템 콜이 어느 지점에서 병목이 되는지로 해석할 수 있다.

    4) 문제 해결 관점에서의 간단한 체크 포인트

    일반 사용자가 할 수 있는 현실적인 점검 방법은 다음과 같다.

    • 작업 관리자(Windows)나 활동 모니터(macOS)에서 CPU, 메모리, 디스크, 네트워크 중 무엇이 100%에 가까운지 본다. 특정 자원이 과부하이면 그 자원과 관련된 시스템 콜이 늘어난 상태일 가능성이 크다.
    • 키보드, 마우스, 네트워크 어댑터 같은 장치 관련 문제가 반복되면 드라이버 업데이트를 확인한다. 드라이버는 인터럽트 처리와 직결된다.
    • 특정 프로그램만 멈추면 해당 프로그램이 파일/네트워크 요청을 과도하게 하는지 확인한다. 예를 들어 대용량 동기화 프로그램은 시스템 콜 호출 빈도가 높아 체감 지연을 유발할 수 있다.

    주의할 점은 “무조건 종료하거나 삭제”가 아니라, 먼저 어떤 자원이 병목인지 확인하고 그에 맞춰 접근하는 것이다. 인터럽트와 시스템 콜의 역할을 알면 원인 추정이 더 정확해진다.

    인터럽트와 시스템 콜은 “운영체제가 개입하는 두 가지 방식”이다

    인터럽트와 시스템 콜은 운영체제가 컴퓨터를 안정적으로 운영하기 위해 사용하는 핵심 장치이다. 인터럽트는 키보드 입력처럼 외부에서 갑자기 발생하는 사건을 CPU가 놓치지 않게 하는 알림 방식이다. 시스템 콜은 프로그램이 파일 저장이나 네트워크 통신처럼 운영체제 자원을 안전하게 사용하도록 만드는 공식 요청 통로이다. 이 둘은 사용자 모드와 커널 모드라는 경계를 통해 보안과 안정성을 지키며 동작한다.

    핵심 요약은 다음과 같다.

    • 인터럽트: 장치가 CPU에 알리는 “긴급 알림”이다.
    • 시스템 콜: 프로그램이 OS에 요청하는 “공식 창구”이다.
    • 입력은 인터럽트로 들어오고, 프로그램이 가져갈 때는 시스템 콜이 사용되는 경우가 많다.

    다음으로 궁금해볼 만한 주제는 두 가지이다.
    첫째, 컨텍스트 스위칭과 스케줄링이다. 인터럽트 이후 CPU가 어떤 기준으로 실행 대상을 바꾸는지 이해할 수 있다.
    둘째, 가상 메모리와 페이지 폴트이다. 메모리가 부족하거나 필요한 데이터가 RAM에 없을 때 운영체제가 어떻게 개입하는지 시스템 콜 및 인터럽트와 연결해 이해할 수 있다.