我试图在运行User处理器的旧板上从Supervisor模式切换到ARM7TDMI模式。它有七种运行模式:用户模式、FIQ模式、IRQ模式、监督模式、中止模式、未定义模式和系统模式。用户是唯一的非优先模式。我希望进入主管模式。我使用qemu来模拟这个板,也使用Gnu GCC编译器工具链。我的板上也有Linux内核。
从处理器手册的技术文档中我可以看到,我需要生成一个SWI ( Software )。这是医生们说的
4.13节
The software interrupt instruction is used to enter Supervisor mode in a controlled
我一直在研究Linux内核的子系统。在这里,编写的是Linux内核负责上下文切换(允许另一个进程使用CPU)。下面是内核执行上下文切换的步骤:
CPU (实际硬件)基于内部定时器中断当前进程,切换到内核模式,并将控制交给内核。内核记录CPU和内存的当前状态,这对于恢复interrupted.The内核执行前一段时间可能出现的任何任务(例如从输入和输出收集数据,或者I/O,operations).The内核现在准备好让另一个进程运行)是必不可少的。内核分析准备运行的进程列表并选择一个进程。内核为这个新进程准备内存,然后准备CPU。内核告诉CPU新进程的时间切片将持续多长时间。内核将CPU切换到用
我的测试源码是:
volatile int gl = 0;
void * InternalHandler( void * param )
{
for ( int i = 0; i < 100000; ++i ) { ++gl; }
return 0;
}
int main()
{
pthread_t ths[100] = { 0 };
for ( int i = 0; i < 100; ++i)
{
pthread_create( &ths[ i ], 0, InternalHandler, 0 );
}
for ( int i =