进程与线程

一、进程的定义及特征

 

定义:

多道程序设计技术的引入,实现了资源的共享和程序的并发执行。为了描述并发执行的特点,引入了进程的概念。进程是可高并发执行的程序在一个数据集合上运行的过程,具有动态性并发行独立性异步性、和结构特征。进程管理包括进程控制进程同步进程通信进程调度。 同一数据的不同操作之间、不同数据的同一操作之间存在着前趋关系。但不同数据的不同操作之间可考虑并发执行

特征:

  • 动态性——是进程最基本的特性。进程有一定的生命期,由创建而产生,由调度而执行,因得不到资源而暂停执行,由撤消而消亡。而程序是一组有序指令的集合,是静态实体。

  • 并发性——多个进程在一段时间间隔内同时运行。

  • 独立性——进程实体是一个能独立运行的基本单位,也是系统中独立获得资源和独立调度的基本单位

  • 异步性——进程按各自独立的、不可预知的速度向前推进。

  • 结构特征——进程实体由程序段数据段进程控制块PCB组成。

进程控制块:   进程控制块是进程实体的一部分,它记录了操作系统所需的、用于描述进程情况及控制进程运行所需的所有信息。   进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能和其他进程并发执行的进程。   PCB是进程存在的唯一标志。创建新进程时建立一个PCB,结束进程时回收PCB。   PCB经常被系统访问,应该常驻内存PCB的内容:   进程标识符信息——外部标识符、内部标识符(唯一整数)。   处理机状态信息   进程调度信息——进程的状态、优先级等。   进程控制信息——程序和数据地址、同步机制、资源清单等。 PCB的组织方式:   链表方式——相同状态的PCB,链接成一个队列。   索引方式——建立索引表

 

二、进程的控制

1. 操作系统的内核

本质

  • 内核是计算机硬件的第一层扩充软件,由与硬件紧密相关的模块以及运行频率较高的模块组成,常驻内存,以提高OS的运行效率

支撑功能

  • 中断处理:是内核中最基本的功能,它是整个操作系统赖以活动的基础。内核只对中断进行“有限的处理”,然后转由有关进程继续处理。

  • 时钟管理

  • 原语操作:原语本身是由若干条指令构成,用于完成一定功能的一个过程。原语是一个不可分割的原子操作。

资源管理功能

  • 进程管理、存储器管理和设备管理。

 

2. 进程的创建、终止、阻塞和唤醒

进程的创建

  • 进程图——是描述进程家族关系的有向树。有向边表示了进程的创建关系,及父子关系(并不能说明前趋关系),子进程可以继承父进程所拥有的资源,父进程撤销时必须同时撤销所有子进程。

引起创建进程的事件

image

进程的创建——创建原语

  • 申请空白PCB、为进程分配资源、初始化PCB、插入就绪队列

进程的阻塞与唤醒

  • 原因——请求系统服务、启动某种操作、新数据未到达、无新工作
  • 阻塞——当出现上述时间,进程无法继续执行,进程通过阻塞原语block把自己阻塞,是进程自身的一种主动行为。
  • 唤醒——当阻塞事件结束,由发现者进程调用唤醒原语将阻塞进程的唤醒,是一种被动行为。

进程的终止

  • 正常结束、异常结束、外界干预

 

三、进程间的通信

进程通信

  • 共享存储器系统:

    • 基于共享数据结构的通信方式

    • 基于共享存储区的通信方式

  • 消息传递系统:

    • 直接通信方式:进程间直接进行数据交互

    • 间接通信方式:进程间通过实体进行数据交互

  • 管道通信:

    • 共享文件的通信方式

竞争条件

  • 两个或多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序,称为竞争条件。

三个需要处理的问题

image

如何避免竞争条件

image

 

临界区避免竞争条件

对共享资源进行访问的程序片段称作临界区域(critical region)或临界区(critical section)

image

 

实现互斥访问(三种)

  • 睡眠和唤醒实现互斥

  • 信号量实现互斥

  • 忙等待的互斥:(五种)

    • 屏蔽中断(Disabling interrupts):每个进程在刚刚进入临界区后立即屏蔽所有中断(包括时钟中断),并在离开前再打开所有中断。

    image

    • 锁变量(Lock variables):违反了条件1

    image

    • 严格轮换法(Strict alternation):违反了条件3

    image

    • P解法(Peterson’s solution):

    image

    • TSL指令

    image

忙等待的互斥的缺点:

  • 忙等待,浪费CPU

  • 优先级反转问题:H进程优先级高占用着CPU,L进程优先级低且处于临界区中,因获取不到CPU无法从临界区出来。

 

四、生产者与消费者的问题

 

题目需求:

image

 

睡眠和唤醒进行互斥的实现:

image

 

存在严重的竞争条件:

image

 

信号量的定义:

image

 

使用信号量进行互斥的实现:(解决丢失的wakeup() )

image