Harjoitusten vastaukset

Tietokoneen toiminta, Itseopiskelukurssi, HT 4 vast
HUOM: Katso nämä vastaukset vasta tehtyäsi itse tehtävät. Oppiminen tapahtuu pääasiassa tehtäviä ratkottaessa. Vastauksen katsominen heti kättelyssä on hyvän tehtävän hukkaanheittämistä oppimisen näkökulmasta.

  1. Hamming koodi.
    1. Näytä, miten virheenkorjaava Hamming koodi havaitsee ja korjaa virheen kun 7-bittisessä datassa "011 0100" kolmas bitti vasemmalta lukien muuttuu virheelliseksi dataksi: "010 0100".
      Näissä 7 bitissä on mukana sekä varsinainen data että tarkistusbitit.
      Datassa on 3 pariteettibittiä: 011 0100. Virheellisen datan 010 0100 yhteydessä bittiä 5 valvovat pariteettibitit 4 ja 1 oikealta lukien (010 0100) ovat virheellisiä (bitti 1 tarkistaa bittejä 1,3,5,7 ja bitti 4 tarkistaa bittejä 4,5,6,7), joten bitti 5=4+1 oikealta lukien (010 0100) on virheellinen. Koodin tarkistuksen tekevä piiri kääntää kyseisen bitin, joten data korjautuu alkuperäiseen muotoon 011 0100.
    2. Montako piuhaa (johdinta, bittiä) tarvitaan 32-bittisen data-väylän turvaamiseksi virheenkorjaavaa Hamming-koodia käyttäen? 6.
      (Haluamme siis pystyä kerralla siirtämään 32 bittiä todellista dataa tarkistusbittien lisäksi)
    3. Miksi Hamming-koodin käyttö ei ole hyvä ratkaisu paikallisverkkojen tiedonsiirron turvaamiseen?
      Kun paikallisverkon tiedonsiirrossa tapahtuu virheitä, niitä tulee yleensä ryppäinä. Hamming-koodi ei ole hyvä havaitsemaan ja korjaamaan kovin monen perättäisen bitin virhettä.
       
  2. Oletetaan, että TTK-91 -koneelle on tehty käyttöjärjestelmä. Käyttöjärjestelmään kuuluu yhtenä osa-alueena prosessien hallinta. Oletetaan, että kellolaitekeskeytyksen takia ollaan päädytty tilanteeseen, jossa suoritusvuorossa olevaa prosessia vaihdetaan.
    1. Miten ja mihin aikaisemmin suorituksessa olleen prosessin tiedot talletetaan? Mitkä tiedot täytyy ottaa talteen?
      Suorituksessa olleen prosessin suoritinympäristö (rekistereiden arvot) talletetaan prosessin PCB:hen muistiin. Talteen otetaan kaikki rekistereiden arvot siten, että suoritus voi sitten aikanaan jatkua uudelleen seuraavana vuorossa olevan konekäskyn alusta pitäen. Suorituksen tulee jatkua aivan samalla tavalla kuin jos suoritus ei olisi keskeytynytkään.
    2. Miten ja mistä uuden prosessin tiedot saadaan suorittimelle? Mistä käskystä uuden prosessin suoritus alkaa? Miten suoritusvuoro vaihtuu uudelle prosessille?
      Suoritinympäristö ladataan muistissa olevasta procsessin PCB:stä. Ensin ladataan kaikki muut rekisterit ja kun viimein PC vaihtuu, niin samalla hetkellä suoritusvuoro siirtyy uuden prosessin koodiin. Suoritusvuorossa on sama käsky, joka oli ollut suoritusvuorossa silloin kuin tämän prosessin suoritus keskeytettiin.
    3. Mikä on suorittimen tila (käyttäjä, etuoikeutettu) alkaen juuri ennen kellolaitekeskeytyshetkeä siihen asti kun uuden prosessin ensimmäisen käsky suoritetaan?
      Käyttäjätila, normaali suoritus, kellolaitekeskeytys -> etuoikeutettu tila, tallenna keskeytyneen prosessin suoritinympäristö, käsittele keskeytys, valitse uusi prosessi, palauta sen suoritinympäristö -> käyttäjätila, uusi prosessi jatkaa suoritustaan.
       
  3. Konekäskyn osoiteosa. Ttk-91 koneen konekäskyn osoiteosa on vain 16-bittinen. Tämä asettaa rajoituksia käskyssä olevien vakioiden koolle.
    1. Mikä on suurin positiivinen luku, joka voidaan esittää käskyssä vakiona? Miten tulee toimia, jos tarvitaankin suurempaa vakiota? Esimerkiksi lukua 6543210?
      Vakion esitysmuoto on etumerkillinen kokonaisluku, suurin 15-bittinen luku on 32767.
      Talletetaan se muistiin vakiona, ja viitataan muistissa olevaan tietoon: iso dc 6543210.
    2. Mikä on pienin negatiivinen luku, joka voidaan esittää käskyssä vakiona? -32767.
    3. Entä miten tulisi menetellä, jos tarvitaan suurta vakiota indeksoidun osoitusmoodin kanssa? Esimerkiksi, jos halutaan lukea data osoitteesta (R1)+666666?    
      Yhteenlasku pitää suorittaa koodilla pelkän tiedonosoitusmuodon asemesta:
      add r1, isoluku         load r2, 0(r1)
    4. Mitä hyötyä/haittaa on siitä, että konekäskyn osoiteosa on (vain) 16-bittinen?      Se on pieni ja vie vähän tilaa.
    5. Kuka päättää, missä C-kielisessä olevassa ohjelmassa oleva vakio (esim. luku 7 lauseessa X += 7; ) sijoitetaan suoritusaikana? Mitä etua/haittaa tästä on?      Kääntäjä.
    6. Mitä hyötyä/haittaa on varata jokin rekisteri koko ajan tarvittavaa vakiota (esim. luku 1) varten?    
      Nopeus. Tuhlaa rekisterin, jolle voisi olla muutakin käyttöä.
    7. Mitä hyötyä/haittaa on tallettaa usein tarvittavaa vakio (esim. luku 1) literaalialueelle (data-alueelle)?
      Se on hidasta. Sitä voi muuttaa tarpeen vaatiessa. Literaalialue voi myös olla suojattu, jolloin siellä olevia arvoja ei voi muuttaa kuten ohjelmen data-alueella olevaa tietoa.

  4.  
  5. Prosessin tilat. Luennolla 8 [Stal10 tai Stal06, Ch 8.2] esitettiin prosessin elinkaarimalli, jossa prosessilla on 5 erilaista tilaa. Anna kullekin allaolevalle tilanteelle luonteeltaan kaksi (2) erilaista esimerkkiä. Mainitse myös, kuka (mikä prosessi) aiheutti tilasiirtymän ja mitä tilanmuutoksessa tapahtuu käyttöjärjestelmän tietorakenteissa?
    1. Prosessi P siirtyy "luonti" tilasta "odottaa" tilaan.
      Esim. uusi prosessi järjestelmässä, mutta joutuu odottamaan vapaata muistitilaa heti kättelyssä. Voi myös olla, että käyttöjärjestelmä sallii vain tietyn määrän prosesseja kerrallaan suoritukseen. P odottaa muistitilan vapautumis -jonossa tai moniajoasteen alenemista odottavien prosessien jonossa.
    2. Prosessi P siirtyy "suorituksessa" tilasta "odottaa" tilaan.
      Esim. prosessi P jäi odottamaan I/O:ta tai viestiä joltain toiselta prosessilta. P:n suoritinympäristö kopioidaan sen PCB:hen muistiin ja seuraavan prosessin Q suoritinympäristö kopioidaan sen PCB:stä suorittimelle. Q saa suoritusvuoron ja P odottaa I/O-laitteen jonossa tai sille itselleen saapuvien viestien jonossa.
    3. Prosessi P siirtyy "valmis suoritukseen" tilasta "suorituksessa" tilaan.
      Esim. aikaisemmin suorituksessa ollut prosessi R jäi odottamaan I/O:ta, se valmistui tai se joutui antamaan suoritusvuoron muille välillä. Prosessin R suoritinympäristö kopioidaan sen PCB:hen muistiin ja prosessin P suoritinympäristö kopioidaan sen PCB:stä suorittimelle. P saa suoritusvuoron ja R jää odottamaan I/O-laitteen jonoon tai valmis suoritukseen -jonoon, tai sitten R (sen PCB) oli jo poistettu järjestelmästä, jos R:n suoritus päättyi.
    4. Prosessi P siirtyy "suorituksessa" tilasta "valmis suoritukseen" tilaan.
      Käyttöjärjestelmä päätti antaa jollekin toiselle prosessille suoritusvuoron tai uusi korkean prioriteetin omaava prosessi saapui valmis suoritukseen -tilaan ja käyttöjärjestelmä haluaa antaa sille välittömästi suoritusvuoron. P:n suoritinympäristö kopioidaan sen PCB:hen muistiin ja seuraavan prosessin Q suoritinympäristö kopioidaan sen PCB:stä suorittimelle. Q saa suoritusvuoron ja P odottaa valmis suoritukseen -jonossa.
    5. Prosessi P siirtyy "valmistunut tai tapettu" tilaan.
      Prosessi P: suoritus päättyi tai se tapettiin. P:n käyttämät tiedostot suljetaan, sen muistialueet ja muut resurssit (esim. PCB) vapautetaan uusien prosessien käyttöön. Käyttöjärjestelmä valitsee seuraavan prosessin Q suoritukseen, Q:n suoritinympäristö kopioidaan sen PCB:stä suorittimelle ja Q saa suoritusvuoron.
       
  6. Prosessi ja I/O
    1. Mitä tapahtuu, jos Ready-to-Run jono on tyhjä?
      Se ei ole - aina on jokin ajovalmis prosessi. Jos ei muuta, niin ns. taustaprosessi, joka ei tee mitään hyödyllistä. Uudemmissa läppäreissä voi tosin olla virransäästöominaisuus, minkä avulla kone voidaan laittaa hibernaatio-tilaan, jos ei ole mitään hyödyllistä tekemistä.
    2. Voiko samasta ohjelmasta olla monta prosessia yhtä aikaa Ready-to-Run jonossa? Miten tai miksi ei?
      Totta kai voi olla. Ei ole mitään väliä, mistä ohjelmasta järjestelmässä olevat prosessit ovat. Joissakin käyttöjärjestelmissä samassa ohjelmasta olevat prosessit käyttävät jopa yhteisiä koodialueita.
    3. Tarvitseeko odotustilassa oleva prosessi lainkaan muistia? Miksi?
      Tarvitsee. Ainakin joidenkin prosessin kuvaajien (PCB) osien tulee olla aina muistissa, jotta käyttöjärjestelmä voi yleensä käsitellä prosessia. Käyttöjärjestelmän pitää aina pystyä antamaan perustiedot kaikista järjestelmässä olevista prosesseista, ja näiden tietojen pitää aina löytyä muistista kyseisten prosessien kuvaajista.
    4. Voiko odotustilassa olevan prosessin tietoja siirtää levylle? Mitä etua/haittaa tästä olisi?
      Jos prosessi joutuu olemaan odotustilassa kauan aikaa, niin jotkut käyttöjärjestelmät voivat siirtää osan prosessin muistalueista levylle, jotta muistitilaa vapautuisi aktiivisemmille prosesseille. Tällaisen prosessin muistialueet kopiodaan sitten takaisin muistiin esimerkiksi siinä yhteydessä, kun (jos) prosessi joskus myöhemmin tulee valmis suoritukseen -tilaan.
    5. Voiko tietokoneen toteuttaa ilman prosesseja? Mitä tästä seuraisi?
      Kyllä voi, mutta silloin järjestelmä suorittaa aina vain yhtä ja samaa laskentaa (prosessia). Tai sitten sovellusten sisälle pitää itse toteuttaa jokin prosesseja muistuttava rakennelma, joka sallii eri laskentojen vuorottelun järjestelmässä.
    6. Mitkä kaikki prosessit osallistuvat tavallisen levy-I/O:n toteutukseen? Missä tilassa ne suorittavat koodia?
      Tavallinen I/O:ta pyytävä (käyttäjätilassa suorittava) prosessi P, joka esim. SVC-käskyllä tai käyttöjärjestelmän toteuttamalla prosessien välisellä viestillä aktivoi (etuoikeutetussa tilassa suorittavan) laiteajurin A. Laiteajuri A kommunikoi laiteohjaimella olevia muistiin kuvattuja laiterekistereitä käyttäen laiteohjainprosessin L kanssa, joka suorittaa fyysisen I/O-laitteen kanssa operoinnin. Laiteohjainprosessi L suorittaa erillisellä laiteohjaimella, jolla yleensä ei ole eri tasoisia (käyttäjätila, etuoikeutettu tila) suoritustiloja, vaan kaikki sen prosessit (ehkä vain L) suorittavat kaikilla mahdollisilla oikeuksilla.

  7. Tämän viikon TitoTrainer tehtävät

Ylimääräisiä keskustelutehtäviä

  1. Miten vaihtaisit ohjelman suoritusaikana tietyn yhteenlaskukäskyn vähennyslaskuksi? Millainen ohjelmanpätkä tämän tekisi ja missä tilanteessa tällainen toiminta olisi järkevää?

  2. Jos muistsisa olevan muuttujan arvoa muutetaan, niin milloinka muutettu tieto tulee kirjoittaa välimuistiin ja/tai keskusmuistiin? Mitä haittaa/etua sillä on, jos tietoa ei kirjoitetakkaan heti keskusmuistiin?

  3. Suorituksessa olevan prosessin vaihtaminen on aika suuri operaatio. Kuinka prosessin vaihdon vaatimaa työmäärää (kopiointia muistin ja rekistereiden välillä) voisi nopeuttaa?

  4. Miten säikeet suhtautuvat prosesseihin? Mitä etua/haittaa niillä on suhteessa prosesseihin?

  5. Anna kertauskysymystehtävän vastausvaihtoehtoja hyvine selityksineen seuraavaan kertauskysymykseen: "Mitkä seuraavista väitteistä liittyen  järjestelmässä suorituksessa olevaan ohjelmaan ovat totta?"
    1. Anna ainakin kolme vastausvaihtoehtoa, jotka ovat totta.
    2. Anna ainakin kolme vastausvaihtoehtoa, jotka eivät ole totta.
    3. Anna ainakin kaksi vastausvaihtoehtoa, jotka voivat ehkä olla totta tai sitten ei.
    Palauta vastausvaihtoehdot selityksineen ohjaajalle. Tee vastausvaihtoehdot ja selitykset sellaisiksi, jotta niiden käyttö olisi hyödyllistä muille kurssin opiskelijoille. Vastausta saatetaan käyttää uuden kertaustehtävän laadinnassa. Jos vastausta ei saa käyttää tähän tarkoitukseen, mainitkaa asiasta palautuksessa.