A Turing-gép

A Turing-gép architektúrája

Megjegyzés: A Turing-gépnek több "változata" is létezik a szakirodalomban (pl. balról is végtelen szalag, ún. "igen" és "nem" típusú elfogadó, ill. elutasító megállási állapotok a halt vagy stop állapot mellett, stb.). A különbözőképpen definiált Turing-gépek azonban ekvivalensek egymással.

A Turing-gép egy végletekig leegyszerűsített számítógép elméleti modelljének tekinthető, amellyel egyszerűsége ellenére minden adatfeldolgozási algoritmus leírható. Ezt fejezi ki az ún. Church-tézis.

Church-tézis (1936)

Minden intuitív értelemben kiszámíthatónak tekinthető (azaz algoritmizálható) függvényt ki lehet számítani a Turing-géppel.

A Turing-gép részei:

(1) egy jobbra végtelen hosszúságú szalag, a Turing-gép memóriája, amely cellákból (vagy rekeszekből) áll

(2) egy író-olvasó fej, amely minden lépésben

(3) egy állapotregiszter (R), amely a Turing-gép aktuális állapotát tárolja (induláskor az ún. kezdőállapotot)

(4) egy (központi) vezérlő egység (KVE), amely tárolja és lépésenként végrehajtja a Turing-gép alapprogramját (vezérli a Turing-gép utasításciklusát)

A vezérlő egység minden lépésben az író-olvasó fej által beolvasott karakternek és az állapotregiszter tartalmának az alapján meghatározza az éppen végrehajtandó utasítást, és ennek megfelelően működteti a Turing-gép író-olvasó fejét.

a Turing-gép alapprogramja és utasításciklusa

A Turing-gép alapprogramja (az ún. átmenetfüggvény) legegyszerűbben egy táblázattal adható meg, amelynek oszlopai a Turing-gép ábécéjének, sorai pedig a Turing-gép lehetséges állapotainak felelnek meg. A táblázat cellái azokat az utasításokat tartalmazzák, amelyek a Turing-gép egyes állapotainak és a Turing-gép ábécéjében levő karaktereknek felelnek meg.

Például egy bináris Turing-gép esetén, amely a szalagon levő bináris karaktersorozat komplementálását végzi el (0 helyett 1, 1 helyett 0 beírását a szalagra)

Ekkor az alapprogramot tartalmazó táblázat a következő lehet:

>
0
1
_
s
(p,>,jobbra)
p
(p,1,jobbra) (p,0,jobbra) (h,_,marad)

(Megjegyzés: a nem kitöltött cellákba bármilyen utasítás írható, mivel ilyen állapotba a Turing-gép nem kerülhet.)

A Turing-gép utasításai három részből állnak, amelyek az utasítás végrehajtása után meghatározzák

  1. a Turing-gép új állapotát; ez lehet
  2. a szalag aktuális cellájába beírándó új karaktert
  3. az író-olvasó fej mozgatását; ez lehet

A Turing-gép utasításciklusa

  1. egy karakter beolvasása a szalag aktuális cellájából (ez megfelel egy utasítás beolvasásának)
  2. a Turing-gép aktuális állapotának beolvasása az állapotregiszterből
  3. a Turing-gép aktuális állapotának és a beolvasott karakternek megfelelő utasítás megkeresése a Turing-gép alapprogramjában
  4. az utasítás értelmezése, azaz részeire bontása (három részre, ld. fent)
  5. az értelmezett utasítás végrehajtása
  6. az állapotregiszter tartalmától függően a Turing-gép működésének leállítása (ez megfelel a megszakításkérések vizsgálatának)
  7. az utasításciklus újrakezdése
Egy bonyolultabb példa: 1 hozzáadása egy bináris számhoz
 
>
0
1
_
s
(q0,>,jobbra)
q0
(q0,0,jobbra) (q0,1,jobbra) (q1,_,balra)
q1
(h,>,jobbra) (h,1,marad) (q2,0,balra)
q2
(q3,>,jobbra) (h,1,marad) (q2,0,balra)
q3
(q4,1,jobbra) (q5,1,jobbra)
q4
(q4,0,jobbra) (q5,0,jobbra) (h,0,marad)
q5
(q4,1,jobbra) (q5,1,jobbra) (h,1,marad)

A fenti alapprogramhoz tartozó Turing-gép esetén

A fenti Turing-gép kezeli azt a "kivételt", amikor nincs megadva a szalagon egy bit sem a q1 állapotban, a (h,>,jobbra) leállító utasítással.

további információk:
Turing-gép (2016-11-08)


Boda István, 2016.