Käyttöjärjestelmien ja niitä tukevien suorittimien perusrakenne
- Esimerkkiarkkitehtuurissamme on vain kaksi yleisrekisteriä (R0 ja R1).
Mikä on mielestäsi pienin järkevä rekisterien lukumäärä? Mitkä seikat
rajoittavat rekisterien lukumäärää?
- Kerro (esimerkiksi kuvan avulla), mitä tapahtuu, kun jokin seuraavista
keskeytyksistä tulee ohjelman suorituksen ollessa käyttäjän moodissa
(USER_MODE = true). Milloin kukin keskeytys voi tulla ja mihin
käyttöjärjestelmät tyypillisesti näitä keskeytyksiä käyttävät?
- Ohjelmoitu keskeytys (SVC).
- Ohjelmavirhekeskeytys (trap).
- I/O-keskeytys.
- Jos prosessorin muistiavaruus on lineaarinen, ts. minkäänlaista
segmentointia (segmentillä on base+limit-suojaus) ei ole käytössä, ei
useamman ohjelman samanaikainen muistiin lataaminen ole aivan
ongelmatonta. Hahmottele ratkaisu, jonka avulla ohjelma voidaan
ladata mielivaltaiseen paikkaan muistia ja ajaa sitä siellä. Millä
tavoilla prosessoriarkkitehtuuri voi helpottaa mielivaltaisessa
paikassa ajettavan koodin kirjoittamista?
- Minkä seuraavista toimenpiteistä pitää ehdottomasti olla kiellettyjä käyttäjän
moodissa (USER_MODE = true) [Kirjan tehtävä 1.6]:
- Lue käyttöjärjestelmän alueelta (LOAD).
- Aseta TIMER-rekisteri.
- Estä keskeytykset (IOF).
- Salli keskeytykset (ION).
- Hyppää käyttöjärjestelmän alueella olevaan osoitteeseen.
- Käsky, joka pysäyttää suorittimen seuraavan keskeytyksen tapahtumiseen
asti (WAIT).
- Moniajokäyttöjärjestelmiä on tehty myös alkuaikojen
mikroprosessoreille, joissa ei ollut muistinsuojauksesta tietoakaan.
Millaisia vaatimuksia tällainen järjestelmä asettaa siinä ajettaville
ohjelmille? Onko järjestelmä mahdollista suunnitella siten, että
ohjelmat varmasti ovat suojattuja toisiltaan? Mitä porsaanreikiä
järjestelmään saattaa jäädä? [Muunneltu kirjan tehtävä 1.7]