비트스트림 (컴퓨터 과학)
1. 개요
비트스트림은 일련의 비트로 구성된 데이터 스트림을 의미한다. 비트스트림은 바이트스트림을 인코딩하는 데 직접 사용되지 않으며, FPGA 구성 데이터 설명, 특정 무한 수열의 수학적 특성 연구, 압축 알고리즘 코딩 등에 활용된다. 운영 체제는 바이트스트림 패러다임으로 변환하며, TCP는 양방향 바이트 스트림을 제공한다. 비트스트림의 내용은 동적으로 생성될 수 있으며, 흐름 제어를 통해 데이터 생성 속도와 소비 속도를 조절한다.
이미지 준비중입니다.
| 종류 | 디지털 데이터 시퀀스 |
|---|---|
| 구성 요소 | 비트 바이트 |
| 사용 분야 | 통신 암호학 데이터 압축 오디오 및 비디오 처리 |
| 전송 방식 | 직렬 또는 병렬 |
|---|---|
| 데이터 형태 | 연속적인 데이터 흐름 |
| 통신 | 데이터 전송 시 비트 단위로 전송 |
|---|---|
| 암호학 | 암호화 및 복호화 과정에서 사용 |
| 데이터 압축 | 데이터 압축 알고리즘의 입력 또는 출력 형태 |
| 오디오 및 비디오 처리 | 디지털 오디오 및 비디오 데이터를 표현하고 처리 |
| 데이터 스트림 | 유사한 개념이지만 더 넓은 의미를 가짐 |
|---|
2. 바이트스트림과의 관계
실제로 비트스트림은 바이트스트림을 인코딩하는 데 직접 사용되지는 않는다. 통신 채널은 비트로 직접 변환되지 않는 신호 방식(예를 들어, 여러 주파수의 신호를 전송하는 방식)을 사용할 수 있으며, 일반적으로 데이터와 함께 프레임 동기화나 오류 정정과 같은 다른 정보도 함께 인코딩한다.
3. 예시
비트스트림이라는 용어는 필드 프로그래머블 게이트 어레이(FPGA)에 로드될 구성 데이터를 설명하는 데 자주 사용된다. 대부분의 FPGA는 바이트 병렬 로딩 방식도 지원하지만, 이 용어는 일반적으로 직렬 비트 스트림, 특히 직렬 PROM 또는 플래시 메모리 칩에서 FPGA를 구성하는 방식에서 유래되었을 수 있다. 특정 FPGA에 대한 비트스트림의 자세한 형식은 일반적으로 FPGA 공급업체의 고유 자산이다.
수학에서 몇 가지 특정 무한 수열의 비트가 수학적 특성으로 연구되었다. 여기에는 바움-스위트 수열, 에렌푀이히트-미키엘스키 수열, 피보나치 단어, 콜라코스키 수열, 정규 종이접기 수열, 루딘-샤피로 수열, 투에-모르스 수열이 포함된다.
유닉스 계열 및 윈도우를 포함한 대부분의 운영 체제에서 표준 I/O 라이브러리는 하위 수준의 페이징 또는 버퍼링된 파일 액세스를 바이트스트림 패러다임으로 변환한다. 특히, 유닉스 계열 운영 체제에서 각 프로세스는 단방향 바이트스트림의 예인 세 개의 표준 스트림을 갖는다. 유닉스 파이프 메커니즘은 서로 다른 프로세스 간의 바이트스트림 통신을 제공한다.
압축 알고리즘은 바이트(메모리의 가장 작은 주소 지정 가능 단위)가 제공하는 8비트가 낭비될 수 있으므로 종종 비트스트림으로 코딩된다. 일반적으로 저수준 프로그래밍 언어로 구현되지만, Python 및 Java와 같은 일부 고수준 프로그래밍 언어는 비트스트림 I/O를 위한 네이티브 인터페이스를 제공한다.
클라이언트에게 바이트 스트림 서비스를 제공하는 잘 알려진 통신 프로토콜의 예는 양방향 바이트 스트림을 제공하는 인터넷 프로토콜 스위트의 전송 제어 프로토콜(TCP)이다.
임의의 바이트 스트림에 대한 인터넷 미디어 유형은 `application/octet-stream`이다. 다른 미디어 유형은 잘 알려진 형식의 바이트스트림에 대해 정의된다.
4. 흐름 제어
비트스트림의 내용은 키보드 입력이나 의사 난수 생성기의 데이터처럼 동적으로 생성되는 경우가 많다.
이때 비트스트림을 생성하는 생산자(producer)와 이를 사용하는 소비자(consumer) 간의 처리 속도 차이로 인해 여러 문제가 발생할 수 있다.
만약 소비자가 생산자보다 데이터를 더 빨리 처리한다면, 시스템은 프로세스 동기화를 사용하여 소비자가 다음 데이터를 사용할 수 있을 때까지 기다리게 한다.
반대로 생산자가 소비자보다 데이터를 더 빨리 생성하는 경우, 시스템은 몇 가지 방식으로 처리한다. 생산자가 소프트웨어 알고리즘이라면 시스템은 프로세스 동기화를 통해 생산자를 잠시 멈춘다. 생산자가 흐름 제어 기능을 지원한다면, 시스템은 소비자가 다음 데이터를 받을 준비가 되었을 때만 생산자에게 신호를 보낸다.
하지만 키보드 입력처럼 생산자를 멈출 수 없거나 흐름 제어를 지원하지 않는 하드웨어의 경우, 시스템은 일반적으로 데이터를 임시로 저장하기 위해 큐와 같은 버퍼를 사용한다. 대부분의 경우 소비자는 버퍼가 가득 차기 전에 데이터를 처리할 수 있다. 그러나 버퍼가 가득 찼는데도 생산자가 계속해서 빠르게 데이터를 보내면, 버퍼 오버플로우, 패킷 손실, 네트워크 정체, 심각한 경우 서비스 거부와 같은 문제가 발생할 수 있다.