操作系统 第十一节 内核级线程 Kernel Threads

文章目录

    • 1 多处理器与多核处理器
    • 2 用户级线程与核心级线程的不同
    • 3 用户栈和内核栈的关联
    • 4 开始内核中的切换 switch_to
    • 5 核心级线程的ThreadCreat
    • 6 用户级线程和核心级线程的对比

1 多处理器与多核处理器

多处理器和多核
操作系统 第十一节 内核级线程 Kernel Threads_第1张图片
多处理器中,每一个处理器都有其对应的MMU(映射表)和Cache(缓存),而多核处理器中,所有的核心共享一个Cache和MMU,核心级多线程在多核处理器中是并行执行的(OS感知不到用户级线程)

2 用户级线程与核心级线程的不同

核心级线程中ThreadCreat是系统调用,内核管理TCB,内核负责切换线程,在用户态中线程由用户栈,到内核态中还需要有内核栈

操作系统 第十一节 内核级线程 Kernel Threads_第2张图片
用户级线程与核心级线程的不同:从一个栈到一套栈,两个栈到两套栈

用户级线程是TCB切换,根据TCB切换用户栈,核心级线程是TCB切换,根据TCB切换内核栈和用户栈

3 用户栈和内核栈的关联

当线程使用中断时需要进入内核中执行任务时,计算机硬件产生内核栈,并存储相关数据,从用户栈切换到内核栈

操作系统 第十一节 内核级线程 Kernel Threads_第3张图片
中断产生对应的内核栈时,存储原先用户栈的栈顶栈底信息,存储用户级线程当前执行的指令的地址CS:IP
操作系统 第十一节 内核级线程 Kernel Threads_第4张图片

所有的中断(时钟,外设,INT指令)都会引起上述切换

4 开始内核中的切换 switch_to

switch_to:仍然是通过TCB找到内核栈指针,然后ret切到某个内核程序,最后再用CS:IP切换到用户程序,cur和next都是TCB

操作系统 第十一节 内核级线程 Kernel Threads_第5张图片
由用户态进入内核态也是通过中断进入

操作系统 第十一节 内核级线程 Kernel Threads_第6张图片

5 核心级线程的ThreadCreat

创建的核心级线程代码:
操作系统 第十一节 内核级线程 Kernel Threads_第7张图片

6 用户级线程和核心级线程的对比

操作系统 第十一节 内核级线程 Kernel Threads_第8张图片

你可能感兴趣的:(操作系统 第十一节 内核级线程 Kernel Threads)