PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Podobne dokumenty
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Architektura Systemów Wbudowanych

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Programowanie Systemów Czasu Rzeczywistego

1. Tworzenie nowego projektu.

Programowanie Współbieżne

dynamiczny przydział pamięci calloc() memset() memcpy( ) (wskaźniki!! )

Pobieranie argumentów wiersza polecenia

7. Szeregowanie procesów w systemie QNX6 Neutrino

UŻYCIE I ZARZĄDZANIE WĄTKAMI

UŻYCIE I ZARZĄDZANIE WĄTKAMI

7. Szeregowanie procesów w systemie QNX6 Neutrino

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

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

Programowanie Proceduralne

Plan wykładu. Obliczenia równoległe w zagadnieniach inżynierskich. Wykład 1 p. Wzajemne wykluczanie. Procesy współbieżne

Sieciowa komunikacja procesów - XDR i RPC

Uzupełnienie dot. przekazywania argumentów

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory

1. Ustanawianie ograniczeń na użycie zasobów

Driver interfejsu szeregowego dla systemu QNX Neutrino

1. Timery i zdarzenia

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

Signals + Threads: Qt vs. Boost

1. Uruchom poniższy program tworzący pojedynczy wątek:

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Ćwiczenia 2 IBM DB2 Data Studio

Wątki. S. Samolej: Wątki 1

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

Plan wykładu. Programowanie aplikacji równoległych i rozproszonych. Wykład 1 p. Wzajemne wykluczanie. Procesy współbieżne

Programowanie aplikacji równoległych i rozproszonych. Wykład 1

Wykład 3: Implementacja programów wbudowanych

Wstęp do programowania 1

Projektowanie aplikacji internetowych laboratorium

Wstęp do Programowania, laboratorium 02

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Informatyka I : Tworzenie projektu

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

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

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Zaawansowane aplikacje internetowe laboratorium

Czy procesor musi się grzać?

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

Obsługa błędów w SQL i transakcje. Obsługa błędów w SQL

Problemy czytelników i pisarzy oraz 5 ucztujących filozofów

Podstawy programowania w języku C++

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

9. Problem wzajemnego wykluczania i sekcji krytycznej

Qt sygnały i designer

Unix: programowanie z użyciem w atków

Unix: programowanie z użyciem w atków

Temat zajęć: Tworzenie i obsługa wątków.

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

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

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

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

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

Zadania: 1. Funkcja przeliczająca F na C: float FtoC(float f){ return (f 32.0) * 5.0 / 9.0; }

Argumenty wywołania programu, operacje na plikach

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Programowanie wielowątkowe. Jarosław Kuchta

Jędrzej Ułasiewicz Programownie aplikacji współbieżnych str. 1. Wątki

Wstęp do programowania

Krok po kroku... (czyli jak stworzyć i wydrukować krzyżówkę)

Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne

Co nie powinno być umieszczane w plikach nagłówkowych:

Instrukcja pomocnicza

Programowanie Proceduralne

Wskaźniki w C. Anna Gogolińska

Problemy czytelników i pisarzy oraz 5 ucztujących filozofów

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

tablica: dane_liczbowe

I - Microsoft Visual Studio C++

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

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

nowe operatory &. (kropka) * operator rzutowy ->, (przecinek) sizeof

Problem producentakonsumenta

Laboratorium - Harmonogramowanie zadania przy użyciu GUI i polecenia AT w systemie Windows 7

Podstawy Programowania. Tablice i wskaźniki cd., argumenty wywołania programu, reguły stylu programowania, asercje

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

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

Jędrzej Ułasiewicz Programownie aplikacji współbieżnych str. 1. Wątki

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

Informatyka. Wy-03 Dynamiczna alokacja pamięci, wyjątki. mgr inż. Krzysztof Kołodziejczyk

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

Programowanie Współbieżne

Podstawy programowania w lejos

Volcano MC-GM4 OPTICAL MOUSE USER S MANUAL MODECOM

Programowanie obiektowe zastosowanie języka Java SE

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

Tekst oblewający literę. Tekst oblewający literę. Tekst oblewający. Pakiety wrapfig i listings. 1. Pakiet wrapfig. 21 marca 2015

5 Przygotował: mgr inż. Maciej Lasota

Transkrypt:

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO LABORATORIUM Temat: THREADS Mariusz Rudnicki 2016

1. Przygotowanie platformy i środowiska IDE. Przed uruchomieniem własnego kodu zwiększ priorytet procesu qconn z poziomu środowiska IDE. W tym celu wybierz perspektywę QNX System Information. Wybierz zakładkę Process Information. Następnie z listy procesów uruchomionych platformie docelowej wybierz proces qconn. na W zakładce Process Information wciśnij prawy klawisz myszy na nazwie procesu głównego qconn. Pojawi się menu kontekstowe rysunek poniżej. Wybierz opcję Set Process Priority/Scheduling Algorithm na ekranie pojawi okno.

W polu Priority wpisz wartość 30. Algorytm szeregowania pozostaw bez zmian. Wciśnij klawisz OK zatwierdzając zmiany. Wynik zmian powinien być widoczny w zakładce Process Information, jak na poniższym rysunku. Zmianę ustawień możesz sprawdzić również w wirtualnej maszynie używając polecenia pidin.

2. Przeanalizuj poniższy kod. Zwróć uwagę na wynik działania funkcji update_thread(). #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/neutrino.h> #include <pthread.h> #include <sched.h> /* The number of threads that we want to have running simultaneously. */ #define NumThreads 1 volatile int volatile int var1; var2; /* The header of the main function of thread. Thread starts its job in this function. */ void *update_thread (void *); char *progname = "threads"; int main(int argc, char *argv[]) { pthread_t threadid [NumThreads]; // a place to // hold the thread // ID's pthread_attr_t attrib; // scheduling // attributes struct sched_param param; // for setting // priority int i, policy; int oldcancel; setvbuf (stdout, NULL, _IOLBF, 0); var1 = var2 = 0; /* initialize to known values */ printf ("%s: starting; creating threads\n", progname); /* We want to create the new threads using Round Robin scheduling, and a lowered priority, so set up a thread

attributes structure. We use a lower priority since these threads will be hogging the CPU */ pthread_getschedparam( pthread_self(), &policy, &param ); pthread_attr_init(&attrib); pthread_attr_setinheritsched(&attrib, PTHREAD_EXPLICIT_SCHED); pthread_attr_setschedpolicy (&attrib, SCHED_RR ); param.sched_priority -= 5; // change priority a couple // levels pthread_attr_setschedparam (&attrib, &param); pthread_setcanceltype( PTHREAD_CANCEL_ASYNCHRONOUS, &oldcancel); /* Create the threads. As soon as each pthread_create call is done, the thread has been started. */ for (i = 0; i < NumThreads; i++) { pthread_create( &threadid [i], &attrib, &update_thread, (void *) i); /* Let the other threads run for a while */ sleep (120); /* and then kill them all*/ printf ("%s: stopping; cancelling threads\n", progname); for (i = 0; i < NumThreads; i++) { pthread_cancel (threadid [i]); printf ("%s: all done, var1 is %d, var2 is %d\n", progname, var1, var2); fflush (stdout); sleep (1); return EXIT_SUCCESS; void *update_thread (void *i) { while (1) { if(var1!= var2) { printf ("thread %d, var1 (%d)!= var2 (%d)!\n",(int) i, var1, var2); var1 = var2;

var1++; //sched_yield(); /* for faster processors, to cause problem to happen */ var2++; return (NULL); 3. Jaki jest wynik działania powyższego programu, czy wartości zmiennych var1 i var2 będą sobie równe, czy też różne? 4. Uzupełnij kod projektu Threads, tak aby uruchomiony został jeden wątek o priorytecie o pięć niższym niż priorytet procesu głównego, algorytm szeregowania Round Robin. W helpie sprawdź funkcje, których wywołania należy uzupełnić. 5. Sprawdź wynik działania uruchomionego kodu. Czy wynik jest zgodny z przewidywaniami z pkt 3. Do sprawdzeń użyj perspektywy QNX System Information. Wynik działania programu przedstaw prowadzącemu. 6. Zmodyfikuj kod programu tak, aby proces główny tworzył 16 wątków, które będą rozpoczynały pracę w funkcji update_thread(). Jaki będzie wynik działania programu, czy wartości zmiennych var1 i var2 będą sobie równe, czy też różne? 7. Sprawdź wynik działania uruchomionego kodu. Do sprawdzeń użyj perspektywy QNX System Information. Wynik działania programu przedstaw prowadzącemu. 8. Jakie może być rozwiązanie ewentualnych problemów?

9. Zmodyfikuj kod w taki sposób, aby proces główny tworzył trzy wątki, które będą rozpoczynały pracę w różnych funkcjach, będą miały różny priorytet oraz różny sposób szeregowania. 10. Sprawdź wynik działania uruchomionego kodu. Do sprawdzeń użyj perspektywy QNX System Information. Wynik działania programu przedstaw prowadzącemu.

11. Sprawozdanie. 11.1. Przewidywany wynik działania programu z pkt 2. Zależność pomiędzy zmiennymi: a) var1 == var2; b) var1 <> var2; c) var1 > var2; d) var1 < var2. 11.2. Sprawdzenie działania kodu pkt 5. Zależność pomiędzy zmiennymi: a) var1 == var2; b) var1 <> var2; c) var1 > var2; d) var1 < var2. 11.3. Przewidywany wynik działania kodu pkt 6. Zależność pomiędzy zmiennymi: a) var1 == var2; b) var1 <> var2; c) var1 > var2; d) var1 < var2. 11.4. Sprawdzenie działania kodu pkt 7. Zależność pomiędzy zmiennymi: a) var1 == var2; e) var1 <> var2; f) var1 > var2; g) var1 < var2. 11.5. Rozwiązanie ewentualnych problemów: Grupa: