Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
sp-quiz
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Monitor
Service Desk
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Philip Kaluđerčić
sp-quiz
Compare revisions
7de7f9e08db4e67c7f6f5696099d901dc407ab64 to master
Compare revisions
Changes are shown as if the
source
revision was being merged into the
target
revision.
Learn more about comparing revisions.
Source
oj14ozun/sp-quiz
Select target project
No results found
master
Select Git revision
Branches
database/sp
database/sp1
master
Swap
Target
er04yjek/sp-quiz
Select target project
za08gywo/sp-quiz
wa28ziqo/pfp-quiz
er04yjek/sp-quiz
de08hesi/sp-quiz
un65esoq/sp-quiz
wa28ziqo/sp-quiz
oj14ozun/sp-quiz
7 results
7de7f9e08db4e67c7f6f5696099d901dc407ab64
Select Git revision
Branches
main
ss20
Show changes
Only incoming changes from source
Include changes to target since source was created
Compare
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
ws20.q
+0
-1
0 additions, 1 deletion
ws20.q
ws21.q
+0
-176
0 additions, 176 deletions
ws21.q
ws22.q
+0
-78
0 additions, 78 deletions
ws22.q
with
0 additions
and
255 deletions
ws20.q
deleted
100644 → 0
View file @
7de7f9e0
#
https
://
sys.cs.fau.de
/
extern
/
lehre
/
ws23
/
sp2
/
pruefung
/
klausuren
/
2020
w
-
SP
-
Klausur_www.pdf
This diff is collapsed.
Click to expand it.
ws21.q
deleted
100644 → 0
View file @
7de7f9e0
#
https
://
sys.cs.fau.de
/
extern
/
lehre
/
ws23
/
sp2
/
pruefung
/
klausuren
/
2022
w
-
SP
-
Klausur_www.pdf
0
Welche
der
folgenden
Aussagen
zu
statischem
bzw.
dynamischem
Binden
ist
richtig
?
(
2022
-
02
)
-
Statisch
gebundene
Programmdateien
sind
kleiner
als
dynamisch
gebundene
,
da
mehrfach
genutzte
Funktionen
in
einer
shared
library
abgelegt
werden
und
nicht
in
die
ausf
ü
hrbare
Datei
kopiert
werden
Die
Beschreibung
trifft
auf
dynamisch
gebundene
Programmdateien
,
weil
Bibliotheksfunktionen
zur
Laufzeit
auf
`.so`
Dateien
laden
,
im
gegensatz
zu
statisch
gebundenen
Programmen
,
wo
diese
jedes
mal
zum
Bindezeitpunkt
in
die
ausf
ü
hrbare
Datei
kopiert
werden.
+
Bei
dynamischem
Binden
k
ö
nnen
Fehlerkorrekturen
in
Bibliotheken
leichter
ü
bernommen
werden
,
da
nur
die
Bibliothek
selbst
neu
erzeugt
werden
muss.
Programme
,
die
die
Bibliothek
verwenden
,
m
ü
ssen
nicht
neu
kompiliert
und
gebunden
werden.
Ja.
Im
Gegensatz
dazu
,
m
ü
sste
man
bei
einem
statischen
Bibliothek
alle
Programme
nochmal
neu
,
gegen
die
aktualisierte
Bibliothek
bauen
,
damit
diese
die
neuste
Version
benutzen.
-
Beim
statischen
Binden
werden
alle
Adressen
zum
Ladezeitpunkt
aufgel
ö
st
Nein
,
Adressen
werden
alle
beim
Binden
aufgel
ö
st
,
und
sind
somit
unabh
ä
ngig
von
der
Ausf
ü
hrung
--
*
statisch
*
--
bekannt.
-
Bei
dynamischem
Binden
m
ü
ssen
zum
Ü
bersetzungszeitpunkt
alle
Adressbez
ü
ge
vollst
ä
ndig
aufgel
ö
st
werden
Nein
,
Bibliotheksfunktionen
welche
aus
*
Shared
Object
*
Dateien
geladen
werden
k
ö
nnen
zur
Laufzeit
,
m
ü
ssen
nicht
beim
Ü
bersetzen
bereits
aufgel
ö
st
geworden
sein.
.
0
Welche
Antwort
trifft
f
ü
r
die
Eigenschaften
eines
UNIX
/
Linux
-
Dateideskriptor
zu
?
(
2022
-
02
)
-
Ein
Dateideskriptor
ist
eine
Integerzahl
,
die
ü
ber
gemeinsamen
Speicher
an
einen
anderen
Prozess
ü
bergeben
werden
kann
,
und
von
letzterem
zum
Zugriff
auf
eine
ge
ö
ffnete
Datei
verwendet
werden
kann.
Nein
,
es
ist
zwar
eine
Ganzzahl
,
aber
diese
kann
nicht
beliebig
hin
und
her
gereicht
werden
,
zumindest
ohne
dass
das
Betriebsystem
entsprechend
informiert
wird
(
siehe
`sendmsg
(
2
)
`
)
.
-
Dateideskriptoren
sind
Zeiger
auf
Betriebssystemstrukturen
,
die
von
den
Systemaufrufen
ausgewertet
werden
,
um
auf
Dateien
zuzugreifen.
Nein
,
es
handelt
sich
nicht
um
einen
Zeiger
im
gew
ö
hnlichen
Sinne
(
eine
Adresse
auf
eine
Speicherstelle
)
,
auch
wenn
es
ü
blicherweise
dazu
benutzt
wird
um
eine
Prozess
-
Lokale
Datei
Tabelle
zu
Adressieren.
Es
stimmt
aber
,
dass
es
dazu
benutzt
wird
,
einem
Systemaufruf
eine
Datei
anzudeuten
,
auf
dem
dieses
arbeiten
soll.
+
Ein
Dateideskriptor
ist
eine
prozesslokale
Integerzahl
,
die
der
Prozess
zum
Zugriff
auf
eine
Datei
,
ein
Ger
ä
t
,
einen
Socket
oder
eine
Pipe
benutzen
kann.
Ja
,
ein
Dateideskriptor
muss
nicht
nur
auf
"gewöhnlichen"
Dateien
arbeiten
,
sondern
kann
verschieden
"Datei-Ähnlichen"
Objekten
(
d.h.
Datenstr
ö
men
)
abstrahieren.
Wichtig
ist
auch
der
Punkt
"prozesslokal"
,
weil
die
Zahl
nur
eine
Bedeutung
hat
,
wenn
das
Betriebsystem
dem
Prozess
diese
Zahl
zuvor
explizit
vergeben
hat.
-
Beim
Ö
ffnen
ein
und
derselben
Datei
erh
ä
lt
ein
Prozess
jeweils
die
gleiche
Integerzahl
als
Dateideskriptor
zum
Zugriff
zur
ü
ck.
Nein
,
es
ist
m
ö
glich
eine
Datei
Mehrfach
zu
ö
ffnen
,
und
dabei
mehrere
Dateideskriptoren
zu
bekommen.
Versuche
~~~
#
include
<
fcntl.h
>
#
include
<
unistd.h
>
#
include
<
stdio.h
>
int
main
()
{
int
fd1
=
open
(
"/etc/passwd"
,
O_RDONLY
);
int
fd2
=
open
(
"/etc/passwd"
,
O_RDONLY
);
printf
(
"fd1: %d, fd2: %d
\n
"
,
fd1
,
fd2
);
}
~~~
.
1
Man
unterschiedet
zwei
Kategorien
von
Ausnahmesituationen
bei
einer
Programmausf
ü
hrung
:
Traps
und
Interrupts.
Welche
der
folgenden
Aussagen
sind
zutreffend
?
(
2022
-
02
)
+
Ein
Programm
darf
im
Rahmen
einer
Trapbehandlung
abgebrochen
werden.
Ja
,
Beispielsweise
bei
einem
ung
ü
ltigem
Speicherzugriff.
-
Ein
durch
einen
Interrupt
unterbrochenes
Programm
darf
je
nach
der
Interruptursache
entweder
abgebrochen
oder
fortgesetzt
werden.
Nein
,
weil
ein
Interrupt
nichts
mit
dem
Programm
zu
tun
hat
,
und
daher
dieses
nicht
(
direkt
)
abbrechen
sollte.
-
Bei
einem
Trap
wird
der
gerade
in
Bearbeitung
befindliche
Maschinenbefehl
immer
noch
vollst
ä
ndig
zu
Ende
bearbeitet
,
bevor
mit
der
Trapbehandlung
begonnen
wird.
Nein
,
bspw.
wenn
man
versucht
auf
nicht
lesbaren
Speicher
versucht
zuzugreifen
,
muss
es
abgebrochen
werden
,
bevor
auf
den
Speicher
zuggegriffen
wurde.
+
Die
CPU
sichert
bei
einem
Interrupt
einen
Teil
des
Prozessorzustands.
Ja
,
genau
wie
bei
einer
Signal
-
Behandlung
unterbricht
ein
Interrupt
das
"Hauptprogramm"
vom
Betriebsystem.
Der
Prozessorzustand
muss
daf
ü
r
vermerkt
worden
sein
,
damit
es
danach
wieder
restauriert
werden
kann.
+
Die
Ausf
ü
hrung
einer
Ganzzahl
-
Rechenoperation
(
z.
B.
Addition
,
Division
)
kann
zu
einem
Trap
f
ü
hren.
Ja
,
eine
Rechnerarchitektur
kann
beim
Teilen
durch
0
ein
Trap
ausl
ö
sen.
-
Da
Traps
immer
synchron
auftreten
,
kann
es
im
Rahmen
ihrer
Behandlung
nicht
zu
Wettlaufsituationen
mit
dem
unterbrochenen
Programm
kommen.
Nein
,
weil
Traps
eben
immer
syncrhron
auftreten
,
gibt
es
keine
Nebenl
ä
ufigkeit
welche
Probleme
bereitet.
?
Wenn
ein
Interrupt
ein
schwerwiegendes
Ereignis
signalisiert
,
wird
das
unterbrochene
Programm
im
Rahmen
der
Interruptbearbeitung
immer
abgebrochen.
-
Ein
Systemaufruf
im
Anwendungsprogramm
ist
der
Kategorie
Interrupt
zuzuordnen.
Nein
,
weil
diese
deterministisch
immer
dann
auftreten
,
wenn
ein
Programm
ein
Systemaufruf
absetzen
will.
.
0
In
welcher
der
folgenden
Situationen
wird
ein
Prozess
vom
Zustand
laufend
in
den
Zustand
bereit
ü
bef
ü
hrt
?
(
2022
-
02
)
-
Der
Prozess
ruft
die
Bibliotheksfunktion
`exit
(
3
)
`
auf.
Nein
,
weil
danach
der
Prozess
nicht
mehr
"bereit"
ist
(
d.h.
wieder
eingelagert
werden
kann
)
.
+
Der
Scheduler
bewirkt
,
dass
der
Prozess
durch
einen
anderen
Prozess
verdr
ä
ngt
wird.
Ja
,
weil
die
einzige
Ressource
welche
dem
Prozess
fehlt
ist
die
CPU
,
welche
der
Scheduler
sp
ä
ter
wieder
"vergeben"
kann
,
und
damit
der
Prozess
auch
die
ganze
Zeit
bereit
ist
wieder
weiter
zu
laufen.
-
Der
Prozess
greift
lesend
auf
eine
Datei
zu
und
der
entsprechende
Datenblock
ist
noch
nicht
im
Hauptspeicher
vorhanden.
Nein
,
weil
dann
idr.
der
Prozess
beendet
wird
mit
einem
Sigal
wie
`SIGSEVG`
,
und
nicht
mehr
laufen
darf.
-
Der
Prozess
ruft
eine
P
-
Operation
auf
einen
Semaphor
auf
,
welcher
den
Wert
0
hat.
Nein
,
weil
dann
der
Prozess
blokiert
wird
,
und
nicht
mehr
laufen
kann
,
bis
an
einer
anderen
Stelle
eine
entsprechende
V
-
Operation
ausgef
ü
hrt
wird.
.
0
Welche
Aussage
zum
Thema
Adressraumverwaltung
ist
richtig
?
(
2022
-
02
)
+
Ein
Speicherbereich
,
der
mit
Hilfe
der
Funktion
free
()
freigegeben
wurde
,
verbleibt
im
logischen
Adressraum
des
zugeh
ö
rigen
Prozesses.
Ja.
Der
**
logische
**
Adressraum
A
ₗ
=
[
n
,
m
]
ist
der
gesamte
Adressbereich
ohne
L
ü
cken
,
der
einem
Prozess
zugeordnet
wird.
Dieser
wird
nicht
verkleinert
,
wenn
`free`
aufgerufen
wird.
Im
Gegensatz
dazu
ist
der
virtuelle
Adressraum
A
ᵥ
jener
,
der
nur
partiell
auf
den
Hauptspeicher
abgebildet
wird
,
bei
dem
also
Adressen
ung
ü
ltig
sein
k
ö
nnen.
(
vgl.
SP1
B
Vl.
2
S.
12
ff.
,
27
)
(
Bin
mir
hier
nicht
zu
100
%
sicher
,
dass
meine
Interpretation
korrekt
ist
)
-
Mit
malloc
()
angeforderter
Speicher
,
welcher
vor
Programmende
nicht
freigegeben
wurde
,
kann
vom
Betriebssystem
nicht
mehr
an
andere
Prozesse
herausgegeben
werden
und
ist
damit
bis
zum
Neustart
des
Systems
verloren.
Nein
,
nach
dem
Ende
des
Programms
wird
der
gesamte
Adressbereich
des
Prozesses
freigegeben.
Das
ist
m
ö
glich
,
weil
das
Betriebsystem
den
Speicher
f
ü
r
jeden
Prozess
virtualisiert
und
damit
auch
in
der
Lage
ist
,
ihm
diese
Ressource
zu
entziehen.
-
Mit
Hilfe
des
Systemaufrufes
malloc
()
kann
ein
Programm
zus
ä
tzliche
Speicherbl
ö
cke
von
sehr
feink
ö
rniger
Struktur
vom
Betriebssystem
anfordern.
Nein
,
`malloc
(
3
)
`
ist
kein
Systemaufruf
,
sondern
eine
Bibliotheksfunktion.
Au
ß
erdem
fordert
die
Laufzeitumgebung
(
*
libc
*
)
den
Speicher
ü
blicherweise
grobgranular
vom
Betriebssystem
an
(
`mmap
(
2
)
,
brk
(
2
)
`
)
und
verteilt
diesen
im
Benutzerprozess.
-
Da
das
Laufzeitsystem
auf
die
Betriebssystemschnittstelle
zur
Speicherverwaltung
zur
ü
ckgreift
,
ist
die
Granularit
ä
t
der
von
malloc
()
zur
ü
ckgegebenen
Speicherbl
ö
cke
vom
Betriebssystem
vorgegeben.
Nein
,
`malloc`
kann
als
Teil
des
Laufzeitsystems
den
grobgranular
vom
Betriebssystem
angeforderten
Speicher
feingranular
aufteilen
und
zur
ü
ckgeben.
.
0
Sie
kennen
den
Translation
-
Lookaside
-
Buffer
(
TLB
)
.
Welche
Aussage
ist
richtig
?
(
2022
-
02
)
-
Der
TLB
puffert
die
Ergebnisse
der
Abbildung
von
physikalische
auf
logische
Adressen
,
sodass
eine
erneute
Anfrage
sofort
beantwortet
werden
kann.
Nein
,
andersherum.
Logische
m
ü
ssen
in
physikalische
Adressen
ü
bersetzt
werden.
+
Ver
ä
ndert
sich
die
Speicherabbildung
von
logischen
auf
physikalische
Addressen
aufgrund
einer
Adressraumumschaltung
,
so
werden
auch
die
Daten
im
TLB
ung
ü
ltig.
Ja
,
da
die
Eintr
ä
ge
im
TLB
beziehen
sich
auf
einen
bestimmten
logischen
Adressraum.
-
Wird
eine
Speicherabbildung
im
TLB
nicht
gefunden
,
wird
vom
Prozessor
immer
eine
Ausnahme
(
*
Trap
*
)
ausgel
ö
st
die
vom
Betriebssystem
behandelt
wird.
Nein
,
ist
kein
Eintrag
im
TLB
zu
finden
,
wird
die
Addresse
von
der
MMU
aufgel
ö
st.
-
Wird
eine
Speicherabbildung
im
TLB
nicht
gefunden
,
wird
der
auf
den
Speicher
zugreifende
Prozess
mit
einer
Schutzraumverletzung
(
Segmentation
Fault
)
abgebrochen.
Nein
,
ist
kein
Eintrag
im
TLB
zu
finden
,
wird
die
Addresse
von
der
MMU
aufgel
ö
st.
Der
TLB
agiert
nur
als
*
cache
*
f
ü
r
Adress
ü
bersetzungen.
.
0
Welche
Aussage
zu
den
verschiedenen
Gewichtsklassen
von
Prozessen
trifft
zu
?
(
2022
-
02
)
-
Schwergewichtige
Prozesse
sind
die
einzige
Klasse
von
Prozessen
,
die
auf
einem
Multiprozessorsystem
echt
parallel
ausgef
ü
hrt
werden
kann
,
da
nur
hier
jeder
Benutzerfaden
einem
eigenen
Kernfaden
zugeordnet
ist.
Nein.
Auch
leichtgewichtigen
Prozessen
(
*
kernel
-
level
threads
*
)
ist
ein
*
kernel
thread
*
zugeordnet.
+
Federgewichtige
Prozesse
(
*
user
-
level
threads
*
)
blockieren
sich
bei
blockierenden
Systemaufrufen
gegenseitig.
Ja
,
da
bei
federgewichtigen
Prozessen
mehrere
Prozesse
auf
einen
Systemkernfaden
(
*
kernel
-
level
thread
*
)
gemultiplext
werden
,
wird
die
Ausf
ü
hrung
der
aller
federgewichtigen
Prozesse
blockiert
,
die
auf
einem
*
kernel
-
level
thread
*
ausgef
ü
hrt
werden
,
bis
dieser
wieder
bereit
ist.
-
Beim
Blockieren
eines
schwergewichtigen
Prozesses
werden
alle
anderen
schwergewichtigen
Prozesse
,
die
das
selbe
Progamm
ausf
ü
hren
,
ebenfalls
blockiert.
Nein.
Man
kann
mehrere
Prozesse
mit
dem
gleichen
Programm
ausf
ü
hren.
-
Zu
jedem
leichtgewichtigen
Prozess
(
*
kernel
-
level
thread
*
)
geh
ö
rt
ein
eigener
,
isolierter
Adressraum.
Falsch
,
das
w
ä
ren
schwergewichtige
Prozesse.
Leichtgewichtige
Prozesse
wie
`pthread`s
teilen
sich
einen
Adressraum.
.
0
Wie
wird
erkannt
,
dass
eine
Seite
eines
virtuellen
Adressraums
,
auf
die
ein
Maschinenbefehl
zugreift
,
gerade
ausgelagert
ist
?
(
2022
-
02
)
+
Im
Seitendeskriptor
wird
ein
spezielles
Bit
gef
ü
hrt
,
das
der
MMU
zeigt
,
ob
eine
Seite
eingelagert
ist
oder
nicht.
Falls
die
Seite
nicht
eingelagert
ist
,
l
ö
st
die
MMU
einen
Trap
aus.
Ja
,
die
*
page
descriptor
table
*
enth
ä
lt
f
ü
r
jeden
Seitendeskriptor
ein
*
valid
*-
Bit.
Ist
dieses
nicht
gesetzt
,
so
wird
ein
*
Trap
*
ausgel
ö
st.
-
Im
Seitendeskriptor
steht
bei
ausgelagerten
Seiten
eine
Adresse
des
Hintergrundspeichers
und
der
Speichercontroller
leitet
den
Zugriff
auf
den
Hintergrundspeicher
um.
Nein
,
die
MMU
interagiert
nicht
mit
dem
Hintergrundspeicher
,
sondern
ist
nur
f
ü
r
die
Adressabbildung
von
logischen
zu
realen
Adressen
zust
ä
ndig.
-
Das
Betriebssystem
erkennt
die
ung
ü
ltige
Adresse
vor
Ausf
ü
hrung
des
Maschinenbefehls
und
lagert
die
Seite
zuerst
ein
bevor
ein
Trap
passiert.
Nein
,
das
Betriebssystem
ü
berpr
ü
ft
nicht
jede
Instruktion
vor
der
Ausf
ü
hrung
(
vgl.
**
Teil
**
interpretation
)
.
-
Bei
Programmen
,
die
in
virtuellen
Adressr
ä
umen
ausgef
ü
hrt
werden
sollen
,
erzeugt
der
Compiler
speziellen
Code
,
der
vor
Betreten
einer
Seite
die
Anwesenheit
ü
berpr
ü
ft
und
ggf.
die
Einlagerung
veranlasst.
Nein
,
der
Compiler
f
ü
gt
nicht
in
jedes
Programm
eine
Implementation
der
Speichervirtualisierung
ein.
Diese
ist
eine
Aufgabe
des
Betriebssystems
und
nicht
der
einzelnen
Benutzerprogramme.
.
0
Welche
der
folgenden
Aussagen
zum
Thema
Seitenfehler
(
*
Page
Fault
*
)
ist
richtig
?
(
2022
-
02
)
-
Wenn
der
gleiche
Seitenrahmen
in
zwei
verschiedenen
Seitendeskriptoren
eingetragen
wird
,
l
ö
st
dies
einen
Seitenfehler
aus
(
Gefahr
von
Zugriffskonflikten
!
)
.
Nein
,
das
w
ü
rde
z.
B.
zwischen
Prozessen
geteilten
Speicher
verhindern.
-
Ein
Seitenfehler
wird
ausgel
ö
st
,
wenn
der
Offset
in
einer
logischen
Adresse
gr
öß
er
als
die
L
ä
nge
der
Seite
ist.
Nein
,
dieser
Fall
kann
per
Definition
nicht
eintreten.
Seiten
haben
eine
Gr
öß
e
von
2
ⁿ
Byte
,
(
bei
x86
-
64
z.
B.
4
KiB
)
,
n
Byte
der
Adresse
werden
als
Offset
interpretiert.
Somit
ist
dieser
Fall
au
ß
erhalb
des
ü
berhaupt
darstellbaren
Wertebereichs
f
ü
r
den
Offset.
Im
Gegensatz
dazu
wird
bei
Segmentierung
ü
berpr
ü
ft
,
ob
die
logische
Adresse
im
Speichersegment
liegt
,
das
dem
Prozess
zugeordnet
ist.
Dort
k
ö
nnte
also
ein
derartiger
Fehler
auftreten.
-
Ein
Seitenfehler
zieht
eine
Ausnahmebehandlung
nach
sich.
Diese
wird
dadurch
ausgel
ö
st
,
dass
die
MMU
das
Signal
SIGSEGV
an
den
aktuell
laufenden
Prozess
schickt.
Nein
,
ein
Seitenfehler
kann
auch
dadurch
ausgel
ö
st
werden
,
dass
z.
B.
auf
eine
ausgelagerte
Seite
zugegriffen
wird.
Diese
wird
dann
f
ü
r
den
Prozess
transparent
eingelagert.
Zudem
l
ö
st
die
MMU
ein
Trap
aus
,
welches
sp
ä
ter
zur
Zustellung
eines
Signals
f
ü
hren
kann.
Jedoch
schickt
sie
nicht
selbst
Signale
an
Prozesse.
+
Das
Auftreten
eines
Seitenfehlers
kann
dazu
f
ü
hren
,
dass
der
aktuell
laufende
Prozess
in
den
Zustand
beendet
ü
berf
ü
hrt
wird.
Ja
,
wenn
der
Prozess
auf
eine
ung
ü
ltige
Adresse
zugreift
,
also
insbesondere
auch
keine
Seite
eingelagert
werden
kann
und
das
entsprechende
Signal
nicht
abgefangen
wird
,
wird
er
terminiert.
.
This diff is collapsed.
Click to expand it.
ws22.q
deleted
100644 → 0
View file @
7de7f9e0
#
https
://
sys.cs.fau.de
/
extern
/
lehre
/
ws23
/
sp2
/
pruefung
/
klausuren
/
2022
w
-
SP
-
Klausur_www.pdf
0
Beim
Blockieren
in
einem
Monitor
muss
der
Monitor
freigegeben
werden.
Warum
?
(
2023
-
02
)
-
Weil
kritische
Abschnitte
immer
nur
kurz
belegt
sein
d
ü
rfen.
F
ü
r
die
Performanz
eines
Programms
ist
das
sicher
vorteilhaft
,
jedoch
hat
das
nichts
mit
der
Frage
zu
tun.
-
Weil
sonst
die
Monitordaten
inkonsistent
sind.
Nein
,
gegenseitiger
Auschluss
w
ä
re
sonst
auch
gegeben.
+
Weil
ein
anderer
Thread
die
Blockierungsbedingung
nur
aufheben
kann
,
wenn
er
den
Monitor
vorher
betreten
kann.
Ja
,
vergleiche
z.
B.
blockierende
Warteschlange.
W
ü
rde
ein
konsumierender
Thread
nicht
den
Monitor
freigeben
,
so
k
ö
nnte
kein
produzierender
Thread
ein
Element
einf
ü
gen.
-
Weil
der
Thread
sonst
aktiv
warten
w
ü
rde.
Nein
,
der
Thread
wartet
passiv
auf
den
Monitor.
.
0
Welche
Aussage
zum
Thema
Synchronisation
ist
richtig
?
(
2023
-
02
)
-
Die
V
-
Operation
kann
auf
einem
Semaphor
nur
von
dem
Thread
aufgerufen
werden
,
der
zuvor
auch
die
P
-
Operation
aufgerufen
hat.
Nein
,
P
und
V
k
ö
nnen
von
beliebigen
,
auch
unterschiedlichen
,
Threads
aus
aufgerufen
werden.
+
Durch
den
Einsatz
von
Semaphoren
kann
ein
wechselseitiger
Ausschluss
erzielt
werden.
Ja
,
eine
Semaphore
mit
initialem
Wert
von
1
(
bin
ä
re
Semaphore
)
implementiert
*
mutual
exclusion
*,
wenn
P
und
V
immer
paarweise
nacheinander
aufgerufen
werden.
-
Ein
Semaphor
kann
ausschlie
ß
lich
f
ü
r
mehrseitige
Synchronisation
(
*
multilateral
synchronisation
*
)
verwendet
werden.
Nein
,
das
w
ü
rde
bedeuten
,
dass
man
damit
nur
Synchronisationsmechanismen
implementieren
kann
,
bei
denen
jeder
Zugriff
und
nicht
nur
Entnahmezugriffe
auf
das
Betriebsmittel
dem
wechselseitigen
Ausschluss
unterliegt.
(
vgl.
[
10.1
S.14
])
Jedoch
l
ä
sst
sich
z.
B.
eine
blockierende
Warteschlange
mit
nichtblockierender
Entnahme
implementieren
,
bei
welcher
die
Semaphore
nur
Konsumenten
bei
einer
leeren
Warteschlange
blockiert.
-
Einseitige
Synchronisation
(
*
unilateral
synchronisation
*
)
erfordert
immer
Betriebssystemunterst
ü
tzung.
Nein
,
diese
kann
zum
Beispiel
ohne
Betriebssystemaufrufe
durch
ein
*
spin
lock
*
realisiert
werden.
.
0
Welche
der
folgenden
Aussagen
zu
statischem
bzw.
dynamischem
Binden
ist
richtig
?
(
2023
-
02
)
-
Ä
nderungen
am
Code
einer
dynamischen
Bibliothek
(
z.
B.
Bugfixes
)
erfordern
immer
das
erneute
Binden
aller
Programme
,
die
diese
Bibliothek
benutzen.
Nein.
Programme
,
die
eine
dynamische
Bibliothek
einbinden
m
ü
ssen
(
zumindest
in
der
Theorie
)
nur
neugestartet
werden
,
nachdem
diese
ausgetauscht
wurde
,
wonach
sie
durch
den
dynamischen
Binder
neu
gebunden
werden.
-
Beim
statischen
Binden
werden
alle
Adressen
zum
Ladezeitpunkt
aufgel
ö
st.
Nein
,
das
passiert
hier
bereits
beim
Binden.
+
Beim
dynamischen
Binden
erfolgt
die
Adressaufl
ö
sung
beim
Laden
des
Programms
oder
zur
Laufzeit.
Ja
,
beim
Laden
werden
die
Adressen
der
verwendeten
Symbole
durch
den
*
dynamic
linker
*
aufgel
ö
st.
Zur
Laufzeit
k
ö
nnen
jedoch
noch
Bibliotheken
nachgeladen
werden
(
`dlopen
(
3
)
`
)
.
-
Statisch
gebundene
Programme
k
ö
nnen
zum
Ladezeitpunkt
an
beliebige
virtuelle
Speicheradressen
platziert
werden.
Nein.
Das
kann
,
muss
aber
nicht
so
sein.
Dynamische
Bibliotheken
m
ü
ssen
hingegen
*
position
-
independent
-
code
*
enthalten
,
um
in
den
Adressbereich
des
Zielprogramms
geladen
werden
zu
k
ö
nnen.
.
0
Sie
kennen
den
Translation
-
Lookaside
-
Buffer
(
TLB
)
.
Welche
Aussage
ist
richtig
?
(
2023
-
02
)
+
Ver
ä
ndert
sich
die
Speicherabbildung
von
logischen
auf
physikalische
Adressen
aufgrund
einer
Adressraumumschaltung
,
so
werden
auch
die
Daten
im
TLB
ung
ü
ltig.
Ja
,
weil
die
zwischengespeicherten
Seitenaddressen
nicht
mehr
mit
dem
neuem
logischem
Addressraum
zusammenh
ä
ngen
w
ü
rden.
-
Der
TLB
verk
ü
rzt
die
Zugriffszeit
auf
den
physikalischen
Speicher
da
ein
Teil
des
m
ö
glichen
Speichers
in
einem
schnellen
Pufferspeicher
vorgehalten
wird.
Nein
,
im
TLB
werden
nur
die
Addressen
der
Seiten
gespeichert
,
um
das
Nachschlagen
in
der
MMU
zu
vermeiden
,
und
nicht
den
Speicher
selbst.
-
Der
TLB
puffert
Daten
bei
der
Ein
-/
Ausgabebehandlung
und
beschleunigt
diese
damit.
Nein
,
der
TLB
hat
nichts
mit
den
Daten
per
se
zu
tun
,
sondern
beschleundigt
nur
den
Zugriff
auf
h
ä
ufig
benutzte
Seiten.
-
Wird
eine
Speicherabbildung
im
TLB
nicht
gefunden
,
wird
der
auf
den
Speicher
zugreifende
Prozess
mit
einer
Schutzraumverletzung
(
Segmentation
Fault
)
abgebrochen.
Nein
,
ist
kein
Eintrag
im
TLB
zu
finden
,
wird
die
Addresse
von
der
MMU
aufgel
ö
st.
.
0
Welche
Aussage
zu
Prozessen
und
Threads
ist
richtig
?
(
2023
-
02
)
-
Mittels
`fork
()
`
erzeugte
Kindprozesse
k
ö
nnen
in
einem
Multiprozessor
-
System
nur
auf
dem
Prozessor
ausgef
ü
hrt
werden
,
auf
dem
auch
der
Elternprozess
ausgef
ü
hrt
wird.
Nein
,
es
ist
dem
Scheduler
ganz
ü
berlassen
zu
entscheiden
,
auf
welchen
Prozessoren
ein
Prozess
laufen
soll.
Ein
Prozess
muss
auch
nicht
ganz
auf
einem
Kern
oder
nur
auf
einem
Kern
laufen
+
Der
Aufruf
von
`fork
()
`
gibt
im
Elternprozess
die
Prozess
-
ID
des
Kindprozesses
zur
ü
ck
,
im
Kindprozess
hingegen
den
Wert
0.
Ja
,
das
steht
auch
so
in
der
Man
Page.
Die
Annahme
ist
hier
,
dass
kein
Fehler
aufgetreten
ist.
-
Threads
,
die
mittels
`pthread_create
()
`
erzeugt
wurden
,
besitzen
jeweils
einen
eigenen
Adressraum.
Nein
,
Kind
-
Threads
(
im
Kontext
von
der
Pthread
Bibliothek.
)
teilen
den
Addressraum
mit
dem
Eltern
-
Thread.
Prozesse
haben
eigene
Addressr
ä
ume.
-
Die
Ver
ä
nderung
von
Variablen
und
Datenstrukturen
in
einem
mittels
`fork
()
`
erzeugten
Kindprozess
beeinflusst
auch
die
Datenstrukturen
im
Elternprozess.
Nein
,
allgemein
nicht
,
au
ß
er
der
Benutzer
richtet
dieses
spezifisch
ein
(
Siehe
`shm_open
(
3
)
`
)
,
was
aber
ohne
weiteres
nicht
der
Fall
ist.
.
0
Was
ist
ein
Stack
-
Frame
?
(
2023
-
02
)
-
Der
Speicherbereich
,
in
dem
der
Programmcode
einer
Funktion
abgelegt
ist.
Nein
,
ein
Stack
-
Frame
liegt
im
Stack
Segment
,
und
der
Programmcode
liegt
im
Text
-
Segment.
-
Ein
Fehler
,
der
bei
unberechtigten
Zugriffen
auf
den
Stack
-
Speicher
entsteht.
Nein
,
es
gibt
keinen
gesonderten
Namen
f
ü
r
Fehlerhaften
Zugriff
auf
den
Stack
-
Namen.
+
Ein
Bereich
des
Speichers
,
in
dem
u.a.
lokale
automatic
-
Variablen
einer
Funktion
abgelegt
sind.
Ja
,
ein
Stack
-
Frame
wird
beim
betreten
einer
Funktion
angelegt
f
ü
r
alle
Metadaten
und
Daten
welche
zur
ausf
ü
hrung
ben
ö
tigt
werden
und
aufger
ä
umt
sobald
die
Funktion
verlassen
wird.
-
Ein
spezieller
Registersatz
des
Prozessors
zur
Bearbeitung
von
Funktionen.
Nein
,
es
ist
kein
Registersatz.
.
0
Welche
der
folgenden
Informationen
wird
typischerweise
in
dem
Seitendeskriptor
einer
Seite
eines
virtuellen
Adressraums
gehalten
?
(
2023
-
02
)
+
Die
Zugriffsrechte
auf
die
jeweilige
Seite
(
z.
B.
lesen
,
schreiben
,
ausf
ü
hren
)
.
Ja
,
so
setzt
das
Betriebsystem
bspw.
um
,
dass
ein
Text
Segment
ausf
ü
hrbar
aber
nicht
schreibbar
ist.
-
Die
Identifikation
des
Prozesses
,
dem
die
Seite
zugeordnet
ist.
Nein
,
das
Seiten
existieren
unabh
ä
ngig
von
Prozessen
und
m
ü
ssten
per
se
nicht
daf
ü
r
benutzt
werden
,
um
logische
Speicherr
ä
ume
auf
Betriebsystemen
mit
unabh
ä
ngigen
Prozessen
umzusetzen.
-
Die
Zuordnung
zu
einem
Segment
(
Text
,
Daten
,
...
)
.
Nein
,
dieses
wird
muss
man
sich
nicht
in
dem
Seitendeskriptor
merken
,
weil
es
nur
wichtig
ist
,
dass
die
Seite
sich
gem
äß
dem
Verst
ä
ndniss
von
diesen
Segmenten
verh
ä
llt
(
lesbar
,
ausf
ü
bar
,
...
)
.
-
Die
Position
der
Seite
im
virtuellen
Adressraum.
Nein
,
diese
Zuordnung
findet
nicht
im
Seitendeskriptor
statt
,
sondern
im
Betriebsystem.
.
This diff is collapsed.
Click to expand it.
Prev
1
2
Next