首页 > 技术文章 > 操作系统_清华大学(向勇、陈渝)-笔记-第七章-进程

HermioneBlog 2020-10-19 13:08 原文

进程的定义

一个具有独立功能的程序,在一个数据集合上的一次动态执行过程。讲人话,就是一个程序跑了起来,就叫做进程。
进程主要由两部分组成:

  • 程序代码,代码是静态的部分。
  • 程序处理的数据,而程序处理的数据使得进程具有多样性。

总结:程序是静态的,进程是动态的。这两者可以比喻成,菜谱和菜的关系,菜谱是死的,但你每次做菜的时候放的配料都可以不一样。
但二者也不是包含关系,进程具有核心态、用户态,进程在执行过程中会向操作系统发出请求,也包含了一些控制信息等,这些都是程序所不具备的。

进程的特点

  • 动态性,可以动态地创建、结束进程。
  • 并发性,进程可以被独立调用并占用处理机运行。做菜 -》刀切到手上、伤了 -》 挂起做菜 -》 去处理伤口 -》 回来继续做菜。ps,并行是说可以同时处理两个进程。
  • 独立性,不同的进程工作互不影响。
  • 制约性,因访问共享数据、资源或进程同步而产生的。

进程控制结构

进程控制块:操作系统管理、控制进程运行所用的信息集合。OS用PCB描述进程的基本情况以及运行变换的过程,PCB是进程存在的唯一标志。
包含三大类信息:

  • 进程标识信息,如本进程标识、产生者标识等。
  • 处理机状态信息保存区,保存进程的运行现场信息,如PC指针、堆栈位置等等。
  • 进程控制信息,如:

实现方式:通常组织成链表,方便进行动态的插入、删除功能。

进程状态

进程的生命期管理

创建:

  • 系统初始化时
  • 用户请求创建一个新进程
  • 正在运行的进程申请创建了一个新进程

运行:
内核选择一个就绪的进程运行

等待:
满足一些情况,如等服务,等结果,即所需的资源被别人占用了。
进程只能自己阻塞自己。

唤醒:
满足了进程的资源要求,可以进入等待队列。
进程只能由别的进程唤醒。

结束:
四种情况:

  • 正常退出,自愿的。
  • 错误退出,自愿的。
  • 致命错误,非自愿的,例如偷窥别人的地址空间,操作系统看不下去了就关了他。
  • 被其他进程所杀,非自愿的,例如占用过大的空间,被杀毒软件关了。

进程状态变化模型


running转换为ready的原因:分时调用。

进程挂起

进程没有占有内存空间,映像在内存当中。
阻塞挂起状态:进程在外存等待某件事出现。
就绪挂起状态:进程在外存,但只要进入内存,就可执行。

实现:
维护多组队列,维护每种状态。

例如事件1是打印机资源来了,而队列1表示在等待打印机资源的进程,那么就可以放一些出来到就绪队列中去。

线程

MP3播放软件,三个核心功能:

  • 读数据
  • 解压
  • 播放

单进程实现为

问题:要从IO读半天,才可以开始解压,再播放完才可以继续读下一个东西。各个功能之间不能并发的去进行。

改进为多进程实现:

问题:通信如何进行?进程创建、切换等等操作都要消耗大量资源。

这就引出了线程的概念,可以解决这些问题:可并发,可共享地址空间实现通信。

我们把进程分为两部分,一是由进程掌控的资源,二是由进程的一条执行流程,我们在这里称之为线程。线程有自己的控制块,称之为TCB。

资源分配

优点:线程可以并发执行、各个线程之间可以共享地址空间和文件等资源。
缺点:一人崩溃,全家完蛋。
在资源分配方面,线程也可以有自己独立的资源,如寄存器和栈。

与进程的比较:

  • 创建、终止的时间更短,因为不必要向os申请内存等资源,这些内容由进程管理。
  • 切换时间更短,共享地址空间,不需要切换页表什么的。
  • 由于各线程共享内存资源、文件资源,可以不通过内核进行通信。

线程的实现

用户线程

线程由线程管理库来实现,操作系统不直接参与线程管理,也感知不到线程的存在,只看得到线程所属的进程的存在。
缺点:

  • 一个线程发出系统调用而阻塞,那么整个进程都进入阻塞。
  • 除非线程主动交出cpu使用权,否则它所在的进程中的其他线程将无法运行。因为其他线程无打断其他线程执行的特权。与之相对比的是,操作系统有打断线程执行的权力,例如采用时钟中断的方法。
  • 由于时间片是分给进程的,进程又要再分给线程,每个线程得到的时间片就很少,执行较慢。

内核线程

操作系统可以看得见的线程称之为内核线程。

  • 内核线程是在操作系统内核中实现的线程机制,由操作系统内核来完成线程的创建、终止和管理。
  • 由于都由内核来执行,所以系统开销较大。
  • 若某个内核线程被阻塞,并不会影响其他内核线程的运行。

轻量级线程

上下文切换

停止当前运行进程,并且调度其他进程,要求:

  • 必须在切换之前存储许多部分的进程上下文,如栈指针,PC,CPU寄存器等。
  • 必须能够在之后恢复
  • 必须快速

一般通过PCB实现保存信息,同时这部分功能通常使用硬件实现。

推荐阅读