2025-02-17 susitinkame per Teams.
Reikalavimai
Bendrieji reikalavimai yra šie:
Turi būti pateiktas realios mašinos aprašas. Aprašą turi sudaryti:
-
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.
- 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.3) Virtualios mašinos bendravimo su įvedimo/išvedimo įrenginiais mechanizmo aprašymas.
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.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.
- 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)
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:

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:
- 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.3) Nuorodų registrai:
DS – Data Segment – rodyklė į duomenų segmentą atmintyje.
ST – Stack Segment – rodyklė į steko segmentą atmintyje.
PC – Program Counter – jame saugomas einamosios komandos žodžio indeksas.4) Loginiai registrai:
SP – jame saugomas steko viršūnės žodžio indeksas.
SF – Status Flag – pagal palyginimo operacijos rezultatą jis įgyja reikšmes: 0 – jei daugiau, 1 – jei lygu, 2 – jei mažiau.Bendra procesoriaus schema atrodo taip:
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.

- 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ę.
2) Logikos operacijų bitinės komandos: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;
AND – atlieka dviejų viršutinių steko elementų
konjunkciją, SP sumažina vienetu ir rezultatą priskiria steko viršūnei.
3) Palyginimo komanda: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);
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: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.
PUSH – steko viršūnė SP padidinama vienetu ir į ja
patalpinamas registre DR esantis žodis.
6) Valdymo komandos: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--;
JMxy – nesąlyginio valdymo perdavimo komanda. Ji
reiškia, kad valdymas turi būti perduotas kodo segmento žodžiui,
nurodytam adresu 10*x + y.
7)Įvedimo/Išvedimo komandos: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.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į.
PDRW – registre DR esantį žodį traktuoja kaip skaitinę informaciją ir išveda skaičių į išvedimo Įrenginį.
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