I/O System

  • Programmed I/O : 명령 처리 후 결과가 아주 작다면 CPU 레지스터로 바로 전송한다.
  • DMA : 작업 후 결과 값이 커서 메모리를 통해야한다면 I/O가 메모리에 직접 접근하는 것이다.
  • Interrupt : I/O 명령어를 수행하고 다 끝나면 interrupt.

Direct I/O vs Memory-Mapped I/O

컨트롤러에게 데이터/커맨드를 보내기 위해서 사용하는 두 가지 방법이다!

I/O Controller도 작은 컴퓨터이므로 IR, DR이 존재한다. 결국 I/O Device 는 레지스터에 있는 값을 읽어서 동작하는데, 레지스터에 접근하는 방법이 여러가지이다.

Direct I/O

CPU가 장치의 레지스터에 직접 명령을 작성해서 I/O 명령을 내리는 경우이다. 메모리 어드레스와 I/O 어드레스가 별도로 존재하고 명령어도 별도로 존재하는 것이다.

image

Memory-Mapped I/O

Device control 레지스터가 메모리 주소 공간에 mapping 된 것. 따라서 CPU는 메모리의 mapping된 위치에서 읽기/쓰기를 통해 I/O 요청을 실행한다. 결국 CPU 입장에서 똑같으니 주소를 별도로 두지말고 똑같이 하자는 것이다. 메모리 주소의 앞부분은 I/O가 쓰고 뒤에는 메모리가 쓰자 정도로 구분한다.

image

I/O Device Controller

작은 컴퓨터이며, 호스트 어댑터라고 부른다. CPU가 명령하면 I/O 디바이스를 직접 제어하거나 이벤트 처리 후 CPU에 알려준다.

Kernel I/O Structure

디바이스 컨트롤러를 구동시키는 소프트웨어를 디바이스 드라이버라고 하며 디바이스별로 존재한다. 운영체제와의 인터페이스 표준이 존재하니 맞춰야한다.

image

Buffering

CPU는 빠르고 I/O는 느리기떄문에 I/O에서 올라온 데이터들을 일시적으로 저장해서 한 번에 처리하는 것이다. 커널도 디바이스가 빠르면 더블 버퍼링하는 경우도 있다. 일반적으로 커널에서 관리하니 c.d 가 일반적이다.

image

Spooling

프린터같은 경우는 매우 느린 디바이스에 사용하는 방식이다. 어플리케이션에서 전체를 제어하는 명령어를 하나의 파일로 만들어놓고, 커널에서 디바이스 속도에 맞춰 천천히 내보내는 방식이다.

업데이트:

댓글남기기