+ -
当前位置:首页 → 问答吧 → 系统调用的问题,望高手指点

系统调用的问题,望高手指点

时间:2010-07-16

来源:互联网

系统调用是如何实现的?
搜索了一下,在x86平台上,是通过int80软中断实现,这样可以切换到内核态。然后通过eax传递调用号。

不明白的是
1 int80是什么?bios实现的中断?
2 系统调用是在中断中执行的?那系统调用中还有阻塞的?

作者: donotgiveup   发布时间: 2010-07-16

回复 donotgiveup


    int80是一个异常,80是向量,中断和异常都是通过IDT查找的。
系统调用是属于异常,对cpu来说,中断和异常是不同的,一个是异步(任何情况都可能产生),一个是同步的。你看一下ULK3的第四章,说的很明白。一般异常的处理是发送一个信号给产生异常的程序,80异常就是陷入系统调用处理,由用户态变为内核态,并在内核栈中运行。在可抢占内核中,异常是可以被抢占的,也就是说在异常处理中是可以sleep的,也可以被中断和软中断打断。

作者: kgn28   发布时间: 2010-07-16

80应该是内核出错码吧

作者: 0vk0   发布时间: 2010-07-17

set_system_gate(0x80,&system_call)

作者: zd零   发布时间: 2010-07-17

LZ可以看看ULK3中10.3. Entering and Exiting a System Call
和《情景分析》一书的第3章

作者: openspace   发布时间: 2010-07-17

热门下载

更多