gpt4 book ai didi

ubuntu - 为什么使用 int80h 而不是 sysenter 来调用系统调用?

转载 作者:太空宇宙 更新时间:2023-11-03 16:52:17 24 4
gpt4 key购买 nike

所有教科书和 Internet 资源都告诉我 int 80h 是调用系统调用的陈旧样式,在 x86 平台上已被 SYSENTER 取代。

但我刚刚发现我的系统仍然使用 int 80h。我知道 VDSO、实现系统调用服务的 libc 包装器等教科书内容,但不明白为什么默认仍使用 int 80h。

  1. 谁能告诉我原因? glibc 或内核太旧?

  2. 现在什么情况下“int 80h”仍然默认使用?

  3. 如何在不安装新 glibc 的情况下执行 sysenter?


下面是我的环境:

我在我的 macbook air 2011(Core Duo CPU)上安装了一个使用 VMWare 的虚拟机。VM中32位Ubuntu 8.04/kernel 2.6.24(使用原来的.config编译)/libc 2.7。

最佳答案

很可能是出于兼容性原因——32 位 Ubuntu 被编译为兼容 i386 处理器(好吧,现在可能不是那么旧),它不支持 sysenter(它只出现在 Pentium 2 AFAIK 上)。显然,针对 int 80h 使用 sysenter 仅对某些类型的处理器真正有益:

http://articles.manugarg.com/systemcallinlinux2_6.html

因此,如果在一般情况下没有显着的速度提升和更广泛的兼容性,即使在今天,在 sysenter 上使用 int 80h 仍然有意义。如果您使用 64 位版本的 Ubuntu,那么到处都使用 sysenter/sysexit。

编辑:实际上要使用的系统调用机制是由内核在启动时决定的,而不是由 glibc 决定的。 This page (第 4.6 节)解释了这是如何很好地工作的。在您的情况下,内核认为 VMware 模拟的硬件使用 int 80h 而不是 sysenter 效率更高。您必须调试内核才能弄清楚它是如何做出该决定的。

关于ubuntu - 为什么使用 int80h 而不是 sysenter 来调用系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9136028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com