什么是系统调用?以C语言中的printf()为例,说明Linux系统处理系统调用的详细过程。

本文详细介绍了Linux系统调用的工作原理,包括用户通过printf()函数触发系统调用,执行访管指令INTOx80,系统切换到内核态,查找中断描述符号表,执行system_call()函数,通过系统调用号找到对应服务例程,如write(),最后恢复进程现场并返回。系统调用是用户程序与内核交互的重要方式。
摘要由CSDN通过智能技术生成

①用户在应用程序中调用printf()函数,此时执行访管指令INT Ox80产生编程异常,系统进行中断处理,处理器从用户态切换到系统态并保存中断时CPU现场信息,并使堆栈切换到内核栈。

②查找中断描述符号表,得到异常的中断处理程序的入口地址。

③执行system-call()函数,继续保护中断现场信息并检查本次系统调用的正确性。若通过检查,则利用EAX寄存器传递过来的系统调用号查找系统调用入口表,找到这个系统调用的服务例程的入口地址。

④执行write()服务例程。

⑤恢复被中断进程的CPU现场信息,返回被中断进程,继续运行。

正确答案:
系统调用也叫程序接口,是应用程序请求OS内核完成某功能时的一种过程调用,是用户程序对OS内核功能进行调用的一种手段。
Linux中系统调用的处理过程如下:
1)首先有封装例程设置系统调用功能号和参数,并存到相应寄存器中;
2)执行封装例程中的int 0x80指令,系统产生软中断(或陷入),由中断硬件完成部分现场信息保护:PSW的值和PC寄存器的值;并通过中断向量转向一个中断处理程序system_call()完成其他CPU现场信息的保存:如陷入类型、参数表指针、其他CPU寄存器的值等;
3)使用系统调用功能号查找系统调用入口表,找到相应系统调用的服务例程的入口地址sys_printf();
4)执行系统调用服务例程sys_printf(),完毕后返回执行成功与否以及成功时的执行结果给调用者;恢复被中断进程或新调度进程的CPU现场,返回被中断进程或新调度进程执行。
评分标准:概念正确1分;处理过程每项内容1分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值