uniaccess进程无法结束 拒绝访问_嵌入式Linux编程——程序员小白不懂的进程、信号量、并发、互斥...

所有学嵌入式Linux系统的看过来了,以下内容是每一位想学习Linux嵌入式系统想要了解的内容,真的很想要分享给大家!

本文分享的内容主要如下几个方面:

3.1 并发的原理

3.1.1 一个简单的例子

3.1.2 竞争条件

3.1.3 操作系统关注的问题

3.1.4 进程的交互

3.1.5 互斥的要求

3.2 信号量原理

3.2.1 互斥

3.3 生产者/消费者问题

3.4 读者-写者问题

3.3.1 读进程具有优先权

3.3.2 写进程具有优先权

本章首先介绍并发的概念和多个并发进程的执行。我们发现,支持并发进程的基本需求是加强互斥的能力。也就是说,当一个进程被授予互斥的能力时,那么在其活动期间,它具有排斥所有其他进程的能。

本章通过两个经典的并发问题来说明并发的概念,并对本书中使用的各种方法进行比较。在本章开始

将介绍一个可运行的例子——生产者/消费者问题,读者-写者问题。

79c4a7ab334f1dbb5d518dea8c54fae1.png

3.1 并发的原理

在单处理器多道程序设计系统中,进程被交替执行,表现出一种并发执行的外部特征。即使不能实现真正的并行处理,并且即使在进程间来回切换需要一定的开销,交替执行在处理效率和程序构造上还是带来了重要的好处。

在单处理器的情况下,问题源于多道程序设计系统的一个基本特性:进程的相对执行速度不可预测,

它取决于其他进程的活动、操作系统处理中断的方式以及操作系统的调度策略。这就带来了下列困难:

 全局资源的共享充满了危险。例如,如果两个进程都使用同一个全局变量,并且都对该变量执行读

写操作,那么不同的读写执行顺序是非常关键的。关于这个问题的例子将在下一小节中给出。

 操作系统很难对分配资源进行最优化的管理。例如,进程 A 可能请求使用一个特定的 I/O 通道,并

获得控制权,但它在使用这个通道前被挂起了,操作系统仍然锁定这个通道,以防止其他进程使用,

这是难以令人满意的。此外,这还会导致死锁。

 定位程序设计错误是非常困难的。这是因为结果通常是不确定的和不可再现的。

上述所有困难在多处理器系统中都有具体的表现,因为在这样的系统中进程执行的相对速度也是不可

预测的。一个多处理器系统还必须处理多个进程同时执行所引发的问题,从根本上来说,这些问题和单处

理器系统中的是相同的。这些问题随着讨论的深入将逐渐明了。

3.1.1 一个简单的例子

考虑下面的过程:

6135272e1df6da1d9ea4456b274cbbe3.png
c2bdef32b45f145eb4ae409ab76ffd8b.png

为理解如何解决与执行速度无关的问题,我们首先需要考虑进程间的交互方式。

3.1.4 进程的交互

1 、进程中的资源争用

当并发进程竞争使用同一个资源时,它们互相之间会发生冲突。我们可以把这种情况简单描述如下:

两个或更多的进程在它们的执行过程中需要访问一个资源,每个进程并不知道其他进程的存在,并且每个进程也不受其他进程的执行的影响。每个进程都不影响它所使用的资源的状态,这类资源包括 I/O 设备、存储器、处理器时间和时钟。

竞争进程间没有任何信息交换,但是一个进程的执行可能会影响到竞争进程的行为。特别是如果两个进程都期望访问同一个资源,操作系统把这个资源分配给一个进程,另一个就必须等待。因此,被拒绝访

问的进程速度就会变慢。一种极端情况是,被阻塞的进程永远不能访问这个资源,因此一直不能成功地终止。

竞争进程面临三个控制问题。首先是互斥的要求。假设两个或更多的进程需要访问一个不可共享的资

源,如打印机。在执行过程中,每个进程都给该 I/O 设备发命令,接收状态信息,发送数据和接收数据。

我们把这类资源称为临界资源,使用临界资源的那一部分代码称为程序的临界区。一次只允许有一个程序在临界区中,这一点是非常重要的。由于不清楚详细要求,我们不能仅仅依靠操作系统来理解和增强这个限制。例如在打印机的例子中,我们希望任何一个进程在打印整个文件时都拥有打印机的控制权,否则在打印结果中就会穿插着来自竞争资源的打印内容。

实施互斥产生了两个额外的控制问题。一个是 死锁。例如,考虑两个进程 Pl 和 P2,以及两个资源 Rl

和 R2,假设每个进程为执行部分功能都需要访问这两个资源,那么就有可能出现下列情况:操作系统把 Rl分配给 P2,把 R2 分配给 Pl,每个进程都在等待另一个资源,并且在获得其他资源并完成需要这两个资源的功能之前,谁都不会释放自己已经拥有的资源。这样,这两个进程就发生了死锁

另一个控制问题是 饥饿。假设有三个进程(P1、P2 和 P3),每个进程都周期性地访问资源 R。考虑这种情况,Pl 拥有资源,P2 和 P3 都被延迟,等待这个资源。当 Pl 退出临界区时,P2 和 P3 都允许访问 R。假设操作系统把访问权授予 P3,并且在 P3 完成临界区之前 PI 又需要访问该临界区,如果在 P3 结束后操作系统又把访问权授予 Pl,并且接下来把访问权轮流授予 Pl 和 P3,那么即使没有死锁,P2 也可能无限期地被拒绝访问资源。

由于操作系统负责分配资源,竞争的控制不可避免地涉及到操作系统。此外,进程自身需要能够以某

种方式表达互斥的要求,如在使用资源前锁定资源,但任何一种解决方案都涉及到操作系统的某些支持,如提供锁机制。图 3.2 用抽象术语给出了互斥机制。假设有 n 个进程并发执行,每个进程包括(1)在某些资源 Ra 上操作的临界区,(2)不涉及访问资源 Ra 的额外代码。因为所有的进程都需要访问同一资源 Ra,因此保证在同一时刻只有一个进程在临界区是很重要的。为实现互斥,需要两个函数:entercritical 和exitcritical。每个函数的参数都是竞争使用的资源名,如果另外一个进程在临界区中,那么任何试图进入关于同一个资源的临界区的讲程都必须等待。

21d5e2033a95ebd42547c532ca9c8989.png
0dc265802c4617562fbeb611aad83c02.png
267cf18698fe6f6049a58aa224778c5b.png
2c1b9fd36eefcd1299b5f1d3634a6ce3.png
d649654396ad55adc3adfb624532d471.png
06051b04073826ca09b5d9dd8e19dd2a.png
0f62b14e833a242d71dc5f9b86e9995d.png
96e7d17c2a9b59f0819025207a3e3443.png
537c1fa9b2310b94e4931b87566e8fbc.png
6d5349e825e343688aa23df94abb9fab.png
a055d67db881afe4ac350f5f2687b403.png
344284977900bef366581006429ba898.png
e4fceca128d8d74c5ac10b9a6dfe710c.png
c24bdd600ca98947e51308468335750c.png
1dabfbfdb0a49573ca95a2a25bbbbb90.png

本章总结

现代操作系统的中心方案是多道程序设计、多处理和分布式处理,这些方案的基础以及操作系统设计

技术的基础是并发。当多个进程并发执行时,不论是在多处理器系统的情况下,还是在单处理器多道程序系统中,都会产生解决冲突和合作的问题。

并发进程可以按多种方式进行交互。互相之间不知道对方的进程可能需要竞争使用资源,如处理器时

间或对 I/O 设备的访问。进程间由于共享访问一个公共对象,如主存中的一块空间或一个文件,可能间接知道对方,这类交互中产生的重要问题是互斥和死锁。

互斥是指,对一组并发进程,一次只有一个进程能够访问一个给定的资源或执行一个给定的功能。互

斥技术可以用于解决诸如资源争用之类的冲突,还可以用于进程间的同步,使得它们可以合作。后一种情况的一个例子是生产者/消费者模型,一个进程往缓冲区中放数据,另一个或更多的进程从缓冲区中取数据。

支持互斥的第二种方法涉及到使用专门的机器指令,这种方法减少了开销;但由于使用了忙等待,因

而仍然是低效的。

支持互斥的另一种方法是在操作系统中提供功能,其中最常见的两种技术是信号量和消息机制。信号

量用于在进程间发信号,并可以很容易地用于实施一个互斥规定。消息对实施互斥是很有用的,它还为进程间的通信提供了一种有效的方法。

死锁是指一组争用系统资源或互相通信的进程被阻塞的现象。阻塞是永久的,除非操作系统采取某些

非常的行动,如杀死一个或多个进程,或者强迫一个或多个进程沿原路返回。死锁可能涉及到可重用资源或可消费资源。可重用资源是指不会因为使用而被耗尽或毁灭的资源,如 I/O 通道或存储器区域。可消费资源是指当被一个进程获得时就毁灭了的资源,这类资源的例子有消息和 I/O 缓冲区中的信息。

处理死锁通常有三种方法:预防、检测和避免。死锁预防通过确保死锁的一个必要条件不会满足,保

证不会发生死锁。本章没有对检测和避免进行深入讨论。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值