%! Author = Nikola Marinkovic
%! Date = 13/06/2026

% Preamble
\documentclass[13pt]{extarticle}
\usepackage{graphicx} % inserting images

% cirilica
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,serbianc]{babel}
\usepackage{noto}

% clickable link
\usepackage[colorlinks=true,
    linkcolor=black,
    citecolor=blue,
    urlcolor=blue]{hyperref}

% ugasi prelazak u novi red
\usepackage[none]{hyphenat}

% slika ostaje ispod svog pitanja
\usepackage{placeins}

% Packages
\usepackage{amsmath}

% регулација бројача
\setcounter{secnumdepth}{4}
\renewcommand{\thesubsubsection}{\arabic{subsubsection}}

\renewcommand{\thesubsection}{\arabic{subsection}}
\counterwithout{subsection}{section}

% komande

\newcommand{\komentar}[1]{\textit{\underline{Коментар:} #1 }}

% logicki operatori
\newcommand{\NE}[1]{\Bar{#1}}
\newcommand{\NElong}[1]{\overline{#1}}

\newcommand{\ILI}{\mathbin{+}}
\newcommand{\I}{\mathbin{\cdot}}

\newcommand{\NI}{\mathbin{\uparrow}}
\newcommand{\NILI}{\mathbin{\downarrow}}
\newcommand{\EILI}{\mathbin{\oplus}}


\title{Одговори на испитна питања из УОАР-а}
\author{Никола Маринковић}
\date{\today}

% Document
\begin{document}

    \maketitle

    \section{Логичке функције и логички изрази}
    \label{sec:log_funkcije_log_izrazi}

    \subsection{Написати истинитосне таблице основних логичких везника (НЕ, И, ИЛИ)}
    \label{subsec:istinitosne_tablice_osnovnih_log_vezn}

    \begin{table}[ht]
        \centering
        \begin{tabular}{|c|c|}
            \hline
            $x$ & $\NE{x}$ \\ \hline
            0 & 1 \\ \hline
            1 & 0 \\ \hline
        \end{tabular}
        \caption{Комплемент (Негација) (НЕ)}
        \label{tab:ne_tablica}
    \end{table}

    \begin{table}[ht]
        \centering
        \begin{tabular}{|c|c|c|}
            \hline
            $x$ & $y$ & $x \ILI y$ \\ \hline
            0 & 0 & 0 \\ \hline
            0 & 1 & 1 \\ \hline
            1 & 0 & 1 \\ \hline
            1 & 1 & 1 \\ \hline
        \end{tabular}
        \caption{Дисјункција (ИЛИ)}
        \label{tab:ili_tablica}
    \end{table}

    \begin{table}[ht]
        \centering
        \begin{tabular}{|c|c|c|}
            \hline
            $x$ & $y$ & $x \I y$ \\ \hline
            0 & 0 & 0 \\ \hline
            0 & 1 & 0 \\ \hline
            1 & 0 & 0 \\ \hline
            1 & 1 & 1 \\ \hline
        \end{tabular}
        \caption{Конјукција (И)}
        \label{tab:i_tablica}
    \end{table}

    \subsection{Написати истинитоносне таблице изведених логичких везника (НИ, НИЛИ, ЕИЛИ).}
    \label{subsec:istinitosne_tablice_izvedenih_log_vezn}

    \begin{table}[ht]
        \centering
        \begin{tabular}{|c|c|c|}
            \hline
            $x$ & $y$ & $x \NI y$ \\ \hline
            0 & 0 & 1 \\ \hline
            0 & 1 & 1 \\ \hline
            1 & 0 & 1 \\ \hline
            1 & 1 & 0 \\ \hline
        \end{tabular}
        \caption{Шеферова функција (НИ)}
        \label{tab:ni_tablica}
    \end{table}

    \begin{table}[ht]
        \centering
        \begin{tabular}{|c|c|c|}
            \hline
            $x$ & $y$ & $x \NILI y$ \\ \hline
            0 & 0 & 1 \\ \hline
            0 & 1 & 0 \\ \hline
            1 & 0 & 0 \\ \hline
            1 & 1 & 0 \\ \hline
        \end{tabular}
        \caption{Пирсова (Лукашиевичева) функција (НИЛИ)}
        \label{tab:nili_tablica}
    \end{table}

    \begin{table}[ht]
        \centering
        \begin{tabular}{|c|c|c|}
            \hline
            $x$ & $y$ & $x \EILI y$ \\ \hline
            0 & 0 & 0 \\ \hline
            0 & 1 & 1 \\ \hline
            1 & 0 & 1 \\ \hline
            1 & 1 & 0 \\ \hline
        \end{tabular}
        \caption{Ексклузивна дисјункција (ЕИЛИ)}
        \label{tab:eili_tablica}
    \end{table}

    \subsection{Навести бар jедан начин на коjи се ЕИЛИ везник може представити помоћу основних логичких везника (НЕ, И, ИЛИ).}
    \label{subsec:predstava_eili_preko_osnovnih} % strana 15 Tabela logicke funkcije reda 2

    \begin{equation}
        \label{eq:predstava_eili_preko_osnovnih}
        x \EILI y = x \I \NE{y} \ILI \NE{x} \I y
    \end{equation}

    \subsection{Навести основне законе алгебре логике.}
    \label{subsec:osnovni_zakoni_algebre} % 9 - 10 страна

    Аксиоме:
    \begin{itemize}
        \item $(x \I y) \I z = x \I (y \I z),\ (x \ILI y) \ILI z = x \ILI (y \ILI z)$ (асоцијативност)
        \item $x \I y = y \I x,\ x \ILI y = y \ILI x$ (комутативност)
        \item $x \I (y \ILI z) = x \I y \ILI x \I z,\ x \ILI y \I z = (x \ILI y) \I (x \ILI z)$ (дистрибутивност)
        \item $x \ILI 0 = x,\ x \I 1 = x$ (неутрални елемент)
        \item $x \ILI \NE{x} = 1,\ x \I \NE{x} = 0$ (комплементарност)
    \end{itemize}

    Важни закони Булове алгебре:

    \begin{itemize}
        \item $x \I x = x,\ x \ILI x = x$ (закони идемпотенције)
        \item $x \I 0 = 0,\ x \ILI 1 = 1$ (закони нуле и јединице)
        \item $x \I (x \ILI y) = x,\ x \ILI x \I y = x$ (закони апсорпције)
        \item $\NE{\NE{x}} = x$ (закон двојне негације)
        \item $\NElong{x \ILI y} = \NE{x} \I \NE{y},\ \NElong{x \I y} = \NE{x} \ILI \NE{y}$ (де-Морганови закони)
    \end{itemize}

    \komentar{Принцип дуалности (можемо да променимо знаке и добијемо један закон из другог)}

    \subsection{Због чега се алгебра логике користи као основа савремених рачунара?}
    \label{subsec:algebra_logike_racunar} % strana 11

    \komentar{Алгебра логике: двоелементна Булова алгебра}

    \begin{enumerate}
        \item Имплементација уређаја који имају два стабилна стања је релативно једноставна, што омогућава прављење логичких кола (уређаји који израчунавају логичке
        изразе у савременој електронској технологији) на релативно једноставан, јефтин и поуздан начин.
        \item Стандардне аритметичке операције над бинарним бројевима је једноставно описати на језику алгебре логике (бинарна аритметика помоћу логичких кола)
    \end{enumerate}

    \subsection{Шта значи да су два логичка израза еквивалентна?}
    \label{subsec:ekvivalencija_logickih_izraza} % strana 11

    Два логичка израза су еквивалентна ако имају једнаке вредности у свакој валуацији.

    \komentar{Валуација је функција која свим променљивама придружује неку логичку вредност.}

    \subsection{Дефинисати поjмове елементарне конjункциjе и дисjунктивне нормалне форме (ДНФ). Шта jе савршена елементарна конjункциjа, а шта савршена ДНФ?}
    \label{subsec:dnf_sdnf}

% strana 11-12
    Литерал је логички израз који је или логичка променљива или негација логичке променљиве (пример: $x, \NE{y}, z$).

    Елементарна конјукција је израз који се састоји из конјукције литерала (пример: $x\NE{y}z\NE{u}\NE{v}$).

    ДНФ је израз који се састоји из дисјункције елементарних конјукција (пример: $x\NE{y}z \ILI \NE{x}\NE{y}\NE{z} \ILI xy\NE{z}$)

% strana 13
    За елементарну конјукцију кажемо да је савршена (у односу на коначни скуп променљива) ако садржи тачно по један литерал за сваку променљиву из скупа
    (пример: за скуп $P=\left\{x,y,z\right\}$ једна савршена елементарна конјукција била би $x\NE{y}z$, а не би била $\NE{x}y$)

    ДНФ је савршена ако се састоји из дисјункције савршених елементарних конјукција.

    \subsection{Дефинисати поjмове елементарне дисjункциjе и конjунктивне нормалне форме (КНФ). Шта jе савршена елементарна дисjункциjа, а шта савршена КНФ?}
    \label{subsec:knf_sknf}

    Замени појављивање речи конјукција и дисјункција из задатка\ \ref{subsec:dnf_sdnf}.

    \subsection{Укратко описати поступак за свођење логичког израза на ДНФ.}
    \label{subsec:svodjenje_na_dnf} % strana 12

    $e$ представља произвољан подизраз израза који се трансформише.

    \begin{enumerate}
        \item Елиминисање примене логичких везника над логичким константама (0 и 1).
        \begin{equation}
            \NE{0} = 1,\ \NE{1} = 0,\ e \I 0 = 0,\ e \I 1 = e,\ e \ILI 0 = e,\ e \ILI 1 = 1
            \label{eq:eliminisanje_log_veznika}
        \end{equation}

        \item Учинимо да се негације примењују само на логичке променљиве (закон двојне негације и де-Морганови закони)
        \begin{equation}
            \NE{\NE{e}} = e,\ \NElong{e_1 \ILI e_2} = \NE{e_1} \I \NE{e_2},\ \NElong{e_1 \I e_2} = \NE{e_1} \ILI \NE{e_2}
            \label{eq:eliminisanje_negacija_izraza}
        \end{equation}

        \item Дисјункције се „извлаче“ из конјукција (дистрибутивни закон)
        \begin{equation}
            e \I (e_1 \ILI e_2) = e \I e_1 \ILI e \I e_2
            \label{eq:izvlacenje_disjunkcija}
        \end{equation}
    \end{enumerate}

    \komentar{Укратко значи елиминисати све формуле, остављене су овде ради јасноће.}

    \subsection{Шта jе логичка функциjа и колико има логичких функциjа реда n?}
    \label{subsec:logicka_funkcija} % strana 14

    Логичка функција реда $n$ је било које пресликавање које свакој $n$-торци логичких вредности придружује логичку вредност.
    \begin{equation}
        f : \{0,1\}^n \rightarrow \{0,1\}
        \label{eq:logicka_funkcija}
    \end{equation}

    Логичких функција реда $n$ има $2^2^n$ (број комбинација на улазу је $2^n$, а на излазу се могу наћи две различите вредности).

    \subsection{Шта jе потпун систем везника? Навести бар три примера потпуних система логичких везника.}
    \label{subsec:potpun_sistem_veznika} % strana 16

    Потпун систем везника је скуп везника помоћу којих се могу изразити све логичке функције.

    \begin{itemize}
        \item (НЕ, И, ИЛИ)
        \item (НЕ, И)
        \item (НЕ, ИЛИ)
        \item (НИ)
        \item (НИЛИ)
    \end{itemize}

    \komentar{Сваки надскуп потпуног скупа везника је такође потпун скуп везника.}

    \subsection{Изразити НЕ, И и ИЛИ везник помоћу НИ везника.}
    \label{subsec:preko_ni} % strana 17

    \begin{equation}
        \begin{aligned}
            & \NE{x} = \NElong{x \I x} = x \NI x \\
            & x \I y = \NElong{\NElong{x \I y}} = \NElong{\NElong{x \I y} \I \NElong{x \I y}} = (x \NI y) \NI (x \NI y) \\
            & x \ILI y = \NElong{\NE{x} \I \NE{y}} = \NE{x} \NI \NE{y} = (x \NI x) \NI (y \NI y)
        \end{aligned}
        \label{eq:preko_ni}
    \end{equation}

    \subsection{Укратко обjаснити како се произвољна логичка функциjа може изразити у облику израза у савршеноj дисjунктивноj нормалноj форми.}
    \label{subsec:u_sdnf} % strana 15-16

    \begin{enumerate}
        \item за сваку комбинацију улазних вредности за коју функција има вредност 1 формирамо савршену елементарну конјукцију која је тачна само у тој комбинацији
        \item направимо дисјункцију свих тако добијених савршених елементарних конјукција
    \end{enumerate}

    \subsection{Шта jе минимизациjа логичких израза и због чега нам jе значаjна?}
    \label{subsec:minim_log_izraza} % strana 18

    Сложеност логичког израза је број везника који се у њему појављују.

    Циљ минимизације је проналажење логичког израза минималне сложености еквивалентног датом изразу.

    Значајна је у процесу дизајна логичких кола јер се тиме добија значајна уштеда у процесу производње, као и у потрошњи електричне енергије приликом употребе.

    \subsection{На примеру обjаснити метод алгебарских трансформациjа за минимизациjу логичких израза.}
    \label{subsec:algebarske_transformacije} % strana 19

    Примена одређених логичких закона на ДНФ израз ради смањивања сложености.

    $K$ - произвољна конјукција литерала

    \begin{enumerate}
        \item Груписање елементарних конјукција: уколико имамо две елементарне конјукције облика $xK$ и $\NE{x}K$ (садрже супротне литерале по једној променљивој),
        можемо им смањити сложеност на следећи начин:\\
        \begin{equation}
            xK \ILI \NE{x}K = (x \ILI \NE{x}) \I K = 1 \I K = K
            \label{eq:grupisanje_elem_konjukcija}
        \end{equation}

        \item уколико $K$ можемо груписати на два различита начина са две конјукције $K_1$ и $K_2$, примењујемо закон идемпотенције ($K = K \ILI K$)
    \end{enumerate}

    Горња два правила примењујемо по потреби.

    \underline{Пример:}

% ^\circ

    \begin{equation}
        \begin{aligned}
            F(x,y,z) &= \NE{x}\NE{y}\NE{z} \ILI \NE{x}\NE{y}z \ILI \NE{x}yz \ILI x\NE{y}z \\
            &\overset{2}{=} \NE{x}\NE{y}\NE{z} \ILI (\NE{x}\NE{y}z \ILI \NE{x}\NE{y}z \ILI \NE{x}\NE{y}z) \ILI \NE{x}yz \ILI x\NE{y}z \\
            &= (\NE{x}\NE{y}\NE{z} \ILI \NE{x}\NE{y}z) \ILI (\NE{x}yz \ILI \NE{x}\NE{y}z) \ILI (x\NE{y}z \ILI \NE{x}\NE{y}z) \\
            &\overset{1}{=} \NE{x}\NE{y} \ILI \NE{x}z \ILI \NE{y}z
        \end{aligned}
        \label{eq:grupisanje_primer}
    \end{equation}

    \komentar{Метод алгебарских трансформација можемо применити и на ДНФ израз који није савршен.}

    \subsection{Обjаснити начин употребе Карноових мапа за минимизациjу логичких израза. Пример.}
    \label{subsec:karnoove_mape} % strana 22

    Карноова мапа је таблица правоугаоног облика чији је укупан број поља једнак $2^n$, ($n$ - број променљивих у ДНФ изразу / ред функције).
    Свако поље таблице одговара једној валуацији.\ Поља сматрамо суседним уколико се разликују за један симбол, тј.\ ако су једно поред другог
    (замислимо да се лева и десна / горња и доња ивица додирују).

    \begin{itemize}
        \item У поља Карноове мапе се уписују одговарајуће вредности израза који се минимизује (0 или 1).
        \item Групишемо јединице у мапи, тако да свака јединица буде у бар једној од група.\ Правила заокруживања:
        \begin{itemize}
            \item Заокружују се само јединице.
            \item Свака јединица мора бити заокружена макар једном (дозвољено вишеструко заокруживање).
            \item Заокружујемо искључиво групе од $2^k$ поља правоугаоног облика.
            \item Увек се заокружују што веће групе (иако долази до преклапања).
            \item Ако је се на крају неко заокруживање испоставило као сувишно, избацујемо га.
        \end{itemize}
        \item Сваком заокруживању одговара једна елементарна конјукција која садржи литерале који су заједнички за сва заокружена поља.
        (што је заокруживање веће, то их има мање, и конјукције су једноставније)
    \end{itemize}

    \underline{Пример:}

    \begin{equation}
        F(x, y, z) = \NE{x}\NE{y}\NE{z} \ILI \NE{x}\NE{y}z \ILI \NE{x}yz \ILI x\NE{y}z
    \end{equation}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.5\textwidth]{slike/1/karnoova_mapa_1}
        \caption{Заокруживање код Карноове мапе}
        \label{fig:karnoova_mapa}
    \end{figure}

    \FloatBarrier

    \begin{equation}
        \Rightarrow F(x, y, z) = \NE{x} \NE{y} \ILI \NE{y}z \ILI \NE{x}z
    \end{equation}

    \subsection{Обjаснити методу Квин-Мекласког за минимизациjу логичких израза. Пример.}
    \label{subsec:kvin_meklaski} % strana 28

    \begin{itemize}
        \item \textit{Савршене елементарне конјункције} се сортирају растуће по броју неинвертованих литерала и поделе у класе ($i$-та класа садржи све који имају
        $i$ неинвертованих литерала).
        \item Уколико се две конјукције из суседних класа разликују за један литерал, групишу се и преносе у следећи корак.
        \item Поступак понављамо док не понестане конјукција.\ (све које нису искоришћене у било ком кораку (прости импликанти) се преносе на следећу фазу алгоритма)
        \item
        \item Формирамо табелу простих импликаната (врсте су \textit{савршене елементарне конјукције}, а колоне прости импликанти)
        \item Означавамо ($+$) сва поља која имају особину да се прост импликант садржи у \textit{савршеној елементарној конјукцији}.
        \item Колоне које садрже само један $+$ означавају битне просте импликанте (\textit{савршена елементарна конјукција} зависи само од једног, па се без њега не може)
        \item Уколико преостану \textit{савршене елементарне конјукције} непокривене битним простим импликантима, тражимо додатне просте импликанте из скупа
        преосталих који их покривају.
    \end{itemize}

    \underline{Пример:} % isti kao u prethodnom zadatku
    \begin{equation}
        F(x, y, z) = \NE{x}\NE{y}\NE{z} \ILI \NE{x}\NE{y}z \ILI \NE{x}yz \ILI x\NE{y}z
    \end{equation}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.5\textwidth]{slike/1/kvin_meklaski_prva_faza}
        \caption{Прва фаза: одабир простих импликаната}
        \label{fig:kvin_meklaski_prva_faza}
    \end{figure}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/1/kvin_meklaski_druga_faza}
        \caption{Друга фаза: битни прости импликанти}
        \label{fig:kvin_meklaski_druga_faza}
    \end{figure}

    \FloatBarrier

    \begin{equation}
        \Rightarrow F(x, y, z) = \NE{x} \NE{y} \ILI \NE{y}z \ILI \NE{x}z
    \end{equation}

    \subsection{Како се употребљаваjу Карноове мапе у присуству небитних вредности? Пример.}
    \label{subsec:karno_nebitne_vrednosti} % strana 35

    Небитна вредност ће бити третирана као вредност 1 уколико нам омогућава веће заокруживање.

    У супротном, биће третирана као вредност 0.

    \begin{table}[ht]
        \centering
        \begin{tabular}{|c|c|c|c||c|}
            \hline
            $x$ & $y$ & $z$ & $u$ & $F(x,y,z,u)$ \\
            \hline
            0 & 0 & 0 & 0 & 0 \\
            0 & 0 & 0 & 1 & -- \\
            \hline
            0 & 0 & 1 & 0 & 0 \\
            0 & 0 & 1 & 1 & 1 \\
            \hline
            0 & 1 & 0 & 0 & -- \\
            0 & 1 & 0 & 1 & 1 \\
            \hline
            0 & 1 & 1 & 0 & -- \\
            0 & 1 & 1 & 1 & -- \\
            \hline
            1 & 0 & 0 & 0 & -- \\
            1 & 0 & 0 & 1 & -- \\
            \hline
            1 & 0 & 1 & 0 & 0 \\
            1 & 0 & 1 & 1 & 0 \\
            \hline
            1 & 1 & 0 & 0 & 1 \\
            1 & 1 & 0 & 1 & -- \\
            \hline
            1 & 1 & 1 & 0 & 1 \\
            1 & 1 & 1 & 1 & -- \\
            \hline
        \end{tabular}
        \caption{Табела истинитости функције $F(x,y,z,u)$ с небитним вредностима}
        \label{tab:istinitosna_tablica_nebitne_vrednosti}
    \end{table}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.5\textwidth]{slike/1/karnoova_mapa_nebitne_vrednosti}
        \caption{Заокруживање небитних вредности}
        \label{fig:karnoova_mapa_nebitne_vrednosti}
    \end{figure}

    \FloatBarrier

    \begin{equation}
        \Rightarrow F(x, y, z, u) = \NE{x}u \ILI y
    \end{equation}

    \subsection{Како се метод Квин-Мекласког користи у присуству небитних вредности? Пример.}
    \label{subsec:kvin_meklaski_nebitne_vrednosti} % strana 37

    \begin{itemize}
        \item У првој фази се небитне вредности третирају као 1 (учествују у груписању) (потенцијално проналазимо веће групе и смањујемо сложеност израза)
        \item У другој фази се небитне вредности третирају као 0 (не наводе се у табели простих импликаната) (не морамо да их покривамо јер функција у њима не мора да буде једнака 1)
    \end{itemize}

    \underline{Пример:}

    Задатак из табеле\ \ref{tab:istinitosna_tablica_nebitne_vrednosti}.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/1/kvin_meklaski_nebitne_vrednosti_prva_faza}
        \caption{Прва фаза: прости импликанти (небитне вредности третирамо као 1)}
        \label{fig:kvin_meklaski_nebitne_vrednosti_prva_faza}
    \end{figure}

    \FloatBarrier

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.7\textwidth]{slike/1/kvin_meklaski_nebitne_vrednosti_druga_faza}
        \caption{Друга фаза: битни прости импликанти (небитне вредности третирамо као 0)}
        \label{fig:kvin_meklaski_nebitne_vrednosti_druga_faza}
    \end{figure}

    \begin{equation}
        \Rightarrow F(x, y, z, u) = \NE{x}u \ILI y
    \end{equation}

    \subsection{Шта jе Петриков метод и коjа jе његова улога у оквиру методе Квин-Мекласког? Навести пример.}
    \label{subsec:petrikov_metod} % strana 33

    Користи се за проналажење најмањег могућег скупа додатних простих импликаната (најмањи број конјукција).

    \begin{itemize}
        \item Из табеле се бришу врсте које одговарају битним простим импликантима, и колоне које одговарају \textit{савршеним елементарним конјукцијама}
        које су њима покривене.
        \item Изводимо нову функцију (Петрикову функцију) где свака заграда представља једну колону, а унутар заграде сабирамо редове (просте импликанте) који покривају ту колону
        \item Алгебарским трансформацијама поједностављујемо израз и то је наш подскуп додатних простих импликаната
    \end{itemize}

    \section{Логичка кола}
    \label{sec:logicka_kola}
    
    \subsection{Елементарна логичка кола (геjтови) и њихове шематске ознаке.}
    \label{subsec:elem_logicka_kola} % strana 44

    Бафер, бафер са три стања,\\ НЕ, И, ИЛИ, НИ, НИЛИ, ЕИЛИ, НЕИЛИ коло.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=\textwidth]{slike/2/elem_logicka_kola}
        \caption{Логичке капије}
        \label{fig:elem_logicka_kola}
    \end{figure}

    \FloatBarrier
    
    \subsection{Нацртати симбол и обjаснити функциjу NMOS транзистора.}
    \label{subsec:nmos} % strana 49 - 50

    Сорс и дрејн представљају два острва $N$ типа која се налазе на подлози $P$ типа.
    Сорс је повезан на негативан напон, а дрејн на позитиван.
    Да би дошло до провођења струје, потребно је на гејт довести велики позитиван напон (у односу на сорс).

    Чинећи то, под утицајем електричног поља малобројни слободни електрони из $P$ подлоге се гомилају око изолатора и формирају $N$ канал, кроз који теку од сорса ка дрејну.

    Транзистор (потпуно) проводи када је напон на гејту логичка јединица.\ У супротном, не проводи.

    Симбол:\ \ref{fig:nmos_pmos_oznake}.
    
    \komentar{Ако ти није јасно шта се дешава, отвори скрипту на 49-50 страни.}

    \subsection{Нацртати симбол и обjаснити функциjу PMOS транзистора.}
    \label{subsec:pmos} % strana 49 - 50

    Сорс и дрејн представљају два острва $P$ типа која се налазе на подлози $N$ типа.
    Сорс је повезан на \textbf{позитиван напон}, а дрејн на \textbf{негативан}.
    Да би дошло до провођења струје, потребно је на гејт довести велики негативан напон (у односу на сорс).

    Чинећи то, малобројне шупљине из $N$ супстрата бивају привучене од стране електричног поља гејта и гомилају се испод изолатора и формирају $P$ канал, кроз који
    се шупљине усмерено крећу од сорса ка дрејну.

    Транзистор (потпуно) проводи када је напон на гејту логичка нула.\ У супротном, не проводи.
    
    \komentar{Ознака PMOS транзистора садржи кружић на гејту и то је разликује од ознаке NMOS транзистора.}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/2/nmos_pmos_oznake}
        \caption{Ознаке NMOS и PMOS транзистора}
        \label{fig:nmos_pmos_oznake}
    \end{figure}

    \FloatBarrier

    \subsubsection{Коментар: (не верујем да ће ово питати али је боље знати (страна 48 у скрипти))} % strana 48

    Допирање је уградња релативно мале количине атома неког другог елемента различите валентности у кристалну решетку силицијума.\ (силицијум је четворовалентан елемент)

    $N$-допирани силицијум подразумева допирање петовалентним елементом (нпр.\ фосфором).
    Он ће креирати четири ковалентне везе са суседним атомима силицијума, али ће његов преостали, пети валентни електрон, остати неповезан.
    Стога, требаће му мало енергије да постане слободан.\ Тиме не настаје шупљина, али ће концентрација слободних електрона бити знатно већа.
    Зове се $N$-допирани силицијум јер у њему доминирају негативни слободни носиоци наелектрисања.

    За $P$-допирани силицијум важи обрнуто, допира се тровалентним елементом (бор), и у њему доминирају позитивни слободни носиоци наелектрисања (већа концентрација шупљина).

    MOS транзистори представљају полупроводничку компоненту која има три прикључка: сорс, дрејн и гејт.\ Уз одговарајуће напоне на сорсу и дрејну, MOS транзистор ради као прекидач -
    струја може да тече од сорса ка дрејну под условом да се одговарајући напон доведе на гејт.

    Кроз гејт не протиче струја, јер је изолатором одвојен од остатка транзистора.\ Његова улога је да својим електричним потенцијалом створи одговарајуће електрично поље
    које ће у транзистору привући носиоце наелектрисања и обезбедити проток струје од сорса ка дрејну.

    \subsection{Имплементациjа НЕ кола у CMOS-у.}
    \label{subsec:ne_cmos} % strana 53

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/2/kola/cmos-ne}
        \caption{НЕ коло у CMOS-у}
        \label{fig:ne_cmos}
    \end{figure}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=\textwidth]{slike/2/kola/ne_nmos_pmos}
        \caption{НЕ коло у NMOS-у (лево) и PMOS-у (десно)}
        \label{fig:ne_nmos_pmos}
    \end{figure}

    \FloatBarrier
    
    \subsection{Имплементациjа НИ и И кола у CMOS-у.}
    \label{subsec:ni_i_cmos} % strana 54

    \subsubsection{НИ (NAND) $\NI$}

    Горња мрежа: два паралелна PMOS транзистора.

    Доња мрежа: два редно везана NMOS транзистора.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/2/kola/cmos_ni}
        \caption{НИ коло у CMOS-у}
        \label{fig:ni_cmos}
    \end{figure}

    \FloatBarrier

    \subsubsection{И (AND) $\I$}

    Добија се тако што надовежемо НЕ коло на НИ коло (обрнуто интуицији).

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/2/kola/cmos_i}
        \caption{И коло у CMOS-у}
        \label{fig:i_cmos}
    \end{figure}

    \FloatBarrier

    \subsection{Имплементациjа НИЛИ и ИЛИ кола у CMOS-у.}
    \label{subsec:nili_ili_cmos} % strana 55

    \subsubsection{НИЛИ (NOR) $\NILI$}

    Аналогно НИ колу, само обрнуто:\\
    Горња мрежа: два редно везана PMOS транзистора. \\
    Доња мрежа: два паралелно везана NMOS транзистора.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/2/kola/cmos_nili}
        \caption{НИЛИ коло у CMOS-у}
        \label{fig:nili_cmos}
    \end{figure}

    \FloatBarrier

    \subsubsection{ИЛИ (OR) $\ILI$}

    Надовежемо НЕ коло на НИЛИ коло.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/2/kola/cmos_ili}
        \caption{ИЛИ коло у CMOS-у}
        \label{fig:ili_cmos}
    \end{figure}

    \FloatBarrier

    \subsection{Имплементациjа ЕИЛИ кола у CMOS-у.}
    \label{subsec:eili_cmos} % strana 55 - 56

    Допуни објашњење.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/2/kola/cmos_eili}
        \caption{ЕИЛИ коло у CMOS-у}
        \label{fig:eili_cmos}
    \end{figure}

    \FloatBarrier

    \subsection{Пропусни транзистори и преносне капиjе. Функциjа и улога.}
    \label{subsec:propusni_tranzistori_prenosne_kapije} % strana 57 - 58

    Пропусни транзистор контролише пропуштање неког сигнала од једне тачке кола ка другој у зависности од вредности неког другог сигнала.

    Преносне капије су CMOS варијанта пропусних транзистора.

    Користе се приликом реализације бафера са три стања.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/2/kola/propusni_tranzistori_prenosne_kapije}
        % \caption{ЕИЛИ коло у CMOS-у}
        \label{fig:propusni_tranzistori_prenosne_kapije}
    \end{figure}

    \FloatBarrier
    
    \subsection{Шта jе бафер са три стања и чему служи?}
    \label{subsec:bafer_sa_tri_stanja}

    Бафер је коло које реализује идентичку функцију ($f(x) = x$). % strana 43
    Са логичке тачке гледишта нема функцију, али се користи за појачавање сигнала.

    Бафер са три стања додатно има и контролни улаз $e$:
    \begin{itemize}
        \item Ако је $e = 1$, понаша се исто као и обичан бафер
        \item Ако је $e = 0$, на излазу је вредност високе импедансе ($Z$).
    \end{itemize}

    Омогућава произвољно укључивање/искључивање делова кола.

    \subsection{Имплементациjа бафера са три стања у CMOS-у.}
    \label{subsec:bafer_sa_tri_stanja_implementacija} % strana 57

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/2/kola/cmos_bafer_sa_tri_stanja}
        \caption{CMOS бафер са три стања}
        \label{fig:bafer_sa_tri_stanja}
    \end{figure}

    \FloatBarrier

    \subsection{Шта jе вредност високе импедансе и коjа jе њена улога у логичким колима.}
    \label{subsec:visoka_impedansa} % strana 42
    
    Вредност високе импедансе се може посматрати као да неко логичко коло не даје вредност на излазу (тј.\ уместо да даје вредност 0 или 1,
    даје $Z$ који третирамо као да кола нема).\ Ова вредност не утиче на друге вредности у колу.
    Иако није део алгебре логике, постоји како би се спречиле недефинисане вредности (два кола истовремено враћају различите резултате (кад се саберу добијемо необичне резултате)).

    \section{Комбинаторна кола}
    \label{sec:kombinatorna_kola}

    \subsection{Шта jе комбинаторно коло?}
    \label{subsec:kombinatorno_kolo}

    Логичка кола код којих се вредности израза (у сваком тренутку) могу изразити као логичке функције од вредности улаза (у том истом тренутку).

    Вредности које су биле на улазима раније не утичу на тренутну вредности излаза (немају могућност памћења стања).

    \subsection{Навести наjважниjе врсте основних комбинаторних кола.}
    \label{subsec:vrste_osn_komb_kola}

    \begin{itemize}
        \item Мултиплексер
        \item Демултиплексер
        \item Декодер
        \item Кодер
    \end{itemize}

    \subsection{Шта jе мултиплексор и коjа му jе основна функциjа? Представити графичким симболом и таблицом мултиплексор 4-1.}
    \label{subsec:multiplekser}

    Комбинаторно коло које омогућава избор једне од више понуђених вредности.

    Има $2^k$ улаза и један излаз, као и додатних $k$ селекционих улаза помоћу којих се врши избор једног од улаза.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.4\textwidth]{slike/3/4-1_multiplekser_simbol}
        \caption{Шематска ознака 4-на-1 мултиплексера}
        \label{fig:4-1_multiplekser_simbol}
    \end{figure}

    \begin{table}[ht]
        \centering
        \begin{tabular}{|c|c|c|}
            \hline
            $S_1$ & $S_0$ & Излаз $Y$ \\ \hline
            0 & 0 & $I_0$ \\ \hline
            0 & 1 & $I_1$ \\ \hline
            1 & 0 & $I_2$ \\ \hline
            1 & 1 & $I_3$ \\ \hline
        \end{tabular}
        \caption{Таблица истинитости мултиплексора 4:1}
        \label{tab:4-1_multiplekser_tablica}
    \end{table}

    \FloatBarrier

    \subsection{Нацртати логичко коло имплементациjе мултиплексора 4-1.}
    \label{subsec:multiplekser_4-1_implementacija}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/3/4-1_multiplekser_implementacija}
        \caption{Имплементација 4-на-1 мултиплексера}
        \label{fig:multiplekser_4-1_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Како се мултиплексор употребљава за имплементациjу логичких функциjа?}
    \label{subsec:multiplekser_logicka_funkcija} % strana 68

    Мултиплексери се могу користити за декомпозицију логичких функција на више функција мањег реда (једноставнијих).
    То радимо тако што дефинишемо одвојене функције које рачунају резултат првобитне када су неке логичке вредности у њој фиксиране.
    Потом, прослеђујемо те улазне вредности као селекционе улазе, те мултиплексер зна које право решење треба да врати.

    \komentar{У случају функција великог реда, декомпозиција се може вршити на више нивоа (са више мултиплексера).}
    
    \subsection{Шта jе демултиплексер и коjа jе његова основна функциjа? Представити графичким симболом и таблицом демултиплексер 1-4.}
    \label{subsec:demultiplekser}

    Демултиплексер врши обрнуту функцију од мултиплексера.
    Има један улаз и $2^k$ излаза, при чему се улаз преусмерава на тачно један од излаза, у зависности од вредности $k$-битног селекционог улаза.
    (селекциони улаз тумачимо као бинарни број чија вредност је индекс излаза)

    Користи се када је потребно одредити одредиште вредности која се преноси неком магистралом.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.4\textwidth]{slike/3/1-4_demultiplekser_simbol}
        \caption{Шематска ознака 1-на-4 демултиплексера}
        \label{fig:demultiplekser_4-1_simbol}
    \end{figure}

    Додај истинитосну таблицу.

    \begin{table}[ht]
        \centering
        \begin{tabular}{|c|c|c|c|c|c|}
            \hline
            $S_1$ & $S_0$ & Излаз $I_0$ & $I_1$ & $I_2$ & $I_3$ \\ \hline
            0 & 0 & $U$ & 0 & 0 & 0 \\ \hline
            0 & 1 & 0 & $U$ & 0 & 0 \\ \hline
            1 & 0 & 0 & 0 & $U$ & 0 \\ \hline
            1 & 1 & 0 & 0 & 0 & $U$ \\ \hline
        \end{tabular}
        \caption{Таблица истинитости мултиплексора 4:1}
        \label{tab:1-4_demultiplekser_tablica}
    \end{table}

    \FloatBarrier

    \subsection{Нацртати логичко коло имплементациjе демултиплексора 1-4.}
    \label{subsec:demultiplekser_4-1_implementacija}

    Имплементација која на неактивним излазима даје вредност високе импедансе би користила бафере са три стања.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/3/1-4_demultiplekser_implementacija}
        \caption{Имплементација 1-на-4 демултиплексера}
        \label{fig:1-4_demultiplekser_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Шта jе декодер и коjа jе његова основна функциjа? Представити графичким симболом и таблицом декодер 2-4.}
    \label{subsec:dekoder}

    Комбинаторно коло које декодира бинарно записани број и на основу његове вредности активира одговарајући сигнал на излазу.
    Има $k$-битни селекциони улаз и $2^k$ излаза.\ Улаз представља бинарни број који је индекс излаза.

    Селектовани улаз има вредност 1, а остали вредност 0.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.4\textwidth]{slike/3/2-4_dekoder_simbol}
        \caption{Шематска ознака 2-на-4 декодера}
        \label{fig:2-4_dekoder_simbol}
    \end{figure}

    Додај истинитосну таблицу.

    \FloatBarrier

    \subsection{Нацртати логичко коло имплементациjе декодера 2-4.}
    \label{subsec:2-4_dekoder_implementacija}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/3/2-4_dekoder_implementacija}
        \caption{Имплементација 2-на-4 декодера}
        \label{fig:2-4_dekoder_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Шта jе кодер и где се обично користи? Шта jе кодер са приоритетом?}
    \label{subsec:koder} % strana 72

    Кодер (енкодер) је коло које врши обрнуту функцију од декодера.
    Има $2^k$ улаза и $k$ излаза (зовемо га $2^k$-на-$k$ кодер).

    Претпостављамо да је у сваком тренутку један од улаза једнак 1, док су остали 0.
    Излази декодера могу да се тумаче као бинарни број који представља индекс улаза који је једнак 1.

    Уколико знамо да у групи регистара један садржи неку вредност, можемо да га откријемо тако што извршимо конјукцију те вредности
    и вредности у регистру над сваким регистром, и проследимо излаз кодеру, који ће нам вратити тачан индекс траженог регистра.

    Недостатак овог кодера је што његово понашање није добро дефинисано када више улаза истовремено има вредност 1.
    Стога, улазима додељујемо приоритет (ако је више њих 1, бирамо онај већег приоритета) и то називамо кодер са приоритетом.

    \subsection{Нацртати логичко коло имплементациjе кодера 4-2.}
    \label{subsec:4-2_koder_implementacija}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/3/4-2_koder_implementacija}
        \caption{Имплементација 4-на-2 кодера}
        \label{fig:4-2_koder_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Нацртати логичко коло имплементациjе кодера 4-2 са приоритетом.}
    \label{subsec:4-2_koder_sa_prioritetom_implementacija}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/3/4-2_koder_sa_prioritetom_implementacija}
        \caption{Имплементација 4-на-2 кодера са приоритетом}
        \label{fig:4-2_koder_sa_prioritetom_implementacija}
    \end{figure}

    \FloatBarrier
    
    \subsection{Шта jе компаратор? Навести основне врсте компаратора.}
    \label{subsec:komparator} % strana 88

    Компаратори су кола која упоређују два податка.\ Основне врсте су компаратори на једнакост и потпуни компаратори (поредак).
    
    \subsection{Нацртати логичко коло 4-битног компаратора (за поређење на jеднакост).}
    \label{subsec:4-bitni_komparator_na_jednakost_implementacija}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/3/4-bitni_komparator_na_jednakost_implementacija}
        \caption{Имплементација 4-битног компаратора на једнакост}
        \label{fig:4-bitni_komparator_na_jednakost_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Нацртати логичко коло 4-битног компаратора за потпуно поређење.}
    \label{subsec:4-bitni_potpuni_komparator_implementacija}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/3/4-bitni_potpuni_komparator_implementacija}
        \caption{Имплементација 4-битног потпуног компаратора}
        \label{fig:4-bitni_potpuni_komparator_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Нацртати логичко коло 8-битног померача.}
    \label{subsec:8-bitni_pomerac_u_levo_implementacija} % strana 75

    \begin{figure}[ht]
        \centering
        \includegraphics[width=\textwidth]{slike/3/8-bitni_pomerac_u_levo_implementacija}
        \caption{Имплементација 8-битног померача у лево}
        \label{fig:8-bitni_pomerac_u_levo_implementacija}
    \end{figure}

    \FloatBarrier
    
    \subsection{Нацртати истинитосну таблицу и логичко коло бинарног полусабирача.}
    \label{subsec:binarni_polusabirac}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.4\textwidth]{slike/3/sabiraci/polusabirac_tablica}
        \caption{Истинитосна таблица бинарног полусабирача}
        \label{fig:polusabirac_tablica}
    \end{figure}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/3/sabiraci/polusabirac}
        \caption{Имплементација бинарног полусабирача}
        \label{fig:polusabirac}
    \end{figure}

    \FloatBarrier

    \subsection{Нацртати истинитосну таблицу и логичко коло потпуног сабирача.}
    \label{subsec:potpuni_sabirac}

    \begin{table}[h!]
        \centering
        \begin{tabular}{|c|c|c||c|c|}
            \hline
            $x$ & $y$ & $pc$ & $S$ & $C$ \\ \hline\hline
            0 & 0 & 0 & 0 & 0 \\ \hline
            0 & 0 & 1 & 1 & 0 \\ \hline
            0 & 1 & 0 & 1 & 0 \\ \hline
            0 & 1 & 1 & 0 & 1 \\ \hline
            1 & 0 & 0 & 1 & 0 \\ \hline
            1 & 0 & 1 & 0 & 1 \\ \hline
            1 & 1 & 0 & 0 & 1 \\ \hline
            1 & 1 & 1 & 1 & 1 \\ \hline
        \end{tabular}
        \caption{Истинитосна таблица потпуног сабирача}
        \label{tab:potpuni_sabirac_tablica}
    \end{table}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/3/sabiraci/potpuni_sabirac}
        \caption{Имплементација бинарног потпуног сабирача}
        \label{fig:potpuni_sabirac}
    \end{figure}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/3/sabiraci/bosanac_sabirac}
        \caption{Босански потпуни сабирач}
        \label{fig:bosanski_sabirac}
    \end{figure}

    \FloatBarrier

    \subsection{Вишебитни таласасти сабирач. Кашњење.}
    \label{subsec:visebitni_talasasti_sabirac_kasnjenje} % strana 79-80-81

    Вишебитни таласасти сабирач (енг.\ ripple carry adder) се користи за сабирање вишебитних вредности.
    Добија се уланчавањем одговарајућег броја потпуних сабирача, тако да $i$-ти потпуни сабирач рачуна збир $i$-тих битова,
    а његов пренос прослеђује $i+1$-вом потпуном сабирачу.
    Пренос последњег је пренос целог вишебитног сабирача.

    Један сабирач може да настави сабирање тек када му претходни пошаље свој пренос, те кашњење расте са бројем битова ($n \cdot 2\Delta$).
    
    \subsection{Нацртати истинитосну таблицу и логичко коло бинарног полуодузимача.}
    \label{subsec:binarni_poluoduzimac} % strana 86

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.4\textwidth]{slike/3/sabiraci/poluoduzimac_tablica}
        \caption{Истинитосна таблица полуодузимача}
        \label{fig:poluoduzimac_tablica}
    \end{figure}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/3/sabiraci/poluoduzimac}
        \caption{Имплементација бинарног полуодузимача}
        \label{fig:poluoduzimac_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Нацртати истинитосну таблицу и логичко коло потпуног одузимача.}
    \label{subsec:potpuni_oduzimac} % strana 87

    \begin{table}[h!]
        \centering
        \begin{tabular}{|c|c|c||c|c|}
            \hline
            $x$ & $y$ & $pc$ & $S$ & $C$ \\ \hline\hline
            0 & 0 & 0 & 0 & 0 \\ \hline
            0 & 0 & 1 & 1 & 1 \\ \hline
            0 & 1 & 0 & 1 & 1 \\ \hline
            0 & 1 & 1 & 0 & 1 \\ \hline
            1 & 0 & 0 & 1 & 0 \\ \hline
            1 & 0 & 1 & 0 & 0 \\ \hline
            1 & 1 & 0 & 0 & 0 \\ \hline
            1 & 1 & 1 & 1 & 1 \\ \hline
        \end{tabular}
        \caption{Истинитосна таблица потпуног одузимача}
        \label{tab:potpuni_oduzimac_tablica}
    \end{table}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/3/sabiraci/potpuni_uduzimac}
        \caption{Имплементација бинарног потпуног одузимача}
        \label{fig:potpuni_oduzimac_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Вишебитни таласасти одузимач. Кашњење.}
    \label{subsec:visebitni_talasasti_oduzimac_kasnjenje}

    Исто као и\ \ref{subsec:visebitni_talasasti_sabirac_kasnjenje}, добија се уланчавањем више потпуних одузимача,
    тако да $i$-ти потпуни одузимач рачуна разлику $i$-тих битова, и њихов пренос прослеђује $i+1$-вом потпуном одузимачу.
    Пренос последњег потпуног одузимача је пренос целокупног вишебитног одузимача.

    И код вишебитног таласастог одузимача сложеност расте са бројем битова ($n \cdot 2\Delta$).

    \komentar{И ово можемо заменити потпуним одузимачем са рачунањем преноса унапред}.
    
    \subsection{Обjаснити укратко принцип рада сабирача са рачунањем преноса унапред.}
    \label{subsec:sabirac_unapred}

    Уместо да се на пренос чека претходни сабирач, само на основу улазних вредности израчунава се пренос на сваком биту.
    То се ради углавном помоћу посебног логичког кола званог јединица за рачунање преноса унапред (LCU).

    \subsection{Шта код сабирача са рачунањем преноса унапред означаваjу вредности $P_i$ и $G_i$ и по коjим се формулама рачунаjу.}
    \label{subsec:prenos_unapred_vrednosti}

    \begin{itemize}
        \item $G_i = x_0 \I y_0$ - говори нам да се на $i$-том биту генерише пренос
        \item $P_i = x_0 \EILI y_0$ - да ли $i$ пропагира претходни пренос $C_{i-1}$ ка следећем биту
    \end{itemize}
    
    \subsection{Навести формуле по коjима CLA jединица рачуна преносе Ci као и групне P и G вредности.}
    \label{subsec:lcu_racun}

    \begin{itemize}
        \item $C_i = G_i \ILI P_i C_{i-1}$ - пренос
        \item $G_i = G_{i-1} \ILI G_{i-2} P_{i-1} \ILI G_{i-3} P_{i-2} P_{i-1} \ILI \ldots \ILI G_{0} P_{1} \I \ldots \I P_{i-1}$
        \item $P_i = P_0 P_1 \ldots P_{i-1}$
    \end{itemize}

    \subsection{Навести пример имплементациjе ALU jединице.}
    \label{subsec:alu_implementacija} % strana 89 - 90

    Аритметичко логичка јединица у себи може да садржи различита комбинаторна кола, а помоћу мултиплексера се на улазу
    може одређивати која нам је операција потребна.

    \komentar{ALU може имати и додатне улазе који могу да утичу на резултат (пример употребе: софтверско уланчавање сабирања)}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.4\textwidth]{slike/3/alu_simbol}
        \caption{Симбол за аритметичко логичку јединицу}
        \label{fig:alu_simbol}
    \end{figure}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/3/alu_implementacija}
        \caption{Имплементација аритметичко логичке јединице}
        \label{fig:alu_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Шта jе програмибилни низ логичких елемената (PLA)? Навести пример.}
    \label{subsec:pla}

    Ово користимо уколико желимо да имплементирамо произвољну логичку функцију на чипу без да идемо у фабрику.

    Може се замислити као савршени ДНФ који садржи сваку могућу комбинацију улаза, али свака конјукција даје 0 (свака веза сорса и земље има мали осигурач).
    Тај мали осигурач се може прегорети пуштањем јаче струје, чиме се изазива да конјукција даје резултат 1.

    Пример: PROM (програмабилна ROM).

    Не знам колико је ово лепо објашњено тако да ево још једног (више на страни 92 у скрипти).

    Желимо да имплементирамо произвољну логичку функцију.
    Међутим, она ће обично у себи имати више нула него јединица, тј.\ имаће мали број елементарних конјукција у савршеној ДНФ.
    Стога правимо прво И матрицу, где повезујемо оне улазе који су нам потребни за елементарне конјункције,
    а потом и ИЛИ матрицу у којој ће бити повезани одговарајући излази из И матрице тако да добијемо наше логичке функције.

    \subsection{Како се помоћу комбинаторних мрежа имплементира неизмењива мемориjа (ROM)? Пример таблице и одговараjуће имплементациjе.}
    \label{subsec:rom_implementacija}

    На декодер се везује улаз (адреса нашег бита), а у зависности од броја 1 додајемо толико дисјункција, које се везују за оне излазне линије које представљају адресу.
    (ако је вредност 0, дисјункције ће дати 0).

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/3/rom_implementacija}
        \caption{Имплементација ROM меморије преко комбинаторних мрежа}
        \label{fig:rom_implementacija}
    \end{figure}

    \FloatBarrier

    \section{Секвенцијална кола}
    \label{sec:sekvencijalna_kola}

    \subsection{Шта jе секвенциjално коло? По чему се секвенциjална кола разликуjу од комбинаторних кола.}
    \label{subsec:sekvencijalno_kolo_razlika}

    За разлику од комбинаторног кола, код којих вредност излаза зависи искључиво од вредности улаза,
    излаз секвенцијалних кола зависи од тренутног улаза и претходног стања (поседује памћење стања).

    Под стањем логичког кола се подразумева низ $S = (s_1, s_2, \ldots, s_m)$ чије се вредности могу одржавати унутар самог кола.
    Вредност стања се може мењати променом вредности на улазу, али његова нова вредност зависи и од старог стања (повратна спрега).

    \subsection{Нацртати концептуални диjаграм секвенциjалног кола и обjаснити основни принцип рада.}
    \label{subsec:sekvencijalno_kolo_dijagram}

    Састоји се од неког комбинаторног кола $G$ које за улаз $X$ и стање $S$ даје стање $S$ ($G(X, S) = S$ (стабилно стање)).
    Повратном спрегом се стање враћа на улаз кола $G$.

    Секвенцијално коло као крајњи излаз има $F(S)$ (где је $F$ нека логичка функција).
    За стање кажемо да је стабилно ако је оно фиксна тачка функције $G$ за неко фиксирано $X$.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/4/sekvencijalno_kolo_dijagram}
        \caption{Концептуална шема секвенцијалног кола}
        \label{fig:sekvencijalno_kolo_dijagram}
    \end{figure}

    \FloatBarrier
    
    \subsection{Шта jе нестабилност секвенциjалног кола, а шта недетерминистичност? Шта jе метастабилност?}
    \label{subsec:nestabilnost_nedeterministicnost_metastabilnost}

    Ако $S$ није фиксна тачка функције $G$ за дато $X$ (важи да $G(X, S) \neq S$), тада ће стање почети да се мења.\ Резултат:
    
    \begin{itemize}
        \item Стабилно стање: коло може стићи у неку фиксну тачку (стабилно стање) $S'$, тј.\ почеће да важи $G(X, S') = S'$.
        \item Нестабилност секвенцијалног кола: коло осцилује између различитих стања, неуспешно тражећи стабилно стање
        \item Недетерминистичност: Коло може отићи у стабилно стање $S'$, али и у неко друго стабилно стање $S''$ (непредвидљиво).
        \item Метастабилност: Коло се стабилизује у „међустању“ (нпр.\ на вредности $+2.5V$, што није исправна логичка вредност)
    \end{itemize}
    
    \subsection{Шта jе функциjа (таблица) преласка секвенциjалног кола? Навести пример.}
    \label{subsec:tablica_prelaska}

    Нека је $X$ произвољна вредност на улазу и $S$ такво да је $S = G(X, S)$ (тј.\ $S$ је стабилно стање за улаз $X$).
    Ако у неком тренутку улаз добије нову вредност $X'$, тада коло прелази у ново стабилно стање $S'$ (тј.\ важи $S' = G(X', S')$),
    при чему се то ново стање $S'$ може детерминистички одредити претходним стањем и новим улазом.

    \begin{equation}
        S' = T(X', S), T - \text{фиксирана векторска логичка функција}
    \end{equation}

    За кола која имају овакво понашање кажемо да су добро дефинисана и стабилна, а $T$ је функција (таблица) преласка кола $G$.
    
    \komentar{Понекад описано својство неће важити за све вредности $X$. Тада се за стабилан рад кола мора обезбедити да на улазе долазе само дозвољене вредности.
    Функција преласка неће бити тотална, већ само парцијално дефинисана.}
    
    \komentar{Излаз $Y_n$ у тренутку $t_n$ зависи од \textit{секвенце} свих претходних улаза $X_0, X_1, \ldots , X_n$ (не само од $X_n$ као код комбинаторних кола).
    Одатле потиче назив секвенцијална кола.}

    \subsection{Обjаснити разлику између синхроних и асинхроних секвенциjалних кола.}
    \label{subsec:sinhrono_asinhrono_kolo_razlika} % strana 101

    Код асинхроних кола, промена стања може наступити у било ком тренутку (време је континуална величина),
    а код синхроних кола, до промена може доћи само током одређених јасно дефинисаних временских периода (време је дискретна величина).

    Синхрона кола се лакше дизајнирају да раде поуздано, али су знатно спорија (јер им је брзина одређена ферквенцијом која мора да буде иста за сва кола у систему).

    \subsection{Обjаснити улогу часовника. На коjи начин часовник омогућава синхронизациjу секвенциjалних кола?}
    \label{subsec:uloga_casovnika}

    Часовник (clock) представља јединствени синхронизациони сигнал који се придодаје свим секвенцијалним колима у систему.
    То је сигнал који наизменично у једнаком ритму мења вредност са 0 на 1 (узлазни руб) и обрнуто (силазни руб).

    Користи се како би се вршила имплицитна синхронизација кола.\ Секвенцијална кола сада имају и додатни улаз за часовник.
    Имплементацијом се обезбеђује да се стање таквог секвенцијалног кола може мењати само током једног руба часовника.
    
    \subsection{Елементи циклуса часовника. Типови часовника. Фреквенциjа часовника.}
    \label{subsec:casovnik}

    Прелазак часовника са 0 на 1 се зове узлазни руб (узлазна ивица), док се прелазак са 1 на 0 зове силазни руб (силазна ивица) часовника.
    Временски период између две узлазне (силазне) ивице се назива циклус часовника.
    Време трајања јединице је позитивни део циклуса, а време трајања нуле негативни део циклуса.
    Они могу трајати једнако (симетрични часовници), али не морају (асиметрични часовници).
    Број циклуса у секунди назива се ферквенција часовника.
    Часовник се обично генерише помоћу кварцног осцилатора.
    Улаз часовника обележава се са $clk$.

    \subsection{Шта jе $SR$ реза? Нацртати имплементациjу, таблицу преласка, логички симбол и обjаснити понашање.}
    \label{subsec:sr_reza}

    \komentar{Реза је коло које има могућност чувања једнобитног стања.\ Улази резе омогућавају постављање и одржавање вредности стања, док излази
    омогућавају очитавање тренутног стања кола.}

    $SR$ реза састоји се из два НИЛИ ($\NILI$) кола.\ Има два једнобитна улаза $R$ и $S$,
    стање се састоји из пара битова $(Q, Q')$, а излази су једнаки битовима стања.
    Важи релација повратне спреге:

    \begin{equation}
        \begin{aligned}
            Q &= R \NILI Q' \\
            Q' &= S \NILI Q
        \end{aligned}
    \end{equation}

    Постоје два стабилна стања $((Q^{sled}, Q'^{sled}) = (Q, Q'))$ која ни за које вредности улаза не воде у нестабилност.

    \begin{itemize}
        \item $(S, R) = (0, 1)$ имамо само једно стабилно стање $(Q, Q') = (0, 1)$, док остала воде у ово стање (с кашњењем)
        \item $(S, R) = (1, 0) ditto \Rightarrow (Q, Q') = (1, 0) ditto $
        \item $(S, R) = (0, 0)$ имамо два стабилна стања $(Q, Q') = (0, 1)$ и $(Q, Q') = (1, 0)$ (остала воде у циклус (нестабилност)
        (у физичком свету ће екстерни фактори променити стање једног и довести до стабилности (недетерминистичност)))
        \item Ако је улаз $(S, R) = (1, 1)$, добићемо $(Q, Q') = (0, 0)$, што ће довести до циклуса када променимо вредност улаза.
        Због тога, овај улаз морамо учинити недопустивим.
    \end{itemize}

    Закључујемо да ово коло чува један бит информације, јер је $Q'$ увек комплемент бита $Q$.

    \begin{itemize}
        \item $(S, R) = (0, 0)$ одржава запамћену вредност $Q$
        \item $(S, R) = (1, 0)$ поставља бит $Q$ на 1 (постављање (сетовање) бита)
        \item $(S, R) = (0, 1)$ поставља бит $Q$ на 0 (искључивање (ресетовање бита))
    \end{itemize}

    \begin{table}
        \centering
        \begin{tabular}{ccc|c}
            $S$ & $R$ & $Q$ & $Q^{\text{sled}}$ \\ \hline
            0   & 0   & 0   & 0 \\
            0   & 0   & 1   & 1 \\
            0   & 1   & -   & 0 \\
            1   & 0   & -   & 1 \\
            1   & 1   & -   & ?
        \end{tabular}
        \caption{Таблица преласка SR резе}
        \label{tab:tablica_prelaska_sr_reze}
    \end{table}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.4\textwidth]{slike/4/sr_reza_simbol}
        \caption{Симбол SR резе}
        \label{fig:sr_reza_simbol}
    \end{figure}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/4/sr_reza_implementacija}
        \caption{Имплементација $SR$ резе}
        \label{fig:sr_reza_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Шта jе D реза? Нацртати имплементациjу, таблицу преласка, логички симбол и обjаснити понашање.}
    \label{subsec:d_reza} % strana 100

    Један од начина да се реши проблем недопустивог улаза код SR резе је укидање другог улаза.
    Уместо њега, прослеђујемо негацију првог и преименујемо га у $D$.

    Иако смо на тај начин избегли две јединица на улазима SR резе, изгубили смо могућност две нуле (симултано и моћ памћења).
    Због тога, уводимо додатан улаз $e$ (enable).

    Улаз D резе (data) је улаз на који доводимо вредност једнобитног податка који желимо да сачувамо у колу.

    Када је $e$ = 1, тада D реза ради у транспарентном режиму (свака промена вредности на улазу $D$ се преноси на излаз $Q$).
    За $e$ = 0, излаз $Q$ задржава вредност која је претходно сачувана и не реагује на промене улаза $D$.

    Не могу да нађем симбол.

    \begin{table}
        \centering
        \begin{tabular}{ccc|c}
            $D$ & $e$ & $Q$ & $Q^{\text{sled}}$ \\ \hline
            -   & 0   & 0   & 0 \\
            -   & 0   & 1   & 1 \\
            0   & 1   & -   & 0 \\
            1   & 1   & -   & 1
        \end{tabular}
        \caption{Таблица преласка D резе}
        \label{tab:tablica_prelaska_d_reze}
    \end{table}

    % \begin{figure}[ht]
    %     \centering
    %     \includegraphics[width=0.4\textwidth]{slike/4/d_reza_simbol}
    %     \caption{Симбол D резе}
    %     \label{fig:d_reza_simbol}
    % \end{figure}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.6\textwidth]{slike/4/d_reza_implementacija}
        \caption{Имплементација D резе}
        \label{fig:d_reza_implementacija}
    \end{figure}

    \FloatBarrier
    
    \subsection{Коjа jе основна разлика између резе и флип-флопа?}
    \label{subsec:reza_flipflop_razlika}

    Синхрони аналог резе је флип-флоп.

    За разлику од резе, код које се промене стања догађају асинхроно, флип-флоп има додатни \textit{clk} улаз за часовник.
    Промене се могу догодити само у тренутку наиласка одговарајућег руба часовника.
    
    \komentar{Флип-флопови могу се имплементирати тако да реагују на било који од два руба часовника (чак и оба).}
    
    \subsection{Нацртати имплементациjу master-slave SR флип-флопа и обjаснити понашање.}
    \label{subsec:master_slave_sr_flip_flop}

    Када се на часовнику очита одговарајући руб, коло на основу вредности $S$ и $R$ одлучује да ли ће променити стање и на који начин.

    Имплементација се састоји из две SR резе (лева је главна (господар) а десна подређена реза (слуга)).
    $Q$ излаз master резе је повезан на $S$ излаз slave резе, док је $Q'$ излаз master резе је повезан на $R$ излаз slave резе.
    Тиме се постиже да се вредност master резе уписује у slave резу.

    Улази master резе су кроз конјукцију повезани са инвертованим сигналом часовника (мастер се отвара током негативног циклуса) (обрнуто за slave).
    Дакле, вредност у флип-флопу може се променити само на улазном рубу часовника.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/4/sr_flip_flop_implementacija}
        \caption{Имплементација SR флип-флопа}
        \label{fig:sr_flip_flop_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Нацртати имплементациjу master-slave D флип-флопа и обjаснити понашање.}
    \label{subsec:master_slave_d_flip_flop}

    Имплементација је идентична као и код SR флип-флопа, уз додатак мултиплексер са улазима D и вредности флип-флопа,
    и контролним сигналом који означава да ли је дозвољена промена вредности флип-флопа.

    Ако није, мултиплексер пропушта вредности флип-флопа, а ако јесте, пропушта вредност D .

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/4/d_flip_flop_implementacija}
        \caption{Имплементација D флип-флопа}
        \label{fig:d_flip_flop_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Нацртати имплементациjу master-slave JK флип-флопа и обjаснити понашање.}
    \label{subsec:master_slave_jk_flip_flop}

    Идеја JK флип-флопа је да се попуни семантика (додефинише) SR флип-флоп.

    \begin{itemize}
        \item $(J, K) = (0, 0), (J, K) = (0, 1), (J, K) = (1, 0)$ имају исту семантику као и код SR флип-флопа.
        \item $(J, K) = (1, 1)$ има улогу да инвертује вредност сачувану у флип-флопу.
    \end{itemize}

    Имплементира се слично као и SR флип-флоп, једина разлика су две додатне спреге које се са излаза $Q$ и $Q'$
    враћају назад у конјукције испред главне резе (са $K$ и $J$).
    Тиме се спречава пролазак двеју јединица и у том случају се остварује инвертовање.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/4/jk_flip_flop_implementacija}
        \caption{Имплементација JK флип-флопа}
        \label{fig:jk_flip_flop_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Нацртати имплементациjу master-slave T флип-флопа и обjаснити понашање.}
    \label{subsec:master_slave_t_flip_flop}

    T флип флоп је JK флип флоп чији су улази спојени на један улаз (као и код JK флип-флопа, 1 (1, 1) означава инвертовање).

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/4/t_flip_flop_implementacija}
        \caption{Имплементација T флип-флопа}
        \label{fig:t_flip_flop_implementacija}
    \end{figure}

    \FloatBarrier

    \komentar{Асинхроне верзије JK и T кола (као резе) биле би нестабилне.
    Приметимо да се синхроност ових кола може искористити за наизменично мењање вредности (бројачи)}

    \subsection{Обjаснити проблем „хватања jединице” (1s catching problem ) код master-slave RS и JK флип-флопова. На коjи начин се оваj проблем може решити?}
    \label{subsec:problem_hvatanja_jedinice} % strana 110


    Претпоставимо да флип-флоп реагује на силазни руб часовника.
    Ако се током позитивног дела циклуса на $S/J$ улазу случајно појавила краткотрајна јединица,
    она ће бити запамћена приликом силазног руба часовника, иако тада није нужно јединица на том улазу.

    Овај проблем може да се реши по угледу на D флип-флоп, убацивањем мултиплексера, који пропушта одговарајући излаз за одговарајућу комбинацију улаза.
    Тиме се постиже да је у master рези све време излаз са мултиплексера (који је стабилан), што решава овај проблем.

    \subsection{Шта jе регистар и како се имплементира? Нацртати пример.}
    \label{subsec:registar}

    Регистар дужине $n$ је коло које чува један $n$-битни бинарни број.
    Основне операције са регистрима су читање и упис.
    Регистри се обично праве од D флип-флопова.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/4/8_bitni_registar_implementacija}
        \caption{Имплементација 8-битног регистра}
        \label{fig:8_bitni_registar_implementacija}
    \end{figure}

    \FloatBarrier
    
    \subsection{Статичка мемориjа. Пример реализациjе синхроне статичке мемориjе $4 \times 4$ помоћу флип-флопова.}
    \label{subsec:staticka_memorija_realizacija} % strana 116

    Статичке меморије за чување појединачних битова користе резе (секвенцијална кола која могу имати два стабилна стања).
    Синхроне меморије су синхронизоване часовником.

    Меморија на слици је структурно организована као матрица флип-флопова димензије $n \times m$ где свака врста представља једну меморијску локацију.
    Адреса се чита помоћу декодера, при чему свака излазна линија декодера активира одговарајућу врсту матрице.

    \begin{itemize}
        \item У случају операције уписа, излазна линија декодера се користи да активира $e$ улазе свих флип-флопова у тој врсти матрице.
        Притом, $e$ улази се активирају само ако је $wr = 1$, што је постигнуто додатним конјукцијама за сваку врсту матрице.
        \item Читање се контролише баферима са три стања који се налазе на излазима флип-флопова (свака излазна линија декодера активира те бафере у одговарајућој врсти,
        те се управо те вредности шаљу на излаз).\ Додатни бафери са три стања при дну шеме омогућавају да се вредности прослеђују на излаз само када је $rd = 1$.
    \end{itemize}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/4/sinhrona_memorija_implementacija}
        \caption{Имплементација синхроне статичке меморије $4 \times 4$}
        \label{fig:sinhrona_memorija_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{На примеру обjаснити принцип конструкциjе већих мемориjа помоћу мањих.}
    \label{subsec:konstrukcija_vecih_memorija_pomocu_manjih}

    Исти принцип као и код конструкције мањих меморија (\ref{subsec:staticka_memorija_realizacija}), само што се
    у матрицу уместо флип-флопова стављају мање меморије.

    Можемо слагати и више оваквих меморија да добијемо још веће меморије.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/4/memorija_od_manjih}
        \caption{Синхрона меморија $16 \times 16$ реализована помоћу меморија $4 \times 4$}
        \label{fig:memorija_od_manjih}
    \end{figure}

    \FloatBarrier

    \subsection{Ефикасна реализациjа мемориjске ћелиjе код статичких мемориjа.}
    \label{subsec:celija_staticka_memorija}

    Меморија $m \times n$ је у оригиналној имплементацији садржала $mn$ флип-флопова.
    С обзиром да се сваки флип-флоп састоји од две резе у господар-слуга организацији, имам $2mn$ реза.

    Ово можемо оптимизовати тако што цела колона дели заједничку master резу, док се ћелије састоје само од slave реза.
    На овај начин смо смањили број реза са $2mn$ на $mn + n + 2$ (однос тежи ка 2 за веће матрице).
    
    \komentar{Примећујемо да смо ову синхрону меморију добили тако што смо на асинхрону додали синхронизациону логику.}

    \subsection{Обjаснити како се од асинхроних мемориjа могу конструисати синхроне мемориjе и нацртати одговараjући блок диjаграм.}
    \label{subsec:sinhrona_od_asinhrone}

    Најпре направимо матрицу асинхроне меморије која се састоји из асинхроних меморијских ћелија (по могућности оптимизованих),
    а затим је синхронизујемо додавањем синхронизационе логике.

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/4/asinhrona_u_sinhronu}
        \caption{Блок шема синхроне меморије од асинхроне}
        \label{fig:sinhrona_od_asinhrone}
    \end{figure}

    \FloatBarrier

    \subsection{Обjаснити принцип рада мемориjске ћелиjе код динамичких мемориjа.}
    \label{subsec:mem_celije_kod_dinamickih} % strana 125 - 130

    Код динамичких меморија, ћелија се састоји од једног транзистора и једног кондензатора.
    Вредност бита је представљена напуњеношћу кондензатора (када је кондензатор напуњен, потенцијал његове горње електроде је висок, те он чува 1, и обрнуто).
    Транзистор контролише пуњење и пражњење.

    Ако желимо да упишемо нешто у ћелију, на гејт транзистора доводимо 1.
    Ако је на битској линији било 1, транзистор ће се напунити, у супротном ће се испразнити.

    Када желимо да прочитамо вредност у ћелији отварамо транзистор, а на битску линију доводимо међувредност (2.5 V).
    Ако је кондензатор био напуњен, испразниће се и повећаће напон на битској линији.
    Посебно електронско коло ће напон повећати до 1, чиме ће напунити и кондензатор.

    Ако је кондензатор био празан, мало ће се напунити, а напон ће пасти.
    Посебно коло ће спустити напон битске линије на 0, чиме ће испразнити и кондензатор.

    Кондензатор се временом сам празни, па га је потребно допунити га.

    \subsection{Предности и недостатци динамичких мемориjа у односу на статичке.}
    \label{subsec:prednosti_mane_dinamicke_memorije}

    \begin{itemize}
        \item Предност: израда динамичких меморија је много јефтинија, због знатно мањег броја компоненти (уместо 6 транзистора имамо 1 транзистор и један кондензатор).
        То омогућава израду меморије високог капацитета по ниској цени (гигабајти).
        \item Мана: статичке меморије су много брже (користе се за израду регистара и кеш меморије) зато што се кондензатори празне, па морамо да их често освежавамо,
        и током тог периода не можемо да приступамо меморији.
    \end{itemize}

    \subsection{Шта jе померачки регистар и где се обично користи?}
    \label{subsec:pomeracki_registar} % strana 113

    Померачки регистри су регистри који имају могућност померања свог садржаја за једно место у лево или у десно (логичко или аритметичко).

    Типична примена оваквих регистара је у имплементација алгоритама множења (Бутов алгоритам).

    Друга примена је у конверзији између серијског и паралелног трансфера.
    Код серијског трансфера, податак се преноси бит по бит.
    Код паралелног трансфера, сви битови се преносе одједном, путем одговарајућег броја паралелних линија.
    Можемо учитати први бит, померити регистар у лево, учитати други и понављати поступак, и онда проследити цео податак паралелном линијом (може и обрнуто).

    \subsection{Асинхрони бинарни броjач. Нацртати шему и обjаснити принцип рада. Коjи jе основни недостатак асинхроних броjача?}
    \label{subsec:asinhroni_binarni_brojac} % strana 131

    Асинхрони бинарни бројач се имплементира помоћу $n$ T флип-флопова, који конструисани тако да реагују на силазни руб часовника,
    а чији су сви $T$ улази повезани на константну јединицу (то значи да ће при свакој транзицији мењати стање).

    Флип-флоп најмање тежине (крајњи десни на слици) је директно повезан на сигнал часовника, а осталима се на улаз за часовник доводи вредност излаза претходног.
    То значи да ће сваки следећи флип-флоп своје стање мењати при промени вредности претходног флип-флопа (дупло спорије) (то одговара бинарном бројању).

    Назив асинхрони бројач потиче од тога што су сви T флип-флопови повезани на различите синхронизационе сигнале (часовнике).

    Мана је велико кашњење (до промене вредности долази таласасто, један по један флип-флоп).

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/4/asinhroni_brojac}
        \caption{Шема асинхроног бинарног бројача}
        \label{fig:asinhroni_binarni_brojac}
    \end{figure}

    \FloatBarrier
    
    \subsection{Синхрони бинарни броjач. Нацртати шему и обjаснити принцип рада.}
    \label{subsec:sinhroni_binarni_brojac}

    Синхрони бинарни бројач има $n$ JK флип-флопова који реагују на \textbf{узлазни руб часовника} (сви су повезани на стварни излаз часовника).
    На улазе првог флип-флопа се стављају јединице, а на улазе свих осталих конјукције излаза претходних.
    Овако се опет имитира бинарно бројање.

    Иако имају сложенију имплементацију, имају знатно мање кашњење (оно зависи само од кашњења конјукција).

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/4/sinhroni_brojac}
        \caption{Шема синхроног бинарног бројача}
        \label{fig:sinhroni_binarni_brojac}
    \end{figure}

    \FloatBarrier

    \subsection{Дизаjн броjача са произвољним редоследом стања. Пример.}
    \label{subsec:brojac_sa_proizvoljnim_redosledom_stanja} % strana 133

    \komentar{Бројач са произвољним редоследом стања броји користећи бројеве ван поретка (поредак је другачије дефинисан)}

    Да бисмо генерисали бројач који броји у неком произвољном, унапред задатом редоследу, можемо приступити на исти начин као и код дизајна
    обичног бројача, само што ћемо прослеђивати другачије J и K од обичног, који би изазвали излаз броја који је на реду.

    То можемо постићи генерисањем таблице ексцитације (инверз таблице преласка за неко секвенцијално коло) , тј таблицу која ће
    нам рећи које вредности треба да буду на улазу како бисмо добили одговарајући излаз.
    На пример, инверзијом таблице преласка JK флип-флопа (\ref{fig:jk_flip_flop_implementacija}) добијамо следећу таблицу ексцитације:

    \begin{table}
        \centering
        \begin{tabular}{cc|cc}
            $Q$ & $Q^{sled}$ & $J$ & $K$ \\ \hline
            0   & 0         & 0   & -   \\
            0   & 1         & 1   & -   \\
            1   & 0         & -   & 1   \\
            1   & 1         & -   & 0   \\
        \end{tabular}
        \caption{Таблица ексцитације за JK флип-флоп}
        \label{tab:tablica_ekscitacije_jk_flip_flop}
    \end{table}

    \FloatBarrier

    Претпоставимо да желимо да направимо бројач који броји у редоследу:

    \begin{equation}
        \begin{aligned}
            & 0 \rightarrow 4 \rightarrow 7 \rightarrow 3 \rightarrow 2 \rightarrow 1 \rightarrow 0 \rightarrow \ldots \\
            & \text{(највећи број 7, довољно је 3 бита, конвертујемо у бинарне бројеве)} \\
            & 000 \rightarrow 100 \rightarrow 111 \rightarrow 011 \rightarrow 010 \rightarrow 001 \rightarrow 000 \rightarrow \ldots
        \end{aligned}
        \label{eq:brojac_primer_brojevi}
    \end{equation}

    Означимо битове бројача ($A, B, C$) и запишемо све преласке у облику таблице ексцитације\ \ref{tab:tablica_ekscitacije_brojac_proizv_redosled}.
    Бројач не мора да прође кроз сва тробитна стања те их означавамо као небитне вредности.

    \begin{table}
        \centering
        \begin{tabular}{|ccc|ccc|cc|cc|cc|}
            $A$ & $B$ & $C$ & $A^{sled}$ & $B^{sled}$ & $C^{sled}$ & $J_A$ & $K_A$ & $J_B$ & $K_B$ & $J_C$ & $K_C$ \\ \hline
            0   & 0   & 0   & 1          & 0          & 0          & 1     & $-$   & 0     & $-$   & 0     & $-$   \\
            0   & 0   & 1   & 0          & 0          & 0          & 0     & $-$   & 0     & $-$   & $-$   & 1     \\
            0   & 1   & 0   & 0          & 0          & 1          & 0     & $-$   & $-$   & 1     & 1     & $-$   \\
            0   & 1   & 1   & 0          & 1          & 0          & 0     & $-$   & $-$   & 0     & $-$   & 1     \\
            1   & 0   & 0   & 1          & 1          & 1          & $-$   & 0     & 1     & $-$   & 1     & $-$   \\
            1   & 0   & 1   & $-$        & $-$        & $-$        & $-$   & $-$   & $-$   & $-$   & $-$   & $-$   \\
            1   & 1   & 0   & $-$        & $-$        & $-$        & $-$   & $-$   & $-$   & $-$   & $-$   & $-$   \\
            1   & 1   & 1   & 0          & 1          & 1          & $-$   & 1     & $-$   & 0     & $-$   & 0     \\
        \end{tabular}
        \caption{Таблица ексцитације за бројач са произвољним редоследом стања}
        \label{tab:tablica_ekscitacije_brojac_proizv_redosled}
    \end{table}

    \FloatBarrier

    Сваку од колона $J_A$, $K_A$, $J_B$, $K_B$, $J_C$, $K_C$ посматрамо као функције од тренутног стања (од колона $A$, $B$, $C$).
    За те функције одређујемо минимални ДНФ и добијамо:

    \begin{align*}
        J_A &= \overline{B}\,\overline{C} & J_B &= A & J_C &= B + A \\
        K_A &= B & K_B &= \overline{C} & K_C &= \overline{A}
    \end{align*}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/4/brojac_sa_proizvoljnim_redosledom_stanja_primer}
        \caption{Шема бројача са произвољним редоследом стања дефинисаног \ref{eq:brojac_primer_brojevi}}
        \label{fig:brojac_sa_proizvoljnim_redosledom_stanja_primer_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Коначни аутомати као модел синхроних секвенциjалних кола. Дизаjн коначних аутомата. Пример.}
    \label{subsec:konacni_automati_model} % strana 136


    Коначни аутомат је коло којем, за разлику од бројача са произвољним редоследом стања (где су стања унапред дефинисана),
    на улазу можемо наредити на које стање да пређе у следећем кораку.
    Притом, може имати и излаз чија се вредност генерише приликом сваког преласка из стања у стање, а која
    зависи од претходног стања и вредности улаза у тренутку преласка на ново стање (коначни транскдуктор).

    Коначни аутомат представља најопштији модел синхроног секвенцијалног кола.
    Произвољни аутомат има своје улазе, стање и излазе, као и таблицу преласка, коју можемо дефинисати потпуно произвољно у складу са нашим потребама.

    Посматрајмо аутомат који има 4 стања (0, 1, 2, 3) као и један једнобитни улаз $X$ и излаз $Y$.
    Аутомат је дефинисан таблицом преласка\ \ref{tab:primer_tablice_prelaska_automata}.

    \begin{table}
        \centering
        \begin{tabular}{cc|cc}
            $Q$ & $X$ & $Q^{sled}$ & $Y$ \\ \hline
            0   & 0   & 1          & 0   \\
            0   & 1   & 2          & 0   \\
            1   & 0   & 2          & 1   \\
            1   & 1   & 3          & 0   \\
            2   & 0   & 0          & 1   \\
            2   & 1   & 3          & 1   \\
            3   & 0   & 1          & 1   \\
            3   & 1   & 1          & 0   \\
        \end{tabular}
        \caption{Пример таблице преласка коначног аутомата}
        \label{tab:primer_tablice_prelaska_automata}
    \end{table}

    На основу таблице преласка дефинишемо таблицу ексцитације (\ref{tab:primer_tablice_ekscitacije_konacnog_automata}).
    Она изгледа слично као за бројач са произвољним редоследом стања, али има две додатне колоне: улаз $X$ и излаз $Y$
    (у случају вишебитних улаза и излаза, за сваки бит би имали по једну додатну колону).

    Упарујемо сва могућа стања са свим могућим вредностима на улазу, те ће број врста матрице бити једнак
    2 ^ (број битова стања + број битова на улазу).

    Колоне $J_1$, $K_1$ и $J_0$ се попуњавају на основу таблица ексцитације JK флип-флопа (на основу старог стања $S_1$, $S_0$ и новог стања $S_1^{sled}$, $S_{2}^{sled}$).
    Имплементација аутомата дата је на слици\ \ref{fig:konacni_automat_implementacija}.

    \begin{table}
        \centering
        \begin{tabular}{|cc|c|cc|c|cc|cc|}
            $S_1$ & $S_0$ & $X$ & $S_1^{sled}$ & $S_0^{sled}$ & $Y$ & $J_1$ & $K_1$ & $J_0$ & $K_0$ \\ \hline
            0     & 0     & 0   & 0            & 1            & 0   & 0     & $-$   & 1     & $-$   \\
            0     & 0     & 1   & 1            & 0            & 0   & 1     & $-$   & 0     & $-$   \\
            0     & 1     & 0   & 1            & 0            & 1   & 1     & $-$   & $-$   & 1     \\
            0     & 1     & 1   & 1            & 1            & 0   & 1     & $-$   & $-$   & 0     \\
            1     & 0     & 0   & 0            & 0            & 1   & $-$   & 1     & 0     & $-$   \\
            1     & 0     & 1   & 1            & 1            & 1   & $-$   & 0     & 1     & $-$   \\
            1     & 1     & 0   & 0            & 1            & 1   & $-$   & 1     & $-$   & 0     \\
            1     & 1     & 1   & 0            & 1            & 0   & $-$   & 1     & $-$   & 0     \\
        \end{tabular}
        \caption{Пример таблице ексцитације коначног аутомата}
        \label{tab:primer_tablice_ekscitacije_konacnog_automata}
    \end{table}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/4/dizajn_konacnog_automata}
        \caption{Имплементација једног коначног аутомата}
        \label{fig:konacni_automat_implementacija}
    \end{figure}

    \FloatBarrier

    \subsection{Укратко обjаснити основни принцип дизаjна контролне jединице као коначног аутомата.}
    \label{subsec:kontrolna_jedinica_konacni_automat}

    Контролна јединица је одговорна за управљање током (ток) програма.
    У својој основној варијанти, она је коначни аутомат чије стање означава корак програма који се тренутно извршава.

    На њен улаз се доводе информације које утичу на ток програма (нпр.\ статус претходно извршене операције),
    док се на излазу налазе контролни сигнали који управљају током (ток) програма у том кораку
    (одређују извориште, одредиште и операцију која ће бити примењена над подацима).

    \subsection{Навести пример описа неког алгоритма у форми коначног аутомата (само таблица преласка, без реализациjе самог аутомата).}
    \label{subsec:primer_algoritma_u_formi_konacnog_automata}

    Пример се налази на\ \ref{tab:primer_tablice_prelaska_automata}.

    \section{Принцип рада рачунара}
    \label{sec:princip_rada_racunara}

    \subsection{Обjаснити разлику између рачунара са фиксираним и ускладиштеним програмом.}
    \label{subsec:racunar_sa_fiksiranim_i_uskladistenim_programom} % strana 142

    \begin{itemize}
        \item Рачунари са фиксираним програмом извршавају само један унапред задати програм (одређен таблицом
        преласка коначног аутомата у контролној јединици рачунара и једини начин да буде промењен је да се контролна
        јединица дизајнира од почетка)

        % strana 156
        \item Рачунари са ускладиштеним програмом репрезентују програм као ниску бинарних бројева (машински код) који представљају
        елементарне рачунске операције које подржава ALU (машинске инструкције).
        Задатак таквог рачунара је да узима инструкције и учитава их у меморију, утврђује њихово значење (декодира) и изврши њихов ефекат (операцију).

        Скуп свих машинских инструкција које рачунар разуме назива се машински језик.
    \end{itemize}
    
    Уколико имамо само једну меморију у којој чувамо програм и податке, тада такве рачунаре називамо рачунарима Фон-Нојмановог типа.

    Ако постоје одвојени меморијски простори за програм и за податке, то су рачунари Харвардског типа.

    (подразумевамо да су сви рачунари у наставку Фон-Нојмановог типа)

    \subsection{Обjаснити улогу контролне jединице код рачунара са фиксираним и код рачунара са ускладиштеним програмом.}
    \label{subsec:uloga_kontrolne_jedinice_racunar}

    \begin{itemize}
        \item Код рачунара са фиксираним програмом, аутомат контролне јединице реализује специфичан алгоритам којим решавамо неки проблем
        \item Код рачунара са ускладиштеним програмом, аутомат контролне јединице имплементира алгоритам интерпретације машинског језика
        (декодира и извршава ефекат машинских инструкција)
    \end{itemize}

    \komentar{Рачунар са ускладиштеним програмом можемо посматрати као рачунар са фиксираним програмом ком је програм заправо „интерпретација“
    једног рачунара са фиксираним програмом.}

    \section{Централни процесор}
    \label{sec:centralni_procesor}

    \subsection{Шта jе архитектура, а шта организациjа рачунара?}
    \label{subsec:arhitektura_i_organizacija_racunara}

    Архитектуру рачунара представљају сви они делови дизајна рачунара који занимају програмера који пише програм на том рачунару.
    Укључује архитектуру скупа инструкција, али и из којих функционалних јединица се састоји рачунар, како се оне понашају и како су повезане.

    Организација рачунара представља начин имплементације свих функционалних јединица са свим особинама задатим кроз архитектуру рачунара.

    Једна иста архитектура може бити имплементирана на много начина.

    \subsection{Шта обухвата ISA (архитектура скупа инструкциjа)?}
    \label{subsec:isa}

    Скуп свих својстава централног процесора која су од значаја за ефективно коришћење процесора и његову комуникацију са окружењем
    (величина речи процесора, скуп регистара опште намене, скуп инструкција, формати инструкција, врста операнада и начини њиховог адресирања,
    режими рада процесора, нивои привилегија извршавања инструкција, механизми управљања меморијом,
    величина адресног простора (виртуелног и стварног) и слично).

    У суштини све што је потребно програмеру да зна како би могао да пише програме на машинском (и асемблерском) језику тог процесора.

    \subsection{Како делимо архитектуре према броjу операнада инструкциjа?}
    \label{subsec:podela_arhitektura_po_broju_operanada}

    \begin{itemize}
        \item Једноадресни рачунар - нема регистре опште намене, већ само специјалан регистар „акумулатор“ који садржи податак који се тренутно обрађује
        \item Двоадресни рачунар - наводе се оба операнда операције (сабирање), а један од њих је и одредишни (пример: Intel x86)
        \item Троадресни рачунар - наводимо одредишни регистар, и два операнда (пример: ARM)
        \item Нулоадресне архитектуре - стек машине (операнди се стављају на стек, инструкција врши скидање са стека и потом резултат ставља на стек)
    \end{itemize}



    \subsection{На примеру обjаснити разлике у перформансама између троадресних, двоадресних и jедноадресних архитектура.}
    \label{subsec:razlike_performansi_operandi_arhitekture}

    Употреба инструкција са већим бројем операнада има тендендију да смањи број меморијских трансфера,
    али чини инструкције дужим и тежим за превођење.

    Пример: рачунање израза $Y = (A+B)\cdot (C-D)$.

    \begin{itemize}
        \item Троадресна архитектура:
        \begin{itemize}
            \item ADD R1, A, B \\
            \item SUB R2, C, D \\
            \item MUL Y, R1, R2
        \end{itemize}

        Иако је програм најкраћи по броју линија, инструкције су најдуже па се најдуже декодирају.


        \item Двоадресна архитектура:
        \begin{itemize}
            \item MOV R1, A
            \item ADD R1, B
            \item MOV R2, C
            \item SUB R2, D
            \item MUL R1, R2
            \item MOV Y, R1
        \end{itemize}

        Инструкције су краће, али их има више (компромис)


        \item Једноадресна архитектура:
        \begin{itemize}
            \item LOAD A
            \item ADD B
            \item STORE T
            \item LOAD C
            \item SUB D
            \item MUL T
            \item STORE Y
        \end{itemize}

        Инструкције су најкраће, али их има највише.
    \end{itemize}



    \subsection{Шта jе архитектура \textit{load/store}? Обjаснити.}
    \label{subsec:load_store}

    Инструкције не могу имати ниједан меморијски операнд, већ искључиво раде са регистрима.
    Како бисмо ствари учитавали из меморије, користимо LOAD и STORE инструкције које учитавају меморију у регистар или чувају податке из регистра.
    
    \subsection{Карактеристике CISC архитектура.}
    \label{subsec:cisc}

    У CISC (complex instruction set computer) архитектуре типично су уграђене функције вишег нивоа, за које је понекад потребно
    више циклуса да се изврше помоћу операција имплементираних у ALU јединици.
    То је учињено како би се смањио број инструкција и консеквентно број приступа меморији.

    Осим тога, за ове архитектуре типично је да њихове инструкције могу користити најразличитије врсте операнада
    (регистри разних величина, адресе у меморији), што усложњава декодирање, али смањује број инструкција.

    \subsection{Карактеристике RISC архитектура.}
    \label{subsec:risc}

    Основна карактеристика (RISC) архитектура је да аритметичко-логичке инструкције могу да се
    користе само са регистарским и непосредним (константним) операндима.
    Подаци се најпре морају довући из меморије у регистре, над њима се обавити операција, а потом вратити у меморију (load/store).

    Друга основна карактеристика је релативно велики број регистара опште намене (неопходно за ефективнији load/store).

    Такође, сложеније операције нису подржане на процесору (синус, логаритам, петља) и морају се имплементирати софтверски.
    Све инструкције су исте дужине.

    С обзиром да захтевају да програмер учита податке и тек онда с њима нешто ради, типично су програми написани за
    RISC архитектуру доста дужи, те заузимају више меморије и захтевају чешће приступе меморији.
    Ове мане се неутралишу предвиђањем следеће инструкције (с обзиром да су све исте дужине то је знатно лакше).
    Инструкције се брже декодирају јер нема пуно могућности.
    Такође, лакше је имплементирати овакав процесор јер захтева мање комплексних инструкција.

    \subsection{Обjаснити однос архитектура CISC и RISC.}
    \label{subsec:odnos_cisc_risc}

    Због доступности сложених операција код CISC архитектура, програми на оваквим архитектурама су обично краћи 
    од програма на RISC архитектури, а такође се могу и директно користити меморијски операнди. 
    Међутим, имплементација процесора са RISC архитектуром је једноставнија, 
    па је и извршавање операција на овим архитектурама брже него на CISC архитектурама.

    Елаборирај на основу горњих питања.
    
    \subsection{Структура и формат машинске инструкциjе.}
    \label{subsec:struktura_format_instrukcije}

    \begin{itemize}
        \item Операциони код (opcode) - говори нам која операција је у питању (његова величина је максималан број инструкција које архитектура подржава)
        \item Адресни део (поље операнада) - над којим подацима се операције врше (константе, регистри, меморијске адресе)
    \end{itemize}
    
    Формат може бити:
    \begin{itemize}
        \item према броју адреса (максималан број операнада): троадресни, двоадресни, једноадресни и нулоадресни
        \item према дужини: инструкције фиксне дужине (RISC) и инструкције променљиве дужине (CISC)
    \end{itemize}


    \subsection{Врсте операнада машинске инструкциjе.}
    \label{subsec:vrste_operanada}

    \begin{itemize}
        \item регистарски: податак се налази у неком од регистара
        \item меморијски: податак се налази на некој адреси у меморији
        \item непосредни: податак је саставни део инструкције (константан)
    \end{itemize}

    % strana 181
    \subsection{Обjаснити директно адресирање мемориjских операнада.}
    \label{subsec:direktno_adresiranje}

    Инструкција садржи апсолутну адресу податка у меморији који се користи као операнд инструкције.
    Користи се за податке чија је адреса позната у фази писања (глобалне променљиве и статичке локалне променљиве).

    Мана је што су адресе велике (32 бита) и инструкција због њих расте.

    \subsection{Обjаснити индиректно адресирање мемориjских операнада.}
    \label{subsec:indirektno_adresiranje}

    Инструкцији се задаје место на ком се адреса налази, одакле је процесор узима и чита њене податке.
    Код модерних процесора, то место је регистар, те не губимо на брзини.

    Користи се када адреса податка није позната током фазе превођења
    (локалне променљиве аутоматског животног века, динамичко алоцирани подаци).

    \subsection{Обjаснити индексно адресирање мемориjских операнада.}
    \label{subsec:indeksno_adresiranje}

    Задају се два регистра, чије се вредности сабирају и тиме се добија адреса у оперативној меморији.
    (може и регистар и константа) (понекад се друга вредност множи са неким офсетом (величина податка))

    Типично се користи за приступање елементима у низу.

    \subsection{Обjаснити релативно адресирање мемориjских операнада.}
    \label{subsec:relativno_adresiranje}

    Као део инструкције назива се померај у односу на \textit{PC} регистар.
    Та вредност се сабира са вредности у регистру и добија се апсолутна адреса
    (лако реферишемо на инструкције које се налазе у „околини“ текуће инструкције).

    Корисно је за „кратке скокове“.

    Коришћењем релативног адресирања добијени код је „независан од позиције“ у адресном простору процесора (програм се може учитати са било
    које адресе у меморији и ради исправно без икаквих модификација након учитавања).

    \subsection{Обjаснити адресирање база $+$ помераj и навести пример употребе.}
    \label{subsec:baza_plus_pomeraj}

    Састоји се од базног регистра и помераја, где се апсолутна адреса добија њиховим сабирањем.
    Омогућава нам да адресирамо податке који се налазе у околини адресе која је на регистру (системски стек).

    % strana 188
    \subsection{Инструкциjе трансфера. Функциjа и пример употребе.}
    \label{subsec:instrukcija_transfera}

    Копирање података са једне локације на другу.

    x86: mov - може да у регистар или меморијску адресу уписану у регистар упише
    вредност из другог регистра, са друге меморијске адресе или константу
    (може да ради копирање из процесора директно у улазно-излазне уређаје)

    lea - рачуна адресу неког податка и прослеђује је у регистар

    ARM64: mov копира вредности у регистар (константе или из регистара), док ldr и str копирају вредност из меморије/регистра у регистар/меморију

    \subsection{Аритметичко-логичке инструкциjе. Функциjа и пример употребе.}
    \label{subsec:instrukcije_aritmeticko_logicke}

    Врше аритметичке и логичке операције над подацима.
    Постоје једноставније попут сабирања (add), одузимања (sub), логичких и аритметичких шифрова (lsl, lsr, asr),
    а постоје и компликованије попут множења и дељења које не морају бити имплементиране на свакој архитектури.

    Неке од ових инструкција ће се разликовати за сваки тип података над којима вршимо операције (означени, неозначени, цели, децимални бројеви).

    \subsection{Инструкциjе безусловног скока. Функциjа и пример употребе.}
    \label{subsec:instrukcija_bezuslovnog_skoka}

    Спада у инструкције контроле тока.
    Њен операнд је адреса инструкције за коју желимо да се следећа изврши (неке инструкције подржавају и да се адреса налази у регистру).
    То ради тако што ту адресу уписује у PC регистар.

    Ова инструкција увек врши скок (intel: jmp, arm: b)

    \subsection{Флегови процесора (O, S, Z, C). Када се постављаjу и чему служе?}
    \label{subsec:flagovi_procesora}

    Контролни битови које аритметичко логичка јединица уписује у FLAGS регистар након неких операција.
    Говори нам више о операцији (да ли је дошло до прекорачења, који је резултат итд.)
    На основу ових заставица можемо вршити условне скокове.

    \begin{itemize}
        \item O - дошло је до прекорачења
        \item S - знак резултата
        \item Z - резултат је нула
        \item C - дошло је до преноса
    \end{itemize}

    Carry - прекорачење максималне \textbf{неозначене} вредности, или је позајмица приликом одузимања.

    Overflow - прекорачење максималне \textbf{означене} вредности.

    \subsection{Инструкциjе поређења и њихова улога у реализациjи условних скокова. Пример.}
    \label{subsec:poredjenje_uslovni_skokovi}

    Инструкције поређења врше аритметичке операције (типично одузимање) над регистрима и, уместо да резултат испишу, само ажурирају флегове.

    Пример (x86): cmp 2, 3 // врши се одузимање $2 - 3 = -1$, што поставља S флаг на 1, па знамо да је мањи.

    \subsection{Инструкциjе условног скока. Функциjа и пример употребе.}
    \label{subsec:uslovni_skok} % strana

    Условни скок скаче уколико је испуњен неки услов (обично формулисан у вредностима флегова).
    Углавном постоје одвојена поређења за означене и неозначене бројеве.

    x86: je, jne, jl, jg, jb, ja

    ARM64: b.eq, b.ne, b.hs, b.ls, b.hi, b.lo, b.ge, b.le, b.gt, b.lt

    \subsection{Коjу комбинациjу флегова тестира инструкциjа jl, а коjу jb на x86-64 архитектури?}
    \label{subsec:kombinacija_flegova}

    Инструкција jl (да ли је означени број мањи од другог) проверава да ли су S (sign) и O (overflow) флегови различити.

    Инструкција jb (да ли је неозначени број мањи од другог) проверава да ли је дошло до преноса (C (carry) флег).

    \subsection{Обjаснити позивање процедура и враћање из њих коришћењем стека за чување повратне адресе. Предности и мане.}
    \label{subsec:procedura_stek} % strana 193

    Приликом позивања процедуре адреса повратка се ставља на стек, а на крају се скида са стека и ставља у програмски бројач.

    Предност је што не морамо да бринемо да ли ће нека инструкција обрисати адресу повратка, а мана је што морамо да приступамо меморији, што је споро.

    \subsection{Обjаснити позивање процедура и враћање из њих коришћењем регистра за чување повратне адресе. Предности и мане.}
    \label{subsec:procedura_registar} % strana 198

    Приликом позивања процедуре адреса повратка се смешта у неки регистар процесора.

    Предност је што доста брже приступамо овом регистру него меморији, а мана је што, ако пожелимо да позовемо неку функцију,
    ту стару адресу повратка морамо да чувамо на неком сигурном месту (најчешће стеку) како је друга функција не би изменила
    (јер и она мора да чува адресу повратка за себе).

    \subsection{Обjаснити пренос аргумената процедуре коришћењем стека. Предности и мане.}
    \label{subsec:prenos_argumenata_stek}

    Аргументи које желимо да проследимо позваној процедури се смештају на врх стека (неки регистар увек показује на врх стека).

    Предност је што није ограничено колико аргумената можемо да проследимо, а мана је што је приступање стеку споро.

    \subsection{Обjаснити пренос аргумената процедуре коришћењем регистара процесора. Предности и мане.}
    \label{subsec:prenos_argumenata_registri}

    Пре позива процедуре, аргументе које желимо да јој пошаљемо смештамо у неке регистре.

    Предност је што је приступ регистрима брз, а мана је што имамо ограничен број регистара.

    \subsection{На коjи начин позвана функциjа може вратити вредност позиваjућоj функциjи?}
    \label{subsec:vracanje_vrednosti_nacini}

    Функција своју повратну вредност може вратити у неком од регистара, или да је смести на стек.

    \subsection{Коjе су основне компоненте процесора? Обjаснити их.}
    \label{subsec:komponente_procesora} % strana 205 - 206

    Централни процесор се састоји од путање података и контролне јединице - (управља преносом података).

    Делови путање података су:
    \begin{itemize}
        \item ALU јединица
        \item регистри процесора
        \item интерне магистрале (линије које их повезују)
    \end{itemize}

    Наведене компоненте чине минималну организациону целину и присутне су у сваком процесору (модерни процесори имају многе друге компоненте,
    попут меморијске јединице, меморијског контролера, контролера магистрале и тако даље)

    \subsection{Шта jе ALU jединица и чему служи?}
    \label{subsec:alu_jedinica}

    Аритметичко-логичка јединица је комбинаторно коло које служи за обављање основних аритметичко-логичких операција над подацима
    (сабирање, одузимање, битовске операције).

    Има два улаза за податке, излаз и излаз за додатне информације попут преноса, прекорачења, промене знака итд.

    \subsection{Шта су регистри опште намене и чему служе?}
    \label{subsec:registri_opste_namene} % strana 210

    Регистри опште намене су део архитектуре процесора (видљиви програмеру) и могу се користити у инструкцијама као регистарски операнди.

    Коментар: Поред њих, сваки процесор садржи и одређене регистре специјалне намене који служе за имплменетацију интерних функција процесора.
    Најчешће нису део архитектуре (уз ретке изузетке), па их није могуће користити у инструкцијама као операнде.

    \subsection{Чему служи инструкциони регистар (IR)?}
    \label{subsec:ir}

    Инструкциони регистар у себи чува декодирану инструкцију: операциони код и остале компоненте инструкције релевантне за рад контролне јединице.
    Вредност овог регистра се доставља на улаз контролне јединице, како би онда могла да зна која се инструкција извршава и могла да,
    сходно томе, одреди наредне кораке у свом алгоритму.

    Улаз овог регистра је додатно повезан са магистралом података меморијске магистрале.
    На овај начин је омогућемо да се током дохватања инструкције она учита у IR регистар.

    Са друге стране, вредност овог се може пустити и на интерне магистрале, како би се пренела у други регистар.
    Ово може бити потребно у случају да инструкција садржи апсолутну или релативну адресу меморијског операнда -
    тада је ту адресу потребно пребацити у MAR регистар или је пропустити кроз ALU ради израчунавања апсолутне адресе операнда.

    \subsection{Чему служи програмски броjач (PC)?}
    \label{subsec:pc}

    Програмски бројач садржи адресу инструкције коју следећу треба извршити.
    Вредност се увећава након сваке инструкције тако да показује на следећу инструкцију у програму.

    Обично није доступан директно, већ се баратање врши посредно преко инструкције скока.

    \subsection{Чему служи статусни регистар (PSW)?}
    \label{subsec:psw}

    Битови статусног регистра разматрају се засебно и представљају \textit{заставице} или \textit{флегове}.
    Они се постављају од стране ALU након извршене операције и служе да квалитативно опишу резултат.

    На неким архитектурама се вредност флегова поставља након сваке инструкције која користи ALU ($x86\_64$),
    док се на другим вредност флегова поставља само након операције поређења (ARM64), док остале то не раде, осим ако им није назначено.

    Вредност PSW се прослеђује на улаз контролне јединице, што омогућава условно извршавање инструкција (типично за условни скок).

    На неким архитектурама овај регистар може садржати и контролне флегове, чије се вредности постављају посебним инструкцијама,
    чиме се контролише будуће понашање процесора (режим рада, начин контроле меморије, понашање појединачних инструкција итд).

    % dodatno strana 158
    \subsection{Чему служи регистар мемориjских адреса (MAR)?}
    \label{subsec:mar}

    Адресни регистар меморије служи да се у њему формира меморијских операнада које треба учитати из меморије или их уписати у меморију
    (због тога је (осим са интерним магистралама) директно повезан на адресну магистралу меморијске магистрале).

    На овај начин, израчуната адреса се може директно слати у адресни улаз меморије у циљу дохватања и чувања меморијских операнда.

    \subsection{Чему служи регистар мемориjских података (MDR)?}
    \label{subsec:mdr}

    Улога регистра меморије за податке је да се у њега смешта операнд који је управо дохваћен из меморије, као и да се у њему припрема податак
    који треба уписати у меморију као нову вредност меморијског операнда.

    Меморијски операнди се обично приликом дохватања уписују у неки регистар опште намене.
    Слично, приликом уписа у меморијске операнде, обично у њих копирамо вредност неког регистра опште намене.
    Било би исувише компликовано направити директну везу регистара и магистрале података.
    Због тога, MDR регистар постоји.

    С обзиром да CISC архитектуре аритметичке инструкције могу имати меморијске операнде,
    подаци са те адресе се учитавају у MDR и он се користи као аргумент ALU јединице.

    И улаз и излаз MDR је повезан са меморијском магистралом.
    
    \subsection{Шта jе путања података (енгл. \textit{datapath}) и из чега се састоjи?}
    \label{subsec:putanja_podataka}

    Састоји се од регистара, ALU јединице и интерних магистрала којима се крећу подаци.
    Улога путање података је да омогући извршавање елементарних операција над неким улазом.

    \subsection{Нацртати уопштену шему путање података са три интерне магистрале. Пример извршавања операциjе.}
    \label{subsec:sema_putanja_podataka_tri_interne_magistrale} % strana 208

    Две магистрале за читање (\textit{A bus} и \textit{B bus}) и једна за писање (\textit{C bus}).

    Ефикасније извршавање операција на путањи података са већим бројем интерних магистрала има цену која се огледа у сложенијој имплементацији.
    У овом случају, потребна су нам три декодера (два за читање и један за упис) с обзиром да је у истом циклусу могуће реферисати на три регистра
    опште намене истовремено.

    Операција $R_2 = R_0 + R_1$ (један циклус)

    \begin{itemize}
        \item $R_0 [add] R_1 \leftarrow_C R_2$
    \end{itemize}

    при чему се подразумева да се први операнд ALU јединице преноси путем магистрале A, а други путем магистрале B .

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/6/putanja_podataka_3_interne_magistrale}
        \caption{Процесор са путањом података са три интерне магистрале}
        \label{fig:putanja_podataka_tri_interne_magistrale}
    \end{figure}

    \FloatBarrier

    \subsection{Нацртати уопштену шему путање података са две интерне магистрале. Пример извршавања операциjе.}
    \label{subsec:sema_putanja_podataka_dve_interne_magistrale}

    Већи број интерних магистрала омогућава ефикаснију реализацију операција у оквиру путање података,
    јер је могуће вршити више трансфера у сваком циклусу.

    На примеру структуре путање података са слике видимо две магистрале - за читање (\textit{A bus}) и за писање (\textit{C bus}).
    Магистралом за читање вредност из било ког регистра доводимо на улаз ALU, док магистралом за упис излаз ALU јединице можемо пренети
    у било који регистар.

    Операција $R_2 = R_0 + R_1$ (два циклуса) ($\rightarrow_A$ означава трансфер путем магистрале A:

    \begin{itemize}
        \item $R_1 \rightarrow_A P$
        \item $R_0 [add] P \rightarrow_C R_2$
    \end{itemize}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/6/putanja_podataka_2_interne_magistrale}
        \caption{Процесор са путањом података са две интерне магистрале}
        \label{fig:putanja_podataka_dve_interne_magistrale}
    \end{figure}

    \FloatBarrier

    \subsection{Нацртати уопштену шему путање података са jедном интерном магистралом. Пример извршавања операциjе.}
    \label{subsec:sema_putanja_podataka_jedna_interna_magistrala}

    Основна карактеристика овакве структуре путање података је једноставност.
    Недостатак је у већем броју циклуса који је потребан да би се обавила нека операција.

    Операција $R_2 = R_0 + R_1$ (три циклуса):

    \begin{itemize}
        \item $R_1 \rightarrow P$
        \item $R_0 [add] P \rightarrow A$
        \item $A \rightarrow R_2$
    \end{itemize}

    \begin{figure}[ht]
        \centering
        \includegraphics[width=0.8\textwidth]{slike/6/putanja_podataka_1_interna_magistrala}
        \caption{Процесор са путањом података са једном интерном магистралом}
        \label{fig:putanja_podataka_jedna_interna_magistrala}
    \end{figure}

    \FloatBarrier

    \subsection{Шта jе контролна jединица? Шта jе улаз, а шта излаз из контролне jединице?}
    \label{subsec:kontrolna_jedinica} % strana 217

    Контролна јединица је коначни аутомат који имплементира алгоритам интерпретације машинског језика користећи могућности путање података процесора.

    Улаз у контролну јединицу су инструкциони регистар и статусни регистри, а на излазу су контролни сигнали којима се управља компонентама у оквиру путање података.

    \subsection{Описати основне фазе при извршавању инструкциjа процесора.}
    \label{subsec:osnovne_faze_izvrsavanja_instrukcije}

    \begin{itemize}
        \item Дохватање инструкције (Fetch)
        \item Декодирање инструкције (Decode)
        \item Извршавање инструкције (Execute)
    \end{itemize}

    \subsection{Обjаснити фазу дохватања инструкциjе.}
    \label{subsec:dohvatanje_instrukcije}

    Учитавање инструкције из оперативне меморије у процесор.
    Инструкција се путем магистрале података из меморије дохвата у регистар IR, одакле постаје доступна контролној јединици која је даље тумачи и извршава.

    Након тога, врши се увећање регистра PC како би он показивао на следећу инструкцију (константно за ARM или у зависности од дужине инструкције за x86).

    Како је меморија знатно спорија од процесора, често није у стању да одговори на захтев у истом циклусу.
    Због тога контролна јединица често мора да чека већи број циклуса док не добије сигнал из меморије да је садржај допремљен.
    То се назива циклуси чекања (wait cycle).

    Други разлог због кога дохватање инструкције може захтевати више циклуса је што су неке инструкције дугачке (CISC),
    садрже више битова него што је ширина магистрале података, те се не могу пренети преко ње у само једном трансферу (дохватају се део по део).

    \subsection{Обjаснити фазу декодирања инструкциjе.}
    \label{subsec:dekodiranje_instrukcije}

    Врши се тумачење битова инструкције у IR регистру и одређивање наредног корака у њеном извршавању.

    Из операционог кода инструкције контролна јединица закључује о којој се инструкцији ради, који је њен формат,
    колико има операнада и које су врсте (уколико није учитана у целости врши се учитавање остатка).

    На основу врсте операнда, закључује се како до њих доћи (ако су меморијски шаљу се у MAR регистар, ако је индексно сабирају се база и индекс и шаљу MAR регистру).

    Декодирање може бити једноставно, дугачко један циклус уколико инструкције имају једноставан формат (ARM), али и комплексно које траје пар циклуса (x86).

    \subsection{Обjаснити фазу извршавања инструкциjе.}
    \label{subsec:izvrsavanje_instrukcije}

    Извршавање операције која одговара декодираној инструкцији.
    Може зависити само од инструкције, али и од флегова из PSW регистра.

    Уколико инструкција има меморијски операнд, он се дохвата у овој фази из меморије (вредност из меморије са адресе у MAR регистру се пребацује путем магистрале у MDR).

    У случају аритметичко логичке операције (или трансфера), регистри који садрже податке (вредност из меморије смо преселили у MDR)
    се шаљу на улаз ALU и њихов резултат се уписује у регистар мету.\ (код поређења се врши алтерација флегова)

    \subsection{На коjе начине се може реализовати контролна jединица? Поређење.}
    \label{subsec:realizacija_kontrolne_jedinice} % strana 217

    \begin{itemize}
        \item Тврдо ожичена имплементација (hardwired) - коначни аутомат имплементира се у виду секвенцијалних кола
        \item Микропрограмирана имплементација (microprogrammed) - алгоритам интерпретације се реализује помоћу посебног микрокода који се чува у контролној меморији
    \end{itemize}

    Тврдо ожичена имплементација је бржа (ARM64), али свака измена захтева редизајнирање целог кола.

    Микропрограмирана имплементација је знатно спорија, али олакшава уношење измена у алгоритам чак и када процесор напусти фабрику.

    \subsection{Обjаснити тврдо ожичену (хардверску) имплементациjу контролне jединице.}
    \label{subsec:hardverska_kontrolna_jedinica}

    Контролна јединица се имплементира као секвенцијално коло које функционише као коначни аутомат.
    С обзиром да се интерпретација машинског кода дешава на стварном хардверу, брза је, али уколико је начињена грешка, тешко се мења.
    Због тога је практична код једноставних архитектура где нема пуно простора за прављење грешака приликом дизајна (RISC).
    
    \subsection{Обjаснити микропрограмску (софтверску) имплементациjу контролне jединице.}
    \label{subsec:softverska_kontrolna_jedinica}

    Алгоритам интерпретације машинског кода реализује се као микропрограм који се чува у посебној меморији унутар
    контролне јединице (контролна меморија (може бити непроменљива и променљива)).
    Свака адресибилна локација унутар ове меморије садржи једну микроинструкцију која описује један корак у извршавању
    машинске инструкције (извршава се у једном циклусу).

    Свакој инструкцији одговара један микропрограм састављен од микроинструкција.
    
    \subsection{Шта jе микроинструкциjа? Структура микроинструкциjе.}
    \label{subsec:mikroinstrukcija}

    Микроинструкција се налази унутар контролне меморије и описује један корак у извршавању машинске инструкције (извршава се током једног циклуса).

    Састоји се из два дела:
    \begin{itemize}
        \item контролни сигнали - приликом извршавања микроинструкције се постављају на излаз контролне јединице и управљају радом компоненти путање података (током тог циклуса)
        \item адресни битови - учествују у одређивању адресе следеће микроинструкције која треба да буде извршена
    \end{itemize}

    \subsection{Шта jе микропрограм? Обjаснити начин извршавања микропрограма.}
    \label{subsec:mikroprogram}

    Микропрограм је низ микроинструкција којима се имплементира нека инструкција.

    Прво се на контролну јединицу шаље адреса микроинструкције којом инструкција почиње, она се проналази,
    ставља у микроинструкцијски регистар (током силазног руба часовника).
    На излазу се вредност регистра дели на контролне битове и адресу следеће инструкције.

    Контролни битови се шаљу на излаз контролне јединице како би се извршила микроинструкција (током узлазног руба часовника), а
    адреса следеће се прослеђује назад контролној јединици како би се овај поступак поновио.

    Може постојати посебан микропрограм који врши дохватање и декодирање микроинструкције.

    \subsection{Обjаснити хоризонтални формат микроинструкциjа процесора.}
    \label{subsec:horizontalni_format_mikroinstrukcije}

    У хоризонталном формату се сви контролни сигнали представљају посебним битовима и у неизмењеном облику се прослеђују на излаз контролне јединице.
    Такав приступ је лако разумљив и једноставан, али му је мана што је такав формат веома дугачак, с обзиром на огроман број контролних сигнала у модерним процесорима.

    \subsection{Обjаснити вертикални формат микроинструкциjа процесора.}
    \label{subsec:vertikalni_format_mikroinstrukcije}

    У вертикалном формату се типичне комбинације битова контролних сигнала компактније кодирају, те је микроинструкција краћа.
    Овакве микроинструкције се морају декодирати на излазу, како би се добили одговарајући „распаковани“ контролни сигнали.





    \section{Оперативна меморија}
    \label{sec:operativna_memorija}

    \subsection{Из коjих делова се састоjи мемориjска магистрала и коjа jе њихова улога?}
    \label{subsec:delovi_memorijske_magistrale}

    Улога меморијске магистрале (паралелна магистрала) је повезивање централног процесора и оперативне меморије.

    Састоји се од:
    \begin{itemize}
        \item магистрале података - преноси машинске инструкције из меморије ка процесору, и податке (операнде) у оба смера
        \item адресна магистрала - преноси адресе од процесора до меморије
        \item контролна магистрала - састоји се од скупа контролних сигнала помоћу којих процесор и меморија размењују команде и информације о статусу
    \end{itemize}

    \subsection{Обjаснити операциjу читања податка путем мемориjске магистрале без циклуса чекања.}
    \label{subsec:operacija_citanja_bez_cekanja} % strana 225

    У овом сценарију, меморија је довољно брза да одговори на захтев процесора унутар основног временског оквира, па процесор
    нема „празан ход“ током ког не извршава ништа већ само чека спору компоненту.

    На почетку првог такта, процесор укључује en сигнал (меморији ставља до знања да треба реагује на сигнале из магистрале).
    Сигнал rd/wr одређује да ли је у питању операција читања (0) или писања (1).
    Потом, процесор на адресну магистралу поставља вредност адресе у меморији са које жели да врши читање (сигнал addr)
    (ако вредности нема, на адресној магистрали је вредност високе импедансе).

    Меморија очитава вредности на силазном рубу часовника, и у складу са захтевом прочитати вредност са дате адресе и поставити
    је на магистралу података (сигнал data).

    На следећем узлазном рубу, процесор ће очитати вредност са магистрале и сачувати је у
    одговарајућем регистру (MDR или IR), и деактивираће своје сигнале.
    Меморија ће на следећем силазном рубу уочити да су сигнали склоњени те ће и она
    склонити вредност са магистрале и поставити data на вредност високе импедансе.

    По овом протоколу, читава операција читања захтева два циклуса на магистрали.
    
    \komentar{Описана меморија може да преноси податке само током једног руба часовника. Модерне меморије пружају могућност оба (double data rate или ddr).}

    \subsection{Обjаснити операциjу читања података путем мемориjске магистрале са циклусом чекања.}
    \label{subsec:operacija_citanja_sa_cekanjem}

    С обзиром да је меморија знатно спорија од процесора, неће стићи да заврши своје операције током само једног циклуса,
    те ће морати да некако сигнализира процесору да сачека.
    То се постиже помоћу сигнала \textit{wait} (1 значи да ће процесор чекати, тј.\ бити у стању „празног хода“,
    током ког не ради ништа све док се вредности сигнала не постави на 0).

    Осим тога, идентично је као и операција читања података без чекања\ \ref{subsec:operacija_citanja_bez_cekanja}.

    \subsection{Обjаснити операциjу писања податка путем мемориjске магистрале без циклуса чекања.}
    \label{subsec:operacija_pisanja_bez_cekanja}

    Одговор је измена\ \ref{subsec:operacija_citanja_bez_cekanja}.

    \subsection{Обjаснити операциjу писања података путем мемориjске магистрале са циклусом чекања.}
    \label{subsec:operacija_pisanja_sa_cekanjem}

    Одговор је измена\ \ref{subsec:operacija_citanja_sa_cekanjem}.

    \subsection{Обjаснити операциjу читања блока података путем мемориjске магистрале.}
    \label{subsec:citanje_bloka} % strana 227

    Уколико желимо да истовремено читамо блок података, потребно је увести додатни сигнал \textit{burst}
    који ће меморији назначити да треба да проследи блок података (довољно велики да попуни ширину меморијске магистрале (64 бита)).



    \subsection{Обjаснити ефикасну организациjу оперативне мемориjе засновану на двостепеном адресирању (адреса врсте + адреса колоне)? Коjе су предности овог приступа?}
    \label{subsec:organizacija_memorije_dvostepeno_adresiranje}

    Уместо да, као што смо до сада, чувамо низ ћелија (бајтова) којима приступамо коришћењем демултиплексера који одговара броју могућих адреса,
    ћелије организујемо у матрице једнаке дужине и ширине.
    Како бисмо знали где треба да идемо, користимо један демултиплексер који на основу горње половине адресе одређује у којој се врсти налази
    адреса коју тражимо, и по демултиплексер за сваку врсту који исто ради са доњим битовима адресе да нам одреди тачну позицију.

    Овакав приступ има више предности:
    \begin{itemize}
        \item просторно је ефикасније расподелити меморијске ћелије у матрицу јер онда имамо краћа растојања између ћелија и тиме убрзавамо претрагу
        \item уколико желимо да прочитамо један блок података, они се налазе ближи један другом, те је доста брже
    \end{itemize}

    \subsection{Обjаснити вишебаjтни пренос података. Шта jе мемориjска реч?}
    \label{subsec:visebajtni_prenos_podataka} % strana 233

    С обзиром да је дужина модерних меморијских магистрали 64 бита уместо 8, бајтови се из меморије преносе у пакетима од по 8.
    Како бисмо тај поступак убрзали, градимо меморијске блокове краће дужине (8 или 16 битова), и слажемо их тако да добијемо ширину од 64 бита (то се зове меморијски ранг).
    Рангови (дакле уместо индивидуалних бајтова) се организују у врсте и колоне (онако како је описано да се меморија гради).

    Приликом читања из меморије, добављамо цео блок који садржи адресу бајта који нам треба (процесор шаље адресу без последња три бита),
    и у процесору одбацујемо непотребне делове.
    Овај поступак знатно убрзава читање јер се адресе брже декодирају, а и често нам не треба само један бајт из меморије, већ више њих (види алајновање).

    Последица је да се подаци из процесора увек шаљу у пакетима од по 8 бајтова, који се зову меморијска реч
    (тј.\ део меморије који процесор може да прочита, упише или обради током једног циклуса).

    \subsection{Обjаснити принципе мемориjског поравнања података у оперативноj мемориjи.}
    \label{subsec:memorijsko_poravnanje} % strana 235

    С обзиром да су типови података које типично користимо вишебајтни, уколико их само држимо у меморији без неке претходне обраде,
    може доћи до тога да се унутар једне речи налази само део податка који нам треба.

    Због тога, користимо поравнање, правило које налаже да се први бајт податка одређене величине сме налазити
    само на адреси која је дељива са његовом величином (нпр.\ int се може налазити на адресама 0, 4, 8, \ldots јер ће онда цео стати у један меморијски ранг).

    Ова правила могу бити наметнута самим хардвером (ако не важи долази до прекида), али и софтвером (у ARM64 ће програм радити спорије ако поравнање није обезбеђено).

    \subsection{Укратко обjаснити принцип рада испреплетених мемориjа као и разлог због коjих их користимо?}
    \label{subsec:isprepletane_memorije} % strana 237

    Већу меморију можемо изградити од мањих (које називамо блокови), те би првих пар битова адресе представљали адресу блока,
    а остатак адресу унутар једног од блокова.
    Такав приступ омогућава нам да, уместо секвенцијално, адресама приступамо наизменично, унутар различитих блокова.

    Међутим, типично су подаци сачувани секвенцијално, као на пример низ, те се у већини случајева налазе у истом блоку.
    То можемо решити тако што преокренемо ситуацију, последња два бита адресе заправо представљају адресу блока, те је загарантовано
    да ће се две вредности које су једна поред друге налазити у различитим блоковима.

    \subsection{Обjаснити читање података са узастопних адреса код испреплетених мемориjа.}
    \label{subsec:citanje_uzastopnih_podataka_isprepletane_memorije}

    Код испреплетаних меморија, узастопне адресе распоређене су тако да се налазе у различитим блоковима (подмеморијама),
    те можемо истовремено да трагамо за обе уместо да чекамо да блок заврши (јер се не може истовремено читати из блока из очигледних разлога (read on write)).
    Једино што нам константно одузима време је иницијално одређивање у којим се блоковима адресе налазе, али је то знатно брже јер блокова има експоненцијално
    мање него адреса.

    \subsection{Обjаснити упис података на узастопне адресе код испреплетених мемориjа.}
    \label{subsec:upis_uzastopnih_podataka_isprepletane_memorije}

    С обзиром да су блокови у које уписујемо податке раздвојени (јер су подаци узастопни), једино кашњење је одређивање у ком блоку се адреса налази,
    и смештањем податка у његов бафер (за упис).\ Следећи податак ће поновити поступак, међутим он одлази у други блок, па га то што се у претходни уписује
    неће спречити да се симултано упише, што знатно убрзава процес уписа.

    Коментар: Проблем који испреплетане меморије решавају је што меморија не сме да дозволи да се на истој адреси истовремено упишу подаци,
    а тражење адресе у великој меморији је споро, те делимо меморију на мање делове, који су сами по себи меморије, а тражење у коју
    од таквих меморија се уписује је знатно брже него над целом.




    \subsection{Шта jе мемориjски контролер и коjе су му основне функциjе?}
    \label{subsec:memorijski_kontroler}

    С обзиром да начини приступања меморији умеју да се знатно закомпликују, уместо да целу функционалност препуштамо
    централном процесору, меморијски контролер је секвенцијално коло чија је улога да то уради уместо њега.
    Од процесора прима адресе података, и на основу начина организације меморијских кола води рачуна да пронађе
    што ефикаснији начин да добави или упише податке.

    Главне функционалности меморијског контролера су:
    \begin{itemize}
        \item иницијализација и препознавање меморијских модула: контролер утврђује који су слотови попуњени и њихов капацитет
        \item мапирање меморијских адреса: процесор адресни простор посматра као целину, те меморијски контролер такву адресу мора да мапира у
        \begin{itemize}
            \item број канала
            \item број модула и ранга
            \item број банке на чипу
            \item адресе врсте
            \item адресе колоне
        \end{itemize}
        Постоје разне методе мапирања ових компоненти на смислене адресе.
        \item Оптимизација приступа меморији - меморијски контролер мора да препозна обрасце попут испреплетаног приступа и FPM режима и ефективно их примени
        \item Освежавање меморије - с обзиром да користимо динамичке меморије, кондензатори се празне те морамо да их допунимо (то се ради на начин који претерано не омета приступање)
    \end{itemize}



    \section{Спољашње меморије}
    \label{subsec:spoljasnje_memorije}

    \subsection{Коjа jе разлика између унутрашњих и спољашњих мемориjа?}
    \label{subsec:unutrasnje_spoljasnje_memorije}

    \begin{itemize}
        \item унутрашње меморије су директно повезане са централним процесором путем магистрала
        (док спољашње нису, не припадају рачунару у ужем, Фон-Нојмановом смислу)
        \item унутрашње немају постојан капацитет (или ако имају су непроменљиве), док спољашње имају
        \item унутрашње меморије су бајт адресибилне, док код спољашњих можемо да читамо само веће целине (512 бајтова до 4 килобајта)
        \item унутрашње меморије су знатно брже од спољашњих
    \end{itemize}

    \subsection{Наброjати бар три врсте унутрашњих и бар три врсте спољашњих мемориjа.}
    \label{subsec:tri_vrste_memorija}

    Унутрашње: регистри, кеш, радна меморија

    Спољашње: магнетне траке, оптички дискови, тврди дискови, флеш меморије

    \subsection{Коjе све карактеристике разматрамо приликом упоређивања различитих врста мемориjа (унутрашњих и спољашњих)?}
    \label{subsec:karakteristike_memorija}

    \begin{itemize}
        \item адресибилност - која је најмања меморијска јединица која се може адресирати
        \item начин приступа - у којој мери физичка локација адресибилне јединице утиче на време приступа њој
        \item измењивост - да ли меморија дозвољава упис
        \item постојаност - да ли је меморији потребно електрично напајање како би очувала свој садржај
        \item величина - колико података се може сместити у меморију
        \item брзина - време потребно за читање или уписивање података у меморију
        \item цена - колико је скупо произвести меморију у односу на њену величину
    \end{itemize}

    \subsection{На коjи начин делимо мемориjе на основу њихове адресибилности?}
    \label{subsec:adresibilnost}

    \begin{itemize}
        \item бајт-адресибилне: сваки бајт има своју адресу и могуће му је приступити директно (RAM и ROM)
        \item реч-адресибилне: адресибилне јединице су речи (типично величине два, четири или осам бајтова) (регистри опште намене)
        \item блок-адресибилне: адресибилне јединице су блокови (величине 512B до 4KB) (већина модерних спољашњих меморија) (користимо неку другу меморију да поделимо блок на мање целине)
        \item неадресибилне: не приступа се путем адресе, већ на неки други начин (кеш меморије)
    \end{itemize}

    \subsection{Навести могуће начине приступа мемориjи.}
    \label{subsec:nacini_pristupa_memoriji} % strana 301

    \begin{itemize}
        \item непосредни: свим адресибилним јединицама се приступа у приближно истом времену (RAM, ROM, регистри процесора, флеш спољашње меморије)
        \item секвенцијални: подацима се приступа редом којим су сачувани у меморији (магнетне траке)
        \item директан: време приступа сектору зависи од његове позиције на диску, али се не одређује секвенцијално (магнетни дискови и дискете)
    \end{itemize}

    \subsection{Обjаснити секвенциjалан приступ мемориjи.}
    \label{subsec:sekvencijalan_pristup_memoriji}

    Адресибилним јединицама се приступа редом којим су физички смештене у меморију (ако желимо да приступимо $n$, морамо прво приступити адресама $\ldots, n-2, n-1$).

    Овакав приступ карактеристичан је за магнетне траке.

    \subsection{Обjаснити директан приступ мемориjи.}
    \label{subsec:direktan_pristup_memoriji}

    Меморије са оваквим приступом (магнетни дискови, дискете, тврди дискови) подељене су на мање целине, секторе, којима је приступ непосредан,
    и након тога се њихова околина секвенцијално обилази у потрази за адресом која нам је потребна.

    \subsection{Обjаснити непосредан приступ мемориjи.}
    \label{subsec:neposredan_pristup_memoriji}

    Свим адресибилним јединицама се приступа у приближно једнаком времену, без обзира на њену физичку локацију.

    Примери оваквих меморија су RAM (random access memory), ROM, регистри процесора, као и флеш меморије.

    \subsection{Шта jе капацитет мемориjе и у коjим jединицама се изражава?}
    \label{subsec:kapacitet_memorije}

    Капацитет меморије је количина података које можемо да сместимо у њу.
    Изражена је у бајтовима, чак и када меморија није бајт-адресибилна, ради лакшег поређења.

    Како је бајт релативно мала јединица, у пракси се користе веће:
    \begin{itemize}
        \item килобајт (KB) = 1024 B
        \item мегабајт (MB) = 1024 KB
        \item гигабајт (GB) = 1024 MB
        \item терабајт (TB) = 1024 GB
        \item петабајт (PB) = 1024 TB
    \end{itemize}

    \subsection{Какве мемориjе могу бити с обзиром на траjност (постоjаност) записа? Примери.}
    \label{subsec:trajnost_zapisa_memorije}

    \begin{itemize}
        \item непостојана/волатилна: када електричног напајања нестане, подаци се бришу (RAM, транзистори, кеш меморија)
        \item постојана/перзистентна: није јој неопходно електрично напајање да би очувала свој садржај (скоро све спољашње меморије, ROM)
    \end{itemize}

    \subsection{Какве мемориjе могу бити с обзиром на измењивост њиховог садржаjа? Примери.}
    \label{subsec:izmenjivost_memorije}

    \begin{itemize}
        \item неизмењива: након првобитног дефинисања садржаја допуштају само читање вредности (ROM, CD-ROM, DVD-ROM)
        \item измењива: допушта читање и упис (измену вредности података) (све остале)
    \end{itemize}


    \subsection{Како се изражава брзина мемориjе? Коjи фактори наjвише утичу на брзину мемориjе.}
    \label{subsec:brzina_memorije} % strana 303

    Брзина се односи на време потребно за читање и писање података.
    Обично се изражава у мегахерцима (MHz).

    На брзину меморије највише утичу:
    \begin{itemize}
        \item кашњење: време од тренутка задавања команде до тренутка када меморија крене да испоручује податке процесору.
        Узроковано је самом унутрашњом организацијом меморије.
        \item брзина трансфера: количина података који се из меморије могу прочитати у јединици времена.
        Зависи од брзине меморије, као и брзине канала за пренос који се користе.
        \item време приступа: укупно време које је потребно од тренутка када се захтева приступ податку до тренутка када он постане доступан за читање.
        Зависи од кашњења, брзине трансфера и много других фактора.
    \end{itemize}


    \subsection{Обjаснити хиjерархиjу мемориjа.}
    \label{subsec:hijerarhija_memorije}

    Меморије у рачунарском систему су организоване хијерархијски, почев од меморија које су најближе процесору (регистри и кеш меморије),
    па све до меморија које су најудаљеније од процесора (спољашње меморије).

    Меморије које су ближе процесору су веома брзе, али су зато релативно скупе и малих капацитета.
    Како се удаљавамо од процесора, постају спорије, веће и јефтиније.
    Такође, постојаност је карактеристика спољашњих меморија.
    Са друге стране, спољашње меморије често немају могућност адресирања на нивоу бајтова или речи, што је карактеристично за унутрашње.

    \subsection{Навести основне врсте спољашњих мемориjа и навести њихове карактеристике.}
    \label{subsec:vrste_spoljasnjih_memorija}

    \subsubsection{Магнетне траке}

    Дугачка трака премазана магнетним материјалом и намотана на котур.
    Информација се чува интензитетом или поларитетом магнетних поља на некој тачки.

    Трака се премотава мотором са једног котура на други, и упис и испис се врши намагнетисаном главом која мења поларитет тачке.
    Користе секвенцијални приступ и због тога су најспорија форма спољашње меморије.
    Користиле су се 50.\ година прошлог века.
    Подаци уписани на магнетне траке могу дуго да трају без пропадања, а и врло су јефтине (због тога се користе за архивирање велике количине података).

    Читачи нису толико јефтини али шта да им радиш.

    \subsubsection{Магнетни дискови}

    Слично као магнетна трака, само је диск.

    Површина магнетног диска је логички подељена на стазе које представљају скуп битова на истом растојању од центра.
    Стазе су повезане на секторе који су кружни исечци (пица).
    Избор стаза се врши померањем главе, а избор сектора се врши ротацијом дискова.

    Уређаји засновани на магнетним дисковима могу имати већи број дискова, сваки са сопственом главом, који се могу читати симултано (цилиндар).

    Временом су класични магнетни дискови замењени дискетама, које су доста мање, па напослетку и тврдим дисковима, који имају знатно већи капацитет.

    \subsubsection{Оптички дискови}

    За разлику од магнетних дискова, оптички дискови користе принцип одбијања светлости за представу података.

    Представља пластични диск који је са доње стране обложен слојем поликарбоната преко ког се премазује рефлектујући слој (алуминијум).

    Током израде, на површини се праве мала удубљења, чија се рефлексивност разликује од рефлексивности равних делова (нарезивање).
    Очитавање се врши помоћу посебног уређаја, читача оптичких дискова, који испаљује ласере и врти диск како би открио податке на њему.

    Постоје CD дискови, DVD дискови и Blue-ray дискови (сортирани по капацитету и брзини)

    \subsubsection{Постојане полупроводничке меморије}

    Немају покретне делове, те нису подложне кваровима.

    Заснивају се на MOS транзистору са плутајућим гејтом (структура је слична NMOS транзистору, осим што изнад места где долази до пробоја постоји плутајући гејт,
    који у себи чува наелектрисање након уписа).

    Овакве меморије називају се ЕEPROM (флеш) меморије.
    Постоје NAND и NOR флеш.

    Агресивно детаљисање у скрипти на 313.\ страни, суштина је горе.

    \section{Кеш меморија}
    \label{sec:kes_memorija}

    \subsection{Обjаснити намену и основни принцип рада кеша.}
    \label{subsec:namena_princip_rada_kesa}

    Кеш меморија представља малу количину меморије (SRAM), по хијерархији између регистара и RAM меморије.

    Главна улога је да смањи разлику између брзине процесора и оперативне меморије тако што
    у себи чува копије најчешће коришћених података, што значајно убрзава рад програма.

    Главни принцип рада кеша је принцип локалности.

    \subsection{Обjаснити принцип локалности, шта jе просторна а шта временска локалност? Примери.}
    \label{subsec:princip_lokalnosti}

    Принцип временске локалности: ако је програму у неком тренутку потребан неки податак (или инструкција),
    врло је вероватно да ће му исти податак бити поново потребан у блиској будућности.

    Принцип просторне локалности: ако је програму у неком тренутку потребан неки податак (или инструкција),
    врло је вероватно да ће му у блиској будућности бити потребни и подаци из његове околине у меморији.

    \subsection{На коjи начин кеш користи принципе просторне и временске локалности?}
    \label{subsec:kes_koriscenje_principa_prostorne_vremenske_lokalnosti}

    Временска локалност: када се подаци искористе, они ће бити у кешу све док он не буде принуђен да их избрише (када дођу нови подаци).
    Када му понестане простора, кеш брише оне податке којима се није дуго приступало, а оставља оне којима јесте.

    Просторна локалност: у кеш се не учитава један податак, већ читава околина дате адресе у меморији (32 или 64 бајта).

    \subsection{Обjаснити читање кеша у случаjу поготка.}
    \label{subsec:citanje_kesa_pogodak}

    Уколико дође до поготка, процесор ће преузети податке из кеша, а главној меморији неће ни приступати.
    С обзиром на брзину кеш меморије, број циклуса чекања ће бити значајно мањи.

    \subsection{Обjаснити читање кеша у случаjу промашаjа.}
    \label{subsec:citanje_kesa_promasaj}

    Уколико дође до промашаја, податак се прво копира из меморије у кеш, а затим се прослеђује процесору.
    Овим се спречава промашај кеша при наредном приступу истом податку (што се очекује у блиској будућности).
    С обзиром да ћемо морати да приступамо главној меморији, то ће узроковати знатно дуже чекање (cache miss).

    \subsection{Обjаснити писање кеша у случаjу промашаjа.}
    \label{subsec:pisanje_kesa_promasaj} % strana 262

    Постоје два приступа:
    \begin{itemize}
        \item упис без алокације - податак се ажурира у меморији, без учитавања у кеш
        \item упис са алокацијом - податак се ажурира у меморији (не мора уколико користимо политику одложеног уписа),
        и одговарајући кеш блок се учитава у кеш
    \end{itemize}


    \subsection{Обjаснити писање кеша у случаjу поготка.}
    \label{subsec:pisanje_kesa_pogodak}

    Зависи од политике уписа.
    \begin{itemize}
        \item политика директног уписа - податак се ажурира и у кешу, и у меморији
        \item политика одложеног уписа - податак се ажурира у кешу, а у меморију се учитава тек након што из кеша бива избачен
    \end{itemize}


    \subsection{Обjаснити директно мапирање адреса кеша и дати пример.}
    \label{subsec:direktno_mapiranje_kesa}

    \komentar{Свака адресибилна локација у кеш меморији представља једну линију кеша (cache line). Она у себи може да чува један кеш блок (64 бајта који почињу на позицији у меморији дељивој са 64.)}

    Сваки кеш блок може бити учитан у само једну, унапред фиксирану кеш линију чији се редни број може добити на основу редног броја кеш блока.
    Уколико је линија на коју учитавамо нови кеш блок заузета, из ње се избацују стари подаци и уписују нови.

    Предност је јефтина имплементација претраге, упоређујемо тагове само на тим специфичним местима.
    Мана је што ће већина кеша вероватно остати празна.

    Пример недостаје.

    \subsection{Обjаснити асоциjативно мапирање адреса кеша и дати пример.}
    \label{subsec:asocijativno_mapiranje_kesa}

    Сваки кеш блок може да се смести у било коју кеш-линију.
    Приликом претраге, потребно је упоредити тагове свих кеш-линија са траженим, што успорава алгоритам и отежава имплементацију.
    Овај приступ даје најбољу искоришћеност кеша, јер не морамо да избацујемо коришћену линију ако има места у кешу.

    Пример недостаје.

    \subsection{Обjаснити скуп-асоциjативно мапирање адреса кеша и дати пример.}
    \label{subsec:skup-asocijativno_mapiranje_kesa}

    Кеш линије су подељене на скупове од по 2, 4, 8 или 16 линија.
    Сваки блок има тачно одређен скуп у ком може да се смести, а у скупу може да се налази у било којој линији.

    Овај приступ је комбинација асоцијативног и директног.

    Пример недостаје.

    \subsection{Због чега се врши замена линиjа кеша? Наброjати наjзначаjниjе политике замене.}
    \label{subsec:zamena_linija_kesa_politike}

    Замена кеша се врши:
    \begin{itemize}
        \item потпуно асоцијативни кеш: када је кеш попуњен
        \item кеш са директним мапирањем: када је попуњена јединствена кеш линија у коју се мора учитати тражени кеш блок
        \item скуп асоцијативни кеш: када је попуњен одговарајући скуп придружен датом кеш блоку
    \end{itemize}

    Најзначајније политике замене су LRU, псеудо-LRU и политика случајног избора.

    \komentar{Политика случајног избора брише једну насумичну линију из кеша. Перформанса је упоредивих са LRU.}

    \subsection{Обjаснити LRU политику замене линиjе кеша. Добре и лоше стране.}
    \label{subsec:lru_politika_zamene}

    Води се евиденција о томе којој линији најдуже није приступано, и када дође до замене, избацује се најдуже некоришћена.

    Предност се огледа у принципу временске локалности, ако линија није дуго коришћена, вероватно је непотребна.
    Главни проблем је што евиденција о најдуже некоришћеној линији је што је број стања расте веома брзо са бројем кандидата.

    \subsection{Обjаснити псеудо-LRU политику замене линиjе кеша. Добре и лоше стране.}
    \label{subsec:pseudo_lrtu_politika_zamene}

    Замењује се линија која довољно дуго није коришћена (не инсистирамо да то буде најдуже некоришћена).

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

    Ова политика је једноставна за имплементацију, али није довољно прецизна.

    \subsection{Коjе политике писања кеша постоjе и у чему се разликуjу?}
    \label{subsec:politike_pisanja}

    Постоје политика директног и одложеног уписа.
    Допуни.

    \subsection{Обjаснити политику директног уписа (write-through). Добре и лоше стране.}
    \label{subsec:politika_direktan_upis}

    При сваком упису се вредност података ажурира и у кешу и у меморији.

    Предност је једноставност имплементације (не морамо да бринемо о подацима приликом избацивања),
    Недостатак је што је потребно приступати меморији при свакој операцији уписа.

    \subsection{Обjаснити политику одложеног уписа (write-back). Добре и лоше стране.}
    \label{subsec:politika_odlozen_upis}

    Приликом уписа ажурира се само копија у кешу, док се копија у меморији ажурира тек када кеш линија бива избачена из кеша.

    Додатно, можемо водити рачуна о томе да ли је податак у кешу модификован увођењем „прљавог бита“ који нас обавештава о томе.

    Предност је што се не приступа главној меморији, већ само кешу.
    Недостатак је у сложенијој имплементацији операције замене линије кеша
    (морамо да проверавамо да ли су подаци измењени и, ако јесу, да их упишемо у меморију).

    \subsection{Раздвоjени и унификовани кеш. Поређење.}
    \label{subsec:razdvojeni_unifikovani_kes}

    Унификовани кеш у себи садржи све податке који се кеширају, и инструкције и податке.

    Раздвојени кеш подразумева постојање одвојеног кеша за инструкције и за податке.

    Предности раздвојеног кеша
    \begin{itemize}
        \item Оба кеша можемо боље прилагодити обрасцима приступа који се разликују за ове две врсте података.
        \item Два кеша не морају бити исте величине.
        \item Кеш за инструкције се може имплементирати једноставније
        (инструкције се никад не модификују те можемо укинути политике уписа, чување информације о променама итд.)
        \item Такође знатно се може смањити колизија приликом наизменичног приступа инструкцијама и подацима.
    \end{itemize}

    Предности унификованог кеша
    \begin{itemize}
        \item Једноставнија имплементација
        \item Код раздвојеног кеша може доћи да се један кеш попуни док је други празан, што се не дешава код унификованог
    \end{itemize}




    \subsection{Обjаснити архитектуре вишестепеног кеша и начин њиховог функционисања.}
    \label{subsec:visestepeni_kes}

    Брзина кеш меморије опада са њеном величином, те нам велика кеш меморија не доноси значајно убрзање,
    али се мала кеш меморија брзо напуни, што је чини бесмисленом.
    Због тога, уводи се више кеш меморија различитих брзина и величина, које су надовезане једна на другу
    између процесора и главне меморије (нивои кеша).

    Кеш једног нивоа тиме третира кеш нивоа испод његовог као сопствену системску меморију, и из њега захтева
    нове кеш линије, а њему враћа кеш линије које је заменио другим.

    \subsection{Обjаснити разлику између ексклузивног и инклузивног вишестепеног кеша. Предности и мане.}
    \label{subsec:ekskluzivni_inkluzivni_visestepeni_kes}

    Инклузивни кеш: ако се неки податак налази у кешу на неком нивоу, налазиће се и у кешевима на свим нижим нивоима.
    Кад дође до промашаја у кешу вишег нивоа, одговарајућа кеш линија се копира из кеша нижег нивоа и остаје у њему.

    Ексклузивни кеш: сва три нивоа су дисјунктни.\ Када дође до замене линија у кешу вишег нивоа, два кеш нивоа
    замењују линије које у себи чувају (у нижем се налази она избачена из вишег).

    Предност ексклузивног кеша је ефикаснија употреба меморијског простора, међутим, његова имплементација
    је сложенија јер захтева сложенију логику за интеракцију између различитих нивоа кеша.

    Додатна предност инклузивног кеша је што величине кеш линија на различитим нивоима не морају бити исте,
    те ће нижи нивои садржати ширу околину податка коју ће моћи да проследе кешу вишег нивоа по потреби.



    \section{Систем прекида}
    \label{sec:sistem_prekida}

    \subsection{Шта jе систем прекида и коjа му jе улога?}
    \label{subsec:sistem_prekida}

    Систем прекида омогућава да се програм који се извршава привремено прекине, при чему се памти
    његово стање (контекст) - програмски бројач, флегови, вредности релевантних регистара процесора.

    Контрола се преноси на неки други програм у меморији који је задужен за обраду прекида
    (опслуживање догађаја због којих је прекид настао).
    Када се прекид адекватно обради, контрола се враћа претходном програму (прекид је невидљив за прекинути програм).

    Основна улога му је да омогући процесору да реагује на догађаје који захтевају хитну обраду.

    \subsection{Навести и укратко обjаснити врсте прекида.}
    \label{subsec:vrste_prekida}

    \begin{itemize}
        \item хардверски прекид: изазивају га хардверске компоненте рачунара (маскирајући и немаскирајући)
        \item софтверски прекид:
        \item изузетак:
    \end{itemize}

    \subsection{Обjаснити хардверске прекиде. Шта су маскираjући, а шта немаскираjући прекиди?}
    \label{subsec:hardverski_prekidi}

    Хардверске прекиде (hardware interrupts) изазивају хардверске компоненте рачунара када желе да привуку пажњу процесора,
    најчешће у циљу обраде неког асинхроног догађаја.
    Могу се десити у било ком тренутку услед околности које није могуће предвидети
    (типично догађај који иницира корисник (притисак дугмета)).
    Зовемо их и асинхрони прекиди.

    Маскирајући прекиди допуштају да процесор одлучи да их игнорише (то најчешће регулише неки процесорски флег).
    То је корисно зато што постоје неке критичне ситуације када је неопходно не реаговати на сигнале које улазно-излазни уређаји шаљу -
    на пример, док оперативни систем врши неке деликатне операције над сопственим структурама података.

    Немаскирајући прекиди се не могу игнорисати ни на који начин и морају бити обрађени када до њих дође (хардверски кварови).

    \subsection{Обjаснити софтверске прекиде. Коjа jе типична улога софтверских прекида?}
    \label{subsec:softverski_prekidi}

    Софтверске прекиде изазивају програми који се извршавају, позивом одговарајуће инструкције.
    Дешавају се када програм то пожели, у тренутку који он одабере (софтверски прекиди се зову и синхроним).

    Улога софтверског прекида је да се преда контрола оперативном систему, уз аутоматски прелазак на виши ниво привилегија.

    Многим осетљивим ресурсима рачунара (попут улазно-излазних уређаја, спољашњих меморија и слично)
    није могуће приступити директно, из разлога ефикасности и безбедности.
    Процесор физички спречава приступ овим ресурсима програмском коду са ниским нивоом привилегија.
    Уместо тога, кориснички програм помоћу прекида захтева услугу од оперативног система који ће му их
    пружити на безбедан и ефикасан начин.

    У ту сврху, оперативни систем обезбеђује скуп \textit{системских позива}, посебних функција
    оперативног система које кориснички програми могу позивати и на тај начин захтевати одређене услуге.

    \subsection{Шта су изузеци (у контексту система прекида) и чему служе?}
    \label{subsec:izuzeci}

    Изузеци су врста прекида које изазива сам процесор, као реакцију на неку непредвиђену ситуацију
    током извршавања инструкција програма.
    Догађају се као последица неисправног кода (дељење нулом, прекорачења, извршавање инструкција
    за које програм нема привилегија, недостатак ресурса).

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

    \subsection{Обjаснити обраду хардверских прекида прозивком.}
    \label{subsec:obrada_hardverskih_prekida_prozivkom} % strana 323

    Идентификација уређаја који је изазвао прекид и обрада прекида.

    \begin{itemize}
        \item контролер уређаја који захтева прекид у свој статусни регистар уписује специјалну вредност (уређај жели прекид)
        \item контролер шаље сигнал за прекид процесору
        \item процесор реагује тако што чува контекст текућег програма и извршава \textit{јединствену} функцију за обраду прекида
        \item функција редом „прозива“ улазно-излазне уређаје тако што очитава статусне регистре њихових контролера
        \item након што пронађе контролер чији статусни регистар говори да се ради о уређају који захтева прекид,
        даље комуницира са тим контролером у циљу обраде прекида
        \item када се обрада прекида заврши, контрола се враћа прекинутом програму
    \end{itemize}

    Имамо јединствену функцију коју нам пружа оперативни систем, а која обрађује све врсте прекида (аутоматски се позива кад се прекид догоди).
    Редослед прозивке се одређује у складу са неком политиком, како би сви уређаји који траже прекид били „прозвани“.

    Главна предност је једноставност хардверске подршке, све што нам је потребно је регистар (IFR) који чува
    адресу јединствене функције за обраду прекида.

    С друге стране, механизам прозивке није нарочито ефикасан, нарочито у случају већег броја улазно-излазних уређаја.

    \subsection{Обjаснити обраду хардверских прекида засновану на векторима прекида.}
    \label{subsec:obrada_hardverskih_prekida_vektorima_prekida}

    Доминантан приступ обраде хардвера у данашње време (interrupt vectors).
    Уређајима (или другим догађајима) се придружују цели бројеви (зову се вектори) који их једнозначно идентификују.
    За сваки вектор постоји посебна функција која се позива само за његов прекид.

    С обзиром на то, хардверска подршка је знатно сложенија.
    Мора постојати регистар који у себи садржи адресу табеле свих дескриптора (функција) за сваки вектор.

    \begin{itemize}
        \item Приликом појаве прекида, процесор активира посебан излазни сигнал којим обавештава уређај да је спреман да обради његов прекид.
        Уређај реагује тако што прослеђује процесору вектор свог прекида путем меморијске магистрале.
        \item Процесор помоћу вектора прекида и регистра приступа дескриптору прекида, из њега чита привилегије.
        Улази у тај ниво привилегија и извршава специфичну функцију за обраду прекида.
        \item Након што се заврши обрада прекида, функција враћа све како је било пре свог позива, излази из свог нивоа привилегија,
        и прекинути програм наставља са радом
    \end{itemize}

    Иако је компликованији, приступ је значајно ефикаснији јер процесор директно зове
    функцију која обрађује прекид, и одмах зна који га је уређај изазвао.

    Проблем једино настаје када више уређаја истовремено изазове прекид.
    Алгоритам за њихово бирање мора се имплементирати хардверски.



    \subsection{Шта jе контролер прекида и чему служи? Обjаснити начин обраде прекида у присуству контролера прекида.}
    \label{subsec:kontroler_prekida}

    Контролер прекида користи се да одабере редослед обраде хардверских прекида.\ Уместо процесору, улазно-излазни уређаји
    захтевају прекид од њега, а он одлучује који ће проследити процесору.

    Након што сигнали за прекид стигну у контролер, он процесору шаље сигнал за прекид.
    Када процесор потврди да може да изврши обраду прекида, контролер применом неке политике
    најприоритетнији уређај и његов вектор прекида шаље процесору.

    По завршетку свог рада, функција за обраду прекида обавештава контролер да је обрада прекида успешно завршена.
    Њему је то сигнал да може да бира следећи уређај, или уколико их нема више, да стане.

    \subsection{Обjаснити на коjи начин се хардверски прекиди користе у сврху распоређивања процеса и послова од стране оперативног система.}
    \label{subsec:hardverski_prekid_rasporedjivanje_procesa}

    Политике са преотимањем.

    Расподела помоћу хардверских прекида се може реализовати на два начина:

    \begin{enumerate}
        \item Прекиди изазвани корисничким акцијама: свака акција корисника с улазним уређајима изазива хардверски прекид
        \begin{itemize}
            \item Контрола се принудно одузима од процеса који је извршава и предаје оперативном систему,
            који контролу преноси процесу за који је корисничка интеракција релевантна.
            \item Мана је што се контекст мења само док је корисник активан, што запоставља позадинске процесе
        \end{itemize}
        \item Периодични прекиди генерисани хардверским тајмером (Дељење времена)
        \begin{itemize}
            \item Да би се постигао ефикасан вишепрограмски рад (multitasking) и праведно дељење времена (timesharing),
            хардверски прекиди се вештачки изазивају у равномерним интервалима коришћењем
            посебног хардверског уређаја (програмабилни интервални тајмер).
            \item Интервал између два прекида се зове временски квант
            \item Када тајмер генерише прекид, оперативни систем преузима контролу и покреће неки алгоритам за
            распоређивање процеса (одређивање који ће се процес извршити: кружно (round-robin) или на основу задатих приоритета)
            \item Ствара се илузија да се програми извршавају истовремено
        \end{itemize}
    \end{enumerate}

    \subsection{Обjаснити на коjи начин се софтверски прекиди користе за имплементациjу системских позива на оперативним системима.}
    \label{subsec:softverski_prekidi_sistemski_pozivi}

    Иако системски позиви делују као обичне функције, ако бисмо их као такве извршили,
    радили би на истом нивоу привилегија као и корисник (најнижем).

    Потребна реализација остварује се помоћу софтверских прекида.
    Системски позив се врши тако што се у регистре процесора (или на стек) поставе
    информације о жељеном системском позиву и његовим параметрима, а затим се изазива софтверски прекид.

    Оперативни систем обезбеђује посебну функцију за обраду овог прекида која ће се извршити са високим нивоом привилегија.
    На основу информација које је корисник доставио, извршиће одговарајућу функцију оперативног система
    која имплементира жељени системски позив.

    \section{Улазно излазни уређаји}
    \label{sec:ulazno_izlazni_uredjaji}

    \subsection{Како делимо улазно-излазне уређаjе према смеру преноса података?}
    \label{subsec:ulazno_izlazni_uredjaji_smer_prenosa}

    \begin{itemize}
        \item Улазни уређаји: помоћу њих се подаци и програми учитавају у рачунар, тј.\ подаци теку од уређаја ка процесору и меморији
        \item Излазни уређаји: помоћу њих се подаци из рачунара могу проследити некоме у спољној средини
        (кориснику, другом рачунару и сл.), тј.\ подаци теку од процесора ка уређају
    \end{itemize}

    \subsection{Навести наjчешће коришћене врсте улазних уређаjа на модерним рачунарима.}
    \label{subsec:najcesce_vrste_ulaznih_uredjaja}

    Тастатура, показивачки уређаји (миш, додирна површина), микрофони и камере.

    \subsection{Навести наjчешће коришћене врсте излазних уређаjа на модерним рачунарима.}
    \label{subsec:najcesce_vrste_izlaznih_uredjaja}

    Штампачи (ласерски, млазни), екрани (графички кориснички интерфејс), звучници.

    \subsection{Навести примере двосмерних улазно-излазних уређаjа на модерним рачунарима.}
    \label{subsec:primer_dvosmerni_ulazno_izlazni_uredjaj}

    Екрани осетљиви на додир, комуникациони уређаји (мрежни адаптери са жичаном везом, бежични мрежни адаптери, блутут адаптери и слично),
    спољне меморије (оптички дискови, флеш меморије, тврди дискови, SSD дискови).

    \subsection{Шта су улазно-излазни контролери и коjа jе њихова функциjа?}
    \label{subsec:ulazno_izlazni_kontroler}

    Врше комуникацију са улазни-излазним уређајима уместо процесора

    Основне функције:
    \begin{itemize}
        \item да обезбеде управљање улазно-излазним уређајем и комуникацију са њим, узимајући у обзир специфичности самог уређаја
        (ако уређај прослеђује аналогни сигнал, обезбедити одговарајућу конверзију у дигитални сигнал који процесор разуме)
        (многи уређаји имају механичке покретне делове, те је потребно контролисати њихов рад)
        \item да обезбеде релативно једноставан и униформисан интерфејс према процесору, како би сакриле специфичности
        уређаја од процесора (модел сличан као при комуникацији са оперативном меморијом)
    \end{itemize}

    Поједини улазно-излазни уређаји имају интегрисане контролере (мрежни адаптери),
    док је код неких других контролер одвојена компонента (звучници и микрофони се на рачунар
    повезују уз помоћ звучне картице, док се монитор повезује помоћу графичке картице).

    \subsection{Описати типичан интерфеjс улазно-излазног контролера коjи се користи за комуникациjу са процесором.}
    \label{subsec:tipican_interfejs_ulazno_izlaznog_kontrolera_za_komunikaciju_sa_procesorom}

    Улазно-излазни контролер у себи садржи извесни број регистара којима процесор
    може приступати путем интерфејса контролера.
    Типично, садржи следеће регистре:

    \begin{itemize}
        \item командни регистар: у овај регистар процесор уписује команде којима се захтева
        иницијација одговарајуће операције са уређајем.\ Појединим командама може се вршити
        подешавање контролера које ће се примењивати у наставку рада
        \item статусни регистар: у овај регистар сам контролер уписује информације о свом статусу и/или
        о статусу извршене операције (нпр.\ да ли је контролер спреман да прихвати следећу команду,
        да ли је уређај заузет јер је операција у току, да ли је дошло до грешке и слично)
        \item регистар података: служи за размену података између процесора и контролера.
        (излазна операција - процесор уписује, улазна операција, контролер уписује а процесор чита).
        Може их бити више и неки од њих могу имати специфичне намене
    \end{itemize}

    \subsection{Обjаснити мемориjски мапирани улаз/излаз.}
    \label{subsec:memorijski_mapirani_ulaz_izlaz}

    Меморијски мапирани улаз/излаз подразумева уградњу регистара улазно-излазних контролера
    у адресни простор процесора (регистирма придружујемо из адресног процесора).
    Процесор ће моћи да чита и уписује у те регистре користећи исте инструкције као и за меморијске трансфере.

    Једино што се прескаче јесте кеш меморија, јер сам улазно-излазни уређај може да мења вредност својих регистара,
    те нам је немогуће закључити да ли се у кешу налазе исти подаци као и у регистрима.

    \subsection{Обjаснити изоловани улаз/излаз.}
    \label{subsec:izolovani_ulaz_izlaz}

    Процесор има два адресна простора, један за у који се мапира радна меморија, и други у који
    се мапирају регистри улазно-излазних контролера.
    Простори не морају бити исте величине (меморијски је обично знатно већи) и архитектура
    обезбеђује посебан скуп инструкција трансфера за приступ улазно-излазном адресном простору.

    Пример архитектуре: x86

    \subsection{Обjаснити технику програмираног улаза/излаза.}
    \label{subsec:programirani_ulaz_izlaz}

    У случају синхроних улазно-излазних операција (програм бира да до њих дође), најједноставнији начин комуникације
    између процесора и улазно-излазних контролера се састоји у томе да процесор, након издавања команде, чека у
    петљи док не добије одговор.

    Процесор најпре проверава да ли је уређај слободан, уколико није, сачекаће да постане.
    Након тога се у командни регистар уписује одговарајућа команда која налаже контролеру да започне операцију.
    Потом ће процесор чекати да уређај заврши, и кад до тога дође, дохватиће очитане податке и отићи својим путем.

    \subsection{Обjаснити технику улаза/излаза вођеног прекидима.}
    \label{subsec:ulaz_izlaz_vodjen_prekidima}

    Процесор издаје наредбу контролеру да га обавести када изврши задату операцију, и наставља да ради неки други користан посао.
    Када се ослободи, контролер ће послати сигнал за прекид процесору, што ће га натерати да запамти стање тренутног програма,
    прочита оно што му је контролер доставио у регистру, смести податак на одговарајуће место у меморији, и настави извршавање оног програма.

    \subsection{Обjаснити директан приступ мемориjи (DMA). Контролер DMA. Принцип рада.}
    \label{subsec:dma}

    Контролер по завршетку операције улазно-излазног уређаја не комуницира с процесором, већ са DMA контролером,
    који му налаже на који начин да добављене податке смести у радну меморију.

    \begin{itemize}
        \item Када је потребно обавити неку улазно-излазну операцију која подразумева масовни трансфер података,
        процесор шаље одговарајућу команду улазно-излазном контролеру
        \item Потом процесор DMA контролеру шаље релевантне информације (идентификатор улазно-излазног контролера, смер трансфера,
        број речи које је потребно пребацити, и почев од које адресе)
        \item Процесор наставља да ради неки користан посао, док DMA контролер на себе преузима улогу процесора.
        Чека да му улазно-излазни контролер пошаље сигнал да је прва реч спремна за читање
        \item Када му стигне реч, DMA контролер наређује контролеру да податак постави на магистралу података,
        а меморији шаље сигнал и адресу за упис
        \item Након што се прва реч пренела, улазно-излазни контролер наставља са читањем следеће речи,
        над којом се примењује идентичан поступак, све док не понестане података у захтеву
        \item Када се сви подаци пренесу, DMA шаље сигнал за прекид процесору, чиме га обавештава да су подаци спремни
    \end{itemize}



    \section{Виртуелна меморија}
    \label{sec:virtuelna_memorija}

    \subsection{Шта jе виртуелна мемориjа и због чега се користи?}
    \label{subsec:virtuelna_memorija}

    Виртуелна меморија је виртуелни сопствени адресни простор неког програма.
    Програм види виртуелну меморију као једну целину и сматра да је сам у њој.
    Виртуелна меморија се може протезати преко више независних делова радне меморије,
    а чак може користити и спољашња складишта, у која премешта делове програма који се нису дуго користили,
    а враћа их у оперативну меморију када постану потребни (програм није свестан да је до тога дошло).

    Користи се из пар разлога
    \begin{itemize}
        \item сви програми могу заузимати више радне меморије него што систем има на располагању
        \item како би се избегло преклапање програма (један већ учитан програм стоји тачно на средини и дели
        меморију на два дела исувише мала да би у њих појединачно наш програм стао)
        \item програмер не размишља о адресама на којима се налазе остали програми, јер су му
        доступне само оне којима програм сме да приступа
        \item програм не може да прочита меморију неких других програма и потенцијално угрози безбедност система
    \end{itemize}

    \subsection{Обjаснити концепт страница виртуелне мемориjе. Шта су странице, а шта оквири страница?}
    \label{subsec:stranice_virtuelne_memorije}

    Најчешћи вид реализације виртуелне меморије је техника страничења.
    Виртуелни адресни простор програма и физичка меморија се не посматрају као целина, већ су подељени на мање блокове фиксне и једнаке величине.

    Виртуелни адресни простор програма подељен је на странице (код x86 архитектуре, странице су величине 4 KB).
    Програм користи виртуелне адресе које се логички састоје од броја странице и помераја.

    Физичка меморија (и радна меморија и спољашње складише) подељена је на оквире који су исте величине као и странице.

    Повезивање странице виртуелне меморије и оквира физичке меморије врши се преко табеле страница (page table)
    која за сваку виртуелну страницу бележи у ком се физичком оквиру налази.

    \subsection{Обjаснити пресликавање адреса виртуелне мемориjе. Пример.}
    \label{subsec:preslikavanje_adrese}

    Пресликавање адреса је процес у коме се виртуелна адреса коју програм користи претвара у стварну физичку адресу у радној меморији.
    Одвија се хардверски (у процесору) уз помоћ структура које одржава оперативни систем.

    Да би се омогућило пресликавање, виртуелна адреса се дели на два дела, број странице (горњи битови) који представља индекс странице на којој се налазимо,
    и померај (offset) (нижи битови) који одређује тачну локацију бајта унутар странице.

    Када се ради пресликавање, број странице се користи као индекс за табелу страница, која нам саопштава у ком оквиру се адреса налази.

    Потом се на на битове индекса придодаје померај, и добијена адреса је адреса реалног податка у меморији.
    Уколико је податак тренутно ван меморије, он се учитава и тек онда се враћа његова адреса.

    \subsection{Пресликавање адреса на више нивоа. Због чега се користи? Пример.}
    \label{subsec:preslikavanje_vise_nivoa}

    Главни проблем са основном организацијом виртуелне меморије је што табеле страница могу постати
    изузетно велике и заузети превише корисног простора у радној меморији.

    Решење је да, уместо да чувамо табелу странице у непрекидном облику, и њу саму распршимо по меморији у произвољне слободне оквире.
    Да бисмо знали где се која страница табеле налази, уводимо Директоријум табеле страница, табелу највишег нивоа.
    Тако, чак и делове табеле страница можемо чувати на диску уколико дуго нису коришћени.

    Пример: у случају двостепеног пресликавања адреса на архитектури x86, виртуелна адреса се логички дели на:

    \begin{itemize}
        \item број директоријума (10 битова) - индекс у директоријуму табеле страница
        \item број странице (10 битова) - индекс унутар одабране странице табеле страница
        \item померај (12 битова) - тачна позиција бајта унутар странице
    \end{itemize}

    Напомена: и директоријум можемо поделити на странице, и изградити директоријум директоријума (x86\_64).

    \subsection{Шта су и када се користе политике замене страница?}
    \label{subsec:politike_zamene_stranica}

    Политика замене страница подсећа на замену кеш линија, с тим да, када се радна меморија препуни,
    по некој политици избацујемо једну страницу и чувамо је у спољној меморији (најчешће по некој варијанти LRU стратегије).

    \subsection{Обjаснити значаj величине странице виртуелне мемориjе и навести примере.}
    \label{subsec:znacaj_velicine_stranice_virtuelne_memorije}

    Величина странице виртуелне меморије знатно утиче на перформансе, искоришћеност меморије и ефикасност рада са диском.

    Увођење и употреба већих страница има своје предности и мане:
    \begin{itemize}
        \item Предност:
        \item мање табеле страница - укупан број страница од којих се састоји адресни простор је мањи, па су и табеле страница мање
        \item ефикасније коришћење диска - спољни дискови углавном боље раде када већој количини података приступамо одједном уместо у мањим целинама
        \item Мана:
        \item велика фрагментација: с обзиром да се цела страница прослеђује програму, већа је шанса да она не буде у потпуности искоришћена,
        и ако то применимо на све странице пола меморије бива празно
        \item мања прецизност: када је програму потребна адреса, програм са њом учитава и огромну страницу, коју можда нема потребе да учитава
    \end{itemize}

    \subsection{Шта су таблице, а шта директориjуми страница виртуелне мемориjе? Обjаснити.}
    \label{subsec:tablice_direktorijumi_stranica}

    Таблица страница виртуелне меморије је табела која омогућава превођење виртуелних адреса у физичке адресе.

    Директоријуми страница виртуелне меморије су табеле највишег нивоа која садржи позицију оквира у којем се налази део таблице страница виртуелне меморије.
    Користи се зато што чување целе таблице у меморији захтева превише простора који може бити искоришћен за нешто боље.

    \subsection{Шта садрже ставке у таблици страница виртуелне мемориjе? Обjаснити.}
    \label{subsec:stavke_tablice_stranica_virtuelne_memorije}

    \begin{itemize}
        \item број оквира физичке меморије - уколико је виртуелна страница учитана у меморију, ова ставка садржи тачан редни број оквира у ком се налази
        Ако страница није у меморији, ставка садржи информацију о њеном одсуству.
        \item контролни битови:
        \item битови права приступа: одређује дозвољене операције над страницом (да ли је дозвољена за читање/писање)
        \item бит коришћења: да ли је страница била коришћена од тренутка када је учитана у физичку меморију (помаже нам приликом замене страница)
        \item прљави бит: саопштава нам да ли је садржај странице мењан (помаже приликом замене страница)
    \end{itemize}

    \subsection{Шта jе бафер таблице страница виртуелне мемориjе (TLB) и чему служи?}
    \label{subsec:bafer_tablice_stranica}

    Како се табеле и директоријуми страница налазе у радној меморији, да бисмо извршили превођење виртуелних у физичке адресе,
    потребно је да одемо у меморију по одговарајуће ставке из табеле.
    С обзиром да је приступ меморији спор, неопходно је користити кеширање.

    TLB је специјални кеш у процесору који се користи у ове сврхе (мали, веома брз, обично имплементиран као раздвојен кеш).
    У случају мањих бафера таблице користимо потпуно асоцијативно мапирање, док се генерално користи скуп-асоцијативно мапирање.

    \section{Магистрале}
    \label{sec:magistrale}

    \subsection{Коjа jе основна разлика између сериjских и паралелних магистрала?}
    \label{subsec:serijske_paralelne_magistrale}

    Серијске магистрале се састоје из једне линије преко које се подаци преносе бит по бит,
    док се паралелне састоје из више линија преко којих се подаци преносе реч по реч.

    \subsection{Коjе су предности сериjских магистрала у односу на паралелне?}
    \label{subsec:prednosti_serijskih}

    Приликом преношења речи код паралелних магистрала, не стижу сви битови на одредиште истовремено.
    То је зато што је немогуће направити $n$ линија исте дужине и проводљивости.
    Временске разлике између пристизања бита су веома мале, али при великим ферквенцијама преноса долазе до изражаја
    и отежавају пријемном уређају да исправно очита вредности са магистрале.

    При великим ферквенцијама долази до веома брзог смењивања јединица и нула (напонских нивоа)
    на линијама магистрале, што доводи до електромагнетне индукције, која може да
    утиче на сигнале са различитих паралелних линија и мењају их (интерференција).


    \subsection{Навести примере паралелних магистрала.}
    \label{subsec:primeri_paralelnih}

    PCI, PATA, екстерни паралелни порт, меморијска магистрала.

    \subsection{Навести примере сериjских магистрала.}
    \label{subsec:primeri_serijskih}

    PCI-EXPRESS, SATA, USB .

    \section{Завршна реч}
    \label{sec:zavrsna_rec}

    Хвала свима који су помогли при реализације ове скрипте.

    Посебно хвала Мини Немет која је нашла грешку у питању\ \ref{subsec:osnovne_faze_izvrsavanja_instrukcije} :)

    За крај види слику\ \ref{fig:bosanski_sabirac}.


\end{document}