아직은 NULL NULL 합니다

인터럽트와 트랩의 차이, 그리고 시스템 콜이란? 본문

Computer Science/운영체제

인터럽트와 트랩의 차이, 그리고 시스템 콜이란?

is낫널 2023. 9. 20. 00:40
728x90
서론

CS 를 공부하고자, 바로 CS 스터디를 했더니 습득력이 조금 더딘 것 같아서 걱정이다. 

한 질문을 공부하는데도 개념 하나하나를 찾아서 이해한 뒤에서야 질문에 대해서 정보를 찾아보고 공부하기 시작한다. 

그런데 컴퓨터의 구조나 웹이 어떻게 동작하는지 배우고 공부할수록 재미가 있어서, 조만간 책이나 인강을 구매해서 봐볼까 싶기도 하다. 
하지만 지금은 [아직은 NULL NULL 이다.]인 이 블로그 명을 [이제는 EXIST 하다.]로 바꿔주기 위해서 취직이 우선이니, 빠르게 습득하려고 노력해 보자! 
사실 블로그명을 내가 취직하면 가고싶은 여행지로 해놓고 이룰 때마다 바꿀까 싶기도 하고 히히 

이런 게 조금 블로그를 하는 재미가 아닌가 싶기도 하다. 

이런 서론을 읽어줄 사람이 있을까 싶긴 하면서도 글을 쓰는 재미 때문에 포기할 수가 없다. 

 

본론

 

인터럽트(Interrupt) 란 ?

CPU 가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 
마이크로프로세서(=컴퓨터의 중앙 장치(CPU)) 에게 알려 처리할 수 있도록 하는 것을 말한다.

 

간단하게 얘기하자면,

시스템에서 발생한 다양한 종류의 이벤트 혹은 그런 이벤트를 처리하는 메커니즘(사물의 작용원리나 구조) 을 의미한다.


인터럽트의 분류

인터럽트는 하드웨어 인터럽트와 소프트웨어 인터럽트로 크게 나뉜다. 

 

하드웨어 인터럽트

하드웨어가 발생시키는 인터럽트로, CPU 에 특정한 신호를 보내 인터럽트를 발생시킨다.

ex) I/O 디바이스, keyboard event, network packet arrived, 타이머 인터럽트 등

 

소프트웨어 인터럽트

소프트웨어가 발생시키는 인터럽트로, 프로그램 내부에서 발생되는 인터럽트를 말한다. 이를 트랩(Trap) 이라고도 부른다. 예외(Exception) 상황이 일어나거나 시스템 콜(System Call) 이라는 연산을 실행할 때 발생한다.

ex) 0으로 나누기(예외상황), Page Fault(예외상황)

 

시스템 콜(System Call) 이란 ?

운영체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.
조금 더 쉽게 얘기하자면, 커널의 서비스를 이용하기 위해 요청하는 것이 시스템 콜 이라고 할 수 있다.

이는 C, C++ 같은 고급언어로 작성된 프로그램들은
직접 시스템 호출을 사용할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법이다. 

  • 시스템 콜의 세 가지 기능
    1. 사용자 모드(user mode)에 있는 응용프로그램이 커널의 기능을 사용할 수 있도록 한다.
    2. 시스템 콜을 하면 사용자모드(user mode)에서 커널모드(kernal mode)로 바뀐다.
    3. 커널(kernal)에서 시스템 호출을 처리하면 커널모드(kernal mode)에서 사용자 모드(user mode)로 돌아가 작업을 계속한다.
  • 시스템 호출의 유형
    • 프로세스 제어
    • 파일 I/O 관련
    • 장치 관리
    • 정보 유지
    • 통신

 

인터럽트(Interrput) VS 트랩(Trap)

결론적으로,
인터럽트는 외부장치(즉 하드웨어) 에서 발생하는 이벤트로 인해 운영체제에 의해 처리되는 이벤트,
트랩은 프로그램 내부에서 발생하는 예외 상황으로 인해 운영체제에 의해 처리되는 이벤트가 된다.

 

 

인터럽트 의 동작 과정

마이크로프로세서(CPU) 는 인터럽트가 발생하게 되면 인터럽트를 감지하여 현재 실행 중인 프로세스를 중단하고, 해당 프로세스의 CPU 상태(레지스터)를 PCB에 저장한다.

이후 인터럽트의 종류를 확인하기 위해 인터럽트 핸들러(Interrput Handler) 를 호출한다.

이 인터럽트 핸들러에서 인터럽트를 분석 후 인터럽트에 맞는 처리 루틴을 불러오게 되는데
이때 처리 루틴의 주소가 적혀있는 인터럽트 벡터 테이블(Interrput Vector Table) 을 참조하게 된다.

이후 인터럽트를 처리하고 처리가 끝나면 CPU 에서 저장했던 프로세스를 불러와 다시 실행시킨다.

 

인터럽트 핸들러(Interrput Handler) 란 ? 

  • 실제 인터럽트를 처리하기 위한 루틴으로 인터럽트 서비스 루틴(ISR, Interrupt Service Routine)이라고도 한다.
  • 인터럽트 핸들러는 인터럽트 원인에 따라 각각 존재하고 인터럽트 핸들러가 작업을 마치는 데 걸리는 시간도 다양하다. 
    • 예를 들면, 키보드 이벤트로 발생하는 이벤트는 키보드 인터럽트 핸들러도 존재하고
      예외 상황에서 발생하는 이벤트인 트랩도 트랩 핸들러도 존재한다. 

 

 

해당 글은 아래 블로그와 위키피디아를 참고했습니다! 

 

1010. 트랩, 그리고 인터럽트의 처리 과정(문맥교환) : CPU 넌 비싸니까 쉬지 마!

안녕하세요, 전 요즘도 감기 때문에 고생하고 있습니다. 좀처럼 쉽게 낫을 생각을 안하네요. 여러분들은 몸 관리 잘하셔서 저처럼 고생하시는 일이 없기를 바라면서 포스팅을 시작하겠습니다.

haun25ne.tistory.com

 

 

인터럽트 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 마이크로프로세서에서 인터럽트(interrupt), 끼어듦, 또는 가로막기란, 마이크로프로세서(CPU)가 프로그램을 실행하고있을 때, 입출력하드웨어 등의 장치에 예외

ko.wikipedia.org

 

728x90