FHNW: bsys 2

Notizen und Begriffe für zweite Prüfung des Moduls bsys

Notizen und Begriffe für zweite Prüfung des Moduls bsys


K. L.
Diese Lernkarten behandeln fortgeschrittene Themen der Informatik an der Universität, mit Fokus auf Betriebssysteme, Sicherheit und verteilte Systeme. Sie decken Prozesse, Systeme, Kernel, Ressourcenmanagement, Synchronisation und Sicherheitsmaßnahmen ab. Besonders relevant für Studierende und IT-Profis, die sich mit der Optimierung und Absicherung von Systemen beschäftigen, bieten sie praktische Einblicke in die Verwaltung von Ressourcen, die Vermeidung von Deadlocks und die Verbesserung der IT-Sicherheit durch regelmäßige Überprüfungen und Updates.
Karten
45
Lernende
4
Sprache
Deutsch
Kategorie
Informatik
Stufe
Universität
Erstellt / Aktualisiert
03.06.2016 / 08.04.2019

Lernkarten

Wann können in Unix die Prozesse unterbrochen werden?

  • freiwilig durch Systemaufruf mit Wartezustand oder Abgabe der CPU (sleep, wait)
  • ungeplant durch den Scheduler auf Basis von Priorisierung und Ressourcenverbrauch oder nach Ablauf der Zeitscheibe
  • ungeplant durch asynchronen Events (z.B. Interrupts, die durch den gerade laufenden Prozess behandelt werden müssen)

Was muss der Prozess tun bei einem Unterbruch?

Ein Prozess muss seinen Ausführungskontext unterbrechen, abspeichern (im PCB), zum neuen Kontext wechseln, im neuen Kontext ablaufen, den alten Kontext wiederherstellen und neu starten können (Aufgabe des Kernels).

Context-Switching ist purer Overhead, weil das System in der Zeit des Auswechselns nichts sinnvolles macht.

Die Rolle des Schedulers

Der Scheduler teilt Prozessen Rechenzeit zu und sequentialisiert damit die nebenläufige Ausführung von Prozessen oder Threads auf einer oder mehreren CPUs. Bei genügender Performance des Systems geschieht dies so rasch, dass für den Benutzer der Eindruck der Parallelität entsteht. 

Synchronisationmittel: Benachrichtigung & Warten

  • Modell 1: Prozess wartet aktiv auf das Eintreffen einer Nachricht (busy waiting). Sofortige Erkennung ist dadurch möglich, aber es verbraucht nutzlos Rechenzeit. Zudem sind keine nebenläufige Aktivitäten im Prozess möglich.
     
  • Modell 2: Prozess wartet (schläft) auf das Eintreffen eines Wecksignals. Der Signal-Mechanismus von Unix weckt dann (via den Scheduler) alle auf dieses Ereignis wartenden Prozesse. Dabei wird keine Rechenzeit verbraucht und Nebenläufigkeit ist möglich.

Synchronisationsmittel: Locks / Lock-Bits

Entweder mit einem Lock-File (Dateisystem) oder im Speicher mit sogenannten Lock-Bits.

Modell: Der Prozess prüft zyklisch auf Zustandsänderungen des Bits und modifiziert das Bit falls erlaubt.

Problem: Meist keine atomare Operation wegen jederzeitiger Unterbrechbarkeit, es kann daher zu Problemen kommen, wenn die Implementation nicht durch unteilbare CPU-Instruktionen (Intel Opcode cmpxchg) unterstützt wird.

Synchronisationsmittel: Ereigniszähler

Variante eines Locks, welches durch eine Zählervariable (im Shared Memory z.B.) implementiert wird.

Sinnvoll, wenn mehrere Prozesse zu synchronisieren sind, z.B. maximale Anzahl quasiparalleler Leseprozesse auf einer Datenbank.

Problem: Dasselbe wie bei den Locks: Nicht Atomare Operationen.

Race Condition (Synchronisation)

A situation, where several processes access and manipulate the same data concurrently and the outcome of the execution depends on the particular order in which the acess takes place, is called a race condition. To guard against race condition, we need to ensure that only one process at a time can be manipulating the variable / data. To make such a guarantee, we require that the processes be synchronized in some way. (Operating System Concepts)

Race Conditions im Kernel (Beispiel)

At a given point in time, many kernel-mode processes may be active in the operating system. As a result, the code implementing an operating system (kernel code) is subject to several possible race conditions.

Consider as an example a kernel data structure that maintains a list of all open files in the system. This list must be modified when a new file is opened or closed (adding the file to the list or removing it fromthe list). If two processes were to open files
simultaneously, the separate updates to this list could result in a race condition. Other kernel data structures that are prone to possible race conditions include structures for maintaining memory allocation, for maintaining process lists,
and for interrupt handling. It is up to kernel developers to ensure that the operating system is free from such race conditions.

Critical Section

Ein Code Segment eines Prozesses, dass globale Variablen, Tabellen aktuallisiert, Files schreibt oder andere gemeinsame Resourcen manipuliert, die für andere Prozesse auch zugreifbar sind, nennt man Critical Section.

Während ein Prozess im Critical Section ist, darf kein anderer Prozess in seinem Critical Section sein (Mutual Exclusion).

Preemptive Kernel

Ein Preemptive Kernel erlaubt es, dass ein Prozess preempted wird, während es im Kernel Mode läuft.

Preemptive Kernels sind von Race Conditions betroffen, deswegen müssen sie so aufgebaut sein, dass geteilte Kernel Daten von Race Conditions befreit sind.

Vorteile eines Preemtpive Kernel: Ist mehr responsive, weil ein Kernel Mode Prozess nicht für eine unbestimmte Zeit läuft. Zudem sind sie eher für Real-Time Programmierung gedacht, da ein Real-Time Prozess ein Prozess im Kernel preempten kann.

Non-Preemptive Kernel

Ein Non-Preemptive Kernel erlaubt es nicht, dass ein Prozess preempted wird. Ein Kernel-Mode Prozess läuft solange bis es den Kernel-Mode verlässt, blockt oder freiwillig die Kontrolle der CPU abgibt.

Ein Non-Preemptive Kernel ist von Race Conditions befreit, da nur ein Prozess im Kernel aktiv sein kann.

Synchronisationsmittel: Mutex-Locks

Steht für Mutual Exclusion Lock.

Mutex Locks werden verwendet, um die Critical Sections zu schützen und so Race Conditions zu vermeiden.

Ein Prozess muss den Lock bekommen, bevor er in den kritischen Sektor darf und diesen dann wieder freigeben, falls er damit fertig ist.

Mutex Lock hat in der Regel zwei Methoden aquire und release. Ein Boolean-Wert available (Binärer Lock) wird dabei manipuliert.

Vorteile und Nachteil von Mutex Locks

Nachteil: Es muss Busy Waiting betrieben werden. Während ein Prozess im Critical Section läuft, müssen andere Prozesse ständig im Loop Nachfragen, ob sie in Critical Section dürfen. Solche Mutex-Locks werden auch Spinlocks genannt. Busy Waiting verschwendet CPU-Zyklen und hindert andere Prozesse vom Laufen.

Vorteil: Kein Context-Switching notwendig. Falls Spin-Locks nur für eine kurze Zeit gehalten werden, können sie durchaus sinnvoll sein, da Context-Switching auch aufwendig sind.

Synchronisationsmittel: Semaphore

Ein Semaphor beinhaltet einen internen Zähler und eine Queue für wartende Prozesse.

Operationen: Initialisierung, wait (P) und signal (V)

Binary Semaphore funktionieren ähnlich wie Mutex-Lock, weil der Zähler nur von 0-1 geht.

Counting Semaphore können bis zu einer beliebige Stelle gehen.

Es ist wichtig das die Semaphor-Operationen atomarisch ausgeführt werden. Es muss garantiert sein, dass keine zwei Prozesse gleichzeitig wait() und signal() auf das gleiche Semaphor ausführen (Critical Section Problem)

Wie funktioniert ein Counting Semaphore? Ein Beispiel:

Counting semaphores can be used to control access to a given resource consisting of a finite number of instances. The semaphore is initialized to the number of resources available. Each process that wishes to use a resource performs a wait() operation on the semaphore (thereby decrementing the count). When a process releases a resource, it performs a signal() operation (incrementing the count). When the count for the semaphore goes to 0, all resources are being used. After that, processes that wish to use a resource will block until the count becomes greater than 0. (Operating Systems Concepts)

Implementierung von Semaphoren

Each semaphore has an integer value and a list of processes list. When a process must wait on a semaphore, it is added to the list of processes. A signal() operation removes one process from the list of waiting processes
and awakens that process.

When a process executes the wait() operation and finds that the semaphore value is not positive, it must wait. However, rather than engaging in busy waiting, the process can block itself. The block operation places a process into a waiting queue associated with the semaphore, and the state of the process is switched to the waiting state. Then control is transferred to the CPU scheduler, which selects another process to execute. 

A process that is blocked, waiting on a semaphore S, should be restarted when some other process executes a signal() operation. The process is restarted by a wakeup() operation, which changes the process fromthe waiting state to the ready state. The process is then placed in the ready queue. (The CPU may or may not be switched from the running process to the newly ready process, depending on the CPU-scheduling algorithm.)

Wann treten Deadlocks auf?

  • die umstrittene Ressourcen nur exklusiv nutzbar sind,
  • die umstrittenen Ressourcen nicht entzogen werden können,
  • die Belegung von Ressourcen schon möglich ist, auch wenn auf die Zuweisung weiterer Ressourcen gewartet werden muss,
  • eine zyklische Kette von Prozessen aufftritt, in der jeder Prozess mindestens eine Ressource besitzt, die der nächste Prozess in der Kette benötigt.

Gegenmassnahmen zu Deadlocks:

Es gibt zwar Applikationen die in der Lage sind, Deadlocks in Programmen zu finden, Betriebsysteme stellen aber solche Deadlock-Prevention Einrichtungen nicht zur Verfügung. Es bleibt die Aufgabe des Programmierers Deadlock-freie Programme zu entwerfen.

Folgendes kann dagegen unternommen werden:

  • Sicherstellen, dass immer eine der Deadlock-Bedingungen nicht erfüllt ist.
  • Zukünftige Ressourcenbedarf der Prozesse analysieren und Zustände erkennen/verbieten, die zu Deadlocks führen
  • Bereits eingetretenden Deadlock erkennen und auflösen

Deadlock

In einem Deadlock, werden die Prozesse nie Abschliessen und System Resourcen bleiben besetzt, was andere Prozesse davon hindert überhaupt zu starten.

Eine Menge von Prozessen sind in einem Deadlock Zustand, wenn jeder Prozess dieser Menge auf einen Event wartet, der nur von einer diesen Prozessen aufgerufen werden kann. Solche Zustände passieren in der Regel, wenn man auf eine Resource (CPU, Memory, File, Semaphore, etc.) wartet.

Starvation ist ein Zustand, wo alle Prozesse unendlich lange warten. Dies kann in einem Semaphore entstehen (Liste wartender Prozesse).

Nach folgendem Muster greift ein Prozess auf eine Resource zu:

  1. Request: Anfrage an Resource. Falls Resource bereits alloziert, muss der Prozess warten, bis er die Resource übernehmen kann.
  2. Use: Der Prozess manipuliert die Resource.
  3. Release: Der Prozess gibt die Resource für den nächsten Prozess frei.

Zusammenhang zwischen Race Condition, Locks und Deadlocks

Developers of multithreaded applications must remain aware of the possibility of deadlocks. The locking tools like Semaphores and Mutex are designed to avoid race conditions. However, in using these tools, developers must pay careful attention to how locks are acquired and released. Otherwise, deadlock can occur, as illustrated in the dining-philosophers problem.

Synchronisationsmittel: Montior (Synchronization)

  • Ein Modul oder ADT (Abstract Data Type), welches Daten und Methoden/Prozeduren enthält
  • Der Compiler fügt das Locking und die Synchronisation hinzu und forciert es während der Run-Time
  • Aufruf des Monitor Entry durch beliebig viele Prozesse; Garantie des wechselseitigen Ausschlusses
  • Prozeduren/Methoden eines Monitors können auf globale Daten zugreifen, die lokalen Daten des Monitors sind aber von aussen nicht zugänglich
  • Im Inneren eines Monitors ist es ggf. nötig, dass eine Aktivität wartet. Eine wartende Aktivität wird vom Monitor ausgelagert, damit sie nicht blockiert wird und andere Aktivitäten eintreffen können.

Synchronisationsmittel: Rendezvous

  • Synchronisation von entfernten Prozeduraufrufen (RPC)
  • Aufrufer-Prozedur wird blockiert, bis die entfernte Prozedur ausgeführt wurde.
  • Prozedur-Anbieter bleibt blockiert, bis eine seiner Prozeduren aufgerufen wird.
  • Operationen: anbieten, beantragen (Warteschlange), annehmen, ausführen

Verteilte Systeme

Ein verteiltes System ist nach der Definition von Andrew S. Tanenbaum ein Zusammenschluss unabhängiger Computer, die sich für den Benutzer als ein einziges System präsentieren.

Peter Löhr definiert es etwas grundlegender als „eine Menge interagierender Prozesse (oder Prozessoren), die über keinen gemeinsamen Speicher verfügen und daher über Nachrichten miteinander kommunizieren“.

Verteilungsstrategien

  • Hardware / Software / Benutzung
  • Client-Server: Clients greifen auf einen oder mehrere Server bzw. Services zu
  • Verteiltes Dateisystem (NFS z.B.): Ein über mehrere Server verteiltes virtuelles Dateissystem steht Clients zur transparenten Benutzung zur Verfügung
  • Loose Coupling / Netzwerkfähiges OS: Das OS stellt systemübergreifende Funktionalität (rcp, rsh) zur Verfügung
  • Verteiltes OS (close coupling): Das Betriebsystem ist verteilt, für Benutzer und Anwendungen ist dies nicht sichtbar.

Gründe für eine Verteilung

Mit verteilten Systemen kann eine echte Nebenläufigkeit realisiert werden; das heißt, dass mehrere Prozesse echt gleichzeitig ausgeführt werden können. 

  • Verteilung vs. Parallelität (Web Server der die Last verteilt)
  • Lastverteilung
  • Leistungssteigerung
  • Skalierbarkeit / Flexibilität (einfaches Hinzufügen von Rechnern)
  • Sicherheit / Zuverlässigkeit / Verfügbarkeit (CERN Berechnungen und Redundanz von Funktionen)
  • Preis / Leistung bzw. Kostenreduktion
  • Gemeinsame Datennutzung
  • Gemeinsame Nutzung teurer Peripherie
  • Applikatorische Verterteilung (z.B. Email)

Risiken und Nachteile von verteilten Systeme

  • Erhöhte Komplexität
  • Erschwerte Fehlersuche
  • Verlängerte Abhängigkeitsketten (Netzwerk z.B.)
  • Sicherheitsdispositiv wird aufwendiger (Wiederherstellen eines Fehlers fast unmöglich)
  • Nicht alle Subsysteme (Hard- und Software) eignen sich für die Verteilung
  • Sicherstellung der Konsistenz und Synchronisation

Real-Time Systeme können nicht verteilt werden, da die Zugriff auf Resourcen oder Priorisierung nicht zuverlässig garantiert ist. 

Anforderungen an verteilte Betriebsysteme

  • Gemeinsamer Kernel Code und System Calls
  • Gemeinsamer Hauptspeicher (Page Table mit einer weiteren Spalte erweitern, welche Netzwerkadresse beinhaltet)
  • Gemeinsames Prozess-Steuersystem
  • Gemeinsames Dateisystem (NFS, UUID, GUID, Rechte...)
  • Gemeinsame Interprozess-Kommunikation
  • Gemeinsame Ausnahmebehandlung
  • Gemeinsame Synchronisationsmechanismen
  • Gemeinsames Systemmanagement
  • Spezialisierte Funktionen für das Management der Verteilung
  • Transparente Benutzerschnittstelle

Anforderung an verteilte BS: Transparenz

Für den Benutzer sowie für die Applikation eines verteilten Systems ist die Art der Verteilung nicht relevant und idealerweise auch nicht ersichtlich. Das System verhält sich transparent (i.S.v. durchsichtig), als hätte der Nutzer es mit einem Gesamtsystem zu tun.

  • Ortstransparenz: Der Ort der genutzten Resourcen / erbrachten Dienste ist für den Anwender nicht sichtbar.
  • Migrationstransparenz: Ressourcen können verlagert werden, ohne dass sich ihr Name bzw. Nutzung verändert.
  • Replikationstransparenz: Anwender können nicht erkennen, wie viele Instanzen es gibt.
  • Nebenläufigkeitstransparenz: Mehrere Anwender können die Ressourcen automatisch gemeinsam und unabhängig voneinander nutzen.
  • Parallelitätstransparenz: Aktivitäten können parallel bzw. nebenläufig ausgeführt werden, ohne dass der Anwender es bemerkt.

Anforderung an verteilte BS: Flexibilität

  • Services sollen dynamisch an den Bedarf anpassbar sein, entweder durch administrative Eingriffe oder durch Eigenkonfiguration zur Laufzeit
  • Änderungen sollen keinen kompletten Neustart des verteilten Systems erfordern.

Anforderung an verteilte BS: Performance

  • Verteilungs- und Kommunikations-Mehraufwand muss den Aufwand wert sein.
  • Wiederholbarkeit / Determinismus von Leistungsindikatoren 
  • Abhängigkeit von nicht direkt kontrollierbaren Komponenten (z.B. LAN)
  • End-zu-End Performance statt Komponenten-Performance

Anforderung an verteilte BS: Skalierbarkeit

  • Angebotseite:
    • Statische oder dynamische Zufügung / Wegnahme von Servern
    • Verrechnung: Durchschnitt oder peaks?
    • Vermeiden von Flaschenhälsen durch starke Serialisierung (Applikationskomponenten, Datenstrukturen, Algorithmen)
  • Dienstnehmerseite:
    • Nicht vorhersagbare Anzahl Dienstnehmer (Mit wem teile ich das System? Unbekannt)
    • Einhaltung von Dienstgütgegarantien

Anforderung an verteilte BS: Zuverlässigkeit

  • Erhöhte Zuverlässigkeit gegenüber Einzelsystemen trotz additiver Ausfallwahrscheinlichkeiten (Redundanz).
  • End-zu-End Verfügbarkeit statt Komponentenverfügbarkeit (Vertikale Verfügbarkeit)
  • Sicherheit: Gleiche Richtlinien und Umsetzung im gesamten verteilten System
  • Fehlertoleranz (versus Overhead)
  • Automatisches Recovery von Komponenten

Mach Kernel

  • Microkernel-Architektur: Auslagerung grosser teile des ursprünglichen Kernel-Codes in den User-Level
  • Beinhaltet keine Security: Die Services sind nicht durch den Kernel geschützt (siehe Bild).
  • Derivate: MachTen, Mac OS X, iOS
  • Kernel Elemente:
    • Task: Umgebung um Prozesse auszuführen. Er beinhaltet einen virtuellen Adressraum, Ports zur Kommunikation und mindestens einem Thread.
    • Thread: Ein Task kann mehrere nebenläufige Threads enthalten. Diese verwenden alle die Resourcen eines Tasks (Speicher, Ports, etc.)
    • Port: Einfacher Kommunikationskanal. Zugriffe werden vom Kernel kontrolliert (Port Rights).
    • Nachrichten: Werden zwischen Tasks und Kernel über Ports ausgetauscht.
    • Memory Objects: Speicher für Tasks. 

Synchronisation in verteilten Systeme: Zeit

Generell gilt das Vorstellen der Zeit einfacher ist als das Rückstellen (Banksysteme)

  • Absolut: (Zeit-Server durch Network Time Protocol oder eigene Referenzuhr durch Peripheriegerät)
  • Relativ: Median von mehreren Quellen (intern und extern) oder Lokalzeit nutzen, falls Abweichungen gross sind

Synchronisation in verteilten Systemen

Semaphore and Monitor that protected critical section in single system are no longer appropriated in distributed systems. So in distributed systems, we must use a special algorithm to achieve mutual exclusion. There are 3 basic algorithms to be considered and work as a baseline for developing another mutual exclusion algorithm in distributed systems.
Those 3 are:

  • Centralized algorithm:
    • Reliable and deterministic
    • Strong serialization
  • Distributed algorithm:
    • Sends messages to all processes and waits for responses (reliable messaging necessary)
  • Token ring algorithm:
    • Explicit permission to access in a pre-determined order
    • Not optimized usage of resources and waiting time

Image Depicts Centeralized Algorithm

Verwaltung von gemeinsam genutzten Speicher

  • Eng gekoppelt:
    • (Non-Uniform Memory Access) NUMA: Hardware Multiprozessoren mit diversen Prozessoren am gleichen Bussystem.
  • Lose gekoppelt:
    • Distributed Shared Memory (DSM): Ein Seitenladefehler wird dadurch aufgelöst, dass eine Seite nicht von der lokalen Disk geladen wird, sondern von einer entfernten Disk
    • Schlechte Performance, lange Netz-Wartezeiten
    • Optimierung durch Anlage nur der gemeinsam benutzten Datenstrukturen auf gemeinsam genutzten Seiten, alle anderen Seiten bleiben lokal.

Vergleich zwischen monolitischen und verteilten OS

  • Monolit präferiert Effizienz vor Robustheit
  • Eine Schichtenarchitektur des Betriebssystems fördert die Robustheit durch die Anordnung von Funktionalität in gegeneinander abgrenzte Shichten mit unterschiedlichen Privilegien.
  • Eine Microkernel-Architektur präferiert Robustheit vor Effizienz
     
  • Monolithic kernels are faster than microkernels. The first microkernel Mach was 50% slower than Monolithic kernel, while later version like L4 were only 2% or 4% slower than the Monolithic kernel.
  • Monolithic kernels generally are bulky. A pure Microkernel has to be small in size, to fit into the processor's L1 cache (first generation microkernel).
  •  Adding a new feature to a monolithic system means recompiling the whole kernel, whereas with microkernels you can add new features or patches without recompiling.

Typische Schwachstellen von ICT-Systemen

  • Lieferwege (physisch, aber vor allem elektronisch)
  • Software-Voreinstellungen (Defaults)
  • Funktionale Fehler der Software / Ausnutzbarkeit von Nebeneffekten
  • Nicht getestete oder nicht autorisierte Änderungen
  • Fremd-/Fernzugriffe oder Auslagerung aus dem Sicherheitskontext
  • Benutzer und Administrator

Analyse von Schwachstellen in OS

Unix

  • Fehlerhafte Default Konfigurationen
  • Unnoetige Services / Ports
  • Zu wenig restriktive Zugriffsrechte
  • Technische Benutzer ohne oder mit schlechten Passworte
  • Brute Force Passwort-Angriffe auf Dienste wie telnet, ftp, ssh
  • Ausnutzung von Software-Schwachstellen (Memory Overflow, Authentifizierung, etc.)

Windows

  • Angriffe auf Service Control Programme (SCP)
  • Unbenötigte Services
  • Lokale Administrationsrechte
  • Ausnutzung von Software-Schwachstellen

Schützenswerte Güter

  • Verfügbarkeit
  • Vertraulichkeit
  • Korrektheit
  • Zeitliche Abfolge
  • Bereitstellungstermin
  • Identität / Autorisierung
  • Handlungsfähigkeit
  • Guter Ruf / Image

Lernen