728x90
반응형
데이터 스트림 (Data Stream)
데이터 스트림은 데이터가 연속적으로 흐르는 통로를 의미합니다. 프로그램이나 프로세스가 데이터를 읽거나 쓸 때, 데이터 스트림을 통해 데이터를 주고받습니다.
표준 스트림 (Standard Streams)
표준 스트림은 데이터 스트림 중에서 프로세스가 입출력 및 오류 처리를 위해 사용하는 기본 스트림입니다. 표준 스트림은 다음과 같이 세 가지로 구분됩니다.
- 표준 입력 (Standard Input, stdin) :
- 입력 데이터를 처리하는 스트림
- 보통 파일 디스크립터 0번을 참조
- 리다이렉션 (<) 을 통해 표준 입력의 연결 대상 변경 가능
- 표준 출력 (Standard Output, stdout) :
- 정상적인 출력을 처리하는 스트림
- 보통 파일 디스크립터 1번을 참조
- 리다이렉션 (>) 을 통해 표준 출력의 연결 대상 변경 가능
- 표준 오류 (Standard Error, stderr) :
- 오류 메시지를 처리하는 스트림
- 보통 파일 디스크립터 2번을 참조
- 리다이렉션 (2>) 을 통해 표준 오류의 연결 대상 변경 가능
파일 디스크립터 (File Descriptor)
파일 디스크립터는 파일, 터미널, 소켓 등 자원을 가리키는 추상적인 참조 (핸들) 입니다. 표준 입력, 표준 출력, 표준 오류는 각각의 파일 디스크립터를 참조하여 자원에 접근하며 프로세스는 이를 통해 입출력 작업을 수행합니다.
- 파일 디스크립터 0번:
- 보통 표준 입력 (stdin) 에 할당
- 디폴트로 키보드 입력을 가리킴
- 파일 디스크립터 1번:
- 보통 표준 출력 (stdout) 에 할당
- 디폴트로 터미널을 가리킴
- 파일 디스크립터 2번:
- 보통 표준 에러 (stderr) 에 할당
- 디폴트로 터미널을 가리킴
프로세스 생성 시 커널은 기본적으로 파일 디스크립터 0, 1, 2 번을 각각 표준 입력, 표준 출력, 표준 오류에 연결시킨 후 각 표준 스트림을 해당 프로세스에 할당합니다.
표준 스트림 동작 원리
예를 들어 echo hi > output.txt 명령어에서 표준 스트림이 어떻게 동작하는지 살펴보면 다음과 같습니다.
- 리다이렉션 설정 (파일 디스크립터가 참조하는 객체 (목적지) 변경) :
- 셸은 > 를 보고, 표준 출력이 참조하는 파일 디스크립터의 목적지를 output.txt 파일로 변경해야 한다고 인식합니다.
- 셸은 시스템 호출을 통해 해당 파일 디스크립터의 목적지를 output.txt 로 변경해 달라고 커널에 요청합니다.
- 커널은 해당 파일 디스크립터가 터미널이 아닌 output.txt 파일을 가리키도록 설정합니다.
- echo hi 명령 실행 (데이터 출력) :
- 셸은 echo hi 명령을 해석하여 시스템 호출을 통해 "hi" 라는 데이터를 표준 출력으로 보내달라고 커널에 요청합니다.
- 표준 출력은 이미 output.txt 로 리다이렉션 된 상태이므로, 커널은 표준 출력에 보내는 데이터를 output.txt 에 보내 기록을 완료합니다.
728x90
반응형
'CS > OS' 카테고리의 다른 글
프로세스 (Process) vs 쓰레드 (Thread) (2) | 2024.10.10 |
---|---|
메모리 (Memory) (5) | 2024.10.05 |
커널 (Kernel) (3) | 2024.09.24 |
프로그램 vs 프로세스 (1) | 2024.09.23 |
CLI 환경의 이해 (6) | 2024.09.16 |