본문 바로가기

운영체제

[운영체제] I/O Systems

 

I/O Hardware

  • OS는 수많은 I/O 하드웨어를 지원하기 위해 규격화된 명령을 내림
  • 공통적 개념
    • Port: I/O 디바이스의 관문
    • Bus: 데이터가 전송되는 통로
    • Controller: I/O 디바이스 안에 있는 제어하는 자체 CPU
  • I/O에 명령을 내림; 디바이스의 controller 내 register에 명령어를 써줌
  • I/O port
    • Status register: 디바이스의 상태를 나타냄, busy bit/error bit
    • Control register: 명령어를 써줌
    • Data-in register: 디바이스가 데이터를 읽어서 임시로 저장하는 곳
    • Data-out register: OS가 데이터를 써주기 위해 있는 공간
  • Polling
    • status register 값이 busy bit이면 명령을 내리면 안됨
    • bit checking하는 기본적 방식이 polling임
    • Busy-wait 함; ready니? 아니네 기다릴게 -> ready니 아니네 기다릴게 -> ...
    • CPU 자원 낭비긴 한데 I/O 디바이스가 빠르면 조금만 기다려도 됨
    • 근데 I/O 디바이스가 느리면? 자원 낭비 너무 -> Interrupt
  • Interrupt
    • I/O 디바이스가 자기가 ready 상태가 되면 알려주는 거
    • Interrupt 종류
      • Nonmaskable: 너무 중요해서 disable시킬 수 없는 인터럽트
      • Maskable: disable시킬 수 있는 인터럽트
    • Interrupt 종류를 파악해서 handler를 호출, handler가 있는 메모리의 번지를 알아야 함
    • Interrupt vector: handler의 위치 정보 저장
    • interrupt 매커니즘은 exception과 동일
  • Kernel I/O 구조

  • Application I/O Interface = 시스템콜
    • 애플리케이션은 I/O 디바이스에 직접 접근 X
    • I/O system call을 해서 os한테 시킴
    • 위에서는 일관된 시스템콜 호출, 디바이스 드라이버가 알아서 처리해줌
    • 디바이스가 명확하게 다른 경우
      • Character-stream디바이스냐 block 디바이스냐; I/O 단위에 따라
      • Sequential냐 random-access
      • Sharable/dedicated
      • operation 속도
      • read-write, read-only, write only
    • Block devices에 제공되는 시스템콜: read, write, seek
    • Character devices에 제공되는 시스템콜: get, put
      • 키보드나 마우스처럼 사용자의 액션에 의해 생성되는 경우
    • Blocking / Nonblocking I/O
      • Blocking: I/O 해줘 요청하고 기다림, process가 waiting상태로 감
      • Nonblocking: I/O 요청하고 나서 진행된 만큼만 가지고 바로 return
      • Asynchronous: I/O 요청해놓고 다른 일 함
  • Kernel I/O subsystem = kernel이 가진 기능들
    • Scheduling: request를 어떤 순서로 디바이스에 요청할 건지 
    • Buffering: 디바이스 간 데이터 transfer하는 과정에 중간 단계 저장 장치
    • Caching: 실제 원본 데이터의 복사본이 저장되는 곳
    • Spooling: 디바이스에 보내는 output 데이터를 임시로 저장하는 곳
      • output 디바이스가 무척 느려서 데이터를 다 못 받을 때 ex> 프린터
    • Error Handling: I/O 과정에서 에러가 났을 때 처리해주는 과정
    • Kernel Data Structures: 많은 종류의 자료 구조 유지, 관리
  • I/O 성능
    • context switch와 data copy를 최소화해야 함
    • interrupt를 줄이자
    • 웬만하면 DMA를 사용해라
    • CPU, memory, bus, I/O 성능이 balance를 맞추도록 해라

 

 

OS 드디어 완강