Wprowadzenie do inżynierii przetwarzania informacji

Transkrypt

Wprowadzenie do inżynierii przetwarzania informacji
Dr inż. Robert Wójcik
Wprowadzenie do inżynierii przetwarzania informacji
1. Maszyny i systemy cyfrowe
1.1. Historia komputerów i główne kierunki ich rozwoju
1.2. Reprezentacja informacji w elektronicznych maszynach
cyfrowych
1.3. Budowa i zasada działania komputerów
1.4. Metodologia przetwarzania informacji
Literatura
[1] Skorupski A., Podstawy techniki cyfrowej, WKŁ, Warszawa, 2001.
[2] Kaliś A., Podstawy teorii układów logicznych, Wydawnictwo Politechniki
Wrocławskiej, Wrocław, 1989.
[3] Pieńkos J., Turczyński J., Układy scalone TTL w systemach cyfrowych,
WKŁ, Warszawa, 1986.
[4] Kącki E., Elektroniczna technika obliczeniowa, PWN, Warszawa, 1986.
1. Maszyny i systemy cyfrowe
Współcześnie przetwarzanie informacji jest realizowane w oparciu o
elektroniczne maszyny cyfrowe – komputery. W systemach cyfrowych
informacja jest przechowywana w postaci dwuwartościowych sygnałów
dyskretnych, nazywanych sygnałami zerojedynkowymi lub binarnymi.
Sekwencje wartości binarnych umożliwiają kodowanie liczb w układzie
dwójkowym. Przetwarzanie danych na poziomie układów cyfrowych
komputera sprowadza się więc do wykonywania operacji na liczbach
binarnych. Najmniejszą jednostką informacji w elektronicznych układach
cyfrowych jest bit. Za pomocą pojedynczego bitu można zakodować jeden z
dwóch alternatywnych stanów „prawdę” lub „fałsz”, 1 albo 0.
1.1. Historia komputerów i główne kierunki ich rozwoju
Zdalne przekazywanie dwuwartościowych wiadomości było znane od
dawna, np. jako zakrywanie i odkrywanie ogniska lub przesyłanie błysków
światła.
Za jedną z pierwszych form maszyn liczących można uważać liczydła
(np. abakus – deska pokryta piaskiem z wyznaczonymi liniami, na których
znajdowały się kamienie służące do liczenia).
Pierwsze mechaniczne urządzenia do liczenia pojawiły się w XVII
wieku. Od tej pory, aż do dzisiaj, wraz z rozwojem nowych technologii
następuje ciągły rozwój maszyn liczących.
• W roku 1623 Wilhelm Schickald skonstruował maszynę umożliwiającą
sumowanie liczb kilkucyfrowych; wszystkie mechanizmy urządzenia były
zrobione z drewna.
• W roku 1642 Blaise Pascal zbudował maszynę realizującą operacje
dodawania i odejmowania liczb.
• W roku 1694 G. W. Leibniz opracował maszynę liczącą, która wykonywała
cztery działania arytmetyczne; od tej pory datuje się powstanie pierwszego
arytmometru; maszyny tego typu były pierwszymi maszynami cyfrowymi
produkowanymi seryjnie; w latach 1821-1878 wyprodukowano ich ponad
tysiąc.
• W kolejnych latach wprowadzono szereg ulepszeń arytmometrów. Około
roku 1920 wyeliminowano ręczny napęd arytmometru przez zastosowanie
silników elektrycznych.
Znaczny rozwój zastosowań cyfrowych maszyn liczących datuje się od 1889
roku, kiedy to H. Hollerith zbudował pierwsze maszyny analityczne,
pozwalające na mechanizację prac statystycznych i obrachunkowych.
Maszyny te pracowały na zasadzie wykorzystania kart dziurkowanych jako
nośników informacji. Wynalazek ten umożliwił zmechanizowanie odczytywania informacji, wykonywania obliczeń w formie wielokrotnych działań i
wyprowadzania wyników.
Dalszy rozwój maszyn cyfrowych można sklasyfikować z punktu
widzenia rozwoju ich konstrukcji. Były to maszyny programowalne w
specjalnych językach.
Generacje maszyn cyfrowych
Generacja zerowa: maszyny cyfrowe zbudowane na przekaźnikach
(połączenie szeregowe – AND; połączenie równoległe – OR); lata 1937-1944
pod kierunkiem H. Aikena powstała pierwsza maszyna cyfrowa, w pełni
zautomatyzowana, o nazwie Mark I.
Generacja pierwsza: maszyny zbudowane na lampach elektronicznych; w
1942 roku powstała pierwsza na świecie maszyna cyfrowa oparta na
technice elektronicznej; maszyna o nazwie ENIAC była wyposażona w 18000
lamp elektronowych; została zaprojektowana przez J.W. Mauchly’ego i J. P.
Eckerta.
Generacja druga: maszyny zbudowane na tranzystorach; pojawienie się
pierwszych maszyn tego typu w 1958 roku zapoczątkowało dynamiczny
rozwój elektronicznych maszyn cyfrowych, urządzeń peryferyjnych
ułatwiających komunikację użytkownika z maszyną oraz algorytmicznych
języków programowania.
Generacja trzecia: maszyny cyfrowe zbudowane na układach scalonych
średniej skali integracji – układy MSI (ang. Medium Scale Integration) oraz
wielkiej skali integracji – układy LSI (ang. Large Scale Integration), będących
elementami mikroelektronicznymi; pierwsze maszyny tego typu powstały w
1964 roku.
Generacja czwarta: maszyny cyfrowe budowane w oparciu o układy bardzo
wysokiej skali integracji VLSI (ang. Very Large Scale Integration); pierwsze
maszyny tego typu zaczęły powstawać pod koniec lat 80-tych; współczesne
komputery PC są budowane w tej technologii.
Obecnie trwają przygotowania do budowy maszyn piątej generacji, których
działanie ma być oparte na zjawiskach elektroniki molekularnej i efektach
kwantowo-mechanicznych oraz budowy maszyn biologicznych, wykorzystujących cząsteczki kodu DNA do wykonywania obliczeń. Technologie te
umożliwiają w naturalny sposób wprowadzenie obliczeń równoległych oraz
zwiększenie pojemności pamięci operacyjnej komputerów. Wpłynie to na
zwiększenie efektywności obliczeń.
1.2. Reprezentacja informacji w elektronicznych maszynach
cyfrowych
W elektronicznych maszynach cyfrowych informacje są przekazywane
za pomocą dwóch stanów elektrycznych: „brak napięcia” (stan niski) i „jest
napięcie” (stan wysoki). Taki dwuwartościowy sposób przedstawiania
informacji znany jest jako logika binarna. W praktyce stan niski i stan wysoki
są reprezentowane przez pewne zakresy napięć różniące się poziomami (np.
w układach TTL stan niski reprezentują wartości napięcia z zakresu 0..0.7 V,
natomiast stan wysoki napięcia z zakresu 2.4..5 V).
W konwencji logiki dodatniej stanowi wysokiemu odpowiada logiczna
jedynka a stanowi niskiemu logiczne 0. Pojedyncza linia przesyłania danych
reprezentuje 1 bit informacji, który pozwala zakodować tylko dwa alternatywne stany: stan logiczny „0” i stan logiczny „1”. Za pomocą odpowiedniej
liczby bitów można zakodować w dwójkowym układzie pozycyjnym dowolną
liczbę rzeczywistą. Na przykład liczba rzeczywista R może być zapisana w
postaci:
R = ±an-1an-2... a1a0. a-1a-2a-3...,
gdzie ak ∈ {0,1} są cyframi w układzie binarnym,
n – numer pozycji o największej wadze.
Wartość R jest obliczana ze wzoru:
R = ± (an-12n-1+ an-22n-2+ ... + a121+ a020+ a-12-1+ a-22-2+ a-32-3+ ...).
Na przykład liczba 10.5 w układzie dziesiętnym jest reprezentowana w
układzie binarnym w postaci:
10.5(10)= 1∗23+ 0∗22+ 1∗21+ 0∗20+ 1∗2-1 = 8 + 2 + 0.5 = 1010.1(2).
W praktyce wszelkie informacje są przedstawiane w maszynach
cyfrowych jako ciągi zer i jedynek. Ciąg taki można traktować jako liczbę
zapisaną w pozycyjnym systemie dwójkowym. Naturalne jest więc,
wykorzystywanie w komputerach reguł arytmetyki binarnej. Również stan
dyskretnego systemu sterowania w maszynie cyfrowej daje się w każdej
chwili opisać za pomocą skończonych ciągów zer i jedynek. Fakt ten pozwolił
konstruktorom na wykorzystanie teorii funkcji boolowskich do opisu systemu
sterowania i każdej operacji przetwarzania informacji, zarówno logicznych,
jak i arytmetycznych.
Realizacja pozycyjnego systemu dwójkowego do przedstawiania liczb
oraz dowolnej informacji w maszynie cyfrowej, zapewnia z technicznego
punktu widzenia:
• dużą niezawodność,
• możliwość przetwarzania danych w układach prostej konstrukcji przy
małym prawdopodobieństwie występowania błędów;
• możliwość miniaturyzacji maszyn cyfrowych dzięki zastosowaniu układów
cyfrowych bardzo wysokiej skali integracji VLSI.
1.3. Budowa i zasada działania komputerów
Z punktu widzenia organizacji pracy każda uniwersalna elektroniczna
maszyna cyfrowa może być rozpatrywana jako urządzenie (system komputerowy) składające się z następujących zasadniczych elementów:
•
•
•
•
•
jednostki arytmetyczno-logicznej ALU (arytmometr);
pamięci operacyjnej wewnętrznej (RAM);
pamięci zewnętrznej (np. dyskowej, taśmowej);
urządzenia sterującego (US) i pamięci stałej (ROM);
układów wejścia / wyjścia.
US
Pamięć zewnętrzna
ALU
Pamięć operacyjna (RAM)
ROM
Wejście
Wyjście
Przetwarzanie informacji przez maszynę cyfrową sprowadza się do
wykonywania podstawowych działań arytmetycznych oraz logicznych na
wyrażeniach reprezentujących informację zakodowaną w postaci binarnej.
Kolejność wykonywania tych prostych działań jest narzucona maszynie przez
tzw. program, który stanowi odpowiednio zakodowany algorytm przetwarzania informacji.
Zasada działania systemu komputerowego
• Program przetwarzania informacji zostaje wprowadzony do pamięci
operacyjnej komputera za pomocą odpowiedniego urządzenia wejścia,
np. klawiatury lub wprowadzony do pamięci operacyjnej bezpośrednio z
pamięci zewnętrznej (dyskowej), w której wcześniej został zapisany.
• Program zawarty w pamięci operacyjnej ma zasadniczy wpływ na układ
sterowania, który musi tak sterować działaniem maszyny cyfrowej, by
zadany algorytm przetwarzania informacji został prawidłowo zrealizowany.
Do podejmowania decyzji sterujących są wykorzystywane dane zawarte w
pamięci stałej komputera.
• Jednostka arytmetyczno-logiczna jest urządzeniem wykonującym cztery
podstawowe działania arytmetyczne (+,-,*,/) oraz elementarne działania
logiczne (suma i iloczyn). Wyniki operacji, realizowanych przez arytmometr zgodnie z programem zapisanym w pamięci operacyjnej, są
ponownie zapisywane w pamięci operacyjnej.
• Wyniki końcowe przetwarzania są wyprowadzane na urządzenie wyjścia w
postaci monitora ekranowego lub zapisywane w pamięci dyskowej.
1.4. Metodologia przetwarzania informacji
Problem – zadanie do rozwiązania.
Specyfikacja zadania – określenie danych wejściowych oraz wyników, które
powinny być uzyskane, a także warunków jakie
powinny one spełniać; może zawierać również
związki pomiędzy danymi a wynikami; definiuje
abstrakcyjny model rzeczywistego problemu.
Algorytm
jest skończonym ciągiem czynności, które prowadzą
rozwiązania zadania lub osiągnięcia określonego celu.
do
Komputer – urządzenie elektroniczne służące do automatycznego
przetwarzania danych według zadanego algorytmu.
Algorytm – sposób przetwarzania danych wejściowych na dane wyjściowe
(wyniki) w skończonej liczbie kroków.
Algorytm definiuje:
• abstrakcyjne obiekty, na których wykonywane są działania,
reprezentowane przez odpowiednie struktury danych;
• operacje realizujące cel algorytmu;
• kolejność wykonywania działań.
Program komputerowy – algorytm zapisany w odpowiednim języku
programowania zrozumiałym przez komputer (np. w języku
maszynowym procesora – ciąg liczb stanowiących rozkazy
i dane dla procesora).
Język maszynowy jest trudno przyswajalny przez człowieka, gdyż składa się
z liczb reprezentujących instrukcje procesora (programy maszynowe są
przechowywane w pamięci komputera w kodzie binarnym). W praktyce
algorytmy są zapisywane za pomocą instrukcji języków programowania
wyższego poziomu, które udostępniają podstawowe elementy programowania strukturalnego (np. Pascal, C, Java, Fortran, Cobol, Modula).
Kod źródłowy – kod programu zapisany w języku algorytmicznym, który jest
czytelny dla programisty (np. Pascal, C).
Przed wykonaniem program źródłowy należy przetłumaczyć na postać
zrozumiałą dla komputera czyli na kod wynikowy.
Kod wynikowy - kod pośredni w języku maszynowym, który jest zrozumiały
dla komputera; ciąg rozkazów i danych procesora,
zapisanych w pamięci komputera w kodzie binarnym.
Kod wynikowy jest przekształcany przez program linkera do postaci
wykonywalnej.
Linker – program łączący kody wynikowe odpowiednich modułów programu
w kod wykonywalny, który może być wielokrotnie uruchamiany
w komputerze.
W praktyce linker łączy w jeden plik wykonywalny następujące elementy:
• pliki wynikowe (obiektowe), otrzymane w wyniku kompilacji modułów
programu;
• standardowy kod startowy programu dla danego systemu operacyjnego;
• kody wynikowe funkcji, wykorzystywanych w programie, zapisane
w odpowiednich bibliotekach.
Kod wykonywalny - zawiera liczby, które są pobierane z pamięci komputera
przez procesor i interpretowane jako rozkazy
podlegające wykonaniu lub jako dane stanowiące
argumenty rozkazów.
Translator – realizuje przekształcenie programu z postaci źródłowej
na postać wynikową.
Rodzaje translatorów:
• kompilatory,
• interpretatory.
Kompilator – program przetwarzający kod źródłowy na kod wynikowy
(kod pośredni w języku maszynowym, który jest zrozumiały
dla komputera).
Interpretator – realizuje translację instrukcji naprzemiennie z ich
wykonywaniem; przy zastosowaniu interpretatora każde
wykonanie programu jest związane z jego ponowną
translacją (np. Basic, SQL).
Plik – wydzielony fragment pamięci (najczęściej dyskowej)
posiadający nazwę.
Z punktu widzenia języków programowania plik jest ciągiem danych
o odpowiedniej strukturze (w najprostszym przypadku ciągiem bajtów).
Każdy plik posiada rozmiar określony w bajtach.
1 Bajt [B] = 1 znak, 1 KB = 1024 B,
1MB = 1024 KB,
1 GB = 1024 MB.
Etapy rozwiązywania problemów z wykorzystaniem komputera
Rozwiązywanie problemów z wykorzystaniem komputerów składa się z
następujących etapów:
• specyfikacja problemu,
• określenie danych wejściowych,
• określenie celu (wyniku końcowego),
• analiza problemu i wybór modelu,
• synteza algorytmu prowadzącego do rozwiązania,
• przedstawienie algorytmu:
- w postaci opisu słownego,
- w postaci listy kroków,
- w postaci schematu blokowego (postać graficzna algorytmu),
- za pomocą jednego z języków formalnych (np. UML).
• analiza poprawności rozwiązania,
• ocena efektywności algorytmu (złożoności obliczeniowej),
• kodowanie algorytmu w postaci instrukcji języka programowania
(projekt programu komputerowego),
• zapis programu do pliku,
• kompilacja i usuwanie usterek,
• utworzenie wersji wykonywalnej,
• automatyczne wykonanie programu w komputerze,
• analiza wyników.
Algorytm
Problem
Model
Kodowanie
Program
Komputer
Plik
Etapy programowania
1. Utworzenie za pomocą edytora tekstu pliku źródłowego zawierającego
algorytm zapisany w wybranym języku programowania, np. program.pas
(program w języku Pascal), program.cpp (program w języku C++).
2. Kompilacja programu za pomocą kompilatora i utworzenie pliku
wynikowego (obiektowego), np. program.obj.
3. Połączenie za pomocą linkera kodu wynikowego programu, kodów
wynikowych funkcji bibliotecznych oraz kodu startowego w jeden plik
wykonywalny, np. program.exe.
DANE
Programy (algorytmy)
Kompilacja
Kod
źródłowy
programu
WYNIKI
Łączenie
Kod
wynikowy
programu
Kod
wykonywalny
programu
Kod
startowy
Kod
wynikowy
z bibliotek
System operacyjny komputera – zbiór programów sterujących pracą
urządzeń wchodzących w skład systemu
komputerowego i nadzorujących
wykonywanie programów użytkowników.
Oprogramowanie użytkowe – programy uruchamiane pod kontrolą systemu
operacyjnego.
Podczas projektowania algorytmów należy pamiętać, aby opracowywane
algorytmy posiadały niską złożoność obliczeniową.
Czasowa złożoność obliczeniowa – określa liczbę elementarnych kroków
obliczeniowych (tzw. operacji elementarnych, np. porównań, sumowań, itp.).
Pamięciowa złożoność obliczeniowa – określa rozmiar pamięci niezbędnej
do wykonania programu.
W praktyce złożoność obliczeniową określa się za pomocą funkcji
ograniczających z góry ponoszony nakład obliczeniowy, np. O(n), O(nlogn).
Algorytmy efektywne –
złożoność obliczeniową.
posiadają
wielomianową
lub
logarytmiczną
Przetwarzanie sekwencyjne – wykonywanie instrukcji programów kolejno
jedna za drugą.
Przetwarzanie współbieżne – wykonywanie instrukcji programów
równocześnie na tym samym procesorze (z podziałem czasu procesora).
Przetwarzanie równoległe – wykonywanie instrukcji programów
równocześnie na różnych procesorach.

Podobne dokumenty