使用Linux系统调用的内核命令

路博环保除甲醛

路博环保除甲醛

2016-01-29 17:34

使用Linux系统调用的内核命令,使用 Linux 系统调用的内核命令

级别: 中级

M. Tim Jones (mtj@mtjones.com), 顾问工程师, Emulex

2007 年 4 月 17 日

     Linux® 系统调用 —— 我们每天都在使用它们。不过您清楚系统调用是如何在用户空间和内核之间执行的吗?本文将探究 Linux 系统调用接口(SCI),学习如何添加新的系统调用(以及实现这种功能的其他方法),并介绍与 SCI 有关的一些工具。

    系统调用就是用户空间应用程序和内核提供的服务之间的一个接口。由于服务是在内核中提供的,因此无法执行直接调用;相反,您必须使用一个进程来跨越用户空间与内核之间的界限。在特定架构中实现此功能的方法会有所不同。因此,本文将着眼于最通用的架构 —— i386。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/linux/)

    在本文中,我将探究 Linux SCI,演示如何向 2.6.20 内核添加一个系统调用,然后从用户空间来使用这个函数。我们还将研究在进行系统调用开发时非常有用的一些函数,以及系统调用的其他选择。最后,我们将介绍与系统调用有关的一些辅助机制,比如在某个进程中跟踪系统调用的使用情况。

SCI

    Linux 中系统调用的实现会根据不同的架构而有所变化,而且即使在某种给定的体架构上也会不同。例如,早期的 x86 处理器使用了中断机制从用户空间迁移到内核空间中,不过新的 IA-32 处理器则提供了一些指令对这种转换进行优化(使用 sysentersysexit 指令)。由于存在大量的方法,最终结果也非常复杂,因此本文将着重于接口细节的表层讨论上。

    要对 Linux 的 SCI 进行改进,您不需要完全理解 SCI 的内部原理,因此我将使用一个简单的系统调用进程(请参看图 1)。每个系统调用都是通过一个单一的入口点多路传入内核。eax 寄存器用来标识应当调用的某个系统调用,这在 C 库中做了指定(来自用户空间应用程序的每个调用)。当加载了系统的 C 库调用索引和参数时,就会调用一个软件中断(0x80 中断),它将执行 system_call 函数(通过中断处理程序),这个函数会按照 eax 内容中的标识处理所有的系统调用。在经过几个简单测试之后,使用 system_call_table 和 eax 中包含的索引来执行真正的系统调用了。从系统调用中返回后,最终执行 syscall_exit,并调用 resume_userspace 返回用户空间。然后继续在 C 库中执行,它将返回到用户应用程序中。


图 1. 使用中断方法的系统调用的简化流程
系统调用的简化流程

     SCI 的核心是系统调用多路分解表。这个表如图 2 所示,使用 eax 中提供的索引来确定要调用该表中的哪个系统调用(sys_call_table)。图中还给出了表内容的一些样例,以及这些内容的位置。(有关多路分解的更多内容,请参看侧栏 “系统调用多路分解”)

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/linux/)


图 2. 系统调用表和各种链接
系统调用表和各种链接 

添加一个 Linux 系统调用

系统调用多路分解

有些系统调用会由内核进一步进行多路分解。例如,BSD(Berkeley Software Distribution)socket 调用(socketbindconnect 等)都与一个单独的系统调用索引(__NR_socketcall)关联在一起,不过在内核中会进行多路分解,通过另外一个参数进入适当的调用。请参看 ./linux/net/socket.c 中的

展开更多 50%)
分享

猜你喜欢

使用Linux系统调用的内核命令

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
使用Linux系统调用的内核命令

Linux2.6.11内核文件IO系统调用详解

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux2.6.11内核文件IO系统调用详解

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Linux系统最常使用的命令汇总

电脑入门
Linux系统最常使用的命令汇总

Linux系统lsof命令使用实例汇总

电脑入门
Linux系统lsof命令使用实例汇总

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Linux系统中如何使用crond命令

电脑入门
Linux系统中如何使用crond命令

Linux系统下wget命令的使用教程

服务器
Linux系统下wget命令的使用教程

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

建立一个广告交换及跟踪系统

建立一个广告交换及跟踪系统

UbuntuLinux下播放Real多媒体的方法

UbuntuLinux下播放Real多媒体的方法
下拉加载更多内容 ↓