Betriebssysteme Flashcards
Welche Aufgaben hat ein Betriebssystem /
- Eine abstraktionschicht zwischen Hardware und Software aufzubauen
- Verwaltung der Ressourcen
Was sind Caches ? Warum sind die wichtig ?
Caches sind kleine, aber schnelle Speicher in das CPU, dass Copien von die Haufig verwendeten Daten des Haupspeichers speichern, um Haupspeicheranrufe zu vermeiden
Was passiert bei Systemaufrufen ? (Trap, Parameterubergabe)
Systemaufrufen bilden eine Interface sodass Anwendungen an Funktionen des BS zugreifen koennen.
- Bei Trap Befehle oder Trap Interrupts wirds das BS ins Kernelmodus eingehen.
- Parameterubergabe erfolgt mittels (fkt. args, Tabellen oder von der Call Stack poppen)
Nenne mich 15 Unix systemaufrufe
- fork()
- exit()
-wait()
-open()
-read()
-write()
-close()
-pipe()
-shmget()
-mmap()
–ioctl()
-read()
-write()
-chmod()
-umask()
chown()
-getpid()
-alarm()
-sleep()
Was sind Shells ? Was ist ihre Funktion ins BS ?
Shells sind Kommandozeileninterpreter CLI, setzen Texteingaben in Aufrufe von BS Apis, und stellen die Ausgaben des BS dar.
Was ist der Unterschied zwischen ein Prozess und ein Program ? (4)
- Ein PR ist ein Satz von Anweisungen, bei der Ausfuerhrung wird er als Prozess bezeichnet
- PS sind aktiv, PR passiv
- PS haben begrenzte Lebensdauer
- PR sind in der FS gespeichert, erfordern keine weitere ressourcen. PS enthalten CP, Speicher, EA…
Was ist ein PCB ?
Process Control Block. Sind Datenstrukturen dass die notwendige Informationen zur Steuerung eine Prozesses enthaelt.
Was macht der Syscall execve() ?
Ersetzt das Speicherbild des aufrufenden Prozesses mit den Inhalt des Pfades “name” erstezen.
Wie kann einen Prozess auf einen Kind prozess warten ? Wie erzeugt und terminiert man prozesse ? (code)
while (TRUE) { type_prompt(); read_command (command, parameters); /* Befehl einlesen */ if ( fork() != 0 ) { // parent waitpid (-1, &status, 0); } else { // child execve (command, parameters, 0); } }
Welche Prozesszustaende gibt es ? (5)
- Neu = Prozess wird erstellt
- Beendet = Der prozess wurde beendet
- Laufend = Der Prozess wird ausgefuerht
- Ready = Der prozess wartet um ausgefuerht zu werden
- Wartend/Blocked = Der prozess wartet auf einen Ereignis
Was kann die Prozesszustaende Beeinflussen ?
- Seine Zulassung, terminierung, oder eigene Fehlern
- Interrupts von andere Prozesse
- Der Scheduler
- Das warten auf einen Ereignis
Welche arten von IPC gibt es ?
- Message Passing:
- Synchrone oder Asynchrone Nachrichtuebermittlung
- Vorteile: - Sender kann weiterhin arbeiten
- Nachteile: Sender muss ein handle schicken zum Fragen ob der Nachrit zugestellt wurde, und noch eine Zusaetzliche Nachricht ist fuer die Bestaetigung notig
- Bsp: Sockets, Remote Procedure Calls, Web services
- Shared Memory:
- Erstellung eines Segment des gem. Speichers, wo die Prozesse sich wie Saugetieren attachen.
- Schreiben lesen mittels Kopieren der Speicher
- Trennung mittels detach (shmdt(memory))
- Vorteilen: Schreibzugriffe mussen nicht sofort an die FS geschrieben werden, und nach der Terminierung alle veranderung werden an die FS geschrieben.
Was ist ein Memory Mapped Datei ?
Eine Art von IPC des Typs shared Memory wo einer Dateipfad als Segment id geteilt wird, stets der gem. Speichersegment
Wie sieht eine Implementierung von shared Memory aus ?
segment_id = shmget (IPC_PRIVATE, size, S_IRUSR | S_IWUSR); shared_memory =(char *) shmat (segment_id, NULL, 0); sprintf(shared_memory, "Writing here..."); char read_value = *shared_memory; shmdt (shared memory);
Was sind Pipes ? Wie verwendet man den unter linux ?
Pipes sind Mechanismen die erlauben die Ausgabe von einen Prozess in der Eingabe von einen anderen Prozess umzuwandeln. In linux mit | geschrieben ls -la | grep
Wie werden pipes in C behandelt ?
Pipes in C werden als eine weitere Datei behandelt int main(void){ int pipe_verbindung[2]; pipe (pipe_verbindung); if ( fork()==0 ) { dup2 (pipe_verbindung[1], 1); close (pipe_verbindung[0]); execlp ("who","who",NULL); } else if ( fork()==0 ) { dup2 (pipe_verbindung[0], 0); close (pipe_verbindung[1]); execlp ("sort","sort",NULL); }}
Was ist ein Dateideskriptor unter POSIX ?
Der Index einer Geoffneten Date in der File struct. 0 stdin (tastatur), 1 stdout (konsole), 2 stderr
Konnen mittels DUP2 verandert werden
Wie sieht sich eine PIPE in C aus ?
int main(void) {
int fd[2], nbytes; pid_t childpid;
char string[] = “Hello!\n”; char readbuffer[80];
pipe (fd);
if( (childpid = fork()) == -1) {
perror(“fork”); exit(1);
}
if(childpid == 0) {
close (fd[0]);
/* Child process closes up input side of pipe /
/ Send string through the output side of pipe /
write (fd[1], string, (strlen(string)+1));
exit(0);
} else {
close (fd[1]);
/ Parent process closes up output side of pipe /
/ Read in a string from the input side of pipe */
nbytes = read (fd[0], readbuffer, sizeof(readbuffer));
printf (“Received string: %s”, readbuffer); }
return(0); }
Was ist die Beziehung zwischen Threads und Prozessen ? Welche Vorteilen hat die Verwendung von Threads ? (3)
- Dass Threads innerhalb von ein Prozess laufen, und auf das ganze Speicherbild des Prozesses zugreifen kann.
- Threads sind leichter und schneller zu erzeugen und terminieren (hohere Responsiveness)
- Mehrere threads konnen das selbe Prozessspeicherbild gleichzeitig teilen (dh, kommunikation zwischen Threads einfacher)
- Threads sind gut fuer E/A intensive Aktivitaeten geeignet (nuetzliche Paralelisierung, skalierbar)
Unterschiede zwischen Kernel und Userthreads ? (3)
User level:
- Schnelles Welchsel da kein Sys Interrupt notig - Nachteile: - Thread kann das Program blockieren mittels syscall. Da das BS nicht weiss das dass Prozess mehrere Threads hat - Multi Core Cpus nicht effizient verwentet (1 core x Prozess)
Kernel Level:
- Preemptives Scheduling Moglich da, Threads konnen andere Threads nicht blockieren - Langsamer als user Threads, da Sprungs in BS notig.
Welche sind die Grundaufrufe zur Threadverwaltung in POSIX ? (6)
- pthread_create
- pthread_exit
- pthread_join (wartet auf beedingung eines Threads)
- pthread_yield (Gibt CPU frei)
- pthread_attr_init (init von Attr. struktur)
- pthread_attr_destroy (loscht die Attributsstruktur)
Warum ist threadprogrammierung schwierig ?
Dass wenn jeder Thread auf zb. Globale Variablen zugreift, dann kann die Veranderung von diese Variable einen Anderen Thread beeinflussen.
Loesung: Priv. Variablen pro thread
Was ist eine Race Condition ?
Ist ein Software Problem, wo das Ergebnis einer Programausfuerhrung von der Reihenfolge oder dem Timing von Ereignissen abhaengt.
Geben sie ein Program wo der Lost Update Problem auftritt
- Producer Consumer Problem // producer while(count == buffer_size) // puffer voll buffer[in] = nextProduced // eingabe in = (in + 1) % buffer_size) count++
//consumer while (count == 0) // puffer leer nextConsumed = buffer[out] out = (out + 1) % buffer_size count-- // ausgabe in nextConsumed
//Lost update in var. count
Wie kann man Race Conditions verhindern ?
- Mittels MUTEX (mutual exclusion), dh. verhindern dass zwei Prozesse gleichzeitig in eine Kritische Region auftreten waerhrend dass sie auf Ressourcen zugreifen.
Welcher sind die Mutex Bedingungen (4)
- Keine zwei PR durfen max. in der Krit. Reg. sein
- Keine Annahmen ueber Geschwindigkeit und # von CPUs gemacht werden
- Kein Prozess ausserhalb der Krit. Reg darf andere PR blockieren
- Kein PR sollte viel warten um seine Krit. Reg. zu besuchen
Wie lautet die Loesung von Peterson fuer Mutex ?
- Unter der Annhahmen dass es Zwei Prozesse gibt mit nicht unterbrechbarer CPU Befehle Load und Store kann man:
- Gem. Var. interested[i], besagt der PR i in der Krit. Reg. eintreten mochte
- int turnWait: gibt der nachster Prozess dass warten muss.
Wie lautet der Code von die Loesung von Peterson?
void enter_region(int Process) { int other = 1 - process; interested[process] = true; turnwait = process while(turnWait == process && interested[other] == true) // warten }
void leave_region(int process) { interested[process] = false;}
Welche Hardware befehle Ermoeglichen Locks ?, wie funktioniert das genau ?
- LOAD und STORE assembler befehle
- while(1) {
enter_region() // block access (blockierend)
// code in critical region
leave_region() // free access
}