linux - 时间片是同步的还是异步的,为什么?

标签 linux asynchronous operating-system interrupt synchronous

由于计算机计时器指示分配给进程的时间间隔(时间片)终止而发生的中断,它们是同步中断还是异步中断?

最佳答案

时间中断,因为硬件中断被认为是所有硬件中断都是异步的。尽管这可能会导致混淆,但让我解释一下:

同步中断是那些与 cpu 指令时钟同步发生的中断,这意味着它们发生在指令流中的精确时刻。通常,这些同步中断被称为(出于这个原因)陷阱。它们是由 cpu 内部生成的某些事件引起的。它们可以是可预见的,例如除以 0 或溢出,也可以是有些不可预测的,例如堆栈溢出(这里没有双关语;))或页面错误(cpu 生成的地址属于不存在的页面)。它们导致相同的处理机制:CPU 停止指令序列并跳转到某处的中断处理程序。

时间中断在精确的时间点出现,但 cpu 时钟与挂钟不同步,因此您无法准确预测中断将在哪条指令发生。因此,它们被认为是异步的。想一想,如果中断可以在某条指令中发生,但也可以在前一条或下一条指令中发生,那么它就是异步的。

异步属性意味着在发出中断时您不能假设任何有关先前上下文的信息。对于溢出或页面错误,您可以获得有关事件的信息以确定发生了什么(例如引发页面错误的地址是什么,或者要添加哪些数字会产生陷阱)但是当硬件中断 cpu 时,您的进程通常与产生中断的事件完全无关。在您进行某些计算时可能会发生磁盘就绪中断,因此您无法从之前的堆栈帧中获得任何有用信息。

有一类特殊的陷阱(同步中断)很有趣,因为它们确实是由希望它们发生的程序产生的,它们是软件中断(或软件陷阱)这是一类同步中断用于获取系统服务(它们通常称为系统陷阱或系统调用)它们需要完全隔离(出于保护目的)系统调用之前的环境,但它们允许将任意数量的信息传递给内核.

关于linux - 时间片是同步的还是异步的,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56855892/

相关文章:

node.js - 如何调试 NodeJS 进程保持事件的原因

android - 快速删除Android中超过30000张图片的文件夹

python - 允许用户 www-data (apache) 从 CGI 脚本调用需要 root 权限的 python 脚本

c - Linux:给定一个ID,检查它的PID或TID是否在C中

linux - Squid 代理服务器管理界面

asp.net - Web 应用程序中无需等待的异步 HttpWebRequest

linux - 您如何向 bash 请求当前选项?

javascript - Node.js 异步数组迭代

c - 操作系统如何保证安全?

Python os.path.dirname 更改目录时返回意外路径