Was ist ein Prozess?
Über welche Ressourcen verfügt ein laufendes Programm?
Die in diesem Blog verfassten Artikel wurden mit dem Ziel erstellt, zu unterrichten. Außerdem können die Informationen im Artikel falsch sein, also seien Sie bitte vorsichtig.
Eine ausführbare Datei besteht aus Code und Daten, die auf der Festplatte gespeichert sind. Der Zustand, in dem das Betriebssystem diese ausführbare Datei in den Speicher lädt und die für die Ausführung erforderlichen Ressourcen anfügt, wird als Prozess bezeichnet.
Mit anderen Worten: Ein Programm ist eine Datei und ein Prozess ist eine Instanz eines laufenden Programms.
Was für ein Prozess hat
Ein Prozess enthält mehr als nur Code.
- Unabhängiger virtueller Adressraum
- Ausführbarer Code und globale Daten
- Dynamisch zugewiesener Heap
- Vom Thread verwendeter Stapel
- Offene Datei- und Socket-Informationen
- Sicherheitsberechtigungen und Prozessidentität
hohe Adresse
┌──────────────┐
│ Stack │ Funktionsaufrufe und lokale Variablen des Threads
├──────────────┤
│ │
│ Heap │ Dynamische Zuordnung wie New, Malloc usw.
├──────────────┤
│ Daten / BSS │ Globale Variablen, statische Variablen
├──────────────┤
│ Code │ Befehl zur Ausführung
└──────────────┘
niedrige Adresse
Die tatsächliche Anordnung und die detaillierten Bereiche können je nach Betriebssystem und ausführbarem Dateityp variieren, der Ablauf bei der Bereitstellung von Speicherbereichen für unterschiedliche Zwecke ist jedoch derselbe.
Prozesse sind voneinander isoliert
Selbst wenn Prozess B den von Prozess A verwendeten Zeiger übernimmt, kann er nicht auf dieselben Daten zugreifen. Dies liegt daran, dass jeder Prozess über einen eigenen virtuellen Adressraum verfügt und der Kernel ihn über Seitentabellen mit dem realen Speicher verbindet.
Diese Isolation bedeutet, dass ein Fehler in einem Browser nicht sofort den Speicher anderer Programme zerstört.
Prozesse benötigen eine Möglichkeit, miteinander zu kommunizieren
Da der Speicher separat ist, muss IPC (Inter-Process Communication) zum Datenaustausch zwischen Prozessen verwendet werden.
- Pipe
- Shared Memory
- Socket
- Message Queue
Shared Memory ist schnell, erfordert jedoch bei gleichzeitigem Zugriff eine Synchronisierung. Socket- und Nachrichtenmethoden haben klare Grenzen, können jedoch Datenkopier- und Kommunikationskosten verursachen.
Ein Prozess ist nicht einfach ein Stück ausführenden Code. Das Betriebssystem ist näher an einem Ressourcencontainer, der Speicher, Dateien, Berechtigungen und einen oder mehrere Threads verwaltet.