뭉크테크
인터럽트에서 Direct X까지 본문
인터럽트
사전적 의미로 '끼어들다', '중단시키다' 정도의 의미를 가지는 말로 프로그램을 실행하는 도중에 예기치 않는 상황이 발생할 경우 현재 실행중인 작업을 멈추고 발생된 상황을 처리한 후 다시 실행중인 작업을 복귀하는 것을 말한다.
인터럽트의 종류
외부 인터럽트
- 전원이상 인터럽트(Power faul interrupt): 말 그대로 정전 + 절전모드, 파워이상등
- 기계착오 인터럽트(Machine check interrupt): CPU의 기능적 오류
- 외부신호 인터럽트(External interrupt):
- 타이머에 의한 인터럽트: Preemptive 개념을 생각하면 된다. 자원이 할당된 시간이 다 끝난 경우
- 키보드로 인터럽트 키를 누른 경우: Control + Alt + Delete => 작업 관리
- 외부장치로부터 인터럽트 요청이 있는 경우: I/O 인터럽트 아님. 다른 개념임.
- 입출력 인터럽트(I/O interrupt):
- 입출력 장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 할 경우
- 입출력 데이터에 이상이 있는 경우

- CPU는 컴퓨터의 핵심적인 부품인데 CPU는 혼자서 작동하지 않고 주기억 장치 RAM과 밀접하게 연결되어 있다.
- 여기서 CPU가 RAM을 직접 통제할것이냐 아니면 간접적인 방식을 취할 것이냐인데
- 엄청 오래 전에는 직접 통제를 했지만 지금은 간접적인 방식을 사용하는데 무엇을 이용하여 사용하냐면 메모리 매니저(입출력 관리자)라는 칩을 이용한다.
내부 인터럽트
- 잘못된 명령이나 잘못된 데이터를 사용할 때 발생하며 Trap이라고 부른다.
- 프로그램 검사 인터럽트
- Division By Zero
- 나누기는 빼기 연산의 반복인데, 예를 들어, 5에서 2를 나눈다고 하면, 5에서 2를 반복적으로 빼다가 나누는 값(2)보다 결과 값이 작은 경우 그만 두는 데 이때 반복한 횟수를 우리는 몫 이라 부르고, 결과 값을 우리는 나머지라 부른다. 그런데 만약 0으로 나눈다고 하면, 5에서 0을 반복적으로 빼야하는 과정이 무한 연산을 초래하기에 안된다는 것이다.
- Overflow / Underflow
- 기타 Exception
- Division By Zero
- 소프트웨어적인 내용이나 분류상 인터럽트가 아니다.
소프트웨어 인터럽트(SuperVisor Call)
- 사용자가 프로그램을 실행시키거나 감시 프로그램을 호출하는 동작을 하는 경우
- 소프트웨어 이용 중 다른 프로세스를 실행시키면 시분할 처리를 위해 자원 할당등의 동작 수행
인터럽트 동작 순서
- 인터럽트 요청 -> 처리코드 작동!(ISR = 인터럽트 서비스 루틴) -> 이 코드가 완료될때 까지 정지!
- 프로그램 실행 중단
- 현재 실행 중이던 Micro Operation까지 수행된다.
- 현재 프로그램 상태 보존
- PCB(Process Control Block), PC(Porgram Counter)등
- 인터럽트 처리 루틴 실행: 인터럽트를 요청한 장치를 식별.
- 인터럽트 서비스 루틴 실행:
인터럽트 원인을 파악하고, 실질적인 작업을 수행한다. 처리기 레지스터 상태를 보존한다. 서비스 루틴 수행 중 우선순위가 더 높은 인터럽트가 발생하면 또 재귀적으로 1~5를 수행한다. - 상태복구: 인터럽트 발생 시 저장해둔 PC를 다시 복구
- 중단된 프로그램 실행 재개: PC값을 이용하여 이전에 수행중이던 프로그램을 제거
인터럽트 우선순위
- 여러 장치에서 인터럽트가 동시에 발생하거나 인터럽트 서비스 루틴 수행 중 인터럽트가 발생했을 경우 우선순위를 따져서 처리.
- 전원이상 > 기계착오 > 외부신호 > 입출력 > 명령어 잘못 > 프로그램 검사 > SVC
- 일반적으로 하드웨어 인터럽트가 소프트웨어 인터럽트보자 우선순위가 높고 내부인터럽트보다 외부 인터럽트가 우선순위가 높다.
DirectX

- 좋은 CPU, RAM을 사도 안 좋은 메인보드를 사면 메모리 매니저가 안 좋기 때문에 CPU, RAM이 제 성능을 내기 어렵다.

- 과거의 Memory Manager를 Bridge Chipset이라고 불렸다.
- 그래서 과거에 좋은 메인보드를 사면, 메모리 관리 칩셉이 좋은게 들어가있었다.
- North Bridge: PCI-E, RAM, CPU I/O처리를 담당한다.
- South Bridge: PCI, USB, ISA, IDE, BIOS, Legacy등 주변기기 I/O를 담당한다.

- 그런데 옛날에는 대만에서 싼 메인보드가 많이 수출되었고, 그로 인해 인텔이 아무리 좋은 CPU를 만들어도 저런 메인보드때문에 제 성능을 낼 수 없었다.
- 그래서 인텔은 위 사진처럼 메모리를 직접 관리할 수 있도록 CPU 칩셋 설계를 변경하였다.

- 저번 포스팅에서 말했던 것처럼 API를 호출하면 write()가 커널 수준에서 System call이 일어나고 Data가 RAM에 들어간다. 이때 인터럽트가 발생하며,
- RAM의 Data를 주변기기에 이동시킬 때 인터럽트 발생하며, 이동 후, 끝났다고 인터럽트가 발생한다. 이는 너무 많은 단계를 거쳐서 성능이 떨어지고 너무 시간이 오래걸린다.
- 하지만 고성능 주변 기기를 사면 저 노란색 라인처럼 Driver한테 명령처리를 요구하고 바로 프로세스한테 반환한다. 반환하는 동안 전달된 명령을 주변기기가 처리해주기 때문이다.

- 과거 이야기를 해보면 xp시절에 위의 그림처럼 수많은 단계를 거쳐야 했다. 이러면 장점이 프로그램이 API에게만 맞추면 직접 주변기기를 제어를 안 해도 되었지만 단계가 많아 성능이 떨어질 수 있었다. 특히 많은 연산이 필요한 프로그램 같은 경우에 그렇다. 게임이 그럴 것이다.
- 만일 게임을 한다고 가정한다면 게임자체가 동작하는데 느릴 것이다. 이럴 때 API가 직접 System call을 커널에서 안하고 usermode단계에서 실행하여 Driver를 조작가능하게 한 인터페이스를 만들었는데 그게 DirectX다.
- DirectX는 I/O 성능을 극단적으로 끌어올릴 수 있는 인터페이스로 예전 GDI 엔진을 사용하던 방식을 Window Vista 이후로 DirectX로 변경이되었다. 이로 인해 이후 윈도우 운영체제는 3DX 가속기능이 없으면 OS가 작동이 안되는 구조로 변하게 되었다.
- 그리고 관련된 데이터들도 단계별로 거치면서 복사 반복이 이루어지는 것이 아닌, 관련 데이터가 담긴 메모리에 직접 접근 할 수 있는 장치를 만드는데 이를 DMA 라 한다.
출처
곰책으로 쉽게 배우는 최소한의 운영체제론 강의 | 널널한 개발자 - 인프런
널널한 개발자 | '넓고 얕게 외워서 컴공 전공자 되기' 강의를 끝낸 분들이 운영체제에 대해 좀 더 깊이 있는 공부를 할 수 있도록 제공되는 강의입니다., 운영체제도 널널한 개발자와 함께! 👨
www.inflearn.com
'운영체제' 카테고리의 다른 글
| 프로세스의 상태 변화 (0) | 2025.01.12 |
|---|---|
| CPU 예측이 가져올 수 있는 문제점 (3) | 2025.01.12 |
| CPU도 당신처럼 예측하고 미리 움직인다. (0) | 2025.01.12 |
| DMA를 알면 고성능 소켓이 보인다. (1) | 2025.01.12 |
| 컴퓨터는 3층집 (0) | 2025.01.11 |