Přístup procesů do paměti
Z MiS
(Rozdíly mezi verzemi)
(Vytvoření stránky) |
(Při čtení a zápisu dohledání vykonává procesor.) |
||
(Nejsou zobrazeny 3 mezilehlé verze od 1 uživatele.) | |||
Řádka 1: | Řádka 1: | ||
− | [[Category:VSE]][[Category:Informatika]][[Category:Stránky s obrázky]] | + | [[Category:VSE]][[Category:Informatika]][[Category:Procesy]][[Category:Stránky s obrázky]] |
+ | |||
+ | == Pravidla pro běh více procesů == | ||
+ | * Proces nemůže a nesmí být ovlivněn činností jiných procesů. | ||
+ | * Programátor při psaní kódu nemusí řešit, kolik a jakých procesů v paměti bude. | ||
+ | * Každý proces funguje tak, jako by byl v počítači jediný. | ||
+ | * Fakt, že byl proces „uspán“ a mezitím běžely jiné procesy nesmí proces nijak poznat — veškerá data, která měl k dispozici, musí zůstat stejná. | ||
+ | |||
+ | |||
+ | == Jak data ochránit? == | ||
+ | ; Obsah registrů procesoru → uloží se do paměti | ||
+ | * Co se týče obsahu registrů procesoru, je situace jednoduchá. | ||
+ | * Při změně kontextu („přepnutí procesu“) se obsah všech registrů (řádově jsou to stovky byte) uloží na vyhrazené místo do operační paměti. | ||
+ | * Při [[Plánování procesů | přepínání procesů]] se hodnota registrů procesoru aktualizuje tak, aby po opětovném „probuzení“ měl proces své hodnoty registrů, které si nastavil před „usnutím“. | ||
+ | |||
+ | ; Obsah operační paměti → musí zůstat | ||
+ | * Obsah operační paměti ale nemůžeme někam „zazálohovat“. Teoreticky by šla uložit na pevný disk, ale operační paměť má velkou kapacitu a ukládání tak velkého množství dat na disk by přepínání procesů nepřípustně zdrželo — nezapomeňte, že přepínání desítek procesů se musí stíhat tak rychle, aby si uživatel myslel, že všechny procesy běží zároveň. | ||
+ | * Data procesů v operační paměti tedy musí zůstat a musíme zajistit, aby žádný proces nemohl číst ani zasahovat oblast, která mu nepřísluší. | ||
+ | |||
+ | |||
+ | == Postup při práci s pamětí == | ||
+ | |||
+ | ; Řešení | ||
+ | * Každý proces se chová, jako by měl svou ''virtuální paměť'' jen pro sebe (množství je pro daný operační systém pevně dané, programátor se tedy o množství paměti nestará). | ||
+ | * Při práci s operační pamětí proces vždy odkazuje na adresu ve své ''virtuální paměti''. | ||
+ | <div class="Poznamka">Na schématu dále je ''virtuální paměť'' jednotlivých procesů znázorněna modrými sloupci. U každého sloupce je uvedeno číslo procesu (''PID'') procesu, jemuž tato virtuální paměť patří.</div> | ||
+ | * Přístup do operační paměti nemůže proces řešit přímo, ale vždy musí využít služeb operačního systému. | ||
+ | <div class="Varovani"> | ||
+ | Toto omezení je řešeno přímo na úrovni hardware procesoru: | ||
+ | * Procesor má při provádění instrukcí procesu informaci o tom, zda se jedná o běžný proces, nebo zda se jedná o systémový proces — součást jádra operačního systému. Podle toho procesor řeší požadavky na práci s operační pamětí odlišně. Proto žádný proces nemůže omylem ani záměrně tuto kontrolu obejít. | ||
+ | * Problém by mohl nastat jedině tehdy, kdy by operační systém při spouštění procesu špatně nastavil příznak a spustil běžný proces jako systémový. | ||
+ | </div> | ||
+ | |||
+ | ; Postup při alokaci paměti | ||
+ | * Proces zažádá operační systém o přidělení paměti. Používá přitom adresy v&bnsp;rámci virtuální paměti (VPFN — Virtual Page Frame Number). | ||
+ | * Operační systém si uloží informaci: | ||
+ | ** který proces žádal (PID) | ||
+ | ** jakou adresu (VPFN) ve virtuální paměti chce proces obsadit, | ||
+ | ** kam data skutečně budou zapsána ve fyzické paměti (PFN — Page Frame Number). | ||
+ | |||
+ | ; Postup při čtení/zápisu z/do paměti | ||
+ | * Proces oznámí procesoru adresu VPFN, kterou chce použít (zapíše ji do odpovídajícího registru). | ||
+ | * Procesor dohledá v tabulce (kterou vytvořil operační systém) odpovídající PFN a vyzvedne/upraví data. | ||
+ | |||
+ | == Schéma zápisu do paměti == | ||
+ | |||
+ | ; Modré sloupce — virtuální paměť procesů | ||
+ | * Modré sloupce reprezentují virtuální operační paměť jednotlivých procesů. | ||
+ | * U každého sloupce je uvedeno číslo procesu (PID), kterému daná virtuální paměť patří. | ||
+ | |||
+ | ; Žlutý blok — skutečná operační paměť | ||
+ | * Do ní smí zapisovat pouze operační systém. | ||
+ | * Operační systém si v ní mimo jiné vede tabulku, pomocí které překládá požadavky procesů na práci s VPFN na skutečné adresy PFN. | ||
+ | * Některé paměťové bloky lze dokonce dočasně přesunout na disk (swappování) — před dalším použitím ale musí být přeneseny zpět do operační paměti. | ||
+ | |||
<div class="NaStred">[[Image:pristup_procesu_do_pameti.png]]</div> | <div class="NaStred">[[Image:pristup_procesu_do_pameti.png]]</div> | ||
+ | |||
+ | |||
+ | |||
+ | == Swappování — co když se data do (fyzické) paměti nevlezou? == | ||
+ | * V takovém případě je třeba data procesů, které právě neběží, odložit na pevný disk — to označujeme jako ''swappování''. | ||
+ | * Než budou procesy opět spuštěny, bude třeba data znovu načíst do operační paměti. | ||
+ | * Takto můžeme mít „uloženo v operační paměti“ více dat, než kolik je celková kapacita operační paměti. | ||
+ | |||
+ | ; Nevýhody swappování | ||
+ | * Výrazně zpomaluje přepínání procesů a&nbps;tím i celkovou odezvu systému. | ||
+ | * Zabírá kapacitu pevného disku. | ||
+ | *: ''To je jeden z důvodů, proč si operační systémy obvykle část kapacity (obvykle 10 %) pevného disku blokují.'' | ||
+ | *: ''Může se vám tedy stát, že počítač odmítne vytvářet další soubory či přidávat data, i když na disku ještě zůstává třeba 8% volného místa.'' |
Aktuální verze z 26. 9. 2022, 07:59
Obsah |
Pravidla pro běh více procesů
- Proces nemůže a nesmí být ovlivněn činností jiných procesů.
- Programátor při psaní kódu nemusí řešit, kolik a jakých procesů v paměti bude.
- Každý proces funguje tak, jako by byl v počítači jediný.
- Fakt, že byl proces „uspán“ a mezitím běžely jiné procesy nesmí proces nijak poznat — veškerá data, která měl k dispozici, musí zůstat stejná.
Jak data ochránit?
- Obsah registrů procesoru → uloží se do paměti
- Co se týče obsahu registrů procesoru, je situace jednoduchá.
- Při změně kontextu („přepnutí procesu“) se obsah všech registrů (řádově jsou to stovky byte) uloží na vyhrazené místo do operační paměti.
- Při přepínání procesů se hodnota registrů procesoru aktualizuje tak, aby po opětovném „probuzení“ měl proces své hodnoty registrů, které si nastavil před „usnutím“.
- Obsah operační paměti → musí zůstat
- Obsah operační paměti ale nemůžeme někam „zazálohovat“. Teoreticky by šla uložit na pevný disk, ale operační paměť má velkou kapacitu a ukládání tak velkého množství dat na disk by přepínání procesů nepřípustně zdrželo — nezapomeňte, že přepínání desítek procesů se musí stíhat tak rychle, aby si uživatel myslel, že všechny procesy běží zároveň.
- Data procesů v operační paměti tedy musí zůstat a musíme zajistit, aby žádný proces nemohl číst ani zasahovat oblast, která mu nepřísluší.
Postup při práci s pamětí
- Řešení
- Každý proces se chová, jako by měl svou virtuální paměť jen pro sebe (množství je pro daný operační systém pevně dané, programátor se tedy o množství paměti nestará).
- Při práci s operační pamětí proces vždy odkazuje na adresu ve své virtuální paměti.
Na schématu dále je virtuální paměť jednotlivých procesů znázorněna modrými sloupci. U každého sloupce je uvedeno číslo procesu (PID) procesu, jemuž tato virtuální paměť patří.
- Přístup do operační paměti nemůže proces řešit přímo, ale vždy musí využít služeb operačního systému.
Toto omezení je řešeno přímo na úrovni hardware procesoru:
- Procesor má při provádění instrukcí procesu informaci o tom, zda se jedná o běžný proces, nebo zda se jedná o systémový proces — součást jádra operačního systému. Podle toho procesor řeší požadavky na práci s operační pamětí odlišně. Proto žádný proces nemůže omylem ani záměrně tuto kontrolu obejít.
- Problém by mohl nastat jedině tehdy, kdy by operační systém při spouštění procesu špatně nastavil příznak a spustil běžný proces jako systémový.
- Postup při alokaci paměti
- Proces zažádá operační systém o přidělení paměti. Používá přitom adresy v&bnsp;rámci virtuální paměti (VPFN — Virtual Page Frame Number).
- Operační systém si uloží informaci:
- který proces žádal (PID)
- jakou adresu (VPFN) ve virtuální paměti chce proces obsadit,
- kam data skutečně budou zapsána ve fyzické paměti (PFN — Page Frame Number).
- Postup při čtení/zápisu z/do paměti
- Proces oznámí procesoru adresu VPFN, kterou chce použít (zapíše ji do odpovídajícího registru).
- Procesor dohledá v tabulce (kterou vytvořil operační systém) odpovídající PFN a vyzvedne/upraví data.
Schéma zápisu do paměti
- Modré sloupce — virtuální paměť procesů
- Modré sloupce reprezentují virtuální operační paměť jednotlivých procesů.
- U každého sloupce je uvedeno číslo procesu (PID), kterému daná virtuální paměť patří.
- Žlutý blok — skutečná operační paměť
- Do ní smí zapisovat pouze operační systém.
- Operační systém si v ní mimo jiné vede tabulku, pomocí které překládá požadavky procesů na práci s VPFN na skutečné adresy PFN.
- Některé paměťové bloky lze dokonce dočasně přesunout na disk (swappování) — před dalším použitím ale musí být přeneseny zpět do operační paměti.
Swappování — co když se data do (fyzické) paměti nevlezou?
- V takovém případě je třeba data procesů, které právě neběží, odložit na pevný disk — to označujeme jako swappování.
- Než budou procesy opět spuštěny, bude třeba data znovu načíst do operační paměti.
- Takto můžeme mít „uloženo v operační paměti“ více dat, než kolik je celková kapacita operační paměti.
- Nevýhody swappování
- Výrazně zpomaluje přepínání procesů a&nbps;tím i celkovou odezvu systému.
- Zabírá kapacitu pevného disku.
- To je jeden z důvodů, proč si operační systémy obvykle část kapacity (obvykle 10 %) pevného disku blokují.
- Může se vám tedy stát, že počítač odmítne vytvářet další soubory či přidávat data, i když na disku ještě zůstává třeba 8% volného místa.