본문 바로가기

CS/운영체제(OS)

OS - 인터럽트(Interrupt)의 이해와 실행과정

728x90

인터럽트는 번역하면 가로채기이다. 운영체제에서 인터럽트는 진행하던 명령에서 급한 새로운 명령을 위해 가로챈다는 의미로 쓰인다.

현재 모든 OS가 인터럽트 기반을 채택하고 있다.

 

기본 컴퓨터의 구성

  • 기본적인 컴퓨터는 위의 사진처럼 CPU, Memory, Hard Disk의 형태를 갖는다.
  • 처음 컴퓨터를 부팅할 때 컴퓨터에는 어떤 일이 일어날까? 먼저 ROM에서 부팅 명령어가 실행된다. 부팅 명령어는 하드디스크에서 OS가 설치된 위치를 찾아 OS를 메모리에 적재시킨다. 이렇게 되면 OS는 화면에 아이콘을 보여주고 사용자 인터페이스를 제공한다.
💡 HDD보다 SSD가 부팅이 빠른 이유가 여기 있다. 디스크에서 프로그램 위치를 찾고 프로그램을 적재하는 속도가 SSD가 훨씬 빠르기 때문이다.
  • 이후 컴퓨터는 특정한 명령을 기다리며 아무일도 하지않는다. 이제부터 인터럽트가 필요한 순간이다.
    • 인터럽트는 두 가지 종류가 있다.
      • 하드웨어 인터럽트: 마우스, 키보드 등에서 일어나는 인터럽트
      • 소프트웨어 인터럽트: word, vscode 같은 프로그램에서 일어나는 인터럽트

VS Code 아이콘을 더블클릭 했을 때 일어나는 일

  • 1. 먼저 마우스가 움직이면 cpu에 전기신호를 보내 마우스가 움직임을 보고한다.
    2. 마우스가 아이콘을 더블클릭거나 프로그램을 실행하려 할 경우 외부 인터럽트가 발생하여 CPU는 하던 것을 멈추  고 OS에게 명령을 하달한다.
    3. 메모리의 OS가 커널 모드로 변환해 프로그램을 disk에서 찾는다.
    4. 프로그램을 가져와 메모리에 적재하고 실행시킨다.

  • 소프트웨어 인터럽트는 예를 들어 word파일을 하다가 저장하거나 이미지를 삽입하려고 할 때 프로그램 자체 만으로는 접근할 수 없다. 그러므로 OS는 다시 한 번 커널 모드로 전환하고 disk에 접근하여 I/O를 발생시킨다.

유저모드와 커널모드

  • 이 때 커널 모드, 유저 모드로 전환하는 것도 인터럽트이다. 이것을 Supervisor Call SVC 라고 한다. 운영체제 내부의 코드를 실행해야할 경우에 이 인터럽트가 쓰인다.

Process Control Block 구조

  • 그렇다면, 인터럽트가 발생했을 때 진행되고 있던 명령들은 어떻게 되는걸까? 정말로 다 내팽겨치고 다른거 하러 가는건 아닐탠데.. 그래서 나오는 개념이 PCB(Process Control Box)이다. 프로세스의 상태를 보관하는 구조체로 보관한다. 그리고 인터럽트 작업이 끝나면 CPU에게 프로세스 정보를 제공하고 , CPU는 PC(Process Counter)를 확인하여 하던 작업을 다시 수행하게 된다.

 

즉, 정리하면 다음과 같다.

  1. 프로그램 명령 수행 중 인터럽트 발생
  2. CPU가 OS를 Call
  3. PCB에 하던 프로세스(명령)을 저장
  4. 인터럽트의 대한 정보를 갖고 OS에서 관련 코드 실행 (여기서 인터럽트 코드의 모음을 인터럽트 벡터라고 한다.) → 이 과정에서 필요에 의해 User Mode → Kernel Mode 변환
  5. 관련 코드가 끝나면 운영체제는 CPU에 PCB정보를 넘김
  6. CPU는 PCB에 담긴 PC(Process Counter)를 보고 기존의 명령을 다시 수행