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
Commits
f5693090
Verified
Commit
f5693090
authored
1 year ago
by
Maximilian
Browse files
Options
Downloads
Patches
Plain Diff
Mehr Fragen
parent
eaacd3e6
No related branches found
Branches containing commit
No related tags found
1 merge request
!5
Mehr Fragen #3
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
ws19.q
+95
-0
95 additions, 0 deletions
ws19.q
with
95 additions
and
0 deletions
ws19.q
0 → 100644
+
95
−
0
View file @
f5693090
#
https
://
sys.cs.fau.de
/
extern
/
lehre
/
ws23
/
sp2
/
pruefung
/
klausuren
/
2019
w
-
SP
-
Klausur_www.pdf
0
Wozu
dient
die
CAS
(
Compare
-
And
-
Swap
)
Instruktion
?
(
Februar
2020
)
-
Zur
Realisierung
einer
effizienten
Verdr
ä
ngungssteuerung
bei
einseitiger
Synchronisation.
Nein.
Dies
wird
je
nach
Art
der
einseitigen
Synchronisation
(
z.
B.
Blockieren
der
Signalbehandlung
)
unterschiedlich
,
jedoch
nicht
mit
CAS
,
gel
ö
st.
-
Um
in
einem
System
mit
Seitennummerierung
(
Paging
)
Speicherseiten
in
die
Auslagerungspartition
(
swap
area
)
schreiben
zu
k
ö
nnen.
Nein
,
f
ü
r
die
Implementation
dessen
ist
das
Betriebssystem
zust
ä
ndig.
+
Um
auf
einem
Multiprozessorsystem
einfache
Modifikationen
an
Variablen
ohne
Sperren
implementieren
zu
k
ö
nnen.
Ja
,
die
CAS
-
Instruktion
erlaubt
,
eine
Variable
atomar
nur
dann
auf
den
neuen
Wert
zu
setzen
,
wenn
sie
nicht
w
ä
hrenddessen
anderweitig
modifiziert
wurde.
Mittels
einer
CAS
-
Schleife
kann
somit
der
Wert
einer
Variable
atomar
ohne
gegenseitigen
Ausschluss
ge
ä
ndert
werden.
-
Um
bei
der
Implementierung
von
Schlossvariablen
(
Locks
)
aktives
Warten
zu
vermeiden.
Nein
,
allein
mit
einer
atomaren
Variable
*
locks
*
zu
implementieren
,
setzt
aktives
Warten
auf
die
Ä
nderung
des
Wertes
voraus.
Stattdessen
m
ü
sste
f
ü
r
passives
Warten
der
wartende
Prozess
in
den
Zustand
blockiert
ü
bergehen
,
bis
er
von
einem
anderen
Prozess
"geweckt"
wird.
.
0
Was
versteht
man
unter
RAID
0
?
(
Februar
2020
)
-
Ein
auf
Flash
-
Speicher
basierendes
,
extrem
schnelles
Speicherverfahren.
Nein
,
RAID
0
und
andere
RAID
*
level
*
bezeichnen
,
wie
Daten
auf
mehrere
Speichermedien
aufgeteilt
werden
und
nicht
,
wie
der
Speicher
in
der
echten
Welt
implementiert
ist.
-
Auf
Platte
0
wird
Parity
-
Information
der
Datenbl
ö
cke
der
Platten
1
-
4
gespeichert.
Nein
,
RAID
0
sorgt
nicht
f
ü
r
Redundanz
,
sondern
dient
nur
zur
Beschleunigung
von
Speicherzugriffen.
Es
werden
keine
Parit
ä
tsdaten
angelegt.
+
Datenbl
ö
cke
eines
Dateisystems
werden
ü
ber
mehrere
Platten
verteilt
gespeichert.
Ja
,
ein
Begriff
hierf
ü
r
lautet
*
striping
*
-
Datenbl
ö
cke
werden
ü
ber
mehrere
Platten
verteilt
und
repliziert
gespeichert.
Nein
,
RAID
0
sorgt
nicht
f
ü
r
Redundanz
,
sondern
dient
nur
zur
Beschleunigung
von
Speicherzugriffen.
Es
werden
keine
Replikate
von
Datenbl
ö
cken
angelegt.
.
0
Welche
der
folgenden
Aussagen
zum
Thema
Adressr
ä
ume
ist
richtig
?
(
Februar
2020
)
-
Virtuelle
Adressr
ä
ume
sind
Voraussetzung
f
ü
r
die
Realisierung
logischer
Adressr
ä
ume.
Nein
,
andersherum.
Ein
logischer
Adressraum
ist
ein
zusammenh
ä
ngender
Adressbereich.
Der
virtuelle
Adressbereich
setzt
auf
diesen
auf
,
indem
manche
Adressen
von
der
Ü
bersetzung
ausgeschlossen
werden.
-
Der
virtuelle
Adressraum
kann
nie
gr
öß
er
sein
als
der
im
Rechner
vorhandene
Hauptspeicher.
Nein
,
durch
Speichervirtualisierung
k
ö
nnen
Seiten
auf
den
Hintergrundspeicher
ausgelagert
werden
(
*
swapping
*
)
.
-
Die
maximale
Gr
öß
e
des
virtuellen
Adressraums
kann
unabh
ä
ngig
von
der
verwendeten
Hardware
frei
gew
ä
hlt
werden.
Nein
,
z.
B.
betr
ä
gt
diese
auf
einem
32
-
Bit
-
System
h
ö
chstens
2
³²
Datenw
ö
rter
(
In
der
Praxis
also
nur
4
GiB
)
.
+
Der
physikalische
Adressraum
ist
durch
die
gegebene
Hardwarekonfiguration
definiert.
Ja
,
jede
physikalische
Adresse
korrespondiert
zu
einer
tats
ä
chlichen
Stelle
im
Hauptspeicher
,
von
dem
eine
bestimmte
Menge
in
einem
System
verbaut
ist.
.
0
Welche
Aussage
zu
Zeigern
in
C
-
Programmen
ist
richtig
?
(
Februar
2020
)
+
Zeiger
k
ö
nnen
verwendet
werden
,
um
in
C
eine
call
-
by
-
reference
Ü
bergabesemantik
nachzubilden.
Ja.
C
ist
*
call
-
by
-
value
*,
da
Funktionsparameter
als
Kopie
und
nicht
als
Referenz
weitergegeben
werden.
Zeiger
sind
jedoch
Referenzen
auf
Speicherstellen.
Erh
ä
lt
eine
Funktion
also
einen
Zeiger
als
Wert
,
so
kann
sie
mit
dem
Ziel
des
Zeigers
so
verfahren
,
als
h
ä
tte
sie
das
Ziel
selbst
per
Referenz
erhalten.
-
Zeiger
vom
Typ
`void
*
`
existieren
in
C
nicht
,
da
solche
Zeiger
auf
„
Nichts
“
keinen
sinnvollen
Einsatzzweck
h
ä
tten.
Nein
,
*
void
pointer
*
zeigen
auf
Daten
mit
unspezifiziertem
Typ.
Ein
`void
*
`
muss
jedoch
zuerst
zu
einem
Zeiger
auf
einen
nicht
-
`void`
-
Wert
gecastet
werden
,
bevor
er
dereferenziert
werden
kann
,
oder
Pointerarithmetik
durgef
ü
hrt
werden
kann.
-
Ein
Zeiger
kann
zur
Manipulation
von
Daten
in
schreibgesch
ü
tzten
Speicherbereichen
verwendet
werden.
Nein.
Wird
versucht
,
schreibend
auf
einen
schreibgesch
ü
tzten
Bereich
zuzugreifen
,
so
verhindert
dies
die
MMU
,
unabh
ä
ngig
davon
,
mit
welchem
Programmierkonzept
der
Zugriff
versucht
wurde.
-
Die
Ü
bergabesemantik
f
ü
r
Zeiger
als
Funktionsparameter
ist
call
-
by
-
reference.
Nein
,
ein
Zeiger
wird
immer
noch
als
Wert
an
eine
Funktion
ü
bergeben
,
d.
h.
es
wird
eine
Kopie
des
Zeigers
in
das
entsprechende
Register
oder
auf
den
Stack
abgelegt.
Das
ein
Zeiger
eine
Referenz
auf
eine
Speicherstelle
*
ist
*,
spielt
hierbei
keine
Rolle.
Beispiel
:
W
ü
rde
die
Aussage
stimmen
,
so
w
ü
rde
das
folgende
Programm
"10"
ausgeben.
Es
gibt
jedoch
"5"
aus.
```c
#
include
<
stdio.h
>
static
int
b
=
10
;
static
void
pointers_are_values_too
(
int
*
arg
)
{
arg
=
&
b
;
// arg zeigt hier auf b, ptr in main bleibt aber unverändert.
}
int
main
(
void
)
{
int
a
=
5
;
int
*
ptr
=
&
a
;
ptr
zeigt
auf
a.
pointers_are_values_too
(
ptr
);
printf
(
"%d
\n
"
,
*
ptr
);
// ptr zeigt immer noch auf a.
}
```
.
0
Welche
Aussage
zu
Programmbibliotheken
ist
richtig
?
(
Februar
2020
)
-
Eine
statische
Bibliothek
,
die
in
ein
Programm
eingebunden
wurde
,
muss
zum
Ladezeitpunkt
dieses
Programms
im
Dateisystem
vorhanden
sein.
Nein
,
das
w
ä
re
bei
einer
dynamischen
Bibliothek
der
Fall.
Bei
statischen
Binden
wird
bereits
zur
*
link
time
*
der
Objektcode
der
Bibliothek
in
das
Programm
kopiert.A
-
Beim
Binden
mit
einer
statischen
Bibliothek
werden
in
einem
Programm
nur
Verweise
auf
verwendete
Symbole
der
Bibliothek
angelegt.
Nein
,
das
w
ä
re
bei
einer
dynamischen
Bibliothek
der
Fall.
+
Programm
-
Module
,
die
von
mehreren
Anwendungen
gemeinsam
genutzt
werden
,
k
ö
nnen
in
Form
einer
dynamischen
Bibliothek
zentral
installiert
werden
,
um
Speicherplatz
zu
sparen.
Ja
,
eine
dynamische
Bibliothek
kann
von
mehreren
Programmen
referenziert
werden.
Somit
ist
nur
eine
Kopie
dieser
auf
dem
System
n
ö
tig.
Theoretisch
kann
so
Speicherplatz
gespart
werden.
-
Eine
Ä
nderung
am
Code
einer
statischen
Bibliothek
(
z.
B.
Bugfixes
)
erfordert
kein
erneutes
Binden
der
Programme
,
die
diese
Bibliothek
benutzen.
Nein
,
bei
statischen
Bibliotheken
wird
der
Objektcode
zum
Bindezeitpunkt
in
das
Zielprogramm
kopiert.
Soll
dieser
ge
ä
ndert
werden
,
so
muss
das
Programm
neu
gebunden
werden.
Es
reicht
nicht
aus
,
nur
die
statische
Bibliothek
zu
ä
ndern
,
da
das
Programm
immer
noch
den
urspr
ü
nglichen
Objektcode
enth
ä
lt.
.
0
Welche
der
folgenden
Aussagen
ü
ber
Einplanungsverfahren
ist
richtig
?
(
Februar
2020
)
-
Beim
Einsatz
pr
ä
emptiver
Einplanungsverfahren
kann
laufenden
Prozessen
die
CPU
nicht
entzogen
werden.
Nein
,
das
w
ä
re
kooperative
Einplanung.
Bei
pr
ä
emptiver
Einplanung
kann
einem
Prozess
durch
einen
Interrupt
die
CPU
entzogen
werden
(
Pr
ä
emption
)
.
-
Probabilistische
Einplanungsverfahren
m
ü
ssen
die
exakten
CPU
-
Sto
ß
l
ä
ngen
aller
im
System
vorhandenen
Prozesse
kennen.
Nein
,
diese
betrachten
nur
die
ungef
ä
hren
Sto
ß
l
ä
ngen.
+
Bei
kooperativer
Einplanung
kann
es
zur
Monopolisierung
der
CPU
kommen.
Ja
,
bei
kooperativer
Einplanung
kann
der
laufende
Prozess
erst
gewechselt
werden
,
wenn
das
Programm
kooperativ
ist
und
die
CPU
abgibt.
Ein
unkooperatives
Programm
kann
dies
unterlassen
,
und
die
CPU
f
ü
r
eine
unbegrenzte
Zeit
in
Anspruch
nehmen.
-
Asymmetrische
Einplanungsverfahren
k
ö
nnen
ausschlie
ß
lich
auf
asymmetrischen
Multiprozessor
-
Systemen
zum
Einsatz
kommen.
Nein
,
asymmetrische
Planung
(
eine
Bereitliste
pro
Prozessor
)
muss
zwar
auf
asymmetrischen
Multiprozessorsystemen
(
z.
B.
CPU
und
GPU
)
eingesetzt
werden
,
kann
jedoch
auch
auf
symmetrischen
Multiprozessorsystemen
,
bei
welchen
jeder
Prozessor
gleicherma
ß
en
dieselben
Programme
ausf
ü
hren
kann
,
eingesetzt
werden.
(
vgl.
SP1
C
IX.2
S.
11
ff.
)
.
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment