Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as Plain Text by PB152 ( 6 years ago )
Protože funkce „fork“ vytváří (téměř) identické kopie existujícího procesu, tyto procesy zejména vykonávají stejný program. Operační systém proto poskytuje ještě jinou možnost, jak proces vytvořit, a to systémovým voláním „exec“, která místo kopie paměti stávajícího procesu použije iniciální obraz uložený v dodaném spustitelném souboru.

V systémech dodržujících normu POSIX je primární metodou pro vytváření nových procesů systémové volání „fork“. Tímto voláním se stanou z procesu, který volání provedl, procesy dva. Původní proces je tzv. rodič, nový proces pak potomek. Procesy poté musí zavolat funkci „getpid“ -- z jejího návratové hodnoty poznají, jsou-li rodičem nebo potomkem.

Přesto, že volání „fork“ musí zdánlivě vytvořit kopii celého adresního prostoru daného procesu, jedná se o relativně levnou operaci. Toho je dosaženo tak, že operační systém pouze označí celý adresní prostor za sdílený (a tedy pouze pro čtení). Rodičovský proces je v tento moment pozastaven až do doby, než potomek zavolá funkci „exec“, čím získá nový adresní prostor. Protože od tohoto momentu už adresní prostor není sdílený, může rodič pokračovat ve výpočtu jako obvykle.

Protože funkce „fork“ může procesy vytvářet pouze z existujících procesů, musí existovat nějaký prapůvodní proces, který je rodičem všech ostatních procesů. Tento proces se nazývá „init“ a má tradičně přiděleno PID 1. Tento proces vytvoří jádro během startu systému (boot) a jedním z jeho úkolů je start základních služeb, včetně služby, která umožní uživatelům přihlášení a další práci se systémem.

 

Revise this Paste

Parent: 107811
Children: 107813
Your Name: Code Language: