Bsys 2

Alle Quizfragen aus den Vorlesungen von Prof. Stefan Richter/HSR.

Alle Quizfragen aus den Vorlesungen von Prof. Stefan Richter/HSR.


Fichier Détails

Cartes-fiches 59
Utilisateurs 11
Langue Deutsch
Catégorie Informatique
Niveau Université
Crée / Actualisé 25.07.2018 / 22.01.2020
Lien de web
https://card2brain.ch/box/20180725_bsys_2
Intégrer
<iframe src="https://card2brain.ch/box/20180725_bsys_2/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

Wenn ein Prozess gestartet wird, kopiert das Betriebssystem Umgebungsvariablen und Programmargumente in den Adressraum des Prozesses.

Stimmt

Das Betriebssystem ruft für jedes Programmargument, das mit einem - beginnt, z.B. -c, eine vom Programm bereitestellte Handler-Funktion auf.

Stimmt nicht.

Das handlen von Argumenten ist dem Programm überlassen

Programmargumente und Umgebungsvariablen sind jeweils ein Array, das Zeichenketten erhält.

Sind jeweils ein Array, jedoch enthält dieses Array keine Ziechenkette, sondern einen Pointer auf die Zeichenkette

Um eine neue Umgebungsvariable einzufügen, muss das OS neuen Speicher anlegen und das gesamte Array dort hinein kopieren.

Stimmt

Um den Wert einer Umgebungsvariable zu ändern, muss das OS neuen Speicher anlegen und die Zeichenkette kopieren.

Kommt darauf an, ob mit putenv oder setenv gearbeitet wird.

- putenv erstellt/kopiert

- setenv referenziert

Jedes Programm hat einen eigenen virtuellen Adressraum

Nur die Prozesse haben einen eigenen Adressraum

Wenn ein Interrupt auftritt, speichert der Prozessor immer den gesamten Kontext auf dem Stack

Flasch. Der Prozessor speichert im Prinzip praktisch nichts, nur:

- Flags

- Instruction Pointer

Danach wird der Interrupt Handler aufgerufen. Der bestimmt dann, was gespeichert werden soll. Üblicherweise Register.

Wenn das OS von einem Prozess A zu einem Prozess B schaltet, speichert es den aktuellen Kontext im PCB für A und liest ihn aus dem PCB für B

Wahr

Die Funktion fork startet einen neuen Prozess anhand des angegebenen Dateipfads

Falsch. Es klont das Programm an der aktuellen Stelle im Programmfluss.

Wenn sich der Child-Prozess vor dem Parent-Prozess beendet, wird der dann zum Zombie oder zum Orphan?

Zombie, aber nur wenn kein wait() drin ist.

Jeder Thread hat seinen eigenen Stack und Heap

Falsch. Sie haben einen eigenen Stack, teilen sich aber den Heap

Jeder Thread kann auf jeden Stack jedes anderen Threads im selben Prozess zugreifen.

Stimmt. Threads sind nicht gegeneinander geschützt. Sie können aufeinander Zugreifen und jeglichen Mist machen, auf den man gerade lustig ist.

Ein Prozess kann erst regulär beendet werden, nachdem all seine Threads regulär beendet wurden.

Falsch. Wenn der Prozess beendet wird, werden alle Threads automatisch auch beendet.

Amdahls Regel besagt, dass man mit n Prozessoren nur 1/n-mal soviel Zeit benötigt, wie mit einem Prozessor

Geht nur, wenn wirklich alles parallelisiert werden kann. Dieses Szenario ist in der echten Welt aber praktisch unmöglich, nur Annäherungen sind möglich.

Thread-Local-Storage wird verwendet, um lokale Variablen auf Threads zu verteilen.

Stimmt nicht. TLS bezieht sich auch globale Variablen.

Lokale Variablen sind im Stack des jeweiligen Threads.

Ein Thread im Zustand running kann direkt in den Zustand waiting oder in den Zustand ready wechseln

Stimmt

Die Ready-Queue hält immer alle Threads, die im Zustand ready sind, als FIFO-Puffer vor

Falsch. Gibt auch andere Scheduler, es muss nicht immer FIFO sein.

Bei präemptivem Scheduling wird einem Thread sofort der Prozessor entzogen, wenn ein anderer Thread in den Zustand ready kommt.

Stimmt nicht. Es reicht nicht, dass ein Thread einfach ready ist. Es muss auch einen Grund geben, warum dieser nun ausgeführt werden soll. Z.B. höhere Priorität.

Solange wie ein Thread A läuft, kann kein anderer Thread B seinen Zustand wechseln

Stimmt nicht. Threads können von waiting in den Zustand ready wechseln, egal ob ein anderer Thread läuft.

Round-Robin-Scheduling ist ein präemptives Verfahren, bei dem jeder Thread spätestens nach einer festgelegten Zeit den Prozessor abgeben muss.

Er müsste abgeben, WENN ein anderer Thread kommt. Wenn nur ein Thread läuft, muss er nicht zwingend abgeben.

Eine normale Inkrement-Operation auf einer Speicherstelle wird auf gängigen Architekturen nicht atomar durchgeführt.

Stimmt

Synchronisationsmechanismen können auf modernen Computern nur mit Hardwareunterstützung implementiert werden.

Stimmt.

Moderne Prozessoren machen allerlei Unfug, darum kann man nicht davon ausgehen, dass die Befehle so ausgeführt werden, wie angedacht. Stichwort: Out-of-Order Execution.

Semaphore sind Zähler, die garantiert korrekt erhöht oder erniedrigt werden.

Stimmt

Die Anwendungsprogrammierer müssen dafür sorgen, dass Priority-Inversion nicht auftritt.

Stimmt nicht.

Das Verhindern von Priority-Inversion ist Aufgabe des Betriebssystems

Mutexe können durch binäre Semaphore implementiert werden.

Stimmt

Ein Prozess überschreibe den Signal-Handler für SIGINT und löse in diesem keinen Prozessabbruch aus. Wird der Prozess beendet, wenn Ctrl-C gedrückt wird?

Prozess wird nicht beendet.

Ein Prozess überschreibe den Signal-Handler für SIGKILL und löse in diesem keinen Prozessabbruch aus. Wird der Prozess beendet, wenn kill -KILL processid ausgeführt wird?

Dieser Handler kann nicht überschrieben werden, der Prozess wird beendet.

Zwei Prozesse P und Q kommunizieren über Message-Queues miteinander. Funktioniert folgendes Verhalten zuverlässig?

P sendet eine Nachricht an Q und wartet dann auf eine Nachricht von Q.

Q sendet eine Nachricht an P und wartet dann auf eine Nachricht von P.

Läuft s zuverlässig. Die Prozesse bleiben nie im waiting-state hängen, weil bevor man ins waiting wechselt, hat man was geschickt und der andere Prozess kann weiter machen and vice versa

Das Wurzelverzeichnis heisst /

Nö, das Wurzelverzeichnis hat keinen Namen

Jeder Prozess hat sein eigenens Arbeitsverzeichnis

Jeder Prozess hat sein eigenes ihm zugewiesenens Arbeitsverzeichnis, das er aber nicht exklusiv für sich benutzen kann.

rwxr---- bedeutet, dass der Owner alle Rechte hat und alle anderen Benutzer nur lesen dürfen

Falsch. Der Owner hat Vollzugriff, die Gruppe des Owners darf nur lesen, andere Benutzer dürfen gar nichts.

File-Deskriptoren sind Indizes in eine globale Tabelle über alle Prozesse

Die Tabelle ist pro Prozess, von dort geht es dann in eine globale Tabelle

Alle I/O-Funktionen, die einen File-Deskriptor erhalten, arbeiten auf einem Puffer, der über den File-Deskripter referenziert werden kann.

FD sind die direkt API, die direkt auf Geräte zugreifen.

Die C-API hat einen Pointer auf Datentyp File und darüber einen Puffer. Bei Write get es direkt in die Datei, ohne Puffer

Zu jeder Datei und jedem Verzeicnis in ext2/ext4 gibt es genau einen Inode, aber beliebig viele Pfade (ausser Wurzelverzeichnis)

Stimmt

Jeder Inode von ext2/ext4 wird im Programm durch genau einen File-Deskriptor repräsentiert

Stimmt nicht, es können mehrere File-Deskriptoren auf einen Inode geöffnet werden.

Der doppelt indirekte Index in einem Inode bezeichnet einen Block, der Einträge enthält, die jeweils einen Block bezeichnen, der jeweils Einträge enthält, die jeweils einen Block bezeichnen, der einen Teil der Daten der Datei enthält, die durch diesen Inode repräsentiert wird.

"Satz sollte so stimmen" - Prof Stefan Richter, 2018

Der Superblock ist ein Block mit Metadaten, der einmal pro Gruppe existiert

Stimmt nicht.

Es ist kein Block, sondern ist ein Teil eines Blocks

Journaling liefert auf Festplatten u.a. deshalb einen Vorteil, weil die Daten sehr schnell in einen zusammenhängenden vorläufigen Bereich geschrieben werden können und dann später mit grösserem Aufwand an ihre endgültige Position

Stimmt. Journaling sort nicht nur für die Integrität des Filesystems, sondern eben auch für die oben erwähnte Aussage.

Der Loader lädt Executables, so dass sie als Prozesse ausgeführt werden können.

Stimmt

Das ELF Format umfasst eine Linking und eine Execution View

Stimmt