繁体   English   中英

线程编程中的堆栈组织

[英]Stack organization in thread programming

我正在用C ++ / assembly和我自己的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);  

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM