Opracowany przez: Jakub Baczyńsk
Ta książka jest o strukturze i funkcjach komputerów. Jej celem jest zaprezentowanie, najbardziej przejrzyście i kompletnie jak to możliwe, naturę i charakterystykę nowoczesnych komputerów. Jest to zadanie wymagające z dwóch powodów.
Po pierwsze, istnieje ogromna różnorodność produktów, od mikrokomputerów zawierających jeden chip, wartych parę dolarów, po superkomputery warte dziesiątki milionów dolarów, które słusznie nazywamy mianem komputer. Różnorodność ukazana jest nie tylko w cenie ale również w rozmiarze, wydajności i w aplikacjach. Po drugie, gwałtowne tempo zmian, które od zawsze charakteryzowało technologię komputerową nie zmienia się.
Te zmiany obejmują wszystkie aspekty technologii komputerowej, od podstawowych, zintegrowanych kręgów technologicznych używanych do konstrukcji komponentów komputera, aż do wzrostu użycia podobnych pojęć organizacji w związku z łączeniem tych komponentów.
Pomimo różnorodności i tempa zmian „na polu komputerowym” (w obrębie świata komputerów), pewne fundamentalne koncepcje mają zastosowanie konsekwentne pod każdym względem. By być pewnym, zastosowanie tych pojęć zależy od bieżącego stanu technologii oraz ceny/wydajności obiektów designerskich. Intencją tej książki jest wprowadzenie gruntownej dyskusji o fundamentach procesu organizacji komputera i jego architektury oraz powiązanie ich ze współczesnymi konstrukcjami. Ten rozdział wprowadza opisowe wprowadzenie.
1.1 STRUKTURA I ARCHITEKTURA
W opisie komputerów, różnica występuje często pomiędzy architekturą a strukturą komputera. Pomimo że ciężko jest podać precyzyjne definicje do tych terminów, konsensus zawarty jest gdzieś po środku posiadający elementy każdego z nich (np. [VRAN80], [SIEW82], i [BELL78a]); interesująca alternatywa jest zaprezentowana w [REDD76].
Architektura komputerowa odnosi się do tych cech systemu, które są zauważalne dla programisty lub inaczej te, które posiadają bezpośredni wpływ na logiczne wykonanie programu. Struktura komputera odnosi się do operacyjnych mechanizmów i ich wzajemnych powiązań, co uświadamia o architektonicznych specyfikacjach. Przykłady architektonicznych cech zawierają umieszczone polecenia, liczbę bitów używanych do zaprezentowania różnorodnych typów danych (np. numerów, znaków), mechanizmy I/O (wejścia/wyjścia) i sposoby adresowania pamięci. Strukturalne atrybuty zawierają te szczegóły sprzętów komputerowych, które są zrozumiałe, przejrzyste dla programisty, tak jak sygnały kontroli; interfejs pomiędzy komputerem, a tym co na zewnątrz; oraz używaną pamięcią technologiczną.
Na przykład, kwestią architektonicznej konstrukcji jest, czy komputer będzie posiadał rozbudowane polecenia instruujące. Natomiast, strukturalną kwestią jest, czy te polecenia będą zrealizowane przez specjalny, rozbudowany mechanizm lub przez mechanizm, który tworzy powtarzające się użycia dodanych podzespołów systemowych. Decyzje strukturalne mogą być oparte na oczekiwanej częstotliwości użycia rozbudowanych poleceń instruujących, względnej szybkości dwóch metod oraz kosztu i wielkości fizycznej specjalnego, rozbudowanego mechanizmu.
Historycznie, jak i do dzisiaj, różnica pomiędzy architekturą i strukturą jest istotna. Wiele fabryk komputerowych oferuje rodzinę modelów komputerowych, wszystkie takie same pod względem architektonicznym, lecz różniące się strukturą. Wskutek tego różne modele z tych rodzin posiadają różne ceny oraz wydajność. Co więcej, poszczególna architektura może trwać wiele lat i obejmować wiele różnych modeli komputerowych, których struktura zmienia się wraz ze zmianami technologicznymi. Czołowy przykład obydwu tych zjawisk to architektura IBM System/370. Ta architektura była pierwszy raz przedstawiona w 1970 roku i była użyta w wielu modelach. Klient ze skromnymi wymaganiami mógł pozwolić sobie na kupno tańszego, wolniejszego modelu i jeśli domagałby się podnieść standard, z czasem zakupić droższy, szybszy model bez potrzeby rezygnowania z oprogramowania, które zostało już zainstalowane. Przez te wszystkie lata IBM ( International Business Machines Corporation) wprowadziło wiele nowych modeli z ulepszoną technologią, by zastąpiły one starsze modele. Oferowały one klientom większą szybkość, niższe koszty lub jedno i drugie. Te nowsze modele zachowywały tą samą architekturę, co starsze, dzięki czemu inwestycja klienta w oprogramowanie była chroniona. Jak wiadomo, wybitna architektura Systemu/370 z niewieloma poprawkami przetrwała do dzisiejszego dnia jako architektura linii produkcyjnej IBM-u komputerów typu mainframe.
W przedziale komputerów nazywanych mikrokomputerami, związek pomiędzy architekturą a strukturą jest bardzo bliski. Zmiany technologii nie tylko wpływają na strukturę ale również mają skutek w przedstawieniu potężniejszych i bardziej złożonych architektur. Generalnie, występuje małe zapotrzebowanie na to, by te małe maszyny były kompatybilne z generacji na generacje. Tak więc, występuje większe wzajemne oddziaływanie pomiędzy strukturą i architekturą konstrukcji. Intrygującym przykładem tego zjawiska jest zmniejszona instrukcja umieszczona w komputerze (RISC), co omówimy w rozdziale 13.
Książka ta bada zarówno strukturę jak i architekturę komputera. Nacisk występuje prawdopodobnie bardziej na strukturę. Jednakże, ze względu na to, że struktura komputera musi być skonstruowana w taki sposób, aby wprowadzić w życie konkretne architektoniczne specyfikacje, omówienie struktury wymaga szczegółowego rozpatrzenia architektonicznego.
1.2 STRUKTURA I FUNKCJA
Komputer to skomplikowany system, współczesne komputery zawierają miliony elementarnych elementów elektronicznych. Jak więc można jasno je opisać? Najważniejsze jest, aby rozpoznać hierarchiczny charakter większości systemów złożonych, w tym komputera [SIMO96]. Hierarchiczny system powiązanych zestawów podsystemów, każdy z innym, tworzące, hierarchiczne struktury, docierające na najniższy poziom elementarnego podsystemu.
Hierarchiczny charakter złożonych systemów jest niezbędny zarówno do ich projektowania i ich opisu. Projektant musi tylko poradzić sobie z konkretnym poziomem systemu. Na każdym poziomie, system składa się z szeregu elementów oraz ich wzajemnych relacji. Postępowanie wobec każdego poziomu zależy tylko od uproszczenia, charakterystyki systemu na następnym, niższym poziomie. Na każdym poziomie, projektant musi skupić się na strukturze i funkcji:
- Struktura: sposób, w którym składniki są wzajemnie powiązane,
- Funkcja: działanie każdego składnika jako części konstrukcji
W zakresie opisu, mamy dwie możliwości: zaczynając od dołu i budowy do pełnego opisu, lub zaczynając z góry i rozkładając system na jego podczęści. Dane z liczby pól sugerują że odgórne podejście jest najprzejrzystsze i najbardziej skuteczne [WEIN75].
Podejście przyjęte w tej książce, wynika z tego punktu widzenia. System komputera zostanie opisany z góry na dół. Zaczniemy od głównych składników komputera, opisując ich strukturę i funkcje, a następnie przejdziemy do kolejno dolnych warstw hierarchii. Pozostała część niniejszej sekcji zawiera bardzo krótki przegląd tego planu działania.
Funkcja:
Zarówno struktura i funkcjonowanie komputera są w istocie proste. Rysunek 1.1 przedstawia podstawowe funkcje, które komputer może wykonywać. W ujęciu ogólnym, są tylko cztery funkcje:
- Przetwarzanie danych,
- Przechowywanie danych,
- Przepływ danych,
- Kontrola.
Komputer, oczywiście, musi być w stanie przetwarzać dane. Danych mogą mieć wielką różnorodność form i zakres wymagań dotyczących przetwarzania jest szeroki. Jednakże, będziemy widzimy, że istnieje tylko kilka podstawowych metod lub typów przetwarzania danych.
Istotne jest również, przechowywanie danych komputerowych. Nawet jeśli komputer przetwarza dane w "locie" (tj. dane przychodzą i zostają przetwarzane, a wyniki wychodzą natychmiast), komputer musi tymczasowo przechowywać przynajmniej te fragmenty danych, które są opracowywane w danym momencie. Tak więc, występuje tu co najmniej krótkoterminowa funkcja przechowywania danych. Równie ważne jest, że komputer posiada funkcję długoterminowego przechowywania danych. Pliki danych są przechowywane na komputerze do późniejszego pobierania i aktualizacji.
Komputer musi być w stanie przenieść dane między nim a światem zewnętrznym. Środowisko systemu operacyjnego składa się z urządzeń, które służą jako źródła lub miejsca docelowe danych. Gdy dane są przesyłane lub dostarczane do urządzenia, które jest bezpośrednio podłączone do komputera, proces jest znany jako wejścia-wyjścia (I / O), a urządzenie jest określane jako peryferyczne (obwodowe). Gdy dane są przenoszone na dłuższe odległości, do lub z urządzenia zdalnego, jest to proces komunikacji danych.
Wreszcie, musi również być kontrola tych trzech funkcji. Ostatecznie, ta kontrola wykonywana jest przez osobę (-y), który dostarcza komputerowi instrukcji. Wewnątrz komputera, centrala kieruje zasoby komputera i zarządza wydajnością jego funkcjonalnych części reakcji do tych instrukcji.
Na tym ogólnym poziomie dyskusji, liczba możliwych operacji, które mogą być wykonywane jest kilka. Rycina 1.2 przedstawia cztery możliwe typy operacji. Komputer może działać jako urządzenie ruchu danych (rys. 1.2a), łatwo przenosząc dane z jednej linii peryferyjnej (obwodowej) lub komunikacji do drugiego. Może również funkcjonować jako urządzenie do przechowywania danych (rys. 1.2b), z danych przekazywanych ze środowiska zewnętrznego do pamięci komputera (odczyt) i odwrotnie (zapis). Ostatnie dwa schematy działań pokazują udział przetwarzania danych, w danych bądź w czasie przechowywania (ryc. 1.2c) lub na trasie między przechowywaniem i środowiska zewnętrznym (ryc. 1.2d). Ta poprzedzająca dyskusja może wydawać absurdalnie uogólniona. Jest to możliwe, nawet na najwyższym poziomie struktury komputera, w celu odróżnienia różnych funkcji, lecz można przytoczyć [SIEW82],
Jest to niewielkie kształtowanie struktury komputera w celu dopasowania funkcji do wykonania. U podstaw tego leży ogólne przeznaczenie charakteru komputerów, w których wszystkie funkcjonalne specjalizacje występują podczas programowania, a nie w czasie projektowania.
Struktura:
Rycina 1.3 jest najprostszą ilustracją komputera. Komputer współpracuje w jakiś sposób ze środowiskiem zewnętrznym. Na ogół, wszystkie jego powiązania z otoczeniem zewnętrznym można sklasyfikować jako z urządzeniami peryferyjnymi lub z liniami przekazu. Będziemy mieli coś do powiedzenia na temat obu rodzajów powiązań.
Ale większym udziałem w tej książce jest wewnętrzna struktura komputera, która jest pokazana na ryc. 1.4. Istnieją cztery główne elementy strukturalne:
- CPU - Central processing unit (Jednostka centralna) : Kontroluje pracę komputera i
wykonuje swoje funkcje przetwarzania danych; często nazywana po prostu procesor.
- Pamięć główna (Main memory): Przechowuje dane.
- I/O - Input/output (Urządzenia wejścia-wyjścia) : Transportują dane miedzy komputerem a środowiskiem zewnętrznym.
- Połączenia (relacje) systemowe: Mechanizmy, który zapewniają komunikację między CPU, pamięcią główną, i I/O. Typowym przykładem połączenia systemowego jest połączenie za pomocą magistrali systemowej, składające się z kilku poprowadzonych przewodów do których wszystkie inne elementy są dołączone.
Może być jeden lub więcej każdego z wyżej wymienionych elementów. Tradycyjnie jest tylko pojedynczy procesor. W ostatnich latach wzrasta korzystanie z wielu procesorów w jednym komputerze. Niektóre zagadnienia dotyczące projektowania złożonych procesorów występują i omawiane są w miarę postępu tekstu; Część piąta koncentruje się na tych komputerach.
Każdy z tych składników zostanie zbadany i szczegółowo omówiony w części drugiej. Jednak dla naszych celów, najciekawszym i pod pewnymi względami najbardziej skomplikowanym komponentem jest CPU (jednostka centralna). Jej główne elementy konstrukcyjne to :
- Jednostka sterująca: steruje działaniem procesora, a tym samym, również komputerem,
- ALU - Arithmetic and logic unit (Jednostka arytmetyczno-logiczna): pełni funkcję przetwarzania danych komputera,
- Rejestry: posiadają miejsce do przechowywania danych
- Połączenia CPU: Mechanizmy zapewniające komunikację pomiędzy jednostką sterującą, ALU i rejestrami.
Każdy z tych składników zostanie zbadany szczegółowo w części trzeciej, gdzie będzie widać, że złożoności dodaje użycie równoległych i organizacyjnych technik. W końcu, istnieją różne podejścia do realizacji sterowania jednostki sterującej. Jednym, wspólnym podejściem jest realizacja mikroprogramowania. W istocie, mikroprogramowanie centrali działa wykonując mikroinstrukcje definiujące funkcjonalność jednostki sterującej. Zgodnie z tym podejściem, struktura sterowania urządzeniem może być przedstawiona, jak w strukturze 1.4.Te ryciny zostaną zbadane w części czwartej.
1.3 KLUCZOWE POJĘCIA I PYTANIA POWTÓRKOWE
KLUCZOWE POJĘCIA
Pytania powtórkowe
1.1 Jaka, ogólnie rzecz biorąc, jest różnica między strukturą i
architekturą komputerową?
1.2 Jaka, ogólnie rzecz biorąc, jest różnica pomiędzy strukturą i funkcją komputera?
1.3 Jakie są cztery główne funkcje komputera?
1.4 Wymień i krótko określ główne elementy strukturalne komputerza.
1.5 Wymień i krótko określ główne elementy strukturalne procesora.
Przetłumaczone przez : Jakub Baczyński
NAJWAŻNIEJSZE CECHY
Ewolucję komputerową cechuje procesor o rosnącej prędkości, zmniejszającym się rozmiarze, zwiększającym rozmiarze pamięci i zwiększającej się zdolności oraz szybkości I/O.
Jednym z czynników odpowiedzialnych za wielki wzrost szybkości procesora jest zmniejszanie wielkości elementów mikroprocesora. Zmniejsza to odległość międzyskładnikami i tym samym zwiększa szybkość. Jednakże prawdziwe zyski w prędkości w ostatnich latach pochodzą z organizacji procesora, w tym intensywne użycie potoku i równoległych technik realizacyjnych oraz wykorzystanie technik spekulacyjnych wykonania (wstępnie wykonanie przyszłych instrukcji, które mogą być potrzebne). Wszystkie te techniki są przeznaczone by utrzymać procesor zajęty najdłużej jak to możliwe.
Krytyczne znaczenie w projektowaniu systemu komputerowego ma zrównoważenie wydajności poszczególnych elementów tak, że zyski w wydajności w jednej dziedzinie nie były upośledzone przez opóźnienia w innych obszarach. W szczególności prędkość procesora rośnie szybciej niż czas dostępu do pamięci. Wiele technik stosuje zrekompensowanie tego niedopasowania - w tym pamięci podręczne, szersze ścieżki danych z pamięci do procesora, i bardziej inteligentne układy pamięci.
Rozpoczynamy badanie komputerów od krótkiej historii. Jest ona ciekawa, a także ma na celu ogólne przedstawienie struktury komputerowej i jej funkcji. Następnie ma zająć się kwestią wydajności. Rozpatrzenie potrzeby zrównoważonego wykorzystania zasobów komputerowych dostarcza kontekstu, który jest użyteczny w całej książce. Wreszcie przyjrzymy się pokrótce ewolucji dwóch systemów, które służą jako główne przykłady z książki: Intel x86 i ARM processor families.
2.1 KRÓTKA HISTORIA KOMPUTERÓW
Pierwsza generacja: Rury próżniowe
ENIAC (Electronic Numerical Integrator And Computer), skonstruowany na Uniwersytecie w Pensylwanii, był pierwszym na świecie elektronicznym komputerem cyfrowym do ogólnego przeznaczenia. Projekt był odpowiedzią na amerykańskie potrzeby podczas drugiej wojny światowej. The Army’s Ballistic Research Laboratory (BRL) - agencja odpowiedzialna za rozwój oferty i trajektorii tabel dla nowej broni, miała trudności ze sporządzeniem dokładnych danych i dostarczeniu ich w rozsądnym terminie do konstrukcji. Bez tych tabel strzelające, nowe bronie i artyleria były bezużyteczne. The BRL zatrudniało ponad 200 osób, które za pomocą kalkulatorów pulpitu chciały koniecznie rozwiązać równanie balistyczne. Przygotowanie z tabel dla jednej z broni trwałoby wiele godzin, a może nawet dni.
John Mauchly, profesor inżynierii elektrycznej na Uniwersytecie w Pennsylvanii, i John Eckert, jeden z jego studentów, zaproponowali zbudowanie uniwersalnego komputera używając rur próżniowych dla BRL w aplikacji. W 1943 roku, Armia zaakceptowała tę propozycję i rozpoczęły się prace nad ENIAC. Otrzymana maszyna była ogromna, ważyła 30 ton, zajmowała 1500 metrów kwadratowych powierzchni i zawierała ponad 18.000 lamp różniowych. Podczas pracy zużywała 140 kilowatów energii. Była również znacznie szybsza, niż elektromechaniczny komputer.
ENIAC był raczej maszyną dziesiętną, a nie binarną. Oznacza to, że numery
były reprezentowane w postaci dziesiętnej i arytmetyka przeprowadzona była w systemie dziesiętnym. Jego pamięć składa się z 20 "akumulatorów", każdy mógł przechowywać 10-cyfrową liczbę dziesiętną. Pierścień z 10 rur próżniowych reprezentował każdą cyfrę. W dowolnym czasie, tylko próżniowa probówka była w stanie ON, i reprezentowała jedną z dziesięciu cyfr. Główną wadą tego było to, że ENIAC musiał być ręcznie zaprogramowany poprzez przełączniki i kable do podłączania i odłączania.
ENIAC został ukończony w 1946 roku, a to jest stosunkowo za późno, aby był wykorzystywany w działaniach wojennych. Zamiast tego jego pierwszym zadaniem było przeprowadzenie szeregu skomplikowanych obliczeń, które były wykorzystywane by pomóc w określeniu wykonalności bomby wodorowej. Zastosowanie ENIAC do innych celów niż te, dla których została ona zbudowana, wykazało jego ogólnego przeznaczenie. ENIAC nadal działał pod BRL zarządzany do 1955 roku, kiedy to został zdemontowany.
MASZYNA VON NEUMANN’a Wprowadzanie i zmiany programów w ENIAC był bardzo nudne. Proces programowania mógł być łatwiejszy, jeśli program był reprezentowany w postaci nadającej się do przechowywania w pamięci przy danych. Potem komputer mógł uzyskać jego instrukcje, czytając je z pamięci i program mógł być ustawiony lub zmieniony poprzez ustawienie wartości części pamięci.
Pomysł ten, znany jako programowalny koncept, przypisuje się zazwyczaj projektantom ENIAC, zwłaszcza matematykowi Johnowi von Neumannowi, który był konsultantem projektu ENIAC. W tym samym czasie Alan Turinga rozwinął tę ideę. Pierwsza publikacja idei nastąpiła w 1945 roku i była propozycją von Neumanna dla nowego komputera, EDVAC (Electronic Discrete Variable Computer).
W 1946 roku, von Neumann i jego koledzy rozpoczęli projekt nowego przechowywującego komputera, dalej IAS komputera, w Instytucie Princeton na studiach wyższych. IAS komputer, chociaż nie zakończony do 1952 roku, to był prototypem wszystkich kolejnych komputerów ogólnego przeznaczenia.
Rysunek 2.1 przedstawia ogólną strukturę komputera IAS (porównaj środkową
część rysunku 1.4). Składa się z:
• głównej pamięci, która przechowuje dane i instrukcje*
• jednostki arytmetycznej i logicznej (ALU) zdolnej do operacji na danych binarnych
* W tej książce, jeśli nie zaznaczono inaczej, określenie odnosi się do instrukcji w maszynie, która jest instrukcją bezpośrednio interpretowaną i wykonywaną przez procesor, w przeciwieństwie do instrukcji w języku wysokiego poziomu,
takich jak Ada lub C + +, który musi być skompilowany do serii instrukcji maszyny przed
wykonaniem.
• sterownika, który interpretuje instrukcje w pamięci i powoduje ich wykonanie
• urządzenia wejścia i wyjścia (I / O) trwałe obsługiwane przez centralę
Struktura ta została przedstawiona w poprzedniej propozycji von Neumanna, którego warto
zacytować w tym momencie [VONN45]:
2.2 Po pierwsze: ponieważ urządzenie jest przede wszystkim komputerem, to będzie
trzeba wykonać najczęściej operacje arytmetyczne. Są to: dodawanie, odejmowanie, mnożenie i dzielenie. Jest zatem logiczne, że powinna ona zawierać specjalistyczne narzędzia tylko dla tych operacji. Należy jednak zauważyć, że podczas gdy prawdopodobnie dźwięk, specyficzny sposób, w którym jest realizowany wymagadokładnej analizy. W każdym razie centralna część urządzenia będzie prawdopodobnie istnieć i ta pierwsza stanowi szczególną część: CA (jednostka arytmetyczno-logiczna).
2.3 Po drugie: logiczne sterowanie urządzenia, czyli prawidłowa kolejność swoich działań, jest najbardziej skutecznie realizowana przez centralny organ sterujący. Jeśli urządzenie ma być elastyczne, czyli stworzone do wielu zastosowań, to należy sporządzić odpowiednie instrukcje i szczególnie opisać problem. Ogólne organy kontroli dbają o to, że te instrukcje są należycie sporządzone. Poprzednie muszą być przechowywane, a ostatnie mają określać sposób eksploatacji urządzenia. Przez centralną kontrolę rozumiemy tę ostatnią funkcję, a organy, które wykonują ją tworzą drugą specjalną część: CC. (jednostkę kontroli programu).
2.4 Po trzecie: Każde urządzenie, które ma prowadzić długie i skomplikowane sekwencje operacji (w szczególności obliczenia) musi mieć znaczną pamięć.
(b) instrukcje regulujące skomplikowany problem mogą stanowić znaczny materiał, zwłaszcza, jeśli kod jest nieistotny (jest tak w większości przypadków). Oraz ten materiał musi być zapamiętany.
W każdym razie, ilość pamięci stanowi trzecią charakterystyczną część urządzenia: M (pamięć główna).
2.6 Trzy specyficzne części: CA, CC (wraz C) i M korespondują z asocjacyjnymi neuronami układu nerwowego. Pozostają do omówienia odpowiedniki zmysłowych lub doprowadzających i motorycznych lub odprowadzających neuronów. Są to urządzenia wejścia-wyjścia.
Urządzenie musi być wyposażone w zdolność do utrzymania wejścia i wyjścia (czucia i ruchu), kontakt z pewnymi szczególnymi ośrodkami tego typu. Ośrodek zostanie wywołany poza zapisem ośrodka urządzenia: R.
2.7 Po czwarte: urządzenie musi mieć organy do transferu. Informacja od R do swoich specyficznych części C i M. Organy te tworzą jego wejścia, specyficzną czwartą część: I. Należy zauważyć, że najlepiej aby wszystkie transfery były z R (przez I) do M i nigdy bezpośrednio z C.
2.8 Po piąte: Urządzenie musi mieć organy do transferu. od jego
specyficznych części C i M do narządów R. Te tworzą jego wyjście, piątą
specyficzną część: O. Można zauważyć, że najlepiej byłoby aby wszystkie transfery
były z M (przez O) do R, a nie bezpośrednio z C.
Z nielicznymi wyjątkami, wszystkie dzisiejsze komputery mają tę samą ogólną strukturę
i funkcje jak maszyna von Neumanna. Tak więc, wypadałoby w tym miejscu krótko opisać działanie komputera IAS [BURK46]. Po [HAYE98], terminologia i notacja Neumanna są dostosowywane do współczesnego ich użycia; przykłady i ilustracje towarzyszące tej dyskusji są oparte w ostatnim tekście.
Pamięć składa się z 1000 MSR przechowywania miejsc, nazywanych słowami po 40 cyfr binarnych (bitów) każda (przypis). Zarówno dane jak i instrukcje są tam przechowywane. Liczby są reprezentowane w postaci binarnej, a każda instrukcja jest kodem binarnym. Rycina 2.2 ilustruje te formaty. Każdy z nich jest reprezentowany przez bit w 39-bitowej skali. Słowo może także zawierać dwie 20-bitowe instrukcje. Każda instrukcja obejmuje 8-bitowy kod operacji (opcode), określenia operacji do wykonania i 12-bitowy adres wyznaczające jedno z tych słów w pamięci (o numerach od 0 do 999).
Jednostka sterująca uruchamia IAS przez pobieranie instrukcji z pamięci i
wykonuje je tylko jeden na raz. Wyjaśnia to bardziej szczegółowy schemat (ryc. 2.3)
pokazujący jaka struktura jest potrzebna. Z tego rysunku wynika, że zarówno w centrala i ALU zawiera lokalizacje, zwanych rejestrów, zdefiniowane następująco:
Rejestr buforu pamięci (MBR – Memory buffer register): Zawiera słowa które mają być przechowywane w pamięci lub wysyłane do I/O urządzenia lub otrzymuje słowo z pamięci lub jednostki I / O.
Rejestr adresu pamięci (MAR – Memory address register): Określa adres w pamięci wyrazu który ma być zapisany lub odczytany z MBR.
Rejestr instrukcji (IR – Instruction register): Zawiera 8-bitowy kod operacji wykonywanej instrukcji.
Rejestr buforu instrukcji (IBR – Instruction Buffet register): Powołany by przechować tymczasowo prawe instrukcje z wyrażenia z pamięci.
Licznik programu (PC): zawiera adres następnej instrukcji-pary która będzie
pobierana z pamięci.
Akumulator (AC) i mnożnik ilorazu (MQ- Multiplier quotient): Powołany tymczasowo by trzymać argumenty i wyniki operacji ALU. Na przykład, wynikiem
mnożenia dwóch 40-bitowych liczb jest liczba 80-bitowa; najważniejsze
40 bitów jest przechowywane w AC w mniej ważne w MQ.
Operacje IAS są powtarzane i wykonywane w cyklu instrukcji , jak pokazano na rysunku 2.4. Każdy cykl instrukcji składa się z dwóch podcyklów. Podczas cyklu pobierania kod operacji następnej instrukcji jest przesyłany do części IR a adres jest przesyłany do MAR. Instrukcja ta może być pobierana z IBR, lub może zostać pobrana z pamięci przez wczytanie słowa do MBR, a następnie w dół do IBR, IR i MAR.
Dlaczego niekierunkowo? Operacje te są kontrolowane przez układ elektroniczny oraz w wyniku stosowania ścieżek danych. Aby uprościć elektronikę, jest tylko jeden rejestr,
Wykonanie cyklu odbywa się, gdy jest w nim kod operacji IR. Układ sterowania interpretuje kod operacji i wykonuje instrukcje, wysyłając odpowiednie
sygnały wywołujące dane, które mają być przeniesione lub operację wykonywane przez ALU. Komputer IAS posiadała łącznie 21 instrukcji, które są wymienione w tabeli 2.1. Można je podzielić na następujące grupy:
Transfer danych: dane poruszają się między pamięcią i rejestrami ALU lub między dwoma rejestrami ALU.
Bezwarunkowy: Centrala wykonuje z pamięci instrukcje w kolejności. Sekwencja ta może być zmieniana przez instrukcję gałęzi, co ułatwia powtarzalność operacji.
Warunkowa gałąź: gałąź może być uzależniona od warunku, a tym samym
od punktów decyzyjnych.
Arytmetyczne: Operacje wykonywane przez ALU.
Modyfikacja adresu: Zezwala na kierowanie do obliczania w ALU i następnie dodaje instrukcje zapisane pamięci. To pozwala programowi znaczne zwiększyć elastyczność.
Tabela 2.1 prezentuje instrukcje symboli w formie łatwej do przyswojenia. Każdy musi być zgodny z formatem rysunku 2.2b. Część kodu operacji (pierwsze 8 bitów) określa, która z 21 instrukcji jest do wykonania. Dalsza część adresu (pozostałe 12 bitów), która określa, które z 1000 miejsc pamięci ma brać udział w wykonaniu instrukcji.
Rysunek 2.4 przedstawia kilka przykładów realizacji dyspozycji jednostki sterującej.
Należy pamiętać, że każda operacja wymaga kilku kroków. Niektóre z nich są dość skomplikowane. Operacja mnożenia wymaga 39 podoperacji, po jednym dla każdej pozycji z wyjątkiem bitu, chyba że ze znakiem bitu.
KOMERCYJNE KOMPUTERY
W 1950 roku narodził się przemysł komputerowy. Na rynku dominowały dwa przedsiębiorstwa: Sperry i IBM. W 1947 roku, Eckert i Mauchly utworzyli Eckert-Mauchly Computer Corporation do produkcji komputerów i wprowadzili je na rynek. Ich pierwszym sukcesem była maszyna UNIVAC I (Universal Automatic Computer), która powstała na zlecenie Biura Spisu Powszechnego dla 1950 obliczeń. Eckert-Mauchly Computer Corporation stała się częścią UNIVAC działu Sperry-Rand Corporation, która dalej budowała serię maszyn.
UNIVAC I był pierwszym komercyjnym komputerem. Był on przeznaczony
do zastosowań zarówno naukowych jak i komercyjnych. Pierwszy dokument opisywał system wymienionych obliczeń macierzy algebraicznych, statystycznych problemów, zaawansowanych faktur dla firmy ubezpieczeniowej i problemy logistyczne jako próbki zadań. Po pierwsze, postęp technologii pozwala firmom budować coraz lepsze i bardziej wydajne komputery. Po drugie, każda firma stara się, by jej nowe maszyny były kompatybilne ze starszymi maszynami. Oznacza to, że programy napisane dla starszych urządzeń mogą być wykonywane na nowej maszynie. Strategia ta została przyjęta w nadziei utrzymania klienta. Podstawą jest to, że gdy klient zdecyduje się kupić nowszą maszynę, nie oznacza to, że straci stare dane.
UNIVAC zaczęła produkcję i rozwój 1100 serii komputerów, które miały być jego głównym źródłem dochodów. Seria ta przedstawia różnicę, które istniały w jednym czasie. Pierwszy model, UNIVAC 1103, i jego następcy na wiele lat były przeznaczone przede wszystkim do zastosowań naukowych, obejmujących długie i skomplikowane obliczenia. Inne firmy koncentrowały się na zastosowaniach biznesowych, które stworzone były do przetwarzania dużych ilości danych tekstowych. Ten podział w dużej mierze zniknął, ale było to widoczne na przestrzeni lat.
IBM był głównym producentem dziurkowanych kart, czyli urządzeń do przetwarzania. Jego pierwszym wydanym w 1953 roku elektronicznym przechowywanym programem komputerowym był „701”. Program „701” był przeznaczony przede wszystkim do zastosowań naukowych [BASH81]. W 1955 roku IBM wprowadził produkt „702”, który miał szereg cech sprzętowych, które nadawały się do aplikacji biznesowych. Były to pierwsze z długiej serii 700/7000 komputerów, tworzących IBM jako przeważającego dominującego producenta komputera.
DRUGA GENERACJA: TRANZYSTORY
Pierwsze poważne zmiany w elektronicznym komputerze przyszły wraz z wymianą
rur próżniowych (lamp) na tranzystor. Tranzystory są mniejsze, tańsze i mniej rozpraszają
ciepła niż rury próżniowe, ale mogą być stosowane w ten sam sposób jak rury próżniowe. W przeciwieństwie do rury próżniowej, która wymaga kabli, blach, szkła kapsułki i próżni, tranzystor potrzebuje tylko półprzewodnikowego urządzenia z krzemu. Tranzystor został wynaleziony w Bell Labs w 1947roku, a w 1950 roku rozpoczęła się elektroniczna rewolucja. Dopiero pod koniec 1950 roku, w pełni tranzystorowe komputery były dostępne w handlu. IBM znów nie był pierwszą firmą, która dostarczyła nową technologię. NCR były bardziej skutecznie, RCA były liderami z niektórych małych maszyn tranzystorowych, a IBM wkrótce z serii 7000.
Zastosowanie tranzystorów określane są mianem drugiej generacji komputerów. Stało się powszechnie akceptowane klasyfikować komputery do pokoleń w oparciu o podstawową technologii sprzętu zatrudnionego (tab. 2,2). Każda nowa generacja charakteryzuje się większą wydajnością przetwarzania, większą pojemnością pamięci i mniejszymi rozmiarami niż w poprzedniej generacji.
Ale były również inne zmiany. Drugą generację wprowadzono z bardziej złożonych jednostek arytmetycznych i logicznych, wykorzystano wyższe języki programowania, oraz zapewnienie kompatybilności oprogramowania systemowego z komputerem.
Drugą generację zauważyć można również przez pojawienie się cyfrowych
Equipment Corporation (DEC). Została założona w grudniu 1957 roku i w tym roku wydała
swój pierwszy komputer, PDP-1. Niniejszy komputer i ta firma rozpoczęła produkcję minikomputerów, zjawisko, które stało się tak widoczne w trzeciej generacji.
Przetłumaczone przez : Dominika Różańska
26 Rozdział 2/Ewolucja i wydajność komputerów
IBM po raz kolejny nie okazał się pierwszym dostawcą nowych technologii. NCR i odnoszące jeszcze większy sukces RCA były pionierami z ich małymi tranzystorami. IMB szybko podążyło ich śladami ze swoją serią 7000. Zastosowanie tranzystorów definiuje drugą generację komputerów. Stało się to powszechnie akceptowane, aby komputery dzielić na generacje ze względu na podstawową (fundamentalną) technologię sprzętu (elementów konstrukcyjnych) użytą w danym modelu. Każda nowa generacja charakteryzuje się większą wydajnością przetwarzania danych, zwiększoną pojemnością pamięci, a przede wszystkim mniejszym rozmazem niż poprzednicy. Poza tym są również inne zmiany. Druga generacja byłą świadkiem wprowadzenia bardziej złożonych jednostek arytmetycznych i logicznych jednostek oraz jednostek kontrolnych, stosowania języków programowania na wysokim poziomie i oprogramowania komputerowego.
Druga generacja godna uwagi ze względu na pojawienie się Digital Equipment Corporation (DEC). DEC została założona w 1957 roku i w tym samym roku wypuściła swój pierwszy komputer – PDP-1. Zarówno komputer jak i firma rozpoczęły fonemem minikomputerów, które stały się bardzo powszechne w trzeciej generacji.
IBM 7094
Od wprowadzeniu serii 700 w 1952 roku do wprowadzenia ostatniego członka serii 7000 w 1964 linia produktów IBM przeszła ewolucję, która jest typowa dla produktów komputerowych. Kolejni członkowie produktu pokazali zwiększoną wydajność, większą pojemność i/lub zmniejszone koszty.
Tab 2.3 pokazuje tendencję.
Rozmiar pamięci głównej, w krotności 2^10 36-bitowych wyrazów, wzrosło od 2K (1K=2^10) do 32K słów, podczas gdy czas dostępu do jednej informacji spadł od 30 ms do 1,4 ms. Liczba rozkazów wzrosła ze skromnych 24 do 185. Ostatnia kolumna tabeli ukazuje względną szybkość wykonywania zadań przez jednostkę centralną (CPU-procesor). Poprawa prędkości uzyskiwana jest poprzez zaawansowaną elektronikę (np. tranzystor jest szybszy od rury próżniowej) i stosowanie skomplikowanych układów.
Dla przykładu, IBM 7094 zawiera rejestr instrukcji, używany do zatrzymania następnej instrukcji. Sterownik pobiera dwa sąsiednie słowa z pamięci do instrukcji. Wyjątkiem występowania rozgałęzionych instrukcji, które jest zazwyczaj rzadkie, co oznacza że sterownik musi uzyskać dostęp do pamięci, tylko na pół cyklu instrukcji. Ten prefetching znacznie zmniejsza średni czas cyklu instrukcji. Reszta kolumn tabeli 2.3 będzie zrozumiała wraz z dalszą częścią tekstu. Rysunek 2.5 pokazuje ogromną (zawierającą wiele urządzeń peryferyjnych) konfigurację IBM 7094, reprezentatywny komputer drugiej generacji [BELL71]. Warto zwrócić uwagę na kilka różnic komputera IAS. Najważniejszą z nich jest zastosowanie kanałów danych. Kanałem danych jest niezależny I/O moduł ze swoim własnych procesorem i własnym zbiorem instrukcji. W systemie komputera z takimi urządzeniami procesor nie wykonuje szczegółowo instrukcji I/O. Takie instrukcje przechowywane są w pamięci głównej, po to by były wykonane poprzez specjalnie przygotowany procesor w jego własnych kanałach danych. CPU inicjuje transfer I/O przez wysyłanie kontrolnych sygnałów do kanałów danych instruując go do wykonania sekwencji informacji w pamięci. Kanał danych wykonuje swoje zadanie niezależnie od procesora CPU i sygnalizuje go gdy operacja jest zakończona. Takie rozwiązanie odciąża procesorod znacznego ciężaru przetwarzania. Inną nową funkcją jest multiplekser, który jest centralnym punktem dla zakończenia kanałów danych, procesora i pamięci. Dzięki harmonogramowi dostępu do pamięci, urządzenia te mogą działać niezależnie.
Trzecia generacja: Układy scalone
Pojedyncze, samodzielne tranzystory nazywamy elementami dyskretnymi. Przez 1950 i na początku 1960, sprzęt elektroniczny został złożony w dużej mierze z elementów dyskretnych-tranzystorów, rezystorów, kondensatorów, i tak dalej. Dyskretne elementy były wytwarzane oddzielnie, pakowane w swoich pojemnikach, i lutowane razem do obwodów typu masonite-like, które następnie instalowano w komputerach, oscyloskopach i innych urządzeniach elektronicznych. Jakkolwiek elektroniczne urządzenie zwane dla tranzystora, zawierające trochę rurki z metalu, kawałek krzemu wielkości główki gwoździa, były przylutowane do jednej płytki. Cały proces produkcyjny umieszczenia tranzystora na płytce drukowanej był drogi i kłopotliwy. Te fakty zaczynają stwarzać problemy w przemyśle komputerowym. Wczesne komputery drugiej generacji zawierały około 10.000 tranzystorów. Liczba ta wzrosła do setek tysięcy przy produkcji nowocześniejszych i bardziej skomplikowanych maszyn i urządzeń. W 1958 roku przyszedł czas na osiągnięcie który zrewolucjonizowało elektronikę i zaczęło nową erę – erę mikroelektroniki: wynalezienie układu scalonego. To zintegrowane układy, które definiują trzecią generację komputerów. W tym dziale przedstawiamy krótkie wprowadzenie do technologii układów scalonych. Następnie przyjrzymy się dwóm najważniejszym członkom nowej generacji, z których oba zostały wprowadzone na początku tego okresu: IBM System/360 i DEC PDP-8.
Mikroelektronika
Mikroelektronika oznacza, dosłownie, "mała elektronika." Od początku cyfrowej elektroniki i przemysłu komputerowego, odnotowano wytrwały i konsekwentny trend w kierunku zmniejszenia wielkości cyfrowych układów elektronicznych. Przed przystąpieniem do badania skutków i korzyści tej tendencji, trzeba powiedzieć coś o naturze elektroniki cyfrowej .Bardziej szczegółowe omówienie można znaleźć w rozdziale 20.
Podstawowe elementy komputera cyfrowego jak wiemy należy wykonać składowanie;
ruch, przetwarzanie i funkcje kontrolne. Wymagane są tylko dwa podstawowe rodzaje elementów (Rys. 2,6): bramy i komórki pamięci. Brama jest urządzeniem, które realizuje prostą instrukcję lub funkcję logiczną, np. jeśli A i B są prawdziwe to C jest prawdziwe. Takie urządzenia są nazywane bramami, ponieważ kontrolują przepływ danych w taki sposób, że końcowym elementem jest komórka. To urządzenie, które może przechowywać jeden bit danych, jest urządzeniem które może być w jednym z dwóch stanów w danym czasie. Przez połączenie dużej liczby tych urządzeń podstawowych, można zbudować komputer.
Może odnosić się to do czterech podstawowych następujących funkcji:
*Pamięć danych: Zapewnione przez komórki pamięci.
*Przetwarzanie danych: Zapewnione przez bramę.
*Przepływ danych: Ścieżki wśród komponentów są używane do przenoszenia danych z pamięci do pamięci i z pamięci za pomocą bram pamięci.
*Sterowanie: Ścieżki wśród składników są kontrolowane poprzez sygnały sterujące. Na przykład, brama będzie mieć jedno lub dwa wejścia danych plus wejście sygnału sterującego, który aktywuje bramę. Gdy sygnał sterujący jest włączony, brama pełni swoją funkcję odbierając dane wejściowe i tworzy dane wyjściowe. Podobnie, komórka pamięci przechowuje bit, który jest na jego wejściu gdy sygnał sterujący jest włączony i będzie to kawałek, który jest w komórce w jego przewodu wyjściowego gdy sygnał sterujący będzie włączony.
Tak więc, komputer składa się z bramek, komórki pamięci, i połączeń między tymi elementami. Bramy i komórki pamięci są, z kolei, wykonane z prostych cyfrowych elementów elektronicznych. Układ scalony wykorzystuje fakt, że takie elementy jak tranzystory, rezystory i przewody mogą być wykonana z takich materiałów jak krzem półprzewodników. Jest on jedynie rozszerzenie techniki półprzewodnikowej, która do wytworzenia całego obwodu wykorzystuje maleńkim kawałku krzemu, zamiast montować elementów dyskretnych wykonanych z oddzielnych elementów krzemu do tego samego obwodu. Wiele tranzystorów można zamieścić w tym samym czasie, na pojedynczy wafel krzemu. Równie ważne jest to, że tranzystory te mogą być związane z procesem metalizacji obwodów. Rysunek 2.7 przedstawia kluczowe pojęcia w układzie scalonym. Cienki płatek z krzemu podzielony zostaje na małe obszary, z których każdy jest wielkości kilku milimetrów kwadratowych. Idealny wzór wykorzystywany jest w każdej dziedzinie, a wafel cięty jest na takie same małe płytki. Każdy chip składa się z wielu bram i / lub komórek pamięci oraz wejścia/wyjścia mocowania urządzeń. Układ ten jest następnie pakowany w obudowę, która zabezpiecza go i zapewnia elementy do mocowania innych urządzeń poza chipem. Wiele z tych elementów może być połączonych na płytce obwodu drukowanego, w celu otrzymania większych i bardziej złożonych układów. Początkowo tylko kilka bram lub komórek pamięci mogło być produkowane i niezawodnie pakowane razem. Pierwsze układy scalone są rozumiane jako układy małej integracji (SSI). Z biegiem czasu, możliwe stało się pakować coraz więcej elementów tego samego chipu. Ten wzrost jest przestawiony na rysunku 2.8 i jest jednym z najciekawszych trendów technologicznych w historii. Rycina ta odzwierciedla słynne prawo Moore'a, który głoszone było przez Gordon Moore, współzałożyciel Intela, w 1965 roku [MOOR65]. Moore zaobserwował, że liczba tranzystorów, która może być umieszczona na jednym chipie podwaja się co roku i poprawnie przewidział, że to tempo będzie utrzymane w najbliższej przyszłości. Ku zaskoczeniu wielu, w tym Moore'a zależność ta trwała nadal rok po roku i dekada po dekadzie. Tempo spadło do podwajania się co 18 miesięcy w 1970 roku, ale rozwój pozostał utrzymany. Konsekwencje prawa Moore'a są następujące:
Koszt chipa pozostało praktycznie niezmienione w okresie tego wzrostu. Oznacza to, że kos obwodów pamięci komputera spadł na krytyczny poziom.
2. Z powodu logiki i elementów pamięci, które są umieszczone bliżej siebie na gęściej zapakowanych chipach, elektryczne ścieżki zostały skrócone ,a prędkość robocza zwiększona.
3. Komputer zmniejsza się, co sprawia, że staje się on wygodniejszy do wykorzystywania w różnych środowiskach.
4. Zwiększona zostaje moc i zmniejszenia wymagania chłodzenia.
5. Połączenia są znacznie bardziej niezawodne na układzie scalonym niż
lutowanym. Na obwodach z większa liczbą chipów, jest mniej połączeń miedzy chipami.
IBM SYSTEM/360
W 1964, IBM miał zatrzymanie na rynku sprzedaży komputerów z jego serii 7000. W tym roku, IBM ogłosił System/360, nową rodzinę produktów komputerowych. Mimo zapowiedzi, nie było zaskoczeniem, niósł ze sobą przykrą wiadomość dla obecnych klientów IBM: 360 linii produktów była niezgodna ze starszymi modelami.
Tak więc, przejście z 360 byłoby trudne dla bieżącego klientów. To był odważny krok postawiony przez IBM, ale IBM odczuwało za konieczne oderwanie się od niektórych ograniczeń w 7000 i do architektury. Produkujemy systemu zdolnego ewoluuje z nowej technologii obwodów scalonych [PADE81, GIFF87].Strategia opłaciła się finansowo i technicznie.360 był sukcesem dekady i IBM udowodnił jak przytłaczająco dominuje w sprzedaży komputerów, z ponad 70% udziałem na rynku. I z pewnymi zmianami i rozszerzeniami architektura 360 pozostaje do dziś. Przykłady użycia tej architektury można znaleźć w całym tym tekście. System/360 był pierwszą w branży planowaną rodziną komputerów. Rodzina obejmowała szeroki zakres wyników i kosztów. Tabela 2.4 wskazuje niektóre, lecz kluczowe cechy poszczególnych modeli w 1965 (każdy członek rodziny wyróżnia numer modelu). Modele są zgodne w tym sensie, że program napisany do jednego modelu powinien być zdolny do wykonania przez inne modele w serii, tylko z różnicą czasową potrzebną do wykonania zadania. Pojęcie rodziny komputerów kompatybilnych było nowatorskie i niezwykle skuteczne .Klient z rozsądnymi wymaganiami i budżetem pasującym do norm mógłby rozpocząć od stosunkowo niedrogiego modelu 30. Później, jeśli potrzeby klienta rosły, możliwe było uaktualnienie do szybszej wersji z większą ilością pamięci bez utraty inwestycji w już opracowane oprogramowanie. Charakterystyki rodziny są następujące:
*Podobny lub identyczny zestaw instrukcji: W wielu przypadkach, dokładnie ten sam zestaw instrukcji jest obsługiwany przez wszystkich członków rodziny. Tak więc program, który wykonywany na jednym komputerze będzie również wykonywany na innych. W niektórych przypadkach, końcowa część rodziny posiada zestaw instrukcji, która jest z tego podzbioru początkowej części rodziny. To oznacza, że program może poruszać się w górę, lecz nie w dół.
*Podobny lub identyczny system operacyjny: sam podstawowy system operacyjny jest dostępne dla wszystkich członków rodziny. W niektórych przypadkach dodaje się dodatkowe funkcje członków wyższej klasy.
*Zwiększenie prędkości: stopa wzrostu wykonania instrukcji wzrasta przechodząc od niższych do wyższych członków rodziny.
*Rosnąca liczba portów I / O: liczba portów I / O będzie rosła od niższych do wyższych członków rodziny.
*Zwiększenie wielkości pamięci: Rozmiar pamięci w głównych wzrasta począwszy od niższych do wyższych członków rodziny.
*Zwiększenie kosztów: W danym momencie, koszt jednego systemu zwiększa się (od niższych do wyższych członków rodziny.)
Jak taka koncepcja rodziny komputerów jest realizowana? Różnice uzyskano
w oparciu o trzy czynniki: podstawowe prędkości, wielkości i stopnia jednoczesności [STEV64]. Dla przykładu: większą szybkość w realizacji danej instrukcji może być osiągnięta poprzez stosowanie bardziej złożonych układów w ALU, pozwalając instrukcjom do wykonywania się równolegle. Innym sposobem było zwiększenie prędkości, poprzez poszerzenie ścieżki idącej pomiędzy pamięcią główną a procesorem. W modelu 30, tylko 1 bajt (8 bitów) może być odczytane z pamięci w czasie, podczas gdy 8 bajtów można otworzyć w tym samym czasie w modelu 75. System/360 nie tylko podyktował przyszły kierunek IBM, ale także miał ogromny wpływ na cały przemysł. Wiele jego funkcji staje się standardem dla innych dużych komputerów obecnego czasu.
DEC PDP-8
W tym samym roku co IBM wypuszczone zostały pierwsze System/360, inna ważna pierwsza dostawa nastąpiła: PDP-8 od Digital Equipment Corporation. W czasie, gdy przeciętny komputer wymaga klimatyzowanego pomieszczenia PDP-8 (nazwany w przemyśle mikrokomputerem) był na tyle mały, że może być umieszczony w dowolnym laboratorium lub być wbudowany w inne urządzenia. Mimo, że PDP-8 nie może zrobić wszystkiego tego, co mógł, mainframe, ale jak na cenę 16.000 dolarów był na tyle przystępny, że stał się dostępny dla prawie każdego laboratorium. W przeciwieństwie, System/360 serii wprowadzonych komputerów zaledwie kilka miesięcy wcześniej, a kosztowały setki tysięcy dolarów. Niski koszt i niewielki rozmiar PDP-8 sprawił że producenci sprzętów, zaczęli instalować je do swoich urządzeń i oddawać do odsprzedaży. Urządzenia innych producentów stał się znany jako produkt oryginalnego sprzętu (OEM), a rynek OEM stał się i pozostaje istotny segment rynku komputerowego. PDP-8 odniósł natychmiastowy sukces i zarobił fortunę dla DEC. To urządzenie i pozostali członkowie rodziny PDP-8 (patrz: tabela 2.5) osiągnęli status produkcji dawniej zarezerwowane dla komputerów IBM, z około 50.000 maszyn sprzedanych w przeciągu kilkunastu lat. Jako oficjalną historię DEC to ujął, PDP-8 "mikrokomputery otwierają drogę do wielomiliardowego zysku w przemyśle." To również uplasowało DEC jako numer jeden w kategorii sprzedawca minikomputer, a gdy PDP-8 osiągnął kres swojej żywotności, DEC był numer dwa zaraz za IBM. W przeciwieństwie do centralnie rozmieszczonej architektury (rys. 2,5) używanej przez IBM w jej 700/7000 i 360sys, późniejsze modele PDP-8 używały strukturę, która jest obecnie praktycznie uniwersalna dla mikrokomputerów: struktura szyny. Ilustruje to Rysunek 2.9.PDP-8 szyny, zwany Omnibus, składa się z 96 oddzielnych ścieżek sygnałowych, wykorzystanych do przeprowadzenia kontroli, adres i sygnały danych. Ponieważ wszystkie elementy systemu mają wspólny zestaw ścieżek sygnałowych, ich działanie musi być kontrolowana przez CPU. Te architektury są bardzo elastyczne, dzięki czemu jest wiele modułów do podłączenia do szyn, po to aby utworzyć różne konfiguracje.
Późniejsze generacje
Ponad to komputery trzeciej generacji są mniej zgodne z powszechnym rozumieniem określenia pokolenia komputerów. Tabela 2.2 wskazuje, że było wiele następnych pokoleń, bazujących na podstawie osiągnięć w zintegrowanej technologii obwodów. Wraz z wprowadzeniem integracji na ogromną skalę (LSI), ponad 1000 elementy mogło być umieszczone na jednej płytce układu scalonego. Na bardzo dużą skalę integracji (VLSI) można było zmieścić nawet 10 000 elementów na jednej płytce. Obecnie można zamieszczać więcej niż 1 milion części. Przy szybkim tempie technologii, wysokim tempie wprowadzania nowych produktów, oraz znaczeniu oprogramowania i komunikacji, jak również sprzętu, klasyfikacja przez pokolenia staje się mniej przejrzyste i mniej znacząca. Można powiedzieć że komercyjne zastosowanie nowych rozwiązań spowodowały istotne zmiany już na początku 1970 roku, a wyniki tych zmian są jeszcze zauważalne. W tym dziale, wspominaliśmy dwa najważniejsze z tych wyników.
Pamięć półprzewodnikowa
Pierwszym zastosowaniem zintegrowanej technologii obwodów do komputerów była budowa procesora (jednostka sterująca i arytmetyka i logika jednostki) z zintegrowanymi czipami elektronicznymi. Jednak okazało się również, że ta sama technika może być używana do budowy pamięci.
Przetłumaczone przez : Mateusz Iwanowski
Rozdział 2 / Ewolucja i wydajność komputerów
W latach 1950 i 1960, większość pamięci komputerowych była skonstruowana przy użyciu ferrytowych pierścieni, każdy o średnicy około 16 cali [???]. Te pierścienie podwieszone są na sieci drobnych przewodów zawieszonych na małych ekranach wewnątrz komputera. Namagnesowany jednostronnie pierścień (nazywany rdzeniem) stanowiły jeden; namagnesowane w inną stronę stanowiły zero. Pamięć ferromagnetyczna jest stosunkowo szybka; zajmuje to zaledwie milionowa część sekundy żeby odczytać kawałek zapisanej pamięci. Ale to było drogie, nieporęczne i destrukcyjnie wykorzystywało odczyt. Prosty proces odczytu pamięci powodował skasowanie danych. Dlatego też konieczne jest zainstalowanie układów potrzebnych do przywrócenia danych, tak szybko jak jest to możliwe.
Jednak od 1970 Fairchild wyprodukował pierwszy stosunkowo pojemną pamięć półprzewodnikową. Układ, o rozmiarze pojedynczego rdzenia, mógł przechowywać 256 bitów. Był on niezniszczalny i o wiele szybszy niż pamięć ferromagnetyczna. Odczyt jednego bitu zajmował 70 miliardowych sekundy. Jednakże, koszt w przeliczeniu na jeden bit był wyższy niż rdzenie. W 1974 nastąpiło przełomowe wydarzenie: cena za bit pamięci półprzewodnikowej spadła poniżej ceny pamięci podstawowej. Następnie był kontynuowany spadek cen wraz ze fizycznym wzrostem gęstości upakowania pamięci. Doprowadziło to do powstawania mniejszych, szybszych komputerów z większą pamięcią. [???]. Postępy w technologii pamięci, wraz z rozwojem technologii procesorowej przyczyniły się do dyskusji na temat zmiany natury komputerów szybciej niż w dekadę. Jednak, obszerne, drogie komputery także zostaną ze swoimi użytkownikami, jako urządzenia biurowe i komputery osobiste.
Od roku 1970, pamięć półprzewodnikowa miała 13 generacji: 1K, 4K, 16K, 64K, 256K, 1M, 4M, 16M, 64M, 256M, 1G, 4G i 16 Gbitów na pojedynczym układzie (1K=210, 1M=220, 1G=230). Każda następna generacja dostarczała 4-krotną gęstość upakowania w porównaniu do poprzedniej generacji. Towarzyszył temu spadek kosztów produkcji oraz spadek czasu dostępu.
Mikroprocesory Podobnie jak gęstość elementów na układzie pamięci wzrastała, tak samo na procesorze też wzrastała. W miarę upływu czasu więcej i więcej elementów było umieszczanych na każdym chipie, więc mniejsza ilość chipów była potrzebna do budowy pojedynczego procesora. Sukces został osiągnięty w 1971, kiedy Intel wypuścił na rynek mikroprocesor o nazwie 4004. Był to pierwszy chip który zawierał wszystkie komponenty procesora na jednej płytce: narodził się mikroprocesor.
4004 może dodać dwa 4-bitowe numery i może mnożyć przez wielokrotne dodawanie. Według dzisiejszych standardów 4004 jest bardzo prymitywny, ale był to początek do kontynuowania ewolucji możliwości mikroprocesora i jego mocy.
Ta ewolucja może być łatwo ukazana w ilości bitów które procesor może się zajmować jednocześnie. Do pomiaru tego zjawiska nie ma jednoznacznej miary, jednak taki złotym środkiem jest szerokość magistrali danych: liczba danych bitów, które mogą być wprowadzone lub wysłane. Inną metodą pomiaru jest liczba bitów w rejestrze albo w zbiorze rejestrów ogólnego zastosowania. Często, środki te pokrywają się, lecz nie zawsze. Na przykład pewna liczba mikroprocesorów została tak opracowana do pracy z 16-bitowymi liczbami w rejestrze, jednak odczyt i zapis był na poziomie 8-bitów na raz.
Następnym ważnym etapem ewolucji mikroprocesora była wprowadzenie w roku 1972 Intela 8008. Był to pierwszy 8-bitowy mikroprocesor i był on prawie dwukrotnie bardziej skomplikowany niżeli model 4004. Jednak żaden z tych poprzednich etapów nie był taki ważny: wprowadzenie w roku 1974 Intela 8080. Była to pierwsza generacja mikroprocesorów ogólnego zastosowania. Zważywszy, że 4004 i 8008 zostały zaprojektowane do konkretnych zastosowań, model 8080 został zaprojektowany jako procesor mikrokomputera ogólnego zastosowania. Tak jak 8008, model 8080 to 8-bitowy mikroprocesor. Niemniej jednak 8080 jest szybszy, ma bogatszy zestaw instrukcji i ma dużą zdolność adresowania.
W tym samym czasie zaczęto opracowywać 16 bitowe mikroprocesory. Jednak do końca lat siedemdziesiątych nie ukazał się żaden uniwersalny, 16-bitowy mikroprocesor. Jednym z nich był 8086. Kolejny krok w tym trendzie nastąpił w roku 1981, gdy zarówno Bell Labs i Hewlett-Packard opracowali 32-bitowy mikroprocesor. Intel zaprojektował swój własny 32-bitowy mikroprocesor model 80386, w roku 1985 (tabela 2.6)
Rozdział 2 / Ewolucja i wydajność komputerów
2.2 Zaprojektowane dla wydajności
Z roku na rok, koszty systemów komputerowych ciągle spadały, podczas gdy wydajność i pojemność tych systemów ciągle dramatycznie rosła. W miejscowej hurtowni możesz odebrać komputer osobisty za mniej niż 1000 dolarów [???]. Ta rewolucja technologiczna przyczyniła się do rozwoju aplikacji o zdumiewającej złożoności i mocy. Na przykład aplikacje desktopowe, które wymagają wielkiej mocy obliczeniowej, na systemach opartych o współczesne procesory są wstanie wykonać:
Przetwarzanie obrazu
Rozpoznawanie mowy
Wideokonferencje
Opracowywanie multimediów
Adnotacje audio i video w plikach
Modelowanie symulacyjne
Stacje robocze obsługują teraz systemy wysoce zaawansowane aplikacje inżynierskie oraz naukowe, a także systemy symulacyjne, i mają możliwość wspierania aplikacji do zdjęć i video. Ponadto, przedsiębiorstwa coraz to większym stopniu polegają na potężnych klientach/serwerach sieci, które zastąpiły ogromne centra mainframe z przeszłości.
Co jest fascynujące wszystkie perspektywy organizacji komputera i jego architektury jest to, że podstawowa struktura dzisiejszych komputerów jest praktycznie taka sama jak komputerów IAS z ponad 50 lat temu, podczas gdy z drugiej strony, [???].
Obserwacja ta służy jako wytyczna do prezentacji w tej książce. Kiedy będziemy przechodzić przez różne elementy i komponenty komputera, dwa cele zostaną zrealizowane. Po pierwsze, książka objaśnia podstawową funkcjonalność w każdych obszarach rozważania, a po drugie książka będzie badała czynniki technologiczne potrzebne do osiągnięcia maksymalnej wydajności. W dalszej części tej sekcji, wyróżnić będzie można niektóre z czynników odpowiadających za potrzebę projektowania dla wydajności.
Szybkość mikroprocesorów
Co dały nam procesory Intela x86 albo komputery typu mainframe firmy IBM jest niewyobrażalna moc z nieustannego dążenia do szybkości uzyskiwanej przez procesory. Ewolucję tych maszyn potwierdza prawo Moore’a, wspomniane wcześniej. Jak mówi to prawo producenci procesorów są w stanie stworzyć nową generację procesorów co trzy lata – z czterokrotnie większą liczbą tranzystorów. W kościach pamięci dynamicznej (DRAM), wciąż podstawowej technologii dla komputerów jako pamięci głównej, wzrasta ona co trzy lata. W mikroprocesorach, dodanie nowych układów i zwiększenie prędkości, która pochodzi od zmniejszenia odległości pomiędzy nimi, wydajność poprawia się cztero- lub pięciokrotnie, co trzy lata, odkąd Intel wprowadził swoją rodzinę x86 w 1978 roku.
Ale sama szybkość mikroprocesorów nie osiągnie swojego potencjału, o ile nie doprowadzi się do niego ciągłego strumienia danych do zrobienia w formie instrukcji komputerowych. Cokolwiek staję na drodze do sprawnego przepływu danych osłabia moc procesora. W związku z powyższym, producenci chipów starają się wyprodukować je o większej i większej gęstości, to projektant procesorów musi stworzyć warunki techniczne do „nakarmienia tych potworów”. Wśród technik zbudowanych do współczesnych procesorów można wymienić następujące:
Branch prediction: procesor przewiduje kod instrukcji pobrany z pamięci i przewiduje, który gałęzie lub grupy instrukcji mogą być przetworzone dalej. Jeśli procesor zgadnie prawidłowo, to może wstępnie pobrać prawidłowe instrukcje i buforować je tak, żeby procesor był cały czas zajęty. Bardziej wyrafinowane przykłady tej strategii nie przewidują następnych grup instrukcji ale wielokrotność następnych grup instrukcji. Zatem, przewidywanie zwiększa ilość pracy dla procesora do wykonania.
Analiza przepływu danych: procesor analizuje które instrukcje lub dane są zależne od innych rezultatów, żeby stworzyć optymalny harmonogram instrukcji. W rzeczywistości instrukcje do wykonania są zaplanowane, niezależnie od oryginalnego programu. Zapobiega to zbędnemu opóźnieniu.
Spekulatywne wykonanie: korzystanie z grupy instrukcji i analizy przepływu danych powoduj, że niektóre procesory, podczas realizacji programu, wykonują instrukcje przed ich rzeczywistym ukazaniem, przechowując wyniki w tymczasowych lokalizacjach. To pozwala procesorowi zachować swoje silniki tak długo zajęte jak to możliwe poprzez wykonywanie instrukcji które mogą być potrzebne.
Te i inne zaawansowane techniki są konieczne ze względu na samą moc procesora. Dzięki temu możliwe jest wykorzystanie całej szybkości procesora.
Bilans wydajności
W trakcie wykorzystywania pełnej mocy procesora, inne ważne podzespoły komputera nie nadążały za nim. Rozwiązaniem jest potrzeba poszukania bilansu wydajności: dostosowanie organizacji i architektury w celu zrekompensowania niezgodności pomiędzy możliwościami różnych komponentów. Najważniejszym problemem jest stworzenie interfejsu dobrego interfejsu pomiędzy procesorem, a pamięcią operacyjną. Najlepiej rozważyć historię przedstawioną na rysunku 2.10. podczas gdy szybkość procesora gwałtownie rosła, szybkość z jaką dane mogą być transferowane między pamięcią główną i procesorem nie nadążała za nią. Interface pomiędzy procesorem i pamięcią główną jest najważniejszą częścią komputera ponieważ jest odpowiedzialny za stały przepływ instrukcji programu i danych między układami pamięci oraz procesora. Jeżeli pamięć lub połączenie nie nadąża za procesorem, to procesor może przejść w czas oczekiwania i jego cenne dane przetwarzania zostaną stracone.
Istnieje wiele sposobów, które mogą zniwelować problem architektury systemu, wszystkie które znajdują odzwierciedlenie we współczesnych projektach informatycznych. Rozważmy następujące przykłady:
Zwiększenie liczby bitów, które są pobierane za jednym razem poprzez DRAM „szerzej” niż „głębiej” i przy użyciu szerokich ścieżek magistrali danych.
Zmiana interfacu DRAM aby zwiększyć efektywność przy użyciu pamięci cache7 lub innego schematu buforowania i chipie DRAM
Redukcja częstotliwości dostępu do pamięci poprzez bardziej złożone i efektywne struktury cache pomiędzy procesorem i pamięcią główną. Obejmuje to włączenie jednej lub więcej pamięci cache procesora oraz jako poza pamięci podręcznej w pobliżu układu procesora.
Zwiększenie przepustowości połączenia między procesorem i pamięcią o wyższej prędkości magistrali i użycie hierarchii w buforze i strukturze przepływu danych.
Innym ważnym obszarem projektu jest obsługa urządzeń wejścia / wyjścia. Jak komputery staja się szybsze i bardziej złożone, bardziej wyrafinowane aplikacje są opracowywane, że obsługa urządzeń peryferyjnych z wymaganiami co do urządzeń wejścia / wyjścia. Rysunek 2.11 daje pewne przykłady typowych urządzeń w użyciu prze komputer osobisty i stacje robocze.
Urządzenia te tworzą ogromne wymagania co do przepustowości danych. Chociaż obecna generacja może obsługiwać dane generowane prze te urządzenia, to pozostaje problem przenoszenia danych pomiędzy procesorem, a urządzeniami peryferyjnymi. Strategicznym wyjściem z tej sytuacji jest buforowanie i buforowanie programów plus stosowanie magistrali o wyższej szybkości i bardziej złożonej struktury magistrali. Ponadto, zastosowanie wieloprocesorowych konfiguracji może pomóc w zaspokojeniu wymagań urządzeń wejścia / wyjścia.
Kluczem w tym wszystkim jest równowaga. Konstruktorzy stale dążą do równowagi pomiędzy przepustowością i przetwarzaniem żądania elementów procesora, pamięci operacyjnej, urządzeń wejścia / wyjścia, a także struktur wzajemnych połączeń. Ten projekt musi być stale rozważany aby poradzić sobie ze stale zmieniającymi się dwoma czynnikami:
Tempo, w jakim zmienia się wydajność w różnych dziedzinach technologii (procesor, magistrale, pamięci, urządzenia peryferyjne) znacznie różni się jeden od drugiego.
Nowe aplikacje i nowe urządzenia peryferyjne stale zmieniają charakter zapotrzebowania z punktu widzenia typowego profilu instrukcji i wzorców danych dostępu.
Zatem konstrukcja komputera jest stale rozwijana. Ta książka stara się przedstawić jej fundamenty, na których jest oparta i przedstawić jej obecny stan.
Ulepszenia w organizacji i architekturze układu.
Ponieważ projektanci zmagają się z problemem równowagi wydajności procesora z pamięcią główną i innych komponentów komputerowych, zachodzi potrzeba zwiększenia prędkości procesora. Istnieją trzy sposoby do osiągnięcia zwiększonej szybkości procesora:
Zwiększenie szybkości procesora. Wzrost ten zależy przede wszystkim od zmniejszenia wielkości bramek logicznych w układzie procesorów, tak że bramki mogą być upakowane razem mocniej i zwiększa to poziom prędkość zegara. Z bramek położonych bliżej siebie zmniejsza się czas propagacji sygnałów, umożliwiając przyspieszenia procesora. Wzrost szybkości zegara sprawia, że poszczególne operacje wykonywane są szybciej.
Zwiększenie rozmiaru pamięci podręcznej, które pośredniczą pomiędzy procesorem, a pamięcią główną. W szczególności poświęca się część procesora na pamięć podręczną, wtedy cache spada znacząco.
Wprowadzenie zmian organizacji i architektury procesora, co przełoży się na zwiększenie skutecznej szybkości realizacji instrukcji. Zazwyczaj wiąże się to za pomocą równoległości w takie czy innej postaci.
Tradycyjnie dominującym czynnikiem wzrostu wydajności było zwiększenie prędkości w zegarze głównym oraz gęstość logiczna. Rysunek 2.12 przedstawia trend dla procesorów Intela. Jednakże, wraz ze wzrostem szybkości zegara i wzrostem gęstości logicznej, liczba przeszkód staje się bardziej istotna [INTE04b]:
Zasilanie: tak jak gęstość logiki i prędkość zegara w chipie wzrasta, więc wzrasta wskaźnik czasu przepływu energii (waty/cm2). Problem rozproszenia ciepła generowanego przez wysoką gęstość upakowania, szybkie zegary układów stają się poważnym problemem podczas projektowania ([GIBB04] [BORK03]).
Opóźnienie RC: szybkość, z jaką elektrony mogą przepływać w układzie między tranzystorami, jest ograniczona przez oporność i pojemność przewodów łączących je. Zmniejszenie wielkości układów, sprawia że przewody są coraz cieńsze, co zwiększa opór elektryczny. Ponadto, przewody są bliżej siebie zwiększając pojemność.
Opóźnienia pamięci: pamięć pozostaje w tyle w przeciwieństwie do prędkości procesora, co zostało wcześniej omówione.
Tak więc niedługo nastąpi zwiększenie nacisku na organizację i architekturę co przeniesie się na poprawę wydajności. Rysunek 2.12 podkreśla, że istotne zmiany zostały wprowadzone w ostatnich latach ,a poprzez to zwiększono wydajność procesorów. Techniki te są omówione w dalszych rozdziałach książki.
Od końca roku 1980, i nadal prze około 15 lat, zostały wykorzystane dwie główne strategie w celu zwiększenia wydajności, co można byłoby osiągnąć jedynie poprzez zwiększenie prędkości zegara. Po pierwsze, nastąpił wzrost wydajności pamięci podręcznej. Nie jeden lecz dwa lub trzy poziomy pamięci podręcznej funkcjonują pomiędzy procesorem, a pamięcią operacyjną. Tak jak wzrosła gęstość upakowania, większą ilość pamięci podręcznej włączono do układu, umożliwiając szybszy dostęp do pamięci podręcznej. Na przykład na procesorach Pentium około 10% powierzchni było przeznaczonych na pamięć podręczną. Najnowsze Pentium 4 mają przeznaczone połowę swojej powierzchni na pamięć podręczną.
Po drugie logiczne wykonywanie instrukcji procesora jest coraz bardziej kompleksowa umożliwiając równoległe wykonywanie instrukcji w procesorze. Dwa istotne podejścia konstrukcyjne to przetwarzanie potokowe i super skalarne. [???]
Oba te podejścia są osiągalne w punkcie malejących przychodów. Wewnętrzna struktura współczesnych procesorów jest niezwykle złożona i może osiągnąć wysoką równowagę z strumienia instrukcji. Prawdopodobnie dalszy istotny rozwój w tym kierunku zwiększa się stosunkowo niewiele [GIBB04]. Z trzy poziomowej pamięci podręcznej w układzie procesora, każdy poziom dostarcza znaczna pojemność, wydaje się, ze korzyści z pamięci podręcznej docierają do limitu.
Jednakże, rosnąca prędkość zegara, dla zwiększenia wydajności, powoduje problem z rozproszeniem moc o czym była mowa. Szybszy zegar powoduje zwiększenie mocy, którą trzeba rozproszyć jako ciepło i już niektóre fizyczne limity zostały osiągnięte.
Z tych wszystkich trudności, projektanci zmienili zasadniczo swoje podejście do poprawy wydajności: umieszczenie wielu procesorów w jednym układzie, z dużą ilością współużytkowanej pamięci podręcznej. Zastosowanie wielu procesorów w tym samym układzie, a także określanych jako rdzenie albo wielordzennie, zapewnia możliwość zwiększenia wydajności bez zwiększania częstotliwości zegara. Badania naukowe wykazują, że wzrost wydajności w procesorze jest w przybliżeniu proporcjonalny do pierwiastka kwadratowego z wzrostem złożoności [BORK03]. Ale jeśli program jest w stanie wspierać efektywnie wykorzystane wielu rdzeni, to podwojenie ich liczby niemal podwaja wydajność. Zatem strategia użycia dwóch prostszych procesorów na jednym układzie, zamiast jednego bardziej skomplikowanego, wydaje się lepsza.
Ponadto, z dwóch procesorów większa ilość pamięci podręcznej jest uzasadniona. Jest to ważne ponieważ pobór mocy przez pamięć logiczną w układzie jest znacznie mniejszy niż w przypadku procesu logicznego. W kolejnych latach możemy się spodziewać nowych procesorów które są wielordzeniowe.
Przetłumaczone przez Piotr Sawala
Rozdział 3 / Wzgląd na najważniejsze funkcje komputera
KLUCZOWE PUNKTY
- Cykl instrukcji zawiera polecenie pobrania, poprzedzone zerem lub większą ilość operandów pobrania, poprzedzoną zerem albo więcej operandów składowych, poprzedzonych przez kontrolę przerwania (jeśli przerwania są aktywne).
- Główne komponenty komputerowe ( procesor, pamięć główna, moduły wejścia/wyjścia) muszą być połączone w celu wymiany danych i kontroli sygnałów.
Najpopularniejszym środkiem komunikacji jest użycie dzielonej szyny systemowej zawierającej wiele linii. We współczesnych systemach jest zwykle hierarchia szyn, w celu polepszenia wydajności.
- Kluczowe elementy projektowania dla szyn wliczają arbitrację ( gdy zezwolenie na wysłanie sygnałów do magistrali jest kontrolowane centralnie lub w dystrybutowalnym stylu); Timing ( jeśli sygnały na magistrali są synchronizowane z zegarem procesora lub są wysyłane asynchronicznie, bazując na ostatniej transmisji); oraz szerokość pasma (liczba linii adresów i liczba linii danych).
Komputer składa się z CPU( procesor), pamięci i komponentów wejścia/ wyjścia, z jednym lub większą ilością modułów każdego typu. Komponenty te są połączone w pewnym sensie, aby osiągnąć podstawową funkcję komputera, którą jest wykonywanie programów. Dlatego najważniejszym możemy opisać system komputerowy przez: (1) opisywanie zewnętrznego zachowania każdego podzespołu - to znaczy kontroli danych i sygnałów, którymi się wymieniają z innymi podzespołami; i (2) opisywanie struktury połączeń oraz kontrolek wymaganych do używania struktury połączeń.
Ten wzgląd na strukturę i funkcje jest ważny, ze względu na efektywność w wyjaśnianiu natury komputera. Jednakowo ważne jest jego użycie do zrozumienia coraz bardziej złożonych kwestii rozwoju wydajności. Zrozumienie struktury i funkcji wysokopoziomowej daje wzgląd na systemowe ..., zmienne ścieżki, ogromną ilość błędów systemowych jeśli komponent zawiedzie oraz łatwość dodawania elementów uwydatniających. W wielu przypadkach wymagania dla większej mocy systemu i mniejszej możliwości wystąpienia błędu rozwiązuje się poprzez projektowanie na nowo, niż poprzez niewielkie zwiększanie szybkości i niezawodności indywidualnych komponentów.
Rozdział ten koncentruje się na podstawowych strukturach używanych dla komunikacji podzespołów komputerowych. Rozdział zaczyna się z krótkim sprawdzeniem podstawowych komponentów i ich wymagań interfejsowych. Następnie będzie funkcjonalny przegląd. Jesteśmy więc przygotowani do sprawdzenia użycia magistral do komunikacji podzespołów.
3.1 PODZESPOŁY KOMPUTEROWE
Tak jak omawialiśmy w rozdziale drugim prawie wszystkie aktualne komputerowe projekty bazują na koncepcjach rozwiniętych przez Johna von Neumanna w instytucie w Princeton. Taki design odnosi się do architektury Neumanna i oparty jest na trzech kluczowych pomysłach:
- Dane i instrukcje są przechowywane w pojedynczej pamięci odczytu-zapisu
- Zawartość tej pamięci jest adresowana przez lokację, bez wzlędu na rodzaj informacji tam przechowywanej.
- Wykonywanie zachodzi w sekwencyjnym stylu ( chyba że zmodyfikowane) z jednej instrukcji do drugiej.
Rozumowanie za tymi komponentami zostało przedyskutowane w rozdziale 2 ale jest warte podsumowania. Jest mały zestaw podstawowych logicznych podzespołów, który może być połączony na różne sposoby, aby składować dane binarne i wykonywać arytmetyczne oraz logiczne operacje na tych danych. Jeśli jest jakaś szczególna computation do wykonania, konfiguracja logicznych podzespołów zaprojektowana wyłącznie dla tej computation mogłaby być skonstruowana. Możemy pomyśleć o procesie łączenia rozmaitych podzespołów w pożądanej konfiguracji jako o formie programowania.
W rezultacie "program" jest w formie sprzętu i jest określany mianem hardwired program.
Rozważcie teraz taką alternatywę. Przypuśćmy, że konstuujemy konfigurację funkcji logicznych i arytmetycznych dla celów ogólnych. Ten zestaw sprzętowy będzie wykonywał różne funkcje na danych, zależnie od kontroli sygnałów zastosowanej do sprzętu. W prawdziwym przypadku przerabianego sprzętu, system akceptuje dane i sygnały kontrolne i daje wynik. Dlatego zamiast modyfikowania sprzętu dla każdego nowego programu, programista rzadko musi stosować nowy zestaw kontroli sygnałów. Jak ma być zastosowana kontrola sygnałów? Odpowiedź jest prosta, lecz subtelna. Cały program jest tak naprawdę sekwencją kroków. Na każdym kroku pewna arytmetyczna lub logiczna operacja jest wykonywana na jakichś danych.
Dla każdego kroku jest potrzebny nowy zestaw sygnałów kontrolnych. Zapewnijmy unikalny kod dla każdego możliwego zestawu sygnałów kontrolnych oraz dodajmy segment do sprzętu ogólnego użytku, który może akceptować kod i generować sygnały kontorlne (ryc. 3.1b)
Programowanie jest teraz dużo łatwiejsze. Zamiast zmieniania sprzętu dla każdego nowego programu, wszystko co potrzebujemy zrobić, to zapewnić nową sekwencję kodów/ Każdy kod jest w efekcie instrukcją i część sprzętu interpretuje każdą instrukcję oraz generuje sygnały kontrolne. Aby rozróżnić tę nową metodę programowania, sekwencja kodów instrukcji jest nazywana oprogramowaniem.
Ryc.3.1b wskazuję dwa główne komponenty systemowe: interpretera instrukcji i moduł arytmetycznych oraz logicznych funkcji ogólnego użytku.
Te dwa komponenty tworzą CPU. Kilka innych komponentów jest potrzebnych jest potrzebnych, aby stworzyć komputer. Dane i instrukcje muszą być umieszczone w systemie. Dlatego potrzebujemy swego rodzaju moduł wejścia. Moduł ten zawiera podstawowe komponenty do akceptowania danych i instrukcji w pewnej formie oraz konwertowania w wewnętrzną formę sygnałów używanych przez system. Środek raportowania wyników jest potrzebny, który jest formą modułu wyjściowego. Zebrane razem są modułami wejścia/wyjścia.
Jeszcze jeden komponent jest potrzebny. Urządzenie wejścia dostarczy instrukcji i dane sekwencyjnie. Lecz program nie jest wykonywany sekwencyjnie w różny sposób; może przeskakiwać (n.p. IAS przeskakuje instrukcje). Podobnie operacje na danych mogą wymagać dostępu do więcej niż jednego elementu na raz w ustalonej wcześniej kolejności. Dlatego musi być miejsce do tymczasowego przetrzymywania i instrukcji, i danych. Moduł taki nazywany jest pamięcią lub pamięcią główną w celu odróżnienia jej od zewnętrznych nośników danych lub urządzeń peryferyjnych. Von Neumann pokazał, że ta sama pamięć mogła być używana dla przechowywania instrukcji oraz danych.
Rycina 3.2 ilustruje te najważniejsze komponenty i wskazuje interakcje między nimi. CPU wymienia dane z pamięcią. Do tego celu wymaga zwykle użycia dwóch wewnętrznych (dla CPU) rejestrów: rejestr adresów pamięci (MAR - memory address register), który określa adres w pamięci dla odczytu lub zapisu i bufor rejestru pamięci (MBR - memory buffer register), który zawiera dane do zapisu w pamięci lub otrzymuje dane odczytane z pamięci. Podobnie adres rejestru I/O określa poszczególne urządzenie I/O. Bufer rejestru wyjścia/wejścia jest używany do wymiany danych między procesorem i modułem I/O.
Moduł pamięci składa się zestawu lokacji, określonych przez sekwencyjnie numerowane adresy. Każda lokacja zawiera kod binarny, który może być interpretowany jako instrukcja lub dana. Moduł I/O przenosi dane z zewnętrznych urządzeń do CPU i pamięci, i na odwrót. Zawoera wewnętrzne bufory do tymczasowego przetrzymywania danych do momentu, aż jest możliwość dalszego ich przesłania.
Spoglądając krótko na te główne komponenty, przechodzimy teraz do podsumowania, jak te komponenty funkcjonują razem, aby wykonywać programy.
3.2 FUNKCJA KOMPUTERA
Podstawowa funkcja wykonywana przez komputer to wykonywanie programu, który jest złożony z zestawu instrukcji składowanych w pamięci. Procesor wykonuje rzeczywistą pracę poprzez wykonywanie instrukcji określonych w programie. Ta sekcja daje nam podsumowanie kluczowych elementów
wykonywania programu. W swojej najprostszej formie, wykowywane instrukcji składa się z dwóch kroków : Procesor odczytuje (pobiera) instrukcje z pamięci jedna po drugiej i wykonuje każdą z nich. Wykonanie programu, to powtarzanie procesu pobierania instrukcji i wykonywania instrukcji. Wykonywanie instrukcji może zawierać kilka operacji zależnych od rodzaju instrukcji( zobacz np. dolną część ryc.2.4).
Przetwarzanie wymagane od pojedynczej instrukcji jest zwane cyklem instrukcji.
Używając uproszczonego dwupunktowego opisu przedstawionego wcześniej, cykl instrukcji jest zobrazowany w ryc.3.3. Te dwa kroki odnoszą się do do cyklu pobrań i cyklu wykonywań. Wykonywanie programu przerywa się tylko, jeśli maszyna jest wyłączona, pojawiają się pewnego rodzaju nieodwracalny błąd lub komputer napotyka instrukcję, która go zatrzymuje.
Pobieranie i wykonywanie instrukcji
Na początku każdego cyklu instrukcji, procesor pobiera instrukcję z pamięci, W zwykłym procesorze rejestr zwany licznikiem rozkazów (PC - program counter) przetrzymuje adres instrukcji, która ma być następni pobrana. W przeciwnym wypadku procesor
zawsze zwiększa liczbę rozkazów pobrań po każdej instrukcji pobrania, aby pobrano następną instrukcją w kolejności ( to znaczy, instrukcję umieszczoną w wyższym adresie pamięci), Dlatego, na przykład, rozważmy komputer, w którym każda instrukcja zajmuje 16-bitów pamięci. Przypuśćmy, że licznik rozkazów jest ulokowany w lokacji 300. Procesor pobierze następnie instrukcję z lokacji pod adresem 300, W następującym cyklu instrukcji, zostaną pobrane instrukcje z lokacji 301, 302, 303 i tak dalej. Ta sekwencja może być zmieniona, jak zostało teraz wytłumaczone.
Pobrana instrukcja jest ładowana do rejestru w procesorze znana jako instrukcja rejestru (IR - instruction register). Instrukcja zawiera bity, które określają działanie, jakie ma podjąć procesor, CPU interpretuje instrukcję i wykonuje wymaganą akcję. Ogółem akcje te składają się z czterech kategorii:
- Pamięć-procesor : Dane mogą być przenoszone z procesora do pamięci, i z pamięci do procesora/
- Procesor-moduł I/O: Dane mogą być przenoszone z/do urządzenia peryferyjnego poprzez transfer między procesorem, a modułem I/O.
-Przetwarzanie danych: Procesor może wykonywać logiczne lub arytmetyczne operacje na danych.
-Kontrola: Instrukcja może określić zmianę sekwencji wykonywania. Na przykład procesor może pobrać instrukcję z lokacji 149, która informuje, że następna instrukcja będzie w lokacji 182. Procesor zapamiętuje ten fakt ustawiając licznik pobrań na 182. Dlatego w następnym cyklu pobrań instrukcja będzie pobrana z lokacji 182, a nie 150.
Wykonywanie instrukcji może zawierać połączenie tych akcji. Zastanówmy się nad prostym przykładem używając hipotetycznej maszyny, która zawiera charakterystyki wypisane w ryc. 3.4. Procesor zawiera pojedynczy rejestr danych, zwany akumulatorem (AC). Oba instrukcje i dane mają po 16 bitów. W takim razie wygodnie jest, zorganizować pamięć używającą 16-bitowych słów. Format instrukcji zapewnia 4 bity dla kodu operacji (ang.opcode), aby mogło być tak dużo jak 2^4 = 16 różnych kodów operacji oraz aż do 2^12 = 4096 (4K) słów pamięci może być bezpośrednio zaadresowanych.
Rycina 3.5 ilustruje częściowe wykonanie programu, pokazując powszechne części pamięci i rejestru procesora1. Pokazany fragment programu dodaje zawartości pamięci z adresu 940 do zawartości pamięci z adresu 941
Notacja heksadecymalna jest użyta, w której każda cyfra symbolizuje 4 bity. To jest najwygodniejsza forma notacji dla reprezentowania zawartości pamięci i rejestrów, gdy długość słowa jest wielokrotności cyfry 4. Zobacz rozdział 19, jako powtórka systemów liczbowych ( decymalny, binarny, heksadecymalny).
adresu 941 i przechowuje wynik w najodleglejszej lokacji. Trzy instrukcje, które mogą być opisane jako trzy cykle pobrania i wykonania są wymagane :
1. Licznik rozkazów zawiera 300, adres pierwszej instrukcji. Instrukcja ta( wartość 1940 w systemie szesnastkowym) jest ładowana z rejestru instrukcji i licznik pobrań zostaje zwiększony. Zauważcie, że proces zawiera użycie rejestru adresu pamięci i buforu rejestru pamięci. Dla uproszczenia te pośrednie rejestry są ignorowane.
2. Pierwsze 4 bity ( pierwsza heksadecymalna cyfra) w rejestrze wskazują, że akumulator musi być załadowany. Pozostałe 12 bitów ( trzy heksadecymalne cyfry) określają adres(940), z którego dane mają być załadowane.
3. Następna instrukcja (5941) jest pobierana z lokacji 301 oraz licznik pobrań jest powiększany.
4. Stare zawartości licznika pobrań oraz zawartości z lokacji 941 są dodawane i w rezultacie składowane w liczniku pobrań.
5. Następna instrukcja (2941) jest pobierana z lokacji 302 i licznik pobrań jest powiększany.
6. Zawartości licznika pobrań są przechowywane w lokacji 941.
W tym przykładzie trzy cykle instrukcji, każdy składający się z cyklu pobrań i wykonań, są potrzebne di dodania zawartości z adresu 940 do zawartości lokacji 941. Z bardziej złożonym zestawem instrukcji, mniej cyklów byłoby potrzebnych. Niektóre starsze procesory, na przykład zawierające instrukcje, które mają więcej niż jeden adres pamięci. Dlatego cykl wykonywania poszczególnej instrukcji na takich procesorach może mieć więcej niż jedno odniesienie do pamięci. Również zamiast odnośników pamięci, instrukcja może określać operację I/O.
Na przykład procesor PDP-11 zawiera instrukcję, wyrażoną symbolami takimi jak ADD B, A która przechowuje sumę zawartości lokacji pamięci B i A w lokacji pamięci A. Pojedynczy cykl instrukcji z następującymi krokami :
- Pobierz instrukcję ADD.
-Odczytaj zawartość lokacji pamięci A w procesorze.
-Odczytaj zawartość lokacji pamięci B w procesorze. Aby nie stracić zawartości z adresu A, procesor musi mieć przynajmniej dwa rejestry do przechowywania wartości pamięci, niż pojedynczy akumulator.
- Dodaj dwie wartości
- Zapisz wynik z procesora do do pamięci pod adresem A.
Dlatego, cykl wykonywania dla poszczególnej instrukcji może zawierać więcej niż jedno odniesienie do pamięci. Więc zamiast odnośników pamięć, instrukcja może określić operację I/O. Razem z tymi dodatkowymi rozważeniami, rycina 3.6 daje nam dokładniejszy wzgląd na prosty cykl instrukcji z ryc. 3.3. Rycina jest w formie algorytmu. Dla każdego danego cyklu instrukcji, niektóre stany mogą być zerowe, a inne mogą być odwiedzone więcej niż raz. Stany mogą być opisane następująco:
- Adres instrukcji kalkulacji : Określa adres następnej instrukcji do wykonania. Zwykle, wymaga to dodania określonego numer do
adresu z poprzedniej instrukcji. Na przykład, jeśli każda instrukcja jest 16-bitowa i pamięć jest zorganizowana dla 16-bitowych słów, następnie dodajcie 1 do poprzedniego adresu. Jeżeli zamiast tego instrukcja jest zorganizowana jako indywidualnie adresowalna 8-bitowa, następnie dodajcie 2 do poprzedniego adresu.
- Pobieranie instrukcji: Odczytaj instrukcję z jej adresu pamięci do procesora.
- Operacja odkodowywania instrukcji : Przeanalizuj instrukcji w celu określenia typu operacji, która ma być wykonana i jakie operandy mają być użyte.
-Kalkulacja adresu operandu: Jeśli operacja zawiera odnośnik do operandu w pamięci lub jest dostępna przez I/O, określ następnie adres operandu.
-Pobieranie operandu : Pobierz operand z pamięci lub odczytaj z urządzenia I/O
- Operacja na danych: Wykonaj operację wskazaną w instrukcji
- Przechowywanie operandu: Zapisz wynik w pamięci albo w urządzeniu I/O
Stany w górnej części ryc.3.6 przedstawiają wymianę między procesorem i pamięcią lub modułem I/O. Stany w dolnej części diagramu zawierają tylko wewnętrzne operacje procesora. Stan oac pojawia się dwa razy, ponieważ instrukcja może zawierać odczyt lub zapis, lub oba. Jednakże akcja wykonywana w czasie stanu jest fundamentalnie taka sama w obu przypadkach i tylko pojedynczy identyfikator stanu jest wymagany.
Zauważcie również, że diagram zezwala na wielokrotne operandy i wyniki, gdyż niektóre instrukcje w pewnych maszynach wymagają tego.
Na przykład instrukcja procesora PDP-11 ADD A,B daje rezultat w następującej kolejności stanów: iac, if, iod, oac, of, oac, of, do, oac, os.
Ostatecznie, w niektórych maszynach, pojedyncza instrukcja może określić operację do wykonania na wektorze ( jednowymiarowy zbiór) numerów lub na łańcuchu ( jednowymiarowy zbiór) znaków. Jak wskazuje ryc. 3.6, mógłby to być powtarzający się operand pobrania i/lub operacji przechowywania.
Programowy - generowany przez pewien stan, który występuje jako rezultat instrukcji wykonania, takiej jak zbyt duża ilość działań arytmetycznych, dzielenie przez zero, wykonanie niedozwolonej maszynie instrukcji lub odnośnik poza miejscem pamięci zezwolonym dla użytkownika
Timer - generowane przez timer wewnątrz procesora. Zezwala to systemowi operacyjnemu wykonać określone funkcje na zwykłym podłożu
I/O generowane przez kontroler I/O, aby sygnalizować wykonanie operacji lub sygnalizować różnorodność stanów błędu
Błąd sprzętowy - generowane przez błędy takie jak zanik zasilania lub błąd spójności pamięci.
tablica 3.1 Rodzaje przerwań
Prawie wszystkie komputery zapewniają mechanizm, przez który inne moduły (I/O, pamięć) mogą przerywać normalne przetwarzanie procesora. Tablica 3.1 przedstawia najpowszechniejsze rodzaje przerwań. Specyficzna natura tych przerwań jest sprawdzona później w tej książce, szczególnie w rozdziałach 7 i 12. Potrzebujemy jednak przedstawić koncepcję w tej chwili, żeby zrozumieć lepiej naturę cyklu instrukcji oraz implikacje przerwań połączeń struktury/ Czytelnik nie musi się martwić na tym poziomie o detale generowania i przetwarzania przerwań, lecz tylko skupić się na komunikacji między modułami, które są skutkami przerwań.
Przerwania są wstępnie zapieniane jako sposób poprawy efektywności przetwarzania. Na przykład, najbardziej zewnętrzne urządzenia są o wiele wolniejsze niż procesor. Załóżmy, że procesor przenosi dane do drukarki, używając schematu cyklu instrukcji z ryc.3.3. Po każdej operacji zapisu, procesor musi się zatrzymać i pozostać w stanie bezczynności dopóki drukarka nie wykona żądania. Długość tej pauzy może być z rzędu wielu setek lub nawet tysięcy cyklów instrukcji, które nie potrzebują pamięci. To jest oczywiście bardzo marnotrawny sposób użycia procesora.
Ryc.3.7a ukazuje ten stan rzeczy. Program użytkownika wykonuje serię wywołań zapisu pozostawionej z przetwarzaniem. Segmenty kodów 1, 2 i 3 odnoszą się do sekwencji instrukcji, które nie wchodzą w skład I/O. Wywołania zapisu są do programu I/O, który jest usługą systemową i który przetworzy obecną operację I/O. Program I/O składa się z trzech
części :
- Sekwencja instrukcji, oznaczona 4 na rycinie, do przygotowania do rzecziwistej operacji I/O. To może zawierać kopiowanie danych, aby były wyjściowe do specialnego bufora i przygotowywanie parametrów dla komend urządzenia.
- Rzeczywista komenda I/O. Bez użycia przerwań, od razu, gdy ta komenda jest wywołana, program musi czekać na urządzenie I/O, w celu wykonania wymaganej funkcji( lub okresowo wybrać urządzenie). Program może czekać poprzez poprzez proste, powtarzające się wykonywanie operacji testującej, aby stwierdzić, czy operacja I/O została wykonana.
- Sekwencja instrukcji ,oznaczona 5 na rycinie, do zakończenia operacji. To może zawierać ustawianie flagi wskazującej powodzenie lub porażkę operacji.
75
Przetłumaczone przez Mateusz Muchowski
Przerwania i cykl instrukcji. Z przerwaniami, procesor może być zaangażowany w wykonywanie innych instrukcji podczas trwania operacji we/wyj. Rozważ przepływ sterowania na obrazku 3.7b. Jak przedtem, program użytkownika dochodzi do momentu, w którym powoduje przywołanie systemu w formie przywołania zapisu. Program we/wyj, który jest wywołany, w tym przypadku składa się jedynie z kodu przygotowawczego i właściwej komendy we/wyj. Po wykonaniu tych kilku instrukcji, sterownik powraca do programu użytkownika. W międzyczasie, zewnętrzne urządzenie jest zajęte przyjmowaniem danych z pamięci komputera i drukowaniem ich. Ta operacja we/wyj jest przeprowadzana z jednoczesnym wykonaniem instrukcji w programie użytkownika.
Kiedy urządzenie zewnętrzne stanie się gotowe do obsłużenia – czyli kiedy będzie gotowe do przyjęcia więcej danych od procesora, - moduł we/wyj dla tego urządzenia zewnętrznego prześle sygnał przerwij zadanie do procesora. Procesor odpowie poprzez zawieszenie operacji bieżącego programu, przechodząc do programu obsługującego te konkretne urządzenie we/wyj znane jako program obsługi procedury przerwania, i wznawia pierwotną egzekucję po obsłużeniu urządzenia. Punkty, w których występują przerwania są wskazywane przez gwiazdkę na rys. 3.7b.
Z punktu widzenia programu użytkownika, przerwanie jest dokładnie tym: przerwanie normalnej sekwencji egzekucji. Kiedy przetwarzanie przerwania jest skończone, egzekucja jest wznawiana (Rys. 3.8). Tak więc, program użytkownika nie musi posiadać specjalnego kodu aby dostosować przerwania; procesor i system operacyjny są odpowiedzialne za zawieszenie programu użytkownika a następnie wznowienie go w tym samym punkcie.
Aby dostosować przerwania, cykl przerwania jest dodany do cyklu instrukcji, jak pokazano na Rys. 3.9. W cyklu przerwania, procesor sprawdza czy
pojawiły się przerwania, wskazujące na obecność sygnału przerwania. Jeżeli żadne przerwania nie są w toku, procesor przechodzi do cyklu sprowadzania i pobiera następną instrukcję obecnego programu. Jeżeli przerwanie jest w toku, procesor czyni następująco:
Zawiesza egzekucję obecnie wykonywanego programu i zapisuje jego zawartość. To oznacza zapisanie adresu następnej instrukcji do wykonania (bieżąca zawartość licznika programu) i każde inne dane ważne dla obecnej aktywności procesora.
Ustawia licznik programu do adresu początkowego procedury przerwania obsługi.
Procesor teraz przechodzi do cyklu sprowadzania i pobiera pierwszą instrukcję w programie obsługi procedury przerwania, który obsłuży przerwanie. Generalnie, program obsługi przerwania jest częścią systemu operacyjnego. Zazwyczaj, program określa charakter przerwania i wykonuje niezbędne czynności. W przykładzie którego używaliśmy, program obsługi określa który moduł we/wyj wygenerował przerwanie i może przejść do programu, który napisze więcej danych do tego modułu we/wyj. Kiedy program obsługi procedury przerwania jest ukończony, procesor może wznowić egzekucję programu użytkownika w punkcie przerwania.
Jest oczywiste, że proces pociąga za sobą pewne obciążenia. By określić charakter przerwania i zdecydować się na odpowiednią czynność, wyegzekwowane muszą być wyegzekwowane (w programie obsługi procedury przerwania). Niemniej jednak, z powodu stosunkowo dużej ilości czasu, który byłby zmarnowany przez zwykłe czekanie na operacje we/wyj, procesor może być użyty dużo bardziej efektywnie z użyciem procedur przerwania.
By docenić wzrost efektywności, rozważ rys. 3.10, który jest diagramem koordynacji opartym na przepływie kontroli na rys. 3.7a i 3.7b. Rysunki 3.7b i 3.10 zakładają, że czas potrzebny na operację we/wyj jest stosunkowo krótki: mniej niż czas potrzebny na ukończenie egzekucji instrukcji pomiędzy operacjami zapisu w programie użytkownika. Bardziej typowy przypadek, szczególnie dla powolnych urządzeń jak drukarka, jest gdy, operacja we/wyj zajmuje dużo więcej czasu niż egzekucja sekwencji instrukcji użytkownika. Rysunek 3.7c wskazuje ten stan rzeczy. W tym przypadku, program użytkownika osiągnie drugie połączenie zapisu przed operacja we/wyj spowodowaną przez pierwsze połączenie jest
ukończone. W rezultacie, program użytkownika jest zawieszony w tym punkcie. Kiedy poprzedzająca operacja we/wyj jest ukończona, te nowe połączenie zapisu może być przetworzone, a rozpoczęta nowa operacja we/wyj. Rysunek 3.11 pokazuje skoordynowanie w tej sytuacji z i bez użycia operacji przerwania. Możemy zobaczyć, że efektywność wciąż rośnie ponieważ część czasu podczas którego operacja we/wyj jest w toku pokrywa się z egzekucją instrukcji użytkownika.
Rysunek 3.12 pokazuje zmieniony cykl instrukcji diagram stanu, który obejmuje przerwanie cyklu przetwarzania.
Przerwania wielokrotne Do tej pory, dyskusja skupiała się jedynie na występowaniu pojedynczemu przerwaniu. Jednakże, załóżmy, że mogą występować przerwania wielokrotne. Na przykład program może otrzymywać dane z linii komunikacyjnej i drukować rezultaty. Drukarka będzie generowała przerwanie za każdym razem gdy zakończy operację drukowania. Kontroler linii komunikacyjnej będzie generował przerwanie za każdym razem gry otrzyma dane. Jednostka może być albo pojedynczym znakiem albo blokiem, w zależności od charakteru dyscypliny łączności.
W każdym bądź razie, jest możliwe, aby nastąpiło przerwanie komunikacji podczas przetwarzania przerwania drukarki.
Zajmując się przerwaniami wielokrotnymi mogą być przyjęte dwa podejścia. Pierwsze to wyłączenie przerwania podczas gdy przerwanie jest przetwarzane. Wyłączone przerwanie oznacza po prostu, że procesor może i zignoruje sygnał żądania. Jeżeli podczas tego nastąpi przerwanie, generalnie pozostaje w oczekiwaniu i zostanie sprawdzone przez procesor po tym, jak procesor włączy przerwania. Tak więc, kiedy program użytkownika będzie wykonywany i nastąpi przerwanie, zostanie ono natychmiast wyłączone. Kiedy funkcja obsługi przerwania zakończy się, przerwania zostają włączone przed wznowieniem programu użytkownika, a procesor sprawdza czy wystąpiły dodatkowe przerwania. To podejście jest łatwe i przyjemne, gdyż obchodzenie się z przerwaniami odbywa się w ścisłej, sekwencyjnej kolejności (Rysunek 3.13a)
Wadą powyższego podejścia jest to, że nie bierze pod uwagę relatywnego priorytetu czy czasowo istotnych potrzeb. Na przykład, kiedy wejście nadejdzie od linii komunikacyjnej, może być potrzeba jego rychłego zaabsorbowania by zrobić miejsce na więcej wejścia. Jeżeli, pierwsza gałąź nie została przetworzona zanim dotrze druga gałąź, dane mogą być utracone.
Drugie podejście to zdefiniowanie priorytetów dla przerwań I pozwolenie dla przerwania o wyższym priorytecie spowodowanie, by program obsługi przerwań niższego priorytetu sam się przerwał (Rysunek 3.13b). Jako przykład drugiego podejścia, rozważ system z trzema urządzeniami we/wyj: drukarka, dysk i linia komunikacyjna z wzrastającymi priorytetami dla odpowiednio 2,4 i 5. Rysunek 3.14, oparty na przykładzie w [TANE97], ilustruje możliwa sekwencję. Program użytkownika rozpoczyna się na t=0. Na t=10, następuje przerwanie drukarki;
Informacja użytkownika jest położona na stosie systemu i egzekucja kontynuuje w funkcji obsługi przerwania (ISR). Podczas gdy ta funkcja jest dalej egzekwowana, na t=15 następują przerwania komunikacji. Ponieważ linia komunikacji ma wyższy priorytet niż drukarka, przerwanie jest honorowane. ISR drukarki jest przerwane, jego stan jest spychany na stos a egzekucja następuje w ISR komunikacji. Podczas gdy wykonuje się ta funkcja, następuje przerwanie dysku (t 20). Ponieważ to przerwanie jest niższego priorytetu, jest po prostu wstrzymane a ISR komunikacji dąży do ukończenia.
Kiedy ISR komunikacji jest ukończone (t=25), przywrócony zostaje poprzedni stan procesora, czyli egzekucja ISR drukarki. Jednakże, przed wykonaniem choćby pojedynczej instrukcji w tej funkcji, procesor honoruje przerwanie dysku wyższego rzędu i przekazuje kontrolę do dysku ISR. Jedynie kiedy ta funkcja jest ukończona (t=35) ISR drukarki zostaje wznowiona.
Kiedy ta funkcja się ukończy (t=40), kontrola zostaje nareszcie przekazana do programu użytkownika.
Funkcja wy/wyj
Do tej pory, omówiliśmy operację komputera kontrolowana przez procesor, i spoglądaliśmy głównie na interakcję procesora i pamięci. Dyskusja nawiązywała jedynie do roli komponentu we/wyj. Ta rola jest omówiona i Rozdziale 7, ale pobieżne wprowadzenie jest w kolejności tutaj.
Moduł we/wyj (np. kontroler dysku) może wymieniać dane bezpośrednio z procesorem. Tak jak procesor może zainicjować odczyt albo zapis z pamięcią, projektując adres konkretnej lokacji, procesor może też odczytać dane lub zapisać do modułu we/wyj. W tym drugim przypadku, procesor identyfikuje konkretne urządzenie które jest kontrolowane przez poszczególny moduł we/wyj. Tak więc, sekwencja instrukcji, formą podobna do tej z Rysunki 3.5, może wystąpić z instrukcjami we/wyj aniżeli z instrukcjami odnoszącymi się do pamięci.
W niektórych przypadkach, wskazanym jest by zezwolić wymianom we/wyj by zaszły bezpośrednio z pamięcią. W tym przypadku, procesor zapewnia modułowi we/wyj autorytet odczytania z lub zapisania do pamięci by transfer pamięci we/wyj mógł zajść bez zbędnego korzystania z procesora. Podczas takiego transferu, moduł we/wyj wydaje pamięci komendy zapisu lub odczytu, zwalniając procesor z odpowiedzialności za wymianę. Ta operacja jest znana jako bezpośredni dostęp do pamięci (DMA) i jest zbadany w rozdziale 7.
3.3 STRUKTURY ZESPOLONE
Komputer składa się z zestawu komponentów lub modułów trzech podstawowych typów (procesor, pamięć, we/wyj), które wzajemnie się komunikują. W efekcie, komputer jest siecią podstawowych modułów. Tak więc, muszą istnieć ścieżki dla połączenia modułów.
Zbiór ścieżek łączących różne moduły jest nazywany strukturą zespoloną. Konstrukcja tej struktury będzie zależała od wymian, które muszą zajść pomiędzy modułami.
Rysunek 3.15 wskazuje typy wymian które są niezbędne do wyznaczenia głównych form wejścia i wyjścia dla każdego z typów modułów:
Pamięć: Zazwyczaj, moduł pamięci składa się z N wyrazów jednakowej długości. Każdy wyraz jest przypisany dla unikalnego adresu numerycznego (0,1,…,N-1). Wyraz danych może być odczytany z lub zapisany do pamięci. Charakter operacji jest wskazywany przez sygnały kontroli odczytu i zapisu. Położenie operacji jest określane przez adres.
Moduł we/wyj: Z wewnętrznego (systemu komputera) punktu widzenia, we/wyj jest funkcjonalnie podobne do pamięci. Występują dwie operacje, odczyt i zapis. Ponadto, moduł we/wyj więcej niż jedno urządzenie zewnętrzne. Możemy odnieść się do każdego z interfejsów do urządzenia zewnętrznego jako port i nadać każdemu unikatowy adres (np. 0,1,…,M-1). Ponadto, istnieją zewnętrzne ścieżki danych dla wejścia i wyjścia danych urządzeniem zewnętrznym. Wreszcie, moduł we/wyj może być zdolny do wysłania sygnałów przerwania do procesora.
Procesor: Procesor odczytuje instrukcje i dane, zapisuje dane po przetworzeniu, i używa sygnałów kontrolnych do kontrolowania ogólną operację systemu . Również otrzymuje i wysyła sygnały przerwania.
Poprzedzająca lista określa dane do wymiany. Struktura zespolona musi podtrzymywać następujące typy transferu:
Z pamięci do procesora: Procesor odczytuje instrukcję lub jednostkę danych z pamięci.
Z procesora do pamięci: Procesor zapisuje jednostkę danych do pamięci.
We/wyj do procesora: Procesor odczytuje dane z urządzenia we/wyj przez moduł we/wyj.
Z procesora do We/wyj: Procesor przesyła dane do urządzenia we/wyj.
Z we/wyj do lub z pamięci: Dla tych dwóch przypadków, moduł we/wyj ma zezwolenie na wymianę danych bezpośrednio z pamięcią, bez przechodzenia przez procesor, używając bezpośredniego dostępu do pamięci (DMA).
Przez lata, wiele struktur zespolonych było wypróbowanych. Zdecydowanie najczęstszymi są struktury magistralowe i różne wielokrotne - magistralowe. Pozostała część tego rozdziału jest poświęcona oczenie struktur magistralowych.
Przetłumaczone przez : Cezary Skurzyński
Korelacje w magistralach
Magistrali jest to szlak komunikacyjny łączący dwa lub więcej urządzeń. Kluczową cechą
tej magistrali jest to, że ma wspólne medium. Wiele urządzeń podłączonych
do szyny i sygnały wysyłane przez urządzenia są dostępne do odbioru przez wszystkie
inne urządzenia podłączone do szyny. Jeśli dwa urządzenia transmitują w tym samym okresie czasu,
to ich sygnały będą się nakładać i staną się zniekształcone. Tak więc, tylko jedno urządzenie
może z powodzeniem nadawać sygnał w danym czasie.
Zazwyczaj magistrala składa się z wielu szlaków komunikacyjnych, czy linii. Każda
linia może przesyłać sygnały reprezentujące binarne 1 lub binarne 0. Z czasem,
sekwencja dwójkowa może być przesyłana na jednej linii. Wzięte razem,
kilka linii magistrali może być wykorzystywane do przekazywania binarnych cyfr jednocześnie (równolegle).
Na przykład 8-bitowa jednostka danych może być przesyłana w ciągu ośmiu linii magistrali.
System zawiera pewną liczbę różnych magistrali , które stanowią drogi
między elementami na różnych poziomach hierarchii systemu komputerowego. magistrali, który
łączy główne komponenty komputera (procesor, pamięć, urządzenia wej/wyj) jest nazywana magistralą systemową. Najczęściej struktury komputerowe są oparte na wykorzystaniu jednego lub więcej układów magistrali.
Struktura magistrali
Magistrala systemowa zawiera, typowo, od około 50 do setek poszczególnych linii. Każda
linia ma jedno znaczenie lub funkcję. Chociaż istnieje wiele różnych wzorów magistrali to, wszystkie linie magistrali można podzielić na trzy grupy funkcyjne (Rys. 3.16): dane, adres, i linie sterujące. Ponadto, mogą być też linie dystrybucji energii odpowiedzialne za zasilanie podłączonych modułów.
Linie danych udostępniają ścieżkę do przenoszenia danych między modułami systemu. Te
linie, zbiorczo nazywane są magistralą danych. Magistrala danych może składać się z 32, 64, 128, lub
jeszcze większej liczby oddzielnych linii, liczba linii jest określany jako szerokości
magistrali danych.
Ponieważ każda linia może mieć tylko 1 bit na raz, liczba linii określa ile bitów może być przenoszone w danej chwili. Szerokości magistrali jest kluczowym czynnikiem określającym ogólną wydajność systemu. Na przykład, jeżeli magistrala danych jest szerokości 32 bitów, a każda instrukcja jest 64 bitowa, to procesor musi przejść moduł pamięci dwukrotnie w czasie każdego cyklu instrukcji.
Linie adresowe są używane do wyznaczenia źródła lub przeznaczenia danych na magistrali danych. Na przykład, jeśli procesor chce odczytać słowo (8, 16, lub 32 bitów) danych z pamięci, umieszcza adres żądanego słowa na linie adresowe. Oczywiste jest, że szerokość magistrali adresowej określa maksymalną możliwą wydajność pamięci systemu. Ponadto, linie adresowe są również używane do zaadresowania portów wejścia / wyjścia. Zazwyczaj wyższe bity są używane do wyboru poszczególnych modułów na magistrali, a niższe bity określają lokalizację pamięci lub portu wejścia/wyjścia w module. Na przykład, na 8-bitowej magistrali, adres 01111111 może odwołać lokalizacje modułu w pamięci (moduł 0) na 128 słów, adres 10000000 i powyżej odnoszą się do urządzeń podłączonych do portu wejścia/wyjścia modułu (moduł 1).
Linie kontrolne służą do kontroli dostępu i użycia danych i linii adresowych. Ponieważ dane i linie adresowe są wspólne dla wszystkich komponentów, musi być sposób do kontrolowania ich stosowania. Sygnały sterujące przekazują zarówno polecenia i czas informacji pomiędzy modułami systemu. Sygnałów czasu wskazania ważności danych i informacji adresowej. Sygnały sterujące określić operacje do wykonania. Zazwyczaj linie kontrolne obejmują:
• Pamięć zapisu: Powoduje, że dane na magistrali są zapisywanie do danej lokalizacji
• Pamięć odczytu: Powoduje umieszczenie danych adresowanych lokalizacji w magistrali
• I / O zapisywanie: powoduje, że dane na magistrali wędrują do zaadresowanego portu I / O
• I / O odczytywanie: powoduje, że dane z zaadresowanego portu I / O, trafiają do magistrali
• Transfer ACK: Wskazuje, że dane zostały przyjęte z lub wprowadzane do magistrali
• Żądanie magistrali: Wskazuje, że moduł musi przejąć kontrolę nad magistralą
• Odpowiedź magistrali: Wskazuje, że moduł wnioskujący uzyskał kontrolę nad magistralą
• Żądanie przerwania: Wskazuje, że przerwanie jest w toku
• Przerwać ACK: Uznaje, że przerwanie zostało uznane
• Zegar: Jest używany do synchronizacji operacji
• Reset: Przywraca wszystkie moduły
Działanie magistrali jest w następujący sposób. Jeśli jeden moduł chce wysłać dane do drugiego, musi zrobić dwie rzeczy: (1) uzyskania użycia w automagistraliie, i (2) przesyłania danych magistrali. Jeśli jeden moduł pragnie zwrócić dane z innego modułu, musi (1) uzyskania wykorzystanie szyny, i (2) przekazuje się żądanie do modułu drugiej ponad odpowiednią kontrolę i linie adresowe. Następnie musi czekać na tego drugiego modułu do wysłać dane.
Fizycznie magistrala systemowa jest faktycznie liczba równoległych przewodów elektrycznych. W klasycznym układzie magistrali, te przewody są metalowe linie wyryte
na karcie lub płytę (Printed Circuit Board). Rozciąga magistrali systemu wszystkie
Składniki, z których każdy w zawory niektórych lub wszystkich linii magistrali. Classic
fizyczne rozmieszczenie jest przedstawiony na fig. 3,17.
W tym przykładzie, magistrali składa dwóch pionowych kolumnach przewodów. W regularnych odstępach czasu, na kolumnach. Punkty mocowania są w postaci szczeliny, która rozciąga się poziomo do obsługuje płytkę drukowaną. Każda z głównych składników systemu zajmuje jedna lub więcej kart i podłączyć do magistrali w tych slots. The aranżacji całego jest umieszczony w obudowie. System ten może być stosowany przez niektóre z automagistraliów związanych z systemem komputerowym. Jednakże, współczesne systemy mają zwykle wszystkie główne elementy na tym samym pokładzie z więcej elementów na tym samym układzie co procesora. Zatem on-chip automagistrali może podłączyć procesor i pamięć cache podczas gdy na pokładzie automagistraliu może podłączyć procesor do pamięci głównej i innych składników.
Układ ten jest najbardziej dogodny. Mały komputer może być nabyta a następnie rozszerzył później (więcej pamięci, więcej I / O), dodając więcej płyt. Jeśli komponent na pokładzie nie powiedzie się, że płyta może być łatwo usunięte i zastąpione. Multiple - Magistrali Hierarchie Jeśli duża liczba urządzeń są podłączone do magistrali, wydajność będzie suffer.
Są dwie główne przyczyny:
Ogólnie, im więcej urządzenia podłączone do szyny, większa długość magistrali i stąd większe opóźnienie propagacji. Opóźnienie to określa czas jej urządzeń potrzebny koordynować wykorzystanie szyny. Podczas kontroli w automagistraliie przechodzi z jednego urządzenia do drugiego, często te opóźnienia propagacji może znacznie wpłynąć na wydajność.
Automagistrali może stać się wąskim gardłem w zagregowanym popytem transferu danych zbliża zdolności magistrali. Ten problem można przeciwdziałać niektórym stopniu przez zwiększenie szybkości transmisji danych, że automagistrali może udźwignąć i stosując szersze automagistraliy (np. zwiększając szynę danych z 32 do 64 bitów). Jednakże, ponieważ transmisji danych generowanych przez podłączone urządzenia (np. grafika i kontrolery video, Interfejsy sieciowe) są szybko rośnie, jest to rasa, że jeden automagistrali jest ostatecznie przeznaczone do stracenia.
W związku z powyższym, w większości systemów komputerowych używać wielu automagistraliów, ogólnie określone w hierarchia. Typowa tradycyjna konstrukcja jest pokazane na rysunku jest lokalne 3.18a.There automagistrali, który łączy procesor z pamięcią cache i że może obsługiwać jeden lub więcej urządzeń lokalnych. Kontroler pamięci cache łączy się nie tylko do pamięci podręcznej. Ten automagistraliem, ale do magistrali systemowej, które są dołączone wszystkie pamięci głównej modułów. Jak zostanie omówione w rozdziale 4, zastosowanie struktury cache izoluje procesor od wymogu, aby uzyskać dostęp do pamięci głównej często.
Pamięć może być ruszył miejscowego magistrali do magistrali systemowej. W ten sposób, I / O transfery do i z pamięci głównej przez magistralę systemu nie zakłócać aktywność procesora.
Możliwe jest połączenie kontrolerami wejścia / wyjścia bezpośrednio na magistrali systemowej. Więcej korzystnym rozwiązaniem jest wykorzystanie jednego lub więcej tego rozszerzenia automagistraliów purpose. An bufory interfejs magistrali danych rozszerzeń transfery między magistrali systemowej i wyjść I / Kontrolery na magistrali rozszerzeń. Ten układ umożliwia, aby system obsługuje szeroka gama urządzeń I / O, a jednocześnie izolować pamięć-procesor ruchu od I / O ruchu.
Rysunek 3.18a przedstawia niektóre typowe przykłady urządzeń I / O, które mogą być dołączone do magistrali rozszerzenia. Połączenia sieciowe obejmują sieci lokalnych (LAN), takie jak 10-Mbps Ethernet i połączenia do sieci rozległych (WAN), takich jak sieć z komutacją pakietów. SCSI (Small Computer System Interface) jest sam rodzaj automagistrali używany do wspierania lokalnych dysków twardych i innych urządzeń peryferyjnych. Port szeregowy może być wykorzystywane do obsługi drukarki lub skanera.
Ta tradycyjna architektura magistrali jest dość wydajny, ale zaczyna przebijać dół, coraz wyższej wydajności jest widoczny w I / O urządzenia. W odpowiedzi na żądania te rosnące, wspólne podejście przyjęte przez przemysł jest budowanie highspeed automagistrali jest ściśle związana z resztą systemu, wymaga tylko pomostem między procesora automagistraliu i szybkiego automagistraliem. Ten układ jest czasami jako architektury antresoli.
Rysunek 3.18b przedstawia typową realizację tego approach. Again istnieje lokalne magistrala łączy kontroler procesora, pamięci podręcznej, który jest z kolei połączony z magistrali system, który obsługuje pamięci głównej. Sterownik pamięci podręcznej jest zintegrowany. Urządzenie bridge lub buforowanie, które jest podłączane do magistrali dużych prędkości. Ten automagistrali obsługuje połączenia do szybkich sieci LAN, takie jak Fast Ethernet na 100 Mbps, filmów i kontrolery grafiki stacji roboczych, a także kontrolery interfejs do lokalnych obwodowych automagistraliów, w tym SCSI i FireWire. Ten ostatni jest szybki układ automagistrali specjalnie zaprojektowany do obsługi dużej pojemności urządzenia wejścia / wyjścia. Niższe prędkości urządzenia są nadal obsługiwane rabatu na magistrali rozszerzeń, z ruchu buforowania interfejsu pomiędzy magistrali rozszerzeń i szybki automagistrali.
Zaletą tego rozwiązania jest to, że szybki automagistrali przynosi highdemand urządzenia do bliższej integracji z procesora i w tym samym czasie jest niezależnie od procesora. Stąd, różnice w procesorze i szybkim automagistraliem. Prędkości i definicje linii sygnałowej są tolerowane. Zmiany w architekturze nie wpływają na szybki automagistrali, i vice versa.
Elementy projektowania Magistrali
Chociaż wiele różnych wdrożeniach magistrali istnieje, istnieje kilka podstawowych parametrów lub elementy projektu, które służą do klasyfikowania i różnicować rozkład.
Tabela 3.2 wymienia najważniejsze elementy. Linie TYPY MAGISTRALI może być podzielona na dwie ogólne kategorie: dedykowane i zwielokrotniony.
Specjalna linia automagistraliowa jest na stałe przypisany do jednej funkcji lub fizycznej podzbiór elementów komputera. Przykładem jest poświęcenie funkcjonalnej stosowanie oddzielnego dedykowanego adresu i linie danych, co jest powszechne w wielu automagistraliów. Jednakże, nie jest to konieczne. Na przykład, adres i dane mogą być przesyłane przez ten sam zestaw wierszy korzystając z adresu Ważny linii kontrolnej. Na początku transferu danych, adres jest umieszczony na magistrali i Adres Ważne linia jest aktywna. W tym momencie, każdy moduł ma określonego czasu, aby skopiować adres i określić, czy jest skierowana moduł. Adres jest usuwany z szyny i tej samej szynie
Przyłącza są stosowane do kolejnego odczytu lub zapisu danych sposobem transfer. This stosując te same linie dla wielu celów, jak wiadomo, w czasie zwielokrotniania. Zaletą multipleksowania czasu jest stosowanie mniejszej liczby linii, co pozwala zaoszczędzić miejsce i zazwyczaj kosztują. Wadą jest to, że układ jest bardziej złożony w potrzebne każdy moduł. Ponadto, istnieje możliwość zmniejszenia wydajności, ponieważ pewne wydarzenia, które akcje te same linie nie może odbywać się równolegle.
Fizyczne oddanie dotyczy zastosowania wielu automagistraliów, z których każdy łączy tylko podzbiór modułów. Typowym przykładem jest zastosowanie I / O do łączenia magistrali wszystkie moduły I / O, ten automagistrali jest następnie podłączony do magistrali głównej przez jakiegoś typu I / O adapter module. The Potencjalną zaletą fizycznego poświęcenia jest wysoka przepustowość, ponieważ jest mniej rywalizacji magistrali. Wadą jest większy rozmiar i koszt.
METODA Arbitrażowego w wszystkich, ale najprostsze systemy, więcej niż jeden moduł wymagają kontroli szyny. Na przykład, moduł I / O może być konieczne do odczytu lub zapisu bezpośrednio do pamięci, bez przesyłania danych do procesora. Ponieważ tylko jeden jednostka na raz może z powodzeniem przekazywać na automagistraliie, jakaś metoda arbitrażu jest needed. The różne metody można z grubsza klasyfikowane jako albo scentralizowane lub rozpowszechniany. W scentralizowanym systemie, jedno urządzenie, o którym mowa w automagistraliie kontroler lub arbiter jest odpowiedzialny za przydzielanie czasu na magistrali. The urządzenia może być oddzielny moduł lub część procesora.
W systemie rozproszonym, nie ma centralnego kontroler. Przeciwnie, każdy moduł zawiera logikę kontroli dostępu oraz moduły działać wspólnie, aby dzielić magistrali. With obie metody arbitrażu, celem jest wyznaczyć jednego urządzenia, albo procesor lub moduł I / O, jak pana. Mistrz może następnie zainicjować transfer danych (np. odczytu lub zapisu) z innym urządzeniem, które działa jako slave dla tego szczególnego dnia. Timing TIMING odnosi się do sposobu, w jaki wydarzenia są koordynowane w automagistraliie. Automagistraliy użyć synchronicznego czasu lub terminu asynchroniczne.
Synchronicznego czasu, występowanie zdarzeń na magistrali jest określana automagistraliem clock. The obejmuje linię zegara, na której zegar transmituje regularnego sekwencję przemiennego 1s i 0s równy. Single 1-0 transmisji jest określany jako cyklu zegarowego lub cyklu magistrali i określa przedział czasu. Wszystkie inne urządzenia na magistrali może odczytać linię zegara, i wszystkie zdarzenia rozpocząć na początku zegarem cykl. Rysunek 3.19 przedstawia typowy, ale uproszczone, wykres czasowy dla synchronicznego operacji odczytu i zapisu (patrz 3A Dodatek dla opisu przebiegami czasowymi).
Inne sygnały magistrali może zmienić się w przedniej krawędzi sygnału zegarowego (z niewielkie opóźnienie reakcji). Większość zdarzeń zajmują jednym cyklu zegara. W ten prosty przykład procesor umieszcza adres pamięci na liniach adresowych podczas pierwszego cykl zegara i może dochodzić różnych linii statusu. Po ustabilizowaniu linii adresowych, procesor wystawia adres włączyć sygnał. W operacji odczytu, problemy procesor polecenia odczytu na początku drugiego cyklu. Moduł pamięci rozpoznaje adres i, po upływie jednego cyklu, umieszcza dane na Dane lines. The procesor odczytuje dane z linii danych i odrzuca odczytać sygnał. Dla operacji zapisu, procesor umieszcza dane na linii danych na początku drugiego cyklu oraz zagadnień polecenie zapisu po liniach danych ustabilizował.
Moduł pamięci kopiuje informacje z linii danych podczas trzeci cykl zegara. Z asynchronicznym czasu, występowanie jednego zdarzenia w automagistraliie śledzi i zależy od wystąpienia poprzedniego zdarzenia. W prostym przykładzie odczyt Rys. 3.20a, adres miejsca, procesor i sygnały stanu w automagistraliie.
Później zatrzymując przez te sygnały do stabilizacji, wydaje polecenie odczytu, co wskazuje na obecność z aktualnego adresu i kontroli signals. The odpowiednie pamięci dekoduje adresowej i odpowiada przez umieszczenie danych na linii danych. Po linie danych mają stabilizowany, moduł pamięci potwierdza uznaną linię sygnału procesor, które są dostępne dane. Gdy kapitan odczytywać dane z danymi linii, to sygnał odczytu deasserts. To powoduje, że moduł pamięci upuść dane i uznać linie. Na koniec, gdy uznają przerwaniu, kapitan usuwa informacje adresowe.
Rysunek 3.20b przedstawia prostą operację zapisu asynchronicznego. W tym przypadku, Master umieszcza dane z linii danych w tym samym czasie, która umieszcza się na sygnały Status i linie adresowe. Moduł pamięci odpowiada na polecenie zapisu przez kopiowanie danych z linii danych, a następnie dochodzeniu do potwierdzić Line .The Kapitan następnie spada sygnał zapisu i moduł pamięci spadnie potwierdzić sygnał.
Synchroniczne czas jest prostsze wdrożenie i przetestowanie. Jednakże, jest to mniej elastyczne niż asynchronicznym czasu. Ponieważ wszystkie urządzenia na magistrali synchronicznej są związane z stała stopa zegar, system nie może skorzystać z postępu w wydajności urządzenia. Z asynchronicznym czasu, mieszaninę powoli i szybkie urządzenia, za pomocą starszych i nowszych technologii, mogą dzielić się na automagistrali.
MAGISTRALI WIDTHWe już skierowana koncepcję szerokości width. The magistrali szyna danych ma wpływ na wydajność systemu: szerszej magistrali danych, większą Liczba bitów przesyłanych w jednym time. The szerokości magistrali adresowej wpływa od pojemności systemu: szersza szyna adresowa, tym większy wybór miejsc że można się odwoływać. Typ transferu danych Wreszcie automagistrali obsługuje różne typy danych transferowych, co ilustruje na rysunku 3.21.
Wszystkie automagistraliy obsługują zarówno zapisu (master do slave) i czytać (slave do opanowania) Transfery. W przypadku multipleksowej adresowej / danych magistrali, automagistrali jest pierwszy używane do określenia adresu i do przekazywania danych. W operacji odczytu, Jest to zwykle oczekiwania, a dane są pobierane z podrzędnego być umieścić w automagistraliie. Dla obu odczytu lub zapisu, może również być, jeśli jest to opóźnienie konieczne przejść przez arbitraż uzyskanie kontroli automagistrali do końca operacji (Tj., zajęcia automagistraliem do żądania odczytu lub zapisu, a następnie skorzystać z automagistraliu ponownie wykonać odczytu lub zapisu).
W przypadku dedykowanego adresu i automagistraliów danych, adres jest umieszczany na adres automagistrali i pozostaje tam, a dane wprowadzane są do magistrali danych. Dla operacji zapisu, Mistrz stawia danych na magistrali danych, jak tylko adres ma stabilizowane i niewolnik miał okazję do uznania jego adres. Dla odczytu operacja, niewolnik stawia danych na magistrali danych tak szybko jak to ujmuje swój zajęcia i pobierane dane. Istnieje również kilka operacji połączenie, że niektóre automagistraliy pozwalają. odczyt-modyfikacja-zapis operacji jest odczyt następuje bezpośrednio napisać do sam adres. Adres transmitowane tylko raz na początku operacji. Cała operacja jest typowo niepodzielne zapobieżenia dostępu do
Element danych przez innych potencjalnych mistrzów automagistraliowych. Głównym celem tego Możliwości jest ochrona wspólnych zasobów pamięci w systemie wieloprogramowanie (patrz rozdział 8). Odczytu po zapisu jest niepodzielna operacja składająca się z odpisów następuje bezpośrednio przez odczyt z tego samego adresu. Operacja odczytu może być wykonywane dla celów sprawdzenia.
Niektóre systemy automagistraliowe obsługują również transfer danych bloku. W tym przypadku, jeden adres cykl następnie N cykli danych. Pierwszy element dane przekazywane do lub z Podany adres; pozostałe pozycje danych są przesyłane do lub z późniejszych adresów.
Przetłumaczone przez Bartłomiej Cybula
4.3 Elementy wyglądu pamięci
Ta sekcja omawia ogół parametrów projektu pamięci i przedstawia niektóre typowe wyniki. Czasem odnosimy się do użycia pamięci w wysoko wydajnych komputerach (HPC). HPC radzi sobie z super komputerami i oprogramowaniem superkomputerów, szczególnie dla naukowych aplikacji które zawierają ogromne ilości danych, wektorów i składników
Tabela 4.2 Elementy projektu pamięci
Adresy pamięci
Logiczne
Fizyczne
Rozmiar pamięci
Funkcje mapowania
Bezpośrednia
Skojarzeniowa
Dzielenie pamięci podręcznej
Algorytm przemieszczania
Czyszczenie obszarów pamięci do którego dawno nie było odwołania (LRU)
Pierwszy na wejściu pierwszy na wyjściu (FIFO)
Najrzadziej używany (LFU)
Losowy
Sposoby zapisu
Bez buforowania
Z buforowaniem
Jednokrotny zapis
Rozmiar linii
Liczba pamięci
Jedno lub dwu poziomowa
Uogólniona lub podzielona
Przetwarzanie i użycie równorzędnych algorytmów. Projekt pamięci dla HPC jest całkiem inny niż dla innych platform sprzętu i aplikacji. Faktycznie, wielu badaczy odkryło, ze aplikacje HPC radzą sobie słabo na komputerach używających pamięci [BAIL93]. Inni badania od tego czasu pokazały, że hierarchia pamięci może być użyteczna w ulepszaniu osiągów jeśli oprogramowanie aplikacji jest ustawiona na wykorzystywanie pamięci [WANG99, PRES01].
Mimo, że jest ogromna ilość nowo wprowadzanych pamięci, jest kilka podstawowych projektów, które pozwalają klasyfikować i rozróżniać budowy pamięci. Tabela 4.2 zawiera kluczowe elementy.
Adresy pamięci
Prawie wszystkie niewbudowane i wiele wbudowanych procesorów używa pamięci wirtualnej, koncepcji omówione w rozdziale 8. Podstawą pamięci wirtualnej jest możliwość która pozwala programom adresować pamięć z jednostki logicznej bez względu na dostępną ilość dostępnej głównej pamięci fizycznej. Kiedy pamięć wirtualna jest używana, pola adresów instrukcji maszyny zawierają wirtualne adresy. Do odczytywania i zapisywania z pamięci głównej jednostka zarządzania pamięcią (MMU) tłumaczy każdy wirtualny adres w fizyczny adres w pamięci głównej.
Kiedy adresy wirtualne są w użyciu, programista może umieścić pamięć podręczną pomiędzy procesorem i MMU lub między MMU i pamięcią główną (Schemat 4.7). Pamięć logiczna nazywana również pamięcią wirtualną przechowuje dane używając adresów wirtualnych. Procesor ma dostęp do pamięci podręcznej bezpośrednio bez przechodzenia przez MMU. Fizyczna pamięć podręczna przechowuje dane używając fizycznych adresów pamięci głównej.
Oczywistą zaletą pamięci podręcznej jest to że prędkość dostępu jest większa nie w pamięci fizycznej ponieważ pamięć może odpowiadać zanim MMU dokona tłumaczenia adresu. Niedogodność wiąże się z faktem, że większość systemów pamięci wirtualnych dostarcza każdej aplikacji taki sam rozmiar pamięci. To znaczy, każda aplikacja widzi pamięć wirtualną która zaczyna się adresem 0. Tak więc, ten sam wirtualny adres w dwóch różnych aplikacjach odnosi się do dwóch różnych adresów fizycznych. Pamięć podręczna musi być zatem całkowicie wyczyszczona z każdą zmianą kontekstu lub muszą być dodane dodatkowe kawałki do każdej linii pamięci podręcznej, aby rozróżniać, który fragment pamięci wirtualnej się do niej odnosi.
Temat pamięć logiczna kontra fizyczna jest złożony i nie jest tematem tej książki. Dla głębszej dyskusji, zobacz [CEKL97] i [JACO08]
Rozmiar pamięci
Pierwsza rzecz z tabeli 4.2, pamięć podręczna została omówiona. Chcielibyśmy, aby rozmiar pamięci podręcznej był wystarczająco mały, aby suma średniego kosztu bitu głównej pamięci była zbliżona do kosztu samej pamięci głównej i wystarczająco duży, aby suma średnich czasów dostępu była zbliżona do czasu samej pamięci. Jest jeszcze kilka innych powodów minimalizowania rozmiaru pamięci podręcznej. Większa pamięć podręczna, większa liczba wejść zawierających w adresowaniu pamięci. Wynikiem jest to, że duże pamięci mają tendencje do bycia trochę wolniejszymi niż mniejsze, nawet jeśli układ zbudowany jest z tej samej zintegrowanej technologii i włożony w to samo miejsce na module i płycie drukowanej. Dostęp modułu i rozmiar płytki również ogranicza rozmiar pamięci. Wymagania pamięci podręcznej są bardzo wysokie z natury wysokiego obciążenia, niemożliwym jest skończyć przy pojedynczym "optymalnym" rozmiarze pamięci.
Tabela 4.3 przedstawia listę pamięci podręcznych niektórych obecnych oraz dawnych procesorów.
Funkcja mapowania
Z powodu mniejszej ilości linii pamięci niż bloków pamięci głównej, algorytm jest potrzebny do mapowania bloków głównej pamięci w linie pamięci. Idąc dalej, jest potrzebny sposób alby wybierać który blok pamięci głównej obecnie zajmuje linię pamięci. Wybór funkcji mapowania decyduje jak pamięć jest organizowana. Mogą zostać użyte trzy techniki: bezpośrednia, skojarzeniowa oraz dzielenie pamięci podręcznej. Przebadaliśmy każdy z nich po kolei. W każdy przypadku patrzymy na ogólną budowę, a potem szczegółowe przykłady.
Przykład 4.2 Dla każdego z 3 przypadków, przykład zawiera następujące elementy:
Pamięć może przetrzymywać 64Kb
Dane są przenoszone między pamięcią główną i pamięcią podręczną w blokach po 4 bajty każdy. To oznacza, że pamięć podręczna jest zorganizowana jako 16K = 214 linii po 4 bajty każda.
Głowna pamięć składa się z 16Mb z każdym bitem bezpośrednio adresowanym przez 24-bitowe adresy (224=16M). Na użytek mapowania, możemy rozważyć główną pamięć składającą się z 4M bloków po 4 bajty każdy.
Mapowanie bezpośrednie: Najprostsza technika, znana jako mapowanie bezpośrednie, mapa każdego bloku pamięci głównej w tylko jednej możliwej linii pamięci. Mapowanie jest wyrażone jako:
i=j modulo m
gdzie:
i = liczba linii pamięci
j = liczba bloków pamięci głównej
m = liczba linii w pamięci
Schemat 4.8 pokazuje mapowanie dla pierwszych m bloków pamięci głównej. Każdy blok pamięci głównej mapuje w jedną unikatową linię pamięci. Następne m bloki pamięci głównej mapują w pamięci w ten sam sposób; to znaczy, blok Bm pamięci głównej mapuje w linię L0 pamięci, blok Bm+1 mapuje w linię L1 itd.
Mapowania funkcji można łatwo zastosować używając adresu pamięci głównej. Schemat 4.9 ilustruje ogólny mechanizm. Dla użytku dostępu pamięci, każdy adres pamięci głównej może być widoczny jako składający się z 3 pól. Najmniej znaczącymi częściami są unikatowe słowa lub bajty wewnątrz bloku pamięci głównej; w większości współczesnych maszyn, adresy są na poziomie bajtów. Pozostałem części s opisują jeden z 2S bloków pamięci głównej. Logika pamięci podręcznej interpretuje części s jako znak s - r (najbardziej znacząca część) i linia pola kawałka r. Pole końcowe rozpoznaj jeden z m = 2r linii pamięci podręcznej. Podsumowując,
Długość adresu = (s+ω) kawałków
Liczba adresowalnych jednostek = 2s+ω słów lub bajtów
Rozmiar bloku = rozmiar linii = 2ω słów lub bajtów
Liczba bloków w pamięci głównej = $\frac{2^{s + \omega}}{2^{\omega}}$= 2s
Liczba linii w pamięci podręcznej = m = 2r
Rozmiar pamięci podręcznej = 2r+ω słów lub bitów
Pojemność znaków = (s-r) części
Efektem takiego mapowanie jest to, że bloki pamięci głównej są przypisanie do linii pamięci podręcznej jak następuje:
Użycie części adresu jako liczba linii powoduje szczególne mapowanie każdego bloku pamięci w pamięci podręcznej. Kiedy blok jest właściwie czytany w przypisanej linii, niezbędnym jest oznaczenie danych, aby rozróżnić je z innych bloków które mogą pasować do tej linii. Większość znaczących s - r części spełnia to zadanie.
Przykład 4.2a Schemat 4.10 przedstawia przykładowy system używający bezpośredniego mapowania.5 W przykładzie m = 16K = 214 oraz i = j modulo 214. Mapowanie przedstawia się:
Trzeba zauważyć, że nie ma dwóch bloków które mapują w tej samej liczbie wyróżników liczbę. Bloki z adresami 000000, 010000, ... , FF0000 mają liczbę wyróżników 00, 01, ... , FF odpowiednio.
Odnosząc się do schematu 4.5, operacja odczytywania działa jak następuje. System pamięci podręcznej jest przedstawiany za pomocą 24 bitowych adresów. Numer linii 14 bitowej jest używany jako indeks w pamięci podręcznej, aby mieć dostęp do poszczególnych linii. Jeśli liczba wyróżnika 8 bitowego pasuje do wyróżnika obecnie przechowywanego w tej linii, wtedy 2 bitowy numer słowa jest używany aby wybrać jeden z czterobitowych w tej linii. W innym wypadku, 22 bitowe pola "wyróżnik plus linia" są używane aby pobrać blok z pamięci głównej. Właściwe adresy, które są używane do pobierania, to 22 bitowe "wyróżnik plus linia" powiązany z dwoma 0 bitami więc te 4bajty są połączone początkowo na złączeniu bloków.
5 W tym i następnym schemacie, wartości pamięci są reprezentowane w notacji heksalnej. Można w rozdziale 19 przypomnieć sobie podstawy systemów numerowych (dziesiątkowy, binarny, heksalny)
Technika bezpośredniego mapowania jest łatwa i niedroga do wdrożenia. Jej główną wadą jest obecność ustalonych pozycji dla każdego danego bloku. Jeśli zatem programowi zdarzy się odnosić do słów wielokrotnie z dwóch różnych bloków, które są zmapowane w tej samej linii, bloki w takim razie będą się stale zamieniać w pamięci w związku z czym współczynnik trafności będzie niski (zjawisko znane jako trashing)
4.11 Organizacja pamięci podręcznej skojarzeniowej
Jeden w przybliżeniu do niższej brakującej kary ma zapamiętać co było co było wyrzucone w przypadku, gdyby to było potrzebne jeszcze raz. Kiedy wyrzucone dane zostaną przywrócone, mogą być użyte ponownie małym kosztem. Takie przetwarzanie jest możliwe dzięki pamięci ofiary. Pamięć ofiary była oryginalnie zaproponowana jako zmniejszenie sprzeczności braku bezpośrednio zmapowanych fragmentów pamięci bez wpływu na szybkość dostępu. Pamięć ofiary jest całkowicie łączną pamięcią, której rozmiar jest zwykle między 4 a 16 liniami pamięci, znajduje się między bezpośrednią pamięcią zmapowaną L1 i następnym poziomem pamięci. Ta koncepcja jest rozwinięta w załączniku D.
Mapowanie skojarzeniowe
Mapowanie skojarzeniowe omija minusy mapowania bezpośredniego poprzez pozwolenie każdemu blokowi pamięci zostać załadowanym w dowolnej linii pamięci (4.8b). W tym przypadku, kontrola logiczna pamięci podręcznej interpretuje adres pamięci po prostu jako hasło i pole słowa. Pole hasła wyjątkowo rozpoznaje bloki pamięci głównej. Żeby zmusić czy blok jest w pamięci, jednostka logiczna pamięci podręcznej musi równocześnie zbadać każdą linię hasła dla dopasowania. Schemat 4.11 ilustruje logikę. Proszę zauważyć, że żadne pole w adresie nie koresponduje do liczby linii więc liczba linii w pamięci podręcznej nie jest wymuszana przez format adresu. Podsumowując,
Długość adresu = (s+ω) części
Liczba adresowalnych jednostek = 2s+ω słów lub bajtów
Rozmiar bloku = rozmiar linii = 2ω słów lub bajtów
Liczba bloków w pamięci głównej = $\frac{2^{s + \omega}}{2^{\omega}}$ = 2s
Liczba linii w pamięci podręcznej = niewymuszona
Rozmiar hasła = s części
Przykład 4.2b
Schemat 4.12 pokazuje przykład używania mapowania skojarzeniowego. Adresy pamięci głównej składają się z 22 bitowych wyróżników i 2 bitowej liczby bitów. 22 bitowy wyróżnik musi być przechowywany w 32 bitowymi blokami danych dla każdej linii w pamięci podręcznej. Trzeba zauważyć, że jest najbardziej po lewej (najbardziej znaczący) 22 bitów adresu, które tworzą wyróżnik. 24 bitowe adresy heksalne 16339C ma 22 bitowy wyróżnik 058CE7. Najprościej to zobaczyć w notacji binarnej
Przykład mapowania skojarzeniowego
Przy mapowaniu skojarzeniowym jest elastyczność jako który blok jest przenoszony kiedy nowy blok jest czytany w pamięci podręcznej. Algorytm przenoszenie, omówiony dalej w tej sekcji jest zaprojektowany, aby maksymalizować szansę trafienia. Zasadniczą wadą mapowania skojarzeniowego jest wymóg całkowitego obiegu haseł z wszystkich równorzędnych linii pamięci podręcznej.
Przetłumaczone przez : Mateusz Goeck
Rozdział 7/ moduł wejścia/wyjścia (I/O)
Kluczowe punkty
-Architekturą systemu komputera I/O jest jego interfejs na zewnętrzny świat.
Zapewnia ona systematyczne środki kontroli interakcji ze światem zewnętrznym i zaopatrza system operacyjny w informacje które potrzebuje aby zarządzać aktywnościami I/O efektywnie.
-Są trzy główne techniki I/O: zaprogramowany I/O, w którym I/O występuje pod bezpośrednią i stałą kontrolą programu wymagającego operacje I/O; przerywanie-uruchamiania I/O, w którym problemy programu są prowadzone przez I/O i następnie kontynuuje on wykonanie, az do momenty gdy są one przerwane przez sprzęt komputerowy do sygnału skończenia operacji I/O.; bezpośredni dostęp do pamięci (DMA), w którym specjalistyczny I/O procesor przejmuje kontrolę nad operacjami I/O aby poruszać dużymi blokami danych.
- Dwoma ważnymi przykładami zewnętrznego interfejsu I/O jest: duża wydajnościowa magistrala szeregowa oraz magistrala systemu.
Narzędzia projektowania systemu I/O
Oprócz procesora i zestawu modułów pamięci, trzecim kluczowym elementem
systemu komputerowego jest zbiorem modułów I/O. Każdy interfejsuje moduł do magistrali systemowej lub centralnego wyłącznika i kontrole jeden lub więcej urządzeń zewnetrznych. Moduł I/O nie jest po prostu zestawem łączników mechanicznych, łączących urządzenie w magistrale systemową. A,
Moduł I/O zawiera logikę do wykonywania funkcji komunikacji pomiędzy obwodami i magistalą. Czytelnik może się zastanawiać, dlaczego ktoś nie podłączył urządzeń bezpośrednio do systemu. Powody są następujące
- Istnieje wiele różnych urządzeń o różnych sposobach pracy.
Niepraktyczne byłoby włączenie niezbędnej logiki w procesor aby
kontrolować różne urządzenia.
- Szybkość przesyłania danych z urządzeń zewnętrznych jest często znacznie wolniej niż
pamięci lub procesora. Tak więc, nie jest praktycznie korzystać z szybkiej magistrali systemowej aby
komunikować się bezpośrednio z urządzeniem zewnętrznym
-Z drugiej strony, szybkość transmisji danych z niektórych urządzeń zewnętrznych jest szybsza niż, z pamięci lub procesora. Ponownie, niedopasowanie doprowadzi do niewydolności jeśli nie jest właściwie zarządzane.
-Urządzenia zewnętrzne często używają innych formatów danych i długości słowo niż komputer ,do którego są przypasowane.
Tak więc, moduł I / O jest wymagany. Moduł ten ma dwie główne funkcje
(Rys. 7.1):
• Interfejsuje do procesora i pamięci za pomocą magistrali systemowej lub przełącznika centralnego
• Interfejsuje do jednego lub więcej urządzeń peryferyjnych dostosowanych łączników danych
Rozpoczniemy ten rozdział z krótkim omówieniu urządzeń zewnętrznych, a następnie
omówienia struktury i funkcji I / O modulu. Następnie patrzymy na różne
sposoby, w jakie I / O Funkcja może być wykonywane we współpracy z procesorem i
pamięcią: wewnętrznym Interfejsem I/O. Wreszcie, badamy zewnętrzny I / O interfejs,
między modułem I / O, a światem zewnętrznym.
Urządzenia zewnętrzne
Operacje I / O są realizowane poprzez szeroki asortyment urządzeń zewnętrznych
zapewniających sposoby wymiany danych pomiędzy otoczeniem i
komputerem. Zewnętrzne urządzenie podłącza się do komputera za pomocą łącza do modułu I / O (Rys. 7.1).Połączenie jest używane do kontroli wymiany statusu oraz danych pomiędzy I / O modułu i urządzeniami zewnętrznymi .Urządzenie zewnętrzne podłączone do modułu I / O jest często określane jako urządzenie peryferyjne lub po prostu, obwodowe.
Możemy szeroko zaklasyfikować urządzenia zewnętrzne na trzy kategorie:
• czytelnej: Nadaje się do komunikacji z użytkownikiem komputera
• Maszyno czytelnej: Nadaje się do komunikacji z urządzeniami
• Komunikacjnej: Nadaje się do komunikacji z urządzeniami zdalnymi
Przykładem urządzeń czytelnych dla człowieka są zaciski wyświetlania wideo (VDTs) i
drukarek. Przykładami urządzeń do odczytu maszynowego są magnetyczne dyski i systemy taśmowe, oraz czujniki i elementy, takie które stosuje się w zastosowaniu robotyki. Zauważ, że
przeglądarki dysku i systemów taśmowych są w tym rozdziale jako urządzenia I / O, natomiast w rozdziale 6 obejrzeliśmy je jako urządzenia pamięci. Z funkcjonalnego punktu widzenia, te urządzenia
należą do hierarchii pamięci, a ich użycie jest omówione odpowiednio w rozdziale 6. Ze strukturalnego punktu widzenia, te urządzenia są sterowane przez moduły I/O
i tym samym należy je uznać w tym rozdziale. Urządzenia komunikacyjne pozwalają komputerowi na wymianę danych z urządzeniami zdalnymi, które mogą urządzeniami przystępnymi dla człowieka, takie jak terminal, urządzeniami odczytu maszynowego, lub nawet do innym komputerem.
W bardzo ogólny sposób, charakter urządzenia zewnętrznego jest wskazany na schemacie 7.2
Interfejs do modułu I / O jest w formie kontroli, danych i sygnałów statusowych.
Sygnały sterujące określają funkcję którą wykonana urządzenie, jak wysyłanie
danych do modułu I / O (wejście lub czytanie), zaakceptowanie danych z modułu I / O
(wyjscie lub pisanie), zgłosi status lub wykonać kilka funkcji kontrolnych w szczególności
do urządzenia (np. położenie głowicy dysku). Dane znajdują się w postaci zestawu bitów aby były
wysyłane i odbierane z modułu I/O. Sygnały stanu wskazują stan urządzenia.
Przykładami są gotowy/niegotowy, aby zobaczyć, czy urządzenie jest gotowe do
transferu danych.
Układy logiczne są związane z urządzeniem kontrolującym jego operacje w odpowiednio do kierunku
I / O przetwornika modułu . Przetwornik konwertuje dane z elektrycznej
do innych form energii podczas produkcji oraz z innych form do elektrycznej podczas
wejścia. Zazwyczaj bufor jest powiązany z przetwornikiem do tymczasowego trzymania danych
przenoszonych między modułami I / O i zewnętrznym środowiskiem; powszechna wielkość buforów to od 8 do 16 bitów. Interfejs między modułem I / O, a urządzeniem zewnętrznym zostanie zbadany
w sekcji 7.7. Interfejs między urządzeniem zewnętrznym i środowiskiem
wykracza poza zakres tej książki, ale kilka krótkich przykładów zostanie podanych tutaj.
Klawiatura / Monitor
Najczęstszym środkiem interakcji komputera / użytkownika układ jest klawiatura / monitor. Użytkownik podaje danych poprzez klawiaturę. Moc wejściowa jest następnie
przekazywane do komputera, a może być również wyświetlona na monitorze. Ponadto
Monitor wyświetla dane dostarczone przez komputer. Podstawową jednostką wymiany jest jej charakter. Z każdym charakterem związany jest kod, zazwyczaj 7 lub 8 bitów długości .Najczęściej używanym kodem tekstowym jest międzynarodowy.
Alfabet referencyjny (IRA) .1 Każdy znak w tym kodzie reprezentowana jest przez
unikalny 7-bitowy kod binarny, dlatego 128 różnych znaków może być reprezentowanych. Są dwa rodzaje: drukowany i kontrolny. Drukowane znaki są alfabetyczne,
numerycznych i specjalnych znaków, które mogą być drukowane na papierze lub wyświetlone na
ekranie. Niektóre znaki sterujące mają do czynienia z kontrolowaniem drukowania lub
wyświetlaniem znaków; przykładem jest powrót karetki. Inne znaki kontrolne są skoncentrowane na
procedurach komunikacyjnych. Zobacz dodatek F dla większej ilości szczegółów.
Dla klawiatury, jeśli użytkownik naciśnie klawisz, wytwarza elektroniczne
sygnał, który jest interpretowany przez przetwornik w klawiaturze i przetwarzany według języku
wzoru bitowego odpowiedniego kodu IRA. Ten wzór bitów jest przesyłany do
modułu I / O w komputerze . W komputerowej, tekst może być przechowywane w tym samym
kodzie IRA. Na wyjściu, znaki IRA kodu są przesyłane do urządzenia zewnętrznego
z I / O przetwornika modułu. Przetwornik w urządzeniu interpretuje ten kod i wysyła
wymagane sygnały elektryczne do urządzenia wyjściowego albo wyświetla wskazaną postać
lub wykonuje żądane funkcji sterowania.
Dysk
Dysk zawiera elektronikę do wymiany danych, sterowania i pozycjonowania sygnałów
z modułu I / O, plus elektronikę sterowania dysku odczyt / zapis mechanizmu.
W dysku z nieruchomą głowicą, przetwornik jest zdolny do konwersji pomiędzy magnetycznymi wzorami na ruchomej powierzchni dysku i bitami w buforze urządzenia (Rys. 7.2). Ruchoma głowica dysku musi być również w stanie spowodować, że ramię dysku poruszać się będzie promieniowo i w poprzek powierzchni dysku.