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



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

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

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Dämon-Prozesse ( deamon )

English. Deutsch. niwis consulting gmbh ( manual NSEPEM Version 1.0

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Python SVN-Revision 12

Programmentwicklung ohne BlueJ

Führen Sie zum Einstieg in die Materie einige Systemdiagnosen durch. Benutzen Sie dabei winmsd.exe.

1 Vom Problem zum Programm

Zählen von Objekten einer bestimmten Klasse

Professionelle Seminare im Bereich MS-Office

Installation mit Lizenz-Server verbinden

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Wie man eigene Programme erstellt

! " # $ " % & Nicki Wruck worldwidewruck

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Anleitung über den Umgang mit Schildern

Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging

Konzept zur Push Notification/GCM für das LP System (vormals BDS System)

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Anleitung zur Erstellung einer Batchdatei. - für das automatisierte Verbinden mit Netzlaufwerken beim Systemstart -

Übung: Verwendung von Java-Threads

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Übungen Programmieren 1 Felix Rohrer. Übungen

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

Objektbasierte Entwicklung

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren

So erstellen Sie nützliche Beschreibungen zu Ihren Tradingdaten

Einführung in die Programmierung (EPR)

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Whitepaper. Produkt: combit Relationship Manager. SQL Server 2008 R2 Express um Volltextsuche erweitern. combit GmbH Untere Laube Konstanz

Windows 10 > Fragen über Fragen

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Windows 8/8.1 RecImg-Manager

4D Server v12 64-bit Version BETA VERSION

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

Logging, Threaded Server

Icinga Teil 2. Andreas Teuchert. 25. Juli 2014

Outlook Vorlagen/Templates

Übungen zu C++ Kapitel 1

DER WING COMMANDER CD³² GUIDE

Bauteilattribute als Sachdaten anzeigen

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Was meinen die Leute eigentlich mit: Grexit?

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Hilfedatei der Oden$-Börse Stand Juni 2014

Das neue Volume-Flag S (Scannen erforderlich)

Zwischenablage (Bilder, Texte,...)

Native Zeichenketten (C-Strings)

Windows 7 Winbuilder USB Stick

SEMINAR Modifikation für die Nutzung des Community Builders

Standard Daten-Backup-Script

ZENTRALER INFORMATIKDIENST DER JOHANNES KEPLER UNIVERSITÄT LINZ Abteilung Kundendienste und Dezentrale Systeme. PPP für Windows 3.

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

DB2 Kurzeinführung (Windows)

Whitepaper. Produkt: List & Label 16. List & Label 16 unter Linux/Wine. combit GmbH Untere Laube Konstanz

Softwareupdate-Anleitung // AC Porty L Netzteileinschub

Linux Prinzipien und Programmierung

Version 0.3. Installation von MinGW und Eclipse CDT

Wie halte ich Ordnung auf meiner Festplatte?

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Adobe Photoshop. Lightroom 5 für Einsteiger Bilder verwalten und entwickeln. Sam Jost

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

GEONET Anleitung für Web-Autoren

Informatik Grundlagen, WS04, Seminar 13

Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken?

Ingenieurinformatik Diplom-FA (Teil 2, C-Programmierung)

Betriebssysteme. Dipl.-Ing.(FH) Volker Schepper

C++ Tutorial: Timer 1

Umbenennen eines NetWorker 7.x Servers (UNIX/ Linux)

SSH Authentifizierung über Public Key

2. Semester, 2. Prüfung, Lösung

SCHNELLEINSTIEG ZUM TOOL NODEBUILDER

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

S/W mit PhotoLine. Inhaltsverzeichnis. PhotoLine

Skripte. Beispiel. M. Fyta Computergrundlagen 73/93

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Anleitung zum Prüfen von WebDAV

Access und die andern (Office) Programme. Armin Hess

Stecken Sie Ihren USB Stick oder Ihre externe USB Festplatte in den USB Steckplatz des Sinus 154 DSL SE.

Command-Line. Line-Tools und Unix-Umgebungen Umgebungen unter Windows

Mobile-Szenario in der Integrationskomponente einrichten

1CONFIGURATION MANAGEMENT

MetaQuotes Empfehlungen zum Gebrauch von

Stand: Adressnummern ändern Modulbeschreibung

Z- module telematic I. Software Overview Johannes Schütt

Wie man Registrationen und Styles von Style/Registration Floppy Disketten auf die TYROS-Festplatte kopieren kann.

FAQ Verwendung. 1. Wie kann ich eine Verbindung zu meinem virtuellen SeeZam-Tresor herstellen?

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Der Begriff Cloud. Eine Spurensuche. Patric Hafner geops

So funktioniert die NetWorker 7.5 Eigenschaft zum Sichern umbenannter Verzeichnisse ( Backup renamed Directories )

Jederzeit Ordnung halten

Applet Firewall und Freigabe der Objekte

Transkript:

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, a variable that contains the address of another variable, which in turn contains the address of the desired object. In certain operating systems, the handle points to a pointer stored in a fixed location in memory, whereas that pointer points to a movable block. If applications start from the handle whenever they access the block, the operating system can perform memory management tasks such as garbage collection without affecting the applications. 2. Any token that an application can use to identify and access an object such as a device, a file, a window, or a dialog box. 3. One of several small squares displayed around a graphical object in a drawing application. The user can move or reshape the object by clicking on a handle and dragging. Jede einzelne Definition enthält ein paar wichtige Begriffe, aber eigentlich steht nur in 2. die wahre Kernbedeutung: ein Handle ist ein Verweis auf ein Betriebssystemobjekt. Dabei gibt es verschiedenste Kategorien, von I/O über Speichermanagement bis hin zur graphischen Oberfläche. Bezüglich Prozess äußert sich die gleiche Quelle: A running application that consists of a private virtual address space, code, data, and other operatingsystem resources, such as files, pipes, and synchronization objects that are visible to the process. A process also contains one or more threads that run in the context of the process. Und Thread : A process that is part of a larger process or application. A thread can execute any part of an application's code, including code that is currently being executed by another thread. All threads share the virtual address space, global variables, and operating-system resources of their respective processes. Diese beiden Definitionen sind treffend und kurz, daher will ich sie in ihrer ganzen Schönheit stehen lassen. Aufgabe 2 Machen Sie sich mit dem Microsoft Developer Network (MSDN) vertraut. Lesen Sie die Online-Dokumentation der folgenden Funktionen der Win32-API: - CreateFile, ReadFile, WriteFile, CloseFile - GetStdHandle, GetLastError, CloseHandle Die erste Gruppe von Befehlen erlaubt den Zugriff auf Dateien. Diese umfassen unter Windows 2000: Konsolen Kommunikationsmittel Verzeichnisse (nur lesend) Datenträger Dateien Mailslots Pipes Die Identifizierung erfolgt stets über Handles. Ich konnte die Funktion CloseFile nicht ausfindig machen, die MSDN empfiehlt für das Schließen einer Datei den Befehl CloseHandle. GetStdHandle liefert ein Handle für das Standardeingabe-, Standardausgabe- oder Standardfehler-Gerät, was in der Regel die Tastatur und der Monitor sind. Über GetLastError kann der letzte Fehler des jeweiligen Threads erfragt werden. Dieser Befehl findet z.b. Anwendung in Aufgabe 4. www.stephan-brumme.com Betriebssysteme I Seite 1 von 5

Aufgabe 3 CreateProcess erlaubt die Erzeugung eines neuen Prozesses in einem eigenem Prozessraum. Dabei sind extrem viele Parameter einstellbar, von der Kommandozeile über Sicherheitseinstellungen bis hin zu Prioritätsstufen. Der UNIX-nahe Befehl execv (mit seinen Derivaten) führt den neuen Prozess im Speicher des aufrufenden Prozesses auf. Bei erfolgreichem Aufruf wird deshalb in diesem kleinen Programm nichts auf dem Bildschirm ausgegeben: _execv( CoolProgram.exe, -? ); cout << Launched CoolProgram << endl; Um dieses Verhalten zu umgehen und CreateProcess zu emulieren, wird in UNIX der Befehl fork eingesetzt. Er kopiert einen Prozess, der Aufrufer erhält dabei die PID des Kindes, das Kind hingegen NULL zurückgeliefert. Im Kind kann dann exec ausgeführt werden ohne dass der Vaterprozess davon berührt wird. Aufgabe 4 Sowohl das Auslesen der Datei als auch das Abfangen eventuell auftretender Fehler ist nicht weiter aufwändig und kann sehr schnell implementiert werden. Etwas komplizierter ist die Bedeutung der Parameter von CreateProcess, da sich die MSDN sehr geschickt weigert, ein erklärendes Beispiel zu zeigen. Die allgemeine Syntax von CreateProcess lautet: BOOL CreateProcess(LPCTSTR lpapplicationname, LPTSTR lpcommandline, LPSECURITY_ATTRIBUTES lpprocessattributes, LPSECURITY_ATTRIBUTES lpthreadattributes, BOOL binherithandles, DWORD dwcreationflags, LPVOID lpenvironment, LPCTSTR lpcurrentdirectory, LPSTARTUPINFO lpstartupinfo, LPPROCESS_INFORMATION lpprocessinformation); wobei der Rückgabewert FALSE (= 0) einen Fehler symbolisiert. Eine Eigenschaft dieses Befehls ist, dass man lpapplicationname auf NULL setzen kann, wenn der Name des zu startenden Programms zu Beginn von lpcommandline steht. Somit kann ich mir das Parsen der Shell- Datei stark vereinfachen und jede Zeile direkt als lpcommandline deuten. Ich fordere keine besonderen Sicherheitseinstellungen für die aufgerufenen Programme, sie sollen die für die Shell geltenden Rechte und Einschränkungen haben. Für den Code bedeutet das, dass lpprocessattributes und lpthreadattributes auf NULL gesetzt werden. Die Handles sollen nicht vererbt werden (binherithandles auf FALSE), sowohl die Priorität als auch die Umgebungsvariablen entsprechen den Standardwerten (dwcreationflags auf 0, lpenvironment auf NULL). Das Verzeichnis, in dem die Prozesse ausgeführt werden, entspricht dem aktuellen Verzeichnis (lpcurrentdirectory ist ebenfalls NULL). Da ich keine weiteren speziellen Einstellungen fordere, ist lpstartupinfo mit Nullen gefüllt, lediglich das Feld cb enthält die Größe der StartupInfo-Struktur in Bytes. lpprocessinformation benötigt auch keine Einstellungen, ebenfalls sind alle Werte mit Null überschrieben worden. www.stephan-brumme.com Betriebssysteme I Seite 2 von 5

Schlussendlich steht folgender Befehl in meinem Programm: CreateProcess(NULL, // application name is first token of the command line cmdline, // contains application name, too NULL, // default process security settings NULL, // default thread security settings FALSE, // process DOES NOT inherit from minshell.exe NULL, // child has no access to minshell.exe NULL, // no special environment NULL, // same directory &StartupInfo, &ProcessInfo); Bei erfolgreicher Ausführung von CreateProcess könnte die Shell sofort weiterarbeiten. Laut Aufgabenstellung soll aber solange gewartet werden, bis der Kindprozess beendet wurde. Ich erreiche dies, indem ich den Handle des Kindprozesses überwache und solange warte, bis er freigegeben wurde: // wait until process terminates and clean up WaitForSingleObject(ProcessInfo.hProcess, INFINITE); www.stephan-brumme.com Betriebssysteme I Seite 3 von 5

Quelltext /////////////////////////////////////////////////////////// // Betriebssysteme I - Windows 2000 // Lab 2: A simple command shell // // author: Stephan Brumme // last changes: November 20, 2001 // Win32 API #include <windows.h> // console output (printf etc.) #include <stdio.h> int main(int argc, char* argv[]) // file handle to access the shell commands FILE* fd; // at most 512 characters per line const int MAX_LINE_LEN = 512; char cmdline[max_line_len+1]; // a shell command file must be supplied if (argc > 2) printf("usage: \"MinShell ShellCommands.txt\"\n"); printf("or just \"MinShell\" if you want to type in the commands.\n"); // wrong parameter count return 1; if (argc == 2) // open file fd = fopen(argv[1], "r"); if (fd == NULL) printf("cannot find %s.\n", argv[1]); // failed return 2; else // read from console fd = stdin; printf("press [Return] to quit.\n\n"); // read and execute shell commands for (;;) // prompt printf("minshell$ "); // read a single command, abort if [Return] was pressed if (fgets(cmdline, MAX_LINE_LEN, fd) == NULL cmdline[0] == 10) printf("\n... done\n"); return 0; www.stephan-brumme.com Betriebssysteme I Seite 4 von 5

// strip CR-LF char* pcmdline = cmdline; while(*pcmdline!= 0x0A && *pcmdline!= 0x0D && *pcmdline!= 0x00) pcmdline++; *pcmdline = 0x00; // show shell command (if not typed in from console) if (fd!= stdin) printf("%s\n", cmdline); // fill in start-up info values STARTUPINFO StartupInfo; ZeroMemory(&StartupInfo, sizeof(startupinfo)); StartupInfo.cb = sizeof(startupinfo); // CreateProcess returns some process information PROCESS_INFORMATION ProcessInfo; ZeroMemory(&ProcessInfo, sizeof(processinfo)); if (CreateProcess(NULL, // application name is first token of the command line cmdline, // contains application name, too NULL, // default process security settings NULL, // default thread security settings FALSE, // process DOES NOT inherit from minshell.exe 0, // child has no access to minshell.exe NULL, // no special environment NULL, // same directory &StartupInfo, &ProcessInfo) == 0) // error handling const int MAX_ERROR_LEN = 255; char strerror[max_error_len+1]; DWORD nerror = GetLastError(); FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM FORMAT_MESSAGE_IGNORE_INSERTS, NULL, nerror, 0, strerror, MAX_ERROR_LEN, NULL); printf("failed to create \"%s\": (%d) %s\n", cmdline, nerror, strerror); // failed to execute a program // return 3; // wait until process terminates and clean up WaitForSingleObject(ProcessInfo.hProcess, INFINITE); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); // successful return 0; www.stephan-brumme.com Betriebssysteme I Seite 5 von 5