- Stanford Spring '20
- MIT Fall '12
- CalTech Fall '18
- Berkley Summer '20
- Harvard 2020
- Harvard Systems Prog. 2019
- Tübingen WS '12/'13
- Definition & Aufgaben
- Entwicklung & Geschichte
- siehe Inhalt; jedes Thema kurz vorstellen (incl. Fragen & Probleme; priming)
- Computerarchitektur & Hardware Vieles sollte bekannt sein aus Rechnersysteme
- Von Neumann Arch
- Modern CPU Arch (x86, arm): Multiprozessorsysteme, Hardware, Bus, Scheduling
- MoBo Überblick
- Bus Systeme & Controller Überblick
- Kernel Arch: monolithic, micro, exo, hybrid
- Betriebsarten: kernel space, user space, Protection Rings, System call interface
- Motivation (systemnah)
- Grundlagen Widerholung (Bin/Hex, signed/unsigned, Bits/Bytes, IEEE754/Numerics, branchs & loops, funktionen) sollte aus Konzepte der Informatik bekannt sein
- libc vs. POSIX, Unixoid Kernel overview
- C Basics: chars & \0, bit ops (<<, ^, ~, ...), pointers, casts, printf & scanf, parts of stdio.h & stdlib.h
- (brief) C Datatypes: stdint.h, assert.h, complex.h, ctype.h, fenv.h, float.h, inttypes, stddef.h, stdbool.h, string.h, uchar.h, wchar.h, wctype.h ; POSIX: sys/types.h, monetary, strings.h
- (brief) C MISC: iso646.h, limits.h, locale.h, math.h, tgmath.h, stdarg.h, stdnoreturn ; POSIX Misc.: glob.h (globbing), iconv.h (codeset conversion), langinfo.h (locale), pwd.h (passwords), regex.h, search.h, stropts.h (streams), sys/utsname.h (uname), syslog.h, tar.h, trace.h, wordexp.h
- Compiler, Linker, IR, asm, obj, scopes, static vs shared lib, flags & sanitizers
- git svn sollte aus Schlüsselqualifikation f. Informatiker bekannt sein
- Shell (Befehle, Pipes, Sockets) bash, sonst wie drüber
- Blatt 1 Ausgabe: Wiederholungen & Basics
- Definition und Aufgaben Wdh.
- Geschichte: Unix == Linux?, Unix Philosopihie (one job at a time, everything is a file), POSIX standard
- Fragen zur Control Unit & Bus System
- Kernel Arten Unterschiede
- Unterschied Kernel vs. Userspace
- Kleine C Aufgaben:
- MergeSort in C with command line args, without pointers & call by value
- Macros & pragmas
- Structs, pointers, function pointers
- Definition Prozess
- Kontrollblöcke & Datenstrukturen
- Abstraktion & Isolation bei Prozessen
- Definition,
- Unterschied zu Prozessen,
- Kontrollblock & Datenstrukturen
- Abstraktion & Isolation bei Threads
- Race conditions
- Mutual Exclusion (MutEx):
- critical sections
- Lock
- Semaphore
- Condition Variables
- Monitor: combined semaphore + CV
- Theorie: readers-writers, dining philosophers
- Starvation & Deadlocks:
- Prevention: preemption, pre-allocation, resolve mutEx, resolve circular wait
- Avoidance: wait/wound, wait/die
- Recovery: process termination, preemption, rollback
- Behebung, Starvation, Algorithmen, Modellierung mit Graphen;
- Message passing
- Hardwareunterstützung, Atomic Support
- Blatt 1 Besprechung
- Call-by-Value vs. Call-by-Reference
- Pointers revisited, Memory safety
- Compiler basics: flags, sanitizers, CMake/Makefiles, static vs shared lib revisited
- libc & POSIX overview, platform (independence) & calling conventions dazu
- Processes: fork, join, wait, sleep, getXid/setXid, pipe, dup, exit, exec family (parts of C: errno.h, time.h, POSIX: unistd.h, sys/wait, sys/time.h, poll.h, spawn.h (RT), ulimit.h)
- Threads: pthread.h and some of the above & below
- Synchronization: C: stdatomic.h, threads.h, POSIX: sys/msg.h, fmtmsg.h, mqueue.h (RT), poll, semaphore.h, sys/ipc.h, sys/resource.h, sys/sem.h, sys/shm.h
- Blatt 2:
- Change MergeSort to use call-by-reference, pointers & to be memory safe
- given code: split into smaller files, create modules, create Makefile & use CMake building a shared and a static library + questions on static vs shared
- a) what mechanisms are there to achieve synchronization? whats the difference? b) Given code with race condition: Resolve RC
- Create a child process 1.) printing hello world from the child, 2.) and use pipes to print the stdout from the parent after the child has died, 3.) experiment with how many processes you can create before your system crashes. is it useful to spawn so many processes, where does the limit come from? 4.) compute a sum in one process and using many processes and shared memory. What do you notice
- Same as above using threads
- How to prevent/avoid/recover from a deadlock
- CPU - E/A Burst cycles
- Task Switching, Start, Terminierung
- Interrupts & Signals
- Ziele/Kriterien
- Algorithmen & Vergleich
- MFQ & lottery scheduler
- MuQSS
- Interrupts & Signals
- Algorithmen
- Hardware: Northbridge
- Caching Policies
- Allocation Algorithm & Fragmentation
- Adressierung/Adressräume, virtual memory,
- Virtualisierung: logischer vs. physicher Speicher,
- Segmentation
- Paging:
- Page Table
- Pages & Frames,
- Page Replacement Policy
- Page fault
- Swapping
- Caches
- Address Translation: Combined Paging + Segmentation
- Hardware South bridge & PCIe + X d. North bridge
- virtuelle Dateisysteme
- Gerätemodelle
- Schichten/Treiber
- Schnittstellen
- Struktur
- Memory-Mapped I/O
- Bus (I2C?)
- Strom (ACPI?)
- Timer
- Optimierung/Performance (?) ??
- Massenspeicher/Block Devices
- Tape Drive
- HDD
- SSDs
- RAID
- Netzwerk- und Cloudspeicher ??
- Character Devices
- Keyboard
- Mouse
- Schnittstellen
- Access control matrix
- inodes
- Dateien
- Verzeichnisse
- SymLinks
- Partitionen
- Mounting
- I/O Scheduling Summary
- Zuverlässigkeit & Journaling
- Formate (?)
- Allokation (?)
- Metadaten (?)
- verteilte Dateisysteme ??
- Backups ??
- Sharing ??
- Zugriffskontrolle -> Sicherheit ??
- in-memory Dateisysteme ??
- Netzwerkdateisysteme/NFS ??
- Container
- Hypervisor
- trap-and-emulate
- Hardware Unterstützung
- verteilte Systeme
- Grundlagen
- Video
- Audio
- Formate
- Echtzeit Scheduling
- Zusammenhang Dateisysteme
- graphische Benutzeroberflächen: Design, Struktur, Fenster bei Unix und Windows?
- Ziele
- Identifikation
- Ressourcenkontrolle
- Zugriffskontrolle
- Authentifizierung/Passwörter
- Capabilities
- Andere Ansätze
- Security by Design
- symmetrische und asymmetrische Verschlüsselung
- Hashfunktionen
- PGP & S/MIME
- Netzprotokolle TLS, SSH
- Hardware
- Zufall
- Trusted Platform Module
- seL4 microkernel?
- Sicherheitslücken
- responsible disclose
- Viren, Spyware, Rootkits
- Speicherangriffe, side channel
- social engineering, Zugriff vor Ort
- Sandboxing
- Stack Canaries
- data execution preventio
- address space randomization
- Linux ("unterwegs" in den Übungen)
- Geschichte
- Shells
- Kernels
- Scheduling
- Prozessmanagement
- Speicher
- E/A
- Dateisysteme
- Sicherheit
- Bootprozess
- Daemons
- System Services]
- Echtzeit BS, verteilte BS, eingebettete BS (mal erwähnen oder in vollem umfang?)
- Wiederholung der Themen
- Entwurf (Wiederholung sollte reichen??)
- Schnittstellen
- Implementierung
- Performanz
- Trends
- Ziele
- Herausforderungen
- Trade-offs
- Software Engineering
Notizen: Einführung: Entwicklung & Geschichte: Zeitstrahl/Stammbaum (Marktanteile?) Abstraktion: Speicherverwaltung: Caches: least-recently-used cache? Abstraktion: Scheduling: Multi-level Feedback Queue, Lotterie Scheduling Abstraktion: Virtualisierung: Multiprozessorsysteme: symmetric multi-processing Sicherheit: Formale Modelle: http://www.ra.cs.uni-tuebingen.de/lehre/ss11/introsec/07-secmod.pdf Sicherheit: Angriffe: Beispiele: heartbleed, rowhammer Fallbeispiele: ggfs. Unterschiede zu Windows, MacOS, iOS, Android
! einsortieren (Übungen): E/A (wenn IO), Umgebungsvariablen (wenn platz ist), Speicher anfordern(speicher verwaltung) Speicherlayout, relocation, treiber schreiben