C++ 线程编程中的堆栈组织
我正在用C++/assembly和我自己的线程和PCB类制作操作系统的原始版本 每个线程都有自己的PCB,我可以在其中存储上下文信息。C++ 线程编程中的堆栈组织,c++,multithreading,stack,C++,Multithreading,Stack,我正在用C++/assembly和我自己的线程和PCB类制作操作系统的原始版本 每个线程都有自己的PCB,我可以在其中存储上下文信息。 每个PCB(过程控制块)都有自己的堆栈: unsigned stack[stackSize]; 及 我应该把包装器方法(调用专用线程的run方法)放在堆栈上,但我不知道如何调用它。 (在start()方法中未调用Run,因为start仅将PCB放入调度程序) 我发现这个代码: stack[stackSize - 1] = FP_SEG(thread);
每个PCB(过程控制块)都有自己的堆栈:
unsigned stack[stackSize];
及
我应该把包装器方法(调用专用线程的run方法)放在堆栈上,但我不知道如何调用它。
(在start()方法中未调用Run,因为start仅将PCB放入调度程序)
我发现这个代码:
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);
我不明白为什么这些值会保存到堆栈中的这些点。堆栈组织的具体规则是什么?线程使用所有寄存器的新值创建,这些寄存器必须与线程一起保存在某个位置,以便重新调度线程。就是这个地方。我理解那部分。但是为什么要在这个确切的位置上,以及以后如何调用包装器方法呢?它们必须在某个地方,而且那是一个与任何地方一样好的地方,就在堆栈的底部。只要双方都同意,这没关系。我不知道你指的是什么“包装方法”。
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);