进程与线程-3、内核级线程切换过程
来源:互联网 发布:小米电视怎么样 知乎 编辑:程序博客网 时间:2024/06/05 04:51
参考哈工大李治军老师公开课。
内核级线程的TCB结构
用户级线程是使用对于每个线程设置一个TCB栈来存储程序执行过程中的地址的跳转,通过切换TCB栈来实现线程的切换。
而内核级线程是用户程序执行中断INT进入内核,进行内核执行线程。而内核线程执行时可能会申请I/O操作等待I/O响应,这时该线程就需要等待,这时内核会自动切换到其他线程执行,以免CPU资源的浪费。那么这种切换的基础就是把TCB进行扩展,不但要记录用户级线程的调用情况,而且要记录内核中线程的相关情况。通过中断(INT)进入切换到该线程的内核栈;通过IRET进行中断返回,切换到用户栈。
图一:TCB的扩展
下面是一个实际的例子,线程基址是100,然后执行A()函数,调用了B(),在B()中调用了read()开启中断,进入内核,TCB也由用户栈切换到内核栈,内核栈用ss:sp记录下该线程用户栈的相关地址信息便于后期的中断返回
图二:用户栈-内核栈切换示例
当进行核心级线程程序时,可能需要等待IO相应,这时操作系统会通过switch_to(cur,next)切换到其他线程,进行其他认任务。在switch_to(cur, next)中核心的操作是esp指针(指向当前执行线程的TCB栈)的切换,从而完成一个线程到另一个线程的切换。
图三:内核线程之间的切换
下面用另一幅图来更好的展示内核级线程切换的过程:
图四:内核级线程切换的过程
最后,用图表的形式将用户级线程和核心级线程做个比较:
图五:用户VS内核
阅读全文
0 0
- 进程与线程-3、内核级线程切换过程
- 进程与线程-2、用户级线程切换过程
- 操作系统之进程与线程3——内核级线程及切换(未完成)
- linux内核--进程与线程
- linux内核--进程与线程
- 线程上下文切换与进程上下文切换
- 切换进程 切换线程
- 进程、线程 :系统资源 与 上下文切换
- 操作系统 3. 线程基本概念; 线程于进程的比较; 用户线程与内核线程; 线程模型
- 内核线程与普通进程的区别
- 进程与内存1-内核线程建立
- 线程与进程在内核中的实现
- linux常见进程与内核线程
- Linux进程切换以及内核线程的返回值
- Linux进程切换以及内核线程的返回值
- Linux进程切换以及内核线程的返回值
- 进程与线程线程
- 操作系统之进程与线程2——用户级线程及其切换
- 【剑指offer】面试题9:斐波那契数列
- Django 1.11 使用paginator,Django自带分页器
- raw转bmp
- Bzoj 1798 [Ahoi2009]Seq 维护序列seq【线段树+多标记Lazy】
- mybatis ${} #{} 传值
- 进程与线程-3、内核级线程切换过程
- C# 事件 订阅与发布
- RTMP与HLS压力测试工具安装与配置
- Java8系列之重新认识HashMap 2016/06/27 | 分类: 基础技术 | 9 条评论 | 标签: HashMap, java8 分享到: 67 原文出处: 前利 简介 Java为数
- git error 解决方案
- Mysql index使用事项
- String、StringBuilder、StringBuffer的区别
- hadoop namenode深度剖析
- JavaScript中append()和innerHTML的一点自己见解