问题标签 [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.

0 投票
1 回答
119 浏览

linux-kernel - Linux - 抢占的原因

我想更新内核以在任务之间切换时做更多的事情,为此我需要找到每次切换的原因。

首先,当有比当前任务更高优先级的任务并且需要切换它们时,我找不到调用 schedule() 的函数,它发生在哪里?

其次,任务是否有任何理由让出CPU 而不是退出或等待某事?有没有屈服函数之类的?

谢谢!

0 投票
3 回答
1627 浏览

c# - C# 控制线程(恢复/挂起)

我正在尝试模拟(非常基本和简单的)操作系统进程管理器子系统,我有三个“进程”(工作人员)向控制台写入内容(这是一个示例):

每个工人都应该在不同的线程上运行。我现在就是这样做的:我有一个 Process 类,它的构造函数接受 Action 委托并从中启动一个线程并挂起它

在那种状态下,它会在我的调度程序恢复它之前等待,给它一个运行时间片,然后再次挂起它。

问题是它不能始终如一地工作。它甚至在这种状态下根本不起作用,我必须在工人的 Show() 方法中的 WriteLine 之前添加 Thread.Sleep() ,就像这样。

我一直在尝试使用 ManualResetEvent 而不是挂起/恢复,它可以工作,但是由于该事件是共享的,因此依赖它的所有线程同时唤醒,而我一次只需要一个特定线程处于活动状态。

如果有人可以帮助我弄清楚如何正常暂停/恢复任务/线程,那就太好了。我正在做的是试图模拟简单的抢先式多任务处理。谢谢。

0 投票
1 回答
356 浏览

operating-system - 抢占式内核设计

我一直认为内核是不可抢占的。也就是说,内核代码运行完成,只有在返回用户空间时才会进行调度。我现在对设计可抢占内核时需要进行的更改感到好奇。

到目前为止我的思考过程:

  • 假设内核正在代表某个用户空间进程运行并且突然被抢占。我们将当前处理器信息存储在进程的内核堆栈中。然后我们将该进程标记为可运行。当该进程被调度时,我们获取的信息不会将我们带回用户空间,而是让我们继续运行内核任务(例如系统调用)。

  • 然而,有时内核不在进程上下文中运行。我们需要以某种方式使内核在这些点上不可抢占。能够停止调度程序的运行听起来很疯狂。

  • 我闻到了锁定的问题:假设我们正在运行一个获取某个锁定 A 的系统调用。如果它被抢占,如果调度程序之类的东西需要 A,我们可能会遇到问题。

我想知道我的推理是否有任何错误,或者我是否没有考虑一些关键问题。

谢谢你

0 投票
1 回答
314 浏览

matlab - Matlab定时器的回调

下面的程序包含一个timer对象定义,后跟它的启动命令。然后程序继续执行其他语句。

我的问题是是否TimerFcn会在0.01sec 之后准确调用,还是会等到 for 循环完成以触发计时器回调函数?

0 投票
1 回答
260 浏览

multithreading - 关于非抢占线程的查询

我正在阅读有关非抢占线程的信息,并找到了普林斯顿大学的一张幻灯片,它显示了下图:(来源链接:http://www.cs.princeton.edu/courses/archive/fall11/cos318/lectures/L5_ThreadsImplementation。 .pdf )

在此处输入图像描述

据我了解,要执行的线程首先放入就绪队列。当它从队列中弹出时,它处于运行状态。如果它想调用另一个线程,它会调用yield函数,该函数将存储线程的当前状态并将其插入队列的尾部。队列前面的线程将被执行。

如果线程被阻塞(即它正在等待某些资源)会发生什么?我认为在非抢占线程中它会等待资源然后继续执行。

但是从下图中它看起来好像进入了阻塞状态,然后被放入了就绪队列?这是为什么?

0 投票
1 回答
912 浏览

algorithm - 如何计算非抢占式调度中的平均周转时间?

附加信息:时间表是非先发制人的。

问题:使用最短作业优先 (SJB) 调度算法的这些进程的平均周转时间 (ATT) 是多少?

我在想什么:P3,P2,P1 但由于它是非先发制人的并且 P1 到达 0.0 它是 P1,P2,P3

我这样做对吗?

0 投票
1 回答
765 浏览

kernel - 为什么 spin_lock_irqsave 需要在多处理器上禁用抢占

只是好奇为什么spin_lock_irqsave在禁用本地中断后需要禁用抢占。

只有在启用中断的情况下才能进行抢占,因此无需担心禁用中断后的抢占。

0 投票
2 回答
493 浏览

linux - 调度程序或一些关键的内核线程可以在可抢占的 Linux 内核中被抢占吗?

调度程序或一些关键的内核线程可以在可抢占的 Linux 内核中被抢占吗?在中断处理程序(上半部分或下半部分)中呢?

0 投票
0 回答
184 浏览

algorithm - 周期性任务的非抢占式调度

我尝试确定具有相同优先级的非抢占式周期性任务的可调度性。我发现了一个问题:Non preemptive Earliest dead first scheduling,但是任务不是周期性的。问题是,周期性任务是否可以获得更高的可调度性界限?

0 投票
2 回答
797 浏览

c - 如何保护 RCU 阅读器部分免受抢占?

(来自关于LWN的文章)

RCU 更新操作将执行 synchronize_rcu() 以断言每个 CPU 切换了上下文,因此每个 RCU-reader 都完成了它的工作。但是 RCU 必须依赖于 reader 不被抢占。事实上,LWN 接下来说:

尽管这种简单的方法适用于跨 RCU 读取端临界区禁用抢占的内核,换句话说,对于非 CONFIG_PREEMPT 和 CONFIG_PREEMPT 内核,它不适用于 CONFIG_PREEMPT_RT 实时 (-rt) 内核。

我知道非 CONFIG_PREEMPT 内核禁用了抢占,但为什么CONFIG_PREEMPT内核也可以?