assembly - 正确使用CPU寄存器——调度概念

标签 assembly mips scheduling cpu-registers

警告:我的问题更多的是理论性的,而不是实际性的。不幸的是,我没有通过谷歌搜索找到太多信息。

出于教育目的,已经开始一些基本的 MIPS32 汇编编程,我似乎无法理解一些东西: 如果有人用MIPS汇编编写一个程序,并且该程序在MIPS多任务操作系统上运行,那么进程调度是如何工作的?

1) 例如,在多任务环境中,当必须切换到另一个进程时,操作系统是否将寄存器的值存储在内存中的某个位置,然后删除寄存器以便下一个进程可以使用它们? 2) 寄存器的正确用途是什么?所有临时寄存器($t0-$t7)都可以随时使用吗?我可以随时使用其他一些寄存器吗?

最佳答案

对于1),是的,当从进程A切换到进程B时,操作系统必须将A的寄存器存储在内存中,并从类似的存储位置恢复B的寄存器。

因此,进程会产生一种错觉,认为它完全控制了处理器的完整寄存器集; MIPS 上的所有通用寄存器都可以由进程随意使用(除了为内核保留的寄存器 26 和 27 之外)。对于寄存器用于临时值的更复杂的约定,这样一个进程中的函数可以正确协作,传递值而不是踩踏彼此的寄存器。

有关 ABI 的详细信息可以在此处找到: http://techpubs.sgi.com/library/dynaweb_docs/0640/SGI_Developer/books/Mpro_n32_ABI/sgi_html/ch02.html

关于assembly - 正确使用CPU寄存器——调度概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26594851/

相关文章:

c - 创建汇编程序的好方法?

java - 在 Java/C/C++ 中创建 MIPS 机器

c - 循环调度程序

c - 整个一个核心专用于单个进程

assembly - DOS.GetSystemTime 函数 2Ch 不准确

汇编:16 位除法

recursion - 使用 MIPS 程序集的递归函数

c - 在 MIPS 中扩展或避免 addiu

prolog - 约束逻辑编程调度

c - 我正在尝试将此功能转换为程序集,但我不明白它在做什么