并发编程之始

2018-12-03 09:26:13来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

  从今天开始看《并发编程的艺术》,然后留下学习的笔记,是学习,是提问,是散发思维,是形成自己的知识体系。抱着学习研究的态度,去学习这本书,去深挖一门技术。看完一遍,还有一遍,如此反复。好,废话不多说,马上开始头脑风暴。

上下文切换,时间片,线程调度算法

1  什么是上下文切换,上下文切换的原理是什么? 上下文怎么切换?什么时候会上下文切换?

  在操作系统层面,有一个概念叫模式切换,从用户态到内核态,在我理解来,内核进程是用户态进程所共享的,在实际的ram(ddr3,ddr4)空间中,根据地址映射,不会发生改变,所以在内核态和用户态之间切换,TLB(存在于CPU内部的页表缓存,实际的页表存在于sdram空间中,当然假如TLB miss 的话,就需要从根据cpu拿到的虚地址,

 

根据高几位的页帧号,和页内偏移,发送寻址信号到sdram空间中定位到具体的存储单元)不会刷新。   

  还有就是进程的上下文切换,由于从一个虚拟地址空间到另外一个地址空间,对于多核机器来说,本地core的TLB,应该是除了内核的页表外,都会被刷新,cpu缓存中的数据,也要被清空,设置为invaliad。这就导致,进程切换的时候,很多东西都是未命中,需要重新加载。 那prev进程的现场保存到哪里呢? 据说是保存在内核进程的堆栈中。http://www.cnblogs.com/wz19860913/archive/2010/05/25/1742583.html

 

  线程的上下文切换,  省略了进程切换时全局页表目录的切换,但是还是会把用户数据,状态字段存到pcb中。

  什么时候会触发上下文切换? (这里的疑问??)

      我的猜测,只有在系统时钟周期到了,或者由于中断,陷入内核态,才会触发调度算法。

     欢迎各位大佬,来踩两脚,批评我的不对之处。哎,《并发编程的艺术》第一节就那么让人头疼。

  

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Mybatis-generator生成Service和Controller

下一篇:List集合多次排序