33
Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking, Multiprocessing, Multithreading, Threads, Prozesszustände, Verwaltungsmechanismen und -verfahren, Probleme Speicherverwaltung Konzepte, Adressierungsarten, Aufgaben, Speicherbelegung, verschiedene Techniken der Adressierung, Mechanismen zur Speicherverwaltung

Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Embed Size (px)

Citation preview

Page 1: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Gliederung Lehrmodul 1

• Grundsätzlicher Aufbau von Betriebssystemen

Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten

• Prozessverwaltung

Multitasking, Multiprocessing, Multithreading, Threads, Prozesszustände,

Verwaltungsmechanismen und -verfahren, Probleme

• Speicherverwaltung

Konzepte, Adressierungsarten, Aufgaben, Speicherbelegung, verschiedene

Techniken der Adressierung, Mechanismen zur Speicherverwaltung

Page 2: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Grundsätzlicher Aufbau von Betriebssystemen

Typen von Betriebssystemen

Beispiele:

Mainframe OS/390, MVS, BS2000

Unix Server Sun Solaris, HP-UX, IBM AIX, Linux

PC/Server Windows XX, MacOS

Echtzeitsysteme VX-Works, BOS

Page 3: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Grundsätzlicher Aufbau von Betriebssystemen

Aufgaben eines Betriebssystems:

• Hardwareerkennung, Initialisierung, Benutzeroberfläche

• Verwaltung/Steuerung von Systemressourcen

- Prozessor, Speicher, Geräte

• Programmausführung

• Bereitstellung von Werkzeugen

• Absicherung und Isolierung der Benutzer und Prozesse

• Kommunikation von Prozessen

• Zusammenarbeit von Prozessoren

Page 4: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Grundsätzlicher Aufbau von Betriebssystemen

Anforderungen an ein Betriebssystem:

• Multiuserfähigkeit

• Multiprozessorunterstützung

• Multitasking-, Multithreadingfähigkeit

• Kompatibilität

• Sicherheit

• Skalierbarkeit

• Zuverlässigkeit und Stabilität

• Netzwerkfunktionalität

• Applikationen

Page 5: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Grundsätzlicher Aufbau von Betriebssystemen

Struktur und Konzepte

Definition Betriebssystem:

Menge von Programmen, die Benutzern die effiziente und gemeinsame Nutzung

einer Rechenanlage ermöglicht.

• Monolithische Struktur

• Schichtenmodell

• Client-Server Architektur

Page 6: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Grundsätzlicher Aufbau von Betriebssystemen

UNIX - SystemarchitekturBenutzerschnittstelle

Kommandointerpreter (Unix-Shell)

UNIX-Werkzeuge Anwenderprogramme

Standard C-Bibliothek

Systemkern (Kernel)Treiber

HARDWARE

Möglichkeit die Hardware anzusprechen

Systemaufrufe

Page 7: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Grundsätzlicher Aufbau von Betriebssystemen

Bestandteile eines Rechnersystems

Benutzer 1 Benutzer n

Compiler, Editoren, Assembler, Applikationen

BetriebssystemProzess-, Speicher- und Dateiverwaltung

Steuerung I/O-Geräte

Rechner-hardware

Page 8: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

Begriffserklärungen:

Programm

= ist die statische Abfolge von Instruktionen (Befehlen)

Prozess

= die dynamische Ausführung eines Programmes durch das Betriebssystem

mit den benötigten Ressourcen

Thread

= sequentielle Ausführungseinheit innerhalb eines Prozesses (Teilprozess)

Page 9: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

Multitasking

- Aufteilung der Prozessorzeit auf verschiedene Prozesse

Prozess 1

Prozessor

Prozess 2

Zeit

Page 10: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

Multiprocessing

Gleichzeitige Ausführung mehrerer Prozesse auf mehreren Prozessoren Prozess A Prozess B Prozess C

Daten

Registersatz

Code

Daten

Registersatz

Code

Daten

Registersatz

Code

Page 11: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

asymetrisches Multiprocessing

• Betriebssystem zentral auf einem Prozessor

• Verteilung der Prozesse

Betriebssystem

Prozess

Prozess

Prozess

Prozessor A Prozessor B

Page 12: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

symetrisches Multiprocessing

• Verteilung des Betriebssystems

• Zugriff aller Prozessoren auf den gesamten Speicher

Betriebs-system

Prozess

Prozess

Betriebs-system

Prozess

Prozess

Prozessor A Prozessor B

Page 13: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

Multithreading

= ist die Aufteilung von Prozessen in mehrere parallele Threads

(nebenläufige Aktivitäten)

Thread A Thread B Thread C

Programmcode Programmcode

Registersatz Registersatz Registersatz

Page 14: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

Threads

Threadstuktur

• Ein Thread besitzt:

- Befehlszähler

- Registerbelegungssatz

- Stack (für jeden Prozess, bei geschachtelten Unterprogrammen die

Rücksprungadressen

• Threads teilen sich den Adressraum und die Anweisungen des umfassenden

Prozeses

• Ein Thread wird auch lightweight process (LWP) genannt.

Normaler Prozess dagegen: heavyweight process (HWP).

Page 15: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

Prozesszustände

wartendausgelagert

wartend

rechnend

bereitausgelagert

bereit

Warte

Auslagern

freiwillig auf Tastatureingabe

Signal

Auslagern

Einlagern

Anhalten

Weiter

unfreiwillig auf

Scheduler oder Dispatcher

kann immer nur ein Prozess sein

Programm im Hauptspeicher Programm auf Festplatte

Signal

Zeitscheibe abgelaufen

Page 16: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

• UID PID PPID C TIME TTY TIME CMD• root 0 0 0 Apr 25 ? 0:01 sched• root 1 0 0 Apr 25 ? 5:07 /etc/init -• root 2 0 0 Apr 25 ? 0:00 pageout• root 3 0 1 Apr 25 ? 1739:26 fsflush• root 689 1 0 Apr 25 ? 0:00 /usr/lib/saf/sac -t 300• root 412 1 0 Apr 25 ? 0:00 /usr/lib/power/powerd• root 17 1 0 Apr 25 ? 2:58 vxconfigd -m boot• root 67 1 0 Apr 25 ? 0:00 /usr/lib/sysevent/syseventd• root 313 1 0 Apr 25 ? 0:02 /usr/sbin/rpcbind• root 420 1 0 Apr 25 ? 0:01 /usr/lib/utmpd• root 356 1 0 Apr 25 ? 0:00 /usr/lib/autofs/automountd• root 394 1 0 Apr 25 ? 1:13 /usr/sbin/nscd• root 368 1 0 Apr 25 ? 0:04 /usr/sbin/syslogd• root 348 1 0 Apr 25 ? 0:12 /usr/sbin/inetd -s• root 426 1 0 Apr 25 ? 0:00 /usr/sadm/lib/wbem/cim• root 352 1 0 Apr 25 ? 0:00 /usr/lib/nfs/lockd• daemon 353 1 0 Apr 25 ? 0:00 /usr/lib/nfs/statd• root 375 1 0 Apr 25 ? 0:02 /usr/sbin/cron• oracle 28462 1 0 10:02:12 ? 0:00 oraclePKSA (LOCAL=NO)• root 399 1 0 Apr 25 ? 0:00 /usr/lib/lpsched• root 450 1 0 Apr 25 ? 0:00 /bin/ksh • root 422 1 0 Apr 25 ? 0:00 /usr/lib/inet/xntpd• root 436 1 0 Apr 25 ? 0:02 /usr/sbin/vold• root 735 609 0 Apr 25 ? 64:59 mibiisa -r -p 32793• root 433 1 0 Apr 25 ? 0:00 /usr/lib/sendmail -bd -q15m• oracle 1067 1 0 14:54:34 ? 0:00 oraclePKSL (LOCAL=NO)

Page 17: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

Scheduling

• Vergabestrategie für CPU an lauffähige Prozesse und Job-Verdrängung („job-preemption“).

• Im Gegensatz zu Dispatcher berücksichtigt der Scheduler auch den bisherigen Verlauf eines Prozesses bei seiner Entscheidung, welcher Prozess als nächster aktiviert werden soll.

• Optimierungsgesichtspunkte:

- kleine Bedienzeiten für die Benutzer

- gute Auslastung der (teuren) Betriebsmittel)

- hoher Durchsatz (Anzahl verarbeiteter Jobs pro Zeit)

- „faire“ Wartezeiten für alle Benutzer

- garantierte Abwicklung innerhalb vorgegebener Zeiten für wichtige Jobs

Page 18: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

• Aufgaben des Schedulers

- Prioritätsentscheidungen aufgrund von:

Job-Umgebung

- geschätzte Restlaufzeit

- Betriebsmittelanforderungen

- Benutzerprioritäten

Rechner-Umgebung

- Prozessorauslastung

- Peripherieauslastung

- Warteschlangengrößen

• Überprüfung, ob die erforderlichen Betriebsmittel vorhanden sind

Page 19: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

Dispatcher

- teilt einen rechenwilligen Prozess einen Prozessor zu

- muß sehr effizient implementiert sein, da Prozesswechsel im 100 Millisekundenbereich vorkommen

- ist für kurzfristige Prozessorzuteilung zuständig

• Steuerung der Prozessor-Umschaltung durch Zeitgeber

• Aufgaben des Dispatchers (bei Kontext-Wechsel)

- Sicherung des Prozessorzustandes im PCB des geraden aktiven Prozesses

- Setzen des neuen Prozesszustandes im PCB und ggf. Umketten des PCB in zugehörige Warteschlange

- Setzen des Prozessorzustandes aus dem PCB des Prozesses, dem als nächsten der Prozessor zugeteilt wird

- Aktivierung des neuen Prozesses

Page 20: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

Scheduling-Verfahren

Beispielhafter Vergleich bei einfachem Stapelbetrieb:

- n Jobs im betrachteten Zeitabschnitt vorhanden

- Ti Turnaround von Job i (gesamte Bearbeitungs- und und Wartezeiten, Verweilzeit)

First come first served (FCFS)

• Bearbeitungsreihenfolge gleich Ankunftsreihenfolge

• Durchschnittliche Wartezeiten variieren stark und sind meist recht hoch (bei großer Anzahl Jobs)

Page 21: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

Shortest job first

• Zu jedem Job ist die (geschätzte) Laufzeit bekannt.

• Es kommt derjenige Job zur Ausführung dessen Laufzeit aktuell am kürzesten ist

• Bei Überschreitung der geschätzten Laufzeit, Bestrafungsmechanismen (z.B. überzogene Zeiteinheiten teurer abrechnen, Job abbrechen etc.)

• Ergibt unter den non preemptive Systemen die minimalste Wartezeit für eine gegebene Menge von Prozessen

Page 22: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

Round-Robin Scheduling

• Im einfachsten Fall sequentielle Abarbeitung der Prozesse in einer Multitasking-Umgebung.

• Es wird ein Zeitquantum q fest vorgegeben und es erfolgt eine Reihum-Zuteilung des Zeitquantums für alle Prozesse.

• dabei gilt:

für q --> 0: quasi gleichzeitige Bedienung aller Jobs, aber sehr großer Overhead.

für q --> : Übergang zu FCFS

Page 23: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

Synchronisation

• notwendige Voraussetzung für Wechselwirkungen zwischen Prozessen

- mindestens zwei Prozesse vorhanden

- die Prozesse laufen (quasi-)parallel ab

• Es werden keine Annahmen über Laufzeiten sowie über den Zeitpunkt des Prozesswechsels gemacht

• Voraussetzung ist die Existenz elementarer non preemptive Operationen

Probleme, die sich bei konkurrierenden Prozessen ergeben:

- Umschaltung des Programmablaufs (Dispatcher und Scheduler)

- Sicherung des einen Prozesses gegen unerwünschte Einflüsse der anderen

- Nutzung gemeinsamer Betriebsmittel

Page 24: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

Kritische Abschnitte

• unkritischer Abschnitt ist ein (Programm-)abschnitt, in dem nicht auf Betriebs-

mittel zugegriffen wird, die von mehreren Prozessen gleichzeitig benutzt werden.

• kritischer Abschnitt ist eine Menge von Anweisungen, in denen das Ergebnis ihrer Ausführung auf unvorhersehbare Weise variieren kann, wenn Variablen, auf die in diesem Abschnitt zugegriffen wird und die auch für andere parallel laufende Prozesse verfügbar sind, während der Ausführungszeit verändert werden.

Lösung:

- es darf sich zu jedem Zeitpunkt nur ein Prozess im kritischen Abschnitt befinden

- Ein Prozess innerhalb eines kritischen Abschnittes verläßt diesen wieder nach Ablauf einer endlichen Zeit

- wenn ein Prozess in einen kritischen Prozess eintreten will, muß ihm das nach einer endlichen Zeit gestattet werden

Page 25: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Prozessverwaltung

Deadlocks

• Verklemmung, d.h. eine Gruppe von Prozessen (mindestens zwei) wartet auf den Eintritt von Bedingungen, die nur durch Prozesse dieser Gruppe hergestellt werden können.

P1 B2

P2B1

Prozess 1 fordert Betriebsmittel B2 an

Betriebsmittel B2 ist von Prozess 2 belegt

Prozess 2 forder Betriebsmiite B1 an

Betriebsmittel B1 ist von Prozess 1 belegt

Page 26: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Speicherverwaltung

Speicherhierarchie:

RegisterL1-Cache

L2-Cache

Arbeitsspeicher (RAM)

Erweiterungsspeicher

Magnetplattenspeicher

Optische Plattenspeicher

Kosten Zugriffszeit

Kapazität

Page 27: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Speicherverwaltung

Adressfeld

• Zur Adressierung einer Speicherstelle verwendet ein Prozessor eine bestimmte Anzahl Bits. Die Länge des Adressfeldes gibt Auskunft über die adressierbaren Speicherstellen und somit über den Adressraum eines Rechners.

Adressraum

• physikalischer Adressraum - als Hauptspeicher real im Rechner vorhanden

• logischer Adressraum - auch virtueller Adressraum, der einem Programm zur Verfügung steht. Setzt sich aus Hauptspeicher + Plattenspeicher zusammen.

Page 28: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Speicherverwaltung

Aufgaben der Speicherverwaltung

• dynamische Adressumsetzung

• Bereitstellung von Speicherbereichen für

- gemeinsam genutzten Programmcode

- gemeinsam genutzte Daten für Interprozesskommunikation

• Schutz der Daten und Programme vor fehlerhaften/unberechtigten Zugriff

• dynamische Speicherzuteilung an die Prozesse

Page 29: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Speicherverwaltung

Hauptspeicherbelegung

Im einfachsten Fall erfolgt eine Aufteilung des Hauptspeichers in zwei Teile:

1. residenter Teil des Betriebssystems (sog. Monitor)

2. Benutzerprogramme (Code + Daten + Stack)

• Beispiel MS-DOS (vereinfacht)

ROM

Benutzer-

programme

BS

Page 30: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Speicherverwaltung

• Swapping-Technik

Das Ein- und Auslagern von Bereichen des Hauptspeichers auf Magnetplatten-

speicher nennt man Swapping virtueller Speicher

• Speicherbelegung bei Multitasking-Systemen

Bei modernen Betriebssystemen (UNIX, NT) übernimmt der sog. Memory

Manager die Speicherverwaltung, beispielsweise anhand einer Speicher-

belegungstabelle

Page 31: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Speicherverwaltung

Seitenverwaltung

• Adressrelokation

- Fähigkeit, daß Programme an verschiedenen Speicherstellen im Haupt-

- speicher ablauffähig gemacht werden

• virtuelle Adressierungsarten

- virtueller Adressraum ist erheblich größer als der physikalische

- ein Prozess weiß nicht, ob sich eine adressierte Speicherstelle im Haupt-

speicher oder im Hintergrundspeicher befindet

- Abbildung der virtuellen Adresse auf eine physikalische Adresse mit Hilfe

einer Abbildungsfunktion - Memory Management Unit (MMU)

Page 32: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Speicherverwaltung

Speicherverwaltungsmechanismen

• Seitenaustauschverfahren (Paging)

- Speicher wird in Blöcke fester Größe aufgeteilt

- logischer Adressraum wird in Seiten fester Größe aufgeteilt

- physikalische Adressraum wird in Kacheln fester Größe aufgeteilt

- Kachelgröße = Seitengröße

- für die Zuordnung der virtuellen Seiten zu den physikalischen Kacheln

legt das Betriebssystem für jeden Prozess eine Seitenersetzungstabelle

an.

• Assoziativspeicher (Transaction Lookaside Buffer, kurz TLB)

Zwischenspeicher im Hauptspeicher, der die zuletzt berechneten physikalischen Adressen enthält.

Page 33: Gliederung Lehrmodul 1 Grundsätzlicher Aufbau von Betriebssystemen Typen, Aufgaben, Anforderungen, Strukturen, Rechnerkomponenten Prozessverwaltung Multitasking,

Speicherverwaltung

Specherverwaltungsmechanismen - Fortsetzung

• Segmentierung

- Aufteilung des virtuellen Adressraumes in Segmente variabler Größe

Ohne Segmentierung Mit Segmentierung

BSunbenutzt

P1

unbenutzt

unbenutzt

P2

20 KB

50 KB

20 KB

10 KB

20 KB

P3

30 KB

BS

P1

P2

9 + 11 KB

50 KB

10 KB

15 + 5 KB

6 + 14 KB

P3 segmentiert

Code 9 KBDaten 15 KB

Stack 6 KB30 KB