正如我之前所理解的,每个进程都有自己的地址空间,称为虚拟地址空间或程序存储器, 每个进程都有一个名为stack的位置,用于存储函数的局部变量和参数。
此外,当发生异常时,处理器(例如ARM cortex-A)切换到特权模式,然后分支到异常处理程序。
根据我的理解,大多数应用程序在非特权用户模式下运行,并且此模式有一个特殊的寄存器,称为堆栈指针,用于保存堆栈顶部的地址;但这是一个单一的寄存器,实际上不能同时保存多个进程堆栈顶部的地址。你能解释一下究竟发生了什么吗?
答案 0 :(得分:0)
对于所有寄存器,一旦操作系统决定另一个进程运行的时间(“上下文切换”),它就被保存并放在与进程相关的数据结构中;就像它拍摄了当前处理器状态的快照一样。
当再次调度进程时,将恢复所有寄存器(包括指令指针)并继续执行,就像没有发生任何事情一样。
根据我的理解,大多数应用程序在非特权用户模式下运行,并且此模式有一个特殊的寄存器,称为堆栈指针,用于保存堆栈顶部的地址
堆栈指针不是特定于用户模式,处理器总是拥有(并且可以使用)它,无论模式如何。