我手动上下文切换有问题。我正在使用汇编代码在C中实现带有多线程的内核,方法是手动保存堆栈段和堆栈指针并恢复它们。简单的任务可以工作,但是尝试执行放在代码中更深层次的函数并不是很好。发生的事情是,正在运行程序的cmd.exe
中的光标从左上角开始跳转到左下角,代码自行编写。
你能提出任何可以做类似事情的建议吗?是什么让光标一直向上?
答案 0 :(得分:0)
考虑到“cmd.exe”,我假设您在Windows中将“内核”作为用户模式程序运行。
在这种情况下,嫌疑人是堆栈保护页面。 Windows不为完整堆栈分配RAM;在分配的RAM的末尾有一个页面触发页面错误。 Windows拦截此页面错误,增加堆栈,然后继续,就像堆栈已经分配了内存一样。这关键取决于你不将堆栈增加多个页面。
如果您手动搞乱堆栈,防护页面可能会损坏并且可能会发生奇怪的事情。你不能有两个内核(Windows和你自己的)管理同一个堆栈。