8. Ohjelman toteutus järjestelmässä

Slides:



Advertisements
Samankaltaiset esitykset
18. Abstraktit tietotyypit
Advertisements

@ Leena Lahtinen Helia Ohjelman perusrakenteet 1. PERÄKKÄISRAKENNE 2. VALINTARAKENNE 3. TOISTORAKENNE.
Tietokonetekniikka 5 Operandien osoittaminen ja tietokoneen käskykanta
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
PROSESSIT Tehtäviä: Limittää usean prosessin suoritus, jotta resurssien käyttö olisi tehokasta, mutta samalla taata, että kaikki prosessit etenevät mielekästä.
JavaScript (c) Irja & Reino Aarinen, 2007
2.8.3 Abstraktit tietotyypit
Rakenteinen ohjelmointi
Sovellusohjelman suunnittelu & toteutus
KJ-I S2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen3 - 1 PROSESSIT JA NIIDEN HALLINTA Stallings, Luvut Käyttöjärjestelmät.
Synkronointi Yksi tärkeimmistä rinnakkaisuuteen liittyvistä asioista. semaforit tapahtumalaskurit monitorit.
Käyttöjärjestelmät Johdanto. Kurssimateriaalista 15 lukua, jotka vastaavat enemmän tai vähemmän 15 kahden tunnin pakettia Perustuu Gary Nuttin Operating.
C-ohjelmointi, kevät 2006 Taulukot Binääritiedostot Luento
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Siirräntäjärjestelmät. 2 w Siirräntäjärjestelmä Tiedostojärjestelmä ja siirräntä keskusmuistin ja oheislaitteiden välillä w Voidaan käsitellä hierarkkisina.
5.3.3 Koodin generointi Koodin generointi tarkoittaa objektikoodin eli konekielisen ohjelman tuottamista. Generointi jakautuu kolmeen osatehtävään: 1.Muistin.
Ohjelmoinnin tekniikkaa Sisällys for -lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely.
Muistinhallinta. 2 Teknisiä kehitysaskelia §Muisti- ja osoiteavaruuden erottaminen toisistaan l virtuaaliosoitteiden avulla muistin koko voi olla suurempi.
2. Vuokaaviot.
13. Hyvä ohjelmointitapa (osa 1)
2 - 1 Rio syksy 2004 OSA I: Yhteisten muuttujien käyttö Prosessit samassa koneessa.
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
Visual Basic -ohjelmointi
1 9. Muistinhallinta l Moniajojärjestelmässä keskusmuisti on jaettu usean prosessin kesken l => ohjelman paikka muistissa ei ole kiinteä, vaan koodi on.
UNIX ftp://shell.shore.net/members/w/s/ws/Support/OS/UNIX.pdf
11. Javan toistorakenteet
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
Rinnakkaisuus Järjestelmässä, jossa voi olla useita prosesseja rinnakkain suorituksessa voi tulla tilanteita, joissa prosessien suoritusta täytyy kontrolloida.
Kontrollirakenteet laajemmin
1 Rio s05 / Liisa Marttinen Kertaus: Semaforit Semaforin operaatiot: sem s = n; # semaforin alkuarvo P(s); # jos s
Ohjelmointi 1. toinen luento1 Taulukot n Kiinteät taulukot: alkioiden määrä tiedetään Dim intCount(12) As Integer 0 indeksit saavat arvoja 0-12 (Option.
1 Rio / Auvo Häkkinen Kertaus: Semaforit Semaforin operaatiot: sem s = n; # semaforin alkuarvo P(s); # jos s
Ohjelma Mikro-ohjelmointi Symbolinen konekieli Osoitustavat.
Windows 2000 Jukka Stranden Marko Suhonen Käyttöjärjestelmät Seminaari 2006.
Aiheet ● Ohjelmointikielten kääntäminen ● Kieliopin määrittely ● Kääntäjän toiminta.
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembler.
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli.
String-vertailusta ja Scannerin käytöstä (1/2)
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op
7. Hyvä ohjelmointitapa..
Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto)
16. Ohjelmoinnin tekniikkaa
14. Hyvä ohjelmointitapa.
10. Siirräntäjärjestelmät
6. Konekäskyjen suorittaminen
7. Hyvä ohjelmointitapa..
4. Ohjelmointi konekielellä (TTK-91 ja Titokone)
Tietokoneen toiminta (2 ov)
Tietokoneen toiminta (2 ov)
5. Aliohjelmien toteutus
11. Käännös, linkitys ja lataus
8. Ohjelman toteutus järjestelmässä
Kontrollirakenteet laajemmin
10. Siirräntäjärjestelmät
Tietokoneen toiminta (2 ov = 4 op)
2. TTK-91 –tietokone ja sen simulaattori
2. TTK-91 –tietokone 2.0 Mikä TTK-91? Ja mitä hyötyä siitä on?
Luku 12 Java-ohjelmien suoritus
3. TTK-91-käskykanta Symbolisen konekielen tavalliset käskyt
4. Ohjelmointi konekielellä (TTK-91 ja Titokone)
13. Loogiset operaatiot.
Kurssin tavoitteet Miksi? Keskeiset asiat
10. Siirräntäjärjestelmät
3. TTK-91-käskykanta Symbolisen konekielen tavalliset käskyt
4. Luokan testaus ja käyttö olion kautta
10. Siirräntäjärjestelmät
Jakso 4 Aliohjelmien toteutus
16. Ohjelmoinnin tekniikkaa
Esityksen transkriptio:

8. Ohjelman toteutus järjestelmässä 8.1 Käyttöjärjestelmän tehtävät 8.2 Prosessi ja prosessin esitysmuoto järjestelmässä 21/11/2018 Liisa Marttinen kevät 2005

Yleistä käyttöjärjestelmästä tietokoneen tärkein ohjelmisto liittymä laitteiston ja ohjelmiston välillä tehostaa ja helpottaa tietokoneen käyttöä KJ hoitaa oheislaitteiden ohjauksen siirräntä- ja tiedostokäskyt => palvelupyyntö KJ:lle resurssien jakelu ja yhteiskäyttö prosessori, muisti, oheislaitteet ohjelmat, tiedostot 21/11/2018 Liisa Marttinen kevät 2005

Käyttöjärjestelmä tarjoaa kullekin käyttäjälle Käyttäjä 1 Käyttäjä 2 Käyttäjä 3 Virtuaalikone 3 Virtuaalikone 1 Virtuaalikone 2 Sovellus Sovellus Sovellus Käyttöjärjestelmä Laitteisto Käyttöjärjestelmä tarjoaa kullekin käyttäjälle illuusion omasta virtuaalikoneesta 21/11/2018 Liisa Marttinen kevät 2005

Käyttöjärjestelmän tehtäviä Käyttöliittymä, komentotulkki Prosessien ohjaus Resurssien hallinta ja jakelu Palvelutoiminnot prosesseille Suojaus Muita vaatimuksia 21/11/2018 Liisa Marttinen kevät 2005

Käyttäjä Komentotulkki Komentotulkki Varusohjelmat Sovellusohjelmat PALVELUPYYNNÖT PROSESSIEN HALLINTA RESURSSIEN JAKELU SUOJAUS TIEDOSTOJÄRJESTELMÄ MUISTINHALLINTA lohkot SIIRRÄNTÄJÄRJESTELMÄ laiteajurit Laiteohjaimet ja laitteisto

Prosessien ohjaus työjonot ja töiden suoritus prosessijonot töiden käynnistys ja lopetus resurssien varaus ja vapautus prosessijonot prosessiajan jako prosesseille rinnakkaisuus => ratkaistavia ongelmia työn /prosessin vaihtaminen prosessien yhteiselo synkronointi poissulkeminen 21/11/2018 Liisa Marttinen kevät 2005

Resurssien hallinta ja jakelu jaettavat resurssit prosessori(t) keskusmuisti tukimuistit oheislaitteet yksittäiskäyttöiset, esim. piirturit, kirjoittimet yhteiskäyttöiset, esim. levyt, tiedostot jakelupolitiikka kuka saa mitä saa (allokointi) milloin saa (skedulointi) 21/11/2018 Liisa Marttinen kevät 2005

paljon kirjanpidollisia tietorakenteita kuvaajia resurssikuvaaja: resurssin ominaisuudet, tila prosessikuvaaja: mitä resursseja hallussa jonoja resurssia odottavat prosessit (tieto)resurssien yhteiskäyttö datatiedostot, ohjelmakoodi, käyttöjärjestelmän rutiinit, ohjelmakirjastot, ... kustannussäästö; yhteistyö yhteisten resurssien jakaminen ja käyttö yksittäiskäyttöisten resurssien jakelu yhteiskäyttöisten käyttö

Palvelutoiminnot prosesseille siirräntä (I/O) ohjausrutiinit saantimenetelmärutiinit laitejuriohjelmat (driver) tiedostojärjestelmä tiedostojen ja hakemistojen luonti tiedostojen ja hakemistojen poisto tiedostojen avaaminen, käyttö ja sulkeminen tiedostojen suojausjärjestelmä prosessin luonti ja lopettaminen keskusmuistitilan varaaminen ja vapauttaminen 21/11/2018 Liisa Marttinen kevät 2005

Suojaus ohjelmien suojaus toisiltaan erityisesti KJ:n suojaus sovelluksilta prosessori suorittaa ohjelmia kahdessa eri suojaustilassa: etuoikeutetussa tilassa KJ:n keskeisimmät osat pysyvästi => kaikki oikeudet: muistinsuojausrekisterien asetukset laiteohjainrekistereihin viittaaminen koko muisti käytettävissä keskeytysten asettaminen ja esto siirtyminen hallitusti palvelupyyntöjen kautta käyttäjätilassa 21/11/2018 Liisa Marttinen kevät 2005

keskusmuistin suojaus laitteistotasolla MMU tarkistaa osoitemuutoksen yhteydessä jokaisen ajonaikaisen muistiviittauksen oheismuistilaitteiden suojaus tiedostoja saavat käyttää vain ne, joilla siihen oikeus käyttö aina KJ:n palvelupyynnöillä, joilloin KJ voi tarkistaa käyttöoikeudet tiedostoissa tieto, kuka saa käyttää ja miten sovellukset eivät saa käyttää suoria levyosoitteita

Muita vaatimuksia KJ:lle yhteiskäytössäkin aina samat tulokset samoilla syötteillä prosessien suoritusjärjestys ei saa vaikuttaa tuloksiin tehokkuus, luotettavuus, ylläpidettävyys pienuus, virheettömyys, ‘huomaamattomuus’ 21/11/2018 Liisa Marttinen kevät 2005

Prosessien hallinta Käyttöjärjestelmän ydin KJ:n keskeisimmät ja laiteläheisimmät osat prosessien vuorottaminen keskeytysten käsittely prosessien synkronointi prosessien keskinäinen poissulkeminen Toteutetaan osin laitteistolla ja mikrokoodilla, osin ohjelmistolla => turvallinen elinympäristö prosesseille syntyä, toimia ja kuolla! 21/11/2018 Liisa Marttinen kevät 2005

etuoikeutetut käskyt laitteistotasolla keskeytysten kieltäminen ja salliminen prosessorin vaihto prosessilta toiselle muistin suojausrekisterien asetukset alimman tason siirräntä vain KJ voi käyttää etuoikeutettuja käskyjä ja vain jos prosessori on etuoikeutetussa tilassa SR:n etuoikeutetun tilan bitti asetettu KJ:n ydin ja siirrännän käynnistys aina etuoikeutetussa tilassa sovellusohjelmat ja monet KJ:n rutiinit käyttäjätilassa 21/11/2018 Liisa Marttinen kevät 2005

virhetilanteissa ja keskeytyksissä laitteistotasolla on myös huomattava viittaukset oman alueen ulkopuolelle muistin suojaus osoitemuunnos virhetilanteissa ja keskeytyksissä keskeytyssyy tilarekisteriin SR entinen tila talteen ainakin PC:n arvo muistiin rekisterit siirtyminen keskeytyskäsittelijään uudeksi osoitteeksi keskeytyskäsittelijärutiinin osoite 21/11/2018 Liisa Marttinen kevät 2005

prosessien vuorottaminen ja laitteiston käytön laskutus edellyttää aikaviipalekelloa tuottaa säännöllisin välein kellokeskeytyksiä, jolloin KJ voi vaihtaa suoritettavan prosessin reaaliaikakelloa josta nähdään esim. prosessin kuluttama kokonaisaika 21/11/2018 Liisa Marttinen kevät 2005

Käyttöjärjestelmän ytimen osat Poissulkeminen Synkronointi Prosessi- en vuorot- taminen Keskey-tyskäsittely 21/11/2018 Liisa Marttinen kevät 2005

8.1 Prosessi suoritettavaksi otettu ohjelma KJ:n kannalta prosessi on tietorakenne keskusmuistissa oleva ohjelmakoodi data hallinnollista tietoa KJ:n prosessitaulu prosessikuvaaja (PCB) kullekin prosessille prosessin tunniste prosessin käsittelyssä tarvittavaa tietoa 21/11/2018 Liisa Marttinen kevät 2005

Prosessin tunniste yksikäsitteinen numero juokseva numerointi omistajan käyttäjä- ja ryhmätunnus (uid, gid) saadaan omistajan kirjoittautuessa järjestelmään esim . käyttöoikeuksien tarkistamiseen tunnisteen avulla omistaja voi esim. tappaa prosessinsa (esim. KILL <tunniste>) 21/11/2018 Liisa Marttinen kevät 2005

Prosessin tilasiirtymäkaavio 1. Initiated READY 2. 5. 3. WAITING RUNNING 4. 6. Prosessin tilasiirtymäkaavio Terminated 21/11/2018 Liisa Marttinen kevät 2005

READY-jono RUN WAIT ajokelpoisten prosessien kuvaajat prosessin kuvaajassa on tieto prosessin tilasta prosessi odottaa pääsyä suoritukseen RUN prosessi on suorituksessa sillä on prosessori käytössään WAIT prosessi odottaa jotain tapahtumaa esim. I/O-toiminnon päättymistä 21/11/2018 Liisa Marttinen kevät 2005

INITIATED TERMINATED prosessi luotu, mutta ei vielä valmis ajettavaksi prosessi suorittanut tehtävänsä suoritus keskeytynyt virheeseen 21/11/2018 Liisa Marttinen kevät 2005

Siirtymien merkitys: 1. Kaikki, mitä prosessi tarvitsee ajoa varten, on valmista 2. Prosessi saa CPU:n 3. Aikaviipale on täyttynyt 4. Prosessi käynnistää I/O-operaation 5. I/O-operaatio päättyy 6. Prosesi on suoritettu (tai fataali virhe on tapahtunut) 21/11/2018 Liisa Marttinen kevät 2005

Heittovaihto (swapping) KJ osaa viedä kokonaisia prosesseja levylle kesken suorituksen ==> kaksi lisätilaa READY SWAPPED OUT muuten valmis, mutta koko prosessi levyllä WAITING SWAPPED OUT koko prosessi levyllä odottamassa 21/11/2018 Liisa Marttinen kevät 2005

Prosessin tilat heittovaihdon tapauksessa Initiated READY RUNNING WAITING READY SWAPPED OUT WAITING SWAPPED OUT Prosessin tilat heittovaihdon tapauksessa Terminated 21/11/2018 Liisa Marttinen kevät 2005

prosessin kiireellisyysaste eli prioriteetti yleensä kokonaisluku mitä pienempi arvo sitä suurempi prioriteetti määrää, kuinka pian prosessi saa prosessorin käytöönsä käyttäjän prosesseilla pienempi prioriteetti kuin KJ:n prosesseilla 21/11/2018 Liisa Marttinen kevät 2005

kun prosessi menettää suoritusvuoron eli sen aikaviipale loppuu tai se jää odottamaan jotain tapahtumaa sen rekistereihin tekemät muutokset on talletettava keskusmuistiin talletetaan prosessorin kuvaajaan kun prosessori saa uudelleen suoritusvuoron KJ palauttaa arvot ennalleen ja prosessori jatkaa siitä, mihin viimeksi jäi 21/11/2018 Liisa Marttinen kevät 2005

Prosessin kuvaaja prosessin koodin ja datan sijainti KJ kirjaa, kun prosessi tuodaan muistiin alkuosoite ja pituus (virtuaalimuistia käytettäessä sivutaulun sijainti) prosessin avaamat tiedostot prosessin työhakemiston polku siirräntään liittyvää tietoa semaforeihin liittyvää tietoa laskutukseen liittyviä tietoja kulutettu prosessoriaika käytetty I/O-aika 21/11/2018 Liisa Marttinen kevät 2005

Myös käyttöjärjestelmä on joukko prosesseja vastuussa kaikista muista prosesseista luo ja tuhoaa prosesseja käynnistää ja pysäyttää niiden suoritusta jakaa prosessoriaikaa aikaviipaleina oheislaitteiden ja tiedostojen käyttö prosessi voi generoida uusia prosesseja monissa järjestelmissä mahdollista generointi kuvataan ohjelmakoodissa KJ tarjoaa luontipalvelun uusilla prosesseilla omat koodit ja tietorakenteet 21/11/2018 Liisa Marttinen kevät 2005

8.2 Keskeytyskäsittely Esim. oheislaitteiden käsittely käynnistys laiteajurilla sen jälkeen laiteohjain itsenäisesti huolehtii laitteesta ja prosessori voi tehdä muuta siirrännän päättyminen tai virhetilanne => laitekeskeytys prosessorille prosessori tutkii tilanteen ja mahdollisesti käynnistää KJ:n käsittelemään tilannetta 21/11/2018 Liisa Marttinen kevät 2005

Keskeytyksiä aikaviipalekeskeytys poikeustilanteet palvelupyyntö aikaviipaleen päätyttyä kello aikeuttaa keskeytyksen prosessin suoritus keskeytetään, toinen prosessi otetaan suoritukseen poikeustilanteet aritmetiikan ylivuoto, nollalla jako, tuntematon tai luvaton käskykoodi, luvaton muistiosoite prosessin suoritus päättyy palvelupyyntö I/O-pyyntö KJ huolehtii siirrännästä 21/11/2018 Liisa Marttinen kevät 2005

Keskeytyksen jälkeen prosessori siirtyy suorittamaan KJ:n koodia keskeytyspyyntö= tilarekisterin SR lipun (bitti) asettaminen laiteohjain, kello ohjelman suoritusvirhe tai ohjelman palvelupyyntö prosessori tutkii SR:n liput aina jokaisen konekäskyn suorituksen jälkeen havaitsee tällöin suorituksen aikana tulleet keskeytykset 21/11/2018 Liisa Marttinen kevät 2005

Siirtyminen käyttöjärjestelmään rekistereiden SR, PC ja FP arvot prosessin omaan pinoon kuvaajaa ei voida tallettaa, koska prosessori ei tiedä sen sijaintia prosessori etuoikeutettuun tilaan ja keskeytykset estetään (ainakin vähäksi aikaa) asetaan tilarekisterin tätä varten varatut bitit TTK-91:ssä bitit P ja D etuoikeutetussa tilassa prosessori suostuu suorittamaan etuoikeutettuja käskyjä keskeytyksen esto: keskeytysbittejä ei tutkita 21/11/2018 Liisa Marttinen kevät 2005

keskeytyksen syy poikkeukset ja palvelupyynnöt tutkimalla SR-rekisteriä O-bitti: luvun ylivuoto/alivuoto Z-bitti: nollalla jako U-bitti: tuntematon tai kielletty käsky M-bitti: kielletty muistiviittaus S-bitti: palvelupyyntö, palvelun numero TR:ssä (HALT, READ, WRITE, TIME, DATE) Entä laitekeskeytykset? asynkronisia ohjelman suorituksen kanssa eli voivat sattua milloin tahansa laiteohjainten pollaus 21/11/2018 Liisa Marttinen kevät 2005

keskeytyksen käsittely erilaisilla keskeytyksillä omat käsittelyrutiinit keskeytysvektoritaulussa rutiinien alkuosoitteet vektoritaulu sijaitsee yleensä ohjelman alussa ‘keskeytystyyppi’ = käsittelijännumero on TR:ssä PC:n arvoksi ko. keskeytysrutiinin ensimmäisen käskyn osoite PC = MEM[keskeytysnro] Seuraavaksi suoritetaan keskeytyskäsittelijän koodia 21/11/2018 Liisa Marttinen kevät 2005

Takaisin sovellukseen jatketaan samaa prosessin suorittamista valitaan suoritukseen jokin toinen prosessi prosessi joutui WAIT-tilaan suuremman prioriteetin prosessi tullut suoritukseen prosessin vaihto edellisen prosessin tiedot prosessorista ja pinosta prosessin kuvaajaan vuorottaja valitsee seuraavaksi suoritettavan prosessin READY-jonosta suoritettavan prosessin rekisterien arvot ladataan kuvaajasta 21/11/2018 Liisa Marttinen kevät 2005

keskeytysmekanismi on sopiva myös käyttöjärjestelmän palvelujen käynnistämiseen palvelupyyntö ~ normaali aliohjelman kutsu parametrit pinoon ympäristön talletus paluu kutsukohtaan käsittely käyttöjärjestelmässä prosessi voi joutua WAIT-tilaan, jolloin prosessori suorittaa muita käskyjä aikanaan prosessi pääsee taas suoritukseen ja jatkaa siitä, mihin viimeksi jäi 21/11/2018 Liisa Marttinen kevät 2005

sisäkkäiset keskeytykset keskeyksillä eri prioriteetit konevirhe korkein prioriteetti siirräntävirhe kellolaite palvelupyyntö alin prioriteetti korkeamman prioriteetin keskeytys voi keskeyttää alemman prioriteetin keskeytyksen käsittelyn keskeytysten esto keskeytyksen käsittelyn ajan saman kiireellisyysluokan ja sitä alemman prioriteetin keskeytykset on automaattisesti estetty 21/11/2018 Liisa Marttinen kevät 2005

keskeytyksen käsittelyrutiinin tulee sisältää vain todella välttämättömät toiminnat etuoikeutettu tila keskeytykset estetty muu toiminta käyttöjärjestelmän käyttäjätilassa pyörivälle palvelurutiinille 21/11/2018 Liisa Marttinen kevät 2005

8.3 Prosessien vuorottaminen Vuorottaja (eli skeduloija) jakaa prosessoriaikaa järjestelmän eri prosesseille suoritetaan keskeytyskäsittelyn jälkeen, jos suorituksessa ollut prosessi ei enää jatka prosessi siirtynyt WAIT-tilaan prosessin aikaviipale täyttynyt 21/11/2018 Liisa Marttinen kevät 2005

Prosessin tilasiirtymäkaavio 1. Initiated READY 2. Prosessi saa CPU:n 5. 3. WAITING RUNNING 4. 6. Prosessin tilasiirtymäkaavio Terminated 21/11/2018 Liisa Marttinen kevät 2005

vuorottaja valitsee seuraavan prosessin suoritukseen jos READY-jonossa on useampia valmiita prosesseja yleensä on valinnassa erilaisia kriteereitä läpimenotiheys (throughput) läpimenoaika (turnaround time) lähinnä eräajosysteemeissä vasteaika (response time) lähinnä moniajojärjestelmän suorakäytössä odotusaika (wait time) 21/11/2018 Liisa Marttinen kevät 2005

suureet eivät ole riippumattomia kaikkia ei voi optimoida samalla kertaa nykyään tavallisimmin optimoidaan odotusaikaa Olet. 6 prosessia READY-jonossa (tai asiakkaita pankissa) P1-P5: suoritusaika 1 min, P6: 55 minuuttia Jos suoritetaan järjestyksessä P1,P2,.., P6, keskim. odotusaika 1/6(0+1+2+3+4+5) = 2.5 min Jos järjestyksessä P6, P1,P2, .., P5 keskim. odotusaika 1/6(0+55+56+57+58+59) = 47.5 min 21/11/2018 Liisa Marttinen kevät 2005

KJ voi vaikuttaa sekä READY- että WAIT-tilassa vietettyyn aikaan I/O-aika tiedon puskuroinnilla kaikkea ei tarvitse hakea esim. levyltä tehokkailla laiteajureilla prosessorin odotus vuorottajan valintapolitiikka 21/11/2018 Liisa Marttinen kevät 2005

Ongelma: mikä prosessi suoritukseen Ratkaisuja: Round Robin FIFO-jono; seuraavana jonossa oleva prosessi kaikki prosessit pääsevät vuorollaan suoritukseen: ei nälkiintymistä prioriteettijono jokaisella prosessilla oma prioriteetti, prosessit jonossa prioriteettinsä mukaan, suoritukseen jonon ensimmäinen = korkeimman prioriteetin omaava prosessi eri prioriteetin prosesseilla omat FIFO-jonot nälkiintymistä 21/11/2018 Liisa Marttinen kevät 2005

Prioriteettien valinta? pienille prosesseille korkea prioriteetti ja suurille pieni => minimoidaan odotusaikaa paljon I/O-toimintaa suorittaville korkea prioriteetti ~ pieni prosessi SJF (Shortest Job First) prioriteetti p(Q) = K/l(Q), missä K = vakio ja l(Q) on prosessin Q seuraavan CPU-vaiheen pituus. SJF minimoi odotusajan 21/11/2018 Liisa Marttinen kevät 2005

SJF minimoi odotusajan Todistus: Olkoon P ja Q READY-jonon kaksi prosessia. P on jonossa ennen Q:ta ja l(P)>l(Q) eli P pitää prosessoria hallussaan pitempään kuin Q. Osoitetaan, että vaihtamalla P:n ja Q:n paikkaa keskimääräinen odotusaika pienenee => SJF minimoi odotusaikaa READY-jono Si,.., Sn, Q, R1, …Rk, P, T1, … Tm 21/11/2018 Liisa Marttinen kevät 2005

Q:n uusi odotusaika on P:n odotusaika prosessien R1,.., Rk odotusaika vähenee määrällä l(P) -l(Q) P:n uusi aika on Q:n vanha aika miinus l(P)-l(Q) Siis kaikkiaan vähennystä (k+1)*(l(P)-l(Q)) MOT 21/11/2018 Liisa Marttinen kevät 2005

Ongelma: ei tunneta pituuksia l(P)! arvioidaan aikaisemman käyttäytymisen perusteella aikaisempien CPU-vaiheiden painotettu summa painokerroin a määrää annetaanko suurempi paino aikaisemmalla tai nykyiselle käyttäytymiselle prioriteetti p(P) = K/ws(P), missä K= vakio ja ws painotettu summa 21/11/2018 Liisa Marttinen kevät 2005

Ongelma: nälkiintyminen juuri CPU:ta käyttäneen prosessin prioriteettia lasketaan => ei estä nälkiintymistä odottavien prioriteettia nostetaan => takaa kaikille aikanaan vuoron yleensä käytetään molempia prioriteetti on dynaaminen suure CPU-käyttö pienentää sitä odotus suurentaa sitä 21/11/2018 Liisa Marttinen kevät 2005

8.4 Prosessien välinen synkronointi ja poissulkeminen Prosessien eteneminen on epädeterminististä Yhteistoiminnassa on tilanteita, joissa etenemisjärjestyksen oltava hallittua yhteiskäyttö edellyttää prosessien synkronointia yksittäiskäyttöiset resurssit vaativat poissulkemista 21/11/2018 Liisa Marttinen kevät 2005

Esimerkki: Paikanvaraus A näkee, että lennon XYZ paikka 76 on vapaa . A varaa paikan B näkee, että lennon XYZ paikka 76 on vapaa . B varaa paikan Tuloksena paikka 76 varataan kahteen kertaan! 21/11/2018 Liisa Marttinen kevät 2005

Esimerkki: ‘tuottaja-kuluttuja’ A kerää tietoja ja lähettää B:lle A kerää tietoja ja B ottaa tiedot A:lta ja laskee niistä jotain tärkeää B ottaa tiedot A:lta ja laskee niistä jotain 21/11/2018 Liisa Marttinen kevät 2005

prosessit eivät voi toimia täysin toisistaan riippumatta lukkiutumistilanne osa resursseista varattuna, odottelee muita resursseja nälkiintyminen jokin prosessi ei koskaan saa tarvitsemiaan resursseja prosessit eivät voi toimia täysin toisistaan riippumatta tarvitaan mekanismi, jolla toinen prosessi voidaan tietyssä kohden pysäyttää tarvittaessa odottamaan jotain tapahtumaa ja jatkamaan tapahtuman jälkeen suoritustaan 21/11/2018 Liisa Marttinen kevät 2005

kaksi ruokailuvälinettä pystyäkseen ruokailemaan Lukkiutuminen: Aterioivat filosofit Kukin syöjä tarvitsee kaksi ruokailuvälinettä pystyäkseen ruokailemaan Lukkiutuminen: kukin nappaa yhden ruokailuvälineen ja jää odottamaan toisen vapautumista Nälkiintyminen: filosofi katselee, kun vierustoverit syövät jatkuvasti 21/11/2018 Liisa Marttinen kevät 2005

Semafori prosessien kommunikointimekanismin keskeisin käsite laskuri alkuarvo usein jaettavien resurssien lukumäärä eli etenemislupien määrä odotusjono alussa tyhjä 21/11/2018 Liisa Marttinen kevät 2005

Varattu 21/11/2018 Liisa Marttinen kevät 2005

Up( ) ja Down( ) käyttöjärjestelmän palveluja Jos laskurin arvo on nolla, prosessi jää odottamaan resurssin vapautumista prosessi ‘nukutetaan’ odottamaan resurssin varaus semaforin laskuria vähennetään Down(semafori) resurssin vapautus semaforin laskuria kasvatetaan Up(semafori) Up( ) ja Down( ) käyttöjärjestelmän palveluja 21/11/2018 Liisa Marttinen kevät 2005

Down(huussisemafori) jos vapaa, varaa ja astu sisään muuten jää jonoon odottamaan UP(huussisemafori) jos jonossa ei ole ketään, niin merkitse vapaaksi, muuten päästä seuraava sisään poistu muihin hommiin 21/11/2018 Liisa Marttinen kevät 2005

Laskuri : alussa 3 nyt 1 21/11/2018 Liisa Marttinen kevät 2005

Down(semafori) jos semaforin laskuri on nolla niin muuten jää odottamaan eli prosessi liitetään semaforin odotusjonoon ja prosessin tilaksi merkitään WAIT muuten varaa resurssi vähentämällä semaforin laskuria yhdellä jatka etenemistä 21/11/2018 Liisa Marttinen kevät 2005

Up(semafori) jos semaforin jono on tyhjä niin muuten vapauta resurssi kasvattamalla semaforin laskuria yhdellä muuten vapauta ensimmäinen semaforin odotusjonosta eli merkitään prosessin tilaksi READY liitetään prosessi vuorottajan READY-jonoon ja jatka etenemistä 21/11/2018 Liisa Marttinen kevät 2005

Esimerkki: Poissulkeminen Kaksi prosessia käsittelee yhteisellä muistialueella olevaa tietorakennetta kuten pinoa. Prosessi VIE vie uuden alkion pinon päälle, prosessi HAE ottaa alkion pinon päältä. top HAE VIE PINO 21/11/2018 Liisa Marttinen kevät 2005

Prosessi VIE Prosessi HAE LOAD R1, X LOAD R1, top STORE R1, @top SUB R1, =1 LOAD R2, top STORE R1, top ADD R2, =1 LOAD R2, @top STORE R2, top STORE R2, Y Keskeytys tässä voi sotkea top-laskurin. VIE voi käyttää ‘vanhaa’ laskurin arvoa. Tietorakenteen top käsittely on suojattava. 21/11/2018 Liisa Marttinen kevät 2005

TOP 101 99 100 102: 101: 100: 99: 98: 97: 96: R1: R2: XXXX 101 100 XXXX ! VIE AAAA BBBB 99 R1: R2: 100 CCCC AAAA DDDD HAE 21/11/2018 Liisa Marttinen kevät 2005

Otetaan käyttöön semafori mutex Miten suojataan? Otetaan käyttöön semafori mutex jonka laskurin alkuarvo on 1 ja alussa jono on tyhjä Kun VIE menee käsittelemään yhteistä aluetta, se varaa resurssin vähentämällä semaforin mutex laskuria yhdellä. Vaikka VIE keskeytyisi, HAE ei pääse käyttämään pinoa laskurin arvo on nolla ja HAE jää odottamaan resurssin vapautumista HAE voi jatkaa vasta kun VIE on vapauttanut resurssin (= kasvattanut semaforin laskuria) 21/11/2018 Liisa Marttinen kevät 2005

Prosessi VIE Prosessi HAE LOAD R1,X down(mutex) down(mutex) LOAD R1, top STORE R1,@top SUB R1, =1 LOAD R2, top STORE R1, top ADD R2, =1 LOAD R2, @top STORE R2, top up(mutex) up(mutex) STORE R2,X 21/11/2018 Liisa Marttinen kevät 2005

Esimerkki synkronoinnista. Prosessi B ei saa edetä pitemmälle kuin L2 ennenkuin prosessi A on päässyt kohtaan L1. Otetaan käyttöön semafori proceed, jolla alkuarvona 0 ja odottavien prosessien jono tyhjä. Prosessi A: Prosessi B: …. ….. lue (puskuriin) L2: down(proceed) L1: up(proceed) ota (puskurista) ….. …. 21/11/2018 Liisa Marttinen kevät 2005

Esimerkki sykronisesta kohtaamisesta. Kumpikaan prosessi ei saa edetä ennenkuin toinen on ehtinyt sopivaan kohtaan. Esimerkki puhelinyhteys. kaksi semaforia proceed-A, proceed-B prosessi A: prosessi B: … …. valitse numero odota puhelua up(proceed-B) down(proceed-B) odota vastaamista vastaa puhelimeen down(proceed-A) up(proceed-A) puhu puhu 21/11/2018 Liisa Marttinen kevät 2005

Prosessi A: Prosessi B: Vielä esimerkki synkronoinnista Prosessi A vie puskuriin dataa ja prosessi B lukee puskurista. A ei saa viedä puskuriin enempää kuin mahtuu (olet. puskuri kiertyy ympäri), eikä B lukea tietoja ennenkuin A on ne sinne. Otetaan käyttöön kaksi semaforia vie ja ota. Semaforin vie alkuarvona on puskurin koko ja semaforin ota alkuarvona 0. Odottavien prosessien jonot ovet tyhjät. Prosessi A: Prosessi B: …. ….. down(vie) down(ota) lue (puskuriin) ota (puskurista) up(ota) up(vie) ….. .…. 21/11/2018 Liisa Marttinen kevät 2005

Up( )- ja Down( )-operaatiot on toteutettu käyttöjärjestelmän ytimessä kaikkien prosessien käytettävissä erityisesti käyttöjärjestelmän prosessien käytettävissä Down( ) voi viedä WAIT-tilaan => suoritettavaa prosessia vaihdettava Up( ) on selkeä tapa herättää odottava prosessi myös keskeytysrutiinit käytävät Up( )-operaatiota 21/11/2018 Liisa Marttinen kevät 2005

Up( ) ja Down( ) jakamattomia operaatioita kaikki semaforioperaatioiden toiminnot yhdellä kertaa ilman, että mikään muu prosessi suorittaa niitä samanaikaisesti yksiprosesorikoneessa keskeytykset kielletty moniprosessorikoneessa pidetään väylä varattuna muita prosessorien välisiä kommunikointitapoja sanomanvälitys monitorit, yksityiset monitorit 21/11/2018 Liisa Marttinen kevät 2005

4.1 Tiedon sijainti ja viittaaminen suoritusaikana Suoritusaikana tiedon on sijaittava joko keskusmuistissa tai rekisterissä levy yms on aivan liian hidas! muisti iso (256 MB -1 GB 32 bitin sanaa), mutta suhteellisen hidas (hakuaika 10 ns) ei oikeastaan kovin hidas, mutta prosessori on niin paljon nopeampi rekisteri nopea (1 ns), mutta pieni (256 32 bitin sanaa) välimuisti (prosessorin sisällä oleva 1.tason välimuisti) lähes yhtä nopea kuin rekisteri (1-2 ns), kooltaan suurempi (8-64 KB) 21/11/2018 Liisa Marttinen kevät 2005

Miten tietoon viitataan ? Tieto on muistissa suoraan muistiosoitteella (0xA49F37, 9832456) symbolista konekieltä käytettäessä symbolilla (Taulu, luku, Y) symbolin arvo on muistiosoite LOAD R1,Taulu osoite voidaan välittää rekisterissä tai ’epäsuorasti’ jossain muistipaikassa ADD R2,@-3(FP), LOAD R3,@osoite suoritusaikana laskettavan osoitteen avulla heksadesimaaliluku 21/11/2018 Liisa Marttinen kevät 2005

Miten tietoon viitataan? (2) Tieto välimuistissa samalla tavalla kuin muistissa olevaan tietoon ei siis suoraa viittausta välimuistiin mutta tieto saattaakin löytyä nopeammin välimuistista viittaushetkellä ei tiedetä, saadaanko tieto välimuistista vai joudutaanko se hakemaan keskusmuistista 21/11/2018 Liisa Marttinen kevät 2005

Miten tietoon viitataan? (3) Tieto on rekisterissä konekielessä rekisterin osoitteen avulla (3 tai 7) symbolisessa konekielessä rekisterin nimen avulla (R2, SP, FP) Tieto on konekäskyssä yleensä konekäskyssä on vain yksi paikka tiedolle 21/11/2018 Liisa Marttinen kevät 2005

Tieto ja sen osoite Muistissa olevaan tietoon liittyy sekä arvo että osoite osoite = muuttujan sijaintipaikka muistissa osoite = 125 ja arvo =10 LOAD R1, =10 STORE R1,125 10 125: 21/11/2018 Liisa Marttinen kevät 2005

Symbolit ja muuttujat Symbolisen konekielen kääntäjä pitää viitteitä ja muuttujia vastaavia tunnuksia symboleina. Symbolin arvoksi tulee sen käskyn sijaintiosoite, jonka viitteenä se on Taas ADD R2,100(R1) muuttujalle varatun muistipaikan osoite Y DC 12 ; Y:lle tilaa yksi muistipaikka ja Y:n arvoksi 12 Taulu DS 100 ; varataan 100 muistipaikkaa symbolit yleensä olemassa vain käännösaikana virheilmoituksia varten voidaan symbolitaulu tallettaa ’ADD’ 2 1 1 100 Taas= 1134: 21/11/2018 Liisa Marttinen kevät 2005

Muuttujien arvot ja osoitteet Ohjelman osoiteavaruus valekäsky DC . 23 olkoon ohjelman koko 23 käskyä X DC 200 LOAD R2, =X LOAD R2, X …. ohjelman konekielliset käskyt X 200 X:lle varataan tilaa ohjelman käskyjen jälkeen LOAD R2, =X => R2 = 23 eli muuttujan X:n osoite = symbolin X arvo LOAD R2, X => R2 = 200 eli muuttujan X arvo

Osoitimuuttujat Samanlaisia muuttujia kuin muutkin muuttujat on osoite ja arvo Arvo on nyt jonkin tiedon osoite muistissa globaalin muuttuja, taulukko, tietue, olio pinosta tai keosta tiedolle dynaamisesti (suoritusaikana) varatun alueen osoite Javan ’new’-operaatio palauttaa muistialueen osoitteen (tai virhekoodin, jos varaus ei onnisti) käskyn aliohjelman tai metodin osoite osoite ohjelmakoodiin dataosoite dataosoite koodiosoite 21/11/2018 Liisa Marttinen kevät 2005

Osoitinmuuttujat Ohjelman muistiavaruus Oletus: ohjelman koko on 123 konekäskyä! … 123 124 125 126 127 128 129 130 Xptr DC 0 tbl DS 4 X DC 200 LOAD R1, =X STORE R1, Xptr LOAD R2, X LOAD R3, @Xptr 128 200 1000 4500 Muuttujan X osoite on 128. Muuttujan X arvo on 200. Osoitinmuuttujan Xptr osoite on 123. Osoitinmuuttujan Xptr arvo on 128 (eli toisen muuttujan, nyt X:n, osoite). LOAD R2, X ; R2<- 200 LOAD R3, @Xptr ; R3 <-200

Yhden ohjelman muistitilan käyttö TTK91:ssä ohjelmakoodi globaalit muuttujat ja tietorakenteet BASE LIMIT ohjelman P muistitila pino aliohjelmien toteuttamista varten sekä tilat paikallisille muuttujille SP vapaa alue HP Keko dynaamisesti varattavia muistialueita varten (esim. Java ’new’). TTK 91:ssä ei ole toteutettu kekoa! Keskusmuisti

Globaali data TTK-91:ssä Globaaleille muuttujille ja muille globaaleille tieto-rakenteille varataan tilaa heti ohjelman käskyjen jälkeen muuttujat tilan varaus viittaaminen int K=1; int Tau[8] ; short X; boolean B; char C char mjono[] =’TTK-91’ K DC 1 ; alkuarvo 1 Tau DS 8 ; 8 sanaa B DC 0 ; 1=true, 0 = false Alku LOAD R1, K STORE R2, TAU(R1) 21/11/2018 Liisa Marttinen kevät 2005

Ohjelman osoiteavaruuden käyttö aliohjelmaa Alioh1 suoritettaessa: Paaohj ...... Alioh1 ...... Alioh2 ... ....... Aliohn... Apu, Bee, K X,Y, P1,P2 Isotaulu Pääohjelman ja aliohjelmien koodit globaalit, kaikkialle näkyvät muuttujat Bee ja K sekä taulukko Apu Aliohjelman omat paikalliset muuttujat X ja Y sekä parametrit P1 ja P2 vapaa muistitila Aliohjelman suoritusaikana varaama suuri taulukko Isotaulu[0:9999]. Käytössä myös aliohjelman suorituksen jälkeen, kunnes erikseen vapautetaan (’free’). (Ei ole toteutettu TTK-91:een!) SP HP 214 316 516 20999 21999

Datan tilavaraukset muistista Globaalille datalle varataan ohjelman latauksen yhteydessä kaikkialla viitattavissa nimen (osoitteen) avulla Dynaamiselle datalle varataan keosta suorituksen aikana vapautetaan kun ei enää tarviat viittaus varauksen jälkeen osoitteen avulla Aliohjelmien paikalliselle datalle varataan pinosta kutsuhetkellä vapautetaan aliohjelmasta poistuttaessa viittaus aliohjelman sisällä suhteellisen osoitteen avulla int I; function Check(); Struct n = new Struct(); parametrit, paikalliset muuttujat 21/11/2018 Liisa Marttinen kevät 2005

Tiedon sijainti suoritusaikana Rekisterissä (nopein) kääntäjä päättää milloin ja minkä muuttujien arvot pidetään rekisterissä konekäskyssä oleva tieto on myös (käsky) rekisterissä Välimuistissa (nopea) laitteisto hoitaa automaattisesti jollekin muistialueelle käyttäjä ei tiedä, milloin on muistissa, milloin välimuistissa (muistista haku on paljon hitaampaa!) 21/11/2018 Liisa Marttinen kevät 2005

Tiedon sijainti suoritusaikana (jatkuu) Muistissa (hidas) kääntäjä valitsee sijaintipaikan globaali data datasegmenttiin, joka varataan ja alustetaan ohjelman latauksen yhteydessä pienet vakiot voidaan sijoittaa konekäskyjen vakio-osaan koodisegmentissä ohjelma sijoittaa suoritusaikana aliohjelmien paikalliset muuttujat, parametrit ohjelmointikielen tai käyttöjärjestelmän palveluohjelma sijoittaa suoritusaikana dynaaminen data keossa Levy, levypalvelin (liian hidas ohjelman suoritukseen) vaatii käyttöjärjestelmän varausohjelmien apua 21/11/2018 Liisa Marttinen kevät 2005

4.2. Ohjelmoinnin peruskäsitteiden toteutus konekielellä Aritmeettinen lause miten toteutetaan laskutoimitukset Yksinkertaiset tietorakenteet yksiulotteiset taulukot, tietueet Ohjelman kontrolli – mikä käsky seuraavaksi valinta: if – then – else, case toisto: for-silmukka, while-silmukka aliohjelmat, virhetilanteet Monimutkaiset tietorakenteet listat, moniulotteiset taulukot pinot, keot 21/11/2018 Liisa Marttinen kevät 2005

LOAD R1, 100 R1 <- MEM[100] ADD R1, 101 R1 <- R1 + MEM[101] Lasketaan muistipaikkojen 100 ja 101 sisältö yhteen, jaetaan summa muistipaikan 102 sisällöllä ja viedään tulos muistipaikkaan 100. LOAD R1, 100 R1 <- MEM[100] ADD R1, 101 R1 <- R1 + MEM[101] DIV R1, 102 R1<- R1/MEM[102] STORE R1, 100 MEM[100] <- R1 21/11/2018 Liisa Marttinen kevät 2005

Aritmeettinen lause tilan varaus koodi: LOAD R1, =46 tai LOAD R1, =5 A DC 0 B DC 0 C DC 5 int a, b, c=5; ... b=46; .... a=5*b + c; .... koodi: LOAD R1, =46 STORE R1, B ... LOAD R1, B MUL R1, =5 LOAD R2, C ADD R1, R2 STORE R1 tai LOAD R1, =5 MUL R1, B ADD R1, C STORE R1, A

Globaalin taulukon tilan varaus ja käyttö I DC 0 X DC 0 Table DS 20 …. LOAD R1, =10 STORE R1, I LOAD R1, I LOAD R2, Table(R1) STORE R2, X int i, X; int Table[20]; ... i=10; X =Table[i]; I X Table Optimoiva kääntäjä osaisi jättää pois tämän ”LOAD R1, X” –käskyn!

Kontrolli - valinta konekielellä Ehdoton hyppy JUMP, CALL ja EXIT, SVC ja IRET Hyppy laiterekisterin arvon perusteella (verrattuna nollaan) JZER, JPOS, ... Hyppy tilarekisterin arvon perusteella COMP JEQU, JGRE, … Ongelma vai etu: ttk-91:ssä kaikki ALU käskyt asettavat tilarekisterin ADD, SUB, MUL, DIV, NOT, AND, OR, XOR, SHL, SHR COMP R2, RAJA JEQU POIS 21/11/2018 Liisa Marttinen kevät 2005

If-then-else -valinta ? ? LOAD R1, A COMP R1, B JNLE Else LOAD R1, =5 STORE R1, X JUMP Done Else LOAD R1, Y Done NOP if (a<b) x = 5; else x = y;

Kirjoita konekielinen ohjelma, joka lukee näppäimistöltä luvun muuttujaan a ja tallettaa muistipaikkaan b luvun 1, jos luettu luku on suurempi kuin 5. Muuten b:n arvoksi tulee 2. a DS 0 varataan tilat muistipaikoille b DS 0 …. IN R1, =KBD STORE R1, a if COMP R1, =5 if ( a == 5 ) JNGRE else a!=5, niin else-haaraan LOAD R2, =1 b=1 STORE R2, b JUMP ohi else LOAD R2, =2 b=2 STORE R2, b ohi …..

Case-lause LOAD R1, Lkm Vrt4 COMP R1,=4 JNEQ Vrt0 LOAD R2, =11 STORE R2, X JUMP Cont Vrt0 COMP R1, =0 JNEQ Def JUMP Cont Def LOAD R2,=0 Cont NOP Case-lause Switch (lkm) { case 4: x = 11; break; case 0: break; default: x = 0; } Onko järjestyksellä väliä? 21/11/2018 Liisa Marttinen kevät 2005

Toistolauseet For-step-until -silmukka Do-until -silmukka Do-while -silmukka While-do –silmukka …. 21/11/2018 Liisa Marttinen kevät 2005

Esim. alkuehtoinen toisto lue a; while (a >0) {a = a-1;} Millä a:n arvoilla vähennys tehdään? Esim. alkuehtoinen toisto lue a; while (a >0) {a = a-1;} Esim. loppuehtoinen toisto do {a= a-1;} until (a < 0) ? ehto silmukan alussa ehto silmukan lopussa ? 21/11/2018 Liisa Marttinen kevät 2005

Alkuehtoinen toisto konekielellä IN R1, =KBD while COMP R1, =0 JNGRE R1, endwhile SUB R1, =1 OUT R1, =CRT JUMP while endwhile …. Mitä ohjelma tulostaa, kun sille syötetään luku 10?

Loppuehtoinen toisto konekielellä IN R1, =KBD do SUB R1, =1 OUT R1, =CRT JPOS R1, do SVC SP, =HALT Mitä ohjelma tulostaa, kun sille syötetään luku 10?

For-lause I DC 0 … LOAD R1, =20 STORE R1, I Loop LOAD R2, =0 LOAD R1, I STORE R2, T(R1) LOAD R1, I ADD R1, =1 LOAD R3, I COMP R3, =50 JLES Loop For-lause for (int i=20; i < 50; ++i) T[i] = 0; Voiko koodia optimoida? 21/11/2018 Liisa Marttinen kevät 2005

Loop STORE R1, 0(R2) MEM[R2] <-0 ADD R2, =1 seurava paikka Nollataan peräkkäiset muistipaikat. Ensimmäisen muistipaikan osoite on R2:ssa ja viimeisen R3:ssa LOAD R1, =0 R<- 0 Loop STORE R1, 0(R2) MEM[R2] <-0 ADD R2, =1 seurava paikka COMP R2, R3 joko mentiin yli? JNGRE Loop jos ei, niin jatketaan 21/11/2018 Liisa Marttinen kevät 2005

While-do -lause LOAD R1, =12345 STORE R1, X X = 12345; LOAD R3, =1 ; R3=Xlog LOAD R2, =10 ; R2=Y While COMP R2, R1 JNLES Done ADD R3, =1 MUL R2, =10 JUMP While Done STORE R3, Xlog ; talleta tulos STORE R2, Y X = 12345; Xlog = 1; Y = 10; while (Y < X) { Xlog++; Y = 10*Y } 21/11/2018 Liisa Marttinen kevät 2005

Summan laskeminen: Lasketaan muistipaikoissa 100-200 olevien lukujen summa rekisteriin R1. LOAD R2, =100 LOAD R1, =0 Summaa ADD R1, 0(R2) MEM[0+R2] ADD R2, =1 COMP R2, =201 JLES Summaa SVC SP, =HALT 24/05/2005

LOAD R2, =100 indeksirekisteri Lasketaan muistipaikoissa 100-200 olevien lukujen summa rekisteriin R1 lähtien lopusta. LOAD R2, =100 indeksirekisteri LOAD R1, =0 lukujen summa Alku JNEG R2, Loppu kaikki laskettu? ADD R1, 100(R2) summataan SUB R2, =1 seuraava muistipaikka JUMP Alku laskemaan lisää Loppu SVC SP, =HALT lopetetaan 24/05/2005

. LOAD R2, =100 indeksirekisteri Lasketaan muistipaikoissa 100-200 olevien lukujen summa rekisteriin R1 lähtien lopusta . LOAD R2, =100 indeksirekisteri LOAD R1, =0 lukujen summa Alku ADD R1, 100(R2) summataan SUB R2, =1 seuraava muistipaikka JNNEG R2, Alku laskemaan lisää SVC SP, =HALT lopetetaan

Koodin generointi Kääntäjän viimeinen työvaihe Koodin optimointi voi olla jopa puolet kääntäjän työstä tuottaa alustukset, konekieliset lauseet, kontrollirakenteet Koodin optimointi käännös paljon hitaampaa suoritus paljon nopeampaa milloin muuttujan arvo rekisterissä, milloin muistissa ja jos rekisterissä, niin missä rekisterissä? 21/11/2018 Liisa Marttinen kevät 2005

Optimointia: for-silmukka for (int i=20; i < 50; ++i) T[i] = 0; Optimointia: for-silmukka I DC 0 … LOAD R1, =20 STORE R1, I Loop LOAD R2, =0 LOAD R1, I STORE R2, T(R1) ADD R1, =1 LOAD R3, I COMP R3, =50 JLES Loop I DC 0 … LOAD R1, =20 LOAD R2, =0 Loop STORE R2, T(R1) ADD R1, =1 COMP R1, =50 JLES Loop 21/11/2018 Liisa Marttinen kevät 2005

Monimutkaisemman summan laskeminen Lasketaan lukujen 1, …, 20 neliöiden summa eli Si=120 i2 Javalla tämä käy seuraavasti: s=0; for (i = 1; i < 21; i++) s= s + i*i;

Konekielellä kääntäjän tyyliin: s DC 0 i DC 1 Taas LOAD R1, i ;luvut väliltä [1, 20] MUL R1, R1 ;luvun neliö ADD R1, s ;lisätään summaa STORE R1, s ;summa talteen LOAD R1, i ;luvun ADD R1, =1 ; kasvatus yhdellä STORE R1, i ;luku talteen COMP R1, =21 ;joko luku 21? JLES Taas ; jos ei vielä SVC SP, =HALT

Konekielellä (fiksun) opiskelijan tyyliin: käytetään rekistereitä LOAD R1, =20 ;luku i LOAD R2, =0 ;summalaskuri s Taas LOAD R3, R1 ;lasketaan luvun i MUL R3, R3 ;neliö i2 ADD R2, R3 ;lisätään se summaan SUB R1, =1 ; i =i-1 JPOS R1, Taas ;i > 0 ? SVC SP, =HALt

Virhetilanteisiin varautuminen Prosessori tarkistaa käskyn suoritusaikana automaattisesti nollalla jaon (divide by xero) luvun ylivuodon (interger overflow) Muita tarkistuksia varten on generoitava konekielisiä käskyjä, jotka virhetilanteen havaitessaan aiheuttavat keskeytyksen tai käyttöjärjestelmän palvelupyynnön liian suuri tai liian pieni taulukon indeksi virheellinen metodi tai virheellinen operandi tai mitä tahansa haluaakin testata 21/11/2018 Liisa Marttinen kevät 2005

Taulukon indeksitarkistus Tkoko EQU 100 Taulu DS Tkoko COMP R1, Tkoko ; indeksin tarkistus JLES Goodind ; indeksi kunnossa SVC SP, =Badind ;KJ hoitaa virhetilanteen Goodind LOAD R2, Taulu(R1) ; nyt voidaan lukea 21/11/2018 Liisa Marttinen kevät 2005

Taulukon indeksitarkistus I DC 0 … LOAD R1, =20 STORE R1, I Loop LOAD R2, =0 LOAD R1, I JNNEG R1, ok1 SVC SP, =Badind ok1 COMP R1, Tkoko JLES ok2 SVC SP, = Badind ok2 STORE R2, T(R1) ADD R1, =1 LOAD R3, I COMP R3, =50 JLES Loop for (int i=20; i < 50; ++i) T[i] = 0; Optimoiva kääntäjä osaa yhdistää silmukan ehdon ja indeksitarkistuksen!

Entä, jos taulukon indeksi ei alakaan nollasta? for (int i=20; i < 50; ++i) T[i] = 0; T[20] T[21] T[22] T[49] T[48] …. T: T+1: T+2: T+28: T+29: I DC 0 T DS 30 ylaR DC 50 ; yläraja+1 alaR DC 20; alaraja Miten nyt hoidetaan indeksitarkistukset? 21/11/2018 Liisa Marttinen kevät 2005

Taulukonosan nollaus eli kun indeksi ei ala nollasta. … LOAD R1, =20 STORE R1, I Loop LOAD R2, =0 LOAD R1, I SUB R1, alaR STORE R2, T(R1) ADD R1, =1 LOAD R3, I COMP R3, =50 JLES Loop for (int i=20; i < 50; ++i) T[i] = 0; I DC 0 T DS 20 ylaR DC 50 ; yläraja+1 alaR DC 20; alaraja 21/11/2018 Liisa Marttinen kevät 2005

Moniulotteiset taulukot Ohjelmakielessä määritellyt moniulotteiset taulukot toteutetaan konekielitasolla useimmissa arkkitehtuureissa aina yksiulotteisina koska käytössä on yleensä vain yksi indeksirekisteri Moniosainen toteutus laske alkion osoite yksiulotteisessa taulukossa ja käytä indeksoitua tiedon osoitusmoodia TAI laske alkion osoite muistissa ja käytä epäsuoraa tiedonosoitusmoodi 21/11/2018 Liisa Marttinen kevät 2005

2-ulotteiset taulukot int[][] T = new int[4][3] Y =T[i][j] T[0][0] fyysinen rakenne T[0][0] T[0][1] T[0][2] T[1][0] T[1][1] …… T[3][2] Looginen rakenne 0,0 0,1 0,2 1,0 1,1, 1,2 2,0 2,1 2,2 3,0 3,1 3,2 21/11/2018 Liisa Marttinen kevät 2005

2-ulotteisen taulukon tarkistukset T DS 12 Trows DS 4 Tcols DS 3 LOAD R1, I MUL R1, Tcols ADD R1, J STORE R2, Y Esimerkki:I=1, J=2 21/11/2018 Liisa Marttinen kevät 2005

Moniulotteiset taulukot Talletus riveittäin C, Pascal, Java? Talletus sarakkeittain Fortran 3- tai useampi ulotteiset samoin kuin 2-ulotteiset 21/11/2018 Liisa Marttinen kevät 2005

Linkitetty lista DATA 1 DATA 2 DATA 3 L P Lista on tietorakenne, johon voidaan tallettaa tietoa. Koostuu solmuista, joissa tietoa ja viite seuraavaan solmuun. Viite solmuun on solmun ensimmäisen muistipaikan osoite

Lista muistiin talletettuna 100: 625: 727: 510: 510 data1 625 data2 727 data3 -1 P = 100 …. 510 511 625 626 727 728 510 data 1 625 data 2 727 data 3 -1

Listan alkioiden summan laskeminen Käytetään epäsuoraa osoitusta summa DC 0 Sum LOAD R1, 100 ;listan alku JNEG R1, Loppu ;tyhjä lista? LOAD R2, =0 ;summalaskurin nollaus Loop ADD R2, @R1 ;data ADD R1, =1 ;seuraava muistipaikka LOAD R1, @R1 ; seuraavan osoite JNNEG R1, Loop Loppu STORE R2, summa ; summa talteen SVC SP, =HALT

LOAD R1, 100 ADD R2, @R1 ADD R1, =1 R1<= MEM[100] = 510 R2= 0 100: 510 R1<= MEM[100] = 510 R2= 0 ADD R2, @R1 R2<= R2 + MEM[R1] = 0 + MEM[510] = 0 + 10 = 10 510: 511: 10 625 ADD R1, =1 R1 <= R1 +1 = 511

LOAD R1, @R1 Loop ADD R2, @R1 R1 = 511 R1 <= MEM[511] = 625 10 625 = 625 510: 511: 10 625 R2<= R2 + MEM[R1] = 10 + MEM[625] = 10 + 20 =30 Loop ADD R2, @R1 625: 626 20 727

ADD R1, =1 LOAD R1, @R1 Loop ADD R2, @R1 R1 = 625 R1 <= R1+1 = 626 = 626 625: 626: 20 727 R1<= MEM[R1] = MEM[626] = 727 LOAD R1, @R1 Loop ADD R2, @R1 R2 <= R2 + MEM[R1] = 30 + MEM[727] = 30 +30 = 60 727: 728: 30 -1

ADD R1, =1 LOAD R1, @R1 R1 = 727 R1 <= R1+1 = 728 30 -1 = 728 727: 30 -1 R1<= MEM[R1] = MEM[728] = -1 LOAD R1, @R1 JNNEG R1 Loop Loppu STORE R2, summa SVC SP, =HALT Summa: 60

Monimutkaiset tietorakenteet 2-ulotteinen taulukko Opisk, jonka jokainen alkio on tietue, jossa on kentät opiskelijan nimi opiskelijatunnus kurssin 6 harjoituskerralla tehdyt tehtävät kurssin 3 kokeesta saadut pistemäärät kurssin lopullinen arvosana kurssin suorituspäivä Miten tämä pitäisi tallettaa? Miten tietoihin viitataan? Mitä tarkistuksia pitäisi tehdä? 21/11/2018 Liisa Marttinen kevät 2005