GNU/Linux >> Znalost Linux >  >> Linux

Co je lepší int 0x80 nebo syscall v 32bitovém kódu na Linuxu?

  • syscall je výchozí způsob vstupu do režimu jádra na x86-64 . Tato instrukce není dostupná v 32bitových režimech provozu na procesorech Intel .
  • sysenter je instrukce nejčastěji používaná k vyvolání systémových volání v 32bitových režimech provozu. Je podobný syscall , sice trochu obtížnější na použití, ale to je starost jádra.
  • int 0x80 je zastaralý způsob vyvolání systémového volání a je třeba se mu vyhnout.

Preferovaným způsobem vyvolání systémového volání je použití vDSO, části paměti mapované v adresovém prostoru každého procesu, která umožňuje používat systémová volání efektivněji (například tím, že v některých případech vůbec nevstoupí do režimu jádra). vDSO se také stará o obtížnější, ve srovnání se starší verzí int 0x80 způsobem, zpracování syscall nebo sysenter pokyny.

Podívejte se také na toto a toto.


Moje odpověď zde pokrývá vaši otázku.

V praxi nedávná jádra implementují VDSO, zejména pro dynamickou optimalizaci systémových volání (jádro nastavuje VDSO na nějaký kód, který je pro aktuální procesor nejlepší). Měli byste tedy použít VDSO a pro stávající systémová volání byste raději měli používat rozhraní poskytované knihovnou libc.

Všimněte si, AFAIK, značná část nákladů na jednoduchá systémová volání jde z uživatelského prostoru do jádra a zpět. Proto pro některá systémová volání (pravděpodobně gettimeofday , getpid ...) VDSO se může vyhnout i tomu (a technicky se může vyhnout skutečnému systémovému volání). Pro většinu systémových volání (jako open , read , send , mmap ....) náklady na jádro syscall jsou dostatečně velké na to, aby došlo ke zlepšení přechodu z uživatelského prostoru na prostor jádra (např. pomocí SYSENTER nebo SYSCALL strojové instrukce místo INT ) bezvýznamné.


Před změnou si dejte pozor na toto:čísla systémových hovorů se liší když děláte 0x80 nebo syscall, např. sys_write je 4 s 0x80 a 1 se syscall.

http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html pro 32 bitů nebo 0x80http://blog.rchapman.org/post/36801038863/linux-system-call-table-for -x86-64 pro systémové volání


Linux
  1. Co jsou výstupní kódy Bash v Linuxu

  2. Co to znamená, když se řekne linuxové jádro je preemptivní?

  3. Jak načíst moduly jádra Linuxu z kódu C?

  1. Adresový prostor 32bitového procesu v 64bitovém linuxu

  2. Jaký je aktuální zdrojový kód jádra Linuxu?

  3. Aktualizace jádra bez restartu

  1. Kompilace GNU/Linux s optimalizací -O3

  2. Co je to poskvrněné jádro v Linuxu?

  3. jaké je rozlišení jiffie v jádře Linuxu