FI111566B - Menetelmä ohjelman hallintakaavion kääntämiseksi - Google Patents

Menetelmä ohjelman hallintakaavion kääntämiseksi Download PDF

Info

Publication number
FI111566B
FI111566B FI20001879A FI20001879A FI111566B FI 111566 B FI111566 B FI 111566B FI 20001879 A FI20001879 A FI 20001879A FI 20001879 A FI20001879 A FI 20001879A FI 111566 B FI111566 B FI 111566B
Authority
FI
Finland
Prior art keywords
application program
level
execution
continuation
application
Prior art date
Application number
FI20001879A
Other languages
English (en)
Swedish (sv)
Other versions
FI20001879A0 (fi
FI20001879A (fi
Inventor
Markku Rossi
Original Assignee
Ssh Comm Security Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ssh Comm Security Ltd filed Critical Ssh Comm Security Ltd
Priority to FI20001879A priority Critical patent/FI111566B/fi
Publication of FI20001879A0 publication Critical patent/FI20001879A0/fi
Publication of FI20001879A publication Critical patent/FI20001879A/fi
Application granted granted Critical
Publication of FI111566B publication Critical patent/FI111566B/fi

Links

Landscapes

  • Debugging And Monitoring (AREA)

Description

111566
Menetelmä ohjelman hallintakaavion kääntämiseksi
Keksinnön tausta
Keksintö liittyy ohjelmointimenetelmiin, sovellusohjelmiin, ohjelma-tulkkeihin sekä laitteistoihin verkkopalvelujen tarjoamiseksi ja ohjelmisto- ja/tai 5 laitteistomoduulien testaamiseksi.
Keksintö on tarkoitettu käytettäväksi ympäristöissä, missä ohjelmamoduuli toimii vastaanottamalla sanomia, tapahtumia tai kutsuja (joita kutsutaan yhteisesti nimellä takaisinkutsu (’’callback”), prosessoi niitä jollakin tavalla ja sitten palauttaa hallinnan ohjelmamoduulin ulkopuolelle. Tällaiset ohjelma-10 moduulit ovat yleisiä verkkopalvelinsovelluksissa, missä tällaisen ohjelmamoduulin tyypillinen esimerkki on osa verkkopalvelinta, joka prosessoi vastaanotettuja pyyntöjä ja lähettää vastauksia. Toinen esimerkki on oliopohjainen ohjelmointi, missä luokka voi olla tällainen moduuli. Kun luokan metodeja kutsutaan, ne suorittavat jonkinlaista prosessointia ja sitten palauttavat hallinnan 15 luokan ulkopuolelle. Vielä eräs esimerkki on graafinen käyttöliittymä, missä ohjelmassa on tyypillisesti tapahtumasilmukka, joka vastaanottaa sanomia (kuten hiiren klikkauksia) käyttäjältä ja kutsuu sopivia käsittelijäfunktioita, jotka prosessoivat sanoman ja sitten palauttavat hallinnan tapahtumasilmukkaan. Tällaisten moduulien tunnusomainen piirre on, että ne vastaanottavat ohjelman 20 hallintavuon moduulin ulkopuolelta, suorittavat jonkinlaista prosessointia (ne mahdollisesti luovuttavat hallinnan tilapäisesti moduulin ulkopuolelle funktiokutsulla, mutta vastaanottavat hallinnan takaisin välittömästi kun funktio palaa), ja sitten palauttavat hallinnan moduulin ulkopuolelle tietämättä koska moduuli seuraavan kerran saa hallinnan (vai saako koskaan).
25 Kuviot 1 ja 2 esittävät vastaavasti ylhäältä alas ja alhaalta ylös oh jelmoinnin käsitteitä. Kuvion 1 vasen puoli esittää ylhäältä alas -ohjelmoinnin perusvaiheita. Tämä paradigma on intuitiivisesti tuttua ihmisille, joilla on vähän tai ei lainkaan ohjelmointikokemusta. Tässä paradigmassa ohjelmoija tuntee hallitsevansa täysin ohjelmaa ja tietokoneen laitteistoresursseja. Valitettavasti ; 30 kuviossa 1 näytetty ylhäältä alas -ohjelmointiparadigma ei sovellu moniajoym- päristöihin, kun tarvitaan asynkronisia operaatioita. Asynkroninen operaatio on operaatio, jonka kesto ei ole ohjelmoijan hallittavissa tai ennustettavissa. Esimerkkejä asynkronisista operaatioista ovat laitteisto-operaation loppuunsuori-tus, verkkosanoman saapuminen ja käyttäjän syöte (kuten hiiren klikkaukset tai 35 näppäilyt). Jos ohjelman täytyy odottaa asynkronisen operaation valmistumista, kaikki rinnakkaiset prosessit hyytyvät. Tämän vuoksi moniajoympäristössä 111566 2 ohjelmoijat joutuvat turvautumaan toiseen ohjelmointiparadigmaan, joka näytetään kuviossa 2, nimittäin alhaalta ylös eli tapahtumalähtöiseen ohjelmointiin.
Tässä paradigmassa sovellusohjelmaa AP ei voida kirjoittaa yksinkertaisena vuokaaviona, joka näytetään kuviossa 1. Sen sijaan sovellusohjelman AP on 5 kommunikoitava alla olevan käyttäjän OS kanssa tapahtumakäsittelijöiden välityksellä. Kuvion 2 esittämässä skenaariossa käyttöjärjestelmä 2 antaa vain ajoittaisen hallinnan sovellusohjelmalle AP tapahtumakäsittelijän EH1 kautta, joka suorittaa funktiokutsun FC1. Funktiokutsu FC1 puolestaan suorittaa muita funktiokutsuja kutsuun FCn asti, kunnes saavutetaan asynkroninen operaatio 10 AO. Tapahtumakäsittelijästä EH1 alkava haara puretaan auki, mikä tarkoittaa, että ohjelman pinokehyksiä ei enää ole, eikä niitä voida käyttää tätä haaraa koskevan tilainformaation säilyttämiseen. Kun asynkroninen operaatio AO on valmis, käyttöjärjestelmä OS jälleen palauttaa hallinnan sovellusohjelmalle AP, tällä kertaa toisen tapahtumakäsittelijän EH2 kautta.
15 Sovellusohjelma voi myös kutsua käyttöjärjestelmää haarojen kaut ta, mutta tällaisten kutsujen täytyy palata nopeasti, koska muuten sovellus ei voi prosessoida muita sanomia tai tulevia yhteyksiä. Tämä tarkoittaa, että esimerkiksi tulevia datapaketteja tai käyttäjän syötettä voidaan kadottaa. Modaaliset dialogit pyrkivät kiertämään tämän ongelman käyttämällä omia tapahtu-20 masilmukoitaan, jotka pollaavat sanomia käyttöjärjestelmältä ja lähettävät niitä. Erilaisista teknisistä syistä tämä ei ole yleisesti käytetty ratkaisu verkkopalve-linsovelluksissa. Jotkut sovellukset käyttävät useita säikeitä sanomien käsittelemiseen, jolloin ne voivat prosessoida useita sanomia samanaikaisesti, mutta silti jokainen säie käyttäytyy samoin kuin jos säikeitä olisi vain yksi.
25 Alhaalta ylös ohjelmoinnissa siis sovellusohjelma tai -moduuli ei hal litse yleistä suoritusta. Ohjelma tai moduuli näkee vain ne haarat, jotka tavoittavat sen käyttöjärjestelmästä käsin. Ongelmana on, että sovellusohjelmoija ei hallitse runkoa (käyttöjärjestelmää), josta haarat lähtevät. Lukuunottamatta sitä, että eri ohjelmoijat tai järjestelmäkäyttäjät voivat asentaa erilaisia moduuleja : * 30 ja muuttaa joitakin järjestelmäasetuksia, ohjelmoija ei voi valita tai muuttaa käyttöjärjestelmää. Toisin sanoen käyttöjärjestelmä ei olennaisesti ole ohjelmoijan muutettavissa. Kuitenkin kokemus on osoittanut, että ihmiset ymmärtävät ohjelmia paljon helpommin, jos he voivat tarkastella työstämäänsä ohjelman osaa runkona, josta suorituksen haarat lähtevät ja johon ne palaavat.
35 Käytettävissä on useita työkaluja tukemaan graafisten käyttöliittymi en kehitystä. Esimerkiksi C++:n ja Javan luokkakirjastoja käytetään laajalti ai- 3 111566 emmin kirjoitettujen ohjelmistokomponenttien uudelleenkäyttämiseksi. Vielä tärkeämpää on, että kaikki modernit graafisten käyttöliittymien työkalupaketit sallivat käyttäjän käyttää modaalisia dialogeja. Modaalinen dialogi on dialogi, joka näytetään käyttämällä funktiokutsua, joka palaa vasta, kun dialogi on sul-5 jettu (tyypillisesti sen seurauksena, että käyttäjä klikkaa Ok” tai ’’peruuta” -nappia). Käyttöliittymien työkalupaketit toteuttavat tällaiset modaaliset dialogit yleensä eksplisiittisesti estämällä sovelluksen muiden ikkunoiden toiminta (tai kaappaamalla kaikki käyttöliittymäsanomat dialogin ikkunaan), ja sitten suorittamalla sisäkkäinen tapahtumasilmukka modaalisessa dialogifunktiossa. Talo pahtumasilmukka on ohjelmakoodin palanen, joka lukee tapahtumia ja lähettää niitä ikkunakohtaisille sanomankäsittelijöille. Jokainen tällainen sanomankäsittelyä on tyypillisesti ohjelmamoduuli, joka käyttäytyy yllä, termin ’’callback” määrittelyn yhteydessä selostetulla tavalla. Modaaliset dialogit voivat olla so-vellusmodaalisia tai globaalisti modaalisia, riippuen siitä, sallivatko ne muiden 15 samalla näyttölaitteella toimivien graafisten sovellusten jatkaa tapahtumien vastaanottamista. Modaalisten dialogien käsite oli apuna graafisten käyttöliittymien tekemisessä riittävän helpoiksi tavallisten ohjelmoijien kirjoittaa, niin että nykyinen graafisten sovellusten kanta voitiin kirjoittaa.
Modaalisten dialogien käsite ei kuitenkaan ole ollut käytettävissä 20 verkkopalvelimissa. Sähköisen kaupankäynnin lisääntyessä World Wide Webin (www) yli, verkkopalvelinsovellukset tulevat yhä monimutkaisemmiksi ja käyttö-liittymiensä suhteen ne yhä enemmän muistuttavat normaaleja graafisia sovelluksia. Ei kuitenkaan tunneta menetelmiä modaalisten dialogien vastineiden toteuttamiseksi verkkopalvelimissa.
25 Keksinnön lyhyt selostus
Keksinnön tavoitteena on kääntää ohjelmoinnin vuonohjaus alhaalta ylös -paradigmasta ylhäältä alas -paradigmaan, tai ainakin luoda illuusio tällaisesta vuonohjauksen kääntämisestä. Tällaista vuonohjauksen kääntämistä voitaisiin käyttää toteuttamaan modaalisia dialogeja verkkopalvelimissa. Tämä 30 tavoite saavutetaan menetelmällä ja järjestelmällä, joille on tunnusomaista se, mitä sanotaan itsenäisissä patenttivaatimuksissa. Keksinnön edulliset suoritusmuodot ovat epäitsenäisten patenttivaatimusten kohteena.
Keksinnön eräs näkökohta on menetelmä sovellusohjelman suorittamiseksi tietokonejärjestelmässä, johon kuuluu käyttöjärjestelmä, joka tarjoaa 35 rajapinnan ulkoisille tapahtumille. Käyttöjärjestelmä on olennaisesti muuttamaton sovellusohjelman ohjelmoijalle, mutta sovellusohjelma on tai siihen kuuluu 111566 4 ainakin yksi moduuli, joka on ohjelmoijan muutettavissa. Käyttöjärjestelmä hallitsee tietokonejärjestelmää suurimman osan ajasta ja vain ajoittain luovuttaa hallinnan korkean tason kieliselle sovellusohjelmalle/moduulille. Sovellusoh-jelmamoduulin suoritus ei siis ole sekventiaalista. Menetelmään kuuluu vai-5 heet: tallennetaan korkean tason kielisen sovellusohjelmamoduulin suorituksen jatko; pysäytetään korkean tason kielisen sovellusohjelmamoduulin suoritus; ja vasteena ulkoiselle tapahtumalle, noudetaan tallennettu jatko ja hypätään siihen, korkean tason kielisen sovellusohjelmamoduulin suorituksen jatkamiseksi. Menetelmä luo illuusion sekventiaalisesta suorituksesta korkean tason kieli-10 sessä sovellusohjelmamoduulissa ja illuusion vuonohjauksen kääntämisestä alhaalta ylös -paradigmasta ylhäältä alas -paradigmaan.
Keksinnön eräs toinen näkökohta on menetelmä laitteisto- ja/tai ohjelmistomoduulien testaamiseksi, joilla on ainakin yksi asynkroninen rajapinta asynkronisine funktiokutsuineen. Menetelmässä käytetään korkean tason tes-15 tiohjelmaa testioperaatioiden suorittamiseksi. Asynkroniset funktiokutsut muunnetaan synkronisiksi: tallentamalla korkean tason testiohjelman jatko kun testioperaatio aloitetaan; ja noutamalla tallennettu jatko ja hyppäämällä jatkoon, kun testioperaatio on valmis.
Keksinnön vielä eräs näkökohta on ohjelmointiympäristö, kun oh-20 jelmointikieli/työkalupaketti toteuttamaan vaiheet: tallennetaan jatko, noudetaan tallennettu jatko ja hypätään noudettuun jatkoon. Ohjelmointikielen perustana on edullisesti Scheme- tai Java-kieli. Scheme-kielen käyttö on edullista, koska jatkojen käsite on siihen sisäänrakennettu. Toisaalta Java-virtuaalikone voidaan varustaa tukemaan jatkoja suhteellisen helposti, ja Javaa käytetään 25 laajasti web-sovelluksissa.
Tulee korostaa, että tunnetuissa ohjelmointiympäristöissä alhaalta ylös ja ylhäältä alas -paradigmat ovat toisensa poissulkevia, eikä ohjelmoija voi valita käyttämäänsä paradigmaa. Sen sijaan ympäristö sanelee valinnan. Kuitenkin keksintö näennäisesti kääntää vuonohjauksen tapahtumalähtöisestä al-30 haalta ylös -paradigmasta sovelluksen ohjaamaan ylhäältä alas -paradigmaan, joka on ohjelmoijalle paljon ystävällisempi ympäristö. Paradigman kääntämisen eräs yleinen tekninen etu on odotettavissa olevien ohjelmavirheiden väheneminen, koska ohjelman logiikka seuraa paljon tarkemmin sitä, mitä ohjelmoija aikoo saada aikaan. Muut tekniset edut ovat löydettävissä eri suoritusmuotojen 35 selostuksista.
5 111566
Keksintö siis perustuu siihen näkemykseen, että vaikka todennäköisesti ei ole mahdollista kääntää vuonohjausta alhaalta ylös -paradigmasta ylhäältä alas -paradigmaan, useimpiin käytännön tarkoituksiin on riittävää luoda illuusio tällaisesta vuonohjauksen kääntämisestä. Tämä illuusio syntyy jatkoina 5 (continuation) tunnetun ohjelmoinnin käsitteen uudesta käytöstä.
Jatkot [CH088, DH89, FHK84, HDB90, Wand80; katso lähdeluettelo selitysosan lopussa] ovat vanha ja hyvin tunnettu käsite korkean tason ohjelmointikielistä, erityisesti funktionaalisista kielistä ja Scheme:stä. Keksinnön tarkoituksiin korkean tason kielet määritellään muina kielinä kuin matalan tason 10 kielet, jotka puolestaan määritellään prosessoririippuvina konekielinä ja niiden mnemonisina vastineina (assembly-kielinä). Korkean tason kielet tarjoavat tyypillisesti datatyyppejä, kirjastofunktioita ja ihmiselle luettavan syntaksi, jotka helpottavat monimutkaisten sovellusten kehittämistä ihmisohjelmoijille. Korkean tason (kielinen) ohjelma tai -moduuli tarkoittaa ohjelmaa tai ohjelmamoduu-15 lia, joka alunperin kirjoitetaan korkean tason ohjelmointikielellä, vaikka ohjelma voidaan myöhemmin kääntää matalan tason objektikoodiksi. Esimerkkeihin korkean tason kielistä kuuluu C, Java ja Scheme. Funktionallisessa ohjelmointikielessä ohjelma koostuu olennaisesti funktiokutsuista, ja funktioilla ei ole sivuvaikutuksia. Jatko on pohjimmiltaan tallennettu suoritustila, johon hallinta 20 voidaan palauttaa myöhemmin. Perinteisissä ohjelmointikielissä (niissä jotka eivät käytä eksplisiittisiä jatkoja), kuten Fortran, C ja vastaavat, paluuosoite ja ohjelman pino muodostavat jatkon funktiokutsulle. Tällaisissa kielissä jatko välitetään implisiittisesti, mikä tarkoittaa että funktiokutsu tallentaa tilan ja paluu-osoitteen sekä päivittää pino-osoitinta automaattisesti. Kuitenkin monet kielet 25 voidaan toteuttaa tyylillä, josta käytetään nimitystä ’’jatkonvälitys” (continuationpassing), missä jatko-olio (viittaus) välitetään eksplisiittisesti kunkin funktiokutsun argumenttina. Jatkonvälitystyyliä käytetään useimmiten ohjelmointikielten toteutuksissa, jotka tallentavat suorituspinon (pinokehykset) dynaamisesti allokoidussa muistissa (keossa (heap)).
30 Vaikka useimmat kielet käsittelevät jatkoja automaattisesti funk tiokutsuin eivätkä salli ohjelmoijan manipuloida jatkoja suoraan, jotkut kielet tarjoavat eksplisiittisen pääsyn jatkoihin. Itse asiassa joissakin kielissä jatko on ensimmäisen luokan olio: sitä voidaan manipuloida datan tavoin aivan kuin kokonaislukuja tai merkkijonoja. Tällaiset kielet myös tyypillisesti käsittelevät 35 funktioita ensimmäisen luokan olioina, sallien ohjelman luoda ja manipuloida « · > 111566 6 funktioita dynaamisesti suorituksen aikana, tehollisesti muuttaen itseään suorituksensa aikana.
Kun jatkoja käsitellään ensimmäisen luokan olioina, jatkot voidaan tallentaa muuttujiin, taulukoihin tai muihin muistipaikkoihin. Eräs operaatio, jo-5 ka voidaan suorittaa jatkolle, on sen suoritus. Toisin sanoen suoritusta jatketaan tilasta, joka talletettiin jatkossa. Seuraava esimerkki havainnollistaa tätä tekniikkaa (käyttäen Scheme-kieltä):
Listaus 1 I (let ((cont-variable #f) 10 2 (count 0)) 3 (display "Ennen jatkon käyttämistä”) (newline) 4 (if (call-with-current-continuation 5 (lambda (cont) 6 (set! cont-variable cont) 15 7 #0) 8 (begin (display "Palattu taas”) (newline)) 9 (begin (display "Palattu ensimmäisen kerran") (newline))) 10 (display ”Tässä on jatko”) (display cont-variable) (newline) II (set! count (+count 1)) 20 12 (if (<= count 3) 13 (begin 14 (display "Kutsutaan jatkoa") (newline) 15 (cont-variable #t))) ., 16 (display "Valmis”) (newline)) 25 Scheme-kieli ei normaalisti käytä rivinumerointia, mutta numerot on tässä lisätty lukijan mukavuuden vuoksi. Ohjelma tuottaa jotakin seuraavan kaltaista:
Ennen jatkon käyttämistä Palattu ensimmäisen kerran 30 Tässä on jatko #<cont 0x133a 12b2>
Kutsutaan jatkoa Palattu taas Tässä on jatko #<cont 0x133a12b2>
Kutsutaan jatkoa 35 Palattu taas '* Tässä on jatko #<cont 0x133a12b2> 7 111566
Kutsutaan jatkoa
Palattu taas Tässä on jatko #<cont 0x133a12b2>
Valmis 5 Tässä esimerkissä funktiokutsu ”call-with-current-continuation” rivillä 4 palaa monta kertaa. Tämä toimii siten, että kutsulle ”call-with-current-continuation” argumenttina annettu funktio (lauseke ’’lambda” rivillä 5) vastaanottaa jatkon argumenttina. Funktio osoittaa jatkon muuttujaan (cont-variable, rivi 6) ja palauttaa arvon ”#f” (false (epätosi), rivi 7). Lause ”if (rivi 4) 10 testaa palautusarvon. Sitten käytetään laskurimuuttujaa laskemaan jatkon käyttökertojen määrä (rivi 11). Jos numero on alle kolme (rivi 12), jatko suoritetaan (käyttämällä sitä funktion tavoin Scheme:n syntaksissa), mikä antaa arvon ”#t” (true (tosi), rivi 15), joka palautetaan”call-with-current-continuation” -funktiosta tällä kerralla. Sama kutsu”call-with-current-continuation” -funktioon palaa 15 neljä kertaa, ensin paluuarvolla ”#f” (false) ja sitten kolme kertaa paluuarvolla ”#t” (true).
Monet ohjelmistojärjestelmät, kuten graafiset käyttöliittymät, verkkopalvelimet ja sanomanvälitysjärjestelmät, toteutetaan edullisesti käyttäen ta-pahtumalähtöistä ohjelmointityyliä. Itse asiassa useimmat tai kaikki suositut 20 graafiset käyttöliittymäjärjestelmät (Microsoft® Windows, Apple® Macintosh, ja X Consortium:in X11 -liitäntä) käyttävät tätä tyyliä. Palvelinohjelmistot joillekin tai useimmille suosituille verkkoprotokollille (esimerkiksi HTTP (Hyper Text Transfer Protocol) ja WAP (Wireless Application Protocol) kirjoitetaan myös yleensä tätä tyyliä käyttäen. Kuitenkin tapahtumalähtöinen ohjelmointityyli pa-25 kottaa kirjoittamaan sovellukset tapahtumankäsittelijöinä ilman mitään yhdenmukaista sovelluksen kattavaa vuonohjausta. Tämä tekee monimutkaisten sovellusohjelmien kehittämisen graafisia käyttöliittymiä ja verkkopalvelimia varten melko vaikeaksi ja virhealttiiksi. Keksinnön eräänä etuna on, että korkean ta-. . , son kielellä ohjelmoitu sovellusohjelma voidaan kirjoittaa aivan kuin sillä olisi , · 30 täydellinen ohjelmavuon hallinta (ylhäältä alas -hallinta), vaikka todellisuudes sa ohjelman suoritusta ohjaavat matalan tason tapahtumat, jotka kutsuvat korkean tason funktioita, jotka tekevät pienen määrän työtä ja sitten palaavat (alhaalta ylös -hallinta, tapahtumalähtöinen ohjelmointi tai callback-perusteinen ohjelmointi).
35 Keksintö yksinkertaistaa web-perusteisia ja sähköisen kaupan sovelluksia ja sallii tehokkaiden työkalujen kehittämisen tällaisten sovellusten rakentamiseksi. Lisäksi keksintöä voidaan käyttää sellaisiin sovelluksiin kuin 111566 8 kentamiseksi. Lisäksi keksintöä voidaan käyttää sellaisiin sovelluksiin kuin oh-jelmistotestauksiin, protokollatestauksiin ja tietoliikennejärjestelmän testauksiin. Keksintö siis sallii intuitiivisen ja tutun ylhäältä alas -paradigman käytön tällaisiin sovelluksiin, mikä ajan kanssa todennäköisesti parantaa ohjelmoijan 5 tuottavuutta ja ohjelmien laatua.
Keksintö tarjoaa mekanismin korkean tason ohjelmointikielellä kirjoitetun sovellusohjelman sekventiaaliseen suoritukseen ympäristössä, missä ohjelman suorittavaa moduulia kutsutaan vasteena ulkoisille tapahtumille, minkä jälkeen sen on palautettava hallinta moduulin ulkopuolelle muiden tapahtumien 10 vastaanottamiseksi. Esimerkkejä tällaisista ulkoisista tapahtumista ovat verk-kosanomat, hiiren klikkaukset, näppäinpainallukset, operaation loppuun suoritus ja ajastimen laukeaminen.
Jos tutkimme tyypillistä prosessorin fyysisen suorituksen kulkua, se todennäköisesti silmukoi jossakin, todennäköisimmin käyttöjärjestelmän sisäl-15 lä, odottaen jotakin tehtävää, ja sitten signaloi tapahtuman tietylle sovellukselle vaihtaen sovelluksen suorituskontekstiin (esimerkiksi virtuaalimuistin kartoituksilla), ja palauttaa suorituksen sovellukselle. Oletetaan, että sovellus on aiemmin antanut hallinnan käyttöjärjestelmälle joko estävällä (blocking) järjestelmä-kutsulla tai kontekstinvaihdolla (context switch). Käyttöjärjestelmä voi palauttaa 20 jotakin dataa sovellukselle osana paluuta järjestelmäkutsusta. Sovellus sitten tutkii datan ja lähettää vastaanotetun sanoman (käyttöliittymäsanoman, verkkoyhteyden tai -paketin) sopivalle funktiolle sovelluksessa. Tämä funktio voi lähettää sanoman edelleen tai se voi käsitellä sanoman itse. Lopulta sanoma prosessoidaan (mahdollisesti päättämällä jättää se huomiotta), ja hallinta pa-25 lautetaan lähettävälle funktiolle. Alimmalla tasollaan sovellusohjelma todennäköisimmin välittää hallinnan takaisin käyttöjärjestelmälle kutsumalla estävää järjestelmäkutsua (ei palaa ennen kuin seuraava sanoma on vastaanotettu).
Keksintö sallii sovellusohjelmoijan kirjoittaa koodinpätkän aivan kuin . . koodi olisi ainoa järjestelmässä ja sillä olisi täysi suorituksen hallinta. Esimer- • 30 kiksi ohjelma voi sisältää rakenteita kuten "näytä dialogi”, ja "jatka kun valmis”, tai se voi näyttää sivun asiakkaalle web-sovelluksessa ja jatkaa, kun käyttäjä klikkaa nappia.
Tulisi huomata, että vuonohjauksen kääntäminen on vain näennäistä, koska ei ole mahdollista muuttaa vuonohjauksen fyysistä rakennetta. Ala-35 puolinen käyttöjärjestelmä ja protokollat sanelevat kuinka hallinta järjestetään alimmilla tasoilla, eikä ehkä ole teoreettisestikaan mahdollista järjestää sitä toi- 9 111566 sin. Ainakaan mitään tunnettua ratkaisua ei ole. Keksintö antaa kuitenkin sovellusohjelmalle illuusion siitä, että ohjelma toimii sekventiaalisesti ylhäältä alas -tyylillä. Ohjelmoijan kannalta sillä ei ole väliä, että tämä on vain illuusio, ohjelma toimii aivan kuin tämä olisi todellista. Keksintö siis luo sovellusohjel-5 malle illuusion siitä, että ohjelma toimii sekventiaalisesti ja hallitsee täysin ohjelman hallintavuota. Todellisuudessa sovellusohjelmaa suoritetaan pieni pala kerrallaan, ja kun se ei voi enää toimia (se ei voi jatkaa ennen matalan tason tapahtuman esiintymistä, mikä tarkoittaa että fyysisen suorituksen tulee palata), ohjelma ottaa jatkon itsestään (olennaisesti tallentaen suoritustilansa), tallo lentää muistipaikkaan viittauksen jatkoon ja palaa. Kun ilmenee sopiva tapahtuma, joka sallii ohjelman jatkumisen, jatko noudetaan muistipaikasta ja suoritus jatkuu tästä jatkosta.
Keksinnön erään edullisen suoritusmuodon mukaisesti sovelluksen samalle instanssille tallennetaan useita jatkoja. Nämä jatkot edustavat eri 15 ajanhetkiä (historioita), ja sovelluksen suoritusta voidaan jatkaa mistä tahansa näistä tallennetuista pisteistä.
Kuvioiden lyhyt selostus
Keksintöä selostetaan nyt lähemmin edullisten suoritusmuotojen yhteydessä, viitaten oheisiin piirroksiin, joista: 20 Kuviot 1 ja 2 esittävät vastaavasti ylhäältä alas ja alhaalta ylös oh jelmoinnin käsitteitä;
Kuvio 3 esittää älykorttien testaussovellusta;
Kuvio 4 esittää tunnettua web-palvelinsovellusta; »
Kuvio 5 esittää keksinnön mukaista web-palvelinsovellusta; 25 Kuvio 6 esittää modaalisen dialogin kahta sivua;
Kuvio 7 esittää ohjelmalistausta kuviossa 3 näytettyä älykorttien testaussovellusta varten; ja
Kuviot 8-11 esittävät ohjelmalistauksia kuviossa 5 näytettyä web- . palvelinsovellusta varten.
« • < 30 Keksinnön yksityiskohtainen selostus
Keksinnöstä esitetään kaksi käytännön sovellusta. Kuvio 3 esittää älykorttien testaussovellusta. Kryptograafiset älykortit sisältävät tyypillisesti turvallisen käyttöjärjestelmän, jonkin verran muistia ja kryptograafisen kiihdytin-toiminnon (accelerator function). Kryptograafinen kiihdytintoiminto toteuttaa di- • a 111566 10 gitaalisen allekirjoitusoperaation älykortilla. Nykytekniikalla allekirjoitusoperaa-tio kestää tyypillisesti 1-2 sekuntia.
Koska allekirjoitusoperaatio on suhteellisen hidas, on usein toivottavaa tarjota älykortille asynkroninen liitäntä. Tämä tarkoittaa liitäntää, jossa so-5 vellusohjelma aloittaa allekirjoitusoperaation, mutta kutsu palaa välittömästi ja asynkroninen liitäntä kutsuu erillistä callback-funktiota, kun allekirjoitusoperaatio on valmis. Sillä välin prosessori voi suorittaa muita, täysin erillisiä tehtäviä.
Moniajoympäristössä on yllättävän vaikeaa kirjoittaa testiohjelma asynkroniselle älykortinlukijalle, koska ohjelmoijan on toteutettava call-10 back-funktiot, joita kutsutaan, kun operaatio on valmis, ja aloitettava seuraava testi callback-funktiosta. Tämä tehtävä vaikeutuu edelleen, jos järjestelmässä on enemmän kuin yksi älykortinlukija, ja ajuri on testattava usealla rinnakkaisella lukijalla.
Kuvion 3 esittämässä suoritusmuodossa tietokoneeseen kuuluu lait-15 teisto HW, käyttöjärjestelmä OS ja testisovellus TA. Testisovellus TA liittyy käyttöjärjestelmään keksinnön erään edullisen suoritusmuodon mukaisella so-vellustulkilla AI. Sovellustulkki toteuttaa keksinnön mukaiset tilan säilyttävät funktiokutsut. Tietokone on kytketty kortinlukijaan CR älykortin SC lukemista ja kirjoittamista varten. Tämän selostuksen tarpeisiin riittää sanoa, että älykortti 20 on kortti, joka käsittää prosessorin.
Kuvio 7 näyttää, kuinka keksintö sallii testisovelluksen kirjoittamisen yksinkertaisena sekventiaalisena ohjelmana. Kuvion 7 esimerkki käyttää Scheme-ohjelmointikieltä. Tässä esimerkissä rivillä 7-10 määritelty ”run-tests” -funktio suorittaa tietyn määrän testejä (kutsuja rivillä 7-6 määriteltyyn ”run-25 tests” -funktioon) sekventiaalista iteraatiota käyttäen (”for-each” -kontrollirakenne rivillä 7-13). ”demoapp-smartcard-sign” -funktio rivillä 7-2 on sisäisesti funktio, joka on kirjoitettu C-ohjelmointikielellä, ja se käyttää asynkronista liitäntää älykortinlukijaan. Ajuriliitäntä kutsuu toimitettua C:n callback-funktiota toimitetulla argumentilla, kun allekirjoitusoperaatio on valmis.
30 ”demoapp-smartcard-sign” -funktio allokoi muistilohkon, tallentaa siihen jatkon nykyiselle Schemen suoritustilalle ja järjestää muistilohkon osoitteen välitettäväksi argumenttina älykorin ajuriliitännässä määritellylle C:n callback-funktiolle.
Sitten ”demoapp-smartcard-sign” -funktio palauttaa erityisen Scheme-olion, jota kutsutaan nimellä ’’data” ja jolle ’’suspended-object?” -funktio rivillä 7-3 pa-35 lauttaa arvon tosi. Funktio ’’vanish” rivillä 7-4 aiheuttaa nykyisen Schemen suorituksen päättymisen, ja hallinta palaa tapahtumasilmukkaan sillä aikaa kun 11 111566 allekirjoitusoperaatiota älykortille suoritetaan. Tällä välin voi tapahtua mielivaltainen määrä muita callback-funktioita, joihin kuuluu esimerkiksi verkkoprotokollan sanomankäsittelyä tai kutsuja toisiin Scheme-funktioihin. ’’demoapp-smartcard-sign” -funktio on siis jo palannut kerran, mutta koko Schemen suori-5 tus päättyi tässä tapauksessa funktion "vanish” kutsumisen johdosta välittömästi tämän jälkeen.
Kun allekirjoitusoperaatio on valmis, kutsutaan C:n call-back-funktiota. Callback-funktio käyttää argumenttia muistilohkon löytämiseksi, palauttaa jatkon ja hyppää jatkoon, niin että allekirjoitusoperaation paluuarvo 10 palautetaan paluuarvona ”demoapp-smartcard-sign” -funktiosta, "demoapp-smartcard-sign” -funktio siis palaa toisen kerran. Tällä kerralla "suspended-object?” -funktio palauttaa epätoden arvon. Ohjelmoijalla on illuusio, että kuviossa 7 näytetty testiohjelma toimi sekventiaalisesti. Voidaan myös sanoa, että keksintö synkronoi ulkoisiin tapahtumiin liittyvät asynkroniset operaatiot.
15 Kuviossa 7 viitenumero 70 osoittaa keksinnön mukaista ohjelma- moduulia. Moduulin 70 todellinen suoritus ei ole sekventiaalista, mutta moduulille ja ohjelmoijalle luodaan illuusio sekventiaalisesta suorituksesta.
Kuviot 4 ja 5 näyttävät, kuinka keksintöä voidaan käyttää toteuttamaan palveluja web- tai wap-palvelinsovelluksessa. Kuvioiden 4 ja 5 laitteisto-20 osiot ovat yhteiset. Kuvio 4 esittää tunnettua järjestelyä web-sovellusta varten.
Tässä esimerkissä useita asiakaspäätteitä C (tietokoneita tai matkaviestimiä) on kytketty dataverkon DN kautta palvelimeen S, joka käyttää tietokantaa DB. Raskaissa sovelluksissa palvelin S toteutetaan tyypillisesti yhtenä tai useampana tietoliikennepalvelimena ja yhtenä tai useampana tapahtuma- eli transak-25 tiopalvelimena, mutta tällaiset laitteiston yksityiskohdat eivät ole oleellisia keksinnön ymmärtämiselle. Dataverkko DN on tyypillisesti IP- (Internet Protocol) verkko, kuten Internet, tai matkaviestinverkko ja wireless application protocol (wap). Jokaiseen asiakaspäätteeseen C kuuluu laitteisto, asiakkaan käyttöjärjestelmä ja verkkoselain, jolla käyttäjä käyttää palvelimen S tarjoamia eri palve-, ·· 30 luja. Palvelimeen S kuuluu laitteisto, palvelimen käyttöjärjestelmä, sovellus- tulkki ja palvelimen sovellusohjelmisto.
Web-palvelin kuuntelee pyyntöjä HTTP-protokollaa käyttäen. Web-sovellus on vuorovaikutuksessa käyttäjän kanssa käyttämällä usean pyyn-tö/vaste (request/response) -parin sekvenssiä. Kukin pyyntö aiheuttaa relevan-35 tin palvelinmoduulin kutsumisen, ja moduuli tulostaa vasteen kuhunkin pyyntöön. Palvelinmoduuli ylläpitää istunto-oliota (istuntoa mallintava ohjelmaolio) 111566 12 kutakin aktiivista interaktiota varten käyttäjän kanssa. Istunto-olio kuljettaa informaatiota samaan istuntoon kuuluvien pyyntöjen välillä. Kukin pyyntö liittyy istunto-olioon käyttämällä esimerkiksi evästeitä (cookie) tai URL-uudelleenkirjoitusta (rewriting).
5 Tällainen tunnettu järjestely Internetiä varten esitetään esimerkiksi US-patentissa 5961 601, keksijänä Arun Iyengar, lyengarin patentti esittää jatkojen (continuation) käytön tilansäilytyksen yhteydessä web-palvelinsovelluksissa, mutta jatkojen käsite on aivan erilainen kuin tässä keksinnössä. Iyengar määrittelee jatkon uutena pyyntönä, jonka asiakas voi lähet-10 tää palvelimelle. Aina kun asiakas pyytää jotain palvelimelta, palvelin voi sisällyttää vasteeseensa yhden tai useamman jatkon. Kun palvelin vastaa pyyntöön, se voi sisällyttää yhden tai useamman jatkon, jotka voivat olla mitä tahansa päteviä pyyntöjä. Iyengar määrittelee keskustelun (conversation) asiakkaan ja palvelimen välisen kommunikaatiosekvenssinä, jossa palvelin vastaa 15 kuhunkin pyyntöön joukolla jatkoja, ja asiakas aina poimii seuraavan pyynnön jatkojen joukosta. Lyhyesti sanottuna Iyengar periaatteessa määrittelee jatkon yhtenä mahdollisena tapana jatkaa keskustelua. Kuviossa 4 kaksinkertainen ääriviiva näyttää sen ohjelmalohkon, jossa tilan säilytys tapahtuu, lyengarin mukaan tilan säilytys voidaan tiivistää seuraavasti: 1) vastaanota syöte; 2) tuo-20 ta tuloste; 3) tarkasta, tarvitaanko tilansäilytystä; 4) jos tarvitaan, muunna tuloste upottamalla rekursiivisesti tilainformaatio kaikkiin identifioituihin jatkoihin. lyengarin mekanismissa siis tilainformaatio välitetään palvelimen S ja asiakkaan C välillä modifioituina HTML-sivuina. lyengarin lähestymistavassa on kolme ongelmaa: ensiksikin ohjelmoijan on eksplisiittisesti testattava, tarvi-25 taanko tilansäilytystä, ja jos tarvitaan, muunnettava tuloste. Toiseksi lyengarin lähestymistapa näyttää säilyttävän tilan vain, jos käyttäjä klikkaa linkkejä, jotka ovat lyengarin keksinnön muuntamilla HTML-sivuilla, mutta tilaa ei säilytetä, jos käyttäjä klikkaa selaimen eteen- tai taaksepäin -nappeja. Kolmanneksi, koska koko tilainformaatio talletetaan muunnetuilla HTML-sivuilla, jotka ovat 30 asiakastietokoneen nähtävissä, taitava hakkeri voi kyetä muuttamaan tilain-formaatiota ja mahdollisesti muokkaamaan pääsyoikeuksiaan, jne.
lyengarin lähestymistapa kuuluu kategoriaan, joka tunnetaan nimellä URL rewriting (URL = Uniform Resource Locator). Toinen tunnettu tekniikka tilan säilyttämiseksi käyttää evästeitä, joka ovat olennaisesti pieniä asiakastie-35 takoneen levylle tallennettuja datatiedostoja, jotka sisältävät tilainformaation.
13 111566
Samoin kuin lyengarin lähestymistavassa evästeitä käyttävän sovellusohjelman on eksplisiittisesti tallennettava evästeet.
Kuvio 5 esittää keksinnön edullisen suoritusmuodon mukaista web-palvelinsovellusta. Asiakkaan laitteisto ja ohjelmisto ovat aivan samanlaisia 5 kuin kuviossa 4 näytetyssä tunnetussa järjestelyssä. Olennainen ero tunnettuun tekniikkaan nähden on se, että sovellusohjelma AP ei tallenna tilaa eksplisiittisesti, vaan sen tekee sovellustulkki AI. Kuviossa 5 näytetyssä suoritusmuodossa tilansäilytys voidaan tiivistää seuraavasti: 1) vastaanota syöte; 2) tuota tuloste (käyttäen tilan säilyttäviä funktiokutsuja). Toisin sanoen ohjelmoi-10 jän täytyy vain käyttää kieltä (keksinnön mukaista sovellustulkkia), joka toteuttaa tilan säilyttävät funktiokutsut. Sovellustulkki AI sitten säilyttää ohjelman tilan automaattisesti. Toisin kuin tunnettu järjestely, keksinnön mukainen järjestely ei välitä täydellistä tilainformaatiota palvelimen S ja asiakkaan C välillä.
Sen sijaan sovellustulkki AI tallentaa tilainformaation, ja palvelimen S ja asiak-15 kaan C välillä välitetään vain pieni istunnon ja/tai käyttäjän tunniste ID osoittamaan sitä istuntoa, johon sanoma (sivupyyntö) liittyy. Asiakastietonne näkee vain tunnisteen ID, joka on paljon vähemmän arka hakkeroinnille kuin täydellinen tilainformaatio.
Kuviossa 5 näytetyn suoritusmuodon toimintaa selostetaan lähem-20 min modaalisten dialogien yhteydessä. Kuvio 6 näyttää kaksi web-sivua 60 ja 65, jotka muodostavat esimerkin modaalisesta dialogista. Kuvio 8 esittää listausta ohjelmamoduulista 80, joka näyttää modaalisen dialogin.
Rivi 8-1 aloittaa ”hello-app” -nimisen funktion määrittelyn. Rivi 8-2 aloittaa uuden dialogin määrittelyn sovelluksen sisällä, jonka dialogin otsak- 25 keena on ’’Hello”. Rivi 8-3 näyttää kontrolliotsakkeen 62, joka sanoo ’’Hello
World!”. Otsakkeen 62 alapuolella on kaksi nappia, 63 ja 64. Rivi 8-4 näyttää napin 63, joka näyttää tekstin ’’Test it”. Rivi 8-7 näyttää napin 64, joka näyttää tekstin ’’Close”. Rivin 8-4 jälkeen ovat rivit 8-5 ja 8-6, jotka määrittelevät mitä tapahtuu, jos käyttäjä klikkaa ’’Test it” -nappia 63. Tässä tapauksessa näyte- • _ 30 tään uusi sivu 65, joka sisältää stop-merkin 67, sanoman 68, joka sanoo ’’Test not implemented!”, sekä ’’Close” -napin 69. Kun käyttäjä klikkaa ’’Close” -nappia 69, edellinen sivu 60 näytetään taas. Tämä toistuu niin monta kertaa kuin käyttäjä klikkaa ’’Test it” -nappia 63. Jos käyttäjä klikkaa sivun 60 ’’Close” -nappia 64, näytetään web-palvelimen pääsivu (ei näytetty).
35 Mielenkiintoisin piirre kuviossa 8 on ’’demoapp-session-error-dialog” -funktio rivillä 8-6. Se näyttää täydellisen web-sivun 65 ja odottaa käyttäjän 111566 14 vastetta ennen palaamista. Tämä on modaalinen dialogi. Se toteutetaan sisäisesti kuviossa 9 näytetyllä tavalla. Rivi 9-3 aloittaa taulukkorakenteen määrittelyn. Rivi 9-4 aloittaa uuden rivin taulukossa. Rivi 9-5 lisää stop-symbolin graafisen kuvan 67. Rivi 9-6 lisää soluun funktiokutsun argumentteina vastaanotetut 5 komponentit. Rivillä 9-1 argumentteja kutsutaan symbolisesti ’’komponenteiksi”, ja rivillä 8-7 komponenteille annetaan arvo "Test not implemented!”. Rivi 9-7 piirtää vaakasuoran viivan tekstin 68 alle. Rivi 9-8 keskittää rivillä 9-9 määritellyn ’’Close” -napin 69.
Kuviossa 9 näytetty ohjelma kutsuu ’’demoapp-session-error-dialog” 10 -funktiota kuten kuvion 8 ohjelma teki (rivi 8-2). ’’demoapp-session-error-dialog” -funktio toimii seuraavasti. Ensin se muuntaa ’’demoapp-control-*” -funktioiden tulosteet (riveillä 8-4, 8-5 ja 8-8 kuviossa 8) HTML-kielisiksi sivuiksi. Sitten se kirjoittaa muodostuvat HTML-sivut asiakkaalle. Seuraavaksi funktio muodostaa jatkon omasta suorituksestaan, tallentaa jatkon istunto-olioon (kuten kuviossa 15 10 näytetään) ja kutsuu ’’vanish” -funktiota (rivi 10-6) oman suorituksensa päät tämiseksi.
”demoapp-session-page” -funktio (rivit 8-2 ja 9-2) olennaisesti toteuttavat modaalisen dialogin. Se silmukoi funktiossa, kunnes esiintyy tapahtuma (kuten hiiren klikkaus), joka aiheuttaa modaalisen dialogin sulkemisen.
20 On mahdollista, että modaalinen sivu sisältää ensimmäisen tyypin kontrolleja, jotka aiheuttavat dialogin sulkemisen klikattaessa ja toisen tyypin kontrolleja, jotka aiheuttavat klikattaessa jonkin muun tapahtuman (kuten eri sivun avaamisen).
Kuvio 10 esittää ”demoapp-session-save” -funktiota yksinkertaistet-25 tuna versiona, joka näyttää keksinnön oleellisia piirteitä. Periaatteessa ”de-moapp-session-save” -funktio luo jatkon, tallentaa sen istunto-olioon ja palaa käyttöjärjestelmään päättämällä oman suorituksensa ("vanish” -funktio rivillä 10-6).
Palvelin ylläpitää tietorakennetta (esimerkiksi linkitettyä listaa tai 30 hash-taulua) istunto-olioista. Kun palvelin vastaanottaa pyynnön, se jäsentää pyynnöstä (parse) istunto/käyttäjätunnisteen ID (kuvio 5). Tunniste voidaan käsitellä kuten eväste tai URL-osoitteen komponentti, mutta evästeen tai URL-osoitteen komponentin ei tarvitse sisältää täydellistä tilainformaatiota. Palvelin käyttää sitten tunnistetta etsiäkseen tietorakenteesta istuntoa (istuntotunnis-35 teen arvon kopio on tallennettu kunkin istunnon tietorakenteeseen). Ellei istun- 15 111566 toa ole, niin luodaan uusi istunto-olio ja lisätään tietorakenteeseen. Muussa tapauksessa istunto-olio löytyy tietorakenteesta.
Jos aiempi istunto löytyy, palvelin tallentaa kopio vastaanotetusta pyynnöstä istunto-olioon ja kutsuu istunnon ’’demoapp-session-restore” 5 -funktiota. Kuviossa näytetään ohjelmalistausesimerkki tästä funktiosta. Rivillä 11-2 funktio etsii jatkon (”cont”) istunnosta ja rivillä 11-4 se hyppää jatkoon, olennaisesti vaihtaen edelliseen suorituskontekstiin.
Todellisuudessa palvelin on jonkin verran mutkikkaampi. Funktioiden ”demoapp-session-page” ja ”demoapp-session-save” välillä on funktio, jo-10 ka odottaa ”demoapp-session-save” -funktion palaamista (toisin sanoen funktion ’’demoapp-session-restore" kutsumista), ja kun se palaa, se etsii URL-informaation istunto-oliosta ja kutsuu nappeihin assosioituja funktioita, kun nappeja klikataan. Tällaisen funktion toteutus on kuitenkin helppoa alan ammattilaiselle.
15 Jatko voidaan tallentaa lähes minä tahansa ajanhetkenä pyynnön käsittelyn aikana. Yllä olevissa esimerkeissä jatkot tallennetaan sen jälkeen, kun muodostuneet HTML-sivut on kirjoitettu asiakkaalle, mutta jatkot voidaan tallentaa myös ennen vasteen kirjoittamista.
Kuvio 5 voidaan tulkita siten, että asiakasta kohti on yksi tallennettu 20 jatko (tai ei yhtään). Keksinnön erään edullisen suoritusmuodon mukaisesti kuvio 5 voidaan tulkita myös siten, että tallennusvaihe käsittää usean jatkon tallentamisen ja noutava/hyppäävä vaihe käsittää yhden useasta jatkosta valitsemisen vastaanotetun HTTP-pyynnön perusteella.
* Keksinnön suoritusmuotoja on selostettu Scheme-ohjelmointikielen 25 yhteydessä. Menetelmä on kuitenkin suoraan sovellettavissa mihin tahansa ohjelmointikieleen, jossa on tai johon voidaan muodostaa jatkojen käsite. On mahdollista laajentaa monia olemassa olevia kieliä, joissa tätä käsitettä ei ole, lisäämällä vastaava käsite. Esimerkiksi Java-ohjelmointikieltä käytetään laajalti web-sovelluksissa. Vaikka olemassa oleva Java-ohjelmointikieli ja Java-, · 30 virtuaalikoneet eivät tue jatkoja, on mahdollista laajentaa Java-kieltä niiden tu kemiseksi. Lisäksi kuviossa 5 näytetty palvelin voi yhtä hyvin olla WAP (Wireless Application Protocol) -palvelin web-palvelimen sijasta. Samoin monet muutkin muunnelmat ovat ilmeisiä alan ammattilaiselle oheisten patenttivaatimusten suojapiiristä poikkeamatta.
16 111566 Lähteet: lyengarin patentin (US 5961 601) lisäksi viitataan seuraaviin dokumentteihin: [CH088] William Clinger, Anne Hartheimer, Eric Ost: Implementa-5 tion Strategies for Continuations, In Proceedings of the 1988 ACM Conference on Lisp and Functional Programming, s. 124 - 131, 1988.
[DH89] R. Kent Dybvig and Robert Hieb: Engines from Continuations, Journal of Computer Languages 13(2), s. 109 -123,1989.
[FFKD87] Matthias Felleisen, Daniel Friedman, Eugene Kohlbecker, 10 Bruce Duba: A syntactic theory of sequential control, Theoretical Computer Science 52:205-237,1987.
[FHK84] Daniel Friedman, Christopher T. Haynes, Eugene Kohlbecker: Programming with Continuations, In Program Transformation and Programming Environments, pp. 263 - 274, P. Pepper (ed.), Springer-Verlag, 15 1984.
[HDB90] Robert Hieb, R. Kent Dybvig, Carl Bruggeman: Representing control in the presence of first-class continuations, In Proceedings of ACM Conference on Programming Language Design and Implementation, s. 66 -77,1990.
20 [HF87] Christopher T. Haynes, Daniel Friedman: Abstracting timed preemption with engines, Journal of Computer Languages 12(2), s. 582 - 598, 1987.
[HFW86] Christopher T. Haynes, Daniel Friedman, Mitchell Wand: Obtaining coroutines with continuations, Journal of Computer Languages 25 11(3/4), s. 143- 153, 1986.
[SF90] Dorai Sitaram and Matthias Felleisen: Control Delimiters and Their Hierarchies, Lisp and Symbolic Computation 3(1), s. 67 - 99, 1990.
[Wand80] Mitchell Wand: Continuation-based Multiprocessing, In Conference Record of the 1980 Lisp Conference, s. 19 - 28.
30 Kaikki lähteet sisältyvät tähän hakemukseen viittauksina.
« • ·

Claims (16)

17 111566
1. Menetelmä sovellusohjelman (AP) suorittamiseksi tietokonejärjestelmässä (S), johon kuuluu käyttöjärjestelmä (OS), joka tarjoaa rajapinnan ulkoisille tapahtumille ja joka on olennaisesti muuttamaton sovellusohjelman 5 (AP) ohjelmoijalle; - missä sovellusohjelmaan (AP) kuuluu ainakin yksi korkean tason kielinen sovellusohjelmamoduuli (70, 80), joka on sovellusohjelman ohjelmoijan muutettavissa; - joka käyttöjärjestelmä hallitsee tietokonejärjestelmää suurimman 10 osan ajasta ja vain ajoittain luovuttaa hallinnan korkean tason kieliselle sovel- lusohjelmamoduulille (70, 80), jolloin sovellusohjelmamoduulin (70, 80) suoritus ei ole fyysisessä mielessä sekventiaalista; tunnettu siitä, että: - tallennetaan korkean tason kielisen sovellusohjelmamoduulin suo- 15 rituksen jatko; - pysäytetään korkean tason kielisen sovellusohjelmamoduulin suoritus; ja - vasteena ulkoiselle tapahtumalle, noudetaan tallennettu jatko ja hypätään siihen, korkean tason kielisen sovellusohjelmamoduulin suorituksen 20 jatkamiseksi; jolloin korkean tason kielisessä sovellusohjelmamoduulissa syntyy illuusio sekventiaalisesta suorituksesta.
2. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, että pysäyttävä vaihe käsittää hallinnan palauttamisen ohjelmamoduulin ulko- 25 puolelle.
3. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, että pysäyttävä vaihe käsittää vaihdon toiseen suorituskontekstiin.
4. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, että sovellusohjelma toteuttaa palvelinsovelluksen dataverkkoa (DN) varten.
5. Patenttivaatimuksen 5 mukainen menetelmä, tunnettu siitä, että dataverkko käyttää Internet-protokollaa.
6. Patenttivaatimuksen 5 mukainen menetelmä, tunnettu siitä, että dataverkko käyttää Wireless Application -protokollaa. 111566 18
7. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, että tallentava vaihe on vasteellinen vastaanotetulle HTTP (hypertext transfer protocol) -pyynnölle.
8. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, 5 että noutava/hyppäävä vaihe on vasteellinen vastaanotetulle HTTP (hypertext transfer protocol) -pyynnölle.
9. Patenttivaatimuksen 8 mukainen menetelmä, tunnettu siitä, että tallentava vaihe käsittää usean jatkon tallentamisen ja noutava/hyppäävä vaihe käsittää yhden useasta jatkosta valitsemisen vastaanotetun HTTP- 10 pyynnön perusteella.
10. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, että korkean tason kieli on Java täydennettynä käskyillä patenttivaatimuksen 1 vaiheiden toteuttamiseksi.
11. Menetelmä modaalisen dialogin toteuttamiseksi istunnon osana 15 asiakas-palvelin -sovelluksessa, joka on kirjoitettu korkean tason ohjelmointikielellä, tunnettu siitä, että menetelmään kuuluu seuraavat palvelimen (S) suorittamat vaiheet: - vasteena asiakkaan istuntoa koskevaan pyyntöön (63), kutsutaan näyttöfunktiota (9-2), joka aiheuttaa modaalisen dialogin sivun (65) näyttämi- 20 sen asiakkaalla; - kutsutussa näyttöfunktiossa tallennetaan (10-1) korkean tason sovellusohjelman jatkoja pysäytetään näyttöfunktion suoritus; - vasteena asiakkaan seuraavaan pyyntöön, joka koskee samaa istuntoa, noudetaan (11-1) tallennettu jatko ja jatketaan (11-4) näyttöfunktion 25 suoritusta noudetusta jatkosta; ja - ehdollisesti palataan modaalisesta dialogista vasteena asiakkaan pyyntöön (69).
12. Menetelmä laitteisto- ja/tai ohjelmistomoduulien (CR, SC) testaamiseksi, joilla on ainakin yksi asynkroninen rajapinta asynkronisine funk- 30 tiokutsuineen, tunnettu siitä, että: - käytetään korkean tason testiohjelmaa (TA) testioperaatioiden suorittamiseksi; - muunnetaan asynkroniset funktiokutsut synkronisiksi: 19 111566 (a) tallentamalla korkean tason testiohjelman (TA) jatko kun tes-tioperaatio aloitetaan; ja (b) noutamalla tallennettu jatko ja hyppäämällä jatkoon, kun tes-tioperaatio on valmis.
13. Tietokonejärjestelmä (S) sovellusohjelman (AP) suorittamiseksi (S), johon tietokonejärjestelmään kuuluu käyttöjärjestelmä (OS), joka tarjoaa rajapinnan ulkoisille tapahtumille ja joka on olennaisesti muuttamaton sovellusohjelman (AP) ohjelmoijalle; - missä sovellusohjelmaan (AP) kuuluu ainakin yksi korkean tason 10 kielinen sovellusohjelmamoduuli (70, 80), joka on sovellusohjelman ohjelmoijan muutettavissa; - joka käyttöjärjestelmä on sovitettu hallitsemaan tietokonejärjestelmää suurimman osan ajasta ja vain ajoittain luovuttamaan hallinnan korkean tason kieliselle sovellusohjelmamoduulille (70, 80), jolloin sovellusohjelmamo- 15 duulin (70, 80) suoritus ei ole fyysisessä mielessä sekventiaalista; tunnettu siitä, että tietokonejärjestelmään lisäksi kuuluu: - ensimmäinen ohjelmistorutiini tallentamaan korkean tason kielisen sovellusohjelmamoduulin suorituksen jatko; - toinen ohjelmistorutiini pysäyttämään korkean tason kielisen sovel-20 lusohjelmamoduulin suoritus; ja - kolmas ohjelmistorutiini noutamaan tallennetun jatkon ja hyppäämään siihen vasteena ulkoiselle tapahtumalle, korkean tason kielisen sovellusohjelmamoduulin suorituksen jatkamiseksi; jolloin korkean tason kielisessä sovellusohjelmamoduulissa syntyy 25 illuusio sekventiaalisesta suorituksesta.
14. Tietokonepalvelinjärjestelmä (S) modaalisen dialogin toteuttamiseksi istunnon osana asiakas-palvelin -sovelluksessa, joka on kirjoitettu korkean tason ohjelmointikielellä, tunnettu siitä, että tietokonepalvelinjärjestel-; mään kuuluu: 30. ensimmäinen ohjelmistorutiini kutsumaan näyttöfunktiota (9-2) vas teena asiakkaan istuntoa koskevaan pyyntöön (63), joka näyttöfunktio aiheuttaa modaalisen dialogin sivun (65) näyttämisen asiakkaalla; - toinen ohjelmistorutiini tallentamaan kutsutussa näyttöfunktiossa (10-1) korkean tason sovellusohjelman jatko ja pysäyttämään näyttöfunktion 35 suoritus; 111566 20 - kolmas ohjelmistorutiini noutamaan (11-1) tallennettu jatko ja jatkamaan (11-4) näyttöfunktion suoritusta noudetusta jatkosta vasteena asiakkaan seuraavaan pyyntöön, joka koskee samaa istuntoa; ja - neljäs ohjelmistorutiini ehdollisesti palaamaan modaalisesta dialo-5 gista vasteena asiakkaan pyyntöön (69).
15. Tietokoneella toteutettu testilaite laitteisto- ja/tai ohjelmistomoduulien (CR, SC) testaamiseksi, joilla on ainakin yksi asynkroninen rajapinta asynkronisine funktiokutsuineen, tunnettu siitä, että testilaitteeseen kuuluu: 10. korkean tason kielinen testiohjelma (TA) testioperaatioiden suorit tamiseksi; - käsky, käskyjoukko tai kirjastofunktio asynkronisten funktiokutsujen muuntamiseksi synkronisiksi: (a) tallentamalla korkean tason kielisen testiohjelman (TA) suorituk- 15 sen jatko, kun testiohjelma (TA) aloitetaan; ja (b) noutamalla tallennettu jatko ja hyppäämällä jatkoon, kun tes-tioperaatio on valmis.
16. Tietokoneella luettava tallennusväline, joka käsittää tietokoneen ohjelmajoukon, tunnettu siitä, että ohjelmajoukon suoritus tietokoneella 20 saa tietokoneen suorittamaan jonkin patenttivaatimuksen 1-12 mukaisen menetelmän vaiheet. 21 111566
FI20001879A 2000-08-25 2000-08-25 Menetelmä ohjelman hallintakaavion kääntämiseksi FI111566B (fi)

Priority Applications (1)

Application Number Priority Date Filing Date Title
FI20001879A FI111566B (fi) 2000-08-25 2000-08-25 Menetelmä ohjelman hallintakaavion kääntämiseksi

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FI20001879A FI111566B (fi) 2000-08-25 2000-08-25 Menetelmä ohjelman hallintakaavion kääntämiseksi
FI20001879 2000-08-25

Publications (3)

Publication Number Publication Date
FI20001879A0 FI20001879A0 (fi) 2000-08-25
FI20001879A FI20001879A (fi) 2002-02-26
FI111566B true FI111566B (fi) 2003-08-15

Family

ID=8558957

Family Applications (1)

Application Number Title Priority Date Filing Date
FI20001879A FI111566B (fi) 2000-08-25 2000-08-25 Menetelmä ohjelman hallintakaavion kääntämiseksi

Country Status (1)

Country Link
FI (1) FI111566B (fi)

Also Published As

Publication number Publication date
FI20001879A0 (fi) 2000-08-25
FI20001879A (fi) 2002-02-26

Similar Documents

Publication Publication Date Title
Conchon et al. Jocaml: Mobile agents for objective-caml
US6882999B2 (en) URL mapping methods and systems
US8122292B2 (en) Debugging of business flows deployed in production servers
JP4015375B2 (ja) クライアント側ユーザインタフェース要素を処理するサーバ側制御オブジェクト
US6941560B1 (en) XML-based integrated services event system
KR101076910B1 (ko) 객체 지향 언어로의 병행 프로그램 구현
US8719844B2 (en) Merging realtime data flows
JP3274131B2 (ja) オブジェクト指向地点間通信方法およびその方法を行う通信装置
US20020166000A1 (en) Method for inverting program control flow
WO1999046689A9 (en) Execution of extended activity diagrams by code generation
CN111488143A (zh) 一种基于Springboot2代码自动生成装置和方法
US20080127128A1 (en) Type Validation for Applications Incorporating A Weakly-Typed Language
FI111566B (fi) Menetelmä ohjelman hallintakaavion kääntämiseksi
US11429358B2 (en) Representing asynchronous state machine in intermediate code
CN115061678A (zh) 一种基于浏览器代理服务的代码编译方法及客户端
CN113626001A (zh) 一种基于脚本的api动态编排方法及装置
US7266814B2 (en) Namespace based function invocation
CN113778698A (zh) 服务器通信方法及装置、存储介质及设备
WO2022046198A1 (en) Thread-local return structure for asynchronous state machine
US20070214419A1 (en) Integrated service creation and execution platforms for the converged networks
CN112650502A (zh) 批处理任务处理方法、装置、计算机设备和存储介质
Boulifa et al. Model generation for distributed Java programs
CN115033312B (zh) ElasticSearch数据操作方法及装置
CN117311799B (zh) 一种软件项目页面的配置方法
CN116032809B (zh) 使用Wasm的网络协议分析方法及系统

Legal Events

Date Code Title Description
MM Patent lapsed