3. Luento: Muistin hallinta. Tommi Mikkonen,

Samankaltaiset tiedostot
Arto Salminen,

3. Muistin hallinta. 3.1 Erityyppiset muistit

MUISTIPIIRIT H. Honkanen

Tietokoneen muisti nyt ja tulevaisuudessa. Ryhmä: Mikko Haavisto Ilari Pihlajisto Marko Vesala Joona Hasu

11/20: Konepelti auki

Tiedon muuttumattomuuden tarkistus Järjestelmän sisäinen muisti

4. Luento: Prosessit ja säikeets. Tommi Mikkonen,

1. Keskusyksikön rakenne

9. Luento: Ohjelmistotyö. Tommi Mikkonen,

Älykännykät ovat pieneen tilaan paketoituja, mutta suuret ominaisuudet omaavia tietokoneita.

2 Konekieli, aliohjelmat, keskeytykset

Tiedon muuttumattomuuden tarkistus Järjestelmän sisäinen muisti

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

Muistipiirit. Digitaalitekniikka (piirit) Luku 20 Sivu 1 (24)

Osio 2: Luennot 4-7 Muistinhallinta

CT50A2602 Käyttöjärjestelmät Seminaarityö. Tietokoneen muisti nyt ja tulevaisuudessa

Tietorakenteet ja algoritmit

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Tiedon tarkistus (4) Esimerkki ohjelmistotason tarkistusmerkistä (2) Tiedon muuttumattomuus (2)

Tiedon tarkistus (4)

Tiedon tarkistus (4) Esimerkki ohjelmistotason tarkistusmerkistä (2) Tiedon muuttumattomuus (2)

Ongelma(t): Jotta tietokone olisi mahdollisimman yleiskäyttöinen ja suorituskykyinen, niin miten tietokoneen resurssit tulisi tarjota ohjelmoijalle,

Jakso 7 Tiedon muuttumattomuuden tarkistus Järjestelmän sisäinen muisti. Pariteetti Hamming-koodi Välimuisti Tavallinen muisti Muistien historiaa

Tiedon tarkistus (4)

Tietokoneen toiminta, K Tavoitteet (4)

Tiedon tarkistus (4) Esimerkki ohjelmistotason tarkistusmerkistä (2) Tiedon muuttumattomuus (2)

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Ongelma(t): Jotta tietokonetta voitaisiin käyttää monipuolisesti ja mahdollisimman yksinkertaisesti kaikkiin sille soveltuviin käyttötarkoituksiin,

OHJ-4301 Sulautettu Ohjelmointi

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Tiedon tarkistus (4) Esimerkki ohjelmistotason tarkistusmerkistä (2) Tiedon muuttumattomuus (2)

Rakenteiset tietotyypit Moniulotteiset taulukot

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017.

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

Luento 5: YKSINKERTAINEN SEGMENTOINTI JA SIVUTUS

Luento 7 Tiedon muuttumattomuuden tarkistus Järjestelmän sisäinen muisti

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Luento 5 (verkkoluento 5) Suoritin ja väylä

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Tietojenkäsittelyn perusteet 2. Lisää käyttöjärjestelmistä

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Osio 2: Luennot 4-7 Muistinhallinta YKSINKERTAINEN MUISTINHALLINTA. ltöä YLEISTÄ MUISTINHALLINNASTA. Looginen muisti.

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Tietokoneen rakenne: Harjoitustyö. Motorola MC prosessori

ltöä (Luennot 5&6) Luento 5: YKSINKERTAINEN SEGMENTOINTI JA SIVUTUS Pikakertaus: : a) b) c) Dyn.. part.: sijoitus Kuva Buddy System: esimerkki

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

6.3. AVR_rauta. EEPROM-muisti pva

Muistihierarkia Kiintolevyt I/O:n toteutus

LUKUJA, DATAA KÄSITTELEVÄT FUNKTIOT JA NIIDEN KÄYTTÖ LOGIIKKAOHJAUKSESSA

Sisältöä. Tietokoneen rakenne. Ch 1 - Ch 8 [Sta06] Valikoituja paloja TITO-kurssista. Tietokonejärjestelmä

Järjestelmän ulkoinen muisti I/O

Luento 4 Aliohjelmien toteutus

Tietokonejärjestelmä. Tietokoneen rakenne. Ch 1 - Ch 8 [Sta06] Valikoituja paloja. TITO-kurssista. John von Neumann ja EDVAC, 1949.

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

Jakso 4 Aliohjelmien toteutus

Muistihierarkia Kiintolevyt I/O:n toteutus

Sisällys. 15. Lohkot. Lohkot. Lohkot

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Työasema- ja palvelinarkkitehtuurit (IC130301) Apumuistit. Kiintolevyt. 5 opintopistettä. Petri Nuutinen

7. Oliot ja viitteet 7.1

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Jakso 4 Aliohjelmien toteutus

Käyttöjärjestelmän rakenne

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Käyttöjärjestelmät. Teemu Saarelainen Tietotekniikka

Luento 1 Tietokonejärjestelmän rakenne

Ohjelmoinnin perusteet Y Python

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Suoritin. Jakso 5 Suoritin ja väylä. TTK-91 muistin rakenne. TTK-91 suorittimen rakenne

Osio 2: Luennot 5-8 Muistinhallinta

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Sisällys. 16. Lohkot. Lohkot. Lohkot

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä.

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Kertausluento 1 (lu01, lu02, lu03) Tietokonejärjestelmän rakenne ttk-91 ja sillä ohjelmointi

Tietokoneen toiminta, Kevät Copyright Teemu Kerola Järjestelmän eri tasot Laitteiston nopeus

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

Suoritin. Luento 5 Suoritin ja väylä. TTK-91 muistin rakenne. TTK-91 suorittimen rakenne

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer)

Jakso 5 Suoritin ja väylä

TIES530 TIES530. Moniprosessorijärjestelmät. Moniprosessorijärjestelmät. Miksi moniprosessorijärjestelmä?

Algoritmit 1. Luento 3 Ti Timo Männikkö

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012

6. Luento: Skedulointi eli Vuoronnus. Tommi Mikkonen,

Osoitin ja viittaus C++:ssa

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

MUISTINHALLINTA. Stallings, Luku 7

1. Yleistä. 2. Ominaisuudet. 3. Liitännät

Sulautetut järjestelmät

Jakso 5 Suoritin ja väylä

Javan perusteita. Janne Käki

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Jakso 5 Suoritin ja väylä. Suorittimen rakenne Väylän rakenne Käskyjen suoritussykli Poikkeukset ja keskeytykset TTK-91:n ja KOKSI:n rakenne

IT K 1 45 K ä yt t öj ä rj estelmät

Transkriptio:

3. Luento: Muistin hallinta Tommi Mikkonen, tommi.mikkonen@tut.fi

Agenda Erityyppiset muistit Ohjelman sijoittelu muistiin Ohjelman sisäinen muistinhallinta Muistinhallintayksikkö Välimuisti Yhteenveto

Erityyppiset muistit Luku-kirjoitusmuistit, RAM (Random Access Memory) Lukumuistit, ROM (Read Only Memory) Haihtumattomat muistit Patterivarmistus Sähköisesti tyhjennettävä muisti (EEPROM; Flash)

Luku-kirjoitusmuistit (RAM) Tavallisin vaihtoehto; oletusarvo Sisältö ei säily sähkökatkoksen yli, haihtuva muisti Yleensä nopeaa Useita eri alatyyppejä SRAM (Static RAM) Tieto säilyy niin kauan kuin käyttöjännitekin DRAM (Dynamic RAM) Tiedon säilyminen perustuu kapasitanssiin ja vaatii virkistämistä Vaatii vähemmän tilaa Toteutuksessa virkistys voi olla integroitu osaksi piiriä, joten ulkoisesti DRAM voi näyttää SRAM:lta Periaatteessa voidaan optimoida muistin ominaisuuksien kautta (esim. samalla sivulla olo tms) mutta harvoin kannattaa käytännössä

Lukumuistit Peruslukumuisti ROM Sisältö langoitetaan tekovaiheessa Nykyisin käytössä harvoin; esim. suorittimen sisällä johonkin erikoistarkoitukseen jos edes siellä Programmable ROM Muistin sisältö voidaan asettaa kerran Erasable PROM Voidaan tyhjentää ja kirjoittaa uudelleen Kirjoittaminen vaatii usein poikkeavan jännitteen; ei tehdä tuotantokäytössä Ohjelmoija ei voi muuttaa sisältöä Vanhanaikaisia; harvoin muuta kuin historiallista arvoa

Haihtumattomat muistit Patterivarmennettu luku-kirjoitusmuisti SRAM jolle erityisjärjestelyin turvattu sähkönsyöttö Sähköisesti tyhjennettävä muisti EEPROM (Electrically EPROM) 1 sukupolvi -> erityisjännite muutettaessa 2 sukupolvi -> FLASH

Flash-muistin ominaisuuksia Tyhjennys isoina palasina Ensimmäiset tyhjennettävä kokonaan Myöhemmät piirit lohko kerrallaan Kirjoitus muistipaikka kerrallaan Rajoituksia käyttökertojen määrään liittyen; muistipaikkojen kierrätys Hidas lukea ja kirjoittaa; tavallisesti sisältö luetaan luku-kirjoitusmuistiin ennen käyttöä Ei tietystikään nopeuta kirjoitusta; sopii esim. ohjelman lataamiseen

Flash-muistin käytöstä Lohkotason tyhjennys ohjaa usein suunnittelua Sähkökatko pakottaa kopioimaan! Kirjoituskertojen rajoitukset voivat olla matalia Esim. 10.000-1.000.000 luotettavaa kirjoituskertaa Käyttötarkoitus voi ohjata piirin valintaa

2 Ominaisuuksiltaan eroavaa Flash-tyyppiä Sarjaliityntä vs. osoiteperustainen liityntä Osoiteperustaisessa liitynnässä edelleen 2 eri tyyppiä Vakiokokoiset lohkot, käyttö symmetristä (FAT-tyyppi) Muutama suurehko lohko ja paljon pieniä (bootsector-tyyppi) Suuret koodille, pienet muuttujille sopivia Tyypillinen tietokoneen alustusmuistin tallennuksessa (boot ROM, BIOS)

Muistitiedon päivittämisestä Flashissa Bittien nollaus Tavallisesti tyhjä tieto muistipaikassa tarkoittaa että kaikki bitit ykkösiä Kirjoittamalla voidaan nollata, mutta vain koko lohko voidaan kerralla muuttaa ykkösiksi Tietorakenteilla ja suunnittelulla voidaan vähentää tyhjennystarvetta (esim. lukematon viesti -> 1, luettu viesti -> 0) Kokonaisia tiedostojärjestelmiä olemassa (WORM, write once, read mostly) Lohkon tunnistaminen Muuttujien paikat vaihtuvat kun lohkoja joudutaan päivittämään Ei vakiopaikkaa, jossa tieto käytettävästä muistista; yleensä jokainen lohko sisältää tietoa talletetusta tiedosta Lohkon koko?

Ohjelman sijoittelu muistiin Ajettava ohjelma -> ROM, Flash Alustettu data, kirjoitussuojattu -> ROM, Flash Staattinen muistialue -> RAM Asennusparametrit (esim. tunnistetiedot) -> Patterivarmennettu RAM, Flash Dynaaminen muistialue (pino) -> RAM Oheislaitteet -> sijoitus absoluuttisiin osoitteisiin (näyttää RAM:lta) Keskeytysvektorit -> Sijoitus absoluuttiosoitteisiin (ROM); voidaan siirtää RAM-muistiin käynnistettäessä

Erityispiirteitä Ohjelma valmiina muistissa heti; ei tarvita latausta Osa osoitteista suoraan laiteosoitteita Keskeytysvektori varaa osan laiteosoitteista Ei helppo toteuttaa suoraan alustetun datan aluetta Alustetun datan kopiointi lukumuistiin Kääntäjät tekevät tai eivät tee, kääntäjästä riippuen

Ohjelman sisäinen muistinhallinta Ohjelmoijan vastuulla Se miten koodi kirjoitetaan vaikuttaa merkittävästi muistinkulutukseen Tietorakenteet Muistin sijainti Staattisesti varattu muuttuja Dynaamisesti varattu muuttuja pinossa Dynaamisesti varattu muuttuja keossa Usein muistibudjetointi ennen suunnittelua, jotta voidaan olla varmoja muistin riittävyydestä

Staattisesti varattu muuttuja Ohjelman suorituksen alussa luotuja muuttujia; muistiosoite on vakio (static) int x = 0; Voidaan myös piilottaa aliohjelmien sisään abstraktioihin liittyvistä syistä int * osoitin_stattiseen() { static int x = 0; return & x; }

Dynaamisesti varattu muuttuja pinossa Syntyvät pinoon ohjelman suorituksen edessä; häviävät yhtä lailla suorituksen edetessä Aliohjelmien sisäiset muuttujat Parametrit Paluuarvot int * osoitin_dynaamiseen() { // ELÄ IKINÄ TEE NÄIN! int x = 0; return & x; }

Dynaamisesti varattu muuttuja keossa Muisti varataan ja vapautetaan ohjelmoijan toimesta Malloc/Free, New/Delete jne. int * x = (int *)malloc(sizeof(int)) *x = 0;

Dynaaminen muisti ja ohjelmistosuunnittelu Kolme perusongelmaa Jäänneviittaukset Usein ohjelman yllättävä kaatuminen (segmentation fault etc); jos muistialue uudessa käytössä virheet mielikuvituksellisempia Roskaantuminen Usein hidastuminen, ja lopulta kaatuminen esim. muistin loppumiseen Pirstoutuminen Varausten ja vapautusten seurauksena eri kokoisia muistialueita; mikä valitaan seuraavaksi käytettäväksi muistia varattaessa? Seuraavassa joitakin käytännössä toimivia muistinkäytön strategioita

Vain varauksia Yksinkertaisin vaihtoehto Varaa kaikki dynaaminen muisti ohjelman suorituksen alussa Muuttujat erikseen? Kokonainen alue? address alkumuisti; int koko; Voidaan myös toteuttaa prosessitasolla Käynnistys -> varaus Päättyminen -> vapautus Varsin toimiva ratkaisu kun halutaan varmentaa toiminta huolellisesti

Varauksia ja vapautuksia Ohjelmoija joutuu huolehtimaan jäänneviittauksista ja roskaantumisesta Oleellisimmat erot eri algoritmien välillä liittyvät pirstoutumiseen Nyrkkisääntöjä: Vapauta aikaisin, varaa myöhään Käytä standardikokoista varausyksikköä Varaus on hidasta; ehkä voisi varata samalla tilaa usealle tietoalkiolle?

Ohjelmointikielistä C Ohjelmoija voi päättää täysin mitä tehdään C++ Vaarallisempi, sillä muistinvaraus ja vapautus joskus verhojen takana (kokeile!) Java Roskienkeruu automaattista, voi yllättää kesken suorituskykykriittisen operaation JSR-001 Real-Time Specification for Java Ada Osa ominaisuuksista melko raskaita ja ennakoimattomia Kielen ominaisuudet voidaan korvata käyttöjärjestelmän mekanismeilla ennustettavuuden lisäämiseksi Skriptit Ennakointi lähes mahdotonta virtuaalikonetta tuntematta

Muistinhallintayksikkö Suojaa prosesseja Rekisterit tyhjennetään prosessia vaihdettaessa Hallitsee kunkin prosessin muistialuetta Kätkee epäjatkuvuuskohdat Muisti näyttää rakenteeltaan samanlaiselta Käyttöjärjestelmistä tuttu muistin jako sivuihin

Muistisivukohtaista tietoa Miten sivua voi käsitellä käyttöjärjestelmätilassa (luku/kirjoitus) Miten sivua voi käsitellä käyttäjätilassa (luku/kirjoitus) Onko sivu ollenkaan olemassa Onko sivu pinon vai tavallisen muistin osa (voi vaikuttaa laillisen osoitteen laskentaan) Käytetäänkö sivulle muunnosta vai päästetäänkö sivun osoitteet suoraan väylälle Onko välimuisti päällä vai ei (esim. lukitusrutiinien lukkomuuttujien ja oheislaitteiden ohjaus- ja tilarekisterien kohdalla ei saa olla päällä!)

Mahdollisia virhetilanteita Kirjoittaminen ohjelmakoodin päälle Ei välttämättä näy koskaan, mutta huomataan jos kyseessä lukumuisti Osoitteenmuunnoksessa huomataan ettei sivua ole olemassa Aito virhe (ei virtuaalimuistia) vs. läsnäolokeskeytys (virtuaalimuisti) Koska virtuaalimuistia ei yleensä sulautetuissa ole, lähdetään virheoletuksesta

Välimuisti Muistin ja prosessorin välissä sijaitseva keskusmuistia nopeampi muisti Pyrkii nostamaan ohjelman suorituskykyä Usein käytetyt muuttujat löytyvät nopeammin kuin mitä keskusmuistin kautta Sekä koodille että datalle Joskus useita tasoja (esim. L1 & L2; jos ei löydy tasolta 1, etsitään tasolta 2, ja vasta sitten keskusmuistista) Muutos voidaan kirjoittaa keskusmuistiin heti tai viivästettynä (esim. kun arvo poistuu välimuistista)

Välimuistista Nopeutus tilastollista Ohjelmat paikallisia -> viittaukset kohdistuvat ohjelman suorituksen jossakin vaiheessa tiettyihin muuttujiin, ja jossain toisessa vaiheessa joihinkin muihin muuttujiin Välimuistin tyhjennys kun joudutaan vaihtamaan prosessia Reaaliaikaisiin (ts. ajankäytöltään ennustettaviin) järjestelmiin joudutaan yleensä omaksumaan pessimistinen kanta Eli siis nopeutus useimmiten tapahtuu, mutta koska ei voida olla varmoja joudutaan elämään huonoimman mahdollisimman vaihtoehdon mukaan

Yhteenveto Eri muistityypit soveltuvat eri käyttöön Myös saman tyypin sisällä erilaisia toteutuksia, hintoja, kokoja, ominaisuuksia, jne. Muistin käytön suunnitteleminen ohjelmoijan vastuulla Sekä koko muistin kulutuksen osalta pienissä järjestelmissä Että yksittäisen prosessin osalta suuremmissa järjestelmissä MMU tarjoaa suojausmekanismin prosessien välille; ei aina vaihtoehto Välimuisti nopeuttaa tilastollisesti, mutta ei sovi kaikkein reaaliaikaisimpien ohjelmistojen toteuttamiseen