Mechanizmy komunikacji grupowej w bibliotece PVM
|
|
- Barbara Wieczorek
- 8 lat temu
- Przeglądów:
Transkrypt
1 Mechanizmy komunikacji grupowej w bibliotece PVM Zakres ćwiczenia Celem ćwiczenia jest demonstracja funkcji komunikacji grupowej dostępnych w bibliotece PVM, a także zrozumienie konieczności mechanizmów synchronizacyjnych w systemach rozproszonych, jak również pokazanie dostępnej podstawowej operacji synchronizującej, bariery. Komunikacja grupowa W przypadku, gdy procesy pracują wspólnie nad jednym zadaniem, przydatna może być abstrakcyjne pojęcie grupy procesów, wspierającej pewien zestaw prostych operacji. Takie operacje mogą obejmować podstawowe operację rozgłaszania (wysyłania wiadomości do wszystkich członków grupy), operacje synchronizacji (zapewniania, że wszyscy członkowie grupy osiągnęli już pewien moment przetwarzania) i tak dalej. Grupy takie mogą być stałe i niezmienne (statyczne), lub też dynamiczne, których skład jest zmienny w czasie. Podczas projektowania mechanizmów komunikacji grupowej w grupach dynamicznych pojawia się cały szereg zagadnień, takich jak problem widoku składu grupy i tak dalej. W PVM grupy są dynamiczne, co znaczy, że dowolne zadanie może w każdej chwili przyłączyć się do grupy (pvm_joingroup), bądź ją opuścić (pvm_lvgroup) bez konieczności powiadamiania innych. Dowolne zadanie może wysłać komunikat rozgłoszeniowy do grupy nawet jeśli nie jest w danej chwili jej członkiem. Wyjątkiem są funkcje pvm_lvgroup, pvm_barrier (omówienie funkcji dalej) i pvm_reduce (funkcja ta zostanie omówiona podczas przyszłych ćwiczeń), które ze względu na swoją specyfikę wymagają, aby wywołujące je zadanie było członkiem grupy. Zarządzaniem grupami w środowisku PVM zajmuje się wydzielony demon, nazywany serwerem grup (pvmgs). Jest on automatycznie uruchamiany, jeżeli następuje taka potrzeba. Grupy w PVM są więc zarządzane w sposób scentralizowany, co powoduje, że ich rozmiar nie powinien być zbyt duży gdyż przy rosnącym rozmiarze grup serwer grup staje się wąskim gardłem przetwarzania. Ogólną filozofią PVM-a jest jednak prostota i przezroczystość rozwiązań kosztem nawet efektywności, więc takie rozwiązanie dobrze się w nią wpasowuje. Oprócz funkcji poznanych w trakcie obecnych zajęć, PVM udostępnia także szereg funkcji bardziej zaawansowanych, które zostaną omówione w przyszłości. Funkcje te są przydatne do bardziej zwięzłego zapisu niektórych podstawowych operacji często używanych w tworzeniu aplikacji rozproszonych. Rozgłaszanie w środowisku PVM Utworzymy obecnie prosty program, który będzie wykorzystywał funkcje dostarczane przez bibliotekę PVM do utworzenia grupy i rozesłania do grupy komunikatów. Jak zwykle będzie się on składał z dwóch części: mastera i procesów typu slave. Wszystkie te procesy dołączą do utworzonej grupy. Proces master roześle do wszystkich członków grupy wiadomość a następnie poczeka na wiadomości potwierdzające ich odbiór. Program ten będzie posiadał pewien mały błąd, wprowadzony celowo w celach dydaktycznych. Pokażemy na czym polega ten błąd oraz w jaki sposób go naprawić co dokonasz już samodzielnie. Da to nam również okazję do poznania kilku nowych poleceń konsoli PVM, służących do operacji na zadaniach PVM.
2 Pierwszym plikiem będzie plik def.h, w którym znajdzie się jedna dodatkowa definicja: GROUPNAME, czyli nazwa grupy (linijka 6). Pozostała część pozostanie identyczna jak poprzednio, można więc wykorzystać poprzednio utworzony plik dopisując do niego jedną linijkę. plik def.h 1. #include <stdio.h> 2. #include <stdlib.h> 3. #include <pvm3.h> 4. #define SLAVENAME "slave" 5. #define SLAVENUM 4 6. #define GROUPNAME "grupa" 7. #define NAMESIZE #define MSG_MSTR 1 9. #define MSG_SLV 2 Pierwsza część programu mastera nie będzie się różnić zbytnio od poprzednich. Widzimy więc załączenie plików nagłówkowych, definicje zmiennych i utworzenie SLAVENUM procesów typu slave. program master.c 1. #include "def.h" 2. #include <stdio.h> int main() 5. { 6. int tid = pvm_mytid(); 7. int tids[slavenum]; 8. int i, res=0; pvm_spawn("slave",0,0,".",slavenum,tids); Następnie następuje do dołączenie do grupy za pomocą funkcji pvm_joingroup (linijka 9). Jedyny argument tej funkcji to łańcuch tekstowy, nazwa grupy do której proces chce się dołączyć, tutaj zdefiniowanej za pomocą GROUPNAME (która w pliku def.h została określona jako po prostu grupa ). Pierwszy proces próbujący się dołączyć do grupy powoduje równocześnie jej utworzenie. Funkcja ta zwraca numer instancji procesu w grupie liczbę całkowitą jednoznacznie identyfikującą ten proces w obrębie danej grupy. Oznacza to więc, że para <nazwa grupy, numer instancji> jest unikalny w obrębie danej maszyny wirtualnej. Założyciel grupy otrzyma numer instancji 0. Nie jest jednak zagwarantowane, że proces o numerze instancji równym zero to założyciel grupy - każdy proces dołączający do grupy otrzymuje najmniejszy dostępny numer instancji, co oznacza, że jeżeli założyciel opuści grupę za pomocą funkcji pvm_lvgroup, to kolejny proces otrzyma jego numer. Kolejne trzy linijki (10-12) to rozesłanie komunikatu do całej nowo utworzonej grupy. Odbywa się to w podobny sposób jak wysłanie komunikatu do pojedynczego procesu. Najpierw tworzony jest bufor wiadomości za pomocą funkcji pvm_initsend, następnie w tym buforze umieszczany jest element typu int za pomocą funkcji pvm_pkint (tutaj identyfikator mastera). Różnica polega na wywołaniu funkcji pvm_bcast zamiast pvm_send. Argumentem tej funkcji jest nazwa grupy oraz znacznik wiadomości. 9. pvm_joingroup( GROUPNAME ); 10. pvm_initsend( PvmDataRaw ); 11. pvm_pkint( &tid, 1,1); 12. pvm_bcast( GROUPNAME, MSG_MSTR);
3 Bieżący rozmiar grupy można pobrać za pomocą funkcji pvm_gsize, której argumentem jest nazwa grupy. Następnie proces master oczekuje od wszystkich procesów na potwierdzenia (w dowolnej kolejności). W tym celu w pętli (linijki 13-18) wywołuje blokującą funkcji odbioru wiadomości pvm_recv, deklarując odbiór od dowolnego procesu i o typie wiadomości MSG_SLV. Po nadejściu wiadomości wypakowywana jest z niej liczba typu int (którą, jak zobaczymy analizując kod procesu slave, jest identyfikator nadawcy), która zostaje wypisana na ekranie. 13. for (i=0;i<slavenum;i++) 14. { 15. pvm_recv( -1, MSG_SLV ); 16. pvm_upkint( &res, 1, 1); 17. printf("master: %d-ty komunikat. \ Nadawca to t%x\n",i,res); 18. } 19. printf("master: Odebralem wiadomosc od\ wszystkich\n"); 20. pvm_lvgroup(groupname); 21. pvm_exit(); 22. } Wreszcie, po wypisaniu na standardowe wyjście komunikatu o odebraniu wiadomości od wszystkich procesów, proces opuszcza grupę (co nie jest konieczne, ponieważ zaraz i tak się skończy chodzi tutaj tylko o demonstrację użycia funkcji pvm_lvgroup) i następuje wyjście z środowiska PVM oraz zakończenie programu. Procesy slave będą wykonywały program, którego kod zapiszemy w pliku slave.c. Zadaniem każdego programu slave będzie odebranie wiadomości od mastera i następnie odesłanie mu w odpowiedzi, jako potwierdzenia, własnego identyfikatora. Program slave.c 23. #include "def.h" 24. #include <stdio.h> int main() 27. { 28. int ptid = 0; 29. int tid = pvm_mytid(); 30. printf("slave: Czekam na wiadomosci\n"); 31. pvm_joingroup( GROUPNAME ); 32. pvm_recv( pvm_parent(), MSG_MSTR ); 33. pvm_upkint( &ptid, 1, 1); 34. pvm_initsend( PvmDataRaw ); 35. pvm_pkint( &tid, 1, 1); 36. pvm_send( pvm_parent(), MSG_SLV); 37. pvm_exit(); 38. } Pierwszy fragment wymagający wyjaśnienia zaczyna się w linijce 29-tej. Proces dołącza do grupy za pomocą funkcji pvm_joingroup (być może ją tworząc, jeżeli był przypadkiem pierwszym wywołującym tą funkcję). Następnie blokuje się w oczekiwaniu na wiadomość od procesu macierzystego o typie MSG_MSTR. Po otrzymaniu tej wiadomości tworzy bufor komunikacyjny (funkcja pvm_initsend, linijka 32), umieszcza w nim swój identyfikator (funkcja pvm_pkint, linijka 33) i wysyła go do procesu macierzystego z znacznikiem wiadomości MSG_SLV (funkcja pvm_send, linijka 34). Wreszcie opuszcza środowisko PVM za pomocą funkcji pvm_exit (linijka 35) i kończy swoje działanie. Program ten, co może niełatwo zauważyć, jest błędny. Przed przejściem do dalszej części ćwiczenia (kompilacji i uruchomienia programu) spróbuj zastanowić się, co jest tego przyczyną. Tak
4 skonstruowana aplikacja nigdy się nie zakończy. Czy potrafisz powiedzieć, w którym miejscu nastąpi zablokowanie aplikacji i dlaczego? Teraz skompilujemy oba programy. Pojawia się tutaj niewielka różnica w stosunku do poprzednich ćwiczeń. Ponieważ wykorzystują one funkcje komunikacji grupowej, powinieneś w czasie kompilacji dodać dodatkową opcję lgpvm3, powiadamiającą program konsolidujący o konieczności skorzystania z biblioteki współdzielonej zawierającej ciała funkcji służących do różnorakich operacjach na grupach PVM: gcc master.c o master lpvm3 lgpvm3 gcc slave.c o slave lpvm3 lgpvm3 Następnie utworzone pliki wykonywalne kopiujemy do odpowiedniego katalogu cp master slave $PVM_HOME Aplikację można teraz uruchomić za pomocą polecenia konsoli PVM spawn -> master. Wynik uruchomienia (dla czterech procesów typu slave) może wyglądać na przykład tak: pvm> spawn -> master [1] 1 successful t80016 pvm> [1:t4001e] Slave: Czekam na wiadomosci [1:t4001e] EOF [1:t80017] Slave: Czekam na wiadomosci [1:t80017] EOF pvm> Jak widać, nie pojawił się napis [1] finished, który oznacza zakończenie z sukcesem aplikacji. Widzimy w tym przykładzie także tylko dwa napisy EOF, co oznacza, że tylko dwa procesy slave zakończyły swoje działanie. Aplikacja więc się nie skończyła. Dlaczego? Spróbujmy zobaczyć, jakie procesy znajdują się obecnie w środowisku PVM. Dowiemy się tego za pomocą komendy konsoli ps. Samo ps powoduje wypisanie zadań PVM na bieżącym węźle, natomiast ps a wypisze zadania na całej maszynie wirtualnej PVM. pvm> ps -a HOST TID FLAG 0x COMMAND lab c0015 6/c,f slave lab c0016 6/c,f slave lab c0017 6/c,f pvmgs lab /c,f master Jak widać, w systemie wciąż istnieją trzy (w tym wypadku) procesy: dwa typu slave i jeden typu master. Analiza kodu programu powinna doprowadzić ciebie do wniosku, że mogą się one zablokować tylko w jednym miejscu: w czasie wywołania blokującej funkcji pvm_recv (linijka 15 w master.c oraz linijka 30 w slave.c). Procesy najwidoczniej oczekują na pojawienie się komunikatów, które nigdy nie nadchodzą. Pytanie brzmi: dlaczego? Nie należy od razu wysnuwać wniosków o tym, że środowisko PVM zgubiło jakiś komunikat. Jest to praktycznie niemożliwe. Analiza kodu na pewno doprowadzi nas do wniosku, że komunikaty o oczekiwanym typie i identyfikatorze powinny być wysyłane. Najwidoczniej jednak nie są. Rozwiązanie tej zagadki jest niezwykle proste. Mianowicie, kiedy proces master rozsyła wiadomość do wszystkich członków grupy, jest możliwe, że jeszcze nie wszystkie procesy slave do niej zdążyły dołączyć. W takim wypadku może zajść sytuacja, w której master rozsyła wiadomość do członków grupy obejmującej dopiero część procesów slave, po czym zaczyna oczekiwać na wiadomości od wszystkich procesów. Tymczasem część procesów slave dopiero wtedy dołącza do grupy (więc wiadomość rozesłana wcześniej przez mastera nigdy do nich nie dotrze) i blokuje się oczekując na przybycie wiadomość (a więc nigdy nie wyśle do mastera oczekiwanego przez niego potwierdzenia).
5 Oczywiście, musimy wziąć pod uwagę, że środowisko jest rozproszone, więc przedstawiona wyżej sytuacja nie musi się zdarzyć. Istnieje możliwość, że przypadkowo wszystkie procesy slave zdążą dołączyć do grupy zanim master zacznie rozsyłać wiadomości, a więc, że program zakończy się sukcesem (możliwość ta jest nawet całkiem duża, jeżeli zapomniałeś dodać jakieś dodatkowe węzły do maszyny wirtualnej i uruchamiasz przypadkiem programy na tylko jednym komputerze). Jednakże dobrzy programiści nie mogą zakładać, że ich programy być może będą działać. Dobrzy programiści powinni pisać programy tak, by działały zawsze (a przynajmniej, zawsze oprócz naprawdę patologicznych sytuacji). Zanim przystąpimy do napisania poprawnej wersji programu, należy przerwać zadania PVM. Można to uczynić albo za pomocą komendy konsoli kill, albo użyć komendy reset. Komenda kill służy do kończenia pojedynczych zadań działających w środowisku PVM. Należy tutaj podkreślić, że taka komenda jest konieczna co często nie jest oczywiste dla niektórych studentów, którzy zapominają, że zadania PVM są rozproszone na różnych, odległych komputerach, więc zabicie ręcznie ich wymagałoby wyszukiwania odpowiednich procesów i ich zabijanie za pomocą polecenia kill systemu operacyjnego każdego z węzłów. Z kolei komenda reset służy, jak sama nazwa wskazuje, do resetowania maszyny wirtualnej PVM. Zatrzymuje ona wszystkie aktualnie działające zadania. pvm> reset pvm> [1:t80016] EOF [1:tc0015] EOF [1:tc0016] EOF [1] finished Dla bezpieczeństwa, przed uruchomieniem wszystkich programów powinieneś resetować maszynę wirtualną PVM. Zapewni to, że na wpływ wykonywanego programu nie wpływają procesy, które pozostały na maszynie po ewentualnym zablokowaniu w czasie jednej z możliwych błędnych realizacji wykonywanych zadań. Zadanie do samodzielnego wykonania Jak widzimy, podstawowym problemem w poprzedniej realizacji wyznaczonego przez nas zadania był fakt braku synchronizacji między procesami. Proces master za wcześnie rozsyłał wiadomości, nie czekając do chwili w której wszystkie procesy slave znalazły się w grupie. Należy więc wstrzymać się z rozsyłaniem dopóki master nie będzie miał pewności, że pozostałe procesy są gotowe na odbiór wiadomości. Można oczywiście zrobić to na przykład za pomocą wprowadzenia kolejnej pętli w pliku master.c, w której proces master czekałby na wiadomości od wszystkich pozostałych, mówiące mniej więcej: Jestem gotowy! Zacznij rozsyłanie!. Nie należy jednak wynajdywać koła w sytuacji, w której PVM dostarcza już własnych gotowych, prostych mechanizmów. Rozwiązaniem jest użycie do synchronizacji procesów funkcji pvm_barrier. Ta dwuargumentowa funkcja służy do upewnienia się, że wszystkie procesy grupy osiągnęły już pewien moment przetwarzania. Jej wywołanie jest blokujące. Pierwszy argument to nazwa grupy, a drugi to liczba procesów, które powinny również wywołać barierę w tej grupie aby można było odblokować proces. Tak więc, jeżeli proces wywoła funkcję pvm_barrier("pracusie", 4), to będzie on wstrzymany dopóki łącznie cztery procesy z grupy pracusie (włącznie z nim samym, jeżeli też należy do grupy!) nie wywołają tej funkcji. Dodatkową zaletą jej użycia jest jasna semantyka operacji. Programista analizując kod będzie od razu wiedział, co robi ta linijka co nie musiałoby być prawdą, gdybyśmy chcieli osiągnąć to samo za pomocą blokującej funkcji pvm_recv.
6 Rozwiązanie zadania znajduje się w materiałach kursu. Nie zaglądaj do niego, dopóki nie ukończysz ćwiczenia samodzielnie. Wynik uruchomionego programu (dla czterech procesów typu slave) może wyglądać na przykład tak: pvm> spawn -> master [1] 1 successful t40016 pvm> [1:t40017] Slave: Czekam na wiadomosci [1:t40017] Slave: Nazwa grupy: grupa [1:t40017] Slave: Jestem za bariera [1:t40017] EOF [1:tc000e] Slave: Czekam na wiadomosci [1:tc000e] Slave: Nazwa grupy: grupa [1:tc000e] Slave: Jestem za bariera [1:t80011] Slave: Czekam na wiadomosci [1:t80011] Slave: Nazwa grupy: grupa [1:t80011] Slave: Jestem za bariera [1:tc000e] EOF [1:t40016] Master: Czekam na barierze [1:t40016] Master: Jestem za Bariera [1:t40016] Master: 0-ty komunikat. Nadawca to t40017 [1:t40016] Master: 1-ty komunikat. Nadawca to tc000e [1:t40016] Master: 2-ty komunikat. Nadawca to t80011 [1:t40016] Master: 3-ty komunikat. Nadawca to t80012 [1:t40016] Master: Odebralem wiadomosc od wszystkich [1:t40016] EOF [1:t80012] Slave: Czekam na wiadomosci [1:t80012] Slave: Nazwa grupy: grupa [1:t80012] Slave: Jestem za bariera [1:t80011] EOF [1:t80012] EOF [1] finished Poznane funkcje biblioteki PVM int inum = pvm_joingroup(char *group) int info = pvm_lvgroup(char *group) Funkcje te pozwalają zadaniu przyłączyć się do grupy, lub ją opuścić. Pierwsze wywołanie funkcji pvm_joingroup dla grupy powoduje utworzenie danej grupy i dodanie do niej zadania. Funkcja pvm_joingroup zwraca również pozycję procesu w grupie. W PVM proces może należeć do wielu grup. W przypadku opuszczenia grupy i ponownego się do niej przyłączenia zadanie może mieć nową pozycję. int info = pvm_barrier(char *group, int count) Po wywołaniu funkcji pvm_barrier proces wstrzymywany jest do chwili, aż count procesów należących do grupy wywoła synchronicznie funkcję pvm_barrier. W większości przypadków count równe jest ilości procesów w grupie. int info = bcast(char *group, int msgtag) Funkcja pvm_bcast wysyła komunikat zaopatrzony w etykietę tag do wszystkich procesów należących do grupy z wyjątkiem siebie samego. Ponieważ grupy są dynamiczne przyłączenie nowego procesu do grupy podczas rozgłaszania może spowodować, że komunikat nie zostanie przez ten proces odebrany. Podobnie jeśli proces opuści grupę po rozpoczęciu operacji rozgłaszania i tak otrzyma komunikat.
7 Stworzenie topologii pierścienia Kolejnym zadaniem do wykonania dzisiaj będzie modyfikacja programu implementującego topologię pierścienia wykonanego na jednych z poprzednich ćwiczeń. Tym razem wykorzystamy do tego mechanizmy grup udostępniane przez środowisko PVM, co znacznie ułatwi nam zadanie. Wykorzystamy trzy dodatkowe funkcje. Pierwsza z nich to pvm_gettid, która podaje identyfikator zadania PVM na podstawie podanej nazwy grupy i numeru instancji w grupie. Druga to pvm_getinst, która z kolei podaje numer instancji procesu o zadanym identyfikatorze w grupie podanej jako parametr. Wreszcie ostatnia to pvm_gsize, która podaje rozmiar grupy określonej przez parametr. Program master.c 1. #include "def.h" 2. int main(int argc, char **argv) 3. { 4. int tids[slavenum]; 5. int res = 0; 6. pvm_joingroup(groupname); 7. pvm_spawn("slave",0,0,".",slavenum,tids); 8. pvm_barrier(groupname, SLAVENUM+1); 9. pvm_initsend( PvmDataRaw ); 10. pvm_pkint( &res, 1,1); 11. pvm_send( pvm_gettid( GROUPNAME, 1), MSG_SLV); 12. pvm_recv( -1, MSG_SLV ); 13. pvm_upkint( &res, 1, 1); 14. printf("master: Token przeszedl pierscien: t%d\n",res); 15. pvm_exit(); 16. } W nowej wersji programu procesy jako swojego następnika będą wybierały kolejny proces w grupie (według numeru instancji). Aby zapewnić, by master otrzymał numer instancji równy zero, dołączy on do grupy jako pierwszy, przed utworzeniem jakichkolwiek innych procesów (linijka 6). Następnie master czeka, aż wszystkie procesy dołączą do grupy (funkcja pvm_barrier, linijka 8). Jego następnikiem w pierścieniu ma być proces o numerze instancji w grupie równym 1. Aby dowiedzieć się, jaki ten proces ma identyfikator, wywołuje funkcję pvm_gettid, podając jako argumenty nazwę grupy oraz numer instancji równy 1. Dalsza część kodu powinna ci być już znajoma z poprzedniego ćwiczenia realizującego połączenie procesów w pierścień. Kod procesów typu slave jest bardzo podobny. Procesy te wybierają na podobnej zasadzie swojego następnika w pierścieniu, odbierają od poprzednika wiadomość z licznikiem odwiedzin (właściwie oczekują na tą wiadomość od dowolnego procesu, ale jedynym procesem, który może im ją wysłać, jest poprzednik), inkrementują ją i przesyłają dalej.
8 Program slave.c 1. #include "def.h" 2. int main() 3. { 4. int succ = 0, res, i; 5. int tid = pvm_mytid(); 6. int tids[slavenum]; 7. int ginst = pvm_joingroup(groupname); 8. pvm_barrier( GROUPNAME, SLAVENUM+1); 9. if (ginst = pvm_gsize(groupname)-1) 10. succ = pvm_parent(); 11. else 12. succ = pvm_gettid( GROUPNAME, ginst+1); 13. printf("slave: nastepnik w pierscieniu: t%x\n", succ); 14. pvm_recv( -1, MSG_SLV ); 15. pvm_upkint( &res, 1, 1); 16. res++; 17. pvm_initsend( PvmDataRaw ); 18. pvm_pkint( &res, 1, 1); 19. pvm_send( succ, MSG_SLV ); 20. pvm_exit(); 21. } Wybór następnika następuje w linijkach Proces slave sprawdza, czy jest ostatnim procesem w grupie, jeżeli tak, to jego następnikiem jest proces macierzysty, w przeciwnym wypadku wybiera następnika w identyczny sposób jak jego master. Dalsza część kodu jest ci znajoma z poprzednich ćwiczeń i dlatego nie ma potrzeby jej tutaj omawiać. Przedstawiony kod nie jest całkowicie poprawny i może teoretycznie zawieść w bardzo szczególnym przypadku. Spróbuj domyśleć się dlaczego oraz w jaki sposób go poprawić, by program działał zawsze (wskazówka: jak się będzie zmieniać rozmiar grupy?). Wynik poprawionego programu, po skompilowaniu i uruchomieniu z poziomu konsoli PVM może wyglądać tak: pvm> spawn -> master [1] 1 successful t4005c pvm> [1:t4005d] Slave: nastepnik w pierscieniu: t10003c [1:t10003c] Slave: nastepnik w pierscieniu: t14003c [1:t4005d] EOF [1:t10003c] EOF [1:t14003c] Slave: nastepnik w pierscieniu: tc003d [1:t14003c] EOF [1:t4005c] Master: Token przeszedl pierscien: t4 [1:tc003d] Slave: nastepnik w pierscieniu: t4005c [1:tc003d] EOF [1:t4005c] EOF [1] finished
9 Poznane funkcje biblioteki PVM int tid = pvm_gettid(char *group, int inum) int inum = pvm_getinst(char *group, int tid) int size = pvm_gsize(char *group) Funkcja pvm_gettid zwraca identyfikator procesu należącego do podanej grupy i znajdującego się na określonej pozycji. Funkcja pvm_getinst zwraca pozycje w grupie procesu o identyfikatorze tid. Ostatnia funkcja pvm_gsize zwraca liczność dynamicznej grupy. Podsumowanie Czytając te słowa powinieneś posiadać intuicję na temat niebezpieczeństw wynikających z braku synchronizacji w aplikacjach rozproszonych oraz rozumieć sposób używania barier w środowisku PVM. Co powinieneś wiedzieć: Co to jest bariera i jaka funkcja ją implementuje w bibliotece PVM (pvm_barrier) Jakie funkcje służą do tworzenia i dołączania do grupy (pvm_joingroup), opuszczania grupy (pvm_lvgroup) Jaka funkcja biblioteki PVM służy do rozgłaszania (pvm_bcast) W jaki sposób można pobrać rozmiar grupy (pvm_gsize) oraz numer instancji w grupie dowolnego procesu w szczególności swój własny (pvm_getinst), a także identyfikator zadania o danym numerze instancji w danej grupie (pvm_gettid) W jaki sposób usunąć zablokowane procesy (resetować maszynę wirtualną komenda konsoli reset)
Zegary logiczne. Zakres ćwiczenia. Problem rozbieżności czasów. Koncepcja programu. Przygotowanie programu
Zegary logiczne Zakres ćwiczenia W obecnym ćwiczeniu nie zostaną wprowadzone żadne nowe funkcje biblioteki PVM. Zobaczysz za to program demonstrujący zagrożenia niesione przez używanie zegarów fizycznych
Podstawy komunikacji między procesami PVM
Podstawy komunikacji między procesami PVM Zakres ćwiczenia Komunikacja między zadaniami PVM odbywa się przy pomocy wymiany wiadomości. Celem ćwiczenia jest więc poznanie podstawowych operacji tworzenia,
Zaawansowane operacje grupowe
Zaawansowane operacje grupowe Zakres ćwiczenia Celem ćwiczenia jest zapoznanie się z zaawansowanymi funkcjami biblioteki PVM wspierającymi tworzenie aplikacji rozproszonych. Przedstawienie problemu W tworzeniu
Detekcja zakończenia i obraz stanu globalnego
Detekcja zakończenia i obraz stanu globalnego Zakres ćwiczenia Celem ćwiczenia jest utrwalenie umiejętności zdobytych w czasie poprzednich zajęć oraz zwiększenie znajomości funkcji biblioteki PVM. Przedstawienie
Łamanie haseł. Zakres ćwiczenia. Przedstawienie problemu. Zadanie do samodzielnego wykonania
Łamanie haseł Zakres ćwiczenia Celem ćwiczenia jest podniesienie umiejętności w zakresie stosowania dotąd nabytej wiedzy. Poznasz kilka nowych funkcji biblioteki PVM oraz napiszesz samodzielnie program,
r 2r Rysunek 1 Koło wpisane w kwadrat
Obliczanie liczby π metodą Monte-Carlo Zakres ćwiczenia Ćwiczenie obecne podzielone jest na dwie części. Celem pierwszej części ćwiczenia podniesienie umiejętności w zakresie stosowania dotąd nabytej wiedzy.
znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
Tryby komunikacji między procesami w standardzie Message Passing Interface. Piotr Stasiak Krzysztof Materla
Tryby komunikacji między procesami w standardzie Message Passing Interface Piotr Stasiak 171011 Krzysztof Materla 171065 Wstęp MPI to standard przesyłania wiadomości (komunikatów) pomiędzy procesami programów
Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.
Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na
Pierwsze kroki w środowisku PVM
Pierwsze kroki w środowisku PVM Zakres ćwiczenia W tym ćwiczeniu dowiesz się, w jaki sposób utworzyć maszynę wirtualną, jak napisać swój pierwszy program wykorzystujący środowisko PVM i jak taki program
Wstęp do Programowania, laboratorium 02
Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite
Część 4 życie programu
1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część
Środowiska przetwarzania rozproszonego
Środowiska przetwarzania rozproszonego 1 Parallel Virtual Machine PVM (ang. Parallel Virtual Machine) powstał w 1989 roku w Oak Ridge National Laboratory, w celu ułatwienia programowania równoległego w
Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.
Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą
5. Model komunikujących się procesów, komunikaty
Jędrzej Ułasiewicz str. 1 5. Model komunikujących się procesów, komunikaty Obecnie stosuje się następujące modele przetwarzania: Model procesów i komunikatów Model procesów komunikujących się poprzez pamięć
Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw
Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej
Aplikacja Sieciowa wątki po stronie klienta
Aplikacja Sieciowa wątki po stronie klienta Na ostatnich zajęciach zajmowaliśmy się komunikacją pomiędzy klientem a serwerem. Wynikiem naszej pracy był program klienta, który za pomocą serwera mógł się
Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR
Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR Zadanie polega na napisaniu pierwszego programu w języku C, jego poprawnej kompilacji i wgraniu na mikrokontroler. W tym celu należy zapoznać
Kolejki FIFO (łącza nazwane)
Kolejki FIFO (łącza nazwane) Systemy Operacyjne 2 laboratorium Mateusz Hołenko 6 listopada 2011 Plan zajęć 1 Łącza w systemie Linux kolejki FIFO vs. potoki specyfika łączy nazwanych schemat komunikacji
61 Topologie wirtualne
61 Topologie wirtualne pozwalają opisać dystrybucję procesów w przestrzeni z uwzględnieniem struktury komunikowania się procesów aplikacji między sobą, umożliwiają łatwą odpowiedź na pytanie: kto jest
1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.
Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.
PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec
PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych
Czym są właściwości. Poprawne projektowanie klas
Z akcesorów get i set korzysta każdy kto programuje w C#. Stanowią one duże udogodnienie w programowaniu obiektowym. Zapewniają wygodę, bezpieczeństwo i znacząco skracają kod. Akcesory są ściśle związane
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1
Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem
XII. Warunek wielokrotnego wyboru switch... case
XII. Warunek wielokrotnego wyboru switch... case 12.1. Gdy mamy więcej niŝ dwie moŝliwości Do tej pory poznaliśmy warunek if... else... Po co nam kolejny? Trudno powiedzieć, ale na pewno nie po to, Ŝeby
Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1
Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1 MPI dynamiczne zarządzanie procesami MPI 2 umożliwia dynamiczne zarządzanie procesami, choć
Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach
Laboratorium Systemów Operacyjnych Ćwiczenie 4. Operacje na plikach Wykonanie operacji wymaga wskazania pliku, na którym operacja ma zostać wykonana. Plik w systemie LINUX identyfikowany jest przez nazwę,
Praca z systemem POL-on. Zaznaczanie toków do eksportu.
Praca z systemem POL-on. Zaznaczanie toków do eksportu. Niniejszy dokument będzie przedstawiał instrukcję użytkownika części systemu SID związaną z systemem POL-on, a dokładniej przygotowaniem danych do
Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania
Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania Przemysław Kobylański Wprowadzenie Każdy program w C musi zawierać przynajmniej funkcję o nazwie main(): Aby możliwe
Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1
Zdalne wywołanie procedur Krzysztof Banaś Systemy rozproszone 1 RPC Komunikacja za pomocą gniazd jest wydajna, gdyż korzystamy z funkcji systemowych niewygodna, gdyż musimy wyrażać ją za pomocą jawnego
Programowanie i techniki algorytmiczne
Temat 2. Programowanie i techniki algorytmiczne Realizacja podstawy programowej 1) wyjaśnia pojęcie algorytmu, podaje odpowiednie przykłady algorytmów rozwiązywania różnych 2) formułuje ścisły opis prostej
PHP: bloki kodu, tablice, obiekty i formularze
1 PHP: bloki kodu, tablice, obiekty i formularze SYSTEMY SIECIOWE Michał Simiński 2 Bloki kodu Blok if-else Switch Pętle Funkcje Blok if-else 3 W PHP blok if i blok if-else wyglądają tak samo i funkcjonują
Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.
Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class
Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()
Paweł Gmys PHP strona 1 Lekcja 10 Uprawnienia Aby skrypt PHP mógł odwołać się do pliku, musi mieć odpowiednie uprawnienia. Szczegóły są zależne od serwera. Najczęściej chyba skrypt ma uprawnienia takie,
Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011
Procesy Systemy Operacyjne 2 laboratorium Mateusz Hołenko 9 października 2011 Plan zajęć 1 Procesy w systemie Linux proces procesy macierzyste i potomne procesy zombie i sieroty 2 Funkcje systemowe pobieranie
Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?
Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz
Java pierwszy program w Eclipse «Grzegorz Góralski strona własna
Strona 1 z 9 «Przykładowe zadania do cz. III ćwiczeń z genetyki Java pierwsze kroki w programowaniu (01)» Kategoria: java, Tagi: eclipse - java - programowanie. Autor: Grzegorz, napisał dnia: February
Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik
Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor
Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.
Część XVII C++ Funkcje Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład. 2 3 Tworzymy deklarację i definicję funkcji o nazwie pobierzln() Funkcja
Jak napisać program obliczający pola powierzchni różnych figur płaskich?
Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy
Podział programu na moduły
Materiały Podział programu na moduły Informatyka Szczegółowe informacje dotyczące wymagań odnośnie podziału na moduły: http://www.cs.put.poznan.pl/wcomplak/bfiles/c_w_5.pdf Podział programu na moduły pozwala
Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest
Pętle Pętla to pewien fragment kodu, który jest wykonywany wielokrotnie. Wyobraź sobie taką sytuację. Piszesz program do szyfrowania danych. Dane są szyfrowane kolejno bajt po bajcie. Załóżmy, że plik
Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!
Programowanie I O czym będziemy mówili Podstawy programowania w językach proceduralnym ANSI C obiektowym Java Uwaga! podobieństwa w podstawowej strukturze składniowej (zmienne, operatory, instrukcje sterujące...)
Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody
Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,
RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )
III RPC Zdalne wywoływanie procedur (ang. Remote Procedure Calls ) 1. Koncepcja Aplikacja wywołanie procedury parametry wyniki wykonanie procedury wynik komputer klienta komputer serwera Zaletą takiego
Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie
Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.
Nazwa implementacji: Nauka języka Python wyrażenia warunkowe Autor: Piotr Fiorek Opis implementacji: Poznanie wyrażeń warunkowych if elif - else. Nasz kalkulator umie już liczyć, ale potrafi przeprowadzać
Praca z systemem POL-on. Zaznaczanie toków do eksportu.
Praca z systemem POL-on. Zaznaczanie toków do eksportu. Niniejszy dokument będzie przedstawiał instrukcję użytkownika części systemu SID związaną z systemem POL-on, a dokładniej przygotowaniem danych do
Klient-Serwer Komunikacja przy pomocy gniazd
II Klient-Serwer Komunikacja przy pomocy gniazd Gniazda pozwalają na efektywną wymianę danych pomiędzy procesami w systemie rozproszonym. Proces klienta Proces serwera gniazdko gniazdko protokół transportu
4. Funkcje. Przykłady
4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni
Zapisywanie algorytmów w języku programowania
Temat C5 Zapisywanie algorytmów w języku programowania Cele edukacyjne Zrozumienie, na czym polega programowanie. Poznanie sposobu zapisu algorytmu w postaci programu komputerowego. Zrozumienie, na czym
Instytut Teleinformatyki
Instytut Teleinformatyki Wydział Inżynierii Elektrycznej i Komputerowej Politechnika Krakowska programowanie usług sieciowych Dziedzina Unix laboratorium: 06 Kraków, 2014 06. Programowanie Usług Sieciowych
Lekcja : Tablice + pętle
Lekcja : Tablice + pętle Wprowadzenie Oczywiście wiesz już jak dużo można osiągnąć za pomocą tablic oraz jak dużo można osiągnąć za pomocą pętli, jednak tak naprawdę prawdziwe możliwości daje połączenie
Programowanie w języku Python. Grażyna Koba
Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i
Ćwiczenie 1. Przygotowanie środowiska JAVA
Ćwiczenie 1 Przygotowanie środowiska JAVA 1. Wprowadzenie teoretyczne Instalacja JDK (Java Development Kit) NaleŜy pobrać z java.sun.com środowisko i zainstalować je. Następnie naleŝy skonfigurować środowisko.
Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:
Program 6 Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje: Funkcja pobierz_osobe wczytuje dane osoby podanej jako argument. Funkcja wypisz_osobe
Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:
Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie
Programowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.
SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)
Procesy i shell. Polecenia ps, sleep, exit, jobs, bg, fg, top, kill, bash, tcsh, which, type, whereis, touch. Metaznak & i >>. Dowiązania miękkie i twarde. Proces jest programem, który jest wykonywany
Argumenty wywołania programu, operacje na plikach
Temat zajęć: Argumenty wywołania programu, operacje na plikach Autor: mgr inż. Sławomir Samolej Zagadnienie 1. (Zmienne statyczne) W języku C można decydować o sposobie przechowywania zmiennych. Decydują
Zadanie 2: Arytmetyka symboli
1 Cel ćwiczenia Zadanie 2: Arytmetyka symboli Wykształcenie umiejętności abstrahowania operacji arytmetycznych. Zapoznanie się i przećwiczenie mechanizmu tworzenia przeciążeń funkcji operatorowych. Utrwalenie
S P I S T R E Ś C I. Instrukcja obsługi
S P I S T R E Ś C I Instrukcja obsługi 1. Podstawowe informacje o programie.................................................................................... 2 2. Instalacja programu.....................................................................................................
Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:
Ćwiczenie nr 6 Temat: Operacje na łańcuchach znaków. Zagadnienia: Zasady pracy z łańcuchami tekstowymi (tablice wartości typu char). funkcje standardowe operacji na łańcuchach, funkcje I/O dla operacji
Przekierowanie portów w routerze - podstawy
Przekierowanie portów w routerze - podstawy Wyobraźmy sobie, że posiadamy sieć domową i w tej sieci pracują dwa komputery oraz dwie kamery IP. Operator dostarcza nam łącze internetowe z jednym adresem
Dokument opisuje sposób postępowania prowadzący do wysłania deklaracji VAT, PIT lub CIT drogą elektroniczną za pomocą funkcji systemu ADA modułu FK.
FK - EDeklaracje Dokument opisuje sposób postępowania prowadzący do wysłania deklaracji VAT, PIT lub CIT drogą elektroniczną za pomocą funkcji systemu ADA modułu FK. W założeniu przyjęto, iż użytkownik
Programowanie w języku C++ Grażyna Koba
Programowanie w języku C++ Grażyna Koba Kilka definicji: Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i zasad
Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1
Zdalne wywoływanie procedur Zagadnienia projektowe Zagadnienia realizacyjne main(int argc, char* argv[]){ int id, status; id = atoi(argv[1]); status = zabij_proc(id); exit(status)... int zabij_proces (int
Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.
Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 4 Obsługa plików Kraków 2010 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim
Ćwiczenia 9: Zarządzanie konfiguracją Zadania:
Ćwiczenia 9: Zarządzanie konfiguracją Zadania: Konfiguracja repozytorium CVS: 1. Ściągnij i zainstaluj serwer CVS: CVSNT (www.cvsnt.org). 2. W konfiguracji repozytoriów (Panel Sterowania -> CVSNT) wybierz
Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.
Laboratorium 7 Wstęp Jednym z podstawowych własności Javy jest wielowątkowość. Wiąże się to z możliwością współbieżnego wykonywania różnych operacji w ramach pojedynczej wirtualnej maszyny Javy (JVM).
Wskaźniki w C. Anna Gogolińska
Wskaźniki w C Anna Gogolińska Zmienne Zmienną w C można traktować jako obszar w pamięci etykietowany nazwą zmiennej i zawierający jej wartość. Przykład: kod graficznie int a; a a = 3; a 3 Wskaźniki Wskaźnik
SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)
(opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX) W informatyce występują ściśle obok siebie dwa pojęcia: sprzęt (ang. hardware) i oprogramowanie
IPC: Kolejki komunikatów
IPC: Kolejki komunikatów Systemy Operacyjne 2 laboratorium Mateusz Hołenko 7 listopada 2011 Plan zajęć 1 Mechanizmy IPC kolejki komunikatów pamięć współdzielona semafory 2 Kolejki komunikatów kolejka komunikat
5 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 5 1/6 Język C Instrukcja laboratoryjna Temat: Funkcje, parametry linii poleceń, typ wyliczeniowy. 5 Przygotował: mgr inż. Maciej Lasota 1) Parametry linii poleceń. Język C oprócz wprowadzania
ArtPlayer oprogramowanie do odtwarzania plików video sterowane Artnet/DMX V1.0.1
Instrukcja obsługi ArtPlayer oprogramowanie do odtwarzania plików video sterowane Artnet/DMX V1.0.1 1 ArtPlayer to proste oprogramowanie umożliwiające odtwarzanie plików video i ich wybór poprzez protokół
Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania
Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania Krzysztof Kluza, Janusz Miller 1 Debugowanie Debugowanie, czy też po polsku odpluskiwanie, to proces polegający na kontrolowanym wykonaniu programu
1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.
1. Pierwszy program // mój pierwszy program w C++ #include using namespace std; cout
Program dla praktyki lekarskiej
Program dla praktyki lekarskiej ErLab Instrukcja konfiguracji i obsługi Spis Treści 1. Wstęp... 2 2. Konfiguracja... 3 2.1. Serwer... 3 2.2. Laboratorium... 3 2.3. Punkt pobrań... 4 3. Wysyłanie skierowania...
utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,
Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz
Zdalne wywoływanie procedur RPC
Zdalne wywoływanie procedur Zagadnienia projektowe Zagadnienia realizacyjne main(int argc, char* argv[]){ int id, status; id = atoi(argv[1]); status = zabij_proc(id); exit(status) }... int zabij_proces
Zdalne wywoływanie procedur RPC
Zdalne wywoływanie procedur Zagadnienia projektowe Zagadnienia realizacyjne main(int argc, char* argv[]){ int id, status; id = atoi(argv[1]); status = zabij_proc(id); exit(status)... int zabij_proces (int
ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje
Funkcje (podprogramy) Mianem funkcji określa się fragment kodu, który może być wykonywany wielokrotnie z różnych miejsc programu. Ogólny zapis: typ nazwa(argumenty) ciało funkcji typ określa typ danych
KS-ZSA. Mechanizm centralnego zarządzania rolami
KS-ZSA Mechanizm centralnego zarządzania rolami 1. Opis funkcjonalności W KS-ZSA zostaje udostępniona funkcji centralnego zarządzania rolami. W samym programie jest możliwość tworzenia centralnej roli
Celem tego projektu jest stworzenie
Prosty kalkulator Celem tego projektu jest stworzenie prostego kalkulatora, w którym użytkownik będzie podawał dwie liczby oraz działanie, które chce wykonać. Aplikacja będzie zwracała wynik tej operacji.
PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS
PROBLEMY TECHNICZNE Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS Jeżeli stwierdziłeś występowanie błędów lub problemów podczas pracy z programem DYSONANS możesz skorzystać
Laboratorium 5: Tablice. Wyszukiwanie binarne
Wojciech Myszka Laboratorium 5: Tablice. Wyszukiwanie binarne 2016-05-07 09:02:17 +0200 1. Tablice Do tej pory nie było potrzeby odwoływać się do zmiennych złożonych. Programy były bardzo proste i korzystały
Akademia Techniczno-Humanistyczna w Bielsku-Białej
Akademia Techniczno-Humanistyczna w Bielsku-Białej Wydział Budowy Maszyn i Informatyki Laboratorium z sieci komputerowych Ćwiczenie numer: 9 Temat ćwiczenia: Aplikacje klient-serwer. 1. Wstęp teoretyczny.
Programowanie w modelu przesyłania komunikatów specyfikacja MPI. Krzysztof Banaś Obliczenia równoległe 1
Programowanie w modelu przesyłania komunikatów specyfikacja MPI Krzysztof Banaś Obliczenia równoległe 1 Model przesyłania komunikatów Paradygmat send receive wysyłanie komunikatu: send( cel, identyfikator_komunikatu,
Programowanie obiektowe
Laboratorium z przedmiotu - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia. Wprowadzenie teoretyczne.
Backend Administratora
Backend Administratora mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 W tym celu korzystając z konsoli wydajemy polecenie: symfony generate:app backend Wówczas zostanie stworzona
Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie drugie (jedne zajęcia) Temat: Procesy i sygnały w Linuksie. Opracowanie: mgr in ż. Arkadiusz Chrobot Wprowadzenie 1. Budowa procesu
Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.
Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy Laboratorium 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Dyrektywy preprocesora #include #define Interakcja
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Celem ćwiczenia jest zapoznanie studentów z najprostszą dynamiczną strukturą
Cel: Przypisujemy przyciskom określone funkcje panel górny (Panel1)
W odcinku III tworzyliśmy paski narzędzi. Umieszczaliśmy na panelach ikony, reprezentujące czynności (charakterystyczne dla edytorów tekstu). Musimy teraz przypisać każdemu przyciskowi jego czynność (wycinanie,
Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego
Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego 1 /24 Pisanie pojedynczych znaków z klawiatury do pliku #include void main(void) { FILE *fptr; // wkaznik do pliku, tzw. uchwyt
Symulator tabletu z systemem Windows 8.
Symulator tabletu z systemem Windows 8. Witam w mojej kolejnej publikacji, tym razem dowiesz się: - Jak uruchomić symulator tabletu z w pełni funkcjonalnym systemem operacyjnym Windows 8; - Jak wykorzystać