Operacinės Sistemos

Reikalavimai

Bendrieji reikalavimai yra šie:
Turi būti pateiktas realios mašinos aprašas. Aprašą turi sudaryti:
  1. 1.1) Kokie techninės įrangos komponentai sudaro realią mašiną: procesorius, vartotojo atmintis, supervizorinė atmintis, išorinė atmintis, duomenų perdavimo kanalai, įvedimo/išvedimo įrenginiai.
    1.2) Kiekvienas išskirtas techninis realios mašinos techninės įrangos komponentas turi būti detalizuojamas. Pavyzdžiui, aprašomos procesoriaus charakteristikos: kokios yra registrų grupės, kaip skaičiuojamas procesoriuje laikas, kaip nustatomas procesoriaus darbo režimas ir t.t.
    1.3) Galutinis realios mašinos aprašo rezultatas - tai realios mašinos techninės įrangos komponentų išsidėstymo vienas kito atžvilgiu ir tarpusavio sąveikos schema.
  2. Turi būti pateiktas virtualios mašinos aprašas. Aprašą turi sudaryti:
    2.1) Modeliuojamos virtualios mašinos sampratos aprašymas keliais sakiniais.
    2.2) Modeliuojamos virtualios mašinos loginių komponentų aprašymas. Privalomi komponentai:
    2.2.1) Virtualios mašinos atmintis.
    2.2.2) Virtualios mašinos procesorius.
    2.2.3) Virtualios mašinos komandų sistema. Komandos turi būti suskirstytos į grupes pagal paskirtį (aritmetinės, valdymo perdavimo ir t.t.).
    2.3) Virtualios mašinos bendravimo su įvedimo/išvedimo įrenginiais mechanizmo aprašymas.
    2.4) Virtualios mašinos interpretuojamojo ar kompiliuojamo vykdomojo failo išeities teksto formatas. Pavyzdžiui, kaip išskiriamas duomenų segmentas, kodo segmentas, kaip aprašomi duomenys ir t.t.)
    2.5) Modeliuojamos virtualios mašinos loginių komponentų sąryšio su realios mašinos techninės įrangos komponentais aprašymas.
  3. Trumpas aprašas, kaip virtuali mašina įsivaizduojama visos operacinės sistemos kontekste.
Papildomų balai skiriami už:
  • Ciklų instrukcijų. Pvz: LOOP, STOSB, LODSB (leidžiama įvesti požymių registrą)
  • Loginių operacijos instrukcijų ir sąliginiai valdymo perdavimai. Pvz: XOR, AND, OR, JG, JL, JC, JZ, JNZ (leidžiama įvesti požymių registrą)
  • Papildomo įrenginio valdymas Pvz. bateriją(įjungti krovimą/išjungti krovimą/patikrinti būseną), lemputė(įjungti/išjungti/patikrinti būseną)
  • Puslapių registre nurodomas vartotojo programos dydis ir maksimalus puslapių skaičius (a0, a1)
Pavyzdys

Pateikiamas pavyzdys nebūtinai tenkina visus keliamus reikalavimus. Šiuo pavyzdžiu siekiama parodyti, kaip galėtų būti, tačiau tai nereiškia, kad būtent taip ir privaloma atlikti užduotį. Iš tikrųjų, pavyzdys skirtas tam, kad iš dalies užvesti studentus ant kelio.

1) Realios mašinos bendroji schema
Tariame, kad OS funkcionuos ant mašinos, turinčios tik vieną, o ne kelis, procesorius!
Mašinos, kuriai yra projektuojama daugiaprogramė OS, bendroji schema yra:
real_m
2) Virtuali mašina
Virtuali mašina – tai tarsi realios mašinos kopija, tikriau – realios mašinos modelis tokiu pavidalu, kokį jį gali priimti mašinos vartotojas - žmogus. Virtuali mašina gali būti modeliuojama tiesiog ant realios mašinos pagrindo arba ant jau esamo programinio pagrindo. Tiek pirmuoju, tiek antruoju atveju, virtuali mašina tampa tarsi tarpininku tarp konkrečios mašinos ir jai taikomos programinės įrangos. Ji gali atlikti, pavyzdžiui, transliatoriaus vaidmenį. Nesvarbu, ar virtuali mašina konstruojama ant realaus, ar ant kurio nors lygmens programinio pagrindo, ji turi simuliuoti realios mašinos funkcionalumą pasiekdama per visus esamus lygmenis realią mašiną. Štai, pavyzdžiui, programa, parašyta virtualios mašinos mašininiu kodu, turi būti įvykdyta ir vartotojas turi gauti rezultatą. Tai gali vykti interpretuojant virtualios mašinos komandas kaip atitinkamas relios mašinos komandas ar jų rinkinį ir pan..
  • Atmintis. VM atmintis susidės iš 300 žodžių. Vienas žodis bus sudarytas iš 4B, t.y. 32bit. Atmintis bus tarsi segmentuota, t.y. susidės iš trijų segmentų po 100 žodių, į kuriuos bus įkeliamos atitinkamos VM komandomis parašytos programos dalys. Į duomenų segmentą bus įkeliama programos dalis tarp direktyvų DATASEG ir CODESEG. Į antrą atminties bloką iš 100 žodių bus įkeliamas programos kodas, t.y. dalis tarp direktyvos CODESEG ir paskutinės programos komandos, kuri privalo būti HALT. Trečia dalis – tai stekas. Juo operuojame komandų PUSH ir POP pagalba, tačiau, kaip matysime vėliau su steku dirba ir kitos VM procesoriaus komandos. Atmintis vizualiai atrodo taip:vm_mem
  • Operuojant su steku, standartiškai apdorojama tik jo viršūnė. Atminties dalis, į kurią užkraunamas programos duomenų segmentas, yra adresuojama tiesiogiai. Taip pat ir ta dalis, į kurią užkraunama pagrindinė programos dalis – kodas.
  • Procesorius. VM procesorius turės vieną duomenų registrą, tris segmentų registrus, du nuorodų registrus bei du loginius registrus.
    1) Duomenų registras:
    DR – Data Register – naudojamas duomenų (žodžių) pakrovimui į jį iš atminties ir iš jo į atmintį. Taip pat operacijose.
    2) Segmentų registrai:
    CS – Code Segment – rodyklė į kodo segmentą atmintyje.
    DS – Data Segment – rodyklė į duomenų segmentą atmintyje.
    ST – Stack Segment – rodyklė į steko segmentą atmintyje.
    3) Nuorodų registrai:
    PC – Program Counter – jame saugomas einamosios komandos žodžio indeksas.
    SP – jame saugomas steko viršūnės žodžio indeksas.
    4) Loginiai registrai:
    SF – Status Flag – pagal palyginimo operacijos rezultatą jis įgyja reikšmes: 0 – jei daugiau, 1 – jei lygu, 2 – jei mažiau.
    DF – Data Format – pagal iš atminties nuskaityto žodžio duomenų formatą jis įgyja reikšmes: 0 – nuskaitytas žodis kaip simboliai, 1 – nuskatytas žodis kaip sveikas skaičius su ženklu.
    Bendra procesoriaus schema atrodo taip:
real_m
  • VM procesoriaus komandų sistema.
Kiekvieną komandą sudaro 4B, tačiau kai kurių komandų atveju ne visi 4 baitai privalo būti užimti, t.y. gali būti tušti:
1)Aritmetinės komandos (darbo su sveikais skaičiais su ženklu):
ADD – sudeda du viršutinius steko elementus, sumažina steko rodyklę SP vienetu ir padeda rezultatą į steko viršūnę.
ST [SP – 1] = ST [SP – 1] + ST [SP]; SP--;
SUB – atima steko viršūnėje esantį elementą iš antro nuo viršaus steko elemento, steko rodyklę SP sumažina vienetu bei rezultatą priskiria steko viršūnei.
ST [SP – 1] = ST [SP – 1] – ST [SP] ; SP--;
MUL – sudaugina du viršutinius steko elementus, sumažina steko rodyklę SP vienetu ir padeda rezultatą į steko viršūnę.
ST [SP – 1] = ST [SP – 1] * ST [SP]; SP--;
DIV – padalina antrą nuo viršaus steko elementą iš viršūnėje esančiojo, sumažina SP vienetu ir padeda rezultatą į steko viršūnę.
ST [SP – 1] = ST [SP – 1] / ST [SP]; SP--;
NEG – registre DR esantį žodį pakeičia jam priešingu.
DR = 0 – DR;
2) Logikos operacijų bitinės komandos:
AND – atlieka dviejų viršutinių steko elementų konjunkciją, SP sumažina vienetu ir rezultatą priskiria steko viršūnei.
ST [SP – 1] = ST [SP – 1] & ST [SP]; SP--;
OR – atlieka dviejų viršutinių steko elementų disjunkciją, SP sumažina vienetu ir rezultatą priskiria steko viršūnei.
ST [SP – 1] = ST [SP – 1] ¦ ST [SP]; SP--;
NOT – atlieka registre DR esančio žodžio loginį neigimą (inversiją).
DR = !(DR);
3) Palyginimo komanda:
CMP – ši komanda palygina registre DR esantį žodį su steko viršūnėje esančiu žodžiu ir pagal palyginimo rezultatą formuoja registro SF reikšmę: 0 – jei DR > ST [SP], 1 – jei DR = ST [SP], 2 – jei DR < ST [SP].
4) Darbo su duomenimis komandos:
LBxy – į registrą DR užkrauna žodį iš duomenų segmento nurodytu adresu 10*x + y bei formuoja DF = 0 požymį, reiškiantį, kad registre DR – simbolinė informacija.
LWxy – į registrą DR užkrauna žodį iš duomenų segmento nurodytu adresu 10*x + y bei formuoja DF = 1 požymį, reškiantį, kad registre DR – sveikas skaičius su ženklu.
SWxy – registre DR esantį žodį, nepriklausomai nuo to ar tai simbolinė, ar skaitinė informacija, dedame į duomenų segmentą nurodytu adresu 10*x + y.
5) Steko operacijos:
PUSH – steko viršūnė SP padidinama vienetu ir į ja patalpinamas registre DR esantis žodis.
SP = SP + 1; ST [SP] = DR;
POP – steko viršūnėje esantis žodis talpinamas į registrą DR ir SP sumažinama vienemtu.
DR = ST [SP]; SP--;
6) Valdymo komandos:
JMxy – nesąlyginio valdymo perdavimo komanda. Ji reiškia, kad valdymas turi būti perduotas kodo segmento žodžiui, nurodytam adresu 10*x + y.
PC = 10*x + y;
JLxy – jeigu SF = 2, tai valdymas perduodamas nurodytu adresu 10*x + y.
If (SF = 2) PC = 10*x + y;
JExy – jeigu SF = 1, tai valdymas perduodamas nurodytu adresu 10*x + y.
If (SF = 1) PC = 10*x + y;
HALT – programos sustojimo taško komanda.
7)Įvedimo/Išvedimo komandos:
PDRB – registre DR esantį žodį traktuoja kaip keturis baitus, t.y. keturis simbolius ir juos išveda išvedimo įrenginį.
PDRW – registre DR esantį žodį traktuoja kaip skaitinę informaciją ir išveda skaičių į išvedimo Įrenginį.
  • VM modelio įvedimo įrenginiui pateikiamas programos failas turi būti tokios struktūros:
    DATASEG
    .
    .
    .
    CODESEG
    .
    .
    .
    HALT
  • Duomenų segmento apraše galimi tokie atvejai:
    DW - Išskiriamas vienas tuščias žodis skaitinei reikšmei.
    DW X - Išskiriamas vienas žodis ir į jį talpinama nurodyta skaitinė reikšmė.
    DB ssss - Išskiriamas vienas žodis ir į jį talpinami keturi nurodyti simboliai.
    DB nnnn - Tai rezervuota simbolinė konstanta, reiškianti \n.
    Kokia seka duomenys pateikiami duomenų segmento apraše, tokia tvarka jie talpinami ir į atmintį, skirtą duomenų segmentui.
    • Kodo pavyzdys:

    Programa skaiciuoja israiskos reiksme ir isveda rezultata
    Var = -((20 * 30 + 60 / 20) - (-1000));

    DATASEG
    DW 0
    DW 20
    DW 30
    DW 60
    DW -1000
    DB Rezu
    DB ltat
    DB as:
    DB nnnn
    CODESEG
    LW01
    PUSH
    LW02
    PUSH
    MUL
    LW03
    PUSH
    LW01
    PUSH
    DIV
    ADD
    LW04
    PUSH
    SUB
    POP
    NEG
    SW00
    LB05
    PRNT
    LB06
    PRNT
    LB07
    PRNT
    LW00
    PRNT
    LB08
    PRNT
    OUT
    HALT