В информационных технологиях и информатике система описывается как сохраняющая состояние , если она предназначена для запоминания предыдущих событий или взаимодействий пользователя; [1] сохраненная информация называется состоянием системы.
Набор состояний, которые может занимать система, называется ее пространством состояний . В дискретной системе пространство состояний счетно и часто конечно . Внутреннее поведение системы или ее взаимодействие с окружающей средой состоит из отдельно происходящих индивидуальных действий или событий, таких как принятие ввода или создание вывода, которые могут или не могут заставить систему изменить свое состояние. Примерами таких систем являются цифровые логические схемы и компоненты, автоматы и формальный язык , компьютерные программы и компьютеры .
Выход цифровой схемы или детерминированной компьютерной программы в любой момент времени полностью определяется ее текущими входами и ее состоянием. [2]
Цифровые логические схемы можно разделить на два типа: комбинационная логика , выходные сигналы которой зависят только от ее текущих входных сигналов, и последовательная логика , выходные сигналы которой являются функцией как текущих входов, так и прошлой истории входов. [3] В последовательной логике информация из прошлых входов хранится в электронных элементах памяти, таких как триггеры . Сохраненное содержимое этих элементов памяти в определенный момент времени в совокупности называется состоянием схемы и содержит всю информацию о прошлом, к которой схема имеет доступ. [4]
Поскольку каждый двоичный элемент памяти , такой как триггер, имеет только два возможных состояния, один или ноль , и существует конечное число элементов памяти, цифровая схема имеет только определенное конечное число возможных состояний. Если N — число двоичных элементов памяти в схеме, максимальное число состояний, которое может иметь схема, равно 2 N .
Аналогично, компьютерная программа хранит данные в переменных , которые представляют собой ячейки памяти компьютера . Содержимое этих ячеек памяти в любой момент выполнения программы называется состоянием программы . [5] [6] [7]
Более специализированное определение состояния используется для компьютерных программ, которые работают последовательно или последовательно с потоками данных , такими как парсеры , брандмауэры , протоколы связи и шифрование . Последовательные программы работают с входящими символами данных или пакетами последовательно, по одному за раз. В некоторых из этих программ информация о предыдущих полученных символах данных или пакетах хранится в переменных и используется для воздействия на обработку текущего символа или пакета. Это называется протоколом с сохранением состояния , а данные, перенесенные из предыдущего цикла обработки, называются состоянием . В других программа не имеет информации о предыдущем потоке данных и начинает заново с каждым вводом данных; это называется протоколом без сохранения состояния .
Императивное программирование — это парадигма программирования (способ проектирования языка программирования ), которая описывает вычисления в терминах состояния программы и операторов, которые изменяют состояние программы. Изменения состояния неявны и управляются средой выполнения программы, так что подпрограмма имеет видимость изменений состояния, сделанных другими частями программы, известных как побочные эффекты .
В декларативных языках программирования программа описывает желаемые результаты и не указывает изменения состояния напрямую.
В функциональном программировании состояние обычно представляется с помощью временной логики в виде явных переменных, которые представляют состояние программы на каждом шаге выполнения программы: переменная состояния передается как входной параметр функции преобразования состояния, которая возвращает обновленное состояние как часть своего возвращаемого значения. Чистая функциональная подпрограмма имеет видимость только изменений состояния, представленных переменными состояния в ее области действия.
Выход последовательной схемы или компьютерной программы в любой момент времени полностью определяется ее текущими входами и текущим состоянием. Поскольку каждый двоичный элемент памяти имеет только два возможных состояния, 0 или 1, общее число различных состояний, которые может принять схема, конечно и фиксировано числом элементов памяти. Если имеется N двоичных элементов памяти, цифровая схема может иметь не более 2 N различных состояний. Понятие состояния формализовано в абстрактной математической модели вычислений, называемой конечным автоматом , используемой для проектирования как последовательных цифровых схем, так и компьютерных программ.
Примером повседневного устройства, имеющего состояние, является телевизор . Чтобы сменить канал телевизора, пользователь обычно нажимает кнопку переключения каналов вверх или вниз на пульте дистанционного управления, которая отправляет закодированное сообщение на телевизор. Чтобы вычислить новый канал, который хочет пользователь, цифровой тюнер в телевизоре должен сохранить в себе номер текущего канала, на котором он находится. Затем он добавляет единицу или вычитает единицу из этого номера, чтобы получить номер нового канала, и настраивает телевизор на прием этого канала. Затем этот новый номер сохраняется как текущий канал . Аналогично телевизор также сохраняет номер, который управляет уровнем громкости, производимым динамиком. Нажатие кнопок увеличения или уменьшения громкости увеличивает или уменьшает этот номер, устанавливая новый уровень громкости. Как текущий канал , так и текущий номер громкости являются частью состояния телевизора. Они хранятся в энергонезависимой памяти , которая сохраняет информацию при выключении телевизора, поэтому при повторном включении телевизор вернется к предыдущей станции и уровню громкости.
В качестве другого примера, состояние микропроцессора — это содержимое всех элементов памяти в нем: аккумуляторов , регистров хранения , кэшей данных и флагов . Когда компьютеры, такие как ноутбуки, переходят в режим гибернации для экономии энергии путем отключения процессора, состояние процессора сохраняется на жестком диске компьютера , поэтому его можно восстановить, когда компьютер выйдет из режима гибернации, и процессор сможет продолжить работу с того места, на котором остановился.
страница 46