警告:我的问题更多的是理论性的,而不是实际性的。不幸的是,我没有通过谷歌搜索找到太多信息。
出于教育目的,已经开始一些基本的 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/