Inside Windows NT

SystemSoftware Übersicht <--- --->COM Basics

SystemSoftware – Windows NT

Based on the book “Inside Microsoft Windows NT” by David Solomon

Umgebungsteilsysteme

Windows NT unterstützt die folgenden 3 Umgebungsteilsysteme (Enviroment Subsystems):
Win32, Posix und OS2. Win32 bietet die meisten Möglichkeiten.

NT-Prozess

-          ausführbare Programm
-          privater virtueller Adressraum
-          Systemressourcen wie Semaphore, Kommunikationsports und Dateien
-          Prozess ID
-          mindestens einen Thread (primary Thread)

Threads

thread-kontext: temporäre Register, Stacks, privater Speicherbereich
Alle Threads teilen sich den gemeinsamen Addressraum eines Prozesses

Threads:
-          Prozessor Register
-          zwei Stacks, vStacks
-          Thread-ID

Addressraum

Standard Layout des Addressraums:
NT-Workstation: 2GB Benutzerspeicher, 2GB Systemspeicher
NT-Server: 3GB Benutzerspeicher: 1GB Systemspeicher
Zuordnung von virtuellem Speicher und physischen Speiche geschieht mittels VAD (Virtual Adressspace Descrptors)

HAL

Windows NT basiert auf HSL (Hardware Abstraction Layer) hal.dll
Hardware-Gerätetreiber, Dateisystemtreiber, Filtertreiber, Netzwerkprotokolle

Kernel vs. Benutzermodus

Benutzermodus: Anwendungen
Kernelmodus: Systemdienste, Gerätetreiber
Bei einem Systemdienstaufruf wird der Prozessor in einen anderen Modus geschaltet (trap)

Objekte und Handles

Mit Objekten lassen sich 3 Aufgaben des Betriebssystems ausführen:
-          Bereitstellen von Namen für Systemressourcen
-          Gemeinsame Nutzung von Ressourcen und Daten
-          Schutz von Ressourcen von unberechtigten Zugrifen

Handles verweisen auf eine geöffnete Instanz eines Objektes

Win32-Teilsystem

-          Umgebungs-Teilsystemsprozess(Csrss.exe)
-          Kernel-Modus-Gerätetreiber(Win32k.sys)
-          Teilsystem-dll(user32.dll, kernel32.dll,...)
-          Gerätetreiber

NTdll.ll: Systemdeinstverteiler-stubs zu Systemdiensten (Schnittstelle zu Systemdiensten), Eintrittspunkte mit gleichem Namen,   Interne Hilfsfunktionen

NT-Ausführungsschicht (Executive)

Hauptkomponenten:
-          Prozess- und ThreadManager
-          virtuelle Speicherverwaltung
-          Security Reference Monitor (SRM)
-          Ein-/Ausgabesystem
-          Cache Manager

Hilfsfunktionen:
-          Objekt Manager
-          LPCs (Local procedure calls)
-          Laufzeitbibliotheksfunktionen

NT-Kernel

NT-Kernel (Ntoskrnl.exe)
-          Scedulling (Rechenzeit auf Threads verteilen und
-          Dispatichng (Abferigung von Threads)
-          Trap-Handling und die Ausnahmeverteilung
-          Interrput-Behandlung und verteilung
-          Multiprozessor-Synchronisation
-          Kernel-Objekte (Kontrollobjekte, Dispatcherobjekte)

Systemprozesse

-          Leerlaufprozess (idle)
-          Systemprozess(System-Threads)
-          Null-Thread erzeugt genullte CodePages
-          Sitzungs-Manager (Smss.exe)
-          Win32-Teilsystem (Csrss.exe)
-          Anmeldeprozess (Winlogin.exe)
-          Local Security Authentication Sever (Lsass.exe)
-          Dienst-Controller (services.exe)

Systemmechanismen

Trapverteilung:
-          Behandlung von Interrupts (ISR Interrupt Service Routine)
-          verzögerte Prozeduraufrufe (DPC –Defered Procedure Call)
-          Asynchrone Prozeduraufrufe (APC – Asynchronous Procedure Call)

Hilfsmittel:
-          TLB- Cache (Translation Look Aside Buffer)
-          IDT (Interrupt Dispatch Table)
-          PCR (Processor Control Region) Zustand über Systemprozessoren

Software-Interrputs

-          Thread-Verteilung (Dispatching)
-          Ablauf eines Zeitgebers
-          Asynchrone Ausführung
-          Asynchrone E/A-Operationen

Objekt-Manager

-          Systemressourcen, Einsatz, Beschränkung
-          Objektschutz
-          Objektbennenungsschemas
-          Objekterhaltung (Object Retention)

Objekttypen

Objektverzeichnis (Dictory), Symbolische Verknüpfung (Symbolic Link), Thread, Datei (File), Port, Zigriffs-Token (Access Token), Ereignis (Event), Semaphore, Mutant (Mutexte), Timer, Warteschlange (Queue), Schlüssel (Key), Profil (Profile)

Synchronisierung

Gegenseitiger Ausschluss (Mutual Exclusion)
Signalisierende Dispatcher-Objekte:
Mutex, Semaphor, Erreignis (Event), Ereignispaar (Eventpaar), Timer ,Thread, Critical Section

LPC – Local Procedure Call

-          Bis zu 256 Byte in Pufferspeicher
-          Ab 256 Byte mit ShareMemory

Thread-Scheduling

WindowsNT: prioritätsgesteuertes preemtives Scheduling-System
Ein Thread hat ein gewisses Quantum(Zeitintervall)
4 Prioritätsklassen: Realtime, High, Normal, idle
7 Relativprioritätsklassen: time critical, highest, ..., lowest, idle

Prioritätsebenen:
0-Systemebene, 1-15 variable Ebene, 16-31 realtime level

Interrupt-Level

IRQLevels:              0-1 Thread-Prioritäten
                               1-2 Software-Interrupts
                               3-31 Hardware Interrupts

Zustände von Threads

Initialisiert, Ready, waiting, running, standby, terminated

Quantum

Jeder Thread hat ein Quantum
Standardwert NT Workstation 6, NT Server 36
Taktgeber-Interrupt zieht den Wert 3 ab

Scheduling von Threads anpassen

è      Verlängerung des Quatums für Vordergrundprozess
è      Prioritätssteigerung bei Beendigung des Wartezustandes
è      Prioritätssteigerung bei Threads, die keine Prozessorzeit zugeteilt bekommen (aushungernde Threads)

Speicherverwaltung

Die zuordnung von virtuellen Adressraum zu physischem Speicher wird mapping gennant.
Ist der Speicher voll werden Teile ausgelagert (paging)
Wenn ein Thread erzeugt wird, wir ein Stack reserviert (1MB ist Standard)
Um physischen Speicher optimiert zu schützen wird kopiere bei Schriebzugriff (copy-on-write) eingesetzt
Jedem Prozess wird beim Start ein Standard-Heap (1MB gross zugewiesen). Bei Bedarf wird automatisch erweitert

Systemspeicherbereiche

Nichtauslagerungsseiten (Nonpaged Pool):
Kann von jedem Adressraum zugegriffen werden, nützlich für IRQL Dispatch/DPC
Auslagerungsseiten (Paged Pool):
werden auf die HD ausgelagert, flexibel

Look-Aside-Listen:
Schnelle Speicherreservierungsmechanismus, nur Blöcke fester Grösse, bei 32 Bytes beginnend und in 32 Schritten bis zu 256 Bytes

Addressraumjverwaltung

Seitenverzeichnisindex (Page Directory Index) bestehend aus Seitenverzeichniseinträgen (PDEs  PAge Directory Entries) um Seitentabelle( Abbildungsinformation) zu ermitteln.
Seitentabellenindex (Page Table Index) um Seitentabelleneintrag zu ermitteln

Auslagerungsstrategien

Least-Recently-Used-Algorithmus (LRU)
First-In-First-Out-Algorithmus (FIFO)

Gerätetreiber

-          Bildschirm und Druckertreiber (Video Device Drivers) GDI – Graphical Device Interfaces
-          Virtueller Gerätetreiber (VDD, Virtualdevice drivers) für 16Bit-MSDOS Anwendungen zu emulieren
-          Kernel-Modus-Gerätetrieber (KDD, Kernel-Mode Device Drivers) greiffen direkt auf die Hardware zu
o         Niederstufige HArdware Gerätetreiber (Hardware Device Drivers)
o         Klassentreiber (Class Drivers)
o         Anschlussteiber (Port Drivers)
o         Miniporttreiber (miniport drivers)
o         Dateisystemtreiber (File System drivers)
o         Filter für Dateisystem (File system filter drivers)

Primäre Gerätetreiberroutine

Initialisierungsroutine, Satz von Verteilroutinen, Start-E/A Routine, Interrupt-Dienstroutine (ISR Interrupt Service Routine), DPC- Routine für die Beendigung von Interrupts

Datenstrukturen

Vier primäre Datenstrukturen repräsentieren E/A-Anforderungen:
 Dateiobjekte (File Objects), Treiberobjekte (Driver Objects), Geräteobjekte (Device Objects) und E/A-Anforderungspakete (IRPs – I/O Request Packet)

SystemSoftware Übersicht <--- --->COM Basics