进程和线程的一些基本概念

以下出自 《操作系统(第3版)》,孟庆昌等编著,中国工信出版集团,电子工业出版社 出版, 第2章 进程和线程

进程(Process):广义上定义为,一个具有独立功能的程序关于某个数据集合的一次运行活动;简单来说,进程就是程序在并发环境中的执行过程。
进程控制块(PCB):进程的活动是通过在CPU上执行一系列程序和对相应数据进行操作来体现的,因此,程序和数据是组成进程的实体。但这二者仅是静态的文本,没有反映其动态特性。为此,还需要有一个数据结构描述进程当前的状态、本身的特性、对 资源的占用及调度信息等。这种数据结构称为进程控制块(PCB)。
进程映像:通常包括程序、数据集合、栈和PCB四部分。
进程控制块(PCB)有时也称进程描述块(Process Descriptor),它是进程组成中最关键的部分,其中含有进程的描述信息和控制信息,是进程动态特性的集中反映,是系统对进程施行识别和控制的依据。
每个进程有唯一的进程控制块。
PCB是进程存在的唯一标志。
进程图(Process Graph):描述进程族系关系的有向图。
传统进程概念中,进程体现了两个属性:资源分配的单位和调度运行的单位。在很多现代操作系统中把上述两个属性分别赋予不同的实体:进程只作为资源拥有者,而调度和运行的属性赋予新的实体——线程。
线程(Thread):是进程中实施调度和分派的基本单位。
如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。
线程可在处理器上独立调度执行。这样,在多处理器环境下就允许几个线程各自在单独的处理器上进行。操作系统提供线程的目的就是为了方便而有效地实现这种并发性。
线程,有时也称轻载进程(LWP)
每个线程有一个thread结构,即线程控制块,用于保存自己私有的信息,主要包括:一个唯一的线程标识符;调度状态信息(在一组寄存器中);两个栈指针(一个核心栈指针和一个用户栈指针);一个私有存储区。
线程必须在某个进程内执行。它所需的其他资源,如代码段、数据段、打开的文件和信号等,都由它所属的进程拥有,即:操作系统分配这些资源时以进程为单位。

线程和进程的关系
1 一个进程可以有多个线程,但至少要有一个线程;并且,一个线程只能在一个进程的地址空间内活动。
2 资源分配给进程,同一进程的所有线程共享该进程的所有资源。
3 处理机分配给线程,即真正在处理机上运行的是线程。
4 线程在执行过程中需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

进程间的相互关系主要分成三种形式:互斥、同步、通信。
同步:逻辑上相关的两个或多个进程为完成一项任务,通过协调活动来使用统一资源,而产生的执行时序的约束关系,称作同步。
互斥:逻辑上相互无关的两个或多个进程由于争用同一资源而发生的相互制约关系称作互斥。
一次仅允许一个进程使用的共享资源(类)称为临界资源(Critical Resource)
在每个进程中访问临界资源的那段程序叫做临界区(Critical Section),简称CS区
任何时候,处于临界区内的进程不可多于一个。

为了解决进程互斥进入临界区的问题,从实现机制方面,分为硬件方法与软件方法。
硬件方法:禁止中断、专用机器指令等。
软件方法:置锁变量方法、信息量方法等。
原语(Primitive) 是机器指令的延伸,往往是为完成某些特定的功能而编制的一段系统程序,它在执行时不可分割、不可中断。
原语操作也称作原子操作(Atomic Action),即一个操作中的所有动作要么全做,要么全不做。

置锁变量方法
为解决进程互斥进入临界区的问题,可为每类临界区设置一把锁,该锁有打开和关闭两种状态,进程执行临界区程序的操作按下列步骤进行:
1 关锁。先检查锁的状态,若为关闭状态,则等待其打开;如果已经打开,则将其关闭,继续执行2的操作。
2 执行临界区程序。
3 开锁。将锁打开,退出临界区。
这种方法有较大的局限性,效果很不理想,容易造成处理机的“忙等”。

信号量(Semaphore)方法
是一种解决进程同步、互斥问题的通用的工具,这是一种有实用价值的软件方法。
信号量S
P操作(有些书称作wait或者DOWN操作)表示测试。P操作意味着请求系统分配一个单位资源。
V操作(有些书称作signal或者UP操作)表示增加。V操作意味着释放一个单位资源。
P、V操作都是原语。
信号量方法:整型信号量、结构型信号量、二值信号量。这里的数据类型指的都是S的数据类型,S取不同数据类型,对应了不同的方法。
其中,整型信号量方法仍存在忙式等待问题:当一个进程处于临界区时,其他试图进入临界区的进程必须在入口处持续进行测试。很显然,这种循环测试、等待进入的方式在单CPU多道程序系统中存在很大问题,因为忙式等待要消耗CPU的时间,即使其他进程想用CPU做有效工作,也无法实现。这种类型的信号量也称转锁(Spinlock),因为当进程等待该锁打开时要“原地转圈”。然而,在多处理器系统中转锁仍得到应用。
结构型信号量(又称计数信号量)一般是由两个成员组成的数据结构。其中一个成员是整型变量,表示该信号量的值;另一个是指向PCB的指针。当多个进程都等待同一个信号量时,它们就排成一个队列,由信号量的指针项指示该队列的队首,而PCB队列是通过PCB自身所包含的指针项进行链接的.最后一个PCB(即队尾)的链接指针为0。
信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数,即在该信号量队列上排队的PCB的个数。

很多经典进程同步问题,如生产者-消费者问题、读者-写者问题、哲学家进餐问题和理发师问题等都是进程同步和互斥的一般化形式,同样可用信号量来解决。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值