section id="virtual-processor" xreflabel="Virtuální procesor"
rcsinfo="$Header: /home/radek/cvs/forth-book/ch-implementace.xml,v 1.15 2005/11/09 23:11:35 radek Exp $"
Vysvětlovat si jak funguje Forth „zevnitř“ tak, abychom pochopili a poté implementovali Forth pro reálný procesor, je bez toho reálného procesoru velmi těžké. Proto k popisu fungování Forthu použiji virtuální procesor, jak se v literatuře používá.
To be done:Doplnit odkazy na virtuální procesor.
Náš virtuální procesor FIXME:(von Neumanovy architektury|udělat odkaz např do Wikipedie) obsahuje sadu vnitřních registrů, a má spojení s pamětí (RAM/ROM) obsahující oba zásobníky a slovník.
Obrázek 7.1. Virtuální počítač
+-------------------+ ! ! ! P R O C E S O R ! ! ! ! registry ! +-------------------+ ↑ | adresa a data ↓ +-------------------+ | | | P A M Ě Ť | | | +-------------------+
Pro jednoduchost o našem virtuálním procesoru nemáme příliš mnoho předpokladů. Předpokládáme pouze:
Vysvětlovat jak Forth funguje uvnitř, jak je implementován, je bez ukázky (praktického příkladu) na konkrétním procesoru téměř nemožné. Proto byl vytvořen model procesoru, virtuální procesor, jenž je k tomuto popisu vhodný a je základem implementace na skutečné procesory.
FIXME:Vysvětlovat jak forth funguje, bez ukázky na konkrétním procesoru je téměř nemožné. Proto vznikl v průběhu času virtuální forth procesor. Je to myšlený stroj který je dostatečně blízko běžnému hardwéru a přitom dostatečně obecný. Na něm ukážeme funkčnost forthu a tento virtuální procesor také bývá základem konkrétní implementace.
FIXME:Na tomto stroji si ukážeme ?funkčnost? forthu a později jej použijeme při implemetacích na konkrétní, skutečné procesory.
FIXME:Model FORTHu obsahuje řadu registrů, jejichž výčet je uveden dále. Tyto tvoří virtuální procesor. V praxi, při realizaci jádra FORTHu na konkrétním procesoru pak přidělíme funkci jednotlivých virtuálních registrů skutečným registrům použitého procesoru a popíšeme implementaci základních operací instrukcemi tohoto použitého procesoru.
FIXME:Abychom se domluvili, definujeme si předem několik pojmů. Zásobníky jenž procesor používá na/pro ukládání hodnot velikosti buňky (CELL
). Tato velikost je volena s ohledem na zpracovávané údaje a velikost adresního prostoru.
FIXME:Tedy … protože velikost buňky != byte, je třeba ji znát. Konstanta CELL
tedy bude dále označovat počet bytů/slabik ze kterých se buňka skládá.
Jednotlivé virtuální registry jsou tak veliké, aby se do nich vešla jedna buňka. To u 16-ti bitového FORTHu znamená 16-ti bitové registry, a u 32-bitového 32-bitové registry. To je třeba mít na zřeteli při přidělování funkcí těchto registrů skutečným registrům.
REMOVE: Abychom si mohli názorně a jednoduše vysvětlit princip Forthu, potřebujeme k tomu procesor na kterém jej předvedeme. Pro tyto účely si zavedeme „virtuální procesor“ jehož struktura, orientovaná na forth, je natolik jednoduchá, že nás nebude zatěžovat specifickými detaily.