内核极线程基础

内核级线程的切换

  • 和用户级线程的比较

用户级线程是从一个栈到两个栈
而核心级线程是从一套栈到两套栈,因为核心级线程在用户态跑的时候用的是用户栈,当它进入内核之后,用的是内核栈,所以是一套一套的栈

用户级线程切换是TCB切,然后根据TCB切换用户栈
核心级线程切换是TCB切,然后根据TCB切换一套栈,用户栈切,内核栈也切

  • 用户栈和内核栈的关联
    进入内核就会用到内核栈,进入内核的为一方法就是中断

起先是在用户态中执行。在用户栈中折腾,一旦有了中断就会进入内核,启用内核栈,内核栈关联用户栈
在这里插入图片描述
所有中断(时钟,外设,INT指令)都能引起上述切换
中断(硬件)有一次帮助了操作系统

举例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

内核级线程的Create

首先进行简要的思路:创建线程要创建成能切换的样子,所以要有用户栈,有内核栈,有TCB,完成用户栈和内核栈的关联,完成TCB和内核栈的关联

如下图
首先申请一段内存作为TCB,再申请一段内存作为内核栈
然后把内核栈的东西初始化
怎么初始化?
可以申请一段用户态内存作为用户栈,然后把内核栈的指针置好就可以了
然后你想执行哪条指令,那个弹出地址你也已经读进来了,把这些写好,CS也修改下就好了,实际上CS是0f,然后TCB关联内核栈,等等这些都弄好
弄好之后,现在TCB的关联的esp指向下面的中断出口,
然后TCB入栈,TCB的状态已经就绪,一切都准备好了
一旦发生切换
TCB切,内核栈也切了

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值