Hajautetut ja samanaikaiset järjestelmät 25.4.2008 Harjoitus 7 Viimeiset luennot 28.-29.4. Viimeiset harjoitukset 6.5 klo 10.30 - 12. Kurssin loppukoe 6.5. 08.00-10.00. Toteutetaan ajansopimisjärjestelmä (liiankin yksinkertaisella) palvelinpohjaisella TCP-protokollalla. Palvelinsovelluksella on portti josta sopiminen käynnistetään. Sopiminen käynnistetään antamalla omat mahdolliset ajat ja mukaan haluttujen muiden asiakkaiden osoitteet. Kukin toimiva asiakkassovellus kuuntelee TCP-porttia yhteydenottoja varten. Kun palvelin saa uuden sopimispyynnön, se ottaa yhteyden kuhunkin pyydettyyn asiakkaaseen, kysyy sopivat ajat, vastaanottaa ne; tekee päätöksen ajasta ja ilmoittaa ajan kaikille asiakkaille (ja sulkee yhteydet). Yksinkertaisuuden vuoksi esitetään ajat kokonaislukuina. Ensimmäinen kokonaisluku joka käy kaikille otetaan käyttöön. Jollei johonkin asiakkaaseen saada yhteyttä (tai se ei vastaa oikein), se jätetään sopimisesta huomiotta. Viestien erottimena käytetään rivinvaihtoa. Ensimmäisen asiakkaan tekemä yhteydenottopyyntö on muotoa: AGREE_INIT AGREE_MY_TIMES 1 3 4 5 8 9 10 11 ... AGREE_MY_FRIENDS ip_addr1:port1 ip_addr2:port2 ... missä "1 3 4 5 8 9 10 11 ..." on ko. ensimmäiselle asiakkaalle sopivat ajat ja "ip_addr1:port1 ..." on haluttujen muiden solmujen osoitteet. Palvelin vastaa AGREE_INIT_WAIT Tämän jälkeen palvelin ottaa yhteyden kuhunkin AGREE_MY_FRIENDS kentässä lueteltuun muuhun asiakkaiseen ja lähettää viestin AGREE_GIVE_TIMES Asiakas vastaa viestillä AGREE_MY_TIMES 3 4 5 6 ... Kun palvelin on saanut kaikki vastaukset (tai kohtuullinen aikakatkaisu on kulunut), se vastaa kuhunkin yhteyteen viestillä AGREE_DECISION 3 missä 3 on sovittu aika. Jollei mikään aika sovi kaikille, palvelin antaa ajan -1. Tämän jälkeen palvelin sulkee yhteydet. 37) Mitä heikkouksia ym. protokollassa on? Täydennä protokollan kuvas korjaamaan nämä heikkoudet. Miten paljon nämä täydennyket lisäisivät ohjelmointityötä asiakkaassa ja palvelimessa? Seuraavissa tehtävissä kuitenkin noudatetaan alkuperäistä protokollaa. Seuraava X3 tehtävä on pakollinen kaikille opiskelijoille. X-tehtävien ratkaisujen pitää olla kunkin opiskelijan itse tekemiä. Saman ratkaisun kopioita ei hyväksytä (versioitunakaan). Vastaukset pitää lähettää edeltävänä päivänä (to) klo 14.00 mennessä sähköpostitse allaolevaa ohjetta käyttäen. Saat automaattisen vastauksen pian onnistuneen lähetyksen jälkeen. Vastauksen on sisällettävä (ohjelman kommenttina) lyhyt itsearviointi jossa arvioit ratkaisun toimivuutta, luotettavuutta ja mahdollisia parannusmahdollisuuksia. Oikea itsearvointi (jonkinlaiseen ratkaisuun) on yhden pisteen arvoinen. Lähetä ratkaisusi cs:n käyttäjälle sjuva käyttäen viestin otsikkona merkkijonoa HS_X3_tunnus missä tunnus on sinun cs-käyttäjätunnuksesi (tai tunnus@cc). Helpointa lähettäminen on cs:ltä käyttäen komentoa: /usr/ucb/mail -s HS_X3_tunnus sjuva < tunnus.java missä tunnus on cs-käyttäjätunnuksesi ja tunnus.java on ohjelmatiedosto joka sisältää vastauksesi. Jotta tehtävä kääntyisi, on pääohjelman luokan nimen oltava täsmälleen sama kuin käyttäjätunnuksesi (kuitenkin ilman @cc tms. osuutta). AgreeProto -apuluokkaa ei tarvitse sisällyttää mukaan. Huomaa myös, ettei Java-kääntäjälle kelpaa HTML, MIME, allekirjoitukset, eikä merkkijonojen/kommenttien jakaminen usealle riville. X3) Kirjoita ym. protokollan mukainen asiakas. Tämä koostuu kahdesta osasta, toisaalta sopimisen käynnistävästä osasta (joka ottaa yhteyden palvelimeen) ja kuuntelevasta osasta joka vastaa palvelimelta tuleviin aikapyyntöihin. Tee kuunteleva osa omaksi säikeekseen. Tee ainakin toinen osa saadaksesi puolet pisteistä. 40-41) Kirjoita yo. protokollan mukainen palvelin. 42) Samanaikaista palvelin siten, että se ottaa kuhunkin asiakkaaseen yhteyden samanaikaisesti. Työtä helpottamaan on www-sivulla AgreeProto -apuluokka sekä runko asiakkaasta ja palvelimesta. Testausta varten sivulla on myös jar-muotoiset toimivat ohjelmat.