-

[운영체제 Step 5] - 인터럽트(Interrupt) 본문

CS/운영체제

[운영체제 Step 5] - 인터럽트(Interrupt)

흣차 2021. 12. 3. 21:05
728x90
반응형

인터럽트를 정희해보면 "예상치 못한, 외부에서 발생한 이벤트" 입니다.

Unexcpected, external events라고도 부릅니다.

가장 대표적인게 I/O interrupt입니다.

예를들어 게임을 하는데, 게임 프로세스가 돌고있다고 합시다. 그럼 우리가 언제 총을 쏘고 언제 클릭을 할 지 프로세스가 알고 있나요? 그것을 I/O interrupt라고 합니다.

그 외에도 다양한 interrupt가 있지만 중요한건 인터럽트가 뭔지 알고 있어야 합니다.

그럼 이 인터럽트가 발생하면 어떻게 되는지 처리 과정을 알아보겟습니다.

프로세스가 돌고 있는데 누가 쿡 찌르면 어떻게 하나요?

인터럽트가 발생하면 이게 왜 발생했는지, 무엇이 쿡 찔렀는지 아니면 이걸 무시할건지를 결정해야 합니다.

인터럽스 서비스 할 것으로 결정을 했다면 실제로 행동을 취할 것입니다.

이것을 바로 인터럽스 서비스 루틴이라고 부릅니다.

 

더 쉽게 이해해보겠습니다.

프로세스 Pi가 실행되고 있다고 가정하겠습니다.

그런데 어떤 인터럽트가 생겨서 Pi를 중단시키게 되었습니다.

그 때 Context saving이 발생합니다. 뜻은 문맥 저장이란 의미입니다.

예를 들어 공부를 하고 있는데 누가 쿡 찔러서 어딜 나가야 한다면 책갈피를 꽂아야 합니다.

즉, 어디까지 작업을 하고 있었는지 흐름을 저장해야 한다는 의미로서 Context saving을 실행합니다.

그럼 커널이 개입하여 인터럽트가 어디서 발생하였고 왜 발생했는지 원인을 알아야 합니다.

이것을 인터럽트 핸들링이라고 합니다.

그리고 커널에는 지금 ISR-1, ISR-2가 대기중이라고 해봅시다.

그럼 만약 인터럽트가 발생한다면 서비스가 끝나게 되었을 때 실행되면 되겠지 라고 생각할 수 있겠지만

저희 시스템은 그렇지가 않습니다.

기존에 Ready상태에 있던 프로세스들 중 하나가 실행되기 때문에 Pi가 들어올 수도 있지만 다른 프로세스인 Pj도 들어올 수 있게 됩니다.

자 그럼 Pj가 들어온다고 해볼게요

Pj가 들어오면 아까 Pj가 멈출 때 끼워놨던 책갈피를 다시 피게되겠죠

그리고 프로세서 안에 들어가서 Pi대신 Pj가 들어가고 자신의 일을 수행하게 됩니다.

 

그렇다면 프로세스가 들어오고 나올 때 Context Switching(문맥 교환)이 일어나게 됩니다.

흐름을 저장하는 것의 의미이구요. 프로세스와 관련된 정보들의 집합이라고 생각하면 됩니다.

이 프로세스의 정보는 총 2군데에 저장이 됩니다.

바로 CPU와 메모리입니다.

CPU안에는 레지스터가 있다고 했었죠??

일종의 메모리인데 이 메모리 그리고 메인 메모리가 있었죠.

CPU가 어떤 작업을 처리할 때는 반드시 데이터를 레지스터에 올린 후에 레지스터에 있는 것으로 작업을 하게 됩니다.

그래서 레지스터에 저장되어있는 값이 있겠죠. 이것을 Register Context라고 하고 그 외의 나머지 정보들(Code, data, stack, pcb)는 메모리에 저장됩니다.

 

자 우리가 어떤 자원을 뺏긴거죠?

CPU에 뺏겼죠? 우리가 뺏긴 자원은 CPU에서 일을 하고 있다가 시간이 지나서 Pi를 뺏긴거죠?

그럼 CPU에 저장되어 있던 것들이 따로 저장되어야할 필요가 있게됩니다.

그렇게 Context를 메모리에 저장하는 것. 즉, Register context를 저장하는 것을 우리는 Context saving이라고 부릅니다.

그러다 다시 Pi가 본인 차례가 되어서 아까 저장되어 있던 Register값을 CPU에 다시 가져놓아야 겠죠?

그것을 우리는 Context Restoring이라고 합니다.

마지막으로 이 두개를 묶으면 Context switching이라고 부릅니다.

무슨 의미냐면, CPU에서 Pi가 일을 하고 있다고 하겠습니다.

그럼 Pi가 자기 시간이 끝났어요. 그럼 나와야겠죠?

이 때 Context saving이 PCBi자리에 일어나게 되고 그 다음 차례는 Pj가 들어올 때는 저장되어 있던 PCBj가 복구되어야 합니다. 이 때 Context restoring이라고 합니다. 이처럼 실행 중인 프로세스의 context를 저장하고 context를 복구하는 일을 Context Switching이라고 부르며 이것은 커널의 개입으로 이루어집니다.

 

그래서 이 Context switching이 소요되는 비용이 존재합니다.

이 컨텍스트 스위칭은 자주 일어날까요???

네 자주 일어납니다. 따라서 OS의 성능에 아주 큰 영향을 줄 수 있으며 자주 일어나기 때문에 비용도 증가합니다.

때문에 불필요한 Context Switching을 줄이는 것이 중요하겠으며 이를 위해 스레드(thread)가 존재합니다.

728x90
반응형
Comments