PODSTAWY OBSAUGI SYSTEMU QNX6
Opracowano na podstawie Systemy czasu rzeczywistego QNX6 Neutrino J. Ułasiewicz
1. Instalacja systemu
System QNX6 Neutrino ma niewielkie wymagania sprzętowe. Trudno je jedno-
znacznie określić, gdyż zależą one od zestawu procesów, które mają być
uruchomione, i wymaganej szybkości działania urządzenia. Proste aplikacje
tekstowe pracują już na komputerze z procesorem INTEL 386DX i 2 MB
pamięci RAM.
1
Aplikacje używające trybu graficznego wymagają więcej pamięci. System daje
się zainstalować na większości komputerów typu PC, ale nie wszystkie karty
graficzne, sieciowe, dzwiękowe będą obsługiwane. Lista sprzętu zgodnego z
systemem jest podana na witrynie QNX Software Systems Ltd [37] i podlega
ciągłej aktualizacji.
Instalacja systemu QNX6.3 Neutrino wraz z pakietem Momentics i narzędziami
GNU na komputerze PC z procesorem Celeron 633 MHz, 512 MB pamięci
RAM, kartą sieciową Realtek 8139, kartą graficzną S3 Trio 2 MB i dyskiem
stałym 1546 MB. Konfiguracja ta nie zapewniała bardzo szybkiej pracy, ale do
testów okazała się w zupełności wystarczająca. Jeżeli nie ma potrzeby insta-
lowania pakietu Momentics na wszystkie platformy, to dysk 300 MB powinien
okazać się wystarczający.
2
Przyjęto założenie, że QNX6 Neutrino jest zainstalowany na partycji twardego
dysku komputera typu PC. Na tym komputerze będzie też tworzone
oprogramowanie.
Możliwe jest także zainstalowanie systemu na emulatorze komputera PC.
Wymienić tu można takie emulatory jak:
o QEMU (licencja GNU),
o Microsoft Virtual PC,
o VirtualBox firmy SUN (licencja GNU General Public License (GPL)),
o VMware Workstation.
3
System QNX6.3 zainstalowano na Microsoft Virtual PC, co odbyło się bez
kłopotów - jednak system wykazywał zauważalne spowolnienie. Instalacja na
VMware Workstation 5.5 przebiegła poprawnie, a system był emulowany
wyraznie szybciej. Pracująca w maszynie wirtualnej kopia systemu skomuni-
kowała się z drugą stacją pracującą bezpośrednio pod kontrolą QNX6 Neutrino.
Najłatwiej zainstalować system z instalacyjnej płyty CD-ROM. Płytę taką,
zawierającą system operacyjny QNX6 Neutrino i 30-dniową wersję środowiska
uruchomieniowego Momentics, można uzyskać bezpłatnie z witryny firmy
QNX Software Systems Ltd.
4
W celu zainstalowania systemu należy:
1. Przygotować komputer PC kompatybilny z QNX6 Neutrino i odpowiednim
obszarem dysku stałego przeznaczonym na system.
2. W menu konfiguracyjnym BIOS-u ustawić taką kolejność wczytywania,
aby system operacyjny był wczytywany najpierw z napędu CD-ROM.
3. Włożyć do napędu CD-ROM płytę instalacyjną z QNX6 Neutrino.
4. Wykonać restart komputera. Po restarcie system operacyjny uruchomi się z
płyty CD-ROM i rozpocznie procedurę instalacyjną.
Przebieg przykładowej procedury instalacyjnej pokazano w tabeli.
5
Tab. Instalacja systemu QNX6 Neutrino na komputerze PC
Please select boot option.
F2 - Run from CD (Hard Disk fs. mounted
under It s) F3 - Install QNX to a new disk
1
partition Select?
Wybrać F3
This installation will create a QNX partition on your hard disk and create a
bootable QNX Neutrino image. You may abort this installation at any prompt by
pressing the F12 key. Press Fl to continue. Press F2 to set verbose (debug)
2
mode. Choice (Fl, F2)?
Wybrać F1
Please enter your license key:
3
Wprowadzić numer licencji
6
QNX Momentics End User License
Agreement F1: Accept F2: Reject
4
Wybrać F1
Please enter the disk you would like to install QNX Neutrino on.
The disk must be bootable from your BIOS.
5 Disk Device Type Size Heads Sectors Cylinders
F1 /dev/hd0 EIDE 1549M 64 63 787
Choose disk (Fl)?
Wybrać F1
6 Gdy na dysku istnieje partycja QNX-a należy ją skasować.
Your disk Has room for a 1549 megabyte QNX partition.
Please select the size of the partition.
7
F1 all 1549M
7 F2 half 774M
F3 quarter 387M
F4 eight 193M
F5 Display partition table, so you can delete an existing
partition. Choice (F1, F2, F3, F4, F5)?
Wybrać opcję stosownie do pojemności dysku. W przykładzie wybrano F1.
8 Kopiowanie plików z CD-ROM-u na dysk
9 Do you wish to install to the default location of / usr/qnx630' (y/n)? [y]
Wybrać y i nacisnąć Enter
10 Do you wish to install the QNX Neutrino SDK (All Targets) (y/n)? [y]
Wybrać y i nacisnąć Enter
8
Do you wish to install the Integrated Development Enviroment (y/n)? [y]
11
Wybrać y i nacisnąć Enter
Do you wish to install the GNU Public License Utility package (y/n)? [y]
12
Wybrać y i nacisnąć Enter
13 Installing qnx6-host... please wait.
** Installation complete **
14 Please remove the installation media then press 'Enter' to reboot.
Nacisnąć klawisz Enter
9
Po restarcie system samoczynnie dokończy procedurę instalacyjną i zaproponuje
preferowany tryb graficzny. Po jego akceptacji trzeba zalogować się do systemu
jako użytkownik root (hasło nie jest wymagane). Następnie należy wybrać
strefę czasową (Poland), klawiaturę (US English), język (Polish) oraz
czas i datę. Następnie system poprosi o aktywację licencji, należy tego dokonać,
wybierając opcję "Activate Now". Od tego momentu system jest gotowy do
pracy. Początkowy ekran zgłoszenia się systemu przedstawiono na rysunku.
10
Rys. Zgłoszenie się systemu QNX6.3 Neutrino
2.
11
Konfiguracja sieci Qnet
System QNX6 Neutrino jest atrakcyjną platformą do implementacji systemów
rozproszonych. Aby skorzystać z oferowanych możliwości, należy połączyć
komputery siecią lokalną Ethernet. Komputery te powinny być wyposażone w
obsługiwane przez system karty sieciowe. Przykładową konfigurację takiej sieci
pokazano na rysunku.
Rys. 4.2. Komputery PC połączone Ethernetem
12
Komunikacja pomiędzy węzłami może odbywać się pod kontrolą protokołu TCP/IP
lub Qnet. Powstaje pytanie, którego z nich używać? Odpowiedz zależy od celu,
któremu system taki ma służyć. Sieć Qnet jest stosowana do połączenia zaufanych
użytkowników i pozwala na głęboką integrację zasobów poszczególnych węzłów.
Protokół TCP/IP lepiej nadaje się do połączenia luzno związanych komputerów o
różnych architekturach. Nic jednak nie stoi na przeszkodzie, aby zainstalować i
wykorzystywać obydwa protokoły. Rozważmy przykład, w którym dwa komputery
są połączone siecią Ethernet. Niech jeden z komputerów nazywa się astra, a
drugi qumak. Aby uruchomić sieć Qnet, należy sprawdzić, czy sieć jest aktywna.
Sprawdza się to poprzez polecenie:
$ls /net
astra qumak
13
Gdy sieć Qnet jest nieaktywna, katalog net się nie pojawi. Aby uaktywnić Qnet,
należy:
1.Utworzyć w katalogu /etc/system/config plik useqnet poprzez
polecenie:
$touch/etc/system/config/useqnet.
2.Nadać nazwę komputerom, uruchamiając z belki startowej program
Configure|Network, i wypełniając pole Host Name z zakładki Network co
obrazuje rysunek.
3.Zrestartować komputer.
14
Rys. Ustalanie nazwy węzła sieci Qnet
15
Po zrestartowaniu komputera w katalogu /net powinny się pojawić
komputery astra i qumak (jak też i inne podłączone do sieci). Do
testowania stanu sieci można wykorzystać również polecenie pidin z
parametrem net. Polecenie to wyświetla widoczne w sieci węzły:
$pidin net
ND Node CPU Release FreeMem BootTime
0 astra 1 X86 6.3.0 510Mb/639Mb Apr 26 22:52:32 2007
1 qumak 1 X86 6.3.0 194Mb/255Mb Apr 26 12:09:28 2007
16
Informacje o procesach wykonywanych na zdalnym węzle można uzyskać,
wykonując polecenie pidin z parametrem -n nazwawęzła. Przykładowo
informacje o procesach wykonywanych na węzle astra można uzyskać,
wykonując polecenie:
$pidin -n astra | less
Z kolei informacje o zainstalowanych w komputerze interfejsach sieciowych
można wygenerować za pomocą polecenia nicinfo. Dalsze informacje o
konfigurowaniu sieci Onet można znalezć w podręczniku Using Qnet for
Transparent Distributed Processing.
3.
17
Podstawowe polecenia systemu
Ograniczona objętość wykładu nie pozwala na bardziej szczegółowy opis
poleceń systemu dotyczących jego konfigurowania, administrowania oraz
eksploatacji. Polecenia te są opisane szczegółowo w dokumentacji systemu
QNX. Większość istotniejszych poleceń jest zgodnych ze standardem POSIX
1003, a więc osoby mający chociażby niewielkie doświadczenie z systemem
Linux czy Unix nie powinny czuć się zagubione. W wykładzie tym omówiono
tylko podstawowe polecenia umożliwiające zarządzanie katalogami, plikami i
procesami. Podano także wskazówki, jak napisać prosty program i go
uruchomić.
Uzyskiwanie pomocy
18
Dokumentacja systemu jest dostępna w formie elektronicznej w formacie
HTML. Można ją oglądać za pomocą wchodzącej w skład systemu przeglądarki
Mozilla. Najważniejsze podręczniki zestawiono w tabeli. System pomocy
uruchamia się, klikając w ikonę z napisem Help umieszczoną na belce
programów. Skrócony opis poleceń systemowych można uzyskać, wypisując w
oknie terminalu polecenie:
$ use nazwa_polecenia
19
Tab. Najważniejsze podręczniki systemu QNX6 Neutrino
System Architecture Architektura systemu, administratory zasobów, procesy,
wątki, komunikaty, przetwarzanie rozproszone
Users Guide Konfigurowanie systemu, administracja systemem
Programmers Guide Sposób pisania, kompilacji i uruchamiania programów
Utilities Reference Opis narzędzi i poleceń systemowych
Library Reference Opis wywołań systemowych
20
Pliki i katalogi
W systemie QNX6 Neutrino prawie wszystkie zasoby są plikami.
Dane, urządzenia, bloki pamięci, a nawet pewne usługi są reprezentowane przez
abstrakcję plików.
Mechanizm plików pozwala na jednolity dostęp do zasobów zarówno
lokalnych, jak i zdalnych, za pomocą poleceń i programów usługowych
wydawanych z okienka terminalu.
Plik jest obiektem abstrakcyjnym, z którego można odczytywać i do którego
można wpisywać.
Oprócz zwykłych plików i katalogów w systemie plików są widoczne pliki
specjalne. Zaliczamy do nich łącza symboliczne, kolejki FIFO, bloki pamięci,
urządzenia blokowe i znakowe. Oznaczenia typów plików podano w tabeli.
21
Tab. Typy plików w systemie QNX6 Neutrino
Oznaczenie Typ Opis
- Plik regularny (ang. Ciąg bajtów pamiętany w urządzeniu
Regular file) pamięciowym
D Katalog (ang. Directory) Plik zawierający informację o innych plikach
l Dowiązanie symboliczne Dodatkowa nazwa dla pliku, który jest
(ang. Symbolic Link) umieszczony w innym miejscu
P Plik specjalny FIFO (ang. Bufor cykliczny w pamięci operacyjnej
FIFO)
c Specjalny plik znakowy Urządzenie z dostępem znakowym (konsola,
(ang. Charakter Device) porty szeregowe, porty równolegle)
b Specjalny plik blokowy Urządzenie z dostępem blokowym (dyski,
(ang. Block Device) partycje dyskowe)
n Nazwany plik specjalny Na przykład blok pamięci
s Gniazdo (ang. Socket) Punkt końcowy komunikacji sieciowej
TCP/IP
22
System umożliwia dostęp do plików w trybie odczytu, zapisu lub wykonania.
Symboliczne oznaczenia praw dostępu do pliku są następujące:
r - Prawo odczytu (ang. read)
w - Prawo zapisu (ang. write)
x - Prawo wykonania (ang. execute)
Prawa te mogą być zdefiniowane dla właściciela pliku, grupy, do której on
należy, i wszystkich innych użytkowników:
u - Właściciela pliku (ang. user)
g - Grupy (ang. group)
o - Innych użytkowników (ang. other)
23
Polecenia dotyczące katalogów
Pliki są zorganizowane w katalogi.
Katalog ma postać drzewa z wierzchołkiem oznaczonym znakiem /.
Położenie określonego pliku w drzewie katalogów określa się za pomocą
ścieżki.
Rozróżnia się ścieżki absolutne i relatywne (względne).
Ścieżka absolutna podaje drogę, jaką trzeba przejść od wierzchołka drzewa do
danego pliku.
Przykład ścieżki absolutnej to /home/juka/prog/hello.c. Ścieżka
absolutna zaczyna się od znaku /.
24
Ścieżka relatywna zaczyna się od innego znaku niż /. Określa ona położenie
pliku względem katalogu bieżącego. Po zarejestrowaniu się użytkownika w
systemie katalogiem bieżącym jest jego katalog domowy. Może on być
zmieniony na inny za pomocą polecenia cwd.
Uzyskiwanie nazwy katalogu bieżącego
Nazwę katalogu bieżącego uzyskuje się, pisząc polecenie pwd. Na przykład:
$pwd
/home/juka
25
Listowanie zawartości katalogu
Zawartość katalogu uzyskuje się, wydając polecenie ls. Składnia polecenia
jest następująca:
ls [-l] [nazwa]
gdzie:
l - listowanie w długim" formacie, wyświetlane są atrybuty pliku,
nazwa - nazwa katalogu lub pliku.
Gdy nazwa określa pewien katalog, to będzie wyświetlona jego zawartość.
Gdy nazwa katalogu zostanie pominięta, wyświetlana jest zawartość katalogu
bieżącego.
26
Listowane są prawa dostępu, liczba dowiązań, właściciel pliku, grupa, wielkość,
data utworzenia oraz nazwa. Wyświetlanie katalogu bieżącego pokazano na
rysunku.
Rys. Listowanie zawartości katalogu bieżącego
27
Zmiana katalogu bieżącego
Katalog bieżący zmienia się na inny za pomocą polecenia cd (change
directory).
Składnia polecenia jest następująca:
cd nowy_katalog
Gdy jako parametr polecenia cd podamy dwie kropki .., to przejdziemy do
katalogu położonego o jeden poziom wyżej.
28
Przykład 1. Zmiana katalogu bieżącego z /home/juka na
/home/juka/prog
$pwd
/home/juka
$cd prog
$pwd
/home/juka/prog
Przykład 2. Zmiana katalogu bieżącego na katalog położony o jeden poziom wyżej
$pwd
/home/juka/prog
$cd ..
$pwd
/home/juka
29
Tworzenie nowego katalogu
Nowy katalog tworzy się poleceniem mkdir (make directory).
Polecenie to ma postać:
mkdir nazwa katalogu
Przykład 3. Tworzenie katalogu o nazwie src
$ls
prog
$mkdir src
$ls
prog src
30
Kasowanie katalogu
Katalog kasuje się poleceniem rmdir (remove directory).
Składnia polecenia rmdir jest następująca:
rmdir nazwa_katalogu
Aby możliwe było usunięcie katalogu, musi on być pusty.
Przykład 4. Kasowanie katalogu o nazwie src
$ls
prog src
$rmdir src
$ls
prog
31
Polecenia dotyczące plików
Kopiowanie pliku
Pliki kopiuje się za pomocą polecenia cp.
Składnia polecenia cp jest następująca:
cp [-ifR] plik_zródłowy plik_docelowy
cp [-ifR] plik_zródłowy katalog_docelowy
gdzie:
i - żądanie potwierdzenia, gdy plik docelowy może być nadpisany,
f - bezwarunkowe skopiowanie pliku,
R - gdy plik zródłowy jest katalogiem, to będzie skopiowany z podkatalogami.
32
Przykład 5. Kopiowanie pliku nowy.txt z katalogu bieżącego do katalogu
prog
$ls
nowy.txt prog
$ls prog
$
$cp nowy.txt prog $ls prog
nowy.txt
33
Zmiana nazwy pliku
Nazwę pliku zmienia się za pomocą polecenia mv.
Składnia polecenia mv jest następująca:
mv [-if] stara_nazwa nowa_nazwa
mv [-if] nazwa_pliku katalog_docelowy
gdzie:
i - żądanie potwierdzenia, gdy plik docelowy może być nadpisany,
f - bezwarunkowe skopiowanie pliku.
34
Przykład 6. Zmiana nazwy pliku stary.txt na nowy.txt:
$ls
stary.txt
$mv stary.txt nowy.txt
$ls
nowy.txt
35
Przykład 7. Przeniesienie pliku stary.txt do katalogu prog
$ls
stary.txt prog
$mv stary.txt prog
$ls prog
stary.txt
36
Kasowanie pliku
Pliki kasuje się za pomocą polecenia rm.
Składnia polecenia rm jest następująca:
rm [-Rfi] nazwa
gdzie:
i - żądanie potwierdzenia przed usunięciem pliku,
f - bezwarunkowe kasowanie pliku,
R - gdy nazwa jest katalogiem, to kasowanie zawartości wraz z
podkatalogami.
37
Przykład 8. Kasowanie pliku nowy.txt
$ls
prog nowy.txt
$rm nowy.txt
$ls prog
38
Listowanie zawartości pliku
Zawartość pliku tekstowego listuje się za pomocą poleceń:
more nazwa_pliku
less nazwa_pliku
cat nazwa_pliku
Można do tego celu użyć też innych narzędzi, np. edytora vi, edytora ped
lub edytora wbudowanego w program Midnight Commander.
Przykład 9. Wyświetlenie zawartości pliku nowy.txt
$cat nowy.txt
tu zostanie wyświetlona zawartość pliku nowy.txt
39
Używanie dyskietki
Często zachodzi potrzeba skopiowania plików na dyskietkę (lub z dyskietki) w
celu ich archiwizacji lub przeniesienia do innych komputerów. Na ogól korzysta
się z dyskietek sformatowanych w systemie MS-DOS.
Aby użyć takiej dyskietki, należy zamontować ją w bieżącym systemie plików
komputera. Żeby to uczynić, należy zarejestrować się w systemie jako
administrator. Gdy pracujemy już jako inny użytkownik, należy przełączyć się
w tryb administratora, wykonując polecenie: $su. Polecenie su (ang.
switch user) przełącza nas chwilowo w tryb administratora.
40
Następnie montujemy dyskietkę, wykonując polecenie:
mount -t dos /dev/fd0 katalog.
Parametr katalog jest specyfikacją miejsca w systemie plików, w którym
chcemy widzieć naszą dyskietkę. Może to być na przykład katalog
/home/juka/a. Wykonując polecenie:
mount -t dos /dev/fd0 /home/juka/a
możemy umieścić system plików dyskietki w katalogu /home/juka/a.
Po zamontowaniu dyskietki należy opuścić tryb administratora, wykonując
polecenie exit.
41
Po skopiowaniu potrzebnych plików z (lub na) dyskietkę należy ponownie
przejść w tryb administratora i odmontować dyskietkę, wykonując polecenie:
umount /dev/fd0.
W przykładzie 10 pokazano, jak zamontować dyskietkę, skopiować na nią plik
pcl.c a następnie ją odmontować.
Należy w tym miejscu zauważyć, że na dyskietkę sformatowaną w systemie
MS-DOS nie da się skopiować plików o nazwie dłuższej niż 8 znaków, a
długość rozszerzenia ograniczona jest do trzech znaków. Gdyby zachodziła
potrzeba przenoszenia plików o dłuższych nazwach, należy użyć archiwizatora
tar.
42
Przykład 10. Użycie dyskietki w systemie QNX6 Neutrino
$su
#mount -t dos /dev/fd0 /home/juka/a
#exit
$ ls a
$ cp pcl.c a
$ su
łumount /dev/fdO
#exit
$
43
Uzyskiwanie informacji o stanie systemu
Uruchamiając i testując programy, potrzebujemy niejednokrotnie różnych
informacji o stanie systemu. Dotyczy to w szczególności danych o
uruchomionych procesach, wątkach i użytych zasobach. Zestawienie
ważniejszych programów i poleceń używanych do uzyskiwania informacji o
stanie systemu znajduje się w tabeli.
Tab. Polecenia do uzyskiwania informacji o stanie systemu
psin
Graficzna informacja o procesach i wątkach
pidin
Tekstowa informacja o procesach i wątkach
sin
Informacja o stanie systemu
ps
Informacja o procesach
hogs
Informacja o wykorzystaniu procesora przez procesy
44
Program psin
Wiele informacji o stanie systemu uzyskać można za pomocą programu psin.
Program ten uruchamia się, wybierając ikonę System Infor...
umieszczoną na belce programów lub pisząc polecenie psin w oknie
terminalu (rysunek).
45
Rys. Uzyskiwanie informacji o stanie systemu za pomocą programu psin
46
Na górnej połowie okna są wyświetlane procesy wykonywane w systemie.
Informacje wyświetlane dla każdego z procesów zamieszczono w tabeli.
47
Tab. Informacje o procesach wyświetlane przez program psin w oknie górnym
Skrót Nazwa
Pid
Identyfikator PID procesu
Code
Rozmiar pamięci kodu
Data
Rozmiar pamięci danych
Stack
Aktualny rozmiar stosu
Vstack
Maksymalny rozmiar stosu
CPU
Całkowity czas zajętości procesora w milisekundach
48
Wybierając jeden z procesów, można uzyskać o nim więcej informacji. Klikając
na odpowiednią zakładkę w dolnym oknie, wybieramy żądany zestaw
informacji, co pokazano w tabeli.
Tab. Informacje o procesach wyświetlane przez program psin w oknie dolnym
Skrót Nazwa
Threads
Wątki wykonywane w ramach procesu i ich dane: TID, priorytet, stan
Memory
Segmenty pamięci używane przez proces
FDs
Deskryptory plików używane przez proces
Args
Argumenty przekazywane do procesu
Env
Otoczenie procesu
49
Signals
Sygnały ignorowane, blokowane i oczekujące
Users
Dane użytkownika procesu: UID, GID, EUID, EGID, SUID, SGID
Timers
Timery utworzone przez proces
Intr
Informacje o przerwaniach używanych przez proces
Register
Zawartość rejestrów procesora
Times
Czasy utworzenia procesu i zajętości procesora
50
4. Edycja, kompilacja i uruchamianie programów
Do uzyskania praktycznych doświadczeń z systemem niezbędna jest
umiejętność edycji, kompilacji i uruchamiania programów.
Z uwagi na wymaganą prostotę postępowania, jak i ograniczoną objętość
wykładu założono, że programy będą tworzone za pomocą narzędzi całkiem
podstawowych: edytora ped i kompilatora gcc używanego w trybie
tekstowym.
Edytor ped uruchamia się, wybierając go z grupy Utilities na belce
startowej.
51
Można używać także edytora vi lub Workspace. Aby uruchomić edytor
Workspace, należy uruchomić terminal, wybierając go z grupy
Utilities na belce startowej, a następnie w terminalu wpisać polecenie:
ws. Naukę tworzenia programów rozpoczniemy od tradycyjnego programu
hello.c. Najpierw uruchamiamy edytor ped, a następnie wpisujemy tekst
programu hello (przykład 11).
Przykład 11. Program hello.c
#include
void
main(void) {
printf("Pierwszy program w QNX6 Neutrino!\n");
}
52
Po wpisaniu programu zachowujemy go na dysku, wybierając opcje File/Save
As i podając nazwę pliku hello.c. Następnie otwieramy okno terminalu i
poprzez polecenie ls sprawdzamy czy plik hello.c istnieje w katalogu
bieżącym. Gdy tak jest, to program kompilujemy, pisząc:
$gcc hello.c -o hello
Gdy kompilator wykryje błędy, to je poprawiamy. Następnie uruchamiamy
program pisząc:
$./hello
53
Wykonane działania edycji i uruchomienia pokazano na rysunku.
54
Wyszukiwarka
Podobne podstrony:
SOCR wyklad 2 Architektura QNX6?
SOCR wyklad 1 Wprowadzenie?
Sieci komputerowe wyklady dr Furtak
Wykład 05 Opadanie i fluidyzacja
WYKŁAD 1 Wprowadzenie do biotechnologii farmaceutycznej
mo3 wykladyJJ
ZARZĄDZANIE WARTOŚCIĄ PRZEDSIĘBIORSTWA Z DNIA 26 MARZEC 2011 WYKŁAD NR 3
Wyklad 2 PNOP 08 9 zaoczne
Wyklad studport 8
Kryptografia wyklad
Budownictwo Ogolne II zaoczne wyklad 13 ppoz
wyklad09
Sporzadzanie rachunku przepływów pienieżnych wykład 1 i 2
więcej podobnych podstron