V informatice a teorii automatů je stav digitálního logického obvodu nebo počítačového programu odborný termín pro všechny uložené informace, ke kterým má obvod nebo program aktuálně přístup [1] . Výstup digitálního obvodu nebo počítačového programu v jakémkoli daném čase je zcela určen jeho aktuálním vstupem a jeho stavem.
Digitální logické obvody lze rozdělit na dva typy: kombinační logiku , jejíž výstupní signály závisí pouze na vstupních signálech, a sekvenční (sériovou) logiku , jejíž výstupní data jsou funkcí aktuálních i vstupních dat přijatých na vstupu v minulosti [2 ] .
V sekvenční logice jsou informace přijaté dříve na vstupech uloženy v paměti elektronických prvků, jako jsou spouštěče , paměťové buňky. Uložený obsah těchto paměťových prvků v daném časovém okamžiku, souhrnně označovaný jako „stav“ obvodu, obsahuje všechny informace o minulosti, ke kterým má zařízení přístup [3] .
Například aktuální stav mikroprocesoru (počítačového čipu) je určen obsahem všech jeho paměťových prvků: akumulátorů , registrů úložišť , mezipaměti dat a příznaků .
Když počítač přepnete do režimu „hibernace“ nebo „spánku“, abyste šetřili energii vypnutím procesoru, paměti a dalších zařízení, stav procesoru a paměti RAM se zapíše do externí energeticky nezávislé paměti, obvykle na disk počítače. , při zapnutí počítače z režimu hibernace dojde k obnovení obsahu registrů RAM a procesoru a ve vykonávání programu přerušeného hibernací lze správně pokračovat.
Podobně se ukládá stav procesoru při zpracování externích přerušení programu vnějšími událostmi, které mohou nastat v neočekávaných časech. Aby přerušený aktuální program po dokončení zpracování přerušení správně pokračoval ve své práci, je nutné uložit stav těch registrů a paměti, které používá obsluha přerušení. Před předáním řízení přerušenému programu obsluha přerušení obnoví stav procesoru a paměťových registrů a předá řízení přerušenému programu. Uložení a obnovení stavu provádí externí obsluha přerušení.
Protože každý binární paměťový prvek, jako je klopný obvod nebo bit registru, má pouze dva možné stavy, „logická jednička“ nebo „logická nula“, a takových binárních paměťových prvků je konečný počet, má každý digitální obvod konečný počet možných stavů. Pokud je počet binárních paměťových prvků v obvodu N , pak maximální možný počet stavů bude 2 N .
Počítačové programy ukládají data do proměnných , což jsou oblasti uložení dat v paměti počítače, obsah těchto oblastí paměti kdykoliv během provádění programu nazýváme stav programu [4] [5] [6] .
Imperativní programování je programovací paradigma (způsob navrhování programovacího jazyka ), které popisuje stavy a příkazy, které mění stav programu. Naproti tomu v deklarativních programovacích jazycích program popisuje požadovaný výsledek, aniž by přímo specifikoval změny stavu. Specializovanější definice stavu se používá v některých počítačových programech, které pracují sériově na datových tocích, jako jsou analyzátory , firewally , protokoly přenosu dat a šifrovací programy . Sériové programy zpracovávají příchozí data, znaky nebo pakety postupně, jeden po druhém. V některých z těchto programů jsou informace o dříve přijatých znacích nebo datových paketech uloženy v proměnných a použity k ovlivnění zpracování aktuálního znaku nebo paketu. To se nazývá „stavový protokol“ a data přenesená z předchozího cyklu zpracování se nazývají „stav“. V ostatních případech program nemá žádné informace o předchozím datovém toku a s každým vstupem začíná „čistý“; tomu se říká „bezstavový protokol“.
Výstup sériového obvodu nebo počítačového programu v libovolném okamžiku je zcela určen aktuálními vstupními daty a aktuálním stavem. Protože každý binární paměťový prvek má pouze dva možné stavy, 0 nebo 1, předpokládá se, že celkový počet stavů sítě je konečný a pevně daný počtem paměťových prvků. Pokud je počet binárních paměťových prvků v obvodu N , pak maximální možný počet stavů bude 2 N . Koncept stavu, zarámovaný v abstraktním matematickém modelu práce na počítači , se nazývá konečný stavový stroj , který se používá k vývoji jak sekvenčních digitálních obvodů, tak počítačových programů.
Existují následující typy stavů: