linux <1> | linux I/O streams란?
들어가기 전_
stream이라는 단어는 데이터를 전송하는 통로로 많이 들어보셨을 거 같은데요. 클라이언트에서 서버 데이터를 다운로드할 때, 음악을 들을 때 stream라는 데이터 통로를 통해 들어오기도 하죠. I/O streams의 앞에 있는 것은 input / output 즉 입출력 뜻하고 뒤에 있는 streams은 데이터 통로를 의미합니다. 즉 정리하자면 '입출력 데이터 통로'가 되겠네요. 해당 통로가 왜 있는지, 어떠한 역할을 하고 있는지, 어떻게 작동하고 있는지에 대해 소개하겠습니다.
1. 해당 통로가 왜 있나요?
kernel space에 대해 알고 있었나요?
일단 kernel의 뜻을 간단히 알고 넘어가겠습니다. kernel은 램, 디스크, 키보드와 같은 외부 장치들을 포함한 모든 하드웨어 리소스의 관리를 담당합니다. 그러한 리소스가 있는 환경을 kernel space라 칭합니다. 또한 kernel space는 애플리케이션에서 직접 접근할 수 없습니다.
왜 접근할 수 없는 것이죠?
kernel은 하드웨어만 관리하도록 개발되었으며 이에 반대되는 개념인 user space는 애플리케이션을 위해 개발되었습니다. 만약 애플리케이션에서 cpu나 메모리를 직접 접근하는 것은 매우 위험한 행위이기에 제한되어 있습니다.
그렇기에
간접적으로 통신을 제공하는 매체를 통해 kernel space와 user space는 통신을 할 수 있습니다. 대표적인 것이 stream이죠.
2. 어떠한 역할을 하고 있나요? / 어떻게 작동하고 있나요?
사전적 의미
Stream은 kernel space의 STREAMS driver를 사용하여 user space에 존재하는 프로세스와 양방향으로 통신할 수 있도록하는 데이터 통로입니다. 여기서 입력은 STDIN, 출력은 STDOUT 또는 오류 발생 시 STDERR로 볼 수 있겠습니다.
스트림 종류 3가지 STDIN , STDOUT, STDERR
STDIN
한글로는 표준 입력이라 부릅니다.
해당 스트림은 키보드, 마우스와 같은 외부 장치로부터 데이터를 입력받는 통로를 의미합니다.
STDOUT
한글로는 표준 출력이라 부릅니다.
입력된 데이터의 정상적인 처리 결과를 전송하는 통로입니다.
STDERR
한글로는 표준 오류메시지 출력이라 부릅니다.
입력된 데이터를 처리중 오류가 발생하였을 때 오류 메시지를 전송하는 통로입니다.
요약
Stream
Stream은 kernel space의 STREAMS driver와 user space의 프로세스간의 양방향으로 데이터를 전달할 수 있는 데이터 통로
STDIN 표준 입력
외부장치로부터 데이터를 입력받는 stream
STDOUT 표준 출력
입력된 데이터를 성공적으로 처리된 결과를 보내는 stream
STDERR 표준 오류 출력
입력된 데이터를 처리 실패하였을 때 오류를 출력하는 stream
끝내는 말
stream이랑 tty 정리하느라 못 올렸던 도커 학습 포스트도 올려야겠네요.
읽어주셔서 감사합니다!
Reference
- What Is STREAMS? (STREAMS Programming Guide) (oracle.com)
- Logs and metrics | Docker Docs
- Architecting Containers Part 1: Why Understanding User Space vs. Kernel Space Matters (redhat.com)
- (OS) 커널(Kernel)이란?. 개발 공부를 하다 커널(Kernel)이란 용어를 자주 접했었는데요… | by Su Bak | Medium
- 커널 (컴퓨팅) - 위키백과, 우리 모두의 백과사전 (wikipedia.org)
- STREAMS Definitions (STREAMS Programming Guide) (oracle.com)
수정 또는 추가해야 할 부분이 있으면 댓글로 알려주세요!