1. 程式人生 > >有限狀態機在程式設計中作用和意義

有限狀態機在程式設計中作用和意義

1.簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型

2.關於狀態機的一個極度確切的描述是它是一個有向圖形,由一組節點和一組相應的轉移函式組成。狀態機通過響應一系列事件而“執行”。每個事件都在屬於“當前” 節點的轉移函式的控制範圍內,其中函式的範圍是節點的一個子集。函式返回“下一個”(也許是同一個)節點。這些節點中至少有一個必須是終態。當到達終態, 狀態機停。。

3.包含一組狀態集(states)、一個起始狀態(start state)、一組輸入符號集(alphabet)、一個對映輸入符號和當前狀態到下一狀態的轉換函式(transition function)的計算模型。當輸入符號串,模型隨即進入起始狀態。它要改變到新的狀態,依賴於轉換函式。在有限狀態機中,會有有許多

變數,例如,狀態 機有很多與動作(actions)轉換(Mealy機)或狀態(摩爾機)關聯的動作,多重起始狀態,基於沒有輸入符號的轉換,或者指定符號和狀態(非定有 限狀態機)的多個轉換,指派給接收狀態(識別者)的一個或多個狀態,等等。

4.

傳統應用程式的控制流程基本是順序的:遵循事先設定的邏輯,從頭到尾地執行。很少有事件能改變標準執行流程;而且這些事件主要涉及異常情況。“命令列實用程式”是這種傳統應用程式的典型例子。 另一類應用程式由外部發生的事件來驅動——換言之,事件在應用程式之外生成,無法由應用程式或程式設計師來控制。具體需要執行的程式碼取決於接收到的事件,或者它 相對於其他事件的抵達時間。所以,控制流程既不能是順序的,也不能是事先設定好的,因為它要依賴於外部事件。
事件驅動
的GUI應用程式是這種應用程式的典 型例子,它們由命令和選擇(也就是使用者造成的事件)來驅動。 Web應用程式由提交的表單和使用者請求的網頁來驅動,它們也可劃歸到上述類別。但是,GUI應用程式對於接收到的事件仍有一定程度的控制,因為這些事件要依賴於向用戶顯示的視窗和控制元件,而視窗和控制元件是由程式設計師控制的。Web應用 程式則不然,因為一旦使用者採取不在預料之中的操作(比如使用瀏覽器的歷史記錄、手工輸入連結以及模擬一次表單提交等等),就很容易打亂設計好的應用程式邏輯。 顯然,必須採取不同的技術來處理這些情況。它能處理任何順序的事件,並能提供有意義的響應——即使這些事件發生的順序和預計的不同。有限狀態機正是為了滿足這方面的要求而設計的。
有限狀態機是一種概念性機器,它能採取某種操作來響應一個外部事件。具體採取的操作不僅能取決於接收到的事件,還能取決於各個事件的相對發生順序。之所以能 做到這一點,是因為機器能跟蹤一個內部狀態,它會在收到事件後進行更新。為一個事件而響應的行動不僅取決於事件本身,還取決於機器的內部狀態。另外,採取 的行動還會決定並更新機器的狀態。這樣一來,任何邏輯都可建模成一系列事件/狀態組合。 [1]狀態機可歸納為4個要素,即現態、條件、動作、次態。這樣的歸納,主要是出於對狀態機的內在因果關係的考慮。“現態”和“條件”是因,“動作”和“次態”是果。詳解如下: ①現態:是指當前所處的狀態。 ②條件:又稱為“事件”,當一個條件被滿足,將會觸發一個動作,或者執行一次狀態的遷移。 ③動作:條件滿足後執行的動作。動作執行完畢後,可以遷移到新的狀態,也可以仍舊保持原狀態。動作不是必需的,當條件滿足後,也可以不執行任何動作,直接遷移到新狀態。 ④次態:條件滿足後要遷往的新狀態。“次態”是相對於“現態”而言的,“次態”一旦被啟用,就轉變成新的“現態”了。

狀態機簡介

狀態機簡寫為FSM(Finite State Machine),主要分為2大類:第一類,若輸出只和狀態有關而與輸入無關,則稱為Moore狀態機;第二類,輸出不僅和狀態有關而且和輸入有關係,則稱為Mealy狀態機。要特別注意的是,因為Mealy狀態機和輸入有關,輸出會受到輸入的干擾,所以可能會產生毛刺(Gitch)現象,使用時應當注意。事實上現在市面上有很多EDA工具可以很方便的將狀態圖的描述轉換成可以綜合的VHDL程式程式碼。
-------------------------------------------------------------------------------------------------------------------------------------------

為Linux應用構造有限狀態機

http://www.ibm.com/developerworks/cn/linux/l-fsmachine/index.html