Osa 1: Järjestelmän rakenne sekä suoritin ja väylä Flashcards
Kysymyksiä liittyen Helsingin yliopiston Tietokoneen toiminta -kurssin luentoihin 1 ja 5
Mitkä ovat käskysyklin (käskyjen nouto- ja suoritussyklin) eri vaiheet?
Aloitus (alussa paikanlaskuri PC = 0)
Toistetaan seuraavaa:
- käskyn nouto ja PC=PC+1
- käskyn purku osiin ja tarvittaessa toisen operandin nouto
- käskyn suoritus
- keskeytysten tarkistus
HALT eli lopetus
Mitä käskysyklin eri vaiheissa tapahtuu?
ALOITUS: suoritin (prosessori, processor) aloittaa toiminnan.
Syklissä toistettavat vaiheet:
- KÄSKYN NOUTO: noudetaan seuraava käskyn Program Counterin osoittamasta muistipaikasta käskyrekisteriin (IR) ja kasvatetaan PC:n arvoa yhdellä.
- KÄSKYN PURKU osiin: operaatiokoodi, “vasen” rekisteri, osoitusmoodi, indeksirekisteri ja vakio-/osoiteosa, indeksirekisterin arvon ja vakio-osan yhteenlasku ja tarvittaessa toisen operandin nouto muistista 1 tai 2 kertaa TR:ään (Temporary Register, apurekisteri)
- KÄSKYN SUORITUS: suoritetaan käskyrekisterissä (IR) oleva konekäsky. Tämä saattaa muuttaa PC:n arvoa esim. hyppykäskyssä.
- KESKEYTYSTEN TARKISTUS: suoritin tarkistaa tilarekisteristä (SR, State Register), onko keskeytyksiä tullut. Jos on tullut, suorituksessa olevan prosessin tiedot (ainakin PC, SR, rekisterit R0-R7 ja BASE sekä LIMIT) talletetaan jonnekin (esim. muistissa sijaitsevaan prosessien tietoja ylläpitävään tietueeseen). PC:n arvoksi muutetaan kyseisen keskeytyksen keskeytyskäsittelijän osoite.
LOPETUS: (HALT) eli prosessin suorittaminen lopetetaan.
Minne kaikkialle suorittimella ja koko järjestelmässä yksittäinen konekäsky voi aiheuttaa tilanmuutoksia? Missä käskysyklin vaiheessa muutokset tapahtuvat?
Esimerkiksi käyttörekistereihin, ohjelmalaskuriin (PC, Program Counter), tilarekisteriin (SR, State Register) ja muistiin:
Rekistereihin joita voi muuttaa käskyllä, esim. TTK-91:ssä R0-R7: käskyn suoritusvaiheessa. Esimerkki: LOAD R1, =42
Program Counter (PC, ohjelmalaskuri):
- käskyn suoritusvaiheessa. Esim JUMP 77 -käsky asettaa PC:n arvoksi 77.
- noutovaiheessa PC=PC+1
Tilarekisteri (SR, State Register):
- missä vaiheessa vain koskien osaa keskeytysbittejä
- käskyn suoritusvaiheessa esim. vertailubitit Greater, Equal ja Less konekäskyllä COMP R2, =7
- käskyn suoritusvaiheessa osa keskeytysbiteistä, esim. nollalla jaon yrittäminen muuttaa tilarekisterin tilaa.
Keskusmuisti: suoritusvaiheessa, esim. käsky joka tallettaa muistiin.
On myös muita tilanmuutoksia, esimerkiksi MAR ja MBR -rekisterit muuttuvat konekäskyä noudettaessa ja voivat muuttua käskyä suorittaessa,
Mitä etuoikeutetussa tilassa voi tehdä mutta käyttäjätilassa ei?
Etuoikeutetussa tilassa (privileged / supervisor / kernel mode) eli käyttöjärjestelmätilassa voi:
- viitata kaikkialle muistiin
- suorittaa kaikkia konekäskyjä
Esimerkiksi käsky IRET (Interrupt return) on mahdollista suorittaa vain etuoikeutetussa tilassa.
Miksi prosessorilla kannattaa olla erikseen etuoikeutettu tila ja käyttäjätila?
Kaksi tilaa mahdollistavat sen, että voidaan tehdä luotettavia käyttöjärjestelmiä.
Jos kaikki prosessit (ohjelmat) pääsisivät lukemaan ja muokkaamaan muistia, kaikkia rekistereitä ja käyttämään kaikkia konekäskyjä, tietoturvasta ei voisi huolehtia, ja joku ohjelma voisi esimerkiksi tyhjentää koko koneen muistin.
Milloin ja miten suorittimen suoritustila voi muuttua käyttäjätilasta etuoikeutettuun tilaan?
Keskeytyskäsittelijään siirryttäessä ja kun kutsutaan käyttöjärjestelmän rutiinia SuperVisor Callilla (SVC).
- Keskeytyskäsittelijät toimivat etuoikeutetussa tilassa, joten kun järjestelmässä havaitaan tarve keskeytykselle, laitteisto muuttaa suorittimen tilan etuoikeutetuksi samalla kun se siirtää kontrollin keskeytyskäsittelijälle.
- Kun kutsutaan käyttöjärjestelmän rutiinia (ohjelmaa) tekemään jotain, esimerkiksi kirjoittamaan näytölle (SVC SP, =CRT), laitteisto muuttaa tilan etuoikeutetuksi käyttöjärjestelmän rutiinin suoritusta varten. Käyttäjätilassa ei voi kutsua kaikkia käyttöjärjestelmän rutiineja, joten laitteisto kuitenkin tarkistaa ensin saako rutiinia kutsua.
Miten etuoikeutetusta tilasta pääsee takaisin käyttäjätilaan?
Käyttämällä etuoikeutettua konekäskyä joka palauttaa tilan takaisin keskeytystä edeltävään suoritustilaan kuten IRET (Interrupt RETurn) tai vastaava. Joissakin järjestelmissä on myös käsky SVCR (SuperVisorCall Return).
Määrittele käsite keskeytys (poikkeus, interrupt, exception, fault).
Keskeytys on ennalta määritelty tilanne, joka voi sattua milloin tahansa, “yllättäen”, ja joka vaatii erityisen käsittelyn. Esimerkiksi nollalla jako tai I/O-laitteen antama signaali työn valmistumisesta.
Tällöin suorituksessa olevan ohjelman suoritus keskeytetään ja suoritin alkaa suorittaa keskeytyksen käsittelyä varten käyttöjärjestelmään ohjelmoitua aliohjelmaa ennalta määritetystä muistiosoitteesta.
Käyttöjärjestelmät tehdään niin, että kaikkiin keskeytyksiin ja vikatilanteisiin on varauduttu.
Missä keskeytykset käsitellään?
Keskeytyksien käsittelyä varten on käyttöjärjestelmään ohjelmoitu keskeytyskäsittelijöiksi kutsutut aliohjelmat.
Keskeytyskäsittelijä tekee tarvittavat toimenpiteet ja lopuksi palaa takaisin suorittamaan keskeytynyttä ohjelmaa (ellei sitä esimerkiksi lopeteta virheen takia).
Mitä eri keskeytystyyppejä on olemassa?
- Käskyn aiheuttamat virhetilanteet
- Käskyn aiheuttamat muut poikkeustilanteet
- Suorittimen ulkopuolelta tulevat signaalit.
Tarkemmin:
1. Käskyn aiheuttamat virhetilanteet Esimerkiksi: - Nollalla jako - Kokonaisluvun ylivuoto - Tuntematon käsky - Liukuluvun ylivuoto tai alivuoto
- Käskyn aiheuttamat muut poikkeustilanteet (ei siis virheet)
Esimerkiksi:
- SVC (SuperVisor Call), esim. SVC SP, =HALT
- I/O -konekäsky kuten IN R1, =KBD
- Käyttäjän määrittelemä poikkeus (esim. laitteistotuki Javan try/catch -operaatiolle) - Ulkoapäin suorittimelle tulevat signaalit
Esimerkiksi:
- Kellolaitekeskeytys (ajastin, timer), esim. 10 ms välein käyttöjärjestelmä saa suoritusvuoron
- Laitekeskeytys, I/O -keskeytys: I/O -laite, vaikkapa kovalevy, lähettää signaalin että se on tehnyt työnsä
- Laitteistovirhe
Mainitse 3 konekäskyn aiheuttamaa virhetilannetta.
Käskyn aiheuttamia virhetilanteita:
- Nollalla jako
- Kokonaisluvun ylivuoto
- Tuntematon käsky
- Liukuluvun ylivuoto tai alivuoto
Mainitse 3 konekäskyn aiheuttamaa keskeytystä vaativaa tilannetta, jotka eivät ole virhetilanteita
Käskyn aiheuttamia muita poikkeustilanteita:
- SVC (SuperVisor Call), esim. SVC SP, =HALT
- I/O -konekäsky kuten IN R1, =KBD
- Käyttäjän määrittelemä (esim. laitteistotuki Javan try/catch -operaatiolle)
Milloin tapahtuu kokonaisluvun ylivuoto?
Kokonaisluvun ylivuoto tapahtuu, jos tehdään laskutoimitus, jonka lopputulos ei mahdu rekisteriin.
Yksinkertainen esimerkki:
Oletetaan että laitteistossa on 8-bittinen rekisteri joka tallettaa vain ei-negatiivisia lukuja. Lisätään lukuun 255 eli 11111111 luku 1. Lopputulos olisi 1 0000 0000 eli 256, mutta koska rekisteri on vain 8-bittinen ja vastaus 9-bittinen, tapahtuu kokonaisluvun ylivuoto. Rekisterissä olisi nyt luku 0. Väärää lukua ei kuitenkaan siirretä rekisteriin, vaan sen sijaan käskyn suoritus keskeytyy ja laitteisto asettaa tilarekisterin ylivuotoa merkitsevät bitin (O, Overflow) päälle.
Miten laitteisto tietää, että on tapahtunut keskeytyskäsittelyä vaativa tilanne?
Tilarekisterissä (SR, State Register) on bitti jokaista keskeytystä varten.
Laitteisto tarkastaa nämä bitit aina käskyn suorituksen jälkeen, ennen uuden käskyn noutoa.
Poikkeus: laitteisto ei tarkasta keskeytyksiä jos keskeytykset on estetty. Laitteisto näkee tämän tilarekisterin bitistä D (Disable interrupts).
Milloin laitteisto tarkastaa onko tapahtunut keskeytyskäsittelyä vaativa tilanne?
Laitteisto tarkastaa keskeytykset käskyn suorituksen jälkeen, ennen uuden käskyn noutoa.
(Poikkeus: laitteisto ei tarkasta keskeytyksiä jos keskeytykset on estetty. Laitteisto näkee tämän tilarekisterin bitistä D (Disable interrupts).)