-1

http://www.makelinux.net/ldd3/chp-2-sect-3#chp-2-ITERM-4135这个链接描述了用户空间和内核空间的通信。任何人都可以用c中的一个简单的用户空间应用程序来解释它,该程序将链接和通信(发送/接收值)到内核对象。?

4

2 回答 2

0

该程序insmod在大多数 Linux 机器上都可用(但需要 sudo 权限才能运行)指示内核通过系统调用 init_module加载指定的模块(内核对象) 。

更一般地说,用户空间程序通过这些系统调用与内核通信,这些系统调用本质上是用户空间对内核的请求。您用 C 编写的任何应用程序都必须以某种方式使用系统调用与系统进行交互(例如,在后台printf使用write系统调用将字符放在屏幕上)。

于 2012-08-24T07:32:33.820 回答
0

只需打开一个文件open(2)。编译器将为此调用添加代码到应用程序,这会将函数参数放在堆栈上并使其以某种方式崩溃(请参阅系统调用)。内核捕获所有崩溃并处理它们。

由于这是一个“好”的崩溃,内核将查找要调用的函数,从堆栈中获取参数并调用该函数。

这种复杂方法的原因是安全性:通过“崩溃”,应用程序完全放弃了控制。CPU 也会切换到不同的模式。在这种模式下,它可以访问硬件(在“应用程序”模式下,对硬件的任何访问都会导致“非法访问”崩溃,从而终止您的应用程序)。

open(2)功能本身不能做太多事情。相反,它将检查哪个文件系统可以处理请求并调用文件系统的打开函数。文件系统被实现为内核模块。

于 2012-08-24T07:38:53.423 回答