【操作系统】 - 进程管理 - 3

第二章 进程管理


1 前驱图和程序执行

2 进程

3 线程

4 进程间通信

5 经典的IPC问题

6 进程调度


2.1 前驱图和程序执行

在早期未配置操作系统和单道批处理系统中,程序的执行方式是顺序执行,即在内存中仅装入一道用户程序,由它独立占系统中的所有资源,只有在一个用户程序执行完成后,才允许装入另一个程序并执行,可见,这种方式浪费资源,系统运行效率低等缺点。

多道程序系统中,程序并发执行,因此需要描述程序执行先后顺序—前驱图,该图是一个有向无循环图。

程序的顺序执行。

通常,一个应用程序由若干个程序段组成 ,每一个程序段完成特定的功能,它们在执行时,都需要按照某种先后顺序执行,仅当前一程序段执行完后,才能运行后一段程序段。

e.g. 在进行计算时,应先运行输入程序,用于输入用户的程序和数据,然后运行计算程序,对所输入的数据进行计算,最后才是运行打印程序,打印计算结果。我们用节点代表各程序段的操作,其中I 代表输入操作,C: 代表计算操作, P代表打印操作,用箭头指示操作的先后顺序。

顺序执行特征

  1. 顺序性
  2. 封闭性
  3. 可再现性

程序并发执行特征:

  1. 间断性
  2. 失去封闭性
  3. 不可再现性

2.2 进程

为了提高计算机系统中各种资源的利用率,现代操作系统广泛采用多道程序技术,使用多个程序同时在系统中存在并运行。

 

在多道程序系统中,各个程序之间是并发执行的,共享系统资源,CPU需要在各个运行的程序之间来回的进行切换。这样的话,要想描述这些多道的并发活动过程就变得很困难。

2.2.2 什么是进程

A Process = a program in execution

一个进程应该包括

  1. 程序的代码
  2. 程序的数据
  3. CPU寄存器的值,如pc,用来指示下一条将要运行的指令,通用寄存器等。
  4. 堆栈

一组系统资源

如地址空间,打开的文件。总之,进程包含了正在运行的一个程序的所有状态信息。

2.2.3 进程的特征

1)动态性:

程序的运行状态在变,寄存器,堆和栈等。

2)独立性

是一个独立的实体,是计算机系统资源的使用单位。每个进程在一个“虚拟计算机上”运行,每一个进程都有“自己”的pc和内存状态,运行时独立于其他进程(虚拟pc和物理pc)

  1. 并发性:

从宏观上看各进程是同时独立运行的

2.2.4 进程的创建

引起进程创建的四个主要事件

系统初始化时

在一个正在运行的进程当中执行了创建进程的系统调用

用户请求创建一个新进程

初始化一个批处理作业

从技术上来说,只有一种创建进程的方法,即在一个已经存在的进程(用户进程或系统进程)当中,通过系统调用来创建一个新的进程。

 

2.2.5 进程的终止

在以下四种情形下,进程终止。

  1. 正常退出(自愿的)
  2. 错误退出 (自愿的)
  3. 致命错误(强制性的)
  4. 被其他进程所杀(强制性的)

 

进程的三种基本状态

进程在生命结束前处于且仅处于三种基本状态之一,不同系统设置的进程状态数目不同。

  1. 运行状态:进程占有CPU,并在CPU上运行。处于此状态的进程数目小于等于CPU的数目
  2. 就绪状态:进程已经具备运行条件,但由于CPU忙暂时不能运行,只要分得CPU即可执行。
  3. 阻塞状态:指进程因等待某种事件的发生而暂时不能运行的状态,如io操作或进程同步,此时,即使CPU空闲,该进程也不能运行。

 

进程状态转换

运行 –》 阻塞

  • 等待io的结果
  • 等待某一进程提供输入

运行 –》就绪

  • 运行进程用完了时间片
  • 运行进程被中断,因为一高优先级进程处于就绪状态

就绪 –》 运行

  • 调度程序选择一个新的进程运行

阻塞 –》就绪

 

  • 当所等待的事件发生时

 

程序 = 数据结构 + 算法

描述进程的数据结构:进程控制块,系统为每一个进程都维护了一个pcb,用来保护与该进程有关的各种状态信息,系统用pcb来描述进程的基本情况以及运行变化的过程,pcb是进程存在的唯一标志。

进程的创建:为该进程生成一个pcb

进程的终止:回收它的pcb

进程的组织和管理; 通过对pcb的组织管理来实现

2.2.7 状态队列

由操作系统来维护一组队列,用来表示系统当中所有进程的当前状态。

不同的状态分别用不同的队列来表示

(运行队列,就绪队列,各种类型的阻塞队列)

每个进程的pcb都根据它的状态加到相应的队列当中,当一个进程的状态发生变化时,它的pcb从一个状态队列中脱离出来,加入到另一个队列。

2.3 线程

自从60年代提出进程概念以来,在操作系统中一直都是以进程作为独立运行的基本单位,直到80年代中期,人们又提出了更小的能独立运行的基本单位 – 线程。

2.3.2 什么是线程

进程当中的一条执行流程

从两个方面来理解进程

从资源组合的角度,进程把一组相关的资源组合起来,构成了一个资源平台,包括地址空间,打开的文件等各种资源。

从运行的角度,代码在这个资源平台上的一条执行流程。

进程 = 线程 + 资源平台

优点:

一个进程中可以同时存在多个线程,各个线程之间可以并发的执行,各个线程之间可以共享地址空间

线程与进程的比较

  1. 进程是资源分配的单位,线程是cpu调度单位
  2. 进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈
  3. 线程同时具有就绪,阻塞和执行三种基本状态,同样具有状态之间的转换关系
  4. 线程能减少并发执行的时间和空间开销
  • 线程的创建时间比进程短
  • 线程的终止时间比进程短
  • 同一进程内的线程切换时间比进程短
  • 由于同一进程的各线程间共享内存和文件资源,可直接进行不通过内核的通信。
  • 线程 = 轻量级进程

 

线程的实现

主要有两种线程的实现方式:

用户线程:在用户空间实现

内核线程:在内核中实现

用户线程

在用户空间实现的线程机制,它不依赖于操作系统的内核,由一组用户线程的线程库函数来完成线程的管理,包括进程的创建,终止,同步和调度等。

由于用户线程的维护由相应进程来完成(通过线程库函数),不需要操作系统内核了解用户线程的存在,可用于正支持线程技术的多进程操作系统

每个进程都需要它自己私有的线程控制块(tcb)列表,用来跟踪记录他的各个线程的状态信息(pc, 栈指针,寄存器)tcb由线程库函数来维护

一个用户线程的切换也是由线程库函数来完成,无需用户态,核心态切换,所以速度特别快,

允许每个进程拥有自定义的线程调度算法,

用户线程的缺点

  1. 阻塞性的系统调用如何实现?如果一个线程发起系统调用而阻塞,则整个进程在等待,当一个线程开始运行后,除非它主动的CPU的使用权,否则它所在的进程当中的其他线程将无法运行。
  2. 时间片分配给进程,多线程则每个线程就慢

 

内核线程

是指在操作系统的内核当中实现的一种线程机制

由操作系统的内核来完成线程的创建,终止和管理,在支持内核线程的操作系统中,由内核来维护进程和线程的上下文信息

线程的创建,终止和切换都是通过系统调用的方式来进行,需要从用户态转到系统态,由内核来完成,因此,系统开销较大

在一个进程当中,如果某个线程发起系统调用而被阻塞,并不会影响其他线程的运行

时间片分配给进程,多线程的进程获取更多CPU时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值