시냅스

입출력 시스템, I/O System 본문

운영체제

입출력 시스템, I/O System

ted k 2022. 6. 7. 18:26

입출력 시스템, I/O System

  • Web, File 수정, Youtube 시청, game 등 컴퓨터는 입출력 작업을 주로 한다.
  • PCI 버스로 모든 Device 와 연결한다.

메모리 맵드 입출력 Memory-mapped I/O

  • 모든 컨트롤러는 레지스터(제어용 또는 데이터용)를 가지고 있고, 레지스터를 프로세서의 주소 공간으로 사상한다.
  • CPU는 물리 메모리에 사상된 장치-제어 레지스터를 읽고 쓸 때 표준 데이터 전송 명령을 사용함으로써 입출력 요청을 수행하게 된다.
  • 입출력 장치 컨트롤러는 보통 4개의 레지스터로 구성되어 있다.
    • 입력 레지스터 : 입력을 얻기 위해 읽기를 수행한다.
    • 출력 레지스터 : 출력하기 위해 쓰기를 수행한다.
    • 상태 레지스터 : 현재 명령이 완료되었는지, 입력 레지스터로부터 한 바이트를 읽어도 되는지, 오류가 있었는지 등을 알려준다.
    • 제어 레지스터 : 주변 장치에 입출력 명령을 내리거나 장치의 모드를 변경하기 위해 쓰기를 수행하는 대상이다.

I/O type

Polling (Busy wait)

  • busy bit를 통해 자신의 상태를 나타낸다.
  • bit가 소거(비트를 설정 -> 1 비트를 소거 -> 0) 될 때 까지 상태 레지스터를 읽는다.

interrupts

  • wait - signal -> cpu 받음 -> 인터럽트 핸들러가 처리 -> 재개
  • 인터럽트 기법은 보통 주소라고 하는 정수를 통해 인터럽트 벡터 테이블의 오프셋으로 사용한다.

DMA

  • CPU 대신 자신이 직접 버스를 통해 DMA 명령 블록을 액세스하여 입출력을 수행한다.
  1. 장치 드라이버가 Drive2데이터를 주소 "x"에 있는 버퍼로 전송하라고 지시받는다.
  2. 장치 드라이버가 드라이브 컨트롤러에게 "c" 바이트를 주소 "x"에 있는 버퍼로 전송하라고 지시한다.
  3. 드라이브 컨트롤러가 DMA 전송을 시작한다.
  4. DMA 컨트롤러가 바이트를 "x"로 전송한다.
  5. c=0이 되면 DMA는 전송 완료를 알리기 위해 CPU에게 인터럽트를 건다.

Blocking vs Nonblocking vs Async

  • Synchronous
    • 작업 요청을 했을 때 요청의 결과값을 직접 받는 것이다.
    • 호출한 함수가 작업 완료를 신경 쓴다.
  • Asynchronous
    • 작업 요청을 했을 때 요청의 결과값을 간접적으로 받는 것이다.
    • 요청의 결과값과 return 값이 다를 수 있다.
    • 호출된 함수(callback 함수)가 작업 완료를 신경쓴다.
    • e.g. 이메일로 물어보고 메일 송신을 완료(return)했지만 답은 언제 올지 모른다.
  • blocking
    • 요청한 작업을 마칠 때까지 계속 대기한다.
    • return 값을 받아야 끝난다.
    • 호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고 대기하게 만드는 것.
    • e.g. 전화를 받을 때까지 계속 대기 후 답을 얻는다.
  • non-blocking
    • 요청한 작업을 즉시 마칠 수 없다면 바로 return한다.
    • 결과가 완료 되었는지 지속적으로 확인한다.
    • 호출된 함수가 바로 return해서 호출한 함수에게 제어권을 넘겨주고 호출한 함수가 다른 일을 할 수 있게 기회를 주는 것.
    • e.g. 전화를 했는데 받지 않아서 계속 반복 전화하다가 어느 순간 받아서 답을 얻는다.
Comments