Szeregowanie zadań o jednostkowych czasach wykonania na dowolnej liczbie identycznych procesorów.



Podobne dokumenty
Instrukcja wprowadzania graficznych harmonogramów pracy w SZOI Wg stanu na r.

Padlet wirtualna tablica lub papier w Internecie

Instalacja Czytnika Kart w systemie Windows 7 64 bitowy (tylko przeglądarki 64 bitowe )

CZĘŚĆ A PIERWSZE KROKI Z KOMPUTEREM

Instrukcja obsługi notowań koszykowych w M@klerPlus

Arkusz kalkulacyjny MS Excel 2010 PL.

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Arkusz strona zawierająca informacje. Dokumenty Excela są jakby skoroszytami podzielonymi na pojedyncze arkusze.

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Laboratorium - Udostępnianie folderu i mapowanie dysku sieciowego w systemie Windows XP

Instalacja Czytnika Kart 2.4 dla przeglądarek 64 bitowych dla systemów Windows XP/Vista/2000/7/8 64 bit

Rozwiązywanie problemów z Javą

TWORZENIE SCHEMATÓW BLOKOWYCH I ELEKTRYCZNYCH

Problem 1 prec f max. Algorytm Lawlera dla problemu 1 prec f max. 1 procesor. n zadań T 1,..., T n (ich zbiór oznaczamy przez T )

Szeregowanie zadań. Wykład nr 3. dr Hanna Furmańczyk

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1

Autokształtów Autokształt AUTOKSZTAŁTY Wstaw Obraz Autokształty Autokształty GDYNIA 2009

Laboratorium 1 - Programowanie proceduralne i obiektowe

Wysokość drzewa Głębokość węzła

Lekcja 5 - PROGRAMOWANIE NOWICJUSZ

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

mfaktura Instrukcja instalacji programu Ogólne informacje o programie biuro@matsol.pl

Programowanie, algorytmy i struktury danych

Instalacja Czytnika Kart 1.4 dla przeglądarek 32 bitowych dla systemów Windows XP/Vista/2000/7/8 64 bit i 32 bit

Instalacja Czytnika Kart 2.7 dla przeglądarek 64 bitowych dla systemów Windows XP/Vista/2000/7/8 64 bit

Edytor tekstu MS Word 2010 PL. Edytor tekstu MS Word 2010 PL umożliwia wstawianie i formatowanie tabel.

Rys. 1. Aktywne linki będą wstawiane za pomocą rozwijanej listy

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania KOMPUTEROWE SYSTEMY STEROWANIA (KSS)

Aplikacja projektu Program wycinki drzew i krzewów dla RZGW we Wrocławiu

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1

System Informatyczny CELAB. Obsługa sprzedaży detalicznej krok po kroku

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

Harmonogramowanie produkcji

Program EWIDENCJA ODZIEŻY ROBOCZEJ INSTRUKCJA UŻYTKOWNIKA Przejdź do strony producenta programu

Instalacja Czytnika Kart w systemie Windows 7

Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:

Tworzenie aplikacji w języku Java

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Instalacja Czytnika Kart 1.4 dla przeglądarek 32 bitowych dla systemów Windows XP/Vista/2000/7/8 64 bit i 32 bit. Dokumentacja Użytkownika

Zagadnienia: Program ten umożliwi Tobie między innymi: tworzenie arkuszy kalkulacyjnych wyszukiwanie i analizę danych tworzenie wykresów (diagramów)

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Nawigacja po długim dokumencie może być męcząca, dlatego warto poznać następujące skróty klawiszowe

Spis treści 1. Wstęp Logowanie Główny interfejs aplikacji Ogólny opis interfejsu Poruszanie się po mapie...

Kontrola topto. 1. Informacje ogólne. 2. Wymagania sprzętowe i programowe aplikacji. 3. Przykładowa instalacja topto. 4. Komunikacja.

Platforma szkoleniowa krok po kroku

Program V-SIM tworzenie plików video z przebiegu symulacji

1. Wybierz polecenie rysowania linii, np. poprzez kliknięcie ikony W wierszu poleceń pojawi się pytanie o punkt początkowy rysowanej linii:

Instalacja Czytnika Kart w systemie Windows 7

Program EWIDENCJA ODZIEŻY ROBOCZEJ INSTRUKCJA UŻYTKOWNIKA Przejdź do strony producenta programu

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Prezentacja multimedialna MS PowerPoint 2010 (podstawy)

Tworzenie tabeli przestawnej krok po kroku

Celem ćwiczenia jest zapoznanie się z podstawowymi funkcjami i pojęciami związanymi ze środowiskiem AutoCAD 2012 w polskiej wersji językowej.

KONSTRUKCJA TRÓJKĄTA 1 KONSTRUKCJA TRÓJKĄTA 2 KONSTRUKCJA CZWOROKĄTA KONSTRUKCJA OKRĘGU KONSTRUKCJA STYCZNYCH

Wstęp Sterowanie Utworzenie, wybór i kasowanie gracza. utworzenia nowego gracza Nowy gracz Nastawienie gracza

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Papyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Instrukcja dla programu Ocena.XP

Rysunek 1. Zmontowane części

Konfiguracja Javy. Jak prawidłowo skonfigurować środowisko Java. Jak zacząć? Poradnik dla systemów Windows 7,8, 8.1 i 10. Wersja 1.

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Skaner Mustek Scan Express

Edytor tekstu MS Word 2010 PL. Edytor tekstu to program komputerowy umożliwiający wprowadzenie lub edycję tekstu.

Baltie - programowanie

Temat: Algorytmy zachłanne

Emapi.pl. Wyznaczanie trasy

w kalendarzu pracownika po wybraniu z menu podręcznego polecenia Dziennik zdarzeń pracownika

BOC INFORMATION TECHNOLOGIES CONSULTING. Zadania. Przykład bankowy

Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.1

Konsola operatora TKombajn

Java: interfejsy i klasy wewnętrzne

TWORZENIE SZAF Z PATCH-PANELAMI


Centrum Informatyki "ZETO" S.A. w Białymstoku. Wysyłanie danych o licencjach i zezwoleniach do CEIDG w systemie ProcEnt Licencje

Praca w programie Power Draft

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

etrader Pekao Podręcznik użytkownika Strumieniowanie Excel

Wybrane algorytmy tablicowe

Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych. 8a 3,54 8b 5,25 8c 4,21 8d 4,85

Rozdział 7 ZARZĄDZANIE PROJEKTAMI

Instrukcja. Laboratorium Metod i Systemów Sterowania Produkcją.

FAQ: /PL Data: 2/07/2013 Konfiguracja współpracy programów PC Access i Microsoft Excel ze sterownikiem LOGO!

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Aplikacja npodpis do obsługi certyfikatu

1. Wstęp Niniejszy dokument jest instrukcją użytkownika dla aplikacji internetowej DM TrackMan.

Platforma szkoleniowa krok po kroku. Poradnik Kursanta

Kodu z klasą. Kodu, zbierzesz dla mnie trochę jabłek? Scenariusz 3

Instalacja Czytnika Kart w systemie Windows 7, Windows XP, Windows Vista, Windows 2000.

Aplikacja npodpis do obsługi certyfikatu

Transkrypt:

Uniwersytet Śląski Instytut Matematyki, Fizyki i Chemii w Katowicach Kierunek Informatyka Szeregowanie zadań o jednostkowych czasach wykonania na dowolnej liczbie identycznych procesorów. Autorzy: Szymon Bluma Zbigniew Golus Katowice Czerwiec 2007 1

Spis treści: 1. Wstęp... 3 2. Opis teoretyczny... 4 I. Algorytmy szeregowania... 5 II. Schemat blokowy... 6 3. Omówienie algorytmów... 8 4. Instrukcja dla użytkownika... 11 5. Bibliografia... 14 2

Wstęp Zagadnienie szeregowania zadań w popularnych systemach operacyjnych dla wielu procesorów jest procesem bardzo skomplikowanym, jednak od strony teoretycznej optymalne algorytmy dają się sprowadzić do prostego szeregowania zadań. Projekt ten ma za zadanie zobrazować działania algorytmów szeregowania zadań niepodzielnych i zależnych na dowolnej liczbie identycznych procesorów w celu minimalizacji maksymalnego opóźnienia L max. W systemach komputerowych czas wykonania zadań jest jest znany a priori, w przeciwieństwie do wielu innych zastosowań np. szeregowania detali na maszynach. Niemniej jednak także w systemach komputerowych rozwiązanie deterministycznego problemu szeregowania ma istotne znaczenie praktyczne. Podstawa niniejszego przedstawienia problemu jest książka [1]. Projekt został wykonany w języku JAVA firmy Sun Microsystems [2] [3] [4]. Do prawidłowego działania aplikacji wymagana jest instalacja Wirtualnej Maszyny Java (JVM - Java Virtual Machine) w wersji co najmniej 1.6.0. Plik instalacyjny został dołączony do płyty z projektem. 3

Opis teoretyczny Algorytm szeregowania (ang. scheduler - planista) to algorytm rozwiązujący jedno z najważniejszych zagadnień informatyki - jak rozdzielić czas procesora i dostęp do innych zasobów pomiędzy zadania, które w praktyce zwykle o te zasoby konkurują. Najczęściej algorytm szeregowania jest implementowany jako część wielozadaniowego systemu operacyjnego, odpowiedzialną za ustalanie kolejności dostępu zadań do procesora. Oprócz systemów operacyjnych dotyczy w szczególności także serwerów baz danych. Parametry charakteryzujące zadanie Z j : - Czas wykonywania - dla procesorów identycznych jest on niezależny od maszyny i wynosi г j. - Moment przybycia r j czas w którym zadanie trafia do algorytmu. - Termin zakończenia d j Oznacza czas, od którego nalicza się spóźnienie, lub termin, którego przekroczyć nie wolno dla wykonywanego zadania Maksymalne opóźnienie zadania oznaczamy jako L max. Maksymalny termin zakończenia zadania poprzez C max. Rozpatrujemy zbiór n zadań Z = {Z 1, Z 2, Z 3,..., Z n i zbiór m procesorów P = {P 1, P 2, P 3,..., P n. Zbiory zadań z określonymi ograniczeniami kolejnościowymi przedstawia się zwykle w postaci grafów skierowanych (digrafów). Zadania zależne: W zbiorze zadań Z można wprowadzić ograniczenia kolejnościowe w postaci dowolnej relacji częściowego porządku. Wówczas Zi < Zj oznacza, ze zadanie Zj może się zacząć wykonywać dopiero po zakończeniu Zi (bo np. Zj korzysta z wyników pracy Zi ). Jeśli ograniczenia te nie występują, mówimy o zadaniach niezależnych. Zasady poprawności harmonogramu: - w każdej chwili procesor może wykonywać co najwyżej jedno zadanie, - w każdej chwili zadanie może być obsługiwane przez co najwyżej jeden procesor, - zadanie Zj wykonuje sie w całości - spełnione są ograniczenia kolejnościowe, - w przypadku zadań niepodzielnych każde zadanie wykonuje sie nieprzerwanie w pewnym domknieto otwartym przedziale czasowym, dla zadań podzielnych czasy wykonania tworzą skończoną sumę rozłącznych przedziałów. Szukamy takiego uszeregowania zadań, aby czas wykonania zadań w określonych warunkach (w zależności od liczby procesorów), był jak najmniejszy, a także opóźnienie wszystkich zadań do wykonania było jak najmniejsze. 4

Zakładamy także, że procesory nie wykonują w chwili startu żadnych zadań, nie przyjmują innych zadań z zewnętrznych algorytmów i nie ulegają awarii w trakcie wykonywania zadań. Przez problem szeregowania będziemy rozumieć uporządkowany ciąg parametrów charakteryzujących dany problem, z których nie wszystkie musza mieć nadane wartości, wraz z kryterium szeregowania. Ustalając wartości wszystkich parametrów danego problemu szeregowania, otrzymujemy konkretny problem szeregowania. Algorytmem szeregowania dla problemu będziemy nazywać dowolną procedurę, która dla każdego konkretnego problemu znajduje uszeregowania, jeśli ono istnieje. Algorytmy szeregowania I. Szeregowanie na dowolnej liczbie identycznych procesorów zadań o jednostkowych czasach wykonywania tworzących graf typu anty drzewa, w celu minimalizacji L max 1. Podstaw d1 = 1 d1 2. Dla zadania Zk (k = 2, 3, 4,... n) wyznacz wartości zmodyfikowanego terminu zakończenia według wzoru dk = max{1 + dbn(k), 1 d k 3. Szereguj zadania w kolejności nie rosnących wartości ich zmodyfikowanych terminów zakończenia zgodnie z ograniczeniami kolejnościowymi. II. Szeregowanie na dwóch identycznych procesorach zadań o jednostkowych czasach wykonywania i dowolnych ograniczeniach kolejnościowych, w celu minimalizacji L max. 1. Wybierz zadanie Z k, któremu nie przydzielono jeszcze zmodyfikowanego terminu zakończenia, w którego wszystkie następniki mają już wyznaczone zmodyfikowane terminy zakończenia. 2. Utwórz zbiór A k następników zadania Z k. Dla każdego Z i є A k wyznaczyć liczbę g(k, d i* ) następników zadania Z k, mających wartości zmodyfikowanych terminów zakończenia nie większe niż d i*. Określ zmodyfikowany termin zakończenia wykonywania zadania Z k w następujący sposób: d k * = min{d k, min{(d i* -[1/2g(k,d i* )]):Z i є A k Jeśli któreś z zdań nie ma określonego zmodyfikowanego terminu zakończenia, to powróć do kroku 1. 3. Szereguj zadania w kolejności nie malejących wartości ich zmodyfikowanych terminów zakończenia i zgodnie z ograniczeniami kolejnościowymi. 5

Schemat blokowy Algorytm dla grafu typu antydrzewo 6

Algorytm dla dwóch procesorów 7

Omówienie algorytmów public class UkladaczAntydrzewo implements Assigner { private Digraph g; //graf zaleznosci private int n; //liczba zadan private int liczbaproc; //liczba procesorow private Zad[] dp; //zmodyfikowane czasy zakonczenia indexowane numerami wewnetrznymi public int[][] przyp; //przyporzadkowanie tablica postaci [n][2], [i][0] -procek, [i][1] -czas gdzie i-numer zewnetrzny //procesory i czasy numerujemy od zera private int[] d; //czasy zakonczenia (preferowane) indexowane numerami wewnetrznymi wierzcholow private int[] numerzew; //numery zewnetrzne wierzcholkow, przed odwolaniem sie do grafu g nalezy uzyc tej tablicy private int[] numerwew; //odwrotnosc permutacji numerzew :) private int timemax; //najwyzszy punkt na osi czasu w jakim jest wykonywane zadanie (zmienna uzywana przy rysowaniu) //funckcje interfejsu Assigner public int[][] getassign(){ return przyp; public UkladaczAntydrzewo(int liczbaproc, Digraph g, int[] d){ //d - tablica czasow zakonczenia this.g = g; n = g.v(); this.liczbaproc = liczbaproc; przyp = new int[n][2]; dp = new Zad[n]; DigraphChecker gch = new DigraphChecker(g); int[] tab = gch.topologicsort(); //tablica indexowana wierzchołkami od 0 this.d = new int[n]; numerzew = new int[n]; numerwew = new int[n]; for(int i = 0; i < n; i++){ this.d[tab[i]] = d[i]; numerzew[tab[i]] = i; numerwew[i] = tab[i]; doalgorytm(); private void doalgorytm(){ for(int i = 0; i < n; i++){ if(bn(i) >= 0) dp[i] = new Zad(i, max(d[i], -1 + dp[bn(i)].intvalue())); else dp[i] = new Zad(i, d[i]); Arrays.sort(dp); int ulozono = 0; //ilu zadaniom juz przydzielono procek int time = 0; //ktory kwant czasu rozpatrujemy boolean[] mozliwy = new boolean[n];//czy mozna uzyc wierzcholka i (wynika z grafu zaleznosci) boolean[] ulozony = new boolean[n];//juz przydzielono wierzcholkowi i 8

czas procka Arrays.fill(ulozony, false); while(ulozono < n){ //przegladanie grafu, szukanie wierzcholkow ktore juz mozna ulozyc Arrays.fill(mozliwy, true); for(int i = 0 ; i < n; i++){ Iterator<Integer> it = g.iterator(numerzew[i]); if(it.hasnext() &&!ulozony[i]){ //jesli nieulozone zadanie poprzedza inne int v = numerwew[it.next().intvalue()]; //jest to antydrzewo wiec iterator moze zawierac mozliwy[v] = false; // conjawyzej 1 wierzcholek int procnum = 0; //nastepny wolny procek boolean znaleziono = true; int wsk = 0; //wskaznik na tablicy dp //szukanie nastepnego zadania o najnizszym dp while(procnum < liczbaproc && znaleziono){ znaleziono = false; while(wsk < n){ if(mozliwy[dp[wsk].nr] &&!ulozony[dp[wsk].nr]){ //przyporzadkowywanie zadaniu procesora przyp[numerzew[dp[wsk].nr]][0] = procnum; przyp[numerzew[dp[wsk].nr]][1] = time; ulozono++; ulozony[dp[wsk].nr] = true; procnum++; znaleziono = true; break; wsk++; time++; timemax = time; private int bn(int u){ Iterator<Integer> it = g.iterator(numerzew[u]); if(it.hasnext()){ return numerwew[it.next().intvalue()]; else{ return -1; public class UkladaczDwaProcesory implements Assigner{ private Digraph g; //graf zaleznosci private int n; //liczba zadan private int liczbaproc; //liczba procesorow private Zad[] dp; //zmodyfikowane czasy zakonczenia indexowane numerami wewnetrznymi public int[][] przyp; //przyporzadkowanie tablica postaci [n][2], [i][0] -procek, [i][1] -czas gdzie i-numer zewnetrzny //procesory i czasy numerujemy od zera 9

private int[] d; //czasy zakonczenia (preferowane) indexowane numerami wewnetrznymi wierzcholow private int[] numerzew; //numery zewnetrzne wierzcholkow, przed odwolaniem sie do grafu g nalezy uzyc tej tablicy private int[] numerwew; //odwrotnosc permutacji numerzew :) private int timemax; //najwyzszy punkt na osi czasu w jakim jest wykonywane zadanie (zmienna uzywana przy rysowaniu) //funckcje interfejsu Assigner public int[][] getassign(){ return przyp; public int getproccount(){ return liczbaproc; public int getmaxtime(){ return timemax; public int getpreferredtime(int zadanie){ zakonczenia zadanie - numer zewnetrzny return d[numerwew[zadanie]]; //zwraca preferowany czas public UkladaczDwaProcesory(int liczbaproc, Digraph g, int[] d){ //d - tablica czasow zakonczenia this.g = g; n = g.v(); this.liczbaproc = liczbaproc; przyp = new int[n][2]; dp = new Zad[n]; DigraphChecker gch = new DigraphChecker(g); this.d = new int[n]; numerzew = new int[n]; numerwew = new int[n]; for(int i = 0; i < n; i++){ this.d[i] = d[i]; //permutacja identycznosciowa numerzew[i] = i; numerwew[i] = i; doalgorytm(); 10

Instrukcja dla użytkownika Główne okno programu widoczne po uruchomieniu: Programem sterujemy dzięki menu. Mamy dostępne 3 rozwijane główne mena programu: 11

Aby wprowadzić dane do programu należy z menu Nawigacja wybrać opcje Panel Roboczy. Pojawi się okno w którym będziemy mogli wstawiać poszczególne wierzchołki grafu oraz łączyć je z innymi wierzchołkami. Aby wstawić nowy wierzchołek należy pojedynczym kliknięciem myszki kliknąć w obszar zaznaczony na kolor czerwony na zrzucie ekranowym powyżej. Suwakami (zaznaczonymi na zielono) możemy manipulować dostępną powierzchnią jaką możemy wykorzystać do wstawienia drzewa procesów. Z prawej strony od omawianych komponentów programu znajduje się lista wszystkich dostępnych zadań, które zostały umieszczone w panelu roboczym. Możemy (ale nie musimy) przyporządkować konkretnym zadaniom termin zakończenia zadania. Na dole pod panelem roboczym jest pole w którym możemy określić na ilu procesorach ma zostać wykonany algorytm szeregowania zadań. Aby przesunąć wierzchołek w inne miejsce wystarczy kliknąć i przytrzymać lewy przycisk myszy, a następnie przeciągnąć go w dogodne miejsce. Usuwanie wierzchołka (i krawędzi z nim związanych) następuje po dwukrotnym kliknięciu na niego lewym przyciskiem myszy. 12

Po rozrysowaniu wszystkich wierzchołków, krawędzi z nimi związanych, liczby procesorów (ich ilość należy zatwierdzić klawiszem ENTER) i preferowanych czasów zakończenia zadań należy kliknąć na przycisk OBLICZ. Zostanie wtedy obliczony optymalne uszeregowanie zadań, które dodaliśmy do obliczenia. Na czerwono (zarówno na wykresie procesor/czas, jak również w prawej stronie okna) zostały oznaczone procesy, które nie zostały wykonane w preferowanym terminie zakończenia zadania. W czasie pracy z menu PLIK możemy zapisać swoje efekty pracy, które potem również z menu PLIK możemy odczytać. Nie stracimy tym sposobem już wprowadzonych wartości do programu. 13

Literatura [1] J. Błażewicz, W.Cellary, i inni: Badania operacyjne, PWN 1990. [2] Cay S.Horstmann, Gary Cornell JAVA 2 Podstawy, Wydawnictwo Helion 2003 [3] Bruce Eckel: Thinking in Java, 4ed., Wydawnictwo Helion 2004 [4] www.java.sun.com - Programowanie w Java. [5] www.us.edu.pl - Uniwersytet Śląski w Katowicach Niniejszy program wykonaliśmy samodzielnie i wyrażamy zgodę na korzystanie, oraz modyfikowanie programu Szeregowanie zadań o jednostkowych czasach wykonania tworzących graf na dowolnej liczbie identycznych procesorów w celu minimalizacji maksymalnego opóźnienia czasu wykonania w celach edukacyjnych oraz naukowych na potrzeby Uniwersytetu Śląskiego. 14