АОР2/К2 2023
Други колоквијум 2023. године одржан је 12. маја, трајао је 75 минута и сваки задатак је вредео 5 бодова. Први задатак радио се у вежбанци, док је за други задатак био дат формулар. Поставка овог рока није тренутно доступна са странице предмета.
1. задатак
Поставка
Код хардверске виртуализације[sic] користи се техника пратеће[sic] табела страница (Shadow Page Tables). Описати технике за ажурирање пратећа[sic] табела страница уколико гост начини промене табеле страница госта.
Решење
Сличан задатак појавио се на колоквијуму 2021. године, где је написано и његово решење.
2. задатак
Поставка
Адресни простор процесора је величине 128KB, адресибилна јединица је 16 битна реч. Процесор је једноадресни са раздвојеним меморијским и У/И адресним простором и са хардверском подршком за виртуелизацију процесора.
Процесор поседује 16 битни акумулатор ACC, 16 битну програмску статусну реч PSW и 16 битне регистре опште намене R0 и R1. У регистру PSW постоји бит VM. Процесор прелази у мод виртуелизације постављањем бита VM на 1. Стек домаћина и госта расте према нижим локацијама, а SP указује на последњу заузету локацију. Процесор поседује и регистар VMPTR који указује на тренутну ВМ контролну структуру која се користи. У табели 1 је приказана ВМ контролна структура где се види садржај регистара домаћина, садржај регистара госта, бит мапа инструкција које изазивају ВМ излазак и разлог изласка из ВМ. Приказана структура се налази у меморији почевши од адресе 6000h. Сматрати да свако поље ове структуре заузима једну меморијску локацију и да се адреса ове структуре налази у регистру VMPTR.
Регистри | Домаћин | Гост |
---|---|---|
SP | FFFFh | EFFFh |
PC | 1008h | 7000h |
PSW | VM=1 | VM=0 |
ACC | 0h | 1h |
R0 | 0h | 0h |
R1 | 6000h | 0h |
Бит мапа инструкција (најнижа 4b поља): | 1101b | |
Разлог изласка: | 00h |
Поља приказане ВМ контролне структуре су смештена у меморији тако да су прво смештена поља стања домаћина, па поља стања госта и на крају поља која представљају бит мапу инструкција и разлог изласка. Вредност 1 бита у бит мапи инструкција изазива ВМ излазак. Битови бит мапе инструкција се односе на следеће инструкције: бит 0 — LD, бит 1 — ST, бит 2 — PUSH и бит 3 — POP. Сматрати да инструкција HALT увек изазива ВМ излазак. Разлог изласка може да има следеће вредности: 00 — извршавање HALT инструкције, 00 — извршавање HALT инструкције, 01 — извршавање LD инструкције, 02 — извршавање ST инструкције, 03 — извршавање POP инструкције и 04 — извршавање PUSH инструкције. Сматрати да се приликом ВМ уласка врши само учитавање регистара који представљају стање госта из ВМ контролне структуре, а да се приликом ВМ изласка прво врши чување стања госта у поља госта ВМ контролне структуре, а затим учитавају регистри који представљају стање домаћина из ВМ контролне структуре у регистре процесора.
На слици 1, дат је део кода који је учитан у оперативну меморију рачунара, водеће нуле адреса и података нису приказане. Инструкција на адреси 1000h означена је као 1. (прва) по редоследу извршавања, а свака следећа инструкција која се извршава означена је следећим редним бројем. Почетни садржај регистра PC је 1000h. Резултат дати након фазе извршења инструкције. Приликом ВМ изласка у посебном реду је потребно назначити ново стање ВМ контролне структуре, вредност акумулатора домаћина и вредност VM бита регистра PSW домаћина. Приликом сваке измене ВМ контролне структуре потребно је написати ново стање поља госта и стања бит мапе инструкција и разлога изласка ВМ контролне структуре у табели стања ВМ контролне табеле и назначити у решењу где се користи ново стање. Сматрати да су све адресе на слици 1 физичке адресе.
Адреса | Инструкција |
---|---|
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 |
Решење
Р.б. | Адреса | Инструкција | ACC [h] | ВМ контролна структура | VM | Коментар[1] |
---|---|---|---|---|---|---|
0 | - | 1 | 0 | |||
1 | 1000h | VON | - | 1 | 1 | Ушли смо у режим виртуелизације, па се пали VM бит. |
2 | 1001h | LD #0h | 0h | 1 | 1 | |
3 | 1004h | ST 2000h | 0h | 1 | 1 | MEM[2000h] = 0h |
4 | 1007h | VLAUNCH | 1h | 1 | 0 | Учитавамо стање госта из ВМ контролне структуре. |
5 | 7000h | LD #0h | 0h | 1 | 0 | Дошло је ВМ изласка услед извршавања LD инструкције јер је бит 0 мапе постављен на 1. |
0h | 2 | 1 | Чувамо стање госта и учитавамо стање домаћина из ВМ контролне структуре. | |||
6 | 1008h | LD (R1)Dh | 1h | 2 | 1 | Учитавамо разлог изласка у акумулатор. |
7 | 100Bh | CMP #0h | 1h | 2 | 1 | Проверавамо да ли је дошло до HALT. |
8 | 100Eh | JZ 1027h | 1h | 2 | 1 | Није, па зато не скачемо. |
9 | 1011h | CMP #4h | 1h | 2 | 1 | Проверавамо да ли је дошло до PUSH. |
10 | 1014h | JNZ 101Dh | 1h | 2 | 1 | Није, па зато скачемо. |
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 | Учитавамо стање госта из ВМ контролне структуре. |
15 | 7003h | ST 7500h | 0h | 2 | 0 | MEM[7500h] = 0h, није дошло до ВМ изласка услед извршавања ST инструкције јер је бит 1 мапе постављен на 0. |
16 | 7006h | INC | 1h | 2 | 0 | INC инструкција нема свој бит у мапи. |
17 | 7007h | PUSH | 1h | 2 | 0 | SP = EFFEh, MEM[EFFEh] = 1h, дошло је ВМ изласка услед извршавања PUSH инструкције јер је бит 2 мапе постављен на 1. |
0h | 3 | 1 | Чувамо стање госта и учитавамо стање домаћина из ВМ контролне структуре. Вредно је напоменути да се ниједном током задатка не мења стање домаћина у ВМ контролној структури. | |||
18 | 1008h | LD (R1)Dh | 4h | 3 | 1 | Учитавамо разлог изласка у акумулатор. |
19 | 100Bh | CMP #0h | 4h | 3 | 1 | Проверавамо да ли је дошло до HALT. |
20 | 100Eh | JZ 1027h | 4h | 3 | 1 | Није, па зато не скачемо. |
21 | 1011h | CMP #4h | 4h | 3 | 1 | Проверавамо да ли је дошло до PUSH. |
22 | 1014h | JNZ 101Dh | 4h | 3 | 1 | Јесте, па зато не скачемо. |
23 | 1017h | LD #5h | 5h | 3 | 1 | |
24 | 101Ah | ST (R1)Ch | 5h | 4 | 1 | Мењамо бит мапу инструкција у ВМ контролној структури тако да спречимо излазак на POP инструкцију. |
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 | Учитавамо стање госта из ВМ контролне структуре. |
29 | 7008h | POP | 1h | 4 | 0 | SP = EFFFh, због претходно измењене мапе не излазимо. |
30 | 7009h | HALT | 1h | 4 | 0 | |
0h | 5 | 1 | Чувамо стање госта и учитавамо стање домаћина из ВМ контролне структуре. | |||
31 | 1008h | LD (R1)Dh | 0h | 5 | 1 | Учитавамо разлог изласка у акумулатор. |
32 | 100Bh | CMP #0h | 0h | 5 | 1 | Проверавамо да ли је дошло до HALT. |
33 | 100Eh | JZ 1027h | 0h | 5 | 1 | Јесте, па зато скачемо. |
34 | 1027h | VOFF | 0h | 5 | 0 | Изашли смо из режима виртуелизације, па се гаси VM бит. |
35 | 1028h | HALT | 0h | 5 | 0 |
Стање | |||||
---|---|---|---|---|---|
Гост | 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 |
Бит мапа инструкција | 1101b | 1101b | 1101b | 0101b | 0101b |
Разлог изласка | 00h | 01h | 04h | 04h | 00h |