关于Linux下的写时复制
来源:互联网 发布:淘宝用户名起名大全 编辑:程序博客网 时间:2024/05/13 10:25
关于写时复制
在Linux中要启动一个新进程的方式通常是:先调用fork()
函数fork出一个新的进程,然后在 新的进程中调用exec()函数来启动新的程序从而达到启动新程序的目的,比如采用下面的代码实现。
int start_prog(char* prog,char* args[]) { pid_t pid = fork(); // 创建子进程 if(pid < 0) return -1; if(pid ==0) { // 子进程 if(execv(prog, args)<0) return -1; // 加载新的程序 } else { return 1; }}int main() { char* args[] = { NULL }; return start_prog("/bin/ls", args);}
我们知道进程间的内存地址空间是隔离的,fork()系统调用的结果是生成一个新的子进程,为了保证隔离性, 早期的UNIX采用在fork()
将父进程的地址空间完整的复制一份。这个操作非常的耗时。 为了提高效率现代的Unix及Linux采用了一种称为写时复制
的技术,其实也就是一种延迟操作的做法, 子进程和父进程在fork()
时并不马上复制,而是暂时共享内存空间,随后只要父进程或者子进程试图写共享的内存就会产生一个异常, 这时内核才把内存空间进程复制,比如我们在Shell中启动一个程序时随后就会启动新的程序,启动后的程序将会覆盖旧的内存空间, 如果提前就复制了,那么这个复制操作其实是白做了,为此系统将这个操作优化为写时复制。
写时复制,发生写时才复制内存地址空间
如果马上进行exec加载新的程序,那么复制地址就没必要了
0 0
- 关于Linux下的写时复制
- linux的写时复制
- 关于fork的写时复制!
- [linux 0.11]写时复制的实现
- Linux进程学习(总结学习关于“写时复制”)
- 关于linux内核fork后cow(写时复制)的代码分析
- 关于linux内核fork后cow(写时复制)的代码分析
- linux 写时复制 copyonwrite
- Linux写时复制技术
- linux写时复制技术
- 关于C++ string类的写时复制
- 关于 copy-on-write 写时复制
- 在linux下写的mysql无法插入,sql语句在复制中变'脏'了.
- linux下的复制命令
- PHP的写时复制
- php的写时复制
- linux 写时复制 COW 过程梳理
- Linux/UNIX写时复制技术
- java对excel表的操作,jxl的基本操作
- 剑指offer(十三)之链表中倒数第k个结点
- Linux学习-杂
- iOS上传ipa
- PHP实现快速排序
- 关于Linux下的写时复制
- FLV文件格式解析
- Android开源项目分类汇总
- IntelliJ IDEA手工安装插件方法
- java二维码工具类,中间带LOGO的,很强大
- 英国监管机构向比特币抛出橄榄枝,管制环境更加宽松
- 关于Android内存泄漏的优秀文章
- H5页面快速搭建之高级字体应用实践
- poj 1579 递归-记忆化搜索