[10분 테코톡] 호떡의 알아두면 쓸데있는 I/O 기본 개념
- I/O는 컴퓨터 장치나 시스템 간 데이터 이동을 의미하며, 응용 프로그램 관점에서는 프로그램과 외부 장치/시스템 간의 데이터 송수신을 지칭한다. 🔄
- Input은 데이터가 들어오는 것, Output은 데이터가 나가는 것을 의미하며, 주체에 따라 방향이 결정된다. 📤
- 버퍼는 일정한 크기의 메모리 공간을 의미하며, I/O 과정에서 데이터 임시 저장소 역할을 한다. 💾
- 응용 프로그램은 하드웨어 직접 제어 대신 커널의 시스템 콜 인터페이스를 통해 I/O를 수행한다. ⚙️
- 리눅스에서는 모든 하드웨어 장치(모니터, 키보드, 디스크 등)가 파일로 추상화되어, 파일 I/O 방식으로 통일된 접근이 가능하다. 🗂️
- 시스템 콜은 커널의 기능을 안전하게 사용하기 위한 인터페이스로, open, read, write 등이 있다. 🔑
- open 시스템 콜은 파일 식별자인 파일 디스크립터를 획득하는 역할을 한다. 🆔
- read, write 시스템 콜은 파일 I/O를 직접 수행하며, 파일 디스크립터와 버퍼 주소를 인자로 받는다. ✍️
- 표준 입출력(키보드, 모니터)은 미리 정의된 파일 디스크립터(0, 1, 2)를 사용한다. ⌨️
- 애플리케이션 종류(자바, MySQL 등)에 관계없이, 커널 위에서 동작하는 I/O는 시스템 콜을 통해 동일하게 수행된다. 💻
- 응용 프로그램 관점에서 I/O는 유저 레벨 버퍼와 커널 레벨 버퍼 간의 데이터 복사로 이해할 수 있다. 📑
- Blocking I/O는 커널 버퍼에 데이터가 준비될 때까지 스레드가 대기하는 I/O 방식이다. ⏳