본문 바로가기
CS/운영체제

[운영체제]OS12_IOSystems

by netron 2024. 1. 25.

Overview

  • I/O management
    • 컴퓨터 작동의 중요한 측면 → OS의 중요한 구성
    • I/O device들은 함수와 속도면에서 매우 다름 → I/O subsystem으로 그것들을 통제
  • I/O와 관련된 기술
    • I/O interfaces의 표준화
    • devices의 새로운 타입은 증가하고 있다.
  • Device drivers는 device details들을 캡슐화 → 일관된인터페이스 제공 → I/O 서브 시세틈이 각 장치의 구체적인 세부정보를 이해하지 않고도 다양한 장치와 상호작용

I/O Hardware

  • I/O 디바이스의 다양성
    • Stroage, Transmission, Human-interface, Special devices
  • 공통 개념 - I/O devices 인터페이스로부터 온 signal
    • Port - device의 포인트 연결
    • Bus - wires의 집합 그리고 전송 protocol
  • 전형적인 PC bus structure
    • PCIe: PCI Express, PC bus
      • Multiple 4-wire lanes
    • expansion bus
      • 상대적으로 느린 devices
    • Serial-attached SCSI(SAS)
      • 공통 disk interface
    • Controller
      • port, bus, device에 연결되서 동작하는 부품

Memory-Mapped I/O

  • 장치들은 주로 디바이스 드라이버가 접근하는 곳에 registers를 가진다.
    • Control register - 명령어
    • Status registers - 디바이스의 상태
    • Data-out registers - for write data
    • Data-in registers - for red data
  • 장치들은 주소를 가진다, used by
    • Direct I/O instructions
      • Device에 직접 접근하기 위한 명령어
    • Memory-mapped I/O ← 지금은 이 방식을 사용한다.
      • 디바이스 데이터 및 명령 레지스터를 프로세서 주소공간으로 매핑

Polling

  • (= Programmed I/O) - 프로그램에 의해서 입출력하는 형태
  • I/O의 각 바이트에 대해
    1. status register로부터 busy bit가 0일때 까지 읽는다
    2. Host가 읽기 또는 쓰기 비트를 설정하고 필요한 경우 데이터를 복사
    3. Host가 명령준비 비트를 설정
    4. Controller가 busy bit를 설정하고 전송을 실행
    5. 전송완료시 Contorller가 busy bit를 지움
  • busy-wait cycle로 장치에서 I/O를 기다림
    • 3개 명령어 주기로 이뤄짐
      • read status, logical-and to extract status bit, branch if not zero
    • device가 빠른 경우 합리적
    • 그러나 device가 느리면 효율적이지 않음

Interrupts

  • polling보단 효율적인 방식
  • CPU Iterrupt-request line은 I/O device에 의해 trigger된다
  • Interrupt handler는 interrupts를 받는다
    • 일부 인터럽트를 마스킹해 지연시키거나 무시할 수 있음
  • Interrupt vector
    • 인터럽트가 발생하면 해당 인터럽트를 처리하기 위한 적절한 핸들러로 제어를 전달하기 위한 테이블
    • 인터럽트가 발생하면, 현재 실행 중인 프로세스의 상태를 저장하고 해당 인터럽트를 처리하기 위한 핸들러로 컨텍스트를 전환한다
    • 우선순위에 기반
    • 몇가지는 nonmaskable하다. → 무조건 처리해야함(중요한 상황에서 우선적으로 처리되어야할 일)
    • 여러 디바이스가 동일한 인터럽트 번호를 사용할 때, Interrupt chaining이 사용된다. 이는 여러 디바이스의 인터럽트를 연결하여 하나의 핸들러로 처리하는 메커니즘이다.
  • 인터럽트를 효율적으로 관리하는 것이 시스템 성능과 안정성에 영향을 미친다.
  • 인터럽트 메커니즘은 exceptions이랑 유사하게 동작한다.
    • 프로세스 종료, 하드웨어 error때문에 시스템 crash
  • 메모리 접근 error가 발생할때 Page fault가 발생한다
  • System call은 trap을 통해 실행한다. trap은 요청을 실행하라고 kernel에 트리거
  • 멀티 CPU system은 concurrently하게 인터럽트를 처리할 수 있음
  • real-time system에서 중요하게 사용

Direct Memory Access(DMA)

  • 큰 데이터 이동에서 programmed I/O를 피하기 위해
  • DMA → 주변장치들이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 하는 기능. 중요한건 CPU의 개입 없이 I/O 장치와 기억 장치 사이의 데이터를 전송하는 접근 방식
  • OS는 DMA 작업을 관리하기 위해 DMA 커맨드 블록을 메모리에 작성한다. 이 커맨드 블록에는 데이터 전송에 필요한 정보가 포함된다.
    • Source와 destination 주소
    • Read or write mode
    • count of bytes
    • comman block에서 DMA controller의 write 주소
    • DMA 컨트롤러의 Bustering
      • DMA 컨트롤러가 CPU 버스를 점유하면 CPU는 일시적으로 제어를 빼앗기게 됩니다. 이를 "버스 강탈" 또는 "버스 마스터링”이라고 한다
      • 사이클 스틸링 (Cycle Stealing): CPU 버스를 완전히 강탈하지 않고 일부 사이클을 도용하여 DMA 컨트롤러에게 전달할 수도 있음. 이렇게 하면 CPU와 DMA 컨트롤러 간의 자원 공유가 가능하며 효율적인 데이터 전송이 이뤄짐.
    • 완료되면 완료 signal을 인터럽트한다.
    • 가상 메모리 환경에서 DMA를 사용할 때, 주소 변환과 관련된 추가 작업이 필요하다. DVMA는 이러한 가상 주소 환경에서도 효율적인 DMA를 수행할 수 있도록 하는 버전이다.

I/O Devices의 특징

  • I/O 디바이스의 유형
    • Block I/O
    • Character I/O(Stram)
    • Memory-mapped file access
    • Network sockets
  • I/O 디바이스 특성에 직접 접근
    • Unix 운영체제에서는 ioctl() 함수를 사용하여 임의의 비트를 디바이스 제어 레지스터에 보내거나 데이터 레지스터에 데이터를 보낼 수 있다.

Block and Character Devices

  • Block devices는 disk drives를 포함하고 있다
    • Commands는 read, write, seek를 포함하고 있다
    • Raw I/O, direct I/O, or file-system access
      • Raw I/O - 순수하게 bit의 steam 형태로 access
      • direct I/O - OS가 지원하는 기능들을 쓰지 않는 형태 ex) buffering
    • Memory-mapped file 접근 가능
    • DMA
  • Character devices는 keyborads, mice, serial ports를 포함한다.
    • Commands는 get(), put()을 포함한다
    • Libraries layered - 라이브러리를 사용해 라인 편집 등을 가능케하는 명령어 계층

Network Devices

  • Block 및 Character랑은 다르게 독자적인 인터페이스
  • 리눅스, 유닉스, 윈도우와 다른 운영체제들은 socket 인터페이스를 포함하고 있다
    • network 작업으로부터 network protocol이 분리되어 있다.
    • select()함수가 포함

Clocks and Timers

  • Provide
    • 현재 시간, 경과 시간
    • 타이머: 작업 X를 시간 T에 실행하도록 타이머를 설정할 수 있음
  • 1/60초의 정확도
  • Programmable interval timer는 주기적인 인터럽트를 처리하리 할 수 있음.
  • ioctl()은 시계와 타이머와 같은 시간 관련 작업을 포함한 이상한 (odd) I/O 측면을 다루는 데 활용

Blocking and Nonblocking I/O

  • Blocking - I/O 작업이 완료될때까지 대기
    • 사용하거나 이해하기 쉽다
    • 일부 요구사항에는 부적합할 수 있으며, 특히 I/O 작업이 오랜 시간이 걸릴 경우 전체 프로세스나 스레드가 차단될 수 있음
  • Nonblocking - I/O는 가능할 때 call 된다.
    • User interface, 데이터 복사 (버퍼링 I/O)
    • I/O 호출은 즉시 반환되며, 가능한 데이터 양을 읽거나 쓸 수 있음
    • 멀티스레딩을 통해 실행된다. 하나의 스레드는 I/O 작업을 수행하고, 다른 스레드는 다른 작업을 계속한다.
    • 데이터가 준비되었는지 여부를 확인하고 나서 데이터를 읽거나 쓸 수 있도록 select()와 같은 함수를 사용
  • Asynchronous - I/O가 실행되는 동안 프로세스도 동작할 수 있음
    • 사용하기 어렵다
    • I/O가 완료되면 I/O subsystem은 signals

Vectored I/O

  • 한 번의 시스템 호출을 통해 여러 I/O 작업을 수행할 수 있게 해줌
  • 예를들어, 유닉스의 readve() → 여러 버퍼에서 읽거나 쓰기위한 벡터를 읽음
  • I/O 작업을 수행할 때 데이터 변경에 대한 원자성(atomicity)을 제공한다. 이는 여러 스레드가 동시에 데이터를 읽거나 쓸 때 발생하는 문제를 방지하는 데 도움이 된다.

Kernel I/O Subsystem

  • I/O 서비스: I/O 스케줄링, buffering, caching, spooling, device reservation, and error handling
    • I/O scheduling
      • 성능 향상, 공평한 자원 분배, 평균 대기 시간 최소화
      • Asynchronous I/O: 커널이 모든 I/O 요청을 추적해야 하는 상황을 의미
    • Buffering
      • 데이터를 장치 간에 전송하는 동안 메모리에 젖아하는 메커니즘
      • speed mismatch를 줄이기 위해(두 device 간의 속도차이를 해결하기 위해)
      • 사이즈 mismatch를 줄이기 위해(두 device 간의 사이즈 차이 해결)
      • Double buffering - 두 데이터의 복사본을 유지
    • Caching
      • 더 빠른 디바이스에 데이터를 copy
      • 캐싱은 항상 복사본만 다룬다
      • 성능향상에 핵심
      • 때때로 버퍼링과 결합된다
    • Spooling
      • 장치에 대한 출력을 보유
      • ex) printer
    • Device reservation
      • 특정 디바이스에 대한 독점적인 접근을 제공
      • 이는 할당 및 해제를 위한 시스템 호출을 통해 이루어짐
    • Error Handling
      • 디바이스가 사용 불가능하거나 일시적인 실패가 발생했을 때 복구하는 과정
      • 읽기 또는 쓰기 작업을 다시 시도하거나 데이터를 재전송하는 것이 포함될 수 있음
      • 더 진보된 오류 처리 방법 - 오류 빈도를 추적하고, 재시도 가능한 오류의 빈도가 증가하는 디바이스의 사용을 중단
      • 대부분의 경우, I/O 요청이 실패할 때 오류 번호나 코드를 반환
      • 시스템 오류 로그는 문제 보고를 보관
    • I/O Protection
      • User process가 불법 I/O 명령을 통해 정상 작동을 방해하려고 하거나 실수로 시도하는 것을 방지하기 위해 설계
      • 모든 I/O 명령어는 특권 명령으로 정의된다.
      • I/O는 system calls을 통해 수행되야한다.
      • Memory-mapped와 I/O port 메모리 location은 보호되어야함

Kernel Data Structures

  • 커널은 I/O component에 대한 state를 유지한다. (file tables, network, connections, character device state를 포함)
  • 운영 체제는 버퍼, 메모리 할당, "더티" 블록 등을 추적하기 위해 많은 복잡한 데이터 구조를 사용합니다. 여기서 "더티" 블록이란 아직 디스크에 기록되지 않은 변경된 메모리 블록을 의미한다.
  • 일부 운영 체제는 객체 지향 방법과 메시지 전달을 사용하여 I/O를 구현한다.
  • 장점 (Pros): 메시지 전달 기반의 I/O 처리는 설계가 단순하고 이해하기 쉬운 구조.각 구성 요소 간의 명확한 인터페이스와 데이터의 명확한 흐름을 통해 시스템의 유지 관리가 용이하다.
  • 단점 (Cons): 이 방식은 추가적인 오버헤드를 발생시킬 수 있음. 메세지 전달과 처리 과정에서 시간이 소요되며, 이는 시스템의 전체적인 성능에 영향을 줄 수 있다. 특히, 고성능이 요구되는 환경에서는 이 오버헤드가 중요한 문제가 된다.

Power Management

  • Power는 I/O에 속해있다기 보다는 시스템 전반에 속해있다.
  • Computers와 devices는 전기를 사용하고 열을 발생하고 cooling을 요구한다.
    • 열 발생 → 전자시스템에 안좋음

Kernel I/O Subsystem Summary

  • 요약하면, I/O subsystem은 다양한 서비스를 제공하여 응용 프로그램과 커널의 다른 부분들이 장치들과 효율적으로 상호작용할 수 있도록 한다.– Device-driver configuration and initialization
    – Power management of I/O devices
  • – Management of the name space for files and devices
    – Access control to files and devices
    – Operation control (for example, a modem cannot seek())
    – File-system space allocation
    – Device allocation
    – Buffering, caching, and spooling
    – I/O scheduling
    – Device-status monitoring, error handling, and failure recovery
  • I/O 서브시스템의 상위 레벨은 장치 드라이버가 제공하는 일관된 인터페이스를 통해 장치에 접근한다.

Transforming I/O Requests to Hardware Operations

  • 파일을 디스크에서 프로세스로 읽어오는 과정에서 I/O 요청을 하드웨어 작업으로 변환하는 것은 운영 체제의 중요한 역할 중 하나
    • 요청된 파일을 가지고 있는 device 식별
    • 파일의 경로나 이름을 하드웨어 장치가 이해할 수 있는 형태로 변환
    • 장치에서 물리적인 읽기 작업을 수행하여 데이터를 메모리 버퍼로 전송
    • 읽어온 데이터를 요청한 프로세스에 제공
    • 데이터 전송이 완료되면, 운영 체제는 프로세스에 제어를 다시 반환

STREAMS

  • STRAM - 용자 수준 프로세스와 장치 간의 전이중 통신 채널을 제공하는 운영 체제의 기능, 독특한 입출력 구조
  • STREAM은 다음으로 구성되어 있음
    • STREAM head interfaces
    • driver end interfaces
    • zero or more STREAM modeules between them
  • 각 module은 read queue와 write queue를 포함
  • Message passing은 queue 사이에 통신하기 위해 사용
    • Flow control 옵션을 제공하여, 데이터가 처리될 수 있는 상태인지 또는 바쁜 상태인지를 나타낼 수 있음
  • 내부적으로는 STREAMS가 비동기적으로 동작하지만, 사용자 프로세스가 STREAM 헤드와 통신할 때는 동기적으로 동작한다.

Performance

  • I/O 장치는 system 성능에서 중요한 요소이다.
    • devicedriver와 kernel I/O code를 실행하기위해 CPU를 요구
    • interrupt때문에 Context swithes
    • Data copying
    • Network traffic especially stressful

Improving Performance

  • context switches 수 감소
  • data copying 감소
  • 인터럽트를 줄이기 위해 큰 데이터 전송 단위 사용, 간단할땐 polling 사용
  • 스마트 컨트롤러 사용하여 장치 자체에서 더 많은 처리 수행
  • DMA 사용
  • smarter H/W 장치 사용
  • CPU, 메모리 ,bus, I/O 성능의 균형 → 처리량 최대화
  • 사용자 모드에서 실행되는 일부 프로세스 또는 데몬을 커널 스레드로 전환하여 컨텍스트 스위치를 줄이고, 성능을 향상시킬 수 있음.
 

'CS > 운영체제' 카테고리의 다른 글

[운영체제]OS11_MassStorage  (1) 2024.01.25
[운영체제]OS10_VirtualMemory  (1) 2024.01.25
[운영체제]OS09_Main Memory - 메인 메모리  (0) 2024.01.25