Termej ja ksitteit Digitaalista tietoa ja loogisia muuttujia






















































- Slides: 54
Termejä ja käsitteitä Digitaalista tietoa ja loogisia muuttujia kuvataan tiloilla 0 ja 1 - 0 V on maa (ground) - low ja syöttöjännite (Vcc tai Ucc) – high - Käytännössä useasti 0 V ja 3, 3 V tai 5 V - Joskus 0 V ja 24 V - Esim. TTL loogiikassa 0 (0 V – 0. 8 V), looginen 1 (2 V – Vcc) - Voimassa on positiivinen logiikka sopimus eli ylempi jännite on 1 - Muut välissä olevat jännitetilat on kielletty - Signaali on kelluva (floating) kun sitä ei ole viety loogiseen 0 tai loogiseen 1 tilaan
Termejä ja käsitteitä Siirtotie ei ole ideaalinen! Häiriövara (noise margin): siirtotiellä ulosta sisäänmenoon voi summautua häiriöjännitteitä. Kielletty alue erottaa loogiset tilat riittävän selvästi loogisia tiloja vastaavilla jännitealueilla eri kriteerit ulostuloissa ja sisäänmenoissa Järjestelmissä esiintyy eri jännitetasoja, joiden välillä täytyy tehdä jännitemuunnoksia. Lisäksi usein mielivaltaisia jännitetasoja täytyy muuntaa loogisiksi tasoiksi järjestelmän ymmärtämään muotoon, esim. A/D-muunnos
Termejä ja käsitteitä Käyttöjännite, vastus ja kondensaattori Kytkennän käyttöjännite on yleensä n. 2 V – 7 V ja järjestelmään syötettävä jännite 5 V – 15 V Käyttöjännite voidaan tehdä muuntajalla, generaattorilla, dynamolla, paristoilla, akulla, aurinkopaneelilla, USB-portilla Hyvin tyypillinen piirien käyttöjännite on 5 V ja se voidaan tuottaa jänniteregulaattorilla 9– 12 V: n tasajännitteestä Järjestelmän sisällä jännitevaihteluja voidaan tasata pienillä kondensaattoreilla, jotka sijoitetaan mikropiirien läheisyyteen käyttöjännitteen ja maan väliin Järjestelmää suunnitellessa tulee laatia yleensä teho- ja hukkatehobudjetti (hukkateho=lämpö)
Termejä ja käsitteitä Lukujärjestelmät Digitaalitekniikassa ja logisissa piireissä ihanteellinen lukujärjestelmä on binaarijärjestelmä Ihmiselle pelkät ykköset ja nollat ovat hankalia hahmottaa Olemme tottuneet kymmen- eli desimaalijärjestelmään Oktaalijärjestelmän ja heksadesimaalijärjestelmän luvut on helppo muuttaa binäärijärjestelmän luvuiksi Kaikkien lukujärjestelmien välillä voidaan tehdä lukumuunnokset
Termejä ja käsitteitä Lukumuunnokset Desimaali-binäärimuunnos - desimaaliluku jaetaan kahdella ja merkitään jakojäännös muistiin, kunnes osamääräksi saadaan yksi, esim. 187 = 1011 10 Jakojäännös 0, 5 * 2 = 1 2 Jakolasku Jakojäännös 187 : 2 = 93, 5 1 93 : 2 = 46, 5 1 46 : 2 = 23 0 23 : 2 = 11, 5 1 11 : 2 = 5, 5 1 5 : 2 = 2, 5 1 2: 2=1 0 1: 2=0 1
Termejä ja käsitteitä Desimaali-heksadesimaalimuunnos - desimaaliluku jaetaan kuudellatoista ja merkitään jakojäännös muistiin, kunnes osamääräksi saadaan alle 16, esim. 188 = BC 10 16 Jakojäännös 0, 75 * 16 = 12 0, 6875 * 16 = 11 Jakolasku Jakojäännös 188 : 16 = 11, 75 1210 = C 16 11 : 16 = 0, 6875 1110 = B 16 - Ylhäällä vähiten merkitsevä luku ja alhaalla eniten merkitsevä luku Heksa - desimaali vastaavuus: 1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7, 8=8, 9=9, A=10, B=11, C=12, D=13, E=14, F=15
Termejä ja käsitteitä Binääri-desimaalimuunnos - Binääriluvun bitit kerrotaan painoarvollaan, esim. 10111101 2 = 1 * 128 + 0 * 64 + 1 * 32 + 1 * 16 + 1 * 8 + 1 * 4 + 0 * 2 + 1 * 1 = 128 + 32 + 16 + 8 + 4 + 1 = 189 10 Heksadesimaali-desimaalimuunnos -Heksadesimaaliluvun numerot kerrotaan painoarvollaan, esim. ABC = 10 * 256 + 11 * 16 + 12 * 1 = 2560 + 176 + 12 = 2748 16 10
Termejä ja käsitteitä Binääri-heksadesimaalimuunnos -Jaetaan binääriluku neljän bitin ryhmiin lopusta alkaen ja muunnetaan ryhmät yksitellen vastaaviksi heksadesimaaliluvuiksi, esim. 0111 1110 = 7 E 2 16 Heksadesimaali- binäärimuunnos -Heksadesimaaliluvun numerot muutetaan yksi kerrallaan vastaaviksi binäärijärjestelmän luvuiksi, esim. 37 A = 0011 0111 1010 16 2
Termejä ja käsitteitä Binääri Heksa Desimaali Binääri- 0000 0 0 0001 1 1 heksa- 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 8 8 1001 9 9 1010 A 10 1011 B 11 1100 C 12 1101 D 13 1110 E 14 1111 F 15 desimaalivastaavuus
Termejä ja käsitteitä Boolen algebra (Boolean algebra) Kaksi arvoa tosi (True, T) ja epätosi (False, F), joita kuvataan myös ykkösellä (1) ja nollalla (0) NOT = looginen negaatio (EI) OR = looginen yhteenlasku (TAI) AND = looginen kertolasku (JA)
Termejä ja käsitteitä Keskeytykset - Ongelma on varmistaa, että sulautettu järjestelmä reagoi riittävän nopeasti ulkoiseen tapahtumaan, vaikka se olisi tekemässä jotain aivan muuta Ensimmäinen keino on käyttää keskeytyksiä -Keskeytyspyyntö (Interrupt Request, IRQ) keskeyttää sulautetun järjestelmän mikroprosessorin olipa se tekemässä mitä tahansa ja laittaa mikroprosessorin suorittamaan uutta koodia - Tämä voi ratkaista sen hetkisen ongelman, mutta se vaatii monimutkaista ohjelmointia ja tuo mukanaan uusia ongelmia
Termejä ja käsitteitä Keskeytyksen perusteet Ne alkavat laitteistosta, esim. sarjaportin kautta tulee kirjain, joka mikroprosessorin tulee lukea, sijoittaa jonnekin muistiin ja lukea seuraava kirjain, jne. Jokaisella laitteella, joka tarvitsee mikroprosessorin huomiota on oma IRQ-nasta ja mikroprosessorilla useita, jotta se erottaa miltä laitteelta keskeytyspyyntö tulee Mikroprosessori siis keskeyttää edellisen suorituksen, tallentaa sen pinoon ja alkaa suorittamaan keskeytys rutiinia, joka tarkoittaa mitä tahansa ohjelmoitua toimintoa, joka tässä tilanteessa tulee tehdä Keskeytystä ei voi kutsua eli mikroprosessori reagoi laitteiston signaaleihin
Termejä ja käsitteitä Keskeytysrutiini (Interrupt routine, Interrupt Handler, Interrupt Service Routine, ISR) - On konekielinen aliohjelma, jonka viimeisen käskyn tulee olla Return (tai vastaava), jolloin mikroprosessori palaa suorittamaan keskeytynyttä eli pinon päällimmäistä tehtävää
Termejä ja käsitteitä Keskeytyksen haasteena on edellisen tehtävän käyttämien rekisterien tietojen palauttaminen, sillä keskeytysrutiini voi muuttaa niitä Tavallinen ratkaisu on, että keskeytysrutiini tallentaa rekisterien tiedot alussa ennen kuin alkaa käyttää niitä ja palauttaa ne sitten lopussa Mitä seuraa, jos rekisteriä ei tallenneta? Tulee bugi, joka ilmenee vain silloin, kun rekisterien arvot muuttuvat keskeytysrutiinien aikana Keskeytykset voidaan myös kieltää, sekä laite, että mikroprosessori voidaan ohjelmoida siten, etteivät ne reagoi keskeytyksiin tietyissä tilanteissa Keskeytykset voidaan myös priorisoida ja keskeytysrutiinikin voidaan keskeyttää toisella keskeytysrutiinilla sekä useampi keskeytys voidaan laittaa pinoon odottamaan vuoroaan
Termejä ja käsitteitä Jaetun tiedon ongelma Jatkuva kahden lämpötilan tarkkailu -Jos lämpötila kahdella anturilla ei ole sama, tulee hälytys -Jos tulee keskeytys ensimmäisen ja toisen lämpötilan lukemisen väliin ja lämpötila muuttuu keskeytysrutiinin aikana, tulee hälytys, vaikka molempien antureiden lukemat ovat koko ajan samat Keskeytysrutiini ei voi tietää minkä mikroprosessorin suorituksen se keskeytti.
Termejä ja käsitteitä
Termejä ja käsitteitä Tällainen bugi on todella vaikea havaita, koska prosessori suorittaa keskeytysrutiinin mikrosekunneissa tai niiden osissa ja sen vuoksi ko. bugi ilmenee hyvin harvoin Tyypillisesti se ilmenee - Perjantaina klo 17. 00, kun pitäisi lähteä viikonlopun viettoon - Aina, kun et huomaa - Aina, kun debuggauslaite ei ole kiinni järjestelmässä - silloin, kun laite on laskeutunut Marsiin - Ja tietysti asiakas demossa Epäile ja analysoi aina keskeytykset! Varmista, ettet koodaa tällaista!
Termejä ja käsitteitä Jaetun tiedon ongelman ratkaiseminen Ensimmäinen tapa on estää keskeytykset ohjelman suorituksen ajaksi aina, kun on kysymys kriittisestä ohjelmasta - Kuva seuraavassa diassa Toinen tapa on lukea yhden anturin arvo kahdesti peräkkäin. Jos arvo on sama, se on oletettavasti oikea, vaikka välillä olisi suoritettu keskeytysrutiini
Termejä ja käsitteitä
Termejä ja käsitteitä Keskeytysten viiveet Kuinka nopeasti sulautettujärjestelmä vastaa keskeytykseen? 1. Aika, jonka aikana keskeytykset on estetty 2. Aika, joka menee korkeamman prioriteetin omaavan keskeytyksen suorittamiseen 3. Aika, joka menee mikroprosessorilta edellisen suorituksen keskeyttämiseen, tilanteen tallentamiseen ja uuden keskeytysrutiinin aloittamiseen 4. Aika, joka menee keskeytysrutiinilta rekisterien tallentamiseen ja keskeytysrutiinin suorittamiseen
Termejä ja käsitteitä Edellisestä johtuen kannattaa pitää keskeytysrutiinit lyhyinä ja tehokkaina (Ohjelmoija voi vaikuttaa kohtiin 2. ja 4. ) Lisäksi keskeytysten esto on pidettävä mahdollisimman lyhyenä Lisää vaihtoehtoja keskeytyksen estolle 1. Pidetään kirjaa mihin rekistereihin ohjelma kirjoittaa ja ei anneta keskeytysrutiinin kirjoittaa samoihin rekistereihin - Pitää varmistaa, että tila riittää 2. Keskeytysrutiini kirjoittaa muistiin keskeytettävän ohjelman tiedot ja palauttaa ne lopuksi - Pitää kirjoittaa monimutkaista koodia - voi tulla helposti bugeja
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 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 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. L 1 & L 2; 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 • Reaaliaikaisiin (ts. ajankäytöltään ennustettaviin) järjestelmiin joudutaan yleensä omaksumaan pessimistinen kanta – Ohjelmat paikallisia -> viittaukset kohdistuvat ohjelman suorituksen jossakin vaiheessa tiettyihin muuttujiin, ja jossain toisessa vaiheessa joihinkin muihin muuttujiin – Välimuistin tyhjennys kun joudutaan vaihtamaan prosessia – 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 • Muistin käytön suunnitteleminen ohjelmoijan vastuulla • • MMU tarjoaa suojausmekanismin prosessien välille; ei aina vaihtoehto Välimuisti nopeuttaa tilastollisesti, mutta ei sovi kaikkein reaaliaikaisimpien ohjelmistojen toteuttamiseen – Myös saman tyypin sisällä erilaisia toteutuksia, hintoja, kokoja, ominaisuuksia, jne. – Sekä koko muistin kulutuksen osalta pienissä järjestelmissä – Että yksittäisen prosessin osalta suuremmissa järjestelmissä
Prosessi käsitteenä • Prosessi ~ ohjelma? • Vähintäänkin resurssien varaamisen yksikkö • Tilanteesta riippuen erilaisia tilamalleja – Ready-Run-Wait-Swapped wait-Swapped ready
Ready-Run-Wait Run Vuorontaja Prosessi odottaa Ready Odotus päättyy Wait Uusi prosessi
Ready-Run-Wait. Swapping Vuorontaja Run Prosessi odottaa Ready Odotus päättyy Wait Heittovaihtaja Swapped Wait Uusi prosessi Heittovaihtaja Odotus päättyy Swapped Ready
Säikeet • Usein tarvitaan ”kevyempää” kuin täysverinen prosessi • Säikeet, kevytprosessit (thread, lightweight-process, etc) • Samaan prosessiin kuuluvat säikeet samassa muistiavaruudessa • Kaikilla omat pinot – Joskus jopa haarautuvat pinot jos tilanne sitä vaatii! • Käyttö voi erota prosessitasosta – Omat rutiinit, joskus jopa suora pyyntö prosessorista luopumiseksi
Säikeiden toteuttamisesta • Käyttäjän tasolla – Kirjastorutiini, joka toimii prosessin sisäisenä vuorontajana (voihan tämän tietysti tehdä itsekin jos haluaa) – Ongelma: Kun joku säie odottaa, kaikki helposti odottavat • Käyttöjärjestelmän tasolla – Jokainen säie skeduloidaan erikseen – Kuormittaa tietysti ytimen tietorakenteita – Vaatii käyttöjärjestelmäkutsun
Säikeet ja prosessit • Säikeet -> Suoritusaika – Kontekstin vaihto, erilaiset vuoronnusalgoritmit • Prosessit -> Resurssien varaus – Semaforit, lukot, jne • Kommunikointi – Jaettu muisti (kätevää saman prosessin sisällä) – Viestinvälitys (kätevää prosessien välillä)
Prosessielementti (process control block, pcb) • Kokoaa tärkeää prosessiin liittyvää tietoa – – – – – Nimi (yleensä kokonaisluku) Prosessin tila (ready, run, wait, …) Nykyinen prioriteetti Perusprioriteetti Tilaa säikeiden ympäristöjen tallennusta varten (ympäristöpino) Muistiosoitteita (data, ohjelma) Varatut resurssit Saadun signaalin numero ja signaalien käsittelijät Kirjanpitotietoa (ajoaika, jne) …
Prosessin luominen • Linkittäjä (linker) muodostaa kooditiedoston joka vastaa ohjelmalle varatun muistialueen sisältöä ohjelman käynnistyessä (process image) • Käyttöjärjestelmän ytimessä palvelurutiini, joka osaa käynnistää parametrina annetun kooditiedoston • Prosessielementin kentät päivitetään sopiviin arvoihin • Käytännössä useita variaatioita – Fork (uusi prosessi, sama koodi, isäprosessi jatkaa) – Exec (uusi prosessi, uusi koodi, isäprosessi jatkaa) – Wait (uusi prosessi, uusi koodi, isäprosessi odottaa)
Prosessin päättäminen • Suljetaan avoinna olevat tiedostot • Vapautetaan resurssit • Vapautetaan prosessielementti • Prosessien väliset riippuvuudet (isälapsi) voivat joskus aiheuttaa erikoisia tilanteita