int 0x80(寻根究底)---关于内核空间与用户空间切换

来源:互联网 发布:c多线程socket编程 编辑:程序博客网 时间:2024/05/17 06:04

个人对用户空间/内核空间的理解

通过限定应用程序和内核程序使用不同的内存分配函数,将用户空间程序限制在0-3G空间,将内核程序限制在3G~4G空间,这样就实现了用户空间和内核空间的隔离;

通过int 0x80 软中断实现用户空间与内核空间的交互。

--------------------------------------------------------------------------------------------

软中断:

由程序员通过 INT指令触发。cpu把软中断做为陷阱来处理,也叫编程异常,其中int 0x80可以用于执行系统调用,int3则主要用于设置断点(对程序进行调试)。

关于0x80:

0x80为仅有的用户空间可以触发的两个软中断之一,用户可以通过执行int 0x86指令陷入内核,执行相关的系统调用。

-------------------------------------------------------------------------------

call_usermodehelper--->call_usermodehelper_fns--->。。。。。。

参考程序:/kernel/sys.c

int orderly_poweroff(bool force);

启动参数:poweroff_cmd:/sbin/poweroff

kernel_execve();----->int 0x80--->execve-->....正常执行

总结:

内核中调用call_usermodehelper的过程其实就是内核中调用execv系统调用的过程。


记得研一的时候,一个老师说理解linux下面的一些东西有多难多难,那时候还不相信,想想现在都多长时间了看到一些东西感觉还是似是而非,不是说不知道哪些东西,从概念上可以说得头头是道,可是理解上还是没有那么透彻,就说kernel_execv,归根到底还是int 0x80,int 0x80 归根到底还是各种描述符表,而各种描述符表的理解最后还要追溯到CPU架构上,即使系统再熟悉,对架构的理解如果是模糊的,一切也只是雾里看花,知道脉络,根基却依旧不牢,想起这些,就得检讨,总知道看书,去学习哪些框架的东西,这终究代替不了实践。


结了!!!!


原创粉丝点击