[Operating System] I/O 하드웨어

권영태·2025년 5월 6일

Operating System

목록 보기
19/20

I/O 하드웨어

프로그램의 실행 속도는 I/O 시스템 성능에 영향을 많이 받기에 이를 제어/관리하는 일은 매우 중요해 I/O 하드웨어가 이를 관리한다.

I/O 하드웨어 구성

  • 입출력 채널/프로세서: 입출력 모듈이 프로세서를 대신해 복잡한 일을 처리한다.
  • 입출력/장치 제어기: 단순히 프로세서의 입출력과 관련된 일을 담당한다.
  • I/O 장치: 디스크, 키보드, 모니터
  • 시스템 버스: 주소·데이터·제어 신호 전달

프로세서 역할에 따른 입출력 방법

프로세서와 I/O 속도 차이로 데이터 전송 시 부담이 커지기 때문에 프로세서는 전송 속도를 조절하는데 크게 3가지 방안이 있다.

  • 프로세서 제어 입출력(프로그램 제어 입출력, 인터럽트 기반 입출력)
    • 프로그램 제어 입출력: CPU가 반복적으로 레지스터 확인(=Polling)하고, 준비되면 데이터 전송
      • 단점: 지속적인 Polling으로 인해 성능 저하
    • 인터럽트 기반 입출력: 장치가 '준비됨' 인터럽트를 발생시키면 CPU는 해당 핸들러로 즉시 분기된다.
      • 장점: Polling 최소화로 성능 향상
      • 단점: 인터럽트 오버헤드 발생
  • DMA 입출력: 별도 DMA 컨트롤러가 시스템 버스를 점유해 메모리 <-> 장치 간 대량 전송한다.
    • 장점: CPU 개입이 거의 없고 전송 중에도 CPU 연산이 가능한다.
  • I/O 채널: 고성능 대형 시스템에서 CPU와 독립적으로 I/O를 처리한다.

I/O 디바이스 분류

I/O 디바이스는 크게 6가지 기준으로 분류할 수 있다.

문자 스트림 VS 블록

  • 문자 스트림: 바이트 단위로 순차 전송한다.
  • 블록: 고정 크기 블록 단위로 전송한다.

순차 접근 VS 임의 접근

  • 순차 접근: 항상 다음 위치로만 접근한다.
  • 임의 접근: 원하는 위치를 바로 접근한다.

동기 VS 비동기

  • 동기: 호출한 작업의 완료까지 기다린다.
  • 비동기: 요청 후 즉시 반환되며, 완료시 따로 알림이 온다.

공유 VS 비공유

  • 공유: 다수 프로세스가 동시 사용 가능하다.
  • 비공유: 오직 하나의 프로세스만 사용 가능하다.

속도

  • 디바이스 데이터 전송률에 따라 구분한다.

읽기-쓰기 VS 읽기 전용 VS 쓰기 전용

  • 지원하는 데이터 전송·권한에 따라 구분한다.

블로킹 VS 논블로킹

  • 블로킹: 요청한 스레드가 결과가 준비될 때까지 스케줄러의 실행 큐에서 빠져나가 멈춘다.
    • 멈추기 때문에 다른 작업을 수행하지 못해 응답성이 저하된다.
  • 논블로킹: 요청 즉시 결과가 없어도 반환해 결과가 준비되어 있는 여부를 호출자가 직접 검사해야 한다.

I/O 멀티플렉싱

여러 I/O 디바이스를 하나의 프로세스에서 효율적으로 감시하기 위해 사용하는 기법이다.

  • select(), poll(), epoll() 시스템 콜로 어느 I/O 디바이스가 준비되었는지 바로 확인 가능하기 때문에 각 디바이스를 논블로킹으로 Polling 하는 오버헤드를 줄일 수 있다.

생각 정리

동기-논블로킹, 비동기-블로킹은 의미가 있는 조합일까?

  • 동기-논블로킹은 흔히 쓰이는 조합으로, 데이터가 없으면 바로 호출자에게 결과를 돌려주는 방식이다.
  • 비동기-블로킹은 드물게 쓰이는 조합으로, 비동기 작업을 예약해놓고 나중에 콜백 형태로 결과전달이다.

논브로킹 I/O 후 결과 수신 과정

  • 논블로킹 호출을 폴링하고 데이터가 올 때까지 루프를 돈다.
  • 이후 select() 같은 시스템 콜로 ‘읽기 가능’상태의 디바이스를 골라 실제 read() 호출해 결과를 수신한다.

학습하며 정리한 글이기 때문에 혼용된 표현 또는 잘못된 내용이 있을 수 있습니다.
만약, 발견하신 경우 댓글을 통해 알려주신다면 진심으로 감사드립니다.

profile
GitHub : https://github.com/dudxo

0개의 댓글