2、多线程、多进程

本文介绍了多线程的动机,由于进程切换代价高,线程应运而生,仅切换代码而不切换内存映射表。线程切换涉及TCB和栈的保存与恢复。接着探讨了内核级线程,为解决线程在内核出错阻塞问题,引入内核栈,通过中断处理和TCB切换实现在用户栈和内核栈之间的切换,实现真正并行运行。
摘要由CSDN通过智能技术生成

动机

当多个程序的联系很紧密,需要共用很多内存空间一起完成功能时,进程间切换要切代码还要切换内存映射表,代价很大。能不能只进行代码切换而不切映射表呢?于是引出了线程的概念:不单独分配内存映射表但是可以允许CPU在其间来回切换的程序即是一个线程,它与别的线程公用一套内存映射表。

线程的切换

由线程的引出可以知道,线程的切换便是进程切换过程的指令切换。
要切出去需要为线程创建一个数据结构TCB(Thread control block)把自己当前执行状态保存下来。要能切回来则需要为每一个线程准备一个自己的栈。
所以切换需要切TCB和线程栈,而创建线程需要创建线程自己的TCB和栈,并将二者关联起来。

内核级线程

线程可以完成切换了,但是若线程在执行中进入计算即内核并且出错被阻塞了,它在错误修复在内核中执行完毕推出内核态之前一直被卡死,别的线程也如果需要它的资源也一直卡死,并发性没了(比如浏览器卡死不动多半就是这个原因)。
引入核心级线程的好处还有可以利用多个处理器充分利用起来实现真正的并行运行。(不进入内核操作系统不会为它分配核心)
进入内核要能正常运行也必须为它创建一个内核栈,所以只需要从一个TCB关联一个栈,两个栈之间切换扩展到一个TCB关联一套栈(用户栈和内核栈),在两套栈之间切换即可。
具体为:
进入内核必须要靠中断
中断进入后,万一要引发切换则需要先找到下一个要执行的TCB完成TCB切换࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值