Архитектура рачунара/Јун 2021

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

Поставка

  1. [5п] У посматраном рачунарском систему процесор има 3 пара линија по којима улазно/излазни уређаји могу процесору да шаљу захтеве за прекид и од процесора добијају сигнале потврда. У датом систему има 8 улазно/излазних уређаја које треба некако повезати помоћу та 3 пара линија на процесор и омогућити за сваки улазно/излазни уређај скок на одговарајућу прекидну рутину векторисаним механизмом прекида.
    1. a) Нацртати како тих 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_CONTROLF000hDMA0_CONTROLF003hDMA0_ADDRF006h
    PER0_STATUS
    F001hDMA0_STATUSF004hDMA0_CNTF007h
    PER0_DATAF002hDMA0_DATAF005h
    Адресе релевантних регистара периферија РERI до РERN се добијају као резултат потпрограма
    int* getPеrRegAddr (unsigned int N, unsigned int typеe)
    
    Где 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 указује на последњу заузету локацију. Дозвољено је користити додатне променљиве, али њихове називе треба писати описно и семантички исправно. Обавезно је писање концизних коментара над семантичким целинама.