Työ voidaan tehdä 1-2 hengen ryhmässä.
Työ on jätettävä tarkastettavaksi syyskuun 97 loppuun mennessä.
TYö voidaan tehdä millä tahansa ohjlemointijärjestelmällä. Edellytyksenä on että se voidaan ilman eri toimenpiteitä suorittaa yliopiston unix, pc, tai mac laitteilla.
Työstä on jätettävä (voit jättää selostuksen html-muodossa linkkinä tai paperilla).
Tehtävä:
Ohjelmoi yksinkertainen käyttöjärjestelmä-emulaattori (käskytulkki - vuorontaja).
Käyttöjärjestelmäsi hoitaa prosessijoukon suoritusjärjestelmää ja simuloi prosessien suorittamista moniajoympäristössä. Kukin prosessi saa vuorollaan aikakvantin, jonka ajan se saa olla suoritustilassa.
Tämä tehtävä on osa laajemmasta tehtävästä, joka on jaossa tietotekniikan ilmoitustaulun vieressä olevassa lokerossa. Siitä saa teknistä tukea tehtävään. Tämä tehtävä on kuitenkin suppeampi versio tuosta tehtävästä.
Ohjelmoi käskytulkki CH, jonka tehtävänä on
Ensimmäisessä vaiheessa voit toteuttaa seuraavat käskyt (toteuta kukin omana aliohjelmana)
Ehdotus rakenteeksi
Käyttöjärjestelmäsi suorittaa vuorollaan joukkoa prosesseja. Tässä tehtävässä prosessien joukko on kiinteä. Niistä voi käyttäjä aktivoida ja lopettaa prosesseja.
Prosessien ja niiden suoritusvuorojen hallintaa varten perustetaan prosessitaulu PCT (Process Control Table). PCT koostuu PCB:istä (Process Control Block). Prosessitaulu voi olla kiinteän mittainen (esim 10). Näin ollen järjestelmässä voisi olla 10 prosessia. Kukin PCB sisältää yhden prosessin tiedot.
Prosessitaulu voisi olla esitelty vaikkapa seuraavasti
class PCB{
tyyppi PCB_Name
......
tyyppi PCB_Save
};
class PCT {
PCB table[10];
};
Käyttöjärjestemän prosesseja simuloidaan prosessilla runner, joka sisältää kolme prosessia 1, 2, ja 3. Prosessilla on oma ympäristönsä ymp, joka on talletettava prosessin PCB-alkioon.
Kun prosessi käynnistetään, sen ymp luetaan taulusta, kun prosessin suoritus keskeytyy, ymp on talletettava muistiin tauluun.
Runner-ohjelma on esitetty C++ kielisenä täällä.
Tee nyt käyttöjärjestelmä jolle voit antaa seuraavia käskyja.
Jos prosessi lopettaa itsensä (runner palauttaa arvon 1) prosessi siirretaan tilaan suspended ja sitä ei suoriteta ennen kuin käyttäjä mahdollisesti käynnistää sen uudelleen.
Voit rakentaa muitakin käskyjä tarpeen mukaan.
Jos tehtävässä on kysyttävää käytä sähköpostia mj@uwasa.fi.