操作系统(2.4)--进程的描述与控制

简介: 进程同步的主要任务是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。

四、进程同步

进程同步的主要任务是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。


1.基本概念

1.1两种形式的制约关系

在多道程序环境下,对于同处于一个系统中的多个进程,它们之间可能存在着以下两种形式的制约关系:

1)间接相互制约关系

多个程序在并发执行时,由于共享系统资源,如CPU、I/O 设备等,致使在这些并发执行的程序之间形成相互制约的关系。像打印机、磁带机这样的临界资源。


为了保证这些进程能有序地运行,对于系统中的这类资源,必须由系统实施统一分配,即用户在要使用之前,应先提出申请,而不允许用户进程直接使用。

2)直接相互制约关系

进程间的直接制约关系就是源于它们之间的相互合作。


例如,有两个相互合作的进程一输入进程 A和计算进程B,它们之间共享一个缓冲区。进程A通过缓冲向进程B提供数据。进程B从缓冲中取出数据,并对数据进行处理。但如果该缓冲空时,计算进程因不能获得所需数据而被阻塞。一旦进程 A把数据输入缓冲区后便将进程B唤醒;反之,当缓冲区已满时,进程A因不能再向缓冲区投放数据而被阻塞,当进程B将缓冲区数据取走后便可唤醒A。


1.2临界资源

限定进程只能互斥地访问的资源叫临界资源(指一次仅允许一个进程使用的资源)。


1.3临界区

人们把在每个进程中访问临界资源的那段代码称为临界区。显然,若能保证诸进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问。一个访问临界资源的循环进程描述如下:


一定有四个区,顺序不变。


repeat
entry section//进入区
critical section;//临界区
exit section//退出区
remainder section;//剩余区
until false;

1.4同步机制应遵循的规则

所有同步机制都应遵循下述四条准则:


(1)空闲让进。当无进程处于临界区时,表明临界资源处于空闲状态,应允许一一个请求进入临界区的进程立即进入自己的临界区,以有效地利用临界资源。

(2)忙则等待。当已有进程进入临界区时,表明临界资源正在被访问,因而其它试图进入临界区的进程必须等待,以保证对临界资源的互斥访问。

(3)有限等待。对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态。

(4)让权等待。当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态。

2.硬件同步机制

2.1关中断

关中断是实现互斥的最简单的方法之一。


进程在临界区执行期间,计算机系统不响应中断,从而不会引发调度,也就不会发生进程或线程切换。由此,保证了对锁的测试和关锁操作的连续性和完整性,有效地保证了互斥。


关中断的方法存在许多缺点:


①滥用关中断权力可能导致严重后果;


②关中断时间过长,会影响系统效率,限制了处理器交叉执行程序的能力


③关中断方法也不适用于多CPU系统,因为在一个 处理器上关中断并不能防止进程在其它处理器上执行相同的临界段代码。


2.2利用Test-and-Set指令实现互斥

借助一条硬件指令———“测试并建立”


int TS(int *flag) // flag表示锁
{                 // flag=0为打开;为1为锁定
int temp;
temp=*flag;
*flag=1;//将锁锁定
return temp;//将锁的值作为函数值
};//函数值即为锁的当前状态值
while TS(lock) skip;//设锁是lock,
临界区;
lock=0;

2.3利用交换指令swap实现互斥

对换指令,在Intel 80x86中又被称为XCHG指令,用于交换两个字的内容。


wait(S){
while (S<=0);
S--;
signal(S)
S++;

3.信号量机制

3.1整型信号量

整型信号量定义为一一个用于表示资源数目的整型量S,它与一般整型量不同,除初始化外,仅能通过两个标准的原子操作wait(S)和signal(S)来访问。这两个操作一直被分别称为P、V操作。

wait(S){
while (S<=0);
S--;
signal(S)
S++;


3.2记录型信号量

记录型信号量机制是一种不存在“忙等”现象的进程同步机制。采取了“让权等待”的策略后出现多个进程等待访问同一临界资源的情况。


在信号量机制中,引入两个数据结构:


整型变量value:用于表示资源数目;进程链表指针list:用于链接所有等待进程。


typedef struct {
int value; 
struct process_control_block *list;
}semaphore;
相应地,wait(S)和 signal(S)操作可描述如下:
wait(semaphore *S) {
S->value--;
if (S->value < 0) block(S->list);
}
signal(semaphore *S) {
S->value++;
if (S->value<=0) wakeup(S->list);
}

4.信号量的应用

信号量S值的物理含义:


当S≥0时,表示某类可用资源的数目,或者说表示可以执行P操作而不会被阻塞的进程的数目;当S<0时,其绝对值表示信号量S的阻塞队列中的进程数,即系统中因请求该类资源而被阻塞的进程的数目,亦即被信号灯挡住的进程数目,这些进程需要别的进程发出相应的信号灯来唤醒。另外,S的值只能由P、V操作来改变。


用P、V操作原语实现进程的互斥

(1)分析清楚题目涉及的临界资源,临界区。

(2)设置信号量(包括信号量的个数和初值及其物理含义),有几个临界资源设置几个互斥信号量,互斥信号量的初值为1。

(3)给出进程相应程序的算法描述或流程控制,并把P、V操作加到临界区上下位置。


用P、V操作原语实现进程的同步

(1)分析清楚题目涉及的进程间的制约关系。

(2)设置信号量(包括信号量的个数和初值及其物理含义),合作进程间需要收发几条消息相应就设置几个信号量。同步信号量的初值一般为0,表示得到合作进程的消息后才能向前推进。

(3)给出进程相应程序的算法描述或流程控制,并把P、V操作加到程序的适当处。

目录
相关文章
|
16天前
|
算法 调度 UED
深入理解操作系统:进程调度与优先级队列
【10月更文挑战第31天】在计算机科学的广阔天地中,操作系统扮演着枢纽的角色,它不仅管理着硬件资源,还为应用程序提供了运行的环境。本文将深入浅出地探讨操作系统的核心概念之一——进程调度,以及如何通过优先级队列来优化资源分配。我们将从基础理论出发,逐步过渡到实际应用,最终以代码示例巩固知识点,旨在为读者揭开操作系统高效管理的神秘面纱。
|
9天前
|
消息中间件 安全 算法
深入理解操作系统:进程管理的艺术
【10月更文挑战第38天】在数字世界的心脏,操作系统扮演着至关重要的角色。它不仅是硬件与软件的桥梁,更是维持计算机运行秩序的守夜人。本文将带你走进操作系统的核心——进程管理,探索它是如何协调和优化资源的使用,确保系统的稳定与高效。我们将从进程的基本概念出发,逐步深入到进程调度、同步与通信,最后探讨进程安全的重要性。通过这篇文章,你将获得对操作系统进程管理的全新认识,为你的计算机科学之旅增添一份深刻的理解。
|
13天前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第34天】本文旨在探讨操作系统中至关重要的一环——进程管理及其调度策略。我们将从基础概念入手,逐步揭示进程的生命周期、状态转换以及调度算法的核心原理。文章将通过浅显易懂的语言和具体实例,引导读者理解操作系统如何高效地管理和调度进程,保证系统资源的合理分配和利用。无论你是初学者还是有一定经验的开发者,这篇文章都能为你提供新的视角和深入的理解。
34 3
|
15天前
|
Linux 调度 C语言
深入理解操作系统:进程和线程的管理
【10月更文挑战第32天】本文旨在通过浅显易懂的语言和实际代码示例,带领读者探索操作系统中进程与线程的奥秘。我们将从基础知识出发,逐步深入到它们在操作系统中的实现和管理机制,最终通过实践加深对这一核心概念的理解。无论你是编程新手还是希望复习相关知识的资深开发者,这篇文章都将为你提供有价值的见解。
|
16天前
|
算法 调度 UED
深入理解操作系统的进程调度机制
本文旨在探讨操作系统中至关重要的组成部分之一——进程调度机制。通过详细解析进程调度的概念、目的、类型以及实现方式,本文为读者提供了一个全面了解操作系统如何高效管理进程资源的视角。此外,文章还简要介绍了几种常见的进程调度算法,并分析了它们的优缺点,旨在帮助读者更好地理解操作系统内部的复杂性及其对系统性能的影响。
|
17天前
深入理解操作系统:进程与线程的管理
【10月更文挑战第30天】操作系统是计算机系统的核心,它负责管理计算机硬件资源,为应用程序提供基础服务。本文将深入探讨操作系统中进程和线程的概念、区别以及它们在资源管理中的作用。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程和线程的管理技巧。
34 2
|
17天前
|
消息中间件 算法 Linux
深入理解操作系统之进程管理
【10月更文挑战第30天】在数字时代的浪潮中,操作系统作为计算机系统的核心,扮演着至关重要的角色。本文将深入浅出地探讨操作系统中的进程管理机制,从进程的概念入手,逐步解析进程的创建、调度、同步与通信等关键过程,并通过实际代码示例,揭示这些理论在Linux系统中的应用。文章旨在为读者提供一扇窥探操作系统深层工作机制的窗口,同时激发对计算科学深层次理解的兴趣和思考。
|
18天前
|
消息中间件 算法 调度
深入理解操作系统:进程管理与调度策略
【10月更文挑战第29天】本文将带领读者深入探讨操作系统中的核心组件之一——进程,并分析进程管理的重要性。我们将从进程的生命周期入手,逐步揭示进程状态转换、进程调度算法以及优先级调度等关键概念。通过理论讲解与代码演示相结合的方式,本文旨在为读者提供对进程调度机制的全面理解,从而帮助读者更好地掌握操作系统的精髓。
31 1
|
14天前
|
消息中间件 算法 调度
深入理解操作系统:进程管理的艺术
【10月更文挑战第33天】本文旨在揭示操作系统中进程管理的神秘面纱,带领读者从理论到实践,探索进程调度、同步以及通信的精妙之处。通过深入浅出的解释和直观的代码示例,我们将一起踏上这场技术之旅,解锁进程管理的秘密。
21 0
|
16天前
|
算法 Linux 调度
深入理解操作系统之进程调度
【10月更文挑战第31天】在操作系统的心脏跳动中,进程调度扮演着关键角色。本文将深入浅出地探讨进程调度的机制和策略,通过比喻和实例让读者轻松理解这一复杂主题。我们将一起探索不同类型的调度算法,并了解它们如何影响系统性能和用户体验。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇理解操作系统深层工作机制的大门。
25 0
下一篇
无影云桌面