当前位置: 技术问答>linux和unix
system call VS.library call
来源: 互联网 发布时间:2015-08-07
本文导语: I had heard a lecture by a guy from Bell lab, he said system call is more expensive than library call. 我对Unix不是很熟悉,在我的印象中,library call应该更加expensive,应为system call 是kernel直接和hardware交互,而library call...
I had heard a lecture by a guy from Bell lab, he said system call is more expensive than library call.
我对Unix不是很熟悉,在我的印象中,library call应该更加expensive,应为system call 是kernel直接和hardware交互,而library call封装了system call(Win API 给的我感觉比较深)
1. system call 会使得process从user mode ---> kernel mode.是这个原因吗?他说了什么lock/unlock我不是很明白。
2. library call 不是象我理解的封装了system call?
我对Unix不是很熟悉,在我的印象中,library call应该更加expensive,应为system call 是kernel直接和hardware交互,而library call封装了system call(Win API 给的我感觉比较深)
1. system call 会使得process从user mode ---> kernel mode.是这个原因吗?他说了什么lock/unlock我不是很明白。
2. library call 不是象我理解的封装了system call?
|
介个...非要较真的话,我说两者没什么可比的,先不着急,听我说:
首先要说明,并非所有库函数都直接或间接的依赖于系统调用,尽管大多数的确如此。
然后嘛,要知道系统调用的数量很少(相比库函数而言),每个的功能也很集中不像库函数那么复杂。可以肯定地说,如果有一个库函数是基于系统调用实现的,并且其功能于系统调用完全一样,那么它一定没有系统调用的效率高!原因正如你想的那样。
但是有这么没用的库函数吗?即使功能很接近,至少库函数会有一个更友好的接口。大多数情况是,库函数针对用户的需要量身打造,它通过多个系统调用实现,试想如果你正有这样的需求,是自己组合系统调用和是使用现成的函数?我选库函数,至少它更安全。
所以我说它们没得比,实现的功能都不一样,怎么比啊?
事实上很多书上有这样的比较数据,主要是在IO方面,但是...要挑战权威啦,不说了,呵呵。最后说一句,不是搞理论研究的话,实在不用操那么多心,就像讨论c+inline assembly一样,unix源代码里采用了多少行啊
首先要说明,并非所有库函数都直接或间接的依赖于系统调用,尽管大多数的确如此。
然后嘛,要知道系统调用的数量很少(相比库函数而言),每个的功能也很集中不像库函数那么复杂。可以肯定地说,如果有一个库函数是基于系统调用实现的,并且其功能于系统调用完全一样,那么它一定没有系统调用的效率高!原因正如你想的那样。
但是有这么没用的库函数吗?即使功能很接近,至少库函数会有一个更友好的接口。大多数情况是,库函数针对用户的需要量身打造,它通过多个系统调用实现,试想如果你正有这样的需求,是自己组合系统调用和是使用现成的函数?我选库函数,至少它更安全。
所以我说它们没得比,实现的功能都不一样,怎么比啊?
事实上很多书上有这样的比较数据,主要是在IO方面,但是...要挑战权威啦,不说了,呵呵。最后说一句,不是搞理论研究的话,实在不用操那么多心,就像讨论c+inline assembly一样,unix源代码里采用了多少行啊