Systémové volania

Čo je to systémové volanie systému Linux?

Čo je to systémové volanie systému Linux?

Prvé veci ako prvé

Predtým, ako sa ponoríme do definície systémového volania systému Linux a preskúmame podrobnosti jeho vykonania, je najlepšie začať s definíciou rôznych softvérových vrstiev typického systému Linux.

Linuxové jadro je špecializovaný program, ktorý sa na vašom hardvéri spúšťa a spúšťa na najnižšej dostupnej úrovni. Má za úlohu orchestrovať všetko, čo na počítači beží, vrátane spracovania udalostí na klávesnici, disku a v sieti, až po časové úseky na paralelné vykonávanie viacerých programov.

Keď jadro vykoná program na úrovni používateľa, virtualizuje pamäťový priestor, takže programy veria, že sú jediným procesom bežiacim v pamäti. Táto ochranná bublina izolácie hardvéru a softvéru zvyšuje bezpečnosť a spoľahlivosť. Neprivilegovaná aplikácia nemôže získať prístup k pamäti patriacej iným programom, a ak dôjde k jej zlyhaniu, jadro sa ukončí, aby nemohlo poškodiť zvyšok systému.

Prekročenie bariéry systémovými hovormi systému Linux

Táto vrstva izolácie medzi neprivilegovanými aplikáciami poskytuje vynikajúce hranice na ochranu ostatných aplikácií a používateľov v systéme. Bez nejakého spôsobu prepojenia s ostatnými prvkami v počítači a vonkajšom svete by však programy nedokázali dosiahnuť nič.

Na uľahčenie interakcie jadro označuje softvérovú bránu, ktorá umožňuje spustenému programu požadovať, aby jadro konalo v jeho mene. Toto rozhranie je známe ako systémové volanie.

Pretože Linux sa riadi filozofiou systému UNIX „všetko je súbor“, mnoho funkcií sa dá vykonať otvorením a čítaním alebo zápisom do súboru, ktorým by mohlo byť zariadenie. Napríklad v systéme Windows môžete na prístup k náhodným bajtom použiť funkciu s názvom CryptGenRandom. Ale v Linuxe to možno urobiť jednoduchým otvorením „súboru“ / dev / urandom a načítaním bajtov z neho pomocou štandardných systémových vstupných / výstupných systémových volaní. Tento zásadný rozdiel umožňuje jednoduchšie rozhranie pre volanie systému.

Obal na tenké oblátky

Vo väčšine aplikácií sa systémové volania nevykonávajú priamo do jadra. Prakticky všetky programy odkazujú na štandardnú knižnicu C, ktorá poskytuje tenký, ale dôležitý obal okolo systémových hovorov systému Linux. Knižnica zabezpečí, aby sa argumenty funkcie skopírovali do správnych registrov procesora, a potom vydá príslušné systémové volanie systému Linux. Keď sú údaje prijaté z hovoru, obálka interpretuje výsledky a konzistentným spôsobom ich vracia späť do programu.

V zákulisí

Každá funkcia v programe, ktorá interaguje so systémom, sa nakoniec prevedie na systémové volanie. Aby sme to videli v praxi, začnime základným príkladom.

void main ()

Toto je pravdepodobne najtriviálnejší program C, aký kedy uvidíte. Jednoducho získa kontrolu cez hlavný vstupný bod a potom vystúpi. Nevracia ani hodnotu, pretože main je definované ako neplatné. Uložte súbor ako test.ca poďme to zostaviť:

gcc ctest.c -o ctest

Po zostavení môžeme vidieť veľkosť súboru ako 8664 bajtov. Vo vašom systéme sa môže mierne líšiť, ale malo by to byť okolo 8 tis. To je veľa kódu iba na vstup a výstup! Dôvodom je 8k je to, že je zahrnutý runtime libc. Aj keď symboly odstránime, stále je to len niečo cez 6k.

V ešte jednoduchšom príklade môžeme urobiť, aby systém Linux volal po ukončení, než aby sme to robili za nás, v závislosti od runtime C.

void _start ()
asm ("movl $ 1,% eax;"
„xorl% ebx,% ebx;“
„int $ 0x80“);

Tu presunieme 1 do registra EAX, vymažeme register EBX (ktorý by inak obsahoval návratovú hodnotu), potom zavoláme prerušenie hovoru systému Linux 0x80 (alebo 128 v desatinnom čísle). Toto prerušenie spustí jadro spracovať náš hovor.

Keby sme zostavili náš nový príklad zvaný asmtest.c a vyradiť symboly a vylúčiť štandardnú knižnicu:

gcc -s -nostdlib asmtest.c -o asmtest

vyprodukujeme binárny súbor menší ako 1 kB (v mojom systéme to dá 984 bajtov). Väčšinu tohto kódu tvoria spustiteľné hlavičky. Teraz voláme priame systémové volanie systému Linux.

Na všetky praktické účely

Takmer vo všetkých prípadoch už nebudete musieť vo svojich programoch C uskutočňovať priame systémové volania. Ak však použijete montážny jazyk, môže vzniknúť potreba. V rámci optimalizácie by však bolo najlepšie nechať funkcie knižnice C uskutočňovať systémové volania a mať v smerniciach zostavy zabudovaný iba váš kritický výkonový kód.

Ako programovať výukové programy pre systémové volania

Zoznam všetkých systémových volaní

Ak si chcete pozrieť zoznam všetkých dostupných systémových volaní pre systém Linux, môžete skontrolovať tieto referenčné stránky: Celý zoznam systémových volaní pre systém Linux.com, filippo.io / linux-syscall-table / alebo syscalls.kernelgrok.com

Hry Open source porty komerčných herných strojov
Open source porty komerčných herných strojov
Na hranie starých i niektorých z nedávnych herných titulov je možné využiť bezplatné hry s otvoreným zdrojom a multiplatformové herné enginy. V tomto ...
Hry Najlepšie hry z príkazového riadku pre systém Linux
Najlepšie hry z príkazového riadku pre systém Linux
Príkazový riadok nie je pri použití systému Linux iba vaším najväčším spojencom - môže byť tiež zdrojom zábavy, pretože ho môžete použiť na hranie mno...
Hry Najlepšie aplikácie na mapovanie gamepadu pre Linux
Najlepšie aplikácie na mapovanie gamepadu pre Linux
Ak radi hráte hry v systéme Linux s gamepadom namiesto typického systému vstupu pre klávesnicu a myš, máte tu niekoľko užitočných aplikácií. Mnoho hie...