cp命令中的上下文切换次数

时间:2011-12-10 12:35:19

标签: c linux linux-kernel system

我试图了解cp命令与读/写组合的相似/不同之处 在上下文切换方面。换句话说,使用cp从应用程序中复制数据等效于使用读/写组合。我认为读/写组合会做4个上下文切换 - 用户上下文 - 内核上下文(数据复制到内核缓冲区,然后数据复制到用户空间) - 用户上下文,用于读取,然后另一组2个上下文切换用于写入。 cp会发生多少个上下文切换?零复制或sendfile也会更好 比使用cp?

我在linux平台上使用内核而不是2.4。

感谢。

3 个答案:

答案 0 :(得分:1)

我已经从cp检查了fileutils 4.1的源代码,并通过在循环中调用read()write()来复制常规文件。因此对于特定的cp,它与read/write循环之间没有区别。

现在,read()write()的调用次数明显取决于用于复制的缓冲区的大小。

最后,很难看出上下文切换的数量是多么相关,因为副本几乎肯定会受I / O限制。如果它与您的特定情况相关,您可能需要详细说明它们是什么,以便我们能够解决这些问题。

答案 1 :(得分:0)

上下文切换也是异步发生的。特别是,对于每个系统时钟滴答(每20或甚至1毫秒发生) - 因为然后内核重新安排运行任务。

我认为你不应该在cp进程中关注它们。

你可以关心减少system calls的数量;对于文件副本,这意味着在调用read& write

答案 2 :(得分:0)