Přístup procesů do paměti

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Dodán popis obecný)
(Při čtení a zápisu dohledání vykonává procesor.)
 
(Nejsou zobrazeny 2 mezilehlé verze od 1 uživatele.)
Řádka 1: Řádka 1:
 
[[Category:VSE]][[Category:Informatika]][[Category:Procesy]][[Category:Stránky s obrázky]]
 
[[Category:VSE]][[Category:Informatika]][[Category:Procesy]][[Category:Stránky s obrázky]]
  
== Pravidla ==
+
== Pravidla pro běh více procesů ==
* Proces není ovlivněn činností jiných procesů.
+
* Proces nemůže a nesmí být ovlivněn činností jiných procesů.
* Programátor při psaní kódu neřeší, kolik a jakých procesů v paměti bude.
+
* 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 sám.
+
* 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á.
  
== Přístup procesů do paměti ==
 
* Při [[Plánování procesů | přepínání procesů]] se hodnota registrů procesoru aktualizuje tak, aby měl každý proces svou hodnotu registrů.
 
* Obsah operační paměti ale celý přepnout nelze (příliš velká kapacita, pomalý pevný disk). Procesy se tedy do paměti fyzicky musí vlézt všechny.
 
  
== Přístup procesu do paměti ==
+
== 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“.
  
<div class="NaStred">[[Image:pristup_procesu_do_pameti.png]]</div>
+
; Obsah operační paměti &rarr; 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&nbsp;ukládání tak velkého množství dat na disk by přepínání procesů nepřípustně zdrželo &mdash; 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&nbsp;operační paměti tedy musí zůstat a&nbsp;musíme zajistit, aby žádný proces nemohl číst ani zasahovat oblast, která mu nepřísluší.
 +
 
 +
 
 +
== Postup při práci s&nbsp;pamětí ==
  
 
; Řešení
 
; Ř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á).
+
* 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á).
* Každý požadavek na přístup do paměti neřeší přímo proces, ale využívá služeb operačního systému.
+
* Při práci s&nbsp;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&nbsp;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&nbsp;tom, zda se jedná o&nbsp;běžný proces, nebo zda se jedná o&nbsp;systémový proces &mdash; součást jádra operačního systému. Podle toho procesor řeší požadavky na práci s&nbsp;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&nbsp;spustil běžný proces jako systémový.
 +
</div>
  
 
; Postup při alokaci paměti
 
; Postup při alokaci paměti
* Proces zažádá operační systém o přidělení 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 &mdash; Virtual Page Frame Number).
 
* Operační systém si uloží informaci:  
 
* Operační systém si uloží informaci:  
 
** který proces žádal (PID)
 
** který proces žádal (PID)
** jakou adresu (VPFN) ve '''své''' virtuální paměti chce obsadit,
+
** jakou adresu (VPFN) ve virtuální paměti chce proces obsadit,
** kam data skutečně ukládá ve fyzické paměti (PFN).
+
** kam data skutečně budou zapsána ve fyzické paměti (PFN &mdash; Page Frame Number).
  
 
; Postup při čtení/zápisu z/do paměti
 
; Postup při čtení/zápisu z/do paměti
* Proces vyžádá od operačního systému zadanou adresu (VPFN).
+
* Proces oznámí procesoru adresu VPFN, kterou chce použít (zapíše ji do odpovídajícího registru).
* Operační systém dohledá v tabulce odpovídající PFN a vyzvedne data.
+
* Procesor dohledá v&nbsp;tabulce (kterou vytvořil operační systém) odpovídající PFN a&nbsp;vyzvedne/upraví data.
 +
 
 +
== Schéma zápisu do paměti ==
 +
 
 +
; Modré sloupce &mdash; virtuální paměť procesů
 +
* Modré sloupce reprezentují virtuální operační paměť jednotlivých procesů.
 +
* U&nbsp;každého sloupce je uvedeno číslo procesu (PID), kterému daná virtuální paměť patří.
 +
 
 +
; Žlutý blok &mdash; skutečná operační paměť
 +
* Do ní smí zapisovat pouze operační systém.
 +
* Operační systém si v&nbsp;ní mimo jiné vede tabulku, pomocí které překládá požadavky procesů na práci s&nbsp;VPFN na skutečné adresy PFN.
 +
* Některé paměťové bloky lze dokonce dočasně přesunout na disk (swappování) &mdash; 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>
 +
 
 +
 
 +
 
 +
== Swappování &mdash; co když se data do (fyzické) paměti nevlezou? ==
 +
* V&nbsp;takovém případě je třeba data procesů, které právě neběží, odložit na pevný disk &mdash; 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&nbsp;operační paměti“ více dat, než kolik je celková kapacita operační paměti.
  
; Co když se data do (fyzické) paměti nevlezou?
+
; Nevýhody swappování
* V takovém případě je třeba data odložit na pevný disk &mdash; ([[Swappování | swappování]]).
+
* Výrazně zpomaluje přepínání procesů a&nbps;tím i&nbsp;celkovou odezvu systému.
 +
* Zabírá kapacitu pevného disku.
 +
*: ''To je jeden z&nbsp;důvodů, proč si operační systémy obvykle část kapacity (obvykle 10&nbsp;%) 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&nbsp;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ů


Jak data ochránit?

Obsah registrů procesoru → uloží se do paměti
Obsah operační paměti → musí zůstat


Postup při práci s pamětí

Řešení
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ří.

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
Postup při čtení/zápisu z/do paměti

Schéma zápisu do paměti

Modré sloupce — virtuální paměť procesů
Žlutý blok — skutečná operační paměť
Pristup procesu do pameti.png


Swappování — co když se data do (fyzické) paměti nevlezou?

Nevýhody swappování
Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje