进程的概念

Posted marklijian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程的概念相关的知识,希望对你有一定的参考价值。

进程

操作系统发展史

操作系统的作用

  • 对计算机硬件接口的复杂操作进行封装

串行

  • 一个程序完完整整的运行结束后再执行下一个程序

多道技术

  • 产生背景
    • 针对单核CPU,实现并发
  • 空间上的复用
    • 各自程序所运行的内存空间是隔离的
    • 无法对其他程序进行干扰
  • 时间上的复用
    • 复用CPU上的时间片
    • 对CPU的利用率有了很大的提高

并发

  • 虚假的同时运行
  • 实际上是对单个CPU的利用
    • 因为一个进程在运行时不可能一直用到CPU的所有资源
    • 操作系统对CPU的资源进行调度
    • 多个程序在使用CPU,但并不是在同一时刻运行
    • 只要在不同程序中切换的够快,
      就看起来像是多个程序同时运行了
  • 程序对CPU的占用切换
    • 程序进入阻塞态
    • 该程序分配的时间片到了
    • 优先级更高的进程执行了

并行

  • 基于多核CPU,完成了真正上的同一时刻上运行多个程序

现在的CPU

  • 多核cpu
  • 每个核心上都使用了多道技术

ps:一个核心是做不到同一时刻完成两件事的

进程的概念

进程即正在执行的一个过程。

进程是对正在运行程序的一个抽象。

  • 单核+多道,实现多个进程的并发执行

进程和程序的区别

  • 进程:
    • 正常运行的程序
    • 需要一些数据
    • 可以得到一些结果
  • 程序:
    • 单纯的一些文件,仅仅是一些代码,
      不运行将一点意义都没有

进程的创建

  • 首先,知道进程肯定是操作系统来创建的
  • 系统初始化
  • 查看进程linux中用ps命令,windows中用任务管理器,前台进程负责与用户交互,后台运行的进程与用户无关,运行在后台并且只在需要时才唤醒的进程,称为守护进程,如电子邮件、web页面、新闻、打印
  • 一个进程在运行过程中开启了子进程
    • nginx开启多进程,os.fork,subprocess.Popen等
  • 用户的交互式请求,而创建一个新进程
    • 如用户双击暴风影音
  • 一个批处理作业的初始化
    • 只在大型机的批处理系统中应用
  • 新进程的创建都是由一个已经存在的进程执行了一个
    用于创建进程的系统调用而创建的

不同操作系统中对进程的创建

  • 在UNIX中该系统调用是:fork
    • fork会创建一个与父进程一模一样的副本,二者有相同的存储映像、同样的环境字符串和同样的打开文件
    • 在shell解释器进程中,执行一个命令就会创建一个子进程
  • 在windows中该系统调用是:CreateProcess
    • CreateProcess既处理进程的创建,也负责把正确的程序装入新进程。

进程的状态

运行态

  • 进程占用处理器资源
  • 处于此状态的进程的数目小于等于处理器的数目

阻塞态

  • 由于进程等待某种条件(如I/O操作或进程同步)
  • 在条件满足之前无法继续执行
  • 该事件发生前即使把处理器资源分配给该进程,也无法运行

就绪态

  • 进程已获得除处理器外的所需资源,等待分配处理器资源,只要分配了处理器进程就可执行
  • 就绪进程可以按多个优先级来划分队列

进程的退出

自愿

  • 正常退出
    • 用户点击交互式页面的叉号
    • 程序执行完毕调用发起系统调用正常退出
    • 在linux中用exit
    • 在windows中用ExitProcess
  • 出错退出
    • python a.py中a.py不存在

非自愿

  • 被其他进程杀死
    • 执行非法指令
  • 严重错误
    • 如kill -9

mutiprocess

开启子进程的方式一

  • 使用函数
  • Process(target = 函数名, args = ([参数1,[参数2,]])

开启子进程的方式二

  • 使用类
  • class A(Process):
    A().start()

僵尸进程和孤儿进程

僵尸进程

  • 程序执行完但是pid和运行时的状态还存在
  • 死而不僵

孤儿进程

  • 父进程死了,子进程还活着

三种情况

  • 父进程等着所有的子进程都运行结束,进行同一的资源回收
    • 无害
  • 父进程死了,子进程将由init进程接管并回收
    • 无害
  • 父进程一直不死,开辟了大量的子进程,占用了大量的pid
    • 有害
    • 解决方案:杀死父进程

XMind: ZEN - Trial Version

以上是关于进程的概念的主要内容,如果未能解决你的问题,请参考以下文章

进程基本概念

Linux进程概念篇

理解进程概念—2

Linux系统进程概念

Linux进程概念--操作系统与进程

Linux——进程概念进程创建僵尸进程孤儿进程环境变量程序地址空间详解