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에 연결되서 동작하는 부품
- PCIe: PCI Express, PC bus
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 ← 지금은 이 방식을 사용한다.
- 디바이스 데이터 및 명령 레지스터를 프로세서 주소공간으로 매핑
- Direct I/O instructions
Polling
- (= Programmed I/O) - 프로그램에 의해서 입출력하는 형태
- I/O의 각 바이트에 대해
- status register로부터 busy bit가 0일때 까지 읽는다
- Host가 읽기 또는 쓰기 비트를 설정하고 필요한 경우 데이터를 복사
- Host가 명령준비 비트를 설정
- Controller가 busy bit를 설정하고 전송을 실행
- 전송완료시 Contorller가 busy bit를 지움
- busy-wait cycle로 장치에서 I/O를 기다림
- 3개 명령어 주기로 이뤄짐
- read status, logical-and to extract status bit, branch if not zero
- device가 빠른 경우 합리적
- 그러나 device가 느리면 효율적이지 않음
- 3개 명령어 주기로 이뤄짐
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()
함수를 사용하여 임의의 비트를 디바이스 제어 레지스터에 보내거나 데이터 레지스터에 데이터를 보낼 수 있다.
- Unix 운영체제에서는
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은 보호되어야함
- I/O scheduling
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 |