C++ 线程编程中的堆栈组织

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);

我正在用C++/assembly和我自己的线程和PCB类制作操作系统的原始版本

每个线程都有自己的PCB,我可以在其中存储上下文信息。
每个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);