问题标签 [preemption]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 检查 Linux 中代码的两点之间是否发生了抢占
我有一个在 Linux 内核之上运行的应用程序(一个简单的 C 代码)。我正在测量代码两点之间的时间。我想知道是否有任何其他进程或调度程序本身在这两点之间抢占了我的应用程序。有没有办法找到这个。
linux - 在 Google 可抢占实例上被抢占时如何保存状态?
当基于 Centos 的 Google Compute 实例第一次收到抢占信号时,我需要能够保存它的状态。该文档非常清楚地表明“ACPI G2 Soft Off”信号在抢占式关机前 30 秒发送。不幸的是,谷歌没有给出示例来演示如何捕获此信号,我还没有找到捕获它的方法。
我最初的尝试都集中在使用 acpid 守护进程的 ACPI 接口上。使用它,我已经能够毫无问题地捕获关机(按钮/电源)事件。但是无论我尝试捕获什么事件(按钮、电源、睡眠),我都无法捕获到 G2 状态的状态转换,我认为这就是我正在寻找的。
有没有人成功地在 Centos(或任何 Linux)环境中捕获抢占信号?
c - 为什么“barrier()”足以禁用或启用抢占?
从 Linux 内核代码中,我可以看到preempt_enable()andpreempt_disable()只是barrier():
我无法理解。为什么只 abarrier()就足以禁用或启用抢占?
linux-kernel - 通过定时器中断抢占进程
有两个进程(PA 和 PB)在同一个 CPU 内核上运行。进程 B 是多线程的。我希望进程 A 在每 2 微秒后被进程 B 的线程抢占。
是否可以在固定的时间间隔(以微秒为单位)后编写定时器中断(或其他任何东西)来抢占进程 A?
linux - 使用 perf 找出进程何时以及为何进入不间断睡眠
我正在玩 perf 来了解如何找出进程进入“D”(不间断睡眠)状态的原因。
我正在使用 perf 命令:
我的进程的pid在哪里4710调用meetmaker。
然后我正在查看perf script输出
据我了解这个 perf 输出,它jbd是处于 D 状态的内核线程,它抢占了我的meetmaker进程。不是那个meetmaker进程进入了D状态吧?
所以这不是我要找的。尽管我-p为 perf 提供了论据,但它给了我另一个我不感兴趣的过程。
我对吗?
这是找出任何特定进程何时以及为何进入“D”状态的最佳方法吗?
operating-system - “进程抢占”的确切定义是什么?
维基百科说:
在计算中,抢占是暂时中断正在由计算机系统执行的任务的行为,不需要它的合作,并打算在以后恢复任务。
其他消息来源说:
[...] 抢占意味着强行从一个进程中取出处理器并将其分配给另一个进程。[操作系统 (Self Edition 1.1),Sibsankar Haldar ]
当程序执行期间出现中断并且调度程序选择其他一些程序执行时,就会发生程序抢占。[操作系统:基于概念的方法,2E,DM Dhamdhere ]
所以,我的理解是,如果进程被中断(通过硬件中断,即 I/O 中断或定时器中断)并且调度程序在处理中断后调用,选择另一个进程运行(根据CPU 调度算法)。如果调度程序选择了被中断的进程,我们就没有进程抢占(中断不一定会导致抢占)。
但我发现许多其他来源以下列方式定义抢占:
抢占是从程序中强制释放 CPU。[操作系统:基于概念的方法,2E,DM Dhamdhere ]
您可以看到同一本书报告了两种不同的抢占定义。在后者中没有提到必须将 CPU 分配给另一个进程。根据这个定义,抢占只是“中断”的另一个名称。当出现硬件中断时,进程被中断(它从“运行”状态切换到“就绪”状态)或被抢占。
所以我的问题是:这两个定义中哪一个是正确的?我很困惑。
operating-system - 什么是多速率非抢占式操作系统?
我有这个与嵌入式系统有关的问题,我在调度程序的源文件中找到了这个表达式:
根据我的研究等,我对调度程序、非抢占式系统 RTOS 等有所了解……但我没有找到组合的表达方式。
我能理解的是,调度程序是负责将进程/线程添加到运行队列的实体。非抢占意味着一个任务在开始运行时不能被另一个任务停止,直到它完成,多速率意味着调度程序将像 while(1) 循环一样继续运行任务。
任何帮助将不胜感激,谢谢
注意:SO 上尚不存在多速率标签,因此未提及:p
linux-kernel - 如果 copy_to_user 处于 RW 锁定状态会怎样?
我在读写锁中实现了 copy_to_user() 。我的问题是,如果在执行 copy_to_user 时出现页面错误,即使没有释放锁,它也会得到服务吗?如果没有,我怎样才能做到这一点?任何想法都会非常感激。
谢谢!
fpga - fpga中的非易失性存储器
我正在做一个关于 fpga 硬件抢占的项目。我有两个独立的任务。最初,比如说,任务 1 正在运行,而任务 2 没有。现在,当我抢占任务 1 时,它应该停止并且它的上下文应该存储在一个内存单元中并且任务 2 应该开始。当我抢占任务 2 时,它应该停止并且它的上下文应该保存在内存中。同时,任务 1 的上下文应该被恢复,任务 1 应该从抢占状态重新启动。我使用 FIFO 模块完成了它,该模块包含在我有两个任务的比特流文件中。在基于 artix 7 的 basys3 板上是否有任何非易失性存储器可用于存储/恢复任务的上下文,以便即使在板上下载另一个比特流文件后,上下文也会永久存储在其上?如果有的话,那么我如何在我的程序中使用它呢?我正在使用 Xilinx vivad 2015.4 版本来配置基于 Artix 7 的 Basys3 板。
process - 在优先级倒置中,为什么高优先级进程不能抢占中优先级进程?
Silberschatz/Galvin(第 9 版)的《操作系统原理》一书以及 Wikipedia 上关于优先级反转的文章都说,在优先级反转中,高优先级进程不能使用低优先级进程持有的资源作为中等优先级进程抢占低优先级进程并获取该资源。但如果是这样(即,如果允许基于优先级的抢占),为什么高优先级进程不能抢占低优先级进程本身并获取资源?
以下是书中以及维基百科文章中提到的内容:
考虑两个任务 H 和 L,分别具有高和低优先级,其中任何一个都可以获得共享资源 R 的独占使用权。如果 H 在 L 获得 R 之后尝试获得 R,则 H 将被阻塞,直到 L 放弃资源。在一个设计良好的系统中共享一个独占使用的资源(在这种情况下为 R)通常涉及 L 迅速放弃 R,以便 H(更高优先级的任务)不会在过多的时间段内保持阻塞。然而,尽管设计良好,但有可能第三个中等优先级的任务 M (p(L) < p(M) < p(H),其中 p(x) 表示任务 (x) 的优先级)在L 对 R 的使用。此时,优先级高于 L 的 M 抢占 L,导致 L 无法及时放弃 R,进而导致 H(最高优先级的进程)无法运行。