1 / 61

UNIX

UNIX. ftp://shell.shore.net/members/w/s/ws/Support/OS/UNIX.pdf http://www.levenez.com/unix/history.html#05 http://www.grokline.net/by_release.php 31.12.2004 UNIX täyttää 35. Historia pähkinänkuoressa Käytössä Bellillä 1970

cwen
Download Presentation

UNIX

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. UNIX ftp://shell.shore.net/members/w/s/ws/Support/OS/UNIX.pdf http://www.levenez.com/unix/history.html#05 http://www.grokline.net/by_release.php 31.12.2004 UNIX täyttää 35

  2. Historia pähkinänkuoressa • Käytössä Bellillä 1970 • C tehtiin UNIXin kehitystä varten, aikaisemmin käyttöjärjestelmät tehtiin vain koneläheisillä kielillä. Mahdollisti järjestelmän siirtämisen koneelta toiselle • lähestymistapana ’worse is better’ • Bellin (AT&T:n) UNIXin rinnalle tuli Berkeleyn oma BSD vuonna 1978 • myöhemmin lukuisia erilaisia versioita erilaisiin tarpeisiin

  3. Moderni UNIX • yhteiset tärkeimpien käyttöjärjestelmien prosessien käyttöön tarkoitetut ydinosat koottu yhteen • kirjoitettu modulaarisesti • ytimen varaan rakennetaan joukko toimintoja ja niiden rajapintoja

  4. Prosessien hallinta • yksinkertaista, prosessit hyvin näkyviä käyttäjälle, tehokas • prosessit luokitellaan systeemiprosesseiksi ja käyttäjäprosesseiksi • systeemiprosessit toimivat kerneltilassa ja hoitavat käyttöjärjestelmän tehtäviä • käyttäjäprosessit toimivat käyttäjätilassa normaalisti ja jos tarvitsevat kerneltilassa tehdessään kernelille kuuluvia toimintoja • käyttäjäprosessi pääsee kerneltilaan tehdessään systeemikutsun, virheen sattuessa tai keskeytyksellä • Prosessi 0 ja 1

  5. Prosessin luominen (fork () –funktio) • Uusi paikka prosessitaulussa • luodaan prosessi-id lapselle • kopioidaan vanhemman tiedot, lukuunottamatta muistipaikkoja • kasvatetaan kaikkia vanhemman omistamien tiedostojen laskureita yhdellä • prosessi siirretään ’Ready to Run’ –tilaan • vanhemmalle palautetaan lapsen id ja lapselle palautetaan 0 Koko toiminta tehdään kerneltilassa, vanhemman prosessin toimesta

  6. Kun uusi prosessi on luotu, kernel voi tehdä seuraavaa: • se jatkaa vanhemman ajamista • siirtyy ajamaan lasta siitä kohtaa, mihin vanhempi jäi • siirtyy ajamaan kolmatta prosessia, vanhempi ja lapsi jäävät ’Ready to Run’ -tilaan

  7. Säikeiden hallinta (Solaris) UNIXin Monisäikeinen arkkitehtuuri käyttää seuraavia säietyyppejä: • Prosessi (normaali UNIX prosessi) • Käyttäjätason säie (käyttää säiekirjastoja, ovat näkymättömiä käyttöjärjestelmälle, käytetään sovellusten rinnakkaisuudessa) • Kevyt prosessi (käytetään käyttäjätason säikeiden hallitsemiseen, voi sisältää yhden tai useamman säikeen) • Kernelin säikeet (varsinaiset suoritettavat)

  8. Kevyt prosessi (Lightweight Process, LWP) koostuu seuraavanlaisista asioista: • LWP id • prioriteetti (liittyen yleensä kernelin säikeeseen) • signaalimaski (kertoo kernelille, mitkä signaalit LWP ottaa vastaan) • rekisterien arvot • tämän LWPn kernelpino • resurssien käyttö ja muuta profiilitietoa • osoitin kernelsäikeeseen • osoitin prosessiin

  9. UNIXIN ja Solariksen prosessien rakenteiden erot

  10. Rinnakkaisuus UNIX tarjoaa useita erilaisia menetelmiä rinnakkaisten prosessien väliseen kommunikointiin ja synkronointiin • putket • viestit • jaettu muisti • semaforit • signaalit Putkia, viestejä ja jaettua muistia käytetään datan siirtämiseen prosessien välillä, semaforeja ja signaaleita taas käytetään laukaisemaan toisen prosessin toimintaa

  11. Putki Putki on yksi merkittävimmistä UNIXin lahjoista käyttöjärjestelmille. Putki on puskurimuisti, joka mahdollistaa kahden prosessin kommunikoinnin kuluttaja-tuottaja –mallin mukaan. Käytännössä siis muodostetaan FIFO-jono, jota toinen prosessi tuottaa ja toinen lukee. Putkeen sovelletaan poissulkemista. Putkia on kahden tyyppisiä: nimettyjä ja nimeämättömiä.

  12. Viestit Viesti on lohko bittejä, joihin liittyy tyyppi. UNIX-järjestelmässä on kaksi systeemikutsua, msgsnd ja msgrcv, jotka mahdollistavat viestien lähettämisen prosessien välillä. Jokaisella prosessilla on oma jono viestejä. Viestejä luetaan jonosta joko FIFO-järjestyksessä tai tyyppien mukaan.

  13. Jaettu muisti Nopein kommunikoinnin muoto Lohko virtuaalimuistissa, jota useampi prosessi pääsee käyttämään samaan aikaan. Poissulkeminen pitää toteuttaa prosessien toimesta.

  14. Semaforit UNIXin semaforit on toteutettu wait() ja signal() –systeemikutsujen yleistyksien avulla. Vähentäminen ja kasvattaminen voi olla suurempi kuin 1. Semaforiin liittyy seuraavat tiedot: • nykyinen arvo • viimeisen semaforia käyttäneen prosessin ID • prosessien määrä, jotka odottavat, että semaforin arvoo kasvaa nykyistä suuremmaksi • prosessien määrä, jotka odottavat, että sefamorin arvo on 0

  15. Semaforiin liittyy myös jonoja, jotka ovat jääneet semaforin blockaamiksi. Semaforit luodaan joukoissa, joissa on yksi tai useampi semafori, jolloin niitä voidaan käsitellä joukkoina (asettaa kaikkiin sama arvo) Mahdollistaa joustavuutta prosessien synkronointiin ja koordinaatioon

  16. Systeemikutsu sem_op() • saa argumenttinaan joukon semaforikutsuja • kutsuttaessa suorittaa semaforikutsut yksi kerrallaan semaforeille, varsinainen toiminta perustuu sem_opin arvoon: • sem_op>0, kernel kasvattaa semaforin arvoa • sem_op=0, kernel tarkistaa semaforin arvon, jos se on 0, kernel jatkaa seuraavaan toimintoon, muuten muuttaa odottavien prosessien määrään 0 ja pysäyttää prosessit odottamaan semaforin saavan arvokseen 0 • sem_op<0 ja on pienempi tai yhtä suuri kuin semaforin arvo, sem_opin arvo lisätään semaforin arvoon. Jos saadaan 0, kaikki sitä odottavat prosessit herätetään • sem_op<0, mutta suurempi kuin semaforin arvo, kernel pysäyttää prosessin siihen asti, että semaforin arvo kasvaa

  17. Signaalit Signaalit ovat mekanismi prosessia synkronoiduista tapahtumista. Signaali muistuttaa keskeytystä, mutta sillä ei ole prioriteettia eli kaikkia signaaleja käsitellään tasavertaisina. Prosessit voivat lähettää toisilleen signaaleja tai kernel voi lähettää niitä sisäisesti. Signaali lähetetään päivittämällä kenttää prosessitaulussa vastaanottajan kohdalta. Signaalit ovat vain yksittäisiä bittejä, joten niitä ei voi asettaa jonoon. Signaalit käsitellään ensimmäisenä, kun prosessi käynnistyy

  18. Säikeiden synkronointi primitiivit (Solaris) Rinnakkaisuutta tukevien menetelmien lisäksi, Solaris sisältää seuraavat neljä menetelmää: • lukkoja poissulkemista varten • semaforeja • lukijat/kirjoittaja –lukkoja • ehtomuuttujia löytyvät kernelistä kernelsäikeitä varten, kirjastoissa on käyttäjätason säikeitä varten omat aliohjelmansa

  19. Mutex (mutual exclusion lock) • Mutexin avulla voidaan varmistaa, että vain yksi säie pääsee resurssiin kiinni kerrallaan • vain lukon avannut säie voi sen lukita • primitiivi mutex_enter yrittää avata lukon. Jos lukko on jo auki, tämä ei onnistu • mutexin operaatiot: • mutex_enter() • mutex_exit() • mutex_tryenter() mutex_tryenter() mahdollistaa mutexin kokeilemisen ilman, että koko prosessi joutuu pysähtymään

  20. Semaforit Tavallisia yleisiä semaforeja • P() (vähentää arvoa) • V() (kasvattaa arvoa) • tryP() Jälleen, tryP mahdollistaa sen, että koko prosessin ei tarvitse pysähtyä yhden säikeen pysähtymisen takia

  21. Readers/Writer Lock Sallii useamman lukijan samanaikaisesti lukon suojaamalle alueelle. Kun kirjoittaja varaa alueen, kaikki muu toiminta on estetty. • rw_enter() yrittää päästä alueelle sisään • rw_exit() vapauttaa lukon • rw_tryenter() kuten enter(), mutta ei vaadi pysähtymistä • rw_downgrade() kirjoittaja muuttaa lukon lukemiseksi, jos muita kirjoittajia ei ole odottamassa, kaikki odottavat lukijat päästetään sisään. • rw_tryupgrade() yrittää muuttaa lukon lukijasta kirjoittajaksi

  22. Ehtomuuttujat (condition variables) • käytetään yhdessä mutexin kanssa • pakottaa säikeen odottamaan, että jokin ehto muuttuu todeksi • primitiivit: • wait() • signal() • broadcast() Mutexin avulla voidaan määritellä ehto, joka on monimutkainen

  23. Muistinhallinta • koneriippumaton: muistinhallintaan erilaisia menetelmiä • aikaisemmat jakoivat muistin suoraan, uudemmat käyttävät sivutettua virtuaalimuistia • Kaksi rinnakkaista järjestelmää: sivutus ja kernelin muistin osoitus

  24. Sivujen korvaaminen • kaikki saatavilla olevat sivut listana page frame data tablessa, kun vapaana oleva tila tippuu tietyn kynnyksen alle, kernel ottaa käyttöönsä sivuja päästäkseen kynnyksen yli • korvattava sivu valitaan kelloalgoritmin kehittyneemmän version avulla, jota nimitetään kaksikätiseksi kelloalgoritmiksi • uudessa algoritmissa ensimmäinen käsi merkitsee sivun referenssibitin arvoksi 0 ja toinen arvoksi 1, jos sivuun on viitattu sen jälkeen kun ensimmäinen käsi sen käsitteli

  25. Käytetään kahta parametriä: scanrate (kertoo kuinka usein tehdään) ja handspread (kahden käden välinen etäisyys). Scanrate kasvaa kun käytössä olevan muistin määrä vähenee. Käsien välinen etäisyys toimii samalla tavalla. Näillä kahdella yhdessä voidaan optimoida muistinkäyttöä tilannekohtaisesti.

  26. Kernelin muistin osoitus • pienien tietojen sijoittamiseen muistiin (pieniä puskureita, zombieiden tietoa, jne) • käytetään ns. ’lazy buddy systemiä’, joka on nopeampi ja tehokkaampi kuin esim. best-fit tai first-fit muistiinsijoitusmenetelmät

  27. Perinteinen UNIX-ajoitus • Korvattu nykyisin toisella menetelmällä • Tavoitteena saada hyvät vasteajat käyttäjille, mutta taata se, että taustalla pyörivät prosessit eivät pääse nälkiintymään. • multilevel feedback queye (MFQ), yhden sekunnin rajalla • prioriteetti perustuu historiaan ja prosessin tyyppiin

  28. Prioriteetit lasketaan uudestaan kerran sekunnissa • CPU ja nice ovat rajoitettuja, jotta ne eivät pääse liian ylös prioriteetissä • prioriteeteissa käytetään myös tasoja, jotka ovat • swapper • lohko-I/O-laitteistojen hallinta • tiedoston käsittely • merkki-I/O-laitteistojen hallinta • käyttäjän prosessit Hierarkia mahdollistaa hyvän I/O-laitteiden käytön.

  29. Moderni UNIX-ajoitus • Uudistettu täysin: suunniteltu antamaan korkein prioriteetti reaaliaikaisille prosesseille, sen jälkeen kernelin prosesseilla ja alin käyttäjien prosesseille, joita kutsutaan myös time-shared –prosesseiksi • kaksi suurta muutosta: • irrotettava staattinen prioriteettiajoitus ja 160 prioriteettitason joukko, joka jaetaan kolmen luokan kesken • irrottamispisteet, joissa suorituksessa oleva prosessi voidaan turvallisesti irroittaa

  30. Tosiaikaiset prosessit (prioriteettitasot 159-100): suoritetaan aina ennen muita prosesseja, voivat käyttää hyväkseen irrottamispisteitä • Kernel (99-60): suoritetaan aina ennen käyttäjäprosesseja prosesseja • Time-shared (59-0): Muut käyttäjäprosessit kuin tosiaikaiset. Alin prioriteettitaso.

  31. UNIX I/O • jokaista I/O-laitetta kohti on oma erikoistiedosto. Tiedostojärjestelmä hallitsee niitä ja niitä käsitellään kuin datatiedostoja • hyvä yhtenäinen rajapinta kaikille prosesseille • pyynnöt kohdistetaan tiedostolle • voi olla puskuroitu tai puskuroimaton

More Related