首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是__kernel_vsyscall?

什么是__kernel_vsyscall?
EN

Stack Overflow用户
提问于 2008-12-05 19:14:28
回答 4查看 28.3K关注 0票数 15

我得到了一个看起来与我通常得到的内核非常不同的内核--大多数线程都在__kernel_vsyscall()中:

代码语言:javascript
复制
  9 process 11334  0xffffe410 in __kernel_vsyscall ()
  8 process 11453  0xffffe410 in __kernel_vsyscall ()
  7 process 11454  0xffffe410 in __kernel_vsyscall ()
  6 process 11455  0xffffe410 in __kernel_vsyscall ()
  5 process 11474  0xffffe410 in __kernel_vsyscall ()
  4 process 11475  0xffffe410 in __kernel_vsyscall ()
  3 process 11476  0xffffe410 in __kernel_vsyscall ()
  2 process 11477  0xffffe410 in __kernel_vsyscall ()
  1 process 11323  0x08220782 in MyClass::myfunc ()

那是什么意思?

编辑:特别是,我通常在"pthread_cond_wait“和"___newselect_nocancel”中看到很多线程,现在它们在每个线程的第二帧上-为什么这个核心是不同的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-12-05 19:19:39

__kernel_vsyscal是linux-gate.so ( Linux内核的一部分)使用最快的方法进行系统调用的方法,最好是sysenter指令。Johan Petersson很好地解释了这件事。

票数 28
EN

Stack Overflow用户

发布于 2008-12-05 19:19:27

当你进行一个系统调用(比如读取文件、与硬件对话、写入套接字)时,你实际上是在创建一个中断。然后,系统在内核模式下处理中断,您的调用返回结果。大多数时候,在syscall中有很多线程是不寻常的,除非你正在进行阻塞调用,在这种情况下,这是预期的。

更具体地说,它意味着线程正在等待内核级系统调用。但这(不幸的是我的观点)已经在名称中了:)

票数 9
EN

Stack Overflow用户

发布于 2008-12-07 07:33:37

除了已经给出的解释linux-gate.so是什么的很好的链接,我想回答“为什么这个核心是不同的?”最新的(比2.5.68更新的)32位Linux系统使用VDSO page (又称linux-gate.so.1),64位系统也将很快启动(64位VDSO是在内核2.6.24中引入的)。

如果你在一个较旧的系统上进行开发,或者使用一个旧的glibc,那么你永远不会看到__kernel_vsyscall(),要么是因为内核根本没有创建VDSO,要么是因为(旧的) glibc即使有VDSO也不会使用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/344829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档