社区
Linux_Kernel
帖子详情
system_call 和 int 0x80 什么关系?
valpa
2007-01-19 03:13:55
rt
...全文
515
2
打赏
收藏
system_call 和 int 0x80 什么关系?
rt
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xmoon1983
2007-01-21
打赏
举报
回复
在x86平台上,Linux的system call是通过异常、即int 0x80从用户态进入内核态的。
呆呆辉
2007-01-21
打赏
举报
回复
int 0x80 是系统调用的中断号,所有用户层的系统调用都是通过这0x80进入中断向量表.
ps:系统调用还会有别的参数来指明系统调用类型,不过0x80肯定是其中之一有
系统是如何将
int
0x80
中断 与 system_call 联系起来的?
因为我们把
int
0x80
中断时需要执行程序的地址设置为system_call.s的代码了. 在实地址模式下,中断的地址称为中断向量.而在保护模式下,则使用功能更强大的中断门(陷阱门)描述符的概念. 门描述符中除了包括"中断向量”的信息外,还包括一些属性信息。 对于0.11
早期版本的system_call.s汇编程序
linux/kernel/system_call.s *早期版本的system_call.s 实现系统调用system_call中断
int
0x80
的入口处理过程,以及信号检测处理,同时给出了两个系统功能的底层借口,分别是sys_execve和sys_fork.还给出了处理过程类似的协处理器出错(
int
16)、设备不存在(
int
7)、时钟中断(
int
32)、硬盘中断(
int
46)、软盘中断(
int
38)的中断处理程序。
中断
int
0x80
的作用
当进程执行系统调用时,先调用系统调用库中定义某个函数,该函数通常被展开成前面提到的_syscallN的形式通过
INT
0x80
来陷入核心,其参数也将被通过寄存器传往核心。 在这一部分,我们将介绍
INT
0x80
的处理函数system_call。 思考一下就会发现,在调用前和调用后执行态完全不相同:前者是在用户栈上执行用户态程序,后者在核心栈上执行核心态代码。那么,为了保证在核心内部执行完系统调用...
系统调用(
int
0x80
)详解
1、系统调用初始化 在系统启动时,会在sched_init(void)函数中调用set_system_gate(
0x80
,&system_call),设置中断向量号
0x80
的中断描述符: #define set_system_gate(n,addr) _set_gate(&idt[n],15,3,addr) 其中15表示此中断号对应的是陷阱门,注意,这个中断向量不是中断门描述符
linux0.11系统调用(要分清中断调用和系统调用:
0x80
号中断的处理程序是system-call.s。用户使用中断调用
int
0x80
和放在寄存器eax中的功能号来使用内核提供的各种 )
1区分内核态和用户态:是一种处理器“硬件设计”,应该涉及段寄存器,即硬件设计段寄存器的那两位特权级位。cpu在取指执行时,若将要取操作的段的特权级大于当前特权级。则无法取指执行。 2 (1)宏定义 #define _syscall3(type,name,atype,a,btype,b,ctype,c) type name(atype a, btype b, ctype c) { long _ _res; _ _asm_ _volatile(“
int
0x80
” :”=a”(_ _...
Linux_Kernel
4,441
社区成员
17,460
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章