【问题标题】:What's the design principle of syscall?syscall的设计原理是什么?
【发布时间】:2011-07-01 01:25:16
【问题描述】:

Linux如何确定某些功能应归类为系统调用,而其他功能可以直接在用户空间中实现?

【问题讨论】:

    标签: system-calls


    【解决方案1】:

    当必须在内核中进行处理时执行系统调用 - 这意味着它需要升级权限或访问内核私有资源。通常,如果可以将某些内容保存在用户空间中,则可以在其中完成。当事情转移到内核处理时,可能存在性能原因,因此需要系统调用来执行。另一个方面是用户空间和内核空间之间的转换相对昂贵。

    【讨论】:

    • 这不能回答我的问题。我非常了解系统调用的执行方式。我的问题是为什么某些功能值得归类为系统调用。
    • @new_perl 可能更清楚一点,如果某些东西以这种方式执行,它就会被分类为系统调用。如果某些东西被归类为系统调用,则需要它。 A)这是一个绝对要求,例如需要访问内存或其他内核管理的资源,或者 B)这是一个基于性能的要求。我假设您在质疑 B。对于这些,这将视具体情况而定。我认为一般最后的手段是在内核中包含,只有在真正需要时。一个例子是 pthreads/futex 功能,其中创建系统调用以获得所需的性能增益
    • @new_perl 也许答案的附录是 - 谁最终决定?好吧,如果你在谈论 vanilla Linux 内核,那么由 Linus 等人来锁定它。当然,如果您正在编写内核补丁或自己的驱动程序(想想:VMware),您可以根据自己的意愿做出决定
    • 我确实理解in a real need 的情况,但是内核人员一定想出了一些机制,这样内核管理的资源就不会在用户空间中被破坏,他们是否将所有内核资源存储在更高的 2G 内存中空间,但有时它们仍然需要存储在文件系统中,它们如何保护内核文件?
    • @new_perl 由于内存访问在虚拟内存实现中的工作方式,所有内核内存都受到保护。当您获得指向内存的指针时,您实际上指向的是虚拟内存空间,然后它映射到实际内存或磁盘上的交换中的页面(或段)。所有对内存读取或写入的请求都通过内核,内核保留一张表,其中列出了哪些虚拟页面正在使用或空闲,以及谁拥有它们。由于这种机制,不可能访问内核内存页面。根本没有机制可以从用户空间指向特定的 RAM 字。
    猜你喜欢
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 2020-09-12
    • 2023-03-12
    • 2011-04-14
    • 2016-12-28
    相关资源
    最近更新 更多