在32位平台下,进程的地址空间及fork()与vfork()

  1. 进程的地址空间

从下到上依次为正文代码,初始化数据,未初始化数据,堆,共享区,栈,命令行参数环境变量,内核空间1G。
由此可以看出,我们在写程序时,数据它有它特定的位置。

  1. fork()函数做了些什么?
    复制父进程的正文段,数据段,堆,栈这四个部分,并为3个部分分配物理块,除正文段和父进程共享外,其余三个部分都会被分配物理空间。复制之后其内容是相同的。内核除了做这些,内核还会以父进程为模板为子进程创建pcb,用于管理进程。还有页表,之后,会把子进程添加到系统进程列表当中。最后fork返回,开始调度器的调度。
  2. Linux下的写时复制技术
    父进程创建子进程时,会创建pcb,页表,但其余的,会和父进程共享,只是在需要改变子进程段的内容时,才会拷贝一份副本,不需要拷贝时,则和父进程共享同一块虚拟地址空间。 .

  3. vfork()函数
    该函数和fork()函数一样都是创建子进程,只不过该函数比fork函数做的少得多了,该函数采用的是共享。不为子进程创建虚拟地址空间,其和父进程共享虚拟地址空间即也就共享了进程的物理空间。但它会创建pcb,(pcb是控制进程执行的)。之后该函数会返回,并把子进程添加到系统进程列表中,且其会保证子进程先运行。
    在Linux下,我们的线程也是通过vfork这个函数来实现的。
    在这里我还想说一下,计算机真的太快了,快到我们以为他是并发处理任务的,但实际他是一件一件处理的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值