• toc {:toc}

I/O Hardware

  • I/O 하드웨어는 signal을 보내면서 OS와 소통한다.
    • Port : 장치간 연결 지점
    • Bus : PCI or PCIe bus, Expansion bus, Serial-Attached SCSI (SAS) for disks
    • Controller : 컨트롤러를 이용해 device에 접근한다.
      • 데이터를 디스크에 쓰는 역할, Error collection 역할
      • 메인 메모리 사용하도록 만들어줌

image

  • Direct I/O : I/O port number를 사용하여 할당 (메인 메모리 주소체계에 속하지 않음)
  • Memory-Mapped I/O : Direct I/O와 반대로 메인 메모리 주소체계와 I/O device를 통합해서 사용
    • 주소를 통해서 메인 메모리 주소인지 I/O 주소인지 구분 가능

Polling

  • 각 I/O byte에 대해 디바이스에 변화가 있는지 지속적으로 감시하는 방식 (busy waiting 발생)
  1. Busy bit를 state register로 부터 읽는다. (0 될 때 까지)
  2. Host(CPU)가 read write bit를 설정하고 write면 data-out register에 데이터를 복사한다.
  3. Host가 command-ready bit를 1로 설정한다.
  4. Controller가 busy bit을 1로 설정하고 전송을 시작한다.
  5. 전송이 끝나면 controller는 bit들을 다시 초기화한다.

Interrupts

  • CPU가 모든 instruction을 실행하고 난 후 interrupt-request line을 확인

    • Interupt 탐지되면 CPU가 메모리의 고정된 주소에 위치한 interrupt request routine으로 이동
  • CPU 2개의 interrupt request line을 갖는다.

    • Nonmaskable : 회복 불가한 메모리 오류에 대한 매우 중요한 인터럽트 (즉시 처리되어야 한다.)
    • Maskable : 요청된 컨트롤러에 의해 처리되는 인터럽트
  • Interrupt vector 올바른 handler로 interrupt 전송

    • 해당 handler에 대한 memory address 포함
    • OS는 boot time에 관련된 interrupt handler를 설치한다.
  • 예외처리를 위해서도 사용된다.

  • Multi-CPU는 인터럽트를 동시에 처리할 수 있다.

  • 빈번하고 시간에 민감한 처리에 사용하고 빠르다.

Direct Memory Access

  • I/O가 발생하는 경우 device에서 CPU로 polling, interrupt방식을 통해 신호를 보내고 CPU가 다음의 signal을 처리

  • DMA 방식에서는 CPU를 거치지 않고 바로 Main memory로 접근한다.

  • DMA controller 필요

  • 작동 방식

  1. CPU는 DMA command block을 메모리에 작성
  2. CPU가 DMA command block 주소를 DMA controller에 기록하고 다른 작업을 진행
  3. DMA contoller는 직접 메모리 버스를 운영해 한 워드씩 전송

Kernel I/O Structure

  • I/O system call은 device behavior들을 캡슐화한다.

Block and Character Devices

  • Block device : Block 단위로 데이터를 주고 받는 것.

  • Block device는 disk drive를 포함한다.

    • Command : read(), write(), seek()
    • Raw I/O, direct I/O(buffering, locking 없이), 또는 file-system 접근을 말한다.
    • Demand paging 통해 가져온 virtual memory, cluster에 파일 mapping Block 단위
  • Character device : Character 단위로 주고 받는 것

    • Command : get(), put()

Clocks and Timers

  • Basic function
    • 현재 시간
    • 경과 시간
    • X 연산에 의해 발생된 시간 T

Clock signal 만들어 사용

Nonblocking and Asynchronous I/O

  • Blocking : I/O 요청이 완료될 때까지 프로세스 중단
  • Nonblocking : I/O 요청 후 기다리지 않고 프로세스 진행.
  • Asynchronous : I/O 요청 후 I/O 처리 완료되었다고 interrupt callback오면 받는다.

image