Treiber Einfache Gerätetreiber

Größe: px
Ab Seite anzeigen:

Download "Treiber Einfache Gerätetreiber"

Transkript

1 Treiber Einfache Gerätetreiber Dr.-Ing. Matthias Sand Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2010/2011 Treiber Einfache Gerätetreiber 1/

2 Übersicht Inhalt: Das Geräteprinzip, Registrieren und Entfernen, wichtige Treiberfunktionen: open, release (AKA close), read, write, ioctl, poll. Treiber Einfache Gerätetreiber 2/

3 Das Geräteprinzip Geräte werden durch spezielle Dateien im Dateisystem repräsentiert (Device-Nodes), zwei Arten: Block-Devices und Character-Devices, aus Sicht der Anwendungsprogramme kein (wesentlicher) Unterschied zu Dateien, die von Dateisystem-Interaktionen her bekannten Systemaufrufe können benutzt werden (open(2), read(2) etc.). N.B. Netzwerkgeräte werden nicht auf diese Weise ins Dateisystem integriert! (Kommt später...) Treiber Einfache Gerätetreiber 3/

4 Geräte-Knoten Eigenschaften Jeder Geräte-Knoten trägt Informationen über: den Typ des Geräts (Character oder Block), die Major-Nummer des Geräts, die Minor-Nummer des (Unter-)Geräts, (außerdem die üblichen Inode-Informationen wie Eigentümer, Zugriffsrechte etc.). Siehe auch stat(2). Über die Major-Nummer wird beim Zugriff der zuständige Treiber ausgewählt, die Minor-Nummern kann der Treiber nach eigenen Erfordernissen verwalten (auch ignorieren). Treiber Einfache Gerätetreiber 4/

5 Geräte-Knoten anlegen Anlegen Als root mit mknod(1), z.b.: $ mknod / dev /dhwk c $ l s l / dev /dhwk crw r r 1 r o o t r o o t 240, :55 / dev /dhwk $ Treiber Einfache Gerätetreiber 5/

6 Exkurs: Geräteknoten-Verwaltung Problem Wer legt wann und mit welchen Meta-Daten die für meine Hardware nötigen Geräteknoten an? Lösungsmöglichkeiten statisch alle möglichen Geräteknoten werden einmal angelegt und bleiben erhalten, dynamisch Geräteknoten werden genau dann angelegt, wenn eine HW-Komponente erkannt wird. Treiber Einfache Gerätetreiber 6/

7 Exkurs: Geräteknoten-Verwaltung (2) Statische Geräteknoten Vorteil auf einfache Weise volle Kontrolle über Zuordnung Gerätenummer Knoten und Metadaten, Nachteile unflexibel bei neuartigen Geräten, unpraktisch bei Hot-Plugging, (zu) große Zahl möglicher Geräte. Treiber Einfache Gerätetreiber 7/

8 Exkurs: Geräteknoten-Verwaltung (3) Dynamische Geräteknoten Erkenntnis: Kernel weiß bereits, welche Geräte es gibt. Kernel kann das Anlegen von Geräteknoten veranlassen. Früher: devfs: spezielles Dateisystem Erzeugung findet nur im Kernelspace statt. Nachteile: Zuordnung Gerätenummer Knoten willkürlich, Benennung/Pfad kann vom Benutzer nicht ohne weiteres geändert werden, Zugriffsberechtigungen oft nicht passend. heute: udev(7). Treiber Einfache Gerätetreiber 8/

9 Exkurs: Geräteknoten-Verwaltung (4) udev udevd(8) läuft im Userspace, registriert sich beim Kernel, erhält Hot-Plug-Events, sobald der Kernel erkennt, dass Hardware zum System hinzugefügt wurde, aus dem System entfernt wurde, sich in ihren Eigenschaften geändert hat, benutzt sysfs (gemountet unter /sys) für weitere Informationen über das Gerät, durch Konfigurationsdateien unter /etc/udev/rules.d frei konfigurierbar. Treiber Einfache Gerätetreiber 9/

10 Exkurs: Geräteknoten-Verwaltung (5) Beispiel: udev-regeln KERNEL=="mouse[0-9]*", NAME="input/%k" KERNEL=="sr[0-9]*", ACTION=="add change", \ IMPORT{program}="cdrom_id --export $tempnode" SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", \ ATTR{address}=="00:19:99:2c:de:f2", \ ATTR{type}=="1", KERNEL=="eth*", \ NAME="eth0" Treiber Einfache Gerätetreiber 10/

11 Exkurs: Geräteknoten-Verwaltung (6) sysfs Bietet Informationen über: geladene Module, Geräteklassen, Bussysteme/Subsysteme, Geräte, orientiert sich an der Struktur der Kernel-Subsysteme (und somit an der Busstruktur). Treiber Einfache Gerätetreiber 11/

12 Gerät registieren register_chrdev #include <l i n u x / f s. h> i n t r e g i s t e r _ c h r d e v ( unsigned i n t major, const char name, s t r u c t f i l e _ o p e r a t i o n s f o p s ) ; Treiberseitige Anmeldung von Geräten beim IO-Subsystem, typischerweise im Zuge der Modul-Initialisierung, bekanntgeben von Major-Nummer, Gerätenamen und Funktions-Callbacks, Rückgabewert: 0 im Erfolgsfall, negativ im Fehlerfall. Treiber Einfache Gerätetreiber 12/

13 Gerät registieren (2) Wahl der Gerätenummer Effektiv nur unsigned char, Zuordnung durch Kernel-Verantwortliche, frei verfügbare Bereiche: automatische Zuweisung: benutze Nummer 0 bei register_chrdev, Rückgabewert ist dann die vergebene Nummer im Erfolgsfall und 0 im Fehlerfall. Nach erfolgreicher Registrierung steht in /proc/devices Gerätenummer und -name. Treiber Einfache Gerätetreiber 13/

14 Gerät registieren (3) Beispiel s t a t i c s t r u c t f i l e _ o p e r a t i o n s f o p s ; s t a t i c i n t i n i t dhwk_init ( void ) { i f ( r e g i s t e r _ c h r d e v (240, "DHWK",& f o p s ) == 0) { r e t u r n 0 ; } r e t u r n EIO ; } m o d u l e _ i n i t ( dhwk_init ) ; Treiber Einfache Gerätetreiber 14/

15 Gerät entfernen unregister_chrdev #include <l i n u x / f s. h> i n t u n r e g i s t e r _ c h r d e v ( unsigned i n t major, const char name ) ; Treiberseitige Abmeldung von Geräten beim IO-Subsystem, typischerweise im Zuge der Modul-Deinitialisierung, Rückgabewert: 0 im Erfolgsfall, negativ im Fehlerfall (meist -EFAULT, nämlich wenn Name oder Nummer ungültig sind). Treiber Einfache Gerätetreiber 15/

16 Gerät entfernen (2) Beispiel s t a t i c void exit dhwk_exit ( void ) { u n r e g i s t e r _ c h r d e v (240, "DHWK" ) ; } module_exit ( dhwk_exit ) ; Treiber Einfache Gerätetreiber 16/

17 Treiberfunktionen Aus <linux/fs.h>... s t r u c t f i l e _ o p e r a t i o n s {... s t r u c t module owner ; s s i z e _ t ( r e a d ) ( s t r u c t f i l e, char user, s i z e _ t, l o f f _ t ) ; s s i z e _ t ( w r i t e ) ( s t r u c t f i l e, const char user, s i z e _ t, l o f f _ t ) ; unsigned i n t ( p o l l ) ( s t r u c t f i l e, s t r u c t p o l l _ t a b l e _ s t r u c t ) ; i n t ( i o c t l ) ( s t r u c t i n o d e, s t r u c t f i l e, unsigned i n t, unsigned long ) ; i n t ( open ) ( s t r u c t i n o d e, s t r u c t f i l e ) ; i n t ( r e l e a s e ) ( s t r u c t i n o d e, s t r u c t f i l e ) ;... } ; Treiber Einfache Gerätetreiber 17/

18 Treiberfunktionen (2) Eine Instanz von struct file_operations wird bei der Registrierung des Geräts übergeben, sie muss mit Funktionszeigern auf die Implementationen der Datei-IO-Funktionen des Treibers gefüllt sein, nicht-zugewiesene Funktionen führen i.d.r. dazu, dass der Systemcall eine geeignete Fehlermeldung liefert (-EINVAL), owner sollte ein Zeiger auf die Modulstruktur des Moduls zugewiesen werden; dieser ist über das Makro THIS_MODULE verfügbar. Treiber Einfache Gerätetreiber 18/

19 Treiberfunktionen (3) Instanzen Beim Öffnen eines Geräts durch ein Anwendungsprogramm wird vom Kernel eine Instanz von struct file angelegt. Diese dient dem Treiber dann zur Unterscheidung der Zugriffe. Aus <linux/fs.h>... s t r u c t f i l e {... const s t r u c t f i l e _ o p e r a t i o n s f_op ;... unsigned i n t f _ f l a g s ; mode_t f_mode ; void p r i v a t e _ d a t a ;... } ; Treiber Einfache Gerätetreiber 19/

20 Treiberfunktionen open open i n t d r i v e r _ o p e n ( s t r u c t i n o d e node, s t r u c t f i l e i n s t a n c e ) ; Bekommt Device-Node- und Datei-Struktur übergeben, Zugriffsrechte wurden bereits vom Kern geprüft, muss prüfen, ob aus der Sicht des Treibers ein Zugriff zulässig ist, muss ggf. treiberspezifische Initialisierungen durchführen, Rückgabewert: 0 bei Erfolg, negativer Fehlercode bei Fehler. Treiber Einfache Gerätetreiber 20/

21 Treiberfunktionen open (2) Zugriffsprüfung und Initialiserung Aspekte können, je nach Gerät, u.a. sein: begrenzte Zahl gleichzeitig lesender/schreibender Instanzen, unterschiedliche Behandlung verschiedener Minor-Nummern (Zugriff über das Makro iminor(node)), blockierender vs. nicht blockierender Zugriff,... Treiber Einfache Gerätetreiber 21/

22 Treiberfunktionen open (3) Beispiel s t a t i c i n t dhwk_open ( s t r u c t i n o d e node, s t r u c t f i l e i n s t a n c e ) { i f ( ( i n s t a n c e >f _ f l a g s & O_ACCMODE) == O_RDWR ( i n s t a n c e >f _ f l a g s & O_ACCMODE) == O_WRONLY) { i f ( w r i t e _ c o u n t > 0) { r e t u r n EBUSY ; } w r i t e _ c o u n t++; } r e t u r n 0 ; } Treiber Einfache Gerätetreiber 22/

23 Treiberfunktionen release release i n t d r i v e r _ c l o s e ( s t r u c t i n o d e node, s t r u c t f i l e i n s t a n c e ) ; Gegenstück zu open, ist dem close(2)-systemcall zugeordnet, muss ggf. die durch das Öffnen belegten Ressourcen wieder freigeben, Rückgabewert: 0 bei Erfolg, negativer Fehlercode sonst. Treiber Einfache Gerätetreiber 23/

24 Treiberfunktionen release (2) Beispiel s t a t i c i n t dhwk_close ( s t r u c t i n o d e node, s t r u c t f i l e i n s t a n c e ) { i f ( ( i n s t a n c e >f _ f l a g s & O_ACCMODE) == O_RDWR ( i n s t a n c e >f _ f l a g s & O_ACCMODE) == O_WRONLY) { write_count ; } r e t u r n 0 ; } s t a t i c s t r u c t f i l e _ o p e r a t i o n s f o p s = {. owner = THIS_MODULE,. open = dhwk_open,. r e l e a s e = dhwk_close, } ; Treiber Einfache Gerätetreiber 24/

25 API: kmalloc kmalloc #include <l i n u x / s l a b. h> void k m a l l o c ( s i z e _ t s i z e, i n t f l a g s ) ; Allokiert Speicher der Länge size zur Verwendung im Kernel, Flags (vgl. <linux/mm.h>): GFP_KERNEL Kernelthread darf bei zu wenig Speicher schlafen gelegt werden, GFP_USER dito für Treiberinstanz, GFP_ATOMIC blockiert nie, Rückgabewert: Zeiger auf den Speicher im Erfolgsfall, NULL im Fehlerfall. Gegenstück: void kfree(const void *); Treiber Einfache Gerätetreiber 25/

26 API: kmalloc (2) Beispiel s t a t i c i n t dhwk_open ( s t r u c t i n o d e node, s t r u c t f i l e i n s t a n c e ) { i n s t a n c e >p r i v a t e _ d a t a = k m a l l o c ( s i z e o f ( s t r u c t my_data ),GFP_USER ) ; i f ( i n s t a n c e >p r i v a t e _ d a t a == NULL) { r e t u r n ENOMEM; } r e t u r n 0 ; } s t a t i c i n t dhwk_close ( s t r u c t i n o d e node, s t r u c t f i l e i n s t a n c e ) { k f r e e ( i n s t a n c e >p r i v a t e _ d a t a ) ; r e t u r n 0 ; } Treiber Einfache Gerätetreiber 26/

27 Treiberfunktionen read read s s i z e _ t d r i v e r _ r e a d ( s t r u c t f i l e i n s t a n c e, char user b u f f e r, s i z e _ t count, l o f f _ t o f f s e t ) ; Es sollen ab der Position *offset bis zu count Bytes vom Gerät gelesen und nach buffer im Userspace geschrieben werden. Rückgabewert: Anzahl der tatsächlich gelesenen Bytes oder 0, um EOF zu signalisieren oder negativer Fehlercode. Treiber Einfache Gerätetreiber 27/

28 Treiberfunktionen read (2) Beispiel s t a t i c char o u t _ s t r i n g [ ] = " World O H e l l \n " ; s t a t i c s s i z e _ t dhwk_read ( s t r u c t f i l e i n s t a n c e, char user b u f f e r, s i z e _ t count, l o f f _ t o f f s e t ) { } i n t not_copied, to_copy ; to_copy = s t r l e n ( o u t _ s t r i n g )+1; i f ( to_copy > count ) to_copy = count ; not_copied = copy_to_user ( b u f f e r, o u t _ s t r i n g, to_copy ) ; r e t u r n to_copy not_copied ; Treiber Einfache Gerätetreiber 28/

29 API: copy_to_user copy_to_user #include <asm/ u a c c e s s. h> unsigned long copy_to_user ( void to, const void from, unsigned long count ) ; Kopiert count Bytes ab der Speicherstelle from im Kernelspace an die Speicherstelle to im Userspace, prüft Adressbereiche, Rückgabewert: Anzahl der Bytes, die nicht kopiert werden konnten. Treiber Einfache Gerätetreiber 29/

30 (Nicht-)Blockierender Zugriff Blockierend vs. Nicht-Blockierend Wurde die Datei mit dem Flag O_NONBLOCK geöffnet, so muss die read-funktion sofort wieder mit dem Fehlercode -EAGAIN zurückkehren, wenn keine Daten zum Lesen vorhanden sind und das Ende der Datei noch nicht erreicht ist, im blockierenden Modus muss die read-funktion dagegen den aufrufenden Prozess schlafen legen! Treiber Einfache Gerätetreiber 30/

31 Scheduling Treiber Einfache Gerätetreiber 31/

32 API: Scheduling Scheduler-Funktionen #i n c l u d e <l i n u x / sched. h> void s e t _ c u r r e n t _ s t a t e ( i n t s t a t e _ v a l u e ) ; void s c h e d u l e ( void ) ; long s c h e d u l e _ t i m e o u t ( long t i m e o u t ) ; set_current_state setzt den Prozesszustand auf state_value (vgl. vorige Folie), schedule ruft den Scheduler auf, schedule_timeout ruft den Scheduler auf und veranlasst, dass der Prozess nach timout Jiffies wieder in den Zustand TASK_RUNNING versetzt wird; gibt bei Unterbrechung die übrige Wartezeit zurück. Treiber Einfache Gerätetreiber 32/

33 API: Wait-Queues Die Wait-Queue-Funktionen und -Makros vereinfachen den Umgang mit Prozesszuständen für Treiberprogrammierer erheblich. Wait-Queues sind das bevorzugte Mittel, um Prozesse schlafen zu legen und wieder aufzuwecken. init_waitqueue_head #i n c l u d e <l i n u x / w a i t. h> void i n i t _ w a i t q u e u e _ h e a d ( waitqueue_head_t q ) ; Initialisiert das Kopf-Element einer Wait-Queue, muss vor der ersten Verwendung der Wait-Queue aufgerufen werden. Treiber Einfache Gerätetreiber 33/

34 API: Wait-Queues (2) wait_event #i n c l u d e <l i n u x / w a i t. h> void w a i t _ e vent ( wait_queue_head_t q, c o n d i t i o n ) ; i n t w a i t _ e v e n t _ i n t e r r u p t i b l e ( wait_queue_head_t q, c o n d i t i o n ) ; i n t w a i t _ e v e n t _ k i l l a b l e ( wait_queue_head_t q, c o n d i t i o n ) ; Ist condition nicht erfüllt, wartet der Prozess, bis er aufgeweckt wird und condition erfüllt ist, bei der interruptible-variante kann das Warten durch Signale (signal(7)) unterbrochen werden, Rückgabewert (so vorhanden): 0 bei erfüllter Bedingung, ungleich 0 bei Abbruch (typischerweise: -ERESTARTSYS). Treiber Einfache Gerätetreiber 34/

35 API: Wait-Queues (3) wait_event (2) #i n c l u d e <l i n u x / w a i t. h> void wait_event_timeout ( wait_queue_head_t q, c o n d i t i o n, long t i m e o u t ) ; i n t w a i t _ e v e n t _ i n t e r r u p t i b l e _ t i m e o u t ( wait_queue_head_t q, c o n d i t i o n, long t i m e o u t ) ; Wartet bis condition erfüllt oder timeout abgelaufen ist, Rückgabewert: 0 bei abgelaufenem Timer, verbleibende Restwartezeit bei erfüllter Bedingung, ggf. negativen Wert bei Abbruch/Fehler (typischerweise: -ERESTARTSYS). Treiber Einfache Gerätetreiber 35/

36 API: Wait-Queues (4) wake_up #i n c l u d e <l i n u x / w a i t. h> void wake_up ( wait_queue_head_t q ) ; void w a k e _ u p _ i n t e r r u p t i b l e ( wait_queue_head_t q ) ; Weckt an der Wait-Queue q schlafende Prozesse auf, wake_up weckt alle Prozesse auf, wake_up_interruptible nur Prozesse, die mit wait_event_interruptible warten, Wake-Up-Ereignisse werden nicht gespeichert. Treiber Einfache Gerätetreiber 36/

37 API: Wait-Queues (5) Beispiel s t a t i c i n t d a t a _ a v a i l ; s t a t i c wait_queue_head_t read_queue ;... d a t a _ a v a i l = 0 ; i n i t _ w a i t q u e u e _ h e a d (&read_queue ) ;... i f (! ( i n s t a n c e >f _ f l a g s & O_NONBLOCK) ) { r e t = w a i t _ e v e n t _ i n t e r r u p t i b l e ( read_queue, d a t a _ a v a i l ) ;... i n t ISR (... ) {... d a t a _ a v a i l = 1 ; w a k e _ u p _ i n t e r r u p t i b l e (&read_queue ) ;... Treiber Einfache Gerätetreiber 37/

38 Treiberfunktionen und Signale Unterbrechung durch Signal Situation Systemcall (read(2), write(2), ioctl(2),... ; siehe signal(7)) wartet unterbrechbar. Problem Was passiert, wenn der Systemcall von einem Signal unterbrochen wird? Vorgehen wait-funktion kehrt mit -ERESTARTSYS zurück, kann der Systemcall identisch wiederholt werden, bzw. ein Zustand hergestellt werden, in dem das möglich ist, kehrt die Treiberfunktion mit -ERESTARTSYS zurück, wurden (bei Lese-/Schreib-Aufrufen) bereits Daten transferiert, kehrt die Treiberfunktion mit der Zahl der übertragenen Bytes zurück, Betriebssystem sorgt dann dafür, dass die Funktion ggf. erneut aufgerufen wird. Treiber Einfache Gerätetreiber 38/

39 Treiberfunktionen write write s s i z e _ t d r i v e r _ w r i t e ( s t r u c t f i l e i n s t a n c e, const char user b u f f e r, s i z e _ t count, l o f f _ t o f f s e t ) ; Es sollen ab der Position *offset bis zu count Bytes aus buffer auf dem Gerät ausgegeben werden. Rückgabewert: Anzahl der tatsächlich geschriebenen Bytes oder negativer Fehlercode. Treiber Einfache Gerätetreiber 39/

40 Treiberfunktionen write (2) Beispiel s t a t i c s s i z e _ t dhwk_write ( s t r u c t f i l e i n s t a n c e, const char user b u f f e r, s i z e _ t count, l o f f _ t o f f s e t ) { } r e t u r n count ; Treiber Einfache Gerätetreiber 40/

41 API: copy_from_user copy_from_user #include <asm/ u a c c e s s. h> unsigned long copy_from_user ( void to, const void from, unsigned long count ) ; Kopiert count Bytes ab der Speicherstelle from im Userspace an die Speicherstelle to im Kernelspace, prüft Adressbereiche, Rückgabewert: Anzahl der Bytes, die nicht kopiert werden konnten. Treiber Einfache Gerätetreiber 41/

42 API: Stringfunktionen Stringfunktionen #include <l i n u x / s t r i n g. h> char s t r c a t ( char dest, const char s r c ) ; s i z e _ t s t r l c p y ( char dest, char s r c, s i z e _ t count ) ; s i z e _ t s t r l e n ( const char s ) ; char s t r n c a t ( char dest, const char s r c, s i z e _ t maxlen ) ; i n t strncmp ( const char cs, const char ct, s i z e _ t count ) ; char s t r n c p y ( char dest, char s r c, s i z e _ t count ) ; char s t r s t r ( const char s1, const char s2 ) ; Die Funktionen folgen im Wesentlichen ihren gleichnamigen Pendants der C-Bibliothek. Treiber Einfache Gerätetreiber 42/

43 Treiberfunktionen ioctl ioctl i n t d r i v e r _ i o c t l ( s t r u c t i n o d e node, s t r u c t f i l e i n s t a n c e, unsigned i n t command, unsigned long argument ) ; Universelle IO-Kontroll-Funktion, dem Systemaufruf ioctl(2) zugeordnet, command: Befehlsnummer; kann vom implementierenden Treiber prinzipiell beliebig definiert werden (vgl. aber z.b. ioctl_list(2)), argument: Befehlsparameter; typischerweise Zeiger auf eine zum Befehl gehörende Datenstruktur (Casting!), Rückgabwert: 0 bei Erfolg, negativer Fehlercode sonst (häufig: -EINVAL bei ungültigem Befehl). Treiber Einfache Gerätetreiber 43/

44 API: Datentransfer User Kernel Datentransfer Bereits vorgestellt: copy_to_user und copy_from_user. Außerdem existieren noch: #i n c l u d e <asm/ u a c c e s s. h> i n t put_user ( datum, d e s t i n a t i o n ) ; i n t g e t _ u s e r ( v a r i a b l e, s o u r c e ) ; Kopieren ein, zwei oder vier Bytes zwischen Kernel- und Userspace, Länge des Datenworts wird aus dem Typ von datum bzw. variable abgeleitet, Adressen werden geprüft, Rückgabewert: 0 bei Erfolg, negativer Fehlercode (-EFAULT) sonst. Treiber Einfache Gerätetreiber 44/

45 API: Datentransfer User Kernel (2) access_ok #i n c l u d e <asm/ u a c c e s s. h> i n t access_ok ( type, addr, s i z e ) ; Prüft, ob der Zugriff type (VERIFY_READ oder VERIFY_WRITE) auf den Speicherbereich der Größe size beginnend bei addr zulässig ist, Rückgabewert: 0, falls der Zugriff nicht möglich ist. Aber: Bei read(2) und write(2) prüft der Kernel schon selbst, ob die Ziel- bzw. Quellbuffer zulässig sind. Treiber Einfache Gerätetreiber 45/

46 API: Datentransfer User Kernel (3) Ungeprüfter Transfer Von den bisher vorgestellten Funktionen/Makros gibt es auch Varianten, die die Gültigkeit der Speicherbereiche nicht prüfen: copy_to_user, copy_from_user, put_user, get_user. Treiber Einfache Gerätetreiber 46/

47 Treiberfunktionen poll poll unsigned i n t d r i v e r _ p o l l ( s t r u c t f i l e i n s t a n c e, p o l l _ t a b l e w a i t ) ; Dient der Überwachung des IO-Kanals, wird von den Systemaufrufen poll(2) und select(2) verwendet, teilt dem Kernel ggf. relevante Wait-Queues mit (vgl. unten), Rückgabewert: veroderte Flags (siehe nächste Folie). Treiber Einfache Gerätetreiber 47/

48 Treiberfunktionen poll (2) Flags Die Flags sagen aus, welche IO-Operationen möglich sind, ohne dass ein auf das poll folgender Aufruf von read oder write blockieren würde. Name POLLIN POLLOUT POLLERR POLLRDNORM POLLWRNORM Bedeutung Daten können ohne zu blockieren gelesen werden, Daten können ohne zu blockieren geschrieben werden, Fehler aufgetreten, Äquivalent zu POLLIN (Kompatibilität!), dito für POLLOUT. Treiber Einfache Gerätetreiber 48/

49 Treiberfunktionen poll (3) Achtung! Greifen mehrere Instanzen auf einen Treiber zu, muss sichergestellt werden, dass genau die Instanz, der durch den Aufruf von poll signalisiert wurde, dass die IO-Operation ohne blockieren möglich ist, bei einem folgenden read/write auch tatsächlich nicht blockiert, auch wenn zwischen dem poll und dem Lese/Schreib-Aufruf eine andere Instanz lesen/schreiben will! Treiber Einfache Gerätetreiber 49/

50 API: poll_wait poll_wait #i n c l u d e <l i n u x / p o l l. h> void p o l l _ w a i t ( s t r u c t f i l e i n s t a n c e, wait_queue_head_t wait_q, p o l l _ t a b l e t a b l e ) ; Gibt dem Kernel innerhalb der Implementation der poll-funktion die Wait-Queue (wait_q) bekannt, auf die sich der Treiber schlafen legt, die übrigen Parameter werden einfach weitergereicht. Treiber Einfache Gerätetreiber 50/

Treiber Einfache Gerätetreiber

Treiber Einfache Gerätetreiber Treiber Einfache Gerätetreiber Dr.-Ing. Matthias Sand Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2007/2008 Treiber Einfache Gerätetreiber 1/42

Mehr

Treiber PCI-Subsystem

Treiber PCI-Subsystem Treiber PCI-Subsystem Dr.-Ing. Matthias Sand Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2010/2011 Treiber PCI-Subsystem 1/41 2011-04-05 Übersicht

Mehr

Einschub: HW-Zugriff aus dem Userspace

Einschub: HW-Zugriff aus dem Userspace Einschub: HW-Zugriff aus dem Userspace Dr.-Ing. Matthias Sand Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2010/2011 Einschub: HW-Zugriff aus dem

Mehr

Aufbau eines Kernelmoduls

Aufbau eines Kernelmoduls Kernel Module Kernelmodul = ladbare/entfernbare Objektdatei (Dateisystem, Gerätetreiber, Systemeingriffe) Vorteile: Ressourcenverbrauch abhängig vom aktuellen Anforderungen Erweiterung der Kernelfunktionalität

Mehr

Konzepte von Betriebssystemkomponenten. Gerätetreiber. Mario Körner

Konzepte von Betriebssystemkomponenten. Gerätetreiber. Mario Körner Konzepte von Betriebssystemkomponenten Gerätetreiber Mario Körner 26.01.2004 Übersicht Einordnung in die Betriebssystemarchitektur Schnittstelle zur Hardware Schnittstelle zum Betriebssystem am Beispiel

Mehr

Treiber Netzwerktreiber

Treiber Netzwerktreiber Treiber Netzwerktreiber Dr.-Ing. Matthias Sand Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2009/2010 Treiber Netzwerktreiber 1/42 2009-10-09 Übersicht

Mehr

Rechnerarchitektur und Betriebssysteme (CS201): Frühe Betriebssysteme, geschützte CPU-Befehle, CPU-Modus

Rechnerarchitektur und Betriebssysteme (CS201): Frühe Betriebssysteme, geschützte CPU-Befehle, CPU-Modus Rechnerarchitektur und Betriebssysteme (CS201): Frühe Betriebssysteme, geschützte CPU-Befehle, CPU-Modus 2. November 2012 Prof. Dr. Christian Tschudin Departement Mathematik und Informatik, Universität

Mehr

Systemaufrufe. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2010/2011

Systemaufrufe. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2010/2011 Systemaufrufe Dr.-Ing. Matthias Sand Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2010/2011 Systemaufrufe 1/17 2010-09-13 Motivation Am Beispiel

Mehr

Hardware PCI-Bus. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg

Hardware PCI-Bus. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg Hardware PCI-Bus Dr.-Ing. Matthias Sand Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2008/2009 Hardware PCI-Bus 1/23 2008-08-06 Übersicht Inhalt:

Mehr

Hardware PCI-Bus. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg

Hardware PCI-Bus. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg Hardware PCI-Bus Dr.-Ing. Matthias Sand Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2007/2008 Hardware PCI-Bus 1/23 2007-10-26 Übersicht Inhalt:

Mehr

Praktikum angewandte Systemsoftwaretechnik (PASST)

Praktikum angewandte Systemsoftwaretechnik (PASST) Praktikum angewandte Systemsoftwaretechnik (PASST) Dateisysteme / Aufgabe 6 21. Juni 2018 Stefan Reif, Peter Wägemann, Florian Schmaus, Michael Eischer, Andreas Ziegler, Bernhard Heinloth und Benedict

Mehr

Geräteverwaltung: Einführung

Geräteverwaltung: Einführung Geräteverwaltung: Einführung Die Ziele einer Geräteverwaltung sind: Einfache Softwareschnittstelle Gleiche Software Schnittstellen für alle Geräte eines Gerätetyps z.b.: unabhängig vom Soundkartenhersteller

Mehr

U5 Verzeichnisse und Sortieren

U5 Verzeichnisse und Sortieren U5 Verzeichnisse und Sortieren U5 Verzeichnisse und Sortieren Linux-Benutzerumgebung Fehlerbehandlung POSIX-Verzeichnis-Systemschnittstelle Datei-Attribute in Inodes U5.1 Verzeichnisse öffnen: opendir(3)

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

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

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

Geräte Treiber unter Unix/Linux

Geräte Treiber unter Unix/Linux Geräte Treiber unter Unix/Linux Martin Schäf 7. Oktober 2004 1 Einleitung Die Programmierung von Geräte Treibern unter Linux ist ein sehr populäres Thema, da für viele Geräte keine, oder nur sehr primitive

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

Tafelübung zu BS 5. Dateioperationen

Tafelübung zu BS 5. Dateioperationen Tafelübung zu BS 5. Dateioperationen Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/de/teaching/ss2014/bs/

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

Kernel Programmierung unter Linux Teil II Programmierung von Kernelmodulen

Kernel Programmierung unter Linux Teil II Programmierung von Kernelmodulen Kernel Programmierung unter Linux Teil II Programmierung von Kernelmodulen Referent Klaus Ruhwinkel Module, Built-In-Treiber, Treiber Ein Modul kann alles sein Ein Treiber hat I/O Aufgaben und unterscheidet

Mehr

VHDL Grundelemente. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg

VHDL Grundelemente. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg VHDL Grundelemente Dr.-Ing. Matthias Sand Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2009/2010 VHDL Grundelemente 1/15 2009-07-31 Inhalt Folgende

Mehr

Tafelübung zu BS 4. Dateioperationen

Tafelübung zu BS 4. Dateioperationen Tafelübung zu BS 4. Dateioperationen Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/de/teaching/ss2013/bs/

Mehr

Zeiger vom Typ void* benötigen weniger Speicher als andere Zeiger, da bei anderen Zeigertypen zusätzlich die Größe gespeichert werden muss.

Zeiger vom Typ void* benötigen weniger Speicher als andere Zeiger, da bei anderen Zeigertypen zusätzlich die Größe gespeichert werden muss. EZS-Test Fragen zur Programmiersprache C Fragen entnommen aus SPiC 1 1. Ein Hauptprogramm und eine Interruptbehandlung greifen nebenläufig auf die Variable uint16_t foo zu. Das Hauptprogramm verwendet

Mehr

Übung zu Betriebssystemtechnik

Übung zu Betriebssystemtechnik Übung zu Betriebssystemtechnik Nachrichtenaustausch und Copy-on-Write 11. Juni 28 Andreas Ziegler Bernhard Heinloth Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl

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

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

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

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

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 9. Zeiger Arbeitsspeicher / Adressen Der Arbeitsspeicher des Computers (RAM) besteht aus einem Feld von Speicherzellen, beginnend bei Adresse

Mehr

6 ZEIGER UND REFERENZEN - ALLGEMEINES

6 ZEIGER UND REFERENZEN - ALLGEMEINES 6 ZEIGER UND REFERENZEN - ALLGEMEINES Leitideen: Zeiger sind Adressen mit zusätzlicher Typinformation über das dort gespeicherte Objekt. Die Vereinbarungssyntax soll der Ausdruckssyntax entsprechen und

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

Tafelübung zu BS 2. Threadsynchronisation

Tafelübung zu BS 2. Threadsynchronisation Tafelübung zu BS 2. Threadsynchronisation Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/

Mehr

Klausur Betriebssysteme

Klausur Betriebssysteme Prof. Dr. Michael Jäger FB MNI Klausur Betriebssysteme 5.2.2016 Die Dauer der Klausur beträgt 90 Minuten. Es sind keine Unterlagen und Hilfsmittel erlaubt. Bitte bearbeiten Sie die Aufgaben soweit wie

Mehr

Linux-Kernel- Programmierung

Linux-Kernel- Programmierung Michael Beck, Harald Böhme, Mirko Dziadzka, Ulrich Kunitz, Robert Magnus, Dirk Verworner, Claus Schröter Linux-Kernel- Programmierung Algorithmen und Strukturen der Version 2.2 5., aktualisierte und erweiterte

Mehr

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

Mehr

Extended Scope. Events und Mailboxen. Florian Franzmann Tobias Klaus Florian Korschin Florian Schmaus Peter Wägemann

Extended Scope. Events und Mailboxen. Florian Franzmann Tobias Klaus Florian Korschin Florian Schmaus Peter Wägemann Extended Scope Events und Mailboxen Florian Franzmann Tobias Klaus Florian Korschin Florian Schmaus Peter Wägemann Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme

Mehr

Single- und Multitasking

Single- und Multitasking Single- und Multitasking Peter B. Ladkin ladkin@rvs.uni-bielefeld.de Peter B. Ladkin Command Interpreter (ComInt) läuft wartet auf Tastatur-Eingabe "liest" (parst) die Eingabe (für Prog-Name) Macht "Lookup"

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

Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung.

Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung. Dateioperationen Seite 1 von 12 Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung. z.b.: c:\testdateien\text.dat //Datendatei

Mehr

K Ergänzungen zur Einführung in C

K Ergänzungen zur Einführung in C K Ergänzungen zur Einführung in C K Ergänzungen zur Einführung in C K.1 Zeiger, Felder und Zeichenketten Zeichenketten sind Felder von Einzelzeichen (char), die in der internen Darstellung durch ein \0

Mehr

Konzepte und Methoden der Systemsoftware. Aufgabe 1: Polling vs Interrupts. SoSe bis P

Konzepte und Methoden der Systemsoftware. Aufgabe 1: Polling vs Interrupts. SoSe bis P SoSe 2014 Konzepte und Methoden der Systemsoftware Universität Paderborn Fachgebiet Rechnernetze Präsenzübung 3(Musterlösung) 2014-05-05 bis 2014-05-09 Aufgabe 1: Polling vs Interrupts (a) Erläutern Sie

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

Prozesse: Prozesskontrollblock, -steuerung, -umschaltung

Prozesse: Prozesskontrollblock, -steuerung, -umschaltung Proseminar: Konzepte von Betriebssystemkomponenten 3.11.03 Prozesse: Prozesskontrollblock, steuerung, umschaltung Überblick Prozesskontrollblock Prozesszustände Prozessumschaltung Prozesskontrollblock

Mehr

Sequentielle Programm- / Funktionsausführung innerhalb eines Prozesses ( thread = Ausführungsfaden )

Sequentielle Programm- / Funktionsausführung innerhalb eines Prozesses ( thread = Ausführungsfaden ) Threads Sequentielle Programm- / Funktionsausführung innerhalb eines Prozesses ( thread = Ausführungsfaden ) Ein thread bearbeitet eine sequentielle Teilaufgabe innerhalb eines Prozesses Mehrere nebenläufige

Mehr

Hydroinformatik I: Referenzen und Zeiger

Hydroinformatik I: Referenzen und Zeiger Hydroinformatik I: Referenzen und Zeiger Prof. Dr.-Ing. habil. Olaf Kolditz 1 Helmholtz Centre for Environmental Research UFZ, Leipzig 2 Technische Universität Dresden TUD, Dresden Dresden, 06. Januar

Mehr

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN 3. UNIX/Linux-Dateisysteme und zugehörige Systemaufrufe und Kommandos (Teil I) Wintersemester 206/7 UNIX/Linux-Dateisystem(e) Systemaufrufe zur Dateiarbeit:

Mehr

Hans-Georg Eßer, FH München Betriebssysteme I, WS 2006/07, 2007/01/24 Zusammenfassung (2/2) Folie 2

Hans-Georg Eßer, FH München Betriebssysteme I, WS 2006/07, 2007/01/24 Zusammenfassung (2/2) Folie 2 /home/esser/daten/dozent/folien/bs-esser-24.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]: STATS: dropped 0 Sep

Mehr

Dateisystem. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2009

Dateisystem. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2009 Dateisystem Dr.-Ing. Matthias Sand Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2009 Dateisystem 1/45 2009-05-11 Inhalt Platten (Hardware) Partitionen

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

Proseminar: Konzepte von Betriebsystem-Komponenten (KVBK)

Proseminar: Konzepte von Betriebsystem-Komponenten (KVBK) Proseminar: Konzepte von Betriebsystem-Komponenten (KVBK) Schwerpunkt Linux Interrupts, Softirqs, Tasklets, Bottom Halves Interrupts: Softirqs, Tasklets, Bottom Halves 1 Thomas Engelhardt Übersicht: Klassifizierung

Mehr

e) Welche Aussage zu Speicherzuteilungsverfahren ist falsch?

e) Welche Aussage zu Speicherzuteilungsverfahren ist falsch? Aufgabe 1: (1) Bei den Multiple-Choice-Fragen ist jeweils nur eine richtige Antwort eindeutig anzukreuzen. Auf die richtige Antwort gibt es die angegebene Punktzahl. Wollen Sie eine Multiple-Choice-Antwort

Mehr

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue

Mehr

U3 UNIX-Signale U3 UNIX-Signale

U3 UNIX-Signale U3 UNIX-Signale U3 UNIX-Signale U3 UNIX-Signale Besprechung der Aufgabe 2: sister Nebenläufigkeit durch Signale Aktives Warten auf Ereignisse Probleme beim passiven Warten (auf Signale) Nachtrag zur Signalbehandlungsschnittstelle

Mehr

Teilprüfung Software- und Internettechnologie Programmierkurs 2 Wintersemester 2004/2005

Teilprüfung Software- und Internettechnologie Programmierkurs 2 Wintersemester 2004/2005 Universität Mannheim Fakultät für Mathematik und Informatik Lehrstuhl für Praktische Informatik IV Prof. Dr. Wolfgang Effelsberg Teilprüfung Software- und Internettechnologie Programmierkurs 2 Wintersemester

Mehr

Tag 8 Repetitorium Informatik (Java)

Tag 8 Repetitorium Informatik (Java) Tag 8 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium

Mehr

Assignment #2. Virtueller Speicher Virtual Memory WS 2012/2013 IAIK 1

Assignment #2. Virtueller Speicher Virtual Memory WS 2012/2013 IAIK 1 Assignment #2 Virtueller Speicher Virtual Memory WS 2012/2013 IAIK 1 Organisatorisches:Termine Ab Montag Tutorien 10.12.-14.12. Designdiskussionen 18.12. Abgabe Designdokument 18.1. Abgabe Implementierung

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

Treiber Netzwerktreiber

Treiber Netzwerktreiber Treiber Netzwerktreiber Dr.-Ing. Matthias Sand Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2010/2011 Treiber Netzwerktreiber 1/43 2010-10-08 Übersicht

Mehr

F Zeiger, Felder und Strukturen in C

F Zeiger, Felder und Strukturen in C F Zeiger, Felder und Strukturen in C F Zeiger, Felder und Strukturen in C F.1 Zeiger(-Variablen) 1 Einordnung Konstante: Bezeichnung für einen Wert a 0110 0001 Variable: Bezeichnung eines Datenobjekts

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

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

Homogene Multi-Core-Prozessor-Architekturen

Homogene Multi-Core-Prozessor-Architekturen Homogene Multi-Core-Prozessor-Architekturen Praktikum Parallele Rechnerarchitekturen Stefan Potyra Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2009

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

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3 Programmieren mit Java Modul 5 Objekte Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Klassen und Objekte 3 2.1 Klassen.................................... 4 2.2 Objektvariablen und Methoden.......................

Mehr

Proseminar Konzepte von Betriebssystemkomponenten

Proseminar Konzepte von Betriebssystemkomponenten Proseminar Konzepte von Betriebssystemkomponenten Thema: Module von Michael Balda am 02.02.2004 1 Allgemeines zum Modulkonzept 1.1 Was sind Module? Wozu dient das Modulkonzept? Module sind Codeelemente,

Mehr

(a) Wie unterscheiden sich synchrone und asynchrone Unterbrechungen? (b) In welchen drei Schritten wird auf Unterbrechungen reagiert?

(a) Wie unterscheiden sich synchrone und asynchrone Unterbrechungen? (b) In welchen drei Schritten wird auf Unterbrechungen reagiert? SoSe 2014 Konzepte und Methoden der Systemsoftware Universität Paderborn Fachgebiet Rechnernetze Präsenzübung 2 2014-04-28 bis 2014-05-02 Aufgabe 1: Unterbrechungen (a) Wie unterscheiden sich synchrone

Mehr

Linux-Kernel-Programmierung

Linux-Kernel-Programmierung Linux-Kernel-Programmierung Übungsaufgaben Jürgen Quade Linux-Kernel-Programmierung: Übungsaufgaben von Jürgen Quade Versionsgeschichte Version $Revision: 1.5 $ Do 9. Jul 21:25:13 CEST 2009 Geändert durch:

Mehr

Repetitorium Programmieren I + II

Repetitorium Programmieren I + II Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 24. September 2012 Agenda 1 Funktionen Aufbau und Anwendung Call by Value Call by Reference Überladen von Funktionen Default

Mehr

Programmiersprachen Einführung in C

Programmiersprachen Einführung in C Programmiersprachen Einführung in C Teil 10: Arbeiten mit Prof. Dr. Gliederung Programmiersprachen 1. Von der Maschinensprache zu C 2. Die Struktur von C-Programmen 3. Variable und Datentypen in C 4. Bildschirm

Mehr

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN 10. UNIX/Linux: Reaktion auf Fehler Wintersemester 2016/17 Reaktion auf Fehler: Übersicht Systemaufrufe: 1. Rückkehrwert: in den meisten (aber nicht in allen!)

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

Ulrich Stein

Ulrich Stein Von C nach MATLAB Einführung in MATLAB für Personen mit C-Kenntnissen Datentypen ähnlich in C und MATLAB, dort aber automatische Typzuweisung möglich double a = 2; Arrays a = double( 2 ); aber auch a =

Mehr

C- Kurs 09 Dynamische Datenstrukturen

C- Kurs 09 Dynamische Datenstrukturen C- Kurs 09 Dynamische Datenstrukturen Dipl.- Inf. Jörn Hoffmann jhoffmann@informaak.uni- leipzig.de Universität Leipzig InsAtut für InformaAk Technische InformaAk Flexible Datenstrukturen Institut für

Mehr

Speicherklassen (1) Lokale Variablen

Speicherklassen (1) Lokale Variablen Speicherklassen (1) Lokale Variablen Lokale Variablen beschränken sich auf die Funktionen, in denen sie definiert werden Sind in der Funktion gekapselt können also nur in der Funktion verändert werden

Mehr

Programmiertechnik 1. Unit 12: Programmiersprache C - Betriebssystemschnittstellen. Andreas Polze 1

Programmiertechnik 1. Unit 12: Programmiersprache C - Betriebssystemschnittstellen. Andreas Polze 1 Programmiertechnik 1 Unit 12: Programmiersprache C - Betriebssystemschnittstellen Andreas Polze 1 Ablauf Zugriff auf Betriebssystemdienste Dateideskriptoren low-level I/O read and write open, creat, close,

Mehr

Dateioperationen Fachhochschule Würzburg-Schweinfurt Prof. Dr. Martin Ochs. Abspeichern und Einlesen von Texten (Strings) in Dateien

Dateioperationen Fachhochschule Würzburg-Schweinfurt Prof. Dr. Martin Ochs. Abspeichern und Einlesen von Texten (Strings) in Dateien Informatik I SS 2003 Dateioperationen 1 Textdateien, Öffnen Abspeichern und Einlesen von Texten (Strings) in Dateien 1. Das Öffnen einer Datei a) Deklaration eines Zeigers auf eine Datei FILE *pfile; b)

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

11. Die PC-Schnittstelle

11. Die PC-Schnittstelle PC-Schnittstelle Funktion -1. Die PC-Schnittstelle.1. Funktion Die folgenden Angaben gelten ohne Einschränkung für den PC, PC-XT, PC-AT, AT-386, AT-486 und kompatible Rechner. Sie sind nur für jene interessant,

Mehr

I/O: Von der Platte zur Anwendung. Von Igor Engel

I/O: Von der Platte zur Anwendung. Von Igor Engel I/O: Von der Platte zur Anwendung Von Igor Engel 1 Gliederung 1 Einleitung 2 Übersicht 3 Systemaufrufe Beispiel in Unix 4 Dateien 4.1 Dateisysteme 4.2 Transport der Daten 5 Festplattentreiber 6 Festplattenkontroller

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

Prozesse und Scheduling unter Linux (Kernel 2.4.XX)

Prozesse und Scheduling unter Linux (Kernel 2.4.XX) Prozesse und Scheduling unter Linux (Kernel 2.4.XX) Vorlesung: Dozent: Betriebssysteme Odej Kao Vortragende: Andrè Neubert Alexander Geburzi Überblick 1. Prozesse unter Linux ProcessControlBlock Prozessliste

Mehr

55 Ring-Queue. size. push. clear. get. Reinhard Schiedermeier / Klaus Köhler, Das Java-Praktikum, dpunkt.verlag, ISBN

55 Ring-Queue. size. push. clear. get. Reinhard Schiedermeier / Klaus Köhler, Das Java-Praktikum, dpunkt.verlag, ISBN D3kjd3Di38lk323nnm 394 55 Ring-Queue In dieser Aufgabe wird eine generische Containerklasse definiert. Ihre Kapazität wird beim Erzeugen festgelegt, im Gegensatz zu den Klassen des Collection- Frameworks.

Mehr

Versionsverwaltung. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2009

Versionsverwaltung. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2009 Versionsverwaltung Dr.-Ing. Matthias Sand Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2009 Versionsverwaltung 1/22 2009-06-03 Inhalt Motivation

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung

Mehr

4.3 Directories / Filesysteme

4.3 Directories / Filesysteme I-Node H. Weber, FH Wiesbaden WS 2008/09 Systemprogrammierung Kap. 4.3 Seite 1 von 32 Hierfür gibt es eine ganze Reihe von Systemaufrufen und Subroutines. Wir beginnen mit chroot Root Directory ändern

Mehr

8. Referenzen und Zeiger

8. Referenzen und Zeiger 8. Referenzen und Zeiger Motivation Variable werden in C++ an speziellen Positionen im Speicher abgelegt. An jeder Position befindet sich 1 Byte. Sie sind durchnummeriert beginnend bei 0. Diese Positionen

Mehr

C++ - Objektorientierte Programmierung Konstante und statische Elemente

C++ - Objektorientierte Programmierung Konstante und statische Elemente C++ - Objektorientierte Programmierung Konstante und statische Elemente hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja

Mehr

Repetitorium Programmieren I + II

Repetitorium Programmieren I + II Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 6. März 2012 Agenda 1 Operatoren 2 Datentypen Gleitpunkt Zahl Typkonvertierung 3 Strommanipulatoren 4 Bedingungen if-else switch-case

Mehr

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

FILE *fp; char fname[100];... fp = fopen (fname, rb ); if( fp == NULL ) { perror( fopen );... } // Fehlernachricht auf letzten Fehler, der aufkam Aktuelle Fileposition ermitteln long pos; pos=ftell(fp); //aktuelle Bytenummer Filelaenge in Bytes fseek(fp,0,seek_end); pos=ftell(fp); Fileendeerkennung int rc; rc = feof (fp) //!= 0 bei Fileende // ==

Mehr

Linux Treiberentwicklung

Linux Treiberentwicklung Einführung in die Linux Treiberentwicklung 12. Dezember 2012 Autor: Martin Züger Dozent: Urs Graf Modul: Ingenieurinformatik III Kurs: Betriebssysteme Semester: HS 2012 N ä h e r d r a n a m S y s t e

Mehr

9. Dateisysteme. Betriebssysteme Harald Kosch Seite 164

9. Dateisysteme. Betriebssysteme Harald Kosch Seite 164 9. Dateisysteme Eine Datei ist eine Abstraktion für ein Aggregat von Informationen (muß nicht eine Plattendatei sein). Aufbau eines Dateisystems: Katalog (Directory) Einzelne Dateien (Files) Zwei Aspekte

Mehr

4. Speicherverwaltung

4. Speicherverwaltung Tafelübung zu BSRvS1 4. Speicherverwaltung Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/exercises/

Mehr

Arrays (Felder/Vektoren)

Arrays (Felder/Vektoren) Arrays (Felder/Vektoren) Zusammenfassung mehrerer Variablen des gleichen Typs unter einem Namen im Speicher direkt hintereinander abgelegt Definition: Typname Arrayname [Größe]; Beispiel: int ar [5]; Zugriff

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen 3.2 Auswahl an Stringfunktionen W. Tasin, M.Sc. Fakultät 04 tasin@hm.edu Allgemeines (1) Die ANSI-Norm definiert auch nützliche Funktionen zur ASCIIZ-Stringbearbeitung.

Mehr

Hydroinformatik I: Referenzen und Zeiger

Hydroinformatik I: Referenzen und Zeiger Hydroinformatik I: Referenzen und Zeiger Prof. Dr.-Ing. habil. Olaf Kolditz 1 Helmholtz Centre for Environmental Research UFZ, Leipzig 2 Technische Universität Dresden TUD, Dresden Dresden, 08. Januar

Mehr

C- Kurs 08 Zeiger. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins?tut für Informa?k Technische Informa?

C- Kurs 08 Zeiger. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins?tut für Informa?k Technische Informa? C- Kurs 08 Dipl.- Inf. Jörn Hoffmann jhoffmann@informa?k.uni- leipzig.de Universität Leipzig Ins?tut für Informa?k Technische Informa?k Überblick Datentyp zur Verwaltung von Adressen (auf Speicherplätze)

Mehr