怪怪虎 发表于 2008-09-21 20:33

代码到底是如何陷入内核空间的?

在学习的过程中,在应用程序中老是遇到像这样的代码
1. status = ioctl(Fd, IOCTL_SET_MODE, &cmd )
2. fopen("/temp/1.txt","r+")

一看到这样的代码,就马上认为是cpu将会进人内核执行.
自己在这个地方有个疑问,望大家指点.
1. 到底是什么机制(原理)使cpu陷入到内核空间执行? 个人觉得是某种中断,可是有找不出根据. 望赐教.

现在只能肤浅的理解到一旦在应用程序中调用了fopen函数后,最终会和操作系统中的一个open函数关联起来.

望高人指点.谢谢.

LZHWWY 发表于 2008-09-21 20:40

中断机制,用户空间程序调用libc库,libc库将系统调用号压入eax后调用int 0x80进入内核执行system_call函数(在entry.S中),将寄存器压栈保护后,调用sys_call_table(,%eax,4)执行系统调用,比如打开文件的就调用sys_open。。。。

去google上搜下linux系统调用,再自己看看

http://blog.csdn.net/zhy05/archive/2007/05/20/1617761.aspx
这个链接貌似讲的还行

[ 本帖最后由 LZHWWY 于 2008-9-21 20:56 编辑 ]

怪怪虎 发表于 2008-09-21 21:43

回复 #2 LZHWWY 的帖子

谢谢提示.我先研究下,有问题在问下.

yzh07137 发表于 2015-04-13 18:50

请问我尝试用read函数读取idt的内容,但是errno为1提示没权限,问了别人,说要用内核陷入的方式访问。
请问普通的C文件如何使用内核陷入啊,,搜到的内核陷入说是用中断和系统调用,但是我调用了系统的read函数啊,这样也没有陷入内核吗。。。

nswcfd 发表于 2015-04-14 09:25

访问核心结构需要写内核模块,而不是普通的用户态程序。
页: [1]
查看完整版本: 代码到底是如何陷入内核空间的?