OS / 인터럽트

60jong·2023년 4월 15일
0

CS

목록 보기
3/4
post-thumbnail
유투버 [널널한 개발자] 님의 강의를 듣고 정리 했습니다.

https://www.youtube.com/playlist?list=PLXvgR_grOs1DGFOeD792kHlRml0PhCe9l

인터럽트

  • 인터럽트는 CPU에게 “띵동”하는 것이다.

  • 인터럽트는 외부 인터럽트내부 인터럽트가 있다.

    • 내부 인터럽트인 입출력 인터럽트를 중점으로 보자.
  • 인터럽트마다 고유한 번호인 IRQ가 있다.

  • CPU는 인터럽트를 만나게 되면 인터럽트의 IRQ를 통해 정해진 인터럽트 서비스 루틴인 ISR을 수행하게 된다.

    • 이때 이전에 수행하던 작업을 저장하게 된다. (PC, PCB)
    • ISR이 끝나고 나면 원래 작업을 다시 수행하게 된다.

인터럽트 예시, System Call

  • System Call
    • HW는 OS에 의해 보호된다. 따라서 고급 (User Layer) 에서 HW와 I/O를 하기 위해서는 OS, kernel의 도움을 받아야 한다.

    • 이로 인해 user mode / kerner mode로 구분이 된다.

    • kernel은 System Call이라는 interface를 user layer에게 제공함으로써 HW와 I/O를 가능케 해준다.

    • Device와의 I/O 과정

      1. 프로세스에서 System Call 호출

      2. CPU가 kernel mode로 전환됨 (mode_bit = 1 → 0)

      3. 프로세스는 대기 모드로 전환 (Context Switch)

      4. kernel은 Device Driver를 호출해서 System Call 로직을 수행한다. (화면 출력 등등)

!! C code에서 printf(”Hello World!”); 화면에 출력한다고 가정하자.

  • printf() 는 System Call이며 모니터라는 Device와 I/O를 수행한다.
  • CPU는 커널 모드로 전환되며, 커널이 제어권을 갖게 되고 프로세스는 대기 상태가 된다. (Context Switch 발생 가능)
  • 커널은 “Hello World!”를 커널의 출력 버퍼(Memory에 존)에 저장한다.
  • 커널은 모니터의 Device Driver를 호출해 출력 버퍼에 담긴 내용 전달한다.
  • 모니터 출력이 끝나게 되면 CPU는 다시 유저 모드로 전환 되고, 프로세스를 이어서 진행하게 된다.

DirectX

위 예시를 보면 I/O가 굉장히 많다.

  1. printf → buffer
  2. buffer → Memory(kernel의 출력 버퍼)
  3. kernel 출력 버퍼 → Device Driver

하지만 I/O는 굉장히 느리다. 고성능 프로그램 (주로 게임) 에서는 많은 I/O가 굉장히 빠르게 일어나야 한다.

그런데 이렇게 여러 I/O를 불필요하게 많이 거치게 되면 성능이 안 좋을 수 밖에 없다.

따라서 Direct (곧바로) X (cross), user mode에서 device driver로 바로 접근 가능하게 해주는 DirectX가 등장하게 됐다.

DMA

Direct Memory Access로, DirectX의 등장 배경을 보면 알 수 있듯이 DMA도 왜 사용하는지 느낌이 올 것이다.

핵심은

불필요한 I/O를 없앤다

다음은 DMA!

profile
울릉도에 별장 짓고 싶다

0개의 댓글