Skip to content

Latest commit

 

History

History
28 lines (19 loc) · 3.54 KB

File metadata and controls

28 lines (19 loc) · 3.54 KB

인터럽트

실생활에서의 예

Screenshot from 2020-10-06 21-00-40

A가 친구와 통화를 하고 있습니다. 통화를 하는 도중에 주문했던 짜장면이 옵니다. 그러면 A는 친구에게 잠시 기다려달라고 하고 짜장면을 받으러 가죠. 그리고 다시 돌아와 통화를 이어갑니다. A가 하던 통화가 배달원의 도착신호에 의해 통화가 방해되었는데 이 신호를 운영체제에서는 인터럽트라고 합니다.

시스템 내부

시스템 내부도 이와 비슷한데 대표적인 I/O인터럽트를 통해 상세하게 알아보겠습니다.

Screenshot from 2020-10-06 21-00-50

동작 과정

  1. CPU가 A 프로세스를 실행하는 중에 사용자가 마우스를 움직입니다.
  2. 마우스나 키보드같은 입출력 장치에는 각각의 컨트롤러가 있는데 이 컨트롤러가 CPU에게 마우스 위치를 새로 출력해달라는 신호를 인터럽트 라인에 보냅니다. 이 신호를 인터럽트 라고 합니다.
  3. CPU옆에 붙어있는 인터럽트 라인이 신호가 들어왔는지 확인합니다. 참고로 CPU가 명령을 한번 수행할 때 마다 인터럽트 라인을 확인해서 인터럽트가 들어왔는지 체크합니다
  4. 인터럽트가 들어온걸 확인했으니 A프로세스를 중단하고, 인터럽트 처리가 끝나면 다시 A 프로세스작업을 진행해야하니 A 프로세스의 상태를 PSW(Program Status Word)라는 레지스터에 저장합니다. PSW는 명령어의 수행을 조절하고, 프로세스 상태에 대한 여러가지 정보를 갖는 레지스터입니다.
  5. 이 때 저장되는 프로세스의 상태에는 수행해야할 메모리 주소를 담고있는 PC와 그 외에 연산을 수행중인 레지스터의 정보들이 있습니다.
  6. 정보를 다 저장하고 나면 인터럽트를 처리해야하는데, 이 인터럽트를 처리하는 함수는 운영체제의 커널내부에 있습니다. 이 커널내부에는 중요한 시스템함수들이 많기때문에 아무나 들어갈 수 없습니다. 들어가려면 평상시엔 1로 되어있는 mode bit이라는 녀석이 0이 되어합니다. 따라서 인터럽트가 발생하면 하드웨어가 mode bit을 0으로 바꿔주어 커널내부에 들어갈 수 있게 합니다.
  7. 커널 내부로 들어왔으면 인터럽트를 처리해야하는데, 인터럽트 종류에 따라 실행해야하는 함수의 주소가 다릅니다. 키보드 인터럽트, 마우스 인터럽트의 실행주소가 다르기 때문에 인터럽트 벡터 라는 녀석이 어느주소로 가야하는지를 알려줍니다.
  8. 마우스 인터럽트를 처리하기 위한 주소에 도착하면 ISR(Interrupt Service Routine)인터럽트 처리 루틴 이라는 함수를 실행을하여 인터럽트를 처리합니다
  9. 마우스가 화면에 출력되면 인터럽트의 처리가 완료된것이므로 커널에 접근하지 못하게 하기위해 mode bit을 다시 1로 바꿔줍니다.
  10. 또 PSW 에 저장해놨던 레지스터들의 상태를 가지고와서 A프로그램을 마저 실행하게됩니다.

I/O뿐만아니라 대부분의 시스템흐름이 인터럽트를 통해 이뤄집니다. 따라서 현재 우리가 사용하는 운영체제는 인터럽트 기반 시스템이라고 할 수 있습니다.