GNU/Linux >> Znalost Linux >  >> Linux

Jaký je rozdíl mezi systémovým voláním a voláním knihovny?

Když se podívám na komentář, zkusím to. Systémová služba je procedura, která se provádí se zvýšeným oprávněním (obvykle režim jádra). Všechno ostatní je hovor z knihovny.

Základní hardware poskytuje uživatelským aplikacím bránu pro vstup do režimu jádra. Operační systém hlídá tuto bránu pro základní zabezpečení systému.

Udělejte zde trochu zjednodušení --- běžnou metodou používanou procesory je, že proces explicitně spustí výjimku (Intel má alternativní metodu SYSCALL).

Systém bude mít sadu vektorů přerušení/výjimek (procedury ukazatele na obsluhu) pro reakci na výjimku nebo přerušení (např. chyba stránky, děleno nulou). Systém nadefinuje nějakou sadu vektorů (obvykle s nízkými čísly) pro hardwarové výjimky a přerušení. Obvykle však ponechávají sloty pro operační systém.

Pokyn něco jako:

   INT #12

Explicitně spustí výjimku a vyvolá 12. proceduru ve vektoru. Systém vám může umožnit simulovat výjimku dělení nulou

Předpokládejme, že operační systém používá vektor 123 pro systémové služby.

   INT #123

zavolá systémovou službu. Systém si může vyhradit samostatný vektor pro každou systémovou službu nebo jej může použít a odeslat.

Takže byste udělali něco takového:

  MOVL  #23, R0
  INT  #123

Hodnota 23 v registru 0 říká obsluze přerušení, aby vyvolala systémovou službu #23.

Takže můžete vidět, že to všechno vyžaduje jazyk symbolických instrukcí. Každý operační systém vytváří obal, který lze volat jako funkce z jazyků vyšší úrovně.

Toto je posloupnost toho, co se stane:

  1. Uživatel volá pojmenovaný modul wrapper s normálními parametry. Obal nastaví registry a zásobník pro systémovou službu.

  2. Modul wrapper spustí výjimku, která se odešle systémové službě.

  3. Systémová služba pak musí zkontrolovat VŠECHNY parametry. To je jeden z důvodů, proč mají systémové služby vysokou režii. Výjimky v režimu jádra způsobují modré obrazovky smrti. Pokud systémová služba potřebuje zapisovat do vyrovnávací paměti poskytnuté uživatelem, musí zajistit, aby každý bajt, do kterého zapisuje, byl zapisovatelnou pamětí.

  4. Systémová služba dělá vše, co potřebuje.

  5. Systémová služba provede hardwarovou instrukci pro návrat z výjimky nebo přerušení. Tím se vrátíte do uživatelského režimu a zpět do funkce wrapper.

  6. Obal může rozbalit parametry vrácené v registrech.

  7. Obálka se vrátí k volajícímu.


Nízkoúrovňová volání jádra, která zpracovává jádro, jsou systémová volání.

Manuová stránka říká:

2 Systémová volání (funkce poskytované jádrem)

3 Volání knihovny (funkce v rámci programových knihoven)

Obrázkový obrázek to může objasnit:

a


Linux
  1. Jaký je rozdíl mezi strtok_r a strtok_s v C?

  2. Jaký je rozdíl mezi fsck a e2fsck?

  3. Jaký je rozdíl mezi adduser a useradd?

  1. Jaký je rozdíl mezi voláním knihovny a voláním systému v Linuxu?

  2. Jaký je rozdíl mezi $(CC) a $CC?

  3. Jaký je rozdíl mezi unlink a rm?

  1. Jaký je rozdíl mezi InnoDB a MyISAM?

  2. Rozdíl mezi příkazy zastavení a vypnutí?

  3. Jaký je rozdíl mezi trasou a ip trasou?