在线程上下文切换期间存储的程序计数器在哪里?

时间:2017-12-15 02:23:29

标签: c multithreading operating-system

当我呼叫pthread_yieldpthread_block并且CPU执行上下文切换

程序计数器是存储在线程堆栈(与其临时寄存器一起)还是存储在线程控制块中(与堆栈指针一起)

2 个答案:

答案 0 :(得分:3)

通常它应该在TCB中。但我相信它是特定于实现的。 TCB中包含的信息示例如下:

  • 线程标识符:为每个新线程分配唯一ID(tid)
  • 堆栈指针:指向进程中线程堆栈的内容
  • 程序计数器
  • 线程的状态(运行,准备,等待,启动,完成)
  • 线程的注册值
  • 指向线程所在进程的进程控制块(PCB)的指针

答案 1 :(得分:0)

引自VxWorks:APPLICATION PROGRAMMER’S GUIDE,第76页:

  

每个任务都有自己的上下文,即每次内核运行时,任务看到的CPU环境和系统资源。在上下文切换中,任务的上下文保存在任务控制块(TCB)中。

     

任务的上下文包括:

     

■执行的线程;也就是说,任务的程序计数器

     

■任务的虚拟内存上下文(如果包含进程支持)

     

■CPU寄存器和(可选)协处理器寄存器   用于动态变量和函数调用的堆栈

     

■标准输入,输出和错误的I / O分配

     

■延迟计时器

     

■时间片计时器

     

■内核控制结构

     

■信号处理程序

     

■任务变量

     

■错误状态(错误)

     

■调试和性能监控值