打印
[其它应用]

理解linux系统调用过程

[复制链接]
1800|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

Linux 提供了具有良好定义、数量有限、直接进入内核的入口点,这些入口点被称为系统调用。

前面的文章学习了 Linux 文件以及文件系统操作的基础知识,并介绍了一些系统调用函数。那么应用程序在调用系统函数时,内核的处理流程是怎样的呢?

在 Linux 系统中,分为用户空间和内核空间。从系统安全和稳定方面考虑,用户空间的程序不能直接执行内核代码或者操作内核数据。但是,内核以 API 的形式,提供了一系列服务供应用程序访问,是为了从内核获得某项服务或资源。

系统调用过程

从编程角度来说,系统调用与 C 语言函数的调用很相似。然而,在执行系统调用时,会历经许多处理步骤:

•应用程序调用系统函数 API,发起系统调用。•API 将系统调用参数传入到特定寄存器。•API 将系统调用编号负值到一个特殊的 CPU 寄存器(%eax)中。•API 执行一条中断指令(int 0x80),引发处理器从用户态切换到内核态。并执行系统中断 0x80 的中断向量所指向的代码。•响应中断 0x80,内核调用 system_calll() 代码来处理这次中断。•system_call() 调用相应的系统调用服务例程。•内核态代码执行完成后,处理器切换回用户态。•若系统调用服务例程的返回值有错误,API 会使用该值设置全局变量 errno。•API 返回到调用程序,并返回一个整型值,表示系统调用是否成功。

system_call() 处理流程

可以把 system_call() 认为是中断 0x80 的服务例程,作为内核处理系统的入口函数。其内部的处理流程有以下几步:

•在内核中保存寄存器值。•检测系统调用编号的有效性。•搜索存放系统服务例程的列表(sys_call_table),找到与系统调用编号匹配的系统调用服务例程。•如果系统调用服务例程带有参数,则检测参数的有效性。然后执行系统调用函数。•系统调用处理结束后,会将结果返回给 system_call()。•从内核栈中恢复各个寄存器值,将系统调用返回值置于栈中。•返回应用程序调用的 API,同时将处理器切换回用户态。

处理流程图

上面说了这么多,用图片表示一下更为直观。以系统调用 execve() 为例,看一下处理流程。


使用特权

评论回复
沙发
caigang13| | 2023-5-8 22:10 | 只看该作者
Linux系统知识体系太庞大了

使用特权

评论回复
板凳
麻花油条| | 2023-5-10 16:12 | 只看该作者
讲解的很仔细,了不起,哈哈

使用特权

评论回复
地板
麻花油条| | 2023-5-10 16:13 | 只看该作者
讲解的很仔细,了不起,哈哈

使用特权

评论回复
5
观海| | 2023-5-15 16:10 | 只看该作者
Linux操作系统是基于UNIX操作系统发展而来的一种克隆系统

使用特权

评论回复
6
tpgf| | 2023-5-15 17:17 | 只看该作者
Linux以它的高效性和灵活性著称,Linux模块化的设计结构,使得它既能在价格昂贵的工作站上运行,也能够在廉价的PC机上实现全部的Unix特性,具有多任务、多用户的能力

使用特权

评论回复
7
daichaodai| | 2023-5-16 07:36 | 只看该作者
Linux系统的内核现在越来越庞大了

使用特权

评论回复
8
guanjiaer| | 2023-5-16 08:35 | 只看该作者
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统

使用特权

评论回复
9
heimaojingzhang| | 2023-5-16 10:26 | 只看该作者
Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件

使用特权

评论回复
10
keaibukelian| | 2023-5-16 11:21 | 只看该作者
目前 Linux 不仅在家庭与企业中使用,并且在政府中也很受欢迎

使用特权

评论回复
11
paotangsan| | 2023-5-16 11:43 | 只看该作者
Linux系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易

使用特权

评论回复
12
OKAKAKO| | 2023-11-12 19:06 | 只看该作者
Linux系统知识体系太庞大了,开源性强

使用特权

评论回复
13
szt1993| | 2023-11-12 20:32 | 只看该作者
UNIX操作系统才是鼻祖

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1413

主题

3784

帖子

5

粉丝