[운영체제] 인터럽트 개념
https://www.youtube.com/watch?v=V4lp6iGoUFY&list=PLXvgR_grOs1DGFOeD792kHlRml0PhCe9l&index=5
인터럽트의 종류
입출력 인터럽트 (I/O interrupt)
- 입출력 장치가 데이터 전송을 "요구" 하거나, 전송이 "끝나" 다음 동작이 수행되어야 할 경우
- 입출력 데이터에 이상이 있는 경우
내부 인터럽트
잘못된 명령이나 잘못된 데이터를 사용할 때 발생하며 Trap이라 부른다.
프로그램 검사 인터럽트 (Program Check Interrupt)
- Division by zero : 컴퓨터의 연산은 덧셈,뺄셈으로 작동한다. 0으로 나눌 경우 무한루프에 빠지게 되며 CPU 가 하드웨어적 손실을 입게 됨
- Overflow/Underflow
- 기타 Exception
컴퓨터의 핵심은 CPU, 주기억장치 RAM과 함께동작 (밀접한 연관)
이 둘 간의 CPU 가 RAM을 직접 통제할 것이냐 간접으로 할것이냐 두 가지 선택지가 있는데, 현재는 간접적인 방식이 채택 되었다.
여기서 사용되는 것이 메모리 매니저이다.
메모리 매니저
메모리 매니저 (칩 연산장치 기능)
메모리매니저를 예전에는 "브릿지 칩셋" 이라고 불렀다.
브릿지가 하는 일은 IO management , RAM과 IO 관리.
CPU-> 메모리 매니저 -> RAM (역도 성립) 의 순서로 실행이 이루어지는데 이 메모리매니저가 입출력 관리자이다.
CPU 와 RAM의 성능을 최대화 하려면, 메모리매니저도 성능이 좋아야한다. 그런데 이 메모리매니저의 영향을 받다 보면 의존성이 자꾸 생기니, CPU가 RAM까지 컨트롤 하는 방향으로 진화하게 되었다. 현재는 아래와 같이 Intel Core에서 DDR5, DDR4 (RAM) 까지 관리하는 것을 확인할 수 있다.
인터럽트 동작 순서
인터럽트가 발생하면 하던 일을 멈춘다. CPU 가 연산을 하고 있었는데 연산을 중단(일시정지)한다. 인터럽트가 발생하면 인터럽트 처리 코드가 작동한다. 그 처리 코드를 ISR이라고 부름 (각 인터럽트 마다의 서비스 루틴을 작동) 코드가 완료될 때까지 정지.
1. 인터럽트 요청
2. 프로그램 실행 중단
3. 현재의 프로그램 상태 백업 : Process Control Block, PC(Program Counter) 등
4. 인터럽트 처리루틴 실행 : 인터럽트를 요청한 장치를 식별한다
5. 인터럽트 서비스 루틴 (ISR) 실행
IO 성능의 체감
Hello World를 출력할 때 하드웨어가 제어하는 Driver는 비디오카드.
내가 Hello World를 출력하는데, 출력할 것은 Data이며 종착지는 비디오 카드(주변기기) 이다.
어떻게 전달할 것인가에서 차이가 생긴다.
RAM이 이런 데이터를 출력할 때는 Printf같은 함수를 이용하는데, 내부(Kernel)에서 SystemCall을 한 뒤(항상 그런 것은 아니지만 RAM 에게 Hello World가 전달된다). 이렇게 되면 모니터에 Hello World가 출력되는 데에 많은 단계를 거쳐야 한다.
고성능 장치가 동작할 때는 CPU 혼자 모든 일을 처리하지 않고, Kernel 에 함수를 Call 한 이후 바로 user에게 반환한다. 그럼 이 루틴이 실행되는 동안 (반환하는 동안) 출력장치에 데이터를 찍어 처리 속도가 빨라진다.