【问题标题】:nice() library call or sys call?nice() 库调用还是系统调用?
【发布时间】:2020-04-01 06:50:01
【问题描述】:

改变调用进程优先级的函数(例如:nice())应该实现为库调用还是系统调用?我正在网上阅读它,据我了解,它曾经是一个系统调用,但现在它是一个库调用。为什么会这样?

【问题讨论】:

  • 这往往取决于谁定义了这些术语。当你调用一个包装了系统调用的 C 函数时,它是系统调用还是函数?这取决于你是谁。对于nice(),该函数是进行nice() 系统调用,还是使用可以提供相同功能的不同的、更通用的系统调用?还要考虑signal()sigaction()——前者现在通常是调用后者系统调用的函数。并非总是如此。

标签: c linux unix operating-system system-calls


【解决方案1】:

所有函数都是库调用。您正在查看的问题是对于是否存在直接对应于语义的系统调用的问题的草率简写,以便库函数可以按照return syscall(SYS_foo, ...); 的方式做一些微不足道的事情。

经常发生在历史的某个时刻,系统调用与该历史时刻的函数操作完全对应,但是:

  • 对函数的新要求导致现有系统调用无法满足函数的需求,或者
  • 在作为其接口基础的系统调用中发现了一个错误

在任何一种情况下,如果有一种合理的方法可以完全使用其他系统调用来实现该操作,那么这通常比实现系统调用的“v2”更有意义。此外,即使添加了一个新的系统调用,它通常也会比旧接口更通用,以实现可扩展性或用于满足其他现有需求。因此它可能不直接对应于正在实现的功能,只是提供一种获取功能的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-19
    • 2012-01-17
    • 2011-07-07
    • 1970-01-01
    • 2014-12-25
    • 2016-02-09
    • 2021-08-04
    • 2016-01-06
    相关资源
    最近更新 更多