R-01.DOC

(737 KB) Pobierz
Szablon dla tlumaczy

Część I

Komputer z zewnątrz i od środka

W pierwszej części przedstawimy kolejno: budowę komputera, funkcjonalny model działania komputera, budowę i zadania systemu operacyjnego. Omówimy budowę sieci komputerowej, przedstawimy zalety i metody łączenia komputerów ze sobą. Osobny rozdział poświęciliśmy Internetowi — sieci globalnej, składającej się z wielu mniejszych sieci i łączących komputery na całej Ziemi. Część I kończy rozdział poświęcony prawu i netykiecie (etykiecie internautów).

Rozdział 1

Budowa i działanie komputera PC

Historia komputera klasy PC

 

Pierwszym elektronicznym komputerem był zbudowany przez Johna W. Mauchly w 1945 roku ENIAC. Było to prawdziwe monstrum o wadze 30 ton. Do budowy ENIAC-a użyto około 18 000 lamp elektronowych i dziesiątki tysięcy innych elementów. Podczas pracy pobierał ponad 150 kW mocy, tyle co 1 000 współczesnych komputerów klasy PC. Moc obliczeniowa maszyny wynosiła około 0,2 ms przy dodawaniu (5 000 operacji na sekundę ) podczas wykonywania bardziej złożonych obliczeń znacznie spadała. Moc obliczeniowa współczesnych komputerów jest co najmniej tysiące razy większa. Porównując pobór prądu przez ENIAC-a i jego możliwości obliczeniowe, można powiedzieć, że nasze domowe komputery PC są prawie milion razy sprawniejsze. Oznacza to, że w przeciągu półwiecza  sprawność komputerów wzrosła milion razy. Nie ma innej tak dynamicznej dyscypliny nauki i gospodarki w historii rozwoju ludzkości jak informatyka.

ENIAC pracował w systemie dziesiętnym, co znacznie ograniczało jego możliwości. Po modernizacji w1947 roku według zaleceń von Neumanna, komputer pracował na potrzeby armii amerykańskiej. W październiku 1955 roku maszyna została definitywnie wyłączona. Obecnie niektóre podzespoły ENIAC-a można zobaczyć w Smithsonian Institute w Waszyngtonie. Następnym ważnym krokiem w rozwoju informatyki było wynalezienie w 1947r. tranzystora (John Bardeen, Walter Bratain i Willian Shockley).

Wynalezienie tranzystora i zastosowanie go do budowy komputerów znacznie zmniejszyło rozmiary konstruowanych maszyn i zdecydowanie obniżyło moc pobieranego prądu podczas ich pracy. Ciągle udoskonalana technologia wytwarzania tranzystorów umożliwiła ich masową produkcję, co spowodowało obniżenie kosztów. Komputery stawały się coraz bardziej dostępne. Należy jednak pamiętać, że postęp w komputeryzacji to nie tylko rozwój elektroniki, ale również rozwiązania systemowe. John von Neumann w 1948r. przedstawił nową koncepcję struktury komputera – znacznie różniącą się od ENIAC-a. Pomysł von Neumanna polegał na prostym, choć niezwykle skutecznym rozwiązaniu. Umieścił on program i dane do programu we wspólnej pamięci. Rozwiązanie to, chociaż dzisiaj wydaje się oczywiste, w tamtych czasach było prawdziwie rewolucyjne. Pozwoliło znacznie zwiększyć prędkości obliczeniowe komputerów. Nie wszystko jednak wyglądało tak różowo. Największy problem w ówczesnych czasach mieli konstruktorzy z pamięcią operacyjną budowanych przez siebie maszyn. W pamięci tej miał być przechowywany aktualnie wykonywany program i dane do przetworzenia. Problem ten udało się rozwiązać stosując pamięć magnetyczną, wykorzystując jako nośniki  ferrytowe rdzenie. Umożliwiło to firmie IBM zbudowanie komputera IBM 701.

Pierwsze sygnały o możliwościach szybkiego postępu w miniaturyzacji komputerów związane były z zastosowaniem półprzewodników. Tranzystory zaczęły więc wypierać lampy elektronowe. Diody półprzewodnikowe zastąpiły diody lampowe, a więc rozmiary maszyn liczących zmniejszyły się wielokrotnie. Jednakże ciągle komputer był urządzeniem dużym i niezmiernie skomplikowanym w obsłudze. Na szczęście technologia półprzewodników okazała się wyjątkowo sprzyjać rozwojowi komputeryzacji. Zamiast łączyć ze sobą poszczególne elementy półprzewodnikowe na specjalnych płytkach (płytki drukowane), wykorzystano monokryształy krzemu (stosunkowo duże monokryształy jednorodnego półprzewodnika) do produkcji złożonych struktur elektronicznych, składających się z wielu tysięcy półprzewodnikowych elementów. Tak powstał układ scalony. Pierwszą firmą, która zastosowała nową technologię do produkcji komputerów, była amerykańska firma Texas Instrument. W 1961r. wyprodukowała komputer na potrzeby armii. Technologia układów scalonych otworzyła drogę do produkcji stosunkowo tanich , specjalistycznych modułów półprzewodnikowych, za pomocą których można było budować skomplikowane urządzenia elektroniczne znacznie prościej niż w przypadku tranzystorów. Układ scalony, który został zaprojektowany jako podstawowa jednostka obliczeniowa komputera, nazwano procesorem lub mikroprocesorem. W roku 1971 na rynku pojawił się procesor 4004 zawierający 2500 tranzystorów upakowanych w objętość pudełka od zapałek. Od tej pory rozpoczął się prawdziwy wyścig na rynku procesorów.

Dziesięć lat później, w 1981 roku, IBM zaprezentował pierwszy komputer IBM PC — komputer osobisty z systemem operacyjnym MS DOS 1.0.

 

Architektura komputera

Współczesne komputery PC składają się z trzech podstawowych elementów:

-          jednostki centralnej umieszczonej w specjalnej obudowie

-          niezbędnych do pracy z komputerem: monitora i klawiatury

-          dodatkowych urządzeń peryferyjnych podłączanych do jednostki centralnej

Jednostka centralna

Najważniejszym elementem współczesnego komputera jest mikroprocesor. Łatwo go znaleźć na płycie głównej, gdyż cechuje się sporymi rozmiarami (w stosunku do innych elementów) oraz najczęściej jest zaopatrzony w duży radiator z tzw. coolerem (wiatraczkiem, który go chłodzi). Mimo, iż jest to jeden układ scalony, jego wewnętrzna struktura jest bardzo skomplikowana. Mikroprocesor posiada tzw. listę rozkazów przez analogię do języka, którym posługują się ludzie można powiedzieć, że lista rozkazów to słownik wyrazów, które rozumie procesor. Z tych słów rozkazów można zbudować dowolny program. Język mikroprocesora nazywamy językiem maszynowym, a jego bardziej zrozumiały dla ludzi zapis to asembler.

Niezależnie od producenta i typu, każdy procesor składa się z kilku podstawowych elementów:

-          jednostki sterującej, której zadaniem jest wykonywanie instrukcji programu i sterowanie przepływem danych

-          jednostki arytmetyczno logicznej (ALU – ang. Arithmetic logic unit), która zajmuje się realizowaniem prostych operacji matematycznych (dodawaniem i odejmowaniem liczb całkowitych) oraz porównywaniem prostych formatów danych

-          zestawu rejestrów, które przechowują dane do których wymagany jest bardzo szybki dostęp

-          interfejsów magistrali zapewniających łączność procesora ze światem zewnętrznym.

Procesor może dodatkowo zawierać pewne dodatkowe elementy:

-          pamięć cache, w której przechowywane są poprzednie i następne instrukcje, które wykona jednostka sterująca oraz najczęściej używane przez program dane. Pamięć cache dzielimy na cache rozkazów i cache danych. Zwykle mają one rozmiar 32 — 512 KB. Pamięć ta znacznie przyśpiesza działanie programów (łatwo się o tym przekonać poprzez jej wyłączenie – można to uzyskać wybierając w BIOS-ie komputera odpowiednią opcję). Wykorzystuje się tu fakt, że większość programów składa się z cyklicznie wykonywanych stosunkowo niewielkich procedur operujących na niewielkiej ilości danych. Dzięki temu wystarczy raz przesłać do procesora potrzebne informacje z wolnej pamięci zewnętrznej (znajdującej się na płycie głównej), następnie jednostka sterująca pobiera potrzebne dane z bardzo szybkiej pamięci cache. Pamięć ta może znajdować się zarówno w procesorze jak i na płycie głównej. Wyróżniamy różne poziomy pamięci cache: L1, L2 i L3. Obecnie praktycznie wykorzystywane są poziomy L1 i L2.

-          Elementy sterujące poborem mocy procesora. Umożliwiają one wyłączenie części niepotrzebnych układów i spowolnienie zegara procesora, co zmniejsza pobór prądu. Jest to szczególnie ważne w notebookach dzięki czemu można znacznie przedłużyć czas działania komputera bez ładowania baterii.

Szczególnym rodzajem procesora są tzw. mikroprocesory jednoukładowe. Oprócz wymienionych powyżej elementów zawierają one dodatkowo pamięć RAM i ROM z zapisanym programem oraz porty wejścia-wyjścia. Stanowią one jakby kompletny komputer, który może sterować innymi urządzeniami. Najbliższy mikroprocesor jednoukładowy znajduje się ... 2 cm pod twoimi palcami. Klawiatura to w rzeczywistości kompletny mikrokomputer zajmujący się przetwarzaniem sygnałów powstających przy naciskaniu klawiszy na odpowiednie kody, które są następnie transmitowane do właściwego komputera. Oprócz klawiatury mikroprocesory układowe są stosowane do sterowania różnymi urządzeniami w przemyśle oraz w sprzęcie AGD (kuchenki mikrofalowe, pralki, itd.).

W ostatnich latach szeroko rozpowszechniły się tzw. procesory sygnałowe DSP (ang. Digital Signal Processing). Są one podobne do mikroprocesorów jednoukładowych z bardzo uproszczoną listą rozkazów, dodatkowo zawierają przetwornik analogowo-cyfrowy i cyfrowo-analogowy. Dzięki temu mogą pobierać z zewnątrz jakiś analogowy sygnał, który po przetworzeniu na postać cyfrową jest przekształcany przez program mikroprocesora. Następnie jest z powrotem konwertowany na postać analogową. Procesory DSP znajdują zastosowanie w modemach, odtwarzaczach CD i różnych urządzeniach pomiarowych.

Poniżej opiszemy budowę i działanie procesora.

Wydawać by się mogło, że język maszynowy (i jego symboliczny zapis asembler) jest najprostszym językiem, którym posługuje się mikroprocesor. W rzeczywistości jest on pewnym rodzajem języka interpretowanego, którego interpreter zapisany jest w tzw. mikrokodzie zawartym w pamięci ROM mikroprocesora. Mikrokod składa się z instrukcji bezpośrednio sterujących różnymi cyfrowymi sygnałami w mikroprocesorze. Nie jest on dostępny dla użytkownika, jest umieszczany w mikroprocesorze podczas jego produkcji[1].

Szybkość działania mikroprocesora zależna jest oprócz jego budowy od sprawności mikrokodu. Im więcej „rozumie” on instrukcji tym łatwiej pisać skomplikowane programy w języku asemblera. Z drugiej strony taki nadmiar niepotrzebnych instrukcji, które można zastąpić sekwencjami kolejno wykonywanych prostszych poleceń znacznie zwalnia prędkość interpretacji przez mikrokod. Stało się to podstawą podziału procesorów na dwa podstawowe typy:

-          procesory RISC (ang. Reduced Instruction Set Computer)

-          oraz procesory CISC (ang. Complex Instruction Set Computer).

Procesory CISC realizują setki instrukcji, dzięki czemu znacznie łatwiej napisać na nie oprogramowanie. Przykładami tego typu procesorów są procesory Intel Pentium, AMD Athlon, Duron itd. Procesory RISC (np. SPARC, MIPS) realizują kilkadziesiąt podstawowych instrukcji. Dzięki temu działają one znacznie szybciej, chociaż są bardziej kłopotliwe w programowaniu. Niektóre mikroprocesory RISC nie zawierają mikrokodu, a rozkazy są bezpośrednio interpretowane przez logikę procesora.

Tak naprawdę wspomniane procesory Pentium są procesorami RISC, których program emuluje skomplikowaną listę rozkazów procesorów CISC. Umożliwia to zwiększenie szybkości działania procesora, jednocześnie udostępniając zaawansowaną listę rozkazów ułatwiajacą programowanie.

Cechą współczesnych procesorów jest tzw. przetwarzanie potokowe. Ponieważ procesor składa się z kilku niezależnych układów, pewne instrukcje mogą być wykonywane równolegle. Kiedy instrukcja zostanie zdekodowana przez układ kontrolny procesora jej dalszą realizacją zajmuje się inny moduł. W tym czasie jednostka sterująca jest wolna, dzięki przetwarzaniu potokowemu może ona w międzyczasie zająć się interpretacją kolejnej instrukcji. Podobnie w celu zwiększenia mocy obliczeniowej można powielić jednostki ALU. Ponieważ większość operacji matematycznych można przeprowadzać równolegle, w efekcie proces ten zwiększa liniowo moc obliczeniową procesora. Pewnym wyjątkiem są instrukcje warunkowe i skoki. Ponieważ w tym przypadku wykonywanie kolejnych instrukcji zależne jest od wyniku poprzedniej operacji, ich wykonanie jest wstrzymywane do czasu zakończenia realizacji instrukcji warunkowej.

Ponieważ instrukcje warunkowe i skoki stanowią ok. 30% instrukcji programu, aby przyśpieszyć działanie po natrafieniu na takie instrukcje procesor realizuje program tak jakby skok nie miał nastąpić. W momencie kiedy to założenie staje się prawdziwe, kolejnych kilka instrukcji jest już wykonywanych nie generując żadnego opóźnienia. W przypadku konieczności wykonania skoku ich rezultaty są po prostu anulowane, a interpretacja instrukcji odbywa się od początku w nowym miejscu. W niektórych procesorach po natrafieniu na instrukcję warunkową mikroprocesor równolegle realizuje obydwie alternatywy. Wynik operacji porównania decyduje, która alternatywa staje się obowiązującą. Oczywiście ten algorytm znacznie komplikuje budowę procesora, ale dzięki temu szybkość realizacji programu wzrasta wielokrotnie.

W każdym przypadku szybkość procesora jest ograniczana poprzez konieczność pobierania i kolejnego wykonywania instrukcji. Ograniczenie to znane jest jako wąskie gardło von Neumanna. Alternatywą do zwiększania szybkości działania procesora jest łączenie razem wielu procesorów i tworzenie tzw. komputerów równoległych. Ich moc obliczeniowa w pewnych zastosowaniach jest sumą mocy poszczególnych procesorów. Wiele zjawisk fizycznych może być interpretowanych równolegle, np. proces interpretacji obrazu nie wymaga szeregowej analizy poszczególnych pikseli. Tak więc jeśli zastosujemy wiele procesorów, to taka analiza zostanie zakończona o wiele szybciej. Prostszym przykładem może być obliczanie iloczynu kilku zmiennych: y=a1*a2*a3*a4. Jeśli mamy do dyspozycji jeden procesor, to musimy kolejno wykonać 3 mnożenia. W przypadku maszyny dwuprocesorowej wykonujemy co prawda nadal 3 mnożenia, ale dwa z nich możemy wykonywać wównolegle. W pierwszym etapie jednocześnie obliczamy iloczyny b1=a1*a2 i b2=a3*a4, w drugim etapie wykonujemy jedno mnożenie wyników pośrednich b1*b2 uzyskując wynik. W efekcie to samo równanie zostało obliczone o 1/3 szybciej. Jedyną wadą komputerów wieloprocesorowych jest trudność pisania oprogramowania, które mogłoby wykorzystywać ich możliwości.

Po tych kilku generalnych uwagach postaramy się opisać bardziej konkretną realizację mikroprocesora. Każdy procesor zawiera pewien zestaw rejestrów odpowiedników zmiennych w językach wyższego poziomu. Rejestry służą do przechowywania i manipulacji danymi, przy czym nie rozróżniają ich typów. Każda wartość w rejestrze procesora jest po prostu ciągiem bitów. Ich interpretacja zależna jest od programisty. Oczywiście same rejestry nie wystarczą do prawidłowej realizacji programu. Do poprawnej pracy potrzebne są pewne specjalne typy rejestrów tzw. rejestry sterujące. Przechowują one informacje dotyczące stanu procesora, adres wykonywanej instrukcji oraz adresy pewnych struktur o specjalnym znaczeniu. Przykładami takich rejestrów jest rejestr FLAGS zawierający znaczniki związane z ostatnio wykonywanymi instrukcjami. Np. po operacji porównania dwóch liczb na podstawie jego stanu można stwierdzić, jakie były wyniki porównania. Kolejnym rejestrem jest rejestr PC (ang. Program Counter) zawierający adres następnej do wykonania instrukcji. Specjalnym rejestrem jest rejestr stosu SP (ang. Stack Pointer). Stos jest strukturą, w której procesor przechowuje różne dane, np. dotyczące adresów podprogramów.

Przedstawiony zestaw rejestrów występuje w każdym procesorze, oprócz niego istnieją także tzw. rejestry danych i adresowe, ale ich omawianie daleko wykracza poza ramy tej książki. Dla uświadomienia sobie, jak w rzeczywistości wygląda praktyczna implementacja przedstawionego powyżej opisu procesora, podajemy schemat bokowy procesora firmy AMD Athlona.

 

Rys 1.1 schemat bokowy procesora Athlon

 

 

Opisany powyżej zestaw rejestrów wraz z interpretowanymi przez procesor instrukcjami jest wystarczający do realizacji praktycznie każdego zadania. Jednakże dla efektywnego działania procesor musi komunikować się ze światem zewnętrznym, chociażby dla wymiany informacji, wysłania wyników itd. W pierwszych komputerach systemy sprzęgające procesor z pozostałymi elementami komputera były niezwykle proste, ich działanie ograniczało się tylko do prostych elementów sterujących np. dostępem do pamięci. We współczesnych komputerach np. klasy PC za połączenie procesora z resztą odpowiadają wyspecjalizowane układy realizujące funkcje stopniem złożoności podobne do tych jakie realizuje sam procesor.

Funkcją kontrolera systemu jest sterowanie współpracą pomiędzy różnymi urządzeniami (zobacz rysunek 1.2). Przepływem informacji pomiędzy procesorem, pamięcią i tzw. kartami rozszerzeń steruje układ o enigmatycznej nazwie most północny (ang. North bridge). Oprócz przesyłania danych zajmuje się on sterowaniem magistralami PCI i AGP.

 

Rys 1.2 Zadaniem kontrolera systemu jest koordynacja pracy różnych modułów

 

Drugi sterownik to tzw. most południowy (ang. South bridge) zawierający porty szeregowe, równoległe, USB, interfejs do komunikacji z szyną ISA oraz sterowniki twardego dysku i dyskietek. Po otwarciu obudowy swojego komputera powinieneś zabaczyć coś, co przypomina rysunek 1.3. Jako ćwiczenie możesz spróbować odnaleźć w swoim komputerze wszystkie elementy, o których mówiliśmy w tym rozdziale.

 

 

Rys 1.3

Rozmieszczenie modułów na płycie głównej

 

 

Wewnętrzne magistrale przeznaczone dla kart rozszerzeń

 

Magistrala ISA

Do magistrali ISA można podłączyć zarówno 8., jaki i 16. bitowe karty. Karty 8. bitowe wykorzystują pierwsze 62 styki magistrali[2], karty 16. bitowe — wszystkie 96 styków. Magistrala ISA była podstawową magistralą komputerów od modelu XT do 486. Dzisiaj coraz mniej urządzeń wykorzystuje tę magistralę, a co za tym idzie coraz częściej nowe modele płyt głównych nie posiadają — lub posiadają tylko  jedną — magistralę ISA. Odczyt i zapis danych może odbywać się w jednym z poniższych trybów:

-          tryb DMA

-          pojedyńczy tryb wymiany

-          tryb wymiany na żądanie

-          blokowy tryb wymiany

Dla celów wyłącznie poglądowych poniżej krótko opiszemy ostatni z wymienionych trybów:

Wymiana danych sterowana jest przez dwa kaskadowo połączone kontrolery DMA (DMAC). Urządzenie DMA zgłasza żądanie wymiany danych poprzez  ustawienie "stanu wysokiego" na właściwej linii DRQ (DMA request) magistrali. Kontroler DMAC odpowiada ustawiając na linii AEN (Adress enable) stan wysoki i potwierdza przyjęcie żądania przy użyciu linii DACK (DMA acknowledge). Oznacza to przejęcie kontroli nad magistralą przez urządzenie DMA. Odpowiadając na sygnał DACK dezaktywuje ono sygnał DRQ. Kontroler DMAC umieszcza adres dla transmisji DMA na magistrali adresowej. Rozpoczyna się cykliczna wymiana danych pomiędzy urządzeniem a pamięcią operacyjną komputera. Kiedy wymiana zostanie zakończona kontroler DMAC generuje sygnał T/C (Transmission complet).

Magistrala PCI

Magistrala PCI została zaprojektowana przez firmę Intel. W porównaniu z magistralą ISA cechuje ją  duża szybkość pracy i ścisłe dopasowanie do budowy procesora. Maksymalna przepustowość magistrali PCI wynosi 528 MB/s[3]. Co ciekawe, minimalny transfer poprzez magistrale wynosi 0 Bps — magistrala PCI może działać tak wolno, jak wymaga tego najwolniejsze urządzenie. PCI jest obowiązującym standardem dla producentów sprzętu komputerowego, co oznacza, że urządzenia PCI wykorzystuje te same, ustalone zakresy adresów. W efekcie urządzenia PCI, inaczej niż ISA, nie powodują konfliktów sprzętowych związanych z adresowaniem. W celu zachowania kompabitylności z BIOS-em urządzenie PCI symulują rezerwacje tych samych adresów, co urządzenia ISA. Na przykład karta grafiki PCI VGA nadal sygnalizuje, że jest obecna pod adresem 3C0, rezerwuje obszar transferu danych od adresu A000 do BFFF i używa zakresu adresów BIOS-a od C00 do C7FF. Kolejnym atutem magistrali PCI jest pełna obsługa przez urządzenia PCI standardu plug and play. Konfiguracja urządzeń PCI jest w pełni zautomatyzowana. Adresy i przerwania są przypisywane według fizycznego rozmieszczenia kart na płycie głównej. BIOS nie dopuszcza do błędnego — wywołującego konflikty — skonfigurowania urządzeń PCI.

Magistrala AGP

Szybki port grafiki (ang. Accelerated Graphics Port, AGP) zaprojektowany został jako uzupełnienie — a nie jako następca — magistrali PCI. Udostępnienie karcie grafiki dowolnej ilości pamięci operacyjnej plus bezpośredni transfer danych poprzez niezależną szynę graficzną zaowocowały prawdziwym przełomem w grafice trójwymiarowej. Przykładem wykorzystania możliwości magistrali AGP jest opracowana przez Intel-a technologia DIME (ang. Direct memory execute). Magistrala AGP może pracować w jednym z czterech "stopni przepustowości":

-          AGP *1 — urzędzenie pracuje z częstotliwością taktowania magistrali, to znaczy z częstotliowością 66 MHz

-          AGP *2 — transfer danych pomiędzy urządzeniem a pamięcią wywołuje nie tylko narastające, ale również opadające zbocze sygnału zegara 66 MHz. W efekcie dane prezsyłane są potokowo, z przepustowością 528 MB/s

-          ...

Zgłoś jeśli naruszono regulamin