【发布时间】:2016-05-09 08:56:41
【问题描述】:
我正在用 C++/程序集和我自己的 Thread 和 PCB 类制作原始版本的操作系统。
每个线程都有自己的 PCB,我可以在其中存储上下文信息。
每个 PCB(过程控制块)都有自己的堆栈:
unsigned stack[stackSize];
和
sp, ss and ss pointer:
unsigned sp, ss, bp;
我应该将包装方法(调用专用线程的运行方法)放在堆栈上,但我不明白如何调用它。 (在 start() 方法中没有调用 Run,因为 start 只是将 PCB 放入 Scheduler)
我找到了这段代码:
stack[stackSize - 1] = FP_SEG(thread);
stack[stackSize - 2] = FP_OFF(thread);
stack[stackSize - 5] = 0x200; //PSW, interrupt flag = 1
stack[stackSize - 6] = FP_SEG(Thread::wrapper);
stack[stackSize - 7] = FP_OFF(Thread::wrapper);
我不明白为什么这些值会保存到堆栈中的这些位置。堆栈组织的具体规则是什么?
【问题讨论】:
标签: c++ multithreading stack