当前位置: 首页 > news >正文

苗木企业网站建设源代码 园林网站源码程序 苗圃花卉网站制作源码全网引流推广 价格

苗木企业网站建设源代码 园林网站源码程序 苗圃花卉网站制作源码,全网引流推广 价格,做影视网站难吗,太原工业学院教务网络管理系统本节目录1.fork函数初识2.fork函数返回值3.写时拷贝1.fork函数初识 在Linux中&#xff0c;fork函数是一个非常重要的函数&#xff0c;它从已存在的进程中创建一个新进程。新进程叫做子进程&#xff0c;而原进程叫做父进程。 #include <unistd.h> pid_t fork(void); 返回…

本节目录

  • 1.fork函数初识
  • 2.fork函数返回值
  • 3.写时拷贝

1.fork函数初识

在Linux中,fork函数是一个非常重要的函数,它从已存在的进程中创建一个新进程。新进程叫做子进程,而原进程叫做父进程。

#include <unistd.h>
pid_t fork(void);
返回值:子进程返回0,父进程返回子进程的pid,出错返回-1.

进程调用fork,当控制转移到内核中的fork代码后,内核做:
分配新的内存块和内核数据给子进程。
将父进程部分数据结构内容拷贝进子进程。
添加子进程到系统进程列表中。
fork返回,开始调度器调度。

当开始只有一个执行流时,fork之后,变成两个执行流。

面试题:请你描述一下,fork创建子进程,操作系统都做了什么?
创建一个子进程,则系统里面多了一个进程,进程 = 内核数据结构+进程代码和数据,进程的代码和数据一般是从你的C/C++程序中来,也就是从磁盘而来。
创建子进程,给子进程分配对应的内核数据结构,必须子进程独有的,因为进程具有独立性!理论上,子进程也要有自己的代码和和数据,可是,一般而言,我们没有加载的过程,也就是说,子进程没有自己的代码和数据。所以子进程只能使用父进程的代码和数据。
代码:都是不可被写的,只能读取,所以父子共享,没有问题。
数据:可能被修改,所以必须分离。

对于数据而言:
1.创建子进程的时候就直接拷贝分离?问题??可能拷贝子进程根本不会用到的数据空间,即使用到了,也可能只是读取!
创建子进程的时候不需要将不会访问的数据或者只会读取的数据拷贝一份,只需要拷贝父或子进程会写入的数据。

接下来又有两个问题,一般而言,即使是操作系统也无法知道那些数据可能会被写入,另外,提前拷贝了,你会立马使用吗?
所以操作系统选择了写时拷贝技术,来进行父子进程的数据的分离。
fork之后,父子进程共享所有的代码。

fork之后,子进程开始执行代码的初始位置在哪?
1.我们汇编之后,会有很多行代码,而且每行代码加载到内存中后,都会有对应的地址。
2.因为进程随时可能被中断(可能并没有执行完),下次回来必须从之前的位置继续执行(不是最开始嗷),就要求CPU必须记录下来,CPU中有EIP寄存器,存储着CPU要执行指令的地址,用它来记录当前进程的执行位置。也即进程的上下文数据。
寄存器在CPU内只有一份,但寄存器内的数据,可以存储多份。

创建的时候,要不要给子进程的父进程的上下文数据?
虽然父子进程给自调度,各自修改EIP,但是已经不重要了,因为子进程已经认为自己的EIP,就是fork之后的代码。

当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。但每个进程都可以开始它们自己的旅程。
看如下程序:

 1 #include <unistd.h>2 #include <stdio.h>3 #include <stdlib.h>4 #include <sys/types.h>5 int main()6 {7   pid_t pid;8   printf("Before:pid is %d\n",getpid());9 10   pid = fork();11   if(pid == -1)                                                                                                                                                                                              12   {13     perror("fork()"),exit(1);14   }15   printf("After:pid is %d,fork return %d\n",getpid(),pid);16   sleep(1);17   return 0;18 }

从结果可以看出,fork之前,父进程独立执行,fork之后,父子进程两个执行流分别执行。注意:fork之后,父子进程谁先执行完全由调度器决定。

2.fork函数返回值

子进程返回0
父进程返回子进程的pid

3.写时拷贝

通常父子代码共享,当任意一方进行写入,便以写时拷贝的方式各自一份副本。
具体见下图:
在这里插入图片描述
fork常规用法
一个父进程希望复制自己,使父子进程同时执行不同的代码段。例如:父进程等待客户端请求,生成子进程来处理请求。
一个进程要执行一个不同的程序。例如子进程从fork返回后,调用exec函数。

fork调用失败的原因
系统中有太多的进程
实际用户的进程数超过了限制

http://www.shuangfujiaoyu.com/news/28185.html

相关文章:

  • 某网站开发项目成本估计如何做营销活动
  • 如何做网站界面谷歌搜索引擎下载
  • 做微商在哪个网站打广告好百度账号安全中心官网
  • 学会网站建设项目百度竞价排名技巧
  • 国外做论坛网站中国seo网站
  • 最好看的网站设计免费网络推广工具
  • 网站开发项目周期的应用商店优化
  • 做一元夺宝网站需要什么条件怎么做关键词排名靠前
  • ps做图 游戏下载网站有哪些内容淘宝店铺怎么引流推广
  • 做化工回收上什么网站怎么做游戏推广员
  • 做网站该注意哪些基本要素第三方推广平台
  • 惠民建设局网站是哪个外链生成网站
  • 桂林网上商城seo推广的常见目的有
  • 网站建设之织梦后台熊掌号主页泰安seo公司
  • 做的网站电脑上跟手机上不一样吗杭州网站排名seo
  • wordpress filebrowser成都网站seo厂家
  • 网站建设 费用百度推广竞价托管
  • 网站建设电话营销网络营销案例分析论文
  • 响应式模板网站模板如何推广自己的产品
  • 做招标代理应关注的网站公司网站建设哪家公司好
  • 网站建设 分类广告网络广告案例以及分析
  • 长沙网站建设qq交流群专业代写文案的公司
  • Wordpress主题 仿魅族怎样淘宝seo排名优化
  • 网站建设流程图解淘宝关键词优化软件
  • 化妆品做网站流程在线网站排名工具
  • 安全狗网站白名单指什么网络推广工作内容
  • 医院网站建设的资料上海网络推广优化公司
  • 百度快照优化网站营销策划思路及方案
  • 简单做网站如何做品牌推广方案
  • 自己做发小说网站广州百度搜索排名优化