色彩搭配 网站学校网站建设市场
news/
2025/10/2 11:10:05/
文章来源:
色彩搭配 网站,学校网站建设市场,备案系统网站,为什么网站后台google登陆不了 firefox可以写时复制和写时拷贝是一个意思写时复制是一种策略#xff0c;并不是Linux独有的#xff0c;如果你正在设计某个系统架构#xff0c;也可以参考这种思想。写时复制的英文解释如下Copy-on-write (sometimes referred to as COW) is an optimization strategy used… 写时复制和写时拷贝是一个意思写时复制是一种策略并不是Linux独有的如果你正在设计某个系统架构也可以参考这种思想。写时复制的英文解释如下Copy-on-write (sometimes referred to as COW) is an optimization strategy used in computer programming. 写时复制是计算机的一种优化策略也可以说是优化机制是计算机的优化策略并没有错但是这种策略是人想出来的。The fundamental idea is that if multiple callers ask for resources which are initially indistinguishable, you can give them pointers to the same resource. 它的基本思想是如果有多个调用「callers」「也可以说是多个进程多个线程Linux里面只关心任务就好了」请求同一个难以区分的资源你可以让他们指向同一个资源指针。This function can be maintained until a caller tries to modify its copy of the resource, at which point a true private copy is created to prevent the changes becoming visible to everyone else.All of this happens transparently to the callers. 直到有其中一个调用者试图更改这个两个进程都指向的资源系统才会分配一个真正的资源「可以认为是物理地址」给这个调用者。这个过程对所有人可见。The primary advantage is that if a caller never makes any modifications, no private copy need ever be created.如果调用方也就是拥有相同资源指针的两个进程都不对资源进行修改那么就不需要生产一个副本资源。写时复制的缩写是「COW奶牛」但是实际上它跟奶牛没有任何关系。举个例子说明假设你是一个酒店老板马云和任正非在你们酒店订了2020年11月20号的房间你当时看到酒店还没有住满所以就给他们下发了一个订购成功的返回值。如果是程序在内存充分的情况下创建进程也就成功了。然后你其实不需要马上给马云和任正非安排具体的房间因为他们俩都还没有到酒店开房。假设晚上他们过来开房了你就需要给他们开辟这个房间「也可以认为是资源」给他们晚上做他们想做的事情。如果他们一直都不来那你就不用给他们开房也就不实际占用你的房间。fork()函数和写时复制fork()函数是一个神奇的函数调用一次会返回两次在这个过程中子进程和父进程是共享一个内存空间的。#include unistd.h
#include stdio.hint main()
{int pid fork();if(pid -1){return (-1);}if(pid 0){printf(Hi,Father Pid:%d\n,getpid());return (0);} else {printf(Hi,Child Pid:%d\n,getpid());return (0);}
}-- 程序输出weiqifabsp-ubuntu1804:~/linux$ gcc -o copy copy-for-write.c
weiqifabsp-ubuntu1804:~/linux$ ./copy
Hi,Father Pid:36320
Hi,Child Pid:36321
-- 然后我加入一个资源#include unistd.h
#include stdio.hint main()
{char c a;int pid fork();if(pid -1){return (-1);}if(pid 0){c v;printf(Hi,Father Pid:%d c:%p c:%c\n,getpid(),c,c);return (0);} else {printf(Hi,Child Pid:%d c:%p c:%c\n,getpid(),c,c);return (0);}
}-- 程序输出weiqifabsp-ubuntu1804:~/linux$ gcc -o copy copy-for-write.c ./copy
Hi,Father Pid:36518 c:0x7ffc41acae93 c:v
Hi,Child Pid:36519 c:0x7ffc41acae93 c:a
我们可以看到父进程中我们对资源 c 进行了修改,并打印了资源的地址和值然后我们在子进程中也打印资源的值。可以看到父进程先执行修改 c 的值并打印 c 的值 是 v子进程运行打印 c 的值c 的值是 原理的初始化值 a 。也就是说这个过程发生了写时复制在父进程种给 c 分配了物理内存区别于子进程。创建进程没有发生写时拷贝的情况没有发生写时复制的情况发生了写时复制的情况推荐阅读 专辑|Linux文章汇总 专辑|程序人生 专辑|C语言嵌入式Linux微信扫描二维码关注我的公众号
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924830.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!