Архитектура рачунара/Јун 2021 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (-ab)
м (Podeljeno na odeljke)
Ред 2: Ред 2:
{{нерешено}}
{{нерешено}}


== Поставка ==
== 1. задатак ==
<div class="abc-sublist">
=== Поставка ===
# '''[5п]''' У посматраном рачунарском систему процесор има 3 пара линија по којима улазно/излазни уређаји могу процесору да шаљу захтеве за прекид и од процесора добијају сигнале потврда. У датом систему има 8 улазно/излазних уређаја које треба некако повезати помоћу та 3 пара линија на процесор и омогућити за сваки улазно/излазни уређај скок на одговарајућу прекидну рутину векторисаним механизмом прекида.  
'''[5п]''' У посматраном рачунарском систему процесор има 3 пара линија по којима улазно/излазни уређаји могу процесору да шаљу захтеве за прекид и од процесора добијају сигнале потврда. У датом систему има 8 улазно/излазних уређаја које треба некако повезати помоћу та 3 пара линија на процесор и омогућити за сваки улазно/излазни уређај скок на одговарајућу прекидну рутину векторисаним механизмом прекида.  
## Нацртати како тих 8 улазно/излазних уређаја треба повезати помоћу та 3 пара линија на процесор.  
# Нацртати како тих 8 улазно/излазних уређаја треба повезати помоћу та 3 пара линија на процесор.  
## Нацртати интерну структуру контролера периферије који дозвољава серијско слање прекида наредној периферији у ланцу.
# Нацртати интерну структуру контролера периферије који дозвољава серијско слање прекида наредној периферији у ланцу.
# '''[5п]''' Haписати оптималну секвенцу инструкција неопходних за срачунавање израза:  
 
#:<syntaxhighlight lang="C">
== 2. задатак ==
=== Поставка ===
'''[5п]''' Haписати оптималну секвенцу инструкција неопходних за срачунавање израза:  
<syntaxhighlight lang="C">
int a,b,c,d,e,f;
int a,b,c,d,e,f;
...
...
Ред 15: Ред 18:
else f = (d+e);
else f = (d+e);
</syntaxhighlight>
</syntaxhighlight>
#:На располаrању је процесор код кога аритметичке, логичке и померачке инструкције имају формат: ОС reg, reg, reg/imm где је ОС код операције, одредишни операнд и први операнд морају бити у регистру (reg), док други може бити или у регистру или дат непосредно (reg/imm). Инструкција LOAD има формат: LOAD reg, mem где је првим операндом дат одредишни регистар (reg), a другим извориште. Инструкцијa STORE има формат: STORE reg, mem где је првим операндом дат изворишни регистар (reg), a другим одредиште. А, В, С, D, E и F су глобалне променљиве које одговарају симболичким ознакама адреса меморијских локација у којима се налазе операнди. Садржај меморијских локација означених адресама В, С, D и Е треба да остане непромењен, садржај одговарајућих регистара је дозвољено мењати. На располагању стоји 8 регистара опште намене. Претпоставити да су сви подаци и адресе исте дужине која је једнака адресибилној јединици
На располаrању је процесор код кога аритметичке, логичке и померачке инструкције имају формат: ОС reg, reg, reg/imm где је ОС код операције, одредишни операнд и први операнд морају бити у регистру (reg), док други може бити или у регистру или дат непосредно (reg/imm). Инструкција LOAD има формат: LOAD reg, mem где је првим операндом дат одредишни регистар (reg), a другим извориште. Инструкцијa STORE има формат: STORE reg, mem где је првим операндом дат изворишни регистар (reg), a другим одредиште. А, В, С, D, E и F су глобалне променљиве које одговарају симболичким ознакама адреса меморијских локација у којима се налазе операнди. Садржај меморијских локација означених адресама В, С, D и Е треба да остане непромењен, садржај одговарајућих регистара је дозвољено мењати. На располагању стоји 8 регистара опште намене. Претпоставити да су сви подаци и адресе исте дужине која је једнака адресибилној јединици
# '''[5]''' Написати оптималну секвенцу инструкција која одговара следећој стандардној библиотечкој С функцији која копира ''n'' бајта низа ''src'' y низ ''dst'':
 
#:<syntaxhighlight lang="C">void *memсру (void *dst, const void *src, int n);</syntaxhighlight>  
== 3. задатак ==
#:Функција као резултат враћа показивач на одредишни низ ''dst''. Формати инструкција и података су као у задатку 2. На располагању стоје и сложене инструкције.
=== Поставка ===
# '''[25]''' У рачунарском систему се налази једноадресни процесор, меморија и периферије РЕR0. PER1 до РERN. Cматрати да број N припада скупу од 1 до 15 и да може да се користи као непосредна вредност у програму (#N). Периферији РER0 jе придружен DMA0 контролер. Све компоненте рачунара су повезане системском магистралом са 16 битном адресном и 16 битном магистралом података. Адресирање је на нивоу 16 битних речи. Сви подаци и адресе су ширине 16 бита. Узети да је тип података '''іnt''' дужине 16 бита. Улазно-излазни адресни простор и меморијски адресни простор су преклопљени. Адресе релевантних регистара периферија РER0 и DМА0 контролера су:
'''[5п]''' Написати оптималну секвенцу инструкција која одговара следећој стандардној библиотечкој С функцији која копира ''n'' бајта низа ''src'' y низ ''dst'':
#:<table class="tg"><tr><td>PER0_CONTROL</td><td>F000h</td><td>DMA0_CONTROL</td><td>F003h</td><td>DMA0_ADDR</td><td>F006h</td></tr><tr><td>PER0_STATUS<br></td><td>F001h</td><td>DMA0_STATUS</td><td>F004h</td><td>DMA0_CNT</td><td>F007h</td></tr><tr><td>PER0_DATA</td><td>F002h</td><td>DMA0_DATA</td><td>F005h</td><td></td><td></td></tr></table>
<syntaxhighlight lang="C">void *memсру (void *dst, const void *src, int n);</syntaxhighlight>  
#:Адресе релевантних регистара периферија РERI до РERN се добијају као резултат потпрограма  
Функција као резултат враћа показивач на одредишни низ ''dst''. Формати инструкција и података су као у задатку 2. На располагању стоје и сложене инструкције.
#:<syntaxhighlight lang="C">int* getPеrRegAddr (unsigned int N, unsigned int typе);</syntaxhighlight>
 
#:Где N представља број периферије, type представља тип регистра (1 - ENTRY ,, 2 -CONTROL, 3 -STATUS, 4-DATA). Потпрограм ''getPerRegAddr'' не треба имплементирати, већ само позивати на одговарајућем месту у програму.
== 4. задатак ==
#:У управљачким регистрима бит 0 је ''Start'' којим се дозвољава почетак операције, бит 1 одрeђују тип преноса података (1 -улаз (''input''), 0 - излаз (''output'')), бит 2 је ''Enable'' којим се дозвољава прекид. Бит 3 управљачког регистра контролера DMA0 се задаје режим рада (0-блоковски (''burst''), 1-диклус по циклус (''сусle stealing'')). У статусним регистрима бит 0 је ''Ready'' који сигнализира спремност контролера периферије.
=== Поставка ===
#:Написати главни програм, одговарајући потпрограм и прекидну рутину којима се обавља следећи пренос.  
'''[25п]''' У рачунарском систему се налази једноадресни процесор, меморија и периферије РЕR0. PER1 до РERN. Cматрати да број N припада скупу од 1 до 15 и да може да се користи као непосредна вредност у програму (#N). Периферији РER0 jе придружен DMA0 контролер. Све компоненте рачунара су повезане системском магистралом са 16 битном адресном и 16 битном магистралом података. Адресирање је на нивоу 16 битних речи. Сви подаци и адресе су ширине 16 бита. Узети да је тип података '''іnt''' дужине 16 бита. Улазно-излазни адресни простор и меморијски адресни простор су преклопљени. Адресе релевантних регистара периферија РER0 и DМА0 контролера су:
#:Периферија РER0 шалье низ од 100h означених целих бројева који се смештају у меморију почев од адресе 5000h. Hакон учитаног низа у меморију потребно је проследити максималну вредност низа периферијама РER1 до РЕRN. Пренос максималне вредности периферијама треба обављати у паралели, чим периферија буде спремна да прими податак. Након што је свака периферија примила максималну вредност, потребно је да РER0 учита нов низ (од 100h означених целих бројева који се смештају у меморију почев од адресе 5000h), да се проследи нова максимална вредност низа периферијама РER1 до PERN и тако циклично да ради програм.
{|
#:Периферије PER1 до РERN када се једном укључе, није дозвољено да се потом искључе. Ради евиденције којoј периферији је прослеђена тренутна максимална вредност низа потребно је увести променљиву ''mask''. Bредност бита ''mask<sub>i</sub>'' треба да има вредност 1 уколико је тренутна максимална вредност низа прослеђена периферији РER<sub>i</sub>, a да има вредност 0 уколико тренутна максимална вредност низа није још прослеђена периферији РER<sub>i</sub>. Након прослеђене максималне вредности свим периферијама, вредност променльиву ''mask'' треба ресетовати на 0.
| PER0_CONTROL || F000h || DMA0_CONTROL || F003h || DMA0_ADDR || F006h
#:Потребно је имплементирати и у програму на одговарајуhем месту позвати потпрограм  
|-
#:<syntaxhighlight lang="C">int max (int* arrAddr, unsigned int length);</syntaxhighlight>
| PER0_STATUS || F001h || DMA0_STATUS || F004h || DMA0_CNT || F007h
#:Који враћа максималну вредност низа задатом почетном адресом аrrAddr и дужине 1ength eлемената.
|-
#:Примање података са периферије РERO реализовати коришћењем DMА0 контролера у блоковском режиму рада. Слање података на периферије РER1 до РERN peализовати испитивањем бита спремности.
| PER0_DATA   || F002h || DMA0_DATA   || F005h
#:Сматрати да су доступни регистри ВР и SP приликом писања потпрограма. Обратити пажњу да потпрограм не сме да користи глобалне променљиве, већ само параметре потпрограма и локане променљиве. Позивалац потпрограма је дужан да уклони параметре са стека. Резултат потпрограма се враћа кроз акумулатор. Процесор не поседује регистре опште намене, као ни регистар IМR. Стек расте од виших ка нижим локацијама, а SP указује на последњу заузету локацију. Дозвољено је користити додатне променљиве, али њихове називе треба писати описно и семантички исправно. '''Обавезно је писање концизних коментара над семантичким целинама.'''
|}
</div>
Адресе релевантних регистара периферија РERI до РERN се добијају као резултат потпрограма  
<syntaxhighlight lang="C">int* getPеrRegAddr (unsigned int N, unsigned int typе);</syntaxhighlight>
Где N представља број периферије, type представља тип регистра (1 - ENTRY ,, 2 -CONTROL, 3 -STATUS, 4-DATA). Потпрограм ''getPerRegAddr'' не треба имплементирати, већ само позивати на одговарајућем месту у програму.
 
У управљачким регистрима бит 0 је ''Start'' којим се дозвољава почетак операције, бит 1 одрeђују тип преноса података (1 -улаз (''input''), 0 - излаз (''output'')), бит 2 је ''Enable'' којим се дозвољава прекид. Бит 3 управљачког регистра контролера DMA0 се задаје режим рада (0-блоковски (''burst''), 1-диклус по циклус (''сусle stealing'')). У статусним регистрима бит 0 је ''Ready'' који сигнализира спремност контролера периферије.
 
Написати главни програм, одговарајући потпрограм и прекидну рутину којима се обавља следећи пренос.  
 
Периферија РER0 шалье низ од 100h означених целих бројева који се смештају у меморију почев од адресе 5000h. Hакон учитаног низа у меморију потребно је проследити максималну вредност низа периферијама РER1 до РЕRN. Пренос максималне вредности периферијама треба обављати у паралели, чим периферија буде спремна да прими податак. Након што је свака периферија примила максималну вредност, потребно је да РER0 учита нов низ (од 100h означених целих бројева који се смештају у меморију почев од адресе 5000h), да се проследи нова максимална вредност низа периферијама РER1 до PERN и тако циклично да ради програм.
 
Периферије PER1 до РERN када се једном укључе, није дозвољено да се потом искључе. Ради евиденције којoј периферији је прослеђена тренутна максимална вредност низа потребно је увести променљиву ''mask''. Bредност бита ''mask<sub>i</sub>'' треба да има вредност 1 уколико је тренутна максимална вредност низа прослеђена периферији РER<sub>i</sub>, a да има вредност 0 уколико тренутна максимална вредност низа није још прослеђена периферији РER<sub>i</sub>. Након прослеђене максималне вредности свим периферијама, вредност променльиву ''mask'' треба ресетовати на 0.
 
Потребно је имплементирати и у програму на одговарајуhем месту позвати потпрограм  
<syntaxhighlight lang="C">int max (int* arrAddr, unsigned int length);</syntaxhighlight>
Који враћа максималну вредност низа задатом почетном адресом аrrAddr и дужине 1ength eлемената.
 
Примање података са периферије РERO реализовати коришћењем DMА0 контролера у блоковском режиму рада. Слање података на периферије РER1 до РERN peализовати испитивањем бита спремности.
 
Сматрати да су доступни регистри ВР и SP приликом писања потпрограма. Обратити пажњу да потпрограм не сме да користи глобалне променљиве, већ само параметре потпрограма и локане променљиве. Позивалац потпрограма је дужан да уклони параметре са стека. Резултат потпрограма се враћа кроз акумулатор. Процесор не поседује регистре опште намене, као ни регистар IМR. Стек расте од виших ка нижим локацијама, а SP указује на последњу заузету локацију. Дозвољено је користити додатне променљиве, али њихове називе треба писати описно и семантички исправно. '''Обавезно је писање концизних коментара над семантичким целинама.'''


[[Категорија:Архитектура рачунара]]
[[Категорија:Архитектура рачунара]]
[[Категорија:Рокови]]
[[Категорија:Рокови]]

Верзија на датум 2. јул 2021. у 08:43

Овај рок није решен. Помозите SI Wiki тако што ћете га решити.

1. задатак

Поставка

[5п] У посматраном рачунарском систему процесор има 3 пара линија по којима улазно/излазни уређаји могу процесору да шаљу захтеве за прекид и од процесора добијају сигнале потврда. У датом систему има 8 улазно/излазних уређаја које треба некако повезати помоћу та 3 пара линија на процесор и омогућити за сваки улазно/излазни уређај скок на одговарајућу прекидну рутину векторисаним механизмом прекида.

  1. Нацртати како тих 8 улазно/излазних уређаја треба повезати помоћу та 3 пара линија на процесор.
  2. Нацртати интерну структуру контролера периферије који дозвољава серијско слање прекида наредној периферији у ланцу.

2. задатак

Поставка

[5п] Haписати оптималну секвенцу инструкција неопходних за срачунавање израза:

int a,b,c,d,e,f;
...
a = (b+c) - (d+e);
if (a == 0) f = (b+c);
else f = (d+e);

На располаrању је процесор код кога аритметичке, логичке и померачке инструкције имају формат: ОС reg, reg, reg/imm где је ОС код операције, одредишни операнд и први операнд морају бити у регистру (reg), док други може бити или у регистру или дат непосредно (reg/imm). Инструкција LOAD има формат: LOAD reg, mem где је првим операндом дат одредишни регистар (reg), a другим извориште. Инструкцијa STORE има формат: STORE reg, mem где је првим операндом дат изворишни регистар (reg), a другим одредиште. А, В, С, D, E и F су глобалне променљиве које одговарају симболичким ознакама адреса меморијских локација у којима се налазе операнди. Садржај меморијских локација означених адресама В, С, D и Е треба да остане непромењен, садржај одговарајућих регистара је дозвољено мењати. На располагању стоји 8 регистара опште намене. Претпоставити да су сви подаци и адресе исте дужине која је једнака адресибилној јединици

3. задатак

Поставка

[5п] Написати оптималну секвенцу инструкција која одговара следећој стандардној библиотечкој С функцији која копира n бајта низа src y низ dst:

void *memсру (void *dst, const void *src, int n);

Функција као резултат враћа показивач на одредишни низ dst. Формати инструкција и података су као у задатку 2. На располагању стоје и сложене инструкције.

4. задатак

Поставка

[25п] У рачунарском систему се налази једноадресни процесор, меморија и периферије РЕR0. PER1 до РERN. Cматрати да број N припада скупу од 1 до 15 и да може да се користи као непосредна вредност у програму (#N). Периферији РER0 jе придружен DMA0 контролер. Све компоненте рачунара су повезане системском магистралом са 16 битном адресном и 16 битном магистралом података. Адресирање је на нивоу 16 битних речи. Сви подаци и адресе су ширине 16 бита. Узети да је тип података іnt дужине 16 бита. Улазно-излазни адресни простор и меморијски адресни простор су преклопљени. Адресе релевантних регистара периферија РER0 и DМА0 контролера су:

PER0_CONTROL F000h DMA0_CONTROL F003h DMA0_ADDR F006h
PER0_STATUS F001h DMA0_STATUS F004h DMA0_CNT F007h
PER0_DATA F002h DMA0_DATA F005h

Адресе релевантних регистара периферија РERI до РERN се добијају као резултат потпрограма

int* getPеrRegAddr (unsigned int N, unsigned int typе);

Где N представља број периферије, type представља тип регистра (1 - ENTRY ,, 2 -CONTROL, 3 -STATUS, 4-DATA). Потпрограм getPerRegAddr не треба имплементирати, већ само позивати на одговарајућем месту у програму.

У управљачким регистрима бит 0 је Start којим се дозвољава почетак операције, бит 1 одрeђују тип преноса података (1 -улаз (input), 0 - излаз (output)), бит 2 је Enable којим се дозвољава прекид. Бит 3 управљачког регистра контролера DMA0 се задаје режим рада (0-блоковски (burst), 1-диклус по циклус (сусle stealing)). У статусним регистрима бит 0 је Ready који сигнализира спремност контролера периферије.

Написати главни програм, одговарајући потпрограм и прекидну рутину којима се обавља следећи пренос.

Периферија РER0 шалье низ од 100h означених целих бројева који се смештају у меморију почев од адресе 5000h. Hакон учитаног низа у меморију потребно је проследити максималну вредност низа периферијама РER1 до РЕRN. Пренос максималне вредности периферијама треба обављати у паралели, чим периферија буде спремна да прими податак. Након што је свака периферија примила максималну вредност, потребно је да РER0 учита нов низ (од 100h означених целих бројева који се смештају у меморију почев од адресе 5000h), да се проследи нова максимална вредност низа периферијама РER1 до PERN и тако циклично да ради програм.

Периферије PER1 до РERN када се једном укључе, није дозвољено да се потом искључе. Ради евиденције којoј периферији је прослеђена тренутна максимална вредност низа потребно је увести променљиву mask. Bредност бита maski треба да има вредност 1 уколико је тренутна максимална вредност низа прослеђена периферији РERi, a да има вредност 0 уколико тренутна максимална вредност низа није још прослеђена периферији РERi. Након прослеђене максималне вредности свим периферијама, вредност променльиву mask треба ресетовати на 0.

Потребно је имплементирати и у програму на одговарајуhем месту позвати потпрограм

int max (int* arrAddr, unsigned int length);

Који враћа максималну вредност низа задатом почетном адресом аrrAddr и дужине 1ength eлемената.

Примање података са периферије РERO реализовати коришћењем DMА0 контролера у блоковском режиму рада. Слање података на периферије РER1 до РERN peализовати испитивањем бита спремности.

Сматрати да су доступни регистри ВР и SP приликом писања потпрограма. Обратити пажњу да потпрограм не сме да користи глобалне променљиве, већ само параметре потпрограма и локане променљиве. Позивалац потпрограма је дужан да уклони параметре са стека. Резултат потпрограма се враћа кроз акумулатор. Процесор не поседује регистре опште намене, као ни регистар IМR. Стек расте од виших ка нижим локацијама, а SP указује на последњу заузету локацију. Дозвољено је користити додатне променљиве, али њихове називе треба писати описно и семантички исправно. Обавезно је писање концизних коментара над семантичким целинама.