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