Введение
В информационных технологиях и компьютерных науках система описывается как сохраняющая состояние, если она разработана для запоминания предыдущих событий или взаимодействий с пользователем; запоминаемая информация называется состоянием системы. Множество состояний, которые система может занимать, известно как её пространство состояний. В дискретной системе пространство состояний счетно и часто конечно. Внутреннее поведение системы или её взаимодействие с окружающей средой состоит из отдельных, последовательно происходящих действий или событий, таких как прием входных данных или выдача результатов, которые могут, но не обязательно, приводить к изменению состояния системы. Примерами таких систем являются цифровые логические схемы и компоненты, автоматы и формальные языки, компьютерные программы и компьютеры. Выход цифровой схемы или детерминированной компьютерной программы в любой момент времени полностью определяется её текущими входными данными и её состоянием.
In information technology and computer science, a system is described as stateful if it is designed to remember preceding events or user interactions; the remembered information is called the state of the system. The set of states a system can occupy is known as its state space. In a discrete system, the state space is countable and often finite. The system's internal behaviour or interaction with its environment consists of separately occurring individual actions or events, such as accepting input or producing output, that may or may not cause the system to change its state. Examples of such systems are digital logic circuits and components, automata and formal language, computer programs, and computers. The output of a digital circuit or deterministic computer program at any time is completely determined by its current inputs and its state.
Состояние цифровой логической схемы
Цифровые логические схемы можно разделить на два типа: комбинационную логику, выходные сигналы которой зависят только от текущих входных сигналов, и последовательную логику, выходные сигналы которой являются функцией как текущих входов, так и предыдущей истории входов. В последовательной логике информация о предыдущих входах сохраняется в электронных элементах памяти, таких как триггеры. Совокупность содержимого этих элементов памяти в определенный момент времени называется состоянием схемы и содержит всю информацию о прошлом, к которой схема имеет доступ. Поскольку каждый двоичный элемент памяти, такой как триггер, имеет только два возможных состояния – один или ноль – и количество элементов памяти конечно, цифровая схема может находиться только в конечном числе состояний. Если N – количество двоичных элементов памяти в схеме, то максимальное число возможных состояний схемы равно 2N.
Состояние программы
Аналогичным образом, компьютерная программа хранит данные в переменных, которые представляют собой области хранения в памяти компьютера. Содержимое этих областей памяти в любой момент выполнения программы называется состоянием программы. Более узкое определение состояния используется для компьютерных программ, которые обрабатывают потоки данных последовательно, таких как парсеры, межсетевые экраны, протоколы связи и шифрование. Последовательные программы обрабатывают входящие символы данных или пакеты по одному, последовательно. В некоторых из этих программ информация о ранее полученных символах данных или пакетах сохраняется в переменных и используется для обработки текущего символа или пакета. Это называется протоколом с состоянием, а данные, переносимые из предыдущего цикла обработки, – состоянием. В других программах отсутствует информация о предыдущем потоке данных, и обработка начинается заново с каждым новым вводом; это называется протоколом без состояния. Императивное программирование – это парадигма программирования (способ проектирования языка программирования), описывающая вычисления с точки зрения состояния программы и операторов, изменяющих это состояние. Изменения состояния неявны и управляются средой выполнения программы, поэтому подпрограмма имеет доступ к изменениям состояния, внесенным другими частями программы, известным как побочные эффекты. В декларативных языках программирования программа описывает желаемые результаты, не указывая напрямую изменения состояния. В функциональном программировании состояние обычно представляется с помощью темпоральной логики в виде явных переменных, отражающих состояние программы на каждом шаге выполнения: переменная состояния передается в качестве входного параметра функции преобразования состояния, которая возвращает обновленное состояние как часть возвращаемого значения. Чистая функциональная подпрограмма имеет доступ только к изменениям состояния, представленным переменными состояния в ее области видимости.
Машины с конечным состоянием
Выход последовательной схемы или компьютерной программы в любой момент времени полностью определяется ее текущими входами и текущим состоянием. Поскольку каждый двоичный элемент памяти имеет только два возможных состояния – 0 или 1 – общее число различных состояний, которые может принять схема, конечно и определяется количеством элементов памяти. Если имеется N двоичных элементов памяти, цифровая схема может иметь не более 2N различных состояний. Понятие состояния формализовано в абстрактной математической модели вычислений, называемой конечным автоматом, который используется для проектирования как последовательных цифровых схем, так и компьютерных программ.
Примеры
Примером повседневного устройства, имеющего состояние, является телевизор. Чтобы переключить канал, пользователь обычно нажимает кнопку "канал вверх" или "канал вниз" на пульте дистанционного управления, который отправляет закодированное сообщение на телевизор. Для вычисления желаемого канала цифровой тюнер в телевизоре должен хранить номер текущего канала. Затем он прибавляет или отнимает единицу от этого номера, чтобы получить номер нового канала, и настраивает телевизор на его прием. Этот новый номер затем сохраняется как текущий канал. Аналогично, телевизор также хранит число, контролирующее уровень громкости, воспроизводимой динамиком. Нажатие кнопок "увеличение громкости" или "уменьшение громкости" увеличивает или уменьшает это число, устанавливая новый уровень громкости. И текущий канал, и текущий уровень громкости являются частью состояния телевизора. Они хранятся в энергонезависимой памяти, которая сохраняет информацию при выключении телевизора, поэтому при повторном включении телевизор возвращается к предыдущему каналу и уровню громкости. В качестве другого примера, состояние микропроцессора – это содержимое всех его элементов памяти: аккумуляторов, регистров хранения, кэшей данных и флагов. Когда компьютеры, такие как ноутбуки, переходят в режим гибернации для экономии энергии, отключая процессор, состояние процессора сохраняется на жестком диске компьютера, чтобы его можно было восстановить при выходе из режима гибернации, и процессор мог продолжить работу с того места, где он остановился.