L10用户级线程

首先:什么是用户级线程?对应的,什么是内核级线程?

用户级:

  • 我的理解就是,这个线程的管理者是我们自己、数据结构TCB都是我们自己创建的,并未通过操作系统的管理;

  • 举个例子:我们可以完全不通过操作系统,单纯通过一个进程里面的函数之间的用户级跳转,不使用系统调用完成类似线程之间切换的操作

    我们通过Create()函数实现创建一个用户级线程,使用Yileld()函数实现函数之间的跳转
    为了完成这个目的,首先我们要设置栈空间->第一个问题:
    两个线程设置一个栈还是两个栈?

    下图中的过程是设置一个栈的流程,当D()函数内的Yield执行jmp到B()204处,B函数执行结束进行弹栈!地址为D()函数内的404处!,两个线程执行顺序完全混乱!
    在这里插入图片描述
    下图:设置两个栈的流程,当执行到函数D()的Yield中后,保存当前进程esp位置并切换到另一个进程的esp指针位置,继续执行,完成跳转任务;
    注意:并不需要在Yield函数中实现jmp,如果图中jmp到204处,B()函数执行完成弹栈,弹出的还是204,就有点小问题,如果不加jmp,D()函数中的Yeild()搞定执行到 } 时弹栈,直接弹出204,OK!
    在这里插入图片描述

区别?

我们知道:对于操作系统的线程管理是这样的:
对于同一进程的线程之间不共享栈

这与我们刚刚实现的用户级线程的区别在哪里呢?
①线程切换不涉及内核,也不涉及调度,就是单纯的Yeild流程上的实现
②这里的TCB数据结构并非内核级的,使我们自己实现的;
③在操作系统看来,我们的多线程就是一个进程,如果有任何一个未考虑到的IO切换,会使操作系统对当前整个进程进行阻塞,所有线程全都玩完~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值