Professional Documents
Culture Documents
4 stycznia 2004
1
RC1 — Release Condidate 1, oznacza, że nie będzie żadnych istotnych mody-
fikacji, raczej będą usuwane wyłącznie błędy.
2
E-mail: fulmanp@math.uni.lodz.pl
3
E-mail: scibor@math.uni.lodz.pl
2
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Spis treści
Spis treści 3
Spis rysunków 9
1 Wstęp 15
1.1 Czym jest informatyka? . . . . . . . . . . . . . . . . . . . . . 15
1.2 Historia informatyki . . . . . . . . . . . . . . . . . . . . . . . 17
1.2.1 Bardzo dawno temu ... . . . . . . . . . . . . . . . . . . 17
1.2.2 Ostatnie tysiąclecie . . . . . . . . . . . . . . . . . . . . 19
1.2.3 Wiek XX . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3 Zastosowanie i przyszłość . . . . . . . . . . . . . . . . . . . . 27
1.4 Kierunki współczesnej informatyki . . . . . . . . . . . . . . . 29
1.4.1 Algorytmika . . . . . . . . . . . . . . . . . . . . . . . . 29
1.4.2 Bazy danych . . . . . . . . . . . . . . . . . . . . . . . 30
1.4.3 Grafika komputerowa . . . . . . . . . . . . . . . . . . 30
1.4.4 Kryptografia . . . . . . . . . . . . . . . . . . . . . . . 31
1.4.5 Programowanie . . . . . . . . . . . . . . . . . . . . . . 31
1.4.6 Sieci komputerowe . . . . . . . . . . . . . . . . . . . . 32
1.4.7 Systemy operacyjne . . . . . . . . . . . . . . . . . . . 33
1.4.8 Sztuczna inteligencja . . . . . . . . . . . . . . . . . . . 35
1.4.9 Teoria informacji . . . . . . . . . . . . . . . . . . . . . 36
1.5 Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
4 SPIS TREŚCI
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
SPIS TREŚCI 5
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6 SPIS TREŚCI
Bibliografia 257
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
SPIS TREŚCI 7
Indeks 260
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
8 SPIS TREŚCI
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Spis rysunków
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
10 SPIS RYSUNKÓW
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Przedmowa
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
12 SPIS RYSUNKÓW
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
SPIS RYSUNKÓW 13
w praktyce informatyka.
Rozdział 5 zawiera wprowadzenie do algorytmów i struktur danych.
Dział ten jest przedmiotem osobnego wykładu na studiach informatycznych.
Autorzy omówili podstawowe pojęcie tego przedmiotu i opisali te elementy,
co do których później zakłada się, że student je zna. Są to sposoby zapisu
algorytmów, za pomocą schematu blokowego, czy też pseudo-języka.
W rozdziale 6 czytelnik znajdzie informacje o historii i rozwoju języ-
ków programowania, oraz ich własnościach i próbach klasyfikacji. Języki
programowania jak i samo programowanie stanowią jeden z głównych dzia-
łów informatyki, bez którego nie istniały by programy, a z pewnością nie
pisano by ich tak szybko i efektywnie jak to się dzieje w chwili obecnej.
Stąd Autorzy starają się wprowadzić pewną wiedzą związaną z tym, czym
są języki programowania, co spowodowało powstanie tak wielkiej ich ilo-
ści, oraz w jaki sposób można je pogrupować i które z nich wykorzystać w
określonych sytuacjach.
Rozdział 7 zawiera omówienie podstawowych własności systemu opera-
cyjnego. Podział współczesnych systemów operacyjnych na kategorie, a na
końcu krótkie omówienie współczesnych systemów operacyjnych, głownie w
ujęciu historycznym. System operacyjny to zaraz po sprzęcie najważniejszy
element komputera, niejednokrotnie decydujący o jego sprawności i uży-
teczności. Stąd Autorzy starali się omówić różnice pomiędzy systemami
operacyjnymi na poziomie ich budowy, unikając odniesień, tam gdzie tylko
to możliwe, do rzeczywiście istniejących systemów. Główny powód takiego
postępowania, to niechęć do narzucania własnych poglądów, czy też upodo-
bań, oraz próba uniknięcia jakiejkolwiek formy reklamy. Stąd starano się
skoncentrować na wskazaniu gdzie i jakie cechy danego systemu mogą być
użyteczne, a gdzie można się bez nich obejść.
Ostatni rozdział 8 omawia zagadnienia związane z sieciami komputero-
wymi. Opisany jest podział ze względu fizyczną i logiczną strukturę sieci,
wprowadzone są podstawowe pojęci i jednostki. We współczesnym świe-
cie większość ludzi nie wyobraża sobie funkcjonowania bez komputera i to
komputera podłączonego do Internetu. A Internet to nic innego jak jeden
z aspektów wykorzystania sieci rozległych, wszelkie jego usługi, jak poczta
czy WWW działają wyłącznie w oparciu o transmisję danych poprzez sieć.
W rozdziale tym starano się przybliżyć problematykę sieci, zwrócić uwagę
na wady i zalety pewnych technologii czy sposobów konfiguracji sieci.
Na końcu podręcznika znajduje się zbiór dodatków, które mają być ro-
dzajem encyklopedycznego poradnika, po który zawsze łatwo sięgnąć. Do-
łączono również obszerny indeks, który ma ułatwić poruszanie się po całości
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
14 SPIS RYSUNKÓW
pracy.
Udostępniamy to opracowanie w nadziei, że ułatwi ono uporządkowanie
wiadomości z zakresu wykładu „Wstęp do informatyki” dla tych osób, które
takiego wykładu mogły wysłuchać. Pozostałe osoby, mamy nadzieję, rów-
nież mogą skorzystać z tego podręcznika, szczególnie jeśli są zainteresowane
omawianą problematyką i nie boją się uczyć indywidualnie.
Zainteresowanych czytelników zachęcamy do poszukiwania dalszych in-
formacji wymienionych w pozycjach bibliografii. Nawet jeśli któraś z nich
nie jest ściśle związana z omawianymi zagadnieniami, to umożliwi poszerze-
nie własnych horyzontów myślowych, pozwalając na samodzielny rozwój.
Ponieważ zdajemy sobie sprawę z własnej omylności, stąd informujemy,
że wszelkie poprawki do niniejszego wydania, jak i ewentualne uaktualnie-
nia, znajdą się na stronie internetowej:
http://???/
Jeśli ktokolwiek z grona znajdzie jakikolwiek błąd, niejasności czy też
będzie miał sugestie prosimy o kontakt za pomocą poczty elektronicznej na
adresy: fulmanp@math.uni.lodz.pl
scibor@math.uni.lodz.pl
Na koniec chcielibyśmy podziękować tym wszystkim, którzy pomogli
nadać podręcznikowi obecną jego formę, bądź to poprzez motywację, bądź
ciepliwie czytając pierwsze wersje i nanosząc poprawki. I tak Profesorowi
Andrzejowi Nowakowskimu za to, że powiedział: „Piszcie ten skrypt”, na-
szym koleżankom i kolegom: Oli Orpel, Jadwidze Nowak, Jankowi Pustel-
nikowi, Grześkowi Oleksikowi za czytanie i nanoszenie poprawek. Kilkuna-
stu studentom, którzy zgłosili błędy zauważone we wcześniejszych wersjach.
Oraz na końcu, lecz nie oznacza to, że z mniejszą wdzięcznością, Michałowi
Kędzierskiemu, za cierpliwe czytanie i poprawianie błędów językowych, sty-
listycznych i logicznych, dzięki czemu prawdopodobnie ten podręcznik w
ogóle daje się czytać.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Rozdział 1
Wstęp
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
16 Wstęp
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
1.2 Historia informatyki 17
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
18 Wstęp
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
1.2 Historia informatyki 19
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
20 Wstęp
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
1.2 Historia informatyki 21
Młyn
Dane
do
Sterowanie
"Programowanie"
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
22 Wstęp
1.2.3 Wiek XX
Jedną z najbardziej znanych i zasłużonych postaci historii informatyki jest
Alan Turing (1912-1954). Swoją sławę zawdzięcza opublikowaniu w 1936
roku pracy opisującej tok myślenia prowadzący od obliczeń ręcznych do
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
1.2 Historia informatyki 23
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
24 Wstęp
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
1.2 Historia informatyki 25
pędu taśmowego, stał się niezwykle popularny wśród osób zajmujących się
do tej pory elektroniką. Młody Bill Gates napisał dla niego język BA-
SIC (ang. Beginner’s All Purpose Symbolic Instruction Code). Mimo wielu
ograniczeń Altair zyskał ogromną popularność czego konsekwencją było po-
wstawanie coraz większej ilości firm produkujących tego rodzaju „zabawki”
— tak wówczas nazywano te urządzenia i tak o nich myślano. Praktycz-
nie wszystkie one działały pod kontrolą systemu operacyjnego nazywanego
CP/M (ang. Control Program/Monitor lub Control Program for Microcom-
puter) i wyprodukowanego przez małą kalifornijską firmę Digital Research.
Na skutek dużego zainteresowania rynku urządzeniami takiego typu, po-
wstają produkowane przez IBM komputery PC (ang. Personal Computer),
od których wzięła się nazwa jakby klasy — mówimy dziś „komputer PC” lub
„komputer klasy PC”. Należy tu jednak oddać sprawiedliwość i powiedzieć,
że przed komputerem firmy IBM, powstał inny o nazwie komputer Apple
II, który był pierwszy z całej gamy „ jabłuszek” do dziś znanych i bardzo
popularnych choć głównie na rynku amerykańskim. Co ciekawe komputery
Apple a później Macintosh dużo wcześniej od komputerów PC posiadały
interfejs graficzny, bo od roku 1985. Inna też była architektura: IBM PC
były i do dziś są oparte o rodzinę procesorów firmy INTEL 6 , zaś Apple
przez długie lata był związany z rodziną procesorów Motoroli, a obecnie
także PowerPC.
Na koniec tego krótkiego przeglądu wydarzeń z historii informatyki przed-
stawiamy zestawienie wybranych dat z historii rozwoju komputerów obecnej
generacji opartych na krzemie.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
26 Wstęp
1976 procesor Zilog Z80 – modyfikacja INTEL 8080, lista poleceń zawierała
176 rozkazów, prędkość zegara wynosiła 4 MHz;
1982 procesor INTEL 80286 — zawierał 134 tys. tranzystorów, mógł za-
adresować do 16 MB RAM, był taktowany zegarem 6 MHz;
1985 procesor INTEL 80386 — zawierał 275 tys. tranzystorów, był takto-
wany zegarem 16 MHz;
1989 procesor INTEL 80486 — zawierał 1.18 mln tranzystorów, był tak-
towany zegarem 25 MHz;
1993 procesor DEC Alpha — zawierał 1.7 mln tranzystorów, 300 MHz;
1995 procesor INTEL Pentium Pro — 5.5 mln tranzystorów, był taktowany
zegarem 200 MHz;
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
1.3 Zastosowanie i przyszłość 27
1999 procesor INTEL Pentium III — zawierał 9.9 mln tranzystorów, po-
czątkowo był taktowany zegarem 600 MHz;
• Przemysł
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
28 Wstęp
• Zastosowania cywilne
• Zastosowania militarne
• Biznes
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
1.4 Kierunki współczesnej informatyki 29
1.4.1 Algorytmika
Algorytmika jest jedną z najstarszych dziedzin informatyki, wynika to bez-
pośrednio z zakresu jaki obejmuje, a jest nim tworzenie i badanie algoryt-
mów. Poprzez badanie algorytmów rozumie się głównie zagadnienia zwią-
zane z teorią obliczalności, dzięki której można stwierdzić czy dany algorytm
da się w ogóle zrealizować w praktyce, a jeśli tak, to w jakim czasie 7 . Na-
leży podkreślić, że jest to jeden z działów, który swoim zakresem przenika
prawie wszystkie inne, oraz niejednokrotnie wykracza poza samą informa-
tykę, wnikając mocno w matematykę, technikę czy ekonomię. Patrząc na
historię algorytmiki okazuje się, że najbardziej fundamentalne prace z teorii
algorytmów pojawiły się w w latach trzydziestych. Można się temu dziwić,
gdyż jak to wynikało z rysu historii informatyki, wtedy nie istniał jeszcze
żaden komputer elektronowy a już na pewno elektroniczny. Jednak nie ma
w tym nic niezwykłego, algorytmika w swoim aspekcie teoretycznym nie po-
trzebuje w ogóle, lub tylko w minimalnym stopniu komputerów. To właśnie
w latach trzydziestych Alan Turing formułuje założenia Maszyny Turinga
(zob. 3.1) oraz wykorzystuje ją do formułowania teorii obliczalności [Tur36].
Stephen Kleene opisuje formalnie spójną klasę rekurencyjnie definiowalnych
funkcji teorioliczbowych [Kle36]. Z kolei Alonzo Church wymyśla inny spo-
sób opisu algorytmów, tzw. rachunek λ [Chu41]. Nieco później, bo w roku
1961, Andriej Markow proponuje jeszcze inny sposób opisu algorytmów —
opis oparty na łańcuchach [Mar54].
7
Istnieje cała klasa algorytmów, które są poprawne i wiemy, że dają dobre rezultaty
ale na przykład po 3000 lat.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
30 Wstęp
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
1.4 Kierunki współczesnej informatyki 31
1.4.4 Kryptografia
Odkąd sięga pamięć ludzka, to co cenne próbowano ukryć przed wzrokiem
czy dotykiem osób niepowołanych. Ponad 2000 lat temu dostrzeżono ko-
nieczność ukrywania informacji, na ten okres datuje się pierwszy znanym
szyfrem — szyfr Cezara. W chwili obecnej trudno sobie wyobrazić trans-
misję jakichkolwiek ważniejszych danych w komputerach bez stosowania
transmisji szyfrowanej przez protokół SSL. Większość programów pocz-
towych zawiera już wsparcie do szyfrowanego połączenia, a łącząc się z
bankiem w celu sprawdzenia stanu konta, serwer banku wymusza na prze-
glądarce połączanie za pomocą protokołu https, który jest niczym innym
jak zwykłym protokołem http „przepuszczanym” przez SSL.
Dziedzina wiedzy zajmująca się badaniem, tworzeniem i łamaniem szy-
frów to właśnie kryptografia. Jej gwałtowny rozwój zaczął się od roku
1975 i do dzisiejszego momentu pozostaje jedną z najdynamiczniej rozwija-
jących się dziedzin. Należy zaznaczyć, że jest ona przede wszystkim dzie-
dziną matematyki. Ponieważ jednak tak powszechnie jest wykorzystywana
w ochronie informacji stąd też badaniem jej zajmują się również informa-
tycy.
1.4.5 Programowanie
Programowanie jest jednym z działów informatyki, który jest właśnie z nią
kojarzony, nawet przez osoby niedoświadczone. Do niedawna samo stwier-
dzenie „Jestem programistą”, brzmiało prawie jak „Jestem wszechmocny”.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
32 Wstęp
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
1.4 Kierunki współczesnej informatyki 33
8
Polska została przyłączona do tego szkieletu w 1991 roku.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
34 Wstęp
9
PC (ang. Personal Computer) komputer osobisty, ogólnego przeznaczenia.
10
Mówiąc „rodzina INTEL” mamy na myśli procesory tej firmy oraz innych firm kom-
patybilne (zgodne) z nimi na poziomie listy rozkazów, przykładem może być rodzina
procesorów firmy AMD.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
1.4 Kierunki współczesnej informatyki 35
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
36 Wstęp
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
1.5 Zadania 37
dowolny nośnik może się nie powieść, lub informacja może zostać zniekształ-
cona. Chyba każdy z nas pamięta dziecięcą zabawę w głuchy telefon, po-
dobnie jest w przypadku rozmowy przez zwykły analogowy telefon, słychać
trzaski i czasami słowa dochodzą zniekształcone. Shannon w swojej pracy
podał warunki jakie muszą być spełnione by informacja dotarła bez znie-
kształceń, co więcej pokazał on drogę w jaki sposób przekazać informację
lepiej bez zmiany parametrów kanału transmisyjnego.
Zarys teorii informacji znajduje się w rozdziale 4.
1.5 Zadania
1. Wymień kluczowe postacie z historii informatyki wraz z ich dokona-
niami? Spróbuj ustawić je chronologicznie.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
38 Wstęp
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Rozdział 2
Podstawowe pojęcia
i definicje
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
40 Podstawowe pojęcia i definicje
Prawa łączności
(x + y) + z = x + (y + z) (2.3)
(x · y) · z = x · (y · z) (2.4)
Prawa rozdzielności
x + (y · z) = (x + y) · (x + z) (2.5)
x · (y + z) = (x · y) + (x · z) (2.6)
Prawa identyczności
x+0 = x (2.7)
x·1 = x (2.8)
Prawa dopełnienia
x+x = 1 (2.9)
x·x = 0 (2.10)
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
2.1 Algebra Boole’a 41
x+x = x (2.11)
x·x = x (2.12)
x+1 = 1 (2.13)
x·0 = 0 (2.14)
Prawa pochłaniania
(x · y) + x = x (2.15)
(x + y) · x = x (2.16)
x + x = (x + x) · 1
(x + x) · 1 = (x + x) · (x + x)
(x + x) · (x + x) = x + (x · x)
x + (x · x) = x + 0
x+0 =x
co kończy dowód prawa (2.11). Dowód prawa (2.12) przeprowadza się ana-
logicznie, więc go pominiemy.
Dowód prawa (2.13). Korzystając z prawa dopełniania (2.9) mamy
x + 1 = x + (x + x)
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
42 Podstawowe pojęcia i definicje
x + (x + x) = (x + x) + x
(x + x) + x = x + x
x+x=1
co kończy dowód prawa (2.13). Dowód prawa (2.14) przeprowadza się ana-
logicznie.
Dowód prawa (2.15). Korzystając z prawa identyczności (2.8) otrzy-
mujemy
(x · y) + x = (x · y) + (x · 1)
stosując prawo rozdzielności (2.6)
(x · y) + (x · 1) = x · (y + 1)
x · (y + 1) = x · 1
(x + y) = x · y (2.17)
(x · y) = x + y (2.18)
w+z =1 i w · z = 0,
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
2.1 Algebra Boole’a 43
w+w =1 i w · w = 0,
charakteryzują jednoznacznie w.
Spróbujmy wykazać powyższe. Korzystając z prawa identyczności (2.7)
mamy
z =z+0
dzięki prawu dopełniania (2.10)
z + 0 = z + (w · w)
z + (w · w) = (z + w) · (z + w)
(z + w) · (z + w) = (w + z) · (w + z)
(w + z) · (w + z) = 1 · (w + z)
1 · (w + z) = (w + w) · (w + z)
(w + w) · (w + z) = (w + w) · (w + z)
(w + w) · (w + z) = w + (w · z)
korzystając z założenia
w + (w · z) = w + 0
na koniec stosując prawo identyczności (2.7) otrzymujemy
w+0=w
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
44 Podstawowe pojęcia i definicje
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
2.2 Pozycyjne systemy liczbowe 45
(2.6) (2.6)
w = (x + y) (x + y) (x + z) = [x (x + y) + y (x + y)] (x + z) =
(2.6,2.10)
= [x + xy + yx + yy] (x + z) =
(2.9,2.7) (2.14,2.7)
= [x + x (y + y) + 0] (x + z) = (x + x0) (x + z) =
(2.6) (2.10)
= x(x + z) = xx + xz = xz
(2.6) (2.11)
v = xyz + xyz + xyz = x (yz + zy + yz) =
(2.6)
= x (yz + yz + yz + yz) = x [(yz + yz) + (yz + yz)] =
(2.9) (2.6)
= x [z (y + y) + y (z + z)] = x(z + y) = xz + xy
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
46 Podstawowe pojęcia i definicje
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
2.2 Pozycyjne systemy liczbowe 47
x = 1011110110(2) (2.23)
w = 1 · 29 + 0 · 28 + 1 · 27 + 1 · 26 + 1 · 25 +
+ 1 · 24 + 0 · 23 + 1 · 22 + 1 · 21 + 0 · 20
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
48 Podstawowe pojęcia i definicje
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
2.2 Pozycyjne systemy liczbowe 49
758 | 2 x 379 + 0,
758 | 2 x 379 + 0
379 | 2 x 189 + 1
758 | 2 x 379 + 0
379 | 2 x 189 + 1
189 | 2 x 94 + 1
94 | 2 x 47 + 0
47 | 2 x 23 + 1
23 | 2 x 11 + 1
11 | 2 x 5 + 1
5 | 2 x 2 + 1
2 | 2 x 1 + 0
1 | 2 x 0 + 1
Powstała w ten sposób kolumna z prawej strony stanowi zapis liczby 758
w systemie o podstawie 2. Kolumnę tą czytając od dołu i pisząc od lewa,
lub czytając od góry i pisząc od prawa, przekształcamy w ostateczną postać
żądanej liczby
1011110110(2) ,
zauważmy, że otrzymaliśmy postać identyczną z (2.23), a jak sprawdziliśmy
to wcześniej jest to liczba o wartości 758 zapisana w postaci dwójkowej.
Przytoczymy kilka przykładów, powyższej procedury konwersji (przy-
kład 2.2).
158 | 2 x 79 + 0 108 | 2 x 54 + 0 59 | 2 x 29 + 1
79 | 2 x 39 + 1 54 | 2 x 27 + 0 29 | 2 x 14 + 1
39 | 2 x 19 + 1 27 | 2 x 13 + 1 14 | 2 x 7 + 0
19 | 2 x 9 + 1 13 | 2 x 6 + 1 7 | 2 x 3 + 1
9 | 2 x 4 + 1 6 | 2 x 3 + 0 3 | 2 x 1 + 1
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
50 Podstawowe pojęcia i definicje
4 | 2 x 2 + 0 3 | 2 x 1 + 1 1 | 2 x 0 + 1
2 | 2 x 1 + 0 1 | 2 x 0 + 1 0 | koniec
1 | 2 x 0 + 1 0 | koniec
0 | koniec
11
00111000 01000001
+ 00010001 + 00010100
---------- ----------
01001001 01010101
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
2.2 Pozycyjne systemy liczbowe 51
00111001 00101101
- 00001101 - 00010001
---------- ----------
00101100 00011100
1111 10001
x 101 x 11
------------- ---------------
1111 10001
0000 + 10001
+ 1111 ---------------
------------- 110011
1001011
110 1011
----- -------
10010:11=00000110 1111001:1011=1011
- 11 - 1011
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
52 Podstawowe pojęcia i definicje
------- ---------
1 10000
11 - 1011
- 11 ---------
------- 1011
0 - 1011
---------
0
gdzie c−1 , c−2 , . . . , c−n ∈ {0, . . . , 9} są cyframi, to wartość tej liczby jest
wyliczana za pomocą następującego wzoru:
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
2.2 Pozycyjne systemy liczbowe 53
1. niech w = x,
2. mnożymy w przez 2,
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
54 Podstawowe pojęcia i definicje
0.75(10) = ? (2)
liczba dwójkowa
|
| część ułamkową przepisujemy
| | do pierwszej kolumny
0.75 | 2 x 0.75 = 1.5
0.5 | 2 x 0.5 = 1.0
0.0 | koniec
Otrzymaliśmy zatem, że
0.75(10) = 0.11(2)
I kolejny przykład
0.40625(10) = ? (2)
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
2.2 Pozycyjne systemy liczbowe 55
Zatem
0.40625(10) = 0.01101(2)
Sprawdźmy:
2−1 · 0 + 2−2 · 1 + 2−3 · 1 + 2−4 · 0 + 2−5 · 1 = 0.25 + 0.125 + 0.03125 = 0.40625
Przejdźmy teraz do zamiany liczb rzeczywistych większych od jeden, w
takim przypadku, stosujemy dla części całkowitej poznany wcześniej proces,
a dla części ułamkowej omówiony powyżej.
Przykład 2.9. Zamiana liczby rzeczywistej dziesiętnej na postać
dwójkową.
9.25(10) = ? (2)
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
56 Podstawowe pojęcia i definicje
Zatem jak widać ułamek może mieć „dobrą” postać dziesiętną, zaś „złą”
dwójkową. W powyższym przykładzie ułamek dwójkowy jest okresowy, za-
tem w którymś momencie musimy zaprzestać procedury, gdyż inaczej pro-
wadzilibyśmy ją w nieskończoność. Jeśli jednak zaprzestaniemy, to będzie to
niedokładna reprezentacja wyjściowego ułamka, dla przykłady ograniczmy
się do pięciu cyfr po przecinku, otrzymamy wtedy:
Jak widać błąd takiego zaokrąglenie wcale nie jest mały, jednak pamiętajmy,
że nie jest to „wina” systemu dwójkowego lecz samego procesu dzielenia w
ogóle. Zauważmy, że dla ułamka zwykłago 31 jego rozwinięcie w ułamek dzie-
siętny również będzie przybliżone jeśli chcemy je przechować na skończonym
nośniku danych.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
2.2 Pozycyjne systemy liczbowe 57
kolejnymi literami alfabetu, zatem A (16) = 10(10) , B(16) = 11(10) , itd., do-
puszcza się również stosowanie małych liter zamiast dużych.
Można oczywiście zapytać, czemu nie stosujemy w informatyce systemu
osiemnastkowego, przyjrzyjmy się poniższej tabelce a wszystko się wyjaśni
zapis zapis zapis
dwójkowy szesnastkowy dziesiętny
0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 A 10
1011 B 11
1100 C 12
1101 D 13
1110 E 14
1111 F 15
Widać z powyższego zestawienia, że jedna cyfra kodu szesnastkowego
odpowiada dokładnie czterocyfrowej liczbie systemu dwójkowego. Ponie-
waż bajt informacji (zob. A) składa się z 8 bitów, zatem każdy bajt danych
daje się w sposób jednoznaczny przedstawić za pomocą dwu cyfr kodu szes-
nastkowego, co upraszcza kwestię konwersji; nie wymaga ona w praktyce
obliczeń a jedynie podstawienia. Oto przykład
00011101(2) = 1D(16) , 1011111(2) = BF(16) , 11100011(2) = E3(16) .
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
58 Podstawowe pojęcia i definicje
233124 = 2 · 44 + 3 · 43 + 3 · 42 + 1 · 41 + 2 · 40 = 75810
13668 = 1 · 83 + 3 · 82 + 6 · 81 + 6 · 80 = 75810
2F 616 = 2 · 162 + 15 · 161 + 6 · 160 = 75810
70 | 11 x 6 + 9
6 | 11 x 0 + 6
2K25 = 6911
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
2.2 Pozycyjne systemy liczbowe 59
110110012 → 31214
33214 → 111110012
Zauważmy, że zamieniając liczbę dwójkową na czwórkową, grupujemy bity
po dwa, a następnie te dwójki zapisujemy za pomocą odpowiednich liczb
czwórkowych (podobnie czyniliśmy to w zamianie z systemu dwójkowego na
szesnastkowy). Zapisując liczbę czwórkową jako dwójkową, każdą jej cyfrę
zapisujemy za pomocą odpowiedniego dwu wyrazowego ciągu zerojedynko-
wego.
11 01 10 01 3 3 2 1
| | | | | | | |
3 1 2 1 11 11 10 01
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
60 Podstawowe pojęcia i definicje
Otrzymujemy zatem
110110012 → 3318
3318 → 110110012
758 (10) -> (4) 758 (10) -> (8) 758 (10) -> (16)
70 | 11 x 6 + 9
6 | 11 x 0 + 6
Ostatecznie więc
2K25 = 6911
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
2.2 Pozycyjne systemy liczbowe 61
w = 1 · 26 + 1 · 25 + 1 · 24 + 1 · 23 + 1 · 22 + 0 · 21 + 1 · 20
w = 40 + 20 + 10 + 8 + 4 + 0 + 1 = 70 + D = 7D(16)
96 | 3 x 32 + 0
32 | 3 x 10 + 2
10 | 3 x 05 + 1
05 | 3 x 01 + 2
01 | 3 x 00 + 1
12120(3) = 1 · 34 + 2 · 33 + 1 · 32 + 2 · 31 + 0 = 81 + 54 + 9 + 6 + 0 = 150(10) .
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
62 Podstawowe pojęcia i definicje
2.3 BCD
Do tej pory zapoznaliśmy się już z systemem dwójkowym, szesnastkowy oraz
innymi. Jak można było zaobserwować, istotnych różnic pomiędzy nimi nie
ma i w zasadzie to jesteśmy w stanie operować dowolnym z nich, a nawet
kilkoma, dokonując odpowiednich konwersji przy przejściu od jednego do
drugiego. Mimo to cały czas odczuwa się jak gdyby wrodzoną skłonność do
operowania systemem dziesiętnym, przejawiającą się chociażby w tym, że
w konwersji najczęściej stosujemy schemat podstawa źródłowa → pod-
stawa 10 → podstawa docelowa. Cały kłopot z systemami liczbowymi
o podstawach innych niż 10 polega na tym, że ciąg cyfr jest dla nas abs-
trakcyjnym napisem, który nabiera znaczenia dopiero, gdy przekształcimy
go do postaci dziesiętnej3 .
Zilustrujemy problemy o których mówimy za pomocą prostego testu.
Kto bez zastanowiednia odpowie, ile wynosi 1/3 z liczby 111100 (2)? Jak
więc widać, systemem dwójkowym operujemy z konieczności, a najchętniej
(najsprawniej) używamy dziesiętnego. Problemem jest konwersja z jednego
na drugi. Chcąc ułatwić to zadanie wprowadzono system kodowania BCD
(ang. Binary-Coded Decimal). W tym systemie liczby dziesiętne kodujemy
za pomocą ciągu bitów przypisując każdej cyfrze dziesiętnej odpowiadajacy
jej ciąg 4 bitów (patrz tabelka 2.1). Ponieważ mamy jedynie 10 możliwości
więc wystarczy zapamiętać tylko tyle, aby móc sprawnie i szybko przecho-
dzić z systemu dziesiętnego do BCD i odwrotnie. Zobaczmy jak odbywa się
ten proces; zapiszemy liczbę dziesiętną 120 najpierw w systemie dwójkowym
a następnie w formacie BCD.
120 | 2 * 60 + 0
60 | 2 * 30 + 0
30 | 2 * 15 + 0
15 | 2 * 7 + 1
7 | 2 * 3 + 1
3 | 2 * 1 + 1
1 | 2 * 0 + 1
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
2.3 BCD 63
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
64 Podstawowe pojęcia i definicje
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
2.3 BCD 65
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
66 Podstawowe pojęcia i definicje
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
2.4 Zadania 67
2.4 Zadania
1. Wykonaj uproszczenie następujących wyrażeń algebraicznych, a na-
stępnie sprawdź prawdziwość metodą zerojedynkową.
a) xyz + xy + yz
b) xz + xy + yz
c) (x + y + z)(y + z)
d) (xy + z)(x + yz)
e) (xyz) + (x + y + z)
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
68 Podstawowe pojęcia i definicje
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Rozdział 3
Architektura i działanie
komputera
2 + 4 =
6 - 4 =
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
70 Architektura i działanie komputera
2 + 4 = 6 - 4 =
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.1 Maszyna Turinga 71
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
72 Architektura i działanie komputera
| a | b | b | a | t | . | ... taśma
Tabela stanów:
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.1 Maszyna Turinga 73
Poniższa tabela pokazuje jak zmieniać się będzie zawartość taśmy pod-
czas wykonywania programu. Ramka wskazuje komórkę znajdującą się pod
głowicą.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
74 Architektura i działanie komputera
Stan Zawartość
automatu taśmy
s t a b b c t t t t t
sa t ? b b c t t t t t
sa t ? b b c t t t t t
sa t ? b b c t t t t t
sa t ? b b c t t t t t
saa t ? b b c a t t t t
saa t ? b b c a t t t t
saa t ? b b c a t t t t
saa t ? b b c a t t t t
s t a b b c a t t t t
sb t a ? b c a t t t t
sb t a ? b c a t t t t
sb t a ? b c a t t t t
sb t a ? b c a t t t t
sb t a ? b c a b t t t
sbb t a ? b c a b t t t
sbb t a ? b c a b t t t
sbb t a ? b c a b t t t
s t a b b c a b t t t
sb t a b ? c a b t t t
sb t a b ? c a b t t t
sb t a b ? c a b t t t
sb t a b ? c a b t t t
sbb t a b ? c a b b t t
sbb t a b ? c a b b t t
sbb t a b ? c a b b t t
sbb t a b ? c a b b t t
s t a b b c a b b t t
sc t a b b ? a b b t t
sc t a b b ? a b b t t
sc t a b b ? a b b t t
sc t a b b ? a b b t t
scc t a b b ? a b b c t
scc t a b b ? a b b c t
scc t a b b ? a b b c t
scc t a b b ? a b b c t
s t a b b c a b b c t
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.2 Bramki logiczne 75
4
Jest to teza, którą nie umiemy udowodnić, ponieważ nie da się precyzyjnie zdefniować
„dowolnego algorytmu”.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
76 Architektura i działanie komputera
X X
Y XY Y X+Y X X
AND OR NOT
X X
Y XY Y X+Y
NAND NOR
X
Y X ⊗Y
XOR
• AND, NOT
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.2 Bramki logiczne 77
X X
X+Y XY
Y Y
X X
Y XY Y X+Y
X X X X
• OR, NOT
• NAND
• NOR
Oczywiste jest, że bramki AND, OR, NOT tworzą zbiór funkcjonalnie pełny,
ponieważ reprezentują one trzy operacje algebry Boole’a. Aby bramki AND
i NOT mogły stanowić zbiór funkcjonalnie pełny, musi istnieć sposób za-
stąpienia operacji OR przy ich pomocy. Można to uczynić, korzystając
z następującej własności (prawo de Morgana — patrz Twierdzenie 2.2):
(X · Y ) = X + Y = X + Y
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
78 Architektura i działanie komputera
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.3 Architektura współczesnego komputera 79
ry
CPU I/O
mo
Me
magistrala danych
magistrala adresowa
główna magistrala
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
80 Architektura i działanie komputera
lub w drugą stronę. Kanały te składają się z kilku, kilkunastu, czy kilku-
dziesięciu przewodników elektrycznych 5 . Zasadniczo wyróżnia się trzy magi-
strale, które zostały omówione poniżej, przy niektórych z nich ważną cechą
charakterystyczną jest tzw. szerokość magistrali, która mówi o ilości
bitów informacji, która może zostać przesłana jednocześnie tą magistralą 6 .
Magistrala danych — (ang. Data Bus) jest kanałem przez który płyną
w obie strony dane, zatem zapewnia przesył do i z procesora, do i z
pamięci itd7 . Magistrala danych ma pewną szerokość, zwykle 8, 16,
32, lub 64 bity.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.3 Architektura współczesnego komputera 81
szybka droga
rejestry
operacyjna
CD, DVD
HDD
wolna tania
Random Access Memory), mając tym samym duże możliwości wyboru przy
projektowaniu komputera zależnie od potrzeb i dostępnych środków finan-
sowych. W celu lepszej ilustracji tego faktu, dokonamy porównania pamięci
RAM z innymi nośnikami informacji, które nie muszą występować jako pod-
stawowy składnik komputera9 . Najłatwiej pogrupować pamięci wszelkiego
typu przypisując każdej z nich odpowiednie miejsce w piramidzie na rysunku
3.610 .
W zależności od kierunku przeglądania tej piramidy możemy pamięci
klasyfikować ze względu na:
czas dostępu — jest to czas jaki musi upłynąć od momenty wystawienia
żądania odczytu danej o zadanym adresie do momentu jej uzyskania,
dla przykładu przy pamięci RAM będzie to 10 nanosekund, a dla
twardego dysku nawet 10 milisekund,
cenę — zwykle im większa gęstość zapisu tym wyższa cena, poprzez gęstość
9
Co więcej nawet jeśli występują to komunikacja pomiędzy procesorem a nimi od-
bywa się przez układy wejścia/wyjścia. Zatem nie należy wyciągać błędnych wniosków
i w miejsce pamięci RAM wkładać dysku twardego.
10
Prezentowana piramida jest pewnym rodzajem uproszczenia, nie należy jej traktować
zbyt dosłownie. Okazuje się np. że równie ważnym czynnikiem wpływającym na cenę
poza pojemnością jest technologia wykonania.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
82 Architektura i działanie komputera
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.4 Procesor — serce komputera 83
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
84 Architektura i działanie komputera
EU Reg
ALU FPU Bus
AU BIU
MMU
IU
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.4 Procesor — serce komputera 85
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
86 Architektura i działanie komputera
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.4 Procesor — serce komputera 87
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
88 Architektura i działanie komputera
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.4 Procesor — serce komputera 89
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
90 Architektura i działanie komputera
D — flaga informująca, czy dane mają być pobierane czy też przesyłane do
rejestru.
REG — określa jaki rejestr jest argumentem, lub jest rozszerzeniem roz-
kazu.
3.4.4 Adresowanie
W celu lepszego zrozumienia złożoności pracy procesora opiszemy również
sposoby adresacji komórek pamięci. W zależności od tego gdzie dana jest
umieszczona (pamiętana) dostęp do niej jest łatwiejszy, bądź trudniejszy.
Co więcej przekłada się to wprost na czas potrzebny na pobranie tej danej,
dalej ma to wpływ na czas realizacji konkretnego rozkazu. Dzieje się tak
ponieważ dana, która ma być przetworzona zawsze musi zostać pobrana do
15
Bajt złożony jest z 8-miu bitów i odejmujemy po jednym bicie na flagi D, W, S.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.4 Procesor — serce komputera 91
procesora, a może przecież znajdować się w rejestrze (wtedy nic nie trzeba
robić), w pamięci RAM (należy ją pobrać) czy nawet na porcie COM (należy
ją odczytać). Co więcej, zanim taka dana będzie pobrana, należy stwierdzić
czy wiemy wprost (natychmiast) gdzie ona się znajduje, czy też może znamy
wyłącznie adres do niej. Wówczas najpierw należy wyznaczyć tzw. adres
efektywny, by na końcu przy jego użyciu pobrać daną.
Celem lepszego zrozumienia złożoności problematyki można posłużyć się
takim prostym przykładem: wyobraźmy sobie, że musimy do kogoś zadzwo-
nić. Po pierwsze możemy pamiętać do tej osoby numer telefonu, wtedy
natychmiast wybieramy numer i trwa to chwilkę. Po drugie, możemy mieć
numer zapisany w notesie, wtedy trwa to odrobinę dłużej. Po trzecie, mo-
żemy nie mieć numeru, ale pamiętamy numer do kolegi, który z pewnością
ten nasz docelowy numer pamięta. Ponieważ kolegi może nie być w domu
może to trwać dość długo. Po czwarte, możemy mieć numer do kolegi, który
owszem ma ten numer docelowy ale zapisany, zatem nie tylko kolega musi
być w domu, ale jeszcze musi odszukać notes z numerem (a jeśli kolega jest
bałaganiarzem?). Po piąte, możemy mieć numer do kolegi, który zna kogoś
kto zna nasz docelowy numer itd.
Poniżej wypisane zostały różne sposoby adresowania, w kolejności od
najprostszego do najtrudniejszego i w przybliżeniu od najszybszego do naj-
wolniejszego16 . Przykłady zostały podane w zapisie mnemonicznym (patrz
3.4.5).
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
92 Architektura i działanie komputera
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.4 Procesor — serce komputera 93
OC ARG
OC REG1 REG2
ARG1(AX)
ARG2(BX)
...
IP
BP
SI
...
OC MEM1 MEM2
ARG2
ARG1
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
94 Architektura i działanie komputera
OC REG
AX
BX
...
IP ARG
BP
SI
...
OC OFFSET
AX
BX
...
IP OFFSET
BP + ARG
SI
...
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.4 Procesor — serce komputera 95
OC
AX
BX
...
IP SI
BP + ARG
SI
...
OC OFFSET
AX
BX
...
IP
BP +
SI
... + ARG
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
96 Architektura i działanie komputera
3.4.5 Asembler
Jak można było zauważyć we wcześniejszym punkcie, pisanie programów za
pomocą kodu maszynowego byłoby uciążliwe i monotonne. W konsekwencji
łatwo prowadzące do błędów19 oraz właściwie uniemożliwiające ich zloka-
lizowanie. W celu ułatwienia procesu programowania procesora stworzono
język asembler. Język ten jest tzw. językiem mnemonicznym, gdyż
składa się z mnemoników: krótkich nazw odpowiadających konkretnym
rozkazom maszynowym konkretnego typu procesora 20 . Co więcej w języku
tym można stosować symboliczny zapis adresów, na przykład zamiast kon-
kretnego adresu zmiennej można zastosować jej nazwę. Uwalnia to progra-
mistę od żmudnego przeliczania adresów, które po za tym, że jest nużące,
może również powodować powstawanie błędów. Ponieważ w większości sy-
tuacji rozkazy są tłumaczone jeden-do-jednego, zatem proces zamiany pro-
gramu zapisanego w języku asembler na kod maszynowy sprowadza się nie-
jako do podstawienia pod dany mnemonik jego reprezentacji binarnej. Fakt
ten powoduje, że osoba programująca w asemblerze niejako pisze w kodzie
maszynowym, co jest jedną z głównych przyczyn dla których pisane w ten
sposób programy są najwydajniejsze pod względem prędkości działania jak
i zajmowanej przez nie ilości pamięci 21 . Niestety jak się za chwilę przeko-
namy pisanie w tym języku jest żmudne i z pewnością nie efektywne pod
względem prędkości tworzenia programów.
Poniżej przedstawiamy przykładowe rozkazy procesora Intel 8086, dla
ułatwienia zastały one pogrupowane według przeznaczenia. Przy większości
rozkazów występuje informacja o tym na jakie flagi w rejestrze flagowym ten
rozkaz może mieć wpływ. Dodatkowo podany jest czas realizacji danego
rozkazu w jednostkach cyklu zegarowego tzw. taktu. Przy czym podajemy
zakres czasu wykonania rozkazu, najkrócej będą realizowane rozkazy na
19
Chyba nikt nie wątpi, że pisząc sześć kolejnych bajtów metodą zero-jedynkową bardzo
łatwo coś przeoczyć czy też zamienić miejscami.
20
Bardzo ważne jest zrozumienie, że język ten jest ściśle związany właśnie z typem
procesorem, zatem dla innego procesora będzie inna lista rozkazów, być może podobna
i podobne funkcje realizująca ale inna. I tak Intel będzie miał inną listę rozkazów niż
Motorola, ale AMD będzie miało w pewnym podzbiorze zgodną z Intelem.
21
Oczywiście zakłada się w tym momencie, że osoba pisząca w tym języku doskonale
się nim posługuje, a przeciwnym razie można napisać program długi, nieczytelny i nieko-
niecznie szybki czy mały.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.4 Procesor — serce komputera 97
Rozkazy przesunięć
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
98 Architektura i działanie komputera
Rozkazy skoków
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.4 Procesor — serce komputera 99
Rozkazy przerwań
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
100 Architektura i działanie komputera
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.5 Reprezentacja informacji 101
ą ć ę ł ń ó ś ź ż
B1 E6 EA B3 F1 F3 B6 BC BF
Ą Ć Ę Ł Ń Ó Ś Ź Ż
A1 C6 CA A3 D1 D3 A6 AC AF
Tablica 3.1: Kodowanie polskich znaków według standardu ISO 8859-2 (he-
xadecymalnie).
dzie następne 128 znaków, które w głównej mierze składają się ze znaków
semigraficznych, służących do tworzenie tabel czy ramek, oraz dodatkowo
ze znaków narodowych. Oczywiście zestaw tych znaków będzie zależał
od kraju, czyli języka narodowego, ale również od producenta sprzętu kom-
puterowego.
Manipulując tekstem z wykorzystaniem kodu ASCII zawsze musimy wie-
dzieć przy użyciu jakiej strony kodowej został on napisany. Strony ko-
dowe to wersje kodu ASCII różniące się interpretacją symboli o numerach
od 128 do 255. Na przykład dla języka polskiego stworzono stronę kodową
ISO 8859-2 nazywaną popularnie ISO Latin-2, gdzie poszczególnym lite-
rom charakterystycznym dla naszego języka przypisano następujące warto-
ści liczbowe (tabela 3.5.1). Niestety oprócz powyższego standardu powstało
także wiele innych; łączne zestawienie częściej spotykanych zawiera dodatek
C.
Problem ten stanie się jeszcze bardziej wyraźny jeśli operujemy na tek-
stach wielojęzycznych. Ponadto udostępniana przestrzeń 128 znaków, które
możemy dowolnie zdefiniować dla wielu celów jest niewystarczająca (język
chiński, symbole matematyczne). Problem ten często był rozwiązywany po-
przez wprowadzanie specjalnych znaków sterujących zmieniających sposób
interpretacji kodów po nich następujących; na przykład
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
102 Architektura i działanie komputera
Identyfikacja Wygląd
kod=litera_a a a a a a
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.5 Reprezentacja informacji 103
000000002 = 010
000000012 = 110
000110002 = 2410
100000002 = 12810
111111112 = 25510
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
104 Architektura i działanie komputera
+010 = 000000002
−010 = 100000002
00111001 ( = + 57 )
+ 10001101 ( = - 13 )
----------
11000110 ( = - 69 )
0 0111001 ( = + 57 )
+ 1 0001101 ( = - 13 )
-----------
0 0101100 ( = + 44 )
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.5 Reprezentacja informacji 105
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
106 Architektura i działanie komputera
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.5 Reprezentacja informacji 107
Algorytm 2
1. Weźmy dowolną liczbę ujemną x daną w zapisie dziesiętnym.
2. Wykonujemy konwersję modułu liczby x na zapis dwójkowy, przy
czym musi być w tym momencie ustalone na ilu bitach będziemy re-
prezentowali tę liczbę.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
108 Architektura i działanie komputera
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.5 Reprezentacja informacji 109
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
110 Architektura i działanie komputera
z m M × B zc C ,
z m M × 2 zc C ,
zm M × 2C−KC ,
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.5 Reprezentacja informacji 111
1.bn . . . b0
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
112 Architektura i działanie komputera
Epsilon maszynowy
Precyzją p zmiennopozycyjnego systemu liczbowego nazywać będziemy liczbę
bitów użytych do zapisu mantysy (wliczając w to pierwszy bit o stałej war-
tości). W naszych dotychczasowych rozważaniach p = 4 (3 bity na zapis
24
Dokładnie nazwa brzmi: IEEE Standard 754 for Binary Floating-Point Arithmetics
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.6 Zadania 113
mantysy + 1 bit domyślny o stałej wartości 1). Stąd każda liczba rzeczywi-
sta x zapisana z precyzją p może być wyrażona jako
. . 0} 1)2 = 1 + 2−(p−1)
x = (1. 0| .{z
p−2
. . 0} 1)2 = 1 + 2−(p−1)
ε = (0. 0| .{z
p−2
Jeśli x > 0 (x < 0) wówczas ulp (ang. Unit In The Last Place) informuje o
odległości od następnej, tj. większej (poprzedniej, tj. mniejszej) (reprezen-
towanej w przyjętym systemie) liczby.
3.6 Zadania
1. Stosując dwójkową reprezentację znak-moduł zapisz następujące liczby
całkowite (zakładamy, że liczba dwójkowa powinna zajmować wielo-
krotność 8 bitów).
a) -20 b) +20 c) +47 d) -18 e) +37
f) -128 g) +372 h) -420 i) -42 j) -15
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
114 Architektura i działanie komputera
a) Tabela przejść
b a b a t b a a b b .
b) Tabela przejść
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
3.6 Zadania 115
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
116 Architektura i działanie komputera
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Rozdział 4
Teoria informacji
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
118 Teoria informacji
domość (więc jedno z nich jest zbędne) o tyle w drugim usunięcie jednego
z nich pozbawia nas części. . . no właśnie — informacji. Co więcej dla tej
samej informacji mogą istnieć różne wiadomości, które ją niosą, dla przy-
kładu dwie poniższe wypowiedzi niosą tę samą informację:
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
4.2 Geneza i zakres teorii informacji 119
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
120 Teoria informacji
H = n log2 S.
Jak później udowodnił to Shannon wzór Hartleya nie jest zawsze prawdziwy.
Jest on słuszny tylko w przypadku, gdy dodatkowo zostanie założone, że
wybór poszczególnych symboli jest niezależny oraz, że wystąpienia poszcze-
gólnych liter alfabetu są niezależne.
W dalszym ciągu Shannon pracował nad teorią informacji i ostatecznie
wykazał, że można nie zmniejszająć prędkości transmisji sygnału przekazać
go możliwie wiernie przez kanał transmisyjny. Należy podkreślić, że praca
Shannona wskazywała na możliwość rozwiązania tego problemu jednak nie
podawała efektywnej metody jak to zrealizować. Spowodowało to rozłam w
dalszych pracach nad teorią informacji na dwa główne nurty: teoretyczny
— koncentrował się wokół poszukiwania miar ilości informacji, oraz prak-
tyczny — w którym próbowano znaleźć najlepsze sposoby kodowania by
przekazywać informację w sposób optymalny.
Podamy teraz kilka sposobów kontroli czy informacja, która zastała prze-
kazana (przesłana) jest poprawna, przy czym skoncentrujemy się na algoryt-
mach stosowanych w komputerach i służących kontroli poprawności prze-
syłanych danych. Zatem koncentrujemy się wyłącznie na wiadomościach
przekazywanych za pomocą kodu dwójkowego.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
4.3 Metody kontroli poprawności danych 121
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
122 Teoria informacji
Tego typu przekłamania zdarzyć się mogą tym łatwiej im dłuższe ko-
munikaty będą przesyłane, oraz im gorszym medium będzie prowadzona
transmisja (światłowód będzie wprowadzał mała ilość przekłamań, a łącze
podczerwone we mgle ogromną).
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
4.3 Metody kontroli poprawności danych 123
jak i porcje danych. Jeśli pojawi się przepełnienie, to jest ono ignorowane 6 .
Ostatecznie suma kontrolna jest dopisywana na końcu wiadomości.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
124 Teoria informacji
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
4.3 Metody kontroli poprawności danych 125
x4 + x 2 + 1
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
126 Teoria informacji
100110110000 : 10101
10101.......
-----.......
00110.......
01100......
00000......
-----......
01100......
11001.....
10101.....
-----.....
01100.....
11001....
10101....
-----....
01100....
11000...
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
4.3 Metody kontroli poprawności danych 127
10101...
-----...
01101...
11010..
10101..
-----..
01111..
11110.
10101.
-----.
01011.
10110
10101
-----
00011
0011 <- kod CRC
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
128 Teoria informacji
4.4 Zadania
1. Oblicz wartości sumy kontrolnej dla następujących ciągów bitów (suma
kontrolna zapisywana jest na 4 bitach).
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Rozdział 5
Algorytmy i struktury
danych
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
130 Algorytmy i struktury danych
Wymaga się zatem, aby algorytm składał się ze skończonej liczby operacji
(poleceń) sformułowanych w sposób jednoznaczny (i jasny 2 ) oraz możliwy do
wykonania w skończonym i zarazem rozsądnym czasie. Poprzez „rozsądny”
rozumiemy czas akceptowalny dla danego zadania, w dalszym ciągu zostanie
to jeszcze szerzej omówione. Zaś „ jasny” oznacza tyle co zrozumiały dla
ludzi znających zasady konstruowania i czytania algorytmów.
W przeszłości matematycy czasami próbowali rozwiązywać różne pro-
blemy w sposób algorytmiczny, ale na ogół nie przywiązywano większej wagi
do precyzji opisu kolejnych kroków procedury. Wraz z rozwojem matema-
tyki pojawiły się problemy, co do których nie było pewności czy można je
rozwiązać w sposób algorytmiczny, czy też nie. Dopiero wówczas zaczęto
zastanawiać się nad tym, jak precyzyjnie sformułować pojęcie algorytmu.
Aby wykazać, że dany problem można rozwiązać w sposób algorytmiczny
wystarczy podać konkretny algorytm rozwiązania tego problemu. Jeśli jed-
nak chcemy udowodnić, że dany problem nie da się rozwiązać algorytmicz-
nie potrzeba dowieść, że nie istnieje algorytm rozwiązania danego problemu.
A to powoduje, że potrzebna jest ścisła definicja algorytmu. W latach dwu-
dziestych XX w. zagadnienie ścisłego, w sensie matematycznym, określenia
pojęcia algorytmu było jednym z głównych problemów matematyki. Defi-
nicje te zostały opracowane m. in. przez Alana Turinga, E. L. Posta i A.
Churcha. Na podstawie tych definicji wykazano, że w matematyce istnieje
wiele problemów, których nie można rozwiązać w sposób algorytmiczny.
1
Warunek ten nie jest konieczny do poprawności działania algorytmu, ale z drugiej
strony nikt nie będzie używał poprawnego algorytmu na którego wynik będzie musiał
czekać kilkaset lat...
2
Podobnie jak poprzednia uwaga, nie jest to warunek konieczny, ale z drugiej strony
szkoda tracić czas na analizę niejasnych procedur.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
5.1 Pojęcie algorytmu 131
3
Oczywiście w skład dużego programu może wchodzić wiele pomniejszych algorytmów,
jednak można je wszystkie postrzegać jako jeden złożony algorytm realizujący pewne
złożone zadanie.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
132 Algorytmy i struktury danych
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
5.2 Struktury danych 133
5.2.2 Tablica
Tablica (ang. array) jest jedną z najpowszechniej stosowanych struktur da-
nych, ponadto występuje na poziomie implementacyjnym w prawie wszyst-
kich językach programowania. Jest to struktura danych pozwalająca zapa-
miętywać wyłącznie elementy tego samego typu. Wyobraźmy sobie pojem-
nik na płyty CD, nie mamy możliwości włożyć do niego np. kasety VHS.
Kolejną cechą tablic jest dostęp swobodny (ang. random access) do jej
elementów — oznacza to, że dostęp do dowolnego elementu tablicy odbywa
się w taki sam sposób, oraz że można do nich się odwoływać w dowolnej ko-
lejności. Tu znów posłużmy się analogią ze stojakiem na płyty CD: po każdą
z płyt można sięgnąć w ten sam sposób — swobodnie. W przypadku tablic
do odwołania się (sięgnięcia) do konkretnego jej elementu stosuje się indek-
sowanie. To znaczy podajemy oprócz nazwy tablicy numer elementu do
którego chcemy się odwołać. Dla przykładu niech T będzie nazwą zmiennej
tablicowej, odwołanie do elementu o indeksie 1 i zapisanie do niego wartości
3 będzie miało postać:
T[1] := 3
6
Istnieją języki programowani w których nie ma konieczności informowania jakiego
typu jest dana zmienna, jednak nie będziemy ich tu szczegółowo omawiać. Według naszej
opinii u początkujących informatyków wprowadzają one niepotrzebne zamieszanie i uczą
złych nawyków.
7
Zwany również typem boolowskim.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
134 Algorytmy i struktury danych
5.2.3 Rekord
Jak można było zauważyć pewną wadą tablicy jest konieczność przechowy-
wania elementów tego samego typu11 . W pewnych sytuacjach jest to nie-
8
My zapożyczyliśmy symbolikę z języka Pascal.
9
Nie można tej własności przenieść na języki programowania — nie wszystkie pozwa-
lają na coś takiego.
10
Przynajmniej piszących te słowa autorów.
11
Co prawda konkretne realizację tablic, w istniejących językach programowania, do-
puszczają wkładanie do tablicy elementów różnych typów, ale tak naprawdę są to nowe
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
5.2 Struktury danych 135
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
136 Algorytmy i struktury danych
5.2.4 Zbiór
Kolejną strukturą danych, o której warto wspomnieć jest zbiór (ang. set).
Jest to odpowiednik pojęcia z matematyki, zatem dla każdego zbioru mamy
określone operacje: przecięcia (część wspólna), sumy, różnicy, przyna-
leżności.
Definicja typu zbiorowego ma następującą postać:
5.2.5 Plik
Omawiane do tej pory struktury danych charakteryzowały się tym, że była
znana ich wielkość16 . Zatem stosunkowo łatwo było je przechowywać w pa-
mięci. Niestety istnieje całą rzesza dynamicznych struktur danych takich
jak kolejki, drzewa, grafy itp., które nie posiadają tej cechy. Przejrzyjmy się
jednej z takich struktur danych, a mianowicie plikowi. Plik reprezentuje
strukturę danych, która odpowiada koncepcji ciągu. Ciąg jest sekwencyjną
strukturą danych, gdzie elementy są ustawione jeden po drugim. Elemen-
tami ciągu mogą być rekordy, tablice i inne typy złożone, przy czym ich
ilość jest nieograniczona, zatem zawsze można dopisać następny element do
ciągu17 . Podstawowe operacje na ciągach to: pobranie elementu pierwszego,
15
Jest to dokładny odpowiednik pojęcia zbioru znanego z matematyki.
16
Oczywiście o ile znana była wielkość ich elementów.
17
O ile oczywiście wystarczy nośnika danych.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
5.3 Metody opisu algorytmów 137
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
138 Algorytmy i struktury danych
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
5.3 Metody opisu algorytmów 139
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
140 Algorytmy i struktury danych
a:=b;
if (warunek) then
begin
instrukcje realizowane gdy warunek jest spełniony
end
else
begin
instrukcje realizowane gdy warunek jest niespełniony
end
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
5.3 Metody opisu algorytmów 141
do
begin
... ciąg instrukcji powtarzanych
dopóki warunek jest spełniony ...
end
while (warunek);
while (warunek)
begin
... ciąg instrukcji powtarzanych
dopóki warunek jest spełniony ...
end
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
142 Algorytmy i struktury danych
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
5.4 Podstawowe algorytmy 143
if (plik=OTWARTY) then
begin
Zapisanie danych do pliku
end
else
begin
Komunikat o błędzie
end
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
144 Algorytmy i struktury danych
if (A=0) then
begin
wypisz("To nie jest równanie kwadratowe");
end
else
begin
D:=B^2-4*A*C;
if (D<0) then
begin
wypisz("Nie ma rzeczywistych rozwiązań");
end
else
begin
if (D>0) then
begin
R1:=(-B-Sqrt(D))/(2*A);
R2:=(-B+Sqrt(D))/(2*A);
end
else
begin
R1:=-B/(2*A);
R2:=R1;
end
end
wypisz("Pierwiastkami są: ", R1, R2);
end
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
5.4 Podstawowe algorytmy 145
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
146 Algorytmy i struktury danych
x:=a[i];
"wstaw x w odpowiednie miejsce w ciągu a[1]...a[i-1]";
end
for i:=2 to n do
begin
a[0]:=a[i];
j:=i-1;
while (a[0] < a[j])
begin
a[j+1]:=a[j];
j:=j-1;
end
a[j+1]:=a[0];
end
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
5.4 Podstawowe algorytmy 147
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
148 Algorytmy i struktury danych
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
5.5 Rekurencja vs. iteracja 149
silnia_i(n)
begin
i:=0;
s:=1;
while (i<n) do
begin
i:=i+1;
s:=s*i
end
silnia_i := s;
end
24
Oczywiście ta nieskończona ilość operacji jest wyłącznie teoretyczna, w praktyce prze-
cież realizacja wykonania funkcji odbywa się na komputerze, który nie jest wieczny.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
150 Algorytmy i struktury danych
silnia_r(n)
begin
if (n=0) then
w := 1;
else
w := n*silnia_r(n-1);
silnia_r := w;
end
s_r(5)
. |
. 5*s_r(4)
. . |
. . 4*s_r(3)
. . . |
. . . 3*s_r(2)
. . . . |
. . . . 2*s_r(1)
. . . . . |
. . . . . 1*s_r(0)
. . . . . . |
. . . . . . <---1
. . . . . . |
. . . . . <---1*1
. . . . . |
. . . . <---2*1
. . . . |
. . . <---3*2
. . . |
. . <---4*6
. . |
<---5*24
|
120
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
5.5 Rekurencja vs. iteracja 151
Jednak nie zawsze funkcje, która jest dana wzorem rekurencyjnym po-
winno się realizować takim algorytmem. W istocie istnieją bardziej skom-
plikowane schematy rekurencyjne, które mogą i powinny być przekształcane
do postaci iteracyjnych. Dobry przykład stanowi tutaj zagadnienie oblicza-
nia liczb ciągu Fibonacciego. Ciąg Fibonacciego, dla n > 1, zdefiniowany
jest następująco
f ibn+1 := f ibn + f ibn−1
fib_r (n)
begin
if (n=1) then
w := 1;
if (n=0) then
w := 1;
w := fib_r(n-1)+fib_r(n-2);
fib_r := w;
end
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
152 Algorytmy i struktury danych
fib(5)
fib(4) fib(3)
fib(2) fib(1)
fib_i (n)
begin
i:=1;
x:=1;
y:=1;
while (i<n)
begin
z:=x;
i:=i+1;
x:=x+y;
y:=z;
end
fib_i := x;
end
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
5.6 Analiza złożoności 153
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
154 Algorytmy i struktury danych
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
5.7 Zadania 155
5.7 Zadania
1. Napisz funkcję do obliczania xy , gdzie x, y są liczbami naturalnymi,
przy czym dopuszczamy, że y może być 0. Napisz wersję iteracyjną
i rekurencyjną.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
156 Algorytmy i struktury danych
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Rozdział 6
Języki programowania
Jeden język nie musi być koniecznie lepszy od drugiego tylko z tego
powodu, że ma cechę, której ten drugi nie posiada.
Bjarne Stroustrup
Jeśli jednak zastanowić się szerzej nad tym pojęciem, to można by posta-
wić pytanie: „Czy nie wystarczyłby język polski, czy też angielski? A jeśli
tak to po co tworzymy nowy język?”. Odpowiedź na tak postawione pytanie
jest w chwili obecnej zdecydowanie negatywna. Komputery dopiero uczą się
rozpoznawać polecenia wydawane przez człowieka, przy czym polecenia te
są wydawane za pomocą małego podzbioru słów języka naturalnego.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
158 Języki programowania
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6.2 Ewolucja języków programowania 159
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
160 Języki programowania
Kolumna LOC zawiera numer adresu pod którym znajduje się instrukcja,
OP zawiera kod operacji, DATA dane, INST adres instrukcji, która ma być
wykonana jako następna. Cóż . . . należy przyznać, że czytelność powyższego
programu jest przytłaczająca . . .
Na szczęście w tym samym czasie w firmie IBM Johna Backusa prowadził
badania nad stworzeniem języka wygodniejszego, czytelniejszego z przezna-
czeniem do obliczeń matematycznych 1 . I tak w listopadzie 1954 roku została
ogłoszona pierwsza specyfikacja języka FORTRAN, nazwa jest akronimem
słów the IBM Mathematical FORmula TRANslating system. Spójrzmy na
przykładowy program 6.2 zapisany w tym języku, a dokładnie w jego pierw-
szej wersji.
1
W tamtych czasach właściwie można było mówić o dwu typowych wykorzystaniach
komputerów: obliczeniach i przetwarzaniu danych. Gry i rozrywka musiały poczekać
jeszcze wiele lat na swoją kolej.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6.2 Ewolucja języków programowania 161
DIMENSION DTA(900)
SUM = 0.0
READ 10, N
10 FORMAT(I3)
DO 20 I = 1, N
READ 30, DTA(I)
30 FORMAT(F10.6)
IF (DTA(I)) 25, 20, 20
25 DTA(I) = -DTA(I)
20 CONTINUE
DO 40 I = 1, N
SUM = SUM + DTA(I)
40 CONTINUE
AVG = SUM/FLOAT(N)
PRINT 50, AVG
50 FORMAT(1H, F10.6)
STOP
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
162 Języki programowania
begin
real x, y;
integer N, i;
real procedure cosh(x); real x;
begin
cosh := (exp(x)+exp(-x))/2;
end
begin
Read Int (N);
for i := 1 step 1 until N do
begin
x := i/N;
y := cosh(x);
Print Real (y);
end;
end
end
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6.2 Ewolucja języków programowania 163
type
dzien_tyg = (pon, wt, sro, czw, pia, sob, nie );
var
dzien_miesiaca: 1 .. 31;
2
Ale to już były lata dziewięćdziesiąte ubiegłego wieku.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
164 Języki programowania
begin
readln(N);
for i := 1 to N do
begin
x := i/N;
y := cosh(x);
writeln(y);
end;
end.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6.2 Ewolucja języków programowania 165
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
166 Języki programowania
package Table is
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6.2 Ewolucja języków programowania 167
loop
if T(Middle) = X then
Location := Middle;
Found := True;
return;
elsif Upper < Lower then
Found := False;
return;
elsif T(Middle) > X then
Upper := Middle - 1;
else
Lower := Middle + 1;
end if;
Middle := (Lower + Upper) / 2;
end loop;
end BinarySearch;
end Tables;
Jednak nie tylko ADA powstała jako język wspierający pracę nad złożo-
nymi projektami — inną grupą języków były języki zorientowane obiektowo
(ang. Object-Oriented Language (OOL)). Jako przyczynę do ich powstania
można wskazać, podobnie jak przy programowaniu strukturalnym, kolejny
wzrost wielkości tworzonych programów. Przede wszystkim skończyła się
era dużych programów pisanych przez jedną osobę. Skoro nad programem
pracowało kilka a nawet kilkanaście osób należało dostarczyć im narzędzi
wspierających pracę grupową i języków wspomagających pisanie złożonych
systemów. Z drugiej strony, coraz więcej powstających systemów, odzwier-
ciedlało bardzo złożone procesy bądź zjawiska ze świata rzeczywistego. Za-
istniała potrzeba odzwierciedlanie rzeczywistych obiektów jak statki czy
samoloty w modelu języka programowania.
Języki zorientowane obiektowo — czyli wspierające pisanie w zgodzie
z metodologią obiektową — musiały posiadać kilka cech, które teraz omó-
wimy. Powinny umożliwiać definicję nowych typów. Ten nowym typ definio-
wano za pomocą klasy, której konkretne instancje nazywano obiektami —
stąd nazwa języki obiektowe. Co więcej należało zapewnić by te nowe typy
(klasy) były traktowane jak typy wbudowane. Dzięki temu programista defi-
niując typ (klasę) reprezentujący macierz mógł dla niej zdefiniować operację
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
168 Języki programowania
c = a + b;
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6.2 Ewolucja języków programowania 169
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
170 Języki programowania
2+3
(+ 2 3)
(* (+ 2 3) 7)
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6.2 Ewolucja języków programowania 171
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
172 Języki programowania
ojciec(marek, jurek).
ojciec(marek, zosia).
matka(jola, jurek).
matka(jola, zosia).
W językach tych definiuje się relacje wiążące elementy, oraz określa pe-
wien zasób wiedzy początkowej. Nie inaczej jest w powyższym przykładzie,
określamy relację rodzic, mówiącą o tym, że X jest rodzicem Y, jeśli X jest
ojcem Y (pierwsza linijka) lub X jest matką Y (druga linijka). W efek-
cie mamy powiedziane co to znaczy „być czyimś rodzicem”. Następnie
w podobny sposób mamy powiedziane, co to jest relacja małżeństwa, by-
cia przodkiem, czy też rodzeństwa. Na koniec musimy wprowadzić pewien
zbiór wiedzy, są to linie zaczynające się od słów matka i ojciec. Ostatecznie
otrzymujemy pewną bazę wiedzy o niewielkiej rodzinie, teraz jeśli zapy-
tamy system czy np. jola i marek są małżeństwem otrzymamy odpowiedź
twierdzącą, mimo iż nie podaliśmy tego w sposób efektywny a jedynie na
podstawie relacji z innymi elementami. Dzięki takiemu podejściu widać,
że języki te nadają się do pisania systemów wspomagających wnioskowanie
i w konsekwencji do tzw. baz wiedzy.
Sam język Prolog, użyty w powyższym przykładzie został wymyślony
w 1970 roku przez Alain-a Colmerauer-a oraz Philippe-a Roussel-a. Oni
to wraz ze swoją grupą prowadzili badania na Uniwersytecie w Marsylii
dotyczące sztucznej inteligencji. Stworzyli tam pierwszą specyfikację tego
języka i rozwijali go dalej.
Jak widać historia języków programowanie jest bardzo bogata nie tylko
w różnego rodzaju dialekty tego samego języka, lecz przede wszystkim w
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6.3 Klasyfikacja języków programowania 173
Programowanie sekwencyjne
Konstrukcja tego typu języków odzwierciedlała prawie dokładnie język ma-
szyny na jakiej one działały. Były to często programy zapisane w asem-
blerze danego procesora. Nawet jeśli były to języki wyższego poziomu, jak
np. FORTRAN IV, to typy danych jakie w nim występowały również sta-
nowiły odzwierciedlenie tego co mógł reprezentować procesor. Zatem języki
te posiadały wyłącznie typy liczbowe ewentualnie znakowe, jednak nie było
możliwości definicji własnych typów danych. Taka cecha została wprowa-
dzona dopiero w poźniejszych językach np. Pascalu.
Programowanie strukturalne
W latach sześćdziesiątych ubiegłego wieku zaczęto zwracać większą uwagę
na sposób pisania, czyli metodologię. Zauważono, że nie wystarczy jeden czy
dwu zręcznych programistów. Coraz częściej programy były większe zatem
trudniejsze do opanowania i w konsekwencji człowiek popełniał więcej błę-
dów. Zaistniała potrzeba zaprojektowania takich języków programowania,
który wprowadzałyby pewien porządek w programie, były wsparciem dla
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
174 Języki programowania
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6.3 Klasyfikacja języków programowania 175
Programowanie obiektowe
Programowanie funkcjonalne
Programowanie w logice
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
176 Języki programowania
Pojawiają się w tych językach pewne uogólnienia typów danych, między in-
nymi możliwość definiowania tablic z dolnym indeksem innym niż 1, oraz
tablic dynamicznych. Zwykle w tych językach pojawia się ścisła kontrola
typów oraz typy wbudowane, wciąż nie ma typów definiowanych przez użyt-
kownika. Struktura programu przypomina strukturę hierarchiczną i blo-
kową, co powoduje mniejszą potrzebę użycia instrukcji GOTO. Pojawia się
możliwość dynamicznego zarządzania pamięcią. Wiele z języków posiada
słowa kluczowe i słowa zastrzeżone.
Przykładem języka programowania drugiej generacji jest Algol-60.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6.4 Kompilacja vs. interpretacja 177
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
178 Języki programowania
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6.4 Kompilacja vs. interpretacja 179
Edycja
plik biblioteczny
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
180 Języki programowania
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6.4 Kompilacja vs. interpretacja 181
Edycja
plik biblioteczny
Interpretacja
wykonanie programu
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
182 Języki programowania
Edycja
plik biblioteczny
+ (,
) & -
!!, )!). & /102
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6.5 Elementy teorii języków formalnych 183
6.5.1 Gramatyka
W celu formalnego zdefiniowania języka wprowadza się następujące pojęcia
słowa — skończony ciąg liter alfabetu, spotyka się również nazwę słowo
nad alfabetem;
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
184 Języki programowania
dowolne zdanie i znaczenie jego słów jest jasne w oderwaniu od reszty zda-
nia, czyli od kontekstu, to taki język będzie bezkontekstowy. Analogicznie
dla języka kontekstowego. Niestety trudno na pierwszy rzut oka wyobrazić
sobie język naturalny19 bezkontekstowy i faktycznie nie ma takich języków.
19
Mamy tu na myśli polski, angielski ...
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
6.5 Elementy teorii języków formalnych 185
<litera>::=A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|
a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
<cyfra>::=0|1|2|3|4|5|6|7|8|9
<znak_liczby>::=+|-
<litera_lub_cyfra>::=<litera>|<cyfra>
<identyfikator>::=<litera>{<litera_lub_cyfra>}
<ciag_cyfr>::=<cyfra>{<cyfra>}
<liczba_całkowita_bez_znaku>::=<ciąg_cyfr>
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
186 Języki programowania
litera
a
b
cyfra
z 0
A 9
Y
Z
znak_liczby litera_lub_cyfra
+ litera
− cyfra
liczba_calkowita_bez_znaku
cyfra
identyfikator
litera litera_lub_cyfra
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Rozdział 7
System operacyjny
1
Patrz punkt 7.9
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
188 System operacyjny
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
7.2 System operacyjny a architektura komputera 189
Podsystem wejścia/wyjścia:
Podsystem ochrony:
• identyfikacja użytkownika;
• ochrona zasobów systemowych przed nieautoryzowanym dostę-
pem;
• ustanowienie i kontrolowanie wzajemnych relacji pomiędzy użyt-
kownikiem, czynnościami jakie wykonuje i programami jakie uru-
chamia a przyznanymi prawami dostępu;
• zarządzanie rozliczeniem — sprawowanie kontroli nad stopniem
wykorzystania systemu przez poszczególnych użytkowników;
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
190 System operacyjny
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
7.3 Klasyfikacja systemów operacyjnych 191
U¯YTKOWNICY
Edytor tekstu
Baza danych
Arkusz kalkulacyjny
OPROGRAMOWANIE
SYSTEM OPERACYJNY
SPRZÊT
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
192 System operacyjny
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
7.4 Realizacja zadań 193
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
194 System operacyjny
WSTRZYMANY
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
7.4 Realizacja zadań 195
a) CPU P1 P1
I/O P1
b) CPU P2 P2
I/O P2 P2
c) CPU P1 P1 P2 P2
I/O P1 P2 P2
d) CPU P1 P2 P1 P2
I/O P1 P2 P2
• obliczenia — 5 TU,
• obliczenia — 2 TU,
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
196 System operacyjny
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
7.6 Procesy, wątki, . . . 197
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
198 System operacyjny
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
7.9 Czy każdy komputer musi posiadać system operacyjny? 199
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
200 System operacyjny
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
7.10 Przykładowe systemy operacyjne 201
7.10.1 Amoeba
Amoeba jest systemem znacznie różniącym się od pozostałych zaprezento-
wanych w tym opracowaniu. Koncepcje jakie legły u jego podstaw są jednak
naturalną konsekwencją zmian zachodzących w świecie informatyki. W la-
tach 70-tych i początkach 80-tych, królowały maszyny wieloużytkownikowe
— na jednym komputerze mogło i często pracowało wiele osób. Postęp w
takich gałęziach nauki i przemysłu jak chemia czy fizyka pozwolił na pro-
dukowanie coraz lepszych (bardziej wydajnych) i tańszych układów elek-
tronicznych przy jednoczesnym spadku kosztów wytwarzania. Dzięki temu
praktycznie każdy, kto tylko chciał, mógł posiadać komputer wyłacznie na
swoje potrzeby; tak więc od połowy lat 80-tych do połowy lata 90-tych
mamy do czynienia z sytuacją, gdy na jednym komputerze pracowała jedna
osoba. Większą szybkość pracy komputera można osiągnąć na dwa spo-
soby: produkować wydajniejsze układy elektroniczne (co jest rozwiązaniem
kosztownym i wymagającym czasu) lub łącząc wiele komputerów ze sobą
w taki sposób aby „udawały” jeden. Drugie rozwiązanie jest znacznie tań-
sze a poza tym dostępne od zaraz. W drugim przypadku jest tylko jeden
istotny szczegół — jak sprawić, aby wiele maszyn działało jak jedna? W
poszukiwaniu odpowiedzi na to pytanie już w 1980 roku rozpoczyna pracę
kierowany przez prof. Andrew S. Tanenbaum’a, z uczelni Vrije Universi-
teit (ang. Free University) z Amsterdamu, zespół badający rozproszone
systemy komputerowe (ang. distributed computer system). Badania te, pro-
wadzone także przy udziale Centrum voor Wiskunde en Informatica (ang.
Centre for Mathematics and Computer Science), zaowocowały powstaniem
nowego rozproszonego systemu operacyjnego nazwanego Amoeba (1983, V
1.0)6 . Z założenia Amoeba jest uniwersalnym (to znaczy nie przeznaczonym
do wykonywania konkretnych zadań) systemem operacyjnym pozwalającym
6
Ostatnie oficjalne wydanie V 5.3 pochodzi z roku 1996.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
202 System operacyjny
7.10.2 Mac OS
Mac OS firmy Apple nierozłącznie kojarzony jest z graficznym interfejsem
użytkownika — GUI (Graphical User Interface). Inspiracją do jego po-
wstania, podobnie jak dla pozostałych systemów komunikujących się z oto-
czeniem głównie za pomocą obrazu i urządzenia wskazującego, była zbu-
dowana w 1973 w laboratoriach firmy Xerox w Palo Alto maszyna Xerox
Alto, która z czasem wyposażona została w pierwszy kompleksowy inter-
fejs graficzny zrealizowany w komercyjnym produkcie Xerox Star (1981).
Zaprezentowany w 1983 Apple Lisa znacznie rozszerzał powstałe tam kon-
cepcje, czyniąc urządzenie atrakcyjnym dla potencjalanych nabywców. Nie-
stety ze względu na cenę wynoszącą 10.000 USD (Xerox Alto 32.000 USD,
Xerox Star 16.000 USD) oraz niewystarczającą wydajność nie osiągnął on
większego sukcesu. Udało się to jednak jego następcy — Apple Macintosh
(1984). Mac był od Lisy tańszy (2.500 USD), mniejszy, szybszy a przede
wszystkim dużo bardziej przyjazny dla użytkownika. Wraz z komputerem
wprowadzono system operacyjny dla niego przeznaczony — System 1. Za-
soby komputera (pliki, programy itp) przedstawiano w nim pod postacią
ikon, umieszczonych w oknach pozwalając tym samym na ich grupowanie.
7
Sama idea łączenia komputerów za pomocą sieci lub innego łącza jest jak pisaliśmy
znana wcześniej. Jednak tradycyjne łączenie w tzw. cluster zapewniało współpracę jednak
bez wspólnego systemu operacyjnego. Każdy z komputerów miał własny system i jedynie
wykonywał zlecone zadania na rzecz kolektywu.
8
Mamy wówczas do czynienia z rozproszeniem (ang. distribution) i równoległością
(ang. parallelism) przetwarzania co przekłada się na zwiększenie ogólnej wydajności.
9
Podkreślamy, do systemu a nie na konkretną maszynę!
10
Zachowanie takie określa się terminem przezroczystość (ang. transparency).
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
7.10 Przykładowe systemy operacyjne 203
Dodatkowe opcje udostępniane były przez system menu. Kontrolę nad tymi
elementami (wybieranie, aktywacja, przemieszczanie itp.) sprawowano za
pomocą jednoprzciskowego urządzenia wskazującego — myszy. Same zaś
elementy rozmieszczono na wirtualnym biurku nazywanym pulpitem. Dą-
żąc do maksymalnej intuicyjności pracy wprowadzono na przykład ikonę
kosza — po przeciągnięciu na nią dowolnego pliku ulegał on skasowaniu.
System operacyjny pozwalał na wykonywanie w tym samym czasie tylko
jednego programu; nie było pamięci wirtualnej czy chronionej a także ob-
sługi kolorów. Nie istniała możliwość zagnieżdżania katalogów (folderów
ang. folders). Pliki przechowywane były na najwyższym poziomie hierar-
chii systemu plików (ang. root level of a disk); z każdym z nich skojarzona
była jedynie nazwa folderu do którego należy plik.
Mankament ten usunięto w wersji systemu znanej pod nazwą System 3,
kiedy to hierarchiczny system plików HFS (Hierarchical File System), za-
stąpił używany do tej pory w wersji 1 i 2 MFS (Macintosh File System).
Ponadto cały czas dodawano drobne zmiany w interfejsie czyniące pracę
przyjemniejszą. Przykładem może być możliwość minimalizacji i maksyma-
lizacji okienek.
Kolejnym istotnym krokiem w rozwoju Mac OS był System 7 (1990).
System ten w końcu stał się wielozadaniowy (we wcześniejszym (System 4)
użytkownik decydował czy pracuje w trybie jedno czy wielozadaniowym).
Wprowadzono 32 bitowe adresowanie oraz pamięć wirtualną. Razem z syste-
mem zintegrowano obsługę sieci poprzez protokół AppleTalk oraz możliwość
współdzielenia plików za pomocą AppleShare (wcześniej były to dodatkowe
opcje). Pojawił się także mechanizm Drag and Drop oraz kolejne zmiany
w interfejsie, jak choćby wykorzystanie możliwości oferowanych przez kolo-
rowe monitory, w celu nadania bardziej przestrzennego wyglądu elementom
ekranu. Coraz wyraźniej zarysowywała się jednak potrzeba opracowania no-
wego systemu operacyjnego i nie zmieniło tego faktu nawet pojawienie się w
1997 Mac OS 811 . Systemu wielowątkowego, z ulepszonym systemem plików
HFS+, obsługą USB czy FireWire. . . ale wciąż za mocno związanego z po-
przednimi wersjami, a więc co raz mniej odpowiadającego nowym trendom
w rozwoju systemów operacyjnych.
Nadzieją na zmiany, po upadku projektu Copland stał się zakup w 1997
firmy NeXT Steve’a Jobs’a (jednego z założycieli Apple Computer) 12 . W
11
Po raz pierwszy nazwy Mac OS użyto w stosunku do System 7.6 wydanego w styczniu
1997.
12
Pierwszy system NeXTSTEP wydany został w 1988 roku; bazował na mikrojądrze
systemu Mach oraz elementach systemu BSD (4.3), a także oferował najbardziej zaawan-
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
204 System operacyjny
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
7.10 Przykładowe systemy operacyjne 205
Nowością jak na tamte czasy była możliwość obsługi przez niego „mini-
dyskietek” tj. 160kB jednostronnych dysków 5.25 cala (w odróżnieniu od
8-calowych ówczesnych „normalnych” dyskietek). Podobnie jak w CP/M
także i tutaj nie było katalogów — wszystkie pliki znajdowały się w jed-
nym miejscu. Zaczęto jednak przechowywać pewne dodatkowe informacje
związane z plikami, jak choćby dokładny ich rozmiar, ulepszono algorytm
przydziału miejsca na dysku a system jako całość działał szybciej niż pier-
wowzór. Istniała także możliwość wykonywania prostych skryptów powłoki.
Kolejne lata to ciągłe usprawnianie i dodawanie nowych cech funkcjonalnych
do systemu. O ile przez pierwsze lata swojego istnienia DOS okazał się cał-
kiem udanym produktem, o tyle na początku lat 90-tych stało się jasne, że
ze względu na ograniczenia — szczególnie dobrze widoczne przy porówna-
niu z systemami rodziny UNIX — należy zaprzestać dalszego jego rozwoju.
Moment rozstania z DOS-em został nieznacznie przesunięty w czasie dzięki
Windows 3.1 — nakładce na DOS pozwalającej na bardziej intuicyjną i
przyjazną pracę, ale na horyzoncie widać było już Windows 95 — początek
końca DOS-a.
We wrześniu 1981 roku Microsoft rozpoczął prace nad czymś co nazwano
Interface Manager. W projekcie tym wykorzystano efekty prac laboratorium
Xerox-a z Palo Alto, gdzie po raz pierwszy pojawiła się idea interfejsu gra-
ficznego — GUI (ang. Graphical User Interface). Warto zauważyć, że w
tamtych czasach GUI postrzegane było raczej w kategoriach ciekawostki niż
przedsięwzięcia mającego przynieść poprawę w kontaktach człowiek – ma-
szyna. Na wiosnę 1983 Microsoft ujawnił fakt prowadzenia prac nad swoją
wersją GUI nazwaną Windows. W sierpniu 1985 pojawiła się Windows 1.0,
który wówczas nie był niczym więcej niż nakładką na DOS-a (konkretnie
MS-DOS 2.0). Operował jednak paletą 256 kolorów, pozwalał zmieniać roz-
miar okien aplikacji (których poza dostarczonymi wraz z Windows takimi
jak kalendarz, notatnik, zegarek, organizator nie powstało za wiele), mini-
malizować, maksymalizować i zmniejszać do ikony okna; nie było jednak
możliwości nakładania się okien. Po prawie dwóch latach (kwiecień 1987)
światło dzienne ujrzał Windows 2.0. Ta wersja zawierała wiele istotnych
usprawnień: uwzględniono możliwości nowego procesora Intel 286, dodano
wsparcie dla kart graficznych VGA, pamięci rozszerzonej, mechanizmów dy-
namicznej wymiany danych (DDE - ang. Dynamic Data Exchange); okna
mogły być swobodnie przemieszczane po ekranie a użytkownik mógł korzy-
stać z klawiatury w celu szybszego wykonywania pewnych operacji (tzw.
skróty klawiszowe). Pojawiła się także wersja przeznaczona dla procesora
Intel 386, oznaczona Windows 2.0/386, pozwalająca na jednoczesne uru-
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
206 System operacyjny
14
Wprawdzie podczas ładowania systemu mamy do czynienia z DOS-em, konkretnie
MS-DOS 7.0, to jednak Windows 95 po załadowaniu przejmuje całkowicie kontrolę nad
systemem. Prawdą jest również, że zawierał on w sobie sporo kodu 16-bitowego.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
7.10 Przykładowe systemy operacyjne 207
7.10.4 NetWare
We wczesnych latach 70-tych Novell Data Systems konstruuje wieloużyt-
kownikowy system komputerowy złożony z jednostki głównej (zawierającej
procesor, pamięci, napędy dyskowe, interfejsy do podłączenia urządzeń ze-
wnętrznych takich jak na przykład drukarka) oraz terminali pozwalających
na zdalną pracę na jednostce głównej. Całość pracowała pod kontrolą sys-
temu operacyjnego bazującego na CP/M i Unix, i nosiła nazwę NOS (ang.
Network Operating System). W tamtych czasach istniało wiele firm oferu-
jących podobne rozwiązania. Na ich tle Novell wyróżnił się, i zdobył swoją
pozycję, dokonując kilku nietypowych, jak na ówczesne czasy, wyborów do-
tyczących dalszego rozwoju:
• Gdy tylko światło dzienne ujrzały pierwsze komputery IBM PC, No-
vell zaakceptował ich współistnienie w świecie komputerów, wycho-
dząc z założenia, że system w którym „końcówki” nie są jedynie ter-
minalami, ale pełnoprawnymi komputerami będzie działał sprawniej.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
208 System operacyjny
7.10.5 OS/390
System operacyjny OS/390 firmy IBM stworzony został z myślą o produ-
kowanych przez nią komputerach typu mainframe serii System/370 (1970
rok), który był następcą linii System/360 15 ). A docelowo miał być sercem
15
Liczba 360 w nazwie miała symbolizować cały zakres zapotrzebowań jakie była w
stanie pokryć rodzina maszyn tej serii. Podkreślać miała uniwersalność zastosowań oraz
dostępność dla szerokiego kręgu odbiorców o różnych potrzebach i możliwościach finan-
sowych. Stąd 360 — czyli 360 stopni kątowych. Drugie źródło tłumaczy nazwę jako
pochodzącą od lat 60-tych i następne od kolejnych dekad ubiegłego wieku.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
7.10 Przykładowe systemy operacyjne 209
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
210 System operacyjny
7.10.6 OS/400
Historia OS/400 sięga swymi korzeniami daleko w przeszłość. Wprawdzie
system ten pojawił się w 1988 jednak był on konsekwencją działań po-
dejmowanych od końca lat 60-tych. W roku 1961 DEC (Digital Equipment
Corporation) wprowadza na rynek komputer PDP-1 (Programmed Data Pro-
cessor 1), postrzegany przez wielu jako pierwsze urządzenie nadające się do
zastosowań komercyjnych. W dość krótkim czasie liczne grono powstałych
na jego bazie konstrukcji rozwojowych udowodniło, że rynek niewielkich (i
relatywnie tanich) komputerów (nazywanych minikomputerami dla odróż-
nienia od „prawdziwych” komputerów 17 ) może być atrakcyjny nawet dla
takich gigantów jak IBM. IBM wkracza na rynek minikomputerów w roku
1969 przedstawiając System/3. W sześć lat później pojawia się pierwszy
przedstawiciel rodziny System/3X — System/32. Niestety zarówno on, jak
i wprowadzony w 1977 roku System/34 nie zdobyły większego zaintereso-
wania ze strony potencjalnych klientów. Dopiero pochodzący z 1978 Sys-
tem/38 a w szczególności wprowadzony w 1983 System/36 zyskują uznanie
w oczach odbiorców — każdy z innych powodów. System/36 – głównie za
sprawą przyjaznego interfejsu i łatwości obsługi. System/38 był natomiast
zaawansowanym technicznie urządzeniem, w którym wcielono w życie tak
rewolucyjne pojęcia jak obiekt czy enkapsulacja danych a w szczególności
maszyna wirtualna. Pomysł polegał na uniezależnieniu oprogramowania od
fizycznie istniejących komponentów. Osiągnięto to wprowadzając interfejs
programistyczny znany niegdyś pod nazwą MI (ang. Machine Interface), a
obecnie jako TIMI (ang. Technology Independent Machine Interface). Użyt-
kownik/programista mógł komunikować się ze sprzętem tylko i wyłącznie
przez ten interfejs; nie miał żadnej możliwości wglądu w to co dzieje się
pod nim. Tworzone oprogramowanie w pierwszej fazie przekształcane było
do kodu mogącego wykonywać się właśnie na takiej abstrakcyjnej maszynie.
Następnie za pośrednictwem interfejsu, bez ingerencji człowieka, przekształ-
cane było do postaci nadającej się do wykonania na maszynie rzeczywistej.
Połączenie technicznych koncepcji System/38 z łatwością użytkowania
System/36 zaowocowało powstaniem w 1988 komputera AS/400 (ang. AS
17
Które w tamtych czasach zajmowały pokaźne powierzchnie.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
7.10 Przykładowe systemy operacyjne 211
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
212 System operacyjny
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
7.11 Zadania 213
7.11 Zadania
1. Wymień główne zadania stawiane systemowi operacyjnemu.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
214 System operacyjny
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Rozdział 8
Sieci komputerowe
8.1 Po co mi ona?
Jedną z najcenniejszych rzeczy w dzisiejszym świecie jest informacja. Skon-
struowanie pierwszych komputerów w połowie XX wieku pozwoliło na nie-
spotykane przyspieszenie przetwarzania danych. Komputery najpierw po-
woli, głównie za sprawą swojej ceny i skomplikowanej obsługi, z czasem coraz
szybciej znajdowały zastosowanie w najprzeróżniejszych dziedzinach naszej
egzystencji. Wraz ze wzrostem ich ilości, problemy zaczęła sprawiać wy-
miana danych pomiędzy nimi. Coraz więcej urządzeń musiało dysponować
bądź takimi samymi danymi, bądź pojawiały się komputery, które posia-
dały informację użyteczną dla innych. W tej sytuacji potrzebne dane trzeba
było wciąż kopiować na taśmę lub dyskietkę, przenosić i wgrywać w nowym
miejscu. Rozwiązanie takie nie należało do najbezpieczniejszych, głównie
za sprawą podatności na utratę zapisanych danych i przypadkowe zniszcze-
nia fizyczne a także potencjalną możliwość uzyskania do nich dostępu przez
osoby do tego nieuprawnione. Ponieważ zarówno szybkość przetwarzania
jak i możliwe pola zastosowań ulegały ciągłemu zwiększaniu, aktualizacje
zgromadzonych i przetwarzanych informacji musiały być coraz częstsze. W
tej sytuacji najefektywniejszą metodą, zarówno pod względem szybkości
jak i niezawodności, przenoszenia danych stało się połączenie komputerów
za pomocą przewodu. Z czasem, mimo związanych z tym kosztów i wzrostu
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
216 Sieci komputerowe
LAN — (ang. local area network) sieć lokalna łączy ze sobą urządzenia sie-
ciowe znajdujące się w „niewielkiej” odległości. Termin „niewielkiej”
równie dobrze może oznaczać 1 metr — gdy łączymy się z kompute-
rem kolegi stojącym na biurku obok, jak i 200 metrów — gdy łączymy
się z komputerem znajdującym się w sąsiednim budynku. Zawsze po-
zostanie to jednak ograniczony obszar, niewielki (wręcz punktowy) w
skali kraju czy świata.
WAN — (ang. wide area network) sieć rozległa to, oprócz dużo większego
zasięgu niż sieci LAN, skalowalność rozwiązania. Sieci tego typu muszą
umożliwiać rozbudowę w miarę potrzeb, przy założeniu łączenia wielu
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
8.2 Struktura fizyczna sieci 217
MAN — (ang. metropolitan area network) sieć miejska jest czymś pośred-
nim między siecią lokalną a rozległą. Jeszcze 10 lat temu wyraźnie
można było powiedzieć, która sieć jest siecią miejską. Obecnie jest to
trudne, gdyż sieci miejskie są włączane w ogólny szkielet Internetu,
czyli sieć rozległą, co powoduje, że stają się jego częścią.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
218 Sieci komputerowe
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
8.3 Architektura sieci 219
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
220 Sieci komputerowe
serwer.
Serwerem nazywany jest dowolny komputer przyłączony do sieci i udo-
stępniający swoje zasoby innym urządzeniom. Poprzez zasób rozumiemy tu-
taj zarówno dysk, pamięć, czy też moc obliczeniową. Na ogół sposób pracy
i konstrukcja fizyczna serwera zoptymalizowane są pod kątem wykonywania
określonej funkcji. Nie zapominajmy jednak, iż „serwer” nie musi oznaczać
osobnego komputera; kilka serwerów może funkcjonować w ramach jednej
fizycznej maszyny, wtedy też mówi się nie o serwerze a usłudze lub usługach
jakie udostępnia. Ze względu na sposób pracy wyróżnia się zwykle:
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
8.3 Architektura sieci 221
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
222 Sieci komputerowe
nazwa_użytkownika@serwer.poczty
Część po znaku @ określa miejsce w sieci gdzie list ten zostanie prze-
słany (jest to nazwa fizycznego komputera — hosta), natomiast po-
została informuje, do której „skrzynki” należy go przekazać, czyli kto
jest adresatem.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
8.3 Architektura sieci 223
cza to, iż każde z urządzeń może pełnić funkcję zarówno klienta jak i ser-
wera. Sieci tego typu zbudować można w oparciu o dowolną topologię,
co więcej nie ma konieczności stosowania specjalnych środowisk pracy czy
systemów operacyjnych. Dzięki temu ich koszt i niezbędny nakład pracy
związany z instalacją zredukowane są do minimum. Praktycznie w opar-
ciu o każdy dzisiejszy komputer (a raczej ich zbiór) można zbudować sieci
tego typu bez większego nakładu pracy i środków. Trzeba jednak przy
tym pamiętać o pewnych zagrożeniach i ograniczeniach wynikających z ta-
kiej struktury. Bezpieczeństwo w tego typu systemach zależy od każdego
z użytkowników. Wszyscy muszą przestrzegać pewnych zasad i procedur
postępowania. Niewiele warte staną się nawet najwymyślniejsze hasła użyt-
kowników, gdy jeden z nich ujawni (celowo lub przez przypadek) swoje.
Ponadto współpraca kilkunastu osób wymagać może ciągłej wymiany pew-
nych dokumentów. Problemem staje się wówczas zapewnienie dostępu do
ich najaktualniejszej wersji. Zwykle poszukiwany plik będzie znajdował się
na kilku maszynach, co zmusi nas do ich przejrzenia i wybrania tego wła-
ściwego. Co więcej, może się okazać, że komputer z najaktualniejszą wersją
właśnie został wyłączony, gdyż jego użytkownik postanowił właśnie zakoń-
czyć pracę i zapomniał poinformować o tym fakcie pozostałych.
Ze względu na wspomniane cechy sieci typu każdy-z-każdym idealnie
nadają się dla małych firm, czy grup roboczych wchodzących w skład więk-
szych organizacji. Doskonale powinny zdać także egzamin w przypadku
„sąsiedzkiego” połączenia w jednym bloku mieszkalnym czy odcinku ulicy.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
224 Sieci komputerowe
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
8.4 Kilka przydatnych pojęć 225
(b)
(a) (c)
8.4.2 Protokół
Mianem protokołu określamy zbiór pewnych zasad i sposobów postępowa-
nia prowadzących do osiągnięcia pewnego celu. Zauważmy, że na codzień
spotykamy się z protokołami nie zdając sobie nawet z tego sprawy. Tele-
fonując do kogoś realizujemy „protokół nawiązania połączenia głosowego z
odległym klientem”. Gdy nasz rozmówca podniesie słuchawkę, nie mówimy
od razu tego co mamy do przekazania, lecz wpierw „inicjujemy wymianę
danych”. Zwykle następuje wymiana informacji niezbędnych do nawiązania
połączenia w rodzaju:
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
226 Sieci komputerowe
Odbiorca: Halo.
Nadawca: Dzień dobry, mówi X.
Odbiorca: Witam serdecznie, w czym mogę pomóc.
Nadawca: Dzwonię w sprawie...
Savoir-vivre to nic innego jak zbiór zasad i ogólnie przyjętych norm po-
stępowania w różnych sytuacjach życiowych. Nie obcy jest nam przecież
termin protokół dyplomatyczny. Ustalenia takie chronią przed niezręczną
lub kłopotliwą sytuacją o co nie trudno w przypadku dyplomatów mają-
cych kontakty z ludźmi wychowanymi w ramach różnych kultur. Podobnie
korzystanie z elektronicznych form przekazu, wymaga ustalenia znaczenia
pewnych sygnałów i kolejności ich wymiany w celu zainicjowania pewnego
działania. Fizyczne połączenie jest warunkiem koniecznym, ale nie wy-
starczającym dla pomyślnej realizacji komunikacji sieciowej. Jako przykład
szeroko rozpowszechnionych i obecnie najczęściej wykorzystywanych proto-
kołów sieciowych posłużyć może stos protokołów TCP/IP.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
8.4 Kilka przydatnych pojęć 227
8.4.3 TCP/IP
Stos protokołów TCP/IP1 jest obecnie najczęściej stosowanym protoko-
łem w sieciach komputerowych w ogóle i jedynym w Internecie w szczegól-
ności.
W celu lepszego zrozumienia idei omawianego protokołu posłużymy się
przykładem Internetu. Jest to sieć sieci — „twór” integrujący w sobie różne
sieci zapewniając im mechanizm jednolitych usług. Oznacza to, iż wyma-
gane jest aby informacje z dowolnego komputera w jednej sieci mogły być
przekazywane do innego komputera w każdej z pozostałych. Dla realizacji
tego postulatu niezbędne okazuje się wsparcie zarówno od strony programo-
wej jak i technicznej. Aspekt techniczny jest częściowo zapewniony poprzez
odpowiednią organizację sieci rozległej (zob. 8.2.1), gdyż Internet jest wła-
śnie ogromną, bo otaczającą całą kulę ziemską siecią WAN. Dlaczego tylko
częściowo? Ponieważ, sama topologia sieci i jej konfiguracja zapewnia tylko
i wyłącznie możliwość przesyłania w niej bitów informacji, ale jak to było
powiedziane wcześniej (zob. 8.4.1), istnieje potrzeba by tę informację poka-
wałkować, a następnie wysłać do miejsca docelowego. I właśnie adresowanie
jest zapewniane poprzez jeden z dwu protokołów wchodzących w skład pro-
tokołu TCP/IP, a mianowicie protokół IP.
Można zastosować tu pewną analogię do wysyłania zwykłego listu. List
ten aby dotarł na miejsce musi posiadać adres, również w dobrym tonie
jest podać informację o nadawcy. Protokół IP zapewnia, że dane dotrą
pod wskazany adres2 , zatem można przyjąć, że jest on rodzajem koperty w
którą zostaje włożony list. Samo adresowanie komputerów w sieci, odbywa
się poprzez nadawanie im adresów cyfrowych. Jest to tak zwany numer IP,
w formacie czterech kolejnych bajtów oddzielonych kropkami, przykładowy
adres może mieć postać: 212.191.65.2. Administrator komputera, podłą-
czając go do sieci globalnej musi mu przypisać adres i od tego momentu
komputer ten będzie widziany ze świata pod tą cyfrową reprezentacją (zob.
również 8.4.4). Można zapytać, czy każdy numer składający się z czterech
kolejnych liczb z zakresu 0 . . . 255 jest prawidłowym adresem. Oczywiście
nie, po pierwsze dlatego, że taki numer już gdzieś w sieci może istnieć, czyli
może być nadany jakiemuś komputerowi, a przecież nie można wmeldować
1
W dalszej części będziemy mówili po prostu protokół TCP/IP, chociaż słowo stos jest
tutaj bardzo adekwatne, gdyż podkreśla fakt, że nie jest to pojedynczy protokół, lecz
dwa: TCP i IP.
2
Tak naprawdę, to jest to tylko częściowe wsparcie, resztę musi dostarczyć sprzęt i
odpowiednie oprogramowanie, jednak to protokół IP jest nośnikiem adresu i oczywiście
reszty informacji.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
228 Sieci komputerowe
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
8.5 Urządzenia sieci komputerowych 229
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
230 Sieci komputerowe
1 2
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
8.5 Urządzenia sieci komputerowych 231
1 2 3
Routery spełniają podobną rolę jak karty sieciowe ale w sieciach WAN,
tam właśnie są podstawowymi urządzeniami dostępowymi. Jednak
analogii tej nie można posuwać zbyt daleko, gdyż routery są urzą-
dzeniami znacznie bardziej inteligentnymi od kart sieciowych, a ich
zadanie nie sprowadza się wyłącznie do przesłania dalej danych. Wy-
maga się od nich stwierdzenia którą drogą najlepiej (najszybciej) te
dane można posłać. Z powyższego wynika, że router nie musi był po-
łączony wyłącznie z jednym sąsiadem i rzeczywiście tak jest, na ogół
jeden router ma kilku a nawet kilkunastu sąsiadów i przez kilku z nich
może wysłać informację. Przypomina to trochę sytuację z jaką mamy
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
232 Sieci komputerowe
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
8.6 Zadania 233
8.6 Zadania
1. Omów główne rodzaje topologii sieci komputerowych.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
234 Sieci komputerowe
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Dodatek A
Podstawowe jednostki
i pojęcia w informatyce
bajt — (ang. byte) jest zbiorem 8-miu bitów, zatem bajt informacji to
osiem dowolnych wartości z dwuelementowego zbioru wartości {0, 1}.
Dla przykładu następujące dwa ciągi zero-jedynkowe są bajtami in-
formacji 01101101, 11101100, należy zauważyć, że bajty zawsze są za-
pisywane w postaci ośmiu bitów, niezależnie od tego czy na początku
są zera czy też nie. Jako oznaczenie dla jednostki bajtu przyjęto dużą
literę „B”.
bit — (ang. bit) jest najmniejszą jednostką miary informacji, bitem może
przyjmować jedną z dwu wartości ze zbioru {0, 1}. Należy zwrócić
uwagę, że zero w tym wypadku również niesie ze sobą informację,
podobnie jak jedynka. Jako oznaczenie dla jednostki bitu przyjęto
małą literę „b”.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
236 Podstawowe jednostki i pojęcia w informatyce
najstarszy bit — jest to bit znajdujący się najdalej po lewej stronie bajtu.
1
Jednak zgodność ta występuje w ramach pewnego podzbioru rozkazów, i tak zarówno
np. Pentium 4 ma pewną klasę rozkazów, które nie występują w procesorach AMD, i
procesory AMD mają rozkazy klasy SSE, które nie występują w procesorach INTEL.
Jeśli program będzie wykorzystywał te specyficzne rozkazy to oczywiście nie może zostać
uruchomiony na obu tych procesorach.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Dodatek B
Kody ASCII
Dec Hex Znak Dec Hex Znak Dec Hex Znak Dec Hex Znak
32 20 SPC 33 21 ! 34 22 ” 35 23 #
36 24 $ 37 25 % 38 26 & 39 27 ’
40 28 ( 41 29 ) 42 2A * 43 2B +
44 2C , 45 2D - 46 2E . 47 2F /
48 30 0 49 31 1 50 32 2 51 33 3
52 34 4 53 35 5 54 36 6 55 37 7
56 38 8 57 39 9 58 3A : 59 3B ;
60 3C < 61 3D = 62 3E > 63 3F ?
64 40 @ 65 41 A 66 42 B 67 43 C
68 44 D 69 45 E 70 46 F 71 47 G
72 48 H 73 49 I 74 4A J 75 4B K
76 4C L 77 4D M 78 4E N 79 4F O
80 50 P 81 51 Q 82 52 R 83 53 S
84 54 T 85 55 U 86 56 V 87 57 W
88 58 X 89 59 Y 90 5A Z 91 5B [
92 5C \ 93 5D ] 94 5E ^ 95 5F _
96 60 ‘ 97 61 a 98 62 b 99 63 c
100 64 d 101 65 e 102 66 f 103 67 g
104 68 h 105 69 i 106 6A j 107 6B k
108 6C l 109 6D m 110 6E n 111 6F o
112 70 p 113 71 q 114 72 r 115 73 s
116 74 t 117 75 u 118 76 v 119 77 w
120 78 x 121 79 y 122 7A z 123 7B {
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
238 Kody ASCII
Dec Hex Znak Dec Hex Znak Dec Hex Znak Dec Hex Znak
124 7C — 125 7D } 126 7E ∼ 127 7F Del
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
239
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
240 Kody ASCII
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
242 Kodowanie polskich znaków
Dodatek C
Standard ą ć ę ł ń ó ś ź ż
ISO 8859-2 1 B1 E6 EA B3 F1 F3 B6 BC BF
CP 1250 2 B9 E6 EA B3 F1 F3 9C 9F BF
CP 8523 A5 86 A9 88 E4 A2 98 AB BE
Mazowia 86 8D 91 92 A4 A2 9E A6 A7
Cyfromat 90 91 92 93 94 95 96 98 97
IEA-Swierk A0 9B 82 9F A4 A2 87 A8 91
Ventura 96 94 A4 A7 91 A2 84 82 87
ELWRO-Junior E1 E3 E5 EC EE EF F3 FA F9
AmigaPL E2 EA EB EE EF F3 F4 FA FB
TeXPL A1 A2 A6 AA AB F3 B1 B9 BB
Atari-Calamus D1 D2 D3 D4 D5 D6 D7 D8 D9
CorelDraw! E5 EC E6 C6 F1 F3 A5 AA BA
Unicode 105 107 119 142 144 F3 15B 17A 17C
Standard Ą Ć Ę Ł Ń Ó Ś Ź Ż
ISO 8859-2 4 A1 C6 CA A3 D1 D3 A6 AC AF
CP 1250 5 A5 C6 CA A3 D1 D3 8C 8F AF
CP 8526 A4 8F A8 9D E3 E0 97 8D BD
Mazowia 8F 95 90 9C A5 A3 98 A0 A1
Cyfromat 80 81 82 83 84 85 86 88 87
IEA-Swierk 8F 80 90 9C A5 99 EB 9D 92
Ventura 97 99 A5 A6 92 8F 8E 90 80
ELWRO-Junior C1 C3 C5 CC CE CF D3 DA D9
AmigaPL C2 CA CB CE CF D3 D4 DA DB
TeXPL 81 82 86 8A 8B D3 91 99 9B
Atari-Calamus C1 C2 C3 C4 C5 C6 C7 C8 C9
CorelDraw!
c
2001-2003 C5 F2
by P. Fulmański C9 Uniwersytet
& Ś. Sobieski, A3 D1 Łódzki.D3 FF z dnia:E14 stycznia
Wersja RC1 ED2004
Unicode 104 106 118 141 143 D3 15A 179 17B
Dodatek D
Organizacje standaryzujące
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
244 Organizacje standaryzujące
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Dodatek E
Rozwiązania zadań
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
246 Rozwiązania zadań
dziesiętnym.
a) 11100 → 34 → 1C → 28
b) 1011110001 → 1361 → 2F1 → 544
c) 10001010001 → 2121 → 451 → 1105
d) 100100100 → 444 → 124 → 292
e) 1110011100 → 1634 → 39C → 805
f) 101110001 → 561 → 171 → 369
g) 1001001100 → 1114 → 24C → 578
h) 101010000 → 520 → 150 → 336
i) 10100001 → 241 → A1 → 161
j) 1000101 → 105 → 45 → 69
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
E.1 Rozwiązania do rozdziału 2 247
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
248 Rozwiązania zadań
a) -20 → 10010100
b) +20 → 00010100
c) +47 → 00101111
d) -18 → 10010010
e) -37 → 00100101
f) -128 → 1000000010000000
g) +372 → 0000000101110100
h) -420 → 1000000110100100
i) -42 → 10101010
j) -15 → 10001111
a) -20 → 11101100
b) +87 → 01010111
c) +65 → 01000001
d) -18 → 11101110
e) +27 → 00011011
f) -99 → 10011101
g) -300 → 11010100
h) +77 → 01001101
i) -77 → 10110011
j) +503 → 0000000111110111
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
E.2 Rozwiązania do rozdziału 3 249
a) 0.5625 = 0.1001
b) 7.4375 = 111.0111
c) 11.0625 = 1011.0001
d) 4.6875 = 100.1011
e) 2.8125 = 10.1101
f) 13.875 = 1101.111
g) 9.625 = 1001.1010
h) 14.75 = 1110.11
i) 15.375 = 1111.011
j) 5.0625 = 101.0001
k) 3.3125 = 11.0101
l) 8.1875 = 1000.0011
a) 1111.01 = 15.25
b) 1011.101 = 11.625
c) 1000.111 = 8.875
d) 1.1011 = 1.6875
e) 0.1111 = 0.9375
f) 1100.0001 = 12.0625
g) 100.0111 = 4.4375
h) 1001.001 = 9.125
i) 101.1101 = 5.8125
j) 10.1001 = 2.5625
k) 1101.011 = 13.375
l) 1010.1 = 10.5
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
250 Rozwiązania zadań
a) 01000000 = + 0.01171875
b) 10100101 = - 0.3125
c) 00010010 = + 0.033203125
d) 10101001 = - 5.0
e) 00000100 = + 0.125
f) 10100010 = - 0.0390625
g) 01111101 = + 120.0
h) 10001110 = - 128.0
i) 00101011 = + 20.0
j) 10011111 = - 288.0
k) 01010110 = + 3.25
l) 10000011 = - 0.0625
6. Tabelki ruchów.
a)
Stan Zawartość
taśmy
s b a b a t b a a b b .
s b b b a t b a a b b .
s b b a a t b a a b b .
s b b a b t b a a b b .
s b b a b a b a a b b .
s b b a a a b a a b b .
s b b a a b b a a b b .
s b b a a b a a a b b .
s b b a a b a b a b b .
s b b a a b a b b b b .
s b b a a b a b b a b .
s b b a a b a b b a a .
k b b a a b a b b a a .
b)
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
E.3 Rozwiązania do rozdziału 4 251
Stan Zawartość
taśmy
s b b a t a a b b t a .
s b b a t a a b b t a .
s b b a t a a b b t a .
1 b b a t a a b b t a .
1 b b a t a a b b t a .
1 b b a t a a b b t a .
1 b b a t a a a b t a .
1 b b a t a a a a t a .
s b b a t a a a a t a .
s b b a t a a a a t a .
k b b a t a a a a t a .
c)
Stan Zawartość
taśmy
s a a b t a b t b .
s a a b t a b t b .
s a a b t a b t b .
1 a a b a a b t b .
1 a a a a a b t b .
1 a a a a a b t b .
1 a a a a a b t b .
1 a a a a a a t b .
2 a a a a a a a b .
2 a a a a a b b b .
2 a a a a a b b b .
2 a a a a a b b b .
k a a a a a b b b .
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
252 Rozwiązania zadań
2. a) 0011
b) 1011
c) 0111
d) 1000
potega_i(x, y)
begin
w := 1;
while (y > 0)
begin
w := w * x;
y := y - 1;
end
potega_i := w;
end
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
E.4 Rozwiązania do rozdziału 5 253
potega_r(x, y)
begin
if (y=0)
w := 1;
else
w := x * potega_r(x, y-1);
potega_r := w;
end
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
254 Rozwiązania zadań
nwd(x, y)
begin
while (a != b)
begin
if (a > b) then
a := a - b
else
b := b - a
end
nwd := a
end
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
E.4 Rozwiązania do rozdziału 5 255
else
begin
polowa := (start + koniec) / 2
if (tablica[polowa] = co)
szukaj := polowa
else
if (tablica[polowa] < co)
szukaj := szukaj(co, start, polowa-1, tablica)
else
szukaj := szukaj(co, start+1, koniec, tablica)
end
end
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
256 Rozwiązania zadań
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Bibliografia
[B+ 99] M. Beck et al. Linux kernel jądro systemu. MIKOM, Warszawa,
1999.
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
258 BIBLIOGRAFIA
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
BIBLIOGRAFIA 259
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
Indeks
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
INDEKS 261
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
262 INDEKS
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
INDEKS 263
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
264 INDEKS
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
INDEKS 265
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
266 INDEKS
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
INDEKS 267
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
268 INDEKS
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004
INDEKS 269
wieloprogramowość, 196
wielozadaniowość, 196
bez wywłaszczania, 196
z wywłaszczaniem, 196
Windows 3.1, 205
Windows 3.11, 197
Windows 95, 205
Wirth, Niklaus, 162
wyrażenie, 166
WYSIWYG, 206
wyszukiwanie
binarne, 147
liniowe, 147
połówkowe, 147
wzmacniaki, 232
XML, 30
c
2001-2003 by P. Fulmański & Ś. Sobieski, Uniwersytet Łódzki. Wersja RC1 z dnia: 4 stycznia 2004