Inside Windows NT
Based on the book “Inside Microsoft Windows NT” by David Solomon
Windows NT unterstützt die folgenden 3 Umgebungsteilsysteme (Enviroment Subsystems):
Win32, Posix und OS2. Win32 bietet die meisten Möglichkeiten.
- ausführbare Programm
- privater virtueller Adressraum
- Systemressourcen wie Semaphore, Kommunikationsports und Dateien
- Prozess ID
- mindestens einen Thread (primary Thread)
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
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)
Windows NT basiert auf HSL (Hardware Abstraction Layer) hal.dll
Hardware-Gerätetreiber, Dateisystemtreiber, Filtertreiber, Netzwerkprotokolle
Benutzermodus: Anwendungen
Kernelmodus: Systemdienste, Gerätetreiber
Bei einem Systemdienstaufruf wird der Prozessor in einen anderen Modus geschaltet
(trap)
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
- 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
Hauptkomponenten:
- Prozess- und ThreadManager
- virtuelle Speicherverwaltung
- Security Reference Monitor (SRM)
- Ein-/Ausgabesystem
- Cache Manager
Hilfsfunktionen:
- Objekt Manager
- LPCs (Local procedure calls)
- Laufzeitbibliotheksfunktionen
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)
- 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)
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
- Thread-Verteilung (Dispatching)
- Ablauf eines Zeitgebers
- Asynchrone Ausführung
- Asynchrone E/A-Operationen
- Systemressourcen, Einsatz, Beschränkung
- Objektschutz
- Objektbennenungsschemas
- Objekterhaltung (Object Retention)
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)
Gegenseitiger Ausschluss (Mutual Exclusion)
Signalisierende Dispatcher-Objekte:
Mutex, Semaphor, Erreignis (Event), Ereignispaar (Eventpaar),
Timer ,Thread, Critical Section
- Bis zu 256 Byte in Pufferspeicher
- Ab 256 Byte mit ShareMemory
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
IRQLevels: 0-1 Thread-Prioritäten
1-2 Software-Interrupts
3-31 Hardware Interrupts
Initialisiert, Ready, waiting, running, standby, terminated
Jeder Thread hat ein Quantum
Standardwert NT Workstation 6, NT Server 36
Taktgeber-Interrupt zieht den Wert 3 ab
è Verlängerung
des Quatums für Vordergrundprozess
è Prioritätssteigerung
bei Beendigung des Wartezustandes
è Prioritätssteigerung
bei Threads, die keine Prozessorzeit zugeteilt bekommen (aushungernde Threads)
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
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
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
Least-Recently-Used-Algorithmus (LRU)
First-In-First-Out-Algorithmus (FIFO)
- 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)
Initialisierungsroutine, Satz von Verteilroutinen, Start-E/A Routine, Interrupt-Dienstroutine (ISR Interrupt Service Routine), DPC- Routine für die Beendigung von Interrupts
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)