Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

11. Käännös, linkitys ja lataus

Samankaltaiset esitykset


Esitys aiheesta: "11. Käännös, linkitys ja lataus"— Esityksen transkriptio:

1 11. Käännös, linkitys ja lataus
isojen sovellusten laatiminen itsenäisiä käännösmoduuleja esim. aliohjelma tai luokka käännetään erillään eri kielillä ohjelmoituja ja konekielelle käännettyjä moduuleja voidaan yhdistää sama kutsumekanismi sama parametrien välitystapa konekielisten moduulien ‘viritys’ kriittisten osien suoritus mahdollisimman nopeaksi 28/12/2018 Liisa Marttinen kevät 2005

2 Moduuli 1 Moduuli 2 Moduuli 3
Käännös Käännös Käännös Objektimoduuli Objektimoduuli Objektimoduuli Linkitys Kirjastomoduuli Ajomoduuli

3 Moduulien väliset viittaukset
täsmälliset spesifikaatiot yhteisten tietorakenteiden käsittelylle aliohjelmien kutsuille parametrien välitykselle moduulin esittelyosassa kuvataan moduulissa määritellyt tunnukset, joihin muista moduuleista saa viitata (EXPORT) muissa moduuleissa määritellyt tunnukset, joita moduulissa käytetään (IMPORT) moduulin omat paikalliset tunnukset, joihin ei voi viitata muista moduuleista luokan private osat

4 11.1 Käännös Kääntäjä muuttaa konekieltä korkeamman tason ohjelmointikielellä esitetyn moduulin konekielelle lauseet ja lausekkeet kuvataan konekielisin operaatioin lähdekielisiä tunnuksia vastaa suhteellinen osoite viittaukset muiden moduulien tunnuksiin jäävät selvittämättä. Näistä kootaan tietoa linkittäjää varten 28/12/2018 Liisa Marttinen kevät 2005

5 Käännös tehdään kahdessa vaiheessa
eteenpäin viittaavat hyppykäskyt data-alueen alkuosoite tiedossa vasta kun tiedetään ohjelman pituus 1. vaihe tarkista lähdekielisen ohjelman syntaksi ja anna tarvittavat virheilmoitukset muodosta välikoodia, jossa viittaukset eteenpäin selvittämättä laadi symbolitaulu ohjelman tunnukset ja niiden osoitteet ohjelman alun suhteen tiedot eteenpäin hypyistä ja dataviittauksista linkittäjää varten

6 2. vaihe muodosta symbolitaulun avulla koodi, jossa moduulin sisäiset osoitteet jo kunnossa, mutta ulkoiset osoitteet vielä selvittämättä kokoa tulosmoduuliin linkittäjälle tietoa paikallisiin osoitteisiin viittaavista käskyistä ulkoisista viittauksista (IMPORT) ulosnäkyvistä tunnuksista (EXPORT) optimoi syntyvää koodia tuottaa mahdollisesti assembler-listauksen

7 Symbolitaulu yksi alkio kutakin symbolista tunnusta varten
tunnus viedään tauluun, kun se esiintyy ensimmäisen kerran osoiteosassa viitteenä käskyn edessä jos viitteenä käskyn edessä => sen arvo (ko. käskyn sijaintipaikan osoite) viedään symbolitauluun symbolitaulussa myös tunnuksen tyyppi kesken olevien käskyjen osoitteet hyppykäskyt, dataan viittaavat käskyt 28/12/2018 Liisa Marttinen kevät 2005

8 Symbolitaulu Symboli Tyyppi Arvo Uudelleensijoitustietoa
A data ? Käskyissä 1,9, 19 B data ? Käskyissä 6, 8,11, 20 CRT vakio Esm viite F vakio HALT vakio …... Symbolitaulu 28/12/2018 Liisa Marttinen kevät 2005

9 Esimerkki symbolitaulun käytöstä
s DC i DC 0: Taas LOAD R1, i 1: MUL R1,R1 2: ADD R1, s 3: STORE R1, s 4: LOAD R1, i 5: ADD R1, =1 6: STORE R1, i 7: COMP R1, =21 8: JLES Taas 9: SVC SP, =HALT

10 2, 3 s i data ? 0, 4, 6 Taas viite 0 8: JLES 0 0 0 0
Symboli tyyppi arvo uudelleensijoitustietoa 2, 3 s i data ? 0, 4, 6 Taas viite HALT vakio OPER Rj M Ri ADDR 2: ADD ? …. 8: JLES JLES 28/12/2018 Liisa Marttinen kevät 2005

11 Esimerkki symbolitaulun käytöstä
s DC i DC 0: Taas LOAD R1, i 1: MUL R1,R1 2: ADD R1, s 3: STORE R1, s 4: LOAD R1, i 5: ADD R1, =1 6: STORE R1, i 7: COMP R1, =21 8: JLES Taas 9: SVC SP, =HALT 10: ;siis s = 10 11: ; i = 11

12 (2, 3) s i data 10 11 (0, 4, 6) Taas viite 0 8: JLES 0 0 0 0
Symboli tyyppi arvo uudelleensijoitustietoa (2, 3) s i data 10 11 (0, 4, 6) Taas viite HALT vakio OPER Rj M Ri ADDR 2: ADD …. 8: JLES JLES 28/12/2018 Liisa Marttinen kevät 2005

13 Koodin generoinnista (Käsitelty ohjelmoinnin kannalta jo luvussa 4)
Laitteiston arkkitehtuuri ja käskykanta vaikuttavat paljon tuotettuun koodiin Vakiintuneet tyypit ja kontrollirakenteet käännetään tiettyjen periaatteiden mukaan Totuusarvot TRUE, FALSE riittää yksi bitti, mutta usein käytössä koko sana Yleensä FALSE on 0 ja TRUE 1 28/12/2018 Liisa Marttinen kevät 2005

14 Taulukot Varataan yhtenäinen muistialue, jonka alkuosoite tunnetaan
Alueen koko riippuu taulukon alkioiden koosta ja lukumäärästä Moniulotteinen taulukko talletetaan rivijärjestyksessä (tai harvemmin sarakejärjestyksessä) peräkkäisiin muistipaikkoihin 28/12/2018 Liisa Marttinen kevät 2005

15 Esim Java taulukko int[][] Taulu = new int[3][2]
1000: 1001: 1002: 1003: 1004: 1005: 1006: Taulu [0][0] Taulu [0][1] Taulu [1][0] Taulu [1][1] Taulu [2][0] Taulu [2][1] Alkion osoite lasketaan taulukon alkuosoitteen, alkion koon ja alkion indeksin avulla Kääntäjä huolehtii indeksien oikeellisuuden tarkistuksesta Konekielellä ohjelmoitaessa ohjelmoija itse

16 Vaihtelevan mittainen merkkijono
kaksi perustapaa ensimmäisen tavun arvona on merkkijonon todellinen pituus, sitä seuraavat merkkijonon merkit merkkijonon lopussa on lopetusmerkki NULL-merkki varataan tilaa ilmoitetun maksimipituuden verran pituus merkit … … … ….. …… . merkit … ……. …… …….. ……… NULL 28/12/2018 Liisa Marttinen kevät 2005

17 Tietueet (record, struct)
Tietua koostuu kentistä, jotka voivat olla mitä tyyppiä tahansa toteutetaan kuten taulukko varataan yhtenäinen muistialue talletetaan alueelle kentät peräkkäin kentän tyyppi määrää kentän koon 28/12/2018 Liisa Marttinen kevät 2005

18 Joukot Pienet joukot voidaan toteuttaa bittivektoreilla Perusidea:
yksi bitti on konekielen koko sana tai yksi bitti Perusidea: jos mahdollisia joukon alkioita n kpl esim. a1, a2, a3, … , an varataan muistista n+1 peräkkäistä sanaa siis m0, m1, m2, m3, …, mn m0 m1 m2 m3 m4 m5 m6 m7 m8 m9 m10 { a a a6 a a10 } Esimerkissä n =10

19 Viittaukset eli osoittimet
konekielitasolla viittaus on hyvin yksinkertainen muistipaikka 100 viittaa muistipaikkaan 200 100: 200 muistipaikka 100 viittaa taulukkoon, joka sijaitsee mp 200: 150: 150 28/12/2018 Liisa Marttinen kevät 2005

20 Java-kielinen listaesimerkki
Dynaamiset rakenteet Java-kielinen listaesimerkki class Lista { int tieto; Lista linkki; } Lista p = new Lista(); p.tieto = 7; p.linkki = new Lista() p.linkki.tieto = 3; p.linkki = new Lista(); p.linkki.tieto = 19; 28/12/2018 Liisa Marttinen kevät 2005

21 new-metodilla luodut ilmentymät
Kääntäjät tekevät tällaiset ajoaikaiset varaukset keosta (heap). koodi staattiset varaukset pino keko 28/12/2018 Liisa Marttinen kevät 2005

22 Kontrollilauseiden kääntäminen
Ehdoton haarautuminen ns. goto-lause Javassa break ja continue toteutetaan JUMP-käskyllä Ehdollinen haarautuminen if (a==5) b=1: if (a==5) b=1; else b =2; valintalause switch 28/12/2018 Liisa Marttinen kevät 2005

23 Konekielellä (vaikka nyt symbolisesti esitettynä):
a DS varataan tilat muistipaikoille b DS 1 …. if LOAD R1, a COMP R1, =5 if ( a == 5 ) JNEQU else a!=5, niin else-haaraan LOAD R2, =1 STORE R2, b b=1 JUMP * PC = PC +3 else LOAD R2, =2 STORE R2, b b=2

24 Toistolause Esim. a=2; while (a >0) {a = a-1;} while do for
28/12/2018 Liisa Marttinen kevät 2005

25 Konekielellä a DS 1 …… LOAD R1, =2 STORE R1, a
while JNPOS R1, endwhile LOAD R1, a SUB R1, =1 STORE R1, a JUMP while endwhile ….

26 Rekursiiviset aliohjelmat
lausekielen aliohjelmat käännetään konekielen aliohjelmiksi parametrit välitetään pinossa pinosta tilat aliohjelman paikallisille muuttujille Rekursiiviset aliohjelmat rekursio on voimakas ratkaisumenetelmä useimmissa kielissä rekursio toteutetaan rekursiivisten aliohjelmien avulla käännetään konekielelle samalla tavoin kuin muutkin aliohjelmat 28/12/2018 Liisa Marttinen kevät 2005

27 LUOKKA Nykyisissä oliokielissä luokan käsite on keskeinen
luokka koostuu erilaisista tyypeistä muuttujista metodeista (aliohjelmista) luokan ilmentymälle varataan tilaa keskusmuistista (esim. seuraavasti): ensin muuttujille peräkkäiset muistipaikat sitten osoittimet aliohjelmiin (niiden 1. käskyn osoitteet) aliohjelmat voidaan sijoittaa muun koodin yhteyteen 28/12/2018 Liisa Marttinen kevät 2005

28 käytännössä tilanne on monimutkaisempi:
keko on monipuolisemmassa käytössä metodien toteutus vaatii apurakenteita (virtuaalimetodit) Javassa käännös ensin ns. tavukielelle, josta generoidaan konekieltä tavukieli määrää syntyvän konekielen Java-ohjelman koodista vaikea päätellä millaista konekieltä syntyy 28/12/2018 Liisa Marttinen kevät 2005

29 Koodin optimointi Optimoimaton kääntäjä tuottaa varsin tehotonta koodia: A = A+1; if (A>0) A= 2*A; A DS 1 LOAD R1, A ADD R1, =1 STORE R1, A LOAD R1, A JNPOS R1, * * ‘tämä paikka tässä’ MUL R1, =2 STORE R1, A 28/12/2018 Liisa Marttinen kevät 2005

30 Tehokkaampaa on pitää arvoja rekistereissä mahdollisimman kauan
A DS 1 LOAD R1, A ADD R1, =1 JPOS R1, * * ‘tämä paikka tässä’ MUL R1, =2 STORE R1, A Joissakin tilanteissa tästä aiheutuu ongelmia: Jos usealla prosessilla oma kopionsa globaaleista muuttujista, eri prosessien versiot samasta muuttujasta voivat poiketa toisistaan. 28/12/2018 Liisa Marttinen kevät 2005

31 11.2 Linkitys Erikseen käännetyistä moduuleista muodostetaan yhtenäinen kokonaisuus eli ajomoduuli, jossa moduulien väliset viittaukset on selvitetty ja moduuleilla on yhteinen osoiteavaruus nollasta alkaen ensin kaikkien moduulien ohjelmakoodi ja sen perään data-alueet Mukaan liitetään mahdolliset kirjastorutiinit 28/12/2018 Liisa Marttinen kevät 2005

32 Linkitys on kaksivaiheinen
Linkittäjä muodostaa käännetyistä moduuleista ajomoduulin liittää ajomoduuliin kirjastorutiineja yhdistää erikseen moduulien koodi- ja data-alueet Linkitys on kaksivaiheinen Laske uudelleensijoitusvakiot eri moduuleille Käsittele moduulien väliset viittaukset EXPORT- ja IMPORST-hakemistot Käsittele uudelleensijoitushakemistot 28/12/2018 Liisa Marttinen kevät 2005

33 Käännöksessä Linkityksessä
korvaa kussakin käännösmoduulissa paikalliset symbolit vastaavilla sisäisillä osoitteilla Linkityksessä kokoa objektimoduuleista yksi yhdistetty ajomoduuli selvitä moduulien väliset viittaukset yhdistämällä IMPORT- ja EXPORT-osien tiedot selvitä uudelleensijoitusvakiot korjaa uudelleensijoitushakemistossa mainitut käskyt 28/12/2018 Liisa Marttinen kevät 2005

34 Moduuli 1 Moduuli 2 Moduuli 3
Käännös Käännös Käännös Objektimoduuli Objektimoduuli Objektimoduuli Linkitys Kirjastomoduuli Ajomoduuli

35 0: LOAD R1, 44 …. 10: CALL SP, Alioh ….. 20: JLES R1, 31 42: SVC SP, =HALT 43: 0 44: 1 0: …… 15: JUMP 25 ….. 23: LOAD R1, X ; globaali ……. 31: EXIT SP, 1 Kummallakin moduulilla oma 0:sta alkava osoiteavaruus. Viittaukset toisiin moduuleihin vielä selvittämättä.

36 Koodialueen perään sijoitetaan eri moduulien data-alueet.
0: 1: 42: 75: 77: 0: LOAD R1, 44 …. 10: CALL SP, Alioh ….. 20: JLES R1, 35 42: SVC SP, =HALT Yhtenäinen koodialue saadaan sijoittamalla eri moduulien ohjelmakoodit peräkkäin. Koodialueen perään sijoitetaan eri moduulien data-alueet. 0: …… 15: JUMP 25 ….. 23: LOAD R1, X ; globaali ……. 31: EXIT SP, 1 Uudelleensijoituksen takia osa viittauksista (’ADDR-osa’) on vääriä ja ne on korjattava. Samoin viittaukset toisiin moduuleihin ovat vielä auki! 43: 0 44: 1

37 Objektimoduuliin tuotettu koodi
osoiteavaruus alkaa 0:sta muuttujat ja hyppyosoitteiden arvot kiinnitetty moduulin alun suhteen viittaukset muihin moduleihin selvittämättä IMPORT ulospäin näkyvät tunnukset EXPORT käskyt, joiden osoiteosaa korjattava, jos moduuli linkitetään yhteen jonkun toisen moduulin kanssa

38 Uudelleensijoitushakemisto
Moduulin otsake EXPORT-hakemisto IMPORT-hakemisto Uudelleensijoitushakemisto Koodi ja alustettu data Moduulin lopuke Kääntäjän tuottaman objektimoduulin osat 28/12/2018 Liisa Marttinen kevät 2005

39 Moduulin otsakeosa EXPORT-hakemisto moduulin nimi
linkittäjän tarvitsemia tietoja objektimoduulin osien pituudet käännös päivämäärä kääntäjän nimi ja versio ensimmäisen suoritettavan käskyn osoite ellei aina 0 EXPORT-hakemisto tunnukset, joihin voidaan viitata muista moduuleista tunnuksen osoite (= symbolin arvo) mahdollinen käyttöoikeus R/W/E/RW

40 Koodi ja alustettu data
IMPORT-hakemisto muissa moduuleissa määritellyt tunnukset tunnus niiden käskyjen osoitteet, jossa tunnus esiintyy Koodi ja alustettu data alustamattomille muuttujille ei tarvitse varata tilaa otettava huomioon data-alueen koossa Uudelleensijoitushakemisto niiden käskyjen osoitteet, joiden osoiteosaa on korjattava, kun siirrytään moduulien yhteiseen osoiteavaruuteen suoraviivainen lisäys ei toimi, sillä käskyn osoiteosa voi olla vakio erikseen paikalliseen dataan viittaavat ja hyppykäskyt sillä linkittäessä yhdistetään erikseen data- ja koodialueet

41 Häkkisen monisteen esimerkki:
kolme objektimoduulia A, B ja C linkitetään yhdeksi ajomoduuliksi miltä objektimoduulit näyttävät? miten avoimet viittaukset selvitetään? miten väärät viittaukset korjataan? 28/12/2018 Liisa Marttinen kevät 2005

42 Uudelleensijoitus- hakemisto moduulin lopuke
Moduuli A, 301, 1, … Proc1 (h): 100 Proc2 (h): 200 S (d): 201, 204 T(d): 203 000: LOAD R1, X 100: CALL SP, Proc1 200: CALL SP, Proc2 201: L1 LOAD R2, S 202: JZER R2, L2 203: ADD R2, T 204: STORE R2, S 210: JUMP L1 211: L2 LOAD R1, X 300: SVC SP, =HALT 301: X:lle Hypyt: 202, 210 data: 0, 211 Moduulin otsake EXPORT-hakemisto tässä tyhjä IMPORT-hakemisto Koodi Alustettu data Uudelleensijoitus- hakemisto moduulin lopuke viittauksia toisen moduulin osoitteisiin koodin pituus 301 datan pituus 1

43 Uudelleensijoitus- hakemisto moduulin lopuke
Moduuli B, 100, 2, … Proc1 (h): 0 Proc2 (h): 50 S (d): 100 T (d): 101 Fun1 (h): 52 000: Proc1 ADD SP, =2 050: Proc2 ADD SP, =1 051: PUSH SP, S 052: CALL SP, Fun1 054: STORE R1, S 055: CALL SP, Proc1 060: Loop JNEG R5, Ok 070: JPOS *+5 098: JUMP Loop 099: Ok EXIT SP, =0 100: S_lle 101: T:lle Hypyt: 55, 60, 70, 98 data: 51, 54 Moduulin otsake EXPORT-hakemisto IMPORT-hakemisto Koodi Alustettu data Uudelleensijoitus- hakemisto moduulin lopuke

44 Uudelleensijoitus- hakemisto moduulin lopuke
Moduuli C, 200, 0, … Fun1 (h): 0 Fun2 (h): 101 000: Fun1 ADD SP, =2 ………. 100: EXIT SP, =1 101: Fun2 LOAD R1, 2(FP) …………. 199: EXIT SP, =0 Moduulin otsake EXPORT-hakemisto IMPORT-hakemisto tässä tyhjä Koodi Alustettu data Uudelleensijoitus- hakemisto moduulin lopuke 28/12/2018 Liisa Marttinen kevät 2005

45 Häkkisen monisteen esimerkki (jatkuu):
0: A KOODI A B +301 C +401 300: 301: B 400: 401: C 600: A B C 601: X A:n DATA 602: 603: S T B:n C:n 28/12/2018 Liisa Marttinen kevät 2005

46 11.3. Lataus Ohjelmaa ladattaessa on määrättävä sen ajoaikainen paikka muistissa Yksiajojärjestelmässä: paikka voi olla aina sama esim. aina muistin alussa fyysiset osoitteet voidaan määritellä jo linkitysvaiheessa Moniajojärjestelmässä: muistissa on useita ajomoduuleja KJ etsii sopivan paikan ohjelmalle 28/12/2018 Liisa Marttinen kevät 2005

47 Virtuaaliosoite <-> fyysinen osoite
riippuu virtuaalimuistin toteutuksesta kanta- ja rajarekisteriä käytettäessä ajomoduuli talletetaan muistiin kokonaan prosessikuvaajaan tieto sijoituskohdasta (BASE) ja muistitilan koosta (LIMIT) osoitemuunnos MMU:ssa laitteistototeutuksena suorituksen aikana lisätään osoitteeseen BASE-rekisterin arvo eli ohjelman alkusoite 28/12/2018 Liisa Marttinen kevät 2005

48 Ohjelman talletus muistiin:
0: Keskusmuisti A 300: 301: 580: B 400: 401: C 600: 601: X 602: 603: S T BASE 580 LIMIT 603 28/12/2018 Liisa Marttinen kevät 2005

49 sivutusta eli sivuttavaa virtuaalimuistia käytettäessä
ajomoduulista on muistissa vain osa sen sivuista sivutaulu kertoo, missä moduulin sivut sijaitsevat sivutaulun sijainti talletettava prosessin kuvaajaan 28/12/2018 Liisa Marttinen kevät 2005

50 Virtuaalimuisti Kulloinkin käytössä olevat tiedot väylä
Keskusmuistissa osa prosessin tiedoista Kulloinkin käytössä olevat tiedot väylä Levyllä prosessin koko muistialue (data + koodi + pino + keko) levyohjain Levy 28/12/2018 Liisa Marttinen kevät 2005


Lataa ppt "11. Käännös, linkitys ja lataus"

Samankaltaiset esitykset


Iklan oleh Google