Instytut Teleinformatyki

Podobne dokumenty
Pamięć współdzielona

Instytut Teleinformatyki

IPC: Kolejki komunikatów

Temat zajęć: Mechanizmy IPC: kolejki komunikatów.

1. Utwórz blok pamięci współdzielonej korzystając z poniższego kodu:

Mechanizmy z grupy IPC

Mechanizmy z grupy IPC

Instytut Teleinformatyki

Shared memory and messages. Functions. process 0. process 1. program 0. program 0. data 0. data 1. program 1. data 0. data 1.

Programowanie Współbieżne. Komunikacja między procesowa IPC

Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej.

KOLEJKI KOMUNIKATÓW IPC

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

J. Ułasiewicz Programowanie aplikacji współbieżnych 1

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

Lab 9 Podstawy Programowania

Wskaźniki. Informatyka

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Kolejki FIFO (łącza nazwane)

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Wstęp do Programowania, laboratorium 02

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

ZASADY ADRESOWANIA IP cz. II

Podstawy i języki programowania

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

4.2 Sposób korzystania z l acza

Instytut Teleinformatyki

Wstęp do programowania

Laboratorium z systemów operacyjnych. System plików - funkcje systemowe. Anna Wojak

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Windows.

DYNAMICZNE PRZYDZIELANIE PAMIECI

1 Zapoznanie się ze środowiskiem Xenomai.

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Programowanie w języku C++

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Biblioteka standardowa - operacje wejścia/wyjścia

Semafory, pamięć dzielona i kolejki komunikatów

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

Argumenty wywołania programu, operacje na plikach

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Instytut Teleinformatyki

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Sieci komputerowe. Wykład 7: Transport: protokół TCP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Temat zajęć: Obsługa procesów w systemie.

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Tablice w argumentach funkcji. Tablicy nie są przekazywane po wartości Tablicy są przekazywane przez referencje lub po wskaźniku

Temat zajęć: Obsługa łączy komunikacyjnych

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19. Lab 9. Tablice liczbowe cd,. Operacje na tablicach o dwóch indeksach.

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Wprowadzenie do programowania i programowanie obiektowe

Obsługa plików Procesy

Mechanizmy pracy równoległej. Jarosław Kuchta

Laboratorium 6: Dynamiczny przydział pamięci. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED

Semafory w systemie Unix

Programowanie obiektowe

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Języki i metodyka programowania. Wprowadzenie do języka C

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Struktury systemów operacyjnych

Aplikacja Sieciowa wątki po stronie klienta

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Instrukcja konfiguracji programu Fakt z modułem lanfakt

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Laboratorium Ericsson HIS NAE SR-16

2 Przygotował: mgr inż. Maciej Lasota

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

TCP - receive buffer (queue), send buffer (queue)

Programowanie zespołowe

Instalacja programu dreryk

Powyższe wyrażenie alokuje 200 lub 400 w zależności od rozmiaru int w danym systemie. Wskaźnik wskazuje na adres pierwszego bajtu pamięci.

Opis protokołu RPC. Grzegorz Maj nr indeksu:

Zadania z podstaw programowania obiektowego

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

Systemy Operacyjne - Operacje na plikach

Paweł Skrobanek. C-3, pok

Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:

Memeo Instant Backup Podręcznik Szybkiego Startu

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)

Minimalna wspierana wersja systemu Android to zalecana 4.0. Ta dokumentacja została wykonana na telefonie HUAWEI ASCEND P7 z Android 4.

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Rozdział ten zawiera informacje o sposobie konfiguracji i działania Modułu OPC.

Transkrypt:

Instytut Teleinformatyki Wydział Inżynierii Elektrycznej i Komputerowej Politechnika Krakowska programowanie usług sieciowych IPC Systemu V laboratorium: 08 Kraków, 2014

08. Programowanie Usług Sieciowych IPC Systemu V 2 Spis treści Spis treści... 2 1. Wiadomości wstępne... 3 1.1. Tematyka laboratorium... 3 1.2. Zagadnienia do przygotowania... 3 1.3. Cel laboratorium... 4 2. Przebieg laboratorium... 6 2.1. Przygotowanie laboratorium... 6 2.2. Zadanie 1. Działanie polecenia ipcs oraz ipcrm... 6 2.3. Zadanie 2. Kolejki komunikatów... 7 2.4. Zadanie 3. Interaktywne tworzenie kolejki komunikatów.... 8 2.5. Zadanie 4. Komunikacja przy użyciu pamięci dzielonej... 9 2.6. Zadanie 5. Semafory...11 2.7. Zadanie 6. Pamięć wspólna...12 3. Opracowanie i sprawozdanie...13

08. Programowanie Usług Sieciowych IPC Systemu V 3 1. Wiadomości wstępne Pierwsza część niniejszej instrukcji zawiera podstawowe wiadomości teoretyczne dotyczące komunikacji międzyprocesowej IPC (ang. Interprocess Communication). Poznanie tych wiadomości umożliwi prawidłowe zrealizowanie praktycznej części laboratorium. 1.1. Tematyka laboratorium Tematyką laboratorium są podstawowe mechanizmy komunikacji między procesami IPC (ang. Inter-Process Communication) w Systemie V. Omawiane są zalety i wady poszczególnych technik jak również ich przydatność. Dokument dotyczy również wybranych metod synchronizacji między procesami. Przez pojęcie komunikacji międzyprocesowej Systemu V określamy trzy typy IPC: o kolejki komunikatów (ang. message queues), o semafory (ang. semaphore arrays), o pamięć wspólna (ang. shared memory segmennts). Termin ten jest stosowany w odniesieniu do wymienionych metod komunikacji międzyprocesowej, przede wszystkim do zaznaczenia faktu, że ich korzenie tkwią w Systemie V. Funkcje przeznaczone do obsługi obiektów IPC mają wiele elementów wspólnych. Oto niektóre z nich: o identyfikator, o klucz, o prawa dostępu, o ograniczenia konfiguracyjne. 1.2. Zagadnienia do przygotowania Przed przystąpieniem do realizacji laboratorium należy zapoznać się z zagadnieniami dotyczącymi procesów w systemie UNIX: o Pobieranie identyfikatora (getpid, getppid), o Tworzenie (fork), o Zakończenie (exit), o Oczekiwanie (wait, waitpid), o Uruchomienie (exec).

08. Programowanie Usług Sieciowych IPC Systemu V 4 Konieczne jest również poznanie mechanizmów mapowania pamięci: o Mapowanie (mmap), o Zwolnienie (munmap), o Synchronizacja (msync), Oraz mechanizmów alokacji pamięci: o Alokacja (malloc, calloc), o Realokacja (realloc), o Zwolnienie (free). Literatura: [1] W.R. Stevens, Programowanie w środowisku systemu UNIX, rozdział 8 [2] W.R. Stevens, UNIX - Programowanie usług sieciowych, tom. 2, rozdział 12 [3] http://atos.wmid.amu.edu.pl/~maciejf/materials/sop322/unixipc2.html#1 [4] http://rainbow.mimuw.edu.pl/so/linux/temat03/ipc.html 1.3. Cel laboratorium Celem laboratorium jest zapoznanie się z podstawowymi metodami komunikacji między procesami oraz prostą metodą synchronizacji. Techniki te są bazą w tworzeniu wieloprocesowych/wielowątkowych aplikacji typu klient serwer. Podczas realizacji tego laboratorium zapoznasz się z: o wymianą informacji między procesami poprzez kolejkę komunikatów; o wymianą informacji między procesami poprzez pamięć dzieloną; o synchronizacją procesów przy pomocy semaforów.

08. Programowanie Usług Sieciowych IPC Systemu V 5

08. Programowanie Usług Sieciowych IPC Systemu V 6 Parametr/opcja Opis 2. Przebieg laboratorium Druga część instrukcji zawiera zadania do praktycznej realizacji, które demonstrują zastosowanie technik z omawianego zagadnienia. 2.1. Przygotowanie laboratorium Przed przystąpieniem do ćwiczenia należy skopiować wszystkie pliki z katalogu /home/shared/pus/pus_08_ipc_sysv do katalogu domowego. Są to źródła programów, które będą wykorzystywane do laboratorium, część z nich będzie modyfikowana podczas ćwiczenia, warto więc mieć dodatkową kopię zapasową. 2.2. Zadanie 1. Działanie polecenia ipcs oraz ipcrm Zadanie będzie polegało na skompilowaniu trzech programów tworzących kolejkę komunikatów, semafor oraz dostęp do pamięci dzielonej oraz obserwowaniu powstałych wszystkich obiektów IPC Systemu V dzięki opcji ipcs oraz zapoznanie się z działaniem tego polecenia oraz polecenia ipcrm. 1. Przejdź do katalogu ze źródłami laboratorium: $ cd zad1/ 2. Skompiluj plik queue.c do postaci binarnej: $ gcc queue.c -o queue 3. Uruchom skompilowany program: $./queue 4. Wydaj polecenie : $ ipcs -a

08. Programowanie Usług Sieciowych IPC Systemu V 7 -q Pokaż tylko kolejki wiadomości -s Pokaż tylko semafory -m Pokaż tylko pamieć dzieloną -a Pokaż status wszystkich obiektów -h Dodatkowe argumenty 5. Powtórz ćwiczenie od 1-4 dla plików semaphore.c oraz memory_shared.c 6. Poleceniem ipcs sprawdź obiekty, których jesteś właścicielem i sprawdź IPC ID, następnie usuń utworzone obiekty IPC, które stworzyłeś za pomocą polecenia ipcrm z odpowiednimi opcjami. Poniżej podaje przykład : $ ipcrm msg 1736732 2.3. Zadanie 2. Kolejki komunikatów Należy skompilować przykładowe programy przy pomocy poleceń: 1. Przejdź do katalogu ze źródłami laboratorium: $ cd zad2/ 2. Skompiluj programy: $ gcc send.c -o send $ gcc remove.c -o remove $ gcc receive.c -o receive 3. Następnie uruchamiamy program, który tworzy i wysyła komunikat do kolejki (treść komunikatu w postaci liczby całkowitej podajemy jako parametr): $./send 45 Po tym jak program zakończy działanie sprawdzamy czy kolejka została utworzona, jakie są do niej uprawnienia, identyfikator, klucz, ile bajtów i wiadomości zalega w kolejce. Korzystamy z narzędzia ipcs. Program send możemy uruchomić kilkukrotnie, za każdym razem sprawdzając jak kolejka się zmienia. 4. Kolejnym krokiem jest uruchomienie programu pobierającego komunikaty z kolejki: $./receive Każdorazowo sprawdzamy narzędziem ipcs ile komunikatów jeszcze pozostało w kolejce. Sprawdzamy też sytuację w której brak komunikatów a my żądamy odczytu. 5. Po skończonym testowaniu usuwamy kolejkę:

08. Programowanie Usług Sieciowych IPC Systemu V 8 $./remove 6. Sprawdzamy narzędziem czy kolejka została usunięta. 2.4. Zadanie 3. Interaktywne tworzenie kolejki komunikatów. Zadanie polega na stworzeniu kolejki komunikatów, przy czym użytkownik podczas wykonywania programu ma wpływ na to tym jaki będzie klucz IPC kolejki, prawa dostępu do kolejki oraz zestaw flag funkcji msgget. Jeśli wywołanie jest pomyślne i utworzona zostanie nowa kolejka lub udostępniona istniejąca, funkcja msgget powinna zwrócić identyfikator kolejki komunikatów (ang. message queue identifier) w postaci nieujemnej liczby całkowitej. Gdy tworzona jest kolejka komunikatów, do nadania jej uprawnień używane jest dziewięć mniej znaczących bitów permflags. Są one pamiętane w strukturze ipc_perm, tworzonej razem z samą kolejką. Podczas wykonywania programu użytkownik musi podać trzy parametry, ktorych opis znajduje się w poniższej tabeli. Parametr/opcja key Opis Liczba całkowita - klucz kanału IPC dla tworzonej kolejki perm Prawa dostępu do kolejki w postaci np. 0777 flags Liczba całkowita - flagi, z którymi chcesz utworzyć kolejkę 0 bez flag 1 - IPC_CREAT 2 - IPC_CREAT and IPC_EXCL Uruchomienie programu: 1. Przejdź do katalogu ze źródłami zadania 3: $ cd ~/pus/pus_08_ipc_sysv/zad3 2. Skompiluj źródła do postaci binarnej: $ make lub $ cc -o p3 p3.c 3. Uruchom program: $./p3 W rezultacie działania programu otrzymujemy numer ID utworzonej kolejki (lub komunikat o błędzie, jeśli którąś z wartości podamy nieprawidłowo).

08. Programowanie Usług Sieciowych IPC Systemu V 9 Przed wykonaniem ćwiczenia należy sprawdzić przy pomocy polecenia ipcs informacje o wszystkich obiektach IPC istniejących w systemie. $ ipcs -a Informację o samych kolejkach komunikatów wyświetli polecenie: $ ipcs -q Po wykonaniu ćwiczenia należy zaobserwować czy zaszły jakieś zmiany przy pomocy tych samych poleceń. 2.5. Zadanie 4. Komunikacja przy użyciu pamięci dzielonej W zadaniu tym, zostanie pokazane, jak stworzyć oraz wykorzystywać kanał IPC pamięci dzielonej oraz podstawowe operacje na segmencie pamięci, jak dodawanie danych oraz pobieranie danych z segmentu pamięci dzielonej. Segmenty pamięci dzielonej są tworzone przez funkcję pierwotną shmget zdefiniowaną następująco: #include <sys/ipc.h> #include <sys/shm.h> int shmget(key_t key, int size, int shmflg); o key - określa klucz IPC identyfikujący segment pamięci dzielonej, o size - określa rozmiar żądanego segmentu. Jeśli funkcja shmget odwołuje się do istniejącego segmentu pamięci, a żądany rozmiar jest większy niż rzeczywisty rozmiar segmentu, to wywołanie funkcji systemowej zakończy się błędem, o shmflg - podaje znaczniki sterujące działaniem funkcji shmget i zawiera prawa dostępu do segmentu i bity znaczników, takie jak IPC_PRIVATE czy IPC_CREAT. Prawa dostępu określają, które procesy mają prawo przyłączyć dany segment. Jeśli proces nie ma ani prawa odczytu, ani zapisu do segmentu, to nie może tego segmentu przyłączyć. Jeśli program spróbuje zapisu do segmentu, który jest tylko do odczytu, to dostanie stygnał SIGSEGV. procesu Funkcja shmat - dołącza segment pamięci dzielonej do przestrzeni adresowej #include <sys/shm.h> void *shmat(int shmid, const void *shmaddr, int shmflg); Funkcja zwraca adres, pod którym segment został przyłączony do procesu lub błąd: errno = EINVAL (nieprawidłowy ID IPC lub podano adress podłączenia)

08. Programowanie Usług Sieciowych IPC Systemu V 10 ENOMEM (brak pamięci aby przyłączyć segment) EACCES (brak pozwolenia) Najważniejsze fragmenty programu: #define SHM_SIZE 1024 /*tworzymy 1 KB segment pamięci */ int main(int argc, char *argv[]) { key_t key; int shmid; //identyfikator segmentu char *data; int mode; /* Tworzenie klucza */ if ((key = ftok("dzielona.c", 'R')) == -1) { perror("błąd podczas wykonywania funkcji ftok"); exit(1); } /* Przyłącz się i stwórz segment */ if ((shmid = shmget(key, SHM_SIZE, 0644 IPC_CREAT)) == -1) { perror("błąd podczas wykonywania funkcji shmget"); exit(1); } /* Dołącz się do segmentu, żeby uzykać wskaźnik do niego */ data = shmat(shmid, (void *)0, 0); if (data == (char *)(-1)) { perror("błąd podczas wykonywania funkcji shmat"); exit(1); } /* Czytaj i modyfikuj segment*/ if (argc == 2) { printf("zapisywanie do segmentu : \"%s\"\n", argv[1]); strncpy(data, argv[1], SHM_SIZE); } else { printf("segment zawiera: \"%s\"\n", data); } /* Odłącz się z segmentu */ if (shmdt(data) == -1) { perror("shmdt"); exit(1); } return 0; } Program pobiera z wiersza poleceń jeden argument. Określa on string zapisywany do pamięci dzielonej.

08. Programowanie Usług Sieciowych IPC Systemu V 11 Parametr/opcja char **argv input_string Opis Tablica z argumentami przekazanymi do programu String określa tekst zapisywany do pamięci dzielonej Uruchomienie programu: 1. Przejdź do katalogu ze źródłami zadania 4. $ cd ~/pus/pus_08_ipc_sysv/zad4 2. Skompiluj źródła do postaci binarnej: $ make lub $ cc -o shared_memory shared_memory.c 3. Uruchom program: $./shared_memory - w celu wyświetlenia zawartości pamięci dzielonej lub $./shared_memory input_string w celu zapisania jakiegoś stringu do pamięci dzielonej W rezultacie działania programu otrzymujemy numer utworzonego segmentu (lub komunikat o błędzie, jeśli segmentu pamięci nie utworzono). Przed wykonaniem ćwiczenia należy sprawdzić przy pomocy polecenia ipcs informacje o wszystkich obiektach IPC istniejących w systemie. $ ipcs -a Informację o samych kolejkach komunikatów wyświetli polecenie: $ ipcs m Testujemy działanie pamięci dzielonej podając na wejście programu różne ciągi znaków. Następnie przy wywołaniu programu bez parametrów sprawdzamy poprawność zapisanej wiadomości. Informacje podane do zapisu powinny zgadzać się z informacjami z odczytu. Po wykonaniu ćwiczenia należy zaobserwować czy zaszły jakieś zmiany przy pomocy tych samych poleceń. Po zakończeniu pracy z segmentem pamięci należy usunąć segment przy pomocy polecenia podanego poniżej: $ ipcrm m numer_segmentu gdzie numer jest numerem uzyskanym z wykonania polecenia ipcs m. 2.6. Zadanie 5. Semafory

08. Programowanie Usług Sieciowych IPC Systemu V 12 Napisz program, który tworzy jednego potomka. Program (rodzic jak i potomek) winien ciągle wypisywać ten sam komunikat dwa razy swój identyfikator procesu (w osobnych liniach). Wypisywanie ma być realizowane przy pomocy dwóch oddzielnych instrukcji tzn. printf( %d\n, getpid()); printf( %d\n, getpid()); Nie jest dopuszczalna sytuacje, w której procesy będą wypisywały swoje numery naprzemiennie tzn. 100 //rodzic 101 //potomek 100 //rodzic 101 //potomek Użyj semafora systemu V, by ochronić blok wypisywania. Poprawne wyjście powinno wyglądać następująco (przykład): 100 //rodzic 100 //rodzic 101 //potomek 101 //potomek 2.7. Zadanie 6. Pamięć wspólna Napisz program klienta oraz program serwera. Serwer powinien umieścić w segmencie pamięci wspólnej imię autora, zaś klient powinien z tego samego segmentu, odczytać je, a następnie powitać autora. Wskazówka: Przy tworzeniu segmentu użyj tego samego klucza tak, aby segment był dostępny zarówno dla serwera jak i klienta.

08. Programowanie Usług Sieciowych IPC Systemu V 13 3. Opracowanie i sprawozdanie Realizacja laboratorium pt. IPC Systemu V polega na wykonaniu wszystkich zadań programistycznych podanych w drugiej części tej instrukcji. Wynikiem wykonania powinno być sprawozdanie w formie wydruku papierowego dostarczonego na kolejne zajęcia licząc od daty laboratorium, kiedy zadania zostały zadane. Sprawozdanie powinno zawierać: o opis metodyki realizacji zadań (system operacyjny, język programowania, biblioteki, itp.), o algorytmy wykorzystane w zadaniach (zwłaszcza, jeśli zastosowane zostały rozwiązania nietypowe), o opisy napisanych programów wraz z opcjami, o trudniejsze kawałki kodu, opisane tak, jak w niniejszej instrukcji, o uwagi oceniające ćwiczenie: trudne/łatwe, nie/realizowalne podczas zajęć, nie/wymagające wcześniejszej znajomości zagadnień (wymienić jakich), o wskazówki dotyczące ewentualnej poprawy instrukcji celem lepszego zrozumienia sensu oraz treści zadań.