dziedzictwo wcześniejszych projektów, takich jak silnik różnicowy Babbage ' a i systemy kart dziurkowanych mainframe z Lat 70., mają znaczący wpływ na dzisiejsze systemy komputerowe. W moim pierwszym artykule z tej historycznej serii, Computer history and modern computers for sysadmins, omówiłem kilka prekursorów współczesnego komputera i wymieniłem cechy, które definiują to, co dziś nazywamy komputerem.,
w tym artykule omówię central processing unit (CPU), w tym jego komponenty i funkcjonalność. Wiele tematów odnosi się do pierwszego artykułu, więc koniecznie przeczytaj go, jeśli jeszcze tego nie zrobiłeś.
jednostka centralna (CPU)
procesor w nowoczesnych komputerach jest ucieleśnieniem „młyna” w silniku różnicowym Babbage ' a. Termin jednostka centralna pochodzi od mgły czasu komputerowego, kiedy pojedyncza masywna szafka zawierała obwody wymagane do interpretacji instrukcji programu na poziomie Maszyny i wykonywania operacji na dostarczonych danych., Centralna jednostka przetwarzania wykonała również wszystkie przetwarzanie dla dołączonych urządzeń peryferyjnych. Urządzenia peryferyjne obejmowały drukarki, Czytniki kart i wczesne urządzenia pamięci masowej, takie jak bębny i dyski. Nowoczesne urządzenia peryferyjne mają znaczną ilość mocy obliczeniowej i odciążają niektóre zadania przetwarzania z procesora. Zwalnia to procesor z zadań wejścia/wyjścia, dzięki czemu jego moc jest stosowana do głównego zadania pod ręką.
wczesne komputery miały tylko jeden procesor i mogły wykonywać tylko jedno zadanie na raz.,
termin CPU zachowujemy dzisiaj, ale teraz odnosi się on do pakietu procesorów na typowej płycie głównej. Rysunek 1 przedstawia standardowy pakiet procesorów Intel.
Rysunek 1: Pakiet procesorów Intel Core i5 (dostępny w Wikimedia Commons, CC BY-SA 4.0).
naprawdę nie ma tu nic do zobaczenia poza samym pakietem procesorów. Pakiet procesora to układ zawierający procesor (- y) zamknięty (- E) w metalowym pojemniku i zamontowany na małej płytce obwodu drukowanego (PC)., Pakiet jest po prostu upuszczany na miejsce w gnieździe procesora na płycie głównej i zabezpieczony dźwignią blokującą. Chłodzenie procesora dołącza się do pakietu procesora. Istnieje kilka różnych fizycznych gniazd z określoną liczbą kontaktów, więc uzyskanie odpowiedniego pakietu pasującego do gniazda płyty głównej jest niezbędne, jeśli budujesz własne komputery.
jak działa procesor
przyjrzyjmy się procesorowi bardziej szczegółowo. Rysunek 2 to schemat koncepcyjny hipotetycznego procesora, dzięki któremu można łatwiej wizualizować komponenty., RAM i zegar systemowy są zacienione, ponieważ nie są częścią procesora i są pokazane tylko dla jasności. Ponadto nie są pobierane żadne połączenia między zegarem procesora a jednostką sterującą z komponentami procesora. Wystarczy powiedzieć, że sygnały z zegara i jednostki sterującej są integralną częścią każdego innego komponentu.
Rysunek 2: uproszczony schemat koncepcyjny typowego procesora.
Ten projekt nie wygląda szczególnie prosto, ale rzeczywistość jest jeszcze bardziej skomplikowana., Liczba ta jest wystarczająca do naszych celów, nie będąc zbyt złożonym.
Jednostka arytmetyczno-logiczna
Jednostka arytmetyczno-logiczna (ALU) wykonuje funkcje arytmetyczno-logiczne, które są pracą komputera. Rejestry A i B przechowują dane wejściowe, a akumulator odbiera wynik operacji. Rejestr instrukcji zawiera instrukcję, którą ALU ma wykonać.
na przykład, przy dodawaniu dwóch liczb, jedna liczba jest umieszczana w rejestrze A, a druga w rejestrze B. ALU wykonuje dodawanie i umieszcza wynik w akumulatorze., Jeśli operacja jest logiczna, dane do porównania są umieszczane w rejestrach wejściowych. Wynik porównania, 1 lub 0, jest umieszczany w akumulatorze. Niezależnie od tego, czy jest to operacja logiczna, czy arytmetyczna, zawartość akumulatora jest następnie umieszczana w miejscu pamięci podręcznej zarezerwowanym przez program dla wyniku.
istnieje inny rodzaj operacji wykonywanej przez ALU. Rezultatem jest adres w pamięci i jest używany do obliczania nowej lokalizacji w pamięci, aby rozpocząć ładowanie instrukcji. Wynik jest umieszczany w rejestrze wskaźników instrukcji.,
Instrukcja register and pointer
Instrukcja pointer określa położenie w pamięci zawierające następną instrukcję wykonywaną przez procesor. Gdy procesor zakończy wykonywanie bieżącej instrukcji, Następna instrukcja jest ładowana do rejestru instrukcji z miejsca pamięci wskazanego przez wskaźnik instrukcji.
Po załadowaniu instrukcji do rejestru instrukcji wskaźnik rejestru instrukcji jest zwiększany o jeden adres instrukcji. Inkrementacja pozwala mu być gotowym do przeniesienia następnej instrukcji do rejestru instrukcji.,
Cache
procesor nigdy nie uzyskuje bezpośredniego dostępu do pamięci RAM. Nowoczesne procesory mają jedną lub więcej warstw pamięci podręcznej. Zdolność procesora do wykonywania obliczeń jest znacznie szybsza niż zdolność pamięci RAM do przekazywania danych do procesora. Przyczyny tego są poza zakresem tego artykułu, ale zbadam go dalej w następnym artykule.
pamięć Cache jest szybsza niż pamięć RAM systemu i jest bliżej procesora, ponieważ znajduje się na chipie procesora. Pamięć podręczna zapewnia przechowywanie danych i instrukcje zapobiegające procesorowi czekaniu na pobranie danych z pamięci RAM., Gdy procesor potrzebuje danych—a instrukcje programu są również uważane za dane—Pamięć podręczna określa, czy dane są już w miejscu zamieszkania i dostarcza je do procesora.
Jeśli żądanych danych nie ma w pamięci podręcznej, są one pobierane z pamięci RAM i wykorzystują algorytmy predykcyjne, aby przenieść więcej danych z pamięci RAM do pamięci podręcznej. Kontroler pamięci podręcznej analizuje żądane dane i próbuje przewidzieć, jakie dodatkowe dane będą potrzebne z pamięci RAM. Ładuje oczekiwane dane do pamięci podręcznej., Trzymając niektóre dane bliżej procesora w pamięci podręcznej, która jest szybsza niż pamięć RAM, procesor może pozostać zajęty i nie marnować cykli czekania na dane.
nasz prosty procesor ma trzy poziomy pamięci podręcznej. Poziomy 2 i 3 są zaprojektowane tak, aby przewidywać, jakie Dane i instrukcje programu będą potrzebne dalej, przenosić te dane z pamięci RAM i przesuwać je coraz bliżej PROCESORA, aby były gotowe w razie potrzeby. Te wielkości pamięci podręcznej zazwyczaj wahają się od 1 MB do 32 MB, w zależności od szybkości i przeznaczenia procesora.
pamięć podręczna poziomu 1 znajduje się najbliżej procesora. W naszym procesorze istnieją dwa rodzaje pamięci podręcznej L1., L1i jest buforem instrukcji, a L1d jest buforem danych. Rozmiar pamięci podręcznej poziomu 1 zwykle waha się od 64 KB do 512 KB.
Jednostka zarządzania pamięcią
Jednostka zarządzania pamięcią (MMU) zarządza przepływem danych między pamięcią główną (RAM) a procesorem. Zapewnia również ochronę pamięci wymaganą w środowiskach wielozadaniowych i konwersję między adresami pamięci wirtualnej i adresami fizycznymi.
zegar procesora i jednostka sterująca
wszystkie komponenty procesora muszą być zsynchronizowane, aby płynnie ze sobą współpracować., Jednostka sterująca wykonuje tę funkcję z szybkością określoną przez Prędkość zegara i jest odpowiedzialna za kierowanie operacjami innych jednostek za pomocą sygnałów taktowania, które rozciągają się na całym procesorze.
pamięć o dostępie losowym (RAM)
chociaż PAMIĘĆ RAM, czyli główna pamięć, jest pokazana na tym i następnym diagramie, nie jest tak naprawdę częścią procesora. Jego funkcją jest przechowywanie programów i danych, aby były gotowe do użycia, gdy procesor ich potrzebuje.
Jak to działa
Procesory pracują w cyklu, który jest zarządzany przez jednostkę sterującą i synchronizowany przez zegar procesora., Cykl ten nazywany jest cyklem instrukcji CPU i składa się z szeregu komponentów fetch/decode/execute. Instrukcja, która może zawierać dane statyczne lub wskaźniki do zmiennych danych, jest pobierana i umieszczana w rejestrze instrukcji. Instrukcja jest dekodowana, a wszelkie dane są umieszczane w rejestrach danych A I B. Instrukcja jest wykonywana przy użyciu rejestrów A i B, a wynik włożony do akumulatora. Następnie procesor zwiększa wartość wskaźnika instrukcji o długość poprzedniej i zaczyna od nowa.
podstawowy cykl instrukcji procesora wygląda tak.,
Rysunek 3: podstawowy cykl instrukcji procesora.
Need for speed
chociaż podstawowy procesor działa dobrze, Procesory działające w tym prostym cyklu mogą być jeszcze bardziej wydajne. Istnieje wiele strategii zwiększania wydajności procesora, a my przyjrzymy się dwóm z nich tutaj.
doładowanie cyklu instrukcji
jednym z problemów napotkanych przez wczesnych projektantów procesorów było marnowanie czasu na różne komponenty procesora., Jedną z pierwszych strategii poprawy wydajności CPU było nakładanie się części cyklu instrukcji CPU w celu pełniejszego wykorzystania różnych części procesora.
na przykład, gdy bieżąca instrukcja została zdekodowana, następna jest pobierana i umieszczana w rejestrze instrukcji. Gdy tylko to nastąpi, wskaźnik instrukcji zostanie zaktualizowany o adres pamięci następnej instrukcji. Zastosowanie nakładających się cykli instrukcji zilustrowano na rysunku 4.,
Rysunek 4: cykl instrukcji procesora z nakładaniem się.
Ten projekt wygląda ładnie i gładko, ale czynniki takie jak oczekiwanie na wejścia / wyjścia mogą zakłócić przepływ. Brak odpowiednich danych lub instrukcji w pamięci podręcznej wymaga od MMU zlokalizowania właściwych i przeniesienia ich na procesor, co może zająć trochę czasu. Niektóre instrukcje wymagają również więcej cykli procesora niż inne, zakłócając płynne nakładanie się.
niemniej jednak, jest to potężna strategia poprawy wydajności procesora.,
Hyperthreading
inną strategią poprawy wydajności procesora jest hyperthreading. Hyperthreading sprawia, że pojedynczy rdzeń PROCESORA działa jak dwa procesory, zapewniając dwa strumienie danych i instrukcji. Dodanie drugiego wskaźnika instrukcji i rejestru instrukcji do naszego hipotetycznego procesora, jak pokazano na rysunku 5, powoduje, że działa on jak dwa procesory, wykonując dwa oddzielne strumienie instrukcji podczas każdego cyklu instrukcji. Ponadto, gdy jeden strumień wykonania zatrzymuje się podczas oczekiwania na dane-ponownie instrukcje są również danymi—drugi strumień wykonania kontynuuje przetwarzanie., Każdy rdzeń implementujący hyperthreading jest odpowiednikiem dwóch procesorów w swojej zdolności do przetwarzania instrukcji.
Rysunek 5: schemat koncepcyjny PROCESORA z hyperthreading.
pamiętaj, że jest to bardzo uproszczony schemat i Wyjaśnienie naszego hipotetycznego procesora. Rzeczywistość jest znacznie bardziej złożona.
więcej terminologii
spotkałem się z wieloma różnymi TERMINOLOGIAMI procesora., Aby dokładniej zdefiniować terminologię, przyjrzyjmy się procesorowi za pomocą polecenia lscpu
.
przedstawiony powyżej procesor Intela jest pakietem, który podłącza się do pojedynczego gniazda na płycie głównej. Pakiet procesorów zawiera sześć rdzeni. Każdy rdzeń jest zdolny do hyperthreading, więc każdy może uruchomić dwa jednoczesne wątki dla łącznie 12 procesorów.
moje definicje:
- Core – rdzeń jest najmniejszą fizyczną jednostką sprzętową zdolną do wykonania zadania przetwarzania. Zawiera jeden ALU i jeden lub dwa zestawy rejestrów pomocniczych., Drugi zestaw rejestrów i obwodów pomocniczych umożliwia hyperthreading. Jeden lub więcej rdzeni można połączyć w jeden pakiet fizyczny.
- CPU-logiczna Jednostka sprzętowa zdolna do przetwarzania pojedynczego wątku wykonania. Współczesne użycie terminu jednostka centralna odnosi się do całkowitej liczby wątków, które Pakiet procesorów jest w stanie wykonać jednocześnie. Jednordzeniowy procesor, który nie obsługuje hyperthreading, jest odpowiednikiem pojedynczego procesora. W tym przypadku CPU i core są synonimami., Procesor hyperthreading z jednym rdzeniem jest funkcjonalnym odpowiednikiem dwóch procesorów. Procesor hyperthreading z ośmioma rdzeniami jest funkcjonalnym odpowiednikiem 16 procesorów.
- Pakiet – element fizyczny zawierający jeden lub więcej rdzeni, taki jak pokazany na rysunku 1 powyżej.
- Processor – 1) urządzenie przetwarzające instrukcje programu w celu manipulowania danymi. 2) często używany jako synonim pakietu.,
- Socket – czasami używany jako inny synonim pakietu, ale dokładniej odnosi się do fizycznego gniazda na płycie głównej, do którego włożony jest pakiet procesora.
terminy socket, processor i package są często używane zamiennie, co może powodować pewne nieporozumienia. Jak widzimy z lscpu
polecenia wyniki powyżej, Intel dostarcza nam swoją własną terminologię, i uważam, że autorytatywne źródło., W rzeczywistości wszyscy używamy tych terminów na różne sposoby, ale tak długo, jak rozumiemy się nawzajem w danym momencie, to jest to, co naprawdę się liczy.
zauważ, że powyższy procesor ma dwie pamięci podręczne poziomu 1 po 512 KiB każda, jedną dla instrukcji (L1i) i jedną dla danych (L1d). Pamięć podręczna poziomu 1 jest najbliższa procesorowi i przyspiesza wszystko, aby instrukcje i dane były oddzielne w tym momencie. Bufory poziomu 2 i 3 są większe, ale instrukcje i dane współistnieją w każdej z nich.
Co to wszystko oznacza?
dobre pytanie., We wczesnych czasach mainframe, każdy komputer miał tylko jeden procesor i nie był w stanie uruchomić więcej niż jednego programu jednocześnie. Mainframe może uruchamiać płace, księgowanie zapasów, rozliczanie klientów i tak dalej, ale tylko jedna aplikacja może działać na raz. Każdy program musiał zakończyć się, zanim operator systemu mógł rozpocząć następny.
niektóre wczesne próby uruchomienia wielu programów naraz miały proste podejście i miały na celu lepsze wykorzystanie pojedynczego procesora., Na przykład Program1 i program2 zostały załadowane, a program1 działał, dopóki nie został zablokowany, czekając na wystąpienie wejścia / Wyjścia. W tym momencie program2 działał, dopóki nie został zablokowany. Takie podejście zostało nazwane multi-processing i pomogło w pełni wykorzystać cenny czas komputera.
wczesne próby wielozadaniowości polegały na bardzo szybkim przełączaniu kontekstu wykonywania jednego procesora pomiędzy strumieniami wykonywania wielu zadań. Ta praktyka nie jest prawdziwą wielozadaniowością, jak ją rozumiemy, ponieważ w rzeczywistości przetwarzany jest tylko jeden wątek wykonania na raz. Bardziej poprawnie nazywa się to dzieleniem czasu.,
nowoczesne komputery, od inteligentnych zegarków i tabletów po superkomputery, wszystkie obsługują prawdziwą wielozadaniowość z wieloma procesorami. Wiele procesorów umożliwia komputerom wykonywanie wielu zadań jednocześnie. Każdy procesor wykonuje swoje własne funkcje w tym samym czasie, co wszystkie inne procesory. Ośmiordzeniowy procesor z hyperthreading (tj. 16 procesorów) może wykonywać 16 zadań jednocześnie.
myśli końcowe
przyjrzeliśmy się konceptualizowanemu i uproszczonemu procesorowi, aby dowiedzieć się trochę o strukturach. W tym artykule ledwo przejrzałem powierzchnię funkcjonalności procesora., Możesz dowiedzieć się więcej, korzystając z osadzonych linków do omawianych tematów.
pamiętaj, że schematy i opisy w tym artykule są czysto pojęciowe i nie reprezentują żadnego rzeczywistego procesora.
w kolejnej części tej serii przyjrzę się pamięci RAM i dyskom jako różnym rodzajom pamięci masowej i dlaczego każdy z nich jest potrzebny nowoczesnym komputerom.