Yhdenaikainen suorittaminen on hyvä tapa toteuttaa käyttäjäystävällisiä ja loogisesti hyvin jäsenneltyjä ohjelmia. Sovellusohjelman jako useisiin prosesseihin olisi yksi tapa, mutta se on tehottomampaa, esim. muistinkäytön kannalta raskasta, ja monilta osiltaan tarpeettoman monipuolista. Ratkaisu ovat säikeet, eli yhden prosessin suorittaminen yhdenaikaisesti useasta eri paikasta. Yhden säikeen tarpeet --------------------- Prosessi voisi olla määritelty esimerkiksi niin, että se on "Prosessointiyksikkö" eli "vuoronnettava ohjelman suoritus". Säikeet lisäävät tähän esimerkiksi niin, että - "prosessi on ohjelman suoritus" ja - "säie on vuoronnettavissa oleva prosessin osasuoritus" Eli binääriseksi konekieleksi käännetty ohjelma ladataan käynnistettäessä tietokonelaitteistoon suoritusta varten, ja siitä tulee silloin prosessi. Yhdellä prosessilla on yksi säie tai useampia säikeitä. Jokainen säie vastaa yhtä vuoronnettavissa olevaa suoritusta; säikeet suorittavat prosessin ohjelmakoodia useimmiten eri paikoista (IP-rekisterin arvo huitelee eri kohdassa koodialueen osoitteita), ja eri paikkojen suoritus vuorontuu niin, että ohjelma näyttää jakautuvan rinnakkaisesti suoritettaviin osioihin. Vaikea selittää; puhhuh. Säikeellä on oma: - konteksti (rekisterit, mm. IP, SP, BP, jne..) - suorituspino (oma itsenäinen muistialue lokaaleita muuttujia ja aliohjelma-aktivaatioita varten) - ja vähän sälää säikeen ylläpitoa varten, mm. tunnisteet Säikeellä on omistajaprosessinsa kautta kaikki samat, säikeille yhteiset: - muistialueet - resurssit - ... jne. prosessin kaikki ominaisuudet Säie siis mahdollistaa moniajon yhden prosessin sisällä tehokkaammin kuin että olisi lapsiprosesseja. Toteutustapoja: - "User-level threads", ULT; Käyttöjärjestelmä näkee yhden vuoronnettavan asian. Prosessi itse vuorontelee säikeitään aina kun prosessi saa käyttöjärjestelmältä ajovuoron. * Yksi prosessi yhdellä prosessorilla. Multicore-prosessori ei voi nopeuttaa yhden prosessin ajoa. * Toisaalta toimii myös käyttöjärjestelmässä, joka ei varsinaisesti ole suunniteltu tukemaan säikeitä. * Lisäksi säikeiden välinen vuorontaminen voidaan tehdä millä tahansa tavalla, joka ei riipu käyttöjärjestelmän vuoronnusmallista. - "Kernel-level threads", KLT; Käyttöjärjestelmältä pyydetään säikeistys. Käyttöjärjestelmä näkee niin monta vuoronnettavaa asiaa kuin säikeitä on siltä pyydetty. * Moniprosessorijärjestelmissä voi kaikissa prosessoreissa ajaa eri säiettä kerrallaan. Mahdollista tehdä rinnakkaislaskennan kautta nopeammin suoritettavia prosesseja. * Toimii tietenkin vain käyttöjärjestelmässä, joka on suunniteltu tukemaan säikeitä vuoronnuksessa. * Nimeltään usein "light-weight process" KLT-toteutuksessa käyttöjärjestelmällä voisi esimerkiksi olla tallessa PCB:n lisäksi TCB-tiedot (Thread Control Block) seuraavalla tavoin: PCB(prosessielementti): TCB1: - säikeen 1 konteksti - säikeen 1 pinoalue - säikeen 1 ylläpitotiedot TCB2: - säikeen 2 konteksti - säikeen 2 pinoalue - säikeen 2 ylläpitotiedot ja niin edelleen... jokaiselle säikeelle eli suorituskohdalle olisi oma TCB. ... ja sitten PCB:n muu sisältö, joka on kaikille säikeille yhteinen. Sanoisiko TCB:tä suomeksi sitten "säie-elementiksi" osana prosessikokonaisuuden PCB:tä eli prosessielementtiä...