background image

Wykład 

 

Temat: 

Model programowy komputera, część II. 

 

Zawartość wykładu: 

 

1. Cykl rozkazowy i jego realizacja w komputerze 

2. Realizacja programu w komputerze 

3. Potokowe wykonywanie operacji obliczeniowych 

4. Potokowe wykonywanie rozkazów 

background image

 

Cykl rozkazowy i jego realizacja w komputerze 

 

Rozkazy wewnętrzne komputera są wykonywane w procesorze w ramach tzw. 
cyklu wykonania rozkazu, który składa się z dwu faz: pobrania rozkazu i 
wykonania rozkazu.  

 

 

Start 

Pobranie 

następnego 

rozkazu 

Wykonanie 

rozkazu 

Stop 

Faza pobierania 

Faza wykonania 

 

background image

 

Wprowadzenie

adresu rozkazu

Pobranie rozkazu

Dekodowanie

kodu operacji rozkazu

Obliczenie

adresu argumentu

Pobranie argumentu

Operacja na danych

Obliczenie

adresu wyniku

Zapisanie wyniku

1

2

3

4

5

6

7

8

Łańcuch

lub

wektor

Następny

rozkaz

wiele argumentów

wiele wyników

F

az

a w
y

ko
n

a

ni

a

F

a

za

 po
bi

er

a

n

ia

 

 

Składniki faz w cyklu wykonania rozkazu. 

background image

 

 

Fazy należące do cyklu wykonania rozkazu mają długości czasowe określone 
przez sygnały taktujące pochodzące z  zegara.  

W każdej fazie generator sygnałów sterujących dostarcza odpowiednich 
sygnałów, które powodują realizację operacji przewidzianych w tych fazach.  

Odbywa się to metodą otwarcia odpowiednich dróg przesyłania informacji w 
komputerze (np. szyn) i aktywacji odpowiednich działań w układach 
wykonawczych (np. ALU – dodanie/ odjęcie, układ następnika licznika 
rozkazów, itp.). 

background image

 

Realizacja programu w komputerze 

 

Realizację wykonania prostego programu rozważymy w uproszczonym 
komputerze składającym się mikroprocesora i pamięci operacyjnej 
podłączonej do niego za pomocą szyny systemowej ( szyna danych, szyna 
adresowa i szyna sterująca).  

 

Program , którego wykonanie rozpatrzymy składa się z 4 rozkazów 
zapisanych pod kolejnymi adresami w pamięci od 0 do 3 oraz z 3 danych dla 
których przeznaczono komórki o adresach od 4 do 6.  

background image

 

 

Program składa się z następujących rozkazów,  (rozkazy zapisujemy za 
pomocą typowch skrótów języka asemblera) : 

move 4 - pobierz daną z pamięci spod adresu 4 do rejestru akumulatora, 

add 5 - dodaj do akumulatora daną spod adresu 5, 

store 6 - zapamiętaj zawartość akumulatora w pamięci pod adresem 6, 

stop - zatrzymaj wykonanie programu. 

Po wykonaniu programu wynik obliczeń znajduje się w komórce pamięci 
operacyjnej o adresie 6.  

background image

Podłączenie mikroprocesora do pamięci operacyjnej zawierajacej 

program. 

 

Mikroprocesor

Nr komórki

Zawartość

0

move 4

1

add 5

2

store 6

3

stop

4

10

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

Szyna danych

Szyna adresowa

Szyna sterowania

Pamięć operacyjna

 

 

background image

 

Założona strukturą blokową procesora. 

 

Kod

operacji

Adres

Dekoder

Generator

sygnałów

Selektor

±

1

0

RR

LR

0

A

ALU

0

0

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3
4

10

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

RBD

RBA

Szyna danych

Szyna adresowa

Szyna sterowania

Pamięć operacyjna

Zawartość

move 4

add 5
store 6

stop

 

 

RR – rejestr rozkazów                                LR – licznik rozkazów 

A – rejestr akumulatora                             Warunki – rejestr warunków (flagi) 

RBD – rejestr buforowy danych                 RBA – rejestr buforowy adresu 

background image

 

Pamięć operacyjna zawiera komórki, które symbolicznie są przedstawione  

w postaci wierszy składających się z numeru komórki i pola zawartości 
komórki. W rzeczywistości komórka zawiera tylko pole zawartości.  

 

Adres jest podawany do pamięci z zewnątrz (z procesora prze szynę adresów) 
i po zdekodowaniu przez dekoder adresu, powoduje uaktywnienie (wybranie) 
komórki o podanym adresie. 

 

Może być wykonany odczyt lub zapis zawartości (rodzaj operacji 

zależy od sygnału podanego przez szynę sterującą do układu sterowania 
pamięci). 

 

background image

 

 

Sposób wykonania kolejnych rozkazów komputera można omawiać 
wykorzystując symboliczny zapis operacji, czyli :  

tzw. język przesłań między-rejestrowych (ang. register transfer language).  

 

Nazwa języka pochodzi od tego, że podstawową operacją wyrażalną w tym 
języku są przesłania informacji między rejestrami, komórkami pamięci i 
blokami funkcjonalnymi (obliczeniowymi) w komputerze.  

 

Języki takie należą do większej grupy języków służących do opisu sprzętu 
komputera i sposobu jego działania, tzw. języków opisu sprzętu (ang. 
hardware description languages).  

background image

 

 

Język przesłań między-rejestrowych  wykorzystuje reprezentacje elementów 
pamięciowych lub bloków 
obliczeniowych komputera (rejestrów, pamięci 
operacyjnej, pamięci pomocniczej, jednostki arytmetyczno-logicznej) w 
postaci ich nazw, np. A, RR , LR, pamięć, P, ALU, itp..  

 

Zawartość elementów pamięciowych lub wyjściowe dane z bloku 
obliczeniowego (rozumiane jako ciąg bitów) symbolizuje nazwa elementu 
wzięta w nawias prostokątny, np. [A], [RR], [RBD], [ALU]. 

background image

 

Adresowanie informacji wewnątrz elementu pamięciowego lub słowa 
wyjścia z bloku obliczeniowego opisuje się za pomocą nazwy elementu, po 
którym występuje specyfikacja wybranego fragmentu zawartości w nawiasie 
okrągłym. 

 

Przykłady: 

 

RR (Kod Operacji) – pole rejestru RR o nazwie Kod Operacji,  

 

RR (Adres) – pole rejestru RR o nazwie Adres,  

 

ALU (bity 10 – 24) – bity od 10 do 24 słowa stanowiącego wynik operacji 
ALU.  

background image

 

Komórki pamięci mogą być opisane przy pomocy nazwy całej pamięci np. P 
dla pamięci operacyjnej oraz specyfikacji adresu w nawiasie okrągłym 

 

Przykłady 

 

P (999) – komórka pamięci P o adresie 999,  

 

P (RBA) – komórka pamięci P o adresie zawartym w rejestrze RBA,  

 

P (LR) ( Kod Operacji) – pole Kod Operacji w komórce pamięci P o adresie 
zawartym w rejestrze LR. 

background image

 

Na zawartościach elementów pamięciowych  można wykonać operacje, które 
symbolizowane są operatorami, np. 

 prześlij, + dodaj, - odejmij, itp. 

 

Przykłady 

 

[A] 

 P (1024) – oznacza prześlij zawartość rejestru A do komórki pamięci o 

adresie 1024, 

 

[RR (Adres)] 

 LR – prześlij zawartość pola Adres rejestru RR do rejestru 

LR, 

 

[A (0-15)] + [LR] 

 LR – dodaj zawartość bitów od 0 do 14 rejestru A do 

zawartości LR i wynik zapisz do LR.  

background image

 

 

Przesyłanie zawartości bitowej odbywa się z wpisywaniem bitów na te same 
pozycje w elemencie docelowym ( bit na pozycji zero elementu źródłowego 
wpisuje się na pozycje zero w elemencie docelowym), chyba, że jest to 
określone inaczej. 

 

Przykład 

 

[RR (Adres)] 

 LR (14 –31) – przesłanie pola Adres z rejestru RR na bity 

14-31 rejestru LR.  

background image

 

 

Wykonanie przykładowego programu opisane za pomocą 

języka przesłań miedzy-rejestrowych 

 

• 

Dla prezentacji użyty będzie schemat blokowy komputera 

• 

Elementy komputera, które biorą udział w opisywanej operacji zaznaczać 
będziemy na 

czerwono

• 

Pod schematem blokowym podany jest opis operacji w języku przesłań 
między-rejestrowych 

background image

 

Faza pobrania rozkazu 

 

Przed wykonaniem każdego programu, adres komórki pamięci operacyjnej, 
która zawiera pierwszy rozkaz programu musi być wprowadzony do licznika 
rozkazów LR.  

Wykonuje to system operacyjny na podstawie odpowiedniej dyrektywy 
użytkownika np.„ Wykonaj program o nazwie alfa.”.  

We współczesnych komputerach taka dyrektywa jest nazwa zbioru 
zawierającego wykonywalny kod binarny programu, a więc alfa.exe

Nazwa jest zamieniana na adres pierwszego rozkazu programu o nazwie alfa

W przypadku naszego przykładowego programu jest to adres 0. Jest on 
wprowadzony do rejestru LR przed wykonaniem programu. 

background image

 

Kod

operacji

Adres

Dekoder

Generator

sygnałów

Selektor

±

1

0

RR

LR

0

A

ALU

0

0

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3
4

10

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

RBD

RBA

Zawartość

move 4

add 5
store 6

stop

 

 

Operacja [LR] 

RBA 

 

W tej operacji zawartość licznika rozkazów LR jest przesłana do rejestru 
buforowego pamięci operacyjnej RBA. Odbywa się to pod wpływem 
sygnałów sterujących wysyłanych z układu sterującego, a ściślej jego 
generatora sygnałów. 

background image

Kod

operacji

Adres

Dekoder

Generator

sygnałów

Selektor

±

1

1

RR

LR

0

A

ALU

0

0

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3
4

10

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

RBD

RBA

Zawartość

move 4

add 5
store 6

stop

 

 

Operacja [LR] + 1 

 LR 

 

Jako następna operacja jest wykonany następnik na zawartości licznika 
rozkazów LR. W ten sposób LR zawiera adres potencjalnego następnego 
rozkazu do wykonania. O ile pobrany rozkaz nie zmieni zawartości LR, to 
zawartość LR postała w wyniku operacji następnika będzie adresem 
następnego rozkazu. W naszym przypadku będzie to adres 1. Operacja 
następnika na LR w fazie pobierania rozkazu jest charakterystyczną cechą 
komputera o modelu von Neumana. 

background image

Kod

operacji

Adres

Dekoder

Generator

sygnałów

Selektor

±

1

0

RR

LR

0

A

ALU

0

Warunki

T

ak

to

w

an

ie

Nr komórki

1
2
3
4

10

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

0

RBD

RBA

M

ov

e 4

Zawartość

move 4

add 5
store 6

stop

 

 

Operacja [P (RBA)] 

RBD 

 

Kolejna operacja w fazie pobrania rozkazu jest odczyt komórki pamięci o 
adresie zawartym w RBA do rejestru buforowego RBD. Generator sygnałów 
sterujących podaje wtedy do układu sterowania pamięcią sygnał „odczyt 
pamięci” (ang. memory read). Po odczycie, rejestr RBD zawiera rozkaz 
„move 4”. 

background image

 

Move

4

Dekoder

Generator

sygnałów

Selektor

±

1

1

RR

LR

0

A

ALU

0

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3
4

10

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

RBD

RBA

M

ov

e 4

Zawartość

move 4

add 5
store 6

stop

 

 

Operacja [RBD] 

 RR 

 

Następna operacja polega na przepisaniu zawartości rejestru RBD do rejestru 
rozkazów RR. Pole „Kod operacji” rejestru RR zawiera kod binarny rozkazu 
„move” a pole adresowe „Adres” zawiera liczbę binarną 4. Ta operacja 
kończy fazę pobrania pierwszego rozkazu naszego programu. Następna faza 
cyklu rozkazu to faza wykonania. 

background image

Faza wykonania rozkazu 

 

Move

4

Dekoder

Generator

sygnałów

Selektor

±

1

1

RR

LR

0

A

ALU

0

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3
4

10

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

RBD

RBA

M

ov

e 4

Zawartość

move 4

add 5
store 6

stop

 

 

Dekodowanie rozkazu „move 4”  

 

Faza wykonania rozkazu rozpoczyna się od zdekodowania rozkazu a ściślej 
od zdekodowania pola „Kod operacji” rejestru RR.  

Generator sygnałów sterujących wysyła sygnały, który otwierają: 

1) drogę z pola „kod operacji rejestru RR do Dekodera rozkazów  

2) drogę z Dekodera rozkazów do Generatora sygnałów sterujących 

background image

 

 

Te dwie drogi w układzie sterującym pozostaną otwarte już do końca 
wykonania rozkazu.  

Dekoder rozkazów podaje na wejście Generatora sygnałów sygnały 
odpowiadające kodowi „move”.  

Sygnały z dekodera są kombinowane logicznie w Generatorze sygnałów z 
sygnałami zegarowymi Taktowanie.  

W wyniku kombinacji logicznej powstają sygnały sterujące, które w 
kolejnych chwilach czasowych są wysyłane do wszystkich układów 
komputera, aby umożliwić tam wykonanie odpowiednich operacji 
składających się na wykonanie rozkazu „move”.  

Część tych sygnałów jest wysyłana z powrotem do układu zegarowego, aby 
wytwarzał sygnały „Taktowanie” odpowiednie dla rozkazu „move”. 

background image

 

Move

4

Dekoder

Generator

sygnałów

±

1

1

RR

LR

0

A

ALU

4

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3
4

10

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

RBD

RBA

M

ov

e 4

Selektor

Zawartość

move 4

add 5
store 6

stop

 

 

[RR (Adres)] 

 RBA 

 

Następuje obecnie przesłanie zawartości pola adresowego „Adres” rejestru 
rozkazów RR do rejestru buforowego adresu pamięci RBA. Liczba binarna 4 
znajdzie się w RBA aby posłużyć w następnym takcie czasowym do wybrania 
komórki pamięci dla odczytu określonego w rozkazie „move”.  

background image

 

 

Przy przesłaniu zawartości pola „Adres” z rejestru RR następuje 
wykorzystanie tylko części linii wewnętrznej szyny danych.  

Na wyjściu z wewnętrznej szyny danych do zespołu rejestrów znajduje się 
układ Selektor, który otwiera drogę do potrzebnego rejestru, w tym przypadku 
rejestru RBA.  

Operacją sterują odpowiednie sygnały z Generatora sygnałów sterujących.  

W przypadku np. rozkazu „jump” lub „call” układ Selektor otworzyłby drogę 
z pola „Adres” rejestru RR do licznika rozkazów LR. 

background image

Move

4

Dekoder

Generator

sygnałów

Selektor

±

1

1

RR

LR

0

A

ALU

4

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

4

10

RBD

RBA

10

Zawartość

move 4

add 5
store 6

stop

 

 

Operacja [P (RBA)] 

 RBD 

 

Nastepuje taraz odczyt z pamięci słowa o adresie 4 wskazanym przez rejestr 
buforowy adresu RBA i wpisanie tego słowa do rejestru buforowego danych 
pamięci RBD.  

Generator sygnałów sterujących wysyła do pamięci sygnał „odczyt pamięci” 
oraz sygnał otwierający zewnętrzną szynę danych do rejestru RBD. 

W ten sposób dana binarna 10 znajdzie się w rejestrze RBD. 

background image

 

Move

4

Dekoder

Generator

sygnałów

Selektor

±

1

1

RR

LR

10

A

ALU

0

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3
4

10

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

RBD

RBA

10

Zawartość

move 4

add 5
store 6

stop

 

 

Operacja [RBD] 

 A 

 

Następna operacja to przesłanie poprzez wewnetrzną szynę danych zawartości 
rejestru RBD do rejestru akumulatora A. Ta operacja kończy wykonanie 
rozkazu „move 4”. 

background image

 

Generator sygnałów sterujących wyśle teraz sygnały sterujące, które 
spowodują pobranie do rejestru rozkazów RR następnego rozkazu do 
wykonania.  

Jest to rozkaz „add 5”. Jego adres 1 czeka już w liczniku rozkazów LR.  

Pobranie składać się będzie z takich samych operacji jak pobranie rozkazu 
„move 4” ale dotyczyć będzie innego adresu pobranego z licznika rozkazów 
LR. 

Operacje te są następujące: 

[LR] 

 RBA 

[LR] + 1 

 LR 

[P (RBA)] 

 RBD 

[RBD] 

 RR 

background image

 

 

Po odczycie z pamięci rozkaz „add 5” znajdzie się w rejestrze rozkazów RR.  

Pole „Kod operacji” rozkazu „add 5” zawiera więc kod binarny „add”  

Pole „Adres” zawiera liczbę binarną 5.  

Jednocześnie w liczniku rozkazów LR mamy adres następnego rozkazu do 
wykonania, liczbę binarną 2. 

background image

 

Wykonanie rozkazu „add 5” 

 

Pomijamy rysunek przedstawiający otwarcie dekodera na dekodowanie części 
operacyjnej rozkazu „add 5”. 

Rozkaz „add 5” ma dodać zawartość rejestru akumulatora do zawartości 
komórki pamięci o adresie 5 i zapisać wynik w akumulatorze. 

background image

 

Add

5

Dekoder

Generator

sygnałów

Selektor

±

1

2

RR

LR

10

A

ALU

5

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3
4

10

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

RBD

RBA

Ad

d 5

Zawartość

move 4

add 5
store 6

stop

 

  

Operacja [RR(Adres)] 

 RBA 

 

Rysunek przedstawia pierwszą po zdekodowaniu rozkazu operację, która 
składa się na wykonanie „add 5”. Jest to przesłanie adresu 5 z pola „Adres” 
rejestru rozkazów RR do rejestru buforowego adresu RBA. 

background image

Add

5

Dekoder

Generator

sygnałów

Selektor

±

1

2

RR

LR

10

A

ALU

5

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3
4

10

6

0

Dekoder

adresu

Sterowanie

pamięcią

5

20

RBD

RBA

20

Zawartość

move 4

add 5
store 6

stop

 

 

Operacja [P(5)] 

 RBD 

 

Kolejna operacja to odczyt słowa pamięci spod adresu 5 do rejestru 
buforowego danych RBD przez zewnętrzną .szynę danych. Generator 
sygnałów sterujących generuje sygnał „odczyt pamięci” i otwiera wyjście z 
pamięci na szynę i wyjście z szyny do rejestru RBD. RBD zawiera po tej 
operacji dana binarną 20. 

background image

Add

5

Dekoder

Generator

sygnałów

Selektor

±

1

2

RR

LR

10

A

ALU

5

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3
4

10

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

RBD

RBA

20

Zawartość

move 4

add 5
store 6

stop

 

 

Operacja {[A], [RBD]} 

 ALU 

 

Następuje teraz dodanie danych w jednostce arytmetyczno-logicznej ALU. 
Zauważmy, że akumulator zawiera daną 10 pobrana w poprzednim rozkazie. 

Generator sygnałów sterujących wysyła sygnały, które otwierają wyjście z 
rejestru A oraz wyjście z RBD na wewnętrzną szynę danych i wejścia ALU. 
Sygnały te trwają tak długo, jak długo trwa operacja dodawania w sumatorze 
ALU. 

background image

 

Add

5

Dekoder

Generator

sygnałów

Selektor

±

1

2

RR

LR

30

A

ALU

5

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3
4

10

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

RBD

RBA

20

Zawartość

move 4

add 5
store 6

stop

 

 

Operacja [ALU] 

 A i wpisanie warunków 

 
Gdy wynik dodawania jest gotowy, następuje zamknięcie dostępu do wejść 
ALU ze strony wyjścia z rejestru A i wewnętrznej szyny danych oraz 
zamknięcie wyjścia z rejestru RBD na wewnętrzną szynę danych.  

W tej samej chwili następuje otwarcie wyjścia ALU na wewnętrzną szynę 
danych i wejścia z tej szyny do rejestru akumulatora A.  

background image

Otwarcie wejścia do A trwa tylko tak długo jak to jest potrzebne do zapisania 
w nim wyniku z ALU.  

Wynik z ALU utrzymuje się jeszcze stabilnie przez ten czas, ze względu na 
opóźnienie reakcji ALU na stan swoich wejść spowodowane propagacją 
sygnałów u układach logicznych.  

Jednocześnie z wpisaniem wyniku z ALU do A, zostają wpisane wyniki 
testów wyniku ALU do rejestru warunków - Warunki. Ta operacja kończy 
wykonanie rozkazu „add 5”.  

Przed pobraniem następnego rozkazu, bit „Nadmiar ALU” rejestru warunków 
jest analizowany w Generatorze sygnałów sterujących.  

• 

Jeśli wystąpił nadmiar ALU wykonywanie programu jest przerywane i 
pobierany jest rozkaz programu obsługi przerwania wewnętrznego 
(wyjątku), który sygnalizuje użytkownikowi błąd arytmetyczny. Generator 
sygnałów sterujących emituje niezbędne dla tego sygnały sterujące. 

• 

Jeśli nadmiar ALU nie wystąpił, następuje pobranie następnego rozkazu 
naszego programu. Jest to rozkaz „store 6” zapisany w pamięci pod adresem 
2. Pobranie zostaje dokonane w znany już nam sposób, zgodnie z 
zawartością licznika rozkazów LR równą 2. 

background image

 

Wykonanie rozkazu „store 6” 

 

Podobnie jak przy poprzednim rozkazie nie rysujemy rysunku dekodowania 
rozkazu.  

Po pobraniu rozkazu pole „kod operacji rejestru RR zawiera kod „store” a 
pole „Adres” RR zawiera liczbę 6.  

Rozkaz „store 6” ma zapisać do komórki pamięci o adresie 6 zawartość 
rejestru akumulatora A.  

 

background image

Store

6

Dekoder

Generator

sygnałów

±

1

3

RR

LR

30

A

ALU

6

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3
4

10

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

RBD

RBA

S

to

re

 6

Selektor

Zawartość

move 4

add 5
store 6

stop

 

 

Operacja [RR (Adres)] 

 RBA 

 

Pierwszą operacją po zdekodowaniu rozkazu jest przesłanie zawartości pola 
„Adres” rejestru RR do rejestru buforowego adresu RBA. W ten sposób adres 
binarny 6  potrzebny dla wykonania rozkazu „store” znajdzie się w RBA. 

background image

Store

6

Dekoder

Generator

sygnałów

Selektor

±

1

2

RR

LR

30

A

ALU

6

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3
4

10

5

20

6

0

Dekoder

adresu

Sterowanie

pamięcią

RBD

RBA

30

Zawartość

move 4

add 5
store 6

stop

 

 

Operacja [A] 

 RBD 

 

Następna operacja jest przesłanie zawartości rejestru A do rejestru 
buforowego danych RBD, aby można było wyprowadzić te zawartość na 
zewnętrzna szynę danych wiodąca do pamięci operacyjnej. W ten sposób 
liczba 30 znajdzie się w RBD. 

background image

Store

6

Dekoder

Generator

sygnałów

Selektor

±

1

2

RR

LR

30

A

ALU

6

Warunki

T

ak

to

w

an

ie

Nr komórki

0
1
2
3
4

10

5

20

6

30

Dekoder

adresu

Sterowanie

pamięcią

RBD

RBA

30

Zawartość

move 4

add 5
store 6

stop

 

 

Operacja [RBD] 

 P (RBA) 

 

Ostatnią operacją składową rozkazu „store 6” jest zapis danej 30 z rejestru 
buforowego danych do komórki pamięci o adresie 6 wskazywanej przez 
zawartość rejestru RBA.  

Generator sygnałów sterujących podaje do układu sterowania pamięcią sygnał 
„zapisz pamięć” oraz otwiera drogi (szynę adresową i danych) dla przesłania 
adresu z rejestru RBA oraz danych z rejestru RBD. 

background image

 

Potokowe wykonywanie operacji obliczeniowych 

 

Potokowe przetwarzanie danych (ang. pipelined processing) polega na 
zorganizowaniu wykonywania operacji w komputerze, w sposób podobny do 
wytwarzania produkowania wyrobów w fabryce przy pomocy taśmy 
produkcyjnej. 

Taśma produkcyjna (ang. production pipeline) jest to urządzenie, które 
przesuwa wytwarzane produkty między kolejnymi stanowiskami, na których 
wykonywane są kolejne składowe operacje na produktach potrzebne do 
wytworzenia całego wyrobu.  

Stanowiska są ustawione w szereg wzdłuż taśmy w kolejności odpowiadającej 
kolejnym fazom procesu produkcyjnego.  

background image

 

Przed każdym przesunięciem taśmy na jej początek wstawia się kolejny 
nieobrobiony przez taśmę produkt inicjalny (mogą to być surowce lub produkt 
w stanie inicjalnym).  

Produkt jest przesuwany następnie przez wszystkie stanowiska robocze.  

Na każdym stanowisku produkt jest wzbogacany o wyniki wykonanych na 
nim odpowiednich operacji.  

Po przejściu przez wszystkie stanowiska produkt zamienia się w gotowy 
wyrób.  

Czas wykonania operacji na wszystkich stanowiskach na taśmie jest w 
przybliżeniu taki sam.  

W czasie między kolejnymi przesunięciami taśmy, muszą zakończyć się 
operacje na wszystkich stanowiskach, by taśma mogła być przesunięta o jedno 
stanowisko w kierunku ostatniej operacji w procesie produkcyjnym.  

Podczas pracy taśmy produkcyjnej na której jest n stanowisk, obrabianych jest 
jednocześnie n produktów. 

background image

 

 

Po każdym przesunięciu taśmy schodzi z niej gotowy produkt, o ile na 
początek taśmy stale podawane są produkty w stanie inicjalnym.  

Przy produkcji taśmowej na n stanowiskach, szybkość uzyskiwania 
gotowych wyrobów jest n razy większa
 w porównaniu z taką organizacją 
produkcji, gdzie nie ma przesuwającej się taśmy a cały wyrób jest 
wytwarzany od początku do końca na jednym stanowisku. 

background image

 

W informatyce taśmowe wykonywanie operacji obliczeniowych jest 
nazywane przetwarzaniem potokowym

Aby operacje obliczeniowe mogły być wykonywane w sposób potokowy 
musimy zbudować układ wykonawczy, który będzie działał podobnie jak 
taśma produkcyjna. 

 

background image

 

W celu zaprojektowania potokowego wykonania danej operacji obliczeniowej 
należy: 

• 

podzielić operację obliczeniową na pewną liczbę n operacji składowych, 
wykonywanych sekwencyjnie - jedna po drugiej, takich, że czas wykonania 
wszystkich operacji składowych jest w przybliżeniu identyczny, 

• 

zbudować dla każdej operacji składowej odrębny układ wykonawczy – tzw. 
stopień potoku (ang. pipeline stage)

• 

połączyć stopnie potoku w taki sposób, aby wyjście z poprzedniego stopnia 
było podawane na wejście następnego stopnia, 

• 

zbudować układ synchronizacji przekazywania danych między stopniami, 
aby dane przekazywane były między wszystkimi stopniami jednocześnie, w 
odstępach czasu równych czasowi wykonania operacji składowych, 
zwanych taktami potoku,  

background image

 

• 

zapewnić, aby w chwili przekazywania danych miedzy stopniami na 
wejście pierwszego stopnia podawane były nowe argumenty operacji 
obliczeniowej, 

• 

odbierać co każdy takt wyniki z ostatniego stopnia potoku, stanowiące 
wyniki wykonania całej operacji obliczeniowej. 

background image

 

Rzadko udaje się 

podzielić operacje obliczeniową 

na dokładnie równe

 

czasowo operacje składowe.  

Dlatego, między stopniami potoku wstawia się układy buforowe, do których 
wpisuje się wyniki działania stopni (patrz rysunek poniżej po prawej stronie).  

Każdy układ buforowy stanowi układ dwu rejestrów: rejestru wyjściowego 
stopnia poprzedniego i rejestru wejściowego stopnia następnego.  

Rejestr wyjściowy służy do asynchronicznego zapamiętania wyniku stopnia 
poprzedniego.  

Rejestry w obrębie jednego bufora są połączone ze sobą równolegle, w taki 
sposób, że co takt potoku następuje przepisanie zawartości rejestru 
wyjściowego do wejściowego.  

Przepisanie następuje we wszystkich buforach równocześnie, co zapewnia 
układ sterowania potoku.  

background image

Wyznacza się najdłuższy czas wykonania operacji wśród wszystkich stopni, 
włączając w to zapis wyniku stopnia do wyjściowego rejestru buforowego i 
ten czas przyjmuje się za długość taktu potoku. 

Wyniki działania stopni przekazuje się ze wszystkich buforów na wejście 
następnego stopnia w odstępach czasu równych przyjętemu taktowi potoku, 
równemu najdłuższemu czasowi działania stopnia.  

Pojedyncze rejestry buforowe umieszcza się również na wejściu pierwszego 
stopnia i wyjściu ostatniego stopnia potoku.  

Tak zbudowany potok pozwala na wykonanie przetwarzania potokowego 
również dla operacji, które nie dają się podzielić na dokładnie równe czasowo 
operacje składowe. 

background image

Struktura potoku dla wykonania operacji obliczeniowej 

Stopień 1 (operacja 1)

bufor 1

Stopień 2 (operacja 2)

bufor 2

Stopień n-1 (operacja n-1)

bufor n-1

Stopień n (operacja n)

rejestr we

rejestr wy

Sterowanie
przesłaniem danych
między stopniami

       

background image

Budowa bufora między stopniami potoku 

 

Rejestr buforowy  wy

Rejestr buforowy  we

Do następnego stopnia

Z poprzedniego stopnia

Sterowanie
przesłaniem danych
między stopniami

 

background image

 

 

Łatwo zauważyć, że przez n-1 – pierwszych taktów działania potoku na 
wyjściu potoku nie pojawi się żaden wynik.  

Pierwszy wynik operacji pojawi się po n-tym takcie i odtąd po każdym takcie 
będziemy odbierać wynik operacji obliczeniowej.  

Pomijając początkowe opóźnienie, 

potok obliczeniowy zawierający n stopni 

przyspiesza więc wykonanie operacji obliczeniowej n–krotnie

 

background image

 

Potokowe wykonywania rozkazów 

 

Ideę przetwarzania potokowego można z powodzeniem zastosować do 
wykonania rozkazów w procesorze. 

 

Jak wiadomo cykl wykonawczy rozkazu można podzielić na następujące 
operacje składowe: 

• 

Pobranie rozkazu 

• 

Zdekodowanie rozkazu 

• 

Wyznaczenie adresu argumentów 

• 

Pobranie argumentów 

• 

Wykonanie operacji 

• 

Zapis wyników do pamięci 

background image

 

 

Sprzęt wykonawczy komputera możemy zbudować w ten sposób, że każda z 
podanych operacji składowych cyklu rozkazu będzie wykonana przez odrębny 
układ wykonawczy. 

Układ ten jest wstawiony jako stopień do potoku wykonania rozkazu, jak 
pokazano na rysunku poniżej.  

 

Założymy, że takt potoku ustalimy równy czasowi wykonania najdłuższej z 
powyższych operacji składowych.  

Między stopniami potoku wstawimy buforowe układy pamiętające, które będą 
przechowywać wyniki wykonania stopnia poprzedniego jako wejście dla 
stopnia następnego. 

Na wejście potoku będziemy podawać adresy kolejne rozkazy programu 
wykonywanego przez procesor. 

background image

Stopnie potoku wykonującego rozkazy komputera 

 

Pobranie rozkazu

Zdekodowanie rozkazu

Wyznaczenie adresu arg.

Pobranie argumentu

Wykonanie rozkazu

Zapis wyniku

adres rozkazu

 

background image

 

W kolejnych taktach potoku coraz to nowe adresy rozkazów będą 
wprowadzane do pierwszego stopnia potoku i pobierane będą z pamięci 
operacyjnej kolejne rozkazy programu.  

Po 6-tym takcie potoku otrzymamy wykonanie pierwszego rozkazu programu 
i po każdym następnym takcie będziemy mięć wykonany kolejny rozkaz 
programu, o ile potok będzie pracował bez przestojów - tzn. każdy stopień 
potoku będzie miał w każdym takcie gotowe dane wejściowe .  

Potok wykonania rozkazów zawierający 6 stopni, pracujący bez przestojów,  
przyspiesza wykonanie programu 6-ciokrotnie.  

Dzieje się tak dlatego, że przy pomocy potoku 

wykonanie programu zostaje 

zrównoleglone

.  

Każdy stopień potoku pracuje dla innego rozkazu

.  

background image

 

Wykonanie potokowe rozkazów 

 

2

2

2

2

2

2

3

4

5

6

7

8

3

4

5

6

7

3

4

5

6

3

4

5

3

4

3

1

1

1

1

1

1

1

2

3

4

5

6

7

8

nr rozkazu

takty zegara

Stopnie potoku:

pobranie rozkazu

zdekodowanie rozkazu

wyznaczenie adresu operandów

pobranie argumentów

wykonanie operacji rozkazu

zapis wyniku

 

background image

 

 

Przy wykonywaniu programów metodą potokową

 

występują problemy

 z 

wykonaniem pewnych typów rozkazów oraz z wykonaniem programów o 
pewnych strukturach  następstwa rozkazów.  

Rozkazy te powodują tzw. przestoje w potoku, z powodu braku danych na 
wejściu stopni potoku.  

Brak danej wejściowej uniemożliwia pracę danego stopnia, brak wyniku do 
przesłania do następnego stopnia a w konsekwencji, z pewnym opóźnieniem, 
brak wyniku na wyjściu potoku.  

Jeśli brak danych wejściowych trwa więcej niż jeden takt, powoduje to 
zatrzymanie pracy całego potoku (jego końcowego stopnia) na tyle taktów, dla 
ilu brak było danych wejściowych. 

background image

 

Problem rozkazów skoku 

 

Pierwszym typem rozkazów, które powodują przestoje w potoku wykonania 
rozkazów są rozkazy skoku.  

Wynikiem rozkazu skoku jest wprowadzenie do licznika rozkazów adresu 
następnego rozkazu do wykonania tj. adresu wytworzonego (lub zawartego) w 
tym rozkazie.  

background image

Przykład 

 

0

1

2

3

4

5

6

7

8

9 10 11 12 13

rozkaz skoku

r

1

r

2

r

3

r

4

r

5

r

6

czas

                      

Pobranie rozkazu

Zdekodowanie rozkazu

Wyznaczenie adresu arg.

Pobranie argumentu

Wykonanie rozkazu

Zapis wyniku

adres rozkazu

 

 

Dla pobrania rozkazu R

4

, jego adres powinien znaleźć się w liczniku 

rozkazów już w chwili 3. Natomiast rozkaz skoku R

3

 dostarczy ten adres 

dopiero w chwili 8. Tak więc, pierwszy stopień potoku nie będzie mógł 
pracować w chwilach od 3 do 7, powodując w konsekwencji przestoje 
dalszych stopni potoku i brak wyników na wyjściu potoku. 

background image

 

 

Sytuację tę można poprawić w trakcie kompilacji programu

Kompilator umieszcza w programie za rozkazem skoku odpowiedniej liczby 
rozkazów „nic nie rób”, które zastepuje nastepnie rozkazami obliczeniowymi 
obojętnymi z punktu widzenia miejsca ich wykonania w programi. 

W ten sposób lukę w ciągłej pracy potoku może być wypełniona. 

Metoda ta nosi nazwę opóźnionych skoków (ang. delayed branches).  

 

background image

 

Problem wzajemnej zależności kolejnych rozkazów  

Inna sytuacją w programie, w której potok zostaje wstrzymany jest 
bezpośrednia zależność kolejnych rozkazów ze względu na dane.  

Dzieje się tak, gdy następny rozkaz wykonuje operację na wyniku 
poprzedniego. 

Przykład 

 

M (125) = M (125) + R1       (ADD) 

R2 := R2 

 M (125)                (MUL) 

 

gdzie: ADD, MUL oznacza rozkazy dodaj, pomnóż; 

M(125), R1, R2 oznaczają odpowiednio zawartości: komórki pamięci o 
adresie 125, rejestru R1, rejestru R2. 

background image

 

0

1

2

3

4

5

6

7

8

9 10 11 12 13

ADD

r

1

r

2

r

3

r

4

r

5

czas

MUL

Przestój potoku
z powodu braku
danej M (125)
wytworzonej
przez ADD

                       

Pobranie rozkazu

Zdekodowanie rozkazu

Wyznaczenie adresu arg.

Pobranie argumentu

Wykonanie rozkazu

Zapis wyniku

adres rozkazu

 

 

Przestój potoku w wyniku zależności sąsiednich instrukcji  

 

Na rysunku wykonania programu powyżej, widzimy przerwę długości 2 
taktów potoku w wykonywaniu instrukcji MUL z powodu braku wyliczonego 
i odesłanego do pamięci wyniku dodawania ADD.  

background image

 

Przerwa ta może być wypełniona przez wykonanie dwu obojętnych instrukcji 
obliczeniowych, wstawionych przez kompilator do programu bezpośrednio po 
instrukcji ADD. 

 

 

Podsumowanie 

 

Na wstępie wykładu omówiono organizację cyklu wykonania rozkazów w 
komputerze o modelu architekturalnym von Neumana. W wykładzie 
przedstawiono sposób wykonywania rozkazów w prostym programie. 
Następnie przedstawiono zasady potokowego wykonywania operacji w 
komputerach. W ostatniej części wykładu, omówiono metody potokowego 
wykonywania rozkazów w programach komputerowych. 

Przedstawiono problemy związane z uzyskaniem pełnej wydajności potoku 
rozkazowego. 

background image

 

Spis literatury do wykładu 

 

1. Organizacja i architektura komputerów, B.S. Chalk, WNT, 1996, 

2. Podstawy budowy i działania komputerów, A. Skorupski,  WKŁ, 2000. 

3. Architektura komputerów, J. Biernat, Oficyna Wydawnicza Politechniki  

Wrocławskiej, 1999. 

4. Organizacja i architektura systemu komputerowego, W. Stallings, WNT, 

2000.