[英]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.