A Joyce programozási nyelv

Implementálás multiprocesszoros rendszerekre

Az interpretáló kernel eredetileg egy-processzoros rendszerekre lett írva, de 1988-ban átírták több-processzorosra.
Ugyanazt a memóriaallokációs sémát használják, mint az egyprocesszoros rendszerek. Adatstruktúrák reprezentálják az ágenseket, a csatornák pedig végig a memóriában maradnak, hogy minden processz hozzáférhessen. A legnagyobb kihívás a processzek közötti egyenletes munkamegosztás megvalósítása.

Ágens implementáció


Csatorna implementáció

A csatornák implementálása is megpróbálja ötvözni az egyszerűséget és a hatékonyságot:

  1. a kimenő ágens üzenete köztes buffer használata nélkül másolódik át az input ágens aktivációs rekordjába
  2. két összeillő ágens közötti kommunikációhoz csak egy végrehajtó processzorra van szükség az ágensek közötti könnyebb váltás miatt
Ezeket a szándékokat úgy valósították meg, hogy különálló sorok állnak rendelkezésre az x csatorna minden szimbóluma számára az ABC-ben. Amikor egy ágens készenáll egy si szimbólum küldésére vagy fogadására az x csatornán, megvizsgálja az egyező szimbólumsort, hogy egy kapcsolódó q ágens várakozik-e a kommunikációban való részvételre. Ebben az esetben, p megkapja az input v változó címét és az e output értékét a p és q kifejezés verméből, hozzárendeli e-t v-hez, és folytatja q-t a legrövidebb készenléti sorhoz mozgatva. Akárhogy is, ha p nem talál kapcsolódó ágenst, p belép a szimbólumsorba és vár, míg egy kapcsolódó ágens befejezi a kommunikációt és folytatja p-t.
Mikor egy csatornát kettőnél több ágens használ, az egyiknek képesnek kell lennie felismerni, hogy egy szimbólumsorbeli ágens küld vagy fogad egy megfelelő szimbólumot. Megjegyzendő, hogy egy szimbólumsor nem képes egyszerre inputként és outputként működni. Ez elegendő, hogy egy sort kiegészítsen egy logikai értékkel, ami jelzi, hogy a sorban van-e input vagy output ágens, amennyiben az nem üres. A megoldás, amit használtunk az, hogy minden input és output sort hozzárendeltünk minden szimbólumhoz. A felhasznált memória mindkét esetben azonos: egy word.
A kommunikáló ágensek köröznek a készenléti sor és a csatornák sorai között, amíg nem terminálnak. Mivel minden ágens a legrövidebb készenléti sorba kerül vissza, áttelepülhetnek az egyik processzorról a másikra. Az átköltözést egyszerű megoldani, mivel minden processzor hozzáfér minden memóriában lévő aktivációs rekordhoz és sorhoz.

Zárak

Amikor egy processzor szimultán szeretne osztott adatokhoz hozzáférni, lockolja őket egyesével (egyszerre csak egyet), kötött sorrendben, hogy elkerülje a holtpont helyzeteket (Brich Hansen 1973):

  1. a program-verem
  2. egy, az ágens által aktivált csatorna
  3. egy készenléti sor
  4. a rendszer-csatorna
Mivel a rendszer-csatornának van a legalacsonyabb prioritása ezért egy processzor lockolni tudja bármilyen kernel művelet közben és megjeleníti a szignifikáns eseményeket. Mint például egy ágens vagy egy csatorna aktiválódása vagy terminálása esetleg a kommunikáció befejezése. A használt sorok és zárak száma Brinch Hansen teljesítmény kísérletei alapján határozhatjuk meg (1988).