Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

8. Ohjelman toteutus järjestelmässä

Samankaltaiset esitykset


Esitys aiheesta: "8. Ohjelman toteutus järjestelmässä"— Esityksen transkriptio:

1 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

2 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

3 Käyttöjärjestelmä tarjoaa kullekin käyttäjälle
Käyttäjä Käyttäjä 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

4 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

5 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

6 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

7 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

8 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ö

9 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

10 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

11 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

12 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

13 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

14 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

15 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

16 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

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

18 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

19 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

20 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

21 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

22 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

23 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

24 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

25 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

26 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

27 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

28 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

29 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

30 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

31 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

32 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

33 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

34 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

35 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

36 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

37 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

38 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

39 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

40 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

41 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

42 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

43 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( ) = 2.5 min Jos järjestyksessä P6, P1,P2, .., P5 keskim. odotusaika 1/6( ) = 47.5 min 21/11/2018 Liisa Marttinen kevät 2005

44 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

45 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

46 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

47 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

48 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

49 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

50 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

51 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

52 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

53 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

54 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

55 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

56 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

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

58 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

59 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

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

61 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

62 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

63 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

64 Prosessi VIE Prosessi HAE LOAD R1, X LOAD R1, top
STORE SUB R1, =1 LOAD R2, top STORE R1, top ADD R2, = LOAD 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

65 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

66 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

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

68 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

69 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

70 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

71 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

72 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

73 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 ( 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

74 Miten tietoon viitataan ?
Tieto on muistissa suoraan muistiosoitteella (0xA49F37, ) 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 LOAD suoritusaikana laskettavan osoitteen avulla heksadesimaaliluku 21/11/2018 Liisa Marttinen kevät 2005

75 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

76 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

77 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

78 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’ Taas= 1134: 21/11/2018 Liisa Marttinen kevät 2005

79 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 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

80 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

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

82 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

83 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 ; alkuarvo 1 Tau DS ; 8 sanaa B DC ; 1=true, 0 = false Alku LOAD R1, K STORE R2, TAU(R1) 21/11/2018 Liisa Marttinen kevät 2005

84 Ohjelman osoiteavaruuden käyttö aliohjelmaa Alioh1 suoritettaessa:
Paaohj Alioh 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

85 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

86 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

87 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

88 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

89 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, R1 <- MEM[100] ADD R1, R1 <- R1 + MEM[101] DIV R1, R1<- R1/MEM[102] STORE R1, MEM[100] <- R1 21/11/2018 Liisa Marttinen kevät 2005

90 Aritmeettinen lause tilan varaus koodi: LOAD R1, =46 tai LOAD R1, =5
A DC B DC C DC 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

91 Globaalin taulukon tilan varaus ja käyttö
I DC X DC Table DS …. 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!

92 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

93 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;

94 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 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 …..

95 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

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

97 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

98 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?

99 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?

100 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

101 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, = R<- 0 Loop STORE R1, 0(R2) MEM[R2] <-0 ADD R2, = seurava paikka COMP R2, R joko mentiin yli? JNGRE Loop jos ei, niin jatketaan 21/11/2018 Liisa Marttinen kevät 2005

102 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

103 Summan laskeminen: Lasketaan muistipaikoissa 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

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

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

106 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

107 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

108 Monimutkaisemman summan laskeminen
Lasketaan lukujen 1, …, 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;

109 Konekielellä kääntäjän tyyliin:
s DC i DC 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

110 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, = ; i =i-1 JPOS R1, Taas ;i > 0 ? SVC SP, =HALt

111 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

112 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

113 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!

114 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

115 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

116 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

117 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, ,1 0,2 1, ,1, 1,2 2, , ,2 3, , ,2 21/11/2018 Liisa Marttinen kevät 2005

118 2-ulotteisen taulukon tarkistukset
T DS Trows DS Tcols DS 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

119 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

120 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

121 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

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

123 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<= R2 + MEM[R1] = MEM[510] = = 10 510: : 10 625 ADD R1, =1 R1 <= R1 +1 = 511

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

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

126 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 JNNEG R1 Loop Loppu STORE R2, summa SVC SP, =HALT Summa: 60

127 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


Lataa ppt "8. Ohjelman toteutus järjestelmässä"

Samankaltaiset esitykset


Iklan oleh Google