180 likes | 339 Views
PROSESSIT. Tehtäviä: Limittää usean prosessin suoritus, jotta resurssien käyttö olisi tehokasta, mutta samalla taata, että kaikki prosessit etenevät mielekästä tahtia.
E N D
PROSESSIT Tehtäviä: • Limittää usean prosessin suoritus, jotta resurssien käyttö olisi tehokasta, mutta samalla taata, että kaikki prosessit etenevät mielekästä tahtia. • Osoittaa prosesseille niiden vaatimat resurssit jonkin politiikan mukaan, ja toisaalta välttää lukkiutumistilanteet. Nämä vaatimukset ovat keskenään ristiriitaisia. • Tukea prosessienvälistä viestinvälitystä ja uusien prosessien luomista. (Molemmat ovat erittäin hyödyllisiä ominaisuuksia sovellusohjelmia kehitettäessä.)
Prosessi koostuu: • Ohjelma, joka määrittelee prosessin toiminnan • Prosessin kuva, joka on suoritettavien käskyjen joukko keskusmuistissa. • Data, prosessin muutettavissa oleva muistialue. Voi sisältää mm. ohjelmoijan käytössä olevan pinon, ohjelman datan ja muutettavat osat. Myös I/O-järjestelmän käyttämä data. • Järjestelmän pino-tietorakenne, jota käytetään aliohjelmakutsujen hallintaan ja parametrinvälitykseen. • Joukko resursseja, jotka määrittelevät prosessin toimintaympäristön. • Prosessielementti (Process Control Block, PCB), joka kuvaa prosessin tilaa kullakin ajanhetkellä. Se sisältää kaiken käyttöjärjestelmän tarvitseman tiedon prosessista. • mahdollisesti myös muita osia
Käyttöjärjestelmä pitää kirjaa resursseita • Muistitaulukot, jotka pitävät kirjaa keskus- ja virtuaalimuistista (käsitellään myöhemmin). • I/O-taulukot, jotka sisältävät tiedon kunkin I/O-laitteen toiminnan tilasta ja mille prosessille se on varattu vai onko se käytettävissä. • Tiedostotaulukot, jotka sisältävät tietoa tiedostojen olemassaolosta, sijainnista levyllä, tilasta jne.
Prosessitaulu seuraa prosessielementtejä • Prosessin tunnistetiedot, • Tiedot prosessorin tilasta ja • Prosessia ohjaavat tiedot Tärkeä tietorakenne käyttöjärjestelmän kannalta: Suojaukseen kiinnitettävä erityistä huomiota.
Tunnistetiedot: • Prosessin tunniste (ID-numero) • Prosessin luoneen prosessin (isän) tunniste • Käyttäjän tunniste (esim. käyttäjätunnus)
Prosessorin tilatiedot • Käyttäjälle näkyvien rekisterien sisältö. Näiden rekisterien määrä on yleensä jossain 8 ja 32 välillä, vaikka joissain RISC järjestelmissä niitä voi olla yli 100. • Ohjaus- ja statusrekisterien sisältö. Lähinnä PSW. Kannattaa huomata, että PC:n sisältö talletetaan aina prosessielementtiin. Samoin kaikki prosessorin statukseen liittyvä tieto, esimerkiksi onko keskeytykset sallittu vai ei ja toimiiko prosessori etuoikeutetussa tilassa. • Pino-osoittimet. Jokaiseen prosessiin liittyy ainakin yksi järjestelmätason pino. PCB:hen on talletettu muistiosoitteet, jotka viittaavat pinon päällimmäiseen alkioon.
Prosessin ohjaustiedot • Vuorotus- ja tilatiedot. Kertoo, missä tilassa (READY, RUN, BLOCKED jne) prosessi on. Jos prosessi odottaa jotain tapahtumaa, tieto siitä on talletettu tänne. Tänne on talletettu myös tieto prosessin prioriteetista, eli tärkeysasteesta, jota monissa järjestelmissä käytetään vuorontamisen apuvälineenä. Myös muita vuorontamiseen liittyviä tietoja, kuten milloin prosessi on viimeksi ollut suoritettavana, voidaan tallettaa tähän. • Ympäristö. Ympäristömuuttujien arvot voi tallettaa prosessielementtiin. • Tietorakenteet. Prosessi voi olla osana jotain tietorakennetta, esimerkiksi jonossa, tai muodostaa lapsiprosessiensa kanssa puun. Tiedot tästä talletetaan PCB:hen. jatkuu…
…jatkuu • Prosessien välinen viestintä. Prosessit voivat välittää tietoja toisilleen eri tavoin, esimerkiksi lipuilla. Osa tästä viestinnästä voi tapahtua PCB:n kautta. • Prosessin etuoikeudet. Jos prosessilla on joitain etuoikeuksia, voidaan tieto siitä sijoittaa PCB:hen. Esimerkiksi joillakin käyttöjärjestelmän prosesseilla voi olla oikeus suorittaa käskyjä, joita tavallisilla prosesseilla ei ole lupa suorittaa, ja viitata toisten prosessien muistialueisiin. • Muistinhallinta. Tämä sisältää viittauksen muistitauluihin – sivu ja/tai segmenttitauluihin, joita käsitellään omassa Luvussaan myöhemmin. • Resurssit. Prosessin varaamat resurssit, kuten avoimet tiedostot pitää merkitä prosessielementtiin. Siinä voidaan pitää kirjaa myös siitä, mitä resursseja prosessi on käyttänyt – jotkut vuorotusalgoritmit voivat käyttää tätä tietoa hyväkseen.
Prosessien luonti ja tuhoaminen • Ensimmäinen prosessi käynnistyy, kun käyttöjärjestelmä lähtee latautumaan • prosessi (isä) voi luoda uusia prosesseja (lapsia) – muodostavat puurakenteen • luotaessa prosessin tila on NEW, mistä se siirtyy tilaan READY heti kun sen koodi ja ympäristömuuttujat on asetettu oikein • Tuhottaessa kaikki prosessiin liittyvä tieto poistetaan • lapsien käsittely hankalampaa (poistetaan myös, jätetään prosessi tuhoamatta, jos sillä on lapsia tai siirretään lapset prosessin omalle isälle)
Resurssien hallinta • rajallinen määrä resursseja, joten hallintaa tarvitaan • jos prosessi pyytää resurssia, se joutuu tilaan BLOCKED ja se jonottaa kyseistä resurssia • prosessori erikoistapaus – kaikki prosessoria jonottavat prosessit jonottavat vain prosessoria • lukkiutuminen mahdollista
Prosessin vaihtaminen Jos prosesseja on yhtä aikaa suorituksessa, niiden välillä vaihtaminen on oltava jollain tapaa hallinnassa • Tehokkuus kasvaa. Kun prosessi joutuu odottamaan I/O-operaatiota, se vapauttaa kriittisen resurssin – prosessorin – muiden prosessien käyttöön. • Vasteaika. Järjestelmä voi reagoida merkittäviin tapahtumiin (kuten ohjelmallinen resetointi) heti eikä vasta, kun nyt suorituksessa oleva prosessi luovuttaa prosessorin (mikä ei virhetilanteessa välttämättä tapahdu koskaan.) • Moniajo. Samalla tietokoneella voi olla usea ohjelma yhtä aikaa auki, esimerkiksi tekstinkäsittely- ja selainohjelma. Ilman moniajoa toinen pitäisi sulkea ennen toisen käynnistämistä. (Puhumattakaan käyttöjärjestelmästä...) • Monen käyttäjän järjestelmät. Oleellisesti tämä on sama kuin moniajava järjestelmä.
Säikeet Prosessin osia, tarvitaan seuraavaa tietoa • Säikeen tila (RUN, READY, jne.) • Säikeen konteksti, kun se ei ole suorituksessa. • Pino • Säikeen paikallisten muuttujien muistitila. • Mihin muihin prosessille osotettuihin resursseihin sillä on käyttöoikeus, mahdollisesti yhdessä toisten säikeiden kanssa.
Säikeiden käyttö Käytetään, kun ohjelmalla useita suoritettavia osia, jotka suhteellisen riippumattomia toisistaan, esim. • Etualalla ja taustalla tehtävä työ. Kuvankäsittelyohjelmassa etualalla oleva ikkuna voi kysellä tietoja kuvan käsittelystä, kun taustalla oleva säie jo laskee niitä. Koska I/O on hidasta, voidaan näin tehostaa ohjelman toimintaa merkittävästikin. • Rinnakkainen laskenta. Tekstinkäsittelyohjelmassa voi olla säie, jonka ainoa tehtävä on tallentaa teksti määräväliajoin levylle. Tämä on usein paljon tehokkaampaa kuin kirjoittaa pääohjelmaan koodi, joka tarkistaa koko ajan kelloa. • Nopeampi suoritus. Rinnakkaiset säikeet voivat suorittaa esimerkiksi tiedon käsittelyn kahta vaihetta peräkkäin, siten että ensimmäinen tuottaa tietoja, joita seuraava käyttää. Moniprosessoriympäristössä laskenta tapahtuu reaaliajassakin samanaikaisesti. • Ohjelmien organisointi. Monimutkaisia ja moninaisia tehtäviä tekevät prosessit voi olla helpompi hahmottaa suunnittelua ja toteutusta varten käyttämällä säikeitä.
Säikeiden tilanvaihto kuten prosesseilla • luonti huomattavasti nopeampaa • säikeen tuhoaminen helpompaa kuin prosessin • käyttäjän säikeet / käyttöjärjestelmän säikeet
Prosessien välinen viestintä • Aliohjelmakutsut (vrt. Javan luokat) • Viestit (sent ja receive) • Tapahtumat ja signaalit (Lisää, Lähetä, Jonossa) • tavoitteena synkronointi