인터럽트

2020. 10. 6. 16:05운영체제/프로세스

1. 인터럽트

 공부를 할 때, 혼자서 하는 것보다 친구랑 같이하면 집중력은 덜 할지 몰라도 재미있다. 왜냐하면 공부가 안될 때 친구를 콕 찔러서 같이 놀다오면 되기 때문이다. 여기서 친구는 내가 콕 찌른다는 행동을 언제 할지 예상할 수 있을까? 없을 것이다. 이렇게 예상치 못하고 외부에서 발생한 이벤트인터럽트라고한다.

 

 

 인터럽트의 종류는 다음과 같다.

  1. 입 출력(I/O)
  2. 클럭(Clock)
  3. 콘솔
  4. 프로그램
  5. Machine Check
  6. Inter-Process
  7. System Call 

 

일반적으로 7개 종류의 인터럽트가 있지만, 인터럽트의 처리과정은 대략적으로 다음과 같을 것이다.

 

 

[그림 1] 인터럽트 처리 과정

 

 

 위 과정을 좀 더 자세하게 설명해보면 다음과 같다. 지금 사용자는 어떤 프로그램을 실행시키는 중이다. 그 실행 중인 프로그램 즉 프로세스를 P1이라고 가정하자. 현재 CPU는 Process1을 할당받아 작업중이다. 그런데 입출력 인터럽트가 발생했다.

 

 

 

 

 그러면 운영체제 인터럽트가 발생했다는 것을 감지하여 커널이 개입하여 현재 진행중인 프로세스를 중단시킨다. 그리고 프로세서(CPU)는 P1이 ASLEEP 상태이기 때문에 준비 상태에 있는  다른 프로세스를 가져와서 할당받을 것이다. 본론으로 돌아와서, 커널에 개입하여 프로세스를 중단시키면, 커널은 P1이 중단되기까지의 실행도, 작업률 등의 정보를 P1을 제어하는 PCB1에 저장할 것이다. 이 과정을 Context Saving이라고 한다.

 

 

 

 

 그리고나서 커널은 인터럽트 핸들링을 이용하여 현재 인터럽트가 어디서 발생했고, 인터럽트의 원인이 무엇인지를 파악한다. 입출력 인터럽트라고 가정을 해보면, 장소는 로그인 창(마우스 클릭)을 클릭한 곳이 되겠고, 원인은 로그인을 하지 않았기 때문에 게임이나 웹에서의 다음 기능을 실현할 수가 없음이 될 것 이다. 

 

 

 인터럽트 핸들링을 이용해서 장소와 원인을 파악했다면, 인터럽트 서비스 루틴을 이용하여 어떤 서비스 루틴을 호출할지 결정하는 작업을 할 것이다. 따라서 현재 발생한 인터럽트의 종류가 입출력이라고 가정한다면, 커널은 인터럽트 서비스 루틴을 이용하여 입출력 인터럽트 서비스를 제공할 것이다. 그리고 인터럽트 처리가 완전히 끝나면 Alseep 상태에 있던 P1은 Ready 상태로 Wake up 될 것이다.

 

 그리고 추 후에 프로세스 스케줄링에 의해 준비 상태에 있던 P1이 CPU에 할당받아, CPU가 P1 작업을 실행할 경우, CPU는 커널에 있는 PCB1으로 부터 전에 저장했던 Process1 백업 정보를 복구하여 이어서 작업을 실행하면 된다. 이 과정을 우리는 Context Restoring이라고 한다.

 

 

2. 문맥 교환(Context Switching)

문맥교환(Context Switching)Context SavingContext Restoring을 합친 것을 말한다. 정리하자면 인터럽트가 일어날 때 지금까지의 실행 정보를 해당 프로세스 제어 블록에 저장하고, 인터럽트 처리 후 스케줄링에 의해 차례가 다시 왔을 때 프로세스 제어 블록에 있던 백업 정보를 복구하여 다시 이어서 하는 작업을 말하는 것이다. 하지만 문맥 교환을 많이 하면 비용이 증가할 뿐더러 오버헤드가 발생하기 때문에 우리는 스레드라는 것을 관리하여 오버헤드와 비용을 줄이는 작업을 해야한다.

'운영체제 > 프로세스' 카테고리의 다른 글

프로세스 스케줄링 알고리즘, FCFS  (0) 2021.01.15
프로세스 스케줄링의 목적, 기준, 단계, 방법  (0) 2020.10.28
스레드 관리  (0) 2020.10.07
프로세스 관리  (0) 2020.10.05