Cykl rozkazowy krok po kroku: jednostka sterująca, ALU i rejestry oraz to, co naprawdę dają taktowanie, liczba rdzeni i architektura 64-bitowa.
Procesor wykonuje instrukcje programu – to jednostka, która faktycznie liczy. Składa się z kilku bloków. Jednostka arytmetyczno-logiczna wykonuje działania i porównania. Jednostka sterująca pobiera rozkazy i decyduje, co ma się wydarzyć. Rejestry to maleńkie, najszybsze komórki na dane w bieżącej obróbce.
Praca procesora to powtarzanie tego samego cyklu: pobierz rozkaz, zdekoduj go, wykonaj, zapisz wynik. Cykl powtarza się miliardy razy na sekundę.
Wydajność zależy od kilku parametrów naraz. Taktowanie w gigahercach mówi, ile cykli przypada na sekundę. Liczba rdzeni określa, ile instrukcji może być wykonywanych równolegle. Pamięć podręczna zmniejsza czas oczekiwania na dane.
Zanim zacznie się porównywać procesory, warto mieć w głowie trzy zdania, które porządkują cały temat:
Sercem pracy procesora jest cykl rozkazowy – ta sama sekwencja czynności powtarzana dla każdej instrukcji programu. Zaczyna się od pobrania rozkazu: jednostka sterująca patrzy do rejestru zwanego licznikiem rozkazów, który przechowuje adres kolejnej instrukcji, i po magistrali ściąga ją z pamięci do rejestru rozkazu. Potem następuje dekodowanie – układ sterujący rozpoznaje, jaka to operacja i skąd wziąć argumenty. Dopiero wtedy dane wędrują z pamięci do rejestrów, ALU wykonuje działanie, a wynik jest zapisywany tam, gdzie każe rozkaz. Na końcu licznik rozkazów przesuwa się dalej i wszystko zaczyna się od nowa. Skok, warunek i pętla nie są osobnym mechanizmem – to rozkazy, które zamiast przesunąć licznik o krok, wpisują do niego inny adres.
Taktowanie to rytm, w jakim ten cykl postępuje. Zegar wysyła impulsy, a każdy impuls pozwala układom przejść do kolejnego stanu. Więcej impulsów na sekundę to więcej kroków na sekundę – ale krok krokowi nierówny. Ile pracy mieści się w jednym takcie, zależy od konstrukcji procesora, więc porównywanie samych gigaherców ma sens tylko w obrębie jednej rodziny.
Rdzeń to kompletny procesor: własna jednostka sterująca, własne ALU, własne rejestry. Procesor wielordzeniowy to kilka takich zestawów w jednej obudowie, więc może naprawdę równolegle prowadzić kilka cykli rozkazowych naraz. Zysk nie jest jednak automatyczny: żeby cztery rdzenie policzyły coś cztery razy szybciej, program musi dać się podzielić na niezależne części. Program napisany jako jeden ciąg kroków wykona się na jednym rdzeniu, a pozostałe będą w tym czasie robiły coś innego albo nic. Tym, który rdzeń dostanie który program, zajmuje się system operacyjny.
Architektura 32 albo 64 bity to szerokość słowa, czyli porcji danych obrabianej jednorazowo, oraz szerokość adresu. Adres jest numerem komórki pamięci, więc liczba jego bitów wyznacza, ile komórek da się w ogóle ponumerować: przy 32 bitach jest to 2 do potęgi 32, czyli 4 294 967 296 bajtów – dokładnie 4 GB. Stąd limit pamięci w systemach 32-bitowych. Architektura 64-bitowa ten sufit odsuwa, ale nie przyspiesza sama z siebie programu, który ani nie potrzebuje dużej pamięci, ani nie liczy na wielkich liczbach.
Zostaje pamięć podręczna. Procesor pracuje szybciej, niż pamięć operacyjna jest w stanie podawać dane, więc bez bufora spędzałby znaczną część cykli na czekaniu. Cache to niewielka pamięć tuż przy rdzeniach, w której lądują dane i rozkazy ostatnio pobrane oraz te, po które procesor prawdopodobnie sięgnie za chwilę. Czym cache jest jako rodzaj pamięci i jak wygląda hierarchia od rejestrów po dysk, opisuje hasło o rodzajach pamięci; tutaj wystarczy odpowiedź na pytanie „po co": żeby procesor nie czekał.
| Element | Stan przed wykonaniem rozkazu |
|---|---|
| Rozkaz do wykonania | dodaj zawartość komórek o adresach 100 i 101, wynik zapisz w komórce 102 |
| Licznik rozkazów | wskazuje adres, pod którym leży ten rozkaz |
| Komórka pamięci 100 | 7 |
| Komórka pamięci 101 | 5 |
| Komórka pamięci 102 | 0 |
| Rejestry robocze | puste – żadna z tych liczb nie jest jeszcze w procesorze |
| Faza | Co się dzieje | Co bierze w tym udział |
|---|---|---|
| 1. Pobranie rozkazu | jednostka sterująca odczytuje z pamięci rozkaz spod adresu wskazanego przez licznik rozkazów i wpisuje go do rejestru rozkazu | licznik rozkazów, magistrala, rejestr rozkazu |
| 2. Dekodowanie | układ sterujący rozpoznaje, że to dodawanie, i ustala, że argumenty leżą pod adresami 100 i 101, a wynik ma trafić pod adres 102 | jednostka sterująca, dekoder rozkazu |
| 3. Pobranie danych | z pamięci operacyjnej wędrują do rejestrów wartości 7 oraz 5 – ALU nie umie liczyć na danych leżących w pamięci | pamięć operacyjna, magistrala, rejestry robocze |
| 4. Wykonanie w ALU | jednostka arytmetyczno-logiczna dodaje 7 i 5, wynik 12 zostaje w rejestrze, a rejestr znaczników zapamiętuje cechy wyniku, na przykład że nie jest zerem | jednostka arytmetyczno-logiczna, rejestr wyniku, rejestr znaczników |
| 5. Zapis wyniku | liczba 12 jedzie z rejestru po magistrali do komórki o adresie 102 i nadpisuje jej dotychczasową zawartość | rejestr wyniku, magistrala, pamięć operacyjna |
| 6. Przejście dalej | licznik rozkazów wskazuje kolejną instrukcję i cały cykl zaczyna się od początku – chyba że rozkazem był skok, który wpisuje do licznika inny adres | licznik rozkazów, jednostka sterująca |
Więcej gigaherców zawsze znaczy szybciej. Taktowanie mówi, ile taktów przypada na sekundę, a nie ile pracy mieści się w takcie. Dwa procesory z różnych rodzin mogą przy tej samej liczbie gigaherców różnić się wydajnością w obie strony, bo jeden w jednym takcie kończy operację, na którą drugi potrzebuje kilku. Bezpieczna reguła do zapisania w odpowiedzi brzmi: taktowanie porównuje się w obrębie tej samej rodziny procesorów, a poza nią jest jedną z kilku informacji, nie werdyktem.
Rdzeń, wątek i procesor to trzy różne rzeczy. Rdzeń to fizyczny komplet układów wykonawczych wewnątrz procesora – układ czterordzeniowy ma cztery takie komplety, ale nie jest czterema procesorami, bo dzielą one obudowę, gniazdo i część pamięci podręcznej. Wątek to pojęcie z poziomu programu: ciąg instrukcji, który da się wykonywać niezależnie od innych. Wątków bywa w systemie znacznie więcej niż rdzeni i wtedy nie działają one równocześnie, tylko na przemian, bo system przydziela im kolejne odcinki czasu.
Architektura 64-bitowa sama z siebie przyspiesza każdy program. Szerokość słowa daje przewagę tam, gdzie jest faktycznie potrzebna: przy adresowaniu pamięci powyżej limitu 4 GB i przy działaniach na dużych liczbach, które w trybie 32-bitowym trzeba składać z kawałków. Edytor tekstu ani przeglądarka zdjęć nie robią ani jednego, ani drugiego. Bity architektury nie są też stopniem wydajności, którym da się porównać dwa procesory – to informacja o tym, jak szerokimi porcjami procesor operuje i jakie wersje systemu oraz programów da się na nim uruchomić.
Procesor ma wykonać jeden rozkaz. Stan przed jego wykonaniem wygląda tak:
| Element | Zawartość |
|---|---|
| Rozkaz | dodaj zawartość komórek 200 i 201, wynik zapisz w komórce 202 |
| Komórka 200 | 9 |
| Komórka 201 | 4 |
| Komórka 202 | 0 |
Odpowiedz na pytania o przebieg tego cyklu:
| Pytanie | Odpowiedź |
|---|---|
| Jaka liczba znajdzie się w komórce 202 po wykonaniu rozkazu? | |
| Ile razy procesor sięga do pamięci po argumenty tego dodawania? | |
| Który blok procesora wykonuje samo dodawanie? Podaj trzyliterowy skrót | |
| Który blok pobiera rozkaz i rozpoznaje, co on oznacza? Wpisz: jednostka | |
| Jak nazywa się rejestr przechowujący adres kolejnego rozkazu? | |
| Która faza cyklu następuje bezpośrednio po pobraniu rozkazu? |
Zanim ALU cokolwiek doda, oba argumenty muszą trafić z pamięci do , a gotowy wynik wraca z procesora do .
Nie. Porównanie ma sens tylko w obrębie tej samej rodziny procesorów. Nowsza konstrukcja wykonuje więcej pracy w jednym cyklu, więc może wygrywać mimo niższego taktowania. Na czas wykonania wpływają też liczba rdzeni i pamięć podręczna: procesor czekający na dane marnuje takty, choć zegar tyka tak samo szybko.
Określa szerokość słowa, czyli porcji danych przetwarzanej jednorazowo, oraz szerokość adresu pamięci. Adres 32-bitowy pozwala ponumerować 2 do potęgi 32 komórek, czyli 4 294 967 296 bajtów – stąd znany limit 4 GB w systemach 32-bitowych. Architektura 64-bitowa ten limit odsuwa, ale programowi, który nie potrzebuje ani dużej pamięci, ani działań na wielkich liczbach, nic nie daje.
Bo pamięć operacyjna podaje dane wolniej, niż procesor potrafi je przetwarzać, więc bez bufora spędzałby dużą część taktów na czekaniu. Cache trzyma tuż przy rdzeniach dane i rozkazy ostatnio używane oraz sąsiadujące z nimi w pamięci – programy czytają ją zwykle fragmentami leżącymi obok siebie.
Rdzeń to sprzęt: kompletny zestaw układów wykonawczych wewnątrz procesora, zdolny prowadzić własny cykl rozkazowy. Wątek to pojęcie z poziomu programu: niezależny ciąg instrukcji do wykonania. Wątków jest w działającym systemie zwykle znacznie więcej niż rdzeni, więc większość z nich czeka na swoją kolej i wykonuje się na przemian, a nie równocześnie.
Nie. Kod maszynowy jest ciągiem rozkazów zapisanych w postaci, którą rozumie konkretna architektura procesora, więc plik przygotowany dla jednej nie uruchomi się na innej – potrzebna jest wersja skompilowana na nowo. Jak z tekstu programu powstaje kod maszynowy, opisuje hasło o drodze od kodu źródłowego do maszynowego.
Do tego hasła nie mamy jeszcze przypisanych pojedynczych zadań. Cały spis zadań maturalnych z tego działu jest tutaj:
Zagadnienia z tego samego obszaru matury – warto je powtórzyć razem: