상태 (컴퓨터 과학)

정보기술과 컴퓨터 과학에서 시스템은 이전 이벤트나 사용자 상호작용을 기억하도록 설계된 경우 스테이트풀(stateful), 즉 상태 저장으로 설명된다. 기억된 정보를 시스템의 상태(state)라고 부른다.

시스템이 차지할 수 있는 상태 집합은 상태 공간으로 알려져 있다. 이산 시스템에서 상태 공간은 가산이고 종종 유한하다. 시스템의 내부 동작 또는 환경과의 상호작용은 입력 수락 또는 출력 생성과 같이 개별적으로 발생하는 개별 동작 또는 이벤트로 구성되며, 이는 시스템이 상태를 변경하게 할 수도 있고 하지 않을 수도 있다. 이러한 시스템의 예로는 디지털 논리 회로 및 구성 요소, 오토마타 및 형식 언어, 컴퓨터 프로그램 및 컴퓨터가 있다.

어떤 시점에서든 디지털 회로나 결정론적 컴퓨터 프로그램의 출력은 현재 입력과 상태에 의해 완전히 결정된다.

디지털 논리 회로 상태
디지털 논리 회로는 두 가지 유형으로 나눌 수 있다. 출력 신호가 현재 입력 신호에만 의존하는 조합 논리와 출력이 현재 입력과 이전 입력 이력 모두의 함수인 순차 논리이다. 순차 논리에서 이전 입력 정보는 플립플롭과 같은 전자 메모리 요소에 저장된다. 특정 시점에서 이 메모리 요소의 저장된 내용은 집합적으로 회로의 상태라고 불리며 회로가 접근할 수 있는 과거에 대한 모든 정보를 포함한다.

플립플롭과 같은 각 이진 메모리 요소는 0 또는 1의 두 가지 가능한 상태만 가지며, 유한한 수의 메모리 요소가 있으므로 디지털 회로는 특정 유한한 수의 가능한 상태만 가진다. 회로의 이진 메모리 요소 수가 N이면 회로가 가질 수 있는 최대 상태 수는 2N이다.

프로그램 상태
마찬가지로, 컴퓨터 프로그램은 변수에 데이터를 저장하며, 이는 컴퓨터의 메모리에 있는 저장 위치를 나타낸다. 프로그램 실행의 특정 시점에서 이 메모리 위치의 내용은 프로그램의 상태라고 불린다.

상태에 대한 보다 특수한 정의는 데이터 스트림에서 직렬 또는 순차적으로 작동하는 구문 분석기, 방화벽, 통신 프로토콜 및 암호화와 같은 컴퓨터 프로그램에 사용된다. 직렬 프로그램은 수신 데이터 문자 또는 패킷을 순차적으로 한 번에 하나씩 처리한다. 이러한 프로그램 중 일부에서는 이전에 수신된 데이터 문자 또는 패킷에 대한 정보가 변수에 저장되고 현재 문자 또는 패킷 처리에 영향을 미치는 데 사용된다. 이를 스테이트풀 프로토콜이라고 하며 이전 처리 주기에서 전달된 데이터를 상태라고 한다. 다른 프로그램에서는 이전 데이터 스트림에 대한 정보가 없으며 각 데이터 입력과 함께 새로 시작한다. 이를 무상태 프로토콜이라고 한다.

명령형 프로그래밍은 프로그램 상태와 프로그램 상태를 변경하는 문장 측면에서 계산을 설명하는 프로그래밍 패러다임 (프로그래밍 언어를 설계하는 방식)이다. 상태 변경은 프로그램 런타임에 의해 암묵적으로 관리되므로 서브루틴은 가시성을 가지며, 이는 부작용으로 알려진 프로그램의 다른 부분에 의해 이루어진 상태 변경을 볼 수 있다.

선언형 프로그래밍 언어에서는 프로그램이 원하는 결과를 설명하고 상태 변경을 직접 지정하지 않는다.

함수형 프로그래밍에서 상태는 일반적으로 시간 논리를 사용하여 프로그램 실행의 각 단계에서 프로그램 상태를 나타내는 명시적 변수로 표현된다. 상태 변수는 상태 변환 함수의 입력 매개변수로 전달되며, 업데이트된 상태는 반환 값의 일부로 반환된다. 순수 함수형 서브루틴은 해당 범위의 상태 변수로 표현되는 상태 변경에 대한 가시성만 가진다.

유한 상태 기계
순차 회로나 컴퓨터 프로그램의 출력은 어떤 시점에서든 현재 입력과 현재 상태에 의해 완전히 결정된다. 각 이진 메모리 요소는 0 또는 1의 두 가지 가능한 상태만 가지므로 회로가 취할 수 있는 총 다른 상태의 수는 유한하며 메모리 요소의 수에 의해 고정된다. N개의 이진 메모리 요소가 있다면 디지털 회로는 최대 2N개의 고유한 상태를 가질 수 있다. 상태의 개념은 순차 디지털 회로와 컴퓨터 프로그램을 설계하는 데 사용되는 유한 상태 기계라고 불리는 추상 수학적 계산 모델에서 공식화된다.

예시
상태를 가지는 일상적인 장치의 예로는 텔레비전 수상기가 있다. TV 채널을 변경하려면 사용자는 일반적으로 리모컨의 채널 올림 또는 채널 내림 버튼을 눌러 TV에 코딩된 메시지를 보낸다. 사용자가 원하는 새 채널을 계산하기 위해 텔레비전의 디지털 튜너에는 현재 채널 번호가 저장되어 있어야 한다. 그런 다음 이 번호에 1을 더하거나 1을 빼서 새 채널 번호를 얻고, TV를 해당 채널을 수신하도록 조정한다. 이 새 번호는 현재 채널로 저장된다. 마찬가지로 텔레비전은 스피커에서 생성되는 음량 수준을 제어하는 번호도 저장한다. 볼륨 올림 또는 볼륨 내림 버튼을 누르면 이 번호가 증가하거나 감소하여 새로운 볼륨 수준을 설정한다. 현재 채널 번호와 현재 볼륨 번호는 모두 TV 상태의 일부이다. 이들은 TV가 꺼졌을 때 정보를 보존하는 비휘발성 메모리에 저장되므로, 다시 켜졌을 때 TV는 이전 방송국과 볼륨 수준으로 돌아갈 것이다.

다른 예로, 마이크로프로세서의 상태는 누산기, 저장 레지스터, 데이터 캐시 및 플래그와 같이 그 안에 있는 모든 메모리 요소의 내용이다. 노트북과 같은 컴퓨터가 프로세서를 종료하여 에너지를 절약하기 위해 최대 절전 모드로 전환될 때, 프로세서의 상태는 컴퓨터의 하드 디스크에 저장되므로 컴퓨터가 최대 절전 모드에서 깨어났을 때 복원될 수 있으며 프로세서는 중단된 지점부터 작업을 다시 시작할 수 있다.

 같이 보기 
 데이터 (컴퓨팅)

 각주 

분류:인지
분류:계산 모형