进程Process

场景

  • 网易云音乐.exe是一个程序,不是进程

image.png

  • 双击网易云音乐.exe时,操作系统会开启一个进程image.png

    定义

  • 进程程序的执行实例

    • 程序是可以执行的,当你执行的时候,就会出现一个进程
    • 但你再执行程序,就会再多出一个进程,两个进程之间是没有什么关系的
    • 但是也可以控制一下,比如 第二个进程发现已经有一个自己的进程了,他就不会把自己开起来(打开了一个网易云,再次双击图标,只会弹出现在在执行的网易云窗口)
  • 程序在CPU上执行时的活动叫进程
    • 意思是 你的程序本来是放在硬盘上面或内存里的,但是你想把它放到CPU里面执行,或者说执行的活动,就叫进程
  • 实际上并没有明确的定义,只有一些规则

    特点

  • 一个进程可以创建另一个进程(父进程与子进程)

打开任务管理器,点击chrome,可以发现他有17个进程。这17个进程就是chorme的子进程
image.png

  • 通过任务管理器就可以看到进程和子进程的关系

了解CPU

这里只研究单核的CPU

特点

  • 一个单核CPU,在一个时刻,只能做一件事
  • 那么如何让用户同时看电影、听声音、写代码呢?
  • 答案是在不同进程中快速切换
  • 此处以渣男交多个女朋友举例
    • 比如早上一个,中午另外一个,晚上又另外一个。在三个之间快速切换。
    • 表面上所有事是同时进行,实际上在每一个时刻,只会做一件事
    • 表面上是所有女朋友同时维护,实际上是一个时间段只和一个女朋友聊天

多程序并发执行

  • 指多个程序在宏观上并行,微观上串行
  • 每个进程会出现『执行 - 暂停 - 执行』的规律
  • 多个进程之间会出现抢资源(如打印机)的现象

进程的两个状态

运行和非运行
上面提到 每个进程会出现『执行 - 暂停 - 执行』的规律
image.png

  1. 进入: 双击图标,启动程序,它会马上进入非运行状态。因为这个时候CPU可能在忙,所以要等
  2. 分派:等到CPU说可以执行了,CPU就会把资源分派给程序,程序就可以在CPU上运行,变成进程
  3. 运行完之后是退出,但是如果不退出,需要这个进程让一下资源,就会暂停,变成非运行态
  4. 如此循环反复,暂停-分派-暂停-分派,直到退出。
  5. 这就是进程的两个状态:运行和非运行

把上面的过程放大来看
image.png

  1. 图中:中间有一个带格子的长方形(进程队列),里面的格子就是一个进程,在排队等待进入cpu
  2. 当cpu空闲时,第一个格子会分派进入cpu,这时会有两种情况:要么执行完成后退出,要么会把这个进程暂停(虽然这个进程没执行完,但是CPU要执行下一个进程的情况),暂停时,这个进程会重新进入长方形的队尾,再次等待分派
  3. 然后下一个进程就分派,就这样不停地循环
  4. 这就是进程队列在CPU执行的一个简化模型

阻塞进程

在进程队列,那些等待执行的进程中

  • 都是非运行态
  • 一些(A)在等待CPU资源
  • 另外一些( B )在等待I/O完成(如文件读取)
  • 如果这个时候把CPU分配给B进程,B还是在等I/O
  • 我们把这个B叫做阻塞进程
  • 因此,分派程序只会把CPU分配给非阻塞进程

所以CPU是会挑选哪些进程分配资源的,CPU只会分配给非阻塞进程

那么当阻塞的时候,进程就不止有两个状态,而是三个了

image.png
之前是只有两个状态 运行和非运行。 现在加入了阻塞,就不止有两个了
会有就绪和阻塞的状态

image.png

一、就绪-分派-运行-超时-就绪

  1. 当我们创建一个进程的时候(绿色),进程就会马上进入就绪态,因为它没有等待I/O,读文件等
  2. 如果CPU正好是空闲的,那么该进程就会被分派到CPU,处于运行态。
  3. 运行着,CPU发现要执行另外一个程序,只给了这个进程一点时间,这个时间过了的话,进程就会超时,重新进入就绪状态,这是一个循环 就绪-分派-运行-超时-就绪

    二、就绪-分派-运行-阻塞-就绪

  4. 如果进程在运行中发生了等待事件,比如要等待读文件。那就会处于阻塞中了

  5. 等读文件结束了,阻塞态也就结束了,进入了就绪态
  6. 只有就绪了之后,才有可能下次分派给CPU运行
  7. 运行完了 就终止(红色)