线程编程中的堆栈组织

Stack organization in thread programming

本文关键字:堆栈 编程 线程      更新时间:2023-10-16

我正在C++/汇编以及我自己的线程和PCB类中制作原始版本的操作系统。

每个线程都有自己的PCB,我可以在其中存储上下文信息。
每个PCB(过程控制块)都有自己的堆栈:

unsigned stack[stackSize];

sp, ss and ss pointer:  
unsigned sp, ss, bp;  

我应该将包装方法(调用专用线程的运行方法)放在堆栈上,但我不明白它将如何调用。(在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);  

我不明白为什么这些值被保存到堆栈中的这些位置。堆栈组织的特定规则是什么?

使用

所有这些寄存器的新值创建线程,这些值必须与线程一起保存在某个位置,以便可以重新调度线程。就是这个地方。