GNU/Linux >> Znalost Linux >  >> Linux

Linux – metody vyvolání systémového volání v novém jádru?

Četl jsem, že v novějších jádrech se systémová volání vyvolávají pomocí instrukce INT X80 a také pomocí instrukce sysenter. A také instrukce sysenter poskytuje rychlejší vyvolání ve srovnání s jinou metodou.

Jak mohu zkontrolovat, která všechna systémová volání jsou touto metodou vyvolána?

Přijatá odpověď:

Pokud nepoužíváte jádro starší než 2.6, nebudete používat int x80 metoda pro vyvolání většiny systémových volání. Byly nahrazeny ve prospěch systenter/sysexit metoda od jádra 2.6 (začala v řadě 2.5) pro věci, na kterých záleží.

Všimněte si, že pokud máte staré binární soubory, které byly vytvořeny na starších jádrech, mohou stále používat int x80 metoda – jediná věc, kterou s tím můžete udělat, je přestavět je (nebo získat aktualizované binární soubory).
Spusťte ldd your_exe v programu, kterého se obáváte. Pokud uvádí linux-gate.so.1 nebo linux-vdso.so.1 , používá nová systémová volání. Pokud ne, (s největší pravděpodobností) používá starou metodu.
U statických binárních souborů je to těžší určit. Jedním ze způsobů by bylo objdump your_exe | less a vyhledejte obaly systémových volání (__gettimeofday je dobrý kandidát). Z demontáže uvidíte, zda používá přerušení nebo ne.

Dobrý přehled toho, jak fungovala stará volání INT 80 a jak vzniklo a je nastaveno nové rozhraní syscall, najdete zde:Systémová volání (od Andriese Brouwera).
Další dobré čtení:Co je to linux-gate. tak.1?.

Oba tyto články jsou propojeny v tomto druhém:Sysenter Based System Call Mechanism v Linuxu 2.6 a odkazuje na knihu Understanding The Linux Kernel od Daniela P. Boveta, Marco Cesati, která je vhodná pro obecnější informace.

Takže stručně:netrapte se tím. Pokud máte dostatečně nedávný systém (CPU, jádro a distribuce), používáte „rychlá“ systémová volání.


Linux
  1. Jak zálohovat celý systém Linux pomocí Rsync

  2. Jak zvládnout paniku linuxového jádra

  3. Linuxový systém řazení front

  1. Příklad použití getnstimeofday v jádře Linuxu

  2. Tabulka systémových volání Linux nebo cheatsheet pro shromáždění

  3. Nejrychlejší systémové volání Linuxu

  1. Jak předat parametry systémovému volání Linuxu?

  2. Proč je v Linuxu potřeba upravovat tabulky systémových volání?

  3. Fork vs Clone na 2.6 Kernel Linuxu