728x90
반응형
1. Interrupt란?
- Interrupt의 사전적 정의 : 방해하다, 중단시키다
- 사전적 정의 그대로 CPU가 일을 수행하는 도중 하드웨어 장치 등에서 발생한 입출력과 같은 예기치 못한 상황을 CPU에게 알려 먼저 예외상황을 처리하도록 하는 것.
2. Interrupt 사용이유
- 한번에 한가지 일을 수행할 수 있는 CPU를 잠시 중단시키고 급한 Interrupt를 먼저 처리한 후 이전에 수행하던 일을 다시 수행하여 CPU의 효율을 높이기 위해 사용한다.
- 입출력 연산의 속도는 CPU의 명령 수행 속도보다 현저히 느리다. 하지만 한번에 한가지 일밖에 수행할 수 없는 CPU를 입출력 연산이 끝날 때까지 기다리며 놀게하면(월급루팡) 효율이 떨어지니 연산 결과가 나오기 전에는 CPU가 할 일을 하다가 Interrupt가 발생하면 하던일을 저장하고 잠시 멈추고 Interrupt를 처리한 후 다시 이전에 하던 일을 수행하도록 해서 CPU 사용 효율을 높이기 위해 사용한다.
- 비유를 해보자면 비싼 돈 주고 고용한 직원이 월급루팡 하면 돈아까우니까 일을 계속 시키고있다가 내가 급하게 처리 할 일이 생기면 그때 잠시 불러서 내가 시킨 일(인터럽트)을 먼저 수행하고 내가 시킨 일을 끝내면 다시 돌아가서 원래 처리하던 일을 하도록 해서 한명으로 돌려막기 하는 방식이라고 생각하면 편할 것 같다
3. Interrupt 종류
- Asynchronous(비동기적) = 외부인터럽트 = Hardware Interrupt
- 우리가 흔히 말하는 인터럽트
- 하드웨어 인터럽트 종류
- 전원이상 인터럽트(Power fail interrupt) : 정전 혹은 Power등 전원 공급의 이상
- 기계 착오 인터럽트(Machine check interrupt) : CPU의 기능적인 오류
- 외부 신호 인터럽트(External interrupt) : 타이머에 의한 인터럽트(자원이 할당된 시간이 다 끝난경우), 키보드로 인터럽트 키를 누른경우(Ctrl+Alt+Delete) 가 있다.
- 입출력 인터럽트(I/O interrupt) : 입출력 장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 할 경우
- 하드웨어 인터럽트에는 Non-Maskable Interrupt(NMP)와 Maskable Interrupt가 있다.
- Interrupt Mask란 Interrupt가 발생했을 때 요구를 받아들일지 말지 지정하는 것을 말한다.
- Non-Maskable Interrupt(NMI) : Interrupt Mask에 영향을 받지 않는, 가장 우선순위가 높은 Interrupt이며 소프트웨어나 입출력장치에 의해서 생성되는 인터럽트 발생을 우회하고 최고 우선순위를 갖기 때문에 마스크 불가능한 인터럽트라고 불린다. 정전, 기억장치 오류 등 심각한 오류상황에서 발생되며 거부할 수 없다.
- Maskable Interrupt : Interrupt Mask를 설정 가능하다. 즉 심각하지 않다는 뜻 그래서 거부할 수도 있음
- Synchronous(동기적) = 내부 인터럽트 = Software Interrupt
- 프로그램 검사 인터럽트
- 잘못된 명령실행(Division by zero, page fault)
- 명령 실행 예외(exception)
- Trap : 오류 또는 사용자 프로그램의 특정 요청 때문에 발생하는 소프트웨어 생성 인터럽트. 트랩은 System call이라는 특수 연산을 실행하여 인터럽트를 요청한다.
구글링도 해보고 여러 블로그를 찾아봤지만 소프트웨어 인터럽트에 대한 설명이 각각 다른 것 같다. 어떤 사람은 인터럽트를 외부, 내부, 소프트웨어로 나눠서 보기도 하고 어떤 사람은 외부와 내부로 나눠서 보기도 했다.
나는 관점을 동기적이냐 비동기적이냐로 구분했는데, Hardware interrupt는 예기치 못한 상황에서 발생하는 interrupt이기 때문에 비동기적이라고 봤고 그중에 우선순위를 따져 NMI냐 MI냐를 따지고 Software interrupt는
사용자가 특정 요청을 해서 발생하는 Interrupt이며 동기적이기 둘을 따로 나눴다.
그리고 스프트웨어 인터럽트 내에서도 trap과 exception으로 나누고 exception내에서도 trap, fault, abort로 구분을 하는 블로그도 있었다. 내가 지금 공부하는 운영체제(흔히 공룡책)에서는 소프트웨어 인터럽트와 트랩을 같은 개념으로 보는 것 같다. 하지만 inter CPU에서는 exception의 분류를 trap(INT 명령으로 명시적 발생), fault(Division by 0), abort(복구 불가능한 에러)이렇게 3가지로 나눠서 분류한다. 이것은 intel CPU만의 분류 방법이겠지만 OS에서 통용 되는 Software Interrupt에 대해 조금 더 자세하게 알고싶다. 이 부분에 대해서 아시는 분은 댓글 부탁드립니다!
4. Interrupt 순서
- CPU는 항상 프로그램 실행 중
- 인터럽트 요청(Interrupt Request)
- 프로그램 실행 중단 : 현재 실행중이던 Micro operation까지 수행[Micro operation이란 - 명령(Instruction) 한개를 실행하기 위해 그 명려이 기억된 위치를 파악하고 그 곳을 찾아가서 명령을 꺼내온 후 무슨 명령인지 번역하고 그 명령을 처리할 장치를 동작시키는 드의 여러 동작 과정을 거치는데 그 동작과정 하나 하나를 Micro operation이라고 한다.]
- CPU가 실행중이던 프로그램의 상태 보존 : 스택에 PCB(Process Control Block)[PCB - 운영체제가 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스], PC(Program counter) [CPU가 다음에 실행시켜야 할 명령의 주소를 담고있는 레지스터]를 저장
- 인터럽트 원인 판별 : 인터럽트를 요청한 장치를 식별하고 Interrupt vector 테이블을 참조하여 호출 할 인터럽트 서비스 루틴(ISR) 주소값을 얻는다.
- 인터럽트 서비스 루틴 처리 : 인터럽트를 수행하는 과정에서 현재 실행하고 있는 인터럽트보다 더 높은 우선순위의 인터럽트가 발생하면 재귀적으로 2~5과정을 수행하고 다시 돌아와서 인터럽트를 수행한다.
- 프로그램 상태 복구 : return_from_Interrupt 명령어를 실행하여 4번 과정에서 저장해둔 값을 불러와 인터럽트 전 CPU가 수행하고 있던 실행 위치로 복구한다.
- 이전에 수행하던 일을 다시 실행한다.
4. Interrupt 예시
Division by zero 즉 0으로 나눴을 때 내부 인터럽트가 실행된다길래 한번 실제로 해봤다. 0으로 나누면 왜 안되나 해서 찾아봤는데 컴퓨터는 나눗셈을 할 때 뺄셈의 반복으로 구현했기 때문이라고 한다. 8%2를 하면 8-2-2-2-2를 하면 0이되기 때문에 몫이 4가 나오는 방식으로 근데 어떤 숫자에서 0을 빼봤자 계속 0이 되어 피제수(6%2면 6이 피제수 2가 제수)가 0이 될때까지 제수를 빼야하니까 계속 -0을 하면 무한루프가 되어 메모리 과열로 터진다는 그런 뜻?
CS를 공부하고 기록하는 개인 공부 블로그입니다.
내용 중 틀린 부분 피드백 혹은 궁금한 점이 있으면 댓글로 남겨주시면 참고 및 답변 달아드리겠습니다🧐
728x90
반응형
'Computer Science > 운영체제' 카테고리의 다른 글
[OS/운영체제] Thread / 스레드 (1) | 2023.12.22 |
---|---|
[OS/운영체제] 동기 & 비동기 VS 블로킹 & 논블로킹 (1) | 2023.12.18 |
[OS/운영체제] IPC / Inter Process Communication (1) | 2023.12.18 |
[운영체제] Memory layout (0) | 2023.12.14 |
[OS/운영체제] 프로세스 / Process (0) | 2023.12.13 |