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切换用户栈
-
吞吐量 响应时间