我需要帮助理解下面的代码。它是用C ++(BC31编译器)编写的线程工作和上下文切换的一个例子。
我理解为什么PCB存在以便切换上下文(特别是保留SS和SP寄存器)而且我也明白它通过使用这个程序可以 回到它被打断的地步,就像什么都没发生一样。关于代码,我理解宏DISABLE_INTERRUPT和ENABLE_INTERRUPT用于什么 (忽略代码中某些敏感部分的中断)。我也理解createProcess函数,其中创建了每个线程的本地堆栈 将线程的标志,段和偏移写入其中。在函数timerISR中,我理解上下文切换的部分(写入和读取SS和SP)。
对于其余的代码,我不能说我理解它。函数returnNextThread(),initNewRoutine(),returnOldRoutine(),finishThread()是什么意思?
然而,我最感兴趣的是这个程序是如何运行的,这里实际发生了什么,以便这三个函数在运行时交织......
这一切如何运作? 我真的很感激一个简单的解释。
SELECT
答案 0 :(得分:4)
那可怕的代码(老了不是借口)。无论如何,timerISR
每隔一段时间就会触发并切换到由returnNextThread
(基本上是调度程序)确定的相应线程。
finishThread
显然通过标记完成并强制进行上下文切换来结束线程。哪个部分不清楚?
initNewRoutine
和returnOldRoutine
只需安装和卸载计时器ISR(不幸的命名)。
答案 1 :(得分:2)
这看起来像是在非常老的CPU上实现的本地任务调度程序。你可能需要一个非常古老的系统来运行它。
在高级别,代码的功能如下: