background image

 

1. 

Wymień cechy algorytmu i sposoby jego reprezentacji.  

 
Cechy algorytmu: 

•  poprawność (algorytm daje dobre wyniki, odzwierciedlające rzeczywistość) 
•  jednoznaczność (brak rozbieżności wyników przy takich samych danych, 

jednoznaczne opisanie każdego kroku) 

•  skończoność (wykonuje się w skończonej ilości kroków) 
•  sprawność (czasowa - szybkość działania i pamięciowa - "zasobożerność") 
•  prostota wykonania(operacje powinny być jak najprostsze) 

 
Sposoby reprezentacji algorytmu: 

•  w postaci słownej 
•  pseudokodu 
•  schematu blokowego 
•  języka programowania 

 

2. 

Omówić zagadnienie asymptotycznej złożoności obliczeniowej algorytmów. Podać 

standardowe notacje rzędu złożoności. 
 
Złożoność asymptotyczna mówi o tym, jak złożoność kształtuje się dla bardzo dużych, 
granicznych rozmiarów danych wejściowych. Są trzy rodzaje złożoności asymptotycznej: 
 

•  notacja O (omikron) – ma największe znaczenie w teorii złożoności obliczeniowej. 

Zapis f(n) = O(g(n)) czytamy: funkcja f jest co najwyżej rzędu g, jeśli istnieje taka 
stała rzeczywista c i liczba naturalna n0, iż dla każdego n większego lub równego 
n0 funkcja f(n) jest niewiększa od iloczynu cxg(n) 
 

•  notacja W (omega) – gdy funkcja g(n) ogranicza funkcję f(n) od dołu 

 

•  notacja Q (theta) – gdy funkcja g(n) ogranicza funkcje f(n) od góry i od dołu 

 

3. 

Algorytmy sortowania oraz charakterystyka ich złożoności obliczeniowej.  

 

•  Sortowanie bąbelkowe – złożoność O(n2) – porównywanie kolejnych par 

elementów, za każdym razem jedną parę mniej 
 

•  Sortowanie przez wstawianie - złożoność O(n2) – każdy od drugiego sprawdzany 

gdzie pasuje na liście 

 

•  Sortowanie przez scalanie – złożoność  O(nlogn), wymaga O(n) dodatkowej 

pamięci, podział listy na podlisty, sortowanie podlist, łączenie posortowanych 
podlist 

 

 

•  Sortowanie szybkie – złożoność optymistyczna O(nlogn), pesymistyczna O(n2), 

wyszukanie elementu średniego, mniejsze na lewo większe na prawo itd. Aż do 
pojedynczych elementów (rekurencja) 

background image

 

4. 

Przedstawić iteracyjne oraz rekurencyjne struktury algorytmiczne. Dokonać 

porównania. 
 

Rekurencja – technika pozwalająca opisać problem za pomocą jego składowych. 

W algorytmie rekurencyjnym mamy przypadek bazowy (obiekty podstawowe) i ogólny 
(obiekty zbudowane z podstawowych). Podstawowymi elementami przy układaniu 
algorytmów rekurencyjnych są: warunek stopu i dekompozycja problemu. Rekurencja 
pozwalana na przejrzysty i zwarty opis algorytmu, kosztem złożoności wykonania. 

Implementacja rekurencyjnej definicji funkcji wymaga tłumaczenia na język programowania 
– rekord aktywacji (w stosie programu; parametry wywołania, wartość zwracana, zmienne 
lokalne, dynamiczne dowiązanie do rekordu wywołania procesu wywołującego, adres 
powrotu do procesu wywołania) 

Algorytm iteracyjny - algorytm, który uzyskuje wynik przez powtarzanie danej operacji początkowo 
określoną liczbę razy lub aż do spełnienia określonego warunku.

 

 
 
 

5. 

Struktury drzewiaste, charakterystyka podstawowych typów drzew oraz przykłady 

ich zastosowań. 
 
Drzewa- kolekcja węzłów, z których 1 wyróżniany jest jako korzeń. 
 

background image

 

Podstawowe pojęcia: 
- węzły powiązane są ze sobą relacją rodzicielstwa 
- węzły mające tego samego rodzica nazywamy węzłami 
siostrzanymi 
- wysokość węzła- liczba krawędzi na najdłuższej, prostej ścieżce 
prowadzącej od tego węzła do liścia 
- wysokość drzewa= wysokość korzenia 
- głębokość (poziom) drzewa- długość ścieżki łączącej węzeł z korzeniem 
 
Zastosowanie drzew, których węzły mogą mieć więcej niż 2 potomków: 
- Drzewo genealogiczne 
 
Drzewo binarne- drzewo w którym każdy z węzłów: 
- posiada lewe i prawe poddrzewo 
- posiada jedno z nich 
- nie posiada poddrzew 
 
Zastosowanie drzew binarnych: 
- Zapis historii turnieju tenisowego (nie tylko), gdzie każdej grze 
przypisuje się zwycięzcę a dwie poprzednie gry zawodników oznaczają 
jej potomków. 
- Wyrażenie arytmetyczne z dwuargumentowymi operatorami, gdzie 
każdy operator jest węzłem, a jego argumenty poddrzewami 
 
Drzewo BST (Binary Search Tree)- dowolne drzewo binarne, którego wierzchołki są ułożone 
zgodnie z porządkiem symetrycznym. Elementy z kluczami większymi są zawsze na prawo, a 
elementy z kluczami mniejszymi na prawo od węzła. 
Podstawowe operacje na drzewach BST: 
- wyszukiwanie 
- wstawianie 
- usuwanie 
- wyszukiwanie min 
- wyszukiwanie max 
- predecessor, successor 
 
Binarne drzewa wyszukiwań często stosuje się w zadaniach, w których wymagane jest 
względnie szybkie sortowanie lub wyszukiwanie elementów, na przykład różnego rodzaju 
słowniki, kolejki priorytetowe 
 
Zrównoważone drzewa BST: 
- złożoność obliczeniowa na drzewach BST jest 
proporcjonalna do wysokości drzewa 
- zrównoważone drzewa binarne- różnica wysokości obu 
podddrzew każdego węzła wynosi 0 lub 1 
- drzewo w pełni zrównoważone- jeśli jest zrównoważone a wszystkie liście znajdują się na 1 
lub 2 poziomach 
- drzewa w pełni zrównoważone są drzewami BST gwarantującymi wysokość O(logn) 

background image

 

Drzewa zrównoważone AVL: 
- drzewa zrównoważone lokalnie 
- dla każdego węzła różnica poziomów różni się nie więcej niż o 1 poziom 
- współczynnik zrównoważenia (różnica wysokości lewego i prawego poddrzewa) -1, 0, 1 
 
Własności: 
- dla każdego wierzchołka wysokość 2 jego poddrzew różni się co najwyżej o 1 poziom 
- search, min, max, successor, predecessor- nie zmieniają drzewa 
- insert, delete- zmieniają drzewo 
 
Drzewa Czerwono-Czarne (RB) 
Własności: 
- każdy węzeł jest czerwony lub czarny 
- każdy liść jest czarny 
- jeśli węzeł jest czerwony to obaj jego synowie 
są czarni 
- każda ścieżka z ustalonego węzła do liścia ma 
tyle samo czarnych węzłów 
- każdy węzeł drzewa zawiera pola: color, key, 
left, right, parent 
- search, min, max, successor, predecessor- nie zmieniają drzewa 
- insert, delete- zmieniają drzewo 
- pesymistyczna złożoność operacji O(logn)  
 

6. 

Omówić sposoby implementacji list jednokierunkowej oraz dwukierunkowej. Podać 

zestaw operacji wchodzących w skład interfejsu listy. 

Lista - struktura danych służąca do reprezentacji zbiorów dynamicznych, w której elementy 
ułożone są w liniowym porządku. Rozróżniane są dwa podstawowe rodzaje list: lista 
jednokierunkowa w której z każdego elementu możliwe jest przejście do jego następnika 
oraz lista dwukierunkowa w której z każdego elementu możliwe jest przejście do jego 
poprzednika i następnika. Istnieją dwie popularne implementacje struktury listy: tablicowa i 
wskaźnikowa.  
 
Wskaźnikowa  
W przypadku tej implementacji każdy element listy składa się z co najmniej dwóch pól: 
klucza oraz pola wskazującego na następny element listy. W przypadku list 
dwukierunkowych każdy element listy zawiera także pole wskazujące na poprzedni element 
listy. Pole wskazujące poprzedni i następny element listy są najczęściej wskaźnikami.  
 
Dopisanie elementu (dla prostej listy jednostronnej):  
- jeśli ma ono nastąpić na końcu listy, to wskaźnik wiążący w obiekcie ostatnim ustawia się na 
nowy obiekt danego typu;  
- jeśli ma ono nastąpić wewnątrz listy, to najpierw tworzy się nowy obiekt danego typu i jego 
wskaźnik wiążący ustawia się na następnik elementu, za którym ma być wstawiany. Później 
wskaźnik poprzednika przestawia się na ten nowy obiekt. W tym przypadku bardzo ważna 
jest kolejność, której zachwianie jest częstą przyczyną błędów. Np. można najpierw 
przestawić wskaźnik poprzednika na nowy obiekt, co spowoduje bezpowrotną utratę 

background image

 

dostępu do dalszych elementów listy, na które już nie będzie pokazywał żaden wskaźnik. 
Ustawienie wskaźnika nowego elementu na następnik nie będzie możliwe, bo nie będzie 
znany jego adres.  
 
Usunięcie elementu jest odwrotne do wstawiania: w pewnym miejscu zapisuje się wskaźnik 
do usuwanego elementu (aby nie "zgubić" jego adresu), następnie wskaźnik wiążący 
poprzednika przestawia się na następnik. Dopiero w tym momencie zwalnia się pamięć po 
obiekcie usuwanym (do tego potrzebny jest ten wskaźnik tymczasowy). Zalety i wady tej 
implementacji są komplementarne w stosunku do implementacji tablicowej.  
 
 
Tablicowa  
Jak wskazuje nazwa, lista zaimplementowana w ten sposób opiera się na tablicy obiektów 
(lub rekordów) danego typu. 
 
 Dopisanie elementu do listy to wstawienie elementu do tablicy:  
- jeśli ma ono nastąpić na końcu listy, będzie to kolejny element w tablicy;  
- jeśli nowy element ma znaleźć się między innymi elementami, należy przesunąć o jedno 
pole w prawo wszystkie elementy o indeksie wyższym niż pole, na które będzie wstawiany 
obiekt; następnie w powstałą lukę wpisuje się nowy element.  
 
Usunięcie elementu znajdującego się pod danym indeksem tablicy to przesunięcie o jedno 
pole w lewo wszystkich elementów o indeksie wyższym. Zalety tej implementacji: prosta 
nawigacja wewnątrz listy, korzystanie z gotowej struktury tablicy, szybki dostęp do elementu 
o konkretnym numerze, większa odporność na błędy. Wady: niska elastyczność, szczególnie 
dotycząca rozmiaru tablicy, liniowa złożoność operacji wstawiania i usuwania. 
Implementację tablicową stosuje się tam, gdzie elastyczność nie odgrywa istotnej roli, a 
wymagana jest szybka i prosta nawigacja. 
 

7. 

Omówić algorytmy efektywnego poszukiwania najkrótszej ścieżki w grafie. 

 

Problem najkrótszej ścieżki jest zagadnieniem szczególnie istotnym w informatyce. Polega on 
na znalezieniu w grafie ważonym najkrótszego połączenia pomiędzy danymi wierzchołkami. 
Szczególnymi przypadkami tego problemu są problem najkrótszej ścieżki od jednego 
wierzchołka do wszystkich innych oraz problem najkrótszej ścieżki pomiędzy wszystkimi 
parami wierzchołków.  
 
Algorytm Dijkstry  
Algorytm Dijkstry działa zarówno dla grafów skierowanych jak i nieskierowanych. Znajduje 
najkrótszą drogę z wierzchołka p (zwanego źródłem lub początkiem) do wszystkich 
pozostałych wierzchołków grafu lub do wybranego wierzchołka k (zwanego ujściem lub 
końcem) w grafie, w którym wszystkim krawędziom nadano nieujemne wagi. Polega na 
przypisaniu wierzchołkom pewnych wartości liczbowych. Taką liczbę nazwijmy cechą 
wierzchołka. Cechę wierzchołka v nazwiemy stałą (gdy jest równa długości najkrótszej drogi z 
p do v) albo, w przeciwnym przypadku, tymczasową. Na początku wszystkie wierzchołki, 
oprócz p, otrzymują tymczasowe cechy ∞. źródło p otrzymuje cechę stałą równą 0. 
Następnie wszystkie wierzchołki połączone krawędzią z wierzchołkiem p otrzymują cechy 

background image

 

tymczasowe równe odległości od p. Potem wybierany jest spośród nich wierzchołek o 
najmniejszej cesze tymczasowej. Oznaczmy go v. Cechę tego wierzchołka zamieniamy na 
stałą oraz przeglądamy wszystkie wierzchołki połączone z v. Jeśli droga z p do któregoś z 
nich, przechodząca przez v ma mniejszą długość od tymczasowej cechy tego wierzchołka, to 
zmniejszamy tą cechę. Ponownie znajdujemy wierzchołek o najmniejszej cesze tymczasowej i 
zamieniamy cechę tego wierzchołka na stałą. Kontynuujemy to postępowanie aż do 
momentu zamiany cechy wierzchołka k na stałą (czyli obliczenia długości najkrótszej drogi z p 
do k). Bardzo ważnym założeniem w algorytmie Dijkstry są nieujemne wagi krawędzi. Jeśli 
krawędzie mogą przyjmować wagi ujemne, to NIE WOLNO stosować algorytmu Dijkstry. W 
tym wypadku używa się wolniejszego, lecz bardziej ogólnego algorytmu Bellmana-Forda. Jeśli 
graf nie jest ważony (wszystkie wagi mają wielkość 1), zamiast algorytmu Dijkstry wystarczy 
algorytm przeszukiwania grafu wszerz. Algorytm Dijkstry jest przykładem algorytmu 
zachłannego.  
 
Algorytm zachłanny  
Algorytm zachłanny (greedy algorithm) to taki algorytm, który w celu wyznaczenia 
rozwiązania w każdym kroku dokonuje najlepiej rokującego w danym momencie wyboru 
rozwiązania częściowego, tzw. zachłannego. Innymi słowy mówiąc algorytm zachłanny nie 
patrzy czy w kolejnych krokach jest sens wykonywać dane działanie, dokonuje lokalnie 
optymalną decyzję, dokonuje on wyboru wydającego się w danej chwili najlepszym, 
kontynuując rozwiązanie podproblemu wynikającego z podjętej decyzji.  
 
Złożoność  
Złożoność obliczeniowa algorytmu Dijkstry zależy od liczby V wierzchołków i E krawędzi 
grafu. O rzędzie złożoności decyduje implementacja kolejki priorytetowej:  
- wykorzystując “naiwną” implementację poprzez zwykłą tablicę, otrzymujemy algorytm o 
złożoności O(V^2)  
- w implementacji kolejki poprzez kopiec, złożoność wynosi O(ElogV)  
- po zastąpieniu zwykłego kopca kopcem Fibonacciego, złożoność zmniejsza się do O(E + 
VlogV)  
 
Algorytm Bellmana-Forda  
Algorytm ten służy do wyznaczania najmniejszej odległości od ustalonego wierzchołka s do 
wszystkich pozostałych w skierowanym grafie bez cykli o ujemnej długości. Warunek 
nieujemności cyklu jest spowodowany faktem, że w grafie o ujemnych cyklach najmniejsza 
odległość między niektórymi wierzchołkami jest nieokreślona, ponieważ zależy od liczby 
przejść w cyklu.  
Niech ustalonym wierzchołkiem źródłowym będzie wierzchołek 1. Przed d(i, j) oznaczamy 
koszt krawędzi (i, j), jeśli krawędź taka nie istnieje to przyjmujemy, że jej koszt jest 
nieskończony. Wówczas można przyjąć, że minimalny koszt dojścia D(j) od wierzchołka 1 do 
wierzchołka j jest równy d(1, j).  
Niech v będzie dowolnym wierzchołkiem grafu różnym od wierzchołka źródłowego 1. Jeśli 
istnieje krawędź (1, v), to koszt dojścia do wierzchołka v równy D(v) posiada już przypisaną 
wartość d(1, v), która wcale nie musi być najmniejszym kosztem dojścia, ale jest określona, 
tzn. różna od nieskończoności.  
Stawiamy pytanie, czy do wierzchołka v można dojść ścieżką długości 2, przechodzącą przez 
pewnien inny wierzchołek u, czyli ścieżką postaci 1-i-v. Możemy to sprawdzić pisząc pętlę, 

background image

 

która oszacuje koszty wszystkich możliwych ścieżek długości 2 postaci 1-i-v, pamiętając o 
tym, że nawet jeśli nie istnieją krawędzie (1, i) lub (i, v) to niczemu to nie przeszkadza - koszt 
takiej ścieżki będzie równy nieskończoności:  
 
For i:=1 To n Do If D(i)+d[i, v] Po wykonaniu takiej pętli koszt dojścia do wierzchołka v, czyli 
D(v), będzie równy albo kosztowi krawędzi d[1, v], albo kosztowi pewnej znalezionej ścieżki 
długości 2 o mniejszym koszcie. Można zatem powiedzieć, że wyznaczony został najmniejszy 
możliwy koszt dojścia do wierzchołka v po ścieżce o maksymalnej długości 2. Nie musi to być 
ścieżka najtańsza, ale na pewno jest najtańszą ścieżką z wszystkich ścieżek o długości nie 
większej niż 2.  
Algorytm Bellmana-Forda wyznacza minimalne koszty dojścia do wszystkich wierzchołków po 
ścieżkach o maksymalnej długości 2, co uzyskamy dopisując jedną pętlę For: Dla wszystkich 
węzłów j od 2 do n: znajdź najtańszą ścieżkę długości 2 prowadzącą do wierzchołka j For j:=2 
To n Do For i:=2 To n Do If D(i)+d[i, j]  
Pozostaje teraz postawić pytanie co wykonałby taki kod: For j:=2 To n Do For i:=2 To n Do If 
D(i)+d[i, j] For j:=2 To n Do For i:=2 To n Do If D(i)+d[i, j]  
Pierwsze dwie pętle wyznaczą minimalne koszty dojścia do wierzchołków po ścieżkach o 
maksymalnej długości 2. Jeśli graf zawiera ścieżkę 1-u-v-z to podczas wykonywania drugich 
pętli For dla j=z i i=v będą określone wartości D(v) oraz d[v, z], a tym samym znalezione 
zostanie mniejsze oszacowanie kosztu dojścia do wierzchołka z. Powtórne wykonanie 
wyznaczy minimalne koszty dojścia do wszystkich wierzchołków po ścieżkach o maksymalnej 
długości 3.  
Ponieważ każda prosta ścieżka w grafie ma długość co najwyżej n-1 powtarzając obie pętle n-
1 razy znajdziemy minimalne koszty dojścia do wszystkich wierzchołków grafu.  
For k:=1 To n-1 Do For j:=2 To n Do For i:=2 To n Do If D(i)+d[i, j]  
Ciężko jest go krótko opisać, dokładniejszy przystępny opis tutaj.  
 
Złożoność  
Złożoność obliczeniowa Przy reprezentacji grafu za pomocą macierzy sąsiedztwa całość 
algorytmu tworzą trzy pętle For, co daje złożoność rzędu O(n^3). Jeśli graf zapamiętamy za 
pomocą listy krawędzi, to dwie pętle For przebiegające po wszystkich wierzchołkach zastąpić 
można jedną przebiegająca po wszystkich krawędziach. Złożoność obliczeniowa będzie 
wówczas rzędu O(V*E).  
 
Algorytm Floyda-Warshalla  
Algorytm Floyda-Warshalla służy do znajdowania najkrótszych ścieżek pomiędzy wszystkimi 
parami wierzchołków w grafie ważonym. Algorytm Floyda-Warshalla korzysta z tego, że jeśli 
najkrótsza ścieżka pomiędzy wierzchołkami v1 i v2 prowadzi przez wierzchołek u, to jest ona 
połączeniem najkrótszych ścieżek pomiędzy wierzchołkami v1 i u oraz u i v2. Na początku 
działania algorytmu inicjowana jest tablica długości najkrótszych ścieżek, tak że dla każdej 
pary wierzchołków (v1,v2) ich odległość wynosi:  
- d[v1, v2] = 0 gdy v1 = v2  
- d[v1, v2] = w(v1, v2) gdy (v1, v2) należy do E  
- d[v1, v2] = +∞ gdy (v1, v2) nie należy do E  
 
Algorytm jest dynamiczny i w kolejnych krokach włącza do swoich obliczeń ścieżki 
przechodzące przez kolejne wierzchołki. Tak więc w k-tym kroku algorytm zajmie się 

background image

 

sprawdzaniem dla każdej pary wierzchołków, czy nie da się skrócić (lub utworzyć) ścieżki 
pomiędzy nimi przechodzącej przez wierzchołek numer k (kolejność wierzchołków jest 
obojętna, ważne tylko, żeby nie zmieniała się w trakcie działania programu). Po wykonaniu 
|V| takich kroków długości najkrótszych ścieżek są już wyliczone.  
Złożoność obliczeniowa: O(|V|^3) Złożoność pamięciowa: O(|V|^2) 
 

8. 

 Procesy kompilacji i interpretacji w różnych językach programowania. Omów ich 

przebieg, porównaj wady i zalety, wskaż przykłady implementacji w popularnych językach. 
 
Translator 

 

program, który umożliwia przetłumaczenie na kod maszynowy i wykonanie 
programów napisanych w języku różnym od języka komputera.  

 

Kompilator jest programem (translatorem), który przetwarza kod napisany w jednym 
języku (tzw. języku źródłowym) na równoważny kod w drugim języku (tzw. języku 
wynikowym).  

 

Istnieją kompilatory dla tysięcy języków źródłowych od tradycyjnych uniwersalnych 
języków programowania takich jak wciąż używany Fortran, Pascal czy C aż do języków 
wyspecjalizowanych do konkretnych zastosowań.  

 

Alternatywnym typem translatora jest interpreter.  
 

 

Interpreter jest programem, który nie generuje programu wynikowego tylko od razu 
wykonuje instrukcje zawarte w programie źródłowym.  

 

Interpretery są wykorzystywane do wykonywania języków poleceń powłok systemów 
operacyjnych oraz języków bardzo wysokiego poziomu takich, jak APL czy Prolog.  

 

W chwili obecnej interpretery są rzadziej wykorzystywane niż kompilatory przede 
wszystkim ze względu na małą wydajność aplikacji 

 

mają pewne istotne zalety – ich implementacja bywa szybsza i prostsza, można 
uruchamiać częściowo napisane systemy, pozwalają na szybkie i częste modyfikacje 
oprogramowania. 

 

 Interpretery czasami bywają wykorzystywane również dla języków zwykle 
kompilowanych (takich, jak np. C), czasami dostępne są podejścia hybrydowe – język  

 

Prolog może być kompilowany albo interpretowany.  

 

Ważną dziedziną zastosowań interpreterów są maszyny wirtualne, choć także i tutaj 
ze względu na wydajność są wypierane przez kompilatory lub mechanizmy sprzętowe 
(np. koprocesory bezpośrednio wykonujące kod Javy).  

 
 
Kompilacja - podstawowe cechy  

 

Program źródłowy jest napisany w języku źródłowym, a program wynikowy należy do 
języka wynikowego.  

 

Wykonanie programu kompilatora następuje w czasie tłumaczenia.  

 

Program po przetłumaczeniu nie da się zmienić, jest statyczny.  

 

Kompilator jako dane wejściowe otrzymuje “cały” program źródłowy i przekształca go 
na postać wynikową.  

 

Skompilowane moduły są zazwyczaj łączone przez linker w jeden program 
wykonywalny. Interpretacja - podstawowe cechy  

background image

 

 

 Działanie interpretera polega na: wyodrębnieniu niewielkich jednostek programu 
źródłowego, tłumaczeniu ich na pewną postać wynikową oraz natychmiastowym ich 
wykonywaniu.  

 

Proces interpretacji jest cykliczny.  

 

W czasie interpretacji przechowywany jest program źródłowy. 

 

Kompilacja 

Interpretacja 

Program wynikowy wykonuje się szybciej. 

 

Łatwość zmian programu. 

 

Do wykonania programu wynikowego nie jest 
potrzebny kompilator. 

 

Mniejsza zajętość pamięci zewnętrznej (tylko 
tekst źródłowy). 

 

Lepsza optymalizacja kodu (optymalizacja 
dedykowana pod daną architekturę). 

 

 

Możliwość pracy konwersacyjnej (zatrzymanie 
wyk., zmiana wartości zmiennych, kontynuacja 
wyk.). 

 

 

Przenośność, wykorzystanie w zastosowaniach 
sieciowych. 

 

 

 

 
 
 
 
 
 

Języki programowania  
Kompilowane  
Napisane w nich kody po kompilacji to samodzielne programy:  

 

Delphi (Pascal),  

 

C, C++.  

 
Częściowo kompilowane 
Powstaje kod bajtowy (postać pośrednia) wymagający platformy uruchomieniowej: 

 

Java - JVM (Java VirtualMachine, Java RuntimeEnvironment),  

 

C# -.NET Framework. Interpretowane  

 

background image

10 

 

Wymagają interpretera: 

 

JavaScript (interpreterem jest przeglądarka),  

 

Perl (Practical Extraction and Report Language, praktyczny język ekstrakcji i 
raportowania),  

 

PHP (obecnie PHP HypertextPreprocessor(akronim rekurencyjny), pierwotnie 
PersonalHome Page) stosowany głównie do dynamicznego tworzenia stron 
internetowych,  

 

Python,  

 

Ruby,  

 

VBA (Visual Basic for Aplications), interpretatorem jest pakiet MS Office. 

 
 Omówienie procesu kompilacji  
Każda kompilacja jest dwuetapowym procesem. Najpierw następuje etap analizy, w 
trakcie którego program źródłowy jest rozkładany na części składowe i generowana jest 
jego reprezentacja pośrednia. Ważnym elementem tego etapu kompilacji jest 
wykrywanie i zgłaszanie użytkownikowi informacji o ewentualnych błędach w programie 
źródłowym. W drugim etapie – syntezie – na podstawie reprezentacji pośredniej 
generowany jest program wynikowy. Program wynikowy może być programem w innym 
języku źródłowym albo jakąś postacią kodu wykonywalnego. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

9. 

Mechanizm przeładowanie operatorów w językach obiektowych. Podaj przykład 

praktycznego zastosowania. 
 

Przeciążanie operatorów (ang. operator overloading, przeładowanie operatorów)  

 

to rodzaj polimorfizmu występującego w niektórych językach programowania,  

 

polegający na tym, że operator może mieć różne implementacje w zależności od 
typów użytych argumentów (operandów).  

 

Przeciążanie operatorów to typowy lukier składniowy.  

 

Potencjalnie znacznie poprawia czytelność kodu i umożliwia zdefiniowanie większej 
części biblioteki standardowej na poziomie języka, bez uciekania się do trików.  

background image

11 

 

 

Z drugiej strony, ta technika programistyczna może spowodować powstawanie 
niejasnych konstrukcji, gdzie operatory wykonują kompletnie różne czynności w 
zależności od ich operandów.  

 
Przykład:  
W C++ przeładowanie operatora wyjścia << dzięki czemu możemy drukować na wyjściu nasz 
obiek oraz określić jak będzie wydruk wyglądał, np. dla klasy Student wypisujemy Imie 
Nazwisko, nr indeksu. Przeładowanie operatora == abyśmy mogli porównywać nasze 
obiekty, np. dla klasy Student wystarczyłoby porównywać nr. indeksu, aby wiedzieć czy to ta 
sama osoba. 
 

10. 

Mechanizm dziedziczenia. Dziedziczenie jedno i wielokrotne. Podaj przykład 

wykorzystania. 
 
Dziedziczeniem (ang. inheritance) w programowaniu obiektowym nazywamy mechanizm 
współdzielenia funkcjonalności między klasami. Klasa może dziedziczyć po innej klasie, co 
oznacza, że oprócz swoich własnych atrybutów oraz zachowań, uzyskuje także te 
pochodzące z klasy, z której dziedziczy. Klasa dziedzicząca jest nazywana klasą pochodną lub 
potomną (w j. angielskim: subclass lub derived class), zaś klasa, z której następuje 
dziedziczenie — klasą bazową (w ang. superclass). Z jednej klasy bazowej można uzyskać 
dowolną liczbę klas pochodnych. Klasy pochodne posiadają obok swoich własnych metod i 
pól, również kompletny interfejs klasy bazowej.  

W programowaniu obiektowym wyróżniane jest dziedziczenie pojedyncze oraz dziedziczenie 
wielokrotne. Z dziedziczeniem pojedynczym mamy do czynienia, gdy klasa pochodna 
dziedziczy po dokładnie jednej klasie bazowej (oczywiście klasa bazowa wciąż może 
dziedziczyć z jakiejś innej klasy), natomiast w dziedziczeniu wielokrotnym klas bazowych 
może być więcej. 
 
Dziedziczenie wielokrotne stanowi właściwość niektórych obiektowych języków 
programowania w których klasa może dziedziczyć metody i pola z więcej niż jednej klasy 
bazowej. Języki wspierające dziedziczenie wielokrotne to: Eiffel, C++, Python, Perl, Curl, 
Common Lisp (via CLOS). 
 

11. 

Klasy abstrakcyjne i funkcje wirtualne w językach obiektowych. Podaj przykład 

zastosowania. 

Klasa abstrakcyjna w programowaniu obiektowym jest to klasa, która nie może mieć swoich 
reprezentantów pod postacią obiektów. Zależnie od użytego języka programowania klasy 
abstrakcyjne tworzy się na różne sposoby.  
 
Klasa abstrakcyjna jest pewnym uogólnieniem innych klas (na przykład dla występujących w 
rzeczywistości obiektów), lecz sama jako taka nie istnieje. Ustalmy, że przez "figurę" 
będziemy rozumieć "koło", "kwadrat" lub "trójkąt". Te obiekty matematyczne mogą być 
reprezentowane przez pewne klasy. Obiekty te posiadają już konkretne właściwości takie jak 
promień (dla konkretnego koła) czy długość boku (dla konkretnego kwadratu). Klasy tych 
obiektów wywodzą się z pewnej uogólnionej klasy określanej jako po prostu figura. Jednak 
nie jesteśmy w stanie określić jaką konstrukcję miałby obiekt klasy figura, ponieważ figura 

background image

12 

 

geometryczna jako taka nie istnieje. Istnieją natomiast wywodzące się od niej klasy koło czy 
kwadrat. Dodatkowo oczywistym jest, że figura nie posiada konkretnej wartości pola czy 
obwodu, jednak już na tym etapie wiemy, że każda figura tak zdefiniowana (koło, kwadrat 
czy trójkąt) posiada pole i obwód, które będzie różnie obliczane dla różnych figur. Dzięki 
temu figura definiuje pewien interfejs dla klas wywodzących się od niej.  
  

 

  C++  

W C++ klasą abstrakcyjną jest klasa, która posiada zadeklarowaną co najmniej jedną metodę 
czysto wirtualną. Każda klasa, która dziedziczy po klasie abstrakcyjnej i sama nie chce być 
abstrakcyjną, musi implementować wszystkie odziedziczone metody czysto wirtualne.  
 

  Java  

W Javie klasę abstrakcyjną możemy stworzyć na dwa sposoby: za pomocą słowa kluczowego 
abstract, które tworzy klasyczną klasę abstrakcyjną lub za pomocą słowa kluczowego 
interfacetworzącego abstrakcyjny interfejs  
 

  C#  

W C# klasą abstrakcyjną jest klasa, która została zadeklarowana jako abstrakcyjna za pomocą 
słowa kluczowego abstract.  
 
Właściwości:  
- Klasa abstrakcyjna w Javie nie musi posiadać metod czysto wirtualnych aby być 
abstrakcyjną, jednak takie użycie klasy abstrakcyjnej określa klasę jako nieinstancjowalną 
jest rzadziej spotykane.  
- Jeśli co najmniej jedna metoda w klasie zostanie zadeklarowana jako czysto wirtualna 
(abstrakcyjna), to ta klasa musi zostać zadeklarowana jako abstrakcyjna.  
- Jeżeli wszystkie metody klasy są czysto wirtualne, zaleca się, aby taką klasę zadeklarować 
jako interfejs klasy.  
 
Funkcje wirtualne  
To specjalne funkcje składowe, które przydają się szczególnie, gdy używamy obiektów 
posługując się wskaźnikami lub referencjami do nich. Dla zwykłych funkcji z identycznymi 
nazwami to, czy zostanie wywołana funkcja z klasy podstawowej, czy pochodnej, zależy od 
typu wskaźnika, a nie tego, na co faktycznie on wskazuje. Dysponując funkcjami wirtualnymi 
będziemy mogli użyć prawdziwego polimorfizmu - używać metod klasy pochodnej wszędzie 
tam, gdzie spodziewana jest klasa podstawowa. W ten sposób będziemy mogli korzystać z 
metod klasy pochodnej korzystając ze wskaźnika, którego typ odnosi się do klasy 
podstawowej. W tej chwili może się to wydawać niepraktyczne, lecz za chwilę przekonasz 
się, że funkcje wirtualne niosą naprawdę sporo nowych możliwości. 
 

12. 

Obsługa sytuacji wyjątkowych w językach obiektowych (np. C++, Java). 

 
Jeżeli w jakimś miejscu programu zajdzie nieoczekiwana sytuacja, programista piszący ten 
kod powinien zasygnalizować o tym. Dawniej polegało to na zwróceniu specyficznej wartości, 
co nie było zbyt szczęśliwym rozwiązaniem, bo sygnał musiał być taki jak wartość zwracana 
przez funkcję. W przypadku obsługi sytuacji wyjątkowej mówi się o obiekcie sytuacji 
wyjątkowej, co często zastępowane jest słowem "wyjątek". W C++ wyjątki się "rzuca", służy 

background image

13 

 

do tego instrukcja throw. Tam gdzie spodziewamy się wyjątku umieszczamy blok try, w 
którym umieszczamy "podejrzane" instrukcje. Za tym blokiem muszą (tzn. musi przynajmniej 
jedna) pojawić się bloki catch. 
 

13. 

Organizacja pamięci pomocniczej - metody przydziału miejsca na dysku 

 
Ciągły - Każdy plik zajmuje jeden spójny obszar na dysku, metoda całkowicie niefektywna w 
wyniku zmian wielkości plików i konieczności ciągłego "przemeblowywania" dysku. 
 
Listowy - Bloki dyskowe tworzące jeden plik połączone są w listę jednokierunkową, tzn. 
każdy blok zawiera numer następnego bloku tworzącego listę. Plik identyfikowany jest przez 
numer swojego pierwszego bloku. 
 
Indeksowy - Numery wszystkich bloków tworzących plik (właściwą treść pliku) zebrane są w 
jednym bloku, tzw. bloku indeksowym. Plik jest na dysku reprezentowany przez numer tego 
bloku indeksowego. Jeżeli więc np. bloki mają po 4 kB, a numer bloku jest 32-bitowy, to 
maksymalny rozmiar pliku wynosi 1024 * 4 KB = 4 MB. 
 

14. 

Omów i porównaj najczęściej stosowane systemy plików. 

 

  FAT32 

●     brak mechanizmu zarządzania wolnymi sektorami na dysku 
●     pliki porozrzucane na dysku 
●     częste fragmentacje 
●     obliczanie wolnego miejsca jest czasochłonne 
●     obsługiwany (chyba) przez wszystkie systemy operacyjne, dlatego stosowany na 
przenośnych nośnikach danych 
●     brak kontroli praw dostępu do danych 
 

  NTFS 

●     ulepszony względem FAT32 
●     przechowuje znacznie więcej metadanych (np. prawa dostępu) 
●     dziennik systemowy plików 
●     wprowadzona quota 
●     kompresja woluminów 
●     obsługa rzadkich plików (dużo zer) 
●     możliw- przechowuje archiwalne wersje plików i katalogów 
●     Windows Vista wprowadza linki symboliczne 
 

  ext2 

●     hierarcha za pomocą i-węzłów 
●     każdy plik ma swój i-węzeł 
●     i-węzeł ma unikatowy numer 
●     katalog - specjalny plik 
●     przeciwdziałanie fragmentacji (bliskie bloki, prealokacja) 
●     stabilny i dobrze przetestowany 

background image

14 

 

●     automatyczne sprawdzanie systemu po każdym niepoprawnym odmontowaniu oraz co 
jakiś czas 
●     wolne sprawdzanie systemu plików 
●     niska wydajność dla bardzo małych plików 

  ext3 

●     kompatybilny z ext2 
●     nowe cechy: 
■     journaling - zwiększenie bezpieczeństwa danych, skraca do minimum czas sprawdzania 
systemu plików po awarii 
■     indeksowane katalogi przy dużej liczbie plików, większa wydajność 

Journaling 

●     dodatkowe miejsce na dysku przechowuje informacje na temat zmian danych i 
metadanych 
●     wprowadzenie atomowych operacji - albo wszystkie, albo żadna 
●     skraca sprawdzanie systemu plikowego - czas przestaje zależeć od rozmiaru systemu 
plików 

      Journaling Block Device 

●     jest przechowywane w i-węźle 
●     do właściwego journalingu służy interfejs JBD 
●     wadą takiego rozwiązania jest większe zapotrzebowanie na powierzchnię dyskową 
●     zaletą jest znaczne uproszczenie systemu oraz ograniczenie wymuszeń na moc 
obliczeniową 
●     data=ordered  - zapełnia tylko meta-dane 
●     łączy modyfikacje danych i odpowiadające im meta-dane w logiczną całość w transakcje 
●     dopiero po zapisaniu danych na dysku 
 

15. 

Metody zarządzania wolną przestrzenią pamięci dyskowej. 

  Wektor bitowy – Mapa bitowa: Każdy blok dyskowy jest reprezentowany przez 1 bit 

w wektorze, jeśli jest 1 to blok jest wolny, jeśli 0 to blok jest zajęty, mało wydajne, 
nadaje się jedynie dla małych dysków 

 

  Lista powiązana – Powiązanie wszystkich wolnych bloków w ten sposób, że w bloku 

poprzednim znajduje się indeks bloku następnego, metoda niewydajna 

 

  Grupowanie – pierwszy wolny blok zawiera indeksy n innych wolnych bloków, z 

których n-1 wolnych bloków służy do alokacji, a n-ty blok zawiera znowu n-1 
indeksów kolejnych wolnych bloków, umożliwia szybkie odnajdywanie większej liczby 
wolnych bloków 

 

  Zliczanie – W przypadku kilku kolejnych (przylegających do siebie) wolnych bloków 

pamiętany jest tylko indeks pierwszego z nich oraz liczba wolnych bloków 
znajdujących się bezpośrednio za nim. Wykazy wolnych obszarów jest ciągiem 
wpisów składających się z indeksu bloku oraz licznika 

background image

15 

 

 

16. 

Algorytmy planowania przydziału procesora. 

 

  FCFS -(first come first served)   

•  Jest on najprostszym ze znanych algorytmów planowania procesora.  
•  Według tego schematu proces, który pierwszy zamówi procesor, pierwszy go 

otrzyma.  

•  Implementację tego algorytmu otrzymuje się przez zastosowanie kolejki FIFO.  
•  Blok kontrolny procesu wchodzącego dokolejki jest umieszczany na jej końcu. J 
•  est to algorytm niewywłaszczający.  
•  Po objęciu kontroli nad procesorem proces utrzymuje ją do czasu, aż sam zwolni 

procesor wskuteg zakończenia swego działania lub zamówienia operacji wejścia-
wyjścia.  

•  W algorytmie FCFS, średni czas oczekiwania bywa przeważniedługi.  

 

  SJF - (shortest job first)  

•  Algorytm ten wiąże z każdym procesem długość jego najbliższej z przyszłych faz 

procesora.  

•  Gdy procesor staje się dostępny, wówczas zostaje przydzelony procesorowi proces o 

najkrótszej następnej fazieprocesora.  

•  Algortm SJF może być wywłaszczający lub niewywłaszczający.  
•  Konieczność wyboru powstaje wówczas, gdy w kolejce procesów gotowych, podczas, 

gdy procesor jest zajęty innym procesem, pojawia się proces o krótszej fazie 
procesora, niż to co jeszcze zostało do wykonania w procesie bieżącym. 

•  Algorytm SJF - wywłaszczający usunie wówczas, bierzący proces do kolejki procesów 

gotowych i przydzieli mu proces o krótszej fazie z kolejki.  

•  Algorytm SJF jest optymalny, tzn daje minimalny średni czas oczekiwania dla danego 

zbioru procesów. Jednak poważną trudność sprawia określenie długości następnej 
fazy procesora.  

 

  Planowanie priorytetowe  

•  Każdemu procesowi przypisuje się priorytet, po czym przydziela się procesor temu 

procesowi, którego priorytet jest najwyższy.  

•  Procesy o równych priorytetach planuje się wg. schematu FCFS. (Algorytm SJF jest 

szczególnym przypadkiem planowania priorytetowego, w którym priorytet jest 
odwrotnością następnej przewidywanej fazy procesora).  

•  Planowanie priorytetowe może być wywłaszczające lub niewywłaszczające.  
•  Priorytet procesu dołączonego do kolejki procesów gotowych jest porównywany z 

priorytetem procesu aktualnie przetwarzanego.  

•  Algorytm wywłaszczający wywłaszczy proces aktualnie przetwarzany, jeżeli nowo 

przybyły proces charakteryzuje się wyższym priorytetem, natomiast algorytm 
niewywłaszczający ustawi nowo przybyły proces z wyższym priorytetem na czole 
kolejki.  

•  Należy pamiętać też o tym, że w mocno obciążonym systemie komputerowym, przy 

użyciu planowania priorytetowego z wywłaszczeniem, stały dopływ napływ 
procesów o wysokich priorytetach może nigdy nie dopuścić do wykonania się 
procesu o priorytecie niskim. Rozwiązaniem tego problemu jest postarzanie 

background image

16 

 

priorytetów. Polega ono na podnoszeniu priorytetów procesów długo oczekujących 
na przydział procesora.  

 

  Planowanie rotacyjne (RR - round robin)  

•  Algorytm ten zaprojektowano specjalnie do systemów z podziałem czasu.  
•  Jest on podobny do FCFS, z tym, że w celu przełączania procesów dodano do niego 

wywłaszczenie.  

•  Ustala się małą jednostkę czasu (kwant czasu), kolejka procesów gotowych jest 

traktowana jako kolejka cykliczna.  

•  Planista przegląda tę kolejkę i każdemu procesowi przydziela odcinek czasu nie 

dłuższy niż kwant czasu.  

•  Wydajność algorytmu rotacyjnego w dużym stopniu zależy od rozmiaru kwantu 

czasu. Gdy kwant czasu jest bardzo długi, metoda rotacyjna sprowadza się do 
planowania FCFS, natomiast jeśli kwant czasu jest bardzo mały to planowanie 
rotacyjne nazywa się dzieleniem procesora i sprawia ono wrażenie, że każdy z n 
procesów ma własny procesor działający z 1/n szybkości rzeczywistego procesora. 

 

17. 

Algorytmy zastępowania stron. 

 

•  algorytm FIFO - ofiarą staje się strona, która najdłużej przebywa w pamięci, gorszy niż 

LRU, nie jest wolny od anomalii Belady’ego 

•  algorytm drugiej szansy 
•  algorytm zegarowy 
•  algorytm optymalny - ofiarą staje się strona, która przez najdłuższy okres będzie 

nieużywana – jest to algorytm teoretyczny, służy do oceny jakości innych 
algorytmów, nie da się go zaimplementować, gdyż nie da się przewidzieć przyszłym 
odwołań do pamięci, maksymalne obniżenie braków stron, wolny od anomalii 
Belady’ego 

•  LRU -  ofiarą staje się strona , która nie była używana przez najdłuższy okres, uzyskuje 

mniejszą ilość braków stron niż FIFO. Trudny w zaimplementowaniu, można 
zastosować dla strony pole znacznika czasu ostatniego dostępu do strony(ofiara to ta 
z najmniejszą wartością znacznika) lub skorzystać ze stosu, wolny od anomalii 
Belady’ego 

•  MFU - ofiarą staje się strona, do której było najwięcej odwołań (najczęściej używana 

strona) 
 

18. 

Schematy RAID (Redundant Array of Independent Disks). Porównanie pod kątem 

niezawodności i wydajności. 
 

POZIOM 

MIN LICZBA 

DYSKÓW 

DOSTĘPNA 

PRZESTRZEŃ 

MAX LICZBA 

DYSKÓW, KTÓRE 

MOGĄ ULEC AWARII 

RAID 0 

RAID 1 

N-1 

RAID 4 

N-1 

background image

17 

 

RAID 5 

N-1 

RAID 6 

N-2 

 
 

  RAID - linear 

●     pojemność dysków w macierzy zsumowana 
●     zapis liniowy, po przepełnieniu jednego dysku zapis na następnym 
●     zalety: 

■     duża pojemność 
■     łączenie dysków o dużych pojemnościach 

●     wady: 

■     brak zabezpieczonych danych 
■     czas odczytu i zapisu nie zmienia się 

 

  RAID-0 (stripping) 

●     dane są dzielone na paski (stripe) o rozmiarze 4-128KB i przenoszone 
kolejno naprzemiennie na poszczególne dyski 
●     pojemność dyskowa macierzy = ilość dysków * pojemność najmniejszego 
dysku 
●     zalety: 
■     duża pojemność 
■     duża szybkość odczytu/zapisu 
●     wady: 
■     brak zabezpieczenia danych, awaria jednego dysku prowadzi do utraty 
wszystkich danych 
 

  RAID-1 

●     zalety: 

■     duża niezawodność, przy awarii jednego działa drugi 
■     możliwy równoległy odczyt z dwóch dysków 

●     wady: 

■     zmniejszona szybkość zapisu - konieczność zapisu na dwóch 
dyskach   jednocześnie 
■     utrata połączonej pojemności macierzy 

 

  RAID-4 

●     dane dzielone są na paski 
●     “w locie” obliczane są kody parzystości i zapisywane na dodatkowym dedykowanym 
dysku 
●     zalety: 

■     zwiększona niezawodność 
■     lepsze wykorzystanie przestrzeni 

●     wady: 

■     ciągłe obciążenie jednego dysku 
■     minimum 3 dyski 

●     obliczanie parzystości 

■     A xor B xor C xor D = P 

background image

18 

 

■     P xor B xor C xor D = A 

 
 
 

  RAID-5 

●     dane dzielone na paski o rozmiarze 4-128KB i przenoszone kolejno naprzemiennie na 
poszczególne dyski 
●     “w locie” obliczane są kody parzystości i zapisywane kolejno na każdym z dysków 
●     zalety: 

■     zwiększenie niezawodności 
■     równomierne wykorzystanie wszystkich dysków 

●     wady: 

■     skomplikowany i długotrwały proces odbudowania 
■     minumum 3 dyski 

 

  RAID-6 

●     jak w RAID-5, ale namiarowe są 2 dyski 
●     zalety: 

■     zwiekszenie niezawodności 
■     ochrona systemu w momencie uszkodzenia jednego 
dysku podobna do RAID-5, z Hot Spare ale ochrona w 
trakcie odbudowania systemu 

●     wady: 

■     skomplikowany i długotrwały proces odbudowy 
■     minimum 4 dyski 

 

19. 

Omów metody zarządzania pamięcią. 

 
Metody przydziału pamięci operacyjnej procesom użytkowym: 
 
1. brak podziału, wolna przestrzeń adresowa w danej chwili przydzielana jednemu procesowi 
użytkowemu. Wieloprogramowanie można realizować przez wymiatanie. 
 
2. podział pamięci, wolna przestrzeń adresowa podzielona na części przydzielane 
pojedynczym procesom użytkowym. 
- podział statyczny- dzieli pamięć na stałe partycje o różnej długości lub na bloki o stałej 
długości zwane ramami (ang. frames) 
- podział dynamiczny- realizacja z wykorzystaniem struktur opisujących wolne bloki pamięci 
o różnych długościach oraz mechanizm wymiatania. 
 
3. wykorzystanie pamięci wirtualnej, istnieje jedna lub wiele wirtualnych przestrzeni 
adresowych przydzielanych procesom użytkowym, a mających w niewielkim stopniu 
pokrycie w pamięci operacyjnej. 
 

20. 

Mechanizmy komunikacji międzyprocesowej IPC (Inter Process Communication). 

 

background image

19 

 

Komunikacja międzyprocesowa (ang. Inter-Process Communication — IPC) – umowna nazwa 
zbioru sposobów komunikacji pomiędzy procesami systemu operacyjnego. 
  
Procesy mogą używać różnych sposobów komunikacji, a najpowszechniejsze z nich to:  

•  pliki i blokady – najprostsza i najstarsza forma IPC  

 

•  sygnały (ang. signals) – w niektórych systemach (jak np. DOS) znane jako przerwania 

programowe  
 

•  semafory (ang. semaphores) - Używane są do kontroli dostepu do zasobów systemu 

dzielonych przez kilka procesów. Zapobiegają one sytuacją w którym dwa procesy 
jednocześnie mają dostęp do modyfikacji danego zasobu systemowego. Semafor jest 
implementowany w jądrze, a używające go procesy otrzymują identyfikator semafora 
, dzięki któremu mogą się do niego odwoływać.  
 

•  łącza nienazwane (ang. pipes) – znane też jako łącza komunikacyjne. Są to łącza do 

których dostęp maja jedynie procesy pokrewne, czyli proces oraz jego potomkowie. 
Dzieje się tak dlatego, że procesy potomne dziedziczą deskryptory plików. Łącza 
nienazwane oparte są właśnie na deskryptorach. Jądro systemu, na żądanie procesu, 
tworzy łącze bez nazwy i umieszcza jego deskryptor w tablicy deskryptorów plików 
otwartych w procesie. Z deskryptorół tych korzysta najpierw proces, a następnie jego 
potomkowie. Kiedy ostatni proces zostaje zrealizowany, zamyka on koniec łącza.  
 

•  łącza nazwane (ang. named pipes) – znane też jako nazwane łącza komunikacyjne. 

Działają one w oparciu o algorytm FIFO (ang. First In First Out). Łącze nazwane jest 
identyfikowane przez nazwę. Dzięki temu procesy niespokrewnione mogą przesyłać 
między sobą dane. Łącze to ma dowiązanie w systemie plików, oznacza to że istnieje 
w systemie jako plik w jakimś katalogu. Łącze to ma to do siebie, że pozostaje w 
systemie nawet po zakończeniu ostatniego używającego je procesu.  
 

•  kolejki komunikatów (ang. message queues) - Kolejki służą do komunikacji między 

procesami. Działają one na zasadzie algorytmu FIFO, to znaczy, że jeżeli proces chce 
wysłać komunikat umieszcza go na końcu kolejki. Komunikaty zawarte w kolejce są w 
kolejności nadesłania wysyłane do swoich odbiorców. W momencie kiedy proces 
będzie na pierwszym miejscu w kolejce, zostaje pobrany przez swojego odbiorce. W 
tym momencie komunikat jest automatycznie usuwany z kolejki.  
 

•  pamięć dzieloną (ang. shared memory) – znane też jako segmenty pamięci dzielonej 

(ang. shared memory segments). Jest to obszar pamięci dzielony pomiędzy kilkoma 
procesami. Dane umieszczane są przez proces w tzw. segmentach, w obszarze 
adresowym procesu wywołującego. Może z nich korzystać wiele procesów. Pamięć 
dzielona jest najszybszym sposobem komunikacji pomiędzy procesami.  
 

•  gniazda dziedziny Uniksa (ang. Unix domain sockets) - Gniazda wykorzystywane są do 

komunikacji przez sieć w ramach komunikacji międzyprocesowej. Umożliwiają 
komunikacje dwukierunkową, czyli wysyłanie i przyjmowanie danych. Gniazda są 
pojęciem abstrakcyjnym i oznaczają dwukierunkowy punkt końcowy połączenia. 

background image

20 

 

Gniazda posiadają takie właściwości jak: swój typ, lokalny adres, oraz opcjonalnie 
port. Typ gniazda określa sposób wymiany danych, adres IP określa węzeł w sieci a 
numer portu określa proces w węźle.  

 

21. 

Układy elektroniczne jako filtry. Klasyfikacja i przykłady zastosowań. 

 
Filtr jest to fragment obwodu elektrycznego lub obwodu elektronicznego odpowiedzialny za 
przepuszczanie lub blokowanie sygnałów o określonym zakresie częstotliwości lub 
zawierającego określone harmoniczne.  
 
Podział filtrów  

  Ze względu na przeznaczenie filtry można podzielić na cztery podstawowe rodzaje  

- dolnoprzepustowe  
- górnoprzepustowe  
- środkowoprzepustowe  
- środkowozaporowe  
 

  Ze względu na konstrukcję i rodzaj działania filtry można podzielić na:  

- pasywne – nie zawierają elementów dostarczających energii do obwodu drgającego, 
zawierają tylko elementy RLC  
* jednostopniowe  
* wielostopniowe  
- aktywne – zawierają zarówno elementy RLC, jak również i elementy dostarczające energię 
do filtrowanego układu np. wzmacniacze, układy nieliniowe.  
 

  Filtry można również podzielić na typy obwodów w jakich są używane:  

- analogowe  
- cyfrowe  
 
 
Najprostszym rodzajem filtra pasywnego, szeroko stosowanego w elektronice, jest filtr 
dolnoprzepustowy w postaci kondensatora o dużej pojemności połączonego równolegle do 
filtrowanego napięcia (z ewentualnym szeregowym opornikiem). 
 
Filtry aktywne najczęściej są stosowane przy układach scalonych do zastąpienia filtrów LC 
przy niskich częstotliwościach. 
 

22. 

Wzmacniacz operacyjny. Parametry charakterystyczne, zastosowania. 

 
Wzmacniacz operacyjny to  

  wielostopniowy, wzmacniacz różnicowy prądu stałego,  
  charakteryzujący się bardzo dużym różnicowym wzmocnieniem napięciowym rzędu 

stu kilkudziesięciu decybeli 

  przeznaczony zwykle do pracy z zewnętrznym obwodem sprzężenia zwrotnego, który 

decyduje o głównych właściwościach całego układu  
 

PARAMETRY: 

background image

21 

 

  Różnicowe wzmocnienie napięciowe - to stosunek zmiany napięcia wyjściowego 

do zmiany różnicowego napięcia wejściowego. 
 

  Wejściowe napięcie niezrównoważenia. W idealnym wzmacniaczu operacyjnym 

jeżeli na obu wejściach jest napięcie równe 0, to na wyjściu też powinno być 
napięcie równe 0. Ale w rzeczywistych wzmacniaczach tak nie jest. Wejściowym 
napięciem niezrównoważenia określa się napięcie między wejściami 
wzmacniacza, gdy na wyjściu panuje napięcie równe 0. 

 

  Wzmocnienie sygnału współbieżnego Napięcie wyjściowe wzmacniacza może 

zależeć też od sumy napięć na wejściach wzmacniacza. 

 

  Współczynnik tłumienia sygnału współbieżnego - w miejsce wzmocnienia sygnału 

współbieżnego często podawany jest współczynnik tłumienia sygnału 
współbieżnego (ang. Common Mode Rejection Ratio, CMRR), który lepiej określa 
własności wzmacniacza. 

 

  Wyjściowe napięcie niezrównoważenia Napięcie na wyjściu wzmacniacza, gdy na 

obu wejściach napięcie jest równe zero. 

 

  Rezystancja wejściowa  

Określa się:  
- Rezystancję sygnału różnicowego, określoną jako rezystancję między wejściami 
wzmacniacza przy podawaniu napięcia między wejścia.  
- Rezystancję sygnału współbieżnego, określoną między jednym z wejść a masą.  

 

  Rezystancję wyjściową określa się jako rezystancję wyjścia przy obu sygnałach 

wejściowych równych zero.  

 

  Współczynnik tłumienia wpływu zasilania (ang. Power Supply Rejection Ratio, PSRR), 

określa się jako stosunek zmiany napięcia zasilania do wywoływanej przezeń zmiany 
napięcia wyjściowego. Współczynnik PSRR wyrażany jest zazwyczaj w decybelach. 

 

  Zakres zmian napięcia wejściowego Zakres zmian napięcia na każdym z wejść 

względem masy, przy których wzmacniacz pracuje poprawnie.  

 

  Maksymalne napięcie wyjściowe - to maksymalne napięcie jakie można uzyskać na 

wyjściu bez nasycenia wzmacniacza.  

 

  Maksymalny prąd wyjściowy - to maksymalny prąd jaki może przepływać przez 

wyjście wzmacniacza przy jego prawidłowej pracy.  

 

  Wejściowy prąd polaryzujący - wymagane jest pewne minimalne natężenie prądu na 

wejściach wzmacniacza, aby prawidłowo pracował. Jest ono rzędu nA lub uA.  

 

background image

22 

 

  Szybkość zmian napięcia wyjściowego - to maksymalna szybkość zmiany napięcia na 

wyjściu wzmacniacza po pobudzeniu wejścia jednostkowym skokiem napięcia. 
Zazwyczaj podawana jest to wartość w woltach na mikrosekundę.  

 

  Pasmo pętli otwartej to pasmo przenoszenia wzmacniacza przy otwartej pętli 

sprzężenia zwrotnego. 

 
Wzmacniacze operacyjne są stosowane np. w sumatorach. 
 

23. 

Bramki i funktory logiczne. Tabele prawdy. Minimalizacja funkcji. 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Minimalizacja funkcji metodą Karnaugh’a. Tablica Karnaugha (mapa Karnaugha), to: 

•  uporządkowany w specyficzny sposób zapis wartości funkcji logicznej.  
•  Struktura mapy jest prostokątna, złożona z elementarnych pól, gdzie każde pole 

reprezentuje iloczyn pełny w odniesieniu do zmiennych wejściowych, czyli 
argumentów danej funkcji. Stąd też tablica ta zawiera wszystkie możliwe kombinacje 
wartości argumentów.  

•  Na marginesach tablicy wpisuje się w określonym porządku (wg kodu Graya) 

wartości argumentów.  

•  Przy parzystej liczbie argumentów połowa z nich umieszczona jest na marginesie 

poziomym, a druga połowa na marginesie pionowym.  

 

background image

23 

 

 
 

24. 

Układy sekwencyjne. Przykłady realizacji i obszary zastosowań. 

 
Układ sekwencyjny jest jednym z rodzajów układów cyfrowych. Charakteryzuje się tym, że 
stan wyjść zależy od stanu wejść oraz od poprzedniego stanu, zwanego stanem 
wewnętrznym, pamiętanego w zespole rejestrów (pamięci). 
 

 

Układy asynchroniczne  

W układach asynchronicznych zmiana sygnałów wejściowych X natychmiast powoduje 
zmianę wyjść Y. W związku z tym układy te są szybkie, ale jednocześnie podatne na zjawisko 
hazardu i wyścigu. Zjawisko wyścigu występuje, gdy co najmniej dwa sygnały wejściowe 
zmieniają swój stan w jednej chwili czasu (np. ). Jednak, ze względu na niezerowe czasy 
przełączania bramek i przerzutników, zmiana jednego z sygnałów może nastąpić [trochę] 
wcześniej niż innych, powodując trudne do wykrycia błędy. Dlatego też w analizie układów 
asynchronicznych uznaje się, że jednoczesna zmiana kilku sygnałów jest niemożliwa.  
 

 

Układy synchroniczne  

W układach synchronicznych zmiana stanu wewnętrznego następuje wyłącznie w 
określonych chwilach, które wyznacza sygnał zegarowy (ang. clock). Każdy układ 
synchroniczny posiada wejście zegarowe oznaczane zwyczajowo symbolami C, CLK lub 
CLOCK. Charakterystyczne dla układów synchronicznych, jest to, iż nawet gdy stan wejść się 
nie zmienia, to stan wewnętrzny - w kolejnych taktach zegara - może ulec zmianie.  
 
Ponieważ w przypadku układu synchronicznego zrealizowanego jako automat Moore'a 
wyjście układu jest funkcją stanu wewnętrznego, może ono zmieniać się tylko w chwili 
nadejścia taktu, co daje gwarancję, że odpowiedni stan wyjść utrzyma się przez cały takt. W 
przypadku automatu Mealy'ego zmiana wyjścia układu może nastąpić także w momencie 
zmiany wejścia.  
Jeśli układ reaguje na określony stan (logiczny) zegara, to mówi się że układ jest statyczny 
(wyzwalany poziomem), jeśli zaś układ reaguje na zmianę sygnału zegarowego jest 
dynamiczny(wyzwalany zboczem). Układ dynamiczny może być wyzwalany zboczem (ang. 
edge) opadającym lub narastającym, albo impulsem.  
 
Jeśli układ synchroniczny nie ma wejść, a jedynie charakteryzuje go stan wewnętrzny, to taki 
układ nazywany jest autonomicznym (dobrym przykładem takich układów są liczniki 
stosowane w popularnych zegarkach elektronicznych). 
 

25. 

Sumator równoległy. Sumator a jednostka arytmetyczno- logiczna. 

 
Sumator – cyfrowy układ kombinacyjny, który wykonuje operacje dodawania dwóch (lub 
więcej) liczb dwójkowych. 
 

Sumatory równoległe- wielopozycyjne, dodają do siebie jednocześnie bity ze wszystkich 
pozycji, a przeniesienie realizowane jest w zależności od sposobu połączenia sumatorów 
jednobitowych 

background image

24 

 

Są dwa główne rodzaje sumatorów równoległych: 

•  z przeniesieniami szeregowymi (ang. ripple-carry adder

Sumator ten zbudowany jest z bloków funkcjonalnych, które realizują funkcje  i  Bloki są 
połączone kaskadowo (ripple), tzn. wyjście  jest łączone z wejściem 

bloku następnego. 

Aby np. otrzymać bit sumy  uprzednio muszą zostać wyznaczone sygnały przeniesień  , 
oraz 

(

 zależy od 

, a ten zależy od  ). Czas otrzymania ostatecznego wyniku jest więc 

ograniczony do dołu przez  × czas generacji przeniesienia  , gdzie  to liczba elementarnych 
bloków z których zbudowanych jest sumator. 

•  z przeniesieniami równoległymi (ang. carry look-ahead adder

W sumatorze z przeniesieniami równoległymi bity przeniesień są wyznaczane równolegle. 
Wyrażenia opisujące  są [rekursywnie] rozwijane, tzn. występujący w nich składnik 

jest 

zastępowany stosownym wyrażeniem, np.: 

 

 

 

 

  Układ buduje się z dwóch głównych części: 

1. 

bloków wyznaczających sumę  oraz grupy generacyjne  i propagacyjne 

(które są liczone niezależnie!) 
2. 

bloku generującego przeniesienia, zgodnie z rozwiniętymi wyrażeniami 

W praktyce buduje się 4-bitowe sumatory tego typu, ze względu na znaczne skomplikowanie 
wyrażeń (a więc obwodów elektrycznych bloku nr 2). 

Sumator z przeniesieniami równoległymi jest ok. 20-40% szybszy niż sumator z 
przeniesieniami szeregowymi. 

Często jako sumator wykorzystywany jest układ jednostki arytmetyczno-logicznej (ang. 
arithmetic logic unit - ALU). W rzeczywistości układ ten potrafi realizować wiele innych 
funkcji. Na przykład 4-bitowe ALU '181 (z możliwością zwiększenia długości słowa) może 
dodawać, odejmować, przesuwać bity, porównywać wartości bezwzględne liczb oraz 
wykonywać kilka innych funkcji. Sumatory i ALU wykonują funkcje arytmetyczne w czasie od 
pojedynczych nanosekund do dziesiątków nanosekund, w zależności od rodziny układów 
scalonych. 

26. 

Budowa i zasada działania procesorów: potokowy, wektorowy, CISC, RISC. 

RISC  
- stosunkowo niewiele rozkazów wykonywanych w pojedynczym cyklu rozkazowym,  
- stosunkowo niewiele trybów adresowania,  

background image

25 

 

- łatwe do zdekodowania, stałej długości formaty rozkazów  
- dostęp do pamięci ograniczony do rozkazów LOAD i STORE  
- stosunkowo obszerny zbiór uniwersalnych rejestrów  
- rozkazy działające zazwyczaj na argumentach zapisanych w rejestrach, a nie w pamięci 
operacyjnej,  
- układowo zrealizowana jednostka sterująca  
Inne cechy charakteryzujace nie tylko procesory RISC:  
- intensywne wykorzystanie przetwarzania potokowego, w tym potokowe wykonywanie 
rozkazow 
- kompilatory o dużych możliwościach optymalizacji kodu wykorzystujące architekturę 
potokową,  
- skompilowane funkcje zaimplementowane częściej programowo niż sprzętowo.  
 
Procesor CISC:  
- występowanie złożonych, specjalistycznych rozkazów (instrukcji) - które do wykonania 
wymagają od kilku do kilkunastu cykli zegara  
- szeroka gama trybów adresowania,  
- przeciwne niż w architekturze RISC rozkazy mogą operować bezpośrednio na pamięci 
(zamiast przesyłania wartości do rejestrów i operowania na nich)  
- powyższe założenia powodują iż dekoder rozkazów jest skomplikowany  
Istotą architektury CISC jest to, iż pojedynczy rozkaz mikroprocesora wykonuje kilka operacji 
niskiego poziomu, jak na przykład pobranie z pamięci, operację arytmetyczną i zapisane do 
pamięci.  
 
Procesor wektorowy  
- w przeciwieństwie do skalarnego, pozwala na przetwarzanie w pojedynczych cyklach całych 
wektorów danych.  
- Operandami instrukcji są wieloelementowe zbiory liczb. Dzięki temu można przyspieszyć 
niektóre obliczenia.  
- Procesory wektorowe stosowane są także we współczesnych superkomputerach. 

 

Procesor potokowy 
- technika budowy procesorów polegająca na podziale logiki procesora odpowiedzialnej za 
proces wykonywania programu (instrukcji procesora) na specjalizowane grupy w taki sposób, 
aby każda z grup wykonywała część pracy związanej z wykonaniem rozkazu.  
- Grupy te są połączone sekwencyjnie – potok (ang. pipe) – i wykonują pracę równocześnie, 
pobierając dane od poprzedniego elementu w sekwencji. W każdej z tych grup rozkaz jest na 
innym stadium wykonania. Można to porównać do taśmy produkcyjnej.  
- Podstawowym mankamentem techniki potoku są rozkazy skoku, powodujące w najgorszym 
wypadku potrzebę przeczyszczenia całego potoku i wycofania rozkazów, które następowały 
zaraz po instrukcji skoku i rozpoczęcie zapełniania potoku od początku od adresu, do którego 
następował skok. Taki rozkaz skoku może powodować ogromne opóźnienia w wykonywaniu 
programu – tym większe, im większa jest długość potoku. Dodatkowo szacuje się, że dla 
modelu programowego x86 taki skok występuje co kilkanaście rozkazów. Z tego powodu 
niektóre architektury programowe (np. SPARC) zakładały zawsze wykonanie jednego lub 
większej ilości rozkazów następujących po rozkazie skoku, tzw. skok opóźniony. Stosuje się 

background image

26 

 

także skomplikowane metody predykcji skoku lub metody programowania bez użycia 
skoków. 
 

27. 

Klasyfikacja architektur komputerowych. 

Taksonomia Flynna jest klasyfikacją architektur komputerowych, zaproponowaną w latach 
sześćdziesiątych XX wieku przez Michaela Flynna, opierająca się na liczbie przetwarzanych 
strumieni danych i strumieni rozkazów. W taksonomii tej wyróżnia się cztery grupy:  
 
- SISD (Single Instruction, Single Data) - przetwarzany jest jeden strumień danych przez jeden 
wykonywany program - komputery skalarne (sekwencyjne).  
 
- SIMD (Single Instruction, Multiple Data) - przetwarzanych jest wiele strumieni danych przez 
jeden wykonywany program - tzw. komputery wektorowe.  
 
- MISD (Multiple Instruction, Single Data) - wiele równolegle wykonywanych programów 
przetwarza jednocześnie jeden wspólny strumień danych. W zasadzie jedynym 
zastosowaniem są systemy wykorzystujące redundancję (wielokrotne wykonywanie tych 
samych obliczeń) do minimalizacji błędów.  
 
- MIMD (Multiple Instruction, Multiple Data) - równolegle wykonywanych jest wiele 
programów, z których każdy przetwarza własne strumienie danych - przykładem mogą być 
komputery wieloprocesorowe, a także klastry i gridy.  
 

28. 

Systemy przerwań. Aspekty sprzętowe i programowe. 

Przerwanie (ang. interrupt) lub żądanie przerwania (IRQ – Interrupt ReQuest) – sygnał 
powodujący zmianę przepływu sterowania, niezależnie od aktualnie wykonywanego 
programu. Pojawienie się przerwania powoduje wstrzymanie aktualnie wykonywanego 
programu i wykonanie przez procesor kodu procedury obsługi przerwania (ang. interrupt 
handler).  
Przerwania dzielą się na dwie grupy:  
 

  Sprzętowe:  

 

Zewnętrzne – sygnał przerwania pochodzi z zewnętrznego układu obsługującego 
przerwania sprzętowe; przerwania te służą do komunikacji z urządzeniami 
zewnętrznymi, np. z klawiaturą, napędami dysków itp.  
 

 

Wewnętrzne, nazywane wyjątkami (ang. exceptions) – zgłaszane przez procesor dla 
sygnalizowania sytuacji wyjątkowych (np. dzielenie przez zero); dzielą się na trzy 
grupy:  

o  faults (niepowodzenie) – sytuacje, w których aktualnie wykonywana instrukcja 

powoduje błąd; gdy procesor powraca do wykonywania przerwanego kodu 
wykonuje tę samą instrukcję która wywołała wyjątek;  

o  traps (pułapki) – sytuacja, która nie jest błędem, jej wystąpienie ma na celu 

wykonanie określonego kodu; wykorzystywane przede wszystkim w debugerach; 
gdy procesor powraca do wykonywania przerwanego kodu, wykonuje następną, 
po tej która wywołała wyjątek, instrukcję;  

background image

27 

 

o  aborts (nienaprawialne) – błędy, których nie można naprawić.  

 

  Programowe – z kodu programu wywoływana jest procedura obsługi 

przerwania; najczęściej wykorzystywane do komunikacji z systemem 
operacyjnym, który w procedurze obsługi przerwania (np. w DOS 21h, 2fh, 
Windows 2fh, Linux x86 przerwanie 80h) umieszcza kod wywołujący 
odpowiednie funkcje systemowe w zależności od zawartości rejestrów 
ustawionych przez program wywołujący, lub oprogramowaniem 
wbudowanym jak procedury BIOS lub firmware.  

 

29. 

Omówić podstawowe tryby adresowania 

Tryby adresowania:  
 

 

Tryb prosty- W trybie adresowania prostego (inherent addressing mode) wszystkie 
informacje wymagane dla wykonania operacji są już z "natury" znane jednostce 
centralnej i żaden zewnętrzny argument z pamięci lub z programu nie jest potrzebny. 
Argumenty, jeżeli występują, są jedynie wartościami rejestru indeksowego i 
akumulatora. Rozkazy w tym trybie są zawsze jednobajtowe. 
 

 

Tryb natychmiastowy - pole adresowe zawiera bezpośrednio operand (argument) 
czyli daną dla rozkazu. Długość operandu zależy od kodu operacji lub od kodu 
operacji i dodatkowego pola sterującego w rozkazie. Ten tryb adresowania 
stosujemy, gdy np. chcemy bezpośrednio z rozkazu ( bez odwolywania się do 
pamięci) załadować do rejestru prostą daną - bajt lub parę bajtów.  
 

 

Adresowanie bezpośrednie - jest najbardziej podstawowym trybem adresowania. W 
tym trybie zawartość pola adresowego stanowi już finalny adres argumentu rozkazu 
w pamięci operacyjnej i nie podlega przekształceniu. Ten tryb stosujemy, gdy nie 
zależy nam na tym, aby nasz program był przesuwalny w pamięci operacyjnej, lecz 
jest przeznaczony do wykonania przy zapisie w ściśle określone miejsce w pamięci.  

 

Adresowanie pośrednie - rozkaz zawiera adres komórki pamięci operacyjnej, w której 
zawarty jest finalny adres operandu rozkazu. W tym przypadku komórka pamięci 
wskazana przez adres rozkazu pośredniczy w określeniu finalnego adresu. Ten tryb 
stosujemy, gdy chcemy, aby finalny adres operandu rozkazu mógł być dynamicznie 
wstawiony do komórki pośredniczącej w adresowaniu w czasie wykonywania 
programu. Może tak być, gdy ten adres zależy od jakichś testów na wyniku operacji 
poprzedzającego rozkazu.  

 

 

Adresowanie względne - polega na modyfikacji adresu zawartego w rozkazie przez 
aktualną zawartość licznika rozkazów. Ten tryb adresowania dostarcza innego 
sposobu osiągnięcia dynamicznej przesuwalności adresów dostępu do danych, tj. gdy 
nie chcemy lub nie możemy znać przesunięcia całości programu w stosunku do 
adresu zerowego. Przy tym trybie adresowania, finalny adres danej jest wyliczany 
względem bieżącej zawartości licznika rozkazów, a więc do rozkazu wstawiamy 
przesunięcie danej w programie względem adresu następnego rozkazu, np. n 

background image

28 

 

komórek w przód lub w tył. Musimy tylko zapewnić, aby dana została umieszczona w 
spodziewanym miejscu pamięci, a ściślej w spodziewanej odległości od rozkazu, który 
z tej danej korzysta. Można to osiągnąć przez zaplanowanie w jakiej odległości od 
danego rozkazu, będzie umieszczony obszar danych programu.  

 

 

Adresowanie indeksowe - jest inaczej nazywane modyfikacją adresu przez 
indeksowanie. W tym trybie wykorzystuje się specjalne rejestry procesora tzw. 
rejestry indeksowe, które zawierają przesunięcie, które trzeba dodać do adresu 
istniejącego w rozkazie aby wyliczyć adres finalny operandu. Ten tryb adresowania 
pozwala przesunąć adres zawarty w rozkazie o wartości rejestru indeksowego. 
Używając tego trybu we wszystkich rozkazach programu, można osiągnąć możliwość 
wykonania programu przy załadowaniu w dowolne miejsce pamięci.  

 

 

Adresowanie rejestrowe - stosuje się, gdy dana dla rozkazu jest przechowywana w 
rejestrze. Część adresowa rejestru zawiera wtedy jedno lub więcej pól, w których 
znajdują się identyfikatory rejestrów. Adresowanie rejestrowe jest często stosowane 
w tym samym rozkazie razem z innymi trybami adresowania dotyczącymi pamięci 
operacyjnej. Wówczas rozkaz dotyczy zarówno pamięci operacyjnej jak i rejestrów 
procesora.  
 

 

Adresowanie pośrednie rejestrowe - polega na tym, że jako miejsce pobrania 
finalnego adresu operandu rozkazu stosuje się rejestr procesora, którego 
identyfikator umieszczony jest w polu adresowym rozkazu. Przy pomocy tego trybu 
adresowania można dynamicznie określić finalny adres operandu poprzez 
odpowiednie załadowanie zawartości rejestru, w zależności od przebiegu obliczeń w 
programie.  

 

30. 

Formaty i typy rozkazów procesora, wpływ długości rozkazów procesora na 

wielkość zajmowanej pamięci przez program oraz na jego czas wykonania. 
 
Rozkazem (instrukcją maszynową) nazywamy najprostszą operację, której wykonania 
programista może zażądać od procesora. 
 
Sposób realizacji rozkazu nie jest istotny dla użytkownika systemu i z reguły nie jest znany. 
Został on po prostu wyznaczony przez projektanta mikroprocesora. 

Rozkazy tworzące listę rozkazów możemy podzielić na grupy w zależności od ich 
przeznaczenia:  
 

 

rozkazy przesłań - są najczęściej wykonywanymi rozkazami. Nie zmieniają one 
wartości informacji, natomiast przenoszą ją z miejsca na miejsce.  

 

rozkazy arytmetyczne i logiczne - służą do przetwarzania informacji, czyli w wyniku 
ich wykonania jest ona zmieniana.  

 

rozkazy sterujące - rozkazy te pozwalają zmieniać kolejność wykonywania instrukcji 
programu np. rozkazy skoku, bezwarunkowe i warunkowe wywołania programów czy 
też instrukcje pętli.  

background image

29 

 

 

pozostałe instrukcje to instrukcje charakterystyczne dla danego typu procesora np. 
sterowanie pracą koprocesora, rozkazy testujące, operacje w trybie chronionym. 

 
Długość rozkazu  

 

Im krótszy rozkaz, tym zajmuje mniej pamięci i może być szybciej wczytany.  

 

Dłuższe rozkazy pozwalają na umieszczenie większej ilości informacji lub dłuższych 
adresów.  

 

Długość rozkazu powinna być wielokrotnością jednostki transferu (najczęściej słowa), 
choć możliwe są wyjątki od tej reguły.  

 

Słowo powinno być wielokrotnością długości znaku, jeśli operacje na znakach są 
brane pod uwagę (w maszynach do obliczeń numerycznych to może nie mieć dużego 
znaczenia)  

 

31. 

Typy i hierarchia pamięci w systemie komputerowym. 

 
Hierarchia pamięci:  

 

pamięć rejestru (pamięć najbliżej procesora),  

 

pamięć kieszeniowa (podręczna lub cache)  

 

pamieć operacyjna (pamięć RAM)  

 

pamięć masowa (dyski)  

 

pamięć zewnętrzna (CD, taśmy)  

 
Pod względem trwałości długoterminowej zapisu pamięci dzielimy na:  

 

Stałe - w których zapis nie ulega zniszczeniu po wyłączeniu zasilania w systemie 
komputerowym (np. pamięci półprzewodnikowe ROM zaprogramowane przez 
producenta, lub programowane przez użytkownika UVPROM, EEPROM, pamięci 
dyskowe, itp. )  

 

Ulotne - w których zapis ulega zniszczeniu po wyłączeniu zasilania (np. pamięci 
operacyjne, podręczne, rejestrowe, itp.).  
 

Pod względem sposobu pamięci dzielimy na:  

 

Pamięć o dostępie swobodnym (ang. Random Access Memory - RAM) - do której 
dostęp odbywa się przez adres i jest równie szybki do każdej komórki pamięci (np. 
pamięć operacyjna).  

 

Pamięć o dostępie cyklicznym - do której dostęp możliwy jest okresowo w pewnych 
odstępach czasu (np. pamięć dyskowa) 

 

Pamięć o dostępie sekwencyjnym - do której dostęp do kolejnych komórek odbywa 
się w pewnej stałej kolejności (np. pamięć taśmowa). 

 

Pamięć asocjacyjna - do której dostęp odbywa się w sposób kierowany 
wewnętrznymi adresami ustalającymi kolejność przeszukiwania komórek.  

 
Pod względem trwałości krótkoterminowej zapisu pamięci dzielimy na:  
 

 

Pamięć statyczną - zrealizowaną na układach przerzutnikowych bistabilnych, w której 
zawartość istnieje dopóki włączone jest zasilanie; pamięć tą charakteryzuje duża 
szybkość działania, znaczny pobór mocy, stopień złożoności komórki i koszt.  
 

background image

30 

 

 

Pamięć dynamiczną - zrealizowana na dynamicznych układach pamiętających MOS, 
gdzie czynnikiem pamiętającym jest naładowanie pojemności bramkowe tranzystora 
MOS, zapis ten zanika po kilkudziesięciu milisekundach na skutek rozładowywania się 
tej pojemności; w porównaniu z pamięciami statycznymi charakteryzuje ją większa od 
pamięci statycznych skala opakowania (ilość powierzchni układu scalonego 
zajmowana przez jednostkę pojemności), mniejszy pobór mocy i koszt jednostki 
pojemności, ale jednocześnie mniejsza szybkość działania.  

 

 

Pamięć podręczna - Cache to mechanizm w którym ostatnio pobierane dane 
dostępne ze źródła o wysokiej latencji i niższej przepustowości są przechowywane w 
pamięci o lepszych parametrach.  

 
Pamięć cache składa się z 3 elementów:  

 

banku danych pamięci cache (pamięć danych)  

 

katalogu pamięci cache (często nazywanego TAG-RAMEM)  

 

sterownika pamięci cache  

 
Wyróżniamy 3 główne typy pamięci podręcznych:  

 

Pamięć podręczną całkowicie asocjacyjną (fully associative)  

 

Pamięć podręczną z odwzorowaniem bezpośrednim (direct mapped)  

 

Wielodrożną pamięć podręczną (set associative)  

 

32. 

Omów metody projektowania baz danych. 

Metody projektowania bazy danych:  
 

 

wstępująca – rozpoczyna się od podstawowego poziomu zawierającego atrybuty, a 
następnie poprzez analizę powiązań łączy się je w encje i związki między nimi; 
metodę tę stosuje się do projektowania prostych baz danych zawierających małą 
liczbę atrybutów;  
 

 

zstępująca – rozpoczyna się od stworzenia modeli danych zawierających niewielką 
liczbę ogólnych encji, atrybutów i związków między nimi; stosując metodę kolejnych 
uściśleń wprowadza się encje, związki i atrybuty niższych poziomów; metoda ta jest 
właściwą strategią projektowania złożonych baz danych;  

 

 

strategii mieszanej – łączy w sobie powyższe dwie metody.  

 

33. 

Omów relacyjny model danych. 

 
Model relacyjny - podstawowe założenia:  

 

Baza danych składa się z prostokątnych tablic, każda o określonej liczbie kolumn i 
dowolnej liczbie wierszy. Takie tablice sa okreslane jako relacje. Wiersz relacji jest 
nazywany krotką.  

 

Elementy krotek są atomowe (niepodzielne) i są bezpośrednio wartościami. 
Niedozwolone jest tworzenie wskaźników prowadzących do innych krotek. 

background image

31 

 

Niedozwolone jest, aby element krotki był zbiorem wartości. Jest to tzw pierwsza 
forma normalna 
(1NF). 

 

Porządek krotek nie ma znaczenia. Porządek kolumn również nie ma znaczenia.  

 

Jakiekolwiek cechy odnoszące się do reprezentacji relacji lub usprawnienia dostępu 
do relacji są ukryte przed użytkownikiem  

 

Relacje i ich kolumny posiadają nazwy. Nazwy kolumn są określane jako atrybuty.  

 

Każda relacja posiada wyróżniony atrybut lub grupę atrybutów określną jako klucz
Wartość klucza w unikalny sposób identyfikuje krotkę relacji. Jakakolwiek inna 
identyfikacja krotki (np. wewnętrzny identyfikator) jest niewidoczna dla użytkownika.  

 

Manipulacja relacjami odbywa się w sposób makroskopowy przy pomocy operatorów 
algebry relacji lub innego tego rodzaju języka. Przetwarzanie “krotka po krotce” jest 
niedozwolone.  

 

34. 

Na czym polega proces normalizacji baz danych 

 
Normalizacja bazy danych jest to  

 

proces mający na celu eliminację powtarzających się danych w relacyjnej bazie 
danych. 
 

 

Główna idea polega na trzymaniu danych w jednym miejscu, a w razie potrzeby 
linkowania do danych. Taki sposób tworzenia bazy danych zwiększa bezpieczeństwo 
danych i zmniejsza ryzyko powstania niespójności (w szczególności 
problemów anomalii). 

 

Normalizacja nie usuwa danych, tylko zmienia schemat bazy danych.  

 

Normalizacja przeprowadza bazę danych z jednego stanu spójnego (przed 
normalizacją) w inny stan spójny (po normalizacji). Jedyna różnica polega na innym 
układzie danych i relacji pomiędzy nimi, ale bez utraty danych (ewentualnie 
dodawane są nowe klucze główne) 

 
Postacie normalne: 
1sza wszystkie pola elementarne 
2ga wszystkie atrybuty w tabeli funkcyjnie zależne od klucz głównego 
3cia wszystkie atrybuty  w tabeli bezpośrednio zależne od klucz głównego 
 

35. 

Przedstawić koncepcję transakcyjności w relacyjnych bazach danych. 

 
Transakcja to ciąg operacji do wspólnego niepodzielnego wykonania. Współbieżne 
wykonywanie transakcji wymaga zachowania własności ACID (Atomicity, Consistency, 
Isolation, Durability):  
- niepodzielności: ,,wszystko-lub-nic”, transakcja nie może być wykonana częściowo;  
- integralności: po zatwierdzeniu transakcji muszą być spełnione wszystkie warunki 
poprawności nałożone na bazę danych;  
- izolacji: efekt równoległego wykonania dwu lub więcej transakcji musi być szeregowalny;  
- trwałości: po udanym zakończeniu transakcji jej efekty na stałe pozostają w bazie danych.  
 
Przykładem transakcji może być transakcja bankowa jaką jest przelew. Muszą tu zostać 
dokonane 2 operacje - zabranie pieniędzy z jednego konta oraz dopisanie ich do drugiego. W 
przypadku niepowodzenia żadna z tych operacji nie powinna być zatwierdzona, gdyż zajście 

background image

32 

 

tylko jednej powodowałoby nieprawidłowości w bazie danych (pojawienie się lub zniknięcie 
pieniędzy). 
 
Transakcja składa się zawsze z 3 etapów: 
· 

rozpoczęcia 

· 

wykonania 

· 

zamknięcia 

 
W systemach bazodanowych istotne jest, aby transakcja trwała jak najkrócej, ponieważ 
równolegle może być dokonywanych wiele transakcji i część operacji musi zostać wykonana 
w pewnej kolejności. Każdy etap transakcji jest logowany, dzięki czemu w razie awarii 
systemu (dzięki zawartości logów), można odtworzyć stan bazy danych sprzed transakcji, 
która nie została zamknięta. 
 
Część systemów baz danych umożliwia używanie punktów pośrednich (ang. save point), są to 
zapamiętane w systemie etapy transakcji, do których w razie wystąpienia błędu można się 
wycofać, bez konieczności anulowania wszystkich wykonanych działań. 
 

36. 

Techniki modelowania bazy danych, diagramy E/R i UML, narzędzia do 

modelowania. 
 
Diagram związków encji lub Diagram ERD (od ang. Entity-Relationship Diagram) – rodzaj 
graficznego przedstawienia związków pomiędzy encjami używany w projektowaniu 
systemów informacyjnych do przedstawienia konceptualnych modeli danych używanych w 
systemie. 
 
Systemy CASE, które wspierają tworzenia tych diagramów, mogą na ich podstawie 
automatycznie tworzyć bazy danych odpowiadające relacjom na diagramie. 
Diagram pokazuje logiczne związki pomiędzy różnymi encjami, związki te mają dwie cechy: 

 

Opcjonalność – która      mówi o tym, czy każda encja musi, czy też może wystąpić      
równocześnie z inną. Np. TOWAR musi zostać zakupiony przez co      najmniej 
jednego KLIENTA, ale KLIENT może być nabywcą TOWARU. W      reprezentacji 
graficznej linia przerywana oznacza opcjonalność związku,      natomiast ciągła 
wymóg związku. 

 

Krotność –      określającą ile encji wchodzi w skład związku: 

∙ 1:1      ("jeden do jeden") – encji odpowiada dokładnie jedna encja, 
∙ 1:N      ("jeden do wielu") – encji odpowiada jedna lub więcej encji, 
∙ M:N      ("wiele do wielu") – jednej lub więcej encjom odpowiada jedna      lub więcej 
encji.W przypadku związków M:N często stosuje się normalizację diagramu, która 
polega na dodaniu encji pośredniczącej i zastąpienie związku M:N dwoma związkami 
1:N z nową encją. 
 

Diagram stanów – diagram używany przy analizie i projektowaniu oprogramowania. 
Pokazuje przede wszystkim możliwe stany obiektu oraz przejścia, które powodują zmianę 
tego stanu. Można też z niego odczytać, jakie sekwencje sygnałów (danych) wejściowych 
powodują przejście systemu w dany stan, a także jakie akcje są podejmowane w odpowiedzi 
na pojawienie się określonych stanów wejściowych. Tym samym tworzony jest cykl życia 

background image

33 

 

obiektu, który może być tym istotniejszy w procesie wytwarzania oprogramowania, im 
więcej jest możliwych stanów obiektu. 
Diagram stanów to diagram UML 
 

37. 

Problemy współbieżności i wielodostępu w SZBD. 

 
Anomalie współbieżnego dostępu:  
 

 

poważne zagrożenia, nie do zaakceptowania: 

- Brudny odczyt (ang. Dirty read) - kiedy pozwalamy na odczyt danych modyfikowanych przez 
transakcje jeszcze nie zatwierdzoną  
- Utracona modyfikacja (ang. Lost update) - kiedy dwie transakcje modyfikują te same dane 
 

 

mniej poważne, tolerowane: 

- Niepowtarzalny odczyt (ang. Non-repeatable read) - gdy transakcja składa się z poleceńm 
które wielokrotnie odczytują ten sam rekord z bazy, a my odczytujemy inne dane; na 1 
komórce; niby odczytujemy jedną wartość a tak naprawdę wiele  
- Fantomy (ang. Phantoms) - wykonujemy polecenie select na bazie danych, za każdym 
razem wykonujemy coraz więcej, za każdym razem select coraz więcej wyświetla  
 

38. 

Model ISO OSI. Model TCP/IP. Krótka charakterystyka warstw modelu. 

 
   Model ISO/OSI 

 

 

 

 

Model TCP/IP 

 
 
 
 
 
 
 
 
 

  Model ISO/OSI 

Model 

OSI zbiera w logicznie ułożone 

warstwy 

funkcje potrzebne do 

zdefiniowania, nawiązania i utrzymania komunikacji między dwoma (lub więcej) 
urządzeniami niezależnie od ich producenta i architektury. Procesy zachodzące podczas 
komunikacji dzielone są na siedem warstw funkcjonalnych, które zbudowane są w oparciu o 
naturalny ciąg zdarzeń zachodzących w czasie sesji komunikacyjnej. 
 
Warstwy modelu ISO/OSI: 
 

 

fizyczna: (physical layer) 

Jest odpowiedzialna za transmisję strumienia bitów między węzłami sieci. Definiuje 
protokoły opisujące interfejsy fizyczne, to jest ich aspekty: mechaniczny, elektryczny, 
funkcjonalny i proceduralny. Do funkcji tej warstwy należą: sprzęgniecie z medium transmisji 

background image

34 

 

danych, dekodowanie sygnałów, określanie zakresu amplitudy prądu lub napięcia i 
określanie parametrów mechanicznych łączówek (kształtu, wymiarów i liczby styków) oraz 
inne kwestie związane z transmisją bitów. 
  

 

łącza danych: (data link layer) 

Zapewnia niezawodne łącze pomiędzy sąsiednimi węzłami. Nadzoruje przepływ informacji 
przez łącze i w związku z podatnością warstwy fizycznej na zakłócenia i wynikające stąd błędy 
oferuje własne mechanizmy kontroli błędów w przesyłanych ramkach lub pakietach (CRC - 
Cyclic Redundancy Check). 
  

 

sieciowa: (network layer) 

Dostarcza środków do ustanawiania, utrzymania i rozłączania połączeń sieciowych miedzy 
systemami otwartymi, w których rezydują komunikujące się aplikacje, i odpowiada, za 
obsługę błędów komunikacji. Ponadto warstwa sieciowa jest odpowiedzialna za funkcje 
routingu, który wyznacza optymalną pod względem liczby połączeń drogę przesyłania 
pakietu przez sieć. 
  

 

transportowa: (transport layer) 

Zapewnia przezroczysty transfer danych między stacjami sesyjnymi, odciąża je od 
zajmowania się problemami niezawodnego i efektywnego pod względem kosztów transferu 
danych. Warstwa ta zapewnia usługi połączeniowe. Wszystkie protokoły w warstwie 
transportowej są typu “od końca do końca”(end-to-end). Oznacza to, że działają one tylko 
między końcowymi systemami otwartymi. 
  

 

sesji: (session layer) 

Umożliwia aplikacjom organizację dialogu oraz wymianę danych między nimi. Do 
najważniejszych usług warstwy sesji należą: sterowanie wymianą danych, ustalanie punktów 
synchronizacji danych (dla celów retransmisji w wypadku przemijających przekłamań na 
łączach) oraz umożliwienie odzyskania danych (utraconych w wyniku przerwy w łączności) 
przez ponowne ich przesłanie. 
  
 
 
 

 

prezentacji: (presentation layer) 

Zapewnia możliwość reprezentowania informacji, którą się posługują stacje aplikacyjne 
podczas komunikacji Zapewnia tłumaczenie danych, definiowanie ich formatu oraz 
odpowiednią składnię. 
  

 

aplikacji: (application layer) 

Dostarcza procesom aplikacyjnym metod dostępu do środowiska OSI, pełni rolę okna między 
współdziałającymi procesami aplikacyjnymi. 
 

  Model TCP/IP 

Podstawowym założeniem modelu TCP/IP jest podział całego zagadnienia komunikacji 
sieciowej na szereg współpracujących ze sobą warstw. Każda z nich może być tworzona przez 
programistów zupełnie niezależnie, jeżeli narzucimy pewne protokoły według których 

background image

35 

 

wymieniają się one informacjami. Założenia modelu TCP/IP są pod względem organizacji 
warstw zbliżone do modelu OSI. Jednak liczba warstw jest mniejsza i bardziej odzwierciedla 
prawdziwą strukturę Internetu. Model TCP/IP składa się z czterech warstw. 
 
 
Warstwy modelu TCP/IP: 
 

 

aplikacji 

to najwyższy poziom, w którym pracują użyteczne dla człowieka aplikacje takie jak np. 
serwer WWW czy przeglądarka internetowa. Obejmuje ona zestaw gotowych protokołów, 
które aplikacje wykorzystują do przesyłania różnego typu informacji w sieci. 
 

 

transportowa 

gwarantuje pewność przesyłania danych oraz kieruje właściwe informacje do odpowiednich 
aplikacji. Opiera się to na wykorzystaniu portów określonych dla każdego połączenia. W 
jednym komputerze może istnieć wiele aplikacji wymieniających dane z tym samym 
komputerem w sieci i nie nastąpi wymieszanie się przesyłanych przez nie danych. To właśnie 
ta warstwa nawiązuje i zrywa połączenia między komputerami oraz zapewnia pewność 
transmisji. 
 

 

Internetu 

to sedno działania Internetu. W tej warstwie przetwarzane są datagramy posiadające adresy 
IP. Ustalana jest odpowiednia droga do docelowego komputera w sieci. Niektóre urządzenia 
sieciowe posiadają tę warstwę jako najwyższą. Są to routery, które zajmują się kierowaniem 
ruchu w Internecie, bo znają topologię sieci. Proces odnajdywania przez routery właściwej 
drogi określa się jako trasowanie. 
 

 

dostępu do sieci 

jest najniższą warstwą i to ona zajmuje się przekazywaniem danych przez fizyczne połączenia 
między urządzeniami sieciowymi. Najczęściej są to karty sieciowe lub modemy. Dodatkowo 
warstwa ta jest czasami wyposażona w protokoły do dynamicznego określania adresów IP. 
 

39. 

Metody dostępu do medium. Protokół CSMA/CD. 

 
Transmisja  danych  pomiędzy  dwiema  stacjami  w  sieci  poprzedza  realizacja  dostępu  do 
medium transmisyjnego. 
 
Przykładami  metod  wyłączania  pojedynczego  nadajnika  do  medium  transmisyjnego  sieci 
lokalnej są: 
1.  metody  dostępu  do  magistrali  przez  badanie  obecności  nośnika  na  linii  transmisyjnej              
(CSMA/CD) 
2.  metody  dostępu  do  magistrali  za  pomocą  wędrującego  żetonu/znacznika  (token  passing 
bus) 
3. metoda dostępu do pierścienia za pomocą wędrującego żetonu (token passing bus) 
CSMA / CD 
    Carrier Sense Multiple Access with Collision Detection 
    określa prawa dostępu komputera do medium transmisyjnego 

background image

36 

 

    
Carrier  Sense  oznacza,  że  zanim  komputer  rozpocznie  nadawanie  musi  sprawdzić  czy  iny 
komputer nie nadaje.  
Multiple  Access  oznacza,  że  komputer  po  zakońćzeniu  “nadawania”  może  natychmiast 
rozpocząć nową sesję nadawania - uzyskać następny dostęp do medium.  
Collision  Detection  odnosi  się  do  zdolności  interfejsu  wykrywania  kolizji  sygnałów 
elektrycznych na kablu oraz odpowiedniego reagowania na to zdarzenie i może się zdarzyć, 
że dwie stacje równocześnie zaczną nadawać (kolizja) 
 
1. Karta sieciowa (węzeł) sprawdza stan linii i podejmuje transmisję tylko wtedy wtedy, gdy 
inna stacja nie nadaje. 
2. Przypadkowe rozpoczęcie nadawania przez więcej niż jeden z węzłów jest sygnalizowanie 
przez układ detekcji kolizji. 
3.  Nadawanie  zostaje  przerwana  i  po  losowo  wybranym  czasie  opóźnienia  następuje 
powtórzenie próby włączenia się do linii. 
4.  W  schemacie  wykorzystującym  CSMA/CD  każde  niepowodzenie  transmisji  powoduje 
obniżenie efektywności systemu przekazywania danych. 
5. CSMA/CD stosowany jest dla różnych mediów transmisyjnych z szybkością od 1 Mb/s do 
100 Mb/s. 
 

40. 

Adresowanie IP, podsieci i maski podsieci zmiennej długości. 
 
Maska sieci składa się podobnie jak adres IP z 4 bajtów, używana jest  do wydzielenia 
części adresu odpowiadającej za identyfikację sieci i  części odpowiadającej za 
identyfikację komputera z adresu IP. 
 
Adres sieci tworzymy przepisując niezmienione wszystkie bity adresu IP,  dla których 
odpowiednie bity maski mają wartość jeden. Resztę  uzupełniamy zerami. Adres 
broadcast jest adresem rozgłoszeniowym sieci.  Używa się go do jednoczesnego 
zaadresowania wszystkich komputerów w  danej sieci (jest przetwarzany przez wszystkie 
komputery w sieci).  Tworzymy go podobnie do adresu sieci, jednak dopełniamy 
jedynkami  zamiast zerami. 
 
 

Typ adresu 

Domyślna wartość maski 

Klasa A 

255.0.0.0 

Klasa B 

255.255.0.0 

Klasa C i Klasa B z podsiecią 

255.255.255.0 

 
Podsieci poszerzają pole adresu sieci poza granicę zdefiniowana przez  schemat dla 
typów A, B, C. Zapewnia to możliwość hierarchizacji  poszczególnych podsieci wewnątrz 
sieci. 
 

Typ 

Część opisująca sieci 

Część opisująca hosty 

1-126 

0.0.1-255.255.254 

128.1-191.254 

0.1-255.254 

192.0.1-223.255.254 

1-254 

 

background image

37 

 

 

41. 

Routing w sieciach komputerowych, metody routingu, porównanie. 
 
Metody Routingu: 
 

 

Rozproszony - gdy w dowolnym momencie jedna stacja posiada uprawnienie do 
nadawania, a uprawnienie przekazywane jest miedzy kolejnymi stacjami w sieci. 
Wykorzystywany jest w metodach z przekazywaniem znacznika. 

 

 

Scentralizowany - gdy jedna stacja kontroluje działanie sieci i przyznaje innym 
stacjom prawo do nadawania (przepytywanie - poling, komutacja łączy) 

 

 

Statyczne - protokół ten jest stosowany w małych sieciach lokalnych polega na tym że 
jest ręcznie ustawiany przez administratora sieci 

 

 

Dynamiczne - stosowane są w większych sieciach. Protokół taki sam modyfikuje trasę. 

 

42. 

Metody dostępu do sieci w technologii bezprzewodowej WiFi. 
 
Metody dostępu do łącza w sieciach radiowych. 
 
W sieciach bezprzewodowych bez przeszkód stosuje się protokoły dostępu sterowanego  
jak np.  

 

Odpytywanie (gdy stacja centralna posiada łączność z każdą ze stacji pozostałych)  

 

przekazywanie żetonu (w pierścieniu sieci Token Ring krąży mała ramka zwana 
token „żeton”) — gdy wszystkie stacje sieci posiadają wzajemną łączność.  

 

Wykorzystuje się także wiele protokołów rywalizacyjnych dostępu do łącza. 
Nowsze z nich wyposażono w odpowiednie mechanizmy eliminacji kolizji 
wynikających ze zjawisk ukrytej bądź odkrytej stacji. 

 

43. 

Podstawowe i złożone topologie sieci komputerowych. 

 
Topologie fizyczne:  

- Topologia liniowa (ang. Line) – wszystkie elementy sieci oprócz granicznych połączone 

są z dwoma sąsiadującymi  

- Topologia magistrali (szyny, liniowa) (ang. Bus) – wszystkie elementy sieci podłączone 

do jednej magistrali  

- Topologia pierścienia (ang. Ring) – poszczególne elementy są połączone pomiędzy sobą 

odcinkami kabla tworząc zamknięty pierścień  

- Topologia podwójnego pierścienia – poszczególne elementy są połączone pomiędzy 

sobą odcinkami tworząc dwa zamknięte pierścienie  

background image

38 

 

- Topologia gwiazdy (ang. Star) – komputery są podłączone do jednego punktu 

centralnego, koncentratora (koncentrator tworzy fizyczną topologię gwiazdy, ale 
logiczną magistralę) lub przełącznika  

- Topologia gwiazdy rozszerzonej – posiada punkt centralny (podobnie do topologii 

gwiazdy) i punkty poboczne (jedna z częstszych topologii fizycznych Ethernetu)  

- Topologia hierarchiczna – zwana także topologią drzewa, jest kombinacją topologii 

gwiazdy i magistrali, budowa podobna do drzewa binarnego  

- Topologia siatki – oprócz koniecznych połączeń sieć zawiera połączenia nadmiarowe; 

rozwiązanie często stosowane w sieciach, w których jest wymagana wysoka 
bezawaryjność  

 

44. 

Charakterystyka systemów rozproszonych - zalety i wady. 

 
System rozproszony (ang. distributed system)  

 

to zbiór niezależnych urządzeń technicznych połączonych w jedną, spójną 
logicznie całość.  

 

Zwykle łączonymi urządzeniami są komputery, rzadziej – systemy automatyki.  

 

Połączenie najczęściej realizowane jest przez sieć komputerową, jednak można 
wykorzystać również inne – prostsze – magistrale komunikacyjne.  

 

Urządzenia są wyposażone w oprogramowanie umożliwiające współdzielenie 
zasobów systemowych.  

 

Jedną z podstawowych cech systemu rozproszonego jest jego przezroczystość ( 
ang. transparency), tj. tworzenie na użytkownikach systemu rozproszonego 
wrażenie pojedynczego i zintegrowanego systemu.  

 
ZALETY 
- Dzielenie zasobów (dane, urządzenia sprzętowe, jak np. drukarki, dyski).  
- Przyśpieszenie obliczeń (dzielenie obciążenia).  
- Niezawodność (awaria jednego urządzenia nie powinna uniemożliwiać działania 

systemu, lecz co najwyżej pogorszyć jego wydajność).  

- Komunikacja (np. poczta elektroniczna).  
- Ekonomiczność (system rozproszony może być tańszy niż odpowiadający mu mocą 

obliczeniową system scentralizowany)  

- Wewnętrzne rozproszenie (niektóre aplikacje są z natury rozproszone i wymagają 

rozproszonych komputerów).  

- Stopniowy wzrost (można stopniowo zwiększać moc obliczeniową systemu; 

skalowalność to zdolność systemu do adaptowania się do wzrastających 
zapotrzebowań).  

 
WADY 
- Oprogramowanie (zdecydowanie bardziej złożone; wymaga opracowania wspólnych 

standardów).  

- Sieć (może ulec awarii lub zostać przeciążona).  
- Bezpieczeństwo (komputer podłączony do sieci jest mniej bezpieczny).  

background image

39 

 

 

45. 

Modele programowania równoległego. 

 
Modele programowania równoległego:  
 

  Pamięć współdzielona (ang. Shared memory )  

 

jest specjalnie utworzonym segmentem wirtualnej przestrzeni adresowej, 
do którego dostęp może mieć wiele procesów.  

 

Jest to najszybszy sposób komunikacji pomiędzy procesami.  

 

Podstawowy schemat korzystania z pamięci współdzielonej wygląda 
następująco:  
- jeden z procesów tworzy segment pamięci współdzielonej, dowiązuje go 
powodując jego odwzorowanie w bieżący obszar danych procesu, 
opcjonalnie zapisuje w stworzonym segmencie dane.  
- Następnie, w zależności od praw dostępu inne procesy mogą 
odczytywać i/lub zapisywać wartości w pamięci współdzielonej. Każdy 
proces uzyskuje dostęp do pamięci współdzielonej względem miejsca 
wyznaczonego przez jego adres dowiązania, stąd każdy proces korzystając 
z tych samych danych używa innego adresu dowiązania.  
- W przypadku współbieżnie działających procesów konieczne jest 
najczęściej synchronizowanie dostępu np. za pomocą semaforów. –  
- Kończąc korzystanie z segmentu pamięci proces może ten segment 
odwiązać, czyli usunąć jego dowiązanie.  
- Kiedy wszystkie procesy zakończą korzystanie z segmentu pamięci 
współdzielonej, za jego usunięcie najczęściej odpowiedzialny jest proces, 
który segment utworzył. 

 

  Wątki - część programu wykonywana współbieżnie w obrębie jednego procesu; 

w jednym procesie może istnieć wiele wątków. 

Różnica między zwykłym procesem a wątkiem polega na współdzieleniu przez wszystkie 

wątki działające w danym procesie przestrzeni adresowej oraz wszystkich innych 
struktur systemowych (np. listy otwartych plików, gniazd itp.) – z kolei procesy 
posiadają niezależne zasoby. 

Ta cecha ma dwie ważne konsekwencje: 

1.  Wątki wymagają mniej zasobów do działania i też mniejszy jest czas ich tworzenia. 
2.  Dzięki współdzieleniu przestrzeni adresowej (pamięci) wątki jednego zadania mogą 

się między sobą komunikować w bardzo łatwy sposób, niewymagający pomocy ze 
strony systemu operacyjnego. Przekazanie dowolnie dużej ilości danych wymaga 
przesłania jedynie wskaźnika, zaś odczyt (a niekiedy zapis) danych o rozmiarze nie 
większym od słowa maszynowego nie wymaga synchronizacji (procesor gwarantuje 
atomowość takiej operacji). 
 

background image

40 

 

 

Przekazywanie komunikatów (ang. Message Passing )- w dziedzinie informatyki 
jest formą komunikacji wykorzystywaną w przetwarzaniu równoległym, 
programowaniu obiektowym i komunikacji międzyprocesowej. W tym modelu, 
procesy lub obiekty mogą wysyłać i odbierać wiadomości (zawierające zero lub 
więcej bajtów, złożone struktury danych, a nawet części kodu) do innych 
procesów. Czekając na wiadomości, procesy mogą się również synchronizować. 
  

 

Równoległe dane (ang. Data Parallel )- jest formą zrównoleglenia przetwarzania 
na wielu procesorach w równoległych środowiskach obliczeniowych. 
Równoległość danych skupia się na rozpowszechnianiu danych między różnymi 
równoległymi węzłami obliczeniowymi. 

 

 

Hybrydowy (ang. Hybrid )- Połączenie różnych modeli programowania 
równoległego  

 
Model programowania równoległego stanowi ujęcie abstrakcyjne zasłaniające 

architekturę sprzętu i pamięci.  

Modele te nie są przypisane do żadnych konkretnych architektur i w zasadzie mogą być 

realizowane na dowolnym sprzęcie.  

 

46. 

Miary efektywności obliczeń równoległych. 

 
Miary wydajności obliczeń równoległych: 
- przyspieszenie obliczeń: S(p) = Ts / T||(p) 
Ts – czas rozwiązania zadania najlepszym algorytmem sekwencyjnym na pojedynczym 

procesorze 

T||(p) – czas rozwiązania zadania rozważanym algorytmem równoległym na 

procesorach 

- (w praktyce często zamiast Ts używa się T||(1) 
- efektywność zrównoleglenia: E(p) = S(p) / p 
- ideałem jest uzyskanie liniowego przyspieszenia i 100% efektywności (jak musi się 

zachowywać narzut obliczeń, 

T||narz(p) = T||(p) – T||(1)/p , aby uzyskać przyspieszenie liniowe?) 
 

47. 

Środowiska programowania równoległego. 

 

OpenMP (ang. Open Multi-Processing) – wieloplatformowy interfejs programowania 

aplikacji (API) umożliwiający tworzenie programów komputerowych dla systemów 
wieloprocesorowych z pamięcią dzieloną. Może być wykorzystywany w językach 
programowania C, C++ i Fortran na wielu architekturach, m.in. Unix i Microsoft 
Windows. Składa się ze zbioru dyrektyw kompilatora, bibliotek oraz zmiennych 
środowiskowych mających wpływ na sposób wykonywania się programu. Dzięki temu, 
że standard OpenMP został uzgodniony przez głównych producentów sprzętu i 
oprogramowania komputerowego, charakteryzuje się on przenośnością, 
skalowalnością, elastycznością i prostotą użycia. Dlatego może być stosowany do 
tworzenia aplikacji równoległych dla różnych platform, od komputerów klasy PC po 

background image

41 

 

superkomputery. OpenMP można stosować do tworzenia aplikacji równoległych na 
klastrach komputerów wieloprocesorowych.).  

 

 

RPC ( Remote Procedure Call )  

1. mechanizm RPC został opracowany przez firmę Sun; obecnie znormalizowany przez 

ISO/IEC  

2. nie przystosowany do programowania obiektowego  
3. powszechnie stosowany w systemach Unix  
4. wspólny sposób reprezentowania podstawowych typów danych eXternal Data 

Representation  

 
OGRANICZENIA  
1. zdalna procedura przyjmuje tylko jeden argument może on być strukturą  
2. wszelkie zmiany dokonywane przez procedurę w obrębie jej argumentu pozostają 

lokalne i nie są przekazywane z powrotem do klienta  

3. do klienta przekazywany jest wynik procedury jako dowolny typ XDR  
 

 

RMI ( Remote Method Invocation )  

1. jest częścią języka Java  
2. umożliwia wywoływanie metod obiektów istniejących w maszynie wirtualnej Javy 

przez obiekty znajdujące się na innej maszynie wirtualnej  

3. obiekty zdalne jak i lokalne identyfikowane przez referencje  
 
OGRANICZENIA  
1. problemy rozproszonego bezpieczeństwa danych, synchronizacji, odśmiecania 

pamięci  

2. możliwe jest tylko wykonywanie metod zdalnego obiektu a nie dostęp do jego pól  
3. metody RMI muszą być zdeklarowane w interfejsie rozszerzającym interfejs 

java.rmi.Remote  

 

 

CORBA ( Common Object Request Broker Architecture )  

1. standard komunikacji aplikacji w środowisku rozproszonym realizowanej za 

pośrednictwem wspólnego brokera ORB  

2. opracowany przez Object Managment Group  
 
Interfejsy Corby  
1. moduły programowe komunikują się z innymi za pośrednictwem własnych brokerów  
2. wszyscy brokerzy komunikują się ze sobą w jednakowy sposób  
3. moduł poznaje charakterystykę interfejsu innego modułu  
4. umożliwia komunikowanie się modułów w różnych językach programowania  
5. umożliwia komunikowanie się modułów działających w maszynach o rożnych 

architekturach  

6. w tym celu CORBA wprowadza własny język do definicji interfejsów IDL  
 

48. 

Prawo Amdahla. 

 

background image

42 

 

Przy liczbie procesorów zmierzającej do nieskończoności czas rozwiązania określonego 

zadania nie może zmaleć poniżej czasu wykonania części sekwencyjnej programu, 
przyspieszenie nie może przekroczyć wartości wyznaczonej przez udział części 
sekwencyjnej, a efektywność zrównoleglenia zmierza do zera. 

 
PRAWO AMDAHLA 

Sp=T1/Tp=1/(F+(1-F)/p) 
T - czas wykonania algorytmu 
F - udział części nierównoległej 
przy użyciu dowolnej liczby procesorów, obliczeń nie da się przyśpieszyć bardziej, niż 
odwrotność części sekwencyjnej w programie 

 

49. 

Obrazy rastrowe i wektorowe: budowa, właściwości, różnice. 

 
Grafika rastrowa  

 

prezentacja obrazu za pomocą pionowo-poziomej siatki odpowiednio 
kolorowanych pikseli na monitorze komputera, drukarce lub innym urządzeniu 
wyjściowym.  

 

Bez zastosowania kompresji kolor każdego piksela jest definiowany pojedynczo.  

 

Obrazki z głębią kolorów RGB często składają się z kolorowych kwadratów 
zdefiniowanych przez trzy bajty – jeden bajt (czyli 8 bitów) na kolor czerwony, 
jeden na zielony i jeden na kolor niebieski.  

 

Mniej kolorowe obrazki potrzebują mniej informacji na piksel, np. obrazek w 
kolorach czarnym i białym wymaga tylko jednego bitu na każdy piksel (bitmapa).  

 

Grafika rastrowa różni się od wektorowej tym, że grafika wektorowa pokazuje 
obraz używając obiektów geometrycznych, takich jakkrzywe czy wielokąty.  

 

Pixmapę charakteryzują dwie podstawowe liczby - wysokość i szerokość pixmapy 
liczone w pikselach.  

 

Wielkość obrazka rastrowego nie może zostać zwiększona bez zmniejszenia jego 
ostrości. Jest to przeciwne grafice wektorowej, którą łatwo można skalować, 
dostosowując jej wielkość do urządzenia, na którym jest wyświetlany obraz.  

 

Grafika rastrowa jest bardziej użyteczna od wektorowej do zapisywania zdjęć i 
realistycznych obrazów, podczas gdy grafika wektorowa jest częściej używana do 
obrazów tworzonych z figur geometrycznych oraz prezentacji tekstu (w tym tabel 
i wzorów).  

 
Grafika wektorowa (obiektowa)  

 

jeden z dwóch podstawowych rodzajów grafiki komputerowej, w której obraz 
opisany jest za pomocą figur geometrycznych (w przypadku grafiki 
dwuwymiarowej) lub brył geometrycznych (w przypadku grafiki trójwymiarowej), 
umiejscowionych w matematycznie zdefiniowanym układzie współrzędnych, 
odpowiednio dwu- lub trójwymiarowym. 

 

W przeciwieństwie do grafiki rastrowej grafika wektorowa jest grafiką w pełni 
skalowalną, co oznacza, iż obrazy wektorowe można nieograniczenie powiększać 
oraz zmieniać ich proporcje bez uszczerbku na jakości.  

background image

43 

 

 

W przypadku grafiki rastrowej obrót obrazu może zniekształcić go powodując 
utratę jakości (w szczególności, jeśli nie jest to obrót o wielokrotność kąta 
prostego).  

 

Typowe edytory grafiki wektorowej pozwalają oprócz zmiany parametrów i 
atrybutów prymitywów także na przekształcenia na obiektach, np.: obrót, 
przesunięcie, odbicie lustrzane, rozciąganie, pochylanie, czy zmiana kolejności 
obiektów na osi głębokości. 

 

Do zalet należą przede wszystkim:  

- skalowalność, prostota opisu, a przez możliwość modyfikacji poprzez 
zmianę parametrów obrazu,  
- mniejszy rozmiar w przypadku zastosowań niefotorealistycznych 
(schematy techniczne, loga, flagi i herby, wykresy itp.),  
- opis przestrzeni trójwymiarowych,  
- możliwość użycia ploterów zgodnie z metodą ich pracy,  
- bardzo dobre możliwości konwersji do grafiki rastrowej.  

 

Wśród głównych wad wymieniane są:  
- ogromna złożoność pamięciowa dla obrazów fotorealistycznych,  
- przy skomplikowanych obrazach rastrowych nieopłacalność obliczeniowa 
konwersji (poprzez wektoryzację) do formy wektorowej.  

 

Grafika wektorowa sprawdza się najlepiej, gdy zachodzi potrzeba 
stworzenia grafiki, czyli mającego stosunkowo małą ilość szczegółów, nie 
zaś zachowaniu fotorealizmu obecnego w obrazach. Odpowiednimi 
przykładami użycia grafiki wektorowej są:  

- schematy naukowe i techniczne  
- mapy i plany,  
- logo, herby, flagi, godła,  
- różnego typu znaki, np. drogowe,  
- część graficznej twórczości artystycznej (np. komiksy),  
 

50. 

Grafika rastrowa - prymitywy graficzne 2D: kreślenie odcinków, okręgów, 

wypełnianie obszarów. 

 

51. 

Algorytmy poprawy jakości obrazu rastrowego. 

 

52. 

Metody skalowania obrazów rastrowych. 

 

53. 

Modele barw stosowane w grafice komputerowej (RGB, CMY, HSV, LAB). 

 
RGB  

 

jeden z modeli przestrzeni barw, opisywanej współrzędnymi RGB. Jego nazwa 
powstała ze złożenia pierwszych liter angielskich nazw barw: R – red 
(czerwonej), G – green (zielonej) i B – blue(niebieskiej), z których model ten się 
składa.  

 

Jest to model wynikający z właściwości odbiorczych ludzkiego oka, w którym 

wrażenie widzenia dowolnej barwy można wywołać przez zmieszanie w ustalonych 
proporcjach trzech wiązek światła o barwie czerwonej, zielonej i niebieskiej (zob. 
promieniowanie elektromagnetyczne).  

background image

44 

 

 

Z połączenia barw RGB w dowolnych kombinacjach ilościowych można 

otrzymać szeroki zakres barw pochodnych, np. z połączenia barwy zielonej i 
czerwonej powstaje barwa żółta.  

 

Do przestrzeni RGB ma zastosowanie synteza addytywna, w której wartości 

najniższe oznaczają barwę czarną, najwyższe zaś białą.  

 

Model RGB jest jednak modelem teoretycznym a jego odwzorowanie zależy 

od urządzenia (ang. device dependent), co oznacza, że w każdym urządzeniu każda 
ze składowych RGB może posiadać nieco inną charakterystykę widmową, a co za 
tym idzie, każde z urządzeń może posiadać własny zakres barw możliwych do 
uzyskania.  

 
CMYK  

 

zestaw czterech podstawowych kolorów farb drukarskich stosowanych 
powszechnie w druku wielobarwnym w poligrafii i metodach pokrewnych 
(atramenty, tonery i inne materiały barwiące w drukarkach komputerowych, 
kserokopiarkach itp.).  

 

Na zestaw tych kolorów mówi się również barwy procesowe[1] lub kolory 
triadowe (kolor i barwa w jęz. polskim to synonimy).  

 

CMYK to jednocześnie jedna z przestrzeni barw w pracy z grafiką komputerową.  

 

Skrót CMYK powstał jako złożenie pierwszych liter angielskich nazw kolorów.  

- Cyjan – odcień niebieskiego, ale trochę bledszy i bardziej spłowiały, można go określić 

jako szarobłękitny lub sinoniebieski. Najbardziej podobne kolory to błękit, szafir i 
turkus. Nazywanie koloru cyjanowego kolorem "zielononiebieskim" jest błędem 
wynikającym z niezrozumienia różnic pomiędzy addytywną i subtraktywną metodą 
mieszania barw. W syntezie addytywnej kolor uzyskany w wyniku połączenia zielonego 
i niebieskiego.  

- Magenta – w syntezie addytywnej kolor uzyskany w wyniku połączenia czerwieni i 

niebieskiego. Najbardziej podobne kolory to fuksja, karmazyn i amarant.  

- Yellow – kolor bardzo podobny do żółtego, jednak trochę bledszy od typowej nasyconej 

żółcieni. W syntezie addytywnej kolor uzyskany w wyniku połączenia czerwieni i 
zielonego.  

- Black – kolor czarny, jednak o niezbyt głębokiej czerni.  
 
 
 
HSV (ang. Hue Saturation Value)  

 

model opisu przestrzeni barw zaproponowany w 1978 roku przez Alveya Raya 
Smitha.  

 

Model HSV nawiązuje do sposobu, w jakim widzi ludzki narząd wzroku, gdzie 
wszystkie barwy postrzegane są jako światło pochodzące z oświetlenia.  

 

Według tego modelu wszelkie barwy wywodzą się ze światła białego, gdzie część 
widma zostaje wchłonięta a część odbita od oświetlanych przedmiotów.  

 

Symbole w nazwie modelu to pierwsze litery nazw angielskich dla składowych 
opisu barwy: H – odcień światła , S – nasycenie koloru (ang. Saturation) jako 
promień podstawy oraz składowa V – (ang. Value) równoważna nazwie B – moc 
światła białego (ang. Brightness) jako wysokość stożka.  
 

background image

45 

 

 

54. 

Cykl życia oprogramowania. 

1. Planowanie systemu (w tym specyfikacja wymagań) 
2. Analiza systemu (w tym Analiza wymagań i studium wykonalności) 
3. Projekt systemu (poszczególnych struktur itp.) 
4. Implementacja (wytworzenie kodu) 
5. Testowanie (poszczególnych elementów systemu oraz elementów połączonych w 

całość) 

6. Wdrożenie i pielęgnacja powstałego systemu. 

55. 

Model kaskadowy i spiralny, charakterystyka i porównanie. 

 

Kaskadowy: 

 

Nie można przejść do następnej fazy przed zakończeniem poprzedniej 

 

Model ten posiada bardzo nieelastyczny podział na kolejne fazy 

 

Iteracje są bardzo kosztowne - powtarzamy wiele czynności 

 
Spiralny: 
Każda pętla spirali podzielona jest na cztery sektory: 

 

Ustalanie celów - Definiowanie konkretnych celów wymaganych w tej fazie 
przedsięwzięcia. Identyfikacja ograniczeń i zagrożeń. Ustalanie planów realizacji. 

 

Rozpoznanie i redukcja zagrożeń - Przeprowadzenie szczegółowej analizy rozpoznanych 
zagrożeń, ich źródeł i sposobów zapobiegania. Podejmuje się odpowiednie kroki 
zapobiegawcze. 

 

Tworzenie i zatwierdzanie - Tworzenia oprogramowania w oparciu o najbardziej 
odpowiedni model, wybrany na podstawie oceny zagrożeń. 

 

Ocena i planowanie - Recenzja postępu prac i planowanie kolejnej fazy przedsięwzięcia 
bądź zakończenie projektu. 
 

56. 

Metryki oprogramowania, przykłady i obszary zastosowań. 

 

Metryka oprogramowania – miara pewnej własności oprogramowania lub jego specyfikacji. 
Termin ten nie ma precyzyjnej definicji i może oznaczać właściwie dowolną wartość liczbową 
charakteryzującą oprogramowanie. 

Metryki statyczne - pozwalają na ocenę jakości kodu źródłowego i łączą się ściśle z analizą 
statyczną, dziedziną inżynierii oprogramowania zajmującą się badaniem struktury kodu 
źródłowego. Metryki te najbardziej przydatne są dla samych programistów i innych osób 
bezpośrednio zaangażowanych w proces powstawania oprogramowania. Pozwalają na 
bieżące śledzenie jakości kodu i zwrócenie uwagi na miejsca, które wymagają uproszczenia 
bądź szczególnie uważnego testowania. 

 

background image

46 

 

57. 

Specyfikacja wymagań funkcjonalnych i niefunkcjonalnych, rola UML w procesie 

specyfikowania wymagań. 

 
Wymagania funkcjonalne – opisuja funkcje (czynności, operacje, usługi) wykonywane 

przez system. Specyfikacja wymagań funkcjonalnych powinna być kompletna i spójna 
(bez sprzecznosci). 

 
Wymagania niefunkcjonalne – opisuja ograniczenia, przy zachowaniu których system 

powinien realizowac swe funkcje. Wynikaja z: potrzeb uzytkownika,ograniczen 
budzetowych, strategii firmy,koniecznosci współpracy z innymi systemami (sprzetu lub 
programowania), czynników zewnetrznych jak przepisy o bezpieczenstwie, ustawy 
chroniace prywatnosc, itd. 

   
Istotną rolę w specyfikowaniu wymagań pełnią diagramy przypadków użycia, 

dokumentacja scenariuszy przypadków użycia – a także modele procesów biznesowych 
i analityczne. 

 
Specyfikacja w notacji UML powinna zawierac: 
- diagramy klas modelu dziedziny, 
- diagramy czynnosci do algorytmów metod obiektów, 
- diagramy maszyny stanowej, opisujace zachowanie obiektów stanowych, 
- inne diagramy, jesli sa konieczne. 
 

58. 

Model logiczny a model fizyczny systemu – rola w procesie tworzenia oprogramowania. 

 
Model fizyczny to propozycja konkretnej realizacji (implementacji) modelu logicznego, 

czyli projekt techniczny oprogramowania i rozwiązań sprzętowych.  

 
Model logiczny to zbiór informacji określający zachowanie się systemu.  

 

Podstawowe elementy modelu logicznego  
- lista funkcji systemu  
- określenie obiektów zewnętrznych systemu  
- określenie współzależności między funkcjami systemu  
 
Ten etap prac można określić mianem "inwentaryzacji stanu obecnego". Celem prac w 

tej fazie projektowania jest przede wszystkim stworzenie możliwości:  

- wyodrębnienia przepływów ze zbyt dużym zagregowaniem danych (optymalizacja 

wielkości przepływów danych) oraz przepływów rozdrobnionych;  

- określenia niezbędnych porcji przesyłanych danych do realizacji poszczególnych funkcji  
- połączenia identycznych funkcji wykonywanych w różnych miejscach i przez różne 

osoby  

- wyeliminowania zbędnych przepływów i zasobów danych  
 
Informacje o takim charakterze stanowią zarówno podstawę do prac analitycznych i 

projektowych nowego systemu informatycznego, a także pozwalają na określenie 

background image

47 

 

sposobów wdrożenia nowego systemu, czyli metody przejścia z jednego (aktualnego) 
systemu zarządzania firmą do systemu nowego. 

 

59. 

UML w analizie i projektowaniu – omówienie podstawowych cech notacji. 

 
Unified Modeling Language (UML)  

  język formalny wykorzystywany do modelowania różnego rodzaju systemów.  

  Służy do modelowania dziedziny problemu (opisywania-modelowania fragmentu 

istniejącej rzeczywistości – np. modelowanie tego, czym zajmuje się jakiś dział w 
firmie)  

  w przypadku stosowania go do analizy oraz do modelowania rzeczywistości, 

która ma dopiero powstać – tworzy się w nim głównie modele systemów 
informatycznych.  

  UML jest głównie używany wraz z jego reprezentacją graficzną – jego elementom 

przypisane są symbole, które wiązane są ze sobą na diagramach. 

 

UML jest notacją pośrednią, pomostem pomiędzy ludzkim rozumieniem 
struktury i działania programów, a kodem programów.  

 

Taka notacja jest niezbędna do specyfikacji, konstrukcji, wizualizacji i 
dokumentacji wytworów związanych z systemami intensywnie wykorzystującymi 
oprogramowanie.  

 

Diagramy UML ustanawiają bezpośrednie powiązanie elementów modelu 
pojęciowego z wykonywalnymi programami.  

 

Jednocześnie umożliwiają one objęcie zagadnień związanych ze skalą problemu, 
towarzyszących złożonym systemom o krytycznej misji. 

 

60. 

Diagramy stanu oraz diagramy sekwencji, porównanie obszarów stosowania. 

 
Diagram stanów – diagram używany przy analizie i projektowaniu oprogramowania. 

Pokazuje przede wszystkim możliwe stany obiektu oraz przejścia, które powodują 
zmianę tego stanu. Można też z niego odczytać, jakie sekwencje sygnałów (danych) 
wejściowych powodują przejście systemu w dany stan, a także jakie akcje są 
podejmowane w odpowiedzi na pojawienie się określonych stanów wejściowych 
 
Diagram sekwencji - służy do prezentowania interakcji pomiędzy obiektami wraz z 
uwzględnieniem w czasie komunikatów, jakie są przesyłane pomiędzy nimi. Na 
diagramie sekwencji obiekty ułożone są wzdłuż osi X, a komunikaty przesyłane są 
wzdłuż osi Y. Zasadniczym zastosowaniem diagramów sekwencji jest modelowanie 
zachowania systemu w kontekście scenariuszy przypadków użycia. Diagramy sekwencji 
pozwalają uzyskać odpowiedź na pytanie, jak w czasie przebiega komunikacja 
pomiędzy obiektami. Dodatkowo diagramy sekwencji stanowią podstawową technikę 
modelowania zachowania systemu, które składa się na realizację przypadku użycia. 

 

61. 

Testowanie oprogramowania, omówić model V. 

 
Jak powstaje model V? 
Pierwszym stadium tworzenia oprogramowania jest Idea. Kiedy podejmiemy decyzję, że 

koncepcja znajdzie swoją realizację "wchodzimy" w Model V i fazę projektową. Analizę 

background image

48 

 

modelu dokonamy na przykładzie programu „Przypominacz”. Jego podstawowym 
założeniem będzie, jak nie trudno się domyślić, przypominanie o wydarzeniach. 
Musimy zacząć od wymagań: O czym ma nam przypominać? Jak ma przypominać? 
Jakie parametry można w nim nastawić? Itd. Stworzone wymagania są podstawą do 
rozpoczęcia definiowania weryfikacji. Mając wiedzę, co chcemy osiągnąć, możemy 
określić, jak chcemy to sprawdzić i czy będzie to działać. Pierwszy i podstawowy test 
końcowy to, jeśli program się uruchomi, czy przypominacz przypomina?! 
 
Wymagania podlegają analizie, podczas której zespoły architektów, programistów, 
testerów itp., 
decydują czy dana Idea jest realizowalna. Czy da się zaimplementować wszystkie 
wstępne założenia? 
Ważne jest, choć niestety rzadko stosowane, by w procesie analizy uczestniczyli 
testerzy, którzy na poziomie weryfikacji mogliby zacząć tworzyć podwaliny testowania 
systemowego. 
Następnie do gry wchodzą architekci projektu dzieląc go na poszczególne komponenty 
(architektura komponentu). Tworzą oni specyfikację, będącą informacjami 
wejściowymi dla programistów oraz testerów. Każdy projekt ma swoje interfejsy, które 
pozwolą mu na przykład współpracować z systemem operacyjnym. Z kolei każdy 
komponent może być poddany osobnemu sprawdzeniu zanim zostanie zintegrowany w 
całość. Tu pojawiają się pojęcia testowania interfejsów i komponentów. 
Implementacja jest teoretycznym końcem lewego ramienia. 
Prawe ramię, czyli weryfikacja ,to najprościej rzecz ujmując, sprawdzanie, czy założenia 
wstępne 
zostały wypełnione; poczynając od sprawdzania najmniejszych komponentów na całym 
zintegrowanym systemie kończąc. Testy końcowe to zazwyczaj tzw. testy akceptacyjne, 
odpowiadające na pytanie, czy dany produkt spełnia wymagania klienta. W naszym 
przypadku byłoby to sprawdzenie, czy przypominacz zachowuje się tak, jak 
zakładaliśmy to sobie na początku. 

 
Zalety 
Model V precyzyjnie pokazuje zależności, jakie powinny łączyć kolejne etapy projektu. 

Każdy etap projektowania kończy się stworzeniem danych wejściowych dla następnej 
fazy oraz do korespondującej z nim fazy weryfikacji. 
Zachęca do jak najwcześniejszego rozpoczęcia procesu tworzenia planów testów, 
specyfikacji 
testowej i samego testowania. 
Dzięki analizie grafu możemy łatwo zidentyfikować obszary, gdzie stworzona 
dokumentacja powinna 
być sprawdzona. 

 
Model V a teraźniejszość 
Model V ciągle jest jednym z najważniejszych modeli tworzenia oprogramowania. Choć 

mało 
szczegółowy i mało wydajny, daje przykład idealnego świata kooperacji między 
architektami, a 

background image

49 

 

programistami, testerami i klientami. Jest niedoścignionym wzorcem, o którym każdy 
człowiek chcący zajmować się oprogramowaniem, powinien przynajmniej wiedzieć. 

 

62. 

Podstawowe pojęcia niezawodności systemów technicznych, niezawodność systemów 
oprogramowania, miary niezawodności. 

 
Niezawodność- Stopień odporności programu na błędy, jego poprawność formalna oraz 

sposoby reakcji na błędne sytuacje 

 
Miarami niezawodności oprogramowania są np.: 

 

prawdopodobieństwo wystąpienia awarii 

 

częstotliwość występowania awarii (lub średni czas pomiędzy awariami, MTBF) 

 

dostępność – procent czasu w jakim system pozostaje do dyspozycji użytkownika 

 

 
63. Proces zarządzania bezpieczeństwem systemów informatycznych, polityka 
bezpieczeństwa. 
 
Cele strategie i polityki bezpieczeństwa 
Cele, strategie i polityki bezpieczeństwa instytucji powinny być opracowane hierarchicznie 
od poziomu instytucji do poziomu eksploatacyjnego. Powinny odzwierciedlać potrzeby 
instytucji i uwzględniać wszelkie występujące w instytucji ograniczenia. 
Bezpieczeństwo wchodzi w skład odpowiedzialności na każdym poziomie kierowniczym 
instytucji i w każdej fazie cyklu życia systemów. 
Cele, strategie i polityki powinny być utrzymywane i aktualizowane w oparciu o wyniki 
cyklicznych przeglądów bezpieczeństwa (na przykład analizy ryzyka, audytów 
bezpieczeństwa) oraz zmian w celach działania instytucji. 
 
Pojęcia i stosowane definicje 
Bezpieczeństwo systemu informatycznego (IT security): wszystkie aspekty związane z 
definiowaniem, osiąganiem i utrzymywaniem poufności, integralności, dostępności, 
rozliczalności, autentyczności oraz niezawodności. 
Polityka bezpieczeństwa instytucji w zakresie systemów informatycznych (IT security policy): 
zasady, zarządzenia i procedury, które określają jak zasoby – włącznie z informacjami 
wrażliwymi – są zarządzane, chronione i dystrybuowane w instytucji i jej systemach 
informatycznych. 
 
Polityka bezpieczeństwa instytucji 
Na politykę bezpieczeństwa instytucji składają się podstawowe zasady bezpieczeństwa i 
wytyczne dla całej instytucji dot. bezpieczeństwa 
Polityka bezpieczeństwa instytucji powinna odzwierciedlać polityki o szerszym zakresie w 
instytucji, w tym te, które obejmują prawa jednostki, wymagania prawne i normy. 
 
Polityka bezpieczeństwa systemów informatycznych 
Polityka bezpieczeństwa systemów informatycznych powinna odzwierciedlać podstawowe 
zasady bezpieczeństwa i zarządzenia wynikające z polityki bezpieczeństwa instytucji oraz 
ogólne zasady korzystania z systemów informatycznych w instytucji. 

background image

50 

 

 
64. Kryptosystemy symetryczne oraz metody dystrybucji kluczy w systemach 
symetrycznych. 
 

 

Kryptosystem DES 

System DES (Data Encryption Standard) opracowany przez IBM jest najbardziej znanym 
symetrycznym systemem kryptograficznym, który w 1977 r. został przyjęty przez Narodowe 
Biuro Standardów USA (NBS, National Bureau of Standards) jako amerykańska norma 
szyfrowania danych. Algorytm DES jest przeznaczony do szyfrowania 64-bitowych bloków 
danych. Blok wyjściowy (zaszyfrowany) ma taką samą długość jak blok wejściowy 
(poddawany szyfrowaniu), równą 64. Przekształcenia szyfrujące i odszyfrowujące są 
wyznaczane przez 64-bitowy klucz. 8 bitów stanowią tzw. bity parzystości. Aktualnie DES nie 
jest już uważany za dostatecznie silny. 
Istotą trudności kryptoanalizy algorytmu DES metodą przeszukiwania wyczerpującego jest 
złożoność obliczeniowa procesu dopasowania kolejnych możliwych wartości klucza. 
 

 

Kryptosystem 3DES 

Z uwagi na zbyt małą jak na obecne możliwości obliczeniowe przestrzeń kluczy algorytmu 
DES (w czerwcu 1997 r. publicznie zakończono sukcesem atak na zaszyfrowaną algorytmem 
DES wiadomość), nie zaleca się stosowania tego algorytmu w jego podstawowej postaci. 
W jego miejsce najczęściej używa się potrójnego DES-a (3DES), polegającego na trzykrotnym 
zaszyfrowaniu wiadomości algorytmem DES za pomocą trzech różnych kluczy (co skutecznie 
chroni przed atakiem metodą przeszukiwania przestrzeni kluczy). 
 

 

Kryptosystem IDEA 

W USA uważano DES za produkt o znaczeniu militarnym (ograniczenia eksportowe) jak 
również panowało przekonanie iż DES używa zbyt krótkich kluczy szyfrowania (64-bitowy, a 
właściwie 56 bitów). Prace w Europie nad stworzeniem alternatywy dal DES-a zaowocowało 
produktem znanym pod nazwą IDEA (International Data Encryption Algorithm). IDEA jest 
algorytmem stosunkowo nowym, wprowadzonym w latach dziewięćdziesiątych. 
 

•  Algorytm RC4 

Symetryczny algorytm szyfrowania strumieniowego oparty o ciąg pseudolosowych 
permutacji 
generowanych z klucza. Jeden z częściej stosowanych algorytmów szyfrujących. 
  

•  RC5 

Symetryczny, blokowy algorytm szyfrujący. Dane szyfrowane w 16-, 32- lub 64-bitowych 
blokach; długość klucza jest parametrem. RC5, mimo prostej budowy, uważany jest za 
algorytm bardzo bezpieczny. Z RC4 łączy go tylko nazwisko autora – Rona Rivesta. 
 

•  RC6 

RC6 jest następcą RC5. Jest to symetryczny blokowy algorytm szyfrujący o 
nieskomplikowanej konstrukcji wywodzącej się z RC5. Dane szyfrowane są 128-bitowym 
kluczem. 
 

•  Rijndael , Advanced Encryption Standard 

background image

51 

 

Symetryczny , blokowy algorytm szyfrujący. Dane szyfrowane są 128-, 192- lub 256- bitowym 
kluczem w 128-bitowych blokach. Algorytm w 2000 roku zwyciężył konkurs AES i stał się 
nowym standardowym algorytmem szyfrowania symetrycznego. 
 

•  Serpent 

Symetryczny, blokowy algorytm szyfrujący. Dane szyfrowane są 256- bitowym […] 
 

•  Twofish 

Symetryczny, blokowy algorytm szyfrujący. Dane szyfrowane są 128-, 192- lub 256-bitowym 
kluczem w 128-bitowych blokach. W 2000 roku algorytm zakwalifikował się do finału 
konkursu AES. 
 

•  Mars 

Symetryczny, blokowy algorytm szyfrujący zaproponowany przez firmę IBM. Dane 
szyfrowane są kluczem w 128-bitowych blokach, za pomocą klucza o długości od 128 do 400 
bitów. Finalista w konkursie AES. 
 

•  Blowfish 

Stworzony przez Bruce'a Schneiera. Opiera się na kluczach o zmiennej długości (do 448 
bitów). Uważany jest za bardzo bezpieczny (dotychczas nie udowodniono, iż istnieje 
skuteczny sposób łamania szyfrów wygenerowanych przez ten algorytm),. Wykorzystywany 
w wielu programach, m.in. PGP. 
 
65. Kryptografia asymetrycznej w zagadnieniach bezpieczeństwa sieciowych systemów 
komputerowych – przykłady zastosowań. 
 
Kryptografia asymetryczna jest to kryptografia, w której do szyfrowania używamy jednego 
klucza (tzw. Klucz publiczny) natomiast do odszyfrowywania używamy innego klucza  
(tzw. Klucz prywatny). 
 
Algorytmy asymetryczne  
Istnieje wiele różnych algorytmów asymetrycznych, jednakże wszystkie  działają w w taki 
sposób,  że w publicznym katalogu każdy  użytkownik umieszcza procedurę szyfrowania i 
deszyfrowania  (ang. Encryption and decryption procedure). W katalogu zawarty jest również 
publiczny klucz E tego użytkownika. Klucz prywatny D jest przechowywany przez 
użytkownika i nikomu pod  żadnym względem nie powinien być udostępniony. Metody 
szyfrowania i deszyfrowania  są jawne, ponieważ bezpieczeństwo systemów z kluczem 
publicznych jest zapewnione dzięki trudności i ilości wymaganych obliczeń, a nie tajności 
zastosowanego sposobu zaszyfrowania wiadomości.   
 
Procedury E i D muszą spełniać następujące cztery warunki:  
a) Odszyfrowując zaszyfrowaną wiadomość musimy dostać oryginalną 
wiadomość:  
D(E(M))=M dla każdej wiadomości M;  
b) Zarówno E jaki i D nie  są obliczeniowo skomplikowane (są to funkcje  
o złożoności wielomianowej);  
c) Publikując E  użytkownik nie zmniejsza bezpieczeństwa wiadomości tj.  

background image

52 

 

nie istnieje prosta metoda wyznaczenia D za pomocą E. Oznacza to,  że 12 
użytkownik D jest jedyną osobą mogącą odszyfrować wiadomość 
zaszyfrowaną za pomocą E;  
d) Jeśli wiadomość M zostanie najpierw „odszyfrowana”, a następnie  
zaszyfrowana to powinniśmy otrzymać M:  
E(D(M))=M dla każdej wiadomości M. 
 
Zastosowanie: 

 

Podpis cyfrowy (Podpisu cyfrowy umożliwia potwierdzenie autentyczności 
dokumentu, weryfikację sygnatariusza, zapewnienie niezmienności treści od 
momentu podpisania oraz uniemożliwienia wyparcie się faktu podpisania 
dokumentu. Podpis cyfrowy wykonywany jest przy pomocy klucza prywatnego, a 
weryfikowany za pomocą klucza publicznego. Oznacza to, że tylko jedna osoba może 
dokonać podpisu,  właściciel klucza prywatnego, natomiast weryfikacji dokumentu 
może dokonać każdy, wystarczy,  że z ogólnodostępnego katalogu pobierze klucz 
publiczny.) 

 

Certyfikaty (Certyfikat klucza publicznego jest ochroniony przez podpis cyfrowy 
wydawcy.  Użytkownicy certyfikatów wiedzą,  że jego zawartość nie została 
sfałszowana od momentu, gdy została podpisana, jeśli tylko podpis może zostać 
zweryfikowany.) 

 

Protokół SSL  

 
66. Podpis elektroniczny a podpis cyfrowy, definicje, przykłady zastosowań. 
 
Podpis elektroniczny 
Technologia podpisu elektronicznego to powiązanie dokumentu (poddanego digitalizacji) z 
daną osobą, poprzez cechy jednoznacznie go charakteryzujące (np. biometryczne). 
Przy dzisiejszym stanie technologii jedynie nagranie dokumentu przekazywanego głosem 
człowieka spełnia wymagania stawiane podpisowi elektronicznemu (np. zlecenia bankowe 
lub maklerskie przekazywane przez telefon). 
Odcisk linii papilarnych, obraz tęczówki oka, kształt twarzy, itp. są doskonałymi sposobami 
identyfikacji, ale nie mogą być jeszcze stosowane do podpisu elektronicznego ze względów 
technicznych. 
 
Podpis elektroniczny a podpis cyfrowy 
Pojęcia podpisu elektronicznego oraz podpisu cyfrowego nie są tożsame – podpis 
elektroniczny to pojęcie szersze znaczeniowo niż podpis cyfrowy, ten drugi tanowi jeden z 
rodzajów podpisu elektronicznego. 
Podpis cyfrowy różni się od innych podpisów elektronicznych tym, że został wykonany przy 
pomocy kryptografii asymetrycznej z parą kluczy prywatny – publiczny (gdyby wykorzystano 
inną technikę kryptograficzną przy tworzeniu podpisu elektronicznego – taki podpis nie byłby 
już podpisem cyfrowym). 
 
67. Zapory ogniowe – pojęcia podstawowe, obszary zastosowań. 
 
Zapora sieciowa (ang. firewall – ściana przeciwogniowa) – jeden ze sposobów zabezpieczania 
sieci i systemów przed intruzami. 

background image

53 

 

 

Termin ten może odnosić się zarówno do dedykowanego sprzętu komputerowego 
wraz ze specjalnym oprogramowaniem, jak i do samego oprogramowania 
blokującego niepowołany dostęp do komputera, na którego straży stoi.  

 

Pełni rolę połączenia ochrony sprzętowej i programowej sieci wewnętrznej LAN przed 
dostępem z zewnątrz tzn. sieci publicznych, Internetu,  

 

chroni też przed nieuprawnionym wypływem danych z sieci lokalnej na zewnątrz.  

 

Często jest to komputer wyposażony w system operacyjny (np. Linux, BSD) z 
odpowiednim oprogramowaniem.  

 

Do jego podstawowych zadań należy filtrowanie połączeń wchodzących i 
wychodzących oraz tym samym odmawianie żądań dostępu uznanych za 
niebezpieczne. 

 
Najczęściej używanymi technikami obrony są: 

 

Filtrowanie pakietów, czyli sprawdzanie pochodzenia pakietów i akceptowanie 
pożądanych (np. SPI). 

 

Stosowanie algorytmów identyfikacji użytkownika (hasła, cyfrowe certyfikaty). 

 

Zabezpieczanie programów obsługujących niektóre protokoły (np. FTP, TELNET). 

 
Bardzo ważną funkcją zapory sieciowej jest monitorowanie ruchu sieciowego i zapisywanie 
najważniejszych zdarzeń do dziennika (logu). Umożliwia to administratorowi wczesne 
dokonywanie zmian konfiguracji. Poprawnie skonfigurowany firewall powinien odeprzeć 
wszelkie znane typy ataków. Na zaporze można zdefiniować strefę ograniczonego zaufania – 
podsieć, która izoluje od wewnętrznej sieci lokalne serwery udostępniające usługi na 
zewnątrz. 
 
Typy zapór sieciowych: 

 

Zapory filtrujące 

 

Translacja adresów sieciowych (NAT) - (ang. network address translation) 

 

Zapory pośredniczące  
 

68. Systemy wykrywania zagrożeń (IDS) – koncepcja, zasady lokalizacji sondy. 
 
IDS ( Intrusion Detection System) 
systemy wykrywania i zapobiegania włamaniom – urządzenia sieciowe zwiększające 
bezpieczeństwo sieci komputerowych przez wykrywanie (IDS) lub wykrywanie i blokowanie 
ataków (IPS) w czasie rzeczywistym. 
 
Systemy wykrywania włamań działają przez analizę ruchu sieciowego za pomocą dwóch 
metod: 

 

Analiza heurystyczna – polegająca na defragmentacji, łączeniu pakietów w strumienie 
danych, analizie nagłówków pakietów oraz analizie protokołów aplikacyjnych. 
Pozwala wytypować pakiety mogące doprowadzić do zdestabilizowania docelowej 
aplikacji w razie obecności w niej błędów implementacyjnych. Stosowane są różne 
nazwy handlowe – np. protocol analysis (np. IBM ISS) czy preprocessing (Snort). W 
większości systemów IDS analiza heurystyczna odbywa się równocześnie z 
normalizacją danych przed poddaniem ich analizie sygnaturowej. 

background image

54 

 

 

Analiza sygnaturowa – polegająca na wyszukiwaniu w pakietach ciągów danych 
charakterystycznych dla znanych ataków sieciowych. Kluczowym elementem jest 
baza sygnatur, budowana wraz z pojawianiem się nowych ataków i odpowiednio 
często aktualizowana. 

 
Typowe elementy systemu IDS/IPS to: 

 

sonda (ang. sensor) – element analizujący ruch sieciowy i wykrywający ataki, 

 

baza danych – zbierająca informacje o atakach z grupy sensorów, 

 

analizator logów – umożliwiający wizualizację i analizę logów z grupy sensorów. 

 
Architektura 
W zależności od lokalizacji sensora oraz zakresu analizowanych zdarzeń wyróżnia się 
następujące rodzaje systemów IDS: 

 

hostowe – HIDS (ang. Host-based IDS) – działają jako aplikacja w jednym, 
ochranianym systemie operacyjnym analizując zdarzenia pochodzące z logu 
systemowego oraz z lokalnych interfejsów sieciowych. 

 

sieciowe – NIDS (ang. Network IDS) – analizujące ruch sieciowy dla wszystkich 
systemów w segmencie sieci, do którego są podłączone. NIDS potrafi rozpoznawać 
ataki skierowane przeciwko systemom, które nie mają zainstalowanych HIDS. 
Równocześnie jednak ma ograniczone zdolności analizowania ruchu przesyłanego w 
kanałach SSL lub zdarzeń zachodzących lokalnie w systemie (np. brak pamięci, ataki 
lokalne z konsoli). 

 
69. Wirtualne sieci prywatne (VPN) - koncepcja, przykłady zastosowań, stosowane 
protokoły. 
 
VPN (ang. Virtual Private Network, Wirtualna Sieć Prywatna)  

 

Tunel, przez który płynie ruch w ramach sieci prywatnej pomiędzy klientami 
końcowymi za pośrednictwem publicznej sieci (takiej jak Internet) w taki sposób, że 
węzły tej sieci są przezroczyste dla przesyłanych w ten sposób pakietów.  

 

Można opcjonalnie kompresować lub szyfrować przesyłane dane w celu zapewnienia 
lepszej jakości lub większego poziomu bezpieczeństwa.  

 

Określenie "Wirtualna" oznacza, że sieć ta istnieje jedynie jako struktura logiczna 
działająca w rzeczywistości w ramach sieci publicznej, w odróżnieniu od sieci 
prywatnej, która powstaje na bazie specjalnie dzierżawionych w tym celu łącz.  

 

Pomimo takiego mechanizmu działania stacje końcowe mogą korzystać z VPN 
dokładnie tak jak gdyby istniało pomiędzy nimi fizyczne łącze prywatne.  

 

Rozwiązania oparte na VPN stosowane są np. w sieciach korporacyjnych firm, których 
zdalni użytkownicy pracują ze swoich domów na niezabezpieczonych łączach.  

 

Wirtualne Sieci Prywatne charakteryzują się dość dużą efektywnością, nawet na 
słabych łączach (dzięki kompresji danych) oraz wysokim poziomem bezpieczeństwa 
(ze względu na szyfrowanie). Rozwiązanie to sprawdza się w firmach, których 
pracownicy często podróżują lub korzystają z możliwości telepracy. 

 
Protokoły 

 

IPSec (Internet Protocol Security) 

background image

55 

 

Protokół najbardziej uniwersalny a zarazem mający największe ograniczenia. Nadaje 
się do tworzenia wszystkich w/w rodzajów VPNów. W wersji podstawowej nie radzi 
sobie z NATem i musi znać konfigurację zdalnej sieci. 
 IPsec to zbiór protokołów służących implementacji bezpiecznych połączeń oraz 
wymiany kluczy szyfrowania pomiędzy komputerami. Protokoły tej grupy mogą być 
wykorzystywane do tworzenia Wirtualnej Sieci Prywatnej (ang. VPN). 
VPN oparta na IPsec składa się z dwóch kanałów komunikacyjnych pomiędzy 
połączonymi komputerami: kanał wymiany kluczy za pośrednictwem którego 
przekazywane są dane związane z uwierzytelnianiem i szyfrowaniem (klucze) oraz 
kanału (jednego lub więcej), który niesie pakiety transmitowane poprzez sieć 
prywatną. Kanał wymiany kluczy jest standardowym protokołem UDP (port 500).
 

 

 

L2TP  
Czyli Layer 2 Tunneling Protocol - opcjonalnie wykorzystuje IPSec do zapewnienia 
poufności (szyfrowania). Zazwyczaj Client-to-Site, prosta konfiguracja i autoryzacja na 
podstawie loginu i hasła. Wyraźny podział na serwer (router) i klienta (zdalny 
komputer). Serwer musi mieć publiczny (routowalny) adres IP, klient może być za 
NATem, pod warunkiem, że router dostępowy w jego sieci obsługuje (i ma aktywną) 
funkcję L2TP Pass-Through. Ten sam problem co z IPSec - protokół ESP.  
 

 

PPTP  
Najmniej konfliktowy ale i zapewniający najniższy poziom bezpieczeństwa. 
Wykorzystuje protokół GRE do transmisji danych. Autoryzacja na podstawie loginu i 
hasła. Autoryzacja przez MS-CHAP, opcjonalne szyfrowanie przez MPPE. Reszta zasad 
jak w L2TP. Zabezpieczenia tego protokołu zostały złamane już dawno temu i nie jest 
uważany za bezpieczny, mimo to wciąż bardzo popularny. 

 
 
70. Wyjaśnij określenie "exploitation-exploration trade-off" w kontekście próby definicji 
sztucznej inteligencji. 
 
Z uwagi na trudność sformułowania definicji sztucznej inteligencji. Wskazuje się na wspólne 
cechy, które są mianownikiem systemów inteligentnych.  
Prawdziwy inteligentny system, powinien w odpowiednim stopniu, wykorzystywać 
informacje i wiedzę na temat problemu(exploitation)[wykorzystanie tego co już wiemy o 
problemie i metodzie jego rozwiązania]. Jednak system taki nie powinien się zawężać tylko 
do wykorzystania tego co już umiemy, ale również dążyć do poznania nowego[exploration]. 
Dobrze skonstruowany system, powinien odpowiednio wyważyć ile zasobów poświęcić na 
exploitation i exploration zarazem [ang. exploitation-exploration trade off]. 
 
71. Na czym polega uczenie sieci neuronowej algorytmem typu backpropagation. 
 

 

Metoda wstecznej propagacji błędów została wyprowadzona przez J. Werbos'a i 
ponownie odkryta przez E. Rumelhart'a i J.L. McCelland'a.  

 

Obecnie pozostaje nadal jedną z najpopularniejszych metod uczenia sieci 
neuronowych wielowarstwowych. 

background image

56 

 

 

Algorytm wstecznej propagacji - BP (ang. BackPropagation) określa strategię doboru 
wag w sieci wielowarstwowej przy wykorzystaniu gradientowych metod 
optymalizacji.  

 

Podczas procesu uczenia sieci dokonuje się prezentacji pewnej ilości zestawów 
uczących (tzn. wektorów wejściowych oraz odpowiadających im wektorów sygnałów 
wzorcowych (wyjściowych)).  

 

Uczenie polega na takim doborze wag neuronów by w efekcie końcowym błąd 
popełniany przez sieć był mniejszy od zadanego.  

 

Nazwa "wsteczna propagacja" pochodzi od sposobu obliczania błędów w 
poszczególnych warstwach sieci.  

 

Najpierw obliczane są błędy w warstwie ostatniej (na podstawie sygnałów 
wyjściowych i wzorcowych.  

 

Błąd dla neuronów w dowolnej warstwie wcześniejszej obliczany jest jako pewna 
funkcja błędów neuronów warstwy poprzedzającej. Sygnał błędu rozprzestrzenia się 
od warstwy ostatniej, aż do warstwy wejściowej, a więc wstecz. 

 

Korekcja wektora wag sieci oparta jest na minimalizacji funkcji miary błędu, która 
określona jest jako suma kwadratów błędów na wyjściach sieci. 

 
72. Omów podstawowe metody bezstratnej i stratnej kompresji danych 
 
Kompresja stratna  

 

metoda zmniejszania liczby bitów potrzebnych do wyrażenia danej informacji, które 
nie dają gwarancji, że odtworzona informacja będzie identyczna z oryginałem 

 

Dla niektórych danych algorytm kompresji stratnej może odtworzyć informację w 
sposób identyczny.  

 

Kompresja stratna jest możliwa ze względu na sposób działania ludzkich zmysłów, tj. 
wyższą wartość pewnych części danych nad innymi.  

 

Algorytmy kompresji stratnej zazwyczaj posługują się modelami psychoakustycznymi, 
psychowizualnymi itd., aby odrzucić najmniej istotne dane o dźwięku, obrazie, 
pozostawiając dane o wyższej wartości dla rozpoznawania tej informacji (akustycznej, 
wizualnej) przez zmysły.  

 

Ilość odrzucanych danych jest zazwyczaj określana przez stopień kompresji. Z tego też 
względu nie istnieją algorytmy kompresji stratnej, które można stosować do 
dowolnego typu danych. Np. kompresja stratna plików wykonywalnych byłaby 
praktycznie niemożliwa do zastosowania, gdyż nie jest to informacja odczytywana 
przez zmysły, a przez maszynę.  

 

Zwykle kompresję stratną stosuje się do: obrazków, dźwięków, ruchomych obrazów, 
np. w filmie. Przy danych audiowizualnych zazwyczaj kompresuje się osobno dźwięk, 
a osobno obraz.  

 

Prostym przykładem kompresji stratnej jest np. zachowanie tylko co drugiego piksela, 
lub odrzucenie 2 najmniej istotnych bitów. Takie metody jednak nie dają zazwyczaj 
tak zadowalających rezultatów jak oparte na modelach psychozmysłowych.  

 
Kompresja bezstratna (ang. lossless compression) – ogólna nazwa metod kompresji 
informacji do postaci zawierającej zmniejszoną liczbę bitów, pod warunkiem że metoda ta 
gwarantuje możliwość odtworzenia informacji z postaci skompresowanej do identycznej 
postaci pierwotnej. Algorytmy kompresji bezstratnej dobrze kompresują "typowe" dane, 

background image

57 

 

czyli takie w których występuje znaczna nadmiarowość informacji (redundancja). Pewne 
rodzaje danych są bardzo trudne lub niemożliwe do skompresowania: 

 

strumienie liczb losowych (niemożliwe do skompresowania) 

 

strumienie liczb pseudolosowych (trudne do skompresowania, choć teoretycznie 
łatwe) 

 

dane skompresowane za pomocą tego samego lub innego algorytmu (w praktyce 
trudne) 

 
Najczęściej używane metody kompresji bezstratnej można podzielić na słownikowe i 
statystyczne, choć wiele metod lokuje się pośrodku: 

 

metody słownikowe poszukują dokładnych wystąpień danego ciągu znaków, np. 
zastępują 'the ' krótszą ilością bitów niż jest potrzebna na zakodowanie 4 
niezwiązanych znaków. Jednak znajomość symbolu 'the ' nie pociąga za sobą 
usprawnień w kompresowaniu 'they' czy 'then'. 

 

metody statystyczne używają mniejszej ilości bitów dla częściej występujących 
symboli, w przypadku praktycznie wszystkich oprócz najprostszych metod, 
prawdopodobieństwa zależą od kontekstu. A więc np. dla 'h' występującego po 't' 
używają mniejszej ilości bitów niż dla innych znaków w tym kontekście. 

 
73. Wymień standardowe metody kompresji sygnałów multimedialnych: obrazów 
nieruchomych, dźwięku, video. Omów dokładniej jedną z nich. 
 
Kompresja obrazków JPEG  
Najbardziej powszechnym algorytmem kompresji obrazów jest JPEG. Wiele rozwiązań 
użytych w JPEG jest używanych także w innych algorytmach, więc warto je tutaj omówić. 
Kolejne kroki algorytmu JPEG to:  

 

zamiana przestrzeni kolorów z RGB na kanał jasności i dwa kanały koloru. Ludzie 

znacznie dokładniej postrzegają drobne różnice jasności od drobnych różnic barwy, a więc 
użyteczne jest tutaj użycie różnych parametrów kompresji. Krok nie jest obowiązkowy.  

 

obniżenie rozdzielczości kanałów koloru, zwykle odrzuca się co drugą wartość wzdłuż 

osi poziomej i każdą na pionowej, choć możliwe są też inne ustawienia. Tak radykalne cięcie 
danych nieznacznie wpływa na jakość, ponieważ rozdzielczość postrzegania kolorów przez 
ludzkie oko jest słaba. Krok nie jest obowiązkowy.  

 

podzielenie każdego kanału obrazka na bloki 8x8. W przypadku kanałów kolorów, jest 

to 8x8 aktualnych danych, a więc zwykle 16x8.  

 

transformata kosinusowa każdego z bloków. Zamiast wartości pikseli mamy teraz 

średnią wartość wewnątrz bloku oraz częstotliwości zmian wewnątrz bloku, obie wyrażone 
przez liczby zmiennoprzecinkowe. Transformata DCT jest odwracalna, więc na razie nie 
tracimy żadnych danych.  

 

Zastąpienie średnich wartości bloków przez różnice wobec wartości poprzedniej. 

Poprawia to w pewnym stopniu współczynnik kompresji.  

 

 Kwantyzacja, czyli zastąpienie danych zmiennoprzecinkowych przez liczby całkowite. 

To właśnie tutaj występują straty danych. Zależnie od parametrów kompresora, odrzuca się 
mniej lub więcej danych. Zasadniczo większa dokładność jest stosowana do danych 
dotyczących niskich częstotliwości niż wysokich kodowanych algorytmem Huffmana. Użyta 
transformata powoduje efekty blokowe w przypadku mocno skompresowanych obrazków.  
 

background image

58 

 

Inne metody 
Inne algorytmy kompresji obrazków opierają się głównie na:  

 

użyciu innej transformaty o zmodyfikowanej transformaty kosinusowej, która nie 

powoduje efektu bloków, a więc jest korzystniejsza w przypadku mocno skompresowanych 
obrazków. Nie odbiega ona wynikami znacząco od DCT w przypadku obrazów o średniej i 
niskiej kompresji. o transformat falkowych - mogą one dać znacznie lepsze wyniki. Zazwyczaj 

 

 

kompresji wszystkich kanałów naraz, w szczególności ich wspólnej kwantyzacji. Daje 

lepsze wyniki jeśli wartości w różnych kanałach są mocno skorelowane. Kompresja fraktalna 
Zupełnie inną metodą jest kompresja fraktalna. Opisuje ona obraz w postaci parametrów 
funkcji fraktalnej, która daje w efekcie przybliżoną postać obrazu. Dotychczas kompresja 
fraktalna daje znacznie słabszą jakość w przypadku obrazów o niskim i średnim stopniu 
kompresji. Dla obrazów silnie skompresowanych może dawać lepsze rezultaty niż JPEG, 
przede wszystkim nie powoduje efektu bloków, jednak są one słabsze od znacznie prostszych 
metod opartych na MDCT czy falkach. Nic nie wskazuje na to, że kompresja fraktalna 
znajdzie szersze zastosowanie.  
 
Kompresja ruchomych obrazów  
Najprostsze systemy kompresji ruchomych obrazów po prostu kompresują wszystkie klatki 
osobno. Jest to bardzo nieefektywne, ponieważ kolejne klatki są zazwyczaj do siebie bardzo 
podobne. Zazwyczaj używa się zestawu klatek kluczowych, które kompresuje się tak samo jak 
samodzielne obrazki. Pozostałe klatki kompresuje się natomiast korzystając z danych z klatek 
poprzednich. Lepsze wyniki dałoby wykorzystanie danych o poprzednich klatkach przy 
kompresji każdej klatki, jednak utrudniało by to znacznie przewijanie. Prostym sposobem 
wykorzystania danych o poprzednich klatkach jest kodowanie różnicy wartości pikseli o tym 
samym położeniu zamiast samych wartości. Tym sposobem można dobrze skompresować 
sceny w których kamera jest nieruchoma, jednak nie da to znaczących efektów w scenach z 
ruchomą kamerą. Zwykle wykorzystuje się więc różne rodzaje kompensacji ruchu. Np. dla 
każdego bloku podaje się który niewielki wektor przesunięcia, np. [2,-1], czyli zamiast tego 
samego bloku klatki poprzedniej używamy bloku o 2 piksele w prawo i jeden w górę (czy też 
w lewo i w dół).  
Inną ważną techniką wykorzystywaną przy kompresji ruchomych obrazów jest zmienna 
przepływność (variable bitrate), czyli używanie różnej dokładności dla różnych klatek. Jest 
wiele sposobów dobierania takich różnic, algorytmy wyboru jakości zwykle są cechą bardziej 
enkodera niż formatu. Często enkodery stosują metody dwu-przejazdowe, pierwszy przejazd 
po danych zbiera informacje potrzebne algorytmowi zmiennej przepływności, a dopiero 
drugi kompresuje dane. Ruchome obrazy są zazwyczaj mocno skompresowane, a więc dla 
kodeka MPEG, który używa podobnie jak JPEG transformaty kosinusowej, efekty blokowe 
mogą być bardzo uciążliwe.  
 
 
Kompresja dźwięku  
Dwa najpopularniejsze publicznie dostępne algorytmy - MP3 i Vorbis, używają podobnych 
technik. Warto tu omówić algorytm Vorbis, ponieważ używa on bardziej efektywnych 
rozwiązań. 

 

Strumień jest dzielony na okna. Okna występują w dwóch rozmiarach - duże (zwykle 

2048 próbek) i małe (zwykle 256 próbek). Małe służą do przedstawienia szybko 

background image

59 

 

zmieniającego się dźwięku oraz nagłego wzrostu intensywności dźwięku w danej 
częstotliwości. Nie używa się ich w przypadku spadków intensywności, ponieważ ludzkie 
ucho jest na nie znacznie mniej czułe. Okna nie są po prostu grupą kolejnych wartości 
natężenia dźwięku. Okna częściowo się nakrywają i jedna wartość należy w tych obszarach 
częściowo do kilku okien. Dla obszarów zachodzenia na siebie okien, dana wartość należy do 
lewego okna w stopniu sin(pi/2 × sin2(pi/2 × t)), gdzie t=0 dla początku obszaru i t=1 dla jego 
końca.  

 

Na każdym oknie jest przeprowadzana zmodyfikowana transformata kosinusowa. 

Zamiast poszczególnych wartości mamy teraz w bloku widmo parametrów MDCT czyli 
(pomijając szczegóły) częstotliwości.  

 

Dane z MDCT są upraszczane zależnie od parametrów kompresji zgodnie z modelem 

psychoakustycznym.  

 

Dane o energii przypadającej na daną częstotliwość są skalowane, co umożliwia 

równie dobrą kompresje głośnych jak i cichych dźwięków.  

 

Dane są kwantyfikowane i kompresowane bezstratnie.