【问题标题】:Stack organization in thread programming线程编程中的堆栈组织
【发布时间】:2016-05-09 08:56:41
【问题描述】:

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

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

【问题讨论】:

    标签: c++ multithreading stack


    【解决方案1】:

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

    【讨论】:

    • 我理解那部分。但是为什么在这个确切的地方,以及稍后如何调用包装器方法?
    • 嗯,他们必须在某个地方,而且那是一个和任何地方一样好的地方,就在堆栈的底部。只要双方同意就没有关系。我不知道你指的是什么“包装方法”。
    猜你喜欢
    • 2014-05-22
    • 1970-01-01
    • 2014-04-22
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2018-09-22
    • 2017-08-15
    相关资源
    最近更新 更多