55
Computer-Systeme – WS 12/13 - Teil 11/Routinen 03.12.2012 1 Computer-Systeme Teil 11: Routinen

Computer-Systeme Teil 11: Routinenwi.f4.htw-berlin.de/users/messer/LV/WI-GWI-RABS/Folien/CS-11/11-CS-Routinen-1.pdf · Computer-Systeme – WS 12/13 - Teil 11/Routinen 3 Die einzelnen

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Computer-Systeme – WS 12/13 - Teil 11/Routinen 03.12.2012 1

Computer-Systeme

Teil 11: Routinen

Computer-Systeme – WS 12/13 - Teil 11/Routinen 2

Übersicht

• Stack• Subroutinen• Makros• CPU-Modi• Traps

Computer-Systeme – WS 12/13 - Teil 11/Routinen 3

Die einzelnen Ebenen

Wir sehen uns in diesem Teil an, wie die Compiler höhere Objekteauf der Ebene des Assemblers realisieren.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 4

Stack I

• Ein Stack ist eine Organisation eines Speicherbereichs, um mit minimalen Aufwand beliebig komplexe arithmetische Ausdrücke bzw. Formeln einschließlich des Aufrufens von Unterprogrammen zu realisieren.

• Die push-Prozedur bringt einen Wert auf den Stack.• Die pop-Funktion holt den obersten Wert vom Stack und

liefert ihn als Wert.

• In den folgenden Beispiele möge der Stack-Pointer (SP) immer auf das oberste Element des Stacks zeigen.

• Der Stack möge von den hohen Adressen zu den niedrigenwachsen, d.h. mit voller werdenden Stack hat der SP einen immer kleineren Wert.

• Es gibt Stacks, die anders organisiert sind.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 5

Stack II – Pseudo-Notation

Instruction push(param) SP:= SP-sizeof(param);RAM[SP]:= param;

Instruction pop(size:= sizeof(int))SP:= SP+size;return (RAM[SP-size]);

Pop() hat einen optionalen Parameter, der die Größe deszu entfernenden Bereichs in Bytes angibt.Default ist die Größe eines INTs.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 6

Stack-Aufbau

SP ->

Durch Stackbelegter Bereich

Freier Bereich

Belegter Bereich

Richtung, inder der Stackwächst

HoheAdressen

NiedrigeAdressen

Stack-Pointer

(Stack)

Der Stack-Pointer ist einRegister, dessen Werte Adressenin einen bestimmtenSpeicherbereich sind

Computer-Systeme – WS 12/13 - Teil 11/Routinen 7

Stack-Operationen: push(), pop()

SP ->

(Stack)

Vorher

push(integer)

SP ->

Nachher

SP ->SP ->

(Stack)

integer

(Stack)

integer

(Stack)

Vorher Nachher

pop()

Computer-Systeme – WS 12/13 - Teil 11/Routinen 8

Beispiel: push(), pop() bei Operationen

Die Parameter werden mit pop() vom Stack geholt und die Ergebnissemit push() wieder auf diesen geschrieben.

SP ->

(Stack)

Vorher

Addition über Stack

SP ->

Nachher

(Stack)

integer: Ainteger: B

integer: A+B

Interner Ablauf

PROC Add:Regi st er R1= pop( ) 1. Oper andRegi st er R2= pop( ) 2. Oper andR2= R1+R2 Addi t i onpush( R2) Resul t at

[Analog zur Addition sind alleanderen Operationen gestaltet]

Computer-Systeme – WS 12/13 - Teil 11/Routinen 9

Bemerkung I

• Diese Architektur - Stackmaschine genannt - ist ein gedankliches Gebilde, das auf realen Architekturen per Software simuliert werden kann.

• Diese simulierende Software realisiert dann eine virtuelle Maschine durch einen Interpreter.

• Dieses Prinzip wird zur Realisierung von Java benutzt(der dann benutzte Byte-Code-Interpreter arbeitet stack-orientiert).

• Unabhängig davon ist immer ein Zugriff direkt auf alle Speicherzellen möglich.

In der Praxis gibt es keine reinen Stackmaschinen, sondern eineMischung aus Stackoperationen und direkten Zugriffen auf den Stack.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 10

Bemerkung II

• Stacks werden in folgenden Bereichen angewendet:– Ausrechnen von Formeln– Realisieren von Subroutinen– Behandlung von Ausnahmen (Exceptions)– Behandlung von Unterbrechungen (Interrupts)

• Ganz allgemein:Stacks werden immer benutzt, wenn "geschachtelte Dinge" behandelt werden, denn diese benötigen einen kurzzeitigen Zwischenspeicher.

Beispiele für "geschachtelte Dinge":Klammern in Ausdrücken, Blöcke in Java

Computer-Systeme – WS 12/13 - Teil 11/Routinen 11

Formelberechnung I

Es soll berechnet werden: (a+b) * (c-d)

SP ->

push a

SP -> a

(1) (2)

push b

SP ->ab

add

a+bSP ->

push c

SP -> ca+b

(5)

(3) (4)

push d

SP ->c

a+b

(6)

dSP -> c-d

a+b

(7)

sub mul

SP -> (a+b)*(c-d)

(8)

Computer-Systeme – WS 12/13 - Teil 11/Routinen 12

Formelberechnung II

• Werte, die erst später benutzt werden, werden auf den Stackgebracht und bleiben dort, bis sie gebraucht werden.

• Werte, die sofort gebraucht werden, werden von einer Operation während der Ausführung vom Stack geholt;dann wird das Ergebnis wieder auf den Stack gebracht.

• Mit einem Stack können beliebig komplexe, geschachtelte arithmetische Ausdrücke sowie Ausdrücke zur Berechnung von Adressen ausgewertet werden, z.B. die Berechnungen der Offsets bei Array-Zugriffen.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 13

Subroutinen I

• Es gibt immer wieder zu verwendende Code-Stücke.• Um diese nicht immer wieder neu programmieren zu

müssen, werden diese einmal im Speicher abgelegt und bei Bedarf angesprungen, ausgeführt und von dort zurück gekehrt.

• Prozedur = Procedure = Routine = Methode = Funktion = Benanntes Stück Code, das angesprungen und ausgeführt werden kann, um am Ende wieder zurückzuspringen

[die Begriffe werden später noch etwas erklärt]• Unter einer Subroutine wird hier der Oberbegriff für alle

eben genannten Begriffe benutzt.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 14

Subroutinen II

Hauptprogramm Code derSubroutine S

....

....call S(...)........

R:.... S:....

....

....

....

....

....return

(1) (2)

(3)

(4)(5)

Schritte beim Aufruf und beider Rückkehr einer Subroutine

Die Pfeile geben den Weg an,den der PC nimmt.

Der Code beider Routinenbefindet sich im selbenAdressraum

Computer-Systeme – WS 12/13 - Teil 11/Routinen 15

Subroutinen III

• Subroutinen können auch geschachtelt aufgerufen werden.• Die Subroutine, die am Anfang als erstes gestartet wird, wird

Hauptprogramm genannt.

• Wenn sich Subroutinen selbst aufrufen, wird dies Rekursiongenannt:– Direkte Rekursion liegt vor, wenn sich die betreffende

Subroutine selbst aufruft.– Indirekte Rekursion liegt vor, wenn die eigene Subroutine von

einer anderen Subroutine aufgerufen wird, die sie selbst aufgerufen hat.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 16

Subroutinen III - Schachtelungen

Hauptprogramm Code derSubroutine S

....

....call S(...)........

R:.... S:....

....call T(...)............return

(1) (2)(3)

(8)(9)

Code derSubroutine T

T:....

....

....

....

....

....return

(4)

(5)

(6)

(7)

Computer-Systeme – WS 12/13 - Teil 11/Routinen 17

Realisierung I

"call xyz" wird durch dieInstruktion jsr realisiertjsr = jump to subroutineEs wird die Rückkehradresseauf den Stack geschriebenund dann zur Routine gesprungen

"return" wird durch dieInstruktion rts realisiertrts = return from subroutineEs wird die Adresse vomStack geholt und dorthingesprungen

SP->SP-> Addresse

Vorher Nachher

SP-> Addresse

Nachher

SP->

Vorher

jsr-Instruktion

rts-Instruktion

Computer-Systeme – WS 12/13 - Teil 11/Routinen 18

Realisierung II

• Durch die Verwendung des Stacks ist eine einfache Realisierung bei geschachtelten sowie auch bei rekursiven Aufrufen von Subroutinen möglich.

• Die Instruktionen jsr und rts sind hier fiktiv. Bei jedem Prozessor heißen sie anders, haben aber im Prinzip dieselbe Bedeutung wie jsr und rts.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 19

Stackaufbau eines Programmes I

Lokale Variablen

SP ->Zwischen-ergebnisse

belegter Bereich(Stack)

Freier Bereich

Globale Variablen(Heap)

Richtung, inder der Stackwächst

HoheAdressen

NiedrigeAdressen

SL ->

Computer-Systeme – WS 12/13 - Teil 11/Routinen 20

Bemerkungen

• Im globalen Bereich (Heap) werden die mit static und die mit extern deklarierten Variablen (jedenfalls in C) abgelegt.

• Subroutinen benötigen für das Speichern von Zwischen-ergebnissen auch Variablen, die aber nur während ihrer Aktivierung vorhanden sind.

• Diese Variablen müssen beim Aufruf erzeugt sowie direkt vor der Rückkehr wieder entfernt werden.

• Da dies auch bei Rekursion erfolgen soll, müssen diese Variablen auf den Stack gebracht werden: So geschachtelt wie die Aufrufe, so geschachtelt sind diese Variablen auf dem Stackvorhanden.

• Lokale Variablen = Variablen, die nur während der Laufzeit einer Subroutine existieren

• Damit der Stack nicht in den Heap hineinläuft (dann zeigt der SP in den Bereich der globalen Variablen), gibt es für ihn eine Begrenzung (Stack-Limit: SL).

Computer-Systeme – WS 12/13 - Teil 11/Routinen 21

Stackaufbau eines Programmes II

• Dies gilt für– alle Programme oberhalb des

Betriebssystems unabhängig von der Programmiersprache

– Software innerhalb des Betriebssystems– das Betriebssystem selbst auf der nackten

Hardware (Kernel)

• Mit anderen Worten: es gilt für jede Software.

Stack

max.

Code

min.

SP->

Heap

SL->

Computer-Systeme – WS 12/13 - Teil 11/Routinen 22

Beispiel: Klasse in Java

• Lebensdauer = Zeitlicher Bereich zwischen Erzeugen eines Objektes bzw. einer Variablen und Entfernen

• Sichtbarkeit = Textueller Bereich innerhalb des Java-Programms, innerhalb dessen der Name des Objekts benutzt werden kann.

class Point {double x; // x-Koordinatedouble y; // y-Koordinate

double diffX(double xPosition) {double diff;diff= x-xPosition;return(diff);

}}

Lokale Variablen (einer Klasse)

Lokale Variable (einer Methode)

Computer-Systeme – WS 12/13 - Teil 11/Routinen 23

Parameter

• Wenn eine allgemeine Subroutine zum Ausgeben einer Variablen geschrieben werden soll, dann muss es möglich sein, zu verschiedenen Zeitpunkten auch verschiedene Variablen auszugeben.

• Um derartige Subroutinen schreiben zu können, werden Parameter benötigt, über die der Subroutine mitgeteilt wird, womit sie ihre Aufgabe lösen soll.

• Parameter = Wert einer Variablen aus dem Bereich der aufrufenden Subroutine, mit der die aufgerufene Subroutine arbeiten soll

• Dieses Übergabe-Verfahren wird Call-by-Value genannt, da eine Kopie des Wertes übergeben wird.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 24

Wieder das Beispiel: Klasse in Java

• Auch hier muss das Problem der Schachtelung gelöst werden.• Parameter werden daher wie lokale Variablen gehandelt.

class Point {double x; // x-Koordinatedouble y; // y-Koordinate

double diffX(double xPosition) {double diff;diff= x-xPosition;return(diff);

}}

Parameter einer Methode

Computer-Systeme – WS 12/13 - Teil 11/Routinen 25

Stack-Aufbau während einer Subroutine

SP ->

Parameter belegter Bereich(Stack)

Freier Bereich

Richtung, inder der Stackwächst

Lokale Variablen

Rückkehr-Adresse

Stack-Aufbauwährend derAusführungder Subroutine

Computer-Systeme – WS 12/13 - Teil 11/Routinen 26

Schrittweiser Aufbau des Stacks I

Aufrufer:

push Parameter N......push Parameter 2push Parameter 1 Lokale Variablen

SP ->

Parameter N

Aufruf: Subroutine(Parameter 1, ..., Parameter N)

...Parameter 2Parameter 1

(1) (2)

Lokale VariablenSP ->

Para

met

er

Aufrufer:

......

Computer-Systeme – WS 12/13 - Teil 11/Routinen 27

Schrittweiser Aufbau des Stacks II

Parameter

Subroutine:

push Lokale Var.

<- SP

Aufruf: Subroutine(Parameter 1, ..., Parameter N)

(3) (4)

Lokale Variablen

SP ->

Aufrufer:

......push ....JSR Subroutine

Return-Adresse

Parameter

Return-Adresse

LokaleVariablen

Lokale Variablen

Variablen derSubroutine

Computer-Systeme – WS 12/13 - Teil 11/Routinen 28

Schrittweiser Aufbau des Stacks III

Parameter

Aufruf: Subroutine(Parameter 1, ..., Parameter N)

(5) (6)

Lokale Variablen

SP ->

Return-Adresse

Parameter

Return-Adresse

Lokale Variablen

Subroutine:

push Lokale Var.......Berechnungen

LokaleVariablen

Ausdrücke

Subroutine:

......pop Lokale Var.

SP ->

Computer-Systeme – WS 12/13 - Teil 11/Routinen 29

Schrittweiser Aufbau des Stacks IV

Parameter

Aufruf: Subroutine(Parameter 1, ..., Parameter N)

(7) (8)

Lokale Variablen

SP ->

Lokale Variablen

Subroutine:

......RTS

Aufrufer:

......pop Parameter

SP ->

Computer-Systeme – WS 12/13 - Teil 11/Routinen 30

Schrittweiser Aufbau des Stacks V

Aufrufer

......push Parameter N......push Parameter 2push Parameter 1JSR Subroutinepop Parameter......

Subroutine

push Lokale Variablen....Berechnungen....pop Lokale VariablenRTS

Computer-Systeme – WS 12/13 - Teil 11/Routinen 31

Erläuterungen

• Nach dem vorgestellten Schema arbeiten die meisten Aufrufe von Subroutinen.

• Bei einer Subroutine ohne Parameter entfällt das "push Parameter" und "pop Parameter".

• Bei einer Subroutine ohne lokale Variablen entfällt das "push Lokale Variablen" und "pop Lokale Variablen".

• Wenn die Subroutine selbst einen Wert als Ergebniszurückliefern soll, wie z. B. sin(x), dann wird der Platz für das Resultat vom Aufrufer als besonderer Parameter gleich zum Anfang auf den Stack gebracht, so dass nach dem Aufruf das Resultat als oberstes Element auf dem Stacksteht (siehe Formelberechnung durch Stack).

Computer-Systeme – WS 12/13 - Teil 11/Routinen 32

Begriffe

• Statt Routine bzw. Subroutine wird beim objektorientierten Ansatz von Methoden gesprochen.

• Funktion = Routine, die einen Wert an den Aufrufer liefert• Prozedur = Routine, die keinen Rückgabewert hat

(Java, C und C++: void)

• Activation Record = Teil des Stacks, der alle temporären Daten eines Subroutinenaufrufs beinhaltet (Parameter, Rückkehradresse, lokale Variablen)

Computer-Systeme – WS 12/13 - Teil 11/Routinen 33

Kopf und Körper einer Subroutine

• Kopf = Head = Schnittstelle der Subroutine nach außen(Name, Parameter, Resultat samt Typdeklaration)Der Kopf wird auch Signaturgenannt.

• Körper = Body = Code einer Subroutine ohne Kopf, d.h. der Teil nach dem Anlegen der lokalen Variablen bis zum Entfernen der lokalen Variablen und Rückkehr.

float sin(float winkel)

{ int i, j, k; i= 10; .... return Value; }

Name Parameter

Kopf

Körper

Lokale Variablen

Zu lieferndesResultat

Resultat

Beispiel für eine Funktion

Computer-Systeme – WS 12/13 - Teil 11/Routinen 34

Makro

• Makro = Stück Code, der bei jedem Aufruf an die Stelle des Aufrufs hineinkopiert wird und den Aufruf ersetzt

• Ein Makro hat auch einen Kopf und einen Körper. Der Kopf definiert den Namen und die Parameter, der Körper das, was beim Aufruf hineinkopiert werden soll.

• Der Aufruf selbst wird entfernt und stattdessen der Körper samt ersetzten Parametern eingesetzt.

#define TEST (a==b)

if TEST { a= 0; b=1;}

if (a==b) { a= 0; b=1;}

Expansion

Definition desMacros TEST

Name Körper

Beispiel eines Makro in der Sprache C

Aufruf desMacros TEST

Computer-Systeme – WS 12/13 - Teil 11/Routinen 35

CPU-Arbeitsmodi I

• Im Status-Register der CPU befindet sich ein Bit zum Vermerken des Arbeitsmodus der CPU:– User-Mode: Normaler, eingeschränkter Modus– Kernel-Mode: nur vom Betriebssystem benutzter Modus ohne

jede Einschränkung

• Manchmal sind es mehrere Bits, so dass es mehr als 2 Modi der CPU gibt, z.B. bei den Intel-Prozessoren IA32.

• Die Einschränkung im User-Mode betrifft die Ausführung folgender Instruktionsgruppen:– I/O-Instruktionen (falls vorhanden)– Administrationsinstruktionen (Reset, Stop etc.)– Setzen des Status-Registers

Computer-Systeme – WS 12/13 - Teil 11/Routinen 36

CPU-Arbeitsmodi II - Zusammenfassung

• Status Register (SR):– Flags, die das Resultat des letzten Befehls beschreiben, z. B. ob

das Resultat kleiner als 0 war etc.– Modus-Bit, das definiert, in welchem Modus sich die CPU

befindet

• Supervisor-Mode = Privilegierter Mode = Kernel Mode• User Mode = Nicht-Privilegierter Mode

Computer-Systeme – WS 12/13 - Teil 11/Routinen 37

CPU-Status

• Unter bestimmten Umständen muss der gesamte CPU-Inhalt in den Speicher gerettet und später wieder hergestellt werden.

• CPU-Status = Inhalt der CPU, d.h.– Alle Daten- und Adressregister, auch SP– Status-Register (SR)– Program Counter (PC)

• Um den alten Zustand wieder herzustellen, müssen diese Werte wieder in die Register geschrieben werden, jedoch kann das Modus-Bit nur dann verändert werden, wenn die CPU vorher im Supervisor/Kernel-Modus ist.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 38

Exceptions

• Exception = Ausnahmesituation einer Instruktion mit anschließendem Abbruch der Ausführung

• Beispiele für Exceptions:– Division durch 0– Word-Zugriff auf den Speicher mit ungerader Adresse– RAM signalisiert Speicherfehler– Zugriff auf nicht vorhandenem Speicher

Computer-Systeme – WS 12/13 - Teil 11/Routinen 39

Ablauf bei Exceptions

1. Abbruch der aktuellen Instruktion2. Wechsel in den Kernel-Modus (Setzen des Modus-Bits)3. Bestimmen des Trap-Handlers4. Retten des alten Status-Registers5. Retten des aktuellen PC-Wertes6. Sprung zum Trap-Handler (Setzen des PC)

7. Retten des restlichen CPU-Status auf den Stack8. Beginn der Behandlung

Wenn die CPU eine Exception festgestellt hat:

Die ersten 6 Schritte werden automatisch durch die CPU als Abschlussder aktuellen Instruktion durchgeführt.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 40

Stackaufbau nach Exception

Lokale Variablen

SP ->

Zwischen-ergebnisse

Parameter NParameter N...

Parameter 2Parameter 1

<- LB

Return-Address

Vor Exception

Lokale Variablen

SP ->

Zwischen-ergebnisse

Parameter N...

Parameter 2Parameter 1

<- LB

Status-Register

Exception-Handlerläuft

Computer-Systeme – WS 12/13 - Teil 11/Routinen 41

Begriffe

• Trap = Exception = Ausnahmesituation• Trap-Handler = Routine, die als Reaktion einer Exception

aufgerufen wird

• Es gibt eine Tabelle mit den Adressen der Trap-Handler, die ein Array ist

• Die Traps/Exceptions haben Nummern, die als Indices in diese Tabelle benutzt werden.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 42

Bestimmung des Trap-Handlers

Exception-Nummer

Adresse F1

Tabelle steht aneiner speziellendafür vorgesehenenStelle

Adresse F2Adresse F3Adresse F4

.....Adresse FN

Indizieren

Handler F4

Handler F3

Handler F2

.....

Routinenim Kernel

Computer-Systeme – WS 12/13 - Teil 11/Routinen 43

Abschluss des Trap-Handlers

• Ausgabe einer Fehlermeldung mit Fortführung des Programms

• Abbruch des Programms• Reparatur des Problems und Rückkehr zu abgebrochenen

Instruktion

Je nach Schwere kann der Trap-Handler unterschiedliche Dinge tun:

Im Falle einer Rückkehr zum Programm muss der Trap-Handlerden alten CPU-Status anhand der Werte auf dem Stackwiederherstellen.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 44

Syscall – System Call

• Syscall = System Call = Systemaufruf = Aufruf einer Routine im Kernel

• Ein Syscall ist ein Unterprogramm-Aufruf mit Wechsel des CPU-Modus.

• Zum Beginn wird der CPU-Status gerettet.• Bei der Rückkehr aus der Kernelroutine wird bis auf den

Return-Code der CPU-Status wieder hergestellt.• Der Return-Code besagt dem Aufrufer, ob alles in Ordnung

war bzw. wenn ein Wert zu liefern ist, welcher Wert dies ist. Dafür wird meistens ein bestimmtes Register reserviert (das nicht wiederhergestellt wird).

Computer-Systeme – WS 12/13 - Teil 11/Routinen 45

Trap-Instruktion

• Zentral beim Syscall steht die Trap-Instruktion, die sehr ähnlich zum Unterprogrammaufruf ist.

• Die Rückkehr zum Aufrufer erfolgt durch die RTT-Instruktion(Return-from-Trap).

• Die Trap-Instruktion rettet das SR-Register sowie den aktuellen PC-Wert auf den Stack, bestimmt anhand einer Tabelle mit Sprungadressen, wohin gesprungen werden soll, und springt dorthin.

• Die RTT-Instruktion holt den geretteten PC-Wert vom Stackund schreibt ihn in den PC (Sprung zurück); dasselbe erfolgt mit dem SR-Wert, wobei hier der neue CPU-Modus durch den wieder hergestellten SR-Wert bestimmt wird.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 46

TRAP und RTT I

SP ->

SP -> PC

SR

(1) (2)

Trap-Instruktion

PC

SR

SP ->

SP ->RTT-Instruktion

Computer-Systeme – WS 12/13 - Teil 11/Routinen 47

TRAP und RTT II - Ablauf

TRAP-Instruktion RTT-Instruktion

CPU-Mode:= KernelPush Status-RegisterPush Programm CounterPC:= Spezielle AdresseSetzen des Kernel-Mode im SR

Pop Programm CounterPop Status-RegisterCPU-Mode:= SR-Wert

Das Aufrufen eines Trap-Handlers sieht genauso wie dieBehandlung einer Exception aus; dasselbe gilt auch für dieRückkehr.

Eine Exception/Trap ist eine Reaktion auf einen Fehler,während bei der Trap-Instruktion um einen gewollten Aufrufhandelt.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 48

TRAP und RTT III – Sicht des Programmierers

User-Mode Kernel-Mode

...Parameter setzenTRAPParameter beseitigen...

Push Register...Ausführen der Funktion...Pop RegisterRTT

Prolog

Epilog

Computer-Systeme – WS 12/13 - Teil 11/Routinen 49

Noch einmal: Aufruf einer Routine

Aufrufer Routine

...Parameter setzenJSRParameter beseitigen...

push Registerpush Local Variables...Ausführen der Funktion...pop Local Variablespop RegisterRTS

Prolog

Epilog

Dies kann im sowohl im User-Modus als auch im Kernel-Modus ablaufen.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 50

Trap-Call I – ohne Wechsel des Stacks

Lokale Variablen

SP ->

Zwischen-ergebnisse

Parameter NParameter N...

Parameter 2Parameter 1

Return-Address

Aufrufervor trap

trap

Lokale Variablen

SP ->

Zwischen-ergebnisse

Parameter N...

Parameter 2Parameter 1

Status-Register

Computer-Systeme – WS 12/13 - Teil 11/Routinen 51

Trap-Call II – Bestimmung des Trap-Handlers

trap Parameter

Adresse F1

Tabelle steht aneiner speziellendafür vorgesehenenStelle

Adresse F2Adresse F3Adresse F4

.....Adresse FN

Indizieren

Adressen derRoutinen, die dieSyscalls realisieren

Syscall F4

Syscall F3

Syscall F2

.....

Routinenim Kernel

Tabellen und Routinen im Kernel

Computer-Systeme – WS 12/13 - Teil 11/Routinen 52

Hinweis zum Stackwechsel

• In der vorgestellten Version wird nur mit einem Stackgearbeitet, d.h. nach dem Trap wird derselbe Stack im Kernel-Mode benutzt.

• Viele Maschinen arbeiten nicht so: Sie besitzen zwei Stackpointer, einer für den User-Mode und einen für den Kernel-Mode. Bei diesen Maschinen findet noch ein Wechsel des Stacks statt:– Kernel-SP (KSP)= Stackpointer für den Kernel-Modus– User-SP (USP)= Stackpointer für den User-Modus

Computer-Systeme – WS 12/13 - Teil 11/Routinen 53

Call und Trap - Stacklayout

(2) Lokaler Kontext

TemporäreVariablen

Parameter 1

Parameter n

...Parameter 2

LokaleVariablen

<-SP

Nach Call

Return

LB undRegister

Nach Exception/Trap/Syscall

TemporäreVariablen

Parameter 1

Parameter n

...Parameter 2

LokaleVariablen

Return

Register(SP+...)

SR-Register

(1)(1)

(2) (2)

(1) Rückkehr-Information<-SP

Computer-Systeme – WS 12/13 - Teil 11/Routinen 54

Call und Trap – Zusammenfassung

• Ein Call ist ein programmierter, parametrisierbarer Sprung mit Rückkehrinformation ohne Modus-Wechsel.

• Ein Trap ist ein programmierter, parametrisierbarer Sprung mit Rückkehrinformation und Wechsel in den Kernelmode.

• Mit Traps werden Syscalls realisiert. Traps werden innerhalb des Kernels nicht verwendet.

• Exceptions sind Abbrüche in der Instruktionsausführung und werden wie Traps behandelt.

Computer-Systeme – WS 12/13 - Teil 11/Routinen 55

Nach dieser Anstrengung etwas Entspannung....