본문 바로가기

별걸다하는 IT/운영체제 OS

인터럽트의 종류(Types of Interrupt)- trap, exception, timer, SVC 등 외부 인터럽트, 내부 인터럽트, SW인터럽트

반응형

운영체제 OS 완전정복 목차

인터럽트는 크게 외부 인터럽트, 내부 인터럽트, 소프트웨어 인터럽트로 나눌 수 있어요

 

외부 인터럽트

@전원 이상 인터럽트

말 그대로 외부로부터 발생하는 것이 외부 인터럽트예요.

예를 들어, 서버가 갑자기 전원이 끊겨서 중단됐다! 이러면 큰일나잖아요. 이럴 경우 여분의 배터리를 서버에게 줘서 바로 죽지 않고 복구되거나 해결될때까지 서버는 돌아갈 수 있게 해줘요. 파워 공급이 갑자기 떨어지면 이를 감지하고 CPU에게 인터럽트를 겁니다. 이렇게 외부에서 이를 느끼고 인터럽트를 걸기 때문에 갑자기 꺼져서 메모리가 날라가는 불상사를 막는 서버 관리가 가능해지는거죠! 이것을 전원 이상 인터럽트 (power fail interrupt)라고 합니다. 쉽죵~?

 

@I/O 인터럽트

자 그 다음은 우리가 운영체제나 컴퓨터 구조 과목에서 많이 언급되어서 나름 익숙한 I/O interrupt(입출력 인터럽트)예요. '프로세스 상태를 변화하면서 context switching할 때 일어나는~' 사실 이미 다 얘기해서 알고 있는 인터럽트입니다.

 

다시 예시를 들어서 쉽게 말하면~!!

어떤 일을 진행하는 데 I/O 장치 수행이 필요한거죠(I/O는 input and output을 말해요, 키보드나 마우스, 프린터기 등등), 어떤 사이트에서 정보를 얻으려면 로그인이 필요한 사이트들이 있죠?

이처럼 키보드로부터 아이디나 패스워드 등을 입력받아야 하는 로그인이나? 또는 프린트에서 출력을 하는게 필요하다던가? 뭐 엄청난 수학 계산을 처리하려고 하는 데 그에 필요한 변수 입력이 필요하다던가? 저 디스크에 저장되어 있는 엑셀을 읽어와야 한다던가 여러가지 상황이 있을 수 있겠죠!

그러면 CPU는 쿵짝쿵짝 작업을 하다가 I/O장치에게 일을 토스합니다! 그리고 시간 아까우니까 다른 애를 처리하고 있어요. (CPU는 비싼 자원이니까 놀면 안돼요)

 

이러다 I/O장치가 '얘~ 나 니가 맡긴 일 다 끝냈어 다시 줄게~' 이러고 CPU한테 딱 신호를 걸어요.

이게 대표적인 I/O interrupt입니다. 쉽죵~ 어려운 말로 되어있어서 그렇지 운영체제나 컴퓨터 구조나 사실 별게 없어요ㅎㅎ 제가 설명을 잘하는걸수도..?ㅎㅎ죄송...

 

저렇게 일 작업을 다 끝났다고 말걸때도 있지만, 입출력 처리 작업을 하다가 'CPU야 너가 가지고 있는 정보가 이거 처리하는 데 필요해' 하면서 CPU를 부를 수도 있겠죠 이것도 I/O interrupt. 즉 입출력장치가 (I/O장치) CPU를 부를 때 사용하는게 I/O interrupt예요.

 

@타이머 인터럽트

외부 인터럽트 중에 또 타이머 인터럽트(timer interrupt)라고 하는 것이 있어요. 뭐 이리 종류가 많아 하실수도 있는데 사실 인터럽트는 CPU에게 '내 말좀 잠깐 들어봐 그거 멈추고 잠깐 이것 좀 해결해줘' 하는게 인터럽트인데 그냥 종류별로 상황별로 나눠놓은거죠 죠. 자 저는 또 쉬운 이해를 위해 예시 하나를 생각해냅니다..ㅎㅎㅎ

int i =0;
while(i<10) //i가 10보다 작을 경우 반복해서 괄호 안을 수행
{
	std::cout<<"hello"<<endl; //hello 출력
	i++; //i를 1 증가
}

자 이렇게 코드를 짜는데 내가 실수로 i++; 이 부문을 깜박하고 안넣었다고 생각해봅시다. 그러면 i가 평~생 10보다 작을테니 절대 끝나지 않는 무한루프에 빠지겠죠. 그럼 이거를 우뜨케요... 평생 끝나지도 않는 이 프로세스를 붙잡고 있을거잖아요. 컴퓨터를 강제 종료하는 방법이 있긴하겠지만.. 그러면 매우 곤란하겠죠? 자 방법은 얘가 스스로 해결할 수 없으니까 interrupt가 걸리면 되겠죠!!

 

그래서 지금 현재 I/O장치 중에 뭐 여러분이 실제로 사용하는 I/O장치가 아니라서 잘 모르겠지만 가장 중요한 I/O 장치 중에 하나가 타이머라는 것이 있어요. 주기적으로 CPU한테 타이머가 expire됐다고 interrupt를 걸어줍니다. 그래서 주기적으로 운영체제가 수행되는 거예요. 그 주기가 얼만지도 여러분들은 알아야해요~~. 요즘은 100hz로 인터럽트를 걸어서 알려줍니다. 1초에 100번 즉 이걸 시간 간격으로 나누면 10ms마다 interrupt를 걸어줍니다. 10ms마다 운영체제가 수행이 되는 것!!! 그래서 이 무한루프를 도는 프로세스를 빠져나와 다른 프로세스로 바꿀 수 있게되는겁니다~

 

더 쉬운 이해를 위해 상황극을 해보자면, 무한루프를 도는 프로세스는 CPU가 명령어를 읽어서 실행하고 빠져나오지 못하고 계속 반복하고 있어요. 그러다가 10ms후에 timer interrupt가 걸리면 지금 현재 이 프로세스를 수행되고 있는 상태를 저장하고 timer interrupt 처리를 하는거죠. 그 다음 운영체제가 자기가 할 일 다 했으면 응용프로그램 실행시켜주는데 지금 현재 무한루프 도는 애가 있고 다른 프로그램이 있으면 이제 다른 애를 수행시켜주겠죠 왜냐면 아까 무한루프는 10ms돌았잖아요? 이렇게 누구를 실행시켜줄지를 고르는게 결국 스케줄링이니까 우리가 아까 배웠던 스케줄링이랑 자연스럽게 연관~ 기억안나면 링크 눌러서 다시 보고오기 ㅎㅎ 

 

[운영체제]스케줄링과(Scheduling algorithm & criteria) 디스패쳐 dispatcher란?

운영체제 목차 Process Scheduling 프로세스 스케줄링 이번에는 스케줄링에 대해서 다뤄볼거예요 스케줄링에서는 이전의 포스트에도 언급한 적이 있는데 Ready queue 중에 실행시킬 프로세스를 하나 선택하는 것을..

jhnyang.tistory.com

 

내부 인터럽트

@Exception 인터럽트, trap

자 내부 인터럽트를 exception이라고 합니다. 이게 뭔지 예를 들어서 쉽게 설명해볼게요~

CPU가 어떤 명령어를 수행하려고 했는데 그 명령어를 수행할 수 없을 경우가 있어요. 그러면 자기는 할 수 있는게 없다고 '얘 운영체제야 나좀 도와줘'하고 자기 자신한테 interrupt를 겁니다. 자기 자신한테 거는 interrupt를 exception이라고 해요. 내가 처리할 수 없는 예외상황이 발생한거죠. 그래서 exception!

 

제일 대표적으로 '0으로 나눈다' 그런 명령어가 들어왔다고 합시다. 그럼 수행할 수 없잖아요? 0으로 나눌 수는 없으니까요 ㅎㅎ 이와 같은 상황일 때 Exception을 거는거죠!. 운영체제가 처리하도록자기 자신한테 거는 것을 exception이라고 했는데 이걸 trap이라고 하기도 합니다. 하튼 CPU가 자기 자신에게 거는 interrupt를 trap이라고 표현을 하는데 그런 trap을 발생시켜주는 게 내부 인터럽트예요.

 

S/W 인터럽트

@SVC

"Supervisor calls are instructions in application programs that switch a computer to the supervisor state."

 

소프트웨어 인터럽트에서 대표적으로는 SVC 즉 supervisor call이 있어요. supervisor 이 감독자라는 뜻이죠? call은 호출! 즉 명령어예요. 즉~ SVC는 프로세서 명령어로 수행시 문제가 생기면 프로세서가 운영체제를 관리감독하는 프로그램(=supervisor! =결국 운영체제)에게 제어권을 넘겨서 해결하는 것을 말합니다. 이렇게 말하면 느므 추상적이니 이번에도 역시 예시를..ㅎㅎ)

 

자자자 만약에 application program에다가 누가 악의를 갖고 모든 디스크에 저장되어 있는 정보를 싹 다 지워버리라는 코드를 짰다고 가정합시다. 이런거 수행되면 큰일나겠죠?! 즉 모든 코드가 내부에 접근하게 허락해주면 이거는 아주 큰 문제를 발생하는거예요. 그래서 우리는 supervisor를 둡니다. application이 직접 내부 접근 하는 것을 막는거예요. (supervisor는 여러 중요한 역할을 해요~) 그래서 application에서 파일을 직접 읽고 쓰게 하는 것이 아닌!! 운영체제에게 야 나 이거 필요하니까 확인해보고 좀 읽어다줘~ 이렇게 !! 수행하게 되는거죠. 그럼 application이 당연히 supervisor를 불러야겠죠 이것이 바로 supervisor call 즉 SVC입니다. 이렇게 함으로써 I/O protection도 수행이 되는거죠 ㅎㅎ 

그림을 보면 user task에서 하드웨어 주변기기에 뭔가를 하고 싶지만 할 권한이 없죠

즉 user task가 hardware에 직접적으로 접근해서 일을 수행하지 않는 걸 그림으로 볼 수 있어요. SVC 명령어로 kernel이 중간에서 수행해다 주는 것을 알 수 있어요! 용어가 kernel이 나왔다가 supervisor가 나왔다가 운영체제가 나왔다가 헷갈릴 수 있는데 kernel mode = supervisor mode입니당. 결국 다 운영체제를 말하는거~ 

 

오늘 포스팅은 여기까지!

도움이 됐다면 공감or댓글or 광고보답은 우떤가요?

포스팅을 작성하는데 혼을 태웠답니다..ㅎㅎㅎㅎ! 다음 더 질좋은 포스팅에서 봐요!!

 

반응형