[OS] I/O Management
William Stallings의 『Operating Systems, Internals and Design Principles (9th Ed.)』 을 토대로 작성하였음.
👑 I/O Devices
컴퓨터 시스템에서 I/O 장치는 대략 세 가지로 분류할 수 있다.
-
Human readable
- 사용자와 컴퓨터 간의 의사소통에 적합한 장치로 프린터, 키보드, 마우스 등이 속한다.
-
Machine readable
- 전자 장비와 의사소통하기에 적합한 장치로 디스크, 센서, 컨트롤러 등이 속한다.
-
Communication
- 원격 장치와 의사소통하기에 적합한 장치로 Digital line driver와 모뎀 등이 속한다.
각 분류 별 장치들은 컴퓨터 시스템의 다양한 요구를 충족시키기 위해 설계되었으며, 분류 별로
몇 가지 차이를 보인다. 이러한 많은 차이들로 인해 I/O에 대한 일관된 접근법이 만들어졌다.
-
Data rate
-
용도와 기능에 따라 장치들 사이에 전송 속도는 큰 차이가 날 수 있다.
-
예를 들어, 하드 디스크는 초당 수백 메가바이트(MBps)의 데이터를 전송할 수 있는 반면,
키보드는 훨씬 더 낮은 데이터 전송 속도를 가지고 있다.
-
-
Application
- 장치마다 다른 소프트웨어와 OS의 지원을 필요로 한다.
-
Complexity of control
-
Unit of transfer
-
Data representation
- 장치마다 서로 다른
data encoding schemes을 사용한다.
- 장치마다 서로 다른
-
Error conditions
👑 I/O Management
I/O system은 I/O Management (= kernel I/O subsystem), device-driver interface,
특정 하드웨어 장치를 위한 device-driver로 이루어진다.
device driver란 특정 하드웨어나 장치의 입출력을 제어하기 위해 커널의 일부분으로 동작하는
컴퓨터 소프트웨어이다. 컴퓨터를 구성하는 다양한 입출력 장치마다 각각 존재하여 운영체제와
디바이스가 통신할 수 있도록 한다.
kernel I/O subsystem은 입출력 장치와의 상호 작용을 관리하고 효율적으로 처리하기 위한
다양한 기능들을 제공한다. 주요 기능들은 다음과 같다.
-
I/O System Call Interface
-
사용자 프로그램이 I/O 작업을 요청할 수 있도록
System Call Interface를 제공한다. -
이를 통해 파일에 대해
open, read, write, close등의 작업을 수행할 수 있다.
-
-
Device Reservation
-
장치를 독점적으로 사용하기 위해 예약할 수 있는 기능을 제공한다. (장치 간 충돌 방지)
-
system call을 통해 장치를 할당, 해제 한다. (데드락 발생에 주의해야함)
-
-
Device Scheduling
-
여러 I/O 요청을 효율적으로 처리하기 위해 스케줄링 알고리즘을 사용한다.
-
각 장치별로
큐(queue)를 만들어 스케줄링한다.
-
-
Buffering
-
Buffer를 사용하여데이터 전송 속도 차이를 완화하고 시스템 성능을 향상시킨다. -
Buffering은 메모리의 일부를 임시 저장소로 사용하여 데이터의 원활한 이동을 지원한다.
-
-
Caching
-
자주 사용되는 데이터나 파일을
cache에 저장하여 빠른 접근을 가능하게 한다. -
이를 통해 I/O 작업의 속도를 높이고 시스템 성능을 개선한다.
-
-
Spooling
-
특정 장치(예: 프린터)에 여러 작업이 동시에 접근할 때, 이를 조정하여 순차적으로 처리할 수
있도록 하는 기능이다. -
이를 통해 자원 관리와 작업 흐름을 원활하게 유지할 수 있다.
-
-
Error Handling
-
I/O 작업 중 발생할 수 있는 다양한 오류를 처리하는 기능을 제공한다.
-
오류 복구(Error Recovery)
- 디스크 읽기 오류, 장치 사용 불가, 일시적 쓰기 실패 등 다양한 오류로부터 시스템이
복구될 수 있도록 한다.
- 디스크 읽기 오류, 장치 사용 불가, 일시적 쓰기 실패 등 다양한 오류로부터 시스템이
-
오류 코드 반환(Return Error Codes)
- I/O 요청이 실패하면 적절한 오류 번호나 코드를 반환하여 문제를 알린다.
-
시스템 오류 로그(System Error Logs)
- 문제 발생 시 시스템 오류 로그에 문제 보고서를 저장하여 이후 문제 해결에 도움이 되도록 한다.
-
👑 I/O Control
컴퓨터 시스템에서 입출력을 제어하는 주요 방법에는 다음의 세 가지가 있다.
-
Programmed I/O (= Polling)
-
Interrupt-driven I/O
-
Direct Memory Access (DMA)
일반적인 I/O port의 구성
-
상태 레지스터 (Status register)
- 장치의 현재 상태를 나타낸다.
-
제어 레지스터 (Control register or Command register)
- 장치에 명령을 보내기 위해 사용된다.
-
데이터 입력 레지스터 (Data-in register)
- 장치로부터의 입력 데이터를 보유한다.
-
데이터 출력 레지스터 (Data-out register)
- 장치로 출력할 데이터를 보유한다.
장치의 state
-
Command-ready
- 장치가 호스트로부터 명령을 수행할 준비가 되어있는 상태
-
Busy
- 장치가 현재 작업 중인 상태
-
Error
- 장치가 작업을 수행하는 동안 오류가 발생했거나, 장치 자체에서 문제가 발생했을 때의 상태
💡 Programmed I/O (= Polling)
프로그램이 명령을 내림으로써 I/O 작업을 직접 제어한다.
예를 들어, 데이터를 디스크에 쓰거나 읽거나, 네트워크로 데이터를 보내는 등의 작업을 수행할 때,
프로그램은 해당 I/O 장치와의 통신을 위해 명령을 실행한다. 프로그램은 I/O 작업이 완료될 때까지
해당 장치로부터 상태를 지속적으로 확인하여 작업이 완료될 때까지 대기한다. (busy-waiting)
즉, CPU가 polling instruction을 실행하여 입출력(I/O) 장치의 상태를 반복적으로 확인하고,
해당 비트가 해제될 때까지 기다리는 방식이다.
단순하고, 구현이 간단하다는 장점이 있지만, busy waiting이라는 단점이 존재한다. (성능 ↓)
💡 Interrupt-Driven I/O
프로세서가 다른 작업을 수행하다가 입출력 장치로부터 인터럽트 신호를 받아 작업을 처리하는 방식이다.
동작 과정
-
사용자 프로세스의 system call을 통한 I/O request
- 사용자 프로세스는 커널에게 입출력 작업을 시작하도록 요청한다.
-
커널이 장치 드라이버에게 장치를 시작하도록 허용
- 커널은 해당 장치에 대한 제어를 담당하는 장치 드라이버에게 명령을 내려 장치를 시작하도록 한다.
-
프로세스는 I/O를 수행하는 동안 block 상태로 대기
-
CPU는 다른 프로세스에게 할당됨 (context switch)
-
장치가 I/O를 완료하면, CPU에게 IRQ(Interrupt Request)를 발생
- 장치가 I/O 작업을 완료하면, CPU에게 인터럽트를 보내 해당 작업이 완료되었음을 알린다.
-
IRQ를 통해 ISR(Interrupt Service Routine) 실행
- 인터럽트를 받은 CPU는 해당 인터럽트를 처리하기 위해 인터럽트 서비스 루틴(ISR)을 실행한다.
-
커널이 프로세스의 상태를 block -> ready로 변경
- 커널이 I/O 작업의 완료를 인식하면, 프로세스를
block -> ready상태로 변경하여 다시 CPU에
할당될 수 있도록 한다.
- 커널이 I/O 작업의 완료를 인식하면, 프로세스를
장점
-
polling방식과는 달리CPU가 반복적으로 장치의 상태를 확인할 필요가 없어CPU부하가 적다. -
I/O수행 시 다른 프로세스에게CPU가 할당되므로,busy waiting이 없다.
단점
- 인터럽트 발생 시에 일부 오버헤드가 발생할 수 있다.
💡 DMA (Direct Memory Access)
위의 Programmed I/O과 Interrupt-Driven I/O 방식은 I/O 수행에서 CPU가 관여한다는
공통점을 가지고 있다. 하지만, 직접 메모리 접근(Direct Memory Access, DMA)은 CPU의 개입 없이
메모리와 장치 간의 I/O를 수행할 수 있게 해준다.
프로세서의 관여를 없애고, DMA 전송을 수행하는 장치를 DMA Controller라 하고, 이 장치는
CPU와 메모리, 그리고 입출력 장치 간의 데이터를 직접 전송하며 bus를 제어한다.
작동 방식
-
DMA Request
- 입출력 장치가
DMA Controller에 DMA 요청 신호를 보낸다.
- 입출력 장치가
-
Bus 제어
DMA Controller는 데이터 전송을 위해 시스템 버스를 사용해야 하므로CPU에게 버스 제어권을 요청하고, 승인을 받는 과정을 거친다.
-
데이터 전송
-
DMA 컨트롤러가 데이터를 메모리와 입출력 장치 간에 전송한다.
-
이때, 데이터 전송은 CPU의 개입 없이 이루어진다.
-
DMA 컨트롤러는 메모리 버스를 직접 제어하여 데이터를 이동시킨다.
-
-
완료
- 데이터 전송이 완료되면, DMA 컨트롤러는 CPU에게
인터럽트를 발생시켜전송이 완료되었음을 알린다.
- 데이터 전송이 완료되면, DMA 컨트롤러는 CPU에게
장점
-
CPU의 개입 없이대량의 데이터를 고속으로 전송할 수 있어 시스템의 전체적인 효율성이 높아진다. -
CPU가 데이터를 직접 전송할 필요가 없으므로, CPU가 다른 작업을 수행할 수 있게 된다.
Leave a comment