Tietokoneen toiminta kesä -99

Laskuharjoitus 6 (maanantai 16.8.)

1. Vastaa seuraaviin kysymyksiin
a) Miksi käännös tehdään kahdessa vaiheessa?
b) Ajatellaan prosessimallia ja sen tiloja.

2. Käännä seuraava rekursiivinen aliohjelma konekielelle:

         static long Duo(int n) {
            if n < 1 then return 1 else
            return Duo(n-1)+n+1;
         }
Kirjoita myös yksinkertainen pääohjelma, jossa kutsutaan metodia Duo.

3. Laadi symbolisella konekielellä ohjelma, joka koostuu pääohjelmasta ja funktiosta KArvo. Funktio KArvo saa parametrikseen taulukon ensimmäisen muistipaikan osoitteen ja peräkkäisiin muistipaikkoihin tallennetun taulukon koon. Se palauttaa kutsujalle taulukon lukujen keskiarvon. Pääohjelmassa varataan tilaa taulukolle 100 muistipaikkaa, luetaan näppäimistöltä taulukon koko (jonka pitää olla pienempi kuin 100), ja tämän jälkeen luetaan näppäimistöltä taulukon alkiot. Lopuksi tulostetaan lukujen keskiarvo (funktion KArvo avulla laskettuna).

4. Esitä kuvan avulla, kuinka seuraavan Java-luokan kahdelle ilmentymälle varataan tilaa muistista. Oletetaan muuttujien tilanvarauksen alkavan keskusmuistin muistipaikasta 10000 ja olkoon muistisanan pituus 4 tavua. Kokonaisluvut esitetään 32 bitillä, loogiset arvot yhdellä bitillä.

              class DataStructures{ 
                     int i = 0; 
                     static int j; 
                     private int k; 
                     boolean [] A = new boolean[15000]; 
                     int[][] B = new int[4][3]}; 

5. Selitä yksityiskohtaisesti, kuinka prosessori ja käyttöjärjestelmä toimivat, kun suorituksessa olevan prosessin aikaviipale täyttyy. Selostuksestasi tulee siis käydä ilmi vastaukset ainakin seuraaviin kysymyksiin:

6. Anna esimerkkejä tilanteista, jolloin on järkevää, että keskeytyksen käsittelyn jälkeen jatketaan eri käyttäjäprosessia (user process) kuin mikä oli suoritusvuorossa keskeytyksen tapahtuessa. Anna myös esimerkkejä tilanteista, jolloin keskeytyksen jälkeen on järkevää jatkaa saman prosessin suoritusta.