background image

Zagadnienia na egzamin inżynierski 

 
1.  Wymień cechy algorytmu i sposoby jego reprezentacji. 

 

Algorytm – skończona sekwencja reguł, działających na skończonej liczbie danych, pozwalająca rozwiązywać 
określony problem (klasę problemów); dla poprawnych danych wejściowych produkuje poprawne wyniki. 

 

cecha 

Opis 

Określoność (ang. definiteness

Możliwość wykonania wszystkich operacji 

Jednoznaczność (ang.uniqually determined

Jednoznaczność wszystkich wykonywanych operacji 

Skończoność (ang. finiteness

Rozwiązanie problemu w skończonej liczbie kroków 

Ogólność (ang. generality

Wykorzystanie do rozwiązania określonej klasy zadań (założony 
poziom ogólności) 

Efektywność (ang. effectiveness

Złożoność obliczeniowa 

Zupełność (ang. complete

Uwzględnienie wszystkich możliwych przypadków jakie mogą 
wystąpić 

 

+  poprawność (wyniki odzwierciedlają rzeczywistość) 
+  sprawność (czasowa – szybkość; pamięciowa – zasobożerność) 
+  prostota wykonania (operacje jak najprostsze) 

 

Aby nasz algorytm rozwiązywał poprawnie pewne zagadnienia niezbędna są dane początkowe i zadanie 
ograniczeń np. warunki brzegowe, jednym słowem należy przedstawić rzeczywistość poprzez:  

 

zdefiniowanie zadania  

 

wprowadzenie założeń i ograniczeń  

 

algorytm rozwiązania  

 
Sposoby realizacji algorytmu: 

 

Opisowa, werbalna (dane, warunek, wynik, kroki ….) 

 

Schemat blokowy/ sieć działań (graficzny opis działań+kolejność) 

 

Pseudokod 

 

Języki programowania 

 

Drzewo algorytmu (określa złożoność obliczeniową i pesymistyczną; idziemy od korzenia do wierzchołków, 
trochę to przypomina takie if-y) 

 

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

standardowe notacje rzędu złożoności. 

 
Złożoność obliczeniowa – miara porównania algorytmów, w wyniku której: 

 

Porównuje się różne algorytmy rozwiązujące te same problemy 

 

Przewiduje się wydajność algorytmów w nowym środowisku 

 

Określa wartości parametrów algorytmów 

 
Rodzaje złożoności: 

 

Czasowa (czas wykonania w jednostkach czasu) 

 

Pamięciowa (B, KB…) 

 
Złożoność asymptotyczna przedstawia złożoność dla bardzo dużych, granicznych rozmiarów danych 
wejściowych 
 
 
 
 
 

background image

Rodzaje notacji asymptotycznej: 

notacja 

opis 

Rysunek 

O-notacja 
(omikron

Funkcja f(n) jest co najwyżej rzędu g(n) : 

f(n) = O(g(n)) 

 jeżeli istnieją c, n

0

>0, że dla wszystkich 

n   n

0

 zachodzi: f(n)   cg(n) 

 
 
cg(n) jest asymptotyczną granicą górną. Służy do 
szacowania czasu działania algorytmu w przypadku 
pesymistycznym 

 

 -notacja 

Asymptotyczne ograniczenie dolne (czyli odwrotnie, 
niż w O-notacji) 
 
 
 
Asymptotyczna granica dolna. Służy do oszacowania 
czasu działania algorytmu w przypadku 
optymistycznym 

 

 -notacja 

Funkcja f(n) jest rzędu  (g(n)): 

f(n) =  (g(n)) 

jeżeli istnieją takie c

1

 i c

2

>0, że dla wszystkich n   n

0

 

zachodzi: 
c

1

g(n)   f(n)   c

2

g(n) 

 
Asymptotyczne oszacowanie dokładne 

 

 
Asymptotyczna złożoność czasu i przestrzeni (zasoby obliczeniowe), złożoność układu i wskaźniki obliczeń 
równoległych (liczba równoległych procesorów) 
 
Notacje rzędu złożoności (oprócz notacji asymptotycznych) mają jeszcze notację małego o (f niższego rzędu niż 
g) oraz małego omega (f jest wyższego rzędu niż g) 
 
Kategorie złożoności: 

 

 

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

 
 Algorytmy sortowania są zazwyczaj klasyfikowane według:  

 

złożoności (pesymistyczna, oczekiwana) – zależność liczby wykonanych operacji w stosunku od liczebności 
sortowanego zbioru (n). Typową, dobrą złożonością jest średnia O(n log n) i pesymistyczna Ω(n²). Idealną 
złożonością jest O(n). Algorytmy sortujące nie przyjmujące żadnych wstępnych założeń dla danych 
wejściowych wykonują co najmniej O(n log n) operacji w modelu obliczeń, w którym wartości są 

background image

"przezroczyste" i dopuszczalne jest tylko ich porównywanie (w niektórych bardziej ograniczonych 
modelach istnieją asymptotycznie szybsze algorytmy sortowania);  

 

złożoność pamięciowa  

 

sposób działania: algorytmy sortujące za pomocą porównań to takie algorytmy sortowania, których sposób 
wyznaczania porządku jest oparty wyłącznie na wynikach porównań między elementami; Dla takich 
algorytmów dolne ograniczenie złożoności wynosi Ω(n log n);  

 

stabilność: stabilne algorytmy sortowania utrzymują kolejność występowania dla elementów o tym samym 
kluczu (klucz – cecha charakterystyczna dla każdego elementu zbioru, względem której jest dokonywane 
sortowanie). Oznacza to, że dla każdych dwóch elementów R i S o tym samym kluczu, jeśli R wystąpiło 
przed S to po sortowaniu stabilnym R nadal będzie przed S;  

 
Złożoność oznacza liczbę elementów do posortowania, liczbę różnych elementów. 
 
sortowanie jest stabilne wtedy kiedy złożoność obliczeniowa nie zależy od rozłożenia elementów 
 
 

nazwa 

złożoność 

Opis 

Sortowanie bąbelkowe 

(ang. bubble sort

O(n

2

Porównuję kolejne pary elementów, po każdym porównaniu 
mamy o 1 element mniej (bo jest on posortowany). 

Sortowanie przez wstawianie 

(ang. insertion sort

O(n

2

Każdy od drugiego sprawdzany, gdzie pasuje na liście 
 
Zakładamy, że pierwszy element tablicy jest posortowany. 
Następnie sprawdzamy pozostałe (nieposortowane) elementy i 
w zależności od tego, czy są mniejsze, czy większe, trafiają na 
odpowiednie miejsce. Element z części nieposortowanej 
wstawiamy do posortowanej tak, aby nie naruszyć dokonanego 
posortowania (Inaczej mówiąc, trzeba badany element 
sprawdzić z każdym elementem części posortowanej). 

Sortowanie przez scalanie 

(ang. merge sort

O( nlog(n) ) 

Wymaga O(n) dodatkowej pamięci 
Podział listy na podlisty, sortowanie podlist, łączenie 
posortowanych podlist 

Sortowanie szybkie 

(ang. quick sort

Optymistyczna: 

O( nlog(n) ) 

Pesymistyczna: 

O(n

2

Wyszukiwanie elementu średniego, mniejsze elementy idą na 
lewo, a większe na prawo, aż do pojedynczych elementów 
(rekurencja). Przykład sortowania niestabilnego; wpływ danych 
wejściowych na złożoność obliczeniową; 

Sortowanie przez wybieranie 

(ang. selection sort

O(n

2

Wybieramy najmniejszy element z tablicy i zamieniamy go z 
pierwszym jej elementem. Z pozostałej, nieposortowanej części 
robi to samo (element najmniejszy wymieniamy kolejno z 
drugim ,trzecim itd.). Czynność powtarzamy n-1 razy. 

 
 

4.  Przedstawić iteracyjne oraz rekurencyjne struktury algorytmiczne. Dokonać 

porównania. 

 

iteracja 

Rekurencja 

 

technika powtarzająca pewną czynność 
w pętli (określoną ilość razy lub do 
spełnienia określonego warunku)  

 

Konstruuje się też algorytmy iteracyjne 
polegające na konstruowaniu ciągu 
przybliżonych rozwiązań {x

k

}, zbieżnego 

do rozwiązania dokładnego x

*

 

 
 

 

technika pozwalająca opisać problem za pomocą jego składowych 
(umożliwia funkcji/procedurze/podprogramowi wywołać samą siebie) 

 

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. 

 

W każdym wywołaniu rekurencyjnym do życia powoływany jest nowy 
zestaw zmiennych lokalnych, zaś stare odkładane na stosie. 

 

O wszystkim decyduje i o wszystko dba kompilator 

 

Implementacja rekurencyjnej definicji funkcji wymaga tłumaczenia na 
język programowania – rekord aktywacji (w stosie programu; parametry 

background image

wywołania, wartość zwracana, zmienne lokalne, dynamiczne dowiązanie 
do rekordu wywołania procesu wywołującego, adres powrotu do procesu 
wywołania) 

 

Do obliczenia n+1-ej wartości 
wykorzystuje poprzednią, n-tą iterację. 

 

pozwalana na przejrzysty i zwarty opis algorytmu, wydajne struktury 
danych kosztem złożoności wykonania 

 

Dla obliczenia n-tej wartości potrzebuje zejść aż do pierwszej (tzw. drzewo 
rekurencji). 

 

Iteracyjne struktury danych: tablica 

Elementarne konstrukcje algorytmiczne 
(primitive constructions): 

 

Bezpośrednie następstwo (instrukcja po 
instrukcji) 

 

Wybór warunkowy (if) 

 

Iteracja warunkowa (while, do-while; 
niejawna liczba iteracji) 

 

Iteracja ograniczona (pętla for) 

 

Iteracyjne struktury danych: kolejka, 
stos, lista 

 

Np. wywołanie funkcji, drzewa (katalogów) 

 

Rekurencyjne struktury danych: drzewo, graf 

 

 

 

Struktura 

algorytmiczna 

opis 

Stos 
(LIFO) 

-  Liniowa struktura danych 
-  Dostęp tylko do wierzchołka stosu, do pozostałych po zdjęciu elementów leżących między nimi, a 

wierzchołkiem 

Kolejka 
(FIFO) 

-  Liniowa struktura danych 
-  Nowe dane dopisywane na końcu kolejki 
-  Z początku kolejki pobierane są dane do dalszego przetwarzania (bufor FIFO
-  Modyfikacja kolejki – kolejka priorytetowa (każde dane mają priorytet – na wyjściu pierwsze 

pojawią się dane o najmniejszym priorytecie) 

-  Kolejka cykliczna – rodzaj kolejki (1-wszy element tablicy traktowany jest jako kolejny po 

ostatnim; w praktyce taki indeks wylicza się z (N+1) mod WIelkoscTablicy) 

-  Zastosowanie: obsługa zdarzeń (np. kolejka priorytetowa w Systemach Operacyjnych – 

przydzielanie sprzętu procesom) 

lista 

-  Liniowo uporządkowany zbiór elementów 
-  W dowolnym miejscu można usunąć/dodać element 
-  Rodzaje: jednokierunkowa, dwukierunkowa, cykliczna 
-  Implementacja: tablicowa lub wskaźnikowa 
-  Pierwszy i ostatni element listy = końce listy 

drzewo 

-  Hierarchiczne ułożenie danych 
-  Rodzaje: drzewo binarne, BST (ang. Binary Search Tree – binarne drzewo poszukiwań), czerwono-

czarne, AVL, B-drzewa 

graf 

-  Zbiór wierzchołków połączonych krawędziami 
-  Każda krawędź kończy i zaczyna się w którymś z wierzchołków 
-  Wierzchołki grafu są numerowane 
-  Wierzchołek = obiekt 
-  Krawędź = relacja między obiektami 
-  Graf skierowany = krawędzie mają wyznaczony kierunek 
-  Krawędź może posiadać wagę (liczbę określającą np. odległość między wierzchołkami, gdy np. 

background image

graf = połączenia międzymiastowe) 

-  W grafie skierowanym waga zależy od kierunku przechodzenia przez krawędź (np. w mapach) 

Tablica 

-  Kontener danych dostępnych, poszczególne komórki dostępne są za pomocą kluczy (o 

wartościach numerycznych) 

-  Tablica statyczna -> rozmiar ustalony z góry 
-  Tablica dynamiczna -> rozmiar zmienia się w trakcie wykonywania programu 

Rekord (struktura) 

-  Złożony typ danych w wielu językach programowania 
-  Grupuje logicznie powiązane ze sobą dane różnego typu w 1 obszarze pamięci 
-  Pola (składowe rekordu) są etykietowane (unikatowość nazw); podanie nazwy = dostęp do 

danego pola 

 

Techniki algorytmiczne: 
Dziel i zwyciężaj - problem dzieli się rekurencyjnie na dwa lub więcej mniejszych pod problemów tego samego 
typu tak długo, aż fragmenty staną się wystarczająco proste do bezpośredniego rozwiązania. Z kolei rozwiązania 
otrzymane dla pod problemów scala się uzyskując rozwiązanie całego zadania.  
 
Programowanie dynamiczne - rozszerzenie metody dziel i zwyciężaj; Jeżeli podproblemy, na które został 
podzielony problem główny, nie są niezależne, to w różnych podproblemach, wiele razy wykonywane są te 
same obliczenia.  
 
Algorytm zachłanny – algorytm, dokonujący w każdym kroku, najlepiej rokującego w danym momencie wyboru 
rozwiązania częściowego. Algorytm zachłanny nie patrzy, czy w kolejnych krokach jest sens wykonywać dane 
działanie. Dokonuje wyboru wydającego się w danej chwili najlepszym. 

 

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

zastosowań. 

 
Drzewo: 

 

kolekcja węzłów, w którym jeden wyróżniony jest jako korzeń (Root) oraz łączących je krawędzi 

 

reprezentuje hierarchię danych 

 

ułatwia i przyspiesza wyszukiwanie 

 

umożliwia łatwe operowanie posortowanymi danymi 

 
Elementy drzewa 

 

węzeł = element drzewa, korzeń = wyróżniony węzeł, liść = węzeł bez potomków, węzeł wewnętrzny węzeł 
mający 1 lub więcej potomków 

 

węzły powiązane są relacją rodzicielstwa (ang. parenthood

 

węzły są siostrzane (ang. siblings), jeśli mają tego samego rodzica 

 

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; największa głębokość (poziom) drzewa 

 

głębokość (poziom) węzła – długość ścieżki łączącej węzeł z korzeniem 

 

długość = liczba krawędzi leżących na unikalnej ścieżce z korzenia do tego węzła 

 

stopień węzła = liczba następników węzła 

 

relacja przodek-potomek (ojciec-syn) 

 

ścieżka – ciąg krawędzi łączących węzły; Istnieje 1 ścieżka łącząca korzeń z pozostałymi wierzchołkami 

 
Rodzaje: 

 

nieuporządkowane – kolejność węzłów dowolna 

 

uporządkowane 

 

etykietowane – etykiety przypisane do krawędzi lub węzła 

 
Zastosowania drzew: 

 

schematy organizacyjne 

 

dane genealogii (drzewa genealogiczne dla węzłów, które mogą mieć więcej niż 2 potomków) 

 

reprezentacja wyrażeń i składni kodu źródłowego w kompilatorach 

background image

 

analiza połączeń np. obwodów elektrycznych czy układów komunikacyjnych 

 
podstawowe typy drzew 

typ 

opis 

Rysunek 

Drzewo 
binarne BT 

-  każdy z węzłów posiada lewe i/lub prawe poddrzewo (gdy nie 

posiada = puste) 

-  węzeł x takiego drzewa posiada atrybuty: x.key, x.left i x.right 
-  reprezentacja: tablicowa, rodzicielska, dowiązaniowa 
-  operacje: przeglądanie drzewa 
-  pełne drzewo binarne = wszystkie wewnętrzne węzły stopnia 2 

i jednakowa głębokość wszystkich liści 

-  zrównoważone drzewo binarne = pełne drzewo binarne do 

głębokości d-1, a wszystkie węzły na głębokości d po lewej 
stronie; implementacja: kopiec (tablice) 

-  częściowo uporządkowane = węzeł rodzica ma wartość nie 

mniejszą od dzieci, element korzenia poddrzewa największym 
elementem tego poddrzewa 

-  implementacja: dwu lub trój odsyłaczowa 

 

-  zastosowanie: zapis historii turnieju tenisowego, wyrażenia 

arytmetyczne z dwuargumentowymi operatorami (każdy 
operator węzłem, a jego argumenty poddrzewami) 

 

 

 

Drzewo 
poszukiwań 
binarnych BST 

-  dowolne drzewo binarne 
-  wierzchołki ułożone zgodnie z porządkiem symetrycznym 

(mniejsze wartości w lewej części, większe w prawej) 

-  operacje: wyszukiwanie, wstawianie, usuwanie, min/max, 

predecessor, successor 

-  złożoność obliczeniowa proporcjonalna do wysokości drzewa 
 
-  zastosowanie: zadania szybkiego sortowania/wyszukiwania 

elementów np. słowniki czy kolejki priorytetowe 

 

Zrównoważone 
drzewo BST 

-  różnica wysokości obu poddrzew każdego węzła w drzewie 

wynosi 0 lub 1 

-  jeśli wszystkie liście są na 1 lub 2-óch poziomach = drzewo w 

pełni zrównoważone 

-  można zrównoważniać drzewa BST (rotacja prawa i lewa) 
 
-  zastosowanie – ciąg Finobacciego (?) 

 

Zrównoważone 
drzewo AVL 

-  drzewa równoważone lokalnie 
-  w każdym węźle wysokość jego poddrzew różni się max. o 1 

poziom 

-  współczynniki zrównoważenia (różnice wysokości lewego i 

prawego poddrzewa): 1,-1,0 

-  operacje: wstawianie węzła, usuwanie, rotacje 
-  nie zmieniają drzewa: serach, min, max, successor, predecessor 
 
-  zastosowanie: szybkie wyszukiwanie 

 

background image

Drzewo 
czerwono-
czarne RB 

-  każdy węzeł jest czerwony lub czarny 
-  każdy liść (null) jest czarny 
-  gdy węzeł czerwony, to jego synowie czarni 
-  każda ścieżka z ustalonego węzła do liścia ma tyle samo 

czarnych węzłów 

-  każdy węzeł zawiera pola: color, key, left, right i parent 
-  operacje – jak dla AVL 
-  pesymistyczna złożoność: O(lgn) 
 
-  specjalne znaczenie w informatyce, umożliwia szybkie 

wyszukiwanie 

 

 

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

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

 
Lista  
-  skończona sekwencja elementów ułożonych w liniowym porządku 
-  struktura służąca do reprezentacji zbiorów dynamicznych 
-  Lista posiada głowę i ogon. 
-  Liniowo uporządkowany zbiór elementów 
-  W dowolnym miejscu można usunąć/dodać element 
-  Rodzaje: jednokierunkowa, dwukierunkowa, cykliczna 
-  Implementacja: tablicowa lub wskaźnikowa 
Pierwszy i ostatni element listy = końce listy 
 

Operacje podstawowe 

Operacje złożone 

Wstawianie, usuwanie, dostęp do elementu 
 

Wyszukiwanie elementu, wstawianie za/ usunięcie k-
tego elementu, przestawienie k-tego na 
początek/koniec listy, odwracanie/łączenie list 

 

Lista jednokierunkowa 

Lista dwukierunkowa 

 

 

 

 
 

Implementacja wskaźnikowa 

Implementacja tablicowa 

-  Każdy element listy składa się z co najmniej 2 pól: klucza 

i pola wskazującego na następny element listy 

-  Listy dwukierunkowe posiadają dodatkowo pole 

wskazujące na poprzedni element listy 

-  Wskaźniki = pola wskazujące na poprzedni/następny 

element listy 

 
Typy informacji: 
-  Klucz = informacja merytoryczna (widoczna na zewnątrz) 
-  Wskaźnik (widoczna wewnątrz) 

 

x.key (wartość pola klucza elementu listy), x.next (wskaźnik 
do następnika), L.head (wskazuje początek listy lub null gdy 
lista jest pusta) 

-  Lista opiera się na tablicy obiektów (lub rekordów) 

danego typu 

-  Tablica o rozmiarze wystarczającym do zapamiętania 

najdłuższej listy 

-  Zmiennej last z pozycją ostatniego elementu 
 
 
Dopisanie elementu do listy: 
-  Jeśli na końcu, to kolejny element tablicy 
-  Jeśli pomiędzy innymi elementami, to przesuwa się o 1 

pole w prawo wszystkie elementy o indeksie wyższym niż 
pole, na które będzie wstawiany obiekt; w lukę wpisuje 
się nowy element 

 

background image

 
Dopisanie elementu (prosta lista 1-stronna): 
-  Gdy na końcu listy, to wskaźnik obiektu ostatniego 

ustawia się na nowy obiekt danego typu 

-  Jeśli wewnątrz, to tworzy się nowy obiekt danego typu 

ze wskaźnikiem wiążącym ustawionym na następnik 
elementu, a następnie wskaźnik poprzednika ustawia się 
na ten obiekt (ważna kolejność! Inaczej nie będzie znany 
adres następnika) 
 

Usunięcie elementu 
-  Odwrotne do wstawiania – zapisuje się wskaźnik do 

usuwanego elementu, następnie wskaźnik poprzednika 
przestawia się na następnik, następuje zwolnienie 
pamięci po obiekcie usuwanym (wskaźnik tymczasowy) 

 
Zalety: dobra elastyczność (brak ograniczeń co do rozmiaru 
listy) 
 
Wady: bardziej skomplikowana nawigacja, wymaga uwagi w 
działaniu na wskaźnikach 
 
Zastosowania: aplikacje obsługujące pocztę elektroniczną, 
listy przewijane, zarządzanie pamięcią przez SO w sterowaniu 
procesami 

Usunięcie elementu pod danym indeksem tablicy: 

-  Przesunięcie o 1 pole w lewo wszystkich 

elementów o indeksie wyższym 

 
Lista dwukierunkowa może być reprezentowana przez wiele 
tablic (mamy 3 tablice, każda o tej samej długości, 
przechowują odpowiednio previous, key i next) lub w 
pojedynczej tablicy (prev, key i next zajmują 3 kolejne pozycje 
tablicy) 
 
Zalety: 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ść (zwłaszcza rozmiar tablicy, musimy 
znać maksymalny jej rozmiar), liniowa złożoność operacji 
wstawiania i usuwania (operacje te trwają dłużej), mniej 
efektywna (statyczna pamięć) 

 

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

 
Problem wyszukania najkrótszej ścieżki polega na znalezieniu w grafie ważonym najkrótszego połączenia 
pomiędzy danymi wierzchołkami np. 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. 
 

Nazwa 

algorytmu 

opis 

Dijkstry 

 

Dla grafów skierowanych i nieskierowanych 

 

„docierać tam, gdzie można się dostać najmniejszym kosztem”, przykład algorytmu zachłannego 

 

Znajduje najkrótszą drogę z wierzchołka p (źródło) do wszystkich innych lub wybranego wierzchołka k 

 

Wszystkie krawędzie grafu mają nieujemne wagi (wtedy używa się Bellmana-Forda) 

 

Polega na przypisaniu wierzchołkom pewnych wartości liczbowych (tzw. cechy wierzchołków) 

 

Cecha wierzchołka v może być stała (gdy równa długości najkrótszej drogi z p do v) lub tymczasowa 

 

Gdy graf nieważony (wszystkie wagi mają 1), zamiast Dijkstry stosuje się algorytm przeszukiwania grafu wszerz 
 

 

Złożoność zależy od liczby wierzchołków V i E krawędzi grafu 

 

O rzędzie złożoności decyduje implementacja kolejki priorytetowej (O(V

2

) przy implementacji tablicy, O(ElogV) 

dla kopca, O(E+VlogV) dla kopca Finobacciego) 

 
1)  Wszystkie wierzchołki (oprócz p) otrzymują tymczasowe cechy  , źródło p otrzymuje cechę stałą 0 
2)  Wszystkie wierzchołki połączone krawędzią z p otrzymują cechy tymczasowe (równe odległości od p) 
3)  Z wierzchołków z punktu 2 wybieramy ten o najmniejszej cesze tymczasowej, oznaczając go jako v i zmieniając 

jego cechę na stałą 

4)  Przeglądamy wszystkie wierzchołki połączone z v 
5)  Gdy droga z p przechodząca przez v do któregoś z wierzchołków z pkt. 4 ma mniejszą długość od tymczasowej 

cechy tego wierzchołka -> zmniejszamy tą cechę 

6)  Dopóki nie zamienimy cechy wierzchołka k (końcowego) na stałą, powracamy do punktu 3 

Zachłanny 

 

W celu wyznaczenia rozwiązania, w każdym kroku dokonuje najlepiej rokującego w danym momencie wyboru 
rozwiązania częściowego (zachłannego) 

background image

 

Inaczej - nie patrzy czy w kolejnych krokach jest sens wykonywać działanie, dokonuje lokalnie optymalną (w 
danej chwili najlepszą) decyzję, na podstawie której kontynuuje rozwiązanie pod-problemu 

Bellmana-

Forda 

 

Wolniejszy od algorytmu Dijkstry, ale bardziej ogólny 

 

Możliwa praca na wartościach ujemnych wierzchołków 

 

Służy do wyznaczania najmniejszej odległości od ustalonego wierzchołka s do wszystkich pozostałych w 
skierowanym grafie bez cyklu o ujemnej długości (bo wówczas najmniejsza odległość między niektórymi 
wierzchołkami jest nieokreślona, bo zależy od liczby przejść cyklu) 

 

Przykład – statek podróżujący w przestrzeni kosmicznej, węzły – galaktyki, wartości ujemne – tunele 
przestrzenne 

 

Koszta można nadrobić za pomocą wartości ujemnych. Przy cyklach ujemnych (suma kosztów wychodzi 
ujemna) koszt podróży może być nieskończenie mały, nie da się ustalić najmniejszej możliwości 

 
1)  Należy sprawdzić czy istnieje ujemny cykl, jak tak to zakończ algorytm z odpowiedzią „istnieje dowolna tania”. 

W przeciwnym wypadku należy poszukać najtańszej ścieżki, ale z uwzględnieniem wartości ujemnych 

2)  Kontrolujemy, czy rozwiązania z punktu 1 nie da się poprawić, jeśli tak to znaczy że istnieje ścieżka z ujemnym 

cyklem 

3)  Sprawdzamy długość ścieżki. Dla n wierzchołków nie może być dłuższa niż n-1 (bo brak cyklu) 

 

Najtańsze ścieżki (między punktem początkowym i końcowym) korzystają z innych najtańszych ścieżek 

 

Relaksacja krawędzi – jeżeli do wierzchołka A odległość wynosi x, a do B y i wierzchołki A i B połączone są 
długością c to do B można poprowadzić ścieżkę wiodącą przez A, której długość wynosiłaby x+c 
(pamiętamy, że wartości mogą być ujemne); poprawianie wyników sąsiadów z wykorzystaniem wyniku 
wierzchołka; wystarczy relaksować kolejne wierzchołki, wchodzące w skład najkrótszej drogi 

 

Ponieważ początkowo nie znamy krawędzi do najtańszej ścieżki, należy zrelaksować wszystkie krawędzie, 
Czynność tą powtarzamy n-1 razy (w ten sposób w każdej iteracji tworzy się nam fragment ścieżki) 

 
 

 

Złożoność przy prezentacji grafu za pomocą macierzy sąsiedztwa = 3 pętle for = O(n

3

). Gdy graf zapamiętany za 

pomocą listy krawędzi = 2 pętle for z wszystkich wierzchołków zastępujemy jedną przebiegającą po 
krawędziach = O(V*E) 

Floyda-

Warshalla 

 

dynamiczny 

 

Służy do znajdowania najkrótszych ścieżek między wszystkimi parami wierzchołków w grafie ważonym 

 

Jeśli najkrótsza ścieżka między wierzchołkami v1 i v2 prowadzi przez u, to jest ona połączeniem najkrótszych 
ścieżek między v1 i u oraz u i v2 

 

 

Złożoność obliczeniowa O(|V|

3

), pamięciowa: O(|V|

2

 
1)  Inicjowanie tablicy długości najkrótszych ścieżek, tak, że dla każdej pary (v1, v2) odległość wynosi: 

 

d[v1,v2]=0 gdy v1=v2 

 

d[v1,v2]=w(v1,v2) gdy (v1,v2)   E 

 

d[v1,v2]=   gdy (v1,v2) nie należy do E 

2)  włącz do swoich obliczeń ścieżki przechodzące przez kolejne wierzchołki 
3)  w k-tym kroku sprawdź, czy dla każdej pary wierzchołków można skrócić/utworzyć ścieżki między nimi 

(przechodzącej przez k; kolejność wierzchołków obojętna, ale niezmienna w programie) 

4)  Po wykonaniu |V| takich kroków -> długości najkrótszych ścieżek są wyliczone 

 
 

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 tłumaczący program na kod maszynowy, zrozumiały dla komputera 

 

Kompilator = translator, który tłumaczy kod z 1 języka (źródłowego) na inny język (wynikowy) 

 

Interpreter = inny typ translatora; program nie generuje programu wynikowego, tylko od razu wykonuje 
instrukcje tego kodu; wykorzystanie: języki poleceń powłok SO, języków wysokiego poziomu, ; 

background image

implementacja szybsza i prostsza niż w przypadku kompilatora, można uruchamiać częściowo napisane 
programy, możliwość częstej modyfikacji oprogramowania, maszyny wirtualne 

 

Podejście hybrydowe = możliwość wykorzystania interpretera dla języków zwykle kompilowanych 

 

Interpreter rzadziej wykonywany od kompilatorów (mała wydajność aplikacji), często wypierany też przez 
mechanizmy sprzętowe (np. koprocesory z kodem Javy) 

 

kompilacja 

interpretacja 

 

Wykonanie programu kompilatora następuje w czasie 
tłumaczenia 

 

Po przetłumaczeniu program jest niezmienny (statyczny) 

 

Dane wejściowe = cały program źródłowy, przekształcanie 
na postać wynikową 

 

Skompilowane moduły są łączone przez linker w jeden 
program wykonalny 

 

Wyodrębnianie niewielkich jednostek programu źródłowego, 
tłumaczeniu ich na postać wynikową, natychmiastowe ich 
wykonanie 

 

Proces interpretacji jest cykliczny 

 

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

 

Program wynikowy wykonuje się szybciej 

 

Do wykonania programu wynikowego nie potrzeba 
kompilatora 

 

Lepsza optymalizacja kodu (dedykowana pod daną 
architekturę) 

 

Łatwość zmian programu 

 

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

 

Możliwość pracy konserwacyjnej (zmiany w trakcie 
wykonania programu) 

 

Przenośność, zastosowania sieciowe 

1)  Plik edytowany jest w edytorze tekstowym 
2)  Proces kompilacji – z pliku źródłowego tworzony jest plik 

obiektowy (kod binarny zawierający kod maszynowy 

3)  Konsolidacja – łącznie plików obiektowych z pkt. 2 i 

bibliotecznych (plików binarnych); tworzy się plik 
wynikowy (program) będący plikiem binarnym, o formacie 
określonego typu 

1)  Plik edytowany jest w edytorze tekstowym 
2)  Proces interpretacji – interpretowane są pliki źródłowe 

projektu oraz pliki biblioteczne (nie w postaci binarnej); 
wynikiem jest wykonanie programu 

 

Kompilowane języki programowania -> kody po kompilacji 
to samodzielne programy, np. Delphi, Pascal, C, C++ 

 

Częściowo kompilowane – powstaje kod bajtowy (postać 
pośrednia) wymagający platformy uruchomieniowej, np. 
Java (JVM, Java RuntimeEnvironment), C# (.Net 
Framework) 

 

Języki wymagające interpretera 

 

Przykłady: Javascript (interpreterem przeglądarka), Perl 
(język ekstrakcji i raportowania), PHP (dynamiczne tworzenie 
stron internetowych), Python, Ruby, VBA (Interpreterem 
pakiet MS Office) 

 
Kompilacja – c.d. 

 

Proces 2-etapowy (etap analizy, etap syntezy) 

 

Analiza – 1-wszy etap. Tutaj program źródłowy rozkładany na części składowe, generowana reprezentacja 
pośrednia, oraz wykrywanie i zgłaszanie błędów 

  Analiza leksykalna (liniowa, skanowana) – grupuje znaki strumienia wejściowego w znaki 

leksykalne (tzw tokeny, czyli elementarne konstrukcje języka źródłowego, np. słowa, liczby, 
identyfikatory czy operatory); używany do rozpoznawania nierekurencyjnych konstrukcji 
języka 

  Analiza składniowa (syntaktyczna lub hierarchiczna) – bada, czy jednostki leksykalne tworzą 

poprawne konstrukcje języka źródłowego; rekurencyjne konstrukcje języka przetwarza parser 

  Analiza semantyczna 

-  sprawdza program źródłowy pod względem semantycznej zgodności z definicją języka 

źródłowego (kontrola zgodności typów), zbierane są informacje potrzebne do 
generowania kodu 

-  kontrola przepływu sterowania (sprawdzana poprawność użycia instrukcji sterujących 

przepływem sterowania, np. Goto - C,Pascal, break – C); kontrola poprawności deklaracji 
obiektów (sprawdzanie poprawności deklaracji obiektów w kodzie źródłowym przed 1-
wszym użyciem  

 

Synteza – na podstawie reprezentacji pośredniej generowany program wynikowy (w innym języku 
źródłowym lub postacią kodu wykonywalnego) 

  Generacja kodu pośredniego (języka/reprezentacji pośredniego/ej) – jest wiele rodzajów 

(zorientowane na język/maszynę/uniwersalne); cel – redukcja kosztów 
utrzymania/wytwarzania kompilatorów  

background image

  Optymalizacja kodu – poprawa efektywności kodu (przyspieszenie i redukcja rozmiarów); 

może być wykonana na poziomie kodu źródłowego/pośredniego/wykonywalnego; jest to 
złożony proces – dzięki technikom analizy przepływu danych i sterowania – wykonuje się 
transformacje ulepszające (niezmieniające semantyki programu); przykład – optymalizacja 
pętli w programie 

  Generacja kodu wynikowego – wejściem dla niej zazwyczaj pośrednia reprezentacja 

programu (proste kompilatory generują kod wynikowy bezpośrednio z kodu źródła); postać 
kodu asemblerowego, przemieszczalnego kodu maszynowego lub gotowego programu 
wykonywalnego; wykonywane są 2 czynności dla efektywności: wybór rozkazów i przydział 
rejestrów 

 

Język 

programowania 

Opis kompilacji 

C/C++ 

 

Java 

 

Uruchomienie programów w Javie = interpretowanie kodu pośredniego i wykonanie 
odpowiednich instrukcji kodu maszynowego (binarny kod właściwy dla danego procesora i SO) 

 

Do uruchomienia wykorzystuje się platformę Javy (środowisko uruchomieniowe aplikacji; JRE – 
środowisko składające się z Java Virtual Machine+ Java Application Programming Interfaces

 

Każda instrukcja kodu wynikowego (pośredniego) Javy jest interpretowana przez VM -> 
spowalnianie działania aplikacji -> aby przyspieszyć kod pośredni wprowadzono kompilację JIT 
(Just-in-time, kompilacja w locie = zamiana kodu pośredniego w kod binarny danego procesora i 
SO w czasie rzeczywistym – przyspieszenie programu) 

 

Jednokrotna kompilacja powtarzających się fragmentów kodu 

 

Oprócz VM systemu operacyjnego, do interpretacji kodu pośredniego wymagane są biblioteki z 
Java API) 

.NET 

 

Programy pod tą platformę nie zawierają kodu dla konkretnego procesora (*.exe zawierają kod 
pośredni tzw CIL – common intermediate language, który przed wykonaniem jest tłumaczony na 
kod maszynowy konkretnego procesora) 

 

W Javie w kodzie pośrednim jest kod bajtowy (pliki wykonywalne z rozszerzeniem CLASS), 
uruchomienie (wywołanie VM z nazwą programu jako parametrem, ); aplikacje w .NET 
uruchamiają się jak zwykłe *.exe (które potrafią wykryć obecność platformy .NET i wyświetlić 
ewentualnie komunikat); aplikacje Javy interpretowane wiersz po wierszu lub kompilowane na 
kod maszynowy tuż przed wykonaniem , w .NET aplikacje zawsze kompilowane przed 
wykonaniem (kompilacja w locie JIT) 

 

Java i .NET podobne, wymagają rozszerzeń systemu do odczytania kodu pośredniego (VM dla 
Javy, CLR – Common Language Runtime - dla .NET) 

background image

 

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

praktycznego zastosowania. 

 
Przeładowanie (przeciążanie) operatorów 
-  rodzaj polimorfizmu (1 interfejs, wiele metod) w niektórych językach programowania 
-  te same operatory są wykorzystywane do działania nad różnymi obiektami 
-  operator może mieć różne implementacje w zależności od typów operandów (argumentów) 
-  umożliwia posugiwanie się obiektami klas tak samo jak typami wbudowanymi (C++) 
-  poprawia czytelność kodu, umożliwiając zdefiniowanie większej części biblioteki standardowej na poziomie 

języka (bez tricków) 

-  wada: może spowodować powstanie niejasnych konstrukcji  
 
przykład – np. w C++ można zrobić klasy odzwierciedlające budowę wektorów. Dzięki przeciążeniu operatora 
„+”, można dodać parametry obiektu wektora „A” i „B”, a po przeciążeniu instrukcji przypisania przepisać do C. 
 

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

wykorzystania. 

 
Dziedziczenie 

 

Dotyczy programowania obiektowego 

 

Proces, w wyniku którego obiekt otrzymuje właściwości innego obiektu 

 

Zasada klasyfikacji – np. dziedziczenie klas – nie trzeba od nowa wypisywać właściwości obiektu, obiekt 
staje się specyficznym egzemplarzem ogólniejszej klasy) 

 

Przykład klasy bazowej i klasy pochodnej (bazowa posiada wspólne elementy dla klas pochodnych, klasa 
pochodna ma właściwości bazowej + własne rozszerzenia; posiadaja kompletny interfejs klasy bazowej) 

 

Wielodziedziczenie (wielopoziomowa hierarchia klas, klasa pochodna dziedziczy kilka klas bazowych oraz 
mieszane, które w C++ wykorzystują klasy wirtualne); języki, które wspierają, to: Eiffel, C++, Pytho, Perl itd. 

 
Przykładem może być klasa bazowa figura i klasa pochodna trójkąt (figura posiada jakieś pole, obwód, tablicę 
współrzędnych, a trójkąt precyzuje ile i jakie konkretnie współrzędne są mu potrzebne, może też wprowadzić 
dodatkowo np. kąt) 
 

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

zastosowania. 

 
Klasa abstrakcyjna 

 

Klasa bez reprezentantów w postaci obiektów 

 

Zależą od języka programowania 

 

Definiuje pewien interfejs dla klas pochodnych 

 

Uogólnienie innych klas, lecz sama jako taka nie istnieje 

 

Przykład: klasa abstrakcyjna figura i dziedziczące po niej klasy koła, trójkąta i kwadratu (figury nie da się 
określić, ale np. koło już tak) 

 

język 

Opis 

C++ 

 

Klasa abstrakcyjna posiada zadeklarowaną co najmniej 1 metodę wirtualną 

 

Klasa dziedzicząca musi implementować wszystkie odziedziczone metody czysto wirtualne 

 

Zapobiega powstaniu 2 kopii w momencie, kiedy klasa D3 dziedziczy po D1 i D2, które dziedziczą po B (klasa 
bazowa B odziedziczona jako funkcja wirtualna przez D1 i D2 powoduje powstanie tylko 1 kopii tej klasy w 
klasie pochodnej; D1 i D2 mają identyczne kopie) 

 

Jeśli chcemy zobaczyć zmienną składowej pochodnej typu virtual, to zobaczymy zmienną klasy bazowej 

 

Różnica między zwykłą a wirtualną funkcją pojawia się gdy obiekt dziedziczy klasę bazową więcej niż 1 raz 

 

Funkcja abstrakcyjna – prototyp funkcji wirtualnej, klasa pochodna powinna mieć swoją implementację 
funkcji abstrakcyjnej; klasa abstrakcyjna = posiada co najmniej 1 funkcję abstrakcyjną 

Java 

 

Klasę abstrakcyjną tworzymy na 1 z 2 sposobów: za pomocą słowa kluczowego abstract (klasyczna klasa 

background image

abstrakcyjna) lub za interface (abstrakcyjny interfejs) 

 

Klasa abstrakcyjna nie musi posiadać metod czysto wirtualnych (jednak takie podejście jest rzadsze – klasa 
nieinstancjowalna) 

 

Jeśli przynajmniej jedna metoda zadeklarowana jako wirtualna (abstrakcyjna), to klasa jest abstrakcyjna 
(przy czym klasa abstrakcyjna może mieć również konkretne pola i metody) 

 

Jeśli wszystkie metody są wirtualne, to klasę można zadeklarować jako interfejs (definicja posiadająca 
jedynie operacje, bez danych) 

 

Metody abstrakcyjne pełnią rolę symbolu zastępczego dla metod, które są implementowane w podklasach 

 

Przy rozszerzaniu klasy abstrakcyjnej programista ma do wyboru jedną z dwóch opcji: może pozostawić 
niezdefiniowane niektóre lub wszystkie metody nadklasy - wtedy podklasa również musi być abstrakcyjna, 
albo zdefiniować wszystkie metody i wtedy podklasa nie jest abstrakcyjna. 

 

Klasę można zdefiniować jako abstrakcyjną, nawet jeśli nie zawiera żadnych metod abstrakcyjnych. 

C# 

 

Klasa abstrakcyjna jest zadeklarowana za pomocą słowa kluczowego abstract 

 
Funkcja wirtualna 

 

Specjalna funkcja składowa (zadeklarowana w klasie bazowej, zdefiniowana w pochodnej) 

 

Przydatne, gdy posługujemy się referencjami/wskaźnikami do obiektów  

 

W klasie bazowej funkcje wirtualne definiują postać interfejsu. Każde (ponowne) definiowanie funkcji 
wirtualnej w klasie pochodnej wyznacza specyficzną realizacje tej funkcji dla podanej klasy pochodnej 

 

Dla zwykłych funkcji z identycznymi nazwami wywołanie (z klasy bazowej/pochodnej) zależy od typu 
wskaźnika (a nie na to na co on wskazuje) 

 

Prawdziwy polimorfizm (używanie metod klasy pochodnej tam, gdzie spodziewana jest klasa bazowa) – 
korzystanie z metod klasy pochodnej korzystając ze wskaźnika, którego typ odnosi się do klasy 
podstawowej 

 

Polimorfizm dynamiczny (na etapie wykonania) 

 
 
Przykład zastosowania funkcji wirtualnej i klasy abstrakcyjnej – biblioteki klas (klasa bazowa widzi tylko 
składowe, które będą odziedziczone, pochodne zaś mają zdefiniowane realizacje metod wirtualnych dla 
każdego obiektu) 
 

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

 

Wyjątek: 

 

Mechanizm przepływu sterowania 

 

Używany w mikroprocesorach i językach programowania 

 

Do obsługi zdarzeń wyjątkowych (błędy) 

 

W wyniku błędu generowany jest wyjątek, obsłużony (zapamiętanie stanu programu, przejście do 
procedury jego obsługi; czasami po obsłudze wyjątku można powrócić do przerwanego kodu) 

 

Np. Obsługa błędu braku strony (pobranie brakującej strony z pliku wymiany, kontynuacja pracy programu), 
błąd dzielenia przez 0 (przerwanie obliczeń) 

 

język 

Opis 

C++ 

 

W bloku try dajemy podejrzane instrukcje 

 

Za blokiem try co najmniej 1 instrukcja catch 

 

W catch umieszcza się typ wyjątku (czyli to co nas interesuje) 

 

Nazwa typu nie jest konieczna, ale umożliwia odczytanie wartości 

 

Bloków catch najczęściej tyle, ile możliwych typów do złapania 

 

Przy wrzuceniu wyjątku konkretnego typu wpadnie on do 1-ego dobrego catch’a 

 

Zawsze dobrze zabezpieczyć się blokiem Catach łapiącego wszystko 

 

Rzucanie wyjątku throw – rzuca się jakiś obiekt; w tym momencie przerwane działanie funkcji i obiekt wędruje do bloków 
catch 

 

throw = obiekt 

Java 

 

Możemy sami rzucać wyjątki 

 

Można rzucać wyjątki standardowe (instancje klas zdefiniowanych w bibliotece standardowej Java SE) ale można też 

background image

definiować i rzucać wyjątki własne 

 

Definicja własnego typu wyjątku = implementacja klasy, będącej podklasą Throwable / Exceprion / RuntimeException 

 

throw {obiekt} 

 

throw New Exception(”wyjątek bla bla bla”); 

 

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

 

Nazwa metody 

opis 

rysunek 

System plików 
zwartych  
(przydział ciągły) 

 

Wszystkie bloki przylegają do siebie (zajmują spójny 
obszar) 

 

Za 1-wszym mamy 2-gi itd. aż napotkamy wskaźnik 
końca pliku 

 

Wskazanie na plik zawiera wskazanie na 1-wszy blok i 
długość pliku 

 

Struktura katalogowa – do odwzorowania adresu 

 

Najoszczędniejsze wykorzystanie przestrzeni danych – 
całość na dane 

 
Zalety: 
+  Najbardziej elastyczna organizacja danych 

(zniszczenie bloku -> lokalna utrata danych) 

+  Dostęp bezpośredni do bloku (początek: offset) 
+  Dodatkowy mechanizm innych systemów  
+  Odpowiednie dla baz danych 
+  Łatwo implementować dostęp swobodny i 

sekwencyjny 

 
Wady: 
-  Fragmentacja zewnętrzna (występuje tylko tutaj; 

chodzi o to że dziury z nieprzydzielonymi blokami są 
ułożone chaotycznie i może być problem z 
wrzuceniem danych) 

-  Problemowe usunięcie lub wstawienie bloku 

(przemieszczanie sąsiednich danych) 

 

 

 

(wpis katalogowy – przydział ciągły) 

Łańcuch 
powiązanych 
bloków 
(przydział listowy) 

 

Analogia listy jednokierunkowej 

 

Każdy blok zawiera wskaźnik do następnego bloku 

 

Ostatni blok zawiera adres pusty 

 

Część przestrzeni danych przeznaczona na wskaźniki 
do następnych bloków 

 

Bloki zajmowane przez plik są porozrzucane (nie 
zajmują wspólnego obszaru) 

 

Koniec 1 bloku pliku wskazuje na początek 
następnego 

 

Katalog usera wskazuje na początek 1-ego bloku pliku 
i ostatniego bloku pliku 

 
Zalety: 
+  Zastosowanie – sekwencyjne przetwarzanie plików 

(dostęp = czytanie kolejnych bloków) 

+  Brak fragmentacji zewnętrznej (bloki można w 

dowolnym momencie wykorzystać) 

+    
 
Wady: 
-  Dostęp sekwencyjny = mało elastyczna metoda 
-  Duża liczba dostępów do dysku (odczytanie pliku) 

 

 
 
 
 

background image

-  Duża liczba modyfikacji wskaźników (usuwanie pliku; 

by odzyskać obszar trzeba przejść cały łańcuch – 
znaleźć koniec) 

-  Mała elastyczność 
-  Uszkodzenie 1 bloku może wpłynąć i posadzić cały 

system plikowy (dowiązanie odwrotne – zmniejszenie 
ryzyka kosztem miejsca na dysku) 

 

(przydział listowy) 

Mapa plików 
(tablica alokacji) 

 

Stan dysku pamiętany w mapie plików 

 

1 blok dysku = 1 pozycja w mapie 

 

Bloki nieużywane = 0 w tablicy (sprawdzamy 0/1) 

 

Pozycja w katalogu -> element mapy reprezentujący 
1-wszy blok (ten element wskazuje na następny itd.) 

 

Ostatni blok pliku = wskaźnik pusty 

 

Jeśli uszkodzony system plikowy – pomocna 
nadmiarowa informacja (nr ID pliku) 

 

Sekwencyjny dostęp do pliku 

 

Warto trzymać dane w kupie 

 

Zapobieganie = kilka kopii FAT w różnych rejonach 
dysku (a nie jak DOS w kupie) 

 
Zalety: 
+  Polepszenie czasu dostępu swobodnego 
 
Wady: 
-  Uszkodzenie mapy plików = poważne straty danych 
-  2 kopie mapy w różnych rejonach dysku 

(minimalizacja utraty danych na wypadek awarii 
sprzętu) 

-  Znaczny ruch głowic dyskowych (sięganie do mapy 

plików) 

-  N bloków pliku = 2N dostępów do dysku (FAT + dane) 

 

Bloki indeksów 

 

Wskaźniki dowiązań do plików pamiętane w 
odrębnych blokach indeksów na dysku 

 

Duży plik = konieczność kilku bloków indeksów 
powiązanych w łańcuch 

 

Każdy blok ma wskaźnik do następnego bloku 

 

Pozycja w katalogu -> pierwszy blok w łańcuchu 
indeksów 

 

Każda pozycja bloku indeksowanego wskazuej na 
adres bloku plikowego 

 

Ostatni blok indeksów nie jest zazwyczaj zapełniony 
(utrata miejsca) 

 

Uszkodzenie bloku indeksów = poważna strata 
danych (przeciwdziałanie – kilka kopii) 

 

Linuks – w i-węźle pamiętane są wszystkie adresy 
bloków dyskowych zajmowanych przez plik 

 
Zalety: 
+  Swobodny (niesekwencyjny) dostęp do pliku (na 

podstawie nazwy i odległości w bloku indeksów) 

+  Brak fragmentacji zewnętrznej (bloki tracimy na bloki 

indeksów) 

 
Wady: 
-  Operacje wycinania/wstawiania w pliku – 

 

 

 
 
Struktura bloku indeksu: 
 
 

Schemat listowy: 

 

 

 
 

Indeksowanie wielopoziomowe 

 

 

background image

czasochłonne 

-  Metoda nie nadaje się do systemów z częstą 

modyfikacją plików 

-  Dla dużego dysku trzeba przeznaczyć kilka bloków 

indeksowych na schemat listowy/indeks 
wielopoziomowy/schemat kombinowany 

 
 

Ind. Komb. 

 

 

 

 
 
Metody dostępu: 

 

Sekwencyjny – informacja w pliku przetwarzana po kolei, 1 rekord po drugim (np. edytory tekstu) 

 

Bezpośredni – dyskowy model pliku (plik zawiera rekordy logiczne o stałej długości, 
odczytywane/zapisywane bez zachowania jakiegoś porządku); dysk umożliwia swobodny dostęp do 
dowolnego bloku 

 

Indeksowy – baza do opracowywania innych metod dostępu, różna konstrukcja indeksów; indeks – sposób 
dostępu do informacji (np. w Linuksie bloki pojedynczo/podwójnie/potrójnie pośrednie) 

 
Wydajność: 

 

metody przydzielania – różne w zależności od zapotrzebowania na pamięć i czas dostania do bloków 
danych 

 

przydział ciągły – pobranie danych wymaga 1 kontaktu z dyskiem (dostępność sekwencyjna i swobodna) 

 

przydział listowy – liczba dostarczonych do i-tego bloku i operacji czytania z dysku – dostęp sekwencyjny 

 

struktura pliku zależy od deklaracji typu dostępu 

 

konwersja typu pliku- kopiowanie do nowego pliku o wymaganym typie 

 
Określając obowiązujący w systemie rozmiar bloku bierze się pod uwagę poniższe kryteria: 
• 

Strata miejsca z powodu bloków nie zapełnionych całkowicie, która zwiększa się w miarę zwiększania 
rozmiaru bloków (fragmentacja wewnętrzna). 

• 

Strata miejsca związana ze wskaźnikami – im mniejsze bloki, tym więcej użytych wskaźników. 

• 

Jednostki przesyłania danych z urządzeń zewnętrznych do pamięci głównej- rozmiar bloku powinien być 
wielokrotnością tej jednostki. 

• 

Rozmiar obszaru pamięci głównej potrzebny do wykonania każdej operacji czytania lub pisania odnoszącej 
się do pliku. 

 
Struktura pliku zależy od dostępności, np. przy kopiowaniu do innego trzeba dokonać konwersji żeby można 
było dokonać kopiowania 
 

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

 

System 

plikowy 

opis 

FAT32 

 

Następca FAT16 

 

Wykorzystuje tylko 28 bitów (nie 32) = możliwość 

opisania 268 435 438 klastrów -> możliwość użycia na 

dyskach 16TB z sektorami 512-bajtowymi

 

 

32-bitowe pole w boot sektorze (określa rozmiar partycji w sektorach; partition boot sector – pierwszy sektor 
partycji z kodem ładowania SO) -> wielkość partycji nie może tu przekroczyć 2TB (512-bajtowe sektory) i 16TB (dla 
4096) 

 

Max rozmiar pliku – 4GB (wynika to z kompatybilności ze starszymi systemami i wielkości pola w tablicy katalogu 
określającego rozmiar pliku) 

 
Cechy: 

 

Prostota 

 

Brak mechanizmu zarządzania wolnymi sektorami dysku 

 

Pliki porozrzucane na dysku = częste fragmentacje 

 

Czasochłonne obliczanie wolnego miejsca 

 

Obsługiwany niemal przez wszystkie SO -> stosowany w przenośnych nośnikach danych 

 

Brak kontroli praw dostępu do danych 

background image

NTFS 

 

Standardowy system plików od Windows NT w górę 

 

Zastępca FAT, wykorzystał system HPFS 

 

Ulepszenie w stosunku do FAT: 

-  Obsługa meta danych (np. prawa dostępu) 
-  Dodanie struktur poprawiających szybkość pracy z dużą liczbą plików i dyskami o dużej pojemności 
-  Brak ostrego ograniczenia maksymalnego rozmiaru pliku na dysku 

 

Ulepszenia w stosunku do HPFS: 

-  Lista kontroli dostępu (ACL) 
-  Dziennik operacji dyskowych (ang. journal

 
Cechy: 

 

Wprowadzona quota 

 

Kompresja woluminów 

 

Obsługa rzadkich plików (plik rzadki – wypełniony zerami) 

 

Możliwość montowania woluminu w katalogu 

 

Volume shadow copy (copy on write) – przechowuje archiwalne wersje plików i katalogów 

 

Linki symboliczne (Windows Vista) 

Ext2 

 

Wykorzystany w Linuksie 

 

Następca ext 

 

Rozpoznanie uszkodzenia systemu plików (np. po awarii) przy starcie systemu -> automatyczne naprawianie szkód 
(programem e2fsck), uszkodzone pliki zapisywane w katalogu lost+fund 

 

Posiada mechanizm zapobiegający znacznej fragmentacji danych (przydzielanie bliskich bloków przez prealokację) 

 

Przy domyślnym rozmiarze bloku (4kb) obsługuje partycje do 16TB i pojedyncze pliki do 2TB 

 

Nazwy plików mogą mieć do 255 znaków długości 

 

Wolne pola w strukturach danych -> możliwość konwersji „w locie” do ext3 (w części z nich przechowywane dane 
ext3) 

 
Cechy: 

 

Hierarchia plików i katalogów za pomocą i-węzłów 

 

Każdy plik ma swój i-węzeł 

 

Każdy i-węzeł ma unikatowy numer w systemie plików 

 

Katalog = specjalny plik 

 

Stabilny i dobrze przetestowany 

 

Automatyczne sprawdzanie systemu po każdym niepoprawnym odmontowaniu i co jakiś czas 

 

Wolne sprawdzanie systemu plików (po jego niepoprawnym odmontowaniu) 

 

Niska wydajność dla bardzo małych plików 

Ext3 

 

Rozszerzenie i kompatybilność z ext2 

 

Dodatkowo posiada mechanizm księgowania – dokładny zapis zmian na dysku (w razie awarii umożliwia szybsze 
przywrócenie spójności systemu plików niż w przypadku ext2) 

 

3 tryby księgowania 

 

Brak możliwości odzyskania skasowanych plików (ext2 mógł) 

 

Nowa cecha: indeksowanie katalogów przy dużej liczbie plików -> większa wydajność 

 

Folder może posiadać maksymalnie do 32.000 podfolderów 

 
Zalety: 
+  niezawodność 
+  prosta implementacja 
+  znikoma fragmentacja plików 
+  małe obciążenie procesora (w porównani udo ReiserFS i XFS) 
+  kompatybilność i łatwa migracja do ext2 
 
Wady: 
-  utrudnione odzyskanie usuniętych plików (zerowanie wskaźników do węzłów usuniętych plików) 
-  zmiana wielkości partycji bez utraty danych możliwa jedynie po odmontowaniu i zamianie na ext2 (ReiserFS = 

możliwość zmiany pracującej partycji) 

background image

-  niepełna powierzchnia dysku dla danych 
-  max rozmiar partycji - 32 TiB 
 
 

Ext4 

 

kompatybilność wsteczna (ext2, ext3), o ile nie włączono mechanizmu extent 

 

większe limity rozmiaru (np. max rozmiar pliku – 16 TiB) 

 

mechanizm extent = pliki przechowywane w ciągłym zbiorze bloków (możliwość rezerwacji obszaru dysku dla 
danego pliku) 

 

w i-węźle przechowywane max 4 informacje o extent  (każdy taki zbiór może przechowywać do 128 MiB przy 
rozmiarze bloku 4kiB – przy większym rozmiarze pliku stosowane jest pośrednie adresowanie; dane te zastępują 
wskaźniki do bloków) 

 

możliwość prealokacji bloków pliku 

 

opóźniona alokacja – możliwość alokacji bloków dopiero w trakcie zapisu całego pliku na dysku 

 

większa liczba obsługiwanych podfolderów: max 64.000 

 

pozwala zredukować lub całkowicie wyeliminować fragmentację plików 

 
Uzupełnienie do ext3: 
 
Journaling 

 

jest to dziennik położony w dodatkowym miejscu na dysku 

 

przechowuje informacje na temat zmian danych i meta danych przed ich modyfikacją 

 

wprowadzenie atomowych operacji zmian danych 

- albo zmienimy wszystkie bloki i metadane, albo żadne 

 

skraca czas testowania systemu plikowego 

- czas przestaje zależeć od rozmiaru systemu plików 
 

Journaling Block Device 

 

miejsce księgowania realnie niezależnego od ext3 

 

jest przechowywane w i-węźle 

 

do właściwego journalingu służy interfejs JBD (interfejs niezależny od ext3, umożliwia dodatkowe 
księgowanie do dowolnego systemu plików na urządzeniu blokowym) 

 

interfejs JBD zachowuje w journalingu całe fizyczne bloki zamiast pojedynczych modyfikowanych bajtów 

 

wada: większe zapotrzebowanie na powierzchnię dyskową 

 

zaleta: uproszczenie systemu oraz ograniczenie wymuszeń na moc obliczeniową (blok zapisywany bez 
żadnej obróbki) 

 

ext3 ogranicza się do wywołania odpowiedniej funkcji JBD 

 

Tryby journalingu 

 

data = writeback  

-  księgowanie tylko meta-danych, największa wydajność (najczęstszy i najszybszy) 
-  spójność systemu plików 
-  na końcu plików zapisywanych przed awarią mogą pojawić się niepoprawne dane 

 

data = journal (pełne księgowanie - metadane) 

-  2 razy zapisuje bloki (journal i właściwa pozycja), pełne bezpieczeństwo (najwolniejszy) 
-  Wymaga wielu operacji dyskowych 

 

data = ordered  

-  szybszy od pełnego kronikowania 
-  zapełnia tylko metadane, jednakże dzięki specjalnej postaci zachowuje się podobnie do pełnego 

księgowania 

-  łączy modyfikacje danych i odpowiadające im meta-dane w logiczną całość w transakcje = atomowość 

(zapis najpierw danych, potem meta-danych) 

-  dopiero po zapisaniu danych na dysku zapisuje do journala 
-  zapisuje na dysk (docelowe miejsce) dane 
-  wykorzystuje 3 techniki: 

o  pominięcie odtwarzania wskazanych bloków z wcześniejszych transakcji (modyfikacje 

nieistniejących struktur nie mogą zamazać nowych danych) 

background image

o  nowe dane nie otrzymują zwolnionych bloków (gdy operacja zwolnienia nie została 

zatwierdzona w dzienniku; uniemożliwia zamazanie danych 1-ego pliku przed 2-gi) 

o  Prowadzenie listy osieroconych plików (pliki usunięte z katalogu, ale otwarte przez procesy; 

możliwość odzyskania/usunięcie nawet po awarii systemu) 

 

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

 
Zarządzanie wolną przestrzenią: 

 

Trzeba dbać o wtórne zagospodarowanie dla nowych plików przestrzeni po plikach usuniętych 

 

System utrzymuje listę wolnych obszarów 

 

Odnotowane są wszystkie wolne bloki (nie przydzielone do żadnego pliku/katalogu) 

 

Utworzenie/usunięcie pliku 

 
Rozmiar bloku – wielokrotność jednostki wybranej dla SO (ustalony, zwykle 1024 lub wielokrotności) 
Przy tworzeniu pliku SO sprawdza listę wolnych obszarów – gdy wystarcza miejsca, to przydziela obszary dla 
pliku i wymazuje je z listy (analogia przy usuwaniu) 
 
Metody zarządzania wolną przestrzenią (implementacja listy wolnych obszarów) 

typ 

opis 

rysunek 

Wektor 
binarny 

(bitowy) 

 

Wektor bitowy umieszczony w superbloku informuje, który blok jest 
zajęty (0), a który wolny (1) 

 

Każdy blok dyskowy reprezentowany jest przez 1 bit w wektorze 

 

Nr bloku = liczba bitów słowa x liczba wyzerowanych słów + pozycja 1-
ego bitu „1” 

 
Wady: 
-  Mało wydajny 
-  Tylko dla małych dysków (sam wykaz bitowy zajmuje dużo miejsca) 
 
Dla dysku 1,4 GB blok=512B, mapa bitowa 310kB 

 

Lista 

powiązana 

 

Indeks 1-ego wolnego bloku jest w specjalnym miejscu na dysku i 
pamięci (specjalne miejsce w systemie plików) 

 

Sposób powiązania bloków - w bloku poprzednim (końcowe bajty) 
znajduje się indeks bloku następnego 

 
Wady: 
-  Metoda niewydajna – przejrzenie listy = odczyt KAŻDEGO bloku 

(zazwyczaj szukany pierwszy blok) 

-  Trzeba przejść przez wszystkie elementy (tworzenie/usunięcie pliku) 
-  Przy tworzeniu szukamy 1-ego wolnego bloku 

 

Grupowanie 

 

W 1-szym bloku adresy wolnych bloków (indeks bloku 1-ej grupy 
wolnych bloków) 

 

Z pośród adresów n wolnych bloków, n-1 to bloki do alokacji a n-ty 
zawiera n-1 indeksów kolejnych wolnych bloków 

 

Ostatni z nich zawiera adresy następnych n wolnych bloków 

 

W wybranym obszarze systemu blokowego znajduje się wskaźnik do 
indeksu z n-1 wolnych bloków 

 
Zalety: 
+  Umożliwia szybkie odnajdywanie większej liczby wolnych bloków (dla 

dużego pliku, który wymaga dużej liczby wolnych bloków) 

 

background image

zliczanie 

 

Wykaz wolnych obszarów 

 

Adres 1-ego wolnego bloku + licznik kolejnych wolnych 

 

W przypadku kilku kolejnych (przylegających do siebie) wolnych bloków 
pamiętany jest tylko adres 1-ego z nich oraz liczba wolnych bloków 
znajdujących się bezpośrednio za nim 

 

Wykaz wolnych obszarów jest ciągiem wpisów składających się z indeksu 
bloku oraz licznika 

 
Zalety: 
+  Można jednocześnie zwalniać wiele bloków 

 

W przypadku przydziału miejsca dla pliku na dysku są 3 podejścia: przydział ciągły, listowy i indeksowy 
 
Katalog też ma przydzielane bloki (jak zwykły plik), ale jego struktura jest odpowiednio definiowana przez 
system, specyficzne są operacje dostępu 
 

16. Algorytmy planowania przydziału procesora. 

 

nazwa 

opis 

FCFS 

(ang. first 

come first 

served

 

Proces, który pierwszy zamówił procesor, 1-wszy go otrzyma 

 

Łatwa implementacja (kolejka FIFO) 

 

Blok kontrolny procesu wchodzącego do kolejki procesów gotowych jest dołączany do końca 

 

Wolny procesor przydziela się procesowi z czoła kolejki procesów gotowych 

 

Długi średni czas oczekiwania (sumuje się czas trwania faz poszczególnych procesów z sumami częściowymi i 
potem dzieli całość przez liczbę procesów) 

 

Niewywłaszczające (nie oddaje procesora innemu procesowi, dopóki ten, co wszedł się nie skończy lub zamówi 
operację we/wy) 

SJF 

(ang. 

shortest Job 

first

 

Najpierw najkrótsze zadanie 

 

Długość najbliższej z przyszłych faz procesora 

 

Jeśli fazy są równe, wykorzystuje FCFS 

 

Minimalny średni czas oczekiwania 

 

Planowanie długoterminowe (problem z poznaniem długości następnej fazy) 

 

Dobry do symulacji (minimalny średni czas oczekiwania), minimalny średni czas oczekiwania 

 

Niewywłaszczający lub wywłaszczający (wtedy gdy do kolejki wejdzie proces o krótszej fazie) 

Planowanie 

priorytetowe 

 

SFJ szczególnym przypadkiem planowania priorytetowego, gdzie PRI=1/długość fazy; priorytet zależny od 
długości fazy procesora 

 

Priorytet decyduje o wyborze procesu z kolejki procesów gotowych do wykonania 

 

Priorytet definiowany wewnętrznie (limity czasu, wielkość pamięci, liczba otwartych plików) 

 

Priorytet definiowany zewnętrznie (ważność procesu, opłaty, polityka) 

 

Wywłaszczające lub niewywłaszczające (wszystko zależy czy jest wywłaszczenie w systemie; priorytet procesu 
porównywany) 

 

Problem – nieskończone blokowanie (głodzenie nisko-priorytetowych procesów); rozwiązaniem jest 
postarzanie (aging), np. co 15 minut PRI+=1 (zwiększa się priorytet procesu) 

Planowanie 

rotacyjne 

(ang. round 

robin

 

Specjalnie dla systemów z podziałem czasu 

 

Kolejka procesów gotowych do wykonania traktowana jest jako kolejka cykliczna (składa się z bloków 
kontrolnych; wiele kolejek, procesy przechodzą między nimi) 

 

Planista przydziału procesora przegląda tę kolejkę i każdemu procesowi przydziela odcinek czasu nie dłuższy od 
1-ego kwantu czasu (jeśli kwant jest duży to mamy algorytm FCFS, a jak krótki to mamy tzw. dzielenie 
procesora – wrażenie, że n procesów ma własny procesor działający 1/n szybkości rzeczywistego procesora) 

 

Gdy faza procesora w danym procesie przekracza 1 kwant czasu, to proces będzie wywłaszczony i wycofany do 
kolejki procesów gotowych 

 

Implementacja – kolejka FIFO 

 

Długi średni czas oczekiwania 

 

wywłaszczający 

 
 

background image

17. Algorytmy zastępowania stron. 

 
Gdy brak wolnych stron, trzeba wytypować stronę-ofiarę, którą odsyła się na dysk (do zwolnionej ramki 
wprowadza się wtedy brakująca strona i uaktualnia się tablica stron) – przykład odwołania się do strony, której 
nie ma 
 
Algorytmy zastępowania stron: 

 

Powinny minimalizować częstotliwość braków stron (page-fault rate) 

 

Ocenia się je na podstawie wykonania ich na pewnym ciągu odniesień (reference string) do pamięci (ciąg 
adresów zredukowany do numerów kolejnych różnych stron) i sumowania braków stron (przy znanej 
liczbie ramek) 

 

Ciąg odniesień można tworzyć sztucznie lub na podstawie śledzenia danego systemu 

 
Przy wzroście liczby ramek maleje logarytmicznie błąd braku stron 
 

algorytm 

opis 

FIFO 

 

Ofiarą staje się strona, która najdłużej przebywa w pamięci (kolejka FIFO) 

 

Algorytm ten nie bierze pod uwagę właściwości obsługiwanych procesów i zastępuje strony na chybił-trafił 

 

Prosta implementacja i niewielkie narzuty 

 

 

Anomalia Belady’ego – liczba błędów braku stron przy wzroście liczby ramek zamiast maleć – wzrasta; dopiero przy 
minimum 5-ciu ramkach stan jest ustalony 

Optymalny 

(teoretyczny) 

 

Ofiarą staje się strona, która będzie nieużywana przez najdłuższy okres (problem z implementacją – nei wiadomo, do 
jakich stron w przyszłości algorytm będzie się odwoływać) 

 

Porównanie czysto-teoretyczne z innymi algorytmami 

 

Najniższy współczynnik braków stron ze wszystkich algorytmów 

 

Wolny od anomalii Belady’ego 

 

Trudny do realizacji (wymaga wiedzy o przyszłej postaci ciągu odniesień) 

LRU 

(least 

recently 

used

 

Ofiarą jest strona nieużywana od najdłuższego czasu 

 

Algorytm zastępowania najdawniej używanych stron używa niedawnej historii do oszacowania najbliższej przyszłości 

 

Lepszy od FIFO (mniej braków stron) i wolny od anomalii Belady’ego 

 

Często stosowany 

 

Trudności z zapamiętaniem historii użycia stron – może wymagać sporego zaplecza sprzętowego (oprogramowanie 
zbyt wolne); każda strona powinna mieć swój proces licznika (przy wyborze ofiary wybieramy stronę, która ma 
najmniejszą wartość licznika) 

 

Podobnie jak OPT, LRU to algorytm stosowy (zbiór stron przy n ramkach jest zawsze podzbiorem zbioru stron w 
pamięci przy n+1 ramkach) 

 

Efektywna przy wykorzystaniu mikroprogramów 

 
Określenie porządku ramek: 

 

Liczniki 

-  W każdej pozycji tablicy stron rejestr czasu użycia 
-  Wymiana strony z najmniejszą wartością rejestru 
-  Wymaga przeglądania tablicy stron 

 

Stos (2-kierunkowa lista ze wskaźnikami do czoła i końca 

-  Przy każdym odwołaniu do strony jej numer wyjmuje się ze stosu i umieszcza na jego szczycie 
-  Dno stosu – wskaźnik końcowy listy określa najdawniej używaną stronę 

Algorytmy 

przybliżające 

LRU 

 

Istnieje mało sprzętu do LRU – często stosuje się algorytmy przybliżające LRU 

-  Algorytm bitów odniesień 

o  Z każdą pozycją w tablicy stron związany jest bit odniesienia (ustawiony początkowo na 0) 
o  Przy odwołaniu do strony ustawia się naa 1 
o  Strona zastępowana w porządku FIFO, która ma bit odniesienia = 0 

-  Algorytm dodatkowych bitów odniesień 

o  Z każdą pozycją związany jest 8-bitowy rejestr ustawiony  początkowo na 0000 0000 
o  W regularnych odstępach czasowych SO wprowadza na najbardziej znaczącą pozycję rejestru bit 

background image

odniesienia 

o  Wymieniana jest strona najdawniej używana – najmniejsza liczba w rejestrze 
o  Jeżeli kilka stron ma taką samą wartość rejestru – wymiana wszystkich lub FIFO 

-  Algorytm drugiej szansy 

o  Strony przeglądane w porządku FIFO 
o  Sprawdzenie bitów odniesienia (0-zastąpiona, 1-druga sznasa) 
o  2-ga szansa = zerowanei bitu odniesienia, ustawienie czasu bieżącego (koniec kolejki) 
o  Cykliczne przewijanie stron 
o  Strona często eksploatowana nigdy nie będzie zastąpiona 
o  Ulepszony algorytm 2-ej szansy używa bitu odniesienia i modyfikacji 

 
Oprócz tego są algorytmy zliczające (licznik odwołań do każdej strony, odwołanie = +1 do licznika; wykorzystują 
algorytm LFU – zastępowanie strony o najmniejszym liczniku odwołań oraz MFU – odwrotnie; kosztowne) i 
algorytmy buforowania stron (pula wolnych ramek, lista zmienionych stron na dysk 
 
Szamotanie – zmniejszenie wykorzystania procesora przy zwiększeniu stopnia wieloprogramowości; gdy proces 
ma za mało stron, wysoka częstotliwość braku stron (wtedy planista pobiera dodatkowe procesy) 
 

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

niezawodności i wydajności. 

 
Macierz RAID 

 

system umożliwiający łączenie 2 lub więcej urządzeń blokowych (dysków) w jedną przestrzeń logiczną 
(wolumen) 

 

zalety: zwiększenie niezawodności i/lub wydajności odczytu i zapisu 

 

wady: konieczność stosowania prawie identycznych dysków (pojemność, czas dostępu) 

 

kilka typów macierzy RAID 

 

typ 

opis 

rysunek 

Raid linear 

JBOD 

 

pojemność dysków w macierzy zsumowana 

 

zapis liniowy, po przepełnieniu jednego dysku zapis danych na następnym 

 

zalety: 

  duża pojemność 
  łączenie dysków o różnych pojemnościach 
  mniejsze koszty 

 

wady: 

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

 

inne nazwy: NRAID (Non - RAID), append

 

 

Raid 0 

(ang. 

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 (proporcjonalnie do ilości dysków) 

 

wady: 

 

brak zabezpieczenia danych, awaria jednego dysku prowadzi do utraty 
wszystkich danych (szansa na awarię rośnie wraz z N)

 

 

zastosowanie – duże i wydajne macierze do multimediów 

 

background image

Raid 1 

(ang. 

mirroring

 

dyski łączy się parami 

 

dane zapisywane na obu dyskach (sekwencyjny lub równoległy) 

 

odczyt sekwencyjny z kolejnych dysków lub wyłącznie ze wskazanych dysków 

 

zalety: 

 

duża niezawodność, przy awarii jednego działa drugi 

 

możliwy równoległy odczyt z dwóch dysków 

 

możliwość zwiększenia szybkości odczytu i zmniejszenia czasu dostępu 

 

odporność na awarię n-1 dysków przy n-dyskowej macierzy 

 

wady: 

 

zmniejszona szybkość zapisu - konieczność zapisu na dwóch dyskach 
jednocześnie 

 

utrata połączonej pojemności macierzy (jest taka, jak najmniejszego 
dysku) 

 

Raid 2 

 

dane na dyskach są paskowane 

 

zapis: 1 bit/pasek 

 

potrzeba minimum 8 powierzchni do obsługi danych + dodatkowe dyski do 
przechowywania informacji generowanych za pomocą kodu Hamminga 
(korekcja błędów) 

 

liczba dysków do przechowywania tych informacji proporcjonalna do logarytmu 
liczby chroniących dysków 

 

połączone dyski zachowują się jak 1 duży dysk 

 

pojemność = suma pojemności dysków przechowujących dane 

 
zalety: 
+  każdy dowolny dysk (dane/kod Hamminga) w razie uszkodzenia może zostać 

odbudowany przez pozostałe dyski 

 
wady: 
-  konieczność dokładnej synchronizacji wszystkich dysków z kodem Hamminga 

(inaczej dezorganizacja i nieprzydatność tych dysków) 

-  długotrwałe generowanie kodu Hamminga (wolna praca całego systemu) 

 

Raid 3 

 

dane składowane na N-1 dyskach 

 

ostatni dysk = przechowuje sumy kontrolne 

 

działa jak Raid 0, ale w macierzy na dodatkowym dysku przechowywane są kody 
parzystości (obliczane przez specjalny procesor) 

 
zalety: 
+  odporność na awarię 1 dysku 
+  zwiększona szybkość odczytu 
 
wady: 
-  zmniejszona szybkość zapisu (kalkulowanie sum kontrolnych; eliminacja 

poprzez sprzętowe kontrolery Raid) 

-  awaria dysku = spowolniony dostęp do danych(obliczenia sum kontrolnych) 
-  odbudowa macierzy po wymianie dysku = kosztowna obliczeniowo, 

spowolnienie operacji odczytu i zapisu 

-  pojedynczy, wydzielony dysk na sumy kontrolne zazwyczaj jest wąskim gardłem 

w wydajności całej macierzy 

 

Raid 4 

 

dane dzielone są na paski i przenoszone kolejno naprzemiennie na poszczególne 
dyski; dane dzielone na większe bloki niż w raid 3 

 

“w locie” obliczane są kody parzystości i zapisywane na dodatkowym, 
dedykowanym dysku 

 

zalety: 

 

zwiększona niezawodność 

 

lepsze wykorzystanie przestrzeni niż w mirroringu 

 

dobre dla sekwencyjnego odczytu i zapisu danych (duże pliki) 

 

background image

 

wady: 

 

ciągłe obciążenie jednego dysku 

 

minimum 3 dyski 

 

obliczanie parzystości 

 

A xor B xor C xor D = P 

 

P xor B xor C xor D = A 

Raid 5 

 

Wartość parzystości zapisywana na różnych dyskach 

 

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 

 

zwiększony odczyt 

 

wady: 

 

skomplikowany i długotrwały proces odbudowania 

 

zmniejszona szybkość zapisu (kalkulacja sum kontrolnych) 

 

odbudowa macierzy po wymianie dysku – kosztowna (obliczeniowo, I/O) 

 

minimum 3 dyski 

 

Raid 6 

 

jak w RAID-5, ale występują tu 2 nadmiarowe dyski 

 

zalety: 

 

zwiększenie niezawodności 

 

odporność na awarię maksimum 2-óch dysków 

 

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 PAO procesom użytkowym: 

 

Brak podziału, wolna przestrzeń adresowa w danej chwili przydzielana 1-emu procesowi użytkowemu 
(wieloprogramowanie można realizować przez wymiatanie (ang. swapping)) 

 

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. 

 

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. 

 
Zarządzanie PAO: 

 

przemieszczanie procesów 

 

ochrona zawartości pamięci 

 

dostęp do obszarów dzielonych 

 

organizacja fizyczna pamięci 

 

organizacja logiczna pamięci 

-  adres logiczny – wytworzony przez procesor (adres wirtualny)  
-  adres fizyczny – umieszczony w rejestrze adresowym pamięci 
 

background image

Odwzorowanie adresów wirtualnych na fizyczne MMU (Memory Managment Unit – jednostka zarządzająca 
pamięcią).  
 
Przemieszczanie procesów:  

 

opis 

Ładowanie 

dynamiczne 

 

podprogram nie jest wprowadzany do pamięci dopóki nie zostanie wywołany 

 

wszystkie podprogramy przechowywane są na dysku w postaci kodów przemieszczalnych (gotowe do załadowania) 

 

podprogram sprawdza czy inny podprogram jest w pamięci (jeśli nie to używa programów łączących i ładujących 
moduły przemieszczalne – wprowadzają do pamięci i uaktualniają tablicę adresów programu) 

 
zalety: 
+  lepsze wykorzystanie pamięci – nieużywany program nigdy nie zostanie załadowany 
+  użyteczne kiedy od czasu do czasu trzeba wykonać duże fragmenty kodu (np. podprogram obsługi błędów) 
+  nie wymaga specjalnego wsparcia ze strony systemu operacyjnego – użytkownicy są odpowiedzialni za odpowiednie 

projektowanie programów  

Wymiana 

(swapping) 

 

proces może być tymczasowo odesłany z pamięci operacyjnej do pamięci pomocniczej (po pewnym czasie może być 
sprowadzony z powrotem) 

 

wymagana pamięć pomocnicza – na ogół szybki dysk (pojemny, umożliwiający bezpośredni dostęp do tych adresów 
pamięci) 

 

wtaczanie i wytaczanie = proces o niższym priorytecie odsyłany z pamięci, by proces o wyższym priorytecie mógł być 
załadowany i wykonany (algorytmy planowania priorytetowego) 

 

czas przesłania proporcjonalny do ilości wymienianej pamięci (główna składowa czasu wymiany) 

 

obecnie standardowa wymiana stosowana jest rzadko (zamiast tego stronicowanie) 

 

jest wiele zmodyfikowanych wersji swappingu w różnych SO 

nakładki 

 

przechowywanie w pamięci tylko tych rozkazów i danych, które są stale potrzebne 

 

inne wprowadzane w miarę zapotrzebowania, na miejsce zajmowane przez zbyteczne rozkazy i dane 

 
zalety: 
+  można uruchomić proces o rozmiarze większym od przydzielonej mu pamięci 
+  mogą być w całości implementowane przez użytkownika, ale projektowanie i programowanie nakładek jest 

skomplikowane – obecnie dość ograniczone w użyciu 

+  nie wymagają wsparcia ze strony SO 

Przydział 

ciągły 

 

procesy zawierają różną wielkość 

 

przydział ciągły = blok za blokiem 

 

pamięć poszatkowana = szachownica 

 

problem – gdzie umieścić procedury? 

 
Ochrona: 
Kontrola dostępu programów, procesów i użytkowników do zasobów zdefiniowanych przez system 
komputerowy. 
-  środki specyfikujące rodzaje wymaganej ochrony (polityka) 
-  środki ich wymuszenia (mechanizmu) 
-  miarą zaufania do systemu – ochrona i bezpieczeństwo 
-  kontrolowanie dostępu do programów, procesów lub użytkowników 
-  proces ma dostęp tylko do tych zasobów, do których został uprawniony 
-  ochrona kodu i danych SO przed procesami usera/ procesów wzajemnie przed sobą = rejestr graniczny i 

rejestr przemieszczenia 

-  rejestr przemieszczenia = wartość najmniejszego adresu fizycznego 
-  rejestr graniczny = górny zakres adresów logicznych 
 
Dynamiczny przydział pamięci  

 

jak na podstawie listy wolnych dziur spełnić zamówienie na obszar o rozmiarze n? 

Pierwsze dopasowanie 

(First-Fit) 

Najlepsze dopasowanie 

(Best-Fit) 

Najgorsze dopasowanie 

(Worst-Fit) 

-  dziury uporządkowane malejąco pod 

względem adresów bazowych 

-  szukamy najmniejszej dziury (są 

uporządkowane rosnąco) do której 

-  uporządkowane malejąco 
-  segment umieszczamy w pierwszej 

background image

-  szukamy najmniejszej dziury s<=xi 
-  po pewnym czasie wszystkie adresy małych 

dziur będą na początku listy 

 

 

przydziela się 1-wszą dziurę o 
wystarczającej wielkości 

 

wyszukiwanie od początku wykazu dziur 
lub miejsca ostatniego wyszukiwania 

 

dziury posortowane względem adresu 

 

najszybsza 

zmieści się nasz segment  

 

 

przydział najmniejszej z pasujących 
dziur 

 

najmniejsze pozostałości kosztem 
przeszukiwania całej listy  

 

dziury posortowane względem 
rozmiaru 

dziurze, a pozostałe miejsce tworzy 
nową dziurę 

 

 

przydział największej dziury 

 

wymaga przeszukiwania całej listy 

 

czasami bardziej przydatne niż wiele 
rozproszonych, małych dziur 

 

duże zużycie czasu i pamięci 

 
W pamięci występuje fragmentacja zewnętrzna - trzeba tak ułożyć dziury, żeby wszystkie małe tworzyły jedną 
dużą (ale spada wydajność systemu). Rozwiązaniem segmentacja i stronicowanie. 
 

segmentacja 

stronicowanie 

Schemat zarządzania pamięcią ukazujący sposób 
widzenia pamięci przez użytkownika 

 

przestrzeń adresów logicznych jest zbiorem 
segmentów 

 

segment = jednostka logiczna, np. program 
główny, procedura, metoda 

 

numeracja segmentów = łatwiejsza 
implementacja 

 

adres logiczny: <nr_segmentu, odległośc> 

 

tablica segmentów (odwzorowanie 2-
wymiarowych adresów logicznych w 1-
dnowymiarowe fizyczne; każda pozycja = baza 
segmentu (początkowy adres segmentu w 
pamięci) + granica segmentu (jego długość); 
przechowywana w pamięci ) 

 

czas dostępu do pamięci logicznej 2-krotnie 
większy od dostępu do fizycznej; metody 
zmniejszania tego czasu: 

-  liczba segmentów musi być 

ograniczona (można wykorzystać 
szybszą pamięć asocjacyjną – rejestry) 

-  wykorzystanie tablicy podręcznej 

segmentu (informacje o ostatnim 
zachowaniu segmentu (szybszy dostęp 
niż do tablicy segmentu)) 

 

inne rozwiązanie problemu segmentacji zewnętrznej 

 

przydział procesowi dowolnych dostępnych miejsc pamięci fizycznej ale 
ustalonymi porcjami (dopuszczenie nieciągłości logicznej przestrzeni 
adresowej) 

 

pamięć fizyczna podzielona na równe bloki (ramki; rozmiar od 512 B) 

 

pamięć logiczna podzielona na bloki takiego samego rozmiaru (strony) 

 

system utrzymuje info o wolnych i przydzielonych ramkach (tablica ramek) 
i do jakiego procesu są przydzielone 

 

strony działającego procesu obecne w pamięci pomocniczej wprowadza 
się do wolnych ramek PAO (n stron wymaga n ramek, porozrzucanych w 
różnych miejscach PAO) 

 

brak fragmentacji zewnętrznej kosztem fragmentacji wewnętrznej 
(ostatnia strona nie jest w 100% zapełniona) 

 

adres logiczny generowany przez procesor zawiera: 

-  numer strony s (index w tablicy stron) 
-  odległości na stronie o (o + adres bazowy = adres fizyczny 

pamięci, wysyłany do jednostki pamięci) 

 

rozmiar ramki = rozmiar strony 

 

strony lądują do dowolnych ramek 

 

dla procesu pamięć logiczna = spójny adres (gdy podział na strony, to 
bardziej znaczące bity = strona, mniej = przesunięcie) 

 

stronicowanie hierarchiczne – we współczesnych systemach 
komputerowych (np. 2-poziomowe – tablica stron podzielona na strony) 

 

duże strony = wzrost fragmentacji wewnętrznej, małe strony = wzrost 
rozmiaru tablicy stron (mniejsza fragmentacja wewnętrzna) 

 

cel: logiczny podział przestrzeni adresów 

 

rozmiar segmentów różny 

 

podział adresu programu na nr segmentu i bajtu 
jest logiczny (przekroczenie zakresu nr bajtu nie 
ma żadnego wpływu na nr. segmentu) 

 

cel: fizyczny podział pamięci 

 

identyczny rozmiar stron 

 

podział adresu programu na nr stron i bajtu na stronie wykonywany 
środkami sprzętowymi (przekroczenie zakresu = zwiększenie numeru 
strony) 

 
Pamięć wirtualna 

 

umożliwia wykonywanie procesów nie przechowywanych w całości w PAO 

 

abstrakcyjna pamięć główna (jednolita tablica, odseparowanie pamięci fizycznej i logicznej) 

 

logiczna przestrzeń adresowa może być większa od fizycznej 

 

możliwe wykonanie programu, który tylko w części jest w pamięci fizycznej 

 

większa wieloprogramowość (więcej procesów wykonywanych w tym samym czasie – lepsze wykorzystanie 
procka i przepustowości) 

 

wydajne tworzenie i wymiana procesów 

 

ułatwia programowanie 

background image

 

implementowania w formie stronicowania na żądanie (procesy podzielone na strony są w pamięci 
pomocniczej i sprowadzane do PAO) i segmentacji na żądanie 

 

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

 
Mechanizmy IPC (ang. Inter process communication) to grupa mechanizmów komunikacji i synchronizacji 
procesów działających w ramach tego samego SO 
 
Mechanizmy IPC obejmują: 

 

Kolejki komunikatów (przekazywanie określonych porcji danych) 

 

Pamięć współdzieloną (współdzielenie kilku procesom tego samego fragmentu wirtualnej przestrzeni 
adresowej) 

 

Semafory (synchronizacja procesów w dostępie do współdzielonych zasobów np. pamięci współdzielonej) 

 
Mechanizmy IPC: 

 

Część jądra systemowego (komunikacja przetwarzana w kontekście jądra – synchronizacja kosztem 
wydajności – każda operacja IPC wymaga przełączenia kontekstu, spory narzut czasu; niezawodność – 
atomowość operacji: niedopuszczenie do kolizji w dostępie czy wyścigu) 

 

Może odnosić się do komunikacji w 1 SO, klastrze czy systemami odległymi (używa się wtedy numery 
portów lub unikalnych nazw -RPC) 

 

Polega na budowaniu w pamięci/nośnikach dynamicznych struktur (przesyłanie komunikatów 
międzyprocesowych np. stan wątków) 

 

Nie posiada sztywnej specyfikacji (SO posiada semafory, które można wykorzystać w aplikacji) 

 

Wszystkie urządzenia IPC posiadają podobny interfejs (mechanizmy) 

 

Najważniejszą wspólną cechą jest klucz urządzenia IPC 

 

Klucz = liczba do identyfikacji obiektów IPC, umożliwiają wspólne użycie zasobów IPC przez kilka 
niespokrewnionych procesów 

 

Klucze różnych obiektów nie mogą się powtarzać 

 

Do znajdowania unikalnego klucza zależnego od ścieżki pliku służy funkcja fork() 

 

Użycie: rozbudowane wielowątkowe aplikacje (bazy danych, serwery WWW, serwery aplikacyjne…) 

 

nazwa 

opis 

Piki i blokady 

 

Najprostsza i najstarsza forma IPC 

 

Pliki – nie stosuje się do komunikacji procesów współbieżnych (czytelnik może wyprzedzić pisarza – 
rozwiązaniem łącza komunikacyjne) 

sygnały 

 

Przerwania programowe (DOS) 

semafory 

 

Używane do kontroli dostępu do zasobów systemu dzielonych przez kilka procesów (kontrola czasowa) 

 

Implementowany w jądrze, procesy otrzymują id semafora (możliwość odwołania) 

 

Problem synchronizacji czasowej – alternatywą rejony krytyczne i monitory (dla każdego języka 
programowania) 

Łącze 

nienazwane 

(komunikacyjne) 

 

Nie są plikami ale mają swój i-węzeł; brak dowiązania 

 

Uśpienie nadgorliwego pisarza, oczekiwanie nad-ambitnego czytelnika 

 

Komunikacja tylko w 1 stronę (też łącza nazwane) 

 

Łącza do których dostęp mają tylko procesy pokrewne (proces + potomkowie) 

 

Potomkowie dziedziczą deskryptory plików, łącza nienazwane oparte są 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 (korzysta najpierw proces, potem potomkowie) 

 

Gdy zrealizowany ostatni proces – zamknięcie łącza 

 

powolne 

Łącza nazwane 

 

Wykorzystują FIFO 

 

Łączą cechy pliku i łączy (1-kierunkowy przepływ danych) 

 

Identyfikowane przez nazwę 

 

Procesy niespokrewnione mogą przesyłać między sobą dane 

 

Łącze to ma dowiązanie do systemu plików (istnieje w systemie jako plik w jakimś katalogu) 

 

Pozostaje w systemie nawet po zakończeniu ostatniego używającego je procesu 

background image

 

powolne 

Kolejki 

komunikatów 

 

niewielka liczba danych 

 

stała/zmienna długość komunikatu 

 

operacje nadaj/odbierz 

 

procesy z uprawnieniami mogą pobierać komunikaty z tej kolejki 

 

Komunikacja między procesami 

 

Komunikaty umieszczone są w kolejce FIFO 

 

Gdy komunikat pobrany przez odbiorcę – usuwany z kolejki 

Pamięć dzielona 

(segmenty 

pamięci 

dzielonej) 

 

Obszar pamięci dzielony między kilkoma procesami 

 

Dane umieszczane przez proces w segmentach (obszar adresowy procesu wywołującego) 

 

Może z nich korzystać wiele procesów 

 

Najszybszy rodzaj komunikacji między procesami 

 

Komunikacja = obszar pamięci przydzielany kilku procesom (od razu procesy mogą korzystać z danych) 

Gniazda 

 

Wykorzystywane do komunikacji przez sieć (komunikacja międzyprocesowa) 

 

Możliwość komunikacji dwukierunkowej (przesyłanie i odbiór danych) 

 

Pojęcie abstrakcyjne (2-kierunkowy punkt końcowy połączenia) 

 

Właściwości: posiadają typ (sposób wymiany danych), lokalny adres (adres IP – węzeł w sieci), port 
(opcjonalnie; określa proces w węźle) 

 

Komunikacja w obrębie 1-ego systemu (gniazda dziedziny Uniksa) 

 

Komunikacja w wielu systemach 

RPC 

 

komunikacja w wielu systemach 

 

protokół zdalnego wywoływania procedur 

 

obsługiwany w bibliotekach języka Java 

 

potrzebny: 

-  serwer (program z usługami, nasłuchujący na wybranym porcie czy ktoś się nie łączy) 
-  klient (program korzystający z usług serwera, łączność przez sieć) 

 
 

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

 
Kilka prawd ogólnych: 

 

Urządzenie elektroniczne zasilane często z sieci energetycznej (zasilacze – transformacja napięcia 230 V 
użyteczne 12V, które jest prostowane za pomocą prostownika dwupołówkowego – przebieg tętniący; gdy 
podłączymy równolegle kondensator o odpowiedniej pojemności = zmniejszenie amplitudy tętnień = 
proces filtrowania; im większa pojemność kondensatora, tym przebieg napięcia wyjściowego bardziej 
przypomina przebieg stały) 

 

Duże natężenie prądu = stosuje się cewki włączone szeregowo z odbiornikiem (tzw. dławnikiem) (zmiana 
prądu w cewce = wygładzanie napięcia; powstaje napięcie przeciwdziałające zmianom) 

 
Filtr 

 

Fragment obwodu elektronicznego 

 

Przepuszcza lub blokuje sygnały o określonym zakresie częstotliwości/zawierającego określone 
harmoniczne 

 

Podział filtrów – przeznaczenie: 

-  Dolnoprzepustowe 
-  Górnoprzepustowe 
-  Środkowoprzepustowe 
-  środkowozaporowe 

 

podział filtrów – konstrukcja i rodzaj działania: 

-  pasywne 
-  aktywne 

 

podział filtrów – typ obwodów (niewielkie różnice na poziomie konstrukcyjnym): 

-  analogowe 
-  cyfrowe (DSP – cyfrowe przetwarzanie sygnałów, ciągi liczb; użyte te same prawa co analogowe) 

  

background image

Typ filtru 

opis 

rysunek 

pasywny 

 

brak elementów dostarczających energii do obwodu drgającego 

 

nie wnosi wzmocnienia, jedynie tłumi (zmniejsza) napięcie wejściowe 

 

zawierają tylko pasywne elementy RLC (jedno i wielostopniowe) 

 

można uzyskać wiele typów filtrów (połączenie elementów RLC) 

 

często wykonany z materiałów piezoelektrycznych z odpowiednio napylonymi 
elektrodami 

 

analiza układu w dziedzinie częstotliwości - graficzna reprezentacja =charakterystyka 
amplitudo-częstotliwościowa (tłumienie sygnału w zależności od częstotliwości; 
skala logarytmiczna) 

 

czas dojścia do stanu ustalonego:  =RC 

 

szeroko stosowany w elektronice 

 

przykłady: 

-  filtr dolnoprzepustowy - kondensator o dużej pojemności połączony równolegle 

do filtrowanego napięcia + ew. szeregowy opornik - > filtrowanie napięcia 
(przebieg stały) 

o  dla dużych częstotliwości tłumienie układu, dla małych napięcie 

wyjściowe równe wejściowemu (pasmo przepustowe i zaporowe) 

-  filtr górnoprzepustowy – do filtrowanego napięcia podłączenie kondensatora 

szeregowo i opornika równolegle (odwrotnie niż w dolnoprzepustowym) 

o  odwrotnie niż w dolnoprzepustowym 

 

dla dolno i górnoprzepustowego 

-  graniczna częstotliwość filtra : fs=1/(2 RC) 
-  charakterystyka amplitudowa w paśmie tłumienia: opadanie o 20db/dekadę 

 

 

częstotliwość graniczna – między pasmem przepustowym, a zaporowym 

-  napięcie wyjściowe jest mniejsze o 3 dB dla częstotliwości z zakresu pasma 

przepustowego 

-  dla prostych filtrów 1-nioogniowych RC i RL poszukuje się częstotliwości, żeby 

amplituda napięcia wyjściowego stanowiła 0,7 wejściowego (-3 dB) 

-  pasmo przepustowe = zakres częstotliwości, w którym układ cechuje się 

wzmocnieniem (albo brakiem tłumienia) 

 

 

jeśli natężenie prądu duże = cewki łączone szeregowo z odbiornikiem (LC) 

 

w zależności od podłączenia L i C można uzyskać: 

-  filtr środkowoprzepustowy (strojenie radiowych odbiorników AM) 
-  filtr środkowo zaporowy (tłumienie niepożądanego pasma częstotliwości) 

 

 

wszystkie charakterystyki filtrów można uzyskać poprzez szeregowe/równoległe 
połączenie kilku filtrów, jednakże: 

-  tłumienie sygnałów poza pasmem przenoszenia zbyt małe 
-  kaskadowe połączenie kilku filtrów = znaczne tłumienie amplitudy (też w paśmie 

przenoszenia) 

-  lepiej zastosować filtr aktywny 

 

Charakterystyka filtra 

dolnoprzepustowego RC 

aktywny 

 

elementy RLC + elementy sterujące i dostarczające energię do filtrowanego układu 
(wzmacniacze, układy nieliniowe) 

 

składa się z szerokopasmowego wzmacniacza (operacyjnego) i członu sprzężenia 
zwrotnego 

 

przykłady: 

-  filtr dolnoprzepustowy 
-  filtr górnoprzepustowy 
-  filtr środkowo-przepustowy 
-  filtr środkowo-zaporowy 
-  filtry multiple feedback (struktury realizacji elektronicznej filtru) 
-  Czybyszewa, Butterwortha … 

 

Filtr dolnoprzepustowy – ma pasmo przepustowe od strony niskich częstotliwości i 

 

Przykład aktywnego filtru 

górnoprzepustowego 

(trójkąt = wzmacniacz 

operacyjny) 

background image

zaporowe od wysokich 

 

Filtr górnoprzepustowy – wzmocnione charakterystyki RC 

-  Wzmacniacz operacyjny = element aktywny (ma odrębne zasilanie i po części 

dostarcza je do filtrowanego układu) 

 

Filtr środkowo-przepustowy 

-  charakterystyka częstotliwościowa ostro obcięta po obu stronach 

 

Lepsze tłumienie w paśmie tłumienia od pasywnych 

 

Możliwość konstrukcji filtrów z użyciem techniki cyfrowej i sterowne 
mikroprocesorowo 

 
Dobroć filtru 
-  Stosunek częstotliwości środkowej filtru do jego szerokości pasma 
-  Gdy filtr ma większą szerokość pasma przenoszonego – określenie względnej szerokości pasma 

(odwrotność dobroci, wyrażana w procentach częstotliwości środkowej) 

 

22. Wzmacniacz operacyjny. Parametry charakterystyczne, zastosowania. 

 
Wzmacniacz operacyjny 

 

Analogowy układ scalony 

 

Powszechnie traktowane jako wzmacniacze o sprzężeniach bezpośrednich i wejściu różnicowym 

 

Typy wzmacniaczy: 
-  Z wejściami symetrycznymi 
-  Z wejściami asymetrycznymi 

 

Zewnętrzny obwód sprzężenia zwrotnego = decydujący wpływ na ich sposób działania 

 

Charakterystyka: 

-  Duża oporność wejściowa (różnicowa, jak też między poszczególnymi wejściami, a masą) 
-  Wielkie wzmocnienie przy otwartej pętli sprzężenia zwrotnego 
-  Mała oporność wyjściowa (zerowa dla idealnego wzmacniacza) 
-  Szerokie pasmo przenoszenia częstotliwości (ideał – nieskończenie szerokie) 
-  Znikome szumy 
-  Stabilność temperaturowa 

 

Zasilany z zewnętrznego źródła napięcia (można pominąć na schemacie = czytelność), przeważnie stałym 
napięciem symetrycznym (2 źródła napięcia: + i – względem masy) 

 

Typowe wzmocnienia napięciowe: 3.000 do 1.000.000 

 

Wzmacniacz operacyjny posiada 2 wejścia: 

-  Nieodwracające (+) 
-  Odwracające (-) 

 

W zależności od tego, który potencjał będzie większy (na wejściu nieodwracającym czy odwracającym), taki 
znak napięcia będzie na wyjściu 

 

Niezależnie od konfiguracji pracy – ograniczony zakres zmian napięcia wyjściowego (nie większe od 
napięcia zasilania) 

 

Nasycenie = na wejście podane napięcie o wzmocnieniu przekraczającym zakres napięć zasilających, a 
napięcie wyjściowe jest mu równe lub niewiele mniejsze; efekt niepożądany (zniekształcenia nieliniowe 
sygnału) 

 
Analiza działania wzmacniaczy opartych na WO: 

 

Obwód wyjściowy wzmacniacza (z pętlą sprzężenia zwrotnego) stara się doprowadzić do zerowej różnicy 
napięć między jego wejściami 

 

Wejścia WO nie pobierają żadnego prądu z obwodów zewnętrznych 

 
Zastosowania: 

 

WO = punkt wyjścia dla analizy obwodów i producentów tych układów 

 

Przykłady zastosowań: 

-  Wzmacniacz odwracający (odwrócona faza wyjściowa) 
-  Wzmacniacz nieodwracający (duża impedancja wejściowa) 
-  Wzmacniacz różnicowy 

background image

-  Wzmacniacz sumujący 
-  Wzmacniacz różniczkujący 
-  Wzmacniacz całkujący 
-  Przesuwnik fazowy 
-  Komparator napięć (WO pracuje z otwartą pętlą wzmocnienia, przekazuje do wyjścia wzmocniony 

sygnał) 

o  Różnica napięć na wejściach powoduje duże zmiany napięcia wyjściowego (ogromne 

wzmocnienie WO) 

o  WO nasycony, napięcie wyjściowe ograniczone napięciem zasilania 
o  Napięcie niezrównoważenia – mimo, że napięcia wejściowe po zsumowaniu są równe 0, to 

wyjściowe jest różne od 0; w celu wyzerowania wyjścia trzeba dać niewielkie napięcie na 
wejście (miliwolty) 

-  Detektor przejścia przez 0 – sygnalizuje logiczną jedynką napięcie niższe od 0V podane na wejście 

układu 

-  Detektor wartości szczytowej (kondensator w układzie zapamiętuje na dużej szczytową wartość 

napięcia, szybko się ładuje prądem wyjściowym wzmacniacza, wolno rozładowuje) 

-  Ogranicznik amplitudy – ograniczanie amplitudy sygnału wyjściowego (napięcie wyjściowe nie osiągnie 

wartości większej niż ustalona przez diody Zenera, wchodzące w skład układu) 

-  Filtry aktywne 

 
Dodatkowe informacje: 

 

Różnicowe wzmocnienie napięciowe Au – stosunek napięcia wyjściowego do różnicowego napięcia na 
wejściu przy otwartej pętli sprzężenia zwrotnego.  

 

Wejściowa rezystancja różnicowa RID – rezystancja występująca między wejściowymi zaciskami 
wzmacniacza operacyjnego.  

 

Rezystancja wyjściowa RO – rezystancja występująca między zaciskiem wyjściowym, a masą we 
wzmacniaczu zrównoważonym z otwartą pętlą sprzężenia zwrotnego.  

 

Częstotliwość graniczna fT – największa częstotliwość, przy której wzmocnienie różnicowe (pasmo 
wzmocnienia jednostkowego) jest równe wzmocnieniu maksymalnemu (wzmocnieniu dla prądu stałego). 

 

23. Bramki i funktory logiczne. Tabele prawdy. Minimalizacja funkcji. 

 
Bramka logiczna 

 

Element konstrukcyjny maszyn i mechanizmów (układ scalony) 

 

Realizuje fizycznie pewną prostą funkcję logiczną (jej argumenty – zmienne logiczne - oraz wartości mogą 
przyjmować 0 lub 1) 

 

Podstawowe elementy logiczne (budujące układy logiczne, realizujące funkcje logiczne – wystarczą 2 z 
wymienionych; tzw. układy zupełne) 

-  Suma (alternatywa, bramka OR) 
-  Iloczyn (koniunkcja, AND) 
-  Negacja (NOT) 

 

Bramki funkcjonalnie pełne (można zbudować układ realizujący dowolną funkcję logiczną z samych 
NANDów albo NORów) 

-  Negacja koniunkcji (NAND) 
-  Negacja sumy logicznej (NOR) 

 

Bramka logiczna XOR stosowana w układach arytmetyki (sumatory, subtraktory) 

 

Funktory logiczne rzadko występują pojedynczo, częściej tworzą złożone układy logiczne 

 

background image

 

 
Minimalizacja funkcji logicznych - przykład 

 

Mam bramkę, która ma wejścia A,B i C oraz wyjście f, pytanie brzmi – jaką funkcje ona realizuje? 

 

 
 
Metody minimalizacji funkcji logicznych: 
-  Metoda Karnaugh 
-  Metoda Quine’a-McCluskey’a 
-  Metoda iteracyjnego konsensusu 
-  Metoda espresso 
 
Metoda Karnaugh – zasady (siatki, stany): 

 

Tworzymy siatki o takim rozmiarze, by ilość opisujących je zmiennych była równa liczbie sygnałów 
wejściowych 

 

Tworzymy tyle siatek, ile układ posiada wyjść 

Kanoniczna suma (dysjunkcyjna postać kanoniczna, AKPN): 

f=~ABC+A~B~C+A~BC+AB~C+ABC  // odczytuje argumenty dla wartości 1 

 

Postać kanoniczna iloczynu (koniunkcyjna postać kanoniczna, KAPN) 

f=(A+B+C)(A+B+~C)(A+~B+C) 

// odczytuje te pola gdzie f = 0 i odwrotnie 

 

UWAGA 

F = ABC + AB~C = (AB)(C+~C)=AB 

background image

 

Wewnątrz kratek danej siatki wpisujemy stany wewnętrzne, jakie mają pojawiać się na danym wyjściu przy 
odpowiadającej im kombinacji sygnałów wejściowych opisujących siatkę 

 
Zasady zakreślania jedynek: 
-  Ilość zakreślonych w grupie kratek musi być wielokrotnością 2

k

, k=0,1,2,3… 

-  Zakreślona grupa musi być symetryczna względem którejś z głównych (bądź podgłównych) osi siatki 
-  Możliwość „sklejania” skrajnych wartości 
-  Tworzymy implikanty/implicenty o jak największej ilości jedynek/zer (przy zachowaniu 1-ego warunku); im 

więcej kratek, tym mniej zmiennych 

-   
 
Tworzenie funkcji logicznej na podstawie stanów z siatki Karnaugh: 

 

Zakodowane stany zakreślamy w grupy (np. same jedynki – suma iloczynów; gdy same 0 – iloczyn sum) 

 

Odczyt funkcji wyjściowej  

-  należy popatrzeć na współrzędne zakreślonej grupy 
-  do wyrażenia iloczynowego wchodzą tylko zmienne niezmieniające się w obrębie grupy 
-  każda zakreślona grupa jedynkowa (tzw. implikant; grupy zerowe - implicent) jest 1-nym iloczynem w 

postaci kanonicznej 

 
 
Metoda Karnaugh – przykład: 
a)  ~ (p^qv~r^p) 

 

~r 

p^q 

~r^p 

p^qv~r^p 

 

 

Postać AKPN: ~p~q~r+~p~qr+~pq~r+~pqr+p~qr 

 

Z postaci AKPN należy zrobić tabele Karnaugh 

-  Należy użyć kodu greja dla argumentów 
-  Jeśli wyraz wystąpi to daj 1, jak nie to 0 

 

Tabela Karnaugh: 

pq\r 

00 

01 

11 

10 

 

 

W tabeli Karaugh zaznaczamy maksymalnie duży prostokąt możliwy do stworzenia i funkcje sklejone: 

 

pq\r 

00 

01 

11 

10 

 

 

Na podstawie odpowiednio zaznaczonych prostokątów z tabeli odczytuję argumenty (argumenty muszą 
być niezmienne): 

Y(p,q,r) = ~p + ~qr 

background image

 

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

 
Układ sekwencyjny: 

 

Jednym z rodzajów układów cyfrowych (obok układów kombinacyjnych) 

 

Stan wyjść zależy od stanu wejść i stanu poprzedniego (stanu wewnętrznego; zapamiętanego w rejestrach) 

 

Stan stabilny = stan wewnętrzny nie ulega zmianie pod wpływem dania różnych sygnałów wejściowych 

 

Może być opisany za pomocą 2-óch funkcji (A-stan wewnętrzny, X – wejście, Y - wyjście): 

-  Y = f(X,A)  <- wyjście zależy od stanu wewnętrznego i wejść; automat Mealy’ego 
-  Y = f(A)     <- wyjście zależy wyłącznie od stanu wewnętrznego; automat Moore’a 

 

Opis układu sekwencyjnego: 
-  Słowny 
-  Przebieg czasowy (zależności czasowe między X i Y) 
-  Grafy przejść (zależy od rozpatrywanego automatu) 
-  Tablice przejść i wyjść 

 
Typy układów sekwencyjnych 

asynchroniczne 

synchroniczne 

 

Zmiana sygnałów wejściowych X powoduje natychmiastową 
zmianę wyjść 

 

Założenie: jednoczesna zmiana kilku sygnałów jest 
niemożliwa 

 

Budowane z przerzutników lub ze sprzężenia zwrotnego 

 
+  Szybkie układy 
-  Podatność na hazard 
-  Wyścig (co najmniej 2 sygnały wejściowe zmieniają swój 

stan w 1 chwili czasu; w praktyce niezerowy czas 
przerzucania bramek i przerzutników – zmiana 1 sygnału 
może być wcześniej; skutkuje w trudnych do wykrycia 
błędach) 

 

Zmiana wewnętrznego stanu (i wartości wyjściowej) 
następuje wyłącznie w chwilach wyznaczonych przez sygnał 
zegarowy clock 

 

Posiada wejście zegarowe (clock, clk lub c) 

 

Nawet, gdy stan wejść się nie zmienia, to stan wewnętrzny 
może ulec zmianie (w kolejnych taktach zegara) 

 

W automacie Moore’a wyjście układu jest funkcją stanu 
wewnętrznego – możliwość zmiany jedynie w chwili 
nadejścia taktu (gwarancja utrzymania się stanu wyjść przez 
cały takt) 

 

Automat Mealy’ego – zmiana wyjścia układu może nastąpić 
też w momencie zmiany wejścia 

 

Układ statyczny (wyzwalany poziomem) = reaguje na 
określony stan logiczny zegara 

 

Układ dynamiczny (wyzwalany zboczem) = reakcja na zmianę 
sygnału zegarowego (wyzwalane zboczem narastającym 
/opadającym / impulsem) 

 

Układ autonomiczny = brak wejść, jedynie charakteryzuje go 
stan wewnętrzny (liczniki stosowane w zegarkach 
elektronicznych) 

 
Przykłady: 

 

Przerzutniki – układ z 2-ma stanami wyróżnionymi równowagi trwałej; przy przejściu z 1 stanu do 2 trzeba 
doprowadzić sygnał zewnętrzny wyzwalający krótkotrwały proces generacji 
-  Bez sygnałów wejściowych zachowuje swój stan 
-  Ma 2 dopełniające się wzajemnie wyjścia: Q i ~Q 

o  Przerzutnik RS (syn i asyn; z bramek OR/NAND, ma stany niedozwolone – na wejściach nie 

mogą być jednocześnie jedynki) 

o  JK (rozwinięty RS, brak stanów niedozwolonych; synchroniczny) 
o  D (synchroniczny; ma 1 wejście, przepisuje informacje z wejścia D do wyjścia Q z opóźnieniem 

1 impulsu taktującego) 

 

Rejestr = układ pamiętający (PI = wejście równoległe, SI – wejście szeregowe itd) 

-  Równoległe (PIPO) 
-  Przesuwne (SISO, SIPO, PISO) 
-  Zastosowanie przesuwne 

 

Licznik 

-  Rewersyjny (liczy w przód i tył) 

 

background image

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

Sumator 

 

Układ kombinacyjny 

 

Wykonuje operację dodawania 2 lub więcej liczb dwójkowych 

 
Sumator równoległy 

 

wielopozycyjne 

 

Jednocześnie dodaje bity ze wszystkich pozycji 

 

Przeniesienie realizowane w zależności od połączenia sumatorów jednobitowych 

Sumator równoległy – podział ze względu na sposób wytwarzania przeniesień: 

 

Sumatory z przeniesieniem szeregowym (sumatory kaskadowe/iteracyjne) 

 

Sumatory z przeniesieniem równoległym 

 

 

 

Sumator kaskadowy n-bitowy 

Sumator z przeniesieniem równoległym 

 

Układ powstały przez połączenie n sumatorów 1-bitowych 

 

Przy sumowaniu liczb dodatnich wejście przeniesienia 
początkowego C0 nie jest wykorzystywane (C0=0) 

 

Wszystkie cyfry dodawanych liczb 2-kowych podawane są 
na sumator jednocześnie 

 

Czas uformowania się wyniku zależy od prędkości propagacji 
sygnału przeniesienia przez kolejne komórki sumatora 

 

Najgorszy przypadek – sygnał C musi przejść przez wszystkie 
komórki sumatora 

 

 

 

Generuje wszystkie wartości przeniesień jednocześnie na 
podstawie wartości na poszczególnych bitach obu operandów 

 

Przy wzroście bitów przewaga nad sumatorem kaskadowym 
(mniejszy czas, szybszy o 20-40%) 

 

Zbudowany jest 

o  z bloków wyznaczających sumę Si + grupy generacyjne gi i 

propagacyjne pi (liczone niezależnie) 

o  z bloku generującego przeniesienia (zgodnie z 

rozwiniętymi wyrażeniami) 

 

w praktyce – buduje się 4-bitowe sumatory tego typu 

Jednostka arytmetyczno-logiczna 

 

Proste operacje na liczbach całkowitych 

-  Operacje logiczne 
-  Dodawanie/odejmowanie 
-  Przesunięcie bitowe 
-  Czasem mnożenie i dzielenie modulo 

 

Wykorzystywany często jako sumator (w rzeczywistości układ ten realizuje wiele innych funkcji – np. 
porównywanie wartości bezwzględnych liczb) 

 

Sumatory i ALU wykonują funkcje arytmetyczne w czasie od pojedynczych nanosekund do dziesiątków 
nanosekund (sumator = układ arytmetyczny, możliwość wyboru funkcji; ALU = arytmetyczny + logiczny) 

background image

26. Budowa i zasada działania procesorów: potokowy, wektorowy, CISCRISC. 

 

typ 

opis 

RISC 

 

stosunkowo niewiele rozkazów wykonywanych w pojedynczym cyklu rozkazowym,  

 

stosunkowo niewiele trybów adresowania,  

 

ł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 PAO  

 

układowo zrealizowana jednostka sterująca 

 
to co jest unikalne w tych procesorach: 

 

intensywne wykorzystanie przetwarzania potokowego, w tym potokowe wykonywanie rozkazów  

 

kompilatory o dużych możliwościach optymalizacji kodu wykorzystujące architekturę potokową,  

 

skompilowane funkcje zaimplementowane częściej programowo niż sprzętowo. 

CISC 

 

występowanie złożonych, specjalistycznych rozkazów (instrukcji) - 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 

 

pojedynczy rozkaz mikroprocesora wykonuje kilka operacji niskiego poziomu (pobranie z pamięci, operacja 
arytmetyczna, zapis do pamięci) 

Wektorowy 

 

w przeciwieństwie do skalarnego pozwala na przetwarzanie w pojedynczych cyklach całych wektorów danych 

 

operandy instrukcji = wieloelementowe zbiory liczb (możliwość przyspieszenia obliczeń) 

 

pracują na macierzy danych 

 

koncepcja rejestru wektorowego (zbiór konwencjonalnych rejestrów, których wartości można załadować z pamięci 1-
nym rozkazem 

 

stosowane we współczesnych superkomputerach 

Potokowy 

 

jedno z najlepszych rozwiązań 

 

wcześniej: procesor jednocześnie pracował tylko nad 1 instrukcją = niska wydajność (tylko 1 jednostka procesora 
zajmowała się działaniem, pozostałe elementy CPU oczekiwały lub nic nie robiły) 

 

teraz: niepracujące jednostki i bloki procesora przetwarzają jednocześnie inne instrukcje 

 

podział logiki procesora – wykonanie instrukcji - na wyspecjalizowane grupy; każda z grup wykonuje część pracy 
związanej z rozkazem 

 

grupy – połączenie sekwencyjne, praca równoległa (pobierają dane od poprzedniego elementu z sekwencji) 

 

potok wykonawczy (ścieżka przetwarzania instrukcji wewnątrz procesora) = podział procesu wykonania instrukcji na 
oddzielne, logiczne etapy 

 

każdy etap wykonywany niezależnie na określonym stopniu potoku (1 takt zegara) 

 

po pobraniu z pamięci instrukcja (1 po 2) przemieszczają się w potoku wykonawczym (przechodzenie przez kolejne 
stopnie) 

 

możliwość jednoczesnej pracy układów RISC nad wieloma instrukcjami (np. jednoczesne wczytywanie i zapis do 
rejestru) 

 

możliwość jednoczesnego wykorzystanie wszystkich bloków procesora (możliwość rozpoczęcia przetwarzania 
kolejnych rozkazów przed zakończeniem wcześniejszych instrukcji) 

 

po wykonaniu rozkazu w jednostce wykonawczej ma przygotowaną i oczekującą kolejną instrukcję (w przetwarzaniu 
prostym trzeba było pobierać wszystko od nowa) 

 

wzrost wydajności, przyspieszenie wykonywanych instrukcji 

 

problem: rozkazy skoku (konieczność przeczyszczania całego potoku i wycofania rozkazów które nastąpiły zaraz po 
instrukcji skoku; napełnianie potoku od początku do nowego adresu) – możliwość opóźnień (zależy od długości 
potoku) 

 

istnieją pewne metody przewidywania rozgałęzień (np. tablica historii czy przełącznik) 

 

inny problem: różne czasy trwania 1-nych etapów powodują czekanie innych 

 

postać rozkazu: pobranie, dekodowanie (określenie kodu operacji), obliczanie argumentów, pobranie argumentów, 
wykonanie rozkazu i zapis argumentu (wyniku do pamięci) 

background image

27. Klasyfikacja architektur komputerowych. 

 
Taksonomia Flynna 

 

klasyfikacja architektur komputerowych, opierająca się na liczbie przetwarzanych strumieni danych i 
strumieni rozkazów 

 

wyróżnia się 4 grupy 

 

nazwa 

opis 

SISD 

(single 

instruction, 

single data

 

1 wykonywany program = 1 strumień danych 

 

Klasyczny komputer sekwencyjny (1 procesor + 1 blok PAO) 

 

Ciąg instrukcji wykonywany sekwencyjnie, ale może zawierać elementy równoległości (przetwarzanie 
potokowe) 

 

Komputer z kilku procesorów wykonujących niezależnie od siebie programy = zestaw komputerów SISD 

 

Komputery skalarne (sekwencyjne) 

 

architektura von Neumanna 

SIMD 

(single 

instruction, 

multiple data

 

1 program = wiele strumieni danych 

 

1 wspólny układ sterowania dla wielu rozkazów 

 

Procesory przetwarzają równolegle te same instrukcje dla różnych danych (kolejne instrukcje = pojedynczy 
strumień) 

 

Brak możliwości realizacji różnych instrukcji równolegle 

 

Odpowiedni dla obliczeń równoległych z modelem równoległości danych (wymagana częsta synchronizacja) 

 

Komputery wektorowe 

MISD 

 

Wiele równoległych programów = 1 wspólny strumień danych (architektura przetwarzania równoległo) 

 

Odpowiednik: przetwarzanie potokowe(poszczególne instrukcje cząstkowe = te same dane) 

 

Zastosowanie: systemy z redundancją (wielokrotne wykorzystanie tych samych obliczeń) = minimalizacja 
błędów 

MIMD 

 

Wiele równoległych programów = każdy przetwarza własne strumienie danych 

 

Oddzielne jednostki sterujące dla każdego z elementów przetwarzających 

 

Możliwość realizacji instrukcji z różnych strumieni instrukcji dla różnych strumieni danych (w tym samym 
czasie) 

 

Możliwe wykorzystanie równoległości danych 

 

Np. komputery wielo[procesorowe, klastry, gridy 

 
 

28. Systemy przerwań. Aspekty sprzętowe i programowe. 

 
Przerwanie 

 

Sygnał powodujący zmianę przepływu sterowania (niezależnie od wykowanego programu) 

 

Powoduje wstrzymanie aktualnie wykonywanego programu i wykonanie przez procesor kodu procedury 
obsługi przerwania 

 

Charakter atomowy – przerwanie nie może przerwać innego przerwania blokowanie przerwań) 

 

Jedno z udogodnień sprzętowych (wymagania, jakie musi spełnić sprzęt) dla SO 

 
Typy przerwań 

sprzętowe 

programowe 

zewnętrzne 

wewnę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 
(klawiatura itd.) 

 

Informuje o zdarzeniach we/wy 

 

Urządzenie generuje sygnał 

 

Inaczej wyjątki 

 

Zgłaszane przez procesor dla sygnalizowania 
sytuacji wyjątkowych (dzielenie przez 0) 

 

Dzielą się na 3 grupy: 

-  Faults – gdy instrukcja powoduje błąd; gdy 

powrót do przerwanego kodu wykonuje tą 
samą instrukcję wywołującą wyjątek 

-  Traps – nie jest błędem, cel: wykonanie 

określonego kodu; debugery itd.; po 

 

Z kodu programu wywoływana 
jest procedura obsługi przerwania 

 

Pułapka obsługiwana przez SO 

 

Wykorzystywane do komunikacji z 
SO 

 

SO w momencie obsługi 
przerwania umieszcza kod 
wywołujący odpowiednie funkcje 
systemowe do odpowiednich 

background image

przerwania 

 

Procesor przerywa wykonanie 
instrukcji (odkłada na stos) i 
obsługuje przerwanie 

 

Koniec przerwania = powrót do 
wykonywanego ciągu instrukcji 

powrocie do przerwanego kodu 
wykonywana jest następna instrukcja 

-  Aborts = błędy, których nie można naprawić 

 

Zajmują część pozycji w tablicy wektorów 
przerwań (pozostałe numer dowolnie 
wykorzystane) 

rejestrów ustawionych przez 
program wywołujący lub 
oprogramowaniem wbudowanym 
(BIOS itd.) 

 
Inny podział: 

 

Blokowane 

 

Nieblokowane 

 

maskowane 

 
Przerwania wielokrotne (inne przerwanie w momencie obsługi innego) 

 

obsługa sekwencyjna (2-gie przerwanie czeka na zakończenie obsługi 1-ego) 

 

obsługa zagnieżdżona (nowe przerwanie jest obsługiwane a stare wstrzymane; po wykonaniu nowszego 
powrót do starszego przerwania) 

 

obsługa priorytetowa (przerwanie o wyższym priorytecie jest wykonywane, nawet gdy było już jakieś 
obsługiwane) 

 
Metody rozróżniania przerwania: 

 

Odpytywanie – procedura obsługi przerwania pytanie się kolejno wszystkich urządzeń czy to one 
spowodowały przerwanie 

 

Wektor przerwań – tablica systemowa, w każdej komórce określony rodzaj przerwania (obsługa) wraz z 
odpowiadającym mu kodem 

 

29. Omówić podstawowe tryby adresowania. 

 

 

Podział słowa rozkazu (format rozkazu wewnętrznego): pola i sposób ich dekodowania (wyróżnienie pola 
kodu operacji i pola adresowego) 

 

Pole kodu operacji = wiele pól, każde określa 1 element kodu operacji rozkazu (sama operacja); 

 

Pole adresowe = pochodzenie argumentów operacji, przeznaczenie wyniku; zawiera adres PAO, nr rejestru 
lub daną umieszczoną w rozkazie 

-  Zawartość pola adresowego rozkazu nie jest bezpośrednio użyta jako adres danej/rozkazu – procesor 

wykonuje na nim tzw. operacje adresujące (przekształcają go zanim zostanie wykorzystana jako 
ostateczny adres argumentu rozkazu) 

-  Tryb adresowania = rodzaj operacji, którą procesor wykonuje na zawartości pola adresowego 

(określony w 1 lub kilku polach należących do pola kodu operacji rozkazu; niekiedy tryb adresowania 
wynika wprost z kodu operacji rozkazu) 

 
Tryby adresowania: 

tryb 

opis 

Natychmiastowy 

 

Pole adresowe -> bezpośredni argument (dana dla rozkazu) 

 

Długość argumentu (operandu) zależy od kodu operacji + ewentualnie dodatkowego pola sterującego w 
rozkazie 

 

Stosujemy, gdy chcemy bezpośrednio z rozkazu załadować do rejestru prostą daną (bez odwołania do 
pamięci; bajt lub parę bajtów 

Adresowanie 

bezpośrednie 

 

Najbardziej podstawowy tryb adresowania 

 

Zawartość pola adresowego = finalny adres argumentu rozkazu w PAO (nie podlega przekształceniu) 

 

Stosujemy, gdy nie zależy nam na przesuwalności programu w PAO (wykonanie przy zapisie w ściśle 
określonym miejscu w PAO) 

Adresowanie 

pośrednie 

 

Rozkaz zawiera adres komórki PAO (w niej finalny adres operandu rozkazu) 

 

Komórka pamięci wskazana przez adres rozkazu pośredniczy w określeniu finalnego adresu 

 

Stosujemy, gdy chcemy, by finalny adres operandu mógł być dynamicznie wstawiony do komórki 
pośredniczącej w adresowaniu w czasie wykonania programu (gdy adres zależy od jakichś testów w yniku 
operacji poprzedzającego rozkazu) 

background image

Adresowanie 

indeksowe 

 

Inaczej: modyfikacja adresu przez indeksowanie 

 

Rejestry indeksowe = specjalne indeksy procesora (zawierają przesunięcie) 

 

Adres finalny operandu = adres istniejący w rozkazie + przesunięcie (rejestry indeksowe) 

 

Pozwala przesunąć adres zawarty w rozkazie o wartości rejestru indeksowego 

 

Jeśli użyty ten tryb we wszystkich rozkazach programu = możliwość wykonania programu przy załadowaniu w 
dowolne miejsce pamięci (trzeba napisać program wstawiając do rozkazów programu adresy umieszczenia 1-
ej instrukcji programu pod adresem 0-wym w pamięci, a następnie umieszczamy go w rejestrze indeksowym) 

 

Operacja indeksowania rozkazów programu = wszystkie adresy operandów przesunięte o tą samą wartość 
(zawartość rejestru indeksowego = przesunięcie) 

 

Dynamiczna realokacja programu w pamięci 

 

Rejestrów indeksowych w procesorze jest wiele(możliwość przydzielania różnym programom lub ich 
fragmentom) 

 

Rejestr indeksowy może być określony przy pomocy specjalnego pola wspomagającego kodowanie trybu 
adresowania w innym polu rozkazu (przydział fragmentu programu) 

Adresowanie 

względne 

 

Polega na modyfikacji adresu zawartego w rozkazie przez aktualną zawartość licznika rozkazów 

 

Dynamiczna przesuwalność adresów dostępu do danych (gdy nie znamy przesunięcia całości programu w 
stosunku do adresu zerowego) 

 

Finalny adres danej wyliczany względem bieżącej zawartości licznika rozkazów (do rozkazu wstawiamy 
przesunięcie danej w programie względem adresu następnego rozkazu np. komórek w przód lub tył) 

 

Dana musi być umieszczona w spodziewanym miejscu w pamięci (odległości od rozkazu wykorzystującego ją) 
– planowanie odległości obszaru danych programu od rozkazu 

Adresowanie 

pośrednie 

indeksowe 

 

Jednoczesna możliwość zastosowania adresowania pośredniego z modyfikacją adresu odczytanego z komórki 
pośredniczącej (poprzez zawartość rejestru indeksowego) 

 

Umieszczony w rozkazie adres wskazuje na komórkę przechowującą adres danej (możliwość dynamicznego 
wstawiania przez program; następnie stosuje się indeksowanie poprzez zawartość rejestru indeksowego; 
podprogram też może wstawiać jej zawartość) 

 

zawartość rejestru indeksowego -> komórka z operandem 

 

jest 2-poziomowe = dynamiczne określanie adresu danych + metoda wpisania adresu bazowego (modyfikacja 
przez rejestr indeksowy) 

Adresowanie 

indeksowe 

pośrednie 

 

najpierw modyfikacja adresu w rozkazie (zawartość rejestru indeksowego), potem stosowany do wskazania 
komórki pamięci (w niej finalny adres operandu rozkazu) 

 

możliwość dynamicznego określania adresów danych w programie (gdy wykonywany program); zapewnienie 
przesuwalności w obrębie całego programu (program pisze się od adresu 0-ego w pamięci – adresowanie 
indeksowe do wszystkich rozkazów poza tymi, które działają na danych wybieranych dynamicznie)  

 

rozkazy adresujemy używając adresowania pośredniego indeksowego (umieszczając adres komórki 
pośredniczącej – z  wyjątkiem 0 – w bieżącym rozkazie) 

 

załadowanie programu do pamięci = wpisanie do rejestru indeksowego wartości przesunięcia początku 
programu w stosunku do adresu zerowego (program ładujący) 

 

modyfikacja wszystkich adresów programu w trakcie jego wykonania 

Adresowanie 

rejestrowe 

 

stosuje się gdy dana dla rozkazu jest w rejestrze 

 

część adresowa rejestru = 1 lub więcej pól z identyfikatorami rejestrów 

 

często stosowane w tym samym rozkazie z innymi trybami adresowania PAO (rozkaz PAO i rejestrów 
procesora) 

Adresowanie 

rejestrowe 

pośrednie 

 

rejestr procesora o id umieszczonym w polu adresowym rozkazu = miejsce pobrania finalnego adresu 
operandu rozkazu 

 

możliwość dynamicznego określenia finalnego adresu operandu (odpowiednie załadowanie zawartości 
rejestru w zależności od programu) 

 
 
 
 
 
 
 
 

background image

Adresowanie wewnętrznej pamięci danych (mikrokontrolery): 

natychmiastowe 

bezpośrednie 

pośrednie 

bitowe 

rejestrowe 

bezpośrednie 

rejestrowe 

względne 

 

dane od razu 

 

w pamięci nie ma 
danych 

 

dana jest za 
kodem rozkazu 

 

np. 

mov A,#32H  
(A)<-32H 

adres bitu np. 
mov C,ACC.7 
(C)<-(ACC.7) 

adres określony 
na sztywny, po 
rejestrach np. 
mov A,R1 
(A)<-(R1) 

 

„prawdziwie” 
bezpośrednie 

 

Za kodem rozkazów 
podajemy adres z 
miejscem w pamięci z 
wartością 

 

Np. 

Mov A,32H 
(A)<-32H 

W rejestrach 
mamy zapisany 
adres np. 
Mov A,@R1 
(A)<-((R5)) 

przesunięcie 
względem 
jakiegoś adresu 

 
Dodatkowo asemblery umożliwiają adresowanie symboliczne i definicji bloków 
 
 

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. 

 
Rozkaz (instrukcja maszynowa) 

 

Najprostsza operacja do wykonania przez procesor 

 

Programowanie za pomocą rozkazów = asembler 

 

Lista rozkazów 

 

Kod rozkazu = rodzaj (kod) operacji + operandy (i/lub) adresy operandów operacji (łącznie z ewentualnymi 
argumentami) 

-  Kod operacji – określony w początkowej części kodu rozkazu (1-wszy bajt/jty); określa, w jaki 

sposób ma przebiegać dalsza realizacja rozkazu przez mikroprocesor 

 

Opis działania rozkazu: 

-  Wykonaj skok 
-  Pobierz kod rozkazu z komórki pamięci o adresie równym etykiety 

 
Grupy rozkazów z listy rozkazów: 

przesłań 

arytmetyczne i 

logiczne 

sterujące 

pozostałe 

 

Najczęstsze 

 

Brak zmiany 
informacji, ale 
przenoszą ją z 
miejsca na 
miejsce 

 

Przykład: MOV 

 

Przetwarzanie 
informacji 

 

Informacja jest 
zmieniana 

 

Np. ADD (+), SUBB (-), 
inkrementacja, 
dekrementacja, SWAP  

 

Zmiana kolejności 
wykonywania instrukcji 
programu (rozkazy skoku, 
bezwarunkowe i 
warunkowe wywołania 
programów, instrukcje pętli 
itd.) 

 

Charakterystyczne dla danego typu 
procesora 

 

Sterowanie pracą koprocesora, 
rozkazy sterujące, operacje w trybie 
chronionym itd. 

 

Podprogramy i operacje na stosie 
(PUSH, POP…) 

 
Lista rozkazów procesora: 

 

wszystkie rozkazy jakie potrafi wykonać dany procesor 

 

rozkazy – postać binarna + zapis symboliczny (czytelność; mnemonik (np. JMP) + argument) 

 

mnemonik = skrót (rodzaj operacji rozkazu), skrót angielskiej nazwy 

 
format rozkazu: 

 

zawiera: sposób rozmieszczenia informacji w kodzie + jej długość 

 

określa rozkład bitów rozkazu w odniesieniu do jego części składowych (zawiera kod operacji + adresy 
argumentów) 

 

w sposób jawny lub domyślny określa tryb adresowania każdego argumentu 

 

występuje więcej niż 1 format rozkazów (większość procesorów) 

 

format: kod rozkazu, mnemonik i argument (etykieta-kod-argumenty) 

 

background image

 

 
długość rozkazu 

 

im mniejszy rozkaz, tym zajmuje mniej pamięci i może być szybciej wczytany 

 

długi rozkaz = więcej informacji/dłuższe adresy 

 

wielokrotność jednostki transferu (słowa) – możliwe wyjątki 

 

słowo = wielokrotność długości znaku (gdy operacje na znakach brane pod uwagę, np. maszyny do obliczeń 
numerycznych) 

 
Sposób realizacji rozkazu 

 

Nie jest istotny dla użytkownika 

 

Wyznaczony przez projektanta mikroprocesora 

 

31. Typy i hierarchia pamięci w systemie komputerowym. 

 
Hierarchia pamięci (od najszybszej i najdroższej): 

 

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

 

pamięć kieszeniowa (podręczna lub cache)  

-  informacje przejściowe 

 

pamięć operacyjna (pamięć RAM) 

-  obszar bezpośrednio dostępny dla procesora 
-  rozkazy LOAD/STORE (komunikacja z procesorem poprzez rejestry) 
-  cykl rozkazowy: pobranie rozkazu z PAO do rejestrów, dekodowanie, realizacja (ew. pobranie 

argumentów) 

-  mała i ulotna (przechowujemy bajty) 

 

pamięć pomocnicza 9trwałe przechowywanie danych) 

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

 
Podział ze względu na trwałość zapisu 

długoterminowe 

krótkoterminowe 

 

stałe - zapis nie ulega zniszczeniu po 
wyłączeniu zasilania (ROM) 

 

ulotne – zapis ulega zniszczeniu (PAO, 
cache, rejestrowe…) 

 

pamięć statyczna – układy przerzutnikowe bistabilne (zawartość dopóty jest 
zasilanie; duża szybkość działania, duży pobór mocy, koszt, złożoność) 

 

pamięć dynamiczna – dynamiczne układy pamiętające MOS (czynnik pamiętający 
= tranzystor MOS; zanika szybko; zajmuje więcej miejsca, ale mniejszy pobór 
mocy i koszta; mała szybkość działania) 

 
Podział ze względu na dostęp do pamięci: 

 

pamięć o dostępie swobodnym (RAM; dostęp przez adres, jednakowa szybkość dla wszystkich komórek 
pamięci) 

 

cyklicznym – dostęp co pewien czas (pamięć dyskowa) 

 

sekwencyjnym – dostęp do kolejnych komórek odbywa się w pewnej stałej kolejności (pamięć taśmowa 

 

pamięć asocjacyjna – dostęp w sposób kierowany wewnętrznymi adresami ustalającymi kolejność 
przeszukiwania komórek 

 
pamięć podręczna 

 

cache – posiada: bank danych (pamięć danych), katalog pamięci cache i sterownika 

 

3 główne typy: 

-  Pamięć podręczna całkowicie asocjacyjna 
-  Z odwzorowaniem bezpośrednim 
-  Wielodrożną pamięć podręczną 

background image

32. Omów metody projektowania baz danych. 

 
Metody projektowania bazy danych: 

Wstępująca 

(bottom-up) 

Zstępująca 

(top-down) 

Strategia mieszana 

 

Od szczegółu do ogółu 

 

Początek na podstawowym poziomie z 
atrybutami (tworzenie aktorów, analiza fazy 
wymagań, usecasy) 

 

następnie analiza powiązań = łączenie ich w 
encje i związki między nimi 

 

proste bazy danych z małą liczbą atrybutów 

 

od ogółu do szczegółu 

 

integracja istniejących baz danych (bazy 
rozproszone) 

 

początek od stworzenia modeli danych z niewielką 
liczbą ogólnych encji/atrybutów/związków 

 

metoda kolejnych uściśleń = wprowadzenie 
encji/związków/atrybutów niższego poziomu 

 

projektowanie złożonych baz danych 

 

łączy cechy 
metody 
wstępującej i 
zstępującej 

 
Do projektowania potrzebny jest opis w języku naturalnym, na podstawie którego wyodrębnia się encje, 
atrybuty i zależności. Encje i atrybuty to rzeczowniki, zależności to czasowniki itd 
 
Tabele w bazie danych buduje się według określonych norm, dzięki którym baza będzie spójna, czytelna, dane 
nie będą zajmować zbędnego miejsca na dysku 
 
Prosty przepis na poprawny projekt bazy danych: 
1.  określenie zawartości BD 
2.  grupowanie danych z 1-ego punktu w tabelę (jednoznaczna charakterystyka danego obiektu) 
3.  każda tabela ma klucz główny (2 postać normalna) 
4.  kolumna = dane atomowe (1 postać normalna) 
5.  eliminacja zależności przechodnich (wykluczenie kolumn o wartościach nie zależnych bezpośrednio od 

klucza głównego, lecz innej kolumny – 3 postać normalna) 

6.  połączyć (w miarę możliwości) kolumny z 1 tabeli z kolumnami 2-ej tabeli w sposób jednoznaczny 

(jednoznaczna identyfikacja wierszy)  

 
Ogólniej: 
1.  szukamy obiektów odzwierciedlających w rzeczywistości 
2.  wiążemy obiekty 
3.  uściślamy, szukamy atrybutów … 
 

33. Omów relacyjny model danych. 

 
Relacyjny model danych oparty jest tylko na 1 podstawowej strukturze danych (relacje) 
Relacja = tabela zbudowana wierszy i kolumn (przy przecięciu każdej kolumny z każdym wierszem – wartość) 
Stosowany dla większości systemów zarządzania bazą danych 
 
Założenia relacyjnego modelu danych: 

 

BD = prostokątne tablice (określona liczba kolumn + dowolna liczba wierszy (krotek)) 

 

Tablice = relacje; każda tablica posiada unikalną nazwę 

 

Elementy krotek są atomowe (niepodzielne) i są wartościami 

 

Nie można 

-  Tworzyć wskaźników do innych krotek 
-  Tworzyć krotki ze zbiorem wartości (1 postać normalna) 

 

Porządek krotek/kolumn nie ma znaczenia 

 

Użytkownik nie widzi reprezentacji relacji/usprawnień dostępu do relacji 

 

Atrybuty = nazwy kolumn; wiersze = wartości atrybutów (w encjach) 

 

Klucz = wyróżniony atrybut lub grupa atrybutów należący/ca do danej relacji 

-  Wartość klucza = identyfikacja krotki relacji 
-  Integralność relacji = każda relacja musi posiadać klucz główny 
-  Inna identyfikacja krotki (wewnętrzny identyfikator) niewidoczne dla użytkownika 

background image

 

Manipulacja relacjami = operatory algebry relacji (makroskopowo; przetwarzanie „krotka po krotce” 
niedozwolone) 
-  Rachunek normalizacyjny 
-  Teoria normalizacji 
-  Algebra relacji np. selekcja, projekcja, złączenie, produkt kartezjański, unia 

 

34. Na czym polega proces normalizacji baz danych 

 
Normalizacja bazy danych 
• 

Proces identyfikowania logicznych związków między elementami danych 

• 

Proces projektowania baz danych, który będzie identyfikować takie związki - bez anomalii 

• 

Proces, podczas którego schematy relacji posiadające niepożądane cechy są dekomponowane na mniejsze 
schematy o pożądanych właściwościach 

• 

Nie usuwa danych, tylko zmienia schemat BD 

• 

Właściwości: 

-  Żaden atrybut nie może zostać zagubiony w trakcie procesu normalizacji 
-  Dekompozycja (podział atrybutów) tabeli nie może prowadzić do utraty informacji 
-  Wszystkie zależności funkcyjne muszą być reprezentowane w pojedynczych schematach tabel 

• 

Celem jest minimalizacja fizycznego rozmiaru BD i uniknięcie anomalii baz nieznormalizowanych 
 

Anomalia baz danych nienormalizowanych: 

 

anomalia dołączania – wstawienie informacji pozostawia puste pola w wierszach tabeli 

 

anomalia aktualizacji – zmiana 1 atrybutu pociąga konieczność zmian w wielu wierszach 

 

anomalia usuwania – niepożądane usunięcie innych danych przy usuwaniu jakiejś danej 

 
W celu wykonania normalizacji danych potrzebujemy: 
• 

zrozumienia zależności funkcyjnej – głównie pomiędzy kolumnami 

• 

zdrowego rozsądku 

• 

zrozumienia znaczenia danych ( definicja wymagań) 

• 

zrozumienia oczekiwań zleceniodawcy w stosunku do bazy danych 

• 

znajomości procesu normalizacji 

 
postacie normalne: 

1-wsza 

2-ga 

3-cia 

 

każda wartość atrybutu tabeli jest 
wartością atomową (pojedyncza 
wartość, a nie zbiór) 

 

zakaz definiowania złożonych 
atrybutów 

 

nie gwarantuje wyeliminowania 
anomalii (redundancja) 

 

Wszystkie kluczowe atrybuty muszą być 
zdefiniowane 

 

Wszystkie atrybuty muszą zależeć od 
klucza głównego. 

 

musi być w 1 PN 

 

każda tabela ma klucz główny 

 

klucz główny umożliwia 
identyfikację danych tabeli 

 

tabelę można rozbić na 
pomniejsze tabele, 
zawierające jakieś konkretne 
informacje  

 

Nie ma częściowych zależności 

 

Żaden atrybut nie jest zależny 
od części klucza głównego 
(kompozytowy klucz) 

 

Jeżeli klucz główny jest tylko 
jednym atrybutem, tabela jest 
w 2NF. 

 

Musi być w 2 PN 

 

wykluczenie kolumn o wartościach nie 
zależnych bezpośrednio od klucza 
głównego, lecz innej kolumny (eliminacja 
wartości przechodnich) 

 

eliminacja wszystkich pól niezwiązanych z 
kluczem głównym 

 

należy tak ułożyć strukturę, aby przy 
odpowiednim złączeniu dało się 
wyciągnąć odpowiednie dane 

 

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

 

Transakcja 

 

pewna ilość poleceń przesłana do systemu zarządzania celem przetworzenia jako całość (niepodzielnie) 

 

Sesja składa się z jednej lub większej liczby transakcji 

background image

 

Transakcje wykonywane są współbieżnie - jeżeli do bazy danych ma jednocześnie dostęp kilku 
użytkowników 

 

Transakcje współbieżne mogą być przeprowadzane na jeden z dwóch sposobów: 

o  Szeregowo - w momencie zakończenia jednej transakcji uruchamiamy następną 
o  Równolegle - wszystkie transakcje są realizowane jednocześnie - po jednej czynności na transakcję 

 
Cechy transakcji 
Każda transakcja powinna mieć następujące właściwości:  

 

Niepodzielność  (wszystkie operacje elementarne w transakcji muszą zakończyć się powodzeniem; jeśli nie, 
to transakcja jest wycofywana, przywraca się wtedy stan bazy przed) 

 

Spójność (integralność; baza danych musi być w stanie spójnym) 

 

Izolacja (różne poziomy izolacji, faktyczne wzajemne oddziaływanie transakcji współbieżnie realizowanych; 
czy dane z jednej transakcji widoczne w drugiej) 

 

Trwałość (jeśli transakcja zakończy się sukcesem, to zmiany na trwałe zapisane w bazie) 

 
Kończenie transakcji 

 

Wszystkie transakcje kończą się na jeden z dwóch sposobów: 

–  sukcesem (trwałe wprowadzenie wszystkich modyfikacji do bazy danych) 
–  porażką (odwołanie transakcji i odtworzenie stanu bazy sprzed jej rozpoczęcia transakcji) 

 

Z definicji, transakcja zakończona sukcesem nie może zostać odwołana 

 

System zarządzania zapisuje wszystkie podejmowane przez transakcję czynności w rejestrze transakcji - aby 
móc ją odwołać 

 
Zakończenie transakcji 
Status zakończenia: 
- zatwierdzenie 
- wycofanie 
 
Zakończenie jawne: 
- wykonanie poleceń kończących transakcję: COMMIT (zatwierdzenie) lub ROLLBACK (wycofanie) 
 
Zakończenie niejawne: 
- zakończenie sesji – zatwierdzenie 
- wykonanie operacji DDL lub DCL – zatwierdzenie 
- awaria – wycofanie 
 
Wycofanie i zatwierdzenie transakcji  

 

W trakcie wykonywania transakcja może być wycofana w dowolnym momencie (zignorowanie 
wprowadzonych zmian) 

 

Realizacja: ,,tymczasowe” wykonywanie transakcji.  

 

Zmiany danych są tylko obliczane i zapisywane w specjalnym dzienniku transakcji.  

 

Po zakończeniu wykonywania transakcji następuje jej zatwierdzenie, w wyniku czego zmiany są utrwalane 
w bazie danych.  

 
czynności:  

 

zwolnienie założonych blokad  

 

usunięcie punktów bezpieczeństwa  

 

sprawdzenie odroczonych ograniczeń integralnościowych (kontrola po wykonaniu polecenia 
modyfikującego dane)  

 

 trwały zapis zmian, wprowadzonych przez operacje w ramach transakcji (zmiany 1-nej transakcji widzi 2-
ga) 

 
 
 
 

background image

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

 
Model bazy danych 

 

Zbiór zasad opisujących strukturę danych w BD + dozwolone operacje 

 

Struktura danych = zasady określające model (encje) + ich związki 

 

Główne modele BD: 

-  Hierarchiczny (związki nadrzędny-podrzędny; drzewa) 
-  Relacyjny 
-  Sieciowy (grafowy) 
-  Obiektowy (obiekty i klasy obiektów) 
-  Sieci semantyczne 

 
Diagramy E/R (ERD): 

 

Diagram = graficzne przedstawienie związków między encjami 

 

Przejrzystość, łatwość implementacji, niezależność od systemu 

 

Wykorzystanie: walka z redundancją, sprawdzanie zależności, wizualizacji, projektowania 

 

Brak standardowej notacji 

 

Modelowanie relacyjnych baz danych, podejście zstępujące (encje i związki, potem szczegółowe 
informacje) 

 

Tworzy się encję (tabelę danych), w nich atrybuty (pola o różnych typach danych)  

 

Łączymy encje relacjami (Krotność): 

-  1 do 1 
-  1 do wielu 
-  Wiele do wielu (tworzy się dodatkową encję żeby nie duplikować danych i by tabele zależały od siebie) 

 

Oprócz krotności występuje też opcjonalność (czy encja musi być, czy może wystąpić wraz z inną itd.) 

-  Linia przerywana = opcjonalność związku, ciągła = konieczność 

 
UML (Unified Modeling Language): 

 

Ujednolicony język modelowania 

 

Notacja w modelowaniu analizy/programowaniu obiektowej/wym 

 

Typy diagramów: 
 

Struktury 

interakcji 

zachowań 

 

pakietów 

 

obiektów 

 

wdrożenia 

 

struktur złożonych 

 

komponentów 

 

klas 

 

czasowy 

 

przeglądu interakcji 

 

komunikacji 

 

sekwencji 

 

maszyny stanowej 

 

przypadków użycia 

 

czynności 

 

 

UML a BD: 
-  Większość aplikacji = pojęcie obiektowe 
-  Brak obiektowych BD 
-  UML = próba pogodzenia modelu obiektowego z relacyjnym (przekształcanie diagramu klas do 

relacyjnej BD) 

 

Typy relacji między klasami: 

asocjacja 

agregacja 

złożenie 

uogólnienie 

 

Zwykły, równorzędny 
związek między encjami 

 

Rodzaj asocjacji 

 

Wyraża relację typu całość-
część 

 

Separowana = może istnieć 
bez klasy agregującej 

 

Związek całość-część 

 

Podobny do agregacji, 
ale klasa agregowana nie 
może istnieć bez klasy 
agregującej 

 

Związek hierarchiczny 

 

Klasa nadrzędna 
bardziej ogólna od klasy 
podrzędnej 

 

Specjalizacja = 
odwrotna hierarchia 

 

Przechodzenie z diagramu klas do schematu relacyjnego: 
-  Konieczność sprowadzenia do fizycznego modelu danych (PDM) 

background image

-  Atrybuty klas automatycznie stają się kolumnami, identyfikatory -> kluczami głównymi (można 

wyznaczać inne pola jako kluczowe, gdy identyfikatory nie istnieją) 

-  Metody klasy -> procedury 

 

Diagramy klas = diagram ERD + szersze związki 

-  Szersze oznaczenia co do liczebności: 

 

1-dokładnie 1 

0..1 – zero lub 1 

 

 

0..* - dowolnie wiele 

 

1..* - co najmniej 1 

 

* - wiele 

 

6..8 – od 6 do 8 

 

 

Narzędzia do modelowania BD/diagramów: 

-  MySQL Workbench 
-  MS Visio 
-  Visual Paradigm 

 

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

 
Anomalie współbieżnego dostępu: 

anomalia 

opis 

Brudny odczyt 

(ang. dirty read

 

Groźna anomalia 

 

Transakcja odczytuje dane zmienione przez inną, wycofaną transakcję 

Utracona modyfikacja 

(ang. lost update

 

Groźna anomalia 

 

Transakcja przetwarzana współbieżnie odczytuje dane, które zmieniła inna transakcja 

 

2 transakcje modyfikują te same dane 

Niepowtarzalny odczyt 

(ang. non-repeatable 

read

 

Niegroźna anomalia 

 

Transakcja wykonuje wielokrotnie tę samą operację odczytu danych (odczyt atrybutów, które mogą 
zmienić inną transakcję), a my odczytujemy inne dane (1 komórka) 

 

Niby odczyt 1-nej wartości, a tak naprawdę wielu 

Fantomy 

(ang. phantoms

 

Niegroźna anomalia 

 

Polecenie select na BD, za każdym razem wyświetla coraz więcej danych 

 

inne pole rekordów (liczba zwracanych rekordów) 

 

Nadpisanie danych (użytkownicy modyfikujący dane) 

 
Poziomy izolacji transakcji: 

Poziom iż. \ anomalie 

Brudny odczyt 

Niepowt. odczyt 

fantomy 

Odczyt niezat.danych 

Odcz. zatw. danych 

Powtarzalny odczyt 

Uszeregowany 

Gdzie: + (możliwa), - (niemożliwa) 

 
 

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

 
Model ISO OSI 

 

Ustandaryzowany model sieciowy 

 

Warstwy wyższe (5,6,7) – współpraca z oprogramowaniem; interfejs do współpracy z warstwami niższymi 

 

Warstwy niższe (pozostałe) – odnajdowanie drogi do celu, podział danych na pakiety PDU, weryfikacja 
bezbłędności przesyłanych danych, ignorowanie sensu przesyłanych danych 

 

Każda warstwa zrealizuje odwrotne zadania (w zależności od kierunku) 

 
Korzyści: 

background image

 

Mniejsza złożoność 

 

Ustandaryzowane interfejsy 

 

Projektowanie modułowe 

 

Współdziałanie technologii 

 

Przyspieszony rozwój, uproszczenie procesu nauczania 

 
Warstwy: 

Nr 

Warstwa 

Charakterystyka 

aplikacji 

 

Połączenie procesów sieciowych z aplikacjami 

 

Interfejs między aplikacjami, a siecią (komunikacja, usługi sieciowe np. poczta, przesyłanie pliku) 

 

Specyfikacja interfejsu (do przesłania danych aplikacji przez sieć) 

 

Aplikacja = proces uruchomiony na odległych hostach 

 

Usługi interfejsu tej warstwy: gniazda 

 

Warstwa klienta i serwera (komunikacja przez warstwy niższe) 

prezentacji 

 

Reprezentacja danych 

 

Ruch w dół - przetwarzanie danych aplikacji do postaci kanonicznej (ten sam format) 

 

Ruch w górę – tłumaczenie formatu otrzymywanych danych dla systemu docelowego 

 

Kodowanie, konwersja danych, (de)kompresja, (de)szyfrowanie 

 

Negocjuje składnię przesyłanych danych dla warstwy aplikacji 

Sesji 

 

Komunikacja między hostami 

 

Synchronizacja danych różnych aplikacji 

 

Synchronizacja warstw sesji nadawcy i odbiorcy 

 

„wie, która aplikacja łączy się z którą” = właściwy kierunek przepływu danych (nadzorowanie połączenia) 

 

Wznawia połączenie po przerwaniu 

 

Ustanawia i zamyka sesje między aplikacjami (zarządzanie sesjami) 

Transportowa 

 

Połączenie typu end-to-end 

 

Segmentuje dane i łączy je w strumień 

 

Całościowe połączenie między stacją źródła i docelową (cała droga transmisji) 

 

Dzieli dane na części, numeruje i przesyła do docelowych stacji 

 

Wykorzystuje protokół: TCP (konieczność potwierdzenia odbioru; kontrola błędów transportu) i UDP (szybszy 
ale mniej bezpieczny, bez potwierdzeń) 

 

Kontrola integralności pakietów – odrzucanie błędnych pakietów 

Sieciowa 

 

Tylko ona zna fizyczną topologię sieci 

 

Używa 4-ech procesów: adresowanie, (de/en)kapsulacja, routing 

 

Trasowanie (drogi łączące komputery) 

 

Decyduje ile informacji przesyłać 1 połączeniem a ile drugim 

 

Ignoruje przesyłanie danych, gdy jest ich zbyt wiele 

 

Nie zapewnia pewności transmisji – pomija niepoprawne pakiety danych 

 

NPDU = paczka danych (sprawna łączność między odległymi punktami sieci) 

 

Routery 

 

Ruch w dół: enkapsulacja danych (pakiety zrozumiałe dla niższych warstw) 

 

Pakiety: IPv4, IPv6, ICMP … 

Łącza  
danych 
(liniowa, 
kanałowa) 

 

Nadzoruje jakość przekazywanych informacji (tylko dla warstwy niższej) 

 

Możliwość zmiany parametrów pracy warstwy fizycznej (obniżanie błędów przekazu) 

 

Ruch w dół: pakuje dane w ramki i wysyła je do warstwy 1 (inkapsulacja pakietów = ramki ze standardem) 

 

Ramka danych: id odbiorcy, nadawcy, (opow. adresy MAC), informacja sterująca, CRC… 

 

Rozpoznaje błędy niedotarcia pakietu i uszkodzeniem ramek -> naprawa 

 

Dzieli się na 

-  LLC (logi cal link control) = sterowanie łączem danych, kontrola transmisji 
-  MAC (media access control) – sterowanie dostępem do nośnika (współpraca z warstwą fizyczną) 

 

Urządzenia: most, przełącznik 

fizyczna 

 

Transmisja binarna 

 

Składniki sieci do obsługi elektrycznego odbierania i wysyłania sygnałów 

 

4 obszary funkcjonalne: mechaniczny, elektryczny, funkcjonalny i proceduralny (transmisja danych) 

background image

 

Brak weryfikacji integralności danych (tylko przesyłanie) 

 

Przesyła i odbiera sygnały zaadresowane dla wszystkich protokołów jej stosu i aplikacji wykorzystujących ją 

-  Nadawanie danych (dane z ramek do postaci binarnych, metoda dostępu do nośnika, szeregowe 

przesyłanie ramek danych) 

-  Odbiór – czekanie na transmisje hosta, odbiór strumieni, przesyłanie strumieni binarnych do łącza danych 

(złożenie w ramki) 

 
Model TCP/IP 

 

Inny standard sieci internet 

 

Ma mniej warstw niż OSI = prostszy 

 

Standard komunikacji otwartej = dowolne urządzenia 

 
Warstwy: 

nr 

warstwa 

charakterystyka 

Aplikacji 

 

Protokoły wysoko-poziomowe 

 

Reprezentacja danych, kodowanie, sterowanie konwersacją (aplikacje) 

 

Opakowuje odpowiednio dane 

 

Specyfikacja protokołów IP, TCP (internetowa, transportowa), a także przesyłania plików, poczty 
elektronicznej, zdalnego logowania, FTP, NFS (rozproszony system plików), SMTP (przesyłanie poczty), Telnet 
(zdalny dostęp do innego komputera), DNS … 

Transportowej 

 

Usługi przesyłania danych ze źródła do określonego hosta 

 

Logiczne połączenie między komputerami w sieci 

 

Podział/scalanie danych wyższych aplikacji w 1 strumień danych (połączenie logiczne) 

 

Dzieli dane aplikacji, wysyła segmenty (TCP i UDP) 

 

Kontrola przepływu, niezawodność, Transport typu end-to-end (między punktami końcowymi; tylko TCP) 

Internetowej 

 

Wybór najlepszej ścieżki dla pakietów w sieci i przełączanie pakietów 

 

Protokoły: IP (bezpołączeniowe dostarczanie pakietów, format pakietu), ICMP (kontrola + informacja), ARP 
(adres MAC dla IP), RARP (znajduje IP na podstawie MAC) 

Dostępu  
do sieci 
(interfejs 
sieciowy) 

 

Łącze fizyczne przekazujące pakiet IP do medium 

 

1+2 warstwa OSI 

 

Działają tu sterowniki aplikacji, modemów i innych urządzeń 

 

Działa tu wiele protokołów 

 

Odwzorowuje adresy IP na adresy sprzętowe i inkapsuluje IP w ramki 

 

Definiuje połączenie z fizycznym medium sieci w zależności od sprzętu/interfejsu sieciowego 

 
Różnice: 

 

Warstwa aplikacji TCP/IP = 5+6+7 OSI 

 

Dostęp do sieci  TCP/IP = 1 + 2 OSI 

 

TCP/IP bardziej elastyczny od OSI 

 

Brak stałej gwarancji dostarczania pakietów (w transportowej warstwie) 

 

TCP/IP nie przypisuje sztywno funkcji do każdej warstwy (elastyczność) 

 

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

 
Metody dostępu do medium 

 

CSMA/CD (Ethernet) 

 

Token Passing – przekazywanie znacznika, dostęp do medium = konieczność otrzymania tokena (ramki 
sterującej); sieci Token Ring i FDDI 

 

W modelu OSI – 2 warstwa (z MAC) = dostęp do nośnika 

 
Problematyka dostępu do medium 

 

Możliwość kolizji w sieci Ethernet (kilka urządzeń jednocześnie przesyła dane) 

 
Mechanizmy dostępu do nośnika 

 

Rywalizacja 

background image

 

Priorytet żądań 

 

Na zasadzie pierścienia 

 
CSMA/CD 

 

Protokół wielodostępu CSMA z badaniem stanu kanału (łącza) i wykrywaniem kolizji 

 

Wykorzystywany w sieciach LAN typu Ethernet 

 

Węzły są nadajnikami prądu o stabilizowanym natężeniu 

 

 

 

Jeśli kolizja – urządzenie wstrzymuje przesyłanie danych i informuje o kolizji (sygnał zagłuszania) 

 

Urządzenie/węzeł posiada dane do przesłania -> nasłuchuje łącza (sprawdzanie czy linie są wolne) 

 

Węzeł, który nie wysyła danych jedynie nasłuchuje, czy jakieś dane są przesyłane do niego 

 

Poziom sygnału informującego o kolizji jest wyższy od normalnie generowanego przez węzeł (pewność że 
każdy węzeł otrzymał informację o kolizji) 

 

Retransmisja między węzłami, między którymi doszło do kolizji (sprawdzanie zajętości kanału po losowym 
czasie) 

 

Konieczność potwierdzania każdej ramki – samo CSMA 

 

40. Adresowanie IP, podsieci i maski podsieci zmiennej długości. 

 
Podstawowe informacje: 

 

Adresowanie IP = przydział IP z puli adresów (podsieci) 

 

Prefix „/” = sposób zapisu maski, np. 
 

Przykładowa maska 

Odpowiadający jej prefix 

255.0.0.0 

/8 

255.255.0.0 

/16 

255.255.255.0 

/24 

-  Prefix określa liczbę bitów z jedynkami (licząc od lewej strony) 

 

Maska podsieci = identyfikacja części sieci i hosta IP (podział na podsieci = wydajność) 

 

Adres IP = sieć + host (oddzielenie poprzez funkcję AND dla maski i IP; 1AND1 = 1 r 0) 
 
Przykład: 
255.255.240.0 

Wartość tą zmieniamy na binarną 

1111 1111. 1111 1111.1111 0000.0000 0000 

Same 1 = część sieci 
Same 0 = część hosta 

 
Przykład: 
Adres IP: 

 

 

192.168.1.1 

->  1100 0000.1010 0100.0000 0001.0000 0001 

Maska: 

 

 

255.255.255.0 

->  1111 1111.1111 1111.1111 1111.0000 0000 

Adres sieci :   

 

192.168.1.0 

<-  1100 0000.1010 0100.0000 0001.0000 0000 

(funkcja AND IP i maski) 
 
Adres rozgłoszeniowy: 

192.168.1.255 

<-  1100 0000.1010 0100.0000 0001.1111 1111 

Broadcast 
(część hosta z adresu sieci wypełniamy 1) 
 

 

Adresowanie klasowe 

-  5 klas adresów protokołu IPv4 

klasa 

Adres początkowy 

Adres końcowy 

0.0.0.0         /8 

127.255.255.255   /8 

128.0.0.0    /16 

191.255.255.255   /16 

192.0.0.0    /24 

223.255.255.255   /24 

224.0.0.0    /4 

239.255.255.255   /4 

240.0.0.0    /4 

255.255.255.255   /4 

-  Każdej podsieci przydzielona pula adresów z 1 z klas 

background image

-  Problem: zbyt duża pula adresów -> marnowanie adresów 
-  Braki w adresach -> rozwiązaniem adresowanie VLSM (bezklasowe – zmienna długość maski 

podsieci) 

 

Adresowanie bezklasowe 

-  Schemat adresowania IPv4 
-  Maski podsieci nie spełniają reguł z adresowania klasowego 
-  Duża elastyczność przy podziale zakresu adresów IP na odrębne sieci (p. 192.168.1.0 /8 jest 

poprawne) 

-  VLSM (ang. variable length subnet mask

  Maska podsieci o zmiennej długości -> oszczędność IP z puli 
  Możliwość dobrania ilości IP do potrzeb  

(np. 192.168.1.0/29 ma 6 hostów, bo:   32-29=3, 2

3

=8, 8-adres sieci i broadcast = 6) 

 

Adresy specjalne: 

 

127.0.0.0 – 127.255.255.255 

<- pętle zwrotne 

 

169.254.xxx.xxx   

 

<- adresy domyślne 

 

 

Subnetting (podsieciowanie) 
-  Podział zakresu adresów IP z 1 sieci na kilka podsieci 
-  Algorytm sprawdzania liczby hostów w ip: liczba hostów = 2

N

-2, N – bity hosta 

-  Ilość podsieci: 2

N

-2, N – bity sieci 

-  Przykład: 

 

IP: 

131.107.0.0 

 

Maska:  255.255.0.0 

 
 

Szukana maska dla 6 podsieci, liczba hostów do zaadresowania, przedziały 

 
 

Rozwiązanie: 
1)  6 = 2

3

-2 -> maska ma 3 bity z jedynką = 224 

2)  Rozpisuję maski binarnie: 

255.255.0.0   

<-  1111 1111.1111 1111.0000 0000.0000 0000 

255.255.224.0 

<-  1111 1111.1111 1111.1110 0000.0000 0000 

3)  Liczba hostów = 2

13

-2 = 8190 

4)  Liczmy przedział – szukamy najniższego bitu potrzebnego do uzyskania 224: 

224 = 128 + 64 + 32 
 
Zakres: 
131.107.32.1 

 - 131.107.63.254 

// bez broadcastu i adresu sieci 

131.107.64.1 

 - 131.107.95.254 

// dla klasy A trzeci oktet wynosi 255 

131.107.96.1 

 - 131.107.127.254 

// dla C w 4 oktecie startujemy od wartości + 1 

131.107.128.1 

 - 131.107.159.254 

131.107.160.1 

 - 131.107.191.254 

131.107.192.1 

 - 131.107.223.254 

5)  Odpowiedź: maska: 255.255.224.0, można zaadresować 8190 hostów 

 

41. Routing w sieciach komputerowych, metody routingu, porównanie. 

 
Router (brama) 

 

Urządzenie warstwy sieciowej 

 

Określa optymalną ścieżkę przesyłania ruchu sieciowego, wykorzystując 1 lub kilka metryk 

 

Przesyła pakiety z 1 sieci do 2-ej, wykorzystując informacje z warstwy sieci 

 

Umożliwia komunikację między 2-ma różnymi sieciami 

 
Routing = proces ustalania ścieżki i przesyłania ruchu sieciowego z 1 do 2-ej sieci 
 
 
 

background image

Rodzaje routingu: 

dynamiczny 

statyczny 

 

Automatyczne dostosowanie do topologii sieci lub ruchu w 
niej (protokół routingu konfiguruje tablice routing) 

 

Metody routingu: wektor odległości, stanu łącza,  

 

Działa dzięki zręcznemu wprowadzeniu wpisów do tablicy 
routingu 

 
Topologie dynamiczne: 

topologia 

opis 

Wektora 

odległości 

 

Algorytm distance vector (Bellman-ford) 

-  każdy router wysyła całą/część swojej tablicy routingu tylko do swoich bezpośrednich sąsiadów (routing oparty na 

sąsiadach; zgłasza nie tylko info o swoich sieciach, ale też tego, czego się dowiedział) 

-  trasy jako wektory (odległość (koszt) + kierunek) 
-  informowanie sąsiadów o najniższych kosztach 
-  protokoły te zużywają mniej systemowych zasobów routera 
-  powolna zbieżność = powolna reakcja na zmiany w sieci 
-  czas zbieżności = czas ustalenia się tabeli routingu 
-  te metryki routingu nie nadają się do dużych sieci 
-  generowanie dodatkowego ruchu w sieci (cykliczne rozgłaszanie pełnych tabel routingu – nawet gdy brak zmian) 
-  brak odporności na pętle między routerami 
-  brak weryfikacji poprawności danych otrzymanych przez sąsiadów -> router ma błędne info i przekazuje je dalej 

(propagacja błędnych informacji) 

-  ograniczenie – maksymalna rozpiętość sieci (max liczba kolejnych routerów w ścieżce); jeśli ścieżka przekracza tą 

wartość -> sieć jest nieosiągalna 

-  odszukanie dystansu (liczba skoków) i wektora (właściwy kierunek do celu) 
-  wymiana danych: komunikacja rozgłoszeniowa (broadcast), multiemisja (multicast) 
-  protokoły: RIP, IGRP 

Stanu 

łącza 

 

algorytm link state (shortest path first) 

-  przesłanie informacji o routingu do wszystkich routerów -> tworzy się mapa sieci -> wytyczenie najkrótszej ścieżki 

do wszystkich miejsc w sieci (algorytm Dijkstry; każdy router wyznacza dla siebie – jest korzeniem swojego drzewa) 

-  złożona baza danych z informacjami o topologii sieci 
-  każdy router wysyła pakiet z informacjami (o bezpośrednio podłączonych do niego sieciach i ich stanie) do 

WSZYSTKICH swoich sąsiadów (każdy router pośredni zapisuje sobie to info, ale nie zmienia go) 

-  każdy router gromadzi info o topologii sieci, koszcie pojedynczych ścieżek i stanie połączeń 
-  pakiet = informacja o sieciach połączonych do routera; pełne info o routerach sieci i ich połączeniach 
-  osiągnięta zbieżność -> następne pakiety z aktualizacjami nie są takie duże (rozsyłane tylko zmiany) 
-  zbieżność szybciej osiągalna niż przy wektorze odległości 
-  szybsza reakcja na zmiany, brak cyklicznych ogłoszeń 
-  zmiana topologii sieci -> rozesłanie pakietów LSA -> routery zapisują zmiany w topologii -> wyznaczenie nowych 

ścieżek routingu (niezawodność, mniej przepustowości na łączach sieciowych i kontrola) 

-  mniejsza podatność na pętle/błędy w routingu 
-  lepsze scalenie sieci 
-  wada: zużycie większej liczby zasobów routera; droższe; zużywają sporo pasma transmisji w początkowej fazie ich 

działania 

-  protokoły: OSPF, IS-IS 

 
Protokoły routingu: 

 

Wektor odległości 

Stanu łącza 

Protokoły routingu 

zewnętrznego 

Klasowe 

RIP, IGRP (tylko CISCO) 

 

EGP 

Bezklasowe 

RIPv2, EIGRP (tylko 
CISCO) 

OSPFv2, IS-IS 

BGPv4 

 
 
 
 
 

background image

42. Metody dostępu do sieci w technologii bezprzewodowej WiFi. 

 

protokoły 

opis 

CSMA/CA 
(ang. Cartier sense 
multiple Access with 
collision ayoidance

 

Stacja skompletowała ramkę -> sprawdzanie stanu łącza (gdy wolne, to nadaje; jeśli zajęte, to czeka) 

 

Zastosowanie: niektóre bezprzewodowe sieci LAN i sieci Packet Radio 

BTMA 
(ang.busy tone multiple 
access 

 

Próba rozwiązania problemu ukrytych stacji (nie wszystkie stacje w sieci mają bezpośrednią łączność; 
stacja ukryta – jest w zasięgu stacji odbierającej dane, ale poza zasięgiem stacji wysyłającej je) 

 

Kanał transmisyjny rozbity na 2 podkanały: 

-  Podkanał komunikatów (przesyłane dane) 
-  Podkanał zajętości (każda stacja odbierająca informacje z podkanału komunikatów wysyła sygnał 

zajętości – falę ciągłą) 

 

Stacja z ramką do wysłania sprawdza stan podkanału zajętości (jeśli sygnał zajętości nieobecny – dane 
wysłane; jeśli obecny – transmisja odkładana na później) 

 

Wysoka efektywność protokołu – aż 70% 

SRMA 
(ang. slot reservation 
multiple access

 

Wykorzystuje mechanizm rezerwacji przedziałów czasowych 

 

Konieczność wprowadzenia w sieci stacji sterującej 

 

Podział kanału transmisyjnego: 

-  Podkanał komunikatów (przesłanie danych) 
-  Podkanał sterujący (przesłanie żądań i odpowiedzi) 

 

Dla SRMA-RM stacja z danymi do wysłania przesyła żądanie do stacji sterującej 

-  Jeśli bezbłędnie -> dołączane do kolejki żądań (kolejka obsługiwana według dowolnego algorytmu) 
-  Gdy kanał komunikatów udostępniony – stacja sterująca przesyła stacji zgłaszającej kanałem 

sterującym zezwolenie na nadawanie 

 

Dla SRMA-RAM 

-  Kanał sterujący podzielony jest na 2 podkanały: żądań i odpowiedzi 
-  Stacja z danymi wysyła żądanie do stacji sterującej -> gdy brak błędu, stacja sterująca w kanale 

odpowiedzi przekazuje informację z czasem transmisji danych dla stacji zgłaszającej 

MACA i MACAW 
(ang. multiple Access 
with collision ayoidance

 

Wymiana informacji sterujących przepływem danych (zamiast mechanizmu wykrywania fali nośnej) 

 

Nadajnik wysyła ramkę RTS (gotowość do nadawania), odbiornik ramkę CTS (gotowość do odbioru) 

-  Mechanizm j.w. zapobiega kolizjom zakrytej i odkrytej stacji 
-  Istnieje ryzyko kolizji ramek sterujących 

 

MACAW = dodatkowe ramki sterujące: 

-  DS. = poprzedza początek przesyłania danych 
-  ACK = potwierdzenie poprawy odbioru ramek danych 
-  RRTS = wysyłana gdy stacja nie może wcześniej odpowiedzieć na ramkę RTS z powodu wstrzymania 

transmisji 

BAPU 
(ang. Basic Access 
protocol solutions

 

Sprawniejsze eliminowanie problemu zakrytej i odkrytej stacji niż w MACA 

 

Podział 

-  Kanał danych (fizyczne) 
-  Kanał sterujący (większy zasięg transmisji) 

 

Eliminacja interferencji stacji w kanale danych 

 

Protokół używa 5 ramek sterujących: 

-  RTS – zgłoszenie gotowości do nadawania 
-  CTS – zgłoszenie gotowości do odbioru 
-  DS – poprzedza rozpoczęcie nadawania danych 
-  NCTS – zgłoszenie braku gotowości do odbioru (np. gdy stacja w zasięgu innej transmisji danych) 
-  ACK – potwierdzenie poprawnego odbioru ramek danych 

 
Problemy sieci bezprzewodowych 

 

Odkryta stacja - stacja w zasięgu nadawcy, ale poza zasięgiem stacji odbierającej – spadek przepustowości 
w sieci bo zbędne wstrzymanie transmisji 

 

Ukryta stacja - jest w zasięgu stacji odbierającej dane, ale poza zasięgiem stacji wysyłającej je 

 

Interferencja – zakłócenia transmisji; 1-dna ze stacji poza zasięgiem nadajnika i odbiornika, ale zakłóca inne 
stacje 

background image

 

Efekt przechwytywania – gdy do odbiornika docierają 2 sygnały o różnych mocach; silniejsza ramka 
odczytana bezbłędnie – pozytywny efekt (poprawa wykorzystanie kanału transmisyjnego) 

 
Typy dostępu do medium 

 

Funkcje koordynacji dostępu 

-  DCF – typowy dostęp (bezprzewodowy dostęp połączenia sieciowego) 
-  PCF – specyficzny typ usług, wymagający braku rywalizacji o dostęp 

 

Sprawdzanie zajętości kanału radiowego 

-  Gdy przejmowanie dostępu do kanału przez stację pełniącą funkcję nadawcy -> losowe opóźnienie 

przy każdej ramce dla pozostałych stacji 

-  Czasami w DCF można stosować mechanizm RTS/CTS 

 

Cechy funkcji PFC 

-  Konieczne stosowanie specjalnych stacji koordynujących 
-  Jedynie w sieciach strukturalnych 
-  Funkcja nadbudowana nad CDF 
-  Pierwszeństwo przed DCF (krótszy dostęp przed transmisją) 

 

43. Podstawowe i złożone topologie sieci komputerowych. 

 
Topologia = sposób organizacji koncentrator i okablowania 
 
Topologia fizyczna = rzeczywisty układ przewodów i medium transmisyjnego; topologia logiczna = sposób 
dostępu hosta do medium (rozgłaszanie i przekazywanie tokenu) 
 
Topologie podstawowe: 

topologia 

opis 

Magistrali 

Wszystkie elementy sieci podłączone do 1 magistrali 

Gwiazdy 

Komputery podłączone do 1 punktu centralnego, koncentratora (koncentrator = fizyczna topologia gwiazdy, logicznie 
– magistrala) lub przełącznika 

Pierścienia 

Poszczególne elementy połączone pomiędzy sobą odcinkami kabla (tworząc zamknięty pierścień) 

podwójnego 

pierścienia 

poszczególne elementy połączone między sobą odcinkami tworząc 2 zamknięte pierścienie 

Przełączana 

(komutowana) 

Wykorzystuje przełączniki (wieloporty); 
Przełącznik uczy się adresów sterowania dostępem do nośnika 
Między nadawcą ramki, a odbiorcą tworzone tymczasowe ścieżki przełączane (komutowane) 

Siatki 

oprócz koniecznych połączeń sieć zawiera połączenia nadmiarowe; sieci z wysoką bezawaryjnością 

 
Dodatkowe: 

 

Topologia liniowa – wszystkie elementy sieci (prócz granicznych) połączone są z dwoma sąsiadującymi 

 

Gwiazdy rozszerzonej – posiada punkt centralny (jak w topologii gwiazdy) i punkty poboczne (1-na z 
częstych topologii fizycznych Ethernet); rozszerzenie zasięgu 

 
Topologie złożone: 

Topologia 

opis 

Hierarchiczna 
(drzewa) 

Kombinacja topologii gwiazdy i magistrali, budowa podobna do drzewa binarnego; system podłączony do komputera 
sterującego ruchem tej topologii 

łańcuchy 

 

 
Topologie złożone 

rozszerzenia lub połączenia podstawowych topologii 

topologie złożone = skalowalne, 

w topologiach podstawowych skalowalność ograniczona 

 

Łańcuchy 

Hierarchie 

Hierarchiczne pierścienie/ gwiazdy/ melanże 

background image

44. Charakterystyka systemów rozproszonych - zalety i wady. 

 
System rozproszony 

 

Zbiór niezależnych urządzeń technicznych połączonych w 1 spójną logicznie całość 

 

Połączenie przez sieć komputerową (jednak możliwość użycia prostszych magistrali komunikacyjnych) 

 

przykład przetwarzania współbieżnego, do realizacji systemów równoległych (problemy występujące w 
systemach rozproszonych występują także w systemach równoległych, które z kolei występują w 
przetwarzaniu współbieżnym) 

 

Cel: bezpieczeństwo, niezawodność 

 

Każdy zasób ma własny SO i zasoby lokalne 

 

Programowanie warstwy pośredniej – tworzy się wirtualne oprogramowanie dla SO, służące usługi jako 
całość 

 

Autonomiczne działanie pojedynczego systemu, luźniejsze powiązanie współpracujących procesów niż w 
przypadku obliczeń równoległych (zamiast synchronizacji czasowej mamy przyczynowo-skutkową) 

 

Urządzenia posiadają oprogramowanie do współdzielenia zasobów systemowych 

 

Cechy: przezroczystość (wrażenie 1-nczego i zintegrowanego systemu) 

 

SYSTEM ROZPROSZONY = Co najmniej 1 KOMPUTERY W SIECI + OPROGRAMOWANIE TWORZĄCE 
USŁUGI DLA WSZYSTKICH SYSTEMÓW 

 

zalety 

wady 

+  Podział zasobów (dane, urządzenia sprzętowe) 
+  Przyspieszenie obliczeń (dzielenie obciążenia) 
+  Niezawodność (awaria 1 urządzenia nie uniemożliwia 

działania systemu, co najwyżej może pogorszyć jego 
wydajność) 

+  Komunikacja (poczta elektroniczna) 
+  Ekonomiczność (tańszy od systemu scentralizowanego) 
+  Wewnętrzne rozproszenie (niektóre aplikacje z natury 

rozproszone, wymagają rozproszonych komputerów) 

+  Stopniowy wzrost (można stopniowo zwiększać moc 

obliczeniową systemu); skalowalność – zdolność systemu do 
adaptowania się do zapotrzebowań 

+  Lepsze wykorzystanie sprzętu 
+  Polepszenie jakości usług (usługi dostępne na serwerze) 

-  Złożoność oprogramowania i konieczność jego standaryzacji 
-  Sieć – możliwość awarii/przeciążenia 
-  Mniejsze bezpieczeństwo komputera podłączonego do sieci 
-  Współdzielenie i rozproszenie zasobów 
-  Niejednorodność (wydajność nie idzie w parze z 

bezpieczeństwem) 

-  Otwartość (możliwość ataków) 

 
 

45. Modele programowania równoległego. 

Model programowania równoległego 

 

Abstrakcja zasłaniająca architekturę sprzętu i pamięci 

 

Nie są przypisane do żadnych konkretnych architektur – możliwość realizacji na dowolnym sprzęcie 

 
Modele programowania równoległego: 

model 

cechy 

Pamięć 

współdzielona 

 

Specjalnie utworzony segment wirtualnej przestrzeni adresowej, dostęp dla wielu procesów 

 

Najszybsza komunikacja między procesami 

 

1 z procesów tworzy segment pamięci współdzielonej, dowiązuje go -> odwzorowanie w bieżący obszar 
procesu (opcjonalny zapis danych w segmencie) 

 

Dostęp = miejsce wyznaczone przez adres dowiązania procesu (inny dla każdego procesu) 

 

Koniec korzystania z segmentu pamięci -> możliwość odwiązania segmentu (usuwanie dowiązań) 

 

Usunięcie segmentu pamięci współdzielonej przez proces-twórcę = gdy nie korzysta z niego żaden proces 

 

(pod)zadania korzystają ze wspólnej przestrzeni adresowej 

 

Odczyt/zapis w obrębie pamięci – asynchroniczny 

 

Blokady i semafory – kontrola dostępu do pamięci 

 

Brak potrzeby wymiany danych między zadaniami -> uproszczone programy (brak własności danych) 

background image

 

Utrudnione zarządzanie lokalnością danych 

 

Zmniejszenie wydajności gry wiele procesorów potrzebuje tych samych danych = wymiana między PAO a 
buforowaną cache 

 

Implementacje: 

-  Natywne (bezpośrednie) kompilatory – przekład programów (obszar zmiennych w rzeczywistej lokalnej 

pamięci) 

-  Brak powszechnych implementacji do tego modelu pamięci 

Wątki 

 

1 proces = wiele współbieżnych ścieżek do wykonania 

 

Analogia: program zawierający szereg podprogramów 

 

W przeciwieństwie do procesów wątki współdzielą przestrzeń adresową i inne struktur systemowych 

 

Wymagają mnie zasobów, szybciej się tworzą 

 

Łatwa komunikacja między wątkami (pamięć wspólna) 

 

Związane z architekturą pamięci współdzielonej (wymóg odpowiednich funkcji SO) 

 

Wykonanie programu: 

-  Załadowanie do pamięci 
-  Pozyskanie zasobów własnych i systemowych 
-  Sekwencyjne wykonanie prologu 
-  Utworzenie szeregu podzadań (wątków) 
-  Szeregowanie wątków (SO), wykonanie współbieżne 
-  Wątek ma dane lokalne i dostęp do pełnych zasobów programu (np. do obszaru pamięci) 
-  Komunikacja = wspólna pamięć -> konieczność synchronizacji dostępu 
-  Wątki tworzone i usuwane; program działa zaś do końca 

 

Implementacje 

-  Biblioteka podprogramów programu równoległego 
-  Dyrektywy kompilatora w kodzie programu sekwencyjnego/równoległego 
-  Identyfikacja równoległości = programista 

 

Standaryzacja 

-  POSIX Threads (PThreads) 

o  Oparta o bibliotekę funkcji 
o  Norma IEEE POSIX 
o  Tylko język C 
o  Konieczność kodowania równoległego 
o  Jawny opis równoległości 
o  Zależność efektu od umiejętności programisty 

-  OpenMP 

o  Oparty o dyrektywy kompilatora 
o  Języki Fortran/C++ 
o  Wieloplatformowość, przenośność 
o  Możliwość użycia w kodzie sekwencyjnym 
o  prostota 

Przekazywanie 

komunikatów 

 

zadania (podzadania) z własną lokalną pamięcią 

 

zadania umieszczone w 1 fizycznej maszynie lub dowolnej ich liczbie 

 

wymiana danych między zadaniami -> nadawanie i odbieranie komunikatów 

-  wymaga kooperacji zaangażowanych procesów (nadawanie + odbieranie) 

 

implementacje 

-  biblioteka podprogramów kodu źródłowego 
-  programista = identyfikacja równoległości 
-  standard: MPI (standard przemysłowy) 
-  architektury o pamięci współdzielonej = nie korzysta z sieci (wydajność) 

Dane 

równoległe 

 

operacje równoległe = działania na zbiorze danych 

 

dane = struktura (p. tablica) 

 

zadania (podzadania) = ta sama struktura danych 

 

wykonanie tych samych operacji na swoich częściach struktury danych 

 

systemy z pamięcią współdzieloną = wszystkie zadania sięgają do danych (pamięć globalna) 

 

gdy pamięć rozproszona – podział na części struktury danych (jej kawałki umieszczone w lokalnej pamięci 
odpowiednich zadań); kompilator przekształca program z wykorzystaniem API MPI (bez udziału programisty) 

background image

 

implementacje 

-  postać wywołań specjalnych podprogramów bibliotecznych dla danych równoległych 
-  postać dyrektyw odpowiedniego kompilatora 

 

przykłady: Fortran, High performance Fortran, dyrektywy kompilatora 

hybrydowy 

 

połączenie różnych modeli programowania równoległego 

 

pasuje do maszyn SMP z funkcjami sieciowymi 

 

Przykłady: MPI + PThreads, MPI+openMP 

 
Modele programowania wysokiego poziomu: 

SPMD (ang. single program multiple data

MPMD (ang. multiple program multiple data

 

1 program dla wszystkich zadań 

 

W 1 chwili = zadania wykonują te same lub różne instrukcje 
wspólnego programu 

 

Zadanie nie muszą wykonać całego programu 

 

Model programowania wysokiego poziomu 

 

Wiele różnych programów wykonywanych przez poszczególne 
zadania 

 

Zadania mogą przetwarzać różne dane 

 

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

 

// ja bym to potraktował tylko jako dodatek, ważniejsze jest to co było u prowadzącego na wykładach: 
 

Miara 

efektywności 

charakterystyka 

Obserwacja 

 

dla danej liczby procesorów przyspieszenie obliczeń równoległych jest większe dla zadań większych (ten sam 
problem, ten sam algorytm, ten sam program, zmienia się tylko wielkość zadania) 

 

przyspieszenie obliczeń równoległych większe dla zadań większych (dla danej liczby procesorów) 

 

zmiana tylko wielkości zadania (problem, algorytm, program – te same) 

 

dla zadań, dla których przy stałym p i rosnącym rozmiarze ilość obliczeń rośnie szybciej niż narzut obliczeń 
równoległych 

Miara 

wielkości 

zadania 

 

praca W = liczba operacji przy realizacji zadania 

Funkcja 2-óch 

parametrów 

 

przyspieszenie funkcją 2-óch parametrów (liczba procesorów p i wielkości zadania: S(p,W)) 

 

efektywność E(p,W) 

 

analiza funkcji 2-óch zmiennych ->różne jej przekroje 

 

 

 
Przyspieszenie skalowalne = przyspieszenie dla danej liczby procesorów p i zadaniu p-ktotnie większym od 
zadania z pojedynczego procesora: 

S

S

(p)=

          
          

 =    

         

          

 

 
Liniowe przyspieszenie skalowalne 

 

Czas rozwiązania nie zmienia się przy rozwiązaniu zadania o rozmiarze p-krotnie większym na p razy więcej procesorach 

 

Stała efektywność zrównoleglenia 

 

Badanie słabej skalowalności = analiza przyspieszenia skalowalnego i skalowalnej efektywności (wydajność przy stałym rozmiarze 
zadania na 1 procesorze) 

-  Czas rozwiązania zadania p-ktornie większego na większej liczbie procesorów będzie niezmieniony 

 

Skalowalność równoległa - - zachowanie programu równoległego dla rosnącego zadania i liczby procesorów 

 

Program skalowalny równolegle = efektywość obliczeń równoległych: E(W(p),p) ograniczona od dołu przez liczbę > 0 

-  Gdy W(p) funkcją liniową = liniowa skalowalność (wymagany rozmiar pamięci tych funkcji nie przekracza dostępnych 

zasobów; wzrost liczby procesorów = liniowy wzrost pamięci) 

 

Analiza równoległej skalowalności = funkcja izoefektywności (efektywność jest stała: E(Wizo(p),p)=const (>0)); obliczenia dla f 
izoefektywności są skalowalne; liniowa skalowalność = liniowa funkcja izoefektywności; izoefektywność – gdy narzut obliczeń 
równoległych 

 

Stała efektywność = stosunek narzutu wykonania równoległego do czasu obliczeń sekwencyjnych = const przy stałym rozmiarze 
zadania (narzut całkowity jest stały -> narzut na 1 procesor maleje odwrotnie proporcjonalnie do liczby procesorów p) 

 

Wzrost liniowy procesorów i zadania powoduje liniowy wzrost całkowity narzutu na 1 procesor 

background image

 

Obliczenia liniowo skalowalne – 1 z warunków do spełnienia: 

-  stały czas rozwiązania zadania p-krotnie większego na p-razy większej liczbie procesorów 
-  stały narzut wykonania równoległego na 1 procesor (zadania rosnące liniowo wraz z liczbą procesorów) 
-  liniowa funkcja izoefektywności lub liniowe przyspieszenie skalowalności obliczeń 

 

program dobrze skalowalne – niewielkie odstępstwa od warunków j.w. (duże odstępstwa = programy nieskalowane i źle skalowalne) 

 

 

 

Skalowalność = kluczowe pojęcie dla równoległych obliczeń wysokiej wydajności  

 

W praktyce nie istnieją programy dające się idealnie zrównoleglić (o liniowym przyspieszeniu), natomiast 
istnieją programy dobrze skalowalne (o liniowym przyspieszeniu skalowanym)  

 

Wydajność przetwarzania (różnie definiowana w różnych dziedzinach zastosowań) daje się często ustalić na 
podstawie analizy skalowalności  

 

W dziedzinie obliczeń wysokiej wydajności (HPC): wydajność = liczba_operacji /czas , co często daje się 
przybliżyć jako: przyspieszenie*czas_wykonania_1_operacji 

 
 
- - - - - - Z wykładów prowadzącego (chyba bardziej konkretne) 
 
Cel obliczeń równoległych 

 

Uzyskanie wysokiej wydajności obliczeń 

 
Wydajność obliczeń równoległych 

Szacowanie 

wydajności na 

podstawie 

sprzętu 

-  Wydajny sprzęt = szybkie rozwiązania zadań 
-  Miara czasu rozwiązania zadania lub liczba zadań w jednostce czasu 
-  Zastosowanie: różne dziedziny (grafika – ramki na sek, BD – transakcje) 
-  Trudne zagadnienie, tylko dla określonych dziedzin 
-  Miary wydajności: 

o  MIPS (przetwarzanie procesora, jednak niewydajne bo zależy od urządzeń zewnętrznych; także różna 

budowa procesorów -> inna liczba rozkazów dla programów)  

o  MFLOPS/ GFLOPS (szacowanie liczby rozkazów procesora na jednostkę czasu) -> algebra, rozwiązywania 

układów liniowych; jednak problem, bo rezultaty praktyczne to nieraz 1% teoretycznego 

 

Miary mierzone 

bez sprzętu 

-  Miara przyspieszenia (obliczenia równoległe bez sprzętu); sprawdzamy wydajność programu przy zwiększaniu 

liczby procesorów 

-  Podstawą – czas rozwiązania zadania 
-  Definicje przyspieszenia: 

o  Obliczenia równoległe (bezwzględne) = stosunek wykonania konkretnego zadania najlepszego programu 

sekwencyjnego do czasu rozwiązania na p procesorach z użyciem algorytmu testowanego 

 

S

(1)

(p) = 

      

         

 

 

Intuicja podpowiada nam, że program na 4 procesorach powinien działać 4-rokrotnie szybciej (czyli, że 
przyspieszenie = 4). W praktyce jednak nie zawsze algorytm sekwencyjny jest przystosowany do 
zrównoleglenia. Czasami lepiej zastosować gorszy algorytm sekwencyjny, który jednak lepiej działa 
równolegle. Algorytm dobrze skalowalny – stosujemy algorytm gorszy dla wykonania sekwencyjnego, 
jednakże w przypadku wykonania równoległego jest bardziej wydajny 
 
 

background image

o  Przyspieszenie względne = stosunek wykonania algorytmu na 1 procesorze do wykonania na p 

procesorach 

S(p) = 

  ó      
  ó      

 

 

groźba – przyspieszenie powoduje, że mamy zawsze opłacalny wynik; ponadliniowość (superlinear speed-
up) – coś lepszego od ideału 

-  Analiza przyspieszenia = klasyczna analiza złożoności 
-  Prawo Amdahla = czas wykonania równoległego w programie jest mniejszy od sekwencyjnego 
-  Prawo Gustavsona = stały czas rozwiązania zadania (mimo dokładania procesorów) 
 

 
Efektywność Zrównoleglenia: E(p) = S(p)/p 
 

Skalowalność programu równoległego 

Silne (liniowe) przyspieszenie 

słabe 

 

Przy analizie Andhala 

 

Liniowe przyspieszenie przy zwiększaniu liczby procesorów 
– rozwiązywane te same zadania 

 

Nie może być części sekwencyjnej oraz komunikacji i 
synchronizacji 

Kłopotliwa (embarassing), nie może być rzeczywista 

 

świetna skalowalność 

 

jedyne co możemy uzyskać 

 

wystarcza w większości wypadków 

 

Dostajemy liniowe przyspieszenie jeśli rozmiar zadania rośnie 
wraz z liczbą procesorów 

 

Duże maszyny stosuje się do wykonywania coraz większych 
zadań w sensownym czasie 

 

47. Środowiska programowania równoległego. 

 

środowisko 

charakterystyka 

OpenMP 

(ang.Open Multi-

Processing

 

Wieloplatformowe API (interfejs) programowania aplikacji 

 

Model SPMD 

 

Programowanie z pamięcią wspólną 

 

Umożliwia tworzenie programów współbieżnych z pamięcią dzieloną 

 

Wykorzystywany w językach: C,C++, Fortran … 

 

Dostępny dla wielu architektur: Windows, Linux 

 

Zbiór dyrektyw kompilatora (z argumentami tzw. klauzule) + biblioteki + specjalne zmienne środowiskowe 
(dostępne są też funkcje) 

 

Dyrektywa podziału pracy (najważniejsza, podział pracy w pętlach) 

 

Dyrektywy i funkcje OpenMP nie gwarantują poprawności 

 

Duża przenośność, skalowalność, elastyczność, prostota użycia (przezroczystość kodu – nie wygląda on tak 
strasznie) 

 

Można użyć do aplikacji na klastrach (pod kontrolą MPI - hybryda) 

 

Możliwość użycia rozszerzeń dla systemów bez pamięci współdzielonej 

 

2 obszary równoległe mogą mieć różną liczbę wątków, istnieje możliwość zagnieżdżania obszarów 
równoległych (obszar w obszarze) 

 

Możliwość użycia zamków/sekcji krytycznych/barier (walka z wyścigiem) 

RPC  

(ang. Remote 

Procedure Call

 

Nie przystosowany do programowania obiektowego 

 

Używany w systemach Unix 

 

Bazuje na gniazdach 

background image

 

Komunikacja – zdalne wywołanie procedur, namiastki (po stronie serwera i klienta; namiastka klienta 
wysyła dane do namiastki serwera, które idą później do funkcji serwera i wracają drugą stroną) 

 

Wspólny sposób reprezentacji podstawowych typów danych XDR (ang. external Data Representation

 

Łatwiejsze zarządzanie stanem funkcji serwera niż obiektem w RMI 

 

Ograniczenia: 

-  Zdalna procedura przyjmuje tylko 1 argument/1 wynik, który może być strukturą 
-  Zmiany w procedury w jej argumencie pozostają lokalne i nie są przekazywane do klienta 
-  Klient otrzymuje wynik jako dowolny typ XDR 
-  RPC używa port standardowy 111 
-  Wywołując funkcję w nazwie trzeba umieścić jej wersję 

RMI 

(ang. Remote 

Method 

Invocation

 

Część Javy 

 

Możliwość wywoływania metod obiektów istniejących w maszynie wirtualnej JAVY przez obiekty z innej 
maszyny wirtualnej 

 

Obiekty zdalne i lokalne = identyfikacja przez referencję 

 

Przechowuje stany obiektów 

 

Namiastka = przekazywanie całego obiektu na serwerze 

 

Komunikacja między klientem, a serwerem poprzez zarządzanie referencjami (zdalne obiekty przesyła się 
przez referencję) 

 

Ograniczenia: 

-  Problemy rozproszonego bezpieczeństwa danych, synchronizacji, odświecania pamięci 
-  Możliwe wykonywanie metod zdalnego obiektu bez dostępu do jego pól 
-  Metody RMI zadeklarowane w interfejsie rozszerzającym interfejs Java.RMI.Remote 

CORBA 

(ang. Common 

object request 

broker 

architecture

 

Standard komunikacji aplikacji w środowisku rozproszonym (za pomocą wspólnego brokera ORB) 

 

Usługi świadczone przez obiekty 

 

Middleware = środowisko między aplikacją, a SO 

 

Obiekty programów komunikują się zdalnie dzięki ORB 

 

Object adapter = tłumaczenie programu na konkretny język 

 

wywołanie klienta trafia najpierw do ORB, potem przekazywane jest do systemu i do adaptera. Adapter 
sprawdza, z jakim językiem ma do czynienia i tłumaczy go (zmiana kodu na kod pisany w konkretnym 
języku) 

 

Opracowany przez Object Management Group 

 

Interfejsy CORBY: 

-  Komunikacja modułów programowych z innymi poprzez brokery 
-  Brokery komunikują się ze sobą w sposób jednakowy 
-  Moduł poznaje charakterystykę interfejsu innego modułu 
-  Możliwość komunikacji modułów w różnych językach programowania 
-  Możliwość komunikacji modułów w różnych architekturach (język definicji interfejsów IDL) 

MPI 

 

Programowanie z modelem przesyłania komunikatów 

 

synonim ogólnego programowania komputerów z pamięcią rozproszoną

 

 

przepość, elastyczność 

 

Interfejs programowania definiujący powiązania z językami C, C++, Fortran 

 

od początku wiele procesów 

 

brak wspólnej przestrzeni adresowej 

 

programy się kompiluje, powstają pliki binarne, które się uruchamia jednocześnie 

 

różne schematy komunikacji (broadcast, scalther, gather itd.) 

 
W Javie możemy tworzyć wątki dziedzicząc po klasie Thread, implementując interfejs Runnable 
W Linuxie mamy możliwość użycia wątków systemowych PThreads 
 

48. Prawo Amdahla. 

 
Prawo Amdahla: 

 

analiza przyspieszenia obliczeń zrównoleglonych 

 

w programie występuje część, której nie da się zrównoleglić (rozgłaszanie, redukcja) 

background image

 

czas wykonania równoległego w programie jest mniejszy od sekwencyjnego, a przyspieszenie nie 
przekroczy 

 
 

 , f = 

 

   

, s- czas wykonania części sekwencyjnej 

 

 

 
 
 
 
 
Prawo Amdahla jest wyidealizowane 

 

brak analizy komunikacji i synchronizacji (im więcej procesów, tym więcej komunikacji i synchronizacji) 

 

rzeczywiste programy działają gorzej niż prawo Amdahla 

 

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

 

 

Obrazy rastrowe 

Obrazy wektorowe 

Budowa 

 

Budowa obrazu za pomocą pionowo-
poziomej siatki odpowiednio 
kolorowanych pikseli na monitorze 
komputera 

 

Piksel = położenie + kolor („mozaika”) 

 

Obraz opisany jest za pomocą figur geometrycznych (2D) lub 
brył geometrycznych (3D) 

 

Figury umiejscowione są w matematycznym układzie 
współrzędnych 

Właściwości 

 

Kolor każdego piksela zdefiniowany 
pojedynczo (brak kompresji) 

 

Obrazek z głębią koloru RGB = 3 bajty 
(czerwony, zielony, niebieski) 

 

Obrazy czarno-białe wymagają tylko 1 
bajtu na piksel (bitmapa) 

 

Bitmapę charakteryzują 2 liczby: wysokość 
i szerokość bitmapy (w pikselach) 

 

Analiza zmiany koloru ciągłych zbiorów 
pikseli (gdy dane o obrazie pobierane 
kolejnymi rzędami 

 

Edycja = modyfikacja poszczególnych 
pikseli 

 

Figury opisane w sposób matematyczny -> możliwość 
wykonywania operacji (obrót, przesunięcie … ) 

 

Jakość obrazu zależy od dokładności opisu obrazu 

 

Możliwość zmiany kolejności obiektów na osi głębokości 

 

Możliwość konwersji do grafiki rastrowej 

 

Generowana komputerowo 

 

Podstawą: linia (prosty odcinek lub krzywa); linie ograniczają 
obszary Lu tworzą obrysy; linie jako wektory = linie odniesienia 
przy przekształceniach geometrycznych 

 

Obszary zamykane liniami mogą mieć nadawanie atrybuty 
koloru o określonym stopniu przezroczystości lub tworzyć maski 

 

Mniejsza objętość plików 

Różnice 

 

Wielkość obrazka nie może zostać 
zwiększona bez zmniejszenia jego ostrości 

 

Bardziej użyteczna do zapisywania zdjęć i 
rzeczywistych obrazów 

 

Obrót o kąt niebędący wielokrotnością 90

o

 

obrazu może go zniekształcać (utrata 
jakości) 

 

Operacja na obrazie są kosztowne 
obliczeniowo 

 

Konwersja do grafiki wektorowej 
nieopłacalna 

 

Zależy od rozdzielczości 

 

Zapamiętuje kolory i położenie pikseli 

 

Nie trzeba nic dodatkowo instalować 

 

Obraz ideowy, nie literalny 

 

Pokazuje obraz z użyciem obiektów geometrycznych (krzywe, 
wielokąty) 

 

Skalowalna -> wielkość obrazka można skalować bez strat 
jakości -> możliwość dopasowania do urządzenia 

 

Obrazy z figur geometrycznych i prezentacji tekstu (tabele, 
wzory …) 

 

Maksymalna możliwa rozdzielczość 

 

Możliwość modyfikacji poprzez zmianę parametrów obrazu 

 

Mniejszy rozmiar (zastosowania niefotorealistyczne) 

 

Opis przestrzeni 3D 

 

Możliwość użycia ploterów zgodnie z metodą ich pracy 

 

Zachowuje informacje o liniach, krzywych (kształty) obiektu 

 

Możliwość szerokiej edycji poszczególnych elementów 

Gdzie: 
 

S – czas wykonania części sekwencyjnej 

 
 

Czas wykonania równoległego na p procesorach: 

Trówn. (p) = S + 

 
 

 

 
Wzór na przyspieszenie obliczeń: 

S

A

(p) = 

   
  

 
 

      

   

   

   

 

 = 

 

 

   

 = 

 
 

 

 
Przyspieszenie tylko do 10 

background image

50. Grafika rastrowa - prymitywy graficzne 2D: kreślenie odcinków, okręgów, wypełnianie 

obszarów. 

 
Geometria obrazu – opis za pomocą „prymitywów”, jak: 
- odcinki, 
- trójkąty, prostokąty, wielokąty, 
- łuki, okręgi, elipsy, 
- koła i ich wycinki 
 

Kreślenie odcinków 

Kreślenie okręgów 

 

Obliczanie współrzędnych pikseli o jak najmniejszej 
odległości od wektora wyznaczającego jego przebieg 

 

Idealny odcinek na siatce rastra + konwersja = zbiór 
pikseli przybliżających wektor 

 

Konwersja – algorytmy (zaokrąglenie przy wyborze 
interesującego piksela): 

-  DDA (względem osi X lub Y) ; liczby 

zmiennoprzecinkowe; mało efektywny 

-  Bresenhama (punk środkowy); liczby 

stałoprzecinkowe 

- Algorytm symetrii oktantowej (Podział okręgu na 8 symetrycznych 
części) 
- Algorytm z punktem środkowym (Obliczenia wykonywane w drugim 
oktancie) 
- W przypadku odcinka przyrost był wartością stałą, w przypadku okręgu 
przyrosty są zmienne, gdyż zależą od wartości współrzędnych punktu P. 
Punkt ten jest zatem punktem odniesienia 
 

 
wypełnianie obszarów 
Wypełnianie ograniczonego obszaru: 
- barwą, 
- gradientem, 
- wzorem. 
 
Problemy związane z wypełnianiem: 
- wybór pikseli, które powinny zostać wypełnione, 
- wybór metody wypełniania pikseli. 
 
Wypełnianie wielokątów 

 

Obraz analizowany wiersz po wierszu (linie przecinające wielokąt i wypełniane segmenty pikseli) 

 

Wybór pikseli = reguła parzystości (przy przejściu przez kolejne krawędzi, bit raz parzysty, a raz nieparzysty; 
rysowane tylko piksele o wartościach nieparzystych) 

 

Problemyzwielokątami,któreposiadająwspólnekrawędzie–powielaniepunktówbrzegowych 

 

Piksele znajdujące się wewnątrz dowolnego wielokąta powinny zostać wypełnione 

 

Wypełnienie wielokąta przez spójność (punkt startowy – ziarno) 

 

Sąsiedztwo piksela  

 

Kontur figury na płaszczyźnie dyskretnej  
 

„Drzazgi” 

 

Negatywny efekt dyskretyzacji obrazu.  

 

W wielokątach o krawędziach, między którymi jest niewielki kąt tworzą się „drzazgi”. 

 

Segmenty pikseli zawartych we wnętrzu wielokąta mają niewielką lub zerową długość. 

 

51. Algorytmy poprawy jakości obrazu rastrowego. 

 
Metody poprawy jakości obrazu poprzez manewrowanie trzema głównymi elementami:  

 

Jasność / zakresu koloru 

 

Kontrast  

 

Histogram  

 
 
 

background image

Algorytmy:  

algorytm 

opis 

Liniowe odwzorowanie poziomów jasności 

 

dodawanie/odejmowanie od obrazu stałej wartości; wynik: jasny/ciemny obraz 

 

przy mnożeniu – poprawa jakości(kontrast), jednak możliwość utraty części 
danych (przekroczenie wartości);  

 

solaryzacja = zmiana poziomów jasności pikseli 

Metoda nasycenia/modulo 

 

przekroczymy zakres - wartości pikseli idą od początku 

 

normalizacja jasności - kilka metod, np. podział obrazu wynikowego przez 
największą wartość piksela z obrazów składowych; zmniejszenie szumu obrazu 

Nieliniowe odwzorowanie poziomów 
jasności 

 

transformacja kwadratowa/sześcianowa 

 

funkcja z potęgą 

 

pierwiastkowanie = zwiększenie kontrastu w ciemnych partiach obrazu  

 

logarytmowanie obrazu 

 
Korekcja gamma = punktowa transformacja obrazu 
monochromatycznego/poszczególnych kanałach barw obrazu kolorowego 

 
Inne: 

 

,,Rozciąganie” histogramu obrazu = zwiększenie kontrastowości obrazu 

 

Inwersja poziomu jasności obrazu  

 

Wyrównywanie histogramu obrazu  

 

Obliczanie histogramu skumulowanego  

 

Eliminacja zniekształceń - sumowanie obrazów  

 

Redukcja zakłóceń obrazu przez uśrednianie sekwencji obrazów 

 
 

52. Metody skalowania obrazów rastrowych. 

 

Metoda 

opis 

Metoda 

najbliższego 

sąsiada 

 

Wartość nowych pikseli wyliczana poprzez wybór wartości jednego z 4-ech najbliżej położonych pikseli 

 

Piksel przyjmuje barwę piksela położonego najbliżej (miara euklidesowa) = powielanie/eliminację wybranych 
pikseli (w zależności czy powiększamy, czy zmniejszamy obraz) 

 

Brak nowych wartości wprowadzonych do obrazu 

 

Brak interpolacji nie powoduje zmniejszenia ostrości krawędzi 

 

Jeśli 2 piksele źródła równooddalone od nowego piksela -> wybór przebiega według dowolnej metody 
(konsekwentność) 

 

Dobra, gdy zwielokrotniamy rozdzielczość (zmiana długości i szerokości) 

 

Na wartość nowego piksela ma wpływ tylko 1 z sąsiadów 

Metoda 

interpolacji 

dwuliniowej 

 

Poddawane są piksele występujące najczęściej w układzie 4-sąsiedztwa 

 

Im bliżej analizowanego punktu jest piksel z jego sąsiedztwa, z tym większą wagą wpływa na wartość nowego 
piksela 

 

wszystkie piksele mają wpływ na wartość nowego piksela 

 

powstają zupełnie nowe wartości pikseli (nieobecne w obrazie źródłowym) 

 

kontury obiektu ulegają rozmyciu 

Metoda 

interpolacji 

dwukubicznej 

 

brane jest tu 16 sąsiadujących pikseli 

 

wartość piksela liczona jest z wielomianu 3-ego stopnia 

 

wada: znaczna złożoność obliczeniowa 

 

w obrazie pojawiają się nowe wartości = rozmycie krawędzi (tak jakby rozmazany obraz był wyraźniejszy) 

 
 
 
 
 
 
 

background image

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

 

Model 

Opis 

RGB 

 

Ukierunkowane na sprzęt (różna charakterystyka widmowa -> każde urządzenie ma zakres barw możliwych do 
uzyskania) 

 

Taka kostka; na osiach są barwy czerwona, niebieska i zielona 

 

Powstał z właściwości odbiorczych ludzkiego oka (wrażenie dowolnej barwy = zmieszanie kolorów red, blue i Green w 
ustalonych proporcjach) 

 

Synteza addytywna = wartości najniższe – czerń, najwyższe - biel 

CMYK 

 

Ukierunkowane na sprzęt (drukarki) 

 

Jedna z przestrzeni barw w pracy z grafiką komputerową 

 

Jak RGB, tyle że na osiach są żółty, różowy i jasnoniebieski 

HSV 

 

Ukierunkowane na użytkownika (barwy = światło pochodzące z oświetlenia) 

 

Wszystkie barwy wywodzą się ze światła białego (część widma wchłonięta, część odbita do oświetlanych przedmiotów) 

 

Model opisu przestrzeni barw 

 

Hue = barwa (dominująca długość fali) 

 

Saturation = nasycenie (czystość pobudzenia) 

 

Value (level) = jaskrawość 

 

Model ten przypomina taki jakby stożek przecięty na części (poziomy) 

LAB 
(CIE 

La*b*) 

 

Niezależne od urządzenia 

 

L = jasność, A,B = nieliniowo skompresowane koordynaty przestrzeni CIE XYZ 

 

Najszersza zdefiniowana matematycznie przestrzeń barw (powstała w wyniku transformacji krzywoliniowego stożka 
CIE) 

 

Najważniejszy model grafiki komputerowej, wykorzystywany w obliczeniach barw przez systemy zarządzania barwami 
CMS (ang. color management systems

 

54. Cykl życia oprogramowania. 

 
rola fazy strategicznej, etapy tworzenia oprogramowania 
 

etap 

opis 

Wymagania 

 

Analiza problemu, zrozumienie potrzeb użytkownika, dzielenie wejść/wyjść, prototypowanie 

 

Tylko elementy istotne, precyzja, jasność, wykonalność 

 

Warunki początkowe, przypadki użycia, uczestnicy, rozszerzenia 

Specyfikowanie 

 

Specyfikacja odbiorcy i ich potrzeb 

 

Precyzowanie wymagań – formalizm (precyzja) 

 

Języki specyfikacji: formalne i nieformalne 

 

Oprogramowanie niebezpieczne 

Projektowanie 

 

Ogólne zasady projektowania = etap fazy analizy 

 

Etapy projektowania = wysokiego poziomu i szczegółowe 

 

Modele obiektowe i strukturalne 

 

Sztuka tworzenia interfejsów 

 

Notacja formalna 

Kodowanie 

 

Języki programowania i narzędzia wspomagające (analizatory, skrypty) 

 

Projektowanie z użyciem pseudokodu, abstrakcyjne typy danych, hermetyzacja 

 

Projektowanie obiektowe (obiekty rzeczywiste i programowe, wymagania obiektowe) 

testowanie 

 

Plan testów (cykl życia) 

 

Implementacja, a testowanie 

 

Testowanie funkcjonalne i oparte na błędach 

 

Testy jednostek i systemu 

 

Testy losowe, automatyczne, systematyczne i regresywne 

 

Zarządzanie testowaniem 

konwersacja 

 

Dokumentacja systemu informatycznego 

 

Zarządzanie projektem informatycznym 

background image

55. Model kaskadowy i spiralny, charakterystyka i porównanie. 

 
Model kaskadowy – taki jak w 54 zadaniu 

 

Dokumentacja 

Faza strategiczna 

analiza 

synteza 

Instalacja i utrzymanie 

 

wymagania 

 

specyfikowanie 

 

początek 
projektowania 

 

projektowanie 

 

kodowanie i 
implementacja 

 

początek testowania 

 

testowanie 

 

konserwacja 
produktu 

 
Model kaskadowy – wady: 

 

narzuca twórcom oprogramowania ścisłą kontrolę kolejności realizowanych prac 

 

wysoki koszt błędów popełnionych we wstępnych fazach (błędy wymagań i specyfikacji -> odkryte przy 
testowaniu) 

 

klient bierze udział tylko we wstępnej fazie projektu, jest mało zaangażowany -> obniżenie zainteresowania 
produktem 

  
Można rozbudować testowanie (żeby było w każdym etapie; model V) 
Można rozbudować o model iteracyjny – jeśli któraś z faz zwróci niesatysfakcjonujący wynik, to cofamy się 
wykonując kolejne iteracje) 
 
 
Model spiralny 

 

proces tworzenia ma postać spirali 

 

najbardziej ogólny model cyklu życia oprogramowania 

 

dobrze rozpoznaje zagrożenia i zapobiega/redukuje -> wysoka niezawodność każdego oprogramowania, 
pewność dalszej realizacji 

 

4 główne fazy cyklu życia oprogramowania wykonywane cyklicznie: analiza ryzyka, konstrukcja, 
atestowanie i planowanie 

planowanie 

Analiza ryzyka 

Konstrukcja (model 

kaskadowy) 

atestowanie 

 

Wymagania początkowe 

 

Planowanie projektu 

 

Kolejne iteracje – wynik kontaktu z 
klientem 

 

Analiza ryzyka w oparciu o 
wymagania 

 

Przy kolejnych iteracjach: 
analiza ryzyka w oparciu o 
reakcje klienta 

 

Tworzenie 
oprogramowania 
w oparciu o 
najbardziej 
odpowiedni 
model wybrany 
na podstawie 
zagrożeń 

 

Customer evaluation 
(ocena klienta) 

 

56. Metryki oprogramowania, przykłady i obszary zastosowań. 

 
Metryka (miara) programowania 

 

Miara pewnej własności oprogramowania/jego specyfikacji 

 

Brak 1 definicji - wszystko to, co charakteryzuje oprogramowanie 

 

Można wyróżnić różne metryki na różnych etapach życia oprogramowania 

 
Cechy metryki: 

 

Zarejestrowana historia (podobny projekt realizowaliśmy przez rok) nosi znamiona miary. 

 

Powiązanie ilości kodu KDSI (thousand of delivered source code instruction), LOC (line of code) z 
elementami potrzebnymi do napisania tego kodu: 

Ludzie  (ilość, czas), 
Czas (długość i etapy harmonogramu) 
Sprzęt (czyli zasób rzeczy konieczny do stworzenia oprogramowania) 

 

Gdy brak własnych danych historycznych –modele estymacyjne = algorytmiczne (na podstawie wzoru) 

background image

Ocena rozwiązań: 

 

Sukces = wybór realizacji przedsięwzięcia (faza strategiczna) -> wybiera się najlepsze 

 

Trudności z wyborem rozwiązań: cele (kryteria oceny), niemożność precyzyjnej oceny rezultatów 

 

Kryteria oceny: koszt, czas realizacji, niezawodność, możliwość ponownego wykorzystania systemu, 
przenośność, wydajność 

 
Wybór rozwiązania 

 

Usunięcie rozwiązań zdominowanych (inne rozwiązanie nie gorsze w innych kryteriach i lepsze w co 
najmniej 1 od wybranego) 

 

Wagi dla poszczególnych kryteriów 

 

Normalizacja wartości kryteriów 

 

Suma iloczynów znormalizowanych wartości i wag = ocena rozwiązania  

 

Niepewność = problem; szacowanie wartości optymistycznej i pesymistycznej (strategia działania); 

-  nie można w obiektywny sposób stwierdzić która strategia jest lepsza 
-  bardziej racjonalna ocena -> szacowanie prawdopodobieństw zdarzeń dla danych rozwiązań 

 
Szacowanie kosztów oprogramowania 

 

czynniki łatwe do oszacowania: koszt sprzętu/wyjazdów i szkoleń/zakupu narzędzi 

 

czynniki trudne do oszacowania: nakład pracy 

 

szacowanie kosztów oprogramowania = głównie nakłady pracy 

 

metody: 

metoda 

charakterystyka 

Przykład i zastosowanie 

Modele algorytmiczne 

 

wymaga opisu danego przedsięwzięcia za pomocą szeregu atrybutów 
liczbowych i opisowych 

 

odpowiedni algorytm = spodziewany nakład pracy 

 

COCOMO 

Ocena przez eksperta 

 

Doświadczenie osoby 

 

Nieraz duża precyzja 

 

Ocena przez analogię 

 

Wycena na podstawie wcześniej realizowanych przedsięwzięć 

 

Sieci neuronowe 

 

Systemy ekspertowe 

Prawo Parkinsona 

 

Przedsięwzięcie zawsze wiąże się z założonymi nakładami 

 

Projekt zmieści się w założonych ramach 

 

Wycena dla wygranej 

 

Koszt oprogramowania szacowany na podstawie oceny możliwości 
klienta i działań konkurentów 

 

Obowiązuje tu prawo Parkinsona 

 

Szacowanie 
wstępujące 

 

Realizacja przedsięwzięcia  dzielona na mniejsze zadania -> koszt 
łatwiej ocenić 

 

 

Algorytmiczne modele szacowania kosztów oprogramowania 

model 

opis 

Metoda punktów 

fikcyjnych 

 

Łatwiej oszacować rozmiar systemu niż nakład pracy 

 

Model nie opierający się na liczbie instrukcji kodu 

 

Szacowane czynniki: 

-  Dane odczytywane/pobierane przez system 
-  Interakcja z użytkownikiem 
-  Zewnętrzne interfejsy 
-  Pliki wykorzystywane przez system 

COCOMO 

(ang. COst 

COnstruction MOdel

 

Nakład pracy = możliwość oszacowania czasu realizacji przedsięwzięcia -> otrzymujemy przybliżoną 
wielkość zespołu (korekcja  za pomocą tzw. czynników modyfikujących – brane różne atrybuty 
przedsięwzięcia, np. rozmiar bazy danych, wymagania niezawodności systemu itd) 

 

Wymaga oszacowania liczby instrukcji systemu 

 

Powszechnie wykorzystywany model 

 

Opiera się na wielu rzeczywistych przedsięwzięciach 

 

Nie do końca adekwatny w przypadku rzeczywistych przedsięwzięć (brak narzędzi CASE) 

 

Pod uwagę bierze się czynniki i postać zależności w modelu 

 

Przedsięwzięcie zalicza się do 1 z klas: 

-  Organiczne – mały zespół, podobne umiejętności każdego członka, dobrze znana dziedzina 

background image

problemu/narzędzia/metody 

-  Półdrewniane – różnica stopnia zaawansowania dla członków zespołu, niektóre 

metody/dziedziny nie są znane 

-  Osadzone – realizacja systemów o złożonych wymaganiach, dziedzina/metoda/narzędzia 

znane, brak doświadczenia członków zespołu 

 
----- dodatek: 
Metryki statyczne 

 

Ocena kodu źródłowego 

 

Analiza statystyczna 

 

Przydatne dla programistów i osób zaangażowanych w rozwój programu 

 

Bieżące śledzenie jakości kodu i zwrócenie uwagi na miejsca do uproszczenia/testowania 

 
Metryki rozmiaru: 

metryka 

opis 

Linie kodu 

 

Nie odróżnia trudnych i łatwych części kodu 

 

Premiuje rozwlekły styl pisania programów 

Liczba tokenów 

 

Token = podstawowa jednostka składni języka programowania 

 

Tok enem mogą być operatory (słowa kluczowe - akcje) i operandy (stałe, zmienne itd.) 

 

Wagi dla mniej i bardziej znaczących linii kodu 

Inne metryki 

 

Jednostki rozmiaru programu większe od linii kodu 

 

Metryki dla większych aplikacji – liczba modułów/funkcji 

 

Metody mierzenia programowania obiektowego (liczba klas i interfejsów) 

 
 

57. Specyfikacja wymagań funkcjonalnych i niefunkcjonalnych, rola UML w procesie 

specyfikowania wymagań. 

 
Określanie wymagań 

 

Celem – określenie wymagań klienta wobec systemu; potem bez użytkownika można tworzyć dalsze etapy 

 

Zamiana celów klienta na określone wymagania realizacji tych celów 

 

Dokumentacja projektowa – wskazanie, jak wejścia systemu powiązać z wyjściami 

 

Konieczny dobry opis wymagań (szczegółowy, zrozumiały, bezsprzeczny) 

 

funkcjonalne 

niefunkcjonalne 

 

Opisują funkcje systemu (mogą być wykonywane przy udziale systemów 
zewnętrznych) 

 

Język naturalny = sposób opisu wymagań  

-  Niejednoznaczność - różne interpretacje 
-  duża elastyczność – 1 treść na wiele sposobów, utrudnienie wykrycia wymagań 

 

kompromis między metodą formalną, a językiem naturalnym – formularz opisu 
wymagań (zapis podzielony na konkretne pola = uniknięcie szeregu błędów) 

 

wymagany efekt funkcji, nie jej algorytm 

 

może być bardzo duża 

 

jedne funkcje systemu są podfunkcjami innych, bardziej ogólnych (zapis hierarchiczny 
– technika zstępująca – od ogółu do szczegółu -> dekompozycja; jeśli zaczynamy od 
szczegółowych funkcji to agregujemy je) 

 

tylko zewnętrzne funkcje systemu 

 

nie rozbijać funkcji systemu na te poziomy funkcji, które są czysto implementacyjne 

 

niektóre funkcje składowe w ramach wielu nadrzędnych 

 

Ograniczenia systemu 

 

Wymagania produktu, 
procesu, zewnętrzne 

 

Wykorzystanie tabeli miar = 
ilościowy opis pewnych cech 
systemu 

 
UML 

 

notacja formalna 

 

Graficzny język do obrazowania, specyfikowania, tworzenia i dokumentowania systemów informatycznych. 

 

pozbawiona wad języka naturalnego, ale notacja ta niezrozumiała dla klienta; uporządkowanie wymagań 

background image

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

 
Model analityczny: 

 

Pokazuje co system ma robić 

 

Jest zorganizowany hierarchicznie, według poziomów abstrakcji 

 

Unika terminologii implementacyjnej 

 

Pozwala na wnioskowanie „od przyczyny do skutku” i odwrotnie 

 
 
Model analityczny - wady 

 

Wykracza poza zakres odpowiedzialności systemu 

-  Model posiada elementy nie będące częścią systemu, ale wyjaśniające jego działanie 
-  nie wiadomo, które elementy modelu realizowane przez oprogramowanie, a które w sposób 

sprzętowy 

-  ograniczenie w środkach 

 
Modelowanie 

 

odpowiedź na wady modelu analitycznego 

 

decyzja, jakie modele tworzyć 

 

od identyfikacji problemu zależy rozwiązanie 

 

różne poziomy szczegółowości modelu, odpowiadanie rzeczywistości 

 

brak idealnych modeli (rozwiązaniem niewielka liczba niezależnych modeli) 

 

model oprogramowania – uproszczony opis modelu analitycznego, z wszystkimi najważniejszymi cechami 

-  model logiczny i fizyczny 

 
Model logiczny i fizyczny są modelami rozwiązania 
Rolą tych modeli jest rozwiązanie problemu, zdefiniowanego na początku (fazy określenia wymagań) 
 

Model logiczny systemu 

Model fizyczny systemu 

 

Model analityczny = model logiczny (podstawowy) systemu 

 

Etap projektowania cyklu życia programowania (cel fazy analizy) 

 

Odpowiada na pytanie – jak system ma działać? 

 

Opisuje sposób realizacji przez system postawionych wymagań, ale bez szczegółów 
implementacyjnych 

 

Zbiór informacji określający zachowanie się systemu 

 

Model pojęciowy (ze specyfikacji i analizy) dostosowywany do wymagań niefunkcjonalnych 

 

Elementy: 

-  Lista funkcji systemu 
-  Określenie zewnętrznych obiektów systemu 
-  Określenie współzależności między funkcjami systemu 

 

„inwentaryzacja stanu obecnego” (niezbędne porcje danych dla funkcji, połączenia 
identycznych funkcji realizowanych na różne sposoby) 

 

Podstawa prac analityczych i projektowania systemu informatycznego 

 

Określa najlepszą strategię dla sposobu implementacji systemu 

 

Unikanie niejednoznaczności 

 

Określa się tu: encje, atrybuty, typy danych, ograniczenia + relacje 

 

Model strukturalny (składowe pasywne – dane, aktywne - operacje) bądź obiektowy 
(składowe = dane + operacje; obiekty, klasy …) 

 

Opisany według notacji zgodnej z pewną konwencją 

 

Implementacja konkretnego 
modelu logicznego (faza 
implementacji) 

 

Cel fazy projektowania 

 

Wynik: projekt 
oprogramowania – opis 
systemu implementacji 

 

Techniczny projekt 
oprogramowania i rozwiązań 
sprzętowych 

 

Model fizyczny = kod 

 
 
 
 
 
 

background image

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

 
Notacja graficzna 

 

Diagramy graficzne = szybkie przekazywanie podstawowych informacji 

 

nie pozwala na ukazanie wszystkich szczegółów. 

 

Nadmierne nagromadzenie szczegółów = niska czytelność diagramu graficznego 

 

Notacje graficzne uzupełniane są o dodatkowe informacje tzw. specyfikacje 

 
UML (ang. unified modeling language

 

Graficzny język do obrazowania, specyfikowania, tworzenia i dokumentowania systemów informatycznych 

 

Notacja opisująca model o szczególnie ważnej roli 

 

język do specyfikowania, wizualizowania, konstruowania i dokumentacji tzw. „artefactów” oraz czynności 
biznesowych lub innych z obszaru działalności człowieka 

 

obrazowania, specyfikowania, tworzenia i dokumentowania elementów powstałych podczas 
procesu budowy systemu informatycznego

 

 

wspomaga specyfikowanie wszystkich ważnych decyzji analitycznych, projektowych i 
implementacyjnych, które muszą być podejmowane w trakcie wytwarzania i wdrażania systemu 
informatycznego

 

nazwa 

opis 

Artefakt 

 

fizyczny element informacyjny wyprodukowany lub używany w procesie wytwarzania oprogramowania (fragmenty 
modeli, bazy danych … ) 

Klasyfikator 

 

element składowy modelu opisujący jego zachowanie/strukturę 

 

posiada reprezentację geometryczną 

 

przykłady: klasy, aktorzy, przypadki użycia, relacje 

Obiekt 

 

kawałek kodu 

 

posiada: 

-  stan = definiowany przez atrybuty 
-  zachowanie = operacje i usługi świadczone przez obiekt na żądanie innych obiektów 
-  tożsamość = unikalna cecha obiektu (2 obiekty mogą być równe, ale nie identyczne) 

Klasy 

 

Klasa = opis zbioru obiektów o tych samych atrybutach, związkach i znaczeniu; pewien byt 

 

Symbol: prostokąt 

 

Abstrakcja tego, co można zrobić z każdym obiektem klasy 

 

grupa obiektów o tych samych właściwościach, ograniczeniach i semantyce 

 

deskryptor grupy obiektów o podobnej strukturze, zachowaniu i relacjach 

 

własności 

-  atrybut = nazwana właściwość klasy; właściwość pewnego modelowanego bytu (określona dla wszystkich 

jego wystąpień); klasa może mieć dowolną liczbę atrybutów 

-  operacja = implementacja pewnej usługi (jej wykonania można zażądać od każdego obiektu klasy) 

 

relacje 

 

Odpowiedzialność klas = zadania klas 

 

Związek = współpraca klas 

-  Zależność – zmiany 1 elementu wpływają na inny, powiązany z 1 
-  Uogólnienie – związek między elementem ogólnym a specyficznym (nadklasa-podklasa) 
-  Dziedziczenie – potomek dziedziczy atrybuty i operacje przodka + jakieś własne; polimorfizm (operacje 

potomka o takiej samej sygnaturze jak przodka jest ważniejsza) 

-  Powiązanie – związek wskazujący że elementy 1 systemu połączone z obiektami innego 

 

Nie każda klasa musi mieć związek 

Instancja 

danej klasy 

 

obiekt przypisywany do określonej klasy obiektów 

 

asocjacje = zależność łącząca 2 lub więcej klas (instancje) 

 

mnogość – ile instancji 1 klasy jest w relacji do 1 instancji 2-ej klasy 

 

agregacja – rodzaj asocjacji; wskazuje na zawieranie się klas. nadklasa zawiera wszystkie instancje podklasy 

generalizacja 

 

związek między klasyfikatorami (klasy, nie instancje); nie definiuje się tam mnogości 

 

wprowadza 6 typów diagramów: struktura stanu, przypadki użycia, wykres (rejestr) stanu, diagram 
współpracy, wykres aktywności, wykres implementacji 

 

background image

UML – przypadki użycia 

 

Obrazowanie zachowania systemu, podsystemu lub klasy 

 

Zrozumiały dla użytkownika i programisty 

 

Cele 

-  Modelowanie otoczenia systemu – wyznaczenie granicy wokół systemu; aktorzy korzystający z 

systemu) 

-  Modelowanie wymagań stawianych systemowi (określenie co system ma robić) 

 

Diagramy przypadków użycia (identyfikacja i uporządkowanie aktorów, ) 

 
Statyczny model klas = podejście klasyczne – obserwacja, że w wielu systemach są podobne klasy i obiekty -> 
poszukiwanie podobnych klas (przedmioty namacalne, lokalizacje, zdarzenia…) 
 

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

 

Diagram stanów 

Diagram sekwencji (interakcji) 

 

Stany jakiegoś elementu, klasy z siecią 
przejść między stanami 

 

Nawiązuje do automatu skończonego 

 

Maszyna stanów = stany + przejścia + 
zdarzenia + czynności 

 

Stan – pewna, stabilna sytuacja w jakiej 
znajduje się dany element; określa 
zachowanie się wybranego obiektu 

 

Przejścia do innych stanów mogą 
następować pod wpływem określonych 
zdarzeń (np. Komunikatów otrzymanych od 
innych elementów modelu) 

 

Opis istotnych stanów pewnego procesu 
(dla modelu pojęciowego) i przejścia 
między stanami (wymuszane przez 
wywoływanie usług projektu) 

 

Określa reakcje obiektu na zdarzenia w 
czasie jego życia 

 

Dynamiczne aspekty systemu 

 

Świat funkcjonalny + obiektowy 

 

Ciąg interakcji między obiektami systemów 

 

Pokazują następstwo czasowe w sekwencji komunikatów 

-  Linie życia –pionowe kolumny odnoszące się do obiektów z diagramów 

obiektów 

-  Fragment włączony –sekwencje komunikatów realizowanych iteracyjnie 
-  Aktorzy również włączeni jako obiekty. Nazwa komunikatu nad strzałkami 

obrazującymi ich wymianę. Komunikat powrotny –powrót sterowania 

 

Odpowiada konkretnemu scenariuszowi przypadku użycia 

 

Ważna kolejność komunikatów w czasie 

 

W górnej jego części są obiekty uczestniczące w interakcji 

 

Po lewej stronie – obiekt inicjujący interakcję 

 

Po prawej stronie – obiekty coraz bardziej podrzędne 

 

Komunikaty uporządkowane w czasie wzdłuż osi Y (wcześniejsze wyżej) -> 
ułatwienie zrozumienia przepływu sterowania w czasie 

 

Posiadają linie życia obiektów; uwzględnienie ośrodka sterowania 

 

Współpraca obiektów – scentralizowana (kontroluje 1 obiekt) i zdecentralizowana 

 

Modelowanie zachowania interfejsów, klas 
i kooperacji 

 

Projektowanie systemów interakcyjnych 

 

Projektanci systemów czasu rzeczywistego 

 

Wykorzystywane przez architektów (projektant) systemu oprogramowania 

 
Te modele używa się do prezentacji systemu w działaniu, jednak brane są inne aspekty 
 

61. Testowanie oprogramowania, omówić model V. 

 
Testowanie oprogramowania 

 

optymistycznie - celem sprawdzenie, czy oprogramowanie spełnia wymagania 

 

pesymistycznie - Celem testowania oprogramowania jest znalezienie błędów 

 

powinno być realizowane zgodnie z przyjętym planem testów 

 

Dwa aspekty błędów: 

 

awaria- oprogramowanie źle realizuje wymagania 

 

usterka – błąd w kodzie programu powodujący awarię 

 

Zasada IEEE: Celem testowania oprogramowania jest takie wyszukiwanie awarii, że gdy oprogramowanie 
ulegnie awarii podczas testów, usterki odpowiedzialne za te awarie będą mogły być znalezione i 
poprawione 

 
 

background image

Testowanie jednostek a testowanie systemu 

 

Gdy dany moduł jest zakończony może być testowany na poziomie jednostki przez programistę (cykl test-
poprawianie). 

 

Moduły są łączone w podsystemy i następnie w cały system który jest testowany na poziomie systemu 

 

Testowanie jednostek jest efektem dekompozycji problemu i nie wykrywa błędów w interfejsach pomiędzy 
nimi. 

 

Samodokumentowanie się kodu procedur bez ich funkcjonalnej specyfikacji często prowadzi do błędów 
(kod jest swoją własną definicją – to nie może być oceniany) 

 

Testowanie jednostek systemu wymaga wprowadzenia tzw. namiastek będącymi pozornymi procedurami 
uruchamiającymi testowaną jednostkę. Są to oczywiście warunki odmienne od występujących w 
rzeczywistej pracy systemu. Najczęściej namiastki są interaktywnymi interfejsami pomiędzy testowaną 
jednostką a testującym ją testerem (człowiekiem). Często stanowią również jednostki tzw. puste nie 
robiące nic, a jedynie zwracające sterowanie do jednostki testowanej 

 

Uprzęże testowe, służą automatyzacji testowania jednostek poprzez automatyczne programy testujące np. 
typy zmiennych 

 

Testowanie podsystemów - ukryte informacje w danych wewnętrznych prowadzi do losowego zachowania 
systemu – wprowadzenie dodatkowych funkcji drukowania czytelnej dla testera wersji struktur 
wewnętrznych (polepszanie testowalności kodu) 

 

Testowanie kodu obiektowego – metody klasy obiektowej są podprogramami dostępu i również tutaj 
powstaje problem badania danych ukrytych. Pomaga tutaj dziedziczenie – jeżeli metoda nadklasy 
dziedziczona przez podklasy była testowana jednostkowo to nie ma potrzeby testowania jej w każdej 
podklasie. 

 

Testowanie ciągów wejść do podsystemów – generowanie stanów które powinny być obsłużone przez 
system – eliminacja ślepych zaułków 

 
Testowanie systemu 

 

Testy systemowe - ich efekt będzie widoczny dla użytkowników. Inne działania testowe nie będą widoczne 
dla użytkowników. 

 

Testowanie integracyjne – przyrostowa metoda integracji systemu, dokładanie kolejnych podsystemów. 
Testowanie z „góry” i z „dołu”. 

 

Tak naprawdę dopiero w testowaniu systemowym widać spełnianie wymagań i realizację opracowanych 
specyfikacji. 

 

Inspekcja kodu a testowanie jednostki lub podsystemu mają doprowadzić do znalezienia usterki kodzie 
jednostki 

 
Model V 

 

Kaskadowy model cyklu życia oprogramowania ma pewne wady (patrz: zadanie 55) 

 

W obliczu wad j.w. poszerzono ten model o rozbudowanie testowania (testy dla każdej fazy; projektowanie 
i weryfikacja nie następują zaraz po sobie, ale są wykonywane równolegle) 

 

Stworzone wymagania są podstawą do rozpoczęcia definiowania weryfikacji 

 

Wymagania podlegają analizie, część zespołu sprawdza czy dana idea realizowana 

 

w procesie analizy muszą uczestniczyć testerzy 

 

architekci tworzą specyfikację -> podział systemu na komponenty 

 

lewe ramię = projektowanie 

 

prawe ramię = weryfikacja 

 

Testy końcowe to zazwyczaj tzw. testy akceptacyjne, odpowiadające na pytanie, czy dany produkt spełnia 
wymagania klienta. 

 
Zalety i wady systemu V: 

zalety 

wady 

+  Precyzyjnie pokazuje zależności kolejnych etapów projektu 
+  Każdy etap projektowania kończy się stworzeniem danych wejściowych dla następnej fazy i 

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 

 

Mało szczegółowy 

 

Mało wydajny 

background image

powinna być sprawdzona 

+  Kooperacja między architektami, programistami, klientami … 

 
Wygląd: 

projektowanie 

weryfikacja 

Wymagania 

Testy końcowe 

Analiza 

Testowanie systemu 

Architektura projektu 

Testowanie interfejsów 

Architektura komponentu 

Testowanie komponentów 

Implementacja 

 

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

oprogramowania, miary niezawodności. 

 

pojęcie 

opis 

zasoby 

 

Wszystko, co ma wartość dla instytucji 

 

Prawidłowe kierowanie zasobami = główny cel 

 

Przykłady: zasoby fizyczne, dane, oprogramowanie, ludzie … 

Zagrożenie 

 

Potencjalna przyczyna niepożądanego incydentu, którego skutkiem może być szkoda dla systemu lub instytucji 

 

Zagrożenie może wykorzystać podatność zasobów celem wyrządzenia szkody 

 

Przykłady: atak (bez)pośredni na informację 

Podatność 

 

Słabość zasobu/grupy zasobów, która może być wykorzystana przez zagrożenie 

Ryzyko 

 

prawdopodobieństwo określające możliwości wykorzystania określonej podatności przez dane zagrożenie 

 

cel zagrożenia: spowodowanie straty lub zniszczenia zasobu lub grupy zasobów = negatywne (bez)pośrednie 
wpłynięcie na instytucję. 

Ryzyko 
szczątkowe 

 

ryzyko, które pozostaje po wprowadzeniu zabezpieczeń 

 

zabezpieczenia redukują ryzyko tylko częściowo 

 

wszystko, co da się osiągnąć = ryzyko szczątkowe; im więcej chce się osiągnąć, tym większe koszta 

Zarządzanie 
ryzykiem 

 

całkowity proces identyfikacji, kontrolowania i eliminacji lub minimalizowania prawdopodobieństwa zaistnienia 
niepewnych zdarzeń, które mogą mieć wpływ na zasoby systemu informatycznego 

Zabezpieczenie 

 

praktyka, procedura lub mechanizm redukujący ryzyko 

 

chronią przed zagrożeniem, wykrywają niepożądane incydenty 

Analiza ryzyka 

 

proces identyfikacji ryzyka, określania jego wielkości i identyfikowania obszarów wymagających zabezpieczeń. 

 

identyfikuje ryzyko, które ma być kontrolowane lub zaakceptowane 

 

analiza ryzyka = analiza wartości zasobów, zagrożeń i podatności 

 

ryzyko określane jest przez potencjalne następstwa spowodowane naruszeniem poufności, integralności, 
dostępności, rozliczalności, autentyczności i niezawodności 

monitorowanie 

 

Używanie zabezpieczeń powinno być monitorowane w celu zapewnienia ich prawidłowego działania, 
upewnienia się, czy zmiany w środowisku nie wpłynęły na efektywność działania zabezpieczeń oraz czy 
zapewniona jest rozliczalność 

 
Efektywna ochrona = kombinacja różnych zabezpieczeń -> warstwy ochronne dla zasobów 
 

63. Proces zarządzania bezpieczeństwem systemów informatycznych, polityka 

bezpieczeństwa. 

 
Zarządzanie bezpieczeństwem systemów informatycznych 

 

Proces, którego celem jest osiągnięcie i utrzymanie odpowiedniego poziomu poufności, integralności, 
dostępności, rozliczalności i niezawodności systemów informatycznych 

 
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 

background image

 

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 

 
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. 

 
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. 

 
Definicje podstawowe: 

pojęcie 

opis 

Poufność 

 

właściwość zapewniająca, że informacja nie jest udostępniania lub ujawniana nieautoryzowanym 
osobom, podmiotom lub procesom. 

Integralność systemu 

 

właściwość polegająca na tym, że system realizuje swoją zamierzoną funkcję w nienaruszony sposób, 
wolny od nieautoryzowanej manipulacji, celowej lub przypadkowej 

Integralność danych 

 

właściwość zapewniająca, że dane nie została zmienione lub zniszczone w sposób nieautoryzowany 

Dostępność 

 

właściwość bycia dostępnym i możliwym do wykorzystania na żądanie, w założonym czasie, przez 
autoryzowany podmiot 

rozliczalność 

 

właściwość zapewniająca, że działania podmiotu mogą być przypisane w sposób jednoznaczny tylko temu 
podmiotowi 

autentyczność 

 

właściwość zapewniająca, że tożsamość podmiotu lub zasobu jest taka, jak deklarowana. 

 

Autentyczność dotyczy takich podmiotów jak: użytkownicy, procesy, systemy i informacja 

niezawodność 

 

właściwość oznaczająca spójne, zamierzone zachowanie i skutki 

 

64. Kryptosystemy symetryczne oraz metody dystrybucji kluczy w systemach 

symetrycznych. 

 

Kryptosystem 

symetryczny 

opis 

DES 

 

Opracowany przez IBM, najbardziej popularny 

 

Szyfrowanie 64-bitowe bloki danych 

 

Długość bloku wejściowego = wyjściowego = 64 

 

(de)szyfrowanie wyznacza 64-bitowy klucz 

 

8 bitów = bity parzystości 

 

Aktualnie uznawany za słaby 

3DES 

 

Potrójny DES (3-krotny szyfr algorytmem DES – 3 różne klucze) 

 

Bezpieczniejszy 

 

Chroni przed atakami przestrzeni kluczy 

IDEA 

 

Alternatywa dla DES, stworzona w Europie 

background image

 

Stosunkowo nowy algorytm 

RC4 

 

Algorytm szyfrowania strumieniowego 

 

Opiera się o ciąg pseudolosowych permutacji generowanych z klucza 

 

1 z częściej stosowanych algorytmów szyfrujących 

RC5 

 

Blokowy algorytm szyfrujący 

 

Dane szyfrowane w 16, 32 lub 64-bitowych blokach 

 

Długość klucza = parametr 

 

Prosta budowa 

 

Uważany za bezpieczny 

RC6 

 

Następca RC5 

 

Blokowy algorytm szyfrujący 

 

Prosta budowa wprost z RC5 

 

Dane szyfrowane 128-bitowym kluczem 

AES 

 

Blokowy algorytm szyfrujący 

 

Dane szyfrowane 128, 192 lub 256-bitowym kluczem 

 

Wielkość bloku: 128 

 

Standardowy algorytm szyfrowania symetrycznego 

Serpent 

 

Blokowy 

 

Dane szyfrowane 256-bitowym kluczem 

Twofish 

 

Blokowy 

 

Dane szyfrowane są 128-, 192- lub 256-bitowym kluczem w 128-bitowych blokach

 

Blowfish 

 

Klucze o zmiennej długości (do 448 bitów) 

 

bezpieczny 

mars 

 

Blokowy 

 

Dane szyfrowane kluczem w 128-bitowych blokach 

 

Długość klucza: 128 – 400 bitów 

SAFER 

 

Algorytm blokowy 

 

Wersja z 64bitowym kluczem obejmująca 6 rund i z kluczem 128b o 12 rund 

 
Szyfrowanie i odszyfrowywanie 

 

Szyfrowanie polega na takim przekształceniu wiadomości (tekstu jawnego) by dla osoby trzeciej, różnej od 
nadawcy i odbiorcy, stanowiła ona jedynie przypadkowy ciąg znaków, na podstawie którego nie jest 
możliwe odtworzenie żadnej użytecznej informacji. 

 

Otrzymany w wyniku szyfrowania ciąg znaków nosi nazwę tekstu zaszyfrowanego (lub inaczej szyfrogramu). 

 

Procesem odwrotnym do szyfrowania, wykonywanym przez odbiorcę wiadomości jest odszyfrowywanie, 
pozwalające na odtworzenie tekstu jawnego. 

 

System kryptograficzny 

 

zbiór wszystkich tekstów jawnych (wiadomości), które mogą być zaszyfrowane przy użyciu danego szyfru to 
dziedzina przekształceń szyfrujących. 

 

Nowoczesne szyfry zazwyczaj nie wprowadzają żadnych ograniczeń na postać wiadomości podlegającej 
szyfrowaniu.  

 

Wiadomość może stanowić dowolny – sensowny lub bezsensowny – ciąg znaków. 

 

W rodzinie przekształceń odszyfrowujących istnieje zazwyczaj tylko jedno przekształcenie odwrotne do 
wybranego przekształcenia szyfrującego. 

 

Tylko użycie właściwego klucza po stronie odbiorczej zapewnia odtworzenie zaszyfrowanej wiadomości. 

 

Klucze systemu kryptograficznego 

 

Klucz kryptograficzny wyznacza odpowiednie przekształcenie szyfrujące i/lub odszyfrowujące. 

 

Klucz szyfru jest parametrem, którego wartość decyduje o tym, które odwzorowanie ze zbioru 
odwzorowań wyznaczonych przez ogólny algorytm szyfrowania, zostanie użyte do zaszyfrowania lub 
odszyfrowania danej wiadomości. 

 

Zbiór możliwych do wyboru kluczy powinien być na tyle liczny, by niemożliwe było (w praktyce) 
odtworzenie będącego w użyciu klucza metodą sprawdzenia wszystkich możliwości 

 

background image

Systemy kryptograficzne dzielą się na dwie podstawowe grupy: 

 

Systemy symetryczne (klasyczne) - w systemach tych, zwanych również systemami szyfrowania z kluczem 
tajnym nadawca i odbiorca posługują się tym samym kluczem, zarówno do szyfrowania jak i do 
deszyfrowania. 

 

Systemy asymetryczne (publicznego klucza) - systemy te, zwane również systemami szyfrowania z kluczem 
jawnym, posługują się dwoma oddzielnymi kluczami, przy czym jeden klucz służy do szyfrowania, a drugi 
do deszyfrowania. 

 

Para takich kluczy jest przypisana każdemu użytkownikowi sieci 

 

Klasy systemów kryptograficznych 

Szyfry blokowe 

Szyfry strumieniowe 

 

Jednoczesna transformacja ustalonej porcji (bloku) znaków wiadomości 
wejściowej do postaci zaszyfrowanej 

 

Długie wiadomości są wstępnie dzielone na fragmenty odpowiadające długości 
podstawowego bloku 

 

Jeśli ostatni fragment (lub krótka wiadomość) ma mniej znaków niż ustalona 
długość bloku dla danego szyfru -> konieczność uzupełnienia lub dopełnienia 
wiadomości przed szyfrowaniem (wielokrotność długości podstawowego bloku) 

 

Jest kilka metod dopełniania wiadomości (wszystkie rozróżniają na jednoczesne 
odróżnienie wiadomości od dopełnienia po stronie odbiorczej) 

 

Jeśli wiadomość generowana współbieżnie z szyfrowaniem = urządzenie 
szyfrujące musi czekać aż wygenerowana zostanie liczba znaków odpowiadająca 
długości bloku (szyfrowanie i przesłanie zaszyfrowanego bloku) 

 

Szyfrowanie każdego pojawiającego się 
na wejściu urządzenia szyfrującego 
znaku wiadomości (połączenie go w 
pewien odwracalny sposób z 
wygenerowanym wewnątrz urządzenia 
znakiem klucza) 

 

Kolejne znaki wiadomości łączone są z 
kolejno generowanymi znakami klucza -
> szyfruje się „strumień” znaków 
wiadomości przy pomocy „strumienia” 
znaków danych 

 

65. Kryptografia asymetrycznej w zagadnieniach bezpieczeństwa sieciowych systemów 

komputerowych – przykłady zastosowań. 

 
Teoria szyfrowania asymetrycznego – zadanie 64 
 

nazwa 

opis 

Kryptosystem 
RSA 

 

Pierwszy, powszechny algorytm szyfrowania asymetrycznego 

 

oparty jest na trudności obliczeniowej faktoryzacji dużych liczb półpierwszych. 

 

zachowuje poufność i uwierzytelnienie danych (w zależności od szyfrowania kluczem prywatnym, czy 
publicznym) 

 

ciąg bitów podawanych na wejście przekształcenia szyfrującego jest traktowany jako duże (rzędu kilkuset cyfr 
dziesiętnych) liczba całkowita M. 

 

rolę klucza prywatnego pełni trójka dużych liczb całkowitych SK=(d, p,q)  

 

rolę klucza publicznego pełni para liczb PK=(e ,n)  

 

liczby p i q są dużymi liczbami pierwszymi  

 

liczba n jest iloczynem liczb p i q, n=p⋅q  

 

liczby e i d związane są zależnością: 1=(e⋅d)mod (( p –1)(q – 1))  

 

przy czym musi d spełniać warunek: d< ( p– 1)(q –1) 

 

przeznaczony do szyfrowania i odszyfrowywania n-bitowych loków danych 

 

blok wejściowy i wyjściowy mają taką samą długość; obecnie przyjęte n = 1024 i jest wielokrotnością 

 

Przekształcenie odwrotne wymaga znajomości liczby d (zawartej w kluczu prywatnym i wyznaczone jest przez 
algorytm: M=(M ') d mod n. 

 

generowanie kluczy 

 

zaszyfrowanie i deszyfrowanie -> korzystamy z pierwotnych wzorów:  

o  Tekst zaszyfrowany=(tekst jawny )mod n  
o  Tekst niezaszyfrowany=(tekst zaszyfrowany)mod n 

 

standard do podpisów cyfrowych 

El Gammal 

 

wariant systemu Diffiego – Hellmana (rozszerzenie) 

 

1 algorytm szyfrujący i 1 uwierrzytelniający 

 
 

background image

Zaawansowane metody szyfrowania asymetrycznego 

 

Algorytmy wykorzystujące dyskretne krzywe eliptyczne (ECC, Elliptic Curve Cryptosystems) opierają się na 
innych zasadach matematycznych niż podzielniki czy dyskretny problem logarytmiczny 

 

ECC są pod pewnymi względami lepsze niż RSA czy Diffie-Hellman - klucze są mniejsze, a tym samym 
obliczenia przebiegają szybciej przy takim samym poziomie bezpieczeństwa . 

 

Takie samo zabezpieczenie przy 1024-bitowym dla RSA można osiągnąć w ECC przy kluczu 160-bitowym. 
Algorytmy wielomianowe oparte na trudnościach obliczeniowych tzw. pierścieni wielomianów ciał 
skończonych. 

 

66. Podpis elektroniczny a podpis cyfrowy, definicje, przykłady zastosowań. 

 

elektroniczny 

cyfrowy 

 

Podpisanie dokumentu przez osobę fizyczną 

 

Dane w postaci elektronicznej 

 

Wraz z innymi danymi, do których został 
dołączony/logicznie powiązany służy do identyfikacji osoby 
składającej podpis elektroniczny 

 

Równoważny pod względem skutków prawnych 
dokumentowi podpisanego własnoręcznie (jeśli jest tzw. 
Elektronicznym podpisem bezpiecznym) 

 

Matematyczny sposób potwierdzenia autentyczności 
cyfrowego dokumentu 

 

Najpowszechniejszy – schemat podpisu dokumentów 
cyfrowych w systemach kryptograficznych z kluczem 
publicznym i 1-kierunkową funkcją skrótu (do wiadomości 
dołącza się skrót dokumentu, zaszyfrowany prywatnym 
kluczem nadawcy) 

 
Zgodnie z ustawą bezpieczny podpis elektroniczny to podpis elektroniczny, który:  

 

jest przyporządkowany wyłącznie do osoby składającej ten podpis 

 

jest sporządzany za pomocą podlegających wyłącznej kontroli osoby składającej podpis elektroniczny 
bezpiecznych urządzeń służących do składania podpisu elektronicznego i danych służących do składania 
podpisu elektronicznego 

 

jest powiązany z danymi, do których został dołączony, w taki sposób, że jakakolwiek późniejsza zmiana tych 
danych jest rozpoznawalna. 

 
Przykłady zastosowań: 

 

deklaracje podatkowe 

 

deklaracje ZUS 

 

odwołania w postępowaniu administracyjnym 

 

67. Zapory ogniowe – pojęcia podstawowe, obszary zastosowań. 

 
Zapora sieciowa 

 

Sposób zabezpieczania sieci i systemów przed intruzami 

 

Odnosi się zarówno do dedykowanego sprzętu komputerowego i do specjalnego oprogramowania 
blokującego dostęp do komputera 

 

Ochrona sprzętowa + programowa sieci LAN przed dostępem z zewnątrz (i danych na zewnątrz) 

 

Często komputer z odpowiednim oprogramowaniem – filtrowanie połączeń wchodzących i wychodzących = 
odmowa żądań dostępu uznanych za niebezpieczne 

 

Najczęstsze techniki obrony 

 

Filtrowanie pakietów (akceptowanie pakietów) 

 

Stosowanie algorytmów identyfikacji użytkownika 

 

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

 

Monitoruje ruch sieciowy i zapisuje zdarzeń do logu (możliwość zmian w konfiguracji) 

 

Można zdefiniować strefę ograniczonego zaufania = podsieć izolującą od wewnętrznej sieci lokalne serwery 
udostępniające usługi z zewnątrz 

 

68. Systemy wykrywania zagrożeń (IDS) – koncepcja, zasady lokalizacji sondy. 

 

background image

IDS, IPS (ang. Intrusion Detection System, Intrusion Prevention 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 

 

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 

 

zależy od lokalizacji sondy i zakresu analizowanych zdarzeń 

 

rodzaje: 

Hostowe (ang. Host-based IDS) 

sieciowe(ang. Network IDS) 

 

działają jako aplikacja w jednym, 
ochranianym systemie 
operacyjnym analizując 
zdarzenia pochodzące z logu 
systemowego oraz z lokalnych 
interfejsów sieciowych 

 

analizują ruch sieciowy dla wszystkich systemów w segmencie sieci, do którego są 
podłączone 

 

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) 

 
Sieciowe systemy IPS mogą działać w następujących topologiach sieciowych: 

pasywna sonda 

Inline 

 

podłączona do portu monitorującego przełącznika analizuje 
kopie wszystkich pakietów w danym segmencie sieci 

 

Sonda w tej topologii ma ograniczone możliwości reagowania 
na ataki 

 

techniki blokowania ataków w topologii pasywnej 

 

wysyłanie fałszywych pakietów TCP RST do obu stron 
komunikacji i zerwanie połączenia (blokowany tylko TCP) 

 

dynamiczna rekonfiguracja zapory, z którą sonda może 
współpracować (możliwość spóźnienia reakcji) 

 

umieszczona pomiędzy dwoma segmentami sieci, pozbawiona 
adresów IP i działająca w trybie przezroczystego mostu 
analizuje i bezpośrednio uczestniczy w przekazywaniu 
wszystkich pakietów w sieci 

 

sonda ma możliwość blokowania 100% pakietów rozpoznanych 
jako niebezpieczne (fałszywe pakiety TCP RST nadal są 
wysyłane dla uniknięcia retransmisji). 

 

Działanie w tym trybie nakłada na oprogramowanie sondy 
znacznie wyższe wymagania co do wydajności i stabilności 

 

69. Wirtualne sieci prywatne (VPN) - koncepcja, przykłady zastosowań, stosowane 

protokoły. 

 
VPN 

 

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 

 
 

background image

Protokoły 

protokół 

opis 

IPSec 

 

Najbardziej uniwersalny, ale mający też największe ograniczenia 

 

Nadaje się do stworzenia wszystkich rodzajów VPNów 

 

W wersji podstawowej nie radzi sobie z NATem i musi znać konfigurację zdalnej sieci. 

 

zbiór protokołów stworzony w celu implementacji bezpiecznych połączeń pomiędzy komputerami 

 

Protokół IP nie gwarantuje iż otrzymane datagramy: 
–  pochodzą od deklarowanego nadawcy 
–  zawierają dane, które były umieszczone w nim przez nadawcę 
–  ich zawartość nie został zmieniona 

 
Tryb transportu 

–  Tryb transferu jest trybem domyślnym protokołu IPSec. 
–  Służy do ustanawiania komunikacji typu dwupunktowego (klient – serwer). 
–  Typowy tryb przy komunikacji software – urządzenie. 
–  W tym trybie szyfrowaniu podlega wyłącznie ładunek UP. 
–  IPSec zapewnia ochronę datagramów IP oraz protokołów warstw wyższych przy pomocy protokołów ESP i AH. 
 

Tryb tunelowania 

–  W trybie tunelowania protokołu IPSec szyfrowane są nagłówek i ładunek IP (w trybie transportu szyfrowany jest 
tylko ładunek IP). 
–  Tryb tunelowania zapewnia ochronę całego pakietu UP, traktując go jako ładunek AH lub ESP. 
–  W trybie tunelowania cały pakiet jest enkapsulowany za pomocą nagłówka AH lub ESP i uzupełniany dodatkowym 
nagłówkiem IP. 
–  Adresy IP określone w zewnętrznym nagłówku IP są punktami końcowymi tunelu, a adresy IP określone w 
enkapsulowanym nagłówku IP są ostatecznymi adresami-źródłowym i docelowym. 
–  Tryb tunelowania protokołu IPSec jest użyteczny do ochrony ruchu między.... 

L2TP 

 

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 

 

Najniższy poziom bezpieczeństwa 

 

GRE – protokół do transmisji danych 

 

Autoryzacja na podstawie loginu i hasła 

 

Autoryzacja przez MS-CHAP, opcjonalne szyfrowanie przez MPPE. Reszta zasad jak w L2TP 

 

70. Wyjaśnij określenie "exploitation-exploration trade-off" w kontekście próby definicji 

sztucznej inteligencji. 

 

 

Trudność definicji sztucznej inteligencji 

 

Wskazuje się na wspólne cechy będące mianownikami SI 

 

Inteligentny system wykorzystuje wiedzę na temat problemu (exploitation) = wykorzystanie tego co już 
wiemy w celu rozwiązania 

 

System musi dążyć do poznania nowego (exploration) 

 

Dobrze skonstruowany system, powinien odpowiednio wyważyć ile zasobów poświęcić na exploitation i 
exploration zarazem 

 

71. Na czym polega uczenie sieci neuronowej algorytmem typu backpropagation. 

 
Jest to uczenie z nadzorem lub inaczej – z nauczycielem. 
Pierwszą czynnością w procesie uczenia jest przygotowanie dwóch ciągów danych: uczącego i weryfikującego. 
Ciąg uczący jest to zbiór takich danych, które w miarę dokładnie charakteryzują dany problem. Jednorazowa 

background image

porcja danych nazywana jest wektorem uczącym. W jego skład wchodzi wektor wejściowy, czyli te dane 
wejściowe, które podawane są na wejścia sieci i wektor wyjściowy czyli takie dane oczekiwane, jakie sieć 
powinna wygenerować na swoich wyjściach. Po przetworzeniu wektora wejściowego, nauczyciel porównuje 
wartości otrzymane z wartościami oczekiwanymi i informuje sieć czy odpowiedź jest poprawna, a jeżeli nie, to 
jaki powstał błąd odpowiedzi. Błąd ten jest następnie propagowany do sieci ale w odwrotnej niż wektor 
wejściowy kolejności (od warstwy wyjściowej do wejściowej) i na jego podstawie następuje taka korekcja wag 
w każdym neuronie, aby ponowne przetworzenie tego samego wektora wejściowego spowodowało 
zmniejszenie błędu odpowiedzi. Procedurę taką powtarza się do momentu wygenerowania przez sieć błędu 
mniejszego niż założony. Wtedy na wejście sieci podaje się kolejny wektor wejściowy i powtarza te czynności. 
Po przetworzeniu całego ciągu uczącego (proces ten nazywany jest epoką) oblicza się błąd dla epoki i cały cykl 
powtarzany jest do momentu, aż błąd ten spadnie poniżej dopuszczalnego. 
 
Uczenie sieci można przeprowadzić dwoma metodami: 

 

on-line - polega na modyfikacji wag po wczytaniu każdej danej wejściowej 

 

off-line - polega na modyfikacji wag po wczytaniu wszystkich danych wejściowych 

 

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

 

Kompresja stratna 

Kompresja bezstratna 

 

X

in

   X

out

 

 

Wyższy poziom upakowania 

 

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. 

 

Używa niedoskonałości ludzkich 
zmysłów 

 

Algorytmy kompresji stratnej -> 
modele psychoakustyczne i 
psychowizualne -> odrzucenie 
najmniej istotnych danych o 
dźwięku, obrazie 

 

pozostawiają dane o wyższej 
wartości dla rozpoznawania tej 
informacji (akustycznej, 
wizualnej) przez zmysły 

 

stopień kompresji = ilość 
odrzucanych danych 

 

brak algorytmów kompresji 
stratnej dla dowolnego typu 
danych (np. pliki) 

 

zastosowania: obrazy, dźwięki, 
mowa, sekwencje video 

 

dane wizualne – osobna 
kompresja dźwięku i obrazu 

 

X

in

=X

out

 

 

Stosowana tam, gdzie nie można dopuścić  do różnicy między danymi a ich 
rekonstrukcji 

 

Typowe zastosowanie – tekst, rekordy bazy danych a także obrazy, które podlegają 
dalszej obróbce (zdjęcia rentgenowskie, zdjęcia satelitarne itp.) 

 

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.  

 

dobrze kompresują "typowe" dane (ze znaczną nadmiarowością informacji 
(redundancji)) 

 

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: na słownikowe i statystyczne, 
choć wiele metod lokuje się pośrodku: 

-  metody słownikowe - poszukiwanie 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 - mniejsza 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. 

 
Popularne metody 

 

kodowanie Shannona, Shannona-Fano, Huffmana, arytmetyczne 

 

LZ77, LZ78 i pochodne (LZSS, LZP, LZW, LZMW, LZAP) 

 

RLE 

 

PPM 

 

transformata Burrowsa-Wheelera, Move To Front 

 

 

kodowanie transformacyjne 

 

maskowanie (przesłanianie 

 

Metody kodowania długości serii (zastępowanie serii jednakowych znaków jednym 
opisem) 

background image

brzmienia dźwięków) 

 

kodowanie różnicowe 
(nadmiarowość przestrzenna) 

 

 

-  unikatowej wartości (ciąg znaków dzielony na podciągi i potem od nowa 

kodowany ) 

-  unikatowych bitów (łączy wartość podciągu z licznikiem powtórzeń w 1 daną) 
-  dwóch serii (dane dzielone na serie danych powtarzających się/swobodnych) 

 

Metoda Huffmana – metoda probabilistyczna, rozkład prawdopodobieństwa -> 
tworzy się niezrównoważone drzewo binarne 

 

Metoda arytmetyczna – rozkład występowania elementów z kodowanego zbioru 
(dystrybuanta, tam sumowanie prawdopodobieństw) 

 

Metody słownikowe – wykorzystują istnienie powtarzających się sekwencji symboli 

-  LZ77 – słownik wewnętrzny (zapisuje na wyjściu gdzie i jak długa sekwencja) 
-  LZW– słownik zewnętrzny (dynamiczna tablica kodowa, po starcie procesu na 

wejściu symbole otrzymują kody) 

 

metoda 

opis 

LZ77 

 

kompresja bezstratna 

 

Prosta metoda adaptacyjna, nie wymaga wcześniejszej wiedzy o charakterze źródła 

 

Kodowanie czasochłonne (dużo porównań); dekodowanie proste i szybkie 

 

Nieduże wymagania dotyczące pamięci 

 

Asymptotycznie – wyniki najlepsze jakie można uzyskać przy pełnej częstości pojawiania się znaków i korelacji 
między nimi 

 

Można zastosować  różne modyfikacje algorytmu (zwiększenie efektywności) 

LZSS 

 

Kompresja bezstratna 

 

Odmiana LZ77 

 

Redundancja – albo nie trzeba pointera (bo jest zerowy), albo kodu znaku (może być przekazany w następnym 
wejściu) 

Pkzip, 

Zip, gzip, 

ARJ, 

LHarc 

 

Kompresja bezstratna 

 

poprawa efektywności kodowania – kodowanie trójek (lub dwójek liczb) kodowaniem o zmiennej długości  

LZ78 

 

Szybsze kodowanie niż LZ77 (znacznie mniej porównań stringów) 

 

Łatwe dekodowanie (choć wolniejsze niż dla LZ77 – konieczność odbudowy słownika) 

 

Wzorce są stale dodawane do słownika (1 wzorzec na jeden proces kodowania) i nie zapominane – 
niebezpieczeństwo przepełnienia pamięci 

 

Jest punktem wyjścia dla algorytmów pochodnych – najbardziej znany algorytm LZW. 

LZW 

 

Kompresja bezstratna 

 

Zastosowanie: format GIF, kompresja danych wysyłanych przez modem 

 
Kompresja stratna: 

obraz 

video 

dźwięk 

 

JPEG, podstawa algorytmu 
MPEG, oparty na DCT i dający 
relatywnie słabe rezultaty; 
wykorzystuje ograniczenia 
ludzkiego wzroku -> lepsza 
kompresja, możliwe 
odwzorowanie kolor 24-
bitowego; opis zdjęć i 
naturalnych obrazów; 
użytkownik określa stopień 
kompresji 

 

JPEG2000, oparty na falkach, 
dający znacznie lepsze wyniki  

 

DivX/XviD, przy odpowiednich 
warunkach może skompresować 
zawartość płyty DVD na zwykłą CD, bez 
widocznych różnic.   

 

MPEG, jedną z jego odmian stosuje się 
przy filmach na DVD, bardzo wysoka 
jakość, połączona z większymi 
objętościowo plikami (100MB DivX = 
ok. 350MB MPEG).   

 

Real Video, niską jakość obrazu 
rekompensuje mała objętość dzięki 
czemu wykorzystywany jest przy 
transmisjach na żywo.  

 

 

MP3, najpopularniejsze kodowanie 
stratne audio, oparte na MDCT, 
stosuje model psychoakustyczny 
Instytutu Fraunhoffera i firmy 
Thomson.   

 

Ogg Vorbis, oparte na MDCT   

 

Real Audio, podobnie jak Real Video, 
rekompensuje straty jakości małą 
objętością, jest stosowany głównie do 
transmisji na żywo. 

 

 
 

background image

Kompresja bezstratna 

obraz 

video 

dźwięk 

 

GIF – prezentacja 8-bitowego koloru, 
umożliwia wyświetlanie przeplotem; 
GIF89a – zapis animacji 

 

TIFF – mechanizm wymiany danych 
rastrowych w sposób niezależny od 
platformy, zapis wielu typów obrazów; 
kompresja lub bez kompresji 
(bestratna) 

 

PNG – wszystkie typy grafiki rastrowej, 
lepsza od kompresji GIF, 2-wymiarowy 
przeplot, brak możliwości animacji 

 

 

 

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.  
 
 
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 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 

background image

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.