倒挂的解决方案你现在是一位计算机专家,来聊一聊:“美国的火星探测器Mars Path-finder 就是因为优先级倒挂而出现故障的故事”

文章讲述了NASA的火星探测器MarsPathfinder因优先级倒挂遇到的故障,该故障导致任务延误和数据传输中断。通过使用中断禁止作为防止优先级倒挂的一种策略,系统可以在临界区避免优先级反转,但这种方法对程序员要求高且不适用于多CPU环境。文章强调了在设计复杂系统时考虑任务优先级和资源管理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

倒挂的解决方案

你现在是一位计算机专家,来聊一聊:“美国的火星探测器Mars Path-finder 就是因为优先级倒挂而出现故障的故事”

●使用中断禁止


 具体证明请参阅LiuKayland1973年发表的论文。

 

因时序或外部中断或进程挂起而导致操作系统获得 CPU 控制权。
操作系统在所有就绪的进程中按照某种算法遴选进程。
如果选中的是非当前进程,则操作系统将当前进程(中断或挂起的进程)状态予以保护。
将选中的进程的环境布置好(设置寄存器、栈指针、状态字等)。
跳转到选中的进程

倒挂的解决方案

优先级倒挂的问题在 20 世纪 70 年代就已经发现,但却没有找到一个可以预测其发生的方法。这是因为在实际 运行中很难判断哪些进程之间会进行资源竞争,哪些进程又会从别人的资源竞争中渔翁得利。不过,虽然我 们不能预测其发生,但却可以采取手段防止其出现。由于优先级倒挂必须满足某些条件,因此我们只需将这 些条件排除即可防止优先级倒挂。
那么如何防止优先级倒挂呢?首先我们应该看到,优先级倒挂有两种形式:
不持有资源的低优先级进程阻碍需要资源的高优先级进程的执行。
持有资源的低优先级进程阻碍需要资源的高优先级进程的执行。

你现在是一位计算机专家,来聊一聊:“美国的火星探测器Mars Path-finder 就是因为优先级倒挂而出现故障的故事”

美国的火星探测器Mars Pathfinder是NASA于1997年成功发射的一项太空任务,旨在研究火星的地质特征、气候和大气条件。该任务的主要目标是通过着陆器和一辆名为Sojourner的火星漫游车来获取火星表面的图像和数据。

在Mars Pathfinder任务中,的确出现了一个与优先级倒挂相关的故障。这个问题源于任务中的软件设计。在探测器的软件中,任务控制代码使用了优先级反转(priority inversion)的方式来管理任务的执行顺序。

优先级反转是指当一个高优先级任务被一个低优先级任务占用所需的共享资源时,导致低优先级任务阻塞高优先级任务的现象。在Mars Pathfinder任务中,由于设计缺陷,当Sojourner火星漫游车需要访问共享资源时,它的任务优先级会被提高,从而导致其他高优先级任务被阻塞。

具体而言,在火星探测任务中,Sojourner火星漫游车需要与探测器上的无线电设备进行通信。由于设计上的错误,当无线电设备正在被其他高优先级任务使用时,Sojourner任务的优先级会被提高,以确保通信任务能够尽快完成。然而,这种优先级反转的机制却导致了其他高优先级任务被阻塞,影响了任务的正常执行。

这一故障的出现对Mars Pathfinder任务造成了一些延误和数据传输中断的问题。不过,NASA的工程师们很快意识到了问题,并通过重新设置优先级和优化软件设计来解决了这个问题。他们对任务的软件进行了修改,确保了高优先级任务能够在必要时获得优先执行,并且成功地恢复了任务的正常运行。

这个故事提醒了我们在设计和开发复杂系统时,需要仔细考虑任务的优先级和资源管理,避免出现优先级倒挂等问题。尤其在航天探测等对可靠性和安全性要求较高的领域,合理的软件设计和优先级管理至关重要。通过总结故障经验和进行改进,可以提高系统的鲁棒性和可靠性,确保任务的顺利执行。

使用中断禁止

这种办法的核心是通过禁止中断来保护临界区。在采用此种策略的系统中只有两个优先级:可抢占优先级和 中断禁止优先级。前者为一般进程运行时的优先级,后者为运行于临界区进程的优先级。由于不存在第3 种 优先级,因此第1 种优先级倒挂无法发生。由于系统里只存在一把锁(禁止中断操作在任何时候只能由一个 进程执行),不能发生乱序,因此也不会发生死锁。又由于进入临界区的进程总是能够不被打断而一直运行 到结束,因此也不会发生悬挂(hang)。此时,即使高优先级进程采用繁忙等待也不会发生死锁。
这里需要注意的是,所有中断都必须禁止。如果禁止的仅仅是一个特定的硬件设备的中断,则硬件的中断优 先处理机制将再次引入优先级倒挂。
该方法普遍应用于简单的嵌入式系统。这种系统的特点是可靠性、简易性和资源需求低。不过这种方法对程 序员的要求较高,因此在程序设计时需要将临界区设计得很短(中断禁止时间过长会造成系统响应时间增加而导致错误或灾难),通常应该在100 微秒以下。而这个时间对于通用计算机来说很不现实。
在多 CPU 环境下,由于不能使用中断禁止,因此使用一个简单的变种:单一共享标志锁。该方法在共享内存 里面提供一个单一标志。所有CPU 在进入跨 CPU 临界区时都必须先获得该标志。这个标志在有的操作系统里 面称为旋锁。本书将在第七篇对旋锁进行讨论。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值