Michael Golm, Universität Erlangen-Nürnberg, IMMD 4, 2000/ / Tafelübung 10

Ähnliche Dokumente
J.1 Überblick. Prototyp. Besprechung 6. Aufgabe (timed) (die 5. Aufgabe wird erst in der nächsten Woche besprochen) select. Shared Memory.

System-Programmierung 11: Terminals. CC BY-SA, Thomas Amberg, FHNW (soweit nicht anders vermerkt)

Operating Systems Principles. Event Queue

Michael Golm, Universität Erlangen-Nürnberg, IMMD 4, 1999/ / Tafelübung 5. Prozeß2 Prozeß3. Kernel

Tafelübung zu BS 1. Prozesse verwalten

Fortgeschrittene I/O

U3 UNIX-Signale U3 UNIX-Signale

fork () Hans-Georg Eßer, Hochschule München Betriebssysteme I, SS Prozesse (2/2) Folie 4

# Socketprogrammierung

Embedded Software. Auslesen eines Smart-Meter mit dem Raspberry Pi. Stefan Bücker, Tim Hebbeler Fachbereich für Elektrotechnik und Informatik FB2

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

FILE *fp; char fname[100];... fp = fopen (fname, rb ); if( fp == NULL ) { perror( fopen );... } // Fehlernachricht auf letzten Fehler, der aufkam

Klausur Betriebssysteme I

U7 POSIX-Prozesse U7 POSIX-Prozesse

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

8.3 Sonstiges/Signalbehandlung

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

Was ist ein Prozess?

Probeklausur zu Systemnahe Software II SS 2012 Dr. Andreas Borchert mit Markus Schnalke

Ausgewählte Themen. In diesem Teil werden ausgewählte Themen vorgestellt: Fehlerbehandlung Dämonen Zombies. Inhalt. 1. Fehlerbehandlung...

E-/A-Funktionalität nicht Teil der Programmiersprache

Linux Prinzipien und Programmierung

5. Dateioperationen. Tafelübung zu BSRvS1. Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

Betriebssysteme: Konzepte, Dienste, Schnittstellen (Betriebssysteme und betriebssystemnahe Programmierung)

UNIX/Linux Lösung. Mär 14, 17 20:40 Seite 1/6. Prozeßsynchronisation (was ist das?, wo kommt es vor?, Beispiel?):

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

Netzwerkprogrammierung mit C++

Übungen zu Systemprogrammierung 2 (SP2)

Kernel. Prototyp. Besprechung 3. Aufgabe. POSIX-Signale. tms Datenstruktur. Betriebssystem erfasst die Rechenzeit der Prozesse. Prozess3 (SIGUSR1)

Vorlesung Betriebssysteme I

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

Aufgabenblatt 5 Musterlösung

Interprozesskommunikation

Input, Output, Dateien

Systemnahe Programmierung in C/C++

Fachhochschule Frankfurt am Main Fachbereich 2: Informatik WS 2008/2009. Grundkurs Unix. Teil 3: Unix Prozesssystem. Dr.

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

Threads. Foliensatz 8: Threads Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2015

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

Prozesse, Logs und Systemverwaltung

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Prozesse, Logs und Systemverwaltung

Homogene Multi-Core-Prozessor-Architekturen

Beispiel Block 2 Stream I/O Parallele Prozesse: fork, exec und wait Interprozesskommunikation mit Unnamed Pipes

Übungen zu Systemprogrammierung 2 (SP2)

Betriebssysteme (BS)

Systemprogrammierung I - Aufgaben zur Erlangung der Klausurzulassung für Informatiker und Wirtschaftsinformatiker

Einführung in UNIX 1. Das Betriebssystem UNIX ist fähig, mehrere Aufgaben scheinbar gleichzeitig zu erledigen. Dies wird mit Multitasking bezeichnet.

Geräteverwaltung: Einführung

Tafelübung zu BS 5. Dateioperationen

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

Klausur Systemprogrammierung I Februar Klausur Systemprogrammierung I Februar 2001

FH Frankfurt am Main WS 2007/2008. Unix-Praktikum

U6 POSIX-Prozesse. U6-1 Prozesse: Überblick. U6-1 UNIX-Prozesshierarchie. U6-2 POSIX Prozess-Systemfunktionen. Prozesse

Übungen zu Systemprogrammierung I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2003 C-Uebung1.fm

C und Linux HANSER. Martin Gräfe. Die Möglichkeiten des Betriebssystems mit eigenen Programmen nutzen. Z., erweiterte Auflage

Lösung Übungszettel 6

Ein- und Ausgabeumlenkung

Programmiersprachen Einführung in C

Klausur Betriebssysteme I

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

Übungen zur Systemprogrammierung 1 Michael Golm, Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4,

Prozesse in Unix

SelfLinux Prozessverwaltung

Unixoide Betriebssysteme (Unix, Linux, OS X)

Strukturen können wie normale Variablen an Funktionen übergeben werden. Strukturen können auch Ergebnis einer Funktion sein

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

Implementieren von Klassen

Klausur Betriebssysteme

Kernel. G.2 Rechenzeiterfassung (2) G.2 Rechenzeiterfassung. G.1 Überblick. 1 Kommunikation zwischen Prozessen. Prototyp. Besprechung 3.

Einführung in die Programmiersprache C

UNIX - LINUX. Prozesse. Überblick. Prozesse: Start. Prozesszustände. Prozesskontrollblock (Prozesssteuerblock) Prozesszustände

Betriebssysteme (BS)

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

Eine Mini-Shell als Literate Program

Strings (Zeichenketten)

Unixoide Betriebssysteme (Unix, Linux, OS X)

Kommunikation von Prozessen: Signale und Pipes

Arbeiten mit der Shell Teil 2

182. stdio stdio. Eingabe. Ausgabe. Typisch für Zeileneingabe und Analyse: #include <stdio.h>

Übungen zu Systemprogrammierung 2 (SP2)

Übungen zu Systemprogrammierung 2 (SP2)

Lösung zur Praktikumsaufgabe 1

Betriebssysteme (BS) Inhalt. Prozesse. Olaf Spinczyk.

Der Standard-Editor vi

Lösung zur Praktikumsaufgabe 9

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

Tafelübung zu BS 4. Dateioperationen

Programmieren in C/C++ und MATLAB

I.2 Transparenz beim RPC

Kernel. Prototyp. Besprechung 3. Aufgabe (printdir) Rechenzeiterfassung von Prozessen. POSIX-Signale. tms Datenstruktur

Kommunikationsmuster (T) Interprozesskommunikation (T) Kommunikation über Pipes (P) Parserspezifikation und -generierung (P)

Transkript:

10. Tafelübung select (BSD, XPG4) Terminaltreiber konfigurieren (tcgetattr, tcsetattr) Pseudoterminals 113 select Prozesse die mit Pipes und Sockets arbeiten, müssen oft von verschiedenen Filedeskriptoren lesen bzw. schreiben Kommunikationskanäle Prozess fd0 fd1 fd2 diese Lese- bzw. Schreiboperationen können blockieren Lösungsmöglichkeiten Angabe von O_NOBLOCK bei open; Problem: aktives Warten fork eines Prozesses pro Filedeskriptor; Problem: teuer Verwenden von select() 114

select Prototyp #include <sys/time.h> #include <sys/types.h> int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout); void FD_CLR(int fd, fd_set *fdset); int FD_ISSET(int fd, fd_set *fdset); void FD_SET(int fd, fd_set *fdset); void FD_ZERO(fd_set *fdset); blockiert so lange, bis einer der Filedeskriptoren bereit ist oder bis die timeout-zeit abgelaufen ist timeout kann auch NULL sein (endlos warten) 115 select select markiert FD als lesbar aber read gibt 0 zurück? andere Seite hat die Verbindung geschlossen 116

Prozeßgruppen jeder Prozeß gehört zu einer Prozeßgruppe; diese wird an Kinder vererbt Signale können an alle Prozesse einer Gruppe geschickt werden Ermitteln der Prozeßgruppe des eigenen Prozesses (POSIX): pid_t getpgrp(void); Beitreten oder Erzeugen einer Prozeßgruppe (POSIX): #include <sys/types.h> int setpgid(pid_t pid, pid_t pgid); ein Prozeß der Gruppe ist der Prozeßgruppenführer (process group leader) (pid == pgid) 117 Sessions eine Session enthält eine Vordergrund-Prozeßgruppe und mehrere Hintergrundprozeßgruppen einer Session kann ein Steuerterminal zugeordnet sein eine Session besitzt einen Session-Leader; dieser bekommt das SIGHUP vom Terminal zugestellt die Vordergrundgruppe bekommt die Jobcontrol-Signale (SIGINT, SIGQUIT, SIGTSTP) vom Terminal zugestellt Login Shell Session-Leader Hintergrund- Prozeßgruppe Prozeß1 Prozeß2 Hintergrund-Prozeßgruppe Prozeß3 Prozeß4 Vordergrund-Prozeßgruppe Session SIGHUP Controlling Terminal SIGINT, SIGQUIT, SIGTSTP (nach Stevens) 118

Sessions mehrere Prozeßgruppen können zu einer Session gehören Erzeugen einer neuen Session #include <sys/types.h> pid_t setsid(void); wenn Prozeß ein Prozeßgruppenleader ist: Fehler wenn Prozeß kein Prozeßgruppenleader ist: neue Session wird erzeugt mit Prozeß als Session Leader neue Prozeßgruppe wird erzeugt mit Prozeß als Prozeßgruppenleader Prozeß hat kein Controlling Terminal mehr 119 Sessions Zuordnen eines Controlling Terminals zu einer Session POSIX spezifiziert nicht, wie einer Session ein Controlling Terminal zugeordnet wird SVID: nächstes geöffnetes Terminal wird automatisch Controlling Terminal BSD4.3: ioctl()-aufruf mit TIOCSCTTY Zugriff auf Controlling Terminal open("/dev/tty",...) Setzen/Abfragen der Vordergrundprozeßgruppe: tcsetpgrp(), tcgetpgrp() 120

Ermitteln von pgid/sid/tty mit ps > xemacs & > ps -ej less > ps -ej gibt Job-Informationen aus wählt alle Prozesse aus PID PGID SID TTY TIME CMD 1 0 0? 00:00:07 init 2 1 1? 00:00:01 kflushd 3 1 1? 00:00:00 kpiod 4 1 1? 00:00:08 kswapd 17930 17930 17930 pts/0 00:00:00 tcsh 17945 17945 17930 pts/0 00:00:48 xemacs 20093 20093 20093 ttyp0 00:00:00 gdb 20260 20260 20093 ttyp0 00:00:00 ryash 30339 30339 30339 tty1 00:00:00 getty 17830 17830 17830 pts/2 00:00:00 tcsh 17889 17889 17930 pts/0 00:00:00 ps 17890 17889 17930 pts/0 00:00:00 less gemeinsame Session gemeinsame Prozeßgruppe 121 Pseudo-Terminals Problem: ein Rechner hat üblicherweise nur ein physikalisches Terminal (die Console) wenn der Rechner einen Remote-Login-Dienst anbietet oder ein Fenstersystem (z.b. X11) besitzt, benötigt er mehrere "virtuelle" Terminals neben echten Terminals (/dev/console, /dev/ttys0,...) stellen SVR4 und BSD4.4-Systeme sog. Pseudoterminals zur Verfügung diese verhalten sich wie Terminals, können aber von Programmen mit Eingaben versorgt, bzw. gelesen werden Prozeß, welcher Terminal mit Ein- Ausgaben versorgt Prozeß, welcher Terminal benötigt Master Slave 122

Pseudoterminals BSD-Bibliotheksfunktionen openpty, forkpty #include <pty.h> int openpty ( int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp) öffnet Pseudoterminal und gibt Master- und Slave-Filedescriptor in amaster bzw. aslave zurück falls name!=null: Dateiname des Slave-pty wird in name abgespeichert Vorsicht: falls name nicht ausreichend groß ist, kann ein Pufferüberlauf auftreten (Sicherheitsproblem) falls termp!=null: Terminaleinstellungen werden für Slave verwendet falls winp!=null: Slave-pty wird auf entspr. Fenstergröße eingestellt 123 Pseudoterminals #include <pty.h> int forkpty ( int *amaster, char *name, struct termios *termp, struct winsize *winp) führt dieselben Aktionen aus wie openpty(), und zusätzlich Erzeugt neuen Prozeß (fork()) Kind erzeugt neue Session (setsid()) Kind öffnet Pseudoterminal-Slave (Slave wird zum Controlling-Terminal) dup2() des Slave-Filedeskriptors nach stdin, stdout, stderr openpty und forkpty sind in libutil.a implementiert, d.h. Compiler (Linker) muß mit -lutil aufgerufen werden 124

Terminaltreiber konfigurieren #include <termios.h> int tcgetattr(int fildes, struct termios *termios_p); int tcsetattr( int fildes, int optional_actions, const struct termios *termios_p); fildes: Filedeskriptor des Terminals termios_p: Zeiger auf termios-struktur struct termios { tcflag_t c_iflag; /* input flags */ tcflag_t c_oflag; /* output flags */ tcflag_t c_cflag; /* control flags */ tcflag_t c_lflag; /* local flags */ cc_t c_cc[nccs]; /* control characters */ }; RS-232 c_cflag Terminal c_lflag Eingabe c_iflag c_oflag Benutzer Ausgabe 125 Terminaltreiber konfigurieren c_iflag: z.b. ICRNL: Umwandlung von \r in \n (POSIX) c_oflag: z.b. ONLCR: \n nach \r\n (SVID und BSD4.3) c_cflag: z.b. PARENB: parity enable (POSIX) c_lflag: z.b. ECHO: Zeichen auf lokalem Terminal ausgeben (POSIX) ISIG: spezielle Eingabezeichen erzeugen Signale ICANON: kanonische Eingabeverarbeitung (auch als cooked-mode bekannt) Terminaltreiber puffert Eingaben zeilenweise nicht-kanonische Eingabeverarbietung(raw-mode): Verhalten hängt von c_cc[vmin] und c_cc[vtime] ab (siehe Manual) 126