АОР2/К2 2023 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(K2 od danas, sve bez tabele izvršenja zasad // Edit via Wikitext Extension for VSCode)
 
м (Tabela // Edit via Wikitext Extension for VSCode)
 
Ред 1: Ред 1:
{{tocright}}
{{tocright}}
'''Други колоквијум 2023. године''' одржан је 12. маја, трајао је 75 минута и сваки задатак је вредео 5 бодова. Поставка овог рока није тренутно доступна са странице предмета.
'''Други колоквијум 2023. године''' одржан је 12. маја, трајао је 75 минута и сваки задатак је вредео 5 бодова. Први задатак радио се у вежбанци, док је за други задатак био дат формулар. Поставка овог рока није тренутно доступна са странице предмета.


== 1. задатак ==
== 1. задатак ==
Ред 99: Ред 99:
! Р.б. !! Адреса !! Инструкција !! ACC [h] !! ВМ контролна структура !! VM !! Коментар<ref>На колоквијуму није постојала ова колона, већ је она овде додата за додатна објашњења.</ref>
! Р.б. !! Адреса !! Инструкција !! ACC [h] !! ВМ контролна структура !! VM !! Коментар<ref>На колоквијуму није постојала ова колона, већ је она овде додата за додатна објашњења.</ref>
|-
|-
| 1   || 1000h  ||            || 0h      || 1                      || 0  ||
| 0   ||       ||            || -      || 1                      || 0  ||
|-
|-
| 2   || 1000h  ||             || 0h      || 1                      || 0 ||
| 1   || 1000h  || VON        || -      || 1                      || 1 || Ушли смо у режим виртуелизације, па се пали VM бит.
|-
|-
| 3   || 1000h ||             || 0h      || 1                      || 0 ||
| 2   || 1001h || LD #0h      || 0h      || 1                      || 1 ||
|-
|-
| 4   || 1000h ||             || 0h      || 1                      || 0 ||
| 3   || 1004h || ST 2000h    || 0h      || 1                      || 1 || MEM[2000h] = 0h
|-
|-
| 5   || 1000h ||             || 0h     || 1                      || 0  ||
| 4   || 1007h || VLAUNCH    || 1h     || 1                      || 0  || Учитавамо стање госта из ВМ контролне структуре.
|-
|-
| 6   || 1000h ||             || 0h      || 1                      || 0  ||
| 5   || 7000h || LD #0h      || 0h      || 1                      || 0  || Дошло је ВМ изласка услед извршавања LD инструкције јер је бит 0 мапе постављен на 1.
|-
|-
| 7    || 1000h  ||            || 0h      || 1                     || 0 ||
|     ||       ||            || 0h      || 2                     || 1 || Чувамо стање госта и учитавамо стање домаћина из ВМ контролне структуре.
|-
|-
| 8   || 1000h ||             || 0h     || 1                     || 0 ||
| 6   || 1008h || LD (R1)Dh  || 1h     || 2                     || 1 || Учитавамо разлог изласка у акумулатор.
|-
|-
| 9   || 1000h ||             || 0h     || 1                     || 0 ||
| 7   || 100Bh || CMP #0h    || 1h     || 2                     || 1 || Проверавамо да ли је дошло до HALT.
|-
|-
| 10  || 1000h ||             || 0h     || 1                     || 0 ||
| 8    || 100Eh || JZ 1027h    || 1h     || 2                     || 1 || Није, па зато не скачемо.
|-
|-
| 11  || 1000h ||             || 0h     || 1                     || 0 ||
| 9    || 1011h || CMP #4h    || 1h     || 2                     || 1 || Проверавамо да ли је дошло до PUSH.
|-
|-
| 12   || 1000h ||             || 0h     || 1                     || 0 ||
| 10   || 1014h || JNZ 101Dh  || 1h     || 2                     || 1 || Није, па зато скачемо.
|-
|-
| 13   || 1000h ||             || 0h      || 1                     || 0 ||
| 11   || 101Dh || LD 2000h    || 0h      || 2                     || 1 ||
|-
|-
| 14   || 1000h ||             || 0h     || 1                     || 0 ||
| 12   || 1020h || INC        || 1h     || 2                     || 1 ||
|-
|-
| 15   || 1000h ||             || 0h     || 1                     || 0 ||
| 13   || 1023h || ST 2000h    || 1h     || 2                     || 1 || MEM[2000h] = 1h
|-
|-
| 16   || 1000h ||             || 0h      || 1                     || 0  ||
| 14   || 1026h || VRESUME    || 0h      || 2                     || 0  || Учитавамо стање госта из ВМ контролне структуре.
|-
|-
| 17   || 1000h ||             || 0h      || 1                     || 0  ||
| 15   || 7003h || ST 7500h    || 0h      || 2                     || 0  || MEM[7500h] = 0h, није дошло до ВМ изласка услед извршавања ST инструкције јер је бит 1 мапе постављен на 0.
|-
|-
| 18   || 1000h ||             || 0h     || 1                     || 0  ||
| 16   || 7006h || INC        || 1h     || 2                     || 0  || INC инструкција нема свој бит у мапи.
|-
|-
| 19   || 1000h ||             || 0h     || 1                     || 0  ||
| 17   || 7007h || PUSH        || 1h     || 2                     || 0  || SP = EFFEh, MEM[EFFEh] = 1h, дошло је ВМ изласка услед извршавања PUSH инструкције јер је бит 2 мапе постављен на 1.
|-
|-
| 20  || 1000h  ||            || 0h      || 1                     || 0 ||
|     ||       ||            || 0h      || 3                     || 1 || Чувамо стање госта и учитавамо стање домаћина из ВМ контролне структуре. Вредно је напоменути да се ниједном током задатка не мења стање домаћина у ВМ контролној структури.
|-
|-
| 21   || 1000h ||             || 0h     || 1                     || 0 ||
| 18   || 1008h || LD (R1)Dh  || 4h     || 3                     || 1 || Учитавамо разлог изласка у акумулатор.
|-
|-
| 22   || 1000h ||             || 0h     || 1                     || 0 ||
| 19   || 100Bh || CMP #0h    || 4h     || 3                     || 1 || Проверавамо да ли је дошло до HALT.
|-
|-
| 23   || 1000h ||             || 0h     || 1                     || 0 ||
| 20   || 100Eh || JZ 1027h    || 4h     || 3                     || 1 || Није, па зато не скачемо.
|-
|-
| 24   || 1000h ||             || 0h     || 1                     || 0 ||
| 21   || 1011h || CMP #4h    || 4h     || 3                     || 1 || Проверавамо да ли је дошло до PUSH.
|-
|-
| 25   || 1000h ||             || 0h     || 1                     || 0 ||
| 22   || 1014h || JNZ 101Dh  || 4h     || 3                     || 1 || Јесте, па зато не скачемо.
|-
|-
| 26   || 1000h ||             || 0h     || 1                     || 0 ||
| 23   || 1017h || LD #5h      || 5h     || 3                     || 1 ||
|-
|-
| 27   || 1000h ||             || 0h     || 1                     || 0 ||
| 24   || 101Ah || ST (R1)Ch  || 5h     || 4                     || 1 || Мењамо бит мапу инструкција у ВМ контролној структури тако да спречимо излазак на POP инструкцију.
|-
|-
| 28   || 1000h ||             || 0h     || 1                     || 0 ||
| 25   || 101Dh || LD 2000h    || 1h     || 4                     || 1 ||
|-
|-
| 29   || 1000h ||             || 0h     || 1                     || 0 ||
| 26   || 1020h || INC        || 2h     || 4                     || 1 ||
|-
|-
| 30   || 1000h ||             || 0h     || 1                     || 0 ||
| 27   || 1023h || ST 2000h    || 2h     || 4                     || 1 || MEM[2000h] = 2h
|-
|-
| 31   || 1000h ||             || 0h     || 1                     || 0  ||
| 28   || 1026h || VRESUME    || 1h     || 4                     || 0  || Учитавамо стање госта из ВМ контролне структуре.
|-
|-
| 32   || 1000h ||             || 0h     || 1                     || 0  ||
| 29   || 7008h || POP        || 1h     || 4                     || 0  || SP = EFFFh, због претходно измењене мапе не излазимо.
|-
|-
| 33   || 1000h ||             || 0h     || 1                     || 0  ||
| 30   || 7009h || HALT        || 1h     || 4                     || 0  ||
|-
|-
| 34  || 1000h  ||            || 0h      || 1                     || 0 ||
|     ||       ||            || 0h      || 5                     || 1 || Чувамо стање госта и учитавамо стање домаћина из ВМ контролне структуре.
|-
|-
| 35  || 1000h ||             || 0h      || 1                     || 0  ||
| 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  ||
|}
|}


Ред 179: Ред 187:
| SP  || EFFFh || EFFFh || EFFEh || EFFEh || EFFFh
| SP  || EFFFh || EFFFh || EFFEh || EFFEh || EFFFh
|-
|-
| PC  || 7000h || 7003h || 7008h || 7008h || 700Ah
| PC  || 7000h || 7003h || 7008h || 7008h || 700Ah<ref>На колоквијуму је речено да је HALT инструкција дужине једне адресибилне јединице.</ref>
|-
|-
| PSW || VM=0  || VM=0  || VM=0  || VM=0  || VM=0
| PSW || VM=0  || VM=0  || VM=0  || VM=0  || VM=0

Тренутна верзија на датум 12. мај 2023. у 22:03

Други колоквијум 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.

Табела 1. ВМ контролна структура
Регистри Домаћин Гост
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 физичке адресе.

Слика 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

Решење

Табела 2. Стање током извршавања инструкција из решења задатка
Р.б. Адреса Инструкција 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
Табела 3. Стање ВМ контролне структуре из решења задатка
Стање
Гост 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

Напомене

  1. На колоквијуму није постојала ова колона, већ је она овде додата за додатна објашњења.
  2. На колоквијуму је речено да је HALT инструкција дужине једне адресибилне јединице.