Windows 32 Bit Systemprogrammierung

Größe: px
Ab Seite anzeigen:

Download "Windows 32 Bit Systemprogrammierung"

Transkript

1 Windows 32 Bit Systemprogrammierung Vertiefung Systemprogrammierung SS 09 Professor Dr. Helmut Weber Abdullah Kutlucan Manuel Köhler Roman Pompetzki

2 Inhaltsangabe Einführung in die Win32 API Dateisystem Prozesse/Threads Registry Win32Speichermanagement Asynchrones I/O 2 Pompetzki Windows 32 Bit

3 Einführung 1/2 Microsoft Windows: meistgenutztes Betriebssystem der Welt Win32 API!= UNIX API UNIX besteht im Open Standard Windows hingegen wird von einer Firma kontrolliert 3

4 Einführung 2/2 Vorteile für den Nutzer: Einheitlichkeit, kein Versionschaos keine patentrechtlichen Erweiterungen -> keine Verwirrung Unmengen Zusatzprogramme und Tools für alles und jeden Innovative Neuerungen zuerst für Windows 4

5 Technisches zur Win32 API Win32 Funktionsnamen sind lang und ausführlich -> schneller Rückschluss auf Rolle (z.b. WaitForSingleObject ) zahlreiche Synchronisationsmechanismen reichhaltiges und flexibles Interface 5 kernel Objekte von Win32-APIs manipulierbar - > keine Hintertürchen

6 Datentypen Datentyp BOOL BYTE COLORREF DWORD LONG LPARAM LPCSTR LPSTR LRESULT UINT WNDPROC WORD WPARAM Bedeutung boolscher Wert (32 Bit) vorzeichenloser 8-Bit-Wert Farbinformationen (32 Bit) wie unsigned int in C (32 Bit) wie int in C (32 Bit) Funktionsparameter (32 Bit) Zeiger auf konstanten String Zeiger auf String Rückgabewert von Funktionen (32 Bit) unsigned int Zeiger auf eine Windowsfunktion unsigned short Funktionsparameter (16 Bit) 6

7 Systemaufrufe UNIX Win32 Beschreibung open CreateFile Neue Datei erzeugen oder Datei öffnen close CloseFile Datei schließen read ReadFile Daten aus einer Datei lesen write WriteFile Daten in eine Datei schreiben lseek SetFilePointer Warten auf ein Ereignis stat GetFileAttributes Dateizeiger bewegen unlink DeleteFile Datei löschen mkdir CreateDirectory Neues Verzeichnis erzeugen rmdir RemoveDirectory Leeres Verzeichnis löschen 7

8 Beispielprogramm aus einer erstellten Datei lesen: 1. #include <windows.h> 2. #define SOURCE source.txt //Quelldatei 3. #define MAXREADSIZE Int main(int argc, char **argv[]) 5. { 6. HANDLE hread; 7. DWORD readsize; 8. char buffer [MAXREADSIZE]; 9. //Datei verfügbar machen 10. hread = CreateFile(SOURCE,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL); 11. /*mögliche Fehler könnten an dieser Stelle abgefangen werden*/ 12. ReadFile(hread,buffer,MAXREADSIZE,&readsize,NULL); //Datei lesen 13. /*mögliche Fehler könnten an dieser Stelle abgefangen werden*/ 14. CloseFile(hread);} 8

9 Dateisystem Ablageorganisation auf Datenträger lesen, speichern oder verschieben leichtes Wiederfinden / sicheres Abspeichern 9

10 FAT und NTFS FAT32 es gibt auch ältere Versionen (z.b. FAT12) für Datenträger bis 8TB (ca. 8000GB) max. Dateigröße 4GB NTFS sicherer und schneller max. Dateigröße 1 Million TB Nachteil NTFS Funktionsweise Betriebsgeheimnis v. Microsoft 10

11 Systemaufrufe HANDLE CreateFile( ) Öffnen oder Erzeugen von Dateien Rückgabewert ist ein Handle BOOL ReadFile (HANDLE hfile, ) Rückgabe true bei Erfolg BOOL CloseFile (HANDLE hfile); schließt Datei 11

12 CreateFile(..) Aufbau 12 Handle CreateFile ( LPCTSTR dateiname, /*Dateiname*/ DWORD dwdesiredaccess, /*Schreibrechte*/ DWORD dwsharemode, /*Gemeinsame Nutzung von mehr. CPU s regeln*/ [LPSECURITY_ATTRIBUTES lpsa] /*Sicherheitsaspekte*/ DWORD dwcreationdisposition, Öffnen*/ DWORD dwflagsandattributes, Dateieinstellungen*/ [HANDLE htemplatefile] /*Zustände beim /*erweit. /*erben von HANDLE Pompetzki (Schreibrechte,..)*/ Windows 32 Bit

13 Beispiel Cat (1/2) 1. /*typedef unsigned long DWORD*/ 2. #include <windows.h> 3. #include <stdio.h> 4. #define BUF_SIZE int main (int argc, char* argv []){ 7. HANDLE h1; //h1 = Handler 8. DWORD wirklichgelesenebyte; //DWORD ist ein int, wie in Unix size_t 9. char buffer [BUF_SIZE]; //buffer = das gelesene wird reingeschreiben 10. if (argc!= 2) { //BUF_SIZE = anzahl der zu lesenden Bytes 11. printf ("Nutze wie folgt: mycat Datei\n"); 12. return 0; 13. } 14. h1 = CreateFile (argv [1], GENERIC_READ, FILE_SHARE_READ, NULL, 15. OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 13

14 Beispiel Cat (2/2) 1. if (h1 == INVALID_HANDLE_VALUE) { 2. printf ("Konnte Datei nicht oeffnen.\n"); 3. return 0; 4. } 21. boolean b = ReadFile (h1, buffer, BUF_SIZE, &wirklichgelesenebyte,null); 22. /*wirklichgelesenebyte = Referenz auf diese Variable -> die Variable wird nach ReadFile gefüllt */ 23. if (b!=1) { printf("dateilesefehler!\n"); 21. } 22. printf("\n%s \n\nund tatsaechlich gelesen: %i",buffer, wirklichgelesenebyte); 23. } 24. CloseHandle (h1); 25. return 0; 14

15 Prozesse/Threads Jeder Prozess beinhaltet: Einen oder mehrere Threads Ein oder mehrere Code-Segmente, inklusive dll-code Ein oder mehrere Daten- Segmente mit globalen Variablen Den Prozess-Heap Prozess Ressourcen, mit z.b. Handles oder anderen Heaps Code Globale Variablen Prozess Heap Prozess Ressourcen Umgebungsblock Thread1 Thread N TLS < > TLS Stack Stack 15

16 Prozesserstellung BOOL CreateProcess ( LPCTSTR lpimagename, //Name des Programms LPTSTR lpcommandline, //Kommandozeilen-Argumente LPSECURITY_ATTRIBUTES lpsaprocess, //Sicherheitsattribute Prog. LPSECURITY_ATTRIBUTES lpsathread, //Sicherheitsattribute Threads BOOL binherithandles, //Handles an Kinder vererben DWORD dwcreate, //Prozesserstellungsoptionen LPVOID lpvenvironment, //Umgebungsvariablen LPCTSTR lpcurdir, //Arbeitsverzeichnis LPSTARTUPINFO lpsistartinfo, //Eigenschaften des Hauptfensters LPPROCESS_INFORMATION lppiprocinfo) //Prozessinformationen Rückgabewerte: NULL bei Fehler TRUE wenn der Prozess und Thread erfolgreich erstellt wurden 16

17 Erstellungsoptionen (dwcreate) CREATE_SUSPENDED: Erstellt einen Prozess, dessen Prozess-Thread schlafen gelegt wird. Der Prozess kann mit ResumeThread() geweckt werden. DETACHED_PROCESS: Erstellt einen Prozess ohne Konsole. CREATE_NEW_CONSOLE: Erstellt einen Prozess mit neuer Konsole CREATE_NEW_PROCESS_GROUP : Der Prozess eröffnet eine neue Gruppe in der alle teilnehmenden Prozesse die gleiche Konsole benutzen. 17

18 Prozessinformationen 18 Prozesse besitzen ID's und Handles: typedef struct _PROCESS_INFORMATION{ HANDLE hprocess; HANDLE hthread; DWORD dwprocessid; DWORD dwthreadid; } PROCESS_INFORMATION; ID's und Handles: Es kann mehrere Handles zu einem Objekt geben, ID's nicht Objekt-ID's sind einzigartig und unveränderlich Jedes Objekt besitzt eine ID solange es existiert

19 Terminieren von Prozessen 19 VOID ExitProcess (UINT nexitcode); Parameter: - nexitcode: Terminierungsstatus - Beendet den aufrufenden Prozess mit all seinen Threads - Ignoriert _finaly und _except Handler des SEH (Structured Exception Handling)! -> Ressourcen vorher freigeben! BOOL TerminateProcess ( HANDLE hprocess, UINT uexitcode ); Parameter: - hprocess: Handle eines Prozesses. - uexitcode: Terminierungsstatus (Eingabe-Parameter) - Beendet einen anderen Prozess mit all einen Threads - Ignoriert SEH komplett! - Resourcen werden nicht freigeben!

20 Systemaufrufe 20 UNIX Win32 Beschreibung fork, Kind ruft execl oder execle auf exit, schließt Dateien und schreibt waitpid Pufferdaten (unblocking) wait (blocking) kill CreateProcess ExitProcess, terminiet den Prozess sofort WaitForSingleObject oder GetExitCodeProcess GenerateConsoleCtrlE vent einen neuen Prozess erstellen Prozess beendet sich selbst Auf Terminierung von Prozessen warten bzw. Terminierungsstatus Terminierungssignal senden - OpenProcess öffnet existierenden kill, mit SIGKILL, TerminateProcess anderen Proz. Prozess SIGTERM beenden

21 Vergleich: Prozesserstellung Unix: int pid; pid = fork(); if(pid==0) { // Kindprozess execle ("/bin/ls", NULL); } int status=0; // Warten auf Beendigung des Kindprozesses wait(&status); 21

22 Vergleich: Prozesserstellung Windows: STARTUPINFO si; PROCESS_INFORMATION pi; // Start the child process CreateProcess( NULL, // Modulname (hier über Kommandozeilenparameter) argv[1], // Kommandozeile NULL, // Prozess-Handle nicht vererbbar NULL, // Thread-Handle nicht vererbbar FALSE, // Handle-Vererbbarkeit auf FALSE 0, // Keine Flags NULL, // Eltern-Umgebungsblock wird genutzt NULL, // Eltern-Startverzeichnis wird genutzt &si, // Pointer auf STARTUPINFO Struktur &pi ) ; // Pointer auf PROCESS_INFORMATION Struktur WaitForSingleObject( pi.hprocess, INFINITE ); // Auf Beendigung des Kind- Prozesses warten CloseHandle( pi.hprocess ); // Schließen des Prozesses und der Thread-Handles CloseHandle( pi.hthread ); 22

23 Registry Es werden in der Registry Datenbank Einstellungen von Windows, der Software und der Hardware hinterlegt Ab Win95 trifft Beschreibung oben zu, davor in NT Systemen vorhanden, aber nur für Dateizuordnungen 23

24 Wie kommt man zur Registry? regedit32 für Win2000/NT 24

25 HKCR: Verweist auf den Unterschlüssel HKLM\Software\Classes. (aus Kompatibil.) Für Beschreibung, Symbol und verknüpfte Anwendung von Dateien zuständig. HKCU: Profil des aktuellen Benutzers (von HKUSERS bestimmt) 25

26 HKLM: rechnerspezifische Hardware- und Software- Einstellungen (für alle Benutzer) HKU: Benutzerdefinierte Einstellungen der Benutzer 26 HKCC: verweist auf den Unterschlüssel HKLM\System\CurrentControlSet \Hardware\Profiles\Current Enthält Informationen wie Bildschirmauflösungen und Schriftarten.

27 Beispiel: In HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\ CurrentVersion\Run einen neuen Eintrag anlegen 27

28 28

29 Registry API Calls RegOpenKeyEx - vorhandene Key öffnen RegDeleteKeyEx - vorhandene Key löschen RegCreateKeyEx - neuen Key erzeugen RegEnumKeyEx - Auflisten aller Subkeys im geöffneten Key RegSetValueEx - Setzen eines Name/Wert-Paares im geöffneten Key RegEnumValue - Auflisten aller Values im geöffneten Key 29

30 RegOpenKeyEx 30 LONG RegOpenKeyEx ( HKEY hkey, //erwartet einen der Hauptschlüssel LPCTSTR lpsubkey, //erwartet Subkey d. Hauptkeys DWORD uloptions, //muss 0 sein REGSAM samdesired, //Für Zugriffsrechte PHKEY phkresult //Key-Handle des geöffneten Keys );

31 Beispiel 1. HKEY hkey = Null; 2. if (ERROR_SUCCESS!= RegOpenKeyEx HKEY_LOCAL_MACHINE, Software\Microsoft\Windows\ CurrentVersion\Run, 0, KEY_WRITE, &hkey) 3. { 4. printf( Fehler beim Öffnen des Keys ); 5. } 31

32 Exception Eine Exception tritt z.b. auf bei Division durch Null Null-Pointer Dereferenzierung Array Out Of Bound Nachdem eine Exception im Programm auftritt, wird das Programm an dieser Stelle sofort beendet Folgen? 32

33 Aufbau try { // Code, der einen Fehler verursachen könnte } except (erwartebestimmtekonstante*) { // Fehlerbehandlung } *auch Funktion möglich, die eine Konstante zurückgibt 33

34 Mögliche Konstanten EXCEPTION_EXECUTE_HANDLER Standardfall, führt Anweisungen in _except durch und Programm läuft dann nach except-block normal weiter EXCEPTION_CONTINUE_SEARCH Ausnahme wurde nicht erkannt. Suche weiter im Quellcode nach _exept() EXCEPTION_CONTINUE_EXECUTION Ausnahme wird zurückgewiesen und es wird versucht, an dem Punkt, wo die Ausnahme auftrat, weiterzumachen. 34

35 1. #include <stdio.h> 2. #include <windows.h> 3. #include <excpt.h> 4. int filter(unsigned int code) { 5. puts("in filter."); 6. if (code == EXCEPTION_INT_DIVIDE_BY_ZERO) { 7. puts("not allowed"); 8. return EXCEPTION_EXECUTE_HANDLER; 9. } 10. } 11. int main() 12. { 13. int p = 3; 14. puts("hello"); Ausgabe? 15. try{ 16. puts("in try"); 17. p = p / 0; // exception; 18. } 19. } except(filter(getexceptioncode()){ 20. puts("in except"); 21. } 22. puts("world"); 23. } 35

36 1. #include <stdio.h> 2. #include <windows.h> 3. #include <excpt.h> 4. int filter(unsigned int code) { 5. puts("in filter."); 6. if (code == EXCEPTION_INT_DIVIDE_BY_ZERO) { 7. puts("not allowed"); 8. return EXCEPTION_EXECUTE_HANDLER; 9. } 10. } 11. int main() 12. { 13. int p = 3; 14. puts("hello"); Ausgabe: try{ 16. puts("in try"); 17. p = p / 0; // exception; 18. } 19. } except(filter(getexceptioncode()){ 20. puts("in except"); 21. } 22. puts("world"); 23. } hello in try in filter. not allowed in except world

37 Bemerkungen zu Ausnahmen Empfehlung von Microsoft finally 37

38 Win32 Speichermanagement Win32 API: Maximal 4 GB an Speicher ansprechen/adressieren (2 hoch 32) Benutzer-Prozesse: Standardmäßig 2 GB Rest für den Kernel, Treiber und Dynamic Link Libaries (DLLs) 38 DLLs: Von mehreren Prozessen gleichzeitig benutzt (shared data bzw. shared code).

39 Win32 Speichermanagement Da Rechner wenig RAM: Konzept des virtuellen Speichers (virtual memory) Jeder Prozess hat seinen eigenen virtuellen Speicher. Virtueller Speicher viel größer als realer Speicher Betriebssystem: Mapping vom virtuellen auf den realen (physischen) Speicher. 39 3

40 Virtueller Speicher Virtual Memory Win32 API : Setzt auf Virtual Memory Manager auf Spricht komplette Seiten an. Die gängigsten Funktionen dafür sind: VirtualAlloc() VirtualFree() VirtualLock() VirtualUnlock() 40

41 Virtueller Speicher Um die Größe einer Seite auf dem aktuellen Betriebssystem herauszufinden (Win9x/NT/2000/XP/Vista), kann der folgende Systemaufruf benutzt werden: VOID GetSystemInfo (LPSYSTEM_INFO lpsysteminfo) Die übergebene SYSTEM_INFO Struktur enthält unter anderem Informationen über die Page-Größe 41 5

42 GetSystemInfo() Beispiel Aktuelle Seitengröße ermitteln: Ausgabe, z.b. auf IBM Thinkpad 600X mit Windows 2000): 4096 Bytes 42

43 Heaps Teile des Speichers werden in Heaps verwaltet. Pro Prozess können mehrere Heaps benutzt werden. Standard-Heap (Default-Heap) = Prozess-Heap Funktionen für Standard-Heap: malloc(), free(), calloc(), realloc() Handle für Standard-Heap holen mit: HANDLE GetProcessHeap(VOID) Es können auch mehrere Heaps allokiert werden 43

44 Mehrere Heaps - Vorteile Fairness: Jeder Thread hat einen gleich großen Speicher Speicherfehler betreffen nur diesen einen Thread Performance in mehreren Threads: Es kann nicht mehr um den Speicher gekämpft werden Kann Performance-Verbesserungen bringen 44 Effizienteres Freigeben von Speicher: 1x HeapDestroy() aufrufen: Alles inkl. Speicherlecks weg!

45 Heap erstellen Neuen Heap erstellen: HANDLE HeapCreate ( DWORD floptions, SIZE_T dwinitialsize, SIZE_T dwmaximumsize) Rückgabewert: Heap-Handle oder NULL floptions: Flag für Exception-Handler einschalten, Performance-Verbesserung, etc dwinitialsize: Initiale Größe (kann auch 0 sein) dwmaximumsize: Maximale Größe (kann ebenfalls 0 sein, dann wächst der Heap u.u. bis zur maximal möglichen virtuellen Speichergrenze 45

46 Heap löschen BOOL HeapDestroy (HANDLE hheap) Der Default-Heap sollte auf diese Weise nie gelöscht werden! So können auf einen Rutsch riesige Datenstrukturen aus dem (virtuellen) Speicher gelöscht werden! 46

47 Speicherblock erstellen LPVOID HeapAlloc ( HANDLE hheap, DWORD dwflags, SIZE_T dwbytes) Rückgabewert: Ein Pointer des allokierten Blockes oder NULL bei Fehler hheap: Der Prozess-Heap oder ein selbst erstellter Heap dwflags HEAP_GENERATE_EXCEPTIONS: Exception-Handler einschalten HEAP_ZERO_MEMORY: Block mit 0 initialisieren! dwbytes: Anzahl der Byte, die allokiert werden sollen 47

48 Blockgröße ermitteln Die Blockgröße kann wie folgt ermittelt werden: DWORD HeapSize ( /* BlockSize() wäre passender */ HANDLE hheap, DWORD dwflags, LPVOID lpmem) Rückgabewert: Blockgröße oder 0 (zero) bei Fehler Parameter: Wie gehabt 48

49 Weitere Funktionen HeapFree( ) Einzelne Blöcke freigeben HeapRealloc( ) Blockgröße nachträglich ändern HeapLock( ) / HeapUnlock( ) Hiermit kann man einen kritischen Abschnitt definieren 49

50 Dateimapping / MMF Solange der Prozess läuft, werden die allokierten Daten im virtuellen Speicher gehalten und nur bei Bedarf in den RAM geladen. Prozess beenden => Allokierte Daten sind weg! Virtueller Speicher = Auslagerungs-Datei Idee: Physikalische Dateien auf virtuellen Speicher mappen Festgelegter Bereich oder komplette Datei mappen 50

51 Vorteile MMF Dies hat folgende Vorteile: Keine I/O-Operationen (Zeitersparnis) Erstellte Datenstrukturen wiederverwendbar Mehrere Prozesse können den Speicher gleichzeitig mappen! 51

52 Mapping-Objekt erstellen Eine Datei kann gemappt werden mit: HANDLE CreateFileMapping ( HANDLE hfile, LPSECURITY_ATTRIBUTES lpsa, DWORD fdwprotect, DWORD dwmaximumsizehigh, DWORD dwmaximumsizelow, LPCTSTR lpszmapname) 52 Rückgabewert: NULL oder Handle der gemappten Datei hfile: Handle einer geöffneten Datei oder INVALID_HANDLE_VALUE eintragen, mit letzterem wird die Auslagerungsdatei selbst genommen, damit können verschiedene Prozesse ihren Speicher teilen, ohne eine Datei erstellen zu müssen

53 Mapping-Objekt öffnen Geöffnet wird es mit: HANDLE OpenFileMapping ( DWORD dwdesiredaccess, BOOL binherithandle, LPCTSTR lpname) Rückgabewert: NULL oder Mapping-Handle dwdesiredaccess: Nur Lesen, nur Schreiben, etc hinherithandle: TRUE oder FALSE, ob Handle an untergeordnete Prozesse vererbt werden kann lpname: Name des vorher erstellten Mapping-Objektes Mapping schließen mit: CloseHandle() 53

54 View(s) der Datei erstellen Letztendlich wird die Datei über das erstellte und geöffnete Mapping-Objekt in den virtuellen Adressraum des Prozesses geladen: LPVOID MapViewOfFile ( HANDLE hmapobject, DWORD fdwaccess, DWORD dwoffsethigh, DWORD dwoffsetlow, SIZE_T cbmap) Rückgabewert: NULL oder Startadresse des gemappten Speichers 54

55 Adressräume Die Grafik zeigt den Unterschied zwischen dem virtuellem und realem Adressbereich einer gemappten Datei: Programm Datei fh = CreateFile ( ); mh = CreateFileMapping (fh); Virtueller Prozess-Speicher while ( ) { preca = MapViewOfFile (mh); precb = MapViewOfFile (mh); precb -> Data = preca -> Data;... UnmapViewOfFile (preca); UnmapViewOfFile (precb); } CloseHandle (mh); CloseHandle (fh);

56 Reihenfolge Folgende Reihenfolge muss eingehalten werden, damit die (veränderte) Datei korrekt auf den Datenträger geschrieben wird: 1. Das Dateimapping mit UnmapViewOfFile() aus dem Speicher entfernen 2. Das Mapping-Objekt schließen mit CloseHandle() 3. Das mit CreateFile() geöffnete Handle ebenfalls mit CloseHandle() schließen Wichtig: Nebenher keine I/O-Operationen auf die gleiche Datei machen! 56

57 Dynamic Link Libraries Windows-Programme benötigen häufig sogenannte DLL-Dateien, sonst sind diese nicht lauffähig. Eine DLL-Datei ist eine gemappte Datei im (virtuellen) Speicher, auf die auch andere Prozesse zugreifen können (shared memory). Zur Ladezeit (load time) einbinden: implizites Linken Zur Laufzeit (run time) einbinden: explizites Linken 57 Hauptvorteil: Gemeinsame Benutzung der Funktionalität

58 Iimplizites Linken (1/2) 1. Im Code der DLL werden die einzelnen Funktionen wie folgt ergänzt: _declspec (dllexport) DWORD MyFunction (...); 2. Build-Prozesses erstellt.dll und.lib-datei 3..LIB-Datei wird vom Programm gebraucht, welches die.dll benutzt (.LIB -> Welche Funktionen/Variablen?). 58

59 Iimplizites Linken (2/2) 4. Programm gibt beim Kompilieren die.lib-datei an. 5. Dem Programm selber, werden die Funktionen aus der DLL fast wie bei Schritt 1 importiert: _declspec (dllimport) DWORD MyFunction (...); 59

60 Explizites Linken (1/2) 1. Dieses geschieht durch Aufruf der folgenden Win32 API-Funktion und Angabe des DLL-Dateinamens. Die Dateierweiterung muss nicht angegeben werden. HINSTANCE bedeutet soviel wie HANDLE und ist noch ein Überbleibsel der 16-Bit Programmierung. HINSTANCE LoadLibrary (LPCTSTR lplibfilename) 60

61 Explizites Linken (2/2) 2. Dann wird die Einsprungsadresse einer Funktion in der DLL geholt: FARPROC getprocaddress ( HMODULE hmodule, LPCSTR lpprocname) Rückgabewert im Fehlerfall: NULL oder Entry Point hmodule: Rückgabewert von LoadLibrary() lpprocname: Name der Funktion per String, die man benutzen möchte 3. Letztendlich will man die DLL auch wieder schließen und den virtuellen Speicher dafür freigeben: 61 BOOL FreeLibrary (HINSTANCE hlibmodule)

62 Asynchrones I/O - Einleitung Prozesse werden am meisten mit Ein- und Ausgabe- Operationen (I/O-Operationen) ausgebremst. Lange Wartezeit für Lesekopf der Festplatte bzw. optischer Laser für CD/DVD Verzögerungen im Netzwerkverkehr (z.b. Sockets). Verzögerungen zwischen Festplatte und RAM 62

63 Asynchrones I/O - Einleitung Klassischer Ablauf: Programme arbeiten Thread- Synchron, d. h. Funktionen blockieren I/O-Operation wird beendet, dann liefert Funktion Return-Wert Schneller wäre es aber, während der I/O-Operation schon wieder andere Operationen auszuführen. Asynchrones I/O: Funktionen, die sofort einen Rückgabewert liefern, obwohl I/O-Operation noch nicht abgeschlossen 63

64 Asynchrones I/O - Einleitung Verschiedene Techniken für asynchrones I/O: 1. Multithreaded I/O: Mit Threads 2. Overlapped I/O: Aktueller Thread läuft nach I/O-Operation einfach weiter 3. Completion Routines (Extended I/O): Fast wie Punkt 2, aber mit Extended Functions, z.b. ReadFileEx, WriteFileEx. 64

65 Overlapped I/O 1. Der entsprechenden Funktion (z.b. CreateFile()) wird ein Flag namens FILE_FLAG_OVERLAPPED mitgegeben. 2. I/O-Operation soll nun asynchron laufen 3. Dann wird die Adresse einer allokierten Overlapped- Struktur übergeben. Folgende Funktionen unterstützen dies: 65 ReadFile() WriteFile() TransactNamedPipe() ConnectNamedPipe()

66 Overlapped I/O - Struktur Definition: typedef struct_overlapped { DWORD Internal; DWORD InternalHigh; DWORD Offset; DWORD OffsetHigh; HANDLE hevent; } OVERLAPPED Benachrichtigung ob I/O-Operation fertig entweder durch Events (hevent in Struktur) Filehandle Operationen wie z.b. ReadFile() liefern nun sofortig den Return-Wert FALSE. GetLastError() wird ERROR_IO_PENDING zurückgeben. 66

67 Overlapped I/O Funktionen Zur Abfrage (Polling), ob eine I/O-Operation fertig ist, wird diese Funktion benutzt: BOOL GetOverlappedResult ( HANDLE hfile, LPOVERLAPPED lpoverlapped, LPWORD lpcbtransfer, BOOL fwait) Eine laufende I/O-Operation abbrechen mit: BOOL CancelIO ( HANDLE hfile) 67

68 Overlapped I/O Beispiel Asynchrone I/O-Operation mittels Dateihandle synchronisieren: OVERLAPPED ov = { 0, 0, 0, 0, NULL /* Kein Event. */ }; HANDLE hf; DWORD nread; BYTE Buffer[1024]; /* Weitere Programmanweisungen... */ hf = CreateFile(..., FILE_FLAG_OVERLAPPED,... ); ReadFile(hF, Buffer, sizeof(buffer), &nread, &ov); /* Hier können jetzt weitere Anweisungen ausgeführt werden, die I/O-Operation arbeitet jetzt im Hintergrund. Achtung! nread hat keinen gültigen Wert! */ WaitForSingleObject(hF, INFINITE); /* nread wird jetzt mit gültigem Wert gefüllt: */ GetOverlappedResult(hF, &ov, &nread, FALSE); 68

69 Literaturverzeichnis Johnson M. Hart, Win32 System Programming Second Edition A Windows 2000 Application Developer s Guide, Copyright 2001 by Addison-Wesley 69

Win32 Systemprogrammierung

Win32 Systemprogrammierung Begrüßung Win32 Systemprogrammierung Fachhochschule Wiesbaden Lehrveranstaltung: Systemprogrammierung Prof. Dr. Weber Christian Geiler geilerd@arcor.de Daniel Pielok daniel_pielok@hotmail.de Fouad Aberkane

Mehr

Übungsbesprechung Blatt 3 Vorlesung Betriebssysteme I (WS 2018/19) Operating Systems And Middleware Group

Übungsbesprechung Blatt 3 Vorlesung Betriebssysteme I (WS 2018/19) Operating Systems And Middleware Group Übungsbesprechung Blatt 3 Vorlesung Betriebssysteme I (WS 2018/19) Operating Systems And Middleware Group 0. Zur Aufgabe 4 Was macht eine Shell? date wc Chart 2 Prozesserzeugung Chart 3 1. Prozesserzeugung

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 9 I/O (2) Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät UNIX I/O UNIX I/O: ähnlich wie Standard-I/O, jedoch File-Deskriptoren

Mehr

Nachdem die VM gestartet ist und sich darin angemeldet wurde, starten wir Eclipse.

Nachdem die VM gestartet ist und sich darin angemeldet wurde, starten wir Eclipse. Starten der Umgebung Nachdem die VM gestartet ist und sich darin angemeldet wurde, starten wir Eclipse. Wir wählen links ein Projekt aus öffnen dann unser Projekt und dort das Programm intro.c Sicherheitshalber

Mehr

Hilfsblatt für C++ Prüfungen im 5. Semester

Hilfsblatt für C++ Prüfungen im 5. Semester Hilfsblatt für C++ Prüfungen im 5. Semester Hilfsblatt für C++ Prüfungen im 5. Semester 1 Klassen 2 Win-32 Programmierung 3 Handles 3 Dateien, Files 3 Threads 3 Events 4 Funktionen 5 Einfache Funktionen

Mehr

Erklären Sie kurz die Begriffe Handle und Prozess/Thread im Kontext von Windows 2000.

Erklären Sie kurz die Begriffe Handle und Prozess/Thread im Kontext von Windows 2000. Aufgabe 1 Erklären Sie kurz die Begriffe Handle und Prozess/Thread im Kontext von Windows 2000. Im MSDN-Glossary findet sich zum Thema Handle die Erklärung (englisch): 1. A pointer to a pointer; that is,

Mehr

Dynamische Speicherverwaltung

Dynamische Speicherverwaltung Dynamische Speicherverwaltung Tim Dobert 17.05.2013 Inhaltsverzeichnis 1 Allgemeines zur Speichernutzung 2 2 Ziel und Nutzen 2 3 Anwendung in C 2 3.1 malloc............................... 3 3.2 calloc...............................

Mehr

Dynamische Speicherverwaltung

Dynamische Speicherverwaltung Dynamische Speicherverwaltung 1/ 23 Dynamische Speicherverwaltung Tim Dobert 17.05.2013 Dynamische Speicherverwaltung 2/ 23 Gliederung 1 Allgemeines zur Speichernutzung 2 Ziele und Nutzen 3 Anwendung in

Mehr

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz Patrick Schulz patrick.schulz@paec-media.de 29.04.2013 1 Einführung Einführung 2 3 4 Quellen 1 Einführung Einführung 2 3 4 Quellen Hello World in Java Einführung 1 public class hello_ world 2 { 3 public

Mehr

Windows - Registry. Einführung / Gefahren. Windows Registry - Gliederung. Registry Was ist das? Registry Aufbau. Programmierung.

Windows - Registry. Einführung / Gefahren. Windows Registry - Gliederung. Registry Was ist das? Registry Aufbau. Programmierung. Windows - Registry Einführung / Gefahren Informatikseminar am 14.07.03 Diana Reichwein Windows Registry - Gliederung Registry Was ist das? Registry Aufbau Programmierung Gefahren Windows Registry Registry

Mehr

G 5. Übung. G-1 Überblick. Besprechung 3. Aufgabe. Infos zur Aufgabe 5: fork, exec. Rechenzeiterfassung. Ü SoS I G.1

G 5. Übung. G-1 Überblick. Besprechung 3. Aufgabe. Infos zur Aufgabe 5: fork, exec. Rechenzeiterfassung. Ü SoS I G.1 G 5. Übung G 5. Übung G-1 Überblick Besprechung 3. Aufgabe Infos zur Aufgabe 5: fork, exec Rechenzeiterfassung G.1 G-2 Hinweise zur 5. Aufgabe G-2 Hinweise zur 5. Aufgabe Prozesse fork, exec exit wait

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

USBCAN.DLL. Manual. Microcomputersysteme. Version 1.2

USBCAN.DLL. Manual. Microcomputersysteme. Version 1.2 USBCAN.DLL Microcomputersysteme Manual Version 1.2 August 2004 Die in diesem Manual verwendeten Beschreibungen für Erzeugnisse, die ein eingetragenes Warenzeichen darstellen können, wurden nicht separat

Mehr

Erzeugen eines Threads mit der Windows-API

Erzeugen eines Threads mit der Windows-API Erzeugen eines Threads mit der Windows-API Ziel, Inhalt Wir erzeugen heute unter Windows einen zum main parallelen Arbeitsfaden (Thread) und beenden diesen auf sichere Art wieder Erzeugen eines Threads

Mehr

Betriebssysteme: UNIX-Operationen zur Prozesskontrolle

Betriebssysteme: UNIX-Operationen zur Prozesskontrolle Betriebssysteme: UNIX-Operationen zur Prozesskontrolle Betriebssysteme: UNIX-Operationen zur Prozesskontrolle WS 2016/17 8. November 2016 1/1 Prozesse und Programme Programm Verschiedene Repräsentationen

Mehr

(Ausnahmebehandlung)

(Ausnahmebehandlung) 16. Exceptions (Ausnahmebehandlung) 16-1 Objektorientierte Programmierung (Winter 2010/2011) Kapitel 16: Exceptions (Ausnahmebehandlung) Motivation Throw und Catch 16. Exceptions (Ausnahmebehandlung) 16-2

Mehr

Systemnahe Programmierung in C Übungen Jürgen Kleinöder, Michael Stilkerich Universität Erlangen-Nürnberg Informatik 4, 2011 U7.fm

Systemnahe Programmierung in C Übungen Jürgen Kleinöder, Michael Stilkerich Universität Erlangen-Nürnberg Informatik 4, 2011 U7.fm U7 POSIX-Prozesse U7 POSIX-Prozesse Prozesse POSIX-Prozess-Systemfunktionen Aufgabe 7 U7.1 U7-1 Prozesse: Überblick U7-1 Prozesse: Überblick Prozesse sind eine Ausführumgebung für Programme haben eine

Mehr

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes Variablen Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes v ist Stück im Speicher, der 4 Bytes lang ist Speicherzugriff? Über Adressen!

Mehr

Windows32 Systemprogrammierung

Windows32 Systemprogrammierung Hochschule RheinMain WS 2009/2010 Allgemeine Informatik (B.Sc.) Vertiefung Bachelor AI Windows32 Systemprogrammierung Eine Gegenüberstellung von Systemaufrufen unter Windows und Linux 1 von 27 Inhalte

Mehr

U7 POSIX-Prozesse U7 POSIX-Prozesse

U7 POSIX-Prozesse U7 POSIX-Prozesse U7 POSIX-Prozesse U7 POSIX-Prozesse Prozesse POSIX-Prozess-Systemfunktionen Aufgabe 6 U7.1 U7-1 Prozesse: Überblick U7-1 Prozesse: Überblick Prozesse sind eine Ausführumgebung für Programme haben eine

Mehr

Re-Initialisierung. Quantum verbraucht. standby. Ausführung beenden. waiting

Re-Initialisierung. Quantum verbraucht. standby. Ausführung beenden. waiting Aufgabe 1: Thread Scheduling unter Windows 2000 Erklären Sie den Ansatz zum Thread-Scheduling von Windows 2000! Was ist die kleinste vom Betriebssystem verwaltete Scheduling-Einheit? In welchen Scheduling-Zuständen

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:

Mehr

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin Fakutltät IV Technische Universität Berlin 5. Mai 2014 Inhaltsverzeichnis 1 2 3 4 5 6 7 Überblick Beispielprogramm in Java Beispielprogramm in C 1 2 3 4 5 6 7 Beispielprogramm in Java Beispielprogramm

Mehr

Naming. Fabian Sperber und Martin Ritter

Naming. Fabian Sperber und Martin Ritter Naming Fabian Sperber und Martin Ritter 28.05.2009 Inhalt Anforderungen Design IDL4-Interface Root-Service Sicherheit Client-API Beispiel Anforderungen Jedes Objekt im System über stringbasierten Bezeichner

Mehr

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN UNIX/Linux-Interprozesskommunikation 7. UNIX/Linux Pipes Wintersemester 2016/17 UNIX/Linux-IPC-Mechanismen Nachrichtenbasierter Informationsaustausch: 5. 1.

Mehr

PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes

PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes PThreads Prozesse und Threads Ein Unix-Prozess hat IDs (process,user,group) Umgebungsvariablen Verzeichnis Programmcode Register, Stack, Heap Dateideskriptoren, Signale message queues, pipes, shared memory

Mehr

C/C++-Programmierung

C/C++-Programmierung 1 C/C++-Programmierung Speicherverwaltung, 0, const Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Speicherverwaltung

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:

Mehr

Probeklausur Name: (c)

Probeklausur Name: (c) Einführung in die Praktische Informatik 30.1.2013 Probeklausur Name: Teil I: Datentypen (20 Punkte) Lösen sie die Probleme, indem sie die korrekten Lösungen ankreuzen bzw. in die vorgesehenen Freiräume

Mehr

Betriebssysteme I SS 2008 Hans-Georg Eßer, Hochschule München Zusammenfassung Seite 1

Betriebssysteme I SS 2008 Hans-Georg Eßer, Hochschule München Zusammenfassung Seite 1 /home/esser/daten/dozent/hs-muenchen-2008/folien/bs-ss2008-esser-14.odp Sep 19 14:20:18 amd64 sshd[20494]: Accepted rsa for esser from ::ffff:87.234.201.207 port 61557 Sep 19 14:27:41 amd64 syslog-ng[7653]:

Mehr

Was ist ein Prozess?

Was ist ein Prozess? Prozesse unter UNIX Definition Was ist ein Prozess? Zeitliche Abfolge von Aktionen Ein Programm, das ausgeführt wird Prozesshierachie Baumstruktur INIT-Prozess ist die Wurzel (pid=1) und wird beim Booten

Mehr

U23 - Shellcode. Twix Chaos Computer Club Cologne. Motivation Einstieg Der erste Shellcode Nullbytes, NOP Slides

U23 - Shellcode. Twix Chaos Computer Club Cologne.  Motivation Einstieg Der erste Shellcode Nullbytes, NOP Slides Twix e.v. http://koeln.ccc.de 2016-11-28 Überblick 1 Motivation Was ist Shellcode? Beispiel 2 Einstieg Erzeugen, Testen von Shellcode 3 Der erste Shellcode Strings in Shellcode 4 Nullbytes, NOP Slides

Mehr

Kontrollfragen Mikrocontroller Programmiersprache C H1203 Felix Rohrer

Kontrollfragen Mikrocontroller Programmiersprache C H1203 Felix Rohrer Block 1 1. Welcher Wert hat w? int w = 034; 28 (Dezimal) 034 wird als Octal interpretiert 34oct = 28dec 2. Wie lauten die Ergebnisse? unsigned int a = 3, b = 5, c = 7; unsigned int x, y, z; x = a == 3;

Mehr

Dateien (1) Datenströme

Dateien (1) Datenströme Dateien (1) Datenströme Standardbibliothek bietet sogenannte Datenströme (engl. Streams) Objekte, in die Informationen geschrieben oder von denen Daten gelesen werden können Zum Arbeiten mit Dateien benötigt

Mehr

Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Sommersemester 2014

Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Sommersemester 2014 Übungen zu Systemnahe Programmierung in C (SPiC) Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Sommersemester 2014 Inhalt Prozesse System-Schnittstelle Aufgabe 7 Einlesen von der Standard-Eingabe

Mehr

Programmieren in Java

Programmieren in Java Ein Projekt 2 Wiederholung: new-operator Werte nicht-primitiver Datentypen müssen mit new erzeugt werden Es gibt keine Möglichkeit primitive Daten mit new zu erzeugen Beispiele int[] myarray = new int[]

Mehr

DLLs (dynamic loaded libraries) mit MingW erstellen

DLLs (dynamic loaded libraries) mit MingW erstellen DLLs (dynamic loaded libraries) mit MingW erstellen Autor: Michel D. Schmid Datum: April 2, 2009 Contents 1 Einführung 1 1.1 Open-Source Tools.......................................... 1 2 Beispiel 1:

Mehr

Einführung in C. EDV1-04C-Einführung 1

Einführung in C. EDV1-04C-Einführung 1 Einführung in C 1 Helmut Erlenkötter C Programmieren von Anfang an Rowohlt Taschenbuch Verlag ISBN 3-4993 499-60074-9 19,90 DM http://www.erlenkoetter.de Walter Herglotz Das Einsteigerseminar C++ bhv Verlags

Mehr

Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming

Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming Task Wiederholung 1 System SysCalls (1) Wozu? Sicherheit Stabilität Erfordert verschiedene modes of execution: user mode privileged mode

Mehr

Klausur Betriebssysteme I

Klausur Betriebssysteme I Prof. Dr. Michael Jäger FB MNI Klausur Betriebssysteme I 14.3.2008 Bitte bearbeiten Sie die Aufgaben auf den Aufgabenblättern. Die Benutzung von Unterlagen oder Hilfsmitteln ist nicht erlaubt. Die Bearbeitungszeit

Mehr

Was machen wir heute? Betriebssysteme Tutorium 10. Frage 10.1.a. Frage 10.1.a

Was machen wir heute? Betriebssysteme Tutorium 10. Frage 10.1.a. Frage 10.1.a Was machen wir heute? Betriebssysteme Tutorium 10 Philipp Kirchhofer philipp.kirchhofer@student.kit.edu http://www.stud.uni-karlsruhe.de/~uxbtt/ Lehrstuhl Systemarchitektur Universität Karlsruhe (TH) 1

Mehr

Zusammenfassung für CS-Prüfung 3 Seite 1. CS-Zusammenfassung für Prüfung 3 vom Im Beispiel gibt es 3 Deadlocks

Zusammenfassung für CS-Prüfung 3 Seite 1. CS-Zusammenfassung für Prüfung 3 vom Im Beispiel gibt es 3 Deadlocks Zusammenfassung für CS-Prüfung 3 Seite 1 CS-Zusammenfassung für Prüfung 3 vom 24. 6. 2002 Deadlock Im Beispiel gibt es 3 Deadlocks Unterschied zwischen Blockieren, Verklemmen und Verhungenrn= -> Band 1

Mehr

Eine Mini-Shell als Literate Program

Eine Mini-Shell als Literate Program Eine Mini-Shell als Literate Program Hans-Georg Eßer 16.10.2013 Inhaltsverzeichnis 1 Eine Mini-Shell 1 1.1 Einen Befehl parsen......................... 2 1.2 Was tun mit dem Kommando?...................

Mehr

MMC/SD FAT 16 mit AVR und C

MMC/SD FAT 16 mit AVR und C MMC/SD FAT 16 mit AVR und C Die Bibliothek von Roland Riegel enthält einen kompletten FAT16 Zugriff auf MMC/SD Karten über den SPI eines µc. Anforderungen: - SPI oder 5 freie PINs am Controller - Für den

Mehr

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff Programmieren in C Speicher anfordern, Unions und Bitfelder Prof. Dr. Nikolaus Wulff Vergleich: Felder und Strukturen Felder müssen Elemente vom selben Typ enthalten. Strukturen können Elemente unterschiedlichen

Mehr

8. Massenspeicher und Dateisysteme

8. Massenspeicher und Dateisysteme Abb. 8.1: Größenverhältnisse bei einer Festplatte Abb. 8.2: Festplattencontroller und Laufwerk Abb. 8.3: FM- und MFM-Format des Bytes 01101001 Datenbit RLL 2,7-Code 000 00100 10 0100 010 100100 0010 00100100

Mehr

Betriebssysteme Teil 11: Interprozess-Kommunikation

Betriebssysteme Teil 11: Interprozess-Kommunikation Betriebssysteme Teil 11: Interprozess-Kommunikation 19.12.15 1 Übersicht Grundbegriffe Shared Memory Pipelines Messages Ports Sockets 2 Grundbegriffe Interprocess-Kommunikation = Austausch von Daten über

Mehr

Threads. Netzwerk - Programmierung. Alexander Sczyrba Jan Krüger

Threads. Netzwerk - Programmierung. Alexander Sczyrba Jan Krüger Netzwerk - Programmierung Threads Alexander Sczyrba asczyrba@cebitec.uni-bielefeld.de Jan Krüger jkrueger@cebitec.uni-bielefeld.de Übersicht Probleme mit fork Threads Perl threads API Shared Data Mutexes

Mehr

Einleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn

Einleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn C: Funktionen Philip Gawehn Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg Do., 22.05.2014 1 / 23 Gliederung

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa Peter Zeller AG Softech FB Informatik TU Kaiserslautern Speichermanagement Wie viel Speicher braucht ein Programm? Wofür wird Speicher benötigt? Wie ist der Speicher

Mehr

Erste Java-Programme (Scopes und Rekursion)

Erste Java-Programme (Scopes und Rekursion) Lehrstuhl Bioinformatik Konstantin Pelz Erste Java-Programme (Scopes und Rekursion) Tutorium Bioinformatik (WS 18/19) Konstantin: Konstantin.pelz@campus.lmu.de Homepage: https://bioinformatik-muenchen.com/studium/propaedeutikumprogrammierung-in-der-bioinformatik/

Mehr

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15 Vorwort... 15 1 Einstieg in die Welt von C 17 1.1 Die Sprache C... 17 1.2 Die C-Standardbibliothek... 18 1.3 Die nötigen Werkzeuge für C... 21 1.4 Übersetzen mit der Entwicklungsumgebung... 23 1.5 Übersetzen

Mehr

Kommunikation von Prozessen: Signale und Pipes

Kommunikation von Prozessen: Signale und Pipes Netzwerk-Programmierung Kommunikation von Prozessen: Signale und Pipes Alexander Sczyrba Michael Beckstette {asczyrba,mbeckste}@techfak.uni-bielefeld.de Kommunikation von Prozessen Parent- und Child-Prozess

Mehr

Ein- und Ausgabe mit Dateien

Ein- und Ausgabe mit Dateien Ein- und Ausgabe mit Dateien Edouard Lamboray Informatik I für D-ITET (2004) Ein- und Ausgabekonzepte in C und C++ fstream header Streamobjekt Files schreiben und lesen Argumente von main Vorbemerkungen

Mehr

Konzepte von Betriebssystemkomponenten Referat am Thema: Adressräume, Page Faults, Demand Paging, Copy on Write Referent: Johannes Werner

Konzepte von Betriebssystemkomponenten Referat am Thema: Adressräume, Page Faults, Demand Paging, Copy on Write Referent: Johannes Werner Konzepte von Betriebssystemkomponenten Referat am 24.11.2003 Thema: Adressräume, Page Faults, Demand Paging, Copy on Write Referent: Johannes Werner Gliederung Adressräume Page Faults Demand Paging Copy

Mehr

4.4 Prozesse. H. Weber, HS RM SS 2010 Systemprogrammierung Kap. 4.4 Seite 1 von 22

4.4 Prozesse. H. Weber, HS RM SS 2010 Systemprogrammierung Kap. 4.4 Seite 1 von 22 H. Weber, HS RM SS 2010 Systemprogrammierung Kap. 4.4 Seite 1 von 22 getpid Prozeß-Id ermitteln getppid Parent-Prozeß-Id ermitteln fork Duplizieren eines Prozesses exec-familie Prozeß-Überlagerung durch

Mehr

Aufgabenblatt 5 Musterlösung

Aufgabenblatt 5 Musterlösung Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 5 Musterlösung Vorlesung Betriebssysteme I Wintersemester 2017/18 Aufgabe 1: Implementierung von Threads (Bearbeitung zu Hause) Der größte Vorteil ist

Mehr

Grundlagen der Informatik 11. Zeiger

Grundlagen der Informatik 11. Zeiger 11. Zeiger Motivation Zeiger und Adressen Zeiger und Funktionen Zeiger und Arrays Dynamische Objekte Grundlagen der Informatik (Alex Rempel) 1 Motivation Dynamische Speicherverwaltung Oft müssen große

Mehr

Klausur Betriebssysteme I

Klausur Betriebssysteme I Prof. Dr. Michael Jäger FB MNI Klausur Betriebssysteme I 18.3.2011 Bitte bearbeiten Sie die Aufgaben auf den Aufgabenblättern. Die Benutzung von Unterlagen oder Hilfsmitteln ist nicht erlaubt. Die Bearbeitungszeit

Mehr

5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)

5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?) 5.1 Mehr Basistypen Außer int, stellt Java weitere Basistypen zur Verfügung. Zu jedem Basistyp gibt es eine Menge möglicher Werte. Jeder Wert eines Basistyps benötigt die gleiche Menge Platz, um ihn im

Mehr

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen

Mehr

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download Organisatorisches Folien (u.a.) gibt's auf der Lva-Homepage zum Download Diesen Mi erstes Tutorium (15-17) Ab nächster Woche montags 10-12 (jeweils im Computerraum) 17.10.2017 IT I - VO 3 1 Organisatorisches

Mehr

Teil 6: Strukturen und Unionen Gliederung

Teil 6: Strukturen und Unionen Gliederung Teil 6: Strukturen und Unionen Gliederung Strukturen Typdefinitionen Unionen Dynamische Speicherverwaltung Strukturen Typdefinitionen Unionen Dynamische Speicherverwaltung Strukturen 6.2 Strukturen Typdefinitionen

Mehr

Ein-/Ausgabe, Dateisystem. Kapitel 9: Ein-/Ausgabe. Programmieren in C für Elektrotechniker. Programmieren in C. Dateisystem. Programmieren in C

Ein-/Ausgabe, Dateisystem. Kapitel 9: Ein-/Ausgabe. Programmieren in C für Elektrotechniker. Programmieren in C. Dateisystem. Programmieren in C für Elektrotechniker Kapitel 9: Dateisystem, Dateisystem E/A-Konzept in UNIX und C UNIX (und damit auch C) verwendet Datenströme (streams) als Konzept zur Verbindung von Programmen mit E/A-Geräten und

Mehr

Beispiel / Übung: Prof. Dr. A. Christidis WS 2012/13

Beispiel / Übung: Prof. Dr. A. Christidis WS 2012/13 Beispiel / Übung: Erstellen Sie ein kurzes, plattform-unabhängiges C-Programm ( Konsolenanwendung ), das sich in die Reihe bereits gestarteter Kopien einordnet, sich nach 20 sec (Rechenzeit) abmeldet und

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine

Mehr

Exploit-Entwicklung mit Python

Exploit-Entwicklung mit Python Penetration Testing III Bachelor in Computer Science (BCS) 6. Semester Exploit-Entwicklung mit Python von Daniel Baier und Demian Rosenkranz 1 / 20 Gliederung Grundlagen Sicherheitslücken Prozess- und

Mehr

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen

Mehr

Praxis der Programmierung

Praxis der Programmierung Liste, Ausnahmefehler, Template-Funktionen und -Klassen Institut für Informatik und Computational Science Henning Bordihn 1 Stack als einfach verkettete Liste 2 Aufgabe 1 1. Kopieren Sie aus /home/rlehre/w13

Mehr

Programmierung und Angewandte Mathematik

Programmierung und Angewandte Mathematik Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden

Mehr

Verteilte Systeme - Java Networking (Sockets) 2 -

Verteilte Systeme - Java Networking (Sockets) 2 - Verteilte Systeme - Java Networking (Sockets) 2 - Prof. Dr. Michael Cebulla 06. November 2014 Fachhochschule Schmalkalden Wintersemester 2014/15 1 / 30 Michael Cebulla Verteilte Systeme Gliederung Wiederholung:

Mehr

Klausur. 2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben.

Klausur. 2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben. Programmieren bei Dr. Robert Heß TM&M1, IST1 und ET1 Anfang SS 2003 Klausur 1. Aufgabe (2 Punkte) Kodieren Sie folgende Dezimalzahlen in Binärzahlen um. Zeigen Sie den Rechenweg, die negative Zahl soll

Mehr

C-Crashkurs. Praktikum Systemmanagement und Sicherheit

C-Crashkurs. Praktikum Systemmanagement und Sicherheit C-Crashkurs Praktikum Systemmanagement und Sicherheit ZIELE DIESES KURSES 15.04.2014 Dipl.-Inf. M. Bohr C_Crashkurs 2 Compiler gcc verwenden geläufigste Datentypen in C kennen Fehlerbehandlung (ohne Ausnahmeklassen)

Mehr

2.1 Visual C Express installieren Visual C Express starten Visual C Express registrieren...

2.1 Visual C Express installieren Visual C Express starten Visual C Express registrieren... Datei: 5220_A02Inhalt.doc, Seite3 15. September 2010 Teil I Erste Schritte 1 Einleitung.... 9 1.1 Was Sie erwartet und was Sie nicht erwartet.... 9 1.2 Wie die Kapitel aufgebaut sind.... 10 1.3 Beispieldateien....

Mehr

Ein- und Ausgabe mit Dateien

Ein- und Ausgabe mit Dateien Ein- und Ausgabe mit Dateien Edouard Lamboray Informatik I für D-ITET (2004) Ein- und Ausgabekonzepte in C und C++ fstream header Streamobjekt Files schreiben und lesen Argumente von main 2 Vorbemerkungen

Mehr

Grundlagen Computer und Betriebssystem

Grundlagen Computer und Betriebssystem Grundlagen Computer und Betriebssystem InE1 M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1 Um was geht es? Aktuelle technische Systeme Industrie 4.0 (Digitalisierung) enthalten i.d.r.

Mehr

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free() Übungspaket 29 Dynamische Speicherverwaltung malloc() und free() Übungsziele Skript In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten

Mehr

Praktische Informatik 1

Praktische Informatik 1 Praktische Informatik 1 Imperative Programmierung und Objektorientierung Karsten Hölscher und Jan Peleska Wintersemester 2011/2012 Session 2 Programmierung Begriffe C/C++ Compiler: übersetzt Quellcode

Mehr

6 Speicherorganisation

6 Speicherorganisation 6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen Welche Arten von Anweisungen gibt es? Anweisungen

Mehr

6 Speicherorganisation

6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für

Mehr

4.2 Programmiersprache C

4.2 Programmiersprache C 4.2.1. Elementare Datentypen (signed) int, unsigned int, (signed) short (int), unsigned short (int), (signed) long (int), unsigned long (int) Elementare Datentypen für ganze Zahlen mit oder ohne Vorzeichen.

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Zusammenfassung Was ist eine Programmiersprache? Eine Sprache, die Formal eindeutig in Maschinenbefehle übersetzbar ist Für Menschen einfacher verständlich ist als Bytecode Zur Formulierung von Datenstrukturen

Mehr

Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt.

Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt. 432 433 434 435 Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt. 436 437 438 439 440 441 442 443 Die verkürzte

Mehr

Advanced Programming in C

Advanced Programming in C Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Einführung in C Bieniusa Software Entwicklung 1 2/ 50 Warum C in SE1? Meist verwendete Sprache weltweit Viele wichtige

Mehr

S7ComRaspi. Schönberger Thomas 2016 Schönberger Thomas

S7ComRaspi. Schönberger Thomas 2016 Schönberger Thomas Schönberger Thomas info@schoenbergerthomas.jimdo.com 2016 Schönberger Thomas Inhalt 1 Allgemein... 2 2 Voraussetzungen... 2 3 Lieferumfang... 2 4 S7Com... 3 4.1 S7Com Klasse... 3 4.2 Konstruktor S7Com...

Mehr

1 Fehler in Bibliotheksfunktionen. 1 Überblick. 2 Ziele der Aufgabe. Besprechung der 1. Aufgabe

1 Fehler in Bibliotheksfunktionen. 1 Überblick. 2 Ziele der Aufgabe. Besprechung der 1. Aufgabe U3 3. Übung U3 3. Übung U3-1 Fehlerbehandlung U3-1 Fehlerbehandlung Besprechung der 1. Aufgabe Fehlerbehandlung Infos zur Aufgabe 3: malloc-implementierung U3.1 Fehler können aus unterschiedlichsten Gründen

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 3 Typen und Speicherverwaltung Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Literatur (2) Kernighan and Ritchie, The

Mehr

Betriebssysteme Teil 3: Laufzeitsystem für Programme

Betriebssysteme Teil 3: Laufzeitsystem für Programme Betriebssysteme Teil 3: Laufzeitsystem für Programme 23.10.15 1 Literatur [3-1] Stack: http://fbim.fh-regensburg.de/~hab39652/pg1/skriptum/ ausdruecke/maschinenmodell.html [3-2] https://de.wikipedia.org/wiki/dynamischer_speicher

Mehr

Subprozesse in Python

Subprozesse in Python Subprozesse in Python Felix Döring, Felix Wittwer 24. April 2017 Python-Kurs Gliederung 1. Grundlagen Eigenschaften 2. Konstanten File Descriptoren Exceptions 3. Popen Klasse Wichtige Argumente 4. Popen

Mehr

Welche Informatik-Kenntnisse bringen Sie mit?

Welche Informatik-Kenntnisse bringen Sie mit? Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt

Mehr

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch darstellung Arbeiten mit darstellung werden im Computer durch (kleine) Zahlen dargestellt in C können im Datentyp char gespeichert werden, dieser umfasst ein Byte und gilt als Ganzzahltyp darstellung Arbeiten

Mehr

Grundlagen der OO- Programmierung in C#

Grundlagen der OO- Programmierung in C# Grundlagen der OO- Programmierung in C# Technische Grundlagen 1 Dr. Beatrice Amrhein Überblick Visual Studio: Editor und Debugging Die Datentypen Methoden in C# Die Speicherverwaltung 2 Visual Studio 3

Mehr

Filesystemserver. SDI Gruppe Juni Till Schuberth / Victor van Santen. Filesystemserver: Till Schuberth und Victor van Santen SDI6

Filesystemserver. SDI Gruppe Juni Till Schuberth / Victor van Santen. Filesystemserver: Till Schuberth und Victor van Santen SDI6 Filesystemserver SDI Gruppe 6 04. Juni 2009 Till Schuberth / Victor van Santen 1 Überblick Einführung Entwurfsentscheidungen Beschreibung der Server Beispielimplementierungen für L4 Schnittstellenbeschreibung

Mehr

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Informatik Vorlesung 08 Pointer (Dynamisch) 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Pointer (Zeiger) Dynam. Speicher Bisher: Speicherbedarf muss

Mehr

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online Organisatorisches Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online Nächste Woche VO und UE am Dienstag, den 30.10.! UE im CR IL/IT Wissensüberprüfung am Zettel 25.10.2018 IT I - VO 3 1 Organisatorisches

Mehr