### Zadanie 1

Hazard sterowania - podczas instrukcji ze skokiem dowiemy się czy skoczymy dopiero po fazie ALU. Kolejna instrukcja ruszy już w drugim cyklu a my wiemy jeszcze czy skaczemy czy nie.
Hazard strukturalny - podczas gdy kilka instrukcji próbuje wykorzystać te same zasoby (Out of order)
RAW - podczas gdy jedna instrukcja zapisuje w rejestrze a jakaś kolejna chce odczytać z tego rejestru.
WAR - podczas gdy jedna instrukcja odczytuje wartość z rejestru a jakaś kolejna chce do niej zapisać inną wartość (Out of Order)
WAW - podczas gdy instrukcja zapisuje jakąś wartość do rejestru i
jakaś kolejna chce ją nadpisać (Out of Order)
a) W procesorze jednocyklowym nie występują żadne hazardy, ponieważ każda instrukcja rozpoczyna się po zakończeniu poprzedniej.
b) W procesorze potokowym z pojedynczym ALU mogą wystąpić hazardy:
* RAW
t0 = t1 + t2 // instrukcja 1
t2 = t0 + t1 // instrukcja 2
przy próbie odczytu t0 w instrukcji 2 może jeszcze nie być znana wartość z instrukcji 1
* Hazard sterowania

WAR, WAW i hazard strukturalny nie występują.
W procesorze potokowym z jednym ALU nie będzie sytuacji gdzie w jednym cyklu są w tej samej fazie (chyba że RF ale tam zapisywanie i odczytywanie wykonują się w różnych połowach RF). (Brak hazardu sterowania)
WAR jak i WAW występują kiedy zezwolimy na Out of Order, jeżeli w potokowym mamy normalnie po kolei to nie ma problemu.
c) W procesorze potokowym z wieloma jednostkami wykonawczymi mogą wystąpić hazardy:
* RAW i hazard sterowania (tak samo jak dla podpunktu b)
* WAR
t0 = t1 + t2 //instrukcja 1
t1 = t2 + t3 // instrukcja 2
Jeżeli mamy Out of Order to może być tak, że najpierw wykona się instrukcja 2 i w instrukcji 1 zostanie odczytana zła wartość t1.
* WAW
t0 = t1 + t2 //instrukcja 1
t0 = t3 * t4 //instrukcja 2
Jeżeli mamy Out of Order to może być tak, że najpierw wykona się instrukcja 2 a dopiero potem 1 i zostaniemy ze złą wartością w t0 (bo kolejne chcą skorzystać z tej z instrukcji 2 a my mamy z instrukcji 1)
* Hazard strukturalny
t0 = t1 / t2 // instrukcja 1
t3 = t4 / t5 // instrukcja 2
mogą zostać wykonane na raz i każda chce skorzystać w ALU z dzielenia
### Zadanie 2

**Scoreboard** -> zarządza hazardami i poprawnie zleca instrukcje

* **RAW** -> scoreboard sprawdza czy do rejestru który chcemy odczytać nie będzie jeszcze nadpisywany przez inne instrukcje, jeśli tak to instrukcja powodująca hazard RAW poczeka w scoreboardzie aż hazardu nie będzie
* **WAR** -> jeżeli jakaś instrukcja chce odczytać rejestr który będziemy nadpisywać to ta instrukcja powodująca hazard WAR z obliczoną wartością czeka w scoreboardzie aż reszta odczyta poprawną wartość z rejestru. Jak już hazardu nie będzie to po prostu zapisze w tym rejestrze tą wartość.
* **WAW** -> jeżeli nasza instrukcja chce nadpisać rejestr, a któraś z instrukcji też chce zapisać do tego samego rejestru to nasza instrukcja powodująca hazard WAW czeka przed wejściem do scoreboardu aż hazardu nie będzie.