Wikipedista:Jakub H/Procesy

Z Wikipedie, otevřené encyklopedie

Proces je zákonité, postupně na sebe navazující a vnitřně vzájemně spojené změny jevů, věcí a systémů. Obsahuje několik vláken.

Vlákno, jinak řečeno thread, je část procesu. Tvoří proces.

Algoritmus je předpis konečného počtu kroků, kterými je možno řešit stejnorodé úkoly, například výpočty, programy pro počítač. Je to obecný postup pro řešení třídy úloh konečným počtem úkonů, z nichž každý je přesně definován. Algoritmické jazyky slouží k popisu počítačových procesů umožňující jejich programování. Obecně platí, že při použití stejného algoritmu nám ten samý vstup vygeneruje (vypočte/určí) shodný výstup (postupujeme se stejnými daty i pravidly jak s nimi pracovat). Nejjednodušší (laická)definice by mohla být, že se jedná o vzorec, popisující postup zápisu pro řešení daného problému (úlohy).

Program je předem stanovený sled náplně něj. činnosti, nebo-li souhrn zásad, jimiž se tento sled řídí. Určuje úplný seznam příkazů náhodných instrukcí k řešení úlohy na počítači. Program je přepsaný algoritmus do programovacího jazyka. Nejčastěji používaný je programovací jazyk C/C++.

Spustitelný soubor je program ve vykonatelné podobě. Typicky se jedná o soubor se strojovým kódem. Může mít různé formáty: ELF, EXE, COM atd…. též bytecode (Java) nebo skript (interpretace). Má specifické odlišení od ostatních souborů. Unixové systémy mají nastaveno oprávnění „spustitelný“. V operačních systémech Windows je přípona .EXE, .COM atd. Každý spustitelný soubor má specifický obsah pro danou platformu, architekturu.

ELF = Executable and Linkable Format byl původně pro Unix System V jako definované ABI. V roce 1999 pak bylo zvoleno pro Unixové systémy.

Knihovny shromažďují často používané funkce. Je tak možno opakovaně používat zdrojový kód bez nutnosti jeho celého opisování. Uvede se jen odkaz na knihovnu – zdroj dat, odkud budeme kód čerpat. Knihovny zaznamenaly první úspěšný pokrok ve stylu programování. V Pascalu se to nazývalo tzv. unity. V jazyce C je standardní knihovna (libc) – dovedeno do extrému – samotný jazyk neobsahuje téměř nic, kromě základních řídících konstrukcí a pak všechny vstupní/výstupní, matematické a další operace jsou záležitostí knihovny. Knihovnami je docíleno zjednodušení jazyka, standardizuje jazyk.

Typy knihoven

   1. Statické knihovny – starší

- soubory s příponou .a - knihovna se po překladu „přilepí“ k programu - obstarává tzv. linker (dovede „přilepit“ i část ze .so)

   2. Dynamické knihovny – ušetření paměti oproti těm statickým knihovnám
- samostatný soubor umístěný mimo
- soubory s příponou .so (ve Windows DLL)
- program obsahuje jen seznam knihoven a funkci
- při spuštěni musí zavaděč - loader zavést též knihovnu
- bez knihovny program nefunguje
- knihovna může být sdílená mezi více procesy

Sdilené knihovny – sdíleny více procesy – je zbytečné ji mít v paměti 2x - knihovna musí být vytvořená tak, aby každý proces mohl vytvořit vlastní privátní data v té knihovně, pokud je to potřeba - ve Windows v podstatě nejsou – když jsou knihovny sdílené, tak se musí nějak spravovat, musí být vyřešena aktualizace – musí být zachováno původní rozhraní a přitom se musí obnovit – to v Linuxu je, ale ve Windows by to stálo moc času a peněž a nic by jim to nepřineslo. - má to tedy své kopie a ty se sdílet nedají, protože se neví, jestli jsou stejné

• sdílet lze jen dynamické knihovny

◦ 1 knihovna = 1 soubor = 1 instance v paměti

◦ knihovna namapovaná do operační paměti

▪ proces, který ji využívá ji má namapovanu také

▪ mapování provádí dynamicky zavaděč (loader)

◦ relokována knihovna narušuje sdílení

▪ při kolizi umístění potřebuje nový proces knihovnu jinde

▪ kvůli efektivitě je vhodné rozmístění přepočítat

◦ v Linuxu prelink – knihovny se musí rozmístit tak, aby se to nepřekrývalo – vymyslel to Čech Jakub Jelínek

▪ ideální rozmístění dle nároků dynamických binárek

▪ nutné zejména pro 32bitove systémy (jen 2 či 4GiB)