Párhuzamos programozás: folyamatok

Hasonló dokumentumok
Párhuzamos programozás: folyamatok

Miklós Árpád, BMF NIK, 2007

A párhuzamos végrehajtás alapjai

.NET alkalmazások telepítése

Vizuális, eseményvezérelt programozás XI.

Párhuzamos programozás.net környezetben

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Operációs rendszerek Folyamatok 1.1

Objektumorientált Programozás VI.

Objektumorientált Programozás VI.

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Haladóprogramozás (C#) , I. félév BMF NIK

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Párhuzamosság a modern operációs rendszerekben

Szoftvertervezés és -fejlesztés I.

Objektumorientált programozás C# nyelven

Programozási nyelvek Java

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Objektumorientált Programozás III.

Objektum Orientált Programozás IV.

Operációs rendszerek. Az NT folyamatok kezelése

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök Gyakorló feladatok V 1.0 ÓE-NIK-AII,

Objektumorientált programozás C# nyelven

Objektumorientált Programozás IV.

Programozás I. Szöveges fájlok kezelése Felsorolástípus Objektumtömb Gyakorló feladatok

Vizuális, eseményvezérelt programozás X. V 1.0

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

Objektum Orientált Programozás VII.

OPERÁCIÓS RENDSZEREK 1. PROCESSZKEZELÉS

Bevezetés. Többszálú, többmagos architektúrák és programozásuk Óbudai Egyetem, Neumann János Informatikai Kar

INFORMATIKAI ALAPISMERETEK

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Osztályok. 4. gyakorlat

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

(kernel3d vizualizáció: kernel245_graph.mpg)

Feladatok (task) kezelése multiprogramozott operációs rendszerekben

Informatika terméktervezőknek

.NET (Dot-NET) #1 (Bevezetés)

Java Programozás 11. Ea: MVC modell

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Konkurens TCP Szerver

Image Processor BarCode Service. Felhasználói és üzemeltetői kézikönyv

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Programozási nyelvek Java

Java és web programozás

Interfészek. PPT 2007/2008 tavasz.

Szoftvertervezés és -fejlesztés I.

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Java I. A Java programozási nyelv

9. MPI

OOP #14 (referencia-elv)

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Objektumorientált programozás C# nyelven

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

I. fejezet Hello Világ! Programozás tankönyv. II. Fejezet. Helló Világ! avagy a Miért?-ek elkezdődnek

OPERÁCIÓS RENDSZEREK I. BEVEZETÉS Koczka Ferenc -

Task-alapú párhuzamosítás C# környezetben

1. Alapok. Programozás II

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

Java Programozás 1. Gy: Java alapok. Ismétlés ++

A telepítési útmutató tartalma

Operációs rendszerek gyak.

1. Jelölje meg az összes igaz állítást a következők közül!

OOP: Java 8.Gy: Abstract osztályok, interfészek

Segédanyag: Java alkalmazások gyakorlat

Uniprogramozás. várakozás. várakozás. Program A. Idő. A programnak várakoznia kell az I/Outasítások végrehajtására mielőtt továbbfuthatna

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

3. Osztályok II. Programozás II

5.6.3 Laborgyakorlat: Windows rendszerleíró adatbázis biztonsági mentése és visszaállítása

Szoftvertechnológia alapjai Java előadások

UNIX operációs rendszer bemutatása. A UNIX története, fejlesztésének céljai.

BME MOGI Gépészeti informatika 8.

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Telepítési Kézikönyv

Operációs rendszerek. Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok:

2 PowerPoint 2016 zsebkönyv

Már megismert fogalmak áttekintése

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Előszó A Windows alkalmazásfejlesztés rövid története A Windows életútja A Windows 8 paradigmaváltása... 16

Concurrency in Swing

Tartalomjegyzék. Előszó... 10

OOP. #6 (VMT és DMT) v :33:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

ISA szimulátor objektum-orientált modell (C++)

Programozási nyelvek és módszerek Java Thread-ek

Hardver és szoftver követelmények

Konzolalkalmazások gyors tesztelése

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Szoftvertechnolo gia gyakorlat

Átírás:

SzPE (C#) 2007 2008, II. félév BMF NIK Párhuzamos programozás: folyamatok A párhuzamos programozás alapjai A végrehajtás szétválasztása: elszigetelés és párhuzamosítás Párhuzamosság és ütemezés az operációs rendszer szintjén Folyamatok fogalma és kezelése Új folyamat indítása, létező folyamatok leállítása és bevárása Folyamatok tulajdonságainak és eseményeinek kezelése miklos.arpad@nik.bmf.hu

Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik. Ismeretük szükséges, de nem elégséges feltétele a sikeres zárthelyinek, illetve vizsgának. Sikeres zárthelyihez, illetve vizsgához a jelen bemutató tartalmán felül a kötelező irodalomként megjelölt anyag, a gyakorlatokon szóban, illetve a táblán átadott tudnivalók ismerete, valamint a gyakorlatokon megoldott példák és az otthoni feldolgozás céljából kiadott feladatok önálló megoldásának képessége is szükséges. 2

A párhuzamos végrehajtás alapjai A Neumann architektúrára épülő számítógépek a programokat sorosan hajtják végre A gépi kódú programok tényleges futtatása utasításról utasításra történik. Ahhoz, hogy egy számítógépen egyszerre több program is futtatható legyen, olyan megoldásra van szükség, amely biztosítja a végrehajtás alatt álló programok egymástól való elszigetelését, valamint a végrehajtás alatt álló programok (látszólag) egyidejű futását. A programok elszigetelése és párhuzamosítása a folyamatok koncepciójának segítségével megoldható Az elszigetelés érdekében minden folyamat saját memóriaterülettel rendelkezik, amelyet más folyamatok nem érhetnek el, így hiba esetén csak a hibázó folyamat sérül, a rendszer többi eleme működőképes marad (viszont a folyamatok közötti közvetlen kommunikációra sincs egyszerű lehetőség). A párhuzamosítás tipikus megoldása az időosztás, amikor minden folyamat kap egy egy ún. időszeletet, melynek leteltét követően egy másik folyamat kapja meg a vezérlést. Ez a megoldás gyakorlatilag függetleníti egymástól a processzorok és a rajtuk egyidőben futtatható programok számát. 3

Illusztráció: az időosztás elve Futó állapot P 1 folyamat Megszakítás vagy rendszerhívás Állapotmentés (PCB 1 ) Állapotbetöltés (PCB 2 ) P 2 folyamat Futásra kész vagy várakozó állapot Futásra kész vagy várakozó állapot Futó állapot Megszakítás vagy rendszerhívás Állapotmentés (PCB 2 ) Állapotbetöltés (PCB 1 ) Futó állapot Futásra kész vagy várakozó állapot Original image 2000 2005 David A. Solomon and Mark Russinovich 4

Ütemezés az operációs rendszerekben Az ütemezés fogalma a végrehajtás alatt álló programok közötti rendszeres váltás módját, időzítését és szabályait takarja A Microsoft Windows preemptív, prioritásos, körbenforgó, kétszintű* ütemezési politikát alkalmaz. Az ütemezés preemptív : az operációs rendszer kívülről bármikor képes megszakítani a programok futását Az ütemezés prioritásos : minden programnak van egy fontossági szintje (prioritása), amely meghatározza, hogy egy egy időszelet lejártakor melyik program következhet sorra Az ütemezés körbenforgó : az egyforma prioritású programok között a rendszer egyenlően osztja el a rendelkezésre álló időt, és a programok sorban egymás után kapnak egy egy időszeletet (az utolsó program időszelete után ismét az első következik) Az ütemezés kétszintű : az elszigetelt folyamatok mellett léteznek ún. szálak is, amelyek a futtatni kívánt kód egy folyamaton belüli további bontását teszik lehetővé (lásd később) A Unix/Linux rendszerek félig preemptív, prioritásos, körbenforgó, egyszintű ütemezési politikát alkalmaznak. Az ütemezés félig preemptív : az operációs rendszer a programok futását kívülről bármikor képes megszakítani, saját belső elemeinek futását azonban nem Az ütemezés egyszintű : a rendszerben csak elszigetelt folyamatok léteznek, ezek képezik a párhuzamosítás alapegységét is * A modell ténylegesen négyszintű, de a legfelső ( job ) és a legalsó ( fiber ) szemcsézettségi szint csak speciális módon használható. 5

Folyamatok A.NET keretrendszerben a folyamatok megfelelnek az operációs rendszer folyamatainak A folyamatok kezelését a System.Diagnostics.Process és a System.Diagnostics.ProcessStartInfo osztályok biztosítják. A Process osztály segítségével új folyamatok hozhatók létre, létező folyamatok szüntethetők meg és a folyamatokról részletes adatok érhetők el. A ProcessStartInfo osztály segítségével számos paraméter és beállítás adható meg a folyamatként elindítani kívánt programokhoz. A.NET a folyamatokon belül egy további szintet, az ún. alkalmazástartományt ( application domain ) is meghatároz A felügyelt kódú programokat a keretrendszer futtatás közben is ellenőrzi, ezért ezek nem képesek egymást negatívan befolyásolni. Így viszont nem feltétlenül szükséges külön folyamatként futtatni őket, ami sebesség és memóriaigény szempontjából nagy előny, mivel a folyamatok létrehozása, nyilvántartása és a közöttük történő váltás sok időt és memóriát igényel. Az alkalmazástartományokkal és programozásukkal a jelen tárgy keretében nem foglalkozunk részletesen. 6

Folyamatok kezelése (kivonatos referencia) System.Diagnostics.Process osztály Metódusok Start() Folyamat indítása CloseMainWindow() Folyamat főablakának bezárása (GUI alkalmazásoknál) Kill() Folyamat leállítása GetCurrentProcess() Aktuális folyamatot reprezentáló objektum lekérése GetProcesses() Összes folyamat adatainak lekérése a helyi számítógépről WaitForExit() Várakozás az adott folyamat befejeződésére Tulajdonságok StartInfo A folyamathoz tartozó ProcessStartInfo példány PriorityClass A folyamat prioritása (fontossági szintje) EnableRaisingEvents A folyamat kiválthat e eseményeket HasExited A folyamat kilépett e ExitCode, ExitTime Kilépési kód, illetve a kilépés (vagy leállítás) időpontja StandardInput, StandardOutput Alapértelmezett be és kimeneti csatorna (adatfolyam) Események Exited A folyamat kilépett (vagy leállították) 7

Folyamatok kezelése (kivonatos referencia) System.Diagnostics.ProcessStartInfo osztály Tulajdonságok FileName Arguments, WorkingDirectory Domain, UserName, Password RedirectStandardInput, RedirectStandardOutput ErrorDialog UseShellExecute Verb WindowStyle Fájlnév megadása az indítandó folyamathoz (program vagy programmal társított fájltípusba tartozó fájl neve) Parancssori paraméterek és munkakönyvtár megadása az indítandó folyamathoz Folyamat indítása adott felhasználó nevében Alapértelmezett be és kimeneti csatorna átirányítása Hibaüzenet jelenjen e meg, ha a folyamat indítása sikertelen Operációs rendszerhéj programindító funkciójának használata folyamat indításához A társított fájl megnyitásakor végrehajtandó művelet Kezdeti ablakméret megadása (normál, minimalizált vagy maximalizált méret) 8

Példa új folyamat indítására 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 using System; using System.Diagnostics; class Program { static void Main() { Process newprocess = new Process(); newprocess.startinfo = new ProcessStartInfo("hello.exe", "Pistike"); newprocess.startinfo.errordialog = true; newprocess.startinfo.useshellexecute = false; newprocess.startinfo.redirectstandardoutput = true; } } newprocess.start(); newprocess.waitforexit(); Console.WriteLine("Az elindított folyamat üzenetei:"); Console.Write(newProcess.StandardOutput.ReadToEnd()); Console.ReadLine(); ProcessExamples\Program.cs 9

Feladat (1) Készítsünk konzolos alkalmazást, amely (a számítógépre telepített.net keretrendszer segítségével) képes a parancssorban megadott C# nyelvű forrásfájl lefordítására és az esetleges hibák megjelenítésére! Amennyiben a forráskód hibátlan volt, ezt a program külön üzenetben jelezze! Ötletek: A.NET keretrendszer része a parancssoros C# fordító (csc.exe) A program számára parancssorban megadott adatok kezeléséhez a Main() metódus args paraméterét használhatjuk fel, amely karaktersorozatok tömbjeként tartalmazza az átadott adatokat Ha a forráskód fordítása sikeres, maga a C# fordító egy néhány soros fejlécen kívül semmilyen üzenetet nem ír ki. A fejléc megjelenítése a /nologo parancssori paraméterrel kapcsolható ki. 10

Megoldás (1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 using System; using System.Diagnostics; class Program { static void Main(string[] args) { if (args.length > 0) { ProcessStartInfo startinfo = new ProcessStartInfo(); startinfo.filename = String.Format(@"{0}\..\Microsoft.NET\Framework\v{1}\csc.exe", Environment.GetFolderPath(Environment.SpecialFolder.System), Environment.Version.ToString(3)); startinfo.arguments = String.Format(@"/nologo /t:exe {0}", args[0]); startinfo.redirectstandardoutput = true; startinfo.useshellexecute = false; } } Process compilerprocess = Process.Start(startinfo); string output = compilerprocess.standardoutput.readtoend(); compilerprocess.waitforexit(); if (output == String.Empty) Console.WriteLine("A forráskód hibátlan, a fordítás sikerült."); else Console.WriteLine("Hibaüzenetek:" + Environment.NewLine + output); } Compiler\Program.cs 11

Feladat (2) Készítsük el az előző feladat bővített megfelelőjét grafikus Windows alkalmazásként is (az elkészült program adjon lehetőséget a forráskód szerkesztésére, betöltésére, mentésére, fordítására és futtatására)! Ötletek: A program a forráskódot fordítás előtt mentse el egy ideiglenes fájlba A futtatáshoz használjuk a Process osztály statikus Start() metódusát 12

Megoldás (2) VisualCompiler 2008. február miklos.arpad@nik.bmf.hu 13

Irodalomjegyzék (alapismeretek) C. Nagel, B. Evjen, J. Glynn, M. Skinner, K. Watson, A. Jones: Professional C# 2005 Kiadó: Wiley Publishing, Inc., 2006 ISBN: 978 0 7645 7534 1 Web: http://www.wiley.com/, http://www.wrox.com/ Nyelv: angol Terjedelem: 1540 oldal Folyamatok kezelése: 14 16., 413. o. Szálkezelés: 349 368. o. Microsoft Corp., Visual Studio Developer Center Szálkezelés a.net keretrendszerben: http://msdn2.microsoft.com/en us/library/3e8s7xdd(vs.80).aspx 14

Irodalomjegyzék (magasszintű ismeretek) Albert I., Balássy Gy., Charaf H., Erdélyi T., Horváth Á., Levendovszky T., Péteri Sz., Rajacsics T.: A.NET Framework és programozása Kiadó: Szak Kiadó, 2004 ISBN: 963 9131 62 8 Web: http://www.szak.hu/ Nyelv: magyar Terjedelem: 868 oldal Párhuzamos programozás: 585 607. o. Folyamatok kezelése: 608 613. o. Szálkezelés és szinkronizáció: 614 648. o. J. Richter: CLR via C#, Second Edition Kiadó: Microsoft Press, 2006 ISBN: 978 0 7356 2163 3 Web: http://www.wintellect.com/ Nyelv: angol Terjedelem: 736 oldal Szálkezelés és szinkronizáció: 585 648. o. 15