Document Details

RevolutionaryFern2779

Uploaded by RevolutionaryFern2779

Hochschule Esslingen

2024

Rainer Keller, Dennis Grewe

Tags

Betriebssysteme Systemcalls Interrupts Computer-Wissenschaften

Summary

Diese Folien behandeln Betriebssysteme (BS), insbesondere Prozesse, Threads, Systemaufrufe und Interrupts. Sie geben einen Überblick über die Konzepte von Prozessen, Threads, Systemaufrufen und Interrupts in Betriebssystemen.

Full Transcript

BETRIEBSSYSTEME (BS) IV. PROZESSE & THREADS – SYSTEMAUFRUFE & INTERRUPTS PROF. DR.-ING. RAINER KELLER PROF. DR. DENNIS GREWE 1 AGENDA l Was ist ein Prozess und was ist ein Thread? l Wie werden Systemaufrufe realisiert? l Was ist de...

BETRIEBSSYSTEME (BS) IV. PROZESSE & THREADS – SYSTEMAUFRUFE & INTERRUPTS PROF. DR.-ING. RAINER KELLER PROF. DR. DENNIS GREWE 1 AGENDA l Was ist ein Prozess und was ist ein Thread? l Wie werden Systemaufrufe realisiert? l Was ist der User-/Kernel-Mode? l Was ist ein Interrupt? 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 2 ZIELE l Konzepte von Prozesse & Threads verstehen l Konzepte der Systemaufrufe verstehen l Unterschiede User-/Kernel-Mode verstehen l Konzepte von Software- und Hardwareinterrupts verstehen und Unterschiede benennen können l Anhand kleinerer Beispiele kennenlernen 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 3 WIEDERHOLUNG BETRIEBSSYSTEM & BASH SCRIPTING Quelle: [Image by rawpixel.com on Freepik] 4 DEFINITION: „BETRIEBSSYSTEM“ l “Ein Betriebssystem ist eine Software, die auf effiziente Weise die … l … Komplexität eines Computers vor dem Benutzer und dem Programmierer versteckt (abstrahiert), sowie l … einer Gruppe von Benutzern und Programmen l … gemeinsamen, sicheren Zugriff auf Rechen-, Speicher-, Kommunikationsmittel l … zur Verfügung stellt.“ 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 5 WAS SIND UNIX SHELL SCRIPTE? l Ein Shell Script ist eine Textdatei, welche eine Reihe von Kommandos zu einem ausführbaren Programmablauf zusammenfasst. l Beachte: Alles was normal in der Befehlszeile ausgeführt werden kann, kann zu einem Skript zusammengefasst werden. Ebenso kann alles, was in einem Skript zusammengefasst wurde, auch normal auf der Befehlszeile ausgeführt werden. Das Ergebnis ist beides Mal das selbe. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 6 BEISPIEL SHELL SCRIPT l Skripte erleichtern die Arbeit l Skript zur Identifikation aller laufenden Prozesse mit offenen Ports! l Minimiert die Anzahl der offenen Netzwerkports -> muss als Superuser / Root ausgeführt werden for PORT in `netstat -nat | grep -E 'LISTEN‘ | cut -f2-4 -d':' |cut -f1 -d' '|sed -e 's/://g'| sort -nu`; do PID=`fuser -n tcp $PORT | cut -c1-6`; echo ""; echo "INFORMATION FOR OPEN PORT $PORT:"; echo "----------------------------"; ps -f -q $PID done 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 7 WAS SIND DATEISYSTEMRECHTE (FILE PERMISSIONS)? $ ls –al ↵ # List all files in long format total 200 drwxr-x---+ 30 dgre staff 960 Aug 16 07:46. drwxr-xr-x 5 root admin 160 Aug 16 07:45.. -rw-r--r-- 1 dgre staff 4008 Jul 26 21:46.bashrc drwx------@ 6 dgre staff 192 Aug 11 13:43 Desktop User Größe Datum der Group Anzahl Verweise Bytes letzten Name der Datei oder Änderung des Unterverzeichnisses, 1. Typ (d=Directory, -=File, l=softlink) Namen beginnend mit „.“ 2. Rechte v. „User“ (r=read, w=write, x=execute) werden bei ls versteckt, 3. Rechte v. „Group members“ (hier staff) s. ls –a um diese zu sehen 4. Rechte v. „Other“ (auch Welt genannt) 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 8 BEISPIEL: FILE MANAGEMENT SCRIPT l Aufgabe: Schreiben Sie ein Bash-Programm, welches einem Benutzer das Erstellen, Löschen von Dateien, sowie die Darstellung der Inhalte von Dateien erlaubt. l Der Benutzer soll Befehle über ein einfaches Shell-Menü eingeben. l Nach dem Erstellen einer Datei soll der Benutzer ebenfalls in der Lage sein Inhalte in der neu erzeugten Datei zu speichern. l Hinweis: Sie benötigen Funktionen, Bedingungen und Schleifenkonstrukte für die Umsetzung des Programmablaufs, sowie Befehle im Umgang mit dem Dateisystembaum. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 9 QUIZ ZUR WIEDERHOLUNG https://partici.fi/54815345 [Bild von vecstock auf Freepik] 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 10 WIEDERHOLUNG C PROGRAMME ÜBERSETZEN Quelle: Dennis Grewe 11 WIE ARBEITET EIN COMPILER? l Ein Compiler übersetzt ein Computerprogramm einer (von menschen lesbarer) Programmiersprache in die Binärrepräsentation der Zielarchitektur. l $ gcc –Wall –O2 –o app app.c # all warnings, optimization ! *#+F,E!-C'E! "#$%C'EF!.L0E,1!-C'E! OC34EF! 5S,+17L'E!-C'E! app.c Gcc ruft C-Präprozessor, übersetzt app.o Der Linker bindet app alle #defines und #includes alle Objektdateien Gcc übersetzt C code in mit Bibliotheken Maschinenassembler der Zielarchitektur Assembler genieriert binäre Objektdaten 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 12 WIEDERHOLUNG - PROZESSE l Ihr Programm app.c: #include Prozess #include main: Text / #include... Code static int mama=42; myfunc: Segment void myfunc(char * mem) {... mama=4711; mama=42 Data }... Segment int main (int argc, char* argv[]){ char * mem = malloc(1024); Alloziierter HEAP myfunc(mem); Speicher Speicher printf("mama:%d mem:%p pid:%d\n", mama, mem, (int)getpid()); return EXIT_SUCCESS; IP-RetAddr Stack } char * mem; Segment l Der Compiler übersetzt das C Programm:... gcc –Wall –O2 –o./app app.c l Das OS startet für./app einen Prozess, darin wird Speicher angelegt für das Text & Data Segment und springt in main. Nachzuvollziehen mit strace./app 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 13 WIE FUNKTIONIERT ABSTRAKTION DER HARDWARE? (1/3) Anwendungsprogramme l Das Betriebssystem abstrahiert von der Hardware. Grafische Benutzeroberfläche System-nahe Programme Es virtualisiert die Hardware … Bibliotheken l Jedes Programm besteht aus min. 1 Prozess l Jeder Prozess besteht min. 1 Thread (Ausführungspfad) l Für jeden Thread wird l die CPU l der Speicher / Speicherbereich, Software Betriebssystem Treiber l die Tastatur, Hardware RAM l … ihre Lieblingsressource GPU CPU l vom Betriebssystem zugeteilt! HDD Chipsatz USB controller „North Bridge“ 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 14 WIE FUNKTIONIERT ABSTRAKTION DER HARDWARE? (2/3) Anwendungsprogramme l Klassifikation von Ressourcen, z.B.: Grafische Benutzeroberfläche l Hardware- und Software-Ressourcen System-nahe Programme l entziehbar vs. nicht entziehbar Bibliotheken l exklusiv vs. gemeinsam nutzbar Speicher- Task- IPC- l Beispiele: Subsystem Scheduler Subsystem l CPU, Hauptspeicher, Drucker, … Netzwerk- Dateien- l Das Betriebssystem regelt den konfliktfreien Zugriff auf Subsystem Subsystem Ressourcen Software Betriebssystem Treiber l Oft verwendet das Betriebssystem verschiedene Scheduling- Hardware RAM Algorithmen für die Zuteilung GPU CPU l Dabei sind verschiedene Subsysteme des Kernels involviert! HDD Chipsatz USB controller „North Bridge“ 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 15 WIE FUNKTIONIERT ABSTRAKTION DER HARDWARE? (3/3) Prozess 1 Prozess 2 Prozess 3 Prozess 4 l Für das Betriebssystem ist jede Anwendung ein User- einzelner Prozess (darin ausführbarer Thread). Alle Prozesse laufen unabhängig von einander: l Prozesse laufen im User-Space Kernel-Space l Das Betriebssystem läuft im Kernel-Space l Diese Trennung erlaubt den perfekten Schutz zwischen Prozessen (und dem Kernel) Software Betriebssystem Treiber l Dieser Schutz funktioniert nur mittels CPU Hardware RAM Unterstützung (z.B. „priviligierte Instruktion“). GPU CPU HDD Chipsatz USB controller „North Bridge“ 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 16 WAS IST EIN SYSTEMCALL? Prozess 1 Prozess 2 Prozess 3 Prozess 4 l Jeder Prozess kann über Systemcalls (spezielle User- Programmierschnittstelle zwischen Prozess und Betriebssystem) Funktionalität des Betriebssystem aufrufen. Diese Instruktionen laufen im Kernel-Space. Kernel-Space l Einige Beispiele für (UNIX) API wären die Calls: l open: Öffnen einer Datei l read: Lesen aus einem Dateidiskriptor l clone: repliziert den aufrufenden Prozess, d.h. es läuft eine Software Betriebssystem Treiber weitere Kopie des Prozesses Hardware RAM l gettimeofday: Zeit (im vDSO) GPU CPU l Mit dem Tool SystemTrace lassen sich Systemcalls nachverfolgen! $ strace./app HDD Chipsatz USB controller „North Bridge“ 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 17 SYSTEMCALL - QUIZ l Was schätzen Sie, wie viele Systemfunktionen bietet Linux (64bit)? l Was schätzen Sie, wie viele Systemfunktionen bietet Windows (Win64)? l Sources: l http://de.wikipedia.org/wiki/Systemaufruf l https://j00ru.vexillium.org/syscalls/nt/32/ 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 18 WIE WIRD EIN SYSTEMCALL AUFGERUFEN (ALTER LINUX WEG)? l Damit eine Anwendung einen Systemcall aufruft, muss(te) sie folgende Instruktionssequenz ausführen: l Beispiel: Systemcall um die PID des Prozesses herauszufinden l In C: In Assembler: l PID = getpid(); oder movl 0x27, %eax l PID = syscall(SYS_getpid); int $0x80 Setzt das EAX Register auf die Nummer des Dann „trappen“ wir in den Kernel via Interrupt-Gate Systemcalls getpid(): 39, hex.: 0x27, siehe mittels des Interrupt-Vektors mit der Nummer 128 arch/x86/entry/syscalls/syscall_64.t (hex.: 0x80)... bl l Linux verwendet(e) also für den Wechsel von User- in den Kernel-Space sogenannte Software-Interrupts! l Dieser Wechsel heißt Trap (engl. für Falle), bedeutet Interrupts „unterbrechen“ den laufenden Prozess … 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 19 INTERRUPTS Quelle: [Image by freepik] 20 WAS IST EIN INTERRUPT? l Ein Interrupt (engl. für “Unterbrechung“) ist ein Signal, in Hard- oder Software, welches das Betriebssystem anhält und es veranlasst zu untersuchen, was als nächstes zu tun ist. l Ein Interrupt hält vorübergehen einen laufenden Prozess an oder, wenn nötig, beendet ihn. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 21 WELCHE ARTEN VON INTERRUPTS GIBT ES? l Es werden folgende Arten von Interrupts unterschieden: Interrupt Klassen Werden von der Hardware Werden vom Prozessor (bspw. Peripherie-Geräten Asynchrone Interrupts Synchrone Interrupts selbst erzeugt! wie der Tastatur) erzeugt! Exceptions/Prozessor- Systemcalls / SW- Interrupts Interrupt int 0x80 Unterbrechung vor der Faults Ausführung, z.B. PageFault Unterbrechung nach der Traps Ausführung, z.B. Div0 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 22 INTERRUPT KLASSIFIKATION AM BEISPIEL VON INTEL: l Um Unterscheidung Interrupt / Exception zu untermauern liefert auch Intel eine Dokumentation (wie alle CPU-Hersteller). l Quelle: Intel 64 and IA-32 Architectures Software Developer‘s Manual Kapitel 6.4, Seite 147 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 23 WAS SIND HARDWARE-INTERRUPTS? l Zwei Methoden des Betriebssystem zur Kommunikation mit Hardware: l Polling: Das OS fragt die Hardware periodisch nach neuen Daten l Interrupts: Die Hardware meldet sich und unterbricht die CPU! RAM GPU CPU Interrupt-Leitung HDD Chipsatz USB controller „North Bridge“ l Ein moderner x86-64 Prozessor kann viele (>100) Hardware-Interruptquellen unterscheiden. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 24 INTERRUPTS UNTER LINUX l Die seit Systemstart ausgeführten Interrupts können eingesehen werden: l /proc/interrupts (s. kernel/irq/proc.c) Int# Welche CPUs (cores) welchen/wie viele Interrupts bedient haben? Hier 1 CPU Den Namen des Treibers Die (durch VM-emulierte) Schnittstelle: APIC: Advanced Programmable Interrupt Controller Information zu einzelnen Interrupt-Typen, bspw. wie häufig Interrupts wg. PMI aufgetreten sind. Architektur- abhängige Interrupts 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 25 WIE SIEHT DER ABLAUF VON HW-INTERRUPTS AUS? l Ein vereinfachter Ablauf eines Hardware-Interrupts: l 1. Ein Gerät meldet Interrupt über Interrupt-Leitung l 2. Der Mikroprozessor wird unterbrochen l 3. Die ausgeführte Anwendung bemerkt davon nichts (außer, dass sie evtl. etwas verzögert reagiert) l 4. Eine Interrupt-Behandlungsroutine (Interrupt Service Routine (ISR)) liest Daten in einen Betriebssystem internen Puffer l 5. Betriebssystem springt in die unterbrochene Anwendung zurück l 6. Periodisch muss der Betriebssystem-interne Puffer kopiert werden l 7. Wartet die Anwendung auf die Daten (bspw. Daten von der Festplatte) bis diese gelesen werden. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 26 BESONDERHEITEN VON HARDWARE-INTERRUPTS l Interrupts werden durch Interrupt Service Routinen (ISRs) abgearbeitet. Das OS kann mit der CPU weitere Interrupts “maskieren“: l damit werden weitere Interrupts deaktiviert, l bspw. um die Abarbeitung des derzeitigen Interrupts nicht zu stören (fatal wäre eine Rekursion!) l Bestimmte Hardware-Interrupts sind nicht maskierbar (bspw. Memory Errors ECC, Power failure) l Interrupts können eine Priorität besitzen, sodass höherpriorisierte Interrupts andere ISRs unterbrechen l Generell gilt: die ISR-Routinen sollten so schnell wie möglich beendet sein! 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 27 SYSTEMCALLS UND PRIVILEGIERTER KERNEL-SPACE Quelle: [Image by pikisuperstar on Freepik] 28 SYSTEMCALLS (INTEL ARCHITEKTUR) (1/3) l Der Intel 80386 bietet eine Instruktion für einen Software- Interrupt zum Sprung in den Kernel-Space privilegierten Kernel Modus … l In Assembler: movl 0x27, %eax User-Space int $0x80 l Quelle: Intel® 64 and IA-32 Architectures Software Developer Manuals 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 29 SYSTEMCALLS (INTEL ARCHITEKTUR) (2/3) l Der Soft-Interrupt int 0x80 ist „langsam“, daher gibt es ab dem Intel 80586 Chip die schnellere Instruktion sysenter. Für den 64-bit Modus gibt es eine neue Instruktion: syscall und sysret (für den Rücksprung). Jede Instruktion hat einen hex. Operationcode und Beschreibungen, in welchem Modus sie gültig ist. Erklärung der Funktionalität für Entwickler. Hier ist z.B. interessant, dass die Instruktion nicht den Stack-Pointer sichert; dies muss der Kernel (oder die glibc) immer selbst machen. Quelle: Intel® 64 and IA-32 Architectures Software Developer Manuals 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 30 SYSTEMCALLS (INTEL ARCHITEKTUR) (3/3) l Dazu werden die prozessorinternen Schritte gelistet (nur für Ihr Verständnis!): Falls eine Instruktion in diesem Prozessormodus (#*arg!h* Intel) nicht unterstützt ist... Das Code-Segment Register wird initialisiert: vom OS bereitzustellen (für Profis: siehe Global Deskriptor Table (GDT)) Current Priviledge Level auf Null Das Stack Segment Register wird initialisiert -- wie CS. Quelle: Intel® 64 and IA-32 Architectures Software Developer Manuals 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 31 AI CODE BEISPIEL SYSTEMCALLS GETPID() Quelle: [Image by Freepik] 32 MESSEN VON SYSTEMCALLS l Nun wollen wir die kennengelernte Methoden ausmessen. l Was schätzen Sie, wie lange dauert ein Systemcall? l Lassen Sie uns ein C-Programm schreiben, welches dies ausmisst. l Sie finden den Sourcecode auch unter: https://gitlab.hs-esslingen.de/dgrewe/betriebssysteme l Aufgabe: l C-Funktionen entwickeln, welche die Ausführungszeit von drei verschiedenen Methoden zum Abrufen der Prozess-ID (PID) in einem Linux-System misst und vergleicht. Diese Methoden sind: l getpid(): Eine Standard-C-Bibliotheksfunktion (libc). l syscall(SYS_getpid): Ein direkter Systemaufruf mit der Syscall-Funktion. l my_getpid_int0x80(): Eine benutzerdefinierte Funktion, die den Software-Interrupt int 0x80 verwendet, um den Systemaufruf durchzuführen. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 33 SYSTEMCALLS AUSMESSEN (1/4) // C-Preprocessor directives #include C-Präprozessor Direktiven: include von #include Headern, um Fkt. bekannt zu machen & #include define für Konstanten und Textersetzung! #include #define NUM 10000 #define ull unsigned long long Instruktion unsigned long long getrdtsc (void) { unsigned int hi, lo; __asm__ __volatile__("rdtsc":"=a"(lo),"=d"(hi)); Inline-Assembler, auslesen des Time-Stamp // merge low-order (lo) and high-order Counters in zwei Variablen für high und low. // (hi) 32-bits into a 64-bit value return (((ull)hi

Use Quizgecko on...
Browser
Browser