IT 지식/운영체제

인터럽트와 DirectX

Security Engineer 2024. 8. 19. 00:12

인터럽트란?

  • 사전적 의미로는 '끼어들다', '중단시키다' 정도의 의미를 가진 말로 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 다시 실행중인 작업으로 복귀하는 것을 말한다.

 

인터럽트의 종류

  • 인터럽트의 종류는 외부 인터럽트, 내부 인터럽트, 소프트웨어 인터럽트로 나뉠 수 있다.

 

외부 인터럽트

  • 전원 이상 인터럽트(Power fall interrupt): 말 그대로 정전, 파워 이상 등
  • 기계 착오 인터럽트(Machine check Interrupt): CPU의 기능적인 오류
  • 외부 신호 인터럽트(External Interrupt)

- 타이머에 의한 인터럽트: Preemptive 개념을 생각하면 된다. 자원이 할당된 시간이 다 끝난 경우

- 키보드로 인터럽트 키를 누른 경우: 대표적으로 Control + Alt + Delete (전원 끄기, 작업 관리자)

- 외부장치로부터 인터럽트 요청이 있는 경우: I/O 인터럽트 아님!! 다른 개념이다.

 

  • 입출력 인터럽트(I/O Interrupt)

- 입출력 장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 할 경우

- 입출력 데이터에 이상이 있는 경우

- CPU가 메모리 매니저(입출력 관리자)를 통해 RAM을 간접적으로 통제할 때 발생 (과거에는 CPU가 RAM을 직접 통제하였지만, 현재는 메모리 매니저를 통해 간접 통제한다.)

그림1 - CPU의 RAM 통제 방식

내부 인터럽트

  • 잘못된 명령이나 잘못된 데이터를 사용할때 발생하여 Trap이라 부른다.
  • 프로그램 검사 인터럽트(Program check interrupt)

- Division by zero → 0으로 나누기

- Overflow / Underflow

- 기타 Exception

  • 소프트웨어적인 내용이나 분류상 인터럽트가 아니다!

 

소프트웨어 인터럽트(SVC: SuperVisor Call)

  • 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우
  • 소프트웨어 이용중 다른 프로세스를 실행시키면 시분할 처리를 위해 자원 할당 등의 동작이 수행된다.

 

 

인터럽트 동작 순서

  1. 인터럽트 요청
  2. 프로그램 실행 중단: 현재 실행중이던 Micro operation 까지 수행한다. → CPU 연산 중단(일시 정지)
  3. 현재의 프로그램 상태 보전: PCB(Process Control Block), PC(Program Counter) 등 → 현재 상태 백업
  4. 인터럽트 처리루틴 실행: 인터럽트를 요청한 장치를 식별한다.
  5. 인터럽트 서비스 루틴(ISR) 실행: 인터럽트 원인을 파악하고 실질적인 작업을 수행한다. 처리기 레지스터 상태를 보존한다. 서비스 루틴 수행 중 우선순위가 더 높은 인터럽트가 발생하면 또 재귀적으로 1~5를 수행한다.
  6. 상태복구: 인터럽트 발생 시 저장해둔 PC(Program Counter)를 다시 복구한다.
  7. 중단된 프로그램 실행 재개: PC의 값을 이용하여 이전에 수행중이던 프로그램을 재개한다.

 

 

인터럽트 우선순위

  • 여러 장치에서 인터럽트가 동시에 발생하거나 인터럽트 서비스 루틴 수행 중 인터럽트가 발생했을 경우 우선순위를 따져서 처리한다.

전원 이상(Power fall) > 기계 착오(Machine Check) > 외부 신호(External) > 입출력(I/O) > 명령어 잘못 > 프로그램 검사(Program Check) > SVC(SuperVisor call)

 

  • 일반적으로 하드웨어 인터럽트가 소프트웨어 인터럽트보다 우선순위가 높고 내부 인터럽트 보다 외부 인터럽트가 우선 순위가 높다. → 하드웨어 > 소프트웨어, 외부 > 내부

 

인터럽트가 발생하면?

  • 하던 일을 멈춘다.

 

 

메인보드와 컴퓨터 성능의 상관관계

그림2 - 메인보드

  • 컴퓨터 사용을 위해 CPU, RAM 및 기타 부품들은 메모리 매니저가 포함된 Mainboard(메인보드)에 조립한다.
  • CPU와 RAM의 성능이 우수해도 메인보드 성능이 떨어지면, 메모리 매니저 성능도 떨어지기 때문에 CPU와 RAM의 성능이 100% 발휘되지 못한다. → CPU와 RAM의 100% 성능을 위해서는 메모리 매니저 칩의 성능이 중요하다.
  • 메모리 매니저는 과거에 브릿지 칩셋으로 불렸다.
  • 좋은 메인보드는 브릿지 칩셋의 성능이 좋다. → 고성능 CPU 사용 시 100% 성능 출력
  • 메인보드에 CPU 성능의 의존성이 생기게 된다.

 

 

노스브릿지와 사우스 브릿지

그림3 - 노스브릿지와 사우스브릿지

  • 브릿지 칩셋의 역할 → I/O 매니지먼트
  • 노스브릿지 → RAM 및 PCI Express의 I/O를 통제
  • 사우스브릿지 → USB 등 주변기기 I/O 통제 (상대적으로 느린 애들)
  • 추후 인텔에서 RAM까지 통제하는 기능의 CPU를 제작하게 된다. → 노스브릿지의 일부 기능을 CPU가 가져감

 

 

Hello World 출력(1)

그림4 - Hello World 출력 과정

  1. Hello World 출력을 위해 API를 호출한다. → printf( ) 함수 사용
  2. OS수준의 화면처리 관련 Video 영역에 해당되는 구성요소 → System Call 수준에서 write( ) 한다.
  3. RAM에 Hello World 가 들어간다. → 인터럽트 발생
  4. 그래픽 카드에서 RAM에 들어있는 정보를 가져온다.
  5. 모니터에 Hello World 출력
  6. 그래픽 카드에서 RAM에게 종료 신호를 보낸다. → 인터럽트 발생

 

Hello World 출력(2)

그림5 - 고성능 장치의 Hello World 출력 과정

  1. Hello World 출력을 위해 API를 호출한다. → printf( ) 함수 사용
  2. System Call 수준에서 write( ) 한다. → Driver에게 정보 이동 및 모니터 출력 부탁함
  3. Driver에서 바로 반환한다, 반환하는 동안에 모니터에 Hello World 출력함

성능이 좋은 주변기기 사용 시 CPU 혼자 모든 일을 처리하지 않게되며, 컴퓨터 성능이 좋아지게 된다.

 

 

 

Windows XP 모니터 출력 과정

그림6 - Windows XP 모니터 출력 과정

  • Widows XP에서 약 6단계를 거쳐 모니터로 출력한다.
  1. API Call
  2. GDI 엔진 System Call
  3. Driver 제어
  4. 데이터가 장치(Device)로 이동
  5. 반환
  6. 종료

장점

- 운영체제가 추상화된 API를 제공하고, 프로그램들은 API에 맞추면 화면출력을 직접 할 필요가 없어 장치제어를 하지 않아도 되는 장점이 존재한다.

 

단점

- 단계가 복잡하다. (인터럽트 다수 발생) → 성능 저하

 

 

 

고성능을 필요하는 프로그램(게임) 실행을 위한 DirectX 등장

그림7 - 게임 실행을 위한 DirectX 구동 과정

고성능을 필요로 하는 프로그램(게임) 실행에는 다음과 같이 많은 리소스가 소요된다.

  • 모니터 화면 정보 출력 ↑
  • 그래픽 연산 ↑
  • 데이터 양 ↑

 

DirectX 란?

  • DirectX는 멀티미디어, 특히 게임 프로그래밍에서 마이크로소프트 플랫폼에서 작업을 위한 API의 집합이다. 

 

게임 실행 시 GDI 엔진을 거치지 않고 DirectX를 통해 Driver와 바로 통신한다.

  • Kernel을 직접 건널 수 있도록 API가 마치 System Call을 유저 인터페이스에서 직접 호출할 수 있게 해준다. 
  • 그래픽 엔진 부분의 I/O 성능을 극단적으로 끌어올릴수 있는 인터페이스이다.
  • 인터럽트가 감소하여 대기시간이 줄어들어 성능이 좋아진다.

 

DirectX를 사용함으로써 데이터 이동도 한번에 가능, RAM을 Direct로 공유

  • DMA(Direct Memory Access)
  • I/O에 의한(입출력 과정에서의) 지연이 감소 → 성능 극대화

 

 

 

 

 

 

 

참고

https://www.inflearn.com/course/%EA%B3%B0%EC%B1%85-%EC%89%BD%EA%B2%8C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C

 

https://raisonde.tistory.com/entry/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8Interrupt%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%A2%85%EB%A5%98