当前位置:首页 > 公众号精选 > 码农的荒岛求生

本文是《操作系统:以程序员的角度》第四章,从本章开始将开启第一个重要的主题:进程,彻底理解进程对程序员来说是极为重要的,本章就从程序员的角度来讲解到底什么是进程、操作系统是如何实现进程的。本文承接上篇《程序员应如何理解进程》以下为本篇目录:

  • 进程是由谁创建的?在什么情况下创建的?
  • 操作系统创建进程:初始化
  • 进程创建进程:系统调用
  • 程序员什么情况下需要创建进程
  • 任务处理
  • 充分利用多核
  • 增强系统稳定性
  • 从进程的角度来理解操作系统
  • 实例讲解进程创建:fork与exec
  • 总结

从这一节起,我们将详细讲解进程的一生。进程如人生,进程的一生同样包含三个阶段,创建,运行和终结,本节是进程三部曲的开篇:进程创建。

接下来,我们讲解关于进程创建的诸多问题。

进程是由谁创建的?在什么情况下创建的?

幸好这个问题不像鸡生蛋蛋生鸡那样,这个问题的答案相对简单,进程的创建者有两种:

  • 操作系统可以创建新的进程

  • 进程也可以创建新的进程

其中,进程的创建者被称为父进程,创建出的进程被称为子进程。

1,操作系统创建进程:初始化

作为计算机的Boss,最初的进程是由操作系统创建的,操作系统在初始化的过程中会创建一系列进程。这些进程中有的是用户可见的,主要用来和用户进行交互,比如Windows或Linux开机后输入用户密码,这就是一个进程,这类进程被称之为前端进程(Foreground Processes);

有的是用户看不到的在背后默默运行的进程,比如用来检测系统是否有更新的进程,这类进程被称之为后端进程(Background Process)。在Windows或Linux系统中,虽然开机后我们没有打开任何程序,但是使用Windows下的任务管理器或者Linux中的ps命令,你都会发现操作系统已经创建了很多进程。

2,进程创建进程:系统调用

其实从本质上来说,进程最终都是由操作系统创建出来的,但是操作系统把创建进程作为一项服务提供给了用户程序。还记得程序员应该怎样向操作系统请求服务吗,没错,就是通过系统调用。用户程序可以通过系统调用来创建新的进程。在Linux(Unix)下这个系统调用是大名鼎鼎的fork,在Windows下这个系统调用叫做CreateProcess。

比如在Linux系统中,我们通过命令行来运行程序,其实命令行解释器,比如常用的bash,也是一个进程,bash进程等待用户输入,然后调用系统调用创建新的进程来执行命令。比如我们常用的ps命令,注意ps本身就是一个可执行程序,当用户敲击回车按键后,bash调用fork创建新的进程,这个新的进程运行的就是ps程序,bash本身不关心ps进程是如何工作的,bash要做的就是等待,等待ps运行完成并输出结果后返回到bash,然后等待用户的下一次输入,如图所示:

从操作系统使用者的角度来说,一切皆为进程。操作系统中你能看到的、能用的都是进程。

因此,学习操作系统要以进程为核心,须知,操作系统中的一切都是为进程来服务的。

程序员什么情况下需要创建进程

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭