切换上下文时 cmd 中的光标跳转
Cursor jumping in cmd when switching context
我在手动切换上下文时遇到问题。我通过手动保存堆栈段和堆栈指针并恢复它们来使用汇编代码在 C 中实现多线程内核。简单的任务可以工作,但尝试执行代码中更深层次的功能表现不佳。发生的事情是 cmd.exe
中的光标,其中程序 运行 开始从左上角跳到左下角,代码将自己覆盖。
你能推荐任何可以做类似事情的东西吗?是什么让光标一直向上移动?
考虑到 "cmd.exe",我假设您 运行 您的 "kernel" 作为 Windows 中的用户模式程序。
在那种情况下,怀疑是堆栈保护页面。 Windows 不为整个堆栈分配 RAM;在分配的 RAM 的末尾,有一页会触发页面错误。 Windows 拦截这个页面错误,增加堆栈,然后继续,就好像堆栈已经分配了内存一样。这在很大程度上取决于您 而不是 将堆栈增加超过一页。
如果您手动扰乱堆栈,保护页可能会损坏并且可能会发生奇怪的事情。你不能让两个内核(Windows 和你自己的)管理同一个堆栈。
我在手动切换上下文时遇到问题。我通过手动保存堆栈段和堆栈指针并恢复它们来使用汇编代码在 C 中实现多线程内核。简单的任务可以工作,但尝试执行代码中更深层次的功能表现不佳。发生的事情是 cmd.exe
中的光标,其中程序 运行 开始从左上角跳到左下角,代码将自己覆盖。
你能推荐任何可以做类似事情的东西吗?是什么让光标一直向上移动?
考虑到 "cmd.exe",我假设您 运行 您的 "kernel" 作为 Windows 中的用户模式程序。
在那种情况下,怀疑是堆栈保护页面。 Windows 不为整个堆栈分配 RAM;在分配的 RAM 的末尾,有一页会触发页面错误。 Windows 拦截这个页面错误,增加堆栈,然后继续,就好像堆栈已经分配了内存一样。这在很大程度上取决于您 而不是 将堆栈增加超过一页。
如果您手动扰乱堆栈,保护页可能会损坏并且可能会发生奇怪的事情。你不能让两个内核(Windows 和你自己的)管理同一个堆栈。