linux怎么调用内核接口,Linux系统调用接口、系统调用例程和内核服务例程的概念...

现在在业界,“系统调用”这个术语的使用有些混乱。为了讨论问题清楚起见,下面在介绍“系统调用”这个术语来源的过程中,对于本书所使用的有关系统调用的名词做一下约定。

在计算机系统没有使用保护机制之前,进程与内核共同运行在同一个空间,根本就没有用户空间和内核空间的概念和界限。在某种意义上来说,内核可以看做进程的一部分,只不过这部分不是由应用程序设计者来编写的。因此,在形式上,内核函数与普通的库函数之间并没有本质的区别,用户应用程序对于这两者都可以直接调用。但是,内核函数是为了提供系统功能服务的函数,或者说,用户是为了享用系统提供的与系统有关的服务才调用内核函数的,所以为了与提供数学运算之类通用功能的函数相区别,就把提供内核服务的内核函数叫做“系统调用”,而把系统提供的通用函数叫做“库函数”。

自从计算机硬件系统可支持保护模式后,为了计算机系统及内核的安全,保护模式规定:只有通过陷人指令迸程才能由用户空间进人(也叫做“陷入”)内核空间。但由于高级语言不支持中断,于是用高级语言编写的用户应用程序就不可能直接陷人内核来访问内核函数了,于是内核也就安全了。

内核确实是安全了,但应用程序需要使用内核函数的服务时怎么办呢?操作系统的开发人员就用高级语言设计了一些接口,在接口里在汇编语言的程序中使用陷人指令使进程进人内核来调用内核服务函数。然后,就把这些高级语言的接口提供给高级语言用户,于是高级语言用户即可通过这些预先设计的接口来调用内核服务,又不能随便进人内核而对内核造成危害,这样就两全其美了。人们把上面的做法叫做对内核函数的封装。当然,封装之后的内核函数调用是系统调用。

但是,现在也正因为上面的这个原因,使得“系统调用”这个术语变得模糊起来。因为在有保护模式的系统中,经过了封装的内核函数从程序结构上与普通函数就截然不同了。如果将封装了的内核函数叫做系统调用,那么在没有保护模式的系统中调用内核函数的方法又应叫做什么呢?至今,这个问题未见有人回答。所以,为了下面讨论问题清楚起见,在这里做一个约定:应用程序调用内核服务的这个行为叫做“系统调用”;把提供服务的内核函数叫做“内核服务例程”;把陷入中断后,用来对内核服务例程进行封装的汇编函数叫做“系统调用例程”;把用高级语言对系统调用例程进行了再封装之后,外观看起来与高级语言函数没有区别的这个函数叫做“系统调用接口”。

也就是说,在保护模式下,应用程序可调用的内核函数是如图所示被包裹上了两层之后的一个特殊接口。说它特殊,是因为系统调甩接口是通过中断来调用系统调用例程的,正是这个调用使进程由用户空间陷入了内核空间。

图 内核函数的封装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值