linux – fork产生的唯一开销是页表复制和进程ID创建
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – fork产生的唯一开销是页表复制和进程ID创建,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1107字,纯文字阅读大概需要2分钟。
内容图文
![linux – fork产生的唯一开销是页表复制和进程ID创建](/upload/InfoBanner/zyjiaocheng/967/a5eaaf8c293a4ffbbda332330336809c.jpg)
fork()产生的唯一开销是父页面表的重复
并为孩子创建一个唯一的过程描述符.
在Linux中,实现了fork()
通过使用写时复制页面.写时复制(或COW)是一种技术
延迟或完全阻止复制数据.
那么为什么需要复制页面表.只要进程以只读模式共享页面或直到它们写入某些内容,就不需要复制页表,因为父进程和子进程的转换是相同的?
有人可以解释..
提前致谢
解决方法:
因为COW的工作原理是页面是只读的,所以我们需要一个只读的页表副本.当新进程写入某处时,页面错误被视为写入只读页面的结果.页面错误处理程序查看页面的状态,确定是否应该写入(如果不是,segfault,就像在原始进程中写入只读一样)并将相关的原始页面复制到新页面处理.
对于某些条目,原始页表是可读写的,因此至少必须复制这些条目.我相信整个页面表被复制(因为它使一些其他代码更简单,并且页表条目不是很大 – 每页四或八个字节[每4096KB加一个条目,每4009 * 4096KB加一个)等等层次结构].
还有一些有趣的方面,例如,我们有一些代码可以:
char *ptr = malloc(big_number);
// Fill ptr[...] with some data.
if(!fork())
{
// child process works on ptr data.
...
}
else
{
free(ptr);
}
现在,将删除父进程中的页表条目.如果我们与子进程共享这些,我们需要知道这些页表条目是共享的.
当通过网络接收/发送数据,写入磁盘,交换页面等等时,会出现许多其他类似的问题.
内容总结
以上是互联网集市为您收集整理的linux – fork产生的唯一开销是页表复制和进程ID创建全部内容,希望文章能够帮你解决linux – fork产生的唯一开销是页表复制和进程ID创建所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。