АОР2/К2П 2022
Поправни други колоквијум 2022. године одржан је 11. јуна и трајао је 90 минута.
1. задатак
Поставка
Описати општи поступак виртуелизације уређаја. Посебно описати виртуелизацију дискова и начина на који је обављена виртуелизација прекида који стижу од ових уређаја.
Решење
Уређаји се могу виртуелизовати тако што се гостујућем оперативном систему представи један виртуелни уређај са којим он може комуницирати (мислећи да комуницира са правим уређајем), а затим хипервизор усмерава захтеве упућене том виртуелном уређају ка правим хардверским уређајима. Код дискова, гост може мислити да има приступ целом диску а заправо има приступ само делу диска или само једној датотеци на диску, у којем случају хипервизор мора да пресликава адресе којима се приступа на праве адресе. Прекиди од ових уређаја се такође емулирају тако што прави прекид стигне до хипервизора а он затим изазове виртуелни прекид у гостујућем оперативном систему.
2. задатак
- Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.
Поставка
Потребно је оптимизовати функцију int find(register char* str1, register int len1, register char* str2, register int len2)
коришћењем уграђеног макроа void prefetch(const void *addr)
на одговарајућим местима тако да се максимално смањи број промашаја у кеш меморији. Дата функција проналази позицију низа карактера задат[sic] показивачем str2
и дужином len2
унутар низа карактера задат[sic] показивачем str1
и дужином len1
. Уколико се низ карактера задат показивачем str2
и дужином len2
не налази унутар низа карактера задат[sic] показивачем str1
и дужином len1
, резултат функције је -1. Сматрати да је len1>0
и len2>0
.
int find(register char* str1, register int len1, register char* str2, register int len2)
{
register int i;
register int j;
for (i = 0; i <= len1 - len2; i++) {
for (j = 0; j < len2; j++) {
register c1 = str1[i + j];
register c2 = str2[j];
if (c1 != c2)
break;
}
if (j == len2)
return i;
}
return -1;
}
Процесор поседује само L1 кеш меморију. Величина блока кеш меморије је 64B.
Меморијски контролер и аритметичко логичка јединица процесора имају могућност рада у паралели. Сматрати да void prefetch
враћа резултат након 5 C++ израза који користе оперативну меморију. C++ изрази који не користе оперативну меморију сматрати да не утичу значајно у времену приликом извршавања void prefetch
, тако да такве изразе треба игнорисати.