OSM-malli

**Operation state machine** -malli (**OSM**) on yhdenaikaisuusmalli mikroprosessorin toiminnan mallintamiseksi. Malli esittää mikroprosessorin kahdessa keskenään vuorovaikutteisessa tasossa: operaatiotaso ja kovotaso.

## Operaatiotaso

Operaatiotaso kuvaa prosessorin käskykannan yksittäisten käskyjen käyttäytymisen. Operaatiotasoa kuvataan joukolla laajennettuja äärellisiä tilakoneita, joita kutsutaan OSM-tilakoneiksi. Jokainen OSM-tilakone esittää yhtä operaatiota. Tilakoneen solmut määrittävät esittämänsä operaation tämänhetkisen vaiheen ja sen kaaret mahdolliset seuraavat ajo-askeleet. Solmut ja kaaret yhdessä muodostavat OSM:n tilakoneen. Jotta lukkiumatilanteita ei pääsisi syntymään, ja jotta yksikään alikomponentti ei olisi eristyksissä, tulee tilakoneen olla tyypiltään nk. vahvasti yhtenäinen graafi. 

Normaalisti samanlaisia tilakoneita on samanaikaisesti käytössä useampia. Tämä mahdollistaa esimerkiksi rinnakkaisen laskennan mallintamisen liukuhihnoitetun prosessorin tapauksessa.

Tilasiirtymien ohjaamiseksi jokaiseen kaareen OSM-tilakoneessa on yhdistetty ehto (katso kuvan e0-e5), jonka toteutuessa kone voi vaihtaa tilaansa. Ehto esittää prosessorin eri toiminnallisten alueiden resurssien vapauteen liittyviä vaatimuksia. Esimerkkejä tällaisille vaatimuksille ovat muun muassa laskutoimituksen operandien saatavuus.

## Kovotaso

Prosessorin suoritusresursseja kuvataan OSM-mallissa kovotason poletteihin perustuvalla varausjärjestelmällä. Järjestelmä koostuu poleteista ja polettimanagereista.

**Poletti** (engl. token) on varausmerkintä tietyntyyppiselle resurssille. Poletti voi myös valinnaisesti sisältää jonkin data-arvon.

**Polettimanageri** (engl. token manager) hallinnoi kaikkia samantyyppisiä poletteja ja jakaa niitä kyseisen managerin polettipolitiikan perusteella OSM-tilakoneille varausten perusteella.

Varausjärjestelmällä voidaan mallintaa esimerkiksi liukuhihnoitetuissa prosessorissa rinnakkaiset fetch-decode-execute -jaksot.

## Mescal Architecture Description Language

Käytännössä OSM-mallin operaatiotason ja kovotason toiminnot kuvataan Mescal Architecture Description Language -kuvauskielellä (MADL). 

Kuvauskielessä toiminnot on jaettu viiteen erilliseen lohkoon eri kuvausalueiden perusteella:

# Define-osio: Globaalien muuttujien ja funktioiden esittely
# Manager-osio: Polettimanagereiden esittely.
# Machine-osio: Mallin rungon määrittely.
# Function-osio: Funktioiden määrittely.
# Operaatio-osio: Operaatiosyntaksin määrittely.

## Käytännön sovellukset

OSM-mallin avulla pystytään mallintamaan jo olemassa olevia sekä suunniteltavia mikroprosessoreita. Malli tukee sekä liukuhihnoitettuja että liukuhihnoittamattomia prosessoreita. Se mahdollistaa myös prosessorin mikroarkkitehtuurin tarkan mallintamisen mukaan lukien sen käskykanta, liukuhihnoitus, rakennehasardit, kontrollihasardit, muuttujaviiveet, data-ohitukset, skedulointi, sekä datahasardit.

Mallinnetusta prosessorista voidaan luoda automaattisilla työkaluilla prosessorille sopiva assembler-kääntäjä, käskykantasimulaattori, disassembler, kellojakson tarkkuudella toimiva simulaattori (Cycle Accurate Simulator, CAS), käskyjen binäärinen purkaja ja varausasemataulujen luontityökalu. 

Valmista mallia muuntelemalla prosessorisuunnittelijat voivat kokeilla erilaisten kovoratkaisuiden vaikutusta valmiin prosessorin suorituskykyyn ja muihin toimintaparametreihin (esimerkiksi virrankulutus).

Mallin avulla on luotu esimerkiksi kehittynyt kellojakson tarkkuudella toimiva simulaattori StrongArm-arkkitehtuurille.

## Lähteet

* http://www.gigascale.org/pubs/555.html 

## Aiheesta muualla

#OSM-mallin kehittäjä, professori Wei Qin, http://people.bu.edu/wqin/ 
#Mescal Architecture Description Language http://www.princeton.edu/~mescal/madl.html
#Sim-it Arm http://simit-arm.sourceforge.net/