← back to blog

os_learn_0

  • Que: 为什么线程要独立的栈

  • Ans: 函数调用时会将下一条指令压栈,我们在线程切换的期间将原有线程执行的函数的下一条指令入栈,跳转到另一个线程,等到另一个线程执行yield想要回到原有的线程的时候也会将自己的下一条指令压栈。跳转后等到ret指令会弹栈,然而线程共用一个栈,弹栈后可能会执行到另一个线程的函数,这是不可允许的。而每个线程独立的栈可以保证某些跳转指令如ret不会跳转到另外一个栈。

  • Que: 多处理器和多核的区别

  • Ans: 多处理器 多个CPU用自己独立的Cache和MMU(映射表),多核用相同的Cache和MMU。多个线程可以使用多核,使用同个映射表。

  • 并行:

  • 并发:

  • 用户级线程:

  • 核心级线程:内核负责切换线程,必须要在用户态和核心态运行,所以必须要有内核栈和用户栈。

  • 用户栈通过中断找到并使用内核栈(INT会压入内核栈原有用户栈的ss,sp,eflags,pc,cs,IRET弹栈)

  • 用户级切换是:找到TCB,切换TCB,切换用户栈。

  • 中断过程:用户栈 中断进入内核栈,找到TCB,切换TCB,切换内核栈,从内核 栈找到关联的用户栈,IRET切换用户栈

  • 吞吐量 响应时间

  • Que: 为什么线程要独立的栈

  • Ans: 函数调用时会将下一条指令压栈,我们在线程切换的期间将原有线程执行的函数的下一条指令入栈,跳转到另一个线程,等到另一个线程执行yield想要回到原有的线程的时候也会将自己的下一条指令压栈。跳转后等到ret指令会弹栈,然而线程共用一个栈,弹栈后可能会执行到另一个线程的函数,这是不可允许的。而每个线程独立的栈可以保证某些跳转指令如ret不会跳转到另外一个栈。

  • Que: 多处理器和多核的区别

  • Ans: 多处理器 多个CPU用自己独立的Cache和MMU(映射表),多核用相同的Cache和MMU。多个线程可以使用多核,使用同个映射表。

  • 并行:

  • 并发:

  • 用户级线程:

  • 核心级线程:内核负责切换线程,必须要在用户态和核心态运行,所以必须要有内核栈和用户栈。

  • 用户栈通过中断找到并使用内核栈(INT会压入内核栈原有用户栈的ss,sp,eflags,pc,cs,IRET弹栈)

  • 用户级切换是:找到TCB,切换TCB,切换用户栈。

  • 中断过程:用户栈 中断进入内核栈,找到TCB,切换TCB,切换内核栈,从内核 栈找到关联的用户栈,IRET切换用户栈

  • 吞吐量 响应时间

$ ls posts --tag os ← explore more in terminal