首页 文章
  • 1 votes
     answers
     views

    copy-on-write如何在fork-exec中工作? [关闭]

    进程 fork 是子进程,并在子进程中调用 exec() . 使用copy-on-write,在 fork 之后,父进程和子进程共享内存 . 当子进程调用 exec() 加载另一个进程时,Linux是否会将父内存复制到新内存,而子进程也会将另一个进程加载到这个新内存中?如果是这样,这是否意味着在执行fork-exec时,使用copy-on-write分叉的进程没有数据?
  • 1 votes
     answers
     views

    在执行fork()时禁用某些内存页面上的写时复制(COW)

    当父进程分叉子进程(在linux下)时,我想将父进程中的一些内存页面复制到子进程的地址空间,这意味着,无需等待拷贝 - 写(COW) . 有没有机制支持这个?谢谢:-)
  • 1 votes
     answers
     views

    复制写和fork()? [关闭]

    在具有分页内存的系统中,使用Copy On Write技术,进程使用fork()调用创建新进程 . 创建之后,新进程会尝试在内存中写入内容 . CPU会产生哪个错误 - 页面错误或其他? 据我所知,当使用copy on write时,这意味着不会复制公共数据,但是当我们使用fork()时,当新进程尝试在某个页面中写入时,该页面将停止共享,并且使用fork创建的进程获取页面的副本,以便可以在其中写...
  • 5 votes
     answers
     views

    释放未被更改的“写时复制”内存

    我得到了写拷贝背后的想法 . 当我fork时,堆被标记为CoW,当任何进程尝试更改它时,会生成一个副本 . 问题是:我是否必须在孩子的过程中释放它?假设一个父有一个动态char *数组,然后它就是forks . 子进程打印一些const char,然后退出 . 子进程根本没有改变堆 . 会有内存泄漏吗? 编辑:我的子进程在堆上打印数组,但不修改它 . Valgrind说如果我不释放那个阵列就会有...
  • 7 votes
     answers
     views

    copy-on-write如何在fork()中工作?

    我想知道如何在fork()中发生copy-on-write . 假设我们有一个具有动态int数组的进程A: int *array = malloc(1000000*sizeof(int)); 数组中的元素初始化为一些有意义的值 . 然后,我们使用fork()创建一个子进程,即B.B将迭代数组并进行一些计算: for(a in array){ a = a+1; } 我知道B不会立即复...
  • 1 votes
     answers
     views

    如何在fork(),linux [copy]中演示COPY ON WRITE

    这个问题在这里已有答案: Fork - same memory addresses? 5个答案 根据COW机制,在写入之前,父区域中的页面不会复制到子区域 . 所以我做了这段代码Plz看到这段代码 #include <stdio.h> #include <stdlib.h> // for system() #include <unistd.h> // for...
  • 2 votes
     answers
     views

    如何复制写作工作

    假设我们有一个父进程,内存中存储了一些任意数量的数据,我们使用fork来生成子进程 . 我理解为了让操作系统在写入时执行复制,包含我们正在修改的数据的内存中的某个页面将设置其只读位,并且操作系统将使用在子项尝试时将导致的异常修改数据以将整个页面复制到内存中的另一个区域,以便孩子获得它自己的副本 . 我不明白的是,如果内存中的特定部分被标记为只读,那么数据最初所属的父级也不能修改数据 . 那么整个方...
  • 0 votes
     answers
     views

    关于COW在linux中分叉

    在linux中,我知道它是由COW实现的,因为浪费 . 但是,在书中说,当child在fork()之后调用exec()时,地址空间永远不会被复制 . 但我认为如果孩子使用exec(),则意味着在地址空间中创建尚未复制的新数据或代码 . 因此,当调用exec()时,会复制地址间隔(写入时复制),并在此处写入新数据或代码 . 我错了吗?为什么exec()调用永远不会复制父项的东西? 或者如果child...
  • 9 votes
     answers
     views

    fork()中的copy-on-write如何处理多个fork?

    根据维基百科(可能是错的) 发出fork()系统调用时,会创建与父进程对应的所有页面的副本,并由操作系统将其加载到子进程的单独内存位置 . 但在某些情况下不需要这样做 . 考虑一个子进行“exec”系统调用(用于执行C程序中的任何可执行文件)或fork()之后很快退出的情况 . 当需要子进程来执行父进程的命令时,不需要复制父进程的页面,因为exec用要执行的命令替换调用它的进程的地址空间 . 在...
  • 3 votes
     answers
     views

    MATLAB中的浅拷贝行为

    当他们从Python开始时,很多人遇到意想不到的浅拷贝行为,我想确保我不会在MATLAB中犯这些错误(我的经验较少) . 我读了这篇关于object behaviors in MATLAB的文章,我阅读了与指针/句柄行为有关的this question . 是否有任何情况 isa(obj, 'handle') 会返回false但你仍然会遇到修改 obj 会导致修改另一个变量的情况(据我所知,函数调...

热门问题