AOR2/K2 2023
Drugi kolokvijum 2023. godine održan je 12. maja, trajao je 75 minuta i svaki zadatak je vredeo 5 bodova. Prvi zadatak radio se u vežbanci, dok je za drugi zadatak bio dat formular. Postavka ovog roka nije trenutno dostupna sa stranice predmeta.
1. zadatak
Postavka
Kod hardverske virtualizacije[sic] koristi se tehnika prateće[sic] tabela stranica (Shadow Page Tables). Opisati tehnike za ažuriranje prateća[sic] tabela stranica ukoliko gost načini promene tabele stranica gosta.
Rešenje
Sličan zadatak pojavio se na kolokvijumu 2021. godine, gde je napisano i njegovo rešenje.
2. zadatak
Postavka
Adresni prostor procesora je veličine 128KB, adresibilna jedinica je 16 bitna reč. Procesor je jednoadresni sa razdvojenim memorijskim i U/I adresnim prostorom i sa hardverskom podrškom za virtuelizaciju procesora.
Procesor poseduje 16 bitni akumulator ACC, 16 bitnu programsku statusnu reč PSW i 16 bitne registre opšte namene R0 i R1. U registru PSW postoji bit VM. Procesor prelazi u mod virtuelizacije postavljanjem bita VM na 1. Stek domaćina i gosta raste prema nižim lokacijama, a SP ukazuje na poslednju zauzetu lokaciju. Procesor poseduje i registar VMPTR koji ukazuje na trenutnu VM kontrolnu strukturu koja se koristi. U tabeli 1 je prikazana VM kontrolna struktura gde se vidi sadržaj registara domaćina, sadržaj registara gosta, bit mapa instrukcija koje izazivaju VM izlazak i razlog izlaska iz VM. Prikazana struktura se nalazi u memoriji počevši od adrese 6000h. Smatrati da svako polje ove strukture zauzima jednu memorijsku lokaciju i da se adresa ove strukture nalazi u registru VMPTR.
| Registri | Domaćin | Gost |
|---|---|---|
| SP | FFFFh | EFFFh |
| PC | 1008h | 7000h |
| PSW | VM=1 | VM=0 |
| ACC | 0h | 1h |
| R0 | 0h | 0h |
| R1 | 6000h | 0h |
| Bit mapa instrukcija (najniža 4b polja): | 1101b | |
| Razlog izlaska: | 00h | |
Polja prikazane VM kontrolne strukture su smeštena u memoriji tako da su prvo smeštena polja stanja domaćina, pa polja stanja gosta i na kraju polja koja predstavljaju bit mapu instrukcija i razlog izlaska. Vrednost 1 bita u bit mapi instrukcija izaziva VM izlazak. Bitovi bit mape instrukcija se odnose na sledeće instrukcije: bit 0 — LD, bit 1 — ST, bit 2 — PUSH i bit 3 — POP. Smatrati da instrukcija HALT uvek izaziva VM izlazak. Razlog izlaska može da ima sledeće vrednosti: 00 — izvršavanje HALT instrukcije, 00 — izvršavanje HALT instrukcije, 01 — izvršavanje LD instrukcije, 02 — izvršavanje ST instrukcije, 03 — izvršavanje POP instrukcije i 04 — izvršavanje PUSH instrukcije. Smatrati da se prilikom VM ulaska vrši samo učitavanje registara koji predstavljaju stanje gosta iz VM kontrolne strukture, a da se prilikom VM izlaska prvo vrši čuvanje stanja gosta u polja gosta VM kontrolne strukture, a zatim učitavaju registri koji predstavljaju stanje domaćina iz VM kontrolne strukture u registre procesora.
Na slici 1, dat je deo koda koji je učitan u operativnu memoriju računara, vodeće nule adresa i podataka nisu prikazane. Instrukcija na adresi 1000h označena je kao 1. (prva) po redosledu izvršavanja, a svaka sledeća instrukcija koja se izvršava označena je sledećim rednim brojem. Početni sadržaj registra PC je 1000h. Rezultat dati nakon faze izvršenja instrukcije. Prilikom VM izlaska u posebnom redu je potrebno naznačiti novo stanje VM kontrolne strukture, vrednost akumulatora domaćina i vrednost VM bita registra PSW domaćina. Prilikom svake izmene VM kontrolne strukture potrebno je napisati novo stanje polja gosta i stanja bit mape instrukcija i razloga izlaska VM kontrolne strukture u tabeli stanja VM kontrolne tabele i naznačiti u rešenju gde se koristi novo stanje. Smatrati da su sve adrese na slici 1 fizičke adrese.
| Adresa | Instrukcija |
|---|---|
| 1000h | VON |
| 1001h | LD #0h |
| 1004h | ST 2000h |
| 1007h | VLAUNCH |
| 1008h | LD (R1)Dh |
| 100Bh | CMP #0h |
| 100Eh | JZ 1027h |
| 1011h | CMP #4h |
| 1014h | JNZ 101Dh |
| 1017h | LD #5h |
| 101Ah | ST (R1)Ch |
| 101Dh | LD 2000h |
| 1020h | INC |
| 1023h | ST 2000h |
| 1026h | VRESUME |
| 1027h | VOFF |
| 1028h | HALT |
| 7000h | LD #0h |
| 7003h | ST 7500h |
| 7006h | INC |
| 7007h | PUSH |
| 7008h | POP |
| 7009h | HALT |
Rešenje
| R.b. | Adresa | Instrukcija | ACC [h] | VM kontrolna struktura | VM | Komentar[1] |
|---|---|---|---|---|---|---|
| 0 | - | 1 | 0 | |||
| 1 | 1000h | VON | - | 1 | 1 | Ušli smo u režim virtuelizacije, pa se pali VM bit. |
| 2 | 1001h | LD #0h | 0h | 1 | 1 | |
| 3 | 1004h | ST 2000h | 0h | 1 | 1 | MEM[2000h] = 0h |
| 4 | 1007h | VLAUNCH | 1h | 1 | 0 | Učitavamo stanje gosta iz VM kontrolne strukture. |
| 5 | 7000h | LD #0h | 0h | 1 | 0 | Došlo je VM izlaska usled izvršavanja LD instrukcije jer je bit 0 mape postavljen na 1. |
| 0h | 2 | 1 | Čuvamo stanje gosta i učitavamo stanje domaćina iz VM kontrolne strukture. | |||
| 6 | 1008h | LD (R1)Dh | 1h | 2 | 1 | Učitavamo razlog izlaska u akumulator. |
| 7 | 100Bh | CMP #0h | 1h | 2 | 1 | Proveravamo da li je došlo do HALT. |
| 8 | 100Eh | JZ 1027h | 1h | 2 | 1 | Nije, pa zato ne skačemo. |
| 9 | 1011h | CMP #4h | 1h | 2 | 1 | Proveravamo da li je došlo do PUSH. |
| 10 | 1014h | JNZ 101Dh | 1h | 2 | 1 | Nije, pa zato skačemo. |
| 11 | 101Dh | LD 2000h | 0h | 2 | 1 | |
| 12 | 1020h | INC | 1h | 2 | 1 | |
| 13 | 1023h | ST 2000h | 1h | 2 | 1 | MEM[2000h] = 1h |
| 14 | 1026h | VRESUME | 0h | 2 | 0 | Učitavamo stanje gosta iz VM kontrolne strukture. |
| 15 | 7003h | ST 7500h | 0h | 2 | 0 | MEM[7500h] = 0h, nije došlo do VM izlaska usled izvršavanja ST instrukcije jer je bit 1 mape postavljen na 0. |
| 16 | 7006h | INC | 1h | 2 | 0 | INC instrukcija nema svoj bit u mapi. |
| 17 | 7007h | PUSH | 1h | 2 | 0 | SP = EFFEh, MEM[EFFEh] = 1h, došlo je VM izlaska usled izvršavanja PUSH instrukcije jer je bit 2 mape postavljen na 1. |
| 0h | 3 | 1 | Čuvamo stanje gosta i učitavamo stanje domaćina iz VM kontrolne strukture. Vredno je napomenuti da se nijednom tokom zadatka ne menja stanje domaćina u VM kontrolnoj strukturi. | |||
| 18 | 1008h | LD (R1)Dh | 4h | 3 | 1 | Učitavamo razlog izlaska u akumulator. |
| 19 | 100Bh | CMP #0h | 4h | 3 | 1 | Proveravamo da li je došlo do HALT. |
| 20 | 100Eh | JZ 1027h | 4h | 3 | 1 | Nije, pa zato ne skačemo. |
| 21 | 1011h | CMP #4h | 4h | 3 | 1 | Proveravamo da li je došlo do PUSH. |
| 22 | 1014h | JNZ 101Dh | 4h | 3 | 1 | Jeste, pa zato ne skačemo. |
| 23 | 1017h | LD #5h | 5h | 3 | 1 | |
| 24 | 101Ah | ST (R1)Ch | 5h | 4 | 1 | Menjamo bit mapu instrukcija u VM kontrolnoj strukturi tako da sprečimo izlazak na POP instrukciju. |
| 25 | 101Dh | LD 2000h | 1h | 4 | 1 | |
| 26 | 1020h | INC | 2h | 4 | 1 | |
| 27 | 1023h | ST 2000h | 2h | 4 | 1 | MEM[2000h] = 2h |
| 28 | 1026h | VRESUME | 1h | 4 | 0 | Učitavamo stanje gosta iz VM kontrolne strukture. |
| 29 | 7008h | POP | 1h | 4 | 0 | SP = EFFFh, zbog prethodno izmenjene mape ne izlazimo. |
| 30 | 7009h | HALT | 1h | 4 | 0 | |
| 0h | 5 | 1 | Čuvamo stanje gosta i učitavamo stanje domaćina iz VM kontrolne strukture. | |||
| 31 | 1008h | LD (R1)Dh | 0h | 5 | 1 | Učitavamo razlog izlaska u akumulator. |
| 32 | 100Bh | CMP #0h | 0h | 5 | 1 | Proveravamo da li je došlo do HALT. |
| 33 | 100Eh | JZ 1027h | 0h | 5 | 1 | Jeste, pa zato skačemo. |
| 34 | 1027h | VOFF | 0h | 5 | 0 | Izašli smo iz režima virtuelizacije, pa se gasi VM bit. |
| 35 | 1028h | HALT | 0h | 5 | 0 |
| Stanje | |||||
|---|---|---|---|---|---|
| Gost | 1 | 2 | 3 | 4 | 5 |
| SP | EFFFh | EFFFh | EFFEh | EFFEh | EFFFh |
| PC | 7000h | 7003h | 7008h | 7008h | 700Ah[2] |
| PSW | VM=0 | VM=0 | VM=0 | VM=0 | VM=0 |
| ACC | 1h | 0h | 1h | 1h | 1h |
| R0 | 0h | 0h | 0h | 0h | 0h |
| R1 | 0h | 0h | 0h | 0h | 0h |
| Bit mapa instrukcija | 1101b | 1101b | 1101b | 0101b | 0101b |
| Razlog izlaska | 00h | 01h | 04h | 04h | 00h |