본문 바로가기
OS

인터럽트를 알아보자

by 권세희 2020. 12. 31.

인터럽트란 무엇일까 ❓

예상치 못한 외부에서 발생한 이벤트를 말한다. 인터럽트의 종류는 다양하지만 대표적으로 I/O interrupt가 있다.

예를 들어서 게임(하나의 프로세스)을 하고 있을 때 언제 마우스를 눌러 총이 발사할지 프로세스는 예상하지 못한다.

따라서 예상하지 못한 외부에서 발생한 이벤트 인터럽트가 발생한 것이다.

 

인터럽트는 어떻게 처리될까 ❓

인터럽트가 발생하면 커널이 개입하여 프로세스를 중단시킨 다음 인터럽트를 처리하는데 인터럽트 처리 과정은 2가지로 나뉜다.

  1. Interrupt handling : 인터럽트의 발생장소와 원인을 파악하여 인터럽트 서비스를 할 것인지 말 것인지 결정한다.
  2. Interrupt service : 인터럽트를 서비스하기로 결정했다면 인터럽트 서비스 루틴을 호출한다.

 

먼저 인터럽트가 발생하면 프로세스의 정보를 PCB에 저장하는데 이것을 Content saving이라 한다. 다음 인터럽트 핸들러를 호출한다. 다음 인터럽트 서비스를 호출하는데 호출된 서비스 또한 하나의 프로세스이다. 따라서 서비스가 끝나면 ready 상태에 있던 프로세스들 중 스케줄링에 따라 다른 프로세스가 올라온다. 그러면 그 프로세스의 정보가 필요하게 되고 그 해당 프로세스의 PCB에서 정보를 가지고 오는 게 이것을 Context restoring이라 한다.

 

Context Switching이란 무엇일까 ❓

먼저 Context란 프로세스와 관련된 정보들의 집합으로 Context는 CPU안에 CPU register context와 메모리 안에 코드와 데이터, 스택, PCB가 있다. 따라서 인터럽트 서비스가 일어나면 해당 프로세스는 CPU를 빼앗기는 것이고 CPU register context를 PCB안에 저장하고 다시 CPU에 올라가는 running state가 되면 프로세스로 복구하는 것이다. 즉 Context saving + Context restoring을 합쳐 Context Switching이라 한다.

 

한마디로 Context Switching란 실행 중인 프로세스의 Context를 저장하고 앞으로 실행할 프로세스의 Context를 복구하는 일이다.

 

Context Switch Overhead

Context Switching에 소요되는 비용으로써 OS의 성능에 큰 영향을 주게 되므로 불필요한 Context Switching을 줄이는 것이 필요하다. 따라서 줄이는 방법 중의 한 가지인 스레드에 대해 알아보자.

 

 

참고자료

www.youtube.com/watch?v=MJTr37lgaMA&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=6